Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Zolotarev <alex@mapswithme.com>2014-09-07 10:24:20 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:26:20 +0300
commit216e231fc90c3ef607966cc3c14a0f8720d5fe6a (patch)
tree03c72f394d1cf36b14061cefcafb853e2f0d3bf7
parent3e05e9dc8619195714d13505c125327879adcebc (diff)
[boost] Updated headers to 1.56
-rw-r--r--3party/boost/boost/accumulators/accumulators_fwd.hpp1
-rw-r--r--3party/boost/boost/accumulators/numeric/functional.hpp24
-rw-r--r--3party/boost/boost/accumulators/numeric/functional/valarray.hpp4
-rw-r--r--3party/boost/boost/accumulators/numeric/functional/vector.hpp2
-rw-r--r--3party/boost/boost/accumulators/numeric/functional_fwd.hpp8
-rw-r--r--3party/boost/boost/accumulators/statistics/covariance.hpp8
-rw-r--r--3party/boost/boost/accumulators/statistics/density.hpp14
-rw-r--r--3party/boost/boost/accumulators/statistics/error_of_mean.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/extended_p_square.hpp2
-rw-r--r--3party/boost/boost/accumulators/statistics/extended_p_square_quantile.hpp14
-rw-r--r--3party/boost/boost/accumulators/statistics/kurtosis.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/mean.hpp10
-rw-r--r--3party/boost/boost/accumulators/statistics/median.hpp12
-rw-r--r--3party/boost/boost/accumulators/statistics/moment.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/p_square_cumul_dist.hpp6
-rw-r--r--3party/boost/boost/accumulators/statistics/p_square_quantile.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/peaks_over_threshold.hpp26
-rw-r--r--3party/boost/boost/accumulators/statistics/pot_quantile.hpp2
-rw-r--r--3party/boost/boost/accumulators/statistics/pot_tail_mean.hpp2
-rw-r--r--3party/boost/boost/accumulators/statistics/rolling_mean.hpp200
-rw-r--r--3party/boost/boost/accumulators/statistics/rolling_moment.hpp113
-rw-r--r--3party/boost/boost/accumulators/statistics/rolling_sum.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/rolling_variance.hpp247
-rw-r--r--3party/boost/boost/accumulators/statistics/skewness.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/tail_mean.hpp10
-rw-r--r--3party/boost/boost/accumulators/statistics/tail_variate_means.hpp2
-rw-r--r--3party/boost/boost/accumulators/statistics/variance.hpp10
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_covariance.hpp8
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_density.hpp14
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_extended_p_square.hpp2
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_kurtosis.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_mean.hpp10
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_median.hpp12
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_moment.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp6
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_p_square_quantile.hpp2
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp28
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_skewness.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_tail_mean.hpp6
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_tail_quantile.hpp2
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_tail_variate_means.hpp4
-rw-r--r--3party/boost/boost/accumulators/statistics/weighted_variance.hpp10
-rw-r--r--3party/boost/boost/algorithm/clamp.hpp40
-rw-r--r--3party/boost/boost/algorithm/cxx11/iota.hpp4
-rw-r--r--3party/boost/boost/algorithm/cxx11/is_permutation.hpp58
-rw-r--r--3party/boost/boost/algorithm/cxx14/equal.hpp80
-rw-r--r--3party/boost/boost/algorithm/cxx14/is_permutation.hpp178
-rw-r--r--3party/boost/boost/algorithm/cxx14/mismatch.hpp19
-rw-r--r--3party/boost/boost/algorithm/searching/detail/bm_traits.hpp8
-rw-r--r--3party/boost/boost/algorithm/string/concept.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/detail/find_format.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/detail/find_format_all.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/detail/find_format_store.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/detail/find_iterator.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/detail/finder.hpp9
-rw-r--r--3party/boost/boost/algorithm/string/detail/finder_regex.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/detail/formatter.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/detail/util.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/erase.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/find.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/find_format.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/find_iterator.hpp11
-rw-r--r--3party/boost/boost/algorithm/string/finder.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/formatter.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/iter_find.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/predicate.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/regex.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/replace.hpp2
-rw-r--r--3party/boost/boost/algorithm/string/sequence_traits.hpp73
-rw-r--r--3party/boost/boost/algorithm/string/std/list_traits.hpp17
-rw-r--r--3party/boost/boost/algorithm/string/std/rope_traits.hpp20
-rw-r--r--3party/boost/boost/algorithm/string/std/slist_traits.hpp16
-rw-r--r--3party/boost/boost/algorithm/string/std/string_traits.hpp8
-rw-r--r--3party/boost/boost/algorithm/string/trim.hpp2
-rw-r--r--3party/boost/boost/align.hpp31
-rw-r--r--3party/boost/boost/align/align.hpp86
-rw-r--r--3party/boost/boost/align/aligned_alloc.hpp100
-rw-r--r--3party/boost/boost/align/aligned_allocator.hpp287
-rw-r--r--3party/boost/boost/align/aligned_allocator_adaptor.hpp325
-rw-r--r--3party/boost/boost/align/aligned_allocator_adaptor_forward.hpp38
-rw-r--r--3party/boost/boost/align/aligned_allocator_forward.hpp38
-rw-r--r--3party/boost/boost/align/aligned_delete.hpp56
-rw-r--r--3party/boost/boost/align/aligned_delete_forward.hpp35
-rw-r--r--3party/boost/boost/align/alignment_of.hpp78
-rw-r--r--3party/boost/boost/align/alignment_of_forward.hpp36
-rw-r--r--3party/boost/boost/align/detail/address.hpp27
-rw-r--r--3party/boost/boost/align/detail/addressof.hpp32
-rw-r--r--3party/boost/boost/align/detail/align.hpp38
-rw-r--r--3party/boost/boost/align/detail/align_cxx11.hpp20
-rw-r--r--3party/boost/boost/align/detail/aligned_alloc.hpp53
-rw-r--r--3party/boost/boost/align/detail/aligned_alloc_android.hpp35
-rw-r--r--3party/boost/boost/align/detail/aligned_alloc_macos.hpp48
-rw-r--r--3party/boost/boost/align/detail/aligned_alloc_msvc.hpp35
-rw-r--r--3party/boost/boost/align/detail/aligned_alloc_posix.hpp45
-rw-r--r--3party/boost/boost/align/detail/aligned_alloc_sunos.hpp35
-rw-r--r--3party/boost/boost/align/detail/alignment_of.hpp29
-rw-r--r--3party/boost/boost/align/detail/alignment_of_clang.hpp25
-rw-r--r--3party/boost/boost/align/detail/alignment_of_codegear.hpp25
-rw-r--r--3party/boost/boost/align/detail/alignment_of_cxx11.hpp22
-rw-r--r--3party/boost/boost/align/detail/alignment_of_gcc.hpp25
-rw-r--r--3party/boost/boost/align/detail/alignment_of_msvc.hpp30
-rw-r--r--3party/boost/boost/align/detail/is_aligned.hpp29
-rw-r--r--3party/boost/boost/align/detail/is_alignment.hpp27
-rw-r--r--3party/boost/boost/align/detail/is_alignment_const.hpp27
-rw-r--r--3party/boost/boost/align/detail/max_align.hpp27
-rw-r--r--3party/boost/boost/align/detail/max_count_of.hpp27
-rw-r--r--3party/boost/boost/align/detail/min_size.hpp27
-rw-r--r--3party/boost/boost/align/detail/padded.hpp24
-rw-r--r--3party/boost/boost/align/detail/type_traits.hpp90
-rw-r--r--3party/boost/boost/align/is_aligned.hpp53
-rw-r--r--3party/boost/boost/aligned_storage.hpp50
-rw-r--r--3party/boost/boost/any.hpp74
-rw-r--r--3party/boost/boost/archive/add_facet.hpp2
-rw-r--r--3party/boost/boost/archive/archive_exception.hpp10
-rw-r--r--3party/boost/boost/archive/basic_archive.hpp7
-rw-r--r--3party/boost/boost/archive/basic_binary_iarchive.hpp22
-rw-r--r--3party/boost/boost/archive/basic_binary_iprimitive.hpp6
-rw-r--r--3party/boost/boost/archive/basic_binary_oarchive.hpp22
-rw-r--r--3party/boost/boost/archive/basic_binary_oprimitive.hpp9
-rw-r--r--3party/boost/boost/archive/basic_streambuf_locale_saver.hpp4
-rw-r--r--3party/boost/boost/archive/basic_text_iarchive.hpp22
-rw-r--r--3party/boost/boost/archive/basic_text_iprimitive.hpp17
-rw-r--r--3party/boost/boost/archive/basic_text_oarchive.hpp24
-rw-r--r--3party/boost/boost/archive/basic_text_oprimitive.hpp87
-rw-r--r--3party/boost/boost/archive/basic_xml_archive.hpp2
-rw-r--r--3party/boost/boost/archive/basic_xml_iarchive.hpp22
-rw-r--r--3party/boost/boost/archive/basic_xml_oarchive.hpp17
-rw-r--r--3party/boost/boost/archive/binary_iarchive.hpp45
-rw-r--r--3party/boost/boost/archive/binary_iarchive_impl.hpp20
-rw-r--r--3party/boost/boost/archive/binary_oarchive.hpp4
-rw-r--r--3party/boost/boost/archive/binary_oarchive_impl.hpp20
-rw-r--r--3party/boost/boost/archive/binary_wiarchive.hpp39
-rw-r--r--3party/boost/boost/archive/binary_woarchive.hpp4
-rw-r--r--3party/boost/boost/archive/codecvt_null.hpp2
-rw-r--r--3party/boost/boost/archive/detail/archive_serializer_map.hpp2
-rw-r--r--3party/boost/boost/archive/detail/auto_link_archive.hpp2
-rw-r--r--3party/boost/boost/archive/detail/auto_link_warchive.hpp2
-rw-r--r--3party/boost/boost/archive/detail/basic_archive_impl.hpp2
-rw-r--r--3party/boost/boost/archive/detail/basic_config.hpp2
-rw-r--r--3party/boost/boost/archive/detail/basic_iarchive.hpp13
-rw-r--r--3party/boost/boost/archive/detail/basic_iserializer.hpp2
-rw-r--r--3party/boost/boost/archive/detail/basic_oarchive.hpp16
-rw-r--r--3party/boost/boost/archive/detail/basic_oserializer.hpp2
-rw-r--r--3party/boost/boost/archive/detail/basic_pointer_iserializer.hpp5
-rw-r--r--3party/boost/boost/archive/detail/basic_pointer_oserializer.hpp2
-rw-r--r--3party/boost/boost/archive/detail/basic_serializer.hpp2
-rw-r--r--3party/boost/boost/archive/detail/basic_serializer_map.hpp2
-rw-r--r--3party/boost/boost/archive/detail/check.hpp30
-rw-r--r--3party/boost/boost/archive/detail/common_iarchive.hpp2
-rw-r--r--3party/boost/boost/archive/detail/common_oarchive.hpp2
-rw-r--r--3party/boost/boost/archive/detail/decl.hpp2
-rw-r--r--3party/boost/boost/archive/detail/helper_collection.hpp111
-rw-r--r--3party/boost/boost/archive/detail/interface_iarchive.hpp2
-rw-r--r--3party/boost/boost/archive/detail/interface_oarchive.hpp2
-rw-r--r--3party/boost/boost/archive/detail/iserializer.hpp216
-rw-r--r--3party/boost/boost/archive/detail/oserializer.hpp28
-rw-r--r--3party/boost/boost/archive/detail/polymorphic_iarchive_route.hpp2
-rw-r--r--3party/boost/boost/archive/detail/polymorphic_oarchive_route.hpp2
-rw-r--r--3party/boost/boost/archive/detail/register_archive.hpp2
-rw-r--r--3party/boost/boost/archive/detail/utf8_codecvt_facet.hpp20
-rw-r--r--3party/boost/boost/archive/dinkumware.hpp2
-rw-r--r--3party/boost/boost/archive/impl/basic_binary_iarchive.ipp14
-rw-r--r--3party/boost/boost/archive/impl/basic_binary_iprimitive.ipp1
-rw-r--r--3party/boost/boost/archive/impl/basic_binary_oarchive.ipp2
-rw-r--r--3party/boost/boost/archive/impl/basic_binary_oprimitive.ipp1
-rw-r--r--3party/boost/boost/archive/impl/basic_text_iarchive.ipp7
-rw-r--r--3party/boost/boost/archive/impl/basic_text_iprimitive.ipp16
-rw-r--r--3party/boost/boost/archive/impl/basic_text_oarchive.ipp2
-rw-r--r--3party/boost/boost/archive/impl/basic_text_oprimitive.ipp5
-rw-r--r--3party/boost/boost/archive/impl/basic_xml_grammar.hpp7
-rw-r--r--3party/boost/boost/archive/impl/xml_iarchive_impl.ipp6
-rw-r--r--3party/boost/boost/archive/impl/xml_oarchive_impl.ipp2
-rw-r--r--3party/boost/boost/archive/impl/xml_wiarchive_impl.ipp19
-rw-r--r--3party/boost/boost/archive/impl/xml_woarchive_impl.ipp39
-rw-r--r--3party/boost/boost/archive/iterators/base64_exception.hpp2
-rw-r--r--3party/boost/boost/archive/iterators/base64_from_binary.hpp11
-rw-r--r--3party/boost/boost/archive/iterators/binary_from_base64.hpp7
-rw-r--r--3party/boost/boost/archive/iterators/dataflow.hpp4
-rw-r--r--3party/boost/boost/archive/iterators/dataflow_exception.hpp2
-rw-r--r--3party/boost/boost/archive/iterators/escape.hpp13
-rw-r--r--3party/boost/boost/archive/iterators/head_iterator.hpp2
-rw-r--r--3party/boost/boost/archive/iterators/insert_linebreaks.hpp6
-rw-r--r--3party/boost/boost/archive/iterators/istream_iterator.hpp6
-rw-r--r--3party/boost/boost/archive/iterators/mb_from_wchar.hpp6
-rw-r--r--3party/boost/boost/archive/iterators/ostream_iterator.hpp2
-rw-r--r--3party/boost/boost/archive/iterators/remove_whitespace.hpp21
-rw-r--r--3party/boost/boost/archive/iterators/transform_width.hpp17
-rw-r--r--3party/boost/boost/archive/iterators/unescape.hpp18
-rw-r--r--3party/boost/boost/archive/iterators/wchar_from_mb.hpp6
-rw-r--r--3party/boost/boost/archive/iterators/xml_escape.hpp5
-rw-r--r--3party/boost/boost/archive/iterators/xml_unescape.hpp10
-rw-r--r--3party/boost/boost/archive/iterators/xml_unescape_exception.hpp2
-rw-r--r--3party/boost/boost/archive/polymorphic_binary_iarchive.hpp6
-rw-r--r--3party/boost/boost/archive/polymorphic_binary_oarchive.hpp4
-rw-r--r--3party/boost/boost/archive/polymorphic_iarchive.hpp15
-rw-r--r--3party/boost/boost/archive/polymorphic_oarchive.hpp4
-rw-r--r--3party/boost/boost/archive/polymorphic_text_iarchive.hpp6
-rw-r--r--3party/boost/boost/archive/polymorphic_text_oarchive.hpp4
-rw-r--r--3party/boost/boost/archive/polymorphic_text_wiarchive.hpp6
-rw-r--r--3party/boost/boost/archive/polymorphic_text_woarchive.hpp4
-rw-r--r--3party/boost/boost/archive/polymorphic_xml_iarchive.hpp6
-rw-r--r--3party/boost/boost/archive/polymorphic_xml_oarchive.hpp4
-rw-r--r--3party/boost/boost/archive/polymorphic_xml_wiarchive.hpp6
-rw-r--r--3party/boost/boost/archive/polymorphic_xml_woarchive.hpp4
-rw-r--r--3party/boost/boost/archive/shared_ptr_helper.hpp2
-rw-r--r--3party/boost/boost/archive/text_iarchive.hpp44
-rw-r--r--3party/boost/boost/archive/text_oarchive.hpp22
-rw-r--r--3party/boost/boost/archive/text_wiarchive.hpp43
-rw-r--r--3party/boost/boost/archive/text_woarchive.hpp22
-rw-r--r--3party/boost/boost/archive/tmpdir.hpp2
-rw-r--r--3party/boost/boost/archive/wcslen.hpp2
-rw-r--r--3party/boost/boost/archive/xml_archive_exception.hpp2
-rw-r--r--3party/boost/boost/archive/xml_iarchive.hpp46
-rw-r--r--3party/boost/boost/archive/xml_oarchive.hpp22
-rw-r--r--3party/boost/boost/archive/xml_wiarchive.hpp45
-rw-r--r--3party/boost/boost/archive/xml_woarchive.hpp23
-rw-r--r--3party/boost/boost/asio.hpp2
-rw-r--r--3party/boost/boost/asio/async_result.hpp2
-rw-r--r--3party/boost/boost/asio/basic_datagram_socket.hpp14
-rw-r--r--3party/boost/boost/asio/basic_deadline_timer.hpp2
-rw-r--r--3party/boost/boost/asio/basic_io_object.hpp2
-rw-r--r--3party/boost/boost/asio/basic_raw_socket.hpp2
-rw-r--r--3party/boost/boost/asio/basic_seq_packet_socket.hpp2
-rw-r--r--3party/boost/boost/asio/basic_serial_port.hpp2
-rw-r--r--3party/boost/boost/asio/basic_signal_set.hpp2
-rw-r--r--3party/boost/boost/asio/basic_socket.hpp2
-rw-r--r--3party/boost/boost/asio/basic_socket_acceptor.hpp2
-rw-r--r--3party/boost/boost/asio/basic_socket_iostream.hpp35
-rw-r--r--3party/boost/boost/asio/basic_socket_streambuf.hpp24
-rw-r--r--3party/boost/boost/asio/basic_stream_socket.hpp2
-rw-r--r--3party/boost/boost/asio/basic_streambuf.hpp9
-rw-r--r--3party/boost/boost/asio/basic_streambuf_fwd.hpp2
-rw-r--r--3party/boost/boost/asio/basic_waitable_timer.hpp2
-rw-r--r--3party/boost/boost/asio/buffer.hpp98
-rw-r--r--3party/boost/boost/asio/buffered_read_stream.hpp193
-rw-r--r--3party/boost/boost/asio/buffered_read_stream_fwd.hpp2
-rw-r--r--3party/boost/boost/asio/buffered_stream.hpp34
-rw-r--r--3party/boost/boost/asio/buffered_stream_fwd.hpp2
-rw-r--r--3party/boost/boost/asio/buffered_write_stream.hpp172
-rw-r--r--3party/boost/boost/asio/buffered_write_stream_fwd.hpp2
-rw-r--r--3party/boost/boost/asio/buffers_iterator.hpp2
-rw-r--r--3party/boost/boost/asio/completion_condition.hpp4
-rw-r--r--3party/boost/boost/asio/connect.hpp2
-rw-r--r--3party/boost/boost/asio/coroutine.hpp2
-rw-r--r--3party/boost/boost/asio/datagram_socket_service.hpp12
-rw-r--r--3party/boost/boost/asio/deadline_timer.hpp2
-rw-r--r--3party/boost/boost/asio/deadline_timer_service.hpp2
-rw-r--r--3party/boost/boost/asio/detail/addressof.hpp2
-rw-r--r--3party/boost/boost/asio/detail/array.hpp2
-rw-r--r--3party/boost/boost/asio/detail/array_fwd.hpp2
-rw-r--r--3party/boost/boost/asio/detail/assert.hpp2
-rw-r--r--3party/boost/boost/asio/detail/atomic_count.hpp2
-rw-r--r--3party/boost/boost/asio/detail/base_from_completion_cond.hpp2
-rw-r--r--3party/boost/boost/asio/detail/bind_handler.hpp2
-rw-r--r--3party/boost/boost/asio/detail/buffer_resize_guard.hpp2
-rw-r--r--3party/boost/boost/asio/detail/buffer_sequence_adapter.hpp30
-rw-r--r--3party/boost/boost/asio/detail/buffered_stream_storage.hpp2
-rw-r--r--3party/boost/boost/asio/detail/call_stack.hpp2
-rw-r--r--3party/boost/boost/asio/detail/chrono_time_traits.hpp19
-rw-r--r--3party/boost/boost/asio/detail/completion_handler.hpp2
-rw-r--r--3party/boost/boost/asio/detail/config.hpp188
-rw-r--r--3party/boost/boost/asio/detail/consuming_buffers.hpp2
-rw-r--r--3party/boost/boost/asio/detail/cstdint.hpp2
-rw-r--r--3party/boost/boost/asio/detail/date_time_fwd.hpp2
-rw-r--r--3party/boost/boost/asio/detail/deadline_timer_service.hpp14
-rw-r--r--3party/boost/boost/asio/detail/dependent_type.hpp2
-rw-r--r--3party/boost/boost/asio/detail/descriptor_ops.hpp10
-rw-r--r--3party/boost/boost/asio/detail/descriptor_read_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/descriptor_write_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/dev_poll_reactor.hpp4
-rw-r--r--3party/boost/boost/asio/detail/dev_poll_reactor_fwd.hpp34
-rw-r--r--3party/boost/boost/asio/detail/epoll_reactor.hpp4
-rw-r--r--3party/boost/boost/asio/detail/epoll_reactor_fwd.hpp34
-rw-r--r--3party/boost/boost/asio/detail/event.hpp8
-rw-r--r--3party/boost/boost/asio/detail/eventfd_select_interrupter.hpp2
-rw-r--r--3party/boost/boost/asio/detail/fd_set_adapter.hpp7
-rw-r--r--3party/boost/boost/asio/detail/fenced_block.hpp2
-rw-r--r--3party/boost/boost/asio/detail/function.hpp2
-rw-r--r--3party/boost/boost/asio/detail/gcc_arm_fenced_block.hpp2
-rw-r--r--3party/boost/boost/asio/detail/gcc_hppa_fenced_block.hpp2
-rw-r--r--3party/boost/boost/asio/detail/gcc_sync_fenced_block.hpp2
-rw-r--r--3party/boost/boost/asio/detail/gcc_x86_fenced_block.hpp10
-rw-r--r--3party/boost/boost/asio/detail/handler_alloc_helpers.hpp2
-rw-r--r--3party/boost/boost/asio/detail/handler_cont_helpers.hpp2
-rw-r--r--3party/boost/boost/asio/detail/handler_invoke_helpers.hpp2
-rw-r--r--3party/boost/boost/asio/detail/handler_tracking.hpp2
-rw-r--r--3party/boost/boost/asio/detail/handler_type_requirements.hpp60
-rw-r--r--3party/boost/boost/asio/detail/hash_map.hpp2
-rw-r--r--3party/boost/boost/asio/detail/impl/buffer_sequence_adapter.ipp120
-rw-r--r--3party/boost/boost/asio/detail/impl/descriptor_ops.ipp10
-rw-r--r--3party/boost/boost/asio/detail/impl/dev_poll_reactor.hpp2
-rw-r--r--3party/boost/boost/asio/detail/impl/dev_poll_reactor.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/epoll_reactor.hpp2
-rw-r--r--3party/boost/boost/asio/detail/impl/epoll_reactor.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/eventfd_select_interrupter.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/handler_tracking.ipp6
-rw-r--r--3party/boost/boost/asio/detail/impl/kqueue_reactor.hpp2
-rw-r--r--3party/boost/boost/asio/detail/impl/kqueue_reactor.ipp176
-rw-r--r--3party/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp4
-rw-r--r--3party/boost/boost/asio/detail/impl/posix_event.ipp4
-rw-r--r--3party/boost/boost/asio/detail/impl/posix_mutex.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/posix_thread.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/posix_tss_ptr.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/reactive_descriptor_service.ipp10
-rw-r--r--3party/boost/boost/asio/detail/impl/reactive_serial_port_service.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp6
-rw-r--r--3party/boost/boost/asio/detail/impl/resolver_service_base.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/select_reactor.hpp8
-rw-r--r--3party/boost/boost/asio/detail/impl/select_reactor.ipp20
-rw-r--r--3party/boost/boost/asio/detail/impl/service_registry.hpp2
-rw-r--r--3party/boost/boost/asio/detail/impl/service_registry.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/signal_set_service.ipp95
-rw-r--r--3party/boost/boost/asio/detail/impl/socket_ops.ipp476
-rw-r--r--3party/boost/boost/asio/detail/impl/socket_select_interrupter.ipp10
-rw-r--r--3party/boost/boost/asio/detail/impl/strand_service.hpp2
-rw-r--r--3party/boost/boost/asio/detail/impl/strand_service.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/task_io_service.hpp2
-rw-r--r--3party/boost/boost/asio/detail/impl/task_io_service.ipp56
-rw-r--r--3party/boost/boost/asio/detail/impl/throw_error.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/timer_queue_ptime.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/timer_queue_set.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/win_event.ipp23
-rw-r--r--3party/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp7
-rw-r--r--3party/boost/boost/asio/detail/impl/win_iocp_io_service.hpp2
-rw-r--r--3party/boost/boost/asio/detail/impl/win_iocp_io_service.ipp30
-rw-r--r--3party/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp77
-rw-r--r--3party/boost/boost/asio/detail/impl/win_mutex.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/win_object_handle_service.ipp4
-rw-r--r--3party/boost/boost/asio/detail/impl/win_static_mutex.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/win_thread.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/win_tss_ptr.ipp2
-rw-r--r--3party/boost/boost/asio/detail/impl/winrt_ssocket_service_base.ipp614
-rw-r--r--3party/boost/boost/asio/detail/impl/winrt_timer_scheduler.hpp81
-rw-r--r--3party/boost/boost/asio/detail/impl/winrt_timer_scheduler.ipp124
-rw-r--r--3party/boost/boost/asio/detail/impl/winsock_init.ipp2
-rw-r--r--3party/boost/boost/asio/detail/io_control.hpp6
-rw-r--r--3party/boost/boost/asio/detail/keyword_tss_ptr.hpp6
-rw-r--r--3party/boost/boost/asio/detail/kqueue_reactor.hpp4
-rw-r--r--3party/boost/boost/asio/detail/kqueue_reactor_fwd.hpp35
-rw-r--r--3party/boost/boost/asio/detail/local_free_on_block_exit.hpp2
-rw-r--r--3party/boost/boost/asio/detail/macos_fenced_block.hpp2
-rw-r--r--3party/boost/boost/asio/detail/mutex.hpp8
-rw-r--r--3party/boost/boost/asio/detail/noncopyable.hpp2
-rw-r--r--3party/boost/boost/asio/detail/null_event.hpp21
-rw-r--r--3party/boost/boost/asio/detail/null_fenced_block.hpp2
-rw-r--r--3party/boost/boost/asio/detail/null_mutex.hpp2
-rw-r--r--3party/boost/boost/asio/detail/null_reactor.hpp69
-rw-r--r--3party/boost/boost/asio/detail/null_signal_blocker.hpp4
-rw-r--r--3party/boost/boost/asio/detail/null_socket_service.hpp499
-rw-r--r--3party/boost/boost/asio/detail/null_static_mutex.hpp2
-rw-r--r--3party/boost/boost/asio/detail/null_thread.hpp2
-rw-r--r--3party/boost/boost/asio/detail/null_tss_ptr.hpp2
-rw-r--r--3party/boost/boost/asio/detail/object_pool.hpp2
-rw-r--r--3party/boost/boost/asio/detail/old_win_sdk_compat.hpp2
-rw-r--r--3party/boost/boost/asio/detail/op_queue.hpp2
-rw-r--r--3party/boost/boost/asio/detail/operation.hpp2
-rw-r--r--3party/boost/boost/asio/detail/pipe_select_interrupter.hpp4
-rw-r--r--3party/boost/boost/asio/detail/pop_options.hpp9
-rw-r--r--3party/boost/boost/asio/detail/posix_event.hpp50
-rw-r--r--3party/boost/boost/asio/detail/posix_fd_set_adapter.hpp37
-rw-r--r--3party/boost/boost/asio/detail/posix_mutex.hpp2
-rw-r--r--3party/boost/boost/asio/detail/posix_signal_blocker.hpp2
-rw-r--r--3party/boost/boost/asio/detail/posix_static_mutex.hpp2
-rw-r--r--3party/boost/boost/asio/detail/posix_thread.hpp2
-rw-r--r--3party/boost/boost/asio/detail/posix_tss_ptr.hpp3
-rw-r--r--3party/boost/boost/asio/detail/push_options.hpp13
-rw-r--r--3party/boost/boost/asio/detail/reactive_descriptor_service.hpp10
-rw-r--r--3party/boost/boost/asio/detail/reactive_null_buffers_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/reactive_serial_port_service.hpp2
-rw-r--r--3party/boost/boost/asio/detail/reactive_socket_accept_op.hpp4
-rw-r--r--3party/boost/boost/asio/detail/reactive_socket_connect_op.hpp23
-rw-r--r--3party/boost/boost/asio/detail/reactive_socket_recv_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/reactive_socket_recvfrom_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/reactive_socket_recvmsg_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/reactive_socket_send_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/reactive_socket_sendto_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/reactive_socket_service.hpp6
-rw-r--r--3party/boost/boost/asio/detail/reactive_socket_service_base.hpp18
-rw-r--r--3party/boost/boost/asio/detail/reactor.hpp4
-rw-r--r--3party/boost/boost/asio/detail/reactor_fwd.hpp28
-rw-r--r--3party/boost/boost/asio/detail/reactor_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/reactor_op_queue.hpp136
-rw-r--r--3party/boost/boost/asio/detail/regex_fwd.hpp2
-rw-r--r--3party/boost/boost/asio/detail/resolve_endpoint_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/resolve_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/resolver_service.hpp7
-rw-r--r--3party/boost/boost/asio/detail/resolver_service_base.hpp4
-rw-r--r--3party/boost/boost/asio/detail/scoped_lock.hpp2
-rw-r--r--3party/boost/boost/asio/detail/scoped_ptr.hpp2
-rw-r--r--3party/boost/boost/asio/detail/select_interrupter.hpp6
-rw-r--r--3party/boost/boost/asio/detail/select_reactor.hpp10
-rw-r--r--3party/boost/boost/asio/detail/select_reactor_fwd.hpp28
-rw-r--r--3party/boost/boost/asio/detail/service_registry.hpp2
-rw-r--r--3party/boost/boost/asio/detail/service_registry_fwd.hpp28
-rw-r--r--3party/boost/boost/asio/detail/shared_ptr.hpp2
-rw-r--r--3party/boost/boost/asio/detail/signal_blocker.hpp4
-rw-r--r--3party/boost/boost/asio/detail/signal_handler.hpp2
-rw-r--r--3party/boost/boost/asio/detail/signal_init.hpp2
-rw-r--r--3party/boost/boost/asio/detail/signal_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/signal_set_service.hpp12
-rw-r--r--3party/boost/boost/asio/detail/socket_holder.hpp2
-rw-r--r--3party/boost/boost/asio/detail/socket_ops.hpp18
-rw-r--r--3party/boost/boost/asio/detail/socket_option.hpp8
-rw-r--r--3party/boost/boost/asio/detail/socket_select_interrupter.hpp6
-rw-r--r--3party/boost/boost/asio/detail/socket_types.hpp256
-rw-r--r--3party/boost/boost/asio/detail/solaris_fenced_block.hpp2
-rw-r--r--3party/boost/boost/asio/detail/static_mutex.hpp7
-rw-r--r--3party/boost/boost/asio/detail/std_event.hpp178
-rw-r--r--3party/boost/boost/asio/detail/std_mutex.hpp75
-rw-r--r--3party/boost/boost/asio/detail/std_static_mutex.hpp83
-rw-r--r--3party/boost/boost/asio/detail/std_thread.hpp67
-rw-r--r--3party/boost/boost/asio/detail/strand_service.hpp2
-rw-r--r--3party/boost/boost/asio/detail/task_io_service.hpp20
-rw-r--r--3party/boost/boost/asio/detail/task_io_service_fwd.hpp30
-rw-r--r--3party/boost/boost/asio/detail/task_io_service_operation.hpp5
-rw-r--r--3party/boost/boost/asio/detail/task_io_service_thread_info.hpp9
-rw-r--r--3party/boost/boost/asio/detail/thread.hpp8
-rw-r--r--3party/boost/boost/asio/detail/thread_info_base.hpp2
-rw-r--r--3party/boost/boost/asio/detail/throw_error.hpp2
-rw-r--r--3party/boost/boost/asio/detail/throw_exception.hpp2
-rw-r--r--3party/boost/boost/asio/detail/timer_queue.hpp2
-rw-r--r--3party/boost/boost/asio/detail/timer_queue_base.hpp5
-rw-r--r--3party/boost/boost/asio/detail/timer_queue_fwd.hpp29
-rw-r--r--3party/boost/boost/asio/detail/timer_queue_ptime.hpp2
-rw-r--r--3party/boost/boost/asio/detail/timer_queue_set.hpp2
-rw-r--r--3party/boost/boost/asio/detail/timer_scheduler.hpp6
-rw-r--r--3party/boost/boost/asio/detail/timer_scheduler_fwd.hpp28
-rw-r--r--3party/boost/boost/asio/detail/tss_ptr.hpp2
-rw-r--r--3party/boost/boost/asio/detail/type_traits.hpp2
-rw-r--r--3party/boost/boost/asio/detail/variadic_templates.hpp63
-rw-r--r--3party/boost/boost/asio/detail/wait_handler.hpp2
-rw-r--r--3party/boost/boost/asio/detail/wait_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/weak_ptr.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_event.hpp58
-rw-r--r--3party/boost/boost/asio/detail/win_fd_set_adapter.hpp62
-rw-r--r--3party/boost/boost/asio/detail/win_fenced_block.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_handle_read_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_handle_service.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_handle_write_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_io_service.hpp20
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_io_service_fwd.hpp35
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_operation.hpp5
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_overlapped_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_overlapped_ptr.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_serial_port_service.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_socket_connect_op.hpp126
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_socket_send_op.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_socket_service.hpp32
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_socket_service_base.hpp31
-rw-r--r--3party/boost/boost/asio/detail/win_iocp_thread_info.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_mutex.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_object_handle_service.hpp4
-rw-r--r--3party/boost/boost/asio/detail/win_static_mutex.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_thread.hpp2
-rw-r--r--3party/boost/boost/asio/detail/win_tss_ptr.hpp2
-rw-r--r--3party/boost/boost/asio/detail/wince_thread.hpp2
-rw-r--r--3party/boost/boost/asio/detail/winrt_async_manager.hpp296
-rw-r--r--3party/boost/boost/asio/detail/winrt_async_op.hpp67
-rw-r--r--3party/boost/boost/asio/detail/winrt_resolve_op.hpp119
-rw-r--r--3party/boost/boost/asio/detail/winrt_resolver_service.hpp185
-rw-r--r--3party/boost/boost/asio/detail/winrt_socket_connect_op.hpp92
-rw-r--r--3party/boost/boost/asio/detail/winrt_socket_recv_op.hpp112
-rw-r--r--3party/boost/boost/asio/detail/winrt_socket_send_op.hpp103
-rw-r--r--3party/boost/boost/asio/detail/winrt_ssocket_service.hpp234
-rw-r--r--3party/boost/boost/asio/detail/winrt_ssocket_service_base.hpp357
-rw-r--r--3party/boost/boost/asio/detail/winrt_timer_scheduler.hpp133
-rw-r--r--3party/boost/boost/asio/detail/winrt_utils.hpp108
-rw-r--r--3party/boost/boost/asio/detail/winsock_init.hpp2
-rw-r--r--3party/boost/boost/asio/detail/wrapped_handler.hpp6
-rw-r--r--3party/boost/boost/asio/error.hpp13
-rw-r--r--3party/boost/boost/asio/generic/basic_endpoint.hpp2
-rw-r--r--3party/boost/boost/asio/generic/datagram_protocol.hpp4
-rw-r--r--3party/boost/boost/asio/generic/detail/endpoint.hpp2
-rw-r--r--3party/boost/boost/asio/generic/detail/impl/endpoint.ipp2
-rw-r--r--3party/boost/boost/asio/generic/raw_protocol.hpp4
-rw-r--r--3party/boost/boost/asio/generic/seq_packet_protocol.hpp4
-rw-r--r--3party/boost/boost/asio/generic/stream_protocol.hpp4
-rw-r--r--3party/boost/boost/asio/handler_alloc_hook.hpp2
-rw-r--r--3party/boost/boost/asio/handler_continuation_hook.hpp2
-rw-r--r--3party/boost/boost/asio/handler_invoke_hook.hpp31
-rw-r--r--3party/boost/boost/asio/handler_type.hpp2
-rw-r--r--3party/boost/boost/asio/high_resolution_timer.hpp2
-rw-r--r--3party/boost/boost/asio/impl/buffered_read_stream.hpp360
-rw-r--r--3party/boost/boost/asio/impl/buffered_write_stream.hpp340
-rw-r--r--3party/boost/boost/asio/impl/connect.hpp2
-rw-r--r--3party/boost/boost/asio/impl/error.ipp3
-rw-r--r--3party/boost/boost/asio/impl/handler_alloc_hook.ipp7
-rw-r--r--3party/boost/boost/asio/impl/io_service.hpp2
-rw-r--r--3party/boost/boost/asio/impl/io_service.ipp2
-rw-r--r--3party/boost/boost/asio/impl/read.hpp2
-rw-r--r--3party/boost/boost/asio/impl/read_at.hpp2
-rw-r--r--3party/boost/boost/asio/impl/read_until.hpp2
-rw-r--r--3party/boost/boost/asio/impl/serial_port_base.hpp2
-rw-r--r--3party/boost/boost/asio/impl/serial_port_base.ipp3
-rw-r--r--3party/boost/boost/asio/impl/spawn.hpp14
-rw-r--r--3party/boost/boost/asio/impl/src.cpp2
-rw-r--r--3party/boost/boost/asio/impl/src.hpp5
-rw-r--r--3party/boost/boost/asio/impl/use_future.hpp2
-rw-r--r--3party/boost/boost/asio/impl/write.hpp2
-rw-r--r--3party/boost/boost/asio/impl/write_at.hpp2
-rw-r--r--3party/boost/boost/asio/io_service.hpp17
-rw-r--r--3party/boost/boost/asio/ip/address.hpp2
-rw-r--r--3party/boost/boost/asio/ip/address_v4.hpp2
-rw-r--r--3party/boost/boost/asio/ip/address_v6.hpp2
-rw-r--r--3party/boost/boost/asio/ip/basic_endpoint.hpp2
-rw-r--r--3party/boost/boost/asio/ip/basic_resolver.hpp2
-rw-r--r--3party/boost/boost/asio/ip/basic_resolver_entry.hpp2
-rw-r--r--3party/boost/boost/asio/ip/basic_resolver_iterator.hpp71
-rw-r--r--3party/boost/boost/asio/ip/basic_resolver_query.hpp4
-rw-r--r--3party/boost/boost/asio/ip/detail/endpoint.hpp4
-rw-r--r--3party/boost/boost/asio/ip/detail/impl/endpoint.ipp18
-rw-r--r--3party/boost/boost/asio/ip/detail/socket_option.hpp9
-rw-r--r--3party/boost/boost/asio/ip/host_name.hpp2
-rw-r--r--3party/boost/boost/asio/ip/icmp.hpp10
-rw-r--r--3party/boost/boost/asio/ip/impl/address.hpp2
-rw-r--r--3party/boost/boost/asio/ip/impl/address.ipp2
-rw-r--r--3party/boost/boost/asio/ip/impl/address_v4.hpp2
-rw-r--r--3party/boost/boost/asio/ip/impl/address_v4.ipp7
-rw-r--r--3party/boost/boost/asio/ip/impl/address_v6.hpp2
-rw-r--r--3party/boost/boost/asio/ip/impl/address_v6.ipp7
-rw-r--r--3party/boost/boost/asio/ip/impl/basic_endpoint.hpp2
-rw-r--r--3party/boost/boost/asio/ip/impl/host_name.ipp2
-rw-r--r--3party/boost/boost/asio/ip/multicast.hpp29
-rw-r--r--3party/boost/boost/asio/ip/resolver_query_base.hpp36
-rw-r--r--3party/boost/boost/asio/ip/resolver_service.hpp14
-rw-r--r--3party/boost/boost/asio/ip/tcp.hpp12
-rw-r--r--3party/boost/boost/asio/ip/udp.hpp10
-rw-r--r--3party/boost/boost/asio/ip/unicast.hpp7
-rw-r--r--3party/boost/boost/asio/ip/v6_only.hpp2
-rw-r--r--3party/boost/boost/asio/is_read_buffered.hpp2
-rw-r--r--3party/boost/boost/asio/is_write_buffered.hpp2
-rw-r--r--3party/boost/boost/asio/local/basic_endpoint.hpp2
-rw-r--r--3party/boost/boost/asio/local/connect_pair.hpp2
-rw-r--r--3party/boost/boost/asio/local/datagram_protocol.hpp2
-rw-r--r--3party/boost/boost/asio/local/detail/endpoint.hpp2
-rw-r--r--3party/boost/boost/asio/local/detail/impl/endpoint.ipp2
-rw-r--r--3party/boost/boost/asio/local/stream_protocol.hpp2
-rw-r--r--3party/boost/boost/asio/placeholders.hpp2
-rw-r--r--3party/boost/boost/asio/posix/basic_descriptor.hpp2
-rw-r--r--3party/boost/boost/asio/posix/basic_stream_descriptor.hpp2
-rw-r--r--3party/boost/boost/asio/posix/descriptor_base.hpp2
-rw-r--r--3party/boost/boost/asio/posix/stream_descriptor.hpp2
-rw-r--r--3party/boost/boost/asio/posix/stream_descriptor_service.hpp2
-rw-r--r--3party/boost/boost/asio/raw_socket_service.hpp12
-rw-r--r--3party/boost/boost/asio/read.hpp2
-rw-r--r--3party/boost/boost/asio/read_at.hpp2
-rw-r--r--3party/boost/boost/asio/read_until.hpp2
-rw-r--r--3party/boost/boost/asio/seq_packet_socket_service.hpp37
-rw-r--r--3party/boost/boost/asio/serial_port.hpp2
-rw-r--r--3party/boost/boost/asio/serial_port_base.hpp2
-rw-r--r--3party/boost/boost/asio/serial_port_service.hpp2
-rw-r--r--3party/boost/boost/asio/signal_set.hpp2
-rw-r--r--3party/boost/boost/asio/signal_set_service.hpp2
-rw-r--r--3party/boost/boost/asio/socket_acceptor_service.hpp10
-rw-r--r--3party/boost/boost/asio/socket_base.hpp47
-rw-r--r--3party/boost/boost/asio/spawn.hpp12
-rw-r--r--3party/boost/boost/asio/ssl.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/basic_context.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/context.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/context_base.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/context_service.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/buffered_handshake_op.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/engine.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/handshake_op.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/impl/engine.ipp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/impl/openssl_init.ipp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/io.hpp3
-rw-r--r--3party/boost/boost/asio/ssl/detail/openssl_init.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/openssl_types.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/password_callback.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/read_op.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/shutdown_op.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/stream_core.hpp6
-rw-r--r--3party/boost/boost/asio/ssl/detail/verify_callback.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/detail/write_op.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/error.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/impl/context.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/impl/context.ipp23
-rw-r--r--3party/boost/boost/asio/ssl/impl/error.ipp2
-rw-r--r--3party/boost/boost/asio/ssl/impl/rfc2818_verification.ipp2
-rw-r--r--3party/boost/boost/asio/ssl/impl/src.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/old/basic_context.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/old/context_service.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/old/detail/openssl_context_service.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/old/detail/openssl_stream_service.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/old/stream.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/old/stream_service.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/rfc2818_verification.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/stream.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/stream_base.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/stream_service.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/verify_context.hpp2
-rw-r--r--3party/boost/boost/asio/ssl/verify_mode.hpp2
-rw-r--r--3party/boost/boost/asio/steady_timer.hpp2
-rw-r--r--3party/boost/boost/asio/strand.hpp5
-rw-r--r--3party/boost/boost/asio/stream_socket_service.hpp12
-rw-r--r--3party/boost/boost/asio/streambuf.hpp2
-rw-r--r--3party/boost/boost/asio/system_timer.hpp2
-rw-r--r--3party/boost/boost/asio/time_traits.hpp2
-rw-r--r--3party/boost/boost/asio/unyield.hpp2
-rw-r--r--3party/boost/boost/asio/use_future.hpp8
-rw-r--r--3party/boost/boost/asio/version.hpp4
-rw-r--r--3party/boost/boost/asio/wait_traits.hpp2
-rw-r--r--3party/boost/boost/asio/waitable_timer_service.hpp2
-rw-r--r--3party/boost/boost/asio/windows/basic_handle.hpp2
-rw-r--r--3party/boost/boost/asio/windows/basic_object_handle.hpp2
-rw-r--r--3party/boost/boost/asio/windows/basic_random_access_handle.hpp2
-rw-r--r--3party/boost/boost/asio/windows/basic_stream_handle.hpp2
-rw-r--r--3party/boost/boost/asio/windows/object_handle.hpp2
-rw-r--r--3party/boost/boost/asio/windows/object_handle_service.hpp2
-rw-r--r--3party/boost/boost/asio/windows/overlapped_ptr.hpp2
-rw-r--r--3party/boost/boost/asio/windows/random_access_handle.hpp2
-rw-r--r--3party/boost/boost/asio/windows/random_access_handle_service.hpp3
-rw-r--r--3party/boost/boost/asio/windows/stream_handle.hpp2
-rw-r--r--3party/boost/boost/asio/windows/stream_handle_service.hpp2
-rw-r--r--3party/boost/boost/asio/write.hpp2
-rw-r--r--3party/boost/boost/asio/write_at.hpp30
-rw-r--r--3party/boost/boost/asio/yield.hpp2
-rw-r--r--3party/boost/boost/assert.hpp112
-rw-r--r--3party/boost/boost/assign.hpp2
-rw-r--r--3party/boost/boost/assign/assignment_exception.hpp2
-rw-r--r--3party/boost/boost/assign/list_inserter.hpp2
-rw-r--r--3party/boost/boost/assign/list_of.hpp2
-rw-r--r--3party/boost/boost/assign/ptr_list_inserter.hpp2
-rw-r--r--3party/boost/boost/assign/ptr_list_of.hpp2
-rw-r--r--3party/boost/boost/assign/ptr_map_inserter.hpp2
-rw-r--r--3party/boost/boost/assign/std.hpp2
-rw-r--r--3party/boost/boost/assign/std/deque.hpp2
-rw-r--r--3party/boost/boost/assign/std/list.hpp2
-rw-r--r--3party/boost/boost/assign/std/map.hpp2
-rw-r--r--3party/boost/boost/assign/std/queue.hpp2
-rw-r--r--3party/boost/boost/assign/std/set.hpp2
-rw-r--r--3party/boost/boost/assign/std/slist.hpp2
-rw-r--r--3party/boost/boost/assign/std/stack.hpp2
-rw-r--r--3party/boost/boost/assign/std/vector.hpp2
-rw-r--r--3party/boost/boost/atomic.hpp2
-rw-r--r--3party/boost/boost/atomic/atomic.hpp314
-rw-r--r--3party/boost/boost/atomic/atomic_flag.hpp33
-rw-r--r--3party/boost/boost/atomic/capabilities.hpp160
-rw-r--r--3party/boost/boost/atomic/detail/atomic_flag.hpp70
-rw-r--r--3party/boost/boost/atomic/detail/atomic_template.hpp774
-rw-r--r--3party/boost/boost/atomic/detail/base.hpp585
-rw-r--r--3party/boost/boost/atomic/detail/caps_gcc_alpha.hpp34
-rw-r--r--3party/boost/boost/atomic/detail/caps_gcc_arm.hpp56
-rw-r--r--3party/boost/boost/atomic/detail/caps_gcc_atomic.hpp134
-rw-r--r--3party/boost/boost/atomic/detail/caps_gcc_ppc.hpp36
-rw-r--r--3party/boost/boost/atomic/detail/caps_gcc_sparc.hpp34
-rw-r--r--3party/boost/boost/atomic/detail/caps_gcc_sync.hpp62
-rw-r--r--3party/boost/boost/atomic/detail/caps_gcc_x86.hpp52
-rw-r--r--3party/boost/boost/atomic/detail/caps_linux_arm.hpp35
-rw-r--r--3party/boost/boost/atomic/detail/caps_msvc_arm.hpp34
-rw-r--r--3party/boost/boost/atomic/detail/caps_msvc_x86.hpp50
-rw-r--r--3party/boost/boost/atomic/detail/caps_windows.hpp33
-rw-r--r--3party/boost/boost/atomic/detail/cas32strong.hpp885
-rw-r--r--3party/boost/boost/atomic/detail/cas32weak.hpp947
-rw-r--r--3party/boost/boost/atomic/detail/cas64strong.hpp443
-rw-r--r--3party/boost/boost/atomic/detail/casts.hpp64
-rw-r--r--3party/boost/boost/atomic/detail/config.hpp66
-rw-r--r--3party/boost/boost/atomic/detail/gcc-alpha.hpp368
-rw-r--r--3party/boost/boost/atomic/detail/gcc-armv6plus.hpp252
-rw-r--r--3party/boost/boost/atomic/detail/gcc-cas.hpp157
-rw-r--r--3party/boost/boost/atomic/detail/gcc-ppc.hpp2850
-rw-r--r--3party/boost/boost/atomic/detail/gcc-sparcv9.hpp1259
-rw-r--r--3party/boost/boost/atomic/detail/gcc-x86.hpp1766
-rw-r--r--3party/boost/boost/atomic/detail/generic-cas.hpp206
-rw-r--r--3party/boost/boost/atomic/detail/int_sizes.hpp140
-rw-r--r--3party/boost/boost/atomic/detail/interlocked.hpp283
-rw-r--r--3party/boost/boost/atomic/detail/link.hpp58
-rw-r--r--3party/boost/boost/atomic/detail/linux-arm.hpp189
-rw-r--r--3party/boost/boost/atomic/detail/lockpool.hpp106
-rw-r--r--3party/boost/boost/atomic/detail/operations.hpp24
-rw-r--r--3party/boost/boost/atomic/detail/operations_fwd.hpp34
-rw-r--r--3party/boost/boost/atomic/detail/operations_lockfree.hpp30
-rw-r--r--3party/boost/boost/atomic/detail/ops_cas_based.hpp91
-rw-r--r--3party/boost/boost/atomic/detail/ops_emulated.hpp149
-rw-r--r--3party/boost/boost/atomic/detail/ops_extending_cas_based.hpp65
-rw-r--r--3party/boost/boost/atomic/detail/ops_gcc_alpha.hpp874
-rw-r--r--3party/boost/boost/atomic/detail/ops_gcc_arm.hpp971
-rw-r--r--3party/boost/boost/atomic/detail/ops_gcc_atomic.hpp238
-rw-r--r--3party/boost/boost/atomic/detail/ops_gcc_ppc.hpp775
-rw-r--r--3party/boost/boost/atomic/detail/ops_gcc_sparc.hpp245
-rw-r--r--3party/boost/boost/atomic/detail/ops_gcc_sync.hpp237
-rw-r--r--3party/boost/boost/atomic/detail/ops_gcc_x86.hpp510
-rw-r--r--3party/boost/boost/atomic/detail/ops_gcc_x86_dcas.hpp308
-rw-r--r--3party/boost/boost/atomic/detail/ops_linux_arm.hpp177
-rw-r--r--3party/boost/boost/atomic/detail/ops_msvc_arm.hpp820
-rw-r--r--3party/boost/boost/atomic/detail/ops_msvc_common.hpp38
-rw-r--r--3party/boost/boost/atomic/detail/ops_msvc_x86.hpp877
-rw-r--r--3party/boost/boost/atomic/detail/ops_windows.hpp215
-rw-r--r--3party/boost/boost/atomic/detail/pause.hpp43
-rw-r--r--3party/boost/boost/atomic/detail/platform.hpp117
-rw-r--r--3party/boost/boost/atomic/detail/storage_type.hpp168
-rw-r--r--3party/boost/boost/atomic/detail/type-classification.hpp45
-rw-r--r--3party/boost/boost/atomic/detail/windows.hpp1484
-rw-r--r--3party/boost/boost/atomic/fences.hpp67
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/container_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/detail/comparison_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/detail/functor_bag.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/detail/identity_converters.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/detail/key_extractor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/detail/non_unique_container_helper.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/list_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/multiset_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/set_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/support/iterator_facade_converters.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/unordered_associative_container_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/unordered_multiset_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/container_adaptor/unordered_set_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/concept_tags.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/debug/static_error.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/generate_index_binder.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/generate_relation_binder.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/generate_view_binder.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/is_set_type_of.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/manage_additional_parameters.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/manage_bimap_key.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/modifier_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/non_unique_views_helper.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/test/check_metadata.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/detail/user_interface_config.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/detail/access_builder.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/detail/metadata_access_builder.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/detail/static_access_builder.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/detail/to_mutable_relation_functor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/member_at.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/pair_layout.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/support/get.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/support/get_pair_functor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/support/is_tag_of_member_at.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/support/member_with_tag.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/support/opposite_tag.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/support/pair_by.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/support/pair_type_by.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/support/value_type_of.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/relation/symmetrical_base.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/support/data_type_by.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/support/key_type_by.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/support/lambda.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/support/map_by.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/support/map_type_by.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/support/value_type_by.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/tags/support/apply_to_value_type.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/tags/support/default_tagged.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/tags/support/is_tagged.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/tags/support/overwrite_tagged.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/tags/support/tag_of.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/tags/support/value_type_of.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/tags/tagged.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/views/multiset_view.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/views/set_view.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/views/unordered_multiset_view.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/bimap/views/unordered_set_view.hpp0
-rw-r--r--3party/boost/boost/bind/arg.hpp4
-rw-r--r--3party/boost/boost/call_traits.hpp6
-rw-r--r--3party/boost/boost/cast.hpp103
-rw-r--r--3party/boost/boost/checked_delete.hpp78
-rw-r--r--3party/boost/boost/chrono/config.hpp22
-rw-r--r--3party/boost/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp43
-rw-r--r--3party/boost/boost/chrono/detail/inlined/mac/thread_clock.hpp80
-rw-r--r--3party/boost/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp17
-rw-r--r--3party/boost/boost/chrono/detail/inlined/win/chrono.hpp73
-rw-r--r--3party/boost/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp53
-rw-r--r--3party/boost/boost/chrono/detail/inlined/win/thread_clock.hpp22
-rw-r--r--3party/boost/boost/chrono/floor.hpp4
-rw-r--r--3party/boost/boost/chrono/io/duration_get.hpp48
-rw-r--r--3party/boost/boost/chrono/io/duration_put.hpp33
-rw-r--r--3party/boost/boost/chrono/io/time_point_io.hpp342
-rw-r--r--3party/boost/boost/chrono/io/time_point_units.hpp5
-rw-r--r--3party/boost/boost/chrono/io/utility/ios_base_state_ptr.hpp1
-rw-r--r--3party/boost/boost/chrono/io_v1/chrono_io.hpp2
-rw-r--r--3party/boost/boost/chrono/process_cpu_clocks.hpp16
-rw-r--r--3party/boost/boost/chrono/round.hpp24
-rw-r--r--3party/boost/boost/circular_buffer.hpp19
-rw-r--r--3party/boost/boost/circular_buffer/base.hpp810
-rw-r--r--3party/boost/boost/circular_buffer/debug.hpp23
-rw-r--r--3party/boost/boost/circular_buffer/details.hpp113
-rw-r--r--3party/boost/boost/circular_buffer/space_optimized.hpp516
-rw-r--r--3party/boost/boost/compressed_pair.hpp6
-rw-r--r--3party/boost/boost/concept/assert.hpp3
-rw-r--r--3party/boost/boost/concept/detail/concept_def.hpp17
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/concept/detail/concept_undef.hpp0
-rw-r--r--3party/boost/boost/concept/detail/general.hpp11
-rw-r--r--3party/boost/boost/concept/detail/msvc.hpp9
-rw-r--r--3party/boost/boost/concept/requires.hpp37
-rw-r--r--3party/boost/boost/concept/usage.hpp8
-rw-r--r--3party/boost/boost/concept_check.hpp28
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/concept_check/borland.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/concept_check/general.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/concept_check/has_constraints.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/concept_check/msvc.hpp0
-rw-r--r--3party/boost/boost/config.hpp21
-rw-r--r--3party/boost/boost/config/auto_link.hpp8
-rw-r--r--3party/boost/boost/config/compiler/borland.hpp12
-rw-r--r--3party/boost/boost/config/compiler/clang.hpp66
-rw-r--r--3party/boost/boost/config/compiler/codegear.hpp12
-rw-r--r--3party/boost/boost/config/compiler/common_edg.hpp27
-rw-r--r--3party/boost/boost/config/compiler/cray.hpp35
-rw-r--r--3party/boost/boost/config/compiler/digitalmars.hpp26
-rw-r--r--3party/boost/boost/config/compiler/gcc.hpp114
-rw-r--r--3party/boost/boost/config/compiler/gcc_xml.hpp14
-rw-r--r--3party/boost/boost/config/compiler/hp_acc.hpp22
-rw-r--r--3party/boost/boost/config/compiler/intel.hpp82
-rw-r--r--3party/boost/boost/config/compiler/metrowerks.hpp24
-rw-r--r--3party/boost/boost/config/compiler/mpw.hpp13
-rw-r--r--3party/boost/boost/config/compiler/nvcc.hpp12
-rw-r--r--3party/boost/boost/config/compiler/pathscale.hpp9
-rw-r--r--3party/boost/boost/config/compiler/pgi.hpp7
-rw-r--r--3party/boost/boost/config/compiler/sunpro_cc.hpp24
-rw-r--r--3party/boost/boost/config/compiler/vacpp.hpp29
-rw-r--r--3party/boost/boost/config/compiler/visualc.hpp156
-rw-r--r--3party/boost/boost/config/platform/win32.hpp17
-rw-r--r--3party/boost/boost/config/select_compiler_config.hpp39
-rw-r--r--3party/boost/boost/config/select_platform_config.hpp24
-rw-r--r--3party/boost/boost/config/select_stdlib_config.hpp16
-rw-r--r--3party/boost/boost/config/stdlib/dinkumware.hpp37
-rw-r--r--3party/boost/boost/config/stdlib/libcomo.hpp3
-rw-r--r--3party/boost/boost/config/stdlib/libcpp.hpp9
-rw-r--r--3party/boost/boost/config/stdlib/libstdcpp3.hpp16
-rw-r--r--3party/boost/boost/config/stdlib/modena.hpp3
-rw-r--r--3party/boost/boost/config/stdlib/msl.hpp3
-rw-r--r--3party/boost/boost/config/stdlib/roguewave.hpp3
-rw-r--r--3party/boost/boost/config/stdlib/sgi.hpp3
-rw-r--r--3party/boost/boost/config/stdlib/stlport.hpp3
-rw-r--r--3party/boost/boost/config/stdlib/vacpp.hpp3
-rw-r--r--3party/boost/boost/config/suffix.hpp196
-rw-r--r--3party/boost/boost/config/user.hpp9
-rw-r--r--3party/boost/boost/container/adaptive_pool.hpp364
-rw-r--r--3party/boost/boost/container/allocator.hpp367
-rw-r--r--3party/boost/boost/container/allocator_traits.hpp78
-rw-r--r--3party/boost/boost/container/container_fwd.hpp160
-rw-r--r--3party/boost/boost/container/deque.hpp824
-rw-r--r--3party/boost/boost/container/detail/adaptive_node_pool.hpp162
-rw-r--r--3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp13
-rw-r--r--3party/boost/boost/container/detail/advanced_insert_int.hpp165
-rw-r--r--3party/boost/boost/container/detail/algorithms.hpp18
-rw-r--r--3party/boost/boost/container/detail/alloc_lib.h326
-rw-r--r--3party/boost/boost/container/detail/alloc_lib_auto_link.hpp16
-rw-r--r--3party/boost/boost/container/detail/allocation_type.hpp12
-rw-r--r--3party/boost/boost/container/detail/allocator_version_traits.hpp13
-rw-r--r--3party/boost/boost/container/detail/auto_link.hpp38
-rw-r--r--3party/boost/boost/container/detail/config_begin.hpp7
-rw-r--r--3party/boost/boost/container/detail/config_end.hpp6
-rw-r--r--3party/boost/boost/container/detail/destroyers.hpp23
-rw-r--r--3party/boost/boost/container/detail/flat_tree.hpp494
-rw-r--r--3party/boost/boost/container/detail/function_detector.hpp2
-rw-r--r--3party/boost/boost/container/detail/hash_table.hpp383
-rw-r--r--3party/boost/boost/container/detail/iterators.hpp277
-rw-r--r--3party/boost/boost/container/detail/math_functions.hpp8
-rw-r--r--3party/boost/boost/container/detail/memory_util.hpp17
-rw-r--r--3party/boost/boost/container/detail/mpl.hpp37
-rw-r--r--3party/boost/boost/container/detail/multiallocation_chain.hpp12
-rw-r--r--3party/boost/boost/container/detail/mutex.hpp278
-rw-r--r--3party/boost/boost/container/detail/node_alloc_holder.hpp93
-rw-r--r--3party/boost/boost/container/detail/node_pool.hpp157
-rw-r--r--3party/boost/boost/container/detail/node_pool_impl.hpp27
-rw-r--r--3party/boost/boost/container/detail/pair.hpp6
-rw-r--r--3party/boost/boost/container/detail/pool_common.hpp12
-rw-r--r--3party/boost/boost/container/detail/pool_common_alloc.hpp94
-rw-r--r--3party/boost/boost/container/detail/preprocessor.hpp4
-rw-r--r--3party/boost/boost/container/detail/singleton.hpp113
-rw-r--r--3party/boost/boost/container/detail/transform_iterator.hpp19
-rw-r--r--3party/boost/boost/container/detail/tree.hpp939
-rw-r--r--3party/boost/boost/container/detail/type_traits.hpp7
-rw-r--r--3party/boost/boost/container/detail/utilities.hpp353
-rw-r--r--3party/boost/boost/container/detail/value_init.hpp6
-rw-r--r--3party/boost/boost/container/detail/variadic_templates_tools.hpp7
-rw-r--r--3party/boost/boost/container/detail/version_type.hpp13
-rw-r--r--3party/boost/boost/container/detail/workaround.hpp21
-rw-r--r--3party/boost/boost/container/flat_map.hpp365
-rw-r--r--3party/boost/boost/container/flat_set.hpp919
-rw-r--r--3party/boost/boost/container/list.hpp321
-rw-r--r--3party/boost/boost/container/map.hpp877
-rw-r--r--3party/boost/boost/container/node_allocator.hpp345
-rw-r--r--3party/boost/boost/container/options.hpp72
-rw-r--r--3party/boost/boost/container/scoped_allocator.hpp259
-rw-r--r--3party/boost/boost/container/scoped_allocator_fwd.hpp12
-rw-r--r--3party/boost/boost/container/set.hpp913
-rw-r--r--3party/boost/boost/container/slist.hpp309
-rw-r--r--3party/boost/boost/container/stable_vector.hpp574
-rw-r--r--3party/boost/boost/container/static_vector.hpp186
-rw-r--r--3party/boost/boost/container/string.hpp288
-rw-r--r--3party/boost/boost/container/throw_exception.hpp58
-rw-r--r--3party/boost/boost/container/vector.hpp1026
-rw-r--r--3party/boost/boost/context/detail/config.hpp27
-rw-r--r--3party/boost/boost/context/detail/fcontext_arm_mac.hpp70
-rw-r--r--3party/boost/boost/context/detail/fcontext_arm_win.hpp71
-rw-r--r--3party/boost/boost/context/fcontext.hpp49
-rw-r--r--3party/boost/boost/core/addressof.hpp162
-rw-r--r--3party/boost/boost/core/checked_delete.hpp69
-rw-r--r--3party/boost/boost/core/demangle.hpp121
-rw-r--r--3party/boost/boost/core/enable_if.hpp119
-rw-r--r--3party/boost/boost/core/explicit_operator_bool.hpp154
-rw-r--r--3party/boost/boost/core/ignore_unused.hpp70
-rw-r--r--3party/boost/boost/core/is_same.hpp40
-rw-r--r--3party/boost/boost/core/lightweight_test.hpp171
-rw-r--r--3party/boost/boost/core/lightweight_test_trait.hpp56
-rw-r--r--3party/boost/boost/core/no_exceptions_support.hpp44
-rw-r--r--3party/boost/boost/core/noncopyable.hpp48
-rw-r--r--3party/boost/boost/core/null_deleter.hpp44
-rw-r--r--3party/boost/boost/core/ref.hpp301
-rw-r--r--3party/boost/boost/core/scoped_enum.hpp192
-rw-r--r--3party/boost/boost/core/swap.hpp60
-rw-r--r--3party/boost/boost/core/typeinfo.hpp151
-rw-r--r--3party/boost/boost/core/underlying_type.hpp79
-rw-r--r--3party/boost/boost/coroutine/all.hpp6
-rw-r--r--3party/boost/boost/coroutine/asymmetric_coroutine.hpp2269
-rw-r--r--3party/boost/boost/coroutine/attributes.hpp17
-rw-r--r--3party/boost/boost/coroutine/checkpoint.hpp34
-rw-r--r--3party/boost/boost/coroutine/coroutine.hpp7
-rw-r--r--3party/boost/boost/coroutine/detail/config.hpp26
-rw-r--r--3party/boost/boost/coroutine/detail/coroutine_context.hpp25
-rw-r--r--3party/boost/boost/coroutine/detail/exceptions.hpp28
-rw-r--r--3party/boost/boost/coroutine/detail/flags.hpp22
-rw-r--r--3party/boost/boost/coroutine/detail/holder.hpp90
-rw-r--r--3party/boost/boost/coroutine/detail/param.hpp46
-rw-r--r--3party/boost/boost/coroutine/detail/parameters.hpp102
-rw-r--r--3party/boost/boost/coroutine/detail/pull_coroutine_impl.hpp355
-rw-r--r--3party/boost/boost/coroutine/detail/pull_coroutine_object.hpp324
-rw-r--r--3party/boost/boost/coroutine/detail/pull_coroutine_synthesized.hpp80
-rw-r--r--3party/boost/boost/coroutine/detail/push_coroutine_impl.hpp295
-rw-r--r--3party/boost/boost/coroutine/detail/push_coroutine_object.hpp336
-rw-r--r--3party/boost/boost/coroutine/detail/push_coroutine_synthesized.hpp78
-rw-r--r--3party/boost/boost/coroutine/detail/segmented_stack_allocator.hpp51
-rw-r--r--3party/boost/boost/coroutine/detail/setup.hpp75
-rw-r--r--3party/boost/boost/coroutine/detail/standard_stack_allocator.hpp49
-rw-r--r--3party/boost/boost/coroutine/detail/symmetric_coroutine_call.hpp822
-rw-r--r--3party/boost/boost/coroutine/detail/symmetric_coroutine_impl.hpp472
-rw-r--r--3party/boost/boost/coroutine/detail/symmetric_coroutine_object.hpp281
-rw-r--r--3party/boost/boost/coroutine/detail/symmetric_coroutine_yield.hpp307
-rw-r--r--3party/boost/boost/coroutine/detail/trampoline.hpp67
-rw-r--r--3party/boost/boost/coroutine/detail/trampoline_pull.hpp48
-rw-r--r--3party/boost/boost/coroutine/detail/trampoline_push.hpp77
-rw-r--r--3party/boost/boost/coroutine/exceptions.hpp105
-rw-r--r--3party/boost/boost/coroutine/posix/protected_stack_allocator.hpp95
-rw-r--r--3party/boost/boost/coroutine/posix/segmented_stack_allocator.hpp69
-rw-r--r--3party/boost/boost/coroutine/protected_stack_allocator.hpp13
-rw-r--r--3party/boost/boost/coroutine/segmented_stack_allocator.hpp15
-rw-r--r--3party/boost/boost/coroutine/stack_allocator.hpp14
-rw-r--r--3party/boost/boost/coroutine/stack_traits.hpp42
-rw-r--r--3party/boost/boost/coroutine/standard_stack_allocator.hpp64
-rw-r--r--3party/boost/boost/coroutine/symmetric_coroutine.hpp35
-rw-r--r--3party/boost/boost/coroutine/v1/coroutine.hpp1430
-rw-r--r--3party/boost/boost/coroutine/v1/detail/arg.hpp62
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_base.hpp125
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_base_resume.hpp237
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_caller.hpp57
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_get.hpp54
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_object.hpp111
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_object_result_0.ipp363
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_object_result_1.ipp557
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_object_result_arity.ipp559
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_object_void_0.ipp357
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_object_void_1.ipp550
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_object_void_arity.ipp551
-rw-r--r--3party/boost/boost/coroutine/v1/detail/coroutine_op.hpp326
-rw-r--r--3party/boost/boost/coroutine/v2/detail/coroutine_object.hpp423
-rw-r--r--3party/boost/boost/coroutine/v2/pull_corotuine.hpp355
-rw-r--r--3party/boost/boost/coroutine/v2/push_coroutine.hpp357
-rw-r--r--3party/boost/boost/coroutine/windows/protected_stack_allocator.hpp87
-rw-r--r--3party/boost/boost/cstdfloat.hpp58
-rw-r--r--3party/boost/boost/cstdint.hpp219
-rw-r--r--3party/boost/boost/current_function.hpp13
-rw-r--r--3party/boost/boost/date_time.hpp2
-rw-r--r--3party/boost/boost/date_time/adjust_functors.hpp2
-rw-r--r--3party/boost/boost/date_time/c_local_time_adjustor.hpp7
-rw-r--r--3party/boost/boost/date_time/c_time.hpp6
-rw-r--r--3party/boost/boost/date_time/compiler_config.hpp2
-rw-r--r--3party/boost/boost/date_time/constrained_value.hpp2
-rw-r--r--3party/boost/boost/date_time/date.hpp2
-rw-r--r--3party/boost/boost/date_time/date_clock_device.hpp14
-rw-r--r--3party/boost/boost/date_time/date_defs.hpp2
-rw-r--r--3party/boost/boost/date_time/date_duration.hpp2
-rw-r--r--3party/boost/boost/date_time/date_duration_types.hpp2
-rw-r--r--3party/boost/boost/date_time/date_facet.hpp2
-rw-r--r--3party/boost/boost/date_time/date_format_simple.hpp2
-rw-r--r--3party/boost/boost/date_time/date_formatting.hpp2
-rw-r--r--3party/boost/boost/date_time/date_formatting_limited.hpp2
-rw-r--r--3party/boost/boost/date_time/date_formatting_locales.hpp2
-rw-r--r--3party/boost/boost/date_time/date_generator_formatter.hpp2
-rw-r--r--3party/boost/boost/date_time/date_generator_parser.hpp2
-rw-r--r--3party/boost/boost/date_time/date_generators.hpp2
-rw-r--r--3party/boost/boost/date_time/date_iterator.hpp2
-rw-r--r--3party/boost/boost/date_time/date_names_put.hpp2
-rw-r--r--3party/boost/boost/date_time/date_parsing.hpp4
-rw-r--r--3party/boost/boost/date_time/dst_rules.hpp2
-rw-r--r--3party/boost/boost/date_time/filetime_functions.hpp2
-rw-r--r--3party/boost/boost/date_time/format_date_parser.hpp18
-rw-r--r--3party/boost/boost/date_time/gregorian/conversion.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/formatters.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/formatters_limited.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_calendar.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_date.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_day.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_day_of_year.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_duration.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_duration_types.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_facet.hpp6
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_month.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_serialize.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_weekday.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_year.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/greg_ymd.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/gregorian.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/gregorian_io.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/gregorian_types.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian/parsers.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian_calendar.hpp2
-rw-r--r--3party/boost/boost/date_time/gregorian_calendar.ipp2
-rw-r--r--3party/boost/boost/date_time/int_adapter.hpp2
-rw-r--r--3party/boost/boost/date_time/iso_format.hpp2
-rw-r--r--3party/boost/boost/date_time/local_time/conversion.hpp2
-rw-r--r--3party/boost/boost/date_time/local_time/custom_time_zone.hpp4
-rw-r--r--3party/boost/boost/date_time/local_time/date_duration_operators.hpp2
-rw-r--r--3party/boost/boost/date_time/local_time/dst_transition_day_rules.hpp2
-rw-r--r--3party/boost/boost/date_time/local_time/local_date_time.hpp2
-rw-r--r--3party/boost/boost/date_time/local_time/local_time.hpp2
-rw-r--r--3party/boost/boost/date_time/local_time/local_time_io.hpp4
-rw-r--r--3party/boost/boost/date_time/local_time/local_time_types.hpp2
-rw-r--r--3party/boost/boost/date_time/local_time/posix_time_zone.hpp6
-rw-r--r--3party/boost/boost/date_time/local_time/tz_database.hpp2
-rw-r--r--3party/boost/boost/date_time/local_time_adjustor.hpp2
-rw-r--r--3party/boost/boost/date_time/local_timezone_defs.hpp2
-rw-r--r--3party/boost/boost/date_time/locale_config.hpp2
-rw-r--r--3party/boost/boost/date_time/microsec_time_clock.hpp2
-rw-r--r--3party/boost/boost/date_time/parse_format_base.hpp2
-rw-r--r--3party/boost/boost/date_time/period.hpp2
-rw-r--r--3party/boost/boost/date_time/period_formatter.hpp2
-rw-r--r--3party/boost/boost/date_time/period_parser.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/conversion.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/date_duration_operators.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/posix_time.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/posix_time_config.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/posix_time_duration.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/posix_time_io.hpp5
-rw-r--r--3party/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp4
-rw-r--r--3party/boost/boost/date_time/posix_time/posix_time_system.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/ptime.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/time_formatters.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/time_formatters_limited.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/time_parsers.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/time_period.hpp2
-rw-r--r--3party/boost/boost/date_time/posix_time/time_serialize.hpp2
-rw-r--r--3party/boost/boost/date_time/special_defs.hpp2
-rw-r--r--3party/boost/boost/date_time/special_values_formatter.hpp2
-rw-r--r--3party/boost/boost/date_time/string_convert.hpp3
-rw-r--r--3party/boost/boost/date_time/string_parse_tree.hpp2
-rw-r--r--3party/boost/boost/date_time/strings_from_facet.hpp4
-rw-r--r--3party/boost/boost/date_time/time.hpp2
-rw-r--r--3party/boost/boost/date_time/time_clock.hpp2
-rw-r--r--3party/boost/boost/date_time/time_defs.hpp2
-rw-r--r--3party/boost/boost/date_time/time_duration.hpp2
-rw-r--r--3party/boost/boost/date_time/time_facet.hpp6
-rw-r--r--3party/boost/boost/date_time/time_formatting_streams.hpp2
-rw-r--r--3party/boost/boost/date_time/time_iterator.hpp2
-rw-r--r--3party/boost/boost/date_time/time_parsing.hpp2
-rw-r--r--3party/boost/boost/date_time/time_resolution_traits.hpp2
-rw-r--r--3party/boost/boost/date_time/time_system_counted.hpp2
-rw-r--r--3party/boost/boost/date_time/time_system_split.hpp2
-rw-r--r--3party/boost/boost/date_time/time_zone_base.hpp2
-rw-r--r--3party/boost/boost/date_time/time_zone_names.hpp2
-rw-r--r--3party/boost/boost/date_time/tz_db_base.hpp11
-rw-r--r--3party/boost/boost/date_time/wrapping_int.hpp2
-rw-r--r--3party/boost/boost/date_time/year_month_day.hpp2
-rw-r--r--3party/boost/boost/detail/allocator_utilities.hpp27
-rw-r--r--3party/boost/boost/detail/basic_pointerbuf.hpp139
-rw-r--r--3party/boost/boost/detail/catch_exceptions.hpp6
-rw-r--r--3party/boost/boost/detail/compressed_pair.hpp2
-rw-r--r--3party/boost/boost/detail/container_fwd.hpp7
-rw-r--r--3party/boost/boost/detail/dynamic_bitset.hpp28
-rw-r--r--3party/boost/boost/detail/endian.hpp121
-rw-r--r--3party/boost/boost/detail/fenv.hpp33
-rw-r--r--3party/boost/boost/detail/identifier.hpp2
-rw-r--r--3party/boost/boost/detail/indirect_traits.hpp282
-rw-r--r--3party/boost/boost/detail/interlocked.hpp72
-rw-r--r--3party/boost/boost/detail/is_function_ref_tester.hpp136
-rw-r--r--3party/boost/boost/detail/is_incrementable.hpp3
-rw-r--r--3party/boost/boost/detail/is_xxx.hpp34
-rw-r--r--3party/boost/boost/detail/iterator.hpp486
-rw-r--r--3party/boost/boost/detail/lightweight_test.hpp215
-rw-r--r--3party/boost/boost/detail/limits.hpp449
-rw-r--r--3party/boost/boost/detail/no_exceptions_support.hpp94
-rw-r--r--3party/boost/boost/detail/none_t.hpp28
-rw-r--r--3party/boost/boost/detail/numeric_traits.hpp11
-rw-r--r--3party/boost/boost/detail/ob_call_traits.hpp168
-rw-r--r--3party/boost/boost/detail/ob_compressed_pair.hpp11
-rw-r--r--3party/boost/boost/detail/reference_content.hpp21
-rw-r--r--3party/boost/boost/detail/scoped_enum_emulation.hpp340
-rw-r--r--3party/boost/boost/detail/sp_typeinfo.hpp115
-rw-r--r--3party/boost/boost/detail/utf8_codecvt_facet.hpp31
-rw-r--r--3party/boost/boost/detail/utf8_codecvt_facet.ipp7
-rw-r--r--3party/boost/boost/detail/win/GetCurrentProcess.hpp25
-rw-r--r--3party/boost/boost/detail/win/GetCurrentThread.hpp34
-rw-r--r--3party/boost/boost/detail/win/GetLastError.hpp27
-rw-r--r--3party/boost/boost/detail/win/GetProcessTimes.hpp35
-rw-r--r--3party/boost/boost/detail/win/GetThreadTimes.hpp33
-rw-r--r--3party/boost/boost/detail/win/LocalFree.hpp29
-rw-r--r--3party/boost/boost/detail/win/basic_types.hpp111
-rw-r--r--3party/boost/boost/detail/win/directory_management.hpp43
-rw-r--r--3party/boost/boost/detail/win/dll.hpp52
-rw-r--r--3party/boost/boost/detail/win/error_handling.hpp88
-rw-r--r--3party/boost/boost/detail/win/file_management.hpp126
-rw-r--r--3party/boost/boost/detail/win/handles.hpp37
-rw-r--r--3party/boost/boost/detail/win/memory.hpp59
-rw-r--r--3party/boost/boost/detail/win/process.hpp33
-rw-r--r--3party/boost/boost/detail/win/security.hpp62
-rw-r--r--3party/boost/boost/detail/win/synchronization.hpp125
-rw-r--r--3party/boost/boost/detail/win/system.hpp50
-rw-r--r--3party/boost/boost/detail/win/thread.hpp45
-rw-r--r--3party/boost/boost/detail/win/time.hpp72
-rw-r--r--3party/boost/boost/detail/win/timers.hpp41
-rw-r--r--3party/boost/boost/detail/winapi/GetCurrentProcess.hpp29
-rw-r--r--3party/boost/boost/detail/winapi/GetCurrentThread.hpp38
-rw-r--r--3party/boost/boost/detail/winapi/GetLastError.hpp31
-rw-r--r--3party/boost/boost/detail/winapi/GetProcessTimes.hpp39
-rw-r--r--3party/boost/boost/detail/winapi/GetThreadTimes.hpp37
-rw-r--r--3party/boost/boost/detail/winapi/LocalFree.hpp33
-rw-r--r--3party/boost/boost/detail/winapi/basic_types.hpp134
-rw-r--r--3party/boost/boost/detail/winapi/config.hpp53
-rw-r--r--3party/boost/boost/detail/winapi/directory_management.hpp46
-rw-r--r--3party/boost/boost/detail/winapi/dll.hpp86
-rw-r--r--3party/boost/boost/detail/winapi/error_handling.hpp93
-rw-r--r--3party/boost/boost/detail/winapi/file_management.hpp130
-rw-r--r--3party/boost/boost/detail/winapi/handles.hpp46
-rw-r--r--3party/boost/boost/detail/winapi/memory.hpp60
-rw-r--r--3party/boost/boost/detail/winapi/process.hpp36
-rw-r--r--3party/boost/boost/detail/winapi/security.hpp65
-rw-r--r--3party/boost/boost/detail/winapi/synchronization.hpp293
-rw-r--r--3party/boost/boost/detail/winapi/system.hpp62
-rw-r--r--3party/boost/boost/detail/winapi/thread.hpp49
-rw-r--r--3party/boost/boost/detail/winapi/thread_pool.hpp96
-rw-r--r--3party/boost/boost/detail/winapi/time.hpp105
-rw-r--r--3party/boost/boost/detail/winapi/timers.hpp44
-rw-r--r--3party/boost/boost/detail/winapi/tls.hpp49
-rw-r--r--3party/boost/boost/detail/winapi/waitable_timer.hpp110
-rw-r--r--3party/boost/boost/dynamic_bitset/dynamic_bitset.hpp192
-rw-r--r--3party/boost/boost/exception.hpp11
-rw-r--r--3party/boost/boost/exception/N3757.hpp46
-rw-r--r--3party/boost/boost/exception/detail/attribute_noreturn.hpp17
-rw-r--r--3party/boost/boost/exception/detail/clone_current_exception.hpp11
-rw-r--r--3party/boost/boost/exception/detail/exception_ptr.hpp11
-rw-r--r--3party/boost/boost/exception/detail/type_info.hpp10
-rw-r--r--3party/boost/boost/exception/diagnostic_information.hpp8
-rw-r--r--3party/boost/boost/exception/exception.hpp6
-rw-r--r--3party/boost/boost/filesystem/operations.hpp378
-rw-r--r--3party/boost/boost/flyweight.hpp2
-rw-r--r--3party/boost/boost/flyweight/assoc_container_factory.hpp15
-rw-r--r--3party/boost/boost/flyweight/assoc_container_factory_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/detail/default_value_policy.hpp41
-rw-r--r--3party/boost/boost/flyweight/detail/dyn_perfect_fwd.hpp87
-rw-r--r--3party/boost/boost/flyweight/detail/flyweight_core.hpp80
-rw-r--r--3party/boost/boost/flyweight/detail/is_placeholder_expr.hpp2
-rw-r--r--3party/boost/boost/flyweight/detail/nested_xxx_if_not_ph.hpp2
-rw-r--r--3party/boost/boost/flyweight/detail/not_placeholder_expr.hpp2
-rw-r--r--3party/boost/boost/flyweight/detail/perfect_fwd.hpp73
-rw-r--r--3party/boost/boost/flyweight/detail/pp_perfect_fwd.hpp243
-rw-r--r--3party/boost/boost/flyweight/detail/recursive_lw_mutex.hpp17
-rw-r--r--3party/boost/boost/flyweight/detail/value_tag.hpp2
-rw-r--r--3party/boost/boost/flyweight/factory_tag.hpp2
-rw-r--r--3party/boost/boost/flyweight/flyweight.hpp56
-rw-r--r--3party/boost/boost/flyweight/flyweight_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/hashed_factory.hpp15
-rw-r--r--3party/boost/boost/flyweight/hashed_factory_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/holder_tag.hpp2
-rw-r--r--3party/boost/boost/flyweight/intermodule_holder.hpp2
-rw-r--r--3party/boost/boost/flyweight/intermodule_holder_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/key_value.hpp93
-rw-r--r--3party/boost/boost/flyweight/key_value_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/locking_tag.hpp2
-rw-r--r--3party/boost/boost/flyweight/no_locking.hpp2
-rw-r--r--3party/boost/boost/flyweight/no_locking_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/no_tracking.hpp2
-rw-r--r--3party/boost/boost/flyweight/no_tracking_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/refcounted.hpp54
-rw-r--r--3party/boost/boost/flyweight/refcounted_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/set_factory.hpp2
-rw-r--r--3party/boost/boost/flyweight/set_factory_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/simple_locking.hpp2
-rw-r--r--3party/boost/boost/flyweight/simple_locking_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/static_holder.hpp2
-rw-r--r--3party/boost/boost/flyweight/static_holder_fwd.hpp2
-rw-r--r--3party/boost/boost/flyweight/tag.hpp2
-rw-r--r--3party/boost/boost/flyweight/tracking_tag.hpp2
-rw-r--r--3party/boost/boost/foreach.hpp13
-rw-r--r--3party/boost/boost/format/detail/config_macros.hpp10
-rw-r--r--3party/boost/boost/format/detail/msvc_disambiguater.hpp6
-rw-r--r--3party/boost/boost/format/detail/workarounds_stlport.hpp6
-rw-r--r--3party/boost/boost/format/feed_args.hpp48
-rw-r--r--3party/boost/boost/format/format_class.hpp2
-rw-r--r--3party/boost/boost/format/format_fwd.hpp10
-rw-r--r--3party/boost/boost/format/internals.hpp17
-rw-r--r--3party/boost/boost/format/internals_fwd.hpp4
-rw-r--r--3party/boost/boost/format/parsing.hpp4
-rw-r--r--3party/boost/boost/function/function_base.hpp14
-rw-r--r--3party/boost/boost/function/function_fwd.hpp3
-rw-r--r--3party/boost/boost/function/function_template.hpp4
-rw-r--r--3party/boost/boost/functional.hpp2
-rw-r--r--3party/boost/boost/functional/hash/detail/float_functions.hpp8
-rw-r--r--3party/boost/boost/functional/hash/detail/hash_float.hpp48
-rw-r--r--3party/boost/boost/functional/hash/detail/limits.hpp5
-rw-r--r--3party/boost/boost/functional/hash/extensions.hpp71
-rw-r--r--3party/boost/boost/functional/hash/hash.hpp123
-rw-r--r--3party/boost/boost/functional/hash/hash_fwd.hpp10
-rw-r--r--3party/boost/boost/functional/hash_fwd.hpp6
-rw-r--r--3party/boost/boost/fusion/adapted.hpp3
-rw-r--r--3party/boost/boost/fusion/adapted/adt.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/adt/adapt_adt.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/adt/adapt_adt_named.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/adt/detail/adapt_base.hpp12
-rw-r--r--3party/boost/boost/fusion/adapted/adt/detail/extension.hpp10
-rw-r--r--3party/boost/boost/fusion/adapted/array/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/array/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/array/deref_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/array/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/array/is_sequence_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/array/is_view_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/array/size_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/array/tag_of.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/array/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/array/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_array.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_array/array_iterator.hpp5
-rw-r--r--3party/boost/boost/fusion/adapted/boost_array/detail/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/boost_array/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/boost_array/detail/category_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_array/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_array/detail/is_view_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_array/tag_of.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp9
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple/detail/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple/detail/size_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/boost_tuple/tag_of.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/mpl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/category_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/empty_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/has_key_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/is_view_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/size_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/mpl/mpl_iterator.hpp6
-rw-r--r--3party/boost/boost/fusion/adapted/std_pair.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/detail/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/detail/size_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp6
-rw-r--r--3party/boost/boost/fusion/adapted/std_tuple/tag_of.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/adapt_struct.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/adapt_struct_named.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/define_assoc_struct.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/define_struct.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/define_struct_inline.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/adapt_base.hpp3
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/begin_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/define_struct.hpp11
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/define_struct_inline.hpp146
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/deref_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/end_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/extension.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/namespace.hpp1
-rw-r--r--3party/boost/boost/fusion/adapted/struct/detail/proxy_type.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm.hpp1
-rw-r--r--3party/boost/boost/fusion/algorithm/auxiliary.hpp1
-rw-r--r--3party/boost/boost/fusion/algorithm/auxiliary/copy.hpp7
-rw-r--r--3party/boost/boost/fusion/algorithm/auxiliary/move.hpp89
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration.hpp1
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/accumulate.hpp3
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/accumulate_fwd.hpp3
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/detail/fold.hpp13
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/detail/for_each.hpp11
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp11
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp13
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp11
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp13
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/detail/segmented_fold.hpp4
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp4
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/fold.hpp1
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/fold_fwd.hpp4
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/for_each.hpp3
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/for_each_fwd.hpp3
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/iter_fold.hpp1
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/iter_fold_fwd.hpp4
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/reverse_fold.hpp1
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp4
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold.hpp1
-rw-r--r--3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp4
-rw-r--r--3party/boost/boost/fusion/algorithm/query.hpp1
-rw-r--r--3party/boost/boost/fusion/algorithm/query/all.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/query/any.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/query/count.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/query/count_if.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/query/detail/all.hpp10
-rw-r--r--3party/boost/boost/fusion/algorithm/query/detail/any.hpp10
-rw-r--r--3party/boost/boost/fusion/algorithm/query/detail/count.hpp5
-rw-r--r--3party/boost/boost/fusion/algorithm/query/detail/count_if.hpp10
-rw-r--r--3party/boost/boost/fusion/algorithm/query/detail/find_if.hpp8
-rw-r--r--3party/boost/boost/fusion/algorithm/query/detail/segmented_find.hpp5
-rw-r--r--3party/boost/boost/fusion/algorithm/query/detail/segmented_find_if.hpp5
-rw-r--r--3party/boost/boost/fusion/algorithm/query/find.hpp3
-rw-r--r--3party/boost/boost/fusion/algorithm/query/find_fwd.hpp3
-rw-r--r--3party/boost/boost/fusion/algorithm/query/find_if.hpp3
-rw-r--r--3party/boost/boost/fusion/algorithm/query/find_if_fwd.hpp3
-rw-r--r--3party/boost/boost/fusion/algorithm/query/none.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation.hpp4
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/clear.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp45
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp95
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp145
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp195
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp245
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/detail/replace.hpp5
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/detail/replace_if.hpp5
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/erase.hpp6
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/erase_key.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/filter.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/filter_if.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/flatten.hpp44
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/insert.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/insert_range.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/join.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/pop_back.hpp6
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/pop_front.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/push_back.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/push_front.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/remove.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/remove_if.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/replace.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/replace_if.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/reverse.hpp2
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/transform.hpp3
-rw-r--r--3party/boost/boost/fusion/algorithm/transformation/zip.hpp15
-rw-r--r--3party/boost/boost/fusion/container.hpp1
-rw-r--r--3party/boost/boost/fusion/container/deque.hpp2
-rw-r--r--3party/boost/boost/fusion/container/deque/back_extended_deque.hpp6
-rw-r--r--3party/boost/boost/fusion/container/deque/convert.hpp41
-rw-r--r--3party/boost/boost/fusion/container/deque/deque.hpp38
-rw-r--r--3party/boost/boost/fusion/container/deque/deque_fwd.hpp23
-rw-r--r--3party/boost/boost/fusion/container/deque/deque_iterator.hpp5
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/as_deque.hpp131
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/build_deque.hpp78
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/convert_impl.hpp19
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/as_deque.hpp133
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/build_deque.hpp54
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/deque.hpp198
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp69
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp54
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp64
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp113
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp72
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/limits.hpp (renamed from 3party/boost/boost/fusion/container/deque/limits.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp221
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp431
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp641
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp851
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp1061
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp271
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque10_fwd.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp451
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque20_fwd.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp631
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque30_fwd.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp811
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque40_fwd.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp991
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque50_fwd.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size10.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size10.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size20.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size20.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size30.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size30.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size40.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size40.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size50.hpp (renamed from 3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size50.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp252
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp462
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp672
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp882
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp1092
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp45
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp64
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/deque_keyed_values.hpp72
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp58
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/is_sequence_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp28
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/pp_deque.hpp156
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/pp_deque_fwd.hpp54
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp111
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp211
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp411
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp611
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp811
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp1011
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10.hpp80
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20.hpp110
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30.hpp140
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40.hpp170
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50.hpp200
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp22
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp117
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp197
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp277
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp357
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp437
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp67
-rw-r--r--3party/boost/boost/fusion/container/deque/front_extended_deque.hpp6
-rw-r--r--3party/boost/boost/fusion/container/generation.hpp1
-rw-r--r--3party/boost/boost/fusion/container/generation/cons_tie.hpp7
-rw-r--r--3party/boost/boost/fusion/container/generation/deque_tie.hpp100
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/pp_deque_tie.hpp102
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/pp_make_deque.hpp118
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/pp_make_map.hpp129
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/pp_map_tie.hpp132
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp30
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp60
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp90
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp120
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp150
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp30
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp60
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp90
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp120
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp150
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp32
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp62
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp92
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp122
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp152
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list10.hpp32
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list20.hpp62
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list30.hpp92
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list40.hpp122
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list50.hpp152
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map10.hpp32
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map20.hpp62
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map30.hpp92
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map40.hpp122
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map50.hpp152
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set10.hpp32
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set20.hpp62
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set30.hpp92
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set40.hpp122
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set50.hpp152
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp32
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp62
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp92
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp122
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp152
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp32
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp62
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp92
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp122
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp152
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp30
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp60
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp90
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp120
-rw-r--r--3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp150
-rw-r--r--3party/boost/boost/fusion/container/generation/ignore.hpp1
-rw-r--r--3party/boost/boost/fusion/container/generation/list_tie.hpp5
-rw-r--r--3party/boost/boost/fusion/container/generation/make_cons.hpp7
-rw-r--r--3party/boost/boost/fusion/container/generation/make_deque.hpp117
-rw-r--r--3party/boost/boost/fusion/container/generation/make_list.hpp7
-rw-r--r--3party/boost/boost/fusion/container/generation/make_map.hpp144
-rw-r--r--3party/boost/boost/fusion/container/generation/make_set.hpp7
-rw-r--r--3party/boost/boost/fusion/container/generation/make_vector.hpp7
-rw-r--r--3party/boost/boost/fusion/container/generation/map_tie.hpp136
-rw-r--r--3party/boost/boost/fusion/container/generation/pair_tie.hpp3
-rw-r--r--3party/boost/boost/fusion/container/generation/vector_tie.hpp5
-rw-r--r--3party/boost/boost/fusion/container/list.hpp1
-rw-r--r--3party/boost/boost/fusion/container/list/cons.hpp37
-rw-r--r--3party/boost/boost/fusion/container/list/cons_fwd.hpp9
-rw-r--r--3party/boost/boost/fusion/container/list/cons_iterator.hpp34
-rw-r--r--3party/boost/boost/fusion/container/list/convert.hpp4
-rw-r--r--3party/boost/boost/fusion/container/list/detail/at_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/container/list/detail/begin_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/container/list/detail/build_cons.hpp9
-rw-r--r--3party/boost/boost/fusion/container/list/detail/convert_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/list/detail/deref_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/list/detail/empty_impl.hpp6
-rw-r--r--3party/boost/boost/fusion/container/list/detail/end_impl.hpp6
-rw-r--r--3party/boost/boost/fusion/container/list/detail/equal_to_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/list/detail/list_forward_ctor.hpp1
-rw-r--r--3party/boost/boost/fusion/container/list/detail/list_to_cons.hpp5
-rw-r--r--3party/boost/boost/fusion/container/list/detail/list_to_cons_call.hpp1
-rw-r--r--3party/boost/boost/fusion/container/list/detail/next_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list10.hpp17
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list20.hpp27
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list30.hpp37
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list40.hpp47
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list50.hpp57
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons10.hpp12
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons20.hpp22
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons30.hpp32
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons40.hpp42
-rw-r--r--3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons50.hpp52
-rw-r--r--3party/boost/boost/fusion/container/list/detail/reverse_cons.hpp9
-rw-r--r--3party/boost/boost/fusion/container/list/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/list/limits.hpp2
-rw-r--r--3party/boost/boost/fusion/container/list/list.hpp8
-rw-r--r--3party/boost/boost/fusion/container/list/list_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/container/list/nil.hpp51
-rw-r--r--3party/boost/boost/fusion/container/map.hpp2
-rw-r--r--3party/boost/boost/fusion/container/map/convert.hpp100
-rw-r--r--3party/boost/boost/fusion/container/map/detail/as_map.hpp130
-rw-r--r--3party/boost/boost/fusion/container/map/detail/at_impl.hpp43
-rw-r--r--3party/boost/boost/fusion/container/map/detail/at_key_impl.hpp61
-rw-r--r--3party/boost/boost/fusion/container/map/detail/begin_impl.hpp53
-rw-r--r--3party/boost/boost/fusion/container/map/detail/build_map.hpp80
-rw-r--r--3party/boost/boost/fusion/container/map/detail/convert_impl.hpp45
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/as_map.hpp136
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/at_impl.hpp64
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/begin_impl.hpp45
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/convert.hpp57
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/convert_impl.hpp54
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/deref_data_impl.hpp49
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/deref_impl.hpp47
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/end_impl.hpp45
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/key_of_impl.hpp33
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/limits.hpp28
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/map.hpp111
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp39
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/map_fwd.hpp53
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map.hpp22
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map10.hpp221
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map20.hpp431
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map30.hpp641
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map40.hpp851
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map50.hpp1061
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map.hpp22
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map10.hpp82
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map10_fwd.hpp (renamed from 3party/boost/boost/fusion/container/map/detail/preprocessed/map10_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map20.hpp112
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map20_fwd.hpp (renamed from 3party/boost/boost/fusion/container/map/detail/preprocessed/map20_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map30.hpp142
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map30_fwd.hpp (renamed from 3party/boost/boost/fusion/container/map/detail/preprocessed/map30_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map40.hpp172
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map40_fwd.hpp (renamed from 3party/boost/boost/fusion/container/map/detail/preprocessed/map40_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map50.hpp202
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map50_fwd.hpp (renamed from 3party/boost/boost/fusion/container/map/detail/preprocessed/map50_fwd.hpp)0
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map_fwd.hpp22
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/value_at_impl.hpp35
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/value_of_data_impl.hpp33
-rw-r--r--3party/boost/boost/fusion/container/map/detail/cpp03/value_of_impl.hpp40
-rw-r--r--3party/boost/boost/fusion/container/map/detail/deref_data_impl.hpp47
-rw-r--r--3party/boost/boost/fusion/container/map/detail/deref_impl.hpp45
-rw-r--r--3party/boost/boost/fusion/container/map/detail/end_impl.hpp53
-rw-r--r--3party/boost/boost/fusion/container/map/detail/key_of_impl.hpp32
-rw-r--r--3party/boost/boost/fusion/container/map/detail/map_forward_ctor.hpp38
-rw-r--r--3party/boost/boost/fusion/container/map/detail/map_impl.hpp206
-rw-r--r--3party/boost/boost/fusion/container/map/detail/map_index.hpp19
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/as_map.hpp22
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/as_map10.hpp211
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/as_map20.hpp411
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/as_map30.hpp611
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/as_map40.hpp811
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/as_map50.hpp1011
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/map.hpp22
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/map10.hpp62
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/map20.hpp82
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/map30.hpp102
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/map40.hpp122
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/map50.hpp142
-rw-r--r--3party/boost/boost/fusion/container/map/detail/preprocessed/map_fwd.hpp22
-rw-r--r--3party/boost/boost/fusion/container/map/detail/value_at_impl.hpp20
-rw-r--r--3party/boost/boost/fusion/container/map/detail/value_at_key_impl.hpp39
-rw-r--r--3party/boost/boost/fusion/container/map/detail/value_of_data_impl.hpp32
-rw-r--r--3party/boost/boost/fusion/container/map/detail/value_of_impl.hpp39
-rw-r--r--3party/boost/boost/fusion/container/map/limits.hpp27
-rw-r--r--3party/boost/boost/fusion/container/map/map.hpp159
-rw-r--r--3party/boost/boost/fusion/container/map/map_fwd.hpp61
-rw-r--r--3party/boost/boost/fusion/container/map/map_iterator.hpp153
-rw-r--r--3party/boost/boost/fusion/container/set.hpp1
-rw-r--r--3party/boost/boost/fusion/container/set/convert.hpp3
-rw-r--r--3party/boost/boost/fusion/container/set/detail/as_set.hpp2
-rw-r--r--3party/boost/boost/fusion/container/set/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/set/detail/convert_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/set/detail/deref_data_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/set/detail/deref_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/set/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/set/detail/key_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/as_set10.hpp10
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/as_set20.hpp20
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/as_set30.hpp30
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/as_set40.hpp40
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/as_set50.hpp50
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/set10.hpp15
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/set20.hpp25
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/set30.hpp35
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/set40.hpp45
-rw-r--r--3party/boost/boost/fusion/container/set/detail/preprocessed/set50.hpp55
-rw-r--r--3party/boost/boost/fusion/container/set/detail/set_forward_ctor.hpp1
-rw-r--r--3party/boost/boost/fusion/container/set/detail/value_of_data_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/set/detail/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/set/limits.hpp1
-rw-r--r--3party/boost/boost/fusion/container/set/set.hpp6
-rw-r--r--3party/boost/boost/fusion/container/set/set_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/convert.hpp3
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/advance_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/as_vector.hpp2
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/at_impl.hpp13
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/convert_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/deref_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/distance_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/equal_to_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/next_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp10
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector20.hpp20
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector30.hpp30
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector40.hpp40
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector50.hpp50
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10.hpp546
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20.hpp540
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30.hpp540
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40.hpp540
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50.hpp540
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp108
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp178
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp248
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp318
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp388
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/prior_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/vector_forward_ctor.hpp39
-rw-r--r--3party/boost/boost/fusion/container/vector/detail/vector_n.hpp146
-rw-r--r--3party/boost/boost/fusion/container/vector/limits.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/vector.hpp48
-rw-r--r--3party/boost/boost/fusion/container/vector/vector10.hpp9
-rw-r--r--3party/boost/boost/fusion/container/vector/vector10_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/vector20.hpp4
-rw-r--r--3party/boost/boost/fusion/container/vector/vector20_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/vector30.hpp4
-rw-r--r--3party/boost/boost/fusion/container/vector/vector30_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/vector40.hpp4
-rw-r--r--3party/boost/boost/fusion/container/vector/vector40_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/vector50.hpp4
-rw-r--r--3party/boost/boost/fusion/container/vector/vector50_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/vector_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/container/vector/vector_iterator.hpp2
-rw-r--r--3party/boost/boost/fusion/functional.hpp1
-rw-r--r--3party/boost/boost/fusion/functional/adapter.hpp1
-rw-r--r--3party/boost/boost/fusion/functional/adapter/fused.hpp6
-rw-r--r--3party/boost/boost/fusion/functional/adapter/fused_function_object.hpp6
-rw-r--r--3party/boost/boost/fusion/functional/adapter/fused_procedure.hpp6
-rw-r--r--3party/boost/boost/fusion/functional/adapter/unfused.hpp11
-rw-r--r--3party/boost/boost/fusion/functional/adapter/unfused_typed.hpp7
-rw-r--r--3party/boost/boost/fusion/functional/generation.hpp1
-rw-r--r--3party/boost/boost/fusion/functional/generation/detail/gen_make_adapter.hpp1
-rw-r--r--3party/boost/boost/fusion/functional/generation/make_fused.hpp1
-rw-r--r--3party/boost/boost/fusion/functional/generation/make_fused_function_object.hpp1
-rw-r--r--3party/boost/boost/fusion/functional/generation/make_fused_procedure.hpp1
-rw-r--r--3party/boost/boost/fusion/functional/generation/make_unfused.hpp1
-rw-r--r--3party/boost/boost/fusion/functional/invocation.hpp1
-rw-r--r--3party/boost/boost/fusion/functional/invocation/detail/that_ptr.hpp9
-rw-r--r--3party/boost/boost/fusion/functional/invocation/invoke.hpp13
-rw-r--r--3party/boost/boost/fusion/functional/invocation/invoke_function_object.hpp8
-rw-r--r--3party/boost/boost/fusion/functional/invocation/invoke_procedure.hpp10
-rw-r--r--3party/boost/boost/fusion/include/accumulate.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_adt.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_adt_named.cpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_adt_named.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_assoc_adt.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_assoc_adt_named.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_assoc_class.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_assoc_class_named.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_assoc_struct.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_assoc_struct_named.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_struct.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapt_struct_named.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapted.hpp1
-rw-r--r--3party/boost/boost/fusion/include/adapter.hpp1
-rw-r--r--3party/boost/boost/fusion/include/advance.hpp1
-rw-r--r--3party/boost/boost/fusion/include/algorithm.hpp1
-rw-r--r--3party/boost/boost/fusion/include/all.hpp1
-rw-r--r--3party/boost/boost/fusion/include/any.hpp1
-rw-r--r--3party/boost/boost/fusion/include/array.hpp1
-rw-r--r--3party/boost/boost/fusion/include/as_deque.hpp1
-rw-r--r--3party/boost/boost/fusion/include/as_list.hpp1
-rw-r--r--3party/boost/boost/fusion/include/as_map.hpp1
-rw-r--r--3party/boost/boost/fusion/include/as_set.hpp1
-rw-r--r--3party/boost/boost/fusion/include/as_vector.hpp1
-rw-r--r--3party/boost/boost/fusion/include/at.hpp1
-rw-r--r--3party/boost/boost/fusion/include/at_c.hpp1
-rw-r--r--3party/boost/boost/fusion/include/at_key.hpp1
-rw-r--r--3party/boost/boost/fusion/include/auxiliary.hpp1
-rw-r--r--3party/boost/boost/fusion/include/back.hpp1
-rw-r--r--3party/boost/boost/fusion/include/begin.hpp1
-rw-r--r--3party/boost/boost/fusion/include/boost_array.hpp1
-rw-r--r--3party/boost/boost/fusion/include/boost_tuple.hpp1
-rw-r--r--3party/boost/boost/fusion/include/category_of.hpp1
-rw-r--r--3party/boost/boost/fusion/include/clear.hpp1
-rw-r--r--3party/boost/boost/fusion/include/comparison.hpp1
-rw-r--r--3party/boost/boost/fusion/include/cons.hpp1
-rw-r--r--3party/boost/boost/fusion/include/cons_tie.hpp1
-rw-r--r--3party/boost/boost/fusion/include/container.hpp1
-rw-r--r--3party/boost/boost/fusion/include/convert.hpp1
-rw-r--r--3party/boost/boost/fusion/include/copy.hpp1
-rw-r--r--3party/boost/boost/fusion/include/count.hpp1
-rw-r--r--3party/boost/boost/fusion/include/count_if.hpp1
-rw-r--r--3party/boost/boost/fusion/include/deduce.hpp1
-rw-r--r--3party/boost/boost/fusion/include/deduce_sequence.hpp1
-rw-r--r--3party/boost/boost/fusion/include/define_assoc_struct.hpp1
-rw-r--r--3party/boost/boost/fusion/include/define_struct.hpp1
-rw-r--r--3party/boost/boost/fusion/include/define_struct_inline.hpp1
-rw-r--r--3party/boost/boost/fusion/include/deque.hpp1
-rw-r--r--3party/boost/boost/fusion/include/deque_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/include/deque_tie.hpp1
-rw-r--r--3party/boost/boost/fusion/include/deref.hpp1
-rw-r--r--3party/boost/boost/fusion/include/deref_data.hpp1
-rw-r--r--3party/boost/boost/fusion/include/distance.hpp1
-rw-r--r--3party/boost/boost/fusion/include/empty.hpp1
-rw-r--r--3party/boost/boost/fusion/include/end.hpp1
-rw-r--r--3party/boost/boost/fusion/include/equal_to.hpp1
-rw-r--r--3party/boost/boost/fusion/include/erase.hpp1
-rw-r--r--3party/boost/boost/fusion/include/erase_key.hpp1
-rw-r--r--3party/boost/boost/fusion/include/filter.hpp1
-rw-r--r--3party/boost/boost/fusion/include/filter_if.hpp1
-rw-r--r--3party/boost/boost/fusion/include/filter_view.hpp1
-rw-r--r--3party/boost/boost/fusion/include/find.hpp1
-rw-r--r--3party/boost/boost/fusion/include/find_if.hpp1
-rw-r--r--3party/boost/boost/fusion/include/flatten.hpp14
-rw-r--r--3party/boost/boost/fusion/include/flatten_view.hpp14
-rw-r--r--3party/boost/boost/fusion/include/fold.hpp1
-rw-r--r--3party/boost/boost/fusion/include/for_each.hpp1
-rw-r--r--3party/boost/boost/fusion/include/front.hpp1
-rw-r--r--3party/boost/boost/fusion/include/functional.hpp1
-rw-r--r--3party/boost/boost/fusion/include/fused.hpp1
-rw-r--r--3party/boost/boost/fusion/include/fused_function_object.hpp1
-rw-r--r--3party/boost/boost/fusion/include/fused_procedure.hpp1
-rw-r--r--3party/boost/boost/fusion/include/generation.hpp1
-rw-r--r--3party/boost/boost/fusion/include/greater.hpp1
-rw-r--r--3party/boost/boost/fusion/include/greater_equal.hpp1
-rw-r--r--3party/boost/boost/fusion/include/has_key.hpp1
-rw-r--r--3party/boost/boost/fusion/include/ignore.hpp1
-rw-r--r--3party/boost/boost/fusion/include/in.hpp1
-rw-r--r--3party/boost/boost/fusion/include/insert.hpp1
-rw-r--r--3party/boost/boost/fusion/include/insert_range.hpp1
-rw-r--r--3party/boost/boost/fusion/include/intrinsic.hpp1
-rw-r--r--3party/boost/boost/fusion/include/invocation.hpp1
-rw-r--r--3party/boost/boost/fusion/include/invoke.hpp1
-rw-r--r--3party/boost/boost/fusion/include/invoke_function_object.hpp1
-rw-r--r--3party/boost/boost/fusion/include/invoke_procedure.hpp1
-rw-r--r--3party/boost/boost/fusion/include/io.hpp1
-rw-r--r--3party/boost/boost/fusion/include/is_iterator.hpp1
-rw-r--r--3party/boost/boost/fusion/include/is_segmented.hpp1
-rw-r--r--3party/boost/boost/fusion/include/is_sequence.hpp1
-rw-r--r--3party/boost/boost/fusion/include/is_view.hpp1
-rw-r--r--3party/boost/boost/fusion/include/iter_fold.hpp1
-rw-r--r--3party/boost/boost/fusion/include/iteration.hpp1
-rw-r--r--3party/boost/boost/fusion/include/iterator.hpp1
-rw-r--r--3party/boost/boost/fusion/include/iterator_adapter.hpp1
-rw-r--r--3party/boost/boost/fusion/include/iterator_base.hpp1
-rw-r--r--3party/boost/boost/fusion/include/iterator_facade.hpp1
-rw-r--r--3party/boost/boost/fusion/include/iterator_range.hpp1
-rw-r--r--3party/boost/boost/fusion/include/join.hpp1
-rw-r--r--3party/boost/boost/fusion/include/joint_view.hpp1
-rw-r--r--3party/boost/boost/fusion/include/key_of.hpp1
-rw-r--r--3party/boost/boost/fusion/include/less.hpp1
-rw-r--r--3party/boost/boost/fusion/include/less_equal.hpp1
-rw-r--r--3party/boost/boost/fusion/include/list.hpp1
-rw-r--r--3party/boost/boost/fusion/include/list_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/include/list_tie.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_cons.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_deque.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_fused.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_fused_function_object.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_fused_procedure.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_list.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_map.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_set.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_tuple.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_unfused.hpp1
-rw-r--r--3party/boost/boost/fusion/include/make_vector.hpp1
-rw-r--r--3party/boost/boost/fusion/include/map.hpp1
-rw-r--r--3party/boost/boost/fusion/include/map_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/include/map_tie.hpp1
-rw-r--r--3party/boost/boost/fusion/include/move.hpp13
-rw-r--r--3party/boost/boost/fusion/include/mpl.hpp1
-rw-r--r--3party/boost/boost/fusion/include/next.hpp1
-rw-r--r--3party/boost/boost/fusion/include/nil.hpp13
-rw-r--r--3party/boost/boost/fusion/include/none.hpp1
-rw-r--r--3party/boost/boost/fusion/include/not_equal_to.hpp1
-rw-r--r--3party/boost/boost/fusion/include/nview.hpp1
-rw-r--r--3party/boost/boost/fusion/include/out.hpp1
-rw-r--r--3party/boost/boost/fusion/include/pair.hpp1
-rw-r--r--3party/boost/boost/fusion/include/pair_tie.hpp1
-rw-r--r--3party/boost/boost/fusion/include/pop_back.hpp1
-rw-r--r--3party/boost/boost/fusion/include/pop_front.hpp1
-rw-r--r--3party/boost/boost/fusion/include/prior.hpp1
-rw-r--r--3party/boost/boost/fusion/include/proxy_type.hpp1
-rw-r--r--3party/boost/boost/fusion/include/push_back.hpp1
-rw-r--r--3party/boost/boost/fusion/include/push_front.hpp1
-rw-r--r--3party/boost/boost/fusion/include/query.hpp1
-rw-r--r--3party/boost/boost/fusion/include/remove.hpp1
-rw-r--r--3party/boost/boost/fusion/include/remove_if.hpp1
-rw-r--r--3party/boost/boost/fusion/include/repetitive_view.hpp1
-rw-r--r--3party/boost/boost/fusion/include/replace.hpp1
-rw-r--r--3party/boost/boost/fusion/include/replace_if.hpp1
-rw-r--r--3party/boost/boost/fusion/include/reverse.hpp1
-rw-r--r--3party/boost/boost/fusion/include/reverse_fold.hpp1
-rw-r--r--3party/boost/boost/fusion/include/reverse_iter_fold.hpp1
-rw-r--r--3party/boost/boost/fusion/include/reverse_view.hpp1
-rw-r--r--3party/boost/boost/fusion/include/segmented_fold_until.hpp1
-rw-r--r--3party/boost/boost/fusion/include/segmented_iterator.hpp1
-rw-r--r--3party/boost/boost/fusion/include/segments.hpp1
-rw-r--r--3party/boost/boost/fusion/include/sequence.hpp1
-rw-r--r--3party/boost/boost/fusion/include/sequence_base.hpp1
-rw-r--r--3party/boost/boost/fusion/include/sequence_facade.hpp1
-rw-r--r--3party/boost/boost/fusion/include/set.hpp1
-rw-r--r--3party/boost/boost/fusion/include/set_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/include/single_view.hpp1
-rw-r--r--3party/boost/boost/fusion/include/size.hpp1
-rw-r--r--3party/boost/boost/fusion/include/std_pair.hpp1
-rw-r--r--3party/boost/boost/fusion/include/struct.hpp1
-rw-r--r--3party/boost/boost/fusion/include/support.hpp1
-rw-r--r--3party/boost/boost/fusion/include/swap.hpp1
-rw-r--r--3party/boost/boost/fusion/include/tag_of.hpp1
-rw-r--r--3party/boost/boost/fusion/include/tag_of_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/include/transform.hpp1
-rw-r--r--3party/boost/boost/fusion/include/transform_view.hpp1
-rw-r--r--3party/boost/boost/fusion/include/transformation.hpp1
-rw-r--r--3party/boost/boost/fusion/include/tuple.hpp1
-rw-r--r--3party/boost/boost/fusion/include/tuple_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/include/tuple_tie.hpp1
-rw-r--r--3party/boost/boost/fusion/include/unfused.hpp1
-rw-r--r--3party/boost/boost/fusion/include/unfused_typed.hpp1
-rw-r--r--3party/boost/boost/fusion/include/unused.hpp1
-rw-r--r--3party/boost/boost/fusion/include/value_at.hpp1
-rw-r--r--3party/boost/boost/fusion/include/value_at_key.hpp1
-rw-r--r--3party/boost/boost/fusion/include/value_of.hpp1
-rw-r--r--3party/boost/boost/fusion/include/value_of_data.hpp1
-rw-r--r--3party/boost/boost/fusion/include/vector.hpp1
-rw-r--r--3party/boost/boost/fusion/include/vector10.hpp1
-rw-r--r--3party/boost/boost/fusion/include/vector20.hpp1
-rw-r--r--3party/boost/boost/fusion/include/vector30.hpp1
-rw-r--r--3party/boost/boost/fusion/include/vector40.hpp1
-rw-r--r--3party/boost/boost/fusion/include/vector50.hpp1
-rw-r--r--3party/boost/boost/fusion/include/vector_fwd.hpp1
-rw-r--r--3party/boost/boost/fusion/include/vector_tie.hpp1
-rw-r--r--3party/boost/boost/fusion/include/view.hpp1
-rw-r--r--3party/boost/boost/fusion/include/void.hpp1
-rw-r--r--3party/boost/boost/fusion/include/zip.hpp1
-rw-r--r--3party/boost/boost/fusion/include/zip_view.hpp1
-rw-r--r--3party/boost/boost/fusion/iterator.hpp1
-rw-r--r--3party/boost/boost/fusion/iterator/advance.hpp3
-rw-r--r--3party/boost/boost/fusion/iterator/basic_iterator.hpp8
-rw-r--r--3party/boost/boost/fusion/iterator/deref.hpp3
-rw-r--r--3party/boost/boost/fusion/iterator/deref_data.hpp2
-rw-r--r--3party/boost/boost/fusion/iterator/detail/adapt_deref_traits.hpp2
-rw-r--r--3party/boost/boost/fusion/iterator/detail/adapt_value_traits.hpp1
-rw-r--r--3party/boost/boost/fusion/iterator/detail/advance.hpp5
-rw-r--r--3party/boost/boost/fusion/iterator/detail/distance.hpp2
-rw-r--r--3party/boost/boost/fusion/iterator/detail/segment_sequence.hpp4
-rw-r--r--3party/boost/boost/fusion/iterator/detail/segmented_equal_to.hpp5
-rw-r--r--3party/boost/boost/fusion/iterator/detail/segmented_iterator.hpp8
-rw-r--r--3party/boost/boost/fusion/iterator/detail/segmented_next_impl.hpp13
-rw-r--r--3party/boost/boost/fusion/iterator/distance.hpp2
-rw-r--r--3party/boost/boost/fusion/iterator/equal_to.hpp3
-rw-r--r--3party/boost/boost/fusion/iterator/iterator_adapter.hpp6
-rw-r--r--3party/boost/boost/fusion/iterator/iterator_facade.hpp1
-rw-r--r--3party/boost/boost/fusion/iterator/key_of.hpp1
-rw-r--r--3party/boost/boost/fusion/iterator/mpl.hpp1
-rw-r--r--3party/boost/boost/fusion/iterator/mpl/convert_iterator.hpp4
-rw-r--r--3party/boost/boost/fusion/iterator/mpl/fusion_iterator.hpp1
-rw-r--r--3party/boost/boost/fusion/iterator/next.hpp2
-rw-r--r--3party/boost/boost/fusion/iterator/prior.hpp2
-rw-r--r--3party/boost/boost/fusion/iterator/segmented_iterator.hpp1
-rw-r--r--3party/boost/boost/fusion/iterator/value_of.hpp1
-rw-r--r--3party/boost/boost/fusion/iterator/value_of_data.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/at.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/back.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/begin.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/clear.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/detail/clear.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/empty.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/end.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/erase.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/erase_key.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/front.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/has_key.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/insert.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/insert_range.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/pop_back.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/pop_front.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/push_back.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/push_front.hpp1
-rw-r--r--3party/boost/boost/fusion/mpl/size.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/comparison.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/detail/equal_to.hpp5
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/detail/greater.hpp4
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/detail/greater_equal.hpp4
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/detail/less.hpp4
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/detail/less_equal.hpp4
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/detail/not_equal_to.hpp5
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/enable_comparison.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/equal_to.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/greater.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/greater_equal.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/less.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/less_equal.hpp6
-rw-r--r--3party/boost/boost/fusion/sequence/comparison/not_equal_to.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/convert.hpp10
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/at.hpp5
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/at_c.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/at_key.hpp4
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/back.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/begin.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp10
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp8
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/empty.hpp2
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/end.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/front.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp2
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/segments.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/size.hpp2
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/swap.hpp3
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/value_at.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic/value_at_key.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/intrinsic_fwd.hpp20
-rw-r--r--3party/boost/boost/fusion/sequence/io.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/io/detail/in.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/io/detail/manip.hpp55
-rw-r--r--3party/boost/boost/fusion/sequence/io/detail/out.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/io/in.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/io/out.hpp1
-rw-r--r--3party/boost/boost/fusion/sequence/sequence_facade.hpp1
-rw-r--r--3party/boost/boost/fusion/support.hpp3
-rw-r--r--3party/boost/boost/fusion/support/as_const.hpp1
-rw-r--r--3party/boost/boost/fusion/support/category_of.hpp1
-rw-r--r--3party/boost/boost/fusion/support/config.hpp16
-rw-r--r--3party/boost/boost/fusion/support/deduce.hpp1
-rw-r--r--3party/boost/boost/fusion/support/deduce_sequence.hpp4
-rw-r--r--3party/boost/boost/fusion/support/detail/access.hpp9
-rw-r--r--3party/boost/boost/fusion/support/detail/as_fusion_element.hpp1
-rw-r--r--3party/boost/boost/fusion/support/detail/is_mpl_sequence.hpp1
-rw-r--r--3party/boost/boost/fusion/support/detail/pp_round.hpp1
-rw-r--r--3party/boost/boost/fusion/support/detail/segmented_fold_until_impl.hpp12
-rw-r--r--3party/boost/boost/fusion/support/is_iterator.hpp1
-rw-r--r--3party/boost/boost/fusion/support/is_segmented.hpp1
-rw-r--r--3party/boost/boost/fusion/support/is_sequence.hpp3
-rw-r--r--3party/boost/boost/fusion/support/is_view.hpp1
-rw-r--r--3party/boost/boost/fusion/support/iterator_base.hpp4
-rw-r--r--3party/boost/boost/fusion/support/pair.hpp54
-rw-r--r--3party/boost/boost/fusion/support/segmented_fold_until.hpp11
-rw-r--r--3party/boost/boost/fusion/support/sequence_base.hpp4
-rw-r--r--3party/boost/boost/fusion/support/tag_of.hpp1
-rw-r--r--3party/boost/boost/fusion/support/unused.hpp8
-rw-r--r--3party/boost/boost/fusion/tuple.hpp2
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp10
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp20
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp30
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp40
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp50
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple.hpp3
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10.hpp40
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20.hpp70
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30.hpp100
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40.hpp130
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50.hpp160
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp10
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp20
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp30
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp40
-rw-r--r--3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp50
-rw-r--r--3party/boost/boost/fusion/tuple/detail/tuple_expand.hpp3
-rw-r--r--3party/boost/boost/fusion/tuple/make_tuple.hpp3
-rw-r--r--3party/boost/boost/fusion/tuple/tuple.hpp12
-rw-r--r--3party/boost/boost/fusion/tuple/tuple_fwd.hpp2
-rw-r--r--3party/boost/boost/fusion/tuple/tuple_tie.hpp1
-rw-r--r--3party/boost/boost/fusion/view.hpp2
-rw-r--r--3party/boost/boost/fusion/view/detail/strictest_traversal.hpp4
-rw-r--r--3party/boost/boost/fusion/view/filter_view.hpp1
-rw-r--r--3party/boost/boost/fusion/view/filter_view/detail/begin_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/filter_view/detail/deref_data_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/filter_view/detail/deref_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/filter_view/detail/end_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/filter_view/detail/key_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/filter_view/detail/next_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/filter_view/detail/size_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/filter_view/detail/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/filter_view/filter_view.hpp4
-rw-r--r--3party/boost/boost/fusion/view/filter_view/filter_view_iterator.hpp2
-rw-r--r--3party/boost/boost/fusion/view/flatten_view.hpp15
-rw-r--r--3party/boost/boost/fusion/view/flatten_view/flatten_view.hpp127
-rw-r--r--3party/boost/boost/fusion/view/flatten_view/flatten_view_iterator.hpp199
-rw-r--r--3party/boost/boost/fusion/view/iterator_range.hpp1
-rw-r--r--3party/boost/boost/fusion/view/iterator_range/detail/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/iterator_range/detail/begin_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/iterator_range/detail/end_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp21
-rw-r--r--3party/boost/boost/fusion/view/iterator_range/detail/segments_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/iterator_range/detail/size_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/iterator_range/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/iterator_range/iterator_range.hpp2
-rw-r--r--3party/boost/boost/fusion/view/joint_view.hpp1
-rw-r--r--3party/boost/boost/fusion/view/joint_view/detail/begin_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/view/joint_view/detail/deref_data_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/joint_view/detail/deref_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/joint_view/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/joint_view/detail/key_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/joint_view/detail/next_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/joint_view/detail/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/joint_view/joint_view.hpp5
-rw-r--r--3party/boost/boost/fusion/view/joint_view/joint_view_iterator.hpp2
-rw-r--r--3party/boost/boost/fusion/view/nview.hpp1
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/advance_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/deref_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/distance_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/equal_to_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/next_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/nview_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/prior_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/size_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/nview/detail/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/nview/nview.hpp9
-rw-r--r--3party/boost/boost/fusion/view/nview/nview_iterator.hpp3
-rw-r--r--3party/boost/boost/fusion/view/repetitive_view.hpp1
-rw-r--r--3party/boost/boost/fusion/view/repetitive_view/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/repetitive_view/detail/deref_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/repetitive_view/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/repetitive_view/detail/next_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/view/repetitive_view/detail/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/repetitive_view/repetitive_view.hpp2
-rw-r--r--3party/boost/boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp4
-rw-r--r--3party/boost/boost/fusion/view/reverse_view.hpp1
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/advance_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/begin_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/deref_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/distance_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/end_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/key_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/next_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/prior_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/detail/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/reverse_view.hpp4
-rw-r--r--3party/boost/boost/fusion/view/reverse_view/reverse_view_iterator.hpp2
-rw-r--r--3party/boost/boost/fusion/view/single_view.hpp1
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/advance_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/at_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/begin_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/deref_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/distance_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/end_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/equal_to_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/next_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/prior_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/single_view/detail/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/single_view/single_view.hpp5
-rw-r--r--3party/boost/boost/fusion/view/single_view/single_view_iterator.hpp3
-rw-r--r--3party/boost/boost/fusion/view/transform_view.hpp1
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/advance_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/apply_transform_result.hpp1
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/at_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/begin_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/deref_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/distance_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/end_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/equal_to_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/next_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/prior_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/value_at_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/transform_view/detail/value_of_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/transform_view/transform_view.hpp9
-rw-r--r--3party/boost/boost/fusion/view/transform_view/transform_view_iterator.hpp3
-rw-r--r--3party/boost/boost/fusion/view/zip_view.hpp1
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/advance_impl.hpp3
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/at_impl.hpp5
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/begin_impl.hpp5
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/deref_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/distance_impl.hpp2
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/end_impl.hpp5
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/equal_to_impl.hpp1
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/next_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/prior_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/value_at_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/view/zip_view/detail/value_of_impl.hpp4
-rw-r--r--3party/boost/boost/fusion/view/zip_view/zip_view.hpp8
-rw-r--r--3party/boost/boost/fusion/view/zip_view/zip_view_iterator.hpp2
-rw-r--r--3party/boost/boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp1
-rw-r--r--3party/boost/boost/geometry/algorithms/append.hpp54
-rw-r--r--3party/boost/boost/geometry/algorithms/area.hpp50
-rw-r--r--3party/boost/boost/geometry/algorithms/assign.hpp246
-rw-r--r--3party/boost/boost/geometry/algorithms/buffer.hpp153
-rw-r--r--3party/boost/boost/geometry/algorithms/centroid.hpp278
-rw-r--r--3party/boost/boost/geometry/algorithms/clear.hpp34
-rw-r--r--3party/boost/boost/geometry/algorithms/comparable_distance.hpp69
-rw-r--r--3party/boost/boost/geometry/algorithms/convert.hpp155
-rw-r--r--3party/boost/boost/geometry/algorithms/convex_hull.hpp204
-rw-r--r--3party/boost/boost/geometry/algorithms/correct.hpp87
-rw-r--r--3party/boost/boost/geometry/algorithms/covered_by.hpp412
-rw-r--r--3party/boost/boost/geometry/algorithms/crosses.hpp194
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp6
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp2
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/assign_values.hpp164
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp856
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp164
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp841
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/buffer/buffered_ring.hpp238
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp204
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp88
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/buffer/parallel_continue.hpp33
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/buffer/turn_in_input.hpp98
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp198
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/calculate_sum.hpp6
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/check_iterator_range.hpp71
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/comparable_distance/implementation.hpp24
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/comparable_distance/interface.hpp363
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp20
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint.hpp239
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/areal_areal.hpp134
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/box_box.hpp114
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/implementation.hpp36
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/interface.hpp187
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/linear_areal.hpp244
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp174
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp195
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/point_box.hpp94
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/point_geometry.hpp111
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/point_point.hpp112
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/disjoint/segment_box.hpp291
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/backward_compatibility.hpp345
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/box_to_box.hpp58
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/default_strategies.hpp143
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/geometry_to_geometry_rtree.hpp383
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/implementation.hpp38
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/interface.hpp403
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/multi_to_multi.hpp256
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/multipoint_to_range.hpp183
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp442
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/polygon_to_segment_or_box.hpp160
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/range_to_segment_or_box.hpp333
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/segment_to_box.hpp814
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/segment_to_segment.hpp131
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/distance/single_to_multi.hpp526
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp43
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/equals/point_point.hpp52
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/extreme_points.hpp515
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/for_each_range.hpp116
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/get_left_turns.hpp468
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/get_max_size.hpp64
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp53
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/interior_iterator.hpp71
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_simple/always_simple.hpp83
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_simple/areal.hpp141
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp82
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_simple/implementation.hpp18
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_simple/interface.hpp80
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_simple/linear.hpp248
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_simple/multipoint.hpp84
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/box.hpp86
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp239
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp70
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp64
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp68
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp70
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp139
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp93
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/implementation.hpp21
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/interface.hpp78
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp144
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/linear.hpp125
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp292
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/pointlike.hpp62
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/polygon.hpp322
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/ring.hpp173
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/is_valid/segment.hpp61
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/multi_modify.hpp53
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp52
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/multi_sum.hpp52
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp93
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/occupation_info.hpp333
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp4
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp160
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp6
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp23
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp64
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp2
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp85
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp280
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/do_reverse.hpp47
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp80
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp18
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/follow.hpp284
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp534
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp71
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp13
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp24
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp431
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp661
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp329
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp809
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp720
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp394
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp177
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp84
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp315
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/linear_linear.hpp326
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp61
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp435
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp63
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp117
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp3
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp16
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp53
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp11
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp54
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/partition.hpp96
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp126
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/point_on_border.hpp64
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/recalculate.hpp231
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/areal_areal.hpp823
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/boundary_checker.hpp134
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/follow_helpers.hpp401
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/less.hpp79
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/linear_areal.hpp1111
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/linear_linear.hpp765
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/point_geometry.hpp205
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/point_point.hpp242
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/relate.hpp339
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/result.hpp1390
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/topology_check.hpp241
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/relate/turns.hpp228
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp62
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp430
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/single_geometry.hpp95
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/sub_range.hpp113
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp2
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/turns/compare_turns.hpp109
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/turns/debug_turn.hpp63
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp78
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/turns/print_turns.hpp104
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp62
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/within/point_in_geometry.hpp463
-rw-r--r--3party/boost/boost/geometry/algorithms/detail/within/within_no_turns.hpp221
-rw-r--r--3party/boost/boost/geometry/algorithms/difference.hpp31
-rw-r--r--3party/boost/boost/geometry/algorithms/disjoint.hpp293
-rw-r--r--3party/boost/boost/geometry/algorithms/dispatch/disjoint.hpp70
-rw-r--r--3party/boost/boost/geometry/algorithms/dispatch/distance.hpp65
-rw-r--r--3party/boost/boost/geometry/algorithms/dispatch/is_simple.hpp38
-rw-r--r--3party/boost/boost/geometry/algorithms/dispatch/is_valid.hpp46
-rw-r--r--3party/boost/boost/geometry/algorithms/distance.hpp592
-rw-r--r--3party/boost/boost/geometry/algorithms/envelope.hpp117
-rw-r--r--3party/boost/boost/geometry/algorithms/equals.hpp138
-rw-r--r--3party/boost/boost/geometry/algorithms/expand.hpp53
-rw-r--r--3party/boost/boost/geometry/algorithms/for_each.hpp84
-rw-r--r--3party/boost/boost/geometry/algorithms/intersection.hpp259
-rw-r--r--3party/boost/boost/geometry/algorithms/intersects.hpp35
-rw-r--r--3party/boost/boost/geometry/algorithms/is_simple.hpp16
-rw-r--r--3party/boost/boost/geometry/algorithms/is_valid.hpp16
-rw-r--r--3party/boost/boost/geometry/algorithms/length.hpp102
-rw-r--r--3party/boost/boost/geometry/algorithms/not_implemented.hpp1
-rw-r--r--3party/boost/boost/geometry/algorithms/num_geometries.hpp11
-rw-r--r--3party/boost/boost/geometry/algorithms/num_points.hpp38
-rw-r--r--3party/boost/boost/geometry/algorithms/overlaps.hpp24
-rw-r--r--3party/boost/boost/geometry/algorithms/perimeter.hpp135
-rw-r--r--3party/boost/boost/geometry/algorithms/point_on_surface.hpp355
-rw-r--r--3party/boost/boost/geometry/algorithms/remove_spikes.hpp280
-rw-r--r--3party/boost/boost/geometry/algorithms/reverse.hpp78
-rw-r--r--3party/boost/boost/geometry/algorithms/simplify.hpp296
-rw-r--r--3party/boost/boost/geometry/algorithms/sym_difference.hpp29
-rw-r--r--3party/boost/boost/geometry/algorithms/touches.hpp585
-rw-r--r--3party/boost/boost/geometry/algorithms/transform.hpp185
-rw-r--r--3party/boost/boost/geometry/algorithms/union.hpp108
-rw-r--r--3party/boost/boost/geometry/algorithms/unique.hpp49
-rw-r--r--3party/boost/boost/geometry/algorithms/within.hpp513
-rw-r--r--3party/boost/boost/geometry/arithmetic/arithmetic.hpp27
-rw-r--r--3party/boost/boost/geometry/arithmetic/determinant.hpp2
-rw-r--r--3party/boost/boost/geometry/arithmetic/dot_product.hpp16
-rw-r--r--3party/boost/boost/geometry/core/access.hpp6
-rw-r--r--3party/boost/boost/geometry/core/closure.hpp45
-rw-r--r--3party/boost/boost/geometry/core/cs.hpp12
-rw-r--r--3party/boost/boost/geometry/core/geometry_id.hpp31
-rw-r--r--3party/boost/boost/geometry/core/interior_rings.hpp13
-rw-r--r--3party/boost/boost/geometry/core/is_areal.hpp5
-rw-r--r--3party/boost/boost/geometry/core/point_order.hpp34
-rw-r--r--3party/boost/boost/geometry/core/point_type.hpp36
-rw-r--r--3party/boost/boost/geometry/core/ring_type.hpp53
-rw-r--r--3party/boost/boost/geometry/core/tag.hpp3
-rw-r--r--3party/boost/boost/geometry/core/tag_cast.hpp4
-rw-r--r--3party/boost/boost/geometry/core/tags.hpp45
-rw-r--r--3party/boost/boost/geometry/core/topological_dimension.hpp13
-rw-r--r--3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp19
-rw-r--r--3party/boost/boost/geometry/geometries/concepts/check.hpp46
-rw-r--r--3party/boost/boost/geometry/geometries/concepts/multi_linestring_concept.hpp91
-rw-r--r--3party/boost/boost/geometry/geometries/concepts/multi_point_concept.hpp90
-rw-r--r--3party/boost/boost/geometry/geometries/concepts/multi_polygon_concept.hpp91
-rw-r--r--3party/boost/boost/geometry/geometries/geometries.hpp4
-rw-r--r--3party/boost/boost/geometry/geometries/multi_linestring.hpp80
-rw-r--r--3party/boost/boost/geometry/geometries/multi_point.hpp94
-rw-r--r--3party/boost/boost/geometry/geometries/multi_polygon.hpp77
-rw-r--r--3party/boost/boost/geometry/geometries/point.hpp4
-rw-r--r--3party/boost/boost/geometry/geometries/register/box.hpp8
-rw-r--r--3party/boost/boost/geometry/geometries/register/linestring.hpp4
-rw-r--r--3party/boost/boost/geometry/geometries/register/multi_linestring.hpp59
-rw-r--r--3party/boost/boost/geometry/geometries/register/multi_point.hpp59
-rw-r--r--3party/boost/boost/geometry/geometries/register/multi_polygon.hpp59
-rw-r--r--3party/boost/boost/geometry/geometries/register/ring.hpp4
-rw-r--r--3party/boost/boost/geometry/geometry.hpp22
-rw-r--r--3party/boost/boost/geometry/index/detail/algorithms/bounds.hpp51
-rw-r--r--3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp8
-rw-r--r--3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp6
-rw-r--r--3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp8
-rw-r--r--3party/boost/boost/geometry/index/detail/algorithms/intersection_content.hpp3
-rw-r--r--3party/boost/boost/geometry/index/detail/algorithms/is_valid.hpp11
-rw-r--r--3party/boost/boost/geometry/index/detail/algorithms/minmaxdist.hpp10
-rw-r--r--3party/boost/boost/geometry/index/detail/algorithms/path_intersection.hpp7
-rw-r--r--3party/boost/boost/geometry/index/detail/algorithms/segment_intersection.hpp11
-rw-r--r--3party/boost/boost/geometry/index/detail/bounded_view.hpp185
-rw-r--r--3party/boost/boost/geometry/index/detail/distance_predicates.hpp10
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp32
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/node/node_auto_ptr.hpp2
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_dynamic.hpp6
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_static.hpp6
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_dynamic.hpp6
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_static.hpp10
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/options.hpp14
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/pack_create.hpp14
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp13
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/query_iterators.hpp449
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/rstar/insert.hpp15
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp61
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp6
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp60
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/utilities/print.hpp20
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/utilities/statistics.hpp2
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/visitors/count.hpp14
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/visitors/distance_query.hpp6
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/visitors/insert.hpp6
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/visitors/remove.hpp13
-rw-r--r--3party/boost/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp18
-rw-r--r--3party/boost/boost/geometry/index/detail/serialization.hpp581
-rw-r--r--3party/boost/boost/geometry/index/detail/tuples.hpp13
-rw-r--r--3party/boost/boost/geometry/index/detail/type_erased_iterators.hpp60
-rw-r--r--3party/boost/boost/geometry/index/detail/varray.hpp12
-rw-r--r--3party/boost/boost/geometry/index/detail/varray_detail.hpp84
-rw-r--r--3party/boost/boost/geometry/index/equal_to.hpp106
-rw-r--r--3party/boost/boost/geometry/index/indexable.hpp68
-rw-r--r--3party/boost/boost/geometry/index/predicates.hpp37
-rw-r--r--3party/boost/boost/geometry/index/rtree.hpp338
-rw-r--r--3party/boost/boost/geometry/io/dsv/write.hpp64
-rw-r--r--3party/boost/boost/geometry/io/svg/svg_mapper.hpp30
-rw-r--r--3party/boost/boost/geometry/io/svg/write_svg.hpp14
-rw-r--r--3party/boost/boost/geometry/io/wkt/detail/prefix.hpp21
-rw-r--r--3party/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp3
-rw-r--r--3party/boost/boost/geometry/io/wkt/read.hpp158
-rw-r--r--3party/boost/boost/geometry/io/wkt/stream.hpp6
-rw-r--r--3party/boost/boost/geometry/io/wkt/write.hpp134
-rw-r--r--3party/boost/boost/geometry/iterators/concatenate_iterator.hpp148
-rw-r--r--3party/boost/boost/geometry/iterators/dispatch/point_iterator.hpp47
-rw-r--r--3party/boost/boost/geometry/iterators/dispatch/point_iterator_type.hpp37
-rw-r--r--3party/boost/boost/geometry/iterators/ever_circling_iterator.hpp2
-rw-r--r--3party/boost/boost/geometry/iterators/flatten_iterator.hpp248
-rw-r--r--3party/boost/boost/geometry/iterators/has_one_element.hpp29
-rw-r--r--3party/boost/boost/geometry/iterators/point_iterator.hpp285
-rw-r--r--3party/boost/boost/geometry/iterators/point_iterator_type.hpp207
-rw-r--r--3party/boost/boost/geometry/iterators/point_reverse_iterator.hpp97
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/append.hpp63
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/area.hpp37
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/centroid.hpp112
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/clear.hpp23
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/convert.hpp108
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/correct.hpp46
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/covered_by.hpp56
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/extreme_points.hpp19
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp66
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/modify.hpp34
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp33
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp39
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp89
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp89
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp40
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp97
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp49
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp41
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp78
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp75
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp79
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/disjoint.hpp39
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/distance.hpp151
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/envelope.hpp86
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/equals.hpp43
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/for_each.hpp80
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/intersection.hpp61
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/length.hpp41
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/num_geometries.hpp31
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp3
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/num_points.hpp8
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/perimeter.hpp35
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/remove_spikes.hpp19
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/reverse.hpp42
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/simplify.hpp71
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/transform.hpp70
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/unique.hpp65
-rw-r--r--3party/boost/boost/geometry/multi/algorithms/within.hpp92
-rw-r--r--3party/boost/boost/geometry/multi/core/closure.hpp39
-rw-r--r--3party/boost/boost/geometry/multi/core/geometry_id.hpp36
-rw-r--r--3party/boost/boost/geometry/multi/core/interior_rings.hpp33
-rw-r--r--3party/boost/boost/geometry/multi/core/is_areal.hpp21
-rw-r--r--3party/boost/boost/geometry/multi/core/point_order.hpp36
-rw-r--r--3party/boost/boost/geometry/multi/core/point_type.hpp42
-rw-r--r--3party/boost/boost/geometry/multi/core/ring_type.hpp47
-rw-r--r--3party/boost/boost/geometry/multi/core/tags.hpp51
-rw-r--r--3party/boost/boost/geometry/multi/core/topological_dimension.hpp30
-rw-r--r--3party/boost/boost/geometry/multi/geometries/concepts/check.hpp61
-rw-r--r--3party/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp66
-rw-r--r--3party/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp65
-rw-r--r--3party/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp66
-rw-r--r--3party/boost/boost/geometry/multi/geometries/multi_geometries.hpp6
-rw-r--r--3party/boost/boost/geometry/multi/geometries/multi_linestring.hpp67
-rw-r--r--3party/boost/boost/geometry/multi/geometries/multi_point.hpp75
-rw-r--r--3party/boost/boost/geometry/multi/geometries/multi_polygon.hpp59
-rw-r--r--3party/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp41
-rw-r--r--3party/boost/boost/geometry/multi/geometries/register/multi_point.hpp41
-rw-r--r--3party/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp41
-rw-r--r--3party/boost/boost/geometry/multi/io/dsv/write.hpp65
-rw-r--r--3party/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp32
-rw-r--r--3party/boost/boost/geometry/multi/io/wkt/read.hpp147
-rw-r--r--3party/boost/boost/geometry/multi/io/wkt/wkt.hpp4
-rw-r--r--3party/boost/boost/geometry/multi/io/wkt/write.hpp90
-rw-r--r--3party/boost/boost/geometry/multi/multi.hpp110
-rw-r--r--3party/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp97
-rw-r--r--3party/boost/boost/geometry/multi/views/detail/range_type.hpp41
-rw-r--r--3party/boost/boost/geometry/policies/disjoint_interrupt_policy.hpp67
-rw-r--r--3party/boost/boost/geometry/policies/predicate_based_interrupt_policy.hpp101
-rw-r--r--3party/boost/boost/geometry/policies/relate/de9im.hpp9
-rw-r--r--3party/boost/boost/geometry/policies/relate/direction.hpp266
-rw-r--r--3party/boost/boost/geometry/policies/relate/intersection_points.hpp245
-rw-r--r--3party/boost/boost/geometry/policies/relate/intersection_ratios.hpp127
-rw-r--r--3party/boost/boost/geometry/policies/relate/tupled.hpp116
-rw-r--r--3party/boost/boost/geometry/policies/robustness/get_rescale_policy.hpp290
-rw-r--r--3party/boost/boost/geometry/policies/robustness/no_rescale_policy.hpp66
-rw-r--r--3party/boost/boost/geometry/policies/robustness/rescale_policy.hpp83
-rw-r--r--3party/boost/boost/geometry/policies/robustness/robust_point_type.hpp30
-rw-r--r--3party/boost/boost/geometry/policies/robustness/robust_type.hpp67
-rw-r--r--3party/boost/boost/geometry/policies/robustness/segment_ratio.hpp236
-rw-r--r--3party/boost/boost/geometry/policies/robustness/segment_ratio_type.hpp28
-rw-r--r--3party/boost/boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp110
-rw-r--r--3party/boost/boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp102
-rw-r--r--3party/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp6
-rw-r--r--3party/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp22
-rw-r--r--3party/boost/boost/geometry/strategies/agnostic/point_in_point.hpp136
-rw-r--r--3party/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp132
-rw-r--r--3party/boost/boost/geometry/strategies/agnostic/relate.hpp91
-rw-r--r--3party/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp305
-rw-r--r--3party/boost/boost/geometry/strategies/buffer.hpp91
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/box_in_box.hpp30
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/buffer_end_flat.hpp112
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/buffer_end_round.hpp166
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/buffer_join_miter.hpp140
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/buffer_join_round.hpp177
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp155
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/buffer_point_circle.hpp108
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/buffer_point_square.hpp109
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/buffer_side_straight.hpp102
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/cart_intersect.hpp872
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/centroid_average.hpp114
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp25
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp3
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/distance_comparable_to_regular.hpp107
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp206
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp316
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp228
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp338
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp349
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/point_in_box.hpp28
-rw-r--r--3party/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp51
-rw-r--r--3party/boost/boost/geometry/strategies/comparable_distance_result.hpp196
-rw-r--r--3party/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp8
-rw-r--r--3party/boost/boost/geometry/strategies/concepts/distance_concept.hpp86
-rw-r--r--3party/boost/boost/geometry/strategies/concepts/simplify_concept.hpp33
-rw-r--r--3party/boost/boost/geometry/strategies/concepts/within_concept.hpp8
-rw-r--r--3party/boost/boost/geometry/strategies/default_comparable_distance_result.hpp43
-rw-r--r--3party/boost/boost/geometry/strategies/default_distance_result.hpp29
-rw-r--r--3party/boost/boost/geometry/strategies/default_length_result.hpp65
-rw-r--r--3party/boost/boost/geometry/strategies/default_strategy.hpp34
-rw-r--r--3party/boost/boost/geometry/strategies/distance.hpp59
-rw-r--r--3party/boost/boost/geometry/strategies/distance_comparable_to_regular.hpp53
-rw-r--r--3party/boost/boost/geometry/strategies/distance_result.hpp213
-rw-r--r--3party/boost/boost/geometry/strategies/intersection.hpp37
-rw-r--r--3party/boost/boost/geometry/strategies/intersection_result.hpp51
-rw-r--r--3party/boost/boost/geometry/strategies/side_info.hpp15
-rw-r--r--3party/boost/boost/geometry/strategies/spherical/area_huiller.hpp6
-rw-r--r--3party/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp204
-rw-r--r--3party/boost/boost/geometry/strategies/spherical/distance_haversine.hpp199
-rw-r--r--3party/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp3
-rw-r--r--3party/boost/boost/geometry/strategies/spherical/ssf.hpp8
-rw-r--r--3party/boost/boost/geometry/strategies/strategies.hpp24
-rw-r--r--3party/boost/boost/geometry/strategies/strategy_transform.hpp16
-rw-r--r--3party/boost/boost/geometry/strategies/tags.hpp2
-rw-r--r--3party/boost/boost/geometry/strategies/transform/inverse_transformer.hpp19
-rw-r--r--3party/boost/boost/geometry/strategies/transform/map_transformer.hpp24
-rw-r--r--3party/boost/boost/geometry/strategies/transform/matrix_transformers.hpp195
-rw-r--r--3party/boost/boost/geometry/util/calculation_type.hpp8
-rw-r--r--3party/boost/boost/geometry/util/combine_if.hpp78
-rw-r--r--3party/boost/boost/geometry/util/compress_variant.hpp98
-rw-r--r--3party/boost/boost/geometry/util/math.hpp150
-rw-r--r--3party/boost/boost/geometry/util/parameter_type_of.hpp4
-rw-r--r--3party/boost/boost/geometry/util/range.hpp325
-rw-r--r--3party/boost/boost/geometry/util/rational.hpp24
-rw-r--r--3party/boost/boost/geometry/util/transform_variant.hpp79
-rw-r--r--3party/boost/boost/geometry/views/box_view.hpp14
-rw-r--r--3party/boost/boost/geometry/views/closeable_view.hpp4
-rw-r--r--3party/boost/boost/geometry/views/detail/indexed_point_view.hpp112
-rw-r--r--3party/boost/boost/geometry/views/detail/normalized_view.hpp116
-rw-r--r--3party/boost/boost/geometry/views/detail/points_view.hpp16
-rw-r--r--3party/boost/boost/geometry/views/detail/range_type.hpp42
-rw-r--r--3party/boost/boost/geometry/views/identity_view.hpp2
-rw-r--r--3party/boost/boost/geometry/views/segment_view.hpp14
-rw-r--r--3party/boost/boost/gil/channel_algorithm.hpp2
-rw-r--r--3party/boost/boost/graph/adjacency_list.hpp2
-rw-r--r--3party/boost/boost/graph/adjacency_matrix.hpp7
-rw-r--r--3party/boost/boost/graph/bellman_ford_shortest_paths.hpp2
-rw-r--r--3party/boost/boost/graph/betweenness_centrality.hpp3
-rw-r--r--3party/boost/boost/graph/bipartite.hpp1
-rw-r--r--3party/boost/boost/graph/breadth_first_search.hpp19
-rw-r--r--3party/boost/boost/graph/chrobak_payne_drawing.hpp1
-rw-r--r--3party/boost/boost/graph/closeness_centrality.hpp2
-rw-r--r--3party/boost/boost/graph/compressed_sparse_row_graph.hpp5
-rw-r--r--3party/boost/boost/graph/connected_components.hpp2
-rw-r--r--3party/boost/boost/graph/core_numbers.hpp1
-rw-r--r--3party/boost/boost/graph/cuthill_mckee_ordering.hpp3
-rw-r--r--3party/boost/boost/graph/cycle_canceling.hpp181
-rw-r--r--3party/boost/boost/graph/depth_first_search.hpp66
-rw-r--r--3party/boost/boost/graph/detail/adjacency_list.hpp56
-rw-r--r--3party/boost/boost/graph/detail/augment.hpp63
-rw-r--r--3party/boost/boost/graph/detail/edge.hpp23
-rw-r--r--3party/boost/boost/graph/dijkstra_shortest_paths.hpp175
-rw-r--r--3party/boost/boost/graph/dijkstra_shortest_paths_no_color_map.hpp2
-rw-r--r--3party/boost/boost/graph/directed_graph.hpp2
-rw-r--r--3party/boost/boost/graph/distributed/adjacency_list.hpp32
-rw-r--r--3party/boost/boost/graph/distributed/adjlist/redistribute.hpp1
-rw-r--r--3party/boost/boost/graph/distributed/adjlist/serialization.hpp5
-rw-r--r--3party/boost/boost/graph/distributed/betweenness_centrality.hpp35
-rw-r--r--3party/boost/boost/graph/distributed/boman_et_al_graph_coloring.hpp3
-rw-r--r--3party/boost/boost/graph/distributed/breadth_first_search.hpp3
-rw-r--r--3party/boost/boost/graph/distributed/compressed_sparse_row_graph.hpp1
-rw-r--r--3party/boost/boost/graph/distributed/concepts.hpp4
-rw-r--r--3party/boost/boost/graph/distributed/connected_components.hpp6
-rw-r--r--3party/boost/boost/graph/distributed/connected_components_parallel_search.hpp2
-rw-r--r--3party/boost/boost/graph/distributed/crauser_et_al_shortest_paths.hpp7
-rw-r--r--3party/boost/boost/graph/distributed/dehne_gotz_min_spanning_tree.hpp1
-rw-r--r--3party/boost/boost/graph/distributed/delta_stepping_shortest_paths.hpp2
-rw-r--r--3party/boost/boost/graph/distributed/detail/remote_update_set.hpp2
-rw-r--r--3party/boost/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp7
-rw-r--r--3party/boost/boost/graph/distributed/graphviz.hpp2
-rw-r--r--3party/boost/boost/graph/distributed/hohberg_biconnected_components.hpp2
-rw-r--r--3party/boost/boost/graph/distributed/mpi_process_group.hpp6
-rw-r--r--3party/boost/boost/graph/distributed/named_graph.hpp9
-rw-r--r--3party/boost/boost/graph/distributed/page_rank.hpp2
-rw-r--r--3party/boost/boost/graph/distributed/strong_components.hpp6
-rw-r--r--3party/boost/boost/graph/distributed/unsafe_serialize.hpp78
-rw-r--r--3party/boost/boost/graph/edge_coloring.hpp196
-rw-r--r--3party/boost/boost/graph/edmonds_karp_max_flow.hpp1
-rw-r--r--3party/boost/boost/graph/find_flow_cost.hpp52
-rw-r--r--3party/boost/boost/graph/fruchterman_reingold.hpp1
-rw-r--r--3party/boost/boost/graph/graph_as_tree.hpp4
-rw-r--r--3party/boost/boost/graph/graph_concepts.hpp9
-rw-r--r--3party/boost/boost/graph/graph_traits.hpp8
-rw-r--r--3party/boost/boost/graph/graph_utility.hpp24
-rw-r--r--3party/boost/boost/graph/graphviz.hpp56
-rw-r--r--3party/boost/boost/graph/gursoy_atun_layout.hpp4
-rw-r--r--3party/boost/boost/graph/hawick_circuits.hpp381
-rw-r--r--3party/boost/boost/graph/is_straight_line_drawing.hpp3
-rw-r--r--3party/boost/boost/graph/king_ordering.hpp5
-rw-r--r--3party/boost/boost/graph/kruskal_min_spanning_tree.hpp1
-rw-r--r--3party/boost/boost/graph/leda_graph.hpp2
-rw-r--r--3party/boost/boost/graph/maximum_adjacency_search.hpp4
-rw-r--r--3party/boost/boost/graph/mcgregor_common_subgraphs.hpp15
-rw-r--r--3party/boost/boost/graph/metric_tsp_approx.hpp1
-rw-r--r--3party/boost/boost/graph/named_function_params.hpp1
-rw-r--r--3party/boost/boost/graph/named_graph.hpp39
-rw-r--r--3party/boost/boost/graph/parallel/basic_reduce.hpp35
-rw-r--r--3party/boost/boost/graph/parallel/detail/untracked_pair.hpp78
-rw-r--r--3party/boost/boost/graph/parallel/process_group.hpp94
-rw-r--r--3party/boost/boost/graph/parallel/simple_trigger.hpp99
-rw-r--r--3party/boost/boost/graph/planar_canonical_ordering.hpp2
-rw-r--r--3party/boost/boost/graph/properties.hpp19
-rw-r--r--3party/boost/boost/graph/r_c_shortest_paths.hpp127
-rw-r--r--3party/boost/boost/graph/random.hpp2
-rw-r--r--3party/boost/boost/graph/random_spanning_tree.hpp1
-rw-r--r--3party/boost/boost/graph/read_dimacs.hpp1
-rw-r--r--3party/boost/boost/graph/reverse_graph.hpp5
-rw-r--r--3party/boost/boost/graph/stanford_graph.hpp46
-rw-r--r--3party/boost/boost/graph/stoer_wagner_min_cut.hpp8
-rw-r--r--3party/boost/boost/graph/successive_shortest_path_nonnegative_weights.hpp261
-rw-r--r--3party/boost/boost/graph/tiernan_all_cycles.hpp1
-rw-r--r--3party/boost/boost/graph/transitive_closure.hpp60
-rw-r--r--3party/boost/boost/graph/two_graphs_common_spanning_trees.hpp7
-rw-r--r--3party/boost/boost/graph/undirected_dfs.hpp15
-rw-r--r--3party/boost/boost/graph/undirected_graph.hpp2
-rw-r--r--3party/boost/boost/graph/vector_as_graph.hpp5
-rw-r--r--[-rwxr-xr-x]3party/boost/boost/graph/vf2_sub_graph_iso.hpp16
-rw-r--r--3party/boost/boost/graph/visitors.hpp24
-rw-r--r--3party/boost/boost/graph/write_dimacs.hpp4
-rw-r--r--3party/boost/boost/heap/binomial_heap.hpp13
-rw-r--r--3party/boost/boost/heap/d_ary_heap.hpp7
-rw-r--r--3party/boost/boost/heap/detail/heap_node.hpp1
-rw-r--r--3party/boost/boost/heap/detail/mutable_heap.hpp14
-rw-r--r--3party/boost/boost/heap/fibonacci_heap.hpp5
-rw-r--r--3party/boost/boost/heap/heap_merge.hpp5
-rw-r--r--3party/boost/boost/heap/pairing_heap.hpp5
-rw-r--r--3party/boost/boost/heap/policies.hpp3
-rw-r--r--3party/boost/boost/heap/priority_queue.hpp5
-rw-r--r--3party/boost/boost/heap/skew_heap.hpp3
-rw-r--r--3party/boost/boost/icl/closed_interval.hpp1
-rw-r--r--3party/boost/boost/icl/impl_config.hpp8
-rw-r--r--3party/boost/boost/icl/interval_base_map.hpp30
-rw-r--r--3party/boost/boost/icl/interval_base_set.hpp34
-rw-r--r--3party/boost/boost/icl/interval_map.hpp35
-rw-r--r--3party/boost/boost/icl/interval_set.hpp37
-rw-r--r--3party/boost/boost/icl/map.hpp18
-rw-r--r--3party/boost/boost/icl/open_interval.hpp1
-rw-r--r--3party/boost/boost/icl/separate_interval_set.hpp30
-rw-r--r--3party/boost/boost/icl/split_interval_map.hpp35
-rw-r--r--3party/boost/boost/icl/split_interval_set.hpp34
-rw-r--r--3party/boost/boost/icl/type_traits/identity_element.hpp5
-rw-r--r--3party/boost/boost/implicit_cast.hpp13
-rw-r--r--3party/boost/boost/integer/integer_log2.hpp112
-rw-r--r--3party/boost/boost/integer_traits.hpp7
-rw-r--r--3party/boost/boost/interprocess/allocators/adaptive_pool.hpp2
-rw-r--r--3party/boost/boost/interprocess/allocators/allocator.hpp2
-rw-r--r--3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp2
-rw-r--r--3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp2
-rw-r--r--3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp2
-rw-r--r--3party/boost/boost/interprocess/allocators/detail/node_pool.hpp4
-rw-r--r--3party/boost/boost/interprocess/allocators/detail/node_tools.hpp2
-rw-r--r--3party/boost/boost/interprocess/allocators/node_allocator.hpp4
-rw-r--r--3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp2
-rw-r--r--3party/boost/boost/interprocess/allocators/private_node_allocator.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/allocation_type.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/containers_fwd.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/deque.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/flat_map.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/flat_set.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/list.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/map.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/pair.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/set.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/slist.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/stable_vector.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/string.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/vector.hpp2
-rw-r--r--3party/boost/boost/interprocess/containers/version_type.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/atomic.hpp6
-rw-r--r--3party/boost/boost/interprocess/detail/file_locking_helpers.hpp6
-rw-r--r--3party/boost/boost/interprocess/detail/file_wrapper.hpp3
-rw-r--r--3party/boost/boost/interprocess/detail/in_place_interface.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/intermodule_singleton.hpp7
-rw-r--r--3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp52
-rw-r--r--3party/boost/boost/interprocess/detail/intersegment_ptr.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/managed_global_memory.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/managed_memory_impl.hpp8
-rw-r--r--3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp14
-rw-r--r--3party/boost/boost/interprocess/detail/min_max.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/mpl.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/multi_segment_services.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/named_proxy.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/os_file_functions.hpp65
-rw-r--r--3party/boost/boost/interprocess/detail/os_thread_functions.hpp409
-rw-r--r--3party/boost/boost/interprocess/detail/pointer_type.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp13
-rw-r--r--3party/boost/boost/interprocess/detail/preprocessor.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/robust_emulation.hpp74
-rw-r--r--3party/boost/boost/interprocess/detail/segment_manager_helper.hpp16
-rw-r--r--3party/boost/boost/interprocess/detail/shared_dir_helpers.hpp191
-rw-r--r--3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp181
-rw-r--r--3party/boost/boost/interprocess/detail/transform_iterator.hpp24
-rw-r--r--3party/boost/boost/interprocess/detail/type_traits.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/utilities.hpp8
-rw-r--r--3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp2
-rw-r--r--3party/boost/boost/interprocess/detail/win32_api.hpp1110
-rw-r--r--3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp20
-rw-r--r--3party/boost/boost/interprocess/detail/workaround.hpp39
-rw-r--r--3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp4
-rw-r--r--3party/boost/boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp2
-rw-r--r--3party/boost/boost/interprocess/errors.hpp17
-rw-r--r--3party/boost/boost/interprocess/exceptions.hpp2
-rw-r--r--3party/boost/boost/interprocess/indexes/null_index.hpp4
-rw-r--r--3party/boost/boost/interprocess/interprocess_fwd.hpp2
-rw-r--r--3party/boost/boost/interprocess/ipc/message_queue.hpp191
-rw-r--r--3party/boost/boost/interprocess/managed_external_buffer.hpp2
-rw-r--r--3party/boost/boost/interprocess/managed_heap_memory.hpp2
-rw-r--r--3party/boost/boost/interprocess/managed_mapped_file.hpp2
-rw-r--r--3party/boost/boost/interprocess/managed_shared_memory.hpp2
-rw-r--r--3party/boost/boost/interprocess/managed_windows_shared_memory.hpp2
-rw-r--r--3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp2
-rw-r--r--3party/boost/boost/interprocess/mapped_region.hpp15
-rw-r--r--3party/boost/boost/interprocess/mem_algo/detail/mem_algo_common.hpp2
-rw-r--r--3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp6
-rw-r--r--3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp76
-rw-r--r--3party/boost/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp7
-rw-r--r--3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp5
-rw-r--r--3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp2
-rw-r--r--3party/boost/boost/interprocess/offset_ptr.hpp19
-rw-r--r--3party/boost/boost/interprocess/permissions.hpp2
-rw-r--r--3party/boost/boost/interprocess/segment_manager.hpp155
-rw-r--r--3party/boost/boost/interprocess/shared_memory_object.hpp16
-rw-r--r--3party/boost/boost/interprocess/smart_ptr/deleter.hpp2
-rw-r--r--3party/boost/boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp4
-rw-r--r--3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp2
-rw-r--r--3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp2
-rw-r--r--3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp11
-rw-r--r--3party/boost/boost/interprocess/streams/bufferstream.hpp137
-rw-r--r--3party/boost/boost/interprocess/streams/vectorstream.hpp113
-rw-r--r--3party/boost/boost/interprocess/sync/detail/common_algorithms.hpp73
-rw-r--r--3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp11
-rw-r--r--3party/boost/boost/interprocess/sync/detail/condition_any_algorithm.hpp8
-rw-r--r--3party/boost/boost/interprocess/sync/detail/locks.hpp29
-rw-r--r--3party/boost/boost/interprocess/sync/file_lock.hpp84
-rw-r--r--3party/boost/boost/interprocess/sync/interprocess_condition.hpp6
-rw-r--r--3party/boost/boost/interprocess/sync/interprocess_condition_any.hpp6
-rw-r--r--3party/boost/boost/interprocess/sync/interprocess_mutex.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/interprocess_sharable_mutex.hpp16
-rw-r--r--3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp28
-rw-r--r--3party/boost/boost/interprocess/sync/lock_options.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/mutex_family.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/named_condition.hpp4
-rw-r--r--3party/boost/boost/interprocess/sync/named_condition_any.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/named_mutex.hpp12
-rw-r--r--3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp10
-rw-r--r--3party/boost/boost/interprocess/sync/named_semaphore.hpp10
-rw-r--r--3party/boost/boost/interprocess/sync/named_sharable_mutex.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/null_mutex.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/posix/condition.hpp13
-rw-r--r--3party/boost/boost/interprocess/sync/posix/mutex.hpp24
-rw-r--r--3party/boost/boost/interprocess/sync/posix/named_mutex.hpp10
-rw-r--r--3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp4
-rw-r--r--3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp21
-rw-r--r--3party/boost/boost/interprocess/sync/posix/semaphore.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp60
-rw-r--r--3party/boost/boost/interprocess/sync/scoped_lock.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/sharable_lock.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/shm/named_condition.hpp4
-rw-r--r--3party/boost/boost/interprocess/sync/shm/named_condition_any.hpp4
-rw-r--r--3party/boost/boost/interprocess/sync/shm/named_mutex.hpp10
-rw-r--r--3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp10
-rw-r--r--3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp10
-rw-r--r--3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp26
-rw-r--r--3party/boost/boost/interprocess/sync/spin/condition.hpp27
-rw-r--r--3party/boost/boost/interprocess/sync/spin/mutex.hpp39
-rw-r--r--3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp7
-rw-r--r--3party/boost/boost/interprocess/sync/spin/semaphore.hpp34
-rw-r--r--3party/boost/boost/interprocess/sync/spin/wait.hpp181
-rw-r--r--3party/boost/boost/interprocess/sync/upgradable_lock.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/windows/condition.hpp6
-rw-r--r--3party/boost/boost/interprocess/sync/windows/mutex.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/windows/named_condition.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/windows/named_condition_any.hpp7
-rw-r--r--3party/boost/boost/interprocess/sync/windows/named_mutex.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/windows/named_recursive_mutex.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/windows/named_semaphore.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/windows/named_sync.hpp8
-rw-r--r--3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/windows/semaphore.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/windows/sync_utils.hpp2
-rw-r--r--3party/boost/boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp65
-rw-r--r--3party/boost/boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp44
-rw-r--r--3party/boost/boost/interprocess/sync/windows/winapi_wrapper_common.hpp93
-rw-r--r--3party/boost/boost/interprocess/windows_shared_memory.hpp14
-rw-r--r--3party/boost/boost/interprocess/xsi_key.hpp2
-rw-r--r--3party/boost/boost/intrusive/any_hook.hpp31
-rw-r--r--3party/boost/boost/intrusive/avl_set.hpp2716
-rw-r--r--3party/boost/boost/intrusive/avl_set_hook.hpp18
-rw-r--r--3party/boost/boost/intrusive/avltree.hpp1891
-rw-r--r--3party/boost/boost/intrusive/avltree_algorithms.hpp868
-rw-r--r--3party/boost/boost/intrusive/bs_set.hpp944
-rw-r--r--3party/boost/boost/intrusive/bs_set_hook.hpp28
-rw-r--r--3party/boost/boost/intrusive/bstree.hpp2110
-rw-r--r--3party/boost/boost/intrusive/bstree_algorithms.hpp2017
-rw-r--r--3party/boost/boost/intrusive/circular_list_algorithms.hpp13
-rw-r--r--3party/boost/boost/intrusive/circular_slist_algorithms.hpp51
-rw-r--r--3party/boost/boost/intrusive/derivation_value_traits.hpp33
-rw-r--r--3party/boost/boost/intrusive/detail/any_node_and_algorithms.hpp3
-rw-r--r--3party/boost/boost/intrusive/detail/assert.hpp4
-rw-r--r--3party/boost/boost/intrusive/detail/avltree_node.hpp2
-rw-r--r--3party/boost/boost/intrusive/detail/clear_on_destructor_base.hpp36
-rw-r--r--3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp5
-rw-r--r--3party/boost/boost/intrusive/detail/config_begin.hpp2
-rw-r--r--3party/boost/boost/intrusive/detail/config_end.hpp2
-rw-r--r--3party/boost/boost/intrusive/detail/ebo_functor_holder.hpp2
-rw-r--r--3party/boost/boost/intrusive/detail/function_detector.hpp2
-rw-r--r--3party/boost/boost/intrusive/detail/generic_hook.hpp151
-rw-r--r--3party/boost/boost/intrusive/detail/has_member_function_callable_with.hpp175
-rw-r--r--3party/boost/boost/intrusive/detail/hashtable_node.hpp228
-rw-r--r--3party/boost/boost/intrusive/detail/is_stateful_value_traits.hpp2
-rw-r--r--3party/boost/boost/intrusive/detail/list_node.hpp94
-rw-r--r--3party/boost/boost/intrusive/detail/memory_util.hpp32
-rw-r--r--3party/boost/boost/intrusive/detail/mpl.hpp141
-rw-r--r--3party/boost/boost/intrusive/detail/parent_from_member.hpp28
-rw-r--r--3party/boost/boost/intrusive/detail/preprocessor.hpp4
-rw-r--r--3party/boost/boost/intrusive/detail/rbtree_node.hpp4
-rw-r--r--3party/boost/boost/intrusive/detail/slist_node.hpp91
-rw-r--r--3party/boost/boost/intrusive/detail/transform_iterator.hpp2
-rw-r--r--3party/boost/boost/intrusive/detail/tree_algorithms.hpp1742
-rw-r--r--3party/boost/boost/intrusive/detail/tree_node.hpp83
-rw-r--r--3party/boost/boost/intrusive/detail/utilities.hpp915
-rw-r--r--3party/boost/boost/intrusive/detail/workaround.hpp6
-rw-r--r--3party/boost/boost/intrusive/hashtable.hpp1696
-rw-r--r--3party/boost/boost/intrusive/intrusive_fwd.hpp643
-rw-r--r--3party/boost/boost/intrusive/linear_slist_algorithms.hpp13
-rw-r--r--3party/boost/boost/intrusive/link_mode.hpp2
-rw-r--r--3party/boost/boost/intrusive/list.hpp253
-rw-r--r--3party/boost/boost/intrusive/list_hook.hpp18
-rw-r--r--3party/boost/boost/intrusive/member_value_traits.hpp13
-rw-r--r--3party/boost/boost/intrusive/options.hpp630
-rw-r--r--3party/boost/boost/intrusive/pack_options.hpp370
-rw-r--r--3party/boost/boost/intrusive/parent_from_member.hpp4
-rw-r--r--3party/boost/boost/intrusive/pointer_plus_bits.hpp6
-rw-r--r--3party/boost/boost/intrusive/pointer_traits.hpp58
-rw-r--r--3party/boost/boost/intrusive/priority_compare.hpp23
-rw-r--r--3party/boost/boost/intrusive/rbtree.hpp1864
-rw-r--r--3party/boost/boost/intrusive/rbtree_algorithms.hpp867
-rw-r--r--3party/boost/boost/intrusive/set.hpp2668
-rw-r--r--3party/boost/boost/intrusive/set_hook.hpp19
-rw-r--r--3party/boost/boost/intrusive/sg_set.hpp2777
-rw-r--r--3party/boost/boost/intrusive/sgtree.hpp1828
-rw-r--r--3party/boost/boost/intrusive/sgtree_algorithms.hpp744
-rw-r--r--3party/boost/boost/intrusive/slist.hpp310
-rw-r--r--3party/boost/boost/intrusive/slist_hook.hpp18
-rw-r--r--3party/boost/boost/intrusive/splay_set.hpp2798
-rw-r--r--3party/boost/boost/intrusive/splay_set_hook.hpp292
-rw-r--r--3party/boost/boost/intrusive/splaytree.hpp1832
-rw-r--r--3party/boost/boost/intrusive/splaytree_algorithms.hpp1112
-rw-r--r--3party/boost/boost/intrusive/treap.hpp1353
-rw-r--r--3party/boost/boost/intrusive/treap_algorithms.hpp513
-rw-r--r--3party/boost/boost/intrusive/treap_set.hpp2651
-rw-r--r--3party/boost/boost/intrusive/trivial_value_traits.hpp12
-rw-r--r--3party/boost/boost/intrusive/unordered_set.hpp383
-rw-r--r--3party/boost/boost/intrusive/unordered_set_hook.hpp30
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/char_traits.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/concepts.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/constants.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/copy.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/absolute_path.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/access_control.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/adapter/device_adapter.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/adapter/filter_adapter.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/add_facet.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/bool_trait_def.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/broken_overload_resolution/forward.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/call_traits.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/char_traits.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/codecvt_holder.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/auto_link.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/bzip2.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/codecvt.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/dyn_link.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/enable_warnings.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/limits.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/overload_resolution.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/wide_streams.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/windows_posix.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/config/zlib.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/counted_array.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/default_arg.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/dispatch.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/double_object.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/enable_if_stream.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/error.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/execute.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/fstream.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/functional.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/ios.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/iostream.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/newline.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/param_type.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/push.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/select.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/streambuf.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/streambuf/linked_streambuf.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/template_params.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/translate_int_type.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/vc6/close.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/vc6/read.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/vc6/write.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/detail/wrap_unwrap.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/device/array.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/device/back_inserter.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/device/null.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/filter/regex.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/filter/stdio.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/filtering_stream.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/filtering_streambuf.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/flush.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/get.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/imbue.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/input_sequence.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/operations.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/operations_fwd.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/optimal_buffer_size.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/output_sequence.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/pipeline.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/put.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/putback.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/read.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/restrict.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/seek.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iostreams/traits_fwd.hpp0
-rw-r--r--3party/boost/boost/iterator.hpp45
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iterator/detail/any_conversion_eater.hpp0
-rw-r--r--3party/boost/boost/iterator/detail/facade_iterator_category.hpp12
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iterator/detail/minimum_category.hpp0
-rw-r--r--3party/boost/boost/iterator/detail/operator_brackets_dispatch.hpp88
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iterator/is_lvalue_iterator.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/iterator/is_readable_iterator.hpp0
-rw-r--r--3party/boost/boost/lexical_cast.hpp1891
-rw-r--r--3party/boost/boost/lockfree/detail/atomic.hpp21
-rw-r--r--3party/boost/boost/lockfree/detail/copy_payload.hpp17
-rw-r--r--3party/boost/boost/lockfree/detail/freelist.hpp15
-rw-r--r--3party/boost/boost/lockfree/queue.hpp28
-rw-r--r--3party/boost/boost/lockfree/spsc_queue.hpp465
-rw-r--r--3party/boost/boost/lockfree/stack.hpp71
-rw-r--r--3party/boost/boost/log/attributes.hpp4
-rw-r--r--3party/boost/boost/log/attributes/attribute.hpp23
-rw-r--r--3party/boost/boost/log/attributes/attribute_cast.hpp4
-rw-r--r--3party/boost/boost/log/attributes/attribute_name.hpp8
-rw-r--r--3party/boost/boost/log/attributes/attribute_set.hpp10
-rw-r--r--3party/boost/boost/log/attributes/attribute_value.hpp13
-rw-r--r--3party/boost/boost/log/attributes/attribute_value_impl.hpp4
-rw-r--r--3party/boost/boost/log/attributes/attribute_value_set.hpp11
-rw-r--r--3party/boost/boost/log/attributes/clock.hpp6
-rw-r--r--3party/boost/boost/log/attributes/constant.hpp6
-rw-r--r--3party/boost/boost/log/attributes/counter.hpp10
-rw-r--r--3party/boost/boost/log/attributes/current_process_id.hpp4
-rw-r--r--3party/boost/boost/log/attributes/current_process_name.hpp4
-rw-r--r--3party/boost/boost/log/attributes/current_thread_id.hpp8
-rw-r--r--3party/boost/boost/log/attributes/fallback_policy.hpp4
-rw-r--r--3party/boost/boost/log/attributes/fallback_policy_fwd.hpp4
-rw-r--r--3party/boost/boost/log/attributes/function.hpp6
-rw-r--r--3party/boost/boost/log/attributes/mutable_constant.hpp11
-rw-r--r--3party/boost/boost/log/attributes/named_scope.hpp57
-rw-r--r--3party/boost/boost/log/attributes/scoped_attribute.hpp16
-rw-r--r--3party/boost/boost/log/attributes/time_traits.hpp4
-rw-r--r--3party/boost/boost/log/attributes/timer.hpp6
-rw-r--r--3party/boost/boost/log/attributes/value_extraction.hpp10
-rw-r--r--3party/boost/boost/log/attributes/value_extraction_fwd.hpp4
-rw-r--r--3party/boost/boost/log/attributes/value_visitation.hpp10
-rw-r--r--3party/boost/boost/log/attributes/value_visitation_fwd.hpp4
-rw-r--r--3party/boost/boost/log/common.hpp4
-rw-r--r--3party/boost/boost/log/core.hpp4
-rw-r--r--3party/boost/boost/log/core/core.hpp14
-rw-r--r--3party/boost/boost/log/core/record.hpp19
-rw-r--r--3party/boost/boost/log/core/record_view.hpp27
-rw-r--r--3party/boost/boost/log/detail/alignas.hpp45
-rw-r--r--3party/boost/boost/log/detail/asio_fwd.hpp6
-rw-r--r--3party/boost/boost/log/detail/attachable_sstream_buf.hpp20
-rw-r--r--3party/boost/boost/log/detail/attr_output_impl.hpp14
-rw-r--r--3party/boost/boost/log/detail/attr_output_terminal.hpp21
-rw-r--r--3party/boost/boost/log/detail/attribute_get_value_impl.hpp6
-rw-r--r--3party/boost/boost/log/detail/attribute_predicate.hpp4
-rw-r--r--3party/boost/boost/log/detail/cleanup_scope_guard.hpp10
-rw-r--r--3party/boost/boost/log/detail/code_conversion.hpp6
-rw-r--r--3party/boost/boost/log/detail/config.hpp114
-rw-r--r--3party/boost/boost/log/detail/copy_cv.hpp64
-rw-r--r--3party/boost/boost/log/detail/custom_terminal_spec.hpp4
-rw-r--r--3party/boost/boost/log/detail/date_time_fmt_gen_traits_fwd.hpp6
-rw-r--r--3party/boost/boost/log/detail/date_time_format_parser.hpp4
-rw-r--r--3party/boost/boost/log/detail/decomposed_time.hpp16
-rw-r--r--3party/boost/boost/log/detail/deduce_char_type.hpp6
-rw-r--r--3party/boost/boost/log/detail/default_attribute_names.hpp6
-rw-r--r--3party/boost/boost/log/detail/embedded_string_type.hpp6
-rw-r--r--3party/boost/boost/log/detail/enqueued_record.hpp103
-rw-r--r--3party/boost/boost/log/detail/event.hpp19
-rw-r--r--3party/boost/boost/log/detail/fake_mutex.hpp12
-rw-r--r--3party/boost/boost/log/detail/footer.hpp8
-rw-r--r--3party/boost/boost/log/detail/format.hpp12
-rw-r--r--3party/boost/boost/log/detail/function_traits.hpp6
-rw-r--r--3party/boost/boost/log/detail/generate_overloads.hpp2
-rw-r--r--3party/boost/boost/log/detail/header.hpp26
-rw-r--r--3party/boost/boost/log/detail/id.hpp6
-rw-r--r--3party/boost/boost/log/detail/intptr_t.hpp64
-rw-r--r--3party/boost/boost/log/detail/light_function.hpp68
-rw-r--r--3party/boost/boost/log/detail/light_function_pp.hpp62
-rw-r--r--3party/boost/boost/log/detail/light_rw_mutex.hpp18
-rw-r--r--3party/boost/boost/log/detail/locking_ptr.hpp205
-rw-r--r--3party/boost/boost/log/detail/locks.hpp6
-rw-r--r--3party/boost/boost/log/detail/named_scope_fmt_pp.hpp8
-rw-r--r--3party/boost/boost/log/detail/native_typeof.hpp6
-rw-r--r--3party/boost/boost/log/detail/parameter_tools.hpp6
-rw-r--r--3party/boost/boost/log/detail/pp_identity.hpp6
-rw-r--r--3party/boost/boost/log/detail/process_id.hpp6
-rw-r--r--3party/boost/boost/log/detail/setup_config.hpp6
-rw-r--r--3party/boost/boost/log/detail/singleton.hpp12
-rw-r--r--3party/boost/boost/log/detail/sink_init_helpers.hpp6
-rw-r--r--3party/boost/boost/log/detail/snprintf.hpp19
-rw-r--r--3party/boost/boost/log/detail/spin_mutex.hpp97
-rw-r--r--3party/boost/boost/log/detail/tagged_integer.hpp6
-rw-r--r--3party/boost/boost/log/detail/thread_id.hpp8
-rw-r--r--3party/boost/boost/log/detail/thread_specific.hpp12
-rw-r--r--3party/boost/boost/log/detail/threadsafe_queue.hpp13
-rw-r--r--3party/boost/boost/log/detail/timestamp.hpp6
-rw-r--r--3party/boost/boost/log/detail/trivial_keyword.hpp6
-rw-r--r--3party/boost/boost/log/detail/unary_function_terminal.hpp25
-rw-r--r--3party/boost/boost/log/detail/unhandled_exception_count.hpp6
-rw-r--r--3party/boost/boost/log/detail/value_ref_visitation.hpp8
-rw-r--r--3party/boost/boost/log/detail/visible_type.hpp8
-rw-r--r--3party/boost/boost/log/exceptions.hpp6
-rw-r--r--3party/boost/boost/log/expressions.hpp4
-rw-r--r--3party/boost/boost/log/expressions/attr.hpp29
-rw-r--r--3party/boost/boost/log/expressions/attr_fwd.hpp4
-rw-r--r--3party/boost/boost/log/expressions/filter.hpp8
-rw-r--r--3party/boost/boost/log/expressions/formatter.hpp91
-rw-r--r--3party/boost/boost/log/expressions/formatters.hpp4
-rw-r--r--3party/boost/boost/log/expressions/formatters/c_decorator.hpp14
-rw-r--r--3party/boost/boost/log/expressions/formatters/char_decorator.hpp33
-rw-r--r--3party/boost/boost/log/expressions/formatters/csv_decorator.hpp8
-rw-r--r--3party/boost/boost/log/expressions/formatters/date_time.hpp38
-rw-r--r--3party/boost/boost/log/expressions/formatters/format.hpp10
-rw-r--r--3party/boost/boost/log/expressions/formatters/if.hpp48
-rw-r--r--3party/boost/boost/log/expressions/formatters/named_scope.hpp115
-rw-r--r--3party/boost/boost/log/expressions/formatters/stream.hpp4
-rw-r--r--3party/boost/boost/log/expressions/formatters/wrap_formatter.hpp27
-rw-r--r--3party/boost/boost/log/expressions/formatters/xml_decorator.hpp8
-rw-r--r--3party/boost/boost/log/expressions/is_keyword_descriptor.hpp4
-rw-r--r--3party/boost/boost/log/expressions/keyword.hpp4
-rw-r--r--3party/boost/boost/log/expressions/keyword_fwd.hpp4
-rw-r--r--3party/boost/boost/log/expressions/message.hpp4
-rw-r--r--3party/boost/boost/log/expressions/predicates.hpp4
-rw-r--r--3party/boost/boost/log/expressions/predicates/begins_with.hpp10
-rw-r--r--3party/boost/boost/log/expressions/predicates/channel_severity_filter.hpp46
-rw-r--r--3party/boost/boost/log/expressions/predicates/contains.hpp10
-rw-r--r--3party/boost/boost/log/expressions/predicates/ends_with.hpp10
-rw-r--r--3party/boost/boost/log/expressions/predicates/has_attr.hpp10
-rw-r--r--3party/boost/boost/log/expressions/predicates/is_debugger_present.hpp4
-rw-r--r--3party/boost/boost/log/expressions/predicates/is_in_range.hpp10
-rw-r--r--3party/boost/boost/log/expressions/predicates/matches.hpp27
-rw-r--r--3party/boost/boost/log/expressions/record.hpp4
-rw-r--r--3party/boost/boost/log/keywords/auto_flush.hpp4
-rw-r--r--3party/boost/boost/log/keywords/channel.hpp4
-rw-r--r--3party/boost/boost/log/keywords/delimiter.hpp4
-rw-r--r--3party/boost/boost/log/keywords/depth.hpp4
-rw-r--r--3party/boost/boost/log/keywords/empty_marker.hpp40
-rw-r--r--3party/boost/boost/log/keywords/facility.hpp4
-rw-r--r--3party/boost/boost/log/keywords/file_name.hpp4
-rw-r--r--3party/boost/boost/log/keywords/filter.hpp4
-rw-r--r--3party/boost/boost/log/keywords/format.hpp4
-rw-r--r--3party/boost/boost/log/keywords/ident.hpp4
-rw-r--r--3party/boost/boost/log/keywords/incomplete_marker.hpp40
-rw-r--r--3party/boost/boost/log/keywords/ip_version.hpp4
-rw-r--r--3party/boost/boost/log/keywords/iteration.hpp4
-rw-r--r--3party/boost/boost/log/keywords/log_name.hpp4
-rw-r--r--3party/boost/boost/log/keywords/log_source.hpp4
-rw-r--r--3party/boost/boost/log/keywords/max_size.hpp4
-rw-r--r--3party/boost/boost/log/keywords/message_file.hpp4
-rw-r--r--3party/boost/boost/log/keywords/min_free_space.hpp4
-rw-r--r--3party/boost/boost/log/keywords/open_mode.hpp4
-rw-r--r--3party/boost/boost/log/keywords/order.hpp4
-rw-r--r--3party/boost/boost/log/keywords/ordering_window.hpp4
-rw-r--r--3party/boost/boost/log/keywords/registration.hpp4
-rw-r--r--3party/boost/boost/log/keywords/rotation_size.hpp4
-rw-r--r--3party/boost/boost/log/keywords/scan_method.hpp4
-rw-r--r--3party/boost/boost/log/keywords/severity.hpp4
-rw-r--r--3party/boost/boost/log/keywords/start_thread.hpp4
-rw-r--r--3party/boost/boost/log/keywords/target.hpp4
-rw-r--r--3party/boost/boost/log/keywords/time_based_rotation.hpp4
-rw-r--r--3party/boost/boost/log/keywords/use_impl.hpp4
-rw-r--r--3party/boost/boost/log/sinks.hpp4
-rw-r--r--3party/boost/boost/log/sinks/async_frontend.hpp28
-rw-r--r--3party/boost/boost/log/sinks/attribute_mapping.hpp4
-rw-r--r--3party/boost/boost/log/sinks/basic_sink_backend.hpp10
-rw-r--r--3party/boost/boost/log/sinks/basic_sink_frontend.hpp5
-rw-r--r--3party/boost/boost/log/sinks/block_on_overflow.hpp15
-rw-r--r--3party/boost/boost/log/sinks/bounded_fifo_queue.hpp10
-rw-r--r--3party/boost/boost/log/sinks/bounded_ordering_queue.hpp72
-rw-r--r--3party/boost/boost/log/sinks/debug_output_backend.hpp4
-rw-r--r--3party/boost/boost/log/sinks/drop_on_overflow.hpp4
-rw-r--r--3party/boost/boost/log/sinks/event_log_backend.hpp4
-rw-r--r--3party/boost/boost/log/sinks/event_log_constants.hpp4
-rw-r--r--3party/boost/boost/log/sinks/frontend_requirements.hpp4
-rw-r--r--3party/boost/boost/log/sinks/sink.hpp8
-rw-r--r--3party/boost/boost/log/sinks/sync_frontend.hpp29
-rw-r--r--3party/boost/boost/log/sinks/syslog_backend.hpp5
-rw-r--r--3party/boost/boost/log/sinks/syslog_constants.hpp4
-rw-r--r--3party/boost/boost/log/sinks/text_file_backend.hpp12
-rw-r--r--3party/boost/boost/log/sinks/text_multifile_backend.hpp4
-rw-r--r--3party/boost/boost/log/sinks/text_ostream_backend.hpp6
-rw-r--r--3party/boost/boost/log/sinks/unbounded_fifo_queue.hpp4
-rw-r--r--3party/boost/boost/log/sinks/unbounded_ordering_queue.hpp63
-rw-r--r--3party/boost/boost/log/sinks/unlocked_frontend.hpp8
-rw-r--r--3party/boost/boost/log/sources/basic_logger.hpp13
-rw-r--r--3party/boost/boost/log/sources/channel_feature.hpp4
-rw-r--r--3party/boost/boost/log/sources/channel_logger.hpp4
-rw-r--r--3party/boost/boost/log/sources/exception_handler_feature.hpp5
-rw-r--r--3party/boost/boost/log/sources/features.hpp6
-rw-r--r--3party/boost/boost/log/sources/global_logger_storage.hpp18
-rw-r--r--3party/boost/boost/log/sources/logger.hpp4
-rw-r--r--3party/boost/boost/log/sources/record_ostream.hpp20
-rw-r--r--3party/boost/boost/log/sources/severity_channel_logger.hpp4
-rw-r--r--3party/boost/boost/log/sources/severity_feature.hpp8
-rw-r--r--3party/boost/boost/log/sources/severity_logger.hpp4
-rw-r--r--3party/boost/boost/log/sources/threading_models.hpp4
-rw-r--r--3party/boost/boost/log/support/date_time.hpp14
-rw-r--r--3party/boost/boost/log/support/exception.hpp4
-rw-r--r--3party/boost/boost/log/support/regex.hpp52
-rw-r--r--3party/boost/boost/log/support/spirit_classic.hpp38
-rw-r--r--3party/boost/boost/log/support/spirit_qi.hpp59
-rw-r--r--3party/boost/boost/log/support/std_regex.hpp86
-rw-r--r--3party/boost/boost/log/support/xpressive.hpp59
-rw-r--r--3party/boost/boost/log/trivial.hpp23
-rw-r--r--3party/boost/boost/log/utility/empty_deleter.hpp29
-rw-r--r--3party/boost/boost/log/utility/exception_handler.hpp6
-rw-r--r--3party/boost/boost/log/utility/explicit_operator_bool.hpp84
-rw-r--r--3party/boost/boost/log/utility/formatting_ostream.hpp126
-rw-r--r--3party/boost/boost/log/utility/formatting_ostream_fwd.hpp4
-rw-r--r--3party/boost/boost/log/utility/functional.hpp4
-rw-r--r--3party/boost/boost/log/utility/functional/as_action.hpp8
-rw-r--r--3party/boost/boost/log/utility/functional/begins_with.hpp4
-rw-r--r--3party/boost/boost/log/utility/functional/bind.hpp16
-rw-r--r--3party/boost/boost/log/utility/functional/bind_assign.hpp6
-rw-r--r--3party/boost/boost/log/utility/functional/bind_output.hpp6
-rw-r--r--3party/boost/boost/log/utility/functional/bind_to_log.hpp8
-rw-r--r--3party/boost/boost/log/utility/functional/contains.hpp4
-rw-r--r--3party/boost/boost/log/utility/functional/ends_with.hpp4
-rw-r--r--3party/boost/boost/log/utility/functional/fun_ref.hpp6
-rw-r--r--3party/boost/boost/log/utility/functional/in_range.hpp4
-rw-r--r--3party/boost/boost/log/utility/functional/logical.hpp4
-rw-r--r--3party/boost/boost/log/utility/functional/matches.hpp83
-rw-r--r--3party/boost/boost/log/utility/functional/nop.hpp14
-rw-r--r--3party/boost/boost/log/utility/functional/save_result.hpp6
-rw-r--r--3party/boost/boost/log/utility/intrusive_ref_counter.hpp103
-rw-r--r--3party/boost/boost/log/utility/manipulators.hpp4
-rw-r--r--3party/boost/boost/log/utility/manipulators/add_value.hpp44
-rw-r--r--3party/boost/boost/log/utility/manipulators/dump.hpp12
-rw-r--r--3party/boost/boost/log/utility/manipulators/to_log.hpp4
-rw-r--r--3party/boost/boost/log/utility/once_block.hpp61
-rw-r--r--3party/boost/boost/log/utility/record_ordering.hpp4
-rw-r--r--3party/boost/boost/log/utility/setup.hpp4
-rw-r--r--3party/boost/boost/log/utility/setup/common_attributes.hpp4
-rw-r--r--3party/boost/boost/log/utility/setup/console.hpp12
-rw-r--r--3party/boost/boost/log/utility/setup/file.hpp8
-rw-r--r--3party/boost/boost/log/utility/setup/filter_parser.hpp30
-rw-r--r--3party/boost/boost/log/utility/setup/formatter_parser.hpp14
-rw-r--r--3party/boost/boost/log/utility/setup/from_settings.hpp12
-rw-r--r--3party/boost/boost/log/utility/setup/from_stream.hpp4
-rw-r--r--3party/boost/boost/log/utility/setup/settings.hpp20
-rw-r--r--3party/boost/boost/log/utility/setup/settings_parser.hpp4
-rw-r--r--3party/boost/boost/log/utility/strictest_lock.hpp4
-rw-r--r--3party/boost/boost/log/utility/string_literal.hpp132
-rw-r--r--3party/boost/boost/log/utility/string_literal_fwd.hpp4
-rw-r--r--3party/boost/boost/log/utility/type_dispatch/date_time_types.hpp4
-rw-r--r--3party/boost/boost/log/utility/type_dispatch/dynamic_type_dispatcher.hpp8
-rw-r--r--3party/boost/boost/log/utility/type_dispatch/standard_types.hpp4
-rw-r--r--3party/boost/boost/log/utility/type_dispatch/static_type_dispatcher.hpp169
-rw-r--r--3party/boost/boost/log/utility/type_dispatch/type_dispatcher.hpp31
-rw-r--r--3party/boost/boost/log/utility/type_info_wrapper.hpp78
-rw-r--r--3party/boost/boost/log/utility/unique_identifier_name.hpp13
-rw-r--r--3party/boost/boost/log/utility/unused_variable.hpp6
-rw-r--r--3party/boost/boost/log/utility/value_ref.hpp12
-rw-r--r--3party/boost/boost/log/utility/value_ref_fwd.hpp4
-rw-r--r--3party/boost/boost/logic/tribool.hpp2
-rw-r--r--3party/boost/boost/logic/tribool_io.hpp10
-rw-r--r--3party/boost/boost/make_unique.hpp14
-rw-r--r--3party/boost/boost/math/bindings/detail/big_lanczos.hpp20
-rw-r--r--3party/boost/boost/math/bindings/mpfr.hpp34
-rw-r--r--3party/boost/boost/math/common_factor_ct.hpp83
-rw-r--r--3party/boost/boost/math/common_factor_rt.hpp70
-rw-r--r--3party/boost/boost/math/concepts/real_concept.hpp6
-rw-r--r--3party/boost/boost/math/concepts/std_real_concept.hpp13
-rw-r--r--3party/boost/boost/math/constants/calculate_constants.hpp14
-rw-r--r--3party/boost/boost/math/constants/constants.hpp51
-rw-r--r--3party/boost/boost/math/constants/generate.hpp76
-rw-r--r--3party/boost/boost/math/cstdfloat/cstdfloat_cmath.hpp600
-rw-r--r--3party/boost/boost/math/cstdfloat/cstdfloat_complex.hpp38
-rw-r--r--3party/boost/boost/math/cstdfloat/cstdfloat_complex_std.hpp641
-rw-r--r--3party/boost/boost/math/cstdfloat/cstdfloat_iostream.hpp771
-rw-r--r--3party/boost/boost/math/cstdfloat/cstdfloat_limits.hpp75
-rw-r--r--3party/boost/boost/math/cstdfloat/cstdfloat_types.hpp427
-rw-r--r--3party/boost/boost/math/distributions/beta.hpp2
-rw-r--r--3party/boost/boost/math/distributions/binomial.hpp10
-rw-r--r--3party/boost/boost/math/distributions/cauchy.hpp8
-rw-r--r--3party/boost/boost/math/distributions/chi_squared.hpp9
-rw-r--r--3party/boost/boost/math/distributions/detail/common_error_handling.hpp7
-rw-r--r--3party/boost/boost/math/distributions/detail/generic_mode.hpp2
-rw-r--r--3party/boost/boost/math/distributions/detail/generic_quantile.hpp2
-rw-r--r--3party/boost/boost/math/distributions/detail/hypergeometric_pdf.hpp18
-rw-r--r--3party/boost/boost/math/distributions/detail/inv_discrete_quantile.hpp172
-rw-r--r--3party/boost/boost/math/distributions/exponential.hpp12
-rw-r--r--3party/boost/boost/math/distributions/gamma.hpp6
-rw-r--r--3party/boost/boost/math/distributions/geometric.hpp10
-rw-r--r--3party/boost/boost/math/distributions/hypergeometric.hpp6
-rw-r--r--3party/boost/boost/math/distributions/inverse_chi_squared.hpp2
-rw-r--r--3party/boost/boost/math/distributions/inverse_gamma.hpp6
-rw-r--r--3party/boost/boost/math/distributions/inverse_gaussian.hpp10
-rw-r--r--3party/boost/boost/math/distributions/laplace.hpp94
-rw-r--r--3party/boost/boost/math/distributions/logistic.hpp42
-rw-r--r--3party/boost/boost/math/distributions/lognormal.hpp8
-rw-r--r--3party/boost/boost/math/distributions/negative_binomial.hpp29
-rw-r--r--3party/boost/boost/math/distributions/non_central_chi_squared.hpp55
-rw-r--r--3party/boost/boost/math/distributions/non_central_t.hpp26
-rw-r--r--3party/boost/boost/math/distributions/normal.hpp46
-rw-r--r--3party/boost/boost/math/distributions/pareto.hpp10
-rw-r--r--3party/boost/boost/math/distributions/poisson.hpp68
-rw-r--r--3party/boost/boost/math/distributions/rayleigh.hpp12
-rw-r--r--3party/boost/boost/math/distributions/skew_normal.hpp10
-rw-r--r--3party/boost/boost/math/distributions/students_t.hpp24
-rw-r--r--3party/boost/boost/math/distributions/triangular.hpp6
-rw-r--r--3party/boost/boost/math/distributions/uniform.hpp6
-rw-r--r--3party/boost/boost/math/distributions/weibull.hpp6
-rw-r--r--3party/boost/boost/math/octonion.hpp516
-rw-r--r--3party/boost/boost/math/policies/error_handling.hpp123
-rw-r--r--3party/boost/boost/math/policies/policy.hpp5
-rw-r--r--3party/boost/boost/math/quaternion.hpp161
-rw-r--r--3party/boost/boost/math/special_functions.hpp2
-rw-r--r--3party/boost/boost/math/special_functions/acosh.hpp11
-rw-r--r--3party/boost/boost/math/special_functions/airy.hpp120
-rw-r--r--3party/boost/boost/math/special_functions/asinh.hpp11
-rw-r--r--3party/boost/boost/math/special_functions/atanh.hpp11
-rw-r--r--3party/boost/boost/math/special_functions/bernoulli.hpp143
-rw-r--r--3party/boost/boost/math/special_functions/bessel.hpp74
-rw-r--r--3party/boost/boost/math/special_functions/bessel_prime.hpp359
-rw-r--r--3party/boost/boost/math/special_functions/beta.hpp71
-rw-r--r--3party/boost/boost/math/special_functions/binomial.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/cos_pi.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/detail/airy_ai_bi_zero.hpp52
-rw-r--r--3party/boost/boost/math/special_functions/detail/bernoulli_details.hpp652
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_derivatives_linear.hpp75
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_i0.hpp5
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_i1.hpp5
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_ik.hpp23
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_jy.hpp15
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp141
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp220
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_jy_series.hpp6
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_jy_zero.hpp16
-rw-r--r--3party/boost/boost/math/special_functions/detail/bessel_kn.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/detail/erf_inv.hpp39
-rw-r--r--3party/boost/boost/math/special_functions/detail/fp_traits.hpp11
-rw-r--r--3party/boost/boost/math/special_functions/detail/gamma_inva.hpp8
-rw-r--r--3party/boost/boost/math/special_functions/detail/ibeta_inv_ab.hpp24
-rw-r--r--3party/boost/boost/math/special_functions/detail/ibeta_inverse.hpp79
-rw-r--r--3party/boost/boost/math/special_functions/detail/igamma_inverse.hpp18
-rw-r--r--3party/boost/boost/math/special_functions/detail/lanczos_sse2.hpp20
-rw-r--r--3party/boost/boost/math/special_functions/detail/lgamma_small.hpp2
-rw-r--r--3party/boost/boost/math/special_functions/detail/t_distribution_inv.hpp19
-rw-r--r--3party/boost/boost/math/special_functions/detail/unchecked_bernoulli.hpp700
-rw-r--r--3party/boost/boost/math/special_functions/detail/unchecked_factorial.hpp190
-rw-r--r--3party/boost/boost/math/special_functions/digamma.hpp11
-rw-r--r--3party/boost/boost/math/special_functions/ellint_1.hpp8
-rw-r--r--3party/boost/boost/math/special_functions/ellint_2.hpp8
-rw-r--r--3party/boost/boost/math/special_functions/ellint_3.hpp8
-rw-r--r--3party/boost/boost/math/special_functions/ellint_rj.hpp2
-rw-r--r--3party/boost/boost/math/special_functions/erf.hpp36
-rw-r--r--3party/boost/boost/math/special_functions/expint.hpp65
-rw-r--r--3party/boost/boost/math/special_functions/factorials.hpp35
-rw-r--r--3party/boost/boost/math/special_functions/fpclassify.hpp16
-rw-r--r--3party/boost/boost/math/special_functions/gamma.hpp389
-rw-r--r--3party/boost/boost/math/special_functions/hankel.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/jacobi_elliptic.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/lanczos.hpp24
-rw-r--r--3party/boost/boost/math/special_functions/log1p.hpp2
-rw-r--r--3party/boost/boost/math/special_functions/math_fwd.hpp111
-rw-r--r--3party/boost/boost/math/special_functions/modf.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/next.hpp30
-rw-r--r--3party/boost/boost/math/special_functions/owens_t.hpp18
-rw-r--r--3party/boost/boost/math/special_functions/pow.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/powm1.hpp2
-rw-r--r--3party/boost/boost/math/special_functions/prime.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/round.hpp20
-rw-r--r--3party/boost/boost/math/special_functions/sign.hpp60
-rw-r--r--3party/boost/boost/math/special_functions/sin_pi.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/sinhc.hpp11
-rw-r--r--3party/boost/boost/math/special_functions/spherical_harmonic.hpp1
-rw-r--r--3party/boost/boost/math/special_functions/sqrt1pm1.hpp2
-rw-r--r--3party/boost/boost/math/special_functions/trunc.hpp19
-rw-r--r--3party/boost/boost/math/special_functions/zeta.hpp49
-rw-r--r--3party/boost/boost/math/tools/big_constant.hpp21
-rw-r--r--3party/boost/boost/math/tools/config.hpp55
-rw-r--r--3party/boost/boost/math/tools/fraction.hpp2
-rw-r--r--3party/boost/boost/math/tools/precision.hpp51
-rw-r--r--3party/boost/boost/math/tools/promotion.hpp27
-rw-r--r--3party/boost/boost/math/tools/remez.hpp667
-rw-r--r--3party/boost/boost/math/tools/roots.hpp10
-rw-r--r--3party/boost/boost/math/tools/solve.hpp79
-rw-r--r--3party/boost/boost/math/tools/test.hpp334
-rw-r--r--3party/boost/boost/math/tools/test_data.hpp767
-rw-r--r--3party/boost/boost/math/tools/toms748_solve.hpp12
-rw-r--r--3party/boost/boost/math/tools/tuple.hpp24
-rw-r--r--3party/boost/boost/math/tools/user.hpp8
-rw-r--r--3party/boost/boost/memory_order.hpp14
-rw-r--r--3party/boost/boost/move/algorithm.hpp1
-rw-r--r--3party/boost/boost/move/core.hpp120
-rw-r--r--3party/boost/boost/move/detail/config_end.hpp6
-rw-r--r--3party/boost/boost/move/detail/meta_utils.hpp19
-rw-r--r--3party/boost/boost/move/detail/move_helpers.hpp26
-rw-r--r--3party/boost/boost/move/traits.hpp12
-rw-r--r--3party/boost/boost/move/utility.hpp22
-rw-r--r--3party/boost/boost/mpi/collectives.hpp30
-rw-r--r--3party/boost/boost/mpi/collectives/all_reduce.hpp31
-rw-r--r--3party/boost/boost/mpi/collectives/gather.hpp7
-rw-r--r--3party/boost/boost/mpi/collectives/reduce.hpp19
-rw-r--r--3party/boost/boost/mpi/communicator.hpp3
-rw-r--r--3party/boost/boost/mpi/config.hpp13
-rw-r--r--3party/boost/boost/mpi/detail/binary_buffer_iprimitive.hpp4
-rw-r--r--3party/boost/boost/mpi/detail/forward_skeleton_iarchive.hpp1
-rw-r--r--3party/boost/boost/mpi/detail/ignore_iprimitive.hpp2
-rw-r--r--3party/boost/boost/mpi/detail/ignore_oprimitive.hpp2
-rw-r--r--3party/boost/boost/mpi/detail/mpi_datatype_primitive.hpp27
-rw-r--r--3party/boost/boost/mpi/detail/packed_iprimitive.hpp4
-rw-r--r--3party/boost/boost/mpi/detail/packed_oprimitive.hpp3
-rw-r--r--3party/boost/boost/mpi/environment.hpp82
-rw-r--r--3party/boost/boost/mpi/inplace.hpp63
-rw-r--r--3party/boost/boost/mpi/nonblocking.hpp6
-rw-r--r--3party/boost/boost/mpi/packed_iarchive.hpp57
-rw-r--r--3party/boost/boost/mpi/packed_oarchive.hpp47
-rw-r--r--3party/boost/boost/mpi/python/config.hpp6
-rw-r--r--3party/boost/boost/mpl/O1_size.hpp6
-rw-r--r--3party/boost/boost/mpl/O1_size_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/accumulate.hpp6
-rw-r--r--3party/boost/boost/mpl/advance.hpp6
-rw-r--r--3party/boost/boost/mpl/advance_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/alias.hpp6
-rw-r--r--3party/boost/boost/mpl/always.hpp13
-rw-r--r--3party/boost/boost/mpl/and.hpp10
-rw-r--r--3party/boost/boost/mpl/apply.hpp6
-rw-r--r--3party/boost/boost/mpl/apply_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/apply_wrap.hpp6
-rw-r--r--3party/boost/boost/mpl/arg.hpp6
-rw-r--r--3party/boost/boost/mpl/arg_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/arithmetic.hpp6
-rw-r--r--3party/boost/boost/mpl/as_sequence.hpp6
-rw-r--r--3party/boost/boost/mpl/assert.hpp11
-rw-r--r--3party/boost/boost/mpl/at.hpp6
-rw-r--r--3party/boost/boost/mpl/at_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/O1_size_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/adl_barrier.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/advance_backward.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/advance_forward.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/apply_1st.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/arg_typedef.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/arithmetic_op.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/arity.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/arity_spec.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/at_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/back_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/basic_bind.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/begin_end_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/clear_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/common_name_wknd.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/comparison_op.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/adl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/arrays.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/bcc.hpp2
-rw-r--r--3party/boost/boost/mpl/aux_/config/bind.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/compiler.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/ctps.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/dependent_nttp.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/dtp.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/eti.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/forwarding.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/gcc.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/gpu.hpp35
-rw-r--r--3party/boost/boost/mpl/aux_/config/has_apply.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/has_xxx.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/integral.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/intel.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/lambda.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/msvc.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/msvc_typename.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/nttp.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/operators.hpp7
-rw-r--r--3party/boost/boost/mpl/aux_/config/overload_resolution.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/pp_counter.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/preprocessor.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/static_constant.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/ttp.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/typeof.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/use_preprocessed.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/config/workaround.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/contains_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/count_args.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/count_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/empty_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/erase_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/erase_key_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/filter_iter.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/fold_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/fold_impl_body.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/fold_op.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/fold_pred.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/front_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/full_lambda.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/has_apply.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/has_begin.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/has_key_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/has_rebind.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/has_size.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/has_tag.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/has_type.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/include_preprocessed.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/insert_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/insert_range_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/inserter_algorithm.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/integral_wrapper.hpp8
-rw-r--r--3party/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/iter_apply.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/iter_fold_if_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/iter_fold_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/iter_push_front.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/joint_iter.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/lambda_arity_param.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/lambda_no_ctps.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/lambda_spec.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/lambda_support.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/largest_int.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/logical_op.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/msvc_dtw.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/msvc_eti_base.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/msvc_is_class.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/msvc_never_true.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/msvc_type.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/na.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/na_assert.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/na_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/na_spec.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/nested_type_wknd.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/nttp_decl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/numeric_cast_utils.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/numeric_op.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/order_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/overload_names.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/partition_op.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/pop_back_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/pop_front_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/add.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/default_params.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/enum.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/ext_params.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/filter_params.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/is_seq.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/params.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/range.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/repeat.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/sub.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/token_equal.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/preprocessor/tuple.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/ptr_to_ref.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/push_back_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/push_front_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/range_c/O1_size.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/range_c/back.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/range_c/empty.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/range_c/front.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/range_c/iterator.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/range_c/size.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/range_c/tag.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/reverse_fold_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/reverse_fold_impl_body.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/sequence_wrapper.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/shift_op.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/single_element_iter.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/size_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/sort_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/static_cast.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/template_arity.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/template_arity_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/test.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/test/assert.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/test/data.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/test/test_case.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/traits_lambda_spec.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/transform_iter.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/type_wrapper.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/unwrap.hpp10
-rw-r--r--3party/boost/boost/mpl/aux_/value_wknd.hpp6
-rw-r--r--3party/boost/boost/mpl/aux_/yes_no.hpp6
-rw-r--r--3party/boost/boost/mpl/back.hpp6
-rw-r--r--3party/boost/boost/mpl/back_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/back_inserter.hpp6
-rw-r--r--3party/boost/boost/mpl/base.hpp6
-rw-r--r--3party/boost/boost/mpl/begin.hpp6
-rw-r--r--3party/boost/boost/mpl/begin_end.hpp6
-rw-r--r--3party/boost/boost/mpl/begin_end_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/bind.hpp6
-rw-r--r--3party/boost/boost/mpl/bind_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/bitand.hpp10
-rw-r--r--3party/boost/boost/mpl/bitor.hpp10
-rw-r--r--3party/boost/boost/mpl/bitwise.hpp6
-rw-r--r--3party/boost/boost/mpl/bitxor.hpp6
-rw-r--r--3party/boost/boost/mpl/bool.hpp8
-rw-r--r--3party/boost/boost/mpl/bool_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/clear.hpp6
-rw-r--r--3party/boost/boost/mpl/clear_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/comparison.hpp6
-rw-r--r--3party/boost/boost/mpl/contains.hpp6
-rw-r--r--3party/boost/boost/mpl/contains_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/copy.hpp6
-rw-r--r--3party/boost/boost/mpl/copy_if.hpp6
-rw-r--r--3party/boost/boost/mpl/count.hpp6
-rw-r--r--3party/boost/boost/mpl/count_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/count_if.hpp6
-rw-r--r--3party/boost/boost/mpl/deque.hpp6
-rw-r--r--3party/boost/boost/mpl/deref.hpp6
-rw-r--r--3party/boost/boost/mpl/distance.hpp6
-rw-r--r--3party/boost/boost/mpl/distance_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/divides.hpp6
-rw-r--r--3party/boost/boost/mpl/empty.hpp6
-rw-r--r--3party/boost/boost/mpl/empty_base.hpp6
-rw-r--r--3party/boost/boost/mpl/empty_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/empty_sequence.hpp6
-rw-r--r--3party/boost/boost/mpl/end.hpp6
-rw-r--r--3party/boost/boost/mpl/equal.hpp6
-rw-r--r--3party/boost/boost/mpl/equal_to.hpp6
-rw-r--r--3party/boost/boost/mpl/erase.hpp6
-rw-r--r--3party/boost/boost/mpl/erase_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/erase_key.hpp6
-rw-r--r--3party/boost/boost/mpl/erase_key_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/eval_if.hpp12
-rw-r--r--3party/boost/boost/mpl/filter_view.hpp6
-rw-r--r--3party/boost/boost/mpl/find.hpp6
-rw-r--r--3party/boost/boost/mpl/find_if.hpp6
-rw-r--r--3party/boost/boost/mpl/fold.hpp6
-rw-r--r--3party/boost/boost/mpl/for_each.hpp15
-rw-r--r--3party/boost/boost/mpl/front.hpp6
-rw-r--r--3party/boost/boost/mpl/front_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/front_inserter.hpp6
-rw-r--r--3party/boost/boost/mpl/greater.hpp6
-rw-r--r--3party/boost/boost/mpl/greater_equal.hpp6
-rw-r--r--3party/boost/boost/mpl/has_key.hpp6
-rw-r--r--3party/boost/boost/mpl/has_key_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/has_xxx.hpp17
-rw-r--r--3party/boost/boost/mpl/identity.hpp6
-rw-r--r--3party/boost/boost/mpl/if.hpp6
-rw-r--r--3party/boost/boost/mpl/index_if.hpp6
-rw-r--r--3party/boost/boost/mpl/index_of.hpp6
-rw-r--r--3party/boost/boost/mpl/inherit.hpp6
-rw-r--r--3party/boost/boost/mpl/inherit_linearly.hpp6
-rw-r--r--3party/boost/boost/mpl/insert.hpp6
-rw-r--r--3party/boost/boost/mpl/insert_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/insert_range.hpp6
-rw-r--r--3party/boost/boost/mpl/insert_range_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/inserter.hpp6
-rw-r--r--3party/boost/boost/mpl/int.hpp6
-rw-r--r--3party/boost/boost/mpl/int_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/integral_c.hpp6
-rw-r--r--3party/boost/boost/mpl/integral_c_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/integral_c_tag.hpp6
-rw-r--r--3party/boost/boost/mpl/is_placeholder.hpp6
-rw-r--r--3party/boost/boost/mpl/is_sequence.hpp6
-rw-r--r--3party/boost/boost/mpl/iter_fold.hpp6
-rw-r--r--3party/boost/boost/mpl/iter_fold_if.hpp6
-rw-r--r--3party/boost/boost/mpl/iterator_category.hpp6
-rw-r--r--3party/boost/boost/mpl/iterator_range.hpp6
-rw-r--r--3party/boost/boost/mpl/iterator_tags.hpp6
-rw-r--r--3party/boost/boost/mpl/joint_view.hpp6
-rw-r--r--3party/boost/boost/mpl/key_type.hpp6
-rw-r--r--3party/boost/boost/mpl/key_type_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/lambda.hpp6
-rw-r--r--3party/boost/boost/mpl/lambda_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/less.hpp6
-rw-r--r--3party/boost/boost/mpl/less_equal.hpp6
-rw-r--r--3party/boost/boost/mpl/limits/arity.hpp6
-rw-r--r--3party/boost/boost/mpl/limits/list.hpp6
-rw-r--r--3party/boost/boost/mpl/limits/map.hpp6
-rw-r--r--3party/boost/boost/mpl/limits/set.hpp6
-rw-r--r--3party/boost/boost/mpl/limits/unrolling.hpp6
-rw-r--r--3party/boost/boost/mpl/limits/vector.hpp6
-rw-r--r--3party/boost/boost/mpl/list.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/O1_size.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/begin_end.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/clear.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/empty.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/front.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/include_preprocessed.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/item.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/iterator.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/numbered.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/numbered_c.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/pop_front.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/push_back.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/push_front.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/size.hpp6
-rw-r--r--3party/boost/boost/mpl/list/aux_/tag.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list0.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list0_c.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list10.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list10_c.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list20.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list20_c.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list30.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list30_c.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list40.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list40_c.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list50.hpp6
-rw-r--r--3party/boost/boost/mpl/list/list50_c.hpp6
-rw-r--r--3party/boost/boost/mpl/list_c.hpp6
-rw-r--r--3party/boost/boost/mpl/logical.hpp6
-rw-r--r--3party/boost/boost/mpl/long.hpp6
-rw-r--r--3party/boost/boost/mpl/long_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/lower_bound.hpp6
-rw-r--r--3party/boost/boost/mpl/map.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/at_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/begin_end_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/clear_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/contains_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/empty_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/erase_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/erase_key_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/has_key_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/include_preprocessed.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/insert_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/item.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/iterator.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/key_type_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/map0.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/numbered.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/size_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/tag.hpp6
-rw-r--r--3party/boost/boost/mpl/map/aux_/value_type_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/map/map0.hpp6
-rw-r--r--3party/boost/boost/mpl/map/map10.hpp6
-rw-r--r--3party/boost/boost/mpl/map/map20.hpp6
-rw-r--r--3party/boost/boost/mpl/map/map30.hpp6
-rw-r--r--3party/boost/boost/mpl/map/map40.hpp6
-rw-r--r--3party/boost/boost/mpl/map/map50.hpp6
-rw-r--r--3party/boost/boost/mpl/math/fixed_c.hpp6
-rw-r--r--3party/boost/boost/mpl/math/is_even.hpp6
-rw-r--r--3party/boost/boost/mpl/math/rational_c.hpp6
-rw-r--r--3party/boost/boost/mpl/max.hpp6
-rw-r--r--3party/boost/boost/mpl/max_element.hpp6
-rw-r--r--3party/boost/boost/mpl/min.hpp6
-rw-r--r--3party/boost/boost/mpl/min_element.hpp6
-rw-r--r--3party/boost/boost/mpl/min_max.hpp6
-rw-r--r--3party/boost/boost/mpl/minus.hpp6
-rw-r--r--3party/boost/boost/mpl/modulus.hpp6
-rw-r--r--3party/boost/boost/mpl/multiplies.hpp6
-rw-r--r--3party/boost/boost/mpl/multiset/aux_/count_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/multiset/aux_/insert_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/multiset/aux_/item.hpp6
-rw-r--r--3party/boost/boost/mpl/multiset/aux_/multiset0.hpp6
-rw-r--r--3party/boost/boost/mpl/multiset/aux_/tag.hpp6
-rw-r--r--3party/boost/boost/mpl/multiset/multiset0.hpp6
-rw-r--r--3party/boost/boost/mpl/negate.hpp6
-rw-r--r--3party/boost/boost/mpl/next.hpp6
-rw-r--r--3party/boost/boost/mpl/next_prior.hpp6
-rw-r--r--3party/boost/boost/mpl/not.hpp6
-rw-r--r--3party/boost/boost/mpl/not_equal_to.hpp6
-rw-r--r--3party/boost/boost/mpl/numeric_cast.hpp6
-rw-r--r--3party/boost/boost/mpl/or.hpp10
-rw-r--r--3party/boost/boost/mpl/order.hpp6
-rw-r--r--3party/boost/boost/mpl/order_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/pair.hpp6
-rw-r--r--3party/boost/boost/mpl/pair_view.hpp6
-rw-r--r--3party/boost/boost/mpl/partition.hpp6
-rw-r--r--3party/boost/boost/mpl/placeholders.hpp6
-rw-r--r--3party/boost/boost/mpl/plus.hpp6
-rw-r--r--3party/boost/boost/mpl/pop_back.hpp6
-rw-r--r--3party/boost/boost/mpl/pop_back_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/pop_front.hpp6
-rw-r--r--3party/boost/boost/mpl/pop_front_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/print.hpp13
-rw-r--r--3party/boost/boost/mpl/prior.hpp6
-rw-r--r--3party/boost/boost/mpl/protect.hpp6
-rw-r--r--3party/boost/boost/mpl/push_back.hpp6
-rw-r--r--3party/boost/boost/mpl/push_back_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/push_front.hpp6
-rw-r--r--3party/boost/boost/mpl/push_front_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/quote.hpp6
-rw-r--r--3party/boost/boost/mpl/range_c.hpp6
-rw-r--r--3party/boost/boost/mpl/remove.hpp6
-rw-r--r--3party/boost/boost/mpl/remove_if.hpp6
-rw-r--r--3party/boost/boost/mpl/replace.hpp6
-rw-r--r--3party/boost/boost/mpl/replace_if.hpp6
-rw-r--r--3party/boost/boost/mpl/reverse.hpp6
-rw-r--r--3party/boost/boost/mpl/reverse_fold.hpp6
-rw-r--r--3party/boost/boost/mpl/reverse_iter_fold.hpp6
-rw-r--r--3party/boost/boost/mpl/same_as.hpp6
-rw-r--r--3party/boost/boost/mpl/sequence_tag.hpp6
-rw-r--r--3party/boost/boost/mpl/sequence_tag_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/set.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/at_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/begin_end_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/clear_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/empty_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/erase_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/erase_key_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/has_key_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/include_preprocessed.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/insert_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/item.hpp12
-rw-r--r--3party/boost/boost/mpl/set/aux_/iterator.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/key_type_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/numbered.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/numbered_c.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/set0.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/size_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/tag.hpp6
-rw-r--r--3party/boost/boost/mpl/set/aux_/value_type_impl.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set0.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set0_c.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set10.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set10_c.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set20.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set20_c.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set30.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set30_c.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set40.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set40_c.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set50.hpp6
-rw-r--r--3party/boost/boost/mpl/set/set50_c.hpp6
-rw-r--r--3party/boost/boost/mpl/set_c.hpp6
-rw-r--r--3party/boost/boost/mpl/shift_left.hpp6
-rw-r--r--3party/boost/boost/mpl/shift_right.hpp6
-rw-r--r--3party/boost/boost/mpl/single_view.hpp6
-rw-r--r--3party/boost/boost/mpl/size.hpp6
-rw-r--r--3party/boost/boost/mpl/size_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/size_t.hpp6
-rw-r--r--3party/boost/boost/mpl/size_t_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/sizeof.hpp6
-rw-r--r--3party/boost/boost/mpl/sort.hpp6
-rw-r--r--3party/boost/boost/mpl/stable_partition.hpp6
-rw-r--r--3party/boost/boost/mpl/string.hpp4
-rw-r--r--3party/boost/boost/mpl/switch.hpp6
-rw-r--r--3party/boost/boost/mpl/tag.hpp6
-rw-r--r--3party/boost/boost/mpl/times.hpp6
-rw-r--r--3party/boost/boost/mpl/transform.hpp6
-rw-r--r--3party/boost/boost/mpl/transform_view.hpp6
-rw-r--r--3party/boost/boost/mpl/unique.hpp6
-rw-r--r--3party/boost/boost/mpl/unpack_args.hpp6
-rw-r--r--3party/boost/boost/mpl/upper_bound.hpp6
-rw-r--r--3party/boost/boost/mpl/value_type.hpp6
-rw-r--r--3party/boost/boost/mpl/value_type_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/vector.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/O1_size.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/at.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/back.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/begin_end.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/clear.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/empty.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/front.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/include_preprocessed.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/item.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/iterator.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/numbered.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/numbered_c.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/pop_back.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/pop_front.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/push_back.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/push_front.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/size.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/tag.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/aux_/vector0.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector0.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector0_c.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector10.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector10_c.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector20.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector20_c.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector30.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector30_c.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector40.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector40_c.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector50.hpp6
-rw-r--r--3party/boost/boost/mpl/vector/vector50_c.hpp6
-rw-r--r--3party/boost/boost/mpl/vector_c.hpp6
-rw-r--r--3party/boost/boost/mpl/void.hpp6
-rw-r--r--3party/boost/boost/mpl/void_fwd.hpp6
-rw-r--r--3party/boost/boost/mpl/zip_view.hpp6
-rw-r--r--3party/boost/boost/msm/back/history_policies.hpp19
-rw-r--r--3party/boost/boost/msm/back/metafunctions.hpp38
-rw-r--r--3party/boost/boost/msm/back/state_machine.hpp33
-rw-r--r--3party/boost/boost/msm/front/euml/common.hpp18
-rw-r--r--3party/boost/boost/msm/front/states.hpp8
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/msm/mpl_graph/mpl_graph.hpp0
-rw-r--r--3party/boost/boost/multi_array/base.hpp42
-rw-r--r--3party/boost/boost/multi_array/iterator.hpp7
-rw-r--r--3party/boost/boost/multi_array/multi_array_ref.hpp12
-rw-r--r--3party/boost/boost/multi_array/subarray.hpp12
-rw-r--r--3party/boost/boost/multi_array/view.hpp12
-rw-r--r--3party/boost/boost/multi_index/composite_key.hpp64
-rw-r--r--3party/boost/boost/multi_index/detail/access_specifier.hpp7
-rw-r--r--3party/boost/boost/multi_index/detail/adl_swap.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/archive_constructed.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/auto_space.hpp14
-rw-r--r--3party/boost/boost/multi_index/detail/base_type.hpp17
-rw-r--r--3party/boost/boost/multi_index/detail/bidir_node_iterator.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/bucket_array.hpp185
-rw-r--r--3party/boost/boost/multi_index/detail/converter.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/copy_map.hpp31
-rw-r--r--3party/boost/boost/multi_index/detail/do_not_copy_elements_tag.hpp34
-rw-r--r--3party/boost/boost/multi_index/detail/duplicates_iterator.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/has_tag.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/hash_index_args.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/hash_index_iterator.hpp86
-rw-r--r--3party/boost/boost/multi_index/detail/hash_index_node.hpp741
-rw-r--r--3party/boost/boost/multi_index/detail/header_holder.hpp2
-rw-r--r--3party/boost/boost/multi_index/detail/index_base.hpp138
-rw-r--r--3party/boost/boost/multi_index/detail/index_loader.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/index_matcher.hpp2
-rw-r--r--3party/boost/boost/multi_index/detail/index_node_base.hpp8
-rw-r--r--3party/boost/boost/multi_index/detail/index_saver.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/invariant_assert.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/is_index_list.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/iter_adaptor.hpp14
-rw-r--r--3party/boost/boost/multi_index/detail/modify_key_adaptor.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/msvc_index_specifier.hpp69
-rw-r--r--3party/boost/boost/multi_index/detail/no_duplicate_tags.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/node_type.hpp17
-rw-r--r--3party/boost/boost/multi_index/detail/ord_index_args.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/ord_index_node.hpp66
-rw-r--r--3party/boost/boost/multi_index/detail/ord_index_ops.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/prevent_eti.hpp60
-rw-r--r--3party/boost/boost/multi_index/detail/rnd_index_loader.hpp33
-rw-r--r--3party/boost/boost/multi_index/detail/rnd_index_node.hpp65
-rw-r--r--3party/boost/boost/multi_index/detail/rnd_index_ops.hpp16
-rw-r--r--3party/boost/boost/multi_index/detail/rnd_index_ptr_array.hpp57
-rw-r--r--3party/boost/boost/multi_index/detail/rnd_node_iterator.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/safe_ctr_proxy.hpp105
-rw-r--r--3party/boost/boost/multi_index/detail/safe_mode.hpp16
-rw-r--r--3party/boost/boost/multi_index/detail/scope_guard.hpp5
-rw-r--r--3party/boost/boost/multi_index/detail/seq_index_node.hpp55
-rw-r--r--3party/boost/boost/multi_index/detail/seq_index_ops.hpp7
-rw-r--r--3party/boost/boost/multi_index/detail/serialization_version.hpp6
-rw-r--r--3party/boost/boost/multi_index/detail/uintptr_type.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/unbounded.hpp21
-rw-r--r--3party/boost/boost/multi_index/detail/value_compare.hpp4
-rw-r--r--3party/boost/boost/multi_index/detail/vartempl_support.hpp247
-rw-r--r--3party/boost/boost/multi_index/global_fun.hpp19
-rw-r--r--3party/boost/boost/multi_index/hashed_index.hpp1091
-rw-r--r--3party/boost/boost/multi_index/hashed_index_fwd.hpp20
-rw-r--r--3party/boost/boost/multi_index/identity.hpp20
-rw-r--r--3party/boost/boost/multi_index/identity_fwd.hpp4
-rw-r--r--3party/boost/boost/multi_index/indexed_by.hpp8
-rw-r--r--3party/boost/boost/multi_index/key_extractors.hpp4
-rw-r--r--3party/boost/boost/multi_index/mem_fun.hpp27
-rw-r--r--3party/boost/boost/multi_index/member.hpp29
-rw-r--r--3party/boost/boost/multi_index/ordered_index.hpp246
-rw-r--r--3party/boost/boost/multi_index/ordered_index_fwd.hpp4
-rw-r--r--3party/boost/boost/multi_index/random_access_index.hpp275
-rw-r--r--3party/boost/boost/multi_index/random_access_index_fwd.hpp4
-rw-r--r--3party/boost/boost/multi_index/safe_mode_errors.hpp4
-rw-r--r--3party/boost/boost/multi_index/sequenced_index.hpp279
-rw-r--r--3party/boost/boost/multi_index/sequenced_index_fwd.hpp4
-rw-r--r--3party/boost/boost/multi_index/tag.hpp8
-rw-r--r--3party/boost/boost/multi_index_container.hpp525
-rw-r--r--3party/boost/boost/multi_index_container_fwd.hpp4
-rw-r--r--3party/boost/boost/multiprecision/concepts/mp_number_archetypes.hpp2
-rw-r--r--3party/boost/boost/multiprecision/cpp_bin_float.hpp1593
-rw-r--r--3party/boost/boost/multiprecision/cpp_bin_float/io.hpp690
-rw-r--r--3party/boost/boost/multiprecision/cpp_bin_float/transcendental.hpp132
-rw-r--r--3party/boost/boost/multiprecision/cpp_dec_float.hpp879
-rw-r--r--3party/boost/boost/multiprecision/cpp_int.hpp197
-rw-r--r--3party/boost/boost/multiprecision/cpp_int/add.hpp8
-rw-r--r--3party/boost/boost/multiprecision/cpp_int/bitwise.hpp82
-rw-r--r--3party/boost/boost/multiprecision/cpp_int/comparison.hpp25
-rw-r--r--3party/boost/boost/multiprecision/cpp_int/cpp_int_config.hpp4
-rw-r--r--3party/boost/boost/multiprecision/cpp_int/divide.hpp2
-rw-r--r--3party/boost/boost/multiprecision/cpp_int/limits.hpp2
-rw-r--r--3party/boost/boost/multiprecision/cpp_int/misc.hpp139
-rw-r--r--3party/boost/boost/multiprecision/cpp_int/multiply.hpp4
-rw-r--r--3party/boost/boost/multiprecision/cpp_int/serialize.hpp199
-rw-r--r--3party/boost/boost/multiprecision/debug_adaptor.hpp15
-rw-r--r--3party/boost/boost/multiprecision/detail/big_lanczos.hpp11
-rw-r--r--3party/boost/boost/multiprecision/detail/bitscan.hpp229
-rw-r--r--3party/boost/boost/multiprecision/detail/default_ops.hpp184
-rw-r--r--3party/boost/boost/multiprecision/detail/et_ops.hpp13
-rw-r--r--3party/boost/boost/multiprecision/detail/float_string_cvt.hpp40
-rw-r--r--3party/boost/boost/multiprecision/detail/functions/constants.hpp1
-rw-r--r--3party/boost/boost/multiprecision/detail/functions/pow.hpp82
-rw-r--r--3party/boost/boost/multiprecision/detail/functions/trig.hpp111
-rw-r--r--3party/boost/boost/multiprecision/detail/generic_interconvert.hpp13
-rw-r--r--3party/boost/boost/multiprecision/detail/integer_ops.hpp36
-rw-r--r--3party/boost/boost/multiprecision/detail/number_base.hpp40
-rw-r--r--3party/boost/boost/multiprecision/float128.hpp112
-rw-r--r--3party/boost/boost/multiprecision/gmp.hpp64
-rw-r--r--3party/boost/boost/multiprecision/integer.hpp94
-rw-r--r--3party/boost/boost/multiprecision/logged_adaptor.hpp17
-rw-r--r--3party/boost/boost/multiprecision/mpfi.hpp201
-rw-r--r--3party/boost/boost/multiprecision/mpfr.hpp50
-rw-r--r--3party/boost/boost/multiprecision/number.hpp137
-rw-r--r--3party/boost/boost/multiprecision/rational_adaptor.hpp44
-rw-r--r--3party/boost/boost/multiprecision/tommath.hpp19
-rw-r--r--3party/boost/boost/multiprecision/traits/is_restricted_conversion.hpp2
-rw-r--r--3party/boost/boost/noncopyable.hpp55
-rw-r--r--3party/boost/boost/nondet_random.hpp2
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/numeric/conversion/detail/old_numeric_cast.hpp0
-rw-r--r--3party/boost/boost/numeric/odeint.hpp14
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/algebra_dispatcher.hpp87
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/array_algebra.hpp17
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/default_operations.hpp7
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/detail/extract_value_type.hpp52
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/detail/for_each.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/detail/macros.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/detail/norm_inf.hpp45
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/detail/reduce.hpp67
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/fusion_algebra.hpp40
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp48
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/multi_array_algebra.hpp148
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/norm_result_type.hpp33
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/operations_dispatcher.hpp41
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/range_algebra.hpp33
-rw-r--r--3party/boost/boost/numeric/odeint/algebra/vector_space_algebra.hpp56
-rw-r--r--3party/boost/boost/numeric/odeint/config.hpp14
-rw-r--r--3party/boost/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp55
-rw-r--r--3party/boost/boost/numeric/odeint/external/blaze/blaze_resize.hpp62
-rw-r--r--3party/boost/boost/numeric/odeint/external/compute/compute.hpp27
-rw-r--r--3party/boost/boost/numeric/odeint/external/compute/compute_algebra.hpp65
-rw-r--r--3party/boost/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp41
-rw-r--r--3party/boost/boost/numeric/odeint/external/compute/compute_operations.hpp198
-rw-r--r--3party/boost/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp44
-rw-r--r--3party/boost/boost/numeric/odeint/external/compute/compute_resize.hpp90
-rw-r--r--3party/boost/boost/numeric/odeint/external/eigen/eigen_algebra.hpp96
-rw-r--r--3party/boost/boost/numeric/odeint/external/eigen/eigen_resize.hpp107
-rw-r--r--3party/boost/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp6
-rw-r--r--3party/boost/boost/numeric/odeint/external/mkl/mkl_operations.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/external/mpi/mpi.hpp25
-rw-r--r--3party/boost/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp62
-rw-r--r--3party/boost/boost/numeric/odeint/external/mpi/mpi_state.hpp113
-rw-r--r--3party/boost/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp94
-rw-r--r--3party/boost/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp6
-rw-r--r--3party/boost/boost/numeric/odeint/external/mtl4/mtl4.hpp23
-rw-r--r--3party/boost/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp99
-rw-r--r--3party/boost/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp6
-rw-r--r--3party/boost/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp25
-rw-r--r--3party/boost/boost/numeric/odeint/external/nt2/nt2_copy.hpp33
-rw-r--r--3party/boost/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp31
-rw-r--r--3party/boost/boost/numeric/odeint/external/nt2/nt2_resize.hpp52
-rw-r--r--3party/boost/boost/numeric/odeint/external/openmp/openmp.hpp31
-rw-r--r--3party/boost/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp281
-rw-r--r--3party/boost/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp276
-rw-r--r--3party/boost/boost/numeric/odeint/external/openmp/openmp_state.hpp171
-rw-r--r--3party/boost/boost/numeric/odeint/external/thrust/thrust.hpp27
-rw-r--r--3party/boost/boost/numeric/odeint/external/thrust/thrust_algebra.hpp39
-rw-r--r--3party/boost/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp52
-rw-r--r--3party/boost/boost/numeric/odeint/external/thrust/thrust_operations.hpp23
-rw-r--r--3party/boost/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp52
-rw-r--r--3party/boost/boost/numeric/odeint/external/thrust/thrust_resize.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/external/vexcl/vexcl.hpp28
-rw-r--r--3party/boost/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp61
-rw-r--r--3party/boost/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp51
-rw-r--r--3party/boost/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp55
-rw-r--r--3party/boost/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp68
-rw-r--r--3party/boost/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp12
-rw-r--r--3party/boost/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp58
-rw-r--r--3party/boost/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp69
-rw-r--r--3party/boost/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp5
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/detail/functors.hpp70
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp52
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/detail/integrate_const.hpp48
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp41
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/detail/integrate_times.hpp53
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/integrate.hpp14
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/integrate_adaptive.hpp10
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/integrate_const.hpp14
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/integrate_n_steps.hpp11
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/integrate_times.hpp10
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/null_observer.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/integrate/observer_collection.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/adaptive_iterator.hpp183
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp175
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/const_step_iterator.hpp180
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/const_step_time_iterator.hpp173
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp199
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp253
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp228
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp239
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp371
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/detail/functors.hpp70
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp121
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp111
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp107
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp67
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/integrate.hpp111
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp129
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/integrate_const.hpp158
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp125
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/integrate_times.hpp133
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/null_observer.hpp38
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/integrate/observer_collection.hpp56
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/n_step_iterator.hpp168
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/n_step_time_iterator.hpp169
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/times_iterator.hpp189
-rw-r--r--3party/boost/boost/numeric/odeint/iterator/times_time_iterator.hpp193
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/adams_bashforth.hpp58
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp69
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/adams_moulton.hpp54
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp7
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp5
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp5
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp36
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer.hpp13
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp15
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp33
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/controlled_step_result.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp13
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp24
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp14
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp11
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/euler.hpp10
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp11
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/explicit_generic_rk.hpp11
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation/make_controlled.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/generation/make_dense_output.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/implicit_euler.hpp5
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/modified_midpoint.hpp15
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/rosenbrock4.hpp5
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp19
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp5
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/runge_kutta4.hpp10
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp11
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp10
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp13
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp11
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp12
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/stepper_categories.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/symplectic_euler.hpp10
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp14
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp12
-rw-r--r--3party/boost/boost/numeric/odeint/stepper/velocity_verlet.hpp381
-rw-r--r--3party/boost/boost/numeric/odeint/util/bind.hpp49
-rw-r--r--3party/boost/boost/numeric/odeint/util/copy.hpp20
-rw-r--r--3party/boost/boost/numeric/odeint/util/detail/is_range.hpp3
-rw-r--r--3party/boost/boost/numeric/odeint/util/detail/less_with_sign.hpp51
-rw-r--r--3party/boost/boost/numeric/odeint/util/is_pair.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/util/is_resizeable.hpp39
-rw-r--r--3party/boost/boost/numeric/odeint/util/multi_array_adaption.hpp130
-rw-r--r--3party/boost/boost/numeric/odeint/util/n_ary_helper.hpp96
-rw-r--r--3party/boost/boost/numeric/odeint/util/resize.hpp21
-rw-r--r--3party/boost/boost/numeric/odeint/util/resizer.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/util/same_instance.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/util/same_size.hpp20
-rw-r--r--3party/boost/boost/numeric/odeint/util/split.hpp64
-rw-r--r--3party/boost/boost/numeric/odeint/util/split_adaptor.hpp102
-rw-r--r--3party/boost/boost/numeric/odeint/util/state_wrapper.hpp4
-rw-r--r--3party/boost/boost/numeric/odeint/util/stepper_traits.hpp63
-rw-r--r--3party/boost/boost/numeric/odeint/util/ublas_matrix_expression.patch6
-rw-r--r--3party/boost/boost/numeric/odeint/util/ublas_wrapper.hpp243
-rw-r--r--3party/boost/boost/numeric/odeint/util/unit_helper.hpp5
-rw-r--r--3party/boost/boost/numeric/odeint/util/unwrap_reference.hpp92
-rw-r--r--3party/boost/boost/numeric/odeint/version.hpp4
-rw-r--r--3party/boost/boost/operators.hpp32
-rw-r--r--3party/boost/boost/optional/bad_optional_access.hpp29
-rw-r--r--3party/boost/boost/optional/optional.hpp679
-rw-r--r--3party/boost/boost/optional/optional_fwd.hpp5
-rw-r--r--3party/boost/boost/optional/optional_io.hpp24
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/overloads.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/parameter_requirements.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/parenthesized_type.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/preprocessor/flatten.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/preprocessor/for_each.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/python/invoker_iterate.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/result_of0.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/tag.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/template_keyword.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/unwrap_cv_reference.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/void.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/aux_/yesno.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/binding.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/keyword.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/match.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/parameters.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/python.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/parameter/value_type.hpp0
-rw-r--r--3party/boost/boost/pending/container_traits.hpp145
-rw-r--r--3party/boost/boost/pending/cstddef.hpp16
-rw-r--r--3party/boost/boost/pending/integer_log2.hpp113
-rw-r--r--3party/boost/boost/pending/iterator_tests.hpp3
-rw-r--r--3party/boost/boost/pending/relaxed_heap.hpp2
-rw-r--r--3party/boost/boost/phoenix/bind.hpp4
-rw-r--r--3party/boost/boost/phoenix/bind/bind_member_function.hpp12
-rw-r--r--3party/boost/boost/phoenix/bind/bind_member_variable.hpp6
-rw-r--r--3party/boost/boost/phoenix/bind/detail/function_ptr.hpp18
-rw-r--r--3party/boost/boost/phoenix/bind/detail/member_function_ptr.hpp14
-rw-r--r--3party/boost/boost/phoenix/bind/detail/member_variable.hpp16
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_10.hpp36
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_20.hpp76
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_30.hpp116
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_40.hpp156
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_50.hpp196
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_10.hpp40
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_20.hpp80
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_30.hpp120
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_40.hpp160
-rw-r--r--3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_50.hpp200
-rw-r--r--3party/boost/boost/phoenix/core.hpp7
-rw-r--r--3party/boost/boost/phoenix/core/actor.hpp60
-rw-r--r--3party/boost/boost/phoenix/core/debug.hpp50
-rw-r--r--3party/boost/boost/phoenix/core/detail/expression.hpp6
-rw-r--r--3party/boost/boost/phoenix/core/detail/phx2_result.hpp6
-rw-r--r--3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_10.hpp2
-rw-r--r--3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_20.hpp2
-rw-r--r--3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_30.hpp2
-rw-r--r--3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_40.hpp2
-rw-r--r--3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_50.hpp2
-rw-r--r--3party/boost/boost/phoenix/core/domain.hpp6
-rw-r--r--3party/boost/boost/phoenix/core/environment.hpp57
-rw-r--r--3party/boost/boost/phoenix/core/expression.hpp5
-rw-r--r--3party/boost/boost/phoenix/core/function_equal.hpp11
-rw-r--r--3party/boost/boost/phoenix/core/is_actor.hpp3
-rw-r--r--3party/boost/boost/phoenix/core/is_nullary.hpp4
-rw-r--r--3party/boost/boost/phoenix/core/limits.hpp8
-rw-r--r--3party/boost/boost/phoenix/core/nothing.hpp1
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/actor_10.hpp5
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/actor_20.hpp5
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/actor_30.hpp5
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/actor_40.hpp5
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/actor_50.hpp5
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/expression_10.hpp50
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/expression_20.hpp100
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/expression_30.hpp150
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/expression_40.hpp200
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/expression_50.hpp250
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/function_equal_10.hpp8
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/function_equal_20.hpp8
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/function_equal_30.hpp8
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/function_equal_40.hpp8
-rw-r--r--3party/boost/boost/phoenix/core/preprocessed/function_equal_50.hpp8
-rw-r--r--3party/boost/boost/phoenix/core/reference.hpp6
-rw-r--r--3party/boost/boost/phoenix/core/terminal.hpp9
-rw-r--r--3party/boost/boost/phoenix/core/value.hpp24
-rw-r--r--3party/boost/boost/phoenix/core/visit_each.hpp2
-rw-r--r--3party/boost/boost/phoenix/function/adapt_callable.hpp6
-rw-r--r--3party/boost/boost/phoenix/function/adapt_function.hpp8
-rw-r--r--3party/boost/boost/phoenix/function/function.hpp17
-rw-r--r--3party/boost/boost/phoenix/fusion.hpp4
-rw-r--r--3party/boost/boost/phoenix/object.hpp4
-rw-r--r--3party/boost/boost/phoenix/operator.hpp1
-rw-r--r--3party/boost/boost/phoenix/operator/comparison.hpp1
-rw-r--r--3party/boost/boost/phoenix/operator/detail/define_operator.hpp6
-rw-r--r--3party/boost/boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp6
-rw-r--r--3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_10.hpp6
-rw-r--r--3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_20.hpp6
-rw-r--r--3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_30.hpp6
-rw-r--r--3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_40.hpp6
-rw-r--r--3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_50.hpp6
-rw-r--r--3party/boost/boost/phoenix/operator/preprocessed/member_10.hpp2
-rw-r--r--3party/boost/boost/phoenix/operator/preprocessed/member_20.hpp2
-rw-r--r--3party/boost/boost/phoenix/operator/preprocessed/member_30.hpp2
-rw-r--r--3party/boost/boost/phoenix/operator/preprocessed/member_40.hpp2
-rw-r--r--3party/boost/boost/phoenix/operator/preprocessed/member_50.hpp2
-rw-r--r--3party/boost/boost/phoenix/phoenix.hpp1
-rw-r--r--3party/boost/boost/phoenix/scope/lambda.hpp52
-rw-r--r--3party/boost/boost/phoenix/scope/let.hpp4
-rw-r--r--3party/boost/boost/phoenix/scope/local_variable.hpp6
-rw-r--r--3party/boost/boost/phoenix/scope/preprocessed/lambda_10.hpp53
-rw-r--r--3party/boost/boost/phoenix/scope/preprocessed/lambda_20.hpp53
-rw-r--r--3party/boost/boost/phoenix/scope/preprocessed/lambda_30.hpp53
-rw-r--r--3party/boost/boost/phoenix/scope/preprocessed/lambda_40.hpp53
-rw-r--r--3party/boost/boost/phoenix/scope/preprocessed/lambda_50.hpp53
-rw-r--r--3party/boost/boost/phoenix/scope/scoped_environment.hpp20
-rw-r--r--3party/boost/boost/phoenix/scope/this.hpp202
-rw-r--r--3party/boost/boost/phoenix/statement.hpp4
-rw-r--r--3party/boost/boost/phoenix/statement/do_while.hpp8
-rw-r--r--3party/boost/boost/phoenix/statement/for.hpp12
-rw-r--r--3party/boost/boost/phoenix/statement/if.hpp10
-rw-r--r--3party/boost/boost/phoenix/statement/sequence.hpp1
-rw-r--r--3party/boost/boost/phoenix/statement/switch.hpp2
-rw-r--r--3party/boost/boost/phoenix/statement/throw.hpp3
-rw-r--r--3party/boost/boost/phoenix/statement/try_catch.hpp4
-rw-r--r--3party/boost/boost/phoenix/statement/while.hpp10
-rw-r--r--3party/boost/boost/phoenix/stl.hpp4
-rw-r--r--3party/boost/boost/phoenix/stl/algorithm/detail/has_equal_range.hpp2
-rw-r--r--3party/boost/boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp2
-rw-r--r--3party/boost/boost/phoenix/stl/algorithm/detail/has_remove_if.hpp2
-rw-r--r--3party/boost/boost/phoenix/stl/algorithm/detail/has_reverse.hpp2
-rw-r--r--3party/boost/boost/phoenix/stl/algorithm/detail/has_unique.hpp2
-rw-r--r--3party/boost/boost/phoenix/stl/algorithm/detail/is_std_set.hpp2
-rw-r--r--3party/boost/boost/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp2
-rw-r--r--3party/boost/boost/phoenix/stl/cmath.hpp27
-rw-r--r--3party/boost/boost/phoenix/support/vector.hpp10
-rw-r--r--3party/boost/boost/phoenix/version.hpp18
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/pointee.hpp0
-rw-r--r--3party/boost/boost/polygon/detail/polygon_45_touch.hpp4
-rw-r--r--3party/boost/boost/polygon/detail/polygon_arbitrary_formation.hpp3
-rw-r--r--3party/boost/boost/polygon/detail/polygon_formation.hpp791
-rw-r--r--3party/boost/boost/polygon/detail/polygon_set_view.hpp2
-rw-r--r--3party/boost/boost/polygon/detail/scan_arbitrary.hpp4
-rw-r--r--3party/boost/boost/polygon/detail/voronoi_ctypes.hpp2
-rw-r--r--3party/boost/boost/polygon/detail/voronoi_predicates.hpp391
-rw-r--r--3party/boost/boost/polygon/detail/voronoi_robust_fpt.hpp1
-rw-r--r--3party/boost/boost/polygon/detail/voronoi_structures.hpp45
-rw-r--r--3party/boost/boost/polygon/interval_concept.hpp1
-rw-r--r--3party/boost/boost/polygon/point_data.hpp2
-rw-r--r--3party/boost/boost/polygon/polygon_90_set_concept.hpp1
-rw-r--r--3party/boost/boost/polygon/polygon_90_set_data.hpp28
-rw-r--r--3party/boost/boost/polygon/polygon_set_data.hpp54
-rw-r--r--3party/boost/boost/polygon/polygon_traits.hpp59
-rw-r--r--3party/boost/boost/polygon/rectangle_concept.hpp12
-rw-r--r--3party/boost/boost/polygon/rectangle_traits.hpp3
-rw-r--r--3party/boost/boost/polygon/segment_utils.hpp7
-rw-r--r--3party/boost/boost/polygon/transform.hpp2
-rw-r--r--3party/boost/boost/polygon/voronoi_builder.hpp2
-rw-r--r--3party/boost/boost/polygon/voronoi_geometry_type.hpp2
-rw-r--r--3party/boost/boost/polymorphic_cast.hpp91
-rw-r--r--3party/boost/boost/predef.h19
-rw-r--r--3party/boost/boost/predef/architecture.h30
-rw-r--r--3party/boost/boost/predef/architecture/alpha.h60
-rw-r--r--3party/boost/boost/predef/architecture/arm.h71
-rw-r--r--3party/boost/boost/predef/architecture/blackfin.h47
-rw-r--r--3party/boost/boost/predef/architecture/convex.h67
-rw-r--r--3party/boost/boost/predef/architecture/ia64.h49
-rw-r--r--3party/boost/boost/predef/architecture/m68k.h83
-rw-r--r--3party/boost/boost/predef/architecture/mips.h74
-rw-r--r--3party/boost/boost/predef/architecture/parisc.h65
-rw-r--r--3party/boost/boost/predef/architecture/ppc.h73
-rw-r--r--3party/boost/boost/predef/architecture/pyramid.h43
-rw-r--r--3party/boost/boost/predef/architecture/rs6k.h56
-rw-r--r--3party/boost/boost/predef/architecture/sparc.h55
-rw-r--r--3party/boost/boost/predef/architecture/superh.h68
-rw-r--r--3party/boost/boost/predef/architecture/sys370.h44
-rw-r--r--3party/boost/boost/predef/architecture/sys390.h44
-rw-r--r--3party/boost/boost/predef/architecture/x86.h38
-rw-r--r--3party/boost/boost/predef/architecture/x86/32.h87
-rw-r--r--3party/boost/boost/predef/architecture/x86/64.h50
-rw-r--r--3party/boost/boost/predef/architecture/z.h43
-rw-r--r--3party/boost/boost/predef/compiler.h41
-rw-r--r--3party/boost/boost/predef/compiler/borland.h64
-rw-r--r--3party/boost/boost/predef/compiler/clang.h57
-rw-r--r--3party/boost/boost/predef/compiler/comeau.h62
-rw-r--r--3party/boost/boost/predef/compiler/compaq.h67
-rw-r--r--3party/boost/boost/predef/compiler/diab.h57
-rw-r--r--3party/boost/boost/predef/compiler/digitalmars.h57
-rw-r--r--3party/boost/boost/predef/compiler/dignus.h57
-rw-r--r--3party/boost/boost/predef/compiler/edg.h57
-rw-r--r--3party/boost/boost/predef/compiler/ekopath.h58
-rw-r--r--3party/boost/boost/predef/compiler/gcc.h69
-rw-r--r--3party/boost/boost/predef/compiler/gcc_xml.h53
-rw-r--r--3party/boost/boost/predef/compiler/greenhills.h67
-rw-r--r--3party/boost/boost/predef/compiler/hp_acc.h62
-rw-r--r--3party/boost/boost/predef/compiler/iar.h57
-rw-r--r--3party/boost/boost/predef/compiler/ibm.h73
-rw-r--r--3party/boost/boost/predef/compiler/intel.h66
-rw-r--r--3party/boost/boost/predef/compiler/kai.h57
-rw-r--r--3party/boost/boost/predef/compiler/llvm.h58
-rw-r--r--3party/boost/boost/predef/compiler/metaware.h54
-rw-r--r--3party/boost/boost/predef/compiler/metrowerks.h78
-rw-r--r--3party/boost/boost/predef/compiler/microtec.h54
-rw-r--r--3party/boost/boost/predef/compiler/mpw.h64
-rw-r--r--3party/boost/boost/predef/compiler/palm.h57
-rw-r--r--3party/boost/boost/predef/compiler/pgi.h61
-rw-r--r--3party/boost/boost/predef/compiler/sgi_mipspro.h67
-rw-r--r--3party/boost/boost/predef/compiler/sunpro.h67
-rw-r--r--3party/boost/boost/predef/compiler/tendra.h54
-rw-r--r--3party/boost/boost/predef/compiler/visualc.h79
-rw-r--r--3party/boost/boost/predef/compiler/watcom.h57
-rw-r--r--3party/boost/boost/predef/detail/_cassert.h17
-rw-r--r--3party/boost/boost/predef/detail/_exception.h15
-rw-r--r--3party/boost/boost/predef/detail/comp_detected.h10
-rw-r--r--3party/boost/boost/predef/detail/endian_compat.h26
-rw-r--r--3party/boost/boost/predef/detail/os_detected.h10
-rw-r--r--3party/boost/boost/predef/detail/platform_detected.h10
-rw-r--r--3party/boost/boost/predef/detail/test.h17
-rw-r--r--3party/boost/boost/predef/language.h15
-rw-r--r--3party/boost/boost/predef/language/objc.h43
-rw-r--r--3party/boost/boost/predef/language/stdc.h54
-rw-r--r--3party/boost/boost/predef/language/stdcpp.h124
-rw-r--r--3party/boost/boost/predef/library.h14
-rw-r--r--3party/boost/boost/predef/library/c.h18
-rw-r--r--3party/boost/boost/predef/library/c/_prefix.h13
-rw-r--r--3party/boost/boost/predef/library/c/gnu.h62
-rw-r--r--3party/boost/boost/predef/library/c/uc.h48
-rw-r--r--3party/boost/boost/predef/library/c/vms.h48
-rw-r--r--3party/boost/boost/predef/library/c/zos.h57
-rw-r--r--3party/boost/boost/predef/library/std.h23
-rw-r--r--3party/boost/boost/predef/library/std/_prefix.h23
-rw-r--r--3party/boost/boost/predef/library/std/cxx.h47
-rw-r--r--3party/boost/boost/predef/library/std/dinkumware.h53
-rw-r--r--3party/boost/boost/predef/library/std/libcomo.h48
-rw-r--r--3party/boost/boost/predef/library/std/modena.h46
-rw-r--r--3party/boost/boost/predef/library/std/msl.h54
-rw-r--r--3party/boost/boost/predef/library/std/roguewave.h57
-rw-r--r--3party/boost/boost/predef/library/std/sgi.h52
-rw-r--r--3party/boost/boost/predef/library/std/stdcpp3.h54
-rw-r--r--3party/boost/boost/predef/library/std/stlport.h60
-rw-r--r--3party/boost/boost/predef/library/std/vacpp.h45
-rw-r--r--3party/boost/boost/predef/make.h87
-rw-r--r--3party/boost/boost/predef/os.h30
-rw-r--r--3party/boost/boost/predef/os/aix.h67
-rw-r--r--3party/boost/boost/predef/os/amigaos.h47
-rw-r--r--3party/boost/boost/predef/os/android.h46
-rw-r--r--3party/boost/boost/predef/os/beos.h46
-rw-r--r--3party/boost/boost/predef/os/bsd.h95
-rw-r--r--3party/boost/boost/predef/os/bsd/bsdi.h48
-rw-r--r--3party/boost/boost/predef/os/bsd/dragonfly.h50
-rw-r--r--3party/boost/boost/predef/os/bsd/free.h60
-rw-r--r--3party/boost/boost/predef/os/bsd/net.h84
-rw-r--r--3party/boost/boost/predef/os/bsd/open.h171
-rw-r--r--3party/boost/boost/predef/os/cygwin.h46
-rw-r--r--3party/boost/boost/predef/os/hpux.h48
-rw-r--r--3party/boost/boost/predef/os/ios.h51
-rw-r--r--3party/boost/boost/predef/os/irix.h47
-rw-r--r--3party/boost/boost/predef/os/linux.h47
-rw-r--r--3party/boost/boost/predef/os/macos.h66
-rw-r--r--3party/boost/boost/predef/os/os400.h46
-rw-r--r--3party/boost/boost/predef/os/qnxnto.h60
-rw-r--r--3party/boost/boost/predef/os/solaris.h47
-rw-r--r--3party/boost/boost/predef/os/unix.h76
-rw-r--r--3party/boost/boost/predef/os/vms.h53
-rw-r--r--3party/boost/boost/predef/os/windows.h51
-rw-r--r--3party/boost/boost/predef/other.h14
-rw-r--r--3party/boost/boost/predef/other/endian.h204
-rw-r--r--3party/boost/boost/predef/platform.h19
-rw-r--r--3party/boost/boost/predef/platform/mingw.h70
-rw-r--r--3party/boost/boost/predef/platform/windows_desktop.h44
-rw-r--r--3party/boost/boost/predef/platform/windows_phone.h42
-rw-r--r--3party/boost/boost/predef/platform/windows_runtime.h44
-rw-r--r--3party/boost/boost/predef/platform/windows_store.h42
-rw-r--r--3party/boost/boost/predef/version.h15
-rw-r--r--3party/boost/boost/predef/version_number.h54
-rw-r--r--3party/boost/boost/preprocessor.hpp2
-rw-r--r--3party/boost/boost/preprocessor/config/config.hpp15
-rw-r--r--3party/boost/boost/preprocessor/seq.hpp1
-rw-r--r--3party/boost/boost/preprocessor/seq/variadic_seq_to_seq.hpp28
-rw-r--r--3party/boost/boost/preprocessor/tuple.hpp9
-rw-r--r--3party/boost/boost/preprocessor/tuple/insert.hpp37
-rw-r--r--3party/boost/boost/preprocessor/tuple/pop_back.hpp64
-rw-r--r--3party/boost/boost/preprocessor/tuple/pop_front.hpp65
-rw-r--r--3party/boost/boost/preprocessor/tuple/push_back.hpp31
-rw-r--r--3party/boost/boost/preprocessor/tuple/push_front.hpp32
-rw-r--r--3party/boost/boost/preprocessor/tuple/rem.hpp8
-rw-r--r--3party/boost/boost/preprocessor/tuple/remove.hpp64
-rw-r--r--3party/boost/boost/preprocessor/tuple/replace.hpp37
-rw-r--r--3party/boost/boost/preprocessor/tuple/reverse.hpp5
-rw-r--r--3party/boost/boost/preprocessor/tuple/to_array.hpp4
-rw-r--r--3party/boost/boost/preprocessor/tuple/to_list.hpp4
-rw-r--r--3party/boost/boost/preprocessor/tuple/to_seq.hpp4
-rw-r--r--3party/boost/boost/program_options.hpp2
-rw-r--r--3party/boost/boost/program_options/detail/value_semantic.hpp7
-rw-r--r--3party/boost/boost/program_options/errors.hpp15
-rw-r--r--3party/boost/boost/program_options/options_description.hpp10
-rw-r--r--3party/boost/boost/program_options/variables_map.hpp2
-rw-r--r--3party/boost/boost/progress.hpp14
-rw-r--r--3party/boost/boost/property_map/dynamic_property_map.hpp29
-rw-r--r--3party/boost/boost/property_map/parallel/basic_reduce.hpp38
-rw-r--r--3party/boost/boost/property_map/parallel/caching_property_map.hpp4
-rw-r--r--3party/boost/boost/property_map/parallel/detail/untracked_pair.hpp81
-rw-r--r--3party/boost/boost/property_map/parallel/distributed_property_map.hpp75
-rw-r--r--3party/boost/boost/property_map/parallel/global_index_map.hpp4
-rw-r--r--3party/boost/boost/property_map/parallel/impl/distributed_property_map.ipp10
-rw-r--r--3party/boost/boost/property_map/parallel/local_property_map.hpp16
-rw-r--r--3party/boost/boost/property_map/parallel/parallel_property_maps.hpp233
-rw-r--r--3party/boost/boost/property_map/parallel/process_group.hpp97
-rw-r--r--3party/boost/boost/property_map/parallel/simple_trigger.hpp106
-rw-r--r--3party/boost/boost/property_map/parallel/unsafe_serialize.hpp81
-rw-r--r--3party/boost/boost/property_map/parallel/vector_property_map.hpp104
-rw-r--r--3party/boost/boost/property_map/property_map.hpp272
-rw-r--r--3party/boost/boost/property_map/vector_property_map.hpp90
-rw-r--r--3party/boost/boost/property_tree/detail/json_parser_read.hpp72
-rw-r--r--3party/boost/boost/property_tree/detail/json_parser_write.hpp11
-rw-r--r--3party/boost/boost/property_tree/detail/ptree_utils.hpp31
-rw-r--r--3party/boost/boost/property_tree/detail/xml_parser_read_rapidxml.hpp15
-rw-r--r--3party/boost/boost/property_tree/detail/xml_parser_utils.hpp73
-rw-r--r--3party/boost/boost/property_tree/detail/xml_parser_write.hpp64
-rw-r--r--3party/boost/boost/property_tree/detail/xml_parser_writer_settings.hpp28
-rw-r--r--3party/boost/boost/property_tree/stream_translator.hpp2
-rw-r--r--3party/boost/boost/property_tree/string_path.hpp2
-rw-r--r--3party/boost/boost/property_tree/xml_parser.hpp9
-rw-r--r--3party/boost/boost/proto/detail/as_expr.hpp4
-rw-r--r--3party/boost/boost/proto/detail/as_lvalue.hpp4
-rw-r--r--3party/boost/boost/proto/detail/decltype.hpp4
-rw-r--r--3party/boost/boost/proto/detail/dont_care.hpp4
-rw-r--r--3party/boost/boost/proto/detail/ignore_unused.hpp4
-rw-r--r--3party/boost/boost/proto/detail/pop_front.hpp43
-rw-r--r--3party/boost/boost/proto/detail/reverse.hpp189
-rw-r--r--3party/boost/boost/proto/domain.hpp4
-rw-r--r--3party/boost/boost/proto/expr.hpp4
-rw-r--r--3party/boost/boost/proto/extends.hpp4
-rw-r--r--3party/boost/boost/proto/generate.hpp4
-rw-r--r--3party/boost/boost/proto/make_expr.hpp4
-rw-r--r--3party/boost/boost/proto/matches.hpp4
-rw-r--r--3party/boost/boost/proto/operators.hpp4
-rw-r--r--3party/boost/boost/proto/proto_fwd.hpp2
-rw-r--r--3party/boost/boost/proto/traits.hpp4
-rw-r--r--3party/boost/boost/proto/transform/call.hpp4
-rw-r--r--3party/boost/boost/proto/transform/detail/pack.hpp4
-rw-r--r--3party/boost/boost/proto/transform/impl.hpp4
-rw-r--r--3party/boost/boost/proto/transform/make.hpp4
-rw-r--r--3party/boost/boost/proto/transform/pass_through.hpp4
-rw-r--r--3party/boost/boost/proto/transform/when.hpp4
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/ptr_container/detail/default_deleter.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/ptr_container/detail/is_convertible.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/ptr_container/detail/move.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/ptr_container/detail/scoped_deleter.hpp0
-rw-r--r--3party/boost/boost/ptr_container/detail/static_move_ptr.hpp2
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/ptr_container/detail/throw_exception.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/ptr_container/detail/void_ptr_iterator.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/ptr_container/exception.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/ptr_container/nullable.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/arg_from_python.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/base_type_traits.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/borrowed.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/cast.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/converter/arg_from_python.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/converter/arg_to_python.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/converter/arg_to_python_base.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/converter/context_result_converter.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/converter/object_manager.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/converter/pytype_function.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/converter/return_from_python.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/def_visitor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/borrowed_ptr.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/convertible.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/copy_ctor_mutates_rhs.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/def_helper_fwd.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/enable_if.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/force_instantiate.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/is_shared_ptr.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/is_wrapper.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/nullary_function_adaptor.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/prefix.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/python_type.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/sfinae.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/unwind_type.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/unwrap_type_id.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/unwrap_wrapper.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/value_arg.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/detail/wrapper_base.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/docstring_options.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/handle.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/handle_fwd.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/object.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/object/function_doc_signature.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/object/inheritance_query.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/object/stl_iterator_core.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/object_items.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/object_protocol_core.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/other.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/proxy.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/pure_virtual.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/raw_function.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/refcount.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/return_arg.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/self.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/stl_iterator.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/python/wrapper.hpp0
-rw-r--r--3party/boost/boost/random.hpp2
-rw-r--r--3party/boost/boost/random/additive_combine.hpp2
-rw-r--r--3party/boost/boost/random/bernoulli_distribution.hpp2
-rw-r--r--3party/boost/boost/random/beta_distribution.hpp184
-rw-r--r--3party/boost/boost/random/binomial_distribution.hpp16
-rw-r--r--3party/boost/boost/random/cauchy_distribution.hpp2
-rw-r--r--3party/boost/boost/random/chi_squared_distribution.hpp2
-rw-r--r--3party/boost/boost/random/detail/auto_link.hpp2
-rw-r--r--3party/boost/boost/random/detail/config.hpp2
-rw-r--r--3party/boost/boost/random/detail/const_mod.hpp2
-rw-r--r--3party/boost/boost/random/detail/disable_warnings.hpp7
-rw-r--r--3party/boost/boost/random/detail/enable_warnings.hpp6
-rw-r--r--3party/boost/boost/random/detail/generator_bits.hpp2
-rw-r--r--3party/boost/boost/random/detail/generator_seed_seq.hpp2
-rw-r--r--3party/boost/boost/random/detail/integer_log2.hpp4
-rw-r--r--3party/boost/boost/random/detail/large_arithmetic.hpp10
-rw-r--r--3party/boost/boost/random/detail/operators.hpp2
-rw-r--r--3party/boost/boost/random/detail/ptr_helper.hpp29
-rw-r--r--3party/boost/boost/random/detail/seed.hpp2
-rw-r--r--3party/boost/boost/random/detail/seed_impl.hpp11
-rw-r--r--3party/boost/boost/random/detail/uniform_int_float.hpp2
-rw-r--r--3party/boost/boost/random/detail/vector_io.hpp2
-rw-r--r--3party/boost/boost/random/discard_block.hpp5
-rw-r--r--3party/boost/boost/random/discrete_distribution.hpp285
-rw-r--r--3party/boost/boost/random/exponential_distribution.hpp2
-rw-r--r--3party/boost/boost/random/extreme_value_distribution.hpp2
-rw-r--r--3party/boost/boost/random/fisher_f_distribution.hpp2
-rw-r--r--3party/boost/boost/random/gamma_distribution.hpp2
-rw-r--r--3party/boost/boost/random/generate_canonical.hpp4
-rw-r--r--3party/boost/boost/random/geometric_distribution.hpp6
-rw-r--r--3party/boost/boost/random/independent_bits.hpp2
-rw-r--r--3party/boost/boost/random/inversive_congruential.hpp2
-rw-r--r--3party/boost/boost/random/lagged_fibonacci.hpp57
-rw-r--r--3party/boost/boost/random/laplace_distribution.hpp175
-rw-r--r--3party/boost/boost/random/linear_congruential.hpp2
-rw-r--r--3party/boost/boost/random/linear_feedback_shift.hpp2
-rw-r--r--3party/boost/boost/random/lognormal_distribution.hpp2
-rw-r--r--3party/boost/boost/random/mersenne_twister.hpp90
-rw-r--r--3party/boost/boost/random/negative_binomial_distribution.hpp2
-rw-r--r--3party/boost/boost/random/normal_distribution.hpp259
-rw-r--r--3party/boost/boost/random/piecewise_constant_distribution.hpp2
-rw-r--r--3party/boost/boost/random/piecewise_linear_distribution.hpp2
-rw-r--r--3party/boost/boost/random/poisson_distribution.hpp2
-rw-r--r--3party/boost/boost/random/random_device.hpp3
-rw-r--r--3party/boost/boost/random/random_number_generator.hpp2
-rw-r--r--3party/boost/boost/random/ranlux.hpp4
-rw-r--r--3party/boost/boost/random/seed_seq.hpp2
-rw-r--r--3party/boost/boost/random/shuffle_order.hpp4
-rw-r--r--3party/boost/boost/random/shuffle_output.hpp8
-rw-r--r--3party/boost/boost/random/student_t_distribution.hpp2
-rw-r--r--3party/boost/boost/random/subtract_with_carry.hpp2
-rw-r--r--3party/boost/boost/random/taus88.hpp2
-rw-r--r--3party/boost/boost/random/triangle_distribution.hpp2
-rw-r--r--3party/boost/boost/random/uniform_01.hpp4
-rw-r--r--3party/boost/boost/random/uniform_int.hpp2
-rw-r--r--3party/boost/boost/random/uniform_int_distribution.hpp2
-rw-r--r--3party/boost/boost/random/uniform_on_sphere.hpp84
-rw-r--r--3party/boost/boost/random/uniform_real.hpp4
-rw-r--r--3party/boost/boost/random/uniform_real_distribution.hpp9
-rw-r--r--3party/boost/boost/random/uniform_smallint.hpp2
-rw-r--r--3party/boost/boost/random/variate_generator.hpp2
-rw-r--r--3party/boost/boost/random/weibull_distribution.hpp2
-rw-r--r--3party/boost/boost/random/xor_combine.hpp3
-rw-r--r--3party/boost/boost/range.hpp12
-rw-r--r--3party/boost/boost/range/adaptor/adjacent_filtered.hpp41
-rw-r--r--3party/boost/boost/range/adaptor/copied.hpp34
-rw-r--r--3party/boost/boost/range/adaptor/filtered.hpp71
-rw-r--r--3party/boost/boost/range/adaptor/formatted.hpp229
-rw-r--r--3party/boost/boost/range/adaptor/indexed.hpp481
-rw-r--r--3party/boost/boost/range/adaptor/indirected.hpp44
-rw-r--r--3party/boost/boost/range/adaptor/map.hpp17
-rw-r--r--3party/boost/boost/range/adaptor/replaced.hpp87
-rw-r--r--3party/boost/boost/range/adaptor/replaced_if.hpp93
-rw-r--r--3party/boost/boost/range/adaptor/reversed.hpp31
-rw-r--r--3party/boost/boost/range/adaptor/sliced.hpp16
-rw-r--r--3party/boost/boost/range/adaptor/strided.hpp609
-rw-r--r--3party/boost/boost/range/adaptor/tokenized.hpp6
-rw-r--r--3party/boost/boost/range/adaptor/transformed.hpp99
-rw-r--r--3party/boost/boost/range/adaptor/type_erased.hpp14
-rw-r--r--3party/boost/boost/range/adaptor/uniqued.hpp7
-rw-r--r--3party/boost/boost/range/adaptors.hpp1
-rw-r--r--3party/boost/boost/range/algorithm.hpp2
-rw-r--r--3party/boost/boost/range/algorithm/equal.hpp8
-rw-r--r--3party/boost/boost/range/algorithm/for_each.hpp2
-rw-r--r--3party/boost/boost/range/algorithm/transform.hpp3
-rw-r--r--3party/boost/boost/range/algorithm/unique.hpp4
-rw-r--r--3party/boost/boost/range/algorithm_ext/insert.hpp10
-rw-r--r--3party/boost/boost/range/algorithm_ext/push_back.hpp5
-rw-r--r--3party/boost/boost/range/algorithm_ext/push_front.hpp5
-rw-r--r--3party/boost/boost/range/any_range.hpp5
-rw-r--r--3party/boost/boost/range/as_array.hpp2
-rw-r--r--3party/boost/boost/range/as_literal.hpp2
-rw-r--r--3party/boost/boost/range/atl.hpp9
-rw-r--r--3party/boost/boost/range/begin.hpp18
-rw-r--r--3party/boost/boost/range/category.hpp2
-rw-r--r--3party/boost/boost/range/combine.hpp303
-rw-r--r--3party/boost/boost/range/concepts.hpp50
-rw-r--r--3party/boost/boost/range/config.hpp16
-rw-r--r--3party/boost/boost/range/const_iterator.hpp69
-rw-r--r--3party/boost/boost/range/const_reverse_iterator.hpp7
-rw-r--r--3party/boost/boost/range/counting_range.hpp40
-rw-r--r--3party/boost/boost/range/detail/any_iterator.hpp7
-rw-r--r--3party/boost/boost/range/detail/any_iterator_interface.hpp29
-rw-r--r--3party/boost/boost/range/detail/any_iterator_wrapper.hpp76
-rw-r--r--3party/boost/boost/range/detail/as_literal.hpp2
-rw-r--r--3party/boost/boost/range/detail/begin.hpp11
-rw-r--r--3party/boost/boost/range/detail/collection_traits_detail.hpp120
-rw-r--r--3party/boost/boost/range/detail/combine_cxx03.hpp131
-rw-r--r--3party/boost/boost/range/detail/combine_cxx11.hpp40
-rw-r--r--3party/boost/boost/range/detail/combine_no_rvalue.hpp73
-rw-r--r--3party/boost/boost/range/detail/combine_rvalue.hpp32
-rw-r--r--3party/boost/boost/range/detail/common.hpp2
-rw-r--r--3party/boost/boost/range/detail/const_iterator.hpp71
-rw-r--r--3party/boost/boost/range/detail/default_constructible_unary_fn.hpp64
-rw-r--r--3party/boost/boost/range/detail/end.hpp21
-rw-r--r--3party/boost/boost/range/detail/extract_optional_type.hpp46
-rw-r--r--3party/boost/boost/range/detail/has_member_size.hpp66
-rw-r--r--3party/boost/boost/range/detail/implementation_help.hpp11
-rw-r--r--3party/boost/boost/range/detail/iterator.hpp78
-rw-r--r--3party/boost/boost/range/detail/join_iterator.hpp16
-rw-r--r--3party/boost/boost/range/detail/msvc_has_iterator_workaround.hpp132
-rw-r--r--3party/boost/boost/range/detail/range_return.hpp2
-rw-r--r--3party/boost/boost/range/detail/size.hpp159
-rw-r--r--3party/boost/boost/range/detail/sizer.hpp2
-rw-r--r--3party/boost/boost/range/detail/vc6/end.hpp170
-rw-r--r--3party/boost/boost/range/detail/vc6/size.hpp166
-rw-r--r--3party/boost/boost/range/difference_type.hpp10
-rw-r--r--3party/boost/boost/range/distance.hpp2
-rw-r--r--3party/boost/boost/range/empty.hpp2
-rw-r--r--3party/boost/boost/range/end.hpp18
-rw-r--r--3party/boost/boost/range/functions.hpp2
-rw-r--r--3party/boost/boost/range/has_range_iterator.hpp29
-rw-r--r--3party/boost/boost/range/irange.hpp10
-rw-r--r--3party/boost/boost/range/iterator.hpp82
-rw-r--r--3party/boost/boost/range/iterator_range_core.hpp714
-rw-r--r--3party/boost/boost/range/iterator_range_hash.hpp22
-rw-r--r--3party/boost/boost/range/metafunctions.hpp2
-rw-r--r--3party/boost/boost/range/mfc_map.hpp114
-rw-r--r--3party/boost/boost/range/mutable_iterator.hpp70
-rw-r--r--3party/boost/boost/range/numeric.hpp192
-rw-r--r--3party/boost/boost/range/pointer.hpp5
-rw-r--r--3party/boost/boost/range/range_fwd.hpp63
-rw-r--r--3party/boost/boost/range/rbegin.hpp2
-rw-r--r--3party/boost/boost/range/reference.hpp2
-rw-r--r--3party/boost/boost/range/rend.hpp2
-rw-r--r--3party/boost/boost/range/result_iterator.hpp2
-rw-r--r--3party/boost/boost/range/reverse_iterator.hpp8
-rw-r--r--3party/boost/boost/range/reverse_result_iterator.hpp2
-rw-r--r--3party/boost/boost/range/size.hpp27
-rw-r--r--3party/boost/boost/range/size_type.hpp29
-rw-r--r--3party/boost/boost/range/sub_range.hpp311
-rw-r--r--3party/boost/boost/range/traversal.hpp31
-rw-r--r--3party/boost/boost/range/value_type.hpp6
-rw-r--r--3party/boost/boost/ratio/detail/mpl/abs.hpp8
-rw-r--r--3party/boost/boost/ratio/detail/mpl/gcd.hpp2
-rw-r--r--3party/boost/boost/ratio/detail/mpl/lcm.hpp2
-rw-r--r--3party/boost/boost/ratio/detail/mpl/sign.hpp8
-rw-r--r--3party/boost/boost/ratio/detail/overflow_helpers.hpp2
-rw-r--r--3party/boost/boost/ratio/detail/ratio_io.hpp307
-rw-r--r--3party/boost/boost/ratio/ratio.hpp66
-rw-r--r--3party/boost/boost/ratio/ratio_fwd.hpp21
-rw-r--r--3party/boost/boost/ratio/ratio_io.hpp260
-rw-r--r--3party/boost/boost/ratio/ratio_static_string.hpp631
-rw-r--r--3party/boost/boost/rational.hpp12
-rw-r--r--3party/boost/boost/ref.hpp196
-rw-r--r--3party/boost/boost/regex/config.hpp2
-rw-r--r--3party/boost/boost/regex/icu.hpp9
-rw-r--r--3party/boost/boost/regex/mfc.hpp62
-rw-r--r--3party/boost/boost/regex/pending/static_mutex.hpp17
-rw-r--r--3party/boost/boost/regex/pending/unicode_iterator.hpp16
-rw-r--r--3party/boost/boost/regex/v4/basic_regex.hpp6
-rw-r--r--3party/boost/boost/regex/v4/basic_regex_creator.hpp21
-rw-r--r--3party/boost/boost/regex/v4/basic_regex_parser.hpp2
-rw-r--r--3party/boost/boost/regex/v4/cpp_regex_traits.hpp56
-rw-r--r--3party/boost/boost/regex/v4/instances.hpp4
-rw-r--r--3party/boost/boost/regex/v4/iterator_traits.hpp2
-rw-r--r--3party/boost/boost/regex/v4/match_flags.hpp2
-rw-r--r--3party/boost/boost/regex/v4/perl_matcher.hpp4
-rw-r--r--3party/boost/boost/regex/v4/perl_matcher_common.hpp12
-rw-r--r--3party/boost/boost/regex/v4/perl_matcher_non_recursive.hpp24
-rw-r--r--3party/boost/boost/regex/v4/perl_matcher_recursive.hpp16
-rw-r--r--3party/boost/boost/regex/v4/regex_raw_buffer.hpp2
-rw-r--r--3party/boost/boost/regex/v4/regex_split.hpp2
-rw-r--r--3party/boost/boost/regex/v4/regex_token_iterator.hpp15
-rw-r--r--3party/boost/boost/regex/v4/regex_traits.hpp4
-rw-r--r--3party/boost/boost/regex/v4/sub_match.hpp3
-rw-r--r--3party/boost/boost/regex/v4/u32regex_token_iterator.hpp17
-rw-r--r--3party/boost/boost/regex/v4/w32_regex_traits.hpp4
-rw-r--r--3party/boost/boost/serialization/access.hpp2
-rw-r--r--3party/boost/boost/serialization/array.hpp30
-rw-r--r--3party/boost/boost/serialization/assume_abstract.hpp2
-rw-r--r--3party/boost/boost/serialization/base_object.hpp10
-rw-r--r--3party/boost/boost/serialization/binary_object.hpp2
-rw-r--r--3party/boost/boost/serialization/bitset.hpp2
-rw-r--r--3party/boost/boost/serialization/collection_traits.hpp2
-rw-r--r--3party/boost/boost/serialization/collections_load_imp.hpp28
-rw-r--r--3party/boost/boost/serialization/collections_save_imp.hpp22
-rw-r--r--3party/boost/boost/serialization/complex.hpp2
-rw-r--r--3party/boost/boost/serialization/deque.hpp2
-rw-r--r--3party/boost/boost/serialization/detail/get_data.hpp2
-rw-r--r--3party/boost/boost/serialization/detail/shared_count_132.hpp10
-rw-r--r--3party/boost/boost/serialization/detail/shared_ptr_132.hpp32
-rw-r--r--3party/boost/boost/serialization/detail/stack_constructor.hpp8
-rw-r--r--3party/boost/boost/serialization/ephemeral.hpp6
-rw-r--r--3party/boost/boost/serialization/export.hpp6
-rw-r--r--3party/boost/boost/serialization/extended_type_info.hpp2
-rw-r--r--3party/boost/boost/serialization/extended_type_info_no_rtti.hpp16
-rw-r--r--3party/boost/boost/serialization/extended_type_info_typeid.hpp14
-rw-r--r--3party/boost/boost/serialization/factory.hpp2
-rw-r--r--3party/boost/boost/serialization/force_include.hpp2
-rw-r--r--3party/boost/boost/serialization/forward_list.hpp102
-rw-r--r--3party/boost/boost/serialization/hash_collections_load_imp.hpp2
-rw-r--r--3party/boost/boost/serialization/hash_collections_save_imp.hpp8
-rw-r--r--3party/boost/boost/serialization/hash_map.hpp10
-rw-r--r--3party/boost/boost/serialization/hash_set.hpp10
-rw-r--r--3party/boost/boost/serialization/is_bitwise_serializable.hpp2
-rw-r--r--3party/boost/boost/serialization/level.hpp17
-rw-r--r--3party/boost/boost/serialization/level_enum.hpp2
-rw-r--r--3party/boost/boost/serialization/list.hpp2
-rw-r--r--3party/boost/boost/serialization/map.hpp2
-rw-r--r--3party/boost/boost/serialization/nvp.hpp8
-rw-r--r--3party/boost/boost/serialization/optional.hpp33
-rw-r--r--3party/boost/boost/serialization/pfto.hpp2
-rw-r--r--3party/boost/boost/serialization/priority_queue.hpp74
-rw-r--r--3party/boost/boost/serialization/queue.hpp74
-rw-r--r--3party/boost/boost/serialization/scoped_ptr.hpp2
-rw-r--r--3party/boost/boost/serialization/serialization.hpp4
-rw-r--r--3party/boost/boost/serialization/set.hpp2
-rw-r--r--3party/boost/boost/serialization/shared_ptr.hpp126
-rw-r--r--3party/boost/boost/serialization/shared_ptr_132.hpp2
-rw-r--r--3party/boost/boost/serialization/shared_ptr_helper.hpp212
-rw-r--r--3party/boost/boost/serialization/singleton.hpp2
-rw-r--r--3party/boost/boost/serialization/slist.hpp4
-rw-r--r--3party/boost/boost/serialization/smart_cast.hpp32
-rw-r--r--3party/boost/boost/serialization/split_free.hpp6
-rw-r--r--3party/boost/boost/serialization/split_member.hpp6
-rw-r--r--3party/boost/boost/serialization/stack.hpp74
-rw-r--r--3party/boost/boost/serialization/state_saver.hpp4
-rw-r--r--3party/boost/boost/serialization/static_warning.hpp6
-rw-r--r--3party/boost/boost/serialization/string.hpp2
-rw-r--r--3party/boost/boost/serialization/strong_typedef.hpp2
-rw-r--r--3party/boost/boost/serialization/throw_exception.hpp2
-rw-r--r--3party/boost/boost/serialization/tracking.hpp12
-rw-r--r--3party/boost/boost/serialization/tracking_enum.hpp2
-rw-r--r--3party/boost/boost/serialization/traits.hpp8
-rw-r--r--3party/boost/boost/serialization/type_info_implementation.hpp8
-rw-r--r--3party/boost/boost/serialization/unique_ptr.hpp68
-rw-r--r--3party/boost/boost/serialization/unordered_collections_load_imp.hpp74
-rw-r--r--3party/boost/boost/serialization/unordered_collections_save_imp.hpp86
-rw-r--r--3party/boost/boost/serialization/unordered_map.hpp231
-rw-r--r--3party/boost/boost/serialization/unordered_set.hpp216
-rw-r--r--3party/boost/boost/serialization/utility.hpp4
-rw-r--r--3party/boost/boost/serialization/valarray.hpp2
-rw-r--r--3party/boost/boost/serialization/variant.hpp16
-rw-r--r--3party/boost/boost/serialization/vector.hpp14
-rw-r--r--3party/boost/boost/serialization/version.hpp6
-rw-r--r--3party/boost/boost/serialization/void_cast.hpp12
-rw-r--r--3party/boost/boost/serialization/void_cast_fwd.hpp2
-rw-r--r--3party/boost/boost/serialization/weak_ptr.hpp43
-rw-r--r--3party/boost/boost/serialization/wrapper.hpp2
-rw-r--r--3party/boost/boost/signals/detail/named_slot_map.hpp3
-rw-r--r--3party/boost/boost/signals/detail/signal_base.hpp2
-rw-r--r--3party/boost/boost/signals/detail/signals_common.hpp18
-rw-r--r--3party/boost/boost/signals/signal_template.hpp9
-rw-r--r--3party/boost/boost/signals2/connection.hpp51
-rw-r--r--3party/boost/boost/signals2/detail/auto_buffer.hpp2
-rw-r--r--3party/boost/boost/signals2/detail/lwm_nop.hpp2
-rw-r--r--3party/boost/boost/signals2/detail/lwm_pthreads.hpp14
-rw-r--r--3party/boost/boost/signals2/detail/lwm_win32_cs.hpp13
-rw-r--r--3party/boost/boost/signals2/detail/signal_template.hpp27
-rw-r--r--3party/boost/boost/signals2/detail/signals_common_macros.hpp1
-rw-r--r--3party/boost/boost/signals2/detail/slot_template.hpp12
-rw-r--r--3party/boost/boost/signals2/detail/variadic_slot_invoker.hpp9
-rw-r--r--3party/boost/boost/signals2/mutex.hpp2
-rw-r--r--3party/boost/boost/signals2/preprocessed_signal.hpp4
-rw-r--r--3party/boost/boost/signals2/signal.hpp2
-rw-r--r--3party/boost/boost/signals2/slot_base.hpp1
-rw-r--r--3party/boost/boost/signals2/variadic_slot.hpp5
-rw-r--r--3party/boost/boost/smart_ptr/allocate_shared_array.hpp275
-rw-r--r--3party/boost/boost/smart_ptr/detail/allocate_array_helper.hpp169
-rw-r--r--3party/boost/boost/smart_ptr/detail/array_allocator.hpp318
-rw-r--r--3party/boost/boost/smart_ptr/detail/array_count_impl.hpp67
-rw-r--r--3party/boost/boost/smart_ptr/detail/array_deleter.hpp124
-rw-r--r--3party/boost/boost/smart_ptr/detail/array_traits.hpp25
-rw-r--r--3party/boost/boost/smart_ptr/detail/array_utility.hpp176
-rw-r--r--3party/boost/boost/smart_ptr/detail/atomic_count.hpp95
-rw-r--r--3party/boost/boost/smart_ptr/detail/atomic_count_nt.hpp59
-rw-r--r--3party/boost/boost/smart_ptr/detail/atomic_count_pt.hpp97
-rw-r--r--3party/boost/boost/smart_ptr/detail/atomic_count_pthreads.hpp96
-rw-r--r--3party/boost/boost/smart_ptr/detail/atomic_count_spin.hpp62
-rw-r--r--3party/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp60
-rw-r--r--3party/boost/boost/smart_ptr/detail/atomic_count_win32.hpp6
-rw-r--r--3party/boost/boost/smart_ptr/detail/lwm_win32_cs.hpp11
-rw-r--r--3party/boost/boost/smart_ptr/detail/make_array_helper.hpp157
-rw-r--r--3party/boost/boost/smart_ptr/detail/shared_array_nmt.hpp151
-rw-r--r--3party/boost/boost/smart_ptr/detail/shared_count.hpp80
-rw-r--r--3party/boost/boost/smart_ptr/detail/shared_ptr_nmt.hpp182
-rw-r--r--3party/boost/boost/smart_ptr/detail/sp_counted_base.hpp5
-rw-r--r--3party/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp31
-rw-r--r--3party/boost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp137
-rw-r--r--3party/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp14
-rw-r--r--3party/boost/boost/smart_ptr/detail/sp_counted_impl.hpp19
-rw-r--r--3party/boost/boost/smart_ptr/detail/sp_if_array.hpp13
-rw-r--r--3party/boost/boost/smart_ptr/detail/sp_interlocked.hpp152
-rw-r--r--3party/boost/boost/smart_ptr/detail/spinlock.hpp11
-rw-r--r--3party/boost/boost/smart_ptr/detail/spinlock_std_atomic.hpp83
-rw-r--r--3party/boost/boost/smart_ptr/detail/spinlock_w32.hpp4
-rw-r--r--3party/boost/boost/smart_ptr/detail/up_if_array.hpp26
-rw-r--r--3party/boost/boost/smart_ptr/detail/up_if_not_array.hpp31
-rw-r--r--3party/boost/boost/smart_ptr/detail/yield_k.hpp17
-rw-r--r--3party/boost/boost/smart_ptr/intrusive_ptr.hpp12
-rw-r--r--3party/boost/boost/smart_ptr/intrusive_ref_counter.hpp187
-rw-r--r--3party/boost/boost/smart_ptr/make_shared_array.hpp249
-rw-r--r--3party/boost/boost/smart_ptr/make_shared_object.hpp145
-rw-r--r--3party/boost/boost/smart_ptr/make_unique.hpp15
-rw-r--r--3party/boost/boost/smart_ptr/make_unique_array.hpp31
-rw-r--r--3party/boost/boost/smart_ptr/make_unique_object.hpp45
-rw-r--r--3party/boost/boost/smart_ptr/shared_array.hpp14
-rw-r--r--3party/boost/boost/smart_ptr/shared_ptr.hpp15
-rw-r--r--3party/boost/boost/spirit.hpp2
-rw-r--r--3party/boost/boost/spirit/home/classic/core/composite/impl/directives.ipp164
-rw-r--r--3party/boost/boost/spirit/home/classic/core/non_terminal/grammar.hpp1
-rw-r--r--3party/boost/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp47
-rw-r--r--3party/boost/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp71
-rw-r--r--3party/boost/boost/spirit/home/classic/core/non_terminal/rule.hpp2
-rw-r--r--3party/boost/boost/spirit/home/classic/core/primitives/impl/primitives.ipp94
-rw-r--r--3party/boost/boost/spirit/home/classic/dynamic/impl/conditions.ipp7
-rw-r--r--3party/boost/boost/spirit/home/classic/dynamic/impl/switch.ipp2
-rw-r--r--3party/boost/boost/spirit/home/classic/dynamic/stored_rule.hpp6
-rw-r--r--3party/boost/boost/spirit/home/classic/iterator/impl/file_iterator.ipp4
-rw-r--r--3party/boost/boost/spirit/home/classic/meta/impl/fundamental.ipp132
-rw-r--r--3party/boost/boost/spirit/home/classic/meta/impl/parser_traits.ipp75
-rw-r--r--3party/boost/boost/spirit/home/classic/phoenix/special_ops.hpp68
-rw-r--r--3party/boost/boost/spirit/home/classic/phoenix/statements.hpp2
-rw-r--r--3party/boost/boost/spirit/home/classic/phoenix/tuples.hpp4
-rw-r--r--3party/boost/boost/spirit/home/classic/tree/common.hpp3
-rw-r--r--3party/boost/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp3
-rw-r--r--3party/boost/boost/spirit/home/classic/utility/grammar_def.hpp2
-rw-r--r--3party/boost/boost/spirit/home/classic/utility/impl/chset.ipp44
-rw-r--r--3party/boost/boost/spirit/home/classic/utility/impl/chset_operators.ipp74
-rw-r--r--3party/boost/boost/spirit/home/classic/utility/rule_parser.hpp306
-rw-r--r--3party/boost/boost/spirit/home/karma/detail/pass_container.hpp62
-rw-r--r--3party/boost/boost/spirit/home/karma/directive/columns.hpp1
-rw-r--r--3party/boost/boost/spirit/home/karma/directive/omit.hpp2
-rw-r--r--3party/boost/boost/spirit/home/karma/nonterminal/rule.hpp2
-rw-r--r--3party/boost/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp16
-rw-r--r--3party/boost/boost/spirit/home/karma/numeric/detail/real_utils.hpp4
-rw-r--r--3party/boost/boost/spirit/home/karma/numeric/real_policies.hpp13
-rw-r--r--3party/boost/boost/spirit/home/karma/operator/alternative.hpp2
-rw-r--r--3party/boost/boost/spirit/home/karma/operator/sequence.hpp2
-rw-r--r--3party/boost/boost/spirit/home/karma/string/symbols.hpp2
-rw-r--r--3party/boost/boost/spirit/home/lex/argument.hpp87
-rw-r--r--3party/boost/boost/spirit/home/lex/argument_phoenix.hpp3
-rw-r--r--3party/boost/boost/spirit/home/lex/lexer/lexer.hpp2
-rw-r--r--3party/boost/boost/spirit/home/lex/lexer/lexertl/generate_static.hpp3
-rw-r--r--3party/boost/boost/spirit/home/lex/lexer/lexertl/position_token.hpp8
-rw-r--r--3party/boost/boost/spirit/home/lex/lexer/lexertl/token.hpp6
-rw-r--r--3party/boost/boost/spirit/home/lex/lexer/support_functions_expression.hpp33
-rw-r--r--3party/boost/boost/spirit/home/phoenix.hpp23
-rw-r--r--3party/boost/boost/spirit/home/phoenix/algorithm.hpp14
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind.hpp16
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind/bind_function.hpp58
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind/bind_function_object.hpp40
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind/bind_member_function.hpp77
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind/bind_member_variable.hpp105
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind/detail/bind_function.hpp53
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp43
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp132
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind/detail/function_ptr.hpp99
-rw-r--r--3party/boost/boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp119
-rw-r--r--3party/boost/boost/spirit/home/phoenix/container.hpp12
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core.hpp23
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/actor.hpp194
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/argument.hpp99
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/as_actor.hpp62
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/basic_environment.hpp81
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/compose.hpp118
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/composite.hpp96
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/detail/actor.hpp65
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/detail/basic_environment.hpp38
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/detail/compose.hpp47
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/detail/composite.hpp36
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/detail/composite_eval.hpp106
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/detail/composite_info.hpp40
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/detail/function_eval.hpp142
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/is_actor.hpp29
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/limits.hpp79
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/nothing.hpp42
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/reference.hpp80
-rw-r--r--3party/boost/boost/spirit/home/phoenix/core/value.hpp158
-rw-r--r--3party/boost/boost/spirit/home/phoenix/detail/local_reference.hpp44
-rw-r--r--3party/boost/boost/spirit/home/phoenix/detail/type_deduction.hpp497
-rw-r--r--3party/boost/boost/spirit/home/phoenix/function.hpp13
-rw-r--r--3party/boost/boost/spirit/home/phoenix/function/detail/function_call.hpp42
-rw-r--r--3party/boost/boost/spirit/home/phoenix/function/function.hpp48
-rw-r--r--3party/boost/boost/spirit/home/phoenix/fusion.hpp12
-rw-r--r--3party/boost/boost/spirit/home/phoenix/fusion/at.hpp49
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object.hpp19
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/const_cast.hpp42
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/construct.hpp80
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/delete.hpp41
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/detail/construct.hpp42
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/detail/construct_eval.hpp46
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/detail/new.hpp42
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/detail/new_eval.hpp47
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/dynamic_cast.hpp42
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/new.hpp80
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/reinterpret_cast.hpp42
-rw-r--r--3party/boost/boost/spirit/home/phoenix/object/static_cast.hpp42
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator.hpp20
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/arithmetic.hpp115
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/bitwise.hpp91
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/comparison.hpp55
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/detail/binary_compose.hpp32
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/detail/binary_eval.hpp44
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/detail/io.hpp78
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_eval.hpp76
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_gen.hpp69
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_return.hpp65
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/detail/unary_compose.hpp18
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/detail/unary_eval.hpp40
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/if_else.hpp78
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/io.hpp86
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/logical.hpp43
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/member.hpp145
-rw-r--r--3party/boost/boost/spirit/home/phoenix/operator/self.hpp75
-rw-r--r--3party/boost/boost/spirit/home/phoenix/scope.hpp16
-rw-r--r--3party/boost/boost/spirit/home/phoenix/scope/detail/local_gen.hpp57
-rw-r--r--3party/boost/boost/spirit/home/phoenix/scope/detail/local_variable.hpp198
-rw-r--r--3party/boost/boost/spirit/home/phoenix/scope/dynamic.hpp193
-rw-r--r--3party/boost/boost/spirit/home/phoenix/scope/lambda.hpp176
-rw-r--r--3party/boost/boost/spirit/home/phoenix/scope/let.hpp145
-rw-r--r--3party/boost/boost/spirit/home/phoenix/scope/local_variable.hpp111
-rw-r--r--3party/boost/boost/spirit/home/phoenix/scope/scoped_environment.hpp47
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement.hpp20
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/detail/catch_all_eval.hpp101
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/detail/catch_composite.hpp62
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/detail/catch_eval.hpp79
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/detail/switch.hpp172
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/detail/switch_eval.hpp111
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/detail/switch_eval.ipp74
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/do_while.hpp62
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/for.hpp64
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/if.hpp130
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/sequence.hpp55
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/switch.hpp164
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/throw.hpp66
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/try_catch.hpp188
-rw-r--r--3party/boost/boost/spirit/home/phoenix/statement/while.hpp56
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl.hpp15
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm.hpp17
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/begin.hpp28
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/decay_array.hpp30
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/end.hpp28
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_equal_range.hpp51
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_find.hpp51
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_lower_bound.hpp51
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove.hpp34
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove_if.hpp34
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_reverse.hpp34
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_sort.hpp34
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_unique.hpp34
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_upper_bound.hpp51
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_map.hpp87
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_set.hpp83
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_list.hpp41
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_map.hpp58
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_set.hpp56
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp70
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_set_fwd.hpp66
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/iteration.hpp69
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/querying.hpp502
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/algorithm/transformation.hpp1071
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/container.hpp13
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/container/container.hpp706
-rw-r--r--3party/boost/boost/spirit/home/phoenix/stl/container/detail/container.hpp173
-rw-r--r--3party/boost/boost/spirit/home/phoenix/version.hpp18
-rw-r--r--3party/boost/boost/spirit/home/qi.hpp1
-rw-r--r--3party/boost/boost/spirit/home/qi/action/action.hpp4
-rw-r--r--3party/boost/boost/spirit/home/qi/auxiliary/attr.hpp4
-rw-r--r--3party/boost/boost/spirit/home/qi/auxiliary/attr_cast.hpp16
-rw-r--r--3party/boost/boost/spirit/home/qi/auxiliary/eps.hpp4
-rw-r--r--3party/boost/boost/spirit/home/qi/auxiliary/lazy.hpp14
-rw-r--r--3party/boost/boost/spirit/home/qi/binary/binary.hpp12
-rw-r--r--3party/boost/boost/spirit/home/qi/char/char.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/char/char_parser.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/copy.hpp31
-rw-r--r--3party/boost/boost/spirit/home/qi/detail/alternative_function.hpp16
-rw-r--r--3party/boost/boost/spirit/home/qi/detail/expect_function.hpp12
-rw-r--r--3party/boost/boost/spirit/home/qi/detail/fail_function.hpp12
-rw-r--r--3party/boost/boost/spirit/home/qi/detail/pass_container.hpp78
-rw-r--r--3party/boost/boost/spirit/home/qi/detail/pass_function.hpp12
-rw-r--r--3party/boost/boost/spirit/home/qi/detail/permute_function.hpp12
-rw-r--r--3party/boost/boost/spirit/home/qi/detail/unused_skipper.hpp23
-rw-r--r--3party/boost/boost/spirit/home/qi/directive/as.hpp12
-rw-r--r--3party/boost/boost/spirit/home/qi/directive/hold.hpp10
-rw-r--r--3party/boost/boost/spirit/home/qi/directive/lexeme.hpp24
-rw-r--r--3party/boost/boost/spirit/home/qi/directive/matches.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/directive/no_skip.hpp22
-rw-r--r--3party/boost/boost/spirit/home/qi/directive/omit.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/directive/raw.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/directive/repeat.hpp28
-rw-r--r--3party/boost/boost/spirit/home/qi/directive/skip.hpp30
-rw-r--r--3party/boost/boost/spirit/home/qi/nonterminal/debug_handler.hpp12
-rw-r--r--3party/boost/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/nonterminal/error_handler.hpp6
-rw-r--r--3party/boost/boost/spirit/home/qi/nonterminal/grammar.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/nonterminal/rule.hpp29
-rw-r--r--3party/boost/boost/spirit/home/qi/nonterminal/success_handler.hpp6
-rw-r--r--3party/boost/boost/spirit/home/qi/numeric/bool.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/numeric/bool_policies.hpp16
-rw-r--r--3party/boost/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp3
-rw-r--r--3party/boost/boost/spirit/home/qi/numeric/int.hpp14
-rw-r--r--3party/boost/boost/spirit/home/qi/numeric/numeric_utils.hpp22
-rw-r--r--3party/boost/boost/spirit/home/qi/numeric/real.hpp14
-rw-r--r--3party/boost/boost/spirit/home/qi/numeric/real_policies.hpp20
-rw-r--r--3party/boost/boost/spirit/home/qi/numeric/uint.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/alternative.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/and_predicate.hpp4
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/difference.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/expect.hpp4
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/kleene.hpp10
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/list.hpp10
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/not_predicate.hpp4
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/optional.hpp20
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/permutation.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/plus.hpp10
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/sequence_base.hpp14
-rw-r--r--3party/boost/boost/spirit/home/qi/operator/sequential_or.hpp9
-rw-r--r--3party/boost/boost/spirit/home/qi/parse_attr.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/reference.hpp4
-rw-r--r--3party/boost/boost/spirit/home/qi/stream/detail/iterator_source.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/stream/stream.hpp8
-rw-r--r--3party/boost/boost/spirit/home/qi/string/detail/tst.hpp4
-rw-r--r--3party/boost/boost/spirit/home/qi/string/lit.hpp12
-rw-r--r--3party/boost/boost/spirit/home/qi/string/symbols.hpp14
-rw-r--r--3party/boost/boost/spirit/home/qi/string/tst_map.hpp20
-rw-r--r--3party/boost/boost/spirit/home/support/action_dispatch.hpp8
-rw-r--r--3party/boost/boost/spirit/home/support/argument_expression.hpp26
-rw-r--r--3party/boost/boost/spirit/home/support/attributes.hpp24
-rw-r--r--3party/boost/boost/spirit/home/support/auto.hpp35
-rw-r--r--3party/boost/boost/spirit/home/support/char_encoding/ascii.hpp40
-rw-r--r--3party/boost/boost/spirit/home/support/char_encoding/iso8859_1.hpp40
-rw-r--r--3party/boost/boost/spirit/home/support/char_encoding/standard.hpp47
-rw-r--r--3party/boost/boost/spirit/home/support/char_encoding/standard_wide.hpp4
-rw-r--r--3party/boost/boost/spirit/home/support/char_encoding/unicode.hpp2
-rw-r--r--3party/boost/boost/spirit/home/support/char_encoding/unicode/create_tables.cpp93
-rw-r--r--3party/boost/boost/spirit/home/support/char_encoding/unicode/query.hpp2
-rw-r--r--3party/boost/boost/spirit/home/support/char_set/range.hpp2
-rw-r--r--3party/boost/boost/spirit/home/support/char_set/range_run_impl.hpp4
-rw-r--r--3party/boost/boost/spirit/home/support/container.hpp16
-rw-r--r--3party/boost/boost/spirit/home/support/context.hpp6
-rw-r--r--3party/boost/boost/spirit/home/support/detail/as_variant.hpp10
-rw-r--r--3party/boost/boost/spirit/home/support/detail/endian.hpp6
-rw-r--r--3party/boost/boost/spirit/home/support/detail/hold_any.hpp28
-rw-r--r--3party/boost/boost/spirit/home/support/detail/is_spirit_tag.hpp4
-rw-r--r--3party/boost/boost/spirit/home/support/detail/lexer/debug.hpp4
-rw-r--r--3party/boost/boost/spirit/home/support/detail/lexer/file_input.hpp8
-rw-r--r--3party/boost/boost/spirit/home/support/detail/lexer/generate_re2c.hpp4
-rw-r--r--3party/boost/boost/spirit/home/support/detail/lexer/generator.hpp21
-rw-r--r--3party/boost/boost/spirit/home/support/detail/lexer/input.hpp8
-rw-r--r--3party/boost/boost/spirit/home/support/detail/lexer/size_t.hpp8
-rw-r--r--3party/boost/boost/spirit/home/support/detail/lexer/state_machine.hpp10
-rw-r--r--3party/boost/boost/spirit/home/support/detail/lexer/string_token.hpp10
-rw-r--r--3party/boost/boost/spirit/home/support/detail/make_cons.hpp5
-rw-r--r--3party/boost/boost/spirit/home/support/detail/scoped_enum_emulation.hpp4
-rw-r--r--3party/boost/boost/spirit/home/support/detail/what_function.hpp4
-rw-r--r--3party/boost/boost/spirit/home/support/extended_variant.hpp45
-rw-r--r--3party/boost/boost/spirit/home/support/info.hpp42
-rw-r--r--3party/boost/boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp4
-rw-r--r--3party/boost/boost/spirit/home/support/iterators/detail/combine_policies.hpp38
-rw-r--r--3party/boost/boost/spirit/home/support/iterators/detail/multi_pass.hpp23
-rw-r--r--3party/boost/boost/spirit/home/support/iterators/multi_pass.hpp7
-rw-r--r--3party/boost/boost/spirit/home/support/limits.hpp13
-rw-r--r--3party/boost/boost/spirit/home/support/make_component.hpp29
-rw-r--r--3party/boost/boost/spirit/home/support/nonterminal/expand_arg.hpp4
-rw-r--r--3party/boost/boost/spirit/home/support/numeric_traits.hpp9
-rw-r--r--3party/boost/boost/spirit/home/support/terminal.hpp64
-rw-r--r--3party/boost/boost/spirit/home/support/terminal_expression.hpp63
-rw-r--r--3party/boost/boost/spirit/home/support/utree/detail/utree_detail2.hpp54
-rw-r--r--3party/boost/boost/spirit/home/x3.hpp27
-rw-r--r--3party/boost/boost/spirit/home/x3/auxiliary.hpp24
-rw-r--r--3party/boost/boost/spirit/home/x3/auxiliary/any_parser.hpp155
-rw-r--r--3party/boost/boost/spirit/home/x3/auxiliary/attr.hpp135
-rw-r--r--3party/boost/boost/spirit/home/x3/auxiliary/eoi.hpp45
-rw-r--r--3party/boost/boost/spirit/home/x3/auxiliary/eol.hpp59
-rw-r--r--3party/boost/boost/spirit/home/x3/auxiliary/eps.hpp92
-rw-r--r--3party/boost/boost/spirit/home/x3/auxiliary/guard.hpp73
-rw-r--r--3party/boost/boost/spirit/home/x3/char.hpp23
-rw-r--r--3party/boost/boost/spirit/home/x3/char/any_char.hpp41
-rw-r--r--3party/boost/boost/spirit/home/x3/char/char.hpp88
-rw-r--r--3party/boost/boost/spirit/home/x3/char/char_class.hpp148
-rw-r--r--3party/boost/boost/spirit/home/x3/char/char_parser.hpp44
-rw-r--r--3party/boost/boost/spirit/home/x3/char/detail/cast_char.hpp58
-rw-r--r--3party/boost/boost/spirit/home/x3/char/literal_char.hpp54
-rw-r--r--3party/boost/boost/spirit/home/x3/char/negated_char_parser.hpp65
-rw-r--r--3party/boost/boost/spirit/home/x3/char/unicode.hpp617
-rw-r--r--3party/boost/boost/spirit/home/x3/core.hpp20
-rw-r--r--3party/boost/boost/spirit/home/x3/core/action.hpp120
-rw-r--r--3party/boost/boost/spirit/home/x3/core/call.hpp79
-rw-r--r--3party/boost/boost/spirit/home/x3/core/detail/parse_into_container.hpp248
-rw-r--r--3party/boost/boost/spirit/home/x3/core/parse.hpp190
-rw-r--r--3party/boost/boost/spirit/home/x3/core/parser.hpp239
-rw-r--r--3party/boost/boost/spirit/home/x3/core/proxy.hpp52
-rw-r--r--3party/boost/boost/spirit/home/x3/core/skip_over.hpp104
-rw-r--r--3party/boost/boost/spirit/home/x3/directive.hpp28
-rw-r--r--3party/boost/boost/spirit/home/x3/directive/expect.hpp80
-rw-r--r--3party/boost/boost/spirit/home/x3/directive/lexeme.hpp84
-rw-r--r--3party/boost/boost/spirit/home/x3/directive/no_skip.hpp82
-rw-r--r--3party/boost/boost/spirit/home/x3/directive/omit.hpp55
-rw-r--r--3party/boost/boost/spirit/home/x3/directive/raw.hpp70
-rw-r--r--3party/boost/boost/spirit/home/x3/directive/skip.hpp124
-rw-r--r--3party/boost/boost/spirit/home/x3/directive/with.hpp107
-rw-r--r--3party/boost/boost/spirit/home/x3/extensions.hpp18
-rw-r--r--3party/boost/boost/spirit/home/x3/extensions/seek.hpp70
-rw-r--r--3party/boost/boost/spirit/home/x3/nonterminal.hpp19
-rw-r--r--3party/boost/boost/spirit/home/x3/nonterminal/debug_handler_state.hpp24
-rw-r--r--3party/boost/boost/spirit/home/x3/nonterminal/detail/rule.hpp385
-rw-r--r--3party/boost/boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp108
-rw-r--r--3party/boost/boost/spirit/home/x3/nonterminal/rule.hpp186
-rw-r--r--3party/boost/boost/spirit/home/x3/nonterminal/simple_trace.hpp150
-rw-r--r--3party/boost/boost/spirit/home/x3/numeric.hpp19
-rw-r--r--3party/boost/boost/spirit/home/x3/numeric/bool.hpp106
-rw-r--r--3party/boost/boost/spirit/home/x3/numeric/bool_policies.hpp52
-rw-r--r--3party/boost/boost/spirit/home/x3/numeric/int.hpp66
-rw-r--r--3party/boost/boost/spirit/home/x3/numeric/real.hpp62
-rw-r--r--3party/boost/boost/spirit/home/x3/numeric/real_policies.hpp186
-rw-r--r--3party/boost/boost/spirit/home/x3/numeric/uint.hpp79
-rw-r--r--3party/boost/boost/spirit/home/x3/operator.hpp26
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/alternative.hpp68
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/and_predicate.hpp47
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/detail/alternative.hpp317
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/detail/sequence.hpp501
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/difference.hpp75
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/kleene.hpp59
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/list.hpp73
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/not_predicate.hpp47
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/optional.hpp86
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/plus.hpp63
-rw-r--r--3party/boost/boost/spirit/home/x3/operator/sequence.hpp79
-rw-r--r--3party/boost/boost/spirit/home/x3/string.hpp17
-rw-r--r--3party/boost/boost/spirit/home/x3/string/detail/string_parse.hpp89
-rw-r--r--3party/boost/boost/spirit/home/x3/string/detail/tst.hpp213
-rw-r--r--3party/boost/boost/spirit/home/x3/string/literal_string.hpp124
-rw-r--r--3party/boost/boost/spirit/home/x3/string/symbols.hpp358
-rw-r--r--3party/boost/boost/spirit/home/x3/string/tst.hpp137
-rw-r--r--3party/boost/boost/spirit/home/x3/string/tst_map.hpp216
-rw-r--r--3party/boost/boost/spirit/home/x3/support/ast/position_tagged.hpp96
-rw-r--r--3party/boost/boost/spirit/home/x3/support/ast/variant.hpp249
-rw-r--r--3party/boost/boost/spirit/home/x3/support/context.hpp135
-rw-r--r--3party/boost/boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp512
-rw-r--r--3party/boost/boost/spirit/home/x3/support/numeric_utils/extract_int.hpp147
-rw-r--r--3party/boost/boost/spirit/home/x3/support/numeric_utils/extract_real.hpp271
-rw-r--r--3party/boost/boost/spirit/home/x3/support/numeric_utils/pow10.hpp116
-rw-r--r--3party/boost/boost/spirit/home/x3/support/numeric_utils/sign.hpp48
-rw-r--r--3party/boost/boost/spirit/home/x3/support/subcontext.hpp89
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/attribute_category.hpp82
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/attribute_of.hpp59
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/attribute_type.hpp30
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/container_traits.hpp333
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/handles_container.hpp31
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/has_attribute.hpp63
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/is_parser.hpp37
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/is_substitute.hpp164
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/is_variant.hpp45
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/make_attribute.hpp86
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/move_to.hpp211
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/numeric_traits.hpp128
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/optional_traits.hpp78
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/print_attribute.hpp150
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/print_token.hpp79
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/string_traits.hpp291
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/transform_attribute.hpp48
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/tuple_traits.hpp52
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/value_traits.hpp30
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/variant_find_substitute.hpp56
-rw-r--r--3party/boost/boost/spirit/home/x3/support/traits/variant_has_substitute.hpp56
-rw-r--r--3party/boost/boost/spirit/home/x3/support/unused.hpp93
-rw-r--r--3party/boost/boost/spirit/home/x3/support/utility/detail/testing.hpp16
-rw-r--r--3party/boost/boost/spirit/home/x3/support/utility/error_reporting.hpp241
-rw-r--r--3party/boost/boost/spirit/home/x3/support/utility/integer_sequence.hpp94
-rw-r--r--3party/boost/boost/spirit/home/x3/support/utility/is_callable.hpp45
-rw-r--r--3party/boost/boost/spirit/home/x3/support/utility/lambda_visitor.hpp49
-rw-r--r--3party/boost/boost/spirit/home/x3/support/utility/sfinae.hpp29
-rw-r--r--3party/boost/boost/spirit/home/x3/support/utility/testing.hpp69
-rw-r--r--3party/boost/boost/spirit/home/x3/support/utility/unrefcv.hpp29
-rw-r--r--3party/boost/boost/spirit/home/x3/support/utility/utf8.hpp72
-rw-r--r--3party/boost/boost/spirit/include/phoenix.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_algorithm.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_bind.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_container.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_core.hpp7
-rw-r--r--3party/boost/boost/spirit/include/phoenix_function.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_fusion.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_limits.hpp4
-rw-r--r--3party/boost/boost/spirit/include/phoenix_object.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_operator.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_scope.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_statement.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_stl.hpp6
-rw-r--r--3party/boost/boost/spirit/include/phoenix_version.hpp2
-rw-r--r--3party/boost/boost/spirit/include/qi_copy.hpp17
-rw-r--r--3party/boost/boost/spirit/include/support_auto.hpp17
-rw-r--r--3party/boost/boost/spirit/repository/home/karma/nonterminal/subrule.hpp4
-rw-r--r--3party/boost/boost/spirit/repository/home/qi/directive/kwd.hpp158
-rw-r--r--3party/boost/boost/spirit/repository/home/qi/operator/detail/keywords.hpp121
-rw-r--r--3party/boost/boost/spirit/repository/home/qi/operator/keywords.hpp160
-rw-r--r--3party/boost/boost/statechart/custom_reaction.hpp2
-rw-r--r--3party/boost/boost/statechart/detail/reaction_dispatcher.hpp2
-rw-r--r--3party/boost/boost/statechart/event.hpp2
-rw-r--r--3party/boost/boost/statechart/simple_state.hpp2
-rw-r--r--3party/boost/boost/statechart/state_machine.hpp2
-rw-r--r--3party/boost/boost/strong_typedef.hpp2
-rw-r--r--3party/boost/boost/swap.hpp17
-rw-r--r--3party/boost/boost/system/config.hpp1
-rw-r--r--3party/boost/boost/system/detail/error_code.ipp467
-rw-r--r--3party/boost/boost/system/detail/local_free_on_destruction.hpp40
-rw-r--r--3party/boost/boost/system/error_code.hpp3
-rw-r--r--3party/boost/boost/system/windows_error.hpp8
-rw-r--r--3party/boost/boost/test/auto_unit_test.hpp2
-rw-r--r--3party/boost/boost/test/debug.hpp2
-rw-r--r--3party/boost/boost/test/debug_config.hpp2
-rw-r--r--3party/boost/boost/test/detail/config.hpp2
-rw-r--r--3party/boost/boost/test/detail/enable_warnings.hpp2
-rw-r--r--3party/boost/boost/test/detail/fwd_decl.hpp2
-rw-r--r--3party/boost/boost/test/detail/global_typedef.hpp2
-rw-r--r--3party/boost/boost/test/detail/log_level.hpp2
-rw-r--r--3party/boost/boost/test/detail/suppress_warnings.hpp2
-rw-r--r--3party/boost/boost/test/detail/unit_test_parameters.hpp2
-rw-r--r--3party/boost/boost/test/detail/workaround.hpp2
-rw-r--r--3party/boost/boost/test/exception_safety.hpp2
-rw-r--r--3party/boost/boost/test/execution_monitor.hpp2
-rw-r--r--3party/boost/boost/test/floating_point_comparison.hpp2
-rw-r--r--3party/boost/boost/test/framework.hpp2
-rw-r--r--3party/boost/boost/test/impl/compiler_log_formatter.ipp2
-rw-r--r--3party/boost/boost/test/impl/cpp_main.ipp2
-rw-r--r--3party/boost/boost/test/impl/debug.ipp2
-rw-r--r--3party/boost/boost/test/impl/exception_safety.ipp2
-rw-r--r--3party/boost/boost/test/impl/execution_monitor.ipp2
-rw-r--r--3party/boost/boost/test/impl/framework.ipp2
-rw-r--r--3party/boost/boost/test/impl/interaction_based.ipp2
-rw-r--r--3party/boost/boost/test/impl/logged_expectations.ipp2
-rw-r--r--3party/boost/boost/test/impl/plain_report_formatter.ipp2
-rw-r--r--3party/boost/boost/test/impl/progress_monitor.ipp2
-rw-r--r--3party/boost/boost/test/impl/results_collector.ipp2
-rw-r--r--3party/boost/boost/test/impl/results_reporter.ipp2
-rw-r--r--3party/boost/boost/test/impl/test_main.ipp2
-rw-r--r--3party/boost/boost/test/impl/test_tools.ipp2
-rw-r--r--3party/boost/boost/test/impl/unit_test_log.ipp2
-rw-r--r--3party/boost/boost/test/impl/unit_test_main.ipp2
-rw-r--r--3party/boost/boost/test/impl/unit_test_monitor.ipp2
-rw-r--r--3party/boost/boost/test/impl/unit_test_parameters.ipp2
-rw-r--r--3party/boost/boost/test/impl/unit_test_suite.ipp2
-rw-r--r--3party/boost/boost/test/impl/xml_log_formatter.ipp2
-rw-r--r--3party/boost/boost/test/impl/xml_report_formatter.ipp2
-rw-r--r--3party/boost/boost/test/included/prg_exec_monitor.hpp2
-rw-r--r--3party/boost/boost/test/included/test_exec_monitor.hpp2
-rw-r--r--3party/boost/boost/test/included/unit_test.hpp2
-rw-r--r--3party/boost/boost/test/interaction_based.hpp2
-rw-r--r--3party/boost/boost/test/logged_expectations.hpp2
-rw-r--r--3party/boost/boost/test/minimal.hpp2
-rw-r--r--3party/boost/boost/test/mock_object.hpp2
-rw-r--r--3party/boost/boost/test/output/compiler_log_formatter.hpp2
-rw-r--r--3party/boost/boost/test/output/plain_report_formatter.hpp2
-rw-r--r--3party/boost/boost/test/output/xml_log_formatter.hpp2
-rw-r--r--3party/boost/boost/test/output/xml_report_formatter.hpp2
-rw-r--r--3party/boost/boost/test/output_test_stream.hpp2
-rw-r--r--3party/boost/boost/test/parameterized_test.hpp2
-rw-r--r--3party/boost/boost/test/predicate_result.hpp2
-rw-r--r--3party/boost/boost/test/prg_exec_monitor.hpp2
-rw-r--r--3party/boost/boost/test/progress_monitor.hpp2
-rw-r--r--3party/boost/boost/test/results_collector.hpp2
-rw-r--r--3party/boost/boost/test/results_reporter.hpp2
-rw-r--r--3party/boost/boost/test/test_case_template.hpp2
-rw-r--r--3party/boost/boost/test/test_exec_monitor.hpp2
-rw-r--r--3party/boost/boost/test/test_observer.hpp2
-rw-r--r--3party/boost/boost/test/test_tools.hpp2
-rw-r--r--3party/boost/boost/test/unit_test.hpp2
-rw-r--r--3party/boost/boost/test/unit_test_log.hpp2
-rw-r--r--3party/boost/boost/test/unit_test_log_formatter.hpp2
-rw-r--r--3party/boost/boost/test/unit_test_monitor.hpp2
-rw-r--r--3party/boost/boost/test/unit_test_suite.hpp2
-rw-r--r--3party/boost/boost/test/unit_test_suite_impl.hpp2
-rw-r--r--3party/boost/boost/test/utils/algorithm.hpp2
-rw-r--r--3party/boost/boost/test/utils/assign_op.hpp2
-rw-r--r--3party/boost/boost/test/utils/basic_cstring/basic_cstring.hpp2
-rw-r--r--3party/boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp2
-rw-r--r--3party/boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp2
-rw-r--r--3party/boost/boost/test/utils/basic_cstring/compare.hpp2
-rw-r--r--3party/boost/boost/test/utils/basic_cstring/io.hpp2
-rw-r--r--3party/boost/boost/test/utils/callback.hpp2
-rw-r--r--3party/boost/boost/test/utils/class_properties.hpp2
-rw-r--r--3party/boost/boost/test/utils/custom_manip.hpp2
-rw-r--r--3party/boost/boost/test/utils/fixed_mapping.hpp2
-rw-r--r--3party/boost/boost/test/utils/foreach.hpp2
-rw-r--r--3party/boost/boost/test/utils/iterator/ifstream_line_iterator.hpp2
-rw-r--r--3party/boost/boost/test/utils/iterator/input_iterator_facade.hpp2
-rw-r--r--3party/boost/boost/test/utils/iterator/istream_line_iterator.hpp2
-rw-r--r--3party/boost/boost/test/utils/iterator/token_iterator.hpp2
-rw-r--r--3party/boost/boost/test/utils/lazy_ostream.hpp2
-rw-r--r--3party/boost/boost/test/utils/named_params.hpp2
-rw-r--r--3party/boost/boost/test/utils/nullstream.hpp2
-rw-r--r--3party/boost/boost/test/utils/rtti.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/argument.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/argument_factory.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/argv_traverser.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/argv_traverser.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/argv_traverser.ipp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/basic_parameter.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/char_parameter.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/char_parameter.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/char_parameter.ipp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/fwd.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/id_policy.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/id_policy.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/id_policy.ipp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/iface/id_policy.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/modifier.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/named_parameter.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/named_parameter.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/named_parameter.ipp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/parameter.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/parser.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/parser.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/parser.ipp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/positional_parameter.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/typed_parameter.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/validation.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/validation.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/validation.ipp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/value_generator.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/cla/value_handler.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/config.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/configuration.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/env/environment.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/env/environment.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/env/environment.ipp2
-rw-r--r--3party/boost/boost/test/utils/runtime/env/fwd.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/env/modifier.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/env/variable.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/file/config_file.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/file/config_file.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/file/config_file_iterator.cpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/file/config_file_iterator.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/fwd.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/interpret_argument_value.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/parameter.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/trace.hpp2
-rw-r--r--3party/boost/boost/test/utils/runtime/validation.hpp2
-rw-r--r--3party/boost/boost/test/utils/trivial_singleton.hpp2
-rw-r--r--3party/boost/boost/test/utils/wrap_stringstream.hpp2
-rw-r--r--3party/boost/boost/test/utils/xml_printer.hpp2
-rw-r--r--3party/boost/boost/thread/barrier.hpp250
-rw-r--r--3party/boost/boost/thread/caller_context.hpp56
-rw-r--r--3party/boost/boost/thread/completion_latch.hpp15
-rw-r--r--3party/boost/boost/thread/csbl/deque.hpp37
-rw-r--r--3party/boost/boost/thread/csbl/functional.hpp49
-rw-r--r--3party/boost/boost/thread/csbl/list.hpp35
-rw-r--r--3party/boost/boost/thread/csbl/memory.hpp61
-rw-r--r--3party/boost/boost/thread/csbl/memory/allocator_arg.hpp41
-rw-r--r--3party/boost/boost/thread/csbl/memory/allocator_traits.hpp35
-rw-r--r--3party/boost/boost/thread/csbl/memory/config.hpp16
-rw-r--r--3party/boost/boost/thread/csbl/memory/default_delete.hpp125
-rw-r--r--3party/boost/boost/thread/csbl/memory/pointer_traits.hpp35
-rw-r--r--3party/boost/boost/thread/csbl/memory/scoped_allocator.hpp35
-rw-r--r--3party/boost/boost/thread/csbl/memory/unique_ptr.hpp106
-rw-r--r--3party/boost/boost/thread/csbl/tuple.hpp45
-rw-r--r--3party/boost/boost/thread/csbl/vector.hpp35
-rw-r--r--3party/boost/boost/thread/cv_status.hpp2
-rw-r--r--3party/boost/boost/thread/detail/async_func.hpp571
-rw-r--r--3party/boost/boost/thread/detail/config.hpp31
-rw-r--r--3party/boost/boost/thread/detail/counter.hpp21
-rw-r--r--3party/boost/boost/thread/detail/delete.hpp1
-rw-r--r--3party/boost/boost/thread/detail/function_wrapper.hpp93
-rw-r--r--3party/boost/boost/thread/detail/invoke.hpp495
-rw-r--r--3party/boost/boost/thread/detail/invoker.hpp738
-rw-r--r--3party/boost/boost/thread/detail/is_convertible.hpp7
-rw-r--r--3party/boost/boost/thread/detail/memory.hpp130
-rw-r--r--3party/boost/boost/thread/detail/move.hpp58
-rw-r--r--3party/boost/boost/thread/detail/nullary_function.hpp213
-rw-r--r--3party/boost/boost/thread/detail/thread.hpp43
-rw-r--r--3party/boost/boost/thread/detail/thread_group.hpp4
-rw-r--r--3party/boost/boost/thread/detail/variadic_footer.hpp10
-rw-r--r--3party/boost/boost/thread/detail/variadic_header.hpp19
-rw-r--r--3party/boost/boost/thread/detail/work.hpp23
-rw-r--r--3party/boost/boost/thread/exceptional_ptr.hpp44
-rw-r--r--3party/boost/boost/thread/exceptions.hpp8
-rw-r--r--3party/boost/boost/thread/executor.hpp15
-rw-r--r--3party/boost/boost/thread/executors/basic_thread_pool.hpp326
-rw-r--r--3party/boost/boost/thread/executors/executor.hpp129
-rw-r--r--3party/boost/boost/thread/executors/executor_adaptor.hpp148
-rw-r--r--3party/boost/boost/thread/executors/inline_executor.hpp131
-rw-r--r--3party/boost/boost/thread/executors/loop_executor.hpp209
-rw-r--r--3party/boost/boost/thread/executors/serial_executor.hpp213
-rw-r--r--3party/boost/boost/thread/executors/thread_executor.hpp136
-rw-r--r--3party/boost/boost/thread/executors/work.hpp21
-rw-r--r--3party/boost/boost/thread/externally_locked.hpp4
-rw-r--r--3party/boost/boost/thread/future.hpp3155
-rw-r--r--3party/boost/boost/thread/future_error_code.hpp8
-rw-r--r--3party/boost/boost/thread/latch.hpp51
-rw-r--r--3party/boost/boost/thread/lock_types.hpp86
-rw-r--r--3party/boost/boost/thread/lockable_adapter.hpp56
-rw-r--r--3party/boost/boost/thread/ostream_buffer.hpp45
-rw-r--r--3party/boost/boost/thread/pthread/condition_variable.hpp16
-rw-r--r--3party/boost/boost/thread/pthread/condition_variable_fwd.hpp18
-rw-r--r--3party/boost/boost/thread/pthread/mutex.hpp5
-rw-r--r--3party/boost/boost/thread/pthread/once.hpp8
-rw-r--r--3party/boost/boost/thread/pthread/once_atomic.hpp4
-rw-r--r--3party/boost/boost/thread/pthread/thread_data.hpp38
-rw-r--r--3party/boost/boost/thread/scoped_thread.hpp26
-rw-r--r--3party/boost/boost/thread/sync_bounded_queue.hpp471
-rw-r--r--3party/boost/boost/thread/sync_queue.hpp451
-rw-r--r--3party/boost/boost/thread/synchronized_value.hpp89
-rw-r--r--3party/boost/boost/thread/testable_mutex.hpp4
-rw-r--r--3party/boost/boost/thread/thread_pool.hpp15
-rw-r--r--3party/boost/boost/thread/user_scheduler.hpp202
-rwxr-xr-x3party/boost/boost/thread/v2/shared_mutex.hpp12
-rw-r--r--3party/boost/boost/thread/v2/thread.hpp59
-rw-r--r--3party/boost/boost/thread/win32/condition_variable.hpp41
-rw-r--r--3party/boost/boost/thread/win32/mfc_thread_init.hpp27
-rw-r--r--3party/boost/boost/thread/win32/once.hpp6
-rw-r--r--3party/boost/boost/thread/win32/thread_data.hpp41
-rw-r--r--3party/boost/boost/thread/win32/thread_heap_alloc.hpp2
-rw-r--r--3party/boost/boost/thread/win32/thread_primitives.hpp114
-rw-r--r--3party/boost/boost/thread/with_lock_guard.hpp233
-rw-r--r--3party/boost/boost/throw_exception.hpp12
-rw-r--r--3party/boost/boost/timer/timer.hpp18
-rw-r--r--3party/boost/boost/token_functions.hpp15
-rw-r--r--3party/boost/boost/token_iterator.hpp16
-rw-r--r--3party/boost/boost/tr1/array.hpp2
-rw-r--r--3party/boost/boost/tr1/complex.hpp2
-rw-r--r--3party/boost/boost/tr1/detail/config.hpp8
-rw-r--r--3party/boost/boost/tr1/detail/config_all.hpp21
-rw-r--r--3party/boost/boost/tr1/functional.hpp4
-rw-r--r--3party/boost/boost/tr1/utility.hpp2
-rw-r--r--3party/boost/boost/tti/detail/dcomp_mem_fun.hpp37
-rw-r--r--3party/boost/boost/tti/detail/dcomp_static_mem_fun.hpp36
-rw-r--r--3party/boost/boost/tti/detail/ddata.hpp31
-rw-r--r--3party/boost/boost/tti/detail/dfunction.hpp31
-rw-r--r--3party/boost/boost/tti/detail/dmem_data.hpp82
-rw-r--r--3party/boost/boost/tti/detail/dmem_fun.hpp61
-rw-r--r--3party/boost/boost/tti/detail/dmem_type.hpp22
-rw-r--r--3party/boost/boost/tti/detail/dstatic_mem_data.hpp49
-rw-r--r--3party/boost/boost/tti/detail/dstatic_mem_fun.hpp49
-rw-r--r--3party/boost/boost/tti/detail/dtemplate.hpp23
-rw-r--r--3party/boost/boost/tti/detail/dtemplate_params.hpp25
-rw-r--r--3party/boost/boost/tti/detail/dtype.hpp45
-rw-r--r--3party/boost/boost/tti/detail/dvm_template_params.hpp22
-rw-r--r--3party/boost/boost/tti/has_data.hpp9
-rw-r--r--3party/boost/boost/tti/has_function.hpp7
-rw-r--r--3party/boost/boost/tti/has_member_data.hpp20
-rw-r--r--3party/boost/boost/tti/has_member_function.hpp7
-rw-r--r--3party/boost/boost/tti/has_static_member_data.hpp6
-rw-r--r--3party/boost/boost/tti/has_static_member_function.hpp9
-rw-r--r--3party/boost/boost/tti/has_type.hpp13
-rw-r--r--3party/boost/boost/tuple/detail/tuple_basic.hpp19
-rw-r--r--3party/boost/boost/tuple/detail/tuple_basic_no_partial_spec.hpp865
-rw-r--r--3party/boost/boost/tuple/tuple.hpp25
-rw-r--r--3party/boost/boost/tuple/tuple_io.hpp259
-rw-r--r--3party/boost/boost/type_erasure/any.hpp6
-rw-r--r--3party/boost/boost/type_erasure/any_cast.hpp12
-rw-r--r--3party/boost/boost/type_erasure/binding.hpp2
-rw-r--r--3party/boost/boost/type_erasure/binding_of.hpp2
-rw-r--r--3party/boost/boost/type_erasure/builtin.hpp2
-rw-r--r--3party/boost/boost/type_erasure/call.hpp2
-rw-r--r--3party/boost/boost/type_erasure/callable.hpp2
-rw-r--r--3party/boost/boost/type_erasure/check_match.hpp2
-rw-r--r--3party/boost/boost/type_erasure/concept_interface.hpp2
-rw-r--r--3party/boost/boost/type_erasure/concept_of.hpp2
-rw-r--r--3party/boost/boost/type_erasure/config.hpp2
-rw-r--r--3party/boost/boost/type_erasure/constructible.hpp2
-rw-r--r--3party/boost/boost/type_erasure/deduced.hpp2
-rw-r--r--3party/boost/boost/type_erasure/derived.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/access.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/adapt_to_vtable.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/any_base.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/check_call.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/check_map.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/const.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/construct.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/extract_concept.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/get_placeholders.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/get_signature.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/instantiate.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/macro.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/normalize.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/normalize_deduced.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/null.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/rebind_placeholders.hpp2
-rw-r--r--3party/boost/boost/type_erasure/detail/storage.hpp23
-rw-r--r--3party/boost/boost/type_erasure/detail/vtable.hpp4
-rw-r--r--3party/boost/boost/type_erasure/exception.hpp2
-rw-r--r--3party/boost/boost/type_erasure/free.hpp2
-rw-r--r--3party/boost/boost/type_erasure/is_empty.hpp2
-rw-r--r--3party/boost/boost/type_erasure/is_placeholder.hpp2
-rw-r--r--3party/boost/boost/type_erasure/is_subconcept.hpp2
-rw-r--r--3party/boost/boost/type_erasure/iterator.hpp2
-rw-r--r--3party/boost/boost/type_erasure/member.hpp2
-rw-r--r--3party/boost/boost/type_erasure/operators.hpp2
-rw-r--r--3party/boost/boost/type_erasure/param.hpp2
-rw-r--r--3party/boost/boost/type_erasure/placeholder.hpp2
-rw-r--r--3party/boost/boost/type_erasure/placeholder_of.hpp2
-rw-r--r--3party/boost/boost/type_erasure/rebind_any.hpp2
-rw-r--r--3party/boost/boost/type_erasure/relaxed.hpp2
-rw-r--r--3party/boost/boost/type_erasure/require_match.hpp2
-rw-r--r--3party/boost/boost/type_erasure/same_type.hpp2
-rw-r--r--3party/boost/boost/type_erasure/static_binding.hpp2
-rw-r--r--3party/boost/boost/type_erasure/tuple.hpp2
-rw-r--r--3party/boost/boost/type_erasure/typeid_of.hpp2
-rw-r--r--3party/boost/boost/type_index.hpp252
-rw-r--r--3party/boost/boost/type_index/ctti_type_index.hpp179
-rw-r--r--3party/boost/boost/type_index/detail/compile_time_type_info.hpp143
-rw-r--r--3party/boost/boost/type_index/detail/ctti_register_class.hpp40
-rw-r--r--3party/boost/boost/type_index/detail/stl_register_class.hpp40
-rw-r--r--3party/boost/boost/type_index/stl_type_index.hpp300
-rw-r--r--3party/boost/boost/type_index/type_index_facade.hpp296
-rw-r--r--3party/boost/boost/type_traits.hpp1
-rw-r--r--3party/boost/boost/type_traits/add_const.hpp2
-rw-r--r--3party/boost/boost/type_traits/add_cv.hpp2
-rw-r--r--3party/boost/boost/type_traits/add_reference.hpp35
-rw-r--r--3party/boost/boost/type_traits/add_rvalue_reference.hpp2
-rw-r--r--3party/boost/boost/type_traits/add_volatile.hpp2
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/type_traits/aligned_storage.hpp0
-rw-r--r--3party/boost/boost/type_traits/alignment_of.hpp2
-rw-r--r--3party/boost/boost/type_traits/broken_compiler_spec.hpp105
-rw-r--r--3party/boost/boost/type_traits/common_type.hpp2
-rw-r--r--3party/boost/boost/type_traits/config.hpp16
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/type_traits/decay.hpp0
-rw-r--r--3party/boost/boost/type_traits/detail/bool_trait_def.hpp12
-rw-r--r--3party/boost/boost/type_traits/detail/bool_trait_undef.hpp4
-rw-r--r--3party/boost/boost/type_traits/detail/cv_traits_impl.hpp119
-rw-r--r--3party/boost/boost/type_traits/detail/has_binary_operator.hpp8
-rw-r--r--3party/boost/boost/type_traits/detail/has_postfix_operator.hpp8
-rw-r--r--3party/boost/boost/type_traits/detail/has_prefix_operator.hpp8
-rw-r--r--3party/boost/boost/type_traits/detail/is_function_ptr_helper.hpp52
-rw-r--r--3party/boost/boost/type_traits/detail/is_function_ptr_tester.hpp214
-rw-r--r--3party/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp104
-rw-r--r--3party/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp971
-rw-r--r--3party/boost/boost/type_traits/detail/size_t_trait_def.hpp25
-rw-r--r--3party/boost/boost/type_traits/detail/size_t_trait_undef.hpp4
-rw-r--r--3party/boost/boost/type_traits/detail/type_trait_def.hpp4
-rw-r--r--3party/boost/boost/type_traits/detail/type_trait_undef.hpp4
-rw-r--r--3party/boost/boost/type_traits/extent.hpp6
-rw-r--r--3party/boost/boost/type_traits/function_traits.hpp62
-rw-r--r--3party/boost/boost/type_traits/has_logical_not.hpp9
-rw-r--r--3party/boost/boost/type_traits/has_new_operator.hpp14
-rw-r--r--3party/boost/boost/type_traits/integral_constant.hpp14
-rw-r--r--3party/boost/boost/type_traits/integral_promotion.hpp3
-rw-r--r--3party/boost/boost/type_traits/intrinsics.hpp4
-rw-r--r--3party/boost/boost/type_traits/is_abstract.hpp4
-rw-r--r--3party/boost/boost/type_traits/is_array.hpp43
-rw-r--r--3party/boost/boost/type_traits/is_base_and_derived.hpp2
-rw-r--r--3party/boost/boost/type_traits/is_base_of.hpp2
-rw-r--r--3party/boost/boost/type_traits/is_base_of_tr1.hpp2
-rw-r--r--3party/boost/boost/type_traits/is_class.hpp11
-rw-r--r--3party/boost/boost/type_traits/is_const.hpp79
-rw-r--r--3party/boost/boost/type_traits/is_convertible.hpp72
-rw-r--r--3party/boost/boost/type_traits/is_copy_constructible.hpp122
-rw-r--r--3party/boost/boost/type_traits/is_empty.hpp87
-rw-r--r--3party/boost/boost/type_traits/is_enum.hpp5
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/type_traits/is_floating_point.hpp0
-rw-r--r--3party/boost/boost/type_traits/is_function.hpp6
-rw-r--r--3party/boost/boost/type_traits/is_integral.hpp9
-rw-r--r--3party/boost/boost/type_traits/is_lvalue_reference.hpp64
-rw-r--r--3party/boost/boost/type_traits/is_member_function_pointer.hpp9
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/type_traits/is_member_object_pointer.hpp0
-rw-r--r--3party/boost/boost/type_traits/is_member_pointer.hpp55
-rw-r--r--3party/boost/boost/type_traits/is_nothrow_move_assignable.hpp9
-rw-r--r--3party/boost/boost/type_traits/is_nothrow_move_constructible.hpp9
-rw-r--r--3party/boost/boost/type_traits/is_object.hpp8
-rw-r--r--3party/boost/boost/type_traits/is_pod.hpp66
-rw-r--r--3party/boost/boost/type_traits/is_pointer.hpp76
-rw-r--r--3party/boost/boost/type_traits/is_polymorphic.hpp9
-rw-r--r--3party/boost/boost/type_traits/is_same.hpp58
-rw-r--r--3party/boost/boost/type_traits/is_signed.hpp4
-rw-r--r--3party/boost/boost/type_traits/is_virtual_base_of.hpp2
-rw-r--r--3party/boost/boost/type_traits/is_volatile.hpp72
-rw-r--r--3party/boost/boost/type_traits/make_signed.hpp2
-rw-r--r--3party/boost/boost/type_traits/make_unsigned.hpp2
-rw-r--r--3party/boost/boost/type_traits/msvc/remove_all_extents.hpp47
-rw-r--r--3party/boost/boost/type_traits/msvc/remove_bounds.hpp43
-rw-r--r--3party/boost/boost/type_traits/msvc/remove_const.hpp143
-rw-r--r--3party/boost/boost/type_traits/msvc/remove_cv.hpp190
-rw-r--r--3party/boost/boost/type_traits/msvc/remove_extent.hpp43
-rw-r--r--3party/boost/boost/type_traits/msvc/remove_pointer.hpp42
-rw-r--r--3party/boost/boost/type_traits/msvc/remove_reference.hpp42
-rw-r--r--3party/boost/boost/type_traits/msvc/remove_volatile.hpp143
-rw-r--r--3party/boost/boost/type_traits/msvc/typeof.hpp50
-rw-r--r--3party/boost/boost/type_traits/rank.hpp2
-rw-r--r--3party/boost/boost/type_traits/remove_all_extents.hpp10
-rw-r--r--3party/boost/boost/type_traits/remove_bounds.hpp10
-rw-r--r--3party/boost/boost/type_traits/remove_const.hpp13
-rw-r--r--3party/boost/boost/type_traits/remove_cv.hpp23
-rw-r--r--3party/boost/boost/type_traits/remove_extent.hpp10
-rw-r--r--3party/boost/boost/type_traits/remove_pointer.hpp13
-rw-r--r--3party/boost/boost/type_traits/remove_reference.hpp11
-rw-r--r--3party/boost/boost/type_traits/remove_volatile.hpp13
-rw-r--r--3party/boost/boost/type_traits/transform_traits_spec.hpp8
-rw-r--r--3party/boost/boost/type_traits/type_with_alignment.hpp118
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/dmc/typeof_impl.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/encode_decode.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/encode_decode_params.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/incr_registration_group.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/int_encoding.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/integral_template_param.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/modifiers.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/native.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/pointers_data_members.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/register_fundamental.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/register_mem_functions.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/bitset.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/complex.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/deque.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/fstream.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/functional.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/iostream.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/istream.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/iterator.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/list.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/locale.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/map.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/memory.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/ostream.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/queue.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/set.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/sstream.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/stack.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/streambuf.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/string.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/utility.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/valarray.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/std/vector.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/template_encoding.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/template_template_param.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/type_encoding.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/type_template_param.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/typeof_impl.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/vector.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/vector100.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/vector150.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/vector200.hpp0
-rwxr-xr-x[-rw-r--r--]3party/boost/boost/typeof/vector50.hpp0
-rw-r--r--3party/boost/boost/unordered/detail/allocate.hpp76
-rw-r--r--3party/boost/boost/unordered/detail/buckets.hpp132
-rw-r--r--3party/boost/boost/unordered/detail/equivalent.hpp54
-rw-r--r--3party/boost/boost/unordered/detail/extract_key.hpp37
-rw-r--r--3party/boost/boost/unordered/detail/fwd.hpp6
-rw-r--r--3party/boost/boost/unordered/detail/table.hpp40
-rw-r--r--3party/boost/boost/unordered/detail/unique.hpp36
-rw-r--r--3party/boost/boost/unordered/detail/util.hpp10
-rw-r--r--3party/boost/boost/unordered/unordered_map.hpp17
-rw-r--r--3party/boost/boost/unordered/unordered_map_fwd.hpp6
-rw-r--r--3party/boost/boost/unordered/unordered_set.hpp17
-rw-r--r--3party/boost/boost/unordered/unordered_set_fwd.hpp6
-rw-r--r--3party/boost/boost/unordered_map.hpp5
-rw-r--r--3party/boost/boost/unordered_set.hpp5
-rw-r--r--3party/boost/boost/utility/addressof.hpp107
-rw-r--r--3party/boost/boost/utility/base_from_member.hpp86
-rw-r--r--3party/boost/boost/utility/declval.hpp41
-rw-r--r--3party/boost/boost/utility/detail/result_of_iterate.hpp23
-rw-r--r--3party/boost/boost/utility/empty_deleter.hpp43
-rw-r--r--3party/boost/boost/utility/enable_if.hpp122
-rw-r--r--3party/boost/boost/utility/explicit_operator_bool.hpp17
-rw-r--r--3party/boost/boost/utility/in_place_factory.hpp6
-rw-r--r--3party/boost/boost/utility/result_of.hpp34
-rw-r--r--3party/boost/boost/utility/swap.hpp58
-rw-r--r--3party/boost/boost/utility/value_init.hpp29
-rw-r--r--3party/boost/boost/uuid/detail/config.hpp62
-rw-r--r--3party/boost/boost/uuid/detail/uuid_generic.hpp51
-rw-r--r--3party/boost/boost/uuid/detail/uuid_x86.hpp109
-rw-r--r--3party/boost/boost/uuid/name_generator.hpp20
-rw-r--r--3party/boost/boost/uuid/uuid.hpp83
-rw-r--r--3party/boost/boost/uuid/uuid_io.hpp2
-rw-r--r--3party/boost/boost/variant/bad_visit.hpp2
-rw-r--r--3party/boost/boost/variant/detail/apply_visitor_binary.hpp8
-rw-r--r--3party/boost/boost/variant/detail/apply_visitor_delayed.hpp2
-rw-r--r--3party/boost/boost/variant/detail/apply_visitor_unary.hpp4
-rw-r--r--3party/boost/boost/variant/detail/backup_holder.hpp6
-rw-r--r--3party/boost/boost/variant/detail/cast_storage.hpp10
-rw-r--r--3party/boost/boost/variant/detail/config.hpp1
-rw-r--r--3party/boost/boost/variant/detail/enable_recursive.hpp29
-rw-r--r--3party/boost/boost/variant/detail/enable_recursive_fwd.hpp29
-rw-r--r--3party/boost/boost/variant/detail/forced_return.hpp22
-rw-r--r--3party/boost/boost/variant/detail/hash_variant.hpp2
-rw-r--r--3party/boost/boost/variant/detail/initializer.hpp65
-rw-r--r--3party/boost/boost/variant/detail/make_variant_list.hpp17
-rw-r--r--3party/boost/boost/variant/detail/move.hpp135
-rw-r--r--3party/boost/boost/variant/detail/over_sequence.hpp37
-rw-r--r--3party/boost/boost/variant/detail/substitute.hpp21
-rw-r--r--3party/boost/boost/variant/detail/substitute_fwd.hpp1
-rw-r--r--3party/boost/boost/variant/detail/visitation_impl.hpp39
-rw-r--r--3party/boost/boost/variant/get.hpp72
-rw-r--r--3party/boost/boost/variant/multivisitors.hpp2
-rw-r--r--3party/boost/boost/variant/polymorphic_get.hpp170
-rw-r--r--3party/boost/boost/variant/recursive_variant.hpp24
-rw-r--r--3party/boost/boost/variant/recursive_wrapper_fwd.hpp44
-rw-r--r--3party/boost/boost/variant/static_visitor.hpp15
-rw-r--r--3party/boost/boost/variant/variant.hpp351
-rw-r--r--3party/boost/boost/variant/variant_fwd.hpp106
-rw-r--r--3party/boost/boost/variant/visitor_ptr.hpp5
-rw-r--r--3party/boost/boost/version.hpp4
-rw-r--r--3party/boost/boost/visit_each.hpp2
-rw-r--r--3party/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp2
-rw-r--r--3party/boost/boost/wave/util/flex_string.hpp78
-rw-r--r--3party/boost/boost/xpressive/basic_regex.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/access.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/action.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/adaptor.hpp5
-rw-r--r--3party/boost/boost/xpressive/detail/core/finder.hpp4
-rw-r--r--3party/boost/boost/xpressive/detail/core/flow_control.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/linker.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/list.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/action_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp4
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/alternate_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/any_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/assert_line_base.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/attr_begin_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/attr_end_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/attr_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/charset_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/end_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/epsilon_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/keeper_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/literal_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/lookahead_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/mark_end_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/mark_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/optional_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/predicate_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/range_matcher.hpp4
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/regex_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/set_matcher.hpp4
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/string_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matcher/true_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/matchers.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/peeker.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/quant_style.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/regex_impl.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/results_cache.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/state.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/sub_match_impl.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/core/sub_match_vector.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/detail_fwd.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/dynamic/dynamic.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/dynamic/matchable.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/dynamic/parse_charset.hpp9
-rw-r--r--3party/boost/boost/xpressive/detail/dynamic/parser.hpp5
-rw-r--r--3party/boost/boost/xpressive/detail/dynamic/parser_enum.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/dynamic/parser_traits.hpp7
-rw-r--r--3party/boost/boost/xpressive/detail/dynamic/sequence.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/compile.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/grammar.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/is_pure.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/modifier.hpp4
-rw-r--r--3party/boost/boost/xpressive/detail/static/placeholders.hpp4
-rw-r--r--3party/boost/boost/xpressive/detail/static/static.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_action.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_alternate.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_independent.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_inverse.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_marker.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_matcher.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_modifier.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_quantifier.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_sequence.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transforms/as_set.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/transmogrify.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/type_traits.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/visitor.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/static/width_of.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/utility/algorithm.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/utility/boyer_moore.hpp4
-rw-r--r--3party/boost/boost/xpressive/detail/utility/chset/chset.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/utility/hash_peek_bitset.hpp4
-rw-r--r--3party/boost/boost/xpressive/detail/utility/ignore_unused.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/utility/literals.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/utility/save_restore.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/utility/sequence_stack.hpp37
-rw-r--r--3party/boost/boost/xpressive/detail/utility/symbols.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/utility/tracking_ptr.hpp2
-rw-r--r--3party/boost/boost/xpressive/detail/utility/traits_utils.hpp4
-rw-r--r--3party/boost/boost/xpressive/detail/utility/width.hpp2
-rw-r--r--3party/boost/boost/xpressive/match_results.hpp5
-rw-r--r--3party/boost/boost/xpressive/regex_actions.hpp860
-rw-r--r--3party/boost/boost/xpressive/regex_algorithms.hpp3
-rw-r--r--3party/boost/boost/xpressive/regex_compiler.hpp51
-rw-r--r--3party/boost/boost/xpressive/regex_constants.hpp2
-rw-r--r--3party/boost/boost/xpressive/regex_error.hpp2
-rw-r--r--3party/boost/boost/xpressive/regex_iterator.hpp2
-rw-r--r--3party/boost/boost/xpressive/regex_token_iterator.hpp2
-rw-r--r--3party/boost/boost/xpressive/regex_traits.hpp2
-rw-r--r--3party/boost/boost/xpressive/sub_match.hpp14
-rw-r--r--3party/boost/boost/xpressive/traits/c_regex_traits.hpp2
-rw-r--r--3party/boost/boost/xpressive/traits/cpp_regex_traits.hpp2
-rw-r--r--3party/boost/boost/xpressive/traits/detail/c_ctype.hpp2
-rw-r--r--3party/boost/boost/xpressive/traits/null_regex_traits.hpp2
-rw-r--r--3party/boost/boost/xpressive/xpressive.hpp2
-rw-r--r--3party/boost/boost/xpressive/xpressive_dynamic.hpp2
-rw-r--r--3party/boost/boost/xpressive/xpressive_fwd.hpp5
-rw-r--r--3party/boost/boost/xpressive/xpressive_static.hpp2
-rw-r--r--3party/boost/boost/xpressive/xpressive_typeof.hpp2
5831 files changed, 209318 insertions, 125932 deletions
diff --git a/3party/boost/boost/accumulators/accumulators_fwd.hpp b/3party/boost/boost/accumulators/accumulators_fwd.hpp
index 28e5162673..4c0370e21e 100644
--- a/3party/boost/boost/accumulators/accumulators_fwd.hpp
+++ b/3party/boost/boost/accumulators/accumulators_fwd.hpp
@@ -11,6 +11,7 @@
#include <boost/config.hpp>
#include <boost/mpl/apply_fwd.hpp> // for mpl::na
#include <boost/mpl/limits/vector.hpp>
+#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/arithmetic/inc.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
diff --git a/3party/boost/boost/accumulators/numeric/functional.hpp b/3party/boost/boost/accumulators/numeric/functional.hpp
index 683c49d1ab..d5d79f5c49 100644
--- a/3party/boost/boost/accumulators/numeric/functional.hpp
+++ b/3party/boost/boost/accumulators/numeric/functional.hpp
@@ -245,14 +245,14 @@ namespace boost { namespace numeric
};
template<typename Left, typename Right, typename EnableIf>
- struct average_base
+ struct fdiv_base
: functional::divides<Left, Right>
{};
// partial specialization that promotes the arguments to double for
// integral division.
template<typename Left, typename Right>
- struct average_base<Left, Right, typename enable_if<are_integral<Left, Right> >::type>
+ struct fdiv_base<Left, Right, typename enable_if<are_integral<Left, Right> >::type>
: functional::divides<double const, double const>
{};
@@ -348,8 +348,15 @@ namespace boost { namespace numeric
{};
template<typename Left, typename Right, typename LeftTag, typename RightTag>
+ struct fdiv
+ : fdiv_base<Left, Right, void>
+ {};
+
+ /// INTERNAL ONLY
+ /// For back-compat only. Use fdiv.
+ template<typename Left, typename Right, typename LeftTag, typename RightTag>
struct average
- : average_base<Left, Right, void>
+ : fdiv<Left, Right, LeftTag, RightTag>
{};
template<typename Arg, typename Tag>
@@ -388,8 +395,13 @@ namespace boost { namespace numeric
: boost::detail::function2<functional::max_assign<_1, _2, functional::tag<_1>, functional::tag<_2> > >
{};
+ struct fdiv
+ : boost::detail::function2<functional::fdiv<_1, _2, functional::tag<_1>, functional::tag<_2> > >
+ {};
+
+ /// INTERNAL ONLY
struct average
- : boost::detail::function2<functional::average<_1, _2, functional::tag<_1>, functional::tag<_2> > >
+ : boost::detail::function2<functional::fdiv<_1, _2, functional::tag<_1>, functional::tag<_2> > >
{};
struct as_min
@@ -413,7 +425,8 @@ namespace boost { namespace numeric
{
op::min_assign const &min_assign = boost::detail::pod_singleton<op::min_assign>::instance;
op::max_assign const &max_assign = boost::detail::pod_singleton<op::max_assign>::instance;
- op::average const &average = boost::detail::pod_singleton<op::average>::instance;
+ op::fdiv const &fdiv = boost::detail::pod_singleton<op::fdiv>::instance;
+ op::fdiv const &average = boost::detail::pod_singleton<op::fdiv>::instance; ///< INTERNAL ONLY
op::as_min const &as_min = boost::detail::pod_singleton<op::as_min>::instance;
op::as_max const &as_max = boost::detail::pod_singleton<op::as_max>::instance;
op::as_zero const &as_zero = boost::detail::pod_singleton<op::as_zero>::instance;
@@ -421,6 +434,7 @@ namespace boost { namespace numeric
BOOST_ACCUMULATORS_IGNORE_GLOBAL(min_assign)
BOOST_ACCUMULATORS_IGNORE_GLOBAL(max_assign)
+ BOOST_ACCUMULATORS_IGNORE_GLOBAL(fdiv)
BOOST_ACCUMULATORS_IGNORE_GLOBAL(average)
BOOST_ACCUMULATORS_IGNORE_GLOBAL(as_min)
BOOST_ACCUMULATORS_IGNORE_GLOBAL(as_max)
diff --git a/3party/boost/boost/accumulators/numeric/functional/valarray.hpp b/3party/boost/boost/accumulators/numeric/functional/valarray.hpp
index 41766a0371..c24b45859d 100644
--- a/3party/boost/boost/accumulators/numeric/functional/valarray.hpp
+++ b/3party/boost/boost/accumulators/numeric/functional/valarray.hpp
@@ -234,9 +234,9 @@ namespace boost { namespace numeric
}
};
- // partial specialization of numeric::average<> for std::valarray.
+ // partial specialization of numeric::fdiv<> for std::valarray.
template<typename Left, typename Right, typename RightTag>
- struct average<Left, Right, std_valarray_tag, RightTag>
+ struct fdiv<Left, Right, std_valarray_tag, RightTag>
: mpl::if_<
are_integral<typename Left::value_type, Right>
, divides<Left, double const>
diff --git a/3party/boost/boost/accumulators/numeric/functional/vector.hpp b/3party/boost/boost/accumulators/numeric/functional/vector.hpp
index cdb234278d..8a68a3f303 100644
--- a/3party/boost/boost/accumulators/numeric/functional/vector.hpp
+++ b/3party/boost/boost/accumulators/numeric/functional/vector.hpp
@@ -231,7 +231,7 @@ namespace boost { namespace numeric
// partial specialization for std::vector.
template<typename Left, typename Right>
- struct average<Left, Right, std_vector_tag, void>
+ struct fdiv<Left, Right, std_vector_tag, void>
: mpl::if_<
are_integral<typename Left::value_type, Right>
, divides<Left, double const>
diff --git a/3party/boost/boost/accumulators/numeric/functional_fwd.hpp b/3party/boost/boost/accumulators/numeric/functional_fwd.hpp
index 940d15b839..501f654b29 100644
--- a/3party/boost/boost/accumulators/numeric/functional_fwd.hpp
+++ b/3party/boost/boost/accumulators/numeric/functional_fwd.hpp
@@ -141,7 +141,7 @@ namespace boost { namespace numeric
template<typename Left, typename Right, typename EnableIf = void>
struct max_assign_base;
template<typename Left, typename Right, typename EnableIf = void>
- struct average_base;
+ struct fdiv_base;
template<typename Arg, typename EnableIf = void>
struct as_min_base;
template<typename Arg, typename EnableIf = void>
@@ -158,7 +158,7 @@ namespace boost { namespace numeric
template<typename Left, typename Right, typename LeftTag = typename tag<Left>::type, typename RightTag = typename tag<Right>::type>
struct max_assign;
template<typename Left, typename Right, typename LeftTag = typename tag<Left>::type, typename RightTag = typename tag<Right>::type>
- struct average;
+ struct fdiv;
template<typename Arg, typename Tag = typename tag<Arg>::type>
struct as_min;
template<typename Arg, typename Tag = typename tag<Arg>::type>
@@ -175,7 +175,7 @@ namespace boost { namespace numeric
struct promote;
struct min_assign;
struct max_assign;
- struct average;
+ struct fdiv;
struct as_min;
struct as_max;
struct as_zero;
@@ -186,7 +186,7 @@ namespace boost { namespace numeric
{
extern op::min_assign const &min_assign;
extern op::max_assign const &max_assign;
- extern op::average const &average;
+ extern op::fdiv const &fdiv;
extern op::as_min const &as_min;
extern op::as_max const &as_max;
extern op::as_zero const &as_zero;
diff --git a/3party/boost/boost/accumulators/statistics/covariance.hpp b/3party/boost/boost/accumulators/statistics/covariance.hpp
index b34284b046..73c92aebb5 100644
--- a/3party/boost/boost/accumulators/statistics/covariance.hpp
+++ b/3party/boost/boost/accumulators/statistics/covariance.hpp
@@ -122,8 +122,8 @@ namespace impl
struct covariance_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type sample_type;
- typedef typename numeric::functional::average<VariateType, std::size_t>::result_type variate_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type sample_type;
+ typedef typename numeric::functional::fdiv<VariateType, std::size_t>::result_type variate_type;
// for boost::result_of
typedef typename numeric::functional::outer_product<sample_type, variate_type>::result_type result_type;
@@ -131,8 +131,8 @@ namespace impl
covariance_impl(Args const &args)
: cov_(
numeric::outer_product(
- numeric::average(args[sample | Sample()], (std::size_t)1)
- , numeric::average(args[parameter::keyword<VariateTag>::get() | VariateType()], (std::size_t)1)
+ numeric::fdiv(args[sample | Sample()], (std::size_t)1)
+ , numeric::fdiv(args[parameter::keyword<VariateTag>::get() | VariateType()], (std::size_t)1)
)
)
{
diff --git a/3party/boost/boost/accumulators/statistics/density.hpp b/3party/boost/boost/accumulators/statistics/density.hpp
index 451ba8b644..88ca17df79 100644
--- a/3party/boost/boost/accumulators/statistics/density.hpp
+++ b/3party/boost/boost/accumulators/statistics/density.hpp
@@ -61,7 +61,7 @@ namespace impl
struct density_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
typedef std::vector<std::pair<float_type, float_type> > histogram_type;
typedef std::vector<float_type> array_type;
// for boost::result_of
@@ -77,8 +77,8 @@ namespace impl
, histogram(
num_bins + 2
, std::make_pair(
- numeric::average(args[sample | Sample()],(std::size_t)1)
- , numeric::average(args[sample | Sample()],(std::size_t)1)
+ numeric::fdiv(args[sample | Sample()],(std::size_t)1)
+ , numeric::fdiv(args[sample | Sample()],(std::size_t)1)
)
)
, is_dirty(true)
@@ -103,9 +103,9 @@ namespace impl
// Store their lower bounds (bin_positions) and fill the bins with the cached samples (samples_in_bin).
if (cnt == this->cache_size)
{
- float_type minimum = numeric::average((min)(args), (std::size_t)1);
- float_type maximum = numeric::average((max)(args), (std::size_t)1);
- float_type bin_size = numeric::average(maximum - minimum, this->num_bins );
+ float_type minimum = numeric::fdiv((min)(args), (std::size_t)1);
+ float_type maximum = numeric::fdiv((max)(args), (std::size_t)1);
+ float_type bin_size = numeric::fdiv(maximum - minimum, this->num_bins );
// determine bin positions (their lower bounds)
for (std::size_t i = 0; i < this->num_bins + 2; ++i)
@@ -177,7 +177,7 @@ namespace impl
for (std::size_t i = 0; i < this->num_bins + 2; ++i)
{
- this->histogram[i] = std::make_pair(this->bin_positions[i], numeric::average(this->samples_in_bin[i], count(args)));
+ this->histogram[i] = std::make_pair(this->bin_positions[i], numeric::fdiv(this->samples_in_bin[i], count(args)));
}
}
// returns a range of pairs
diff --git a/3party/boost/boost/accumulators/statistics/error_of_mean.hpp b/3party/boost/boost/accumulators/statistics/error_of_mean.hpp
index 9451d40f73..7cd923d5f4 100644
--- a/3party/boost/boost/accumulators/statistics/error_of_mean.hpp
+++ b/3party/boost/boost/accumulators/statistics/error_of_mean.hpp
@@ -29,7 +29,7 @@ namespace impl
: accumulator_base
{
// for boost::result_of
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
error_of_mean_impl(dont_care) {}
@@ -38,7 +38,7 @@ namespace impl
{
using namespace std;
extractor<Variance> const variance = {};
- return sqrt(numeric::average(variance(args), count(args) - 1));
+ return sqrt(numeric::fdiv(variance(args), count(args) - 1));
}
};
diff --git a/3party/boost/boost/accumulators/statistics/extended_p_square.hpp b/3party/boost/boost/accumulators/statistics/extended_p_square.hpp
index b04be83784..e6cc8dc9a1 100644
--- a/3party/boost/boost/accumulators/statistics/extended_p_square.hpp
+++ b/3party/boost/boost/accumulators/statistics/extended_p_square.hpp
@@ -69,7 +69,7 @@ namespace impl
struct extended_p_square_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
typedef std::vector<float_type> array_type;
// for boost::result_of
typedef iterator_range<
diff --git a/3party/boost/boost/accumulators/statistics/extended_p_square_quantile.hpp b/3party/boost/boost/accumulators/statistics/extended_p_square_quantile.hpp
index 09ffef2963..a17843d774 100644
--- a/3party/boost/boost/accumulators/statistics/extended_p_square_quantile.hpp
+++ b/3party/boost/boost/accumulators/statistics/extended_p_square_quantile.hpp
@@ -57,7 +57,7 @@ namespace impl
struct extended_p_square_quantile_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
typedef std::vector<float_type> array_type;
typedef iterator_range<
detail::lvalue_index_iterator<
@@ -137,7 +137,7 @@ namespace impl
float_type h1 = *iter_heights;
float_type h0 = *(iter_heights - 1);
- float_type a = numeric::average(h1 - h0, p1 - p0);
+ float_type a = numeric::fdiv(h1 - h0, p1 - p0);
float_type b = h1 - p1 * a;
res = a * this->probability + b;
@@ -169,12 +169,12 @@ namespace impl
h2 = *iter_heights;
}
- float_type hp21 = numeric::average(h2 - h1, p2 - p1);
- float_type hp10 = numeric::average(h1 - h0, p1 - p0);
- float_type p21 = numeric::average(p2 * p2 - p1 * p1, p2 - p1);
- float_type p10 = numeric::average(p1 * p1 - p0 * p0, p1 - p0);
+ float_type hp21 = numeric::fdiv(h2 - h1, p2 - p1);
+ float_type hp10 = numeric::fdiv(h1 - h0, p1 - p0);
+ float_type p21 = numeric::fdiv(p2 * p2 - p1 * p1, p2 - p1);
+ float_type p10 = numeric::fdiv(p1 * p1 - p0 * p0, p1 - p0);
- float_type a = numeric::average(hp21 - hp10, p21 - p10);
+ float_type a = numeric::fdiv(hp21 - hp10, p21 - p10);
float_type b = hp21 - a * p21;
float_type c = h2 - a * p2 * p2 - b * p2;
diff --git a/3party/boost/boost/accumulators/statistics/kurtosis.hpp b/3party/boost/boost/accumulators/statistics/kurtosis.hpp
index 4c5c23d5d7..76c93d3850 100644
--- a/3party/boost/boost/accumulators/statistics/kurtosis.hpp
+++ b/3party/boost/boost/accumulators/statistics/kurtosis.hpp
@@ -47,14 +47,14 @@ namespace impl
: accumulator_base
{
// for boost::result_of
- typedef typename numeric::functional::average<Sample, Sample>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, Sample>::result_type result_type;
kurtosis_impl(dont_care) {}
template<typename Args>
result_type result(Args const &args) const
{
- return numeric::average(
+ return numeric::fdiv(
accumulators::moment<4>(args)
- 4. * accumulators::moment<3>(args) * mean(args)
+ 6. * accumulators::moment<2>(args) * mean(args) * mean(args)
diff --git a/3party/boost/boost/accumulators/statistics/mean.hpp b/3party/boost/boost/accumulators/statistics/mean.hpp
index 0b3ba5e7cd..4788837184 100644
--- a/3party/boost/boost/accumulators/statistics/mean.hpp
+++ b/3party/boost/boost/accumulators/statistics/mean.hpp
@@ -31,7 +31,7 @@ namespace impl
: accumulator_base
{
// for boost::result_of
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
mean_impl(dont_care) {}
@@ -39,7 +39,7 @@ namespace impl
result_type result(Args const &args) const
{
extractor<SumFeature> sum;
- return numeric::average(sum(args), count(args));
+ return numeric::fdiv(sum(args), count(args));
}
};
@@ -48,11 +48,11 @@ namespace impl
: accumulator_base
{
// for boost::result_of
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
template<typename Args>
immediate_mean_impl(Args const &args)
- : mean(numeric::average(args[sample | Sample()], numeric::one<std::size_t>::value))
+ : mean(numeric::fdiv(args[sample | Sample()], numeric::one<std::size_t>::value))
{
}
@@ -60,7 +60,7 @@ namespace impl
void operator ()(Args const &args)
{
std::size_t cnt = count(args);
- this->mean = numeric::average(
+ this->mean = numeric::fdiv(
(this->mean * (cnt - 1)) + args[parameter::keyword<Tag>::get()]
, cnt
);
diff --git a/3party/boost/boost/accumulators/statistics/median.hpp b/3party/boost/boost/accumulators/statistics/median.hpp
index 919cf69e4f..d361c6dda4 100644
--- a/3party/boost/boost/accumulators/statistics/median.hpp
+++ b/3party/boost/boost/accumulators/statistics/median.hpp
@@ -39,7 +39,7 @@ namespace impl
: accumulator_base
{
// for boost::result_of
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
median_impl(dont_care) {}
@@ -63,7 +63,7 @@ namespace impl
struct with_density_median_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
typedef std::vector<std::pair<float_type, float_type> > histogram_type;
typedef iterator_range<typename histogram_type::iterator> range_type;
// for boost::result_of
@@ -71,7 +71,7 @@ namespace impl
template<typename Args>
with_density_median_impl(Args const &args)
- : sum(numeric::average(args[sample | Sample()], (std::size_t)1))
+ : sum(numeric::fdiv(args[sample | Sample()], (std::size_t)1))
, is_dirty(true)
{
}
@@ -98,7 +98,7 @@ namespace impl
++it;
}
--it;
- float_type over = numeric::average(this->sum - 0.5 * cnt, it->second * cnt);
+ float_type over = numeric::fdiv(this->sum - 0.5 * cnt, it->second * cnt);
this->median = it->first * over + (it + 1)->first * (1. - over);
}
@@ -125,7 +125,7 @@ namespace impl
struct with_p_square_cumulative_distribution_median_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
typedef std::vector<std::pair<float_type, float_type> > histogram_type;
typedef iterator_range<typename histogram_type::iterator> range_type;
// for boost::result_of
@@ -154,7 +154,7 @@ namespace impl
{
++it;
}
- float_type over = numeric::average(it->second - 0.5, it->second - (it - 1)->second);
+ float_type over = numeric::fdiv(it->second - 0.5, it->second - (it - 1)->second);
this->median = it->first * over + (it + 1)->first * ( 1. - over );
}
diff --git a/3party/boost/boost/accumulators/statistics/moment.hpp b/3party/boost/boost/accumulators/statistics/moment.hpp
index 20421730c3..3dabd47ecf 100644
--- a/3party/boost/boost/accumulators/statistics/moment.hpp
+++ b/3party/boost/boost/accumulators/statistics/moment.hpp
@@ -55,7 +55,7 @@ namespace impl
{
BOOST_MPL_ASSERT_RELATION(N::value, >, 0);
// for boost::result_of
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
template<typename Args>
moment_impl(Args const &args)
@@ -72,7 +72,7 @@ namespace impl
template<typename Args>
result_type result(Args const &args) const
{
- return numeric::average(this->sum, count(args));
+ return numeric::fdiv(this->sum, count(args));
}
private:
diff --git a/3party/boost/boost/accumulators/statistics/p_square_cumul_dist.hpp b/3party/boost/boost/accumulators/statistics/p_square_cumul_dist.hpp
index de98368666..50692838c7 100644
--- a/3party/boost/boost/accumulators/statistics/p_square_cumul_dist.hpp
+++ b/3party/boost/boost/accumulators/statistics/p_square_cumul_dist.hpp
@@ -54,7 +54,7 @@ namespace impl
struct p_square_cumulative_distribution_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
typedef std::vector<float_type> array_type;
typedef std::vector<std::pair<float_type, float_type> > histogram_type;
// for boost::result_of
@@ -76,7 +76,7 @@ namespace impl
{
this->actual_positions[i] = i + 1.;
this->desired_positions[i] = i + 1.;
- this->positions_increments[i] = numeric::average(i, b);
+ this->positions_increments[i] = numeric::fdiv(i, b);
}
}
@@ -198,7 +198,7 @@ namespace impl
for (std::size_t i = 0; i < this->histogram.size(); ++i)
{
- this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], cnt));
+ this->histogram[i] = std::make_pair(this->heights[i], numeric::fdiv(this->actual_positions[i], cnt));
}
}
//return histogram;
diff --git a/3party/boost/boost/accumulators/statistics/p_square_quantile.hpp b/3party/boost/boost/accumulators/statistics/p_square_quantile.hpp
index 877f7f00c9..636fea7f23 100644
--- a/3party/boost/boost/accumulators/statistics/p_square_quantile.hpp
+++ b/3party/boost/boost/accumulators/statistics/p_square_quantile.hpp
@@ -54,7 +54,7 @@ namespace impl
struct p_square_quantile_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
typedef array<float_type, 5> array_type;
// for boost::result_of
typedef float_type result_type;
@@ -69,7 +69,7 @@ namespace impl
{
for(std::size_t i = 0; i < 5; ++i)
{
- this->actual_positions[i] = i + 1;
+ this->actual_positions[i] = i + 1.;
}
this->desired_positions[0] = 1.;
diff --git a/3party/boost/boost/accumulators/statistics/peaks_over_threshold.hpp b/3party/boost/boost/accumulators/statistics/peaks_over_threshold.hpp
index ba152abba2..f04f743a0c 100644
--- a/3party/boost/boost/accumulators/statistics/peaks_over_threshold.hpp
+++ b/3party/boost/boost/accumulators/statistics/peaks_over_threshold.hpp
@@ -125,7 +125,7 @@ namespace impl
struct peaks_over_threshold_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
// for boost::result_of
typedef boost::tuple<float_type, float_type, float_type> result_type;
// for left tail fitting, mirror the extreme values
@@ -134,8 +134,8 @@ namespace impl
template<typename Args>
peaks_over_threshold_impl(Args const &args)
: Nu_(0)
- , mu_(sign::value * numeric::average(args[sample | Sample()], (std::size_t)1))
- , sigma2_(numeric::average(args[sample | Sample()], (std::size_t)1))
+ , mu_(sign::value * numeric::fdiv(args[sample | Sample()], (std::size_t)1))
+ , sigma2_(numeric::fdiv(args[sample | Sample()], (std::size_t)1))
, threshold_(sign::value * args[pot_threshold_value])
, fit_parameters_(boost::make_tuple(0., 0., 0.))
, is_dirty_(true)
@@ -164,13 +164,13 @@ namespace impl
std::size_t cnt = count(args);
- this->mu_ = sign::value * numeric::average(this->mu_, this->Nu_);
- this->sigma2_ = numeric::average(this->sigma2_, this->Nu_);
+ this->mu_ = sign::value * numeric::fdiv(this->mu_, this->Nu_);
+ this->sigma2_ = numeric::fdiv(this->sigma2_, this->Nu_);
this->sigma2_ -= this->mu_ * this->mu_;
- float_type threshold_probability = numeric::average(cnt - this->Nu_, cnt);
+ float_type threshold_probability = numeric::fdiv(cnt - this->Nu_, cnt);
- float_type tmp = numeric::average(( this->mu_ - this->threshold_ )*( this->mu_ - this->threshold_ ), this->sigma2_);
+ float_type tmp = numeric::fdiv(( this->mu_ - this->threshold_ )*( this->mu_ - this->threshold_ ), this->sigma2_);
float_type xi_hat = 0.5 * ( 1. - tmp );
float_type beta_hat = 0.5 * ( this->mu_ - this->threshold_ ) * ( 1. + tmp );
float_type beta_bar = beta_hat * std::pow(1. - threshold_probability, xi_hat);
@@ -205,7 +205,7 @@ namespace impl
struct peaks_over_threshold_prob_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
// for boost::result_of
typedef boost::tuple<float_type, float_type, float_type> result_type;
// for left tail fitting, mirror the extreme values
@@ -213,8 +213,8 @@ namespace impl
template<typename Args>
peaks_over_threshold_prob_impl(Args const &args)
- : mu_(sign::value * numeric::average(args[sample | Sample()], (std::size_t)1))
- , sigma2_(numeric::average(args[sample | Sample()], (std::size_t)1))
+ : mu_(sign::value * numeric::fdiv(args[sample | Sample()], (std::size_t)1))
+ , sigma2_(numeric::fdiv(args[sample | Sample()], (std::size_t)1))
, threshold_probability_(args[pot_threshold_probability])
, fit_parameters_(boost::make_tuple(0., 0., 0.))
, is_dirty_(true)
@@ -272,14 +272,14 @@ namespace impl
sigma2_ += *(tail(args).begin() + i) * (*(tail(args).begin() + i));
}
- this->mu_ = sign::value * numeric::average(this->mu_, n);
- this->sigma2_ = numeric::average(this->sigma2_, n);
+ this->mu_ = sign::value * numeric::fdiv(this->mu_, n);
+ this->sigma2_ = numeric::fdiv(this->sigma2_, n);
this->sigma2_ -= this->mu_ * this->mu_;
if (is_same<LeftRight, left>::value)
this->threshold_probability_ = 1. - this->threshold_probability_;
- float_type tmp = numeric::average(( this->mu_ - u )*( this->mu_ - u ), this->sigma2_);
+ float_type tmp = numeric::fdiv(( this->mu_ - u )*( this->mu_ - u ), this->sigma2_);
float_type xi_hat = 0.5 * ( 1. - tmp );
float_type beta_hat = 0.5 * ( this->mu_ - u ) * ( 1. + tmp );
float_type beta_bar = beta_hat * std::pow(1. - threshold_probability_, xi_hat);
diff --git a/3party/boost/boost/accumulators/statistics/pot_quantile.hpp b/3party/boost/boost/accumulators/statistics/pot_quantile.hpp
index aceff8cee5..470bdbace3 100644
--- a/3party/boost/boost/accumulators/statistics/pot_quantile.hpp
+++ b/3party/boost/boost/accumulators/statistics/pot_quantile.hpp
@@ -49,7 +49,7 @@ namespace impl
struct pot_quantile_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
// for boost::result_of
typedef float_type result_type;
diff --git a/3party/boost/boost/accumulators/statistics/pot_tail_mean.hpp b/3party/boost/boost/accumulators/statistics/pot_tail_mean.hpp
index 088ef98093..a78043fce2 100644
--- a/3party/boost/boost/accumulators/statistics/pot_tail_mean.hpp
+++ b/3party/boost/boost/accumulators/statistics/pot_tail_mean.hpp
@@ -52,7 +52,7 @@ namespace impl
struct pot_tail_mean_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
// for boost::result_of
typedef float_type result_type;
diff --git a/3party/boost/boost/accumulators/statistics/rolling_mean.hpp b/3party/boost/boost/accumulators/statistics/rolling_mean.hpp
index ddcbaa39b9..1439da1e2c 100644
--- a/3party/boost/boost/accumulators/statistics/rolling_mean.hpp
+++ b/3party/boost/boost/accumulators/statistics/rolling_mean.hpp
@@ -1,9 +1,10 @@
///////////////////////////////////////////////////////////////////////////////
// rolling_mean.hpp
-//
-// 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)
+// Copyright (C) 2008 Eric Niebler.
+// Copyright (C) 2012 Pieter Bastiaan Ober (Integricom).
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_ACCUMULATORS_STATISTICS_ROLLING_MEAN_HPP_EAN_26_12_2008
#define BOOST_ACCUMULATORS_STATISTICS_ROLLING_MEAN_HPP_EAN_26_12_2008
@@ -20,62 +21,159 @@
namespace boost { namespace accumulators
{
+ namespace impl
+ {
+ ///////////////////////////////////////////////////////////////////////////////
+ // lazy_rolling_mean_impl
+ // returns the mean over the rolling window and is calculated only
+ // when the result is requested
+ template<typename Sample>
+ struct lazy_rolling_mean_impl
+ : accumulator_base
+ {
+ // for boost::result_of
+ typedef typename numeric::functional::fdiv<Sample, std::size_t, void, void>::result_type result_type;
-namespace impl
-{
+ lazy_rolling_mean_impl(dont_care)
+ {
+ }
- ///////////////////////////////////////////////////////////////////////////////
- // rolling_mean_impl
- // returns the unshifted results from the shifted rolling window
- template<typename Sample>
- struct rolling_mean_impl
- : accumulator_base
- {
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
+ template<typename Args>
+ result_type result(Args const &args) const
+ {
+ return numeric::fdiv(rolling_sum(args), rolling_count(args));
+ }
+ };
- rolling_mean_impl(dont_care)
- {}
+ ///////////////////////////////////////////////////////////////////////////////
+ // immediate_rolling_mean_impl
+ // The non-lazy version computes the rolling mean recursively when a new
+ // sample is added
+ template<typename Sample>
+ struct immediate_rolling_mean_impl
+ : accumulator_base
+ {
+ // for boost::result_of
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
- template<typename Args>
- result_type result(Args const &args) const
- {
- return numeric::average(rolling_sum(args), rolling_count(args));
- }
- };
+ template<typename Args>
+ immediate_rolling_mean_impl(Args const &args)
+ : mean_(numeric::fdiv(args[sample | Sample()],numeric::one<std::size_t>::value))
+ {
+ }
-} // namespace impl
+ template<typename Args>
+ void operator()(Args const &args)
+ {
+ if(is_rolling_window_plus1_full(args))
+ {
+ mean_ += numeric::fdiv(args[sample]-rolling_window_plus1(args).front(),rolling_count(args));
+ }
+ else
+ {
+ result_type prev_mean = mean_;
+ mean_ += numeric::fdiv(args[sample]-prev_mean,rolling_count(args));
+ }
+ }
-///////////////////////////////////////////////////////////////////////////////
-// tag::rolling_mean
-//
-namespace tag
-{
- struct rolling_mean
- : depends_on< rolling_sum, rolling_count >
- {
- /// INTERNAL ONLY
- ///
- typedef accumulators::impl::rolling_mean_impl< mpl::_1 > impl;
-
- #ifdef BOOST_ACCUMULATORS_DOXYGEN_INVOKED
- /// tag::rolling_window::window_size named parameter
- static boost::parameter::keyword<tag::rolling_window_size> const window_size;
- #endif
- };
-} // namespace tag
+ template<typename Args>
+ result_type result(Args const &) const
+ {
+ return mean_;
+ }
-///////////////////////////////////////////////////////////////////////////////
-// extract::rolling_mean
-//
-namespace extract
-{
- extractor<tag::rolling_mean> const rolling_mean = {};
+ private:
- BOOST_ACCUMULATORS_IGNORE_GLOBAL(rolling_mean)
-}
+ result_type mean_;
+ };
+ } // namespace impl
-using extract::rolling_mean;
+ ///////////////////////////////////////////////////////////////////////////////
+ // tag::lazy_rolling_mean
+ // tag::immediate_rolling_mean
+ // tag::rolling_mean
+ //
+ namespace tag
+ {
+ struct lazy_rolling_mean
+ : depends_on< rolling_sum, rolling_count >
+ {
+ /// INTERNAL ONLY
+ ///
+ typedef accumulators::impl::lazy_rolling_mean_impl< mpl::_1 > impl;
-}} // namespace boost::accumulators
+#ifdef BOOST_ACCUMULATORS_DOXYGEN_INVOKED
+ /// tag::rolling_window::window_size named parameter
+ static boost::parameter::keyword<tag::rolling_window_size> const window_size;
+#endif
+ };
+ struct immediate_rolling_mean
+ : depends_on< rolling_window_plus1, rolling_count>
+ {
+ /// INTERNAL ONLY
+ ///
+ typedef accumulators::impl::immediate_rolling_mean_impl< mpl::_1> impl;
+
+#ifdef BOOST_ACCUMULATORS_DOXYGEN_INVOKED
+ /// tag::rolling_window::window_size named parameter
+ static boost::parameter::keyword<tag::rolling_window_size> const window_size;
#endif
+ };
+
+ // make immediate_rolling_mean the default implementation
+ struct rolling_mean : immediate_rolling_mean {};
+ } // namespace tag
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // extract::lazy_rolling_mean
+ // extract::immediate_rolling_mean
+ // extract::rolling_mean
+ //
+ namespace extract
+ {
+ extractor<tag::lazy_rolling_mean> const lazy_rolling_mean = {};
+ extractor<tag::immediate_rolling_mean> const immediate_rolling_mean = {};
+ extractor<tag::rolling_mean> const rolling_mean = {};
+
+ BOOST_ACCUMULATORS_IGNORE_GLOBAL(lazy_rolling_mean)
+ BOOST_ACCUMULATORS_IGNORE_GLOBAL(immediate_rolling_mean)
+ BOOST_ACCUMULATORS_IGNORE_GLOBAL(rolling_mean)
+ }
+
+ using extract::lazy_rolling_mean;
+ using extract::immediate_rolling_mean;
+ using extract::rolling_mean;
+
+ // rolling_mean(lazy) -> lazy_rolling_mean
+ template<>
+ struct as_feature<tag::rolling_mean(lazy)>
+ {
+ typedef tag::lazy_rolling_mean type;
+ };
+
+ // rolling_mean(immediate) -> immediate_rolling_mean
+ template<>
+ struct as_feature<tag::rolling_mean(immediate)>
+ {
+ typedef tag::immediate_rolling_mean type;
+ };
+
+ // for the purposes of feature-based dependency resolution,
+ // immediate_rolling_mean provides the same feature as rolling_mean
+ template<>
+ struct feature_of<tag::immediate_rolling_mean>
+ : feature_of<tag::rolling_mean>
+ {
+ };
+
+ // for the purposes of feature-based dependency resolution,
+ // lazy_rolling_mean provides the same feature as rolling_mean
+ template<>
+ struct feature_of<tag::lazy_rolling_mean>
+ : feature_of<tag::rolling_mean>
+ {
+ };
+}} // namespace boost::accumulators
+
+#endif \ No newline at end of file
diff --git a/3party/boost/boost/accumulators/statistics/rolling_moment.hpp b/3party/boost/boost/accumulators/statistics/rolling_moment.hpp
new file mode 100644
index 0000000000..f172cee34f
--- /dev/null
+++ b/3party/boost/boost/accumulators/statistics/rolling_moment.hpp
@@ -0,0 +1,113 @@
+///////////////////////////////////////////////////////////////////////////////
+// rolling_moment.hpp
+// Copyright 2005 Eric Niebler.
+// Copyright (C) 2014 Pieter Bastiaan Ober (Integricom).
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_ACCUMULATORS_STATISTICS_ROLLING_MOMENT_HPP_EAN_27_11_2005
+#define BOOST_ACCUMULATORS_STATISTICS_ROLLING_MOMENT_HPP_EAN_27_11_2005
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/accumulators/framework/accumulator_base.hpp>
+#include <boost/accumulators/framework/extractor.hpp>
+#include <boost/accumulators/numeric/functional.hpp>
+#include <boost/accumulators/framework/parameters/sample.hpp>
+#include <boost/accumulators/framework/depends_on.hpp>
+#include <boost/accumulators/statistics_fwd.hpp>
+#include <boost/accumulators/statistics/moment.hpp>
+#include <boost/accumulators/statistics/rolling_count.hpp>
+
+namespace boost { namespace accumulators
+{
+namespace impl
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // rolling_moment_impl
+ template<typename N, typename Sample>
+ struct rolling_moment_impl
+ : accumulator_base
+ {
+ BOOST_MPL_ASSERT_RELATION(N::value, >, 0);
+ // for boost::result_of
+ typedef typename numeric::functional::fdiv<Sample, std::size_t,void,void>::result_type result_type;
+
+ template<typename Args>
+ rolling_moment_impl(Args const &args)
+ : sum_(args[sample | Sample()])
+ {
+ }
+
+ template<typename Args>
+ void operator ()(Args const &args)
+ {
+ if(is_rolling_window_plus1_full(args))
+ {
+ this->sum_ -= numeric::pow(rolling_window_plus1(args).front(), N());
+ }
+ this->sum_ += numeric::pow(args[sample], N());
+ }
+
+ template<typename Args>
+ result_type result(Args const &args) const
+ {
+ return numeric::fdiv(this->sum_, rolling_count(args));
+ }
+
+ private:
+ result_type sum_;
+ };
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+// tag::rolling_moment
+//
+namespace tag
+{
+ template<int N>
+ struct rolling_moment
+ : depends_on< rolling_window_plus1, rolling_count>
+ {
+ /// INTERNAL ONLY
+ ///
+ typedef accumulators::impl::rolling_moment_impl<mpl::int_<N>, mpl::_1> impl;
+
+ #ifdef BOOST_ACCUMULATORS_DOXYGEN_INVOKED
+ /// tag::rolling_window::window_size named parameter
+ static boost::parameter::keyword<tag::rolling_window_size> const window_size;
+ #endif
+ };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// extract::rolling_moment
+//
+namespace extract
+{
+ BOOST_ACCUMULATORS_DEFINE_EXTRACTOR(tag, rolling_moment, (int))
+}
+
+using extract::rolling_moment;
+
+// There is no weighted_rolling_moment (yet)...
+//
+//// So that rolling_moment<N> can be automatically substituted with
+//// weighted_rolling_moment<N> when the weight parameter is non-void
+//template<int N>
+//struct as_weighted_feature<tag::rolling_moment<N> >
+//{
+// typedef tag::weighted_rolling_moment<N> type;
+//};
+//
+//template<int N>
+//struct feature_of<tag::weighted_rolling_moment<N> >
+// : feature_of<tag::rolling_moment<N> >
+//{
+//};
+}} // namespace boost::accumulators
+
+#endif
diff --git a/3party/boost/boost/accumulators/statistics/rolling_sum.hpp b/3party/boost/boost/accumulators/statistics/rolling_sum.hpp
index b41ab39e33..bbb7a8e9a0 100644
--- a/3party/boost/boost/accumulators/statistics/rolling_sum.hpp
+++ b/3party/boost/boost/accumulators/statistics/rolling_sum.hpp
@@ -19,7 +19,6 @@
namespace boost { namespace accumulators
{
-
namespace impl
{
///////////////////////////////////////////////////////////////////////////////
@@ -47,7 +46,7 @@ namespace impl
}
template<typename Args>
- result_type result(Args const &args) const
+ result_type result(Args const & /*args*/) const
{
return this->sum_;
}
@@ -87,7 +86,6 @@ namespace extract
}
using extract::rolling_sum;
-
}} // namespace boost::accumulators
#endif
diff --git a/3party/boost/boost/accumulators/statistics/rolling_variance.hpp b/3party/boost/boost/accumulators/statistics/rolling_variance.hpp
new file mode 100644
index 0000000000..33b3922a50
--- /dev/null
+++ b/3party/boost/boost/accumulators/statistics/rolling_variance.hpp
@@ -0,0 +1,247 @@
+///////////////////////////////////////////////////////////////////////////////
+// rolling_variance.hpp
+// Copyright (C) 2005 Eric Niebler
+// Copyright (C) 2014 Pieter Bastiaan Ober (Integricom).
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_ACCUMULATORS_STATISTICS_ROLLING_VARIANCE_HPP_EAN_15_11_2011
+#define BOOST_ACCUMULATORS_STATISTICS_ROLLING_VARIANCE_HPP_EAN_15_11_2011
+
+#include <boost/accumulators/accumulators.hpp>
+#include <boost/accumulators/statistics/stats.hpp>
+
+#include <boost/mpl/placeholders.hpp>
+#include <boost/accumulators/framework/accumulator_base.hpp>
+#include <boost/accumulators/framework/extractor.hpp>
+#include <boost/accumulators/numeric/functional.hpp>
+#include <boost/accumulators/framework/parameters/sample.hpp>
+#include <boost/accumulators/framework/depends_on.hpp>
+#include <boost/accumulators/statistics_fwd.hpp>
+#include <boost/accumulators/statistics/rolling_mean.hpp>
+#include <boost/accumulators/statistics/rolling_moment.hpp>
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace accumulators
+{
+namespace impl
+{
+ //! Immediate (lazy) calculation of the rolling variance.
+ /*!
+ Calculation of sample variance \f$\sigma_n^2\f$ is done as follows, see also
+ http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance.
+ For a rolling window of size \f$N\f$, when \f$n <= N\f$, the variance is computed according to the formula
+ \f[
+ \sigma_n^2 = \frac{1}{n-1} \sum_{i = 1}^n (x_i - \mu_n)^2.
+ \f]
+ When \f$n > N\f$, the sample variance over the window becomes:
+ \f[
+ \sigma_n^2 = \frac{1}{N-1} \sum_{i = n-N+1}^n (x_i - \mu_n)^2.
+ \f]
+ */
+ ///////////////////////////////////////////////////////////////////////////////
+ // lazy_rolling_variance_impl
+ //
+ template<typename Sample>
+ struct lazy_rolling_variance_impl
+ : accumulator_base
+ {
+ // for boost::result_of
+ typedef typename numeric::functional::fdiv<Sample, std::size_t,void,void>::result_type result_type;
+
+ lazy_rolling_variance_impl(dont_care) {}
+
+ template<typename Args>
+ result_type result(Args const &args) const
+ {
+ result_type mean = rolling_mean(args);
+ size_t nr_samples = rolling_count(args);
+ if (nr_samples < 2) return result_type();
+ return nr_samples*(rolling_moment<2>(args) - mean*mean)/(nr_samples-1);
+ }
+ };
+
+ //! Iterative calculation of the rolling variance.
+ /*!
+ Iterative calculation of sample variance \f$\sigma_n^2\f$ is done as follows, see also
+ http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance.
+ For a rolling window of size \f$N\f$, for the first \f$N\f$ samples, the variance is computed according to the formula
+ \f[
+ \sigma_n^2 = \frac{1}{n-1} \sum_{i = 1}^n (x_i - \mu_n)^2 = \frac{1}{n-1}M_{2,n},
+ \f]
+ where the sum of squares \f$M_{2,n}\f$ can be recursively computed as:
+ \f[
+ M_{2,n} = \sum_{i = 1}^n (x_i - \mu_n)^2 = M_{2,n-1} + (x_n - \mu_n)(x_n - \mu_{n-1}),
+ \f]
+ and the estimate of the sample mean as:
+ \f[
+ \mu_n = \frac{1}{n} \sum_{i = 1}^n x_i = \mu_{n-1} + \frac{1}{n}(x_n - \mu_{n-1}).
+ \f]
+ For further samples, when the rolling window is fully filled with data, one has to take into account that the oldest
+ sample \f$x_{n-N}\f$ is dropped from the window. The sample variance over the window now becomes:
+ \f[
+ \sigma_n^2 = \frac{1}{N-1} \sum_{i = n-N+1}^n (x_i - \mu_n)^2 = \frac{1}{n-1}M_{2,n},
+ \f]
+ where the sum of squares \f$M_{2,n}\f$ now equals:
+ \f[
+ M_{2,n} = \sum_{i = n-N+1}^n (x_i - \mu_n)^2 = M_{2,n-1} + (x_n - \mu_n)(x_n - \mu_{n-1}) - (x_{n-N} - \mu_n)(x_{n-N} - \mu_{n-1}),
+ \f]
+ and the estimated mean is:
+ \f[
+ \mu_n = \frac{1}{N} \sum_{i = n-N+1}^n x_i = \mu_{n-1} + \frac{1}{n}(x_n - x_{n-N}).
+ \f]
+
+ Note that the sample variance is not defined for \f$n <= 1\f$.
+
+ */
+ ///////////////////////////////////////////////////////////////////////////////
+ // immediate_rolling_variance_impl
+ //
+ template<typename Sample>
+ struct immediate_rolling_variance_impl
+ : accumulator_base
+ {
+ // for boost::result_of
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
+
+ template<typename Args>
+ immediate_rolling_variance_impl(Args const &args)
+ : previous_mean_(numeric::fdiv(args[sample | Sample()], numeric::one<std::size_t>::value))
+ , sum_of_squares_(numeric::fdiv(args[sample | Sample()], numeric::one<std::size_t>::value))
+ {
+ }
+
+ template<typename Args>
+ void operator()(Args const &args)
+ {
+ Sample added_sample = args[sample];
+
+ result_type mean = immediate_rolling_mean(args);
+ sum_of_squares_ += (added_sample-mean)*(added_sample-previous_mean_);
+
+ if(is_rolling_window_plus1_full(args))
+ {
+ Sample removed_sample = rolling_window_plus1(args).front();
+ sum_of_squares_ -= (removed_sample-mean)*(removed_sample-previous_mean_);
+ prevent_underflow(sum_of_squares_);
+ }
+ previous_mean_ = mean;
+ }
+
+ template<typename Args>
+ result_type result(Args const &args) const
+ {
+ size_t nr_samples = rolling_count(args);
+ if (nr_samples < 2) return result_type();
+ return numeric::fdiv(sum_of_squares_,(nr_samples-1));
+ }
+
+ private:
+
+ result_type previous_mean_;
+ result_type sum_of_squares_;
+
+ template<typename T>
+ void prevent_underflow(T &non_negative_number,typename boost::enable_if<boost::is_arithmetic<T>,T>::type* = 0)
+ {
+ if (non_negative_number < T(0)) non_negative_number = T(0);
+ }
+ template<typename T>
+ void prevent_underflow(T &non_arithmetic_quantity,typename boost::disable_if<boost::is_arithmetic<T>,T>::type* = 0)
+ {
+ }
+ };
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+// tag:: lazy_rolling_variance
+// tag:: immediate_rolling_variance
+// tag:: rolling_variance
+//
+namespace tag
+{
+ struct lazy_rolling_variance
+ : depends_on< rolling_count, rolling_mean, rolling_moment<2> >
+ {
+ /// INTERNAL ONLY
+ ///
+ typedef accumulators::impl::lazy_rolling_variance_impl< mpl::_1 > impl;
+
+ #ifdef BOOST_ACCUMULATORS_DOXYGEN_INVOKED
+ /// tag::rolling_window::window_size named parameter
+ static boost::parameter::keyword<tag::rolling_window_size> const window_size;
+ #endif
+ };
+
+ struct immediate_rolling_variance
+ : depends_on< rolling_window_plus1, rolling_count, immediate_rolling_mean>
+ {
+ /// INTERNAL ONLY
+ ///
+ typedef accumulators::impl::immediate_rolling_variance_impl< mpl::_1> impl;
+
+ #ifdef BOOST_ACCUMULATORS_DOXYGEN_INVOKED
+ /// tag::rolling_window::window_size named parameter
+ static boost::parameter::keyword<tag::rolling_window_size> const window_size;
+ #endif
+ };
+
+ // make immediate_rolling_variance the default implementation
+ struct rolling_variance : immediate_rolling_variance {};
+} // namespace tag
+
+///////////////////////////////////////////////////////////////////////////////
+// extract::lazy_rolling_variance
+// extract::immediate_rolling_variance
+// extract::rolling_variance
+//
+namespace extract
+{
+ extractor<tag::lazy_rolling_variance> const lazy_rolling_variance = {};
+ extractor<tag::immediate_rolling_variance> const immediate_rolling_variance = {};
+ extractor<tag::rolling_variance> const rolling_variance = {};
+
+ BOOST_ACCUMULATORS_IGNORE_GLOBAL(lazy_rolling_variance)
+ BOOST_ACCUMULATORS_IGNORE_GLOBAL(immediate_rolling_variance)
+ BOOST_ACCUMULATORS_IGNORE_GLOBAL(rolling_variance)
+}
+
+using extract::lazy_rolling_variance;
+using extract::immediate_rolling_variance;
+using extract::rolling_variance;
+
+// rolling_variance(lazy) -> lazy_rolling_variance
+template<>
+struct as_feature<tag::rolling_variance(lazy)>
+{
+ typedef tag::lazy_rolling_variance type;
+};
+
+// rolling_variance(immediate) -> immediate_rolling_variance
+template<>
+struct as_feature<tag::rolling_variance(immediate)>
+{
+ typedef tag::immediate_rolling_variance type;
+};
+
+// for the purposes of feature-based dependency resolution,
+// lazy_rolling_variance provides the same feature as rolling_variance
+template<>
+struct feature_of<tag::lazy_rolling_variance>
+ : feature_of<tag::rolling_variance>
+{
+};
+
+// for the purposes of feature-based dependency resolution,
+// immediate_rolling_variance provides the same feature as rolling_variance
+template<>
+struct feature_of<tag::immediate_rolling_variance>
+ : feature_of<tag::rolling_variance>
+{
+};
+}} // namespace boost::accumulators
+
+#endif
diff --git a/3party/boost/boost/accumulators/statistics/skewness.hpp b/3party/boost/boost/accumulators/statistics/skewness.hpp
index c60eda12b0..c383ec4a6c 100644
--- a/3party/boost/boost/accumulators/statistics/skewness.hpp
+++ b/3party/boost/boost/accumulators/statistics/skewness.hpp
@@ -48,7 +48,7 @@ namespace impl
: accumulator_base
{
// for boost::result_of
- typedef typename numeric::functional::average<Sample, Sample>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, Sample>::result_type result_type;
skewness_impl(dont_care)
{
@@ -57,7 +57,7 @@ namespace impl
template<typename Args>
result_type result(Args const &args) const
{
- return numeric::average(
+ return numeric::fdiv(
accumulators::moment<3>(args)
- 3. * accumulators::moment<2>(args) * mean(args)
+ 2. * mean(args) * mean(args) * mean(args)
diff --git a/3party/boost/boost/accumulators/statistics/tail_mean.hpp b/3party/boost/boost/accumulators/statistics/tail_mean.hpp
index 323eeb0f91..67dae37b50 100644
--- a/3party/boost/boost/accumulators/statistics/tail_mean.hpp
+++ b/3party/boost/boost/accumulators/statistics/tail_mean.hpp
@@ -62,7 +62,7 @@ namespace impl
struct coherent_tail_mean_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
// for boost::result_of
typedef float_type result_type;
@@ -82,10 +82,10 @@ namespace impl
extractor<tag::non_coherent_tail_mean<LeftRight> > const some_non_coherent_tail_mean = {};
return some_non_coherent_tail_mean(args)
- + numeric::average(quantile(args), n)
+ + numeric::fdiv(quantile(args), n)
* (
( is_same<LeftRight, left>::value ) ? args[quantile_probability] : 1. - args[quantile_probability]
- - numeric::average(n, count(args))
+ - numeric::fdiv(n, count(args))
);
}
};
@@ -117,7 +117,7 @@ namespace impl
struct non_coherent_tail_mean_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
// for boost::result_of
typedef float_type result_type;
@@ -136,7 +136,7 @@ namespace impl
// If n is in a valid range, return result, otherwise return NaN or throw exception
if (n <= static_cast<std::size_t>(tail(args).size()))
- return numeric::average(
+ return numeric::fdiv(
std::accumulate(
tail(args).begin()
, tail(args).begin() + n
diff --git a/3party/boost/boost/accumulators/statistics/tail_variate_means.hpp b/3party/boost/boost/accumulators/statistics/tail_variate_means.hpp
index 98991e217b..d34d4abcd5 100644
--- a/3party/boost/boost/accumulators/statistics/tail_variate_means.hpp
+++ b/3party/boost/boost/accumulators/statistics/tail_variate_means.hpp
@@ -79,7 +79,7 @@ namespace impl
struct tail_variate_means_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
typedef std::vector<float_type> array_type;
// for boost::result_of
typedef iterator_range<typename array_type::iterator> result_type;
diff --git a/3party/boost/boost/accumulators/statistics/variance.hpp b/3party/boost/boost/accumulators/statistics/variance.hpp
index 81807a2621..baac55696b 100644
--- a/3party/boost/boost/accumulators/statistics/variance.hpp
+++ b/3party/boost/boost/accumulators/statistics/variance.hpp
@@ -42,7 +42,7 @@ namespace impl
: accumulator_base
{
// for boost::result_of
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
lazy_variance_impl(dont_care) {}
@@ -85,11 +85,11 @@ namespace impl
: accumulator_base
{
// for boost::result_of
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
template<typename Args>
variance_impl(Args const &args)
- : variance(numeric::average(args[sample | Sample()], numeric::one<std::size_t>::value))
+ : variance(numeric::fdiv(args[sample | Sample()], numeric::one<std::size_t>::value))
{
}
@@ -103,8 +103,8 @@ namespace impl
extractor<MeanFeature> mean;
result_type tmp = args[parameter::keyword<Tag>::get()] - mean(args);
this->variance =
- numeric::average(this->variance * (cnt - 1), cnt)
- + numeric::average(tmp * tmp, cnt - 1);
+ numeric::fdiv(this->variance * (cnt - 1), cnt)
+ + numeric::fdiv(tmp * tmp, cnt - 1);
}
}
diff --git a/3party/boost/boost/accumulators/statistics/weighted_covariance.hpp b/3party/boost/boost/accumulators/statistics/weighted_covariance.hpp
index 83585b1b65..25d613c120 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_covariance.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_covariance.hpp
@@ -57,8 +57,8 @@ namespace impl
struct weighted_covariance_impl
: accumulator_base
{
- typedef typename numeric::functional::multiplies<Weight, typename numeric::functional::average<Sample, std::size_t>::result_type>::result_type weighted_sample_type;
- typedef typename numeric::functional::multiplies<Weight, typename numeric::functional::average<VariateType, std::size_t>::result_type>::result_type weighted_variate_type;
+ typedef typename numeric::functional::multiplies<Weight, typename numeric::functional::fdiv<Sample, std::size_t>::result_type>::result_type weighted_sample_type;
+ typedef typename numeric::functional::multiplies<Weight, typename numeric::functional::fdiv<VariateType, std::size_t>::result_type>::result_type weighted_variate_type;
// for boost::result_of
typedef typename numeric::functional::outer_product<weighted_sample_type, weighted_variate_type>::result_type result_type;
@@ -66,9 +66,9 @@ namespace impl
weighted_covariance_impl(Args const &args)
: cov_(
numeric::outer_product(
- numeric::average(args[sample | Sample()], (std::size_t)1)
+ numeric::fdiv(args[sample | Sample()], (std::size_t)1)
* numeric::one<Weight>::value
- , numeric::average(args[parameter::keyword<VariateTag>::get() | VariateType()], (std::size_t)1)
+ , numeric::fdiv(args[parameter::keyword<VariateTag>::get() | VariateType()], (std::size_t)1)
* numeric::one<Weight>::value
)
)
diff --git a/3party/boost/boost/accumulators/statistics/weighted_density.hpp b/3party/boost/boost/accumulators/statistics/weighted_density.hpp
index 68dc639377..1407368016 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_density.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_density.hpp
@@ -50,7 +50,7 @@ namespace impl
struct weighted_density_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Weight, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Weight, std::size_t>::result_type float_type;
typedef std::vector<std::pair<float_type, float_type> > histogram_type;
typedef std::vector<float_type> array_type;
// for boost::result_of
@@ -66,8 +66,8 @@ namespace impl
, histogram(
num_bins + 2
, std::make_pair(
- numeric::average(args[sample | Sample()],(std::size_t)1)
- , numeric::average(args[sample | Sample()],(std::size_t)1)
+ numeric::fdiv(args[sample | Sample()],(std::size_t)1)
+ , numeric::fdiv(args[sample | Sample()],(std::size_t)1)
)
)
, is_dirty(true)
@@ -92,9 +92,9 @@ namespace impl
// Store their lower bounds (bin_positions) and fill the bins with the cached samples (samples_in_bin).
if (cnt == this->cache_size)
{
- float_type minimum = numeric::average((min)(args),(std::size_t)1);
- float_type maximum = numeric::average((max)(args),(std::size_t)1);
- float_type bin_size = numeric::average(maximum - minimum, this->num_bins);
+ float_type minimum = numeric::fdiv((min)(args),(std::size_t)1);
+ float_type maximum = numeric::fdiv((max)(args),(std::size_t)1);
+ float_type bin_size = numeric::fdiv(maximum - minimum, this->num_bins);
// determine bin positions (their lower bounds)
for (std::size_t i = 0; i < this->num_bins + 2; ++i)
@@ -163,7 +163,7 @@ namespace impl
for (std::size_t i = 0; i < this->num_bins + 2; ++i)
{
- this->histogram[i] = std::make_pair(this->bin_positions[i], numeric::average(this->samples_in_bin[i], sum_of_weights(args)));
+ this->histogram[i] = std::make_pair(this->bin_positions[i], numeric::fdiv(this->samples_in_bin[i], sum_of_weights(args)));
}
}
diff --git a/3party/boost/boost/accumulators/statistics/weighted_extended_p_square.hpp b/3party/boost/boost/accumulators/statistics/weighted_extended_p_square.hpp
index 6116029825..ac857e056d 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_extended_p_square.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_extended_p_square.hpp
@@ -67,7 +67,7 @@ namespace impl
: accumulator_base
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
- typedef typename numeric::functional::average<weighted_sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, std::size_t>::result_type float_type;
typedef std::vector<float_type> array_type;
// for boost::result_of
typedef iterator_range<
diff --git a/3party/boost/boost/accumulators/statistics/weighted_kurtosis.hpp b/3party/boost/boost/accumulators/statistics/weighted_kurtosis.hpp
index d51db5cd38..3fd4ed7b41 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_kurtosis.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_kurtosis.hpp
@@ -52,7 +52,7 @@ namespace impl
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
// for boost::result_of
- typedef typename numeric::functional::average<weighted_sample, weighted_sample>::result_type result_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, weighted_sample>::result_type result_type;
weighted_kurtosis_impl(dont_care)
{
@@ -61,7 +61,7 @@ namespace impl
template<typename Args>
result_type result(Args const &args) const
{
- return numeric::average(
+ return numeric::fdiv(
accumulators::weighted_moment<4>(args)
- 4. * accumulators::weighted_moment<3>(args) * weighted_mean(args)
+ 6. * accumulators::weighted_moment<2>(args) * weighted_mean(args) * weighted_mean(args)
diff --git a/3party/boost/boost/accumulators/statistics/weighted_mean.hpp b/3party/boost/boost/accumulators/statistics/weighted_mean.hpp
index c8d651353a..a80ef0984c 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_mean.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_mean.hpp
@@ -36,7 +36,7 @@ namespace impl
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
// for boost::result_of
- typedef typename numeric::functional::average<weighted_sample, Weight>::result_type result_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, Weight>::result_type result_type;
weighted_mean_impl(dont_care) {}
@@ -53,7 +53,7 @@ namespace impl
extractor<weighted_sum_tag> const some_weighted_sum = {};
- return numeric::average(some_weighted_sum(args), sum_of_weights(args));
+ return numeric::fdiv(some_weighted_sum(args), sum_of_weights(args));
}
};
@@ -66,12 +66,12 @@ namespace impl
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
// for boost::result_of
- typedef typename numeric::functional::average<weighted_sample, Weight>::result_type result_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, Weight>::result_type result_type;
template<typename Args>
immediate_weighted_mean_impl(Args const &args)
: mean(
- numeric::average(
+ numeric::fdiv(
args[parameter::keyword<Tag>::get() | Sample()]
* numeric::one<Weight>::value
, numeric::one<Weight>::value
@@ -89,7 +89,7 @@ namespace impl
Weight w_sum = sum_of_weights(args);
Weight w = args[weight];
weighted_sample const &s = args[parameter::keyword<Tag>::get()] * w;
- this->mean = numeric::average(this->mean * (w_sum - w) + s, w_sum);
+ this->mean = numeric::fdiv(this->mean * (w_sum - w) + s, w_sum);
}
result_type result(dont_care) const
diff --git a/3party/boost/boost/accumulators/statistics/weighted_median.hpp b/3party/boost/boost/accumulators/statistics/weighted_median.hpp
index b8b94f9f9f..ed7cadb331 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_median.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_median.hpp
@@ -40,7 +40,7 @@ namespace impl
: accumulator_base
{
// for boost::result_of
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type result_type;
weighted_median_impl(dont_care) {}
@@ -65,7 +65,7 @@ namespace impl
struct with_density_weighted_median_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Sample, std::size_t>::result_type float_type;
typedef std::vector<std::pair<float_type, float_type> > histogram_type;
typedef iterator_range<typename histogram_type::iterator> range_type;
// for boost::result_of
@@ -73,7 +73,7 @@ namespace impl
template<typename Args>
with_density_weighted_median_impl(Args const &args)
- : sum(numeric::average(args[sample | Sample()], (std::size_t)1))
+ : sum(numeric::fdiv(args[sample | Sample()], (std::size_t)1))
, is_dirty(true)
{
}
@@ -99,7 +99,7 @@ namespace impl
++it;
}
--it;
- float_type over = numeric::average(this->sum - 0.5 * cnt, it->second * cnt);
+ float_type over = numeric::fdiv(this->sum - 0.5 * cnt, it->second * cnt);
this->median = it->first * over + (it + 1)->first * ( 1. - over );
}
@@ -127,7 +127,7 @@ namespace impl
: accumulator_base
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
- typedef typename numeric::functional::average<weighted_sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, std::size_t>::result_type float_type;
typedef std::vector<std::pair<float_type, float_type> > histogram_type;
typedef iterator_range<typename histogram_type::iterator> range_type;
// for boost::result_of
@@ -156,7 +156,7 @@ namespace impl
{
++it;
}
- float_type over = numeric::average(it->second - 0.5, it->second - (it - 1)->second);
+ float_type over = numeric::fdiv(it->second - 0.5, it->second - (it - 1)->second);
this->median = it->first * over + (it + 1)->first * ( 1. - over );
}
diff --git a/3party/boost/boost/accumulators/statistics/weighted_moment.hpp b/3party/boost/boost/accumulators/statistics/weighted_moment.hpp
index f49c362d95..011701c704 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_moment.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_moment.hpp
@@ -40,7 +40,7 @@ namespace impl
BOOST_MPL_ASSERT_RELATION(N::value, >, 0);
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
// for boost::result_of
- typedef typename numeric::functional::average<weighted_sample, Weight>::result_type result_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, Weight>::result_type result_type;
template<typename Args>
weighted_moment_impl(Args const &args)
@@ -57,7 +57,7 @@ namespace impl
template<typename Args>
result_type result(Args const &args) const
{
- return numeric::average(this->sum, sum_of_weights(args));
+ return numeric::fdiv(this->sum, sum_of_weights(args));
}
private:
diff --git a/3party/boost/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp b/3party/boost/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp
index de707f5cb5..ce750ed1f5 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp
@@ -53,7 +53,7 @@ namespace impl
: accumulator_base
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
- typedef typename numeric::functional::average<weighted_sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, std::size_t>::result_type float_type;
typedef std::vector<std::pair<float_type, float_type> > histogram_type;
typedef std::vector<float_type> array_type;
// for boost::result_of
@@ -153,7 +153,7 @@ namespace impl
for (std::size_t i = 1; i < b + 1; ++i)
{
this->desired_positions[i] = this->actual_positions[0]
- + numeric::average((i-1) * (sum_of_weights(args) - this->actual_positions[0]), b);
+ + numeric::fdiv((i-1) * (sum_of_weights(args) - this->actual_positions[0]), b);
}
// adjust heights of markers 2 to num_cells if necessary
@@ -214,7 +214,7 @@ namespace impl
for (std::size_t i = 0; i < this->histogram.size(); ++i)
{
- this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], sum_of_weights(args)));
+ this->histogram[i] = std::make_pair(this->heights[i], numeric::fdiv(this->actual_positions[i], sum_of_weights(args)));
}
}
diff --git a/3party/boost/boost/accumulators/statistics/weighted_p_square_quantile.hpp b/3party/boost/boost/accumulators/statistics/weighted_p_square_quantile.hpp
index 73774abfb7..2ebc7b1845 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_p_square_quantile.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_p_square_quantile.hpp
@@ -55,7 +55,7 @@ namespace impl {
: accumulator_base
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
- typedef typename numeric::functional::average<weighted_sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, std::size_t>::result_type float_type;
typedef array<float_type, 5> array_type;
// for boost::result_of
typedef float_type result_type;
diff --git a/3party/boost/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp b/3party/boost/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
index 8ee2c56005..418b38cfe0 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
@@ -56,16 +56,16 @@ namespace impl
: accumulator_base
{
typedef typename numeric::functional::multiplies<Weight, Sample>::result_type weighted_sample;
- typedef typename numeric::functional::average<weighted_sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, std::size_t>::result_type float_type;
// for boost::result_of
typedef boost::tuple<float_type, float_type, float_type> result_type;
template<typename Args>
weighted_peaks_over_threshold_impl(Args const &args)
: sign_((is_same<LeftRight, left>::value) ? -1 : 1)
- , mu_(sign_ * numeric::average(args[sample | Sample()], (std::size_t)1))
- , sigma2_(numeric::average(args[sample | Sample()], (std::size_t)1))
- , w_sum_(numeric::average(args[weight | Weight()], (std::size_t)1))
+ , mu_(sign_ * numeric::fdiv(args[sample | Sample()], (std::size_t)1))
+ , sigma2_(numeric::fdiv(args[sample | Sample()], (std::size_t)1))
+ , w_sum_(numeric::fdiv(args[weight | Weight()], (std::size_t)1))
, threshold_(sign_ * args[pot_threshold_value])
, fit_parameters_(boost::make_tuple(0., 0., 0.))
, is_dirty_(true)
@@ -92,13 +92,13 @@ namespace impl
{
this->is_dirty_ = false;
- this->mu_ = this->sign_ * numeric::average(this->mu_, this->w_sum_);
- this->sigma2_ = numeric::average(this->sigma2_, this->w_sum_);
+ this->mu_ = this->sign_ * numeric::fdiv(this->mu_, this->w_sum_);
+ this->sigma2_ = numeric::fdiv(this->sigma2_, this->w_sum_);
this->sigma2_ -= this->mu_ * this->mu_;
- float_type threshold_probability = numeric::average(sum_of_weights(args) - this->w_sum_, sum_of_weights(args));
+ float_type threshold_probability = numeric::fdiv(sum_of_weights(args) - this->w_sum_, sum_of_weights(args));
- float_type tmp = numeric::average(( this->mu_ - this->threshold_ )*( this->mu_ - this->threshold_ ), this->sigma2_);
+ float_type tmp = numeric::fdiv(( this->mu_ - this->threshold_ )*( this->mu_ - this->threshold_ ), this->sigma2_);
float_type xi_hat = 0.5 * ( 1. - tmp );
float_type beta_hat = 0.5 * ( this->mu_ - this->threshold_ ) * ( 1. + tmp );
float_type beta_bar = beta_hat * std::pow(1. - threshold_probability, xi_hat);
@@ -135,15 +135,15 @@ namespace impl
: accumulator_base
{
typedef typename numeric::functional::multiplies<Weight, Sample>::result_type weighted_sample;
- typedef typename numeric::functional::average<weighted_sample, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, std::size_t>::result_type float_type;
// for boost::result_of
typedef boost::tuple<float_type, float_type, float_type> result_type;
template<typename Args>
weighted_peaks_over_threshold_prob_impl(Args const &args)
: sign_((is_same<LeftRight, left>::value) ? -1 : 1)
- , mu_(sign_ * numeric::average(args[sample | Sample()], (std::size_t)1))
- , sigma2_(numeric::average(args[sample | Sample()], (std::size_t)1))
+ , mu_(sign_ * numeric::fdiv(args[sample | Sample()], (std::size_t)1))
+ , sigma2_(numeric::fdiv(args[sample | Sample()], (std::size_t)1))
, threshold_probability_(args[pot_threshold_probability])
, fit_parameters_(boost::make_tuple(0., 0., 0.))
, is_dirty_(true)
@@ -200,14 +200,14 @@ namespace impl
float_type u = *(tail(args).begin() + n - 1) * this->sign_;
- this->mu_ = this->sign_ * numeric::average(this->mu_, sum);
- this->sigma2_ = numeric::average(this->sigma2_, sum);
+ this->mu_ = this->sign_ * numeric::fdiv(this->mu_, sum);
+ this->sigma2_ = numeric::fdiv(this->sigma2_, sum);
this->sigma2_ -= this->mu_ * this->mu_;
if (is_same<LeftRight, left>::value)
this->threshold_probability_ = 1. - this->threshold_probability_;
- float_type tmp = numeric::average(( this->mu_ - u )*( this->mu_ - u ), this->sigma2_);
+ float_type tmp = numeric::fdiv(( this->mu_ - u )*( this->mu_ - u ), this->sigma2_);
float_type xi_hat = 0.5 * ( 1. - tmp );
float_type beta_hat = 0.5 * ( this->mu_ - u ) * ( 1. + tmp );
float_type beta_bar = beta_hat * std::pow(1. - threshold_probability_, xi_hat);
diff --git a/3party/boost/boost/accumulators/statistics/weighted_skewness.hpp b/3party/boost/boost/accumulators/statistics/weighted_skewness.hpp
index 6ccbc45ca1..a3ac3876f5 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_skewness.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_skewness.hpp
@@ -51,14 +51,14 @@ namespace impl
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
// for boost::result_of
- typedef typename numeric::functional::average<weighted_sample, weighted_sample>::result_type result_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, weighted_sample>::result_type result_type;
weighted_skewness_impl(dont_care) {}
template<typename Args>
result_type result(Args const &args) const
{
- return numeric::average(
+ return numeric::fdiv(
accumulators::weighted_moment<3>(args)
- 3. * accumulators::weighted_moment<2>(args) * weighted_mean(args)
+ 2. * weighted_mean(args) * weighted_mean(args) * weighted_mean(args)
diff --git a/3party/boost/boost/accumulators/statistics/weighted_tail_mean.hpp b/3party/boost/boost/accumulators/statistics/weighted_tail_mean.hpp
index 5bdee8aadc..bae8530674 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_tail_mean.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_tail_mean.hpp
@@ -82,9 +82,9 @@ namespace impl
: accumulator_base
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
- typedef typename numeric::functional::average<Weight, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Weight, std::size_t>::result_type float_type;
// for boost::result_of
- typedef typename numeric::functional::average<weighted_sample, std::size_t>::result_type result_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, std::size_t>::result_type result_type;
non_coherent_weighted_tail_mean_impl(dont_care) {}
@@ -120,7 +120,7 @@ namespace impl
}
}
- return numeric::average(
+ return numeric::fdiv(
std::inner_product(
tail(args).begin()
, tail(args).begin() + n
diff --git a/3party/boost/boost/accumulators/statistics/weighted_tail_quantile.hpp b/3party/boost/boost/accumulators/statistics/weighted_tail_quantile.hpp
index 88c32d1f61..b143457dd0 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_tail_quantile.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_tail_quantile.hpp
@@ -66,7 +66,7 @@ namespace impl
struct weighted_tail_quantile_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Weight, std::size_t>::result_type float_type;
+ typedef typename numeric::functional::fdiv<Weight, std::size_t>::result_type float_type;
// for boost::result_of
typedef Sample result_type;
diff --git a/3party/boost/boost/accumulators/statistics/weighted_tail_variate_means.hpp b/3party/boost/boost/accumulators/statistics/weighted_tail_variate_means.hpp
index ff08ae5060..2c9078335d 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_tail_variate_means.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_tail_variate_means.hpp
@@ -107,8 +107,8 @@ namespace impl
struct weighted_tail_variate_means_impl
: accumulator_base
{
- typedef typename numeric::functional::average<Weight, Weight>::result_type float_type;
- typedef typename numeric::functional::average<typename numeric::functional::multiplies<VariateType, Weight>::result_type, Weight>::result_type array_type;
+ typedef typename numeric::functional::fdiv<Weight, Weight>::result_type float_type;
+ typedef typename numeric::functional::fdiv<typename numeric::functional::multiplies<VariateType, Weight>::result_type, Weight>::result_type array_type;
// for boost::result_of
typedef iterator_range<typename array_type::iterator> result_type;
diff --git a/3party/boost/boost/accumulators/statistics/weighted_variance.hpp b/3party/boost/boost/accumulators/statistics/weighted_variance.hpp
index bb3bc0e3df..bc199affa4 100644
--- a/3party/boost/boost/accumulators/statistics/weighted_variance.hpp
+++ b/3party/boost/boost/accumulators/statistics/weighted_variance.hpp
@@ -41,7 +41,7 @@ namespace impl
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
// for boost::result_of
- typedef typename numeric::functional::average<weighted_sample, Weight>::result_type result_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, Weight>::result_type result_type;
lazy_weighted_variance_impl(dont_care) {}
@@ -73,11 +73,11 @@ namespace impl
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
// for boost::result_of
- typedef typename numeric::functional::average<weighted_sample, Weight>::result_type result_type;
+ typedef typename numeric::functional::fdiv<weighted_sample, Weight>::result_type result_type;
template<typename Args>
weighted_variance_impl(Args const &args)
- : weighted_variance(numeric::average(args[sample | Sample()], numeric::one<Weight>::value))
+ : weighted_variance(numeric::fdiv(args[sample | Sample()], numeric::one<Weight>::value))
{
}
@@ -93,8 +93,8 @@ namespace impl
result_type tmp = args[parameter::keyword<Tag>::get()] - some_mean(args);
this->weighted_variance =
- numeric::average(this->weighted_variance * (sum_of_weights(args) - args[weight]), sum_of_weights(args))
- + numeric::average(tmp * tmp * args[weight], sum_of_weights(args) - args[weight] );
+ numeric::fdiv(this->weighted_variance * (sum_of_weights(args) - args[weight]), sum_of_weights(args))
+ + numeric::fdiv(tmp * tmp * args[weight], sum_of_weights(args) - args[weight] );
}
}
diff --git a/3party/boost/boost/algorithm/clamp.hpp b/3party/boost/boost/algorithm/clamp.hpp
index ae98d15d2f..7bfa47ec9b 100644
--- a/3party/boost/boost/algorithm/clamp.hpp
+++ b/3party/boost/boost/algorithm/clamp.hpp
@@ -31,8 +31,8 @@
namespace boost { namespace algorithm {
/// \fn clamp ( T const& val,
-/// typename boost::mpl::identity<T>::type const& lo,
-/// typename boost::mpl::identity<T>::type const& hi, Pred p )
+/// typename boost::mpl::identity<T>::type const & lo,
+/// typename boost::mpl::identity<T>::type const & hi, Pred p )
/// \return the value "val" brought into the range [ lo, hi ]
/// using the comparison predicate p.
/// If p ( val, lo ) return lo.
@@ -56,8 +56,8 @@ namespace boost { namespace algorithm {
/// \fn clamp ( T const& val,
-/// typename boost::mpl::identity<T>::type const& lo,
-/// typename boost::mpl::identity<T>::type const& hi )
+/// typename boost::mpl::identity<T>::type const & lo,
+/// typename boost::mpl::identity<T>::type const & hi )
/// \return the value "val" brought into the range [ lo, hi ].
/// If the value is less than lo, return lo.
/// If the value is greater than "hi", return hi.
@@ -76,8 +76,8 @@ namespace boost { namespace algorithm {
}
/// \fn clamp_range ( InputIterator first, InputIterator last, OutputIterator out,
-/// std::iterator_traits<InputIterator>::value_type lo,
-/// std::iterator_traits<InputIterator>::value_type hi )
+/// std::iterator_traits<InputIterator>::value_type const & lo,
+/// std::iterator_traits<InputIterator>::value_type const & hi )
/// \return clamp the sequence of values [first, last) into [ lo, hi ]
///
/// \param first The start of the range of values
@@ -88,8 +88,8 @@ namespace boost { namespace algorithm {
///
template<typename InputIterator, typename OutputIterator>
OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out,
- typename std::iterator_traits<InputIterator>::value_type lo,
- typename std::iterator_traits<InputIterator>::value_type hi )
+ typename std::iterator_traits<InputIterator>::value_type const & lo,
+ typename std::iterator_traits<InputIterator>::value_type const & hi )
{
// this could also be written with bind and std::transform
while ( first != last )
@@ -98,8 +98,8 @@ namespace boost { namespace algorithm {
}
/// \fn clamp_range ( const Range &r, OutputIterator out,
-/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type lo,
-/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type hi )
+/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & lo,
+/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & hi )
/// \return clamp the sequence of values [first, last) into [ lo, hi ]
///
/// \param r The range of values to be clamped
@@ -110,16 +110,16 @@ namespace boost { namespace algorithm {
template<typename Range, typename OutputIterator>
typename boost::disable_if_c<boost::is_same<Range, OutputIterator>::value, OutputIterator>::type
clamp_range ( const Range &r, OutputIterator out,
- typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type lo,
- typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type hi )
+ typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & lo,
+ typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & hi )
{
return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi );
}
/// \fn clamp_range ( InputIterator first, InputIterator last, OutputIterator out,
-/// std::iterator_traits<InputIterator>::value_type lo,
-/// std::iterator_traits<InputIterator>::value_type hi, Pred p )
+/// std::iterator_traits<InputIterator>::value_type const & lo,
+/// std::iterator_traits<InputIterator>::value_type const & hi, Pred p )
/// \return clamp the sequence of values [first, last) into [ lo, hi ]
/// using the comparison predicate p.
///
@@ -134,8 +134,8 @@ namespace boost { namespace algorithm {
///
template<typename InputIterator, typename OutputIterator, typename Pred>
OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out,
- typename std::iterator_traits<InputIterator>::value_type lo,
- typename std::iterator_traits<InputIterator>::value_type hi, Pred p )
+ typename std::iterator_traits<InputIterator>::value_type const & lo,
+ typename std::iterator_traits<InputIterator>::value_type const & hi, Pred p )
{
// this could also be written with bind and std::transform
while ( first != last )
@@ -144,8 +144,8 @@ namespace boost { namespace algorithm {
}
/// \fn clamp_range ( const Range &r, OutputIterator out,
-/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type lo,
-/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type hi,
+/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & lo,
+/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & hi,
/// Pred p )
/// \return clamp the sequence of values [first, last) into [ lo, hi ]
/// using the comparison predicate p.
@@ -162,8 +162,8 @@ namespace boost { namespace algorithm {
template<typename Range, typename OutputIterator, typename Pred>
typename boost::disable_if_c<boost::is_same<Range, OutputIterator>::value, OutputIterator>::type
clamp_range ( const Range &r, OutputIterator out,
- typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type lo,
- typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type hi,
+ typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & lo,
+ typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & hi,
Pred p )
{
return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi, p );
diff --git a/3party/boost/boost/algorithm/cxx11/iota.hpp b/3party/boost/boost/algorithm/cxx11/iota.hpp
index b4f0dafa6d..eb32390b0f 100644
--- a/3party/boost/boost/algorithm/cxx11/iota.hpp
+++ b/3party/boost/boost/algorithm/cxx11/iota.hpp
@@ -63,8 +63,8 @@ void iota ( Range &r, T value )
template <typename OutputIterator, typename T>
OutputIterator iota_n ( OutputIterator out, T value, std::size_t n )
{
- while ( n-- > 0 )
- *out++ = value++;
+ for ( ; n > 0; --n, ++value )
+ *out++ = value;
return out;
}
diff --git a/3party/boost/boost/algorithm/cxx11/is_permutation.hpp b/3party/boost/boost/algorithm/cxx11/is_permutation.hpp
index e1273f1d80..9b3bc220fa 100644
--- a/3party/boost/boost/algorithm/cxx11/is_permutation.hpp
+++ b/3party/boost/boost/algorithm/cxx11/is_permutation.hpp
@@ -9,8 +9,8 @@
/// \brief Is a sequence a permutation of another sequence
/// \author Marshall Clow
-#ifndef BOOST_ALGORITHM_IS_PERMUTATION_HPP
-#define BOOST_ALGORITHM_IS_PERMUTATION_HPP
+#ifndef BOOST_ALGORITHM_IS_PERMUTATION11_HPP
+#define BOOST_ALGORITHM_IS_PERMUTATION11_HPP
#include <algorithm> // for std::less, tie, mismatch and is_permutation (if available)
#include <utility> // for std::make_pair
@@ -21,7 +21,6 @@
#include <boost/range/end.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/tr1/tr1/tuple> // for tie
namespace boost { namespace algorithm {
@@ -121,7 +120,6 @@ bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, BinaryPredicate p )
{
// Skip the common prefix (if any)
-// std::tie (first1, first2) = std::mismatch (first1, last1, first2, p);
std::pair<ForwardIterator1, ForwardIterator2> eq = std::mismatch (first1, last1, first2, p);
first1 = eq.first;
first2 = eq.second;
@@ -165,56 +163,6 @@ bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIt
#endif
-/// \fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last,
-/// ForwardIterator2 first2, ForwardIterator2 last2 )
-/// \brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2
-///
-/// \param first1 The start of the input sequence
-/// \param last2 One past the end of the input sequence
-/// \param first2 The start of the second sequence
-/// \param last1 One past the end of the second sequence
-/// \note This function is part of the C++2011 standard library.
-/// We will use the standard one if it is available,
-/// otherwise we have our own implementation.
-template< class ForwardIterator1, class ForwardIterator2 >
-bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2 )
-{
-// How should I deal with the idea that ForwardIterator1::value_type
-// and ForwardIterator2::value_type could be different? Define my own comparison predicate?
- return boost::algorithm::detail::is_permutation_tag (
- first1, last1, first2, last2,
- std::equal_to<typename std::iterator_traits<ForwardIterator1>::value_type> (),
- typename std::iterator_traits<ForwardIterator1>::iterator_category (),
- typename std::iterator_traits<ForwardIterator2>::iterator_category ());
-}
-
-/// \fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last,
-/// ForwardIterator2 first2, ForwardIterator2 last2,
-/// BinaryPredicate p )
-/// \brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2
-///
-/// \param first1 The start of the input sequence
-/// \param last1 One past the end of the input sequence
-/// \param first2 The start of the second sequence
-/// \param last2 One past the end of the second sequence
-/// \param pred The predicate to compare elements with
-///
-/// \note This function is part of the C++2011 standard library.
-/// We will use the standard one if it is available,
-/// otherwise we have our own implementation.
-template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >
-bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2,
- BinaryPredicate pred )
-{
- return boost::algorithm::detail::is_permutation_tag (
- first1, last1, first2, last2, pred,
- typename std::iterator_traits<ForwardIterator1>::iterator_category (),
- typename std::iterator_traits<ForwardIterator2>::iterator_category ());
-}
-
-
/// \fn is_permutation ( const Range &r, ForwardIterator first2 )
/// \brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2
@@ -245,4 +193,4 @@ is_permutation ( const Range &r, ForwardIterator first2, BinaryPredicate pred )
}}
-#endif // BOOST_ALGORITHM_IS_PERMUTATION_HPP
+#endif // BOOST_ALGORITHM_IS_PERMUTATION11_HPP
diff --git a/3party/boost/boost/algorithm/cxx14/equal.hpp b/3party/boost/boost/algorithm/cxx14/equal.hpp
index d10c09604a..cfc62d5f10 100644
--- a/3party/boost/boost/algorithm/cxx14/equal.hpp
+++ b/3party/boost/boost/algorithm/cxx14/equal.hpp
@@ -12,41 +12,41 @@
#ifndef BOOST_ALGORITHM_EQUAL_HPP
#define BOOST_ALGORITHM_EQUAL_HPP
-#include <algorithm> // for std::equal
-#include <functional> // for std::equal_to
+#include <algorithm> // for std::equal
+#include <functional> // for std::equal_to
namespace boost { namespace algorithm {
namespace detail {
- template <class T1, class T2>
- struct eq : public std::binary_function<T1, T2, bool> {
- bool operator () ( const T1& v1, const T2& v2 ) const { return v1 == v2 ;}
- };
-
- template <class RandomAccessIterator1, class RandomAccessIterator2, class BinaryPredicate>
- bool equal ( RandomAccessIterator1 first1, RandomAccessIterator1 last1,
- RandomAccessIterator2 first2, RandomAccessIterator2 last2, BinaryPredicate pred,
- std::random_access_iterator_tag, std::random_access_iterator_tag )
- {
- // Random-access iterators let is check the sizes in constant time
- if ( std::distance ( first1, last1 ) != std::distance ( first2, last2 ))
- return false;
- // If we know that the sequences are the same size, the original version is fine
- return std::equal ( first1, last1, first2, pred );
- }
+ template <class T1, class T2>
+ struct eq : public std::binary_function<T1, T2, bool> {
+ bool operator () ( const T1& v1, const T2& v2 ) const { return v1 == v2 ;}
+ };
+
+ template <class RandomAccessIterator1, class RandomAccessIterator2, class BinaryPredicate>
+ bool equal ( RandomAccessIterator1 first1, RandomAccessIterator1 last1,
+ RandomAccessIterator2 first2, RandomAccessIterator2 last2, BinaryPredicate pred,
+ std::random_access_iterator_tag, std::random_access_iterator_tag )
+ {
+ // Random-access iterators let is check the sizes in constant time
+ if ( std::distance ( first1, last1 ) != std::distance ( first2, last2 ))
+ return false;
+ // If we know that the sequences are the same size, the original version is fine
+ return std::equal ( first1, last1, first2, pred );
+ }
- template <class InputIterator1, class InputIterator2, class BinaryPredicate>
- bool equal ( InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred,
- std::input_iterator_tag, std::input_iterator_tag )
- {
- for (; first1 != last1 && first2 != last2; ++first1, ++first2 )
- if ( !pred(*first1, *first2 ))
- return false;
+ template <class InputIterator1, class InputIterator2, class BinaryPredicate>
+ bool equal ( InputIterator1 first1, InputIterator1 last1,
+ InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred,
+ std::input_iterator_tag, std::input_iterator_tag )
+ {
+ for (; first1 != last1 && first2 != last2; ++first1, ++first2 )
+ if ( !pred(*first1, *first2 ))
+ return false;
- return first1 == last1 && first2 == last2;
- }
+ return first1 == last1 && first2 == last2;
+ }
}
/// \fn equal ( InputIterator1 first1, InputIterator1 last1,
@@ -63,10 +63,10 @@ template <class InputIterator1, class InputIterator2, class BinaryPredicate>
bool equal ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred )
{
- return boost::algorithm::detail::equal (
- first1, last1, first2, last2, pred,
- typename std::iterator_traits<InputIterator1>::iterator_category (),
- typename std::iterator_traits<InputIterator2>::iterator_category ());
+ return boost::algorithm::detail::equal (
+ first1, last1, first2, last2, pred,
+ typename std::iterator_traits<InputIterator1>::iterator_category (),
+ typename std::iterator_traits<InputIterator2>::iterator_category ());
}
/// \fn equal ( InputIterator1 first1, InputIterator1 last1,
@@ -81,16 +81,16 @@ template <class InputIterator1, class InputIterator2>
bool equal ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2 )
{
- return boost::algorithm::detail::equal (
- first1, last1, first2, last2,
- boost::algorithm::detail::eq<
- typename std::iterator_traits<InputIterator1>::value_type,
- typename std::iterator_traits<InputIterator2>::value_type> (),
- typename std::iterator_traits<InputIterator1>::iterator_category (),
- typename std::iterator_traits<InputIterator2>::iterator_category ());
+ return boost::algorithm::detail::equal (
+ first1, last1, first2, last2,
+ boost::algorithm::detail::eq<
+ typename std::iterator_traits<InputIterator1>::value_type,
+ typename std::iterator_traits<InputIterator2>::value_type> (),
+ typename std::iterator_traits<InputIterator1>::iterator_category (),
+ typename std::iterator_traits<InputIterator2>::iterator_category ());
}
-// There are already range-based versions of these.
+// There are already range-based versions of these.
}} // namespace boost and algorithm
diff --git a/3party/boost/boost/algorithm/cxx14/is_permutation.hpp b/3party/boost/boost/algorithm/cxx14/is_permutation.hpp
index 779acef2aa..d8002cbcec 100644
--- a/3party/boost/boost/algorithm/cxx14/is_permutation.hpp
+++ b/3party/boost/boost/algorithm/cxx14/is_permutation.hpp
@@ -1,130 +1,86 @@
-/*
- Copyright (c) Marshall Clow 2013
+/*
+ Copyright (c) Marshall Clow 2014.
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
*/
-/// \file equal.hpp
-/// \brief Determines if one
+/// \file is_permutation.hpp
+/// \brief Is a sequence a permutation of another sequence (four iterator versions)
/// \author Marshall Clow
-#ifndef BOOST_ALGORITHM_IS_PERMUTATION_HPP
-#define BOOST_ALGORITHM_IS_PERMUTATION_HPP
+#ifndef BOOST_ALGORITHM_IS_PERMUTATION14_HPP
+#define BOOST_ALGORITHM_IS_PERMUTATION14_HPP
-#include <algorithm>
-#include <functional> // for std::equal_to
+#include <algorithm> // for std::less, tie, mismatch and is_permutation (if available)
+#include <utility> // for std::make_pair
+#include <functional> // for std::equal_to
+#include <iterator>
-namespace boost { namespace algorithm {
-
-namespace detail {
-
- template <class T1, class T2>
- struct is_perm_eq : public std::binary_function<T1, T2, bool> {
- bool operator () ( const T1& v1, const T2& v2 ) const { return v1 == v2 ;}
- };
-
-
- template <class RandomAccessIterator1, class RandomAccessIterator2, class BinaryPredicate>
- bool is_permutation ( RandomAccessIterator1 first1, RandomAccessIterator1 last1,
- RandomAccessIterator2 first2, RandomAccessIterator2 last2, BinaryPredicate pred,
- std::random_access_iterator_tag, std::random_access_iterator_tag )
- {
- // Random-access iterators let is check the sizes in constant time
- if ( std::distance ( first1, last1 ) != std::distance ( first2, last2 ))
- return false;
- // If we know that the sequences are the same size, the original version is fine
- return std::is_permutation ( first1, last1, first2, pred );
- }
-
-
- template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
- bool is_permutation (
- ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2,
- BinaryPredicate pred,
- std::forward_iterator_tag, std::forward_iterator_tag )
- {
-
- // Look for common prefix
- for (; first1 != last1 && first2 != last2; ++first1, ++first2)
- if (!pred(*first1, *first2))
- goto not_done;
- // We've reached the end of one of the sequences without a mismatch.
- return first1 == last1 && first2 == last2;
- not_done:
-
- // Check and make sure that we have the same # of elements left
- typedef typename std::iterator_traits<ForwardIterator1>::difference_type diff1_t;
- diff1_t len1 = _VSTD::distance(first1, last1);
- typedef typename std::iterator_traits<ForwardIterator2>::difference_type diff2_t;
- diff2_t len2 = _VSTD::distance(first2, last2);
- if (len1 != len2)
- return false;
-
- // For each element in [f1, l1) see if there are the
- // same number of equal elements in [f2, l2)
- for ( ForwardIterator1 i = first1; i != last1; ++i )
- {
- // Have we already counted this value?
- ForwardIterator1 j;
- for ( j = first1; j != i; ++j )
- if (pred(*j, *i))
- break;
- if ( j == i ) // didn't find it...
- {
- // Count number of *i in [f2, l2)
- diff1_t c2 = 0;
- for ( ForwardIterator2 iter2 = first2; iter2 != last2; ++iter2 )
- if (pred(*i, *iter2))
- ++c2;
- if (c2 == 0)
- return false;
-
- // Count number of *i in [i, l1)
- diff1_t c1 = 0;
- for (_ForwardIterator1 iter1 = i; iter1 != last1; ++iter1 )
- if (pred(*i, *iter1))
- ++c1;
- if (c1 != c2)
- return false;
- }
- }
- return true;
- }
-
-}
+#include <boost/algorithm/cxx11/is_permutation.hpp>
+#include <boost/algorithm/cxx14/mismatch.hpp>
+namespace boost { namespace algorithm {
-template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
-bool is_permutation (
- ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2,
- BinaryPredicate pred )
+#if __cplusplus <= 201103L
+/// \fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last,
+/// ForwardIterator2 first2, ForwardIterator2 last2 )
+/// \brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2
+///
+/// \param first1 The start of the input sequence
+/// \param last2 One past the end of the input sequence
+/// \param first2 The start of the second sequence
+/// \param last1 One past the end of the second sequence
+/// \note This function is part of the C++2014 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template< class ForwardIterator1, class ForwardIterator2 >
+bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
+ ForwardIterator2 first2, ForwardIterator2 last2 )
{
- return boost::algorithm::detail::is_permutation (
- first1, last1, first2, last2, pred,
- typename std::iterator_traits<ForwardIterator1>::iterator_category (),
- typename std::iterator_traits<ForwardIterator2>::iterator_category ());
+// How should I deal with the idea that ForwardIterator1::value_type
+// and ForwardIterator2::value_type could be different? Define my own comparison predicate?
+ std::pair<ForwardIterator1, ForwardIterator2> eq = boost::algorithm::mismatch
+ ( first1, last1, first2, last2 );
+ if ( eq.first == last1 && eq.second == last2)
+ return true;
+ return boost::algorithm::detail::is_permutation_tag (
+ eq.first, last1, eq.second, last2,
+ std::equal_to<typename std::iterator_traits<ForwardIterator1>::value_type> (),
+ typename std::iterator_traits<ForwardIterator1>::iterator_category (),
+ typename std::iterator_traits<ForwardIterator2>::iterator_category ());
}
-template<class ForwardIterator1, class ForwardIterator2>
+/// \fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last,
+/// ForwardIterator2 first2, ForwardIterator2 last2,
+/// BinaryPredicate p )
+/// \brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2
+///
+/// \param first1 The start of the input sequence
+/// \param last1 One past the end of the input sequence
+/// \param first2 The start of the second sequence
+/// \param last2 One past the end of the second sequence
+/// \param pred The predicate to compare elements with
+///
+/// \note This function is part of the C++2014 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >
bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2 )
+ ForwardIterator2 first2, ForwardIterator2 last2,
+ BinaryPredicate pred )
{
- typedef typename iterator_traits<_ForwardIterator1>::value_type value1_t;
- typedef typename iterator_traits<_ForwardIterator2>::value_type value2_t;
- return boost::algorithm::detail::is_permutation (
- first1, last1, first2, last2,
- boost::algorithm::detail::is_perm_eq<
- typename std::iterator_traits<InputIterator1>::value_type,
- typename std::iterator_traits<InputIterator2>::value_type> (),
- typename std::iterator_traits<ForwardIterator1>::iterator_category (),
- typename std::iterator_traits<ForwardIterator2>::iterator_category ());
+ std::pair<ForwardIterator1, ForwardIterator2> eq = boost::algorithm::mismatch
+ ( first1, last1, first2, last2, pred );
+ if ( eq.first == last1 && eq.second == last2)
+ return true;
+ return boost::algorithm::detail::is_permutation_tag (
+ first1, last1, first2, last2, pred,
+ typename std::iterator_traits<ForwardIterator1>::iterator_category (),
+ typename std::iterator_traits<ForwardIterator2>::iterator_category ());
}
+#endif
-// There are already range-based versions of these.
-
-}} // namespace boost and algorithm
+}}
-#endif // BOOST_ALGORITHM_IS_PERMUTATION_HPP
+#endif // BOOST_ALGORITHM_IS_PERMUTATION14_HPP
diff --git a/3party/boost/boost/algorithm/cxx14/mismatch.hpp b/3party/boost/boost/algorithm/cxx14/mismatch.hpp
index 5229e3bdac..926ab1944b 100644
--- a/3party/boost/boost/algorithm/cxx14/mismatch.hpp
+++ b/3party/boost/boost/algorithm/cxx14/mismatch.hpp
@@ -12,13 +12,11 @@
#ifndef BOOST_ALGORITHM_MISMATCH_HPP
#define BOOST_ALGORITHM_MISMATCH_HPP
-#include <algorithm> // for std::mismatch
-#include <utility> // for std::pair
+#include <algorithm> // for std::mismatch
+#include <utility> // for std::pair
namespace boost { namespace algorithm {
-template <class InputIterator1, class InputIterator2, class BinaryPredicate>
-
/// \fn mismatch ( InputIterator1 first1, InputIterator1 last1,
/// InputIterator2 first2, InputIterator2 last2,
/// BinaryPredicate pred )
@@ -29,10 +27,11 @@ template <class InputIterator1, class InputIterator2, class BinaryPredicate>
/// \param first2 The start of the second range.
/// \param last2 One past the end of the second range.
/// \param pred A predicate for comparing the elements of the ranges
+template <class InputIterator1, class InputIterator2, class BinaryPredicate>
std::pair<InputIterator1, InputIterator2> mismatch (
- InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- BinaryPredicate pred )
+ InputIterator1 first1, InputIterator1 last1,
+ InputIterator2 first2, InputIterator2 last2,
+ BinaryPredicate pred )
{
for (; first1 != last1 && first2 != last2; ++first1, ++first2)
if ( !pred ( *first1, *first2 ))
@@ -50,8 +49,8 @@ std::pair<InputIterator1, InputIterator2> mismatch (
/// \param last2 One past the end of the second range.
template <class InputIterator1, class InputIterator2>
std::pair<InputIterator1, InputIterator2> mismatch (
- InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2 )
+ InputIterator1 first1, InputIterator1 last1,
+ InputIterator2 first2, InputIterator2 last2 )
{
for (; first1 != last1 && first2 != last2; ++first1, ++first2)
if ( *first1 != *first2 )
@@ -59,7 +58,7 @@ std::pair<InputIterator1, InputIterator2> mismatch (
return std::pair<InputIterator1, InputIterator2>(first1, first2);
}
-// There are already range-based versions of these.
+// There are already range-based versions of these.
}} // namespace boost and algorithm
diff --git a/3party/boost/boost/algorithm/searching/detail/bm_traits.hpp b/3party/boost/boost/algorithm/searching/detail/bm_traits.hpp
index ea150c3021..9c255404ce 100644
--- a/3party/boost/boost/algorithm/searching/detail/bm_traits.hpp
+++ b/3party/boost/boost/algorithm/searching/detail/bm_traits.hpp
@@ -20,7 +20,11 @@
#include <boost/type_traits/remove_const.hpp>
#include <boost/array.hpp>
+#ifdef BOOST_NO_CXX11_HDR_UNORDERED_MAP
#include <boost/tr1/tr1/unordered_map>
+#else
+#include <unordered_map>
+#endif
#include <boost/algorithm/searching/detail/debugging.hpp>
@@ -35,7 +39,11 @@ namespace boost { namespace algorithm { namespace detail {
template<typename key_type, typename value_type>
class skip_table<key_type, value_type, false> {
private:
+#ifdef BOOST_NO_CXX11_HDR_UNORDERED_MAP
typedef std::tr1::unordered_map<key_type, value_type> skip_map;
+#else
+ typedef std::unordered_map<key_type, value_type> skip_map;
+#endif
const value_type k_default_value;
skip_map skip_;
diff --git a/3party/boost/boost/algorithm/string/concept.hpp b/3party/boost/boost/algorithm/string/concept.hpp
index 9876e98d50..17e8349596 100644
--- a/3party/boost/boost/algorithm/string/concept.hpp
+++ b/3party/boost/boost/algorithm/string/concept.hpp
@@ -12,7 +12,7 @@
#define BOOST_STRING_CONCEPT_HPP
#include <boost/concept_check.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
diff --git a/3party/boost/boost/algorithm/string/detail/find_format.hpp b/3party/boost/boost/algorithm/string/detail/find_format.hpp
index 1612b93780..b39875024c 100644
--- a/3party/boost/boost/algorithm/string/detail/find_format.hpp
+++ b/3party/boost/boost/algorithm/string/detail/find_format.hpp
@@ -12,7 +12,7 @@
#define BOOST_STRING_FIND_FORMAT_DETAIL_HPP
#include <boost/algorithm/string/config.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/const_iterator.hpp>
#include <boost/range/iterator.hpp>
#include <boost/algorithm/string/detail/find_format_store.hpp>
diff --git a/3party/boost/boost/algorithm/string/detail/find_format_all.hpp b/3party/boost/boost/algorithm/string/detail/find_format_all.hpp
index 51ad56678d..52930c83ad 100644
--- a/3party/boost/boost/algorithm/string/detail/find_format_all.hpp
+++ b/3party/boost/boost/algorithm/string/detail/find_format_all.hpp
@@ -12,7 +12,7 @@
#define BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
#include <boost/algorithm/string/config.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/const_iterator.hpp>
#include <boost/range/value_type.hpp>
#include <boost/algorithm/string/detail/find_format_store.hpp>
diff --git a/3party/boost/boost/algorithm/string/detail/find_format_store.hpp b/3party/boost/boost/algorithm/string/detail/find_format_store.hpp
index e8bd84a6fe..b9f4a88d91 100644
--- a/3party/boost/boost/algorithm/string/detail/find_format_store.hpp
+++ b/3party/boost/boost/algorithm/string/detail/find_format_store.hpp
@@ -12,7 +12,7 @@
#define BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
#include <boost/algorithm/string/config.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
namespace boost {
namespace algorithm {
diff --git a/3party/boost/boost/algorithm/string/detail/find_iterator.hpp b/3party/boost/boost/algorithm/string/detail/find_iterator.hpp
index c76993a114..9b78a0f7e1 100644
--- a/3party/boost/boost/algorithm/string/detail/find_iterator.hpp
+++ b/3party/boost/boost/algorithm/string/detail/find_iterator.hpp
@@ -12,7 +12,7 @@
#define BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
#include <boost/algorithm/string/config.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/iterator/iterator_categories.hpp>
#include <boost/function.hpp>
diff --git a/3party/boost/boost/algorithm/string/detail/finder.hpp b/3party/boost/boost/algorithm/string/detail/finder.hpp
index 93310d053a..a2a958212d 100644
--- a/3party/boost/boost/algorithm/string/detail/finder.hpp
+++ b/3party/boost/boost/algorithm/string/detail/finder.hpp
@@ -15,7 +15,7 @@
#include <boost/algorithm/string/constants.hpp>
#include <boost/detail/iterator.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/empty.hpp>
@@ -142,7 +142,6 @@ namespace boost {
ForwardIteratorT End,
std::forward_iterator_tag ) const
{
- typedef ForwardIteratorT input_iterator_type;
typedef iterator_range<ForwardIteratorT> result_type;
first_finder_type first_finder(
@@ -263,7 +262,6 @@ namespace boost {
ForwardIteratorT End,
unsigned int N) const
{
- typedef ForwardIteratorT input_iterator_type;
typedef iterator_range<ForwardIteratorT> result_type;
// Sanity check
@@ -298,7 +296,6 @@ namespace boost {
ForwardIteratorT End,
unsigned int N) const
{
- typedef ForwardIteratorT input_iterator_type;
typedef iterator_range<ForwardIteratorT> result_type;
// Sanity check
@@ -362,7 +359,6 @@ namespace boost {
unsigned int N,
std::random_access_iterator_tag )
{
- typedef ForwardIteratorT input_iterator_type;
typedef iterator_range<ForwardIteratorT> result_type;
if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
@@ -436,7 +432,6 @@ namespace boost {
unsigned int N,
std::random_access_iterator_tag )
{
- typedef ForwardIteratorT input_iterator_type;
typedef iterator_range<ForwardIteratorT> result_type;
if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
@@ -627,8 +622,6 @@ namespace boost {
{
#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 )
return iterator_range<const ForwardIterator2T>(this->m_Range);
-#elif BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- return iterator_range<ForwardIterator2T>(m_Range.begin(), m_Range.end());
#else
return m_Range;
#endif
diff --git a/3party/boost/boost/algorithm/string/detail/finder_regex.hpp b/3party/boost/boost/algorithm/string/detail/finder_regex.hpp
index 01bf5a082a..9cb01cfaf1 100644
--- a/3party/boost/boost/algorithm/string/detail/finder_regex.hpp
+++ b/3party/boost/boost/algorithm/string/detail/finder_regex.hpp
@@ -14,7 +14,7 @@
#include <boost/algorithm/string/config.hpp>
#include <boost/regex.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
diff --git a/3party/boost/boost/algorithm/string/detail/formatter.hpp b/3party/boost/boost/algorithm/string/detail/formatter.hpp
index 8e7b727e7d..c071822f2a 100644
--- a/3party/boost/boost/algorithm/string/detail/formatter.hpp
+++ b/3party/boost/boost/algorithm/string/detail/formatter.hpp
@@ -12,7 +12,7 @@
#define BOOST_STRING_FORMATTER_DETAIL_HPP
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/const_iterator.hpp>
diff --git a/3party/boost/boost/algorithm/string/detail/util.hpp b/3party/boost/boost/algorithm/string/detail/util.hpp
index 7e8471f711..cf4a8b1c8c 100644
--- a/3party/boost/boost/algorithm/string/detail/util.hpp
+++ b/3party/boost/boost/algorithm/string/detail/util.hpp
@@ -13,7 +13,7 @@
#include <boost/algorithm/string/config.hpp>
#include <functional>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
namespace boost {
namespace algorithm {
diff --git a/3party/boost/boost/algorithm/string/erase.hpp b/3party/boost/boost/algorithm/string/erase.hpp
index e738b86fa2..6883790978 100644
--- a/3party/boost/boost/algorithm/string/erase.hpp
+++ b/3party/boost/boost/algorithm/string/erase.hpp
@@ -13,7 +13,7 @@
#include <boost/algorithm/string/config.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/iterator.hpp>
diff --git a/3party/boost/boost/algorithm/string/find.hpp b/3party/boost/boost/algorithm/string/find.hpp
index da1cb616b1..f2c2926b50 100644
--- a/3party/boost/boost/algorithm/string/find.hpp
+++ b/3party/boost/boost/algorithm/string/find.hpp
@@ -13,7 +13,7 @@
#include <boost/algorithm/string/config.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/iterator.hpp>
diff --git a/3party/boost/boost/algorithm/string/find_format.hpp b/3party/boost/boost/algorithm/string/find_format.hpp
index ef0373912a..0e84a4ee68 100644
--- a/3party/boost/boost/algorithm/string/find_format.hpp
+++ b/3party/boost/boost/algorithm/string/find_format.hpp
@@ -13,7 +13,7 @@
#include <deque>
#include <boost/detail/iterator.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/const_iterator.hpp>
diff --git a/3party/boost/boost/algorithm/string/find_iterator.hpp b/3party/boost/boost/algorithm/string/find_iterator.hpp
index e8cede5e8e..5834407f0f 100644
--- a/3party/boost/boost/algorithm/string/find_iterator.hpp
+++ b/3party/boost/boost/algorithm/string/find_iterator.hpp
@@ -15,7 +15,7 @@
#include <boost/iterator/iterator_facade.hpp>
#include <boost/iterator/iterator_categories.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/iterator.hpp>
@@ -132,12 +132,7 @@ namespace boost {
// increment
void increment()
{
- if(m_Match.begin() == m_Match.end())
- m_Match=this->do_find(m_Match.end(),m_End);
- else {
- input_iterator_type last = m_Match.begin();
- m_Match=this->do_find(++last,m_End);
- }
+ m_Match=this->do_find(m_Match.end(),m_End);
}
// comparison
@@ -235,7 +230,7 @@ namespace boost {
\post eof()==true
*/
- split_iterator() {}
+ split_iterator() { m_bEof = true; }
//! Copy constructor
/*!
Construct a copy of the split_iterator
diff --git a/3party/boost/boost/algorithm/string/finder.hpp b/3party/boost/boost/algorithm/string/finder.hpp
index 4c7ac38b04..93f7ec304a 100644
--- a/3party/boost/boost/algorithm/string/finder.hpp
+++ b/3party/boost/boost/algorithm/string/finder.hpp
@@ -13,7 +13,7 @@
#include <boost/algorithm/string/config.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/iterator.hpp>
diff --git a/3party/boost/boost/algorithm/string/formatter.hpp b/3party/boost/boost/algorithm/string/formatter.hpp
index c2c13eb2ec..de8681bc3f 100644
--- a/3party/boost/boost/algorithm/string/formatter.hpp
+++ b/3party/boost/boost/algorithm/string/formatter.hpp
@@ -13,7 +13,7 @@
#include <boost/detail/iterator.hpp>
#include <boost/range/value_type.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/as_literal.hpp>
#include <boost/algorithm/string/detail/formatter.hpp>
diff --git a/3party/boost/boost/algorithm/string/iter_find.hpp b/3party/boost/boost/algorithm/string/iter_find.hpp
index e10652834b..10424abc74 100644
--- a/3party/boost/boost/algorithm/string/iter_find.hpp
+++ b/3party/boost/boost/algorithm/string/iter_find.hpp
@@ -16,7 +16,7 @@
#include <iterator>
#include <boost/iterator/transform_iterator.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/iterator.hpp>
diff --git a/3party/boost/boost/algorithm/string/predicate.hpp b/3party/boost/boost/algorithm/string/predicate.hpp
index 6642f427d1..0879829b5a 100644
--- a/3party/boost/boost/algorithm/string/predicate.hpp
+++ b/3party/boost/boost/algorithm/string/predicate.hpp
@@ -17,7 +17,7 @@
#include <boost/range/iterator.hpp>
#include <boost/range/const_iterator.hpp>
#include <boost/range/as_literal.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/algorithm/string/compare.hpp>
#include <boost/algorithm/string/find.hpp>
diff --git a/3party/boost/boost/algorithm/string/regex.hpp b/3party/boost/boost/algorithm/string/regex.hpp
index 0a4c38bd77..a6c7c60ae8 100644
--- a/3party/boost/boost/algorithm/string/regex.hpp
+++ b/3party/boost/boost/algorithm/string/regex.hpp
@@ -14,7 +14,7 @@
#include <boost/algorithm/string/config.hpp>
#include <boost/regex.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/iterator.hpp>
diff --git a/3party/boost/boost/algorithm/string/replace.hpp b/3party/boost/boost/algorithm/string/replace.hpp
index f2d201f97f..0c04e47e1e 100644
--- a/3party/boost/boost/algorithm/string/replace.hpp
+++ b/3party/boost/boost/algorithm/string/replace.hpp
@@ -13,7 +13,7 @@
#include <boost/algorithm/string/config.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/iterator.hpp>
diff --git a/3party/boost/boost/algorithm/string/sequence_traits.hpp b/3party/boost/boost/algorithm/string/sequence_traits.hpp
index b1ac67e9b3..be151f8d3d 100644
--- a/3party/boost/boost/algorithm/string/sequence_traits.hpp
+++ b/3party/boost/boost/algorithm/string/sequence_traits.hpp
@@ -36,47 +36,6 @@ namespace boost {
// sequence traits -----------------------------------------------//
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- //! Native replace tester
- /*!
- Declare an override of this tester function with return
- type boost::string_algo::yes_type for a sequence with this property.
-
- \return yes_type if the container has basic_string like native replace
- method.
- */
- no_type has_native_replace_tester(...);
-
- //! Stable iterators tester
- /*!
- Declare an override of this tester function with return
- type boost::string_algo::yes_type for a sequence with this property.
-
- \return yes_type if the sequence's insert/replace/erase methods do not invalidate
- existing iterators.
- */
- no_type has_stable_iterators_tester(...);
-
- //! const time insert tester
- /*!
- Declare an override of this tester function with return
- type boost::string_algo::yes_type for a sequence with this property.
-
- \return yes_type if the sequence's insert method is working in constant time
- */
- no_type has_const_time_insert_tester(...);
-
- //! const time erase tester
- /*!
- Declare an override of this tester function with return
- type boost::string_algo::yes_type for a sequence with this property.
-
- \return yes_type if the sequence's erase method is working in constant time
- */
- no_type has_const_time_erase_tester(...);
-
-#endif //BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
//! Native replace trait
/*!
@@ -86,20 +45,12 @@ namespace boost {
class has_native_replace
{
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- private:
- static T* t;
- public:
- BOOST_STATIC_CONSTANT(bool, value=(
- sizeof(has_native_replace_tester(t))==sizeof(yes_type) ) );
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
public:
# if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
enum { value = false };
# else
BOOST_STATIC_CONSTANT(bool, value=false);
# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
typedef mpl::bool_<has_native_replace<T>::value> type;
@@ -114,20 +65,12 @@ namespace boost {
template< typename T >
class has_stable_iterators
{
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- private:
- static T* t;
- public:
- BOOST_STATIC_CONSTANT(bool, value=(
- sizeof(has_stable_iterators_tester(t))==sizeof(yes_type) ) );
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
public:
# if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
enum { value = false };
# else
BOOST_STATIC_CONSTANT(bool, value=false);
# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
typedef mpl::bool_<has_stable_iterators<T>::value> type;
};
@@ -141,20 +84,12 @@ namespace boost {
template< typename T >
class has_const_time_insert
{
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- private:
- static T* t;
- public:
- BOOST_STATIC_CONSTANT(bool, value=(
- sizeof(has_const_time_insert_tester(t))==sizeof(yes_type) ) );
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
public:
# if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
enum { value = false };
# else
BOOST_STATIC_CONSTANT(bool, value=false);
# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
typedef mpl::bool_<has_const_time_insert<T>::value> type;
};
@@ -168,20 +103,12 @@ namespace boost {
template< typename T >
class has_const_time_erase
{
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- private:
- static T* t;
- public:
- BOOST_STATIC_CONSTANT(bool, value=(
- sizeof(has_const_time_erase_tester(t))==sizeof(yes_type) ) );
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
public:
# if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
enum { value = false };
# else
BOOST_STATIC_CONSTANT(bool, value=false);
# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
typedef mpl::bool_<has_const_time_erase<T>::value> type;
};
diff --git a/3party/boost/boost/algorithm/string/std/list_traits.hpp b/3party/boost/boost/algorithm/string/std/list_traits.hpp
index ce2379d83b..a3cf7bb18c 100644
--- a/3party/boost/boost/algorithm/string/std/list_traits.hpp
+++ b/3party/boost/boost/algorithm/string/std/list_traits.hpp
@@ -20,22 +20,6 @@ namespace boost {
// std::list<> traits -----------------------------------------------//
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- // stable iterators tester
- template<typename T, typename AllocT>
- yes_type has_stable_iterators_tester( const ::std::list<T,AllocT>* );
-
- // const time insert tester
- template<typename T, typename AllocT>
- yes_type has_const_time_insert_tester( const ::std::list<T,AllocT>* );
-
- // const time erase tester
- template<typename T, typename AllocT>
- yes_type has_const_time_erase_tester( const ::std::list<T,AllocT>* );
-
-
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// stable iterators trait
template<typename T, typename AllocT>
@@ -75,7 +59,6 @@ namespace boost {
#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
typedef mpl::bool_<has_const_time_erase<T>::value> type;
};
-#endif
} // namespace algorithm
diff --git a/3party/boost/boost/algorithm/string/std/rope_traits.hpp b/3party/boost/boost/algorithm/string/std/rope_traits.hpp
index c2cd549ceb..637059a550 100644
--- a/3party/boost/boost/algorithm/string/std/rope_traits.hpp
+++ b/3party/boost/boost/algorithm/string/std/rope_traits.hpp
@@ -20,25 +20,6 @@ namespace boost {
// SGI's std::rope<> traits -----------------------------------------------//
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- // native replace tester
- template<typename T, typename TraitsT, typename AllocT>
- yes_type has_native_replace_tester( const std::rope<T, TraitsT, AllocT>* );
-
- // stable iterators tester
- template<typename T, typename TraitsT, typename AllocT>
- yes_type has_stable_iterators_tester( const std::rope<T, TraitsT, AllocT>* );
-
- // const time insert tester
- template<typename T, typename TraitsT, typename AllocT>
- yes_type has_const_time_insert_tester( const std::rope<T, TraitsT, AllocT>* );
-
- // const time erase tester
- template<typename T, typename TraitsT, typename AllocT>
- yes_type has_const_time_erase_tester( const std::rope<T, TraitsT, AllocT>* );
-
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// native replace trait
template<typename T, typename TraitsT, typename AllocT>
@@ -91,7 +72,6 @@ namespace boost {
#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
typedef mpl::bool_<value> type;
};
-#endif
} // namespace algorithm
diff --git a/3party/boost/boost/algorithm/string/std/slist_traits.hpp b/3party/boost/boost/algorithm/string/std/slist_traits.hpp
index 7b915a3d4a..c30b93c73a 100644
--- a/3party/boost/boost/algorithm/string/std/slist_traits.hpp
+++ b/3party/boost/boost/algorithm/string/std/slist_traits.hpp
@@ -21,21 +21,6 @@ namespace boost {
// SGI's std::slist<> traits -----------------------------------------------//
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- // stable iterators tester
- template<typename T, typename AllocT>
- yes_type has_stable_iterators_tester( const BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT>* );
-
- // const time insert tester
- template<typename T, typename AllocT>
- yes_type has_const_time_insert_tester( const BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT>* );
-
- // const time erase tester
- template<typename T, typename AllocT>
- yes_type has_const_time_erase_tester( const BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT>* );
-
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// stable iterators trait
template<typename T, typename AllocT>
@@ -75,7 +60,6 @@ namespace boost {
#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
typedef mpl::bool_<has_const_time_erase<T>::value> type;
};
-#endif
} // namespace algorithm
diff --git a/3party/boost/boost/algorithm/string/std/string_traits.hpp b/3party/boost/boost/algorithm/string/std/string_traits.hpp
index c466d26b19..c9408307d3 100644
--- a/3party/boost/boost/algorithm/string/std/string_traits.hpp
+++ b/3party/boost/boost/algorithm/string/std/string_traits.hpp
@@ -20,13 +20,6 @@ namespace boost {
// std::basic_string<> traits -----------------------------------------------//
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- // native replace tester
- template<typename T, typename TraitsT, typename AllocT>
- yes_type has_native_replace_tester( const std::basic_string<T, TraitsT, AllocT>* );
-
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// native replace trait
template<typename T, typename TraitsT, typename AllocT>
@@ -43,7 +36,6 @@ namespace boost {
};
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} // namespace algorithm
} // namespace boost
diff --git a/3party/boost/boost/algorithm/string/trim.hpp b/3party/boost/boost/algorithm/string/trim.hpp
index be57cd92ff..e740d57d93 100644
--- a/3party/boost/boost/algorithm/string/trim.hpp
+++ b/3party/boost/boost/algorithm/string/trim.hpp
@@ -17,7 +17,7 @@
#include <boost/range/end.hpp>
#include <boost/range/const_iterator.hpp>
#include <boost/range/as_literal.hpp>
-#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator_range_core.hpp>
#include <boost/algorithm/string/detail/trim.hpp>
#include <boost/algorithm/string/classification.hpp>
diff --git a/3party/boost/boost/align.hpp b/3party/boost/boost/align.hpp
new file mode 100644
index 0000000000..4d60100601
--- /dev/null
+++ b/3party/boost/boost/align.hpp
@@ -0,0 +1,31 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_HPP
+#define BOOST_ALIGN_HPP
+
+/**
+ Boost.Align
+ all headers.
+
+ @note This header includes all public headers
+ of the Boost.Align library.
+
+ @file
+ @author Glen Fernandes
+*/
+
+#include <boost/align/align.hpp>
+#include <boost/align/aligned_alloc.hpp>
+#include <boost/align/aligned_allocator.hpp>
+#include <boost/align/aligned_allocator_adaptor.hpp>
+#include <boost/align/aligned_delete.hpp>
+#include <boost/align/alignment_of.hpp>
+#include <boost/align/is_aligned.hpp>
+
+#endif
diff --git a/3party/boost/boost/align/align.hpp b/3party/boost/boost/align/align.hpp
new file mode 100644
index 0000000000..8d29fca466
--- /dev/null
+++ b/3party/boost/boost/align/align.hpp
@@ -0,0 +1,86 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGN_HPP
+#define BOOST_ALIGN_ALIGN_HPP
+
+/**
+ Function align.
+
+ @file
+ @author Glen Fernandes
+*/
+
+#include <boost/config.hpp>
+
+/**
+ @cond
+*/
+#if !defined(BOOST_NO_CXX11_STD_ALIGN)
+#include <boost/align/detail/align_cxx11.hpp>
+#else
+#include <boost/align/detail/align.hpp>
+#endif
+
+#if defined(BOOST_NO_CXX11_STD_ALIGN)
+/**
+ @endcond
+*/
+
+/**
+ Boost namespace.
+*/
+namespace boost {
+ /**
+ Alignment namespace.
+ */
+ namespace alignment {
+ /**
+ If it is possible to fit `size` bytes of storage
+ aligned by `alignment` into the buffer pointed to by
+ `ptr` with length `space`, the function updates `ptr`
+ to point to the first possible address of such
+ storage and decreases `space` by the number of bytes
+ used for alignment. Otherwise, the function does
+ nothing.
+
+ @param alignment Shall be a fundamental alignment
+ value or an extended alignment value, and shall be
+ a power of two.
+
+ @param size The size in bytes of storage to fit into
+ the buffer.
+
+ @param ptr Shall point to contiguous storage of at
+ least `space` bytes.
+
+ @param space The length of the buffer.
+
+ @return A null pointer if the requested aligned
+ buffer would not fit into the available space,
+ otherwise the adjusted value of `ptr`.
+
+ @remark **Note:** The function updates its `ptr` and
+ space arguments so that it can be called repeatedly
+ with possibly different `alignment` and `size`
+ arguments for the same buffer.
+ */
+ inline void* align(std::size_t alignment, std::size_t size,
+ void*& ptr, std::size_t& space);
+ }
+}
+
+/**
+ @cond
+*/
+#endif
+/**
+ @endcond
+*/
+
+#endif
diff --git a/3party/boost/boost/align/aligned_alloc.hpp b/3party/boost/boost/align/aligned_alloc.hpp
new file mode 100644
index 0000000000..07035b7207
--- /dev/null
+++ b/3party/boost/boost/align/aligned_alloc.hpp
@@ -0,0 +1,100 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGNED_ALLOC_HPP
+#define BOOST_ALIGN_ALIGNED_ALLOC_HPP
+
+/**
+ Functions aligned_alloc and aligned_free.
+
+ @file
+ @author Glen Fernandes
+*/
+
+#include <boost/config.hpp>
+
+/**
+ @cond
+*/
+#if defined(BOOST_HAS_UNISTD_H)
+#include <unistd.h>
+#endif
+
+#if defined(__APPLE__) || defined(__APPLE_CC__) || defined(macintosh)
+#include <AvailabilityMacros.h>
+#endif
+
+#if defined(_MSC_VER)
+#include <boost/align/detail/aligned_alloc_msvc.hpp>
+#elif defined(__MINGW32__) && (__MSVCRT_VERSION__ >= 0x0700)
+#include <boost/align/detail/aligned_alloc_msvc.hpp>
+#elif MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+#include <boost/align/detail/aligned_alloc_posix.hpp>
+#elif MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
+#include <boost/align/detail/aligned_alloc_macos.hpp>
+#elif defined(__ANDROID__)
+#include <boost/align/detail/aligned_alloc_android.hpp>
+#elif defined(__SunOS_5_11) || defined(__SunOS_5_12)
+#include <boost/align/detail/aligned_alloc_posix.hpp>
+#elif defined(sun) || defined(__sun)
+#include <boost/align/detail/aligned_alloc_sunos.hpp>
+#elif (_POSIX_C_SOURCE >= 200112L) || (_XOPEN_SOURCE >= 600)
+#include <boost/align/detail/aligned_alloc_posix.hpp>
+#else
+#include <boost/align/detail/aligned_alloc.hpp>
+#endif
+/**
+ @endcond
+*/
+
+/**
+ Boost namespace.
+*/
+namespace boost {
+ /**
+ Alignment namespace.
+ */
+ namespace alignment {
+ /**
+ Allocates space for an object whose alignment is
+ specified by `alignment`, whose size is
+ specified by `size`, and whose value is
+ indeterminate.
+
+ @param alignment Shall be a power of two.
+
+ @param size Size of space to allocate.
+
+ @return A null pointer or a pointer to the
+ allocated space.
+
+ @remark **Note:** On certain platforms, the
+ alignment may be rounded up to `alignof(void*)`
+ and the space allocated may be slightly larger
+ than `size` bytes, by an additional
+ `sizeof(void*)` and `alignment - 1` bytes.
+ */
+ inline void* aligned_alloc(std::size_t alignment,
+ std::size_t size) BOOST_NOEXCEPT;
+
+ /**
+ Causes the space pointed to by `ptr` to be
+ deallocated, that is, made available for further
+ allocation. If `ptr` is a null pointer, no
+ action occurs. Otherwise, if the argument does
+ not match a pointer earlier returned by the
+ `aligned_alloc` function, or if the space has
+ been deallocated by a call to `aligned_free`,
+ the behavior is undefined.
+ */
+ inline void aligned_free(void* ptr)
+ BOOST_NOEXCEPT;
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/aligned_allocator.hpp b/3party/boost/boost/align/aligned_allocator.hpp
new file mode 100644
index 0000000000..03b2546274
--- /dev/null
+++ b/3party/boost/boost/align/aligned_allocator.hpp
@@ -0,0 +1,287 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_HPP
+#define BOOST_ALIGN_ALIGNED_ALLOCATOR_HPP
+
+/**
+ Class template aligned_allocator.
+
+ @file
+ @author Glen Fernandes
+*/
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/align/aligned_alloc.hpp>
+#include <boost/align/aligned_allocator_forward.hpp>
+#include <boost/align/alignment_of.hpp>
+#include <boost/align/detail/addressof.hpp>
+#include <boost/align/detail/is_alignment_const.hpp>
+#include <boost/align/detail/max_align.hpp>
+#include <boost/align/detail/max_count_of.hpp>
+#include <new>
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <utility>
+#endif
+
+/**
+ Boost namespace.
+*/
+namespace boost {
+ /**
+ Alignment namespace.
+ */
+ namespace alignment {
+ /**
+ Class template aligned_allocator.
+
+ @tparam Alignment Is the minimum alignment to specify
+ for allocations, if it is larger than the alignment
+ of the value type. It shall be a power of two.
+
+ @remark **Note:** Except for the destructor, member
+ functions of the aligned allocator shall not
+ introduce data races as a result of concurrent calls
+ to those member functions from different threads.
+ Calls to these functions that allocate or deallocate
+ a particular unit of storage shall occur in a single
+ total order, and each such deallocation call shall
+ happen before the next allocation (if any) in this
+ order.
+
+ @note Specifying minimum alignment is generally only
+ suitable for containers such as vector and undesirable
+ with other, node-based, containers. For node-based
+ containers, such as list, the node object would have
+ the minimum alignment specified instead of the value
+ type object.
+ */
+ template<class T, std::size_t Alignment>
+ class aligned_allocator {
+ /**
+ @cond
+ */
+ BOOST_STATIC_ASSERT(detail::
+ is_alignment_const<Alignment>::value);
+ /**
+ @endcond
+ */
+
+ public:
+ typedef T value_type;
+ typedef T* pointer;
+ typedef const T* const_pointer;
+ typedef void* void_pointer;
+ typedef const void* const_void_pointer;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+
+ private:
+ enum {
+ TypeAlign = alignment_of<value_type>::value,
+
+ MaxAlign = detail::
+ max_align<Alignment, TypeAlign>::value
+ };
+
+ public:
+ /**
+ Rebind allocator.
+ */
+ template<class U>
+ struct rebind {
+ typedef aligned_allocator<U, Alignment> other;
+ };
+
+#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
+ aligned_allocator()
+ BOOST_NOEXCEPT = default;
+#else
+ aligned_allocator()
+ BOOST_NOEXCEPT {
+ }
+#endif
+
+ template<class U>
+ aligned_allocator(const aligned_allocator<U,
+ Alignment>&) BOOST_NOEXCEPT {
+ }
+
+ /**
+ @return The actual address of the object referenced
+ by `value`, even in the presence of an overloaded
+ operator&.
+ */
+ pointer address(reference value) const
+ BOOST_NOEXCEPT {
+ return detail::addressof(value);
+ }
+
+ /**
+ @return The actual address of the object referenced
+ by `value`, even in the presence of an overloaded
+ operator&.
+ */
+ const_pointer address(const_reference value) const
+ BOOST_NOEXCEPT {
+ return detail::addressof(value);
+ }
+
+ /**
+ @return A pointer to the initial element of an array
+ of storage of size `n * sizeof(T)`, aligned on the
+ maximum of the minimum alignment specified and the
+ alignment of objects of type `T`.
+
+ @remark **Throw:** Throws `std::bad_alloc` if the
+ storage cannot be obtained.
+
+ @remark **Note:** The storage is obtained by calling
+ `aligned_alloc(std::size_t, std::size_t)`.
+ */
+ pointer allocate(size_type size, const_void_pointer = 0) {
+ void* p = aligned_alloc(MaxAlign, sizeof(T) * size);
+ if (!p && size > 0) {
+ boost::throw_exception(std::bad_alloc());
+ }
+ return static_cast<T*>(p);
+ }
+
+ /**
+ Deallocates the storage referenced by `ptr`.
+
+ @param ptr Shall be a pointer value obtained from
+ `allocate()`.
+
+ @remark **Note:** Uses
+ `alignment::aligned_free(void*)`.
+ */
+ void deallocate(pointer ptr, size_type) {
+ alignment::aligned_free(ptr);
+ }
+
+ /**
+ @return The largest value `N` for which the call
+ `allocate(N)` might succeed.
+ */
+ BOOST_CONSTEXPR size_type max_size() const
+ BOOST_NOEXCEPT {
+ return detail::max_count_of<T>::value;
+ }
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ /**
+ Calls global
+ `new((void*)ptr) U(std::forward<Args>(args)...)`.
+ */
+ template<class U, class... Args>
+ void construct(U* ptr, Args&&... args) {
+ void* p = ptr;
+ ::new(p) U(std::forward<Args>(args)...);
+ }
+#else
+ /**
+ Calls global
+ `new((void*)ptr) U(std::forward<V>(value))`.
+ */
+ template<class U, class V>
+ void construct(U* ptr, V&& value) {
+ void* p = ptr;
+ ::new(p) U(std::forward<V>(value));
+ }
+#endif
+#else
+ /**
+ Calls global `new((void*)ptr) U(value)`.
+ */
+ template<class U, class V>
+ void construct(U* ptr, const V& value) {
+ void* p = ptr;
+ ::new(p) U(value);
+ }
+#endif
+
+ /**
+ Calls global `new((void*)ptr) U()`.
+ */
+ template<class U>
+ void construct(U* ptr) {
+ void* p = ptr;
+ ::new(p) U();
+ }
+
+ /**
+ Calls `ptr->~U()`.
+ */
+ template<class U>
+ void destroy(U* ptr) {
+ (void)ptr;
+ ptr->~U();
+ }
+ };
+
+ /**
+ Class template aligned_allocator
+ specialization.
+ */
+ template<std::size_t Alignment>
+ class aligned_allocator<void, Alignment> {
+ /**
+ @cond
+ */
+ BOOST_STATIC_ASSERT(detail::
+ is_alignment_const<Alignment>::value);
+ /**
+ @endcond
+ */
+
+ public:
+ typedef void value_type;
+ typedef void* pointer;
+ typedef const void* const_pointer;
+
+ /**
+ Rebind allocator.
+ */
+ template<class U>
+ struct rebind {
+ typedef aligned_allocator<U, Alignment> other;
+ };
+ };
+
+ /**
+ @return `true`.
+ */
+ template<class T1, class T2, std::size_t Alignment>
+ inline bool operator==(const aligned_allocator<T1,
+ Alignment>&, const aligned_allocator<T2,
+ Alignment>&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+
+ /**
+ @return `false`.
+ */
+ template<class T1, class T2, std::size_t Alignment>
+ inline bool operator!=(const aligned_allocator<T1,
+ Alignment>&, const aligned_allocator<T2,
+ Alignment>&) BOOST_NOEXCEPT
+ {
+ return false;
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/aligned_allocator_adaptor.hpp b/3party/boost/boost/align/aligned_allocator_adaptor.hpp
new file mode 100644
index 0000000000..2083c949de
--- /dev/null
+++ b/3party/boost/boost/align/aligned_allocator_adaptor.hpp
@@ -0,0 +1,325 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_HPP
+#define BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_HPP
+
+/**
+ Class template aligned_allocator_adaptor.
+
+ @file
+ @author Glen Fernandes
+*/
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/align/align.hpp>
+#include <boost/align/aligned_allocator_adaptor_forward.hpp>
+#include <boost/align/alignment_of.hpp>
+#include <boost/align/detail/addressof.hpp>
+#include <boost/align/detail/is_alignment_const.hpp>
+#include <boost/align/detail/max_align.hpp>
+#include <new>
+
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+#include <memory>
+#endif
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <utility>
+#endif
+
+/**
+ Boost namespace.
+*/
+namespace boost {
+ /**
+ Alignment namespace.
+ */
+ namespace alignment {
+ /**
+ Class template aligned_allocator_adaptor.
+
+ @tparam Alignment Is the minimum alignment to specify
+ for allocations, if it is larger than the alignment
+ of the value type. The value of `Alignment` shall be
+ a fundamental alignment value or an extended alignment
+ value, and shall be a power of two.
+
+ @note This adaptor can be used with a C++11 allocator
+ whose pointer type is a smart pointer but the adaptor
+ will expose only raw pointers.
+ */
+ template<class Allocator, std::size_t Alignment>
+ class aligned_allocator_adaptor
+ : public Allocator {
+ /**
+ @cond
+ */
+ BOOST_STATIC_ASSERT(detail::
+ is_alignment_const<Alignment>::value);
+ /**
+ @endcond
+ */
+
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ /**
+ Exposition only.
+ */
+ typedef std::allocator_traits<Allocator> Traits;
+
+ typedef typename Traits::
+ template rebind_alloc<char> CharAlloc;
+
+ typedef typename Traits::
+ template rebind_traits<char> CharTraits;
+
+ typedef typename CharTraits::pointer CharPtr;
+#else
+ typedef typename Allocator::
+ template rebind<char>::other CharAlloc;
+
+ typedef typename CharAlloc::pointer CharPtr;
+#endif
+
+ public:
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef typename Traits::value_type value_type;
+ typedef typename Traits::size_type size_type;
+#else
+ typedef typename Allocator::value_type value_type;
+ typedef typename Allocator::size_type size_type;
+#endif
+
+ typedef value_type* pointer;
+ typedef const value_type* const_pointer;
+ typedef void* void_pointer;
+ typedef const void* const_void_pointer;
+ typedef std::ptrdiff_t difference_type;
+
+ private:
+ enum {
+ TypeAlign = alignment_of<value_type>::value,
+
+ PtrAlign = alignment_of<CharPtr>::value,
+
+ BlockAlign = detail::
+ max_align<PtrAlign, TypeAlign>::value,
+
+ MaxAlign = detail::
+ max_align<Alignment, BlockAlign>::value
+ };
+
+ public:
+ /**
+ Rebind allocator.
+ */
+ template<class U>
+ struct rebind {
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef aligned_allocator_adaptor<typename Traits::
+ template rebind_alloc<U>, Alignment> other;
+#else
+ typedef aligned_allocator_adaptor<typename Allocator::
+ template rebind<U>::other, Alignment> other;
+#endif
+ };
+
+#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
+ /**
+ Value-initializes the `Allocator`
+ base class.
+ */
+ aligned_allocator_adaptor() = default;
+#else
+ /**
+ Value-initializes the `Allocator`
+ base class.
+ */
+ aligned_allocator_adaptor()
+ : Allocator() {
+ }
+#endif
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ /**
+ Initializes the `Allocator` base class with
+ `std::forward<A>(alloc)`.
+
+ @remark **Require:** `Allocator` shall be
+ constructible from `A`.
+ */
+ template<class A>
+ explicit aligned_allocator_adaptor(A&& alloc)
+ BOOST_NOEXCEPT
+ : Allocator(std::forward<A>(alloc)) {
+ }
+#else
+ /**
+ Initializes the `Allocator` base class with
+ `alloc`.
+
+ @remark **Require:** `Allocator` shall be
+ constructible from `A`.
+ */
+ template<class A>
+ explicit aligned_allocator_adaptor(const A& alloc)
+ BOOST_NOEXCEPT
+ : Allocator(alloc) {
+ }
+#endif
+
+ /**
+ Initializes the `Allocator` base class with the
+ base from other.
+ */
+ template<class U>
+ aligned_allocator_adaptor(const
+ aligned_allocator_adaptor<U, Alignment>& other)
+ BOOST_NOEXCEPT
+ : Allocator(other.base()) {
+ }
+
+ /**
+ @return `static_cast<Allocator&>(*this)`.
+ */
+ Allocator& base()
+ BOOST_NOEXCEPT {
+ return static_cast<Allocator&>(*this);
+ }
+
+ /**
+ @return `static_cast<const Allocator&>(*this)`.
+ */
+ const Allocator& base() const
+ BOOST_NOEXCEPT {
+ return static_cast<const Allocator&>(*this);
+ }
+
+ /**
+ @param size The size of the value type object to
+ allocate.
+
+ @return A pointer to the initial element of an
+ array of storage of size `n * sizeof(value_type)`,
+ aligned on the maximum of the minimum alignment
+ specified and the alignment of objects of type
+ `value_type`.
+
+ @remark **Throw:** Throws an exception thrown from
+ `A2::allocate` if the storage cannot be obtained.
+
+ @remark **Note:** The storage is obtained by calling
+ `A2::allocate` on an object `a2`, where `a2` of
+ type `A2` is a rebound copy of `base()` where its
+ `value_type` is unspecified.
+ */
+ pointer allocate(size_type size) {
+ std::size_t n1 = size * sizeof(value_type);
+ std::size_t n2 = n1 + MaxAlign - 1;
+ CharAlloc a(base());
+ CharPtr p1 = a.allocate(sizeof p1 + n2);
+ void* p2 = detail::addressof(*p1) + sizeof p1;
+ (void)align(MaxAlign, n1, p2, n2);
+ void* p3 = static_cast<CharPtr*>(p2) - 1;
+ ::new(p3) CharPtr(p1);
+ return static_cast<pointer>(p2);
+ }
+
+ /**
+ @param hint is a value obtained by calling
+ `allocate()` on any equivalent aligned allocator
+ adaptor object, or else `nullptr`.
+
+ @param size The size of the value type object to
+ allocate.
+
+ @return A pointer to the initial element of an
+ array of storage of size `n * sizeof(value_type)`,
+ aligned on the maximum of the minimum alignment
+ specified and the alignment of objects of type
+ `value_type`.
+
+ @remark **Throw:** Throws an exception thrown from
+ `A2::allocate` if the storage cannot be obtained.
+
+ @remark **Note:** The storage is obtained by calling
+ `A2::allocate` on an object `a2`, where `a2` of
+ type `A2` is a rebound copy of `base()` where its
+ `value_type` is unspecified.
+ */
+ pointer allocate(size_type size, const_void_pointer hint) {
+ std::size_t n1 = size * sizeof(value_type);
+ std::size_t n2 = n1 + MaxAlign - 1;
+ CharPtr h = CharPtr();
+ if (hint) {
+ h = *(static_cast<const CharPtr*>(hint) - 1);
+ }
+ CharAlloc a(base());
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ CharPtr p1 = CharTraits::allocate(a, sizeof p1 +
+ n2, h);
+#else
+ CharPtr p1 = a.allocate(sizeof p1 + n2, h);
+#endif
+ void* p2 = detail::addressof(*p1) + sizeof p1;
+ (void)align(MaxAlign, n1, p2, n2);
+ void* p3 = static_cast<CharPtr*>(p2) - 1;
+ ::new(p3) CharPtr(p1);
+ return static_cast<pointer>(p2);
+ }
+
+ /**
+ Deallocates the storage referenced by `ptr`.
+
+ @param ptr Shall be a pointer value obtained from
+ `allocate()`.
+
+ @param size Shall equal the value passed as the
+ first argument to the invocation of `allocate`
+ which returned `ptr`.
+
+ @remark **Note:** Uses `A2::deallocate` on an object
+ `a2`, where `a2` of type `A2` is a rebound copy of
+ `base()` where its `value_type` is unspecified.
+ */
+ void deallocate(pointer ptr, size_type size) {
+ CharPtr* p1 = reinterpret_cast<CharPtr*>(ptr) - 1;
+ CharPtr p2 = *p1;
+ p1->~CharPtr();
+ CharAlloc a(base());
+ a.deallocate(p2, size * sizeof(value_type) +
+ MaxAlign + sizeof p2);
+ }
+ };
+
+ /**
+ @return `a.base() == b.base()`.
+ */
+ template<class A1, class A2, std::size_t Alignment>
+ inline bool operator==(const aligned_allocator_adaptor<A1,
+ Alignment>& a, const aligned_allocator_adaptor<A2,
+ Alignment>& b) BOOST_NOEXCEPT
+ {
+ return a.base() == b.base();
+ }
+
+ /**
+ @return `!(a == b)`.
+ */
+ template<class A1, class A2, std::size_t Alignment>
+ inline bool operator!=(const aligned_allocator_adaptor<A1,
+ Alignment>& a, const aligned_allocator_adaptor<A2,
+ Alignment>& b) BOOST_NOEXCEPT
+ {
+ return !(a == b);
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/aligned_allocator_adaptor_forward.hpp b/3party/boost/boost/align/aligned_allocator_adaptor_forward.hpp
new file mode 100644
index 0000000000..524e0676ed
--- /dev/null
+++ b/3party/boost/boost/align/aligned_allocator_adaptor_forward.hpp
@@ -0,0 +1,38 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_FORWARD_HPP
+#define BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_FORWARD_HPP
+
+/**
+ Class template aligned_allocator_adaptor
+ forward declaration.
+
+ @note This header provides a forward declaration for
+ the `aligned_allocator_adaptor` class template.
+
+ @file
+ @author Glen Fernandes
+*/
+
+#include <cstddef>
+
+/**
+ @cond
+*/
+namespace boost {
+ namespace alignment {
+ template<class Allocator, std::size_t Alignment = 1>
+ class aligned_allocator_adaptor;
+ }
+}
+/**
+ @endcond
+*/
+
+#endif
diff --git a/3party/boost/boost/align/aligned_allocator_forward.hpp b/3party/boost/boost/align/aligned_allocator_forward.hpp
new file mode 100644
index 0000000000..6f15423670
--- /dev/null
+++ b/3party/boost/boost/align/aligned_allocator_forward.hpp
@@ -0,0 +1,38 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_FORWARD_HPP
+#define BOOST_ALIGN_ALIGNED_ALLOCATOR_FORWARD_HPP
+
+/**
+ Class template aligned_allocator
+ forward declaration.
+
+ @note This header provides a forward declaration
+ for the `aligned_allocator` class template.
+
+ @file
+ @author Glen Fernandes
+*/
+
+#include <cstddef>
+
+/**
+ @cond
+*/
+namespace boost {
+ namespace alignment {
+ template<class T, std::size_t Alignment = 1>
+ class aligned_allocator;
+ }
+}
+/**
+ @endcond
+*/
+
+#endif
diff --git a/3party/boost/boost/align/aligned_delete.hpp b/3party/boost/boost/align/aligned_delete.hpp
new file mode 100644
index 0000000000..05ebb82f72
--- /dev/null
+++ b/3party/boost/boost/align/aligned_delete.hpp
@@ -0,0 +1,56 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGNED_DELETE_HPP
+#define BOOST_ALIGN_ALIGNED_DELETE_HPP
+
+/**
+ Class aligned_delete.
+
+ @file
+ @author Glen Fernandes
+*/
+
+#include <boost/config.hpp>
+#include <boost/align/aligned_alloc.hpp>
+#include <boost/align/aligned_delete_forward.hpp>
+
+/**
+ Boost namespace.
+*/
+namespace boost {
+ /**
+ Alignment namespace.
+ */
+ namespace alignment {
+ /**
+ Class aligned_delete.
+ */
+ class aligned_delete {
+ public:
+ /**
+ Calls `~T()` on `ptr` to destroy the object and then
+ calls `aligned_free` on `ptr` to free the allocated
+ memory.
+
+ @remark **Note:** If `T` is an incomplete type, the
+ program is ill-formed.
+ */
+ template<class T>
+ void operator()(T* ptr) const
+ BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(ptr->~T())) {
+ if (ptr) {
+ ptr->~T();
+ alignment::aligned_free(ptr);
+ }
+ }
+ };
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/aligned_delete_forward.hpp b/3party/boost/boost/align/aligned_delete_forward.hpp
new file mode 100644
index 0000000000..efa882274a
--- /dev/null
+++ b/3party/boost/boost/align/aligned_delete_forward.hpp
@@ -0,0 +1,35 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGNED_DELETE_FORWARD_HPP
+#define BOOST_ALIGN_ALIGNED_DELETE_FORWARD_HPP
+
+/**
+ Class aligned_delete
+ forward declaration.
+
+ @note This header provides a forward declaration
+ for the `aligned_delete` class.
+
+ @file
+ @author Glen Fernandes
+*/
+
+/**
+ @cond
+*/
+namespace boost {
+ namespace alignment {
+ class aligned_delete;
+ }
+}
+/**
+ @endcond
+*/
+
+#endif
diff --git a/3party/boost/boost/align/alignment_of.hpp b/3party/boost/boost/align/alignment_of.hpp
new file mode 100644
index 0000000000..ebd87aab92
--- /dev/null
+++ b/3party/boost/boost/align/alignment_of.hpp
@@ -0,0 +1,78 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGNMENT_OF_HPP
+#define BOOST_ALIGN_ALIGNMENT_OF_HPP
+
+/**
+ Class template alignment_of.
+
+ @file
+ @author Glen Fernandes
+*/
+
+#include <boost/config.hpp>
+#include <boost/align/alignment_of_forward.hpp>
+#include <boost/align/detail/type_traits.hpp>
+
+#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
+#include <boost/align/detail/alignment_of_cxx11.hpp>
+#elif defined(BOOST_MSVC)
+#include <boost/align/detail/alignment_of_msvc.hpp>
+#elif defined(BOOST_CLANG)
+#include <boost/align/detail/alignment_of_clang.hpp>
+#elif defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600)
+#include <boost/align/detail/alignment_of_gcc.hpp>
+#elif defined(__CODEGEARC__)
+#include <boost/align/detail/alignment_of_codegear.hpp>
+#elif defined(__GNUC__) && defined(__unix__) && !defined(__LP64__)
+#include <boost/align/detail/alignment_of.hpp>
+#elif __GNUC__ > 4
+#include <boost/align/detail/alignment_of_gcc.hpp>
+#elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)
+#include <boost/align/detail/alignment_of_gcc.hpp>
+#else
+#include <boost/align/detail/alignment_of.hpp>
+#endif
+
+/**
+ Boost namespace.
+*/
+namespace boost {
+ /**
+ Alignment namespace.
+ */
+ namespace alignment {
+ /**
+ Class template alignment_of.
+
+ @remark **Value:** `alignof(T)`.
+ */
+ template<class T>
+ struct alignment_of {
+ /**
+ @enum
+ */
+ enum {
+ /**
+ @cond
+ */
+ value = detail::alignment_of<typename
+ detail::remove_cv<typename
+ detail::remove_all_extents<typename
+ detail::remove_reference<T>::
+ type>::type>::type>::value
+ /**
+ @endcond
+ */
+ };
+ };
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/alignment_of_forward.hpp b/3party/boost/boost/align/alignment_of_forward.hpp
new file mode 100644
index 0000000000..2abd083866
--- /dev/null
+++ b/3party/boost/boost/align/alignment_of_forward.hpp
@@ -0,0 +1,36 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_ALIGNMENT_OF_FORWARD_HPP
+#define BOOST_ALIGN_ALIGNMENT_OF_FORWARD_HPP
+
+/**
+ Class template alignment_of
+ forward declaration.
+
+ @note This header provides a forward declaration
+ for the `alignment_of` class template.
+
+ @file
+ @author Glen Fernandes
+*/
+
+/**
+ @cond
+*/
+namespace boost {
+ namespace alignment {
+ template<class T>
+ struct alignment_of;
+ }
+}
+/**
+ @endcond
+*/
+
+#endif
diff --git a/3party/boost/boost/align/detail/address.hpp b/3party/boost/boost/align/detail/address.hpp
new file mode 100644
index 0000000000..a205cbd171
--- /dev/null
+++ b/3party/boost/boost/align/detail/address.hpp
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ADDRESS_HPP
+#define BOOST_ALIGN_DETAIL_ADDRESS_HPP
+
+#include <boost/cstdint.hpp>
+#include <cstddef>
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+#if defined(BOOST_HAS_INTPTR_T)
+ typedef boost::uintptr_t address_t;
+#else
+ typedef std::size_t address_t;
+#endif
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/addressof.hpp b/3party/boost/boost/align/detail/addressof.hpp
new file mode 100644
index 0000000000..1b9402f324
--- /dev/null
+++ b/3party/boost/boost/align/detail/addressof.hpp
@@ -0,0 +1,32 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ADDRESSOF_HPP
+#define BOOST_ALIGN_DETAIL_ADDRESSOF_HPP
+
+#include <boost/config.hpp>
+
+#if !defined(BOOST_NO_CXX11_ADDRESSOF)
+#include <memory>
+#else
+#include <boost/core/addressof.hpp>
+#endif
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+#if !defined(BOOST_NO_CXX11_ADDRESSOF)
+ using std::addressof;
+#else
+ using boost::addressof;
+#endif
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/align.hpp b/3party/boost/boost/align/detail/align.hpp
new file mode 100644
index 0000000000..d4d4287c58
--- /dev/null
+++ b/3party/boost/boost/align/detail/align.hpp
@@ -0,0 +1,38 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGN_HPP
+#define BOOST_ALIGN_DETAIL_ALIGN_HPP
+
+#include <boost/assert.hpp>
+#include <boost/align/detail/address.hpp>
+#include <boost/align/detail/is_alignment.hpp>
+#include <cstddef>
+
+namespace boost {
+ namespace alignment {
+ inline void* align(std::size_t alignment, std::size_t size,
+ void*& ptr, std::size_t& space)
+ {
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ std::size_t n = detail::address_t(ptr) & (alignment - 1);
+ if (n != 0) {
+ n = alignment - n;
+ }
+ void* p = 0;
+ if (n <= space && size <= space - n) {
+ p = static_cast<char*>(ptr) + n;
+ ptr = p;
+ space -= n;
+ }
+ return p;
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/align_cxx11.hpp b/3party/boost/boost/align/detail/align_cxx11.hpp
new file mode 100644
index 0000000000..b79ea8e8cd
--- /dev/null
+++ b/3party/boost/boost/align/detail/align_cxx11.hpp
@@ -0,0 +1,20 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGN_CXX11_HPP
+#define BOOST_ALIGN_DETAIL_ALIGN_CXX11_HPP
+
+#include <memory>
+
+namespace boost {
+ namespace alignment {
+ using std::align;
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/aligned_alloc.hpp b/3party/boost/boost/align/detail/aligned_alloc.hpp
new file mode 100644
index 0000000000..3ed58b5d2f
--- /dev/null
+++ b/3party/boost/boost/align/detail/aligned_alloc.hpp
@@ -0,0 +1,53 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/align/align.hpp>
+#include <boost/align/alignment_of.hpp>
+#include <boost/align/detail/is_alignment.hpp>
+#include <cstdlib>
+
+namespace boost {
+ namespace alignment {
+ inline void* aligned_alloc(std::size_t alignment,
+ std::size_t size) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ enum {
+ void_align = alignment_of<void*>::value,
+ };
+ if (alignment < void_align) {
+ alignment = void_align;
+ }
+ std::size_t n = size + alignment - 1;
+ void* p1 = 0;
+ void* p2 = std::malloc(n + sizeof p1);
+ if (p2) {
+ p1 = static_cast<char*>(p2) + sizeof p1;
+ (void)align(alignment, size, p1, n);
+ *(static_cast<void**>(p1) - 1) = p2;
+ }
+ return p1;
+ }
+
+ inline void aligned_free(void* ptr)
+ BOOST_NOEXCEPT
+ {
+ if (ptr) {
+ void* p = *(static_cast<void**>(ptr) - 1);
+ std::free(p);
+ }
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/aligned_alloc_android.hpp b/3party/boost/boost/align/detail/aligned_alloc_android.hpp
new file mode 100644
index 0000000000..bad569a9c4
--- /dev/null
+++ b/3party/boost/boost/align/detail/aligned_alloc_android.hpp
@@ -0,0 +1,35 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_ANDROID_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_ANDROID_HPP
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/align/detail/is_alignment.hpp>
+#include <cstddef>
+#include <malloc.h>
+
+namespace boost {
+ namespace alignment {
+ inline void* aligned_alloc(std::size_t alignment,
+ std::size_t size) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ return ::memalign(alignment, size);
+ }
+
+ inline void aligned_free(void* ptr)
+ BOOST_NOEXCEPT
+ {
+ ::free(ptr);
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/aligned_alloc_macos.hpp b/3party/boost/boost/align/detail/aligned_alloc_macos.hpp
new file mode 100644
index 0000000000..99ce60d3df
--- /dev/null
+++ b/3party/boost/boost/align/detail/aligned_alloc_macos.hpp
@@ -0,0 +1,48 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MACOS_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MACOS_HPP
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/align/detail/is_alignment.hpp>
+#include <cstddef>
+#include <stdlib.h>
+
+namespace boost {
+ namespace alignment {
+ inline void* aligned_alloc(std::size_t alignment,
+ std::size_t size) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ enum {
+ void_size = sizeof(void*)
+ };
+ if (!size) {
+ return 0;
+ }
+ if (alignment < void_size) {
+ alignment = void_size;
+ }
+ void* p;
+ if (::posix_memalign(&p, alignment, size) != 0) {
+ p = 0;
+ }
+ return p;
+ }
+
+ inline void aligned_free(void* ptr)
+ BOOST_NOEXCEPT
+ {
+ ::free(ptr);
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/aligned_alloc_msvc.hpp b/3party/boost/boost/align/detail/aligned_alloc_msvc.hpp
new file mode 100644
index 0000000000..93ed594f0b
--- /dev/null
+++ b/3party/boost/boost/align/detail/aligned_alloc_msvc.hpp
@@ -0,0 +1,35 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MSVC_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MSVC_HPP
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/align/detail/is_alignment.hpp>
+#include <cstddef>
+#include <malloc.h>
+
+namespace boost {
+ namespace alignment {
+ inline void* aligned_alloc(std::size_t alignment,
+ std::size_t size) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ return ::_aligned_malloc(size, alignment);
+ }
+
+ inline void aligned_free(void* ptr)
+ BOOST_NOEXCEPT
+ {
+ ::_aligned_free(ptr);
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/aligned_alloc_posix.hpp b/3party/boost/boost/align/detail/aligned_alloc_posix.hpp
new file mode 100644
index 0000000000..3663030a17
--- /dev/null
+++ b/3party/boost/boost/align/detail/aligned_alloc_posix.hpp
@@ -0,0 +1,45 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_POSIX_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_POSIX_HPP
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/align/detail/is_alignment.hpp>
+#include <cstddef>
+#include <stdlib.h>
+
+namespace boost {
+ namespace alignment {
+ inline void* aligned_alloc(std::size_t alignment,
+ std::size_t size) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ enum {
+ void_size = sizeof(void*)
+ };
+ if (alignment < void_size) {
+ alignment = void_size;
+ }
+ void* p;
+ if (::posix_memalign(&p, alignment, size) != 0) {
+ p = 0;
+ }
+ return p;
+ }
+
+ inline void aligned_free(void* ptr)
+ BOOST_NOEXCEPT
+ {
+ ::free(ptr);
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/aligned_alloc_sunos.hpp b/3party/boost/boost/align/detail/aligned_alloc_sunos.hpp
new file mode 100644
index 0000000000..aebf1801f3
--- /dev/null
+++ b/3party/boost/boost/align/detail/aligned_alloc_sunos.hpp
@@ -0,0 +1,35 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_SUNOS_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_SUNOS_HPP
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/align/detail/is_alignment.hpp>
+#include <cstddef>
+#include <stdlib.h>
+
+namespace boost {
+ namespace alignment {
+ inline void* aligned_alloc(std::size_t alignment,
+ std::size_t size) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ return ::memalign(alignment, size);
+ }
+
+ inline void aligned_free(void* ptr)
+ BOOST_NOEXCEPT
+ {
+ ::free(ptr);
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/alignment_of.hpp b/3party/boost/boost/align/detail/alignment_of.hpp
new file mode 100644
index 0000000000..44745adddf
--- /dev/null
+++ b/3party/boost/boost/align/detail/alignment_of.hpp
@@ -0,0 +1,29 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_HPP
+
+#include <boost/align/detail/min_size.hpp>
+#include <boost/align/detail/padded.hpp>
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<class T>
+ struct alignment_of {
+ enum {
+ value = detail::min_size<sizeof(T),
+ sizeof(detail::padded<T>) - sizeof(T)>::value
+ };
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/alignment_of_clang.hpp b/3party/boost/boost/align/detail/alignment_of_clang.hpp
new file mode 100644
index 0000000000..526ff7b58c
--- /dev/null
+++ b/3party/boost/boost/align/detail/alignment_of_clang.hpp
@@ -0,0 +1,25 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CLANG_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CLANG_HPP
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<class T>
+ struct alignment_of {
+ enum {
+ value = __alignof(T)
+ };
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/alignment_of_codegear.hpp b/3party/boost/boost/align/detail/alignment_of_codegear.hpp
new file mode 100644
index 0000000000..2af47e91d1
--- /dev/null
+++ b/3party/boost/boost/align/detail/alignment_of_codegear.hpp
@@ -0,0 +1,25 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CODEGEAR_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CODEGEAR_HPP
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<class T>
+ struct alignment_of {
+ enum {
+ value = alignof(T)
+ };
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/alignment_of_cxx11.hpp b/3party/boost/boost/align/detail/alignment_of_cxx11.hpp
new file mode 100644
index 0000000000..16327c6f7b
--- /dev/null
+++ b/3party/boost/boost/align/detail/alignment_of_cxx11.hpp
@@ -0,0 +1,22 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CXX11_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CXX11_HPP
+
+#include <type_traits>
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ using std::alignment_of;
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/alignment_of_gcc.hpp b/3party/boost/boost/align/detail/alignment_of_gcc.hpp
new file mode 100644
index 0000000000..426dbba5e3
--- /dev/null
+++ b/3party/boost/boost/align/detail/alignment_of_gcc.hpp
@@ -0,0 +1,25 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_GCC_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_GCC_HPP
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<class T>
+ struct alignment_of {
+ enum {
+ value = __alignof__(T)
+ };
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/alignment_of_msvc.hpp b/3party/boost/boost/align/detail/alignment_of_msvc.hpp
new file mode 100644
index 0000000000..fcf2b7dba0
--- /dev/null
+++ b/3party/boost/boost/align/detail/alignment_of_msvc.hpp
@@ -0,0 +1,30 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_MSVC_HPP
+#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_MSVC_HPP
+
+#include <boost/align/detail/min_size.hpp>
+#include <boost/align/detail/padded.hpp>
+#include <cstddef>
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<class T>
+ struct alignment_of {
+ enum {
+ value = detail::min_size<sizeof(T),
+ offsetof(padded<T>, object)>::value
+ };
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/is_aligned.hpp b/3party/boost/boost/align/detail/is_aligned.hpp
new file mode 100644
index 0000000000..a017e6b83a
--- /dev/null
+++ b/3party/boost/boost/align/detail/is_aligned.hpp
@@ -0,0 +1,29 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_IS_ALIGNED_HPP
+#define BOOST_ALIGN_DETAIL_IS_ALIGNED_HPP
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/align/detail/address.hpp>
+#include <boost/align/detail/is_alignment.hpp>
+#include <cstddef>
+
+namespace boost {
+ namespace alignment {
+ inline bool is_aligned(std::size_t alignment,
+ const void* ptr) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ return (detail::address_t(ptr) & (alignment - 1)) == 0;
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/is_alignment.hpp b/3party/boost/boost/align/detail/is_alignment.hpp
new file mode 100644
index 0000000000..6e34cacb84
--- /dev/null
+++ b/3party/boost/boost/align/detail/is_alignment.hpp
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_IS_ALIGNMENT_HPP
+#define BOOST_ALIGN_DETAIL_IS_ALIGNMENT_HPP
+
+#include <boost/config.hpp>
+#include <cstddef>
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ BOOST_CONSTEXPR inline bool is_alignment(std::size_t
+ value) BOOST_NOEXCEPT
+ {
+ return (value > 0) && ((value & (value - 1)) == 0);
+ }
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/is_alignment_const.hpp b/3party/boost/boost/align/detail/is_alignment_const.hpp
new file mode 100644
index 0000000000..f6d7e97408
--- /dev/null
+++ b/3party/boost/boost/align/detail/is_alignment_const.hpp
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_IS_ALIGNMENT_CONST_HPP
+#define BOOST_ALIGN_DETAIL_IS_ALIGNMENT_CONST_HPP
+
+#include <cstddef>
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<std::size_t N>
+ struct is_alignment_const {
+ enum {
+ value = (N > 0) && ((N & (N - 1)) == 0)
+ };
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/max_align.hpp b/3party/boost/boost/align/detail/max_align.hpp
new file mode 100644
index 0000000000..8e64e7bb9c
--- /dev/null
+++ b/3party/boost/boost/align/detail/max_align.hpp
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_MAX_ALIGN_HPP
+#define BOOST_ALIGN_DETAIL_MAX_ALIGN_HPP
+
+#include <cstddef>
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<std::size_t A, std::size_t B>
+ struct max_align {
+ enum {
+ value = (A > B) ? A : B
+ };
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/max_count_of.hpp b/3party/boost/boost/align/detail/max_count_of.hpp
new file mode 100644
index 0000000000..62917ac1f4
--- /dev/null
+++ b/3party/boost/boost/align/detail/max_count_of.hpp
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_MAX_COUNT_OF_HPP
+#define BOOST_ALIGN_DETAIL_MAX_COUNT_OF_HPP
+
+#include <cstddef>
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<class T>
+ struct max_count_of {
+ enum {
+ value = ~static_cast<std::size_t>(0) / sizeof(T)
+ };
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/min_size.hpp b/3party/boost/boost/align/detail/min_size.hpp
new file mode 100644
index 0000000000..20e31fb4b4
--- /dev/null
+++ b/3party/boost/boost/align/detail/min_size.hpp
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_MIN_SIZE_HPP
+#define BOOST_ALIGN_DETAIL_MIN_SIZE_HPP
+
+#include <cstddef>
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<std::size_t A, std::size_t B>
+ struct min_size {
+ enum {
+ value = (A < B) ? A : B
+ };
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/padded.hpp b/3party/boost/boost/align/detail/padded.hpp
new file mode 100644
index 0000000000..9aeeee8929
--- /dev/null
+++ b/3party/boost/boost/align/detail/padded.hpp
@@ -0,0 +1,24 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_PADDED_HPP
+#define BOOST_ALIGN_DETAIL_PADDED_HPP
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+ template<class T>
+ struct padded {
+ char unit;
+ T object;
+ };
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/detail/type_traits.hpp b/3party/boost/boost/align/detail/type_traits.hpp
new file mode 100644
index 0000000000..b250f18a2e
--- /dev/null
+++ b/3party/boost/boost/align/detail/type_traits.hpp
@@ -0,0 +1,90 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_DETAIL_TYPE_TRAITS_HPP
+#define BOOST_ALIGN_DETAIL_TYPE_TRAITS_HPP
+
+#include <boost/config.hpp>
+
+#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
+#include <type_traits>
+#else
+#include <cstddef>
+#endif
+
+namespace boost {
+ namespace alignment {
+ namespace detail {
+#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
+ using std::remove_reference;
+ using std::remove_all_extents;
+ using std::remove_cv;
+#else
+ template<class T>
+ struct remove_reference {
+ typedef T type;
+ };
+
+ template<class T>
+ struct remove_reference<T&> {
+ typedef T type;
+ };
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template<class T>
+ struct remove_reference<T&&> {
+ typedef T type;
+ };
+#endif
+
+ template<class T>
+ struct remove_all_extents {
+ typedef T type;
+ };
+
+ template<class T>
+ struct remove_all_extents<T[]> {
+ typedef typename remove_all_extents<T>::type type;
+ };
+
+ template<class T, std::size_t N>
+ struct remove_all_extents<T[N]> {
+ typedef typename remove_all_extents<T>::type type;
+ };
+
+ template<class T>
+ struct remove_const {
+ typedef T type;
+ };
+
+ template<class T>
+ struct remove_const<const T> {
+ typedef T type;
+ };
+
+ template<class T>
+ struct remove_volatile {
+ typedef T type;
+ };
+
+ template<class T>
+ struct remove_volatile<volatile T> {
+ typedef T type;
+ };
+
+ template<class T>
+ struct remove_cv {
+ typedef typename remove_volatile<typename
+ remove_const<T>::type>::type type;
+ };
+#endif
+ }
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/align/is_aligned.hpp b/3party/boost/boost/align/is_aligned.hpp
new file mode 100644
index 0000000000..d59bf8d9b8
--- /dev/null
+++ b/3party/boost/boost/align/is_aligned.hpp
@@ -0,0 +1,53 @@
+/*
+ Copyright (c) 2014 Glen Joseph Fernandes
+ glenfe at live dot com
+
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_ALIGN_IS_ALIGNED_HPP
+#define BOOST_ALIGN_IS_ALIGNED_HPP
+
+/**
+ Function is_aligned.
+
+ @file
+ @author Glen Fernandes
+*/
+
+/**
+ @cond
+*/
+#include <boost/align/detail/is_aligned.hpp>
+/**
+ @endcond
+*/
+
+/**
+ Boost namespace.
+*/
+namespace boost {
+ /**
+ Alignment namespace.
+ */
+ namespace alignment {
+ /**
+ Determines whether the space pointed to by
+ `ptr` has alignment specified by
+ `alignment`.
+
+ @param alignment Shall be a power of two.
+
+ @param ptr Pointer to test for alignment.
+
+ @return `true` if and only if `ptr` points
+ to space that has alignment specified by
+ `alignment`.
+ */
+ inline bool is_aligned(std::size_t alignment,
+ const void* ptr) BOOST_NOEXCEPT;
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/aligned_storage.hpp b/3party/boost/boost/aligned_storage.hpp
index ce277ab702..b5455f00b6 100644
--- a/3party/boost/boost/aligned_storage.hpp
+++ b/3party/boost/boost/aligned_storage.hpp
@@ -48,10 +48,10 @@ struct aligned_storage_imp
{
char buf[size_];
- typename mpl::eval_if_c<
+ typename ::boost::mpl::eval_if_c<
alignment_ == std::size_t(-1)
- , mpl::identity<detail::max_align>
- , type_with_alignment<alignment_>
+ , ::boost::mpl::identity< ::boost::detail::max_align >
+ , ::boost::type_with_alignment<alignment_>
>::type align_;
} data_;
void* address() const { return const_cast<aligned_storage_imp*>(this); }
@@ -76,12 +76,12 @@ class aligned_storage :
#else
public
#endif
- detail::aligned_storage::aligned_storage_imp<size_, alignment_>
+ ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_>
{
public: // constants
- typedef detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;
+ typedef ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;
BOOST_STATIC_CONSTANT(
std::size_t
@@ -96,25 +96,11 @@ public: // constants
)
);
-#if defined(__GNUC__) &&\
- (__GNUC__ > 3) ||\
- (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 ||\
- (__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >=3)))
-
private: // noncopyable
aligned_storage(const aligned_storage&);
aligned_storage& operator=(const aligned_storage&);
-#else // gcc less than 3.2.3
-
-public: // _should_ be noncopyable, but GCC compiler emits error
-
- aligned_storage(const aligned_storage&);
- aligned_storage& operator=(const aligned_storage&);
-
-#endif // gcc < 3.2.3 workaround
-
public: // structors
aligned_storage()
@@ -132,46 +118,22 @@ public: // accessors
return static_cast<type*>(this)->address();
}
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
const void* address() const
{
return static_cast<const type*>(this)->address();
}
-
-#else // MSVC6
-
- const void* address() const;
-
-#endif // MSVC6 workaround
-
};
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
-// MSVC6 seems not to like inline functions with const void* returns, so we
-// declare the following here:
-
-template <std::size_t S, std::size_t A>
-const void* aligned_storage<S,A>::address() const
-{
- return const_cast< aligned_storage<S,A>* >(this)->address();
-}
-
-#endif // MSVC6 workaround
-
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
//
// Make sure that is_pod recognises aligned_storage<>::type
// as a POD (Note that aligned_storage<> itself is not a POD):
//
template <std::size_t size_, std::size_t alignment_>
-struct is_pod<boost::detail::aligned_storage::aligned_storage_imp<size_,alignment_> >
+struct is_pod< ::boost::detail::aligned_storage::aligned_storage_imp<size_,alignment_> >
BOOST_TT_AUX_BOOL_C_BASE(true)
{
BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(true)
};
-#endif
} // namespace boost
diff --git a/3party/boost/boost/any.hpp b/3party/boost/boost/any.hpp
index 22ee76e452..a63fea42ad 100644
--- a/3party/boost/boost/any.hpp
+++ b/3party/boost/boost/any.hpp
@@ -3,7 +3,7 @@
#ifndef BOOST_ANY_INCLUDED
#define BOOST_ANY_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -12,22 +12,26 @@
// with features contributed and bugs found by
// Antony Polukhin, Ed Brey, Mark Rodgers,
// Peter Dimov, and James Curran
-// when: July 2001, Aplril 2013
+// when: July 2001, April 2013 - May 2013
#include <algorithm>
#include <typeinfo>
#include "boost/config.hpp"
#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_const.hpp>
#include <boost/throw_exception.hpp>
#include <boost/static_assert.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_const.hpp>
// See boost/python/type_id.hpp
// TODO: add BOOST_TYPEID_COMPARE_BY_NAME to config.hpp
-# if (defined(__GNUC__) && __GNUC__ >= 3) \
+# if defined(__GNUC__) \
|| defined(_AIX) \
|| ( defined(__sgi) && defined(__host_mips)) \
|| (defined(__hpux) && defined(__HP_aCC)) \
@@ -49,7 +53,7 @@ namespace boost
template<typename ValueType>
any(const ValueType & value)
- : content(new holder<ValueType>(value))
+ : content(new holder<BOOST_DEDUCED_TYPENAME decay<const ValueType>::type>(value))
{
}
@@ -68,8 +72,10 @@ namespace boost
// Perfect forwarding of ValueType
template<typename ValueType>
- any(ValueType&& value, typename boost::disable_if<boost::is_same<any&, ValueType> >::type* = 0)
- : content(new holder< typename remove_reference<ValueType>::type >(static_cast<ValueType&&>(value)))
+ any(ValueType&& value
+ , typename boost::disable_if<boost::is_same<any&, ValueType> >::type* = 0 // disable if value has type `any&`
+ , typename boost::disable_if<boost::is_const<ValueType> >::type* = 0) // disable if value has type `const ValueType&&`
+ : content(new holder< typename decay<ValueType>::type >(static_cast<ValueType&&>(value)))
{
}
#endif
@@ -133,7 +139,12 @@ namespace boost
return !content;
}
- const std::type_info & type() const
+ void clear() BOOST_NOEXCEPT
+ {
+ any().swap(*this);
+ }
+
+ const std::type_info & type() const BOOST_NOEXCEPT
{
return content ? content->type() : typeid(void);
}
@@ -154,7 +165,7 @@ namespace boost
public: // queries
- virtual const std::type_info & type() const = 0;
+ virtual const std::type_info & type() const BOOST_NOEXCEPT = 0;
virtual placeholder * clone() const = 0;
@@ -178,7 +189,7 @@ namespace boost
#endif
public: // queries
- virtual const std::type_info & type() const
+ virtual const std::type_info & type() const BOOST_NOEXCEPT
{
return typeid(ValueType);
}
@@ -221,10 +232,10 @@ namespace boost
lhs.swap(rhs);
}
- class bad_any_cast : public std::bad_cast
+ class BOOST_SYMBOL_VISIBLE bad_any_cast : public std::bad_cast
{
public:
- virtual const char * what() const throw()
+ virtual const char * what() const BOOST_NOEXCEPT_OR_NOTHROW
{
return "boost::bad_any_cast: "
"failed conversion using boost::any_cast";
@@ -255,35 +266,44 @@ namespace boost
{
typedef BOOST_DEDUCED_TYPENAME remove_reference<ValueType>::type nonref;
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- // If 'nonref' is still reference type, it means the user has not
- // specialized 'remove_reference'.
-
- // Please use BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION macro
- // to generate specialization of remove_reference for your class
- // See type traits library documentation for details
- BOOST_STATIC_ASSERT(!is_reference<nonref>::value);
-#endif
nonref * result = any_cast<nonref>(&operand);
if(!result)
boost::throw_exception(bad_any_cast());
- return *result;
+
+ // Attempt to avoid construction of a temporary object in cases when
+ // `ValueType` is not a reference. Example:
+ // `static_cast<std::string>(*result);`
+ // which is equal to `std::string(*result);`
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<
+ boost::is_reference<ValueType>,
+ ValueType,
+ BOOST_DEDUCED_TYPENAME boost::add_reference<ValueType>::type
+ >::type ref_type;
+
+ return static_cast<ref_type>(*result);
}
template<typename ValueType>
inline ValueType any_cast(const any & operand)
{
typedef BOOST_DEDUCED_TYPENAME remove_reference<ValueType>::type nonref;
+ return any_cast<const nonref &>(const_cast<any &>(operand));
+ }
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- // The comment in the above version of 'any_cast' explains when this
- // assert is fired and what to do.
- BOOST_STATIC_ASSERT(!is_reference<nonref>::value);
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ template<typename ValueType>
+ inline ValueType any_cast(any&& operand)
+ {
+ BOOST_STATIC_ASSERT_MSG(
+ boost::is_rvalue_reference<ValueType&&>::value /*true if ValueType is rvalue or just a value*/
+ || boost::is_const< typename boost::remove_reference<ValueType>::type >::value,
+ "boost::any_cast shall not be used for getting nonconst references to temporary objects"
+ );
+ return any_cast<ValueType>(operand);
+ }
#endif
- return any_cast<const nonref &>(const_cast<any &>(operand));
- }
// Note: The "unsafe" versions of any_cast are not part of the
// public interface and may be removed at any time. They are
diff --git a/3party/boost/boost/archive/add_facet.hpp b/3party/boost/boost/archive/add_facet.hpp
index 6bafe9bdb2..242bdd9001 100644
--- a/3party/boost/boost/archive/add_facet.hpp
+++ b/3party/boost/boost/archive/add_facet.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ADD_FACET_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/archive_exception.hpp b/3party/boost/boost/archive/archive_exception.hpp
index e27807bc26..ffb430c6a8 100644
--- a/3party/boost/boost/archive/archive_exception.hpp
+++ b/3party/boost/boost/archive/archive_exception.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -49,7 +49,7 @@ public:
typedef enum {
no_exception, // initialized without code
other_exception, // any excepton not listed below
- unregistered_class, // attempt to serialize a pointer of an
+ unregistered_class, // attempt to serialize a pointer of
// an unregistered class
invalid_signature, // first line of archive does not contain
// expected string
@@ -57,8 +57,8 @@ public:
// subsequent to this one
pointer_conflict, // an attempt has been made to directly
// serialize an object which has
- // already been serialzed through a pointer.
- // Were this permited, the archive load would result
+ // already been serialized through a pointer.
+ // Were this permitted, the archive load would result
// in the creation of an extra copy of the obect.
incompatible_native_format, // attempt to read native binary format
// on incompatible platform
@@ -70,7 +70,7 @@ public:
unregistered_cast, // base - derived relationship not registered with
// void_cast_register
unsupported_class_version, // type saved with a version # greater than the
- // one used by the program. This indicates that the proggram
+ // one used by the program. This indicates that the program
// needs to be rebuilt.
multiple_code_instantiation, // code for implementing serialization for some
// type has been instantiated in more than one module.
diff --git a/3party/boost/boost/archive/basic_archive.hpp b/3party/boost/boost/archive/basic_archive.hpp
index c5ac8808e5..0412112352 100644
--- a/3party/boost/boost/archive/basic_archive.hpp
+++ b/3party/boost/boost/archive/basic_archive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_ARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -15,7 +15,7 @@
// http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for updates, documentation, and revision history.
-
+#include <cstring> // count
#include <boost/assert.hpp>
#include <boost/config.hpp>
#include <boost/cstdint.hpp> // size_t
@@ -221,6 +221,9 @@ struct class_name_type :
operator char * () {
return t;
}
+ std::size_t size() const {
+ return std::strlen(t);
+ }
explicit class_name_type(const char *key_)
: t(const_cast<char *>(key_)){}
explicit class_name_type(char *key_)
diff --git a/3party/boost/boost/archive/basic_binary_iarchive.hpp b/3party/boost/boost/archive/basic_binary_iarchive.hpp
index d851dab4dc..a649d5e919 100644
--- a/3party/boost/boost/archive/basic_binary_iarchive.hpp
+++ b/3party/boost/boost/archive/basic_binary_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -44,21 +44,27 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_iarchive;
+} // namespace detail
+
/////////////////////////////////////////////////////////////////////////
// class basic_binary_iarchive - read serialized objects from a input binary stream
template<class Archive>
class basic_binary_iarchive :
public detail::common_iarchive<Archive>
{
-protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
-#elif defined(BOOST_MSVC)
- // for some inexplicable reason insertion of "class" generates compile erro
- // on msvc 7.1
- friend detail::interface_iarchive<Archive>;
#else
- friend class detail::interface_iarchive<Archive>;
+protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+ #else
+ friend class detail::interface_iarchive<Archive>;
+ #endif
#endif
// intermediate level to support override of operators
// fot templates in the absence of partial function
diff --git a/3party/boost/boost/archive/basic_binary_iprimitive.hpp b/3party/boost/boost/archive/basic_binary_iprimitive.hpp
index fc27123ded..2e72a1c6fa 100644
--- a/3party/boost/boost/archive/basic_binary_iprimitive.hpp
+++ b/3party/boost/boost/archive/basic_binary_iprimitive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -126,7 +126,7 @@ public:
template <class T>
#if defined(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS)
struct apply {
- typedef BOOST_DEDUCED_TYPENAME boost::serialization::is_bitwise_serializable< T >::type type;
+ typedef typename boost::serialization::is_bitwise_serializable< T >::type type;
};
#else
struct apply : public boost::serialization::is_bitwise_serializable< T > {};
@@ -178,7 +178,7 @@ basic_binary_iprimitive<Archive, Elem, Tr>::load_binary(
boost::serialization::throw_exception(
archive_exception(archive_exception::input_stream_error)
);
- std::memcpy(static_cast<char*>(address) + (count - s), &t, s);
+ std::memcpy(static_cast<char*>(address) + (count - s), &t, static_cast<std::size_t>(s));
}
}
diff --git a/3party/boost/boost/archive/basic_binary_oarchive.hpp b/3party/boost/boost/archive/basic_binary_oarchive.hpp
index 01622b9f3d..f8b53e9d7c 100644
--- a/3party/boost/boost/archive/basic_binary_oarchive.hpp
+++ b/3party/boost/boost/archive/basic_binary_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -46,6 +46,10 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_oarchive;
+} // namespace detail
+
//////////////////////////////////////////////////////////////////////
// class basic_binary_oarchive - write serialized objects to a binary output stream
// note: this archive has no pretensions to portability. Archive format
@@ -58,15 +62,17 @@ template<class Archive>
class basic_binary_oarchive :
public archive::detail::common_oarchive<Archive>
{
-protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
-#elif defined(BOOST_MSVC)
- // for some inexplicable reason insertion of "class" generates compile erro
- // on msvc 7.1
- friend detail::interface_oarchive<Archive>;
#else
- friend class detail::interface_oarchive<Archive>;
+protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+ #else
+ friend class detail::interface_oarchive<Archive>;
+ #endif
#endif
// any datatype not specifed below will be handled by base class
typedef detail::common_oarchive<Archive> detail_common_oarchive;
diff --git a/3party/boost/boost/archive/basic_binary_oprimitive.hpp b/3party/boost/boost/archive/basic_binary_oprimitive.hpp
index 53e44e4fa9..ba070cd39a 100644
--- a/3party/boost/boost/archive/basic_binary_oprimitive.hpp
+++ b/3party/boost/boost/archive/basic_binary_oprimitive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -58,8 +58,7 @@ namespace archive {
// class basic_binary_oprimitive - binary output of prmitives
template<class Archive, class Elem, class Tr>
-class basic_binary_oprimitive
-{
+class basic_binary_oprimitive {
#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
friend class save_access;
protected:
@@ -122,7 +121,7 @@ public:
template <class T>
#if defined(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS)
struct apply {
- typedef BOOST_DEDUCED_TYPENAME boost::serialization::is_bitwise_serializable< T >::type type;
+ typedef typename boost::serialization::is_bitwise_serializable< T >::type type;
};
#else
struct apply : public boost::serialization::is_bitwise_serializable< T > {};
@@ -170,7 +169,7 @@ basic_binary_oprimitive<Archive, Elem, Tr>::save_binary(
archive_exception(archive_exception::output_stream_error)
);
//os.write(
- // static_cast<const BOOST_DEDUCED_TYPENAME OStream::char_type *>(address),
+ // static_cast<const typename OStream::char_type *>(address),
// count
//);
//BOOST_ASSERT(os.good());
diff --git a/3party/boost/boost/archive/basic_streambuf_locale_saver.hpp b/3party/boost/boost/archive/basic_streambuf_locale_saver.hpp
index ca764e1048..6bf8f715cb 100644
--- a/3party/boost/boost/archive/basic_streambuf_locale_saver.hpp
+++ b/3party/boost/boost/archive/basic_streambuf_locale_saver.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -50,7 +50,7 @@ public:
explicit basic_streambuf_locale_saver( state_type &s )
: s_save_( s ), a_save_( s.getloc() )
{}
- basic_streambuf_locale_saver( state_type &s, aspect_type const &a )
+ explicit basic_streambuf_locale_saver( state_type &s, aspect_type const &a )
: s_save_( s ), a_save_( s.pubimbue(a) )
{}
~basic_streambuf_locale_saver()
diff --git a/3party/boost/boost/archive/basic_text_iarchive.hpp b/3party/boost/boost/archive/basic_text_iarchive.hpp
index 729d51aadf..0e78ff6d14 100644
--- a/3party/boost/boost/archive/basic_text_iarchive.hpp
+++ b/3party/boost/boost/archive/basic_text_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -40,21 +40,27 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_iarchive;
+} // namespace detail
+
/////////////////////////////////////////////////////////////////////////
// class basic_text_iarchive - read serialized objects from a input text stream
template<class Archive>
class basic_text_iarchive :
public detail::common_iarchive<Archive>
{
-protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
-#elif defined(BOOST_MSVC)
- // for some inexplicable reason insertion of "class" generates compile erro
- // on msvc 7.1
- friend detail::interface_iarchive<Archive>;
#else
- friend class detail::interface_iarchive<Archive>;
+protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+ #else
+ friend class detail::interface_iarchive<Archive>;
+ #endif
#endif
// intermediate level to support override of operators
// fot templates in the absence of partial function
diff --git a/3party/boost/boost/archive/basic_text_iprimitive.hpp b/3party/boost/boost/archive/basic_text_iprimitive.hpp
index b927ec91a0..dabc3c8710 100644
--- a/3party/boost/boost/archive/basic_text_iprimitive.hpp
+++ b/3party/boost/boost/archive/basic_text_iprimitive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -64,13 +64,8 @@ namespace archive {
#endif
template<class IStream>
-class basic_text_iprimitive
-{
-#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+class basic_text_iprimitive {
protected:
-#else
-public:
-#endif
IStream &is;
io::ios_flags_saver flags_saver;
io::ios_precision_saver precision_saver;
@@ -78,18 +73,16 @@ public:
#ifndef BOOST_NO_STD_LOCALE
boost::scoped_ptr<std::locale> archive_locale;
basic_streambuf_locale_saver<
- BOOST_DEDUCED_TYPENAME IStream::char_type,
- BOOST_DEDUCED_TYPENAME IStream::traits_type
+ typename IStream::char_type,
+ typename IStream::traits_type
> locale_saver;
#endif
template<class T>
void load(T & t)
{
- if(! is.fail()){
- is >> t;
+ if(is >> t)
return;
- }
boost::serialization::throw_exception(
archive_exception(archive_exception::input_stream_error)
);
diff --git a/3party/boost/boost/archive/basic_text_oarchive.hpp b/3party/boost/boost/archive/basic_text_oarchive.hpp
index dd10f65981..bed9cd34d6 100644
--- a/3party/boost/boost/archive/basic_text_oarchive.hpp
+++ b/3party/boost/boost/archive/basic_text_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -42,23 +42,29 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_oarchive;
+} // namespace detail
+
/////////////////////////////////////////////////////////////////////////
// class basic_text_oarchive
template<class Archive>
class basic_text_oarchive :
public detail::common_oarchive<Archive>
{
-protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
-|| BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560))
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
-#elif defined(BOOST_MSVC)
- // for some inexplicable reason insertion of "class" generates compile erro
- // on msvc 7.1
- friend detail::interface_oarchive<Archive>;
#else
- friend class detail::interface_oarchive<Archive>;
+protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+ #else
+ friend class detail::interface_oarchive<Archive>;
+ #endif
#endif
+
enum {
none,
eol,
diff --git a/3party/boost/boost/archive/basic_text_oprimitive.hpp b/3party/boost/boost/archive/basic_text_oprimitive.hpp
index 06885ad35e..73a0a62e56 100644
--- a/3party/boost/boost/archive/basic_text_oprimitive.hpp
+++ b/3party/boost/boost/archive/basic_text_oprimitive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -26,13 +26,14 @@
#include <iomanip>
#include <locale>
-#include <boost/config/no_tr1/cmath.hpp> // isnan
#include <boost/assert.hpp>
#include <cstddef> // size_t
#include <boost/config.hpp>
#include <boost/static_assert.hpp>
#include <boost/detail/workaround.hpp>
+#include <boost/io/ios_state.hpp>
+
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
#include <boost/archive/dinkumware.hpp>
#endif
@@ -46,6 +47,8 @@ namespace std{
} // namespace std
#endif
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/mpl/bool.hpp>
#include <boost/limits.hpp>
#include <boost/integer.hpp>
#include <boost/io/ios_state.hpp>
@@ -65,11 +68,7 @@ class save_access;
template<class OStream>
class basic_text_oprimitive
{
-#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
protected:
-#else
-public:
-#endif
OStream &os;
io::ios_flags_saver flags_saver;
io::ios_precision_saver precision_saver;
@@ -77,21 +76,11 @@ public:
#ifndef BOOST_NO_STD_LOCALE
boost::scoped_ptr<std::locale> archive_locale;
basic_streambuf_locale_saver<
- BOOST_DEDUCED_TYPENAME OStream::char_type,
- BOOST_DEDUCED_TYPENAME OStream::traits_type
+ typename OStream::char_type,
+ typename OStream::traits_type
> locale_saver;
#endif
- // default saving of primitives.
- template<class T>
- void save(const T &t){
- if(os.fail())
- boost::serialization::throw_exception(
- archive_exception(archive_exception::output_stream_error)
- );
- os << t;
- }
-
/////////////////////////////////////////////////////////
// fundamental types that need special treatment
void save(const bool t){
@@ -123,33 +112,77 @@ public:
save(static_cast<int>(t));
}
#endif
- void save(const float t)
- {
- // must be a user mistake - can't serialize un-initialized data
+
+ /////////////////////////////////////////////////////////
+ // saving of any types not listed above
+
+ template<class T>
+ void save_impl(const T &t, boost::mpl::bool_<false> &){
if(os.fail())
boost::serialization::throw_exception(
archive_exception(archive_exception::output_stream_error)
);
- os << std::setprecision(std::numeric_limits<float>::digits10 + 2);
os << t;
}
- void save(const double t)
- {
+
+ /////////////////////////////////////////////////////////
+ // floating point types need even more special treatment
+ // the following determines whether the type T is some sort
+ // of floating point type. Note that we then assume that
+ // the stream << operator is defined on that type - if not
+ // we'll get a compile time error. This is meant to automatically
+ // support synthesized types which support floating point
+ // operations. Also it should handle compiler dependent types
+ // such long double. Due to John Maddock.
+
+ template<class T>
+ struct is_float {
+ typedef typename mpl::bool_<
+ boost::is_floating_point<T>::value
+ || (std::numeric_limits<T>::is_specialized
+ && !std::numeric_limits<T>::is_integer
+ && !std::numeric_limits<T>::is_exact
+ && std::numeric_limits<T>::max_exponent)
+ >::type type;
+ };
+
+ template<class T>
+ void save_impl(const T &t, boost::mpl::bool_<true> &){
// must be a user mistake - can't serialize un-initialized data
if(os.fail())
boost::serialization::throw_exception(
archive_exception(archive_exception::output_stream_error)
);
- os << std::setprecision(std::numeric_limits<double>::digits10 + 2);
- os << t;
+ // The formulae for the number of decimla digits required is given in
+ // http://www2.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf
+ // which is derived from Kahan's paper:
+ // www.eecs.berkeley.edu/~wkahan/ieee754status/ieee754.ps
+ // const unsigned int digits = (std::numeric_limits<T>::digits * 3010) / 10000;
+ // note: I've commented out the above because I didn't get good results. e.g.
+ // in one case I got a difference of 19 units.
+ #ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
+ const unsigned int digits = std::numeric_limits<T>::max_digits10;
+ #else
+ const unsigned int digits = std::numeric_limits<T>::digits10 + 2;
+ #endif
+ os << std::setprecision(digits) << std::scientific << t;
}
+
+ template<class T>
+ void save(const T & t){
+ boost::io::ios_flags_saver fs(os);
+ boost::io::ios_precision_saver ps(os);
+ typename is_float<T>::type tf;
+ save_impl(t, tf);
+ }
+
BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
basic_text_oprimitive(OStream & os, bool no_codecvt);
BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
~basic_text_oprimitive();
public:
// unformatted append of one character
- void put(BOOST_DEDUCED_TYPENAME OStream::char_type c){
+ void put(typename OStream::char_type c){
if(os.fail())
boost::serialization::throw_exception(
archive_exception(archive_exception::output_stream_error)
diff --git a/3party/boost/boost/archive/basic_xml_archive.hpp b/3party/boost/boost/archive/basic_xml_archive.hpp
index c99d94fa65..a4ad3a2f06 100644
--- a/3party/boost/boost/archive/basic_xml_archive.hpp
+++ b/3party/boost/boost/archive/basic_xml_archive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/basic_xml_iarchive.hpp b/3party/boost/boost/archive/basic_xml_iarchive.hpp
index d7b8bfd0ce..5047fef26c 100644
--- a/3party/boost/boost/archive/basic_xml_iarchive.hpp
+++ b/3party/boost/boost/archive/basic_xml_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -37,21 +37,27 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_iarchive;
+} // namespace detail
+
/////////////////////////////////////////////////////////////////////////
// class xml_iarchive - read serialized objects from a input text stream
template<class Archive>
class basic_xml_iarchive :
public detail::common_iarchive<Archive>
{
-protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
-#elif defined(BOOST_MSVC)
- // for some inexplicable reason insertion of "class" generates compile erro
- // on msvc 7.1
- friend detail::interface_oarchive<Archive>;
#else
- friend class detail::interface_oarchive<Archive>;
+protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+ #else
+ friend class detail::interface_iarchive<Archive>;
+ #endif
#endif
unsigned int depth;
BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
diff --git a/3party/boost/boost/archive/basic_xml_oarchive.hpp b/3party/boost/boost/archive/basic_xml_oarchive.hpp
index b571372ca7..c986833c27 100644
--- a/3party/boost/boost/archive/basic_xml_oarchive.hpp
+++ b/3party/boost/boost/archive/basic_xml_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -36,24 +36,29 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_oarchive;
+} // namespace detail
+
//////////////////////////////////////////////////////////////////////
// class basic_xml_oarchive - write serialized objects to a xml output stream
template<class Archive>
class basic_xml_oarchive :
public detail::common_oarchive<Archive>
{
-protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
-#elif defined(BOOST_MSVC)
+#else
+protected:
+#endif
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
// for some inexplicable reason insertion of "class" generates compile erro
// on msvc 7.1
friend detail::interface_oarchive<Archive>;
- friend class save_access;
#else
friend class detail::interface_oarchive<Archive>;
- friend class save_access;
#endif
+ friend class save_access;
// special stuff for xml output
unsigned int depth;
bool indent_next;
diff --git a/3party/boost/boost/archive/binary_iarchive.hpp b/3party/boost/boost/archive/binary_iarchive.hpp
index 638d996729..ce67ccabd0 100644
--- a/3party/boost/boost/archive/binary_iarchive.hpp
+++ b/3party/boost/boost/archive/binary_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BINARY_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -25,44 +25,7 @@
# pragma warning(disable : 4511 4512)
#endif
-namespace boost {
-namespace archive {
-
-// do not derive from the classes below. If you want to extend this functionality
-// via inhertance, derived from text_iarchive_impl instead. This will
-// preserve correct static polymorphism.
-
-// same as binary_iarchive below - without the shared_ptr_helper
-class naked_binary_iarchive :
- public binary_iarchive_impl<
- boost::archive::naked_binary_iarchive,
- std::istream::char_type,
- std::istream::traits_type
- >
-{
-public:
- naked_binary_iarchive(std::istream & is, unsigned int flags = 0) :
- binary_iarchive_impl<
- naked_binary_iarchive, std::istream::char_type, std::istream::traits_type
- >(is, flags)
- {}
- naked_binary_iarchive(std::streambuf & bsb, unsigned int flags = 0) :
- binary_iarchive_impl<
- naked_binary_iarchive, std::istream::char_type, std::istream::traits_type
- >(bsb, flags)
- {}
-};
-
-} // namespace archive
-} // namespace boost
-
-// note special treatment of shared_ptr. This type needs a special
-// structure associated with every archive. We created a "mix-in"
-// class to provide this functionality. Since shared_ptr holds a
-// special esteem in the boost library - we included it here by default.
-#include <boost/archive/shared_ptr_helper.hpp>
-
-namespace boost {
+namespace boost {
namespace archive {
// do not derive from this class. If you want to extend this functionality
@@ -73,9 +36,7 @@ class binary_iarchive :
boost::archive::binary_iarchive,
std::istream::char_type,
std::istream::traits_type
- >,
- public detail::shared_ptr_helper
-{
+ >{
public:
binary_iarchive(std::istream & is, unsigned int flags = 0) :
binary_iarchive_impl<
diff --git a/3party/boost/boost/archive/binary_iarchive_impl.hpp b/3party/boost/boost/archive/binary_iarchive_impl.hpp
index 32c476d645..a9afe61688 100644
--- a/3party/boost/boost/archive/binary_iarchive_impl.hpp
+++ b/3party/boost/boost/archive/binary_iarchive_impl.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -29,6 +29,10 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_iarchive;
+} // namespace detail
+
template<class Archive, class Elem, class Tr>
class binary_iarchive_impl :
public basic_binary_iprimitive<Archive, Elem, Tr>,
@@ -37,10 +41,18 @@ class binary_iarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_iarchive<Archive>;
- friend class basic_binary_iarchive<Archive>;
- friend class load_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+ friend basic_binary_iarchive<Archive>;
+ friend load_access;
+ #else
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_binary_iarchive<Archive>;
+ friend class load_access;
+ #endif
#endif
// note: the following should not needed - but one compiler (vc 7.1)
// fails to compile one test (test_shared_ptr) without it !!!
diff --git a/3party/boost/boost/archive/binary_oarchive.hpp b/3party/boost/boost/archive/binary_oarchive.hpp
index 2aac14f908..89a86da418 100644
--- a/3party/boost/boost/archive/binary_oarchive.hpp
+++ b/3party/boost/boost/archive/binary_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BINARY_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -50,8 +50,6 @@ public:
{}
};
-typedef binary_oarchive naked_binary_oarchive;
-
} // namespace archive
} // namespace boost
diff --git a/3party/boost/boost/archive/binary_oarchive_impl.hpp b/3party/boost/boost/archive/binary_oarchive_impl.hpp
index 7ca773b601..a8c97333ec 100644
--- a/3party/boost/boost/archive/binary_oarchive_impl.hpp
+++ b/3party/boost/boost/archive/binary_oarchive_impl.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -30,6 +30,10 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_oarchive;
+} // namespace detail
+
template<class Archive, class Elem, class Tr>
class binary_oarchive_impl :
public basic_binary_oprimitive<Archive, Elem, Tr>,
@@ -38,10 +42,18 @@ class binary_oarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_oarchive<Archive>;
- friend class basic_binary_oarchive<Archive>;
- friend class save_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+ friend basic_binary_oarchive<Archive>;
+ friend save_access;
+ #else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_binary_oarchive<Archive>;
+ friend class save_access;
+ #endif
#endif
// note: the following should not needed - but one compiler (vc 7.1)
// fails to compile one test (test_shared_ptr) without it !!!
diff --git a/3party/boost/boost/archive/binary_wiarchive.hpp b/3party/boost/boost/archive/binary_wiarchive.hpp
index b5f6a7106b..775d8f8272 100644
--- a/3party/boost/boost/archive/binary_wiarchive.hpp
+++ b/3party/boost/boost/archive/binary_wiarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -28,43 +28,6 @@
namespace boost {
namespace archive {
-// same as binary_wiarchive below - without the shared_ptr_helper
-class naked_binary_wiarchive :
- public binary_iarchive_impl<
- boost::archive::naked_binary_wiarchive,
- std::wistream::char_type,
- std::wistream::traits_type
- >
-{
-public:
- naked_binary_wiarchive(std::wistream & is, unsigned int flags = 0) :
- binary_iarchive_impl<
- naked_binary_wiarchive,
- std::wistream::char_type,
- std::wistream::traits_type
- >(is, flags)
- {}
- naked_binary_wiarchive(std::wstreambuf & bsb, unsigned int flags = 0) :
- binary_iarchive_impl<
- naked_binary_wiarchive,
- std::wistream::char_type,
- std::wistream::traits_type
- >(bsb, flags)
- {}
-};
-
-} // namespace archive
-} // namespace boost
-
-// note special treatment of shared_ptr. This type needs a special
-// structure associated with every archive. We created a "mix-in"
-// class to provide this functionality. Since shared_ptr holds a
-// special esteem in the boost library - we included it here by default.
-#include <boost/archive/shared_ptr_helper.hpp>
-
-namespace boost {
-namespace archive {
-
class binary_wiarchive :
public binary_iarchive_impl<
binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
diff --git a/3party/boost/boost/archive/binary_woarchive.hpp b/3party/boost/boost/archive/binary_woarchive.hpp
index 2075dac8bc..a8817d6f8b 100644
--- a/3party/boost/boost/archive/binary_woarchive.hpp
+++ b/3party/boost/boost/archive/binary_woarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -49,8 +49,6 @@ public:
{}
};
-typedef binary_woarchive naked_binary_woarchive;
-
} // namespace archive
} // namespace boost
diff --git a/3party/boost/boost/archive/codecvt_null.hpp b/3party/boost/boost/archive/codecvt_null.hpp
index 910b26156a..caeefee5c0 100644
--- a/3party/boost/boost/archive/codecvt_null.hpp
+++ b/3party/boost/boost/archive/codecvt_null.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_CODECVT_NULL_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/archive_serializer_map.hpp b/3party/boost/boost/archive/detail/archive_serializer_map.hpp
index 6d2eec4a85..53fcae4045 100644
--- a/3party/boost/boost/archive/detail/archive_serializer_map.hpp
+++ b/3party/boost/boost/archive/detail/archive_serializer_map.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_SERIALIZER_MAP_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/auto_link_archive.hpp b/3party/boost/boost/archive/detail/auto_link_archive.hpp
index 05956f0e8f..79b0e490d6 100644
--- a/3party/boost/boost/archive/detail/auto_link_archive.hpp
+++ b/3party/boost/boost/archive/detail/auto_link_archive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/auto_link_warchive.hpp b/3party/boost/boost/archive/detail/auto_link_warchive.hpp
index 4d4efcd44f..683d191c20 100644
--- a/3party/boost/boost/archive/detail/auto_link_warchive.hpp
+++ b/3party/boost/boost/archive/detail/auto_link_warchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/basic_archive_impl.hpp b/3party/boost/boost/archive/detail/basic_archive_impl.hpp
index 589368ddc1..b84a509837 100644
--- a/3party/boost/boost/archive/detail/basic_archive_impl.hpp
+++ b/3party/boost/boost/archive/detail/basic_archive_impl.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_BASIC_ARCHIVE_IMPL_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/basic_config.hpp b/3party/boost/boost/archive/detail/basic_config.hpp
index 5e37cae40b..4bd2723eb2 100644
--- a/3party/boost/boost/archive/detail/basic_config.hpp
+++ b/3party/boost/boost/archive/detail/basic_config.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_BASIC_CONFIG_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/basic_iarchive.hpp b/3party/boost/boost/archive/detail/basic_iarchive.hpp
index f62987ecee..fdafbbf841 100644
--- a/3party/boost/boost/archive/detail/basic_iarchive.hpp
+++ b/3party/boost/boost/archive/detail/basic_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -22,10 +22,10 @@
#include <boost/config.hpp>
#include <boost/noncopyable.hpp>
-#include <boost/type_traits/broken_compiler_spec.hpp>
#include <boost/serialization/tracking_enum.hpp>
#include <boost/archive/basic_archive.hpp>
#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/detail/helper_collection.hpp>
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
namespace boost {
@@ -42,7 +42,8 @@ class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer;
//////////////////////////////////////////////////////////////////////
// class basic_iarchive - read serialized objects from a input stream
class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive :
- private boost::noncopyable
+ private boost::noncopyable,
+ public boost::archive::detail::helper_collection
{
friend class basic_iarchive_impl;
// hide implementation of this class to minimize header conclusion
@@ -99,12 +100,6 @@ public:
} // namespace archive
} // namespace boost
-// required by smart_cast for compilers not implementing
-// partial template specialization
-BOOST_TT_BROKEN_COMPILER_SPEC(
- boost::archive::detail::basic_iarchive
-)
-
#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
#endif //BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
diff --git a/3party/boost/boost/archive/detail/basic_iserializer.hpp b/3party/boost/boost/archive/detail/basic_iserializer.hpp
index 2f4f6d811f..3bff3e1256 100644
--- a/3party/boost/boost/archive/detail/basic_iserializer.hpp
+++ b/3party/boost/boost/archive/detail/basic_iserializer.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/basic_oarchive.hpp b/3party/boost/boost/archive/detail/basic_oarchive.hpp
index 402e569a61..f65d11036c 100644
--- a/3party/boost/boost/archive/detail/basic_oarchive.hpp
+++ b/3party/boost/boost/archive/detail/basic_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -20,14 +20,12 @@
#include <boost/config.hpp>
#include <boost/noncopyable.hpp>
-#include <boost/type_traits/broken_compiler_spec.hpp>
-
// can't use this - much as I'd like to as borland doesn't support it
// #include <boost/scoped_ptr.hpp>
#include <boost/archive/basic_archive.hpp>
#include <boost/serialization/tracking_enum.hpp>
-
+#include <boost/archive/detail/helper_collection.hpp>
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
namespace boost {
@@ -41,10 +39,12 @@ namespace detail {
class basic_oarchive_impl;
class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer;
class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer;
+
//////////////////////////////////////////////////////////////////////
// class basic_oarchive - write serialized objects to an output stream
class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive :
- private boost::noncopyable
+ private boost::noncopyable,
+ public boost::archive::detail::helper_collection
{
friend class basic_oarchive_impl;
// hide implementation of this class to minimize header conclusion
@@ -95,12 +95,6 @@ public:
} // namespace archive
} // namespace boost
-// required by smart_cast for compilers not implementing
-// partial template specialization
-BOOST_TT_BROKEN_COMPILER_SPEC(
- boost::archive::detail::basic_oarchive
-)
-
#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
#endif //BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
diff --git a/3party/boost/boost/archive/detail/basic_oserializer.hpp b/3party/boost/boost/archive/detail/basic_oserializer.hpp
index 74af7e6577..6ae063f55d 100644
--- a/3party/boost/boost/archive/detail/basic_oserializer.hpp
+++ b/3party/boost/boost/archive/detail/basic_oserializer.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/basic_pointer_iserializer.hpp b/3party/boost/boost/archive/detail/basic_pointer_iserializer.hpp
index d957b83e64..86badc1937 100644
--- a/3party/boost/boost/archive/detail/basic_pointer_iserializer.hpp
+++ b/3party/boost/boost/archive/detail/basic_pointer_iserializer.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -52,10 +52,11 @@ protected:
#endif
~basic_pointer_iserializer();
public:
+ virtual void * heap_allocation() const = 0;
virtual const basic_iserializer & get_basic_serializer() const = 0;
virtual void load_object_ptr(
basic_iarchive & ar,
- void * & x,
+ void * x,
const unsigned int file_version
) const = 0;
};
diff --git a/3party/boost/boost/archive/detail/basic_pointer_oserializer.hpp b/3party/boost/boost/archive/detail/basic_pointer_oserializer.hpp
index b0d3fb9597..bafc46a1d7 100644
--- a/3party/boost/boost/archive/detail/basic_pointer_oserializer.hpp
+++ b/3party/boost/boost/archive/detail/basic_pointer_oserializer.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/basic_serializer.hpp b/3party/boost/boost/archive/detail/basic_serializer.hpp
index 5dbd886525..c7d3b4befc 100644
--- a/3party/boost/boost/archive/detail/basic_serializer.hpp
+++ b/3party/boost/boost/archive/detail/basic_serializer.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_SERIALIZER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/basic_serializer_map.hpp b/3party/boost/boost/archive/detail/basic_serializer_map.hpp
index a991ea1dc1..202c20e1ff 100644
--- a/3party/boost/boost/archive/detail/basic_serializer_map.hpp
+++ b/3party/boost/boost/archive/detail/basic_serializer_map.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZER_MAP_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/check.hpp b/3party/boost/boost/archive/detail/check.hpp
index c9cba519f8..10034e7d10 100644
--- a/3party/boost/boost/archive/detail/check.hpp
+++ b/3party/boost/boost/archive/detail/check.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_CHECK_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#pragma inline_depth(511)
#pragma inline_recursion(on)
@@ -50,7 +50,7 @@ namespace detail {
template<class T>
inline void check_object_level(){
typedef
- BOOST_DEDUCED_TYPENAME mpl::greater_equal<
+ typename mpl::greater_equal<
serialization::implementation_level< T >,
mpl::int_<serialization::primitive_type>
>::type typex;
@@ -63,12 +63,12 @@ inline void check_object_level(){
template<class T>
inline void check_object_versioning(){
typedef
- BOOST_DEDUCED_TYPENAME mpl::or_<
- BOOST_DEDUCED_TYPENAME mpl::greater<
+ typename mpl::or_<
+ typename mpl::greater<
serialization::implementation_level< T >,
mpl::int_<serialization::object_serializable>
>,
- BOOST_DEDUCED_TYPENAME mpl::equal_to<
+ typename mpl::equal_to<
serialization::version< T >,
mpl::int_<0>
>
@@ -83,7 +83,7 @@ inline void check_object_tracking(){
// presume it has already been determined that
// T is not a const
BOOST_STATIC_ASSERT(! boost::is_const< T >::value);
- typedef BOOST_DEDUCED_TYPENAME mpl::equal_to<
+ typedef typename mpl::equal_to<
serialization::tracking_level< T >,
mpl::int_<serialization::track_never>
>::type typex;
@@ -105,13 +105,13 @@ inline void check_pointer_level(){
// we should only invoke this once we KNOW that T
// has been used as a pointer!!
typedef
- BOOST_DEDUCED_TYPENAME mpl::or_<
- BOOST_DEDUCED_TYPENAME mpl::greater<
+ typename mpl::or_<
+ typename mpl::greater<
serialization::implementation_level< T >,
mpl::int_<serialization::object_serializable>
>,
- BOOST_DEDUCED_TYPENAME mpl::not_<
- BOOST_DEDUCED_TYPENAME mpl::equal_to<
+ typename mpl::not_<
+ typename mpl::equal_to<
serialization::tracking_level< T >,
mpl::int_<serialization::track_selectively>
>
@@ -139,7 +139,7 @@ inline void check_pointer_level(){
template<class T>
void inline check_pointer_tracking(){
- typedef BOOST_DEDUCED_TYPENAME mpl::greater<
+ typedef typename mpl::greater<
serialization::tracking_level< T >,
mpl::int_<serialization::track_never>
>::type typex;
@@ -151,10 +151,10 @@ void inline check_pointer_tracking(){
template<class T>
inline void check_const_loading(){
typedef
- BOOST_DEDUCED_TYPENAME mpl::or_<
- BOOST_DEDUCED_TYPENAME boost::serialization::is_wrapper< T >,
- BOOST_DEDUCED_TYPENAME mpl::not_<
- BOOST_DEDUCED_TYPENAME boost::is_const< T >
+ typename mpl::or_<
+ typename boost::serialization::is_wrapper< T >,
+ typename mpl::not_<
+ typename boost::is_const< T >
>
>::type typex;
// cannot load data into a "const" object unless it's a
diff --git a/3party/boost/boost/archive/detail/common_iarchive.hpp b/3party/boost/boost/archive/detail/common_iarchive.hpp
index 54c07c39c4..45e6d34b3e 100644
--- a/3party/boost/boost/archive/detail/common_iarchive.hpp
+++ b/3party/boost/boost/archive/detail/common_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/common_oarchive.hpp b/3party/boost/boost/archive/detail/common_oarchive.hpp
index 7962063a58..0d7474bcdc 100644
--- a/3party/boost/boost/archive/detail/common_oarchive.hpp
+++ b/3party/boost/boost/archive/detail/common_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/decl.hpp b/3party/boost/boost/archive/detail/decl.hpp
index 9695001abe..44e22be96b 100644
--- a/3party/boost/boost/archive/detail/decl.hpp
+++ b/3party/boost/boost/archive/detail/decl.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_DECL_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/helper_collection.hpp b/3party/boost/boost/archive/detail/helper_collection.hpp
new file mode 100644
index 0000000000..ba3c60cd16
--- /dev/null
+++ b/3party/boost/boost/archive/detail/helper_collection.hpp
@@ -0,0 +1,111 @@
+#ifndef BOOST_ARCHIVE_DETAIL_HELPER_COLLECTION_HPP
+#define BOOST_ARCHIVE_DETAIL_HELPER_COLLECTION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// helper_collection.hpp: archive support for run-time helpers
+
+// (C) Copyright 2002-2008 Robert Ramey and Joaquin M Lopez Munoz
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // NULL
+#include <typeinfo>
+#include <vector>
+#include <utility>
+#include <memory>
+#include <algorithm>
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_CXX11_SMART_PTR
+ #include <boost/smart_ptr/shared_ptr.hpp>
+ #include <boost/smart_ptr/make_shared.hpp>
+#endif
+
+namespace boost {
+
+namespace archive {
+namespace detail {
+
+class helper_collection
+{
+ helper_collection(const helper_collection&); // non-copyable
+ helper_collection& operator = (const helper_collection&); // non-copyable
+
+ // note: we dont' actually "share" the function object pointer
+ // we only use shared_ptr to make sure that it get's deleted
+
+ #ifndef BOOST_NO_CXX11_SMART_PTR
+ typedef std::pair<
+ const std::type_info *,
+ std::shared_ptr<void>
+ > helper_value_type;
+ template<class T>
+ std::shared_ptr<void> make_helper_ptr(){
+ return std::make_shared<T>();
+ }
+ #else
+ typedef std::pair<
+ const std::type_info *,
+ boost::shared_ptr<void>
+ > helper_value_type;
+ template<class T>
+ boost::shared_ptr<void> make_helper_ptr(){
+ return boost::make_shared<T>();
+ }
+ #endif
+ typedef std::vector<helper_value_type> collection;
+ collection m_collection;
+
+ struct predicate {
+ const std::type_info * m_ti;
+ bool operator()(helper_value_type const &rhs) const {
+ return *m_ti == *rhs.first;
+ }
+ predicate(const std::type_info * ti) :
+ m_ti(ti)
+ {}
+ };
+protected:
+ helper_collection(){}
+ ~helper_collection(){}
+public:
+ template<typename Helper>
+ Helper& get_helper(Helper * = NULL) {
+
+ const std::type_info * eti = & typeid(Helper);
+
+ collection::const_iterator it =
+ std::find_if(
+ m_collection.begin(),
+ m_collection.end(),
+ predicate(eti)
+ );
+
+ void * rval;
+ if(it == m_collection.end()){
+ m_collection.push_back(
+ std::make_pair(eti, make_helper_ptr<Helper>())
+ );
+ rval = m_collection.back().second.get();
+ }
+ else{
+ rval = it->second.get();
+ }
+ return *static_cast<Helper *>(rval);
+ }
+};
+
+} // namespace detail
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_DETAIL_HELPER_COLLECTION_HPP
diff --git a/3party/boost/boost/archive/detail/interface_iarchive.hpp b/3party/boost/boost/archive/detail/interface_iarchive.hpp
index 06487521fa..b7bd1659f3 100644
--- a/3party/boost/boost/archive/detail/interface_iarchive.hpp
+++ b/3party/boost/boost/archive/detail/interface_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/interface_oarchive.hpp b/3party/boost/boost/archive/detail/interface_oarchive.hpp
index e8db7a2bc8..7ae71768a8 100644
--- a/3party/boost/boost/archive/detail/interface_oarchive.hpp
+++ b/3party/boost/boost/archive/detail/interface_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/iserializer.hpp b/3party/boost/boost/archive/detail/iserializer.hpp
index 53765af315..cf547de0dd 100644
--- a/3party/boost/boost/archive/detail/iserializer.hpp
+++ b/3party/boost/boost/archive/detail/iserializer.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#pragma inline_depth(511)
#pragma inline_recursion(on)
@@ -23,7 +23,6 @@
// See http://www.boost.org for updates, documentation, and revision history.
#include <new> // for placement new
-#include <memory> // for auto_ptr
#include <cstddef> // size_t, NULL
#include <boost/config.hpp>
@@ -59,14 +58,11 @@ namespace std{
#include <boost/serialization/assume_abstract.hpp>
-#define DONT_USE_HAS_NEW_OPERATOR ( \
+#if ! ( \
defined(__BORLANDC__) \
|| BOOST_WORKAROUND(__IBMCPP__, < 1210) \
- || defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) \
|| defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590) \
)
-
-#if ! DONT_USE_HAS_NEW_OPERATOR
#include <boost/type_traits/has_new_operator.hpp>
#endif
@@ -127,7 +123,7 @@ protected:
explicit iserializer() :
basic_iserializer(
boost::serialization::singleton<
- BOOST_DEDUCED_TYPENAME
+ typename
boost::serialization::type_info_implementation< T >::type
>::get_const_instance()
)
@@ -197,85 +193,84 @@ BOOST_DLLEXPORT void iserializer<Archive, T>::load_object_data(
# pragma warning(disable : 4511 4512)
#endif
-template<class Archive, class T>
-class pointer_iserializer :
- public basic_pointer_iserializer
-{
-private:
- virtual const basic_iserializer & get_basic_serializer() const {
- return boost::serialization::singleton<
- iserializer<Archive, T>
- >::get_const_instance();
- }
- BOOST_DLLEXPORT virtual void load_object_ptr(
- basic_iarchive & ar,
- void * & x,
- const unsigned int file_version
- ) const BOOST_USED;
-protected:
- // this should alway be a singleton so make the constructor protected
- pointer_iserializer();
- ~pointer_iserializer();
-};
-
-#ifdef BOOST_MSVC
-# pragma warning(pop)
-#endif
-
-// note trick to be sure that operator new is using class specific
-// version if such exists. Due to Peter Dimov.
-// note: the following fails if T has no default constructor.
-// otherwise it would have been ideal
-//struct heap_allocator : public T
-//{
-// T * invoke(){
-// return ::new(sizeof(T));
-// }
-//}
+// the purpose of this code is to allocate memory for an object
+// without requiring the constructor to be called. Presumably
+// the allocated object will be subsequently initialized with
+// "placement new".
+// note: we have the boost type trait has_new_operator but we
+// have no corresponding has_delete_operator. So we presume
+// that the former being true would imply that the a delete
+// operator is also defined for the class T.
template<class T>
-struct heap_allocator
-{
+struct heap_allocation {
// boost::has_new_operator< T > doesn't work on these compilers
#if DONT_USE_HAS_NEW_OPERATOR
// This doesn't handle operator new overload for class T
- static T * invoke(){
+ static T * invoke_new(){
return static_cast<T *>(operator new(sizeof(T)));
}
+ static viod invoke_delete(){
+ (operator delete(sizeof(T)));
+ }
#else
+ // note: we presume that a true value for has_new_operator
+ // implies the existence of a class specific delete operator as well
+ // as a class specific new operator.
struct has_new_operator {
- static T* invoke() {
+ static T * invoke_new() {
return static_cast<T *>((T::operator new)(sizeof(T)));
}
+ static void invoke_delete(T * t) {
+ // if compilation fails here, the likely cause that the class
+ // T has a class specific new operator but no class specific
+ // delete operator which matches the following signature. Fix
+ // your program to have this. Note that adding operator delete
+ // with only one parameter doesn't seem correct to me since
+ // the standard(3.7.4.2) says "
+ // "If a class T has a member deallocation function named
+ // 'operator delete' with exactly one parameter, then that function
+ // is a usual (non-placement) deallocation function" which I take
+ // to mean that it will call the destructor of type T which we don't
+ // want to do here.
+ // Note: reliance upon automatic conversion from T * to void * here
+ (T::operator delete)(t, sizeof(T));
+ }
};
struct doesnt_have_new_operator {
- static T* invoke() {
+ static T* invoke_new() {
return static_cast<T *>(operator new(sizeof(T)));
}
+ static void invoke_delete(T * t) {
+ // Note: I'm reliance upon automatic conversion from T * to void * here
+ (operator delete)(t);
+ }
};
- static T * invoke() {
- typedef BOOST_DEDUCED_TYPENAME
+ static T * invoke_new() {
+ typedef typename
mpl::eval_if<
boost::has_new_operator< T >,
mpl::identity<has_new_operator >,
mpl::identity<doesnt_have_new_operator >
>::type typex;
- return typex::invoke();
+ return typex::invoke_new();
+ }
+ static void invoke_delete(T *t) {
+ typedef typename
+ mpl::eval_if<
+ boost::has_new_operator< T >,
+ mpl::identity<has_new_operator >,
+ mpl::identity<doesnt_have_new_operator >
+ >::type typex;
+ typex::invoke_delete(t);
}
#endif
-};
-
-// due to Martin Ecker
-template <typename T>
-class auto_ptr_with_deleter
-{
-public:
- explicit auto_ptr_with_deleter(T* p) :
- m_p(p)
- {}
- ~auto_ptr_with_deleter(){
- if (m_p)
- boost::serialization::access::destroy(m_p);
+ explicit heap_allocation(){
+ m_p = invoke_new();
+ }
+ ~heap_allocation(){
+ if (0 != m_p)
+ invoke_delete(m_p);
}
T* get() const {
return m_p;
@@ -283,60 +278,88 @@ public:
T* release() {
T* p = m_p;
- m_p = NULL;
+ m_p = 0;
return p;
}
private:
T* m_p;
};
+template<class Archive, class T>
+class pointer_iserializer :
+ public basic_pointer_iserializer
+{
+private:
+ virtual void * heap_allocation() const {
+ detail::heap_allocation<T> h;
+ T * t = h.get();
+ h.release();
+ return t;
+ }
+ virtual const basic_iserializer & get_basic_serializer() const {
+ return boost::serialization::singleton<
+ iserializer<Archive, T>
+ >::get_const_instance();
+ }
+ BOOST_DLLEXPORT virtual void load_object_ptr(
+ basic_iarchive & ar,
+ void * x,
+ const unsigned int file_version
+ ) const BOOST_USED;
+protected:
+ // this should alway be a singleton so make the constructor protected
+ pointer_iserializer();
+ ~pointer_iserializer();
+};
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
// note: BOOST_DLLEXPORT is so that code for polymorphic class
// serialized only through base class won't get optimized out
template<class Archive, class T>
BOOST_DLLEXPORT void pointer_iserializer<Archive, T>::load_object_ptr(
basic_iarchive & ar,
- void * & x,
+ void * t,
const unsigned int file_version
) const
{
Archive & ar_impl =
boost::serialization::smart_cast_reference<Archive &>(ar);
- auto_ptr_with_deleter< T > ap(heap_allocator< T >::invoke());
- if(NULL == ap.get())
- boost::serialization::throw_exception(std::bad_alloc()) ;
-
- T * t = ap.get();
- x = t;
+ // note that the above will throw std::bad_alloc if the allocation
+ // fails so we don't have to address this contingency here.
// catch exception during load_construct_data so that we don't
// automatically delete the t which is most likely not fully
// constructed
BOOST_TRY {
- // this addresses an obscure situtation that occurs when
+ // this addresses an obscure situation that occurs when
// load_constructor de-serializes something through a pointer.
ar.next_object_pointer(t);
boost::serialization::load_construct_data_adl<Archive, T>(
ar_impl,
- t,
+ static_cast<T *>(t),
file_version
);
}
BOOST_CATCH(...){
- ap.release();
+ // if we get here the load_construct failed. The heap_allocation
+ // will be automatically deleted so we don't have to do anything
+ // special here.
BOOST_RETHROW;
}
BOOST_CATCH_END
- ar_impl >> boost::serialization::make_nvp(NULL, * t);
- ap.release();
+ ar_impl >> boost::serialization::make_nvp(NULL, * static_cast<T *>(t));
}
template<class Archive, class T>
pointer_iserializer<Archive, T>::pointer_iserializer() :
basic_pointer_iserializer(
boost::serialization::singleton<
- BOOST_DEDUCED_TYPENAME
+ typename
boost::serialization::type_info_implementation< T >::type
>::get_const_instance()
)
@@ -405,7 +428,7 @@ struct load_non_pointer_type {
template<class T>
static void invoke(Archive & ar, T &t){
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typedef typename mpl::eval_if<
// if its primitive
mpl::equal_to<
boost::serialization::implementation_level< T >,
@@ -413,7 +436,7 @@ struct load_non_pointer_type {
>,
mpl::identity<load_primitive>,
// else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
// class info / version
mpl::greater_equal<
boost::serialization::implementation_level< T >,
@@ -422,7 +445,7 @@ struct load_non_pointer_type {
// do standard load
mpl::identity<load_standard>,
// else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
// no tracking
mpl::equal_to<
boost::serialization::tracking_level< T >,
@@ -466,7 +489,7 @@ struct load_pointer_type {
// class pointer. Inhibiting code generation for this
// permits abstract base classes to be used - note: exception
// virtual serialize functions used for plug-ins
- typedef BOOST_DEDUCED_TYPENAME
+ typedef typename
mpl::eval_if<
boost::serialization::is_abstract<const T>,
boost::mpl::identity<abstract>,
@@ -482,18 +505,21 @@ struct load_pointer_type {
const T &
) {
// tweak the pointer back to the base class
- return static_cast<T *>(
- const_cast<void *>(
- boost::serialization::void_upcast(
- eti,
- boost::serialization::singleton<
- BOOST_DEDUCED_TYPENAME
- boost::serialization::type_info_implementation< T >::type
- >::get_const_instance(),
- t
- )
+ void * upcast = const_cast<void *>(
+ boost::serialization::void_upcast(
+ eti,
+ boost::serialization::singleton<
+ typename
+ boost::serialization::type_info_implementation< T >::type
+ >::get_const_instance(),
+ t
)
);
+ if(NULL == upcast)
+ boost::serialization::throw_exception(
+ archive_exception(archive_exception::unregistered_class)
+ );
+ return static_cast<T *>(upcast);
}
template<class T>
@@ -544,7 +570,7 @@ template<class Archive>
struct load_array_type {
template<class T>
static void invoke(Archive &ar, T &t){
- typedef BOOST_DEDUCED_TYPENAME remove_extent< T >::type value_type;
+ typedef typename remove_extent< T >::type value_type;
// convert integers to correct enum to load
// determine number of elements in the array. Consider the
@@ -576,13 +602,13 @@ inline void load(Archive & ar, T &t){
// handled below.
detail::check_const_loading< T >();
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<is_pointer< T >,
+ typename mpl::eval_if<is_pointer< T >,
mpl::identity<detail::load_pointer_type<Archive> >
,//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<is_array< T >,
+ typename mpl::eval_if<is_array< T >,
mpl::identity<detail::load_array_type<Archive> >
,//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<is_enum< T >,
+ typename mpl::eval_if<is_enum< T >,
mpl::identity<detail::load_enum_type<Archive> >
,//else
mpl::identity<detail::load_non_pointer_type<Archive> >
diff --git a/3party/boost/boost/archive/detail/oserializer.hpp b/3party/boost/boost/archive/detail/oserializer.hpp
index 7d2694d770..7a7e239376 100644
--- a/3party/boost/boost/archive/detail/oserializer.hpp
+++ b/3party/boost/boost/archive/detail/oserializer.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_OSERIALIZER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#pragma inline_depth(511)
#pragma inline_recursion(on)
@@ -106,7 +106,7 @@ public:
explicit BOOST_DLLEXPORT oserializer() :
basic_oserializer(
boost::serialization::singleton<
- BOOST_DEDUCED_TYPENAME
+ typename
boost::serialization::type_info_implementation< T >::type
>::get_const_instance()
)
@@ -205,7 +205,7 @@ template<class Archive, class T>
pointer_oserializer<Archive, T>::pointer_oserializer() :
basic_pointer_oserializer(
boost::serialization::singleton<
- BOOST_DEDUCED_TYPENAME
+ typename
boost::serialization::type_info_implementation< T >::type
>::get_const_instance()
)
@@ -275,7 +275,7 @@ struct save_non_pointer_type {
template<class T>
static void invoke(Archive & ar, const T & t){
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
// if its primitive
mpl::equal_to<
boost::serialization::implementation_level< T >,
@@ -283,7 +283,7 @@ struct save_non_pointer_type {
>,
mpl::identity<save_primitive>,
// else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
// class info / version
mpl::greater_equal<
boost::serialization::implementation_level< T >,
@@ -292,7 +292,7 @@ struct save_non_pointer_type {
// do standard save
mpl::identity<save_standard>,
// else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
// no tracking
mpl::equal_to<
boost::serialization::tracking_level< T >,
@@ -342,7 +342,7 @@ struct save_pointer_type {
// permits abstract base classes to be used - note: exception
// virtual serialize functions used for plug-ins
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
boost::serialization::is_abstract< T >,
mpl::identity<abstract>,
mpl::identity<non_abstract>
@@ -373,10 +373,10 @@ struct save_pointer_type {
Archive &ar,
T & t
){
- BOOST_DEDUCED_TYPENAME
+ typename
boost::serialization::type_info_implementation< T >::type const
& i = boost::serialization::singleton<
- BOOST_DEDUCED_TYPENAME
+ typename
boost::serialization::type_info_implementation< T >::type
>::get_const_instance();
@@ -452,7 +452,7 @@ struct save_pointer_type {
){
check_pointer_level< T >();
check_pointer_tracking< T >();
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typedef typename mpl::eval_if<
is_polymorphic< T >,
mpl::identity<polymorphic>,
mpl::identity<non_polymorphic>
@@ -490,7 +490,7 @@ struct save_array_type
{
template<class T>
static void invoke(Archive &ar, const T &t){
- typedef BOOST_DEDUCED_TYPENAME boost::remove_extent< T >::type value_type;
+ typedef typename boost::remove_extent< T >::type value_type;
save_access::end_preamble(ar);
// consider alignment
@@ -509,13 +509,13 @@ struct save_array_type
template<class Archive, class T>
inline void save(Archive & ar, /*const*/ T &t){
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<is_pointer< T >,
+ typename mpl::eval_if<is_pointer< T >,
mpl::identity<detail::save_pointer_type<Archive> >,
//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<is_enum< T >,
+ typename mpl::eval_if<is_enum< T >,
mpl::identity<detail::save_enum_type<Archive> >,
//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<is_array< T >,
+ typename mpl::eval_if<is_array< T >,
mpl::identity<detail::save_array_type<Archive> >,
//else
mpl::identity<detail::save_non_pointer_type<Archive> >
diff --git a/3party/boost/boost/archive/detail/polymorphic_iarchive_route.hpp b/3party/boost/boost/archive/detail/polymorphic_iarchive_route.hpp
index d93bb79cb1..a8eb7aa94a 100644
--- a/3party/boost/boost/archive/detail/polymorphic_iarchive_route.hpp
+++ b/3party/boost/boost/archive/detail/polymorphic_iarchive_route.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_POLYMORPHIC_IARCHIVE_ROUTE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/polymorphic_oarchive_route.hpp b/3party/boost/boost/archive/detail/polymorphic_oarchive_route.hpp
index f1b20f8bf1..9211df2aa7 100644
--- a/3party/boost/boost/archive/detail/polymorphic_oarchive_route.hpp
+++ b/3party/boost/boost/archive/detail/polymorphic_oarchive_route.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DETAIL_POLYMORPHIC_OARCHIVE_ROUTE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/detail/register_archive.hpp b/3party/boost/boost/archive/detail/register_archive.hpp
index e31ae46c05..81a19b9cf5 100644
--- a/3party/boost/boost/archive/detail/register_archive.hpp
+++ b/3party/boost/boost/archive/detail/register_archive.hpp
@@ -81,7 +81,7 @@ void instantiate_ptr_serialization(Serializable*, int, adl_tag ) {}
namespace boost { namespace archive { namespace detail { \
\
template <class Serializable> \
-BOOST_DEDUCED_TYPENAME _ptr_serialization_support<Archive, Serializable>::type \
+typename _ptr_serialization_support<Archive, Serializable>::type \
instantiate_ptr_serialization( Serializable*, Archive*, adl_tag ); \
\
}}}
diff --git a/3party/boost/boost/archive/detail/utf8_codecvt_facet.hpp b/3party/boost/boost/archive/detail/utf8_codecvt_facet.hpp
index bd859ffebd..b2430d5a43 100644
--- a/3party/boost/boost/archive/detail/utf8_codecvt_facet.hpp
+++ b/3party/boost/boost/archive/detail/utf8_codecvt_facet.hpp
@@ -7,15 +7,17 @@
#ifndef BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
#define BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
-#define BOOST_UTF8_BEGIN_NAMESPACE \
- namespace boost { namespace archive { namespace detail {
-#define BOOST_UTF8_DECL
-#define BOOST_UTF8_END_NAMESPACE }}}
+#ifdef BOOST_NO_CXX11_HDR_CODECVT
+ #define BOOST_UTF8_BEGIN_NAMESPACE \
+ namespace boost { namespace archive { namespace detail {
+ #define BOOST_UTF8_DECL
+ #define BOOST_UTF8_END_NAMESPACE }}}
-#include <boost/detail/utf8_codecvt_facet.hpp>
-
-#undef BOOST_UTF8_END_NAMESPACE
-#undef BOOST_UTF8_DECL
-#undef BOOST_UTF8_BEGIN_NAMESPACE
+ #include <boost/detail/utf8_codecvt_facet.hpp>
+ #undef BOOST_UTF8_END_NAMESPACE
+ #undef BOOST_UTF8_DECL
+ #undef BOOST_UTF8_BEGIN_NAMESPACE
+#endif // BOOST_NO_CXX11_HDR_CODECVT
#endif // BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
+
diff --git a/3party/boost/boost/archive/dinkumware.hpp b/3party/boost/boost/archive/dinkumware.hpp
index bfa828d53d..90ba6271cd 100644
--- a/3party/boost/boost/archive/dinkumware.hpp
+++ b/3party/boost/boost/archive/dinkumware.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_DINKUMWARE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/impl/basic_binary_iarchive.ipp b/3party/boost/boost/archive/impl/basic_binary_iarchive.ipp
index 8ea39f7005..b8e7f454c5 100644
--- a/3party/boost/boost/archive/impl/basic_binary_iarchive.ipp
+++ b/3party/boost/boost/archive/impl/basic_binary_iarchive.ipp
@@ -12,7 +12,7 @@
#include <algorithm>
#include <cstring>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::memcpy;
@@ -51,6 +51,8 @@ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
basic_binary_iarchive<Archive>::init(){
// read signature in an archive version independent manner
std::string file_signature;
+
+ #if 0 // commented out since it interfers with derivation
try {
std::size_t l;
this->This()->load(l);
@@ -69,6 +71,11 @@ basic_binary_iarchive<Archive>::init(){
// will cause invalid_signature archive exception to be thrown below
file_signature = "";
}
+ #else
+ // https://svn.boost.org/trac/boost/ticket/7301
+ * this->This() >> file_signature;
+ #endif
+
if(file_signature != BOOST_ARCHIVE_SIGNATURE())
boost::serialization::throw_exception(
archive_exception(archive_exception::invalid_signature)
@@ -113,10 +120,7 @@ basic_binary_iarchive<Archive>::init(){
#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
this->set_library_version(input_library_version);
#else
- #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
- detail::
- #endif
- basic_iarchive::set_library_version(input_library_version);
+ detail::basic_iarchive::set_library_version(input_library_version);
#endif
if(BOOST_ARCHIVE_VERSION() < input_library_version)
diff --git a/3party/boost/boost/archive/impl/basic_binary_iprimitive.ipp b/3party/boost/boost/archive/impl/basic_binary_iprimitive.ipp
index e0f5c2ea10..9e2340eb2d 100644
--- a/3party/boost/boost/archive/impl/basic_binary_iprimitive.ipp
+++ b/3party/boost/boost/archive/impl/basic_binary_iprimitive.ipp
@@ -28,6 +28,7 @@ namespace std{
#include <boost/archive/archive_exception.hpp>
#include <boost/archive/codecvt_null.hpp>
#include <boost/archive/add_facet.hpp>
+#include <boost/archive/basic_binary_iprimitive.hpp>
namespace boost {
namespace archive {
diff --git a/3party/boost/boost/archive/impl/basic_binary_oarchive.ipp b/3party/boost/boost/archive/impl/basic_binary_oarchive.ipp
index dec2cd77ab..467fd6fe96 100644
--- a/3party/boost/boost/archive/impl/basic_binary_oarchive.ipp
+++ b/3party/boost/boost/archive/impl/basic_binary_oarchive.ipp
@@ -12,7 +12,7 @@
#include <algorithm>
#include <cstring>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::memcpy;
diff --git a/3party/boost/boost/archive/impl/basic_binary_oprimitive.ipp b/3party/boost/boost/archive/impl/basic_binary_oprimitive.ipp
index 02b5ffab9e..509decb4e6 100644
--- a/3party/boost/boost/archive/impl/basic_binary_oprimitive.ipp
+++ b/3party/boost/boost/archive/impl/basic_binary_oprimitive.ipp
@@ -31,6 +31,7 @@ namespace std{ using ::wcslen; }
#include <boost/archive/add_facet.hpp>
#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/basic_binary_oprimitive.hpp>
namespace boost {
namespace archive {
diff --git a/3party/boost/boost/archive/impl/basic_text_iarchive.ipp b/3party/boost/boost/archive/impl/basic_text_iarchive.ipp
index 0a246b76c9..8d364f9b5f 100644
--- a/3party/boost/boost/archive/impl/basic_text_iarchive.ipp
+++ b/3party/boost/boost/archive/impl/basic_text_iarchive.ipp
@@ -11,7 +11,7 @@
#include <algorithm>
#include <cstring>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::memcpy;
@@ -62,10 +62,7 @@ basic_text_iarchive<Archive>::init(void){
#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
this->set_library_version(input_library_version);
#else
- #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
- detail::
- #endif
- basic_iarchive::set_library_version(input_library_version);
+ detail::basic_iarchive::set_library_version(input_library_version);
#endif
// extra little .t is to get around borland quirk
diff --git a/3party/boost/boost/archive/impl/basic_text_iprimitive.ipp b/3party/boost/boost/archive/impl/basic_text_iprimitive.ipp
index 16378b8437..d0da2840d5 100644
--- a/3party/boost/boost/archive/impl/basic_text_iprimitive.ipp
+++ b/3party/boost/boost/archive/impl/basic_text_iprimitive.ipp
@@ -30,10 +30,10 @@ namespace std{
#include <boost/archive/iterators/binary_from_base64.hpp>
#include <boost/archive/iterators/transform_width.hpp>
-namespace boost {
+namespace boost {
namespace archive {
-namespace {
+namespace detail {
template<class CharType>
bool is_whitespace(CharType c);
@@ -48,7 +48,7 @@ namespace {
return 0 != std::iswspace(t);
}
#endif
-}
+} // detail
// translate base64 text into binary and copy into buffer
// until buffer is full.
@@ -58,7 +58,7 @@ basic_text_iprimitive<IStream>::load_binary(
void *address,
std::size_t count
){
- typedef BOOST_DEDUCED_TYPENAME IStream::char_type CharType;
+ typedef typename IStream::char_type CharType;
if(0 == count)
return;
@@ -73,7 +73,7 @@ basic_text_iprimitive<IStream>::load_binary(
archive_exception(archive_exception::input_stream_error)
);
// convert from base64 to binary
- typedef BOOST_DEDUCED_TYPENAME
+ typedef typename
iterators::transform_width<
iterators::binary_from_base64<
iterators::remove_whitespace<
@@ -102,11 +102,11 @@ basic_text_iprimitive<IStream>::load_binary(
// skip over any excess input
for(;;){
- BOOST_DEDUCED_TYPENAME IStream::int_type r;
+ typename IStream::int_type r;
r = is.get();
if(is.eof())
break;
- if(is_whitespace(static_cast<CharType>(r)))
+ if(detail::is_whitespace(static_cast<CharType>(r)))
break;
}
}
@@ -128,7 +128,7 @@ basic_text_iprimitive<IStream>::basic_text_iprimitive(
archive_locale.reset(
add_facet(
std::locale::classic(),
- new codecvt_null<BOOST_DEDUCED_TYPENAME IStream::char_type>
+ new codecvt_null<typename IStream::char_type>
)
);
is.imbue(* archive_locale);
diff --git a/3party/boost/boost/archive/impl/basic_text_oarchive.ipp b/3party/boost/boost/archive/impl/basic_text_oarchive.ipp
index 34e6995ce5..4170c9718f 100644
--- a/3party/boost/boost/archive/impl/basic_text_oarchive.ipp
+++ b/3party/boost/boost/archive/impl/basic_text_oarchive.ipp
@@ -11,7 +11,7 @@
#include <boost/assert.hpp>
#include <cstring>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::memcpy;
diff --git a/3party/boost/boost/archive/impl/basic_text_oprimitive.ipp b/3party/boost/boost/archive/impl/basic_text_oprimitive.ipp
index 7e4315c0da..33ab4a8b65 100644
--- a/3party/boost/boost/archive/impl/basic_text_oprimitive.ipp
+++ b/3party/boost/boost/archive/impl/basic_text_oprimitive.ipp
@@ -9,6 +9,7 @@
// See http://www.boost.org for updates, documentation, and revision history.
#include <cstddef> // NULL
+#include <algorithm> // std::copy
#include <boost/serialization/pfto.hpp>
#include <boost/archive/basic_text_oprimitive.hpp>
@@ -30,7 +31,7 @@ basic_text_oprimitive<OStream>::save_binary(
const void *address,
std::size_t count
){
- typedef BOOST_DEDUCED_TYPENAME OStream::char_type CharType;
+ typedef typename OStream::char_type CharType;
if(0 == count)
return;
@@ -90,7 +91,7 @@ basic_text_oprimitive<OStream>::basic_text_oprimitive(
archive_locale.reset(
add_facet(
std::locale::classic(),
- new codecvt_null<BOOST_DEDUCED_TYPENAME OStream::char_type>
+ new codecvt_null<typename OStream::char_type>
)
);
os.imbue(* archive_locale);
diff --git a/3party/boost/boost/archive/impl/basic_xml_grammar.hpp b/3party/boost/boost/archive/impl/basic_xml_grammar.hpp
index 807ed07223..66ca1f0b29 100644
--- a/3party/boost/boost/archive/impl/basic_xml_grammar.hpp
+++ b/3party/boost/boost/archive/impl/basic_xml_grammar.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -50,11 +50,6 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-// supress noise
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
-# pragma warning (disable : 4786) // too long name, harmless warning
-#endif
-
#include <boost/spirit/include/classic_rule.hpp>
#include <boost/spirit/include/classic_chset.hpp>
diff --git a/3party/boost/boost/archive/impl/xml_iarchive_impl.ipp b/3party/boost/boost/archive/impl/xml_iarchive_impl.ipp
index c7cbc7fcdc..dc62eed331 100644
--- a/3party/boost/boost/archive/impl/xml_iarchive_impl.ipp
+++ b/3party/boost/boost/archive/impl/xml_iarchive_impl.ipp
@@ -98,9 +98,9 @@ xml_iarchive_impl<Archive>::load(wchar_t * ws){
const char * end = start + s.size();
while(start < end){
wchar_t wc;
- int result = std::mbtowc(&wc, start, end - start);
- if(0 < result){
- start += result;
+ int length = std::mbtowc(&wc, start, end - start);
+ if(0 < length){
+ start += length;
*ws++ = wc;
continue;
}
diff --git a/3party/boost/boost/archive/impl/xml_oarchive_impl.ipp b/3party/boost/boost/archive/impl/xml_oarchive_impl.ipp
index 8ab954f4a3..ab1a2177bc 100644
--- a/3party/boost/boost/archive/impl/xml_oarchive_impl.ipp
+++ b/3party/boost/boost/archive/impl/xml_oarchive_impl.ipp
@@ -8,7 +8,7 @@
#include <ostream>
#include <iomanip>
-#include <algorithm>
+#include <algorithm> // std::copy
#include <string>
#include <cstring> // strlen
diff --git a/3party/boost/boost/archive/impl/xml_wiarchive_impl.ipp b/3party/boost/boost/archive/impl/xml_wiarchive_impl.ipp
index 9dde66c878..a4665ad4ce 100644
--- a/3party/boost/boost/archive/impl/xml_wiarchive_impl.ipp
+++ b/3party/boost/boost/archive/impl/xml_wiarchive_impl.ipp
@@ -1,5 +1,5 @@
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// xml_wiprimitive.cpp:
+// xml_wiarchive_impl.ipp:
// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
// Distributed under the Boost Software License, Version 1.0. (See
@@ -8,8 +8,6 @@
// See http://www.boost.org for updates, documentation, and revision history.
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
-
#include <cstring>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
@@ -21,7 +19,7 @@ namespace std{
#ifndef BOOST_NO_STD_WSTREAMBUF
#include <boost/assert.hpp>
-#include <algorithm>
+#include <algorithm> // std::copy
#include <boost/detail/workaround.hpp> // Dinkumware and RogueWave
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
@@ -34,9 +32,16 @@ namespace std{
#include <boost/serialization/string.hpp>
#include <boost/archive/add_facet.hpp>
-#include <boost/archive/xml_archive_exception.hpp>
-#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#ifndef BOOST_NO_CXX11_HDR_CODECVT
+ #include <codecvt>
+ namespace boost { namespace archive { namespace detail {
+ typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet;
+ } } }
+#else
+ #include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#endif
+#include <boost/archive/xml_archive_exception.hpp>
#include <boost/archive/iterators/mb_from_wchar.hpp>
#include <boost/archive/basic_xml_archive.hpp>
@@ -167,7 +172,7 @@ xml_wiarchive_impl<Archive>::xml_wiarchive_impl(
if(0 == (flags & no_codecvt)){
archive_locale.reset(
add_facet(
- std::locale::classic(),
+ is_.getloc(),
new boost::archive::detail::utf8_codecvt_facet
)
);
diff --git a/3party/boost/boost/archive/impl/xml_woarchive_impl.ipp b/3party/boost/boost/archive/impl/xml_woarchive_impl.ipp
index 3bf42bdace..6092a91524 100644
--- a/3party/boost/boost/archive/impl/xml_woarchive_impl.ipp
+++ b/3party/boost/boost/archive/impl/xml_woarchive_impl.ipp
@@ -11,15 +11,14 @@
#include <ostream>
#include <string>
-#include <algorithm>
+#include <algorithm> // std::copy
#include <locale>
-#include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
- // for BOOST_DEDUCED_TYPENAME
#include <cstring> // strlen
#include <cstdlib> // mbtowc
#include <cwchar> // wcslen
+#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::strlen;
@@ -39,7 +38,14 @@ namespace std{
#include <boost/archive/iterators/dataflow_exception.hpp>
#include <boost/archive/add_facet.hpp>
-#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#ifndef BOOST_NO_CXX11_HDR_CODECVT
+ #include <codecvt>
+ namespace boost { namespace archive { namespace detail {
+ typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet;
+ } } }
+#else
+ #include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#endif
namespace boost {
namespace archive {
@@ -128,26 +134,27 @@ xml_woarchive_impl<Archive>::xml_woarchive_impl(
// a) before output is invoked or
// b) after flush has been called. This prevents one-to-many
// transforms (such as one to many transforms from getting
- // mixed up. Unfortunately, STLPort doesn't respect b) above
- // so the restoration of the original archive locale done by
- // the locale_saver doesn't get processed,
- // before the current one is destroyed.
- // so the codecvt doesn't get replaced with the orginal
- // so closing the stream invokes codecvt::do_unshift
- // so it crashes because the corresponding locale that contained
- // the codecvt isn't around any more.
- // we can hack around this by using a static codecvt that never
- // gets destroyed.
+ // mixed up.
if(0 == (flags & no_codecvt)){
boost::archive::detail::utf8_codecvt_facet *pfacet;
#if defined(__SGI_STL_PORT)
- static boost::archive::detail::utf8_codecvt_facet
+ // Unfortunately, STLPort doesn't respect b) above
+ // so the restoration of the original archive locale done by
+ // the locale_saver doesn't get processed,
+ // before the current one is destroyed.
+ // so the codecvt doesn't get replaced with the orginal
+ // so closing the stream invokes codecvt::do_unshift
+ // so it crashes because the corresponding locale that contained
+ // the codecvt isn't around any more.
+ // we can hack around this by using a static codecvt that never
+ // gets destroyed.
+ static boost::archive::detail::utf8_codecvt_facet
facet(static_cast<size_t>(1));
pfacet = & facet;
#else
pfacet = new boost::archive::detail::utf8_codecvt_facet;
#endif
- archive_locale.reset(add_facet(std::locale::classic(), pfacet));
+ archive_locale.reset(add_facet(os_.getloc(), pfacet));
os.imbue(* archive_locale);
}
if(0 == (flags & no_header))
diff --git a/3party/boost/boost/archive/iterators/base64_exception.hpp b/3party/boost/boost/archive/iterators/base64_exception.hpp
index 81ad28ed81..8f9208b60e 100644
--- a/3party/boost/boost/archive/iterators/base64_exception.hpp
+++ b/3party/boost/boost/archive/iterators/base64_exception.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_BASE64_EXCEPTION_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/iterators/base64_from_binary.hpp b/3party/boost/boost/archive/iterators/base64_from_binary.hpp
index ecb916a06e..836d93de35 100644
--- a/3party/boost/boost/archive/iterators/base64_from_binary.hpp
+++ b/3party/boost/boost/archive/iterators/base64_from_binary.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -19,7 +19,6 @@
#include <boost/assert.hpp>
#include <cstddef> // size_t
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::size_t;
@@ -57,7 +56,7 @@ struct from_6_bit {
} // namespace detail
// note: what we would like to do is
-// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
+// template<class Base, class CharType = typename Base::value_type>
// typedef transform_iterator<
// from_6_bit<CharType>,
// transform_width<Base, 6, sizeof(Base::value_type) * 8, CharType>
@@ -69,10 +68,10 @@ struct from_6_bit {
// a templated constructor. This makes it incompatible with the dataflow
// ideal. This is also addressed here.
-//template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
+//template<class Base, class CharType = typename Base::value_type>
template<
class Base,
- class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+ class CharType = typename boost::iterator_value<Base>::type
>
class base64_from_binary :
public transform_iterator<
@@ -82,7 +81,7 @@ class base64_from_binary :
{
friend class boost::iterator_core_access;
typedef transform_iterator<
- BOOST_DEDUCED_TYPENAME detail::from_6_bit<CharType>,
+ typename detail::from_6_bit<CharType>,
Base
> super_t;
diff --git a/3party/boost/boost/archive/iterators/binary_from_base64.hpp b/3party/boost/boost/archive/iterators/binary_from_base64.hpp
index 2fe8292f14..9d2c87ebee 100644
--- a/3party/boost/boost/archive/iterators/binary_from_base64.hpp
+++ b/3party/boost/boost/archive/iterators/binary_from_base64.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -18,7 +18,6 @@
#include <boost/assert.hpp>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
#include <boost/serialization/throw_exception.hpp>
#include <boost/serialization/pfto.hpp>
#include <boost/static_assert.hpp>
@@ -67,7 +66,7 @@ struct to_6_bit {
} // namespace detail
// note: what we would like to do is
-// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
+// template<class Base, class CharType = typename Base::value_type>
// typedef transform_iterator<
// from_6_bit<CharType>,
// transform_width<Base, 6, sizeof(Base::value_type) * 8, CharType>
@@ -81,7 +80,7 @@ struct to_6_bit {
template<
class Base,
- class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+ class CharType = typename boost::iterator_value<Base>::type
>
class binary_from_base64 : public
transform_iterator<
diff --git a/3party/boost/boost/archive/iterators/dataflow.hpp b/3party/boost/boost/archive/iterators/dataflow.hpp
index 1623b67b73..6f8001d3ce 100644
--- a/3party/boost/boost/archive/iterators/dataflow.hpp
+++ b/3party/boost/boost/archive/iterators/dataflow.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_DATAFLOW_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -18,8 +18,6 @@
#include <boost/assert.hpp>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
-
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/bool.hpp>
diff --git a/3party/boost/boost/archive/iterators/dataflow_exception.hpp b/3party/boost/boost/archive/iterators/dataflow_exception.hpp
index 1d655a1e48..e3e18605b3 100644
--- a/3party/boost/boost/archive/iterators/dataflow_exception.hpp
+++ b/3party/boost/boost/archive/iterators/dataflow_exception.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/iterators/escape.hpp b/3party/boost/boost/archive/iterators/escape.hpp
index bb527d439a..a1fee91420 100644
--- a/3party/boost/boost/archive/iterators/escape.hpp
+++ b/3party/boost/boost/archive/iterators/escape.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -19,7 +19,6 @@
#include <boost/assert.hpp>
#include <cstddef> // NULL
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/iterator/iterator_traits.hpp>
@@ -35,16 +34,16 @@ class escape :
public boost::iterator_adaptor<
Derived,
Base,
- BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type,
+ typename boost::iterator_value<Base>::type,
single_pass_traversal_tag,
- BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+ typename boost::iterator_value<Base>::type
>
{
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type base_value_type;
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_reference<Base>::type reference_type;
+ typedef typename boost::iterator_value<Base>::type base_value_type;
+ typedef typename boost::iterator_reference<Base>::type reference_type;
friend class boost::iterator_core_access;
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ typedef typename boost::iterator_adaptor<
Derived,
Base,
base_value_type,
diff --git a/3party/boost/boost/archive/iterators/head_iterator.hpp b/3party/boost/boost/archive/iterators/head_iterator.hpp
index 2fdd475e11..6ad7d6b32b 100644
--- a/3party/boost/boost/archive/iterators/head_iterator.hpp
+++ b/3party/boost/boost/archive/iterators/head_iterator.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/iterators/insert_linebreaks.hpp b/3party/boost/boost/archive/iterators/insert_linebreaks.hpp
index 5f826cacc1..7fbc79f13a 100644
--- a/3party/boost/boost/archive/iterators/insert_linebreaks.hpp
+++ b/3party/boost/boost/archive/iterators/insert_linebreaks.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -18,7 +18,7 @@
#include <boost/assert.hpp>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{ using ::memcpy; }
#endif
@@ -37,7 +37,7 @@ namespace iterators {
template<
class Base,
int N,
- class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+ class CharType = typename boost::iterator_value<Base>::type
>
class insert_linebreaks :
public iterator_adaptor<
diff --git a/3party/boost/boost/archive/iterators/istream_iterator.hpp b/3party/boost/boost/archive/iterators/istream_iterator.hpp
index 478f112ff8..41aa0be37b 100644
--- a/3party/boost/boost/archive/iterators/istream_iterator.hpp
+++ b/3party/boost/boost/archive/iterators/istream_iterator.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -41,13 +41,13 @@ class istream_iterator :
{
friend class boost::iterator_core_access;
typedef istream_iterator this_t ;
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_facade<
+ typedef typename boost::iterator_facade<
istream_iterator<Elem>,
Elem,
std::input_iterator_tag,
Elem
> super_t;
- typedef BOOST_DEDUCED_TYPENAME std::basic_istream<Elem> istream_type;
+ typedef typename std::basic_istream<Elem> istream_type;
bool equal(const this_t & rhs) const {
// note: only works for comparison against end of stream
diff --git a/3party/boost/boost/archive/iterators/mb_from_wchar.hpp b/3party/boost/boost/archive/iterators/mb_from_wchar.hpp
index d8f8a129f2..04e7c7e9fe 100644
--- a/3party/boost/boost/archive/iterators/mb_from_wchar.hpp
+++ b/3party/boost/boost/archive/iterators/mb_from_wchar.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -20,7 +20,7 @@
#include <cstddef> // size_t
#include <cstdlib> // for wctomb()
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::size_t;
@@ -50,7 +50,7 @@ class mb_from_wchar
{
friend class boost::iterator_core_access;
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ typedef typename boost::iterator_adaptor<
mb_from_wchar<Base>,
Base,
wchar_t,
diff --git a/3party/boost/boost/archive/iterators/ostream_iterator.hpp b/3party/boost/boost/archive/iterators/ostream_iterator.hpp
index 7c3203f125..49a9b99034 100644
--- a/3party/boost/boost/archive/iterators/ostream_iterator.hpp
+++ b/3party/boost/boost/archive/iterators/ostream_iterator.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/iterators/remove_whitespace.hpp b/3party/boost/boost/archive/iterators/remove_whitespace.hpp
index a01049faf0..4383987051 100644
--- a/3party/boost/boost/archive/iterators/remove_whitespace.hpp
+++ b/3party/boost/boost/archive/iterators/remove_whitespace.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -18,17 +18,12 @@
#include <boost/assert.hpp>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
-
#include <boost/serialization/pfto.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/iterator/filter_iterator.hpp>
#include <boost/iterator/iterator_traits.hpp>
-//#include <boost/detail/workaround.hpp>
-//#if ! BOOST_WORKAROUND(BOOST_MSVC, <=1300)
-
// here is the default standard implementation of the functor used
// by the filter iterator to remove spaces. Unfortunately usage
// of this implementation in combination with spirit trips a bug
@@ -53,8 +48,6 @@ namespace std{ using ::isspace; }
#undef iswspace
#endif
-//#endif // BOOST_WORKAROUND
-
namespace { // anonymous
template<class CharType>
@@ -100,14 +93,14 @@ class filter_iterator
>
{
friend class boost::iterator_core_access;
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ typedef typename boost::iterator_adaptor<
filter_iterator<Predicate, Base>,
Base,
use_default,
single_pass_traversal_tag
> super_t;
typedef filter_iterator<Predicate, Base> this_t;
- typedef BOOST_DEDUCED_TYPENAME super_t::reference reference_type;
+ typedef typename super_t::reference reference_type;
reference_type dereference_impl(){
if(! m_full){
@@ -142,8 +135,8 @@ template<class Base>
class remove_whitespace :
public filter_iterator<
remove_whitespace_predicate<
- BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
- //BOOST_DEDUCED_TYPENAME Base::value_type
+ typename boost::iterator_value<Base>::type
+ //typename Base::value_type
>,
Base
>
@@ -151,8 +144,8 @@ class remove_whitespace :
friend class boost::iterator_core_access;
typedef filter_iterator<
remove_whitespace_predicate<
- BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
- //BOOST_DEDUCED_TYPENAME Base::value_type
+ typename boost::iterator_value<Base>::type
+ //typename Base::value_type
>,
Base
> super_t;
diff --git a/3party/boost/boost/archive/iterators/transform_width.hpp b/3party/boost/boost/archive/iterators/transform_width.hpp
index 5a5c7b757a..4e11953bc5 100644
--- a/3party/boost/boost/archive/iterators/transform_width.hpp
+++ b/3party/boost/boost/archive/iterators/transform_width.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -24,12 +24,13 @@
// character and 8 bit bytes. Lowest common multiple is 24 => 4 6 bit characters
// or 3 8 bit characters
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME & PTFO
#include <boost/serialization/pfto.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/iterator/iterator_traits.hpp>
+#include <algorithm> // std::min
+
namespace boost {
namespace archive {
namespace iterators {
@@ -41,7 +42,7 @@ template<
class Base,
int BitsOut,
int BitsIn,
- class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type // output character
+ class CharType = typename boost::iterator_value<Base>::type // output character
>
class transform_width :
public boost::iterator_adaptor<
@@ -53,7 +54,7 @@ class transform_width :
>
{
friend class boost::iterator_core_access;
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ typedef typename boost::iterator_adaptor<
transform_width<Base, BitsOut, BitsIn, CharType>,
Base,
CharType,
@@ -62,7 +63,7 @@ class transform_width :
> super_t;
typedef transform_width<Base, BitsOut, BitsIn, CharType> this_t;
- typedef BOOST_DEDUCED_TYPENAME iterator_value<Base>::type base_value_type;
+ typedef typename iterator_value<Base>::type base_value_type;
void fill();
@@ -112,6 +113,10 @@ public:
transform_width(BOOST_PFTO_WRAPPER(T) start) :
super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))),
m_buffer_out_full(false),
+ // To disable GCC warning, but not truly necessary
+ //(m_buffer_in will be initialized later before being
+ //used because m_remaining_bits == 0)
+ m_buffer_in(0),
m_remaining_bits(0),
m_end_of_sequence(false)
{}
@@ -119,8 +124,8 @@ public:
transform_width(const transform_width & rhs) :
super_t(rhs.base_reference()),
m_buffer_out_full(rhs.m_buffer_out_full),
- m_remaining_bits(rhs.m_remaining_bits),
m_buffer_in(rhs.m_buffer_in),
+ m_remaining_bits(rhs.m_remaining_bits),
m_end_of_sequence(false)
{}
};
diff --git a/3party/boost/boost/archive/iterators/unescape.hpp b/3party/boost/boost/archive/iterators/unescape.hpp
index 9cbd3161c6..abf6240608 100644
--- a/3party/boost/boost/archive/iterators/unescape.hpp
+++ b/3party/boost/boost/archive/iterators/unescape.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -18,9 +18,7 @@
#include <boost/assert.hpp>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
#include <boost/iterator/iterator_adaptor.hpp>
-//#include <boost/iterator/iterator_traits.hpp>
#include <boost/pointee.hpp>
namespace boost {
@@ -35,24 +33,24 @@ class unescape
: public boost::iterator_adaptor<
unescape<Derived, Base>,
Base,
- BOOST_DEDUCED_TYPENAME pointee<Base>::type,
+ typename pointee<Base>::type,
single_pass_traversal_tag,
- BOOST_DEDUCED_TYPENAME pointee<Base>::type
+ typename pointee<Base>::type
>
{
friend class boost::iterator_core_access;
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ typedef typename boost::iterator_adaptor<
unescape<Derived, Base>,
Base,
- BOOST_DEDUCED_TYPENAME pointee<Base>::type,
+ typename pointee<Base>::type,
single_pass_traversal_tag,
- BOOST_DEDUCED_TYPENAME pointee<Base>::type
+ typename pointee<Base>::type
> super_t;
typedef unescape<Derived, Base> this_t;
public:
- typedef BOOST_DEDUCED_TYPENAME this_t::value_type value_type;
- typedef BOOST_DEDUCED_TYPENAME this_t::reference reference;
+ typedef typename this_t::value_type value_type;
+ typedef typename this_t::reference reference;
private:
value_type dereference_impl() {
if(! m_full){
diff --git a/3party/boost/boost/archive/iterators/wchar_from_mb.hpp b/3party/boost/boost/archive/iterators/wchar_from_mb.hpp
index 4da81215ff..ab81f17b68 100644
--- a/3party/boost/boost/archive/iterators/wchar_from_mb.hpp
+++ b/3party/boost/boost/archive/iterators/wchar_from_mb.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -21,7 +21,7 @@
#include <cstddef> // size_t
#include <cstdlib> // mblen
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::mblen;
@@ -53,7 +53,7 @@ class wchar_from_mb
>
{
friend class boost::iterator_core_access;
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ typedef typename boost::iterator_adaptor<
wchar_from_mb<Base>,
Base,
wchar_t,
diff --git a/3party/boost/boost/archive/iterators/xml_escape.hpp b/3party/boost/boost/archive/iterators/xml_escape.hpp
index eadb96e8bf..a5d2c5120f 100644
--- a/3party/boost/boost/archive/iterators/xml_escape.hpp
+++ b/3party/boost/boost/archive/iterators/xml_escape.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -17,10 +17,7 @@
// See http://www.boost.org for updates, documentation, and revision history.
#include <boost/assert.hpp>
-
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
#include <boost/serialization/pfto.hpp>
-
#include <boost/archive/iterators/escape.hpp>
namespace boost {
diff --git a/3party/boost/boost/archive/iterators/xml_unescape.hpp b/3party/boost/boost/archive/iterators/xml_unescape.hpp
index 3295adb393..69438ed044 100644
--- a/3party/boost/boost/archive/iterators/xml_unescape.hpp
+++ b/3party/boost/boost/archive/iterators/xml_unescape.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -18,8 +18,6 @@
#include <boost/assert.hpp>
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
-
#include <boost/serialization/throw_exception.hpp>
#include <boost/serialization/pfto.hpp>
@@ -39,7 +37,7 @@ class xml_unescape
friend class boost::iterator_core_access;
typedef xml_unescape<Base> this_t;
typedef unescape<this_t, Base> super_t;
- typedef BOOST_DEDUCED_TYPENAME boost::iterator_reference<this_t> reference_type;
+ typedef typename boost::iterator_reference<this_t> reference_type;
reference_type dereference() const {
return unescape<xml_unescape<Base>, Base>::dereference();
@@ -49,7 +47,7 @@ public:
#if defined(BOOST_MSVC)
typedef int value_type;
#else
- typedef BOOST_DEDUCED_TYPENAME this_t::value_type value_type;
+ typedef typename this_t::value_type value_type;
#endif
void drain_residue(const char *literal);
@@ -83,7 +81,7 @@ void xml_unescape<Base>::drain_residue(const char * literal){
// iterator refenence which would make subsequent iterator comparisons
// incorrect and thereby break the composiblity of iterators.
template<class Base>
-BOOST_DEDUCED_TYPENAME xml_unescape<Base>::value_type
+typename xml_unescape<Base>::value_type
//int
xml_unescape<Base>::drain(){
value_type retval = * this->base_reference();
diff --git a/3party/boost/boost/archive/iterators/xml_unescape_exception.hpp b/3party/boost/boost/archive/iterators/xml_unescape_exception.hpp
index 259d2ba26b..71a64378c2 100644
--- a/3party/boost/boost/archive/iterators/xml_unescape_exception.hpp
+++ b/3party/boost/boost/archive/iterators/xml_unescape_exception.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_EXCEPTION_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/polymorphic_binary_iarchive.hpp b/3party/boost/boost/archive/polymorphic_binary_iarchive.hpp
index ce7e3b0609..4a898a8ad1 100644
--- a/3party/boost/boost/archive/polymorphic_binary_iarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_binary_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_BINARY_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -29,11 +29,11 @@ namespace boost {
namespace archive {
class polymorphic_binary_iarchive :
- public detail::polymorphic_iarchive_route<naked_binary_iarchive>
+ public detail::polymorphic_iarchive_route<binary_iarchive>
{
public:
polymorphic_binary_iarchive(std::istream & is, unsigned int flags = 0) :
- detail::polymorphic_iarchive_route<naked_binary_iarchive>(is, flags)
+ detail::polymorphic_iarchive_route<binary_iarchive>(is, flags)
{}
~polymorphic_binary_iarchive(){}
};
diff --git a/3party/boost/boost/archive/polymorphic_binary_oarchive.hpp b/3party/boost/boost/archive/polymorphic_binary_oarchive.hpp
index a66ebddca6..931b243feb 100644
--- a/3party/boost/boost/archive/polymorphic_binary_oarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_binary_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_BINARY_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -25,7 +25,7 @@ namespace archive {
typedef detail::polymorphic_oarchive_route<
binary_oarchive_impl<
- naked_binary_oarchive,
+ binary_oarchive,
std::ostream::char_type,
std::ostream::traits_type
>
diff --git a/3party/boost/boost/archive/polymorphic_iarchive.hpp b/3party/boost/boost/archive/polymorphic_iarchive.hpp
index 2f76cf267a..50488a331f 100644
--- a/3party/boost/boost/archive/polymorphic_iarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -39,8 +39,6 @@ namespace std{
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
namespace boost {
-template<class T>
-class shared_ptr;
namespace serialization {
class extended_type_info;
} // namespace serialization
@@ -155,18 +153,11 @@ public:
#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
-// note special treatment of shared_ptr. This type needs a special
-// structure associated with every archive. We created a "mix-in"
-// class to provide this functionality. Since shared_ptr holds a
-// special esteem in the boost library - we included it here by default.
-#include <boost/archive/shared_ptr_helper.hpp>
-
-namespace boost {
+namespace boost {
namespace archive {
class polymorphic_iarchive :
- public polymorphic_iarchive_impl,
- public detail::shared_ptr_helper
+ public polymorphic_iarchive_impl
{
public:
virtual ~polymorphic_iarchive(){};
diff --git a/3party/boost/boost/archive/polymorphic_oarchive.hpp b/3party/boost/boost/archive/polymorphic_oarchive.hpp
index 420029b5b6..1eb9e0b419 100644
--- a/3party/boost/boost/archive/polymorphic_oarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -38,8 +38,6 @@ namespace std{
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
namespace boost {
-template<class T>
-class shared_ptr;
namespace serialization {
class extended_type_info;
} // namespace serialization
diff --git a/3party/boost/boost/archive/polymorphic_text_iarchive.hpp b/3party/boost/boost/archive/polymorphic_text_iarchive.hpp
index 931a9287c7..7bef292786 100644
--- a/3party/boost/boost/archive/polymorphic_text_iarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_text_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_TEXT_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -29,11 +29,11 @@ namespace boost {
namespace archive {
class polymorphic_text_iarchive :
- public detail::polymorphic_iarchive_route<naked_text_iarchive>
+ public detail::polymorphic_iarchive_route<text_iarchive>
{
public:
polymorphic_text_iarchive(std::istream & is, unsigned int flags = 0) :
- detail::polymorphic_iarchive_route<naked_text_iarchive>(is, flags)
+ detail::polymorphic_iarchive_route<text_iarchive>(is, flags)
{}
~polymorphic_text_iarchive(){}
};
diff --git a/3party/boost/boost/archive/polymorphic_text_oarchive.hpp b/3party/boost/boost/archive/polymorphic_text_oarchive.hpp
index 82b48924f9..457aad9fd7 100644
--- a/3party/boost/boost/archive/polymorphic_text_oarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_text_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_TEXT_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -24,7 +24,7 @@ namespace boost {
namespace archive {
typedef detail::polymorphic_oarchive_route<
- text_oarchive_impl<naked_text_oarchive>
+ text_oarchive_impl<text_oarchive>
> polymorphic_text_oarchive;
} // namespace archive
diff --git a/3party/boost/boost/archive/polymorphic_text_wiarchive.hpp b/3party/boost/boost/archive/polymorphic_text_wiarchive.hpp
index 4df3d47351..8466f05d6a 100644
--- a/3party/boost/boost/archive/polymorphic_text_wiarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_text_wiarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_TEXT_WIARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -33,11 +33,11 @@ namespace boost {
namespace archive {
class polymorphic_text_wiarchive :
- public detail::polymorphic_iarchive_route<naked_text_wiarchive>
+ public detail::polymorphic_iarchive_route<text_wiarchive>
{
public:
polymorphic_text_wiarchive(std::wistream & is, unsigned int flags = 0) :
- detail::polymorphic_iarchive_route<naked_text_wiarchive>(is, flags)
+ detail::polymorphic_iarchive_route<text_wiarchive>(is, flags)
{}
~polymorphic_text_wiarchive(){}
};
diff --git a/3party/boost/boost/archive/polymorphic_text_woarchive.hpp b/3party/boost/boost/archive/polymorphic_text_woarchive.hpp
index bc44947416..295625d1bc 100644
--- a/3party/boost/boost/archive/polymorphic_text_woarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_text_woarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_TEXT_WOARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -28,7 +28,7 @@ namespace boost {
namespace archive {
typedef detail::polymorphic_oarchive_route<
- text_woarchive_impl<naked_text_woarchive>
+ text_woarchive_impl<text_woarchive>
> polymorphic_text_woarchive;
} // namespace archive
diff --git a/3party/boost/boost/archive/polymorphic_xml_iarchive.hpp b/3party/boost/boost/archive/polymorphic_xml_iarchive.hpp
index feb0b99bc2..4dc3f894b3 100644
--- a/3party/boost/boost/archive/polymorphic_xml_iarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_xml_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_XML_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -29,11 +29,11 @@ namespace boost {
namespace archive {
class polymorphic_xml_iarchive :
- public detail::polymorphic_iarchive_route<naked_xml_iarchive>
+ public detail::polymorphic_iarchive_route<xml_iarchive>
{
public:
polymorphic_xml_iarchive(std::istream & is, unsigned int flags = 0) :
- detail::polymorphic_iarchive_route<naked_xml_iarchive>(is, flags)
+ detail::polymorphic_iarchive_route<xml_iarchive>(is, flags)
{}
~polymorphic_xml_iarchive(){}
};
diff --git a/3party/boost/boost/archive/polymorphic_xml_oarchive.hpp b/3party/boost/boost/archive/polymorphic_xml_oarchive.hpp
index 8576694288..514f9e530a 100644
--- a/3party/boost/boost/archive/polymorphic_xml_oarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_xml_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_XML_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -24,7 +24,7 @@ namespace boost {
namespace archive {
typedef detail::polymorphic_oarchive_route<
- xml_oarchive_impl<naked_xml_oarchive>
+ xml_oarchive_impl<xml_oarchive>
> polymorphic_xml_oarchive;
} // namespace archive
diff --git a/3party/boost/boost/archive/polymorphic_xml_wiarchive.hpp b/3party/boost/boost/archive/polymorphic_xml_wiarchive.hpp
index b3f7db2582..d4ab731267 100644
--- a/3party/boost/boost/archive/polymorphic_xml_wiarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_xml_wiarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_XML_WIARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -28,11 +28,11 @@ namespace boost {
namespace archive {
class polymorphic_xml_wiarchive :
- public detail::polymorphic_iarchive_route<naked_xml_wiarchive>
+ public detail::polymorphic_iarchive_route<xml_wiarchive>
{
public:
polymorphic_xml_wiarchive(std::wistream & is, unsigned int flags = 0) :
- detail::polymorphic_iarchive_route<naked_xml_wiarchive>(is, flags)
+ detail::polymorphic_iarchive_route<xml_wiarchive>(is, flags)
{}
~polymorphic_xml_wiarchive(){}
};
diff --git a/3party/boost/boost/archive/polymorphic_xml_woarchive.hpp b/3party/boost/boost/archive/polymorphic_xml_woarchive.hpp
index 8884b43c75..dd8963fbb1 100644
--- a/3party/boost/boost/archive/polymorphic_xml_woarchive.hpp
+++ b/3party/boost/boost/archive/polymorphic_xml_woarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_POLYMORPHIC_XML_WOARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -28,7 +28,7 @@ namespace boost {
namespace archive {
typedef detail::polymorphic_oarchive_route<
- xml_woarchive_impl<naked_xml_woarchive>
+ xml_woarchive_impl<xml_woarchive>
> polymorphic_xml_woarchive;
} // namespace archive
diff --git a/3party/boost/boost/archive/shared_ptr_helper.hpp b/3party/boost/boost/archive/shared_ptr_helper.hpp
index 39e6eb82c8..3df4605551 100644
--- a/3party/boost/boost/archive/shared_ptr_helper.hpp
+++ b/3party/boost/boost/archive/shared_ptr_helper.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/text_iarchive.hpp b/3party/boost/boost/archive/text_iarchive.hpp
index 298928b3e7..1fd0f608d3 100644
--- a/3party/boost/boost/archive/text_iarchive.hpp
+++ b/3party/boost/boost/archive/text_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_TEXT_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -35,6 +35,10 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_iarchive;
+} // namespace detail
+
template<class Archive>
class text_iarchive_impl :
public basic_text_iprimitive<std::istream>,
@@ -43,10 +47,16 @@ class text_iarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_iarchive<Archive>;
- friend class basic_text_iarchive<Archive>;
- friend class load_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+ friend load_access;
+ #else
+ friend class detail::interface_iarchive<Archive>;
+ friend class load_access;
+ #endif
#endif
template<class T>
void load(T & t){
@@ -92,22 +102,6 @@ protected:
~text_iarchive_impl(){};
};
-// do not derive from the classes below. If you want to extend this functionality
-// via inhertance, derived from text_iarchive_impl instead. This will
-// preserve correct static polymorphism.
-
-// same as text_iarchive below - without the shared_ptr_helper
-class naked_text_iarchive :
- public text_iarchive_impl<naked_text_iarchive>
-{
-public:
- naked_text_iarchive(std::istream & is_, unsigned int flags = 0) :
- // note: added _ to suppress useless gcc warning
- text_iarchive_impl<naked_text_iarchive>(is_, flags)
- {}
- ~naked_text_iarchive(){}
-};
-
} // namespace archive
} // namespace boost
@@ -117,12 +111,6 @@ public:
#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
-// note special treatment of shared_ptr. This type needs a special
-// structure associated with every archive. We created a "mix-in"
-// class to provide this functionality. Since shared_ptr holds a
-// special esteem in the boost library - we included it here by default.
-#include <boost/archive/shared_ptr_helper.hpp>
-
#ifdef BOOST_MSVC
# pragma warning(push)
# pragma warning(disable : 4511 4512)
@@ -132,9 +120,7 @@ namespace boost {
namespace archive {
class text_iarchive :
- public text_iarchive_impl<text_iarchive>,
- public detail::shared_ptr_helper
-{
+ public text_iarchive_impl<text_iarchive>{
public:
text_iarchive(std::istream & is_, unsigned int flags = 0) :
// note: added _ to suppress useless gcc warning
diff --git a/3party/boost/boost/archive/text_oarchive.hpp b/3party/boost/boost/archive/text_oarchive.hpp
index 2100d539ef..9fd63a9b97 100644
--- a/3party/boost/boost/archive/text_oarchive.hpp
+++ b/3party/boost/boost/archive/text_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_TEXT_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -42,6 +42,10 @@ namespace std{
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_oarchive;
+} // namespace detail
+
template<class Archive>
class text_oarchive_impl :
/* protected ? */ public basic_text_oprimitive<std::ostream>,
@@ -50,10 +54,18 @@ class text_oarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_oarchive<Archive>;
- friend class basic_text_oarchive<Archive>;
- friend class save_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+ friend basic_text_oarchive<Archive>;
+ friend save_access;
+ #else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_text_oarchive<Archive>;
+ friend class save_access;
+ #endif
#endif
template<class T>
void save(const T & t){
@@ -102,8 +114,6 @@ public:
~text_oarchive(){}
};
-typedef text_oarchive naked_text_oarchive;
-
} // namespace archive
} // namespace boost
diff --git a/3party/boost/boost/archive/text_wiarchive.hpp b/3party/boost/boost/archive/text_wiarchive.hpp
index 7451f3a620..5105d351ca 100644
--- a/3party/boost/boost/archive/text_wiarchive.hpp
+++ b/3party/boost/boost/archive/text_wiarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -39,6 +39,10 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_iarchive;
+} // namespace detail
+
template<class Archive>
class text_wiarchive_impl :
public basic_text_iprimitive<std::wistream>,
@@ -47,10 +51,16 @@ class text_wiarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_iarchive<Archive>;
- friend class basic_text_iarchive<Archive>;
- friend class load_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+ friend load_access;
+ #else
+ friend class detail::interface_iarchive<Archive>;
+ friend class load_access;
+ #endif
#endif
template<class T>
void load(T & t){
@@ -89,21 +99,6 @@ protected:
~text_wiarchive_impl(){};
};
-// do not derive from the classes below. If you want to extend this functionality
-// via inhertance, derived from text_iarchive_impl instead. This will
-// preserve correct static polymorphism.
-
-// same as text_wiarchive below - without the shared_ptr_helper
-class naked_text_wiarchive :
- public text_wiarchive_impl<naked_text_wiarchive>
-{
-public:
- naked_text_wiarchive(std::wistream & is, unsigned int flags = 0) :
- text_wiarchive_impl<naked_text_wiarchive>(is, flags)
- {}
- ~naked_text_wiarchive(){}
-};
-
} // namespace archive
} // namespace boost
@@ -113,12 +108,6 @@ public:
#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
-// note special treatment of shared_ptr. This type needs a special
-// structure associated with every archive. We created a "mix-in"
-// class to provide this functionality. Since shared_ptr holds a
-// special esteem in the boost library - we included it here by default.
-#include <boost/archive/shared_ptr_helper.hpp>
-
#ifdef BOOST_MSVC
# pragma warning(push)
# pragma warning(disable : 4511 4512)
@@ -128,9 +117,7 @@ namespace boost {
namespace archive {
class text_wiarchive :
- public text_wiarchive_impl<text_wiarchive>,
- public detail::shared_ptr_helper
-{
+ public text_wiarchive_impl<text_wiarchive>{
public:
text_wiarchive(std::wistream & is, unsigned int flags = 0) :
text_wiarchive_impl<text_wiarchive>(is, flags)
diff --git a/3party/boost/boost/archive/text_woarchive.hpp b/3party/boost/boost/archive/text_woarchive.hpp
index 7ed0c820b8..2f75204d2f 100644
--- a/3party/boost/boost/archive/text_woarchive.hpp
+++ b/3party/boost/boost/archive/text_woarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -47,6 +47,10 @@ namespace std{
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_oarchive;
+} // namespace detail
+
template<class Archive>
class text_woarchive_impl :
public basic_text_oprimitive<std::wostream>,
@@ -55,10 +59,18 @@ class text_woarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_oarchive<Archive>;
- friend class basic_text_oarchive<Archive>;
- friend class save_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+ friend basic_text_oarchive<Archive>;
+ friend save_access;
+ #else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_text_oarchive<Archive>;
+ friend class save_access;
+ #endif
#endif
template<class T>
void save(const T & t){
@@ -127,8 +139,6 @@ public:
~text_woarchive(){}
};
-typedef text_woarchive naked_text_woarchive;
-
} // namespace archive
} // namespace boost
diff --git a/3party/boost/boost/archive/tmpdir.hpp b/3party/boost/boost/archive/tmpdir.hpp
index 9e6ada4cea..400d23b9f6 100644
--- a/3party/boost/boost/archive/tmpdir.hpp
+++ b/3party/boost/boost/archive/tmpdir.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_TMPDIR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/wcslen.hpp b/3party/boost/boost/archive/wcslen.hpp
index 5c14acfff3..2a3d6351d4 100644
--- a/3party/boost/boost/archive/wcslen.hpp
+++ b/3party/boost/boost/archive/wcslen.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_WCSLEN_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/xml_archive_exception.hpp b/3party/boost/boost/archive/xml_archive_exception.hpp
index 48e6cb3299..622cafea41 100644
--- a/3party/boost/boost/archive/xml_archive_exception.hpp
+++ b/3party/boost/boost/archive/xml_archive_exception.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_XML_ARCHIVE_EXCEPTION_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/archive/xml_iarchive.hpp b/3party/boost/boost/archive/xml_iarchive.hpp
index be6cfe494e..ba50d7cc48 100644
--- a/3party/boost/boost/archive/xml_iarchive.hpp
+++ b/3party/boost/boost/archive/xml_iarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_XML_IARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -35,6 +35,10 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_iarchive;
+} // namespace detail
+
template<class CharType>
class basic_xml_grammar;
typedef basic_xml_grammar<char> xml_grammar;
@@ -47,10 +51,18 @@ class xml_iarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_iarchive<Archive>;
- friend class basic_xml_iarchive<Archive>;
- friend class load_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+ friend basic_xml_iarchive<Archive>;
+ friend load_access;
+ #else
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_xml_iarchive<Archive>;
+ friend class load_access;
+ #endif
#endif
// instances of micro xml parser to parse start preambles
// scoped_ptr doesn't play nice with borland - so use a naked pointer
@@ -102,21 +114,6 @@ protected:
~xml_iarchive_impl();
};
-// do not derive from the classes below. If you want to extend this functionality
-// via inhertance, derived from text_iarchive_impl instead. This will
-// preserve correct static polymorphism.
-
-// same as xml_iarchive below - without the shared_ptr_helper
-class naked_xml_iarchive :
- public xml_iarchive_impl<naked_xml_iarchive>
-{
-public:
- naked_xml_iarchive(std::istream & is, unsigned int flags = 0) :
- xml_iarchive_impl<naked_xml_iarchive>(is, flags)
- {}
- ~naked_xml_iarchive(){}
-};
-
} // namespace archive
} // namespace boost
@@ -125,13 +122,6 @@ public:
#endif
#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
-
-// note special treatment of shared_ptr. This type needs a special
-// structure associated with every archive. We created a "mix-in"
-// class to provide this functionality. Since shared_ptr holds a
-// special esteem in the boost library - we included it here by default.
-#include <boost/archive/shared_ptr_helper.hpp>
-
#ifdef BOOST_MSVC
# pragma warning(push)
# pragma warning(disable : 4511 4512)
@@ -141,9 +131,7 @@ namespace boost {
namespace archive {
class xml_iarchive :
- public xml_iarchive_impl<xml_iarchive>,
- public detail::shared_ptr_helper
-{
+ public xml_iarchive_impl<xml_iarchive>{
public:
xml_iarchive(std::istream & is, unsigned int flags = 0) :
xml_iarchive_impl<xml_iarchive>(is, flags)
diff --git a/3party/boost/boost/archive/xml_oarchive.hpp b/3party/boost/boost/archive/xml_oarchive.hpp
index 167ba09370..2ac4ae1d69 100644
--- a/3party/boost/boost/archive/xml_oarchive.hpp
+++ b/3party/boost/boost/archive/xml_oarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_XML_OARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -42,6 +42,10 @@ namespace std{
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_oarchive;
+} // namespace detail
+
template<class Archive>
class xml_oarchive_impl :
public basic_text_oprimitive<std::ostream>,
@@ -50,10 +54,18 @@ class xml_oarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_oarchive<Archive>;
- friend class basic_xml_oarchive<Archive>;
- friend class save_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+ friend basic_xml_oarchive<Archive>;
+ friend save_access;
+ #else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_xml_oarchive<Archive>;
+ friend class save_access;
+ #endif
#endif
//void end_preamble(){
// basic_xml_oarchive<Archive>::end_preamble();
@@ -116,8 +128,6 @@ public:
~xml_oarchive(){}
};
-typedef xml_oarchive naked_xml_oarchive;
-
} // namespace archive
} // namespace boost
diff --git a/3party/boost/boost/archive/xml_wiarchive.hpp b/3party/boost/boost/archive/xml_wiarchive.hpp
index 59ebbb5e7c..31aff88ad0 100644
--- a/3party/boost/boost/archive/xml_wiarchive.hpp
+++ b/3party/boost/boost/archive/xml_wiarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_XML_WIARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -40,6 +40,10 @@
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_iarchive;
+} // namespace detail
+
template<class CharType>
class basic_xml_grammar;
typedef basic_xml_grammar<wchar_t> xml_wgrammar;
@@ -52,10 +56,18 @@ class xml_wiarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_iarchive<Archive>;
- friend class basic_xml_iarchive<Archive>;
- friend class load_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+ friend basic_xml_iarchive<Archive>;
+ friend load_access;
+ #else
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_xml_iarchive<Archive>;
+ friend class load_access;
+ #endif
#endif
// instances of micro xml parser to parse start preambles
// scoped_ptr doesn't play nice with borland - so use a naked pointer
@@ -107,21 +119,6 @@ protected:
~xml_wiarchive_impl();
};
-// do not derive from the classes below. If you want to extend this functionality
-// via inhertance, derived from xml_wiarchive_impl instead. This will
-// preserve correct static polymorphism.
-
-// same as xml_wiarchive below - without the shared_ptr_helper
-class naked_xml_wiarchive :
- public xml_wiarchive_impl<naked_xml_wiarchive>
-{
-public:
- naked_xml_wiarchive(std::wistream & is, unsigned int flags = 0) :
- xml_wiarchive_impl<naked_xml_wiarchive>(is, flags)
- {}
- ~naked_xml_wiarchive(){}
-};
-
} // namespace archive
} // namespace boost
@@ -131,12 +128,6 @@ public:
#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
-// note special treatment of shared_ptr. This type needs a special
-// structure associated with every archive. We created a "mix-in"
-// class to provide this functionality. Since shared_ptr holds a
-// special esteem in the boost library - we included it here by default.
-#include <boost/archive/shared_ptr_helper.hpp>
-
#ifdef BOOST_MSVC
# pragma warning(push)
# pragma warning(disable : 4511 4512)
@@ -146,9 +137,7 @@ namespace boost {
namespace archive {
class xml_wiarchive :
- public xml_wiarchive_impl<xml_wiarchive>,
- public detail::shared_ptr_helper
-{
+ public xml_wiarchive_impl<xml_wiarchive>{
public:
xml_wiarchive(std::wistream & is, unsigned int flags = 0) :
xml_wiarchive_impl<xml_wiarchive>(is, flags)
diff --git a/3party/boost/boost/archive/xml_woarchive.hpp b/3party/boost/boost/archive/xml_woarchive.hpp
index 08c0fdc6a4..7fcaeb9634 100644
--- a/3party/boost/boost/archive/xml_woarchive.hpp
+++ b/3party/boost/boost/archive/xml_woarchive.hpp
@@ -2,7 +2,7 @@
#define BOOST_ARCHIVE_XML_WOARCHIVE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -46,6 +46,10 @@ namespace std{
namespace boost {
namespace archive {
+namespace detail {
+ template<class Archive> class interface_oarchive;
+} // namespace detail
+
template<class Archive>
class xml_woarchive_impl :
public basic_text_oprimitive<std::wostream>,
@@ -54,11 +58,20 @@ class xml_woarchive_impl :
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
- friend class detail::interface_oarchive<Archive>;
- friend class basic_xml_oarchive<Archive>;
- friend class save_access;
protected:
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+ friend basic_xml_oarchive<Archive>;
+ friend save_access;
+ #else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_xml_oarchive<Archive>;
+ friend class save_access;
+ #endif
#endif
+
//void end_preamble(){
// basic_xml_oarchive<Archive>::end_preamble();
//}
@@ -122,8 +135,6 @@ public:
~xml_woarchive(){}
};
-typedef xml_woarchive naked_xml_woarchive;
-
} // namespace archive
} // namespace boost
diff --git a/3party/boost/boost/asio.hpp b/3party/boost/boost/asio.hpp
index a810967cc3..871fcbe41f 100644
--- a/3party/boost/boost/asio.hpp
+++ b/3party/boost/boost/asio.hpp
@@ -2,7 +2,7 @@
// asio.hpp
// ~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/async_result.hpp b/3party/boost/boost/asio/async_result.hpp
index 845fb02b2b..7a24ce5334 100644
--- a/3party/boost/boost/asio/async_result.hpp
+++ b/3party/boost/boost/asio/async_result.hpp
@@ -2,7 +2,7 @@
// async_result.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_datagram_socket.hpp b/3party/boost/boost/asio/basic_datagram_socket.hpp
index a9b2211e70..1be3c78235 100644
--- a/3party/boost/boost/asio/basic_datagram_socket.hpp
+++ b/3party/boost/boost/asio/basic_datagram_socket.hpp
@@ -2,7 +2,7 @@
// basic_datagram_socket.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -300,9 +300,8 @@ public:
/// Start an asynchronous send on a connected socket.
/**
- * This function is used to send data on the datagram socket. The function
- * call will block until the data has been sent successfully or an error
- * occurs.
+ * This function is used to asynchronously send data on the datagram socket.
+ * The function call always returns immediately.
*
* @param buffers One or more data buffers to be sent on the socket. Although
* the buffers object may be copied as necessary, ownership of the underlying
@@ -350,9 +349,8 @@ public:
/// Start an asynchronous send on a connected socket.
/**
- * This function is used to send data on the datagram socket. The function
- * call will block until the data has been sent successfully or an error
- * occurs.
+ * This function is used to asynchronously send data on the datagram socket.
+ * The function call always returns immediately.
*
* @param buffers One or more data buffers to be sent on the socket. Although
* the buffers object may be copied as necessary, ownership of the underlying
@@ -878,7 +876,7 @@ public:
* To receive into a single data buffer use the @ref buffer function as
* follows:
* @code socket.async_receive_from(
- * boost::asio::buffer(data, size), 0, sender_endpoint, handler); @endcode
+ * boost::asio::buffer(data, size), sender_endpoint, handler); @endcode
* See the @ref buffer documentation for information on receiving into
* multiple buffers in one go, and how to use it with arrays, boost::array or
* std::vector.
diff --git a/3party/boost/boost/asio/basic_deadline_timer.hpp b/3party/boost/boost/asio/basic_deadline_timer.hpp
index a5acea7e2c..767e85990f 100644
--- a/3party/boost/boost/asio/basic_deadline_timer.hpp
+++ b/3party/boost/boost/asio/basic_deadline_timer.hpp
@@ -2,7 +2,7 @@
// basic_deadline_timer.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_io_object.hpp b/3party/boost/boost/asio/basic_io_object.hpp
index 89e2bed731..784fcc9bed 100644
--- a/3party/boost/boost/asio/basic_io_object.hpp
+++ b/3party/boost/boost/asio/basic_io_object.hpp
@@ -2,7 +2,7 @@
// basic_io_object.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_raw_socket.hpp b/3party/boost/boost/asio/basic_raw_socket.hpp
index 9b9f45b3a8..4f3c7c24c5 100644
--- a/3party/boost/boost/asio/basic_raw_socket.hpp
+++ b/3party/boost/boost/asio/basic_raw_socket.hpp
@@ -2,7 +2,7 @@
// basic_raw_socket.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_seq_packet_socket.hpp b/3party/boost/boost/asio/basic_seq_packet_socket.hpp
index aee3b6853c..630296c38e 100644
--- a/3party/boost/boost/asio/basic_seq_packet_socket.hpp
+++ b/3party/boost/boost/asio/basic_seq_packet_socket.hpp
@@ -2,7 +2,7 @@
// basic_seq_packet_socket.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_serial_port.hpp b/3party/boost/boost/asio/basic_serial_port.hpp
index 4d6f23f226..dda2c88ca1 100644
--- a/3party/boost/boost/asio/basic_serial_port.hpp
+++ b/3party/boost/boost/asio/basic_serial_port.hpp
@@ -2,7 +2,7 @@
// basic_serial_port.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/basic_signal_set.hpp b/3party/boost/boost/asio/basic_signal_set.hpp
index eb270b85ec..d7f60fa8ff 100644
--- a/3party/boost/boost/asio/basic_signal_set.hpp
+++ b/3party/boost/boost/asio/basic_signal_set.hpp
@@ -2,7 +2,7 @@
// basic_signal_set.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_socket.hpp b/3party/boost/boost/asio/basic_socket.hpp
index f3e68b9989..a28f365e58 100644
--- a/3party/boost/boost/asio/basic_socket.hpp
+++ b/3party/boost/boost/asio/basic_socket.hpp
@@ -2,7 +2,7 @@
// basic_socket.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_socket_acceptor.hpp b/3party/boost/boost/asio/basic_socket_acceptor.hpp
index 12528b8d9a..ed019a0d97 100644
--- a/3party/boost/boost/asio/basic_socket_acceptor.hpp
+++ b/3party/boost/boost/asio/basic_socket_acceptor.hpp
@@ -2,7 +2,7 @@
// basic_socket_acceptor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_socket_iostream.hpp b/3party/boost/boost/asio/basic_socket_iostream.hpp
index 6135ea6ab5..221de7fcf7 100644
--- a/3party/boost/boost/asio/basic_socket_iostream.hpp
+++ b/3party/boost/boost/asio/basic_socket_iostream.hpp
@@ -2,7 +2,7 @@
// basic_socket_iostream.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,14 +26,7 @@
#if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
-# include <boost/preprocessor/arithmetic/inc.hpp>
-# include <boost/preprocessor/repetition/enum_binary_params.hpp>
-# include <boost/preprocessor/repetition/enum_params.hpp>
-# include <boost/preprocessor/repetition/repeat_from_to.hpp>
-
-# if !defined(BOOST_ASIO_SOCKET_IOSTREAM_MAX_ARITY)
-# define BOOST_ASIO_SOCKET_IOSTREAM_MAX_ARITY 5
-# endif // !defined(BOOST_ASIO_SOCKET_IOSTREAM_MAX_ARITY)
+# include <boost/asio/detail/variadic_templates.hpp>
// A macro that should expand to:
// template <typename T1, ..., typename Tn>
@@ -48,16 +41,16 @@
// }
// This macro should only persist within this file.
-# define BOOST_ASIO_PRIVATE_CTR_DEF(z, n, data) \
- template <BOOST_PP_ENUM_PARAMS(n, typename T)> \
- explicit basic_socket_iostream(BOOST_PP_ENUM_BINARY_PARAMS(n, T, x)) \
+# define BOOST_ASIO_PRIVATE_CTR_DEF(n) \
+ template <BOOST_ASIO_VARIADIC_TPARAMS(n)> \
+ explicit basic_socket_iostream(BOOST_ASIO_VARIADIC_PARAMS(n)) \
: std::basic_iostream<char>( \
&this->detail::socket_iostream_base< \
Protocol, StreamSocketService, Time, \
TimeTraits, TimerService>::streambuf_) \
{ \
this->setf(std::ios_base::unitbuf); \
- if (rdbuf()->connect(BOOST_PP_ENUM_PARAMS(n, x)) == 0) \
+ if (rdbuf()->connect(BOOST_ASIO_VARIADIC_ARGS(n)) == 0) \
this->setstate(std::ios_base::failbit); \
} \
/**/
@@ -71,11 +64,11 @@
// }
// This macro should only persist within this file.
-# define BOOST_ASIO_PRIVATE_CONNECT_DEF(z, n, data) \
- template <BOOST_PP_ENUM_PARAMS(n, typename T)> \
- void connect(BOOST_PP_ENUM_BINARY_PARAMS(n, T, x)) \
+# define BOOST_ASIO_PRIVATE_CONNECT_DEF(n) \
+ template <BOOST_ASIO_VARIADIC_TPARAMS(n)> \
+ void connect(BOOST_ASIO_VARIADIC_PARAMS(n)) \
{ \
- if (rdbuf()->connect(BOOST_PP_ENUM_PARAMS(n, x)) == 0) \
+ if (rdbuf()->connect(BOOST_ASIO_VARIADIC_ARGS(n)) == 0) \
this->setstate(std::ios_base::failbit); \
} \
/**/
@@ -175,9 +168,7 @@ public:
this->setstate(std::ios_base::failbit);
}
#else
- BOOST_PP_REPEAT_FROM_TO(
- 1, BOOST_PP_INC(BOOST_ASIO_SOCKET_IOSTREAM_MAX_ARITY),
- BOOST_ASIO_PRIVATE_CTR_DEF, _ )
+ BOOST_ASIO_VARIADIC_GENERATE(BOOST_ASIO_PRIVATE_CTR_DEF)
#endif
#if defined(GENERATING_DOCUMENTATION)
@@ -197,9 +188,7 @@ public:
this->setstate(std::ios_base::failbit);
}
#else
- BOOST_PP_REPEAT_FROM_TO(
- 1, BOOST_PP_INC(BOOST_ASIO_SOCKET_IOSTREAM_MAX_ARITY),
- BOOST_ASIO_PRIVATE_CONNECT_DEF, _ )
+ BOOST_ASIO_VARIADIC_GENERATE(BOOST_ASIO_PRIVATE_CONNECT_DEF)
#endif
/// Close the connection.
diff --git a/3party/boost/boost/asio/basic_socket_streambuf.hpp b/3party/boost/boost/asio/basic_socket_streambuf.hpp
index eca21eb93a..d5e056d1ed 100644
--- a/3party/boost/boost/asio/basic_socket_streambuf.hpp
+++ b/3party/boost/boost/asio/basic_socket_streambuf.hpp
@@ -2,7 +2,7 @@
// basic_socket_streambuf.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,14 +35,7 @@
#if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
-# include <boost/preprocessor/arithmetic/inc.hpp>
-# include <boost/preprocessor/repetition/enum_binary_params.hpp>
-# include <boost/preprocessor/repetition/enum_params.hpp>
-# include <boost/preprocessor/repetition/repeat_from_to.hpp>
-
-# if !defined(BOOST_ASIO_SOCKET_STREAMBUF_MAX_ARITY)
-# define BOOST_ASIO_SOCKET_STREAMBUF_MAX_ARITY 5
-# endif // !defined(BOOST_ASIO_SOCKET_STREAMBUF_MAX_ARITY)
+# include <boost/asio/detail/variadic_templates.hpp>
// A macro that should expand to:
// template <typename T1, ..., typename Tn>
@@ -60,17 +53,16 @@
// }
// This macro should only persist within this file.
-# define BOOST_ASIO_PRIVATE_CONNECT_DEF( z, n, data ) \
- template <BOOST_PP_ENUM_PARAMS(n, typename T)> \
+# define BOOST_ASIO_PRIVATE_CONNECT_DEF(n) \
+ template <BOOST_ASIO_VARIADIC_TPARAMS(n)> \
basic_socket_streambuf<Protocol, StreamSocketService, \
- Time, TimeTraits, TimerService>* connect( \
- BOOST_PP_ENUM_BINARY_PARAMS(n, T, x)) \
+ Time, TimeTraits, TimerService>* connect(BOOST_ASIO_VARIADIC_PARAMS(n)) \
{ \
init_buffers(); \
this->basic_socket<Protocol, StreamSocketService>::close(ec_); \
typedef typename Protocol::resolver resolver_type; \
typedef typename resolver_type::query resolver_query; \
- resolver_query query(BOOST_PP_ENUM_PARAMS(n, x)); \
+ resolver_query query(BOOST_ASIO_VARIADIC_ARGS(n)); \
resolve_and_connect(query); \
return !ec_ ? this : 0; \
} \
@@ -216,9 +208,7 @@ public:
return !ec_ ? this : 0;
}
#else
- BOOST_PP_REPEAT_FROM_TO(
- 1, BOOST_PP_INC(BOOST_ASIO_SOCKET_STREAMBUF_MAX_ARITY),
- BOOST_ASIO_PRIVATE_CONNECT_DEF, _ )
+ BOOST_ASIO_VARIADIC_GENERATE(BOOST_ASIO_PRIVATE_CONNECT_DEF)
#endif
/// Close the connection.
diff --git a/3party/boost/boost/asio/basic_stream_socket.hpp b/3party/boost/boost/asio/basic_stream_socket.hpp
index c0f5ca73d5..1a73c862df 100644
--- a/3party/boost/boost/asio/basic_stream_socket.hpp
+++ b/3party/boost/boost/asio/basic_stream_socket.hpp
@@ -2,7 +2,7 @@
// basic_stream_socket.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_streambuf.hpp b/3party/boost/boost/asio/basic_streambuf.hpp
index a66dcfb807..7884ebe8a8 100644
--- a/3party/boost/boost/asio/basic_streambuf.hpp
+++ b/3party/boost/boost/asio/basic_streambuf.hpp
@@ -2,7 +2,7 @@
// basic_streambuf.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -218,8 +218,8 @@ public:
* Requires a preceding call <tt>prepare(x)</tt> where <tt>x >= n</tt>, and
* no intervening operations that modify the input or output sequence.
*
- * @throws std::length_error If @c n is greater than the size of the output
- * sequence.
+ * @note If @c n is greater than the size of the output sequence, the entire
+ * output sequence is moved to the input sequence and no error is issued.
*/
void commit(std::size_t n)
{
@@ -233,7 +233,8 @@ public:
/**
* Removes @c n characters from the beginning of the input sequence.
*
- * @throws std::length_error If <tt>n > size()</tt>.
+ * @note If @c n is greater than the size of the input sequence, the entire
+ * input sequence is consumed and no error is issued.
*/
void consume(std::size_t n)
{
diff --git a/3party/boost/boost/asio/basic_streambuf_fwd.hpp b/3party/boost/boost/asio/basic_streambuf_fwd.hpp
index 87a3754926..87909ed6e6 100644
--- a/3party/boost/boost/asio/basic_streambuf_fwd.hpp
+++ b/3party/boost/boost/asio/basic_streambuf_fwd.hpp
@@ -2,7 +2,7 @@
// basic_streambuf_fwd.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/basic_waitable_timer.hpp b/3party/boost/boost/asio/basic_waitable_timer.hpp
index adefcaaac8..664c1bc2a8 100644
--- a/3party/boost/boost/asio/basic_waitable_timer.hpp
+++ b/3party/boost/boost/asio/basic_waitable_timer.hpp
@@ -2,7 +2,7 @@
// basic_waitable_timer.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/buffer.hpp b/3party/boost/boost/asio/buffer.hpp
index 9e87c08c75..450face65e 100644
--- a/3party/boost/boost/asio/buffer.hpp
+++ b/3party/boost/boost/asio/buffer.hpp
@@ -2,7 +2,7 @@
// buffer.hpp
// ~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -618,6 +618,9 @@ private:
* vector<unsigned char> data(boost::asio::buffer_size(buffers));
* boost::asio::buffer_copy(boost::asio::buffer(data), buffers); @endcode
*
+ * Note that @ref buffer_copy is implemented in terms of @c memcpy, and
+ * consequently it cannot be used to copy between overlapping memory regions.
+ *
* @par Buffer Invalidation
*
* A buffer object does not have any ownership of the memory it refers to. It
@@ -1265,6 +1268,9 @@ inline const_buffers_1 buffer(
*
* This prevents buffer overflow, regardless of the buffer sizes used in the
* copy operation.
+ *
+ * Note that @ref buffer_copy is implemented in terms of @c memcpy, and
+ * consequently it cannot be used to copy between overlapping memory regions.
*/
/*@{*/
@@ -1283,6 +1289,9 @@ inline const_buffers_1 buffer(
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffer& target,
const const_buffer& source)
@@ -1310,6 +1319,9 @@ inline std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffer& target,
const const_buffers_1& source)
@@ -1333,6 +1345,9 @@ inline std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffer& target,
const mutable_buffer& source)
@@ -1356,6 +1371,9 @@ inline std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffer& target,
const mutable_buffers_1& source)
@@ -1378,6 +1396,9 @@ inline std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename ConstBufferSequence>
std::size_t buffer_copy(const mutable_buffer& target,
@@ -1415,6 +1436,9 @@ std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffers_1& target,
const const_buffer& source)
@@ -1437,6 +1461,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffers_1& target,
const const_buffers_1& source)
@@ -1461,6 +1488,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffers_1& target,
const mutable_buffer& source)
@@ -1485,6 +1515,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffers_1& target,
const mutable_buffers_1& source)
@@ -1508,6 +1541,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename ConstBufferSequence>
inline std::size_t buffer_copy(const mutable_buffers_1& target,
@@ -1531,6 +1567,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence>
std::size_t buffer_copy(const MutableBufferSequence& target,
@@ -1568,6 +1607,9 @@ std::size_t buffer_copy(const MutableBufferSequence& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence>
inline std::size_t buffer_copy(const MutableBufferSequence& target,
@@ -1592,6 +1634,9 @@ inline std::size_t buffer_copy(const MutableBufferSequence& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence>
inline std::size_t buffer_copy(const MutableBufferSequence& target,
@@ -1616,6 +1661,9 @@ inline std::size_t buffer_copy(const MutableBufferSequence& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence>
inline std::size_t buffer_copy(const MutableBufferSequence& target,
@@ -1639,6 +1687,9 @@ inline std::size_t buffer_copy(const MutableBufferSequence& target,
* @li @c buffer_size(target)
*
* @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence, typename ConstBufferSequence>
std::size_t buffer_copy(const MutableBufferSequence& target,
@@ -1704,6 +1755,9 @@ std::size_t buffer_copy(const MutableBufferSequence& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffer& target,
const const_buffer& source, std::size_t max_bytes_to_copy)
@@ -1730,6 +1784,9 @@ inline std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffer& target,
const const_buffers_1& source, std::size_t max_bytes_to_copy)
@@ -1757,6 +1814,9 @@ inline std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffer& target,
const mutable_buffer& source, std::size_t max_bytes_to_copy)
@@ -1784,6 +1844,9 @@ inline std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffer& target,
const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
@@ -1811,6 +1874,9 @@ inline std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename ConstBufferSequence>
inline std::size_t buffer_copy(const mutable_buffer& target,
@@ -1838,6 +1904,9 @@ inline std::size_t buffer_copy(const mutable_buffer& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffers_1& target,
const const_buffer& source, std::size_t max_bytes_to_copy)
@@ -1864,6 +1933,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffers_1& target,
const const_buffers_1& source, std::size_t max_bytes_to_copy)
@@ -1891,6 +1963,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffers_1& target,
const mutable_buffer& source, std::size_t max_bytes_to_copy)
@@ -1918,6 +1993,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
inline std::size_t buffer_copy(const mutable_buffers_1& target,
const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
@@ -1945,6 +2023,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename ConstBufferSequence>
inline std::size_t buffer_copy(const mutable_buffers_1& target,
@@ -1973,6 +2054,9 @@ inline std::size_t buffer_copy(const mutable_buffers_1& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence>
inline std::size_t buffer_copy(const MutableBufferSequence& target,
@@ -2001,6 +2085,9 @@ inline std::size_t buffer_copy(const MutableBufferSequence& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence>
inline std::size_t buffer_copy(const MutableBufferSequence& target,
@@ -2030,6 +2117,9 @@ inline std::size_t buffer_copy(const MutableBufferSequence& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence>
inline std::size_t buffer_copy(const MutableBufferSequence& target,
@@ -2059,6 +2149,9 @@ inline std::size_t buffer_copy(const MutableBufferSequence& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence>
inline std::size_t buffer_copy(const MutableBufferSequence& target,
@@ -2087,6 +2180,9 @@ inline std::size_t buffer_copy(const MutableBufferSequence& target,
* @li @c buffer_size(source)
*
* @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
*/
template <typename MutableBufferSequence, typename ConstBufferSequence>
std::size_t buffer_copy(const MutableBufferSequence& target,
diff --git a/3party/boost/boost/asio/buffered_read_stream.hpp b/3party/boost/boost/asio/buffered_read_stream.hpp
index f53d583b41..91493e3577 100644
--- a/3party/boost/boost/asio/buffered_read_stream.hpp
+++ b/3party/boost/boost/asio/buffered_read_stream.hpp
@@ -2,7 +2,7 @@
// buffered_read_stream.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,6 +17,7 @@
#include <boost/asio/detail/config.hpp>
#include <cstddef>
+#include <boost/asio/async_result.hpp>
#include <boost/asio/buffered_read_stream_fwd.hpp>
#include <boost/asio/buffer.hpp>
#include <boost/asio/detail/bind_handler.hpp>
@@ -42,7 +43,7 @@ namespace asio {
* @e Shared @e objects: Unsafe.
*
* @par Concepts:
- * AsyncReadStream, AsyncWriteStream, Stream, Sync_Read_Stream, SyncWriteStream.
+ * AsyncReadStream, AsyncWriteStream, Stream, SyncReadStream, SyncWriteStream.
*/
template <typename Stream>
class buffered_read_stream
@@ -134,199 +135,65 @@ public:
/// Start an asynchronous write. The data being written must be valid for the
/// lifetime of the asynchronous operation.
template <typename ConstBufferSequence, typename WriteHandler>
- void async_write_some(const ConstBufferSequence& buffers,
- WriteHandler handler)
+ BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (boost::system::error_code, std::size_t))
+ async_write_some(const ConstBufferSequence& buffers,
+ BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
{
- next_layer_.async_write_some(buffers, handler);
+ detail::async_result_init<
+ WriteHandler, void (boost::system::error_code, std::size_t)> init(
+ BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+ next_layer_.async_write_some(buffers,
+ BOOST_ASIO_MOVE_CAST(BOOST_ASIO_HANDLER_TYPE(WriteHandler,
+ void (boost::system::error_code, std::size_t)))(init.handler));
+
+ return init.result.get();
}
/// Fill the buffer with some data. Returns the number of bytes placed in the
/// buffer as a result of the operation. Throws an exception on failure.
- std::size_t fill()
- {
- detail::buffer_resize_guard<detail::buffered_stream_storage>
- resize_guard(storage_);
- std::size_t previous_size = storage_.size();
- storage_.resize(storage_.capacity());
- storage_.resize(previous_size + next_layer_.read_some(buffer(
- storage_.data() + previous_size,
- storage_.size() - previous_size)));
- resize_guard.commit();
- return storage_.size() - previous_size;
- }
+ std::size_t fill();
/// Fill the buffer with some data. Returns the number of bytes placed in the
/// buffer as a result of the operation, or 0 if an error occurred.
- std::size_t fill(boost::system::error_code& ec)
- {
- detail::buffer_resize_guard<detail::buffered_stream_storage>
- resize_guard(storage_);
- std::size_t previous_size = storage_.size();
- storage_.resize(storage_.capacity());
- storage_.resize(previous_size + next_layer_.read_some(buffer(
- storage_.data() + previous_size,
- storage_.size() - previous_size),
- ec));
- resize_guard.commit();
- return storage_.size() - previous_size;
- }
-
- template <typename ReadHandler>
- class fill_handler
- {
- public:
- fill_handler(boost::asio::io_service& io_service,
- detail::buffered_stream_storage& storage,
- std::size_t previous_size, ReadHandler handler)
- : io_service_(io_service),
- storage_(storage),
- previous_size_(previous_size),
- handler_(handler)
- {
- }
-
- void operator()(const boost::system::error_code& ec,
- std::size_t bytes_transferred)
- {
- storage_.resize(previous_size_ + bytes_transferred);
- io_service_.dispatch(detail::bind_handler(
- handler_, ec, bytes_transferred));
- }
-
- private:
- boost::asio::io_service& io_service_;
- detail::buffered_stream_storage& storage_;
- std::size_t previous_size_;
- ReadHandler handler_;
- };
+ std::size_t fill(boost::system::error_code& ec);
/// Start an asynchronous fill.
template <typename ReadHandler>
- void async_fill(ReadHandler handler)
- {
- std::size_t previous_size = storage_.size();
- storage_.resize(storage_.capacity());
- next_layer_.async_read_some(
- buffer(
- storage_.data() + previous_size,
- storage_.size() - previous_size),
- fill_handler<ReadHandler>(get_io_service(),
- storage_, previous_size, handler));
- }
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (boost::system::error_code, std::size_t))
+ async_fill(BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
/// Read some data from the stream. Returns the number of bytes read. Throws
/// an exception on failure.
template <typename MutableBufferSequence>
- std::size_t read_some(const MutableBufferSequence& buffers)
- {
- if (boost::asio::buffer_size(buffers) == 0)
- return 0;
-
- if (storage_.empty())
- fill();
-
- return copy(buffers);
- }
+ std::size_t read_some(const MutableBufferSequence& buffers);
/// Read some data from the stream. Returns the number of bytes read or 0 if
/// an error occurred.
template <typename MutableBufferSequence>
std::size_t read_some(const MutableBufferSequence& buffers,
- boost::system::error_code& ec)
- {
- ec = boost::system::error_code();
-
- if (boost::asio::buffer_size(buffers) == 0)
- return 0;
-
- if (storage_.empty() && !fill(ec))
- return 0;
-
- return copy(buffers);
- }
-
- template <typename MutableBufferSequence, typename ReadHandler>
- class read_some_handler
- {
- public:
- read_some_handler(boost::asio::io_service& io_service,
- detail::buffered_stream_storage& storage,
- const MutableBufferSequence& buffers, ReadHandler handler)
- : io_service_(io_service),
- storage_(storage),
- buffers_(buffers),
- handler_(handler)
- {
- }
-
- void operator()(const boost::system::error_code& ec, std::size_t)
- {
- if (ec || storage_.empty())
- {
- std::size_t length = 0;
- io_service_.dispatch(detail::bind_handler(handler_, ec, length));
- }
- else
- {
- std::size_t bytes_copied = boost::asio::buffer_copy(
- buffers_, storage_.data(), storage_.size());
- storage_.consume(bytes_copied);
- io_service_.dispatch(detail::bind_handler(handler_, ec, bytes_copied));
- }
- }
-
- private:
- boost::asio::io_service& io_service_;
- detail::buffered_stream_storage& storage_;
- MutableBufferSequence buffers_;
- ReadHandler handler_;
- };
+ boost::system::error_code& ec);
/// Start an asynchronous read. The buffer into which the data will be read
/// must be valid for the lifetime of the asynchronous operation.
template <typename MutableBufferSequence, typename ReadHandler>
- void async_read_some(const MutableBufferSequence& buffers,
- ReadHandler handler)
- {
- if (boost::asio::buffer_size(buffers) == 0)
- {
- get_io_service().post(detail::bind_handler(
- handler, boost::system::error_code(), 0));
- }
- else if (storage_.empty())
- {
- async_fill(read_some_handler<MutableBufferSequence, ReadHandler>(
- get_io_service(), storage_, buffers, handler));
- }
- else
- {
- std::size_t length = copy(buffers);
- get_io_service().post(detail::bind_handler(
- handler, boost::system::error_code(), length));
- }
- }
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (boost::system::error_code, std::size_t))
+ async_read_some(const MutableBufferSequence& buffers,
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
/// Peek at the incoming data on the stream. Returns the number of bytes read.
/// Throws an exception on failure.
template <typename MutableBufferSequence>
- std::size_t peek(const MutableBufferSequence& buffers)
- {
- if (storage_.empty())
- fill();
- return peek_copy(buffers);
- }
+ std::size_t peek(const MutableBufferSequence& buffers);
/// Peek at the incoming data on the stream. Returns the number of bytes read,
/// or 0 if an error occurred.
template <typename MutableBufferSequence>
std::size_t peek(const MutableBufferSequence& buffers,
- boost::system::error_code& ec)
- {
- ec = boost::system::error_code();
- if (storage_.empty() && !fill(ec))
- return 0;
- return peek_copy(buffers);
- }
+ boost::system::error_code& ec);
/// Determine the amount of data that may be read without blocking.
std::size_t in_avail()
@@ -374,4 +241,6 @@ private:
#include <boost/asio/detail/pop_options.hpp>
+#include <boost/asio/impl/buffered_read_stream.hpp>
+
#endif // BOOST_ASIO_BUFFERED_READ_STREAM_HPP
diff --git a/3party/boost/boost/asio/buffered_read_stream_fwd.hpp b/3party/boost/boost/asio/buffered_read_stream_fwd.hpp
index 6d518e1ab6..0f8a59e0b8 100644
--- a/3party/boost/boost/asio/buffered_read_stream_fwd.hpp
+++ b/3party/boost/boost/asio/buffered_read_stream_fwd.hpp
@@ -2,7 +2,7 @@
// buffered_read_stream_fwd.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/buffered_stream.hpp b/3party/boost/boost/asio/buffered_stream.hpp
index 19d40f11f1..b9ca771002 100644
--- a/3party/boost/boost/asio/buffered_stream.hpp
+++ b/3party/boost/boost/asio/buffered_stream.hpp
@@ -2,7 +2,7 @@
// buffered_stream.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,6 +17,7 @@
#include <boost/asio/detail/config.hpp>
#include <cstddef>
+#include <boost/asio/async_result.hpp>
#include <boost/asio/buffered_read_stream.hpp>
#include <boost/asio/buffered_write_stream.hpp>
#include <boost/asio/buffered_stream_fwd.hpp>
@@ -123,9 +124,12 @@ public:
/// Start an asynchronous flush.
template <typename WriteHandler>
- void async_flush(WriteHandler handler)
+ BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (boost::system::error_code, std::size_t))
+ async_flush(BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
{
- return stream_impl_.next_layer().async_flush(handler);
+ return stream_impl_.next_layer().async_flush(
+ BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
}
/// Write the given data to the stream. Returns the number of bytes written.
@@ -148,10 +152,13 @@ public:
/// Start an asynchronous write. The data being written must be valid for the
/// lifetime of the asynchronous operation.
template <typename ConstBufferSequence, typename WriteHandler>
- void async_write_some(const ConstBufferSequence& buffers,
- WriteHandler handler)
+ BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (boost::system::error_code, std::size_t))
+ async_write_some(const ConstBufferSequence& buffers,
+ BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
{
- stream_impl_.async_write_some(buffers, handler);
+ return stream_impl_.async_write_some(buffers,
+ BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
}
/// Fill the buffer with some data. Returns the number of bytes placed in the
@@ -170,9 +177,11 @@ public:
/// Start an asynchronous fill.
template <typename ReadHandler>
- void async_fill(ReadHandler handler)
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (boost::system::error_code, std::size_t))
+ async_fill(BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
{
- stream_impl_.async_fill(handler);
+ return stream_impl_.async_fill(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
}
/// Read some data from the stream. Returns the number of bytes read. Throws
@@ -195,10 +204,13 @@ public:
/// Start an asynchronous read. The buffer into which the data will be read
/// must be valid for the lifetime of the asynchronous operation.
template <typename MutableBufferSequence, typename ReadHandler>
- void async_read_some(const MutableBufferSequence& buffers,
- ReadHandler handler)
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (boost::system::error_code, std::size_t))
+ async_read_some(const MutableBufferSequence& buffers,
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
{
- stream_impl_.async_read_some(buffers, handler);
+ return stream_impl_.async_read_some(buffers,
+ BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
}
/// Peek at the incoming data on the stream. Returns the number of bytes read.
diff --git a/3party/boost/boost/asio/buffered_stream_fwd.hpp b/3party/boost/boost/asio/buffered_stream_fwd.hpp
index b4b85106c1..d51b3d1ac6 100644
--- a/3party/boost/boost/asio/buffered_stream_fwd.hpp
+++ b/3party/boost/boost/asio/buffered_stream_fwd.hpp
@@ -2,7 +2,7 @@
// buffered_stream_fwd.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/buffered_write_stream.hpp b/3party/boost/boost/asio/buffered_write_stream.hpp
index e909a95b8b..d7bf68c4a7 100644
--- a/3party/boost/boost/asio/buffered_write_stream.hpp
+++ b/3party/boost/boost/asio/buffered_write_stream.hpp
@@ -2,7 +2,7 @@
// buffered_write_stream.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -118,156 +118,37 @@ public:
/// Flush all data from the buffer to the next layer. Returns the number of
/// bytes written to the next layer on the last write operation. Throws an
/// exception on failure.
- std::size_t flush()
- {
- std::size_t bytes_written = write(next_layer_,
- buffer(storage_.data(), storage_.size()));
- storage_.consume(bytes_written);
- return bytes_written;
- }
+ std::size_t flush();
/// Flush all data from the buffer to the next layer. Returns the number of
/// bytes written to the next layer on the last write operation, or 0 if an
/// error occurred.
- std::size_t flush(boost::system::error_code& ec)
- {
- std::size_t bytes_written = write(next_layer_,
- buffer(storage_.data(), storage_.size()),
- transfer_all(), ec);
- storage_.consume(bytes_written);
- return bytes_written;
- }
-
- template <typename WriteHandler>
- class flush_handler
- {
- public:
- flush_handler(boost::asio::io_service& io_service,
- detail::buffered_stream_storage& storage, WriteHandler handler)
- : io_service_(io_service),
- storage_(storage),
- handler_(handler)
- {
- }
-
- void operator()(const boost::system::error_code& ec,
- std::size_t bytes_written)
- {
- storage_.consume(bytes_written);
- io_service_.dispatch(detail::bind_handler(handler_, ec, bytes_written));
- }
-
- private:
- boost::asio::io_service& io_service_;
- detail::buffered_stream_storage& storage_;
- WriteHandler handler_;
- };
+ std::size_t flush(boost::system::error_code& ec);
/// Start an asynchronous flush.
template <typename WriteHandler>
- void async_flush(WriteHandler handler)
- {
- async_write(next_layer_, buffer(storage_.data(), storage_.size()),
- flush_handler<WriteHandler>(get_io_service(), storage_, handler));
- }
+ BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (boost::system::error_code, std::size_t))
+ async_flush(BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
/// Write the given data to the stream. Returns the number of bytes written.
/// Throws an exception on failure.
template <typename ConstBufferSequence>
- std::size_t write_some(const ConstBufferSequence& buffers)
- {
- if (boost::asio::buffer_size(buffers) == 0)
- return 0;
-
- if (storage_.size() == storage_.capacity())
- flush();
-
- return copy(buffers);
- }
+ std::size_t write_some(const ConstBufferSequence& buffers);
/// Write the given data to the stream. Returns the number of bytes written,
/// or 0 if an error occurred and the error handler did not throw.
template <typename ConstBufferSequence>
std::size_t write_some(const ConstBufferSequence& buffers,
- boost::system::error_code& ec)
- {
- ec = boost::system::error_code();
-
- if (boost::asio::buffer_size(buffers) == 0)
- return 0;
-
- if (storage_.size() == storage_.capacity() && !flush(ec))
- return 0;
-
- return copy(buffers);
- }
-
- template <typename ConstBufferSequence, typename WriteHandler>
- class write_some_handler
- {
- public:
- write_some_handler(boost::asio::io_service& io_service,
- detail::buffered_stream_storage& storage,
- const ConstBufferSequence& buffers, WriteHandler handler)
- : io_service_(io_service),
- storage_(storage),
- buffers_(buffers),
- handler_(handler)
- {
- }
-
- void operator()(const boost::system::error_code& ec, std::size_t)
- {
- if (ec)
- {
- std::size_t length = 0;
- io_service_.dispatch(detail::bind_handler(handler_, ec, length));
- }
- else
- {
- std::size_t orig_size = storage_.size();
- std::size_t space_avail = storage_.capacity() - orig_size;
- std::size_t bytes_avail = boost::asio::buffer_size(buffers_);
- std::size_t length = bytes_avail < space_avail
- ? bytes_avail : space_avail;
- storage_.resize(orig_size + length);
- std::size_t bytes_copied = boost::asio::buffer_copy(
- storage_.data() + orig_size, buffers_, length);
-
- io_service_.dispatch(detail::bind_handler(handler_, ec, bytes_copied));
- }
- }
-
- private:
- boost::asio::io_service& io_service_;
- detail::buffered_stream_storage& storage_;
- ConstBufferSequence buffers_;
- WriteHandler handler_;
- };
+ boost::system::error_code& ec);
/// Start an asynchronous write. The data being written must be valid for the
/// lifetime of the asynchronous operation.
template <typename ConstBufferSequence, typename WriteHandler>
- void async_write_some(const ConstBufferSequence& buffers,
- WriteHandler handler)
- {
- if (boost::asio::buffer_size(buffers) == 0)
- {
- get_io_service().post(detail::bind_handler(
- handler, boost::system::error_code(), 0));
- }
- else if (storage_.size() == storage_.capacity())
- {
- async_flush(write_some_handler<ConstBufferSequence, WriteHandler>(
- get_io_service(), storage_, buffers, handler));
- }
- else
- {
- std::size_t bytes_copied = copy(buffers);
- get_io_service().post(detail::bind_handler(
- handler, boost::system::error_code(), bytes_copied));
- }
- }
+ BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (boost::system::error_code, std::size_t))
+ async_write_some(const ConstBufferSequence& buffers,
+ BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
/// Read some data from the stream. Returns the number of bytes read. Throws
/// an exception on failure.
@@ -289,10 +170,20 @@ public:
/// Start an asynchronous read. The buffer into which the data will be read
/// must be valid for the lifetime of the asynchronous operation.
template <typename MutableBufferSequence, typename ReadHandler>
- void async_read_some(const MutableBufferSequence& buffers,
- ReadHandler handler)
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (boost::system::error_code, std::size_t))
+ async_read_some(const MutableBufferSequence& buffers,
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
{
- next_layer_.async_read_some(buffers, handler);
+ detail::async_result_init<
+ ReadHandler, void (boost::system::error_code, std::size_t)> init(
+ BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+ next_layer_.async_read_some(buffers,
+ BOOST_ASIO_MOVE_CAST(BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+ void (boost::system::error_code, std::size_t)))(init.handler));
+
+ return init.result.get();
}
/// Peek at the incoming data on the stream. Returns the number of bytes read.
@@ -328,16 +219,7 @@ private:
/// Copy data into the internal buffer from the specified source buffer.
/// Returns the number of bytes copied.
template <typename ConstBufferSequence>
- std::size_t copy(const ConstBufferSequence& buffers)
- {
- std::size_t orig_size = storage_.size();
- std::size_t space_avail = storage_.capacity() - orig_size;
- std::size_t bytes_avail = boost::asio::buffer_size(buffers);
- std::size_t length = bytes_avail < space_avail ? bytes_avail : space_avail;
- storage_.resize(orig_size + length);
- return boost::asio::buffer_copy(
- storage_.data() + orig_size, buffers, length);
- }
+ std::size_t copy(const ConstBufferSequence& buffers);
/// The next layer.
Stream next_layer_;
@@ -351,4 +233,6 @@ private:
#include <boost/asio/detail/pop_options.hpp>
+#include <boost/asio/impl/buffered_write_stream.hpp>
+
#endif // BOOST_ASIO_BUFFERED_WRITE_STREAM_HPP
diff --git a/3party/boost/boost/asio/buffered_write_stream_fwd.hpp b/3party/boost/boost/asio/buffered_write_stream_fwd.hpp
index adc07b95a4..3b83cdffb1 100644
--- a/3party/boost/boost/asio/buffered_write_stream_fwd.hpp
+++ b/3party/boost/boost/asio/buffered_write_stream_fwd.hpp
@@ -2,7 +2,7 @@
// buffered_write_stream_fwd.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/buffers_iterator.hpp b/3party/boost/boost/asio/buffers_iterator.hpp
index 2e6fad861c..877f9f11cf 100644
--- a/3party/boost/boost/asio/buffers_iterator.hpp
+++ b/3party/boost/boost/asio/buffers_iterator.hpp
@@ -2,7 +2,7 @@
// buffers_iterator.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/completion_condition.hpp b/3party/boost/boost/asio/completion_condition.hpp
index ec91726736..ed4f4fb852 100644
--- a/3party/boost/boost/asio/completion_condition.hpp
+++ b/3party/boost/boost/asio/completion_condition.hpp
@@ -2,7 +2,7 @@
// completion_condition.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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 @@ namespace asio {
namespace detail {
// The default maximum number of bytes to transfer in a single operation.
-enum { default_max_transfer_size = 65536 };
+enum default_max_transfer_size_t { default_max_transfer_size = 65536 };
// Adapt result of old-style completion conditions (which had a bool result
// where true indicated that the operation was complete).
diff --git a/3party/boost/boost/asio/connect.hpp b/3party/boost/boost/asio/connect.hpp
index 332cf636fa..03c9fe798b 100644
--- a/3party/boost/boost/asio/connect.hpp
+++ b/3party/boost/boost/asio/connect.hpp
@@ -2,7 +2,7 @@
// connect.hpp
// ~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/coroutine.hpp b/3party/boost/boost/asio/coroutine.hpp
index 76be7067d9..c01f66b115 100644
--- a/3party/boost/boost/asio/coroutine.hpp
+++ b/3party/boost/boost/asio/coroutine.hpp
@@ -2,7 +2,7 @@
// coroutine.hpp
// ~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/datagram_socket_service.hpp b/3party/boost/boost/asio/datagram_socket_service.hpp
index c3eb024f46..91c8aa1d5d 100644
--- a/3party/boost/boost/asio/datagram_socket_service.hpp
+++ b/3party/boost/boost/asio/datagram_socket_service.hpp
@@ -2,7 +2,7 @@
// datagram_socket_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +22,9 @@
#include <boost/asio/error.hpp>
#include <boost/asio/io_service.hpp>
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_socket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
# include <boost/asio/detail/win_iocp_socket_service.hpp>
#else
# include <boost/asio/detail/reactive_socket_service.hpp>
@@ -56,7 +58,9 @@ public:
private:
// The type of the platform-specific implementation.
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ typedef detail::null_socket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
#else
typedef detail::reactive_socket_service<Protocol> service_impl_type;
@@ -138,7 +142,7 @@ public:
boost::system::error_code open(implementation_type& impl,
const protocol_type& protocol, boost::system::error_code& ec)
{
- if (protocol.type() == SOCK_DGRAM)
+ if (protocol.type() == BOOST_ASIO_OS_DEF(SOCK_DGRAM))
service_impl_.open(impl, protocol, ec);
else
ec = boost::asio::error::invalid_argument;
diff --git a/3party/boost/boost/asio/deadline_timer.hpp b/3party/boost/boost/asio/deadline_timer.hpp
index 752b77a633..b78d3ced20 100644
--- a/3party/boost/boost/asio/deadline_timer.hpp
+++ b/3party/boost/boost/asio/deadline_timer.hpp
@@ -2,7 +2,7 @@
// deadline_timer.hpp
// ~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/deadline_timer_service.hpp b/3party/boost/boost/asio/deadline_timer_service.hpp
index ed637df6f7..ba7f00a66c 100644
--- a/3party/boost/boost/asio/deadline_timer_service.hpp
+++ b/3party/boost/boost/asio/deadline_timer_service.hpp
@@ -2,7 +2,7 @@
// deadline_timer_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/addressof.hpp b/3party/boost/boost/asio/detail/addressof.hpp
index 7e440144ea..7b473319cb 100644
--- a/3party/boost/boost/asio/detail/addressof.hpp
+++ b/3party/boost/boost/asio/detail/addressof.hpp
@@ -2,7 +2,7 @@
// detail/addressof.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/array.hpp b/3party/boost/boost/asio/detail/array.hpp
index dfd37f1e61..8909e24808 100644
--- a/3party/boost/boost/asio/detail/array.hpp
+++ b/3party/boost/boost/asio/detail/array.hpp
@@ -2,7 +2,7 @@
// detail/array.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/array_fwd.hpp b/3party/boost/boost/asio/detail/array_fwd.hpp
index e4410b89e2..219f45c2bc 100644
--- a/3party/boost/boost/asio/detail/array_fwd.hpp
+++ b/3party/boost/boost/asio/detail/array_fwd.hpp
@@ -2,7 +2,7 @@
// detail/array_fwd.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/assert.hpp b/3party/boost/boost/asio/detail/assert.hpp
index 157cd9cf57..b4498d1b01 100644
--- a/3party/boost/boost/asio/detail/assert.hpp
+++ b/3party/boost/boost/asio/detail/assert.hpp
@@ -2,7 +2,7 @@
// detail/assert.hpp
// ~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/atomic_count.hpp b/3party/boost/boost/asio/detail/atomic_count.hpp
index 540ecb4ab3..c39e926a0d 100644
--- a/3party/boost/boost/asio/detail/atomic_count.hpp
+++ b/3party/boost/boost/asio/detail/atomic_count.hpp
@@ -2,7 +2,7 @@
// detail/atomic_count.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/base_from_completion_cond.hpp b/3party/boost/boost/asio/detail/base_from_completion_cond.hpp
index 59d4d9e04d..07e24f094e 100644
--- a/3party/boost/boost/asio/detail/base_from_completion_cond.hpp
+++ b/3party/boost/boost/asio/detail/base_from_completion_cond.hpp
@@ -2,7 +2,7 @@
// detail/base_from_completion_cond.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/bind_handler.hpp b/3party/boost/boost/asio/detail/bind_handler.hpp
index 0e0d9bea6f..e8f488d003 100644
--- a/3party/boost/boost/asio/detail/bind_handler.hpp
+++ b/3party/boost/boost/asio/detail/bind_handler.hpp
@@ -2,7 +2,7 @@
// detail/bind_handler.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/buffer_resize_guard.hpp b/3party/boost/boost/asio/detail/buffer_resize_guard.hpp
index 656ff71ba8..56304e5b27 100644
--- a/3party/boost/boost/asio/detail/buffer_resize_guard.hpp
+++ b/3party/boost/boost/asio/detail/buffer_resize_guard.hpp
@@ -2,7 +2,7 @@
// detail/buffer_resize_guard.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/buffer_sequence_adapter.hpp b/3party/boost/boost/asio/detail/buffer_sequence_adapter.hpp
index edcce6dfbd..da81cbee7b 100644
--- a/3party/boost/boost/asio/detail/buffer_sequence_adapter.hpp
+++ b/3party/boost/boost/asio/detail/buffer_sequence_adapter.hpp
@@ -2,7 +2,7 @@
// detail/buffer_sequence_adapter.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +29,23 @@ namespace detail {
class buffer_sequence_adapter_base
{
protected:
-#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // The maximum number of buffers to support in a single operation.
+ enum { max_buffers = 1 };
+
+ typedef Windows::Storage::Streams::IBuffer^ native_buffer_type;
+
+ BOOST_ASIO_DECL static void init_native_buffer(
+ native_buffer_type& buf,
+ const boost::asio::mutable_buffer& buffer);
+
+ BOOST_ASIO_DECL static void init_native_buffer(
+ native_buffer_type& buf,
+ const boost::asio::const_buffer& buffer);
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+ // The maximum number of buffers to support in a single operation.
+ enum { max_buffers = 64 < max_iov_len ? 64 : max_iov_len };
+
typedef WSABUF native_buffer_type;
static void init_native_buffer(WSABUF& buf,
@@ -46,6 +62,9 @@ protected:
buf.len = static_cast<ULONG>(boost::asio::buffer_size(buffer));
}
#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+ // The maximum number of buffers to support in a single operation.
+ enum { max_buffers = 64 < max_iov_len ? 64 : max_iov_len };
+
typedef iovec native_buffer_type;
static void init_iov_base(void*& base, void* addr)
@@ -146,9 +165,6 @@ public:
}
private:
- // The maximum number of buffers to support in a single operation.
- enum { max_buffers = 64 < max_iov_len ? 64 : max_iov_len };
-
native_buffer_type buffers_[max_buffers];
std::size_t count_;
std::size_t total_buffer_size_;
@@ -362,4 +378,8 @@ private:
#include <boost/asio/detail/pop_options.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/buffer_sequence_adapter.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
#endif // BOOST_ASIO_DETAIL_BUFFER_SEQUENCE_ADAPTER_HPP
diff --git a/3party/boost/boost/asio/detail/buffered_stream_storage.hpp b/3party/boost/boost/asio/detail/buffered_stream_storage.hpp
index 7080cfade4..6f138d2e6a 100644
--- a/3party/boost/boost/asio/detail/buffered_stream_storage.hpp
+++ b/3party/boost/boost/asio/detail/buffered_stream_storage.hpp
@@ -2,7 +2,7 @@
// detail/buffered_stream_storage.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/call_stack.hpp b/3party/boost/boost/asio/detail/call_stack.hpp
index b5ac5fb9bc..62aeb40a6a 100644
--- a/3party/boost/boost/asio/detail/call_stack.hpp
+++ b/3party/boost/boost/asio/detail/call_stack.hpp
@@ -2,7 +2,7 @@
// detail/call_stack.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/chrono_time_traits.hpp b/3party/boost/boost/asio/detail/chrono_time_traits.hpp
index 1b58d2bb04..6b81e5d794 100644
--- a/3party/boost/boost/asio/detail/chrono_time_traits.hpp
+++ b/3party/boost/boost/asio/detail/chrono_time_traits.hpp
@@ -2,7 +2,7 @@
// detail/chrono_time_traits.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +23,13 @@ namespace boost {
namespace asio {
namespace detail {
+// Helper template to compute the greatest common divisor.
+template <int64_t v1, int64_t v2>
+struct gcd { enum { value = gcd<v2, v1 % v2>::value }; };
+
+template <int64_t v1>
+struct gcd<v1, 0> { enum { value = v1 }; };
+
// Adapts std::chrono clocks for use with a deadline timer.
template <typename Clock, typename WaitTraits>
struct chrono_time_traits
@@ -147,8 +154,14 @@ struct chrono_time_traits
template <int64_t Num, int64_t Den>
int64_t duration_cast() const
{
- const int64_t num = period_type::num * Den;
- const int64_t den = period_type::den * Num;
+ const int64_t num1 = period_type::num / gcd<period_type::num, Num>::value;
+ const int64_t num2 = Num / gcd<period_type::num, Num>::value;
+
+ const int64_t den1 = period_type::den / gcd<period_type::den, Den>::value;
+ const int64_t den2 = Den / gcd<period_type::den, Den>::value;
+
+ const int64_t num = num1 * den2;
+ const int64_t den = num2 * den1;
if (num == 1 && den == 1)
return ticks();
diff --git a/3party/boost/boost/asio/detail/completion_handler.hpp b/3party/boost/boost/asio/detail/completion_handler.hpp
index 98b7a2032c..833f5a35be 100644
--- a/3party/boost/boost/asio/detail/completion_handler.hpp
+++ b/3party/boost/boost/asio/detail/completion_handler.hpp
@@ -2,7 +2,7 @@
// detail/completion_handler.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/config.hpp b/3party/boost/boost/asio/detail/config.hpp
index 6387558a4d..453f04d7a6 100644
--- a/3party/boost/boost/asio/detail/config.hpp
+++ b/3party/boost/boost/asio/detail/config.hpp
@@ -2,7 +2,7 @@
// detail/config.hpp
// ~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +97,11 @@
# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_MOVE 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
# endif // !defined(BOOST_ASIO_DISABLE_MOVE)
#endif // !defined(BOOST_ASIO_HAS_MOVE)
@@ -152,6 +157,31 @@
# endif // !defined(BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES)
#endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+// Support constexpr on compilers known to allow it.
+#if !defined(BOOST_ASIO_HAS_CONSTEXPR)
+# if !defined(BOOST_ASIO_DISABLE_CONSTEXPR)
+# if defined(__clang__)
+# if __has_feature(__cxx_constexpr__)
+# define BOOST_ASIO_HAS_CONSTEXPR 1
+# endif // __has_feature(__cxx_constexr__)
+# endif // defined(__clang__)
+# if defined(__GNUC__)
+# if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
+# if defined(__GXX_EXPERIMENTAL_CXX0X__)
+# define BOOST_ASIO_HAS_CONSTEXPR 1
+# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
+# endif // defined(__GNUC__)
+# endif // !defined(BOOST_ASIO_DISABLE_CONSTEXPR)
+#endif // !defined(BOOST_ASIO_HAS_CONSTEXPR)
+#if !defined(BOOST_ASIO_CONSTEXPR)
+# if defined(BOOST_ASIO_HAS_CONSTEXPR)
+# define BOOST_ASIO_CONSTEXPR constexpr
+# else // defined(BOOST_ASIO_HAS_CONSTEXPR)
+# define BOOST_ASIO_CONSTEXPR
+# endif // defined(BOOST_ASIO_HAS_CONSTEXPR)
+#endif // !defined(BOOST_ASIO_CONSTEXPR)
+
// Standard library support for system errors.
# if !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR)
# if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
@@ -164,6 +194,11 @@
# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
# endif // !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR)
// Compliant C++11 compilers put noexcept specifiers on error_category members.
@@ -241,6 +276,11 @@
# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_STD_ATOMIC 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
# endif // !defined(BOOST_ASIO_DISABLE_STD_ATOMIC)
#endif // !defined(BOOST_ASIO_HAS_STD_ATOMIC)
@@ -262,6 +302,11 @@
# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_STD_CHRONO 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
# endif // !defined(BOOST_ASIO_DISABLE_STD_CHRONO)
#endif // !defined(BOOST_ASIO_HAS_STD_CHRONO)
@@ -294,6 +339,11 @@
# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_STD_ADDRESSOF 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
# endif // !defined(BOOST_ASIO_DISABLE_STD_ADDRESSOF)
#endif // !defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
@@ -310,6 +360,11 @@
# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_STD_FUNCTION 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
# endif // !defined(BOOST_ASIO_DISABLE_STD_FUNCTION)
#endif // !defined(BOOST_ASIO_HAS_STD_FUNCTION)
@@ -326,6 +381,11 @@
# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
# endif // !defined(BOOST_ASIO_DISABLE_STD_TYPE_TRAITS)
#endif // !defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS)
@@ -342,16 +402,75 @@
# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_CSTDINT 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
# endif // !defined(BOOST_ASIO_DISABLE_CSTDINT)
#endif // !defined(BOOST_ASIO_HAS_CSTDINT)
-// Windows target.
+// Standard library support for the thread class.
+#if !defined(BOOST_ASIO_HAS_STD_THREAD)
+# if !defined(BOOST_ASIO_DISABLE_STD_THREAD)
+# if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+# define BOOST_ASIO_HAS_STD_THREAD 1
+# endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+# if defined(__GNUC__)
+# if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+# if defined(__GXX_EXPERIMENTAL_CXX0X__)
+# define BOOST_ASIO_HAS_STD_THREAD 1
+# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_STD_THREAD 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_THREAD)
+#endif // !defined(BOOST_ASIO_HAS_STD_THREAD)
+
+// Standard library support for the mutex and condition variable classes.
+#if !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+# if !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR)
+# if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+# define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
+# endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+# if defined(__GNUC__)
+# if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+# if defined(__GXX_EXPERIMENTAL_CXX0X__)
+# define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
+# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR)
+#endif // !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+// WinRT target.
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# if defined(__cplusplus_winrt)
+# include <winapifamily.h>
+# if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP)
+# define BOOST_ASIO_WINDOWS_RUNTIME 1
+# endif // WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP)
+# endif // defined(__cplusplus_winrt)
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+// Windows target. Excludes WinRT.
#if !defined(BOOST_ASIO_WINDOWS)
-# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
-# define BOOST_ASIO_WINDOWS 1
-# elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
-# define BOOST_ASIO_WINDOWS 1
-# endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
+# if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
+# define BOOST_ASIO_WINDOWS 1
+# elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
+# define BOOST_ASIO_WINDOWS 1
+# endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
+# endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#endif // !defined(BOOST_ASIO_WINDOWS)
// Windows: target OS version.
@@ -479,14 +598,18 @@
// Serial ports.
#if !defined(BOOST_ASIO_HAS_SERIAL_PORT)
# if defined(BOOST_ASIO_HAS_IOCP) \
- || !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+ || !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
# if !defined(__SYMBIAN32__)
# if !defined(BOOST_ASIO_DISABLE_SERIAL_PORT)
# define BOOST_ASIO_HAS_SERIAL_PORT 1
# endif // !defined(BOOST_ASIO_DISABLE_SERIAL_PORT)
# endif // !defined(__SYMBIAN32__)
# endif // defined(BOOST_ASIO_HAS_IOCP)
- // || !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+ // || !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
#endif // !defined(BOOST_ASIO_HAS_SERIAL_PORT)
// Windows: stream handles.
@@ -530,27 +653,39 @@
// POSIX: stream-oriented file descriptors.
#if !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
# if !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
-# if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+# if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
# define BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR 1
-# endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+# endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
# endif // !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
#endif // !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
// UNIX domain sockets.
#if !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
# if !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS)
-# if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+# if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
# define BOOST_ASIO_HAS_LOCAL_SOCKETS 1
-# endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+# endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
# endif // !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS)
#endif // !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
// Can use sigaction() instead of signal().
#if !defined(BOOST_ASIO_HAS_SIGACTION)
# if !defined(BOOST_ASIO_DISABLE_SIGACTION)
-# if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+# if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
# define BOOST_ASIO_HAS_SIGACTION 1
-# endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+# endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
# endif // !defined(BOOST_ASIO_DISABLE_SIGACTION)
#endif // !defined(BOOST_ASIO_HAS_SIGACTION)
@@ -563,6 +698,19 @@
# endif // !defined(BOOST_ASIO_DISABLE_SIGNAL)
#endif // !defined(BOOST_ASIO_HAS_SIGNAL)
+// Can use getaddrinfo() and getnameinfo().
+#if !defined(BOOST_ASIO_HAS_GETADDRINFO)
+# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
+# define BOOST_ASIO_HAS_GETADDRINFO 1
+# elif defined(UNDER_CE)
+# define BOOST_ASIO_HAS_GETADDRINFO 1
+# endif // defined(UNDER_CE)
+# elif !(defined(__MACH__) && defined(__APPLE__))
+# define BOOST_ASIO_HAS_GETADDRINFO 1
+# endif // !(defined(__MACH__) && defined(__APPLE__))
+#endif // !defined(BOOST_ASIO_HAS_GETADDRINFO)
+
// Whether standard iostreams are disabled.
#if !defined(BOOST_ASIO_NO_IOSTREAM)
# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_IOSTREAM)
@@ -728,13 +876,23 @@
# if ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)
# if !defined(__INTEL_COMPILER) && !defined(__ICL)
# define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1
+# define BOOST_ASIO_THREAD_KEYWORD __thread
# elif defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100)
# define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1
# endif // defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100)
# endif // ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)
# endif // defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
# endif // defined(__linux__)
+# if defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# if (_MSC_VER >= 1700)
+# define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1
+# define BOOST_ASIO_THREAD_KEYWORD __declspec(thread)
+# endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME)
#endif // !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION)
+#if !defined(BOOST_ASIO_THREAD_KEYWORD)
+# define BOOST_ASIO_THREAD_KEYWORD __thread
+#endif // !defined(BOOST_ASIO_THREAD_KEYWORD)
// Support for POSIX ssize_t typedef.
#if !defined(BOOST_ASIO_DISABLE_SSIZE_T)
diff --git a/3party/boost/boost/asio/detail/consuming_buffers.hpp b/3party/boost/boost/asio/detail/consuming_buffers.hpp
index 2af56e9720..8bd36e4128 100644
--- a/3party/boost/boost/asio/detail/consuming_buffers.hpp
+++ b/3party/boost/boost/asio/detail/consuming_buffers.hpp
@@ -2,7 +2,7 @@
// detail/consuming_buffers.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/cstdint.hpp b/3party/boost/boost/asio/detail/cstdint.hpp
index 561cece44b..ad611e982a 100644
--- a/3party/boost/boost/asio/detail/cstdint.hpp
+++ b/3party/boost/boost/asio/detail/cstdint.hpp
@@ -2,7 +2,7 @@
// detail/cstdint.hpp
// ~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/date_time_fwd.hpp b/3party/boost/boost/asio/detail/date_time_fwd.hpp
index d17deb6b06..1c0bcaf27f 100644
--- a/3party/boost/boost/asio/detail/date_time_fwd.hpp
+++ b/3party/boost/boost/asio/detail/date_time_fwd.hpp
@@ -2,7 +2,7 @@
// detail/date_time_fwd.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/deadline_timer_service.hpp b/3party/boost/boost/asio/detail/deadline_timer_service.hpp
index 3be332c139..52e26397eb 100644
--- a/3party/boost/boost/asio/detail/deadline_timer_service.hpp
+++ b/3party/boost/boost/asio/detail/deadline_timer_service.hpp
@@ -2,7 +2,7 @@
// detail/deadline_timer_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -30,6 +30,11 @@
#include <boost/asio/detail/wait_handler.hpp>
#include <boost/asio/detail/wait_op.hpp>
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <chrono>
+# include <thread>
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#include <boost/asio/detail/push_options.hpp>
namespace boost {
@@ -195,10 +200,17 @@ private:
template <typename Duration>
void do_wait(const Duration& timeout, boost::system::error_code& ec)
{
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ std::this_thread::sleep_for(
+ std::chrono::seconds(timeout.total_seconds())
+ + std::chrono::microseconds(timeout.total_microseconds()));
+ ec = boost::system::error_code();
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
::timeval tv;
tv.tv_sec = timeout.total_seconds();
tv.tv_usec = timeout.total_microseconds() % 1000000;
socket_ops::select(0, 0, 0, 0, &tv, ec);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
}
// The queue of timers.
diff --git a/3party/boost/boost/asio/detail/dependent_type.hpp b/3party/boost/boost/asio/detail/dependent_type.hpp
index d2fb0d6f11..a9e7feddcc 100644
--- a/3party/boost/boost/asio/detail/dependent_type.hpp
+++ b/3party/boost/boost/asio/detail/dependent_type.hpp
@@ -2,7 +2,7 @@
// detail/dependent_type.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/descriptor_ops.hpp b/3party/boost/boost/asio/detail/descriptor_ops.hpp
index b8edd5b6bd..b9fbadc7fe 100644
--- a/3party/boost/boost/asio/detail/descriptor_ops.hpp
+++ b/3party/boost/boost/asio/detail/descriptor_ops.hpp
@@ -2,7 +2,7 @@
// detail/descriptor_ops.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,7 +17,9 @@
#include <boost/asio/detail/config.hpp>
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
#include <cstddef>
#include <boost/system/error_code.hpp>
@@ -110,6 +112,8 @@ BOOST_ASIO_DECL int poll_write(int d,
# include <boost/asio/detail/impl/descriptor_ops.ipp>
#endif // defined(BOOST_ASIO_HEADER_ONLY)
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
#endif // BOOST_ASIO_DETAIL_DESCRIPTOR_OPS_HPP
diff --git a/3party/boost/boost/asio/detail/descriptor_read_op.hpp b/3party/boost/boost/asio/detail/descriptor_read_op.hpp
index ea2c107761..6993bd6cdd 100644
--- a/3party/boost/boost/asio/detail/descriptor_read_op.hpp
+++ b/3party/boost/boost/asio/detail/descriptor_read_op.hpp
@@ -2,7 +2,7 @@
// detail/descriptor_read_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/descriptor_write_op.hpp b/3party/boost/boost/asio/detail/descriptor_write_op.hpp
index 2719dfca95..ec83eef18e 100644
--- a/3party/boost/boost/asio/detail/descriptor_write_op.hpp
+++ b/3party/boost/boost/asio/detail/descriptor_write_op.hpp
@@ -2,7 +2,7 @@
// detail/descriptor_write_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/dev_poll_reactor.hpp b/3party/boost/boost/asio/detail/dev_poll_reactor.hpp
index b82c4d8e52..379e390d46 100644
--- a/3party/boost/boost/asio/detail/dev_poll_reactor.hpp
+++ b/3party/boost/boost/asio/detail/dev_poll_reactor.hpp
@@ -2,7 +2,7 @@
// detail/dev_poll_reactor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +22,6 @@
#include <cstddef>
#include <vector>
#include <sys/devpoll.h>
-#include <boost/asio/detail/dev_poll_reactor_fwd.hpp>
#include <boost/asio/detail/hash_map.hpp>
#include <boost/asio/detail/limits.hpp>
#include <boost/asio/detail/mutex.hpp>
@@ -32,7 +31,6 @@
#include <boost/asio/detail/select_interrupter.hpp>
#include <boost/asio/detail/socket_types.hpp>
#include <boost/asio/detail/timer_queue_base.hpp>
-#include <boost/asio/detail/timer_queue_fwd.hpp>
#include <boost/asio/detail/timer_queue_set.hpp>
#include <boost/asio/detail/wait_op.hpp>
#include <boost/asio/io_service.hpp>
diff --git a/3party/boost/boost/asio/detail/dev_poll_reactor_fwd.hpp b/3party/boost/boost/asio/detail/dev_poll_reactor_fwd.hpp
deleted file mode 100644
index d3c10b9c41..0000000000
--- a/3party/boost/boost/asio/detail/dev_poll_reactor_fwd.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// detail/dev_poll_reactor_fwd.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// 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_ASIO_DETAIL_DEV_POLL_REACTOR_FWD_HPP
-#define BOOST_ASIO_DETAIL_DEV_POLL_REACTOR_FWD_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-
-#include <boost/asio/detail/config.hpp>
-
-#if defined(BOOST_ASIO_HAS_DEV_POLL)
-
-namespace boost {
-namespace asio {
-namespace detail {
-
-class dev_poll_reactor;
-
-} // namespace detail
-} // namespace asio
-} // namespace boost
-
-#endif // defined(BOOST_ASIO_HAS_DEV_POLL)
-
-#endif // BOOST_ASIO_DETAIL_DEV_POLL_REACTOR_FWD_HPP
diff --git a/3party/boost/boost/asio/detail/epoll_reactor.hpp b/3party/boost/boost/asio/detail/epoll_reactor.hpp
index 2a4f4c1d51..976da8a9ef 100644
--- a/3party/boost/boost/asio/detail/epoll_reactor.hpp
+++ b/3party/boost/boost/asio/detail/epoll_reactor.hpp
@@ -2,7 +2,7 @@
// detail/epoll_reactor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +21,6 @@
#include <boost/asio/io_service.hpp>
#include <boost/asio/detail/atomic_count.hpp>
-#include <boost/asio/detail/epoll_reactor_fwd.hpp>
#include <boost/asio/detail/limits.hpp>
#include <boost/asio/detail/mutex.hpp>
#include <boost/asio/detail/object_pool.hpp>
@@ -30,7 +29,6 @@
#include <boost/asio/detail/select_interrupter.hpp>
#include <boost/asio/detail/socket_types.hpp>
#include <boost/asio/detail/timer_queue_base.hpp>
-#include <boost/asio/detail/timer_queue_fwd.hpp>
#include <boost/asio/detail/timer_queue_set.hpp>
#include <boost/asio/detail/wait_op.hpp>
diff --git a/3party/boost/boost/asio/detail/epoll_reactor_fwd.hpp b/3party/boost/boost/asio/detail/epoll_reactor_fwd.hpp
deleted file mode 100644
index 392ab45596..0000000000
--- a/3party/boost/boost/asio/detail/epoll_reactor_fwd.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// detail/epoll_reactor_fwd.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// 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_ASIO_DETAIL_EPOLL_REACTOR_FWD_HPP
-#define BOOST_ASIO_DETAIL_EPOLL_REACTOR_FWD_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-
-#include <boost/asio/detail/config.hpp>
-
-#if defined(BOOST_ASIO_HAS_EPOLL)
-
-namespace boost {
-namespace asio {
-namespace detail {
-
-class epoll_reactor;
-
-} // namespace detail
-} // namespace asio
-} // namespace boost
-
-#endif // defined(BOOST_ASIO_HAS_EPOLL)
-
-#endif // BOOST_ASIO_DETAIL_EPOLL_REACTOR_FWD_HPP
diff --git a/3party/boost/boost/asio/detail/event.hpp b/3party/boost/boost/asio/detail/event.hpp
index 5668410bbb..a18affe371 100644
--- a/3party/boost/boost/asio/detail/event.hpp
+++ b/3party/boost/boost/asio/detail/event.hpp
@@ -2,7 +2,7 @@
// detail/event.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,8 +23,10 @@
# include <boost/asio/detail/win_event.hpp>
#elif defined(BOOST_ASIO_HAS_PTHREADS)
# include <boost/asio/detail/posix_event.hpp>
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+# include <boost/asio/detail/std_event.hpp>
#else
-# error Only Windows and POSIX are supported!
+# error Only Windows, POSIX and std::condition_variable are supported!
#endif
namespace boost {
@@ -37,6 +39,8 @@ typedef null_event event;
typedef win_event event;
#elif defined(BOOST_ASIO_HAS_PTHREADS)
typedef posix_event event;
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+typedef std_event event;
#endif
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/eventfd_select_interrupter.hpp b/3party/boost/boost/asio/detail/eventfd_select_interrupter.hpp
index 6ebc7cb7de..70123728fc 100644
--- a/3party/boost/boost/asio/detail/eventfd_select_interrupter.hpp
+++ b/3party/boost/boost/asio/detail/eventfd_select_interrupter.hpp
@@ -2,7 +2,7 @@
// detail/eventfd_select_interrupter.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Roelof Naude (roelof.naude at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/fd_set_adapter.hpp b/3party/boost/boost/asio/detail/fd_set_adapter.hpp
index 7e25b2fc4b..7aebdefe34 100644
--- a/3party/boost/boost/asio/detail/fd_set_adapter.hpp
+++ b/3party/boost/boost/asio/detail/fd_set_adapter.hpp
@@ -2,7 +2,7 @@
// detail/fd_set_adapter.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -16,6 +16,9 @@
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#include <boost/asio/detail/posix_fd_set_adapter.hpp>
#include <boost/asio/detail/win_fd_set_adapter.hpp>
@@ -33,4 +36,6 @@ typedef posix_fd_set_adapter fd_set_adapter;
} // namespace asio
} // namespace boost
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#endif // BOOST_ASIO_DETAIL_FD_SET_ADAPTER_HPP
diff --git a/3party/boost/boost/asio/detail/fenced_block.hpp b/3party/boost/boost/asio/detail/fenced_block.hpp
index 18a8ca1bf6..1ee26cf0ff 100644
--- a/3party/boost/boost/asio/detail/fenced_block.hpp
+++ b/3party/boost/boost/asio/detail/fenced_block.hpp
@@ -2,7 +2,7 @@
// detail/fenced_block.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/function.hpp b/3party/boost/boost/asio/detail/function.hpp
index 81bdb8c053..1edcb1bf46 100644
--- a/3party/boost/boost/asio/detail/function.hpp
+++ b/3party/boost/boost/asio/detail/function.hpp
@@ -2,7 +2,7 @@
// detail/function.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/gcc_arm_fenced_block.hpp b/3party/boost/boost/asio/detail/gcc_arm_fenced_block.hpp
index 4f03b5aeee..5d5fc5c9c4 100644
--- a/3party/boost/boost/asio/detail/gcc_arm_fenced_block.hpp
+++ b/3party/boost/boost/asio/detail/gcc_arm_fenced_block.hpp
@@ -2,7 +2,7 @@
// detail/gcc_arm_fenced_block.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/gcc_hppa_fenced_block.hpp b/3party/boost/boost/asio/detail/gcc_hppa_fenced_block.hpp
index c2d64a9b93..61ad4382d5 100644
--- a/3party/boost/boost/asio/detail/gcc_hppa_fenced_block.hpp
+++ b/3party/boost/boost/asio/detail/gcc_hppa_fenced_block.hpp
@@ -2,7 +2,7 @@
// detail/gcc_hppa_fenced_block.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/gcc_sync_fenced_block.hpp b/3party/boost/boost/asio/detail/gcc_sync_fenced_block.hpp
index dd31089b31..226cfa70e6 100644
--- a/3party/boost/boost/asio/detail/gcc_sync_fenced_block.hpp
+++ b/3party/boost/boost/asio/detail/gcc_sync_fenced_block.hpp
@@ -2,7 +2,7 @@
// detail/gcc_sync_fenced_block.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/gcc_x86_fenced_block.hpp b/3party/boost/boost/asio/detail/gcc_x86_fenced_block.hpp
index ff93845f2a..d39c693e52 100644
--- a/3party/boost/boost/asio/detail/gcc_x86_fenced_block.hpp
+++ b/3party/boost/boost/asio/detail/gcc_x86_fenced_block.hpp
@@ -2,7 +2,7 @@
// detail/gcc_x86_fenced_block.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,11 @@ private:
static void lbarrier()
{
#if defined(__SSE2__)
+# if (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
+ __builtin_ia32_lfence();
+# else // (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
__asm__ __volatile__ ("lfence" ::: "memory");
+# endif // (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
#else // defined(__SSE2__)
barrier();
#endif // defined(__SSE2__)
@@ -73,7 +77,11 @@ private:
static void sbarrier()
{
#if defined(__SSE2__)
+# if (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
+ __builtin_ia32_sfence();
+# else // (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
__asm__ __volatile__ ("sfence" ::: "memory");
+# endif // (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
#else // defined(__SSE2__)
barrier();
#endif // defined(__SSE2__)
diff --git a/3party/boost/boost/asio/detail/handler_alloc_helpers.hpp b/3party/boost/boost/asio/detail/handler_alloc_helpers.hpp
index 7e14b82473..dac3737c62 100644
--- a/3party/boost/boost/asio/detail/handler_alloc_helpers.hpp
+++ b/3party/boost/boost/asio/detail/handler_alloc_helpers.hpp
@@ -2,7 +2,7 @@
// detail/handler_alloc_helpers.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/handler_cont_helpers.hpp b/3party/boost/boost/asio/detail/handler_cont_helpers.hpp
index e5d9fc360c..e318a6ed98 100644
--- a/3party/boost/boost/asio/detail/handler_cont_helpers.hpp
+++ b/3party/boost/boost/asio/detail/handler_cont_helpers.hpp
@@ -2,7 +2,7 @@
// detail/handler_cont_helpers.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/handler_invoke_helpers.hpp b/3party/boost/boost/asio/detail/handler_invoke_helpers.hpp
index 7cf44144b9..ed276e5248 100644
--- a/3party/boost/boost/asio/detail/handler_invoke_helpers.hpp
+++ b/3party/boost/boost/asio/detail/handler_invoke_helpers.hpp
@@ -2,7 +2,7 @@
// detail/handler_invoke_helpers.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/handler_tracking.hpp b/3party/boost/boost/asio/detail/handler_tracking.hpp
index 8dccbb3fcd..9f31ddc923 100644
--- a/3party/boost/boost/asio/detail/handler_tracking.hpp
+++ b/3party/boost/boost/asio/detail/handler_tracking.hpp
@@ -2,7 +2,7 @@
// detail/handler_tracking.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/handler_type_requirements.hpp b/3party/boost/boost/asio/detail/handler_type_requirements.hpp
index 3046855a23..da111f1de6 100644
--- a/3party/boost/boost/asio/detail/handler_type_requirements.hpp
+++ b/3party/boost/boost/asio/detail/handler_type_requirements.hpp
@@ -2,7 +2,7 @@
// detail/handler_type_requirements.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -53,6 +53,16 @@
# include <boost/asio/handler_type.hpp>
#endif // defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS)
+// Newer gcc needs special treatment to suppress unused typedef warnings.
+#if defined(__GNUC__)
+# if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || (__GNUC__ > 4)
+# define BOOST_ASIO_UNUSED_TYPEDEF __attribute__((__unused__))
+# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || (__GNUC__ > 4)
+#endif // defined(__GNUC__)
+#if !defined(BOOST_ASIO_UNUSED_TYPEDEF)
+# define BOOST_ASIO_UNUSED_TYPEDEF
+#endif // !defined(BOOST_ASIO_UNUSED_TYPEDEF)
+
namespace boost {
namespace asio {
namespace detail {
@@ -131,7 +141,7 @@ struct handler_type_requirements
sizeof( \
boost::asio::detail::lvref< \
asio_true_handler_type>()(), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_READ_HANDLER_CHECK( \
handler_type, handler) \
@@ -158,7 +168,7 @@ struct handler_type_requirements
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>(), \
boost::asio::detail::lvref<const std::size_t>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_WRITE_HANDLER_CHECK( \
@@ -186,7 +196,7 @@ struct handler_type_requirements
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>(), \
boost::asio::detail::lvref<const std::size_t>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_ACCEPT_HANDLER_CHECK( \
handler_type, handler) \
@@ -211,7 +221,7 @@ struct handler_type_requirements
boost::asio::detail::lvref< \
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_CONNECT_HANDLER_CHECK( \
handler_type, handler) \
@@ -236,7 +246,7 @@ struct handler_type_requirements
boost::asio::detail::lvref< \
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_COMPOSED_CONNECT_HANDLER_CHECK( \
handler_type, handler, iter_type) \
@@ -263,7 +273,7 @@ struct handler_type_requirements
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>(), \
boost::asio::detail::lvref<const iter_type>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_RESOLVE_HANDLER_CHECK( \
handler_type, handler, iter_type) \
@@ -290,7 +300,7 @@ struct handler_type_requirements
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>(), \
boost::asio::detail::lvref<const iter_type>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_WAIT_HANDLER_CHECK( \
handler_type, handler) \
@@ -315,7 +325,7 @@ struct handler_type_requirements
boost::asio::detail::lvref< \
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_SIGNAL_HANDLER_CHECK( \
handler_type, handler) \
@@ -342,7 +352,7 @@ struct handler_type_requirements
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>(), \
boost::asio::detail::lvref<const int>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_HANDSHAKE_HANDLER_CHECK( \
handler_type, handler) \
@@ -367,7 +377,7 @@ struct handler_type_requirements
boost::asio::detail::lvref< \
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_BUFFERED_HANDSHAKE_HANDLER_CHECK( \
handler_type, handler) \
@@ -394,7 +404,7 @@ struct handler_type_requirements
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>(), \
boost::asio::detail::lvref<const std::size_t>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_SHUTDOWN_HANDLER_CHECK( \
handler_type, handler) \
@@ -419,57 +429,57 @@ struct handler_type_requirements
boost::asio::detail::lvref< \
asio_true_handler_type>()( \
boost::asio::detail::lvref<const boost::system::error_code>()), \
- char(0))>
+ char(0))> BOOST_ASIO_UNUSED_TYPEDEF
#else // !defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS)
#define BOOST_ASIO_COMPLETION_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_READ_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_WRITE_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_ACCEPT_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_CONNECT_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_COMPOSED_CONNECT_HANDLER_CHECK( \
handler_type, handler, iter_type) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_RESOLVE_HANDLER_CHECK( \
handler_type, handler, iter_type) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_WAIT_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_SIGNAL_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_HANDSHAKE_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_BUFFERED_HANDSHAKE_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#define BOOST_ASIO_SHUTDOWN_HANDLER_CHECK( \
handler_type, handler) \
- typedef int
+ typedef int BOOST_ASIO_UNUSED_TYPEDEF
#endif // !defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS)
diff --git a/3party/boost/boost/asio/detail/hash_map.hpp b/3party/boost/boost/asio/detail/hash_map.hpp
index de511ea1e3..6724a242de 100644
--- a/3party/boost/boost/asio/detail/hash_map.hpp
+++ b/3party/boost/boost/asio/detail/hash_map.hpp
@@ -2,7 +2,7 @@
// detail/hash_map.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/buffer_sequence_adapter.ipp b/3party/boost/boost/asio/detail/impl/buffer_sequence_adapter.ipp
new file mode 100644
index 0000000000..a538134b9e
--- /dev/null
+++ b/3party/boost/boost/asio/detail/impl/buffer_sequence_adapter.ipp
@@ -0,0 +1,120 @@
+//
+// detail/impl/buffer_sequence_adapter.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_IMPL_BUFFER_SEQUENCE_ADAPTER_IPP
+#define BOOST_ASIO_DETAIL_IMPL_BUFFER_SEQUENCE_ADAPTER_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <robuffer.h>
+#include <windows.storage.streams.h>
+#include <wrl/implements.h>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class winrt_buffer_impl :
+ public Microsoft::WRL::RuntimeClass<
+ Microsoft::WRL::RuntimeClassFlags<
+ Microsoft::WRL::RuntimeClassType::WinRtClassicComMix>,
+ ABI::Windows::Storage::Streams::IBuffer,
+ Windows::Storage::Streams::IBufferByteAccess>
+{
+public:
+ explicit winrt_buffer_impl(const boost::asio::const_buffer& b)
+ {
+ bytes_ = const_cast<byte*>(boost::asio::buffer_cast<const byte*>(b));
+ length_ = boost::asio::buffer_size(b);
+ capacity_ = boost::asio::buffer_size(b);
+ }
+
+ explicit winrt_buffer_impl(const boost::asio::mutable_buffer& b)
+ {
+ bytes_ = const_cast<byte*>(boost::asio::buffer_cast<const byte*>(b));
+ length_ = 0;
+ capacity_ = boost::asio::buffer_size(b);
+ }
+
+ ~winrt_buffer_impl()
+ {
+ }
+
+ STDMETHODIMP Buffer(byte** value)
+ {
+ *value = bytes_;
+ return S_OK;
+ }
+
+ STDMETHODIMP get_Capacity(UINT32* value)
+ {
+ *value = capacity_;
+ return S_OK;
+ }
+
+ STDMETHODIMP get_Length(UINT32 *value)
+ {
+ *value = length_;
+ return S_OK;
+ }
+
+ STDMETHODIMP put_Length(UINT32 value)
+ {
+ if (value > capacity_)
+ return E_INVALIDARG;
+ length_ = value;
+ return S_OK;
+ }
+
+private:
+ byte* bytes_;
+ UINT32 length_;
+ UINT32 capacity_;
+};
+
+void buffer_sequence_adapter_base::init_native_buffer(
+ buffer_sequence_adapter_base::native_buffer_type& buf,
+ const boost::asio::mutable_buffer& buffer)
+{
+ std::memset(&buf, 0, sizeof(native_buffer_type));
+ Microsoft::WRL::ComPtr<IInspectable> insp
+ = Microsoft::WRL::Make<winrt_buffer_impl>(buffer);
+ buf = reinterpret_cast<Windows::Storage::Streams::IBuffer^>(insp.Get());
+}
+
+void buffer_sequence_adapter_base::init_native_buffer(
+ buffer_sequence_adapter_base::native_buffer_type& buf,
+ const boost::asio::const_buffer& buffer)
+{
+ std::memset(&buf, 0, sizeof(native_buffer_type));
+ Microsoft::WRL::ComPtr<IInspectable> insp
+ = Microsoft::WRL::Make<winrt_buffer_impl>(buffer);
+ Platform::Object^ buf_obj = reinterpret_cast<Platform::Object^>(insp.Get());
+ buf = reinterpret_cast<Windows::Storage::Streams::IBuffer^>(insp.Get());
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_BUFFER_SEQUENCE_ADAPTER_IPP
diff --git a/3party/boost/boost/asio/detail/impl/descriptor_ops.ipp b/3party/boost/boost/asio/detail/impl/descriptor_ops.ipp
index 7dea8d4592..54b8537d6a 100644
--- a/3party/boost/boost/asio/detail/impl/descriptor_ops.ipp
+++ b/3party/boost/boost/asio/detail/impl/descriptor_ops.ipp
@@ -2,7 +2,7 @@
// detail/impl/descriptor_ops.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -20,7 +20,9 @@
#include <boost/asio/detail/descriptor_ops.hpp>
#include <boost/asio/error.hpp>
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
#include <boost/asio/detail/push_options.hpp>
@@ -444,6 +446,8 @@ int poll_write(int d, state_type state, boost::system::error_code& ec)
#include <boost/asio/detail/pop_options.hpp>
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
#endif // BOOST_ASIO_DETAIL_IMPL_DESCRIPTOR_OPS_IPP
diff --git a/3party/boost/boost/asio/detail/impl/dev_poll_reactor.hpp b/3party/boost/boost/asio/detail/impl/dev_poll_reactor.hpp
index 1c1c5f0f39..1c02ea4ffb 100644
--- a/3party/boost/boost/asio/detail/impl/dev_poll_reactor.hpp
+++ b/3party/boost/boost/asio/detail/impl/dev_poll_reactor.hpp
@@ -2,7 +2,7 @@
// detail/impl/dev_poll_reactor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/dev_poll_reactor.ipp b/3party/boost/boost/asio/detail/impl/dev_poll_reactor.ipp
index 44d49b5cad..cc5b4016a8 100644
--- a/3party/boost/boost/asio/detail/impl/dev_poll_reactor.ipp
+++ b/3party/boost/boost/asio/detail/impl/dev_poll_reactor.ipp
@@ -2,7 +2,7 @@
// detail/impl/dev_poll_reactor.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/epoll_reactor.hpp b/3party/boost/boost/asio/detail/impl/epoll_reactor.hpp
index 3935eba41f..3a08f8eb7b 100644
--- a/3party/boost/boost/asio/detail/impl/epoll_reactor.hpp
+++ b/3party/boost/boost/asio/detail/impl/epoll_reactor.hpp
@@ -2,7 +2,7 @@
// detail/impl/epoll_reactor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/epoll_reactor.ipp b/3party/boost/boost/asio/detail/impl/epoll_reactor.ipp
index 5d592afff1..27408e4e02 100644
--- a/3party/boost/boost/asio/detail/impl/epoll_reactor.ipp
+++ b/3party/boost/boost/asio/detail/impl/epoll_reactor.ipp
@@ -2,7 +2,7 @@
// detail/impl/epoll_reactor.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/eventfd_select_interrupter.ipp b/3party/boost/boost/asio/detail/impl/eventfd_select_interrupter.ipp
index dd32679af1..c5a673a878 100644
--- a/3party/boost/boost/asio/detail/impl/eventfd_select_interrupter.ipp
+++ b/3party/boost/boost/asio/detail/impl/eventfd_select_interrupter.ipp
@@ -2,7 +2,7 @@
// detail/impl/eventfd_select_interrupter.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Roelof Naude (roelof.naude at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/impl/handler_tracking.ipp b/3party/boost/boost/asio/detail/impl/handler_tracking.ipp
index fc21cee066..2c84e5a364 100644
--- a/3party/boost/boost/asio/detail/impl/handler_tracking.ipp
+++ b/3party/boost/boost/asio/detail/impl/handler_tracking.ipp
@@ -2,7 +2,7 @@
// detail/impl/handler_tracking.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -158,7 +158,7 @@ void handler_tracking::completion::invocation_begin()
#else // defined(BOOST_ASIO_WINDOWS)
"@asio|%llu.%06llu|>%llu|\n",
#endif // defined(BOOST_ASIO_WINDOWS)
- timestamp.seconds, timestamp.microseconds);
+ timestamp.seconds, timestamp.microseconds, id_);
invoked_ = true;
}
@@ -244,7 +244,7 @@ void handler_tracking::completion::invocation_end()
#else // defined(BOOST_ASIO_WINDOWS)
"@asio|%llu.%06llu|<%llu|\n",
#endif // defined(BOOST_ASIO_WINDOWS)
- timestamp.seconds, timestamp.microseconds);
+ timestamp.seconds, timestamp.microseconds, id_);
id_ = 0;
}
diff --git a/3party/boost/boost/asio/detail/impl/kqueue_reactor.hpp b/3party/boost/boost/asio/detail/impl/kqueue_reactor.hpp
index 9b3d40f985..889ae26049 100644
--- a/3party/boost/boost/asio/detail/impl/kqueue_reactor.hpp
+++ b/3party/boost/boost/asio/detail/impl/kqueue_reactor.hpp
@@ -2,7 +2,7 @@
// detail/impl/kqueue_reactor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2005 Stefan Arentz (stefan at soze dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/impl/kqueue_reactor.ipp b/3party/boost/boost/asio/detail/impl/kqueue_reactor.ipp
index d23d3e3c1f..7a026a9345 100644
--- a/3party/boost/boost/asio/detail/impl/kqueue_reactor.ipp
+++ b/3party/boost/boost/asio/detail/impl/kqueue_reactor.ipp
@@ -2,7 +2,7 @@
// detail/impl/kqueue_reactor.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2005 Stefan Arentz (stefan at soze dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -47,10 +47,15 @@ kqueue_reactor::kqueue_reactor(boost::asio::io_service& io_service)
interrupter_(),
shutdown_(false)
{
- // The interrupter is put into a permanently readable state. Whenever we want
- // to interrupt the blocked kevent call we register a read operation against
- // the descriptor.
- interrupter_.interrupt();
+ struct kevent event;
+ BOOST_ASIO_KQUEUE_EV_SET(&event, interrupter_.read_descriptor(),
+ EVFILT_READ, EV_ADD, 0, 0, &interrupter_);
+ if (::kevent(kqueue_fd_, &event, 1, 0, 0, 0) == -1)
+ {
+ boost::system::error_code error(errno,
+ boost::asio::error::get_system_category());
+ boost::asio::detail::throw_error(error);
+ }
}
kqueue_reactor::~kqueue_reactor()
@@ -89,26 +94,27 @@ void kqueue_reactor::fork_service(boost::asio::io_service::fork_event fork_ev)
interrupter_.recreate();
+ struct kevent event;
+ BOOST_ASIO_KQUEUE_EV_SET(&event, interrupter_.read_descriptor(),
+ EVFILT_READ, EV_ADD, 0, 0, &interrupter_);
+ if (::kevent(kqueue_fd_, &event, 1, 0, 0, 0) == -1)
+ {
+ boost::system::error_code error(errno,
+ boost::asio::error::get_system_category());
+ boost::asio::detail::throw_error(error);
+ }
+
// Re-register all descriptors with kqueue.
mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
for (descriptor_state* state = registered_descriptors_.first();
state != 0; state = state->next_)
{
struct kevent events[2];
- int num_events = 0;
-
- if (!state->op_queue_[read_op].empty())
- BOOST_ASIO_KQUEUE_EV_SET(&events[num_events++], state->descriptor_,
- EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, state);
- else if (!state->op_queue_[except_op].empty())
- BOOST_ASIO_KQUEUE_EV_SET(&events[num_events++], state->descriptor_,
- EVFILT_READ, EV_ADD | EV_CLEAR, EV_OOBAND, 0, state);
-
- if (!state->op_queue_[write_op].empty())
- BOOST_ASIO_KQUEUE_EV_SET(&events[num_events++], state->descriptor_,
- EVFILT_WRITE, EV_ADD | EV_CLEAR, 0, 0, state);
-
- if (num_events && ::kevent(kqueue_fd_, events, num_events, 0, 0, 0) == -1)
+ BOOST_ASIO_KQUEUE_EV_SET(&events[0], state->descriptor_,
+ EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, state);
+ BOOST_ASIO_KQUEUE_EV_SET(&events[1], state->descriptor_,
+ EVFILT_WRITE, EV_ADD | EV_CLEAR, 0, 0, state);
+ if (::kevent(kqueue_fd_, events, 2, 0, 0, 0) == -1)
{
boost::system::error_code error(errno,
boost::asio::error::get_system_category());
@@ -133,6 +139,14 @@ int kqueue_reactor::register_descriptor(socket_type descriptor,
descriptor_data->descriptor_ = descriptor;
descriptor_data->shutdown_ = false;
+ struct kevent events[2];
+ BOOST_ASIO_KQUEUE_EV_SET(&events[0], descriptor, EVFILT_READ,
+ EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+ BOOST_ASIO_KQUEUE_EV_SET(&events[1], descriptor, EVFILT_WRITE,
+ EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+ if (::kevent(kqueue_fd_, events, 2, 0, 0, 0) == -1)
+ return errno;
+
return 0;
}
@@ -148,23 +162,13 @@ int kqueue_reactor::register_internal_descriptor(
descriptor_data->shutdown_ = false;
descriptor_data->op_queue_[op_type].push(op);
- struct kevent event;
- switch (op_type)
- {
- case read_op:
- BOOST_ASIO_KQUEUE_EV_SET(&event, descriptor, EVFILT_READ,
- EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
- break;
- case write_op:
- BOOST_ASIO_KQUEUE_EV_SET(&event, descriptor, EVFILT_WRITE,
- EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
- break;
- case except_op:
- BOOST_ASIO_KQUEUE_EV_SET(&event, descriptor, EVFILT_READ,
- EV_ADD | EV_CLEAR, EV_OOBAND, 0, descriptor_data);
- break;
- }
- ::kevent(kqueue_fd_, &event, 1, 0, 0, 0);
+ struct kevent events[2];
+ BOOST_ASIO_KQUEUE_EV_SET(&events[0], descriptor, EVFILT_READ,
+ EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+ BOOST_ASIO_KQUEUE_EV_SET(&events[1], descriptor, EVFILT_WRITE,
+ EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+ if (::kevent(kqueue_fd_, events, 2, 0, 0, 0) == -1)
+ return errno;
return 0;
}
@@ -199,52 +203,30 @@ void kqueue_reactor::start_op(int op_type, socket_type descriptor,
bool first = descriptor_data->op_queue_[op_type].empty();
if (first)
{
- if (allow_speculative)
+ if (allow_speculative
+ && (op_type != read_op
+ || descriptor_data->op_queue_[except_op].empty()))
{
- if (op_type != read_op || descriptor_data->op_queue_[except_op].empty())
+ if (op->perform())
{
- if (op->perform())
- {
- descriptor_lock.unlock();
- io_service_.post_immediate_completion(op, is_continuation);
- return;
- }
+ descriptor_lock.unlock();
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
}
}
- }
-
- descriptor_data->op_queue_[op_type].push(op);
- io_service_.work_started();
-
- if (first)
- {
- struct kevent event;
- switch (op_type)
+ else
{
- case read_op:
- BOOST_ASIO_KQUEUE_EV_SET(&event, descriptor, EVFILT_READ,
+ struct kevent events[2];
+ BOOST_ASIO_KQUEUE_EV_SET(&events[0], descriptor, EVFILT_READ,
EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
- break;
- case write_op:
- BOOST_ASIO_KQUEUE_EV_SET(&event, descriptor, EVFILT_WRITE,
+ BOOST_ASIO_KQUEUE_EV_SET(&events[1], descriptor, EVFILT_WRITE,
EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
- break;
- case except_op:
- if (!descriptor_data->op_queue_[read_op].empty())
- return; // Already registered for read events.
- BOOST_ASIO_KQUEUE_EV_SET(&event, descriptor, EVFILT_READ,
- EV_ADD | EV_CLEAR, EV_OOBAND, 0, descriptor_data);
- break;
- }
-
- if (::kevent(kqueue_fd_, &event, 1, 0, 0, 0) == -1)
- {
- op->ec_ = boost::system::error_code(errno,
- boost::asio::error::get_system_category());
- descriptor_data->op_queue_[op_type].pop();
- io_service_.post_deferred_completion(op);
+ ::kevent(kqueue_fd_, events, 2, 0, 0, 0);
}
}
+
+ descriptor_data->op_queue_[op_type].push(op);
+ io_service_.work_started();
}
void kqueue_reactor::cancel_ops(socket_type,
@@ -367,12 +349,10 @@ void kqueue_reactor::run(bool block, op_queue<operation>& ops)
// Dispatch the waiting events.
for (int i = 0; i < num_events; ++i)
{
- int descriptor = static_cast<int>(events[i].ident);
void* ptr = reinterpret_cast<void*>(events[i].udata);
if (ptr == &interrupter_)
{
- // No need to reset the interrupter since we're leaving the descriptor
- // in a ready-to-read state and relying on edge-triggered notifications.
+ interrupter_.reset();
}
else
{
@@ -414,45 +394,6 @@ void kqueue_reactor::run(bool block, op_queue<operation>& ops)
}
}
}
-
- // Renew registration for event notifications.
- struct kevent event;
- switch (events[i].filter)
- {
- case EVFILT_READ:
- if (!descriptor_data->op_queue_[read_op].empty())
- BOOST_ASIO_KQUEUE_EV_SET(&event, descriptor, EVFILT_READ,
- EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
- else if (!descriptor_data->op_queue_[except_op].empty())
- BOOST_ASIO_KQUEUE_EV_SET(&event, descriptor, EVFILT_READ,
- EV_ADD | EV_CLEAR, EV_OOBAND, 0, descriptor_data);
- else
- continue;
- break;
- case EVFILT_WRITE:
- if (!descriptor_data->op_queue_[write_op].empty())
- BOOST_ASIO_KQUEUE_EV_SET(&event, descriptor, EVFILT_WRITE,
- EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
- else
- continue;
- break;
- default:
- break;
- }
- if (::kevent(kqueue_fd_, &event, 1, 0, 0, 0) == -1)
- {
- boost::system::error_code error(errno,
- boost::asio::error::get_system_category());
- for (int j = 0; j < max_ops; ++j)
- {
- while (reactor_op* op = descriptor_data->op_queue_[j].front())
- {
- op->ec_ = error;
- descriptor_data->op_queue_[j].pop();
- ops.push(op);
- }
- }
- }
}
}
@@ -462,10 +403,7 @@ void kqueue_reactor::run(bool block, op_queue<operation>& ops)
void kqueue_reactor::interrupt()
{
- struct kevent event;
- BOOST_ASIO_KQUEUE_EV_SET(&event, interrupter_.read_descriptor(),
- EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, &interrupter_);
- ::kevent(kqueue_fd_, &event, 1, 0, 0, 0);
+ interrupter_.interrupt();
}
int kqueue_reactor::do_kqueue_create()
diff --git a/3party/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp b/3party/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp
index af5177b908..556c5a2712 100644
--- a/3party/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp
+++ b/3party/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp
@@ -2,7 +2,7 @@
// detail/impl/pipe_select_interrupter.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,6 +17,7 @@
#include <boost/asio/detail/config.hpp>
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#if !defined(BOOST_ASIO_WINDOWS)
#if !defined(__CYGWIN__)
#if !defined(__SYMBIAN32__)
@@ -120,5 +121,6 @@ bool pipe_select_interrupter::reset()
#endif // !defined(__SYMBIAN32__)
#endif // !defined(__CYGWIN__)
#endif // !defined(BOOST_ASIO_WINDOWS)
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#endif // BOOST_ASIO_DETAIL_IMPL_PIPE_SELECT_INTERRUPTER_IPP
diff --git a/3party/boost/boost/asio/detail/impl/posix_event.ipp b/3party/boost/boost/asio/detail/impl/posix_event.ipp
index a8317759be..acb0f57895 100644
--- a/3party/boost/boost/asio/detail/impl/posix_event.ipp
+++ b/3party/boost/boost/asio/detail/impl/posix_event.ipp
@@ -2,7 +2,7 @@
// detail/impl/posix_event.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -30,7 +30,7 @@ namespace asio {
namespace detail {
posix_event::posix_event()
- : signalled_(false)
+ : state_(0)
{
int error = ::pthread_cond_init(&cond_, 0);
boost::system::error_code ec(error,
diff --git a/3party/boost/boost/asio/detail/impl/posix_mutex.ipp b/3party/boost/boost/asio/detail/impl/posix_mutex.ipp
index 6e8425ec9a..d815512e51 100644
--- a/3party/boost/boost/asio/detail/impl/posix_mutex.ipp
+++ b/3party/boost/boost/asio/detail/impl/posix_mutex.ipp
@@ -2,7 +2,7 @@
// detail/impl/posix_mutex.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/posix_thread.ipp b/3party/boost/boost/asio/detail/impl/posix_thread.ipp
index c9b49be3ef..4b487d93eb 100644
--- a/3party/boost/boost/asio/detail/impl/posix_thread.ipp
+++ b/3party/boost/boost/asio/detail/impl/posix_thread.ipp
@@ -2,7 +2,7 @@
// detail/impl/posix_thread.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/posix_tss_ptr.ipp b/3party/boost/boost/asio/detail/impl/posix_tss_ptr.ipp
index c5c62df291..65f90773dd 100644
--- a/3party/boost/boost/asio/detail/impl/posix_tss_ptr.ipp
+++ b/3party/boost/boost/asio/detail/impl/posix_tss_ptr.ipp
@@ -2,7 +2,7 @@
// detail/impl/posix_tss_ptr.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/reactive_descriptor_service.ipp b/3party/boost/boost/asio/detail/impl/reactive_descriptor_service.ipp
index 48e2784cb5..abf4c6f384 100644
--- a/3party/boost/boost/asio/detail/impl/reactive_descriptor_service.ipp
+++ b/3party/boost/boost/asio/detail/impl/reactive_descriptor_service.ipp
@@ -2,7 +2,7 @@
// detail/impl/reactive_descriptor_service.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,7 +17,9 @@
#include <boost/asio/detail/config.hpp>
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
#include <boost/asio/error.hpp>
#include <boost/asio/detail/reactive_descriptor_service.hpp>
@@ -201,6 +203,8 @@ void reactive_descriptor_service::start_op(
#include <boost/asio/detail/pop_options.hpp>
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
#endif // BOOST_ASIO_DETAIL_IMPL_REACTIVE_DESCRIPTOR_SERVICE_IPP
diff --git a/3party/boost/boost/asio/detail/impl/reactive_serial_port_service.ipp b/3party/boost/boost/asio/detail/impl/reactive_serial_port_service.ipp
index 08c20aa006..b8c2f4a4ce 100644
--- a/3party/boost/boost/asio/detail/impl/reactive_serial_port_service.ipp
+++ b/3party/boost/boost/asio/detail/impl/reactive_serial_port_service.ipp
@@ -2,7 +2,7 @@
// detail/impl/reactive_serial_port_service.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp b/3party/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp
index fe7d7446e0..c72871d816 100644
--- a/3party/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp
+++ b/3party/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp
@@ -2,7 +2,7 @@
// detail/reactive_socket_service_base.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,7 +17,8 @@
#include <boost/asio/detail/config.hpp>
-#if !defined(BOOST_ASIO_HAS_IOCP)
+#if !defined(BOOST_ASIO_HAS_IOCP) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#include <boost/asio/detail/reactive_socket_service_base.hpp>
@@ -263,5 +264,6 @@ void reactive_socket_service_base::start_connect_op(
#include <boost/asio/detail/pop_options.hpp>
#endif // !defined(BOOST_ASIO_HAS_IOCP)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#endif // BOOST_ASIO_DETAIL_IMPL_REACTIVE_SOCKET_SERVICE_BASE_IPP
diff --git a/3party/boost/boost/asio/detail/impl/resolver_service_base.ipp b/3party/boost/boost/asio/detail/impl/resolver_service_base.ipp
index d34d6257b1..77b6c27792 100644
--- a/3party/boost/boost/asio/detail/impl/resolver_service_base.ipp
+++ b/3party/boost/boost/asio/detail/impl/resolver_service_base.ipp
@@ -2,7 +2,7 @@
// detail/impl/resolver_service_base.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/select_reactor.hpp b/3party/boost/boost/asio/detail/impl/select_reactor.hpp
index 96e14b12db..f2b79f7360 100644
--- a/3party/boost/boost/asio/detail/impl/select_reactor.hpp
+++ b/3party/boost/boost/asio/detail/impl/select_reactor.hpp
@@ -2,7 +2,7 @@
// detail/impl/select_reactor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -20,7 +20,8 @@
#if defined(BOOST_ASIO_HAS_IOCP) \
|| (!defined(BOOST_ASIO_HAS_DEV_POLL) \
&& !defined(BOOST_ASIO_HAS_EPOLL) \
- && !defined(BOOST_ASIO_HAS_KQUEUE))
+ && !defined(BOOST_ASIO_HAS_KQUEUE) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
#include <boost/asio/detail/push_options.hpp>
@@ -82,6 +83,7 @@ std::size_t select_reactor::cancel_timer(timer_queue<Time_Traits>& queue,
#endif // defined(BOOST_ASIO_HAS_IOCP)
// || (!defined(BOOST_ASIO_HAS_DEV_POLL)
// && !defined(BOOST_ASIO_HAS_EPOLL)
- // && !defined(BOOST_ASIO_HAS_KQUEUE))
+ // && !defined(BOOST_ASIO_HAS_KQUEUE)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
#endif // BOOST_ASIO_DETAIL_IMPL_SELECT_REACTOR_HPP
diff --git a/3party/boost/boost/asio/detail/impl/select_reactor.ipp b/3party/boost/boost/asio/detail/impl/select_reactor.ipp
index 4b2f030019..c8e04a26d4 100644
--- a/3party/boost/boost/asio/detail/impl/select_reactor.ipp
+++ b/3party/boost/boost/asio/detail/impl/select_reactor.ipp
@@ -2,7 +2,7 @@
// detail/impl/select_reactor.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -20,7 +20,8 @@
#if defined(BOOST_ASIO_HAS_IOCP) \
|| (!defined(BOOST_ASIO_HAS_DEV_POLL) \
&& !defined(BOOST_ASIO_HAS_EPOLL) \
- && !defined(BOOST_ASIO_HAS_KQUEUE))
+ && !defined(BOOST_ASIO_HAS_KQUEUE) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
#include <boost/asio/detail/bind_handler.hpp>
#include <boost/asio/detail/fd_set_adapter.hpp>
@@ -181,7 +182,7 @@ void select_reactor::run(bool block, op_queue<operation>& ops)
for (int i = 0; i < max_select_ops; ++i)
{
have_work_to_do = have_work_to_do || !op_queue_[i].empty();
- op_queue_[i].get_descriptors(fd_sets_[i], ops);
+ fd_sets_[i].set(op_queue_[i], ops);
if (fd_sets_[i].max_descriptor() > max_fd)
max_fd = fd_sets_[i].max_descriptor();
}
@@ -189,10 +190,10 @@ void select_reactor::run(bool block, op_queue<operation>& ops)
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
// Connection operations on Windows use both except and write fd_sets.
have_work_to_do = have_work_to_do || !op_queue_[connect_op].empty();
- op_queue_[connect_op].get_descriptors(fd_sets_[write_op], ops);
+ fd_sets_[write_op].set(op_queue_[connect_op], ops);
if (fd_sets_[write_op].max_descriptor() > max_fd)
max_fd = fd_sets_[write_op].max_descriptor();
- op_queue_[connect_op].get_descriptors(fd_sets_[except_op], ops);
+ fd_sets_[except_op].set(op_queue_[connect_op], ops);
if (fd_sets_[except_op].max_descriptor() > max_fd)
max_fd = fd_sets_[except_op].max_descriptor();
#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
@@ -227,16 +228,14 @@ void select_reactor::run(bool block, op_queue<operation>& ops)
{
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
// Connection operations on Windows use both except and write fd_sets.
- op_queue_[connect_op].perform_operations_for_descriptors(
- fd_sets_[except_op], ops);
- op_queue_[connect_op].perform_operations_for_descriptors(
- fd_sets_[write_op], ops);
+ fd_sets_[except_op].perform(op_queue_[connect_op], ops);
+ fd_sets_[write_op].perform(op_queue_[connect_op], ops);
#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
// Exception operations must be processed first to ensure that any
// out-of-band data is read before normal data.
for (int i = max_select_ops - 1; i >= 0; --i)
- op_queue_[i].perform_operations_for_descriptors(fd_sets_[i], ops);
+ fd_sets_[i].perform(op_queue_[i], ops);
}
timer_queues_.get_ready_timers(ops);
}
@@ -311,5 +310,6 @@ void select_reactor::cancel_ops_unlocked(socket_type descriptor,
// || (!defined(BOOST_ASIO_HAS_DEV_POLL)
// && !defined(BOOST_ASIO_HAS_EPOLL)
// && !defined(BOOST_ASIO_HAS_KQUEUE))
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
#endif // BOOST_ASIO_DETAIL_IMPL_SELECT_REACTOR_IPP
diff --git a/3party/boost/boost/asio/detail/impl/service_registry.hpp b/3party/boost/boost/asio/detail/impl/service_registry.hpp
index 1defc2a564..1f71f082a2 100644
--- a/3party/boost/boost/asio/detail/impl/service_registry.hpp
+++ b/3party/boost/boost/asio/detail/impl/service_registry.hpp
@@ -2,7 +2,7 @@
// detail/impl/service_registry.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/service_registry.ipp b/3party/boost/boost/asio/detail/impl/service_registry.ipp
index 2dc242ed92..adfcaa0ff6 100644
--- a/3party/boost/boost/asio/detail/impl/service_registry.ipp
+++ b/3party/boost/boost/asio/detail/impl/service_registry.ipp
@@ -2,7 +2,7 @@
// detail/impl/service_registry.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/signal_set_service.ipp b/3party/boost/boost/asio/detail/impl/signal_set_service.ipp
index 131b5af005..21be62f561 100644
--- a/3party/boost/boost/asio/detail/impl/signal_set_service.ipp
+++ b/3party/boost/boost/asio/detail/impl/signal_set_service.ipp
@@ -2,7 +2,7 @@
// detail/impl/signal_set_service.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,25 +57,33 @@ signal_state* get_signal_state()
return &state;
}
-void asio_signal_handler(int signal_number)
+void boost_asio_signal_handler(int signal_number)
{
-#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#if defined(BOOST_ASIO_WINDOWS) \
+ || defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ || defined(__CYGWIN__)
signal_set_service::deliver_signal(signal_number);
-#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#else // defined(BOOST_ASIO_WINDOWS)
+ // || defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // || defined(__CYGWIN__)
int saved_errno = errno;
signal_state* state = get_signal_state();
signed_size_type result = ::write(state->write_descriptor_,
&signal_number, sizeof(signal_number));
(void)result;
errno = saved_errno;
-#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#endif // defined(BOOST_ASIO_WINDOWS)
+ // || defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // || defined(__CYGWIN__)
#if defined(BOOST_ASIO_HAS_SIGNAL) && !defined(BOOST_ASIO_HAS_SIGACTION)
- ::signal(signal_number, asio_signal_handler);
+ ::signal(signal_number, boost_asio_signal_handler);
#endif // defined(BOOST_ASIO_HAS_SIGNAL) && !defined(BOOST_ASIO_HAS_SIGACTION)
}
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
class signal_set_service::pipe_read_op : public reactor_op
{
public:
@@ -105,22 +113,32 @@ public:
delete o;
}
};
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
signal_set_service::signal_set_service(
boost::asio::io_service& io_service)
: io_service_(boost::asio::use_service<io_service_impl>(io_service)),
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
reactor_(boost::asio::use_service<reactor>(io_service)),
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
next_(0),
prev_(0)
{
get_signal_state()->mutex_.init();
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
reactor_.init_task();
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
for (int i = 0; i < max_signal_number; ++i)
registrations_[i] = 0;
@@ -155,7 +173,9 @@ void signal_set_service::shutdown_service()
void signal_set_service::fork_service(
boost::asio::io_service::fork_event fork_ev)
{
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
signal_state* state = get_signal_state();
static_mutex::scoped_lock lock(state->mutex_);
@@ -195,9 +215,13 @@ void signal_set_service::fork_service(
default:
break;
}
-#else // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#else // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
(void)fork_ev;
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
}
void signal_set_service::construct(
@@ -219,7 +243,7 @@ boost::system::error_code signal_set_service::add(
int signal_number, boost::system::error_code& ec)
{
// Check that the signal number is valid.
- if (signal_number < 0 || signal_number > max_signal_number)
+ if (signal_number < 0 || signal_number >= max_signal_number)
{
ec = boost::asio::error::invalid_argument;
return ec;
@@ -250,11 +274,11 @@ boost::system::error_code signal_set_service::add(
using namespace std; // For memset.
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
- sa.sa_handler = asio_signal_handler;
+ sa.sa_handler = boost_asio_signal_handler;
sigfillset(&sa.sa_mask);
if (::sigaction(signal_number, &sa, 0) == -1)
# else // defined(BOOST_ASIO_HAS_SIGACTION)
- if (::signal(signal_number, asio_signal_handler) == SIG_ERR)
+ if (::signal(signal_number, boost_asio_signal_handler) == SIG_ERR)
# endif // defined(BOOST_ASIO_HAS_SIGACTION)
{
# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
@@ -293,7 +317,7 @@ boost::system::error_code signal_set_service::remove(
int signal_number, boost::system::error_code& ec)
{
// Check that the signal number is valid.
- if (signal_number < 0 || signal_number > max_signal_number)
+ if (signal_number < 0 || signal_number >= max_signal_number)
{
ec = boost::asio::error::invalid_argument;
return ec;
@@ -489,13 +513,17 @@ void signal_set_service::add_service(signal_set_service* service)
state->service_list_->prev_ = service;
state->service_list_ = service;
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
// Register for pipe readiness notifications.
int read_descriptor = state->read_descriptor_;
lock.unlock();
service->reactor_.register_internal_descriptor(reactor::read_op,
read_descriptor, service->reactor_data_, new pipe_read_op);
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
}
void signal_set_service::remove_service(signal_set_service* service)
@@ -505,14 +533,18 @@ void signal_set_service::remove_service(signal_set_service* service)
if (service->next_ || service->prev_ || state->service_list_ == service)
{
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
// Disable the pipe readiness notifications.
int read_descriptor = state->read_descriptor_;
lock.unlock();
service->reactor_.deregister_descriptor(
read_descriptor, service->reactor_data_, false);
lock.lock();
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
// Remove service from linked list of all services.
if (state->service_list_ == service)
@@ -534,7 +566,9 @@ void signal_set_service::remove_service(signal_set_service* service)
void signal_set_service::open_descriptors()
{
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
signal_state* state = get_signal_state();
int pipe_fds[2];
@@ -557,12 +591,16 @@ void signal_set_service::open_descriptors()
boost::asio::error::get_system_category());
boost::asio::detail::throw_error(ec, "signal_set_service pipe");
}
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
}
void signal_set_service::close_descriptors()
{
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
signal_state* state = get_signal_state();
if (state->read_descriptor_ != -1)
@@ -572,7 +610,9 @@ void signal_set_service::close_descriptors()
if (state->write_descriptor_ != -1)
::close(state->write_descriptor_);
state->write_descriptor_ = -1;
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
}
void signal_set_service::start_wait_op(
@@ -589,6 +629,7 @@ void signal_set_service::start_wait_op(
if (reg->undelivered_ > 0)
{
--reg->undelivered_;
+ op->signal_number_ = reg->signal_number_;
io_service_.post_deferred_completion(op);
return;
}
diff --git a/3party/boost/boost/asio/detail/impl/socket_ops.ipp b/3party/boost/boost/asio/detail/impl/socket_ops.ipp
index 5516d1c5c2..f2c9a119fe 100644
--- a/3party/boost/boost/asio/detail/impl/socket_ops.ipp
+++ b/3party/boost/boost/asio/detail/impl/socket_ops.ipp
@@ -2,7 +2,7 @@
// detail/impl/socket_ops.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -16,6 +16,7 @@
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
#include <boost/asio/detail/config.hpp>
+
#include <cctype>
#include <cstdio>
#include <cstdlib>
@@ -26,6 +27,12 @@
#include <boost/asio/detail/socket_ops.hpp>
#include <boost/asio/error.hpp>
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <codecvt>
+# include <locale>
+# include <string>
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) \
|| defined(__MACH__) && defined(__APPLE__)
# if defined(BOOST_ASIO_HAS_PTHREADS)
@@ -41,6 +48,8 @@ namespace asio {
namespace detail {
namespace socket_ops {
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
struct msghdr { int msg_namelen; };
#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
@@ -52,6 +61,8 @@ extern "C" char* if_indextoname(unsigned int, char*);
extern "C" unsigned int if_nametoindex(const char*);
#endif // defined(__hpux)
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
inline void clear_last_error()
{
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
@@ -61,6 +72,8 @@ inline void clear_last_error()
#endif
}
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
template <typename ReturnType>
inline ReturnType error_wrapper(ReturnType return_value,
boost::system::error_code& ec)
@@ -508,14 +521,52 @@ void sync_connect(socket_type s, const socket_addr_type* addr,
boost::asio::error::get_system_category());
}
-bool non_blocking_connect(socket_type s,
- const socket_addr_type* addr, std::size_t addrlen,
- boost::system::error_code& ec)
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+void complete_iocp_connect(socket_type s, boost::system::error_code& ec)
+{
+ if (!ec)
+ {
+ // Need to set the SO_UPDATE_CONNECT_CONTEXT option so that getsockname
+ // and getpeername will work on the connected socket.
+ socket_ops::state_type state = 0;
+ const int so_update_connect_context = 0x7010;
+ socket_ops::setsockopt(s, state, SOL_SOCKET,
+ so_update_connect_context, 0, 0, ec);
+ }
+}
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+bool non_blocking_connect(socket_type s, boost::system::error_code& ec)
{
// Check if the connect operation has finished. This is required since we may
// get spurious readiness notifications from the reactor.
- socket_ops::connect(s, addr, addrlen, ec);
- if (ec == boost::asio::error::already_started)
+#if defined(BOOST_ASIO_WINDOWS) \
+ || defined(__CYGWIN__) \
+ || defined(__SYMBIAN32__)
+ fd_set write_fds;
+ FD_ZERO(&write_fds);
+ FD_SET(s, &write_fds);
+ fd_set except_fds;
+ FD_ZERO(&except_fds);
+ FD_SET(s, &except_fds);
+ timeval zero_timeout;
+ zero_timeout.tv_sec = 0;
+ zero_timeout.tv_usec = 0;
+ int ready = ::select(s + 1, 0, &write_fds, &except_fds, &zero_timeout);
+#else // defined(BOOST_ASIO_WINDOWS)
+ // || defined(__CYGWIN__)
+ // || defined(__SYMBIAN32__)
+ pollfd fds;
+ fds.fd = s;
+ fds.events = POLLOUT;
+ fds.revents = 0;
+ int ready = ::poll(&fds, 1, 0);
+#endif // defined(BOOST_ASIO_WINDOWS)
+ // || defined(__CYGWIN__)
+ // || defined(__SYMBIAN32__)
+ if (ready == 0)
{
// The asynchronous connect operation is still in progress.
return false;
@@ -1313,7 +1364,7 @@ socket_type socket(int af, int type, int protocol,
if (s == invalid_socket)
return s;
- if (af == AF_INET6)
+ if (af == BOOST_ASIO_OS_DEF(AF_INET6))
{
// Try to enable the POSIX default behaviour of having IPV6_V6ONLY set to
// false. This will only succeed on Windows Vista and later versions of
@@ -1731,7 +1782,7 @@ int poll_read(socket_type s, state_type state, boost::system::error_code& ec)
zero_timeout.tv_usec = 0;
timeval* timeout = (state & user_set_non_blocking) ? &zero_timeout : 0;
clear_last_error();
- int result = error_wrapper(::select(s, &fds, 0, 0, timeout), ec);
+ int result = error_wrapper(::select(s + 1, &fds, 0, 0, timeout), ec);
#else // defined(BOOST_ASIO_WINDOWS)
// || defined(__CYGWIN__)
// || defined(__SYMBIAN32__)
@@ -1772,7 +1823,7 @@ int poll_write(socket_type s, state_type state, boost::system::error_code& ec)
zero_timeout.tv_usec = 0;
timeval* timeout = (state & user_set_non_blocking) ? &zero_timeout : 0;
clear_last_error();
- int result = error_wrapper(::select(s, 0, &fds, 0, timeout), ec);
+ int result = error_wrapper(::select(s + 1, 0, &fds, 0, timeout), ec);
#else // defined(BOOST_ASIO_WINDOWS)
// || defined(__CYGWIN__)
// || defined(__SYMBIAN32__)
@@ -1812,7 +1863,8 @@ int poll_connect(socket_type s, boost::system::error_code& ec)
FD_ZERO(&except_fds);
FD_SET(s, &except_fds);
clear_last_error();
- int result = error_wrapper(::select(s, 0, &write_fds, &except_fds, 0), ec);
+ int result = error_wrapper(::select(
+ s + 1, 0, &write_fds, &except_fds, 0), ec);
if (result >= 0)
ec = boost::system::error_code();
return result;
@@ -1833,14 +1885,51 @@ int poll_connect(socket_type s, boost::system::error_code& ec)
// || defined(__SYMBIAN32__)
}
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
const char* inet_ntop(int af, const void* src, char* dest, size_t length,
unsigned long scope_id, boost::system::error_code& ec)
{
clear_last_error();
-#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ using namespace std; // For sprintf.
+ const unsigned char* bytes = static_cast<const unsigned char*>(src);
+ if (af == BOOST_ASIO_OS_DEF(AF_INET))
+ {
+ sprintf_s(dest, length, "%u.%u.%u.%u",
+ bytes[0], bytes[1], bytes[2], bytes[3]);
+ return dest;
+ }
+ else if (af == BOOST_ASIO_OS_DEF(AF_INET6))
+ {
+ size_t n = 0, b = 0, z = 0;
+ while (n < length && b < 16)
+ {
+ if (bytes[b] == 0 && bytes[b + 1] == 0 && z == 0)
+ {
+ do b += 2; while (b < 16 && bytes[b] == 0 && bytes[b + 1] == 0);
+ n += sprintf_s(dest + n, length - n, ":%s", b < 16 ? "" : ":"), ++z;
+ }
+ else
+ {
+ n += sprintf_s(dest + n, length - n, "%s%x", b ? ":" : "",
+ (static_cast<u_long_type>(bytes[b]) << 8) | bytes[b + 1]);
+ b += 2;
+ }
+ }
+ if (scope_id)
+ n += sprintf_s(dest + n, length - n, "%%%lu", scope_id);
+ return dest;
+ }
+ else
+ {
+ ec = boost::asio::error::address_family_not_supported;
+ return 0;
+ }
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
using namespace std; // For memcpy.
- if (af != AF_INET && af != AF_INET6)
+ if (af != BOOST_ASIO_OS_DEF(AF_INET) && af != BOOST_ASIO_OS_DEF(AF_INET6))
{
ec = boost::asio::error::address_family_not_supported;
return 0;
@@ -1854,17 +1943,17 @@ const char* inet_ntop(int af, const void* src, char* dest, size_t length,
sockaddr_in6_type v6;
} address;
DWORD address_length;
- if (af == AF_INET)
+ if (af == BOOST_ASIO_OS_DEF(AF_INET))
{
address_length = sizeof(sockaddr_in4_type);
- address.v4.sin_family = AF_INET;
+ address.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
address.v4.sin_port = 0;
memcpy(&address.v4.sin_addr, src, sizeof(in4_addr_type));
}
else // AF_INET6
{
address_length = sizeof(sockaddr_in6_type);
- address.v6.sin6_family = AF_INET6;
+ address.v6.sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
address.v6.sin6_port = 0;
address.v6.sin6_flowinfo = 0;
address.v6.sin6_scope_id = scope_id;
@@ -1872,7 +1961,7 @@ const char* inet_ntop(int af, const void* src, char* dest, size_t length,
}
DWORD string_length = static_cast<DWORD>(length);
-#if defined(BOOST_NO_ANSI_APIS)
+#if defined(BOOST_NO_ANSI_APIS) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
LPWSTR string_buffer = (LPWSTR)_alloca(length * sizeof(WCHAR));
int result = error_wrapper(::WSAAddressToStringW(&address.base,
address_length, 0, string_buffer, &string_length), ec);
@@ -1896,14 +1985,16 @@ const char* inet_ntop(int af, const void* src, char* dest, size_t length,
af, src, dest, static_cast<int>(length)), ec);
if (result == 0 && !ec)
ec = boost::asio::error::invalid_argument;
- if (result != 0 && af == AF_INET6 && scope_id != 0)
+ if (result != 0 && af == BOOST_ASIO_OS_DEF(AF_INET6) && scope_id != 0)
{
using namespace std; // For strcat and sprintf.
char if_name[IF_NAMESIZE + 1] = "%";
const in6_addr_type* ipv6_address = static_cast<const in6_addr_type*>(src);
bool is_link_local = ((ipv6_address->s6_addr[0] == 0xfe)
&& ((ipv6_address->s6_addr[1] & 0xc0) == 0x80));
- if (!is_link_local
+ bool is_multicast_link_local = ((ipv6_address->s6_addr[0] == 0xff)
+ && ((ipv6_address->s6_addr[1] & 0x0f) == 0x02));
+ if ((!is_link_local && !is_multicast_link_local)
|| if_indextoname(static_cast<unsigned>(scope_id), if_name + 1) == 0)
sprintf(if_name + 1, "%lu", scope_id);
strcat(dest, if_name);
@@ -1916,10 +2007,154 @@ int inet_pton(int af, const char* src, void* dest,
unsigned long* scope_id, boost::system::error_code& ec)
{
clear_last_error();
-#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ using namespace std; // For sscanf.
+ unsigned char* bytes = static_cast<unsigned char*>(dest);
+ if (af == BOOST_ASIO_OS_DEF(AF_INET))
+ {
+ unsigned int b0, b1, b2, b3;
+ if (sscanf_s(src, "%u.%u.%u.%u", &b0, &b1, &b2, &b3) != 4)
+ {
+ ec = boost::asio::error::invalid_argument;
+ return -1;
+ }
+ if (b0 > 255 || b1 > 255 || b2 > 255 || b3 > 255)
+ {
+ ec = boost::asio::error::invalid_argument;
+ return -1;
+ }
+ bytes[0] = static_cast<unsigned char>(b0);
+ bytes[1] = static_cast<unsigned char>(b1);
+ bytes[2] = static_cast<unsigned char>(b2);
+ bytes[3] = static_cast<unsigned char>(b3);
+ ec = boost::system::error_code();
+ return 1;
+ }
+ else if (af == BOOST_ASIO_OS_DEF(AF_INET6))
+ {
+ unsigned char* bytes = static_cast<unsigned char*>(dest);
+ std::memset(bytes, 0, 16);
+ unsigned char back_bytes[16] = { 0 };
+ int num_front_bytes = 0, num_back_bytes = 0;
+ const char* p = src;
+
+ enum { fword, fcolon, bword, scope, done } state = fword;
+ unsigned long current_word = 0;
+ while (state != done)
+ {
+ if (current_word > 0xFFFF)
+ {
+ ec = boost::asio::error::invalid_argument;
+ return -1;
+ }
+
+ switch (state)
+ {
+ case fword:
+ if (*p >= '0' && *p <= '9')
+ current_word = current_word * 16 + *p++ - '0';
+ else if (*p >= 'a' && *p <= 'f')
+ current_word = current_word * 16 + *p++ - 'a' + 10;
+ else if (*p >= 'A' && *p <= 'F')
+ current_word = current_word * 16 + *p++ - 'A' + 10;
+ else
+ {
+ if (num_front_bytes == 16)
+ {
+ ec = boost::asio::error::invalid_argument;
+ return -1;
+ }
+
+ bytes[num_front_bytes++] = (current_word >> 8) & 0xFF;
+ bytes[num_front_bytes++] = current_word & 0xFF;
+ current_word = 0;
+
+ if (*p == ':')
+ state = fcolon, ++p;
+ else if (*p == '%')
+ state = scope, ++p;
+ else if (*p == 0)
+ state = done;
+ else
+ {
+ ec = boost::asio::error::invalid_argument;
+ return -1;
+ }
+ }
+ break;
+
+ case fcolon:
+ if (*p == ':')
+ state = bword, ++p;
+ else
+ state = fword;
+ break;
+
+ case bword:
+ if (*p >= '0' && *p <= '9')
+ current_word = current_word * 16 + *p++ - '0';
+ else if (*p >= 'a' && *p <= 'f')
+ current_word = current_word * 16 + *p++ - 'a' + 10;
+ else if (*p >= 'A' && *p <= 'F')
+ current_word = current_word * 16 + *p++ - 'A' + 10;
+ else
+ {
+ if (num_front_bytes + num_back_bytes == 16)
+ {
+ ec = boost::asio::error::invalid_argument;
+ return -1;
+ }
+
+ back_bytes[num_back_bytes++] = (current_word >> 8) & 0xFF;
+ back_bytes[num_back_bytes++] = current_word & 0xFF;
+ current_word = 0;
+
+ if (*p == ':')
+ state = bword, ++p;
+ else if (*p == '%')
+ state = scope, ++p;
+ else if (*p == 0)
+ state = done;
+ else
+ {
+ ec = boost::asio::error::invalid_argument;
+ return -1;
+ }
+ }
+ break;
+
+ case scope:
+ if (*p >= '0' && *p <= '9')
+ current_word = current_word * 10 + *p++ - '0';
+ else if (*p == 0)
+ *scope_id = current_word, state = done;
+ else
+ {
+ ec = boost::asio::error::invalid_argument;
+ return -1;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ for (int i = 0; i < num_back_bytes; ++i)
+ bytes[16 - num_back_bytes + i] = back_bytes[i];
+
+ ec = boost::system::error_code();
+ return 1;
+ }
+ else
+ {
+ ec = boost::asio::error::address_family_not_supported;
+ return -1;
+ }
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
using namespace std; // For memcpy and strcmp.
- if (af != AF_INET && af != AF_INET6)
+ if (af != BOOST_ASIO_OS_DEF(AF_INET) && af != BOOST_ASIO_OS_DEF(AF_INET6))
{
ec = boost::asio::error::address_family_not_supported;
return -1;
@@ -1933,7 +2168,7 @@ int inet_pton(int af, const char* src, void* dest,
sockaddr_in6_type v6;
} address;
int address_length = sizeof(sockaddr_storage_type);
-#if defined(BOOST_NO_ANSI_APIS)
+#if defined(BOOST_NO_ANSI_APIS) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
int num_wide_chars = strlen(src) + 1;
LPWSTR wide_buffer = (LPWSTR)_alloca(num_wide_chars * sizeof(WCHAR));
::MultiByteToWideChar(CP_ACP, 0, src, -1, wide_buffer, num_wide_chars);
@@ -1944,7 +2179,7 @@ int inet_pton(int af, const char* src, void* dest,
const_cast<char*>(src), af, 0, &address.base, &address_length), ec);
#endif
- if (af == AF_INET)
+ if (af == BOOST_ASIO_OS_DEF(AF_INET))
{
if (result != socket_error_retval)
{
@@ -1980,7 +2215,7 @@ int inet_pton(int af, const char* src, void* dest,
int result = error_wrapper(::inet_pton(af, src, dest), ec);
if (result <= 0 && !ec)
ec = boost::asio::error::invalid_argument;
- if (result > 0 && af == AF_INET6 && scope_id)
+ if (result > 0 && af == BOOST_ASIO_OS_DEF(AF_INET6) && scope_id)
{
using namespace std; // For strchr and atoi.
*scope_id = 0;
@@ -1989,7 +2224,9 @@ int inet_pton(int af, const char* src, void* dest,
in6_addr_type* ipv6_address = static_cast<in6_addr_type*>(dest);
bool is_link_local = ((ipv6_address->s6_addr[0] == 0xfe)
&& ((ipv6_address->s6_addr[1] & 0xc0) == 0x80));
- if (is_link_local)
+ bool is_multicast_link_local = ((ipv6_address->s6_addr[0] == 0xff)
+ && ((ipv6_address->s6_addr[1] & 0x0f) == 0x02));
+ if (is_link_local || is_multicast_link_local)
*scope_id = if_nametoindex(if_name + 1);
if (*scope_id == 0)
*scope_id = atoi(if_name + 1);
@@ -2002,16 +2239,48 @@ int inet_pton(int af, const char* src, void* dest,
int gethostname(char* name, int namelen, boost::system::error_code& ec)
{
clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ try
+ {
+ using namespace Windows::Foundation::Collections;
+ using namespace Windows::Networking;
+ using namespace Windows::Networking::Connectivity;
+ IVectorView<HostName^>^ hostnames = NetworkInformation::GetHostNames();
+ for (unsigned i = 0; i < hostnames->Size; ++i)
+ {
+ HostName^ hostname = hostnames->GetAt(i);
+ if (hostname->Type == HostNameType::DomainName)
+ {
+ std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
+ std::string raw_name = converter.to_bytes(hostname->RawName->Data());
+ if (namelen > 0 && raw_name.size() < static_cast<std::size_t>(namelen))
+ {
+ strcpy_s(name, namelen, raw_name.c_str());
+ return 0;
+ }
+ }
+ }
+ return -1;
+ }
+ catch (Platform::Exception^ e)
+ {
+ ec = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ return -1;
+ }
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
int result = error_wrapper(::gethostname(name, namelen), ec);
-#if defined(BOOST_ASIO_WINDOWS)
+# if defined(BOOST_ASIO_WINDOWS)
if (result == 0)
ec = boost::system::error_code();
-#endif
+# endif // defined(BOOST_ASIO_WINDOWS)
return result;
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
}
-#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) \
- || defined(__MACH__) && defined(__APPLE__)
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#if !defined(BOOST_ASIO_HAS_GETADDRINFO)
// The following functions are only needed for emulation of getaddrinfo and
// getnameinfo.
@@ -2087,7 +2356,7 @@ inline hostent* gethostbyname(const char* name, int af, struct hostent* result,
(void)(buffer);
(void)(buflength);
(void)(ai_flags);
- if (af != AF_INET)
+ if (af != BOOST_ASIO_OS_DEF(AF_INET))
{
ec = boost::asio::error::address_family_not_supported;
return 0;
@@ -2100,7 +2369,7 @@ inline hostent* gethostbyname(const char* name, int af, struct hostent* result,
return result;
#elif defined(__sun) || defined(__QNX__)
(void)(ai_flags);
- if (af != AF_INET)
+ if (af != BOOST_ASIO_OS_DEF(AF_INET))
{
ec = boost::asio::error::address_family_not_supported;
return 0;
@@ -2125,7 +2394,7 @@ inline hostent* gethostbyname(const char* name, int af, struct hostent* result,
return retval;
#else
(void)(ai_flags);
- if (af != AF_INET)
+ if (af != BOOST_ASIO_OS_DEF(AF_INET))
{
ec = boost::asio::error::address_family_not_supported;
return 0;
@@ -2170,22 +2439,22 @@ inline int gai_nsearch(const char* host,
// No host and AI_PASSIVE implies wildcard bind.
switch (hints->ai_family)
{
- case AF_INET:
+ case BOOST_ASIO_OS_DEF(AF_INET):
search[search_count].host = "0.0.0.0";
- search[search_count].family = AF_INET;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
++search_count;
break;
- case AF_INET6:
+ case BOOST_ASIO_OS_DEF(AF_INET6):
search[search_count].host = "0::0";
- search[search_count].family = AF_INET6;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
++search_count;
break;
- case AF_UNSPEC:
+ case BOOST_ASIO_OS_DEF(AF_UNSPEC):
search[search_count].host = "0::0";
- search[search_count].family = AF_INET6;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
++search_count;
search[search_count].host = "0.0.0.0";
- search[search_count].family = AF_INET;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
++search_count;
break;
default:
@@ -2197,22 +2466,22 @@ inline int gai_nsearch(const char* host,
// No host and not AI_PASSIVE means connect to local host.
switch (hints->ai_family)
{
- case AF_INET:
+ case BOOST_ASIO_OS_DEF(AF_INET):
search[search_count].host = "localhost";
- search[search_count].family = AF_INET;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
++search_count;
break;
- case AF_INET6:
+ case BOOST_ASIO_OS_DEF(AF_INET6):
search[search_count].host = "localhost";
- search[search_count].family = AF_INET6;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
++search_count;
break;
- case AF_UNSPEC:
+ case BOOST_ASIO_OS_DEF(AF_UNSPEC):
search[search_count].host = "localhost";
- search[search_count].family = AF_INET6;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
++search_count;
search[search_count].host = "localhost";
- search[search_count].family = AF_INET;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
++search_count;
break;
default:
@@ -2225,22 +2494,22 @@ inline int gai_nsearch(const char* host,
// Host is specified.
switch (hints->ai_family)
{
- case AF_INET:
+ case BOOST_ASIO_OS_DEF(AF_INET):
search[search_count].host = host;
- search[search_count].family = AF_INET;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
++search_count;
break;
- case AF_INET6:
+ case BOOST_ASIO_OS_DEF(AF_INET6):
search[search_count].host = host;
- search[search_count].family = AF_INET6;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
++search_count;
break;
- case AF_UNSPEC:
+ case BOOST_ASIO_OS_DEF(AF_UNSPEC):
search[search_count].host = host;
- search[search_count].family = AF_INET6;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
++search_count;
search[search_count].host = host;
- search[search_count].family = AF_INET;
+ search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
++search_count;
break;
default:
@@ -2300,23 +2569,23 @@ inline int gai_aistruct(addrinfo_type*** next, const addrinfo_type* hints,
switch (ai->ai_family)
{
- case AF_INET:
+ case BOOST_ASIO_OS_DEF(AF_INET):
{
sockaddr_in4_type* sinptr = gai_alloc<sockaddr_in4_type>();
if (sinptr == 0)
return EAI_MEMORY;
- sinptr->sin_family = AF_INET;
+ sinptr->sin_family = BOOST_ASIO_OS_DEF(AF_INET);
memcpy(&sinptr->sin_addr, addr, sizeof(in4_addr_type));
ai->ai_addr = reinterpret_cast<sockaddr*>(sinptr);
ai->ai_addrlen = sizeof(sockaddr_in4_type);
break;
}
- case AF_INET6:
+ case BOOST_ASIO_OS_DEF(AF_INET6):
{
sockaddr_in6_type* sin6ptr = gai_alloc<sockaddr_in6_type>();
if (sin6ptr == 0)
return EAI_MEMORY;
- sin6ptr->sin6_family = AF_INET6;
+ sin6ptr->sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
memcpy(&sin6ptr->sin6_addr, addr, sizeof(in6_addr_type));
ai->ai_addr = reinterpret_cast<sockaddr*>(sin6ptr);
ai->ai_addrlen = sizeof(sockaddr_in6_type);
@@ -2378,7 +2647,7 @@ inline int gai_port(addrinfo_type* aihead, int port, int socktype)
switch (ai->ai_family)
{
- case AF_INET:
+ case BOOST_ASIO_OS_DEF(AF_INET):
{
sockaddr_in4_type* sinptr =
reinterpret_cast<sockaddr_in4_type*>(ai->ai_addr);
@@ -2386,7 +2655,7 @@ inline int gai_port(addrinfo_type* aihead, int port, int socktype)
++num_found;
break;
}
- case AF_INET6:
+ case BOOST_ASIO_OS_DEF(AF_INET6):
{
sockaddr_in6_type* sin6ptr =
reinterpret_cast<sockaddr_in6_type*>(ai->ai_addr);
@@ -2495,10 +2764,10 @@ inline int gai_echeck(const char* host, const char* service,
// Check combination of family and socket type.
switch (family)
{
- case AF_UNSPEC:
+ case BOOST_ASIO_OS_DEF(AF_UNSPEC):
break;
- case AF_INET:
- case AF_INET6:
+ case BOOST_ASIO_OS_DEF(AF_INET):
+ case BOOST_ASIO_OS_DEF(AF_INET6):
if (service != 0 && service[0] != '\0')
if (socktype != 0 && socktype != SOCK_STREAM && socktype != SOCK_DGRAM)
return EAI_SOCKTYPE;
@@ -2533,18 +2802,18 @@ inline int getaddrinfo_emulation(const char* host, const char* service,
// Supply default hints if not specified by caller.
addrinfo_type hints = addrinfo_type();
- hints.ai_family = AF_UNSPEC;
+ hints.ai_family = BOOST_ASIO_OS_DEF(AF_UNSPEC);
if (hintsp)
hints = *hintsp;
// If the resolution is not specifically for AF_INET6, remove the AI_V4MAPPED
// and AI_ALL flags.
#if defined(AI_V4MAPPED)
- if (hints.ai_family != AF_INET6)
+ if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET6))
hints.ai_flags &= ~AI_V4MAPPED;
#endif
#if defined(AI_ALL)
- if (hints.ai_family != AF_INET6)
+ if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET6))
hints.ai_flags &= ~AI_ALL;
#endif
@@ -2564,17 +2833,19 @@ inline int getaddrinfo_emulation(const char* host, const char* service,
// Check for IPv4 dotted decimal string.
in4_addr_type inaddr;
boost::system::error_code ec;
- if (socket_ops::inet_pton(AF_INET, sptr->host, &inaddr, 0, ec) == 1)
+ if (socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET),
+ sptr->host, &inaddr, 0, ec) == 1)
{
- if (hints.ai_family != AF_UNSPEC && hints.ai_family != AF_INET)
+ if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_UNSPEC)
+ && hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET))
{
freeaddrinfo_emulation(aihead);
gai_free(canon);
return EAI_FAMILY;
}
- if (sptr->family == AF_INET)
+ if (sptr->family == BOOST_ASIO_OS_DEF(AF_INET))
{
- rc = gai_aistruct(&ainext, &hints, &inaddr, AF_INET);
+ rc = gai_aistruct(&ainext, &hints, &inaddr, BOOST_ASIO_OS_DEF(AF_INET));
if (rc != 0)
{
freeaddrinfo_emulation(aihead);
@@ -2587,17 +2858,20 @@ inline int getaddrinfo_emulation(const char* host, const char* service,
// Check for IPv6 hex string.
in6_addr_type in6addr;
- if (socket_ops::inet_pton(AF_INET6, sptr->host, &in6addr, 0, ec) == 1)
+ if (socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET6),
+ sptr->host, &in6addr, 0, ec) == 1)
{
- if (hints.ai_family != AF_UNSPEC && hints.ai_family != AF_INET6)
+ if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_UNSPEC)
+ && hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET6))
{
freeaddrinfo_emulation(aihead);
gai_free(canon);
return EAI_FAMILY;
}
- if (sptr->family == AF_INET6)
+ if (sptr->family == BOOST_ASIO_OS_DEF(AF_INET6))
{
- rc = gai_aistruct(&ainext, &hints, &in6addr, AF_INET6);
+ rc = gai_aistruct(&ainext, &hints, &in6addr,
+ BOOST_ASIO_OS_DEF(AF_INET6));
if (rc != 0)
{
freeaddrinfo_emulation(aihead);
@@ -2634,7 +2908,8 @@ inline int getaddrinfo_emulation(const char* host, const char* service,
}
// Check for address family mismatch if one was specified.
- if (hints.ai_family != AF_UNSPEC && hints.ai_family != hptr->h_addrtype)
+ if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_UNSPEC)
+ && hints.ai_family != hptr->h_addrtype)
{
freeaddrinfo_emulation(aihead);
gai_free(canon);
@@ -2730,7 +3005,7 @@ inline boost::system::error_code getnameinfo_emulation(
unsigned short port;
switch (sa->sa_family)
{
- case AF_INET:
+ case BOOST_ASIO_OS_DEF(AF_INET):
if (salen != sizeof(sockaddr_in4_type))
{
return ec = boost::asio::error::invalid_argument;
@@ -2740,7 +3015,7 @@ inline boost::system::error_code getnameinfo_emulation(
addr_len = sizeof(in4_addr_type);
port = reinterpret_cast<const sockaddr_in4_type*>(sa)->sin_port;
break;
- case AF_INET6:
+ case BOOST_ASIO_OS_DEF(AF_INET6):
if (salen != sizeof(sockaddr_in6_type))
{
return ec = boost::asio::error::invalid_argument;
@@ -2846,8 +3121,7 @@ inline boost::system::error_code getnameinfo_emulation(
return ec;
}
-#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
- // || defined(__MACH__) && defined(__APPLE__)
+#endif // !defined(BOOST_ASIO_HAS_GETADDRINFO)
inline boost::system::error_code translate_addrinfo_error(int error)
{
@@ -2896,7 +3170,7 @@ boost::system::error_code getaddrinfo(const char* host,
service = (service && *service) ? service : 0;
clear_last_error();
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
-# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501) || defined(UNDER_CE)
+# if defined(BOOST_ASIO_HAS_GETADDRINFO)
// Building for Windows XP, Windows Server 2003, or later.
int error = ::getaddrinfo(host, service, &hints, result);
return ec = translate_addrinfo_error(error);
@@ -2915,7 +3189,7 @@ boost::system::error_code getaddrinfo(const char* host,
int error = getaddrinfo_emulation(host, service, &hints, result);
return ec = translate_addrinfo_error(error);
# endif
-#elif defined(__MACH__) && defined(__APPLE__)
+#elif !defined(BOOST_ASIO_HAS_GETADDRINFO)
int error = getaddrinfo_emulation(host, service, &hints, result);
return ec = translate_addrinfo_error(error);
#else
@@ -2939,7 +3213,7 @@ boost::system::error_code background_getaddrinfo(
void freeaddrinfo(addrinfo_type* ai)
{
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
-# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501) || defined(UNDER_CE)
+# if defined(BOOST_ASIO_HAS_GETADDRINFO)
// Building for Windows XP, Windows Server 2003, or later.
::freeaddrinfo(ai);
# else
@@ -2955,7 +3229,7 @@ void freeaddrinfo(addrinfo_type* ai)
}
freeaddrinfo_emulation(ai);
# endif
-#elif defined(__MACH__) && defined(__APPLE__)
+#elif !defined(BOOST_ASIO_HAS_GETADDRINFO)
freeaddrinfo_emulation(ai);
#else
::freeaddrinfo(ai);
@@ -2967,7 +3241,7 @@ boost::system::error_code getnameinfo(const socket_addr_type* addr,
char* serv, std::size_t servlen, int flags, boost::system::error_code& ec)
{
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
-# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501) || defined(UNDER_CE)
+# if defined(BOOST_ASIO_HAS_GETADDRINFO)
// Building for Windows XP, Windows Server 2003, or later.
clear_last_error();
int error = ::getnameinfo(addr, static_cast<socklen_t>(addrlen),
@@ -2993,7 +3267,7 @@ boost::system::error_code getnameinfo(const socket_addr_type* addr,
return getnameinfo_emulation(addr, addrlen,
host, hostlen, serv, servlen, flags, ec);
# endif
-#elif defined(__MACH__) && defined(__APPLE__)
+#elif !defined(BOOST_ASIO_HAS_GETADDRINFO)
using namespace std; // For memcpy.
sockaddr_storage_type tmp_addr;
memcpy(&tmp_addr, addr, addrlen);
@@ -3055,24 +3329,60 @@ boost::system::error_code background_getnameinfo(
return ec;
}
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
u_long_type network_to_host_long(u_long_type value)
{
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
+ u_long_type result = (static_cast<u_long_type>(value_p[0]) << 24)
+ | (static_cast<u_long_type>(value_p[1]) << 16)
+ | (static_cast<u_long_type>(value_p[2]) << 8)
+ | static_cast<u_long_type>(value_p[3]);
+ return result;
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
return ntohl(value);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
}
u_long_type host_to_network_long(u_long_type value)
{
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ u_long_type result;
+ unsigned char* result_p = reinterpret_cast<unsigned char*>(&result);
+ result_p[0] = static_cast<unsigned char>((value >> 24) & 0xFF);
+ result_p[1] = static_cast<unsigned char>((value >> 16) & 0xFF);
+ result_p[2] = static_cast<unsigned char>((value >> 8) & 0xFF);
+ result_p[3] = static_cast<unsigned char>(value & 0xFF);
+ return result;
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
return htonl(value);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
}
u_short_type network_to_host_short(u_short_type value)
{
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
+ u_short_type result = (static_cast<u_long_type>(value_p[0]) << 8)
+ | static_cast<u_long_type>(value_p[1]);
+ return result;
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
return ntohs(value);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
}
u_short_type host_to_network_short(u_short_type value)
{
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ u_long_type result;
+ unsigned char* result_p = reinterpret_cast<unsigned char*>(&result);
+ result_p[0] = static_cast<unsigned char>((value >> 8) & 0xFF);
+ result_p[1] = static_cast<unsigned char>(value & 0xFF);
+ return result;
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
return htons(value);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
}
} // namespace socket_ops
diff --git a/3party/boost/boost/asio/detail/impl/socket_select_interrupter.ipp b/3party/boost/boost/asio/detail/impl/socket_select_interrupter.ipp
index f9ce5fde6a..e2dedc7c2f 100644
--- a/3party/boost/boost/asio/detail/impl/socket_select_interrupter.ipp
+++ b/3party/boost/boost/asio/detail/impl/socket_select_interrupter.ipp
@@ -2,7 +2,7 @@
// detail/impl/socket_select_interrupter.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,6 +17,8 @@
#include <boost/asio/detail/config.hpp>
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#if defined(BOOST_ASIO_WINDOWS) \
|| defined(__CYGWIN__) \
|| defined(__SYMBIAN32__)
@@ -57,7 +59,7 @@ void socket_select_interrupter::open_descriptors()
std::size_t addr_len = sizeof(addr);
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = inet_addr("127.0.0.1");
+ addr.sin_addr.s_addr = socket_ops::host_to_network_long(INADDR_LOOPBACK);
addr.sin_port = 0;
if (socket_ops::bind(acceptor.get(), (const socket_addr_type*)&addr,
addr_len, ec) == socket_error_retval)
@@ -70,7 +72,7 @@ void socket_select_interrupter::open_descriptors()
// Some broken firewalls on Windows will intermittently cause getsockname to
// return 0.0.0.0 when the socket is actually bound to 127.0.0.1. We
// explicitly specify the target address here to work around this problem.
- addr.sin_addr.s_addr = inet_addr("127.0.0.1");
+ addr.sin_addr.s_addr = socket_ops::host_to_network_long(INADDR_LOOPBACK);
if (socket_ops::listen(acceptor.get(),
SOMAXCONN, ec) == socket_error_retval)
@@ -170,4 +172,6 @@ bool socket_select_interrupter::reset()
// || defined(__CYGWIN__)
// || defined(__SYMBIAN32__)
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#endif // BOOST_ASIO_DETAIL_IMPL_SOCKET_SELECT_INTERRUPTER_IPP
diff --git a/3party/boost/boost/asio/detail/impl/strand_service.hpp b/3party/boost/boost/asio/detail/impl/strand_service.hpp
index 25b542f80e..17227f9ed6 100644
--- a/3party/boost/boost/asio/detail/impl/strand_service.hpp
+++ b/3party/boost/boost/asio/detail/impl/strand_service.hpp
@@ -2,7 +2,7 @@
// detail/impl/strand_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/strand_service.ipp b/3party/boost/boost/asio/detail/impl/strand_service.ipp
index 2a04a51191..9af01287af 100644
--- a/3party/boost/boost/asio/detail/impl/strand_service.ipp
+++ b/3party/boost/boost/asio/detail/impl/strand_service.ipp
@@ -2,7 +2,7 @@
// detail/impl/strand_service.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/task_io_service.hpp b/3party/boost/boost/asio/detail/impl/task_io_service.hpp
index f222cde43c..4312de72f6 100644
--- a/3party/boost/boost/asio/detail/impl/task_io_service.hpp
+++ b/3party/boost/boost/asio/detail/impl/task_io_service.hpp
@@ -2,7 +2,7 @@
// detail/impl/task_io_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/task_io_service.ipp b/3party/boost/boost/asio/detail/impl/task_io_service.ipp
index 957e095dd6..e58e11e5e3 100644
--- a/3party/boost/boost/asio/detail/impl/task_io_service.ipp
+++ b/3party/boost/boost/asio/detail/impl/task_io_service.ipp
@@ -2,7 +2,7 @@
// detail/impl/task_io_service.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -95,8 +95,7 @@ task_io_service::task_io_service(
task_interrupted_(true),
outstanding_work_(0),
stopped_(false),
- shutdown_(false),
- first_idle_thread_(0)
+ shutdown_(false)
{
BOOST_ASIO_HANDLER_TRACKING_INIT;
}
@@ -141,10 +140,7 @@ std::size_t task_io_service::run(boost::system::error_code& ec)
}
thread_info this_thread;
- event wakeup_event;
- this_thread.wakeup_event = &wakeup_event;
this_thread.private_outstanding_work = 0;
- this_thread.next = 0;
thread_call_stack::context ctx(this, this_thread);
mutex::scoped_lock lock(mutex_);
@@ -166,10 +162,7 @@ std::size_t task_io_service::run_one(boost::system::error_code& ec)
}
thread_info this_thread;
- event wakeup_event;
- this_thread.wakeup_event = &wakeup_event;
this_thread.private_outstanding_work = 0;
- this_thread.next = 0;
thread_call_stack::context ctx(this, this_thread);
mutex::scoped_lock lock(mutex_);
@@ -187,9 +180,7 @@ std::size_t task_io_service::poll(boost::system::error_code& ec)
}
thread_info this_thread;
- this_thread.wakeup_event = 0;
this_thread.private_outstanding_work = 0;
- this_thread.next = 0;
thread_call_stack::context ctx(this, this_thread);
mutex::scoped_lock lock(mutex_);
@@ -220,9 +211,7 @@ std::size_t task_io_service::poll_one(boost::system::error_code& ec)
}
thread_info this_thread;
- this_thread.wakeup_event = 0;
this_thread.private_outstanding_work = 0;
- this_thread.next = 0;
thread_call_stack::context ctx(this, this_thread);
mutex::scoped_lock lock(mutex_);
@@ -270,6 +259,8 @@ void task_io_service::post_immediate_completion(
return;
}
}
+#else // defined(BOOST_ASIO_HAS_THREADS)
+ (void)is_continuation;
#endif // defined(BOOST_ASIO_HAS_THREADS)
work_started();
@@ -352,10 +343,7 @@ std::size_t task_io_service::do_run_one(mutex::scoped_lock& lock,
task_interrupted_ = more_handlers;
if (more_handlers && !one_thread_)
- {
- if (!wake_one_idle_thread_and_unlock(lock))
- lock.unlock();
- }
+ wakeup_event_.unlock_and_signal_one(lock);
else
lock.unlock();
@@ -388,11 +376,8 @@ std::size_t task_io_service::do_run_one(mutex::scoped_lock& lock,
}
else
{
- // Nothing to run right now, so just wait for work to do.
- this_thread.next = first_idle_thread_;
- first_idle_thread_ = &this_thread;
- this_thread.wakeup_event->clear(lock);
- this_thread.wakeup_event->wait(lock);
+ wakeup_event_.clear(lock);
+ wakeup_event_.wait(lock);
}
}
@@ -425,7 +410,7 @@ std::size_t task_io_service::do_poll_one(mutex::scoped_lock& lock,
o = op_queue_.front();
if (o == &task_operation_)
{
- wake_one_idle_thread_and_unlock(lock);
+ wakeup_event_.maybe_unlock_and_signal_one(lock);
return 0;
}
}
@@ -457,14 +442,7 @@ void task_io_service::stop_all_threads(
mutex::scoped_lock& lock)
{
stopped_ = true;
-
- while (first_idle_thread_)
- {
- thread_info* idle_thread = first_idle_thread_;
- first_idle_thread_ = idle_thread->next;
- idle_thread->next = 0;
- idle_thread->wakeup_event->signal(lock);
- }
+ wakeup_event_.signal_all(lock);
if (!task_interrupted_ && task_)
{
@@ -473,24 +451,10 @@ void task_io_service::stop_all_threads(
}
}
-bool task_io_service::wake_one_idle_thread_and_unlock(
- mutex::scoped_lock& lock)
-{
- if (first_idle_thread_)
- {
- thread_info* idle_thread = first_idle_thread_;
- first_idle_thread_ = idle_thread->next;
- idle_thread->next = 0;
- idle_thread->wakeup_event->signal_and_unlock(lock);
- return true;
- }
- return false;
-}
-
void task_io_service::wake_one_thread_and_unlock(
mutex::scoped_lock& lock)
{
- if (!wake_one_idle_thread_and_unlock(lock))
+ if (!wakeup_event_.maybe_unlock_and_signal_one(lock))
{
if (!task_interrupted_ && task_)
{
diff --git a/3party/boost/boost/asio/detail/impl/throw_error.ipp b/3party/boost/boost/asio/detail/impl/throw_error.ipp
index 193be0b8a2..5f6ed39ac7 100644
--- a/3party/boost/boost/asio/detail/impl/throw_error.ipp
+++ b/3party/boost/boost/asio/detail/impl/throw_error.ipp
@@ -2,7 +2,7 @@
// detail/impl/throw_error.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/timer_queue_ptime.ipp b/3party/boost/boost/asio/detail/impl/timer_queue_ptime.ipp
index 1167f98f8d..3b16defc6e 100644
--- a/3party/boost/boost/asio/detail/impl/timer_queue_ptime.ipp
+++ b/3party/boost/boost/asio/detail/impl/timer_queue_ptime.ipp
@@ -2,7 +2,7 @@
// detail/impl/timer_queue_ptime.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/timer_queue_set.ipp b/3party/boost/boost/asio/detail/impl/timer_queue_set.ipp
index bf23b49cbf..19b770b37c 100644
--- a/3party/boost/boost/asio/detail/impl/timer_queue_set.ipp
+++ b/3party/boost/boost/asio/detail/impl/timer_queue_set.ipp
@@ -2,7 +2,7 @@
// detail/impl/timer_queue_set.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/win_event.ipp b/3party/boost/boost/asio/detail/impl/win_event.ipp
index 58f235e80a..a004c09689 100644
--- a/3party/boost/boost/asio/detail/impl/win_event.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_event.ipp
@@ -2,7 +2,7 @@
// detail/win_event.ipp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -30,15 +30,32 @@ namespace asio {
namespace detail {
win_event::win_event()
- : event_(::CreateEvent(0, true, false, 0))
+ : state_(0)
{
- if (!event_)
+ events_[0] = ::CreateEvent(0, true, false, 0);
+ if (!events_[0])
{
DWORD last_error = ::GetLastError();
boost::system::error_code ec(last_error,
boost::asio::error::get_system_category());
boost::asio::detail::throw_error(ec, "event");
}
+
+ events_[1] = ::CreateEvent(0, false, false, 0);
+ if (!events_[1])
+ {
+ DWORD last_error = ::GetLastError();
+ ::CloseHandle(events_[0]);
+ boost::system::error_code ec(last_error,
+ boost::asio::error::get_system_category());
+ boost::asio::detail::throw_error(ec, "event");
+ }
+}
+
+win_event::~win_event()
+{
+ ::CloseHandle(events_[0]);
+ ::CloseHandle(events_[1]);
}
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp b/3party/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp
index 604b019d7e..04a6791c0d 100644
--- a/3party/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp
@@ -2,7 +2,7 @@
// detail/impl/win_iocp_handle_service.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -46,7 +46,8 @@ public:
// As documented in GetQueuedCompletionStatus, setting the low order
// bit of this event prevents our synchronous writes from being treated
// as completion port events.
- *reinterpret_cast<DWORD_PTR*>(&hEvent) |= 1;
+ DWORD_PTR tmp = reinterpret_cast<DWORD_PTR>(hEvent);
+ hEvent = reinterpret_cast<HANDLE>(tmp | 1);
}
else
{
@@ -449,7 +450,7 @@ size_t win_iocp_handle_service::do_read(
ec = boost::system::error_code(last_error,
boost::asio::error::get_system_category());
}
- return 0;
+ return (last_error == ERROR_MORE_DATA) ? bytes_transferred : 0;
}
ec = boost::system::error_code();
diff --git a/3party/boost/boost/asio/detail/impl/win_iocp_io_service.hpp b/3party/boost/boost/asio/detail/impl/win_iocp_io_service.hpp
index 26b4ab14e5..201a17e67d 100644
--- a/3party/boost/boost/asio/detail/impl/win_iocp_io_service.hpp
+++ b/3party/boost/boost/asio/detail/impl/win_iocp_io_service.hpp
@@ -2,7 +2,7 @@
// detail/impl/win_iocp_io_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/win_iocp_io_service.ipp b/3party/boost/boost/asio/detail/impl/win_iocp_io_service.ipp
index b63351efb5..fbc1cd0376 100644
--- a/3party/boost/boost/asio/detail/impl/win_iocp_io_service.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_iocp_io_service.ipp
@@ -2,7 +2,7 @@
// detail/impl/win_iocp_io_service.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 @@
#include <boost/asio/error.hpp>
#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/cstdint.hpp>
#include <boost/asio/detail/handler_alloc_helpers.hpp>
#include <boost/asio/detail/handler_invoke_helpers.hpp>
#include <boost/asio/detail/limits.hpp>
@@ -70,12 +71,14 @@ win_iocp_io_service::win_iocp_io_service(
stopped_(0),
stop_event_posted_(0),
shutdown_(0),
+ gqcs_timeout_(get_gqcs_timeout()),
dispatch_required_(0)
{
BOOST_ASIO_HANDLER_TRACKING_INIT;
iocp_.handle = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE, 0, 0,
- static_cast<DWORD>((std::min<size_t>)(concurrency_hint, DWORD(~0))));
+ static_cast<DWORD>(concurrency_hint < DWORD(~0)
+ ? concurrency_hint : DWORD(~0)));
if (!iocp_.handle)
{
DWORD last_error = ::GetLastError();
@@ -116,7 +119,7 @@ void win_iocp_io_service::shutdown_service()
dword_ptr_t completion_key = 0;
LPOVERLAPPED overlapped = 0;
::GetQueuedCompletionStatus(iocp_.handle, &bytes_transferred,
- &completion_key, &overlapped, gqcs_timeout);
+ &completion_key, &overlapped, gqcs_timeout_);
if (overlapped)
{
::InterlockedDecrement(&outstanding_work_);
@@ -283,7 +286,8 @@ void win_iocp_io_service::on_pending(win_iocp_operation* op)
if (::InterlockedCompareExchange(&op->ready_, 1, 0) == 1)
{
// Enqueue the operation on the I/O completion port.
- if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, op))
+ if (!::PostQueuedCompletionStatus(iocp_.handle,
+ 0, overlapped_contains_result, op))
{
// Out of resources. Put on completed queue instead.
mutex::scoped_lock lock(dispatch_mutex_);
@@ -361,7 +365,7 @@ size_t win_iocp_io_service::do_one(bool block, boost::system::error_code& ec)
LPOVERLAPPED overlapped = 0;
::SetLastError(0);
BOOL ok = ::GetQueuedCompletionStatus(iocp_.handle, &bytes_transferred,
- &completion_key, &overlapped, block ? gqcs_timeout : 0);
+ &completion_key, &overlapped, block ? gqcs_timeout_ : 0);
DWORD last_error = ::GetLastError();
if (overlapped)
@@ -452,6 +456,22 @@ size_t win_iocp_io_service::do_one(bool block, boost::system::error_code& ec)
}
}
+DWORD win_iocp_io_service::get_gqcs_timeout()
+{
+ OSVERSIONINFOEX osvi;
+ ZeroMemory(&osvi, sizeof(osvi));
+ osvi.dwOSVersionInfoSize = sizeof(osvi);
+ osvi.dwMajorVersion = 6ul;
+
+ const uint64_t condition_mask = ::VerSetConditionMask(
+ 0, VER_MAJORVERSION, VER_GREATER_EQUAL);
+
+ if (!!::VerifyVersionInfo(&osvi, VER_MAJORVERSION, condition_mask))
+ return INFINITE;
+
+ return default_gqcs_timeout;
+}
+
void win_iocp_io_service::do_add_timer_queue(timer_queue_base& queue)
{
mutex::scoped_lock lock(dispatch_mutex_);
diff --git a/3party/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp b/3party/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp
index e1ad2bbd7d..e3081afaae 100644
--- a/3party/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp
@@ -2,7 +2,7 @@
// detail/impl/win_iocp_serial_port_service.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp b/3party/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp
index 1c526fc8d3..40231b971d 100644
--- a/3party/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp
@@ -2,7 +2,7 @@
// detail/impl/win_iocp_socket_service_base.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -32,6 +32,7 @@ win_iocp_socket_service_base::win_iocp_socket_service_base(
: io_service_(io_service),
iocp_service_(use_service<win_iocp_io_service>(io_service)),
reactor_(0),
+ connect_ex_(0),
mutex_(),
impl_list_(0)
{
@@ -545,8 +546,51 @@ void win_iocp_socket_service_base::start_reactor_op(
void win_iocp_socket_service_base::start_connect_op(
win_iocp_socket_service_base::base_implementation_type& impl,
- reactor_op* op, const socket_addr_type* addr, std::size_t addrlen)
+ int family, int type, const socket_addr_type* addr,
+ std::size_t addrlen, win_iocp_socket_connect_op_base* op)
{
+ // If ConnectEx is available, use that.
+ if (family == BOOST_ASIO_OS_DEF(AF_INET)
+ || family == BOOST_ASIO_OS_DEF(AF_INET6))
+ {
+ if (connect_ex_fn connect_ex = get_connect_ex(impl, type))
+ {
+ union address_union
+ {
+ socket_addr_type base;
+ sockaddr_in4_type v4;
+ sockaddr_in6_type v6;
+ } a;
+
+ using namespace std; // For memset.
+ memset(&a, 0, sizeof(a));
+ a.base.sa_family = family;
+
+ socket_ops::bind(impl.socket_, &a.base,
+ family == BOOST_ASIO_OS_DEF(AF_INET)
+ ? sizeof(a.v4) : sizeof(a.v6), op->ec_);
+ if (op->ec_ && op->ec_ != boost::asio::error::invalid_argument)
+ {
+ iocp_service_.post_immediate_completion(op, false);
+ return;
+ }
+
+ op->connect_ex_ = true;
+ update_cancellation_thread_id(impl);
+ iocp_service_.work_started();
+
+ BOOL result = connect_ex(impl.socket_,
+ addr, static_cast<int>(addrlen), 0, 0, 0, op);
+ DWORD last_error = ::WSAGetLastError();
+ if (!result && last_error != WSA_IO_PENDING)
+ iocp_service_.on_completion(op, last_error);
+ else
+ iocp_service_.on_pending(op);
+ return;
+ }
+ }
+
+ // Otherwise, fall back to a reactor-based implementation.
reactor& r = get_reactor();
update_cancellation_thread_id(impl);
@@ -623,6 +667,35 @@ reactor& win_iocp_socket_service_base::get_reactor()
return *r;
}
+win_iocp_socket_service_base::connect_ex_fn
+win_iocp_socket_service_base::get_connect_ex(
+ win_iocp_socket_service_base::base_implementation_type& impl, int type)
+{
+ if (type != BOOST_ASIO_OS_DEF(SOCK_STREAM)
+ && type != BOOST_ASIO_OS_DEF(SOCK_SEQPACKET))
+ return 0;
+
+ void* ptr = interlocked_compare_exchange_pointer(&connect_ex_, 0, 0);
+ if (!ptr)
+ {
+ GUID guid = { 0x25a207b9, 0xddf3, 0x4660,
+ { 0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e } };
+
+ DWORD bytes = 0;
+ if (::WSAIoctl(impl.socket_, SIO_GET_EXTENSION_FUNCTION_POINTER,
+ &guid, sizeof(guid), &ptr, sizeof(ptr), &bytes, 0, 0) != 0)
+ {
+ // Set connect_ex_ to a special value to indicate that ConnectEx is
+ // unavailable. That way we won't bother trying to look it up again.
+ ptr = this;
+ }
+
+ interlocked_exchange_pointer(&connect_ex_, ptr);
+ }
+
+ return reinterpret_cast<connect_ex_fn>(ptr == this ? 0 : ptr);
+}
+
void* win_iocp_socket_service_base::interlocked_compare_exchange_pointer(
void** dest, void* exch, void* cmp)
{
diff --git a/3party/boost/boost/asio/detail/impl/win_mutex.ipp b/3party/boost/boost/asio/detail/impl/win_mutex.ipp
index f27fc73f8d..f86012ba46 100644
--- a/3party/boost/boost/asio/detail/impl/win_mutex.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_mutex.ipp
@@ -2,7 +2,7 @@
// detail/impl/win_mutex.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/win_object_handle_service.ipp b/3party/boost/boost/asio/detail/impl/win_object_handle_service.ipp
index 8925af8c50..081d5eb4b7 100644
--- a/3party/boost/boost/asio/detail/impl/win_object_handle_service.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_object_handle_service.ipp
@@ -2,7 +2,7 @@
// detail/impl/win_object_handle_service.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2011 Boris Schaeling (boris@highscore.de)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -421,7 +421,7 @@ void win_object_handle_service::wait_callback(PVOID param, BOOLEAN)
boost::system::error_code ec(last_error,
boost::asio::error::get_system_category());
- while (wait_op* op = impl->op_queue_.front())
+ while ((op = impl->op_queue_.front()) != 0)
{
op->ec_ = ec;
impl->op_queue_.pop();
diff --git a/3party/boost/boost/asio/detail/impl/win_static_mutex.ipp b/3party/boost/boost/asio/detail/impl/win_static_mutex.ipp
index 963fa5fe25..84bd45473c 100644
--- a/3party/boost/boost/asio/detail/impl/win_static_mutex.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_static_mutex.ipp
@@ -2,7 +2,7 @@
// detail/impl/win_static_mutex.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/win_thread.ipp b/3party/boost/boost/asio/detail/impl/win_thread.ipp
index 03cdddf8d5..4bf09c514b 100644
--- a/3party/boost/boost/asio/detail/impl/win_thread.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_thread.ipp
@@ -2,7 +2,7 @@
// detail/impl/win_thread.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/win_tss_ptr.ipp b/3party/boost/boost/asio/detail/impl/win_tss_ptr.ipp
index bbe5e3ca44..abaad277af 100644
--- a/3party/boost/boost/asio/detail/impl/win_tss_ptr.ipp
+++ b/3party/boost/boost/asio/detail/impl/win_tss_ptr.ipp
@@ -2,7 +2,7 @@
// detail/impl/win_tss_ptr.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/impl/winrt_ssocket_service_base.ipp b/3party/boost/boost/asio/detail/impl/winrt_ssocket_service_base.ipp
new file mode 100644
index 0000000000..fdd0465dda
--- /dev/null
+++ b/3party/boost/boost/asio/detail/impl/winrt_ssocket_service_base.ipp
@@ -0,0 +1,614 @@
+//
+// detail/impl/winrt_ssocket_service_base.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_IMPL_WINRT_SSOCKET_SERVICE_BASE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WINRT_SSOCKET_SERVICE_BASE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <cstring>
+#include <boost/asio/detail/winrt_ssocket_service_base.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/detail/winrt_utils.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+winrt_ssocket_service_base::winrt_ssocket_service_base(
+ boost::asio::io_service& io_service)
+ : io_service_(use_service<io_service_impl>(io_service)),
+ async_manager_(use_service<winrt_async_manager>(io_service)),
+ mutex_(),
+ impl_list_(0)
+{
+}
+
+void winrt_ssocket_service_base::shutdown_service()
+{
+ // Close all implementations, causing all operations to complete.
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
+ base_implementation_type* impl = impl_list_;
+ while (impl)
+ {
+ boost::system::error_code ignored_ec;
+ close(*impl, ignored_ec);
+ impl = impl->next_;
+ }
+}
+
+void winrt_ssocket_service_base::construct(
+ winrt_ssocket_service_base::base_implementation_type& impl)
+{
+ // Insert implementation into linked list of all implementations.
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
+ impl.next_ = impl_list_;
+ impl.prev_ = 0;
+ if (impl_list_)
+ impl_list_->prev_ = &impl;
+ impl_list_ = &impl;
+}
+
+void winrt_ssocket_service_base::base_move_construct(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ winrt_ssocket_service_base::base_implementation_type& other_impl)
+{
+ impl.socket_ = other_impl.socket_;
+ other_impl.socket_ = nullptr;
+
+ // Insert implementation into linked list of all implementations.
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
+ impl.next_ = impl_list_;
+ impl.prev_ = 0;
+ if (impl_list_)
+ impl_list_->prev_ = &impl;
+ impl_list_ = &impl;
+}
+
+void winrt_ssocket_service_base::base_move_assign(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ winrt_ssocket_service_base& other_service,
+ winrt_ssocket_service_base::base_implementation_type& other_impl)
+{
+ boost::system::error_code ignored_ec;
+ close(impl, ignored_ec);
+
+ if (this != &other_service)
+ {
+ // Remove implementation from linked list of all implementations.
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
+ if (impl_list_ == &impl)
+ impl_list_ = impl.next_;
+ if (impl.prev_)
+ impl.prev_->next_ = impl.next_;
+ if (impl.next_)
+ impl.next_->prev_= impl.prev_;
+ impl.next_ = 0;
+ impl.prev_ = 0;
+ }
+
+ impl.socket_ = other_impl.socket_;
+ other_impl.socket_ = nullptr;
+
+ if (this != &other_service)
+ {
+ // Insert implementation into linked list of all implementations.
+ boost::asio::detail::mutex::scoped_lock lock(other_service.mutex_);
+ impl.next_ = other_service.impl_list_;
+ impl.prev_ = 0;
+ if (other_service.impl_list_)
+ other_service.impl_list_->prev_ = &impl;
+ other_service.impl_list_ = &impl;
+ }
+}
+
+void winrt_ssocket_service_base::destroy(
+ winrt_ssocket_service_base::base_implementation_type& impl)
+{
+ boost::system::error_code ignored_ec;
+ close(impl, ignored_ec);
+
+ // Remove implementation from linked list of all implementations.
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
+ if (impl_list_ == &impl)
+ impl_list_ = impl.next_;
+ if (impl.prev_)
+ impl.prev_->next_ = impl.next_;
+ if (impl.next_)
+ impl.next_->prev_= impl.prev_;
+ impl.next_ = 0;
+ impl.prev_ = 0;
+}
+
+boost::system::error_code winrt_ssocket_service_base::close(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ boost::system::error_code& ec)
+{
+ if (impl.socket_)
+ {
+ delete impl.socket_;
+ impl.socket_ = nullptr;
+ }
+
+ ec = boost::system::error_code();
+ return ec;
+}
+
+std::size_t winrt_ssocket_service_base::do_get_endpoint(
+ const base_implementation_type& impl, bool local,
+ void* addr, std::size_t addr_len, boost::system::error_code& ec) const
+{
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return addr_len;
+ }
+
+ try
+ {
+ std::string addr_string = winrt_utils::string(local
+ ? impl.socket_->Information->LocalAddress->CanonicalName
+ : impl.socket_->Information->RemoteAddress->CanonicalName);
+ unsigned short port = winrt_utils::integer(local
+ ? impl.socket_->Information->LocalPort
+ : impl.socket_->Information->RemotePort);
+ unsigned long scope = 0;
+
+ switch (reinterpret_cast<const socket_addr_type*>(addr)->sa_family)
+ {
+ case BOOST_ASIO_OS_DEF(AF_INET):
+ if (addr_len < sizeof(sockaddr_in4_type))
+ {
+ ec = boost::asio::error::invalid_argument;
+ return addr_len;
+ }
+ else
+ {
+ socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET), addr_string.c_str(),
+ &reinterpret_cast<sockaddr_in4_type*>(addr)->sin_addr, &scope, ec);
+ reinterpret_cast<sockaddr_in4_type*>(addr)->sin_port
+ = socket_ops::host_to_network_short(port);
+ ec = boost::system::error_code();
+ return sizeof(sockaddr_in4_type);
+ }
+ case BOOST_ASIO_OS_DEF(AF_INET6):
+ if (addr_len < sizeof(sockaddr_in6_type))
+ {
+ ec = boost::asio::error::invalid_argument;
+ return addr_len;
+ }
+ else
+ {
+ socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET6), addr_string.c_str(),
+ &reinterpret_cast<sockaddr_in6_type*>(addr)->sin6_addr, &scope, ec);
+ reinterpret_cast<sockaddr_in6_type*>(addr)->sin6_port
+ = socket_ops::host_to_network_short(port);
+ ec = boost::system::error_code();
+ return sizeof(sockaddr_in6_type);
+ }
+ default:
+ ec = boost::asio::error::address_family_not_supported;
+ return addr_len;
+ }
+ }
+ catch (Platform::Exception^ e)
+ {
+ ec = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ return addr_len;
+ }
+}
+
+boost::system::error_code winrt_ssocket_service_base::do_set_option(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ int level, int optname, const void* optval,
+ std::size_t optlen, boost::system::error_code& ec)
+{
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return ec;
+ }
+
+ try
+ {
+ if (level == BOOST_ASIO_OS_DEF(SOL_SOCKET)
+ && optname == BOOST_ASIO_OS_DEF(SO_KEEPALIVE))
+ {
+ if (optlen == sizeof(int))
+ {
+ int value = 0;
+ std::memcpy(&value, optval, optlen);
+ impl.socket_->Control->KeepAlive = !!value;
+ ec = boost::system::error_code();
+ }
+ else
+ {
+ ec = boost::asio::error::invalid_argument;
+ }
+ }
+ else if (level == BOOST_ASIO_OS_DEF(IPPROTO_TCP)
+ && optname == BOOST_ASIO_OS_DEF(TCP_NODELAY))
+ {
+ if (optlen == sizeof(int))
+ {
+ int value = 0;
+ std::memcpy(&value, optval, optlen);
+ impl.socket_->Control->NoDelay = !!value;
+ ec = boost::system::error_code();
+ }
+ else
+ {
+ ec = boost::asio::error::invalid_argument;
+ }
+ }
+ else
+ {
+ ec = boost::asio::error::invalid_argument;
+ }
+ }
+ catch (Platform::Exception^ e)
+ {
+ ec = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ }
+
+ return ec;
+}
+
+void winrt_ssocket_service_base::do_get_option(
+ const winrt_ssocket_service_base::base_implementation_type& impl,
+ int level, int optname, void* optval,
+ std::size_t* optlen, boost::system::error_code& ec) const
+{
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return;
+ }
+
+ try
+ {
+ if (level == BOOST_ASIO_OS_DEF(SOL_SOCKET)
+ && optname == BOOST_ASIO_OS_DEF(SO_KEEPALIVE))
+ {
+ if (*optlen >= sizeof(int))
+ {
+ int value = impl.socket_->Control->KeepAlive ? 1 : 0;
+ std::memcpy(optval, &value, sizeof(int));
+ *optlen = sizeof(int);
+ ec = boost::system::error_code();
+ }
+ else
+ {
+ ec = boost::asio::error::invalid_argument;
+ }
+ }
+ else if (level == BOOST_ASIO_OS_DEF(IPPROTO_TCP)
+ && optname == BOOST_ASIO_OS_DEF(TCP_NODELAY))
+ {
+ if (*optlen >= sizeof(int))
+ {
+ int value = impl.socket_->Control->NoDelay ? 1 : 0;
+ std::memcpy(optval, &value, sizeof(int));
+ *optlen = sizeof(int);
+ ec = boost::system::error_code();
+ }
+ else
+ {
+ ec = boost::asio::error::invalid_argument;
+ }
+ }
+ else
+ {
+ ec = boost::asio::error::invalid_argument;
+ }
+ }
+ catch (Platform::Exception^ e)
+ {
+ ec = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ }
+}
+
+boost::system::error_code winrt_ssocket_service_base::do_connect(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ const void* addr, boost::system::error_code& ec)
+{
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return ec;
+ }
+
+ char addr_string[max_addr_v6_str_len];
+ unsigned short port;
+ switch (reinterpret_cast<const socket_addr_type*>(addr)->sa_family)
+ {
+ case BOOST_ASIO_OS_DEF(AF_INET):
+ socket_ops::inet_ntop(BOOST_ASIO_OS_DEF(AF_INET),
+ &reinterpret_cast<const sockaddr_in4_type*>(addr)->sin_addr,
+ addr_string, sizeof(addr_string), 0, ec);
+ port = socket_ops::network_to_host_short(
+ reinterpret_cast<const sockaddr_in4_type*>(addr)->sin_port);
+ break;
+ case BOOST_ASIO_OS_DEF(AF_INET6):
+ socket_ops::inet_ntop(BOOST_ASIO_OS_DEF(AF_INET6),
+ &reinterpret_cast<const sockaddr_in6_type*>(addr)->sin6_addr,
+ addr_string, sizeof(addr_string), 0, ec);
+ port = socket_ops::network_to_host_short(
+ reinterpret_cast<const sockaddr_in6_type*>(addr)->sin6_port);
+ break;
+ default:
+ ec = boost::asio::error::address_family_not_supported;
+ return ec;
+ }
+
+ if (!ec) try
+ {
+ async_manager_.sync(impl.socket_->ConnectAsync(
+ ref new Windows::Networking::HostName(
+ winrt_utils::string(addr_string)),
+ winrt_utils::string(port)), ec);
+ }
+ catch (Platform::Exception^ e)
+ {
+ ec = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ }
+
+ return ec;
+}
+
+void winrt_ssocket_service_base::start_connect_op(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ const void* addr, winrt_async_op<void>* op, bool is_continuation)
+{
+ if (!is_open(impl))
+ {
+ op->ec_ = boost::asio::error::bad_descriptor;
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ char addr_string[max_addr_v6_str_len];
+ unsigned short port = 0;
+ switch (reinterpret_cast<const socket_addr_type*>(addr)->sa_family)
+ {
+ case BOOST_ASIO_OS_DEF(AF_INET):
+ socket_ops::inet_ntop(BOOST_ASIO_OS_DEF(AF_INET),
+ &reinterpret_cast<const sockaddr_in4_type*>(addr)->sin_addr,
+ addr_string, sizeof(addr_string), 0, op->ec_);
+ port = socket_ops::network_to_host_short(
+ reinterpret_cast<const sockaddr_in4_type*>(addr)->sin_port);
+ break;
+ case BOOST_ASIO_OS_DEF(AF_INET6):
+ socket_ops::inet_ntop(BOOST_ASIO_OS_DEF(AF_INET6),
+ &reinterpret_cast<const sockaddr_in6_type*>(addr)->sin6_addr,
+ addr_string, sizeof(addr_string), 0, op->ec_);
+ port = socket_ops::network_to_host_short(
+ reinterpret_cast<const sockaddr_in6_type*>(addr)->sin6_port);
+ break;
+ default:
+ op->ec_ = boost::asio::error::address_family_not_supported;
+ break;
+ }
+
+ if (op->ec_)
+ {
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ try
+ {
+ async_manager_.async(impl.socket_->ConnectAsync(
+ ref new Windows::Networking::HostName(
+ winrt_utils::string(addr_string)),
+ winrt_utils::string(port)), op);
+ }
+ catch (Platform::Exception^ e)
+ {
+ op->ec_ = boost::system::error_code(
+ e->HResult, boost::system::system_category());
+ io_service_.post_immediate_completion(op, is_continuation);
+ }
+}
+
+std::size_t winrt_ssocket_service_base::do_send(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ const boost::asio::const_buffer& data,
+ socket_base::message_flags flags, boost::system::error_code& ec)
+{
+ if (flags)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ try
+ {
+ buffer_sequence_adapter<boost::asio::const_buffer,
+ boost::asio::const_buffers_1> bufs(boost::asio::buffer(data));
+
+ if (bufs.all_empty())
+ {
+ ec = boost::system::error_code();
+ return 0;
+ }
+
+ return async_manager_.sync(
+ impl.socket_->OutputStream->WriteAsync(bufs.buffers()[0]), ec);
+ }
+ catch (Platform::Exception^ e)
+ {
+ ec = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ return 0;
+ }
+}
+
+void winrt_ssocket_service_base::start_send_op(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ const boost::asio::const_buffer& data, socket_base::message_flags flags,
+ winrt_async_op<unsigned int>* op, bool is_continuation)
+{
+ if (flags)
+ {
+ op->ec_ = boost::asio::error::operation_not_supported;
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ if (!is_open(impl))
+ {
+ op->ec_ = boost::asio::error::bad_descriptor;
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ try
+ {
+ buffer_sequence_adapter<boost::asio::const_buffer,
+ boost::asio::const_buffers_1> bufs(boost::asio::buffer(data));
+
+ if (bufs.all_empty())
+ {
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ async_manager_.async(
+ impl.socket_->OutputStream->WriteAsync(bufs.buffers()[0]), op);
+ }
+ catch (Platform::Exception^ e)
+ {
+ op->ec_ = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ io_service_.post_immediate_completion(op, is_continuation);
+ }
+}
+
+std::size_t winrt_ssocket_service_base::do_receive(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ const boost::asio::mutable_buffer& data,
+ socket_base::message_flags flags, boost::system::error_code& ec)
+{
+ if (flags)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ try
+ {
+ buffer_sequence_adapter<boost::asio::mutable_buffer,
+ boost::asio::mutable_buffers_1> bufs(boost::asio::buffer(data));
+
+ if (bufs.all_empty())
+ {
+ ec = boost::system::error_code();
+ return 0;
+ }
+
+ async_manager_.sync(
+ impl.socket_->InputStream->ReadAsync(
+ bufs.buffers()[0], bufs.buffers()[0]->Capacity,
+ Windows::Storage::Streams::InputStreamOptions::Partial), ec);
+
+ std::size_t bytes_transferred = bufs.buffers()[0]->Length;
+ if (bytes_transferred == 0 && !ec)
+ {
+ ec = boost::asio::error::eof;
+ }
+
+ return bytes_transferred;
+ }
+ catch (Platform::Exception^ e)
+ {
+ ec = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ return 0;
+ }
+}
+
+void winrt_ssocket_service_base::start_receive_op(
+ winrt_ssocket_service_base::base_implementation_type& impl,
+ const boost::asio::mutable_buffer& data, socket_base::message_flags flags,
+ winrt_async_op<Windows::Storage::Streams::IBuffer^>* op,
+ bool is_continuation)
+{
+ if (flags)
+ {
+ op->ec_ = boost::asio::error::operation_not_supported;
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ if (!is_open(impl))
+ {
+ op->ec_ = boost::asio::error::bad_descriptor;
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ try
+ {
+ buffer_sequence_adapter<boost::asio::mutable_buffer,
+ boost::asio::mutable_buffers_1> bufs(boost::asio::buffer(data));
+
+ if (bufs.all_empty())
+ {
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ async_manager_.async(
+ impl.socket_->InputStream->ReadAsync(
+ bufs.buffers()[0], bufs.buffers()[0]->Capacity,
+ Windows::Storage::Streams::InputStreamOptions::Partial), op);
+ }
+ catch (Platform::Exception^ e)
+ {
+ op->ec_ = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ io_service_.post_immediate_completion(op, is_continuation);
+ }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WINRT_SSOCKET_SERVICE_BASE_IPP
diff --git a/3party/boost/boost/asio/detail/impl/winrt_timer_scheduler.hpp b/3party/boost/boost/asio/detail/impl/winrt_timer_scheduler.hpp
new file mode 100644
index 0000000000..ff1ee038f7
--- /dev/null
+++ b/3party/boost/boost/asio/detail/impl/winrt_timer_scheduler.hpp
@@ -0,0 +1,81 @@
+//
+// detail/impl/winrt_timer_scheduler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_HPP
+#define BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Time_Traits>
+void winrt_timer_scheduler::add_timer_queue(timer_queue<Time_Traits>& queue)
+{
+ do_add_timer_queue(queue);
+}
+
+// Remove a timer queue from the reactor.
+template <typename Time_Traits>
+void winrt_timer_scheduler::remove_timer_queue(timer_queue<Time_Traits>& queue)
+{
+ do_remove_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void winrt_timer_scheduler::schedule_timer(timer_queue<Time_Traits>& queue,
+ const typename Time_Traits::time_type& time,
+ typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op)
+{
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+ if (shutdown_)
+ {
+ io_service_.post_immediate_completion(op, false);
+ return;
+ }
+
+ bool earliest = queue.enqueue_timer(time, timer, op);
+ io_service_.work_started();
+ if (earliest)
+ event_.signal(lock);
+}
+
+template <typename Time_Traits>
+std::size_t winrt_timer_scheduler::cancel_timer(timer_queue<Time_Traits>& queue,
+ typename timer_queue<Time_Traits>::per_timer_data& timer,
+ std::size_t max_cancelled)
+{
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
+ op_queue<operation> ops;
+ std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
+ lock.unlock();
+ io_service_.post_deferred_completions(ops);
+ return n;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_HPP
diff --git a/3party/boost/boost/asio/detail/impl/winrt_timer_scheduler.ipp b/3party/boost/boost/asio/detail/impl/winrt_timer_scheduler.ipp
new file mode 100644
index 0000000000..ef480eaa17
--- /dev/null
+++ b/3party/boost/boost/asio/detail/impl/winrt_timer_scheduler.ipp
@@ -0,0 +1,124 @@
+//
+// detail/impl/winrt_timer_scheduler.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/winrt_timer_scheduler.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+winrt_timer_scheduler::winrt_timer_scheduler(
+ boost::asio::io_service& io_service)
+ : boost::asio::detail::service_base<winrt_timer_scheduler>(io_service),
+ io_service_(use_service<io_service_impl>(io_service)),
+ mutex_(),
+ event_(),
+ timer_queues_(),
+ thread_(0),
+ stop_thread_(false),
+ shutdown_(false)
+{
+ thread_ = new boost::asio::detail::thread(
+ bind_handler(&winrt_timer_scheduler::call_run_thread, this));
+}
+
+winrt_timer_scheduler::~winrt_timer_scheduler()
+{
+ shutdown_service();
+}
+
+void winrt_timer_scheduler::shutdown_service()
+{
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
+ shutdown_ = true;
+ stop_thread_ = true;
+ event_.signal(lock);
+ lock.unlock();
+
+ if (thread_)
+ {
+ thread_->join();
+ delete thread_;
+ thread_ = 0;
+ }
+
+ op_queue<operation> ops;
+ timer_queues_.get_all_timers(ops);
+ io_service_.abandon_operations(ops);
+}
+
+void winrt_timer_scheduler::fork_service(boost::asio::io_service::fork_event)
+{
+}
+
+void winrt_timer_scheduler::init_task()
+{
+}
+
+void winrt_timer_scheduler::run_thread()
+{
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
+ while (!stop_thread_)
+ {
+ const long max_wait_duration = 5 * 60 * 1000000;
+ long wait_duration = timer_queues_.wait_duration_usec(max_wait_duration);
+ event_.wait_for_usec(lock, wait_duration);
+ event_.clear(lock);
+ op_queue<operation> ops;
+ timer_queues_.get_ready_timers(ops);
+ if (!ops.empty())
+ {
+ lock.unlock();
+ io_service_.post_deferred_completions(ops);
+ lock.lock();
+ }
+ }
+}
+
+void winrt_timer_scheduler::call_run_thread(winrt_timer_scheduler* scheduler)
+{
+ scheduler->run_thread();
+}
+
+void winrt_timer_scheduler::do_add_timer_queue(timer_queue_base& queue)
+{
+ mutex::scoped_lock lock(mutex_);
+ timer_queues_.insert(&queue);
+}
+
+void winrt_timer_scheduler::do_remove_timer_queue(timer_queue_base& queue)
+{
+ mutex::scoped_lock lock(mutex_);
+ timer_queues_.erase(&queue);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_IPP
diff --git a/3party/boost/boost/asio/detail/impl/winsock_init.ipp b/3party/boost/boost/asio/detail/impl/winsock_init.ipp
index 23b3ba08b6..08f32800f5 100644
--- a/3party/boost/boost/asio/detail/impl/winsock_init.ipp
+++ b/3party/boost/boost/asio/detail/impl/winsock_init.ipp
@@ -2,7 +2,7 @@
// detail/impl/winsock_init.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/io_control.hpp b/3party/boost/boost/asio/detail/io_control.hpp
index f35468b125..31d2f0ea20 100644
--- a/3party/boost/boost/asio/detail/io_control.hpp
+++ b/3party/boost/boost/asio/detail/io_control.hpp
@@ -2,7 +2,7 @@
// detail/io_control.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -45,7 +45,7 @@ public:
// Get the name of the IO control command.
int name() const
{
- return static_cast<int>(FIONBIO);
+ return static_cast<int>(BOOST_ASIO_OS_DEF(FIONBIO));
}
// Set the value of the I/O control command.
@@ -95,7 +95,7 @@ public:
// Get the name of the IO control command.
int name() const
{
- return static_cast<int>(FIONREAD);
+ return static_cast<int>(BOOST_ASIO_OS_DEF(FIONREAD));
}
// Set the value of the I/O control command.
diff --git a/3party/boost/boost/asio/detail/keyword_tss_ptr.hpp b/3party/boost/boost/asio/detail/keyword_tss_ptr.hpp
index bdd7662444..cd32b50772 100644
--- a/3party/boost/boost/asio/detail/keyword_tss_ptr.hpp
+++ b/3party/boost/boost/asio/detail/keyword_tss_ptr.hpp
@@ -2,7 +2,7 @@
// detail/keyword_tss_ptr.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -55,11 +55,11 @@ public:
}
private:
- static __thread T* value_;
+ static BOOST_ASIO_THREAD_KEYWORD T* value_;
};
template <typename T>
-__thread T* keyword_tss_ptr<T>::value_;
+BOOST_ASIO_THREAD_KEYWORD T* keyword_tss_ptr<T>::value_;
} // namespace detail
} // namespace asio
diff --git a/3party/boost/boost/asio/detail/kqueue_reactor.hpp b/3party/boost/boost/asio/detail/kqueue_reactor.hpp
index 16669c236f..37c70b2455 100644
--- a/3party/boost/boost/asio/detail/kqueue_reactor.hpp
+++ b/3party/boost/boost/asio/detail/kqueue_reactor.hpp
@@ -2,7 +2,7 @@
// detail/kqueue_reactor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2005 Stefan Arentz (stefan at soze dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -24,7 +24,6 @@
#include <sys/types.h>
#include <sys/event.h>
#include <sys/time.h>
-#include <boost/asio/detail/kqueue_reactor_fwd.hpp>
#include <boost/asio/detail/limits.hpp>
#include <boost/asio/detail/mutex.hpp>
#include <boost/asio/detail/object_pool.hpp>
@@ -33,7 +32,6 @@
#include <boost/asio/detail/select_interrupter.hpp>
#include <boost/asio/detail/socket_types.hpp>
#include <boost/asio/detail/timer_queue_base.hpp>
-#include <boost/asio/detail/timer_queue_fwd.hpp>
#include <boost/asio/detail/timer_queue_set.hpp>
#include <boost/asio/detail/wait_op.hpp>
#include <boost/asio/error.hpp>
diff --git a/3party/boost/boost/asio/detail/kqueue_reactor_fwd.hpp b/3party/boost/boost/asio/detail/kqueue_reactor_fwd.hpp
deleted file mode 100644
index bd1dfc0fa5..0000000000
--- a/3party/boost/boost/asio/detail/kqueue_reactor_fwd.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// detail/kqueue_reactor_fwd.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-// Copyright (c) 2005 Stefan Arentz (stefan at soze dot com)
-//
-// 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_ASIO_DETAIL_KQUEUE_REACTOR_FWD_HPP
-#define BOOST_ASIO_DETAIL_KQUEUE_REACTOR_FWD_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-
-#include <boost/asio/detail/config.hpp>
-
-#if defined(BOOST_ASIO_HAS_KQUEUE)
-
-namespace boost {
-namespace asio {
-namespace detail {
-
-class kqueue_reactor;
-
-} // namespace detail
-} // namespace asio
-} // namespace boost
-
-#endif // defined(BOOST_ASIO_HAS_KQUEUE)
-
-#endif // BOOST_ASIO_DETAIL_KQUEUE_REACTOR_FWD_HPP
diff --git a/3party/boost/boost/asio/detail/local_free_on_block_exit.hpp b/3party/boost/boost/asio/detail/local_free_on_block_exit.hpp
index b7ce9df790..6a676c3244 100644
--- a/3party/boost/boost/asio/detail/local_free_on_block_exit.hpp
+++ b/3party/boost/boost/asio/detail/local_free_on_block_exit.hpp
@@ -2,7 +2,7 @@
// detail/local_free_on_block_exit.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/macos_fenced_block.hpp b/3party/boost/boost/asio/detail/macos_fenced_block.hpp
index acc248ea82..aee4bfba77 100644
--- a/3party/boost/boost/asio/detail/macos_fenced_block.hpp
+++ b/3party/boost/boost/asio/detail/macos_fenced_block.hpp
@@ -2,7 +2,7 @@
// detail/macos_fenced_block.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/mutex.hpp b/3party/boost/boost/asio/detail/mutex.hpp
index 03bc3f8247..8212ec3ea8 100644
--- a/3party/boost/boost/asio/detail/mutex.hpp
+++ b/3party/boost/boost/asio/detail/mutex.hpp
@@ -2,7 +2,7 @@
// detail/mutex.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,8 +23,10 @@
# include <boost/asio/detail/win_mutex.hpp>
#elif defined(BOOST_ASIO_HAS_PTHREADS)
# include <boost/asio/detail/posix_mutex.hpp>
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+# include <boost/asio/detail/std_mutex.hpp>
#else
-# error Only Windows and POSIX are supported!
+# error Only Windows, POSIX and std::mutex are supported!
#endif
namespace boost {
@@ -37,6 +39,8 @@ typedef null_mutex mutex;
typedef win_mutex mutex;
#elif defined(BOOST_ASIO_HAS_PTHREADS)
typedef posix_mutex mutex;
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+typedef std_mutex mutex;
#endif
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/noncopyable.hpp b/3party/boost/boost/asio/detail/noncopyable.hpp
index 5f45132c8d..6aae476637 100644
--- a/3party/boost/boost/asio/detail/noncopyable.hpp
+++ b/3party/boost/boost/asio/detail/noncopyable.hpp
@@ -2,7 +2,7 @@
// detail/noncopyable.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/null_event.hpp b/3party/boost/boost/asio/detail/null_event.hpp
index 9962f9864b..2e87844336 100644
--- a/3party/boost/boost/asio/detail/null_event.hpp
+++ b/3party/boost/boost/asio/detail/null_event.hpp
@@ -2,7 +2,7 @@
// detail/null_event.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -41,18 +41,31 @@ public:
{
}
- // Signal the event.
+ // Signal the event. (Retained for backward compatibility.)
template <typename Lock>
void signal(Lock&)
{
}
- // Signal the event and unlock the mutex.
+ // Signal all waiters.
template <typename Lock>
- void signal_and_unlock(Lock&)
+ void signal_all(Lock&)
{
}
+ // Unlock the mutex and signal one waiter.
+ template <typename Lock>
+ void unlock_and_signal_one(Lock&)
+ {
+ }
+
+ // If there's a waiter, unlock the mutex and signal it.
+ template <typename Lock>
+ bool maybe_unlock_and_signal_one(Lock&)
+ {
+ return false;
+ }
+
// Reset the event.
template <typename Lock>
void clear(Lock&)
diff --git a/3party/boost/boost/asio/detail/null_fenced_block.hpp b/3party/boost/boost/asio/detail/null_fenced_block.hpp
index 0d272ee780..cf5da6e3f4 100644
--- a/3party/boost/boost/asio/detail/null_fenced_block.hpp
+++ b/3party/boost/boost/asio/detail/null_fenced_block.hpp
@@ -2,7 +2,7 @@
// detail/null_fenced_block.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/null_mutex.hpp b/3party/boost/boost/asio/detail/null_mutex.hpp
index 54834e0223..c282303b28 100644
--- a/3party/boost/boost/asio/detail/null_mutex.hpp
+++ b/3party/boost/boost/asio/detail/null_mutex.hpp
@@ -2,7 +2,7 @@
// detail/null_mutex.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/null_reactor.hpp b/3party/boost/boost/asio/detail/null_reactor.hpp
new file mode 100644
index 0000000000..a8e93e19e1
--- /dev/null
+++ b/3party/boost/boost/asio/detail/null_reactor.hpp
@@ -0,0 +1,69 @@
+//
+// detail/null_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_NULL_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_NULL_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class null_reactor
+ : public boost::asio::detail::service_base<null_reactor>
+{
+public:
+ // Constructor.
+ null_reactor(boost::asio::io_service& io_service)
+ : boost::asio::detail::service_base<null_reactor>(io_service)
+ {
+ }
+
+ // Destructor.
+ ~null_reactor()
+ {
+ }
+
+ // Destroy all user-defined handler objects owned by the service.
+ void shutdown_service()
+ {
+ }
+
+ // No-op because should never be called.
+ void run(bool /*block*/, op_queue<operation>& /*ops*/)
+ {
+ }
+
+ // No-op.
+ void interrupt()
+ {
+ }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_NULL_REACTOR_HPP
diff --git a/3party/boost/boost/asio/detail/null_signal_blocker.hpp b/3party/boost/boost/asio/detail/null_signal_blocker.hpp
index c386524168..89008fc26e 100644
--- a/3party/boost/boost/asio/detail/null_signal_blocker.hpp
+++ b/3party/boost/boost/asio/detail/null_signal_blocker.hpp
@@ -2,7 +2,7 @@
// detail/null_signal_blocker.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +19,7 @@
#if !defined(BOOST_ASIO_HAS_THREADS) \
|| defined(BOOST_ASIO_WINDOWS) \
+ || defined(BOOST_ASIO_WINDOWS_RUNTIME) \
|| defined(__CYGWIN__) \
|| defined(__SYMBIAN32__)
@@ -63,6 +64,7 @@ public:
#endif // !defined(BOOST_ASIO_HAS_THREADS)
// || defined(BOOST_ASIO_WINDOWS)
+ // || defined(BOOST_ASIO_WINDOWS_RUNTIME)
// || defined(__CYGWIN__)
// || defined(__SYMBIAN32__)
diff --git a/3party/boost/boost/asio/detail/null_socket_service.hpp b/3party/boost/boost/asio/detail/null_socket_service.hpp
new file mode 100644
index 0000000000..aafa1b7e07
--- /dev/null
+++ b/3party/boost/boost/asio/detail/null_socket_service.hpp
@@ -0,0 +1,499 @@
+//
+// detail/null_socket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_NULL_SOCKET_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_NULL_SOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol>
+class null_socket_service
+{
+public:
+ // The protocol type.
+ typedef Protocol protocol_type;
+
+ // The endpoint type.
+ typedef typename Protocol::endpoint endpoint_type;
+
+ // The native type of a socket.
+ typedef int native_handle_type;
+
+ // The implementation type of the socket.
+ struct implementation_type
+ {
+ };
+
+ // Constructor.
+ null_socket_service(boost::asio::io_service& io_service)
+ : io_service_(io_service)
+ {
+ }
+
+ // Destroy all user-defined handler objects owned by the service.
+ void shutdown_service()
+ {
+ }
+
+ // Construct a new socket implementation.
+ void construct(implementation_type&)
+ {
+ }
+
+ // Move-construct a new socket implementation.
+ void move_construct(implementation_type&, implementation_type&)
+ {
+ }
+
+ // Move-assign from another socket implementation.
+ void move_assign(implementation_type&,
+ null_socket_service&, implementation_type&)
+ {
+ }
+
+ // Move-construct a new socket implementation from another protocol type.
+ template <typename Protocol1>
+ void converting_move_construct(implementation_type&,
+ typename null_socket_service<Protocol1>::implementation_type&)
+ {
+ }
+
+ // Destroy a socket implementation.
+ void destroy(implementation_type&)
+ {
+ }
+
+ // Open a new socket implementation.
+ boost::system::error_code open(implementation_type&,
+ const protocol_type&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Assign a native socket to a socket implementation.
+ boost::system::error_code assign(implementation_type&, const protocol_type&,
+ const native_handle_type&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Determine whether the socket is open.
+ bool is_open(const implementation_type&) const
+ {
+ return false;
+ }
+
+ // Destroy a socket implementation.
+ boost::system::error_code close(implementation_type&,
+ boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Get the native socket representation.
+ native_handle_type native_handle(implementation_type&)
+ {
+ return 0;
+ }
+
+ // Cancel all operations associated with the socket.
+ boost::system::error_code cancel(implementation_type&,
+ boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Determine whether the socket is at the out-of-band data mark.
+ bool at_mark(const implementation_type&,
+ boost::system::error_code& ec) const
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return false;
+ }
+
+ // Determine the number of bytes available for reading.
+ std::size_t available(const implementation_type&,
+ boost::system::error_code& ec) const
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Place the socket into the state where it will listen for new connections.
+ boost::system::error_code listen(implementation_type&,
+ int, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Perform an IO control command on the socket.
+ template <typename IO_Control_Command>
+ boost::system::error_code io_control(implementation_type&,
+ IO_Control_Command&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Gets the non-blocking mode of the socket.
+ bool non_blocking(const implementation_type&) const
+ {
+ return false;
+ }
+
+ // Sets the non-blocking mode of the socket.
+ boost::system::error_code non_blocking(implementation_type&,
+ bool, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Gets the non-blocking mode of the native socket implementation.
+ bool native_non_blocking(const implementation_type&) const
+ {
+ return false;
+ }
+
+ // Sets the non-blocking mode of the native socket implementation.
+ boost::system::error_code native_non_blocking(implementation_type&,
+ bool, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Disable sends or receives on the socket.
+ boost::system::error_code shutdown(implementation_type&,
+ socket_base::shutdown_type, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Bind the socket to the specified local endpoint.
+ boost::system::error_code bind(implementation_type&,
+ const endpoint_type&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Set a socket option.
+ template <typename Option>
+ boost::system::error_code set_option(implementation_type&,
+ const Option&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Set a socket option.
+ template <typename Option>
+ boost::system::error_code get_option(const implementation_type&,
+ Option&, boost::system::error_code& ec) const
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Get the local endpoint.
+ endpoint_type local_endpoint(const implementation_type&,
+ boost::system::error_code& ec) const
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return endpoint_type();
+ }
+
+ // Get the remote endpoint.
+ endpoint_type remote_endpoint(const implementation_type&,
+ boost::system::error_code& ec) const
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return endpoint_type();
+ }
+
+ // Send the given data to the peer.
+ template <typename ConstBufferSequence>
+ std::size_t send(implementation_type&, const ConstBufferSequence&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Wait until data can be sent without blocking.
+ std::size_t send(implementation_type&, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Start an asynchronous send. The data being sent must be valid for the
+ // lifetime of the asynchronous operation.
+ template <typename ConstBufferSequence, typename Handler>
+ void async_send(implementation_type&, const ConstBufferSequence&,
+ socket_base::message_flags, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send(implementation_type&, const null_buffers&,
+ socket_base::message_flags, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Receive some data from the peer. Returns the number of bytes received.
+ template <typename MutableBufferSequence>
+ std::size_t receive(implementation_type&, const MutableBufferSequence&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Wait until data can be received without blocking.
+ std::size_t receive(implementation_type&, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Start an asynchronous receive. The buffer for the data being received
+ // must be valid for the lifetime of the asynchronous operation.
+ template <typename MutableBufferSequence, typename Handler>
+ void async_receive(implementation_type&, const MutableBufferSequence&,
+ socket_base::message_flags, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive(implementation_type&, const null_buffers&,
+ socket_base::message_flags, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Receive some data with associated flags. Returns the number of bytes
+ // received.
+ template <typename MutableBufferSequence>
+ std::size_t receive_with_flags(implementation_type&,
+ const MutableBufferSequence&, socket_base::message_flags,
+ socket_base::message_flags&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Wait until data can be received without blocking.
+ std::size_t receive_with_flags(implementation_type&,
+ const null_buffers&, socket_base::message_flags,
+ socket_base::message_flags&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Start an asynchronous receive. The buffer for the data being received
+ // must be valid for the lifetime of the asynchronous operation.
+ template <typename MutableBufferSequence, typename Handler>
+ void async_receive_with_flags(implementation_type&,
+ const MutableBufferSequence&, socket_base::message_flags,
+ socket_base::message_flags&, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive_with_flags(implementation_type&,
+ const null_buffers&, socket_base::message_flags,
+ socket_base::message_flags&, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Send a datagram to the specified endpoint. Returns the number of bytes
+ // sent.
+ template <typename ConstBufferSequence>
+ std::size_t send_to(implementation_type&, const ConstBufferSequence&,
+ const endpoint_type&, socket_base::message_flags,
+ boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Wait until data can be sent without blocking.
+ std::size_t send_to(implementation_type&, const null_buffers&,
+ const endpoint_type&, socket_base::message_flags,
+ boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Start an asynchronous send. The data being sent must be valid for the
+ // lifetime of the asynchronous operation.
+ template <typename ConstBufferSequence, typename Handler>
+ void async_send_to(implementation_type&, const ConstBufferSequence&,
+ const endpoint_type&, socket_base::message_flags,
+ Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send_to(implementation_type&, const null_buffers&,
+ const endpoint_type&, socket_base::message_flags, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Receive a datagram with the endpoint of the sender. Returns the number of
+ // bytes received.
+ template <typename MutableBufferSequence>
+ std::size_t receive_from(implementation_type&, const MutableBufferSequence&,
+ endpoint_type&, socket_base::message_flags,
+ boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Wait until data can be received without blocking.
+ std::size_t receive_from(implementation_type&, const null_buffers&,
+ endpoint_type&, socket_base::message_flags,
+ boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Start an asynchronous receive. The buffer for the data being received and
+ // the sender_endpoint object must both be valid for the lifetime of the
+ // asynchronous operation.
+ template <typename MutableBufferSequence, typename Handler>
+ void async_receive_from(implementation_type&,
+ const MutableBufferSequence&, endpoint_type&,
+ socket_base::message_flags, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive_from(implementation_type&,
+ const null_buffers&, endpoint_type&,
+ socket_base::message_flags, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Accept a new connection.
+ template <typename Socket>
+ boost::system::error_code accept(implementation_type&,
+ Socket&, endpoint_type*, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Start an asynchronous accept. The peer and peer_endpoint objects
+ // must be valid until the accept's handler is invoked.
+ template <typename Socket, typename Handler>
+ void async_accept(implementation_type&, Socket&,
+ endpoint_type*, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ io_service_.post(detail::bind_handler(handler, ec));
+ }
+
+ // Connect the socket to the specified endpoint.
+ boost::system::error_code connect(implementation_type&,
+ const endpoint_type&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Start an asynchronous connect.
+ template <typename Handler>
+ void async_connect(implementation_type&,
+ const endpoint_type&, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ io_service_.post(detail::bind_handler(handler, ec));
+ }
+
+private:
+ boost::asio::io_service& io_service_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_NULL_SOCKET_SERVICE_HPP
diff --git a/3party/boost/boost/asio/detail/null_static_mutex.hpp b/3party/boost/boost/asio/detail/null_static_mutex.hpp
index e6c0836f1d..201eefe770 100644
--- a/3party/boost/boost/asio/detail/null_static_mutex.hpp
+++ b/3party/boost/boost/asio/detail/null_static_mutex.hpp
@@ -2,7 +2,7 @@
// detail/null_static_mutex.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/null_thread.hpp b/3party/boost/boost/asio/detail/null_thread.hpp
index 0d0a86d27f..209ac239b0 100644
--- a/3party/boost/boost/asio/detail/null_thread.hpp
+++ b/3party/boost/boost/asio/detail/null_thread.hpp
@@ -2,7 +2,7 @@
// detail/null_thread.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/null_tss_ptr.hpp b/3party/boost/boost/asio/detail/null_tss_ptr.hpp
index c7cc4eab20..a8f4773c50 100644
--- a/3party/boost/boost/asio/detail/null_tss_ptr.hpp
+++ b/3party/boost/boost/asio/detail/null_tss_ptr.hpp
@@ -2,7 +2,7 @@
// detail/null_tss_ptr.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/object_pool.hpp b/3party/boost/boost/asio/detail/object_pool.hpp
index 228f6b39ad..c2021a4d75 100644
--- a/3party/boost/boost/asio/detail/object_pool.hpp
+++ b/3party/boost/boost/asio/detail/object_pool.hpp
@@ -2,7 +2,7 @@
// detail/object_pool.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/old_win_sdk_compat.hpp b/3party/boost/boost/asio/detail/old_win_sdk_compat.hpp
index 960feee9b6..df9f2ef6b6 100644
--- a/3party/boost/boost/asio/detail/old_win_sdk_compat.hpp
+++ b/3party/boost/boost/asio/detail/old_win_sdk_compat.hpp
@@ -2,7 +2,7 @@
// detail/old_win_sdk_compat.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/op_queue.hpp b/3party/boost/boost/asio/detail/op_queue.hpp
index 1576ed730c..2b586dd1a7 100644
--- a/3party/boost/boost/asio/detail/op_queue.hpp
+++ b/3party/boost/boost/asio/detail/op_queue.hpp
@@ -2,7 +2,7 @@
// detail/op_queue.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/operation.hpp b/3party/boost/boost/asio/detail/operation.hpp
index af0100c3d2..d67dfa0145 100644
--- a/3party/boost/boost/asio/detail/operation.hpp
+++ b/3party/boost/boost/asio/detail/operation.hpp
@@ -2,7 +2,7 @@
// detail/operation.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/pipe_select_interrupter.hpp b/3party/boost/boost/asio/detail/pipe_select_interrupter.hpp
index 8394ff738a..02a70ae407 100644
--- a/3party/boost/boost/asio/detail/pipe_select_interrupter.hpp
+++ b/3party/boost/boost/asio/detail/pipe_select_interrupter.hpp
@@ -2,7 +2,7 @@
// detail/pipe_select_interrupter.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -18,6 +18,7 @@
#include <boost/asio/detail/config.hpp>
#if !defined(BOOST_ASIO_WINDOWS)
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#if !defined(__CYGWIN__)
#if !defined(__SYMBIAN32__)
#if !defined(BOOST_ASIO_HAS_EVENTFD)
@@ -84,6 +85,7 @@ private:
#endif // !defined(BOOST_ASIO_HAS_EVENTFD)
#endif // !defined(__SYMBIAN32__)
#endif // !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#endif // !defined(BOOST_ASIO_WINDOWS)
#endif // BOOST_ASIO_DETAIL_PIPE_SELECT_INTERRUPTER_HPP
diff --git a/3party/boost/boost/asio/detail/pop_options.hpp b/3party/boost/boost/asio/detail/pop_options.hpp
index 2b873884b9..0dd9a455ad 100644
--- a/3party/boost/boost/asio/detail/pop_options.hpp
+++ b/3party/boost/boost/asio/detail/pop_options.hpp
@@ -2,7 +2,7 @@
// detail/pop_options.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -95,4 +95,11 @@
# pragma warning (pop)
# pragma pack (pop)
+# if defined(__cplusplus_cli) || defined(__cplusplus_winrt)
+# if defined(BOOST_ASIO_CLR_WORKAROUND)
+# undef generic
+# undef BOOST_ASIO_CLR_WORKAROUND
+# endif
+# endif
+
#endif
diff --git a/3party/boost/boost/asio/detail/posix_event.hpp b/3party/boost/boost/asio/detail/posix_event.hpp
index 90e3fa2c7f..9b633af79d 100644
--- a/3party/boost/boost/asio/detail/posix_event.hpp
+++ b/3party/boost/boost/asio/detail/posix_event.hpp
@@ -2,7 +2,7 @@
// detail/posix_event.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -42,24 +42,48 @@ public:
::pthread_cond_destroy(&cond_);
}
- // Signal the event.
+ // Signal the event. (Retained for backward compatibility.)
template <typename Lock>
void signal(Lock& lock)
{
+ this->signal_all(lock);
+ }
+
+ // Signal all waiters.
+ template <typename Lock>
+ void signal_all(Lock& lock)
+ {
BOOST_ASIO_ASSERT(lock.locked());
(void)lock;
- signalled_ = true;
- ::pthread_cond_signal(&cond_); // Ignore EINVAL.
+ state_ |= 1;
+ ::pthread_cond_broadcast(&cond_); // Ignore EINVAL.
}
- // Signal the event and unlock the mutex.
+ // Unlock the mutex and signal one waiter.
template <typename Lock>
- void signal_and_unlock(Lock& lock)
+ void unlock_and_signal_one(Lock& lock)
{
BOOST_ASIO_ASSERT(lock.locked());
- signalled_ = true;
+ state_ |= 1;
+ bool have_waiters = (state_ > 1);
lock.unlock();
- ::pthread_cond_signal(&cond_); // Ignore EINVAL.
+ if (have_waiters)
+ ::pthread_cond_signal(&cond_); // Ignore EINVAL.
+ }
+
+ // If there's a waiter, unlock the mutex and signal it.
+ template <typename Lock>
+ bool maybe_unlock_and_signal_one(Lock& lock)
+ {
+ BOOST_ASIO_ASSERT(lock.locked());
+ state_ |= 1;
+ if (state_ > 1)
+ {
+ lock.unlock();
+ ::pthread_cond_signal(&cond_); // Ignore EINVAL.
+ return true;
+ }
+ return false;
}
// Reset the event.
@@ -68,7 +92,7 @@ public:
{
BOOST_ASIO_ASSERT(lock.locked());
(void)lock;
- signalled_ = false;
+ state_ &= ~std::size_t(1);
}
// Wait for the event to become signalled.
@@ -76,13 +100,17 @@ public:
void wait(Lock& lock)
{
BOOST_ASIO_ASSERT(lock.locked());
- while (!signalled_)
+ while ((state_ & 1) == 0)
+ {
+ state_ += 2;
::pthread_cond_wait(&cond_, &lock.mutex().mutex_); // Ignore EINVAL.
+ state_ -= 2;
+ }
}
private:
::pthread_cond_t cond_;
- bool signalled_;
+ std::size_t state_;
};
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/posix_fd_set_adapter.hpp b/3party/boost/boost/asio/detail/posix_fd_set_adapter.hpp
index fa57edd400..267c983d6a 100644
--- a/3party/boost/boost/asio/detail/posix_fd_set_adapter.hpp
+++ b/3party/boost/boost/asio/detail/posix_fd_set_adapter.hpp
@@ -2,7 +2,7 @@
// detail/posix_fd_set_adapter.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,10 +17,13 @@
#include <boost/asio/detail/config.hpp>
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(__CYGWIN__) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#include <cstring>
#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/reactor_op_queue.hpp>
#include <boost/asio/detail/socket_types.hpp>
#include <boost/asio/detail/push_options.hpp>
@@ -58,6 +61,20 @@ public:
return false;
}
+ void set(reactor_op_queue<socket_type>& operations, op_queue<operation>& ops)
+ {
+ reactor_op_queue<socket_type>::iterator i = operations.begin();
+ while (i != operations.end())
+ {
+ reactor_op_queue<socket_type>::iterator op_iter = i++;
+ if (!set(op_iter->first))
+ {
+ boost::system::error_code ec(error::fd_set_failure);
+ operations.cancel_operations(op_iter, ops, ec);
+ }
+ }
+ }
+
bool is_set(socket_type descriptor) const
{
return FD_ISSET(descriptor, &fd_set_) != 0;
@@ -73,6 +90,18 @@ public:
return max_descriptor_;
}
+ void perform(reactor_op_queue<socket_type>& operations,
+ op_queue<operation>& ops) const
+ {
+ reactor_op_queue<socket_type>::iterator i = operations.begin();
+ while (i != operations.end())
+ {
+ reactor_op_queue<socket_type>::iterator op_iter = i++;
+ if (is_set(op_iter->first))
+ operations.perform_operations(op_iter, ops);
+ }
+ }
+
private:
mutable fd_set fd_set_;
socket_type max_descriptor_;
@@ -84,6 +113,8 @@ private:
#include <boost/asio/detail/pop_options.hpp>
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(__CYGWIN__)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#endif // BOOST_ASIO_DETAIL_POSIX_FD_SET_ADAPTER_HPP
diff --git a/3party/boost/boost/asio/detail/posix_mutex.hpp b/3party/boost/boost/asio/detail/posix_mutex.hpp
index a365179a00..7db2231e84 100644
--- a/3party/boost/boost/asio/detail/posix_mutex.hpp
+++ b/3party/boost/boost/asio/detail/posix_mutex.hpp
@@ -2,7 +2,7 @@
// detail/posix_mutex.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/posix_signal_blocker.hpp b/3party/boost/boost/asio/detail/posix_signal_blocker.hpp
index cbceec5462..e069897940 100644
--- a/3party/boost/boost/asio/detail/posix_signal_blocker.hpp
+++ b/3party/boost/boost/asio/detail/posix_signal_blocker.hpp
@@ -2,7 +2,7 @@
// detail/posix_signal_blocker.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/posix_static_mutex.hpp b/3party/boost/boost/asio/detail/posix_static_mutex.hpp
index e44b7b0a9f..a9c278cc46 100644
--- a/3party/boost/boost/asio/detail/posix_static_mutex.hpp
+++ b/3party/boost/boost/asio/detail/posix_static_mutex.hpp
@@ -2,7 +2,7 @@
// detail/posix_static_mutex.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/posix_thread.hpp b/3party/boost/boost/asio/detail/posix_thread.hpp
index 81cbefe3ab..cf40c9dcf5 100644
--- a/3party/boost/boost/asio/detail/posix_thread.hpp
+++ b/3party/boost/boost/asio/detail/posix_thread.hpp
@@ -2,7 +2,7 @@
// detail/posix_thread.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/posix_tss_ptr.hpp b/3party/boost/boost/asio/detail/posix_tss_ptr.hpp
index 6ec748d781..10abe82e04 100644
--- a/3party/boost/boost/asio/detail/posix_tss_ptr.hpp
+++ b/3party/boost/boost/asio/detail/posix_tss_ptr.hpp
@@ -2,7 +2,7 @@
// detail/posix_tss_ptr.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 @@ private:
// Thread-specific storage to allow unlocked access to determine whether a
// thread is a member of the pool.
pthread_key_t tss_key_;
-
};
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/push_options.hpp b/3party/boost/boost/asio/detail/push_options.hpp
index eec86f7860..ad72bfbcb4 100644
--- a/3party/boost/boost/asio/detail/push_options.hpp
+++ b/3party/boost/boost/asio/detail/push_options.hpp
@@ -2,7 +2,7 @@
// detail/push_options.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,9 @@
# pragma warning (disable:4180)
# pragma warning (disable:4244)
# pragma warning (disable:4355)
+# pragma warning (disable:4510)
# pragma warning (disable:4512)
+# pragma warning (disable:4610)
# pragma warning (disable:4675)
# if defined(_M_IX86) && defined(_Wp64)
// The /Wp64 option is broken. If you want to check 64 bit portability, use a
@@ -124,4 +126,13 @@
# error Multithreaded RTL must be selected.
# endif // !defined(_MT)
+# if defined(__cplusplus_cli) || defined(__cplusplus_winrt)
+# if !defined(BOOST_ASIO_DISABLE_CLR_WORKAROUND)
+# if !defined(generic)
+# define generic cpp_generic
+# define BOOST_ASIO_CLR_WORKAROUND
+# endif
+# endif
+# endif
+
#endif
diff --git a/3party/boost/boost/asio/detail/reactive_descriptor_service.hpp b/3party/boost/boost/asio/detail/reactive_descriptor_service.hpp
index 134fcbb73d..10b2f3f2a8 100644
--- a/3party/boost/boost/asio/detail/reactive_descriptor_service.hpp
+++ b/3party/boost/boost/asio/detail/reactive_descriptor_service.hpp
@@ -2,7 +2,7 @@
// detail/reactive_descriptor_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,7 +17,9 @@
#include <boost/asio/detail/config.hpp>
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
#include <boost/asio/buffer.hpp>
#include <boost/asio/io_service.hpp>
@@ -315,6 +317,8 @@ private:
# include <boost/asio/detail/impl/reactive_descriptor_service.ipp>
#endif // defined(BOOST_ASIO_HEADER_ONLY)
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
#endif // BOOST_ASIO_DETAIL_REACTIVE_DESCRIPTOR_SERVICE_HPP
diff --git a/3party/boost/boost/asio/detail/reactive_null_buffers_op.hpp b/3party/boost/boost/asio/detail/reactive_null_buffers_op.hpp
index 7d0f81eb1b..39aaa602d8 100644
--- a/3party/boost/boost/asio/detail/reactive_null_buffers_op.hpp
+++ b/3party/boost/boost/asio/detail/reactive_null_buffers_op.hpp
@@ -2,7 +2,7 @@
// detail/reactive_null_buffers_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/reactive_serial_port_service.hpp b/3party/boost/boost/asio/detail/reactive_serial_port_service.hpp
index 9e58eaa8ed..86d8300b6b 100644
--- a/3party/boost/boost/asio/detail/reactive_serial_port_service.hpp
+++ b/3party/boost/boost/asio/detail/reactive_serial_port_service.hpp
@@ -2,7 +2,7 @@
// detail/reactive_serial_port_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/reactive_socket_accept_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_accept_op.hpp
index 75f9f6410c..93ece02dd3 100644
--- a/3party/boost/boost/asio/detail/reactive_socket_accept_op.hpp
+++ b/3party/boost/boost/asio/detail/reactive_socket_accept_op.hpp
@@ -2,7 +2,7 @@
// detail/reactive_socket_accept_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +58,7 @@ public:
o->peer_endpoint_ ? &addrlen : 0, o->ec_, new_socket);
// On success, assign new connection to peer socket object.
- if (new_socket >= 0)
+ if (new_socket != invalid_socket)
{
socket_holder new_socket_holder(new_socket);
if (o->peer_endpoint_)
diff --git a/3party/boost/boost/asio/detail/reactive_socket_connect_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_connect_op.hpp
index a603f26cbd..254c9f4427 100644
--- a/3party/boost/boost/asio/detail/reactive_socket_connect_op.hpp
+++ b/3party/boost/boost/asio/detail/reactive_socket_connect_op.hpp
@@ -2,7 +2,7 @@
// detail/reactive_socket_connect_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,15 +29,12 @@ namespace boost {
namespace asio {
namespace detail {
-template <typename Protocol>
class reactive_socket_connect_op_base : public reactor_op
{
public:
- reactive_socket_connect_op_base(socket_type socket,
- const typename Protocol::endpoint& peer_endpoint, func_type complete_func)
+ reactive_socket_connect_op_base(socket_type socket, func_type complete_func)
: reactor_op(&reactive_socket_connect_op_base::do_perform, complete_func),
- socket_(socket),
- peer_endpoint_(peer_endpoint)
+ socket_(socket)
{
}
@@ -46,25 +43,21 @@ public:
reactive_socket_connect_op_base* o(
static_cast<reactive_socket_connect_op_base*>(base));
- return socket_ops::non_blocking_connect(o->socket_,
- o->peer_endpoint_.data(), o->peer_endpoint_.size(), o->ec_);
+ return socket_ops::non_blocking_connect(o->socket_, o->ec_);
}
private:
socket_type socket_;
- typename Protocol::endpoint peer_endpoint_;
};
-template <typename Protocol, typename Handler>
-class reactive_socket_connect_op :
- public reactive_socket_connect_op_base<Protocol>
+template <typename Handler>
+class reactive_socket_connect_op : public reactive_socket_connect_op_base
{
public:
BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_connect_op);
- reactive_socket_connect_op(socket_type socket,
- const typename Protocol::endpoint& peer_endpoint, Handler& handler)
- : reactive_socket_connect_op_base<Protocol>(socket, peer_endpoint,
+ reactive_socket_connect_op(socket_type socket, Handler& handler)
+ : reactive_socket_connect_op_base(socket,
&reactive_socket_connect_op::do_complete),
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
{
diff --git a/3party/boost/boost/asio/detail/reactive_socket_recv_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_recv_op.hpp
index 04e584f530..d6a124d4b2 100644
--- a/3party/boost/boost/asio/detail/reactive_socket_recv_op.hpp
+++ b/3party/boost/boost/asio/detail/reactive_socket_recv_op.hpp
@@ -2,7 +2,7 @@
// detail/reactive_socket_recv_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/reactive_socket_recvfrom_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_recvfrom_op.hpp
index ed1363a9c0..ef806bcf9f 100644
--- a/3party/boost/boost/asio/detail/reactive_socket_recvfrom_op.hpp
+++ b/3party/boost/boost/asio/detail/reactive_socket_recvfrom_op.hpp
@@ -2,7 +2,7 @@
// detail/reactive_socket_recvfrom_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/reactive_socket_recvmsg_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_recvmsg_op.hpp
index 62f49abd1f..b6e0e3a96f 100644
--- a/3party/boost/boost/asio/detail/reactive_socket_recvmsg_op.hpp
+++ b/3party/boost/boost/asio/detail/reactive_socket_recvmsg_op.hpp
@@ -2,7 +2,7 @@
// detail/reactive_socket_recvmsg_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/reactive_socket_send_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_send_op.hpp
index bde2fe2aab..a3a44244a1 100644
--- a/3party/boost/boost/asio/detail/reactive_socket_send_op.hpp
+++ b/3party/boost/boost/asio/detail/reactive_socket_send_op.hpp
@@ -2,7 +2,7 @@
// detail/reactive_socket_send_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/reactive_socket_sendto_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_sendto_op.hpp
index 0fb78eaf99..ffa1e6858f 100644
--- a/3party/boost/boost/asio/detail/reactive_socket_sendto_op.hpp
+++ b/3party/boost/boost/asio/detail/reactive_socket_sendto_op.hpp
@@ -2,7 +2,7 @@
// detail/reactive_socket_sendto_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/reactive_socket_service.hpp b/3party/boost/boost/asio/detail/reactive_socket_service.hpp
index e902708689..35678ae93e 100644
--- a/3party/boost/boost/asio/detail/reactive_socket_service.hpp
+++ b/3party/boost/boost/asio/detail/reactive_socket_service.hpp
@@ -2,7 +2,7 @@
// detail/reactive_socket_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -434,11 +434,11 @@ public:
boost_asio_handler_cont_helpers::is_continuation(handler);
// Allocate and construct an operation to wrap the handler.
- typedef reactive_socket_connect_op<Protocol, Handler> op;
+ typedef reactive_socket_connect_op<Handler> op;
typename op::ptr p = { boost::asio::detail::addressof(handler),
boost_asio_handler_alloc_helpers::allocate(
sizeof(op), handler), 0 };
- p.p = new (p.v) op(impl.socket_, peer_endpoint, handler);
+ p.p = new (p.v) op(impl.socket_, handler);
BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_connect"));
diff --git a/3party/boost/boost/asio/detail/reactive_socket_service_base.hpp b/3party/boost/boost/asio/detail/reactive_socket_service_base.hpp
index 520424315d..aeaf4f4053 100644
--- a/3party/boost/boost/asio/detail/reactive_socket_service_base.hpp
+++ b/3party/boost/boost/asio/detail/reactive_socket_service_base.hpp
@@ -2,7 +2,7 @@
// detail/reactive_socket_service_base.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,7 +17,8 @@
#include <boost/asio/detail/config.hpp>
-#if !defined(BOOST_ASIO_HAS_IOCP)
+#if !defined(BOOST_ASIO_HAS_IOCP) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#include <boost/asio/buffer.hpp>
#include <boost/asio/error.hpp>
@@ -198,7 +199,7 @@ public:
template <typename ConstBufferSequence, typename Handler>
void async_send(base_implementation_type& impl,
const ConstBufferSequence& buffers,
- socket_base::message_flags flags, Handler handler)
+ socket_base::message_flags flags, Handler& handler)
{
bool is_continuation =
boost_asio_handler_cont_helpers::is_continuation(handler);
@@ -222,7 +223,7 @@ public:
// Start an asynchronous wait until data can be sent without blocking.
template <typename Handler>
void async_send(base_implementation_type& impl, const null_buffers&,
- socket_base::message_flags, Handler handler)
+ socket_base::message_flags, Handler& handler)
{
bool is_continuation =
boost_asio_handler_cont_helpers::is_continuation(handler);
@@ -269,7 +270,7 @@ public:
template <typename MutableBufferSequence, typename Handler>
void async_receive(base_implementation_type& impl,
const MutableBufferSequence& buffers,
- socket_base::message_flags flags, Handler handler)
+ socket_base::message_flags flags, Handler& handler)
{
bool is_continuation =
boost_asio_handler_cont_helpers::is_continuation(handler);
@@ -297,7 +298,7 @@ public:
// Wait until data can be received without blocking.
template <typename Handler>
void async_receive(base_implementation_type& impl, const null_buffers&,
- socket_base::message_flags flags, Handler handler)
+ socket_base::message_flags flags, Handler& handler)
{
bool is_continuation =
boost_asio_handler_cont_helpers::is_continuation(handler);
@@ -354,7 +355,7 @@ public:
template <typename MutableBufferSequence, typename Handler>
void async_receive_with_flags(base_implementation_type& impl,
const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
- socket_base::message_flags& out_flags, Handler handler)
+ socket_base::message_flags& out_flags, Handler& handler)
{
bool is_continuation =
boost_asio_handler_cont_helpers::is_continuation(handler);
@@ -381,7 +382,7 @@ public:
template <typename Handler>
void async_receive_with_flags(base_implementation_type& impl,
const null_buffers&, socket_base::message_flags in_flags,
- socket_base::message_flags& out_flags, Handler handler)
+ socket_base::message_flags& out_flags, Handler& handler)
{
bool is_continuation =
boost_asio_handler_cont_helpers::is_continuation(handler);
@@ -446,5 +447,6 @@ protected:
#endif // defined(BOOST_ASIO_HEADER_ONLY)
#endif // !defined(BOOST_ASIO_HAS_IOCP)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SERVICE_BASE_HPP
diff --git a/3party/boost/boost/asio/detail/reactor.hpp b/3party/boost/boost/asio/detail/reactor.hpp
index 29f51dc204..e183793d1c 100644
--- a/3party/boost/boost/asio/detail/reactor.hpp
+++ b/3party/boost/boost/asio/detail/reactor.hpp
@@ -2,7 +2,7 @@
// detail/reactor.hpp
// ~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +23,8 @@
# include <boost/asio/detail/kqueue_reactor.hpp>
#elif defined(BOOST_ASIO_HAS_DEV_POLL)
# include <boost/asio/detail/dev_poll_reactor.hpp>
+#elif defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_reactor.hpp>
#else
# include <boost/asio/detail/select_reactor.hpp>
#endif
diff --git a/3party/boost/boost/asio/detail/reactor_fwd.hpp b/3party/boost/boost/asio/detail/reactor_fwd.hpp
index 58c86aaa55..80f40322b0 100644
--- a/3party/boost/boost/asio/detail/reactor_fwd.hpp
+++ b/3party/boost/boost/asio/detail/reactor_fwd.hpp
@@ -2,7 +2,7 @@
// detail/reactor_fwd.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,32 +17,22 @@
#include <boost/asio/detail/config.hpp>
-#if defined(BOOST_ASIO_HAS_IOCP)
-# include <boost/asio/detail/select_reactor_fwd.hpp>
-#elif defined(BOOST_ASIO_HAS_EPOLL)
-# include <boost/asio/detail/epoll_reactor_fwd.hpp>
-#elif defined(BOOST_ASIO_HAS_KQUEUE)
-# include <boost/asio/detail/kqueue_reactor_fwd.hpp>
-#elif defined(BOOST_ASIO_HAS_DEV_POLL)
-# include <boost/asio/detail/dev_poll_reactor_fwd.hpp>
-#else
-# include <boost/asio/detail/select_reactor_fwd.hpp>
-#endif
-
namespace boost {
namespace asio {
namespace detail {
-#if defined(BOOST_ASIO_HAS_IOCP)
-typedef select_reactor reactor;
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+typedef class null_reactor reactor;
+#elif defined(BOOST_ASIO_HAS_IOCP)
+typedef class select_reactor reactor;
#elif defined(BOOST_ASIO_HAS_EPOLL)
-typedef epoll_reactor reactor;
+typedef class epoll_reactor reactor;
#elif defined(BOOST_ASIO_HAS_KQUEUE)
-typedef kqueue_reactor reactor;
+typedef class kqueue_reactor reactor;
#elif defined(BOOST_ASIO_HAS_DEV_POLL)
-typedef dev_poll_reactor reactor;
+typedef class dev_poll_reactor reactor;
#else
-typedef select_reactor reactor;
+typedef class select_reactor reactor;
#endif
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/reactor_op.hpp b/3party/boost/boost/asio/detail/reactor_op.hpp
index c8e3ee43bc..959badd20a 100644
--- a/3party/boost/boost/asio/detail/reactor_op.hpp
+++ b/3party/boost/boost/asio/detail/reactor_op.hpp
@@ -2,7 +2,7 @@
// detail/reactor_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/reactor_op_queue.hpp b/3party/boost/boost/asio/detail/reactor_op_queue.hpp
index 1d196e946b..effe771730 100644
--- a/3party/boost/boost/asio/detail/reactor_op_queue.hpp
+++ b/3party/boost/boost/asio/detail/reactor_op_queue.hpp
@@ -2,7 +2,7 @@
// detail/reactor_op_queue.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,41 +33,54 @@ class reactor_op_queue
: private noncopyable
{
public:
+ typedef Descriptor key_type;
+
+ struct mapped_type : op_queue<reactor_op>
+ {
+ mapped_type() {}
+ mapped_type(const mapped_type&) {}
+ void operator=(const mapped_type&) {}
+ };
+
+ typedef typename hash_map<key_type, mapped_type>::value_type value_type;
+ typedef typename hash_map<key_type, mapped_type>::iterator iterator;
+
// Constructor.
reactor_op_queue()
: operations_()
{
}
+ // Obtain iterators to all registered descriptors.
+ iterator begin() { return operations_.begin(); }
+ iterator end() { return operations_.end(); }
+
// Add a new operation to the queue. Returns true if this is the only
// operation for the given descriptor, in which case the reactor's event
// demultiplexing function call may need to be interrupted and restarted.
bool enqueue_operation(Descriptor descriptor, reactor_op* op)
{
- typedef typename operations_map::iterator iterator;
- typedef typename operations_map::value_type value_type;
std::pair<iterator, bool> entry =
- operations_.insert(value_type(descriptor, operations()));
- entry.first->second.op_queue_.push(op);
+ operations_.insert(value_type(descriptor, mapped_type()));
+ entry.first->second.push(op);
return entry.second;
}
- // Cancel all operations associated with the descriptor. Any operations
- // pending for the descriptor will be notified that they have been cancelled
- // next time perform_cancellations is called. Returns true if any operations
- // were cancelled, in which case the reactor's event demultiplexing function
- // may need to be interrupted and restarted.
- bool cancel_operations(Descriptor descriptor, op_queue<operation>& ops,
+ // Cancel all operations associated with the descriptor identified by the
+ // supplied iterator. Any operations pending for the descriptor will be
+ // cancelled. Returns true if any operations were cancelled, in which case
+ // the reactor's event demultiplexing function may need to be interrupted and
+ // restarted.
+ bool cancel_operations(iterator i, op_queue<operation>& ops,
const boost::system::error_code& ec =
boost::asio::error::operation_aborted)
{
- typename operations_map::iterator i = operations_.find(descriptor);
if (i != operations_.end())
{
- while (reactor_op* op = i->second.op_queue_.front())
+ while (reactor_op* op = i->second.front())
{
op->ec_ = ec;
- i->second.op_queue_.pop();
+ i->second.pop();
ops.push(op);
}
operations_.erase(i);
@@ -77,6 +90,17 @@ public:
return false;
}
+ // Cancel all operations associated with the descriptor. Any operations
+ // pending for the descriptor will be cancelled. Returns true if any
+ // operations were cancelled, in which case the reactor's event
+ // demultiplexing function may need to be interrupted and restarted.
+ bool cancel_operations(Descriptor descriptor, op_queue<operation>& ops,
+ const boost::system::error_code& ec =
+ boost::asio::error::operation_aborted)
+ {
+ return this->cancel_operations(operations_.find(descriptor), ops, ec);
+ }
+
// Whether there are no operations in the queue.
bool empty() const
{
@@ -89,18 +113,18 @@ public:
return operations_.find(descriptor) != operations_.end();
}
- // Perform the operations corresponding to the descriptor. Returns true if
- // there are still unfinished operations queued for the descriptor.
- bool perform_operations(Descriptor descriptor, op_queue<operation>& ops)
+ // Perform the operations corresponding to the descriptor identified by the
+ // supplied iterator. Returns true if there are still unfinished operations
+ // queued for the descriptor.
+ bool perform_operations(iterator i, op_queue<operation>& ops)
{
- typename operations_map::iterator i = operations_.find(descriptor);
if (i != operations_.end())
{
- while (reactor_op* op = i->second.op_queue_.front())
+ while (reactor_op* op = i->second.front())
{
if (op->perform())
{
- i->second.op_queue_.pop();
+ i->second.pop();
ops.push(op);
}
else
@@ -113,84 +137,28 @@ public:
return false;
}
- // Fill a descriptor set with the descriptors corresponding to each active
- // operation. The op_queue is used only when descriptors fail to be added to
- // the descriptor set.
- template <typename Descriptor_Set>
- void get_descriptors(Descriptor_Set& descriptors, op_queue<operation>& ops)
- {
- typename operations_map::iterator i = operations_.begin();
- while (i != operations_.end())
- {
- Descriptor descriptor = i->first;
- ++i;
- if (!descriptors.set(descriptor))
- {
- boost::system::error_code ec(error::fd_set_failure);
- cancel_operations(descriptor, ops, ec);
- }
- }
- }
-
- // Perform the operations corresponding to the ready file descriptors
- // contained in the given descriptor set.
- template <typename Descriptor_Set>
- void perform_operations_for_descriptors(
- const Descriptor_Set& descriptors, op_queue<operation>& ops)
+ // Perform the operations corresponding to the descriptor. Returns true if
+ // there are still unfinished operations queued for the descriptor.
+ bool perform_operations(Descriptor descriptor, op_queue<operation>& ops)
{
- typename operations_map::iterator i = operations_.begin();
- while (i != operations_.end())
- {
- typename operations_map::iterator op_iter = i++;
- if (descriptors.is_set(op_iter->first))
- {
- while (reactor_op* op = op_iter->second.op_queue_.front())
- {
- if (op->perform())
- {
- op_iter->second.op_queue_.pop();
- ops.push(op);
- }
- else
- {
- break;
- }
- }
-
- if (op_iter->second.op_queue_.empty())
- operations_.erase(op_iter);
- }
- }
+ return this->perform_operations(operations_.find(descriptor), ops);
}
// Get all operations owned by the queue.
void get_all_operations(op_queue<operation>& ops)
{
- typename operations_map::iterator i = operations_.begin();
+ iterator i = operations_.begin();
while (i != operations_.end())
{
- typename operations_map::iterator op_iter = i++;
- ops.push(op_iter->second.op_queue_);
+ iterator op_iter = i++;
+ ops.push(op_iter->second);
operations_.erase(op_iter);
}
}
private:
- struct operations
- {
- operations() {}
- operations(const operations&) {}
- void operator=(const operations&) {}
-
- // The operations waiting on the desccriptor.
- op_queue<reactor_op> op_queue_;
- };
-
- // The type for a map of operations.
- typedef hash_map<Descriptor, operations> operations_map;
-
// The operations that are currently executing asynchronously.
- operations_map operations_;
+ hash_map<key_type, mapped_type> operations_;
};
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/regex_fwd.hpp b/3party/boost/boost/asio/detail/regex_fwd.hpp
index e87a74a155..2b23b59d93 100644
--- a/3party/boost/boost/asio/detail/regex_fwd.hpp
+++ b/3party/boost/boost/asio/detail/regex_fwd.hpp
@@ -2,7 +2,7 @@
// detail/regex_fwd.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/resolve_endpoint_op.hpp b/3party/boost/boost/asio/detail/resolve_endpoint_op.hpp
index 2c0cfd3fd0..28119bbef5 100644
--- a/3party/boost/boost/asio/detail/resolve_endpoint_op.hpp
+++ b/3party/boost/boost/asio/detail/resolve_endpoint_op.hpp
@@ -2,7 +2,7 @@
// detail/resolve_endpoint_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/resolve_op.hpp b/3party/boost/boost/asio/detail/resolve_op.hpp
index 8528ed5ad6..bed1c3c60f 100644
--- a/3party/boost/boost/asio/detail/resolve_op.hpp
+++ b/3party/boost/boost/asio/detail/resolve_op.hpp
@@ -2,7 +2,7 @@
// detail/resolve_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/resolver_service.hpp b/3party/boost/boost/asio/detail/resolver_service.hpp
index f4f3907c15..4ba295d155 100644
--- a/3party/boost/boost/asio/detail/resolver_service.hpp
+++ b/3party/boost/boost/asio/detail/resolver_service.hpp
@@ -2,7 +2,7 @@
// detail/resolver_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -16,6 +16,9 @@
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#include <boost/asio/ip/basic_resolver_iterator.hpp>
#include <boost/asio/ip/basic_resolver_query.hpp>
#include <boost/asio/detail/addressof.hpp>
@@ -123,4 +126,6 @@ public:
#include <boost/asio/detail/pop_options.hpp>
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#endif // BOOST_ASIO_DETAIL_RESOLVER_SERVICE_HPP
diff --git a/3party/boost/boost/asio/detail/resolver_service_base.hpp b/3party/boost/boost/asio/detail/resolver_service_base.hpp
index f618026eb3..0c00896097 100644
--- a/3party/boost/boost/asio/detail/resolver_service_base.hpp
+++ b/3party/boost/boost/asio/detail/resolver_service_base.hpp
@@ -2,7 +2,7 @@
// detail/resolver_service_base.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -65,6 +65,7 @@ protected:
// Helper function to start an asynchronous resolve operation.
BOOST_ASIO_DECL void start_resolve_op(operation* op);
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
// Helper class to perform exception-safe cleanup of addrinfo objects.
class auto_addrinfo
: private boost::asio::detail::noncopyable
@@ -89,6 +90,7 @@ protected:
private:
boost::asio::detail::addrinfo_type* ai_;
};
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
// Helper class to run the work io_service in a thread.
class work_io_service_runner;
diff --git a/3party/boost/boost/asio/detail/scoped_lock.hpp b/3party/boost/boost/asio/detail/scoped_lock.hpp
index c548dd5381..848864e97f 100644
--- a/3party/boost/boost/asio/detail/scoped_lock.hpp
+++ b/3party/boost/boost/asio/detail/scoped_lock.hpp
@@ -2,7 +2,7 @@
// detail/scoped_lock.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/scoped_ptr.hpp b/3party/boost/boost/asio/detail/scoped_ptr.hpp
index d4361fd559..5df78f7415 100644
--- a/3party/boost/boost/asio/detail/scoped_ptr.hpp
+++ b/3party/boost/boost/asio/detail/scoped_ptr.hpp
@@ -2,7 +2,7 @@
// detail/scoped_ptr.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/select_interrupter.hpp b/3party/boost/boost/asio/detail/select_interrupter.hpp
index 65caa097ae..4f802d1cbe 100644
--- a/3party/boost/boost/asio/detail/select_interrupter.hpp
+++ b/3party/boost/boost/asio/detail/select_interrupter.hpp
@@ -2,7 +2,7 @@
// detail/select_interrupter.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,6 +17,8 @@
#include <boost/asio/detail/config.hpp>
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) || defined(__SYMBIAN32__)
# include <boost/asio/detail/socket_select_interrupter.hpp>
#elif defined(BOOST_ASIO_HAS_EVENTFD)
@@ -41,4 +43,6 @@ typedef pipe_select_interrupter select_interrupter;
} // namespace asio
} // namespace boost
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#endif // BOOST_ASIO_DETAIL_SELECT_INTERRUPTER_HPP
diff --git a/3party/boost/boost/asio/detail/select_reactor.hpp b/3party/boost/boost/asio/detail/select_reactor.hpp
index f5907694be..6d3b2432c6 100644
--- a/3party/boost/boost/asio/detail/select_reactor.hpp
+++ b/3party/boost/boost/asio/detail/select_reactor.hpp
@@ -2,7 +2,7 @@
// detail/select_reactor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -20,7 +20,8 @@
#if defined(BOOST_ASIO_HAS_IOCP) \
|| (!defined(BOOST_ASIO_HAS_DEV_POLL) \
&& !defined(BOOST_ASIO_HAS_EPOLL) \
- && !defined(BOOST_ASIO_HAS_KQUEUE))
+ && !defined(BOOST_ASIO_HAS_KQUEUE) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
#include <cstddef>
#include <boost/asio/detail/fd_set_adapter.hpp>
@@ -30,10 +31,8 @@
#include <boost/asio/detail/reactor_op.hpp>
#include <boost/asio/detail/reactor_op_queue.hpp>
#include <boost/asio/detail/select_interrupter.hpp>
-#include <boost/asio/detail/select_reactor_fwd.hpp>
#include <boost/asio/detail/socket_types.hpp>
#include <boost/asio/detail/timer_queue_base.hpp>
-#include <boost/asio/detail/timer_queue_fwd.hpp>
#include <boost/asio/detail/timer_queue_set.hpp>
#include <boost/asio/detail/wait_op.hpp>
#include <boost/asio/io_service.hpp>
@@ -216,6 +215,7 @@ private:
#endif // defined(BOOST_ASIO_HAS_IOCP)
// || (!defined(BOOST_ASIO_HAS_DEV_POLL)
// && !defined(BOOST_ASIO_HAS_EPOLL)
- // && !defined(BOOST_ASIO_HAS_KQUEUE))
+ // && !defined(BOOST_ASIO_HAS_KQUEUE)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
#endif // BOOST_ASIO_DETAIL_SELECT_REACTOR_HPP
diff --git a/3party/boost/boost/asio/detail/select_reactor_fwd.hpp b/3party/boost/boost/asio/detail/select_reactor_fwd.hpp
deleted file mode 100644
index f5a7a0ca1c..0000000000
--- a/3party/boost/boost/asio/detail/select_reactor_fwd.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// detail/select_reactor_fwd.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// 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_ASIO_DETAIL_SELECT_REACTOR_FWD_HPP
-#define BOOST_ASIO_DETAIL_SELECT_REACTOR_FWD_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-
-namespace boost {
-namespace asio {
-namespace detail {
-
-class select_reactor;
-
-} // namespace detail
-} // namespace asio
-} // namespace boost
-
-#endif // BOOST_ASIO_DETAIL_SELECT_REACTOR_FWD_HPP
diff --git a/3party/boost/boost/asio/detail/service_registry.hpp b/3party/boost/boost/asio/detail/service_registry.hpp
index 1d4f84f8a1..bfd80fc8da 100644
--- a/3party/boost/boost/asio/detail/service_registry.hpp
+++ b/3party/boost/boost/asio/detail/service_registry.hpp
@@ -2,7 +2,7 @@
// detail/service_registry.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/service_registry_fwd.hpp b/3party/boost/boost/asio/detail/service_registry_fwd.hpp
deleted file mode 100644
index 8304cd0f37..0000000000
--- a/3party/boost/boost/asio/detail/service_registry_fwd.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// detail/service_registry_fwd.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// 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_ASIO_DETAIL_SERVICE_REGISTRY_FWD_HPP
-#define BOOST_ASIO_DETAIL_SERVICE_REGISTRY_FWD_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-
-namespace boost {
-namespace asio {
-namespace detail {
-
-class service_registry;
-
-} // namespace detail
-} // namespace asio
-} // namespace boost
-
-#endif // BOOST_ASIO_DETAIL_SERVICE_REGISTRY_FWD_HPP
diff --git a/3party/boost/boost/asio/detail/shared_ptr.hpp b/3party/boost/boost/asio/detail/shared_ptr.hpp
index bbf61909c0..3c79f61236 100644
--- a/3party/boost/boost/asio/detail/shared_ptr.hpp
+++ b/3party/boost/boost/asio/detail/shared_ptr.hpp
@@ -2,7 +2,7 @@
// detail/shared_ptr.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/signal_blocker.hpp b/3party/boost/boost/asio/detail/signal_blocker.hpp
index 559ef13942..ad6babaf3c 100644
--- a/3party/boost/boost/asio/detail/signal_blocker.hpp
+++ b/3party/boost/boost/asio/detail/signal_blocker.hpp
@@ -2,7 +2,7 @@
// detail/signal_blocker.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -18,6 +18,7 @@
#include <boost/asio/detail/config.hpp>
#if !defined(BOOST_ASIO_HAS_THREADS) || defined(BOOST_ASIO_WINDOWS) \
+ || defined(BOOST_ASIO_WINDOWS_RUNTIME) \
|| defined(__CYGWIN__) || defined(__SYMBIAN32__)
# include <boost/asio/detail/null_signal_blocker.hpp>
#elif defined(BOOST_ASIO_HAS_PTHREADS)
@@ -31,6 +32,7 @@ namespace asio {
namespace detail {
#if !defined(BOOST_ASIO_HAS_THREADS) || defined(BOOST_ASIO_WINDOWS) \
+ || defined(BOOST_ASIO_WINDOWS_RUNTIME) \
|| defined(__CYGWIN__) || defined(__SYMBIAN32__)
typedef null_signal_blocker signal_blocker;
#elif defined(BOOST_ASIO_HAS_PTHREADS)
diff --git a/3party/boost/boost/asio/detail/signal_handler.hpp b/3party/boost/boost/asio/detail/signal_handler.hpp
index f3bcdbee3b..32ce844b8d 100644
--- a/3party/boost/boost/asio/detail/signal_handler.hpp
+++ b/3party/boost/boost/asio/detail/signal_handler.hpp
@@ -2,7 +2,7 @@
// detail/signal_handler.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/signal_init.hpp b/3party/boost/boost/asio/detail/signal_init.hpp
index c9483dab9a..0dc65586f4 100644
--- a/3party/boost/boost/asio/detail/signal_init.hpp
+++ b/3party/boost/boost/asio/detail/signal_init.hpp
@@ -2,7 +2,7 @@
// detail/signal_init.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/signal_op.hpp b/3party/boost/boost/asio/detail/signal_op.hpp
index 9df0d9bcbd..e75d4126d7 100644
--- a/3party/boost/boost/asio/detail/signal_op.hpp
+++ b/3party/boost/boost/asio/detail/signal_op.hpp
@@ -2,7 +2,7 @@
// detail/signal_op.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/signal_set_service.hpp b/3party/boost/boost/asio/detail/signal_set_service.hpp
index c833057c81..9949f04436 100644
--- a/3party/boost/boost/asio/detail/signal_set_service.hpp
+++ b/3party/boost/boost/asio/detail/signal_set_service.hpp
@@ -2,7 +2,7 @@
// detail/signal_set_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -46,7 +46,7 @@ enum { max_signal_number = 128 };
extern BOOST_ASIO_DECL struct signal_state* get_signal_state();
-extern "C" BOOST_ASIO_DECL void asio_signal_handler(int signal_number);
+extern "C" BOOST_ASIO_DECL void boost_asio_signal_handler(int signal_number);
class signal_set_service
{
@@ -182,7 +182,9 @@ private:
// The io_service instance used for dispatching handlers.
io_service_impl& io_service_;
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+ && !defined(__CYGWIN__)
// The type used for registering for pipe reactor notifications.
class pipe_read_op;
@@ -191,7 +193,9 @@ private:
// The per-descriptor reactor data used for the pipe.
reactor::per_descriptor_data reactor_data_;
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ // && !defined(__CYGWIN__)
// A mapping from signal number to the registered signal sets.
registration* registrations_[max_signal_number];
diff --git a/3party/boost/boost/asio/detail/socket_holder.hpp b/3party/boost/boost/asio/detail/socket_holder.hpp
index 0adbeed3c6..81f4142727 100644
--- a/3party/boost/boost/asio/detail/socket_holder.hpp
+++ b/3party/boost/boost/asio/detail/socket_holder.hpp
@@ -2,7 +2,7 @@
// detail/socket_holder.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/socket_ops.hpp b/3party/boost/boost/asio/detail/socket_ops.hpp
index da736fa14c..04a28ef9e1 100644
--- a/3party/boost/boost/asio/detail/socket_ops.hpp
+++ b/3party/boost/boost/asio/detail/socket_ops.hpp
@@ -2,7 +2,7 @@
// detail/socket_ops.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -63,6 +63,8 @@ struct noop_deleter { void operator()(void*) {} };
typedef shared_ptr<void> shared_cancel_token_type;
typedef weak_ptr<void> weak_cancel_token_type;
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
BOOST_ASIO_DECL socket_type accept(socket_type s, socket_addr_type* addr,
std::size_t* addrlen, boost::system::error_code& ec);
@@ -106,8 +108,14 @@ BOOST_ASIO_DECL int connect(socket_type s, const socket_addr_type* addr,
BOOST_ASIO_DECL void sync_connect(socket_type s, const socket_addr_type* addr,
std::size_t addrlen, boost::system::error_code& ec);
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL void complete_iocp_connect(socket_type s,
+ boost::system::error_code& ec);
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
BOOST_ASIO_DECL bool non_blocking_connect(socket_type s,
- const socket_addr_type* addr, std::size_t addrlen,
boost::system::error_code& ec);
BOOST_ASIO_DECL int socketpair(int af, int type, int protocol,
@@ -264,6 +272,8 @@ BOOST_ASIO_DECL int poll_write(socket_type s,
BOOST_ASIO_DECL int poll_connect(socket_type s, boost::system::error_code& ec);
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
BOOST_ASIO_DECL const char* inet_ntop(int af, const void* src, char* dest,
size_t length, unsigned long scope_id, boost::system::error_code& ec);
@@ -273,6 +283,8 @@ BOOST_ASIO_DECL int inet_pton(int af, const char* src, void* dest,
BOOST_ASIO_DECL int gethostname(char* name,
int namelen, boost::system::error_code& ec);
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
BOOST_ASIO_DECL boost::system::error_code getaddrinfo(const char* host,
const char* service, const addrinfo_type& hints,
addrinfo_type** result, boost::system::error_code& ec);
@@ -300,6 +312,8 @@ BOOST_ASIO_DECL boost::system::error_code background_getnameinfo(
char* host, std::size_t hostlen, char* serv,
std::size_t servlen, int sock_type, boost::system::error_code& ec);
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
BOOST_ASIO_DECL u_long_type network_to_host_long(u_long_type value);
BOOST_ASIO_DECL u_long_type host_to_network_long(u_long_type value);
diff --git a/3party/boost/boost/asio/detail/socket_option.hpp b/3party/boost/boost/asio/detail/socket_option.hpp
index 6f28dc5716..2fe5ee4d15 100644
--- a/3party/boost/boost/asio/detail/socket_option.hpp
+++ b/3party/boost/boost/asio/detail/socket_option.hpp
@@ -2,7 +2,7 @@
// detail/socket_option.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -274,14 +274,14 @@ public:
// Get the address of the linger data.
template <typename Protocol>
- ::linger* data(const Protocol&)
+ detail::linger_type* data(const Protocol&)
{
return &value_;
}
// Get the address of the linger data.
template <typename Protocol>
- const ::linger* data(const Protocol&) const
+ const detail::linger_type* data(const Protocol&) const
{
return &value_;
}
@@ -305,7 +305,7 @@ public:
}
private:
- ::linger value_;
+ detail::linger_type value_;
};
} // namespace socket_option
diff --git a/3party/boost/boost/asio/detail/socket_select_interrupter.hpp b/3party/boost/boost/asio/detail/socket_select_interrupter.hpp
index 94fc3d7e7c..38f140ddfa 100644
--- a/3party/boost/boost/asio/detail/socket_select_interrupter.hpp
+++ b/3party/boost/boost/asio/detail/socket_select_interrupter.hpp
@@ -2,7 +2,7 @@
// detail/socket_select_interrupter.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,6 +17,8 @@
#include <boost/asio/detail/config.hpp>
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#if defined(BOOST_ASIO_WINDOWS) \
|| defined(__CYGWIN__) \
|| defined(__SYMBIAN32__)
@@ -86,4 +88,6 @@ private:
// || defined(__CYGWIN__)
// || defined(__SYMBIAN32__)
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#endif // BOOST_ASIO_DETAIL_SOCKET_SELECT_INTERRUPTER_HPP
diff --git a/3party/boost/boost/asio/detail/socket_types.hpp b/3party/boost/boost/asio/detail/socket_types.hpp
index e17c77fdd1..29e4739a96 100644
--- a/3party/boost/boost/asio/detail/socket_types.hpp
+++ b/3party/boost/boost/asio/detail/socket_types.hpp
@@ -2,7 +2,7 @@
// detail/socket_types.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,7 +17,9 @@
#include <boost/asio/detail/config.hpp>
-#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+// Empty.
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
# error WinSock.h has already been included
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
@@ -28,6 +30,11 @@
# define BOOST_ASIO_WSPIAPI_H_DEFINED
# endif // !defined(_WSPIAPI_H_)
# endif // defined(__BORLANDC__)
+# if defined(WINAPI_FAMILY)
+# if ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) != 0)
+# include <windows.h>
+# endif // ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) != 0)
+# endif // defined(WINAPI_FAMILY)
# include <winsock2.h>
# include <ws2tcpip.h>
# include <mswsock.h>
@@ -81,7 +88,88 @@ namespace boost {
namespace asio {
namespace detail {
-#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+const int max_addr_v4_str_len = 256;
+const int max_addr_v6_str_len = 256;
+typedef unsigned __int32 u_long_type;
+typedef unsigned __int16 u_short_type;
+struct in4_addr_type { u_long_type s_addr; };
+struct in4_mreq_type { in4_addr_type imr_multiaddr, imr_interface; };
+struct in6_addr_type { unsigned char s6_addr[16]; };
+struct in6_mreq_type { in6_addr_type ipv6mr_multiaddr;
+ unsigned long ipv6mr_interface; };
+struct socket_addr_type { int sa_family; };
+struct sockaddr_in4_type { int sin_family;
+ in4_addr_type sin_addr; u_short_type sin_port; };
+struct sockaddr_in6_type { int sin6_family;
+ in6_addr_type sin6_addr; u_short_type sin6_port;
+ u_long_type sin6_flowinfo; u_long_type sin6_scope_id; };
+struct sockaddr_storage_type { int ss_family;
+ unsigned char ss_bytes[128 - sizeof(int)]; };
+struct addrinfo_type { int ai_flags;
+ int ai_family, ai_socktype, ai_protocol;
+ int ai_addrlen; const void* ai_addr;
+ const char* ai_canonname; addrinfo_type* ai_next; };
+struct linger_type { u_short_type l_onoff, l_linger; };
+typedef u_long_type ioctl_arg_type;
+typedef int signed_size_type;
+# define BOOST_ASIO_OS_DEF(c) BOOST_ASIO_OS_DEF_##c
+# define BOOST_ASIO_OS_DEF_AF_UNSPEC 0
+# define BOOST_ASIO_OS_DEF_AF_INET 2
+# define BOOST_ASIO_OS_DEF_AF_INET6 23
+# define BOOST_ASIO_OS_DEF_SOCK_STREAM 1
+# define BOOST_ASIO_OS_DEF_SOCK_DGRAM 2
+# define BOOST_ASIO_OS_DEF_SOCK_RAW 3
+# define BOOST_ASIO_OS_DEF_SOCK_SEQPACKET 5
+# define BOOST_ASIO_OS_DEF_IPPROTO_IP 0
+# define BOOST_ASIO_OS_DEF_IPPROTO_IPV6 41
+# define BOOST_ASIO_OS_DEF_IPPROTO_TCP 6
+# define BOOST_ASIO_OS_DEF_IPPROTO_UDP 17
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMP 1
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMPV6 58
+# define BOOST_ASIO_OS_DEF_FIONBIO 1
+# define BOOST_ASIO_OS_DEF_FIONREAD 2
+# define BOOST_ASIO_OS_DEF_INADDR_ANY 0
+# define BOOST_ASIO_OS_DEF_MSG_OOB 0x1
+# define BOOST_ASIO_OS_DEF_MSG_PEEK 0x2
+# define BOOST_ASIO_OS_DEF_MSG_DONTROUTE 0x4
+# define BOOST_ASIO_OS_DEF_MSG_EOR 0 // Not supported.
+# define BOOST_ASIO_OS_DEF_SHUT_RD 0x0
+# define BOOST_ASIO_OS_DEF_SHUT_WR 0x1
+# define BOOST_ASIO_OS_DEF_SHUT_RDWR 0x2
+# define BOOST_ASIO_OS_DEF_SOMAXCONN 0x7fffffff
+# define BOOST_ASIO_OS_DEF_SOL_SOCKET 0xffff
+# define BOOST_ASIO_OS_DEF_SO_BROADCAST 0x20
+# define BOOST_ASIO_OS_DEF_SO_DEBUG 0x1
+# define BOOST_ASIO_OS_DEF_SO_DONTROUTE 0x10
+# define BOOST_ASIO_OS_DEF_SO_KEEPALIVE 0x8
+# define BOOST_ASIO_OS_DEF_SO_LINGER 0x80
+# define BOOST_ASIO_OS_DEF_SO_SNDBUF 0x1001
+# define BOOST_ASIO_OS_DEF_SO_RCVBUF 0x1002
+# define BOOST_ASIO_OS_DEF_SO_SNDLOWAT 0x1003
+# define BOOST_ASIO_OS_DEF_SO_RCVLOWAT 0x1004
+# define BOOST_ASIO_OS_DEF_SO_REUSEADDR 0x4
+# define BOOST_ASIO_OS_DEF_TCP_NODELAY 0x1
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_IF 2
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_TTL 3
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_LOOP 4
+# define BOOST_ASIO_OS_DEF_IP_ADD_MEMBERSHIP 5
+# define BOOST_ASIO_OS_DEF_IP_DROP_MEMBERSHIP 6
+# define BOOST_ASIO_OS_DEF_IP_TTL 7
+# define BOOST_ASIO_OS_DEF_IPV6_UNICAST_HOPS 4
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_IF 9
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_HOPS 10
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_LOOP 11
+# define BOOST_ASIO_OS_DEF_IPV6_JOIN_GROUP 12
+# define BOOST_ASIO_OS_DEF_IPV6_LEAVE_GROUP 13
+# define BOOST_ASIO_OS_DEF_AI_CANONNAME 0x2
+# define BOOST_ASIO_OS_DEF_AI_PASSIVE 0x1
+# define BOOST_ASIO_OS_DEF_AI_NUMERICHOST 0x4
+# define BOOST_ASIO_OS_DEF_AI_NUMERICSERV 0x8
+# define BOOST_ASIO_OS_DEF_AI_V4MAPPED 0x800
+# define BOOST_ASIO_OS_DEF_AI_ALL 0x100
+# define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG 0x400
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
typedef SOCKET socket_type;
const SOCKET invalid_socket = INVALID_SOCKET;
const int socket_error_retval = SOCKET_ERROR;
@@ -104,17 +192,83 @@ typedef sockaddr_in6 sockaddr_in6_type;
typedef sockaddr_storage sockaddr_storage_type;
typedef addrinfo addrinfo_type;
# endif
+typedef ::linger linger_type;
typedef unsigned long ioctl_arg_type;
typedef u_long u_long_type;
typedef u_short u_short_type;
typedef int signed_size_type;
-const int shutdown_receive = SD_RECEIVE;
-const int shutdown_send = SD_SEND;
-const int shutdown_both = SD_BOTH;
-const int message_peek = MSG_PEEK;
-const int message_out_of_band = MSG_OOB;
-const int message_do_not_route = MSG_DONTROUTE;
-const int message_end_of_record = 0; // Not supported on Windows.
+# define BOOST_ASIO_OS_DEF(c) BOOST_ASIO_OS_DEF_##c
+# define BOOST_ASIO_OS_DEF_AF_UNSPEC AF_UNSPEC
+# define BOOST_ASIO_OS_DEF_AF_INET AF_INET
+# define BOOST_ASIO_OS_DEF_AF_INET6 AF_INET6
+# define BOOST_ASIO_OS_DEF_SOCK_STREAM SOCK_STREAM
+# define BOOST_ASIO_OS_DEF_SOCK_DGRAM SOCK_DGRAM
+# define BOOST_ASIO_OS_DEF_SOCK_RAW SOCK_RAW
+# define BOOST_ASIO_OS_DEF_SOCK_SEQPACKET SOCK_SEQPACKET
+# define BOOST_ASIO_OS_DEF_IPPROTO_IP IPPROTO_IP
+# define BOOST_ASIO_OS_DEF_IPPROTO_IPV6 IPPROTO_IPV6
+# define BOOST_ASIO_OS_DEF_IPPROTO_TCP IPPROTO_TCP
+# define BOOST_ASIO_OS_DEF_IPPROTO_UDP IPPROTO_UDP
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMP IPPROTO_ICMP
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMPV6 IPPROTO_ICMPV6
+# define BOOST_ASIO_OS_DEF_FIONBIO FIONBIO
+# define BOOST_ASIO_OS_DEF_FIONREAD FIONREAD
+# define BOOST_ASIO_OS_DEF_INADDR_ANY INADDR_ANY
+# define BOOST_ASIO_OS_DEF_MSG_OOB MSG_OOB
+# define BOOST_ASIO_OS_DEF_MSG_PEEK MSG_PEEK
+# define BOOST_ASIO_OS_DEF_MSG_DONTROUTE MSG_DONTROUTE
+# define BOOST_ASIO_OS_DEF_MSG_EOR 0 // Not supported on Windows.
+# define BOOST_ASIO_OS_DEF_SHUT_RD SD_RECEIVE
+# define BOOST_ASIO_OS_DEF_SHUT_WR SD_SEND
+# define BOOST_ASIO_OS_DEF_SHUT_RDWR SD_BOTH
+# define BOOST_ASIO_OS_DEF_SOMAXCONN SOMAXCONN
+# define BOOST_ASIO_OS_DEF_SOL_SOCKET SOL_SOCKET
+# define BOOST_ASIO_OS_DEF_SO_BROADCAST SO_BROADCAST
+# define BOOST_ASIO_OS_DEF_SO_DEBUG SO_DEBUG
+# define BOOST_ASIO_OS_DEF_SO_DONTROUTE SO_DONTROUTE
+# define BOOST_ASIO_OS_DEF_SO_KEEPALIVE SO_KEEPALIVE
+# define BOOST_ASIO_OS_DEF_SO_LINGER SO_LINGER
+# define BOOST_ASIO_OS_DEF_SO_SNDBUF SO_SNDBUF
+# define BOOST_ASIO_OS_DEF_SO_RCVBUF SO_RCVBUF
+# define BOOST_ASIO_OS_DEF_SO_SNDLOWAT SO_SNDLOWAT
+# define BOOST_ASIO_OS_DEF_SO_RCVLOWAT SO_RCVLOWAT
+# define BOOST_ASIO_OS_DEF_SO_REUSEADDR SO_REUSEADDR
+# define BOOST_ASIO_OS_DEF_TCP_NODELAY TCP_NODELAY
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_IF IP_MULTICAST_IF
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_TTL IP_MULTICAST_TTL
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_LOOP IP_MULTICAST_LOOP
+# define BOOST_ASIO_OS_DEF_IP_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP
+# define BOOST_ASIO_OS_DEF_IP_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP
+# define BOOST_ASIO_OS_DEF_IP_TTL IP_TTL
+# define BOOST_ASIO_OS_DEF_IPV6_UNICAST_HOPS IPV6_UNICAST_HOPS
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_IF IPV6_MULTICAST_IF
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_HOPS IPV6_MULTICAST_HOPS
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_LOOP IPV6_MULTICAST_LOOP
+# define BOOST_ASIO_OS_DEF_IPV6_JOIN_GROUP IPV6_JOIN_GROUP
+# define BOOST_ASIO_OS_DEF_IPV6_LEAVE_GROUP IPV6_LEAVE_GROUP
+# define BOOST_ASIO_OS_DEF_AI_CANONNAME AI_CANONNAME
+# define BOOST_ASIO_OS_DEF_AI_PASSIVE AI_PASSIVE
+# define BOOST_ASIO_OS_DEF_AI_NUMERICHOST AI_NUMERICHOST
+# if defined(AI_NUMERICSERV)
+# define BOOST_ASIO_OS_DEF_AI_NUMERICSERV AI_NUMERICSERV
+# else
+# define BOOST_ASIO_OS_DEF_AI_NUMERICSERV 0
+# endif
+# if defined(AI_V4MAPPED)
+# define BOOST_ASIO_OS_DEF_AI_V4MAPPED AI_V4MAPPED
+# else
+# define BOOST_ASIO_OS_DEF_AI_V4MAPPED 0
+# endif
+# if defined(AI_ALL)
+# define BOOST_ASIO_OS_DEF_AI_ALL AI_ALL
+# else
+# define BOOST_ASIO_OS_DEF_AI_ALL 0
+# endif
+# if defined(AI_ADDRCONFIG)
+# define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG AI_ADDRCONFIG
+# else
+# define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG 0
+# endif
# if defined (_WIN32_WINNT)
const int max_iov_len = 64;
# else
@@ -149,6 +303,7 @@ typedef sockaddr_in6 sockaddr_in6_type;
typedef sockaddr_storage sockaddr_storage_type;
typedef sockaddr_un sockaddr_un_type;
typedef addrinfo addrinfo_type;
+typedef ::linger linger_type;
typedef int ioctl_arg_type;
typedef uint32_t u_long_type;
typedef uint16_t u_short_type;
@@ -157,13 +312,80 @@ typedef ssize_t signed_size_type;
#else // defined(BOOST_ASIO_HAS_SSIZE_T)
typedef int signed_size_type;
#endif // defined(BOOST_ASIO_HAS_SSIZE_T)
-const int shutdown_receive = SHUT_RD;
-const int shutdown_send = SHUT_WR;
-const int shutdown_both = SHUT_RDWR;
-const int message_peek = MSG_PEEK;
-const int message_out_of_band = MSG_OOB;
-const int message_do_not_route = MSG_DONTROUTE;
-const int message_end_of_record = MSG_EOR;
+# define BOOST_ASIO_OS_DEF(c) BOOST_ASIO_OS_DEF_##c
+# define BOOST_ASIO_OS_DEF_AF_UNSPEC AF_UNSPEC
+# define BOOST_ASIO_OS_DEF_AF_INET AF_INET
+# define BOOST_ASIO_OS_DEF_AF_INET6 AF_INET6
+# define BOOST_ASIO_OS_DEF_SOCK_STREAM SOCK_STREAM
+# define BOOST_ASIO_OS_DEF_SOCK_DGRAM SOCK_DGRAM
+# define BOOST_ASIO_OS_DEF_SOCK_RAW SOCK_RAW
+# define BOOST_ASIO_OS_DEF_SOCK_SEQPACKET SOCK_SEQPACKET
+# define BOOST_ASIO_OS_DEF_IPPROTO_IP IPPROTO_IP
+# define BOOST_ASIO_OS_DEF_IPPROTO_IPV6 IPPROTO_IPV6
+# define BOOST_ASIO_OS_DEF_IPPROTO_TCP IPPROTO_TCP
+# define BOOST_ASIO_OS_DEF_IPPROTO_UDP IPPROTO_UDP
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMP IPPROTO_ICMP
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMPV6 IPPROTO_ICMPV6
+# define BOOST_ASIO_OS_DEF_FIONBIO FIONBIO
+# define BOOST_ASIO_OS_DEF_FIONREAD FIONREAD
+# define BOOST_ASIO_OS_DEF_INADDR_ANY INADDR_ANY
+# define BOOST_ASIO_OS_DEF_MSG_OOB MSG_OOB
+# define BOOST_ASIO_OS_DEF_MSG_PEEK MSG_PEEK
+# define BOOST_ASIO_OS_DEF_MSG_DONTROUTE MSG_DONTROUTE
+# define BOOST_ASIO_OS_DEF_MSG_EOR MSG_EOR
+# define BOOST_ASIO_OS_DEF_SHUT_RD SHUT_RD
+# define BOOST_ASIO_OS_DEF_SHUT_WR SHUT_WR
+# define BOOST_ASIO_OS_DEF_SHUT_RDWR SHUT_RDWR
+# define BOOST_ASIO_OS_DEF_SOMAXCONN SOMAXCONN
+# define BOOST_ASIO_OS_DEF_SOL_SOCKET SOL_SOCKET
+# define BOOST_ASIO_OS_DEF_SO_BROADCAST SO_BROADCAST
+# define BOOST_ASIO_OS_DEF_SO_DEBUG SO_DEBUG
+# define BOOST_ASIO_OS_DEF_SO_DONTROUTE SO_DONTROUTE
+# define BOOST_ASIO_OS_DEF_SO_KEEPALIVE SO_KEEPALIVE
+# define BOOST_ASIO_OS_DEF_SO_LINGER SO_LINGER
+# define BOOST_ASIO_OS_DEF_SO_SNDBUF SO_SNDBUF
+# define BOOST_ASIO_OS_DEF_SO_RCVBUF SO_RCVBUF
+# define BOOST_ASIO_OS_DEF_SO_SNDLOWAT SO_SNDLOWAT
+# define BOOST_ASIO_OS_DEF_SO_RCVLOWAT SO_RCVLOWAT
+# define BOOST_ASIO_OS_DEF_SO_REUSEADDR SO_REUSEADDR
+# define BOOST_ASIO_OS_DEF_TCP_NODELAY TCP_NODELAY
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_IF IP_MULTICAST_IF
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_TTL IP_MULTICAST_TTL
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_LOOP IP_MULTICAST_LOOP
+# define BOOST_ASIO_OS_DEF_IP_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP
+# define BOOST_ASIO_OS_DEF_IP_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP
+# define BOOST_ASIO_OS_DEF_IP_TTL IP_TTL
+# define BOOST_ASIO_OS_DEF_IPV6_UNICAST_HOPS IPV6_UNICAST_HOPS
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_IF IPV6_MULTICAST_IF
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_HOPS IPV6_MULTICAST_HOPS
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_LOOP IPV6_MULTICAST_LOOP
+# define BOOST_ASIO_OS_DEF_IPV6_JOIN_GROUP IPV6_JOIN_GROUP
+# define BOOST_ASIO_OS_DEF_IPV6_LEAVE_GROUP IPV6_LEAVE_GROUP
+# define BOOST_ASIO_OS_DEF_AI_CANONNAME AI_CANONNAME
+# define BOOST_ASIO_OS_DEF_AI_PASSIVE AI_PASSIVE
+# define BOOST_ASIO_OS_DEF_AI_NUMERICHOST AI_NUMERICHOST
+# if defined(AI_NUMERICSERV)
+# define BOOST_ASIO_OS_DEF_AI_NUMERICSERV AI_NUMERICSERV
+# else
+# define BOOST_ASIO_OS_DEF_AI_NUMERICSERV 0
+# endif
+// Note: QNX Neutrino 6.3 defines AI_V4MAPPED, AI_ALL and AI_ADDRCONFIG but
+// does not implement them. Therefore they are specifically excluded here.
+# if defined(AI_V4MAPPED) && !defined(__QNXNTO__)
+# define BOOST_ASIO_OS_DEF_AI_V4MAPPED AI_V4MAPPED
+# else
+# define BOOST_ASIO_OS_DEF_AI_V4MAPPED 0
+# endif
+# if defined(AI_ALL) && !defined(__QNXNTO__)
+# define BOOST_ASIO_OS_DEF_AI_ALL AI_ALL
+# else
+# define BOOST_ASIO_OS_DEF_AI_ALL 0
+# endif
+# if defined(AI_ADDRCONFIG) && !defined(__QNXNTO__)
+# define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG AI_ADDRCONFIG
+# else
+# define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG 0
+# endif
# if defined(IOV_MAX)
const int max_iov_len = IOV_MAX;
# else
diff --git a/3party/boost/boost/asio/detail/solaris_fenced_block.hpp b/3party/boost/boost/asio/detail/solaris_fenced_block.hpp
index 5bae658081..9063bfc31a 100644
--- a/3party/boost/boost/asio/detail/solaris_fenced_block.hpp
+++ b/3party/boost/boost/asio/detail/solaris_fenced_block.hpp
@@ -2,7 +2,7 @@
// detail/solaris_fenced_block.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/static_mutex.hpp b/3party/boost/boost/asio/detail/static_mutex.hpp
index ef39406b5f..cc005cbd47 100644
--- a/3party/boost/boost/asio/detail/static_mutex.hpp
+++ b/3party/boost/boost/asio/detail/static_mutex.hpp
@@ -2,7 +2,7 @@
// detail/static_mutex.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +23,8 @@
# include <boost/asio/detail/win_static_mutex.hpp>
#elif defined(BOOST_ASIO_HAS_PTHREADS)
# include <boost/asio/detail/posix_static_mutex.hpp>
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+# include <boost/asio/detail/std_static_mutex.hpp>
#else
# error Only Windows and POSIX are supported!
#endif
@@ -40,6 +42,9 @@ typedef win_static_mutex static_mutex;
#elif defined(BOOST_ASIO_HAS_PTHREADS)
typedef posix_static_mutex static_mutex;
# define BOOST_ASIO_STATIC_MUTEX_INIT BOOST_ASIO_POSIX_STATIC_MUTEX_INIT
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+typedef std_static_mutex static_mutex;
+# define BOOST_ASIO_STATIC_MUTEX_INIT BOOST_ASIO_STD_STATIC_MUTEX_INIT
#endif
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/std_event.hpp b/3party/boost/boost/asio/detail/std_event.hpp
new file mode 100644
index 0000000000..53390b8c66
--- /dev/null
+++ b/3party/boost/boost/asio/detail/std_event.hpp
@@ -0,0 +1,178 @@
+//
+// detail/std_event.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_STD_EVENT_HPP
+#define BOOST_ASIO_DETAIL_STD_EVENT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#include <chrono>
+#include <condition_variable>
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class std_event
+ : private noncopyable
+{
+public:
+ // Constructor.
+ std_event()
+ : state_(0)
+ {
+ }
+
+ // Destructor.
+ ~std_event()
+ {
+ }
+
+ // Signal the event. (Retained for backward compatibility.)
+ template <typename Lock>
+ void signal(Lock& lock)
+ {
+ this->signal_all(lock);
+ }
+
+ // Signal all waiters.
+ template <typename Lock>
+ void signal_all(Lock& lock)
+ {
+ BOOST_ASIO_ASSERT(lock.locked());
+ (void)lock;
+ state_ |= 1;
+ cond_.notify_all();
+ }
+
+ // Unlock the mutex and signal one waiter.
+ template <typename Lock>
+ void unlock_and_signal_one(Lock& lock)
+ {
+ BOOST_ASIO_ASSERT(lock.locked());
+ state_ |= 1;
+ bool have_waiters = (state_ > 1);
+ lock.unlock();
+ if (have_waiters)
+ cond_.notify_one();
+ }
+
+ // If there's a waiter, unlock the mutex and signal it.
+ template <typename Lock>
+ bool maybe_unlock_and_signal_one(Lock& lock)
+ {
+ BOOST_ASIO_ASSERT(lock.locked());
+ state_ |= 1;
+ if (state_ > 1)
+ {
+ lock.unlock();
+ cond_.notify_one();
+ return true;
+ }
+ return false;
+ }
+
+ // Reset the event.
+ template <typename Lock>
+ void clear(Lock& lock)
+ {
+ BOOST_ASIO_ASSERT(lock.locked());
+ (void)lock;
+ state_ &= ~std::size_t(1);
+ }
+
+ // Wait for the event to become signalled.
+ template <typename Lock>
+ void wait(Lock& lock)
+ {
+ BOOST_ASIO_ASSERT(lock.locked());
+ unique_lock_adapter u_lock(lock);
+ while ((state_ & 1) == 0)
+ {
+ waiter w(state_);
+ cond_.wait(u_lock.unique_lock_);
+ }
+ }
+
+ // Timed wait for the event to become signalled.
+ template <typename Lock>
+ bool wait_for_usec(Lock& lock, long usec)
+ {
+ BOOST_ASIO_ASSERT(lock.locked());
+ unique_lock_adapter u_lock(lock);
+ if ((state_ & 1) == 0)
+ {
+ waiter w(state_);
+ cond_.wait_for(u_lock.unique_lock_, std::chrono::microseconds(usec));
+ }
+ return (state_ & 1) != 0;
+ }
+
+private:
+ // Helper class to temporarily adapt a scoped_lock into a unique_lock so that
+ // it can be passed to std::condition_variable::wait().
+ struct unique_lock_adapter
+ {
+ template <typename Lock>
+ explicit unique_lock_adapter(Lock& lock)
+ : unique_lock_(lock.mutex().mutex_, std::adopt_lock)
+ {
+ }
+
+ ~unique_lock_adapter()
+ {
+ unique_lock_.release();
+ }
+
+ std::unique_lock<std::mutex> unique_lock_;
+ };
+
+ // Helper to increment and decrement the state to track outstanding waiters.
+ class waiter
+ {
+ public:
+ explicit waiter(std::size_t& state)
+ : state_(state)
+ {
+ state_ += 2;
+ }
+
+ ~waiter()
+ {
+ state_ -= 2;
+ }
+
+ private:
+ std::size_t& state_;
+ };
+
+ std::condition_variable cond_;
+ std::size_t state_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#endif // BOOST_ASIO_DETAIL_STD_EVENT_HPP
diff --git a/3party/boost/boost/asio/detail/std_mutex.hpp b/3party/boost/boost/asio/detail/std_mutex.hpp
new file mode 100644
index 0000000000..58cdc070f1
--- /dev/null
+++ b/3party/boost/boost/asio/detail/std_mutex.hpp
@@ -0,0 +1,75 @@
+//
+// detail/std_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_STD_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_STD_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#include <mutex>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/scoped_lock.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class std_event;
+
+class std_mutex
+ : private noncopyable
+{
+public:
+ typedef boost::asio::detail::scoped_lock<std_mutex> scoped_lock;
+
+ // Constructor.
+ std_mutex()
+ {
+ }
+
+ // Destructor.
+ ~std_mutex()
+ {
+ }
+
+ // Lock the mutex.
+ void lock()
+ {
+ mutex_.lock();
+ }
+
+ // Unlock the mutex.
+ void unlock()
+ {
+ mutex_.unlock();
+ }
+
+private:
+ friend class std_event;
+ std::mutex mutex_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#endif // BOOST_ASIO_DETAIL_STD_MUTEX_HPP
diff --git a/3party/boost/boost/asio/detail/std_static_mutex.hpp b/3party/boost/boost/asio/detail/std_static_mutex.hpp
new file mode 100644
index 0000000000..68980ab4e4
--- /dev/null
+++ b/3party/boost/boost/asio/detail/std_static_mutex.hpp
@@ -0,0 +1,83 @@
+//
+// detail/std_static_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_STD_STATIC_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_STD_STATIC_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#include <mutex>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/scoped_lock.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class std_event;
+
+class std_static_mutex
+ : private noncopyable
+{
+public:
+ typedef boost::asio::detail::scoped_lock<std_static_mutex> scoped_lock;
+
+ // Constructor.
+ std_static_mutex(int)
+ {
+ }
+
+ // Destructor.
+ ~std_static_mutex()
+ {
+ }
+
+ // Initialise the mutex.
+ void init()
+ {
+ // Nothing to do.
+ }
+
+ // Lock the mutex.
+ void lock()
+ {
+ mutex_.lock();
+ }
+
+ // Unlock the mutex.
+ void unlock()
+ {
+ mutex_.unlock();
+ }
+
+private:
+ friend class std_event;
+ std::mutex mutex_;
+};
+
+#define BOOST_ASIO_STD_STATIC_MUTEX_INIT 0
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#endif // BOOST_ASIO_DETAIL_STD_STATIC_MUTEX_HPP
diff --git a/3party/boost/boost/asio/detail/std_thread.hpp b/3party/boost/boost/asio/detail/std_thread.hpp
new file mode 100644
index 0000000000..7dcb2fd66e
--- /dev/null
+++ b/3party/boost/boost/asio/detail/std_thread.hpp
@@ -0,0 +1,67 @@
+//
+// detail/std_thread.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_STD_THREAD_HPP
+#define BOOST_ASIO_DETAIL_STD_THREAD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_THREAD)
+
+#include <thread>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class std_thread
+ : private noncopyable
+{
+public:
+ // Constructor.
+ template <typename Function>
+ std_thread(Function f, unsigned int = 0)
+ : thread_(f)
+ {
+ }
+
+ // Destructor.
+ ~std_thread()
+ {
+ join();
+ }
+
+ // Wait for the thread to exit.
+ void join()
+ {
+ if (thread_.joinable())
+ thread_.join();
+ }
+
+private:
+ std::thread thread_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_STD_THREAD)
+
+#endif // BOOST_ASIO_DETAIL_STD_THREAD_HPP
diff --git a/3party/boost/boost/asio/detail/strand_service.hpp b/3party/boost/boost/asio/detail/strand_service.hpp
index 203ad07438..0e1dea874d 100644
--- a/3party/boost/boost/asio/detail/strand_service.hpp
+++ b/3party/boost/boost/asio/detail/strand_service.hpp
@@ -2,7 +2,7 @@
// detail/strand_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/task_io_service.hpp b/3party/boost/boost/asio/detail/task_io_service.hpp
index 8b9783dd21..a30ea043da 100644
--- a/3party/boost/boost/asio/detail/task_io_service.hpp
+++ b/3party/boost/boost/asio/detail/task_io_service.hpp
@@ -2,7 +2,7 @@
// detail/task_io_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,10 +23,10 @@
#include <boost/asio/io_service.hpp>
#include <boost/asio/detail/atomic_count.hpp>
#include <boost/asio/detail/call_stack.hpp>
+#include <boost/asio/detail/event.hpp>
#include <boost/asio/detail/mutex.hpp>
#include <boost/asio/detail/op_queue.hpp>
#include <boost/asio/detail/reactor_fwd.hpp>
-#include <boost/asio/detail/task_io_service_fwd.hpp>
#include <boost/asio/detail/task_io_service_operation.hpp>
#include <boost/asio/detail/push_options.hpp>
@@ -35,6 +35,8 @@ namespace boost {
namespace asio {
namespace detail {
+struct task_io_service_thread_info;
+
class task_io_service
: public boost::asio::detail::service_base<task_io_service>
{
@@ -118,7 +120,7 @@ public:
BOOST_ASIO_DECL void abandon_operations(op_queue<operation>& ops);
private:
- // Structure containing information about an idle thread.
+ // Structure containing thread-specific data.
typedef task_io_service_thread_info thread_info;
// Enqueue the given operation following a failed attempt to dispatch the
@@ -136,12 +138,6 @@ private:
// Stop the task and all idle threads.
BOOST_ASIO_DECL void stop_all_threads(mutex::scoped_lock& lock);
- // Wakes a single idle thread and unlocks the mutex. Returns true if an idle
- // thread was found. If there is no idle thread, returns false and leaves the
- // mutex locked.
- BOOST_ASIO_DECL bool wake_one_idle_thread_and_unlock(
- mutex::scoped_lock& lock);
-
// Wake a single idle thread, or the task, and always unlock the mutex.
BOOST_ASIO_DECL void wake_one_thread_and_unlock(
mutex::scoped_lock& lock);
@@ -160,6 +156,9 @@ private:
// Mutex to protect access to internal data.
mutable mutex mutex_;
+ // Event to wake up blocked threads.
+ event wakeup_event_;
+
// The task to be run by this service.
reactor* task_;
@@ -186,9 +185,6 @@ private:
// Per-thread call stack to track the state of each thread in the io_service.
typedef call_stack<task_io_service, thread_info> thread_call_stack;
-
- // The threads that are currently idle.
- thread_info* first_idle_thread_;
};
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/task_io_service_fwd.hpp b/3party/boost/boost/asio/detail/task_io_service_fwd.hpp
deleted file mode 100644
index fa5a286af6..0000000000
--- a/3party/boost/boost/asio/detail/task_io_service_fwd.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// detail/task_io_service_fwd.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// 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_ASIO_DETAIL_TASK_IO_SERVICE_FWD_HPP
-#define BOOST_ASIO_DETAIL_TASK_IO_SERVICE_FWD_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-
-namespace boost {
-namespace asio {
-namespace detail {
-
-class task_io_service;
-class task_io_service_operation;
-struct task_io_service_thread_info;
-
-} // namespace detail
-} // namespace asio
-} // namespace boost
-
-#endif // BOOST_ASIO_DETAIL_TASK_IO_SERVICE_FWD_HPP
diff --git a/3party/boost/boost/asio/detail/task_io_service_operation.hpp b/3party/boost/boost/asio/detail/task_io_service_operation.hpp
index ceb3d443ab..ea1c85e0be 100644
--- a/3party/boost/boost/asio/detail/task_io_service_operation.hpp
+++ b/3party/boost/boost/asio/detail/task_io_service_operation.hpp
@@ -2,7 +2,7 @@
// detail/task_io_service_operation.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -18,7 +18,6 @@
#include <boost/system/error_code.hpp>
#include <boost/asio/detail/handler_tracking.hpp>
#include <boost/asio/detail/op_queue.hpp>
-#include <boost/asio/detail/task_io_service_fwd.hpp>
#include <boost/asio/detail/push_options.hpp>
@@ -26,6 +25,8 @@ namespace boost {
namespace asio {
namespace detail {
+class task_io_service;
+
// Base class for all operations. A function pointer is used instead of virtual
// functions to avoid the associated overhead.
class task_io_service_operation BOOST_ASIO_INHERIT_TRACKED_HANDLER
diff --git a/3party/boost/boost/asio/detail/task_io_service_thread_info.hpp b/3party/boost/boost/asio/detail/task_io_service_thread_info.hpp
index 4fcfac9c90..7165552eb7 100644
--- a/3party/boost/boost/asio/detail/task_io_service_thread_info.hpp
+++ b/3party/boost/boost/asio/detail/task_io_service_thread_info.hpp
@@ -2,7 +2,7 @@
// detail/task_io_service_thread_info.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -15,9 +15,7 @@
# pragma once
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-#include <boost/asio/detail/event.hpp>
#include <boost/asio/detail/op_queue.hpp>
-#include <boost/asio/detail/task_io_service_fwd.hpp>
#include <boost/asio/detail/thread_info_base.hpp>
#include <boost/asio/detail/push_options.hpp>
@@ -26,12 +24,13 @@ namespace boost {
namespace asio {
namespace detail {
+class task_io_service;
+class task_io_service_operation;
+
struct task_io_service_thread_info : public thread_info_base
{
- event* wakeup_event;
op_queue<task_io_service_operation> private_op_queue;
long private_outstanding_work;
- task_io_service_thread_info* next;
};
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/thread.hpp b/3party/boost/boost/asio/detail/thread.hpp
index 11bcd16aa3..68755e439a 100644
--- a/3party/boost/boost/asio/detail/thread.hpp
+++ b/3party/boost/boost/asio/detail/thread.hpp
@@ -2,7 +2,7 @@
// detail/thread.hpp
// ~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,8 +27,10 @@
# endif
#elif defined(BOOST_ASIO_HAS_PTHREADS)
# include <boost/asio/detail/posix_thread.hpp>
+#elif defined(BOOST_ASIO_HAS_STD_THREAD)
+# include <boost/asio/detail/std_thread.hpp>
#else
-# error Only Windows and POSIX are supported!
+# error Only Windows, POSIX and std::thread are supported!
#endif
namespace boost {
@@ -45,6 +47,8 @@ typedef win_thread thread;
# endif
#elif defined(BOOST_ASIO_HAS_PTHREADS)
typedef posix_thread thread;
+#elif defined(BOOST_ASIO_HAS_STD_THREAD)
+typedef std_thread thread;
#endif
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/thread_info_base.hpp b/3party/boost/boost/asio/detail/thread_info_base.hpp
index fedcda7219..9a12e254b3 100644
--- a/3party/boost/boost/asio/detail/thread_info_base.hpp
+++ b/3party/boost/boost/asio/detail/thread_info_base.hpp
@@ -2,7 +2,7 @@
// detail/thread_info_base.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/throw_error.hpp b/3party/boost/boost/asio/detail/throw_error.hpp
index 39c1b15aa6..3ca8b8a394 100644
--- a/3party/boost/boost/asio/detail/throw_error.hpp
+++ b/3party/boost/boost/asio/detail/throw_error.hpp
@@ -2,7 +2,7 @@
// detail/throw_error.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/throw_exception.hpp b/3party/boost/boost/asio/detail/throw_exception.hpp
index bbf6eadd49..636e1a2283 100644
--- a/3party/boost/boost/asio/detail/throw_exception.hpp
+++ b/3party/boost/boost/asio/detail/throw_exception.hpp
@@ -2,7 +2,7 @@
// detail/throw_exception.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/timer_queue.hpp b/3party/boost/boost/asio/detail/timer_queue.hpp
index 02e5b2897b..1c94bcd987 100644
--- a/3party/boost/boost/asio/detail/timer_queue.hpp
+++ b/3party/boost/boost/asio/detail/timer_queue.hpp
@@ -2,7 +2,7 @@
// detail/timer_queue.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/timer_queue_base.hpp b/3party/boost/boost/asio/detail/timer_queue_base.hpp
index 2a1e84455a..44ac90fbd6 100644
--- a/3party/boost/boost/asio/detail/timer_queue_base.hpp
+++ b/3party/boost/boost/asio/detail/timer_queue_base.hpp
@@ -2,7 +2,7 @@
// detail/timer_queue_base.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +58,9 @@ private:
timer_queue_base* next_;
};
+template <typename Time_Traits>
+class timer_queue;
+
} // namespace detail
} // namespace asio
} // namespace boost
diff --git a/3party/boost/boost/asio/detail/timer_queue_fwd.hpp b/3party/boost/boost/asio/detail/timer_queue_fwd.hpp
deleted file mode 100644
index 846d512b9b..0000000000
--- a/3party/boost/boost/asio/detail/timer_queue_fwd.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// detail/timer_queue_fwd.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// 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_ASIO_DETAIL_TIMER_QUEUE_FWD_HPP
-#define BOOST_ASIO_DETAIL_TIMER_QUEUE_FWD_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-
-namespace boost {
-namespace asio {
-namespace detail {
-
-template <typename Time_Traits>
-class timer_queue;
-
-} // namespace detail
-} // namespace asio
-} // namespace boost
-
-#endif // BOOST_ASIO_DETAIL_TIMER_QUEUE_FWD_HPP
diff --git a/3party/boost/boost/asio/detail/timer_queue_ptime.hpp b/3party/boost/boost/asio/detail/timer_queue_ptime.hpp
index 243b5d0250..91640590e9 100644
--- a/3party/boost/boost/asio/detail/timer_queue_ptime.hpp
+++ b/3party/boost/boost/asio/detail/timer_queue_ptime.hpp
@@ -2,7 +2,7 @@
// detail/timer_queue_ptime.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/timer_queue_set.hpp b/3party/boost/boost/asio/detail/timer_queue_set.hpp
index 94a189f6e1..e0086132d4 100644
--- a/3party/boost/boost/asio/detail/timer_queue_set.hpp
+++ b/3party/boost/boost/asio/detail/timer_queue_set.hpp
@@ -2,7 +2,7 @@
// detail/timer_queue_set.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/timer_scheduler.hpp b/3party/boost/boost/asio/detail/timer_scheduler.hpp
index e0bd35a1f8..8fdc36fe47 100644
--- a/3party/boost/boost/asio/detail/timer_scheduler.hpp
+++ b/3party/boost/boost/asio/detail/timer_scheduler.hpp
@@ -2,7 +2,7 @@
// detail/timer_scheduler.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -18,7 +18,9 @@
#include <boost/asio/detail/config.hpp>
#include <boost/asio/detail/timer_scheduler_fwd.hpp>
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/winrt_timer_scheduler.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
# include <boost/asio/detail/win_iocp_io_service.hpp>
#elif defined(BOOST_ASIO_HAS_EPOLL)
# include <boost/asio/detail/epoll_reactor.hpp>
diff --git a/3party/boost/boost/asio/detail/timer_scheduler_fwd.hpp b/3party/boost/boost/asio/detail/timer_scheduler_fwd.hpp
index 90545f3b2c..5bcf249434 100644
--- a/3party/boost/boost/asio/detail/timer_scheduler_fwd.hpp
+++ b/3party/boost/boost/asio/detail/timer_scheduler_fwd.hpp
@@ -2,7 +2,7 @@
// detail/timer_scheduler_fwd.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -17,32 +17,22 @@
#include <boost/asio/detail/config.hpp>
-#if defined(BOOST_ASIO_HAS_IOCP)
-# include <boost/asio/detail/win_iocp_io_service_fwd.hpp>
-#elif defined(BOOST_ASIO_HAS_EPOLL)
-# include <boost/asio/detail/epoll_reactor_fwd.hpp>
-#elif defined(BOOST_ASIO_HAS_KQUEUE)
-# include <boost/asio/detail/kqueue_reactor_fwd.hpp>
-#elif defined(BOOST_ASIO_HAS_DEV_POLL)
-# include <boost/asio/detail/dev_poll_reactor_fwd.hpp>
-#else
-# include <boost/asio/detail/select_reactor_fwd.hpp>
-#endif
-
namespace boost {
namespace asio {
namespace detail {
-#if defined(BOOST_ASIO_HAS_IOCP)
-typedef win_iocp_io_service timer_scheduler;
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+typedef class winrt_timer_scheduler timer_scheduler;
+#elif defined(BOOST_ASIO_HAS_IOCP)
+typedef class win_iocp_io_service timer_scheduler;
#elif defined(BOOST_ASIO_HAS_EPOLL)
-typedef epoll_reactor timer_scheduler;
+typedef class epoll_reactor timer_scheduler;
#elif defined(BOOST_ASIO_HAS_KQUEUE)
-typedef kqueue_reactor timer_scheduler;
+typedef class kqueue_reactor timer_scheduler;
#elif defined(BOOST_ASIO_HAS_DEV_POLL)
-typedef dev_poll_reactor timer_scheduler;
+typedef class dev_poll_reactor timer_scheduler;
#else
-typedef select_reactor timer_scheduler;
+typedef class select_reactor timer_scheduler;
#endif
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/tss_ptr.hpp b/3party/boost/boost/asio/detail/tss_ptr.hpp
index d26212eddd..4b4e7666c7 100644
--- a/3party/boost/boost/asio/detail/tss_ptr.hpp
+++ b/3party/boost/boost/asio/detail/tss_ptr.hpp
@@ -2,7 +2,7 @@
// detail/tss_ptr.hpp
// ~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/type_traits.hpp b/3party/boost/boost/asio/detail/type_traits.hpp
index b42c65397f..67e04041d6 100644
--- a/3party/boost/boost/asio/detail/type_traits.hpp
+++ b/3party/boost/boost/asio/detail/type_traits.hpp
@@ -2,7 +2,7 @@
// detail/type_traits.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/variadic_templates.hpp b/3party/boost/boost/asio/detail/variadic_templates.hpp
new file mode 100644
index 0000000000..b116fe8dcc
--- /dev/null
+++ b/3party/boost/boost/asio/detail/variadic_templates.hpp
@@ -0,0 +1,63 @@
+//
+// detail/variadic_templates.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_VARIADIC_TEMPLATES_HPP
+#define BOOST_ASIO_DETAIL_VARIADIC_TEMPLATES_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+# define BOOST_ASIO_VARIADIC_TPARAMS(n) BOOST_ASIO_VARIADIC_TPARAMS_##n
+
+# define BOOST_ASIO_VARIADIC_TPARAMS_1 \
+ typename T1
+# define BOOST_ASIO_VARIADIC_TPARAMS_2 \
+ typename T1, typename T2
+# define BOOST_ASIO_VARIADIC_TPARAMS_3 \
+ typename T1, typename T2, typename T3
+# define BOOST_ASIO_VARIADIC_TPARAMS_4 \
+ typename T1, typename T2, typename T3, typename T4
+# define BOOST_ASIO_VARIADIC_TPARAMS_5 \
+ typename T1, typename T2, typename T3, typename T4, typename T5
+
+# define BOOST_ASIO_VARIADIC_TARGS(n) BOOST_ASIO_VARIADIC_TARGS_##n
+
+# define BOOST_ASIO_VARIADIC_TARGS_1 x1
+# define BOOST_ASIO_VARIADIC_TARGS_2 x1, x2
+# define BOOST_ASIO_VARIADIC_TARGS_3 x1, x2, x3
+# define BOOST_ASIO_VARIADIC_TARGS_4 x1, x2, x3, x4
+# define BOOST_ASIO_VARIADIC_TARGS_5 x1, x2, x3, x4, x5
+
+# define BOOST_ASIO_VARIADIC_PARAMS(n) BOOST_ASIO_VARIADIC_PARAMS_##n
+
+# define BOOST_ASIO_VARIADIC_PARAMS_1 T1 x1
+# define BOOST_ASIO_VARIADIC_PARAMS_2 T1 x1, T2 x2
+# define BOOST_ASIO_VARIADIC_PARAMS_3 T1 x1, T2 x2, T3 x3
+# define BOOST_ASIO_VARIADIC_PARAMS_4 T1 x1, T2 x2, T3 x3, T4 x4
+# define BOOST_ASIO_VARIADIC_PARAMS_5 T1 x1, T2 x2, T3 x3, T4 x4, T5 x5
+
+# define BOOST_ASIO_VARIADIC_ARGS(n) BOOST_ASIO_VARIADIC_ARGS_##n
+
+# define BOOST_ASIO_VARIADIC_ARGS_1 x1
+# define BOOST_ASIO_VARIADIC_ARGS_2 x1, x2
+# define BOOST_ASIO_VARIADIC_ARGS_3 x1, x2, x3
+# define BOOST_ASIO_VARIADIC_ARGS_4 x1, x2, x3, x4
+# define BOOST_ASIO_VARIADIC_ARGS_5 x1, x2, x3, x4, x5
+
+# define BOOST_ASIO_VARIADIC_GENERATE(m) m(1) m(2) m(3) m(4) m(5)
+
+#endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+#endif // BOOST_ASIO_DETAIL_VARIADIC_TEMPLATES_HPP
diff --git a/3party/boost/boost/asio/detail/wait_handler.hpp b/3party/boost/boost/asio/detail/wait_handler.hpp
index be31d20763..6f2cbc53f9 100644
--- a/3party/boost/boost/asio/detail/wait_handler.hpp
+++ b/3party/boost/boost/asio/detail/wait_handler.hpp
@@ -2,7 +2,7 @@
// detail/wait_handler.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/wait_op.hpp b/3party/boost/boost/asio/detail/wait_op.hpp
index acf681fff1..cb6c045248 100644
--- a/3party/boost/boost/asio/detail/wait_op.hpp
+++ b/3party/boost/boost/asio/detail/wait_op.hpp
@@ -2,7 +2,7 @@
// detail/wait_op.hpp
// ~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/weak_ptr.hpp b/3party/boost/boost/asio/detail/weak_ptr.hpp
index 4f974adadf..2604d10715 100644
--- a/3party/boost/boost/asio/detail/weak_ptr.hpp
+++ b/3party/boost/boost/asio/detail/weak_ptr.hpp
@@ -2,7 +2,7 @@
// detail/weak_ptr.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_event.hpp b/3party/boost/boost/asio/detail/win_event.hpp
index f78a155c6e..8ef90c5266 100644
--- a/3party/boost/boost/asio/detail/win_event.hpp
+++ b/3party/boost/boost/asio/detail/win_event.hpp
@@ -2,7 +2,7 @@
// detail/win_event.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,27 +37,50 @@ public:
BOOST_ASIO_DECL win_event();
// Destructor.
- ~win_event()
+ BOOST_ASIO_DECL ~win_event();
+
+ // Signal the event. (Retained for backward compatibility.)
+ template <typename Lock>
+ void signal(Lock& lock)
{
- ::CloseHandle(event_);
+ this->signal_all(lock);
}
- // Signal the event.
+ // Signal all waiters.
template <typename Lock>
- void signal(Lock& lock)
+ void signal_all(Lock& lock)
{
BOOST_ASIO_ASSERT(lock.locked());
(void)lock;
- ::SetEvent(event_);
+ state_ |= 1;
+ ::SetEvent(events_[0]);
}
- // Signal the event and unlock the mutex.
+ // Unlock the mutex and signal one waiter.
template <typename Lock>
- void signal_and_unlock(Lock& lock)
+ void unlock_and_signal_one(Lock& lock)
{
BOOST_ASIO_ASSERT(lock.locked());
+ state_ |= 1;
+ bool have_waiters = (state_ > 1);
lock.unlock();
- ::SetEvent(event_);
+ if (have_waiters)
+ ::SetEvent(events_[1]);
+ }
+
+ // If there's a waiter, unlock the mutex and signal it.
+ template <typename Lock>
+ bool maybe_unlock_and_signal_one(Lock& lock)
+ {
+ BOOST_ASIO_ASSERT(lock.locked());
+ state_ |= 1;
+ if (state_ > 1)
+ {
+ lock.unlock();
+ ::SetEvent(events_[1]);
+ return true;
+ }
+ return false;
}
// Reset the event.
@@ -66,7 +89,8 @@ public:
{
BOOST_ASIO_ASSERT(lock.locked());
(void)lock;
- ::ResetEvent(event_);
+ ::ResetEvent(events_[0]);
+ state_ &= ~std::size_t(1);
}
// Wait for the event to become signalled.
@@ -74,13 +98,19 @@ public:
void wait(Lock& lock)
{
BOOST_ASIO_ASSERT(lock.locked());
- lock.unlock();
- ::WaitForSingleObject(event_, INFINITE);
- lock.lock();
+ while ((state_ & 1) == 0)
+ {
+ state_ += 2;
+ lock.unlock();
+ ::WaitForMultipleObjects(2, events_, false, INFINITE);
+ lock.lock();
+ state_ -= 2;
+ }
}
private:
- HANDLE event_;
+ HANDLE events_[2];
+ std::size_t state_;
};
} // namespace detail
diff --git a/3party/boost/boost/asio/detail/win_fd_set_adapter.hpp b/3party/boost/boost/asio/detail/win_fd_set_adapter.hpp
index 09db196f92..89f5ffdbef 100644
--- a/3party/boost/boost/asio/detail/win_fd_set_adapter.hpp
+++ b/3party/boost/boost/asio/detail/win_fd_set_adapter.hpp
@@ -2,7 +2,7 @@
// detail/win_fd_set_adapter.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -20,6 +20,7 @@
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/reactor_op_queue.hpp>
#include <boost/asio/detail/socket_types.hpp>
#include <boost/asio/detail/push_options.hpp>
@@ -61,26 +62,22 @@ public:
if (fd_set_->fd_array[i] == descriptor)
return true;
- if (fd_set_->fd_count == capacity_)
- {
- u_int new_capacity = capacity_ + capacity_ / 2;
- win_fd_set* new_fd_set = static_cast<win_fd_set*>(::operator new(
- sizeof(win_fd_set) - sizeof(SOCKET)
- + sizeof(SOCKET) * (new_capacity)));
-
- new_fd_set->fd_count = fd_set_->fd_count;
- for (u_int i = 0; i < fd_set_->fd_count; ++i)
- new_fd_set->fd_array[i] = fd_set_->fd_array[i];
-
- ::operator delete(fd_set_);
- fd_set_ = new_fd_set;
- capacity_ = new_capacity;
- }
-
+ reserve(fd_set_->fd_count + 1);
fd_set_->fd_array[fd_set_->fd_count++] = descriptor;
return true;
}
+ void set(reactor_op_queue<socket_type>& operations, op_queue<operation>&)
+ {
+ reactor_op_queue<socket_type>::iterator i = operations.begin();
+ while (i != operations.end())
+ {
+ reactor_op_queue<socket_type>::iterator op_iter = i++;
+ reserve(fd_set_->fd_count + 1);
+ fd_set_->fd_array[fd_set_->fd_count++] = op_iter->first;
+ }
+ }
+
bool is_set(socket_type descriptor) const
{
return !!__WSAFDIsSet(descriptor,
@@ -97,8 +94,14 @@ public:
return max_descriptor_;
}
-private:
+ void perform(reactor_op_queue<socket_type>& operations,
+ op_queue<operation>& ops) const
+ {
+ for (u_int i = 0; i < fd_set_->fd_count; ++i)
+ operations.perform_operations(fd_set_->fd_array[i], ops);
+ }
+private:
// This structure is defined to be compatible with the Windows API fd_set
// structure, but without being dependent on the value of FD_SETSIZE. We use
// the "struct hack" to allow the number of descriptors to be varied at
@@ -109,6 +112,29 @@ private:
SOCKET fd_array[1];
};
+ // Increase the fd_set_ capacity to at least the specified number of elements.
+ void reserve(u_int n)
+ {
+ if (n <= capacity_)
+ return;
+
+ u_int new_capacity = capacity_ + capacity_ / 2;
+ if (new_capacity < n)
+ new_capacity = n;
+
+ win_fd_set* new_fd_set = static_cast<win_fd_set*>(::operator new(
+ sizeof(win_fd_set) - sizeof(SOCKET)
+ + sizeof(SOCKET) * (new_capacity)));
+
+ new_fd_set->fd_count = fd_set_->fd_count;
+ for (u_int i = 0; i < fd_set_->fd_count; ++i)
+ new_fd_set->fd_array[i] = fd_set_->fd_array[i];
+
+ ::operator delete(fd_set_);
+ fd_set_ = new_fd_set;
+ capacity_ = new_capacity;
+ }
+
win_fd_set* fd_set_;
u_int capacity_;
socket_type max_descriptor_;
diff --git a/3party/boost/boost/asio/detail/win_fenced_block.hpp b/3party/boost/boost/asio/detail/win_fenced_block.hpp
index 60cc1f7aa1..ebe580de1f 100644
--- a/3party/boost/boost/asio/detail/win_fenced_block.hpp
+++ b/3party/boost/boost/asio/detail/win_fenced_block.hpp
@@ -2,7 +2,7 @@
// detail/win_fenced_block.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_iocp_handle_read_op.hpp b/3party/boost/boost/asio/detail/win_iocp_handle_read_op.hpp
index 1ca4222f8a..a69a291aef 100644
--- a/3party/boost/boost/asio/detail/win_iocp_handle_read_op.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_handle_read_op.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_handle_read_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/win_iocp_handle_service.hpp b/3party/boost/boost/asio/detail/win_iocp_handle_service.hpp
index 97460f3aad..c7698846db 100644
--- a/3party/boost/boost/asio/detail/win_iocp_handle_service.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_handle_service.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_handle_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/win_iocp_handle_write_op.hpp b/3party/boost/boost/asio/detail/win_iocp_handle_write_op.hpp
index f9bc3f0205..48af0b70b7 100644
--- a/3party/boost/boost/asio/detail/win_iocp_handle_write_op.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_handle_write_op.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_handle_write_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/win_iocp_io_service.hpp b/3party/boost/boost/asio/detail/win_iocp_io_service.hpp
index 60222d5c63..215b796c01 100644
--- a/3party/boost/boost/asio/detail/win_iocp_io_service.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_io_service.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_io_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,10 +28,8 @@
#include <boost/asio/detail/socket_types.hpp>
#include <boost/asio/detail/thread.hpp>
#include <boost/asio/detail/timer_queue_base.hpp>
-#include <boost/asio/detail/timer_queue_fwd.hpp>
#include <boost/asio/detail/timer_queue_set.hpp>
#include <boost/asio/detail/wait_op.hpp>
-#include <boost/asio/detail/win_iocp_io_service_fwd.hpp>
#include <boost/asio/detail/win_iocp_operation.hpp>
#include <boost/asio/detail/win_iocp_thread_info.hpp>
@@ -209,6 +207,9 @@ private:
// either 0 or 1).
BOOST_ASIO_DECL size_t do_one(bool block, boost::system::error_code& ec);
+ // Helper to calculate the GetQueuedCompletionStatus timeout.
+ BOOST_ASIO_DECL static DWORD get_gqcs_timeout();
+
// Helper function to add a new timer queue.
BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue);
@@ -248,11 +249,11 @@ private:
enum
{
- // Timeout to use with GetQueuedCompletionStatus. Some versions of windows
- // have a "bug" where a call to GetQueuedCompletionStatus can appear stuck
- // even though there are events waiting on the queue. Using a timeout helps
- // to work around the issue.
- gqcs_timeout = 500,
+ // Timeout to use with GetQueuedCompletionStatus on older versions of
+ // Windows. Some versions of windows have a "bug" where a call to
+ // GetQueuedCompletionStatus can appear stuck even though there are events
+ // waiting on the queue. Using a timeout helps to work around the issue.
+ default_gqcs_timeout = 500,
// Maximum waitable timer timeout, in milliseconds.
max_timeout_msec = 5 * 60 * 1000,
@@ -270,6 +271,9 @@ private:
overlapped_contains_result = 2
};
+ // Timeout to use with GetQueuedCompletionStatus.
+ const DWORD gqcs_timeout_;
+
// Function object for processing timeouts in a background thread.
struct timer_thread_function;
friend struct timer_thread_function;
diff --git a/3party/boost/boost/asio/detail/win_iocp_io_service_fwd.hpp b/3party/boost/boost/asio/detail/win_iocp_io_service_fwd.hpp
deleted file mode 100644
index b833f58301..0000000000
--- a/3party/boost/boost/asio/detail/win_iocp_io_service_fwd.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// detail/win_iocp_io_service_fwd.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// 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_ASIO_DETAIL_WIN_IOCP_IO_SERVICE_FWD_HPP
-#define BOOST_ASIO_DETAIL_WIN_IOCP_IO_SERVICE_FWD_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-
-#include <boost/asio/detail/config.hpp>
-
-#if defined(BOOST_ASIO_HAS_IOCP)
-
-namespace boost {
-namespace asio {
-namespace detail {
-
-class win_iocp_io_service;
-class win_iocp_overlapped_ptr;
-
-} // namespace detail
-} // namespace asio
-} // namespace boost
-
-#endif // defined(BOOST_ASIO_HAS_IOCP)
-
-#endif // BOOST_ASIO_DETAIL_WIN_IOCP_IO_SERVICE_FWD_HPP
diff --git a/3party/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp b/3party/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp
index 155b185eb1..ae49f3f679 100644
--- a/3party/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_null_buffers_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_iocp_operation.hpp b/3party/boost/boost/asio/detail/win_iocp_operation.hpp
index 549da82f9a..41a58c64cd 100644
--- a/3party/boost/boost/asio/detail/win_iocp_operation.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_operation.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_operation.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +22,6 @@
#include <boost/asio/detail/handler_tracking.hpp>
#include <boost/asio/detail/op_queue.hpp>
#include <boost/asio/detail/socket_types.hpp>
-#include <boost/asio/detail/win_iocp_io_service_fwd.hpp>
#include <boost/system/error_code.hpp>
#include <boost/asio/detail/push_options.hpp>
@@ -31,6 +30,8 @@ namespace boost {
namespace asio {
namespace detail {
+class win_iocp_io_service;
+
// Base class for all operations. A function pointer is used instead of virtual
// functions to avoid the associated overhead.
class win_iocp_operation
diff --git a/3party/boost/boost/asio/detail/win_iocp_overlapped_op.hpp b/3party/boost/boost/asio/detail/win_iocp_overlapped_op.hpp
index bba0e110e5..9a48433461 100644
--- a/3party/boost/boost/asio/detail/win_iocp_overlapped_op.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_overlapped_op.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_overlapped_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_iocp_overlapped_ptr.hpp b/3party/boost/boost/asio/detail/win_iocp_overlapped_ptr.hpp
index 318d4ba2c0..d461e0d747 100644
--- a/3party/boost/boost/asio/detail/win_iocp_overlapped_ptr.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_overlapped_ptr.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_overlapped_ptr.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_iocp_serial_port_service.hpp b/3party/boost/boost/asio/detail/win_iocp_serial_port_service.hpp
index b7fb6e9824..a8191ee4dc 100644
--- a/3party/boost/boost/asio/detail/win_iocp_serial_port_service.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_serial_port_service.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_serial_port_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp
index 3e7e944a70..86684d5234 100644
--- a/3party/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_socket_accept_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_iocp_socket_connect_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_connect_op.hpp
new file mode 100644
index 0000000000..f940e0a464
--- /dev/null
+++ b/3party/boost/boost/asio/detail/win_iocp_socket_connect_op.hpp
@@ -0,0 +1,126 @@
+//
+// detail/win_iocp_socket_connect_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WIN_IOCP_SOCKET_CONNECT_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_CONNECT_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_iocp_socket_connect_op_base : public reactor_op
+{
+public:
+ win_iocp_socket_connect_op_base(socket_type socket, func_type complete_func)
+ : reactor_op(&win_iocp_socket_connect_op_base::do_perform, complete_func),
+ socket_(socket),
+ connect_ex_(false)
+ {
+ }
+
+ static bool do_perform(reactor_op* base)
+ {
+ win_iocp_socket_connect_op_base* o(
+ static_cast<win_iocp_socket_connect_op_base*>(base));
+
+ return socket_ops::non_blocking_connect(o->socket_, o->ec_);
+ }
+
+ socket_type socket_;
+ bool connect_ex_;
+};
+
+template <typename Handler>
+class win_iocp_socket_connect_op : public win_iocp_socket_connect_op_base
+{
+public:
+ BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_socket_connect_op);
+
+ win_iocp_socket_connect_op(socket_type socket, Handler& handler)
+ : win_iocp_socket_connect_op_base(socket,
+ &win_iocp_socket_connect_op::do_complete),
+ handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+ {
+ }
+
+ static void do_complete(io_service_impl* owner, operation* base,
+ const boost::system::error_code& result_ec,
+ std::size_t /*bytes_transferred*/)
+ {
+ boost::system::error_code ec(result_ec);
+
+ // Take ownership of the operation object.
+ win_iocp_socket_connect_op* o(
+ static_cast<win_iocp_socket_connect_op*>(base));
+ ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+ if (owner)
+ {
+ if (o->connect_ex_)
+ socket_ops::complete_iocp_connect(o->socket_, ec);
+ else
+ ec = o->ec_;
+ }
+
+ BOOST_ASIO_HANDLER_COMPLETION((o));
+
+ // Make a copy of the handler so that the memory can be deallocated before
+ // the upcall is made. Even if we're not about to make an upcall, a
+ // sub-object of the handler may be the true owner of the memory associated
+ // with the handler. Consequently, a local copy of the handler is required
+ // to ensure that any owning sub-object remains valid until after we have
+ // deallocated the memory here.
+ detail::binder1<Handler, boost::system::error_code>
+ handler(o->handler_, ec);
+ p.h = boost::asio::detail::addressof(handler.handler_);
+ p.reset();
+
+ // Make the upcall if required.
+ if (owner)
+ {
+ fenced_block b(fenced_block::half);
+ BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_));
+ boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+ BOOST_ASIO_HANDLER_INVOCATION_END;
+ }
+ }
+
+private:
+ Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_CONNECT_OP_HPP
diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp
index b6dc50567e..f7fdcee057 100644
--- a/3party/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_socket_recv_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_iocp_socket_recvfrom_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp
index a77542a827..5e1ade67ff 100644
--- a/3party/boost/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_socket_recvfrom_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_iocp_socket_recvmsg_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp
index 896c6d6af1..a09feab9e7 100644
--- a/3party/boost/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_socket_recvmsg_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_iocp_socket_send_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_send_op.hpp
index 9049f84cdc..ef25b88b50 100644
--- a/3party/boost/boost/asio/detail/win_iocp_socket_send_op.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_socket_send_op.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_socket_send_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_iocp_socket_service.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_service.hpp
index 24690d58a3..d82e40e787 100644
--- a/3party/boost/boost/asio/detail/win_iocp_socket_service.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_socket_service.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_socket_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 @@
#include <boost/asio/detail/handler_invoke_helpers.hpp>
#include <boost/asio/detail/mutex.hpp>
#include <boost/asio/detail/operation.hpp>
-#include <boost/asio/detail/reactive_socket_connect_op.hpp>
#include <boost/asio/detail/reactor.hpp>
#include <boost/asio/detail/reactor_op.hpp>
#include <boost/asio/detail/socket_holder.hpp>
@@ -40,6 +39,7 @@
#include <boost/asio/detail/win_iocp_io_service.hpp>
#include <boost/asio/detail/win_iocp_null_buffers_op.hpp>
#include <boost/asio/detail/win_iocp_socket_accept_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_connect_op.hpp>
#include <boost/asio/detail/win_iocp_socket_recvfrom_op.hpp>
#include <boost/asio/detail/win_iocp_socket_send_op.hpp>
#include <boost/asio/detail/win_iocp_socket_service_base.hpp>
@@ -166,6 +166,24 @@ public:
other_impl.remote_endpoint_ = endpoint_type();
}
+ // Move-construct a new socket implementation from another protocol type.
+ template <typename Protocol1>
+ void converting_move_construct(implementation_type& impl,
+ typename win_iocp_socket_service<
+ Protocol1>::implementation_type& other_impl)
+ {
+ this->base_move_construct(impl, other_impl);
+
+ impl.protocol_ = protocol_type(other_impl.protocol_);
+ other_impl.protocol_ = typename Protocol1::endpoint().protocol();
+
+ impl.have_remote_endpoint_ = other_impl.have_remote_endpoint_;
+ other_impl.have_remote_endpoint_ = false;
+
+ impl.remote_endpoint_ = other_impl.remote_endpoint_;
+ other_impl.remote_endpoint_ = typename Protocol1::endpoint();
+ }
+
// Open a new socket implementation.
boost::system::error_code open(implementation_type& impl,
const protocol_type& protocol, boost::system::error_code& ec)
@@ -433,7 +451,7 @@ public:
peer_endpoint ? &addr_len : 0, ec));
// On success, assign new connection to peer socket object.
- if (new_socket.get() >= 0)
+ if (new_socket.get() != invalid_socket)
{
if (peer_endpoint)
peer_endpoint->resize(addr_len);
@@ -484,16 +502,16 @@ public:
const endpoint_type& peer_endpoint, Handler& handler)
{
// Allocate and construct an operation to wrap the handler.
- typedef reactive_socket_connect_op<Protocol, Handler> op;
+ typedef win_iocp_socket_connect_op<Handler> op;
typename op::ptr p = { boost::asio::detail::addressof(handler),
boost_asio_handler_alloc_helpers::allocate(
sizeof(op), handler), 0 };
- p.p = new (p.v) op(impl.socket_, peer_endpoint, handler);
+ p.p = new (p.v) op(impl.socket_, handler);
BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_connect"));
- start_connect_op(impl, p.p, peer_endpoint.data(),
- static_cast<int>(peer_endpoint.size()));
+ start_connect_op(impl, impl.protocol_.family(), impl.protocol_.type(),
+ peer_endpoint.data(), static_cast<int>(peer_endpoint.size()), p.p);
p.v = p.p = 0;
}
};
diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_service_base.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_service_base.hpp
index 8b6a72f058..f5f0223386 100644
--- a/3party/boost/boost/asio/detail/win_iocp_socket_service_base.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_socket_service_base.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_socket_service_base.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +37,7 @@
#include <boost/asio/detail/socket_types.hpp>
#include <boost/asio/detail/win_iocp_io_service.hpp>
#include <boost/asio/detail/win_iocp_null_buffers_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_connect_op.hpp>
#include <boost/asio/detail/win_iocp_socket_send_op.hpp>
#include <boost/asio/detail/win_iocp_socket_recv_op.hpp>
#include <boost/asio/detail/win_iocp_socket_recvmsg_op.hpp>
@@ -215,7 +216,7 @@ public:
template <typename ConstBufferSequence, typename Handler>
void async_send(base_implementation_type& impl,
const ConstBufferSequence& buffers,
- socket_base::message_flags flags, Handler handler)
+ socket_base::message_flags flags, Handler& handler)
{
// Allocate and construct an operation to wrap the handler.
typedef win_iocp_socket_send_op<ConstBufferSequence, Handler> op;
@@ -238,7 +239,7 @@ public:
// Start an asynchronous wait until data can be sent without blocking.
template <typename Handler>
void async_send(base_implementation_type& impl, const null_buffers&,
- socket_base::message_flags, Handler handler)
+ socket_base::message_flags, Handler& handler)
{
// Allocate and construct an operation to wrap the handler.
typedef win_iocp_null_buffers_op<Handler> op;
@@ -282,7 +283,7 @@ public:
template <typename MutableBufferSequence, typename Handler>
void async_receive(base_implementation_type& impl,
const MutableBufferSequence& buffers,
- socket_base::message_flags flags, Handler handler)
+ socket_base::message_flags flags, Handler& handler)
{
// Allocate and construct an operation to wrap the handler.
typedef win_iocp_socket_recv_op<MutableBufferSequence, Handler> op;
@@ -305,7 +306,7 @@ public:
// Wait until data can be received without blocking.
template <typename Handler>
void async_receive(base_implementation_type& impl, const null_buffers&,
- socket_base::message_flags flags, Handler handler)
+ socket_base::message_flags flags, Handler& handler)
{
// Allocate and construct an operation to wrap the handler.
typedef win_iocp_null_buffers_op<Handler> op;
@@ -356,7 +357,7 @@ public:
template <typename MutableBufferSequence, typename Handler>
void async_receive_with_flags(base_implementation_type& impl,
const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
- socket_base::message_flags& out_flags, Handler handler)
+ socket_base::message_flags& out_flags, Handler& handler)
{
// Allocate and construct an operation to wrap the handler.
typedef win_iocp_socket_recvmsg_op<MutableBufferSequence, Handler> op;
@@ -379,7 +380,7 @@ public:
template <typename Handler>
void async_receive_with_flags(base_implementation_type& impl,
const null_buffers&, socket_base::message_flags in_flags,
- socket_base::message_flags& out_flags, Handler handler)
+ socket_base::message_flags& out_flags, Handler& handler)
{
// Allocate and construct an operation to wrap the handler.
typedef win_iocp_null_buffers_op<Handler> op;
@@ -451,7 +452,8 @@ protected:
// Start the asynchronous connect operation using the reactor.
BOOST_ASIO_DECL void start_connect_op(base_implementation_type& impl,
- reactor_op* op, const socket_addr_type* addr, std::size_t addrlen);
+ int family, int type, const socket_addr_type* remote_addr,
+ std::size_t remote_addrlen, win_iocp_socket_connect_op_base* op);
// Helper function to close a socket when the associated object is being
// destroyed.
@@ -466,6 +468,16 @@ protected:
// this service.
BOOST_ASIO_DECL reactor& get_reactor();
+ // The type of a ConnectEx function pointer, as old SDKs may not provide it.
+ typedef BOOL (PASCAL *connect_ex_fn)(SOCKET,
+ const socket_addr_type*, int, void*, DWORD, DWORD*, OVERLAPPED*);
+
+ // Helper function to get the ConnectEx pointer. If no ConnectEx pointer has
+ // been obtained yet, one is obtained using WSAIoctl and the pointer is
+ // cached. Returns a null pointer if ConnectEx is not available.
+ BOOST_ASIO_DECL connect_ex_fn get_connect_ex(
+ base_implementation_type& impl, int type);
+
// Helper function to emulate InterlockedCompareExchangePointer functionality
// for:
// - very old Platform SDKs; and
@@ -489,6 +501,9 @@ protected:
// only if needed.
reactor* reactor_;
+ // Pointer to ConnectEx implementation.
+ void* connect_ex_;
+
// Mutex to protect access to the linked list of implementations.
boost::asio::detail::mutex mutex_;
diff --git a/3party/boost/boost/asio/detail/win_iocp_thread_info.hpp b/3party/boost/boost/asio/detail/win_iocp_thread_info.hpp
index f5d2c4123b..c036d393b9 100644
--- a/3party/boost/boost/asio/detail/win_iocp_thread_info.hpp
+++ b/3party/boost/boost/asio/detail/win_iocp_thread_info.hpp
@@ -2,7 +2,7 @@
// detail/win_iocp_thread_info.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_mutex.hpp b/3party/boost/boost/asio/detail/win_mutex.hpp
index a8e001bfc8..2f927b3b55 100644
--- a/3party/boost/boost/asio/detail/win_mutex.hpp
+++ b/3party/boost/boost/asio/detail/win_mutex.hpp
@@ -2,7 +2,7 @@
// detail/win_mutex.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_object_handle_service.hpp b/3party/boost/boost/asio/detail/win_object_handle_service.hpp
index edebf749cd..a9169ca9d6 100644
--- a/3party/boost/boost/asio/detail/win_object_handle_service.hpp
+++ b/3party/boost/boost/asio/detail/win_object_handle_service.hpp
@@ -2,7 +2,7 @@
// detail/win_object_handle_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2011 Boris Schaeling (boris@highscore.de)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -130,7 +130,7 @@ public:
/// Start an asynchronous wait.
template <typename Handler>
- void async_wait(implementation_type& impl, Handler handler)
+ void async_wait(implementation_type& impl, Handler& handler)
{
// Allocate and construct an operation to wrap the handler.
typedef wait_handler<Handler> op;
diff --git a/3party/boost/boost/asio/detail/win_static_mutex.hpp b/3party/boost/boost/asio/detail/win_static_mutex.hpp
index 6cbfd1df19..a6a7e111cd 100644
--- a/3party/boost/boost/asio/detail/win_static_mutex.hpp
+++ b/3party/boost/boost/asio/detail/win_static_mutex.hpp
@@ -2,7 +2,7 @@
// detail/win_static_mutex.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_thread.hpp b/3party/boost/boost/asio/detail/win_thread.hpp
index 2a745758ba..889eca690c 100644
--- a/3party/boost/boost/asio/detail/win_thread.hpp
+++ b/3party/boost/boost/asio/detail/win_thread.hpp
@@ -2,7 +2,7 @@
// detail/win_thread.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/win_tss_ptr.hpp b/3party/boost/boost/asio/detail/win_tss_ptr.hpp
index bc0d5bfa27..ca32feaccb 100644
--- a/3party/boost/boost/asio/detail/win_tss_ptr.hpp
+++ b/3party/boost/boost/asio/detail/win_tss_ptr.hpp
@@ -2,7 +2,7 @@
// detail/win_tss_ptr.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/wince_thread.hpp b/3party/boost/boost/asio/detail/wince_thread.hpp
index 33311770e8..6b9104af0c 100644
--- a/3party/boost/boost/asio/detail/wince_thread.hpp
+++ b/3party/boost/boost/asio/detail/wince_thread.hpp
@@ -2,7 +2,7 @@
// detail/wince_thread.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/winrt_async_manager.hpp b/3party/boost/boost/asio/detail/winrt_async_manager.hpp
new file mode 100644
index 0000000000..1c389a0ad7
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_async_manager.hpp
@@ -0,0 +1,296 @@
+//
+// detail/winrt_async_manager.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_ASYNC_MANAGER_HPP
+#define BOOST_ASIO_DETAIL_WINRT_ASYNC_MANAGER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <future>
+#include <boost/asio/detail/atomic_count.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class winrt_async_manager
+ : public boost::asio::detail::service_base<winrt_async_manager>
+{
+public:
+ // Constructor.
+ winrt_async_manager(boost::asio::io_service& io_service)
+ : boost::asio::detail::service_base<winrt_async_manager>(io_service),
+ io_service_(use_service<io_service_impl>(io_service)),
+ outstanding_ops_(1)
+ {
+ }
+
+ // Destructor.
+ ~winrt_async_manager()
+ {
+ }
+
+ // Destroy all user-defined handler objects owned by the service.
+ void shutdown_service()
+ {
+ if (--outstanding_ops_ > 0)
+ {
+ // Block until last operation is complete.
+ std::future<void> f = promise_.get_future();
+ f.wait();
+ }
+ }
+
+ void sync(Windows::Foundation::IAsyncAction^ action,
+ boost::system::error_code& ec)
+ {
+ using namespace Windows::Foundation;
+ using Windows::Foundation::AsyncStatus;
+
+ auto promise = std::make_shared<std::promise<boost::system::error_code>>();
+ auto future = promise->get_future();
+
+ action->Completed = ref new AsyncActionCompletedHandler(
+ [promise](IAsyncAction^ action, AsyncStatus status)
+ {
+ switch (status)
+ {
+ case AsyncStatus::Canceled:
+ promise->set_value(boost::asio::error::operation_aborted);
+ break;
+ case AsyncStatus::Error:
+ case AsyncStatus::Completed:
+ default:
+ boost::system::error_code ec(
+ action->ErrorCode.Value,
+ boost::system::system_category());
+ promise->set_value(ec);
+ break;
+ }
+ });
+
+ ec = future.get();
+ }
+
+ template <typename TResult>
+ TResult sync(Windows::Foundation::IAsyncOperation<TResult>^ operation,
+ boost::system::error_code& ec)
+ {
+ using namespace Windows::Foundation;
+ using Windows::Foundation::AsyncStatus;
+
+ auto promise = std::make_shared<std::promise<boost::system::error_code>>();
+ auto future = promise->get_future();
+
+ operation->Completed = ref new AsyncOperationCompletedHandler<TResult>(
+ [promise](IAsyncOperation<TResult>^ operation, AsyncStatus status)
+ {
+ switch (status)
+ {
+ case AsyncStatus::Canceled:
+ promise->set_value(boost::asio::error::operation_aborted);
+ break;
+ case AsyncStatus::Error:
+ case AsyncStatus::Completed:
+ default:
+ boost::system::error_code ec(
+ operation->ErrorCode.Value,
+ boost::system::system_category());
+ promise->set_value(ec);
+ break;
+ }
+ });
+
+ ec = future.get();
+ return operation->GetResults();
+ }
+
+ template <typename TResult, typename TProgress>
+ TResult sync(
+ Windows::Foundation::IAsyncOperationWithProgress<
+ TResult, TProgress>^ operation,
+ boost::system::error_code& ec)
+ {
+ using namespace Windows::Foundation;
+ using Windows::Foundation::AsyncStatus;
+
+ auto promise = std::make_shared<std::promise<boost::system::error_code>>();
+ auto future = promise->get_future();
+
+ operation->Completed
+ = ref new AsyncOperationWithProgressCompletedHandler<TResult, TProgress>(
+ [promise](IAsyncOperationWithProgress<TResult, TProgress>^ operation,
+ AsyncStatus status)
+ {
+ switch (status)
+ {
+ case AsyncStatus::Canceled:
+ promise->set_value(boost::asio::error::operation_aborted);
+ break;
+ case AsyncStatus::Started:
+ break;
+ case AsyncStatus::Error:
+ case AsyncStatus::Completed:
+ default:
+ boost::system::error_code ec(
+ operation->ErrorCode.Value,
+ boost::system::system_category());
+ promise->set_value(ec);
+ break;
+ }
+ });
+
+ ec = future.get();
+ return operation->GetResults();
+ }
+
+ void async(Windows::Foundation::IAsyncAction^ action,
+ winrt_async_op<void>* handler)
+ {
+ using namespace Windows::Foundation;
+ using Windows::Foundation::AsyncStatus;
+
+ auto on_completed = ref new AsyncActionCompletedHandler(
+ [this, handler](IAsyncAction^ action, AsyncStatus status)
+ {
+ switch (status)
+ {
+ case AsyncStatus::Canceled:
+ handler->ec_ = boost::asio::error::operation_aborted;
+ break;
+ case AsyncStatus::Started:
+ return;
+ case AsyncStatus::Completed:
+ case AsyncStatus::Error:
+ default:
+ handler->ec_ = boost::system::error_code(
+ action->ErrorCode.Value,
+ boost::system::system_category());
+ break;
+ }
+ io_service_.post_deferred_completion(handler);
+ if (--outstanding_ops_ == 0)
+ promise_.set_value();
+ });
+
+ io_service_.work_started();
+ ++outstanding_ops_;
+ action->Completed = on_completed;
+ }
+
+ template <typename TResult>
+ void async(Windows::Foundation::IAsyncOperation<TResult>^ operation,
+ winrt_async_op<TResult>* handler)
+ {
+ using namespace Windows::Foundation;
+ using Windows::Foundation::AsyncStatus;
+
+ auto on_completed = ref new AsyncOperationCompletedHandler<TResult>(
+ [this, handler](IAsyncOperation<TResult>^ operation, AsyncStatus status)
+ {
+ switch (status)
+ {
+ case AsyncStatus::Canceled:
+ handler->ec_ = boost::asio::error::operation_aborted;
+ break;
+ case AsyncStatus::Started:
+ return;
+ case AsyncStatus::Completed:
+ handler->result_ = operation->GetResults();
+ // Fall through.
+ case AsyncStatus::Error:
+ default:
+ handler->ec_ = boost::system::error_code(
+ operation->ErrorCode.Value,
+ boost::system::system_category());
+ break;
+ }
+ io_service_.post_deferred_completion(handler);
+ if (--outstanding_ops_ == 0)
+ promise_.set_value();
+ });
+
+ io_service_.work_started();
+ ++outstanding_ops_;
+ operation->Completed = on_completed;
+ }
+
+ template <typename TResult, typename TProgress>
+ void async(
+ Windows::Foundation::IAsyncOperationWithProgress<
+ TResult, TProgress>^ operation,
+ winrt_async_op<TResult>* handler)
+ {
+ using namespace Windows::Foundation;
+ using Windows::Foundation::AsyncStatus;
+
+ auto on_completed
+ = ref new AsyncOperationWithProgressCompletedHandler<TResult, TProgress>(
+ [this, handler](IAsyncOperationWithProgress<
+ TResult, TProgress>^ operation, AsyncStatus status)
+ {
+ switch (status)
+ {
+ case AsyncStatus::Canceled:
+ handler->ec_ = boost::asio::error::operation_aborted;
+ break;
+ case AsyncStatus::Started:
+ return;
+ case AsyncStatus::Completed:
+ handler->result_ = operation->GetResults();
+ // Fall through.
+ case AsyncStatus::Error:
+ default:
+ handler->ec_ = boost::system::error_code(
+ operation->ErrorCode.Value,
+ boost::system::system_category());
+ break;
+ }
+ io_service_.post_deferred_completion(handler);
+ if (--outstanding_ops_ == 0)
+ promise_.set_value();
+ });
+
+ io_service_.work_started();
+ ++outstanding_ops_;
+ operation->Completed = on_completed;
+ }
+
+private:
+ // The io_service implementation used to post completed handlers.
+ io_service_impl& io_service_;
+
+ // Count of outstanding operations.
+ atomic_count outstanding_ops_;
+
+ // Used to keep wait for outstanding operations to complete.
+ std::promise<void> promise_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_ASYNC_MANAGER_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_async_op.hpp b/3party/boost/boost/asio/detail/winrt_async_op.hpp
new file mode 100644
index 0000000000..cded1311fa
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_async_op.hpp
@@ -0,0 +1,67 @@
+//
+// detail/winrt_async_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_ASYNC_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_ASYNC_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename TResult>
+class winrt_async_op
+ : public operation
+{
+public:
+ // The error code to be passed to the completion handler.
+ boost::system::error_code ec_;
+
+ // The result of the operation, to be passed to the completion handler.
+ TResult result_;
+
+protected:
+ winrt_async_op(func_type complete_func)
+ : operation(complete_func),
+ result_()
+ {
+ }
+};
+
+template <>
+class winrt_async_op<void>
+ : public operation
+{
+public:
+ // The error code to be passed to the completion handler.
+ boost::system::error_code ec_;
+
+protected:
+ winrt_async_op(func_type complete_func)
+ : operation(complete_func)
+ {
+ }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_WINRT_ASYNC_OP_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_resolve_op.hpp b/3party/boost/boost/asio/detail/winrt_resolve_op.hpp
new file mode 100644
index 0000000000..fa12889141
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_resolve_op.hpp
@@ -0,0 +1,119 @@
+//
+// detail/winrt_resolve_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_RESOLVE_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_RESOLVE_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol, typename Handler>
+class winrt_resolve_op :
+ public winrt_async_op<
+ Windows::Foundation::Collections::IVectorView<
+ Windows::Networking::EndpointPair^>^>
+{
+public:
+ BOOST_ASIO_DEFINE_HANDLER_PTR(winrt_resolve_op);
+
+ typedef typename Protocol::endpoint endpoint_type;
+ typedef boost::asio::ip::basic_resolver_query<Protocol> query_type;
+ typedef boost::asio::ip::basic_resolver_iterator<Protocol> iterator_type;
+
+ winrt_resolve_op(const query_type& query, Handler& handler)
+ : winrt_async_op<
+ Windows::Foundation::Collections::IVectorView<
+ Windows::Networking::EndpointPair^>^>(
+ &winrt_resolve_op::do_complete),
+ query_(query),
+ handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+ {
+ }
+
+ static void do_complete(io_service_impl* owner, operation* base,
+ const boost::system::error_code&, std::size_t)
+ {
+ // Take ownership of the operation object.
+ winrt_resolve_op* o(static_cast<winrt_resolve_op*>(base));
+ ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+ BOOST_ASIO_HANDLER_COMPLETION((o));
+
+ iterator_type iterator = iterator_type();
+ if (!o->ec_)
+ {
+ try
+ {
+ iterator = iterator_type::create(
+ o->result_, o->query_.hints(),
+ o->query_.host_name(), o->query_.service_name());
+ }
+ catch (Platform::Exception^ e)
+ {
+ o->ec_ = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ }
+ }
+
+ // Make a copy of the handler so that the memory can be deallocated before
+ // the upcall is made. Even if we're not about to make an upcall, a
+ // sub-object of the handler may be the true owner of the memory associated
+ // with the handler. Consequently, a local copy of the handler is required
+ // to ensure that any owning sub-object remains valid until after we have
+ // deallocated the memory here.
+ detail::binder2<Handler, boost::system::error_code, iterator_type>
+ handler(o->handler_, o->ec_, iterator);
+ p.h = boost::asio::detail::addressof(handler.handler_);
+ p.reset();
+
+ // Make the upcall if required.
+ if (owner)
+ {
+ fenced_block b(fenced_block::half);
+ BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+ boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+ BOOST_ASIO_HANDLER_INVOCATION_END;
+ }
+ }
+
+private:
+ query_type query_;
+ Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_RESOLVE_OP_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_resolver_service.hpp b/3party/boost/boost/asio/detail/winrt_resolver_service.hpp
new file mode 100644
index 0000000000..624305fdb3
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_resolver_service.hpp
@@ -0,0 +1,185 @@
+//
+// detail/winrt_resolver_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_RESOLVER_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_WINRT_RESOLVER_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/winrt_async_manager.hpp>
+#include <boost/asio/detail/winrt_resolve_op.hpp>
+#include <boost/asio/detail/winrt_utils.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol>
+class winrt_resolver_service
+{
+public:
+ // The implementation type of the resolver. A cancellation token is used to
+ // indicate to the asynchronous operation that the operation has been
+ // cancelled.
+ typedef socket_ops::shared_cancel_token_type implementation_type;
+
+ // The endpoint type.
+ typedef typename Protocol::endpoint endpoint_type;
+
+ // The query type.
+ typedef boost::asio::ip::basic_resolver_query<Protocol> query_type;
+
+ // The iterator type.
+ typedef boost::asio::ip::basic_resolver_iterator<Protocol> iterator_type;
+
+ // Constructor.
+ winrt_resolver_service(boost::asio::io_service& io_service)
+ : io_service_(use_service<io_service_impl>(io_service)),
+ async_manager_(use_service<winrt_async_manager>(io_service))
+ {
+ }
+
+ // Destructor.
+ ~winrt_resolver_service()
+ {
+ }
+
+ // Destroy all user-defined handler objects owned by the service.
+ void shutdown_service()
+ {
+ }
+
+ // Perform any fork-related housekeeping.
+ void fork_service(boost::asio::io_service::fork_event)
+ {
+ }
+
+ // Construct a new resolver implementation.
+ void construct(implementation_type&)
+ {
+ }
+
+ // Destroy a resolver implementation.
+ void destroy(implementation_type&)
+ {
+ }
+
+ // Cancel pending asynchronous operations.
+ void cancel(implementation_type&)
+ {
+ }
+
+ // Resolve a query to a list of entries.
+ iterator_type resolve(implementation_type&,
+ const query_type& query, boost::system::error_code& ec)
+ {
+ try
+ {
+ using namespace Windows::Networking::Sockets;
+ auto endpoint_pairs = async_manager_.sync(
+ DatagramSocket::GetEndpointPairsAsync(
+ winrt_utils::host_name(query.host_name()),
+ winrt_utils::string(query.service_name())), ec);
+
+ if (ec)
+ return iterator_type();
+
+ return iterator_type::create(
+ endpoint_pairs, query.hints(),
+ query.host_name(), query.service_name());
+ }
+ catch (Platform::Exception^ e)
+ {
+ ec = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ return iterator_type();
+ }
+ }
+
+ // Asynchronously resolve a query to a list of entries.
+ template <typename Handler>
+ void async_resolve(implementation_type&,
+ const query_type& query, Handler& handler)
+ {
+ bool is_continuation =
+ boost_asio_handler_cont_helpers::is_continuation(handler);
+
+ // Allocate and construct an operation to wrap the handler.
+ typedef winrt_resolve_op<Protocol, Handler> op;
+ typename op::ptr p = { boost::asio::detail::addressof(handler),
+ boost_asio_handler_alloc_helpers::allocate(
+ sizeof(op), handler), 0 };
+ p.p = new (p.v) op(query, handler);
+
+ BOOST_ASIO_HANDLER_CREATION((p.p, "resolver", &impl, "async_resolve"));
+
+ try
+ {
+ using namespace Windows::Networking::Sockets;
+ async_manager_.async(DatagramSocket::GetEndpointPairsAsync(
+ winrt_utils::host_name(query.host_name()),
+ winrt_utils::string(query.service_name())), p.p);
+ p.v = p.p = 0;
+ }
+ catch (Platform::Exception^ e)
+ {
+ p.p->ec_ = boost::system::error_code(
+ e->HResult, boost::system::system_category());
+ io_service_.post_immediate_completion(p.p, is_continuation);
+ p.v = p.p = 0;
+ }
+ }
+
+ // Resolve an endpoint to a list of entries.
+ iterator_type resolve(implementation_type&,
+ const endpoint_type&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return iterator_type();
+ }
+
+ // Asynchronously resolve an endpoint to a list of entries.
+ template <typename Handler>
+ void async_resolve(implementation_type&,
+ const endpoint_type&, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const iterator_type iterator;
+ io_service_.get_io_service().post(
+ detail::bind_handler(handler, ec, iterator));
+ }
+
+private:
+ io_service_impl& io_service_;
+ winrt_async_manager& async_manager_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_RESOLVER_SERVICE_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_socket_connect_op.hpp b/3party/boost/boost/asio/detail/winrt_socket_connect_op.hpp
new file mode 100644
index 0000000000..0e3f230076
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_socket_connect_op.hpp
@@ -0,0 +1,92 @@
+//
+// detail/winrt_socket_connect_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_SOCKET_CONNECT_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SOCKET_CONNECT_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+class winrt_socket_connect_op :
+ public winrt_async_op<void>
+{
+public:
+ BOOST_ASIO_DEFINE_HANDLER_PTR(winrt_socket_connect_op);
+
+ winrt_socket_connect_op(Handler& handler)
+ : winrt_async_op<void>(&winrt_socket_connect_op::do_complete),
+ handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+ {
+ }
+
+ static void do_complete(io_service_impl* owner, operation* base,
+ const boost::system::error_code&, std::size_t)
+ {
+ // Take ownership of the operation object.
+ winrt_socket_connect_op* o(static_cast<winrt_socket_connect_op*>(base));
+ ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+ BOOST_ASIO_HANDLER_COMPLETION((o));
+
+ // Make a copy of the handler so that the memory can be deallocated before
+ // the upcall is made. Even if we're not about to make an upcall, a
+ // sub-object of the handler may be the true owner of the memory associated
+ // with the handler. Consequently, a local copy of the handler is required
+ // to ensure that any owning sub-object remains valid until after we have
+ // deallocated the memory here.
+ detail::binder1<Handler, boost::system::error_code>
+ handler(o->handler_, o->ec_);
+ p.h = boost::asio::detail::addressof(handler.handler_);
+ p.reset();
+
+ // Make the upcall if required.
+ if (owner)
+ {
+ fenced_block b(fenced_block::half);
+ BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+ boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+ BOOST_ASIO_HANDLER_INVOCATION_END;
+ }
+ }
+
+private:
+ Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SOCKET_CONNECT_OP_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_socket_recv_op.hpp b/3party/boost/boost/asio/detail/winrt_socket_recv_op.hpp
new file mode 100644
index 0000000000..56545687fe
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_socket_recv_op.hpp
@@ -0,0 +1,112 @@
+//
+// detail/winrt_socket_recv_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_SOCKET_RECV_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SOCKET_RECV_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence, typename Handler>
+class winrt_socket_recv_op :
+ public winrt_async_op<Windows::Storage::Streams::IBuffer^>
+{
+public:
+ BOOST_ASIO_DEFINE_HANDLER_PTR(winrt_socket_recv_op);
+
+ winrt_socket_recv_op(const MutableBufferSequence& buffers, Handler& handler)
+ : winrt_async_op<Windows::Storage::Streams::IBuffer^>(
+ &winrt_socket_recv_op::do_complete),
+ buffers_(buffers),
+ handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+ {
+ }
+
+ static void do_complete(io_service_impl* owner, operation* base,
+ const boost::system::error_code&, std::size_t)
+ {
+ // Take ownership of the operation object.
+ winrt_socket_recv_op* o(static_cast<winrt_socket_recv_op*>(base));
+ ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+ BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+ // Check whether buffers are still valid.
+ if (owner)
+ {
+ buffer_sequence_adapter<boost::asio::mutable_buffer,
+ MutableBufferSequence>::validate(o->buffers_);
+ }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+ std::size_t bytes_transferred = o->result_ ? o->result_->Length : 0;
+ if (bytes_transferred == 0 && !o->ec_ &&
+ !buffer_sequence_adapter<boost::asio::mutable_buffer,
+ MutableBufferSequence>::all_empty(o->buffers_))
+ {
+ o->ec_ = boost::asio::error::eof;
+ }
+
+ // Make a copy of the handler so that the memory can be deallocated before
+ // the upcall is made. Even if we're not about to make an upcall, a
+ // sub-object of the handler may be the true owner of the memory associated
+ // with the handler. Consequently, a local copy of the handler is required
+ // to ensure that any owning sub-object remains valid until after we have
+ // deallocated the memory here.
+ detail::binder2<Handler, boost::system::error_code, std::size_t>
+ handler(o->handler_, o->ec_, bytes_transferred);
+ p.h = boost::asio::detail::addressof(handler.handler_);
+ p.reset();
+
+ // Make the upcall if required.
+ if (owner)
+ {
+ fenced_block b(fenced_block::half);
+ BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+ boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+ BOOST_ASIO_HANDLER_INVOCATION_END;
+ }
+ }
+
+private:
+ MutableBufferSequence buffers_;
+ Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SOCKET_RECV_OP_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_socket_send_op.hpp b/3party/boost/boost/asio/detail/winrt_socket_send_op.hpp
new file mode 100644
index 0000000000..ef3676663a
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_socket_send_op.hpp
@@ -0,0 +1,103 @@
+//
+// detail/winrt_socket_send_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_SOCKET_SEND_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SOCKET_SEND_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename ConstBufferSequence, typename Handler>
+class winrt_socket_send_op :
+ public winrt_async_op<unsigned int>
+{
+public:
+ BOOST_ASIO_DEFINE_HANDLER_PTR(winrt_socket_send_op);
+
+ winrt_socket_send_op(const ConstBufferSequence& buffers, Handler& handler)
+ : winrt_async_op<unsigned int>(&winrt_socket_send_op::do_complete),
+ buffers_(buffers),
+ handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+ {
+ }
+
+ static void do_complete(io_service_impl* owner, operation* base,
+ const boost::system::error_code&, std::size_t)
+ {
+ // Take ownership of the operation object.
+ winrt_socket_send_op* o(static_cast<winrt_socket_send_op*>(base));
+ ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+ BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+ // Check whether buffers are still valid.
+ if (owner)
+ {
+ buffer_sequence_adapter<boost::asio::const_buffer,
+ ConstBufferSequence>::validate(o->buffers_);
+ }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+ // Make a copy of the handler so that the memory can be deallocated before
+ // the upcall is made. Even if we're not about to make an upcall, a
+ // sub-object of the handler may be the true owner of the memory associated
+ // with the handler. Consequently, a local copy of the handler is required
+ // to ensure that any owning sub-object remains valid until after we have
+ // deallocated the memory here.
+ detail::binder2<Handler, boost::system::error_code, std::size_t>
+ handler(o->handler_, o->ec_, o->result_);
+ p.h = boost::asio::detail::addressof(handler.handler_);
+ p.reset();
+
+ // Make the upcall if required.
+ if (owner)
+ {
+ fenced_block b(fenced_block::half);
+ BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+ boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+ BOOST_ASIO_HANDLER_INVOCATION_END;
+ }
+ }
+
+private:
+ ConstBufferSequence buffers_;
+ Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SOCKET_SEND_OP_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_ssocket_service.hpp b/3party/boost/boost/asio/detail/winrt_ssocket_service.hpp
new file mode 100644
index 0000000000..a701efae00
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_ssocket_service.hpp
@@ -0,0 +1,234 @@
+//
+// detail/winrt_ssocket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/winrt_socket_connect_op.hpp>
+#include <boost/asio/detail/winrt_ssocket_service_base.hpp>
+#include <boost/asio/detail/winrt_utils.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol>
+class winrt_ssocket_service :
+ public winrt_ssocket_service_base
+{
+public:
+ // The protocol type.
+ typedef Protocol protocol_type;
+
+ // The endpoint type.
+ typedef typename Protocol::endpoint endpoint_type;
+
+ // The native type of a socket.
+ typedef Windows::Networking::Sockets::StreamSocket^ native_handle_type;
+
+ // The implementation type of the socket.
+ struct implementation_type : base_implementation_type
+ {
+ // Default constructor.
+ implementation_type()
+ : base_implementation_type(),
+ protocol_(endpoint_type().protocol())
+ {
+ }
+
+ // The protocol associated with the socket.
+ protocol_type protocol_;
+ };
+
+ // Constructor.
+ winrt_ssocket_service(boost::asio::io_service& io_service)
+ : winrt_ssocket_service_base(io_service)
+ {
+ }
+
+ // Move-construct a new socket implementation.
+ void move_construct(implementation_type& impl,
+ implementation_type& other_impl)
+ {
+ this->base_move_construct(impl, other_impl);
+
+ impl.protocol_ = other_impl.protocol_;
+ other_impl.protocol_ = endpoint_type().protocol();
+ }
+
+ // Move-assign from another socket implementation.
+ void move_assign(implementation_type& impl,
+ winrt_ssocket_service& other_service,
+ implementation_type& other_impl)
+ {
+ this->base_move_assign(impl, other_service, other_impl);
+
+ impl.protocol_ = other_impl.protocol_;
+ other_impl.protocol_ = endpoint_type().protocol();
+ }
+
+ // Move-construct a new socket implementation from another protocol type.
+ template <typename Protocol1>
+ void converting_move_construct(implementation_type& impl,
+ typename winrt_ssocket_service<
+ Protocol1>::implementation_type& other_impl)
+ {
+ this->base_move_construct(impl, other_impl);
+
+ impl.protocol_ = protocol_type(other_impl.protocol_);
+ other_impl.protocol_ = typename Protocol1::endpoint().protocol();
+ }
+
+ // Open a new socket implementation.
+ boost::system::error_code open(implementation_type& impl,
+ const protocol_type& protocol, boost::system::error_code& ec)
+ {
+ if (is_open(impl))
+ {
+ ec = boost::asio::error::already_open;
+ return ec;
+ }
+
+ try
+ {
+ impl.socket_ = ref new Windows::Networking::Sockets::StreamSocket;
+ impl.protocol_ = protocol;
+ ec = boost::system::error_code();
+ }
+ catch (Platform::Exception^ e)
+ {
+ ec = boost::system::error_code(e->HResult,
+ boost::system::system_category());
+ }
+
+ return ec;
+ }
+
+ // Assign a native socket to a socket implementation.
+ boost::system::error_code assign(implementation_type& impl,
+ const protocol_type& protocol, const native_handle_type& native_socket,
+ boost::system::error_code& ec)
+ {
+ if (is_open(impl))
+ {
+ ec = boost::asio::error::already_open;
+ return ec;
+ }
+
+ impl.socket_ = native_socket;
+ impl.protocol_ = protocol;
+ ec = boost::system::error_code();
+
+ return ec;
+ }
+
+ // Bind the socket to the specified local endpoint.
+ boost::system::error_code bind(implementation_type&,
+ const endpoint_type&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Get the local endpoint.
+ endpoint_type local_endpoint(const implementation_type& impl,
+ boost::system::error_code& ec) const
+ {
+ endpoint_type endpoint;
+ endpoint.resize(do_get_endpoint(impl, true,
+ endpoint.data(), endpoint.size(), ec));
+ return endpoint;
+ }
+
+ // Get the remote endpoint.
+ endpoint_type remote_endpoint(const implementation_type& impl,
+ boost::system::error_code& ec) const
+ {
+ endpoint_type endpoint;
+ endpoint.resize(do_get_endpoint(impl, false,
+ endpoint.data(), endpoint.size(), ec));
+ return endpoint;
+ }
+
+ // Set a socket option.
+ template <typename Option>
+ boost::system::error_code set_option(implementation_type& impl,
+ const Option& option, boost::system::error_code& ec)
+ {
+ return do_set_option(impl, option.level(impl.protocol_),
+ option.name(impl.protocol_), option.data(impl.protocol_),
+ option.size(impl.protocol_), ec);
+ }
+
+ // Get a socket option.
+ template <typename Option>
+ boost::system::error_code get_option(const implementation_type& impl,
+ Option& option, boost::system::error_code& ec) const
+ {
+ std::size_t size = option.size(impl.protocol_);
+ do_get_option(impl, option.level(impl.protocol_),
+ option.name(impl.protocol_),
+ option.data(impl.protocol_), &size, ec);
+ if (!ec)
+ option.resize(impl.protocol_, size);
+ return ec;
+ }
+
+ // Connect the socket to the specified endpoint.
+ boost::system::error_code connect(implementation_type& impl,
+ const endpoint_type& peer_endpoint, boost::system::error_code& ec)
+ {
+ return do_connect(impl, peer_endpoint.data(), ec);
+ }
+
+ // Start an asynchronous connect.
+ template <typename Handler>
+ void async_connect(implementation_type& impl,
+ const endpoint_type& peer_endpoint, Handler& handler)
+ {
+ bool is_continuation =
+ boost_asio_handler_cont_helpers::is_continuation(handler);
+
+ // Allocate and construct an operation to wrap the handler.
+ typedef winrt_socket_connect_op<Handler> op;
+ typename op::ptr p = { boost::asio::detail::addressof(handler),
+ boost_asio_handler_alloc_helpers::allocate(
+ sizeof(op), handler), 0 };
+ p.p = new (p.v) op(handler);
+
+ BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_connect"));
+
+ start_connect_op(impl, peer_endpoint.data(), p.p, is_continuation);
+ p.v = p.p = 0;
+ }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_ssocket_service_base.hpp b/3party/boost/boost/asio/detail/winrt_ssocket_service_base.hpp
new file mode 100644
index 0000000000..02469ef2e9
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_ssocket_service_base.hpp
@@ -0,0 +1,357 @@
+//
+// detail/winrt_ssocket_service_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_BASE_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/winrt_async_manager.hpp>
+#include <boost/asio/detail/winrt_socket_recv_op.hpp>
+#include <boost/asio/detail/winrt_socket_send_op.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class winrt_ssocket_service_base
+{
+public:
+ // The native type of a socket.
+ typedef Windows::Networking::Sockets::StreamSocket^ native_handle_type;
+
+ // The implementation type of the socket.
+ struct base_implementation_type
+ {
+ // Default constructor.
+ base_implementation_type()
+ : socket_(nullptr),
+ next_(0),
+ prev_(0)
+ {
+ }
+
+ // The underlying native socket.
+ native_handle_type socket_;
+
+ // Pointers to adjacent socket implementations in linked list.
+ base_implementation_type* next_;
+ base_implementation_type* prev_;
+ };
+
+ // Constructor.
+ BOOST_ASIO_DECL winrt_ssocket_service_base(
+ boost::asio::io_service& io_service);
+
+ // Destroy all user-defined handler objects owned by the service.
+ BOOST_ASIO_DECL void shutdown_service();
+
+ // Construct a new socket implementation.
+ BOOST_ASIO_DECL void construct(base_implementation_type&);
+
+ // Move-construct a new socket implementation.
+ BOOST_ASIO_DECL void base_move_construct(base_implementation_type& impl,
+ base_implementation_type& other_impl);
+
+ // Move-assign from another socket implementation.
+ BOOST_ASIO_DECL void base_move_assign(base_implementation_type& impl,
+ winrt_ssocket_service_base& other_service,
+ base_implementation_type& other_impl);
+
+ // Destroy a socket implementation.
+ BOOST_ASIO_DECL void destroy(base_implementation_type& impl);
+
+ // Determine whether the socket is open.
+ bool is_open(const base_implementation_type& impl) const
+ {
+ return impl.socket_ != nullptr;
+ }
+
+ // Destroy a socket implementation.
+ BOOST_ASIO_DECL boost::system::error_code close(
+ base_implementation_type& impl, boost::system::error_code& ec);
+
+ // Get the native socket representation.
+ native_handle_type native_handle(base_implementation_type& impl)
+ {
+ return impl.socket_;
+ }
+
+ // Cancel all operations associated with the socket.
+ boost::system::error_code cancel(base_implementation_type&,
+ boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Determine whether the socket is at the out-of-band data mark.
+ bool at_mark(const base_implementation_type&,
+ boost::system::error_code& ec) const
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return false;
+ }
+
+ // Determine the number of bytes available for reading.
+ std::size_t available(const base_implementation_type&,
+ boost::system::error_code& ec) const
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Perform an IO control command on the socket.
+ template <typename IO_Control_Command>
+ boost::system::error_code io_control(base_implementation_type&,
+ IO_Control_Command&, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Gets the non-blocking mode of the socket.
+ bool non_blocking(const base_implementation_type&) const
+ {
+ return false;
+ }
+
+ // Sets the non-blocking mode of the socket.
+ boost::system::error_code non_blocking(base_implementation_type&,
+ bool, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Gets the non-blocking mode of the native socket implementation.
+ bool native_non_blocking(const base_implementation_type&) const
+ {
+ return false;
+ }
+
+ // Sets the non-blocking mode of the native socket implementation.
+ boost::system::error_code native_non_blocking(base_implementation_type&,
+ bool, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Disable sends or receives on the socket.
+ boost::system::error_code shutdown(base_implementation_type&,
+ socket_base::shutdown_type, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return ec;
+ }
+
+ // Send the given data to the peer.
+ template <typename ConstBufferSequence>
+ std::size_t send(base_implementation_type& impl,
+ const ConstBufferSequence& buffers,
+ socket_base::message_flags flags, boost::system::error_code& ec)
+ {
+ return do_send(impl,
+ buffer_sequence_adapter<boost::asio::const_buffer,
+ ConstBufferSequence>::first(buffers), flags, ec);
+ }
+
+ // Wait until data can be sent without blocking.
+ std::size_t send(base_implementation_type&, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Start an asynchronous send. The data being sent must be valid for the
+ // lifetime of the asynchronous operation.
+ template <typename ConstBufferSequence, typename Handler>
+ void async_send(base_implementation_type& impl,
+ const ConstBufferSequence& buffers,
+ socket_base::message_flags flags, Handler& handler)
+ {
+ bool is_continuation =
+ boost_asio_handler_cont_helpers::is_continuation(handler);
+
+ // Allocate and construct an operation to wrap the handler.
+ typedef winrt_socket_send_op<ConstBufferSequence, Handler> op;
+ typename op::ptr p = { boost::asio::detail::addressof(handler),
+ boost_asio_handler_alloc_helpers::allocate(
+ sizeof(op), handler), 0 };
+ p.p = new (p.v) op(buffers, handler);
+
+ BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_send"));
+
+ start_send_op(impl,
+ buffer_sequence_adapter<boost::asio::const_buffer,
+ ConstBufferSequence>::first(buffers),
+ flags, p.p, is_continuation);
+ p.v = p.p = 0;
+ }
+
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send(base_implementation_type&, const null_buffers&,
+ socket_base::message_flags, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.get_io_service().post(
+ detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+ // Receive some data from the peer. Returns the number of bytes received.
+ template <typename MutableBufferSequence>
+ std::size_t receive(base_implementation_type& impl,
+ const MutableBufferSequence& buffers,
+ socket_base::message_flags flags, boost::system::error_code& ec)
+ {
+ return do_receive(impl,
+ buffer_sequence_adapter<boost::asio::mutable_buffer,
+ MutableBufferSequence>::first(buffers), flags, ec);
+ }
+
+ // Wait until data can be received without blocking.
+ std::size_t receive(base_implementation_type&, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ ec = boost::asio::error::operation_not_supported;
+ return 0;
+ }
+
+ // Start an asynchronous receive. The buffer for the data being received
+ // must be valid for the lifetime of the asynchronous operation.
+ template <typename MutableBufferSequence, typename Handler>
+ void async_receive(base_implementation_type& impl,
+ const MutableBufferSequence& buffers,
+ socket_base::message_flags flags, Handler& handler)
+ {
+ bool is_continuation =
+ boost_asio_handler_cont_helpers::is_continuation(handler);
+
+ // Allocate and construct an operation to wrap the handler.
+ typedef winrt_socket_recv_op<MutableBufferSequence, Handler> op;
+ typename op::ptr p = { boost::asio::detail::addressof(handler),
+ boost_asio_handler_alloc_helpers::allocate(
+ sizeof(op), handler), 0 };
+ p.p = new (p.v) op(buffers, handler);
+
+ BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_receive"));
+
+ start_receive_op(impl,
+ buffer_sequence_adapter<boost::asio::mutable_buffer,
+ MutableBufferSequence>::first(buffers),
+ flags, p.p, is_continuation);
+ p.v = p.p = 0;
+ }
+
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive(base_implementation_type&, const null_buffers&,
+ socket_base::message_flags, Handler& handler)
+ {
+ boost::system::error_code ec = boost::asio::error::operation_not_supported;
+ const std::size_t bytes_transferred = 0;
+ io_service_.get_io_service().post(
+ detail::bind_handler(handler, ec, bytes_transferred));
+ }
+
+protected:
+ // Helper function to obtain endpoints associated with the connection.
+ BOOST_ASIO_DECL std::size_t do_get_endpoint(
+ const base_implementation_type& impl, bool local,
+ void* addr, std::size_t addr_len, boost::system::error_code& ec) const;
+
+ // Helper function to set a socket option.
+ BOOST_ASIO_DECL boost::system::error_code do_set_option(
+ base_implementation_type& impl,
+ int level, int optname, const void* optval,
+ std::size_t optlen, boost::system::error_code& ec);
+
+ // Helper function to get a socket option.
+ BOOST_ASIO_DECL void do_get_option(
+ const base_implementation_type& impl,
+ int level, int optname, void* optval,
+ std::size_t* optlen, boost::system::error_code& ec) const;
+
+ // Helper function to perform a synchronous connect.
+ BOOST_ASIO_DECL boost::system::error_code do_connect(
+ base_implementation_type& impl,
+ const void* addr, boost::system::error_code& ec);
+
+ // Helper function to start an asynchronous connect.
+ BOOST_ASIO_DECL void start_connect_op(
+ base_implementation_type& impl, const void* addr,
+ winrt_async_op<void>* op, bool is_continuation);
+
+ // Helper function to perform a synchronous send.
+ BOOST_ASIO_DECL std::size_t do_send(
+ base_implementation_type& impl, const boost::asio::const_buffer& data,
+ socket_base::message_flags flags, boost::system::error_code& ec);
+
+ // Helper function to start an asynchronous send.
+ BOOST_ASIO_DECL void start_send_op(base_implementation_type& impl,
+ const boost::asio::const_buffer& data, socket_base::message_flags flags,
+ winrt_async_op<unsigned int>* op, bool is_continuation);
+
+ // Helper function to perform a synchronous receive.
+ BOOST_ASIO_DECL std::size_t do_receive(
+ base_implementation_type& impl, const boost::asio::mutable_buffer& data,
+ socket_base::message_flags flags, boost::system::error_code& ec);
+
+ // Helper function to start an asynchronous receive.
+ BOOST_ASIO_DECL void start_receive_op(base_implementation_type& impl,
+ const boost::asio::mutable_buffer& data, socket_base::message_flags flags,
+ winrt_async_op<Windows::Storage::Streams::IBuffer^>* op,
+ bool is_continuation);
+
+ // The io_service implementation used for delivering completions.
+ io_service_impl& io_service_;
+
+ // The manager that keeps track of outstanding operations.
+ winrt_async_manager& async_manager_;
+
+ // Mutex to protect access to the linked list of implementations.
+ boost::asio::detail::mutex mutex_;
+
+ // The head of a linked list of all implementations.
+ base_implementation_type* impl_list_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/winrt_ssocket_service_base.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_BASE_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_timer_scheduler.hpp b/3party/boost/boost/asio/detail/winrt_timer_scheduler.hpp
new file mode 100644
index 0000000000..9cadecaae2
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_timer_scheduler.hpp
@@ -0,0 +1,133 @@
+//
+// detail/winrt_timer_scheduler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_TIMER_SCHEDULER_HPP
+#define BOOST_ASIO_DETAIL_WINRT_TIMER_SCHEDULER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <cstddef>
+#include <boost/asio/detail/event.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/thread.hpp>
+#include <boost/asio/detail/timer_queue_base.hpp>
+#include <boost/asio/detail/timer_queue_set.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+#include <boost/asio/io_service.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/thread.hpp>
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class winrt_timer_scheduler
+ : public boost::asio::detail::service_base<winrt_timer_scheduler>
+{
+public:
+ // Constructor.
+ BOOST_ASIO_DECL winrt_timer_scheduler(boost::asio::io_service& io_service);
+
+ // Destructor.
+ BOOST_ASIO_DECL ~winrt_timer_scheduler();
+
+ // Destroy all user-defined handler objects owned by the service.
+ BOOST_ASIO_DECL void shutdown_service();
+
+ // Recreate internal descriptors following a fork.
+ BOOST_ASIO_DECL void fork_service(
+ boost::asio::io_service::fork_event fork_ev);
+
+ // Initialise the task. No effect as this class uses its own thread.
+ BOOST_ASIO_DECL void init_task();
+
+ // Add a new timer queue to the reactor.
+ template <typename Time_Traits>
+ void add_timer_queue(timer_queue<Time_Traits>& queue);
+
+ // Remove a timer queue from the reactor.
+ template <typename Time_Traits>
+ void remove_timer_queue(timer_queue<Time_Traits>& queue);
+
+ // Schedule a new operation in the given timer queue to expire at the
+ // specified absolute time.
+ template <typename Time_Traits>
+ void schedule_timer(timer_queue<Time_Traits>& queue,
+ const typename Time_Traits::time_type& time,
+ typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op);
+
+ // Cancel the timer operations associated with the given token. Returns the
+ // number of operations that have been posted or dispatched.
+ template <typename Time_Traits>
+ std::size_t cancel_timer(timer_queue<Time_Traits>& queue,
+ typename timer_queue<Time_Traits>::per_timer_data& timer,
+ std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
+
+private:
+ // Run the select loop in the thread.
+ BOOST_ASIO_DECL void run_thread();
+
+ // Entry point for the select loop thread.
+ BOOST_ASIO_DECL static void call_run_thread(winrt_timer_scheduler* reactor);
+
+ // Helper function to add a new timer queue.
+ BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue);
+
+ // Helper function to remove a timer queue.
+ BOOST_ASIO_DECL void do_remove_timer_queue(timer_queue_base& queue);
+
+ // The io_service implementation used to post completions.
+ io_service_impl& io_service_;
+
+ // Mutex used to protect internal variables.
+ boost::asio::detail::mutex mutex_;
+
+ // Event used to wake up background thread.
+ boost::asio::detail::event event_;
+
+ // The timer queues.
+ timer_queue_set timer_queues_;
+
+ // The background thread that is waiting for timers to expire.
+ boost::asio::detail::thread* thread_;
+
+ // Does the background thread need to stop.
+ bool stop_thread_;
+
+ // Whether the service has been shut down.
+ bool shutdown_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/winrt_timer_scheduler.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/winrt_timer_scheduler.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_TIMER_SCHEDULER_HPP
diff --git a/3party/boost/boost/asio/detail/winrt_utils.hpp b/3party/boost/boost/asio/detail/winrt_utils.hpp
new file mode 100644
index 0000000000..3b10b07bd6
--- /dev/null
+++ b/3party/boost/boost/asio/detail/winrt_utils.hpp
@@ -0,0 +1,108 @@
+//
+// detail/winrt_utils.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_DETAIL_WINRT_UTILS_HPP
+#define BOOST_ASIO_DETAIL_WINRT_UTILS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <codecvt>
+#include <cstdlib>
+#include <future>
+#include <locale>
+#include <memory>
+#include <robuffer.h>
+#include <windows.storage.streams.h>
+#include <wrl/implements.h>
+#include <boost/asio/buffer.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+namespace winrt_utils {
+
+inline Platform::String^ string(const char* from)
+{
+ std::wstring tmp(from, from + std::strlen(from));
+ return ref new Platform::String(tmp.c_str());
+}
+
+inline Platform::String^ string(const std::string& from)
+{
+ std::wstring tmp(from.begin(), from.end());
+ return ref new Platform::String(tmp.c_str());
+}
+
+inline std::string string(Platform::String^ from)
+{
+ std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
+ return converter.to_bytes(from->Data());
+}
+
+inline Platform::String^ string(unsigned short from)
+{
+ return string(std::to_string(from));
+}
+
+template <typename T>
+inline Platform::String^ string(const T& from)
+{
+ return string(from.to_string());
+}
+
+inline int integer(Platform::String^ from)
+{
+ return _wtoi(from->Data());
+}
+
+template <typename T>
+inline Windows::Networking::HostName^ host_name(const T& from)
+{
+ return ref new Windows::Networking::HostName((string)(from));
+}
+
+template <typename ConstBufferSequence>
+inline Windows::Storage::Streams::IBuffer^ buffer_dup(
+ const ConstBufferSequence& buffers)
+{
+ using Microsoft::WRL::ComPtr;
+ std::size_t size = boost::asio::buffer_size(buffers);
+ auto b = ref new Windows::Storage::Streams::Buffer(size);
+ ComPtr<IInspectable> insp = reinterpret_cast<IInspectable*>(b);
+ ComPtr<Windows::Storage::Streams::IBufferByteAccess> bacc;
+ insp.As(&bacc);
+ byte* bytes = nullptr;
+ bacc->Buffer(&bytes);
+ boost::asio::buffer_copy(boost::asio::buffer(bytes, size), buffers);
+ b->Length = size;
+ return b;
+}
+
+} // namespace winrt_utils
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_UTILS_HPP
diff --git a/3party/boost/boost/asio/detail/winsock_init.hpp b/3party/boost/boost/asio/detail/winsock_init.hpp
index 261bd45405..aef74f0b5a 100644
--- a/3party/boost/boost/asio/detail/winsock_init.hpp
+++ b/3party/boost/boost/asio/detail/winsock_init.hpp
@@ -2,7 +2,7 @@
// detail/winsock_init.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/detail/wrapped_handler.hpp b/3party/boost/boost/asio/detail/wrapped_handler.hpp
index b80e11b125..0ff28eddb1 100644
--- a/3party/boost/boost/asio/detail/wrapped_handler.hpp
+++ b/3party/boost/boost/asio/detail/wrapped_handler.hpp
@@ -2,7 +2,7 @@
// detail/wrapped_handler.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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 @@ public:
void operator()()
{
- dispatcher_.dispatch(handler_);
+ dispatcher_.dispatch(BOOST_ASIO_MOVE_CAST(Handler)(handler_));
}
void operator()() const
@@ -265,7 +265,7 @@ inline bool asio_handler_is_continuation(
rewrapped_handler<Dispatcher, Context>* this_handler)
{
return boost_asio_handler_cont_helpers::is_continuation(
- this_handler->handler_);
+ this_handler->context_);
}
template <typename Function, typename Handler, typename Context>
diff --git a/3party/boost/boost/asio/error.hpp b/3party/boost/boost/asio/error.hpp
index a303e57aff..7bcc00f9be 100644
--- a/3party/boost/boost/asio/error.hpp
+++ b/3party/boost/boost/asio/error.hpp
@@ -2,7 +2,7 @@
// error.hpp
// ~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -18,7 +18,10 @@
#include <boost/asio/detail/config.hpp>
#include <boost/cerrno.hpp>
#include <boost/system/error_code.hpp>
-#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#include <boost/system/system_error.hpp>
+#if defined(BOOST_ASIO_WINDOWS) \
+ || defined(__CYGWIN__) \
+ || defined(BOOST_ASIO_WINDOWS_RUNTIME)
# include <winerror.h>
#else
# include <cerrno>
@@ -36,6 +39,12 @@
# define BOOST_ASIO_GETADDRINFO_ERROR(e) implementation_defined
/// INTERNAL ONLY.
# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) implementation_defined
+#elif defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# define BOOST_ASIO_NATIVE_ERROR(e) __HRESULT_FROM_WIN32(e)
+# define BOOST_ASIO_SOCKET_ERROR(e) __HRESULT_FROM_WIN32(WSA ## e)
+# define BOOST_ASIO_NETDB_ERROR(e) __HRESULT_FROM_WIN32(WSA ## e)
+# define BOOST_ASIO_GETADDRINFO_ERROR(e) __HRESULT_FROM_WIN32(WSA ## e)
+# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_win
#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
# define BOOST_ASIO_NATIVE_ERROR(e) e
# define BOOST_ASIO_SOCKET_ERROR(e) WSA ## e
diff --git a/3party/boost/boost/asio/generic/basic_endpoint.hpp b/3party/boost/boost/asio/generic/basic_endpoint.hpp
index 54ce07da22..bb6344d9f3 100644
--- a/3party/boost/boost/asio/generic/basic_endpoint.hpp
+++ b/3party/boost/boost/asio/generic/basic_endpoint.hpp
@@ -2,7 +2,7 @@
// generic/basic_endpoint.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/generic/datagram_protocol.hpp b/3party/boost/boost/asio/generic/datagram_protocol.hpp
index 01539cb721..48fa36d89c 100644
--- a/3party/boost/boost/asio/generic/datagram_protocol.hpp
+++ b/3party/boost/boost/asio/generic/datagram_protocol.hpp
@@ -2,7 +2,7 @@
// generic/datagram_protocol.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -76,7 +76,7 @@ public:
/// Obtain an identifier for the type of the protocol.
int type() const
{
- return SOCK_DGRAM;
+ return BOOST_ASIO_OS_DEF(SOCK_DGRAM);
}
/// Obtain an identifier for the protocol.
diff --git a/3party/boost/boost/asio/generic/detail/endpoint.hpp b/3party/boost/boost/asio/generic/detail/endpoint.hpp
index 644675e68b..3f5437db82 100644
--- a/3party/boost/boost/asio/generic/detail/endpoint.hpp
+++ b/3party/boost/boost/asio/generic/detail/endpoint.hpp
@@ -2,7 +2,7 @@
// generic/detail/endpoint.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/generic/detail/impl/endpoint.ipp b/3party/boost/boost/asio/generic/detail/impl/endpoint.ipp
index 17460a5969..af049ca793 100644
--- a/3party/boost/boost/asio/generic/detail/impl/endpoint.ipp
+++ b/3party/boost/boost/asio/generic/detail/impl/endpoint.ipp
@@ -2,7 +2,7 @@
// generic/detail/impl/endpoint.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/generic/raw_protocol.hpp b/3party/boost/boost/asio/generic/raw_protocol.hpp
index 0097e32978..bb1b1a4af6 100644
--- a/3party/boost/boost/asio/generic/raw_protocol.hpp
+++ b/3party/boost/boost/asio/generic/raw_protocol.hpp
@@ -2,7 +2,7 @@
// generic/raw_protocol.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -76,7 +76,7 @@ public:
/// Obtain an identifier for the type of the protocol.
int type() const
{
- return SOCK_RAW;
+ return BOOST_ASIO_OS_DEF(SOCK_RAW);
}
/// Obtain an identifier for the protocol.
diff --git a/3party/boost/boost/asio/generic/seq_packet_protocol.hpp b/3party/boost/boost/asio/generic/seq_packet_protocol.hpp
index 935596b91a..2a17b80667 100644
--- a/3party/boost/boost/asio/generic/seq_packet_protocol.hpp
+++ b/3party/boost/boost/asio/generic/seq_packet_protocol.hpp
@@ -2,7 +2,7 @@
// generic/seq_packet_protocol.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -75,7 +75,7 @@ public:
/// Obtain an identifier for the type of the protocol.
int type() const
{
- return SOCK_SEQPACKET;
+ return BOOST_ASIO_OS_DEF(SOCK_SEQPACKET);
}
/// Obtain an identifier for the protocol.
diff --git a/3party/boost/boost/asio/generic/stream_protocol.hpp b/3party/boost/boost/asio/generic/stream_protocol.hpp
index c14cb7f6e0..1ec89b9dff 100644
--- a/3party/boost/boost/asio/generic/stream_protocol.hpp
+++ b/3party/boost/boost/asio/generic/stream_protocol.hpp
@@ -2,7 +2,7 @@
// generic/stream_protocol.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -77,7 +77,7 @@ public:
/// Obtain an identifier for the type of the protocol.
int type() const
{
- return SOCK_STREAM;
+ return BOOST_ASIO_OS_DEF(SOCK_STREAM);
}
/// Obtain an identifier for the protocol.
diff --git a/3party/boost/boost/asio/handler_alloc_hook.hpp b/3party/boost/boost/asio/handler_alloc_hook.hpp
index 8850d2b3ad..ed8956d1b6 100644
--- a/3party/boost/boost/asio/handler_alloc_hook.hpp
+++ b/3party/boost/boost/asio/handler_alloc_hook.hpp
@@ -2,7 +2,7 @@
// handler_alloc_hook.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/handler_continuation_hook.hpp b/3party/boost/boost/asio/handler_continuation_hook.hpp
index 6b0ab6eb1e..929b855895 100644
--- a/3party/boost/boost/asio/handler_continuation_hook.hpp
+++ b/3party/boost/boost/asio/handler_continuation_hook.hpp
@@ -2,7 +2,7 @@
// handler_continuation_hook.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/handler_invoke_hook.hpp b/3party/boost/boost/asio/handler_invoke_hook.hpp
index 8db36b38a4..e81b51a421 100644
--- a/3party/boost/boost/asio/handler_invoke_hook.hpp
+++ b/3party/boost/boost/asio/handler_invoke_hook.hpp
@@ -2,7 +2,7 @@
// handler_invoke_hook.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,8 +22,10 @@
namespace boost {
namespace asio {
-/// Default invoke function for handlers.
-/**
+/** @defgroup asio_handler_invoke boost::asio::asio_handler_invoke
+ *
+ * @brief Default invoke function for handlers.
+ *
* Completion handlers for asynchronous operations are invoked by the
* io_service associated with the corresponding object (e.g. a socket or
* deadline_timer). Certain guarantees are made on when the handler may be
@@ -42,10 +44,10 @@ namespace asio {
* Implement asio_handler_invoke for your own handlers to specify a custom
* invocation strategy.
*
- * This default implementation is simply:
- * @code
- * function();
- * @endcode
+ * This default implementation invokes the function object like so:
+ * @code function(); @endcode
+ * If necessary, the default implementation makes a copy of the function object
+ * so that the non-const operator() can be used.
*
* @par Example
* @code
@@ -58,12 +60,25 @@ namespace asio {
* }
* @endcode
*/
+/*@{*/
+
+/// Default handler invocation hook used for non-const function objects.
template <typename Function>
-inline void asio_handler_invoke(Function function, ...)
+inline void asio_handler_invoke(Function& function, ...)
{
function();
}
+/// Default handler invocation hook used for const function objects.
+template <typename Function>
+inline void asio_handler_invoke(const Function& function, ...)
+{
+ Function tmp(function);
+ tmp();
+}
+
+/*@}*/
+
} // namespace asio
} // namespace boost
diff --git a/3party/boost/boost/asio/handler_type.hpp b/3party/boost/boost/asio/handler_type.hpp
index ba3ed5f6db..a933f6b64c 100644
--- a/3party/boost/boost/asio/handler_type.hpp
+++ b/3party/boost/boost/asio/handler_type.hpp
@@ -2,7 +2,7 @@
// handler_type.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/high_resolution_timer.hpp b/3party/boost/boost/asio/high_resolution_timer.hpp
index 68eb1a6dba..abb589975d 100644
--- a/3party/boost/boost/asio/high_resolution_timer.hpp
+++ b/3party/boost/boost/asio/high_resolution_timer.hpp
@@ -2,7 +2,7 @@
// high_resolution_timer.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/buffered_read_stream.hpp b/3party/boost/boost/asio/impl/buffered_read_stream.hpp
new file mode 100644
index 0000000000..00bc2041dc
--- /dev/null
+++ b/3party/boost/boost/asio/impl/buffered_read_stream.hpp
@@ -0,0 +1,360 @@
+//
+// impl/buffered_read_stream.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_IMPL_BUFFERED_READ_STREAM_HPP
+#define BOOST_ASIO_IMPL_BUFFERED_READ_STREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename Stream>
+std::size_t buffered_read_stream<Stream>::fill()
+{
+ detail::buffer_resize_guard<detail::buffered_stream_storage>
+ resize_guard(storage_);
+ std::size_t previous_size = storage_.size();
+ storage_.resize(storage_.capacity());
+ storage_.resize(previous_size + next_layer_.read_some(buffer(
+ storage_.data() + previous_size,
+ storage_.size() - previous_size)));
+ resize_guard.commit();
+ return storage_.size() - previous_size;
+}
+
+template <typename Stream>
+std::size_t buffered_read_stream<Stream>::fill(boost::system::error_code& ec)
+{
+ detail::buffer_resize_guard<detail::buffered_stream_storage>
+ resize_guard(storage_);
+ std::size_t previous_size = storage_.size();
+ storage_.resize(storage_.capacity());
+ storage_.resize(previous_size + next_layer_.read_some(buffer(
+ storage_.data() + previous_size,
+ storage_.size() - previous_size),
+ ec));
+ resize_guard.commit();
+ return storage_.size() - previous_size;
+}
+
+namespace detail
+{
+ template <typename ReadHandler>
+ class buffered_fill_handler
+ {
+ public:
+ buffered_fill_handler(detail::buffered_stream_storage& storage,
+ std::size_t previous_size, ReadHandler& handler)
+ : storage_(storage),
+ previous_size_(previous_size),
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+ {
+ }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+ buffered_fill_handler(const buffered_fill_handler& other)
+ : storage_(other.storage_),
+ previous_size_(other.previous_size_),
+ handler_(other.handler_)
+ {
+ }
+
+ buffered_fill_handler(buffered_fill_handler&& other)
+ : storage_(other.storage_),
+ previous_size_(other.previous_size_),
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+ {
+ }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+ void operator()(const boost::system::error_code& ec,
+ const std::size_t bytes_transferred)
+ {
+ storage_.resize(previous_size_ + bytes_transferred);
+ handler_(ec, bytes_transferred);
+ }
+
+ //private:
+ detail::buffered_stream_storage& storage_;
+ std::size_t previous_size_;
+ ReadHandler handler_;
+ };
+
+ template <typename ReadHandler>
+ inline void* asio_handler_allocate(std::size_t size,
+ buffered_fill_handler<ReadHandler>* this_handler)
+ {
+ return boost_asio_handler_alloc_helpers::allocate(
+ size, this_handler->handler_);
+ }
+
+ template <typename ReadHandler>
+ inline void asio_handler_deallocate(void* pointer, std::size_t size,
+ buffered_fill_handler<ReadHandler>* this_handler)
+ {
+ boost_asio_handler_alloc_helpers::deallocate(
+ pointer, size, this_handler->handler_);
+ }
+
+ template <typename ReadHandler>
+ inline bool asio_handler_is_continuation(
+ buffered_fill_handler<ReadHandler>* this_handler)
+ {
+ return boost_asio_handler_cont_helpers::is_continuation(
+ this_handler->handler_);
+ }
+
+ template <typename Function, typename ReadHandler>
+ inline void asio_handler_invoke(Function& function,
+ buffered_fill_handler<ReadHandler>* this_handler)
+ {
+ boost_asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+ }
+
+ template <typename Function, typename ReadHandler>
+ inline void asio_handler_invoke(const Function& function,
+ buffered_fill_handler<ReadHandler>* this_handler)
+ {
+ boost_asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+ }
+} // namespace detail
+
+template <typename Stream>
+template <typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (boost::system::error_code, std::size_t))
+buffered_read_stream<Stream>::async_fill(
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a ReadHandler.
+ BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+ detail::async_result_init<
+ ReadHandler, void (boost::system::error_code, std::size_t)> init(
+ BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+ std::size_t previous_size = storage_.size();
+ storage_.resize(storage_.capacity());
+ next_layer_.async_read_some(
+ buffer(
+ storage_.data() + previous_size,
+ storage_.size() - previous_size),
+ detail::buffered_fill_handler<BOOST_ASIO_HANDLER_TYPE(
+ ReadHandler, void (boost::system::error_code, std::size_t))>(
+ storage_, previous_size, init.handler));
+
+ return init.result.get();
+}
+
+template <typename Stream>
+template <typename MutableBufferSequence>
+std::size_t buffered_read_stream<Stream>::read_some(
+ const MutableBufferSequence& buffers)
+{
+ if (boost::asio::buffer_size(buffers) == 0)
+ return 0;
+
+ if (storage_.empty())
+ this->fill();
+
+ return this->copy(buffers);
+}
+
+template <typename Stream>
+template <typename MutableBufferSequence>
+std::size_t buffered_read_stream<Stream>::read_some(
+ const MutableBufferSequence& buffers, boost::system::error_code& ec)
+{
+ ec = boost::system::error_code();
+
+ if (boost::asio::buffer_size(buffers) == 0)
+ return 0;
+
+ if (storage_.empty() && !this->fill(ec))
+ return 0;
+
+ return this->copy(buffers);
+}
+
+namespace detail
+{
+ template <typename MutableBufferSequence, typename ReadHandler>
+ class buffered_read_some_handler
+ {
+ public:
+ buffered_read_some_handler(detail::buffered_stream_storage& storage,
+ const MutableBufferSequence& buffers, ReadHandler& handler)
+ : storage_(storage),
+ buffers_(buffers),
+ handler_(handler)
+ {
+ }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+ buffered_read_some_handler(const buffered_read_some_handler& other)
+ : storage_(other.storage_),
+ buffers_(other.buffers_),
+ handler_(other.handler_)
+ {
+ }
+
+ buffered_read_some_handler(buffered_read_some_handler&& other)
+ : storage_(other.storage_),
+ buffers_(other.buffers_),
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+ {
+ }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+ void operator()(const boost::system::error_code& ec, std::size_t)
+ {
+ if (ec || storage_.empty())
+ {
+ const std::size_t length = 0;
+ handler_(ec, length);
+ }
+ else
+ {
+ const std::size_t bytes_copied = boost::asio::buffer_copy(
+ buffers_, storage_.data(), storage_.size());
+ storage_.consume(bytes_copied);
+ handler_(ec, bytes_copied);
+ }
+ }
+
+ //private:
+ detail::buffered_stream_storage& storage_;
+ MutableBufferSequence buffers_;
+ ReadHandler handler_;
+ };
+
+ template <typename MutableBufferSequence, typename ReadHandler>
+ inline void* asio_handler_allocate(std::size_t size,
+ buffered_read_some_handler<
+ MutableBufferSequence, ReadHandler>* this_handler)
+ {
+ return boost_asio_handler_alloc_helpers::allocate(
+ size, this_handler->handler_);
+ }
+
+ template <typename MutableBufferSequence, typename ReadHandler>
+ inline void asio_handler_deallocate(void* pointer, std::size_t size,
+ buffered_read_some_handler<
+ MutableBufferSequence, ReadHandler>* this_handler)
+ {
+ boost_asio_handler_alloc_helpers::deallocate(
+ pointer, size, this_handler->handler_);
+ }
+
+ template <typename MutableBufferSequence, typename ReadHandler>
+ inline bool asio_handler_is_continuation(
+ buffered_read_some_handler<
+ MutableBufferSequence, ReadHandler>* this_handler)
+ {
+ return boost_asio_handler_cont_helpers::is_continuation(
+ this_handler->handler_);
+ }
+
+ template <typename Function, typename MutableBufferSequence,
+ typename ReadHandler>
+ inline void asio_handler_invoke(Function& function,
+ buffered_read_some_handler<
+ MutableBufferSequence, ReadHandler>* this_handler)
+ {
+ boost_asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+ }
+
+ template <typename Function, typename MutableBufferSequence,
+ typename ReadHandler>
+ inline void asio_handler_invoke(const Function& function,
+ buffered_read_some_handler<
+ MutableBufferSequence, ReadHandler>* this_handler)
+ {
+ boost_asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+ }
+} // namespace detail
+
+template <typename Stream>
+template <typename MutableBufferSequence, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (boost::system::error_code, std::size_t))
+buffered_read_stream<Stream>::async_read_some(
+ const MutableBufferSequence& buffers,
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a ReadHandler.
+ BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+ detail::async_result_init<
+ ReadHandler, void (boost::system::error_code, std::size_t)> init(
+ BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+ if (boost::asio::buffer_size(buffers) == 0 || !storage_.empty())
+ {
+ next_layer_.async_read_some(boost::asio::mutable_buffers_1(0, 0),
+ detail::buffered_read_some_handler<
+ MutableBufferSequence, BOOST_ASIO_HANDLER_TYPE(
+ ReadHandler, void (boost::system::error_code, std::size_t))>(
+ storage_, buffers, init.handler));
+ }
+ else
+ {
+ this->async_fill(detail::buffered_read_some_handler<
+ MutableBufferSequence, BOOST_ASIO_HANDLER_TYPE(
+ ReadHandler, void (boost::system::error_code, std::size_t))>(
+ storage_, buffers, init.handler));
+ }
+
+ return init.result.get();
+}
+
+template <typename Stream>
+template <typename MutableBufferSequence>
+std::size_t buffered_read_stream<Stream>::peek(
+ const MutableBufferSequence& buffers)
+{
+ if (storage_.empty())
+ this->fill();
+ return this->peek_copy(buffers);
+}
+
+template <typename Stream>
+template <typename MutableBufferSequence>
+std::size_t buffered_read_stream<Stream>::peek(
+ const MutableBufferSequence& buffers, boost::system::error_code& ec)
+{
+ ec = boost::system::error_code();
+ if (storage_.empty() && !this->fill(ec))
+ return 0;
+ return this->peek_copy(buffers);
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_BUFFERED_READ_STREAM_HPP
diff --git a/3party/boost/boost/asio/impl/buffered_write_stream.hpp b/3party/boost/boost/asio/impl/buffered_write_stream.hpp
new file mode 100644
index 0000000000..65012088e5
--- /dev/null
+++ b/3party/boost/boost/asio/impl/buffered_write_stream.hpp
@@ -0,0 +1,340 @@
+//
+// impl/buffered_write_stream.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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_ASIO_IMPL_BUFFERED_WRITE_STREAM_HPP
+#define BOOST_ASIO_IMPL_BUFFERED_WRITE_STREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename Stream>
+std::size_t buffered_write_stream<Stream>::flush()
+{
+ std::size_t bytes_written = write(next_layer_,
+ buffer(storage_.data(), storage_.size()));
+ storage_.consume(bytes_written);
+ return bytes_written;
+}
+
+template <typename Stream>
+std::size_t buffered_write_stream<Stream>::flush(boost::system::error_code& ec)
+{
+ std::size_t bytes_written = write(next_layer_,
+ buffer(storage_.data(), storage_.size()),
+ transfer_all(), ec);
+ storage_.consume(bytes_written);
+ return bytes_written;
+}
+
+namespace detail
+{
+ template <typename WriteHandler>
+ class buffered_flush_handler
+ {
+ public:
+ buffered_flush_handler(detail::buffered_stream_storage& storage,
+ WriteHandler& handler)
+ : storage_(storage),
+ handler_(handler)
+ {
+ }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+ buffered_flush_handler(const buffered_flush_handler& other)
+ : storage_(other.storage_),
+ handler_(other.handler_)
+ {
+ }
+
+ buffered_flush_handler(buffered_flush_handler&& other)
+ : storage_(other.storage_),
+ handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+ {
+ }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+ void operator()(const boost::system::error_code& ec,
+ const std::size_t bytes_written)
+ {
+ storage_.consume(bytes_written);
+ handler_(ec, bytes_written);
+ }
+
+ //private:
+ detail::buffered_stream_storage& storage_;
+ WriteHandler handler_;
+ };
+
+ template <typename WriteHandler>
+ inline void* asio_handler_allocate(std::size_t size,
+ buffered_flush_handler<WriteHandler>* this_handler)
+ {
+ return boost_asio_handler_alloc_helpers::allocate(
+ size, this_handler->handler_);
+ }
+
+ template <typename WriteHandler>
+ inline void asio_handler_deallocate(void* pointer, std::size_t size,
+ buffered_flush_handler<WriteHandler>* this_handler)
+ {
+ boost_asio_handler_alloc_helpers::deallocate(
+ pointer, size, this_handler->handler_);
+ }
+
+ template <typename WriteHandler>
+ inline bool asio_handler_is_continuation(
+ buffered_flush_handler<WriteHandler>* this_handler)
+ {
+ return boost_asio_handler_cont_helpers::is_continuation(
+ this_handler->handler_);
+ }
+
+ template <typename Function, typename WriteHandler>
+ inline void asio_handler_invoke(Function& function,
+ buffered_flush_handler<WriteHandler>* this_handler)
+ {
+ boost_asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+ }
+
+ template <typename Function, typename WriteHandler>
+ inline void asio_handler_invoke(const Function& function,
+ buffered_flush_handler<WriteHandler>* this_handler)
+ {
+ boost_asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+ }
+}
+
+template <typename Stream>
+template <typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (boost::system::error_code, std::size_t))
+buffered_write_stream<Stream>::async_flush(
+ BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a WriteHandler.
+ BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+ detail::async_result_init<
+ WriteHandler, void (boost::system::error_code, std::size_t)> init(
+ BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+ async_write(next_layer_, buffer(storage_.data(), storage_.size()),
+ detail::buffered_flush_handler<BOOST_ASIO_HANDLER_TYPE(
+ WriteHandler, void (boost::system::error_code, std::size_t))>(
+ storage_, init.handler));
+
+ return init.result.get();
+}
+
+template <typename Stream>
+template <typename ConstBufferSequence>
+std::size_t buffered_write_stream<Stream>::write_some(
+ const ConstBufferSequence& buffers)
+{
+ if (boost::asio::buffer_size(buffers) == 0)
+ return 0;
+
+ if (storage_.size() == storage_.capacity())
+ this->flush();
+
+ return this->copy(buffers);
+}
+
+template <typename Stream>
+template <typename ConstBufferSequence>
+std::size_t buffered_write_stream<Stream>::write_some(
+ const ConstBufferSequence& buffers, boost::system::error_code& ec)
+{
+ ec = boost::system::error_code();
+
+ if (boost::asio::buffer_size(buffers) == 0)
+ return 0;
+
+ if (storage_.size() == storage_.capacity() && !flush(ec))
+ return 0;
+
+ return this->copy(buffers);
+}
+
+namespace detail
+{
+ template <typename ConstBufferSequence, typename WriteHandler>
+ class buffered_write_some_handler
+ {
+ public:
+ buffered_write_some_handler(detail::buffered_stream_storage& storage,
+ const ConstBufferSequence& buffers, WriteHandler& handler)
+ : storage_(storage),
+ buffers_(buffers),
+ handler_(handler)
+ {
+ }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+ buffered_write_some_handler(const buffered_write_some_handler& other)
+ : storage_(other.storage_),
+ buffers_(other.buffers_),
+ handler_(other.handler_)
+ {
+ }
+
+ buffered_write_some_handler(buffered_write_some_handler&& other)
+ : storage_(other.storage_),
+ buffers_(other.buffers_),
+ handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+ {
+ }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+ void operator()(const boost::system::error_code& ec, std::size_t)
+ {
+ if (ec)
+ {
+ const std::size_t length = 0;
+ handler_(ec, length);
+ }
+ else
+ {
+ std::size_t orig_size = storage_.size();
+ std::size_t space_avail = storage_.capacity() - orig_size;
+ std::size_t bytes_avail = boost::asio::buffer_size(buffers_);
+ std::size_t length = bytes_avail < space_avail
+ ? bytes_avail : space_avail;
+ storage_.resize(orig_size + length);
+ const std::size_t bytes_copied = boost::asio::buffer_copy(
+ storage_.data() + orig_size, buffers_, length);
+ handler_(ec, bytes_copied);
+ }
+ }
+
+ //private:
+ detail::buffered_stream_storage& storage_;
+ ConstBufferSequence buffers_;
+ WriteHandler handler_;
+ };
+
+ template <typename ConstBufferSequence, typename WriteHandler>
+ inline void* asio_handler_allocate(std::size_t size,
+ buffered_write_some_handler<
+ ConstBufferSequence, WriteHandler>* this_handler)
+ {
+ return boost_asio_handler_alloc_helpers::allocate(
+ size, this_handler->handler_);
+ }
+
+ template <typename ConstBufferSequence, typename WriteHandler>
+ inline void asio_handler_deallocate(void* pointer, std::size_t size,
+ buffered_write_some_handler<
+ ConstBufferSequence, WriteHandler>* this_handler)
+ {
+ boost_asio_handler_alloc_helpers::deallocate(
+ pointer, size, this_handler->handler_);
+ }
+
+ template <typename ConstBufferSequence, typename WriteHandler>
+ inline bool asio_handler_is_continuation(
+ buffered_write_some_handler<
+ ConstBufferSequence, WriteHandler>* this_handler)
+ {
+ return boost_asio_handler_cont_helpers::is_continuation(
+ this_handler->handler_);
+ }
+
+ template <typename Function, typename ConstBufferSequence,
+ typename WriteHandler>
+ inline void asio_handler_invoke(Function& function,
+ buffered_write_some_handler<
+ ConstBufferSequence, WriteHandler>* this_handler)
+ {
+ boost_asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+ }
+
+ template <typename Function, typename ConstBufferSequence,
+ typename WriteHandler>
+ inline void asio_handler_invoke(const Function& function,
+ buffered_write_some_handler<
+ ConstBufferSequence, WriteHandler>* this_handler)
+ {
+ boost_asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+ }
+} // namespace detail
+
+template <typename Stream>
+template <typename ConstBufferSequence, typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (boost::system::error_code, std::size_t))
+buffered_write_stream<Stream>::async_write_some(
+ const ConstBufferSequence& buffers,
+ BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a WriteHandler.
+ BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+ detail::async_result_init<
+ WriteHandler, void (boost::system::error_code, std::size_t)> init(
+ BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+ if (boost::asio::buffer_size(buffers) == 0
+ || storage_.size() < storage_.capacity())
+ {
+ next_layer_.async_write_some(boost::asio::const_buffers_1(0, 0),
+ detail::buffered_write_some_handler<
+ ConstBufferSequence, BOOST_ASIO_HANDLER_TYPE(
+ WriteHandler, void (boost::system::error_code, std::size_t))>(
+ storage_, buffers, init.handler));
+ }
+ else
+ {
+ this->async_flush(detail::buffered_write_some_handler<
+ ConstBufferSequence, BOOST_ASIO_HANDLER_TYPE(
+ WriteHandler, void (boost::system::error_code, std::size_t))>(
+ storage_, buffers, init.handler));
+ }
+
+ return init.result.get();
+}
+
+template <typename Stream>
+template <typename ConstBufferSequence>
+std::size_t buffered_write_stream<Stream>::copy(
+ const ConstBufferSequence& buffers)
+{
+ std::size_t orig_size = storage_.size();
+ std::size_t space_avail = storage_.capacity() - orig_size;
+ std::size_t bytes_avail = boost::asio::buffer_size(buffers);
+ std::size_t length = bytes_avail < space_avail ? bytes_avail : space_avail;
+ storage_.resize(orig_size + length);
+ return boost::asio::buffer_copy(
+ storage_.data() + orig_size, buffers, length);
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_BUFFERED_WRITE_STREAM_HPP
diff --git a/3party/boost/boost/asio/impl/connect.hpp b/3party/boost/boost/asio/impl/connect.hpp
index 07050516bb..68a903eed8 100644
--- a/3party/boost/boost/asio/impl/connect.hpp
+++ b/3party/boost/boost/asio/impl/connect.hpp
@@ -2,7 +2,7 @@
// impl/connect.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/error.ipp b/3party/boost/boost/asio/impl/error.ipp
index 21ca931d22..ae43418988 100644
--- a/3party/boost/boost/asio/impl/error.ipp
+++ b/3party/boost/boost/asio/impl/error.ipp
@@ -2,7 +2,7 @@
// impl/error.ipp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -16,6 +16,7 @@
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
#include <boost/asio/detail/config.hpp>
+#include <string>
#include <boost/asio/error.hpp>
#include <boost/asio/detail/push_options.hpp>
diff --git a/3party/boost/boost/asio/impl/handler_alloc_hook.ipp b/3party/boost/boost/asio/impl/handler_alloc_hook.ipp
index b781c1c59b..2561f3b066 100644
--- a/3party/boost/boost/asio/impl/handler_alloc_hook.ipp
+++ b/3party/boost/boost/asio/impl/handler_alloc_hook.ipp
@@ -2,7 +2,7 @@
// impl/handler_alloc_hook.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +21,6 @@
#if !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
# if defined(BOOST_ASIO_HAS_IOCP)
-# include <boost/asio/detail/win_iocp_io_service_fwd.hpp>
# include <boost/asio/detail/win_iocp_thread_info.hpp>
# else // defined(BOOST_ASIO_HAS_IOCP)
# include <boost/asio/detail/task_io_service_thread_info.hpp>
@@ -33,6 +32,10 @@
namespace boost {
namespace asio {
+#if defined(BOOST_ASIO_HAS_IOCP)
+namespace detail { class win_iocp_io_service; }
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
void* asio_handler_allocate(std::size_t size, ...)
{
#if !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
diff --git a/3party/boost/boost/asio/impl/io_service.hpp b/3party/boost/boost/asio/impl/io_service.hpp
index 0aa5c61595..4c6f2e1396 100644
--- a/3party/boost/boost/asio/impl/io_service.hpp
+++ b/3party/boost/boost/asio/impl/io_service.hpp
@@ -2,7 +2,7 @@
// impl/io_service.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/io_service.ipp b/3party/boost/boost/asio/impl/io_service.ipp
index 4f3f680c60..0bb5bbf8d4 100644
--- a/3party/boost/boost/asio/impl/io_service.ipp
+++ b/3party/boost/boost/asio/impl/io_service.ipp
@@ -2,7 +2,7 @@
// impl/io_service.ipp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/read.hpp b/3party/boost/boost/asio/impl/read.hpp
index bb35f80263..86f8776292 100644
--- a/3party/boost/boost/asio/impl/read.hpp
+++ b/3party/boost/boost/asio/impl/read.hpp
@@ -2,7 +2,7 @@
// impl/read.hpp
// ~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/read_at.hpp b/3party/boost/boost/asio/impl/read_at.hpp
index 6fa116c93e..877a7c7bb7 100644
--- a/3party/boost/boost/asio/impl/read_at.hpp
+++ b/3party/boost/boost/asio/impl/read_at.hpp
@@ -2,7 +2,7 @@
// impl/read_at.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/read_until.hpp b/3party/boost/boost/asio/impl/read_until.hpp
index 93f46ea598..349c447c70 100644
--- a/3party/boost/boost/asio/impl/read_until.hpp
+++ b/3party/boost/boost/asio/impl/read_until.hpp
@@ -2,7 +2,7 @@
// impl/read_until.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/serial_port_base.hpp b/3party/boost/boost/asio/impl/serial_port_base.hpp
index 032325cafe..92be00d3a3 100644
--- a/3party/boost/boost/asio/impl/serial_port_base.hpp
+++ b/3party/boost/boost/asio/impl/serial_port_base.hpp
@@ -2,7 +2,7 @@
// impl/serial_port_base.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/impl/serial_port_base.ipp b/3party/boost/boost/asio/impl/serial_port_base.ipp
index 8569ef0c04..51f66c161a 100644
--- a/3party/boost/boost/asio/impl/serial_port_base.ipp
+++ b/3party/boost/boost/asio/impl/serial_port_base.ipp
@@ -2,7 +2,7 @@
// impl/serial_port_base.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -111,7 +111,6 @@ boost::system::error_code serial_port_base::baud_rate::store(
case 4000000: baud = B4000000; break;
# endif
default:
- baud = B0;
ec = boost::asio::error::invalid_argument;
return ec;
}
diff --git a/3party/boost/boost/asio/impl/spawn.hpp b/3party/boost/boost/asio/impl/spawn.hpp
index 1e25e6b60e..9f2f480f7d 100644
--- a/3party/boost/boost/asio/impl/spawn.hpp
+++ b/3party/boost/boost/asio/impl/spawn.hpp
@@ -2,7 +2,7 @@
// impl/spawn.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -171,7 +171,8 @@ public:
typedef T type;
explicit async_result(detail::coro_handler<Handler, T>& h)
- : ca_(h.ca_)
+ : handler_(h),
+ ca_(h.ca_)
{
out_ec_ = h.ec_;
if (!out_ec_) h.ec_ = &ec_;
@@ -180,12 +181,14 @@ public:
type get()
{
+ handler_.coro_.reset(); // Must not hold shared_ptr to coro while suspended.
ca_();
if (!out_ec_ && ec_) throw boost::system::system_error(ec_);
return value_;
}
private:
+ detail::coro_handler<Handler, T>& handler_;
typename basic_yield_context<Handler>::caller_type& ca_;
boost::system::error_code* out_ec_;
boost::system::error_code ec_;
@@ -199,7 +202,8 @@ public:
typedef void type;
explicit async_result(detail::coro_handler<Handler, void>& h)
- : ca_(h.ca_)
+ : handler_(h),
+ ca_(h.ca_)
{
out_ec_ = h.ec_;
if (!out_ec_) h.ec_ = &ec_;
@@ -207,11 +211,13 @@ public:
void get()
{
+ handler_.coro_.reset(); // Must not hold shared_ptr to coro while suspended.
ca_();
if (!out_ec_ && ec_) throw boost::system::system_error(ec_);
}
private:
+ detail::coro_handler<Handler, void>& handler_;
typename basic_yield_context<Handler>::caller_type& ca_;
boost::system::error_code* out_ec_;
boost::system::error_code ec_;
@@ -242,7 +248,9 @@ namespace detail {
void operator()(typename basic_yield_context<Handler>::caller_type& ca)
{
shared_ptr<spawn_data<Handler, Function> > data(data_);
+#if !defined(BOOST_COROUTINES_UNIDIRECT) && !defined(BOOST_COROUTINES_V2)
ca(); // Yield until coroutine pointer has been initialised.
+#endif // !defined(BOOST_COROUTINES_UNIDIRECT) && !defined(BOOST_COROUTINES_V2)
const basic_yield_context<Handler> yield(
data->coro_, ca, data->handler_);
(data->function_)(yield);
diff --git a/3party/boost/boost/asio/impl/src.cpp b/3party/boost/boost/asio/impl/src.cpp
index 553120e658..e8d239472c 100644
--- a/3party/boost/boost/asio/impl/src.cpp
+++ b/3party/boost/boost/asio/impl/src.cpp
@@ -2,7 +2,7 @@
// impl/src.cpp
// ~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/src.hpp b/3party/boost/boost/asio/impl/src.hpp
index bf6a6b57f2..03536b9ac2 100644
--- a/3party/boost/boost/asio/impl/src.hpp
+++ b/3party/boost/boost/asio/impl/src.hpp
@@ -2,7 +2,7 @@
// impl/src.hpp
// ~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +23,7 @@
#include <boost/asio/impl/handler_alloc_hook.ipp>
#include <boost/asio/impl/io_service.ipp>
#include <boost/asio/impl/serial_port_base.ipp>
+#include <boost/asio/detail/impl/buffer_sequence_adapter.ipp>
#include <boost/asio/detail/impl/descriptor_ops.ipp>
#include <boost/asio/detail/impl/dev_poll_reactor.ipp>
#include <boost/asio/detail/impl/epoll_reactor.ipp>
@@ -58,6 +59,8 @@
#include <boost/asio/detail/impl/win_static_mutex.ipp>
#include <boost/asio/detail/impl/win_thread.ipp>
#include <boost/asio/detail/impl/win_tss_ptr.ipp>
+#include <boost/asio/detail/impl/winrt_ssocket_service_base.ipp>
+#include <boost/asio/detail/impl/winrt_timer_scheduler.ipp>
#include <boost/asio/detail/impl/winsock_init.ipp>
#include <boost/asio/generic/detail/impl/endpoint.ipp>
#include <boost/asio/ip/impl/address.ipp>
diff --git a/3party/boost/boost/asio/impl/use_future.hpp b/3party/boost/boost/asio/impl/use_future.hpp
index 4952d3d411..11194bd5db 100644
--- a/3party/boost/boost/asio/impl/use_future.hpp
+++ b/3party/boost/boost/asio/impl/use_future.hpp
@@ -2,7 +2,7 @@
// impl/use_future.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/write.hpp b/3party/boost/boost/asio/impl/write.hpp
index 8abb62022f..ef0c092024 100644
--- a/3party/boost/boost/asio/impl/write.hpp
+++ b/3party/boost/boost/asio/impl/write.hpp
@@ -2,7 +2,7 @@
// impl/write.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/impl/write_at.hpp b/3party/boost/boost/asio/impl/write_at.hpp
index 8ff083e55a..0d0dc4bd47 100644
--- a/3party/boost/boost/asio/impl/write_at.hpp
+++ b/3party/boost/boost/asio/impl/write_at.hpp
@@ -2,7 +2,7 @@
// impl/write_at.hpp
// ~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/io_service.hpp b/3party/boost/boost/asio/io_service.hpp
index 7148a89803..16b0bbf206 100644
--- a/3party/boost/boost/asio/io_service.hpp
+++ b/3party/boost/boost/asio/io_service.hpp
@@ -2,7 +2,7 @@
// io_service.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,16 +21,9 @@
#include <typeinfo>
#include <boost/asio/async_result.hpp>
#include <boost/asio/detail/noncopyable.hpp>
-#include <boost/asio/detail/service_registry_fwd.hpp>
#include <boost/asio/detail/wrapped_handler.hpp>
#include <boost/system/error_code.hpp>
-#if defined(BOOST_ASIO_HAS_IOCP)
-# include <boost/asio/detail/win_iocp_io_service_fwd.hpp>
-#else
-# include <boost/asio/detail/task_io_service_fwd.hpp>
-#endif
-
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
# include <boost/asio/detail/winsock_init.hpp>
#elif defined(__sun) || defined(__QNX__) || defined(__hpux) || defined(_AIX) \
@@ -48,11 +41,15 @@ template <typename Service> Service& use_service(io_service& ios);
template <typename Service> void add_service(io_service& ios, Service* svc);
template <typename Service> bool has_service(io_service& ios);
+namespace detail {
#if defined(BOOST_ASIO_HAS_IOCP)
-namespace detail { typedef win_iocp_io_service io_service_impl; }
+ typedef class win_iocp_io_service io_service_impl;
+ class win_iocp_overlapped_ptr;
#else
-namespace detail { typedef task_io_service io_service_impl; }
+ typedef class task_io_service io_service_impl;
#endif
+ class service_registry;
+} // namespace detail
/// Provides core I/O functionality.
/**
diff --git a/3party/boost/boost/asio/ip/address.hpp b/3party/boost/boost/asio/ip/address.hpp
index abb079e889..e412313fa9 100644
--- a/3party/boost/boost/asio/ip/address.hpp
+++ b/3party/boost/boost/asio/ip/address.hpp
@@ -2,7 +2,7 @@
// ip/address.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/address_v4.hpp b/3party/boost/boost/asio/ip/address_v4.hpp
index 4f9a2d1e5c..3b2fe0f43b 100644
--- a/3party/boost/boost/asio/ip/address_v4.hpp
+++ b/3party/boost/boost/asio/ip/address_v4.hpp
@@ -2,7 +2,7 @@
// ip/address_v4.hpp
// ~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/address_v6.hpp b/3party/boost/boost/asio/ip/address_v6.hpp
index 179fc1a2ba..0ec28185a9 100644
--- a/3party/boost/boost/asio/ip/address_v6.hpp
+++ b/3party/boost/boost/asio/ip/address_v6.hpp
@@ -2,7 +2,7 @@
// ip/address_v6.hpp
// ~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/basic_endpoint.hpp b/3party/boost/boost/asio/ip/basic_endpoint.hpp
index 4cc68ab4aa..d4a80f3a32 100644
--- a/3party/boost/boost/asio/ip/basic_endpoint.hpp
+++ b/3party/boost/boost/asio/ip/basic_endpoint.hpp
@@ -2,7 +2,7 @@
// ip/basic_endpoint.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/basic_resolver.hpp b/3party/boost/boost/asio/ip/basic_resolver.hpp
index c28e642f9c..a4593af164 100644
--- a/3party/boost/boost/asio/ip/basic_resolver.hpp
+++ b/3party/boost/boost/asio/ip/basic_resolver.hpp
@@ -2,7 +2,7 @@
// ip/basic_resolver.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/basic_resolver_entry.hpp b/3party/boost/boost/asio/ip/basic_resolver_entry.hpp
index abadfe475a..6fef220ef7 100644
--- a/3party/boost/boost/asio/ip/basic_resolver_entry.hpp
+++ b/3party/boost/boost/asio/ip/basic_resolver_entry.hpp
@@ -2,7 +2,7 @@
// ip/basic_resolver_entry.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/basic_resolver_iterator.hpp b/3party/boost/boost/asio/ip/basic_resolver_iterator.hpp
index 2046439af8..c32d7023a6 100644
--- a/3party/boost/boost/asio/ip/basic_resolver_iterator.hpp
+++ b/3party/boost/boost/asio/ip/basic_resolver_iterator.hpp
@@ -2,7 +2,7 @@
// ip/basic_resolver_iterator.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,10 @@
#include <boost/asio/detail/socket_types.hpp>
#include <boost/asio/ip/basic_resolver_entry.hpp>
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/winrt_utils.hpp>
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
#include <boost/asio/detail/push_options.hpp>
namespace boost {
@@ -86,8 +90,8 @@ public:
while (address_info)
{
- if (address_info->ai_family == PF_INET
- || address_info->ai_family == PF_INET6)
+ if (address_info->ai_family == BOOST_ASIO_OS_DEF(AF_INET)
+ || address_info->ai_family == BOOST_ASIO_OS_DEF(AF_INET6))
{
using namespace std; // For memcpy.
typename InternetProtocol::endpoint endpoint;
@@ -117,6 +121,67 @@ public:
return iter;
}
+ /// Create an iterator from a sequence of endpoints, host and service name.
+ template <typename EndpointIterator>
+ static basic_resolver_iterator create(
+ EndpointIterator begin, EndpointIterator end,
+ const std::string& host_name, const std::string& service_name)
+ {
+ basic_resolver_iterator iter;
+ if (begin != end)
+ {
+ iter.values_.reset(new values_type);
+ for (EndpointIterator ep_iter = begin; ep_iter != end; ++ep_iter)
+ {
+ iter.values_->push_back(
+ basic_resolver_entry<InternetProtocol>(
+ *ep_iter, host_name, service_name));
+ }
+ }
+ return iter;
+ }
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ /// Create an iterator from a Windows Runtime list of EndpointPair objects.
+ static basic_resolver_iterator create(
+ Windows::Foundation::Collections::IVectorView<
+ Windows::Networking::EndpointPair^>^ endpoints,
+ const boost::asio::detail::addrinfo_type& hints,
+ const std::string& host_name, const std::string& service_name)
+ {
+ basic_resolver_iterator iter;
+ if (endpoints->Size)
+ {
+ iter.values_.reset(new values_type);
+ for (unsigned int i = 0; i < endpoints->Size; ++i)
+ {
+ auto pair = endpoints->GetAt(i);
+
+ if (hints.ai_family == BOOST_ASIO_OS_DEF(AF_INET)
+ && pair->RemoteHostName->Type
+ != Windows::Networking::HostNameType::Ipv4)
+ continue;
+
+ if (hints.ai_family == BOOST_ASIO_OS_DEF(AF_INET6)
+ && pair->RemoteHostName->Type
+ != Windows::Networking::HostNameType::Ipv6)
+ continue;
+
+ iter.values_->push_back(
+ basic_resolver_entry<InternetProtocol>(
+ typename InternetProtocol::endpoint(
+ ip::address::from_string(
+ boost::asio::detail::winrt_utils::string(
+ pair->RemoteHostName->CanonicalName)),
+ boost::asio::detail::winrt_utils::integer(
+ pair->RemoteServiceName)),
+ host_name, service_name));
+ }
+ }
+ return iter;
+ }
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
/// Dereference an iterator.
const basic_resolver_entry<InternetProtocol>& operator*() const
{
diff --git a/3party/boost/boost/asio/ip/basic_resolver_query.hpp b/3party/boost/boost/asio/ip/basic_resolver_query.hpp
index ec21e0f5a2..f8dcd2fe6e 100644
--- a/3party/boost/boost/asio/ip/basic_resolver_query.hpp
+++ b/3party/boost/boost/asio/ip/basic_resolver_query.hpp
@@ -2,7 +2,7 @@
// ip/basic_resolver_query.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -153,7 +153,7 @@ public:
{
typename InternetProtocol::endpoint endpoint;
hints_.ai_flags = static_cast<int>(resolve_flags);
- hints_.ai_family = PF_UNSPEC;
+ hints_.ai_family = BOOST_ASIO_OS_DEF(AF_UNSPEC);
hints_.ai_socktype = endpoint.protocol().type();
hints_.ai_protocol = endpoint.protocol().protocol();
hints_.ai_addrlen = 0;
diff --git a/3party/boost/boost/asio/ip/detail/endpoint.hpp b/3party/boost/boost/asio/ip/detail/endpoint.hpp
index e6d6013689..f171d58f9b 100644
--- a/3party/boost/boost/asio/ip/detail/endpoint.hpp
+++ b/3party/boost/boost/asio/ip/detail/endpoint.hpp
@@ -2,7 +2,7 @@
// ip/detail/endpoint.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -109,7 +109,7 @@ public:
// Determine whether the endpoint is IPv4.
bool is_v4() const
{
- return data_.base.sa_family == AF_INET;
+ return data_.base.sa_family == BOOST_ASIO_OS_DEF(AF_INET);
}
#if !defined(BOOST_ASIO_NO_IOSTREAM)
diff --git a/3party/boost/boost/asio/ip/detail/impl/endpoint.ipp b/3party/boost/boost/asio/ip/detail/impl/endpoint.ipp
index 6be3d23787..4ad504612b 100644
--- a/3party/boost/boost/asio/ip/detail/impl/endpoint.ipp
+++ b/3party/boost/boost/asio/ip/detail/impl/endpoint.ipp
@@ -2,7 +2,7 @@
// ip/detail/impl/endpoint.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,25 +35,25 @@ namespace detail {
endpoint::endpoint()
: data_()
{
- data_.v4.sin_family = AF_INET;
+ data_.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
data_.v4.sin_port = 0;
- data_.v4.sin_addr.s_addr = INADDR_ANY;
+ data_.v4.sin_addr.s_addr = BOOST_ASIO_OS_DEF(INADDR_ANY);
}
endpoint::endpoint(int family, unsigned short port_num)
: data_()
{
using namespace std; // For memcpy.
- if (family == PF_INET)
+ if (family == BOOST_ASIO_OS_DEF(AF_INET))
{
- data_.v4.sin_family = AF_INET;
+ data_.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
data_.v4.sin_port =
boost::asio::detail::socket_ops::host_to_network_short(port_num);
- data_.v4.sin_addr.s_addr = INADDR_ANY;
+ data_.v4.sin_addr.s_addr = BOOST_ASIO_OS_DEF(INADDR_ANY);
}
else
{
- data_.v6.sin6_family = AF_INET6;
+ data_.v6.sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
data_.v6.sin6_port =
boost::asio::detail::socket_ops::host_to_network_short(port_num);
data_.v6.sin6_flowinfo = 0;
@@ -76,7 +76,7 @@ endpoint::endpoint(const boost::asio::ip::address& addr,
using namespace std; // For memcpy.
if (addr.is_v4())
{
- data_.v4.sin_family = AF_INET;
+ data_.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
data_.v4.sin_port =
boost::asio::detail::socket_ops::host_to_network_short(port_num);
data_.v4.sin_addr.s_addr =
@@ -86,7 +86,7 @@ endpoint::endpoint(const boost::asio::ip::address& addr,
}
else
{
- data_.v6.sin6_family = AF_INET6;
+ data_.v6.sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
data_.v6.sin6_port =
boost::asio::detail::socket_ops::host_to_network_short(port_num);
data_.v6.sin6_flowinfo = 0;
diff --git a/3party/boost/boost/asio/ip/detail/socket_option.hpp b/3party/boost/boost/asio/ip/detail/socket_option.hpp
index cd643c544a..3b053f18e3 100644
--- a/3party/boost/boost/asio/ip/detail/socket_option.hpp
+++ b/3party/boost/boost/asio/ip/detail/socket_option.hpp
@@ -2,7 +2,7 @@
// detail/socket_option.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -402,7 +402,7 @@ public:
boost::asio::ip::address_v6 ipv6_address = multicast_address.to_v6();
boost::asio::ip::address_v6::bytes_type bytes = ipv6_address.to_bytes();
memcpy(ipv6_value_.ipv6mr_multiaddr.s6_addr, bytes.data(), 16);
- ipv6_value_.ipv6mr_interface = 0;
+ ipv6_value_.ipv6mr_interface = ipv6_address.scope_id();
}
else
{
@@ -440,7 +440,10 @@ public:
boost::asio::ip::address_v6::bytes_type bytes =
multicast_address.to_bytes();
memcpy(ipv6_value_.ipv6mr_multiaddr.s6_addr, bytes.data(), 16);
- ipv6_value_.ipv6mr_interface = network_interface;
+ if (network_interface)
+ ipv6_value_.ipv6mr_interface = network_interface;
+ else
+ ipv6_value_.ipv6mr_interface = multicast_address.scope_id();
}
// Get the level of the socket option.
diff --git a/3party/boost/boost/asio/ip/host_name.hpp b/3party/boost/boost/asio/ip/host_name.hpp
index d9046e9e99..f38c1eb5e4 100644
--- a/3party/boost/boost/asio/ip/host_name.hpp
+++ b/3party/boost/boost/asio/ip/host_name.hpp
@@ -2,7 +2,7 @@
// ip/host_name.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/icmp.hpp b/3party/boost/boost/asio/ip/icmp.hpp
index fa2ff33e2a..9849c88e86 100644
--- a/3party/boost/boost/asio/ip/icmp.hpp
+++ b/3party/boost/boost/asio/ip/icmp.hpp
@@ -2,7 +2,7 @@
// ip/icmp.hpp
// ~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -49,19 +49,21 @@ public:
/// Construct to represent the IPv4 ICMP protocol.
static icmp v4()
{
- return icmp(IPPROTO_ICMP, PF_INET);
+ return icmp(BOOST_ASIO_OS_DEF(IPPROTO_ICMP),
+ BOOST_ASIO_OS_DEF(AF_INET));
}
/// Construct to represent the IPv6 ICMP protocol.
static icmp v6()
{
- return icmp(IPPROTO_ICMPV6, PF_INET6);
+ return icmp(BOOST_ASIO_OS_DEF(IPPROTO_ICMPV6),
+ BOOST_ASIO_OS_DEF(AF_INET6));
}
/// Obtain an identifier for the type of the protocol.
int type() const
{
- return SOCK_RAW;
+ return BOOST_ASIO_OS_DEF(SOCK_RAW);
}
/// Obtain an identifier for the protocol.
diff --git a/3party/boost/boost/asio/ip/impl/address.hpp b/3party/boost/boost/asio/ip/impl/address.hpp
index 0f865e8e38..247e7d71cd 100644
--- a/3party/boost/boost/asio/ip/impl/address.hpp
+++ b/3party/boost/boost/asio/ip/impl/address.hpp
@@ -2,7 +2,7 @@
// ip/impl/address.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/impl/address.ipp b/3party/boost/boost/asio/ip/impl/address.ipp
index b238aa06ab..de57587591 100644
--- a/3party/boost/boost/asio/ip/impl/address.ipp
+++ b/3party/boost/boost/asio/ip/impl/address.ipp
@@ -2,7 +2,7 @@
// ip/impl/address.ipp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/impl/address_v4.hpp b/3party/boost/boost/asio/ip/impl/address_v4.hpp
index a27265c4e6..857b546e5a 100644
--- a/3party/boost/boost/asio/ip/impl/address_v4.hpp
+++ b/3party/boost/boost/asio/ip/impl/address_v4.hpp
@@ -2,7 +2,7 @@
// ip/impl/address_v4.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/impl/address_v4.ipp b/3party/boost/boost/asio/ip/impl/address_v4.ipp
index 5e56fdce84..a2029016b3 100644
--- a/3party/boost/boost/asio/ip/impl/address_v4.ipp
+++ b/3party/boost/boost/asio/ip/impl/address_v4.ipp
@@ -2,7 +2,7 @@
// ip/impl/address_v4.ipp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +88,8 @@ std::string address_v4::to_string(boost::system::error_code& ec) const
{
char addr_str[boost::asio::detail::max_addr_v4_str_len];
const char* addr =
- boost::asio::detail::socket_ops::inet_ntop(AF_INET, &addr_, addr_str,
+ boost::asio::detail::socket_ops::inet_ntop(
+ BOOST_ASIO_OS_DEF(AF_INET), &addr_, addr_str,
boost::asio::detail::max_addr_v4_str_len, 0, ec);
if (addr == 0)
return std::string();
@@ -108,7 +109,7 @@ address_v4 address_v4::from_string(
{
address_v4 tmp;
if (boost::asio::detail::socket_ops::inet_pton(
- AF_INET, str, &tmp.addr_, 0, ec) <= 0)
+ BOOST_ASIO_OS_DEF(AF_INET), str, &tmp.addr_, 0, ec) <= 0)
return address_v4();
return tmp;
}
diff --git a/3party/boost/boost/asio/ip/impl/address_v6.hpp b/3party/boost/boost/asio/ip/impl/address_v6.hpp
index 6d012398b5..758d6466f9 100644
--- a/3party/boost/boost/asio/ip/impl/address_v6.hpp
+++ b/3party/boost/boost/asio/ip/impl/address_v6.hpp
@@ -2,7 +2,7 @@
// ip/impl/address_v6.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/impl/address_v6.ipp b/3party/boost/boost/asio/ip/impl/address_v6.ipp
index e489e0c8f4..33db76b70d 100644
--- a/3party/boost/boost/asio/ip/impl/address_v6.ipp
+++ b/3party/boost/boost/asio/ip/impl/address_v6.ipp
@@ -2,7 +2,7 @@
// ip/impl/address_v6.ipp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,8 @@ std::string address_v6::to_string(boost::system::error_code& ec) const
{
char addr_str[boost::asio::detail::max_addr_v6_str_len];
const char* addr =
- boost::asio::detail::socket_ops::inet_ntop(AF_INET6, &addr_, addr_str,
+ boost::asio::detail::socket_ops::inet_ntop(
+ BOOST_ASIO_OS_DEF(AF_INET6), &addr_, addr_str,
boost::asio::detail::max_addr_v6_str_len, scope_id_, ec);
if (addr == 0)
return std::string();
@@ -130,7 +131,7 @@ address_v6 address_v6::from_string(
{
address_v6 tmp;
if (boost::asio::detail::socket_ops::inet_pton(
- AF_INET6, str, &tmp.addr_, &tmp.scope_id_, ec) <= 0)
+ BOOST_ASIO_OS_DEF(AF_INET6), str, &tmp.addr_, &tmp.scope_id_, ec) <= 0)
return address_v6();
return tmp;
}
diff --git a/3party/boost/boost/asio/ip/impl/basic_endpoint.hpp b/3party/boost/boost/asio/ip/impl/basic_endpoint.hpp
index c1459a9fab..ec9b1fa04d 100644
--- a/3party/boost/boost/asio/ip/impl/basic_endpoint.hpp
+++ b/3party/boost/boost/asio/ip/impl/basic_endpoint.hpp
@@ -2,7 +2,7 @@
// ip/impl/basic_endpoint.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/impl/host_name.ipp b/3party/boost/boost/asio/ip/impl/host_name.ipp
index f8a1bc1b90..092124269c 100644
--- a/3party/boost/boost/asio/ip/impl/host_name.ipp
+++ b/3party/boost/boost/asio/ip/impl/host_name.ipp
@@ -2,7 +2,7 @@
// ip/impl/host_name.ipp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ip/multicast.hpp b/3party/boost/boost/asio/ip/multicast.hpp
index 6b687ac53a..c162aa0cd2 100644
--- a/3party/boost/boost/asio/ip/multicast.hpp
+++ b/3party/boost/boost/asio/ip/multicast.hpp
@@ -2,7 +2,7 @@
// ip/multicast.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +48,10 @@ namespace multicast {
typedef implementation_defined join_group;
#else
typedef boost::asio::ip::detail::socket_option::multicast_request<
- IPPROTO_IP, IP_ADD_MEMBERSHIP, IPPROTO_IPV6, IPV6_JOIN_GROUP> join_group;
+ BOOST_ASIO_OS_DEF(IPPROTO_IP),
+ BOOST_ASIO_OS_DEF(IP_ADD_MEMBERSHIP),
+ BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+ BOOST_ASIO_OS_DEF(IPV6_JOIN_GROUP)> join_group;
#endif
/// Socket option to leave a multicast group on a specified interface.
@@ -73,7 +76,10 @@ typedef boost::asio::ip::detail::socket_option::multicast_request<
typedef implementation_defined leave_group;
#else
typedef boost::asio::ip::detail::socket_option::multicast_request<
- IPPROTO_IP, IP_DROP_MEMBERSHIP, IPPROTO_IPV6, IPV6_LEAVE_GROUP> leave_group;
+ BOOST_ASIO_OS_DEF(IPPROTO_IP),
+ BOOST_ASIO_OS_DEF(IP_DROP_MEMBERSHIP),
+ BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+ BOOST_ASIO_OS_DEF(IPV6_LEAVE_GROUP)> leave_group;
#endif
/// Socket option for local interface to use for outgoing multicast packets.
@@ -98,8 +104,10 @@ typedef boost::asio::ip::detail::socket_option::multicast_request<
typedef implementation_defined outbound_interface;
#else
typedef boost::asio::ip::detail::socket_option::network_interface<
- IPPROTO_IP, IP_MULTICAST_IF, IPPROTO_IPV6, IPV6_MULTICAST_IF>
- outbound_interface;
+ BOOST_ASIO_OS_DEF(IPPROTO_IP),
+ BOOST_ASIO_OS_DEF(IP_MULTICAST_IF),
+ BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+ BOOST_ASIO_OS_DEF(IPV6_MULTICAST_IF)> outbound_interface;
#endif
/// Socket option for time-to-live associated with outgoing multicast packets.
@@ -132,7 +140,10 @@ typedef boost::asio::ip::detail::socket_option::network_interface<
typedef implementation_defined hops;
#else
typedef boost::asio::ip::detail::socket_option::multicast_hops<
- IPPROTO_IP, IP_MULTICAST_TTL, IPPROTO_IPV6, IPV6_MULTICAST_HOPS> hops;
+ BOOST_ASIO_OS_DEF(IPPROTO_IP),
+ BOOST_ASIO_OS_DEF(IP_MULTICAST_TTL),
+ BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+ BOOST_ASIO_OS_DEF(IPV6_MULTICAST_HOPS)> hops;
#endif
/// Socket option determining whether outgoing multicast packets will be
@@ -166,8 +177,10 @@ typedef boost::asio::ip::detail::socket_option::multicast_hops<
typedef implementation_defined enable_loopback;
#else
typedef boost::asio::ip::detail::socket_option::multicast_enable_loopback<
- IPPROTO_IP, IP_MULTICAST_LOOP, IPPROTO_IPV6, IPV6_MULTICAST_LOOP>
- enable_loopback;
+ BOOST_ASIO_OS_DEF(IPPROTO_IP),
+ BOOST_ASIO_OS_DEF(IP_MULTICAST_LOOP),
+ BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+ BOOST_ASIO_OS_DEF(IPV6_MULTICAST_LOOP)> enable_loopback;
#endif
} // namespace multicast
diff --git a/3party/boost/boost/asio/ip/resolver_query_base.hpp b/3party/boost/boost/asio/ip/resolver_query_base.hpp
index d61253ada3..d53cd5bb05 100644
--- a/3party/boost/boost/asio/ip/resolver_query_base.hpp
+++ b/3party/boost/boost/asio/ip/resolver_query_base.hpp
@@ -2,7 +2,7 @@
// ip/resolver_query_base.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -63,31 +63,13 @@ public:
#else
enum flags
{
- canonical_name = AI_CANONNAME,
- passive = AI_PASSIVE,
- numeric_host = AI_NUMERICHOST,
-# if defined(AI_NUMERICSERV)
- numeric_service = AI_NUMERICSERV,
-# else
- numeric_service = 0,
-# endif
- // Note: QNX Neutrino 6.3 defines AI_V4MAPPED, AI_ALL and AI_ADDRCONFIG but
- // does not implement them. Therefore they are specifically excluded here.
-# if defined(AI_V4MAPPED) && !defined(__QNXNTO__)
- v4_mapped = AI_V4MAPPED,
-# else
- v4_mapped = 0,
-# endif
-# if defined(AI_ALL) && !defined(__QNXNTO__)
- all_matching = AI_ALL,
-# else
- all_matching = 0,
-# endif
-# if defined(AI_ADDRCONFIG) && !defined(__QNXNTO__)
- address_configured = AI_ADDRCONFIG
-# else
- address_configured = 0
-# endif
+ canonical_name = BOOST_ASIO_OS_DEF(AI_CANONNAME),
+ passive = BOOST_ASIO_OS_DEF(AI_PASSIVE),
+ numeric_host = BOOST_ASIO_OS_DEF(AI_NUMERICHOST),
+ numeric_service = BOOST_ASIO_OS_DEF(AI_NUMERICSERV),
+ v4_mapped = BOOST_ASIO_OS_DEF(AI_V4MAPPED),
+ all_matching = BOOST_ASIO_OS_DEF(AI_ALL),
+ address_configured = BOOST_ASIO_OS_DEF(AI_ADDRCONFIG)
};
// Implement bitmask operations as shown in C++ Std [lib.bitmask.types].
@@ -112,7 +94,7 @@ public:
friend flags operator~(flags x)
{
- return static_cast<flags>(static_cast<unsigned int>(~x));
+ return static_cast<flags>(~static_cast<unsigned int>(x));
}
friend flags& operator&=(flags& x, flags y)
diff --git a/3party/boost/boost/asio/ip/resolver_service.hpp b/3party/boost/boost/asio/ip/resolver_service.hpp
index b5e889b7ae..ec12007511 100644
--- a/3party/boost/boost/asio/ip/resolver_service.hpp
+++ b/3party/boost/boost/asio/ip/resolver_service.hpp
@@ -2,7 +2,7 @@
// ip/resolver_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -18,11 +18,16 @@
#include <boost/asio/detail/config.hpp>
#include <boost/asio/async_result.hpp>
#include <boost/system/error_code.hpp>
-#include <boost/asio/detail/resolver_service.hpp>
#include <boost/asio/io_service.hpp>
#include <boost/asio/ip/basic_resolver_iterator.hpp>
#include <boost/asio/ip/basic_resolver_query.hpp>
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/winrt_resolver_service.hpp>
+#else
+# include <boost/asio/detail/resolver_service.hpp>
+#endif
+
#include <boost/asio/detail/push_options.hpp>
namespace boost {
@@ -59,8 +64,13 @@ public:
private:
// The type of the platform-specific implementation.
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ typedef boost::asio::detail::winrt_resolver_service<InternetProtocol>
+ service_impl_type;
+#else
typedef boost::asio::detail::resolver_service<InternetProtocol>
service_impl_type;
+#endif
public:
/// The type of a resolver implementation.
diff --git a/3party/boost/boost/asio/ip/tcp.hpp b/3party/boost/boost/asio/ip/tcp.hpp
index 74ce406fb0..efa5bf698c 100644
--- a/3party/boost/boost/asio/ip/tcp.hpp
+++ b/3party/boost/boost/asio/ip/tcp.hpp
@@ -2,7 +2,7 @@
// ip/tcp.hpp
// ~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,25 +52,25 @@ public:
/// Construct to represent the IPv4 TCP protocol.
static tcp v4()
{
- return tcp(PF_INET);
+ return tcp(BOOST_ASIO_OS_DEF(AF_INET));
}
/// Construct to represent the IPv6 TCP protocol.
static tcp v6()
{
- return tcp(PF_INET6);
+ return tcp(BOOST_ASIO_OS_DEF(AF_INET6));
}
/// Obtain an identifier for the type of the protocol.
int type() const
{
- return SOCK_STREAM;
+ return BOOST_ASIO_OS_DEF(SOCK_STREAM);
}
/// Obtain an identifier for the protocol.
int protocol() const
{
- return IPPROTO_TCP;
+ return BOOST_ASIO_OS_DEF(IPPROTO_TCP);
}
/// Obtain an identifier for the protocol family.
@@ -123,7 +123,7 @@ public:
typedef implementation_defined no_delay;
#else
typedef boost::asio::detail::socket_option::boolean<
- IPPROTO_TCP, TCP_NODELAY> no_delay;
+ BOOST_ASIO_OS_DEF(IPPROTO_TCP), BOOST_ASIO_OS_DEF(TCP_NODELAY)> no_delay;
#endif
/// Compare two protocols for equality.
diff --git a/3party/boost/boost/asio/ip/udp.hpp b/3party/boost/boost/asio/ip/udp.hpp
index 2836b3c6c1..9eef4354c5 100644
--- a/3party/boost/boost/asio/ip/udp.hpp
+++ b/3party/boost/boost/asio/ip/udp.hpp
@@ -2,7 +2,7 @@
// ip/udp.hpp
// ~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -49,25 +49,25 @@ public:
/// Construct to represent the IPv4 UDP protocol.
static udp v4()
{
- return udp(PF_INET);
+ return udp(BOOST_ASIO_OS_DEF(AF_INET));
}
/// Construct to represent the IPv6 UDP protocol.
static udp v6()
{
- return udp(PF_INET6);
+ return udp(BOOST_ASIO_OS_DEF(AF_INET6));
}
/// Obtain an identifier for the type of the protocol.
int type() const
{
- return SOCK_DGRAM;
+ return BOOST_ASIO_OS_DEF(SOCK_DGRAM);
}
/// Obtain an identifier for the protocol.
int protocol() const
{
- return IPPROTO_UDP;
+ return BOOST_ASIO_OS_DEF(IPPROTO_UDP);
}
/// Obtain an identifier for the protocol family.
diff --git a/3party/boost/boost/asio/ip/unicast.hpp b/3party/boost/boost/asio/ip/unicast.hpp
index 8fc9858cc5..59a03e2d3d 100644
--- a/3party/boost/boost/asio/ip/unicast.hpp
+++ b/3party/boost/boost/asio/ip/unicast.hpp
@@ -2,7 +2,7 @@
// ip/unicast.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,10 @@ namespace unicast {
typedef implementation_defined hops;
#else
typedef boost::asio::ip::detail::socket_option::unicast_hops<
- IPPROTO_IP, IP_TTL, IPPROTO_IPV6, IPV6_UNICAST_HOPS> hops;
+ BOOST_ASIO_OS_DEF(IPPROTO_IP),
+ BOOST_ASIO_OS_DEF(IP_TTL),
+ BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+ BOOST_ASIO_OS_DEF(IPV6_UNICAST_HOPS)> hops;
#endif
} // namespace unicast
diff --git a/3party/boost/boost/asio/ip/v6_only.hpp b/3party/boost/boost/asio/ip/v6_only.hpp
index 14b322be03..6386e1965a 100644
--- a/3party/boost/boost/asio/ip/v6_only.hpp
+++ b/3party/boost/boost/asio/ip/v6_only.hpp
@@ -2,7 +2,7 @@
// ip/v6_only.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/is_read_buffered.hpp b/3party/boost/boost/asio/is_read_buffered.hpp
index df53b40a25..65c3aa9c56 100644
--- a/3party/boost/boost/asio/is_read_buffered.hpp
+++ b/3party/boost/boost/asio/is_read_buffered.hpp
@@ -2,7 +2,7 @@
// is_read_buffered.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/is_write_buffered.hpp b/3party/boost/boost/asio/is_write_buffered.hpp
index 509efe3cee..964c299e58 100644
--- a/3party/boost/boost/asio/is_write_buffered.hpp
+++ b/3party/boost/boost/asio/is_write_buffered.hpp
@@ -2,7 +2,7 @@
// is_write_buffered.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/local/basic_endpoint.hpp b/3party/boost/boost/asio/local/basic_endpoint.hpp
index 30d19f116e..ec3d1f89fb 100644
--- a/3party/boost/boost/asio/local/basic_endpoint.hpp
+++ b/3party/boost/boost/asio/local/basic_endpoint.hpp
@@ -2,7 +2,7 @@
// local/basic_endpoint.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Derived from a public domain implementation written by Daniel Casimiro.
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/local/connect_pair.hpp b/3party/boost/boost/asio/local/connect_pair.hpp
index 3d28f634df..4b169b563e 100644
--- a/3party/boost/boost/asio/local/connect_pair.hpp
+++ b/3party/boost/boost/asio/local/connect_pair.hpp
@@ -2,7 +2,7 @@
// local/connect_pair.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/local/datagram_protocol.hpp b/3party/boost/boost/asio/local/datagram_protocol.hpp
index fcf50227da..ef6a7796c1 100644
--- a/3party/boost/boost/asio/local/datagram_protocol.hpp
+++ b/3party/boost/boost/asio/local/datagram_protocol.hpp
@@ -2,7 +2,7 @@
// local/datagram_protocol.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/local/detail/endpoint.hpp b/3party/boost/boost/asio/local/detail/endpoint.hpp
index e876e54428..e6102045a8 100644
--- a/3party/boost/boost/asio/local/detail/endpoint.hpp
+++ b/3party/boost/boost/asio/local/detail/endpoint.hpp
@@ -2,7 +2,7 @@
// local/detail/endpoint.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Derived from a public domain implementation written by Daniel Casimiro.
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/local/detail/impl/endpoint.ipp b/3party/boost/boost/asio/local/detail/impl/endpoint.ipp
index 525c71fcda..c02ae674f4 100644
--- a/3party/boost/boost/asio/local/detail/impl/endpoint.ipp
+++ b/3party/boost/boost/asio/local/detail/impl/endpoint.ipp
@@ -2,7 +2,7 @@
// local/detail/impl/endpoint.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Derived from a public domain implementation written by Daniel Casimiro.
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/local/stream_protocol.hpp b/3party/boost/boost/asio/local/stream_protocol.hpp
index ef0ea8d1c5..c60b63a987 100644
--- a/3party/boost/boost/asio/local/stream_protocol.hpp
+++ b/3party/boost/boost/asio/local/stream_protocol.hpp
@@ -2,7 +2,7 @@
// local/stream_protocol.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/placeholders.hpp b/3party/boost/boost/asio/placeholders.hpp
index d5e80cb77f..06a093ff67 100644
--- a/3party/boost/boost/asio/placeholders.hpp
+++ b/3party/boost/boost/asio/placeholders.hpp
@@ -2,7 +2,7 @@
// placeholders.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/posix/basic_descriptor.hpp b/3party/boost/boost/asio/posix/basic_descriptor.hpp
index 81563d4b80..81a91c4426 100644
--- a/3party/boost/boost/asio/posix/basic_descriptor.hpp
+++ b/3party/boost/boost/asio/posix/basic_descriptor.hpp
@@ -2,7 +2,7 @@
// posix/basic_descriptor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/posix/basic_stream_descriptor.hpp b/3party/boost/boost/asio/posix/basic_stream_descriptor.hpp
index 13972d7e9b..7a3a92112a 100644
--- a/3party/boost/boost/asio/posix/basic_stream_descriptor.hpp
+++ b/3party/boost/boost/asio/posix/basic_stream_descriptor.hpp
@@ -2,7 +2,7 @@
// posix/basic_stream_descriptor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/posix/descriptor_base.hpp b/3party/boost/boost/asio/posix/descriptor_base.hpp
index 562589e4ea..8cfc0e6730 100644
--- a/3party/boost/boost/asio/posix/descriptor_base.hpp
+++ b/3party/boost/boost/asio/posix/descriptor_base.hpp
@@ -2,7 +2,7 @@
// posix/descriptor_base.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/posix/stream_descriptor.hpp b/3party/boost/boost/asio/posix/stream_descriptor.hpp
index 114959415b..5a2e5fbb5b 100644
--- a/3party/boost/boost/asio/posix/stream_descriptor.hpp
+++ b/3party/boost/boost/asio/posix/stream_descriptor.hpp
@@ -2,7 +2,7 @@
// posix/stream_descriptor.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/posix/stream_descriptor_service.hpp b/3party/boost/boost/asio/posix/stream_descriptor_service.hpp
index 5d9419862c..50a27e983c 100644
--- a/3party/boost/boost/asio/posix/stream_descriptor_service.hpp
+++ b/3party/boost/boost/asio/posix/stream_descriptor_service.hpp
@@ -2,7 +2,7 @@
// posix/stream_descriptor_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/raw_socket_service.hpp b/3party/boost/boost/asio/raw_socket_service.hpp
index 5b0049b325..c412e0a5ec 100644
--- a/3party/boost/boost/asio/raw_socket_service.hpp
+++ b/3party/boost/boost/asio/raw_socket_service.hpp
@@ -2,7 +2,7 @@
// raw_socket_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +22,9 @@
#include <boost/asio/error.hpp>
#include <boost/asio/io_service.hpp>
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_socket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
# include <boost/asio/detail/win_iocp_socket_service.hpp>
#else
# include <boost/asio/detail/reactive_socket_service.hpp>
@@ -56,7 +58,9 @@ public:
private:
// The type of the platform-specific implementation.
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ typedef detail::null_socket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
#else
typedef detail::reactive_socket_service<Protocol> service_impl_type;
@@ -138,7 +142,7 @@ public:
boost::system::error_code open(implementation_type& impl,
const protocol_type& protocol, boost::system::error_code& ec)
{
- if (protocol.type() == SOCK_RAW)
+ if (protocol.type() == BOOST_ASIO_OS_DEF(SOCK_RAW))
service_impl_.open(impl, protocol, ec);
else
ec = boost::asio::error::invalid_argument;
diff --git a/3party/boost/boost/asio/read.hpp b/3party/boost/boost/asio/read.hpp
index 07a7d2ea22..20fea0b6c4 100644
--- a/3party/boost/boost/asio/read.hpp
+++ b/3party/boost/boost/asio/read.hpp
@@ -2,7 +2,7 @@
// read.hpp
// ~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/read_at.hpp b/3party/boost/boost/asio/read_at.hpp
index 58b139cbc0..02acbeec97 100644
--- a/3party/boost/boost/asio/read_at.hpp
+++ b/3party/boost/boost/asio/read_at.hpp
@@ -2,7 +2,7 @@
// read_at.hpp
// ~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/read_until.hpp b/3party/boost/boost/asio/read_until.hpp
index 1074ae748b..a351604bb2 100644
--- a/3party/boost/boost/asio/read_until.hpp
+++ b/3party/boost/boost/asio/read_until.hpp
@@ -2,7 +2,7 @@
// read_until.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/seq_packet_socket_service.hpp b/3party/boost/boost/asio/seq_packet_socket_service.hpp
index 80ecea79a3..10d2fbaf16 100644
--- a/3party/boost/boost/asio/seq_packet_socket_service.hpp
+++ b/3party/boost/boost/asio/seq_packet_socket_service.hpp
@@ -2,7 +2,7 @@
// seq_packet_socket_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +22,9 @@
#include <boost/asio/error.hpp>
#include <boost/asio/io_service.hpp>
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_socket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
# include <boost/asio/detail/win_iocp_socket_service.hpp>
#else
# include <boost/asio/detail/reactive_socket_service.hpp>
@@ -57,7 +59,9 @@ public:
private:
// The type of the platform-specific implementation.
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ typedef detail::null_socket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
#else
typedef detail::reactive_socket_service<Protocol> service_impl_type;
@@ -140,7 +144,7 @@ public:
boost::system::error_code open(implementation_type& impl,
const protocol_type& protocol, boost::system::error_code& ec)
{
- if (protocol.type() == SOCK_SEQPACKET)
+ if (protocol.type() == BOOST_ASIO_OS_DEF(SOCK_SEQPACKET))
service_impl_.open(impl, protocol, ec);
else
ec = boost::asio::error::invalid_argument;
@@ -314,13 +318,20 @@ public:
/// Start an asynchronous send.
template <typename ConstBufferSequence, typename WriteHandler>
- void async_send(implementation_type& impl,
+ BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (boost::system::error_code, std::size_t))
+ async_send(implementation_type& impl,
const ConstBufferSequence& buffers,
socket_base::message_flags flags,
BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
{
- service_impl_.async_send(impl, buffers, flags,
+ detail::async_result_init<
+ WriteHandler, void (boost::system::error_code, std::size_t)> init(
BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+ service_impl_.async_send(impl, buffers, flags, init.handler);
+
+ return init.result.get();
}
/// Receive some data from the peer.
@@ -335,13 +346,21 @@ public:
/// Start an asynchronous receive.
template <typename MutableBufferSequence, typename ReadHandler>
- void async_receive(implementation_type& impl,
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (boost::system::error_code, std::size_t))
+ async_receive(implementation_type& impl,
const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
socket_base::message_flags& out_flags,
BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
{
- service_impl_.async_receive_with_flags(impl, buffers, in_flags,
- out_flags, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+ detail::async_result_init<
+ ReadHandler, void (boost::system::error_code, std::size_t)> init(
+ BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+ service_impl_.async_receive_with_flags(impl,
+ buffers, in_flags, out_flags, init.handler);
+
+ return init.result.get();
}
private:
diff --git a/3party/boost/boost/asio/serial_port.hpp b/3party/boost/boost/asio/serial_port.hpp
index cbac6e998a..824e1e20ca 100644
--- a/3party/boost/boost/asio/serial_port.hpp
+++ b/3party/boost/boost/asio/serial_port.hpp
@@ -2,7 +2,7 @@
// serial_port.hpp
// ~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/serial_port_base.hpp b/3party/boost/boost/asio/serial_port_base.hpp
index bc4827a92e..d6f6677cb4 100644
--- a/3party/boost/boost/asio/serial_port_base.hpp
+++ b/3party/boost/boost/asio/serial_port_base.hpp
@@ -2,7 +2,7 @@
// serial_port_base.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/serial_port_service.hpp b/3party/boost/boost/asio/serial_port_service.hpp
index 42191793b0..5b1767130b 100644
--- a/3party/boost/boost/asio/serial_port_service.hpp
+++ b/3party/boost/boost/asio/serial_port_service.hpp
@@ -2,7 +2,7 @@
// serial_port_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/signal_set.hpp b/3party/boost/boost/asio/signal_set.hpp
index b275ad6796..94fcad8786 100644
--- a/3party/boost/boost/asio/signal_set.hpp
+++ b/3party/boost/boost/asio/signal_set.hpp
@@ -2,7 +2,7 @@
// signal_set.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/signal_set_service.hpp b/3party/boost/boost/asio/signal_set_service.hpp
index 220a6bc59f..029b9afc39 100644
--- a/3party/boost/boost/asio/signal_set_service.hpp
+++ b/3party/boost/boost/asio/signal_set_service.hpp
@@ -2,7 +2,7 @@
// signal_set_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/socket_acceptor_service.hpp b/3party/boost/boost/asio/socket_acceptor_service.hpp
index 553fdd3b55..9a1963cd5f 100644
--- a/3party/boost/boost/asio/socket_acceptor_service.hpp
+++ b/3party/boost/boost/asio/socket_acceptor_service.hpp
@@ -2,7 +2,7 @@
// socket_acceptor_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +21,9 @@
#include <boost/asio/error.hpp>
#include <boost/asio/io_service.hpp>
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_socket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
# include <boost/asio/detail/win_iocp_socket_service.hpp>
#else
# include <boost/asio/detail/reactive_socket_service.hpp>
@@ -55,7 +57,9 @@ public:
private:
// The type of the platform-specific implementation.
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ typedef detail::null_socket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
#else
typedef detail::reactive_socket_service<Protocol> service_impl_type;
diff --git a/3party/boost/boost/asio/socket_base.hpp b/3party/boost/boost/asio/socket_base.hpp
index 9d16a45e81..e034d679b2 100644
--- a/3party/boost/boost/asio/socket_base.hpp
+++ b/3party/boost/boost/asio/socket_base.hpp
@@ -2,7 +2,7 @@
// socket_base.hpp
// ~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,9 +44,9 @@ public:
/// Shutdown both send and receive on the socket.
shutdown_both = implementation_defined
#else
- shutdown_receive = boost::asio::detail::shutdown_receive,
- shutdown_send = boost::asio::detail::shutdown_send,
- shutdown_both = boost::asio::detail::shutdown_both
+ shutdown_receive = BOOST_ASIO_OS_DEF(SHUT_RD),
+ shutdown_send = BOOST_ASIO_OS_DEF(SHUT_WR),
+ shutdown_both = BOOST_ASIO_OS_DEF(SHUT_RDWR)
#endif
};
@@ -67,13 +67,13 @@ public:
static const int message_end_of_record = implementation_defined;
#else
BOOST_ASIO_STATIC_CONSTANT(int,
- message_peek = boost::asio::detail::message_peek);
+ message_peek = BOOST_ASIO_OS_DEF(MSG_PEEK));
BOOST_ASIO_STATIC_CONSTANT(int,
- message_out_of_band = boost::asio::detail::message_out_of_band);
+ message_out_of_band = BOOST_ASIO_OS_DEF(MSG_OOB));
BOOST_ASIO_STATIC_CONSTANT(int,
- message_do_not_route = boost::asio::detail::message_do_not_route);
+ message_do_not_route = BOOST_ASIO_OS_DEF(MSG_DONTROUTE));
BOOST_ASIO_STATIC_CONSTANT(int,
- message_end_of_record = boost::asio::detail::message_end_of_record);
+ message_end_of_record = BOOST_ASIO_OS_DEF(MSG_EOR));
#endif
/// Socket option to permit sending of broadcast messages.
@@ -106,7 +106,8 @@ public:
typedef implementation_defined broadcast;
#else
typedef boost::asio::detail::socket_option::boolean<
- SOL_SOCKET, SO_BROADCAST> broadcast;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_BROADCAST)>
+ broadcast;
#endif
/// Socket option to enable socket-level debugging.
@@ -139,7 +140,7 @@ public:
typedef implementation_defined debug;
#else
typedef boost::asio::detail::socket_option::boolean<
- SOL_SOCKET, SO_DEBUG> debug;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_DEBUG)> debug;
#endif
/// Socket option to prevent routing, use local interfaces only.
@@ -172,7 +173,8 @@ public:
typedef implementation_defined do_not_route;
#else
typedef boost::asio::detail::socket_option::boolean<
- SOL_SOCKET, SO_DONTROUTE> do_not_route;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_DONTROUTE)>
+ do_not_route;
#endif
/// Socket option to send keep-alives.
@@ -205,7 +207,7 @@ public:
typedef implementation_defined keep_alive;
#else
typedef boost::asio::detail::socket_option::boolean<
- SOL_SOCKET, SO_KEEPALIVE> keep_alive;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_KEEPALIVE)> keep_alive;
#endif
/// Socket option for the send buffer size of a socket.
@@ -238,7 +240,8 @@ public:
typedef implementation_defined send_buffer_size;
#else
typedef boost::asio::detail::socket_option::integer<
- SOL_SOCKET, SO_SNDBUF> send_buffer_size;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_SNDBUF)>
+ send_buffer_size;
#endif
/// Socket option for the send low watermark.
@@ -271,7 +274,8 @@ public:
typedef implementation_defined send_low_watermark;
#else
typedef boost::asio::detail::socket_option::integer<
- SOL_SOCKET, SO_SNDLOWAT> send_low_watermark;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_SNDLOWAT)>
+ send_low_watermark;
#endif
/// Socket option for the receive buffer size of a socket.
@@ -304,7 +308,8 @@ public:
typedef implementation_defined receive_buffer_size;
#else
typedef boost::asio::detail::socket_option::integer<
- SOL_SOCKET, SO_RCVBUF> receive_buffer_size;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_RCVBUF)>
+ receive_buffer_size;
#endif
/// Socket option for the receive low watermark.
@@ -337,7 +342,8 @@ public:
typedef implementation_defined receive_low_watermark;
#else
typedef boost::asio::detail::socket_option::integer<
- SOL_SOCKET, SO_RCVLOWAT> receive_low_watermark;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_RCVLOWAT)>
+ receive_low_watermark;
#endif
/// Socket option to allow the socket to be bound to an address that is
@@ -371,7 +377,8 @@ public:
typedef implementation_defined reuse_address;
#else
typedef boost::asio::detail::socket_option::boolean<
- SOL_SOCKET, SO_REUSEADDR> reuse_address;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_REUSEADDR)>
+ reuse_address;
#endif
/// Socket option to specify whether the socket lingers on close if unsent
@@ -406,7 +413,8 @@ public:
typedef implementation_defined linger;
#else
typedef boost::asio::detail::socket_option::linger<
- SOL_SOCKET, SO_LINGER> linger;
+ BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_LINGER)>
+ linger;
#endif
/// Socket option to report aborted connections on accept.
@@ -495,7 +503,8 @@ public:
#if defined(GENERATING_DOCUMENTATION)
static const int max_connections = implementation_defined;
#else
- BOOST_ASIO_STATIC_CONSTANT(int, max_connections = SOMAXCONN);
+ BOOST_ASIO_STATIC_CONSTANT(int, max_connections
+ = BOOST_ASIO_OS_DEF(SOMAXCONN));
#endif
protected:
diff --git a/3party/boost/boost/asio/spawn.hpp b/3party/boost/boost/asio/spawn.hpp
index ee70fe5373..498e7f7774 100644
--- a/3party/boost/boost/asio/spawn.hpp
+++ b/3party/boost/boost/asio/spawn.hpp
@@ -2,7 +2,7 @@
// spawn.hpp
// ~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -16,7 +16,7 @@
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
#include <boost/asio/detail/config.hpp>
-#include <boost/coroutine/coroutine.hpp>
+#include <boost/coroutine/all.hpp>
#include <boost/asio/detail/weak_ptr.hpp>
#include <boost/asio/detail/wrapped_handler.hpp>
#include <boost/asio/io_service.hpp>
@@ -58,7 +58,7 @@ public:
*/
#if defined(GENERATING_DOCUMENTATION)
typedef implementation_defined callee_type;
-#elif defined(BOOST_COROUTINES_UNIDRECT) || defined(BOOST_COROUTINES_V2)
+#elif defined(BOOST_COROUTINES_UNIDIRECT) || defined(BOOST_COROUTINES_V2)
typedef boost::coroutines::push_coroutine<void> callee_type;
#else
typedef boost::coroutines::coroutine<void()> callee_type;
@@ -73,7 +73,7 @@ public:
*/
#if defined(GENERATING_DOCUMENTATION)
typedef implementation_defined caller_type;
-#elif defined(BOOST_COROUTINES_UNIDRECT) || defined(BOOST_COROUTINES_V2)
+#elif defined(BOOST_COROUTINES_UNIDIRECT) || defined(BOOST_COROUTINES_V2)
typedef boost::coroutines::pull_coroutine<void> caller_type;
#else
typedef boost::coroutines::coroutine<void()>::caller_type caller_type;
@@ -131,7 +131,7 @@ private:
};
#if defined(GENERATING_DOCUMENTATION)
-/// Context object the represents the currently executing coroutine.
+/// Context object that represents the currently executing coroutine.
typedef basic_yield_context<unspecified> yield_context;
#else // defined(GENERATING_DOCUMENTATION)
typedef basic_yield_context<
@@ -218,7 +218,7 @@ void spawn(basic_yield_context<Handler> ctx,
const boost::coroutines::attributes& attributes
= boost::coroutines::attributes());
-/// Start a new stackful coroutine that executes in the contex of a strand.
+/// Start a new stackful coroutine that executes in the context of a strand.
/**
* This function is used to launch a new coroutine.
*
diff --git a/3party/boost/boost/asio/ssl.hpp b/3party/boost/boost/asio/ssl.hpp
index 0339c510b5..483b23a988 100644
--- a/3party/boost/boost/asio/ssl.hpp
+++ b/3party/boost/boost/asio/ssl.hpp
@@ -2,7 +2,7 @@
// ssl.hpp
// ~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/basic_context.hpp b/3party/boost/boost/asio/ssl/basic_context.hpp
index f32b1f5389..e51d39bc85 100644
--- a/3party/boost/boost/asio/ssl/basic_context.hpp
+++ b/3party/boost/boost/asio/ssl/basic_context.hpp
@@ -2,7 +2,7 @@
// ssl/basic_context.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/context.hpp b/3party/boost/boost/asio/ssl/context.hpp
index df19bd2a67..e9d4db65d7 100644
--- a/3party/boost/boost/asio/ssl/context.hpp
+++ b/3party/boost/boost/asio/ssl/context.hpp
@@ -2,7 +2,7 @@
// ssl/context.hpp
// ~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/context_base.hpp b/3party/boost/boost/asio/ssl/context_base.hpp
index 23a35978d1..692372d4ba 100644
--- a/3party/boost/boost/asio/ssl/context_base.hpp
+++ b/3party/boost/boost/asio/ssl/context_base.hpp
@@ -2,7 +2,7 @@
// ssl/context_base.hpp
// ~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/context_service.hpp b/3party/boost/boost/asio/ssl/context_service.hpp
index 23d858c73b..3222dc52c7 100644
--- a/3party/boost/boost/asio/ssl/context_service.hpp
+++ b/3party/boost/boost/asio/ssl/context_service.hpp
@@ -2,7 +2,7 @@
// ssl/context_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/buffered_handshake_op.hpp b/3party/boost/boost/asio/ssl/detail/buffered_handshake_op.hpp
index b8892fff9a..10608b0eb9 100644
--- a/3party/boost/boost/asio/ssl/detail/buffered_handshake_op.hpp
+++ b/3party/boost/boost/asio/ssl/detail/buffered_handshake_op.hpp
@@ -2,7 +2,7 @@
// ssl/detail/buffered_handshake_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/engine.hpp b/3party/boost/boost/asio/ssl/detail/engine.hpp
index 7b4bd1a2d1..8b24a96f01 100644
--- a/3party/boost/boost/asio/ssl/detail/engine.hpp
+++ b/3party/boost/boost/asio/ssl/detail/engine.hpp
@@ -2,7 +2,7 @@
// ssl/detail/engine.hpp
// ~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/handshake_op.hpp b/3party/boost/boost/asio/ssl/detail/handshake_op.hpp
index da184925e7..b886bb52f6 100644
--- a/3party/boost/boost/asio/ssl/detail/handshake_op.hpp
+++ b/3party/boost/boost/asio/ssl/detail/handshake_op.hpp
@@ -2,7 +2,7 @@
// ssl/detail/handshake_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/impl/engine.ipp b/3party/boost/boost/asio/ssl/detail/impl/engine.ipp
index 1a3e33364f..5aa9b5a68a 100644
--- a/3party/boost/boost/asio/ssl/detail/impl/engine.ipp
+++ b/3party/boost/boost/asio/ssl/detail/impl/engine.ipp
@@ -2,7 +2,7 @@
// ssl/detail/impl/engine.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/impl/openssl_init.ipp b/3party/boost/boost/asio/ssl/detail/impl/openssl_init.ipp
index 6ec670fb23..d732fef309 100644
--- a/3party/boost/boost/asio/ssl/detail/impl/openssl_init.ipp
+++ b/3party/boost/boost/asio/ssl/detail/impl/openssl_init.ipp
@@ -3,7 +3,7 @@
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
-// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/io.hpp b/3party/boost/boost/asio/ssl/detail/io.hpp
index b64c49a10f..ef821000ba 100644
--- a/3party/boost/boost/asio/ssl/detail/io.hpp
+++ b/3party/boost/boost/asio/ssl/detail/io.hpp
@@ -2,7 +2,7 @@
// ssl/detail/io.hpp
// ~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +97,7 @@ public:
core_(core),
op_(op),
start_(0),
+ want_(engine::want_nothing),
bytes_transferred_(0),
handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
{
diff --git a/3party/boost/boost/asio/ssl/detail/openssl_init.hpp b/3party/boost/boost/asio/ssl/detail/openssl_init.hpp
index d1a3c85727..985c14d9c5 100644
--- a/3party/boost/boost/asio/ssl/detail/openssl_init.hpp
+++ b/3party/boost/boost/asio/ssl/detail/openssl_init.hpp
@@ -2,7 +2,7 @@
// ssl/detail/openssl_init.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/openssl_types.hpp b/3party/boost/boost/asio/ssl/detail/openssl_types.hpp
index 7c4d0df6d4..58b4733db6 100644
--- a/3party/boost/boost/asio/ssl/detail/openssl_types.hpp
+++ b/3party/boost/boost/asio/ssl/detail/openssl_types.hpp
@@ -2,7 +2,7 @@
// ssl/detail/openssl_types.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/password_callback.hpp b/3party/boost/boost/asio/ssl/detail/password_callback.hpp
index 7d4f17f7ea..d64bf3a5be 100644
--- a/3party/boost/boost/asio/ssl/detail/password_callback.hpp
+++ b/3party/boost/boost/asio/ssl/detail/password_callback.hpp
@@ -2,7 +2,7 @@
// ssl/detail/password_callback.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/read_op.hpp b/3party/boost/boost/asio/ssl/detail/read_op.hpp
index c90c69a82c..e0a0ad0ee8 100644
--- a/3party/boost/boost/asio/ssl/detail/read_op.hpp
+++ b/3party/boost/boost/asio/ssl/detail/read_op.hpp
@@ -2,7 +2,7 @@
// ssl/detail/read_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/shutdown_op.hpp b/3party/boost/boost/asio/ssl/detail/shutdown_op.hpp
index 3781f0998e..6a716f7090 100644
--- a/3party/boost/boost/asio/ssl/detail/shutdown_op.hpp
+++ b/3party/boost/boost/asio/ssl/detail/shutdown_op.hpp
@@ -2,7 +2,7 @@
// ssl/detail/shutdown_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/stream_core.hpp b/3party/boost/boost/asio/ssl/detail/stream_core.hpp
index fdd4715b52..663e258c03 100644
--- a/3party/boost/boost/asio/ssl/detail/stream_core.hpp
+++ b/3party/boost/boost/asio/ssl/detail/stream_core.hpp
@@ -2,7 +2,7 @@
// ssl/detail/stream_core.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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 @@ struct stream_core
// Helper function for obtaining a time value that always fires.
static boost::asio::steady_timer::time_point neg_infin()
{
- return boost::asio::steady_timer::time_point::min();
+ return (boost::asio::steady_timer::time_point::min)();
}
// Helper function for obtaining a time value that never fires.
static boost::asio::steady_timer::time_point pos_infin()
{
- return boost::asio::steady_timer::time_point::max();
+ return (boost::asio::steady_timer::time_point::max)();
}
#endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
diff --git a/3party/boost/boost/asio/ssl/detail/verify_callback.hpp b/3party/boost/boost/asio/ssl/detail/verify_callback.hpp
index 5ba2c7bcb6..eb40f488f4 100644
--- a/3party/boost/boost/asio/ssl/detail/verify_callback.hpp
+++ b/3party/boost/boost/asio/ssl/detail/verify_callback.hpp
@@ -2,7 +2,7 @@
// ssl/detail/verify_callback.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/detail/write_op.hpp b/3party/boost/boost/asio/ssl/detail/write_op.hpp
index 3c37dedb42..24020983df 100644
--- a/3party/boost/boost/asio/ssl/detail/write_op.hpp
+++ b/3party/boost/boost/asio/ssl/detail/write_op.hpp
@@ -2,7 +2,7 @@
// ssl/detail/write_op.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/error.hpp b/3party/boost/boost/asio/ssl/error.hpp
index 3a4b135826..a308fd2626 100644
--- a/3party/boost/boost/asio/ssl/error.hpp
+++ b/3party/boost/boost/asio/ssl/error.hpp
@@ -2,7 +2,7 @@
// ssl/error.hpp
// ~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/impl/context.hpp b/3party/boost/boost/asio/ssl/impl/context.hpp
index 07c815813f..345bc5b2ca 100644
--- a/3party/boost/boost/asio/ssl/impl/context.hpp
+++ b/3party/boost/boost/asio/ssl/impl/context.hpp
@@ -3,7 +3,7 @@
// ~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
-// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/impl/context.ipp b/3party/boost/boost/asio/ssl/impl/context.ipp
index 3f8dae138a..06c2743fdb 100644
--- a/3party/boost/boost/asio/ssl/impl/context.ipp
+++ b/3party/boost/boost/asio/ssl/impl/context.ipp
@@ -3,7 +3,7 @@
// ~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
-// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -236,19 +236,27 @@ void context::clear_options(context::options o)
boost::system::error_code context::clear_options(
context::options o, boost::system::error_code& ec)
{
-#if !defined(SSL_OP_NO_COMPRESSION)
+#if (OPENSSL_VERSION_NUMBER >= 0x009080DFL) \
+ && (OPENSSL_VERSION_NUMBER != 0x00909000L)
+# if !defined(SSL_OP_NO_COMPRESSION)
if ((o & context::no_compression) != 0)
{
-#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+# if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
handle_->comp_methods = SSL_COMP_get_compression_methods();
-#endif // (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+# endif // (OPENSSL_VERSION_NUMBER >= 0x00908000L)
o ^= context::no_compression;
}
-#endif // !defined(SSL_OP_NO_COMPRESSION)
+# endif // !defined(SSL_OP_NO_COMPRESSION)
::SSL_CTX_clear_options(handle_, o);
ec = boost::system::error_code();
+#else // (OPENSSL_VERSION_NUMBER >= 0x009080DFL)
+ // && (OPENSSL_VERSION_NUMBER != 0x00909000L)
+ (void)o;
+ ec = boost::asio::error::operation_not_supported;
+#endif // (OPENSSL_VERSION_NUMBER >= 0x009080DFL)
+ // && (OPENSSL_VERSION_NUMBER != 0x00909000L)
return ec;
}
@@ -428,7 +436,8 @@ boost::system::error_code context::use_certificate(
if (format == context_base::asn1)
{
- if (::SSL_CTX_use_certificate_ASN1(handle_, buffer_size(certificate),
+ if (::SSL_CTX_use_certificate_ASN1(handle_,
+ static_cast<int>(buffer_size(certificate)),
buffer_cast<const unsigned char*>(certificate)) == 1)
{
ec = boost::system::error_code();
@@ -929,7 +938,7 @@ BIO* context::make_buffer_bio(const const_buffer& b)
{
return ::BIO_new_mem_buf(
const_cast<void*>(buffer_cast<const void*>(b)),
- buffer_size(b));
+ static_cast<int>(buffer_size(b)));
}
#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
diff --git a/3party/boost/boost/asio/ssl/impl/error.ipp b/3party/boost/boost/asio/ssl/impl/error.ipp
index e411a4d3d7..bacfc7bbf1 100644
--- a/3party/boost/boost/asio/ssl/impl/error.ipp
+++ b/3party/boost/boost/asio/ssl/impl/error.ipp
@@ -2,7 +2,7 @@
// ssl/impl/error.ipp
// ~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/impl/rfc2818_verification.ipp b/3party/boost/boost/asio/ssl/impl/rfc2818_verification.ipp
index 769762e985..e4f28ef946 100644
--- a/3party/boost/boost/asio/ssl/impl/rfc2818_verification.ipp
+++ b/3party/boost/boost/asio/ssl/impl/rfc2818_verification.ipp
@@ -2,7 +2,7 @@
// ssl/impl/rfc2818_verification.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/impl/src.hpp b/3party/boost/boost/asio/ssl/impl/src.hpp
index a8db0022e6..bc15b4e238 100644
--- a/3party/boost/boost/asio/ssl/impl/src.hpp
+++ b/3party/boost/boost/asio/ssl/impl/src.hpp
@@ -2,7 +2,7 @@
// impl/ssl/src.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/old/basic_context.hpp b/3party/boost/boost/asio/ssl/old/basic_context.hpp
index 8995b28bca..b0b4b135d9 100644
--- a/3party/boost/boost/asio/ssl/old/basic_context.hpp
+++ b/3party/boost/boost/asio/ssl/old/basic_context.hpp
@@ -3,7 +3,7 @@
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
-// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/old/context_service.hpp b/3party/boost/boost/asio/ssl/old/context_service.hpp
index 6d0b1eb34b..0912b55f2e 100644
--- a/3party/boost/boost/asio/ssl/old/context_service.hpp
+++ b/3party/boost/boost/asio/ssl/old/context_service.hpp
@@ -3,7 +3,7 @@
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
-// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/old/detail/openssl_context_service.hpp b/3party/boost/boost/asio/ssl/old/detail/openssl_context_service.hpp
index 0eb45ed1d2..a6e25c9d96 100644
--- a/3party/boost/boost/asio/ssl/old/detail/openssl_context_service.hpp
+++ b/3party/boost/boost/asio/ssl/old/detail/openssl_context_service.hpp
@@ -3,7 +3,7 @@
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
-// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/old/detail/openssl_stream_service.hpp b/3party/boost/boost/asio/ssl/old/detail/openssl_stream_service.hpp
index 24e09fd615..ab8f8cf439 100644
--- a/3party/boost/boost/asio/ssl/old/detail/openssl_stream_service.hpp
+++ b/3party/boost/boost/asio/ssl/old/detail/openssl_stream_service.hpp
@@ -3,7 +3,7 @@
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
-// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/old/stream.hpp b/3party/boost/boost/asio/ssl/old/stream.hpp
index b9af97b92c..3bfe56df4a 100644
--- a/3party/boost/boost/asio/ssl/old/stream.hpp
+++ b/3party/boost/boost/asio/ssl/old/stream.hpp
@@ -3,7 +3,7 @@
// ~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
-// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/old/stream_service.hpp b/3party/boost/boost/asio/ssl/old/stream_service.hpp
index c9456192cd..3acecc5d5a 100644
--- a/3party/boost/boost/asio/ssl/old/stream_service.hpp
+++ b/3party/boost/boost/asio/ssl/old/stream_service.hpp
@@ -3,7 +3,7 @@
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
-// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/rfc2818_verification.hpp b/3party/boost/boost/asio/ssl/rfc2818_verification.hpp
index c793034839..f2687b9461 100644
--- a/3party/boost/boost/asio/ssl/rfc2818_verification.hpp
+++ b/3party/boost/boost/asio/ssl/rfc2818_verification.hpp
@@ -2,7 +2,7 @@
// ssl/rfc2818_verification.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/stream.hpp b/3party/boost/boost/asio/ssl/stream.hpp
index f73fc52981..3eafd16e9c 100644
--- a/3party/boost/boost/asio/ssl/stream.hpp
+++ b/3party/boost/boost/asio/ssl/stream.hpp
@@ -2,7 +2,7 @@
// ssl/stream.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/stream_base.hpp b/3party/boost/boost/asio/ssl/stream_base.hpp
index 594ba277e1..06d7849530 100644
--- a/3party/boost/boost/asio/ssl/stream_base.hpp
+++ b/3party/boost/boost/asio/ssl/stream_base.hpp
@@ -2,7 +2,7 @@
// ssl/stream_base.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/stream_service.hpp b/3party/boost/boost/asio/ssl/stream_service.hpp
index a48d9688c3..9fcb48e82c 100644
--- a/3party/boost/boost/asio/ssl/stream_service.hpp
+++ b/3party/boost/boost/asio/ssl/stream_service.hpp
@@ -2,7 +2,7 @@
// ssl/stream_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/verify_context.hpp b/3party/boost/boost/asio/ssl/verify_context.hpp
index 1c2b02f3b9..ddd3fec5da 100644
--- a/3party/boost/boost/asio/ssl/verify_context.hpp
+++ b/3party/boost/boost/asio/ssl/verify_context.hpp
@@ -2,7 +2,7 @@
// ssl/verify_context.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/ssl/verify_mode.hpp b/3party/boost/boost/asio/ssl/verify_mode.hpp
index 87e3932b09..4d4a1ed9bf 100644
--- a/3party/boost/boost/asio/ssl/verify_mode.hpp
+++ b/3party/boost/boost/asio/ssl/verify_mode.hpp
@@ -2,7 +2,7 @@
// ssl/verify_mode.hpp
// ~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/steady_timer.hpp b/3party/boost/boost/asio/steady_timer.hpp
index 1ec210878b..fd32529110 100644
--- a/3party/boost/boost/asio/steady_timer.hpp
+++ b/3party/boost/boost/asio/steady_timer.hpp
@@ -2,7 +2,7 @@
// steady_timer.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/strand.hpp b/3party/boost/boost/asio/strand.hpp
index 10a466b6e9..f6b62fb6f3 100644
--- a/3party/boost/boost/asio/strand.hpp
+++ b/3party/boost/boost/asio/strand.hpp
@@ -2,7 +2,7 @@
// strand.hpp
// ~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,6 +73,9 @@ namespace asio {
* happens-before the other. Therefore none of the above conditions are met and
* no ordering guarantee is made.
*
+ * @note The implementation makes no guarantee that handlers posted or
+ * dispatched through different @c strand objects will be invoked concurrently.
+ *
* @par Thread Safety
* @e Distinct @e objects: Safe.@n
* @e Shared @e objects: Safe.
diff --git a/3party/boost/boost/asio/stream_socket_service.hpp b/3party/boost/boost/asio/stream_socket_service.hpp
index 9145629977..f484d7d0ac 100644
--- a/3party/boost/boost/asio/stream_socket_service.hpp
+++ b/3party/boost/boost/asio/stream_socket_service.hpp
@@ -2,7 +2,7 @@
// stream_socket_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +22,9 @@
#include <boost/asio/error.hpp>
#include <boost/asio/io_service.hpp>
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/winrt_ssocket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
# include <boost/asio/detail/win_iocp_socket_service.hpp>
#else
# include <boost/asio/detail/reactive_socket_service.hpp>
@@ -56,7 +58,9 @@ public:
private:
// The type of the platform-specific implementation.
-#if defined(BOOST_ASIO_HAS_IOCP)
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+ typedef detail::winrt_ssocket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
#else
typedef detail::reactive_socket_service<Protocol> service_impl_type;
@@ -138,7 +142,7 @@ public:
boost::system::error_code open(implementation_type& impl,
const protocol_type& protocol, boost::system::error_code& ec)
{
- if (protocol.type() == SOCK_STREAM)
+ if (protocol.type() == BOOST_ASIO_OS_DEF(SOCK_STREAM))
service_impl_.open(impl, protocol, ec);
else
ec = boost::asio::error::invalid_argument;
diff --git a/3party/boost/boost/asio/streambuf.hpp b/3party/boost/boost/asio/streambuf.hpp
index 176a460f74..7dbbb49f5a 100644
--- a/3party/boost/boost/asio/streambuf.hpp
+++ b/3party/boost/boost/asio/streambuf.hpp
@@ -2,7 +2,7 @@
// streambuf.hpp
// ~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/system_timer.hpp b/3party/boost/boost/asio/system_timer.hpp
index 03a4eb7c57..c7ade7cb8f 100644
--- a/3party/boost/boost/asio/system_timer.hpp
+++ b/3party/boost/boost/asio/system_timer.hpp
@@ -2,7 +2,7 @@
// system_timer.hpp
// ~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/time_traits.hpp b/3party/boost/boost/asio/time_traits.hpp
index d45871028a..a5605c14d9 100644
--- a/3party/boost/boost/asio/time_traits.hpp
+++ b/3party/boost/boost/asio/time_traits.hpp
@@ -2,7 +2,7 @@
// time_traits.hpp
// ~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/unyield.hpp b/3party/boost/boost/asio/unyield.hpp
index de1d7136ab..0be57acc9a 100644
--- a/3party/boost/boost/asio/unyield.hpp
+++ b/3party/boost/boost/asio/unyield.hpp
@@ -2,7 +2,7 @@
// unyield.hpp
// ~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/use_future.hpp b/3party/boost/boost/asio/use_future.hpp
index 5bf7177097..c643c8d462 100644
--- a/3party/boost/boost/asio/use_future.hpp
+++ b/3party/boost/boost/asio/use_future.hpp
@@ -2,7 +2,7 @@
// use_future.hpp
// ~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -47,7 +47,7 @@ public:
typedef Allocator allocator_type;
/// Construct using default-constructed allocator.
- constexpr use_future_t()
+ BOOST_ASIO_CONSTEXPR use_future_t()
{
}
@@ -78,7 +78,11 @@ private:
/**
* See the documentation for boost::asio::use_future_t for a usage example.
*/
+#if defined(BOOST_ASIO_HAS_CONSTEXPR) || defined(GENERATING_DOCUMENTATION)
constexpr use_future_t<> use_future;
+#elif defined(BOOST_ASIO_MSVC)
+__declspec(selectany) use_future_t<> use_future;
+#endif
} // namespace asio
} // namespace boost
diff --git a/3party/boost/boost/asio/version.hpp b/3party/boost/boost/asio/version.hpp
index f530cff063..deeab10891 100644
--- a/3party/boost/boost/asio/version.hpp
+++ b/3party/boost/boost/asio/version.hpp
@@ -2,7 +2,7 @@
// version.hpp
// ~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -18,6 +18,6 @@
// BOOST_ASIO_VERSION % 100 is the sub-minor version
// BOOST_ASIO_VERSION / 100 % 1000 is the minor version
// BOOST_ASIO_VERSION / 100000 is the major version
-#define BOOST_ASIO_VERSION 101000 // 1.10.0
+#define BOOST_ASIO_VERSION 101004 // 1.10.4
#endif // BOOST_ASIO_VERSION_HPP
diff --git a/3party/boost/boost/asio/wait_traits.hpp b/3party/boost/boost/asio/wait_traits.hpp
index 3a7164db6c..e875e5c24a 100644
--- a/3party/boost/boost/asio/wait_traits.hpp
+++ b/3party/boost/boost/asio/wait_traits.hpp
@@ -2,7 +2,7 @@
// wait_traits.hpp
// ~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/waitable_timer_service.hpp b/3party/boost/boost/asio/waitable_timer_service.hpp
index 301d406b76..0832bf10c2 100644
--- a/3party/boost/boost/asio/waitable_timer_service.hpp
+++ b/3party/boost/boost/asio/waitable_timer_service.hpp
@@ -2,7 +2,7 @@
// waitable_timer_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/windows/basic_handle.hpp b/3party/boost/boost/asio/windows/basic_handle.hpp
index 593482786b..924945c7db 100644
--- a/3party/boost/boost/asio/windows/basic_handle.hpp
+++ b/3party/boost/boost/asio/windows/basic_handle.hpp
@@ -2,7 +2,7 @@
// windows/basic_handle.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/windows/basic_object_handle.hpp b/3party/boost/boost/asio/windows/basic_object_handle.hpp
index 4bfa3b88b0..effa74af4b 100644
--- a/3party/boost/boost/asio/windows/basic_object_handle.hpp
+++ b/3party/boost/boost/asio/windows/basic_object_handle.hpp
@@ -2,7 +2,7 @@
// windows/basic_object_handle.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2011 Boris Schaeling (boris@highscore.de)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/windows/basic_random_access_handle.hpp b/3party/boost/boost/asio/windows/basic_random_access_handle.hpp
index a673fc5211..22e4390d49 100644
--- a/3party/boost/boost/asio/windows/basic_random_access_handle.hpp
+++ b/3party/boost/boost/asio/windows/basic_random_access_handle.hpp
@@ -2,7 +2,7 @@
// windows/basic_random_access_handle.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/windows/basic_stream_handle.hpp b/3party/boost/boost/asio/windows/basic_stream_handle.hpp
index 3b517c4cd5..479707acdc 100644
--- a/3party/boost/boost/asio/windows/basic_stream_handle.hpp
+++ b/3party/boost/boost/asio/windows/basic_stream_handle.hpp
@@ -2,7 +2,7 @@
// windows/basic_stream_handle.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/windows/object_handle.hpp b/3party/boost/boost/asio/windows/object_handle.hpp
index c85401bcba..307963e578 100644
--- a/3party/boost/boost/asio/windows/object_handle.hpp
+++ b/3party/boost/boost/asio/windows/object_handle.hpp
@@ -2,7 +2,7 @@
// windows/object_handle.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2011 Boris Schaeling (boris@highscore.de)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/windows/object_handle_service.hpp b/3party/boost/boost/asio/windows/object_handle_service.hpp
index 020ba71a21..dd33277eed 100644
--- a/3party/boost/boost/asio/windows/object_handle_service.hpp
+++ b/3party/boost/boost/asio/windows/object_handle_service.hpp
@@ -2,7 +2,7 @@
// windows/object_handle_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2011 Boris Schaeling (boris@highscore.de)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/asio/windows/overlapped_ptr.hpp b/3party/boost/boost/asio/windows/overlapped_ptr.hpp
index 48ec3f794a..4c6d4abe58 100644
--- a/3party/boost/boost/asio/windows/overlapped_ptr.hpp
+++ b/3party/boost/boost/asio/windows/overlapped_ptr.hpp
@@ -2,7 +2,7 @@
// windows/overlapped_ptr.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/windows/random_access_handle.hpp b/3party/boost/boost/asio/windows/random_access_handle.hpp
index 7124b1fc7e..e7dbfacd1a 100644
--- a/3party/boost/boost/asio/windows/random_access_handle.hpp
+++ b/3party/boost/boost/asio/windows/random_access_handle.hpp
@@ -2,7 +2,7 @@
// windows/random_access_handle.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/windows/random_access_handle_service.hpp b/3party/boost/boost/asio/windows/random_access_handle_service.hpp
index 8d33fc6ab8..bc013d90c1 100644
--- a/3party/boost/boost/asio/windows/random_access_handle_service.hpp
+++ b/3party/boost/boost/asio/windows/random_access_handle_service.hpp
@@ -2,7 +2,7 @@
// windows/random_access_handle_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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,7 +21,6 @@
|| defined(GENERATING_DOCUMENTATION)
#include <cstddef>
-#include <boost/config.hpp>
#include <boost/asio/async_result.hpp>
#include <boost/asio/detail/cstdint.hpp>
#include <boost/asio/detail/win_iocp_handle_service.hpp>
diff --git a/3party/boost/boost/asio/windows/stream_handle.hpp b/3party/boost/boost/asio/windows/stream_handle.hpp
index 365a1ff5a8..dad6b74b32 100644
--- a/3party/boost/boost/asio/windows/stream_handle.hpp
+++ b/3party/boost/boost/asio/windows/stream_handle.hpp
@@ -2,7 +2,7 @@
// windows/stream_handle.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/windows/stream_handle_service.hpp b/3party/boost/boost/asio/windows/stream_handle_service.hpp
index 8ab900deb0..87c3a2091e 100644
--- a/3party/boost/boost/asio/windows/stream_handle_service.hpp
+++ b/3party/boost/boost/asio/windows/stream_handle_service.hpp
@@ -2,7 +2,7 @@
// windows/stream_handle_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/write.hpp b/3party/boost/boost/asio/write.hpp
index 6edd4fe9e0..fdde975fdb 100644
--- a/3party/boost/boost/asio/write.hpp
+++ b/3party/boost/boost/asio/write.hpp
@@ -2,7 +2,7 @@
// write.hpp
// ~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/asio/write_at.hpp b/3party/boost/boost/asio/write_at.hpp
index 2edd05a2be..6df000ca03 100644
--- a/3party/boost/boost/asio/write_at.hpp
+++ b/3party/boost/boost/asio/write_at.hpp
@@ -2,7 +2,7 @@
// write_at.hpp
// ~~~~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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)
@@ -407,7 +407,12 @@ std::size_t write_at(SyncRandomAccessWriteDevice& d, uint64_t offset,
* @li An error occurred.
*
* This operation is implemented in terms of zero or more calls to the device's
- * async_write_some_at function.
+ * async_write_some_at function, and is known as a <em>composed operation</em>.
+ * The program must ensure that the device performs no <em>overlapping</em>
+ * write operations (such as async_write_at, the device's async_write_some_at
+ * function, or any other composed operations that perform writes) until this
+ * operation completes. Operations are overlapping if the regions defined by
+ * their offsets, and the numbers of bytes to write, intersect.
*
* @param d The device to which the data is to be written. The type must support
* the AsyncRandomAccessWriteDevice concept.
@@ -466,7 +471,12 @@ async_write_at(AsyncRandomAccessWriteDevice& d, uint64_t offset,
* @li The completion_condition function object returns 0.
*
* This operation is implemented in terms of zero or more calls to the device's
- * async_write_some_at function.
+ * async_write_some_at function, and is known as a <em>composed operation</em>.
+ * The program must ensure that the device performs no <em>overlapping</em>
+ * write operations (such as async_write_at, the device's async_write_some_at
+ * function, or any other composed operations that perform writes) until this
+ * operation completes. Operations are overlapping if the regions defined by
+ * their offsets, and the numbers of bytes to write, intersect.
*
* @param d The device to which the data is to be written. The type must support
* the AsyncRandomAccessWriteDevice concept.
@@ -542,7 +552,12 @@ async_write_at(AsyncRandomAccessWriteDevice& d,
* @li An error occurred.
*
* This operation is implemented in terms of zero or more calls to the device's
- * async_write_some_at function.
+ * async_write_some_at function, and is known as a <em>composed operation</em>.
+ * The program must ensure that the device performs no <em>overlapping</em>
+ * write operations (such as async_write_at, the device's async_write_some_at
+ * function, or any other composed operations that perform writes) until this
+ * operation completes. Operations are overlapping if the regions defined by
+ * their offsets, and the numbers of bytes to write, intersect.
*
* @param d The device to which the data is to be written. The type must support
* the AsyncRandomAccessWriteDevice concept.
@@ -589,7 +604,12 @@ async_write_at(AsyncRandomAccessWriteDevice& d, uint64_t offset,
* @li The completion_condition function object returns 0.
*
* This operation is implemented in terms of zero or more calls to the device's
- * async_write_some_at function.
+ * async_write_some_at function, and is known as a <em>composed operation</em>.
+ * The program must ensure that the device performs no <em>overlapping</em>
+ * write operations (such as async_write_at, the device's async_write_some_at
+ * function, or any other composed operations that perform writes) until this
+ * operation completes. Operations are overlapping if the regions defined by
+ * their offsets, and the numbers of bytes to write, intersect.
*
* @param d The device to which the data is to be written. The type must support
* the AsyncRandomAccessWriteDevice concept.
diff --git a/3party/boost/boost/asio/yield.hpp b/3party/boost/boost/asio/yield.hpp
index a82a25d77d..beda983eb0 100644
--- a/3party/boost/boost/asio/yield.hpp
+++ b/3party/boost/boost/asio/yield.hpp
@@ -2,7 +2,7 @@
// yield.hpp
// ~~~~~~~~~
//
-// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// 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/assert.hpp b/3party/boost/boost/assert.hpp
index a2335058f0..1713d9bb1d 100644
--- a/3party/boost/boost/assert.hpp
+++ b/3party/boost/boost/assert.hpp
@@ -2,18 +2,19 @@
// boost/assert.hpp - BOOST_ASSERT(expr)
// BOOST_ASSERT_MSG(expr, msg)
// BOOST_VERIFY(expr)
+// BOOST_VERIFY_MSG(expr, msg)
//
// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
-// Copyright (c) 2007 Peter Dimov
+// Copyright (c) 2007, 2014 Peter Dimov
// Copyright (c) Beman Dawes 2011
//
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
//
// Note: There are no include guards. This is intentional.
//
-// See http://www.boost.org/libs/utility/assert.html for documentation.
+// See http://www.boost.org/libs/assert/assert.html for documentation.
//
//
@@ -22,115 +23,56 @@
// boostinspect:naassert_macro
//
-//--------------------------------------------------------------------------------------//
-// BOOST_ASSERT //
-//--------------------------------------------------------------------------------------//
+//
+// BOOST_ASSERT, BOOST_ASSERT_MSG
+//
#undef BOOST_ASSERT
+#undef BOOST_ASSERT_MSG
-#if defined(BOOST_DISABLE_ASSERTS)
+#if defined(BOOST_DISABLE_ASSERTS) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && defined(NDEBUG) )
# define BOOST_ASSERT(expr) ((void)0)
+# define BOOST_ASSERT_MSG(expr, msg) ((void)0)
-#elif defined(BOOST_ENABLE_ASSERT_HANDLER)
+#elif defined(BOOST_ENABLE_ASSERT_HANDLER) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && !defined(NDEBUG) )
+#include <boost/config.hpp> // for BOOST_LIKELY
#include <boost/current_function.hpp>
namespace boost
{
- void assertion_failed(char const * expr,
- char const * function, char const * file, long line); // user defined
+ void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined
+ void assertion_failed_msg(char const * expr, char const * msg, char const * function, char const * file, long line); // user defined
} // namespace boost
-#define BOOST_ASSERT(expr) ((expr) \
- ? ((void)0) \
- : ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
+#define BOOST_ASSERT(expr) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
+#define BOOST_ASSERT_MSG(expr, msg) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
#else
-# include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same
-# define BOOST_ASSERT(expr) assert(expr)
-#endif
-
-//--------------------------------------------------------------------------------------//
-// BOOST_ASSERT_MSG //
-//--------------------------------------------------------------------------------------//
-
-# undef BOOST_ASSERT_MSG
-
-#if defined(BOOST_DISABLE_ASSERTS) || defined(NDEBUG)
- #define BOOST_ASSERT_MSG(expr, msg) ((void)0)
-
-#elif defined(BOOST_ENABLE_ASSERT_HANDLER)
-
- #include <boost/current_function.hpp>
-
- namespace boost
- {
- void assertion_failed_msg(char const * expr, char const * msg,
- char const * function, char const * file, long line); // user defined
- } // namespace boost
+# include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same
- #define BOOST_ASSERT_MSG(expr, msg) ((expr) \
- ? ((void)0) \
- : ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
+# define BOOST_ASSERT(expr) assert(expr)
+# define BOOST_ASSERT_MSG(expr, msg) assert((expr)&&(msg))
-#else
- #ifndef BOOST_ASSERT_HPP
- #define BOOST_ASSERT_HPP
- #include <cstdlib>
- #include <iostream>
- #include <boost/current_function.hpp>
-
- // IDE's like Visual Studio perform better if output goes to std::cout or
- // some other stream, so allow user to configure output stream:
- #ifndef BOOST_ASSERT_MSG_OSTREAM
- # define BOOST_ASSERT_MSG_OSTREAM std::cerr
- #endif
-
- namespace boost
- {
- namespace assertion
- {
- namespace detail
- {
- inline void assertion_failed_msg(char const * expr, char const * msg, char const * function,
- char const * file, long line)
- {
- BOOST_ASSERT_MSG_OSTREAM
- << "***** Internal Program Error - assertion (" << expr << ") failed in "
- << function << ":\n"
- << file << '(' << line << "): " << msg << std::endl;
- #ifdef UNDER_CE
- // The Windows CE CRT library does not have abort() so use exit(-1) instead.
- std::exit(-1);
- #else
- std::abort();
- #endif
- }
- } // detail
- } // assertion
- } // detail
- #endif
-
- #define BOOST_ASSERT_MSG(expr, msg) ((expr) \
- ? ((void)0) \
- : ::boost::assertion::detail::assertion_failed_msg(#expr, msg, \
- BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
#endif
-//--------------------------------------------------------------------------------------//
-// BOOST_VERIFY //
-//--------------------------------------------------------------------------------------//
+//
+// BOOST_VERIFY, BOOST_VERIFY_MSG
+//
#undef BOOST_VERIFY
+#undef BOOST_VERIFY_MSG
#if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) )
# define BOOST_VERIFY(expr) ((void)(expr))
+# define BOOST_VERIFY_MSG(expr, msg) ((void)(expr))
#else
# define BOOST_VERIFY(expr) BOOST_ASSERT(expr)
+# define BOOST_VERIFY_MSG(expr, msg) BOOST_ASSERT_MSG(expr,msg)
#endif
diff --git a/3party/boost/boost/assign.hpp b/3party/boost/boost/assign.hpp
index d74a56601c..fffb7ecee1 100644
--- a/3party/boost/boost/assign.hpp
+++ b/3party/boost/boost/assign.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_ASSIGN_HPP
#define BOOST_ASSIGN_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/assignment_exception.hpp b/3party/boost/boost/assign/assignment_exception.hpp
index 5079c3a82d..96ea41741c 100644
--- a/3party/boost/boost/assign/assignment_exception.hpp
+++ b/3party/boost/boost/assign/assignment_exception.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_ASSIGN_ASSIGNMENT_EXCEPTION_HPP
#define BOOST_ASSIGN_ASSIGNMENT_EXCEPTION_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/list_inserter.hpp b/3party/boost/boost/assign/list_inserter.hpp
index e67a3c5f5a..46d572c51d 100644
--- a/3party/boost/boost/assign/list_inserter.hpp
+++ b/3party/boost/boost/assign/list_inserter.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_ASSIGN_LIST_INSERTER_HPP
#define BOOST_ASSIGN_LIST_INSERTER_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/list_of.hpp b/3party/boost/boost/assign/list_of.hpp
index 6da444bf5e..5b995fdda6 100644
--- a/3party/boost/boost/assign/list_of.hpp
+++ b/3party/boost/boost/assign/list_of.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_ASSIGN_LIST_OF_HPP
#define BOOST_ASSIGN_LIST_OF_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/ptr_list_inserter.hpp b/3party/boost/boost/assign/ptr_list_inserter.hpp
index c2ac3d8bcb..20741f2c9c 100644
--- a/3party/boost/boost/assign/ptr_list_inserter.hpp
+++ b/3party/boost/boost/assign/ptr_list_inserter.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_ASSIGN_PTR_LIST_INSERTER_HPP
#define BOOST_ASSIGN_PTR_LIST_INSERTER_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/ptr_list_of.hpp b/3party/boost/boost/assign/ptr_list_of.hpp
index 3055ce791b..0ea6cd208b 100644
--- a/3party/boost/boost/assign/ptr_list_of.hpp
+++ b/3party/boost/boost/assign/ptr_list_of.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_ASSIGN_PTR_LIST_OF_HPP
#define BOOST_ASSIGN_PTR_LIST_OF_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/ptr_map_inserter.hpp b/3party/boost/boost/assign/ptr_map_inserter.hpp
index c45aeb8351..fb180f28fd 100644
--- a/3party/boost/boost/assign/ptr_map_inserter.hpp
+++ b/3party/boost/boost/assign/ptr_map_inserter.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_ASSIGN_PTR_CONTAINER_PTR_MAP_INSERTER_HPP
#define BOOST_ASSIGN_PTR_CONTAINER_PTR_MAP_INSERTER_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/std.hpp b/3party/boost/boost/assign/std.hpp
index 2cdec96f6e..302ff6a0b5 100644
--- a/3party/boost/boost/assign/std.hpp
+++ b/3party/boost/boost/assign/std.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_ASSIGN_STD_HPP
#define BOOST_ASSIGN_STD_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/std/deque.hpp b/3party/boost/boost/assign/std/deque.hpp
index 3546a0fc78..f808b70ca3 100644
--- a/3party/boost/boost/assign/std/deque.hpp
+++ b/3party/boost/boost/assign/std/deque.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_ASSIGN_STD_DEQUE_HPP
#define BOOST_ASSIGN_STD_DEQUE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/std/list.hpp b/3party/boost/boost/assign/std/list.hpp
index 2404b04663..439006da59 100644
--- a/3party/boost/boost/assign/std/list.hpp
+++ b/3party/boost/boost/assign/std/list.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_ASSIGN_STD_LIST_HPP
#define BOOST_ASSIGN_STD_LIST_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/std/map.hpp b/3party/boost/boost/assign/std/map.hpp
index 4937492c86..2476a1d96b 100644
--- a/3party/boost/boost/assign/std/map.hpp
+++ b/3party/boost/boost/assign/std/map.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_ASSIGN_STD_MAP_HPP
#define BOOST_ASSIGN_STD_MAP_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/std/queue.hpp b/3party/boost/boost/assign/std/queue.hpp
index a9dea3955d..d6023e8a12 100644
--- a/3party/boost/boost/assign/std/queue.hpp
+++ b/3party/boost/boost/assign/std/queue.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_ASSIGN_STD_QUEUE_HPP
#define BOOST_ASSIGN_STD_QUEUE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/std/set.hpp b/3party/boost/boost/assign/std/set.hpp
index 9ad79ef73a..e4d5ee2f86 100644
--- a/3party/boost/boost/assign/std/set.hpp
+++ b/3party/boost/boost/assign/std/set.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_ASSIGN_STD_SET_HPP
#define BOOST_ASSIGN_STD_SET_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/std/slist.hpp b/3party/boost/boost/assign/std/slist.hpp
index 6e20f78a82..0704b238ce 100644
--- a/3party/boost/boost/assign/std/slist.hpp
+++ b/3party/boost/boost/assign/std/slist.hpp
@@ -14,7 +14,7 @@
#include <boost/config.hpp>
#ifdef BOOST_HAS_SLIST
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/std/stack.hpp b/3party/boost/boost/assign/std/stack.hpp
index 89f58d9614..e528f169b1 100644
--- a/3party/boost/boost/assign/std/stack.hpp
+++ b/3party/boost/boost/assign/std/stack.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_ASSIGN_STD_STACK_HPP
#define BOOST_ASSIGN_STD_STACK_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/assign/std/vector.hpp b/3party/boost/boost/assign/std/vector.hpp
index e9f3b7981e..8861de9b43 100644
--- a/3party/boost/boost/assign/std/vector.hpp
+++ b/3party/boost/boost/assign/std/vector.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_ASSIGN_STD_VECTOR_HPP
#define BOOST_ASSIGN_STD_VECTOR_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/atomic.hpp b/3party/boost/boost/atomic.hpp
index 0f5883c387..cc28b1ab5e 100644
--- a/3party/boost/boost/atomic.hpp
+++ b/3party/boost/boost/atomic.hpp
@@ -11,7 +11,7 @@
#include <boost/atomic/atomic.hpp>
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/atomic/atomic.hpp b/3party/boost/boost/atomic/atomic.hpp
index 9e1ecbd825..8b0bdd11c1 100644
--- a/3party/boost/boost/atomic/atomic.hpp
+++ b/3party/boost/boost/atomic/atomic.hpp
@@ -1,241 +1,93 @@
-#ifndef BOOST_ATOMIC_ATOMIC_HPP
-#define BOOST_ATOMIC_ATOMIC_HPP
-
-// Copyright (c) 2011 Helge Bahmann
-// Copyright (c) 2013 Tim Blechmann
-//
-// 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 <cstddef>
-#include <boost/cstdint.hpp>
-
-#include <boost/memory_order.hpp>
-
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/platform.hpp>
-#include <boost/atomic/detail/type-classification.hpp>
-#include <boost/type_traits/is_signed.hpp>
-#if defined(BOOST_MSVC) && BOOST_MSVC < 1400
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/mpl/and.hpp>
-#endif
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
+/*
+ * 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)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/atomic.hpp
+ *
+ * This header contains definition of \c atomic template and \c atomic_flag.
+ */
+
+#ifndef BOOST_ATOMIC_ATOMIC_HPP_INCLUDED_
+#define BOOST_ATOMIC_ATOMIC_HPP_INCLUDED_
+
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/fences.hpp>
+#include <boost/atomic/atomic_flag.hpp>
+#include <boost/atomic/detail/atomic_template.hpp>
+#include <boost/atomic/detail/operations.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
namespace boost {
-#ifndef BOOST_ATOMIC_CHAR_LOCK_FREE
-#define BOOST_ATOMIC_CHAR_LOCK_FREE 0
-#endif
-
-#ifndef BOOST_ATOMIC_CHAR16_T_LOCK_FREE
-#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 0
-#endif
-
-#ifndef BOOST_ATOMIC_CHAR32_T_LOCK_FREE
-#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 0
-#endif
-
-#ifndef BOOST_ATOMIC_WCHAR_T_LOCK_FREE
-#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 0
-#endif
-
-#ifndef BOOST_ATOMIC_SHORT_LOCK_FREE
-#define BOOST_ATOMIC_SHORT_LOCK_FREE 0
-#endif
-
-#ifndef BOOST_ATOMIC_INT_LOCK_FREE
-#define BOOST_ATOMIC_INT_LOCK_FREE 0
-#endif
-
-#ifndef BOOST_ATOMIC_LONG_LOCK_FREE
-#define BOOST_ATOMIC_LONG_LOCK_FREE 0
-#endif
-
-#ifndef BOOST_ATOMIC_LLONG_LOCK_FREE
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
-#endif
-
-#ifndef BOOST_ATOMIC_POINTER_LOCK_FREE
-#define BOOST_ATOMIC_POINTER_LOCK_FREE 0
-#endif
-
-#define BOOST_ATOMIC_ADDRESS_LOCK_FREE BOOST_ATOMIC_POINTER_LOCK_FREE
-
-#ifndef BOOST_ATOMIC_BOOL_LOCK_FREE
-#define BOOST_ATOMIC_BOOL_LOCK_FREE 0
-#endif
-
-#ifndef BOOST_ATOMIC_THREAD_FENCE
-#define BOOST_ATOMIC_THREAD_FENCE 0
-inline void atomic_thread_fence(memory_order)
-{
-}
-#endif
-
-#ifndef BOOST_ATOMIC_SIGNAL_FENCE
-#define BOOST_ATOMIC_SIGNAL_FENCE 0
-inline void atomic_signal_fence(memory_order order)
-{
- atomic_thread_fence(order);
-}
-#endif
-
-template<typename T>
-class atomic :
- public atomics::detail::base_atomic<
- T,
- typename atomics::detail::classify<T>::type,
- atomics::detail::storage_size_of<T>::value,
-#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1400
- boost::is_signed<T>::value
-#else
- // MSVC 2003 has problems instantiating is_signed on non-integral types
- mpl::and_< boost::is_integral<T>, boost::is_signed<T> >::value
-#endif
- >
-{
-private:
- typedef T value_type;
- typedef atomics::detail::base_atomic<
- T,
- typename atomics::detail::classify<T>::type,
- atomics::detail::storage_size_of<T>::value,
-#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1400
- boost::is_signed<T>::value
-#else
- // MSVC 2003 has problems instantiating is_signed on non-itegral types
- mpl::and_< boost::is_integral<T>, boost::is_signed<T> >::value
-#endif
- > super;
-public:
- atomic(void) BOOST_NOEXCEPT : super() {}
- BOOST_CONSTEXPR atomic(value_type v) BOOST_NOEXCEPT : super(v) {}
-
- value_type operator=(value_type v) volatile BOOST_NOEXCEPT
- {
- this->store(v);
- return v;
- }
-
- operator value_type(void) volatile const BOOST_NOEXCEPT
- {
- return this->load();
- }
-
-#ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
-private:
- atomic(const atomic &) /* =delete */ ;
- atomic & operator=(const atomic &) volatile /* =delete */ ;
-#else
- atomic(const atomic &) = delete;
- atomic & operator=(const atomic &) volatile = delete;
-#endif
-};
-
-typedef atomic<char> atomic_char;
-typedef atomic<unsigned char> atomic_uchar;
-typedef atomic<signed char> atomic_schar;
-typedef atomic<uint8_t> atomic_uint8_t;
-typedef atomic<int8_t> atomic_int8_t;
-typedef atomic<unsigned short> atomic_ushort;
-typedef atomic<short> atomic_short;
-typedef atomic<uint16_t> atomic_uint16_t;
-typedef atomic<int16_t> atomic_int16_t;
-typedef atomic<unsigned int> atomic_uint;
-typedef atomic<int> atomic_int;
-typedef atomic<uint32_t> atomic_uint32_t;
-typedef atomic<int32_t> atomic_int32_t;
-typedef atomic<unsigned long> atomic_ulong;
-typedef atomic<long> atomic_long;
-typedef atomic<uint64_t> atomic_uint64_t;
-typedef atomic<int64_t> atomic_int64_t;
+using atomics::atomic;
+
+using atomics::atomic_char;
+using atomics::atomic_uchar;
+using atomics::atomic_schar;
+using atomics::atomic_uint8_t;
+using atomics::atomic_int8_t;
+using atomics::atomic_ushort;
+using atomics::atomic_short;
+using atomics::atomic_uint16_t;
+using atomics::atomic_int16_t;
+using atomics::atomic_uint;
+using atomics::atomic_int;
+using atomics::atomic_uint32_t;
+using atomics::atomic_int32_t;
+using atomics::atomic_ulong;
+using atomics::atomic_long;
+using atomics::atomic_uint64_t;
+using atomics::atomic_int64_t;
#ifdef BOOST_HAS_LONG_LONG
-typedef atomic<boost::ulong_long_type> atomic_ullong;
-typedef atomic<boost::long_long_type> atomic_llong;
+using atomics::atomic_ullong;
+using atomics::atomic_llong;
#endif
-typedef atomic<void*> atomic_address;
-typedef atomic<bool> atomic_bool;
-typedef atomic<wchar_t> atomic_wchar_t;
+using atomics::atomic_address;
+using atomics::atomic_bool;
+using atomics::atomic_wchar_t;
#if !defined(BOOST_NO_CXX11_CHAR16_T)
-typedef atomic<char16_t> atomic_char16_t;
+using atomics::atomic_char16_t;
#endif
#if !defined(BOOST_NO_CXX11_CHAR32_T)
-typedef atomic<char32_t> atomic_char32_t;
-#endif
-
-typedef atomic<int_least8_t> atomic_int_least8_t;
-typedef atomic<uint_least8_t> atomic_uint_least8_t;
-typedef atomic<int_least16_t> atomic_int_least16_t;
-typedef atomic<uint_least16_t> atomic_uint_least16_t;
-typedef atomic<int_least32_t> atomic_int_least32_t;
-typedef atomic<uint_least32_t> atomic_uint_least32_t;
-typedef atomic<int_least64_t> atomic_int_least64_t;
-typedef atomic<uint_least64_t> atomic_uint_least64_t;
-typedef atomic<int_fast8_t> atomic_int_fast8_t;
-typedef atomic<uint_fast8_t> atomic_uint_fast8_t;
-typedef atomic<int_fast16_t> atomic_int_fast16_t;
-typedef atomic<uint_fast16_t> atomic_uint_fast16_t;
-typedef atomic<int_fast32_t> atomic_int_fast32_t;
-typedef atomic<uint_fast32_t> atomic_uint_fast32_t;
-typedef atomic<int_fast64_t> atomic_int_fast64_t;
-typedef atomic<uint_fast64_t> atomic_uint_fast64_t;
-typedef atomic<intmax_t> atomic_intmax_t;
-typedef atomic<uintmax_t> atomic_uintmax_t;
-
-typedef atomic<std::size_t> atomic_size_t;
-typedef atomic<std::ptrdiff_t> atomic_ptrdiff_t;
-
-// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.
-#if !defined(__PGIC__)
-
-#if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
- || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
- || defined(__CYGWIN__) \
- || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
- || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
-typedef atomic<intptr_t> atomic_intptr_t;
-typedef atomic<uintptr_t> atomic_uintptr_t;
-#elif defined(__GNUC__) || defined(__clang__)
-#if defined(__INTPTR_TYPE__)
-typedef atomic< __INTPTR_TYPE__ > atomic_intptr_t;
-#endif
-#if defined(__UINTPTR_TYPE__)
-typedef atomic< __UINTPTR_TYPE__ > atomic_uintptr_t;
-#endif
-#endif
-
-#endif
-
-#ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
-#define BOOST_ATOMIC_FLAG_LOCK_FREE 0
-class atomic_flag
-{
-public:
- BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(false) {}
-
- bool
- test_and_set(memory_order order = memory_order_seq_cst) BOOST_NOEXCEPT
- {
- return v_.exchange(true, order);
- }
-
- void
- clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- v_.store(false, order);
- }
-private:
- atomic_flag(const atomic_flag &) /* = delete */ ;
- atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
- atomic<bool> v_;
-};
-#endif
-
-}
-
-#endif
+using atomics::atomic_char32_t;
+#endif
+
+using atomics::atomic_int_least8_t;
+using atomics::atomic_uint_least8_t;
+using atomics::atomic_int_least16_t;
+using atomics::atomic_uint_least16_t;
+using atomics::atomic_int_least32_t;
+using atomics::atomic_uint_least32_t;
+using atomics::atomic_int_least64_t;
+using atomics::atomic_uint_least64_t;
+using atomics::atomic_int_fast8_t;
+using atomics::atomic_uint_fast8_t;
+using atomics::atomic_int_fast16_t;
+using atomics::atomic_uint_fast16_t;
+using atomics::atomic_int_fast32_t;
+using atomics::atomic_uint_fast32_t;
+using atomics::atomic_int_fast64_t;
+using atomics::atomic_uint_fast64_t;
+using atomics::atomic_intmax_t;
+using atomics::atomic_uintmax_t;
+
+using atomics::atomic_size_t;
+using atomics::atomic_ptrdiff_t;
+
+#if defined(BOOST_HAS_INTPTR_T)
+using atomics::atomic_intptr_t;
+using atomics::atomic_uintptr_t;
+#endif
+
+} // namespace boost
+
+#endif // BOOST_ATOMIC_ATOMIC_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/atomic_flag.hpp b/3party/boost/boost/atomic/atomic_flag.hpp
new file mode 100644
index 0000000000..ac296bcc8e
--- /dev/null
+++ b/3party/boost/boost/atomic/atomic_flag.hpp
@@ -0,0 +1,33 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/atomic_flag.hpp
+ *
+ * This header contains definition of \c atomic_flag.
+ */
+
+#ifndef BOOST_ATOMIC_ATOMIC_FLAG_HPP_INCLUDED_
+#define BOOST_ATOMIC_ATOMIC_FLAG_HPP_INCLUDED_
+
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/detail/operations.hpp>
+#include <boost/atomic/detail/atomic_flag.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+
+using atomics::atomic_flag;
+
+} // namespace boost
+
+#endif // BOOST_ATOMIC_ATOMIC_FLAG_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/capabilities.hpp b/3party/boost/boost/atomic/capabilities.hpp
new file mode 100644
index 0000000000..658dd22546
--- /dev/null
+++ b/3party/boost/boost/atomic/capabilities.hpp
@@ -0,0 +1,160 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/capabilities.hpp
+ *
+ * This header defines feature capabilities macros.
+ */
+
+#ifndef BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
+#define BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/platform.hpp>
+#include <boost/atomic/detail/int_sizes.hpp>
+
+#if !defined(BOOST_ATOMIC_EMULATED)
+#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/caps_)
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifndef BOOST_ATOMIC_INT8_LOCK_FREE
+#define BOOST_ATOMIC_INT8_LOCK_FREE 0
+#endif
+
+#ifndef BOOST_ATOMIC_INT16_LOCK_FREE
+#define BOOST_ATOMIC_INT16_LOCK_FREE 0
+#endif
+
+#ifndef BOOST_ATOMIC_INT32_LOCK_FREE
+#define BOOST_ATOMIC_INT32_LOCK_FREE 0
+#endif
+
+#ifndef BOOST_ATOMIC_INT64_LOCK_FREE
+#define BOOST_ATOMIC_INT64_LOCK_FREE 0
+#endif
+
+#ifndef BOOST_ATOMIC_INT128_LOCK_FREE
+#define BOOST_ATOMIC_INT128_LOCK_FREE 0
+#endif
+
+
+#ifndef BOOST_ATOMIC_CHAR_LOCK_FREE
+#define BOOST_ATOMIC_CHAR_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_CHAR16_T_LOCK_FREE
+#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_CHAR32_T_LOCK_FREE
+#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_WCHAR_T_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 1
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 2
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 4
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 8
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_SHORT_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 1
+#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 2
+#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 4
+#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 8
+#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_SHORT_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_INT_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_INT == 1
+#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 2
+#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 4
+#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 8
+#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_INT_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_LONG_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 1
+#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 2
+#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 4
+#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 8
+#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_LONG_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_LLONG_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 1
+#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 2
+#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 4
+#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 8
+#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_POINTER_LOCK_FREE
+#if (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 8
+#define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#elif (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 4
+#define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#else
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 0
+#endif
+#endif
+
+#define BOOST_ATOMIC_ADDRESS_LOCK_FREE BOOST_ATOMIC_POINTER_LOCK_FREE
+
+#ifndef BOOST_ATOMIC_BOOL_LOCK_FREE
+#define BOOST_ATOMIC_BOOL_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
+#define BOOST_ATOMIC_FLAG_LOCK_FREE BOOST_ATOMIC_BOOL_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_THREAD_FENCE
+#define BOOST_ATOMIC_THREAD_FENCE 0
+#endif
+
+#ifndef BOOST_ATOMIC_SIGNAL_FENCE
+#define BOOST_ATOMIC_SIGNAL_FENCE 0
+#endif
+
+#endif // BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/atomic_flag.hpp b/3party/boost/boost/atomic/detail/atomic_flag.hpp
new file mode 100644
index 0000000000..6a6667d8eb
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/atomic_flag.hpp
@@ -0,0 +1,70 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/atomic_flag.hpp
+ *
+ * This header contains interface definition of \c atomic_flag.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_ATOMIC_FLAG_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_ATOMIC_FLAG_HPP_INCLUDED_
+
+#include <boost/assert.hpp>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/operations_lockfree.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+/*
+ * IMPLEMENTATION NOTE: All interface functions MUST be declared with BOOST_FORCEINLINE,
+ * see comment for convert_memory_order_to_gcc in ops_gcc_atomic.hpp.
+ */
+
+namespace boost {
+namespace atomics {
+
+#if defined(BOOST_NO_CXX11_CONSTEXPR) || defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+#define BOOST_ATOMIC_NO_ATOMIC_FLAG_INIT
+#else
+#define BOOST_ATOMIC_FLAG_INIT {}
+#endif
+
+struct atomic_flag
+{
+ typedef atomics::detail::operations< 1u, false > operations;
+ typedef operations::storage_type storage_type;
+
+ storage_type m_storage;
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR atomic_flag() BOOST_NOEXCEPT : m_storage(0)
+ {
+ }
+
+ BOOST_FORCEINLINE bool test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return operations::test_and_set(m_storage, order);
+ }
+
+ BOOST_FORCEINLINE void clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_acquire);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+ operations::clear(m_storage, order);
+ }
+
+ BOOST_DELETED_FUNCTION(atomic_flag(atomic_flag const&))
+ BOOST_DELETED_FUNCTION(atomic_flag& operator= (atomic_flag const&))
+};
+
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_ATOMIC_FLAG_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/atomic_template.hpp b/3party/boost/boost/atomic/detail/atomic_template.hpp
new file mode 100644
index 0000000000..4fd6d79b7d
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/atomic_template.hpp
@@ -0,0 +1,774 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/atomic_template.hpp
+ *
+ * This header contains interface definition of \c atomic template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_ATOMIC_TEMPLATE_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_ATOMIC_TEMPLATE_HPP_INCLUDED_
+
+#include <cstddef>
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/casts.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+// 'boost::atomics::atomic<T>' : multiple assignment operators specified
+#pragma warning(disable: 4522)
+#endif
+
+/*
+ * IMPLEMENTATION NOTE: All interface functions MUST be declared with BOOST_FORCEINLINE,
+ * see comment for convert_memory_order_to_gcc in ops_gcc_atomic.hpp.
+ */
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+BOOST_FORCEINLINE BOOST_CONSTEXPR memory_order deduce_failure_order(memory_order order) BOOST_NOEXCEPT
+{
+ return order == memory_order_acq_rel ? memory_order_acquire : (order == memory_order_release ? memory_order_relaxed : order);
+}
+
+BOOST_FORCEINLINE BOOST_CONSTEXPR bool cas_failure_order_must_not_be_stronger_than_success_order(memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+{
+ // 15 == (memory_order_seq_cst | memory_order_consume), see memory_order.hpp
+ // Given the enum values we can test the strength of memory order requirements with this single condition.
+ return (failure_order & 15u) <= (success_order & 15u);
+}
+
+template< typename T, bool IsInt = boost::is_integral< T >::value >
+struct classify
+{
+ typedef void type;
+};
+
+template< typename T >
+struct classify< T, true > { typedef int type; };
+
+template< typename T >
+struct classify< T*, false > { typedef void* type; };
+
+template< typename T, typename Kind >
+class base_atomic;
+
+//! Implementation for integers
+template< typename T >
+class base_atomic< T, int >
+{
+private:
+ typedef T value_type;
+ typedef T difference_type;
+ typedef atomics::detail::operations< storage_size_of< value_type >::value, boost::is_signed< T >::value > operations;
+
+protected:
+ typedef value_type value_arg_type;
+
+public:
+ typedef typename operations::storage_type storage_type;
+
+protected:
+ storage_type m_storage;
+
+public:
+ BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
+ BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : m_storage(v) {}
+
+ BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_consume);
+ BOOST_ASSERT(order != memory_order_acquire);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ operations::store(m_storage, static_cast< storage_type >(v), order);
+ }
+
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_release);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ return static_cast< value_type >(operations::load(m_storage, order));
+ }
+
+ BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return static_cast< value_type >(operations::fetch_add(m_storage, static_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return static_cast< value_type >(operations::fetch_sub(m_storage, static_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return static_cast< value_type >(operations::exchange(m_storage, static_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = static_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_strong(m_storage, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+ expected = static_cast< value_type >(old_value);
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = static_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_weak(m_storage, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+ expected = static_cast< value_type >(old_value);
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE value_type fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return static_cast< value_type >(operations::fetch_and(m_storage, static_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE value_type fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return static_cast< value_type >(operations::fetch_or(m_storage, static_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE value_type fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return static_cast< value_type >(operations::fetch_xor(m_storage, static_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+ {
+ return operations::is_lock_free(m_storage);
+ }
+
+ BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT
+ {
+ return fetch_add(1);
+ }
+
+ BOOST_FORCEINLINE value_type operator++() volatile BOOST_NOEXCEPT
+ {
+ return fetch_add(1) + 1;
+ }
+
+ BOOST_FORCEINLINE value_type operator--(int) volatile BOOST_NOEXCEPT
+ {
+ return fetch_sub(1);
+ }
+
+ BOOST_FORCEINLINE value_type operator--() volatile BOOST_NOEXCEPT
+ {
+ return fetch_sub(1) - 1;
+ }
+
+ BOOST_FORCEINLINE value_type operator+=(difference_type v) volatile BOOST_NOEXCEPT
+ {
+ return fetch_add(v) + v;
+ }
+
+ BOOST_FORCEINLINE value_type operator-=(difference_type v) volatile BOOST_NOEXCEPT
+ {
+ return fetch_sub(v) - v;
+ }
+
+ BOOST_FORCEINLINE value_type operator&=(value_type v) volatile BOOST_NOEXCEPT
+ {
+ return fetch_and(v) & v;
+ }
+
+ BOOST_FORCEINLINE value_type operator|=(value_type v) volatile BOOST_NOEXCEPT
+ {
+ return fetch_or(v) | v;
+ }
+
+ BOOST_FORCEINLINE value_type operator^=(value_type v) volatile BOOST_NOEXCEPT
+ {
+ return fetch_xor(v) ^ v;
+ }
+
+ BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+ BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+//! Implementation for bool
+template< >
+class base_atomic< bool, int >
+{
+private:
+ typedef bool value_type;
+ typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations;
+
+protected:
+ typedef value_type value_arg_type;
+
+public:
+ typedef operations::storage_type storage_type;
+
+protected:
+ storage_type m_storage;
+
+public:
+ BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
+ BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : m_storage(v) {}
+
+ BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_consume);
+ BOOST_ASSERT(order != memory_order_acquire);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ operations::store(m_storage, static_cast< storage_type >(v), order);
+ }
+
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_release);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ return !!operations::load(m_storage, order);
+ }
+
+ BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return !!operations::exchange(m_storage, static_cast< storage_type >(v), order);
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = static_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_strong(m_storage, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+ expected = !!old_value;
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = static_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_weak(m_storage, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+ expected = !!old_value;
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+ {
+ return operations::is_lock_free(m_storage);
+ }
+
+ BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+ BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+
+//! Implementation for user-defined types, such as structs and enums
+template< typename T >
+class base_atomic< T, void >
+{
+private:
+ typedef T value_type;
+ typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations;
+
+protected:
+ typedef value_type const& value_arg_type;
+
+public:
+ typedef typename operations::storage_type storage_type;
+
+protected:
+ storage_type m_storage;
+
+public:
+ BOOST_FORCEINLINE explicit base_atomic(value_type const& v = value_type()) BOOST_NOEXCEPT : m_storage(atomics::detail::memcpy_cast< storage_type >(v))
+ {
+ }
+
+ BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_consume);
+ BOOST_ASSERT(order != memory_order_acquire);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ operations::store(m_storage, atomics::detail::memcpy_cast< storage_type >(v), order);
+ }
+
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_release);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ return atomics::detail::memcpy_cast< value_type >(operations::load(m_storage, order));
+ }
+
+ BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return atomics::detail::memcpy_cast< value_type >(operations::exchange(m_storage, atomics::detail::memcpy_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = atomics::detail::memcpy_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_strong(m_storage, old_value, atomics::detail::memcpy_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::memcpy_cast< value_type >(old_value);
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = atomics::detail::memcpy_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_weak(m_storage, old_value, atomics::detail::memcpy_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::memcpy_cast< value_type >(old_value);
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+ {
+ return operations::is_lock_free(m_storage);
+ }
+
+ BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+ BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+
+//! Implementation for pointers
+template< typename T >
+class base_atomic< T*, void* >
+{
+private:
+ typedef T* value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations;
+
+protected:
+ typedef value_type value_arg_type;
+
+public:
+ typedef typename operations::storage_type storage_type;
+
+protected:
+ storage_type m_storage;
+
+public:
+ BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
+ BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::union_cast< storage_type >(v))
+ {
+ }
+
+ BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_consume);
+ BOOST_ASSERT(order != memory_order_acquire);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ operations::store(m_storage, atomics::detail::union_cast< storage_type >(v), order);
+ }
+
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_release);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ return atomics::detail::union_cast< value_type >(operations::load(m_storage, order));
+ }
+
+ BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return atomics::detail::union_cast< value_type >(operations::fetch_add(m_storage, static_cast< storage_type >(v * sizeof(T)), order));
+ }
+
+ BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return atomics::detail::union_cast< value_type >(operations::fetch_sub(m_storage, static_cast< storage_type >(v * sizeof(T)), order));
+ }
+
+ BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return atomics::detail::union_cast< value_type >(operations::exchange(m_storage, atomics::detail::union_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = atomics::detail::union_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_strong(m_storage, old_value, atomics::detail::union_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::union_cast< value_type >(old_value);
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = atomics::detail::union_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_weak(m_storage, old_value, atomics::detail::union_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::union_cast< value_type >(old_value);
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+ {
+ return operations::is_lock_free(m_storage);
+ }
+
+ BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT
+ {
+ return fetch_add(1);
+ }
+
+ BOOST_FORCEINLINE value_type operator++() volatile BOOST_NOEXCEPT
+ {
+ return fetch_add(1) + 1;
+ }
+
+ BOOST_FORCEINLINE value_type operator--(int) volatile BOOST_NOEXCEPT
+ {
+ return fetch_sub(1);
+ }
+
+ BOOST_FORCEINLINE value_type operator--() volatile BOOST_NOEXCEPT
+ {
+ return fetch_sub(1) - 1;
+ }
+
+ BOOST_FORCEINLINE value_type operator+=(difference_type v) volatile BOOST_NOEXCEPT
+ {
+ return fetch_add(v) + v;
+ }
+
+ BOOST_FORCEINLINE value_type operator-=(difference_type v) volatile BOOST_NOEXCEPT
+ {
+ return fetch_sub(v) - v;
+ }
+
+ BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+ BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+
+//! Implementation for void pointers
+template< >
+class base_atomic< void*, void* >
+{
+private:
+ typedef void* value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations;
+
+protected:
+ typedef value_type value_arg_type;
+
+public:
+ typedef operations::storage_type storage_type;
+
+protected:
+ storage_type m_storage;
+
+public:
+ BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
+ BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::union_cast< storage_type >(v))
+ {
+ }
+
+ BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_consume);
+ BOOST_ASSERT(order != memory_order_acquire);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ operations::store(m_storage, atomics::detail::union_cast< storage_type >(v), order);
+ }
+
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(order != memory_order_release);
+ BOOST_ASSERT(order != memory_order_acq_rel);
+
+ return atomics::detail::union_cast< value_type >(operations::load(m_storage, order));
+ }
+
+ BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return atomics::detail::union_cast< value_type >(operations::fetch_add(m_storage, static_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return atomics::detail::union_cast< value_type >(operations::fetch_sub(m_storage, static_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return atomics::detail::union_cast< value_type >(operations::exchange(m_storage, atomics::detail::union_cast< storage_type >(v), order));
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = atomics::detail::union_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_strong(m_storage, old_value, atomics::detail::union_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::union_cast< value_type >(old_value);
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(failure_order != memory_order_release);
+ BOOST_ASSERT(failure_order != memory_order_acq_rel);
+ BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+ storage_type old_value = atomics::detail::union_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_weak(m_storage, old_value, atomics::detail::union_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::union_cast< value_type >(old_value);
+ return res;
+ }
+
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+ return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+ }
+
+ BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+ {
+ return operations::is_lock_free(m_storage);
+ }
+
+ BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT
+ {
+ return fetch_add(1);
+ }
+
+ BOOST_FORCEINLINE value_type operator++() volatile BOOST_NOEXCEPT
+ {
+ return (char*)fetch_add(1) + 1;
+ }
+
+ BOOST_FORCEINLINE value_type operator--(int) volatile BOOST_NOEXCEPT
+ {
+ return fetch_sub(1);
+ }
+
+ BOOST_FORCEINLINE value_type operator--() volatile BOOST_NOEXCEPT
+ {
+ return (char*)fetch_sub(1) - 1;
+ }
+
+ BOOST_FORCEINLINE value_type operator+=(difference_type v) volatile BOOST_NOEXCEPT
+ {
+ return (char*)fetch_add(v) + v;
+ }
+
+ BOOST_FORCEINLINE value_type operator-=(difference_type v) volatile BOOST_NOEXCEPT
+ {
+ return (char*)fetch_sub(v) - v;
+ }
+
+ BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+ BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+} // namespace detail
+
+template< typename T >
+class atomic :
+ public atomics::detail::base_atomic< T, typename atomics::detail::classify< T >::type >
+{
+private:
+ typedef T value_type;
+ typedef atomics::detail::base_atomic< T, typename atomics::detail::classify< T >::type > base_type;
+ typedef typename base_type::value_arg_type value_arg_type;
+
+public:
+ typedef typename base_type::storage_type storage_type;
+
+public:
+ BOOST_DEFAULTED_FUNCTION(atomic(), BOOST_NOEXCEPT {})
+
+ // NOTE: The constructor is made explicit because gcc 4.7 complains that
+ // operator=(value_arg_type) is considered ambiguous with operator=(atomic const&)
+ // in assignment expressions, even though conversion to atomic<> is less preferred
+ // than conversion to value_arg_type.
+ BOOST_FORCEINLINE explicit BOOST_CONSTEXPR atomic(value_arg_type v) BOOST_NOEXCEPT : base_type(v) {}
+
+ BOOST_FORCEINLINE value_type operator= (value_arg_type v) volatile BOOST_NOEXCEPT
+ {
+ this->store(v);
+ return v;
+ }
+
+ BOOST_FORCEINLINE operator value_type() volatile const BOOST_NOEXCEPT
+ {
+ return this->load();
+ }
+
+ BOOST_FORCEINLINE storage_type& storage() BOOST_NOEXCEPT { return this->m_storage; }
+ BOOST_FORCEINLINE storage_type volatile& storage() volatile BOOST_NOEXCEPT { return this->m_storage; }
+ BOOST_FORCEINLINE storage_type const& storage() const BOOST_NOEXCEPT { return this->m_storage; }
+ BOOST_FORCEINLINE storage_type const volatile& storage() const volatile BOOST_NOEXCEPT { return this->m_storage; }
+
+ BOOST_DELETED_FUNCTION(atomic(atomic const&))
+ BOOST_DELETED_FUNCTION(atomic& operator= (atomic const&))
+ BOOST_DELETED_FUNCTION(atomic& operator= (atomic const&) volatile)
+};
+
+typedef atomic< char > atomic_char;
+typedef atomic< unsigned char > atomic_uchar;
+typedef atomic< signed char > atomic_schar;
+typedef atomic< uint8_t > atomic_uint8_t;
+typedef atomic< int8_t > atomic_int8_t;
+typedef atomic< unsigned short > atomic_ushort;
+typedef atomic< short > atomic_short;
+typedef atomic< uint16_t > atomic_uint16_t;
+typedef atomic< int16_t > atomic_int16_t;
+typedef atomic< unsigned int > atomic_uint;
+typedef atomic< int > atomic_int;
+typedef atomic< uint32_t > atomic_uint32_t;
+typedef atomic< int32_t > atomic_int32_t;
+typedef atomic< unsigned long > atomic_ulong;
+typedef atomic< long > atomic_long;
+typedef atomic< uint64_t > atomic_uint64_t;
+typedef atomic< int64_t > atomic_int64_t;
+#ifdef BOOST_HAS_LONG_LONG
+typedef atomic< boost::ulong_long_type > atomic_ullong;
+typedef atomic< boost::long_long_type > atomic_llong;
+#endif
+typedef atomic< void* > atomic_address;
+typedef atomic< bool > atomic_bool;
+typedef atomic< wchar_t > atomic_wchar_t;
+#if !defined(BOOST_NO_CXX11_CHAR16_T)
+typedef atomic< char16_t > atomic_char16_t;
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR32_T)
+typedef atomic< char32_t > atomic_char32_t;
+#endif
+
+typedef atomic< int_least8_t > atomic_int_least8_t;
+typedef atomic< uint_least8_t > atomic_uint_least8_t;
+typedef atomic< int_least16_t > atomic_int_least16_t;
+typedef atomic< uint_least16_t > atomic_uint_least16_t;
+typedef atomic< int_least32_t > atomic_int_least32_t;
+typedef atomic< uint_least32_t > atomic_uint_least32_t;
+typedef atomic< int_least64_t > atomic_int_least64_t;
+typedef atomic< uint_least64_t > atomic_uint_least64_t;
+typedef atomic< int_fast8_t > atomic_int_fast8_t;
+typedef atomic< uint_fast8_t > atomic_uint_fast8_t;
+typedef atomic< int_fast16_t > atomic_int_fast16_t;
+typedef atomic< uint_fast16_t > atomic_uint_fast16_t;
+typedef atomic< int_fast32_t > atomic_int_fast32_t;
+typedef atomic< uint_fast32_t > atomic_uint_fast32_t;
+typedef atomic< int_fast64_t > atomic_int_fast64_t;
+typedef atomic< uint_fast64_t > atomic_uint_fast64_t;
+typedef atomic< intmax_t > atomic_intmax_t;
+typedef atomic< uintmax_t > atomic_uintmax_t;
+
+typedef atomic< std::size_t > atomic_size_t;
+typedef atomic< std::ptrdiff_t > atomic_ptrdiff_t;
+
+#if defined(BOOST_HAS_INTPTR_T)
+typedef atomic< intptr_t > atomic_intptr_t;
+typedef atomic< uintptr_t > atomic_uintptr_t;
+#endif
+
+} // namespace atomics
+} // namespace boost
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_ATOMIC_TEMPLATE_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/base.hpp b/3party/boost/boost/atomic/detail/base.hpp
deleted file mode 100644
index 54dac6045c..0000000000
--- a/3party/boost/boost/atomic/detail/base.hpp
+++ /dev/null
@@ -1,585 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_BASE_HPP
-#define BOOST_ATOMIC_DETAIL_BASE_HPP
-
-// Copyright (c) 2009 Helge Bahmann
-// Copyright (c) 2013 Tim Blechmann
-//
-// 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)
-
-// Base class definition and fallback implementation.
-// To be overridden (through partial specialization) by
-// platform implementations.
-
-#include <string.h>
-
-#include <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/lockpool.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-#define BOOST_ATOMIC_DECLARE_BASE_OPERATORS \
- bool \
- compare_exchange_strong( \
- value_type & expected, \
- value_type desired, \
- memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT \
- { \
- return compare_exchange_strong(expected, desired, order, calculate_failure_order(order)); \
- } \
- \
- bool \
- compare_exchange_weak( \
- value_type & expected, \
- value_type desired, \
- memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT \
- { \
- return compare_exchange_weak(expected, desired, order, calculate_failure_order(order)); \
- } \
-
-#define BOOST_ATOMIC_DECLARE_ADDITIVE_OPERATORS \
- value_type \
- operator++(int) volatile BOOST_NOEXCEPT \
- { \
- return fetch_add(1); \
- } \
- \
- value_type \
- operator++(void) volatile BOOST_NOEXCEPT \
- { \
- return fetch_add(1) + 1; \
- } \
- \
- value_type \
- operator--(int) volatile BOOST_NOEXCEPT \
- { \
- return fetch_sub(1); \
- } \
- \
- value_type \
- operator--(void) volatile BOOST_NOEXCEPT \
- { \
- return fetch_sub(1) - 1; \
- } \
- \
- value_type \
- operator+=(difference_type v) volatile BOOST_NOEXCEPT \
- { \
- return fetch_add(v) + v; \
- } \
- \
- value_type \
- operator-=(difference_type v) volatile BOOST_NOEXCEPT \
- { \
- return fetch_sub(v) - v; \
- } \
-
-#define BOOST_ATOMIC_DECLARE_VOID_POINTER_ADDITIVE_OPERATORS \
- value_type \
- operator++(int) volatile BOOST_NOEXCEPT \
- { \
- return fetch_add(1); \
- } \
- \
- value_type \
- operator++(void) volatile BOOST_NOEXCEPT \
- { \
- return (char*)fetch_add(1) + 1; \
- } \
- \
- value_type \
- operator--(int) volatile BOOST_NOEXCEPT \
- { \
- return fetch_sub(1); \
- } \
- \
- value_type \
- operator--(void) volatile BOOST_NOEXCEPT \
- { \
- return (char*)fetch_sub(1) - 1; \
- } \
- \
- value_type \
- operator+=(difference_type v) volatile BOOST_NOEXCEPT \
- { \
- return (char*)fetch_add(v) + v; \
- } \
- \
- value_type \
- operator-=(difference_type v) volatile BOOST_NOEXCEPT \
- { \
- return (char*)fetch_sub(v) - v; \
- } \
-
-#define BOOST_ATOMIC_DECLARE_BIT_OPERATORS \
- value_type \
- operator&=(difference_type v) volatile BOOST_NOEXCEPT \
- { \
- return fetch_and(v) & v; \
- } \
- \
- value_type \
- operator|=(difference_type v) volatile BOOST_NOEXCEPT \
- { \
- return fetch_or(v) | v; \
- } \
- \
- value_type \
- operator^=(difference_type v) volatile BOOST_NOEXCEPT\
- { \
- return fetch_xor(v) ^ v; \
- } \
-
-#define BOOST_ATOMIC_DECLARE_POINTER_OPERATORS \
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS \
- BOOST_ATOMIC_DECLARE_ADDITIVE_OPERATORS \
-
-#define BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS \
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS \
- BOOST_ATOMIC_DECLARE_VOID_POINTER_ADDITIVE_OPERATORS \
-
-#define BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS \
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS \
- BOOST_ATOMIC_DECLARE_ADDITIVE_OPERATORS \
- BOOST_ATOMIC_DECLARE_BIT_OPERATORS \
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-inline memory_order
-calculate_failure_order(memory_order order)
-{
- switch(order) {
- case memory_order_acq_rel:
- return memory_order_acquire;
- case memory_order_release:
- return memory_order_relaxed;
- default:
- return order;
- }
-}
-
-template<typename T, typename C, unsigned int Size, bool Sign>
-class base_atomic
-{
-private:
- typedef base_atomic this_type;
- typedef T value_type;
- typedef lockpool::scoped_lock guard_type;
- typedef char storage_type[sizeof(value_type)];
-
-public:
- base_atomic(void) {}
-
- BOOST_CONSTEXPR explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(v)
- {}
-
- void
- store(value_type const& v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- char * storage = storage_ptr();
- guard_type guard(storage);
-
- memcpy(storage, &v, sizeof(value_type));
- }
-
- value_type
- load(memory_order /*order*/ = memory_order_seq_cst) volatile const BOOST_NOEXCEPT
- {
- char * storage = storage_ptr();
- guard_type guard(storage);
-
- value_type v;
- memcpy(&v, storage, sizeof(value_type));
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order /*success_order*/,
- memory_order /*failure_order*/) volatile BOOST_NOEXCEPT
- {
- char * storage = storage_ptr();
- guard_type guard(storage);
-
- if (memcmp(storage, &expected, sizeof(value_type)) == 0) {
- memcpy(storage, &desired, sizeof(value_type));
- return true;
- } else {
- memcpy(&expected, storage, sizeof(value_type));
- return false;
- }
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- exchange(value_type const& v, memory_order /*order*/=memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- char * storage = storage_ptr();
- guard_type guard(storage);
-
- value_type tmp;
- memcpy(&tmp, storage, sizeof(value_type));
-
- memcpy(storage, &v, sizeof(value_type));
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return false;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- char * storage_ptr() volatile const BOOST_NOEXCEPT
- {
- return const_cast<char *>(&reinterpret_cast<char const volatile &>(v_));
- }
-
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
-
- T v_;
-};
-
-template<typename T, unsigned int Size, bool Sign>
-class base_atomic<T, int, Size, Sign>
-{
-private:
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
- typedef lockpool::scoped_lock guard_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- v_ = v;
- }
-
- value_type
- load(memory_order /*order*/ = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type v = const_cast<const volatile value_type &>(v_);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ = v;
- return old;
- }
-
- bool
- compare_exchange_strong(value_type & expected, value_type desired,
- memory_order /*success_order*/,
- memory_order /*failure_order*/) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- if (v_ == expected) {
- v_ = desired;
- return true;
- } else {
- expected = v_;
- return false;
- }
- }
-
- bool
- compare_exchange_weak(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_add(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ += v;
- return old;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ -= v;
- return old;
- }
-
- value_type
- fetch_and(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ &= v;
- return old;
- }
-
- value_type
- fetch_or(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ |= v;
- return old;
- }
-
- value_type
- fetch_xor(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ ^= v;
- return old;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return false;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, unsigned int Size, bool Sign>
-class base_atomic<T *, void *, Size, Sign>
-{
-private:
- typedef base_atomic this_type;
- typedef T * value_type;
- typedef ptrdiff_t difference_type;
- typedef lockpool::scoped_lock guard_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
- v_ = v;
- }
-
- value_type
- load(memory_order /*order*/ = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type v = const_cast<const volatile value_type &>(v_);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ = v;
- return old;
- }
-
- bool
- compare_exchange_strong(value_type & expected, value_type desired,
- memory_order /*success_order*/,
- memory_order /*failure_order*/) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- if (v_ == expected) {
- v_ = desired;
- return true;
- } else {
- expected = v_;
- return false;
- }
- }
-
- bool
- compare_exchange_weak(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type fetch_add(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ += v;
- return old;
- }
-
- value_type fetch_sub(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ -= v;
- return old;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return false;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<unsigned int Size, bool Sign>
-class base_atomic<void *, void *, Size, Sign>
-{
-private:
- typedef base_atomic this_type;
- typedef ptrdiff_t difference_type;
- typedef void * value_type;
- typedef lockpool::scoped_lock guard_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
- v_ = v;
- }
-
- value_type
- load(memory_order /*order*/ = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type v = const_cast<const volatile value_type &>(v_);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- v_ = v;
- return old;
- }
-
- bool
- compare_exchange_strong(value_type & expected, value_type desired,
- memory_order /*success_order*/,
- memory_order /*failure_order*/) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- if (v_ == expected) {
- v_ = desired;
- return true;
- } else {
- expected = v_;
- return false;
- }
- }
-
- bool
- compare_exchange_weak(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return false;
- }
-
- value_type fetch_add(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- char * cv = reinterpret_cast<char*>(old);
- cv += v;
- v_ = cv;
- return old;
- }
-
- value_type fetch_sub(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile
- {
- guard_type guard(const_cast<value_type *>(&v_));
-
- value_type old = v_;
- char * cv = reinterpret_cast<char*>(old);
- cv -= v;
- v_ = cv;
- return old;
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-}
-}
-}
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/caps_gcc_alpha.hpp b/3party/boost/boost/atomic/detail/caps_gcc_alpha.hpp
new file mode 100644
index 0000000000..861432f58a
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_gcc_alpha.hpp
@@ -0,0 +1,34 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_gcc_alpha.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_ALPHA_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_GCC_ALPHA_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+#define BOOST_ATOMIC_INT64_LOCK_FREE 2
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_ALPHA_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_gcc_arm.hpp b/3party/boost/boost/atomic/detail/caps_gcc_arm.hpp
new file mode 100644
index 0000000000..b827c648d7
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_gcc_arm.hpp
@@ -0,0 +1,56 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2009 Phil Endecott
+ * Copyright (c) 2013 Tim Blechmann
+ * ARM Code by Phil Endecott, based on other architectures.
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_gcc_arm.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_ARM_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_GCC_ARM_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__))
+// ARMv7 and later have dmb instruction
+#define BOOST_ATOMIC_DETAIL_ARM_HAS_DMB 1
+#endif
+
+#if !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__))
+// ARMv6k and ARMv7 have 8 and 16 ldrex/strex variants
+#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB 1
+#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH 1
+#if !(((defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__)) && defined(__thumb__)) || defined(__ARM_ARCH_7M__))
+// ARMv6k and ARMv7 except ARMv7-M have 64-bit ldrex/strex variants.
+// Unfortunately, GCC (at least 4.7.3 on Ubuntu) does not allocate register pairs properly when targeting ARMv6k Thumb,
+// which is required for ldrexd/strexd instructions, so we disable 64-bit support. When targeting ARMv6k ARM
+// or ARMv7 (both ARM and Thumb 2) it works as expected.
+#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD 1
+#endif
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD)
+#define BOOST_ATOMIC_INT64_LOCK_FREE 2
+#endif
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_ARM_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_gcc_atomic.hpp b/3party/boost/boost/atomic/detail/caps_gcc_atomic.hpp
new file mode 100644
index 0000000000..8299ad0190
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_gcc_atomic.hpp
@@ -0,0 +1,134 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_gcc_atomic.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_ATOMIC_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_GCC_ATOMIC_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/int_sizes.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(__i386__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1
+#endif
+
+#if defined(__x86_64__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
+#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1
+#endif
+
+#if __GCC_ATOMIC_BOOL_LOCK_FREE == 2
+#define BOOST_ATOMIC_FLAG_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_FLAG_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_CHAR_LOCK_FREE == 2
+#define BOOST_ATOMIC_CHAR_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_CHAR_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_CHAR16_T_LOCK_FREE == 2
+#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_CHAR32_T_LOCK_FREE == 2
+#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_WCHAR_T_LOCK_FREE == 2
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_SHORT_LOCK_FREE == 2
+#define BOOST_ATOMIC_SHORT_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_SHORT_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_INT_LOCK_FREE == 2
+#define BOOST_ATOMIC_INT_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_INT_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_LONG_LOCK_FREE == 2
+#define BOOST_ATOMIC_LONG_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_LONG_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_LLONG_LOCK_FREE == 2
+#define BOOST_ATOMIC_LLONG_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
+#endif
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B) && (defined(BOOST_HAS_INT128) || !defined(BOOST_NO_ALIGNMENT))
+#define BOOST_ATOMIC_INT128_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_INT128_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_POINTER_LOCK_FREE == 2
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 0
+#endif
+#if __GCC_ATOMIC_BOOL_LOCK_FREE == 2
+#define BOOST_ATOMIC_BOOL_LOCK_FREE 2
+#else
+#define BOOST_ATOMIC_BOOL_LOCK_FREE 0
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE BOOST_ATOMIC_CHAR_LOCK_FREE
+
+#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE BOOST_ATOMIC_SHORT_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE BOOST_ATOMIC_INT_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE BOOST_ATOMIC_LONG_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE BOOST_ATOMIC_LLONG_LOCK_FREE
+#else
+#define BOOST_ATOMIC_INT16_LOCK_FREE 0
+#endif
+
+#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 4
+#define BOOST_ATOMIC_INT32_LOCK_FREE BOOST_ATOMIC_SHORT_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 4
+#define BOOST_ATOMIC_INT32_LOCK_FREE BOOST_ATOMIC_INT_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 4
+#define BOOST_ATOMIC_INT32_LOCK_FREE BOOST_ATOMIC_LONG_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 4
+#define BOOST_ATOMIC_INT32_LOCK_FREE BOOST_ATOMIC_LLONG_LOCK_FREE
+#else
+#define BOOST_ATOMIC_INT32_LOCK_FREE 0
+#endif
+
+#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 8
+#define BOOST_ATOMIC_INT64_LOCK_FREE BOOST_ATOMIC_SHORT_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 8
+#define BOOST_ATOMIC_INT64_LOCK_FREE BOOST_ATOMIC_INT_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 8
+#define BOOST_ATOMIC_INT64_LOCK_FREE BOOST_ATOMIC_LONG_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 8
+#define BOOST_ATOMIC_INT64_LOCK_FREE BOOST_ATOMIC_LLONG_LOCK_FREE
+#else
+#define BOOST_ATOMIC_INT64_LOCK_FREE 0
+#endif
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_ATOMIC_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_gcc_ppc.hpp b/3party/boost/boost/atomic/detail/caps_gcc_ppc.hpp
new file mode 100644
index 0000000000..6dbdde826d
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_gcc_ppc.hpp
@@ -0,0 +1,36 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_gcc_ppc.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_PPC_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_GCC_PPC_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+#if defined(__powerpc64__)
+#define BOOST_ATOMIC_INT64_LOCK_FREE 2
+#endif
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_PPC_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_gcc_sparc.hpp b/3party/boost/boost/atomic/detail/caps_gcc_sparc.hpp
new file mode 100644
index 0000000000..5806684926
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_gcc_sparc.hpp
@@ -0,0 +1,34 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2010 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_gcc_sparc.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_SPARC_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_GCC_SPARC_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+#define BOOST_ATOMIC_INT64_LOCK_FREE 2
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_SPARC_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_gcc_sync.hpp b/3party/boost/boost/atomic/detail/caps_gcc_sync.hpp
new file mode 100644
index 0000000000..7fac07a130
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_gcc_sync.hpp
@@ -0,0 +1,62 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_gcc_sync.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_SYNC_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_GCC_SYNC_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(__i386__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1
+#endif
+
+#if defined(__x86_64__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
+#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1
+#endif
+
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#endif
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#endif
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+#endif
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)\
+ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
+#define BOOST_ATOMIC_INT64_LOCK_FREE 2
+#endif
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
+#define BOOST_ATOMIC_INT128_LOCK_FREE 2
+#endif
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_SYNC_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_gcc_x86.hpp b/3party/boost/boost/atomic/detail/caps_gcc_x86.hpp
new file mode 100644
index 0000000000..0696bf1d2f
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_gcc_x86.hpp
@@ -0,0 +1,52 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_gcc_x86.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_X86_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_GCC_X86_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(__i386__) &&\
+ (\
+ defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) ||\
+ defined(__i586__) || defined(__i686__) || defined(__pentium4__) || defined(__nocona__) || defined(__core2__) || defined(__corei7__) ||\
+ defined(__k6__) || defined(__athlon__) || defined(__k8__) || defined(__amdfam10__) || defined(__bdver1__) || defined(__bdver2__) || defined(__bdver3__) || defined(__btver1__) || defined(__btver2__)\
+ )
+#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1
+#endif
+
+#if defined(__x86_64__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
+#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+#if defined(__x86_64__) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B)
+#define BOOST_ATOMIC_INT64_LOCK_FREE 2
+#endif
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B) && (defined(BOOST_HAS_INT128) || !defined(BOOST_NO_ALIGNMENT))
+#define BOOST_ATOMIC_INT128_LOCK_FREE 2
+#endif
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_X86_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_linux_arm.hpp b/3party/boost/boost/atomic/detail/caps_linux_arm.hpp
new file mode 100644
index 0000000000..abe6fb81af
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_linux_arm.hpp
@@ -0,0 +1,35 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009, 2011 Helge Bahmann
+ * Copyright (c) 2009 Phil Endecott
+ * Copyright (c) 2013 Tim Blechmann
+ * Linux-specific code by Phil Endecott
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_linux_arm.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_LINUX_ARM_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_LINUX_ARM_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_LINUX_ARM_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_msvc_arm.hpp b/3party/boost/boost/atomic/detail/caps_msvc_arm.hpp
new file mode 100644
index 0000000000..6b3c61fb3e
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_msvc_arm.hpp
@@ -0,0 +1,34 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2012 - 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_msvc_arm.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_MSVC_ARM_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_MSVC_ARM_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+#define BOOST_ATOMIC_INT64_LOCK_FREE 2
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_MSVC_ARM_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_msvc_x86.hpp b/3party/boost/boost/atomic/detail/caps_msvc_x86.hpp
new file mode 100644
index 0000000000..5661a5b7ab
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_msvc_x86.hpp
@@ -0,0 +1,50 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2012 - 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_msvc_x86.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_MSVC_X86_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_MSVC_X86_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(_M_IX86) && _M_IX86 >= 500
+#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1
+#endif
+
+#if _MSC_VER >= 1500 && defined(_M_AMD64) && !defined(BOOST_ATOMIC_NO_CMPXCHG16B)
+#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+
+#if defined(_M_AMD64) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B)
+#define BOOST_ATOMIC_INT64_LOCK_FREE 2
+#endif
+
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B) && (defined(BOOST_HAS_INT128) || !defined(BOOST_NO_ALIGNMENT))
+#define BOOST_ATOMIC_INT128_LOCK_FREE 2
+#endif
+
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_MSVC_X86_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/caps_windows.hpp b/3party/boost/boost/atomic/detail/caps_windows.hpp
new file mode 100644
index 0000000000..1cc0ded833
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/caps_windows.hpp
@@ -0,0 +1,33 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2012 - 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/caps_windows.hpp
+ *
+ * This header defines feature capabilities macros
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CAPS_WINDOWS_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CAPS_WINDOWS_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#define BOOST_ATOMIC_INT8_LOCK_FREE 2
+#define BOOST_ATOMIC_INT16_LOCK_FREE 2
+#define BOOST_ATOMIC_INT32_LOCK_FREE 2
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
+
+#define BOOST_ATOMIC_THREAD_FENCE 2
+#define BOOST_ATOMIC_SIGNAL_FENCE 2
+
+#endif // BOOST_ATOMIC_DETAIL_CAPS_WINDOWS_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/cas32strong.hpp b/3party/boost/boost/atomic/detail/cas32strong.hpp
deleted file mode 100644
index ac66a1294e..0000000000
--- a/3party/boost/boost/atomic/detail/cas32strong.hpp
+++ /dev/null
@@ -1,885 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_CAS32STRONG_HPP
-#define BOOST_ATOMIC_DETAIL_CAS32STRONG_HPP
-
-// 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)
-//
-// Copyright (c) 2011 Helge Bahmann
-// Copyright (c) 2013 Tim Blechmann
-
-
-// Build 8-, 16- and 32-bit atomic operations from
-// a platform_cmpxchg32_strong primitive.
-
-#include <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/memory_order.hpp>
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/base.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-/* integral types */
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
- typedef uint32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile
- {
- value_type v = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- storage_type expected_s = (storage_type) expected;
- storage_type desired_s = (storage_type) desired;
-
- bool success = platform_cmpxchg32_strong(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- expected = (value_type) expected_s;
- }
-
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original & v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original | v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original ^ v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
- typedef uint32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile
- {
- value_type v = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- storage_type expected_s = (storage_type) expected;
- storage_type desired_s = (storage_type) desired;
-
- bool success = platform_cmpxchg32_strong(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- expected = (value_type) expected_s;
- }
-
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original & v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original | v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original ^ v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile value_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg32_strong(expected, desired, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- }
-
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original & v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original | v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original ^ v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-/* pointer types */
-
-template<bool Sign>
-class base_atomic<void *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef void * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile value_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg32_strong(expected, desired, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- }
-
- return success;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, (char*)original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, (char*)original - v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile value_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg32_strong(expected, desired, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- }
-
- return success;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-/* generic types */
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) ) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile
- {
- storage_type tmp = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) ) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) ) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) ) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- platform_fence_before(success_order);
- bool success = platform_cmpxchg32_strong(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- }
-
- return success;
- }
-
- bool
- is_lock_free(void) const volatile
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) ) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile
- {
- storage_type tmp = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) ) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
-
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- platform_fence_before(success_order);
- bool success = platform_cmpxchg32_strong(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- }
-
- return success;
- }
-
- bool
- is_lock_free(void) const volatile
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile
- {
- storage_type tmp = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
-
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- platform_fence_before(success_order);
- bool success = platform_cmpxchg32_strong(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- }
-
- return success;
- }
-
- bool
- is_lock_free(void) const volatile
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-}
-}
-}
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/cas32weak.hpp b/3party/boost/boost/atomic/detail/cas32weak.hpp
deleted file mode 100644
index de2314c79d..0000000000
--- a/3party/boost/boost/atomic/detail/cas32weak.hpp
+++ /dev/null
@@ -1,947 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_CAS32WEAK_HPP
-#define BOOST_ATOMIC_DETAIL_CAS32WEAK_HPP
-
-// 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)
-//
-// Copyright (c) 2011 Helge Bahmann
-// Copyright (c) 2013 Tim Blechmann
-
-
-#include <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/memory_order.hpp>
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/base.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-/* integral types */
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
- typedef uint32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- storage_type expected_s = (storage_type) expected;
- storage_type desired_s = (storage_type) desired;
-
- bool success = platform_cmpxchg32(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- expected = (value_type) expected_s;
- }
-
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- for(;;) {
- value_type tmp = expected;
- if (compare_exchange_weak(tmp, desired, success_order, failure_order))
- return true;
- if (tmp != expected) {
- expected = tmp;
- return false;
- }
- }
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original & v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original | v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original ^ v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
- typedef uint32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- storage_type expected_s = (storage_type) expected;
- storage_type desired_s = (storage_type) desired;
-
- bool success = platform_cmpxchg32(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- expected = (value_type) expected_s;
- }
-
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- for(;;) {
- value_type tmp = expected;
- if (compare_exchange_weak(tmp, desired, success_order, failure_order))
- return true;
- if (tmp != expected) {
- expected = tmp;
- return false;
- }
- }
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original & v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original | v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original ^ v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile value_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg32(expected, desired, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- }
-
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- for(;;) {
- value_type tmp = expected;
- if (compare_exchange_weak(tmp, desired, success_order, failure_order))
- return true;
- if (tmp != expected) {
- expected = tmp;
- return false;
- }
- }
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original & v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original | v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original ^ v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-/* pointer types */
-
-template<bool Sign>
-class base_atomic<void *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef void * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile value_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg32(expected, desired, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- }
-
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- for(;;) {
- value_type tmp = expected;
- if (compare_exchange_weak(tmp, desired, success_order, failure_order))
- return true;
- if (tmp != expected) {
- expected = tmp;
- return false;
- }
- }
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, (char*)original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, (char*)original - v, order, memory_order_relaxed));
- return original;
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- const_cast<volatile value_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg32(expected, desired, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- }
-
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- for(;;) {
- value_type tmp = expected;
- if (compare_exchange_weak(tmp, desired, success_order, failure_order))
- return true;
- if (tmp != expected) {
- expected = tmp;
- return false;
- }
- }
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-/* generic types */
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg32(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- }
-
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- for(;;) {
- value_type tmp = expected;
- if (compare_exchange_weak(tmp, desired, success_order, failure_order))
- return true;
- if (tmp != expected) {
- expected = tmp;
- return false;
- }
- }
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg32(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- }
-
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- for(;;) {
- value_type tmp = expected;
- if (compare_exchange_weak(tmp, desired, success_order, failure_order))
- return true;
- if (tmp != expected) {
- expected = tmp;
- return false;
- }
- }
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before_store(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg32(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- }
-
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- for(;;) {
- value_type tmp = expected;
- if (compare_exchange_weak(tmp, desired, success_order, failure_order))
- return true;
- if (tmp != expected) {
- expected = tmp;
- return false;
- }
- }
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-}
-}
-}
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/cas64strong.hpp b/3party/boost/boost/atomic/detail/cas64strong.hpp
deleted file mode 100644
index 0a5002b376..0000000000
--- a/3party/boost/boost/atomic/detail/cas64strong.hpp
+++ /dev/null
@@ -1,443 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_CAS64STRONG_HPP
-#define BOOST_ATOMIC_DETAIL_CAS64STRONG_HPP
-
-// 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)
-//
-// Copyright (c) 2011 Helge Bahmann
-// Copyright (c) 2013 Tim Blechmann
-
-// Build 64-bit atomic operation from platform_cmpxchg64_strong
-// primitive. It is assumed that 64-bit loads/stores are not
-// atomic, so they are funnelled through cmpxchg as well.
-
-#include <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/memory_order.hpp>
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/base.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-/* integral types */
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- platform_store64(v, &v_);
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = platform_load64(&v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg64_strong(expected, desired, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- }
-
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original & v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original | v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original ^ v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-/* pointer types */
-
-template<bool Sign>
-class base_atomic<void *, void *, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef void * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- platform_store64(v, &v_);
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = platform_load64(&v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg64_strong(expected, desired, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- }
-
- return success;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, (char*)original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, (char*)original - v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T *, void *, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before_store(order);
- platform_store64(v, &v_);
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = platform_load64(&v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
-
- bool success = platform_cmpxchg64_strong(expected, desired, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- }
-
- return success;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-/* generic types */
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint64_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
- base_atomic(void) {}
-
- void
- store(value_type const& value, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type value_s = 0;
- memcpy(&value_s, &value, sizeof(value_type));
- platform_fence_before_store(order);
- platform_store64(value_s, &v_);
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type value_s = platform_load64(&v_);
- platform_fence_after_load(order);
- value_type value;
- memcpy(&value, &value_s, sizeof(value_type));
- return value;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original = load(memory_order_relaxed);
- do {
- } while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- platform_fence_before(success_order);
- bool success = platform_cmpxchg64_strong(expected_s, desired_s, &v_);
-
- if (success) {
- platform_fence_after(success_order);
- } else {
- platform_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- }
-
- return success;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-}
-}
-}
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/casts.hpp b/3party/boost/boost/atomic/detail/casts.hpp
new file mode 100644
index 0000000000..db28bc25ff
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/casts.hpp
@@ -0,0 +1,64 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/casts.hpp
+ *
+ * This header defines \c union_cast and \c memcpy_cast used to convert between storage and value types
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CASTS_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CASTS_HPP_INCLUDED_
+
+#include <cstring>
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+template< typename To, typename From >
+BOOST_FORCEINLINE To union_cast(From const& from) BOOST_NOEXCEPT
+{
+ union
+ {
+ To as_to;
+ From as_from;
+ }
+ caster = {};
+ caster.as_from = from;
+ return caster.as_to;
+}
+
+template< typename To, typename From >
+BOOST_FORCEINLINE To memcpy_cast(From const& from) BOOST_NOEXCEPT
+{
+ struct
+ {
+ To to;
+ }
+ value = {};
+ std::memcpy
+ (
+ &reinterpret_cast< char& >(value.to),
+ &reinterpret_cast< const char& >(from),
+ (sizeof(From) < sizeof(To) ? sizeof(From) : sizeof(To))
+ );
+ return value.to;
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_CASTS_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/config.hpp b/3party/boost/boost/atomic/detail/config.hpp
index 979bdd8f98..d03ec6aec6 100644
--- a/3party/boost/boost/atomic/detail/config.hpp
+++ b/3party/boost/boost/atomic/detail/config.hpp
@@ -1,54 +1,24 @@
-#ifndef BOOST_ATOMIC_DETAIL_CONFIG_HPP
-#define BOOST_ATOMIC_DETAIL_CONFIG_HPP
-
-// Copyright (c) 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)
+/*
+ * 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)
+ *
+ * Copyright (c) 2012 Hartmut Kaiser
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/config.hpp
+ *
+ * This header defines configuraion macros for Boost.Atomic
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
#include <boost/config.hpp>
-#if (defined(_MSC_VER) && (_MSC_VER >= 1020)) || defined(__GNUC__) || defined(BOOST_CLANG) || defined(BOOST_INTEL) || defined(__COMO__) || defined(__DMC__)
-#define BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#endif
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
-///////////////////////////////////////////////////////////////////////////////
-// Set up dll import/export options
-#if (defined(BOOST_ATOMIC_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && \
- !defined(BOOST_ATOMIC_STATIC_LINK)
-
-#if defined(BOOST_ATOMIC_SOURCE)
-#define BOOST_ATOMIC_DECL BOOST_SYMBOL_EXPORT
-#define BOOST_ATOMIC_BUILD_DLL
-#else
-#define BOOST_ATOMIC_DECL BOOST_SYMBOL_IMPORT
-#endif
-
-#endif // building a shared library
-
-#ifndef BOOST_ATOMIC_DECL
-#define BOOST_ATOMIC_DECL
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-// Auto library naming
-#if !defined(BOOST_ATOMIC_SOURCE) && !defined(BOOST_ALL_NO_LIB) && \
- !defined(BOOST_ATOMIC_NO_LIB)
-
-#define BOOST_LIB_NAME boost_atomic
-
-// tell the auto-link code to select a dll when required:
-#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_ATOMIC_DYN_LINK)
-#define BOOST_DYN_LINK
-#endif
-
-#include <boost/config/auto_link.hpp>
-
-#endif // auto-linking disabled
-
-#endif
+#endif // BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/gcc-alpha.hpp b/3party/boost/boost/atomic/detail/gcc-alpha.hpp
deleted file mode 100644
index 360a9db367..0000000000
--- a/3party/boost/boost/atomic/detail/gcc-alpha.hpp
+++ /dev/null
@@ -1,368 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_GCC_ALPHA_HPP
-#define BOOST_ATOMIC_DETAIL_GCC_ALPHA_HPP
-
-// Copyright (c) 2009 Helge Bahmann
-// Copyright (c) 2013 Tim Blechmann
-//
-// Distributed under the Boost Software License, Version 1.0.
-// See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/base.hpp>
-#include <boost/atomic/detail/builder.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-/*
- Refer to http://h71000.www7.hp.com/doc/82final/5601/5601pro_004.html
- (HP OpenVMS systems documentation) and the alpha reference manual.
- */
-
-/*
- NB: The most natural thing would be to write the increment/decrement
- operators along the following lines:
-
- __asm__ __volatile__(
- "1: ldl_l %0,%1 \n"
- "addl %0,1,%0 \n"
- "stl_c %0,%1 \n"
- "beq %0,1b\n"
- : "=&b" (tmp)
- : "m" (value)
- : "cc"
- );
-
- However according to the comments on the HP website and matching
- comments in the Linux kernel sources this defies branch prediction,
- as the cpu assumes that backward branches are always taken; so
- instead copy the trick from the Linux kernel, introduce a forward
- branch and back again.
-
- I have, however, had a hard time measuring the difference between
- the two versions in microbenchmarks -- I am leaving it in nevertheless
- as it apparently does not hurt either.
-*/
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-inline void fence_before(memory_order order)
-{
- switch(order) {
- case memory_order_consume:
- case memory_order_release:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- __asm__ __volatile__ ("mb" ::: "memory");
- default:;
- }
-}
-
-inline void fence_after(memory_order order)
-{
- switch(order) {
- case memory_order_acquire:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- __asm__ __volatile__ ("mb" ::: "memory");
- default:;
- }
-}
-
-template<>
-inline void platform_atomic_thread_fence(memory_order order)
-{
- switch(order) {
- case memory_order_acquire:
- case memory_order_consume:
- case memory_order_release:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- __asm__ __volatile__ ("mb" ::: "memory");
- default:;
- }
-}
-
-template<typename T>
-class atomic_alpha_32
-{
-public:
- typedef T integral_type;
- BOOST_CONSTEXPR atomic_alpha_32(T v) BOOST_NOEXCEPT: i(v) {}
- atomic_alpha_32() {}
- T load(memory_order order=memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- T v=*reinterpret_cast<volatile const int *>(&i);
- fence_after(order);
- return v;
- }
- void store(T v, memory_order order=memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- fence_before(order);
- *reinterpret_cast<volatile int *>(&i)=(int)v;
- }
- bool compare_exchange_weak(
- T &expected,
- T desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- fence_before(success_order);
- int current, success;
- __asm__ __volatile__(
- "1: ldl_l %2, %4\n"
- "cmpeq %2, %0, %3\n"
- "mov %2, %0\n"
- "beq %3, 3f\n"
- "stl_c %1, %4\n"
- "2:\n"
-
- ".subsection 2\n"
- "3: mov %3, %1\n"
- "br 2b\n"
- ".previous\n"
-
- : "+&r" (expected), "+&r" (desired), "=&r"(current), "=&r"(success)
- : "m" (i)
- :
- );
- if (desired) fence_after(success_order);
- else fence_after(failure_order);
- return desired;
- }
-
- bool is_lock_free(void) const volatile BOOST_NOEXCEPT {return true;}
-protected:
- inline T fetch_add_var(T c, memory_order order) volatile BOOST_NOEXCEPT
- {
- fence_before(order);
- T original, modified;
- __asm__ __volatile__(
- "1: ldl_l %0, %2\n"
- "addl %0, %3, %1\n"
- "stl_c %1, %2\n"
- "beq %1, 2f\n"
-
- ".subsection 2\n"
- "2: br 1b\n"
- ".previous\n"
-
- : "=&r" (original), "=&r" (modified)
- : "m" (i), "r" (c)
- :
- );
- fence_after(order);
- return original;
- }
- inline T fetch_inc(memory_order order) volatile BOOST_NOEXCEPT
- {
- fence_before(order);
- int original, modified;
- __asm__ __volatile__(
- "1: ldl_l %0, %2\n"
- "addl %0, 1, %1\n"
- "stl_c %1, %2\n"
- "beq %1, 2f\n"
-
- ".subsection 2\n"
- "2: br 1b\n"
- ".previous\n"
-
- : "=&r" (original), "=&r" (modified)
- : "m" (i)
- :
- );
- fence_after(order);
- return original;
- }
- inline T fetch_dec(memory_order order) volatile BOOST_NOEXCEPT
- {
- fence_before(order);
- int original, modified;
- __asm__ __volatile__(
- "1: ldl_l %0, %2\n"
- "subl %0, 1, %1\n"
- "stl_c %1, %2\n"
- "beq %1, 2f\n"
-
- ".subsection 2\n"
- "2: br 1b\n"
- ".previous\n"
-
- : "=&r" (original), "=&r" (modified)
- : "m" (i)
- :
- );
- fence_after(order);
- return original;
- }
-private:
- T i;
-};
-
-template<typename T>
-class atomic_alpha_64
-{
-public:
- typedef T integral_type;
- BOOST_CONSTEXPR atomic_alpha_64(T v) BOOST_NOEXCEPT: i(v) {}
- atomic_alpha_64() {}
- T load(memory_order order=memory_order_seq_cst) const volatile
- {
- T v=*reinterpret_cast<volatile const T *>(&i);
- fence_after(order);
- return v;
- }
- void store(T v, memory_order order=memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- fence_before(order);
- *reinterpret_cast<volatile T *>(&i)=v;
- }
- bool compare_exchange_weak(
- T &expected,
- T desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- fence_before(success_order);
- int current, success;
- __asm__ __volatile__(
- "1: ldq_l %2, %4\n"
- "cmpeq %2, %0, %3\n"
- "mov %2, %0\n"
- "beq %3, 3f\n"
- "stq_c %1, %4\n"
- "2:\n"
-
- ".subsection 2\n"
- "3: mov %3, %1\n"
- "br 2b\n"
- ".previous\n"
-
- : "+&r" (expected), "+&r" (desired), "=&r"(current), "=&r"(success)
- : "m" (i)
- :
- );
- if (desired) fence_after(success_order);
- else fence_after(failure_order);
- return desired;
- }
-
- bool is_lock_free(void) const volatile BOOST_NOEXCEPT {return true;}
-protected:
- inline T fetch_add_var(T c, memory_order order) volatile BOOST_NOEXCEPT
- {
- fence_before(order);
- T original, modified;
- __asm__ __volatile__(
- "1: ldq_l %0, %2\n"
- "addq %0, %3, %1\n"
- "stq_c %1, %2\n"
- "beq %1, 2f\n"
-
- ".subsection 2\n"
- "2: br 1b\n"
- ".previous\n"
-
- : "=&r" (original), "=&r" (modified)
- : "m" (i), "r" (c)
- :
- );
- fence_after(order);
- return original;
- }
- inline T fetch_inc(memory_order order) volatile BOOST_NOEXCEPT
- {
- fence_before(order);
- T original, modified;
- __asm__ __volatile__(
- "1: ldq_l %0, %2\n"
- "addq %0, 1, %1\n"
- "stq_c %1, %2\n"
- "beq %1, 2f\n"
-
- ".subsection 2\n"
- "2: br 1b\n"
- ".previous\n"
-
- : "=&r" (original), "=&r" (modified)
- : "m" (i)
- :
- );
- fence_after(order);
- return original;
- }
- inline T fetch_dec(memory_order order) volatile BOOST_NOEXCEPT
- {
- fence_before(order);
- T original, modified;
- __asm__ __volatile__(
- "1: ldq_l %0, %2\n"
- "subq %0, 1, %1\n"
- "stq_c %1, %2\n"
- "beq %1, 2f\n"
-
- ".subsection 2\n"
- "2: br 1b\n"
- ".previous\n"
-
- : "=&r" (original), "=&r" (modified)
- : "m" (i)
- :
- );
- fence_after(order);
- return original;
- }
-private:
- T i;
-};
-
-template<typename T>
-class platform_atomic_integral<T, 4> :
- public build_atomic_from_typical<build_exchange<atomic_alpha_32<T> > >
-{
-public:
- typedef build_atomic_from_typical<build_exchange<atomic_alpha_32<T> > > super;
- BOOST_CONSTEXPR platform_atomic_integral(T v) BOOST_NOEXCEPT: super(v) {}
- platform_atomic_integral(void) {}
-};
-
-template<typename T>
-class platform_atomic_integral<T, 8> :
- public build_atomic_from_typical<build_exchange<atomic_alpha_64<T> > >
-{
-public:
- typedef build_atomic_from_typical<build_exchange<atomic_alpha_64<T> > > super;
- BOOST_CONSTEXPR platform_atomic_integral(T v) BOOST_NOEXCEPT: super(v) {}
- platform_atomic_integral(void) {}
-};
-
-template<typename T>
-class platform_atomic_integral<T, 1> :
- public build_atomic_from_larger_type<atomic_alpha_32<uint32_t>, T>
-{
-public:
- typedef build_atomic_from_larger_type<atomic_alpha_32<uint32_t>, T> super;
- BOOST_CONSTEXPR platform_atomic_integral(T v) BOOST_NOEXCEPT: super(v) {}
- platform_atomic_integral(void) {}
-};
-
-template<typename T>
-class platform_atomic_integral<T, 2> :
- public build_atomic_from_larger_type<atomic_alpha_32<uint32_t>, T>
-{
-public:
- typedef build_atomic_from_larger_type<atomic_alpha_32<uint32_t>, T> super;
- BOOST_CONSTEXPR platform_atomic_integral(T v) BOOST_NOEXCEPT: super(v) {}
- platform_atomic_integral(void) {}
-};
-
-}
-}
-}
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/gcc-armv6plus.hpp b/3party/boost/boost/atomic/detail/gcc-armv6plus.hpp
deleted file mode 100644
index c11e5cd8af..0000000000
--- a/3party/boost/boost/atomic/detail/gcc-armv6plus.hpp
+++ /dev/null
@@ -1,252 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_GCC_ARMV6PLUS_HPP
-#define BOOST_ATOMIC_DETAIL_GCC_ARMV6PLUS_HPP
-
-// 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)
-//
-// Copyright (c) 2009 Helge Bahmann
-// Copyright (c) 2009 Phil Endecott
-// Copyright (c) 2013 Tim Blechmann
-// ARM Code by Phil Endecott, based on other architectures.
-
-#include <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/atomic/detail/config.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-// From the ARM Architecture Reference Manual for architecture v6:
-//
-// LDREX{<cond>} <Rd>, [<Rn>]
-// <Rd> Specifies the destination register for the memory word addressed by <Rd>
-// <Rn> Specifies the register containing the address.
-//
-// STREX{<cond>} <Rd>, <Rm>, [<Rn>]
-// <Rd> Specifies the destination register for the returned status value.
-// 0 if the operation updates memory
-// 1 if the operation fails to update memory
-// <Rm> Specifies the register containing the word to be stored to memory.
-// <Rn> Specifies the register containing the address.
-// Rd must not be the same register as Rm or Rn.
-//
-// ARM v7 is like ARM v6 plus:
-// There are half-word and byte versions of the LDREX and STREX instructions,
-// LDREXH, LDREXB, STREXH and STREXB.
-// There are also double-word versions, LDREXD and STREXD.
-// (Actually it looks like these are available from version 6k onwards.)
-// FIXME these are not yet used; should be mostly a matter of copy-and-paste.
-// I think you can supply an immediate offset to the address.
-//
-// A memory barrier is effected using a "co-processor 15" instruction,
-// though a separate assembler mnemonic is available for it in v7.
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-// "Thumb 1" is a subset of the ARM instruction set that uses a 16-bit encoding. It
-// doesn't include all instructions and in particular it doesn't include the co-processor
-// instruction used for the memory barrier or the load-locked/store-conditional
-// instructions. So, if we're compiling in "Thumb 1" mode, we need to wrap all of our
-// asm blocks with code to temporarily change to ARM mode.
-//
-// You can only change between ARM and Thumb modes when branching using the bx instruction.
-// bx takes an address specified in a register. The least significant bit of the address
-// indicates the mode, so 1 is added to indicate that the destination code is Thumb.
-// A temporary register is needed for the address and is passed as an argument to these
-// macros. It must be one of the "low" registers accessible to Thumb code, specified
-// using the "l" attribute in the asm statement.
-//
-// Architecture v7 introduces "Thumb 2", which does include (almost?) all of the ARM
-// instruction set. So in v7 we don't need to change to ARM mode; we can write "universal
-// assembler" which will assemble to Thumb 2 or ARM code as appropriate. The only thing
-// we need to do to make this "universal" assembler mode work is to insert "IT" instructions
-// to annotate the conditional instructions. These are ignored in other modes (e.g. v6),
-// so they can always be present.
-
-#if defined(__thumb__) && !defined(__ARM_ARCH_7A__)
-// FIXME also other v7 variants.
-#define BOOST_ATOMIC_ARM_ASM_START(TMPREG) "adr " #TMPREG ", 1f\n" "bx " #TMPREG "\n" ".arm\n" ".align 4\n" "1: "
-#define BOOST_ATOMIC_ARM_ASM_END(TMPREG) "adr " #TMPREG ", 1f + 1\n" "bx " #TMPREG "\n" ".thumb\n" ".align 2\n" "1: "
-
-#else
-// The tmpreg is wasted in this case, which is non-optimal.
-#define BOOST_ATOMIC_ARM_ASM_START(TMPREG)
-#define BOOST_ATOMIC_ARM_ASM_END(TMPREG)
-#endif
-
-#if defined(__ARM_ARCH_7A__)
-// FIXME ditto.
-#define BOOST_ATOMIC_ARM_DMB "dmb\n"
-#else
-#define BOOST_ATOMIC_ARM_DMB "mcr\tp15, 0, r0, c7, c10, 5\n"
-#endif
-
-inline void
-arm_barrier(void)
-{
- int brtmp;
- __asm__ __volatile__ (
- BOOST_ATOMIC_ARM_ASM_START(%0)
- BOOST_ATOMIC_ARM_DMB
- BOOST_ATOMIC_ARM_ASM_END(%0)
- : "=&l" (brtmp) :: "memory"
- );
-}
-
-inline void
-platform_fence_before(memory_order order)
-{
- switch(order) {
- case memory_order_release:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- arm_barrier();
- case memory_order_consume:
- default:;
- }
-}
-
-inline void
-platform_fence_after(memory_order order)
-{
- switch(order) {
- case memory_order_acquire:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- arm_barrier();
- default:;
- }
-}
-
-inline void
-platform_fence_before_store(memory_order order)
-{
- platform_fence_before(order);
-}
-
-inline void
-platform_fence_after_store(memory_order order)
-{
- if (order == memory_order_seq_cst)
- arm_barrier();
-}
-
-inline void
-platform_fence_after_load(memory_order order)
-{
- platform_fence_after(order);
-}
-
-template<typename T>
-inline bool
-platform_cmpxchg32(T & expected, T desired, volatile T * ptr)
-{
- int success;
- int tmp;
- __asm__ (
- BOOST_ATOMIC_ARM_ASM_START(%2)
- "mov %1, #0\n" // success = 0
- "ldrex %0, %3\n" // expected' = *(&i)
- "teq %0, %4\n" // flags = expected'==expected
- "ittt eq\n"
- "strexeq %2, %5, %3\n" // if (flags.equal) *(&i) = desired, tmp = !OK
- "teqeq %2, #0\n" // if (flags.equal) flags = tmp==0
- "moveq %1, #1\n" // if (flags.equal) success = 1
- BOOST_ATOMIC_ARM_ASM_END(%2)
- : "=&r" (expected), // %0
- "=&r" (success), // %1
- "=&l" (tmp), // %2
- "+Q" (*ptr) // %3
- : "r" (expected), // %4
- "r" (desired) // %5
- : "cc"
- );
- return success;
-}
-
-}
-}
-
-#define BOOST_ATOMIC_THREAD_FENCE 2
-inline void
-atomic_thread_fence(memory_order order)
-{
- switch(order) {
- case memory_order_acquire:
- case memory_order_release:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- atomics::detail::arm_barrier();
- default:;
- }
-}
-
-#define BOOST_ATOMIC_SIGNAL_FENCE 2
-inline void
-atomic_signal_fence(memory_order)
-{
- __asm__ __volatile__ ("" ::: "memory");
-}
-
-class atomic_flag
-{
-private:
- atomic_flag(const atomic_flag &) /* = delete */ ;
- atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
- uint32_t v_;
-public:
- BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(0) {}
-
- void
- clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before_store(order);
- const_cast<volatile uint32_t &>(v_) = 0;
- atomics::detail::platform_fence_after_store(order);
- }
-
- bool
- test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before(order);
- uint32_t expected = v_;
- do {
- if (expected == 1)
- break;
- } while (!atomics::detail::platform_cmpxchg32(expected, (uint32_t)1, &v_));
- atomics::detail::platform_fence_after(order);
- return expected;
- }
-};
-#define BOOST_ATOMIC_FLAG_LOCK_FREE 2
-
-}
-
-#undef BOOST_ATOMIC_ARM_ASM_START
-#undef BOOST_ATOMIC_ARM_ASM_END
-
-#include <boost/atomic/detail/base.hpp>
-
-#if !defined(BOOST_ATOMIC_FORCE_FALLBACK)
-
-#define BOOST_ATOMIC_CHAR_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 2
-#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 2
-#define BOOST_ATOMIC_SHORT_LOCK_FREE 2
-#define BOOST_ATOMIC_INT_LOCK_FREE 2
-#define BOOST_ATOMIC_LONG_LOCK_FREE 2
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
-#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
-#define BOOST_ATOMIC_BOOL_LOCK_FREE 2
-
-#include <boost/atomic/detail/cas32weak.hpp>
-
-#endif /* !defined(BOOST_ATOMIC_FORCE_FALLBACK) */
-
-#endif
-
diff --git a/3party/boost/boost/atomic/detail/gcc-cas.hpp b/3party/boost/boost/atomic/detail/gcc-cas.hpp
deleted file mode 100644
index 446da37803..0000000000
--- a/3party/boost/boost/atomic/detail/gcc-cas.hpp
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright (c) 2011 Helge Bahmann
-// Copyright (c) 2013 Tim Blechmann
-//
-// 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)
-
-// Use the gnu builtin __sync_val_compare_and_swap to build
-// atomic operations for 32 bit and smaller.
-
-#ifndef BOOST_ATOMIC_DETAIL_GENERIC_CAS_HPP
-#define BOOST_ATOMIC_DETAIL_GENERIC_CAS_HPP
-
-#include <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/atomic/detail/config.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-
-#define BOOST_ATOMIC_THREAD_FENCE 2
-inline void
-atomic_thread_fence(memory_order order)
-{
- switch(order) {
- case memory_order_relaxed:
- break;
- case memory_order_release:
- case memory_order_consume:
- case memory_order_acquire:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- __sync_synchronize();
- break;
- }
-}
-
-namespace atomics {
-namespace detail {
-
-inline void
-platform_fence_before(memory_order)
-{
- /* empty, as compare_and_swap is synchronizing already */
-}
-
-inline void
-platform_fence_after(memory_order)
-{
- /* empty, as compare_and_swap is synchronizing already */
-}
-
-inline void
-platform_fence_before_store(memory_order order)
-{
- switch(order) {
- case memory_order_relaxed:
- case memory_order_acquire:
- case memory_order_consume:
- break;
- case memory_order_release:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- __sync_synchronize();
- break;
- }
-}
-
-inline void
-platform_fence_after_store(memory_order order)
-{
- if (order == memory_order_seq_cst)
- __sync_synchronize();
-}
-
-inline void
-platform_fence_after_load(memory_order order)
-{
- switch(order) {
- case memory_order_relaxed:
- case memory_order_release:
- break;
- case memory_order_consume:
- case memory_order_acquire:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- __sync_synchronize();
- break;
- }
-}
-
-template<typename T>
-inline bool
-platform_cmpxchg32_strong(T & expected, T desired, volatile T * ptr)
-{
- T found = __sync_val_compare_and_swap(ptr, expected, desired);
- bool success = (found == expected);
- expected = found;
- return success;
-}
-
-class atomic_flag
-{
-private:
- atomic_flag(const atomic_flag &) /* = delete */ ;
- atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
- uint32_t v_;
-public:
- BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(0) {}
-
- void
- clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before_store(order);
- const_cast<volatile uint32_t &>(v_) = 0;
- atomics::detail::platform_fence_after_store(order);
- }
-
- bool
- test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before(order);
- uint32_t expected = v_;
- do {
- if (expected == 1)
- break;
- } while (!atomics::detail::platform_cmpxchg32(expected, (uint32_t)1, &v_));
- atomics::detail::platform_fence_after(order);
- return expected;
- }
-};
-#define BOOST_ATOMIC_FLAG_LOCK_FREE 2
-
-}
-}
-}
-
-#include <boost/atomic/detail/base.hpp>
-
-#if !defined(BOOST_ATOMIC_FORCE_FALLBACK)
-
-#define BOOST_ATOMIC_CHAR_LOCK_FREE 2
-#define BOOST_ATOMIC_SHORT_LOCK_FREE 2
-#define BOOST_ATOMIC_INT_LOCK_FREE 2
-#define BOOST_ATOMIC_LONG_LOCK_FREE (sizeof(long) <= 4 ? 2 : 0)
-#define BOOST_ATOMIC_LLONG_LOCK_FREE (sizeof(long long) <= 4 ? 2 : 0)
-#define BOOST_ATOMIC_POINTER_LOCK_FREE (sizeof(void *) <= 4 ? 2 : 0)
-#define BOOST_ATOMIC_BOOL_LOCK_FREE 2
-
-#include <boost/atomic/detail/cas32strong.hpp>
-
-#endif /* !defined(BOOST_ATOMIC_FORCE_FALLBACK) */
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/gcc-ppc.hpp b/3party/boost/boost/atomic/detail/gcc-ppc.hpp
deleted file mode 100644
index aaeeb96c78..0000000000
--- a/3party/boost/boost/atomic/detail/gcc-ppc.hpp
+++ /dev/null
@@ -1,2850 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_GCC_PPC_HPP
-#define BOOST_ATOMIC_DETAIL_GCC_PPC_HPP
-
-// Copyright (c) 2009 Helge Bahmann
-// Copyright (c) 2013 Tim Blechmann
-//
-// 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 <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/atomic/detail/config.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-/*
- Refer to: Motorola: "Programming Environments Manual for 32-Bit
- Implementations of the PowerPC Architecture", Appendix E:
- "Synchronization Programming Examples" for an explanation of what is
- going on here (can be found on the web at various places by the
- name "MPCFPE32B.pdf", Google is your friend...)
-
- Most of the atomic operations map to instructions in a relatively
- straight-forward fashion, but "load"s may at first glance appear
- a bit strange as they map to:
-
- lwz %rX, addr
- cmpw %rX, %rX
- bne- 1f
- 1:
-
- That is, the CPU is forced to perform a branch that "formally" depends
- on the value retrieved from memory. This scheme has an overhead of
- about 1-2 clock cycles per load, but it allows to map "acquire" to
- the "isync" instruction instead of "sync" uniformly and for all type
- of atomic operations. Since "isync" has a cost of about 15 clock
- cycles, while "sync" hast a cost of about 50 clock cycles, the small
- penalty to atomic loads more than compensates for this.
-
- Byte- and halfword-sized atomic values are realized by encoding the
- value to be represented into a word, performing sign/zero extension
- as appropriate. This means that after add/sub operations the value
- needs fixing up to accurately preserve the wrap-around semantic of
- the smaller type. (Nothing special needs to be done for the bit-wise
- and the "exchange type" operators as the compiler already sees to
- it that values carried in registers are extended appropriately and
- everything falls into place naturally).
-
- The register constraint "b" instructs gcc to use any register
- except r0; this is sometimes required because the encoding for
- r0 is used to signify "constant zero" in a number of instructions,
- making r0 unusable in this place. For simplicity this constraint
- is used everywhere since I am to lazy to look this up on a
- per-instruction basis, and ppc has enough registers for this not
- to pose a problem.
-*/
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-inline void
-ppc_fence_before(memory_order order)
-{
- switch(order) {
- case memory_order_release:
- case memory_order_acq_rel:
-#if defined(__powerpc64__)
- __asm__ __volatile__ ("lwsync" ::: "memory");
- break;
-#endif
- case memory_order_seq_cst:
- __asm__ __volatile__ ("sync" ::: "memory");
- default:;
- }
-}
-
-inline void
-ppc_fence_after(memory_order order)
-{
- switch(order) {
- case memory_order_acquire:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- __asm__ __volatile__ ("isync");
- case memory_order_consume:
- __asm__ __volatile__ ("" ::: "memory");
- default:;
- }
-}
-
-inline void
-ppc_fence_after_store(memory_order order)
-{
- switch(order) {
- case memory_order_seq_cst:
- __asm__ __volatile__ ("sync");
- default:;
- }
-}
-
-}
-}
-
-class atomic_flag
-{
-private:
- atomic_flag(const atomic_flag &) /* = delete */ ;
- atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
- uint32_t v_;
-public:
- BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(0) {}
-
- void
- clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::ppc_fence_before(order);
- const_cast<volatile uint32_t &>(v_) = 0;
- atomics::detail::ppc_fence_after_store(order);
- }
-
- bool
- test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- uint32_t original;
- atomics::detail::ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (1)
- : "cr0"
- );
- atomics::detail::ppc_fence_after(order);
- return original;
- }
-};
-
-} /* namespace boost */
-
-#define BOOST_ATOMIC_FLAG_LOCK_FREE 2
-
-#include <boost/atomic/detail/base.hpp>
-
-#if !defined(BOOST_ATOMIC_FORCE_FALLBACK)
-
-#define BOOST_ATOMIC_CHAR_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 2
-#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 2
-#define BOOST_ATOMIC_SHORT_LOCK_FREE 2
-#define BOOST_ATOMIC_INT_LOCK_FREE 2
-#define BOOST_ATOMIC_LONG_LOCK_FREE 2
-#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
-#if defined(__powerpc64__)
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 2
-#else
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
-#endif
-#define BOOST_ATOMIC_BOOL_LOCK_FREE 2
-
-/* Would like to move the slow-path of failed compare_exchange
-(that clears the "success" bit) out-of-line. gcc can in
-principle do that using ".subsection"/".previous", but Apple's
-binutils seemingly does not understand that. Therefore wrap
-the "clear" of the flag in a macro and let it remain
-in-line for Apple
-*/
-
-#if !defined(__APPLE__)
-
-#define BOOST_ATOMIC_ASM_SLOWPATH_CLEAR \
- "9:\n" \
- ".subsection 2\n" \
- "2: addi %1,0,0\n" \
- "b 9b\n" \
- ".previous\n" \
-
-#else
-
-#define BOOST_ATOMIC_ASM_SLOWPATH_CLEAR \
- "b 9f\n" \
- "2: addi %1,0,0\n" \
- "9:\n" \
-
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-/* integral types */
-
-template<typename T>
-class base_atomic<T, int, 1, true>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef int32_t storage_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- __asm__ (
- "stw %1, %0\n"
- : "+m"(v_)
- : "r" (v)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v;
- __asm__ __volatile__ (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=&r" (v)
- : "m" (v_)
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "extsb %1, %1\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "extsb %1, %1\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "and %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "or %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "xor %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T>
-class base_atomic<T, int, 1, false>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- __asm__ (
- "stw %1, %0\n"
- : "+m"(v_)
- : "r" (v)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v;
- __asm__ __volatile__ (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=&r" (v)
- : "m" (v_)
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "rlwinm %1, %1, 0, 0xff\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "rlwinm %1, %1, 0, 0xff\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "and %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "or %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "xor %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T>
-class base_atomic<T, int, 2, true>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef int32_t storage_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- __asm__ (
- "stw %1, %0\n"
- : "+m"(v_)
- : "r" (v)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v;
- __asm__ __volatile__ (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=&r" (v)
- : "m" (v_)
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "extsh %1, %1\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "extsh %1, %1\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "and %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "or %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "xor %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T>
-class base_atomic<T, int, 2, false>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- __asm__ (
- "stw %1, %0\n"
- : "+m"(v_)
- : "r" (v)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v;
- __asm__ __volatile__ (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=&r" (v)
- : "m" (v_)
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "rlwinm %1, %1, 0, 0xffff\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "rlwinm %1, %1, 0, 0xffff\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "and %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "or %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "xor %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- __asm__ __volatile__ (
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "+b"(v)
- :
- : "cr0"
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "and %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "or %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "xor %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-#if defined(__powerpc64__)
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- __asm__ __volatile__ (
- "cmpd %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "+b"(v)
- :
- : "cr0"
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y1\n"
- "stdcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 2f\n"
- "stdcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 2f\n"
- "stdcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y2\n"
- "add %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y2\n"
- "and %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y2\n"
- "or %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y2\n"
- "xor %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-#endif
-
-/* pointer types */
-
-#if !defined(__powerpc64__)
-
-template<bool Sign>
-class base_atomic<void *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef ptrdiff_t difference_type;
- typedef void * value_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- __asm__ (
- "stw %1, %0\n"
- : "+m" (v_)
- : "r" (v)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v;
- __asm__ (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=r"(v)
- : "m"(v_)
- : "cr0"
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- __asm__ (
- "stw %1, %0\n"
- : "+m" (v_)
- : "r" (v)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v;
- __asm__ (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=r"(v)
- : "m"(v_)
- : "cr0"
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- v = v * sizeof(*v_);
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- v = v * sizeof(*v_);
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-#else
-
-template<bool Sign>
-class base_atomic<void *, void *, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef ptrdiff_t difference_type;
- typedef void * value_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- __asm__ (
- "std %1, %0\n"
- : "+m" (v_)
- : "r" (v)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v;
- __asm__ (
- "ld %0, %1\n"
- "cmpd %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=r"(v)
- : "m"(v_)
- : "cr0"
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y1\n"
- "stdcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 2f\n"
- "stdcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 2f\n"
- "stdcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y2\n"
- "add %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T *, void *, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- ppc_fence_before(order);
- __asm__ (
- "std %1, %0\n"
- : "+m" (v_)
- : "r" (v)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v;
- __asm__ (
- "ld %0, %1\n"
- "cmpd %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=r"(v)
- : "m"(v_)
- : "cr0"
- );
- ppc_fence_after(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type original;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y1\n"
- "stdcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (v)
- : "cr0"
- );
- ppc_fence_after(order);
- return original;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 2f\n"
- "stdcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 2f\n"
- "stdcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected), "=&b" (success), "+Z"(v_)
- : "b" (expected), "b" (desired)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- return success;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- v = v * sizeof(*v_);
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y2\n"
- "add %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- v = v * sizeof(*v_);
- value_type original, tmp;
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
- : "=&b" (original), "=&b" (tmp), "+Z"(v_)
- : "b" (v)
- : "cc");
- ppc_fence_after(order);
- return original;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-#endif
-
-/* generic */
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- ppc_fence_before(order);
- __asm__ (
- "stw %1, %0\n"
- : "+m" (v_)
- : "r" (tmp)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp;
- __asm__ __volatile__ (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=r"(tmp)
- : "m"(v_)
- : "cr0"
- );
- ppc_fence_after(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0, original;
- memcpy(&tmp, &v, sizeof(value_type));
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (tmp)
- : "cr0"
- );
- ppc_fence_after(order);
- value_type res;
- memcpy(&res, &original, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected_s), "=&b" (success), "+Z"(v_)
- : "b" (expected_s), "b" (desired_s)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected_s), "=&b" (success), "+Z"(v_)
- : "b" (expected_s), "b" (desired_s)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- return success;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- ppc_fence_before(order);
- __asm__ (
- "stw %1, %0\n"
- : "+m" (v_)
- : "r" (tmp)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp;
- __asm__ __volatile__ (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=r"(tmp)
- : "m"(v_)
- : "cr0"
- );
- ppc_fence_after(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0, original;
- memcpy(&tmp, &v, sizeof(value_type));
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (tmp)
- : "cr0"
- );
- ppc_fence_after(order);
- value_type res;
- memcpy(&res, &original, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected_s), "=&b" (success), "+Z"(v_)
- : "b" (expected_s), "b" (desired_s)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected_s), "=&b" (success), "+Z"(v_)
- : "b" (expected_s), "b" (desired_s)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- return success;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- ppc_fence_before(order);
- __asm__ (
- "stw %1, %0\n"
- : "+m" (v_)
- : "r" (tmp)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp;
- __asm__ __volatile__ (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=r"(tmp)
- : "m"(v_)
- : "cr0"
- );
- ppc_fence_after(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0, original;
- memcpy(&tmp, &v, sizeof(value_type));
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (tmp)
- : "cr0"
- );
- ppc_fence_after(order);
- value_type res;
- memcpy(&res, &original, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected_s), "=&b" (success), "+Z"(v_)
- : "b" (expected_s), "b" (desired_s)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 2f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected_s), "=&b" (success), "+Z"(v_)
- : "b" (expected_s), "b" (desired_s)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- return success;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-#if defined(__powerpc64__)
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint64_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp;
- memcpy(&tmp, &v, sizeof(value_type));
- ppc_fence_before(order);
- __asm__ (
- "std %1, %0\n"
- : "+m" (v_)
- : "r" (tmp)
- );
- ppc_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp;
- __asm__ __volatile__ (
- "ld %0, %1\n"
- "cmpd %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=r"(tmp)
- : "m"(v_)
- : "cr0"
- );
- ppc_fence_after(order);
-
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0, original;
- memcpy(&tmp, &v, sizeof(value_type));
- ppc_fence_before(order);
- __asm__ (
- "1:\n"
- "ldarx %0,%y1\n"
- "stdcx. %2,%y1\n"
- "bne- 1b\n"
- : "=&b" (original), "+Z"(v_)
- : "b" (tmp)
- : "cr0"
- );
- ppc_fence_after(order);
- value_type res;
- memcpy(&res, &original, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s, desired_s;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 2f\n"
- "stdcx. %4,%y2\n"
- "bne- 2f\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected_s), "=&b" (success), "+Z"(v_)
- : "b" (expected_s), "b" (desired_s)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s, desired_s;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
-
- int success;
- ppc_fence_before(success_order);
- __asm__(
- "0: ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 2f\n"
- "stdcx. %4,%y2\n"
- "bne- 0b\n"
- "addi %1,0,1\n"
- "1:"
-
- BOOST_ATOMIC_ASM_SLOWPATH_CLEAR
- : "=&b" (expected_s), "=&b" (success), "+Z"(v_)
- : "b" (expected_s), "b" (desired_s)
- : "cr0"
- );
- if (success)
- ppc_fence_after(success_order);
- else
- ppc_fence_after(failure_order);
- memcpy(&expected, &expected_s, sizeof(value_type));
- return success;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-#endif
-
-}
-}
-
-#define BOOST_ATOMIC_THREAD_FENCE 2
-inline void
-atomic_thread_fence(memory_order order)
-{
- switch(order) {
- case memory_order_acquire:
- __asm__ __volatile__ ("isync" ::: "memory");
- break;
- case memory_order_release:
-#if defined(__powerpc64__)
- __asm__ __volatile__ ("lwsync" ::: "memory");
- break;
-#endif
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- __asm__ __volatile__ ("sync" ::: "memory");
- default:;
- }
-}
-
-#define BOOST_ATOMIC_SIGNAL_FENCE 2
-inline void
-atomic_signal_fence(memory_order order)
-{
- switch(order) {
- case memory_order_acquire:
- case memory_order_release:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- __asm__ __volatile__ ("" ::: "memory");
- break;
- default:;
- }
-}
-
-}
-
-#endif /* !defined(BOOST_ATOMIC_FORCE_FALLBACK) */
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/gcc-sparcv9.hpp b/3party/boost/boost/atomic/detail/gcc-sparcv9.hpp
deleted file mode 100644
index b524403bb2..0000000000
--- a/3party/boost/boost/atomic/detail/gcc-sparcv9.hpp
+++ /dev/null
@@ -1,1259 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_GCC_SPARC_HPP
-#define BOOST_ATOMIC_DETAIL_GCC_SPARC_HPP
-
-// Copyright (c) 2010 Helge Bahmann
-// Copyright (c) 2013 Tim Blechmann
-//
-// 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 <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/atomic/detail/config.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-inline void
-platform_fence_before(memory_order order)
-{
- switch(order) {
- case memory_order_relaxed:
- case memory_order_acquire:
- case memory_order_consume:
- break;
- case memory_order_release:
- case memory_order_acq_rel:
- __asm__ __volatile__ ("membar #StoreStore | #LoadStore" ::: "memory");
- /* release */
- break;
- case memory_order_seq_cst:
- __asm__ __volatile__ ("membar #Sync" ::: "memory");
- /* seq */
- break;
- }
-}
-
-inline void
-platform_fence_after(memory_order order)
-{
- switch(order) {
- case memory_order_relaxed:
- case memory_order_release:
- break;
- case memory_order_acquire:
- case memory_order_acq_rel:
- __asm__ __volatile__ ("membar #LoadLoad | #LoadStore" ::: "memory");
- /* acquire */
- break;
- case memory_order_consume:
- /* consume */
- break;
- case memory_order_seq_cst:
- __asm__ __volatile__ ("membar #Sync" ::: "memory");
- /* seq */
- break;
- default:;
- }
-}
-
-inline void
-platform_fence_after_store(memory_order order)
-{
- switch(order) {
- case memory_order_seq_cst:
- __asm__ __volatile__ ("membar #Sync" ::: "memory");
- default:;
- }
-}
-
-
-inline void
-platform_fence_after_load(memory_order order)
-{
- platform_fence_after(order);
-}
-
-}
-}
-
-class atomic_flag
-{
-private:
- atomic_flag(const atomic_flag &) /* = delete */ ;
- atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
- uint32_t v_;
-public:
- BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(0) {}
-
- void
- clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before(order);
- const_cast<volatile uint32_t &>(v_) = 0;
- atomics::detail::platform_fence_after_store(order);
- }
-
- bool
- test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before(order);
- uint32_t tmp = 1;
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (tmp)
- : "r" (&v_), "r" (0)
- : "memory"
- );
- atomics::detail::platform_fence_after(order);
- return tmp;
- }
-};
-
-} /* namespace boost */
-
-#define BOOST_ATOMIC_FLAG_LOCK_FREE 2
-
-#include <boost/atomic/detail/base.hpp>
-
-#if !defined(BOOST_ATOMIC_FORCE_FALLBACK)
-
-#define BOOST_ATOMIC_CHAR_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 2
-#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 2
-#define BOOST_ATOMIC_SHORT_LOCK_FREE 2
-#define BOOST_ATOMIC_INT_LOCK_FREE 2
-#define BOOST_ATOMIC_LONG_LOCK_FREE 2
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
-#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
-#define BOOST_ATOMIC_BOOL_LOCK_FREE 2
-
-namespace boost {
-
-#define BOOST_ATOMIC_THREAD_FENCE 2
-inline void
-atomic_thread_fence(memory_order order)
-{
- switch(order) {
- case memory_order_relaxed:
- break;
- case memory_order_release:
- __asm__ __volatile__ ("membar #StoreStore | #LoadStore" ::: "memory");
- break;
- case memory_order_acquire:
- __asm__ __volatile__ ("membar #LoadLoad | #LoadStore" ::: "memory");
- break;
- case memory_order_acq_rel:
- __asm__ __volatile__ ("membar #LoadLoad | #LoadStore | #StoreStore" ::: "memory");
- break;
- case memory_order_consume:
- break;
- case memory_order_seq_cst:
- __asm__ __volatile__ ("membar #Sync" ::: "memory");
- break;
- default:;
- }
-}
-
-#define BOOST_ATOMIC_SIGNAL_FENCE 2
-inline void
-atomic_signal_fence(memory_order)
-{
- __asm__ __volatile__ ("" ::: "memory");
-}
-
-namespace atomics {
-namespace detail {
-
-/* integral types */
-
-template<typename T>
-class base_atomic<T, int, 1, true>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
- typedef int32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp + v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp - v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
- storage_type desired_s = desired;
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired_s)
- : "r" (&v_), "r" ((storage_type)expected)
- : "memory"
- );
- desired = desired_s;
- bool success = (desired == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = desired;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T>
-class base_atomic<T, int, 1, false>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
- typedef uint32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp + v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp - v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
- storage_type desired_s = desired;
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired_s)
- : "r" (&v_), "r" ((storage_type)expected)
- : "memory"
- );
- desired = desired_s;
- bool success = (desired == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = desired;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T>
-class base_atomic<T, int, 2, true>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
- typedef int32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp + v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp - v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
- storage_type desired_s = desired;
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired_s)
- : "r" (&v_), "r" ((storage_type)expected)
- : "memory"
- );
- desired = desired_s;
- bool success = (desired == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = desired;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T>
-class base_atomic<T, int, 2, false>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
- typedef uint32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile storage_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp + v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp - v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
- storage_type desired_s = desired;
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired_s)
- : "r" (&v_), "r" ((storage_type)expected)
- : "memory"
- );
- desired = desired_s;
- bool success = (desired == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = desired;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp + v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp - v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired)
- : "r" (&v_), "r" (expected)
- : "memory"
- );
- bool success = (desired == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = desired;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-/* pointer types */
-
-template<bool Sign>
-class base_atomic<void *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef ptrdiff_t difference_type;
- typedef void * value_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired)
- : "r" (&v_), "r" (expected)
- : "memory"
- );
- bool success = (desired == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = desired;
- return success;
- }
-
-
- bool compare_exchange_weak(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, (char*)tmp + v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, (char*)tmp - v, order, memory_order_relaxed));
- return tmp;
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(success_order);
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired)
- : "r" (&v_), "r" (expected)
- : "memory"
- );
- bool success = (desired == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = desired;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp + v, order, memory_order_relaxed));
- return tmp;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, tmp - v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-/* generic types */
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- platform_fence_before(success_order);
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired_s)
- : "r" (&v_), "r" (expected_s)
- : "memory"
- );
- bool success = (desired_s == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &desired_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- platform_fence_before(success_order);
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired_s)
- : "r" (&v_), "r" (expected_s)
- : "memory"
- );
- bool success = (desired_s == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &desired_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- platform_fence_after_store(order);
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- do {} while(!compare_exchange_weak(tmp, v, order, memory_order_relaxed));
- return tmp;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- platform_fence_before(success_order);
- __asm__ (
- "cas [%1], %2, %0"
- : "+r" (desired_s)
- : "r" (&v_), "r" (expected_s)
- : "memory"
- );
- bool success = (desired_s == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &desired_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-#endif /* !defined(BOOST_ATOMIC_FORCE_FALLBACK) */
-
-}
-}
-}
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/gcc-x86.hpp b/3party/boost/boost/atomic/detail/gcc-x86.hpp
deleted file mode 100644
index 1cf9d67d9b..0000000000
--- a/3party/boost/boost/atomic/detail/gcc-x86.hpp
+++ /dev/null
@@ -1,1766 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_GCC_X86_HPP
-#define BOOST_ATOMIC_DETAIL_GCC_X86_HPP
-
-// Copyright (c) 2009 Helge Bahmann
-// Copyright (c) 2012 Tim Blechmann
-//
-// 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 <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/atomic/detail/config.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-#if defined(__x86_64__) || defined(__SSE2__)
-# define BOOST_ATOMIC_X86_FENCE_INSTR "mfence\n"
-#else
-# define BOOST_ATOMIC_X86_FENCE_INSTR "lock ; addl $0, (%%esp)\n"
-#endif
-
-#define BOOST_ATOMIC_X86_PAUSE() __asm__ __volatile__ ("pause\n")
-
-#if defined(__i386__) &&\
- (\
- defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) ||\
- defined(__i586__) || defined(__i686__) || defined(__pentium4__) || defined(__nocona__) || defined(__core2__) || defined(__corei7__) ||\
- defined(__k6__) || defined(__athlon__) || defined(__k8__) || defined(__amdfam10__) || defined(__bdver1__) || defined(__bdver2__) || defined(__bdver3__) || defined(__btver1__) || defined(__btver2__)\
- )
-#define BOOST_ATOMIC_X86_HAS_CMPXCHG8B 1
-#endif
-
-inline void
-platform_fence_before(memory_order order)
-{
- switch(order)
- {
- case memory_order_relaxed:
- case memory_order_acquire:
- case memory_order_consume:
- break;
- case memory_order_release:
- case memory_order_acq_rel:
- __asm__ __volatile__ ("" ::: "memory");
- /* release */
- break;
- case memory_order_seq_cst:
- __asm__ __volatile__ ("" ::: "memory");
- /* seq */
- break;
- default:;
- }
-}
-
-inline void
-platform_fence_after(memory_order order)
-{
- switch(order)
- {
- case memory_order_relaxed:
- case memory_order_release:
- break;
- case memory_order_acquire:
- case memory_order_acq_rel:
- __asm__ __volatile__ ("" ::: "memory");
- /* acquire */
- break;
- case memory_order_consume:
- /* consume */
- break;
- case memory_order_seq_cst:
- __asm__ __volatile__ ("" ::: "memory");
- /* seq */
- break;
- default:;
- }
-}
-
-inline void
-platform_fence_after_load(memory_order order)
-{
- switch(order)
- {
- case memory_order_relaxed:
- case memory_order_release:
- break;
- case memory_order_acquire:
- case memory_order_acq_rel:
- __asm__ __volatile__ ("" ::: "memory");
- break;
- case memory_order_consume:
- break;
- case memory_order_seq_cst:
- __asm__ __volatile__ ("" ::: "memory");
- break;
- default:;
- }
-}
-
-inline void
-platform_fence_before_store(memory_order order)
-{
- switch(order)
- {
- case memory_order_relaxed:
- case memory_order_acquire:
- case memory_order_consume:
- break;
- case memory_order_release:
- case memory_order_acq_rel:
- __asm__ __volatile__ ("" ::: "memory");
- /* release */
- break;
- case memory_order_seq_cst:
- __asm__ __volatile__ ("" ::: "memory");
- /* seq */
- break;
- default:;
- }
-}
-
-inline void
-platform_fence_after_store(memory_order order)
-{
- switch(order)
- {
- case memory_order_relaxed:
- case memory_order_release:
- break;
- case memory_order_acquire:
- case memory_order_acq_rel:
- __asm__ __volatile__ ("" ::: "memory");
- /* acquire */
- break;
- case memory_order_consume:
- /* consume */
- break;
- case memory_order_seq_cst:
- __asm__ __volatile__ ("" ::: "memory");
- /* seq */
- break;
- default:;
- }
-}
-
-}
-}
-
-class atomic_flag
-{
-private:
- atomic_flag(const atomic_flag &) /* = delete */ ;
- atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
- uint32_t v_;
-public:
- BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(0) {}
-
- bool
- test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- uint32_t v = 1;
- atomics::detail::platform_fence_before(order);
- __asm__ __volatile__ (
- "xchgl %0, %1"
- : "+r" (v), "+m" (v_)
- );
- atomics::detail::platform_fence_after(order);
- return v;
- }
-
- void
- clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order == memory_order_seq_cst) {
- uint32_t v = 0;
- __asm__ __volatile__ (
- "xchgl %0, %1"
- : "+r" (v), "+m" (v_)
- );
- } else {
- atomics::detail::platform_fence_before(order);
- v_ = 0;
- }
- }
-};
-
-} /* namespace boost */
-
-#define BOOST_ATOMIC_FLAG_LOCK_FREE 2
-
-#include <boost/atomic/detail/base.hpp>
-
-#if !defined(BOOST_ATOMIC_FORCE_FALLBACK)
-
-#define BOOST_ATOMIC_CHAR_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 2
-#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 2
-#define BOOST_ATOMIC_SHORT_LOCK_FREE 2
-#define BOOST_ATOMIC_INT_LOCK_FREE 2
-#define BOOST_ATOMIC_LONG_LOCK_FREE 2
-
-#if defined(__x86_64__) || defined(BOOST_ATOMIC_X86_HAS_CMPXCHG8B)
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 2
-#else
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
-#endif
-
-#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
-#define BOOST_ATOMIC_BOOL_LOCK_FREE 2
-
-namespace boost {
-
-#define BOOST_ATOMIC_THREAD_FENCE 2
-inline void
-atomic_thread_fence(memory_order order)
-{
- switch(order)
- {
- case memory_order_relaxed:
- break;
- case memory_order_release:
- __asm__ __volatile__ ("" ::: "memory");
- break;
- case memory_order_acquire:
- __asm__ __volatile__ ("" ::: "memory");
- break;
- case memory_order_acq_rel:
- __asm__ __volatile__ ("" ::: "memory");
- break;
- case memory_order_consume:
- break;
- case memory_order_seq_cst:
- __asm__ __volatile__ (BOOST_ATOMIC_X86_FENCE_INSTR ::: "memory");
- break;
- default:;
- }
-}
-
-#define BOOST_ATOMIC_SIGNAL_FENCE 2
-inline void
-atomic_signal_fence(memory_order)
-{
- __asm__ __volatile__ ("" ::: "memory");
-}
-
-namespace atomics {
-namespace detail {
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "lock ; xaddb %0, %1"
- : "+q" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "xchgb %0, %1"
- : "+q" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgb %2, %1"
- : "+a" (previous), "+m" (v_)
- : "q" (desired)
- );
- bool success = (previous == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = previous;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for(; !compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "lock ; xaddw %0, %1"
- : "+q" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "xchgw %0, %1"
- : "+q" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgw %2, %1"
- : "+a" (previous), "+m" (v_)
- : "q" (desired)
- );
- bool success = (previous == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = previous;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "lock ; xaddl %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "xchgl %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgl %2, %1"
- : "+a" (previous), "+m" (v_)
- : "r" (desired)
- );
- bool success = (previous == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = previous;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-#if defined(__x86_64__)
-template<typename T, bool Sign>
-class base_atomic<T, int, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "lock ; xaddq %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "xchgq %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgq %2, %1"
- : "+a" (previous), "+m" (v_)
- : "r" (desired)
- );
- bool success = (previous == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = previous;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-#endif
-
-/* pointers */
-
-#if !defined(__x86_64__)
-
-template<bool Sign>
-class base_atomic<void *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef ptrdiff_t difference_type;
- typedef void * value_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "xchgl %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- bool compare_exchange_strong(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgl %2, %1"
- : "+a" (previous), "+m" (v_)
- : "r" (desired)
- );
- bool success = (previous == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = previous;
- return success;
- }
-
- bool compare_exchange_weak(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "lock ; xaddl %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return reinterpret_cast<value_type>(v);
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T *, void *, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "xchgl %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgl %2, %1"
- : "+a" (previous), "+m" (v_)
- : "r" (desired)
- );
- bool success = (previous == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = previous;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- v = v * sizeof(*v_);
- platform_fence_before(order);
- __asm__ (
- "lock ; xaddl %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return reinterpret_cast<value_type>(v);
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-#else
-
-template<bool Sign>
-class base_atomic<void *, void *, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef ptrdiff_t difference_type;
- typedef void * value_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "xchgq %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- bool compare_exchange_strong(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgq %2, %1"
- : "+a" (previous), "+m" (v_)
- : "r" (desired)
- );
- bool success = (previous == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = previous;
- return success;
- }
-
- bool compare_exchange_weak(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "lock ; xaddq %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return reinterpret_cast<value_type>(v);
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T *, void *, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T * value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- __asm__ (
- "xchgq %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgq %2, %1"
- : "+a" (previous), "+m" (v_)
- : "r" (desired)
- );
- bool success = (previous == expected);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = previous;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- v = v * sizeof(*v_);
- platform_fence_before(order);
- __asm__ (
- "lock ; xaddq %0, %1"
- : "+r" (v), "+m" (v_)
- );
- platform_fence_after(order);
- return reinterpret_cast<value_type>(v);
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-#endif
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint8_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type const& v) BOOST_NOEXCEPT :
- v_(reinterpret_cast<storage_type const&>(v))
- {}
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- storage_type tmp;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- __asm__ (
- "xchgb %0, %1"
- : "+q" (tmp), "+m" (v_)
- );
- platform_fence_after(order);
- value_type res;
- memcpy(&res, &tmp, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s, desired_s;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- storage_type previous_s = expected_s;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgb %2, %1"
- : "+a" (previous_s), "+m" (v_)
- : "q" (desired_s)
- );
- bool success = (previous_s == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &previous_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint16_t storage_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type const& v) BOOST_NOEXCEPT :
- v_(reinterpret_cast<storage_type const&>(v))
- {}
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- storage_type tmp;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- __asm__ (
- "xchgw %0, %1"
- : "+q" (tmp), "+m" (v_)
- );
- platform_fence_after(order);
- value_type res;
- memcpy(&res, &tmp, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s, desired_s;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- storage_type previous_s = expected_s;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgw %2, %1"
- : "+a" (previous_s), "+m" (v_)
- : "q" (desired_s)
- );
- bool success = (previous_s == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &previous_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- __asm__ (
- "xchgl %0, %1"
- : "+q" (tmp), "+m" (v_)
- );
- platform_fence_after(order);
- value_type res;
- memcpy(&res, &tmp, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- storage_type previous_s = expected_s;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgl %2, %1"
- : "+a" (previous_s), "+m" (v_)
- : "q" (desired_s)
- );
- bool success = (previous_s == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &previous_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-#if defined(__x86_64__)
-template<typename T, bool Sign>
-class base_atomic<T, void, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint64_t storage_type;
-public:
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- __asm__ (
- "xchgq %0, %1"
- : "+q" (tmp), "+m" (v_)
- );
- platform_fence_after(order);
- value_type res;
- memcpy(&res, &tmp, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- storage_type previous_s = expected_s;
- platform_fence_before(success_order);
- __asm__ (
- "lock ; cmpxchgq %2, %1"
- : "+a" (previous_s), "+m" (v_)
- : "q" (desired_s)
- );
- bool success = (previous_s == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &previous_s, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-#endif
-
-#if !defined(__x86_64__) && defined(BOOST_ATOMIC_X86_HAS_CMPXCHG8B)
-
-template<typename T>
-inline bool
-platform_cmpxchg64_strong(T & expected, T desired, volatile T * ptr) BOOST_NOEXCEPT
-{
-#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
- const T oldval = __sync_val_compare_and_swap(ptr, expected, desired);
- const bool result = (oldval == expected);
- expected = oldval;
- return result;
-#else
- uint32_t scratch;
- T prev = expected;
- /* Make sure ebx is saved and restored properly in case
- this object is compiled as "position independent". Since
- programmers on x86 tend to forget specifying -DPIC or
- similar, always assume PIC.
-
- To make this work uniformly even in the non-PIC case,
- setup register constraints such that ebx can not be
- used by accident e.g. as base address for the variable
- to be modified. Accessing "scratch" should always be okay,
- as it can only be placed on the stack (and therefore
- accessed through ebp or esp only).
-
- In theory, could push/pop ebx onto/off the stack, but movs
- to a prepared stack slot turn out to be faster. */
- __asm__ __volatile__ (
- "movl %%ebx, %1\n"
- "movl %2, %%ebx\n"
- "lock; cmpxchg8b 0(%4)\n"
- "movl %1, %%ebx\n"
- : "=A" (prev), "=m" (scratch)
- : "D" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32)), "S" (ptr), "0" (prev)
- : "memory");
- bool success = (prev == expected);
- expected = prev;
- return success;
-#endif
-}
-
-// Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3A, 8.1.1. Guaranteed Atomic Operations:
-//
-// The Pentium processor (and newer processors since) guarantees that the following additional memory operations will always be carried out atomically:
-// * Reading or writing a quadword aligned on a 64-bit boundary
-//
-// Luckily, the memory is almost always 8-byte aligned in our case because atomic<> uses 64 bit native types for storage and dynamic memory allocations
-// have at least 8 byte alignment. The only unfortunate case is when atomic is placeod on the stack and it is not 8-byte aligned (like on 32 bit Windows).
-
-template<typename T>
-inline void
-platform_store64(T value, volatile T * ptr) BOOST_NOEXCEPT
-{
- if (((uint32_t)ptr & 0x00000007) == 0)
- {
-#if defined(__SSE2__)
- __asm__ __volatile__
- (
- "movq %1, %%xmm0\n\t"
- "movq %%xmm0, %0\n\t"
- : "=m" (*ptr)
- : "m" (value)
- : "memory", "xmm0"
- );
-#else
- __asm__ __volatile__
- (
- "fildll %1\n\t"
- "fistpll %0\n\t"
- : "=m" (*ptr)
- : "m" (value)
- : "memory"
- );
-#endif
- }
- else
- {
- T expected = *ptr;
- while (!platform_cmpxchg64_strong(expected, value, ptr))
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- }
-}
-
-template<typename T>
-inline T
-platform_load64(const volatile T * ptr) BOOST_NOEXCEPT
-{
- T value = T();
-
- if (((uint32_t)ptr & 0x00000007) == 0)
- {
-#if defined(__SSE2__)
- __asm__ __volatile__
- (
- "movq %1, %%xmm0\n\t"
- "movq %%xmm0, %0\n\t"
- : "=m" (value)
- : "m" (*ptr)
- : "memory", "xmm0"
- );
-#else
- __asm__ __volatile__
- (
- "fildll %1\n\t"
- "fistpll %0\n\t"
- : "=m" (value)
- : "m" (*ptr)
- : "memory"
- );
-#endif
- }
- else
- {
- // We don't care for comparison result here; the previous value will be stored into value anyway.
- platform_cmpxchg64_strong(value, value, const_cast<volatile T*>(ptr));
- }
-
- return value;
-}
-
-#endif
-
-}
-}
-}
-
-/* pull in 64-bit atomic type using cmpxchg8b above */
-#if !defined(__x86_64__) && defined(BOOST_ATOMIC_X86_HAS_CMPXCHG8B)
-#include <boost/atomic/detail/cas64strong.hpp>
-#endif
-
-#endif /* !defined(BOOST_ATOMIC_FORCE_FALLBACK) */
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/generic-cas.hpp b/3party/boost/boost/atomic/detail/generic-cas.hpp
deleted file mode 100644
index f8cc3cc92f..0000000000
--- a/3party/boost/boost/atomic/detail/generic-cas.hpp
+++ /dev/null
@@ -1,206 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_GENERIC_CAS_HPP
-#define BOOST_ATOMIC_DETAIL_GENERIC_CAS_HPP
-
-// Copyright (c) 2009 Helge Bahmann
-//
-// 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 <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/memory_order.hpp>
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/base.hpp>
-#include <boost/atomic/detail/builder.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-/* fallback implementation for various compilation targets;
-this is *not* efficient, particularly because all operations
-are fully fenced (full memory barriers before and after
-each operation) */
-
-#if defined(__GNUC__)
- namespace boost { namespace atomics { namespace detail {
- inline int32_t
- fenced_compare_exchange_strong_32(volatile int32_t *ptr, int32_t expected, int32_t desired)
- {
- return __sync_val_compare_and_swap_4(ptr, expected, desired);
- }
- #define BOOST_ATOMIC_HAVE_CAS32 1
-
- #if defined(__amd64__) || defined(__i686__)
- inline int64_t
- fenced_compare_exchange_strong_64(int64_t *ptr, int64_t expected, int64_t desired)
- {
- return __sync_val_compare_and_swap_8(ptr, expected, desired);
- }
- #define BOOST_ATOMIC_HAVE_CAS64 1
- #endif
- }}}
-
-#elif defined(__ICL) || defined(_MSC_VER)
-
- #if defined(_MSC_VER)
- #include <Windows.h>
- #include <intrin.h>
- #endif
-
- namespace boost { namespace atomics { namespace detail {
- inline int32_t
- fenced_compare_exchange_strong(int32_t *ptr, int32_t expected, int32_t desired)
- {
- return _InterlockedCompareExchange(reinterpret_cast<volatile long*>(ptr), desired, expected);
- }
- #define BOOST_ATOMIC_HAVE_CAS32 1
- #if defined(_WIN64)
- inline int64_t
- fenced_compare_exchange_strong(int64_t *ptr, int64_t expected, int64_t desired)
- {
- return _InterlockedCompareExchange64(ptr, desired, expected);
- }
- #define BOOST_ATOMIC_HAVE_CAS64 1
- #endif
- }}}
-
-#elif (defined(__ICC) || defined(__ECC))
- namespace boost { namespace atomics { namespace detail {
- inline int32_t
- fenced_compare_exchange_strong_32(int32_t *ptr, int32_t expected, int32_t desired)
- {
- return _InterlockedCompareExchange((void*)ptr, desired, expected);
- }
- #define BOOST_ATOMIC_HAVE_CAS32 1
- #if defined(__x86_64)
- inline int64_t
- fenced_compare_exchange_strong(int64_t *ptr, int64_t expected, int64_t desired)
- {
- return cas64<int>(ptr, expected, desired);
- }
- #define BOOST_ATOMIC_HAVE_CAS64 1
- #elif defined(__ECC) //IA-64 version
- inline int64_t
- fenced_compare_exchange_strong(int64_t *ptr, int64_t expected, int64_t desired)
- {
- return _InterlockedCompareExchange64((void*)ptr, desired, expected);
- }
- #define BOOST_ATOMIC_HAVE_CAS64 1
- #endif
- }}}
-
-#elif (defined(__SUNPRO_CC) && defined(__sparc))
- #include <sys/atomic.h>
- namespace boost { namespace atomics { namespace detail {
- inline int32_t
- fenced_compare_exchange_strong_32(int32_t *ptr, int32_t expected, int32_t desired)
- {
- return atomic_cas_32((volatile unsigned int*)ptr, expected, desired);
- }
- #define BOOST_ATOMIC_HAVE_CAS32 1
-
- /* FIXME: check for 64 bit mode */
- inline int64_t
- fenced_compare_exchange_strong_64(int64_t *ptr, int64_t expected, int64_t desired)
- {
- return atomic_cas_64((volatile unsigned long long*)ptr, expected, desired);
- }
- #define BOOST_ATOMIC_HAVE_CAS64 1
- }}}
-#endif
-
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-#ifdef BOOST_ATOMIC_HAVE_CAS32
-template<typename T>
-class atomic_generic_cas32
-{
-private:
- typedef atomic_generic_cas32 this_type;
-public:
- explicit atomic_generic_cas32(T v) : i((int32_t)v) {}
- atomic_generic_cas32() {}
- T load(memory_order order=memory_order_seq_cst) const volatile
- {
- T expected=(T)i;
- do { } while(!const_cast<this_type *>(this)->compare_exchange_weak(expected, expected, order, memory_order_relaxed));
- return expected;
- }
- void store(T v, memory_order order=memory_order_seq_cst) volatile
- {
- exchange(v);
- }
- bool compare_exchange_strong(
- T &expected,
- T desired,
- memory_order success_order,
- memory_order failure_order) volatile
- {
- T found;
- found=(T)fenced_compare_exchange_strong_32(&i, (int32_t)expected, (int32_t)desired);
- bool success=(found==expected);
- expected=found;
- return success;
- }
- bool compare_exchange_weak(
- T &expected,
- T desired,
- memory_order success_order,
- memory_order failure_order) volatile
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
- T exchange(T r, memory_order order=memory_order_seq_cst) volatile
- {
- T expected=(T)i;
- do { } while(!compare_exchange_weak(expected, r, order, memory_order_relaxed));
- return expected;
- }
-
- bool is_lock_free(void) const volatile {return true;}
- typedef T integral_type;
-private:
- mutable int32_t i;
-};
-
-template<typename T>
-class platform_atomic_integral<T, 4> :
- public build_atomic_from_exchange<atomic_generic_cas32<T> >
-{
-public:
- typedef build_atomic_from_exchange<atomic_generic_cas32<T> > super;
- explicit platform_atomic_integral(T v) : super(v) {}
- platform_atomic_integral(void) {}
-};
-
-template<typename T>
-class platform_atomic_integral<T, 1> :
- public build_atomic_from_larger_type<atomic_generic_cas32<int32_t>, T>
-{
-public:
- typedef build_atomic_from_larger_type<atomic_generic_cas32<int32_t>, T> super;
-
- explicit platform_atomic_integral(T v) : super(v) {}
- platform_atomic_integral(void) {}
-};
-
-template<typename T>
-class platform_atomic_integral<T, 2> :
- public build_atomic_from_larger_type<atomic_generic_cas32<int32_t>, T>
-{
-public:
- typedef build_atomic_from_larger_type<atomic_generic_cas32<int32_t>, T> super;
-
- explicit platform_atomic_integral(T v) : super(v) {}
- platform_atomic_integral(void) {}
-};
-#endif
-
-} } }
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/int_sizes.hpp b/3party/boost/boost/atomic/detail/int_sizes.hpp
new file mode 100644
index 0000000000..d06ed42a11
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/int_sizes.hpp
@@ -0,0 +1,140 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/int_sizes.hpp
+ *
+ * This header defines macros for testing buitin integer type sizes
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+// GCC and compatible compilers define internal macros with builtin type traits
+#if defined(__SIZEOF_SHORT__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT __SIZEOF_SHORT__
+#endif
+#if defined(__SIZEOF_INT__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT __SIZEOF_INT__
+#endif
+#if defined(__SIZEOF_LONG__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG __SIZEOF_LONG__
+#endif
+#if defined(__SIZEOF_LONG_LONG__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG __SIZEOF_LONG_LONG__
+#endif
+#if defined(__SIZEOF_WCHAR_T__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T __SIZEOF_WCHAR_T__
+#endif
+#if defined(__SIZEOF_POINTER__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER __SIZEOF_POINTER__
+#elif defined(_MSC_VER)
+#if defined(_M_AMD64) || defined(_M_IA64)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 8
+#else
+#define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 4
+#endif
+#endif
+
+#if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\
+ !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG)
+
+// Try to deduce sizes from limits
+#include <limits.h>
+#include <boost/cstdint.hpp>
+
+#if (USHRT_MAX + 0) == 0xff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 1
+#elif (USHRT_MAX + 0) == 0xffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 2
+#elif (USHRT_MAX + 0) == 0xffffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 4
+#elif (USHRT_MAX + 0) == UINT64_C(0xffffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 8
+#endif
+
+#if (UINT_MAX + 0) == 0xff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 1
+#elif (UINT_MAX + 0) == 0xffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 2
+#elif (UINT_MAX + 0) == 0xffffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 4
+#elif (UINT_MAX + 0) == UINT64_C(0xffffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 8
+#endif
+
+#if (ULONG_MAX + 0) == 0xff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 1
+#elif (ULONG_MAX + 0) == 0xffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 2
+#elif (ULONG_MAX + 0) == 0xffffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 4
+#elif (ULONG_MAX + 0) == UINT64_C(0xffffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 8
+#endif
+
+#if defined(__hpux) // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8
+#else
+
+// The list of the non-standard macros (the ones except ULLONG_MAX) is taken from cstdint.hpp
+#if defined(ULLONG_MAX)
+#define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULLONG_MAX
+#elif defined(ULONG_LONG_MAX)
+#define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONG_LONG_MAX
+#elif defined(ULONGLONG_MAX)
+#define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONGLONG_MAX
+#elif defined(_LLONG_MAX) // strangely enough, this one seems to be holding the limit for the unsigned integer
+#define BOOST_ATOMIC_DETAIL_ULLONG_MAX _LLONG_MAX
+#endif
+
+#if (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 1
+#elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 2
+#elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 4
+#elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == UINT64_C(0xffffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8
+#endif
+
+#endif // defined(__hpux)
+
+#endif
+
+#if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T)
+
+#include <wchar.h>
+#include <boost/cstdint.hpp>
+
+#if defined(_MSC_VER) && _MSC_VER <= 1310
+// MSVC 7.1 defines WCHAR_MAX to a value not suitable for constant expressions
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2
+#elif (WCHAR_MAX + 0) == 0xff || (WCHAR_MAX + 0) == 0x7f
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 1
+#elif (WCHAR_MAX + 0) == 0xffff || (WCHAR_MAX + 0) == 0x7fff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2
+#elif (WCHAR_MAX + 0) == 0xffffffff || (WCHAR_MAX + 0) == 0x7fffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 4
+#elif (WCHAR_MAX + 0) == UINT64_C(0xffffffffffffffff) || (WCHAR_MAX + 0) == INT64_C(0x7fffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 8
+#endif
+#endif
+
+#if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\
+ !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG) ||\
+ !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T)
+#error Boost.Atomic: Failed to determine builtin integer sizes, the target platform is not supported. Please, report to the developers.
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/interlocked.hpp b/3party/boost/boost/atomic/detail/interlocked.hpp
index 2cf21a1b5f..fa11befe6e 100644
--- a/3party/boost/boost/atomic/detail/interlocked.hpp
+++ b/3party/boost/boost/atomic/detail/interlocked.hpp
@@ -2,7 +2,7 @@
#define BOOST_ATOMIC_DETAIL_INTERLOCKED_HPP
// Copyright (c) 2009 Helge Bahmann
-// Copyright (c) 2012, 2013 Andrey Semashev
+// Copyright (c) 2012 - 2014 Andrey Semashev
//
// Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENSE_1_0.txt or copy at
@@ -10,22 +10,57 @@
#include <boost/atomic/detail/config.hpp>
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
-#if defined(_WIN32_WCE) || (defined(_MSC_VER) && _MSC_VER < 1400)
+#if defined(_WIN32_WCE)
-#include <boost/detail/interlocked.hpp>
+#if _WIN32_WCE >= 0x600
-#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(dest, exchange, compare) BOOST_INTERLOCKED_COMPARE_EXCHANGE((long*)(dest), exchange, compare)
-#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE(dest, newval) BOOST_INTERLOCKED_EXCHANGE((long*)(dest), newval)
-#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(dest, addend) BOOST_INTERLOCKED_EXCHANGE_ADD((long*)(dest), addend)
-#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest, exchange, compare) BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest, exchange, compare)
-#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER(dest, newval) BOOST_INTERLOCKED_EXCHANGE_POINTER(dest, newval)
-#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER(dest, byte_offset) ((void*)BOOST_INTERLOCKED_EXCHANGE_ADD((long*)(dest), byte_offset))
+extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );
+extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long );
+extern "C" long __cdecl _InterlockedExchange( long volatile *, long );
-#elif defined(_MSC_VER) && _MSC_VER >= 1400
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(dest, exchange, compare) _InterlockedCompareExchange((long*)(dest), exchange, compare)
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(dest, addend) _InterlockedExchangeAdd((long*)(dest), (long)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE(dest, newval) _InterlockedExchange((long*)(dest), (long)(newval))
+
+#else // _WIN32_WCE >= 0x600
+
+extern "C" long __cdecl InterlockedCompareExchange( long*, long, long );
+extern "C" long __cdecl InterlockedExchangeAdd( long*, long );
+extern "C" long __cdecl InterlockedExchange( long*, long );
+
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(dest, exchange, compare) InterlockedCompareExchange((long*)(dest), exchange, compare)
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(dest, addend) InterlockedExchangeAdd((long*)(dest), (long)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE(dest, newval) InterlockedExchange((long*)(dest), (long)(newval))
+
+#endif // _WIN32_WCE >= 0x600
+
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest, exchange, compare) ((void*)BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE((long*)(dest), (long)(exchange), (long)(compare)))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER(dest, exchange) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE((long*)(dest), (long)(exchange)))
+
+#elif defined(_MSC_VER) && _MSC_VER >= 1310
+
+#if _MSC_VER < 1400
+
+extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );
+extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long );
+extern "C" long __cdecl _InterlockedExchange( long volatile *, long );
+
+#pragma intrinsic(_InterlockedCompareExchange)
+#pragma intrinsic(_InterlockedExchangeAdd)
+#pragma intrinsic(_InterlockedExchange)
+
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(dest, exchange, compare) _InterlockedCompareExchange((long*)(dest), exchange, compare)
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(dest, addend) _InterlockedExchangeAdd((long*)(dest), (long)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE(dest, newval) _InterlockedExchange((long*)(dest), (long)(newval))
+
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest, exchange, compare) ((void*)BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE((long*)(dest), (long)(exchange), (long)(compare)))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER(dest, exchange) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE((long*)(dest), (long)(exchange)))
+
+#else // _MSC_VER < 1400
#include <intrin.h>
@@ -43,6 +78,16 @@
#define BOOST_ATOMIC_INTERLOCKED_OR(dest, arg) _InterlockedOr((long*)(dest), (long)(arg))
#define BOOST_ATOMIC_INTERLOCKED_XOR(dest, arg) _InterlockedXor((long*)(dest), (long)(arg))
+#if (defined(_M_IX86) && _M_IX86 >= 500) || defined(_M_AMD64) || defined(_M_IA64)
+#pragma intrinsic(_InterlockedCompareExchange64)
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64(dest, exchange, compare) _InterlockedCompareExchange64((__int64*)(dest), (__int64)(exchange), (__int64)(compare))
+#endif
+
+#if _MSC_VER >= 1500 && defined(_M_AMD64)
+#pragma intrinsic(_InterlockedCompareExchange128)
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE128(dest, exchange, compare) _InterlockedCompareExchange128((__int64*)(dest), ((const __int64*)(&exchange))[1], ((const __int64*)(&exchange))[0], (__int64*)(compare))
+#endif
+
#if _MSC_VER >= 1600
// MSVC 2010 and later provide intrinsics for 8 and 16 bit integers.
@@ -81,14 +126,12 @@
#if defined(_M_AMD64) || defined(_M_IA64)
-#pragma intrinsic(_InterlockedCompareExchange64)
#pragma intrinsic(_InterlockedExchangeAdd64)
#pragma intrinsic(_InterlockedExchange64)
#pragma intrinsic(_InterlockedAnd64)
#pragma intrinsic(_InterlockedOr64)
#pragma intrinsic(_InterlockedXor64)
-#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64(dest, exchange, compare) _InterlockedCompareExchange64((__int64*)(dest), (__int64)(exchange), (__int64)(compare))
#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64(dest, addend) _InterlockedExchangeAdd64((__int64*)(dest), (__int64)(addend))
#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE64(dest, newval) _InterlockedExchange64((__int64*)(dest), (__int64)(newval))
#define BOOST_ATOMIC_INTERLOCKED_AND64(dest, arg) _InterlockedAnd64((__int64*)(dest), (__int64)(arg))
@@ -102,15 +145,223 @@
#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER(dest, newval) _InterlockedExchangePointer((void**)(dest), (void*)(newval))
#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64((long*)(dest), byte_offset))
-#else // defined(_M_AMD64) || defined(_M_IA64)
+#elif defined(_M_IX86)
#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest, exchange, compare) ((void*)_InterlockedCompareExchange((long*)(dest), (long)(exchange), (long)(compare)))
#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER(dest, newval) ((void*)_InterlockedExchange((long*)(dest), (long)(newval)))
#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD((long*)(dest), byte_offset))
-#endif // defined(_M_AMD64) || defined(_M_IA64)
+#endif
+
+#if _MSC_VER >= 1700 && defined(_M_ARM)
+
+#pragma intrinsic(_InterlockedExchangeAdd64)
+#pragma intrinsic(_InterlockedExchange64)
+#pragma intrinsic(_InterlockedAnd64)
+#pragma intrinsic(_InterlockedOr64)
+#pragma intrinsic(_InterlockedXor64)
+
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64(dest, addend) _InterlockedExchangeAdd64((__int64*)(dest), (__int64)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE64(dest, newval) _InterlockedExchange64((__int64*)(dest), (__int64)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_AND64(dest, arg) _InterlockedAnd64((__int64*)(dest), (__int64)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR64(dest, arg) _InterlockedOr64((__int64*)(dest), (__int64)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR64(dest, arg) _InterlockedXor64((__int64*)(dest), (__int64)(arg))
+
+#pragma intrinsic(_InterlockedCompareExchange8_nf)
+#pragma intrinsic(_InterlockedCompareExchange8_acq)
+#pragma intrinsic(_InterlockedCompareExchange8_rel)
+#pragma intrinsic(_InterlockedCompareExchange16_nf)
+#pragma intrinsic(_InterlockedCompareExchange16_acq)
+#pragma intrinsic(_InterlockedCompareExchange16_rel)
+#pragma intrinsic(_InterlockedCompareExchange_nf)
+#pragma intrinsic(_InterlockedCompareExchange_acq)
+#pragma intrinsic(_InterlockedCompareExchange_rel)
+#pragma intrinsic(_InterlockedCompareExchange64)
+#pragma intrinsic(_InterlockedCompareExchange64_nf)
+#pragma intrinsic(_InterlockedCompareExchange64_acq)
+#pragma intrinsic(_InterlockedCompareExchange64_rel)
+#pragma intrinsic(_InterlockedCompareExchangePointer)
+#pragma intrinsic(_InterlockedCompareExchangePointer_nf)
+#pragma intrinsic(_InterlockedCompareExchangePointer_acq)
+#pragma intrinsic(_InterlockedCompareExchangePointer_rel)
+
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8_RELAXED(dest, exchange, compare) _InterlockedCompareExchange8_nf((char*)(dest), (char)(exchange), (char)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8_ACQUIRE(dest, exchange, compare) _InterlockedCompareExchange8_acq((char*)(dest), (char)(exchange), (char)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8_RELEASE(dest, exchange, compare) _InterlockedCompareExchange8_rel((char*)(dest), (char)(exchange), (char)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16_RELAXED(dest, exchange, compare) _InterlockedCompareExchange16_nf((short*)(dest), (short)(exchange), (short)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16_ACQUIRE(dest, exchange, compare) _InterlockedCompareExchange16_acq((short*)(dest), (short)(exchange), (short)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16_RELEASE(dest, exchange, compare) _InterlockedCompareExchange16_rel((short*)(dest), (short)(exchange), (short)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_RELAXED(dest, exchange, compare) _InterlockedCompareExchange_nf((long*)(dest), (long)(exchange), (long)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_ACQUIRE(dest, exchange, compare) _InterlockedCompareExchange_acq((long*)(dest), (long)(exchange), (long)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_RELEASE(dest, exchange, compare) _InterlockedCompareExchange_rel((long*)(dest), (long)(exchange), (long)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64(dest, exchange, compare) _InterlockedCompareExchange64((__int64*)(dest), (__int64)(exchange), (__int64)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64_RELAXED(dest, exchange, compare) _InterlockedCompareExchange64_nf((__int64*)(dest), (__int64)(exchange), (__int64)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64_ACQUIRE(dest, exchange, compare) _InterlockedCompareExchange64_acq((__int64*)(dest), (__int64)(exchange), (__int64)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64_RELEASE(dest, exchange, compare) _InterlockedCompareExchange64_rel((__int64*)(dest), (__int64)(exchange), (__int64)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest, exchange, compare) _InterlockedCompareExchangePointer((void**)(dest), (void*)(exchange), (void*)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER_RELAXED(dest, exchange, compare) _InterlockedCompareExchangePointer_nf((void**)(dest), (void*)(exchange), (void*)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER_ACQUIRE(dest, exchange, compare) _InterlockedCompareExchangePointer_acq((void**)(dest), (void*)(exchange), (void*)(compare))
+#define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER_RELEASE(dest, exchange, compare) _InterlockedCompareExchangePointer_rel((void**)(dest), (void*)(exchange), (void*)(compare))
+
+#pragma intrinsic(_InterlockedExchangeAdd8_nf)
+#pragma intrinsic(_InterlockedExchangeAdd8_acq)
+#pragma intrinsic(_InterlockedExchangeAdd8_rel)
+#pragma intrinsic(_InterlockedExchangeAdd16_nf)
+#pragma intrinsic(_InterlockedExchangeAdd16_acq)
+#pragma intrinsic(_InterlockedExchangeAdd16_rel)
+#pragma intrinsic(_InterlockedExchangeAdd_nf)
+#pragma intrinsic(_InterlockedExchangeAdd_acq)
+#pragma intrinsic(_InterlockedExchangeAdd_rel)
+#pragma intrinsic(_InterlockedExchangeAdd64_nf)
+#pragma intrinsic(_InterlockedExchangeAdd64_acq)
+#pragma intrinsic(_InterlockedExchangeAdd64_rel)
+
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8_RELAXED(dest, addend) _InterlockedExchangeAdd8_nf((char*)(dest), (char)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8_ACQUIRE(dest, addend) _InterlockedExchangeAdd8_acq((char*)(dest), (char)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8_RELEASE(dest, addend) _InterlockedExchangeAdd8_rel((char*)(dest), (char)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16_RELAXED(dest, addend) _InterlockedExchangeAdd16_nf((short*)(dest), (short)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16_ACQUIRE(dest, addend) _InterlockedExchangeAdd16_acq((short*)(dest), (short)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16_RELEASE(dest, addend) _InterlockedExchangeAdd16_rel((short*)(dest), (short)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_RELAXED(dest, addend) _InterlockedExchangeAdd_nf((long*)(dest), (long)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_ACQUIRE(dest, addend) _InterlockedExchangeAdd_acq((long*)(dest), (long)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_RELEASE(dest, addend) _InterlockedExchangeAdd_rel((long*)(dest), (long)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_RELAXED(dest, addend) _InterlockedExchangeAdd64_nf((__int64*)(dest), (__int64)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_ACQUIRE(dest, addend) _InterlockedExchangeAdd64_acq((__int64*)(dest), (__int64)(addend))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_RELEASE(dest, addend) _InterlockedExchangeAdd64_rel((__int64*)(dest), (__int64)(addend))
+
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD((long*)(dest), byte_offset))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER_RELAXED(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_RELAXED((long*)(dest), byte_offset))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER_ACQUIRE(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_ACQUIRE((long*)(dest), byte_offset))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER_RELEASE(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_RELEASE((long*)(dest), byte_offset))
+
+#pragma intrinsic(_InterlockedExchange8_nf)
+#pragma intrinsic(_InterlockedExchange8_acq)
+#pragma intrinsic(_InterlockedExchange16_nf)
+#pragma intrinsic(_InterlockedExchange16_acq)
+#pragma intrinsic(_InterlockedExchange_nf)
+#pragma intrinsic(_InterlockedExchange_acq)
+#pragma intrinsic(_InterlockedExchange64_nf)
+#pragma intrinsic(_InterlockedExchange64_acq)
+#pragma intrinsic(_InterlockedExchangePointer)
+#pragma intrinsic(_InterlockedExchangePointer_nf)
+#pragma intrinsic(_InterlockedExchangePointer_acq)
+#if _MSC_VER >= 1800
+#pragma intrinsic(_InterlockedExchange8_rel)
+#pragma intrinsic(_InterlockedExchange16_rel)
+#pragma intrinsic(_InterlockedExchange_rel)
+#pragma intrinsic(_InterlockedExchange64_rel)
+#pragma intrinsic(_InterlockedExchangePointer_rel)
+#endif
+
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE8_RELAXED(dest, newval) _InterlockedExchange8_nf((char*)(dest), (char)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE8_ACQUIRE(dest, newval) _InterlockedExchange8_acq((char*)(dest), (char)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE16_RELAXED(dest, newval) _InterlockedExchange16_nf((short*)(dest), (short)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE16_ACQUIRE(dest, newval) _InterlockedExchange16_acq((short*)(dest), (short)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_RELAXED(dest, newval) _InterlockedExchange_nf((long*)(dest), (long)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ACQUIRE(dest, newval) _InterlockedExchange_acq((long*)(dest), (long)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE64_RELAXED(dest, newval) _InterlockedExchange64_nf((__int64*)(dest), (__int64)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE64_ACQUIRE(dest, newval) _InterlockedExchange64_acq((__int64*)(dest), (__int64)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER(dest, newval) _InterlockedExchangePointer((void**)(dest), (void*)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER_RELAXED(dest, newval) _InterlockedExchangePointer_nf((void**)(dest), (void*)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER_ACQUIRE(dest, newval) _InterlockedExchangePointer_acq((void**)(dest), (void*)(newval))
+
+#if _MSC_VER >= 1800
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE8_RELEASE(dest, newval) _InterlockedExchange8_rel((char*)(dest), (char)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE16_RELEASE(dest, newval) _InterlockedExchange16_rel((short*)(dest), (short)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_RELEASE(dest, newval) _InterlockedExchange_rel((long*)(dest), (long)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE64_RELEASE(dest, newval) _InterlockedExchange64_rel((__int64*)(dest), (__int64)(newval))
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER_RELEASE(dest, newval) _InterlockedExchangePointer_rel((void**)(dest), (void*)(newval))
+#else
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE8_RELEASE(dest, newval) BOOST_ATOMIC_INTERLOCKED_EXCHANGE8(dest, newval)
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE16_RELEASE(dest, newval) BOOST_ATOMIC_INTERLOCKED_EXCHANGE16(dest, newval)
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_RELEASE(dest, newval) BOOST_ATOMIC_INTERLOCKED_EXCHANGE(dest, newval)
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE64_RELEASE(dest, newval) BOOST_ATOMIC_INTERLOCKED_EXCHANGE64(dest, newval)
+#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER_RELEASE(dest, newval) BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER(dest, newval)
+#endif
-#else // defined(_MSC_VER) && _MSC_VER >= 1400
+#pragma intrinsic(_InterlockedAnd8_nf)
+#pragma intrinsic(_InterlockedAnd8_acq)
+#pragma intrinsic(_InterlockedAnd8_rel)
+#pragma intrinsic(_InterlockedAnd16_nf)
+#pragma intrinsic(_InterlockedAnd16_acq)
+#pragma intrinsic(_InterlockedAnd16_rel)
+#pragma intrinsic(_InterlockedAnd_nf)
+#pragma intrinsic(_InterlockedAnd_acq)
+#pragma intrinsic(_InterlockedAnd_rel)
+#pragma intrinsic(_InterlockedAnd64_nf)
+#pragma intrinsic(_InterlockedAnd64_acq)
+#pragma intrinsic(_InterlockedAnd64_rel)
+
+#define BOOST_ATOMIC_INTERLOCKED_AND8_RELAXED(dest, arg) _InterlockedAnd8_nf((char*)(dest), (char)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND8_ACQUIRE(dest, arg) _InterlockedAnd8_acq((char*)(dest), (char)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND8_RELEASE(dest, arg) _InterlockedAnd8_rel((char*)(dest), (char)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND16_RELAXED(dest, arg) _InterlockedAnd16_nf((short*)(dest), (short)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND16_ACQUIRE(dest, arg) _InterlockedAnd16_acq((short*)(dest), (short)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND16_RELEASE(dest, arg) _InterlockedAnd16_rel((short*)(dest), (short)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND_RELAXED(dest, arg) _InterlockedAnd_nf((long*)(dest), (long)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND_ACQUIRE(dest, arg) _InterlockedAnd_acq((long*)(dest), (long)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND_RELEASE(dest, arg) _InterlockedAnd_rel((long*)(dest), (long)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND64_RELAXED(dest, arg) _InterlockedAnd64_nf((__int64*)(dest), (__int64)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND64_ACQUIRE(dest, arg) _InterlockedAnd64_acq((__int64*)(dest), (__int64)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_AND64_RELEASE(dest, arg) _InterlockedAnd64_rel((__int64*)(dest), (__int64)(arg))
+
+#pragma intrinsic(_InterlockedOr8_nf)
+#pragma intrinsic(_InterlockedOr8_acq)
+#pragma intrinsic(_InterlockedOr8_rel)
+#pragma intrinsic(_InterlockedOr16_nf)
+#pragma intrinsic(_InterlockedOr16_acq)
+#pragma intrinsic(_InterlockedOr16_rel)
+#pragma intrinsic(_InterlockedOr_nf)
+#pragma intrinsic(_InterlockedOr_acq)
+#pragma intrinsic(_InterlockedOr_rel)
+#pragma intrinsic(_InterlockedOr64_nf)
+#pragma intrinsic(_InterlockedOr64_acq)
+#pragma intrinsic(_InterlockedOr64_rel)
+
+#define BOOST_ATOMIC_INTERLOCKED_OR8_RELAXED(dest, arg) _InterlockedOr8_nf((char*)(dest), (char)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR8_ACQUIRE(dest, arg) _InterlockedOr8_acq((char*)(dest), (char)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR8_RELEASE(dest, arg) _InterlockedOr8_rel((char*)(dest), (char)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR16_RELAXED(dest, arg) _InterlockedOr16_nf((short*)(dest), (short)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR16_ACQUIRE(dest, arg) _InterlockedOr16_acq((short*)(dest), (short)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR16_RELEASE(dest, arg) _InterlockedOr16_rel((short*)(dest), (short)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR_RELAXED(dest, arg) _InterlockedOr_nf((long*)(dest), (long)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR_ACQUIRE(dest, arg) _InterlockedOr_acq((long*)(dest), (long)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR_RELEASE(dest, arg) _InterlockedOr_rel((long*)(dest), (long)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR64_RELAXED(dest, arg) _InterlockedOr64_nf((__int64*)(dest), (__int64)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR64_ACQUIRE(dest, arg) _InterlockedOr64_acq((__int64*)(dest), (__int64)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_OR64_RELEASE(dest, arg) _InterlockedOr64_rel((__int64*)(dest), (__int64)(arg))
+
+#pragma intrinsic(_InterlockedXor8_nf)
+#pragma intrinsic(_InterlockedXor8_acq)
+#pragma intrinsic(_InterlockedXor8_rel)
+#pragma intrinsic(_InterlockedXor16_nf)
+#pragma intrinsic(_InterlockedXor16_acq)
+#pragma intrinsic(_InterlockedXor16_rel)
+#pragma intrinsic(_InterlockedXor_nf)
+#pragma intrinsic(_InterlockedXor_acq)
+#pragma intrinsic(_InterlockedXor_rel)
+#pragma intrinsic(_InterlockedXor64_nf)
+#pragma intrinsic(_InterlockedXor64_acq)
+#pragma intrinsic(_InterlockedXor64_rel)
+
+#define BOOST_ATOMIC_INTERLOCKED_XOR8_RELAXED(dest, arg) _InterlockedXor8_nf((char*)(dest), (char)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR8_ACQUIRE(dest, arg) _InterlockedXor8_acq((char*)(dest), (char)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR8_RELEASE(dest, arg) _InterlockedXor8_rel((char*)(dest), (char)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR16_RELAXED(dest, arg) _InterlockedXor16_nf((short*)(dest), (short)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR16_ACQUIRE(dest, arg) _InterlockedXor16_acq((short*)(dest), (short)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR16_RELEASE(dest, arg) _InterlockedXor16_rel((short*)(dest), (short)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR_RELAXED(dest, arg) _InterlockedXor_nf((long*)(dest), (long)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR_ACQUIRE(dest, arg) _InterlockedXor_acq((long*)(dest), (long)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR_RELEASE(dest, arg) _InterlockedXor_rel((long*)(dest), (long)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR64_RELAXED(dest, arg) _InterlockedXor64_nf((__int64*)(dest), (__int64)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR64_ACQUIRE(dest, arg) _InterlockedXor64_acq((__int64*)(dest), (__int64)(arg))
+#define BOOST_ATOMIC_INTERLOCKED_XOR64_RELEASE(dest, arg) _InterlockedXor64_rel((__int64*)(dest), (__int64)(arg))
+
+#endif // _MSC_VER >= 1700 && defined(_M_ARM)
+
+#endif // _MSC_VER < 1400
+
+#else // defined(_MSC_VER) && _MSC_VER >= 1310
#if defined(BOOST_USE_WINDOWS_H)
diff --git a/3party/boost/boost/atomic/detail/link.hpp b/3party/boost/boost/atomic/detail/link.hpp
new file mode 100644
index 0000000000..4f522acbcf
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/link.hpp
@@ -0,0 +1,58 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2012 Hartmut Kaiser
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/config.hpp
+ *
+ * This header defines macros for linking with compiled library of Boost.Atomic
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_LINK_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_LINK_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Set up dll import/export options
+#if (defined(BOOST_ATOMIC_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && \
+ !defined(BOOST_ATOMIC_STATIC_LINK)
+
+#if defined(BOOST_ATOMIC_SOURCE)
+#define BOOST_ATOMIC_DECL BOOST_SYMBOL_EXPORT
+#define BOOST_ATOMIC_BUILD_DLL
+#else
+#define BOOST_ATOMIC_DECL BOOST_SYMBOL_IMPORT
+#endif
+
+#endif // building a shared library
+
+#ifndef BOOST_ATOMIC_DECL
+#define BOOST_ATOMIC_DECL
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Auto library naming
+#if !defined(BOOST_ATOMIC_SOURCE) && !defined(BOOST_ALL_NO_LIB) && \
+ !defined(BOOST_ATOMIC_NO_LIB)
+
+#define BOOST_LIB_NAME boost_atomic
+
+// tell the auto-link code to select a dll when required:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_ATOMIC_DYN_LINK)
+#define BOOST_DYN_LINK
+#endif
+
+#include <boost/config/auto_link.hpp>
+
+#endif // auto-linking disabled
+
+#endif
diff --git a/3party/boost/boost/atomic/detail/linux-arm.hpp b/3party/boost/boost/atomic/detail/linux-arm.hpp
deleted file mode 100644
index af1606e282..0000000000
--- a/3party/boost/boost/atomic/detail/linux-arm.hpp
+++ /dev/null
@@ -1,189 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_LINUX_ARM_HPP
-#define BOOST_ATOMIC_DETAIL_LINUX_ARM_HPP
-
-// 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)
-//
-// Copyright (c) 2009, 2011 Helge Bahmann
-// Copyright (c) 2009 Phil Endecott
-// Copyright (c) 2013 Tim Blechmann
-// Linux-specific code by Phil Endecott
-
-// Different ARM processors have different atomic instructions. In particular,
-// architecture versions before v6 (which are still in widespread use, e.g. the
-// Intel/Marvell XScale chips like the one in the NSLU2) have only atomic swap.
-// On Linux the kernel provides some support that lets us abstract away from
-// these differences: it provides emulated CAS and barrier functions at special
-// addresses that are guaranteed not to be interrupted by the kernel. Using
-// this facility is slightly slower than inline assembler would be, but much
-// faster than a system call.
-//
-// While this emulated CAS is "strong" in the sense that it does not fail
-// "spuriously" (i.e.: it never fails to perform the exchange when the value
-// found equals the value expected), it does not return the found value on
-// failure. To satisfy the atomic API, compare_exchange_{weak|strong} must
-// return the found value on failure, and we have to manually load this value
-// after the emulated CAS reports failure. This in turn introduces a race
-// between the CAS failing (due to the "wrong" value being found) and subsequently
-// loading (which might turn up the "right" value). From an application's
-// point of view this looks like "spurious failure", and therefore the
-// emulated CAS is only good enough to provide compare_exchange_weak
-// semantics.
-
-#include <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/memory_order.hpp>
-#include <boost/atomic/detail/config.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-inline void
-arm_barrier(void)
-{
- void (*kernel_dmb)(void) = (void (*)(void)) 0xffff0fa0;
- kernel_dmb();
-}
-
-inline void
-platform_fence_before(memory_order order)
-{
- switch(order) {
- case memory_order_release:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- arm_barrier();
- case memory_order_consume:
- default:;
- }
-}
-
-inline void
-platform_fence_after(memory_order order)
-{
- switch(order) {
- case memory_order_acquire:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- arm_barrier();
- default:;
- }
-}
-
-inline void
-platform_fence_before_store(memory_order order)
-{
- platform_fence_before(order);
-}
-
-inline void
-platform_fence_after_store(memory_order order)
-{
- if (order == memory_order_seq_cst)
- arm_barrier();
-}
-
-inline void
-platform_fence_after_load(memory_order order)
-{
- platform_fence_after(order);
-}
-
-template<typename T>
-inline bool
-platform_cmpxchg32(T & expected, T desired, volatile T * ptr)
-{
- typedef T (*kernel_cmpxchg32_t)(T oldval, T newval, volatile T * ptr);
-
- if (((kernel_cmpxchg32_t) 0xffff0fc0)(expected, desired, ptr) == 0) {
- return true;
- } else {
- expected = *ptr;
- return false;
- }
-}
-
-}
-}
-
-#define BOOST_ATOMIC_THREAD_FENCE 2
-inline void
-atomic_thread_fence(memory_order order)
-{
- switch(order) {
- case memory_order_acquire:
- case memory_order_release:
- case memory_order_acq_rel:
- case memory_order_seq_cst:
- atomics::detail::arm_barrier();
- default:;
- }
-}
-
-#define BOOST_ATOMIC_SIGNAL_FENCE 2
-inline void
-atomic_signal_fence(memory_order)
-{
- __asm__ __volatile__ ("" ::: "memory");
-}
-
-class atomic_flag
-{
-private:
- atomic_flag(const atomic_flag &) /* = delete */ ;
- atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
- uint32_t v_;
-public:
- BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(0) {}
-
- void
- clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before_store(order);
- const_cast<volatile uint32_t &>(v_) = 0;
- atomics::detail::platform_fence_after_store(order);
- }
-
- bool
- test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before(order);
- uint32_t expected = v_;
- do {
- if (expected == 1)
- break;
- } while (!atomics::detail::platform_cmpxchg32(expected, (uint32_t)1, &v_));
- atomics::detail::platform_fence_after(order);
- return expected;
- }
-};
-#define BOOST_ATOMIC_FLAG_LOCK_FREE 2
-
-}
-
-#include <boost/atomic/detail/base.hpp>
-
-#if !defined(BOOST_ATOMIC_FORCE_FALLBACK)
-
-#define BOOST_ATOMIC_CHAR_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 2
-#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 2
-#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 2
-#define BOOST_ATOMIC_SHORT_LOCK_FREE 2
-#define BOOST_ATOMIC_INT_LOCK_FREE 2
-#define BOOST_ATOMIC_LONG_LOCK_FREE 2
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
-#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
-#define BOOST_ATOMIC_BOOL_LOCK_FREE 2
-
-#include <boost/atomic/detail/cas32weak.hpp>
-
-#endif /* !defined(BOOST_ATOMIC_FORCE_FALLBACK) */
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/lockpool.hpp b/3party/boost/boost/atomic/detail/lockpool.hpp
index b86cfae235..4e249aa048 100644
--- a/3party/boost/boost/atomic/detail/lockpool.hpp
+++ b/3party/boost/boost/atomic/detail/lockpool.hpp
@@ -1,18 +1,24 @@
-#ifndef BOOST_ATOMIC_DETAIL_LOCKPOOL_HPP
-#define BOOST_ATOMIC_DETAIL_LOCKPOOL_HPP
-
-// Copyright (c) 2011 Helge Bahmann
-//
-// 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)
+/*
+ * 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)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013-2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/lockpool.hpp
+ *
+ * This header contains declaration of the lockpool used to emulate atomic ops.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_LOCKPOOL_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_LOCKPOOL_HPP_INCLUDED_
#include <boost/atomic/detail/config.hpp>
-#ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
-#include <boost/thread/mutex.hpp>
-#endif
+#include <boost/atomic/detail/link.hpp>
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -20,78 +26,26 @@ namespace boost {
namespace atomics {
namespace detail {
-#ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
-
-class lockpool
-{
-public:
- typedef mutex lock_type;
- class scoped_lock
- {
- private:
- lock_type& mtx_;
-
- scoped_lock(scoped_lock const&) /* = delete */;
- scoped_lock& operator=(scoped_lock const&) /* = delete */;
-
- public:
- explicit
- scoped_lock(const volatile void * addr) : mtx_(get_lock_for(addr))
- {
- mtx_.lock();
- }
- ~scoped_lock()
- {
- mtx_.unlock();
- }
- };
-
-private:
- static BOOST_ATOMIC_DECL lock_type& get_lock_for(const volatile void * addr);
-};
-
-#else
-
-class lockpool
+struct lockpool
{
-public:
- typedef atomic_flag lock_type;
-
class scoped_lock
{
- private:
- atomic_flag& flag_;
- uint8_t padding[128 - sizeof(atomic_flag)];
-
- scoped_lock(const scoped_lock &) /* = delete */;
- scoped_lock& operator=(const scoped_lock &) /* = delete */;
+ void* m_lock;
public:
- explicit
- scoped_lock(const volatile void * addr) : flag_(get_lock_for(addr))
- {
- for (; flag_.test_and_set(memory_order_acquire);)
- {
-#if defined(BOOST_ATOMIC_X86_PAUSE)
- BOOST_ATOMIC_X86_PAUSE();
-#endif
- }
- }
+ explicit BOOST_ATOMIC_DECL scoped_lock(const volatile void* addr) BOOST_NOEXCEPT;
+ BOOST_ATOMIC_DECL ~scoped_lock() BOOST_NOEXCEPT;
- ~scoped_lock(void)
- {
- flag_.clear(memory_order_release);
- }
+ BOOST_DELETED_FUNCTION(scoped_lock(scoped_lock const&))
+ BOOST_DELETED_FUNCTION(scoped_lock& operator=(scoped_lock const&))
};
-private:
- static BOOST_ATOMIC_DECL lock_type& get_lock_for(const volatile void * addr);
+ static BOOST_ATOMIC_DECL void thread_fence() BOOST_NOEXCEPT;
+ static BOOST_ATOMIC_DECL void signal_fence() BOOST_NOEXCEPT;
};
-#endif
+} // namespace detail
+} // namespace atomics
+} // namespace boost
-}
-}
-}
-
-#endif
+#endif // BOOST_ATOMIC_DETAIL_LOCKPOOL_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/operations.hpp b/3party/boost/boost/atomic/detail/operations.hpp
new file mode 100644
index 0000000000..d81399a8e3
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/operations.hpp
@@ -0,0 +1,24 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/operations.hpp
+ *
+ * This header defines atomic operations, including the emulated version.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPERATIONS_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPERATIONS_HPP_INCLUDED_
+
+#include <boost/atomic/detail/operations_lockfree.hpp>
+#include <boost/atomic/detail/ops_emulated.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_OPERATIONS_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/operations_fwd.hpp b/3party/boost/boost/atomic/detail/operations_fwd.hpp
new file mode 100644
index 0000000000..69049e4630
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/operations_fwd.hpp
@@ -0,0 +1,34 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/operations_fwd.hpp
+ *
+ * This header contains forward declaration of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPERATIONS_FWD_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPERATIONS_FWD_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+template< unsigned int Size, bool Signed >
+struct operations;
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPERATIONS_FWD_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/operations_lockfree.hpp b/3party/boost/boost/atomic/detail/operations_lockfree.hpp
new file mode 100644
index 0000000000..b465403a6d
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/operations_lockfree.hpp
@@ -0,0 +1,30 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/operations_lockfree.hpp
+ *
+ * This header defines lockfree atomic operations.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPERATIONS_LOCKFREE_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPERATIONS_LOCKFREE_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/platform.hpp>
+
+#if !defined(BOOST_ATOMIC_EMULATED)
+#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/ops_)
+#else
+#include <boost/atomic/detail/operations_fwd.hpp>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_OPERATIONS_LOCKFREE_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_cas_based.hpp b/3party/boost/boost/atomic/detail/ops_cas_based.hpp
new file mode 100644
index 0000000000..7f8d288f7f
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_cas_based.hpp
@@ -0,0 +1,91 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_cas_based.hpp
+ *
+ * This header contains CAS-based implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_CAS_BASED_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_CAS_BASED_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+template< typename Base >
+struct cas_based_operations :
+ public Base
+{
+ typedef typename Base::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type old_val = Base::load(storage, memory_order_relaxed);
+ while (!Base::compare_exchange_weak(storage, old_val, old_val + v, order, memory_order_relaxed)) {}
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type old_val = Base::load(storage, memory_order_relaxed);
+ while (!Base::compare_exchange_weak(storage, old_val, old_val - v, order, memory_order_relaxed)) {}
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type old_val = Base::load(storage, memory_order_relaxed);
+ while (!Base::compare_exchange_weak(storage, old_val, v, order, memory_order_relaxed)) {}
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type old_val = Base::load(storage, memory_order_relaxed);
+ while (!Base::compare_exchange_weak(storage, old_val, old_val & v, order, memory_order_relaxed)) {}
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type old_val = Base::load(storage, memory_order_relaxed);
+ while (!Base::compare_exchange_weak(storage, old_val, old_val | v, order, memory_order_relaxed)) {}
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type old_val = Base::load(storage, memory_order_relaxed);
+ while (!Base::compare_exchange_weak(storage, old_val, old_val ^ v, order, memory_order_relaxed)) {}
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ Base::store(storage, (storage_type)0, order);
+ }
+};
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_CAS_BASED_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_emulated.hpp b/3party/boost/boost/atomic/detail/ops_emulated.hpp
new file mode 100644
index 0000000000..597490f2d7
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_emulated.hpp
@@ -0,0 +1,149 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_emulated.hpp
+ *
+ * This header contains lockpool-based implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_EMULATED_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_EMULATED_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/detail/lockpool.hpp>
+#include <boost/atomic/capabilities.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+template< typename T >
+struct emulated_operations
+{
+ typedef T storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ lockpool::scoped_lock lock(&storage);
+ const_cast< storage_type& >(storage) = v;
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT
+ {
+ lockpool::scoped_lock lock(&storage);
+ return const_cast< storage_type const& >(storage);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type& s = const_cast< storage_type& >(storage);
+ lockpool::scoped_lock lock(&storage);
+ storage_type old_val = s;
+ s += v;
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type& s = const_cast< storage_type& >(storage);
+ lockpool::scoped_lock lock(&storage);
+ storage_type old_val = s;
+ s -= v;
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type& s = const_cast< storage_type& >(storage);
+ lockpool::scoped_lock lock(&storage);
+ storage_type old_val = s;
+ s = v;
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type& s = const_cast< storage_type& >(storage);
+ lockpool::scoped_lock lock(&storage);
+ storage_type old_val = s;
+ const bool res = old_val == expected;
+ if (res)
+ s = desired;
+ expected = old_val;
+
+ return res;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type& s = const_cast< storage_type& >(storage);
+ lockpool::scoped_lock lock(&storage);
+ storage_type old_val = s;
+ s &= v;
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type& s = const_cast< storage_type& >(storage);
+ lockpool::scoped_lock lock(&storage);
+ storage_type old_val = s;
+ s |= v;
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type& s = const_cast< storage_type& >(storage);
+ lockpool::scoped_lock lock(&storage);
+ storage_type old_val = s;
+ s ^= v;
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, (storage_type)0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return false;
+ }
+};
+
+template< unsigned int Size, bool Signed >
+struct operations :
+ public emulated_operations< typename make_storage_type< Size, Signed >::type >
+{
+};
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_EMULATED_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_extending_cas_based.hpp b/3party/boost/boost/atomic/detail/ops_extending_cas_based.hpp
new file mode 100644
index 0000000000..d7f3c5f5de
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_extending_cas_based.hpp
@@ -0,0 +1,65 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_extending_cas_based.hpp
+ *
+ * This header contains a boilerplate of the \c operations template implementation that requires sign/zero extension in arithmetic operations.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_EXTENDING_CAS_BASED_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_EXTENDING_CAS_BASED_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+template< typename Base, unsigned int Size, bool Signed >
+struct extending_cas_based_operations :
+ public Base
+{
+ typedef typename Base::storage_type storage_type;
+ typedef typename make_storage_type< Size, Signed >::type emulated_storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type old_val = Base::load(storage, memory_order_relaxed);
+ emulated_storage_type new_val;
+ do
+ {
+ new_val = static_cast< emulated_storage_type >(old_val) + static_cast< emulated_storage_type >(v);
+ }
+ while (!Base::compare_exchange_weak(storage, old_val, static_cast< storage_type >(new_val), order, memory_order_relaxed));
+ return old_val;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type old_val = Base::load(storage, memory_order_relaxed);
+ emulated_storage_type new_val;
+ do
+ {
+ new_val = static_cast< emulated_storage_type >(old_val) - static_cast< emulated_storage_type >(v);
+ }
+ while (!Base::compare_exchange_weak(storage, old_val, static_cast< storage_type >(new_val), order, memory_order_relaxed));
+ return old_val;
+ }
+};
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_EXTENDING_CAS_BASED_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_gcc_alpha.hpp b/3party/boost/boost/atomic/detail/ops_gcc_alpha.hpp
new file mode 100644
index 0000000000..d17c61d7a5
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_gcc_alpha.hpp
@@ -0,0 +1,874 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_gcc_alpha.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_ALPHA_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_GCC_ALPHA_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/capabilities.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+/*
+ Refer to http://h71000.www7.hp.com/doc/82final/5601/5601pro_004.html
+ (HP OpenVMS systems documentation) and the Alpha Architecture Reference Manual.
+ */
+
+/*
+ NB: The most natural thing would be to write the increment/decrement
+ operators along the following lines:
+
+ __asm__ __volatile__
+ (
+ "1: ldl_l %0,%1 \n"
+ "addl %0,1,%0 \n"
+ "stl_c %0,%1 \n"
+ "beq %0,1b\n"
+ : "=&b" (tmp)
+ : "m" (value)
+ : "cc"
+ );
+
+ However according to the comments on the HP website and matching
+ comments in the Linux kernel sources this defies branch prediction,
+ as the cpu assumes that backward branches are always taken; so
+ instead copy the trick from the Linux kernel, introduce a forward
+ branch and back again.
+
+ I have, however, had a hard time measuring the difference between
+ the two versions in microbenchmarks -- I am leaving it in nevertheless
+ as it apparently does not hurt either.
+*/
+
+struct gcc_alpha_operations_base
+{
+ static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & memory_order_release) != 0)
+ __asm__ __volatile__ ("mb" ::: "memory");
+ }
+
+ static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & (memory_order_consume | memory_order_acquire)) != 0)
+ __asm__ __volatile__ ("mb" ::: "memory");
+ }
+
+ static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT
+ {
+ if (order == memory_order_seq_cst)
+ __asm__ __volatile__ ("mb" ::: "memory");
+ }
+};
+
+
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public gcc_alpha_operations_base
+{
+ typedef typename make_storage_type< 4u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ storage = v;
+ fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = storage;
+ fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "mov %3, %1\n"
+ "ldl_l %0, %2\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (tmp) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ fence_before(success_order);
+ int success;
+ storage_type current;
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %2, %4\n" // current = *(&storage)
+ "cmpeq %2, %0, %3\n" // success = current == expected
+ "mov %2, %0\n" // expected = current
+ "beq %3, 2f\n" // if (success == 0) goto end
+ "stl_c %1, %4\n" // storage = desired; desired = store succeeded
+ "mov %1, %3\n" // success = desired
+ "2:\n"
+ : "+&r" (expected), // %0
+ "+&r" (desired), // %1
+ "=&r" (current), // %2
+ "=&r" (success) // %3
+ : "m" (storage) // %4
+ :
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ int success;
+ storage_type current, tmp;
+ fence_before(success_order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "mov %5, %1\n" // tmp = desired
+ "ldl_l %2, %4\n" // current = *(&storage)
+ "cmpeq %2, %0, %3\n" // success = current == expected
+ "mov %2, %0\n" // expected = current
+ "beq %3, 2f\n" // if (success == 0) goto end
+ "stl_c %1, %4\n" // storage = tmp; tmp = store succeeded
+ "beq %1, 3f\n" // if (tmp == 0) goto retry
+ "mov %1, %3\n" // success = tmp
+ "2:\n"
+
+ ".subsection 2\n"
+ "3: br 1b\n"
+ ".previous\n"
+
+ : "+&r" (expected), // %0
+ "=&r" (tmp), // %1
+ "=&r" (current), // %2
+ "=&r" (success) // %3
+ : "m" (storage), // %4
+ "r" (desired) // %5
+ :
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "addl %0, %3, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "subl %0, %3, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "and %0, %3, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "bis %0, %3, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "xor %0, %3, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, 0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+
+template< >
+struct operations< 1u, false > :
+ public operations< 4u, false >
+{
+ typedef operations< 4u, false > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "addl %0, %3, %1\n"
+ "zapnot %1, #1, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "subl %0, %3, %1\n"
+ "zapnot %1, #1, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+template< >
+struct operations< 1u, true > :
+ public operations< 4u, true >
+{
+ typedef operations< 4u, true > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "addl %0, %3, %1\n"
+ "sextb %1, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "subl %0, %3, %1\n"
+ "sextb %1, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+
+template< >
+struct operations< 2u, false > :
+ public operations< 4u, false >
+{
+ typedef operations< 4u, false > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "addl %0, %3, %1\n"
+ "zapnot %1, #3, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "subl %0, %3, %1\n"
+ "zapnot %1, #3, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+template< >
+struct operations< 2u, true > :
+ public operations< 4u, true >
+{
+ typedef operations< 4u, true > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "addl %0, %3, %1\n"
+ "sextw %1, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldl_l %0, %2\n"
+ "subl %0, %3, %1\n"
+ "sextw %1, %1\n"
+ "stl_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public gcc_alpha_operations_base
+{
+ typedef typename make_storage_type< 8u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ storage = v;
+ fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = storage;
+ fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "mov %3, %1\n"
+ "ldq_l %0, %2\n"
+ "stq_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (tmp) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ fence_before(success_order);
+ int success;
+ storage_type current;
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldq_l %2, %4\n" // current = *(&storage)
+ "cmpeq %2, %0, %3\n" // success = current == expected
+ "mov %2, %0\n" // expected = current
+ "beq %3, 2f\n" // if (success == 0) goto end
+ "stq_c %1, %4\n" // storage = desired; desired = store succeeded
+ "mov %1, %3\n" // success = desired
+ "2:\n"
+ : "+&r" (expected), // %0
+ "+&r" (desired), // %1
+ "=&r" (current), // %2
+ "=&r" (success) // %3
+ : "m" (storage) // %4
+ :
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ int success;
+ storage_type current, tmp;
+ fence_before(success_order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "mov %5, %1\n" // tmp = desired
+ "ldq_l %2, %4\n" // current = *(&storage)
+ "cmpeq %2, %0, %3\n" // success = current == expected
+ "mov %2, %0\n" // expected = current
+ "beq %3, 2f\n" // if (success == 0) goto end
+ "stq_c %1, %4\n" // storage = tmp; tmp = store succeeded
+ "beq %1, 3f\n" // if (tmp == 0) goto retry
+ "mov %1, %3\n" // success = tmp
+ "2:\n"
+
+ ".subsection 2\n"
+ "3: br 1b\n"
+ ".previous\n"
+
+ : "+&r" (expected), // %0
+ "=&r" (tmp), // %1
+ "=&r" (current), // %2
+ "=&r" (success) // %3
+ : "m" (storage), // %4
+ "r" (desired) // %5
+ :
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldq_l %0, %2\n"
+ "addq %0, %3, %1\n"
+ "stq_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldq_l %0, %2\n"
+ "subq %0, %3, %1\n"
+ "stq_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldq_l %0, %2\n"
+ "and %0, %3, %1\n"
+ "stq_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldq_l %0, %2\n"
+ "bis %0, %3, %1\n"
+ "stq_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, modified;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldq_l %0, %2\n"
+ "xor %0, %3, %1\n"
+ "stq_c %1, %2\n"
+ "beq %1, 2f\n"
+
+ ".subsection 2\n"
+ "2: br 1b\n"
+ ".previous\n"
+
+ : "=&r" (original), // %0
+ "=&r" (modified) // %1
+ : "m" (storage), // %2
+ "r" (v) // %3
+ :
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, 0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ __asm__ __volatile__ ("mb" ::: "memory");
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ __asm__ __volatile__ ("" ::: "memory");
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_GCC_ALPHA_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_gcc_arm.hpp b/3party/boost/boost/atomic/detail/ops_gcc_arm.hpp
new file mode 100644
index 0000000000..29e1e5a319
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_gcc_arm.hpp
@@ -0,0 +1,971 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_gcc_arm.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_ARM_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_GCC_ARM_HPP_INCLUDED_
+
+#include <boost/cstdint.hpp>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/detail/ops_extending_cas_based.hpp>
+#include <boost/atomic/capabilities.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+// From the ARM Architecture Reference Manual for architecture v6:
+//
+// LDREX{<cond>} <Rd>, [<Rn>]
+// <Rd> Specifies the destination register for the memory word addressed by <Rd>
+// <Rn> Specifies the register containing the address.
+//
+// STREX{<cond>} <Rd>, <Rm>, [<Rn>]
+// <Rd> Specifies the destination register for the returned status value.
+// 0 if the operation updates memory
+// 1 if the operation fails to update memory
+// <Rm> Specifies the register containing the word to be stored to memory.
+// <Rn> Specifies the register containing the address.
+// Rd must not be the same register as Rm or Rn.
+//
+// ARM v7 is like ARM v6 plus:
+// There are half-word and byte versions of the LDREX and STREX instructions,
+// LDREXH, LDREXB, STREXH and STREXB.
+// There are also double-word versions, LDREXD and STREXD.
+// (Actually it looks like these are available from version 6k onwards.)
+// FIXME these are not yet used; should be mostly a matter of copy-and-paste.
+// I think you can supply an immediate offset to the address.
+//
+// A memory barrier is effected using a "co-processor 15" instruction,
+// though a separate assembler mnemonic is available for it in v7.
+//
+// "Thumb 1" is a subset of the ARM instruction set that uses a 16-bit encoding. It
+// doesn't include all instructions and in particular it doesn't include the co-processor
+// instruction used for the memory barrier or the load-locked/store-conditional
+// instructions. So, if we're compiling in "Thumb 1" mode, we need to wrap all of our
+// asm blocks with code to temporarily change to ARM mode.
+//
+// You can only change between ARM and Thumb modes when branching using the bx instruction.
+// bx takes an address specified in a register. The least significant bit of the address
+// indicates the mode, so 1 is added to indicate that the destination code is Thumb.
+// A temporary register is needed for the address and is passed as an argument to these
+// macros. It must be one of the "low" registers accessible to Thumb code, specified
+// using the "l" attribute in the asm statement.
+//
+// Architecture v7 introduces "Thumb 2", which does include (almost?) all of the ARM
+// instruction set. (Actually, there was an extension of v6 called v6T2 which supported
+// "Thumb 2" mode, but its architecture manual is no longer available, referring to v7.)
+// So in v7 we don't need to change to ARM mode; we can write "universal
+// assembler" which will assemble to Thumb 2 or ARM code as appropriate. The only thing
+// we need to do to make this "universal" assembler mode work is to insert "IT" instructions
+// to annotate the conditional instructions. These are ignored in other modes (e.g. v6),
+// so they can always be present.
+
+// A note about memory_order_consume. Technically, this architecture allows to avoid
+// unnecessary memory barrier after consume load since it supports data dependency ordering.
+// However, some compiler optimizations may break a seemingly valid code relying on data
+// dependency tracking by injecting bogus branches to aid out of order execution.
+// This may happen not only in Boost.Atomic code but also in user's code, which we have no
+// control of. See this thread: http://lists.boost.org/Archives/boost/2014/06/213890.php.
+// For this reason we promote memory_order_consume to memory_order_acquire.
+
+#if defined(__thumb__) && !defined(__thumb2__)
+#define BOOST_ATOMIC_DETAIL_ARM_ASM_START(TMPREG) "adr " #TMPREG ", 8f\n" "bx " #TMPREG "\n" ".arm\n" ".align 4\n" "8:\n"
+#define BOOST_ATOMIC_DETAIL_ARM_ASM_END(TMPREG) "adr " #TMPREG ", 9f + 1\n" "bx " #TMPREG "\n" ".thumb\n" ".align 2\n" "9:\n"
+#define BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(var) "=&l" (var)
+#else
+// The tmpreg may be wasted in this case, which is non-optimal.
+#define BOOST_ATOMIC_DETAIL_ARM_ASM_START(TMPREG)
+#define BOOST_ATOMIC_DETAIL_ARM_ASM_END(TMPREG)
+#define BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(var) "=&r" (var)
+#endif
+
+struct gcc_arm_operations_base
+{
+ static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & memory_order_release) != 0)
+ hardware_full_fence();
+ }
+
+ static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & (memory_order_consume | memory_order_acquire)) != 0)
+ hardware_full_fence();
+ }
+
+ static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT
+ {
+ if (order == memory_order_seq_cst)
+ hardware_full_fence();
+ }
+
+ static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT
+ {
+#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_DMB)
+ // Older binutils (supposedly, older than 2.21.1) didn't support symbolic or numeric arguments of the "dmb" instruction such as "ish" or "#11".
+ // As a workaround we have to inject encoded bytes of the instruction. There are two encodings for the instruction: ARM and Thumb. See ARM Architecture Reference Manual, A8.8.43.
+ // Since we cannot detect binutils version at compile time, we'll have to always use this hack.
+ __asm__ __volatile__
+ (
+#if defined(__thumb2__)
+ ".short 0xF3BF, 0x8F5B\n" // dmb ish
+#else
+ ".word 0xF57FF05B\n" // dmb ish
+#endif
+ :
+ :
+ : "memory"
+ );
+#else
+ int tmp;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "mcr\tp15, 0, r0, c7, c10, 5\n"
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : "=&l" (tmp)
+ :
+ : "memory"
+ );
+#endif
+ }
+};
+
+
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public gcc_arm_operations_base
+{
+ typedef typename make_storage_type< 4u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ storage = v;
+ fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = storage;
+ fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original;
+ fence_before(order);
+ uint32_t tmp;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // load the original value
+ "strex %[tmp], %[value], %[storage]\n" // store the replacement, tmp = store failed
+ "teq %[tmp], #0\n" // check if store succeeded
+ "bne 1b\n"
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [tmp] "=&l" (tmp), [original] "=&r" (original), [storage] "+Q" (storage)
+ : [value] "r" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ fence_before(success_order);
+ uint32_t success;
+ uint32_t tmp;
+ storage_type original;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "mov %[success], #0\n" // success = 0
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "cmp %[original], %[expected]\n" // flags = original==expected
+ "itt eq\n" // [hint that the following 2 instructions are conditional on flags.equal]
+ "strexeq %[success], %[desired], %[storage]\n" // if (flags.equal) *(&storage) = desired, success = store failed
+ "eoreq %[success], %[success], #1\n" // if (flags.equal) success ^= 1 (i.e. make it 1 if store succeeded)
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [success] "=&r" (success), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [expected] "r" (expected), // %4
+ [desired] "r" (desired) // %5
+ : "cc"
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ expected = original;
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ fence_before(success_order);
+ uint32_t success;
+ uint32_t tmp;
+ storage_type original;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "mov %[success], #0\n" // success = 0
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "cmp %[original], %[expected]\n" // flags = original==expected
+ "bne 2f\n" // if (!flags.equal) goto end
+ "strex %[success], %[desired], %[storage]\n" // *(&storage) = desired, success = store failed
+ "eors %[success], %[success], #1\n" // success ^= 1 (i.e. make it 1 if store succeeded); flags.equal = success == 0
+ "beq 1b\n" // if (flags.equal) goto retry
+ "2:\n"
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [success] "=&r" (success), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [expected] "r" (expected), // %4
+ [desired] "r" (desired) // %5
+ : "cc"
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ expected = original;
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "add %[result], %[original], %[value]\n" // result = original + value
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "sub %[result], %[original], %[value]\n" // result = original - value
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "and %[result], %[original], %[value]\n" // result = original & value
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "orr %[result], %[original], %[value]\n" // result = original | value
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "eor %[result], %[original], %[value]\n" // result = original ^ value
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, 0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+
+template< >
+struct operations< 1u, false > :
+ public operations< 4u, false >
+{
+ typedef operations< 4u, false > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "add %[result], %[original], %[value]\n" // result = original + value
+ "uxtb %[result], %[result]\n" // zero extend result from 8 to 32 bits
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "sub %[result], %[original], %[value]\n" // result = original - value
+ "uxtb %[result], %[result]\n" // zero extend result from 8 to 32 bits
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+template< >
+struct operations< 1u, true > :
+ public operations< 4u, true >
+{
+ typedef operations< 4u, true > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "add %[result], %[original], %[value]\n" // result = original + value
+ "sxtb %[result], %[result]\n" // sign extend result from 8 to 32 bits
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "sub %[result], %[original], %[value]\n" // result = original - value
+ "sxtb %[result], %[result]\n" // sign extend result from 8 to 32 bits
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+
+template< >
+struct operations< 2u, false > :
+ public operations< 4u, false >
+{
+ typedef operations< 4u, false > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "add %[result], %[original], %[value]\n" // result = original + value
+ "uxth %[result], %[result]\n" // zero extend result from 16 to 32 bits
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "sub %[result], %[original], %[value]\n" // result = original - value
+ "uxth %[result], %[result]\n" // zero extend result from 16 to 32 bits
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+template< >
+struct operations< 2u, true > :
+ public operations< 4u, true >
+{
+ typedef operations< 4u, true > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "add %[result], %[original], %[value]\n" // result = original + value
+ "sxth %[result], %[result]\n" // sign extend result from 16 to 32 bits
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ uint32_t tmp;
+ storage_type original, result;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
+ "1:\n"
+ "ldrex %[original], %[storage]\n" // original = *(&storage)
+ "sub %[result], %[original], %[value]\n" // result = original - value
+ "sxth %[result], %[result]\n" // sign extend result from 16 to 32 bits
+ "strex %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed
+ "teq %[tmp], #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
+ : [original] "=&r" (original), // %0
+ [result] "=&r" (result), // %1
+ [tmp] "=&l" (tmp), // %2
+ [storage] "+Q" (storage) // %3
+ : [value] "r" (v) // %4
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+
+#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD)
+
+// Unlike 32-bit operations, for 64-bit loads and stores we must use ldrexd/strexd.
+// Any other instructions result in a non-atomic sequence of 32-bit accesses.
+// See "ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition",
+// Section A3.5.3 "Atomicity in the ARM architecture".
+
+// In the asm blocks below we have to use 32-bit register pairs to compose 64-bit values.
+// In order to pass the 64-bit operands to/from asm blocks, we use undocumented gcc feature:
+// the lower half (Rt) of the operand is accessible normally, via the numbered placeholder (e.g. %0),
+// and the upper half (Rt2) - via the same placeholder with an 'H' after the '%' sign (e.g. %H0).
+// See: http://hardwarebug.org/2010/07/06/arm-inline-asm-secrets/
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public gcc_arm_operations_base
+{
+ typedef typename make_storage_type< 8u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ exchange(storage, v, order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original;
+ uint32_t tmp;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "ldrexd %1, %H1, [%2]\n"
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
+ "=&r" (original) // %1
+ : "r" (&storage) // %2
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original;
+ fence_before(order);
+ uint32_t tmp;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "1:\n"
+ "ldrexd %1, %H1, [%3]\n" // load the original value
+ "strexd %0, %2, %H2, [%3]\n" // store the replacement, tmp = store failed
+ "teq %0, #0\n" // check if store succeeded
+ "bne 1b\n"
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
+ "=&r" (original) // %1
+ : "r" (v), // %2
+ "r" (&storage) // %3
+ : "cc", "memory"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ fence_before(success_order);
+ uint32_t tmp;
+ storage_type original, old_val = expected;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "ldrexd %1, %H1, [%3]\n" // original = *(&storage)
+ "cmp %1, %2\n" // flags = original.lo==old_val.lo
+ "ittt eq\n" // [hint that the following 3 instructions are conditional on flags.equal]
+ "cmpeq %H1, %H2\n" // if (flags.equal) flags = original.hi==old_val.hi
+ "strexdeq %0, %4, %H4, [%3]\n" // if (flags.equal) *(&storage) = desired, tmp = store failed
+ "teqeq %0, #0\n" // if (flags.equal) flags = tmp==0
+ "ite eq\n" // [hint that the following 2 instructions are conditional on flags.equal]
+ "moveq %2, #1\n" // if (flags.equal) old_val.lo = 1
+ "movne %2, #0\n" // if (!flags.equal) old_val.lo = 0
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
+ "=&r" (original), // %1
+ "+r" (old_val) // %2
+ : "r" (&storage), // %3
+ "r" (desired) // %4
+ : "cc", "memory"
+ );
+ const uint32_t success = (uint32_t)old_val;
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ expected = original;
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ fence_before(success_order);
+ uint32_t tmp;
+ storage_type original, old_val = expected;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "1:\n"
+ "ldrexd %1, %H1, [%3]\n" // original = *(&storage)
+ "cmp %1, %2\n" // flags = original.lo==old_val.lo
+ "it eq\n" // [hint that the following instruction is conditional on flags.equal]
+ "cmpeq %H1, %H2\n" // if (flags.equal) flags = original.hi==old_val.hi
+ "bne 2f\n" // if (!flags.equal) goto end
+ "strexd %0, %4, %H4, [%3]\n" // *(&storage) = desired, tmp = store failed
+ "teq %0, #0\n" // flags.equal = tmp == 0
+ "bne 1b\n" // if (flags.equal) goto retry
+ "2:\n"
+ "ite eq\n" // [hint that the following 2 instructions are conditional on flags.equal]
+ "moveq %2, #1\n" // if (flags.equal) old_val.lo = 1
+ "movne %2, #0\n" // if (!flags.equal) old_val.lo = 0
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
+ "=&r" (original), // %1
+ "+r" (old_val) // %2
+ : "r" (&storage), // %3
+ "r" (desired) // %4
+ : "cc", "memory"
+ );
+ const uint32_t success = (uint32_t)old_val;
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ expected = original;
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ storage_type original, result;
+ uint32_t tmp;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "1:\n"
+ "ldrexd %1, %H1, [%3]\n" // original = *(&storage)
+ "adds %2, %1, %4\n" // result = original + value
+ "adc %H2, %H1, %H4\n"
+ "strexd %0, %2, %H2, [%3]\n" // *(&storage) = result, tmp = store failed
+ "teq %0, #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
+ "=&r" (original), // %1
+ "=&r" (result) // %2
+ : "r" (&storage), // %3
+ "r" (v) // %4
+ : "cc", "memory"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ storage_type original, result;
+ uint32_t tmp;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "1:\n"
+ "ldrexd %1, %H1, [%3]\n" // original = *(&storage)
+ "subs %2, %1, %4\n" // result = original - value
+ "sbc %H2, %H1, %H4\n"
+ "strexd %0, %2, %H2, [%3]\n" // *(&storage) = result, tmp = store failed
+ "teq %0, #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
+ "=&r" (original), // %1
+ "=&r" (result) // %2
+ : "r" (&storage), // %3
+ "r" (v) // %4
+ : "cc", "memory"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ storage_type original, result;
+ uint32_t tmp;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "1:\n"
+ "ldrexd %1, %H1, [%3]\n" // original = *(&storage)
+ "and %2, %1, %4\n" // result = original & value
+ "and %H2, %H1, %H4\n"
+ "strexd %0, %2, %H2, [%3]\n" // *(&storage) = result, tmp = store failed
+ "teq %0, #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
+ "=&r" (original), // %1
+ "=&r" (result) // %2
+ : "r" (&storage), // %3
+ "r" (v) // %4
+ : "cc", "memory"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ storage_type original, result;
+ uint32_t tmp;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "1:\n"
+ "ldrexd %1, %H1, [%3]\n" // original = *(&storage)
+ "orr %2, %1, %4\n" // result = original | value
+ "orr %H2, %H1, %H4\n"
+ "strexd %0, %2, %H2, [%3]\n" // *(&storage) = result, tmp = store failed
+ "teq %0, #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
+ "=&r" (original), // %1
+ "=&r" (result) // %2
+ : "r" (&storage), // %3
+ "r" (v) // %4
+ : "cc", "memory"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ storage_type original, result;
+ uint32_t tmp;
+ __asm__ __volatile__
+ (
+ BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
+ "1:\n"
+ "ldrexd %1, %H1, [%3]\n" // original = *(&storage)
+ "eor %2, %1, %4\n" // result = original ^ value
+ "eor %H2, %H1, %H4\n"
+ "strexd %0, %2, %H2, [%3]\n" // *(&storage) = result, tmp = store failed
+ "teq %0, #0\n" // flags = tmp==0
+ "bne 1b\n" // if (!flags.equal) goto retry
+ BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
+ : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
+ "=&r" (original), // %1
+ "=&r" (result) // %2
+ : "r" (&storage), // %3
+ "r" (v) // %4
+ : "cc", "memory"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, 0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+#endif // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD)
+
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ gcc_arm_operations_base::hardware_full_fence();
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ __asm__ __volatile__ ("" ::: "memory");
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_GCC_ARM_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_gcc_atomic.hpp b/3party/boost/boost/atomic/detail/ops_gcc_atomic.hpp
new file mode 100644
index 0000000000..22977910c3
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_gcc_atomic.hpp
@@ -0,0 +1,238 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_gcc_atomic.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_ATOMIC_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_GCC_ATOMIC_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/capabilities.hpp>
+#if defined(__clang__) && (defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B))
+#include <boost/atomic/detail/ops_gcc_x86_dcas.hpp>
+#include <boost/atomic/detail/ops_cas_based.hpp>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(__INTEL_COMPILER)
+// This is used to suppress warning #32013 described below for Intel Compiler.
+// In debug builds the compiler does not inline any functions, so basically
+// every atomic function call results in this warning. I don't know any other
+// way to selectively disable just this one warning.
+#pragma system_header
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+/*!
+ * The function converts \c boost::memory_order values to the compiler-specific constants.
+ *
+ * NOTE: The intention is that the function is optimized away by the compiler, and the
+ * compiler-specific constants are passed to the intrinsics. I know constexpr doesn't
+ * work in this case because the standard atomics interface require memory ordering
+ * constants to be passed as function arguments, at which point they stop being constexpr.
+ * However it is crucial that the compiler sees constants and not runtime values,
+ * because otherwise it just ignores the ordering value and always uses seq_cst.
+ * This is the case with Intel C++ Compiler 14.0.3 (Composer XE 2013 SP1, update 3) and
+ * gcc 4.8.2. Intel Compiler issues a warning in this case:
+ *
+ * warning #32013: Invalid memory order specified. Defaulting to seq_cst memory order.
+ *
+ * while gcc acts silently.
+ *
+ * To mitigate the problem ALL functions, including the atomic<> members must be
+ * declared with BOOST_FORCEINLINE. In this case the compilers are able to see that
+ * all functions are called with constant orderings and call intrinstcts properly.
+ *
+ * Unfortunately, this still doesn't work in debug mode as the compiler doesn't
+ * inline functions even when marked with BOOST_FORCEINLINE. In this case all atomic
+ * operaions will be executed with seq_cst semantics.
+ */
+BOOST_FORCEINLINE BOOST_CONSTEXPR int convert_memory_order_to_gcc(memory_order order) BOOST_NOEXCEPT
+{
+ return (order == memory_order_relaxed ? __ATOMIC_RELAXED : (order == memory_order_consume ? __ATOMIC_CONSUME :
+ (order == memory_order_acquire ? __ATOMIC_ACQUIRE : (order == memory_order_release ? __ATOMIC_RELEASE :
+ (order == memory_order_acq_rel ? __ATOMIC_ACQ_REL : __ATOMIC_SEQ_CST)))));
+}
+
+template< typename T >
+struct gcc_atomic_operations
+{
+ typedef T storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ __atomic_store_n(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return __atomic_load_n(&storage, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ return __atomic_fetch_add(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ return __atomic_fetch_sub(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ return __atomic_exchange_n(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return __atomic_compare_exchange_n
+ (
+ &storage, &expected, desired, false,
+ atomics::detail::convert_memory_order_to_gcc(success_order),
+ atomics::detail::convert_memory_order_to_gcc(failure_order)
+ );
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return __atomic_compare_exchange_n
+ (
+ &storage, &expected, desired, true,
+ atomics::detail::convert_memory_order_to_gcc(success_order),
+ atomics::detail::convert_memory_order_to_gcc(failure_order)
+ );
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ return __atomic_fetch_and(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ return __atomic_fetch_or(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ return __atomic_fetch_xor(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return __atomic_test_and_set(&storage, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ __atomic_clear(const_cast< storage_type* >(&storage), atomics::detail::convert_memory_order_to_gcc(order));
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile& storage) BOOST_NOEXCEPT
+ {
+ return __atomic_is_lock_free(sizeof(storage_type), &storage);
+ }
+};
+
+#if BOOST_ATOMIC_INT8_LOCK_FREE > 0
+template< bool Signed >
+struct operations< 1u, Signed > :
+ public gcc_atomic_operations< typename make_storage_type< 1u, Signed >::type >
+{
+};
+#endif
+
+#if BOOST_ATOMIC_INT16_LOCK_FREE > 0
+template< bool Signed >
+struct operations< 2u, Signed > :
+ public gcc_atomic_operations< typename make_storage_type< 2u, Signed >::type >
+{
+};
+#endif
+
+#if BOOST_ATOMIC_INT32_LOCK_FREE > 0
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public gcc_atomic_operations< typename make_storage_type< 4u, Signed >::type >
+{
+};
+#endif
+
+#if BOOST_ATOMIC_INT64_LOCK_FREE > 0
+#if defined(__clang__) && defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B)
+
+// Workaround for clang bug http://llvm.org/bugs/show_bug.cgi?id=19355
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public cas_based_operations< gcc_dcas_x86< Signed > >
+{
+};
+
+#else
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >
+{
+};
+
+#endif
+#endif
+
+#if BOOST_ATOMIC_INT128_LOCK_FREE > 0
+#if defined(__clang__) && defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
+
+// Workaround for clang bug: http://llvm.org/bugs/show_bug.cgi?id=19149
+// Clang 3.4 does not implement 128-bit __atomic* intrinsics even though it defines __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
+template< bool Signed >
+struct operations< 16u, Signed > :
+ public cas_based_operations< gcc_dcas_x86_64< Signed > >
+{
+};
+
+#else
+
+template< bool Signed >
+struct operations< 16u, Signed > :
+ public gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >
+{
+};
+
+#endif
+#endif
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ __atomic_thread_fence(atomics::detail::convert_memory_order_to_gcc(order));
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ __atomic_signal_fence(atomics::detail::convert_memory_order_to_gcc(order));
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_GCC_ATOMIC_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_gcc_ppc.hpp b/3party/boost/boost/atomic/detail/ops_gcc_ppc.hpp
new file mode 100644
index 0000000000..1a1fbb7f94
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_gcc_ppc.hpp
@@ -0,0 +1,775 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_gcc_ppc.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_PPC_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_GCC_PPC_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/capabilities.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+/*
+ Refer to: Motorola: "Programming Environments Manual for 32-Bit
+ Implementations of the PowerPC Architecture", Appendix E:
+ "Synchronization Programming Examples" for an explanation of what is
+ going on here (can be found on the web at various places by the
+ name "MPCFPE32B.pdf", Google is your friend...)
+
+ Most of the atomic operations map to instructions in a relatively
+ straight-forward fashion, but "load"s may at first glance appear
+ a bit strange as they map to:
+
+ lwz %rX, addr
+ cmpw %rX, %rX
+ bne- 1f
+ 1:
+
+ That is, the CPU is forced to perform a branch that "formally" depends
+ on the value retrieved from memory. This scheme has an overhead of
+ about 1-2 clock cycles per load, but it allows to map "acquire" to
+ the "isync" instruction instead of "sync" uniformly and for all type
+ of atomic operations. Since "isync" has a cost of about 15 clock
+ cycles, while "sync" hast a cost of about 50 clock cycles, the small
+ penalty to atomic loads more than compensates for this.
+
+ Byte- and halfword-sized atomic values are realized by encoding the
+ value to be represented into a word, performing sign/zero extension
+ as appropriate. This means that after add/sub operations the value
+ needs fixing up to accurately preserve the wrap-around semantic of
+ the smaller type. (Nothing special needs to be done for the bit-wise
+ and the "exchange type" operators as the compiler already sees to
+ it that values carried in registers are extended appropriately and
+ everything falls into place naturally).
+
+ The register constraint "b" instructs gcc to use any register
+ except r0; this is sometimes required because the encoding for
+ r0 is used to signify "constant zero" in a number of instructions,
+ making r0 unusable in this place. For simplicity this constraint
+ is used everywhere since I am to lazy to look this up on a
+ per-instruction basis, and ppc has enough registers for this not
+ to pose a problem.
+*/
+
+// A note about memory_order_consume. Technically, this architecture allows to avoid
+// unnecessary memory barrier after consume load since it supports data dependency ordering.
+// However, some compiler optimizations may break a seemingly valid code relying on data
+// dependency tracking by injecting bogus branches to aid out of order execution.
+// This may happen not only in Boost.Atomic code but also in user's code, which we have no
+// control of. See this thread: http://lists.boost.org/Archives/boost/2014/06/213890.php.
+// For this reason we promote memory_order_consume to memory_order_acquire.
+
+struct gcc_ppc_operations_base
+{
+ static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT
+ {
+#if defined(__powerpc64__)
+ if (order == memory_order_seq_cst)
+ __asm__ __volatile__ ("sync" ::: "memory");
+ else if ((order & memory_order_release) != 0)
+ __asm__ __volatile__ ("lwsync" ::: "memory");
+#else
+ if ((order & memory_order_release) != 0)
+ __asm__ __volatile__ ("sync" ::: "memory");
+#endif
+ }
+
+ static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & (memory_order_consume | memory_order_acquire)) != 0)
+ __asm__ __volatile__ ("isync" ::: "memory");
+ }
+
+ static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT
+ {
+ if (order == memory_order_seq_cst)
+ __asm__ __volatile__ ("sync" ::: "memory");
+ }
+};
+
+
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public gcc_ppc_operations_base
+{
+ typedef typename make_storage_type< 4u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "stw %1, %0\n"
+ : "+m" (storage)
+ : "r" (v)
+ );
+ fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v;
+ __asm__ __volatile__
+ (
+ "lwz %0, %1\n"
+ "cmpw %0, %0\n"
+ "bne- 1f\n"
+ "1:\n"
+ : "=&r" (v)
+ : "m" (storage)
+ : "cr0"
+ );
+ fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y1\n"
+ "stwcx. %2,%y1\n"
+ "bne- 1b\n"
+ : "=&b" (original), "+Z" (storage)
+ : "b" (v)
+ : "cr0"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ int success;
+ fence_before(success_order);
+ __asm__ __volatile__
+ (
+ "li %1, 0\n"
+ "lwarx %0,%y2\n"
+ "cmpw %0, %3\n"
+ "bne- 1f\n"
+ "stwcx. %4,%y2\n"
+ "bne- 1f\n"
+ "li %1, 1\n"
+ "1:"
+ : "=&b" (expected), "=&b" (success), "+Z" (storage)
+ : "b" (expected), "b" (desired)
+ : "cr0"
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ int success;
+ fence_before(success_order);
+ __asm__ __volatile__
+ (
+ "li %1, 0\n"
+ "0: lwarx %0,%y2\n"
+ "cmpw %0, %3\n"
+ "bne- 1f\n"
+ "stwcx. %4,%y2\n"
+ "bne- 0b\n"
+ "li %1, 1\n"
+ "1:"
+ : "=&b" (expected), "=&b" (success), "+Z" (storage)
+ : "b" (expected), "b" (desired)
+ : "cr0"
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "add %1,%0,%3\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "sub %1,%0,%3\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "and %1,%0,%3\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "or %1,%0,%3\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "xor %1,%0,%3\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, 0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+
+template< >
+struct operations< 1u, false > :
+ public operations< 4u, false >
+{
+ typedef operations< 4u, false > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "add %1,%0,%3\n"
+ "rlwinm %1, %1, 0, 0xff\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "sub %1,%0,%3\n"
+ "rlwinm %1, %1, 0, 0xff\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+template< >
+struct operations< 1u, true > :
+ public operations< 4u, true >
+{
+ typedef operations< 4u, true > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "add %1,%0,%3\n"
+ "extsb %1, %1\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "sub %1,%0,%3\n"
+ "extsb %1, %1\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+
+template< >
+struct operations< 2u, false > :
+ public operations< 4u, false >
+{
+ typedef operations< 4u, false > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "add %1,%0,%3\n"
+ "rlwinm %1, %1, 0, 0xffff\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "sub %1,%0,%3\n"
+ "rlwinm %1, %1, 0, 0xffff\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+template< >
+struct operations< 2u, true > :
+ public operations< 4u, true >
+{
+ typedef operations< 4u, true > base_type;
+ typedef base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "add %1,%0,%3\n"
+ "extsh %1, %1\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "lwarx %0,%y2\n"
+ "sub %1,%0,%3\n"
+ "extsh %1, %1\n"
+ "stwcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+};
+
+
+#if defined(__powerpc64__)
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public gcc_ppc_operations_base
+{
+ typedef typename make_storage_type< 8u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "std %1, %0\n"
+ : "+m" (storage)
+ : "r" (v)
+ );
+ fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v;
+ __asm__ __volatile__
+ (
+ "ld %0, %1\n"
+ "cmpd %0, %0\n"
+ "bne- 1f\n"
+ "1:\n"
+ : "=&b" (v)
+ : "m" (storage)
+ : "cr0"
+ );
+ fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldarx %0,%y1\n"
+ "stdcx. %2,%y1\n"
+ "bne- 1b\n"
+ : "=&b" (original), "+Z" (storage)
+ : "b" (v)
+ : "cr0"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ int success;
+ fence_before(success_order);
+ __asm__ __volatile__
+ (
+ "li %1, 0\n"
+ "ldarx %0,%y2\n"
+ "cmpd %0, %3\n"
+ "bne- 1f\n"
+ "stdcx. %4,%y2\n"
+ "bne- 1f\n"
+ "li %1, 1\n"
+ "1:"
+ : "=&b" (expected), "=&b" (success), "+Z" (storage)
+ : "b" (expected), "b" (desired)
+ : "cr0"
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ int success;
+ fence_before(success_order);
+ __asm__ __volatile__
+ (
+ "li %1, 0\n"
+ "0: ldarx %0,%y2\n"
+ "cmpd %0, %3\n"
+ "bne- 1f\n"
+ "stdcx. %4,%y2\n"
+ "bne- 0b\n"
+ "li %1, 1\n"
+ "1:"
+ : "=&b" (expected), "=&b" (success), "+Z" (storage)
+ : "b" (expected), "b" (desired)
+ : "cr0"
+ );
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ return !!success;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldarx %0,%y2\n"
+ "add %1,%0,%3\n"
+ "stdcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldarx %0,%y2\n"
+ "sub %1,%0,%3\n"
+ "stdcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldarx %0,%y2\n"
+ "and %1,%0,%3\n"
+ "stdcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldarx %0,%y2\n"
+ "or %1,%0,%3\n"
+ "stdcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type original, tmp;
+ fence_before(order);
+ __asm__ __volatile__
+ (
+ "1:\n"
+ "ldarx %0,%y2\n"
+ "xor %1,%0,%3\n"
+ "stdcx. %1,%y2\n"
+ "bne- 1b\n"
+ : "=&b" (original), "=&b" (tmp), "+Z" (storage)
+ : "b" (v)
+ : "cc"
+ );
+ fence_after(order);
+ return original;
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, 0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+#endif // defined(__powerpc64__)
+
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ switch (order)
+ {
+ case memory_order_consume:
+ case memory_order_acquire:
+ __asm__ __volatile__ ("isync" ::: "memory");
+ break;
+ case memory_order_release:
+#if defined(__powerpc64__)
+ __asm__ __volatile__ ("lwsync" ::: "memory");
+ break;
+#endif
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ __asm__ __volatile__ ("sync" ::: "memory");
+ break;
+ default:;
+ }
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ __asm__ __volatile__ ("" ::: "memory");
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_GCC_PPC_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_gcc_sparc.hpp b/3party/boost/boost/atomic/detail/ops_gcc_sparc.hpp
new file mode 100644
index 0000000000..ea6df91dc6
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_gcc_sparc.hpp
@@ -0,0 +1,245 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2010 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_gcc_sparc.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_SPARC_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_GCC_SPARC_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/detail/ops_cas_based.hpp>
+#include <boost/atomic/detail/ops_extending_cas_based.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+struct gcc_sparc_cas_base
+{
+ static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT
+ {
+ if (order == memory_order_seq_cst)
+ __asm__ __volatile__ ("membar #Sync" ::: "memory");
+ else if ((order & memory_order_release) != 0)
+ __asm__ __volatile__ ("membar #StoreStore | #LoadStore" ::: "memory");
+ }
+
+ static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT
+ {
+ if (order == memory_order_seq_cst)
+ __asm__ __volatile__ ("membar #Sync" ::: "memory");
+ else if ((order & (memory_order_consume | memory_order_acquire)) != 0)
+ __asm__ __volatile__ ("membar #StoreStore | #LoadStore" ::: "memory");
+ }
+
+ static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT
+ {
+ if (order == memory_order_seq_cst)
+ __asm__ __volatile__ ("membar #Sync" ::: "memory");
+ }
+};
+
+template< bool Signed >
+struct gcc_sparc_cas32 :
+ public gcc_sparc_cas_base
+{
+ typedef typename make_storage_type< 4u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before_store(order);
+ storage = v;
+ fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = storage;
+ fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ fence_before(success_order);
+ storage_type previous = expected;
+ __asm__ __volatile__
+ (
+ "cas [%1], %2, %0"
+ : "+r" (desired)
+ : "r" (&storage), "r" (previous)
+ : "memory"
+ );
+ const bool success = (desired == previous);
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ expected = desired;
+ return success;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public cas_based_operations< gcc_sparc_cas32< Signed > >
+{
+ typedef cas_based_operations< gcc_sparc_cas32< Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ __asm__ __volatile__
+ (
+ "swap [%1], %0"
+ : "+r" (v)
+ : "r" (&storage)
+ : "memory"
+ );
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!exchange(storage, (storage_type)1, order);
+ }
+};
+
+template< bool Signed >
+struct operations< 1u, Signed > :
+ public extending_cas_based_operations< operations< 4u, Signed >, 1u, Signed >
+{
+};
+
+template< bool Signed >
+struct operations< 2u, Signed > :
+ public extending_cas_based_operations< operations< 4u, Signed >, 2u, Signed >
+{
+};
+
+template< bool Signed >
+struct gcc_sparc_cas64 :
+ public gcc_sparc_cas_base
+{
+ typedef typename make_storage_type< 8u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before_store(order);
+ storage = v;
+ fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = storage;
+ fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ fence_before(success_order);
+ storage_type previous = expected;
+ __asm__ __volatile__
+ (
+ "casx [%1], %2, %0"
+ : "+r" (desired)
+ : "r" (&storage), "r" (previous)
+ : "memory"
+ );
+ const bool success = (desired == previous);
+ if (success)
+ fence_after(success_order);
+ else
+ fence_after(failure_order);
+ expected = desired;
+ return success;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public cas_based_operations< gcc_sparc_cas64< Signed > >
+{
+};
+
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ switch (order)
+ {
+ case memory_order_release:
+ __asm__ __volatile__ ("membar #StoreStore | #LoadStore" ::: "memory");
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ __asm__ __volatile__ ("membar #LoadLoad | #LoadStore" ::: "memory");
+ break;
+ case memory_order_acq_rel:
+ __asm__ __volatile__ ("membar #LoadLoad | #LoadStore | #StoreStore" ::: "memory");
+ break;
+ case memory_order_seq_cst:
+ __asm__ __volatile__ ("membar #Sync" ::: "memory");
+ break;
+ case memory_order_relaxed:
+ default:
+ break;
+ }
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ __asm__ __volatile__ ("" ::: "memory");
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_GCC_SPARC_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_gcc_sync.hpp b/3party/boost/boost/atomic/detail/ops_gcc_sync.hpp
new file mode 100644
index 0000000000..f4fc3331c6
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_gcc_sync.hpp
@@ -0,0 +1,237 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_gcc_sync.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_SYNC_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_GCC_SYNC_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/detail/ops_extending_cas_based.hpp>
+#include <boost/atomic/capabilities.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+struct gcc_sync_operations_base
+{
+ static BOOST_FORCEINLINE void fence_before_store(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & memory_order_release) != 0)
+ __sync_synchronize();
+ }
+
+ static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT
+ {
+ if (order == memory_order_seq_cst)
+ __sync_synchronize();
+ }
+
+ static BOOST_FORCEINLINE void fence_after_load(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & (memory_order_acquire | memory_order_consume)) != 0)
+ __sync_synchronize();
+ }
+};
+
+template< typename T >
+struct gcc_sync_operations :
+ public gcc_sync_operations_base
+{
+ typedef T storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before_store(order);
+ storage = v;
+ fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = storage;
+ fence_after_load(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return __sync_fetch_and_add(&storage, v);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return __sync_fetch_and_sub(&storage, v);
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ // GCC docs mention that not all architectures may support full exchange semantics for this intrinsic. However, GCC's implementation of
+ // std::atomic<> uses this intrinsic unconditionally. We do so as well. In case if some architectures actually don't support this, we can always
+ // add a check here and fall back to a CAS loop.
+ if ((order & memory_order_release) != 0)
+ __sync_synchronize();
+ return __sync_lock_test_and_set(&storage, v);
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type expected2 = expected;
+ storage_type old_val = __sync_val_compare_and_swap(&storage, expected2, desired);
+
+ if (old_val == expected2)
+ {
+ return true;
+ }
+ else
+ {
+ expected = old_val;
+ return false;
+ }
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return __sync_fetch_and_and(&storage, v);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return __sync_fetch_and_or(&storage, v);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return __sync_fetch_and_xor(&storage, v);
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & memory_order_release) != 0)
+ __sync_synchronize();
+ return !!__sync_lock_test_and_set(&storage, 1);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ __sync_lock_release(&storage);
+ if (order == memory_order_seq_cst)
+ __sync_synchronize();
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+#if BOOST_ATOMIC_INT8_LOCK_FREE > 0
+template< bool Signed >
+struct operations< 1u, Signed > :
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1)
+ public gcc_sync_operations< typename make_storage_type< 1u, Signed >::type >
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 2u, Signed >::type >, 1u, Signed >
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 4u, Signed >::type >, 1u, Signed >
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 8u, Signed >::type >, 1u, Signed >
+#else
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 1u, Signed >
+#endif
+{
+};
+#endif
+
+#if BOOST_ATOMIC_INT16_LOCK_FREE > 0
+template< bool Signed >
+struct operations< 2u, Signed > :
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)
+ public gcc_sync_operations< typename make_storage_type< 2u, Signed >::type >
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 4u, Signed >::type >, 2u, Signed >
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 8u, Signed >::type >, 2u, Signed >
+#else
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 2u, Signed >
+#endif
+{
+};
+#endif
+
+#if BOOST_ATOMIC_INT32_LOCK_FREE > 0
+template< bool Signed >
+struct operations< 4u, Signed > :
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
+ public gcc_sync_operations< typename make_storage_type< 4u, Signed >::type >
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 8u, Signed >::type >, 4u, Signed >
+#else
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 4u, Signed >
+#endif
+{
+};
+#endif
+
+#if BOOST_ATOMIC_INT64_LOCK_FREE > 0
+template< bool Signed >
+struct operations< 8u, Signed > :
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+ public gcc_sync_operations< typename make_storage_type< 8u, Signed >::type >
+#else
+ public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 8u, Signed >
+#endif
+{
+};
+#endif
+
+#if BOOST_ATOMIC_INT128_LOCK_FREE > 0
+template< bool Signed >
+struct operations< 16u, Signed > :
+ public gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >
+{
+};
+#endif
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ __sync_synchronize();
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ __asm__ __volatile__ ("" ::: "memory");
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_GCC_SYNC_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_gcc_x86.hpp b/3party/boost/boost/atomic/detail/ops_gcc_x86.hpp
new file mode 100644
index 0000000000..f18227f8a9
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_gcc_x86.hpp
@@ -0,0 +1,510 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_gcc_x86.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_X86_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_GCC_X86_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/capabilities.hpp>
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
+#include <boost/atomic/detail/ops_gcc_x86_dcas.hpp>
+#include <boost/atomic/detail/ops_cas_based.hpp>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(__x86_64__)
+#define BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "rdx"
+#else
+#define BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "edx"
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+struct gcc_x86_operations_base
+{
+ static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & memory_order_release) != 0)
+ __asm__ __volatile__ ("" ::: "memory");
+ }
+
+ static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & memory_order_acquire) != 0)
+ __asm__ __volatile__ ("" ::: "memory");
+ }
+};
+
+template< typename T, typename Derived >
+struct gcc_x86_operations :
+ public gcc_x86_operations_base
+{
+ typedef T storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ if (order != memory_order_seq_cst)
+ {
+ fence_before(order);
+ storage = v;
+ fence_after(order);
+ }
+ else
+ {
+ Derived::exchange(storage, v, order);
+ }
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = storage;
+ fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ return Derived::fetch_add(storage, -v, order);
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return Derived::compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!Derived::exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, (storage_type)0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+template< bool Signed >
+struct operations< 1u, Signed > :
+ public gcc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > >
+{
+ typedef gcc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ __asm__ __volatile__
+ (
+ "lock; xaddb %0, %1"
+ : "+q" (v), "+m" (storage)
+ :
+ : "cc", "memory"
+ );
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ __asm__ __volatile__
+ (
+ "xchgb %0, %1"
+ : "+q" (v), "+m" (storage)
+ :
+ : "memory"
+ );
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected;
+ bool success;
+ __asm__ __volatile__
+ (
+ "lock; cmpxchgb %3, %1\n\t"
+ "sete %2"
+ : "+a" (previous), "+m" (storage), "=q" (success)
+ : "q" (desired)
+ : "cc", "memory"
+ );
+ expected = previous;
+ return success;
+ }
+
+#define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, argument, result)\
+ __asm__ __volatile__\
+ (\
+ "xor %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER ", %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "\n\t"\
+ ".align 16\n\t"\
+ "1: movb %[arg], %%dl\n\t"\
+ op " %%al, %%dl\n\t"\
+ "lock; cmpxchgb %%dl, %[storage]\n\t"\
+ "jne 1b"\
+ : [res] "+a" (result), [storage] "+m" (storage)\
+ : [arg] "q" (argument)\
+ : "cc", BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER, "memory"\
+ )
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("andb", v, res);
+ return res;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("orb", v, res);
+ return res;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("xorb", v, res);
+ return res;
+ }
+
+#undef BOOST_ATOMIC_DETAIL_CAS_LOOP
+};
+
+template< bool Signed >
+struct operations< 2u, Signed > :
+ public gcc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > >
+{
+ typedef gcc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ __asm__ __volatile__
+ (
+ "lock; xaddw %0, %1"
+ : "+q" (v), "+m" (storage)
+ :
+ : "cc", "memory"
+ );
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ __asm__ __volatile__
+ (
+ "xchgw %0, %1"
+ : "+q" (v), "+m" (storage)
+ :
+ : "memory"
+ );
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected;
+ bool success;
+ __asm__ __volatile__
+ (
+ "lock; cmpxchgw %3, %1\n\t"
+ "sete %2"
+ : "+a" (previous), "+m" (storage), "=q" (success)
+ : "q" (desired)
+ : "cc", "memory"
+ );
+ expected = previous;
+ return success;
+ }
+
+#define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, argument, result)\
+ __asm__ __volatile__\
+ (\
+ "xor %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER ", %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "\n\t"\
+ ".align 16\n\t"\
+ "1: movw %[arg], %%dx\n\t"\
+ op " %%ax, %%dx\n\t"\
+ "lock; cmpxchgw %%dx, %[storage]\n\t"\
+ "jne 1b"\
+ : [res] "+a" (result), [storage] "+m" (storage)\
+ : [arg] "q" (argument)\
+ : "cc", BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER, "memory"\
+ )
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("andw", v, res);
+ return res;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("orw", v, res);
+ return res;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("xorw", v, res);
+ return res;
+ }
+
+#undef BOOST_ATOMIC_DETAIL_CAS_LOOP
+};
+
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public gcc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > >
+{
+ typedef gcc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ __asm__ __volatile__
+ (
+ "lock; xaddl %0, %1"
+ : "+r" (v), "+m" (storage)
+ :
+ : "cc", "memory"
+ );
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ __asm__ __volatile__
+ (
+ "xchgl %0, %1"
+ : "+r" (v), "+m" (storage)
+ :
+ : "memory"
+ );
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected;
+ bool success;
+ __asm__ __volatile__
+ (
+ "lock; cmpxchgl %3, %1\n\t"
+ "sete %2"
+ : "+a" (previous), "+m" (storage), "=q" (success)
+ : "r" (desired)
+ : "cc", "memory"
+ );
+ expected = previous;
+ return success;
+ }
+
+#define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, argument, result)\
+ __asm__ __volatile__\
+ (\
+ "xor %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER ", %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "\n\t"\
+ ".align 16\n\t"\
+ "1: movl %[arg], %%edx\n\t"\
+ op " %%eax, %%edx\n\t"\
+ "lock; cmpxchgl %%edx, %[storage]\n\t"\
+ "jne 1b"\
+ : [res] "+a" (result), [storage] "+m" (storage)\
+ : [arg] "r" (argument)\
+ : "cc", BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER, "memory"\
+ )
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("andl", v, res);
+ return res;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("orl", v, res);
+ return res;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("xorl", v, res);
+ return res;
+ }
+
+#undef BOOST_ATOMIC_DETAIL_CAS_LOOP
+};
+
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B)
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public cas_based_operations< gcc_dcas_x86< Signed > >
+{
+};
+
+#elif defined(__x86_64__)
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public gcc_x86_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > >
+{
+ typedef gcc_x86_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ __asm__ __volatile__
+ (
+ "lock; xaddq %0, %1"
+ : "+r" (v), "+m" (storage)
+ :
+ : "cc", "memory"
+ );
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ __asm__ __volatile__
+ (
+ "xchgq %0, %1"
+ : "+r" (v), "+m" (storage)
+ :
+ : "memory"
+ );
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected;
+ bool success;
+ __asm__ __volatile__
+ (
+ "lock; cmpxchgq %3, %1\n\t"
+ "sete %2"
+ : "+a" (previous), "+m" (storage), "=q" (success)
+ : "r" (desired)
+ : "cc", "memory"
+ );
+ expected = previous;
+ return success;
+ }
+
+#define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, argument, result)\
+ __asm__ __volatile__\
+ (\
+ "xor %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER ", %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "\n\t"\
+ ".align 16\n\t"\
+ "1: movq %[arg], %%rdx\n\t"\
+ op " %%rax, %%rdx\n\t"\
+ "lock; cmpxchgq %%rdx, %[storage]\n\t"\
+ "jne 1b"\
+ : [res] "+a" (result), [storage] "+m" (storage)\
+ : [arg] "r" (argument)\
+ : "cc", BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER, "memory"\
+ )
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("andq", v, res);
+ return res;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("orq", v, res);
+ return res;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ BOOST_ATOMIC_DETAIL_CAS_LOOP("xorq", v, res);
+ return res;
+ }
+
+#undef BOOST_ATOMIC_DETAIL_CAS_LOOP
+};
+
+#endif
+
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
+
+template< bool Signed >
+struct operations< 16u, Signed > :
+ public cas_based_operations< gcc_dcas_x86_64< Signed > >
+{
+};
+
+#endif // defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order == memory_order_seq_cst)
+ {
+ __asm__ __volatile__
+ (
+#if defined(__x86_64__) || defined(__SSE2__)
+ "mfence\n"
+#else
+ "lock; addl $0, (%%esp)\n"
+#endif
+ ::: "memory"
+ );
+ }
+ else if ((order & (memory_order_acquire | memory_order_release)) != 0)
+ {
+ __asm__ __volatile__ ("" ::: "memory");
+ }
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ __asm__ __volatile__ ("" ::: "memory");
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#undef BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_GCC_X86_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_gcc_x86_dcas.hpp b/3party/boost/boost/atomic/detail/ops_gcc_x86_dcas.hpp
new file mode 100644
index 0000000000..5e005359b5
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_gcc_x86_dcas.hpp
@@ -0,0 +1,308 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_gcc_x86_dcas.hpp
+ *
+ * This header contains implementation of the double-width CAS primitive for x86.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_X86_DCAS_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_GCC_X86_DCAS_HPP_INCLUDED_
+
+#include <boost/cstdint.hpp>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/capabilities.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B)
+
+template< bool Signed >
+struct gcc_dcas_x86
+{
+ typedef typename make_storage_type< 8u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ if ((((uint32_t)&storage) & 0x00000007) == 0)
+ {
+#if defined(__SSE2__)
+ __asm__ __volatile__
+ (
+#if defined(__AVX__)
+ "vmovq %1, %%xmm4\n\t"
+ "vmovq %%xmm4, %0\n\t"
+#else
+ "movq %1, %%xmm4\n\t"
+ "movq %%xmm4, %0\n\t"
+#endif
+ : "=m" (storage)
+ : "m" (v)
+ : "memory", "xmm4"
+ );
+#else
+ __asm__ __volatile__
+ (
+ "fildll %1\n\t"
+ "fistpll %0\n\t"
+ : "=m" (storage)
+ : "m" (v)
+ : "memory"
+ );
+#endif
+ }
+ else
+ {
+#if defined(__PIC__)
+ uint32_t scratch;
+ __asm__ __volatile__
+ (
+ "movl %%ebx, %[scratch]\n\t"
+ "movl %[value_lo], %%ebx\n\t"
+ "movl 0(%[dest]), %%eax\n\t"
+ "movl 4(%[dest]), %%edx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg8b 0(%[dest])\n\t"
+ "jne 1b\n\t"
+ "movl %[scratch], %%ebx"
+ : [scratch] "=m,m" (scratch)
+ : [value_lo] "a,a" ((uint32_t)v), "c,c" ((uint32_t)(v >> 32)), [dest] "D,S" (&storage)
+ : "cc", "edx", "memory"
+ );
+#else
+ __asm__ __volatile__
+ (
+ "movl 0(%[dest]), %%eax\n\t"
+ "movl 4(%[dest]), %%edx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg8b 0(%[dest])\n\t"
+ "jne 1b\n\t"
+ :
+ : [value_lo] "b,b" ((uint32_t)v), "c,c" ((uint32_t)(v >> 32)), [dest] "D,S" (&storage)
+ : "cc", "eax", "edx", "memory"
+ );
+#endif
+ }
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type value;
+
+ if ((((uint32_t)&storage) & 0x00000007) == 0)
+ {
+#if defined(__SSE2__)
+ __asm__ __volatile__
+ (
+#if defined(__AVX__)
+ "vmovq %1, %%xmm4\n\t"
+ "vmovq %%xmm4, %0\n\t"
+#else
+ "movq %1, %%xmm4\n\t"
+ "movq %%xmm4, %0\n\t"
+#endif
+ : "=m" (value)
+ : "m" (storage)
+ : "memory", "xmm4"
+ );
+#else
+ __asm__ __volatile__
+ (
+ "fildll %1\n\t"
+ "fistpll %0\n\t"
+ : "=m" (value)
+ : "m" (storage)
+ : "memory"
+ );
+#endif
+ }
+ else
+ {
+#if defined(__clang__)
+ // Clang cannot allocate eax:edx register pairs but it has sync intrinsics
+ value = __sync_val_compare_and_swap(&storage, (storage_type)0, (storage_type)0);
+#else
+ // We don't care for comparison result here; the previous value will be stored into value anyway.
+ // Also we don't care for ebx and ecx values, they just have to be equal to eax and edx before cmpxchg8b.
+ __asm__ __volatile__
+ (
+ "movl %%ebx, %%eax\n\t"
+ "movl %%ecx, %%edx\n\t"
+ "lock; cmpxchg8b %[storage]"
+ : "=&A" (value)
+ : [storage] "m" (storage)
+ : "cc", "memory"
+ );
+#endif
+ }
+
+ return value;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+#if defined(__clang__)
+ // Clang cannot allocate eax:edx register pairs but it has sync intrinsics
+ storage_type old_expected = expected;
+ expected = __sync_val_compare_and_swap(&storage, old_expected, desired);
+ return expected == old_expected;
+#elif defined(__PIC__)
+ // Make sure ebx is saved and restored properly in case
+ // of position independent code. To make this work
+ // setup register constraints such that ebx can not be
+ // used by accident e.g. as base address for the variable
+ // to be modified. Accessing "scratch" should always be okay,
+ // as it can only be placed on the stack (and therefore
+ // accessed through ebp or esp only).
+ //
+ // In theory, could push/pop ebx onto/off the stack, but movs
+ // to a prepared stack slot turn out to be faster.
+
+ uint32_t scratch;
+ bool success;
+ __asm__ __volatile__
+ (
+ "movl %%ebx, %[scratch]\n\t"
+ "movl %[desired_lo], %%ebx\n\t"
+ "lock; cmpxchg8b %[dest]\n\t"
+ "movl %[scratch], %%ebx\n\t"
+ "sete %[success]"
+ : "+A,A,A,A,A,A" (expected), [dest] "+m,m,m,m,m,m" (storage), [scratch] "=m,m,m,m,m,m" (scratch), [success] "=q,m,q,m,q,m" (success)
+ : [desired_lo] "S,S,D,D,m,m" ((uint32_t)desired), "c,c,c,c,c,c" ((uint32_t)(desired >> 32))
+ : "cc", "memory"
+ );
+ return success;
+#else
+ bool success;
+ __asm__ __volatile__
+ (
+ "lock; cmpxchg8b %[dest]\n\t"
+ "sete %[success]"
+ : "+A,A" (expected), [dest] "+m,m" (storage), [success] "=q,m" (success)
+ : "b,b" ((uint32_t)desired), "c,c" ((uint32_t)(desired >> 32))
+ : "cc", "memory"
+ );
+ return success;
+#endif
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+#endif // defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B)
+
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
+
+template< bool Signed >
+struct gcc_dcas_x86_64
+{
+ typedef typename make_storage_type< 16u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ uint64_t const* p_value = (uint64_t const*)&v;
+ __asm__ __volatile__
+ (
+ "movq 0(%[dest]), %%rax\n\t"
+ "movq 8(%[dest]), %%rdx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg16b 0(%[dest])\n\t"
+ "jne 1b"
+ :
+ : "b" (p_value[0]), "c" (p_value[1]), [dest] "r" (&storage)
+ : "cc", "rax", "rdx", "memory"
+ );
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT
+ {
+#if defined(__clang__)
+ // Clang cannot allocate rax:rdx register pairs but it has sync intrinsics
+ storage_type value = storage_type();
+ return __sync_val_compare_and_swap(&storage, value, value);
+#else
+ storage_type value;
+
+ // We don't care for comparison result here; the previous value will be stored into value anyway.
+ // Also we don't care for rbx and rcx values, they just have to be equal to rax and rdx before cmpxchg16b.
+ __asm__ __volatile__
+ (
+ "movq %%rbx, %%rax\n\t"
+ "movq %%rcx, %%rdx\n\t"
+ "lock; cmpxchg16b %[storage]"
+ : "=&A" (value)
+ : [storage] "m" (storage)
+ : "cc", "memory"
+ );
+
+ return value;
+#endif
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+#if defined(__clang__)
+ // Clang cannot allocate rax:rdx register pairs but it has sync intrinsics
+ storage_type old_expected = expected;
+ expected = __sync_val_compare_and_swap(&storage, old_expected, desired);
+ return expected == old_expected;
+#else
+ uint64_t const* p_desired = (uint64_t const*)&desired;
+ bool success;
+ __asm__ __volatile__
+ (
+ "lock; cmpxchg16b %[dest]\n\t"
+ "sete %[success]"
+ : "+A,A" (expected), [dest] "+m,m" (storage), [success] "=q,m" (success)
+ : "b,b" (p_desired[0]), "c,c" (p_desired[1])
+ : "cc", "memory"
+ );
+ return success;
+#endif
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+#endif // defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_GCC_X86_DCAS_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_linux_arm.hpp b/3party/boost/boost/atomic/detail/ops_linux_arm.hpp
new file mode 100644
index 0000000000..25167b1974
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_linux_arm.hpp
@@ -0,0 +1,177 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009, 2011 Helge Bahmann
+ * Copyright (c) 2009 Phil Endecott
+ * Copyright (c) 2013 Tim Blechmann
+ * Linux-specific code by Phil Endecott
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_linux_arm.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_LINUX_ARM_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_LINUX_ARM_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/detail/ops_cas_based.hpp>
+#include <boost/atomic/detail/ops_extending_cas_based.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+// Different ARM processors have different atomic instructions. In particular,
+// architecture versions before v6 (which are still in widespread use, e.g. the
+// Intel/Marvell XScale chips like the one in the NSLU2) have only atomic swap.
+// On Linux the kernel provides some support that lets us abstract away from
+// these differences: it provides emulated CAS and barrier functions at special
+// addresses that are guaranteed not to be interrupted by the kernel. Using
+// this facility is slightly slower than inline assembler would be, but much
+// faster than a system call.
+//
+// While this emulated CAS is "strong" in the sense that it does not fail
+// "spuriously" (i.e.: it never fails to perform the exchange when the value
+// found equals the value expected), it does not return the found value on
+// failure. To satisfy the atomic API, compare_exchange_{weak|strong} must
+// return the found value on failure, and we have to manually load this value
+// after the emulated CAS reports failure. This in turn introduces a race
+// between the CAS failing (due to the "wrong" value being found) and subsequently
+// loading (which might turn up the "right" value). From an application's
+// point of view this looks like "spurious failure", and therefore the
+// emulated CAS is only good enough to provide compare_exchange_weak
+// semantics.
+
+struct linux_arm_cas_base
+{
+ static BOOST_FORCEINLINE void fence_before_store(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & memory_order_release) != 0)
+ hardware_full_fence();
+ }
+
+ static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT
+ {
+ if (order == memory_order_seq_cst)
+ hardware_full_fence();
+ }
+
+ static BOOST_FORCEINLINE void fence_after_load(memory_order order) BOOST_NOEXCEPT
+ {
+ if ((order & (memory_order_consume | memory_order_acquire)) != 0)
+ hardware_full_fence();
+ }
+
+ static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT
+ {
+ typedef void (*kernel_dmb_t)(void);
+ ((kernel_dmb_t)0xffff0fa0)();
+ }
+};
+
+template< bool Signed >
+struct linux_arm_cas :
+ public linux_arm_cas_base
+{
+ typedef typename make_storage_type< 4u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ fence_before_store(order);
+ storage = v;
+ fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = storage;
+ fence_after_load(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ while (true)
+ {
+ storage_type tmp = expected;
+ if (compare_exchange_weak(storage, tmp, desired, success_order, failure_order))
+ return true;
+ if (tmp != expected)
+ {
+ expected = tmp;
+ return false;
+ }
+ }
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ typedef storage_type (*kernel_cmpxchg32_t)(storage_type oldval, storage_type newval, volatile storage_type* ptr);
+
+ if (((kernel_cmpxchg32_t)0xffff0fc0)(expected, desired, &storage) == 0)
+ {
+ return true;
+ }
+ else
+ {
+ expected = storage;
+ return false;
+ }
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+template< bool Signed >
+struct operations< 1u, Signed > :
+ public extending_cas_based_operations< cas_based_operations< linux_arm_cas< Signed > >, 1u, Signed >
+{
+};
+
+template< bool Signed >
+struct operations< 2u, Signed > :
+ public extending_cas_based_operations< cas_based_operations< linux_arm_cas< Signed > >, 2u, Signed >
+{
+};
+
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public cas_based_operations< linux_arm_cas< Signed > >
+{
+};
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ linux_arm_cas_base::hardware_full_fence();
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ __asm__ __volatile__ ("" ::: "memory");
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_LINUX_ARM_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_msvc_arm.hpp b/3party/boost/boost/atomic/detail/ops_msvc_arm.hpp
new file mode 100644
index 0000000000..349f7a5ae8
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_msvc_arm.hpp
@@ -0,0 +1,820 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_msvc_arm.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_MSVC_ARM_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_MSVC_ARM_HPP_INCLUDED_
+
+#include <intrin.h>
+#include <boost/memory_order.hpp>
+#include <boost/type_traits/make_signed.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/interlocked.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/detail/ops_msvc_common.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#define BOOST_ATOMIC_DETAIL_ARM_LOAD8(p) __iso_volatile_load8((const volatile __int8*)(p))
+#define BOOST_ATOMIC_DETAIL_ARM_LOAD16(p) __iso_volatile_load16((const volatile __int16*)(p))
+#define BOOST_ATOMIC_DETAIL_ARM_LOAD32(p) __iso_volatile_load32((const volatile __int32*)(p))
+#define BOOST_ATOMIC_DETAIL_ARM_LOAD64(p) __iso_volatile_load64((const volatile __int64*)(p))
+#define BOOST_ATOMIC_DETAIL_ARM_STORE8(p, v) __iso_volatile_store8((volatile __int8*)(p), (__int8)(v))
+#define BOOST_ATOMIC_DETAIL_ARM_STORE16(p, v) __iso_volatile_store16((volatile __int16*)(p), (__int16)(v))
+#define BOOST_ATOMIC_DETAIL_ARM_STORE32(p, v) __iso_volatile_store32((volatile __int32*)(p), (__int32)(v))
+#define BOOST_ATOMIC_DETAIL_ARM_STORE64(p, v) __iso_volatile_store64((volatile __int64*)(p), (__int64)(v))
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+// A note about memory_order_consume. Technically, this architecture allows to avoid
+// unnecessary memory barrier after consume load since it supports data dependency ordering.
+// However, some compiler optimizations may break a seemingly valid code relying on data
+// dependency tracking by injecting bogus branches to aid out of order execution.
+// This may happen not only in Boost.Atomic code but also in user's code, which we have no
+// control of. See this thread: http://lists.boost.org/Archives/boost/2014/06/213890.php.
+// For this reason we promote memory_order_consume to memory_order_acquire.
+
+struct msvc_arm_operations_base
+{
+ static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT
+ {
+ __dmb(0xB); // _ARM_BARRIER_ISH, see armintr.h from MSVC 11 and later
+ }
+
+ static BOOST_FORCEINLINE void fence_before_store(memory_order order) BOOST_NOEXCEPT
+ {
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+
+ if ((order & memory_order_release) != 0)
+ hardware_full_fence();
+
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ }
+
+ static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT
+ {
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+
+ if (order == memory_order_seq_cst)
+ hardware_full_fence();
+
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ }
+
+ static BOOST_FORCEINLINE void fence_after_load(memory_order order) BOOST_NOEXCEPT
+ {
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+
+ if ((order & (memory_order_consume | memory_order_acquire)) != 0)
+ hardware_full_fence();
+
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ }
+
+ static BOOST_FORCEINLINE BOOST_CONSTEXPR memory_order cas_common_order(memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ // Combine order flags together and promote memory_order_consume to memory_order_acquire
+ return static_cast< memory_order >(((failure_order | success_order) & ~memory_order_consume) | (((failure_order | success_order) & memory_order_consume) << 1u));
+ }
+};
+
+template< typename T, typename Derived >
+struct msvc_arm_operations :
+ public msvc_arm_operations_base
+{
+ typedef T storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ typedef typename make_signed< storage_type >::type signed_storage_type;
+ return Derived::fetch_add(storage, static_cast< storage_type >(-static_cast< signed_storage_type >(v)), order);
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return Derived::compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!Derived::exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ Derived::store(storage, (storage_type)0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+template< bool Signed >
+struct operations< 1u, Signed > :
+ public msvc_arm_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > >
+{
+ typedef msvc_arm_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before_store(order);
+ BOOST_ATOMIC_DETAIL_ARM_STORE8(&storage, v);
+ base_type::fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = BOOST_ATOMIC_DETAIL_ARM_LOAD8(&storage);
+ base_type::fence_after_load(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE8_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE8_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE8_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE8(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected, old_val;
+
+ switch (cas_common_order(success_order, failure_order))
+ {
+ case memory_order_relaxed:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8_RELAXED(&storage, desired, previous));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8_ACQUIRE(&storage, desired, previous));
+ break;
+ case memory_order_release:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8_RELEASE(&storage, desired, previous));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8(&storage, desired, previous));
+ break;
+ }
+ expected = old_val;
+
+ return (previous == old_val);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND8_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND8_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND8_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND8(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR8_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR8_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR8_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR8(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR8_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR8_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR8_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR8(&storage, v));
+ break;
+ }
+ return v;
+ }
+};
+
+template< bool Signed >
+struct operations< 2u, Signed > :
+ public msvc_arm_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > >
+{
+ typedef msvc_arm_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before_store(order);
+ BOOST_ATOMIC_DETAIL_ARM_STORE16(&storage, v);
+ base_type::fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = BOOST_ATOMIC_DETAIL_ARM_LOAD16(&storage);
+ base_type::fence_after_load(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE16_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE16_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE16_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE16(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected, old_val;
+
+ switch (cas_common_order(success_order, failure_order))
+ {
+ case memory_order_relaxed:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16_RELAXED(&storage, desired, previous));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16_ACQUIRE(&storage, desired, previous));
+ break;
+ case memory_order_release:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16_RELEASE(&storage, desired, previous));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16(&storage, desired, previous));
+ break;
+ }
+ expected = old_val;
+
+ return (previous == old_val);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND16_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND16_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND16_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND16(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR16_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR16_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR16_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR16(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR16_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR16_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR16_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR16(&storage, v));
+ break;
+ }
+ return v;
+ }
+};
+
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public msvc_arm_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > >
+{
+ typedef msvc_arm_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before_store(order);
+ BOOST_ATOMIC_DETAIL_ARM_STORE32(&storage, v);
+ base_type::fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = BOOST_ATOMIC_DETAIL_ARM_LOAD32(&storage);
+ base_type::fence_after_load(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected, old_val;
+
+ switch (cas_common_order(success_order, failure_order))
+ {
+ case memory_order_relaxed:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_RELAXED(&storage, desired, previous));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_ACQUIRE(&storage, desired, previous));
+ break;
+ case memory_order_release:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_RELEASE(&storage, desired, previous));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(&storage, desired, previous));
+ break;
+ }
+ expected = old_val;
+
+ return (previous == old_val);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR(&storage, v));
+ break;
+ }
+ return v;
+ }
+};
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public msvc_arm_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > >
+{
+ typedef msvc_arm_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before_store(order);
+ BOOST_ATOMIC_DETAIL_ARM_STORE64(&storage, v);
+ base_type::fence_after_store(order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = BOOST_ATOMIC_DETAIL_ARM_LOAD64(&storage);
+ base_type::fence_after_load(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE64_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE64_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE64_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE64(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected, old_val;
+
+ switch (cas_common_order(success_order, failure_order))
+ {
+ case memory_order_relaxed:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64_RELAXED(&storage, desired, previous));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64_ACQUIRE(&storage, desired, previous));
+ break;
+ case memory_order_release:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64_RELEASE(&storage, desired, previous));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64(&storage, desired, previous));
+ break;
+ }
+ expected = old_val;
+
+ return (previous == old_val);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND64_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND64_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND64_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND64(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR64_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR64_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR64_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR64(&storage, v));
+ break;
+ }
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ switch (order)
+ {
+ case memory_order_relaxed:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR64_RELAXED(&storage, v));
+ break;
+ case memory_order_consume:
+ case memory_order_acquire:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR64_ACQUIRE(&storage, v));
+ break;
+ case memory_order_release:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR64_RELEASE(&storage, v));
+ break;
+ case memory_order_acq_rel:
+ case memory_order_seq_cst:
+ default:
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR64(&storage, v));
+ break;
+ }
+ return v;
+ }
+};
+
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ if (order != memory_order_relaxed)
+ msvc_arm_operations_base::hardware_full_fence();
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#undef BOOST_ATOMIC_DETAIL_ARM_LOAD8
+#undef BOOST_ATOMIC_DETAIL_ARM_LOAD16
+#undef BOOST_ATOMIC_DETAIL_ARM_LOAD32
+#undef BOOST_ATOMIC_DETAIL_ARM_LOAD64
+#undef BOOST_ATOMIC_DETAIL_ARM_STORE8
+#undef BOOST_ATOMIC_DETAIL_ARM_STORE16
+#undef BOOST_ATOMIC_DETAIL_ARM_STORE32
+#undef BOOST_ATOMIC_DETAIL_ARM_STORE64
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_MSVC_ARM_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_msvc_common.hpp b/3party/boost/boost/atomic/detail/ops_msvc_common.hpp
new file mode 100644
index 0000000000..53628f3600
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_msvc_common.hpp
@@ -0,0 +1,38 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_msvc_common.hpp
+ *
+ * This header contains common tools for MSVC implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_MSVC_COMMON_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_MSVC_COMMON_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+// Define compiler barriers
+#if defined(__INTEL_COMPILER)
+#define BOOST_ATOMIC_DETAIL_COMPILER_BARRIER() __memory_barrier()
+#elif defined(_MSC_VER) && !defined(_WIN32_WCE)
+extern "C" void _ReadWriteBarrier(void);
+#pragma intrinsic(_ReadWriteBarrier)
+#define BOOST_ATOMIC_DETAIL_COMPILER_BARRIER() _ReadWriteBarrier()
+#endif
+
+#ifndef BOOST_ATOMIC_DETAIL_COMPILER_BARRIER
+#define BOOST_ATOMIC_DETAIL_COMPILER_BARRIER()
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_MSVC_COMMON_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_msvc_x86.hpp b/3party/boost/boost/atomic/detail/ops_msvc_x86.hpp
new file mode 100644
index 0000000000..51db0fee0b
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_msvc_x86.hpp
@@ -0,0 +1,877 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_msvc_x86.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_MSVC_X86_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_MSVC_X86_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/type_traits/make_signed.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/interlocked.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/capabilities.hpp>
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
+#include <boost/cstdint.hpp>
+#include <boost/atomic/detail/ops_cas_based.hpp>
+#endif
+#include <boost/atomic/detail/ops_msvc_common.hpp>
+#if !defined(_M_IX86) && !(defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8) && defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16))
+#include <boost/atomic/detail/ops_extending_cas_based.hpp>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+// frame pointer register 'ebx' modified by inline assembly code. See the note below.
+#pragma warning(disable: 4731)
+#endif
+
+#if defined(_MSC_VER) && (defined(_M_AMD64) || (defined(_M_IX86) && defined(_M_IX86_FP) && _M_IX86_FP >= 2))
+extern "C" void _mm_mfence(void);
+#pragma intrinsic(_mm_mfence)
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+/*
+ * Implementation note for asm blocks.
+ *
+ * http://msdn.microsoft.com/en-us/data/k1a8ss06%28v=vs.105%29
+ *
+ * Some SSE types require eight-byte stack alignment, forcing the compiler to emit dynamic stack-alignment code.
+ * To be able to access both the local variables and the function parameters after the alignment, the compiler
+ * maintains two frame pointers. If the compiler performs frame pointer omission (FPO), it will use EBP and ESP.
+ * If the compiler does not perform FPO, it will use EBX and EBP. To ensure code runs correctly, do not modify EBX
+ * in asm code if the function requires dynamic stack alignment as it could modify the frame pointer.
+ * Either move the eight-byte aligned types out of the function, or avoid using EBX.
+ *
+ * Since we have no way of knowing that the compiler uses FPO, we have to always save and restore ebx
+ * whenever we have to clobber it. Additionally, we disable warning C4731 above so that the compiler
+ * doesn't spam about ebx use.
+ */
+
+struct msvc_x86_operations_base
+{
+ static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT
+ {
+#if defined(_MSC_VER) && (defined(_M_AMD64) || (defined(_M_IX86) && defined(_M_IX86_FP) && _M_IX86_FP >= 2))
+ // Use mfence only if SSE2 is available
+ _mm_mfence();
+#else
+ long tmp;
+ BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&tmp, 0);
+#endif
+ }
+
+ static BOOST_FORCEINLINE void fence_before(memory_order) BOOST_NOEXCEPT
+ {
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ }
+
+ static BOOST_FORCEINLINE void fence_after(memory_order) BOOST_NOEXCEPT
+ {
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ }
+
+ static BOOST_FORCEINLINE void fence_after_load(memory_order) BOOST_NOEXCEPT
+ {
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+
+ // On x86 and x86_64 there is no need for a hardware barrier,
+ // even if seq_cst memory order is requested, because all
+ // seq_cst writes are implemented with lock-prefixed operations
+ // or xchg which has implied lock prefix. Therefore normal loads
+ // are already ordered with seq_cst stores on these architectures.
+ }
+};
+
+template< typename T, typename Derived >
+struct msvc_x86_operations :
+ public msvc_x86_operations_base
+{
+ typedef T storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ if (order != memory_order_seq_cst)
+ {
+ fence_before(order);
+ storage = v;
+ fence_after(order);
+ }
+ else
+ {
+ Derived::exchange(storage, v, order);
+ }
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type v = storage;
+ fence_after_load(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ typedef typename make_signed< storage_type >::type signed_storage_type;
+ return Derived::fetch_add(storage, static_cast< storage_type >(-static_cast< signed_storage_type >(v)), order);
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return Derived::compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!Derived::exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, (storage_type)0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public msvc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > >
+{
+ typedef msvc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected;
+ storage_type old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(&storage, desired, previous));
+ expected = old_val;
+ return (previous == old_val);
+ }
+
+#if defined(BOOST_ATOMIC_INTERLOCKED_AND)
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND(&storage, v));
+ }
+#else
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ while (!compare_exchange_strong(storage, res, res & v, order, memory_order_relaxed)) {}
+ return res;
+ }
+#endif
+
+#if defined(BOOST_ATOMIC_INTERLOCKED_OR)
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR(&storage, v));
+ }
+#else
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ while (!compare_exchange_strong(storage, res, res | v, order, memory_order_relaxed)) {}
+ return res;
+ }
+#endif
+
+#if defined(BOOST_ATOMIC_INTERLOCKED_XOR)
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR(&storage, v));
+ }
+#else
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type res = storage;
+ while (!compare_exchange_strong(storage, res, res ^ v, order, memory_order_relaxed)) {}
+ return res;
+ }
+#endif
+};
+
+#if defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8)
+
+template< bool Signed >
+struct operations< 1u, Signed > :
+ public msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > >
+{
+ typedef msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE8(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected;
+ storage_type old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8(&storage, desired, previous));
+ expected = old_val;
+ return (previous == old_val);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND8(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR8(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR8(&storage, v));
+ }
+};
+
+#elif defined(_M_IX86)
+
+template< bool Signed >
+struct operations< 1u, Signed > :
+ public msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > >
+{
+ typedef msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ __asm
+ {
+ mov edx, storage
+ movzx eax, v
+ lock xadd byte ptr [edx], al
+ mov v, al
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ __asm
+ {
+ mov edx, storage
+ movzx eax, v
+ xchg byte ptr [edx], al
+ mov v, al
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(success_order);
+ bool success;
+ __asm
+ {
+ mov esi, expected
+ mov edi, storage
+ movzx eax, byte ptr [esi]
+ movzx edx, desired
+ lock cmpxchg byte ptr [edi], dl
+ mov byte ptr [esi], al
+ sete success
+ };
+ // The success and failure fences are equivalent anyway
+ base_type::fence_after(success_order);
+ return success;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ int backup;
+ __asm
+ {
+ mov backup, ebx
+ xor edx, edx
+ mov edi, storage
+ movzx ebx, v
+ movzx eax, byte ptr [edi]
+ align 16
+ again:
+ mov dl, al
+ and dl, bl
+ lock cmpxchg byte ptr [edi], dl
+ jne again
+ mov v, al
+ mov ebx, backup
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ int backup;
+ __asm
+ {
+ mov backup, ebx
+ xor edx, edx
+ mov edi, storage
+ movzx ebx, v
+ movzx eax, byte ptr [edi]
+ align 16
+ again:
+ mov dl, al
+ or dl, bl
+ lock cmpxchg byte ptr [edi], dl
+ jne again
+ mov v, al
+ mov ebx, backup
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ int backup;
+ __asm
+ {
+ mov backup, ebx
+ xor edx, edx
+ mov edi, storage
+ movzx ebx, v
+ movzx eax, byte ptr [edi]
+ align 16
+ again:
+ mov dl, al
+ xor dl, bl
+ lock cmpxchg byte ptr [edi], dl
+ jne again
+ mov v, al
+ mov ebx, backup
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+};
+
+#else
+
+template< bool Signed >
+struct operations< 1u, Signed > :
+ public extending_cas_based_operations< operations< 4u, Signed >, 1u, Signed >
+{
+};
+
+#endif
+
+#if defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16)
+
+template< bool Signed >
+struct operations< 2u, Signed > :
+ public msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > >
+{
+ typedef msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE16(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected;
+ storage_type old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16(&storage, desired, previous));
+ expected = old_val;
+ return (previous == old_val);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND16(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR16(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR16(&storage, v));
+ }
+};
+
+#elif defined(_M_IX86)
+
+template< bool Signed >
+struct operations< 2u, Signed > :
+ public msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > >
+{
+ typedef msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ __asm
+ {
+ mov edx, storage
+ movzx eax, v
+ lock xadd word ptr [edx], ax
+ mov v, ax
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ __asm
+ {
+ mov edx, storage
+ movzx eax, v
+ xchg word ptr [edx], ax
+ mov v, ax
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(success_order);
+ bool success;
+ __asm
+ {
+ mov esi, expected
+ mov edi, storage
+ movzx eax, word ptr [esi]
+ movzx edx, desired
+ lock cmpxchg word ptr [edi], dx
+ mov word ptr [esi], ax
+ sete success
+ };
+ // The success and failure fences are equivalent anyway
+ base_type::fence_after(success_order);
+ return success;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ int backup;
+ __asm
+ {
+ mov backup, ebx
+ xor edx, edx
+ mov edi, storage
+ movzx ebx, v
+ movzx eax, word ptr [edi]
+ align 16
+ again:
+ mov dx, ax
+ and dx, bx
+ lock cmpxchg word ptr [edi], dx
+ jne again
+ mov v, ax
+ mov ebx, backup
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ int backup;
+ __asm
+ {
+ mov backup, ebx
+ xor edx, edx
+ mov edi, storage
+ movzx ebx, v
+ movzx eax, word ptr [edi]
+ align 16
+ again:
+ mov dx, ax
+ or dx, bx
+ lock cmpxchg word ptr [edi], dx
+ jne again
+ mov v, ax
+ mov ebx, backup
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ int backup;
+ __asm
+ {
+ mov backup, ebx
+ xor edx, edx
+ mov edi, storage
+ movzx ebx, v
+ movzx eax, word ptr [edi]
+ align 16
+ again:
+ mov dx, ax
+ xor dx, bx
+ lock cmpxchg word ptr [edi], dx
+ jne again
+ mov v, ax
+ mov ebx, backup
+ };
+ base_type::fence_after(order);
+ return v;
+ }
+};
+
+#else
+
+template< bool Signed >
+struct operations< 2u, Signed > :
+ public extending_cas_based_operations< operations< 4u, Signed >, 2u, Signed >
+{
+};
+
+#endif
+
+
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B)
+
+template< bool Signed >
+struct msvc_dcas_x86
+{
+ typedef typename make_storage_type< 8u, Signed >::type storage_type;
+
+ // Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3A, 8.1.1. Guaranteed Atomic Operations:
+ //
+ // The Pentium processor (and newer processors since) guarantees that the following additional memory operations will always be carried out atomically:
+ // * Reading or writing a quadword aligned on a 64-bit boundary
+ //
+ // Luckily, the memory is almost always 8-byte aligned in our case because atomic<> uses 64 bit native types for storage and dynamic memory allocations
+ // have at least 8 byte alignment. The only unfortunate case is when atomic is placeod on the stack and it is not 8-byte aligned (like on 32 bit Windows).
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type volatile* p = &storage;
+ if (((uint32_t)p & 0x00000007) == 0)
+ {
+#if defined(_M_IX86_FP) && _M_IX86_FP >= 2
+#if defined(__AVX__)
+ __asm
+ {
+ mov edx, p
+ vmovq xmm4, v
+ vmovq qword ptr [edx], xmm4
+ };
+#else
+ __asm
+ {
+ mov edx, p
+ movq xmm4, v
+ movq qword ptr [edx], xmm4
+ };
+#endif
+#else
+ __asm
+ {
+ mov edx, p
+ fild v
+ fistp qword ptr [edx]
+ };
+#endif
+ }
+ else
+ {
+ int backup;
+ __asm
+ {
+ mov backup, ebx
+ mov edi, p
+ mov ebx, dword ptr [v]
+ mov ecx, dword ptr [v + 4]
+ mov eax, dword ptr [edi]
+ mov edx, dword ptr [edi + 4]
+ align 16
+ again:
+ lock cmpxchg8b qword ptr [edi]
+ jne again
+ mov ebx, backup
+ };
+ }
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type const volatile* p = &storage;
+ storage_type value;
+
+ if (((uint32_t)p & 0x00000007) == 0)
+ {
+#if defined(_M_IX86_FP) && _M_IX86_FP >= 2
+#if defined(__AVX__)
+ __asm
+ {
+ mov edx, p
+ vmovq xmm4, qword ptr [edx]
+ vmovq value, xmm4
+ };
+#else
+ __asm
+ {
+ mov edx, p
+ movq xmm4, qword ptr [edx]
+ movq value, xmm4
+ };
+#endif
+#else
+ __asm
+ {
+ mov edx, p
+ fild qword ptr [edx]
+ fistp value
+ };
+#endif
+ }
+ else
+ {
+ // We don't care for comparison result here; the previous value will be stored into value anyway.
+ // Also we don't care for ebx and ecx values, they just have to be equal to eax and edx before cmpxchg8b.
+ __asm
+ {
+ mov edi, p
+ mov eax, ebx
+ mov edx, ecx
+ lock cmpxchg8b qword ptr [edi]
+ mov dword ptr [value], eax
+ mov dword ptr [value + 4], edx
+ };
+ }
+
+ return value;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type volatile* p = &storage;
+#if defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64)
+ const storage_type old_val = (storage_type)BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64(p, desired, expected);
+ const bool result = (old_val == expected);
+ expected = old_val;
+ return result;
+#else
+ bool result;
+ int backup;
+ __asm
+ {
+ mov backup, ebx
+ mov edi, p
+ mov esi, expected
+ mov ebx, dword ptr [desired]
+ mov ecx, dword ptr [desired + 4]
+ mov eax, dword ptr [esi]
+ mov edx, dword ptr [esi + 4]
+ lock cmpxchg8b qword ptr [edi]
+ mov dword ptr [esi], eax
+ mov dword ptr [esi + 4], edx
+ mov ebx, backup
+ sete result
+ };
+ return result;
+#endif
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public cas_based_operations< msvc_dcas_x86< Signed > >
+{
+};
+
+#elif defined(_M_AMD64)
+
+template< bool Signed >
+struct operations< 8u, Signed > :
+ public msvc_x86_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > >
+{
+ typedef msvc_x86_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE64(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected;
+ storage_type old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64(&storage, desired, previous));
+ expected = old_val;
+ return (previous == old_val);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND64(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR64(&storage, v));
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ return static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR64(&storage, v));
+ }
+};
+
+#endif
+
+#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
+
+template< bool Signed >
+struct msvc_dcas_x86_64
+{
+ typedef typename make_storage_type< 16u, Signed >::type storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type value = const_cast< storage_type& >(storage);
+ while (!BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE128(&storage, v, &value)) {}
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT
+ {
+ storage_type value = storage_type();
+ BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE128(&storage, value, &value);
+ return value;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+ {
+ return !!BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE128(&storage, desired, &expected);
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+template< bool Signed >
+struct operations< 16u, Signed > :
+ public cas_based_operations< msvc_dcas_x86_64< Signed > >
+{
+};
+
+#endif // defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ if (order == memory_order_seq_cst)
+ msvc_x86_operations_base::hardware_full_fence();
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_MSVC_X86_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/ops_windows.hpp b/3party/boost/boost/atomic/detail/ops_windows.hpp
new file mode 100644
index 0000000000..1b4b04c8bc
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/ops_windows.hpp
@@ -0,0 +1,215 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/ops_windows.hpp
+ *
+ * This header contains implementation of the \c operations template.
+ *
+ * This implementation is the most basic version for Windows. It should
+ * work for any non-MSVC-like compilers as long as there are Interlocked WinAPI
+ * functions available. This version is also used for WinCE.
+ *
+ * Notably, this implementation is not as efficient as other
+ * versions based on compiler intrinsics.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_WINDOWS_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_WINDOWS_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/type_traits/make_signed.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/interlocked.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/detail/ops_msvc_common.hpp>
+#include <boost/atomic/detail/ops_extending_cas_based.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+struct windows_operations_base
+{
+ static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT
+ {
+ long tmp;
+ BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&tmp, 0);
+ }
+
+ static BOOST_FORCEINLINE void fence_before(memory_order) BOOST_NOEXCEPT
+ {
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ }
+
+ static BOOST_FORCEINLINE void fence_after(memory_order) BOOST_NOEXCEPT
+ {
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ }
+};
+
+template< typename T, typename Derived >
+struct windows_operations :
+ public windows_operations_base
+{
+ typedef T storage_type;
+
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ Derived::exchange(storage, v, order);
+ }
+
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return Derived::fetch_add(const_cast< storage_type volatile& >(storage), (storage_type)0, order);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ typedef typename make_signed< storage_type >::type signed_storage_type;
+ return Derived::fetch_add(storage, static_cast< storage_type >(-static_cast< signed_storage_type >(v)), order);
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_weak(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ return Derived::compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ }
+
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ return !!Derived::exchange(storage, (storage_type)1, order);
+ }
+
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ {
+ store(storage, (storage_type)0, order);
+ }
+
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+ {
+ return true;
+ }
+};
+
+template< bool Signed >
+struct operations< 4u, Signed > :
+ public windows_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > >
+{
+ typedef windows_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type;
+ typedef typename base_type::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(&storage, v));
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ base_type::fence_before(order);
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&storage, v));
+ base_type::fence_after(order);
+ return v;
+ }
+
+ static BOOST_FORCEINLINE bool compare_exchange_strong(
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+ {
+ storage_type previous = expected;
+ base_type::fence_before(success_order);
+ storage_type old_val = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(&storage, desired, previous));
+ expected = old_val;
+ // The success and failure fences are the same anyway
+ base_type::fence_after(success_order);
+ return (previous == old_val);
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+#if defined(BOOST_ATOMIC_INTERLOCKED_AND)
+ base_type::fence_before(order);
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_AND(&storage, v));
+ base_type::fence_after(order);
+ return v;
+#else
+ storage_type res = storage;
+ while (!compare_exchange_strong(storage, res, res & v, order, memory_order_relaxed)) {}
+ return res;
+#endif
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+#if defined(BOOST_ATOMIC_INTERLOCKED_OR)
+ base_type::fence_before(order);
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_OR(&storage, v));
+ base_type::fence_after(order);
+ return v;
+#else
+ storage_type res = storage;
+ while (!compare_exchange_strong(storage, res, res | v, order, memory_order_relaxed)) {}
+ return res;
+#endif
+ }
+
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+#if defined(BOOST_ATOMIC_INTERLOCKED_XOR)
+ base_type::fence_before(order);
+ v = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_XOR(&storage, v));
+ base_type::fence_after(order);
+ return v;
+#else
+ storage_type res = storage;
+ while (!compare_exchange_strong(storage, res, res ^ v, order, memory_order_relaxed)) {}
+ return res;
+#endif
+ }
+};
+
+template< bool Signed >
+struct operations< 1u, Signed > :
+ public extending_cas_based_operations< operations< 4u, Signed >, 1u, Signed >
+{
+};
+
+template< bool Signed >
+struct operations< 2u, Signed > :
+ public extending_cas_based_operations< operations< 4u, Signed >, 2u, Signed >
+{
+};
+
+BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+ if (order == memory_order_seq_cst)
+ windows_operations_base::hardware_full_fence();
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+}
+
+BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ if (order != memory_order_relaxed)
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_WINDOWS_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/pause.hpp b/3party/boost/boost/atomic/detail/pause.hpp
new file mode 100644
index 0000000000..15d7a024d7
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/pause.hpp
@@ -0,0 +1,43 @@
+/*
+ * 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)
+ *
+ * (C) Copyright 2013 Tim Blechmann
+ * (C) Copyright 2013 Andrey Semashev
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_PAUSE_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_PAUSE_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_IX86))
+extern "C" void _mm_pause(void);
+#pragma intrinsic(_mm_pause)
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+BOOST_FORCEINLINE void pause() BOOST_NOEXCEPT
+{
+#if defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_IX86))
+ _mm_pause();
+
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+ __asm__ __volatile__("pause;");
+
+#endif
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_PAUSE_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/platform.hpp b/3party/boost/boost/atomic/detail/platform.hpp
index a31ececade..76ad4ebb8f 100644
--- a/3party/boost/boost/atomic/detail/platform.hpp
+++ b/3party/boost/boost/atomic/detail/platform.hpp
@@ -1,62 +1,115 @@
-#ifndef BOOST_ATOMIC_DETAIL_PLATFORM_HPP
-#define BOOST_ATOMIC_DETAIL_PLATFORM_HPP
-
-// Copyright (c) 2009 Helge Bahmann
-//
-// 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)
-
-// Platform selection file
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/platform.hpp
+ *
+ * This header defines macros for the target platform detection
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_
#include <boost/atomic/detail/config.hpp>
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+#if !defined(BOOST_ATOMIC_FORCE_FALLBACK)
+
+// Compiler-based backends
+#if ((defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 407)) ||\
+ (defined(BOOST_CLANG) && ((__clang_major__ * 100 + __clang_minor__) >= 302))) &&\
+ (\
+ (__GCC_ATOMIC_BOOL_LOCK_FREE + 0) == 2 ||\
+ (__GCC_ATOMIC_CHAR_LOCK_FREE + 0) == 2 ||\
+ (__GCC_ATOMIC_SHORT_LOCK_FREE + 0) == 2 ||\
+ (__GCC_ATOMIC_INT_LOCK_FREE + 0) == 2 ||\
+ (__GCC_ATOMIC_LONG_LOCK_FREE + 0) == 2 ||\
+ (__GCC_ATOMIC_LLONG_LOCK_FREE + 0) == 2\
+ )
- #include <boost/atomic/detail/gcc-x86.hpp>
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_atomic
-#elif 0 && defined(__GNUC__) && defined(__alpha__) /* currently does not work correctly */
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
- #include <boost/atomic/detail/base.hpp>
- #include <boost/atomic/detail/gcc-alpha.hpp>
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_x86
#elif defined(__GNUC__) && (defined(__POWERPC__) || defined(__PPC__))
- #include <boost/atomic/detail/gcc-ppc.hpp>
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_ppc
// This list of ARM architecture versions comes from Apple's arm/arch.h header.
// I don't know how complete it is.
-#elif defined(__GNUC__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
- || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \
- || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_7A__))
+#elif defined(__GNUC__) &&\
+ (\
+ defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) ||\
+ defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) ||\
+ defined(__ARM_ARCH_6ZK__) ||\
+ defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) ||\
+ defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) ||\
+ defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__)\
+ )
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_arm
- #include <boost/atomic/detail/gcc-armv6plus.hpp>
+#elif defined(__GNUC__) && defined(__sparc_v9__)
-#elif defined(__linux__) && defined(__arm__)
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_sparc
- #include <boost/atomic/detail/linux-arm.hpp>
+#elif defined(__GNUC__) && defined(__alpha__)
-#elif defined(__GNUC__) && defined(__sparc_v9__)
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_alpha
- #include <boost/atomic/detail/gcc-sparcv9.hpp>
+#elif defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 401) &&\
+ (\
+ defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) ||\
+ defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) ||\
+ defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) ||\
+ defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) ||\
+ defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)\
+ )
-#elif defined(BOOST_WINDOWS) || defined(_WIN32_CE)
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_sync
+
+#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
- #include <boost/atomic/detail/windows.hpp>
+#define BOOST_ATOMIC_DETAIL_PLATFORM msvc_x86
-#elif 0 && defined(__GNUC__) /* currently does not work correctly */
+#elif defined(_MSC_VER) && _MSC_VER >= 1700 && defined(_M_ARM)
- #include <boost/atomic/detail/base.hpp>
- #include <boost/atomic/detail/gcc-cas.hpp>
+#define BOOST_ATOMIC_DETAIL_PLATFORM msvc_arm
+
+#endif
-#else
+// OS-based backends
+#if !defined(BOOST_ATOMIC_DETAIL_PLATFORM)
-#include <boost/atomic/detail/base.hpp>
+#if defined(__linux__) && defined(__arm__)
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM linux_arm
+
+#elif defined(BOOST_WINDOWS) || defined(_WIN32_CE)
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM windows
#endif
+#endif // !defined(BOOST_ATOMIC_DETAIL_PLATFORM)
+
+#endif // !defined(BOOST_ATOMIC_FORCE_FALLBACK)
+
+#if !defined(BOOST_ATOMIC_DETAIL_PLATFORM)
+#define BOOST_ATOMIC_DETAIL_PLATFORM emulated
+#define BOOST_ATOMIC_EMULATED
#endif
+
+#define BOOST_ATOMIC_DETAIL_HEADER(prefix) <BOOST_JOIN(prefix, BOOST_ATOMIC_DETAIL_PLATFORM).hpp>
+
+#endif // BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/storage_type.hpp b/3party/boost/boost/atomic/detail/storage_type.hpp
new file mode 100644
index 0000000000..a024f1d327
--- /dev/null
+++ b/3party/boost/boost/atomic/detail/storage_type.hpp
@@ -0,0 +1,168 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/detail/storage_type.hpp
+ *
+ * This header defines underlying types used as storage
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_STORAGE_TYPE_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_STORAGE_TYPE_HPP_INCLUDED_
+
+#include <cstring>
+#include <boost/cstdint.hpp>
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace atomics {
+namespace detail {
+
+template< unsigned int Size >
+struct buffer_storage
+{
+ unsigned char data[Size];
+
+ BOOST_FORCEINLINE bool operator! () const BOOST_NOEXCEPT
+ {
+ bool result = true;
+ for (unsigned int i = 0; i < Size && result; ++i)
+ {
+ result &= data[i] == 0;
+ }
+ return result;
+ }
+
+ BOOST_FORCEINLINE bool operator== (buffer_storage const& that) const BOOST_NOEXCEPT
+ {
+ return std::memcmp(data, that.data, Size) == 0;
+ }
+
+ BOOST_FORCEINLINE bool operator!= (buffer_storage const& that) const BOOST_NOEXCEPT
+ {
+ return std::memcmp(data, that.data, Size) != 0;
+ }
+};
+
+template< unsigned int Size, bool Signed >
+struct make_storage_type
+{
+ typedef buffer_storage< Size > type;
+};
+
+template< >
+struct make_storage_type< 1u, false >
+{
+ typedef boost::uint8_t type;
+};
+
+template< >
+struct make_storage_type< 1u, true >
+{
+ typedef boost::int8_t type;
+};
+
+template< >
+struct make_storage_type< 2u, false >
+{
+ typedef boost::uint16_t type;
+};
+
+template< >
+struct make_storage_type< 2u, true >
+{
+ typedef boost::int16_t type;
+};
+
+template< >
+struct make_storage_type< 4u, false >
+{
+ typedef boost::uint32_t type;
+};
+
+template< >
+struct make_storage_type< 4u, true >
+{
+ typedef boost::int32_t type;
+};
+
+template< >
+struct make_storage_type< 8u, false >
+{
+ typedef boost::uint64_t type;
+};
+
+template< >
+struct make_storage_type< 8u, true >
+{
+ typedef boost::int64_t type;
+};
+
+#if defined(BOOST_HAS_INT128)
+
+template< >
+struct make_storage_type< 16u, false >
+{
+ typedef boost::uint128_type type;
+};
+
+template< >
+struct make_storage_type< 16u, true >
+{
+ typedef boost::int128_type type;
+};
+
+#elif !defined(BOOST_NO_ALIGNMENT)
+
+struct BOOST_ALIGNMENT(16) storage128_t
+{
+ boost::uint64_t data[2];
+
+ BOOST_FORCEINLINE bool operator! () const BOOST_NOEXCEPT
+ {
+ return data[0] == 0 && data[1] == 0;
+ }
+};
+
+BOOST_FORCEINLINE bool operator== (storage128_t const& left, storage128_t const& right) BOOST_NOEXCEPT
+{
+ return left.data[0] == right.data[0] && left.data[1] == right.data[1];
+}
+BOOST_FORCEINLINE bool operator!= (storage128_t const& left, storage128_t const& right) BOOST_NOEXCEPT
+{
+ return !(left == right);
+}
+
+template< bool Signed >
+struct make_storage_type< 16u, Signed >
+{
+ typedef storage128_t type;
+};
+
+#endif
+
+template< typename T >
+struct storage_size_of
+{
+ enum _
+ {
+ size = sizeof(T),
+ value = (size == 3 ? 4 : (size >= 5 && size <= 7 ? 8 : (size >= 9 && size <= 15 ? 16 : size)))
+ };
+};
+
+} // namespace detail
+} // namespace atomics
+} // namespace boost
+
+#endif // BOOST_ATOMIC_DETAIL_STORAGE_TYPE_HPP_INCLUDED_
diff --git a/3party/boost/boost/atomic/detail/type-classification.hpp b/3party/boost/boost/atomic/detail/type-classification.hpp
deleted file mode 100644
index f7c2f8bf8f..0000000000
--- a/3party/boost/boost/atomic/detail/type-classification.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_TYPE_CLASSIFICATION_HPP
-#define BOOST_ATOMIC_DETAIL_TYPE_CLASSIFICATION_HPP
-
-// Copyright (c) 2011 Helge Bahmann
-//
-// Distributed under the Boost Software License, Version 1.0.
-// See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/atomic/detail/config.hpp>
-#include <boost/type_traits/is_integral.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-template<typename T, bool IsInt = boost::is_integral<T>::value>
-struct classify
-{
- typedef void type;
-};
-
-template<typename T>
-struct classify<T, true> {typedef int type;};
-
-template<typename T>
-struct classify<T*, false> {typedef void* type;};
-
-template<typename T>
-struct storage_size_of
-{
- enum _
- {
- size = sizeof(T),
- value = (size == 3 ? 4 : (size == 5 || size == 6 || size == 7 ? 8 : size))
- };
-};
-
-}}}
-
-#endif
diff --git a/3party/boost/boost/atomic/detail/windows.hpp b/3party/boost/boost/atomic/detail/windows.hpp
deleted file mode 100644
index 0fa9712064..0000000000
--- a/3party/boost/boost/atomic/detail/windows.hpp
+++ /dev/null
@@ -1,1484 +0,0 @@
-#ifndef BOOST_ATOMIC_DETAIL_WINDOWS_HPP
-#define BOOST_ATOMIC_DETAIL_WINDOWS_HPP
-
-// Copyright (c) 2009 Helge Bahmann
-// Copyright (c) 2012 Andrey Semashev
-// Copyright (c) 2013 Tim Blechmann, Andrey Semashev
-//
-// 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 <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/type_traits/make_signed.hpp>
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/interlocked.hpp>
-
-#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-#ifdef _MSC_VER
-#pragma warning(push)
-// 'order' : unreferenced formal parameter
-#pragma warning(disable: 4100)
-#endif
-
-#if defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_IX86))
-extern "C" void _mm_pause(void);
-#pragma intrinsic(_mm_pause)
-#define BOOST_ATOMIC_X86_PAUSE() _mm_pause()
-#else
-#define BOOST_ATOMIC_X86_PAUSE()
-#endif
-
-// Define hardware barriers
-#if defined(_MSC_VER) && (defined(_M_AMD64) || (defined(_M_IX86) && defined(_M_IX86_FP) && _M_IX86_FP >= 2))
-extern "C" void _mm_mfence(void);
-#pragma intrinsic(_mm_mfence)
-#endif
-
-// Define compiler barriers
-#if defined(__INTEL_COMPILER)
-#define BOOST_ATOMIC_COMPILER_BARRIER __memory_barrier();
-#elif defined(_MSC_VER) && _MSC_VER >= 1310 && !defined(_WIN32_WCE)
-extern "C" void _ReadWriteBarrier(void);
-#pragma intrinsic(_ReadWriteBarrier)
-#define BOOST_ATOMIC_COMPILER_BARRIER() _ReadWriteBarrier()
-#endif
-
-#ifndef BOOST_ATOMIC_COMPILER_BARRIER
-#define BOOST_ATOMIC_COMPILER_BARRIER()
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-BOOST_FORCEINLINE void hardware_full_fence(void)
-{
-#if defined(_MSC_VER) && (defined(_M_AMD64) || (defined(_M_IX86) && defined(_M_IX86_FP) && _M_IX86_FP >= 2))
- // Use mfence only if SSE2 is available
- _mm_mfence();
-#else
- long tmp;
- BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&tmp, 0);
-#endif
-}
-
-// Define compiler barriers
-#if defined(_MSC_VER) && _MSC_VER >= 1310 && !defined(_WIN32_WCE)
-extern "C" void _ReadWriteBarrier();
-#pragma intrinsic(_ReadWriteBarrier)
-#define BOOST_ATOMIC_COMPILER_BARRIER() _ReadWriteBarrier()
-#endif
-
-#ifndef BOOST_ATOMIC_COMPILER_BARRIER
-#define BOOST_ATOMIC_COMPILER_BARRIER()
-#endif
-
-BOOST_FORCEINLINE void
-platform_fence_before(memory_order)
-{
- BOOST_ATOMIC_COMPILER_BARRIER();
-}
-
-BOOST_FORCEINLINE void
-platform_fence_after(memory_order)
-{
- BOOST_ATOMIC_COMPILER_BARRIER();
-}
-
-BOOST_FORCEINLINE void
-platform_fence_before_store(memory_order)
-{
- BOOST_ATOMIC_COMPILER_BARRIER();
-}
-
-BOOST_FORCEINLINE void
-platform_fence_after_store(memory_order)
-{
- BOOST_ATOMIC_COMPILER_BARRIER();
-}
-
-BOOST_FORCEINLINE void
-platform_fence_after_load(memory_order order)
-{
- BOOST_ATOMIC_COMPILER_BARRIER();
-
- // On x86 and x86_64 there is no need for a hardware barrier,
- // even if seq_cst memory order is requested, because all
- // seq_cst writes are implemented with lock-prefixed operations
- // or xchg which has implied lock prefix. Therefore normal loads
- // are already ordered with seq_cst stores on these architectures.
-
-#if !(defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_IX86)))
- if (order == memory_order_seq_cst)
- hardware_full_fence();
-#endif
-}
-
-} // namespace detail
-} // namespace atomics
-
-#define BOOST_ATOMIC_THREAD_FENCE 2
-BOOST_FORCEINLINE void
-atomic_thread_fence(memory_order order)
-{
- BOOST_ATOMIC_COMPILER_BARRIER();
- if (order == memory_order_seq_cst)
- atomics::detail::hardware_full_fence();
-}
-
-#define BOOST_ATOMIC_SIGNAL_FENCE 2
-BOOST_FORCEINLINE void
-atomic_signal_fence(memory_order)
-{
- BOOST_ATOMIC_COMPILER_BARRIER();
-}
-
-#undef BOOST_ATOMIC_COMPILER_BARRIER
-
-class atomic_flag
-{
-private:
- atomic_flag(const atomic_flag &) /* = delete */ ;
- atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
- uint32_t v_;
-public:
- BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(0) {}
-
- bool
- test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before(order);
- const uint32_t old = (uint32_t)BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&v_, 1);
- atomics::detail::platform_fence_after(order);
- return old != 0;
- }
-
- void
- clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- atomics::detail::platform_fence_before_store(order);
- BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&v_, 0);
- atomics::detail::platform_fence_after_store(order);
- }
-};
-
-} // namespace boost
-
-#define BOOST_ATOMIC_FLAG_LOCK_FREE 2
-
-#include <boost/atomic/detail/base.hpp>
-
-#if !defined(BOOST_ATOMIC_FORCE_FALLBACK)
-
-#define BOOST_ATOMIC_CHAR_LOCK_FREE 2
-#define BOOST_ATOMIC_SHORT_LOCK_FREE 2
-#define BOOST_ATOMIC_INT_LOCK_FREE 2
-#define BOOST_ATOMIC_LONG_LOCK_FREE 2
-#if defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64)
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 2
-#else
-#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
-#endif
-#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
-#define BOOST_ATOMIC_BOOL_LOCK_FREE 2
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-#if defined(_MSC_VER)
-#pragma warning(push)
-// 'char' : forcing value to bool 'true' or 'false' (performance warning)
-#pragma warning(disable: 4800)
-#endif
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8
- typedef value_type storage_type;
-#else
- typedef uint32_t storage_type;
-#endif
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT: v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- v_ = static_cast< storage_type >(v);
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = static_cast< value_type >(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD8(&v_, v));
-#else
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(&v_, v));
-#endif
- platform_fence_after(order);
- return v;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- typedef typename make_signed< value_type >::type signed_value_type;
- return fetch_add(static_cast< value_type >(-static_cast< signed_value_type >(v)), order);
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_EXCHANGE8
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE8(&v_, v));
-#else
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&v_, v));
-#endif
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8
- value_type oldval = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8(&v_, desired, previous));
-#else
- value_type oldval = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(&v_, desired, previous));
-#endif
- bool success = (previous == oldval);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = oldval;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#ifdef BOOST_ATOMIC_INTERLOCKED_AND8
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_AND8(&v_, v));
- platform_fence_after(order);
- return v;
-#elif defined(BOOST_ATOMIC_INTERLOCKED_AND)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_AND(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#ifdef BOOST_ATOMIC_INTERLOCKED_OR8
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_OR8(&v_, v));
- platform_fence_after(order);
- return v;
-#elif defined(BOOST_ATOMIC_INTERLOCKED_OR)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_OR(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#ifdef BOOST_ATOMIC_INTERLOCKED_XOR8
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_XOR8(&v_, v));
- platform_fence_after(order);
- return v;
-#elif defined(BOOST_ATOMIC_INTERLOCKED_XOR)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_XOR(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16
- typedef value_type storage_type;
-#else
- typedef uint32_t storage_type;
-#endif
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT: v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- v_ = static_cast< storage_type >(v);
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = static_cast< value_type >(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD16(&v_, v));
-#else
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(&v_, v));
-#endif
- platform_fence_after(order);
- return v;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- typedef typename make_signed< value_type >::type signed_value_type;
- return fetch_add(static_cast< value_type >(-static_cast< signed_value_type >(v)), order);
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_EXCHANGE16
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE16(&v_, v));
-#else
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&v_, v));
-#endif
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16
- value_type oldval = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16(&v_, desired, previous));
-#else
- value_type oldval = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(&v_, desired, previous));
-#endif
- bool success = (previous == oldval);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = oldval;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#ifdef BOOST_ATOMIC_INTERLOCKED_AND16
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_AND16(&v_, v));
- platform_fence_after(order);
- return v;
-#elif defined(BOOST_ATOMIC_INTERLOCKED_AND)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_AND(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#ifdef BOOST_ATOMIC_INTERLOCKED_OR16
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_OR16(&v_, v));
- platform_fence_after(order);
- return v;
-#elif defined(BOOST_ATOMIC_INTERLOCKED_OR)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_OR(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#ifdef BOOST_ATOMIC_INTERLOCKED_XOR16
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_XOR16(&v_, v));
- platform_fence_after(order);
- return v;
-#elif defined(BOOST_ATOMIC_INTERLOCKED_XOR)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_XOR(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef value_type storage_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT: v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- v_ = static_cast< storage_type >(v);
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- value_type v = static_cast< value_type >(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD(&v_, v));
- platform_fence_after(order);
- return v;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- typedef typename make_signed< value_type >::type signed_value_type;
- return fetch_add(static_cast< value_type >(-static_cast< signed_value_type >(v)), order);
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&v_, v));
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- value_type oldval = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(&v_, desired, previous));
- bool success = (previous == oldval);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = oldval;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#if defined(BOOST_ATOMIC_INTERLOCKED_AND)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_AND(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#if defined(BOOST_ATOMIC_INTERLOCKED_OR)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_OR(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for(; !compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#if defined(BOOST_ATOMIC_INTERLOCKED_XOR)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_XOR(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- bool
- is_lock_free(void)const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-#if defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64)
-
-template<typename T, bool Sign>
-class base_atomic<T, int, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef value_type storage_type;
- typedef T difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT: v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- v_ = static_cast< storage_type >(v);
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- value_type v = static_cast< value_type >(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64(&v_, v));
- platform_fence_after(order);
- return v;
- }
-
- value_type
- fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- typedef typename make_signed< value_type >::type signed_value_type;
- return fetch_add(static_cast< value_type >(-static_cast< signed_value_type >(v)), order);
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE64(&v_, v));
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- value_type oldval = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64(&v_, desired, previous));
- bool success = (previous == oldval);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = oldval;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#if defined(BOOST_ATOMIC_INTERLOCKED_AND64)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_AND64(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp & v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- value_type
- fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#if defined(BOOST_ATOMIC_INTERLOCKED_OR64)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_OR64(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp | v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- value_type
- fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
-#if defined(BOOST_ATOMIC_INTERLOCKED_XOR64)
- platform_fence_before(order);
- v = static_cast< value_type >(BOOST_ATOMIC_INTERLOCKED_XOR64(&v_, v));
- platform_fence_after(order);
- return v;
-#else
- value_type tmp = load(memory_order_relaxed);
- for (; !compare_exchange_weak(tmp, tmp ^ v, order, memory_order_relaxed);)
- {
- BOOST_ATOMIC_X86_PAUSE();
- }
- return tmp;
-#endif
- }
-
- bool
- is_lock_free(void)const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-#endif // defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64)
-
-// MSVC 2012 fails to recognize sizeof(T) as a constant expression in template specializations
-enum msvc_sizeof_pointer_workaround { sizeof_pointer = sizeof(void*) };
-
-template<bool Sign>
-class base_atomic<void*, void*, sizeof_pointer, Sign>
-{
- typedef base_atomic this_type;
- typedef ptrdiff_t difference_type;
- typedef void* value_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT: v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- v = (value_type)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER(&v_, v);
- platform_fence_after(order);
- return v;
- }
-
- bool compare_exchange_strong(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- value_type oldval = (value_type)BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER(&v_, desired, previous);
- bool success = (previous == oldval);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = oldval;
- return success;
- }
-
- bool compare_exchange_weak(value_type & expected, value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void)const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- value_type res = (value_type)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER(&v_, v);
- platform_fence_after(order);
- return res;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T*, void*, sizeof_pointer, Sign>
-{
- typedef base_atomic this_type;
- typedef T* value_type;
- typedef ptrdiff_t difference_type;
-public:
- BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT: v_(v) {}
- base_atomic(void) {}
-
- void
- store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- platform_fence_before(order);
- const_cast<volatile value_type &>(v_) = v;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- value_type v = const_cast<const volatile value_type &>(v_);
- platform_fence_after_load(order);
- return v;
- }
-
- value_type
- exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- platform_fence_before(order);
- v = (value_type)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_POINTER(&v_, v);
- platform_fence_after(order);
- return v;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- value_type previous = expected;
- platform_fence_before(success_order);
- value_type oldval = (value_type)BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE_POINTER(&v_, desired, previous);
- bool success = (previous == oldval);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- expected = oldval;
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- value_type
- fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- v = v * sizeof(*v_);
- platform_fence_before(order);
- value_type res = (value_type)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER(&v_, v);
- platform_fence_after(order);
- return res;
- }
-
- value_type
- fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- return fetch_add(-v, order);
- }
-
- bool
- is_lock_free(void)const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- value_type v_;
-};
-
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 1, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8
- typedef uint8_t storage_type;
-#else
- typedef uint32_t storage_type;
-#endif
-public:
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8
- BOOST_CONSTEXPR explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(reinterpret_cast< storage_type const& >(v))
- {
- }
-#else
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-#endif
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_EXCHANGE8
- tmp = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE8(&v_, tmp));
-#else
- tmp = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&v_, tmp));
-#endif
- platform_fence_after(order);
- value_type res;
- memcpy(&res, &tmp, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- platform_fence_before(success_order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8
- storage_type oldval = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE8(&v_, desired_s, expected_s));
-#else
- storage_type oldval = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(&v_, desired_s, expected_s));
-#endif
- bool success = (oldval == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &oldval, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void) const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 2, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16
- typedef uint16_t storage_type;
-#else
- typedef uint32_t storage_type;
-#endif
-public:
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16
- BOOST_CONSTEXPR explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(reinterpret_cast< storage_type const& >(v))
- {
- }
-#else
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
-#endif
-
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_EXCHANGE16
- tmp = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE16(&v_, tmp));
-#else
- tmp = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&v_, tmp));
-#endif
- platform_fence_after(order);
- value_type res;
- memcpy(&res, &tmp, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- platform_fence_before(success_order);
-#ifdef BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16
- storage_type oldval = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE16(&v_, desired_s, expected_s));
-#else
- storage_type oldval = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(&v_, desired_s, expected_s));
-#endif
- bool success = (oldval == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &oldval, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void)const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 4, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint32_t storage_type;
-public:
- explicit base_atomic(value_type const& v) : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- tmp = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE(&v_, tmp));
- platform_fence_after(order);
- value_type res;
- memcpy(&res, &tmp, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- platform_fence_before(success_order);
- storage_type oldval = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(&v_, desired_s, expected_s));
- bool success = (oldval == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &oldval, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void)const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-#if defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64)
-
-template<typename T, bool Sign>
-class base_atomic<T, void, 8, Sign>
-{
- typedef base_atomic this_type;
- typedef T value_type;
- typedef uint64_t storage_type;
-public:
- explicit base_atomic(value_type const& v) : v_(0)
- {
- memcpy(&v_, &v, sizeof(value_type));
- }
- base_atomic(void) {}
-
- void
- store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- if (order != memory_order_seq_cst) {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- const_cast<volatile storage_type &>(v_) = tmp;
- } else {
- exchange(v, order);
- }
- }
-
- value_type
- load(memory_order order = memory_order_seq_cst)const volatile BOOST_NOEXCEPT
- {
- storage_type tmp = const_cast<volatile storage_type &>(v_);
- platform_fence_after_load(order);
- value_type v;
- memcpy(&v, &tmp, sizeof(value_type));
- return v;
- }
-
- value_type
- exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
- {
- storage_type tmp = 0;
- memcpy(&tmp, &v, sizeof(value_type));
- platform_fence_before(order);
- tmp = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_EXCHANGE64(&v_, tmp));
- platform_fence_after(order);
- value_type res;
- memcpy(&res, &tmp, sizeof(value_type));
- return res;
- }
-
- bool
- compare_exchange_strong(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- storage_type expected_s = 0, desired_s = 0;
- memcpy(&expected_s, &expected, sizeof(value_type));
- memcpy(&desired_s, &desired, sizeof(value_type));
- platform_fence_before(success_order);
- storage_type oldval = static_cast< storage_type >(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64(&v_, desired_s, expected_s));
- bool success = (oldval == expected_s);
- if (success)
- platform_fence_after(success_order);
- else
- platform_fence_after(failure_order);
- memcpy(&expected, &oldval, sizeof(value_type));
- return success;
- }
-
- bool
- compare_exchange_weak(
- value_type & expected,
- value_type const& desired,
- memory_order success_order,
- memory_order failure_order) volatile BOOST_NOEXCEPT
- {
- return compare_exchange_strong(expected, desired, success_order, failure_order);
- }
-
- bool
- is_lock_free(void)const volatile BOOST_NOEXCEPT
- {
- return true;
- }
-
- BOOST_ATOMIC_DECLARE_BASE_OPERATORS
-private:
- base_atomic(const base_atomic &) /* = delete */ ;
- void operator=(const base_atomic &) /* = delete */ ;
- storage_type v_;
-};
-
-#endif // defined(BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE64)
-
-} // namespace detail
-} // namespace atomics
-} // namespace boost
-
-#endif /* !defined(BOOST_ATOMIC_FORCE_FALLBACK) */
-
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
-#endif
diff --git a/3party/boost/boost/atomic/fences.hpp b/3party/boost/boost/atomic/fences.hpp
new file mode 100644
index 0000000000..31e3040578
--- /dev/null
+++ b/3party/boost/boost/atomic/fences.hpp
@@ -0,0 +1,67 @@
+/*
+ * 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)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file atomic/fences.hpp
+ *
+ * This header contains definition of \c atomic_thread_fence and \c atomic_signal_fence functions.
+ */
+
+#ifndef BOOST_ATOMIC_FENCES_HPP_INCLUDED_
+#define BOOST_ATOMIC_FENCES_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/detail/operations.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+/*
+ * IMPLEMENTATION NOTE: All interface functions MUST be declared with BOOST_FORCEINLINE,
+ * see comment for convert_memory_order_to_gcc in ops_gcc_atomic.hpp.
+ */
+
+namespace boost {
+
+namespace atomics {
+
+#if BOOST_ATOMIC_THREAD_FENCE > 0
+BOOST_FORCEINLINE void atomic_thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+ detail::thread_fence(order);
+}
+#else
+BOOST_FORCEINLINE void atomic_thread_fence(memory_order) BOOST_NOEXCEPT
+{
+ detail::lockpool::thread_fence();
+}
+#endif
+
+#if BOOST_ATOMIC_SIGNAL_FENCE > 0
+BOOST_FORCEINLINE void atomic_signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+ detail::signal_fence(order);
+}
+#else
+BOOST_FORCEINLINE void atomic_signal_fence(memory_order) BOOST_NOEXCEPT
+{
+ detail::lockpool::signal_fence();
+}
+#endif
+
+} // namespace atomics
+
+using atomics::atomic_thread_fence;
+using atomics::atomic_signal_fence;
+
+} // namespace boost
+
+#endif // BOOST_ATOMIC_FENCES_HPP_INCLUDED_
diff --git a/3party/boost/boost/bimap/container_adaptor/container_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/container_adaptor.hpp
index 8e78090a9b..8e78090a9b 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/container_adaptor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/container_adaptor.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/detail/comparison_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/detail/comparison_adaptor.hpp
index 9051a461af..9051a461af 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/detail/comparison_adaptor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/detail/comparison_adaptor.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/detail/functor_bag.hpp b/3party/boost/boost/bimap/container_adaptor/detail/functor_bag.hpp
index fd8c435e03..fd8c435e03 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/detail/functor_bag.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/detail/functor_bag.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/detail/identity_converters.hpp b/3party/boost/boost/bimap/container_adaptor/detail/identity_converters.hpp
index f6f5864122..f6f5864122 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/detail/identity_converters.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/detail/identity_converters.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/detail/key_extractor.hpp b/3party/boost/boost/bimap/container_adaptor/detail/key_extractor.hpp
index 3835b7c43e..3835b7c43e 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/detail/key_extractor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/detail/key_extractor.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/detail/non_unique_container_helper.hpp b/3party/boost/boost/bimap/container_adaptor/detail/non_unique_container_helper.hpp
index 695704535a..695704535a 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/detail/non_unique_container_helper.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/detail/non_unique_container_helper.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/list_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/list_adaptor.hpp
index 310e2b4630..310e2b4630 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/list_adaptor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/list_adaptor.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/multiset_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/multiset_adaptor.hpp
index fe89d9a99d..fe89d9a99d 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/multiset_adaptor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/multiset_adaptor.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp
index 6278844323..6278844323 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/set_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/set_adaptor.hpp
index 6c8dbf3820..6c8dbf3820 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/set_adaptor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/set_adaptor.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/support/iterator_facade_converters.hpp b/3party/boost/boost/bimap/container_adaptor/support/iterator_facade_converters.hpp
index 4bde159df0..4bde159df0 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/support/iterator_facade_converters.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/support/iterator_facade_converters.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/unordered_associative_container_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/unordered_associative_container_adaptor.hpp
index 937a0d8765..937a0d8765 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/unordered_associative_container_adaptor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/unordered_associative_container_adaptor.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/unordered_multiset_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/unordered_multiset_adaptor.hpp
index 1d8e4c980f..1d8e4c980f 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/unordered_multiset_adaptor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/unordered_multiset_adaptor.hpp
diff --git a/3party/boost/boost/bimap/container_adaptor/unordered_set_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/unordered_set_adaptor.hpp
index cf00b0f507..cf00b0f507 100644..100755
--- a/3party/boost/boost/bimap/container_adaptor/unordered_set_adaptor.hpp
+++ b/3party/boost/boost/bimap/container_adaptor/unordered_set_adaptor.hpp
diff --git a/3party/boost/boost/bimap/detail/concept_tags.hpp b/3party/boost/boost/bimap/detail/concept_tags.hpp
index 1f252e3092..1f252e3092 100644..100755
--- a/3party/boost/boost/bimap/detail/concept_tags.hpp
+++ b/3party/boost/boost/bimap/detail/concept_tags.hpp
diff --git a/3party/boost/boost/bimap/detail/debug/static_error.hpp b/3party/boost/boost/bimap/detail/debug/static_error.hpp
index 3a8ed632ae..3a8ed632ae 100644..100755
--- a/3party/boost/boost/bimap/detail/debug/static_error.hpp
+++ b/3party/boost/boost/bimap/detail/debug/static_error.hpp
diff --git a/3party/boost/boost/bimap/detail/generate_index_binder.hpp b/3party/boost/boost/bimap/detail/generate_index_binder.hpp
index 01c899d4d8..01c899d4d8 100644..100755
--- a/3party/boost/boost/bimap/detail/generate_index_binder.hpp
+++ b/3party/boost/boost/bimap/detail/generate_index_binder.hpp
diff --git a/3party/boost/boost/bimap/detail/generate_relation_binder.hpp b/3party/boost/boost/bimap/detail/generate_relation_binder.hpp
index 0ff47621bd..0ff47621bd 100644..100755
--- a/3party/boost/boost/bimap/detail/generate_relation_binder.hpp
+++ b/3party/boost/boost/bimap/detail/generate_relation_binder.hpp
diff --git a/3party/boost/boost/bimap/detail/generate_view_binder.hpp b/3party/boost/boost/bimap/detail/generate_view_binder.hpp
index 925184cff7..925184cff7 100644..100755
--- a/3party/boost/boost/bimap/detail/generate_view_binder.hpp
+++ b/3party/boost/boost/bimap/detail/generate_view_binder.hpp
diff --git a/3party/boost/boost/bimap/detail/is_set_type_of.hpp b/3party/boost/boost/bimap/detail/is_set_type_of.hpp
index 13d52c1d04..13d52c1d04 100644..100755
--- a/3party/boost/boost/bimap/detail/is_set_type_of.hpp
+++ b/3party/boost/boost/bimap/detail/is_set_type_of.hpp
diff --git a/3party/boost/boost/bimap/detail/manage_additional_parameters.hpp b/3party/boost/boost/bimap/detail/manage_additional_parameters.hpp
index 3d22d730e7..3d22d730e7 100644..100755
--- a/3party/boost/boost/bimap/detail/manage_additional_parameters.hpp
+++ b/3party/boost/boost/bimap/detail/manage_additional_parameters.hpp
diff --git a/3party/boost/boost/bimap/detail/manage_bimap_key.hpp b/3party/boost/boost/bimap/detail/manage_bimap_key.hpp
index d485e50aee..d485e50aee 100644..100755
--- a/3party/boost/boost/bimap/detail/manage_bimap_key.hpp
+++ b/3party/boost/boost/bimap/detail/manage_bimap_key.hpp
diff --git a/3party/boost/boost/bimap/detail/modifier_adaptor.hpp b/3party/boost/boost/bimap/detail/modifier_adaptor.hpp
index b170549d08..b170549d08 100644..100755
--- a/3party/boost/boost/bimap/detail/modifier_adaptor.hpp
+++ b/3party/boost/boost/bimap/detail/modifier_adaptor.hpp
diff --git a/3party/boost/boost/bimap/detail/non_unique_views_helper.hpp b/3party/boost/boost/bimap/detail/non_unique_views_helper.hpp
index 6801632019..6801632019 100644..100755
--- a/3party/boost/boost/bimap/detail/non_unique_views_helper.hpp
+++ b/3party/boost/boost/bimap/detail/non_unique_views_helper.hpp
diff --git a/3party/boost/boost/bimap/detail/test/check_metadata.hpp b/3party/boost/boost/bimap/detail/test/check_metadata.hpp
index b669ee082d..b669ee082d 100644..100755
--- a/3party/boost/boost/bimap/detail/test/check_metadata.hpp
+++ b/3party/boost/boost/bimap/detail/test/check_metadata.hpp
diff --git a/3party/boost/boost/bimap/detail/user_interface_config.hpp b/3party/boost/boost/bimap/detail/user_interface_config.hpp
index 1d9a8e8e15..1d9a8e8e15 100644..100755
--- a/3party/boost/boost/bimap/detail/user_interface_config.hpp
+++ b/3party/boost/boost/bimap/detail/user_interface_config.hpp
diff --git a/3party/boost/boost/bimap/relation/detail/access_builder.hpp b/3party/boost/boost/bimap/relation/detail/access_builder.hpp
index a1e939f827..a1e939f827 100644..100755
--- a/3party/boost/boost/bimap/relation/detail/access_builder.hpp
+++ b/3party/boost/boost/bimap/relation/detail/access_builder.hpp
diff --git a/3party/boost/boost/bimap/relation/detail/metadata_access_builder.hpp b/3party/boost/boost/bimap/relation/detail/metadata_access_builder.hpp
index 4ef6cae938..4ef6cae938 100644..100755
--- a/3party/boost/boost/bimap/relation/detail/metadata_access_builder.hpp
+++ b/3party/boost/boost/bimap/relation/detail/metadata_access_builder.hpp
diff --git a/3party/boost/boost/bimap/relation/detail/static_access_builder.hpp b/3party/boost/boost/bimap/relation/detail/static_access_builder.hpp
index 72f9925b0c..72f9925b0c 100644..100755
--- a/3party/boost/boost/bimap/relation/detail/static_access_builder.hpp
+++ b/3party/boost/boost/bimap/relation/detail/static_access_builder.hpp
diff --git a/3party/boost/boost/bimap/relation/detail/to_mutable_relation_functor.hpp b/3party/boost/boost/bimap/relation/detail/to_mutable_relation_functor.hpp
index 1e8b521044..1e8b521044 100644..100755
--- a/3party/boost/boost/bimap/relation/detail/to_mutable_relation_functor.hpp
+++ b/3party/boost/boost/bimap/relation/detail/to_mutable_relation_functor.hpp
diff --git a/3party/boost/boost/bimap/relation/member_at.hpp b/3party/boost/boost/bimap/relation/member_at.hpp
index c39738fc2f..c39738fc2f 100644..100755
--- a/3party/boost/boost/bimap/relation/member_at.hpp
+++ b/3party/boost/boost/bimap/relation/member_at.hpp
diff --git a/3party/boost/boost/bimap/relation/pair_layout.hpp b/3party/boost/boost/bimap/relation/pair_layout.hpp
index 24368db105..24368db105 100644..100755
--- a/3party/boost/boost/bimap/relation/pair_layout.hpp
+++ b/3party/boost/boost/bimap/relation/pair_layout.hpp
diff --git a/3party/boost/boost/bimap/relation/support/get.hpp b/3party/boost/boost/bimap/relation/support/get.hpp
index 3a3afde15d..3a3afde15d 100644..100755
--- a/3party/boost/boost/bimap/relation/support/get.hpp
+++ b/3party/boost/boost/bimap/relation/support/get.hpp
diff --git a/3party/boost/boost/bimap/relation/support/get_pair_functor.hpp b/3party/boost/boost/bimap/relation/support/get_pair_functor.hpp
index 5f37bf6cfe..5f37bf6cfe 100644..100755
--- a/3party/boost/boost/bimap/relation/support/get_pair_functor.hpp
+++ b/3party/boost/boost/bimap/relation/support/get_pair_functor.hpp
diff --git a/3party/boost/boost/bimap/relation/support/is_tag_of_member_at.hpp b/3party/boost/boost/bimap/relation/support/is_tag_of_member_at.hpp
index b2b1b7497b..b2b1b7497b 100644..100755
--- a/3party/boost/boost/bimap/relation/support/is_tag_of_member_at.hpp
+++ b/3party/boost/boost/bimap/relation/support/is_tag_of_member_at.hpp
diff --git a/3party/boost/boost/bimap/relation/support/member_with_tag.hpp b/3party/boost/boost/bimap/relation/support/member_with_tag.hpp
index a8324ff281..a8324ff281 100644..100755
--- a/3party/boost/boost/bimap/relation/support/member_with_tag.hpp
+++ b/3party/boost/boost/bimap/relation/support/member_with_tag.hpp
diff --git a/3party/boost/boost/bimap/relation/support/opposite_tag.hpp b/3party/boost/boost/bimap/relation/support/opposite_tag.hpp
index 174bd985c0..174bd985c0 100644..100755
--- a/3party/boost/boost/bimap/relation/support/opposite_tag.hpp
+++ b/3party/boost/boost/bimap/relation/support/opposite_tag.hpp
diff --git a/3party/boost/boost/bimap/relation/support/pair_by.hpp b/3party/boost/boost/bimap/relation/support/pair_by.hpp
index 1ce25fbe5c..1ce25fbe5c 100644..100755
--- a/3party/boost/boost/bimap/relation/support/pair_by.hpp
+++ b/3party/boost/boost/bimap/relation/support/pair_by.hpp
diff --git a/3party/boost/boost/bimap/relation/support/pair_type_by.hpp b/3party/boost/boost/bimap/relation/support/pair_type_by.hpp
index 64f98d1ecc..64f98d1ecc 100644..100755
--- a/3party/boost/boost/bimap/relation/support/pair_type_by.hpp
+++ b/3party/boost/boost/bimap/relation/support/pair_type_by.hpp
diff --git a/3party/boost/boost/bimap/relation/support/value_type_of.hpp b/3party/boost/boost/bimap/relation/support/value_type_of.hpp
index 9dc5761119..9dc5761119 100644..100755
--- a/3party/boost/boost/bimap/relation/support/value_type_of.hpp
+++ b/3party/boost/boost/bimap/relation/support/value_type_of.hpp
diff --git a/3party/boost/boost/bimap/relation/symmetrical_base.hpp b/3party/boost/boost/bimap/relation/symmetrical_base.hpp
index ea787c3731..ea787c3731 100644..100755
--- a/3party/boost/boost/bimap/relation/symmetrical_base.hpp
+++ b/3party/boost/boost/bimap/relation/symmetrical_base.hpp
diff --git a/3party/boost/boost/bimap/support/data_type_by.hpp b/3party/boost/boost/bimap/support/data_type_by.hpp
index c6d2e2cc99..c6d2e2cc99 100644..100755
--- a/3party/boost/boost/bimap/support/data_type_by.hpp
+++ b/3party/boost/boost/bimap/support/data_type_by.hpp
diff --git a/3party/boost/boost/bimap/support/key_type_by.hpp b/3party/boost/boost/bimap/support/key_type_by.hpp
index 0b4abb5d28..0b4abb5d28 100644..100755
--- a/3party/boost/boost/bimap/support/key_type_by.hpp
+++ b/3party/boost/boost/bimap/support/key_type_by.hpp
diff --git a/3party/boost/boost/bimap/support/lambda.hpp b/3party/boost/boost/bimap/support/lambda.hpp
index cffa2c3f9d..cffa2c3f9d 100644..100755
--- a/3party/boost/boost/bimap/support/lambda.hpp
+++ b/3party/boost/boost/bimap/support/lambda.hpp
diff --git a/3party/boost/boost/bimap/support/map_by.hpp b/3party/boost/boost/bimap/support/map_by.hpp
index ac57f1bccc..ac57f1bccc 100644..100755
--- a/3party/boost/boost/bimap/support/map_by.hpp
+++ b/3party/boost/boost/bimap/support/map_by.hpp
diff --git a/3party/boost/boost/bimap/support/map_type_by.hpp b/3party/boost/boost/bimap/support/map_type_by.hpp
index 00b4d20be5..00b4d20be5 100644..100755
--- a/3party/boost/boost/bimap/support/map_type_by.hpp
+++ b/3party/boost/boost/bimap/support/map_type_by.hpp
diff --git a/3party/boost/boost/bimap/support/value_type_by.hpp b/3party/boost/boost/bimap/support/value_type_by.hpp
index a7ce6c0e5d..a7ce6c0e5d 100644..100755
--- a/3party/boost/boost/bimap/support/value_type_by.hpp
+++ b/3party/boost/boost/bimap/support/value_type_by.hpp
diff --git a/3party/boost/boost/bimap/tags/support/apply_to_value_type.hpp b/3party/boost/boost/bimap/tags/support/apply_to_value_type.hpp
index bb6aa60613..bb6aa60613 100644..100755
--- a/3party/boost/boost/bimap/tags/support/apply_to_value_type.hpp
+++ b/3party/boost/boost/bimap/tags/support/apply_to_value_type.hpp
diff --git a/3party/boost/boost/bimap/tags/support/default_tagged.hpp b/3party/boost/boost/bimap/tags/support/default_tagged.hpp
index 4c02a65952..4c02a65952 100644..100755
--- a/3party/boost/boost/bimap/tags/support/default_tagged.hpp
+++ b/3party/boost/boost/bimap/tags/support/default_tagged.hpp
diff --git a/3party/boost/boost/bimap/tags/support/is_tagged.hpp b/3party/boost/boost/bimap/tags/support/is_tagged.hpp
index 892b3b1022..892b3b1022 100644..100755
--- a/3party/boost/boost/bimap/tags/support/is_tagged.hpp
+++ b/3party/boost/boost/bimap/tags/support/is_tagged.hpp
diff --git a/3party/boost/boost/bimap/tags/support/overwrite_tagged.hpp b/3party/boost/boost/bimap/tags/support/overwrite_tagged.hpp
index 55cd0fc8e4..55cd0fc8e4 100644..100755
--- a/3party/boost/boost/bimap/tags/support/overwrite_tagged.hpp
+++ b/3party/boost/boost/bimap/tags/support/overwrite_tagged.hpp
diff --git a/3party/boost/boost/bimap/tags/support/tag_of.hpp b/3party/boost/boost/bimap/tags/support/tag_of.hpp
index 413703b41c..413703b41c 100644..100755
--- a/3party/boost/boost/bimap/tags/support/tag_of.hpp
+++ b/3party/boost/boost/bimap/tags/support/tag_of.hpp
diff --git a/3party/boost/boost/bimap/tags/support/value_type_of.hpp b/3party/boost/boost/bimap/tags/support/value_type_of.hpp
index a4ea82814c..a4ea82814c 100644..100755
--- a/3party/boost/boost/bimap/tags/support/value_type_of.hpp
+++ b/3party/boost/boost/bimap/tags/support/value_type_of.hpp
diff --git a/3party/boost/boost/bimap/tags/tagged.hpp b/3party/boost/boost/bimap/tags/tagged.hpp
index ca2a24c2f9..ca2a24c2f9 100644..100755
--- a/3party/boost/boost/bimap/tags/tagged.hpp
+++ b/3party/boost/boost/bimap/tags/tagged.hpp
diff --git a/3party/boost/boost/bimap/views/multiset_view.hpp b/3party/boost/boost/bimap/views/multiset_view.hpp
index c49230b2cb..c49230b2cb 100644..100755
--- a/3party/boost/boost/bimap/views/multiset_view.hpp
+++ b/3party/boost/boost/bimap/views/multiset_view.hpp
diff --git a/3party/boost/boost/bimap/views/set_view.hpp b/3party/boost/boost/bimap/views/set_view.hpp
index 8a857afc7b..8a857afc7b 100644..100755
--- a/3party/boost/boost/bimap/views/set_view.hpp
+++ b/3party/boost/boost/bimap/views/set_view.hpp
diff --git a/3party/boost/boost/bimap/views/unordered_multiset_view.hpp b/3party/boost/boost/bimap/views/unordered_multiset_view.hpp
index 3a72e36c79..3a72e36c79 100644..100755
--- a/3party/boost/boost/bimap/views/unordered_multiset_view.hpp
+++ b/3party/boost/boost/bimap/views/unordered_multiset_view.hpp
diff --git a/3party/boost/boost/bimap/views/unordered_set_view.hpp b/3party/boost/boost/bimap/views/unordered_set_view.hpp
index 02187aef2a..02187aef2a 100644..100755
--- a/3party/boost/boost/bimap/views/unordered_set_view.hpp
+++ b/3party/boost/boost/bimap/views/unordered_set_view.hpp
diff --git a/3party/boost/boost/bind/arg.hpp b/3party/boost/boost/bind/arg.hpp
index 0d5cd03a74..c879bb408b 100644
--- a/3party/boost/boost/bind/arg.hpp
+++ b/3party/boost/boost/bind/arg.hpp
@@ -21,6 +21,7 @@
#include <boost/config.hpp>
#include <boost/is_placeholder.hpp>
+#include <boost/static_assert.hpp>
namespace boost
{
@@ -33,8 +34,7 @@ template< int I > struct arg
template< class T > arg( T const & /* t */ )
{
- // static assert I == is_placeholder<T>::value
- typedef char T_must_be_placeholder[ I == is_placeholder<T>::value? 1: -1 ];
+ BOOST_STATIC_ASSERT( I == is_placeholder<T>::value );
}
};
diff --git a/3party/boost/boost/call_traits.hpp b/3party/boost/boost/call_traits.hpp
index 5253a6de58..2c1328e94d 100644
--- a/3party/boost/boost/call_traits.hpp
+++ b/3party/boost/boost/call_traits.hpp
@@ -5,7 +5,7 @@
//
// See http://www.boost.org/libs/utility for most recent version including documentation.
-// See boost/detail/call_traits.hpp and boost/detail/ob_call_traits.hpp
+// See boost/detail/call_traits.hpp
// for full copyright notices.
#ifndef BOOST_CALL_TRAITS_HPP
@@ -15,10 +15,6 @@
#include <boost/config.hpp>
#endif
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#include <boost/detail/ob_call_traits.hpp>
-#else
#include <boost/detail/call_traits.hpp>
-#endif
#endif // BOOST_CALL_TRAITS_HPP
diff --git a/3party/boost/boost/cast.hpp b/3party/boost/boost/cast.hpp
index 2615d183fa..ab452bdf16 100644
--- a/3party/boost/boost/cast.hpp
+++ b/3party/boost/boost/cast.hpp
@@ -1,107 +1,20 @@
-// boost cast.hpp header file ----------------------------------------------//
-
-// (C) Copyright Kevlin Henney and Dave Abrahams 1999.
+// boost cast.hpp header file
+//
+// (C) Copyright Antony Polukhin 2014.
+//
// 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/conversion for Documentation.
-// Revision History
-// 23 JUn 05 numeric_cast removed and redirected to the new verion (Fernando Cacciola)
-// 02 Apr 01 Removed BOOST_NO_LIMITS workarounds and included
-// <boost/limits.hpp> instead (the workaround did not
-// actually compile when BOOST_NO_LIMITS was defined in
-// any case, so we loose nothing). (John Maddock)
-// 21 Jan 01 Undid a bug I introduced yesterday. numeric_cast<> never
-// worked with stock GCC; trying to get it to do that broke
-// vc-stlport.
-// 20 Jan 01 Moved BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS to config.hpp.
-// Removed unused BOOST_EXPLICIT_TARGET macro. Moved
-// boost::detail::type to boost/type.hpp. Made it compile with
-// stock gcc again (Dave Abrahams)
-// 29 Nov 00 Remove nested namespace cast, cleanup spacing before Formal
-// Review (Beman Dawes)
-// 19 Oct 00 Fix numeric_cast for floating-point types (Dave Abrahams)
-// 15 Jul 00 Suppress numeric_cast warnings for GCC, Borland and MSVC
-// (Dave Abrahams)
-// 30 Jun 00 More MSVC6 wordarounds. See comments below. (Dave Abrahams)
-// 28 Jun 00 Removed implicit_cast<>. See comment below. (Beman Dawes)
-// 27 Jun 00 More MSVC6 workarounds
-// 15 Jun 00 Add workarounds for MSVC6
-// 2 Feb 00 Remove bad_numeric_cast ";" syntax error (Doncho Angelov)
-// 26 Jan 00 Add missing throw() to bad_numeric_cast::what(0 (Adam Levar)
-// 29 Dec 99 Change using declarations so usages in other namespaces work
-// correctly (Dave Abrahams)
-// 23 Sep 99 Change polymorphic_downcast assert to also detect M.I. errors
-// as suggested Darin Adler and improved by Valentin Bonnard.
-// 2 Sep 99 Remove controversial asserts, simplify, rename.
-// 30 Aug 99 Move to cast.hpp, replace value_cast with numeric_cast,
-// place in nested namespace.
-// 3 Aug 99 Initial version
+// This is a DEPRECATED header file!
+// Use <boost/polymorphic_cast.hpp> or <boost/numeric/conversion/cast.hpp> instead
#ifndef BOOST_CAST_HPP
#define BOOST_CAST_HPP
-# include <boost/config.hpp>
-# include <boost/assert.hpp>
-# include <typeinfo>
-# include <boost/type.hpp>
-# include <boost/limits.hpp>
-# include <boost/detail/select_type.hpp>
-
-// It has been demonstrated numerous times that MSVC 6.0 fails silently at link
-// time if you use a template function which has template parameters that don't
-// appear in the function's argument list.
-//
-// TODO: Add this to config.hpp?
-# if defined(BOOST_MSVC) && BOOST_MSVC < 1300
-# define BOOST_EXPLICIT_DEFAULT_TARGET , ::boost::type<Target>* = 0
-# else
-# define BOOST_EXPLICIT_DEFAULT_TARGET
-# endif
-
-namespace boost
-{
-// See the documentation for descriptions of how to choose between
-// static_cast<>, dynamic_cast<>, polymorphic_cast<> and polymorphic_downcast<>
-
-// polymorphic_cast --------------------------------------------------------//
-
- // Runtime checked polymorphic downcasts and crosscasts.
- // Suggested in The C++ Programming Language, 3rd Ed, Bjarne Stroustrup,
- // section 15.8 exercise 1, page 425.
-
- template <class Target, class Source>
- inline Target polymorphic_cast(Source* x BOOST_EXPLICIT_DEFAULT_TARGET)
- {
- Target tmp = dynamic_cast<Target>(x);
- if ( tmp == 0 ) throw std::bad_cast();
- return tmp;
- }
-
-// polymorphic_downcast ----------------------------------------------------//
-
- // BOOST_ASSERT() checked polymorphic downcast. Crosscasts prohibited.
-
- // WARNING: Because this cast uses BOOST_ASSERT(), it violates
- // the One Definition Rule if used in multiple translation units
- // where BOOST_DISABLE_ASSERTS, BOOST_ENABLE_ASSERT_HANDLER
- // NDEBUG are defined inconsistently.
-
- // Contributed by Dave Abrahams
-
- template <class Target, class Source>
- inline Target polymorphic_downcast(Source* x BOOST_EXPLICIT_DEFAULT_TARGET)
- {
- BOOST_ASSERT( dynamic_cast<Target>(x) == x ); // detect logic error
- return static_cast<Target>(x);
- }
-
-# undef BOOST_EXPLICIT_DEFAULT_TARGET
-
-} // namespace boost
-
+# include <boost/polymorphic_cast.hpp>
# include <boost/numeric/conversion/cast.hpp>
#endif // BOOST_CAST_HPP
diff --git a/3party/boost/boost/checked_delete.hpp b/3party/boost/boost/checked_delete.hpp
index 9bb84e8e1b..fb71c789c8 100644
--- a/3party/boost/boost/checked_delete.hpp
+++ b/3party/boost/boost/checked_delete.hpp
@@ -1,69 +1,17 @@
-#ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
-#define BOOST_CHECKED_DELETE_HPP_INCLUDED
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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)
+ */
-// MS compatible compilers support #pragma once
+#ifndef BOOST_CHECKED_DELETE_HPP
+#define BOOST_CHECKED_DELETE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-//
-// boost/checked_delete.hpp
-//
-// Copyright (c) 2002, 2003 Peter Dimov
-// Copyright (c) 2003 Daniel Frey
-// Copyright (c) 2003 Howard Hinnant
-//
-// 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/utility/checked_delete.html for documentation.
-//
-
-namespace boost
-{
-
-// verify that types are complete for increased safety
-
-template<class T> inline void checked_delete(T * x)
-{
- // intentionally complex - simplification causes regressions
- typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
- (void) sizeof(type_must_be_complete);
- delete x;
-}
-
-template<class T> inline void checked_array_delete(T * x)
-{
- typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
- (void) sizeof(type_must_be_complete);
- delete [] x;
-}
+// The header file at this path is deprecated;
+// use boost/core/checked_delete.hpp instead.
-template<class T> struct checked_deleter
-{
- typedef void result_type;
- typedef T * argument_type;
+#include <boost/core/checked_delete.hpp>
- void operator()(T * x) const
- {
- // boost:: disables ADL
- boost::checked_delete(x);
- }
-};
-
-template<class T> struct checked_array_deleter
-{
- typedef void result_type;
- typedef T * argument_type;
-
- void operator()(T * x) const
- {
- boost::checked_array_delete(x);
- }
-};
-
-} // namespace boost
-
-#endif // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
+#endif
diff --git a/3party/boost/boost/chrono/config.hpp b/3party/boost/boost/chrono/config.hpp
index 301b877510..1045ba3a79 100644
--- a/3party/boost/boost/chrono/config.hpp
+++ b/3party/boost/boost/chrono/config.hpp
@@ -2,6 +2,7 @@
// Copyright Beman Dawes 2003, 2006, 2008
// Copyright 2009-2011 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
// 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)
@@ -12,6 +13,7 @@
#define BOOST_CHRONO_CONFIG_HPP
#include <boost/config.hpp>
+#include <boost/predef.h>
#if !defined BOOST_CHRONO_VERSION
#define BOOST_CHRONO_VERSION 1
@@ -64,13 +66,16 @@
# define BOOST_CHRONO_HAS_PROCESS_CLOCKS
# endif
# define BOOST_CHRONO_HAS_CLOCK_STEADY
-# define BOOST_CHRONO_HAS_THREAD_CLOCK
+# if BOOST_PLAT_WINDOWS_DESKTOP
+# define BOOST_CHRONO_HAS_THREAD_CLOCK
+# endif
# define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true
# endif
# if defined( BOOST_CHRONO_MAC_API )
# define BOOST_CHRONO_HAS_PROCESS_CLOCKS
# define BOOST_CHRONO_HAS_CLOCK_STEADY
+# define BOOST_CHRONO_HAS_THREAD_CLOCK
# define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true
# endif
@@ -92,7 +97,7 @@
# undef BOOST_CHRONO_HAS_THREAD_CLOCK
# undef BOOST_CHRONO_THREAD_CLOCK_IS_STEADY
# endif
-# if defined(__HP_aCC) && defined(__hpux)
+# if (defined(__HP_aCC) || defined(__GNUC__)) && defined(__hpux)
# undef BOOST_CHRONO_HAS_THREAD_CLOCK
# undef BOOST_CHRONO_THREAD_CLOCK_IS_STEADY
# endif
@@ -106,8 +111,6 @@
#undef BOOST_CHRONO_THREAD_CLOCK_IS_STEADY
#endif
-//#undef BOOST_CHRONO_HAS_PROCESS_CLOCKS
-
// unicode support ------------------------------//
#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) || defined(BOOST_NO_CXX11_CHAR16_T) || defined(BOOST_NO_CXX11_CHAR32_T)
@@ -116,14 +119,7 @@
#define BOOST_CHRONO_HAS_UNICODE_SUPPORT 1
#endif
-#if ! defined BOOST_NOEXCEPT
-#if defined(BOOST_NO_CXX11_NOEXCEPT)
-#define BOOST_NOEXCEPT
-#else
-#define BOOST_NOEXCEPT noexcept
-#endif
-#endif
-
+#ifndef BOOST_CHRONO_LIB_CONSTEXPR
#if defined( BOOST_NO_CXX11_NUMERIC_LIMITS )
#define BOOST_CHRONO_LIB_CONSTEXPR
#elif defined(_LIBCPP_VERSION) && !defined(_LIBCPP_CONSTEXPR)
@@ -131,6 +127,7 @@
#else
#define BOOST_CHRONO_LIB_CONSTEXPR BOOST_CONSTEXPR
#endif
+#endif
#if defined( BOOST_NO_CXX11_NUMERIC_LIMITS )
# define BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW throw()
@@ -142,7 +139,6 @@
#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"
diff --git a/3party/boost/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp b/3party/boost/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp
index 48753bdfc7..6d09e2cb3a 100644
--- a/3party/boost/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp
+++ b/3party/boost/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp
@@ -48,7 +48,7 @@ namespace boost
process_real_cpu_clock::time_point process_real_cpu_clock::now() BOOST_NOEXCEPT
{
-#if 0
+#if 1
tms tm;
clock_t c = ::times(&tm);
if (c == clock_t(-1)) // error
@@ -71,10 +71,18 @@ namespace boost
if (c == clock_t(-1)) // error
{
BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ } else
+ {
+ long factor = chrono_detail::tick_factor();
+ if (factor != -1)
+ {
+ return time_point(nanoseconds(c * factor));
+ } else
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ }
}
- return time_point(
- duration(c*(1000000000l/CLOCKS_PER_SEC))
- );
+ return time_point();
#endif
}
@@ -82,7 +90,7 @@ namespace boost
process_real_cpu_clock::time_point process_real_cpu_clock::now(system::error_code & ec)
{
-#if 0
+#if 1
tms tm;
clock_t c = ::times(&tm);
if (c == clock_t(-1)) // error
@@ -129,11 +137,28 @@ namespace boost
ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY);
return time_point();
}
+ } else
+ {
+ long factor = chrono_detail::tick_factor();
+ if (factor != -1)
+ {
+ if (!BOOST_CHRONO_IS_THROWS(ec))
+ {
+ ec.clear();
+ }
+ return time_point(nanoseconds(c * factor));
+ } else
+ {
+ if (BOOST_CHRONO_IS_THROWS(ec))
+ {
+ boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock"));
+ } else
+ {
+ ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY);
+ return time_point();
+ }
+ }
}
- return time_point(
- duration(c*(1000000000l/CLOCKS_PER_SEC))
- );
-
#endif
}
diff --git a/3party/boost/boost/chrono/detail/inlined/mac/thread_clock.hpp b/3party/boost/boost/chrono/detail/inlined/mac/thread_clock.hpp
index dad806e4e2..1a4406b83d 100644
--- a/3party/boost/boost/chrono/detail/inlined/mac/thread_clock.hpp
+++ b/3party/boost/boost/chrono/detail/inlined/mac/thread_clock.hpp
@@ -1,6 +1,8 @@
// boost thread_clock.cpp -----------------------------------------------------------//
-// Copyright Vicente J. Botet Escriba 2010
+// Copyright Beman Dawes 1994, 2006, 2008
+// Copyright Vicente J. Botet Escriba 2009-2011
+// Copyright Christopher Brown 2013
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
@@ -10,6 +12,80 @@
//--------------------------------------------------------------------------------------//
#include <boost/chrono/config.hpp>
-#include <boost/chrono/detail/inlined/posix/thread_clock.hpp>
+#include <boost/chrono/thread_clock.hpp>
#include <cassert>
+# include <pthread.h>
+# include <mach/thread_act.h>
+
+namespace boost { namespace chrono {
+
+ thread_clock::time_point thread_clock::now( ) BOOST_NOEXCEPT
+ {
+ // get the thread port (borrowing pthread's reference)
+ mach_port_t port = pthread_mach_thread_np(pthread_self());
+
+ // get the thread info
+ thread_basic_info_data_t info;
+ mach_msg_type_number_t count = THREAD_BASIC_INFO_COUNT;
+ if ( thread_info(port, THREAD_BASIC_INFO, (thread_info_t)&info, &count) != KERN_SUCCESS )
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ return time_point();
+ }
+
+ // convert to nanoseconds
+ duration user = duration(
+ static_cast<thread_clock::rep>( info.user_time.seconds ) * 1000000000
+ + static_cast<thread_clock::rep>(info.user_time.microseconds ) * 1000);
+
+ duration system = duration(
+ static_cast<thread_clock::rep>( info.system_time.seconds ) * 1000000000
+ + static_cast<thread_clock::rep>( info.system_time.microseconds ) * 1000);
+
+ return time_point( user + system );
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ thread_clock::time_point thread_clock::now( system::error_code & ec )
+ {
+ // get the thread port (borrowing pthread's reference)
+ mach_port_t port = pthread_mach_thread_np(pthread_self());
+
+ // get the thread info
+ thread_basic_info_data_t info;
+ mach_msg_type_number_t count = THREAD_BASIC_INFO_COUNT;
+ if ( thread_info(port, THREAD_BASIC_INFO, (thread_info_t)&info, &count) != KERN_SUCCESS )
+ {
+ if (BOOST_CHRONO_IS_THROWS(ec))
+ {
+ boost::throw_exception(
+ system::system_error(
+ EINVAL,
+ BOOST_CHRONO_SYSTEM_CATEGORY,
+ "chrono::thread_clock" ));
+ }
+ else
+ {
+ ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY );
+ return time_point();
+ }
+ }
+ if (!BOOST_CHRONO_IS_THROWS(ec))
+ {
+ ec.clear();
+ }
+
+ // convert to nanoseconds
+ duration user = duration(
+ static_cast<thread_clock::rep>( info.user_time.seconds ) * 1000000000
+ + static_cast<thread_clock::rep>(info.user_time.microseconds ) * 1000);
+
+ duration system = duration(
+ static_cast<thread_clock::rep>( info.system_time.seconds ) * 1000000000
+ + static_cast<thread_clock::rep>( info.system_time.microseconds ) * 1000);
+
+ return time_point( user + system );
+ }
+#endif
+} }
diff --git a/3party/boost/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp b/3party/boost/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp
index 5d5c4f4806..0476f590c9 100644
--- a/3party/boost/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp
+++ b/3party/boost/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp
@@ -22,7 +22,7 @@
namespace boost { namespace chrono {
namespace chrono_detail
{
- inline long tick_factor() // multiplier to convert ticks
+ inline nanoseconds::rep tick_factor() // multiplier to convert ticks
// to nanoseconds; -1 if unknown
{
static long factor = 0;
@@ -281,12 +281,13 @@ process_cpu_clock::time_point process_cpu_clock::now() BOOST_NOEXCEPT
}
else
{
- if ( chrono_detail::tick_factor() != -1 )
+ nanoseconds::rep factor = chrono_detail::tick_factor();
+ if ( factor != -1 )
{
time_point::rep r(
- 1000*c*chrono_detail::tick_factor(),
- 1000*(tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor(),
- 1000*(tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor());
+ c*factor,
+ (tm.tms_utime + tm.tms_cutime)*factor,
+ (tm.tms_stime + tm.tms_cstime)*factor);
return time_point(duration(r));
}
else
@@ -324,9 +325,9 @@ process_cpu_clock::time_point process_cpu_clock::now(
if ( chrono_detail::tick_factor() != -1 )
{
time_point::rep r(
- 1000*c*chrono_detail::tick_factor(),
- 1000*(tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor(),
- 1000*(tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor());
+ c*chrono_detail::tick_factor(),
+ (tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor(),
+ (tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor());
return time_point(duration(r));
}
else
diff --git a/3party/boost/boost/chrono/detail/inlined/win/chrono.hpp b/3party/boost/boost/chrono/detail/inlined/win/chrono.hpp
index 17dae964cc..16e8c51426 100644
--- a/3party/boost/boost/chrono/detail/inlined/win/chrono.hpp
+++ b/3party/boost/boost/chrono/detail/inlined/win/chrono.hpp
@@ -12,9 +12,9 @@
#ifndef BOOST_CHRONO_DETAIL_INLINED_WIN_CHRONO_HPP
#define BOOST_CHRONO_DETAIL_INLINED_WIN_CHRONO_HPP
-#include <boost/detail/win/time.hpp>
-#include <boost/detail/win/timers.hpp>
-#include <boost/detail/win/GetLastError.hpp>
+#include <boost/detail/winapi/time.hpp>
+#include <boost/detail/winapi/timers.hpp>
+#include <boost/detail/winapi/GetLastError.hpp>
namespace boost
{
@@ -25,8 +25,8 @@ namespace chrono_detail
BOOST_CHRONO_INLINE double get_nanosecs_per_tic() BOOST_NOEXCEPT
{
- boost::detail::win32::LARGE_INTEGER_ freq;
- if ( !boost::detail::win32::QueryPerformanceFrequency( &freq ) )
+ boost::detail::winapi::LARGE_INTEGER_ freq;
+ if ( !boost::detail::winapi::QueryPerformanceFrequency( &freq ) )
return 0.0L;
return double(1000000000.0L / freq.QuadPart);
}
@@ -35,15 +35,23 @@ namespace chrono_detail
steady_clock::time_point steady_clock::now() BOOST_NOEXCEPT
{
- static double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic();
+ double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic();
- boost::detail::win32::LARGE_INTEGER_ pcount;
- if ( (nanosecs_per_tic <= 0.0L) ||
- (!boost::detail::win32::QueryPerformanceCounter( &pcount )) )
+ boost::detail::winapi::LARGE_INTEGER_ pcount;
+ if ( nanosecs_per_tic <= 0.0L )
{
- BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+ BOOST_ASSERT(0 && "Boost::Chrono - get_nanosecs_per_tic Internal Error");
return steady_clock::time_point();
}
+ unsigned times=0;
+ while ( ! boost::detail::winapi::QueryPerformanceCounter( &pcount ) )
+ {
+ if ( ++times > 3 )
+ {
+ BOOST_ASSERT(0 && "Boost::Chrono - QueryPerformanceCounter Internal Error");
+ return steady_clock::time_point();
+ }
+ }
return steady_clock::time_point(steady_clock::duration(
static_cast<steady_clock::rep>((nanosecs_per_tic) * pcount.QuadPart)));
@@ -53,16 +61,16 @@ namespace chrono_detail
#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
steady_clock::time_point steady_clock::now( system::error_code & ec )
{
- static double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic();
+ double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic();
- boost::detail::win32::LARGE_INTEGER_ pcount;
+ boost::detail::winapi::LARGE_INTEGER_ pcount;
if ( (nanosecs_per_tic <= 0.0L)
- || (!boost::detail::win32::QueryPerformanceCounter( &pcount )) )
+ || (!boost::detail::winapi::QueryPerformanceCounter( &pcount )) )
{
- boost::detail::win32::DWORD_ cause =
+ boost::detail::winapi::DWORD_ cause =
((nanosecs_per_tic <= 0.0L)
? ERROR_NOT_SUPPORTED
- : boost::detail::win32::GetLastError());
+ : boost::detail::winapi::GetLastError());
if (BOOST_CHRONO_IS_THROWS(ec)) {
boost::throw_exception(
system::system_error(
@@ -89,19 +97,13 @@ namespace chrono_detail
BOOST_CHRONO_INLINE
system_clock::time_point system_clock::now() BOOST_NOEXCEPT
{
- boost::detail::win32::FILETIME_ ft;
- #if defined(UNDER_CE)
- // Windows CE does not define GetSystemTimeAsFileTime so we do it in two steps.
- boost::detail::win32::SYSTEMTIME_ st;
- boost::detail::win32::GetSystemTime( &st );
- boost::detail::win32::SystemTimeToFileTime( &st, &ft );
- #else
- boost::detail::win32::GetSystemTimeAsFileTime( &ft ); // never fails
- #endif
+ boost::detail::winapi::FILETIME_ ft;
+ boost::detail::winapi::GetSystemTimeAsFileTime( &ft ); // never fails
return system_clock::time_point(
system_clock::duration(
((static_cast<__int64>( ft.dwHighDateTime ) << 32) | ft.dwLowDateTime)
- -116444736000000000LL
+ - 116444736000000000LL
+ //- (134775LL*864000000000LL)
)
);
}
@@ -110,21 +112,18 @@ namespace chrono_detail
BOOST_CHRONO_INLINE
system_clock::time_point system_clock::now( system::error_code & ec )
{
- boost::detail::win32::FILETIME_ ft;
- #if defined(UNDER_CE)
- // Windows CE does not define GetSystemTimeAsFileTime so we do it in two steps.
- boost::detail::win32::SYSTEMTIME_ st;
- boost::detail::win32::GetSystemTime( &st );
- boost::detail::win32::SystemTimeToFileTime( &st, &ft );
- #else
- boost::detail::win32::GetSystemTimeAsFileTime( &ft ); // never fails
- #endif
+ boost::detail::winapi::FILETIME_ ft;
+ boost::detail::winapi::GetSystemTimeAsFileTime( &ft ); // never fails
if (!BOOST_CHRONO_IS_THROWS(ec))
{
ec.clear();
}
- return time_point(duration(
- (static_cast<__int64>( ft.dwHighDateTime ) << 32) | ft.dwLowDateTime));
+ return system_clock::time_point(
+ system_clock::duration(
+ ((static_cast<__int64>( ft.dwHighDateTime ) << 32) | ft.dwLowDateTime)
+ - 116444736000000000LL
+ //- (134775LL*864000000000LL)
+ ));
}
#endif
@@ -132,7 +131,6 @@ namespace chrono_detail
std::time_t system_clock::to_time_t(const system_clock::time_point& t) BOOST_NOEXCEPT
{
__int64 temp = t.time_since_epoch().count();
-
temp /= 10000000;
return static_cast<std::time_t>( temp );
}
@@ -142,7 +140,6 @@ namespace chrono_detail
{
__int64 temp = t;
temp *= 10000000;
-
return time_point(duration(temp));
}
diff --git a/3party/boost/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp b/3party/boost/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp
index 1b7e67a120..e97bfe590c 100644
--- a/3party/boost/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp
+++ b/3party/boost/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp
@@ -2,6 +2,7 @@
// Copyright Beman Dawes 1994, 2006, 2008
// Copyright 2009-2010 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
@@ -18,9 +19,11 @@
#include <cassert>
#include <time.h>
-#include <boost/detail/win/GetLastError.hpp>
-#include <boost/detail/win/GetCurrentProcess.hpp>
-#include <boost/detail/win/GetProcessTimes.hpp>
+#include <boost/detail/winapi/GetLastError.hpp>
+#include <boost/detail/winapi/GetCurrentProcess.hpp>
+#if BOOST_PLAT_WINDOWS_DESKTOP
+#include <boost/detail/winapi/GetProcessTimes.hpp>
+#endif
namespace boost
{
@@ -64,14 +67,15 @@ process_real_cpu_clock::time_point process_real_cpu_clock::now(
}
#endif
+#if BOOST_PLAT_WINDOWS_DESKTOP
process_user_cpu_clock::time_point process_user_cpu_clock::now() BOOST_NOEXCEPT
{
// note that Windows uses 100 nanosecond ticks for FILETIME
- boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
+ boost::detail::winapi::FILETIME_ creation, exit, user_time, system_time;
- if ( boost::detail::win32::GetProcessTimes(
- boost::detail::win32::GetCurrentProcess(), &creation, &exit,
+ if ( boost::detail::winapi::GetProcessTimes(
+ boost::detail::winapi::GetCurrentProcess(), &creation, &exit,
&system_time, &user_time ) )
{
return time_point(duration(
@@ -93,10 +97,10 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now(
{
// note that Windows uses 100 nanosecond ticks for FILETIME
- boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
+ boost::detail::winapi::FILETIME_ creation, exit, user_time, system_time;
- if ( boost::detail::win32::GetProcessTimes(
- boost::detail::win32::GetCurrentProcess(), &creation, &exit,
+ if ( boost::detail::winapi::GetProcessTimes(
+ boost::detail::winapi::GetCurrentProcess(), &creation, &exit,
&system_time, &user_time ) )
{
if (!BOOST_CHRONO_IS_THROWS(ec))
@@ -110,7 +114,7 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now(
}
else
{
- boost::detail::win32::DWORD_ cause = boost::detail::win32::GetLastError();
+ boost::detail::winapi::DWORD_ cause = boost::detail::winapi::GetLastError();
if (BOOST_CHRONO_IS_THROWS(ec))
{
boost::throw_exception(
@@ -133,10 +137,10 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now() BOOST_NOEXC
{
// note that Windows uses 100 nanosecond ticks for FILETIME
- boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
+ boost::detail::winapi::FILETIME_ creation, exit, user_time, system_time;
- if ( boost::detail::win32::GetProcessTimes(
- boost::detail::win32::GetCurrentProcess(), &creation, &exit,
+ if ( boost::detail::winapi::GetProcessTimes(
+ boost::detail::winapi::GetCurrentProcess(), &creation, &exit,
&system_time, &user_time ) )
{
return time_point(duration(
@@ -158,10 +162,10 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now(
{
// note that Windows uses 100 nanosecond ticks for FILETIME
- boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
+ boost::detail::winapi::FILETIME_ creation, exit, user_time, system_time;
- if ( boost::detail::win32::GetProcessTimes(
- boost::detail::win32::GetCurrentProcess(), &creation, &exit,
+ if ( boost::detail::winapi::GetProcessTimes(
+ boost::detail::winapi::GetCurrentProcess(), &creation, &exit,
&system_time, &user_time ) )
{
if (!BOOST_CHRONO_IS_THROWS(ec))
@@ -175,7 +179,7 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now(
}
else
{
- boost::detail::win32::DWORD_ cause = boost::detail::win32::GetLastError();
+ boost::detail::winapi::DWORD_ cause = boost::detail::winapi::GetLastError();
if (BOOST_CHRONO_IS_THROWS(ec))
{
boost::throw_exception(
@@ -198,10 +202,10 @@ process_cpu_clock::time_point process_cpu_clock::now() BOOST_NOEXCEPT
{
// note that Windows uses 100 nanosecond ticks for FILETIME
- boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
+ boost::detail::winapi::FILETIME_ creation, exit, user_time, system_time;
- if ( boost::detail::win32::GetProcessTimes(
- boost::detail::win32::GetCurrentProcess(), &creation, &exit,
+ if ( boost::detail::winapi::GetProcessTimes(
+ boost::detail::winapi::GetCurrentProcess(), &creation, &exit,
&system_time, &user_time ) )
{
time_point::rep r(process_real_cpu_clock::now().time_since_epoch().count()
@@ -229,10 +233,10 @@ process_cpu_clock::time_point process_cpu_clock::now(
{
// note that Windows uses 100 nanosecond ticks for FILETIME
- boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
+ boost::detail::winapi::FILETIME_ creation, exit, user_time, system_time;
- if ( boost::detail::win32::GetProcessTimes(
- boost::detail::win32::GetCurrentProcess(), &creation, &exit,
+ if ( boost::detail::winapi::GetProcessTimes(
+ boost::detail::winapi::GetCurrentProcess(), &creation, &exit,
&system_time, &user_time ) )
{
if (!BOOST_CHRONO_IS_THROWS(ec))
@@ -252,7 +256,7 @@ process_cpu_clock::time_point process_cpu_clock::now(
}
else
{
- boost::detail::win32::DWORD_ cause = boost::detail::win32::GetLastError();
+ boost::detail::winapi::DWORD_ cause = boost::detail::winapi::GetLastError();
if (BOOST_CHRONO_IS_THROWS(ec))
{
boost::throw_exception(
@@ -270,6 +274,7 @@ process_cpu_clock::time_point process_cpu_clock::now(
}
#endif
+#endif
} // namespace chrono
} // namespace boost
diff --git a/3party/boost/boost/chrono/detail/inlined/win/thread_clock.hpp b/3party/boost/boost/chrono/detail/inlined/win/thread_clock.hpp
index 8ca1506ce5..e47c481473 100644
--- a/3party/boost/boost/chrono/detail/inlined/win/thread_clock.hpp
+++ b/3party/boost/boost/chrono/detail/inlined/win/thread_clock.hpp
@@ -15,9 +15,9 @@
#include <boost/chrono/thread_clock.hpp>
#include <cassert>
-#include <boost/detail/win/GetLastError.hpp>
-#include <boost/detail/win/GetCurrentThread.hpp>
-#include <boost/detail/win/GetThreadTimes.hpp>
+#include <boost/detail/winapi/GetLastError.hpp>
+#include <boost/detail/winapi/GetCurrentThread.hpp>
+#include <boost/detail/winapi/GetThreadTimes.hpp>
namespace boost
{
@@ -28,10 +28,10 @@ namespace chrono
thread_clock::time_point thread_clock::now( system::error_code & ec )
{
// note that Windows uses 100 nanosecond ticks for FILETIME
- boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
+ boost::detail::winapi::FILETIME_ creation, exit, user_time, system_time;
- if ( boost::detail::win32::GetThreadTimes(
- boost::detail::win32::GetCurrentThread (), &creation, &exit,
+ if ( boost::detail::winapi::GetThreadTimes(
+ boost::detail::winapi::GetCurrentThread (), &creation, &exit,
&system_time, &user_time ) )
{
duration user = duration(
@@ -55,13 +55,13 @@ thread_clock::time_point thread_clock::now( system::error_code & ec )
{
boost::throw_exception(
system::system_error(
- boost::detail::win32::GetLastError(),
+ boost::detail::winapi::GetLastError(),
BOOST_CHRONO_SYSTEM_CATEGORY,
"chrono::thread_clock" ));
}
else
{
- ec.assign( boost::detail::win32::GetLastError(), BOOST_CHRONO_SYSTEM_CATEGORY );
+ ec.assign( boost::detail::winapi::GetLastError(), BOOST_CHRONO_SYSTEM_CATEGORY );
return thread_clock::time_point(duration(0));
}
}
@@ -72,10 +72,10 @@ thread_clock::time_point thread_clock::now() BOOST_NOEXCEPT
{
// note that Windows uses 100 nanosecond ticks for FILETIME
- boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
+ boost::detail::winapi::FILETIME_ creation, exit, user_time, system_time;
- if ( boost::detail::win32::GetThreadTimes(
- boost::detail::win32::GetCurrentThread (), &creation, &exit,
+ if ( boost::detail::winapi::GetThreadTimes(
+ boost::detail::winapi::GetCurrentThread (), &creation, &exit,
&system_time, &user_time ) )
{
duration user = duration(
diff --git a/3party/boost/boost/chrono/floor.hpp b/3party/boost/boost/chrono/floor.hpp
index e133e49c8a..eb85fa7446 100644
--- a/3party/boost/boost/chrono/floor.hpp
+++ b/3party/boost/boost/chrono/floor.hpp
@@ -24,7 +24,9 @@ namespace boost
template <class To, class Rep, class Period>
To floor(const duration<Rep, Period>& d)
{
- return duration_cast<To>(d);
+ To t = duration_cast<To>(d);
+ if (t>d) --t;
+ return t;
}
diff --git a/3party/boost/boost/chrono/io/duration_get.hpp b/3party/boost/boost/chrono/io/duration_get.hpp
index 3b051e2872..ce3075b7b3 100644
--- a/3party/boost/boost/chrono/io/duration_get.hpp
+++ b/3party/boost/boost/chrono/io/duration_get.hpp
@@ -17,6 +17,7 @@
#include <boost/math/common_factor_rt.hpp>
#include <boost/chrono/detail/scan_keyword.hpp>
#include <boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp>
+#include <boost/chrono/process_cpu_clocks.hpp>
#include <boost/assert.hpp>
#include <locale>
@@ -44,6 +45,12 @@ namespace boost
is_signed<Rep>::value, long long, unsigned long long>::type>::type type;
};
+ template <class Rep>
+ struct duration_io_intermediate<process_times<Rep>, false>
+ {
+ typedef process_times<typename duration_io_intermediate<Rep>::type> type;
+ };
+
template <typename intermediate_type>
typename enable_if<is_integral<intermediate_type> , bool>::type reduce(intermediate_type& r,
unsigned long long& den, std::ios_base::iostate& err)
@@ -300,7 +307,7 @@ namespace boost
}
common_type_t t = r * num;
t /= den;
- if (t > 0)
+ if (t > duration_values<common_type_t>::zero())
{
Rep pt = t;
if ( (duration_values<Rep>::max)() < pt)
@@ -367,6 +374,45 @@ namespace boost
{
return std::use_facet<std::num_get<CharT, iter_type> >(ios.getloc()).get(s, end, ios, err, r);
}
+ template <typename Rep>
+ iter_type get_value(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, process_times<Rep>& r) const
+ {
+ if (s == end) {
+ err |= std::ios_base::eofbit;
+ return s;
+ } else if (*s != '{') { // mandatory '{'
+ err |= std::ios_base::failbit;
+ return s;
+ }
+ ++s;
+ s = std::use_facet<std::num_get<CharT, iter_type> >(ios.getloc()).get(s, end, ios, err, r.real);
+ if (s == end) {
+ err |= std::ios_base::eofbit;
+ return s;
+ } else if (*s != ';') { // mandatory ';'
+ err |= std::ios_base::failbit;
+ return s;
+ }
+ ++s;
+ s = std::use_facet<std::num_get<CharT, iter_type> >(ios.getloc()).get(s, end, ios, err, r.user);
+ if (s == end) {
+ err |= std::ios_base::eofbit;
+ return s;
+ } else if (*s != ';') { // mandatory ';'
+ err |= std::ios_base::failbit;
+ return s;
+ }
+ ++s;
+ s = std::use_facet<std::num_get<CharT, iter_type> >(ios.getloc()).get(s, end, ios, err, r.system);
+ if (s == end) {
+ err |= std::ios_base::eofbit;
+ return s;
+ } else if (*s != '}') { // mandatory '}'
+ err |= std::ios_base::failbit;
+ return s;
+ }
+ return s;
+ }
/**
*
diff --git a/3party/boost/boost/chrono/io/duration_put.hpp b/3party/boost/boost/chrono/io/duration_put.hpp
index 7bd0cd7db1..81c13cf40e 100644
--- a/3party/boost/boost/chrono/io/duration_put.hpp
+++ b/3party/boost/boost/chrono/io/duration_put.hpp
@@ -13,6 +13,7 @@
#include <boost/chrono/config.hpp>
#include <boost/chrono/io/duration_units.hpp>
+#include <boost/chrono/process_cpu_clocks.hpp>
#include <boost/assert.hpp>
#include <locale>
@@ -191,6 +192,19 @@ namespace boost
static_cast<long int> (d.count()));
}
+ template <typename Rep, typename Period>
+ iter_type put_value(iter_type s, std::ios_base& ios, char_type fill, duration<process_times<Rep>, Period> const& d) const
+ {
+ *s++ = CharT('{');
+ s = put_value(s, ios, fill, process_real_cpu_clock::duration(d.count().real));
+ *s++ = CharT(';');
+ s = put_value(s, ios, fill, process_user_cpu_clock::duration(d.count().user));
+ *s++ = CharT(';');
+ s = put_value(s, ios, fill, process_system_cpu_clock::duration(d.count().system));
+ *s++ = CharT('}');
+ return s;
+ }
+
/**
*
* @param s an output stream iterator
@@ -240,6 +254,25 @@ namespace boost
}
return s;
}
+ template <typename Rep, typename Period>
+ iter_type put_unit(duration_units<CharT> const& facet, iter_type s, std::ios_base& ios, char_type fill,
+ duration<process_times<Rep>, Period> const& d) const
+ {
+ duration<Rep,Period> real(d.count().real);
+ if (facet.template is_named_unit<Period>()) {
+ string_type str = facet.get_unit(get_duration_style(ios), real);
+ s=std::copy(str.begin(), str.end(), s);
+ } else {
+ *s++ = CharT('[');
+ std::use_facet<std::num_put<CharT, iter_type> >(ios.getloc()).put(s, ios, fill, Period::num);
+ *s++ = CharT('/');
+ std::use_facet<std::num_put<CharT, iter_type> >(ios.getloc()).put(s, ios, fill, Period::den);
+ *s++ = CharT(']');
+ string_type str = facet.get_n_d_unit(get_duration_style(ios), real);
+ s=std::copy(str.begin(), str.end(), s);
+ }
+ return s;
+ }
/**
* Unique identifier for this type of facet.
diff --git a/3party/boost/boost/chrono/io/time_point_io.hpp b/3party/boost/boost/chrono/io/time_point_io.hpp
index 5f8640750d..629479cde9 100644
--- a/3party/boost/boost/chrono/io/time_point_io.hpp
+++ b/3party/boost/boost/chrono/io/time_point_io.hpp
@@ -28,27 +28,38 @@
#include <boost/chrono/clock_string.hpp>
#include <boost/chrono/round.hpp>
#include <boost/chrono/detail/scan_keyword.hpp>
+#include <boost/static_assert.hpp>
#include <boost/detail/no_exceptions_support.hpp>
#include <cstring>
#include <locale>
-#include <string.h>
+#include <ctime>
#define BOOST_CHRONO_INTERNAL_TIMEGM \
- ( defined BOOST_WINDOWS && ! defined(__CYGWIN__) ) || \
- ( (defined(sun) || defined(__sun)) && defined __GNUC__)
-
-#define BOOST_CHRONO_INTERNAL_GMTIME defined BOOST_WINDOWS && ! defined(__CYGWIN__)
+ ( defined BOOST_WINDOWS && ! defined(__CYGWIN__) ) \
+ || (defined(sun) || defined(__sun)) \
+ || (defined __IBMCPP__) \
+ || defined __ANDROID__ \
+ || defined __QNXNTO__ \
+ || (defined(_AIX) && defined __GNUC__)
+
+#define BOOST_CHRONO_INTERNAL_GMTIME \
+ (defined BOOST_WINDOWS && ! defined(__CYGWIN__)) \
+ || ( (defined(sun) || defined(__sun)) && defined __GNUC__) \
+ || (defined __IBMCPP__) \
+ || defined __ANDROID__ \
+ || (defined(_AIX) && defined __GNUC__)
#define BOOST_CHRONO_USES_INTERNAL_TIME_GET
-
namespace boost
{
namespace chrono
{
+ typedef double fractional_seconds;
namespace detail
{
+
template <class CharT, class InputIterator = std::istreambuf_iterator<CharT> >
struct time_get
{
@@ -158,8 +169,7 @@ namespace boost
err |= std::ios_base::failbit;
}
- void
- get_second(int& s,
+ void get_second(int& s,
iter_type& b, iter_type e,
std::ios_base::iostate& err,
const std::ctype<char_type>& ct) const
@@ -171,7 +181,89 @@ namespace boost
err |= std::ios_base::failbit;
}
+ void get_white_space(iter_type& b, iter_type e,
+ std::ios_base::iostate& err,
+ const std::ctype<char_type>& ct) const
+ {
+ for (; b != e && ct.is(std::ctype_base::space, *b); ++b)
+ ;
+ if (b == e)
+ err |= std::ios_base::eofbit;
+ }
+
+ void get_12_hour(int& h,
+ iter_type& b, iter_type e,
+ std::ios_base::iostate& err,
+ const std::ctype<char_type>& ct) const
+ {
+ int t = get_up_to_n_digits(b, e, err, ct, 2);
+ if (!(err & std::ios_base::failbit) && 1 <= t && t <= 12)
+ h = t;
+ else
+ err |= std::ios_base::failbit;
+ }
+
+ void get_percent(iter_type& b, iter_type e,
+ std::ios_base::iostate& err,
+ const std::ctype<char_type>& ct) const
+ {
+ if (b == e)
+ {
+ err |= std::ios_base::eofbit | std::ios_base::failbit;
+ return;
+ }
+ if (ct.narrow(*b, 0) != '%')
+ err |= std::ios_base::failbit;
+ else if(++b == e)
+ err |= std::ios_base::eofbit;
+ }
+
+ void get_day_year_num(int& d,
+ iter_type& b, iter_type e,
+ std::ios_base::iostate& err,
+ const std::ctype<char_type>& ct) const
+ {
+ int t = get_up_to_n_digits(b, e, err, ct, 3);
+ if (!(err & std::ios_base::failbit) && t <= 365)
+ d = t;
+ else
+ err |= std::ios_base::failbit;
+ }
+
+ void
+ get_weekday(int& w,
+ iter_type& b, iter_type e,
+ std::ios_base::iostate& err,
+ const std::ctype<char_type>& ct) const
+ {
+ int t = get_up_to_n_digits(b, e, err, ct, 1);
+ if (!(err & std::ios_base::failbit) && t <= 6)
+ w = t;
+ else
+ err |= std::ios_base::failbit;
+ }
+#if 0
+
+ void
+ get_am_pm(int& h,
+ iter_type& b, iter_type e,
+ std::ios_base::iostate& err,
+ const std::ctype<char_type>& ct) const
+ {
+ const string_type* ap = am_pm();
+ if (ap[0].size() + ap[1].size() == 0)
+ {
+ err |= ios_base::failbit;
+ return;
+ }
+ ptrdiff_t i = detail::scan_keyword(b, e, ap, ap+2, ct, err, false) - ap;
+ if (i == 0 && h == 12)
+ h = 0;
+ else if (i == 1 && h < 12)
+ h += 12;
+ }
+#endif
InputIterator get(
iter_type b, iter_type e,
@@ -185,101 +277,113 @@ namespace boost
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 'a':
+ case 'A':
+ {
+ std::tm tm2;
+ std::memset(&tm2, 0, sizeof(std::tm));
+ that_.get_weekday(b, e, iob, err, &tm2);
+ //tm->tm_wday = tm2.tm_wday;
+ }
+ break;
+ case 'b':
+ case 'B':
+ case 'h':
+ {
+ std::tm tm2;
+ std::memset(&tm2, 0, sizeof(std::tm));
+ that_.get_monthname(b, e, iob, err, &tm2);
+ //tm->tm_mon = tm2.tm_mon;
+ }
+ break;
// case 'c':
-// {
-// const string_type& fm = this->c();
-// b = that_.get(b, e, iob, err, tm, fm.data(), fm.data() + fm.size());
-// }
-// break;
+// {
+// const string_type& fm = c();
+// b = 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);
-
- 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;
+ break;
+ case 'D':
+ {
+ const char_type fm[] = {'%', 'm', '/', '%', 'd', '/', '%', 'y'};
+ b = get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0]));
+ }
+ break;
+ case 'F':
+ {
+ const char_type fm[] = {'%', 'Y', '-', '%', 'm', '-', '%', 'd'};
+ b = 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);
- 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;
+ break;
+ case 'I':
+ get_12_hour(tm->tm_hour, b, e, err, ct);
+ break;
+ case 'j':
+ get_day_year_num(tm->tm_yday, b, e, err, ct);
+ break;
case 'm':
get_month(tm->tm_mon, b, e, err, ct);
- break;
+ break;
case 'M':
get_minute(tm->tm_min, b, e, err, ct);
- break;
-// case 'n':
-// case 't':
-// that_.get_white_space(b, e, err, ct);
-// break;
+ break;
+ case 'n':
+ case 't':
+ 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);
+// get_am_pm(tm->tm_hour, b, e, err, ct);
+// break;
+ case 'r':
+ {
+ const char_type fm[] = {'%', 'I', ':', '%', 'M', ':', '%', 'S', ' ', '%', 'p'};
+ b = get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0]));
+ }
+ break;
+ case 'R':
+ {
+ const char_type fm[] = {'%', 'H', ':', '%', 'M'};
+ b = get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0]));
+ }
+ break;
+ case 'S':
+ get_second(tm->tm_sec, b, e, err, ct);
+ break;
+ case 'T':
+ {
+ const char_type fm[] = {'%', 'H', ':', '%', 'M', ':', '%', 'S'};
+ b = get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0]));
+ }
+ break;
+ case 'w':
+ {
+ 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();
+// return that_.get_time(b, e, iob, err, tm);
+// {
+// const string_type& fm = X();
// b = that_.get(b, e, iob, err, tm, fm.data(), fm.data() + fm.size());
-// }
-// break;
+// }
+// break;
// case 'y':
-// that_.get_year(tm->tm_year, b, e, err, ct);
+// get_year(tm->tm_year, b, e, err, ct);
break;
case 'Y':
get_year4(tm->tm_year, b, e, err, ct);
- break;
-// case '%':
-// that_.get_percent(b, e, err, ct);
-// break;
+ break;
+ case '%':
+ get_percent(b, e, err, ct);
+ break;
default:
err |= std::ios_base::failbit;
}
@@ -638,6 +742,8 @@ namespace boost
namespace detail
{
+//#if BOOST_CHRONO_INTERNAL_TIMEGM
+
inline int32_t is_leap(int32_t year)
{
if(year % 400 == 0)
@@ -665,6 +771,7 @@ namespace boost
{ 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;
}
@@ -686,13 +793,14 @@ namespace boost
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;
+ 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
/**
* from_ymd could be made more efficient by using a table
@@ -708,11 +816,36 @@ namespace boost
return y * 365 + y / 4 - y / 100 + y / 400;
}
+ // Returns year/month/day triple in civil calendar
+ // Preconditions: z is number of days since 1970-01-01 and is in the range:
+ // [numeric_limits<Int>::min(), numeric_limits<Int>::max()-719468].
+ template <class Int>
+ //constexpr
+ void
+ inline civil_from_days(Int z, Int& y, unsigned& m, unsigned& d) BOOST_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<unsigned>::digits >= 18,
+ "This algorithm has not been ported to a 16 bit unsigned integer");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<Int>::digits >= 20,
+ "This algorithm has not been ported to a 16 bit signed integer");
+ z += 719468;
+ const Int era = (z >= 0 ? z : z - 146096) / 146097;
+ const unsigned doe = static_cast<unsigned>(z - era * 146097); // [0, 146096]
+ const unsigned yoe = (doe - doe/1460 + doe/36524 - doe/146096) / 365; // [0, 399]
+ y = static_cast<Int>(yoe) + era * 400;
+ const unsigned doy = doe - (365*yoe + yoe/4 - yoe/100); // [0, 365]
+ const unsigned mp = (5*doy + 2)/153; // [0, 11]
+ d = doy - (153*mp+2)/5 + 1; // [1, 31]
+ m = mp + (mp < 10 ? 3 : -9); // [1, 12]
+ y += (m <= 2);
+ --m;
+ }
inline std::tm * internal_gmtime(std::time_t const* t, std::tm *tm)
{
if (t==0) return 0;
if (tm==0) return 0;
+#if 0
static const unsigned char
day_of_year_month[2][366] =
{
@@ -727,6 +860,7 @@ namespace boost
{ -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364 },
{ -1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }
};
+#endif
const time_t seconds_in_day = 3600 * 24;
int32_t days_since_epoch = static_cast<int32_t>(*t / seconds_in_day);
@@ -736,6 +870,7 @@ namespace boost
hms = seconds_in_day+hms;
}
+#if 0
int32_t x = days_since_epoch;
int32_t y = static_cast<int32_t> (static_cast<long long> (x + 2) * 400
/ 146097);
@@ -750,16 +885,23 @@ namespace boost
//y -= 32767 + 2;
y += 70;
tm->tm_year=y;
- const bool leap = is_leap(y);
+ const int32_t leap = is_leap(y);
tm->tm_mon = day_of_year_month[leap][doy]-1;
- tm->tm_mday = doy - days_in_year_before[leap][day_of_year_month[leap][doy] - 1];
-
+ tm->tm_mday = doy - days_in_year_before[leap][tm->tm_mon] ;
+#else
+ int32_t y;
+ unsigned m, d;
+ civil_from_days(days_since_epoch, y, m, d);
+ tm->tm_year=y-1900; tm->tm_mon=m; tm->tm_mday=d;
+#endif
tm->tm_hour = hms / 3600;
const int ms = hms % 3600;
tm->tm_min = ms / 60;
tm->tm_sec = ms % 60;
+ tm->tm_isdst = -1;
+ (void)mktime(tm);
return tm;
}
@@ -788,6 +930,7 @@ namespace boost
std::locale loc = os.getloc();
time_t t = system_clock::to_time_t(time_point_cast<system_clock::duration>(tp));
std::tm tm;
+ std::memset(&tm, 0, sizeof(std::tm));
if (tz == timezone::local)
{
#if defined BOOST_WINDOWS && ! defined(__CYGWIN__)
@@ -813,6 +956,9 @@ namespace boost
tm = *tmp;
#else
if (gmtime_r(&t, &tm) == 0) failed = true;
+ tm.tm_isdst = -1;
+ (void)mktime(&tm);
+
#endif
}
@@ -828,7 +974,7 @@ namespace boost
failed = tpf.put(os, os, os.fill(), &tm, pb, pe).failed();
if (!failed)
{
- duration<double> d = tp - system_clock::from_time_t(t) + seconds(tm.tm_sec);
+ duration<fractional_seconds> d = tp - system_clock::from_time_t(t) + seconds(tm.tm_sec);
if (d.count() < 10) os << CharT('0');
//if (! os.good()) {
// throw "exception";
@@ -838,6 +984,7 @@ namespace boost
//if (! os.good()) {
//throw "exception";
//}
+ os.precision(9);
os << d.count();
//if (! os.good()) {
//throw "exception";
@@ -964,6 +1111,8 @@ namespace boost
const std::time_get<CharT>& tg = std::use_facet<std::time_get<CharT> >(loc);
const std::ctype<CharT>& ct = std::use_facet<std::ctype<CharT> >(loc);
tm tm; // {0}
+ std::memset(&tm, 0, sizeof(std::tm));
+
typedef std::istreambuf_iterator<CharT, Traits> It;
if (pb == pe)
{
@@ -971,7 +1120,7 @@ namespace boost
{ '%', 'Y', '-', '%', 'm', '-', '%', 'd', ' ', '%', 'H', ':', '%', 'M', ':' };
pb = pattern;
pe = pb + sizeof (pattern) / sizeof(CharT);
- tm.tm_sec=0;
+
#if defined BOOST_CHRONO_USES_INTERNAL_TIME_GET
const detail::time_get<CharT>& dtg(tg);
dtg.get(is, 0, is, err, &tm, pb, pe);
@@ -979,9 +1128,13 @@ namespace boost
tg.get(is, 0, is, err, &tm, pb, pe);
#endif
if (err & std::ios_base::failbit) goto exit;
- double sec;
+ fractional_seconds sec;
CharT c = CharT();
+ std::ios::fmtflags flgs = is.flags();
+ is.setf(std::ios::fixed, std::ios::floatfield);
+ is.precision(9);
is >> sec;
+ is.flags(flgs);
if (is.fail())
{
err |= std::ios_base::failbit;
@@ -999,13 +1152,14 @@ namespace boost
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<Duration>(
- system_clock::from_time_t(t) - min + round<microseconds> (duration<double> (sec))
+ system_clock::from_time_t(t) - min + round<system_clock::duration> (duration<fractional_seconds> (sec))
);
}
else
diff --git a/3party/boost/boost/chrono/io/time_point_units.hpp b/3party/boost/boost/chrono/io/time_point_units.hpp
index 24284a76dc..378c112603 100644
--- a/3party/boost/boost/chrono/io/time_point_units.hpp
+++ b/3party/boost/boost/chrono/io/time_point_units.hpp
@@ -1,5 +1,6 @@
// (C) Copyright Howard Hinnant
// (C) Copyright 2011 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
// 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).
@@ -104,6 +105,7 @@ namespace boost
* @return The epoch string associated to the @c process_real_cpu_clock.
*/
virtual string_type do_get_epoch(process_real_cpu_clock) const=0;
+#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
/**
*
* @param c a dummy instance of @c process_user_cpu_clock.
@@ -123,6 +125,7 @@ namespace boost
*/
virtual string_type do_get_epoch(process_cpu_clock) const=0;
#endif
+#endif
#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
/**
*
@@ -197,6 +200,7 @@ namespace boost
{
return clock_string<process_real_cpu_clock,CharT>::since();
}
+#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
/**
* @param c a dummy instance of @c process_user_cpu_clock.
* @return The epoch string returned by @c clock_string<process_user_cpu_clock,CharT>::since().
@@ -223,6 +227,7 @@ namespace boost
}
#endif
+#endif
#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
/**
* @param c a dummy instance of @c thread_clock.
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
index 865b98724e..f7dfdddca0 100644
--- a/3party/boost/boost/chrono/io/utility/ios_base_state_ptr.hpp
+++ b/3party/boost/boost/chrono/io/utility/ios_base_state_ptr.hpp
@@ -81,6 +81,7 @@ namespace boost
explicit ios_state_ptr(std::ios_base& ios) :
ios_(ios)
{
+
}
/**
* Nothing to do as xalloc index can not be removed.
diff --git a/3party/boost/boost/chrono/io_v1/chrono_io.hpp b/3party/boost/boost/chrono/io_v1/chrono_io.hpp
index daabd49222..1a7e832b5b 100644
--- a/3party/boost/boost/chrono/io_v1/chrono_io.hpp
+++ b/3party/boost/boost/chrono/io_v1/chrono_io.hpp
@@ -546,7 +546,7 @@ operator>>(std::basic_istream<CharT, Traits>& is, duration<Rep, Period>& d)
t /= den;
//std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl;
- if (t > 0)
+ if (t > duration_values<common_type_t>::zero())
{
//std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl;
Rep pt = t;
diff --git a/3party/boost/boost/chrono/process_cpu_clocks.hpp b/3party/boost/boost/chrono/process_cpu_clocks.hpp
index 486950da40..248837506e 100644
--- a/3party/boost/boost/chrono/process_cpu_clocks.hpp
+++ b/3party/boost/boost/chrono/process_cpu_clocks.hpp
@@ -1,6 +1,7 @@
// boost/chrono/process_cpu_clocks.hpp -----------------------------------------------------------//
// Copyright 2009-2011 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
@@ -43,6 +44,7 @@ namespace boost { namespace chrono {
#endif
};
+#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
class BOOST_CHRONO_DECL process_user_cpu_clock {
public:
typedef nanoseconds duration;
@@ -70,6 +72,7 @@ namespace boost { namespace chrono {
static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
#endif
};
+#endif
template <typename Rep>
struct process_times
@@ -83,12 +86,15 @@ namespace boost { namespace chrono {
: real(0)
, user(0)
, system(0){}
+
+#if ! defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0
template <typename Rep2>
explicit process_times(
Rep2 r)
: real(r)
, user(r)
, system(r){}
+#endif
template <typename Rep2>
explicit process_times(
process_times<Rep2> const& rhs)
@@ -107,10 +113,12 @@ namespace boost { namespace chrono {
rep user; // user cpu time
rep system; // system cpu time
+#if ! defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0
operator rep() const
{
return real;
}
+#endif
template <typename Rep2>
bool operator==(process_times<Rep2> const& rhs) {
return (real==rhs.real &&
@@ -180,7 +188,7 @@ namespace boost { namespace chrono {
}
template <class CharT, class Traits>
- void read(std::basic_istream<CharT, Traits>& is) const
+ void read(std::basic_istream<CharT, Traits>& is)
{
typedef std::istreambuf_iterator<CharT, Traits> in_iterator;
in_iterator i(is);
@@ -292,6 +300,7 @@ namespace chrono
typedef process_times<nanoseconds::rep> process_cpu_clock_times;
+#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
class BOOST_CHRONO_DECL process_cpu_clock
{
public:
@@ -308,6 +317,7 @@ namespace chrono
static BOOST_CHRONO_INLINE time_point now(system::error_code & ec );
#endif
};
+#endif
template <class CharT, class Traits, typename Rep>
std::basic_ostream<CharT, Traits>&
@@ -321,7 +331,7 @@ namespace chrono
template <class CharT, class Traits, typename Rep>
std::basic_istream<CharT, Traits>&
operator>>(std::basic_istream<CharT, Traits>& is,
- process_times<Rep> const& rhs)
+ process_times<Rep>& rhs)
{
rhs.read(is);
return is;
@@ -372,6 +382,7 @@ namespace chrono
}
};
+#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
template<class CharT>
struct clock_string<process_user_cpu_clock, CharT>
{
@@ -436,6 +447,7 @@ namespace chrono
return str;
}
};
+#endif
} // namespace chrono
} // namespace boost
diff --git a/3party/boost/boost/chrono/round.hpp b/3party/boost/boost/chrono/round.hpp
index 3d0619e681..09741fcf09 100644
--- a/3party/boost/boost/chrono/round.hpp
+++ b/3party/boost/boost/chrono/round.hpp
@@ -26,18 +26,22 @@ namespace boost
template <class To, class Rep, class Period>
To round(const duration<Rep, Period>& d)
{
+ typedef typename common_type<To, duration<Rep, Period> >::type result_type;
+ result_type diff0;
+ result_type diff1;
+
To t0 = duration_cast<To>(d);
To t1 = t0;
- ++t1;
-#if 0
- // Avoid the user of BOOST_AUTO to make the library portable to Sun, PGI, ..
- BOOST_AUTO(diff0, d - t0);
- BOOST_AUTO(diff1, t1 - d);
-#else
- typedef typename common_type<To, duration<Rep, Period> >::type result_type;
- result_type diff0 = d - t0;
- result_type diff1 = t1 - d;
-#endif
+ if (t0>d) {
+ --t1;
+ diff0 = t0 - d;
+ diff1 = d - t1;
+ } else {
+ ++t1;
+ diff0 = d - t0;
+ diff1 = t1 - d;
+ }
+
if (diff0 == diff1)
{
if (t0.count() & 1)
diff --git a/3party/boost/boost/circular_buffer.hpp b/3party/boost/boost/circular_buffer.hpp
index 13cc94fef7..f5eff60f08 100644
--- a/3party/boost/boost/circular_buffer.hpp
+++ b/3party/boost/boost/circular_buffer.hpp
@@ -11,12 +11,13 @@
#if !defined(BOOST_CIRCULAR_BUFFER_HPP)
#define BOOST_CIRCULAR_BUFFER_HPP
-#if defined(_MSC_VER) && _MSC_VER >= 1200
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/circular_buffer_fwd.hpp>
#include <boost/detail/workaround.hpp>
+#include <boost/static_assert.hpp>
// BOOST_CB_ENABLE_DEBUG: Debug support control.
#if defined(NDEBUG) || defined(BOOST_CB_DISABLE_DEBUG)
@@ -33,29 +34,20 @@
#define BOOST_CB_ASSERT(Expr) ((void)0)
#endif
-// BOOST_CB_STATIC_ASSERT: Compile time assertion.
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- #define BOOST_CB_STATIC_ASSERT(Expr) ((void)0)
-#else
- #include <boost/static_assert.hpp>
- #define BOOST_CB_STATIC_ASSERT(Expr) BOOST_STATIC_ASSERT(Expr)
-#endif
-
// BOOST_CB_IS_CONVERTIBLE: Check if Iterator::value_type is convertible to Type.
-#if BOOST_WORKAROUND(__BORLANDC__, <= 0x0550) || BOOST_WORKAROUND(__MWERKS__, <= 0x2407) || \
- BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x0550) || BOOST_WORKAROUND(__MWERKS__, <= 0x2407)
#define BOOST_CB_IS_CONVERTIBLE(Iterator, Type) ((void)0)
#else
#include <boost/detail/iterator.hpp>
#include <boost/type_traits/is_convertible.hpp>
#define BOOST_CB_IS_CONVERTIBLE(Iterator, Type) \
- BOOST_CB_STATIC_ASSERT((is_convertible<typename detail::iterator_traits<Iterator>::value_type, Type>::value))
+ BOOST_STATIC_ASSERT((is_convertible<typename detail::iterator_traits<Iterator>::value_type, Type>::value))
#endif
// BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS:
// Check if the STL provides templated iterator constructors for its containers.
#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
- #define BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS BOOST_CB_STATIC_ASSERT(false);
+ #define BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS BOOST_STATIC_ASSERT(false);
#else
#define BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS ((void)0);
#endif
@@ -67,7 +59,6 @@
#undef BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS
#undef BOOST_CB_IS_CONVERTIBLE
-#undef BOOST_CB_STATIC_ASSERT
#undef BOOST_CB_ASSERT
#undef BOOST_CB_ENABLE_DEBUG
diff --git a/3party/boost/boost/circular_buffer/base.hpp b/3party/boost/boost/circular_buffer/base.hpp
index 4893cb2043..13c5d4b972 100644
--- a/3party/boost/boost/circular_buffer/base.hpp
+++ b/3party/boost/boost/circular_buffer/base.hpp
@@ -1,6 +1,9 @@
// Implementation of the base circular buffer.
// Copyright (c) 2003-2008 Jan Gaspar
+// Copyright (c) 2013 Paul A. Bristow // Doxygen comments changed.
+// Copyright (c) 2013 Antony Polukhin // Move semantics implementation.
+// Copyright (c) 2014 Glen Fernandes // C++11 allocator model support.
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,55 +12,53 @@
#if !defined(BOOST_CIRCULAR_BUFFER_BASE_HPP)
#define BOOST_CIRCULAR_BUFFER_BASE_HPP
-#if defined(_MSC_VER) && _MSC_VER >= 1200
+#if defined(_MSC_VER)
#pragma once
#endif
+#include <boost/config.hpp>
#include <boost/call_traits.hpp>
#include <boost/concept_check.hpp>
#include <boost/limits.hpp>
+#include <boost/container/allocator_traits.hpp>
#include <boost/iterator/reverse_iterator.hpp>
#include <boost/iterator/iterator_traits.hpp>
#include <boost/type_traits/is_stateless.hpp>
#include <boost/type_traits/is_integral.hpp>
#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_nothrow_move_constructible.hpp>
+#include <boost/type_traits/is_nothrow_move_assignable.hpp>
+#include <boost/type_traits/is_copy_constructible.hpp>
+#include <boost/type_traits/conditional.hpp>
+#include <boost/move/move.hpp>
+#include <boost/utility/addressof.hpp>
#include <algorithm>
#include <utility>
#include <deque>
-#if !defined(BOOST_NO_EXCEPTIONS)
- #include <stdexcept>
-#endif
-#if BOOST_CB_ENABLE_DEBUG
- #include <cstring>
-#endif
+#include <stdexcept>
+
#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
#include <stddef.h>
#endif
-#if defined(BOOST_NO_STDC_NAMESPACE)
-namespace std {
- using ::memset;
-}
-#endif
-
namespace boost {
/*!
\class circular_buffer
\brief Circular buffer - a STL compliant container.
- \param T The type of the elements stored in the <code>circular_buffer</code>.
+ \tparam T The type of the elements stored in the <code>circular_buffer</code>.
\par Type Requirements T
The <code>T</code> has to be <a href="http://www.sgi.com/tech/stl/Assignable.html">
- SGIAssignable</a> (SGI STL defined combination of <a href="../../utility/Assignable.html">
- Assignable</a> and <a href="../../utility/CopyConstructible.html">CopyConstructible</a>).
+ SGIAssignable</a> (SGI STL defined combination of <a href="../../../utility/Assignable.html">
+ Assignable</a> and <a href="../../../utility/CopyConstructible.html">CopyConstructible</a>).
Moreover <code>T</code> has to be <a href="http://www.sgi.com/tech/stl/DefaultConstructible.html">
DefaultConstructible</a> if supplied as a default parameter when invoking some of the
<code>circular_buffer</code>'s methods e.g.
<code>insert(iterator pos, const value_type& item = %value_type())</code>. And
<a href="http://www.sgi.com/tech/stl/EqualityComparable.html">EqualityComparable</a> and/or
- <a href="../../utility/LessThanComparable.html">LessThanComparable</a> if the <code>circular_buffer</code>
+ <a href="../../../utility/LessThanComparable.html">LessThanComparable</a> if the <code>circular_buffer</code>
will be compared with another container.
- \param Alloc The allocator type used for all internal memory management.
+ \tparam Alloc The allocator type used for all internal memory management.
\par Type Requirements Alloc
The <code>Alloc</code> has to meet the allocator requirements imposed by STL.
\par Default Alloc
@@ -75,38 +76,50 @@ class circular_buffer
/*! \endcond */
{
-// Requirements
- BOOST_CLASS_REQUIRE(T, boost, SGIAssignableConcept);
+ // Requirements
+ //BOOST_CLASS_REQUIRE(T, boost, SGIAssignableConcept);
+
+
+ //BOOST_CONCEPT_ASSERT((Assignable<T>));
+ //BOOST_CONCEPT_ASSERT((CopyConstructible<T>));
+ //BOOST_CONCEPT_ASSERT((DefaultConstructible<T>));
+
+ // Required if the circular_buffer will be compared with anther container.
+ //BOOST_CONCEPT_ASSERT((EqualityComparable<T>));
+ //BOOST_CONCEPT_ASSERT((LessThanComparable<T>));
public:
// Basic types
+
+ //! The type of this <code>circular_buffer</code>.
+ typedef circular_buffer<T, Alloc> this_type;
//! The type of elements stored in the <code>circular_buffer</code>.
- typedef typename Alloc::value_type value_type;
+ typedef typename boost::container::allocator_traits<Alloc>::value_type value_type;
//! A pointer to an element.
- typedef typename Alloc::pointer pointer;
+ typedef typename boost::container::allocator_traits<Alloc>::pointer pointer;
//! A const pointer to the element.
- typedef typename Alloc::const_pointer const_pointer;
+ typedef typename boost::container::allocator_traits<Alloc>::const_pointer const_pointer;
//! A reference to an element.
- typedef typename Alloc::reference reference;
+ typedef typename boost::container::allocator_traits<Alloc>::reference reference;
//! A const reference to an element.
- typedef typename Alloc::const_reference const_reference;
+ typedef typename boost::container::allocator_traits<Alloc>::const_reference const_reference;
//! The distance type.
/*!
(A signed integral type used to represent the distance between two iterators.)
*/
- typedef typename Alloc::difference_type difference_type;
+ typedef typename boost::container::allocator_traits<Alloc>::difference_type difference_type;
//! The size type.
/*!
(An unsigned integral type that can represent any non-negative value of the container's distance type.)
*/
- typedef typename Alloc::size_type size_type;
+ typedef typename boost::container::allocator_traits<Alloc>::size_type size_type;
//! The type of an allocator used in the <code>circular_buffer</code>.
typedef Alloc allocator_type;
@@ -114,10 +127,10 @@ public:
// Iterators
//! A const (random access) iterator used to iterate through the <code>circular_buffer</code>.
- typedef cb_details::iterator< circular_buffer<T, Alloc>, cb_details::const_traits<Alloc> > const_iterator;
+ typedef cb_details::iterator< circular_buffer<T, Alloc>, cb_details::const_traits<boost::container::allocator_traits<Alloc> > > const_iterator;
//! A (random access) iterator used to iterate through the <code>circular_buffer</code>.
- typedef cb_details::iterator< circular_buffer<T, Alloc>, cb_details::nonconst_traits<Alloc> > iterator;
+ typedef cb_details::iterator< circular_buffer<T, Alloc>, cb_details::nonconst_traits<boost::container::allocator_traits<Alloc> > > iterator;
//! A const iterator used to iterate backwards through a <code>circular_buffer</code>.
typedef boost::reverse_iterator<const_iterator> const_reverse_iterator;
@@ -145,20 +158,40 @@ public:
//! The capacity type.
/*!
- (Same as <code>size_type</code> - defined for consistency with the
- <a href="space_optimized.html"><code>circular_buffer_space_optimized</code></a>.)
+ (Same as <code>size_type</code> - defined for consistency with the __cbso class.
+
*/
+ // <a href="space_optimized.html"><code>circular_buffer_space_optimized</code></a>.)
+
typedef size_type capacity_type;
// Helper types
- // A type representing the "best" way to pass the value_type to a method.
- typedef typename call_traits<value_type>::param_type param_value_type;
+ //! A type representing the "best" way to pass the value_type to a method.
+ typedef const value_type& param_value_type;
- // A type representing the "best" way to return the value_type from a const method.
- typedef typename call_traits<value_type>::param_type return_value_type;
+ //! A type representing rvalue from param type.
+ //! On compilers without rvalue references support this type is the Boost.Moves type used for emulation.
+ typedef BOOST_RV_REF(value_type) rvalue_type;
private:
+
+ // TODO: move to Boost.Move
+ /*! \cond */
+ template <class ValT>
+ static inline typename boost::conditional<
+ ((boost::is_nothrow_move_constructible<ValT>::value && boost::is_nothrow_move_assignable<ValT>::value) || !boost::is_copy_constructible<ValT>::value)
+#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ && has_move_emulation_enabled<ValT>::value
+#endif
+ ,
+ rvalue_type,
+ param_value_type
+ >::type move_if_noexcept(ValT& value) BOOST_NOEXCEPT {
+ return boost::move(value);
+ }
+ /*! \endcond */
+
// Member variables
//! The internal buffer used for storing elements in the circular buffer.
@@ -202,7 +235,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>get_allocator()</code> for obtaining an allocator %reference.
*/
- allocator_type get_allocator() const { return m_alloc; }
+ allocator_type get_allocator() const BOOST_NOEXCEPT { return m_alloc; }
//! Get the allocator reference.
/*!
@@ -218,7 +251,7 @@ public:
although use of stateful allocators in STL is discouraged.
\sa <code>get_allocator() const</code>
*/
- allocator_type& get_allocator() { return m_alloc; }
+ allocator_type& get_allocator() BOOST_NOEXCEPT { return m_alloc; }
// Element access
@@ -236,7 +269,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>end()</code>, <code>rbegin()</code>, <code>rend()</code>
*/
- iterator begin() { return iterator(this, empty() ? 0 : m_first); }
+ iterator begin() BOOST_NOEXCEPT { return iterator(this, empty() ? 0 : m_first); }
//! Get the iterator pointing to the end of the <code>circular_buffer</code>.
/*!
@@ -252,7 +285,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>begin()</code>, <code>rbegin()</code>, <code>rend()</code>
*/
- iterator end() { return iterator(this, 0); }
+ iterator end() BOOST_NOEXCEPT { return iterator(this, 0); }
//! Get the const iterator pointing to the beginning of the <code>circular_buffer</code>.
/*!
@@ -268,7 +301,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>end() const</code>, <code>rbegin() const</code>, <code>rend() const</code>
*/
- const_iterator begin() const { return const_iterator(this, empty() ? 0 : m_first); }
+ const_iterator begin() const BOOST_NOEXCEPT { return const_iterator(this, empty() ? 0 : m_first); }
//! Get the const iterator pointing to the end of the <code>circular_buffer</code>.
/*!
@@ -284,7 +317,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>begin() const</code>, <code>rbegin() const</code>, <code>rend() const</code>
*/
- const_iterator end() const { return const_iterator(this, 0); }
+ const_iterator end() const BOOST_NOEXCEPT { return const_iterator(this, 0); }
//! Get the iterator pointing to the beginning of the "reversed" <code>circular_buffer</code>.
/*!
@@ -300,7 +333,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>rend()</code>, <code>begin()</code>, <code>end()</code>
*/
- reverse_iterator rbegin() { return reverse_iterator(end()); }
+ reverse_iterator rbegin() BOOST_NOEXCEPT { return reverse_iterator(end()); }
//! Get the iterator pointing to the end of the "reversed" <code>circular_buffer</code>.
/*!
@@ -316,7 +349,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>rbegin()</code>, <code>begin()</code>, <code>end()</code>
*/
- reverse_iterator rend() { return reverse_iterator(begin()); }
+ reverse_iterator rend() BOOST_NOEXCEPT { return reverse_iterator(begin()); }
//! Get the const iterator pointing to the beginning of the "reversed" <code>circular_buffer</code>.
/*!
@@ -332,7 +365,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>rend() const</code>, <code>begin() const</code>, <code>end() const</code>
*/
- const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
+ const_reverse_iterator rbegin() const BOOST_NOEXCEPT { return const_reverse_iterator(end()); }
//! Get the const iterator pointing to the end of the "reversed" <code>circular_buffer</code>.
/*!
@@ -348,7 +381,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>rbegin() const</code>, <code>begin() const</code>, <code>end() const</code>
*/
- const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
+ const_reverse_iterator rend() const BOOST_NOEXCEPT { return const_reverse_iterator(begin()); }
//! Get the element at the <code>index</code> position.
/*!
@@ -383,7 +416,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>\link at(size_type)const at() const \endlink</code>
*/
- return_value_type operator [] (size_type index) const {
+ const_reference operator [] (size_type index) const {
BOOST_CB_ASSERT(index < size()); // check for invalid index
return *add(m_first, index);
}
@@ -421,7 +454,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>\link operator[](size_type)const operator[] const \endlink</code>
*/
- return_value_type at(size_type index) const {
+ const_reference at(size_type index) const {
check_position(index);
return (*this)[index];
}
@@ -475,7 +508,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>back() const</code>
*/
- return_value_type front() const {
+ const_reference front() const {
BOOST_CB_ASSERT(!empty()); // check for empty buffer (front element not available)
return *m_first;
}
@@ -493,7 +526,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>front() const</code>
*/
- return_value_type back() const {
+ const_reference back() const {
BOOST_CB_ASSERT(!empty()); // check for empty buffer (back element not available)
return *((m_last == m_buff ? m_end : m_last) - 1);
}
@@ -508,8 +541,9 @@ public:
The internal representation is often not linear and the state of the internal buffer may look like this:<br>
<br><code>
|e|f|g| | | |a|b|c|d|<br>
- end ---^<br>
- begin -------^</code><br><br>
+ end ___^<br>
+ begin _______^</code><br><br>
+
where <code>|a|b|c|d|</code> represents the "array one", <code>|e|f|g|</code> represents the "array two" and
<code>| | | |</code> is a free space.<br>
Now consider a typical C style function for writing data into a file:<br><br>
@@ -612,8 +646,7 @@ public:
This method can be useful when passing the stored data into a legacy C API as an array.
\post <code>\&(*this)[0] \< \&(*this)[1] \< ... \< \&(*this)[size() - 1]</code>
\return A pointer to the beginning of the array or <code>0</code> if empty.
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ \throws <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the operations in the <i>Throws</i> section do not throw anything.
\par Iterator Invalidation
@@ -649,12 +682,12 @@ public:
break;
}
if (is_uninitialized(dest)) {
- m_alloc.construct(dest, *src);
+ boost::container::allocator_traits<Alloc>::construct(m_alloc, boost::addressof(*dest), this_type::move_if_noexcept(*src));
++constructed;
} else {
- value_type tmp = *src;
- replace(src, *dest);
- replace(dest, tmp);
+ value_type tmp = this_type::move_if_noexcept(*src);
+ replace(src, this_type::move_if_noexcept(*dest));
+ replace(dest, boost::move(tmp));
}
}
}
@@ -689,7 +722,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>linearize()</code>, <code>array_one()</code>, <code>array_two()</code>
*/
- bool is_linearized() const { return m_first < m_last || m_last == m_buff; }
+ bool is_linearized() const BOOST_NOEXCEPT { return m_first < m_last || m_last == m_buff; }
//! Rotate elements in the <code>circular_buffer</code>.
/*!
@@ -705,8 +738,7 @@ public:
<code>val_0 == (*this)[0] \&\& val_1 == (*this)[1] \&\& ... \&\& val_m == (*this)[m - 1] \&\& val_r1 ==
(*this)[m + n - 1] \&\& val_r2 == (*this)[m + n - 2] \&\& ... \&\& val_rn == (*this)[m]</code>
\param new_begin The new beginning.
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ \throws See <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the <code>circular_buffer</code> is full or <code>new_begin</code> points to
<code>begin()</code> or if the operations in the <i>Throws</i> section do not throw anything.
@@ -729,12 +761,12 @@ public:
difference_type n = new_begin - begin();
if (m < n) {
for (; m > 0; --m) {
- push_front(back());
+ push_front(this_type::move_if_noexcept(back()));
pop_back();
}
} else {
for (; n > 0; --n) {
- push_back(front());
+ push_back(this_type::move_if_noexcept(front()));
pop_front();
}
}
@@ -756,7 +788,7 @@ public:
\sa <code>capacity()</code>, <code>max_size()</code>, <code>reserve()</code>,
<code>\link resize() resize(size_type, const_reference)\endlink</code>
*/
- size_type size() const { return m_size; }
+ size_type size() const BOOST_NOEXCEPT { return m_size; }
/*! \brief Get the largest possible size or capacity of the <code>circular_buffer</code>. (It depends on
allocator's %max_size()).
@@ -770,8 +802,8 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>size()</code>, <code>capacity()</code>, <code>reserve()</code>
*/
- size_type max_size() const {
- return (std::min<size_type>)(m_alloc.max_size(), (std::numeric_limits<difference_type>::max)());
+ size_type max_size() const BOOST_NOEXCEPT {
+ return (std::min<size_type>)(boost::container::allocator_traits<Alloc>::max_size(m_alloc), (std::numeric_limits<difference_type>::max)());
}
//! Is the <code>circular_buffer</code> empty?
@@ -787,7 +819,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>full()</code>
*/
- bool empty() const { return size() == 0; }
+ bool empty() const BOOST_NOEXCEPT { return size() == 0; }
//! Is the <code>circular_buffer</code> full?
/*!
@@ -802,7 +834,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>empty()</code>
*/
- bool full() const { return capacity() == size(); }
+ bool full() const BOOST_NOEXCEPT { return capacity() == size(); }
/*! \brief Get the maximum number of elements which can be inserted into the <code>circular_buffer</code> without
overwriting any of already stored elements.
@@ -816,7 +848,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>capacity()</code>, <code>size()</code>, <code>max_size()</code>
*/
- size_type reserve() const { return capacity() - size(); }
+ size_type reserve() const BOOST_NOEXCEPT { return capacity() - size(); }
//! Get the capacity of the <code>circular_buffer</code>.
/*!
@@ -831,18 +863,20 @@ public:
\sa <code>reserve()</code>, <code>size()</code>, <code>max_size()</code>,
<code>set_capacity(capacity_type)</code>
*/
- capacity_type capacity() const { return m_end - m_buff; }
+ capacity_type capacity() const BOOST_NOEXCEPT { return m_end - m_buff; }
//! Change the capacity of the <code>circular_buffer</code>.
- /*!
+ /*!
+ \pre If <code>T</code> is a move only type, then compiler shall support <code>noexcept</code> modifiers
+ and move constructor of <code>T</code> must be marked with it (must not throw exceptions).
\post <code>capacity() == new_capacity \&\& size() \<= new_capacity</code><br><br>
If the current number of elements stored in the <code>circular_buffer</code> is greater than the desired
new capacity then number of <code>[size() - new_capacity]</code> <b>last</b> elements will be removed and
the new size will be equal to <code>new_capacity</code>.
\param new_capacity The new capacity.
- \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ \throws "An allocation error" if memory is exhausted, (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
\par Exception Safety
Strong.
\par Iterator Invalidation
@@ -860,7 +894,7 @@ public:
iterator b = begin();
BOOST_TRY {
reset(buff,
- cb_details::uninitialized_copy_with_alloc(b, b + (std::min)(new_capacity, size()), buff, m_alloc),
+ cb_details::uninitialized_move_if_noexcept(b, b + (std::min)(new_capacity, size()), buff, m_alloc),
new_capacity);
} BOOST_CATCH(...) {
deallocate(buff, new_capacity);
@@ -883,7 +917,7 @@ public:
size. (See the <i>Effect</i>.)
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -908,7 +942,9 @@ public:
}
//! Change the capacity of the <code>circular_buffer</code>.
- /*!
+ /*!
+ \pre If <code>T</code> is a move only type, then compiler shall support <code>noexcept</code> modifiers
+ and move constructor of <code>T</code> must be marked with it (must not throw exceptions).
\post <code>capacity() == new_capacity \&\& size() \<= new_capacity</code><br><br>
If the current number of elements stored in the <code>circular_buffer</code> is greater than the desired
new capacity then number of <code>[size() - new_capacity]</code> <b>first</b> elements will be removed
@@ -916,7 +952,7 @@ public:
\param new_capacity The new capacity.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
\par Exception Safety
Strong.
\par Iterator Invalidation
@@ -933,7 +969,7 @@ public:
pointer buff = allocate(new_capacity);
iterator e = end();
BOOST_TRY {
- reset(buff, cb_details::uninitialized_copy_with_alloc(e - (std::min)(new_capacity, size()),
+ reset(buff, cb_details::uninitialized_move_if_noexcept(e - (std::min)(new_capacity, size()),
e, buff, m_alloc), new_capacity);
} BOOST_CATCH(...) {
deallocate(buff, new_capacity);
@@ -956,7 +992,7 @@ public:
size. (See the <i>Effect</i>.)
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -985,8 +1021,7 @@ public:
/*!
\post <code>capacity() == 0 \&\& size() == 0</code>
\param alloc The allocator.
- \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
- used).
+ \throws Nothing.
\par Complexity
Constant.
\warning Since Boost version 1.36 the behaviour of this constructor has changed. Now the constructor does not
@@ -1000,7 +1035,7 @@ public:
\sa <code>circular_buffer(capacity_type, const allocator_type& alloc)</code>,
<code>set_capacity(capacity_type)</code>
*/
- explicit circular_buffer(const allocator_type& alloc = allocator_type())
+ explicit circular_buffer(const allocator_type& alloc = allocator_type()) BOOST_NOEXCEPT
: m_buff(0), m_end(0), m_first(0), m_last(0), m_size(0), m_alloc(alloc) {}
//! Create an empty <code>circular_buffer</code> with the specified capacity.
@@ -1028,7 +1063,7 @@ public:
\param alloc The allocator.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Complexity
Linear (in the <code>n</code>).
*/
@@ -1049,7 +1084,7 @@ public:
\param alloc The allocator.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Complexity
Linear (in the <code>n</code>).
*/
@@ -1069,7 +1104,7 @@ public:
\param cb The <code>circular_buffer</code> to be copied.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Complexity
Linear (in the size of <code>cb</code>).
*/
@@ -1082,7 +1117,7 @@ public:
initialize_buffer(cb.capacity());
m_first = m_buff;
BOOST_TRY {
- m_last = cb_details::uninitialized_copy_with_alloc(cb.begin(), cb.end(), m_buff, m_alloc);
+ m_last = cb_details::uninitialized_copy(cb.begin(), cb.end(), m_buff, m_alloc);
} BOOST_CATCH(...) {
deallocate(m_buff, cb.capacity());
BOOST_RETHROW
@@ -1091,24 +1126,21 @@ public:
if (m_last == m_end)
m_last = m_buff;
}
-
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
- /*! \cond */
- template <class InputIterator>
- circular_buffer(InputIterator first, InputIterator last)
- : m_alloc(allocator_type()) {
- initialize(first, last, is_integral<InputIterator>());
- }
-
- template <class InputIterator>
- circular_buffer(capacity_type capacity, InputIterator first, InputIterator last)
- : m_alloc(allocator_type()) {
- initialize(capacity, first, last, is_integral<InputIterator>());
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ //! The move constructor.
+ /*! \brief Move constructs a <code>circular_buffer</code> from <code>cb</code>, leaving <code>cb</code> empty.
+ \pre C++ compiler with rvalue references support.
+ \post <code>cb.empty()</code>
+ \param cb <code>circular_buffer</code> to 'steal' value from.
+ \throws Nothing.
+ \par Constant.
+ */
+ circular_buffer(circular_buffer<T, Alloc>&& cb) BOOST_NOEXCEPT
+ : m_buff(0), m_end(0), m_first(0), m_last(0), m_size(0), m_alloc(cb.get_allocator()) {
+ cb.swap(*this);
}
- /*! \endcond */
-
-#else
+#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
//! Create a full <code>circular_buffer</code> filled with a copy of the range.
/*!
@@ -1122,7 +1154,7 @@ public:
\param alloc The allocator.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Complexity
Linear (in the <code>std::distance(first, last)</code>).
*/
@@ -1149,7 +1181,7 @@ public:
\param alloc The allocator.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Complexity
Linear (in <code>std::distance(first, last)</code>; in
<code>min[capacity, std::distance(first, last)]</code> if the <code>InputIterator</code> is a
@@ -1162,8 +1194,6 @@ public:
initialize(buffer_capacity, first, last, is_integral<InputIterator>());
}
-#endif // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
//! The destructor.
/*!
Destroys the <code>circular_buffer</code>.
@@ -1175,7 +1205,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>) for scalar types; linear for other types.
\sa <code>clear()</code>
*/
- ~circular_buffer() {
+ ~circular_buffer() BOOST_NOEXCEPT {
destroy();
#if BOOST_CB_ENABLE_DEBUG
invalidate_all_iterators();
@@ -1192,7 +1222,7 @@ public:
\param cb The <code>circular_buffer</code> to be copied.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Strong.
\par Iterator Invalidation
@@ -1211,7 +1241,7 @@ public:
return *this;
pointer buff = allocate(cb.capacity());
BOOST_TRY {
- reset(buff, cb_details::uninitialized_copy_with_alloc(cb.begin(), cb.end(), buff, m_alloc), cb.capacity());
+ reset(buff, cb_details::uninitialized_copy(cb.begin(), cb.end(), buff, m_alloc), cb.capacity());
} BOOST_CATCH(...) {
deallocate(buff, cb.capacity());
BOOST_RETHROW
@@ -1220,6 +1250,23 @@ public:
return *this;
}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ /*! \brief Move assigns content of <code>cb</code> to <code>*this</code>, leaving <code>cb</code> empty.
+ \pre C++ compiler with rvalue references support.
+ \post <code>cb.empty()</code>
+ \param cb <code>circular_buffer</code> to 'steal' value from.
+ \throws Nothing.
+ \par Complexity
+ Constant.
+ */
+ circular_buffer<T, Alloc>& operator = (circular_buffer<T, Alloc>&& cb) BOOST_NOEXCEPT {
+ cb.swap(*this); // now `this` holds `cb`
+ circular_buffer<T, Alloc>(get_allocator()) // temprary that holds initial `cb` allocator
+ .swap(cb); // makes `cb` empty
+ return *this;
+ }
+#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
+
//! Assign <code>n</code> items into the <code>circular_buffer</code>.
/*!
The content of the <code>circular_buffer</code> will be removed and replaced with <code>n</code> copies of the
@@ -1230,7 +1277,7 @@ public:
\param item The element the <code>circular_buffer</code> will be filled with.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1260,7 +1307,7 @@ public:
\param item The element the <code>circular_buffer</code> will be filled with.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1292,7 +1339,7 @@ public:
\param last The end of the range to be copied.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1329,7 +1376,7 @@ public:
\param last The end of the range to be copied.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1367,7 +1414,7 @@ public:
Constant (in the size of the <code>circular_buffer</code>).
\sa <code>swap(circular_buffer<T, Alloc>&, circular_buffer<T, Alloc>&)</code>
*/
- void swap(circular_buffer<T, Alloc>& cb) {
+ void swap(circular_buffer<T, Alloc>& cb) BOOST_NOEXCEPT {
swap_allocator(cb, is_stateless<allocator_type>());
std::swap(m_buff, cb.m_buff);
std::swap(m_end, cb.m_end);
@@ -1381,7 +1428,44 @@ public:
}
// push and pop
+private:
+ template <class ValT>
+ void push_back_impl(ValT item) {
+ if (full()) {
+ if (empty())
+ return;
+ replace(m_last, static_cast<ValT>(item));
+ increment(m_last);
+ m_first = m_last;
+ } else {
+ boost::container::allocator_traits<Alloc>::construct(m_alloc, boost::addressof(*m_last), static_cast<ValT>(item));
+ increment(m_last);
+ ++m_size;
+ }
+ }
+ template <class ValT>
+ void push_front_impl(ValT item) {
+ BOOST_TRY {
+ if (full()) {
+ if (empty())
+ return;
+ decrement(m_first);
+ replace(m_first, static_cast<ValT>(item));
+ m_last = m_first;
+ } else {
+ decrement(m_first);
+ boost::container::allocator_traits<Alloc>::construct(m_alloc, boost::addressof(*m_first), static_cast<ValT>(item));
+ ++m_size;
+ }
+ } BOOST_CATCH(...) {
+ increment(m_first);
+ BOOST_RETHROW
+ }
+ BOOST_CATCH_END
+ }
+
+public:
//! Insert a new element at the end of the <code>circular_buffer</code>.
/*!
\post if <code>capacity() > 0</code> then <code>back() == item</code><br>
@@ -1389,7 +1473,7 @@ public:
<code>0</code>, nothing will be inserted.
\param item The element to be inserted.
\throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
\par Exception Safety
Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
\par Iterator Invalidation
@@ -1399,18 +1483,51 @@ public:
\sa <code>\link push_front() push_front(const_reference)\endlink</code>,
<code>pop_back()</code>, <code>pop_front()</code>
*/
- void push_back(param_value_type item = value_type()) {
- if (full()) {
- if (empty())
- return;
- replace(m_last, item);
- increment(m_last);
- m_first = m_last;
- } else {
- m_alloc.construct(m_last, item);
- increment(m_last);
- ++m_size;
- }
+ void push_back(param_value_type item) {
+ push_back_impl<param_value_type>(item);
+ }
+
+ //! Insert a new element at the end of the <code>circular_buffer</code> using rvalue references or rvalues references emulation.
+ /*!
+ \post if <code>capacity() > 0</code> then <code>back() == item</code><br>
+ If the <code>circular_buffer</code> is full, the first element will be removed. If the capacity is
+ <code>0</code>, nothing will be inserted.
+ \param item The element to be inserted.
+ \throws Whatever <code>T::T(T&&)</code> throws.
+ Whatever <code>T::operator = (T&&)</code> throws.
+ \par Exception Safety
+ Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
+ \par Iterator Invalidation
+ Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
+ \par Complexity
+ Constant (in the size of the <code>circular_buffer</code>).
+ \sa <code>\link push_front() push_front(const_reference)\endlink</code>,
+ <code>pop_back()</code>, <code>pop_front()</code>
+ */
+ void push_back(rvalue_type item) {
+ push_back_impl<rvalue_type>(boost::move(item));
+ }
+
+ //! Insert a new default-constructed element at the end of the <code>circular_buffer</code>.
+ /*!
+ \post if <code>capacity() > 0</code> then <code>back() == item</code><br>
+ If the <code>circular_buffer</code> is full, the first element will be removed. If the capacity is
+ <code>0</code>, nothing will be inserted.
+ \throws Whatever <code>T::T()</code> throws.
+ Whatever <code>T::T(T&&)</code> throws.
+ Whatever <code>T::operator = (T&&)</code> throws.
+ \par Exception Safety
+ Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
+ \par Iterator Invalidation
+ Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
+ \par Complexity
+ Constant (in the size of the <code>circular_buffer</code>).
+ \sa <code>\link push_front() push_front(const_reference)\endlink</code>,
+ <code>pop_back()</code>, <code>pop_front()</code>
+ */
+ void push_back() {
+ value_type temp;
+ push_back(boost::move(temp));
}
//! Insert a new element at the beginning of the <code>circular_buffer</code>.
@@ -1420,7 +1537,7 @@ public:
<code>0</code>, nothing will be inserted.
\param item The element to be inserted.
\throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
\par Exception Safety
Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
\par Iterator Invalidation
@@ -1430,24 +1547,51 @@ public:
\sa <code>\link push_back() push_back(const_reference)\endlink</code>,
<code>pop_back()</code>, <code>pop_front()</code>
*/
- void push_front(param_value_type item = value_type()) {
- BOOST_TRY {
- if (full()) {
- if (empty())
- return;
- decrement(m_first);
- replace(m_first, item);
- m_last = m_first;
- } else {
- decrement(m_first);
- m_alloc.construct(m_first, item);
- ++m_size;
- }
- } BOOST_CATCH(...) {
- increment(m_first);
- BOOST_RETHROW
- }
- BOOST_CATCH_END
+ void push_front(param_value_type item) {
+ push_front_impl<param_value_type>(item);
+ }
+
+ //! Insert a new element at the beginning of the <code>circular_buffer</code> using rvalue references or rvalues references emulation.
+ /*!
+ \post if <code>capacity() > 0</code> then <code>front() == item</code><br>
+ If the <code>circular_buffer</code> is full, the last element will be removed. If the capacity is
+ <code>0</code>, nothing will be inserted.
+ \param item The element to be inserted.
+ \throws Whatever <code>T::T(T&&)</code> throws.
+ Whatever <code>T::operator = (T&&)</code> throws.
+ \par Exception Safety
+ Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
+ \par Iterator Invalidation
+ Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
+ \par Complexity
+ Constant (in the size of the <code>circular_buffer</code>).
+ \sa <code>\link push_back() push_back(const_reference)\endlink</code>,
+ <code>pop_back()</code>, <code>pop_front()</code>
+ */
+ void push_front(rvalue_type item) {
+ push_front_impl<rvalue_type>(boost::move(item));
+ }
+
+ //! Insert a new default-constructed element at the beginning of the <code>circular_buffer</code>.
+ /*!
+ \post if <code>capacity() > 0</code> then <code>front() == item</code><br>
+ If the <code>circular_buffer</code> is full, the last element will be removed. If the capacity is
+ <code>0</code>, nothing will be inserted.
+ \throws Whatever <code>T::T()</code> throws.
+ Whatever <code>T::T(T&&)</code> throws.
+ Whatever <code>T::operator = (T&&)</code> throws.
+ \par Exception Safety
+ Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
+ \par Iterator Invalidation
+ Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
+ \par Complexity
+ Constant (in the size of the <code>circular_buffer</code>).
+ \sa <code>\link push_back() push_back(const_reference)\endlink</code>,
+ <code>pop_back()</code>, <code>pop_front()</code>
+ */
+ void push_front() {
+ value_type temp;
+ push_front(boost::move(temp));
}
//! Remove the last element from the <code>circular_buffer</code>.
@@ -1491,6 +1635,15 @@ public:
increment(m_first);
--m_size;
}
+private:
+ template <class ValT>
+ iterator insert_impl(iterator pos, ValT item) {
+ BOOST_CB_ASSERT(pos.is_valid(this)); // check for uninitialized or invalidated iterator
+ iterator b = begin();
+ if (full() && pos == b)
+ return b;
+ return insert_item<ValT>(pos, static_cast<ValT>(item));
+ }
public:
// Insert
@@ -1507,7 +1660,9 @@ public:
\return Iterator to the inserted element or <code>begin()</code> if the <code>item</code> is not inserted. (See
the <i>Effect</i>.)
\throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
+ <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
+
\par Exception Safety
Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
\par Iterator Invalidation
@@ -1524,12 +1679,77 @@ public:
rinsert(iterator, size_type, value_type)\endlink</code>,
<code>rinsert(iterator, InputIterator, InputIterator)</code>
*/
- iterator insert(iterator pos, param_value_type item = value_type()) {
- BOOST_CB_ASSERT(pos.is_valid(this)); // check for uninitialized or invalidated iterator
- iterator b = begin();
- if (full() && pos == b)
- return b;
- return insert_item(pos, item);
+ iterator insert(iterator pos, param_value_type item) {
+ return insert_impl<param_value_type>(pos, item);
+ }
+
+ //! Insert an element at the specified position.
+ /*!
+ \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer</code> or its end.
+ \post The <code>item</code> will be inserted at the position <code>pos</code>.<br>
+ If the <code>circular_buffer</code> is full, the first element will be overwritten. If the
+ <code>circular_buffer</code> is full and the <code>pos</code> points to <code>begin()</code>, then the
+ <code>item</code> will not be inserted. If the capacity is <code>0</code>, nothing will be inserted.
+ \param pos An iterator specifying the position where the <code>item</code> will be inserted.
+ \param item The element to be inserted.
+ \return Iterator to the inserted element or <code>begin()</code> if the <code>item</code> is not inserted. (See
+ the <i>Effect</i>.)
+ \throws Whatever <code>T::T(T&&)</code> throws.
+ Whatever <code>T::operator = (T&&)</code> throws.
+ <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
+ \par Exception Safety
+ Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
+ \par Iterator Invalidation
+ Invalidates iterators pointing to the elements at the insertion point (including <code>pos</code>) and
+ iterators behind the insertion point (towards the end; except iterators equal to <code>end()</code>). It
+ also invalidates iterators pointing to the overwritten element.
+ \par Complexity
+ Linear (in <code>std::distance(pos, end())</code>).
+ \sa <code>\link insert(iterator, size_type, param_value_type)
+ insert(iterator, size_type, value_type)\endlink</code>,
+ <code>insert(iterator, InputIterator, InputIterator)</code>,
+ <code>\link rinsert(iterator, param_value_type) rinsert(iterator, value_type)\endlink</code>,
+ <code>\link rinsert(iterator, size_type, param_value_type)
+ rinsert(iterator, size_type, value_type)\endlink</code>,
+ <code>rinsert(iterator, InputIterator, InputIterator)</code>
+ */
+ iterator insert(iterator pos, rvalue_type item) {
+ return insert_impl<rvalue_type>(pos, boost::move(item));
+ }
+
+ //! Insert a default-constructed element at the specified position.
+ /*!
+ \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer</code> or its end.
+ \post The <code>item</code> will be inserted at the position <code>pos</code>.<br>
+ If the <code>circular_buffer</code> is full, the first element will be overwritten. If the
+ <code>circular_buffer</code> is full and the <code>pos</code> points to <code>begin()</code>, then the
+ <code>item</code> will not be inserted. If the capacity is <code>0</code>, nothing will be inserted.
+ \param pos An iterator specifying the position where the <code>item</code> will be inserted.
+ \return Iterator to the inserted element or <code>begin()</code> if the <code>item</code> is not inserted. (See
+ the <i>Effect</i>.)
+ \throws Whatever <code>T::T()</code> throws.
+ Whatever <code>T::T(T&&)</code> throws.
+ Whatever <code>T::operator = (T&&)</code> throws.
+ <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
+ \par Exception Safety
+ Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
+ \par Iterator Invalidation
+ Invalidates iterators pointing to the elements at the insertion point (including <code>pos</code>) and
+ iterators behind the insertion point (towards the end; except iterators equal to <code>end()</code>). It
+ also invalidates iterators pointing to the overwritten element.
+ \par Complexity
+ Linear (in <code>std::distance(pos, end())</code>).
+ \sa <code>\link insert(iterator, size_type, param_value_type)
+ insert(iterator, size_type, value_type)\endlink</code>,
+ <code>insert(iterator, InputIterator, InputIterator)</code>,
+ <code>\link rinsert(iterator, param_value_type) rinsert(iterator, value_type)\endlink</code>,
+ <code>\link rinsert(iterator, size_type, param_value_type)
+ rinsert(iterator, size_type, value_type)\endlink</code>,
+ <code>rinsert(iterator, InputIterator, InputIterator)</code>
+ */
+ iterator insert(iterator pos) {
+ value_type temp;
+ return insert(pos, boost::move(temp));
}
//! Insert <code>n</code> copies of the <code>item</code> at the specified position.
@@ -1543,7 +1763,8 @@ public:
\param n The number of <code>item</code>s the to be inserted.
\param item The element whose copies will be inserted.
\throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
+ <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the operations in the <i>Throws</i> section do not throw anything.
\par Iterator Invalidation
@@ -1556,7 +1777,7 @@ public:
Consider a <code>circular_buffer</code> with the capacity of 6 and the size of 4. Its internal buffer may
look like the one below.<br><br>
<code>|1|2|3|4| | |</code><br>
- <code>p ---^</code><br><br>After inserting 5 elements at the position <code>p</code>:<br><br>
+ <code>p ___^</code><br><br>After inserting 5 elements at the position <code>p</code>:<br><br>
<code>insert(p, (size_t)5, 0);</code><br><br>actually only 4 elements get inserted and elements
<code>1</code> and <code>2</code> are overwritten. This is due to the fact the insert operation preserves
the capacity. After insertion the internal buffer looks like this:<br><br><code>|0|0|0|0|3|4|</code><br>
@@ -1594,8 +1815,10 @@ public:
\param pos An iterator specifying the position where the range will be inserted.
\param first The beginning of the range to be inserted.
\param last The end of the range to be inserted.
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ \throws Whatever <code>T::T(const T&)</code> throws if the <code>InputIterator</code> is not a move iterator.
+ Whatever <code>T::operator = (const T&)</code> throws if the <code>InputIterator</code> is not a move iterator.
+ Whatever <code>T::T(T&&)</code> throws if the <code>InputIterator</code> is a move iterator.
+ Whatever <code>T::operator = (T&&)</code> throws if the <code>InputIterator</code> is a move iterator.
\par Exception Safety
Basic; no-throw if the operations in the <i>Throws</i> section do not throw anything.
\par Iterator Invalidation
@@ -1611,7 +1834,7 @@ public:
Consider a <code>circular_buffer</code> with the capacity of 6 and the size of 4. Its internal buffer may
look like the one below.<br><br>
<code>|1|2|3|4| | |</code><br>
- <code>p ---^</code><br><br>After inserting a range of elements at the position <code>p</code>:<br><br>
+ <code>p ___^</code><br><br>After inserting a range of elements at the position <code>p</code>:<br><br>
<code>int array[] = { 5, 6, 7, 8, 9 };</code><br><code>insert(p, array, array + 5);</code><br><br>
actually only elements <code>6</code>, <code>7</code>, <code>8</code> and <code>9</code> from the
specified range get inserted and elements <code>1</code> and <code>2</code> are overwritten. This is due
@@ -1631,42 +1854,16 @@ public:
insert(pos, first, last, is_integral<InputIterator>());
}
- //! Insert an element before the specified position.
- /*!
- \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer</code> or its end.
- \post The <code>item</code> will be inserted before the position <code>pos</code>.<br>
- If the <code>circular_buffer</code> is full, the last element will be overwritten. If the
- <code>circular_buffer</code> is full and the <code>pos</code> points to <code>end()</code>, then the
- <code>item</code> will not be inserted. If the capacity is <code>0</code>, nothing will be inserted.
- \param pos An iterator specifying the position before which the <code>item</code> will be inserted.
- \param item The element to be inserted.
- \return Iterator to the inserted element or <code>end()</code> if the <code>item</code> is not inserted. (See
- the <i>Effect</i>.)
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
- \par Exception Safety
- Basic; no-throw if the operations in the <i>Throws</i> section do not throw anything.
- \par Iterator Invalidation
- Invalidates iterators pointing to the elements before the insertion point (towards the beginning and
- excluding <code>pos</code>). It also invalidates iterators pointing to the overwritten element.
- \par Complexity
- Linear (in <code>std::distance(begin(), pos)</code>).
- \sa <code>\link rinsert(iterator, size_type, param_value_type)
- rinsert(iterator, size_type, value_type)\endlink</code>,
- <code>rinsert(iterator, InputIterator, InputIterator)</code>,
- <code>\link insert(iterator, param_value_type) insert(iterator, value_type)\endlink</code>,
- <code>\link insert(iterator, size_type, param_value_type)
- insert(iterator, size_type, value_type)\endlink</code>,
- <code>insert(iterator, InputIterator, InputIterator)</code>
- */
- iterator rinsert(iterator pos, param_value_type item = value_type()) {
+private:
+ template <class ValT>
+ iterator rinsert_impl(iterator pos, ValT item) {
BOOST_CB_ASSERT(pos.is_valid(this)); // check for uninitialized or invalidated iterator
if (full() && pos.m_it == 0)
return end();
if (pos == begin()) {
BOOST_TRY {
decrement(m_first);
- construct_or_replace(!full(), m_first, item);
+ construct_or_replace(!full(), m_first, static_cast<ValT>(item));
} BOOST_CATCH(...) {
increment(m_first);
BOOST_RETHROW
@@ -1681,13 +1878,13 @@ public:
bool construct = !full();
BOOST_TRY {
while (src != pos.m_it) {
- construct_or_replace(construct, dest, *src);
+ construct_or_replace(construct, dest, this_type::move_if_noexcept(*src));
increment(src);
increment(dest);
construct = false;
}
decrement(pos.m_it);
- replace(pos.m_it, item);
+ replace(pos.m_it, static_cast<ValT>(item));
} BOOST_CATCH(...) {
if (!construct && !full()) {
decrement(m_first);
@@ -1705,6 +1902,108 @@ public:
return iterator(this, pos.m_it);
}
+public:
+
+ //! Insert an element before the specified position.
+ /*!
+ \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer</code> or its end.
+ \post The <code>item</code> will be inserted before the position <code>pos</code>.<br>
+ If the <code>circular_buffer</code> is full, the last element will be overwritten. If the
+ <code>circular_buffer</code> is full and the <code>pos</code> points to <code>end()</code>, then the
+ <code>item</code> will not be inserted. If the capacity is <code>0</code>, nothing will be inserted.
+ \param pos An iterator specifying the position before which the <code>item</code> will be inserted.
+ \param item The element to be inserted.
+ \return Iterator to the inserted element or <code>end()</code> if the <code>item</code> is not inserted. (See
+ the <i>Effect</i>.)
+ \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
+ <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
+ \par Exception Safety
+ Basic; no-throw if the operations in the <i>Throws</i> section do not throw anything.
+ \par Iterator Invalidation
+ Invalidates iterators pointing to the elements before the insertion point (towards the beginning and
+ excluding <code>pos</code>). It also invalidates iterators pointing to the overwritten element.
+ \par Complexity
+ Linear (in <code>std::distance(begin(), pos)</code>).
+ \sa <code>\link rinsert(iterator, size_type, param_value_type)
+ rinsert(iterator, size_type, value_type)\endlink</code>,
+ <code>rinsert(iterator, InputIterator, InputIterator)</code>,
+ <code>\link insert(iterator, param_value_type) insert(iterator, value_type)\endlink</code>,
+ <code>\link insert(iterator, size_type, param_value_type)
+ insert(iterator, size_type, value_type)\endlink</code>,
+ <code>insert(iterator, InputIterator, InputIterator)</code>
+ */
+ iterator rinsert(iterator pos, param_value_type item) {
+ return rinsert_impl<param_value_type>(pos, item);
+ }
+
+ //! Insert an element before the specified position.
+ /*!
+ \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer</code> or its end.
+ \post The <code>item</code> will be inserted before the position <code>pos</code>.<br>
+ If the <code>circular_buffer</code> is full, the last element will be overwritten. If the
+ <code>circular_buffer</code> is full and the <code>pos</code> points to <code>end()</code>, then the
+ <code>item</code> will not be inserted. If the capacity is <code>0</code>, nothing will be inserted.
+ \param pos An iterator specifying the position before which the <code>item</code> will be inserted.
+ \param item The element to be inserted.
+ \return Iterator to the inserted element or <code>end()</code> if the <code>item</code> is not inserted. (See
+ the <i>Effect</i>.)
+ \throws Whatever <code>T::T(T&&)</code> throws.
+ Whatever <code>T::operator = (T&&)</code> throws.
+ <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
+ \par Exception Safety
+ Basic; no-throw if the operations in the <i>Throws</i> section do not throw anything.
+ \par Iterator Invalidation
+ Invalidates iterators pointing to the elements before the insertion point (towards the beginning and
+ excluding <code>pos</code>). It also invalidates iterators pointing to the overwritten element.
+ \par Complexity
+ Linear (in <code>std::distance(begin(), pos)</code>).
+ \sa <code>\link rinsert(iterator, size_type, param_value_type)
+ rinsert(iterator, size_type, value_type)\endlink</code>,
+ <code>rinsert(iterator, InputIterator, InputIterator)</code>,
+ <code>\link insert(iterator, param_value_type) insert(iterator, value_type)\endlink</code>,
+ <code>\link insert(iterator, size_type, param_value_type)
+ insert(iterator, size_type, value_type)\endlink</code>,
+ <code>insert(iterator, InputIterator, InputIterator)</code>
+ */
+ iterator rinsert(iterator pos, rvalue_type item) {
+ return rinsert_impl<rvalue_type>(pos, boost::move(item));
+ }
+
+ //! Insert an element before the specified position.
+ /*!
+ \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer</code> or its end.
+ \post The <code>item</code> will be inserted before the position <code>pos</code>.<br>
+ If the <code>circular_buffer</code> is full, the last element will be overwritten. If the
+ <code>circular_buffer</code> is full and the <code>pos</code> points to <code>end()</code>, then the
+ <code>item</code> will not be inserted. If the capacity is <code>0</code>, nothing will be inserted.
+ \param pos An iterator specifying the position before which the <code>item</code> will be inserted.
+ \return Iterator to the inserted element or <code>end()</code> if the <code>item</code> is not inserted. (See
+ the <i>Effect</i>.)
+ \throws Whatever <code>T::T()</code> throws.
+ Whatever <code>T::T(T&&)</code> throws.
+ Whatever <code>T::operator = (T&&)</code> throws.
+ <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
+ \par Exception Safety
+ Basic; no-throw if the operations in the <i>Throws</i> section do not throw anything.
+ \par Iterator Invalidation
+ Invalidates iterators pointing to the elements before the insertion point (towards the beginning and
+ excluding <code>pos</code>). It also invalidates iterators pointing to the overwritten element.
+ \par Complexity
+ Linear (in <code>std::distance(begin(), pos)</code>).
+ \sa <code>\link rinsert(iterator, size_type, param_value_type)
+ rinsert(iterator, size_type, value_type)\endlink</code>,
+ <code>rinsert(iterator, InputIterator, InputIterator)</code>,
+ <code>\link insert(iterator, param_value_type) insert(iterator, value_type)\endlink</code>,
+ <code>\link insert(iterator, size_type, param_value_type)
+ insert(iterator, size_type, value_type)\endlink</code>,
+ <code>insert(iterator, InputIterator, InputIterator)</code>
+ */
+ iterator rinsert(iterator pos) {
+ value_type temp;
+ return rinsert(pos, boost::move(temp));
+ }
+
//! Insert <code>n</code> copies of the <code>item</code> before the specified position.
/*!
\pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer</code> or its end.
@@ -1716,7 +2015,8 @@ public:
\param n The number of <code>item</code>s the to be inserted.
\param item The element whose copies will be inserted.
\throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
+ <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the operations in the <i>Throws</i> section do not throw anything.
\par Iterator Invalidation
@@ -1728,7 +2028,7 @@ public:
Consider a <code>circular_buffer</code> with the capacity of 6 and the size of 4. Its internal buffer may
look like the one below.<br><br>
<code>|1|2|3|4| | |</code><br>
- <code>p ---^</code><br><br>After inserting 5 elements before the position <code>p</code>:<br><br>
+ <code>p ___^</code><br><br>After inserting 5 elements before the position <code>p</code>:<br><br>
<code>rinsert(p, (size_t)5, 0);</code><br><br>actually only 4 elements get inserted and elements
<code>3</code> and <code>4</code> are overwritten. This is due to the fact the rinsert operation preserves
the capacity. After insertion the internal buffer looks like this:<br><br><code>|1|2|0|0|0|0|</code><br>
@@ -1759,8 +2059,10 @@ public:
\param pos An iterator specifying the position where the range will be inserted.
\param first The beginning of the range to be inserted.
\param last The end of the range to be inserted.
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ \throws Whatever <code>T::T(const T&)</code> throws if the <code>InputIterator</code> is not a move iterator.
+ Whatever <code>T::operator = (const T&)</code> throws if the <code>InputIterator</code> is not a move iterator.
+ Whatever <code>T::T(T&&)</code> throws if the <code>InputIterator</code> is a move iterator.
+ Whatever <code>T::operator = (T&&)</code> throws if the <code>InputIterator</code> is a move iterator.
\par Exception Safety
Basic; no-throw if the operations in the <i>Throws</i> section do not throw anything.
\par Iterator Invalidation
@@ -1775,7 +2077,7 @@ public:
Consider a <code>circular_buffer</code> with the capacity of 6 and the size of 4. Its internal buffer may
look like the one below.<br><br>
<code>|1|2|3|4| | |</code><br>
- <code>p ---^</code><br><br>After inserting a range of elements before the position <code>p</code>:<br><br>
+ <code>p ___^</code><br><br>After inserting a range of elements before the position <code>p</code>:<br><br>
<code>int array[] = { 5, 6, 7, 8, 9 };</code><br><code>insert(p, array, array + 5);</code><br><br>
actually only elements <code>5</code>, <code>6</code>, <code>7</code> and <code>8</code> from the
specified range get inserted and elements <code>3</code> and <code>4</code> are overwritten. This is due
@@ -1805,7 +2107,7 @@ public:
\param pos An iterator pointing at the element to be removed.
\return Iterator to the first element remaining beyond the removed element or <code>end()</code> if no such
element exists.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ \throws <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
\par Iterator Invalidation
@@ -1823,7 +2125,7 @@ public:
pointer next = pos.m_it;
increment(next);
for (pointer p = pos.m_it; next != m_last; p = next, increment(next))
- replace(p, *next);
+ replace(p, this_type::move_if_noexcept(*next));
decrement(m_last);
destroy_item(m_last);
--m_size;
@@ -1843,7 +2145,7 @@ public:
\param last The end of the range to be removed.
\return Iterator to the first element remaining beyond the removed elements or <code>end()</code> if no such
element exists.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ \throws <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
\par Iterator Invalidation
@@ -1862,7 +2164,7 @@ public:
return first;
pointer p = first.m_it;
while (last.m_it != 0)
- replace((first++).m_it, *last++);
+ replace((first++).m_it, this_type::move_if_noexcept(*last++));
do {
decrement(m_last);
destroy_item(m_last);
@@ -1879,7 +2181,7 @@ public:
\param pos An iterator pointing at the element to be removed.
\return Iterator to the first element remaining in front of the removed element or <code>begin()</code> if no
such element exists.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ \throws <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
\par Iterator Invalidation
@@ -1900,7 +2202,7 @@ public:
pointer prev = pos.m_it;
pointer p = prev;
for (decrement(prev); p != m_first; p = prev, decrement(prev))
- replace(p, *prev);
+ replace(p, this_type::move_if_noexcept(*prev));
destroy_item(m_first);
increment(m_first);
--m_size;
@@ -1920,7 +2222,7 @@ public:
\param last The end of the range to be removed.
\return Iterator to the first element remaining in front of the removed elements or <code>begin()</code> if no
such element exists.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ \throws <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
\par Iterator Invalidation
@@ -1945,7 +2247,7 @@ public:
while (first.m_it != m_first) {
decrement(first.m_it);
decrement(p);
- replace(p, *first.m_it);
+ replace(p, this_type::move_if_noexcept(*first.m_it));
}
do {
destroy_item(m_first);
@@ -1963,7 +2265,7 @@ public:
\pre <code>n \<= size()</code>
\post The <code>n</code> elements at the beginning of the <code>circular_buffer</code> will be removed.
\param n The number of elements to be removed.
- \throws Whatever <code>T::operator = (const T&)</code> throws. (Does not throw anything in case of scalars.)
+ \throws <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything. (I.e. no throw in
case of scalars.)
@@ -1995,7 +2297,7 @@ public:
\pre <code>n \<= size()</code>
\post The <code>n</code> elements at the end of the <code>circular_buffer</code> will be removed.
\param n The number of elements to be removed.
- \throws Whatever <code>T::operator = (const T&)</code> throws. (Does not throw anything in case of scalars.)
+ \throws <a href="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&)</a>.
\par Exception Safety
Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything. (I.e. no throw in
case of scalars.)
@@ -2037,7 +2339,7 @@ public:
<code>rerase(iterator)</code>, <code>rerase(iterator, iterator)</code>,
<code>erase_begin(size_type)</code>, <code>erase_end(size_type)</code>
*/
- void clear() {
+ void clear() BOOST_NOEXCEPT {
destroy_content();
m_size = 0;
}
@@ -2086,11 +2388,11 @@ private:
if (n > max_size())
throw_exception(std::length_error("circular_buffer"));
#if BOOST_CB_ENABLE_DEBUG
- pointer p = (n == 0) ? 0 : m_alloc.allocate(n, 0);
- std::memset(p, cb_details::UNINITIALIZED, sizeof(value_type) * n);
+ pointer p = (n == 0) ? 0 : m_alloc.allocate(n);
+ cb_details::do_fill_uninitialized_memory(p, sizeof(value_type) * n);
return p;
#else
- return (n == 0) ? 0 : m_alloc.allocate(n, 0);
+ return (n == 0) ? 0 : m_alloc.allocate(n);
#endif
}
@@ -2101,7 +2403,7 @@ private:
}
//! Does the pointer point to the uninitialized memory?
- bool is_uninitialized(const_pointer p) const {
+ bool is_uninitialized(const_pointer p) const BOOST_NOEXCEPT {
return p >= m_last && (m_first < m_last || p < m_first);
}
@@ -2113,6 +2415,14 @@ private:
#endif
}
+ //! Replace an element.
+ void replace(pointer pos, rvalue_type item) {
+ *pos = boost::move(item);
+#if BOOST_CB_ENABLE_DEBUG
+ invalidate_iterators(iterator(this, pos));
+#endif
+ }
+
//! Construct or replace an element.
/*!
<code>construct</code> has to be set to <code>true</code> if and only if
@@ -2120,17 +2430,29 @@ private:
*/
void construct_or_replace(bool construct, pointer pos, param_value_type item) {
if (construct)
- m_alloc.construct(pos, item);
+ boost::container::allocator_traits<Alloc>::construct(m_alloc, boost::addressof(*pos), item);
else
replace(pos, item);
}
+ //! Construct or replace an element.
+ /*!
+ <code>construct</code> has to be set to <code>true</code> if and only if
+ <code>pos</code> points to an uninitialized memory.
+ */
+ void construct_or_replace(bool construct, pointer pos, rvalue_type item) {
+ if (construct)
+ boost::container::allocator_traits<Alloc>::construct(m_alloc, boost::addressof(*pos), boost::move(item));
+ else
+ replace(pos, boost::move(item));
+ }
+
//! Destroy an item.
void destroy_item(pointer p) {
- m_alloc.destroy(p);
+ boost::container::allocator_traits<Alloc>::destroy(m_alloc, boost::addressof(*p));
#if BOOST_CB_ENABLE_DEBUG
invalidate_iterators(iterator(this, p));
- std::memset(p, cb_details::UNINITIALIZED, sizeof(value_type));
+ cb_details::do_fill_uninitialized_memory(p, sizeof(value_type));
#endif
}
@@ -2161,7 +2483,7 @@ private:
}
//! Destroy content and free allocated memory.
- void destroy() {
+ void destroy() BOOST_NOEXCEPT {
destroy_content();
deallocate(m_buff, capacity());
#if BOOST_CB_ENABLE_DEBUG
@@ -2203,9 +2525,9 @@ private:
void initialize(Iterator first, Iterator last, const false_type&) {
BOOST_CB_IS_CONVERTIBLE(Iterator, value_type); // check for invalid iterator type
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
- initialize(first, last, BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ initialize(first, last, iterator_category<Iterator>::type());
#else
- initialize(first, last, BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ initialize(first, last, BOOST_DEDUCED_TYPENAME iterator_category<Iterator>::type());
#endif
}
@@ -2216,7 +2538,7 @@ private:
// for containers
std::deque<value_type, allocator_type> tmp(first, last, m_alloc);
size_type distance = tmp.size();
- initialize(distance, tmp.begin(), tmp.end(), distance);
+ initialize(distance, boost::make_move_iterator(tmp.begin()), boost::make_move_iterator(tmp.end()), distance);
}
//! Specialized initialize method.
@@ -2242,9 +2564,9 @@ private:
void initialize(capacity_type buffer_capacity, Iterator first, Iterator last, const false_type&) {
BOOST_CB_IS_CONVERTIBLE(Iterator, value_type); // check for invalid iterator type
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
- initialize(buffer_capacity, first, last, BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ initialize(buffer_capacity, first, last, iterator_category<Iterator>::type());
#else
- initialize(buffer_capacity, first, last, BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ initialize(buffer_capacity, first, last, BOOST_DEDUCED_TYPENAME iterator_category<Iterator>::type());
#endif
}
@@ -2260,7 +2582,7 @@ private:
if (buffer_capacity == 0)
return;
while (first != last && !full()) {
- m_alloc.construct(m_last, *first++);
+ boost::container::allocator_traits<Alloc>::construct(m_alloc, boost::addressof(*m_last), *first++);
increment(m_last);
++m_size;
}
@@ -2296,7 +2618,7 @@ private:
m_size = distance;
}
BOOST_TRY {
- m_last = cb_details::uninitialized_copy_with_alloc(first, last, m_buff, m_alloc);
+ m_last = cb_details::uninitialized_copy(first, last, m_buff, m_alloc);
} BOOST_CATCH(...) {
deallocate(m_buff, buffer_capacity);
BOOST_RETHROW
@@ -2336,9 +2658,9 @@ private:
void assign(Iterator first, Iterator last, const false_type&) {
BOOST_CB_IS_CONVERTIBLE(Iterator, value_type); // check for invalid iterator type
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
- assign(first, last, BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ assign(first, last, iterator_category<Iterator>::type());
#else
- assign(first, last, BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ assign(first, last, BOOST_DEDUCED_TYPENAME iterator_category<Iterator>::type());
#endif
}
@@ -2350,8 +2672,8 @@ private:
std::deque<value_type, allocator_type> tmp(first, last, m_alloc);
size_type distance = tmp.size();
assign_n(distance, distance,
- cb_details::assign_range<BOOST_DEDUCED_TYPENAME std::deque<value_type, allocator_type>::iterator,
- allocator_type>(tmp.begin(), tmp.end(), m_alloc));
+ cb_details::make_assign_range
+ (boost::make_move_iterator(tmp.begin()), boost::make_move_iterator(tmp.end()), m_alloc));
}
//! Specialized assign method.
@@ -2359,7 +2681,7 @@ private:
void assign(ForwardIterator first, ForwardIterator last, const std::forward_iterator_tag&) {
BOOST_CB_ASSERT(std::distance(first, last) >= 0); // check for wrong range
size_type distance = std::distance(first, last);
- assign_n(distance, distance, cb_details::assign_range<ForwardIterator, allocator_type>(first, last, m_alloc));
+ assign_n(distance, distance, cb_details::make_assign_range(first, last, m_alloc));
}
//! Specialized assign method.
@@ -2373,9 +2695,9 @@ private:
void assign(capacity_type new_capacity, Iterator first, Iterator last, const false_type&) {
BOOST_CB_IS_CONVERTIBLE(Iterator, value_type); // check for invalid iterator type
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
- assign(new_capacity, first, last, BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ assign(new_capacity, first, last, iterator_category<Iterator>::type());
#else
- assign(new_capacity, first, last, BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ assign(new_capacity, first, last, BOOST_DEDUCED_TYPENAME iterator_category<Iterator>::type());
#endif
}
@@ -2386,12 +2708,7 @@ private:
clear();
insert(begin(), first, last);
} else {
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- circular_buffer<value_type, allocator_type> tmp(new_capacity, m_alloc);
- tmp.insert(begin(), first, last);
-#else
circular_buffer<value_type, allocator_type> tmp(new_capacity, first, last, m_alloc);
-#endif
tmp.swap(*this);
}
}
@@ -2407,7 +2724,7 @@ private:
distance = new_capacity;
}
assign_n(new_capacity, distance,
- cb_details::assign_range<ForwardIterator, allocator_type>(first, last, m_alloc));
+ cb_details::make_assign_range(first, last, m_alloc));
}
//! Helper assign method.
@@ -2441,10 +2758,11 @@ private:
}
//! Helper insert method.
- iterator insert_item(const iterator& pos, param_value_type item) {
+ template <class ValT>
+ iterator insert_item(const iterator& pos, ValT item) {
pointer p = pos.m_it;
if (p == 0) {
- construct_or_replace(!full(), m_last, item);
+ construct_or_replace(!full(), m_last, static_cast<ValT>(item));
p = m_last;
} else {
pointer src = m_last;
@@ -2453,11 +2771,11 @@ private:
BOOST_TRY {
while (src != p) {
decrement(src);
- construct_or_replace(construct, dest, *src);
+ construct_or_replace(construct, dest, this_type::move_if_noexcept(*src));
decrement(dest);
construct = false;
}
- replace(p, item);
+ replace(p, static_cast<ValT>(item));
} BOOST_CATCH(...) {
if (!construct && !full()) {
increment(m_last);
@@ -2486,9 +2804,9 @@ private:
void insert(const iterator& pos, Iterator first, Iterator last, const false_type&) {
BOOST_CB_IS_CONVERTIBLE(Iterator, value_type); // check for invalid iterator type
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
- insert(pos, first, last, BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ insert(pos, first, last, iterator_category<Iterator>::type());
#else
- insert(pos, first, last, BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ insert(pos, first, last, BOOST_DEDUCED_TYPENAME iterator_category<Iterator>::type());
#endif
}
@@ -2497,7 +2815,7 @@ private:
void insert(iterator pos, InputIterator first, InputIterator last, const std::input_iterator_tag&) {
if (!full() || pos != begin()) {
for (;first != last; ++pos)
- pos = insert_item(pos, *first++);
+ pos = insert(pos, *first++);
}
}
@@ -2529,7 +2847,7 @@ private:
pointer p = m_last;
BOOST_TRY {
for (; ii < construct; ++ii, increment(p))
- m_alloc.construct(p, *wrapper());
+ boost::container::allocator_traits<Alloc>::construct(m_alloc, boost::addressof(*p), *wrapper());
for (;ii < n; ++ii, increment(p))
replace(p, *wrapper());
} BOOST_CATCH(...) {
@@ -2577,9 +2895,9 @@ private:
void rinsert(const iterator& pos, Iterator first, Iterator last, const false_type&) {
BOOST_CB_IS_CONVERTIBLE(Iterator, value_type); // check for invalid iterator type
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
- rinsert(pos, first, last, BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ rinsert(pos, first, last, iterator_category<Iterator>::type());
#else
- rinsert(pos, first, last, BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ rinsert(pos, first, last, BOOST_DEDUCED_TYPENAME iterator_category<Iterator>::type());
#endif
}
@@ -2623,7 +2941,7 @@ private:
for (;ii > construct; --ii, increment(p))
replace(p, *wrapper());
for (; ii > 0; --ii, increment(p))
- m_alloc.construct(p, *wrapper());
+ boost::container::allocator_traits<Alloc>::construct(m_alloc, boost::addressof(*p), *wrapper());
} BOOST_CATCH(...) {
size_type constructed = ii < construct ? construct - ii : 0;
m_last = add(m_last, constructed);
@@ -2810,7 +3128,7 @@ inline bool operator >= (const circular_buffer<T, Alloc>& lhs, const circular_bu
\sa <code>\link circular_buffer::swap(circular_buffer<T, Alloc>&) swap(circular_buffer<T, Alloc>&)\endlink</code>
*/
template <class T, class Alloc>
-inline void swap(circular_buffer<T, Alloc>& lhs, circular_buffer<T, Alloc>& rhs) {
+inline void swap(circular_buffer<T, Alloc>& lhs, circular_buffer<T, Alloc>& rhs) BOOST_NOEXCEPT {
lhs.swap(rhs);
}
diff --git a/3party/boost/boost/circular_buffer/debug.hpp b/3party/boost/boost/circular_buffer/debug.hpp
index 6eb4515856..b6ab0fefbe 100644
--- a/3party/boost/boost/circular_buffer/debug.hpp
+++ b/3party/boost/boost/circular_buffer/debug.hpp
@@ -9,10 +9,20 @@
#if !defined(BOOST_CIRCULAR_BUFFER_DEBUG_HPP)
#define BOOST_CIRCULAR_BUFFER_DEBUG_HPP
-#if defined(_MSC_VER) && _MSC_VER >= 1200
+#if defined(_MSC_VER)
#pragma once
#endif
+#if BOOST_CB_ENABLE_DEBUG
+#include <cstring>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std {
+ using ::memset;
+}
+#endif
+
+#endif // BOOST_CB_ENABLE_DEBUG
namespace boost {
namespace cb_details {
@@ -22,6 +32,17 @@ namespace cb_details {
// The value the uninitialized memory is filled with.
const int UNINITIALIZED = 0xcc;
+template <class T>
+inline void do_fill_uninitialized_memory(T* data, std::size_t size_in_bytes) BOOST_NOEXCEPT {
+ std::memset(static_cast<void*>(data), UNINITIALIZED, size_in_bytes);
+}
+
+template <class T>
+inline void do_fill_uninitialized_memory(T& /*data*/, std::size_t /*size_in_bytes*/) BOOST_NOEXCEPT {
+ // Do nothing
+}
+
+
class debug_iterator_registry;
/*!
diff --git a/3party/boost/boost/circular_buffer/details.hpp b/3party/boost/boost/circular_buffer/details.hpp
index da25ff07ed..44ca9c9689 100644
--- a/3party/boost/boost/circular_buffer/details.hpp
+++ b/3party/boost/boost/circular_buffer/details.hpp
@@ -1,6 +1,7 @@
// Helper classes and functions for the circular buffer.
// Copyright (c) 2003-2008 Jan Gaspar
+// Copyright (c) 2014 Glen Fernandes // C++11 allocator model support.
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,15 +10,27 @@
#if !defined(BOOST_CIRCULAR_BUFFER_DETAILS_HPP)
#define BOOST_CIRCULAR_BUFFER_DETAILS_HPP
-#if defined(_MSC_VER) && _MSC_VER >= 1200
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/iterator.hpp>
#include <boost/throw_exception.hpp>
+#include <boost/container/allocator_traits.hpp>
+#include <boost/move/move.hpp>
+#include <boost/type_traits/is_nothrow_move_constructible.hpp>
+#include <boost/utility/addressof.hpp>
#include <boost/detail/no_exceptions_support.hpp>
#include <iterator>
+// Silence MS /W4 warnings like C4913:
+// "user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used"
+// This might happen when previously including some boost headers that overload the coma operator.
+#if defined(_MSC_VER)
+# pragma warning(push)
+# pragma warning(disable:4913)
+#endif
+
namespace boost {
namespace cb_details {
@@ -29,8 +42,10 @@ void uninitialized_fill_n_with_alloc(
ForwardIterator first, Diff n, const T& item, Alloc& alloc);
template<class InputIterator, class ForwardIterator, class Alloc>
-ForwardIterator uninitialized_copy_with_alloc(
- InputIterator first, InputIterator last, ForwardIterator dest, Alloc& alloc);
+ForwardIterator uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator dest, Alloc& a);
+
+template<class InputIterator, class ForwardIterator, class Alloc>
+ForwardIterator uninitialized_move_if_noexcept(InputIterator first, InputIterator last, ForwardIterator dest, Alloc& a);
/*!
\struct const_traits
@@ -98,7 +113,7 @@ private:
*/
template <class Value, class Alloc>
struct assign_n {
- typedef typename Alloc::size_type size_type;
+ typedef typename boost::container::allocator_traits<Alloc>::size_type size_type;
size_type m_n;
Value m_item;
Alloc& m_alloc;
@@ -117,19 +132,24 @@ private:
*/
template <class Iterator, class Alloc>
struct assign_range {
- const Iterator& m_first;
- const Iterator& m_last;
- Alloc& m_alloc;
+ Iterator m_first;
+ Iterator m_last;
+ Alloc& m_alloc;
+
assign_range(const Iterator& first, const Iterator& last, Alloc& alloc)
- : m_first(first), m_last(last), m_alloc(alloc) {}
+ : m_first(first), m_last(last), m_alloc(alloc) {}
+
template <class Pointer>
void operator () (Pointer p) const {
- uninitialized_copy_with_alloc(m_first, m_last, p, m_alloc);
+ boost::cb_details::uninitialized_copy(m_first, m_last, p, m_alloc);
}
-private:
- assign_range<Iterator, Alloc>& operator = (const assign_range<Iterator, Alloc>&); // do not generate
};
+template <class Iterator, class Alloc>
+inline assign_range<Iterator, Alloc> make_assign_range(const Iterator& first, const Iterator& last, Alloc& a) {
+ return assign_range<Iterator, Alloc>(first, last, a);
+}
+
/*!
\class capacity_control
\brief Capacity controller of the space optimized circular buffer.
@@ -137,18 +157,19 @@ private:
template <class Size>
class capacity_control {
- //! The capacity of the space optimized circular buffer.
+ //! The capacity of the space-optimized circular buffer.
Size m_capacity;
- //! The lowest guaranteed capacity of the adapted circular buffer.
+ //! The lowest guaranteed or minimum capacity of the adapted space-optimized circular buffer.
Size m_min_capacity;
public:
//! Constructor.
capacity_control(Size buffer_capacity, Size min_buffer_capacity = 0)
- : m_capacity(buffer_capacity), m_min_capacity(min_buffer_capacity) {
- BOOST_CB_ASSERT(buffer_capacity >= min_buffer_capacity); // check for capacity lower than min_capacity
+ : m_capacity(buffer_capacity), m_min_capacity(min_buffer_capacity)
+ { // Check for capacity lower than min_capacity.
+ BOOST_CB_ASSERT(buffer_capacity >= min_buffer_capacity);
}
// Default copy constructor.
@@ -406,45 +427,49 @@ operator + (typename Traits::difference_type n, const iterator<Buff, Traits>& it
return it + n;
}
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR)
-
-//! Iterator category.
-template <class Buff, class Traits>
-inline std::random_access_iterator_tag iterator_category(const iterator<Buff, Traits>&) {
- return std::random_access_iterator_tag();
-}
-
-//! The type of the elements stored in the circular buffer.
-template <class Buff, class Traits>
-inline typename Traits::value_type* value_type(const iterator<Buff, Traits>&) { return 0; }
-
-//! Distance type.
-template <class Buff, class Traits>
-inline typename Traits::difference_type* distance_type(const iterator<Buff, Traits>&) { return 0; }
-
-#endif // #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR)
-
/*!
- \fn ForwardIterator uninitialized_copy_with_alloc(InputIterator first, InputIterator last, ForwardIterator dest,
- Alloc& alloc)
- \brief Equivalent of <code>std::uninitialized_copy</code> with allocator.
+ \fn ForwardIterator uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator dest)
+ \brief Equivalent of <code>std::uninitialized_copy</code> but with explicit specification of value type.
*/
template<class InputIterator, class ForwardIterator, class Alloc>
-inline ForwardIterator uninitialized_copy_with_alloc(InputIterator first, InputIterator last, ForwardIterator dest,
- Alloc& alloc) {
+inline ForwardIterator uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator dest, Alloc& a) {
ForwardIterator next = dest;
BOOST_TRY {
for (; first != last; ++first, ++dest)
- alloc.construct(dest, *first);
+ boost::container::allocator_traits<Alloc>::construct(a, boost::addressof(*dest), *first);
} BOOST_CATCH(...) {
for (; next != dest; ++next)
- alloc.destroy(next);
+ boost::container::allocator_traits<Alloc>::destroy(a, boost::addressof(*next));
BOOST_RETHROW
}
BOOST_CATCH_END
return dest;
}
+template<class InputIterator, class ForwardIterator, class Alloc>
+ForwardIterator uninitialized_move_if_noexcept_impl(InputIterator first, InputIterator last, ForwardIterator dest, Alloc& a,
+ true_type) {
+ for (; first != last; ++first, ++dest)
+ boost::container::allocator_traits<Alloc>::construct(a, boost::addressof(*dest), boost::move(*first));
+ return dest;
+}
+
+template<class InputIterator, class ForwardIterator, class Alloc>
+ForwardIterator uninitialized_move_if_noexcept_impl(InputIterator first, InputIterator last, ForwardIterator dest, Alloc& a,
+ false_type) {
+ return uninitialized_copy(first, last, dest, a);
+}
+
+/*!
+ \fn ForwardIterator uninitialized_move_if_noexcept(InputIterator first, InputIterator last, ForwardIterator dest)
+ \brief Equivalent of <code>std::uninitialized_copy</code> but with explicit specification of value type and moves elements if they have noexcept move constructors.
+*/
+template<class InputIterator, class ForwardIterator, class Alloc>
+ForwardIterator uninitialized_move_if_noexcept(InputIterator first, InputIterator last, ForwardIterator dest, Alloc& a) {
+ typedef typename boost::is_nothrow_move_constructible<typename boost::container::allocator_traits<Alloc>::value_type>::type tag_t;
+ return uninitialized_move_if_noexcept_impl(first, last, dest, a, tag_t());
+}
+
/*!
\fn void uninitialized_fill_n_with_alloc(ForwardIterator first, Diff n, const T& item, Alloc& alloc)
\brief Equivalent of <code>std::uninitialized_fill_n</code> with allocator.
@@ -454,10 +479,10 @@ inline void uninitialized_fill_n_with_alloc(ForwardIterator first, Diff n, const
ForwardIterator next = first;
BOOST_TRY {
for (; n > 0; ++first, --n)
- alloc.construct(first, item);
+ boost::container::allocator_traits<Alloc>::construct(alloc, boost::addressof(*first), item);
} BOOST_CATCH(...) {
for (; next != first; ++next)
- alloc.destroy(next);
+ boost::container::allocator_traits<Alloc>::destroy(alloc, boost::addressof(*next));
BOOST_RETHROW
}
BOOST_CATCH_END
@@ -467,4 +492,8 @@ inline void uninitialized_fill_n_with_alloc(ForwardIterator first, Diff n, const
} // namespace boost
+#if defined(_MSC_VER)
+# pragma warning(pop)
+#endif
+
#endif // #if !defined(BOOST_CIRCULAR_BUFFER_DETAILS_HPP)
diff --git a/3party/boost/boost/circular_buffer/space_optimized.hpp b/3party/boost/boost/circular_buffer/space_optimized.hpp
index 5350676ca9..688ab95796 100644
--- a/3party/boost/boost/circular_buffer/space_optimized.hpp
+++ b/3party/boost/boost/circular_buffer/space_optimized.hpp
@@ -1,6 +1,8 @@
// Implementation of the circular buffer adaptor.
// Copyright (c) 2003-2008 Jan Gaspar
+// Copyright (c) 2013 Paul A. Bristow // Doxygen comments changed for new version of documentation.
+// Copyright (c) 2013 Antony Polukhin // Move semantics implementation.
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,7 +11,7 @@
#if !defined(BOOST_CIRCULAR_BUFFER_SPACE_OPTIMIZED_HPP)
#define BOOST_CIRCULAR_BUFFER_SPACE_OPTIMIZED_HPP
-#if defined(_MSC_VER) && _MSC_VER >= 1200
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -20,10 +22,9 @@ namespace boost {
/*!
\class circular_buffer_space_optimized
- \brief Space optimized circular buffer container adaptor.
-
- For detailed documentation of the space_optimized_circular_buffer visit:
- http://www.boost.org/libs/circular_buffer/doc/space_optimized.html
+ \brief Space optimized circular buffer container adaptor.
+ <code>T</code> must be a copyable class or must have an noexcept move constructor
+ and move assignment operator.
*/
template <class T, class Alloc>
class circular_buffer_space_optimized :
@@ -51,29 +52,53 @@ public:
typedef typename circular_buffer<T, Alloc>::array_range array_range;
typedef typename circular_buffer<T, Alloc>::const_array_range const_array_range;
typedef typename circular_buffer<T, Alloc>::param_value_type param_value_type;
- typedef typename circular_buffer<T, Alloc>::return_value_type return_value_type;
+ typedef typename circular_buffer<T, Alloc>::rvalue_type rvalue_type;
+ //typedef typename circular_buffer<T, Alloc>::return_value_type return_value_type;
- //! Capacity controller of the space optimized circular buffer.
- /*!
- <p><pre>
-class capacity_control {
- size_type m_capacity;
- size_type m_min_capacity;
-public:
- capacity_control(size_type capacity, size_type min_capacity = 0) : m_capacity(capacity), m_min_capacity(min_capacity) {};
- size_type %capacity() const { return m_capacity; }
- size_type min_capacity() const { return m_min_capacity; }
- operator size_type() const { return m_capacity; }
-};</pre></p>
- \pre <code>capacity >= min_capacity</code>
- <p>The <code>capacity()</code> represents the capacity of the <code>circular_buffer_space_optimized</code> and
- the <code>min_capacity()</code> determines the minimal allocated size of its internal buffer.</p>
- <p>The converting constructor of the <code>capacity_control</code> allows implicit conversion from
- <code>size_type</code>-like types which ensures compatibility of creating an instance of the
- <code>circular_buffer_space_optimized</code> with other STL containers. On the other hand the operator
- <code>%size_type()</code> provides implicit conversion to the <code>size_type</code> which allows to treat the
- capacity of the <code>circular_buffer_space_optimized</code> the same way as in the
- <code><a href="circular_buffer.html">circular_buffer</a></code>.</p>
+/* <pre> is not passed through to html or pdf. So <br> is used in code section below. Ugly :-(
+Ideally want a link to capacity_control, but this would require include details
+and this would expose all the functions in details.
+There must be a better way of doing this.
+*/
+
+ /*! Capacity controller of the space optimized circular buffer.
+
+ \see capacity_control in details.hpp.
+<p>
+<code>
+class capacity_control<br>
+{<br>
+ size_type m_capacity; // Available capacity.<br>
+ size_type m_min_capacity; // Minimum capacity.<br>
+public:<br>
+ capacity_control(size_type capacity, size_type min_capacity = 0)<br>
+ : m_capacity(capacity), m_min_capacity(min_capacity)<br>
+ {};<br>
+ size_type %capacity() const { return m_capacity; }<br>
+ size_type min_capacity() const { return m_min_capacity; }<br>
+ operator size_type() const { return m_capacity; }<br>
+};<br>
+</code>
+</p>
+
+
+ <p>Always
+ <code>capacity >= min_capacity</code>.
+ </p>
+ <p>
+ The <code>capacity()</code> represents the capacity
+ of the <code>circular_buffer_space_optimized</code> and
+ the <code>min_capacity()</code> determines the minimal allocated size of its internal buffer.
+ </p>
+ <p>The converting constructor of the <code>capacity_control</code> allows implicit conversion from
+ <code>size_type</code>-like types which ensures compatibility of creating an instance of the
+ <code>circular_buffer_space_optimized</code> with other STL containers.
+
+ On the other hand the operator <code>%size_type()</code>
+ provides implicit conversion to the <code>size_type</code> which allows to treat the
+ capacity of the <code>circular_buffer_space_optimized</code> the same way as in the
+ <code>circular_buffer</a></code>.
+</p>
*/
typedef cb_details::capacity_control<size_type> capacity_type;
@@ -98,7 +123,7 @@ public:
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
reference operator [] (size_type n) { return circular_buffer<T, Alloc>::operator[](n); }
- return_value_type operator [] (size_type n) const { return circular_buffer<T, Alloc>::operator[](n); }
+ const_reference operator [] (size_type n) const { return circular_buffer<T, Alloc>::operator[](n); }
#else
using circular_buffer<T, Alloc>::operator[];
#endif
@@ -125,7 +150,7 @@ public:
Constant (in the size of the <code>circular_buffer_space_optimized</code>).
\sa <code>empty()</code>
*/
- bool full() const { return m_capacity_ctrl == size(); }
+ bool full() const BOOST_NOEXCEPT { return m_capacity_ctrl == size(); }
/*! \brief Get the maximum number of elements which can be inserted into the
<code>circular_buffer_space_optimized</code> without overwriting any of already stored elements.
@@ -139,7 +164,7 @@ public:
Constant (in the size of the <code>circular_buffer_space_optimized</code>).
\sa <code>capacity()</code>, <code>size()</code>, <code>max_size()</code>
*/
- size_type reserve() const { return m_capacity_ctrl - size(); }
+ size_type reserve() const BOOST_NOEXCEPT { return m_capacity_ctrl - size(); }
//! Get the capacity of the <code>circular_buffer_space_optimized</code>.
/*!
@@ -155,7 +180,7 @@ public:
\sa <code>reserve()</code>, <code>size()</code>, <code>max_size()</code>,
<code>set_capacity(const capacity_type&)</code>
*/
- const capacity_type& capacity() const { return m_capacity_ctrl; }
+ const capacity_type& capacity() const BOOST_NOEXCEPT { return m_capacity_ctrl; }
#if defined(BOOST_CB_TEST)
@@ -164,7 +189,7 @@ public:
\note This method is not intended to be used directly by the user.
It is defined only for testing purposes.
*/
- size_type internal_capacity() const { return circular_buffer<T, Alloc>::capacity(); }
+ size_type internal_capacity() const BOOST_NOEXCEPT { return circular_buffer<T, Alloc>::capacity(); }
#endif // #if defined(BOOST_CB_TEST)
@@ -178,9 +203,9 @@ public:
than the new capacity then the amount of allocated memory in the internal buffer may be accommodated as
necessary but it will never drop below <code>capacity_ctrl.min_capacity()</code>.
\param capacity_ctrl The new capacity controller.
- \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ \throws "An allocation error" if memory is exhausted, (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
\par Exception Safety
Strong.
\par Iterator Invalidation
@@ -222,7 +247,7 @@ public:
the requested size. (See the <i>Effect</i>.)
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -257,7 +282,7 @@ public:
\param capacity_ctrl The new capacity controller.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
\par Exception Safety
Strong.
\par Iterator Invalidation
@@ -293,7 +318,7 @@ public:
the requested size. (See the <i>Effect</i>.)
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -324,7 +349,7 @@ public:
\warning Since Boost version 1.36 the behaviour of this constructor has changed. Now it creates a space
optimized circular buffer with zero capacity.
*/
- explicit circular_buffer_space_optimized(const allocator_type& alloc = allocator_type())
+ explicit circular_buffer_space_optimized(const allocator_type& alloc = allocator_type()) BOOST_NOEXCEPT
: circular_buffer<T, Alloc>(0, alloc)
, m_capacity_ctrl(0) {}
@@ -382,7 +407,7 @@ public:
\param alloc The allocator.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Complexity
Linear (in the <code>n</code>).
*/
@@ -391,31 +416,6 @@ public:
: circular_buffer<T, Alloc>(init_capacity(capacity_ctrl, n), n, item, alloc)
, m_capacity_ctrl(capacity_ctrl) {}
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
- /*! \cond */
- circular_buffer_space_optimized(const circular_buffer_space_optimized<T, Alloc>& cb)
- : circular_buffer<T, Alloc>(cb.begin(), cb.end())
- , m_capacity_ctrl(cb.m_capacity_ctrl) {}
-
- template <class InputIterator>
- circular_buffer_space_optimized(InputIterator first, InputIterator last)
- : circular_buffer<T, Alloc>(first, last)
- , m_capacity_ctrl(circular_buffer<T, Alloc>::capacity()) {}
-
- template <class InputIterator>
- circular_buffer_space_optimized(capacity_type capacity_ctrl, InputIterator first, InputIterator last)
- : circular_buffer<T, Alloc>(
- init_capacity(capacity_ctrl, first, last, is_integral<InputIterator>()),
- first, last)
- , m_capacity_ctrl(capacity_ctrl) {
- reduce_capacity(
- is_same< BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY<InputIterator>::type, std::input_iterator_tag >());
- }
- /*! \endcond */
-
-#else
-
//! The copy constructor.
/*!
Creates a copy of the specified <code>circular_buffer_space_optimized</code>.
@@ -424,7 +424,7 @@ public:
\param cb The <code>circular_buffer_space_optimized</code> to be copied.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Complexity
Linear (in the size of <code>cb</code>).
*/
@@ -432,6 +432,23 @@ public:
: circular_buffer<T, Alloc>(cb.begin(), cb.end(), cb.get_allocator())
, m_capacity_ctrl(cb.m_capacity_ctrl) {}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ //! The move constructor.
+ /*! \brief Move constructs a <code>circular_buffer_space_optimized</code> from <code>cb</code>,
+ leaving <code>cb</code> empty.
+ \pre C++ compiler with rvalue references support.
+ \post <code>cb.empty()</code>
+ \param cb <code>circular_buffer</code> to 'steal' value from.
+ \throws Nothing.
+ \par Constant.
+ */
+ circular_buffer_space_optimized(circular_buffer_space_optimized<T, Alloc>&& cb) BOOST_NOEXCEPT
+ : circular_buffer<T, Alloc>()
+ , m_capacity_ctrl(0) {
+ cb.swap(*this);
+ }
+#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
+
//! Create a full space optimized circular buffer filled with a copy of the range.
/*!
\pre Valid range <code>[first, last)</code>.<br>
@@ -446,7 +463,8 @@ public:
\param alloc The allocator.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept
+ and <code>InputIterator</code> is a move iterator.
\par Complexity
Linear (in the <code>std::distance(first, last)</code>).
*/
@@ -477,7 +495,7 @@ public:
\param alloc The allocator.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Complexity
Linear (in <code>std::distance(first, last)</code>; in
<code>min[capacity_ctrl.%capacity(), std::distance(first, last)]</code> if the <code>InputIterator</code>
@@ -491,11 +509,9 @@ public:
first, last, alloc)
, m_capacity_ctrl(capacity_ctrl) {
reduce_capacity(
- is_same< BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY<InputIterator>::type, std::input_iterator_tag >());
+ is_same< BOOST_DEDUCED_TYPENAME iterator_category<InputIterator>::type, std::input_iterator_tag >());
}
-#endif // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
#if defined(BOOST_CB_NEVER_DEFINED)
// This section will never be compiled - the default destructor will be generated instead.
// Declared only for documentation purpose.
@@ -552,6 +568,24 @@ public:
return *this;
}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ /*! \brief Move assigns content of <code>cb</code> to <code>*this</code>, leaving <code>cb</code> empty.
+ \pre C++ compiler with rvalue references support.
+ \post <code>cb.empty()</code>
+ \param cb <code>circular_buffer</code> to 'steal' value from.
+ \throws Nothing.
+ \par Complexity
+ Constant.
+ */
+ circular_buffer_space_optimized<T, Alloc>& operator = (circular_buffer_space_optimized<T, Alloc>&& cb) BOOST_NOEXCEPT {
+ cb.swap(*this); // now `this` holds `cb`
+ circular_buffer<T, Alloc>(get_allocator()) // temprary that holds initial `cb` allocator
+ .swap(cb); // makes `cb` empty
+ return *this;
+ }
+#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
+
+
//! Assign <code>n</code> items into the space optimized circular buffer.
/*!
The content of the <code>circular_buffer_space_optimized</code> will be removed and replaced with
@@ -563,7 +597,7 @@ public:
\param item The element the <code>circular_buffer_space_optimized</code> will be filled with.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -596,7 +630,7 @@ public:
\param item The element the <code>circular_buffer_space_optimized</code> will be filled with.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -630,7 +664,8 @@ public:
\param last The end of the range to be copied.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept and
+ <code>InputIterator</code> is a move iterator.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -670,7 +705,8 @@ public:
\param last The end of the range to be copied.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept and
+ <code>InputIterator</code> is a move iterator.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -692,7 +728,7 @@ public:
circular_buffer<T, Alloc>::assign(capacity_ctrl, first, last);
}
- //! Swap the contents of two space optimized circular buffers.
+ //! Swap the contents of two space-optimized circular-buffers.
/*!
\post <code>this</code> contains elements of <code>cb</code> and vice versa; the capacity and the amount of
allocated memory in the internal buffer of <code>this</code> equal to the capacity and the amount of
@@ -704,14 +740,18 @@ public:
\par Iterator Invalidation
Invalidates all iterators of both <code>circular_buffer_space_optimized</code> containers. (On the other
hand the iterators still point to the same elements but within another container. If you want to rely on
- this feature you have to turn the <a href="circular_buffer.html#debug">Debug Support</a> off otherwise an
- assertion will report an error if such invalidated iterator is used.)
+ this feature you have to turn the __debug_support off by defining macro BOOST_CB_DISABLE_DEBUG,
+ otherwise an assertion will report an error if such invalidated iterator is used.)
\par Complexity
Constant (in the size of the <code>circular_buffer_space_optimized</code>).
- \sa <code>\link swap(circular_buffer<T, Alloc>&, circular_buffer<T, Alloc>&)
- swap(circular_buffer_space_optimized<T, Alloc>&, circular_buffer_space_optimized<T, Alloc>&)\endlink</code>
+ \sa <code>swap(circular_buffer<T, Alloc>&, circular_buffer<T, Alloc>&)</code>,
+ <code>swap(circular_buffer_space_optimized<T, Alloc>&, circular_buffer_space_optimized<T, Alloc>&)</code>
+
+
*/
- void swap(circular_buffer_space_optimized<T, Alloc>& cb) {
+ // Note link does not work right. Asked on Doxygen forum for advice 23 May 2103.
+
+ void swap(circular_buffer_space_optimized<T, Alloc>& cb) BOOST_NOEXCEPT {
std::swap(m_capacity_ctrl, cb.m_capacity_ctrl);
circular_buffer<T, Alloc>::swap(cb);
}
@@ -725,7 +765,7 @@ public:
\param item The element to be inserted.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -736,11 +776,60 @@ public:
\sa <code>\link push_front() push_front(const_reference)\endlink</code>, <code>pop_back()</code>,
<code>pop_front()</code>
*/
- void push_back(param_value_type item = value_type()) {
+ void push_back(param_value_type item) {
check_low_capacity();
circular_buffer<T, Alloc>::push_back(item);
}
+ //! Insert a new element at the end of the space optimized circular buffer.
+ /*!
+ \post if <code>capacity().%capacity() > 0</code> then <code>back() == item</code><br>
+ If the <code>circular_buffer_space_optimized</code> is full, the first element will be removed. If the
+ capacity is <code>0</code>, nothing will be inserted.<br><br>
+ The amount of allocated memory in the internal buffer may be predictively increased.
+ \param item The element to be inserted.
+ \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ used).
+ \par Exception Safety
+ Basic.
+ \par Iterator Invalidation
+ Invalidates all iterators pointing to the <code>circular_buffer_space_optimized</code> (except iterators
+ equal to <code>end()</code>).
+ \par Complexity
+ Linear (in the size of the <code>circular_buffer_space_optimized</code>).
+ \sa <code>\link push_front() push_front(const_reference)\endlink</code>, <code>pop_back()</code>,
+ <code>pop_front()</code>
+ */
+ void push_back(rvalue_type item) {
+ check_low_capacity();
+ circular_buffer<T, Alloc>::push_back(boost::move(item));
+ }
+
+ //! Insert a new element at the end of the space optimized circular buffer.
+ /*!
+ \post if <code>capacity().%capacity() > 0</code> then <code>back() == item</code><br>
+ If the <code>circular_buffer_space_optimized</code> is full, the first element will be removed. If the
+ capacity is <code>0</code>, nothing will be inserted.<br><br>
+ The amount of allocated memory in the internal buffer may be predictively increased.
+ \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ used).
+ Whatever <code>T::T()</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
+ \par Exception Safety
+ Basic.
+ \par Iterator Invalidation
+ Invalidates all iterators pointing to the <code>circular_buffer_space_optimized</code> (except iterators
+ equal to <code>end()</code>).
+ \par Complexity
+ Linear (in the size of the <code>circular_buffer_space_optimized</code>).
+ \sa <code>\link push_front() push_front(const_reference)\endlink</code>, <code>pop_back()</code>,
+ <code>pop_front()</code>
+ */
+ void push_back() {
+ check_low_capacity();
+ circular_buffer<T, Alloc>::push_back();
+ }
+
//! Insert a new element at the beginning of the space optimized circular buffer.
/*!
\post if <code>capacity().%capacity() > 0</code> then <code>front() == item</code><br>
@@ -750,7 +839,7 @@ public:
\param item The element to be inserted.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -761,11 +850,61 @@ public:
\sa <code>\link push_back() push_back(const_reference)\endlink</code>, <code>pop_back()</code>,
<code>pop_front()</code>
*/
- void push_front(param_value_type item = value_type()) {
+ void push_front(param_value_type item) {
check_low_capacity();
circular_buffer<T, Alloc>::push_front(item);
}
+ //! Insert a new element at the beginning of the space optimized circular buffer.
+ /*!
+ \post if <code>capacity().%capacity() > 0</code> then <code>front() == item</code><br>
+ If the <code>circular_buffer_space_optimized</code> is full, the last element will be removed. If the
+ capacity is <code>0</code>, nothing will be inserted.<br><br>
+ The amount of allocated memory in the internal buffer may be predictively increased.
+ \param item The element to be inserted.
+ \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ used).
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
+ \par Exception Safety
+ Basic.
+ \par Iterator Invalidation
+ Invalidates all iterators pointing to the <code>circular_buffer_space_optimized</code> (except iterators
+ equal to <code>end()</code>).
+ \par Complexity
+ Linear (in the size of the <code>circular_buffer_space_optimized</code>).
+ \sa <code>\link push_back() push_back(const_reference)\endlink</code>, <code>pop_back()</code>,
+ <code>pop_front()</code>
+ */
+ void push_front(rvalue_type item) {
+ check_low_capacity();
+ circular_buffer<T, Alloc>::push_front(boost::move(item));
+ }
+
+ //! Insert a new element at the beginning of the space optimized circular buffer.
+ /*!
+ \post if <code>capacity().%capacity() > 0</code> then <code>front() == item</code><br>
+ If the <code>circular_buffer_space_optimized</code> is full, the last element will be removed. If the
+ capacity is <code>0</code>, nothing will be inserted.<br><br>
+ The amount of allocated memory in the internal buffer may be predictively increased.
+ \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ used).
+ Whatever <code>T::T()</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
+ \par Exception Safety
+ Basic.
+ \par Iterator Invalidation
+ Invalidates all iterators pointing to the <code>circular_buffer_space_optimized</code> (except iterators
+ equal to <code>end()</code>).
+ \par Complexity
+ Linear (in the size of the <code>circular_buffer_space_optimized</code>).
+ \sa <code>\link push_back() push_back(const_reference)\endlink</code>, <code>pop_back()</code>,
+ <code>pop_front()</code>
+ */
+ void push_front() {
+ check_low_capacity();
+ circular_buffer<T, Alloc>::push_front();
+ }
+
//! Remove the last element from the space optimized circular buffer.
/*!
\pre <code>!empty()</code>
@@ -826,8 +965,8 @@ public:
the <i>Effect</i>.)
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -843,12 +982,88 @@ public:
rinsert(iterator, size_type, value_type)\endlink</code>,
<code>rinsert(iterator, InputIterator, InputIterator)</code>
*/
- iterator insert(iterator pos, param_value_type item = value_type()) {
+ iterator insert(iterator pos, param_value_type item) {
size_type index = pos - begin();
check_low_capacity();
return circular_buffer<T, Alloc>::insert(begin() + index, item);
}
+ //! Insert an element at the specified position.
+ /*!
+ \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer_space_optimized</code> or its
+ end.
+ \post The <code>item</code> will be inserted at the position <code>pos</code>.<br>
+ If the <code>circular_buffer_space_optimized</code> is full, the first element will be overwritten. If
+ the <code>circular_buffer_space_optimized</code> is full and the <code>pos</code> points to
+ <code>begin()</code>, then the <code>item</code> will not be inserted. If the capacity is <code>0</code>,
+ nothing will be inserted.<br><br>
+ The amount of allocated memory in the internal buffer may be predictively increased.
+ \param pos An iterator specifying the position where the <code>item</code> will be inserted.
+ \param item The element to be inserted.
+ \return Iterator to the inserted element or <code>begin()</code> if the <code>item</code> is not inserted. (See
+ the <i>Effect</i>.)
+ \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ used).
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
+ \par Exception Safety
+ Basic.
+ \par Iterator Invalidation
+ Invalidates all iterators pointing to the <code>circular_buffer_space_optimized</code> (except iterators
+ equal to <code>end()</code>).
+ \par Complexity
+ Linear (in the size of the <code>circular_buffer_space_optimized</code>).
+ \sa <code>\link insert(iterator, size_type, param_value_type)
+ insert(iterator, size_type, value_type)\endlink</code>,
+ <code>insert(iterator, InputIterator, InputIterator)</code>,
+ <code>\link rinsert(iterator, param_value_type) rinsert(iterator, value_type)\endlink</code>,
+ <code>\link rinsert(iterator, size_type, param_value_type)
+ rinsert(iterator, size_type, value_type)\endlink</code>,
+ <code>rinsert(iterator, InputIterator, InputIterator)</code>
+ */
+ iterator insert(iterator pos, rvalue_type item) {
+ size_type index = pos - begin();
+ check_low_capacity();
+ return circular_buffer<T, Alloc>::insert(begin() + index, boost::move(item));
+ }
+
+ //! Insert an element at the specified position.
+ /*!
+ \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer_space_optimized</code> or its
+ end.
+ \post The <code>item</code> will be inserted at the position <code>pos</code>.<br>
+ If the <code>circular_buffer_space_optimized</code> is full, the first element will be overwritten. If
+ the <code>circular_buffer_space_optimized</code> is full and the <code>pos</code> points to
+ <code>begin()</code>, then the <code>item</code> will not be inserted. If the capacity is <code>0</code>,
+ nothing will be inserted.<br><br>
+ The amount of allocated memory in the internal buffer may be predictively increased.
+ \param pos An iterator specifying the position where the <code>item</code> will be inserted.
+ \return Iterator to the inserted element or <code>begin()</code> if the <code>item</code> is not inserted. (See
+ the <i>Effect</i>.)
+ \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ used).
+ Whatever <code>T::T()</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
+ \par Exception Safety
+ Basic.
+ \par Iterator Invalidation
+ Invalidates all iterators pointing to the <code>circular_buffer_space_optimized</code> (except iterators
+ equal to <code>end()</code>).
+ \par Complexity
+ Linear (in the size of the <code>circular_buffer_space_optimized</code>).
+ \sa <code>\link insert(iterator, size_type, param_value_type)
+ insert(iterator, size_type, value_type)\endlink</code>,
+ <code>insert(iterator, InputIterator, InputIterator)</code>,
+ <code>\link rinsert(iterator, param_value_type) rinsert(iterator, value_type)\endlink</code>,
+ <code>\link rinsert(iterator, size_type, param_value_type)
+ rinsert(iterator, size_type, value_type)\endlink</code>,
+ <code>rinsert(iterator, InputIterator, InputIterator)</code>
+ */
+ iterator insert(iterator pos) {
+ size_type index = pos - begin();
+ check_low_capacity();
+ return circular_buffer<T, Alloc>::insert(begin() + index);
+ }
+
//! Insert <code>n</code> copies of the <code>item</code> at the specified position.
/*!
\pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer_space_optimized</code> or its
@@ -863,8 +1078,8 @@ public:
\param item The element whose copies will be inserted.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -876,7 +1091,7 @@ public:
Consider a <code>circular_buffer_space_optimized</code> with the capacity of 6 and the size of 4. Its
internal buffer may look like the one below.<br><br>
<code>|1|2|3|4| | |</code><br>
- <code>p ---^</code><br><br>After inserting 5 elements at the position <code>p</code>:<br><br>
+ <code>p ___^</code><br><br>After inserting 5 elements at the position <code>p</code>:<br><br>
<code>insert(p, (size_t)5, 0);</code><br><br>actually only 4 elements get inserted and elements
<code>1</code> and <code>2</code> are overwritten. This is due to the fact the insert operation preserves
the capacity. After insertion the internal buffer looks like this:<br><br><code>|0|0|0|0|3|4|</code><br>
@@ -911,8 +1126,7 @@ public:
\param last The end of the range to be inserted.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -927,7 +1141,7 @@ public:
Consider a <code>circular_buffer_space_optimized</code> with the capacity of 6 and the size of 4. Its
internal buffer may look like the one below.<br><br>
<code>|1|2|3|4| | |</code><br>
- <code>p ---^</code><br><br>After inserting a range of elements at the position <code>p</code>:<br><br>
+ <code>p ___^</code><br><br>After inserting a range of elements at the position <code>p</code>:<br><br>
<code>int array[] = { 5, 6, 7, 8, 9 };</code><br><code>insert(p, array, array + 5);</code><br><br>
actually only elements <code>6</code>, <code>7</code>, <code>8</code> and <code>9</code> from the
specified range get inserted and elements <code>1</code> and <code>2</code> are overwritten. This is due
@@ -962,8 +1176,8 @@ public:
the <i>Effect</i>.)
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -979,12 +1193,88 @@ public:
insert(iterator, size_type, value_type)\endlink</code>,
<code>insert(iterator, InputIterator, InputIterator)</code>
*/
- iterator rinsert(iterator pos, param_value_type item = value_type()) {
+ iterator rinsert(iterator pos, param_value_type item) {
size_type index = pos - begin();
check_low_capacity();
return circular_buffer<T, Alloc>::rinsert(begin() + index, item);
}
+ //! Insert an element before the specified position.
+ /*!
+ \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer_space_optimized</code> or its
+ end.
+ \post The <code>item</code> will be inserted before the position <code>pos</code>.<br>
+ If the <code>circular_buffer_space_optimized</code> is full, the last element will be overwritten. If the
+ <code>circular_buffer_space_optimized</code> is full and the <code>pos</code> points to
+ <code>end()</code>, then the <code>item</code> will not be inserted. If the capacity is <code>0</code>,
+ nothing will be inserted.<br><br>
+ The amount of allocated memory in the internal buffer may be predictively increased.
+ \param pos An iterator specifying the position before which the <code>item</code> will be inserted.
+ \param item The element to be inserted.
+ \return Iterator to the inserted element or <code>end()</code> if the <code>item</code> is not inserted. (See
+ the <i>Effect</i>.)
+ \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ used).
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
+ \par Exception Safety
+ Basic.
+ \par Iterator Invalidation
+ Invalidates all iterators pointing to the <code>circular_buffer_space_optimized</code> (except iterators
+ equal to <code>end()</code>).
+ \par Complexity
+ Linear (in the size of the <code>circular_buffer_space_optimized</code>).
+ \sa <code>\link rinsert(iterator, size_type, param_value_type)
+ rinsert(iterator, size_type, value_type)\endlink</code>,
+ <code>rinsert(iterator, InputIterator, InputIterator)</code>,
+ <code>\link insert(iterator, param_value_type) insert(iterator, value_type)\endlink</code>,
+ <code>\link insert(iterator, size_type, param_value_type)
+ insert(iterator, size_type, value_type)\endlink</code>,
+ <code>insert(iterator, InputIterator, InputIterator)</code>
+ */
+ iterator rinsert(iterator pos, rvalue_type item) {
+ size_type index = pos - begin();
+ check_low_capacity();
+ return circular_buffer<T, Alloc>::rinsert(begin() + index, boost::move(item));
+ }
+
+ //! Insert an element before the specified position.
+ /*!
+ \pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer_space_optimized</code> or its
+ end.
+ \post The <code>item</code> will be inserted before the position <code>pos</code>.<br>
+ If the <code>circular_buffer_space_optimized</code> is full, the last element will be overwritten. If the
+ <code>circular_buffer_space_optimized</code> is full and the <code>pos</code> points to
+ <code>end()</code>, then the <code>item</code> will not be inserted. If the capacity is <code>0</code>,
+ nothing will be inserted.<br><br>
+ The amount of allocated memory in the internal buffer may be predictively increased.
+ \param pos An iterator specifying the position before which the <code>item</code> will be inserted.
+ \return Iterator to the inserted element or <code>end()</code> if the <code>item</code> is not inserted. (See
+ the <i>Effect</i>.)
+ \throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
+ used).
+ Whatever <code>T::T()</code> throws.
+ Whatever <code>T::T(const T&)</code> throws or nothing if <code>T::T(T&&)</code> is noexcept.
+ \par Exception Safety
+ Basic.
+ \par Iterator Invalidation
+ Invalidates all iterators pointing to the <code>circular_buffer_space_optimized</code> (except iterators
+ equal to <code>end()</code>).
+ \par Complexity
+ Linear (in the size of the <code>circular_buffer_space_optimized</code>).
+ \sa <code>\link rinsert(iterator, size_type, param_value_type)
+ rinsert(iterator, size_type, value_type)\endlink</code>,
+ <code>rinsert(iterator, InputIterator, InputIterator)</code>,
+ <code>\link insert(iterator, param_value_type) insert(iterator, value_type)\endlink</code>,
+ <code>\link insert(iterator, size_type, param_value_type)
+ insert(iterator, size_type, value_type)\endlink</code>,
+ <code>insert(iterator, InputIterator, InputIterator)</code>
+ */
+ iterator rinsert(iterator pos) {
+ size_type index = pos - begin();
+ check_low_capacity();
+ return circular_buffer<T, Alloc>::rinsert(begin() + index);
+ }
+
//! Insert <code>n</code> copies of the <code>item</code> before the specified position.
/*!
\pre <code>pos</code> is a valid iterator pointing to the <code>circular_buffer_space_optimized</code> or its
@@ -999,8 +1289,8 @@ public:
\param item The element whose copies will be inserted.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1012,7 +1302,7 @@ public:
Consider a <code>circular_buffer_space_optimized</code> with the capacity of 6 and the size of 4. Its
internal buffer may look like the one below.<br><br>
<code>|1|2|3|4| | |</code><br>
- <code>p ---^</code><br><br>After inserting 5 elements before the position <code>p</code>:<br><br>
+ <code>p ___^</code><br><br>After inserting 5 elements before the position <code>p</code>:<br><br>
<code>rinsert(p, (size_t)5, 0);</code><br><br>actually only 4 elements get inserted and elements
<code>3</code> and <code>4</code> are overwritten. This is due to the fact the rinsert operation preserves
the capacity. After insertion the internal buffer looks like this:<br><br><code>|1|2|0|0|0|0|</code><br>
@@ -1048,8 +1338,8 @@ public:
\param last The end of the range to be inserted.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::T(const T&)</code> throws.
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::T(const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1064,7 +1354,7 @@ public:
Consider a <code>circular_buffer_space_optimized</code> with the capacity of 6 and the size of 4. Its
internal buffer may look like the one below.<br><br>
<code>|1|2|3|4| | |</code><br>
- <code>p ---^</code><br><br>After inserting a range of elements before the position <code>p</code>:<br><br>
+ <code>p ___^</code><br><br>After inserting a range of elements before the position <code>p</code>:<br><br>
<code>int array[] = { 5, 6, 7, 8, 9 };</code><br><code>insert(p, array, array + 5);</code><br><br>
actually only elements <code>5</code>, <code>6</code>, <code>7</code> and <code>8</code> from the
specified range get inserted and elements <code>3</code> and <code>4</code> are overwritten. This is due
@@ -1094,7 +1384,8 @@ public:
element exists.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws or
+ nothing if <code>T::operator = (T&&)</code> is noexcept.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1124,7 +1415,8 @@ public:
element exists.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws or
+ nothing if <code>T::operator = (T&&)</code> is noexcept.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1153,7 +1445,8 @@ public:
such element exists.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws or
+ nothing if <code>T::operator = (T&&)</code> is noexcept.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1162,7 +1455,7 @@ public:
\par Complexity
Linear (in the size of the <code>circular_buffer_space_optimized</code>).
\note Basically there is no difference between <code>erase(iterator)</code> and this method. It is implemented
- only for consistency with the base <code><a href="circular_buffer.html">circular_buffer</a></code>.
+ only for consistency with the base <code>circular_buffer</code>.
\sa <code>erase(iterator)</code>, <code>erase(iterator, iterator)</code>,
<code>rerase(iterator, iterator)</code>, <code>clear()</code>
*/
@@ -1185,7 +1478,8 @@ public:
such element exists.
\throws "An allocation error" if memory is exhausted (<code>std::bad_alloc</code> if the standard allocator is
used).
- \throws Whatever <code>T::operator = (const T&)</code> throws.
+ Whatever <code>T::operator = (const T&)</code> throws or
+ nothing if <code>T::operator = (T&&)</code> is noexcept.
\par Exception Safety
Basic.
\par Iterator Invalidation
@@ -1195,7 +1489,7 @@ public:
Linear (in the size of the <code>circular_buffer_space_optimized</code>).
\note Basically there is no difference between <code>erase(iterator, iterator)</code> and this method. It is
implemented only for consistency with the base
- <code><a href="circular_buffer.html">circular_buffer</a></code>.
+ <code><circular_buffer</code>.
\sa <code>erase(iterator)</code>, <code>erase(iterator, iterator)</code>, <code>rerase(iterator)</code>,
<code>clear()</code>
*/
@@ -1311,10 +1605,10 @@ private:
const false_type&) {
BOOST_CB_IS_CONVERTIBLE(Iterator, value_type); // check for invalid iterator type
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
- return init_capacity(capacity_ctrl, first, last, BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ return init_capacity(capacity_ctrl, first, last, iterator_category<Iterator>::type());
#else
return init_capacity(
- capacity_ctrl, first, last, BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY<Iterator>::type());
+ capacity_ctrl, first, last, BOOST_DEDUCED_TYPENAME iterator_category<Iterator>::type());
#endif
}
@@ -1414,7 +1708,7 @@ inline bool operator >= (const circular_buffer_space_optimized<T, Alloc>& lhs,
//! Swap the contents of two space optimized circular buffers.
template <class T, class Alloc>
inline void swap(circular_buffer_space_optimized<T, Alloc>& lhs,
- circular_buffer_space_optimized<T, Alloc>& rhs) {
+ circular_buffer_space_optimized<T, Alloc>& rhs) BOOST_NOEXCEPT {
lhs.swap(rhs);
}
diff --git a/3party/boost/boost/compressed_pair.hpp b/3party/boost/boost/compressed_pair.hpp
index e6cd6a074a..a7be0f2ba2 100644
--- a/3party/boost/boost/compressed_pair.hpp
+++ b/3party/boost/boost/compressed_pair.hpp
@@ -5,7 +5,7 @@
//
// See http://www.boost.org/libs/utility for most recent version including documentation.
-// See boost/detail/compressed_pair.hpp and boost/detail/ob_compressed_pair.hpp
+// See boost/detail/compressed_pair.hpp
// for full copyright notices.
#ifndef BOOST_COMPRESSED_PAIR_HPP
@@ -15,10 +15,6 @@
#include <boost/config.hpp>
#endif
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#include <boost/detail/ob_compressed_pair.hpp>
-#else
#include <boost/detail/compressed_pair.hpp>
-#endif
#endif // BOOST_COMPRESSED_PAIR_HPP
diff --git a/3party/boost/boost/concept/assert.hpp b/3party/boost/boost/concept/assert.hpp
index 80eca817ac..cf98179522 100644
--- a/3party/boost/boost/concept/assert.hpp
+++ b/3party/boost/boost/concept/assert.hpp
@@ -18,8 +18,7 @@
# if !defined(BOOST_NO_OLD_CONCEPT_SUPPORT) \
&& !defined(BOOST_NO_SFINAE) \
\
- && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4)) \
- && !(BOOST_WORKAROUND(__GNUC__, == 2))
+ && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4))
// Note: gcc-2.96 through 3.3.x have some SFINAE, but no ability to
// check for the presence of particularmember functions.
diff --git a/3party/boost/boost/concept/detail/concept_def.hpp b/3party/boost/boost/concept/detail/concept_def.hpp
index 79f628e999..750561ee30 100644
--- a/3party/boost/boost/concept/detail/concept_def.hpp
+++ b/3party/boost/boost/concept/detail/concept_def.hpp
@@ -15,7 +15,6 @@
//
// Also defines an equivalent SomeNameConcept for backward compatibility.
// Maybe in the next release we can kill off the "Concept" suffix for good.
-#if BOOST_WORKAROUND(__GNUC__, <= 3)
# define BOOST_concept(name, params) \
template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
struct name; /* forward declaration */ \
@@ -24,26 +23,10 @@
struct BOOST_PP_CAT(name,Concept) \
: name< BOOST_PP_SEQ_ENUM(params) > \
{ \
- /* at least 2.96 and 3.4.3 both need this */ \
- BOOST_PP_CAT(name,Concept)(); \
}; \
\
template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
struct name
-#else
-# define BOOST_concept(name, params) \
- template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
- struct name; /* forward declaration */ \
- \
- template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
- struct BOOST_PP_CAT(name,Concept) \
- : name< BOOST_PP_SEQ_ENUM(params) > \
- { \
- }; \
- \
- template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
- struct name
-#endif
// Helper for BOOST_concept, above.
# define BOOST_CONCEPT_typename(r, ignored, index, t) \
diff --git a/3party/boost/boost/concept/detail/concept_undef.hpp b/3party/boost/boost/concept/detail/concept_undef.hpp
index 713db89123..713db89123 100644..100755
--- a/3party/boost/boost/concept/detail/concept_undef.hpp
+++ b/3party/boost/boost/concept/detail/concept_undef.hpp
diff --git a/3party/boost/boost/concept/detail/general.hpp b/3party/boost/boost/concept/detail/general.hpp
index e3014c1b87..c88a1edd3a 100644
--- a/3party/boost/boost/concept/detail/general.hpp
+++ b/3party/boost/boost/concept/detail/general.hpp
@@ -65,10 +65,19 @@ struct requirement_<void(*)(Model)>
# endif
+// Version check from https://svn.boost.org/trac/boost/changeset/82886
+// (boost/static_assert.hpp)
+#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
+#define BOOST_CONCEPT_UNUSED_TYPEDEF __attribute__((unused))
+#else
+#define BOOST_CONCEPT_UNUSED_TYPEDEF /**/
+#endif
+
# define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \
typedef ::boost::concepts::detail::instantiate< \
&::boost::concepts::requirement_<ModelFnPtr>::failed> \
- BOOST_PP_CAT(boost_concept_check,__LINE__)
+ BOOST_PP_CAT(boost_concept_check,__LINE__) \
+ BOOST_CONCEPT_UNUSED_TYPEDEF
}}
diff --git a/3party/boost/boost/concept/detail/msvc.hpp b/3party/boost/boost/concept/detail/msvc.hpp
index 9fbd2505d2..078dd22330 100644
--- a/3party/boost/boost/concept/detail/msvc.hpp
+++ b/3party/boost/boost/concept/detail/msvc.hpp
@@ -6,12 +6,17 @@
# include <boost/preprocessor/cat.hpp>
# include <boost/concept/detail/backward_compatibility.hpp>
+# include <boost/config.hpp>
# ifdef BOOST_OLD_CONCEPT_SUPPORT
# include <boost/concept/detail/has_constraints.hpp>
# include <boost/mpl/if.hpp>
# endif
+# ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4100)
+# endif
namespace boost { namespace concepts {
@@ -111,4 +116,8 @@ enum \
# endif
}}
+# ifdef BOOST_MSVC
+# pragma warning(pop)
+# endif
+
#endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
diff --git a/3party/boost/boost/concept/requires.hpp b/3party/boost/boost/concept/requires.hpp
index 024ba742c9..365ce10045 100644
--- a/3party/boost/boost/concept/requires.hpp
+++ b/3party/boost/boost/concept/requires.hpp
@@ -5,19 +5,37 @@
# define BOOST_CONCEPT_REQUIRES_DWA2006430_HPP
# include <boost/config.hpp>
-# include <boost/parameter/aux_/parenthesized_type.hpp>
# include <boost/concept/assert.hpp>
# include <boost/preprocessor/seq/for_each.hpp>
namespace boost {
+// unaryfunptr_arg_type from parameter/aux_/parenthesized_type.hpp
+
+namespace ccheck_aux {
+
+// A metafunction that transforms void(*)(T) -> T
+template <class UnaryFunctionPointer>
+struct unaryfunptr_arg_type;
+
+template <class Arg>
+struct unaryfunptr_arg_type<void(*)(Arg)>
+{
+ typedef Arg type;
+};
+
+template <>
+struct unaryfunptr_arg_type<void(*)(void)>
+{
+ typedef void type;
+};
+
+} // namespace ccheck_aux
+
// Template for use in handwritten assertions
template <class Model, class More>
struct requires_ : More
{
-# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- typedef typename More::type type;
-# endif
BOOST_CONCEPT_ASSERT((Model));
};
@@ -32,11 +50,8 @@ struct _requires_
};
template <int check, class Result>
-struct Requires_ : ::boost::parameter::aux::unaryfunptr_arg_type<Result>
+struct Requires_ : ::boost::ccheck_aux::unaryfunptr_arg_type<Result>
{
-# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- typedef typename ::boost::parameter::aux::unaryfunptr_arg_type<Result>::type type;
-# endif
};
# if BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(1010))
@@ -45,10 +60,10 @@ struct Requires_ : ::boost::parameter::aux::unaryfunptr_arg_type<Result>
# define BOOST_CONCEPT_REQUIRES_(r,data,t) + (::boost::_requires_<void(*)t>::value)
# endif
-#if defined(NDEBUG) || BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#if defined(NDEBUG)
# define BOOST_CONCEPT_REQUIRES(models, result) \
- typename ::boost::parameter::aux::unaryfunptr_arg_type<void(*)result>::type
+ typename ::boost::ccheck_aux::unaryfunptr_arg_type<void(*)result>::type
#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
@@ -56,7 +71,7 @@ struct Requires_ : ::boost::parameter::aux::unaryfunptr_arg_type<Result>
# define BOOST_CONCEPT_REQUIRES(models, result) \
::boost::Requires_< \
(0 BOOST_PP_SEQ_FOR_EACH(BOOST_CONCEPT_REQUIRES_, ~, models)), \
- ::boost::parameter::aux::unaryfunptr_arg_type<void(*)result> \
+ ::boost::ccheck_aux::unaryfunptr_arg_type<void(*)result> \
>::type
#else
diff --git a/3party/boost/boost/concept/usage.hpp b/3party/boost/boost/concept/usage.hpp
index 21547c31f4..e73370fb37 100644
--- a/3party/boost/boost/concept/usage.hpp
+++ b/3party/boost/boost/concept/usage.hpp
@@ -10,12 +10,6 @@
namespace boost { namespace concepts {
-# if BOOST_WORKAROUND(__GNUC__, == 2)
-
-# define BOOST_CONCEPT_USAGE(model) ~model()
-
-# else
-
template <class Model>
struct usage_requirements
{
@@ -37,8 +31,6 @@ struct usage_requirements
# endif
-# endif
-
}} // namespace boost::concepts
#endif // BOOST_CONCEPT_USAGE_DWA2006919_HPP
diff --git a/3party/boost/boost/concept_check.hpp b/3party/boost/boost/concept_check.hpp
index bf5a2af783..292f37d3b2 100644
--- a/3party/boost/boost/concept_check.hpp
+++ b/3party/boost/boost/concept_check.hpp
@@ -32,6 +32,12 @@
# include <boost/concept/usage.hpp>
# include <boost/concept/detail/concept_def.hpp>
+#if (defined _MSC_VER)
+# pragma warning( push )
+# pragma warning( disable : 4510 ) // default constructor could not be generated
+# pragma warning( disable : 4610 ) // object 'class' can never be instantiated - user-defined constructor required
+#endif
+
namespace boost
{
@@ -175,11 +181,6 @@ namespace boost
TT b;
};
-#if (defined _MSC_VER)
-# pragma warning( push )
-# pragma warning( disable : 4510 ) // default constructor could not be generated
-# pragma warning( disable : 4610 ) // object 'class' can never be instantiated - user-defined constructor required
-#endif
// The SGI STL version of Assignable requires copy constructor and operator=
BOOST_concept(SGIAssignable,(TT))
{
@@ -202,9 +203,6 @@ namespace boost
TT a;
TT b;
};
-#if (defined _MSC_VER)
-# pragma warning( pop )
-#endif
BOOST_concept(Convertible,(X)(Y))
{
@@ -562,10 +560,10 @@ namespace boost
: ForwardIterator<TT>
{
BOOST_CONCEPT_USAGE(Mutable_ForwardIterator) {
- *i++ = *i; // require postincrement and assignment
+ *i++ = *j; // require postincrement and assignment
}
private:
- TT i;
+ TT i, j;
};
BOOST_concept(BidirectionalIterator,(TT))
@@ -591,10 +589,10 @@ namespace boost
{
BOOST_CONCEPT_USAGE(Mutable_BidirectionalIterator)
{
- *i-- = *i; // require postdecrement and assignment
+ *i-- = *j; // require postdecrement and assignment
}
private:
- TT i;
+ TT i, j;
};
BOOST_concept(RandomAccessIterator,(TT))
@@ -880,7 +878,7 @@ namespace boost
typename BackInsertionSequence::const_reference
r = cc.back();
ignore_unused_variable_warning(r);
- };
+ }
S c;
typename S::value_type t;
};
@@ -1077,6 +1075,10 @@ namespace boost
};
} // namespace boost
+#if (defined _MSC_VER)
+# pragma warning( pop )
+#endif
+
# include <boost/concept/detail/concept_undef.hpp>
#endif // BOOST_CONCEPT_CHECKS_HPP
diff --git a/3party/boost/boost/concept_check/borland.hpp b/3party/boost/boost/concept_check/borland.hpp
index 107926bb31..107926bb31 100644..100755
--- a/3party/boost/boost/concept_check/borland.hpp
+++ b/3party/boost/boost/concept_check/borland.hpp
diff --git a/3party/boost/boost/concept_check/general.hpp b/3party/boost/boost/concept_check/general.hpp
index cd09fb043e..cd09fb043e 100644..100755
--- a/3party/boost/boost/concept_check/general.hpp
+++ b/3party/boost/boost/concept_check/general.hpp
diff --git a/3party/boost/boost/concept_check/has_constraints.hpp b/3party/boost/boost/concept_check/has_constraints.hpp
index e19f664f62..e19f664f62 100644..100755
--- a/3party/boost/boost/concept_check/has_constraints.hpp
+++ b/3party/boost/boost/concept_check/has_constraints.hpp
diff --git a/3party/boost/boost/concept_check/msvc.hpp b/3party/boost/boost/concept_check/msvc.hpp
index 3968469a89..3968469a89 100644..100755
--- a/3party/boost/boost/concept_check/msvc.hpp
+++ b/3party/boost/boost/concept_check/msvc.hpp
diff --git a/3party/boost/boost/config.hpp b/3party/boost/boost/config.hpp
index f37585ebb9..d49bb27cd5 100644
--- a/3party/boost/boost/config.hpp
+++ b/3party/boost/boost/config.hpp
@@ -1,6 +1,6 @@
// Boost config.hpp configuration header file ------------------------------//
-// (C) Copyright John Maddock 2002.
+// (C) Copyright John Maddock 2002.
// 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)
@@ -20,6 +20,10 @@
// if we don't have a user config, then use the default location:
#if !defined(BOOST_USER_CONFIG) && !defined(BOOST_NO_USER_CONFIG)
# define BOOST_USER_CONFIG <boost/config/user.hpp>
+#if 0
+// For dependency trackers:
+# include <boost/config/user.hpp>
+#endif
#endif
// include it first:
#ifdef BOOST_USER_CONFIG
@@ -56,15 +60,8 @@
// get config suffix code:
#include <boost/config/suffix.hpp>
-#endif // BOOST_CONFIG_HPP
-
-
-
-
-
-
-
-
-
-
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+#endif // BOOST_CONFIG_HPP
diff --git a/3party/boost/boost/config/auto_link.hpp b/3party/boost/boost/config/auto_link.hpp
index e36d06a05a..13cbad4360 100644
--- a/3party/boost/boost/config/auto_link.hpp
+++ b/3party/boost/boost/config/auto_link.hpp
@@ -151,11 +151,16 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y.
// vc10:
# define BOOST_LIB_TOOLSET "vc100"
-# elif defined(BOOST_MSVC)
+# elif defined(BOOST_MSVC) && (BOOST_MSVC < 1800)
// vc11:
# define BOOST_LIB_TOOLSET "vc110"
+# elif defined(BOOST_MSVC)
+
+ // vc12:
+# define BOOST_LIB_TOOLSET "vc120"
+
# elif defined(__BORLANDC__)
// CBuilder 6:
@@ -421,3 +426,4 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y.
# undef BOOST_DYN_LINK
#endif
+
diff --git a/3party/boost/boost/config/compiler/borland.hpp b/3party/boost/boost/config/compiler/borland.hpp
index 38ac4a9ae5..d2a09024d8 100644
--- a/3party/boost/boost/config/compiler/borland.hpp
+++ b/3party/boost/boost/config/compiler/borland.hpp
@@ -155,7 +155,7 @@
# define BOOST_NO_CXX11_DECLTYPE
# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
# define BOOST_NO_CXX11_EXTERN_TEMPLATE
-# define BOOST_NO_CXX11_RVALUE_REFERENCES
+# define BOOST_NO_CXX11_RVALUE_REFERENCES
# define BOOST_NO_CXX11_SCOPED_ENUMS
# define BOOST_NO_CXX11_STATIC_ASSERT
#else
@@ -191,6 +191,10 @@
#define BOOST_NO_CXX11_NOEXCEPT
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
#if __BORLANDC__ >= 0x590
# define BOOST_HAS_TR1_HASH
@@ -243,7 +247,7 @@
// all versions support __declspec:
//
#if defined(__STRICT_ANSI__)
-// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
+// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
# define BOOST_SYMBOL_EXPORT
#endif
//
@@ -282,7 +286,3 @@
#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
#define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__)
-
-
-
-
diff --git a/3party/boost/boost/config/compiler/clang.hpp b/3party/boost/boost/config/compiler/clang.hpp
index 8e38821bdd..6a178242d7 100644
--- a/3party/boost/boost/config/compiler/clang.hpp
+++ b/3party/boost/boost/config/compiler/clang.hpp
@@ -1,13 +1,23 @@
// (C) Copyright Douglas Gregor 2010
//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
// Clang compiler setup.
+#define BOOST_HAS_PRAGMA_ONCE
+
+// When compiling with clang before __has_extension was defined,
+// even if one writes 'defined(__has_extension) && __has_extension(xxx)',
+// clang reports a compiler error. So the only workaround found is:
+
+#ifndef __has_extension
+#define __has_extension __has_feature
+#endif
+
#if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS)
# define BOOST_NO_EXCEPTIONS
#endif
@@ -26,9 +36,22 @@
#define BOOST_HAS_NRVO
+// Branch prediction hints
+#if defined(__has_builtin)
+#if __has_builtin(__builtin_expect)
+#define BOOST_LIKELY(x) __builtin_expect(x, 1)
+#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
+#endif
+#endif
+
// Clang supports "long long" in all compilation modes.
#define BOOST_HAS_LONG_LONG
+#if defined(__SIZEOF_INT128__)
+# define BOOST_HAS_INT128
+#endif
+
+
//
// Dynamic shared object (DSO) and dynamic-link library (DLL) support
//
@@ -38,22 +61,25 @@
# define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
#endif
-//
-// The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
-// between switch labels.
-//
-#if __cplusplus >= 201103L && defined(__has_warning)
-# if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
-# define BOOST_FALLTHROUGH [[clang::fallthrough]]
-# endif
-#endif
+//
+// The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
+// between switch labels.
+//
+#if __cplusplus >= 201103L && defined(__has_warning)
+# if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
+# define BOOST_FALLTHROUGH [[clang::fallthrough]]
+# endif
+#endif
#if !__has_feature(cxx_auto_type)
# define BOOST_NO_CXX11_AUTO_DECLARATIONS
# define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
#endif
-#if !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
+//
+// Currently clang on Windows using VC++ RTL does not support C++11's char16_t or char32_t
+//
+#if defined(_MSC_VER) || !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
# define BOOST_NO_CXX11_CHAR16_T
# define BOOST_NO_CXX11_CHAR32_T
#endif
@@ -114,6 +140,10 @@
# define BOOST_NO_CXX11_RAW_LITERALS
#endif
+#if !__has_feature(cxx_reference_qualified_functions)
+# define BOOST_NO_CXX11_REF_QUALIFIERS
+#endif
+
#if !__has_feature(cxx_generalized_initializers)
# define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#endif
@@ -146,6 +176,18 @@
# define BOOST_NO_CXX11_USER_DEFINED_LITERALS
#endif
+#if !(__has_feature(cxx_alignas) || __has_extension(cxx_alignas))
+# define BOOST_NO_CXX11_ALIGNAS
+#endif
+
+#if !__has_feature(cxx_trailing_return)
+# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#endif
+
+#if !__has_feature(cxx_inline_namespaces)
+# define BOOST_NO_CXX11_INLINE_NAMESPACES
+#endif
+
// Clang always supports variadic macros
// Clang always supports extern templates
diff --git a/3party/boost/boost/config/compiler/codegear.hpp b/3party/boost/boost/config/compiler/codegear.hpp
index 9dd97bc025..6b52282f66 100644
--- a/3party/boost/boost/config/compiler/codegear.hpp
+++ b/3party/boost/boost/config/compiler/codegear.hpp
@@ -72,6 +72,12 @@
# endif
#endif
+
+// Reportedly, #pragma once is supported since C++ Builder 2010
+#if (__CODEGEARC__ >= 0x620)
+# define BOOST_HAS_PRAGMA_ONCE
+#endif
+
//
// C++0x macros:
//
@@ -111,6 +117,10 @@
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
//
// TR1 macros:
@@ -151,7 +161,7 @@
// all versions support __declspec:
//
#if defined(__STRICT_ANSI__)
-// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
+// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
# define BOOST_SYMBOL_EXPORT
#endif
//
diff --git a/3party/boost/boost/config/compiler/common_edg.hpp b/3party/boost/boost/config/compiler/common_edg.hpp
index 4b5d2d2632..d5589adde1 100644
--- a/3party/boost/boost/config/compiler/common_edg.hpp
+++ b/3party/boost/boost/config/compiler/common_edg.hpp
@@ -1,10 +1,10 @@
-// (C) Copyright John Maddock 2001 - 2002.
-// (C) Copyright Jens Maurer 2001.
-// (C) Copyright David Abrahams 2002.
-// (C) Copyright Aleksey Gurtovoy 2002.
+// (C) Copyright John Maddock 2001 - 2002.
+// (C) Copyright Jens Maurer 2001.
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Aleksey Gurtovoy 2002.
// (C) Copyright Markus Schoepflin 2005.
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -33,15 +33,15 @@
#if (__EDG_VERSION__ <= 244) && !defined(BOOST_NO_TEMPLATE_TEMPLATES)
# define BOOST_NO_TEMPLATE_TEMPLATES
-#endif
+#endif
#if (__EDG_VERSION__ < 300) && !defined(BOOST_NO_IS_ABSTRACT)
# define BOOST_NO_IS_ABSTRACT
-#endif
+#endif
#if (__EDG_VERSION__ <= 303) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
-#endif
+#endif
// See also kai.hpp which checks a Kai-specific symbol for EH
# if !defined(__KCC) && !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)
@@ -54,6 +54,11 @@
# define BOOST_NO_LONG_LONG
# endif
+// Not sure what version was the first to support #pragma once, but
+// different EDG-based compilers (e.g. Intel) supported it for ages.
+// Add a proper version check if it causes problems.
+#define BOOST_HAS_PRAGMA_ONCE
+
//
// C++0x features
//
@@ -96,6 +101,10 @@
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
#ifdef c_plusplus
// EDG has "long long" in non-strict mode
diff --git a/3party/boost/boost/config/compiler/cray.hpp b/3party/boost/boost/config/compiler/cray.hpp
index 4455c5c473..94e932b8d9 100644
--- a/3party/boost/boost/config/compiler/cray.hpp
+++ b/3party/boost/boost/config/compiler/cray.hpp
@@ -1,4 +1,5 @@
// (C) Copyright John Maddock 2011.
+// (C) Copyright Cray, Inc. 2013
// 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)
@@ -9,8 +10,8 @@
#define BOOST_COMPILER "Cray C version " BOOST_STRINGIZE(_RELEASE)
-#if _RELEASE < 7
-# error "Boost is not configured for Cray compilers prior to version 7, please try the configure script."
+#if _RELEASE < 8
+# error "Boost is not configured for Cray compilers prior to version 8, please try the configure script."
#endif
//
@@ -22,12 +23,14 @@
#include "boost/config/compiler/common_edg.hpp"
+
//
-// Cray peculiarities, probably version 7 specific:
//
-#undef BOOST_NO_CXX11_AUTO_DECLARATIONS
-#undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
#define BOOST_HAS_NRVO
+#define BOOST_NO_CXX11_VARIADIC_MACROS
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#define BOOST_NO_CXX11_UNICODE_LITERALS
@@ -55,6 +58,7 @@
#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
#define BOOST_NO_CXX11_CHAR32_T
#define BOOST_NO_CXX11_CHAR16_T
+#define BOOST_NO_CXX11_REF_QUALIFIERS
//#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
#define BOOST_MATH_DISABLE_STD_FPCLASSIFY
//#define BOOST_HAS_FPCLASSIFY
@@ -62,3 +66,24 @@
#define BOOST_SP_USE_PTHREADS
#define BOOST_AC_USE_PTHREADS
+/* everything that follows is working around what are thought to be
+ * compiler shortcomings. Revist all of these regularly.
+ */
+
+//#define BOOST_USE_ENUM_STATIC_ASSERT
+//#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS //(this may be implied by the previous #define
+
+// These constants should be provided by the
+// compiler, at least when -hgnu is asserted on the command line.
+
+#ifndef __ATOMIC_RELAXED
+#define __ATOMIC_RELAXED 0
+#define __ATOMIC_CONSUME 1
+#define __ATOMIC_ACQUIRE 2
+#define __ATOMIC_RELEASE 3
+#define __ATOMIC_ACQ_REL 4
+#define __ATOMIC_SEQ_CST 5
+#endif
+
+
+
diff --git a/3party/boost/boost/config/compiler/digitalmars.hpp b/3party/boost/boost/config/compiler/digitalmars.hpp
index 0206dc3815..7bc49ab4b3 100644
--- a/3party/boost/boost/config/compiler/digitalmars.hpp
+++ b/3party/boost/boost/config/compiler/digitalmars.hpp
@@ -1,8 +1,8 @@
// Copyright (C) Christof Meerwald 2003
// Copyright (C) Dan Watkins 2003
//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// 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)
// Digital Mars C++ compiler setup:
@@ -11,15 +11,7 @@
#define BOOST_HAS_LONG_LONG
#define BOOST_HAS_PRAGMA_ONCE
-#if (__DMC__ <= 0x833)
-#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
-#define BOOST_NO_TEMPLATE_TEMPLATES
-#define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING
-#define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
-#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
-#endif
-#if (__DMC__ <= 0x840) || !defined(BOOST_STRICT_CONFIG)
-#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+#if !defined(BOOST_STRICT_CONFIG)
#define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
#define BOOST_NO_OPERATORS_IN_NAMESPACE
#define BOOST_NO_UNREACHABLE_RETURN_DETECTION
@@ -30,11 +22,9 @@
//
// has macros:
-#if (__DMC__ >= 0x840)
#define BOOST_HAS_DIRENT_H
#define BOOST_HAS_STDINT_H
#define BOOST_HAS_WINTHREADS
-#endif
#if (__DMC__ >= 0x847)
#define BOOST_HAS_EXPM1
@@ -87,12 +77,12 @@
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
-#if (__DMC__ < 0x812)
-#define BOOST_NO_CXX11_VARIADIC_MACROS
-#endif
-
-#if __DMC__ < 0x800
+#if (__DMC__ <= 0x840)
#error "Compiler not supported or configured - please reconfigure"
#endif
//
diff --git a/3party/boost/boost/config/compiler/gcc.hpp b/3party/boost/boost/config/compiler/gcc.hpp
index b3d12ec65f..ef6b07e27d 100644
--- a/3party/boost/boost/config/compiler/gcc.hpp
+++ b/3party/boost/boost/config/compiler/gcc.hpp
@@ -1,12 +1,12 @@
-// (C) Copyright John Maddock 2001 - 2003.
-// (C) Copyright Darin Adler 2001 - 2002.
-// (C) Copyright Jens Maurer 2001 - 2002.
-// (C) Copyright Beman Dawes 2001 - 2003.
-// (C) Copyright Douglas Gregor 2002.
-// (C) Copyright David Abrahams 2002 - 2003.
-// (C) Copyright Synge Todo 2003.
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001 - 2002.
+// (C) Copyright Jens Maurer 2001 - 2002.
+// (C) Copyright Beman Dawes 2001 - 2003.
+// (C) Copyright Douglas Gregor 2002.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Synge Todo 2003.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -20,51 +20,12 @@
#define BOOST_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
#endif
-#if __GNUC__ < 3
-# if __GNUC_MINOR__ == 91
- // egcs 1.1 won't parse shared_ptr.hpp without this:
-# define BOOST_NO_AUTO_PTR
-# endif
-# if __GNUC_MINOR__ < 95
- //
- // Prior to gcc 2.95 member templates only partly
- // work - define BOOST_MSVC6_MEMBER_TEMPLATES
- // instead since inline member templates mostly work.
- //
-# define BOOST_NO_MEMBER_TEMPLATES
-# if __GNUC_MINOR__ >= 9
-# define BOOST_MSVC6_MEMBER_TEMPLATES
-# endif
-# endif
-
-# if __GNUC_MINOR__ < 96
-# define BOOST_NO_SFINAE
-# endif
-
-# if __GNUC_MINOR__ <= 97
-# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
-# define BOOST_NO_OPERATORS_IN_NAMESPACE
-# endif
-
-# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
-# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
-# define BOOST_NO_IS_ABSTRACT
-# define BOOST_NO_CXX11_EXTERN_TEMPLATE
-// Variadic macros do not exist for gcc versions before 3.0
-# define BOOST_NO_CXX11_VARIADIC_MACROS
-#elif __GNUC__ == 3
+#if __GNUC__ == 3
# if defined (__PATHSCALE__)
# define BOOST_NO_TWO_PHASE_NAME_LOOKUP
# define BOOST_NO_IS_ABSTRACT
# endif
- //
- // gcc-3.x problems:
- //
- // Bug specific to gcc 3.1 and 3.2:
- //
-# if ((__GNUC_MINOR__ == 1) || (__GNUC_MINOR__ == 2))
-# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
-# endif
+
# if __GNUC_MINOR__ < 4
# define BOOST_NO_IS_ABSTRACT
# endif
@@ -80,6 +41,11 @@
# endif
#endif
+// GCC prior to 3.4 had #pragma once too but it didn't work well with filesystem links
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+#define BOOST_HAS_PRAGMA_ONCE
+#endif
+
#if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
// Previous versions of GCC did not completely implement value-initialization:
// GCC Bug 30111, "Value-initialization of POD base class doesn't initialize
@@ -104,38 +70,44 @@
//
#if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__)
# define BOOST_HAS_THREADS
-#endif
+#endif
//
// gcc has "long long"
+// Except on Darwin with standard compliance enabled (-pedantic)
+// Apple gcc helpfully defines this macro we can query
//
-#define BOOST_HAS_LONG_LONG
+#if !defined(__DARWIN_NO_LONG_LONG)
+# define BOOST_HAS_LONG_LONG
+#endif
//
// gcc implements the named return value optimization since version 3.1
//
-#if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 )
#define BOOST_HAS_NRVO
-#endif
+
+// Branch prediction hints
+#define BOOST_LIKELY(x) __builtin_expect(x, 1)
+#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
//
// Dynamic shared object (DSO) and dynamic-link library (DLL) support
//
#if __GNUC__ >= 4
# if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && !defined(__CYGWIN__)
- // All Win32 development environments, including 64-bit Windows and MinGW, define
+ // All Win32 development environments, including 64-bit Windows and MinGW, define
// _WIN32 or one of its variant spellings. Note that Cygwin is a POSIX environment,
// so does not define _WIN32 or its variants.
# define BOOST_HAS_DECLSPEC
-# define BOOST_SYMBOL_EXPORT __attribute__((dllexport))
-# define BOOST_SYMBOL_IMPORT __attribute__((dllimport))
+# define BOOST_SYMBOL_EXPORT __attribute__((__dllexport__))
+# define BOOST_SYMBOL_IMPORT __attribute__((__dllimport__))
# else
-# define BOOST_SYMBOL_EXPORT __attribute__((visibility("default")))
+# define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default")))
# define BOOST_SYMBOL_IMPORT
# endif
-# define BOOST_SYMBOL_VISIBLE __attribute__((visibility("default")))
+# define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
#else
-// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
+// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
# define BOOST_SYMBOL_EXPORT
#endif
@@ -158,7 +130,7 @@
//
// We disable this if the compiler is really nvcc as it
// doesn't actually support __int128 as of CUDA_VERSION=5000
-// even though it defines __SIZEOF_INT128__.
+// even though it defines __SIZEOF_INT128__.
// See https://svn.boost.org/trac/boost/ticket/8048
// Only re-enable this for nvcc if you're absolutely sure
// of the circumstances under which it's supported:
@@ -183,7 +155,7 @@
# define BOOST_NO_CXX11_RVALUE_REFERENCES
# define BOOST_NO_CXX11_STATIC_ASSERT
-// Variadic templates compiler:
+// Variadic templates compiler:
// http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html
# if defined(__VARIADIC_TEMPLATES) || (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4) && defined(__GXX_EXPERIMENTAL_CXX0X__))
# define BOOST_HAS_VARIADIC_TMPL
@@ -202,12 +174,19 @@
# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
# define BOOST_NO_CXX11_DELETED_FUNCTIONS
+# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+# define BOOST_NO_CXX11_INLINE_NAMESPACES
#endif
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
# define BOOST_NO_SFINAE_EXPR
#endif
+// GCC 4.5 forbids declaration of defaulted functions in private or protected sections
+#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 5)
+# define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS
+#endif
+
// C++0x features in 4.5.0 and later
//
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
@@ -243,10 +222,17 @@
# define BOOST_NO_CXX11_USER_DEFINED_LITERALS
#endif
+// C++0x features in 4.8.n and later
+//
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
+# define BOOST_NO_CXX11_ALIGNAS
+#endif
+
// C++0x features in 4.8.1 and later
//
#if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40801) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
# define BOOST_NO_CXX11_DECLTYPE_N3276
+# define BOOST_NO_CXX11_REF_QUALIFIERS
#endif
#ifndef BOOST_COMPILER
@@ -261,8 +247,8 @@
#endif
// versions check:
-// we don't know gcc prior to version 2.90:
-#if (__GNUC__ == 2) && (__GNUC_MINOR__ < 90)
+// we don't know gcc prior to version 3.30:
+#if (__GNUC__ < 3) || (__GNUC__ == 3 && (__GNUC_MINOR__ < 3))
# error "Compiler not configured - please reconfigure"
#endif
//
diff --git a/3party/boost/boost/config/compiler/gcc_xml.hpp b/3party/boost/boost/config/compiler/gcc_xml.hpp
index 1af2fc1ab6..f04af0618c 100644
--- a/3party/boost/boost/config/compiler/gcc_xml.hpp
+++ b/3party/boost/boost/config/compiler/gcc_xml.hpp
@@ -1,6 +1,6 @@
-// (C) Copyright John Maddock 2006.
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// (C) Copyright John Maddock 2006.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -18,7 +18,7 @@
//
#if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(linux) && !defined(__linux) && !defined(__linux__)
# define BOOST_HAS_THREADS
-#endif
+#endif
//
// gcc has "long long"
@@ -44,7 +44,7 @@
# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
# define BOOST_NO_CXX11_DELETED_FUNCTIONS
# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-# define BOOST_NO_CXX11_SCOPED_ENUMS
+# define BOOST_NO_CXX11_SCOPED_ENUMS
# define BOOST_NO_SFINAE_EXPR
# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
# define BOOST_NO_CXX11_LAMBDAS
@@ -55,6 +55,10 @@
# define BOOST_NO_CXX11_NOEXCEPT
# define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
# define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+# define BOOST_NO_CXX11_ALIGNAS
+# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+# define BOOST_NO_CXX11_INLINE_NAMESPACES
+# define BOOST_NO_CXX11_REF_QUALIFIERS
#define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__
diff --git a/3party/boost/boost/config/compiler/hp_acc.hpp b/3party/boost/boost/config/compiler/hp_acc.hpp
index 12c791b356..fb63839a57 100644
--- a/3party/boost/boost/config/compiler/hp_acc.hpp
+++ b/3party/boost/boost/config/compiler/hp_acc.hpp
@@ -1,11 +1,11 @@
-// (C) Copyright John Maddock 2001 - 2003.
-// (C) Copyright Jens Maurer 2001 - 2003.
-// (C) Copyright Aleksey Gurtovoy 2002.
-// (C) Copyright David Abrahams 2002 - 2003.
-// (C) Copyright Toon Knapen 2003.
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Toon Knapen 2003.
// (C) Copyright Boris Gubenko 2006 - 2007.
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -43,7 +43,7 @@
# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
# define BOOST_NO_IS_ABSTRACT
# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
-#endif
+#endif
// optional features rather than defects:
#if (__HP_aCC >= 33900)
@@ -119,8 +119,12 @@
#define BOOST_NO_CXX11_UNICODE_LITERALS
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
-/*
+/*
See https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443331 and
https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443436
*/
diff --git a/3party/boost/boost/config/compiler/intel.hpp b/3party/boost/boost/config/compiler/intel.hpp
index e94540a5ba..cbc9422f61 100644
--- a/3party/boost/boost/config/compiler/intel.hpp
+++ b/3party/boost/boost/config/compiler/intel.hpp
@@ -27,7 +27,7 @@
#endif
// Flags determined by comparing output of 'icpc -dM -E' with and without '-std=c++0x'
-#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && (__STDC_HOSTED__ && (BOOST_INTEL_CXX_VERSION <= 1200))) || defined(__GXX_EXPERIMENTAL_CPP0X__)
+#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && (__STDC_HOSTED__ && (BOOST_INTEL_CXX_VERSION <= 1200))) || defined(__GXX_EXPERIMENTAL_CPP0X__) || defined(__GXX_EXPERIMENTAL_CXX0X__)
# define BOOST_INTEL_STDCXX0X
#endif
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
@@ -47,11 +47,6 @@
# define BOOST_INTEL_LINUX BOOST_INTEL
#endif
-#if (BOOST_INTEL_CXX_VERSION <= 500) && defined(_MSC_VER)
-# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
-# define BOOST_NO_TEMPLATE_TEMPLATES
-#endif
-
#if (BOOST_INTEL_CXX_VERSION <= 600)
# if defined(_MSC_VER) && (_MSC_VER <= 1300) // added check for <= VC 7 (Peter Dimov)
@@ -111,7 +106,7 @@
# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
# endif
#endif
-#if (defined(__GNUC__) && (__GNUC__ < 4)) || defined(_WIN32) || (BOOST_INTEL_CXX_VERSION <= 1200)
+#if (defined(__GNUC__) && (__GNUC__ < 4)) || (defined(_WIN32) && (BOOST_INTEL_CXX_VERSION <= 1200)) || (BOOST_INTEL_CXX_VERSION <= 1200)
// GCC or VC emulation:
#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
#endif
@@ -154,10 +149,18 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
# define BOOST_HAS_NRVO
#endif
+// Branch prediction hints
+// I'm not sure 8.0 was the first version to support these builtins,
+// update the condition if the version is not accurate. (Andrey Semashev)
+#if defined(__GNUC__) && BOOST_INTEL_CXX_VERSION >= 800
+#define BOOST_LIKELY(x) __builtin_expect(x, 1)
+#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
+#endif
+
//
// versions check:
-// we don't support Intel prior to version 5.0:
-#if BOOST_INTEL_CXX_VERSION < 500
+// we don't support Intel prior to version 6.0:
+#if BOOST_INTEL_CXX_VERSION < 600
# error "Compiler not supported or configured - please reconfigure"
#endif
@@ -173,10 +176,10 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
//
// An attempt to value-initialize a pointer-to-member may trigger an
-// internal error on Intel <= 11.1 (last checked version), as was
+// internal error on Intel <= 11.1 (last checked version), as was
// reported by John Maddock, Intel support issue 589832, May 2010.
// Moreover, according to test results from Huang-Vista-x86_32_intel,
-// intel-vc9-win-11.1 may leave a non-POD array uninitialized, in some
+// intel-vc9-win-11.1 may leave a non-POD array uninitialized, in some
// cases when it should be value-initialized.
// (Niels Dekker, LKEB, May 2010)
// Apparently Intel 12.1 (compiler version number 9999 !!) has the same issue (compiler regression).
@@ -221,10 +224,11 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
# undef BOOST_NO_CXX11_DECLTYPE
# undef BOOST_NO_CXX11_AUTO_DECLARATIONS
# undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+# undef BOOST_NO_CXX11_TRAILING_RESULT_TYPES
#endif
// icl Version 12.1.0.233 Build 20110811 and possibly some other builds
-// had an incorrect __INTEL_COMPILER value of 9999. Intel say this has been fixed.
+// had an incorrect __INTEL_COMPILER value of 9999. Intel say this has been fixed.
#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION > 1200)
# undef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
# undef BOOST_NO_CXX11_NULLPTR
@@ -234,8 +238,45 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
# undef BOOST_NO_CXX11_VARIADIC_TEMPLATES
// http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler/
-// continues to list scoped enum support as "Partial"
-//# undef BOOST_NO_CXX11_SCOPED_ENUMS
+// continues to list scoped enum support as "Partial"
+//# undef BOOST_NO_CXX11_SCOPED_ENUMS
+#endif
+#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION >= 1310) && !defined(_MSC_VER)
+# undef BOOST_NO_CXX11_INLINE_NAMESPACES
+# undef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+// This one generates internal compiler errors in multiprecision, disabled for now:
+//# undef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+// This one generates errors when used with conditional exception specifications, for example in multiprecision:
+//# undef BOOST_NO_CXX11_NOEXCEPT
+# undef BOOST_NO_CXX11_RANGE_BASED_FOR
+# undef BOOST_NO_CXX11_SCOPED_ENUMS
+# undef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#endif
+#if (BOOST_INTEL_CXX_VERSION >= 1310)
+# undef BOOST_NO_SFINAE_EXPR
+#endif
+#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION >= 1400) && !defined(_MSC_VER)
+# undef BOOST_NO_CXX11_UNICODE_LITERALS
+# undef BOOST_NO_CXX11_RAW_LITERALS
+// This one generates errors when used with conditional exception specifications, for example in multiprecision:
+//# undef BOOST_NO_CXX11_NOEXCEPT
+// This breaks multiprecision:
+//# undef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+# undef BOOST_NO_CXX11_HDR_THREAD
+# undef BOOST_NO_CXX11_CHAR32_T
+# undef BOOST_NO_CXX11_CHAR16_T
+# undef BOOST_NO_CXX11_REF_QUALIFIERS
+#endif
+
+#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION <= 1310)
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#endif
+
+#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION == 1400)
+// A regression in Intel's compiler means that <tuple> seems to be broken in this release as well as <future> :
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_TUPLE
#endif
#if defined(_MSC_VER) && (_MSC_VER <= 1700)
@@ -247,6 +288,9 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
# define BOOST_NO_CXX11_DELETED_FUNCTIONS
# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
# define BOOST_NO_CXX11_TEMPLATE_ALIASES
+# if(BOOST_INTEL_CXX_VERSION < 1310)
+# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+# endif
#endif
#if (BOOST_INTEL_CXX_VERSION < 1200)
@@ -256,9 +300,17 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
# define BOOST_NO_FENV_H
#endif
+#if defined(_MSC_VER) && (_MSC_VER >= 1600)
+# define BOOST_HAS_STDINT_H
+#endif
+
+#if defined(__LP64__) && defined(__GNUC__) && (BOOST_INTEL_CXX_VERSION >= 1310)
+# define BOOST_HAS_INT128
+#endif
+
//
// last known and checked version:
-#if (BOOST_INTEL_CXX_VERSION > 1200)
+#if (BOOST_INTEL_CXX_VERSION > 1310)
# if defined(BOOST_ASSERT_CONFIG)
# error "Unknown compiler version - please run the configure tests and report the results"
# elif defined(_MSC_VER)
diff --git a/3party/boost/boost/config/compiler/metrowerks.hpp b/3party/boost/boost/config/compiler/metrowerks.hpp
index 4ca8af8a46..c000215bb6 100644
--- a/3party/boost/boost/config/compiler/metrowerks.hpp
+++ b/3party/boost/boost/config/compiler/metrowerks.hpp
@@ -1,11 +1,11 @@
-// (C) Copyright John Maddock 2001.
-// (C) Copyright Darin Adler 2001.
-// (C) Copyright Peter Dimov 2001.
-// (C) Copyright David Abrahams 2001 - 2002.
-// (C) Copyright Beman Dawes 2001 - 2003.
-// (C) Copyright Stefan Slapeta 2004.
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Darin Adler 2001.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright David Abrahams 2001 - 2002.
+// (C) Copyright Beman Dawes 2001 - 2003.
+// (C) Copyright Stefan Slapeta 2004.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -15,7 +15,7 @@
// locale support is disabled when linking with the dynamic runtime
# ifdef _MSL_NO_LOCALE
# define BOOST_NO_STD_LOCALE
-# endif
+# endif
# if __MWERKS__ <= 0x2301 // 5.3
# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
@@ -90,7 +90,7 @@
#if __MWERKS__ > 0x3206 && __option(rvalue_refs)
# define BOOST_HAS_RVALUE_REFS
#else
-# define BOOST_NO_CXX11_RVALUE_REFERENCES
+# define BOOST_NO_CXX11_RVALUE_REFERENCES
#endif
#define BOOST_NO_CXX11_AUTO_DECLARATIONS
#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
@@ -120,6 +120,10 @@
#define BOOST_NO_CXX11_VARIADIC_MACROS
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
#define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
diff --git a/3party/boost/boost/config/compiler/mpw.hpp b/3party/boost/boost/config/compiler/mpw.hpp
index 7ef38efa66..7a4ffa1507 100644
--- a/3party/boost/boost/config/compiler/mpw.hpp
+++ b/3party/boost/boost/config/compiler/mpw.hpp
@@ -1,7 +1,7 @@
-// (C) Copyright John Maddock 2001 - 2002.
-// (C) Copyright Aleksey Gurtovoy 2002.
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// (C) Copyright John Maddock 2001 - 2002.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -69,7 +69,10 @@
#define BOOST_NO_CXX11_VARIADIC_MACROS
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
-
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
//
// versions check:
// we don't support MPW prior to version 8.9:
diff --git a/3party/boost/boost/config/compiler/nvcc.hpp b/3party/boost/boost/config/compiler/nvcc.hpp
index 03203fb55b..bbe81f6ee5 100644
--- a/3party/boost/boost/config/compiler/nvcc.hpp
+++ b/3party/boost/boost/config/compiler/nvcc.hpp
@@ -14,15 +14,3 @@
// NVIDIA Specific support
// BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device
#define BOOST_GPU_ENABLED __host__ __device__
-
-// Boost support macro for NVCC
-// NVCC Basically behaves like some flavor of MSVC6 + some specific quirks
-#ifdef __GNUC__
-
-#include <boost/config/compiler/gcc.hpp>
-
-#elif defined(_MSC_VER)
-
-#include <boost/config/compiler/visualc.hpp>
-
-#endif
diff --git a/3party/boost/boost/config/compiler/pathscale.hpp b/3party/boost/boost/config/compiler/pathscale.hpp
index 07d14609c2..0625d7a1eb 100644
--- a/3party/boost/boost/config/compiler/pathscale.hpp
+++ b/3party/boost/boost/config/compiler/pathscale.hpp
@@ -1,7 +1,7 @@
// (C) Copyright Bryce Lelbach 2011
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -77,5 +77,8 @@
# define BOOST_NO_CXX11_HDR_CODECVT
# define BOOST_NO_CXX11_HDR_CHRONO
# define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+# define BOOST_NO_CXX11_ALIGNAS
+# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+# define BOOST_NO_CXX11_INLINE_NAMESPACES
+# define BOOST_NO_CXX11_REF_QUALIFIERS
#endif
-
diff --git a/3party/boost/boost/config/compiler/pgi.hpp b/3party/boost/boost/config/compiler/pgi.hpp
index 64c0d753aa..5cf61fa948 100644
--- a/3party/boost/boost/config/compiler/pgi.hpp
+++ b/3party/boost/boost/config/compiler/pgi.hpp
@@ -41,6 +41,9 @@
#define BOOST_HAS_THREADS
#define BOOST_HAS_NRVO
#define BOOST_HAS_LONG_LONG
+#if defined(linux) || defined(__linux) || defined(__linux__)
+# define BOOST_HAS_STDINT_H
+#endif
// options --enable-test wants undefined
#undef BOOST_NO_STDC_NAMESPACE
@@ -112,6 +115,10 @@
#define BOOST_NO_CXX11_HDR_CHRONO
#define BOOST_NO_CXX11_HDR_ARRAY
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
//
// version check:
diff --git a/3party/boost/boost/config/compiler/sunpro_cc.hpp b/3party/boost/boost/config/compiler/sunpro_cc.hpp
index 88421ee402..f2c857629a 100644
--- a/3party/boost/boost/config/compiler/sunpro_cc.hpp
+++ b/3party/boost/boost/config/compiler/sunpro_cc.hpp
@@ -1,10 +1,10 @@
-// (C) Copyright John Maddock 2001.
-// (C) Copyright Jens Maurer 2001 - 2003.
-// (C) Copyright Peter Dimov 2002.
-// (C) Copyright Aleksey Gurtovoy 2002 - 2003.
-// (C) Copyright David Abrahams 2002.
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// (C) Copyright Peter Dimov 2002.
+// (C) Copyright Aleksey Gurtovoy 2002 - 2003.
+// (C) Copyright David Abrahams 2002.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -34,7 +34,7 @@
# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# endif
-# if (__SUNPRO_CC <= 0x530)
+# if (__SUNPRO_CC <= 0x530)
// Requesting debug info (-g) with Boost.Python results
// in an internal compiler error for "static const"
// initialized in-class.
@@ -57,7 +57,7 @@
# define BOOST_NO_INTEGRAL_INT64_T
# endif
-# if (__SUNPRO_CC < 0x570)
+# if (__SUNPRO_CC < 0x570)
# define BOOST_NO_TEMPLATE_TEMPLATES
// see http://lists.boost.org/MailArchives/boost/msg47184.php
// and http://lists.boost.org/MailArchives/boost/msg47220.php
@@ -65,7 +65,7 @@
# define BOOST_NO_SFINAE
# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
# endif
-# if (__SUNPRO_CC <= 0x580)
+# if (__SUNPRO_CC <= 0x580)
# define BOOST_NO_IS_ABSTRACT
# endif
@@ -128,6 +128,10 @@
#define BOOST_NO_CXX11_VARIADIC_MACROS
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
//
// Version
diff --git a/3party/boost/boost/config/compiler/vacpp.hpp b/3party/boost/boost/config/compiler/vacpp.hpp
index 47b990315b..bb7d5f5065 100644
--- a/3party/boost/boost/config/compiler/vacpp.hpp
+++ b/3party/boost/boost/config/compiler/vacpp.hpp
@@ -1,10 +1,10 @@
-// (C) Copyright John Maddock 2001 - 2003.
-// (C) Copyright Toon Knapen 2001 - 2003.
-// (C) Copyright Lie-Quan Lee 2001.
-// (C) Copyright Markus Schoepflin 2002 - 2003.
-// (C) Copyright Beman Dawes 2002 - 2003.
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Toon Knapen 2001 - 2003.
+// (C) Copyright Lie-Quan Lee 2001.
+// (C) Copyright Markus Schoepflin 2002 - 2003.
+// (C) Copyright Beman Dawes 2002 - 2003.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -16,7 +16,7 @@
# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
#endif
-#if (__IBMCPP__ <= 502)
+#if (__IBMCPP__ <= 502)
// Actually the compiler supports inclass member initialization but it
// requires a definition for the class member and it doesn't recognize
// it as an integral constant expression when used as a template argument.
@@ -30,9 +30,9 @@
#endif
#if (__IBMCPP__ <= 1110)
-// XL C++ V11.1 and earlier versions may not always value-initialize
-// a temporary object T(), when T is a non-POD aggregate class type.
-// Michael Wong (IBM Canada Ltd) has confirmed this issue and gave it
+// XL C++ V11.1 and earlier versions may not always value-initialize
+// a temporary object T(), when T is a non-POD aggregate class type.
+// Michael Wong (IBM Canada Ltd) has confirmed this issue and gave it
// high priority. -- Niels Dekker (LKEB), May 2010.
# define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
#endif
@@ -126,6 +126,7 @@
#if ! __C99_MACRO_WITH_VA_ARGS
# define BOOST_NO_CXX11_VARIADIC_MACROS
#endif
-
-
-
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
diff --git a/3party/boost/boost/config/compiler/visualc.hpp b/3party/boost/boost/config/compiler/visualc.hpp
index 83e8e3d79c..842f086515 100644
--- a/3party/boost/boost/config/compiler/visualc.hpp
+++ b/3party/boost/boost/config/compiler/visualc.hpp
@@ -1,11 +1,11 @@
-// (C) Copyright John Maddock 2001 - 2003.
-// (C) Copyright Darin Adler 2001 - 2002.
-// (C) Copyright Peter Dimov 2001.
-// (C) Copyright Aleksey Gurtovoy 2002.
-// (C) Copyright David Abrahams 2002 - 2003.
-// (C) Copyright Beman Dawes 2002 - 2003.
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0. (See accompanying file
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001 - 2002.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Beman Dawes 2002 - 2003.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for most recent version.
@@ -34,67 +34,20 @@
// Attempt to suppress VC6 warnings about the length of decorated names (obsolete):
#pragma warning( disable : 4503 ) // warning: decorated name length exceeded
+#define BOOST_HAS_PRAGMA_ONCE
+
//
// versions check:
-// we don't support Visual C++ prior to version 6:
-#if _MSC_VER < 1200
+// we don't support Visual C++ prior to version 7.1:
+#if _MSC_VER < 1310
# error "Compiler not supported or configured - please reconfigure"
#endif
-#if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1200-1202 == eVC++4
-# pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info
-# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
-# define BOOST_NO_VOID_RETURNS
-# define BOOST_NO_EXCEPTION_STD_NAMESPACE
-
-# if _MSC_VER == 1202
-# define BOOST_NO_STD_TYPEINFO
-# endif
-
-#endif
-
-/// Visual Studio has no fenv.h
-#define BOOST_NO_FENV_H
-
-#if (_MSC_VER < 1310) // 130X == VC++ 7.0
-
-# if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za
-# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
-# endif
-
-# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
-# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
-# define BOOST_NO_PRIVATE_IN_AGGREGATE
-# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
-# define BOOST_NO_INTEGRAL_INT64_T
-# define BOOST_NO_DEDUCED_TYPENAME
-# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
-
-// VC++ 6/7 has member templates but they have numerous problems including
-// cases of silent failure, so for safety we define:
-# define BOOST_NO_MEMBER_TEMPLATES
-// For VC++ experts wishing to attempt workarounds, we define:
-# define BOOST_MSVC6_MEMBER_TEMPLATES
-
-# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
-# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-# define BOOST_NO_CV_VOID_SPECIALIZATIONS
-# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-# define BOOST_NO_USING_TEMPLATE
-# define BOOST_NO_SWPRINTF
-# define BOOST_NO_TEMPLATE_TEMPLATES
-# define BOOST_NO_SFINAE
-# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS
-# define BOOST_NO_IS_ABSTRACT
-# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS
-// TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)?
-# if (_MSC_VER >= 1300)
-# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
-# endif
-
+#if _MSC_FULL_VER < 180020827
+# define BOOST_NO_FENV_H
#endif
-#if _MSC_VER < 1400
+#if _MSC_VER < 1400
// although a conforming signature for swprint exists in VC7.1
// it appears not to actually work:
# define BOOST_NO_SWPRINTF
@@ -104,11 +57,6 @@
# define BOOST_NO_CXX11_VARIADIC_MACROS
#endif
-#if defined(UNDER_CE)
-// Windows CE does not have a conforming signature for swprintf
-# define BOOST_NO_SWPRINTF
-#endif
-
#if _MSC_VER < 1500 // 140X == VC++ 8.0
# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
#endif
@@ -119,9 +67,9 @@
#endif
-// MSVC (including the latest checked version) has not yet completely
+// MSVC (including the latest checked version) has not yet completely
// implemented value-initialization, as is reported:
-// "VC++ does not value-initialize members of derived classes without
+// "VC++ does not value-initialize members of derived classes without
// user-declared constructor", reported in 2009 by Sylvester Hesp:
// https://connect.microsoft.com/VisualStudio/feedback/details/484295
// "Presence of copy constructor breaks member class initialization",
@@ -138,29 +86,17 @@
# define BOOST_NO_INTRINSIC_WCHAR_T
#endif
-#if defined(_WIN32_WCE) || defined(UNDER_CE)
-# define BOOST_NO_SWPRINTF
-#endif
-
-// we have ThreadEx or GetSystemTimeAsFileTime unless we're running WindowsCE
-#if !defined(_WIN32_WCE) && !defined(UNDER_CE)
-# define BOOST_HAS_THREADEX
-# define BOOST_HAS_GETSYSTEMTIMEASFILETIME
-#endif
-
-//
-// check for exception handling support:
+//
+// check for exception handling support:
#if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS)
-# define BOOST_NO_EXCEPTIONS
-#endif
+# define BOOST_NO_EXCEPTIONS
+#endif
//
// __int64 support:
//
-#if (_MSC_VER >= 1200)
-# define BOOST_HAS_MS_INT64
-#endif
-#if (_MSC_VER >= 1310) && (defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1400))
+#define BOOST_HAS_MS_INT64
+#if defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1400)
# define BOOST_HAS_LONG_LONG
#else
# define BOOST_NO_LONG_LONG
@@ -169,7 +105,7 @@
# define BOOST_HAS_NRVO
#endif
//
-// disable Win32 API's if compiler extentions are
+// disable Win32 API's if compiler extensions are
// turned off:
//
#if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32)
@@ -210,38 +146,40 @@
# define BOOST_HAS_STDINT_H
#endif
-// C++ features supported by VC++ 11 (aka 2012)
+// C++11 features supported by VC++ 11 (aka 2012)
//
#if _MSC_VER < 1700
# define BOOST_NO_CXX11_RANGE_BASED_FOR
# define BOOST_NO_CXX11_SCOPED_ENUMS
#endif // _MSC_VER < 1700
-// C++11 features supported by VC++ 11 (aka 2012) November 2012 CTP
-// Because the CTP is unsupported, unrelease, and only alpha quality,
-// it is only supported if BOOST_MSVC_ENABLE_2012_NOV_CTP is defined.
+// C++11 features supported by VC++ 12 (aka 2013).
//
-#if _MSC_FULL_VER < 170051025 || !defined(BOOST_MSVC_ENABLE_2012_NOV_CTP)
+#if _MSC_FULL_VER < 180020827
+# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+# define BOOST_NO_CXX11_DELETED_FUNCTIONS
# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
# define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
# define BOOST_NO_CXX11_RAW_LITERALS
+# define BOOST_NO_CXX11_TEMPLATE_ALIASES
+# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
# define BOOST_NO_CXX11_VARIADIC_TEMPLATES
# define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+# define BOOST_NO_CXX11_DECLTYPE_N3276
#endif
// C++11 features not supported by any versions
#define BOOST_NO_CXX11_CHAR16_T
#define BOOST_NO_CXX11_CHAR32_T
#define BOOST_NO_CXX11_CONSTEXPR
-#define BOOST_NO_CXX11_DECLTYPE_N3276
-#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
-#define BOOST_NO_CXX11_DELETED_FUNCTIONS
#define BOOST_NO_CXX11_NOEXCEPT
-#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
#define BOOST_NO_CXX11_UNICODE_LITERALS
#define BOOST_NO_SFINAE_EXPR
#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
//
// prefix and suffix headers:
@@ -255,17 +193,13 @@
#ifndef BOOST_COMPILER
// TODO:
-// these things are mostly bogus. 1200 means version 12.0 of the compiler. The
+// these things are mostly bogus. 1200 means version 12.0 of the compiler. The
// artificial versions assigned to them only refer to the versions of some IDE
// these compilers have been shipped with, and even that is not all of it. Some
// were shipped with freely downloadable SDKs, others as crosscompilers in eVC.
// IOW, you can't use these 'versions' in any sensible way. Sorry.
# if defined(UNDER_CE)
-# if _MSC_VER < 1200
- // Note: these are so far off, they are not really supported
-# elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202
-# define BOOST_COMPILER_VERSION evc4.0
-# elif _MSC_VER < 1400
+# if _MSC_VER < 1400
// Note: I'm not aware of any CE compiler with version 13xx
# if defined(BOOST_ASSERT_CONFIG)
# error "Unknown EVC++ compiler version - please run the configure tests and report the results"
@@ -280,6 +214,8 @@
# define BOOST_COMPILER_VERSION evc10
# elif _MSC_VER < 1800
# define BOOST_COMPILER_VERSION evc11
+# elif _MSC_VER < 1900
+# define BOOST_COMPILER_VERSION evc12
# else
# if defined(BOOST_ASSERT_CONFIG)
# error "Unknown EVC++ compiler version - please run the configure tests and report the results"
@@ -288,11 +224,11 @@
# endif
# endif
# else
-# if _MSC_VER < 1200
- // Note: these are so far off, they are not really supported
+# if _MSC_VER < 1310
+ // Note: Versions up to 7.0 aren't supported.
# define BOOST_COMPILER_VERSION 5.0
# elif _MSC_VER < 1300
-# define BOOST_COMPILER_VERSION 6.0
+# define BOOST_COMPILER_VERSION 6.0
# elif _MSC_VER < 1310
# define BOOST_COMPILER_VERSION 7.0
# elif _MSC_VER < 1400
@@ -304,7 +240,9 @@
# elif _MSC_VER < 1700
# define BOOST_COMPILER_VERSION 10.0
# elif _MSC_VER < 1800
-# define BOOST_COMPILER_VERSION 11.0
+# define BOOST_COMPILER_VERSION 11.0
+# elif _MSC_VER < 1900
+# define BOOST_COMPILER_VERSION 12.0
# else
# define BOOST_COMPILER_VERSION _MSC_VER
# endif
@@ -314,8 +252,8 @@
#endif
//
-// last known and checked version is 1700 (VC11, aka 2011):
-#if (_MSC_VER > 1700)
+// last known and checked version is 18.00.20827.3 (VC12 RC, aka 2013 RC):
+#if (_MSC_VER > 1800 && _MSC_FULL_VER > 180020827)
# if defined(BOOST_ASSERT_CONFIG)
# error "Unknown compiler version - please run the configure tests and report the results"
# else
diff --git a/3party/boost/boost/config/platform/win32.hpp b/3party/boost/boost/config/platform/win32.hpp
index 6ab59f4e91..2a91519e20 100644
--- a/3party/boost/boost/config/platform/win32.hpp
+++ b/3party/boost/boost/config/platform/win32.hpp
@@ -55,14 +55,21 @@
// all translation units (needed for shared_ptr etc).
//
-#ifdef _WIN32_WCE
+#ifndef BOOST_HAS_PTHREADS
+# define BOOST_HAS_WINTHREADS
+#endif
+
+//
+// WinCE configuration:
+//
+#if defined(_WIN32_WCE) || defined(UNDER_CE)
# define BOOST_NO_ANSI_APIS
+// Windows CE does not have a conforming signature for swprintf
+# define BOOST_NO_SWPRINTF
#else
# define BOOST_HAS_GETSYSTEMTIMEASFILETIME
-#endif
-
-#ifndef BOOST_HAS_PTHREADS
-# define BOOST_HAS_WINTHREADS
+# define BOOST_HAS_THREADEX
+# define BOOST_HAS_GETSYSTEMTIMEASFILETIME
#endif
#ifndef BOOST_DISABLE_WIN32
diff --git a/3party/boost/boost/config/select_compiler_config.hpp b/3party/boost/boost/config/select_compiler_config.hpp
index 8683d65802..62053ba061 100644
--- a/3party/boost/boost/config/select_compiler_config.hpp
+++ b/3party/boost/boost/config/select_compiler_config.hpp
@@ -13,6 +13,12 @@
// locate which compiler we are using and define
// BOOST_COMPILER_CONFIG as needed:
+#if defined __CUDACC__
+// NVIDIA CUDA C++ compiler for GPU
+# include "boost/config/compiler/nvcc.hpp"
+
+#endif
+
#if defined(__GCCXML__)
// GCC-XML emulates other compilers, it has to appear first here!
# define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc_xml.hpp"
@@ -21,10 +27,6 @@
// EDG based Cray compiler:
# define BOOST_COMPILER_CONFIG "boost/config/compiler/cray.hpp"
-#elif defined __CUDACC__
-// NVIDIA CUDA C++ compiler for GPU
-# define BOOST_COMPILER_CONFIG "boost/config/compiler/nvcc.hpp"
-
#elif defined __COMO__
// Comeau C++
# define BOOST_COMPILER_CONFIG "boost/config/compiler/comeau.hpp"
@@ -110,3 +112,32 @@
# error "Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)"
#endif
+
+#if 0
+//
+// This section allows dependency scanners to find all the headers we *might* include:
+//
+#include "boost/config/compiler/gcc_xml.hpp"
+#include "boost/config/compiler/cray.hpp"
+#include "boost/config/compiler/comeau.hpp"
+#include "boost/config/compiler/pathscale.hpp"
+#include "boost/config/compiler/intel.hpp"
+#include "boost/config/compiler/clang.hpp"
+#include "boost/config/compiler/digitalmars.hpp"
+#include "boost/config/compiler/gcc.hpp"
+#include "boost/config/compiler/kai.hpp"
+#include "boost/config/compiler/sgi_mipspro.hpp"
+#include "boost/config/compiler/compaq_cxx.hpp"
+#include "boost/config/compiler/greenhills.hpp"
+#include "boost/config/compiler/codegear.hpp"
+#include "boost/config/compiler/borland.hpp"
+#include "boost/config/compiler/metrowerks.hpp"
+#include "boost/config/compiler/sunpro_cc.hpp"
+#include "boost/config/compiler/hp_acc.hpp"
+#include "boost/config/compiler/mpw.hpp"
+#include "boost/config/compiler/vacpp.hpp"
+#include "boost/config/compiler/pgi.hpp"
+#include "boost/config/compiler/visualc.hpp"
+
+#endif
+
diff --git a/3party/boost/boost/config/select_platform_config.hpp b/3party/boost/boost/config/select_platform_config.hpp
index 2af61d2d46..2dddc6a2f6 100644
--- a/3party/boost/boost/config/select_platform_config.hpp
+++ b/3party/boost/boost/config/select_platform_config.hpp
@@ -101,5 +101,29 @@
#endif
+#if 0
+//
+// This section allows dependency scanners to find all the files we *might* include:
+//
+# include "boost/config/platform/linux.hpp"
+# include "boost/config/platform/bsd.hpp"
+# include "boost/config/platform/solaris.hpp"
+# include "boost/config/platform/irix.hpp"
+# include "boost/config/platform/hpux.hpp"
+# include "boost/config/platform/cygwin.hpp"
+# include "boost/config/platform/win32.hpp"
+# include "boost/config/platform/beos.hpp"
+# include "boost/config/platform/macos.hpp"
+# include "boost/config/platform/aix.hpp"
+# include "boost/config/platform/amigaos.hpp"
+# include "boost/config/platform/qnxnto.hpp"
+# include "boost/config/platform/vxworks.hpp"
+# include "boost/config/platform/symbian.hpp"
+# include "boost/config/platform/cray.hpp"
+# include "boost/config/platform/vms.hpp"
+# include <boost/config/posix_features.hpp>
+
+#endif
+
diff --git a/3party/boost/boost/config/select_stdlib_config.hpp b/3party/boost/boost/config/select_stdlib_config.hpp
index 96ede00222..6ae860b027 100644
--- a/3party/boost/boost/config/select_stdlib_config.hpp
+++ b/3party/boost/boost/config/select_stdlib_config.hpp
@@ -81,5 +81,19 @@
#endif
-
+#if 0
+//
+// This section allows dependency scanners to find all the files we *might* include:
+//
+# include "boost/config/stdlib/stlport.hpp"
+# include "boost/config/stdlib/libcomo.hpp"
+# include "boost/config/stdlib/roguewave.hpp"
+# include "boost/config/stdlib/libcpp.hpp"
+# include "boost/config/stdlib/libstdcpp3.hpp"
+# include "boost/config/stdlib/sgi.hpp"
+# include "boost/config/stdlib/msl.hpp"
+# include "boost/config/stdlib/vacpp.hpp"
+# include "boost/config/stdlib/modena.hpp"
+# include "boost/config/stdlib/dinkumware.hpp"
+#endif
diff --git a/3party/boost/boost/config/stdlib/dinkumware.hpp b/3party/boost/boost/config/stdlib/dinkumware.hpp
index cef6ff24f6..6fb6322acb 100644
--- a/3party/boost/boost/config/stdlib/dinkumware.hpp
+++ b/3party/boost/boost/config/stdlib/dinkumware.hpp
@@ -86,9 +86,18 @@
# define BOOST_NO_STD_LOCALE
#endif
+// Fix for VC++ 8.0 on up ( I do not have a previous version to test )
+// or clang-cl. If exceptions are off you must manually include the
+// <exception> header before including the <typeinfo> header. Admittedly
+// trying to use Boost libraries or the standard C++ libraries without
+// exception support is not suggested but currently clang-cl ( v 3.4 )
+// does not support exceptions and must be compiled with exceptions off.
+#if !_HAS_EXCEPTIONS && ((defined(BOOST_MSVC) && BOOST_MSVC >= 1400) || (defined(__clang__) && defined(_MSC_VER)))
+#include <exception>
+#endif
#include <typeinfo>
#if ( (!_HAS_EXCEPTIONS && !defined(__ghs__)) || (!_HAS_NAMESPACE && defined(__ghs__)) ) && !defined(__TI_COMPILER_VERSION__)
-# define BOOST_NO_STD_TYPEINFO
+# define BOOST_NO_STD_TYPEINFO
#endif
// C++0x headers implemented in 520 (as shipped by Microsoft)
@@ -110,7 +119,8 @@
# define BOOST_NO_CXX11_SMART_PTR
#endif
-#if (!defined(_HAS_TR1_IMPORTS) || (_HAS_TR1_IMPORTS+0 == 0)) && !defined(BOOST_NO_CXX11_HDR_TUPLE)
+#if ((!defined(_HAS_TR1_IMPORTS) || (_HAS_TR1_IMPORTS+0 == 0)) && !defined(BOOST_NO_CXX11_HDR_TUPLE)) \
+ && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 610)
# define BOOST_NO_CXX11_HDR_TUPLE
#endif
@@ -124,14 +134,22 @@
# define BOOST_NO_CXX11_HDR_MUTEX
# define BOOST_NO_CXX11_HDR_RATIO
# define BOOST_NO_CXX11_HDR_THREAD
-# define BOOST_NO_CXX11_ALLOCATOR
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
#endif
+// C++0x headers implemented in 610 (as shipped by Microsoft)
//
-// C++0x headers not yet (fully) implemented:
-//
+#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 610
# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_ATOMIC
+# define BOOST_NO_CXX11_ALLOCATOR
+// 540 has std::align but it is not a conforming implementation
+# define BOOST_NO_CXX11_STD_ALIGN
+#endif
+
+// 520..610 have std::addressof, but it doesn't support functions
+//
+# define BOOST_NO_CXX11_ADDRESSOF
#ifdef _CPPLIB_VER
# define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER
@@ -144,12 +162,3 @@
#else
# define BOOST_STDLIB "Dinkumware standard library version 1.x"
#endif
-
-
-
-
-
-
-
-
-
diff --git a/3party/boost/boost/config/stdlib/libcomo.hpp b/3party/boost/boost/config/stdlib/libcomo.hpp
index 29490f1b13..5aacfb2a7c 100644
--- a/3party/boost/boost/config/stdlib/libcomo.hpp
+++ b/3party/boost/boost/config/stdlib/libcomo.hpp
@@ -58,6 +58,9 @@
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_SMART_PTR
# define BOOST_NO_CXX11_HDR_FUNCTIONAL
+# define BOOST_NO_CXX11_HDR_ATOMIC
+# define BOOST_NO_CXX11_STD_ALIGN
+# define BOOST_NO_CXX11_ADDRESSOF
//
// Intrinsic type_traits support.
diff --git a/3party/boost/boost/config/stdlib/libcpp.hpp b/3party/boost/boost/config/stdlib/libcpp.hpp
index 3d574407ec..88184ef90f 100644
--- a/3party/boost/boost/config/stdlib/libcpp.hpp
+++ b/3party/boost/boost/config/stdlib/libcpp.hpp
@@ -23,6 +23,14 @@
# define BOOST_NO_CXX11_HDR_TUPLE
#endif
+// BOOST_NO_CXX11_ALLOCATOR should imply no support for the C++11
+// allocator model. The C++11 allocator model requires a conforming
+// std::allocator_traits which is only possible with C++11 template
+// aliases since members rebind_alloc and rebind_traits require it.
+#if defined(_LIBCPP_HAS_NO_TEMPLATE_ALIASES)
+# define BOOST_NO_CXX11_ALLOCATOR
+#endif
+
//
// These appear to be unusable/incomplete so far:
//
@@ -30,6 +38,7 @@
# define BOOST_NO_CXX11_HDR_FUTURE
# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+# define BOOST_NO_CXX11_HDR_ATOMIC
// libc++ uses a non-standard messages_base
#define BOOST_NO_STD_MESSAGES
diff --git a/3party/boost/boost/config/stdlib/libstdcpp3.hpp b/3party/boost/boost/config/stdlib/libstdcpp3.hpp
index 976ab76bae..2fd6ea7d53 100644
--- a/3party/boost/boost/config/stdlib/libstdcpp3.hpp
+++ b/3party/boost/boost/config/stdlib/libstdcpp3.hpp
@@ -107,7 +107,6 @@
//
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
# define BOOST_NO_CXX11_HDR_ARRAY
-# define BOOST_NO_CXX11_HDR_REGEX
# define BOOST_NO_CXX11_HDR_TUPLE
# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
# define BOOST_NO_CXX11_HDR_UNORDERED_SET
@@ -146,21 +145,34 @@
//
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
# define BOOST_NO_CXX11_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_ADDRESSOF
#endif
// C++0x features in GCC 4.7.0 and later
//
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
-// Note that although <chrono> existed prior to 4.7, "stead_clock" is spelled "monotonic_clock"
+// Note that although <chrono> existed prior to 4.7, "steady_clock" is spelled "monotonic_clock"
// so 4.7.0 is the first truely conforming one.
# define BOOST_NO_CXX11_HDR_CHRONO
# define BOOST_NO_CXX11_ALLOCATOR
#endif
+// C++0x features in GCC 4.7.0 and later
+//
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
+// Note that although <atomic> existed prior to gcc 4.8 it was largely unimplemented for many types:
+# define BOOST_NO_CXX11_HDR_ATOMIC
+#endif
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
+// Although <regex> is present and compilable against, the actual implementation is not functional
+// even for the simplest patterns such as "\d" or "[0-9]". This is the case at least in gcc up to 4.8, inclusively.
+# define BOOST_NO_CXX11_HDR_REGEX
+#endif
// C++0x headers not yet (fully!) implemented
//
# define BOOST_NO_CXX11_HDR_THREAD
# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
# define BOOST_NO_CXX11_HDR_CODECVT
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+# define BOOST_NO_CXX11_STD_ALIGN
// --- end ---
diff --git a/3party/boost/boost/config/stdlib/modena.hpp b/3party/boost/boost/config/stdlib/modena.hpp
index b483b6e024..f2a83888c0 100644
--- a/3party/boost/boost/config/stdlib/modena.hpp
+++ b/3party/boost/boost/config/stdlib/modena.hpp
@@ -47,6 +47,9 @@
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_SMART_PTR
# define BOOST_NO_CXX11_HDR_FUNCTIONAL
+# define BOOST_NO_CXX11_HDR_ATOMIC
+# define BOOST_NO_CXX11_STD_ALIGN
+# define BOOST_NO_CXX11_ADDRESSOF
#define BOOST_STDLIB "Modena C++ standard library"
diff --git a/3party/boost/boost/config/stdlib/msl.hpp b/3party/boost/boost/config/stdlib/msl.hpp
index 4f9a2da6ee..b8f43a1286 100644
--- a/3party/boost/boost/config/stdlib/msl.hpp
+++ b/3party/boost/boost/config/stdlib/msl.hpp
@@ -71,6 +71,9 @@
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_SMART_PTR
# define BOOST_NO_CXX11_HDR_FUNCTIONAL
+# define BOOST_NO_CXX11_HDR_ATOMIC
+# define BOOST_NO_CXX11_STD_ALIGN
+# define BOOST_NO_CXX11_ADDRESSOF
#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__)
diff --git a/3party/boost/boost/config/stdlib/roguewave.hpp b/3party/boost/boost/config/stdlib/roguewave.hpp
index cb80f57082..2b4e8636c5 100644
--- a/3party/boost/boost/config/stdlib/roguewave.hpp
+++ b/3party/boost/boost/config/stdlib/roguewave.hpp
@@ -183,4 +183,7 @@
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_SMART_PTR
# define BOOST_NO_CXX11_HDR_FUNCTIONAL
+# define BOOST_NO_CXX11_HDR_ATOMIC
+# define BOOST_NO_CXX11_STD_ALIGN
+# define BOOST_NO_CXX11_ADDRESSOF
diff --git a/3party/boost/boost/config/stdlib/sgi.hpp b/3party/boost/boost/config/stdlib/sgi.hpp
index ae9b6ad908..bda77c2275 100644
--- a/3party/boost/boost/config/stdlib/sgi.hpp
+++ b/3party/boost/boost/config/stdlib/sgi.hpp
@@ -141,6 +141,9 @@
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_SMART_PTR
# define BOOST_NO_CXX11_HDR_FUNCTIONAL
+# define BOOST_NO_CXX11_HDR_ATOMIC
+# define BOOST_NO_CXX11_STD_ALIGN
+# define BOOST_NO_CXX11_ADDRESSOF
#define BOOST_STDLIB "SGI standard library"
diff --git a/3party/boost/boost/config/stdlib/stlport.hpp b/3party/boost/boost/config/stdlib/stlport.hpp
index bcc30b99e7..fd5d3a5a6c 100644
--- a/3party/boost/boost/config/stdlib/stlport.hpp
+++ b/3party/boost/boost/config/stdlib/stlport.hpp
@@ -231,6 +231,9 @@ namespace boost { using std::min; using std::max; }
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_SMART_PTR
# define BOOST_NO_CXX11_HDR_FUNCTIONAL
+# define BOOST_NO_CXX11_HDR_ATOMIC
+# define BOOST_NO_CXX11_STD_ALIGN
+# define BOOST_NO_CXX11_ADDRESSOF
#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT)
diff --git a/3party/boost/boost/config/stdlib/vacpp.hpp b/3party/boost/boost/config/stdlib/vacpp.hpp
index 9d16946552..a58ec1c5e1 100644
--- a/3party/boost/boost/config/stdlib/vacpp.hpp
+++ b/3party/boost/boost/config/stdlib/vacpp.hpp
@@ -47,6 +47,9 @@
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_SMART_PTR
# define BOOST_NO_CXX11_HDR_FUNCTIONAL
+# define BOOST_NO_CXX11_HDR_ATOMIC
+# define BOOST_NO_CXX11_STD_ALIGN
+# define BOOST_NO_CXX11_ADDRESSOF
#define BOOST_STDLIB "Visual Age default standard library"
diff --git a/3party/boost/boost/config/suffix.hpp b/3party/boost/boost/config/suffix.hpp
index 21591c9e6b..a3fda5252a 100644
--- a/3party/boost/boost/config/suffix.hpp
+++ b/3party/boost/boost/config/suffix.hpp
@@ -4,7 +4,7 @@
// Copyright (c) 2001-2003 John Maddock
// Copyright (c) 2001 Darin Adler
// Copyright (c) 2001 Peter Dimov
-// Copyright (c) 2002 Bill Kempf
+// Copyright (c) 2002 Bill Kempf
// Copyright (c) 2002 Jens Maurer
// Copyright (c) 2002-2003 David Abrahams
// Copyright (c) 2003 Gennaro Prota
@@ -146,7 +146,7 @@
# endif
//
-// Without partial specialization, partial
+// Without partial specialization, partial
// specialization with default args won't work either:
//
# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
@@ -503,69 +503,8 @@ namespace boost{
#endif
// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//
-//
-// Some compilers have problems with function templates whose template
-// parameters don't appear in the function parameter list (basically
-// they just link one instantiation of the template in the final
-// executable). These macros provide a uniform way to cope with the
-// problem with no effects on the calling syntax.
-
-// Example:
-//
-// #include <iostream>
-// #include <ostream>
-// #include <typeinfo>
-//
-// template <int n>
-// void f() { std::cout << n << ' '; }
-//
-// template <typename T>
-// void g() { std::cout << typeid(T).name() << ' '; }
-//
-// int main() {
-// f<1>();
-// f<2>();
-//
-// g<int>();
-// g<double>();
-// }
-//
-// With VC++ 6.0 the output is:
-//
-// 2 2 double double
-//
-// To fix it, write
-//
-// template <int n>
-// void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... }
-//
-// template <typename T>
-// void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... }
-//
-
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) && defined(__cplusplus)
-
-# include "boost/type.hpp"
-# include "boost/non_type.hpp"
-
-# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) boost::type<t>* = 0
-# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) boost::type<t>*
-# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) boost::non_type<t, v>* = 0
-# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) boost::non_type<t, v>*
-
-# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) \
- , BOOST_EXPLICIT_TEMPLATE_TYPE(t)
-# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) \
- , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
-# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \
- , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
-# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) \
- , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
-
-#else
-
-// no workaround needed: expand to nothing
+// These macros are obsolete. Port away and remove.
# define BOOST_EXPLICIT_TEMPLATE_TYPE(t)
# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
@@ -577,9 +516,6 @@ namespace boost{
# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
-
-#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
-
// When BOOST_NO_STD_TYPEINFO is defined, we can just import
// the global definition into std namespace:
#if defined(BOOST_NO_STD_TYPEINFO) && defined(__cplusplus)
@@ -632,7 +568,7 @@ namespace std{ using ::type_info; }
// Set some default values GPU support
//
# ifndef BOOST_GPU_ENABLED
-# define BOOST_GPU_ENABLED
+# define BOOST_GPU_ENABLED
# endif
// BOOST_FORCEINLINE ---------------------------------------------//
@@ -648,6 +584,99 @@ namespace std{ using ::type_info; }
# endif
#endif
+// BOOST_NOINLINE ---------------------------------------------//
+// Macro to use in place of 'inline' to prevent a function to be inlined
+#if !defined(BOOST_NOINLINE)
+# if defined(_MSC_VER)
+# define BOOST_NOINLINE __declspec(noinline)
+# elif defined(__GNUC__) && __GNUC__ > 3
+ // Clang also defines __GNUC__ (as 4)
+# if defined(__CUDACC__)
+ // nvcc doesn't always parse __noinline__,
+ // see: https://svn.boost.org/trac/boost/ticket/9392
+# define BOOST_NOINLINE __attribute__ ((noinline))
+# else
+# define BOOST_NOINLINE __attribute__ ((__noinline__))
+# endif
+# else
+# define BOOST_NOINLINE
+# endif
+#endif
+
+// BOOST_NORETURN ---------------------------------------------//
+// Macro to use before a function declaration/definition to designate
+// the function as not returning normally (i.e. with a return statement
+// or by leaving the function scope, if the function return type is void).
+#if !defined(BOOST_NORETURN)
+# if defined(_MSC_VER)
+# define BOOST_NORETURN __declspec(noreturn)
+# elif defined(__GNUC__)
+# define BOOST_NORETURN __attribute__ ((__noreturn__))
+# else
+# define BOOST_NO_NORETURN
+# define BOOST_NORETURN
+# endif
+#endif
+
+// Branch prediction hints
+// These macros are intended to wrap conditional expressions that yield true or false
+//
+// if (BOOST_LIKELY(var == 10))
+// {
+// // the most probable code here
+// }
+//
+#if !defined(BOOST_LIKELY)
+# define BOOST_LIKELY(x) x
+#endif
+#if !defined(BOOST_UNLIKELY)
+# define BOOST_UNLIKELY(x) x
+#endif
+
+// Type and data alignment specification
+//
+#if !defined(BOOST_NO_CXX11_ALIGNAS)
+# define BOOST_ALIGNMENT(x) alignas(x)
+#elif defined(_MSC_VER)
+# define BOOST_ALIGNMENT(x) __declspec(align(x))
+#elif defined(__GNUC__)
+# define BOOST_ALIGNMENT(x) __attribute__ ((__aligned__(x)))
+#else
+# define BOOST_NO_ALIGNMENT
+# define BOOST_ALIGNMENT(x)
+#endif
+
+// Defaulted and deleted function declaration helpers
+// These macros are intended to be inside a class definition.
+// BOOST_DEFAULTED_FUNCTION accepts the function declaration and its
+// body, which will be used if the compiler doesn't support defaulted functions.
+// BOOST_DELETED_FUNCTION only accepts the function declaration. It
+// will expand to a private function declaration, if the compiler doesn't support
+// deleted functions. Because of this it is recommended to use BOOST_DELETED_FUNCTION
+// in the end of the class definition.
+//
+// class my_class
+// {
+// public:
+// // Default-constructible
+// BOOST_DEFAULTED_FUNCTION(my_class(), {})
+// // Copying prohibited
+// BOOST_DELETED_FUNCTION(my_class(my_class const&))
+// BOOST_DELETED_FUNCTION(my_class& operator= (my_class const&))
+// };
+//
+#if !(defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS))
+# define BOOST_DEFAULTED_FUNCTION(fun, body) fun = default;
+#else
+# define BOOST_DEFAULTED_FUNCTION(fun, body) fun body
+#endif
+
+#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
+# define BOOST_DELETED_FUNCTION(fun) fun = delete;
+#else
+# define BOOST_DELETED_FUNCTION(fun) private: fun;
+#endif
+
//
// Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined
//
@@ -696,7 +725,7 @@ namespace std{ using ::type_info; }
# define BOOST_NO_0X_HDR_FUTURE
#endif
-// Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+// Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST
// instead of BOOST_NO_0X_HDR_INITIALIZER_LIST or BOOST_NO_INITIALIZER_LISTS
#ifdef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
# ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
@@ -885,19 +914,19 @@ namespace std{ using ::type_info; }
# define BOOST_NOEXCEPT_EXPR(Expression) noexcept((Expression))
#endif
//
-// Helper macro BOOST_FALLTHROUGH
-// Fallback definition of BOOST_FALLTHROUGH macro used to mark intended
-// fall-through between case labels in a switch statement. We use a definition
-// that requires a semicolon after it to avoid at least one type of misuse even
-// on unsupported compilers.
-//
-#ifndef BOOST_FALLTHROUGH
-# define BOOST_FALLTHROUGH ((void)0)
-#endif
+// Helper macro BOOST_FALLTHROUGH
+// Fallback definition of BOOST_FALLTHROUGH macro used to mark intended
+// fall-through between case labels in a switch statement. We use a definition
+// that requires a semicolon after it to avoid at least one type of misuse even
+// on unsupported compilers.
+//
+#ifndef BOOST_FALLTHROUGH
+# define BOOST_FALLTHROUGH ((void)0)
+#endif
//
// constexpr workarounds
-//
+//
#if defined(BOOST_NO_CXX11_CONSTEXPR)
#define BOOST_CONSTEXPR
#define BOOST_CONSTEXPR_OR_CONST const
@@ -929,5 +958,14 @@ namespace std{ using ::type_info; }
#define BOOST_HAS_VARIADIC_TMPL
#endif
+//
+// Finish off with checks for macros that are depricated / no longer supported,
+// if any of these are set then it's very likely that much of Boost will no
+// longer work. So stop with a #error for now, but give the user a chance
+// to continue at their own risk if they really want to:
+//
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_CONFIG_ALLOW_DEPRECATED)
+# error "You are using a compiler which lacks features which are now a minimum requirement in order to use Boost, define BOOST_CONFIG_ALLOW_DEPRECATED if you want to continue at your own risk!!!"
+#endif
#endif
diff --git a/3party/boost/boost/config/user.hpp b/3party/boost/boost/config/user.hpp
index 5a4a9d4776..d226a2d1f4 100644
--- a/3party/boost/boost/config/user.hpp
+++ b/3party/boost/boost/config/user.hpp
@@ -85,8 +85,7 @@
// (this macro is used to turn on __declspec(dllimport) modifiers, so that
// the compiler knows which symbols to look for in a dll rather than in a
// static library). Note that there may be some libraries that can only
-// be statically linked (Boost.Test for example) and others which may only
-// be dynamically linked (Boost.Threads for example), in these cases this
+// be linked in one way (statically or dynamically), in these cases this
// macro has no effect.
// #define BOOST_ALL_DYN_LINK
@@ -97,9 +96,9 @@
// BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport)
// modifiers, so that the compiler knows which symbols to look for in a dll
// rather than in a static library).
-// Note that there may be some libraries that can only be statically linked
-// (Boost.Test for example) and others which may only be dynamically linked
-// (Boost.Threads for example), in these cases this macro is unsupported.
+// Note that there may be some libraries that can only
+// be linked in one way (statically or dynamically),
+// in these cases this macro is unsupported.
// #define BOOST_WHATEVER_DYN_LINK
// BOOST_ALL_NO_LIB: Tells the config system not to automatically select
diff --git a/3party/boost/boost/container/adaptive_pool.hpp b/3party/boost/boost/container/adaptive_pool.hpp
new file mode 100644
index 0000000000..16ededb017
--- /dev/null
+++ b/3party/boost/boost/container/adaptive_pool.hpp
@@ -0,0 +1,364 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. 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_ADAPTIVE_POOL_HPP
+#define BOOST_CONTAINER_ADAPTIVE_POOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+#include <boost/container/container_fwd.hpp>
+#include <boost/container/detail/version_type.hpp>
+#include <boost/container/throw_exception.hpp>
+#include <boost/container/detail/adaptive_node_pool.hpp>
+#include <boost/container/detail/multiallocation_chain.hpp>
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/alloc_lib_auto_link.hpp>
+#include <boost/container/detail/singleton.hpp>
+
+#include <boost/assert.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/move/move.hpp>
+#include <memory>
+#include <algorithm>
+#include <cstddef>
+#include <new>
+
+namespace boost {
+namespace container {
+
+//!An STL node allocator that uses a modified DLMalloc as memory
+//!source.
+//!
+//!This node allocator shares a segregated storage between all instances
+//!of adaptive_pool with equal sizeof(T).
+//!
+//!NodesPerBlock is the number of nodes allocated at once when the allocator
+//!needs runs out of nodes. MaxFreeBlocks is the maximum number of totally free blocks
+//!that the adaptive node pool will hold. The rest of the totally free blocks will be
+//!deallocated to the memory manager.
+//!
+//!OverheadPercent is the (approximated) maximum size overhead (1-20%) of the allocator:
+//!(memory usable for nodes / total memory allocated from the memory allocator)
+#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
+template < class T
+ , std::size_t NodesPerBlock = ADP_nodes_per_block
+ , std::size_t MaxFreeBlocks = ADP_max_free_blocks
+ , std::size_t OverheadPercent = ADP_overhead_percent
+ >
+#else
+template < class T
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
+ , std::size_t OverheadPercent
+ , unsigned Version
+ >
+#endif
+class adaptive_pool
+{
+ //!If Version is 1, the allocator is a STL conforming allocator. If Version is 2,
+ //!the allocator offers advanced expand in place and burst allocation capabilities.
+ public:
+ typedef unsigned int allocation_type;
+ typedef adaptive_pool
+ <T, NodesPerBlock, MaxFreeBlocks, OverheadPercent
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ , Version
+ #endif
+ > self_t;
+
+ static const std::size_t nodes_per_block = NodesPerBlock;
+ static const std::size_t max_free_blocks = MaxFreeBlocks;
+ static const std::size_t overhead_percent = OverheadPercent;
+ static const std::size_t real_nodes_per_block = NodesPerBlock;
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ BOOST_STATIC_ASSERT((Version <=2));
+ #endif
+
+ public:
+ //-------
+ typedef T value_type;
+ typedef T * pointer;
+ typedef const T * const_pointer;
+ typedef typename ::boost::container::
+ container_detail::unvoid<T>::type & reference;
+ typedef const typename ::boost::container::
+ container_detail::unvoid<T>::type & const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ typedef boost::container::container_detail::
+ version_type<self_t, Version> version;
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ typedef boost::container::container_detail::
+ basic_multiallocation_chain<void*> multiallocation_chain_void;
+ typedef boost::container::container_detail::
+ transform_multiallocation_chain
+ <multiallocation_chain_void, T> multiallocation_chain;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ //!Obtains adaptive_pool from
+ //!adaptive_pool
+ template<class T2>
+ struct rebind
+ {
+ typedef adaptive_pool
+ < T2
+ , NodesPerBlock
+ , MaxFreeBlocks
+ , OverheadPercent
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ , Version
+ #endif
+ > other;
+ };
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ private:
+ //!Not assignable from related adaptive_pool
+ template<class T2, unsigned Version2, std::size_t N2, std::size_t F2>
+ adaptive_pool& operator=
+ (const adaptive_pool<T2, Version2, N2, F2>&);
+
+ //!Not assignable from other adaptive_pool
+ adaptive_pool& operator=(const adaptive_pool&);
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ public:
+ //!Default constructor
+ adaptive_pool() BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Copy constructor from other adaptive_pool.
+ adaptive_pool(const adaptive_pool &) BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Copy constructor from related adaptive_pool.
+ template<class T2>
+ adaptive_pool
+ (const adaptive_pool<T2, NodesPerBlock, MaxFreeBlocks, OverheadPercent
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ , Version
+ #endif
+ > &) BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Destructor
+ ~adaptive_pool() BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Returns the number of elements that could be allocated.
+ //!Never throws
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT
+ { return size_type(-1)/sizeof(T); }
+
+ //!Allocate memory for an array of count elements.
+ //!Throws std::bad_alloc if there is no enough memory
+ pointer allocate(size_type count, const void * = 0)
+ {
+ if(count > this->max_size())
+ boost::container::throw_bad_alloc();
+
+ if(Version == 1 && count == 1){
+ typedef typename container_detail::shared_adaptive_node_pool
+ <sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ return pointer(static_cast<T*>(singleton_t::instance().allocate_node()));
+ }
+ else{
+ return static_cast<pointer>(boost_cont_malloc(count*sizeof(T)));
+ }
+ }
+
+ //!Deallocate allocated memory.
+ //!Never throws
+ void deallocate(const pointer &ptr, size_type count) BOOST_CONTAINER_NOEXCEPT
+ {
+ (void)count;
+ if(Version == 1 && count == 1){
+ typedef container_detail::shared_adaptive_node_pool
+ <sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ singleton_t::instance().deallocate_node(ptr);
+ }
+ else{
+ boost_cont_free(ptr);
+ }
+ }
+
+ std::pair<pointer, bool>
+ allocation_command(allocation_type command,
+ size_type limit_size,
+ size_type preferred_size,
+ size_type &received_size, pointer reuse = pointer())
+ {
+ std::pair<pointer, bool> ret =
+ this->priv_allocation_command(command, limit_size, preferred_size, received_size, reuse);
+ if(!ret.first && !(command & BOOST_CONTAINER_NOTHROW_ALLOCATION))
+ boost::container::throw_bad_alloc();
+ return ret;
+ }
+
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold.
+ size_type size(pointer p) const BOOST_CONTAINER_NOEXCEPT
+ { return boost_cont_size(p); }
+
+ //!Allocates just one object. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ //!Throws bad_alloc if there is no enough memory
+ pointer allocate_one()
+ {
+ typedef container_detail::shared_adaptive_node_pool
+ <sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ return (pointer)singleton_t::instance().allocate_node();
+ }
+
+ //!Allocates many elements of size == 1.
+ //!Elements must be individually deallocated with deallocate_one()
+ void allocate_individual(std::size_t num_elements, multiallocation_chain &chain)
+ {
+ typedef container_detail::shared_adaptive_node_pool
+ <sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ singleton_t::instance().allocate_nodes(num_elements, static_cast<typename shared_pool_t::multiallocation_chain&>(chain));
+ //typename shared_pool_t::multiallocation_chain ch;
+ //singleton_t::instance().allocate_nodes(num_elements, ch);
+ //chain.incorporate_after
+ //(chain.before_begin(), (T*)&*ch.begin(), (T*)&*ch.last(), ch.size());
+ }
+
+ //!Deallocates memory previously allocated with allocate_one().
+ //!You should never use deallocate_one to deallocate memory allocated
+ //!with other functions different from allocate_one(). Never throws
+ void deallocate_one(pointer p) BOOST_CONTAINER_NOEXCEPT
+ {
+ typedef container_detail::shared_adaptive_node_pool
+ <sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ singleton_t::instance().deallocate_node(p);
+ }
+
+ void deallocate_individual(multiallocation_chain &chain) BOOST_CONTAINER_NOEXCEPT
+ {
+ typedef container_detail::shared_adaptive_node_pool
+ <sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ //typename shared_pool_t::multiallocation_chain ch(&*chain.begin(), &*chain.last(), chain.size());
+ //singleton_t::instance().deallocate_nodes(ch);
+ singleton_t::instance().deallocate_nodes(chain);
+ }
+
+ //!Allocates many elements of size elem_size.
+ //!Elements must be individually deallocated with deallocate()
+ void allocate_many(size_type elem_size, std::size_t n_elements, multiallocation_chain &chain)
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));/*
+ boost_cont_memchain ch;
+ BOOST_CONTAINER_MEMCHAIN_INIT(&ch);
+ if(!boost_cont_multialloc_nodes(n_elements, elem_size*sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch)){
+ boost::container::throw_bad_alloc();
+ }
+ chain.incorporate_after(chain.before_begin()
+ ,(T*)BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(&ch)
+ ,(T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
+ ,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) );*/
+ if(!boost_cont_multialloc_nodes(n_elements, elem_size*sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, reinterpret_cast<boost_cont_memchain *>(&chain))){
+ boost::container::throw_bad_alloc();
+ }
+ }
+
+ //!Allocates n_elements elements, each one of size elem_sizes[i]
+ //!Elements must be individually deallocated with deallocate()
+ void allocate_many(const size_type *elem_sizes, size_type n_elements, multiallocation_chain &chain)
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));/*
+ boost_cont_memchain ch;
+ BOOST_CONTAINER_MEMCHAIN_INIT(&ch);
+ if(!boost_cont_multialloc_arrays(n_elements, elem_sizes, sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch)){
+ boost::container::throw_bad_alloc();
+ }
+ chain.incorporate_after(chain.before_begin()
+ ,(T*)BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(&ch)
+ ,(T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
+ ,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) );*/
+ if(!boost_cont_multialloc_arrays(n_elements, elem_sizes, sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, reinterpret_cast<boost_cont_memchain *>(&chain))){
+ boost::container::throw_bad_alloc();
+ }
+ }
+
+ void deallocate_many(multiallocation_chain &chain) BOOST_CONTAINER_NOEXCEPT
+ {/*
+ boost_cont_memchain ch;
+ void *beg(&*chain.begin()), *last(&*chain.last());
+ size_t size(chain.size());
+ BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&ch, beg, last, size);
+ boost_cont_multidealloc(&ch);*/
+ boost_cont_multidealloc(reinterpret_cast<boost_cont_memchain *>(&chain));
+ }
+
+ //!Deallocates all free blocks of the pool
+ static void deallocate_free_blocks() BOOST_CONTAINER_NOEXCEPT
+ {
+ typedef container_detail::shared_adaptive_node_pool
+ <sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ singleton_t::instance().deallocate_free_blocks();
+ }
+
+ //!Swaps allocators. Does not throw. If each allocator is placed in a
+ //!different memory segment, the result is undefined.
+ friend void swap(adaptive_pool &, adaptive_pool &) BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!An allocator always compares to true, as memory allocated with one
+ //!instance can be deallocated by another instance
+ friend bool operator==(const adaptive_pool &, const adaptive_pool &) BOOST_CONTAINER_NOEXCEPT
+ { return true; }
+
+ //!An allocator always compares to false, as memory allocated with one
+ //!instance can be deallocated by another instance
+ friend bool operator!=(const adaptive_pool &, const adaptive_pool &) BOOST_CONTAINER_NOEXCEPT
+ { return false; }
+
+ private:
+ std::pair<pointer, bool> priv_allocation_command
+ (allocation_type command, std::size_t limit_size
+ ,std::size_t preferred_size,std::size_t &received_size, void *reuse_ptr)
+ {
+ boost_cont_command_ret_t ret = {0 , 0};
+ if(limit_size > this->max_size() || preferred_size > this->max_size()){
+// ret.first = 0;
+ return std::pair<pointer, bool>(pointer(), false);
+ }
+ std::size_t l_size = limit_size*sizeof(T);
+ std::size_t p_size = preferred_size*sizeof(T);
+ std::size_t r_size;
+ {
+ ret = boost_cont_allocation_command(command, sizeof(T), l_size, p_size, &r_size, reuse_ptr);
+ }
+ received_size = r_size/sizeof(T);
+ return std::pair<pointer, bool>(static_cast<pointer>(ret.first), !!ret.second);
+ }
+};
+
+} //namespace container {
+} //namespace boost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_CONTAINER_ADAPTIVE_POOL_HPP
diff --git a/3party/boost/boost/container/allocator.hpp b/3party/boost/boost/container/allocator.hpp
new file mode 100644
index 0000000000..14d56452b6
--- /dev/null
+++ b/3party/boost/boost/container/allocator.hpp
@@ -0,0 +1,367 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2007-2013. 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_ALLOCATOR_HPP
+#define BOOST_CONTAINER_ALLOCATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+#include <boost/container/container_fwd.hpp>
+#include <boost/container/detail/version_type.hpp>
+#include <boost/container/throw_exception.hpp>
+#include <boost/container/detail/alloc_lib_auto_link.hpp>
+#include <boost/container/detail/multiallocation_chain.hpp>
+#include <boost/static_assert.hpp>
+#include <cstddef>
+#include <cassert>
+#include <new>
+
+namespace boost {
+namespace container {
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+template<unsigned Version, unsigned int AllocationDisableMask>
+class allocator<void, Version, AllocationDisableMask>
+{
+ typedef allocator<void, Version, AllocationDisableMask> self_t;
+ public:
+ typedef void value_type;
+ typedef void * pointer;
+ typedef const void* const_pointer;
+ typedef int & reference;
+ typedef const int & const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef boost::container::container_detail::
+ version_type<self_t, Version> version;
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ typedef boost::container::container_detail::
+ basic_multiallocation_chain<void*> multiallocation_chain;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ //!Obtains an allocator that allocates
+ //!objects of type T2
+ template<class T2>
+ struct rebind
+ {
+ typedef allocator< T2
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ , Version, AllocationDisableMask
+ #endif
+ > other;
+ };
+
+ //!Default constructor
+ //!Never throws
+ allocator()
+ {}
+
+ //!Constructor from other allocator.
+ //!Never throws
+ allocator(const allocator &)
+ {}
+
+ //!Constructor from related allocator.
+ //!Never throws
+ template<class T2>
+ allocator(const allocator<T2, Version, AllocationDisableMask> &)
+ {}
+};
+
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//!\file
+//! This class is an extended STL-compatible that offers advanced allocation mechanism
+//!(in-place expansion, shrinking, burst-allocation...)
+//!
+//! This allocator is a wrapper around a modified DLmalloc.
+#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
+template<class T>
+#else
+//! If Version is 1, the allocator is a STL conforming allocator. If Version is 2,
+//! the allocator offers advanced expand in place and burst allocation capabilities.
+//
+//! AllocationDisableMask works only if Version is 2 and it can be an inclusive OR
+//! of allocation types the user wants to disable.
+template<class T, unsigned Version, unsigned int AllocationDisableMask>
+#endif //#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
+class allocator
+{
+ typedef unsigned int allocation_type;
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ private:
+
+ //Self type
+ typedef allocator<T, Version, AllocationDisableMask> self_t;
+
+ //Not assignable from related allocator
+ template<class T2, unsigned int Version2, unsigned int AllocationDisableMask2>
+ allocator& operator=(const allocator<T2, Version2, AllocationDisableMask2>&);
+
+ //Not assignable from other allocator
+ allocator& operator=(const allocator&);
+
+ static const unsigned int ForbiddenMask =
+ BOOST_CONTAINER_ALLOCATE_NEW | BOOST_CONTAINER_EXPAND_BWD | BOOST_CONTAINER_EXPAND_FWD ;
+
+ //The mask can't disable all the allocation types
+ BOOST_STATIC_ASSERT(( (AllocationDisableMask & ForbiddenMask) != ForbiddenMask ));
+
+ //The mask is only valid for version 2 allocators
+ BOOST_STATIC_ASSERT(( Version != 1 || (AllocationDisableMask == 0) ));
+
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ public:
+ typedef T value_type;
+ typedef T * pointer;
+ typedef const T * const_pointer;
+ typedef T & reference;
+ typedef const T & const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ typedef boost::container::container_detail::
+ version_type<self_t, Version> version;
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ typedef boost::container::container_detail::
+ basic_multiallocation_chain<void*> void_multiallocation_chain;
+
+ typedef boost::container::container_detail::
+ transform_multiallocation_chain
+ <void_multiallocation_chain, T> multiallocation_chain;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ //!Obtains an allocator that allocates
+ //!objects of type T2
+ template<class T2>
+ struct rebind
+ {
+ typedef allocator<T2, Version, AllocationDisableMask> other;
+ };
+
+ //!Default constructor
+ //!Never throws
+ allocator() BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Constructor from other allocator.
+ //!Never throws
+ allocator(const allocator &) BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Constructor from related allocator.
+ //!Never throws
+ template<class T2>
+ allocator(const allocator<T2
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ , Version, AllocationDisableMask
+ #endif
+ > &) BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Allocates memory for an array of count elements.
+ //!Throws std::bad_alloc if there is no enough memory
+ //!If Version is 2, this allocated memory can only be deallocated
+ //!with deallocate() or (for Version == 2) deallocate_many()
+ pointer allocate(size_type count, const void * hint= 0)
+ {
+ (void)hint;
+ if(count > this->max_size())
+ boost::container::throw_bad_alloc();
+ void *ret = boost_cont_malloc(count*sizeof(T));
+ if(!ret)
+ boost::container::throw_bad_alloc();
+ return static_cast<pointer>(ret);
+ }
+
+ //!Deallocates previously allocated memory.
+ //!Never throws
+ void deallocate(pointer ptr, size_type) BOOST_CONTAINER_NOEXCEPT
+ { boost_cont_free(ptr); }
+
+ //!Returns the maximum number of elements that could be allocated.
+ //!Never throws
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT
+ { return size_type(-1)/sizeof(T); }
+
+ //!Swaps two allocators, does nothing
+ //!because this allocator is stateless
+ friend void swap(self_t &, self_t &) BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!An allocator always compares to true, as memory allocated with one
+ //!instance can be deallocated by another instance
+ friend bool operator==(const allocator &, const allocator &) BOOST_CONTAINER_NOEXCEPT
+ { return true; }
+
+ //!An allocator always compares to false, as memory allocated with one
+ //!instance can be deallocated by another instance
+ friend bool operator!=(const allocator &, const allocator &) BOOST_CONTAINER_NOEXCEPT
+ { return false; }
+
+ //!An advanced function that offers in-place expansion shrink to fit and new allocation
+ //!capabilities. Memory allocated with this function can only be deallocated with deallocate()
+ //!or deallocate_many().
+ //!This function is available only with Version == 2
+ std::pair<pointer, bool>
+ allocation_command(allocation_type command,
+ size_type limit_size,
+ size_type preferred_size,
+ size_type &received_size, pointer reuse = pointer())
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ const allocation_type mask(AllocationDisableMask);
+ command &= ~mask;
+ std::pair<pointer, bool> ret =
+ priv_allocation_command(command, limit_size, preferred_size, received_size, reuse);
+ if(!ret.first && !(command & BOOST_CONTAINER_NOTHROW_ALLOCATION))
+ boost::container::throw_bad_alloc();
+ return ret;
+ }
+
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold.
+ //!Memory must not have been allocated with
+ //!allocate_one or allocate_individual.
+ //!This function is available only with Version == 2
+ size_type size(pointer p) const BOOST_CONTAINER_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ return boost_cont_size(p);
+ }
+
+ //!Allocates just one object. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ //!Throws bad_alloc if there is no enough memory
+ //!This function is available only with Version == 2
+ pointer allocate_one()
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ return this->allocate(1);
+ }
+
+ //!Allocates many elements of size == 1.
+ //!Elements must be individually deallocated with deallocate_one()
+ //!This function is available only with Version == 2
+ void allocate_individual(std::size_t num_elements, multiallocation_chain &chain)
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ this->allocate_many(1, num_elements, chain);
+ }
+
+ //!Deallocates memory previously allocated with allocate_one().
+ //!You should never use deallocate_one to deallocate memory allocated
+ //!with other functions different from allocate_one() or allocate_individual.
+ //Never throws
+ void deallocate_one(pointer p) BOOST_CONTAINER_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ return this->deallocate(p, 1);
+ }
+
+ //!Deallocates memory allocated with allocate_one() or allocate_individual().
+ //!This function is available only with Version == 2
+ void deallocate_individual(multiallocation_chain &chain) BOOST_CONTAINER_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ return this->deallocate_many(chain);
+ }
+
+ //!Allocates many elements of size elem_size.
+ //!Elements must be individually deallocated with deallocate()
+ //!This function is available only with Version == 2
+ void allocate_many(size_type elem_size, std::size_t n_elements, multiallocation_chain &chain)
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));/*
+ boost_cont_memchain ch;
+ BOOST_CONTAINER_MEMCHAIN_INIT(&ch);
+ if(!boost_cont_multialloc_nodes(n_elements, elem_size*sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch)){
+ boost::container::throw_bad_alloc();
+ }
+ chain.incorporate_after(chain.before_begin()
+ ,(T*)BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(&ch)
+ ,(T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
+ ,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) );*/
+ if(!boost_cont_multialloc_nodes(n_elements, elem_size*sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, reinterpret_cast<boost_cont_memchain *>(&chain))){
+ boost::container::throw_bad_alloc();
+ }
+ }
+
+ //!Allocates n_elements elements, each one of size elem_sizes[i]
+ //!Elements must be individually deallocated with deallocate()
+ //!This function is available only with Version == 2
+ void allocate_many(const size_type *elem_sizes, size_type n_elements, multiallocation_chain &chain)
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ boost_cont_memchain ch;
+ BOOST_CONTAINER_MEMCHAIN_INIT(&ch);
+ if(!boost_cont_multialloc_arrays(n_elements, elem_sizes, sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch)){
+ boost::container::throw_bad_alloc();
+ }
+ chain.incorporate_after(chain.before_begin()
+ ,(T*)BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(&ch)
+ ,(T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
+ ,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) );
+ /*
+ if(!boost_cont_multialloc_arrays(n_elements, elem_sizes, sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, reinterpret_cast<boost_cont_memchain *>(&chain))){
+ boost::container::throw_bad_alloc();
+ }*/
+ }
+
+ //!Deallocates several elements allocated by
+ //!allocate_many(), allocate(), or allocation_command().
+ //!This function is available only with Version == 2
+ void deallocate_many(multiallocation_chain &chain) BOOST_CONTAINER_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ boost_cont_memchain ch;
+ void *beg(&*chain.begin()), *last(&*chain.last());
+ size_t size(chain.size());
+ BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&ch, beg, last, size);
+ boost_cont_multidealloc(&ch);
+ //boost_cont_multidealloc(reinterpret_cast<boost_cont_memchain *>(&chain));
+ }
+
+ private:
+
+ std::pair<pointer, bool> priv_allocation_command
+ (allocation_type command, std::size_t limit_size
+ ,std::size_t preferred_size,std::size_t &received_size, void *reuse_ptr)
+ {
+ boost_cont_command_ret_t ret = {0 , 0};
+ if((limit_size > this->max_size()) | (preferred_size > this->max_size())){
+ return std::pair<pointer, bool>(pointer(), false);
+ }
+ std::size_t l_size = limit_size*sizeof(T);
+ std::size_t p_size = preferred_size*sizeof(T);
+ std::size_t r_size;
+ {
+ ret = boost_cont_allocation_command(command, sizeof(T), l_size, p_size, &r_size, reuse_ptr);
+ }
+ received_size = r_size/sizeof(T);
+ return std::pair<pointer, bool>(static_cast<pointer>(ret.first), !!ret.second);
+ }
+};
+
+} //namespace container {
+} //namespace boost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //BOOST_CONTAINER_ALLOCATOR_HPP
+
diff --git a/3party/boost/boost/container/allocator_traits.hpp b/3party/boost/boost/container/allocator_traits.hpp
index 64e4352d40..4857212c74 100644
--- a/3party/boost/boost/container/allocator_traits.hpp
+++ b/3party/boost/boost/container/allocator_traits.hpp
@@ -6,7 +6,7 @@
//
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2011-2013. 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)
//
@@ -17,12 +17,13 @@
#ifndef BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP
#define BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
+#include <boost/container/container_fwd.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/detail/memory_util.hpp>
#include <boost/container/detail/memory_util.hpp>
@@ -37,10 +38,11 @@
#include <boost/container/detail/preprocessor.hpp>
#endif
-///@cond
-
namespace boost {
namespace container {
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
namespace container_detail {
//workaround needed for C++03 compilers with no construct()
@@ -55,7 +57,7 @@ struct is_std_allocator< std::allocator<T> >
} //namespace container_detail {
-///@endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! The class template allocator_traits supplies a uniform interface to all allocator types.
//! This class is a C++03-compatible implementation of std::allocator_traits
@@ -93,29 +95,29 @@ struct allocator_traits
//!
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.
+ //! type with internal constant static member <code>value</code> == false.
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.
+ //! type with internal constant static member <code>value</code> == false.
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.
+ //! type with internal constant static member <code>value</code> == false.
typedef see_documentation propagate_on_container_swap;
//! Defines an allocator: Alloc::rebind<T>::other if such a type exists; otherwise, Alloc<T, Args>
//! if Alloc is a class template instantiation of the form Alloc<U, Args>, 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
+ //! In C++03 compilers <code>rebind_alloc</code> is a struct derived from an allocator
//! deduced by previously detailed rules.
template <class T> using rebind_alloc = see_documentation;
- //! In C++03 compilers `rebind_traits` is a struct derived from
- //! `allocator_traits<OtherAlloc>`, where `OtherAlloc` is
- //! the allocator deduced by rules explained in `rebind_alloc`.
+ //! In C++03 compilers <code>rebind_traits</code> is a struct derived from
+ //! <code>allocator_traits<OtherAlloc></code>, where <code>OtherAlloc</code> is
+ //! the allocator deduced by rules explained in <code>rebind_alloc</code>.
template <class T> using rebind_traits = allocator_traits<rebind_alloc<T> >;
//! Non-standard extension: Portable allocator rebind for C++03 and C++11 compilers.
- //! `type` is an allocator related to Alloc deduced deduced by rules explained in `rebind_alloc`.
+ //! <code>type</code> is an allocator related to Alloc deduced deduced by rules explained in <code>rebind_alloc</code>.
template <class T>
struct portable_rebind_alloc
{ typedef see_documentation type; };
@@ -205,19 +207,19 @@ struct allocator_traits
{ typedef typename boost::intrusive::detail::type_rebinder<Alloc, T>::type type; };
#endif //BOOST_CONTAINER_DOXYGEN_INVOKED
- //! <b>Returns</b>: `a.allocate(n)`
+ //! <b>Returns</b>: <code>a.allocate(n)</code>
//!
static pointer allocate(Alloc &a, size_type n)
{ return a.allocate(n); }
- //! <b>Returns</b>: `a.deallocate(p, n)`
+ //! <b>Returns</b>: <code>a.deallocate(p, n)</code>
//!
//! <b>Throws</b>: Nothing
static void deallocate(Alloc &a, pointer p, size_type n)
{ a.deallocate(p, n); }
- //! <b>Effects</b>: calls `a.allocate(n, p)` if that call is well-formed;
- //! otherwise, invokes `a.allocate(n)`
+ //! <b>Effects</b>: calls <code>a.allocate(n, p)</code> if that call is well-formed;
+ //! otherwise, invokes <code>a.allocate(n)</code>
static pointer allocate(Alloc &a, size_type n, const_void_pointer p)
{
const bool value = boost::container::container_detail::
@@ -227,10 +229,10 @@ struct allocator_traits
return allocator_traits::priv_allocate(flag, a, n, p);
}
- //! <b>Effects</b>: calls `a.destroy(p)` if that call is well-formed;
- //! otherwise, invokes `p->~T()`.
+ //! <b>Effects</b>: calls <code>a.destroy(p)</code> if that call is well-formed;
+ //! otherwise, invokes <code>p->~T()</code>.
template<class T>
- static void destroy(Alloc &a, T*p)
+ static void destroy(Alloc &a, T*p) BOOST_CONTAINER_NOEXCEPT
{
typedef T* destroy_pointer;
const bool value = boost::container::container_detail::
@@ -240,9 +242,9 @@ struct allocator_traits
allocator_traits::priv_destroy(flag, a, p);
}
- //! <b>Returns</b>: `a.max_size()` if that expression is well-formed; otherwise,
- //! `numeric_limits<size_type>::max()`.
- static size_type max_size(const Alloc &a)
+ //! <b>Returns</b>: <code>a.max_size()</code> if that expression is well-formed; otherwise,
+ //! <code>numeric_limits<size_type>::max()</code>.
+ static size_type max_size(const Alloc &a) BOOST_CONTAINER_NOEXCEPT
{
const bool value = boost::container::container_detail::
has_member_function_callable_with_max_size
@@ -251,7 +253,7 @@ struct allocator_traits
return allocator_traits::priv_max_size(flag, a);
}
- //! <b>Returns</b>: `a.select_on_container_copy_construction()` if that expression is well-formed;
+ //! <b>Returns</b>: <code>a.select_on_container_copy_construction()</code> if that expression is well-formed;
//! otherwise, a.
static
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -275,8 +277,8 @@ struct allocator_traits
}
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! <b>Effects</b>: calls `a.construct(p, std::forward<Args>(args)...)` if that call is well-formed;
- //! otherwise, invokes `::new (static_cast<void*>(p)) T(std::forward<Args>(args)...)`
+ //! <b>Effects</b>: calls <code>a.construct(p, std::forward<Args>(args)...)</code> if that call is well-formed;
+ //! otherwise, invokes <code>::new (static_cast<void*>(p)) T(std::forward<Args>(args)...)</code>
template <class T, class ...Args>
static void construct(Alloc & a, T* p, BOOST_FWD_REF(Args)... args)
{
@@ -284,7 +286,7 @@ struct allocator_traits
allocator_traits::priv_construct(flag, a, p, ::boost::forward<Args>(args)...);
}
#endif
- ///@cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
private:
static pointer priv_allocate(boost::true_type, Alloc &a, size_type n, const_void_pointer p)
@@ -294,29 +296,29 @@ struct allocator_traits
{ return allocator_traits::allocate(a, n); }
template<class T>
- static void priv_destroy(boost::true_type, Alloc &a, T* p)
+ static void priv_destroy(boost::true_type, Alloc &a, T* p) BOOST_CONTAINER_NOEXCEPT
{ a.destroy(p); }
template<class T>
- static void priv_destroy(boost::false_type, Alloc &, T* p)
+ static void priv_destroy(boost::false_type, Alloc &, T* p) BOOST_CONTAINER_NOEXCEPT
{ p->~T(); (void)p; }
- static size_type priv_max_size(boost::true_type, const Alloc &a)
+ static size_type priv_max_size(boost::true_type, const Alloc &a) BOOST_CONTAINER_NOEXCEPT
{ return a.max_size(); }
- static size_type priv_max_size(boost::false_type, const Alloc &)
+ static size_type priv_max_size(boost::false_type, const Alloc &) BOOST_CONTAINER_NOEXCEPT
{ return (std::numeric_limits<size_type>::max)(); }
static Alloc priv_select_on_container_copy_construction(boost::true_type, const Alloc &a)
{ return a.select_on_container_copy_construction(); }
- static const Alloc &priv_select_on_container_copy_construction(boost::false_type, const Alloc &a)
+ static const Alloc &priv_select_on_container_copy_construction(boost::false_type, const Alloc &a) BOOST_CONTAINER_NOEXCEPT
{ return a; }
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template<class T, class ...Args>
- static void priv_construct(boost::false_type, Alloc &a, T *p, BOOST_FWD_REF(Args) ...args)
- {
+ static void priv_construct(boost::false_type, Alloc &a, T *p, BOOST_FWD_REF(Args) ...args)
+ {
const bool value = boost::container::container_detail::
has_member_function_callable_with_construct
< Alloc, T*, Args... >::value;
@@ -351,7 +353,7 @@ struct allocator_traits
//
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
#include BOOST_PP_LOCAL_ITERATE()
-
+
private:
#define BOOST_PP_LOCAL_MACRO(n) \
template<class T BOOST_PP_ENUM_TRAILING_PARAMS(n, class P) > \
@@ -387,9 +389,13 @@ struct allocator_traits
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
#include BOOST_PP_LOCAL_ITERATE()
#endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+ template<class T>
+ static void priv_construct_dispatch2(boost::false_type, Alloc &, T *p, ::boost::container::default_init_t)
+ { ::new((void*)p) T; }
#endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- ///@endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
} //namespace container {
diff --git a/3party/boost/boost/container/container_fwd.hpp b/3party/boost/boost/container/container_fwd.hpp
index bdefd81e00..415de0f378 100644
--- a/3party/boost/boost/container/container_fwd.hpp
+++ b/3party/boost/boost/container/container_fwd.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,15 +11,41 @@
#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP
#define BOOST_CONTAINER_CONTAINER_FWD_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
+//! \file
+//! This header file forward declares the following containers:
+//! - boost::container::vector
+//! - boost::container::stable_vector
+//! - boost::container::static_vector
+//! - boost::container::slist
+//! - boost::container::list
+//! - boost::container::set
+//! - boost::container::multiset
+//! - boost::container::map
+//! - boost::container::multimap
+//! - boost::container::flat_set
+//! - boost::container::flat_multiset
+//! - boost::container::flat_map
+//! - boost::container::flat_multimap
+//! - boost::container::basic_string
+//! - boost::container::string
+//! - boost::container::wstring
+//!
+//! It forward declares the following allocators:
+//! - boost::container::allocator
+//! - boost::container::node_allocator
+//! - boost::container::adaptive_pool
+//!
+//! And finally it defines the following types
+
//////////////////////////////////////////////////////////////////////////////
// Standard predeclarations
//////////////////////////////////////////////////////////////////////////////
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace boost{
namespace intrusive{
@@ -32,13 +58,14 @@ namespace bi = boost::intrusive;
}}}
+#include <cstddef>
#include <utility>
#include <memory>
#include <functional>
#include <iosfwd>
#include <string>
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//////////////////////////////////////////////////////////////////////////////
// Containers
@@ -47,94 +74,155 @@ namespace bi = boost::intrusive;
namespace boost {
namespace container {
-//vector class
+//! Enumeration used to configure ordered associative containers
+//! with a concrete tree implementation.
+enum tree_type_enum
+{
+ red_black_tree,
+ avl_tree,
+ scapegoat_tree,
+ splay_tree
+};
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
template <class T
,class Allocator = std::allocator<T> >
class vector;
-//vector class
template <class T
,class Allocator = std::allocator<T> >
class stable_vector;
-//vector class
+template <class T, std::size_t Capacity>
+class static_vector;
+
template <class T
,class Allocator = std::allocator<T> >
class deque;
-//list class
template <class T
,class Allocator = std::allocator<T> >
class list;
-//slist class
template <class T
,class Allocator = std::allocator<T> >
class slist;
-//set class
+template<tree_type_enum TreeType, bool OptimizeSize>
+struct tree_opt;
+
+typedef tree_opt<red_black_tree, true> tree_assoc_defaults;
+
template <class Key
,class Compare = std::less<Key>
- ,class Allocator = std::allocator<Key> >
+ ,class Allocator = std::allocator<Key>
+ ,class Options = tree_assoc_defaults >
class set;
-//multiset class
template <class Key
,class Compare = std::less<Key>
- ,class Allocator = std::allocator<Key> >
+ ,class Allocator = std::allocator<Key>
+ ,class Options = tree_assoc_defaults >
class multiset;
-//map class
template <class Key
,class T
,class Compare = std::less<Key>
- ,class Allocator = std::allocator<std::pair<const Key, T> > >
+ ,class Allocator = std::allocator<std::pair<const Key, T> >
+ ,class Options = tree_assoc_defaults >
class map;
-//multimap class
template <class Key
,class T
,class Compare = std::less<Key>
- ,class Allocator = std::allocator<std::pair<const Key, T> > >
+ ,class Allocator = std::allocator<std::pair<const Key, T> >
+ ,class Options = tree_assoc_defaults >
class multimap;
-//flat_set class
template <class Key
,class Compare = std::less<Key>
,class Allocator = std::allocator<Key> >
class flat_set;
-//flat_multiset class
template <class Key
,class Compare = std::less<Key>
,class Allocator = std::allocator<Key> >
class flat_multiset;
-//flat_map class
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = std::allocator<std::pair<Key, T> > >
class flat_map;
-//flat_multimap class
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = std::allocator<std::pair<Key, T> > >
class flat_multimap;
-//basic_string class
template <class CharT
,class Traits = std::char_traits<CharT>
,class Allocator = std::allocator<CharT> >
class basic_string;
+typedef basic_string
+ <char
+ ,std::char_traits<char>
+ ,std::allocator<char> >
+string;
+
+typedef basic_string
+ <wchar_t
+ ,std::char_traits<wchar_t>
+ ,std::allocator<wchar_t> >
+wstring;
+
+static const std::size_t ADP_nodes_per_block = 256u;
+static const std::size_t ADP_max_free_blocks = 2u;
+static const std::size_t ADP_overhead_percent = 1u;
+static const std::size_t ADP_only_alignment = 0u;
+
+template < class T
+ , std::size_t NodesPerBlock = ADP_nodes_per_block
+ , std::size_t MaxFreeBlocks = ADP_max_free_blocks
+ , std::size_t OverheadPercent = ADP_overhead_percent
+ , unsigned Version = 2
+ >
+class adaptive_pool;
+
+template < class T
+ , unsigned Version = 2
+ , unsigned int AllocationDisableMask = 0>
+class allocator;
+
+static const std::size_t NodeAlloc_nodes_per_block = 256u;
+
+template
+ < class T
+ , std::size_t NodesPerBlock = NodeAlloc_nodes_per_block
+ , std::size_t Version = 2>
+class node_allocator;
+
+#else
+
+//! Default options for tree-based associative containers
+//! - tree_type<red_black_tree>
+//! - optimize_size<true>
+typedef implementation_defined tree_assoc_defaults;
+
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
//! Type used to tag that the input range is
//! guaranteed to be ordered
struct ordered_range_t
{};
+//! Value used to tag that the input range is
+//! guaranteed to be ordered
+static const ordered_range_t ordered_range = ordered_range_t();
+
//! Type used to tag that the input range is
//! guaranteed to be ordered and unique
struct ordered_unique_range_t
@@ -142,16 +230,29 @@ struct ordered_unique_range_t
{};
//! Value used to tag that the input range is
-//! guaranteed to be ordered
-static const ordered_range_t ordered_range = ordered_range_t();
-
-//! Value used to tag that the input range is
//! guaranteed to be ordered and unique
static const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t();
-/// @cond
+//! Type used to tag that the inserted values
+//! should be default initialized
+struct default_init_t
+{};
+
+//! Value used to tag that the inserted values
+//! should be default initialized
+static const default_init_t default_init = default_init_t();
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//! Type used to tag that the inserted values
+//! should be value initialized
+struct value_init_t
+{};
+
+//! Value used to tag that the inserted values
+//! should be value initialized
+static const value_init_t value_init = value_init_t();
-namespace detail_really_deep_namespace {
+namespace container_detail_really_deep_namespace {
//Otherwise, gcc issues a warning of previously defined
//anonymous_instance and unique_instance
@@ -161,12 +262,13 @@ struct dummy
{
(void)ordered_range;
(void)ordered_unique_range;
+ (void)default_init;
}
};
} //detail_really_deep_namespace {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
}} //namespace boost { namespace container {
diff --git a/3party/boost/boost/container/deque.hpp b/3party/boost/boost/container/deque.hpp
index 5ff423d0aa..675dae6cf3 100644
--- a/3party/boost/boost/container/deque.hpp
+++ b/3party/boost/boost/container/deque.hpp
@@ -1,39 +1,17 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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.
//
//////////////////////////////////////////////////////////////////////////////
-// Copyright (c) 1996,1997
-// Silicon Graphics Computer Systems, Inc.
-//
-// Permission to use, copy, modify, distribute and sell this software
-// and its documentation for any purpose is hereby granted without fee,
-// provided that the above copyright notice appear in all copies and
-// that both that copyright notice and this permission notice appear
-// in supporting documentation. Silicon Graphics makes no
-// representations about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied warranty.
-//
-//
-// Copyright (c) 1994
-// Hewlett-Packard Company
-//
-// Permission to use, copy, modify, distribute and sell this software
-// and its documentation for any purpose is hereby granted without fee,
-// provided that the above copyright notice appear in all copies and
-// that both that copyright notice and this permission notice appear
-// in supporting documentation. Hewlett-Packard Company makes no
-// representations about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied warranty.
#ifndef BOOST_CONTAINER_DEQUE_HPP
#define BOOST_CONTAINER_DEQUE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -67,19 +45,14 @@
namespace boost {
namespace container {
-/// @cond
-#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
-template <class T, class Allocator = std::allocator<T> >
-#else
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class T, class Allocator>
-#endif
class deque;
-template <class T, class Allocator>
+template <class T>
struct deque_value_traits
{
typedef T value_type;
- typedef Allocator allocator_type;
static const bool trivial_dctr = boost::has_trivial_destructor<value_type>::value;
static const bool trivial_dctr_after_move = ::boost::has_trivial_destructor_after_move<value_type>::value;
static const bool trivial_copy = has_trivial_copy<value_type>::value;
@@ -91,290 +64,257 @@ struct deque_value_traits
// Note: this function is simply a kludge to work around several compilers'
// bugs in handling constant expressions.
-inline std::size_t deque_buf_size(std::size_t size)
- { return size < 512 ? std::size_t(512 / size) : std::size_t(1); }
+template<class T>
+struct deque_buf_size
+{
+ static const std::size_t min_size = 512u;
+ static const std::size_t sizeof_t = sizeof(T);
+ static const std::size_t value = sizeof_t < min_size ? (min_size/sizeof_t) : std::size_t(1);
+};
-// Deque base class. It has two purposes. First, its constructor
-// and destructor allocate (but don't initialize) storage. This makes
-// exception safety easier.
-template <class T, class Allocator>
-class deque_base
+namespace container_detail {
+
+// Class invariants:
+// For any nonsingular iterator i:
+// i.node is the address of an element in the map array. The
+// contents of i.node is a pointer to the beginning of a node.
+// i.first == //(i.node)
+// i.last == i.first + node_size
+// i.cur is a pointer in the range [i.first, i.last). NOTE:
+// the implication of this is that i.cur is always a dereferenceable
+// pointer, even if i is a past-the-end iterator.
+// Start and Finish are always nonsingular iterators. NOTE: this means
+// that an empty deque must have one node, and that a deque
+// with N elements, where N is the buffer size, must have two nodes.
+// For every node other than start.node and finish.node, every element
+// in the node is an initialized object. If start.node == finish.node,
+// then [start.cur, finish.cur) are initialized objects, and
+// the elements outside that range are uninitialized storage. Otherwise,
+// [start.cur, start.last) and [finish.first, finish.cur) are initialized
+// objects, and [start.first, start.cur) and [finish.cur, finish.last)
+// are uninitialized storage.
+// [map, map + map_size) is a valid, non-empty range.
+// [start.node, finish.node] is a valid range contained within
+// [map, map + map_size).
+// 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].
+template<class Pointer, bool IsConst>
+class deque_iterator
{
- BOOST_COPYABLE_AND_MOVABLE(deque_base)
public:
- typedef allocator_traits<Allocator> 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<val_alloc_ptr>::type ptr_alloc_t;
- typedef allocator_traits<ptr_alloc_t> 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 Allocator allocator_type;
- typedef allocator_type stored_allocator_type;
- typedef val_alloc_size size_type;
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef typename boost::intrusive::pointer_traits<Pointer>::element_type value_type;
+ typedef typename boost::intrusive::pointer_traits<Pointer>::difference_type difference_type;
+ typedef typename if_c
+ < IsConst
+ , typename boost::intrusive::pointer_traits<Pointer>::template
+ rebind_pointer<const value_type>::type
+ , Pointer
+ >::type pointer;
+ typedef typename if_c
+ < IsConst
+ , const value_type&
+ , value_type&
+ >::type reference;
+
+ static std::size_t s_buffer_size()
+ { return deque_buf_size<value_type>::value; }
+
+ typedef Pointer val_alloc_ptr;
+ typedef typename boost::intrusive::pointer_traits<Pointer>::
+ template rebind_pointer<Pointer>::type index_pointer;
+
+ Pointer m_cur;
+ Pointer m_first;
+ Pointer m_last;
+ index_pointer m_node;
- protected:
+ public:
- typedef deque_value_traits<T, Allocator> traits_t;
- typedef ptr_alloc_t map_allocator_type;
+ Pointer get_cur() const { return m_cur; }
+ Pointer get_first() const { return m_first; }
+ Pointer get_last() const { return m_last; }
+ index_pointer get_node() const { return m_node; }
- static size_type s_buffer_size() { return deque_buf_size(sizeof(T)); }
+ deque_iterator(val_alloc_ptr x, index_pointer y) BOOST_CONTAINER_NOEXCEPT
+ : m_cur(x), m_first(*y), m_last(*y + s_buffer_size()), m_node(y)
+ {}
- val_alloc_ptr priv_allocate_node()
- { return this->alloc().allocate(s_buffer_size()); }
+ deque_iterator() BOOST_CONTAINER_NOEXCEPT
+ : m_cur(), m_first(), m_last(), m_node()
+ {}
- void priv_deallocate_node(val_alloc_ptr p)
- { this->alloc().deallocate(p, s_buffer_size()); }
+ deque_iterator(deque_iterator<Pointer, false> const& x) BOOST_CONTAINER_NOEXCEPT
+ : m_cur(x.get_cur()), m_first(x.get_first()), m_last(x.get_last()), m_node(x.get_node())
+ {}
- ptr_alloc_ptr priv_allocate_map(size_type n)
- { return this->ptr_alloc().allocate(n); }
+ deque_iterator(Pointer cur, Pointer first, Pointer last, index_pointer node) BOOST_CONTAINER_NOEXCEPT
+ : m_cur(cur), m_first(first), m_last(last), m_node(node)
+ {}
- void priv_deallocate_map(ptr_alloc_ptr p, size_type n)
- { this->ptr_alloc().deallocate(p, n); }
+ deque_iterator<Pointer, false> unconst() const BOOST_CONTAINER_NOEXCEPT
+ {
+ return deque_iterator<Pointer, false>(this->get_cur(), this->get_first(), this->get_last(), this->get_node());
+ }
- public:
- // Class invariants:
- // For any nonsingular iterator i:
- // i.node is the address of an element in the map array. The
- // contents of i.node is a pointer to the beginning of a node.
- // i.first == //(i.node)
- // i.last == i.first + node_size
- // i.cur is a pointer in the range [i.first, i.last). NOTE:
- // the implication of this is that i.cur is always a dereferenceable
- // pointer, even if i is a past-the-end iterator.
- // Start and Finish are always nonsingular iterators. NOTE: this means
- // that an empty deque must have one node, and that a deque
- // with N elements, where N is the buffer size, must have two nodes.
- // For every node other than start.node and finish.node, every element
- // in the node is an initialized object. If start.node == finish.node,
- // then [start.cur, finish.cur) are initialized objects, and
- // the elements outside that range are uninitialized storage. Otherwise,
- // [start.cur, start.last) and [finish.first, finish.cur) are initialized
- // objects, and [start.first, start.cur) and [finish.cur, finish.last)
- // are uninitialized storage.
- // [map, map + map_size) is a valid, non-empty range.
- // [start.node, finish.node] is a valid range contained within
- // [map, map + map_size).
- // 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<std::random_access_iterator_tag,
- val_alloc_val, val_alloc_diff,
- val_alloc_cptr, val_alloc_cref>
- {
- public:
- static size_type s_buffer_size() { return deque_base<T, Allocator>::s_buffer_size(); }
-
- typedef std::random_access_iterator_tag iterator_category;
- typedef val_alloc_val value_type;
- typedef val_alloc_cptr pointer;
- typedef val_alloc_cref reference;
- typedef val_alloc_diff difference_type;
-
- typedef ptr_alloc_ptr index_pointer;
- typedef const_iterator self_t;
-
- friend class deque<T, Allocator>;
- friend class deque_base<T, Allocator>;
-
- protected:
- val_alloc_ptr m_cur;
- val_alloc_ptr m_first;
- val_alloc_ptr m_last;
- index_pointer m_node;
-
- public:
- const_iterator(val_alloc_ptr x, index_pointer y)
- : m_cur(x), m_first(*y),
- m_last(*y + s_buffer_size()), m_node(y) {}
-
- const_iterator() : m_cur(0), m_first(0), m_last(0), m_node(0) {}
-
- const_iterator(const const_iterator& x)
- : m_cur(x.m_cur), m_first(x.m_first),
- m_last(x.m_last), m_node(x.m_node) {}
-
- reference operator*() const
- { return *this->m_cur; }
-
- pointer operator->() const
- { return this->m_cur; }
-
- difference_type operator-(const self_t& x) const
- {
- if(!this->m_cur && !x.m_cur){
- return 0;
- }
- return difference_type(this->s_buffer_size()) * (this->m_node - x.m_node - 1) +
- (this->m_cur - this->m_first) + (x.m_last - x.m_cur);
- }
+ reference operator*() const BOOST_CONTAINER_NOEXCEPT
+ { return *this->m_cur; }
- self_t& operator++()
- {
- ++this->m_cur;
- if (this->m_cur == this->m_last) {
- this->priv_set_node(this->m_node + 1);
- this->m_cur = this->m_first;
- }
- return *this;
- }
+ pointer operator->() const BOOST_CONTAINER_NOEXCEPT
+ { return this->m_cur; }
- self_t operator++(int)
- {
- self_t tmp = *this;
- ++*this;
- return tmp;
+ difference_type operator-(const deque_iterator& x) const BOOST_CONTAINER_NOEXCEPT
+ {
+ if(!this->m_cur && !x.m_cur){
+ return 0;
}
+ return difference_type(this->s_buffer_size()) * (this->m_node - x.m_node - 1) +
+ (this->m_cur - this->m_first) + (x.m_last - x.m_cur);
+ }
- self_t& operator--()
- {
- if (this->m_cur == this->m_first) {
- this->priv_set_node(this->m_node - 1);
- this->m_cur = this->m_last;
- }
- --this->m_cur;
- return *this;
+ deque_iterator& operator++() BOOST_CONTAINER_NOEXCEPT
+ {
+ ++this->m_cur;
+ if (this->m_cur == this->m_last) {
+ this->priv_set_node(this->m_node + 1);
+ this->m_cur = this->m_first;
}
+ return *this;
+ }
- self_t operator--(int)
- {
- self_t tmp = *this;
- --*this;
- return tmp;
- }
+ deque_iterator operator++(int) BOOST_CONTAINER_NOEXCEPT
+ {
+ deque_iterator tmp(*this);
+ ++*this;
+ return tmp;
+ }
- self_t& operator+=(difference_type n)
- {
- difference_type offset = n + (this->m_cur - this->m_first);
- if (offset >= 0 && offset < difference_type(this->s_buffer_size()))
- this->m_cur += n;
- else {
- difference_type node_offset =
- offset > 0 ? offset / difference_type(this->s_buffer_size())
- : -difference_type((-offset - 1) / this->s_buffer_size()) - 1;
- this->priv_set_node(this->m_node + node_offset);
- this->m_cur = this->m_first +
- (offset - node_offset * difference_type(this->s_buffer_size()));
- }
- return *this;
+ deque_iterator& operator--() BOOST_CONTAINER_NOEXCEPT
+ {
+ if (this->m_cur == this->m_first) {
+ this->priv_set_node(this->m_node - 1);
+ this->m_cur = this->m_last;
}
+ --this->m_cur;
+ return *this;
+ }
- self_t operator+(difference_type n) const
- { self_t tmp = *this; return tmp += n; }
-
- self_t& operator-=(difference_type n)
- { return *this += -n; }
-
- self_t operator-(difference_type n) const
- { self_t tmp = *this; return tmp -= n; }
-
- reference operator[](difference_type n) const
- { return *(*this + n); }
+ deque_iterator operator--(int) BOOST_CONTAINER_NOEXCEPT
+ {
+ deque_iterator tmp(*this);
+ --*this;
+ return tmp;
+ }
- bool operator==(const self_t& x) const
- { return this->m_cur == x.m_cur; }
+ deque_iterator& operator+=(difference_type n) BOOST_CONTAINER_NOEXCEPT
+ {
+ difference_type offset = n + (this->m_cur - this->m_first);
+ if (offset >= 0 && offset < difference_type(this->s_buffer_size()))
+ this->m_cur += n;
+ else {
+ difference_type node_offset =
+ offset > 0 ? offset / difference_type(this->s_buffer_size())
+ : -difference_type((-offset - 1) / this->s_buffer_size()) - 1;
+ this->priv_set_node(this->m_node + node_offset);
+ this->m_cur = this->m_first +
+ (offset - node_offset * difference_type(this->s_buffer_size()));
+ }
+ return *this;
+ }
- bool operator!=(const self_t& x) const
- { return !(*this == x); }
+ deque_iterator operator+(difference_type n) const BOOST_CONTAINER_NOEXCEPT
+ { deque_iterator tmp(*this); return tmp += n; }
- bool operator<(const self_t& x) const
- {
- return (this->m_node == x.m_node) ?
- (this->m_cur < x.m_cur) : (this->m_node < x.m_node);
- }
+ deque_iterator& operator-=(difference_type n) BOOST_CONTAINER_NOEXCEPT
+ { return *this += -n; }
- bool operator>(const self_t& x) const
- { return x < *this; }
+ deque_iterator operator-(difference_type n) const BOOST_CONTAINER_NOEXCEPT
+ { deque_iterator tmp(*this); return tmp -= n; }
- bool operator<=(const self_t& x) const
- { return !(x < *this); }
+ reference operator[](difference_type n) const BOOST_CONTAINER_NOEXCEPT
+ { return *(*this + n); }
- bool operator>=(const self_t& x) const
- { return !(*this < x); }
+ friend bool operator==(const deque_iterator& l, const deque_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return l.m_cur == r.m_cur; }
- void priv_set_node(index_pointer new_node)
- {
- this->m_node = new_node;
- this->m_first = *new_node;
- this->m_last = this->m_first + this->s_buffer_size();
- }
+ friend bool operator!=(const deque_iterator& l, const deque_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return l.m_cur != r.m_cur; }
- friend const_iterator operator+(difference_type n, const const_iterator& x)
- { return x + n; }
- };
+ friend bool operator<(const deque_iterator& l, const deque_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return (l.m_node == r.m_node) ? (l.m_cur < r.m_cur) : (l.m_node < r.m_node); }
- //Deque iterator
- class iterator : public const_iterator
- {
- public:
- typedef std::random_access_iterator_tag iterator_category;
- typedef val_alloc_val value_type;
- typedef val_alloc_ptr pointer;
- typedef val_alloc_ref reference;
- typedef val_alloc_diff difference_type;
- typedef ptr_alloc_ptr index_pointer;
- typedef const_iterator self_t;
+ friend bool operator>(const deque_iterator& l, const deque_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return r < l; }
- friend class deque<T, Allocator>;
- friend class deque_base<T, Allocator>;
+ friend bool operator<=(const deque_iterator& l, const deque_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return !(r < l); }
- private:
- explicit iterator(const const_iterator& x) : const_iterator(x){}
+ friend bool operator>=(const deque_iterator& l, const deque_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return !(l < r); }
- public:
- //Constructors
- iterator(val_alloc_ptr x, index_pointer y) : const_iterator(x, y){}
- iterator() : const_iterator(){}
- //iterator(const const_iterator &cit) : const_iterator(cit){}
- iterator(const iterator& x) : const_iterator(x){}
+ void priv_set_node(index_pointer new_node) BOOST_CONTAINER_NOEXCEPT
+ {
+ this->m_node = new_node;
+ this->m_first = *new_node;
+ this->m_last = this->m_first + this->s_buffer_size();
+ }
- //Pointer like operators
- reference operator*() const { return *this->m_cur; }
- pointer operator->() const { return this->m_cur; }
+ friend deque_iterator operator+(difference_type n, deque_iterator x) BOOST_CONTAINER_NOEXCEPT
+ { return x += n; }
+};
- reference operator[](difference_type n) const { return *(*this + n); }
+} //namespace container_detail {
- //Increment / Decrement
- iterator& operator++()
- { this->const_iterator::operator++(); return *this; }
+// Deque base class. It has two purposes. First, its constructor
+// and destructor allocate (but don't initialize) storage. This makes
+// exception safety easier.
+template <class Allocator>
+class deque_base
+{
+ BOOST_COPYABLE_AND_MOVABLE(deque_base)
+ public:
+ typedef allocator_traits<Allocator> 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<val_alloc_ptr>::type ptr_alloc_t;
+ typedef allocator_traits<ptr_alloc_t> 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 Allocator allocator_type;
+ typedef allocator_type stored_allocator_type;
+ typedef val_alloc_size size_type;
- iterator operator++(int)
- { iterator tmp = *this; ++*this; return tmp; }
-
- iterator& operator--()
- { this->const_iterator::operator--(); return *this; }
+ protected:
- iterator operator--(int)
- { iterator tmp = *this; --*this; return tmp; }
+ typedef deque_value_traits<val_alloc_val> traits_t;
+ typedef ptr_alloc_t map_allocator_type;
- // Arithmetic
- iterator& operator+=(difference_type off)
- { this->const_iterator::operator+=(off); return *this; }
+ static size_type s_buffer_size() BOOST_CONTAINER_NOEXCEPT
+ { return deque_buf_size<val_alloc_val>::value; }
- iterator operator+(difference_type off) const
- { return iterator(this->const_iterator::operator+(off)); }
+ val_alloc_ptr priv_allocate_node()
+ { return this->alloc().allocate(s_buffer_size()); }
- friend iterator operator+(difference_type off, const iterator& right)
- { return iterator(off+static_cast<const const_iterator &>(right)); }
+ void priv_deallocate_node(val_alloc_ptr p) BOOST_CONTAINER_NOEXCEPT
+ { this->alloc().deallocate(p, s_buffer_size()); }
- iterator& operator-=(difference_type off)
- { this->const_iterator::operator-=(off); return *this; }
+ ptr_alloc_ptr priv_allocate_map(size_type n)
+ { return this->ptr_alloc().allocate(n); }
- iterator operator-(difference_type off) const
- { return iterator(this->const_iterator::operator-(off)); }
+ void priv_deallocate_map(ptr_alloc_ptr p, size_type n) BOOST_CONTAINER_NOEXCEPT
+ { this->ptr_alloc().deallocate(p, n); }
- difference_type operator-(const const_iterator& right) const
- { return static_cast<const const_iterator&>(*this) - right; }
- };
+ typedef container_detail::deque_iterator<val_alloc_ptr, false> iterator;
+ typedef container_detail::deque_iterator<val_alloc_ptr, true > const_iterator;
deque_base(size_type num_elements, const allocator_type& a)
: members_(a)
@@ -403,10 +343,10 @@ class deque_base
private:
deque_base(const deque_base&);
-
+
protected:
- void swap_members(deque_base &x)
+ void swap_members(deque_base &x) BOOST_CONTAINER_NOEXCEPT
{
std::swap(this->members_.m_start, x.members_.m_start);
std::swap(this->members_.m_finish, x.members_.m_finish);
@@ -424,7 +364,7 @@ class deque_base
ptr_alloc_ptr nstart = this->members_.m_map + (this->members_.m_map_size - num_nodes) / 2;
ptr_alloc_ptr nfinish = nstart + num_nodes;
-
+
BOOST_TRY {
this->priv_create_nodes(nstart, nfinish);
}
@@ -458,13 +398,13 @@ class deque_base
BOOST_CATCH_END
}
- void priv_destroy_nodes(ptr_alloc_ptr nstart, ptr_alloc_ptr nfinish)
+ void priv_destroy_nodes(ptr_alloc_ptr nstart, ptr_alloc_ptr nfinish) BOOST_CONTAINER_NOEXCEPT
{
for (ptr_alloc_ptr n = nstart; n < nfinish; ++n)
this->priv_deallocate_node(*n);
}
- void priv_clear_map()
+ void priv_clear_map() BOOST_CONTAINER_NOEXCEPT
{
if (this->members_.m_map) {
this->priv_destroy_nodes(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1);
@@ -509,33 +449,36 @@ class deque_base
iterator m_finish;
} members_;
- ptr_alloc_t &ptr_alloc()
+ ptr_alloc_t &ptr_alloc() BOOST_CONTAINER_NOEXCEPT
{ return members_; }
-
- const ptr_alloc_t &ptr_alloc() const
+
+ const ptr_alloc_t &ptr_alloc() const BOOST_CONTAINER_NOEXCEPT
{ return members_; }
- allocator_type &alloc()
+ allocator_type &alloc() BOOST_CONTAINER_NOEXCEPT
{ return members_; }
-
- const allocator_type &alloc() const
+
+ const allocator_type &alloc() const BOOST_CONTAINER_NOEXCEPT
{ return members_; }
};
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
-//! Deque class
-//!
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
+//! A double-ended queue is a sequence that supports random access to elements, constant time insertion
+//! and removal of elements at the end of the sequence, and linear time insertion and removal of elements in the middle.
+//!
+//! \tparam T The type of object that is stored in the deque
+//! \tparam Allocator The allocator used for all internal memory management
template <class T, class Allocator = std::allocator<T> >
#else
template <class T, class Allocator>
#endif
-class deque : protected deque_base<T, Allocator>
+class deque : protected deque_base<Allocator>
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
- typedef deque_base<T, Allocator> Base;
- /// @endcond
+ typedef deque_base<Allocator> Base;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
@@ -559,7 +502,7 @@ class deque : protected deque_base<T, Allocator>
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private: // Internal typedefs
BOOST_COPYABLE_AND_MOVABLE(deque)
@@ -568,7 +511,7 @@ class deque : protected deque_base<T, Allocator>
{ return Base::s_buffer_size(); }
typedef allocator_traits<Allocator> allocator_traits_type;
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -596,25 +539,42 @@ class deque : protected deque_base<T, Allocator>
{}
//! <b>Effects</b>: Constructs a deque that will use a copy of allocator a
- //! and inserts n default contructed values.
+ //! and inserts n value initialized values.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
- //! throws or T's default or copy constructor throws.
+ //! <b>Throws</b>: If allocator_type's default constructor
+ //! throws or T's value initialization throws.
//!
//! <b>Complexity</b>: Linear to n.
explicit deque(size_type n)
: Base(n, allocator_type())
{
- container_detail::insert_default_constructed_n_proxy<Allocator, iterator> proxy(this->alloc());
- proxy.uninitialized_copy_n_and_update(this->begin(), n);
+ container_detail::insert_value_initialized_n_proxy<Allocator, iterator> proxy;
+ proxy.uninitialized_copy_n_and_update(this->alloc(), this->begin(), n);
+ //deque_base will deallocate in case of exception...
+ }
+
+ //! <b>Effects</b>: Constructs a deque that will use a copy of allocator a
+ //! and inserts n default initialized values.
+ //!
+ //! <b>Throws</b>: If allocator_type's default constructor
+ //! throws or T's default initialization or copy constructor throws.
+ //!
+ //! <b>Complexity</b>: Linear to n.
+ //!
+ //! <b>Note</b>: Non-standard extension
+ deque(size_type n, default_init_t)
+ : Base(n, allocator_type())
+ {
+ container_detail::insert_default_initialized_n_proxy<Allocator, iterator> proxy;
+ proxy.uninitialized_copy_n_and_update(this->alloc(), this->begin(), n);
//deque_base will deallocate in case of exception...
}
//! <b>Effects</b>: Constructs a deque that will use a copy of allocator a
//! and inserts n copies of value.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
- //! throws or T's default or copy constructor throws.
+ //! <b>Throws</b>: If allocator_type's default constructor
+ //! throws or T's copy constructor throws.
//!
//! <b>Complexity</b>: Linear to n.
deque(size_type n, const value_type& value,
@@ -625,8 +585,8 @@ class deque : protected deque_base<T, Allocator>
//! <b>Effects</b>: Constructs a deque that will use a copy of allocator a
//! and inserts a copy of the range [first, last) in the deque.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
- //! throws or T's constructor taking an dereferenced InIt throws.
+ //! <b>Throws</b>: If allocator_type's default constructor
+ //! throws or T's constructor taking a dereferenced InIt throws.
//!
//! <b>Complexity</b>: Linear to the range [first, last).
template <class InIt>
@@ -744,36 +704,39 @@ class deque : protected deque_base<T, Allocator>
return *this;
}
- //! <b>Effects</b>: Move assignment. All mx's values are transferred to *this.
+ //! <b>Effects</b>: Move assignment. All x's values are transferred to *this.
//!
- //! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
- //! before the function.
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and (allocation throws or value_type's move constructor throws)
//!
- //! <b>Throws</b>: If allocator_type's copy constructor throws.
- //!
- //! <b>Complexity</b>: Linear.
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
deque& operator= (BOOST_RV_REF(deque) x)
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
{
- 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_<allocator_traits_type::
- propagate_on_container_move_assignment::value> flag;
- container_detail::move_alloc(this_alloc, x_alloc, flag);
- container_detail::move_alloc(this->ptr_alloc(), x.ptr_alloc(), flag);
- }
- //If unequal allocators, then do a one by one move
- else{
- typedef typename std::iterator_traits<iterator>::iterator_category ItCat;
- this->assign( boost::make_move_iterator(x.begin())
- , boost::make_move_iterator(x.end()));
- }
+ BOOST_ASSERT(this != &x);
+ allocator_type &this_alloc = this->alloc();
+ allocator_type &x_alloc = x.alloc();
+ const bool propagate_alloc = allocator_traits_type::
+ propagate_on_container_move_assignment::value;
+ container_detail::bool_<propagate_alloc> flag;
+ const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
+ //Resources can be transferred if both allocators are
+ //going to be equal after this function (either propagated or already equal)
+ if(propagate_alloc || allocators_equal){
+ //Destroy objects but retain memory in case x reuses it in the future
+ this->clear();
+ //Move allocator if needed
+ container_detail::move_alloc(this_alloc, x_alloc, flag);
+ container_detail::move_alloc(this->ptr_alloc(), x.ptr_alloc(), flag);
+ //Nothrow swap
+ this->swap_members(x);
+ }
+ //Else do a one by one move
+ else{
+ this->assign( boost::make_move_iterator(x.begin())
+ , boost::make_move_iterator(x.end()));
}
return *this;
}
@@ -1006,9 +969,9 @@ class deque : protected deque_base<T, Allocator>
{ return allocator_traits_type::max_size(this->alloc()); }
//! <b>Effects</b>: Inserts or erases elements at the end such that
- //! the size becomes n. New elements are default constructed.
+ //! the size becomes n. New elements are value initialized.
//!
- //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
+ //! <b>Throws</b>: If memory allocation throws, or T's constructor throws.
//!
//! <b>Complexity</b>: Linear to the difference between size() and new_size.
void resize(size_type new_size)
@@ -1018,7 +981,27 @@ class deque : protected deque_base<T, Allocator>
this->priv_erase_last_n(len - new_size);
else{
const size_type n = new_size - this->size();
- container_detail::insert_default_constructed_n_proxy<Allocator, iterator> proxy(this->alloc());
+ container_detail::insert_value_initialized_n_proxy<Allocator, iterator> proxy;
+ priv_insert_back_aux_impl(n, proxy);
+ }
+ }
+
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
+ //! the size becomes n. New elements are default initialized.
+ //!
+ //! <b>Throws</b>: If memory allocation throws, or T's constructor throws.
+ //!
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
+ //!
+ //! <b>Note</b>: Non-standard extension
+ void resize(size_type new_size, default_init_t)
+ {
+ 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::insert_default_initialized_n_proxy<Allocator, iterator> proxy;
priv_insert_back_aux_impl(n, proxy);
}
}
@@ -1175,7 +1158,7 @@ class deque : protected deque_base<T, Allocator>
}
else{
typedef container_detail::insert_non_movable_emplace_proxy<Allocator, iterator, Args...> type;
- this->priv_insert_front_aux_impl(1, type(this->alloc(), boost::forward<Args>(args)...));
+ this->priv_insert_front_aux_impl(1, type(boost::forward<Args>(args)...));
}
}
@@ -1197,7 +1180,7 @@ class deque : protected deque_base<T, Allocator>
}
else{
typedef container_detail::insert_non_movable_emplace_proxy<Allocator, iterator, Args...> type;
- this->priv_insert_back_aux_impl(1, type(this->alloc(), boost::forward<Args>(args)...));
+ this->priv_insert_back_aux_impl(1, type(boost::forward<Args>(args)...));
}
}
@@ -1223,7 +1206,7 @@ class deque : protected deque_base<T, Allocator>
}
else{
typedef container_detail::insert_emplace_proxy<Allocator, iterator, Args...> type;
- return this->priv_insert_aux_impl(p, 1, type(this->alloc(), boost::forward<Args>(args)...));
+ return this->priv_insert_aux_impl(p, 1, type(boost::forward<Args>(args)...));
}
}
@@ -1242,10 +1225,10 @@ class deque : protected deque_base<T, Allocator>
priv_push_front_simple_commit(); \
} \
else{ \
- container_detail::BOOST_PP_CAT(insert_non_movable_emplace_proxy_arg, n) \
- <Allocator, iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
- (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
- priv_insert_front_aux_impl(1, proxy); \
+ typedef container_detail::BOOST_PP_CAT(insert_non_movable_emplace_proxy_arg, n) \
+ <Allocator, iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> type; \
+ priv_insert_front_aux_impl \
+ (1, type(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \
} \
} \
\
@@ -1260,10 +1243,10 @@ class deque : protected deque_base<T, Allocator>
priv_push_back_simple_commit(); \
} \
else{ \
- container_detail::BOOST_PP_CAT(insert_non_movable_emplace_proxy_arg, n) \
- <Allocator, iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
- (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
- priv_insert_back_aux_impl(1, proxy); \
+ typedef container_detail::BOOST_PP_CAT(insert_non_movable_emplace_proxy_arg, n) \
+ <Allocator, iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> type; \
+ priv_insert_back_aux_impl \
+ (1, type(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \
} \
} \
\
@@ -1280,10 +1263,10 @@ class deque : protected deque_base<T, Allocator>
return (this->end()-1); \
} \
else{ \
- container_detail::BOOST_PP_CAT(insert_emplace_proxy_arg, n) \
- <Allocator, iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
- (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
- return this->priv_insert_aux_impl(p, 1, proxy); \
+ typedef container_detail::BOOST_PP_CAT(insert_emplace_proxy_arg, n) \
+ <Allocator, iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> type; \
+ return this->priv_insert_aux_impl \
+ (p, 1, type(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \
} \
} \
//!
@@ -1358,7 +1341,7 @@ class deque : protected deque_base<T, Allocator>
//! Linear time otherwise.
iterator insert(const_iterator position, T &&x);
#else
- BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: pos must be a valid iterator of *this.
@@ -1397,7 +1380,7 @@ class deque : protected deque_base<T, Allocator>
)
{
size_type n = 0;
- iterator it(pos);
+ iterator it(pos.unconst());
for(;first != last; ++first, ++n){
it = this->emplace(it, *first);
++it;
@@ -1417,7 +1400,7 @@ class deque : protected deque_base<T, Allocator>
#endif
)
{
- container_detail::insert_range_proxy<Allocator, FwdIt, iterator> proxy(this->alloc(), first);
+ container_detail::insert_range_proxy<Allocator, FwdIt, iterator> proxy(first);
return priv_insert_aux_impl(p, (size_type)std::distance(first, last), proxy);
}
#endif
@@ -1468,15 +1451,15 @@ class deque : protected deque_base<T, Allocator>
//! Constant if pos is the first or the last element.
iterator erase(const_iterator pos) BOOST_CONTAINER_NOEXCEPT
{
- const_iterator next = pos;
+ iterator next = pos.unconst();
++next;
size_type index = pos - this->members_.m_start;
if (index < (this->size()/2)) {
- boost::move_backward(begin(), iterator(pos), iterator(next));
+ boost::move_backward(this->begin(), pos.unconst(), next);
pop_front();
}
else {
- boost::move(iterator(next), end(), iterator(pos));
+ boost::move(next, this->end(), pos.unconst());
pop_back();
}
return this->members_.m_start + index;
@@ -1500,7 +1483,7 @@ class deque : protected deque_base<T, Allocator>
const size_type n = static_cast<size_type>(last - first);
const size_type elems_before = static_cast<size_type>(first - this->members_.m_start);
if (elems_before < (this->size() - n) - elems_before) {
- boost::move_backward(begin(), iterator(first), iterator(last));
+ boost::move_backward(begin(), first.unconst(), last.unconst());
iterator new_start = this->members_.m_start + n;
if(!Base::traits_t::trivial_dctr_after_move)
this->priv_destroy_range(this->members_.m_start, new_start);
@@ -1508,7 +1491,7 @@ class deque : protected deque_base<T, Allocator>
this->members_.m_start = new_start;
}
else {
- boost::move(iterator(last), end(), iterator(first));
+ boost::move(last.unconst(), end(), first.unconst());
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);
@@ -1557,7 +1540,49 @@ class deque : protected deque_base<T, Allocator>
this->members_.m_finish = this->members_.m_start;
}
- /// @cond
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const deque& x, const deque& y)
+ { return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin()); }
+
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const deque& x, const deque& y)
+ { return !(x == y); }
+
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const deque& x, const deque& y)
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
+
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const deque& x, const deque& y)
+ { return y < x; }
+
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const deque& x, const deque& y)
+ { return !(y < x); }
+
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const deque& x, const deque& y)
+ { return !(x < y); }
+
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(deque& x, deque& y)
+ { x.swap(y); }
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
void priv_erase_last_n(size_type n)
@@ -1590,7 +1615,8 @@ class deque : protected deque_base<T, Allocator>
}
else {
return priv_insert_aux_impl
- (position, (size_type)1, container_detail::get_insert_value_proxy<iterator>(this->alloc(), ::boost::forward<U>(x)));
+ ( position, (size_type)1
+ , container_detail::get_insert_value_proxy<iterator, Allocator>(::boost::forward<U>(x)));
}
}
@@ -1604,7 +1630,8 @@ class deque : protected deque_base<T, Allocator>
}
else{
priv_insert_aux_impl
- (this->cbegin(), (size_type)1, container_detail::get_insert_value_proxy<iterator>(this->alloc(), ::boost::forward<U>(x)));
+ ( this->cbegin(), (size_type)1
+ , container_detail::get_insert_value_proxy<iterator, Allocator>(::boost::forward<U>(x)));
}
}
@@ -1618,8 +1645,8 @@ class deque : protected deque_base<T, Allocator>
}
else{
priv_insert_aux_impl
- (this->cend(), (size_type)1, container_detail::get_insert_value_proxy<iterator>(this->alloc(), ::boost::forward<U>(x)));
- container_detail::insert_copy_proxy<Allocator, iterator> proxy(this->alloc(), x);
+ ( this->cend(), (size_type)1
+ , container_detail::get_insert_value_proxy<iterator, Allocator>(::boost::forward<U>(x)));
}
}
@@ -1656,7 +1683,7 @@ class deque : protected deque_base<T, Allocator>
for(;p != p2; ++p){
allocator_traits_type::destroy
( this->alloc()
- , container_detail::to_raw_pointer(&*p)
+ , container_detail::to_raw_pointer(container_detail::iterator_to_pointer(p))
);
}
}
@@ -1666,15 +1693,15 @@ class deque : protected deque_base<T, Allocator>
for(;p != p2; ++p){
allocator_traits_type::destroy
( this->alloc()
- , container_detail::to_raw_pointer(&*p)
+ , container_detail::to_raw_pointer(container_detail::iterator_to_pointer(p))
);
}
}
template<class InsertProxy>
- iterator priv_insert_aux_impl(const_iterator p, size_type n, InsertProxy interf)
+ iterator priv_insert_aux_impl(const_iterator p, size_type n, InsertProxy proxy)
{
- iterator pos(p);
+ iterator pos(p.unconst());
const size_type pos_n = p - this->cbegin();
if(!this->members_.m_map){
this->priv_initialize_map(0);
@@ -1687,7 +1714,7 @@ class deque : protected deque_base<T, Allocator>
const iterator new_start = this->priv_reserve_elements_at_front(n);
const iterator old_start = this->members_.m_start;
if(!elemsbefore){
- interf.uninitialized_copy_n_and_update(new_start, n);
+ proxy.uninitialized_copy_n_and_update(this->alloc(), new_start, n);
this->members_.m_start = new_start;
}
else{
@@ -1698,17 +1725,17 @@ class deque : protected deque_base<T, Allocator>
(this->alloc(), this->members_.m_start, start_n, new_start);
this->members_.m_start = new_start;
boost::move(start_n, pos, old_start);
- interf.copy_n_and_update(pos - n, n);
+ proxy.copy_n_and_update(this->alloc(), pos - n, n);
}
else {
const size_type mid_count = n - elemsbefore;
const iterator mid_start = old_start - mid_count;
- interf.uninitialized_copy_n_and_update(mid_start, mid_count);
+ proxy.uninitialized_copy_n_and_update(this->alloc(), mid_start, mid_count);
this->members_.m_start = mid_start;
::boost::container::uninitialized_move_alloc
(this->alloc(), old_start, pos, new_start);
this->members_.m_start = new_start;
- interf.copy_n_and_update(old_start, elemsbefore);
+ proxy.copy_n_and_update(this->alloc(), old_start, elemsbefore);
}
}
}
@@ -1717,7 +1744,7 @@ class deque : protected deque_base<T, Allocator>
const iterator old_finish = this->members_.m_finish;
const size_type elemsafter = length - elemsbefore;
if(!elemsafter){
- interf.uninitialized_copy_n_and_update(old_finish, n);
+ proxy.uninitialized_copy_n_and_update(this->alloc(), old_finish, n);
this->members_.m_finish = new_finish;
}
else{
@@ -1728,15 +1755,15 @@ class deque : protected deque_base<T, Allocator>
(this->alloc(), finish_n, old_finish, old_finish);
this->members_.m_finish = new_finish;
boost::move_backward(pos, finish_n, old_finish);
- interf.copy_n_and_update(pos, n);
+ proxy.copy_n_and_update(this->alloc(), pos, n);
}
else {
const size_type raw_gap = n - elemsafter;
::boost::container::uninitialized_move_alloc
(this->alloc(), pos, old_finish, old_finish + raw_gap);
BOOST_TRY{
- interf.copy_n_and_update(pos, elemsafter);
- interf.uninitialized_copy_n_and_update(old_finish, raw_gap);
+ proxy.copy_n_and_update(this->alloc(), pos, elemsafter);
+ proxy.uninitialized_copy_n_and_update(this->alloc(), old_finish, raw_gap);
}
BOOST_CATCH(...){
this->priv_destroy_range(old_finish, old_finish + elemsafter);
@@ -1751,7 +1778,7 @@ class deque : protected deque_base<T, Allocator>
}
template <class InsertProxy>
- iterator priv_insert_back_aux_impl(size_type n, InsertProxy interf)
+ iterator priv_insert_back_aux_impl(size_type n, InsertProxy proxy)
{
if(!this->members_.m_map){
this->priv_initialize_map(0);
@@ -1759,20 +1786,20 @@ class deque : protected deque_base<T, Allocator>
iterator new_finish = this->priv_reserve_elements_at_back(n);
iterator old_finish = this->members_.m_finish;
- interf.uninitialized_copy_n_and_update(old_finish, n);
+ proxy.uninitialized_copy_n_and_update(this->alloc(), old_finish, n);
this->members_.m_finish = new_finish;
return iterator(this->members_.m_finish - n);
}
template <class InsertProxy>
- iterator priv_insert_front_aux_impl(size_type n, InsertProxy interf)
+ iterator priv_insert_front_aux_impl(size_type n, InsertProxy proxy)
{
if(!this->members_.m_map){
this->priv_initialize_map(0);
}
iterator new_start = this->priv_reserve_elements_at_front(n);
- interf.uninitialized_copy_n_and_update(new_start, n);
+ proxy.uninitialized_copy_n_and_update(this->alloc(), new_start, n);
this->members_.m_start = new_start;
return new_start;
}
@@ -1845,7 +1872,7 @@ class deque : protected deque_base<T, Allocator>
}
// Called only if this->members_.m_finish.m_cur == this->members_.m_finish.m_first.
- void priv_pop_back_aux()
+ void priv_pop_back_aux() BOOST_CONTAINER_NOEXCEPT
{
this->priv_deallocate_node(this->members_.m_finish.m_first);
this->members_.m_finish.priv_set_node(this->members_.m_finish.m_node - 1);
@@ -1860,7 +1887,7 @@ class deque : protected deque_base<T, Allocator>
// if the deque has at least one element (a precondition for this member
// function), and if this->members_.m_start.m_cur == this->members_.m_start.m_last, then the deque
// must have at least two nodes.
- void priv_pop_front_aux()
+ void priv_pop_front_aux() BOOST_CONTAINER_NOEXCEPT
{
allocator_traits_type::destroy
( this->alloc()
@@ -1869,7 +1896,7 @@ class deque : protected deque_base<T, Allocator>
this->priv_deallocate_node(this->members_.m_start.m_first);
this->members_.m_start.priv_set_node(this->members_.m_start.m_node + 1);
this->members_.m_start.m_cur = this->members_.m_start.m_first;
- }
+ }
iterator priv_reserve_elements_at_front(size_type n)
{
@@ -1889,7 +1916,7 @@ class deque : protected deque_base<T, Allocator>
}
BOOST_CATCH(...) {
for (size_type j = 1; j < i; ++j)
- this->priv_deallocate_node(*(this->members_.m_start.m_node - j));
+ this->priv_deallocate_node(*(this->members_.m_start.m_node - j));
BOOST_RETHROW
}
BOOST_CATCH_END
@@ -1914,7 +1941,7 @@ class deque : protected deque_base<T, Allocator>
}
BOOST_CATCH(...) {
for (size_type j = 1; j < i; ++j)
- this->priv_deallocate_node(*(this->members_.m_finish.m_node + j));
+ this->priv_deallocate_node(*(this->members_.m_finish.m_node + j));
BOOST_RETHROW
}
BOOST_CATCH_END
@@ -1954,45 +1981,12 @@ class deque : protected deque_base<T, Allocator>
this->members_.m_start.priv_set_node(new_nstart);
this->members_.m_finish.priv_set_node(new_nstart + old_num_nodes - 1);
}
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
-// Nonmember functions.
-template <class T, class Allocator>
-inline bool operator==(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
-{
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-template <class T, class Allocator>
-inline bool operator<(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
-{
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-template <class T, class Allocator>
-inline bool operator!=(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
- { return !(x == y); }
-
-template <class T, class Allocator>
-inline bool operator>(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
- { return y < x; }
-
-template <class T, class Allocator>
-inline bool operator>=(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
- { return !(x < y); }
-
-template <class T, class Allocator>
-inline bool operator<=(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
- { return !(y < x); }
-
-template <class T, class Allocator>
-inline void swap(deque<T, Allocator>& x, deque<T, Allocator>& y)
-{ x.swap(y); }
-
}}
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace boost {
@@ -2005,7 +1999,7 @@ struct has_trivial_destructor_after_move<boost::container::deque<T, Allocator> >
}
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#include <boost/container/detail/config_end.hpp>
diff --git a/3party/boost/boost/container/detail/adaptive_node_pool.hpp b/3party/boost/boost/container/detail/adaptive_node_pool.hpp
new file mode 100644
index 0000000000..f776b51e67
--- /dev/null
+++ b/3party/boost/boost/container/detail/adaptive_node_pool.hpp
@@ -0,0 +1,162 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. 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_ADAPTIVE_NODE_POOL_HPP
+#define BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#include <boost/intrusive/set.hpp>
+#include <boost/aligned_storage.hpp>
+#include <boost/container/detail/alloc_lib_auto_link.hpp>
+#include <boost/container/detail/multiallocation_chain.hpp>
+#include <boost/container/detail/pool_common_alloc.hpp>
+#include <boost/container/detail/mutex.hpp>
+#include <boost/container/detail/adaptive_node_pool_impl.hpp>
+#include <boost/container/detail/multiallocation_chain.hpp>
+#include <cstddef>
+#include <cmath>
+#include <cassert>
+#include <new>
+
+namespace boost {
+namespace container {
+namespace container_detail {
+
+template<bool AlignOnly>
+struct select_private_adaptive_node_pool_impl
+{
+ typedef boost::container::container_detail::
+ private_adaptive_node_pool_impl
+ < fake_segment_manager
+ , unsigned(AlignOnly)*::boost::container::adaptive_pool_flag::align_only
+ | ::boost::container::adaptive_pool_flag::size_ordered | ::boost::container::adaptive_pool_flag::address_ordered
+ > type;
+};
+
+//!Pooled memory allocator using an smart adaptive pool. Includes
+//!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< std::size_t NodeSize
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
+ , std::size_t OverheadPercent
+ >
+class private_adaptive_node_pool
+ : public select_private_adaptive_node_pool_impl<(OverheadPercent == 0)>::type
+{
+ typedef typename select_private_adaptive_node_pool_impl<OverheadPercent == 0>::type base_t;
+ //Non-copyable
+ private_adaptive_node_pool(const private_adaptive_node_pool &);
+ private_adaptive_node_pool &operator=(const private_adaptive_node_pool &);
+
+ public:
+ typedef typename base_t::multiallocation_chain multiallocation_chain;
+ static const std::size_t nodes_per_block = NodesPerBlock;
+
+ //!Constructor. Never throws
+ private_adaptive_node_pool()
+ : base_t(0
+ , NodeSize
+ , NodesPerBlock
+ , MaxFreeBlocks
+ , (unsigned char)OverheadPercent)
+ {}
+};
+
+//!Pooled memory allocator using adaptive pool. Includes
+//!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< std::size_t NodeSize
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
+ , std::size_t OverheadPercent
+ >
+class shared_adaptive_node_pool
+ : public private_adaptive_node_pool
+ <NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent>
+{
+ private:
+ typedef private_adaptive_node_pool
+ <NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent> private_node_allocator_t;
+ public:
+ typedef typename private_node_allocator_t::multiallocation_chain multiallocation_chain;
+
+ //!Constructor. Never throws
+ shared_adaptive_node_pool()
+ : private_node_allocator_t(){}
+
+ //!Destructor. Deallocates all allocated blocks. Never throws
+ ~shared_adaptive_node_pool()
+ {}
+
+ //!Allocates array of count elements. Can throw std::bad_alloc
+ void *allocate_node()
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ return private_node_allocator_t::allocate_node();
+ }
+
+ //!Deallocates an array pointed by ptr. Never throws
+ void deallocate_node(void *ptr)
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ private_node_allocator_t::deallocate_node(ptr);
+ }
+
+ //!Allocates a singly linked list of n nodes ending in null pointer.
+ //!can throw std::bad_alloc
+ void allocate_nodes(const std::size_t n, multiallocation_chain &chain)
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ return private_node_allocator_t::allocate_nodes(n, chain);
+ }
+
+ void deallocate_nodes(multiallocation_chain &chain)
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ private_node_allocator_t::deallocate_nodes(chain);
+ }
+
+ //!Deallocates all the free blocks of memory. Never throws
+ void deallocate_free_blocks()
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ private_node_allocator_t::deallocate_free_blocks();
+ }
+
+ private:
+ default_mutex mutex_;
+};
+
+} //namespace container_detail {
+} //namespace container {
+} //namespace boost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_HPP
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 8b673cf4b7..b7261bf197 100644
--- a/3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp
+++ b/3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,13 +11,14 @@
#ifndef BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_IMPL_HPP
#define BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_IMPL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
-#include <boost/container/container_fwd.hpp>
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
+
+#include <boost/container/container_fwd.hpp>
#include <boost/container/detail/utilities.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/set.hpp>
@@ -481,7 +482,7 @@ class private_adaptive_node_pool_impl
free_nodes_iterator itf(nodes.begin()), itbf(itbb);
size_type splice_node_count = size_type(-1);
while(itf != ite){
- void *pElem = container_detail::to_raw_pointer(&*itf);
+ void *pElem = container_detail::to_raw_pointer(container_detail::iterator_to_pointer(itf));
block_info_t &block_info = *this->priv_block_from_node(pElem);
BOOST_ASSERT(block_info.free_nodes.size() < m_real_num_node);
++splice_node_count;
@@ -638,7 +639,7 @@ class private_adaptive_node_pool_impl
{ //We iterate through the block tree to free the memory
const_block_iterator it(m_block_container.begin());
-
+
if(it != itend){
for(++it; it != itend; ++it){
const_block_iterator prev(it);
diff --git a/3party/boost/boost/container/detail/advanced_insert_int.hpp b/3party/boost/boost/container/detail/advanced_insert_int.hpp
index 86e2628bd5..b9eb074fdd 100644
--- a/3party/boost/boost/container/detail/advanced_insert_int.hpp
+++ b/3party/boost/boost/container/detail/advanced_insert_int.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2008-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2008-2013. 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)
//
@@ -11,12 +11,13 @@
#ifndef BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP
#define BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
+
#include <boost/container/allocator_traits.hpp>
#include <boost/container/detail/destroyers.hpp>
#include <boost/aligned_storage.hpp>
@@ -33,22 +34,21 @@ struct move_insert_range_proxy
typedef typename allocator_traits<A>::size_type size_type;
typedef typename allocator_traits<A>::value_type value_type;
- move_insert_range_proxy(A& a, FwdIt first)
- : a_(a), first_(first)
+ explicit move_insert_range_proxy(FwdIt first)
+ : first_(first)
{}
- void uninitialized_copy_n_and_update(Iterator p, size_type n)
+ void uninitialized_copy_n_and_update(A &a, Iterator p, size_type n)
{
this->first_ = ::boost::container::uninitialized_move_alloc_n_source
- (this->a_, this->first_, n, p);
+ (a, this->first_, n, p);
}
- void copy_n_and_update(Iterator p, size_type n)
+ void copy_n_and_update(A &, Iterator p, size_type n)
{
this->first_ = ::boost::container::move_n_source(this->first_, n, p);
}
- A &a_;
FwdIt first_;
};
@@ -59,21 +59,20 @@ struct insert_range_proxy
typedef typename allocator_traits<A>::size_type size_type;
typedef typename allocator_traits<A>::value_type value_type;
- insert_range_proxy(A& a, FwdIt first)
- : a_(a), first_(first)
+ explicit insert_range_proxy(FwdIt first)
+ : first_(first)
{}
- void uninitialized_copy_n_and_update(Iterator p, size_type n)
+ void uninitialized_copy_n_and_update(A &a, Iterator p, size_type n)
{
- this->first_ = ::boost::container::uninitialized_copy_alloc_n_source(this->a_, this->first_, n, p);
+ this->first_ = ::boost::container::uninitialized_copy_alloc_n_source(a, this->first_, n, p);
}
- void copy_n_and_update(Iterator p, size_type n)
+ void copy_n_and_update(A &, Iterator p, size_type n)
{
this->first_ = ::boost::container::copy_n_source(this->first_, n, p);
}
- A &a_;
FwdIt first_;
};
@@ -84,42 +83,45 @@ struct insert_n_copies_proxy
typedef typename allocator_traits<A>::size_type size_type;
typedef typename allocator_traits<A>::value_type value_type;
- insert_n_copies_proxy(A& a, const value_type &v)
- : a_(a), v_(v)
+ explicit insert_n_copies_proxy(const value_type &v)
+ : v_(v)
{}
- void uninitialized_copy_n_and_update(Iterator p, size_type n) const
- { boost::container::uninitialized_fill_alloc_n(this->a_, v_, n, p); }
+ void uninitialized_copy_n_and_update(A &a, Iterator p, size_type n) const
+ { boost::container::uninitialized_fill_alloc_n(a, v_, n, p); }
- void copy_n_and_update(Iterator p, size_type n) const
+ void copy_n_and_update(A &, Iterator p, size_type n) const
{ std::fill_n(p, n, v_); }
- A &a_;
const value_type &v_;
};
template<class A, class Iterator>
-struct insert_default_constructed_n_proxy
+struct insert_value_initialized_n_proxy
{
typedef ::boost::container::allocator_traits<A> alloc_traits;
typedef typename allocator_traits<A>::size_type size_type;
typedef typename allocator_traits<A>::value_type value_type;
+ void uninitialized_copy_n_and_update(A &a, Iterator p, size_type n) const
+ { boost::container::uninitialized_value_init_alloc_n(a, n, p); }
- explicit insert_default_constructed_n_proxy(A &a)
- : a_(a)
- {}
+ void copy_n_and_update(A &, Iterator, size_type) const
+ { BOOST_ASSERT(false); }
+};
- void uninitialized_copy_n_and_update(Iterator p, size_type n) const
- { boost::container::uninitialized_default_alloc_n(this->a_, n, p); }
+template<class A, class Iterator>
+struct insert_default_initialized_n_proxy
+{
+ typedef ::boost::container::allocator_traits<A> alloc_traits;
+ typedef typename allocator_traits<A>::size_type size_type;
+ typedef typename allocator_traits<A>::value_type value_type;
- void copy_n_and_update(Iterator, size_type) const
- {
- BOOST_ASSERT(false);
- }
+ void uninitialized_copy_n_and_update(A &a, Iterator p, size_type n) const
+ { boost::container::uninitialized_default_init_alloc_n(a, n, p); }
- private:
- A &a_;
+ void copy_n_and_update(A &, Iterator, size_type) const
+ { BOOST_ASSERT(false); }
};
template<class A, class Iterator>
@@ -129,26 +131,22 @@ struct insert_copy_proxy
typedef typename alloc_traits::size_type size_type;
typedef typename alloc_traits::value_type value_type;
- insert_copy_proxy(A& a, const value_type &v)
- : a_(a), v_(v)
+ explicit insert_copy_proxy(const value_type &v)
+ : v_(v)
{}
- void uninitialized_copy_n_and_update(Iterator p, size_type n) const
+ void uninitialized_copy_n_and_update(A &a, Iterator p, size_type n) const
{
BOOST_ASSERT(n == 1); (void)n;
- alloc_traits::construct( this->a_
- , container_detail::to_raw_pointer(&*p)
- , v_
- );
+ alloc_traits::construct( a, iterator_to_raw_pointer(p), v_);
}
- void copy_n_and_update(Iterator p, size_type n) const
+ void copy_n_and_update(A &, Iterator p, size_type n) const
{
BOOST_ASSERT(n == 1); (void)n;
*p =v_;
}
- A &a_;
const value_type &v_;
};
@@ -160,39 +158,35 @@ struct insert_move_proxy
typedef typename alloc_traits::size_type size_type;
typedef typename alloc_traits::value_type value_type;
- insert_move_proxy(A& a, value_type &v)
- : a_(a), v_(v)
+ explicit insert_move_proxy(value_type &v)
+ : v_(v)
{}
- void uninitialized_copy_n_and_update(Iterator p, size_type n) const
+ void uninitialized_copy_n_and_update(A &a, Iterator p, size_type n) const
{
BOOST_ASSERT(n == 1); (void)n;
- alloc_traits::construct( this->a_
- , container_detail::to_raw_pointer(&*p)
- , ::boost::move(v_)
- );
+ alloc_traits::construct( a, iterator_to_raw_pointer(p), ::boost::move(v_) );
}
- void copy_n_and_update(Iterator p, size_type n) const
+ void copy_n_and_update(A &, Iterator p, size_type n) const
{
BOOST_ASSERT(n == 1); (void)n;
*p = ::boost::move(v_);
}
- A &a_;
value_type &v_;
};
template<class It, class A>
-insert_move_proxy<A, It> get_insert_value_proxy(A& a, BOOST_RV_REF(typename std::iterator_traits<It>::value_type) v)
+insert_move_proxy<A, It> get_insert_value_proxy(BOOST_RV_REF(typename std::iterator_traits<It>::value_type) v)
{
- return insert_move_proxy<A, It>(a, v);
+ return insert_move_proxy<A, It>(v);
}
template<class It, class A>
-insert_copy_proxy<A, It> get_insert_value_proxy(A& a, const typename std::iterator_traits<It>::value_type &v)
+insert_copy_proxy<A, It> get_insert_value_proxy(const typename std::iterator_traits<It>::value_type &v)
{
- return insert_copy_proxy<A, It>(a, v);
+ return insert_copy_proxy<A, It>(v);
}
}}} //namespace boost { namespace container { namespace container_detail {
@@ -217,26 +211,22 @@ struct insert_non_movable_emplace_proxy
typedef typename build_number_seq<sizeof...(Args)>::type index_tuple_t;
- explicit insert_non_movable_emplace_proxy(A &a, Args&&... args)
- : a_(a), args_(args...)
+ explicit insert_non_movable_emplace_proxy(Args&&... args)
+ : args_(args...)
{}
- void uninitialized_copy_n_and_update(Iterator p, size_type n)
- { this->priv_uninitialized_copy_some_and_update(index_tuple_t(), p, n); }
+ void uninitialized_copy_n_and_update(A &a, Iterator p, size_type n)
+ { this->priv_uninitialized_copy_some_and_update(a, index_tuple_t(), p, n); }
private:
template<int ...IdxPack>
- void priv_uninitialized_copy_some_and_update(const index_tuple<IdxPack...>&, Iterator p, size_type n)
+ void priv_uninitialized_copy_some_and_update(A &a, const index_tuple<IdxPack...>&, Iterator p, size_type n)
{
BOOST_ASSERT(n == 1); (void)n;
- alloc_traits::construct( this->a_
- , container_detail::to_raw_pointer(&*p)
- , ::boost::forward<Args>(get<IdxPack>(this->args_))...
- );
+ alloc_traits::construct( a, iterator_to_raw_pointer(p), ::boost::forward<Args>(get<IdxPack>(this->args_))... );
}
protected:
- A &a_;
tuple<Args&...> args_;
};
@@ -250,32 +240,32 @@ struct insert_emplace_proxy
typedef typename base_t::size_type size_type;
typedef typename base_t::index_tuple_t index_tuple_t;
- explicit insert_emplace_proxy(A &a, Args&&... args)
- : base_t(a, ::boost::forward<Args>(args)...)
+ explicit insert_emplace_proxy(Args&&... args)
+ : base_t(::boost::forward<Args>(args)...)
{}
- void copy_n_and_update(Iterator p, size_type n)
- { this->priv_copy_some_and_update(index_tuple_t(), p, n); }
+ void copy_n_and_update(A &a, Iterator p, size_type n)
+ { this->priv_copy_some_and_update(a, index_tuple_t(), p, n); }
private:
template<int ...IdxPack>
- void priv_copy_some_and_update(const index_tuple<IdxPack...>&, Iterator p, size_type n)
+ void priv_copy_some_and_update(A &a, const index_tuple<IdxPack...>&, Iterator p, size_type n)
{
BOOST_ASSERT(n ==1); (void)n;
aligned_storage<sizeof(value_type), alignment_of<value_type>::value> v;
value_type *vp = static_cast<value_type *>(static_cast<void *>(&v));
- alloc_traits::construct(this->a_, vp,
+ alloc_traits::construct(a, vp,
::boost::forward<Args>(get<IdxPack>(this->args_))...);
BOOST_TRY{
*p = ::boost::move(*vp);
}
BOOST_CATCH(...){
- alloc_traits::destroy(this->a_, vp);
+ alloc_traits::destroy(a, vp);
BOOST_RETHROW
}
BOOST_CATCH_END
- alloc_traits::destroy(this->a_, vp);
+ alloc_traits::destroy(a, vp);
}
};
@@ -298,27 +288,24 @@ struct BOOST_PP_CAT(insert_non_movable_emplace_proxy_arg, N)
typedef typename alloc_traits::size_type size_type; \
typedef typename alloc_traits::value_type value_type; \
\
- BOOST_PP_CAT(insert_non_movable_emplace_proxy_arg, N) \
- ( A &a BOOST_PP_ENUM_TRAILING(N, BOOST_CONTAINER_PP_PARAM_LIST, _) ) \
- : a_(a) \
- BOOST_PP_ENUM_TRAILING(N, BOOST_CONTAINER_PP_PARAM_INIT, _) \
+ explicit BOOST_PP_CAT(insert_non_movable_emplace_proxy_arg, N) \
+ ( BOOST_PP_ENUM(N, BOOST_CONTAINER_PP_PARAM_LIST, _) ) \
+ BOOST_PP_EXPR_IF(N, :) BOOST_PP_ENUM(N, BOOST_CONTAINER_PP_PARAM_INIT, _) \
{} \
\
- void uninitialized_copy_n_and_update(Iterator p, size_type n) \
+ void uninitialized_copy_n_and_update(A &a, Iterator p, size_type n) \
{ \
BOOST_ASSERT(n == 1); (void)n; \
alloc_traits::construct \
- ( this->a_ \
- , container_detail::to_raw_pointer(&*p) \
+ ( a, iterator_to_raw_pointer(p) \
BOOST_PP_ENUM_TRAILING(N, BOOST_CONTAINER_PP_MEMBER_FORWARD, _) \
); \
} \
\
- void copy_n_and_update(Iterator, size_type) \
+ void copy_n_and_update(A &, Iterator, size_type) \
{ BOOST_ASSERT(false); } \
\
protected: \
- A &a_; \
BOOST_PP_REPEAT(N, BOOST_CONTAINER_PP_PARAM_DEFINE, _) \
}; \
\
@@ -333,27 +320,27 @@ struct BOOST_PP_CAT(insert_emplace_proxy_arg, N)
typedef typename base_t::size_type size_type; \
typedef boost::container::allocator_traits<A> alloc_traits; \
\
- BOOST_PP_CAT(insert_emplace_proxy_arg, N) \
- ( A &a BOOST_PP_ENUM_TRAILING(N, BOOST_CONTAINER_PP_PARAM_LIST, _) ) \
- : base_t(a BOOST_PP_ENUM_TRAILING(N, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ) \
+ explicit BOOST_PP_CAT(insert_emplace_proxy_arg, N) \
+ ( BOOST_PP_ENUM(N, BOOST_CONTAINER_PP_PARAM_LIST, _) ) \
+ : base_t(BOOST_PP_ENUM(N, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ) \
{} \
\
- void copy_n_and_update(Iterator p, size_type n) \
+ void copy_n_and_update(A &a, Iterator p, size_type n) \
{ \
BOOST_ASSERT(n == 1); (void)n; \
aligned_storage<sizeof(value_type), alignment_of<value_type>::value> v; \
value_type *vp = static_cast<value_type *>(static_cast<void *>(&v)); \
- alloc_traits::construct(this->a_, vp \
+ alloc_traits::construct(a, vp \
BOOST_PP_ENUM_TRAILING(N, BOOST_CONTAINER_PP_MEMBER_FORWARD, _)); \
BOOST_TRY{ \
*p = ::boost::move(*vp); \
} \
BOOST_CATCH(...){ \
- alloc_traits::destroy(this->a_, vp); \
+ alloc_traits::destroy(a, vp); \
BOOST_RETHROW \
} \
BOOST_CATCH_END \
- alloc_traits::destroy(this->a_, vp); \
+ alloc_traits::destroy(a, vp); \
} \
}; \
//!
diff --git a/3party/boost/boost/container/detail/algorithms.hpp b/3party/boost/boost/container/detail/algorithms.hpp
index 824e44b90d..9358995127 100644
--- a/3party/boost/boost/container/detail/algorithms.hpp
+++ b/3party/boost/boost/container/detail/algorithms.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012.
+// (C) Copyright Ion Gaztanaga 2005-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,11 +13,11 @@
#ifndef BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP
#define BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/type_traits/has_trivial_copy.hpp>
@@ -35,13 +35,13 @@ namespace boost {
namespace container {
template<class It>
-struct is_default_construct_iterator
+struct is_value_init_construct_iterator
{
static const bool value = false;
};
template<class U, class D>
-struct is_default_construct_iterator<default_construct_iterator<U, D> >
+struct is_value_init_construct_iterator<value_init_construct_iterator<U, D> >
{
static const bool value = true;
};
@@ -64,11 +64,17 @@ inline void construct_in_place(A &a, T* dest, InpIt source)
//#endif
template<class A, class T, class U, class D>
-inline void construct_in_place(A &a, T *dest, default_construct_iterator<U, D>)
+inline void construct_in_place(A &a, T *dest, value_init_construct_iterator<U, D>)
{
boost::container::allocator_traits<A>::construct(a, dest);
}
+template<class A, class T, class U, class D>
+inline void construct_in_place(A &a, T *dest, default_init_construct_iterator<U, D>)
+{
+ boost::container::allocator_traits<A>::construct(a, dest, default_init);
+}
+
template<class A, class T, class U, class EF, class D>
inline void construct_in_place(A &a, T *dest, emplace_iterator<U, EF, D> ei)
{
diff --git a/3party/boost/boost/container/detail/alloc_lib.h b/3party/boost/boost/container/detail/alloc_lib.h
new file mode 100644
index 0000000000..4802d9d814
--- /dev/null
+++ b/3party/boost/boost/container/detail/alloc_lib.h
@@ -0,0 +1,326 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. 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_ALLOC_LIB_EXT_H
+#define BOOST_CONTAINER_ALLOC_LIB_EXT_H
+
+#include <stddef.h>
+
+#ifdef _MSC_VER
+#pragma warning (push)
+#pragma warning (disable : 4127)
+
+/*
+ we need to import/export our code only if the user has specifically
+ asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+ libraries to be dynamically linked, or BOOST_CONTAINER_DYN_LINK
+ if they want just this one to be dynamically liked:
+*/
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CONTAINER_DYN_LINK)
+
+/* export if this is our own source, otherwise import: */
+#ifdef BOOST_CONTAINER_SOURCE
+# define BOOST_CONTAINER_DECL __declspec(dllexport)
+#else
+# define BOOST_CONTAINER_DECL __declspec(dllimport)
+#endif /* BOOST_CONTAINER_SOURCE */
+#endif /* DYN_LINK */
+#endif /* _MSC_VER */
+
+/* if BOOST_CONTAINER_DECL isn't defined yet define it now: */
+#ifndef BOOST_CONTAINER_DECL
+#define BOOST_CONTAINER_DECL
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!An forward iterator to traverse the elements of a memory chain container.*/
+typedef struct multialloc_node_impl
+{
+ struct multialloc_node_impl *next_node_ptr;
+} boost_cont_memchain_node;
+
+
+/*!An forward iterator to traverse the elements of a memory chain container.*/
+typedef struct multialloc_it_impl
+{
+ boost_cont_memchain_node *node_ptr;
+} boost_cont_memchain_it;
+
+/*!Memory chain: A container holding memory portions allocated by boost_cont_multialloc_nodes
+ and boost_cont_multialloc_arrays functions.*/
+typedef struct boost_cont_memchain_impl
+{
+ size_t num_mem;
+ boost_cont_memchain_node root_node;
+ boost_cont_memchain_node *last_node_ptr;
+} boost_cont_memchain;
+
+/*!Advances the iterator one position so that it points to the next element in the memory chain*/
+#define BOOST_CONTAINER_MEMIT_NEXT(IT) (IT.node_ptr = IT.node_ptr->next_node_ptr)
+
+/*!Returns the address of the memory chain currently pointed by the iterator*/
+#define BOOST_CONTAINER_MEMIT_ADDR(IT) ((void*)IT.node_ptr)
+
+/*!Initializer for an iterator pointing to the position before the first element*/
+#define BOOST_CONTAINER_MEMCHAIN_BEFORE_BEGIN_IT(PMEMCHAIN) { &((PMEMCHAIN)->root_node) }
+
+/*!Initializer for an iterator pointing to the first element*/
+#define BOOST_CONTAINER_MEMCHAIN_BEGIN_IT(PMEMCHAIN) {(PMEMCHAIN)->root_node.next_node_ptr }
+
+/*!Initializer for an iterator pointing to the last element*/
+#define BOOST_CONTAINER_MEMCHAIN_LAST_IT(PMEMCHAIN) {(PMEMCHAIN)->last_node_ptr }
+
+/*!Initializer for an iterator pointing to one past the last element (end iterator)*/
+#define BOOST_CONTAINER_MEMCHAIN_END_IT(PMEMCHAIN) {(boost_cont_memchain_node *)0 }
+
+/*!True if IT is the end iterator, false otherwise*/
+#define BOOST_CONTAINER_MEMCHAIN_IS_END_IT(PMEMCHAIN, IT) (!(IT).node_ptr)
+
+/*!The address of the first memory portion hold by the memory chain*/
+#define BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(PMEMCHAIN)((void*)((PMEMCHAIN)->root_node.next_node_ptr))
+
+/*!The address of the last memory portion hold by the memory chain*/
+#define BOOST_CONTAINER_MEMCHAIN_LASTMEM(PMEMCHAIN) ((void*)((PMEMCHAIN)->last_node_ptr))
+
+/*!The number of memory portions hold by the memory chain*/
+#define BOOST_CONTAINER_MEMCHAIN_SIZE(PMEMCHAIN) ((PMEMCHAIN)->num_mem)
+
+/*!Initializes the memory chain from the first memory portion, the last memory
+ portion and number of portions obtained from another memory chain*/
+#define BOOST_CONTAINER_MEMCHAIN_INIT_FROM(PMEMCHAIN, FIRST, LAST, NUM)\
+ (PMEMCHAIN)->last_node_ptr = (boost_cont_memchain_node *)(LAST), \
+ (PMEMCHAIN)->root_node.next_node_ptr = (boost_cont_memchain_node *)(FIRST), \
+ (PMEMCHAIN)->num_mem = (NUM);\
+/**/
+
+/*!Default initializes a memory chain. Postconditions: begin iterator is end iterator,
+ the number of portions is zero.*/
+#define BOOST_CONTAINER_MEMCHAIN_INIT(PMEMCHAIN)\
+ ((PMEMCHAIN)->root_node.next_node_ptr = 0, (PMEMCHAIN)->last_node_ptr = &((PMEMCHAIN)->root_node), (PMEMCHAIN)->num_mem = 0)\
+/**/
+
+/*!True if the memory chain is empty (holds no memory portions*/
+#define BOOST_CONTAINER_MEMCHAIN_EMPTY(PMEMCHAIN)\
+ ((PMEMCHAIN)->num_mem == 0)\
+/**/
+
+/*!Inserts a new memory portions in the front of the chain*/
+#define BOOST_CONTAINER_MEMCHAIN_PUSH_BACK(PMEMCHAIN, MEM)\
+ do{\
+ boost_cont_memchain *____chain____ = (PMEMCHAIN);\
+ boost_cont_memchain_node *____tmp_mem____ = (boost_cont_memchain_node *)(MEM);\
+ ____chain____->last_node_ptr->next_node_ptr = ____tmp_mem____;\
+ ____tmp_mem____->next_node_ptr = 0;\
+ ____chain____->last_node_ptr = ____tmp_mem____;\
+ ++____chain____->num_mem;\
+ }while(0)\
+/**/
+
+/*!Inserts a new memory portions in the back of the chain*/
+#define BOOST_CONTAINER_MEMCHAIN_PUSH_FRONT(PMEMCHAIN, MEM)\
+ do{\
+ boost_cont_memchain *____chain____ = (PMEMCHAIN);\
+ boost_cont_memchain_node *____tmp_mem____ = (boost_cont_memchain_node *)(MEM);\
+ boost_cont_memchain *____root____ = &((PMEMCHAIN)->root_node);\
+ if(!____chain____->root_node.next_node_ptr){\
+ ____chain____->last_node_ptr = ____tmp_mem____;\
+ }\
+ boost_cont_memchain_node *____old_first____ = ____root____->next_node_ptr;\
+ ____tmp_mem____->next_node_ptr = ____old_first____;\
+ ____root____->next_node_ptr = ____tmp_mem____;\
+ ++____chain____->num_mem;\
+ }while(0)\
+/**/
+
+/*!Erases the memory portion after the portion pointed by BEFORE_IT from the memory chain*/
+/*!Precondition: BEFORE_IT must be a valid iterator of the memory chain and it can't be the end iterator*/
+#define BOOST_CONTAINER_MEMCHAIN_ERASE_AFTER(PMEMCHAIN, BEFORE_IT)\
+ do{\
+ boost_cont_memchain *____chain____ = (PMEMCHAIN);\
+ boost_cont_memchain_node *____prev_node____ = (BEFORE_IT).node_ptr;\
+ boost_cont_memchain_node *____erase_node____ = ____prev_node____->next_node_ptr;\
+ if(____chain____->last_node_ptr == ____erase_node____){\
+ ____chain____->last_node_ptr = &____chain____->root_node;\
+ }\
+ ____prev_node____->next_node_ptr = ____erase_node____->next_node_ptr;\
+ --____chain____->num_mem;\
+ }while(0)\
+/**/
+
+/*!Erases the first portion from the memory chain.
+ Precondition: the memory chain must not be empty*/
+#define BOOST_CONTAINER_MEMCHAIN_POP_FRONT(PMEMCHAIN)\
+ do{\
+ boost_cont_memchain *____chain____ = (PMEMCHAIN);\
+ boost_cont_memchain_node *____prev_node____ = &____chain____->root_node;\
+ boost_cont_memchain_node *____erase_node____ = ____prev_node____->next_node_ptr;\
+ if(____chain____->last_node_ptr == ____erase_node____){\
+ ____chain____->last_node_ptr = &____chain____->root_node;\
+ }\
+ ____prev_node____->next_node_ptr = ____erase_node____->next_node_ptr;\
+ --____chain____->num_mem;\
+ }while(0)\
+/**/
+
+/*!Joins two memory chains inserting the portions of the second chain at the back of the first chain*/
+/*
+#define BOOST_CONTAINER_MEMCHAIN_SPLICE_BACK(PMEMCHAIN, PMEMCHAIN2)\
+ do{\
+ boost_cont_memchain *____chain____ = (PMEMCHAIN);\
+ boost_cont_memchain *____chain2____ = (PMEMCHAIN2);\
+ if(!____chain2____->root_node.next_node_ptr){\
+ break;\
+ }\
+ else if(!____chain____->first_mem){\
+ ____chain____->first_mem = ____chain2____->first_mem;\
+ ____chain____->last_node_ptr = ____chain2____->last_node_ptr;\
+ ____chain____->num_mem = ____chain2____->num_mem;\
+ BOOST_CONTAINER_MEMCHAIN_INIT(*____chain2____);\
+ }\
+ else{\
+ ____chain____->last_node_ptr->next_node_ptr = ____chain2____->first_mem;\
+ ____chain____->last_node_ptr = ____chain2____->last_node_ptr;\
+ ____chain____->num_mem += ____chain2____->num_mem;\
+ }\
+ }while(0)\*/
+/**/
+
+/*!Joins two memory chains inserting the portions of the second chain at the back of the first chain*/
+#define BOOST_CONTAINER_MEMCHAIN_INCORPORATE_AFTER(PMEMCHAIN, BEFORE_IT, FIRST, BEFORELAST, NUM)\
+ do{\
+ boost_cont_memchain *____chain____ = (PMEMCHAIN);\
+ boost_cont_memchain_node *____pnode____ = (BEFORE_IT).node_ptr;\
+ boost_cont_memchain_node *____next____ = ____pnode____->next_node_ptr;\
+ boost_cont_memchain_node *____first____ = (boost_cont_memchain_node *)(FIRST);\
+ boost_cont_memchain_node *____blast____ = (boost_cont_memchain_node *)(BEFORELAST);\
+ size_t ____num____ = (NUM);\
+ if(!____num____){\
+ break;\
+ }\
+ if(____pnode____ == ____chain____->last_node_ptr){\
+ ____chain____->last_node_ptr = ____blast____;\
+ }\
+ ____pnode____->next_node_ptr = ____first____;\
+ ____blast____->next_node_ptr = ____next____;\
+ ____chain____->num_mem += ____num____;\
+ }while(0)\
+/**/
+
+BOOST_CONTAINER_DECL size_t boost_cont_size(const void *p);
+
+BOOST_CONTAINER_DECL void* boost_cont_malloc(size_t bytes);
+
+BOOST_CONTAINER_DECL void boost_cont_free(void* mem);
+
+BOOST_CONTAINER_DECL void* boost_cont_memalign(size_t bytes, size_t alignment);
+
+/*!Indicates the all elements allocated by boost_cont_multialloc_nodes or boost_cont_multialloc_arrays
+ must be contiguous.*/
+#define DL_MULTIALLOC_ALL_CONTIGUOUS ((size_t)(-1))
+
+/*!Indicates the number of contiguous elements allocated by boost_cont_multialloc_nodes or boost_cont_multialloc_arrays
+ should be selected by those functions.*/
+#define DL_MULTIALLOC_DEFAULT_CONTIGUOUS ((size_t)(0))
+
+BOOST_CONTAINER_DECL int boost_cont_multialloc_nodes
+ (size_t n_elements, size_t elem_size, size_t contiguous_elements, boost_cont_memchain *pchain);
+
+BOOST_CONTAINER_DECL int boost_cont_multialloc_arrays
+ (size_t n_elements, const size_t *sizes, size_t sizeof_element, size_t contiguous_elements, boost_cont_memchain *pchain);
+
+BOOST_CONTAINER_DECL void boost_cont_multidealloc(boost_cont_memchain *pchain);
+
+BOOST_CONTAINER_DECL size_t boost_cont_footprint();
+
+BOOST_CONTAINER_DECL size_t boost_cont_allocated_memory();
+
+BOOST_CONTAINER_DECL size_t boost_cont_chunksize(const void *p);
+
+BOOST_CONTAINER_DECL int boost_cont_all_deallocated();
+
+typedef struct boost_cont_malloc_stats_impl
+{
+ size_t max_system_bytes;
+ size_t system_bytes;
+ size_t in_use_bytes;
+} boost_cont_malloc_stats_t;
+
+BOOST_CONTAINER_DECL boost_cont_malloc_stats_t boost_cont_malloc_stats();
+
+BOOST_CONTAINER_DECL size_t boost_cont_in_use_memory();
+
+BOOST_CONTAINER_DECL int boost_cont_trim(size_t pad);
+
+BOOST_CONTAINER_DECL int boost_cont_mallopt
+ (int parameter_number, int parameter_value);
+
+BOOST_CONTAINER_DECL int boost_cont_grow
+ (void* oldmem, size_t minbytes, size_t maxbytes, size_t *received);
+
+BOOST_CONTAINER_DECL int boost_cont_shrink
+ (void* oldmem, size_t minbytes, size_t maxbytes, size_t *received, int do_commit);
+
+BOOST_CONTAINER_DECL void* boost_cont_alloc
+ (size_t minbytes, size_t preferred_bytes, size_t *received_bytes);
+
+BOOST_CONTAINER_DECL int boost_cont_malloc_check();
+
+typedef unsigned int allocation_type;
+
+enum
+{
+ // constants for allocation commands
+ BOOST_CONTAINER_ALLOCATE_NEW = 0X01,
+ BOOST_CONTAINER_EXPAND_FWD = 0X02,
+ BOOST_CONTAINER_EXPAND_BWD = 0X04,
+ BOOST_CONTAINER_SHRINK_IN_PLACE = 0X08,
+ BOOST_CONTAINER_NOTHROW_ALLOCATION = 0X10,
+// BOOST_CONTAINER_ZERO_MEMORY = 0X20,
+ BOOST_CONTAINER_TRY_SHRINK_IN_PLACE = 0X40,
+ BOOST_CONTAINER_EXPAND_BOTH = BOOST_CONTAINER_EXPAND_FWD | BOOST_CONTAINER_EXPAND_BWD,
+ BOOST_CONTAINER_EXPAND_OR_NEW = BOOST_CONTAINER_ALLOCATE_NEW | BOOST_CONTAINER_EXPAND_BOTH
+};
+
+//#define BOOST_CONTAINERDLMALLOC__FOOTERS
+#ifndef BOOST_CONTAINERDLMALLOC__FOOTERS
+enum { BOOST_CONTAINER_ALLOCATION_PAYLOAD = sizeof(size_t) };
+#else
+enum { BOOST_CONTAINER_ALLOCATION_PAYLOAD = sizeof(size_t)*2 };
+#endif
+
+typedef struct boost_cont_command_ret_impl
+{
+ void *first;
+ int second;
+}boost_cont_command_ret_t;
+
+BOOST_CONTAINER_DECL boost_cont_command_ret_t boost_cont_allocation_command
+ ( allocation_type command
+ , size_t sizeof_object
+ , size_t limit_objects
+ , size_t preferred_objects
+ , size_t *received_objects
+ , void *reuse_ptr
+ );
+
+BOOST_CONTAINER_DECL int boost_cont_mallopt(int param_number, int value);
+
+#ifdef __cplusplus
+} //extern "C" {
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (pop)
+#endif
+
+
+#endif //#define BOOST_CONTAINERDLMALLOC__EXT_H
diff --git a/3party/boost/boost/container/detail/alloc_lib_auto_link.hpp b/3party/boost/boost/container/detail/alloc_lib_auto_link.hpp
new file mode 100644
index 0000000000..e424890f13
--- /dev/null
+++ b/3party/boost/boost/container/detail/alloc_lib_auto_link.hpp
@@ -0,0 +1,16 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. 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_BOOST_CONT_EXT_AUTO_LINK_HPP
+#define BOOST_CONTAINER_DETAIL_BOOST_CONT_EXT_AUTO_LINK_HPP
+
+#include <boost/container/detail/auto_link.hpp>
+#include <boost/container/detail/alloc_lib.h>
+
+#endif //#ifndef BOOST_CONTAINER_DETAIL_BOOST_CONT_EXT_AUTO_LINK_HPP
diff --git a/3party/boost/boost/container/detail/allocation_type.hpp b/3party/boost/boost/container/detail/allocation_type.hpp
index 1ebf20ed70..65d543ad50 100644
--- a/3party/boost/boost/container/detail/allocation_type.hpp
+++ b/3party/boost/boost/container/detail/allocation_type.hpp
@@ -1,6 +1,6 @@
///////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,19 +11,19 @@
#ifndef BOOST_CONTAINER_ALLOCATION_TYPE_HPP
#define BOOST_CONTAINER_ALLOCATION_TYPE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
namespace boost {
namespace container {
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
enum allocation_type_v
-{
+{
// constants for allocation commands
allocate_new_v = 0x01,
expand_fwd_v = 0x02,
@@ -37,7 +37,7 @@ enum allocation_type_v
};
typedef int allocation_type;
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
static const allocation_type allocate_new = (allocation_type)allocate_new_v;
static const allocation_type expand_fwd = (allocation_type)expand_fwd_v;
static const allocation_type expand_bwd = (allocation_type)expand_bwd_v;
diff --git a/3party/boost/boost/container/detail/allocator_version_traits.hpp b/3party/boost/boost/container/detail/allocator_version_traits.hpp
index 4cef676adf..d4567da0d7 100644
--- a/3party/boost/boost/container/detail/allocator_version_traits.hpp
+++ b/3party/boost/boost/container/detail/allocator_version_traits.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2012-2013. 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)
//
@@ -11,12 +11,13 @@
#ifndef BOOST_CONTAINER_DETAIL_ALLOCATOR_VERSION_TRAITS_HPP
#define BOOST_CONTAINER_DETAIL_ALLOCATOR_VERSION_TRAITS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
+
#include <boost/container/allocator_traits.hpp> //allocator_traits
#include <boost/container/throw_exception.hpp>
#include <boost/container/detail/multiallocation_chain.hpp> //multiallocation_chain
@@ -92,8 +93,12 @@ struct allocator_version_traits<Allocator, 1>
static void deallocate_individual(Allocator &a, multiallocation_chain &holder)
{
- while(!holder.empty()){
- a.deallocate(holder.pop_front(), 1);
+ size_type n = holder.size();
+ typename multiallocation_chain::iterator it = holder.begin();
+ while(n--){
+ pointer p = boost::intrusive::pointer_traits<pointer>::pointer_to(*it);
+ ++it;
+ a.deallocate(p, 1);
}
}
diff --git a/3party/boost/boost/container/detail/auto_link.hpp b/3party/boost/boost/container/detail/auto_link.hpp
new file mode 100644
index 0000000000..2e4733363d
--- /dev/null
+++ b/3party/boost/boost/container/detail/auto_link.hpp
@@ -0,0 +1,38 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2007-2013. 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_AUTO_LINK_HPP_INCLUDED
+#define BOOST_CONTAINER_DETAIL_AUTO_LINK_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+//
+// Automatically link to the correct build variant where possible.
+//
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_CONTAINER_NO_LIB) && !defined(BOOST_CONTAINER_SOURCE)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME boost_container
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CONTAINER_DYN_LINK)
+# define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif // auto-linking disabled
+
+#endif //#ifndef BOOST_CONTAINER_DETAIL_AUTO_LINK_HPP_INCLUDED
diff --git a/3party/boost/boost/container/detail/config_begin.hpp b/3party/boost/boost/container/detail/config_begin.hpp
index 83c2cfe40c..6c54befcc7 100644
--- a/3party/boost/boost/container/detail/config_begin.hpp
+++ b/3party/boost/boost/container/detail/config_begin.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -18,6 +18,10 @@
#define BOOST_CONTAINER_DETAIL_CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE
#endif
+ #ifndef _SCL_SECURE_NO_WARNINGS
+ #define BOOST_CONTAINER_DETAIL_SCL_SECURE_NO_WARNINGS
+ #define _SCL_SECURE_NO_WARNINGS
+ #endif
#pragma warning (push)
#pragma warning (disable : 4702) // unreachable code
#pragma warning (disable : 4706) // assignment within conditional expression
@@ -46,4 +50,5 @@
#pragma warning (disable : 4673) // throwing '' the following types will not be considered at the catch site
#pragma warning (disable : 4671) // the copy constructor is inaccessible
#pragma warning (disable : 4584) // X is already a base-class of Y
+ #pragma warning (disable : 4510) // default constructor could not be generated
#endif //BOOST_MSVC
diff --git a/3party/boost/boost/container/detail/config_end.hpp b/3party/boost/boost/container/detail/config_end.hpp
index 34513718cc..7217019b85 100644
--- a/3party/boost/boost/container/detail/config_end.hpp
+++ b/3party/boost/boost/container/detail/config_end.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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,5 +13,9 @@
#undef BOOST_CONTAINER_DETAIL_CRT_SECURE_NO_DEPRECATE
#undef _CRT_SECURE_NO_DEPRECATE
#endif
+ #ifdef BOOST_CONTAINER_DETAIL_SCL_SECURE_NO_WARNINGS
+ #undef BOOST_CONTAINER_DETAIL_SCL_SECURE_NO_WARNINGS
+ #undef _SCL_SECURE_NO_WARNINGS
+ #endif
#endif
diff --git a/3party/boost/boost/container/detail/destroyers.hpp b/3party/boost/boost/container/detail/destroyers.hpp
index f9bfd867ae..064589584c 100644
--- a/3party/boost/boost/container/detail/destroyers.hpp
+++ b/3party/boost/boost/container/detail/destroyers.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012.
+// (C) Copyright Ion Gaztanaga 2005-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,12 +13,13 @@
#ifndef BOOST_CONTAINER_DESTROYERS_HPP
#define BOOST_CONTAINER_DESTROYERS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
+
#include <boost/container/detail/version_type.hpp>
#include <boost/container/detail/utilities.hpp>
#include <boost/container/allocator_traits.hpp>
@@ -68,6 +69,9 @@ struct scoped_deallocator
pointer get() const
{ return m_ptr; }
+ void set(const pointer &p)
+ { m_ptr = p; }
+
void release()
{ m_ptr = 0; }
};
@@ -87,6 +91,9 @@ struct null_scoped_deallocator
pointer get() const
{ return pointer(); }
+
+ void set(const pointer &)
+ {}
};
//!A deleter for scoped_ptr that deallocates the memory
@@ -191,7 +198,7 @@ struct scoped_destructor_n
void shrink_forward(size_type inc)
{ m_n -= inc; m_p += inc; }
-
+
~scoped_destructor_n()
{
if(!m_p) return;
@@ -225,6 +232,9 @@ struct null_scoped_destructor_n
void increment_size_backwards(size_type)
{}
+ void shrink_forward(size_type)
+ {}
+
void release()
{}
};
@@ -249,6 +259,11 @@ class scoped_destructor
void release()
{ pv_ = 0; }
+
+ void set(value_type *ptr) { pv_ = ptr; }
+
+ value_type *get() const { return pv_; }
+
private:
value_type *pv_;
A &a_;
diff --git a/3party/boost/boost/container/detail/flat_tree.hpp b/3party/boost/boost/container/detail/flat_tree.hpp
index 90f0352836..7ccf33ca9d 100644
--- a/3party/boost/boost/container/detail/flat_tree.hpp
+++ b/3party/boost/boost/container/detail/flat_tree.hpp
@@ -1,6 +1,6 @@
////////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,11 +11,11 @@
#ifndef BOOST_CONTAINER_FLAT_TREE_HPP
#define BOOST_CONTAINER_FLAT_TREE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/container_fwd.hpp>
@@ -51,7 +51,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()
{}
@@ -68,7 +68,7 @@ class flat_tree_value_compare
const Compare &get_comp() const
{ return *this; }
-
+
Compare &get_comp()
{ return *this; }
};
@@ -85,9 +85,9 @@ struct get_flat_tree_iterators
rebind_pointer<const iterator_element_type>::type const_iterator;
#else //BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
typedef typename container_detail::
- vector_iterator<Pointer> iterator;
+ vec_iterator<Pointer, false> iterator;
typedef typename container_detail::
- vector_const_iterator<Pointer> const_iterator;
+ vec_iterator<Pointer, true > const_iterator;
#endif //BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
@@ -115,7 +115,7 @@ class flat_tree
: value_compare(), m_vect()
{}
- Data(const Data &d)
+ explicit Data(const Data &d)
: value_compare(static_cast<const value_compare&>(d)), m_vect(d.m_vect)
{}
@@ -131,15 +131,18 @@ class flat_tree
: value_compare(boost::move(static_cast<value_compare&>(d))), m_vect(boost::move(d.m_vect), a)
{}
- Data(const Compare &comp)
+ explicit Data(const Compare &comp)
: value_compare(comp), m_vect()
{}
- Data(const Compare &comp,
- const allocator_t &alloc)
+ Data(const Compare &comp, const allocator_t &alloc)
: value_compare(comp), m_vect(alloc)
{}
+ explicit Data(const allocator_t &alloc)
+ : value_compare(), m_vect(alloc)
+ {}
+
Data& operator=(BOOST_COPY_ASSIGN_REF(Data) d)
{
this->value_compare::operator=(d);
@@ -203,6 +206,10 @@ class flat_tree
: m_data(comp, a)
{ }
+ explicit flat_tree(const allocator_type& a)
+ : m_data(a)
+ { }
+
flat_tree(const flat_tree& x)
: m_data(x.m_data)
{ }
@@ -233,16 +240,24 @@ class flat_tree
, const allocator_type& a = allocator_type())
: m_data(comp, a)
{
+ //Use cend() as hint to achieve linear time for
+ //ordered ranges as required by the standard
+ //for the constructor
+ //Call end() every iteration as reallocation might have invalidated iterators
if(unique_insertion){
- this->insert_unique(first, last);
+ for ( ; first != last; ++first){
+ this->insert_unique(this->cend(), *first);
+ }
}
else{
- this->insert_equal(first, last);
+ for ( ; first != last; ++first){
+ this->insert_equal(this->cend(), *first);
+ }
}
}
~flat_tree()
- { }
+ {}
flat_tree& operator=(BOOST_COPY_ASSIGN_REF(flat_tree) x)
{ m_data = x.m_data; return *this; }
@@ -250,11 +265,14 @@ 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(); }
+ value_compare value_comp() const
+ { return this->m_data; }
+
allocator_type get_allocator() const
{ return this->m_data.m_vect.get_allocator(); }
@@ -316,21 +334,21 @@ class flat_tree
// insert/erase
std::pair<iterator,bool> insert_unique(const value_type& val)
{
+ std::pair<iterator,bool> ret;
insert_commit_data data;
- std::pair<iterator,bool> ret = this->priv_insert_unique_prepare(val, data);
- if(ret.second){
- ret.first = this->priv_insert_commit(data, val);
- }
+ ret.second = this->priv_insert_unique_prepare(val, data);
+ ret.first = ret.second ? this->priv_insert_commit(data, val)
+ : iterator(vector_iterator_get_ptr(data.position));
return ret;
}
std::pair<iterator,bool> insert_unique(BOOST_RV_REF(value_type) val)
{
+ std::pair<iterator,bool> ret;
insert_commit_data data;
- std::pair<iterator,bool> ret = this->priv_insert_unique_prepare(val, data);
- if(ret.second){
- ret.first = this->priv_insert_commit(data, boost::move(val));
- }
+ ret.second = this->priv_insert_unique_prepare(val, data);
+ ret.first = ret.second ? this->priv_insert_commit(data, boost::move(val))
+ : iterator(vector_iterator_get_ptr(data.position));
return ret;
}
@@ -350,22 +368,20 @@ class flat_tree
iterator insert_unique(const_iterator pos, const value_type& val)
{
+ std::pair<iterator,bool> ret;
insert_commit_data data;
- std::pair<iterator,bool> ret = this->priv_insert_unique_prepare(pos, val, data);
- if(ret.second){
- ret.first = this->priv_insert_commit(data, val);
- }
- return ret.first;
+ return this->priv_insert_unique_prepare(pos, val, data)
+ ? this->priv_insert_commit(data, val)
+ : iterator(vector_iterator_get_ptr(data.position));
}
- iterator insert_unique(const_iterator pos, BOOST_RV_REF(value_type) mval)
+ iterator insert_unique(const_iterator pos, BOOST_RV_REF(value_type) val)
{
+ std::pair<iterator,bool> ret;
insert_commit_data data;
- std::pair<iterator,bool> ret = this->priv_insert_unique_prepare(pos, mval, data);
- if(ret.second){
- ret.first = this->priv_insert_commit(data, boost::move(mval));
- }
- return ret.first;
+ return this->priv_insert_unique_prepare(pos, val, data)
+ ? this->priv_insert_commit(data, boost::move(val))
+ : iterator(vector_iterator_get_ptr(data.position));
}
iterator insert_equal(const_iterator pos, const value_type& val)
@@ -384,7 +400,11 @@ class flat_tree
template <class InIt>
void insert_unique(InIt first, InIt last)
- { this->priv_insert_unique_loop(first, last); }
+ {
+ for ( ; first != last; ++first){
+ this->insert_unique(*first);
+ }
+ }
template <class InIt>
void insert_equal(InIt first, InIt last
@@ -456,21 +476,36 @@ class flat_tree
const const_iterator b(this->cbegin());
const_iterator pos(b);
//Loop in burst sizes
- while(len){
- const size_type burst = len < BurstSize ? len : BurstSize;
+ bool back_insert = false;
+ while(len && !back_insert){
+ size_type burst = len < BurstSize ? len : BurstSize;
const const_iterator ce(this->cend());
- len -= burst;
for(size_type i = 0; i != burst; ++i){
- //Get the insertion position for each key
- pos = const_cast<const flat_tree&>(*this).priv_upper_bound(pos, ce, KeyOfValue()(*first));
- positions[i] = static_cast<size_type>(pos - b);
- ++first;
+ //Get the insertion position for each key, use std::iterator_traits<BidirIt>::value_type
+ //because it can be different from container::value_type
+ //(e.g. conversion between std::pair<A, B> -> boost::container::pair<A, B>
+ const typename std::iterator_traits<BidirIt>::value_type & val = *first;
+ pos = const_cast<const flat_tree&>(*this).priv_upper_bound(pos, ce, KeyOfValue()(val));
+ if(pos == this->cend()){ //this element and the remaining should be back inserted
+ burst = i;
+ back_insert = true;
+ break;
+ }
+ else{
+ positions[i] = static_cast<size_type>(pos - b);
+ ++first;
+ --len;
+ }
}
//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
+ //Next search position updated, iterator still valid because we've preserved the vector
pos += burst;
}
+ if(first != last){
+ //The remaining range should be back inserted
+ this->m_data.m_vect.insert(this->m_data.m_vect.cend(), len, first, last);
+ }
}
template <class InIt>
@@ -482,7 +517,13 @@ class flat_tree
>::type * = 0
#endif
)
- { this->priv_insert_unique_loop_hint(first, last); }
+ {
+ const_iterator pos(this->cend());
+ for ( ; first != last; ++first){
+ pos = this->insert_unique(pos, *first);
+ ++pos;
+ }
+ }
template <class BidirIt>
void insert_unique(ordered_unique_range_t, BidirIt first, BidirIt last
@@ -503,37 +544,50 @@ class flat_tree
this->reserve(this->size()+len);
const const_iterator b(this->cbegin());
const_iterator pos(b);
- const value_compare &value_comp = this->m_data;
+ const value_compare &val_cmp = this->m_data;
skips[0u] = 0u;
//Loop in burst sizes
- while(len){
+ bool back_insert = false;
+ while(len && !back_insert){
const size_type burst = len < BurstSize ? len : BurstSize;
size_type unique_burst = 0u;
const const_iterator ce(this->cend());
while(unique_burst < burst && len > 0){
- //Get the insertion position for each key
- const value_type & val = *first++;
- --len;
+ //Get the insertion position for each key, use std::iterator_traits<BidirIt>::value_type
+ //because it can be different from container::value_type
+ //(e.g. conversion between std::pair<A, B> -> boost::container::pair<A, B>
+ const typename std::iterator_traits<BidirIt>::value_type & val = *first;
pos = const_cast<const flat_tree&>(*this).priv_lower_bound(pos, ce, KeyOfValue()(val));
//Check if already present
- if(pos != ce && !value_comp(val, *pos)){
- if(unique_burst > 0){
- ++skips[unique_burst-1];
+ if (pos != ce){
+ ++first;
+ --len;
+ if(!val_cmp(val, *pos)){
+ if(unique_burst > 0){
+ ++skips[unique_burst-1];
+ }
+ continue;
}
- continue;
+ //If not present, calculate position
+ positions[unique_burst] = static_cast<size_type>(pos - b);
+ skips[unique_burst++] = 0u;
+ }
+ else{ //this element and the remaining should be back inserted
+ back_insert = true;
+ break;
}
-
- //If not present, calculate position
- positions[unique_burst] = static_cast<size_type>(pos - b);
- 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
+ //Next search position updated, iterator still valid because we've preserved the vector
pos += unique_burst;
}
}
+ if(first != last){
+ //The remaining range should be back inserted
+ this->m_data.m_vect.insert(this->m_data.m_vect.cend(), len, first, last);
+ }
}
#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
@@ -546,13 +600,7 @@ class flat_tree
stored_allocator_type &a = this->get_stored_allocator();
stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
value_destructor<stored_allocator_type> d(a, val);
- insert_commit_data data;
- std::pair<iterator,bool> ret =
- this->priv_insert_unique_prepare(val, data);
- if(ret.second){
- ret.first = this->priv_insert_commit(data, boost::move(val));
- }
- return ret;
+ return this->insert_unique(::boost::move(val));
}
template <class... Args>
@@ -563,12 +611,7 @@ class flat_tree
stored_allocator_type &a = this->get_stored_allocator();
stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
value_destructor<stored_allocator_type> d(a, val);
- insert_commit_data data;
- std::pair<iterator,bool> ret = this->priv_insert_unique_prepare(hint, val, data);
- if(ret.second){
- ret.first = this->priv_insert_commit(data, boost::move(val));
- }
- return ret.first;
+ return this->insert_unique(hint, ::boost::move(val));
}
template <class... Args>
@@ -579,9 +622,7 @@ class flat_tree
stored_allocator_type &a = this->get_stored_allocator();
stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
value_destructor<stored_allocator_type> d(a, val);
- iterator i = this->upper_bound(KeyOfValue()(val));
- i = this->m_data.m_vect.insert(i, boost::move(val));
- return i;
+ return this->insert_equal(::boost::move(val));
}
template <class... Args>
@@ -592,10 +633,7 @@ class flat_tree
stored_allocator_type &a = this->get_stored_allocator();
stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
value_destructor<stored_allocator_type> d(a, val);
- insert_commit_data data;
- this->priv_insert_equal_prepare(hint, val, data);
- iterator i = this->priv_insert_commit(data, boost::move(val));
- return i;
+ return this->insert_equal(hint, ::boost::move(val));
}
#else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
@@ -611,12 +649,7 @@ class flat_tree
stored_allocator_traits::construct(a, &val \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \
value_destructor<stored_allocator_type> d(a, val); \
- insert_commit_data data; \
- std::pair<iterator,bool> ret = this->priv_insert_unique_prepare(val, data); \
- if(ret.second){ \
- ret.first = this->priv_insert_commit(data, boost::move(val)); \
- } \
- return ret; \
+ return this->insert_unique(::boost::move(val)); \
} \
\
BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
@@ -628,13 +661,8 @@ class flat_tree
stored_allocator_type &a = this->get_stored_allocator(); \
stored_allocator_traits::construct(a, &val \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \
- value_destructor<stored_allocator_type> d(a, val); \
- insert_commit_data data; \
- std::pair<iterator,bool> ret = this->priv_insert_unique_prepare(hint, val, data); \
- if(ret.second){ \
- ret.first = this->priv_insert_commit(data, boost::move(val)); \
- } \
- return ret.first; \
+ value_destructor<stored_allocator_type> d(a, val); \
+ return this->insert_unique(hint, ::boost::move(val)); \
} \
\
BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
@@ -646,9 +674,7 @@ class flat_tree
stored_allocator_traits::construct(a, &val \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \
value_destructor<stored_allocator_type> d(a, val); \
- iterator i = this->upper_bound(KeyOfValue()(val)); \
- i = this->m_data.m_vect.insert(i, boost::move(val)); \
- return i; \
+ return this->insert_equal(::boost::move(val)); \
} \
\
BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
@@ -661,12 +687,8 @@ class flat_tree
stored_allocator_traits::construct(a, &val \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \
value_destructor<stored_allocator_type> d(a, val); \
- insert_commit_data data; \
- this->priv_insert_equal_prepare(hint, val, data); \
- iterator i = this->priv_insert_commit(data, boost::move(val)); \
- return i; \
+ return this->insert_equal(hint, ::boost::move(val)); \
} \
-
//!
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
#include BOOST_PP_LOCAL_ITERATE()
@@ -704,26 +726,26 @@ class flat_tree
// set operations:
iterator find(const key_type& k)
{
- const Compare &key_cmp = this->m_data.get_comp();
iterator i = this->lower_bound(k);
-
- if (i != this->end() && key_cmp(k, KeyOfValue()(*i))){
- i = this->end();
+ iterator end_it = this->end();
+ if (i != end_it && this->m_data.get_comp()(k, KeyOfValue()(*i))){
+ i = end_it;
}
return i;
}
const_iterator find(const key_type& k) const
{
- const Compare &key_cmp = this->m_data.get_comp();
const_iterator i = this->lower_bound(k);
- if (i != this->end() && key_cmp(k, KeyOfValue()(*i))){
- i = this->end();
+ const_iterator end_it = this->cend();
+ if (i != end_it && this->m_data.get_comp()(k, KeyOfValue()(*i))){
+ i = end_it;
}
return i;
}
+ // set operations:
size_type count(const key_type& k) const
{
std::pair<const_iterator, const_iterator> p = this->equal_range(k);
@@ -735,26 +757,58 @@ class flat_tree
{ return this->priv_lower_bound(this->begin(), this->end(), k); }
const_iterator lower_bound(const key_type& k) const
- { return this->priv_lower_bound(this->begin(), this->end(), k); }
+ { return this->priv_lower_bound(this->cbegin(), this->cend(), k); }
iterator upper_bound(const key_type& k)
{ return this->priv_upper_bound(this->begin(), this->end(), k); }
const_iterator upper_bound(const key_type& k) const
- { return this->priv_upper_bound(this->begin(), this->end(), k); }
+ { return this->priv_upper_bound(this->cbegin(), this->cend(), k); }
std::pair<iterator,iterator> equal_range(const key_type& k)
{ return this->priv_equal_range(this->begin(), this->end(), k); }
std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const
- { return this->priv_equal_range(this->begin(), this->end(), k); }
+ { return this->priv_equal_range(this->cbegin(), this->cend(), k); }
+
+ std::pair<iterator, iterator> lower_bound_range(const key_type& k)
+ { return this->priv_lower_bound_range(this->begin(), this->end(), k); }
+
+ std::pair<const_iterator, const_iterator> lower_bound_range(const key_type& k) const
+ { return this->priv_lower_bound_range(this->cbegin(), this->cend(), k); }
- size_type capacity() const
+ size_type capacity() const
{ return this->m_data.m_vect.capacity(); }
- void reserve(size_type cnt)
+ void reserve(size_type cnt)
{ this->m_data.m_vect.reserve(cnt); }
+ friend bool operator==(const flat_tree& x, const flat_tree& y)
+ {
+ return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin());
+ }
+
+ friend bool operator<(const flat_tree& x, const flat_tree& y)
+ {
+ return std::lexicographical_compare(x.begin(), x.end(),
+ y.begin(), y.end());
+ }
+
+ friend bool operator!=(const flat_tree& x, const flat_tree& y)
+ { return !(x == y); }
+
+ friend bool operator>(const flat_tree& x, const flat_tree& y)
+ { return y < x; }
+
+ friend bool operator<=(const flat_tree& x, const flat_tree& y)
+ { return !(y < x); }
+
+ friend bool operator>=(const flat_tree& x, const flat_tree& y)
+ { return !(x < y); }
+
+ friend void swap(flat_tree& x, flat_tree& y)
+ { x.swap(y); }
+
private:
struct insert_commit_data
{
@@ -774,10 +828,10 @@ class flat_tree
// insert val before upper_bound(val)
// else
// insert val before lower_bound(val)
- const value_compare &value_comp = this->m_data;
+ const value_compare &val_cmp = this->m_data;
- if(pos == this->cend() || !value_comp(*pos, val)){
- if (pos == this->cbegin() || !value_comp(val, pos[-1])){
+ if(pos == this->cend() || !val_cmp(*pos, val)){
+ if (pos == this->cbegin() || !val_cmp(val, pos[-1])){
data.position = pos;
}
else{
@@ -791,21 +845,19 @@ class flat_tree
}
}
- std::pair<iterator,bool> priv_insert_unique_prepare
+ bool priv_insert_unique_prepare
(const_iterator b, const_iterator e, const value_type& val, insert_commit_data &commit_data)
{
- const value_compare &value_comp = this->m_data;
+ const value_compare &val_cmp = this->m_data;
commit_data.position = this->priv_lower_bound(b, e, KeyOfValue()(val));
- return std::pair<iterator,bool>
- ( iterator(vector_iterator_get_ptr(commit_data.position))
- , commit_data.position == e || value_comp(val, *commit_data.position));
+ return commit_data.position == e || val_cmp(val, *commit_data.position);
}
- std::pair<iterator,bool> priv_insert_unique_prepare
+ bool priv_insert_unique_prepare
(const value_type& val, insert_commit_data &commit_data)
- { return this->priv_insert_unique_prepare(this->begin(), this->end(), val, commit_data); }
+ { return this->priv_insert_unique_prepare(this->cbegin(), this->cend(), val, commit_data); }
- std::pair<iterator,bool> priv_insert_unique_prepare
+ bool priv_insert_unique_prepare
(const_iterator pos, const value_type& val, insert_commit_data &commit_data)
{
//N1780. Props to Howard Hinnant!
@@ -819,37 +871,32 @@ class flat_tree
// insert val after pos
//else
// insert val before lower_bound(val)
- const value_compare &value_comp = this->m_data;
-
- if(pos == this->cend() || value_comp(val, *pos)){
- if(pos != this->cbegin() && !value_comp(val, pos[-1])){
- if(value_comp(pos[-1], val)){
- commit_data.position = pos;
- return std::pair<iterator,bool>(iterator(vector_iterator_get_ptr(pos)), true);
- }
- else{
- return std::pair<iterator,bool>(iterator(vector_iterator_get_ptr(pos)), false);
- }
+ const value_compare &val_cmp = this->m_data;
+ const const_iterator cend_it = this->cend();
+ if(pos == cend_it || val_cmp(val, *pos)){ //Check if val should go before end
+ const const_iterator cbeg = this->cbegin();
+ commit_data.position = pos;
+ if(pos == cbeg){ //If container is empty then insert it in the beginning
+ return true;
+ }
+ const_iterator prev(pos);
+ --prev;
+ if(val_cmp(*prev, val)){ //If previous element was less, then it should go between prev and pos
+ return true;
+ }
+ else if(!val_cmp(val, *prev)){ //If previous was equal then insertion should fail
+ commit_data.position = prev;
+ return false;
+ }
+ else{ //Previous was bigger so insertion hint was pointless, dispatch to hintless insertion
+ //but reduce the search between beg and prev as prev is bigger than val
+ return this->priv_insert_unique_prepare(cbeg, prev, val, commit_data);
}
- return this->priv_insert_unique_prepare(this->cbegin(), pos, val, commit_data);
}
-
- // Works, but increases code complexity
- //Next check
- //else if (value_comp(*pos, val) && !value_comp(pos[1], val)){
- // if(value_comp(val, pos[1])){
- // commit_data.position = pos+1;
- // return std::pair<iterator,bool>(pos+1, true);
- // }
- // else{
- // return std::pair<iterator,bool>(pos+1, false);
- // }
- //}
else{
- //[... pos ... val ... ]
//The hint is before the insertion position, so insert it
- //in the remaining range
- return this->priv_insert_unique_prepare(pos, this->end(), val, commit_data);
+ //in the remaining range [pos, end)
+ return this->priv_insert_unique_prepare(pos, cend_it, val, commit_data);
}
}
@@ -863,50 +910,50 @@ class flat_tree
}
template <class RanIt>
- RanIt priv_lower_bound(RanIt first, RanIt last,
+ RanIt priv_lower_bound(RanIt first, const RanIt last,
const key_type & key) const
{
const Compare &key_cmp = this->m_data.get_comp();
KeyOfValue key_extract;
- difference_type len = last - first, half;
+ size_type len = static_cast<size_type>(last - first);
RanIt middle;
- while (len > 0) {
- half = len >> 1;
+ while (len) {
+ size_type step = len >> 1;
middle = first;
- middle += half;
+ middle += step;
if (key_cmp(key_extract(*middle), key)) {
- ++middle;
- first = middle;
- len = len - half - 1;
+ first = ++middle;
+ len -= step + 1;
+ }
+ else{
+ len = step;
}
- else
- len = half;
}
return first;
}
template <class RanIt>
- RanIt priv_upper_bound(RanIt first, RanIt last,
+ RanIt priv_upper_bound(RanIt first, const RanIt last,
const key_type & key) const
{
const Compare &key_cmp = this->m_data.get_comp();
KeyOfValue key_extract;
- difference_type len = last - first, half;
+ size_type len = static_cast<size_type>(last - first);
RanIt middle;
- while (len > 0) {
- half = len >> 1;
+ while (len) {
+ size_type step = len >> 1;
middle = first;
- middle += half;
+ middle += step;
if (key_cmp(key, key_extract(*middle))) {
- len = half;
+ len = step;
}
else{
first = ++middle;
- len = len - half - 1;
+ len -= step + 1;
}
}
return first;
@@ -918,123 +965,66 @@ class flat_tree
{
const Compare &key_cmp = this->m_data.get_comp();
KeyOfValue key_extract;
- difference_type len = last - first, half;
- RanIt middle, left, right;
+ size_type len = static_cast<size_type>(last - first);
+ RanIt middle;
- while (len > 0) {
- half = len >> 1;
+ while (len) {
+ size_type step = len >> 1;
middle = first;
- middle += half;
+ middle += step;
if (key_cmp(key_extract(*middle), key)){
- first = middle;
- ++first;
- len = len - half - 1;
+ first = ++middle;
+ len -= step + 1;
}
else if (key_cmp(key, key_extract(*middle))){
- len = half;
+ len = step;
}
else {
- left = this->priv_lower_bound(first, middle, key);
- first += len;
- right = this->priv_upper_bound(++middle, first, key);
- return std::pair<RanIt, RanIt>(left, right);
+ //Middle is equal to key
+ last = first;
+ last += len;
+ return std::pair<RanIt, RanIt>
+ ( this->priv_lower_bound(first, middle, key)
+ , this->priv_upper_bound(++middle, last, key));
}
}
return std::pair<RanIt, RanIt>(first, first);
}
- template<class InIt>
- void priv_insert_equal_loop(InIt first, InIt last)
+ template<class RanIt>
+ std::pair<RanIt, RanIt> priv_lower_bound_range(RanIt first, RanIt last, const key_type& k) const
{
- for ( ; first != last; ++first){
- this->insert_equal(*first);
- }
- }
-
- template<class InIt>
- 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);
+ const Compare &key_cmp = this->m_data.get_comp();
+ KeyOfValue key_extract;
+ RanIt lb(this->priv_lower_bound(first, last, k)), ub(lb);
+ if(lb != last && static_cast<difference_type>(!key_cmp(k, key_extract(*lb)))){
+ ++ub;
}
+ return std::pair<RanIt, RanIt>(lb, ub);
}
template<class InIt>
- void priv_insert_unique_loop(InIt first, InIt last)
+ void priv_insert_equal_loop(InIt first, InIt last)
{
for ( ; first != last; ++first){
- this->insert_unique(*first);
+ this->insert_equal(*first);
}
}
template<class InIt>
- void priv_insert_unique_loop_ordered(InIt first, InIt last)
+ void priv_insert_equal_loop_ordered(InIt first, InIt last)
{
const_iterator pos(this->cend());
for ( ; first != last; ++first){
- pos = this->insert_unique(pos, *first);
+ //If ordered, then try hint version
+ //to achieve constant-time complexity per insertion
+ pos = this->insert_equal(pos, *first);
+ ++pos;
}
}
};
-template <class Key, class Value, class KeyOfValue,
- class Compare, class A>
-inline bool
-operator==(const flat_tree<Key,Value,KeyOfValue,Compare,A>& x,
- const flat_tree<Key,Value,KeyOfValue,Compare,A>& y)
-{
- return x.size() == y.size() &&
- std::equal(x.begin(), x.end(), y.begin());
-}
-
-template <class Key, class Value, class KeyOfValue,
- class Compare, class A>
-inline bool
-operator<(const flat_tree<Key,Value,KeyOfValue,Compare,A>& x,
- const flat_tree<Key,Value,KeyOfValue,Compare,A>& y)
-{
- return std::lexicographical_compare(x.begin(), x.end(),
- y.begin(), y.end());
-}
-
-template <class Key, class Value, class KeyOfValue,
- class Compare, class A>
-inline bool
-operator!=(const flat_tree<Key,Value,KeyOfValue,Compare,A>& x,
- const flat_tree<Key,Value,KeyOfValue,Compare,A>& y)
- { return !(x == y); }
-
-template <class Key, class Value, class KeyOfValue,
- class Compare, class A>
-inline bool
-operator>(const flat_tree<Key,Value,KeyOfValue,Compare,A>& x,
- const flat_tree<Key,Value,KeyOfValue,Compare,A>& y)
- { return y < x; }
-
-template <class Key, class Value, class KeyOfValue,
- class Compare, class A>
-inline bool
-operator<=(const flat_tree<Key,Value,KeyOfValue,Compare,A>& x,
- const flat_tree<Key,Value,KeyOfValue,Compare,A>& y)
- { return !(y < x); }
-
-template <class Key, class Value, class KeyOfValue,
- class Compare, class A>
-inline bool
-operator>=(const flat_tree<Key,Value,KeyOfValue,Compare,A>& x,
- const flat_tree<Key,Value,KeyOfValue,Compare,A>& y)
- { return !(x < y); }
-
-
-template <class Key, class Value, class KeyOfValue,
- class Compare, class A>
-inline void
-swap(flat_tree<Key,Value,KeyOfValue,Compare,A>& x,
- flat_tree<Key,Value,KeyOfValue,Compare,A>& y)
- { x.swap(y); }
-
} //namespace container_detail {
} //namespace container {
diff --git a/3party/boost/boost/container/detail/function_detector.hpp b/3party/boost/boost/container/detail/function_detector.hpp
index 5a5f6fd77d..1fe6731a6c 100644
--- a/3party/boost/boost/container/detail/function_detector.hpp
+++ b/3party/boost/boost/container/detail/function_detector.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2009-2012.
+// (C) Copyright Ion Gaztanaga 2009-2013.
//
// 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/container/detail/hash_table.hpp b/3party/boost/boost/container/detail/hash_table.hpp
new file mode 100644
index 0000000000..da7bb536e4
--- /dev/null
+++ b/3party/boost/boost/container/detail/hash_table.hpp
@@ -0,0 +1,383 @@
+/*
+template <class Value, unsigned int Options = 0, class Hash = hash<Value>, class Pred = equal_to<Value>,
+ class Alloc = allocator<Value> >
+class hash_set
+{
+public:
+ // types
+ typedef Value key_type;
+ typedef key_type value_type;
+ typedef Hash hasher;
+ typedef Pred key_equal;
+ typedef Alloc allocator_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef typename allocator_traits<allocator_type>::pointer pointer;
+ typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
+ typedef typename allocator_traits<allocator_type>::size_type size_type;
+ typedef typename allocator_traits<allocator_type>::difference_type difference_type;
+
+ typedef /unspecified/ iterator;
+ typedef /unspecified/ const_iterator;
+ typedef /unspecified/ local_iterator;
+ typedef /unspecified/ const_local_iterator;
+
+ hash_set()
+ noexcept(
+ is_nothrow_default_constructible<hasher>::value &&
+ is_nothrow_default_constructible<key_equal>::value &&
+ is_nothrow_default_constructible<allocator_type>::value);
+ explicit hash_set(size_type n, const hasher& hf = hasher(),
+ const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
+ template <class InputIterator>
+ hash_set(InputIterator f, InputIterator l,
+ size_type n = 0, const hasher& hf = hasher(),
+ const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
+ explicit hash_set(const allocator_type&);
+ hash_set(const hash_set&);
+ hash_set(const hash_set&, const Allocator&);
+ hash_set(hash_set&&)
+ noexcept(
+ is_nothrow_move_constructible<hasher>::value &&
+ is_nothrow_move_constructible<key_equal>::value &&
+ is_nothrow_move_constructible<allocator_type>::value);
+ hash_set(hash_set&&, const Allocator&);
+ hash_set(initializer_list<value_type>, size_type n = 0,
+ const hasher& hf = hasher(), const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
+ ~hash_set();
+ hash_set& operator=(const hash_set&);
+ hash_set& operator=(hash_set&&)
+ noexcept(
+ allocator_type::propagate_on_container_move_assignment::value &&
+ is_nothrow_move_assignable<allocator_type>::value &&
+ is_nothrow_move_assignable<hasher>::value &&
+ is_nothrow_move_assignable<key_equal>::value);
+ hash_set& operator=(initializer_list<value_type>);
+
+ allocator_type get_allocator() const noexcept;
+
+ bool empty() const noexcept;
+ size_type size() const noexcept;
+ size_type max_size() const noexcept;
+
+ iterator begin() noexcept;
+ iterator end() noexcept;
+ const_iterator begin() const noexcept;
+ const_iterator end() const noexcept;
+ const_iterator cbegin() const noexcept;
+ const_iterator cend() const noexcept;
+
+ template <class... Args>
+ pair<iterator, bool> emplace(Args&&... args);
+ template <class... Args>
+ iterator emplace_hint(const_iterator position, Args&&... args);
+ pair<iterator, bool> insert(const value_type& obj);
+ pair<iterator, bool> insert(value_type&& obj);
+ iterator insert(const_iterator hint, const value_type& obj);
+ iterator insert(const_iterator hint, value_type&& obj);
+ template <class InputIterator>
+ void insert(InputIterator first, InputIterator last);
+ void insert(initializer_list<value_type>);
+
+ iterator erase(const_iterator position);
+ size_type erase(const key_type& k);
+ iterator erase(const_iterator first, const_iterator last);
+ void clear() noexcept;
+
+ void swap(hash_set&)
+ noexcept(
+ (!allocator_type::propagate_on_container_swap::value ||
+ __is_nothrow_swappable<allocator_type>::value) &&
+ __is_nothrow_swappable<hasher>::value &&
+ __is_nothrow_swappable<key_equal>::value);
+
+ hasher hash_function() const;
+ key_equal key_eq() const;
+
+ iterator find(const key_type& k);
+ const_iterator find(const key_type& k) const;
+ size_type count(const key_type& k) const;
+ pair<iterator, iterator> equal_range(const key_type& k);
+ pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
+
+ size_type bucket_count() const noexcept;
+ size_type max_bucket_count() const noexcept;
+
+ size_type bucket_size(size_type n) const;
+ size_type bucket(const key_type& k) const;
+
+ local_iterator begin(size_type n);
+ local_iterator end(size_type n);
+ const_local_iterator begin(size_type n) const;
+ const_local_iterator end(size_type n) const;
+ const_local_iterator cbegin(size_type n) const;
+ const_local_iterator cend(size_type n) const;
+
+ float load_factor() const noexcept;
+ float max_load_factor() const noexcept;
+ void max_load_factor(float z);
+ void rehash(size_type n);
+ void reserve(size_type n);
+};
+
+template <class Key, class T, unsigned int Options = 0, class Hash = hash<Key>, class Pred = equal_to<Key>,
+ class Alloc = allocator<pair<const Key, T> > >
+class hash_map
+{
+public:
+ // types
+ typedef Key key_type;
+ typedef T mapped_type;
+ typedef Hash hasher;
+ typedef Pred key_equal;
+ typedef Alloc allocator_type;
+ typedef pair<const key_type, mapped_type> value_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef typename allocator_traits<allocator_type>::pointer pointer;
+ typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
+ typedef typename allocator_traits<allocator_type>::size_type size_type;
+ typedef typename allocator_traits<allocator_type>::difference_type difference_type;
+
+ typedef /unspecified/ iterator;
+ typedef /unspecified/ const_iterator;
+ typedef /unspecified/ local_iterator;
+ typedef /unspecified/ const_local_iterator;
+
+ hash_map()
+ noexcept(
+ is_nothrow_default_constructible<hasher>::value &&
+ is_nothrow_default_constructible<key_equal>::value &&
+ is_nothrow_default_constructible<allocator_type>::value);
+ explicit hash_map(size_type n, const hasher& hf = hasher(),
+ const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
+ template <class InputIterator>
+ hash_map(InputIterator f, InputIterator l,
+ size_type n = 0, const hasher& hf = hasher(),
+ const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
+ explicit hash_map(const allocator_type&);
+ hash_map(const hash_map&);
+ hash_map(const hash_map&, const Allocator&);
+ hash_map(hash_map&&)
+ noexcept(
+ is_nothrow_move_constructible<hasher>::value &&
+ is_nothrow_move_constructible<key_equal>::value &&
+ is_nothrow_move_constructible<allocator_type>::value);
+ hash_map(hash_map&&, const Allocator&);
+ hash_map(initializer_list<value_type>, size_type n = 0,
+ const hasher& hf = hasher(), const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
+ ~hash_map();
+ hash_map& operator=(const hash_map&);
+ hash_map& operator=(hash_map&&)
+ noexcept(
+ allocator_type::propagate_on_container_move_assignment::value &&
+ is_nothrow_move_assignable<allocator_type>::value &&
+ is_nothrow_move_assignable<hasher>::value &&
+ is_nothrow_move_assignable<key_equal>::value);
+ hash_map& operator=(initializer_list<value_type>);
+
+ allocator_type get_allocator() const noexcept;
+
+ bool empty() const noexcept;
+ size_type size() const noexcept;
+ size_type max_size() const noexcept;
+
+ iterator begin() noexcept;
+ iterator end() noexcept;
+ const_iterator begin() const noexcept;
+ const_iterator end() const noexcept;
+ const_iterator cbegin() const noexcept;
+ const_iterator cend() const noexcept;
+
+ template <class... Args>
+ pair<iterator, bool> emplace(Args&&... args);
+ template <class... Args>
+ iterator emplace_hint(const_iterator position, Args&&... args);
+ pair<iterator, bool> insert(const value_type& obj);
+ template <class P>
+ pair<iterator, bool> insert(P&& obj);
+ iterator insert(const_iterator hint, const value_type& obj);
+ template <class P>
+ iterator insert(const_iterator hint, P&& obj);
+ template <class InputIterator>
+ void insert(InputIterator first, InputIterator last);
+ void insert(initializer_list<value_type>);
+
+ iterator erase(const_iterator position);
+ size_type erase(const key_type& k);
+ iterator erase(const_iterator first, const_iterator last);
+ void clear() noexcept;
+
+ void swap(hash_map&)
+ noexcept(
+ (!allocator_type::propagate_on_container_swap::value ||
+ __is_nothrow_swappable<allocator_type>::value) &&
+ __is_nothrow_swappable<hasher>::value &&
+ __is_nothrow_swappable<key_equal>::value);
+
+ hasher hash_function() const;
+ key_equal key_eq() const;
+
+ iterator find(const key_type& k);
+ const_iterator find(const key_type& k) const;
+ size_type count(const key_type& k) const;
+ pair<iterator, iterator> equal_range(const key_type& k);
+ pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
+
+ mapped_type& operator[](const key_type& k);
+ mapped_type& operator[](key_type&& k);
+
+ mapped_type& at(const key_type& k);
+ const mapped_type& at(const key_type& k) const;
+
+ size_type bucket_count() const noexcept;
+ size_type max_bucket_count() const noexcept;
+
+ size_type bucket_size(size_type n) const;
+ size_type bucket(const key_type& k) const;
+
+ local_iterator begin(size_type n);
+ local_iterator end(size_type n);
+ const_local_iterator begin(size_type n) const;
+ const_local_iterator end(size_type n) const;
+ const_local_iterator cbegin(size_type n) const;
+ const_local_iterator cend(size_type n) const;
+
+ float load_factor() const noexcept;
+ float max_load_factor() const noexcept;
+ void max_load_factor(float z);
+ void rehash(size_type n);
+ void reserve(size_type n);
+};
+
+*/
+
+template <class Key, class Value, class KeyOfValue, unsigned int Options = 0, class Hash = hash<Key>, class Pred = equal_to<Key>,
+ class Alloc = allocator<Value> >
+class hash_table
+{
+public:
+ // types
+ typedef Value key_type;
+ typedef key_type value_type;
+ typedef Hash hasher;
+ typedef Pred key_equal;
+ typedef Alloc allocator_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef typename allocator_traits<allocator_type>::pointer pointer;
+ typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
+ typedef typename allocator_traits<allocator_type>::size_type size_type;
+ typedef typename allocator_traits<allocator_type>::difference_type difference_type;
+
+ typedef /unspecified/ iterator;
+ typedef /unspecified/ const_iterator;
+ typedef /unspecified/ local_iterator;
+ typedef /unspecified/ const_local_iterator;
+
+ hash_set()
+ noexcept(
+ is_nothrow_default_constructible<hasher>::value &&
+ is_nothrow_default_constructible<key_equal>::value &&
+ is_nothrow_default_constructible<allocator_type>::value);
+ explicit hash_set(size_type n, const hasher& hf = hasher(),
+ const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
+ template <class InputIterator>
+ hash_set(InputIterator f, InputIterator l,
+ size_type n = 0, const hasher& hf = hasher(),
+ const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
+ explicit hash_set(const allocator_type&);
+ hash_set(const hash_set&);
+ hash_set(const hash_set&, const Allocator&);
+ hash_set(hash_set&&)
+ noexcept(
+ is_nothrow_move_constructible<hasher>::value &&
+ is_nothrow_move_constructible<key_equal>::value &&
+ is_nothrow_move_constructible<allocator_type>::value);
+ hash_set(hash_set&&, const Allocator&);
+ hash_set(initializer_list<value_type>, size_type n = 0,
+ const hasher& hf = hasher(), const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
+ ~hash_set();
+ hash_set& operator=(const hash_set&);
+ hash_set& operator=(hash_set&&)
+ noexcept(
+ allocator_type::propagate_on_container_move_assignment::value &&
+ is_nothrow_move_assignable<allocator_type>::value &&
+ is_nothrow_move_assignable<hasher>::value &&
+ is_nothrow_move_assignable<key_equal>::value);
+ hash_set& operator=(initializer_list<value_type>);
+
+ allocator_type get_allocator() const noexcept;
+
+ bool empty() const noexcept;
+ size_type size() const noexcept;
+ size_type max_size() const noexcept;
+
+ iterator begin() noexcept;
+ iterator end() noexcept;
+ const_iterator begin() const noexcept;
+ const_iterator end() const noexcept;
+ const_iterator cbegin() const noexcept;
+ const_iterator cend() const noexcept;
+
+ template <class... Args>
+ pair<iterator, bool> emplace(Args&&... args);
+ template <class... Args>
+ iterator emplace_hint(const_iterator position, Args&&... args);
+ pair<iterator, bool> insert(const value_type& obj);
+ pair<iterator, bool> insert(value_type&& obj);
+ iterator insert(const_iterator hint, const value_type& obj);
+ iterator insert(const_iterator hint, value_type&& obj);
+ template <class InputIterator>
+ void insert(InputIterator first, InputIterator last);
+ void insert(initializer_list<value_type>);
+
+ iterator erase(const_iterator position);
+ size_type erase(const key_type& k);
+ iterator erase(const_iterator first, const_iterator last);
+ void clear() noexcept;
+
+ void swap(hash_set&)
+ noexcept(
+ (!allocator_type::propagate_on_container_swap::value ||
+ __is_nothrow_swappable<allocator_type>::value) &&
+ __is_nothrow_swappable<hasher>::value &&
+ __is_nothrow_swappable<key_equal>::value);
+
+ hasher hash_function() const;
+ key_equal key_eq() const;
+
+ iterator find(const key_type& k);
+ const_iterator find(const key_type& k) const;
+ size_type count(const key_type& k) const;
+ pair<iterator, iterator> equal_range(const key_type& k);
+ pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
+
+ size_type bucket_count() const noexcept;
+ size_type max_bucket_count() const noexcept;
+
+ size_type bucket_size(size_type n) const;
+ size_type bucket(const key_type& k) const;
+
+ local_iterator begin(size_type n);
+ local_iterator end(size_type n);
+ const_local_iterator begin(size_type n) const;
+ const_local_iterator end(size_type n) const;
+ const_local_iterator cbegin(size_type n) const;
+ const_local_iterator cend(size_type n) const;
+
+ float load_factor() const noexcept;
+ float max_load_factor() const noexcept;
+ void max_load_factor(float z);
+ void rehash(size_type n);
+ void reserve(size_type n);
+};
diff --git a/3party/boost/boost/container/detail/iterators.hpp b/3party/boost/boost/container/detail/iterators.hpp
index bba7205885..ffc7236422 100644
--- a/3party/boost/boost/container/detail/iterators.hpp
+++ b/3party/boost/boost/container/detail/iterators.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012.
+// (C) Copyright Ion Gaztanaga 2005-2013.
// (C) Copyright Gennaro Prota 2003 - 2004.
//
// Distributed under the Boost Software License, Version 1.0.
@@ -14,15 +14,16 @@
#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP
#define BOOST_CONTAINER_DETAIL_ITERATORS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/move/utility.hpp>
#include <boost/container/allocator_traits.hpp>
#include <boost/container/detail/type_traits.hpp>
+#include <boost/static_assert.hpp>
#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
#include <boost/container/detail/variadic_templates_tools.hpp>
@@ -52,7 +53,7 @@ class constant_iterator
constant_iterator& operator++()
{ increment(); return *this; }
-
+
constant_iterator operator++(int)
{
constant_iterator result (*this);
@@ -62,7 +63,7 @@ class constant_iterator
constant_iterator& operator--()
{ decrement(); return *this; }
-
+
constant_iterator operator--(int)
{
constant_iterator result (*this);
@@ -147,79 +148,79 @@ class constant_iterator
};
template <class T, class Difference = std::ptrdiff_t>
-class default_construct_iterator
+class value_init_construct_iterator
: public std::iterator
<std::random_access_iterator_tag, T, Difference, const T*, const T &>
{
- typedef default_construct_iterator<T, Difference> this_type;
+ typedef value_init_construct_iterator<T, Difference> this_type;
public:
- explicit default_construct_iterator(Difference range_size)
+ explicit value_init_construct_iterator(Difference range_size)
: m_num(range_size){}
//Constructors
- default_construct_iterator()
+ value_init_construct_iterator()
: m_num(0){}
- default_construct_iterator& operator++()
+ value_init_construct_iterator& operator++()
{ increment(); return *this; }
-
- default_construct_iterator operator++(int)
+
+ value_init_construct_iterator operator++(int)
{
- default_construct_iterator result (*this);
+ value_init_construct_iterator result (*this);
increment();
return result;
}
- default_construct_iterator& operator--()
+ value_init_construct_iterator& operator--()
{ decrement(); return *this; }
-
- default_construct_iterator operator--(int)
+
+ value_init_construct_iterator operator--(int)
{
- default_construct_iterator result (*this);
+ value_init_construct_iterator result (*this);
decrement();
return result;
}
- friend bool operator== (const default_construct_iterator& i, const default_construct_iterator& i2)
+ friend bool operator== (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return i.equal(i2); }
- friend bool operator!= (const default_construct_iterator& i, const default_construct_iterator& i2)
+ friend bool operator!= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return !(i == i2); }
- friend bool operator< (const default_construct_iterator& i, const default_construct_iterator& i2)
+ friend bool operator< (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return i.less(i2); }
- friend bool operator> (const default_construct_iterator& i, const default_construct_iterator& i2)
+ friend bool operator> (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return i2 < i; }
- friend bool operator<= (const default_construct_iterator& i, const default_construct_iterator& i2)
+ friend bool operator<= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return !(i > i2); }
- friend bool operator>= (const default_construct_iterator& i, const default_construct_iterator& i2)
+ friend bool operator>= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return !(i < i2); }
- friend Difference operator- (const default_construct_iterator& i, const default_construct_iterator& i2)
+ friend Difference operator- (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return i2.distance_to(i); }
//Arithmetic
- default_construct_iterator& operator+=(Difference off)
+ value_init_construct_iterator& operator+=(Difference off)
{ this->advance(off); return *this; }
- default_construct_iterator operator+(Difference off) const
+ value_init_construct_iterator operator+(Difference off) const
{
- default_construct_iterator other(*this);
+ value_init_construct_iterator other(*this);
other.advance(off);
return other;
}
- friend default_construct_iterator operator+(Difference off, const default_construct_iterator& right)
+ friend value_init_construct_iterator operator+(Difference off, const value_init_construct_iterator& right)
{ return right + off; }
- default_construct_iterator& operator-=(Difference off)
+ value_init_construct_iterator& operator-=(Difference off)
{ this->advance(-off); return *this; }
- default_construct_iterator operator-(Difference off) const
+ value_init_construct_iterator operator-(Difference off) const
{ return *this + (-off); }
//This pseudo-iterator's dereference operations have no sense since value is not
@@ -258,6 +259,118 @@ class default_construct_iterator
};
template <class T, class Difference = std::ptrdiff_t>
+class default_init_construct_iterator
+ : public std::iterator
+ <std::random_access_iterator_tag, T, Difference, const T*, const T &>
+{
+ typedef default_init_construct_iterator<T, Difference> this_type;
+
+ public:
+ explicit default_init_construct_iterator(Difference range_size)
+ : m_num(range_size){}
+
+ //Constructors
+ default_init_construct_iterator()
+ : m_num(0){}
+
+ default_init_construct_iterator& operator++()
+ { increment(); return *this; }
+
+ default_init_construct_iterator operator++(int)
+ {
+ default_init_construct_iterator result (*this);
+ increment();
+ return result;
+ }
+
+ default_init_construct_iterator& operator--()
+ { decrement(); return *this; }
+
+ default_init_construct_iterator operator--(int)
+ {
+ default_init_construct_iterator result (*this);
+ decrement();
+ return result;
+ }
+
+ friend bool operator== (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+ { return i.equal(i2); }
+
+ friend bool operator!= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+ { return !(i == i2); }
+
+ friend bool operator< (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+ { return i.less(i2); }
+
+ friend bool operator> (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+ { return i2 < i; }
+
+ friend bool operator<= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+ { return !(i > i2); }
+
+ friend bool operator>= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+ { return !(i < i2); }
+
+ friend Difference operator- (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+ { return i2.distance_to(i); }
+
+ //Arithmetic
+ default_init_construct_iterator& operator+=(Difference off)
+ { this->advance(off); return *this; }
+
+ default_init_construct_iterator operator+(Difference off) const
+ {
+ default_init_construct_iterator other(*this);
+ other.advance(off);
+ return other;
+ }
+
+ friend default_init_construct_iterator operator+(Difference off, const default_init_construct_iterator& right)
+ { return right + off; }
+
+ default_init_construct_iterator& operator-=(Difference off)
+ { this->advance(-off); return *this; }
+
+ default_init_construct_iterator operator-(Difference off) const
+ { return *this + (-off); }
+
+ //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;
+
+ void increment()
+ { --m_num; }
+
+ void decrement()
+ { ++m_num; }
+
+ bool equal(const this_type &other) const
+ { return m_num == other.m_num; }
+
+ bool less(const this_type &other) const
+ { return other.m_num < m_num; }
+
+ const T & dereference() const
+ {
+ static T dummy;
+ return dummy;
+ }
+
+ void advance(Difference n)
+ { m_num -= n; }
+
+ Difference distance_to(const this_type &other)const
+ { return m_num - other.m_num; }
+};
+
+
+template <class T, class Difference = std::ptrdiff_t>
class repeat_iterator
: public std::iterator
<std::random_access_iterator_tag, T, Difference>
@@ -273,7 +386,7 @@ class repeat_iterator
this_type& operator++()
{ increment(); return *this; }
-
+
this_type operator++(int)
{
this_type result (*this);
@@ -283,7 +396,7 @@ class repeat_iterator
this_type& operator--()
{ increment(); return *this; }
-
+
this_type operator--(int)
{
this_type result (*this);
@@ -384,7 +497,7 @@ class emplace_iterator
this_type& operator++()
{ increment(); return *this; }
-
+
this_type operator++(int)
{
this_type result (*this);
@@ -394,7 +507,7 @@ class emplace_iterator
this_type& operator--()
{ decrement(); return *this; }
-
+
this_type operator--(int)
{
this_type result (*this);
@@ -585,24 +698,112 @@ struct is_bidirectional_iterator<T, false>
static const bool value = false;
};
-template<class T, class IIterator>
+template<class IIterator>
struct iiterator_types
{
+ typedef typename IIterator::value_type it_value_type;
+ typedef typename it_value_type::value_type value_type;
typedef typename std::iterator_traits<IIterator>::pointer it_pointer;
typedef typename std::iterator_traits<IIterator>::difference_type difference_type;
typedef typename ::boost::intrusive::pointer_traits<it_pointer>::
- template rebind_pointer<T>::type pointer;
+ template rebind_pointer<value_type>::type pointer;
typedef typename ::boost::intrusive::pointer_traits<it_pointer>::
- template rebind_pointer<const T>::type const_pointer;
+ template rebind_pointer<const value_type>::type const_pointer;
typedef typename ::boost::intrusive::
pointer_traits<pointer>::reference reference;
typedef typename ::boost::intrusive::
pointer_traits<const_pointer>::reference const_reference;
+ typedef typename IIterator::iterator_category iterator_category;
};
+template<class IIterator, bool IsConst>
+struct std_iterator
+{
+ typedef typename std::iterator
+ < typename iiterator_types<IIterator>::iterator_category
+ , typename iiterator_types<IIterator>::value_type
+ , typename iiterator_types<IIterator>::difference_type
+ , typename iiterator_types<IIterator>::const_pointer
+ , typename iiterator_types<IIterator>::const_reference> type;
+};
-} //namespace container_detail {
+template<class IIterator>
+struct std_iterator<IIterator, false>
+{
+ typedef typename std::iterator
+ < typename iiterator_types<IIterator>::iterator_category
+ , typename iiterator_types<IIterator>::value_type
+ , typename iiterator_types<IIterator>::difference_type
+ , typename iiterator_types<IIterator>::pointer
+ , typename iiterator_types<IIterator>::reference> type;
+};
+
+template<class IIterator, bool IsConst>
+class iterator
+ : public std_iterator<IIterator, IsConst>::type
+{
+ typedef typename std_iterator<IIterator, IsConst>::type types_t;
+
+ public:
+ typedef typename types_t::value_type value_type;
+ typedef typename types_t::pointer pointer;
+ typedef typename types_t::reference reference;
+
+ iterator()
+ {}
+
+ explicit iterator(IIterator iit) BOOST_CONTAINER_NOEXCEPT
+ : m_iit(iit)
+ {}
+
+ iterator(iterator<IIterator, false> const& other) BOOST_CONTAINER_NOEXCEPT
+ : m_iit(other.get())
+ {}
+
+ iterator& operator++() BOOST_CONTAINER_NOEXCEPT
+ { ++this->m_iit; return *this; }
+
+ iterator operator++(int) BOOST_CONTAINER_NOEXCEPT
+ {
+ iterator result (*this);
+ ++this->m_iit;
+ return result;
+ }
+ iterator& operator--() BOOST_CONTAINER_NOEXCEPT
+ {
+ //If the iterator is not a bidirectional iterator, operator-- should not exist
+ BOOST_STATIC_ASSERT((is_bidirectional_iterator<iterator>::value));
+ --this->m_iit; return *this;
+ }
+
+ iterator operator--(int) BOOST_CONTAINER_NOEXCEPT
+ {
+ iterator result (*this);
+ --this->m_iit;
+ return result;
+ }
+
+ friend bool operator== (const iterator& l, const iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return l.m_iit == r.m_iit; }
+
+ friend bool operator!= (const iterator& l, const iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return !(l == r); }
+
+ reference operator*() const BOOST_CONTAINER_NOEXCEPT
+ { return (*this->m_iit).get_data(); }
+
+ pointer operator->() const BOOST_CONTAINER_NOEXCEPT
+ { return ::boost::intrusive::pointer_traits<pointer>::pointer_to(this->operator*()); }
+
+ const IIterator &get() const BOOST_CONTAINER_NOEXCEPT
+ { return this->m_iit; }
+
+ private:
+ IIterator m_iit;
+};
+
+} //namespace container_detail {
} //namespace container {
} //namespace boost {
diff --git a/3party/boost/boost/container/detail/math_functions.hpp b/3party/boost/boost/container/detail/math_functions.hpp
index fe8386be69..b27cfb4aef 100644
--- a/3party/boost/boost/container/detail/math_functions.hpp
+++ b/3party/boost/boost/container/detail/math_functions.hpp
@@ -1,7 +1,7 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Stephen Cleary 2000.
-// (C) Copyright Ion Gaztanaga 2007-2012.
+// (C) Copyright Ion Gaztanaga 2007-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -16,7 +16,9 @@
#ifndef BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP
#define BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
#include <climits>
#include <boost/static_assert.hpp>
@@ -94,7 +96,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/container/detail/memory_util.hpp b/3party/boost/boost/container/detail/memory_util.hpp
index ac9a899894..572d30acba 100644
--- a/3party/boost/boost/container/detail/memory_util.hpp
+++ b/3party/boost/boost/container/detail/memory_util.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2011-2013. 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)
//
@@ -11,26 +11,28 @@
#ifndef BOOST_CONTAINER_ALLOCATOR_MEMORY_UTIL_HPP
#define BOOST_CONTAINER_ALLOCATOR_MEMORY_UTIL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
+
#include <boost/container/detail/preprocessor.hpp>
+#include <boost/intrusive/detail/memory_util.hpp>
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME allocate
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 2, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (2, 2, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
#include BOOST_PP_ITERATE()
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME destroy
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 3, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
#include BOOST_PP_ITERATE()
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME max_size
@@ -48,20 +50,19 @@
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME construct
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS+1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS+1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
#include BOOST_PP_ITERATE()
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME swap
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
#include BOOST_PP_ITERATE()
namespace boost {
namespace container {
namespace container_detail {
-
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(pointer)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_pointer)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(reference)
@@ -73,6 +74,8 @@ BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_copy_assig
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_move_assignment)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_swap)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(value_compare)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(wrapped_value_compare)
} //namespace container_detail {
} //namespace container {
diff --git a/3party/boost/boost/container/detail/mpl.hpp b/3party/boost/boost/container/detail/mpl.hpp
index 74a1ce0e67..fc1a8a6da2 100644
--- a/3party/boost/boost/container/detail/mpl.hpp
+++ b/3party/boost/boost/container/detail/mpl.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012.
+// (C) Copyright Ion Gaztanaga 2005-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,13 @@
#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP
#define BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
#include <cstddef>
namespace boost {
@@ -66,18 +69,32 @@ struct disable_if : public enable_if_c<!Cond::value, T> {};
template <bool B, class T = void>
struct disable_if_c : public enable_if_c<!B, T> {};
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+
+template <class T, class U>
+struct is_convertible
+{
+ static const bool value = __is_convertible_to(T, U);
+};
+
+#else
+
template <class T, class U>
class is_convertible
{
typedef char true_t;
class false_t { char dummy[2]; };
- static true_t dispatch(U);
+ //use any_conversion as first parameter since in MSVC
+ //overaligned types can't go through ellipsis
static false_t dispatch(...);
- static T trigger();
+ static true_t dispatch(U);
+ static T &trigger();
public:
- enum { value = sizeof(dispatch(trigger())) == sizeof(true_t) };
+ static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);
};
+#endif
+
template<
bool C
, typename T1
@@ -110,8 +127,10 @@ struct if_
template <class Pair>
struct select1st
-// : public std::unary_function<Pair, typename Pair::first_type>
{
+ typedef Pair argument_type;
+ typedef typename Pair::first_type result_type;
+
template<class OtherPair>
const typename Pair::first_type& operator()(const OtherPair& x) const
{ return x.first; }
@@ -123,8 +142,10 @@ struct select1st
// identity is an extension: it is not part of the standard.
template <class T>
struct identity
-// : public std::unary_function<T,T>
{
+ typedef T argument_type;
+ typedef T result_type;
+
typedef T type;
const T& operator()(const T& x) const
{ return x; }
@@ -156,5 +177,7 @@ template <> struct unvoid<const void> { struct type { }; };
} //namespace container {
} //namespace boost {
+#include <boost/container/detail/config_end.hpp>
+
#endif //#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP
diff --git a/3party/boost/boost/container/detail/multiallocation_chain.hpp b/3party/boost/boost/container/detail/multiallocation_chain.hpp
index 2e29f9c1a2..38c331cbcd 100644
--- a/3party/boost/boost/container/detail/multiallocation_chain.hpp
+++ b/3party/boost/boost/container/detail/multiallocation_chain.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,7 +11,9 @@
#ifndef BOOST_CONTAINER_DETAIL_MULTIALLOCATION_CHAIN_HPP
#define BOOST_CONTAINER_DETAIL_MULTIALLOCATION_CHAIN_HPP
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
#include <boost/container/container_fwd.hpp>
#include <boost/container/detail/utilities.hpp>
#include <boost/container/detail/type_traits.hpp>
@@ -243,10 +245,10 @@ class transform_multiallocation_chain
iterator before_begin()
{ return iterator(holder_.before_begin()); }
-
+*/
iterator begin()
- { return iterator(holder_.begin()); }
-
+ { return iterator(this->MultiallocationChain::begin()); }
+/*
iterator end()
{ return iterator(holder_.end()); }
diff --git a/3party/boost/boost/container/detail/mutex.hpp b/3party/boost/boost/container/detail/mutex.hpp
new file mode 100644
index 0000000000..89b041c1cb
--- /dev/null
+++ b/3party/boost/boost/container/detail/mutex.hpp
@@ -0,0 +1,278 @@
+// Copyright (C) 2000 Stephen Cleary
+//
+// 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.
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2007-2013. 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_MUTEX_HPP
+#define BOOST_CONTAINER_MUTEX_HPP
+
+//#define BOOST_CONTAINER_NO_MT
+//#define BOOST_CONTAINER_NO_SPINLOCKS
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+// Extremely Light-Weight wrapper classes for OS thread synchronization
+
+#define BOOST_MUTEX_HELPER_NONE 0
+#define BOOST_MUTEX_HELPER_WIN32 1
+#define BOOST_MUTEX_HELPER_PTHREAD 2
+#define BOOST_MUTEX_HELPER_SPINLOCKS 3
+
+#if !defined(BOOST_HAS_THREADS) && !defined(BOOST_NO_MT)
+# define BOOST_NO_MT
+#endif
+
+#if defined(BOOST_NO_MT) || defined(BOOST_CONTAINER_NO_MT)
+ // No multithreading -> make locks into no-ops
+ #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_NONE
+#else
+ //Taken from dlmalloc
+ #if !defined(BOOST_CONTAINER_NO_SPINLOCKS) && \
+ ((defined(__GNUC__) && \
+ ((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) || \
+ defined(__i386__) || defined(__x86_64__))) || \
+ (defined(_MSC_VER) && _MSC_VER>=1310))
+ #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_SPINLOCKS
+ #endif
+
+ #if defined(BOOST_WINDOWS)
+ #include <windows.h>
+ #ifndef BOOST_MUTEX_HELPER
+ #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_WIN32
+ #endif
+ #elif defined(BOOST_HAS_UNISTD_H)
+ #include <unistd.h>
+ #if !defined(BOOST_MUTEX_HELPER) && (defined(_POSIX_THREADS) || defined(BOOST_HAS_PTHREADS))
+ #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_PTHREAD
+ #endif
+ #endif
+#endif
+
+#ifndef BOOST_MUTEX_HELPER
+ #error Unable to determine platform mutex type; #define BOOST_NO_MT to assume single-threaded
+#endif
+
+#if BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_NONE
+ //...
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_SPINLOCKS
+ #if defined(_MSC_VER)
+ #ifndef _M_AMD64
+ /* These are already defined on AMD64 builds */
+ #ifdef __cplusplus
+ extern "C" {
+ #endif /* __cplusplus */
+ long __cdecl _InterlockedCompareExchange(long volatile *Dest, long Exchange, long Comp);
+ long __cdecl _InterlockedExchange(long volatile *Target, long Value);
+ #ifdef __cplusplus
+ }
+ #endif /* __cplusplus */
+ #endif /* _M_AMD64 */
+ #pragma intrinsic (_InterlockedCompareExchange)
+ #pragma intrinsic (_InterlockedExchange)
+ #define interlockedcompareexchange _InterlockedCompareExchange
+ #define interlockedexchange _InterlockedExchange
+ #elif defined(WIN32) && defined(__GNUC__)
+ #define interlockedcompareexchange(a, b, c) __sync_val_compare_and_swap(a, c, b)
+ #define interlockedexchange __sync_lock_test_and_set
+ #endif /* Win32 */
+
+ /* First, define CAS_LOCK and CLEAR_LOCK on ints */
+ /* Note CAS_LOCK defined to return 0 on success */
+
+ #if defined(__GNUC__)&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1))
+ #define BOOST_CONTAINER_CAS_LOCK(sl) __sync_lock_test_and_set(sl, 1)
+ #define BOOST_CONTAINER_CLEAR_LOCK(sl) __sync_lock_release(sl)
+
+ #elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))
+ /* Custom spin locks for older gcc on x86 */
+ static FORCEINLINE int boost_container_x86_cas_lock(int *sl) {
+ int ret;
+ int val = 1;
+ int cmp = 0;
+ __asm__ __volatile__ ("lock; cmpxchgl %1, %2"
+ : "=a" (ret)
+ : "r" (val), "m" (*(sl)), "0"(cmp)
+ : "memory", "cc");
+ return ret;
+ }
+
+ static FORCEINLINE void boost_container_x86_clear_lock(int* sl) {
+ assert(*sl != 0);
+ int prev = 0;
+ int ret;
+ __asm__ __volatile__ ("lock; xchgl %0, %1"
+ : "=r" (ret)
+ : "m" (*(sl)), "0"(prev)
+ : "memory");
+ }
+
+ #define BOOST_CONTAINER_CAS_LOCK(sl) boost_container_x86_cas_lock(sl)
+ #define BOOST_CONTAINER_CLEAR_LOCK(sl) boost_container_x86_clear_lock(sl)
+
+ #else /* Win32 MSC */
+ #define BOOST_CONTAINER_CAS_LOCK(sl) interlockedexchange((long volatile*)sl, (long)1)
+ #define BOOST_CONTAINER_CLEAR_LOCK(sl) interlockedexchange((long volatile*)sl, (long)0)
+ #endif
+
+ /* How to yield for a spin lock */
+ #define SPINS_PER_YIELD 63
+ #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+ #define SLEEP_EX_DURATION 50 /* delay for yield/sleep */
+ #define SPIN_LOCK_YIELD SleepEx(SLEEP_EX_DURATION, FALSE)
+ #elif defined (__SVR4) && defined (__sun) /* solaris */
+ #define SPIN_LOCK_YIELD thr_yield();
+ #elif !defined(LACKS_SCHED_H)
+ #define SPIN_LOCK_YIELD sched_yield();
+ #else
+ #define SPIN_LOCK_YIELD
+ #endif /* ... yield ... */
+
+ #define BOOST_CONTAINER_SPINS_PER_YIELD 63
+ inline int boost_interprocess_spin_acquire_lock(int *sl) {
+ int spins = 0;
+ while (*(volatile int *)sl != 0 ||
+ BOOST_CONTAINER_CAS_LOCK(sl)) {
+ if ((++spins & BOOST_CONTAINER_SPINS_PER_YIELD) == 0) {
+ SPIN_LOCK_YIELD;
+ }
+ }
+ return 0;
+ }
+ #define BOOST_CONTAINER_MLOCK_T int
+ #define BOOST_CONTAINER_TRY_LOCK(sl) !BOOST_CONTAINER_CAS_LOCK(sl)
+ #define BOOST_CONTAINER_RELEASE_LOCK(sl) BOOST_CONTAINER_CLEAR_LOCK(sl)
+ #define BOOST_CONTAINER_ACQUIRE_LOCK(sl) (BOOST_CONTAINER_CAS_LOCK(sl)? boost_interprocess_spin_acquire_lock(sl) : 0)
+ #define BOOST_CONTAINER_INITIAL_LOCK(sl) (*sl = 0)
+ #define BOOST_CONTAINER_DESTROY_LOCK(sl) (0)
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_WIN32
+ //
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_PTHREAD
+ #include <pthread.h>
+#endif
+
+namespace boost {
+namespace container {
+namespace container_detail {
+
+#if BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_NONE
+ class null_mutex
+ {
+ private:
+ null_mutex(const null_mutex &);
+ void operator=(const null_mutex &);
+
+ public:
+ null_mutex() { }
+
+ static void lock() { }
+ static void unlock() { }
+ };
+
+ typedef null_mutex default_mutex;
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_SPINLOCKS
+
+ class spin_mutex
+ {
+ private:
+ BOOST_CONTAINER_MLOCK_T sl;
+ spin_mutex(const spin_mutex &);
+ void operator=(const spin_mutex &);
+
+ public:
+ spin_mutex() { BOOST_CONTAINER_INITIAL_LOCK(&sl); }
+
+ void lock() { BOOST_CONTAINER_ACQUIRE_LOCK(&sl); }
+ void unlock() { BOOST_CONTAINER_RELEASE_LOCK(&sl); }
+ };
+ typedef spin_mutex default_mutex;
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_WIN32
+ class mutex
+ {
+ private:
+ CRITICAL_SECTION mtx;
+
+ mutex(const mutex &);
+ void operator=(const mutex &);
+
+ public:
+ mutex()
+ { InitializeCriticalSection(&mtx); }
+
+ ~mutex()
+ { DeleteCriticalSection(&mtx); }
+
+ void lock()
+ { EnterCriticalSection(&mtx); }
+
+ void unlock()
+ { LeaveCriticalSection(&mtx); }
+ };
+
+ typedef mutex default_mutex;
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_PTHREAD
+ class mutex
+ {
+ private:
+ pthread_mutex_t mtx;
+
+ mutex(const mutex &);
+ void operator=(const mutex &);
+
+ public:
+ mutex()
+ { pthread_mutex_init(&mtx, 0); }
+
+ ~mutex()
+ { pthread_mutex_destroy(&mtx); }
+
+ void lock()
+ { pthread_mutex_lock(&mtx); }
+
+ void unlock()
+ { pthread_mutex_unlock(&mtx); }
+ };
+
+ typedef mutex default_mutex;
+#endif
+
+template<class Mutex>
+class scoped_lock
+{
+ public:
+ scoped_lock(Mutex &m)
+ : m_(m)
+ { m_.lock(); }
+ ~scoped_lock()
+ { m_.unlock(); }
+
+ private:
+ Mutex &m_;
+};
+
+} // namespace container_detail
+} // namespace container
+} // namespace boost
+
+#undef BOOST_MUTEX_HELPER_WIN32
+#undef BOOST_MUTEX_HELPER_PTHREAD
+#undef BOOST_MUTEX_HELPER_NONE
+#undef BOOST_MUTEX_HELPER
+#undef BOOST_MUTEX_HELPER_SPINLOCKS
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif
diff --git a/3party/boost/boost/container/detail/node_alloc_holder.hpp b/3party/boost/boost/container/detail/node_alloc_holder.hpp
index 5a94a68d02..6483e9600c 100644
--- a/3party/boost/boost/container/detail/node_alloc_holder.hpp
+++ b/3party/boost/boost/container/detail/node_alloc_holder.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,11 +11,11 @@
#ifndef BOOST_CONTAINER_DETAIL_NODE_ALLOC_HPP_
#define BOOST_CONTAINER_DETAIL_NODE_ALLOC_HPP_
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <utility>
@@ -28,8 +28,10 @@
#include <boost/container/detail/type_traits.hpp>
#include <boost/container/detail/utilities.hpp>
#include <boost/container/allocator_traits.hpp>
+#include <boost/container/detail/allocator_version_traits.hpp>
#include <boost/container/detail/mpl.hpp>
#include <boost/container/detail/destroyers.hpp>
+#include <boost/container/detail/memory_util.hpp>
#include <boost/container/detail/allocator_version_traits.hpp>
#include <boost/detail/no_exceptions_support.hpp>
@@ -49,34 +51,49 @@ template<class ValueCompare, class Node>
struct node_compare
: private ValueCompare
{
- typedef typename ValueCompare::key_type key_type;
- typedef typename ValueCompare::value_type value_type;
- typedef typename ValueCompare::key_of_value key_of_value;
+ typedef ValueCompare wrapped_value_compare;
+ typedef typename wrapped_value_compare::key_type key_type;
+ typedef typename wrapped_value_compare::value_type value_type;
+ typedef typename wrapped_value_compare::key_of_value key_of_value;
+
+ explicit node_compare(const wrapped_value_compare &pred)
+ : wrapped_value_compare(pred)
+ {}
- node_compare(const ValueCompare &pred)
- : ValueCompare(pred)
+ node_compare()
+ : wrapped_value_compare()
{}
- ValueCompare &value_comp()
- { return static_cast<ValueCompare &>(*this); }
+ wrapped_value_compare &value_comp()
+ { return static_cast<wrapped_value_compare &>(*this); }
- ValueCompare &value_comp() const
- { return static_cast<const ValueCompare &>(*this); }
+ wrapped_value_compare &value_comp() const
+ { return static_cast<const wrapped_value_compare &>(*this); }
bool operator()(const Node &a, const Node &b) const
- { return ValueCompare::operator()(a.get_data(), b.get_data()); }
+ { return wrapped_value_compare::operator()(a.get_data(), b.get_data()); }
};
-template<class A, class ICont, class Pred = container_detail::nat>
+template<class A, class ICont>
struct node_alloc_holder
{
+ //If the intrusive container is an associative container, obtain the predicate, which will
+ //be of type node_compare<>. If not an associative container value_compare will be a "nat" type.
+ typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, ICont,
+ value_compare, container_detail::nat) intrusive_value_compare;
+ //In that case obtain the value predicate from the node predicate via wrapped_value_compare
+ //if intrusive_value_compare is node_compare<>, nat otherwise
+ typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, ICont,
+ wrapped_value_compare, container_detail::nat) value_compare;
+
typedef allocator_traits<A> allocator_traits_type;
- typedef node_alloc_holder<A, ICont> self_t;
typedef typename allocator_traits_type::value_type value_type;
+ typedef ICont intrusive_container;
typedef typename ICont::value_type Node;
typedef typename allocator_traits_type::template
portable_rebind_alloc<Node>::type NodeAlloc;
typedef allocator_traits<NodeAlloc> node_allocator_traits_type;
+ typedef container_detail::allocator_version_traits<NodeAlloc> node_allocator_version_traits_type;
typedef A ValAlloc;
typedef typename node_allocator_traits_type::pointer NodePtr;
typedef container_detail::scoped_deallocator<NodeAlloc> Deallocator;
@@ -116,25 +133,25 @@ struct node_alloc_holder
{ this->icont().swap(x.icont()); }
//Constructors for associative containers
- explicit node_alloc_holder(const ValAlloc &a, const Pred &c)
+ explicit node_alloc_holder(const ValAlloc &a, const value_compare &c)
: members_(a, c)
{}
- explicit node_alloc_holder(const node_alloc_holder &x, const Pred &c)
+ explicit node_alloc_holder(const node_alloc_holder &x, const value_compare &c)
: members_(NodeAllocTraits::select_on_container_copy_construction(x.node_alloc()), c)
{}
- explicit node_alloc_holder(const Pred &c)
+ explicit node_alloc_holder(const value_compare &c)
: members_(c)
{}
//helpers for move assignments
- explicit node_alloc_holder(BOOST_RV_REF(node_alloc_holder) x, const Pred &c)
+ explicit node_alloc_holder(BOOST_RV_REF(node_alloc_holder) x, const value_compare &c)
: members_(boost::move(x.node_alloc()), c)
{ this->icont().swap(x.icont()); }
void copy_assign_alloc(const node_alloc_holder &x)
- {
+ {
container_detail::bool_<allocator_traits_type::propagate_on_container_copy_assignment::value> flag;
container_detail::assign_alloc( static_cast<NodeAlloc &>(this->members_)
, static_cast<const NodeAlloc &>(x.members_), flag);
@@ -230,45 +247,41 @@ struct node_alloc_holder
(FwdIterator beg, difference_type n, Inserter inserter)
{
if(n){
- /*
- NodePtr p = this->allocate_one();
- Deallocator node_deallocator(p, this->node_alloc());
- ::boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->m_data), it);
- node_deallocator.release();
- //This does not throw
- typedef typename Node::hook_type hook_type;
- ::new(static_cast<hook_type*>(container_detail::to_raw_pointer(p))) hook_type;
- return (p);
- */
- typedef typename NodeAlloc::multiallocation_chain multiallocation_chain;
+ typedef typename node_allocator_version_traits_type::multiallocation_chain multiallocation_chain;
//Try to allocate memory in a single block
typedef typename multiallocation_chain::iterator multialloc_iterator;
multiallocation_chain mem;
- this->node_alloc().allocate_individual(n, mem);
+ NodeAlloc &nalloc = this->node_alloc();
+ node_allocator_version_traits_type::allocate_individual(nalloc, n, mem);
multialloc_iterator itbeg(mem.begin()), itlast(mem.last());
mem.clear();
Node *p = 0;
- NodeAlloc &nalloc = this->node_alloc();
BOOST_TRY{
+ Deallocator node_deallocator(NodePtr(), nalloc);
+ container_detail::scoped_destructor<NodeAlloc> sdestructor(nalloc, 0);
while(n--){
- p = container_detail::to_raw_pointer(&*itbeg);
+ p = container_detail::to_raw_pointer(iterator_to_pointer(itbeg));
+ node_deallocator.set(p);
++itbeg;
//This can throw
- Deallocator node_deallocator(p, nalloc);
boost::container::construct_in_place(nalloc, container_detail::addressof(p->m_data), beg);
+ sdestructor.set(p);
++beg;
- node_deallocator.release();
//This does not throw
typedef typename Node::hook_type hook_type;
::new(static_cast<hook_type*>(p)) hook_type;
- //This can throw in some containers (predicate might throw)
+ //This can throw in some containers (predicate might throw).
+ //(sdestructor will destruct the node and node_deallocator will deallocate it in case of exception)
inserter(*p);
+ sdestructor.set(0);
}
+ sdestructor.release();
+ node_deallocator.release();
}
BOOST_CATCH(...){
mem.incorporate_after(mem.last(), &*itbeg, &*itlast, n);
- this->node_alloc().deallocate_individual(mem);
+ node_allocator_version_traits_type::deallocate_individual(this->node_alloc(), mem);
BOOST_RETHROW
}
BOOST_CATCH_END
@@ -345,12 +358,12 @@ struct node_alloc_holder
{}
template<class ConvertibleToAlloc>
- members_holder(BOOST_FWD_REF(ConvertibleToAlloc) c2alloc, const Pred &c)
+ members_holder(BOOST_FWD_REF(ConvertibleToAlloc) c2alloc, const value_compare &c)
: NodeAlloc(boost::forward<ConvertibleToAlloc>(c2alloc))
, m_icont(typename ICont::value_compare(c))
{}
- explicit members_holder(const Pred &c)
+ explicit members_holder(const value_compare &c)
: NodeAlloc()
, m_icont(typename ICont::value_compare(c))
{}
diff --git a/3party/boost/boost/container/detail/node_pool.hpp b/3party/boost/boost/container/detail/node_pool.hpp
new file mode 100644
index 0000000000..56c3d8a165
--- /dev/null
+++ b/3party/boost/boost/container/detail/node_pool.hpp
@@ -0,0 +1,157 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. 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_NODE_POOL_HPP
+#define BOOST_CONTAINER_DETAIL_NODE_POOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#include <boost/container/detail/mutex.hpp>
+#include <boost/container/detail/pool_common_alloc.hpp>
+#include <boost/container/detail/node_pool_impl.hpp>
+#include <boost/container/detail/mutex.hpp>
+#include <boost/intrusive/slist.hpp>
+#include <boost/move/move.hpp>
+#include <cstddef>
+#include <new>
+#include <functional> //std::unary_function
+#include <algorithm> //std::swap
+#include <cassert>
+
+namespace boost {
+namespace container {
+namespace container_detail {
+
+//!Pooled memory allocator using single segregated storage. Includes
+//!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< std::size_t NodeSize, std::size_t NodesPerBlock >
+class private_node_pool
+ //Inherit from the implementation to avoid template bloat
+ : public boost::container::container_detail::
+ private_node_pool_impl<fake_segment_manager>
+{
+ typedef boost::container::container_detail::
+ private_node_pool_impl<fake_segment_manager> base_t;
+ //Non-copyable
+ private_node_pool(const private_node_pool &);
+ private_node_pool &operator=(const private_node_pool &);
+
+ public:
+ typedef typename base_t::multiallocation_chain multiallocation_chain;
+ static const std::size_t nodes_per_block = NodesPerBlock;
+
+ //!Constructor from a segment manager. Never throws
+ private_node_pool()
+ : base_t(0, NodeSize, NodesPerBlock)
+ {}
+
+};
+
+template< std::size_t NodeSize
+ , std::size_t NodesPerBlock
+ >
+class shared_node_pool
+ : public private_node_pool<NodeSize, NodesPerBlock>
+{
+ private:
+ typedef private_node_pool<NodeSize, NodesPerBlock> private_node_allocator_t;
+
+ public:
+ typedef typename private_node_allocator_t::free_nodes_t free_nodes_t;
+ typedef typename private_node_allocator_t::multiallocation_chain multiallocation_chain;
+
+ //!Constructor from a segment manager. Never throws
+ shared_node_pool()
+ : private_node_allocator_t(){}
+
+ //!Destructor. Deallocates all allocated blocks. Never throws
+ ~shared_node_pool()
+ {}
+
+ //!Allocates array of count elements. Can throw std::bad_alloc
+ void *allocate_node()
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ return private_node_allocator_t::allocate_node();
+ }
+
+ //!Deallocates an array pointed by ptr. Never throws
+ void deallocate_node(void *ptr)
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ private_node_allocator_t::deallocate_node(ptr);
+ }
+
+ //!Allocates a singly linked list of n nodes ending in null pointer.
+ //!can throw std::bad_alloc
+ void allocate_nodes(const std::size_t n, multiallocation_chain &chain)
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ return private_node_allocator_t::allocate_nodes(n, chain);
+ }
+
+ void deallocate_nodes(multiallocation_chain &chain)
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ private_node_allocator_t::deallocate_nodes(chain);
+ }
+
+ //!Deallocates all the free blocks of memory. Never throws
+ void deallocate_free_blocks()
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ private_node_allocator_t::deallocate_free_blocks();
+ }
+
+ //!Deallocates all blocks. Never throws
+ void purge_blocks()
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ private_node_allocator_t::purge_blocks();
+ }
+
+ std::size_t num_free_nodes()
+ {
+ //-----------------------
+ scoped_lock<default_mutex> guard(mutex_);
+ //-----------------------
+ return private_node_allocator_t::num_free_nodes();
+ }
+
+ private:
+ default_mutex mutex_;
+};
+
+} //namespace container_detail {
+} //namespace container {
+} //namespace boost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_CONTAINER_DETAIL_NODE_POOL_HPP
diff --git a/3party/boost/boost/container/detail/node_pool_impl.hpp b/3party/boost/boost/container/detail/node_pool_impl.hpp
index 2103898b61..d79bcbe02c 100644
--- a/3party/boost/boost/container/detail/node_pool_impl.hpp
+++ b/3party/boost/boost/container/detail/node_pool_impl.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,13 +11,14 @@
#ifndef BOOST_CONTAINER_DETAIL_NODE_POOL_IMPL_HPP
#define BOOST_CONTAINER_DETAIL_NODE_POOL_IMPL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
-#include <boost/container/container_fwd.hpp>
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
+
+#include <boost/container/container_fwd.hpp>
#include <boost/container/detail/utilities.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/set.hpp>
@@ -29,8 +30,6 @@
#include <boost/detail/no_exceptions_support.hpp>
#include <boost/assert.hpp>
#include <cstddef>
-#include <functional> //std::unary_function
-
namespace boost {
namespace container {
@@ -88,7 +87,7 @@ class private_node_pool_impl
void *allocate_node()
{ return this->priv_alloc_node(); }
-
+
//!Deallocates an array pointed by ptr. Never throws
void deallocate_node(void *ptr)
{ this->priv_dealloc_node(ptr); }
@@ -236,7 +235,7 @@ class private_node_pool_impl
push_in_list(free_nodes_t &l, typename free_nodes_t::iterator &it)
: slist_(l), last_it_(it)
{}
-
+
void operator()(typename free_nodes_t::pointer p) const
{
slist_.push_front(*p);
@@ -251,12 +250,14 @@ class private_node_pool_impl
};
struct is_between
- : std::unary_function<typename free_nodes_t::value_type, bool>
{
+ typedef typename free_nodes_t::value_type argument_type;
+ typedef bool result_type;
+
is_between(const void *addr, std::size_t size)
: beg_(static_cast<const char *>(addr)), end_(beg_+size)
{}
-
+
bool operator()(typename free_nodes_t::const_reference v) const
{
return (beg_ <= reinterpret_cast<const char *>(&v) &&
@@ -333,13 +334,13 @@ class private_node_pool_impl
private:
//!Returns a reference to the block hook placed in the end of the block
static node_t & get_block_hook (void *block, size_type blocksize)
- {
- return *reinterpret_cast<node_t*>(reinterpret_cast<char*>(block) + blocksize);
+ {
+ return *reinterpret_cast<node_t*>(reinterpret_cast<char*>(block) + blocksize);
}
//!Returns the starting address of the block reference to the block hook placed in the end of the block
void *get_block_from_hook (node_t *hook, size_type blocksize)
- {
+ {
return (reinterpret_cast<char*>(hook) - blocksize);
}
diff --git a/3party/boost/boost/container/detail/pair.hpp b/3party/boost/boost/container/detail/pair.hpp
index 79753a8612..0d7e0a9b7d 100644
--- a/3party/boost/boost/container/detail/pair.hpp
+++ b/3party/boost/boost/container/detail/pair.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012.
+// (C) Copyright Ion Gaztanaga 2005-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,11 +13,11 @@
#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_PAIR_HPP
#define BOOST_CONTAINER_CONTAINER_DETAIL_PAIR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/detail/mpl.hpp>
diff --git a/3party/boost/boost/container/detail/pool_common.hpp b/3party/boost/boost/container/detail/pool_common.hpp
index 983d1413a0..53a7427405 100644
--- a/3party/boost/boost/container/detail/pool_common.hpp
+++ b/3party/boost/boost/container/detail/pool_common.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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,14 +8,16 @@
//
//////////////////////////////////////////////////////////////////////////////
-#ifndef BOOST_CONTAINER_DETAIL_NODE_POOL_COMMON_HPP
-#define BOOST_CONTAINER_DETAIL_NODE_POOL_COMMON_HPP
+#ifndef BOOST_CONTAINER_DETAIL_POOL_COMMON_HPP
+#define BOOST_CONTAINER_DETAIL_POOL_COMMON_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
#include <boost/intrusive/slist.hpp>
#include <new>
diff --git a/3party/boost/boost/container/detail/pool_common_alloc.hpp b/3party/boost/boost/container/detail/pool_common_alloc.hpp
new file mode 100644
index 0000000000..37186a6a99
--- /dev/null
+++ b/3party/boost/boost/container/detail/pool_common_alloc.hpp
@@ -0,0 +1,94 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. 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_POOL_COMMON_ALLOC_HPP
+#define BOOST_CONTAINER_DETAIL_POOL_COMMON_ALLOC_HPP
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+#include <boost/container/throw_exception.hpp>
+
+#include <boost/intrusive/slist.hpp>
+#include <boost/container/detail/pool_common.hpp>
+#include <boost/container/detail/alloc_lib.h>
+#include <cstddef>
+
+namespace boost{
+namespace container{
+namespace container_detail{
+
+struct node_slist_helper
+ : public boost::container::container_detail::node_slist<void*>
+{};
+
+struct fake_segment_manager
+{
+ typedef void * void_pointer;
+ static const std::size_t PayloadPerAllocation = BOOST_CONTAINER_ALLOCATION_PAYLOAD;
+
+ typedef boost::container::container_detail::
+ basic_multiallocation_chain<void*> multiallocation_chain;
+ static void deallocate(void_pointer p)
+ { boost_cont_free(p); }
+
+ static void deallocate_many(multiallocation_chain &chain)
+ {
+ std::size_t size = chain.size();
+ std::pair<void*, void*> ptrs = chain.extract_data();
+ boost_cont_memchain dlchain;
+ BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&dlchain, ptrs.first, ptrs.second, size);
+ boost_cont_multidealloc(&dlchain);
+ }
+
+ typedef std::ptrdiff_t difference_type;
+ typedef std::size_t size_type;
+
+ static void *allocate_aligned(std::size_t nbytes, std::size_t alignment)
+ {
+ void *ret = boost_cont_memalign(nbytes, alignment);
+ if(!ret)
+ boost::container::throw_bad_alloc();
+ return ret;
+ }
+
+ static void *allocate(std::size_t nbytes)
+ {
+ void *ret = boost_cont_malloc(nbytes);
+ if(!ret)
+ boost::container::throw_bad_alloc();
+ return ret;
+ }
+};
+
+} //namespace boost{
+} //namespace container{
+} //namespace container_detail{
+
+namespace boost {
+namespace container {
+namespace container_detail {
+
+template<class T>
+struct is_stateless_segment_manager;
+
+template<>
+struct is_stateless_segment_manager
+ <boost::container::container_detail::fake_segment_manager>
+{
+ static const bool value = true;
+};
+
+} //namespace container_detail {
+} //namespace container {
+} //namespace boost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //BOOST_CONTAINER_DETAIL_POOL_COMMON_ALLOC_HPP
diff --git a/3party/boost/boost/container/detail/preprocessor.hpp b/3party/boost/boost/container/detail/preprocessor.hpp
index 4e175a82fb..7e4f5eb0ff 100644
--- a/3party/boost/boost/container/detail/preprocessor.hpp
+++ b/3party/boost/boost/container/detail/preprocessor.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2008-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2008-2013. 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)
//
@@ -11,7 +11,7 @@
#ifndef BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP
#define BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/container/detail/singleton.hpp b/3party/boost/boost/container/detail/singleton.hpp
new file mode 100644
index 0000000000..0843319a16
--- /dev/null
+++ b/3party/boost/boost/container/detail/singleton.hpp
@@ -0,0 +1,113 @@
+// Copyright (C) 2000 Stephen Cleary
+// Copyright (C) 2008 Ion Gaztanaga
+//
+// 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.
+//
+// This file is a modified file from Boost.Pool
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2007-2013. 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_SINGLETON_DETAIL_HPP
+#define BOOST_CONTAINER_DETAIL_SINGLETON_DETAIL_HPP
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+//
+// The following helper classes are placeholders for a generic "singleton"
+// class. The classes below support usage of singletons, including use in
+// program startup/shutdown code, AS LONG AS there is only one thread
+// running before main() begins, and only one thread running after main()
+// exits.
+//
+// This class is also limited in that it can only provide singleton usage for
+// classes with default constructors.
+//
+
+// The design of this class is somewhat twisted, but can be followed by the
+// calling inheritance. Let us assume that there is some user code that
+// calls "singleton_default<T>::instance()". The following (convoluted)
+// sequence ensures that the same function will be called before main():
+// instance() contains a call to create_object.do_nothing()
+// Thus, object_creator is implicitly instantiated, and create_object
+// must exist.
+// Since create_object is a static member, its constructor must be
+// called before main().
+// The constructor contains a call to instance(), thus ensuring that
+// instance() will be called before main().
+// The first time instance() is called (i.e., before main()) is the
+// latest point in program execution where the object of type T
+// can be created.
+// Thus, any call to instance() will auto-magically result in a call to
+// instance() before main(), unless already present.
+// Furthermore, since the instance() function contains the object, instead
+// of the singleton_default class containing a static instance of the
+// object, that object is guaranteed to be constructed (at the latest) in
+// the first call to instance(). This permits calls to instance() from
+// static code, even if that code is called before the file-scope objects
+// in this file have been initialized.
+
+namespace boost {
+namespace container {
+namespace container_detail {
+
+// T must be: no-throw default constructible and no-throw destructible
+template <typename T>
+struct singleton_default
+{
+ private:
+ struct object_creator
+ {
+ // This constructor does nothing more than ensure that instance()
+ // is called before main() begins, thus creating the static
+ // T object before multithreading race issues can come up.
+ object_creator() { singleton_default<T>::instance(); }
+ inline void do_nothing() const { }
+ };
+ static object_creator create_object;
+
+ singleton_default();
+
+ public:
+ typedef T object_type;
+
+ // If, at any point (in user code), singleton_default<T>::instance()
+ // is called, then the following function is instantiated.
+ static object_type & instance()
+ {
+ // This is the object that we return a reference to.
+ // It is guaranteed to be created before main() begins because of
+ // the next line.
+ static object_type obj;
+
+ // The following line does nothing else than force the instantiation
+ // of singleton_default<T>::create_object, whose constructor is
+ // called before main() begins.
+ create_object.do_nothing();
+
+ return obj;
+ }
+};
+template <typename T>
+typename singleton_default<T>::object_creator
+singleton_default<T>::create_object;
+
+} // namespace container_detail
+} // namespace container
+} // namespace boost
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //BOOST_CONTAINER_DETAIL_SINGLETON_DETAIL_HPP
diff --git a/3party/boost/boost/container/detail/transform_iterator.hpp b/3party/boost/boost/container/detail/transform_iterator.hpp
index 98f5c04d60..c4e746c389 100644
--- a/3party/boost/boost/container/detail/transform_iterator.hpp
+++ b/3party/boost/boost/container/detail/transform_iterator.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012.
+// (C) Copyright Ion Gaztanaga 2005-2013.
// (C) Copyright Gennaro Prota 2003 - 2004.
//
// Distributed under the Boost Software License, Version 1.0.
@@ -14,12 +14,13 @@
#ifndef BOOST_CONTAINER_DETAIL_TRANSFORM_ITERATORS_HPP
#define BOOST_CONTAINER_DETAIL_TRANSFORM_ITERATORS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
+
#include <boost/container/detail/type_traits.hpp>
#include <iterator>
@@ -33,10 +34,10 @@ struct operator_arrow_proxy
: m_value(px)
{}
+ typedef PseudoReference element_type;
+
PseudoReference* operator->() const { return &m_value; }
- // This function is needed for MWCW and BCC, which won't call operator->
- // again automatically per 13.3.1.2 para 8
-// operator T*() const { return &m_value; }
+
mutable PseudoReference m_value;
};
@@ -47,10 +48,10 @@ struct operator_arrow_proxy<T&>
: m_value(px)
{}
+ typedef T element_type;
+
T* operator->() const { return const_cast<T*>(&m_value); }
- // This function is needed for MWCW and BCC, which won't call operator->
- // again automatically per 13.3.1.2 para 8
-// operator T*() const { return &m_value; }
+
T &m_value;
};
diff --git a/3party/boost/boost/container/detail/tree.hpp b/3party/boost/boost/container/detail/tree.hpp
index 9cb3c9f80f..8ccf2798d4 100644
--- a/3party/boost/boost/container/detail/tree.hpp
+++ b/3party/boost/boost/container/detail/tree.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,24 +11,31 @@
#ifndef BOOST_CONTAINER_TREE_HPP
#define BOOST_CONTAINER_TREE_HPP
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/container_fwd.hpp>
-#include <boost/move/utility.hpp>
-#include <boost/intrusive/pointer_traits.hpp>
-#include <boost/type_traits/has_trivial_destructor.hpp>
-#include <boost/detail/no_exceptions_support.hpp>
-#include <boost/intrusive/rbtree.hpp>
-
#include <boost/container/detail/utilities.hpp>
+#include <boost/container/detail/iterators.hpp>
#include <boost/container/detail/algorithms.hpp>
#include <boost/container/detail/node_alloc_holder.hpp>
#include <boost/container/detail/destroyers.hpp>
#include <boost/container/detail/pair.hpp>
#include <boost/container/detail/type_traits.hpp>
#include <boost/container/allocator_traits.hpp>
+#include <boost/container/options.hpp>
+
+//
+#include <boost/intrusive/pointer_traits.hpp>
+#include <boost/intrusive/rbtree.hpp>
+#include <boost/intrusive/avltree.hpp>
+#include <boost/intrusive/splaytree.hpp>
+#include <boost/intrusive/sgtree.hpp>
+//
+#include <boost/move/utility.hpp>
+#include <boost/type_traits/has_trivial_destructor.hpp>
#include <boost/detail/no_exceptions_support.hpp>
+//
#ifndef BOOST_CONTAINER_PERFECT_FORWARDING
#include <boost/container/detail/preprocessor.hpp>
#endif
@@ -50,8 +57,12 @@ struct tree_value_compare
typedef KeyOfValue key_of_value;
typedef Key key_type;
- tree_value_compare(const key_compare &kcomp)
- : key_compare(kcomp)
+ explicit tree_value_compare(const key_compare &kcomp)
+ : KeyCompare(kcomp)
+ {}
+
+ tree_value_compare()
+ : KeyCompare()
{}
const key_compare &key_comp() const
@@ -81,47 +92,78 @@ struct tree_value_compare
{ return key_compare::operator()(this->key_forward(key1), this->key_forward(key2)); }
};
-template<class VoidPointer>
-struct rbtree_hook
+template<class VoidPointer, boost::container::tree_type_enum tree_type_value, bool OptimizeSize>
+struct intrusive_tree_hook;
+
+template<class VoidPointer, bool OptimizeSize>
+struct intrusive_tree_hook<VoidPointer, boost::container::red_black_tree, OptimizeSize>
{
typedef typename container_detail::bi::make_set_base_hook
< container_detail::bi::void_pointer<VoidPointer>
, container_detail::bi::link_mode<container_detail::bi::normal_link>
- , container_detail::bi::optimize_size<true>
+ , container_detail::bi::optimize_size<OptimizeSize>
+ >::type type;
+};
+
+template<class VoidPointer, bool OptimizeSize>
+struct intrusive_tree_hook<VoidPointer, boost::container::avl_tree, OptimizeSize>
+{
+ typedef typename container_detail::bi::make_avl_set_base_hook
+ < container_detail::bi::void_pointer<VoidPointer>
+ , container_detail::bi::link_mode<container_detail::bi::normal_link>
+ , container_detail::bi::optimize_size<OptimizeSize>
+ >::type type;
+};
+
+template<class VoidPointer, bool OptimizeSize>
+struct intrusive_tree_hook<VoidPointer, boost::container::scapegoat_tree, OptimizeSize>
+{
+ typedef typename container_detail::bi::make_bs_set_base_hook
+ < container_detail::bi::void_pointer<VoidPointer>
+ , container_detail::bi::link_mode<container_detail::bi::normal_link>
+ >::type type;
+};
+
+template<class VoidPointer, bool OptimizeSize>
+struct intrusive_tree_hook<VoidPointer, boost::container::splay_tree, OptimizeSize>
+{
+ typedef typename container_detail::bi::make_bs_set_base_hook
+ < container_detail::bi::void_pointer<VoidPointer>
+ , container_detail::bi::link_mode<container_detail::bi::normal_link>
>::type type;
};
//This trait is used to type-pun std::pair because in C++03
//compilers std::pair is useless for C++11 features
template<class T>
-struct rbtree_internal_data_type
+struct tree_internal_data_type
{
typedef T type;
};
template<class T1, class T2>
-struct rbtree_internal_data_type< std::pair<T1, T2> >
+struct tree_internal_data_type< std::pair<T1, T2> >
{
typedef pair<T1, T2> type;
};
-
//The node to be store in the tree
-template <class T, class VoidPointer>
-struct rbtree_node
- : public rbtree_hook<VoidPointer>::type
+template <class T, class VoidPointer, boost::container::tree_type_enum tree_type_value, bool OptimizeSize>
+struct tree_node
+ : public intrusive_tree_hook<VoidPointer, tree_type_value, OptimizeSize>::type
{
private:
- //BOOST_COPYABLE_AND_MOVABLE(rbtree_node)
- rbtree_node();
+ //BOOST_COPYABLE_AND_MOVABLE(tree_node)
+ tree_node();
public:
- typedef typename rbtree_hook<VoidPointer>::type hook_type;
-
+ typedef typename intrusive_tree_hook
+ <VoidPointer, tree_type_value, OptimizeSize>::type hook_type;
typedef T value_type;
- typedef typename rbtree_internal_data_type<T>::type internal_type;
+ typedef typename tree_internal_data_type<T>::type internal_type;
- typedef rbtree_node<T, VoidPointer> node_type;
+ typedef tree_node< T, VoidPointer
+ , tree_type_value, OptimizeSize> node_type;
T &get_data()
{
@@ -174,56 +216,256 @@ struct rbtree_node
{ m_data = ::boost::move(v); }
};
+template<class Node, class Icont>
+class insert_equal_end_hint_functor
+{
+ Icont &icont_;
+
+ public:
+ insert_equal_end_hint_functor(Icont &icont)
+ : icont_(icont)
+ {}
+
+ void operator()(Node &n)
+ { this->icont_.insert_equal(this->icont_.cend(), n); }
+};
+
+template<class Node, class Icont>
+class push_back_functor
+{
+ Icont &icont_;
+
+ public:
+ push_back_functor(Icont &icont)
+ : icont_(icont)
+ {}
+
+ void operator()(Node &n)
+ { this->icont_.push_back(n); }
+};
+
}//namespace container_detail {
namespace container_detail {
-template<class A, class ValueCompare>
-struct intrusive_rbtree_type
+template< class NodeType, class NodeCompareType
+ , class SizeType, class HookType
+ , boost::container::tree_type_enum tree_type_value>
+struct intrusive_tree_dispatch;
+
+template<class NodeType, class NodeCompareType, class SizeType, class HookType>
+struct intrusive_tree_dispatch
+ <NodeType, NodeCompareType, SizeType, HookType, boost::container::red_black_tree>
+{
+ typedef typename container_detail::bi::make_rbtree
+ <NodeType
+ ,container_detail::bi::compare<NodeCompareType>
+ ,container_detail::bi::base_hook<HookType>
+ ,container_detail::bi::constant_time_size<true>
+ ,container_detail::bi::size_type<SizeType>
+ >::type type;
+};
+
+template<class NodeType, class NodeCompareType, class SizeType, class HookType>
+struct intrusive_tree_dispatch
+ <NodeType, NodeCompareType, SizeType, HookType, boost::container::avl_tree>
+{
+ typedef typename container_detail::bi::make_avltree
+ <NodeType
+ ,container_detail::bi::compare<NodeCompareType>
+ ,container_detail::bi::base_hook<HookType>
+ ,container_detail::bi::constant_time_size<true>
+ ,container_detail::bi::size_type<SizeType>
+ >::type type;
+};
+
+template<class NodeType, class NodeCompareType, class SizeType, class HookType>
+struct intrusive_tree_dispatch
+ <NodeType, NodeCompareType, SizeType, HookType, boost::container::scapegoat_tree>
+{
+ typedef typename container_detail::bi::make_sgtree
+ <NodeType
+ ,container_detail::bi::compare<NodeCompareType>
+ ,container_detail::bi::base_hook<HookType>
+ ,container_detail::bi::floating_point<true>
+ ,container_detail::bi::size_type<SizeType>
+ >::type type;
+};
+
+template<class NodeType, class NodeCompareType, class SizeType, class HookType>
+struct intrusive_tree_dispatch
+ <NodeType, NodeCompareType, SizeType, HookType, boost::container::splay_tree>
+{
+ typedef typename container_detail::bi::make_splaytree
+ <NodeType
+ ,container_detail::bi::compare<NodeCompareType>
+ ,container_detail::bi::base_hook<HookType>
+ ,container_detail::bi::constant_time_size<true>
+ ,container_detail::bi::size_type<SizeType>
+ >::type type;
+};
+
+template<class A, class ValueCompare, boost::container::tree_type_enum tree_type_value, bool OptimizeSize>
+struct intrusive_tree_type
{
+ private:
typedef typename boost::container::
allocator_traits<A>::value_type value_type;
typedef typename boost::container::
allocator_traits<A>::void_pointer void_pointer;
typedef typename boost::container::
allocator_traits<A>::size_type size_type;
- typedef typename container_detail::rbtree_node
- <value_type, void_pointer> node_type;
+ typedef typename container_detail::tree_node
+ < value_type, void_pointer
+ , tree_type_value, OptimizeSize> node_type;
typedef node_compare<ValueCompare, node_type> node_compare_type;
- typedef typename container_detail::bi::make_rbtree
- <node_type
- ,container_detail::bi::compare<node_compare_type>
- ,container_detail::bi::base_hook<typename rbtree_hook<void_pointer>::type>
- ,container_detail::bi::constant_time_size<true>
- ,container_detail::bi::size_type<size_type>
- >::type container_type;
- typedef container_type type ;
+ //Deducing the hook type from node_type (e.g. node_type::hook_type) would
+ //provoke an early instantiation of node_type that could ruin recursive
+ //tree definitions, so retype the complete type to avoid any problem.
+ typedef typename intrusive_tree_hook
+ <void_pointer, tree_type_value
+ , OptimizeSize>::type hook_type;
+ public:
+ typedef typename intrusive_tree_dispatch
+ < node_type, node_compare_type
+ , size_type, hook_type
+ , tree_type_value>::type type;
+};
+
+//Trait to detect manually rebalanceable tree types
+template<boost::container::tree_type_enum tree_type_value>
+struct is_manually_balanceable
+{ static const bool value = true; };
+
+template<> struct is_manually_balanceable<red_black_tree>
+{ static const bool value = false; };
+
+template<> struct is_manually_balanceable<avl_tree>
+{ static const bool value = false; };
+
+//Proxy traits to implement different operations depending on the
+//is_manually_balanceable<>::value
+template< boost::container::tree_type_enum tree_type_value
+ , bool IsManuallyRebalanceable = is_manually_balanceable<tree_type_value>::value>
+struct intrusive_tree_proxy
+{
+ template<class Icont>
+ static void rebalance(Icont &) {}
+};
+
+template<boost::container::tree_type_enum tree_type_value>
+struct intrusive_tree_proxy<tree_type_value, true>
+{
+ template<class Icont>
+ static void rebalance(Icont &c)
+ { c.rebalance(); }
};
} //namespace container_detail {
namespace container_detail {
+//This functor will be used with Intrusive clone functions to obtain
+//already allocated nodes from a intrusive container instead of
+//allocating new ones. When the intrusive container runs out of nodes
+//the node holder is used instead.
+template<class AllocHolder, bool DoMove>
+class RecyclingCloner
+{
+ typedef typename AllocHolder::intrusive_container intrusive_container;
+ typedef typename AllocHolder::Node node_type;
+ typedef typename AllocHolder::NodePtr node_ptr_type;
+
+ public:
+ RecyclingCloner(AllocHolder &holder, intrusive_container &itree)
+ : m_holder(holder), m_icont(itree)
+ {}
+
+ static void do_assign(node_ptr_type &p, const node_type &other, bool_<true>)
+ { p->do_assign(other.m_data); }
+
+ static void do_assign(node_ptr_type &p, const node_type &other, bool_<false>)
+ { p->do_move_assign(const_cast<node_type &>(other).m_data); }
+
+ node_ptr_type operator()(const node_type &other) const
+ {
+ if(node_ptr_type p = m_icont.unlink_leftmost_without_rebalance()){
+ //First recycle a node (this can't throw)
+ BOOST_TRY{
+ //This can throw
+ this->do_assign(p, other, bool_<DoMove>());
+ return p;
+ }
+ BOOST_CATCH(...){
+ //If there is an exception destroy the whole source
+ m_holder.destroy_node(p);
+ while((p = m_icont.unlink_leftmost_without_rebalance())){
+ m_holder.destroy_node(p);
+ }
+ BOOST_RETHROW
+ }
+ BOOST_CATCH_END
+ }
+ else{
+ return m_holder.create_node(other.m_data);
+ }
+ }
+
+ AllocHolder &m_holder;
+ intrusive_container &m_icont;
+};
+
+template<class KeyValueCompare, class Node>
+//where KeyValueCompare is tree_value_compare<Key, Value, KeyCompare, KeyOfValue>
+struct key_node_compare
+ : private KeyValueCompare
+{
+ explicit key_node_compare(const KeyValueCompare &comp)
+ : KeyValueCompare(comp)
+ {}
+
+ template<class T>
+ struct is_node
+ {
+ static const bool value = is_same<T, Node>::value;
+ };
+
+ template<class T>
+ typename enable_if_c<is_node<T>::value, const typename KeyValueCompare::value_type &>::type
+ key_forward(const T &node) const
+ { return node.get_data(); }
+
+ template<class T>
+ typename enable_if_c<!is_node<T>::value, const T &>::type
+ key_forward(const T &key) const
+ { return key; }
+
+ template<class KeyType, class KeyType2>
+ bool operator()(const KeyType &key1, const KeyType2 &key2) const
+ { return KeyValueCompare::operator()(this->key_forward(key1), this->key_forward(key2)); }
+};
+
template <class Key, class Value, class KeyOfValue,
- class KeyCompare, class A>
-class rbtree
+ class KeyCompare, class A,
+ class Options = tree_assoc_defaults>
+class tree
: protected container_detail::node_alloc_holder
< A
- , typename container_detail::intrusive_rbtree_type
- <A, tree_value_compare<Key, Value, KeyCompare, KeyOfValue>
- >::type
- , KeyCompare
+ , typename container_detail::intrusive_tree_type
+ < A, tree_value_compare<Key, Value, KeyCompare, KeyOfValue> //ValComp
+ , Options::tree_type, Options::optimize_size>::type
>
{
- typedef typename container_detail::intrusive_rbtree_type
- < A, tree_value_compare
- <Key, Value, KeyCompare, KeyOfValue>
- >::type Icont;
- typedef container_detail::node_alloc_holder
- <A, Icont, KeyCompare> AllocHolder;
+ typedef tree_value_compare
+ <Key, Value, KeyCompare, KeyOfValue> ValComp;
+ typedef typename container_detail::intrusive_tree_type
+ < A, ValComp, Options::tree_type
+ , Options::optimize_size>::type Icont;
+ typedef container_detail::node_alloc_holder
+ <A, Icont> AllocHolder;
typedef typename AllocHolder::NodePtr NodePtr;
- typedef rbtree < Key, Value, KeyOfValue
- , KeyCompare, A> ThisType;
+ typedef tree < Key, Value, KeyOfValue
+ , KeyCompare, A, Options> ThisType;
typedef typename AllocHolder::NodeAlloc NodeAlloc;
typedef typename AllocHolder::ValAlloc ValAlloc;
typedef typename AllocHolder::Node Node;
@@ -233,84 +475,9 @@ class rbtree
typedef typename AllocHolder::allocator_v1 allocator_v1;
typedef typename AllocHolder::allocator_v2 allocator_v2;
typedef typename AllocHolder::alloc_version alloc_version;
+ typedef intrusive_tree_proxy<Options::tree_type> intrusive_tree_proxy_t;
- class RecyclingCloner;
- friend class RecyclingCloner;
-
- class RecyclingCloner
- {
- public:
- RecyclingCloner(AllocHolder &holder, Icont &irbtree)
- : m_holder(holder), m_icont(irbtree)
- {}
-
- NodePtr operator()(const Node &other) const
- {
- if(NodePtr p = m_icont.unlink_leftmost_without_rebalance()){
- //First recycle a node (this can't throw)
- BOOST_TRY{
- //This can throw
- p->do_assign(other.m_data);
- return p;
- }
- BOOST_CATCH(...){
- //If there is an exception destroy the whole source
- m_holder.destroy_node(p);
- while((p = m_icont.unlink_leftmost_without_rebalance())){
- m_holder.destroy_node(p);
- }
- BOOST_RETHROW
- }
- BOOST_CATCH_END
- }
- else{
- return m_holder.create_node(other.m_data);
- }
- }
-
- AllocHolder &m_holder;
- Icont &m_icont;
- };
-
- class RecyclingMoveCloner;
- friend class RecyclingMoveCloner;
-
- class RecyclingMoveCloner
- {
- public:
- RecyclingMoveCloner(AllocHolder &holder, Icont &irbtree)
- : m_holder(holder), m_icont(irbtree)
- {}
-
- NodePtr operator()(const Node &other) const
- {
- if(NodePtr p = m_icont.unlink_leftmost_without_rebalance()){
- //First recycle a node (this can't throw)
- BOOST_TRY{
- //This can throw
- p->do_move_assign(const_cast<Node &>(other).m_data);
- return p;
- }
- BOOST_CATCH(...){
- //If there is an exception destroy the whole source
- m_holder.destroy_node(p);
- while((p = m_icont.unlink_leftmost_without_rebalance())){
- m_holder.destroy_node(p);
- }
- BOOST_RETHROW
- }
- BOOST_CATCH_END
- }
- else{
- return m_holder.create_node(other.m_data);
- }
- }
-
- AllocHolder &m_holder;
- Icont &m_icont;
- };
-
- BOOST_COPYABLE_AND_MOVABLE(rbtree)
+ BOOST_COPYABLE_AND_MOVABLE(tree)
public:
@@ -318,8 +485,7 @@ class rbtree
typedef Value value_type;
typedef A allocator_type;
typedef KeyCompare key_compare;
- typedef tree_value_compare< Key, Value
- , KeyCompare, KeyOfValue> value_compare;
+ typedef ValComp value_compare;
typedef typename boost::container::
allocator_traits<A>::pointer pointer;
typedef typename boost::container::
@@ -332,154 +498,37 @@ class rbtree
allocator_traits<A>::size_type size_type;
typedef typename boost::container::
allocator_traits<A>::difference_type difference_type;
- typedef difference_type rbtree_difference_type;
- typedef pointer rbtree_pointer;
- typedef const_pointer rbtree_const_pointer;
- typedef reference rbtree_reference;
- typedef const_reference rbtree_const_reference;
+ typedef difference_type tree_difference_type;
+ typedef pointer tree_pointer;
+ typedef const_pointer tree_const_pointer;
+ typedef reference tree_reference;
+ typedef const_reference tree_const_reference;
typedef NodeAlloc stored_allocator_type;
private:
- template<class KeyValueCompare>
- struct key_node_compare
- : private KeyValueCompare
- {
- key_node_compare(const KeyValueCompare &comp)
- : KeyValueCompare(comp)
- {}
-
- template<class T>
- struct is_node
- {
- static const bool value = is_same<T, Node>::value;
- };
-
- template<class T>
- typename enable_if_c<is_node<T>::value, const value_type &>::type
- key_forward(const T &node) const
- { return node.get_data(); }
-
- template<class T>
- typename enable_if_c<!is_node<T>::value, const T &>::type
- key_forward(const T &key) const
- { return key; }
-
- template<class KeyType, class KeyType2>
- bool operator()(const KeyType &key1, const KeyType2 &key2) const
- { return KeyValueCompare::operator()(this->key_forward(key1), this->key_forward(key2)); }
- };
-
- typedef key_node_compare<value_compare> KeyNodeCompare;
+ typedef key_node_compare<value_compare, Node> KeyNodeCompare;
public:
- //rbtree const_iterator
- class const_iterator
- : public std::iterator
- < std::bidirectional_iterator_tag
- , value_type , rbtree_difference_type
- , rbtree_const_pointer , rbtree_const_reference>
- {
- protected:
- typedef typename Icont::iterator iiterator;
- iiterator m_it;
- explicit const_iterator(iiterator it) : m_it(it){}
- void prot_incr() { ++m_it; }
- void prot_decr() { --m_it; }
-
- private:
- iiterator get()
- { return this->m_it; }
-
- public:
- friend class rbtree <Key, Value, KeyOfValue, KeyCompare, A>;
- typedef rbtree_difference_type difference_type;
-
- //Constructors
- const_iterator()
- : m_it()
- {}
-
- //Pointer like operators
- const_reference operator*() const
- { return m_it->get_data(); }
-
- const_pointer operator->() const
- { return const_pointer(&m_it->get_data()); }
-
- //Increment / Decrement
- const_iterator& operator++()
- { prot_incr(); return *this; }
-
- const_iterator operator++(int)
- { iiterator tmp = m_it; ++*this; return const_iterator(tmp); }
-
- const_iterator& operator--()
- { prot_decr(); return *this; }
-
- const_iterator operator--(int)
- { iiterator 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; }
- };
-
- //rbtree iterator
- class iterator : public const_iterator
- {
- private:
- explicit iterator(iiterator it)
- : const_iterator(it)
- {}
-
- iiterator get()
- { return this->m_it; }
-
- public:
- friend class rbtree <Key, Value, KeyOfValue, KeyCompare, A>;
- typedef rbtree_pointer pointer;
- typedef rbtree_reference reference;
-
- //Constructors
- iterator(){}
-
- //Pointer like operators
- reference operator*() const
- { return this->m_it->get_data(); }
- pointer operator->() const
- { return boost::intrusive::pointer_traits<pointer>::pointer_to(this->m_it->get_data()); }
-
- //Increment / Decrement
- iterator& operator++()
- { this->prot_incr(); return *this; }
-
- iterator operator++(int)
- { iiterator tmp = this->m_it; ++*this; return iterator(tmp); }
-
- iterator& operator--()
- { this->prot_decr(); return *this; }
-
- iterator operator--(int)
- { iterator tmp = *this; --*this; return tmp; }
- };
-
+ typedef container_detail::iterator<iiterator, false> iterator;
+ typedef container_detail::iterator<iiterator, true > const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- rbtree()
- : AllocHolder(key_compare())
+ tree()
+ : AllocHolder(ValComp(key_compare()))
+ {}
+
+ explicit tree(const key_compare& comp, const allocator_type& a = allocator_type())
+ : AllocHolder(a, ValComp(comp))
{}
- rbtree(const key_compare& comp, const allocator_type& a = allocator_type())
- : AllocHolder(a, comp)
+ explicit tree(const allocator_type& a)
+ : AllocHolder(a)
{}
template <class InputIterator>
- rbtree(bool unique_insertion, InputIterator first, InputIterator last, const key_compare& comp,
+ tree(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
@@ -488,18 +537,26 @@ class rbtree
>::type * = 0
#endif
)
- : AllocHolder(a, comp)
+ : AllocHolder(a, value_compare(comp))
{
+ //Use cend() as hint to achieve linear time for
+ //ordered ranges as required by the standard
+ //for the constructor
+ const const_iterator end_it(this->cend());
if(unique_insertion){
- this->insert_unique(first, last);
+ for ( ; first != last; ++first){
+ this->insert_unique(end_it, *first);
+ }
}
else{
- this->insert_equal(first, last);
+ for ( ; first != last; ++first){
+ this->insert_equal(end_it, *first);
+ }
}
}
template <class InputIterator>
- rbtree(bool unique_insertion, InputIterator first, InputIterator last, const key_compare& comp,
+ tree(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
@@ -508,20 +565,27 @@ class rbtree
>::type * = 0
#endif
)
- : AllocHolder(a, comp)
+ : AllocHolder(a, value_compare(comp))
{
if(unique_insertion){
- this->insert_unique(first, last);
+ //Use cend() as hint to achieve linear time for
+ //ordered ranges as required by the standard
+ //for the constructor
+ const const_iterator end_it(this->cend());
+ for ( ; first != last; ++first){
+ this->insert_unique(end_it, *first);
+ }
}
else{
//Optimized allocation and construction
this->allocate_many_and_construct
- (first, std::distance(first, last), insert_equal_end_hint_functor(this->icont()));
+ ( first, std::distance(first, last)
+ , insert_equal_end_hint_functor<Node, Icont>(this->icont()));
}
}
template <class InputIterator>
- rbtree( ordered_range_t, InputIterator first, InputIterator last
+ tree( 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
@@ -530,13 +594,15 @@ class rbtree
>::type * = 0
#endif
)
- : AllocHolder(a, comp)
+ : AllocHolder(a, value_compare(comp))
{
- this->insert_equal(first, last);
+ for ( ; first != last; ++first){
+ this->push_back_impl(*first);
+ }
}
template <class InputIterator>
- rbtree( ordered_range_t, InputIterator first, InputIterator last
+ tree( 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
@@ -545,33 +611,34 @@ class rbtree
>::type * = 0
#endif
)
- : AllocHolder(a, comp)
+ : AllocHolder(a, value_compare(comp))
{
//Optimized allocation and construction
this->allocate_many_and_construct
- (first, std::distance(first, last), push_back_functor(this->icont()));
+ ( first, std::distance(first, last)
+ , container_detail::push_back_functor<Node, Icont>(this->icont()));
}
- rbtree(const rbtree& x)
- : AllocHolder(x, x.key_comp())
+ tree(const tree& x)
+ : AllocHolder(x, x.value_comp())
{
this->icont().clone_from
(x.icont(), typename AllocHolder::cloner(*this), Destroyer(this->node_alloc()));
}
- rbtree(BOOST_RV_REF(rbtree) x)
- : AllocHolder(::boost::move(static_cast<AllocHolder&>(x)), x.key_comp())
+ tree(BOOST_RV_REF(tree) x)
+ : AllocHolder(::boost::move(static_cast<AllocHolder&>(x)), x.value_comp())
{}
- rbtree(const rbtree& x, const allocator_type &a)
- : AllocHolder(a, x.key_comp())
+ tree(const tree& x, const allocator_type &a)
+ : AllocHolder(a, x.value_comp())
{
this->icont().clone_from
(x.icont(), typename AllocHolder::cloner(*this), Destroyer(this->node_alloc()));
}
- rbtree(BOOST_RV_REF(rbtree) x, const allocator_type &a)
- : AllocHolder(a, x.key_comp())
+ tree(BOOST_RV_REF(tree) x, const allocator_type &a)
+ : AllocHolder(a, x.value_comp())
{
if(this->node_alloc() == x.node_alloc()){
this->icont().swap(x.icont());
@@ -582,10 +649,10 @@ class rbtree
}
}
- ~rbtree()
+ ~tree()
{} //AllocHolder clears the tree
- rbtree& operator=(BOOST_COPY_ASSIGN_REF(rbtree) x)
+ tree& operator=(BOOST_COPY_ASSIGN_REF(tree) x)
{
if (&x != this){
NodeAlloc &this_alloc = this->get_stored_allocator();
@@ -604,7 +671,7 @@ class rbtree
//Now recreate the source tree reusing nodes stored by other_tree
this->icont().clone_from
(x.icont()
- , RecyclingCloner(*this, other_tree)
+ , RecyclingCloner<AllocHolder, false>(*this, other_tree)
, Destroyer(this->node_alloc()));
//If there are remaining nodes, destroy them
@@ -616,43 +683,47 @@ class rbtree
return *this;
}
- rbtree& operator=(BOOST_RV_REF(rbtree) x)
+ tree& operator=(BOOST_RV_REF(tree) 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{
- //Transfer all the nodes to a temporary tree
- //If anything goes wrong, all the nodes will be destroyed
- //automatically
- Icont other_tree(::boost::move(this->icont()));
-
- //Now recreate the source tree reusing nodes stored by other_tree
- this->icont().clone_from
- (x.icont()
- , RecyclingMoveCloner(*this, other_tree)
- , Destroyer(this->node_alloc()));
-
- //If there are remaining nodes, destroy them
- NodePtr p;
- while((p = other_tree.unlink_leftmost_without_rebalance())){
- AllocHolder::destroy_node(p);
- }
+ BOOST_ASSERT(this != &x);
+ NodeAlloc &this_alloc = this->node_alloc();
+ NodeAlloc &x_alloc = x.node_alloc();
+ const bool propagate_alloc = allocator_traits<NodeAlloc>::
+ propagate_on_container_move_assignment::value;
+ const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
+ //Resources can be transferred if both allocators are
+ //going to be equal after this function (either propagated or already equal)
+ if(propagate_alloc || allocators_equal){
+ //Destroy
+ this->clear();
+ //Move allocator if needed
+ this->AllocHolder::move_assign_alloc(x);
+ //Obtain resources
+ this->icont() = boost::move(x.icont());
+ }
+ //Else do a one by one move
+ else{
+ //Transfer all the nodes to a temporary tree
+ //If anything goes wrong, all the nodes will be destroyed
+ //automatically
+ Icont other_tree(::boost::move(this->icont()));
+
+ //Now recreate the source tree reusing nodes stored by other_tree
+ this->icont().clone_from
+ (x.icont()
+ , RecyclingCloner<AllocHolder, true>(*this, other_tree)
+ , Destroyer(this->node_alloc()));
+
+ //If there are remaining nodes, destroy them
+ NodePtr p;
+ while((p = other_tree.unlink_leftmost_without_rebalance())){
+ AllocHolder::destroy_node(p);
}
}
return *this;
}
- public:
+ public:
// accessors:
value_compare value_comp() const
{ return this->icont().value_comp().value_comp(); }
@@ -763,8 +834,10 @@ class rbtree
iterator insert_unique_commit(const value_type& v, insert_commit_data &data)
{
NodePtr tmp = AllocHolder::create_node(v);
- iiterator it(this->icont().insert_unique_commit(*tmp, data));
- return iterator(it);
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc());
+ iterator ret(this->icont().insert_unique_commit(*tmp, data));
+ destroy_deallocator.release();
+ return ret;
}
template<class MovableConvertible>
@@ -772,8 +845,10 @@ class rbtree
(BOOST_FWD_REF(MovableConvertible) mv, insert_commit_data &data)
{
NodePtr tmp = AllocHolder::create_node(boost::forward<MovableConvertible>(mv));
- iiterator it(this->icont().insert_unique_commit(*tmp, data));
- return iterator(it);
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc());
+ iterator ret(this->icont().insert_unique_commit(*tmp, data));
+ destroy_deallocator.release();
+ return ret;
}
std::pair<iterator,bool> insert_unique(const value_type& v)
@@ -781,10 +856,10 @@ class rbtree
insert_commit_data data;
std::pair<iterator,bool> ret =
this->insert_unique_check(KeyOfValue()(v), data);
- if(!ret.second)
- return ret;
- return std::pair<iterator,bool>
- (this->insert_unique_commit(v, data), true);
+ if(ret.second){
+ ret.first = this->insert_unique_commit(v, data);
+ }
+ return ret;
}
template<class MovableConvertible>
@@ -793,13 +868,22 @@ class rbtree
insert_commit_data data;
std::pair<iterator,bool> ret =
this->insert_unique_check(KeyOfValue()(mv), data);
- if(!ret.second)
- return ret;
- return std::pair<iterator,bool>
- (this->insert_unique_commit(boost::forward<MovableConvertible>(mv), data), true);
+ if(ret.second){
+ ret.first = this->insert_unique_commit(boost::forward<MovableConvertible>(mv), data);
+ }
+ return ret;
}
private:
+
+ template<class MovableConvertible>
+ void push_back_impl(BOOST_FWD_REF(MovableConvertible) mv)
+ {
+ NodePtr tmp(AllocHolder::create_node(boost::forward<MovableConvertible>(mv)));
+ //push_back has no-throw guarantee so avoid any deallocator/destroyer
+ this->icont().push_back(*tmp);
+ }
+
std::pair<iterator, bool> emplace_unique_impl(NodePtr p)
{
value_type &v = p->get_data();
@@ -845,15 +929,21 @@ class rbtree
template <class... Args>
iterator emplace_equal(Args&&... args)
{
- NodePtr p(AllocHolder::create_node(boost::forward<Args>(args)...));
- return iterator(this->icont().insert_equal(this->icont().end(), *p));
+ NodePtr tmp(AllocHolder::create_node(boost::forward<Args>(args)...));
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc());
+ iterator ret(this->icont().insert_equal(this->icont().end(), *tmp));
+ destroy_deallocator.release();
+ return ret;
}
template <class... Args>
iterator emplace_hint_equal(const_iterator hint, Args&&... args)
{
- NodePtr p(AllocHolder::create_node(boost::forward<Args>(args)...));
- return iterator(this->icont().insert_equal(hint.get(), *p));
+ NodePtr tmp(AllocHolder::create_node(boost::forward<Args>(args)...));
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc());
+ iterator ret(this->icont().insert_equal(hint.get(), *tmp));
+ destroy_deallocator.release();
+ return ret;
}
#else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
@@ -877,16 +967,22 @@ class rbtree
BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
iterator emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
{ \
- NodePtr p(AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \
- return iterator(this->icont().insert_equal(this->icont().end(), *p)); \
+ NodePtr tmp(AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc()); \
+ iterator ret(this->icont().insert_equal(this->icont().end(), *tmp)); \
+ destroy_deallocator.release(); \
+ return ret; \
} \
\
BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
iterator emplace_hint_equal(const_iterator hint \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
{ \
- NodePtr p(AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \
- return iterator(this->icont().insert_equal(hint.get(), *p)); \
+ NodePtr tmp(AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc()); \
+ iterator ret(this->icont().insert_equal(hint.get(), *tmp)); \
+ destroy_deallocator.release(); \
+ return ret; \
} \
//!
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
@@ -918,53 +1014,53 @@ class rbtree
template <class InputIterator>
void insert_unique(InputIterator first, InputIterator last)
{
- if(this->empty()){
- //Insert with end hint, to achieve linear
- //complexity if [first, last) is ordered
- const_iterator hint(this->cend());
- for( ; first != last; ++first)
- hint = this->insert_unique(hint, *first);
- }
- else{
- for( ; first != last; ++first)
- this->insert_unique(*first);
- }
+ for( ; first != last; ++first)
+ this->insert_unique(*first);
}
iterator insert_equal(const value_type& v)
{
- NodePtr p(AllocHolder::create_node(v));
- return iterator(this->icont().insert_equal(this->icont().end(), *p));
+ NodePtr tmp(AllocHolder::create_node(v));
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc());
+ iterator ret(this->icont().insert_equal(this->icont().end(), *tmp));
+ destroy_deallocator.release();
+ return ret;
}
template<class MovableConvertible>
iterator insert_equal(BOOST_FWD_REF(MovableConvertible) mv)
{
- NodePtr p(AllocHolder::create_node(boost::forward<MovableConvertible>(mv)));
- return iterator(this->icont().insert_equal(this->icont().end(), *p));
+ NodePtr tmp(AllocHolder::create_node(boost::forward<MovableConvertible>(mv)));
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc());
+ iterator ret(this->icont().insert_equal(this->icont().end(), *tmp));
+ destroy_deallocator.release();
+ return ret;
}
iterator insert_equal(const_iterator hint, const value_type& v)
{
- NodePtr p(AllocHolder::create_node(v));
- return iterator(this->icont().insert_equal(hint.get(), *p));
+ NodePtr tmp(AllocHolder::create_node(v));
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc());
+ iterator ret(this->icont().insert_equal(hint.get(), *tmp));
+ destroy_deallocator.release();
+ return ret;
}
template<class MovableConvertible>
iterator insert_equal(const_iterator hint, BOOST_FWD_REF(MovableConvertible) mv)
{
- NodePtr p(AllocHolder::create_node(boost::forward<MovableConvertible>(mv)));
- return iterator(this->icont().insert_equal(hint.get(), *p));
+ NodePtr tmp(AllocHolder::create_node(boost::forward<MovableConvertible>(mv)));
+ scoped_destroy_deallocator<NodeAlloc> destroy_deallocator(tmp, this->node_alloc());
+ iterator ret(this->icont().insert_equal(hint.get(), *tmp));
+ destroy_deallocator.release();
+ return ret;
}
template <class InputIterator>
void insert_equal(InputIterator first, InputIterator last)
{
- //Insert with end hint, to achieve linear
- //complexity if [first, last) is ordered
- const_iterator hint(this->cend());
for( ; first != last; ++first)
- hint = this->insert_equal(hint, *first);
+ this->insert_equal(*first);
}
iterator erase(const_iterator position)
@@ -979,7 +1075,8 @@ class rbtree
void clear()
{ AllocHolder::clear(alloc_version()); }
- // set operations:
+ // search operations. Const and non-const overloads even if no iterator is returned
+ // so splay implementations can to their rebalancing when searching in non-const versions
iterator find(const key_type& k)
{ return iterator(this->icont().find(k, KeyNodeCompare(value_comp()))); }
@@ -1016,103 +1113,45 @@ class rbtree
(const_iterator(ret.first), const_iterator(ret.second));
}
- private:
-
- class insert_equal_end_hint_functor;
- friend class insert_equal_end_hint_functor;
-
- class insert_equal_end_hint_functor
+ std::pair<iterator,iterator> lower_bound_range(const key_type& k)
{
- Icont &icont_;
- const iconst_iterator cend_;
-
- public:
- insert_equal_end_hint_functor(Icont &icont)
- : icont_(icont), cend_(this->icont_.cend())
- {}
-
- void operator()(Node &n)
- { this->icont_.insert_equal(cend_, n); }
- };
-
- class push_back_functor;
- friend class push_back_functor;
+ std::pair<iiterator, iiterator> ret =
+ this->icont().lower_bound_range(k, KeyNodeCompare(value_comp()));
+ return std::pair<iterator,iterator>(iterator(ret.first), iterator(ret.second));
+ }
- class push_back_functor
+ std::pair<const_iterator, const_iterator> lower_bound_range(const key_type& k) const
{
- Icont &icont_;
-
- public:
- push_back_functor(Icont &icont)
- : icont_(icont)
- {}
-
- void operator()(Node &n)
- { this->icont_.push_back(n); }
- };
-};
+ std::pair<iiterator, iiterator> ret =
+ this->non_const_icont().lower_bound_range(k, KeyNodeCompare(value_comp()));
+ return std::pair<const_iterator,const_iterator>
+ (const_iterator(ret.first), const_iterator(ret.second));
+ }
-template <class Key, class Value, class KeyOfValue,
- class KeyCompare, class A>
-inline bool
-operator==(const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& x,
- const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& y)
-{
- return x.size() == y.size() &&
- std::equal(x.begin(), x.end(), y.begin());
-}
+ void rebalance()
+ { intrusive_tree_proxy_t::rebalance(this->icont()); }
-template <class Key, class Value, class KeyOfValue,
- class KeyCompare, class A>
-inline bool
-operator<(const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& x,
- const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& y)
-{
- return std::lexicographical_compare(x.begin(), x.end(),
- y.begin(), y.end());
-}
+ friend bool operator==(const tree& x, const tree& y)
+ { return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin()); }
-template <class Key, class Value, class KeyOfValue,
- class KeyCompare, class A>
-inline bool
-operator!=(const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& x,
- const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& y) {
- return !(x == y);
-}
+ friend bool operator<(const tree& x, const tree& y)
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
-template <class Key, class Value, class KeyOfValue,
- class KeyCompare, class A>
-inline bool
-operator>(const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& x,
- const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& y) {
- return y < x;
-}
+ friend bool operator!=(const tree& x, const tree& y)
+ { return !(x == y); }
-template <class Key, class Value, class KeyOfValue,
- class KeyCompare, class A>
-inline bool
-operator<=(const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& x,
- const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& y) {
- return !(y < x);
-}
+ friend bool operator>(const tree& x, const tree& y)
+ { return y < x; }
-template <class Key, class Value, class KeyOfValue,
- class KeyCompare, class A>
-inline bool
-operator>=(const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& x,
- const rbtree<Key,Value,KeyOfValue,KeyCompare,A>& y) {
- return !(x < y);
-}
+ friend bool operator<=(const tree& x, const tree& y)
+ { return !(y < x); }
+ friend bool operator>=(const tree& x, const tree& y)
+ { return !(x < y); }
-template <class Key, class Value, class KeyOfValue,
- class KeyCompare, class A>
-inline void
-swap(rbtree<Key,Value,KeyOfValue,KeyCompare,A>& x,
- rbtree<Key,Value,KeyOfValue,KeyCompare,A>& y)
-{
- x.swap(y);
-}
+ friend void swap(tree& x, tree& y)
+ { x.swap(y); }
+};
} //namespace container_detail {
} //namespace container {
@@ -1122,7 +1161,7 @@ swap(rbtree<Key,Value,KeyOfValue,KeyCompare,A>& x,
template <class K, class V, class KOV,
class C, class A>
struct has_trivial_destructor_after_move
- <boost::container::container_detail::rbtree<K, V, KOV, C, A> >
+ <boost::container::container_detail::tree<K, V, KOV, C, A> >
{
static const bool value = has_trivial_destructor_after_move<A>::value && has_trivial_destructor_after_move<C>::value;
};
diff --git a/3party/boost/boost/container/detail/type_traits.hpp b/3party/boost/boost/container/detail/type_traits.hpp
index 5020ee9fcc..6f20bd5244 100644
--- a/3party/boost/boost/container/detail/type_traits.hpp
+++ b/3party/boost/boost/container/detail/type_traits.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
// (C) Copyright John Maddock 2000.
-// (C) Copyright Ion Gaztanaga 2005-2012.
+// (C) Copyright Ion Gaztanaga 2005-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,11 +15,12 @@
#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_TYPE_TRAITS_HPP
#define BOOST_CONTAINER_CONTAINER_DETAIL_TYPE_TRAITS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
#include <boost/move/utility.hpp>
diff --git a/3party/boost/boost/container/detail/utilities.hpp b/3party/boost/boost/container/detail/utilities.hpp
index 81e0ed8f42..5aca542b26 100644
--- a/3party/boost/boost/container/detail/utilities.hpp
+++ b/3party/boost/boost/container/detail/utilities.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,25 +11,34 @@
#ifndef BOOST_CONTAINER_DETAIL_UTILITIES_HPP
#define BOOST_CONTAINER_DETAIL_UTILITIES_HPP
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
#include <cstdio>
-#include <cstring> //for ::memcpy
+#include <cstring> //for ::memmove / ::memcpy
#include <boost/type_traits/is_fundamental.hpp>
#include <boost/type_traits/is_pointer.hpp>
#include <boost/type_traits/is_enum.hpp>
#include <boost/type_traits/is_member_pointer.hpp>
#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/type_traits/is_pointer.hpp>
#include <boost/type_traits/has_trivial_destructor.hpp>
+#include <boost/type_traits/has_trivial_copy.hpp>
+#include <boost/type_traits/has_trivial_assign.hpp>
+#include <boost/type_traits/is_pod.hpp>
#include <boost/move/core.hpp>
#include <boost/move/utility.hpp>
#include <boost/move/iterator.hpp>
+#include <boost/assert.hpp>
+#include <boost/container/throw_exception.hpp>
#include <boost/container/detail/mpl.hpp>
#include <boost/container/detail/type_traits.hpp>
#include <boost/container/allocator_traits.hpp>
#include <boost/detail/no_exceptions_support.hpp>
-#include <boost/type_traits/has_trivial_copy.hpp>
-#include <boost/type_traits/has_trivial_assign.hpp>
#include <boost/container/detail/memory_util.hpp>
+#include <boost/intrusive/pointer_traits.hpp>
#include <boost/aligned_storage.hpp>
#include <algorithm>
#include <iterator>
@@ -108,35 +117,73 @@ template<class T>
const T &min_value(const T &a, const T &b)
{ return a < b ? a : b; }
-template <class SizeType>
-SizeType
- get_next_capacity(const SizeType max_size
- ,const SizeType capacity
- ,const SizeType n)
-{
-// if (n > max_size - capacity)
-// throw std::length_error("get_next_capacity");
+enum NextCapacityOption { NextCapacityDouble, NextCapacity60Percent };
- const SizeType m3 = max_size/3;
+template<class SizeType, NextCapacityOption Option>
+struct next_capacity_calculator;
- if (capacity < m3)
- return capacity + max_value(3*(capacity+1)/5, n);
+template<class SizeType>
+struct next_capacity_calculator<SizeType, NextCapacityDouble>
+{
+ static SizeType get(const SizeType max_size
+ ,const SizeType capacity
+ ,const SizeType n)
+ {
+ const SizeType remaining = max_size - capacity;
+ if ( remaining < n )
+ boost::container::throw_length_error("get_next_capacity, allocator's max_size reached");
+ const SizeType additional = max_value(n, capacity);
+ return ( remaining < additional ) ? max_size : ( capacity + additional );
+ }
+};
- if (capacity < m3*2)
- return capacity + max_value((capacity+1)/2, n);
- return max_size;
-}
+template<class SizeType>
+struct next_capacity_calculator<SizeType, NextCapacity60Percent>
+{
+ static SizeType get(const SizeType max_size
+ ,const SizeType capacity
+ ,const SizeType n)
+ {
+ const SizeType remaining = max_size - capacity;
+ if ( remaining < n )
+ boost::container::throw_length_error("get_next_capacity, allocator's max_size reached");
+ const SizeType m3 = max_size/3;
+
+ if (capacity < m3)
+ return capacity + max_value(3*(capacity+1)/5, n);
+
+ if (capacity < m3*2)
+ return capacity + max_value((capacity+1)/2, n);
+ return max_size;
+ }
+};
template <class T>
inline T* to_raw_pointer(T* p)
{ return p; }
template <class Pointer>
-inline typename Pointer::element_type*
+inline typename boost::intrusive::pointer_traits<Pointer>::element_type*
to_raw_pointer(const Pointer &p)
{ return boost::container::container_detail::to_raw_pointer(p.operator->()); }
+template <class T>
+inline T* iterator_to_pointer(T* i)
+{ return i; }
+
+template <class Iterator>
+inline typename std::iterator_traits<Iterator>::pointer
+ iterator_to_pointer(const Iterator &i)
+{ return i.operator->(); }
+
+template <class Iterator>
+inline
+ typename boost::intrusive::pointer_traits
+ <typename std::iterator_traits<Iterator>::pointer>::element_type*
+ iterator_to_raw_pointer(const Iterator &i)
+{ return (to_raw_pointer)((iterator_to_pointer)(i)); }
+
template<class AllocatorType>
inline void swap_alloc(AllocatorType &, AllocatorType &, container_detail::false_type)
@@ -265,47 +312,47 @@ struct are_contiguous_and_same
};
template <typename I, typename O>
-struct is_memcpy_copy_assignable
+struct is_memtransfer_copy_assignable
{
static const bool value = are_contiguous_and_same<I, O>::value &&
boost::has_trivial_assign< typename ::std::iterator_traits<I>::value_type >::value;
};
template <typename I, typename O>
-struct is_memcpy_copy_constructible
+struct is_memtransfer_copy_constructible
{
static const bool value = are_contiguous_and_same<I, O>::value &&
boost::has_trivial_copy< typename ::std::iterator_traits<I>::value_type >::value;
};
template <typename I, typename O, typename R>
-struct enable_if_memcpy_copy_constructible
- : public enable_if_c<container_detail::is_memcpy_copy_constructible<I, O>::value, R>
+struct enable_if_memtransfer_copy_constructible
+ : public enable_if_c<container_detail::is_memtransfer_copy_constructible<I, O>::value, R>
{};
template <typename I, typename O, typename R>
-struct disable_if_memcpy_copy_constructible
- : public enable_if_c<!container_detail::is_memcpy_copy_constructible<I, O>::value, R>
+struct disable_if_memtransfer_copy_constructible
+ : public enable_if_c<!container_detail::is_memtransfer_copy_constructible<I, O>::value, R>
{};
template <typename I, typename O, typename R>
-struct enable_if_memcpy_copy_assignable
- : public enable_if_c<container_detail::is_memcpy_copy_assignable<I, O>::value, R>
+struct enable_if_memtransfer_copy_assignable
+ : public enable_if_c<container_detail::is_memtransfer_copy_assignable<I, O>::value, R>
{};
template <typename I, typename O, typename R>
-struct disable_if_memcpy_copy_assignable
- : public enable_if_c<!container_detail::is_memcpy_copy_assignable<I, O>::value, R>
+struct disable_if_memtransfer_copy_assignable
+ : public enable_if_c<!container_detail::is_memtransfer_copy_assignable<I, O>::value, R>
{};
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline F memcpy(I f, I l, F r) BOOST_CONTAINER_NOEXCEPT
+inline F memmove(I f, I l, F r) BOOST_CONTAINER_NOEXCEPT
{
typedef typename std::iterator_traits<I>::value_type value_type;
typename std::iterator_traits<I>::difference_type n = std::distance(f, l);
- ::memcpy(container_detail::addressof(*r), container_detail::addressof(*f), sizeof(value_type)*n);
+ ::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
std::advance(r, n);
return r;
}
@@ -313,10 +360,10 @@ inline F memcpy(I f, I l, F r) BOOST_CONTAINER_NOEXCEPT
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-F memcpy_n(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
+F memmove_n(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
{
typedef typename std::iterator_traits<I>::value_type value_type;
- ::memcpy(container_detail::addressof(*r), container_detail::addressof(*f), sizeof(value_type)*n);
+ ::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
std::advance(r, n);
return r;
}
@@ -324,10 +371,10 @@ F memcpy_n(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-I memcpy_n_source(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
+I memmove_n_source(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
{
typedef typename std::iterator_traits<I>::value_type value_type;
- ::memcpy(container_detail::addressof(*r), container_detail::addressof(*f), sizeof(value_type)*n);
+ ::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
std::advance(f, n);
return f;
}
@@ -335,15 +382,42 @@ I memcpy_n_source(I f, typename std::iterator_traits<I>::difference_type n, F r)
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-I memcpy_n_source_dest(I f, typename std::iterator_traits<I>::difference_type n, F &r) BOOST_CONTAINER_NOEXCEPT
+I memmove_n_source_dest(I f, typename std::iterator_traits<I>::difference_type n, F &r) BOOST_CONTAINER_NOEXCEPT
{
typedef typename std::iterator_traits<I>::value_type value_type;
- ::memcpy(container_detail::addressof(*r), container_detail::addressof(*f), sizeof(value_type)*n);
+ ::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
std::advance(f, n);
std::advance(r, n);
return f;
}
+template <typename O>
+struct is_memzero_initializable
+{
+ typedef typename ::std::iterator_traits<O>::value_type value_type;
+ static const bool value = are_elements_contiguous<O>::value &&
+ ( ::boost::is_integral<value_type>::value || ::boost::is_enum<value_type>::value
+ #if defined(BOOST_CONTAINER_MEMZEROED_POINTER_IS_NULL)
+ || ::boost::is_pointer<value_type>::value
+ #endif
+ #if defined(BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO)
+ || ::boost::is_floating_point<value_type>::value
+ #endif
+ #if defined(BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO) && defined(BOOST_CONTAINER_MEMZEROED_POINTER_IS_NULL)
+ || ::boost::is_pod<value_type>::value
+ #endif
+ );
+};
+
+template <typename O, typename R>
+struct enable_if_memzero_initializable
+ : public enable_if_c<container_detail::is_memzero_initializable<O>::value, R>
+{};
+
+template <typename O, typename R>
+struct disable_if_memzero_initializable
+ : public enable_if_c<!container_detail::is_memzero_initializable<O>::value, R>
+{};
} //namespace container_detail {
@@ -366,19 +440,19 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_constructible<I, F, F>::type
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, F>::type
uninitialized_move_alloc(A &a, I f, I l, F r)
{
F back = r;
BOOST_TRY{
while (f != l) {
- allocator_traits<A>::construct(a, container_detail::to_raw_pointer(&*r), boost::move(*f));
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(r), boost::move(*f));
++f; ++r;
}
}
BOOST_CATCH(...){
for (; back != r; ++back){
- allocator_traits<A>::destroy(a, container_detail::to_raw_pointer(&*back));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
}
BOOST_RETHROW;
}
@@ -390,9 +464,9 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_constructible<I, F, F>::type
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, F>::type
uninitialized_move_alloc(A &, I f, I l, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy(f, l, r); }
+{ return container_detail::memmove(f, l, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -411,19 +485,19 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_constructible<I, F, F>::type
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, F>::type
uninitialized_move_alloc_n(A &a, I f, typename std::iterator_traits<I>::difference_type n, F r)
{
F back = r;
BOOST_TRY{
while (n--) {
- allocator_traits<A>::construct(a, container_detail::to_raw_pointer(&*r), boost::move(*f));
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(r), boost::move(*f));
++f; ++r;
}
}
BOOST_CATCH(...){
for (; back != r; ++back){
- allocator_traits<A>::destroy(a, container_detail::to_raw_pointer(&*back));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
}
BOOST_RETHROW;
}
@@ -435,9 +509,9 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_constructible<I, F, F>::type
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, F>::type
uninitialized_move_alloc_n(A &, I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n(f, n, r); }
+{ return container_detail::memmove_n(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -456,19 +530,19 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_constructible<I, F, I>::type
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, I>::type
uninitialized_move_alloc_n_source(A &a, I f, typename std::iterator_traits<I>::difference_type n, F r)
{
F back = r;
BOOST_TRY{
while (n--) {
- allocator_traits<A>::construct(a, container_detail::to_raw_pointer(&*r), boost::move(*f));
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(r), boost::move(*f));
++f; ++r;
}
}
BOOST_CATCH(...){
for (; back != r; ++back){
- allocator_traits<A>::destroy(a, container_detail::to_raw_pointer(&*back));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
}
BOOST_RETHROW;
}
@@ -480,9 +554,9 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_constructible<I, F, I>::type
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, I>::type
uninitialized_move_alloc_n_source(A &, I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n_source(f, n, r); }
+{ return container_detail::memmove_n_source(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -501,19 +575,19 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_constructible<I, F, F>::type
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, F>::type
uninitialized_copy_alloc(A &a, I f, I l, F r)
{
F back = r;
BOOST_TRY{
while (f != l) {
- allocator_traits<A>::construct(a, container_detail::to_raw_pointer(&*r), *f);
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(r), *f);
++f; ++r;
}
}
BOOST_CATCH(...){
for (; back != r; ++back){
- allocator_traits<A>::destroy(a, container_detail::to_raw_pointer(&*back));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
}
BOOST_RETHROW;
}
@@ -525,9 +599,9 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_constructible<I, F, F>::type
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, F>::type
uninitialized_copy_alloc(A &, I f, I l, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy(f, l, r); }
+{ return container_detail::memmove(f, l, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -546,19 +620,19 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_constructible<I, F, F>::type
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, F>::type
uninitialized_copy_alloc_n(A &a, I f, typename std::iterator_traits<I>::difference_type n, F r)
{
F back = r;
BOOST_TRY{
while (n--) {
- allocator_traits<A>::construct(a, container_detail::to_raw_pointer(&*r), *f);
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(r), *f);
++f; ++r;
}
}
BOOST_CATCH(...){
for (; back != r; ++back){
- allocator_traits<A>::destroy(a, container_detail::to_raw_pointer(&*back));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
}
BOOST_RETHROW;
}
@@ -570,9 +644,9 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_constructible<I, F, F>::type
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, F>::type
uninitialized_copy_alloc_n(A &, I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n(f, n, r); }
+{ return container_detail::memmove_n(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -591,19 +665,19 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_constructible<I, F, I>::type
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, I>::type
uninitialized_copy_alloc_n_source(A &a, I f, typename std::iterator_traits<I>::difference_type n, F r)
{
F back = r;
BOOST_TRY{
while (n--) {
- allocator_traits<A>::construct(a, container_detail::to_raw_pointer(&*r), *f);
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(r), *f);
++f; ++r;
}
}
BOOST_CATCH(...){
for (; back != r; ++back){
- allocator_traits<A>::destroy(a, container_detail::to_raw_pointer(&*back));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
}
BOOST_RETHROW;
}
@@ -615,13 +689,13 @@ template
<typename A,
typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_constructible<I, F, I>::type
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, I>::type
uninitialized_copy_alloc_n_source(A &, I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n_source(f, n, r); }
+{ return container_detail::memmove_n_source(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
-// uninitialized_default_alloc_n
+// uninitialized_value_init_alloc_n
//
//////////////////////////////////////////////////////////////////////////////
@@ -635,18 +709,66 @@ inline typename container_detail::enable_if_memcpy_copy_constructible<I, F, I>::
template
<typename A,
typename F> // F models ForwardIterator
-inline F uninitialized_default_alloc_n(A &a, typename allocator_traits<A>::difference_type n, F r)
+inline typename container_detail::disable_if_memzero_initializable<F, F>::type
+ uninitialized_value_init_alloc_n(A &a, typename allocator_traits<A>::difference_type n, F r)
{
F back = r;
BOOST_TRY{
while (n--) {
- allocator_traits<A>::construct(a, container_detail::to_raw_pointer(&*r));
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(r));
++r;
}
}
BOOST_CATCH(...){
for (; back != r; ++back){
- allocator_traits<A>::destroy(a, container_detail::to_raw_pointer(&*back));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+ }
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ return r;
+}
+
+template
+ <typename A,
+ typename F> // F models ForwardIterator
+inline typename container_detail::enable_if_memzero_initializable<F, F>::type
+ uninitialized_value_init_alloc_n(A &, typename allocator_traits<A>::difference_type n, F r)
+{
+ typedef typename std::iterator_traits<F>::value_type value_type;
+ ::memset((void*)container_detail::iterator_to_raw_pointer(r), 0, sizeof(value_type)*n);
+ std::advance(r, n);
+ return r;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// uninitialized_default_init_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//! \code
+//! for (; n--; ++r, ++f)
+//! allocator_traits::construct(a, &*r);
+//! \endcode
+//!
+//! <b>Returns</b>: r
+template
+ <typename A,
+ typename F> // F models ForwardIterator
+inline F uninitialized_default_init_alloc_n(A &a, typename allocator_traits<A>::difference_type n, F r)
+{
+ F back = r;
+ BOOST_TRY{
+ while (n--) {
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(r), default_init);
+ ++r;
+ }
+ }
+ BOOST_CATCH(...){
+ for (; back != r; ++back){
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
}
BOOST_RETHROW;
}
@@ -676,13 +798,13 @@ inline void uninitialized_fill_alloc(A &a, F f, F l, const T &t)
F back = f;
BOOST_TRY{
while (f != l) {
- allocator_traits<A>::construct(a, container_detail::to_raw_pointer(&*f), t);
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(f), t);
++f;
}
}
BOOST_CATCH(...){
for (; back != l; ++back){
- allocator_traits<A>::destroy(a, container_detail::to_raw_pointer(&*back));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
}
BOOST_RETHROW;
}
@@ -712,13 +834,13 @@ inline F uninitialized_fill_alloc_n(A &a, const T &v, typename allocator_traits<
F back = r;
BOOST_TRY{
while (n--) {
- allocator_traits<A>::construct(a, container_detail::to_raw_pointer(&*r), v);
+ allocator_traits<A>::construct(a, container_detail::iterator_to_raw_pointer(r), v);
++r;
}
}
BOOST_CATCH(...){
for (; back != r; ++back){
- allocator_traits<A>::destroy(a, container_detail::to_raw_pointer(&*back));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(back));
}
BOOST_RETHROW;
}
@@ -735,7 +857,7 @@ inline F uninitialized_fill_alloc_n(A &a, const T &v, typename allocator_traits<
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, F>::type
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, F>::type
copy(I f, I l, F r)
{
while (f != l) {
@@ -748,9 +870,9 @@ inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, F>::ty
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, F>::type
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, F>::type
copy(I f, I l, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy(f, l, r); }
+{ return container_detail::memmove(f, l, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -761,7 +883,7 @@ inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, F>::typ
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, F>::type
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, F>::type
copy_n(I f, typename std::iterator_traits<I>::difference_type n, F r)
{
while (n--) {
@@ -774,9 +896,9 @@ inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, F>::ty
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, F>::type
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, F>::type
copy_n(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n(f, n, r); }
+{ return container_detail::memmove_n(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -787,7 +909,7 @@ inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, F>::typ
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, I>::type
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, I>::type
copy_n_source(I f, typename std::iterator_traits<I>::difference_type n, F r)
{
while (n--) {
@@ -800,9 +922,9 @@ inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, I>::ty
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, I>::type
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, I>::type
copy_n_source(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n_source(f, n, r); }
+{ return container_detail::memmove_n_source(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -813,7 +935,7 @@ inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, I>::typ
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, I>::type
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, I>::type
copy_n_source_dest(I f, typename std::iterator_traits<I>::difference_type n, F &r)
{
while (n--) {
@@ -826,9 +948,9 @@ inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, I>::ty
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, I>::type
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, I>::type
copy_n_source_dest(I f, typename std::iterator_traits<I>::difference_type n, F &r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n_source_dest(f, n, r); }
+{ return container_detail::memmove_n_source_dest(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -839,7 +961,7 @@ inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, I>::typ
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, F>::type
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, F>::type
move(I f, I l, F r)
{
while (f != l) {
@@ -852,9 +974,9 @@ inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, F>::ty
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, F>::type
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, F>::type
move(I f, I l, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy(f, l, r); }
+{ return container_detail::memmove(f, l, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -865,7 +987,7 @@ inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, F>::typ
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, F>::type
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, F>::type
move_n(I f, typename std::iterator_traits<I>::difference_type n, F r)
{
while (n--) {
@@ -878,9 +1000,9 @@ inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, F>::ty
template
<typename I, // I models InputIterator
typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, F>::type
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, F>::type
move_n(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n(f, n, r); }
+{ return container_detail::memmove_n(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -891,7 +1013,7 @@ inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, F>::typ
template
<typename I // I models InputIterator
,typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, I>::type
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, I>::type
move_n_source(I f, typename std::iterator_traits<I>::difference_type n, F r)
{
while (n--) {
@@ -904,9 +1026,9 @@ inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, I>::ty
template
<typename I // I models InputIterator
,typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, I>::type
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, I>::type
move_n_source(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n_source(f, n, r); }
+{ return container_detail::memmove_n_source(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -917,7 +1039,7 @@ inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, I>::typ
template
<typename I // I models InputIterator
,typename F> // F models ForwardIterator
-inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, I>::type
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, I>::type
move_n_source_dest(I f, typename std::iterator_traits<I>::difference_type n, F &r)
{
while (n--) {
@@ -930,9 +1052,9 @@ inline typename container_detail::disable_if_memcpy_copy_assignable<I, F, I>::ty
template
<typename I // I models InputIterator
,typename F> // F models ForwardIterator
-inline typename container_detail::enable_if_memcpy_copy_assignable<I, F, I>::type
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, I>::type
move_n_source_dest(I f, typename std::iterator_traits<I>::difference_type n, F &r) BOOST_CONTAINER_NOEXCEPT
-{ return container_detail::memcpy_n_source_dest(f, n, r); }
+{ return container_detail::memmove_n_source_dest(f, n, r); }
//////////////////////////////////////////////////////////////////////////////
//
@@ -948,7 +1070,7 @@ inline void destroy_alloc_n(A &a, I f, typename std::iterator_traits<I>::differe
< !boost::has_trivial_destructor<typename std::iterator_traits<I>::value_type>::value >::type* = 0)
{
while(n--){
- allocator_traits<A>::destroy(a, container_detail::addressof(*f++));
+ allocator_traits<A>::destroy(a, container_detail::iterator_to_raw_pointer(f++));
}
}
@@ -972,7 +1094,7 @@ template
,typename F // F models ForwardIterator
,typename G // G models ForwardIterator
>
-inline typename container_detail::disable_if_memcpy_copy_assignable<F, G, void>::type
+inline typename container_detail::disable_if_memtransfer_copy_assignable<F, G, void>::type
deep_swap_alloc_n( A &a, F short_range_f, typename allocator_traits<A>::size_type n_i
, G large_range_f, typename allocator_traits<A>::size_type n_j)
{
@@ -993,7 +1115,7 @@ template
,typename G // G models ForwardIterator
>
inline typename container_detail::enable_if_c
- < container_detail::is_memcpy_copy_assignable<F, G>::value && (MaxTmpBytes <= DeepSwapAllocNMaxStorage) && false
+ < container_detail::is_memtransfer_copy_assignable<F, G>::value && (MaxTmpBytes <= DeepSwapAllocNMaxStorage) && false
, void>::type
deep_swap_alloc_n( A &a, F short_range_f, typename allocator_traits<A>::size_type n_i
, G large_range_f, typename allocator_traits<A>::size_type n_j)
@@ -1004,9 +1126,9 @@ inline typename container_detail::enable_if_c
storage_type storage;
const std::size_t n_i_bytes = sizeof(value_type)*n_i;
- unsigned char *const large_ptr = static_cast<unsigned char*>(static_cast<void*>(container_detail::addressof(*large_range_f)));
- unsigned char *const short_ptr = static_cast<unsigned char*>(static_cast<void*>(container_detail::addressof(*short_range_f)));
- unsigned char *const stora_ptr = static_cast<unsigned char*>(static_cast<void*>(container_detail::addressof(storage)));
+ void *const large_ptr = static_cast<void*>(container_detail::iterator_to_raw_pointer(large_range_f));
+ void *const short_ptr = static_cast<void*>(container_detail::iterator_to_raw_pointer(short_range_f));
+ void *const stora_ptr = static_cast<void*>(container_detail::iterator_to_raw_pointer(storage));
::memcpy(stora_ptr, large_ptr, n_i_bytes);
::memcpy(large_ptr, short_ptr, n_i_bytes);
::memcpy(short_ptr, stora_ptr, n_i_bytes);
@@ -1023,7 +1145,7 @@ template
,typename G // G models ForwardIterator
>
inline typename container_detail::enable_if_c
- < container_detail::is_memcpy_copy_assignable<F, G>::value && true//(MaxTmpBytes > DeepSwapAllocNMaxStorage)
+ < container_detail::is_memtransfer_copy_assignable<F, G>::value && true//(MaxTmpBytes > DeepSwapAllocNMaxStorage)
, void>::type
deep_swap_alloc_n( A &a, F short_range_f, typename allocator_traits<A>::size_type n_i
, G large_range_f, typename allocator_traits<A>::size_type n_j)
@@ -1035,9 +1157,9 @@ inline typename container_detail::enable_if_c
const std::size_t sizeof_storage = sizeof(storage);
std::size_t n_i_bytes = sizeof(value_type)*n_i;
- char *large_ptr = static_cast<char*>(static_cast<void*>(container_detail::addressof(*large_range_f)));
- char *short_ptr = static_cast<char*>(static_cast<void*>(container_detail::addressof(*short_range_f)));
- char *stora_ptr = static_cast<char*>(static_cast<void*>(container_detail::addressof(storage)));
+ char *large_ptr = static_cast<char*>(static_cast<void*>(container_detail::iterator_to_raw_pointer(large_range_f)));
+ char *short_ptr = static_cast<char*>(static_cast<void*>(container_detail::iterator_to_raw_pointer(short_range_f)));
+ char *stora_ptr = static_cast<char*>(static_cast<void*>(&storage));
std::size_t szt_times = n_i_bytes/sizeof_storage;
const std::size_t szt_rem = n_i_bytes%sizeof_storage;
@@ -1045,7 +1167,7 @@ inline typename container_detail::enable_if_c
//Loop unrolling using Duff's device, as it seems it helps on some architectures
const std::size_t Unroll = 4;
std::size_t n = (szt_times + (Unroll-1))/Unroll;
- const std::size_t branch_number = ((!szt_times)*Unroll) + (szt_times % Unroll);
+ const std::size_t branch_number = (!szt_times)*Unroll + (szt_times % Unroll);
switch(branch_number){
case 4:
break;
@@ -1055,18 +1177,21 @@ inline typename container_detail::enable_if_c
::memcpy(short_ptr, stora_ptr, sizeof_storage);
large_ptr += sizeof_storage;
short_ptr += sizeof_storage;
+ BOOST_CONTAINER_FALLTHOUGH
case 3:
::memcpy(stora_ptr, large_ptr, sizeof_storage);
::memcpy(large_ptr, short_ptr, sizeof_storage);
::memcpy(short_ptr, stora_ptr, sizeof_storage);
large_ptr += sizeof_storage;
short_ptr += sizeof_storage;
+ BOOST_CONTAINER_FALLTHOUGH
case 2:
::memcpy(stora_ptr, large_ptr, sizeof_storage);
::memcpy(large_ptr, short_ptr, sizeof_storage);
::memcpy(short_ptr, stora_ptr, sizeof_storage);
large_ptr += sizeof_storage;
short_ptr += sizeof_storage;
+ BOOST_CONTAINER_FALLTHOUGH
case 1:
::memcpy(stora_ptr, large_ptr, sizeof_storage);
::memcpy(large_ptr, short_ptr, sizeof_storage);
@@ -1095,7 +1220,7 @@ template
<typename A
,typename I // F models InputIterator
,typename O // G models OutputIterator
- >
+ >
void copy_assign_range_alloc_n( A &a, I inp_start, typename allocator_traits<A>::size_type n_i
, O out_start, typename allocator_traits<A>::size_type n_o )
{
@@ -1119,7 +1244,7 @@ template
<typename A
,typename I // F models InputIterator
,typename O // G models OutputIterator
- >
+ >
void move_assign_range_alloc_n( A &a, I inp_start, typename allocator_traits<A>::size_type n_i
, O out_start, typename allocator_traits<A>::size_type n_o )
{
diff --git a/3party/boost/boost/container/detail/value_init.hpp b/3party/boost/boost/container/detail/value_init.hpp
index ec1a99c56d..68f9678358 100644
--- a/3party/boost/boost/container/detail/value_init.hpp
+++ b/3party/boost/boost/container/detail/value_init.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012.
+// (C) Copyright Ion Gaztanaga 2005-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,11 +13,11 @@
#ifndef BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP
#define BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
namespace boost {
diff --git a/3party/boost/boost/container/detail/variadic_templates_tools.hpp b/3party/boost/boost/container/detail/variadic_templates_tools.hpp
index d903dfa04c..b07fe3050e 100644
--- a/3party/boost/boost/container/detail/variadic_templates_tools.hpp
+++ b/3party/boost/boost/container/detail/variadic_templates_tools.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2008-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2008-2013. 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)
//
@@ -11,12 +11,13 @@
#ifndef BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP
#define BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
+
#include <boost/container/detail/type_traits.hpp>
#include <cstddef> //std::size_t
diff --git a/3party/boost/boost/container/detail/version_type.hpp b/3party/boost/boost/container/detail/version_type.hpp
index e47ba26f12..548fe3bff8 100644
--- a/3party/boost/boost/container/detail/version_type.hpp
+++ b/3party/boost/boost/container/detail/version_type.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -16,7 +16,8 @@
#ifndef BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP
#define BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP
-#include "config_begin.hpp"
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
#include <boost/container/detail/mpl.hpp>
#include <boost/container/detail/type_traits.hpp>
@@ -80,13 +81,19 @@ struct version<T, true>
template <class T>
struct version
: public container_detail::integral_constant<unsigned, impl::version<T>::value>
+{};
+
+template<class T, unsigned N>
+struct is_version
{
+ static const bool value =
+ is_same< typename version<T>::type, integral_constant<unsigned, N> >::value;
};
} //namespace container_detail {
} //namespace container {
} //namespace boost{
-#include "config_end.hpp"
+#include <boost/container/detail/config_end.hpp>
#endif //#define BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP
diff --git a/3party/boost/boost/container/detail/workaround.hpp b/3party/boost/boost/container/detail/workaround.hpp
index 06cb7337c9..c290861275 100644
--- a/3party/boost/boost/container/detail/workaround.hpp
+++ b/3party/boost/boost/container/detail/workaround.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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,10 +35,29 @@
#define BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST
#endif
+#if !defined(BOOST_FALLTHOUGH)
+ #define BOOST_CONTAINER_FALLTHOUGH
+#else
+ #define BOOST_CONTAINER_FALLTHOUGH BOOST_FALLTHOUGH;
+#endif
+
//Macros for documentation purposes. For code, expands to the argument
#define BOOST_CONTAINER_IMPDEF(TYPE) TYPE
#define BOOST_CONTAINER_SEEDOC(TYPE) TYPE
+//Macros for memset optimization. In most platforms
+//memsetting pointers and floatings is safe and faster.
+//
+//If your platform does not offer these guarantees
+//define these to value zero.
+#ifndef BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_NOT_ZERO
+#define BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO 1
+#endif
+
+#ifndef BOOST_CONTAINER_MEMZEROED_POINTER_IS_NOT_NULL
+#define BOOST_CONTAINER_MEMZEROED_POINTER_IS_NULL
+#endif
+
#include <boost/container/detail/config_end.hpp>
#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 8bb372fb9f..7f64e323cf 100644
--- a/3party/boost/boost/container/flat_map.hpp
+++ b/3party/boost/boost/container/flat_map.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,7 +11,7 @@
#ifndef BOOST_CONTAINER_FLAT_MAP_HPP
#define BOOST_CONTAINER_FLAT_MAP_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -34,18 +34,7 @@
namespace boost {
namespace container {
-/// @cond
-// Forward declarations of operators == and <, needed for friend declarations.
-template <class Key, class T, class Compare, class Allocator>
-class flat_map;
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator==(const flat_map<Key,T,Compare,Allocator>& x,
- const flat_map<Key,T,Compare,Allocator>& y);
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<(const flat_map<Key,T,Compare,Allocator>& x,
- const flat_map<Key,T,Compare,Allocator>& y);
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace container_detail{
@@ -62,8 +51,7 @@ static D force_copy(S s)
} //namespace container_detail{
-
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! A flat_map is a kind of associative container that supports unique keys (contains at
//! most one of each key value) and provides for fast retrieval of values of another
@@ -84,8 +72,16 @@ static D force_copy(S s)
//! This means that inserting a new element into a flat_map invalidates
//! previous iterators and references
//!
-//! Erasing an element of a flat_map invalidates iterators and references
+//! Erasing an element invalidates iterators and references
//! pointing to elements that come after (their keys are bigger) the erased element.
+//!
+//! This container provides random-access iterators.
+//!
+//! \tparam Key is the key_type of the map
+//! \tparam Value is the <code>mapped_type</code>
+//! \tparam Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
+//! \tparam Allocator is the allocator to allocate the <code>value_type</code>s
+//! (e.g. <i>allocator< std::pair<Key, T> > </i>).
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator< std::pair< Key, T> > >
#else
@@ -93,7 +89,7 @@ template <class Key, class T, class Compare, class Allocator>
#endif
class flat_map
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(flat_map)
//This is the tree that we should store if pair was movable
@@ -127,7 +123,7 @@ class flat_map
<typename allocator_traits<Allocator>::pointer>::reverse_iterator reverse_iterator_impl;
typedef typename container_detail::get_flat_tree_iterators
<typename allocator_traits<Allocator>::pointer>::const_reverse_iterator const_reverse_iterator_impl;
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
@@ -139,6 +135,7 @@ class flat_map
typedef Key key_type;
typedef T mapped_type;
typedef std::pair<Key, T> value_type;
+ typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
typedef typename boost::container::allocator_traits<Allocator>::reference reference;
@@ -166,14 +163,32 @@ class flat_map
//!
//! <b>Complexity</b>: Constant.
flat_map()
- : m_flat_tree() {}
+ : m_flat_tree()
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Constructs an empty flat_map using the specified
//! comparison object and allocator.
//!
//! <b>Complexity</b>: Constant.
explicit flat_map(const Compare& comp, const allocator_type& a = allocator_type())
- : m_flat_tree(comp, container_detail::force<impl_allocator_type>(a)) {}
+ : m_flat_tree(comp, container_detail::force<impl_allocator_type>(a))
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
+
+ //! <b>Effects</b>: Constructs an empty flat_map using the specified allocator.
+ //!
+ //! <b>Complexity</b>: Constant.
+ explicit flat_map(const allocator_type& a)
+ : m_flat_tree(container_detail::force<impl_allocator_type>(a))
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
//! allocator, and inserts elements from the range [first ,last ).
@@ -184,7 +199,10 @@ class flat_map
flat_map(InputIterator first, InputIterator last, const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
: m_flat_tree(true, first, last, comp, container_detail::force<impl_allocator_type>(a))
- {}
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
//! allocator, and inserts elements from the ordered unique range [first ,last). This function
@@ -200,13 +218,20 @@ class flat_map
flat_map( ordered_unique_range_t, InputIterator first, InputIterator last
, const Compare& comp = Compare(), const allocator_type& a = allocator_type())
: m_flat_tree(ordered_range, first, last, comp, a)
- {}
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Copy constructs a flat_map.
//!
//! <b>Complexity</b>: Linear in x.size().
flat_map(const flat_map& x)
- : m_flat_tree(x.m_flat_tree) {}
+ : m_flat_tree(x.m_flat_tree)
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Move constructs a flat_map.
//! Constructs *this using x's resources.
@@ -216,14 +241,20 @@ class flat_map
//! <b>Postcondition</b>: x is emptied.
flat_map(BOOST_RV_REF(flat_map) x)
: m_flat_tree(boost::move(x.m_flat_tree))
- {}
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Copy constructs a flat_map using the specified allocator.
//!
//! <b>Complexity</b>: Linear in x.size().
flat_map(const flat_map& x, const allocator_type &a)
: m_flat_tree(x.m_flat_tree, a)
- {}
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Move constructs a flat_map using the specified allocator.
//! Constructs *this using x's resources.
@@ -231,7 +262,10 @@ class flat_map
//! <b>Complexity</b>: Constant if x.get_allocator() == a, linear otherwise.
flat_map(BOOST_RV_REF(flat_map) x, const allocator_type &a)
: m_flat_tree(boost::move(x.m_flat_tree), a)
- {}
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Makes *this a copy of x.
//!
@@ -242,11 +276,15 @@ class flat_map
//! <b>Effects</b>: Move constructs a flat_map.
//! Constructs *this using x's resources.
//!
- //! <b>Complexity</b>: Construct.
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and (allocation throws or value_type's move constructor throws)
//!
- //! <b>Postcondition</b>: x is emptied.
- flat_map& operator=(BOOST_RV_REF(flat_map) mx)
- { m_flat_tree = boost::move(mx.m_flat_tree); return *this; }
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
+ flat_map& operator=(BOOST_RV_REF(flat_map) x)
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
+ { m_flat_tree = boost::move(x.m_flat_tree); return *this; }
//! <b>Effects</b>: Returns a copy of the Allocator that
//! was passed to the object's constructor.
@@ -419,7 +457,7 @@ class flat_map
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- size_type capacity() const BOOST_CONTAINER_NOEXCEPT
+ size_type capacity() const BOOST_CONTAINER_NOEXCEPT
{ return m_flat_tree.capacity(); }
//! <b>Effects</b>: If n is less than or equal to capacity(), this call has no
@@ -431,7 +469,7 @@ class flat_map
//!
//! <b>Note</b>: If capacity() is less than "cnt", iterators and references to
//! to values might be invalidated.
- void reserve(size_type cnt)
+ void reserve(size_type cnt)
{ m_flat_tree.reserve(cnt); }
//! <b>Effects</b>: Tries to deallocate the excess of memory created
@@ -684,6 +722,8 @@ class flat_map
//! search time plus N*size() insertion time.
//!
//! <b>Note</b>: If an element is inserted it might invalidate elements.
+ //!
+ //! <b>Note</b>: Non-standard extension.
template <class InputIterator>
void insert(ordered_unique_range_t, InputIterator first, InputIterator last)
{ m_flat_tree.insert_unique(ordered_unique_range, first, last); }
@@ -788,7 +828,7 @@ class flat_map
//!
//! <b>Complexity</b>: log(size())+count(k)
size_type count(const key_type& x) const
- { return m_flat_tree.find(x) == m_flat_tree.end() ? 0 : 1; }
+ { return static_cast<size_type>(m_flat_tree.find(x) != m_flat_tree.end()); }
//! <b>Returns</b>: An iterator pointing to the first element with key not less
//! than k, or a.end() if such an element is not found.
@@ -822,22 +862,57 @@ class flat_map
//!
//! <b>Complexity</b>: Logarithmic
std::pair<iterator,iterator> equal_range(const key_type& x)
- { return container_detail::force_copy<std::pair<iterator,iterator> >(m_flat_tree.equal_range(x)); }
+ { return container_detail::force_copy<std::pair<iterator,iterator> >(m_flat_tree.lower_bound_range(x)); }
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
//!
//! <b>Complexity</b>: Logarithmic
std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const
- { return container_detail::force_copy<std::pair<const_iterator,const_iterator> >(m_flat_tree.equal_range(x)); }
+ { return container_detail::force_copy<std::pair<const_iterator,const_iterator> >(m_flat_tree.lower_bound_range(x)); }
+
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const flat_map& x, const flat_map& y)
+ { return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin()); }
+
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const flat_map& x, const flat_map& y)
+ { return !(x == y); }
+
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const flat_map& x, const flat_map& y)
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
- /// @cond
- template <class K1, class T1, class C1, class A1>
- friend bool operator== (const flat_map<K1, T1, C1, A1>&,
- const flat_map<K1, T1, C1, A1>&);
- template <class K1, class T1, class C1, class A1>
- friend bool operator< (const flat_map<K1, T1, C1, A1>&,
- const flat_map<K1, T1, C1, A1>&);
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const flat_map& x, const flat_map& y)
+ { return y < x; }
+
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const flat_map& x, const flat_map& y)
+ { return !(y < x); }
+
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const flat_map& x, const flat_map& y)
+ { return !(x < y); }
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(flat_map& x, flat_map& y)
+ { x.swap(y); }
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
mapped_type &priv_subscript(const key_type& k)
{
@@ -860,45 +935,10 @@ class flat_map
}
return (*i).second;
}
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator==(const flat_map<Key,T,Compare,Allocator>& x,
- const flat_map<Key,T,Compare,Allocator>& y)
- { return x.m_flat_tree == y.m_flat_tree; }
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<(const flat_map<Key,T,Compare,Allocator>& x,
- const flat_map<Key,T,Compare,Allocator>& y)
- { return x.m_flat_tree < y.m_flat_tree; }
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator!=(const flat_map<Key,T,Compare,Allocator>& x,
- const flat_map<Key,T,Compare,Allocator>& y)
- { return !(x == y); }
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator>(const flat_map<Key,T,Compare,Allocator>& x,
- const flat_map<Key,T,Compare,Allocator>& y)
- { return y < x; }
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<=(const flat_map<Key,T,Compare,Allocator>& x,
- const flat_map<Key,T,Compare,Allocator>& y)
- { return !(y < x); }
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator>=(const flat_map<Key,T,Compare,Allocator>& x,
- const flat_map<Key,T,Compare,Allocator>& y)
- { return !(x < y); }
-
-template <class Key, class T, class Compare, class Allocator>
-inline void swap(flat_map<Key,T,Compare,Allocator>& x,
- flat_map<Key,T,Compare,Allocator>& y)
- { x.swap(y); }
-
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
} //namespace container {
@@ -912,18 +952,7 @@ struct has_trivial_destructor_after_move<boost::container::flat_map<K, T, C, All
namespace container {
-// Forward declaration of operators < and ==, needed for friend declaration.
-template <class Key, class T, class Compare, class Allocator>
-class flat_multimap;
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator==(const flat_multimap<Key,T,Compare,Allocator>& x,
- const flat_multimap<Key,T,Compare,Allocator>& y);
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<(const flat_multimap<Key,T,Compare,Allocator>& x,
- const flat_multimap<Key,T,Compare,Allocator>& y);
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! A flat_multimap is a kind of associative container that supports equivalent keys
//! (possibly containing multiple copies of the same key value) and provides for
@@ -939,6 +968,21 @@ inline bool operator<(const flat_multimap<Key,T,Compare,Allocator>& x,
//!
//! Allocator is the allocator to allocate the value_types
//! (e.g. <i>allocator< std::pair<Key, T> ></i>).
+//!
+//! flat_multimap is similar to std::multimap but it's implemented like an ordered vector.
+//! This means that inserting a new element into a flat_map invalidates
+//! previous iterators and references
+//!
+//! Erasing an element invalidates iterators and references
+//! pointing to elements that come after (their keys are bigger) the erased element.
+//!
+//! This container provides random-access iterators.
+//!
+//! \tparam Key is the key_type of the map
+//! \tparam Value is the <code>mapped_type</code>
+//! \tparam Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
+//! \tparam Allocator is the allocator to allocate the <code>value_type</code>s
+//! (e.g. <i>allocator< std::pair<Key, T> > </i>).
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator< std::pair< Key, T> > >
#else
@@ -946,7 +990,7 @@ template <class Key, class T, class Compare, class Allocator>
#endif
class flat_multimap
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(flat_multimap)
typedef container_detail::flat_tree<Key,
@@ -978,7 +1022,7 @@ class flat_multimap
<typename allocator_traits<Allocator>::pointer>::reverse_iterator reverse_iterator_impl;
typedef typename container_detail::get_flat_tree_iterators
<typename allocator_traits<Allocator>::pointer>::const_reverse_iterator const_reverse_iterator_impl;
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
@@ -990,6 +1034,7 @@ class flat_multimap
typedef Key key_type;
typedef T mapped_type;
typedef std::pair<Key, T> value_type;
+ typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
typedef typename boost::container::allocator_traits<Allocator>::reference reference;
@@ -1016,7 +1061,11 @@ class flat_multimap
//!
//! <b>Complexity</b>: Constant.
flat_multimap()
- : m_flat_tree() {}
+ : m_flat_tree()
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison
//! object and allocator.
@@ -1024,7 +1073,21 @@ class flat_multimap
//! <b>Complexity</b>: Constant.
explicit flat_multimap(const Compare& comp,
const allocator_type& a = allocator_type())
- : m_flat_tree(comp, container_detail::force<impl_allocator_type>(a)) { }
+ : m_flat_tree(comp, container_detail::force<impl_allocator_type>(a))
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
+
+ //! <b>Effects</b>: Constructs an empty flat_multimap using the specified allocator.
+ //!
+ //! <b>Complexity</b>: Constant.
+ explicit flat_multimap(const allocator_type& a)
+ : m_flat_tree(container_detail::force<impl_allocator_type>(a))
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison object
//! and allocator, and inserts elements from the range [first ,last ).
@@ -1036,7 +1099,10 @@ class flat_multimap
const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
: m_flat_tree(false, first, last, comp, container_detail::force<impl_allocator_type>(a))
- {}
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison object and
//! allocator, and inserts elements from the ordered range [first ,last). This function
@@ -1052,13 +1118,20 @@ class flat_multimap
const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
: m_flat_tree(ordered_range, first, last, comp, a)
- {}
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Copy constructs a flat_multimap.
//!
//! <b>Complexity</b>: Linear in x.size().
flat_multimap(const flat_multimap& x)
- : m_flat_tree(x.m_flat_tree) { }
+ : m_flat_tree(x.m_flat_tree)
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Move constructs a flat_multimap. Constructs *this using x's resources.
//!
@@ -1067,14 +1140,20 @@ class flat_multimap
//! <b>Postcondition</b>: x is emptied.
flat_multimap(BOOST_RV_REF(flat_multimap) x)
: m_flat_tree(boost::move(x.m_flat_tree))
- {}
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Copy constructs a flat_multimap using the specified allocator.
//!
//! <b>Complexity</b>: Linear in x.size().
flat_multimap(const flat_multimap& x, const allocator_type &a)
: m_flat_tree(x.m_flat_tree, a)
- {}
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Move constructs a flat_multimap using the specified allocator.
//! Constructs *this using x's resources.
@@ -1082,7 +1161,10 @@ class flat_multimap
//! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
flat_multimap(BOOST_RV_REF(flat_multimap) x, const allocator_type &a)
: m_flat_tree(boost::move(x.m_flat_tree), a)
- { }
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
+ }
//! <b>Effects</b>: Makes *this a copy of x.
//!
@@ -1093,8 +1175,9 @@ class flat_multimap
//! <b>Effects</b>: this->swap(x.get()).
//!
//! <b>Complexity</b>: Constant.
- flat_multimap& operator=(BOOST_RV_REF(flat_multimap) mx)
- { m_flat_tree = boost::move(mx.m_flat_tree); return *this; }
+ flat_multimap& operator=(BOOST_RV_REF(flat_multimap) x)
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
+ { m_flat_tree = boost::move(x.m_flat_tree); return *this; }
//! <b>Effects</b>: Returns a copy of the Allocator that
//! was passed to the object's constructor.
@@ -1279,7 +1362,7 @@ class flat_multimap
//!
//! <b>Note</b>: If capacity() is less than "cnt", iterators and references to
//! to values might be invalidated.
- void reserve(size_type cnt)
+ void reserve(size_type cnt)
{ m_flat_tree.reserve(cnt); }
//! <b>Effects</b>: Tries to deallocate the excess of memory created
@@ -1460,6 +1543,8 @@ class flat_multimap
//! search time plus N*size() insertion time.
//!
//! <b>Note</b>: If an element is inserted it might invalidate elements.
+ //!
+ //! <b>Note</b>: Non-standard extension.
template <class InputIterator>
void insert(ordered_range_t, InputIterator first, InputIterator last)
{ m_flat_tree.insert_equal(ordered_range, first, last); }
@@ -1606,54 +1691,52 @@ class flat_multimap
std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const
{ return container_detail::force_copy<std::pair<const_iterator,const_iterator> >(m_flat_tree.equal_range(x)); }
- /// @cond
- template <class K1, class T1, class C1, class A1>
- friend bool operator== (const flat_multimap<K1, T1, C1, A1>& x,
- const flat_multimap<K1, T1, C1, A1>& y);
-
- template <class K1, class T1, class C1, class A1>
- friend bool operator< (const flat_multimap<K1, T1, C1, A1>& x,
- const flat_multimap<K1, T1, C1, A1>& y);
- /// @endcond
-};
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator==(const flat_multimap<Key,T,Compare,Allocator>& x,
- const flat_multimap<Key,T,Compare,Allocator>& y)
- { return x.m_flat_tree == y.m_flat_tree; }
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const flat_multimap& x, const flat_multimap& y)
+ { return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin()); }
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<(const flat_multimap<Key,T,Compare,Allocator>& x,
- const flat_multimap<Key,T,Compare,Allocator>& y)
- { return x.m_flat_tree < y.m_flat_tree; }
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const flat_multimap& x, const flat_multimap& y)
+ { return !(x == y); }
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator!=(const flat_multimap<Key,T,Compare,Allocator>& x,
- const flat_multimap<Key,T,Compare,Allocator>& y)
- { return !(x == y); }
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const flat_multimap& x, const flat_multimap& y)
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator>(const flat_multimap<Key,T,Compare,Allocator>& x,
- const flat_multimap<Key,T,Compare,Allocator>& y)
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const flat_multimap& x, const flat_multimap& y)
{ return y < x; }
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<=(const flat_multimap<Key,T,Compare,Allocator>& x,
- const flat_multimap<Key,T,Compare,Allocator>& y)
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const flat_multimap& x, const flat_multimap& y)
{ return !(y < x); }
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator>=(const flat_multimap<Key,T,Compare,Allocator>& x,
- const flat_multimap<Key,T,Compare,Allocator>& y)
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const flat_multimap& x, const flat_multimap& y)
{ return !(x < y); }
-template <class Key, class T, class Compare, class Allocator>
-inline void swap(flat_multimap<Key,T,Compare,Allocator>& x, flat_multimap<Key,T,Compare,Allocator>& y)
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(flat_multimap& x, flat_multimap& y)
{ x.swap(y); }
+};
}}
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace boost {
@@ -1667,7 +1750,7 @@ struct has_trivial_destructor_after_move< boost::container::flat_multimap<K, T,
} //namespace boost {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#include <boost/container/detail/config_end.hpp>
diff --git a/3party/boost/boost/container/flat_set.hpp b/3party/boost/boost/container/flat_set.hpp
index 82bdea8c07..96f2a91f89 100644
--- a/3party/boost/boost/container/flat_set.hpp
+++ b/3party/boost/boost/container/flat_set.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,7 +11,7 @@
#ifndef BOOST_CONTAINER_FLAT_SET_HPP
#define BOOST_CONTAINER_FLAT_SET_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -31,29 +31,8 @@
namespace boost {
namespace container {
-/// @cond
-// Forward declarations of operators < and ==, needed for friend declaration.
-
-#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
-template <class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key> >
-#else
-template <class Key, class Compare, class Allocator>
-#endif
-class flat_set;
-
-template <class Key, class Compare, class Allocator>
-inline bool operator==(const flat_set<Key,Compare,Allocator>& x,
- const flat_set<Key,Compare,Allocator>& y);
-
-template <class Key, class Compare, class Allocator>
-inline bool operator<(const flat_set<Key,Compare,Allocator>& x,
- const flat_set<Key,Compare,Allocator>& y);
-/// @endcond
-
//! flat_set is a Sorted Associative Container that stores objects of type Key.
-//! flat_set is a Simple Associative Container, meaning that its value type,
-//! as well as its key type, is Key. It is also a Unique Associative Container,
-//! meaning that no two elements are the same.
+//! It is also a Unique Associative Container, meaning that no two elements are the same.
//!
//! flat_set is similar to std::set but it's implemented like an ordered vector.
//! This means that inserting a new element into a flat_set invalidates
@@ -61,19 +40,27 @@ inline bool operator<(const flat_set<Key,Compare,Allocator>& 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.
+//!
+//! This container provides random-access iterators.
+//!
+//! \tparam Key is the type to be inserted in the set, which is also the key_type
+//! \tparam Compare is the comparison functor used to order keys
+//! \tparam Allocator is the allocator to be used to allocate memory for this container
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key> >
#else
template <class Key, class Compare, class Allocator>
#endif
class flat_set
+ ///@cond
+ : public container_detail::flat_tree<Key, Key, container_detail::identity<Key>, Compare, Allocator>
+ ///@endcond
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(flat_set)
- typedef container_detail::flat_tree<Key, Key, container_detail::identity<Key>, Compare, Allocator> tree_t;
- tree_t m_flat_tree; // flat tree representing flat_set
- /// @endcond
+ typedef container_detail::flat_tree<Key, Key, container_detail::identity<Key>, Compare, Allocator> base_t;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -85,6 +72,7 @@ class flat_set
typedef Key value_type;
typedef Compare key_compare;
typedef Compare value_compare;
+ typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename ::boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
typedef typename ::boost::container::allocator_traits<Allocator>::reference reference;
@@ -92,11 +80,11 @@ class flat_set
typedef typename ::boost::container::allocator_traits<Allocator>::size_type size_type;
typedef typename ::boost::container::allocator_traits<Allocator>::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;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::stored_allocator_type) stored_allocator_type;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::iterator) iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_iterator) const_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::reverse_iterator) reverse_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_reverse_iterator) const_reverse_iterator;
public:
//////////////////////////////////////////////
@@ -105,23 +93,30 @@ class flat_set
//
//////////////////////////////////////////////
- //! <b>Effects</b>: Default constructs an empty flat_set.
+ //! <b>Effects</b>: Default constructs an empty container.
//!
//! <b>Complexity</b>: Constant.
explicit flat_set()
- : m_flat_tree()
+ : base_t()
{}
- //! <b>Effects</b>: Constructs an empty flat_set using the specified
+ //! <b>Effects</b>: Constructs an empty container using the specified
//! comparison object and allocator.
//!
//! <b>Complexity</b>: Constant.
explicit flat_set(const Compare& comp,
const allocator_type& a = allocator_type())
- : m_flat_tree(comp, a)
+ : base_t(comp, a)
+ {}
+
+ //! <b>Effects</b>: Constructs an empty container using the specified allocator.
+ //!
+ //! <b>Complexity</b>: Constant.
+ explicit flat_set(const allocator_type& a)
+ : base_t(a)
{}
- //! <b>Effects</b>: Constructs an empty set using the specified comparison object and
+ //! <b>Effects</b>: Constructs an empty container using the specified comparison object and
//! allocator, and inserts elements from the range [first ,last ).
//!
//! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
@@ -130,10 +125,10 @@ class flat_set
flat_set(InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
- : m_flat_tree(true, first, last, comp, a)
+ : base_t(true, first, last, comp, a)
{}
- //! <b>Effects</b>: Constructs an empty flat_set using the specified comparison object and
+ //! <b>Effects</b>: Constructs an empty container using the specified comparison object and
//! allocator, and inserts elements from the ordered unique range [first ,last). This function
//! is more efficient than the normal range creation for ordered ranges.
//!
@@ -147,58 +142,62 @@ class flat_set
flat_set(ordered_unique_range_t, InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
- : m_flat_tree(ordered_range, first, last, comp, a)
+ : base_t(ordered_range, first, last, comp, a)
{}
- //! <b>Effects</b>: Copy constructs a set.
+ //! <b>Effects</b>: Copy constructs the container.
//!
//! <b>Complexity</b>: Linear in x.size().
flat_set(const flat_set& x)
- : m_flat_tree(x.m_flat_tree)
+ : base_t(static_cast<const base_t&>(x))
{}
- //! <b>Effects</b>: Move constructs a set. Constructs *this using x's resources.
+ //! <b>Effects</b>: Move constructs thecontainer. Constructs *this using mx's resources.
//!
//! <b>Complexity</b>: Constant.
//!
- //! <b>Postcondition</b>: x is emptied.
+ //! <b>Postcondition</b>: mx is emptied.
flat_set(BOOST_RV_REF(flat_set) mx)
- : m_flat_tree(boost::move(mx.m_flat_tree))
+ : base_t(boost::move(static_cast<base_t&>(mx)))
{}
- //! <b>Effects</b>: Copy constructs a set using the specified allocator.
+ //! <b>Effects</b>: Copy constructs a container using the specified allocator.
//!
//! <b>Complexity</b>: Linear in x.size().
flat_set(const flat_set& x, const allocator_type &a)
- : m_flat_tree(x.m_flat_tree, a)
+ : base_t(static_cast<const base_t&>(x), a)
{}
- //! <b>Effects</b>: Move constructs a set using the specified allocator.
- //! Constructs *this using x's resources.
+ //! <b>Effects</b>: Move constructs a container using the specified allocator.
+ //! Constructs *this using mx's resources.
//!
//! <b>Complexity</b>: Constant if a == mx.get_allocator(), linear otherwise
flat_set(BOOST_RV_REF(flat_set) mx, const allocator_type &a)
- : m_flat_tree(boost::move(mx.m_flat_tree), a)
+ : base_t(boost::move(static_cast<base_t&>(mx)), a)
{}
//! <b>Effects</b>: Makes *this a copy of x.
//!
//! <b>Complexity</b>: Linear in x.size().
flat_set& operator=(BOOST_COPY_ASSIGN_REF(flat_set) x)
- { m_flat_tree = x.m_flat_tree; return *this; }
+ { return static_cast<flat_set&>(this->base_t::operator=(static_cast<const base_t&>(x))); }
- //! <b>Effects</b>: Makes *this a copy of the previous value of xx.
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and (allocation throws or value_type's move constructor throws)
//!
- //! <b>Complexity</b>: Linear in x.size().
- flat_set& operator=(BOOST_RV_REF(flat_set) mx)
- { m_flat_tree = boost::move(mx.m_flat_tree); return *this; }
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
+ flat_set& operator=(BOOST_RV_REF(flat_set) x)
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
+ { return static_cast<flat_set&>(this->base_t::operator=(boost::move(static_cast<base_t&>(x)))); }
+ #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
//! <b>Effects</b>: Returns a copy of the Allocator that
//! was passed to the object's constructor.
//!
//! <b>Complexity</b>: Constant.
- allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.get_allocator(); }
+ allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a reference to the internal allocator.
//!
@@ -207,8 +206,7 @@ class flat_set
//! <b>Complexity</b>: Constant.
//!
//! <b>Note</b>: Non-standard extension.
- stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.get_stored_allocator(); }
+ stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a reference to the internal allocator.
//!
@@ -217,46 +215,35 @@ class flat_set
//! <b>Complexity</b>: Constant.
//!
//! <b>Note</b>: Non-standard extension.
- const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.get_stored_allocator(); }
-
- //////////////////////////////////////////////
- //
- // iterators
- //
- //////////////////////////////////////////////
+ const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns an iterator to the first element contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- iterator begin() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.begin(); }
+ iterator begin() BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.begin(); }
+ const_iterator begin() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns an iterator to the end of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- iterator end() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.end(); }
+ iterator end() BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_iterator to the end of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator end() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.end(); }
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
//! of the reversed container.
@@ -264,8 +251,7 @@ class flat_set
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.rbegin(); }
+ reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
//! of the reversed container.
@@ -273,8 +259,7 @@ class flat_set
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.rbegin(); }
+ const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a reverse_iterator pointing to the end
//! of the reversed container.
@@ -282,8 +267,7 @@ class flat_set
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.rend(); }
+ reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
//! of the reversed container.
@@ -291,24 +275,21 @@ class flat_set
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.rend(); }
+ const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.cbegin(); }
+ const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_iterator to the end of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.cend(); }
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
//! of the reversed container.
@@ -316,8 +297,7 @@ class flat_set
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.crbegin(); }
+ const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
//! of the reversed container.
@@ -325,39 +305,28 @@ class flat_set
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.crend(); }
-
-
- //////////////////////////////////////////////
- //
- // capacity
- //
- //////////////////////////////////////////////
+ const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns true if the container contains no elements.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- bool empty() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.empty(); }
+ bool empty() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns the number of the elements contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- size_type size() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.size(); }
+ size_type size() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns the largest possible size of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- size_type max_size() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.max_size(); }
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Number of elements for which memory has been allocated.
//! capacity() is always greater than or equal to size().
@@ -365,8 +334,7 @@ class flat_set
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- size_type capacity() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.capacity(); }
+ size_type capacity() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: If n is less than or equal to capacity(), this call has no
//! effect. Otherwise, it is a request for allocation of additional memory.
@@ -377,8 +345,7 @@ class flat_set
//!
//! <b>Note</b>: If capacity() is less than "cnt", iterators and references to
//! to values might be invalidated.
- void reserve(size_type cnt)
- { m_flat_tree.reserve(cnt); }
+ void reserve(size_type cnt);
//! <b>Effects</b>: Tries to deallocate the excess of memory created
// with previous allocations. The size of the vector is unchanged
@@ -386,8 +353,9 @@ class flat_set
//! <b>Throws</b>: If memory allocation throws, or Key's copy constructor throws.
//!
//! <b>Complexity</b>: Linear to size().
- void shrink_to_fit()
- { m_flat_tree.shrink_to_fit(); }
+ void shrink_to_fit();
+
+ #endif // #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//////////////////////////////////////////////
//
@@ -411,7 +379,7 @@ class flat_set
//! <b>Note</b>: If an element is inserted it might invalidate elements.
template <class... Args>
std::pair<iterator,bool> emplace(Args&&... args)
- { return m_flat_tree.emplace_unique(boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_unique(boost::forward<Args>(args)...); }
//! <b>Effects</b>: Inserts an object of type Key constructed with
//! std::forward<Args>(args)... in the container if and only if there is
@@ -427,19 +395,19 @@ class flat_set
//! <b>Note</b>: If an element is inserted it might invalidate elements.
template <class... Args>
iterator emplace_hint(const_iterator hint, Args&&... args)
- { return m_flat_tree.emplace_hint_unique(hint, boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_hint_unique(hint, boost::forward<Args>(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<iterator,bool> emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
- { return m_flat_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
+ { return this->base_t::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 m_flat_tree.emplace_hint_unique \
+ { return this->base_t::emplace_hint_unique \
(hint BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
//!
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
@@ -505,7 +473,7 @@ class flat_set
//! <b>Note</b>: 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)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, value_type, iterator, this->priv_insert, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: first, last are not iterators into *this.
@@ -519,7 +487,7 @@ class flat_set
//! <b>Note</b>: If an element is inserted it might invalidate elements.
template <class InputIterator>
void insert(InputIterator first, InputIterator last)
- { m_flat_tree.insert_unique(first, last); }
+ { this->base_t::insert_unique(first, last); }
//! <b>Requires</b>: first, last are not iterators into *this and
//! must be ordered according to the predicate and must be
@@ -534,7 +502,9 @@ class flat_set
//! <b>Note</b>: Non-standard extension. If an element is inserted it might invalidate elements.
template <class InputIterator>
void insert(ordered_unique_range_t, InputIterator first, InputIterator last)
- { m_flat_tree.insert_unique(ordered_unique_range, first, last); }
+ { this->base_t::insert_unique(ordered_unique_range, first, last); }
+
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Effects</b>: Erases the element pointed to by position.
//!
@@ -546,8 +516,7 @@ class flat_set
//!
//! <b>Note</b>: Invalidates elements with keys
//! not less than the erased element.
- iterator erase(const_iterator position)
- { return m_flat_tree.erase(position); }
+ iterator erase(const_iterator position);
//! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
//!
@@ -555,8 +524,7 @@ class flat_set
//!
//! <b>Complexity</b>: Logarithmic search time plus erasure time
//! linear to the elements with bigger keys.
- size_type erase(const key_type& x)
- { return m_flat_tree.erase(x); }
+ size_type erase(const key_type& x);
//! <b>Effects</b>: Erases all the elements in the range [first, last).
//!
@@ -566,164 +534,145 @@ class flat_set
//!
//! <b>Complexity</b>: Logarithmic search time plus erasure time
//! linear to the elements with bigger keys.
- iterator erase(const_iterator first, const_iterator last)
- { return m_flat_tree.erase(first, last); }
+ iterator erase(const_iterator first, const_iterator last);
//! <b>Effects</b>: Swaps the contents of *this and x.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- void swap(flat_set& x)
- { m_flat_tree.swap(x.m_flat_tree); }
+ void swap(flat_set& x);
//! <b>Effects</b>: erase(a.begin(),a.end()).
//!
//! <b>Postcondition</b>: size() == 0.
//!
//! <b>Complexity</b>: linear in size().
- void clear() BOOST_CONTAINER_NOEXCEPT
- { m_flat_tree.clear(); }
-
- //////////////////////////////////////////////
- //
- // observers
- //
- //////////////////////////////////////////////
+ void clear() BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns the comparison object out
//! of which a was constructed.
//!
//! <b>Complexity</b>: Constant.
- key_compare key_comp() const
- { return m_flat_tree.key_comp(); }
+ key_compare key_comp() const;
//! <b>Effects</b>: Returns an object of value_compare constructed out
//! of the comparison object.
//!
//! <b>Complexity</b>: Constant.
- value_compare value_comp() const
- { return m_flat_tree.key_comp(); }
-
- //////////////////////////////////////////////
- //
- // set operations
- //
- //////////////////////////////////////////////
+ value_compare value_comp() const;
//! <b>Returns</b>: An iterator pointing to an element with the key
//! equivalent to x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic.
- iterator find(const key_type& x)
- { return m_flat_tree.find(x); }
+ iterator find(const key_type& x);
//! <b>Returns</b>: Allocator const_iterator pointing to an element with the key
//! equivalent to x, or end() if such an element is not found.
//!
- //! <b>Complexity</b>: Logarithmic.s
- const_iterator find(const key_type& x) const
- { return m_flat_tree.find(x); }
+ //! <b>Complexity</b>: Logarithmic.
+ const_iterator find(const key_type& x) const;
+
+ #endif // #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Returns</b>: The number of elements with key equivalent to x.
//!
//! <b>Complexity</b>: log(size())+count(k)
size_type count(const key_type& x) const
- { return m_flat_tree.find(x) == m_flat_tree.end() ? 0 : 1; }
+ { return static_cast<size_type>(this->base_t::find(x) != this->base_t::cend()); }
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Returns</b>: An iterator pointing to the first element with key not less
//! than k, or a.end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- iterator lower_bound(const key_type& x)
- { return m_flat_tree.lower_bound(x); }
+ iterator lower_bound(const key_type& x);
//! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
//! less than k, or a.end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- const_iterator lower_bound(const key_type& x) const
- { return m_flat_tree.lower_bound(x); }
+ const_iterator lower_bound(const key_type& x) const;
//! <b>Returns</b>: An iterator pointing to the first element with key not less
//! than x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- iterator upper_bound(const key_type& x)
- { return m_flat_tree.upper_bound(x); }
+ iterator upper_bound(const key_type& x);
//! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
//! less than x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- const_iterator upper_bound(const key_type& x) const
- { return m_flat_tree.upper_bound(x); }
+ const_iterator upper_bound(const key_type& x) const;
+
+ #endif // #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
//!
//! <b>Complexity</b>: Logarithmic
std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const
- { return m_flat_tree.equal_range(x); }
+ { return this->base_t::lower_bound_range(x); }
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
//!
//! <b>Complexity</b>: Logarithmic
std::pair<iterator,iterator> equal_range(const key_type& x)
- { return m_flat_tree.equal_range(x); }
+ { return this->base_t::lower_bound_range(x); }
- /// @cond
- template <class K1, class C1, class A1>
- friend bool operator== (const flat_set<K1,C1,A1>&, const flat_set<K1,C1,A1>&);
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- template <class K1, class C1, class A1>
- friend bool operator< (const flat_set<K1,C1,A1>&, const flat_set<K1,C1,A1>&);
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const flat_set& x, const flat_set& y);
- private:
- template<class KeyType>
- std::pair<iterator, bool> priv_insert(BOOST_FWD_REF(KeyType) x)
- { return m_flat_tree.insert_unique(::boost::forward<KeyType>(x)); }
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const flat_set& x, const flat_set& y);
- template<class KeyType>
- iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x)
- { return m_flat_tree.insert_unique(p, ::boost::forward<KeyType>(x)); }
- /// @endcond
-};
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const flat_set& x, const flat_set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator==(const flat_set<Key,Compare,Allocator>& x,
- const flat_set<Key,Compare,Allocator>& y)
- { return x.m_flat_tree == y.m_flat_tree; }
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const flat_set& x, const flat_set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator<(const flat_set<Key,Compare,Allocator>& x,
- const flat_set<Key,Compare,Allocator>& y)
- { return x.m_flat_tree < y.m_flat_tree; }
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const flat_set& x, const flat_set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator!=(const flat_set<Key,Compare,Allocator>& x,
- const flat_set<Key,Compare,Allocator>& y)
- { return !(x == y); }
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const flat_set& x, const flat_set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator>(const flat_set<Key,Compare,Allocator>& x,
- const flat_set<Key,Compare,Allocator>& y)
- { return y < x; }
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(flat_set& x, flat_set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator<=(const flat_set<Key,Compare,Allocator>& x,
- const flat_set<Key,Compare,Allocator>& y)
- { return !(y < x); }
+ #endif //#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
-template <class Key, class Compare, class Allocator>
-inline bool operator>=(const flat_set<Key,Compare,Allocator>& x,
- const flat_set<Key,Compare,Allocator>& y)
- { return !(x < y); }
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ private:
+ template<class KeyType>
+ std::pair<iterator, bool> priv_insert(BOOST_FWD_REF(KeyType) x)
+ { return this->base_t::insert_unique(::boost::forward<KeyType>(x)); }
-template <class Key, class Compare, class Allocator>
-inline void swap(flat_set<Key,Compare,Allocator>& x, flat_set<Key,Compare,Allocator>& y)
- { x.swap(y); }
+ template<class KeyType>
+ iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x)
+ { return this->base_t::insert_unique(p, ::boost::forward<KeyType>(x)); }
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+};
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
} //namespace container {
@@ -737,48 +686,39 @@ struct has_trivial_destructor_after_move<boost::container::flat_set<Key, C, Allo
namespace container {
-// Forward declaration of operators < and ==, needed for friend declaration.
-
-#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
-template <class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key> >
-#else
-template <class Key, class Compare, class Allocator>
-#endif
-class flat_multiset;
-
-template <class Key, class Compare, class Allocator>
-inline bool operator==(const flat_multiset<Key,Compare,Allocator>& x,
- const flat_multiset<Key,Compare,Allocator>& y);
-
-template <class Key, class Compare, class Allocator>
-inline bool operator<(const flat_multiset<Key,Compare,Allocator>& x,
- const flat_multiset<Key,Compare,Allocator>& y);
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! flat_multiset is a Sorted Associative Container that stores objects of type Key.
-//! flat_multiset is a Simple Associative Container, meaning that its value type,
-//! as well as its key type, is Key.
-//! flat_Multiset can store multiple copies of the same key value.
+//!
+//! flat_multiset can store multiple copies of the same key value.
//!
//! flat_multiset is similar to std::multiset but it's implemented like an ordered vector.
//! This means that inserting a new element into a flat_multiset invalidates
//! previous iterators and references
//!
-//! 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.
+//! Erasing an element invalidates iterators and references
+//! pointing to elements that come after (their keys are bigger) the erased element.
+//!
+//! This container provides random-access iterators.
+//!
+//! \tparam Key is the type to be inserted in the multiset, which is also the key_type
+//! \tparam Compare is the comparison functor used to order keys
+//! \tparam Allocator is the allocator to be used to allocate memory for this container
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key> >
#else
template <class Key, class Compare, class Allocator>
#endif
class flat_multiset
+ ///@cond
+ : public container_detail::flat_tree<Key, Key, container_detail::identity<Key>, Compare, Allocator>
+ ///@endcond
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(flat_multiset)
- typedef container_detail::flat_tree<Key, Key, container_detail::identity<Key>, Compare, Allocator> tree_t;
- tree_t m_flat_tree; // flat tree representing flat_multiset
- /// @endcond
+ typedef container_detail::flat_tree<Key, Key, container_detail::identity<Key>, Compare, Allocator> base_t;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -790,6 +730,7 @@ class flat_multiset
typedef Key value_type;
typedef Compare key_compare;
typedef Compare value_compare;
+ typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename ::boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
typedef typename ::boost::container::allocator_traits<Allocator>::reference reference;
@@ -797,28 +738,34 @@ class flat_multiset
typedef typename ::boost::container::allocator_traits<Allocator>::size_type size_type;
typedef typename ::boost::container::allocator_traits<Allocator>::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;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::stored_allocator_type) stored_allocator_type;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::iterator) iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_iterator) const_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::reverse_iterator) reverse_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_reverse_iterator) const_reverse_iterator;
- //! <b>Effects</b>: Default constructs an empty flat_multiset.
- //!
- //! <b>Complexity</b>: Constant.
+ //! @copydoc ::boost::container::flat_set::flat_set()
explicit flat_multiset()
- : m_flat_tree()
+ : base_t()
{}
+ //! @copydoc ::boost::container::flat_set::flat_set(const Compare&, const allocator_type&)
explicit flat_multiset(const Compare& comp,
const allocator_type& a = allocator_type())
- : m_flat_tree(comp, a) {}
+ : base_t(comp, a)
+ {}
+
+ //! @copydoc ::boost::container::flat_set::flat_set(const allocator_type&)
+ explicit flat_multiset(const allocator_type& a)
+ : base_t(a)
+ {}
+ //! @copydoc ::boost::container::flat_set::flat_set(InputIterator, InputIterator, const Compare& comp, const allocator_type&)
template <class InputIterator>
flat_multiset(InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
- : m_flat_tree(false, first, last, comp, a)
+ : base_t(false, first, last, comp, a)
{}
//! <b>Effects</b>: Constructs an empty flat_multiset using the specified comparison object and
@@ -834,240 +781,104 @@ class flat_multiset
flat_multiset(ordered_range_t, InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
- : m_flat_tree(ordered_range, first, last, comp, a)
+ : base_t(ordered_range, first, last, comp, a)
{}
- //! <b>Effects</b>: Copy constructs a flat_multiset.
- //!
- //! <b>Complexity</b>: Linear in x.size().
+ //! @copydoc ::boost::container::flat_set::flat_set(const flat_set &)
flat_multiset(const flat_multiset& x)
- : m_flat_tree(x.m_flat_tree)
+ : base_t(static_cast<const base_t&>(x))
{}
- //! <b>Effects</b>: Move constructs a flat_multiset. Constructs *this using x's resources.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Postcondition</b>: x is emptied.
+ //! @copydoc ::boost::container::flat_set(flat_set &&)
flat_multiset(BOOST_RV_REF(flat_multiset) mx)
- : m_flat_tree(boost::move(mx.m_flat_tree))
+ : base_t(boost::move(static_cast<base_t&>(mx)))
{}
- //! <b>Effects</b>: Copy constructs a flat_multiset using the specified allocator.
- //!
- //! <b>Complexity</b>: Linear in x.size().
+ //! @copydoc ::boost::container::flat_set(const flat_set &, const allocator_type &)
flat_multiset(const flat_multiset& x, const allocator_type &a)
- : m_flat_tree(x.m_flat_tree, a)
+ : base_t(static_cast<const base_t&>(x), a)
{}
- //! <b>Effects</b>: Move constructs a flat_multiset using the specified allocator.
- //! Constructs *this using x's resources.
- //!
- //! <b>Complexity</b>: Constant if a == mx.get_allocator(), linear otherwise
+ //! @copydoc ::boost::container::flat_set(flat_set &&, const allocator_type &)
flat_multiset(BOOST_RV_REF(flat_multiset) mx, const allocator_type &a)
- : m_flat_tree(boost::move(mx.m_flat_tree), a)
+ : base_t(boost::move(static_cast<base_t&>(mx)), a)
{}
- //! <b>Effects</b>: Makes *this a copy of x.
- //!
- //! <b>Complexity</b>: Linear in x.size().
+ //! @copydoc ::boost::container::flat_set::operator=(const flat_set &)
flat_multiset& operator=(BOOST_COPY_ASSIGN_REF(flat_multiset) x)
- { m_flat_tree = x.m_flat_tree; return *this; }
+ { return static_cast<flat_multiset&>(this->base_t::operator=(static_cast<const base_t&>(x))); }
- //! <b>Effects</b>: Makes *this a copy of x.
- //!
- //! <b>Complexity</b>: Linear in x.size().
+ //! @copydoc ::boost::container::flat_set::operator=(flat_set &&)
flat_multiset& operator=(BOOST_RV_REF(flat_multiset) mx)
- { m_flat_tree = boost::move(mx.m_flat_tree); return *this; }
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
+ { return static_cast<flat_multiset&>(this->base_t::operator=(boost::move(static_cast<base_t&>(mx)))); }
- //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the object's constructor.
- //!
- //! <b>Complexity</b>: Constant.
- allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.get_allocator(); }
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! <b>Effects</b>: Returns a reference to the internal allocator.
- //!
- //! <b>Throws</b>: Nothing
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Note</b>: Non-standard extension.
- stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.get_stored_allocator(); }
+ //! @copydoc ::boost::container::flat_set::get_allocator()
+ allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a reference to the internal allocator.
- //!
- //! <b>Throws</b>: Nothing
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Note</b>: Non-standard extension.
- const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.get_stored_allocator(); }
+ //! @copydoc ::boost::container::flat_set::get_stored_allocator()
+ stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns an iterator to the first element contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- iterator begin() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.begin(); }
+ //! @copydoc ::boost::container::flat_set::get_stored_allocator() const
+ const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator begin() const
- { return m_flat_tree.begin(); }
+ //! @copydoc ::boost::container::flat_set::begin()
+ iterator begin() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.cbegin(); }
+ //! @copydoc ::boost::container::flat_set::begin() const
+ const_iterator begin() const;
- //! <b>Effects</b>: Returns an iterator to the end of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- iterator end() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.end(); }
+ //! @copydoc ::boost::container::flat_set::cbegin() const
+ const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator end() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.end(); }
+ //! @copydoc ::boost::container::flat_set::end()
+ iterator end() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.cend(); }
+ //! @copydoc ::boost::container::flat_set::end() const
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.rbegin(); }
+ //! @copydoc ::boost::container::flat_set::cend() const
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.rbegin(); }
+ //! @copydoc ::boost::container::flat_set::rbegin()
+ reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.crbegin(); }
+ //! @copydoc ::boost::container::flat_set::rbegin() const
+ const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.rend(); }
+ //! @copydoc ::boost::container::flat_set::crbegin() const
+ const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.rend(); }
+ //! @copydoc ::boost::container::flat_set::rend()
+ reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.crend(); }
+ //! @copydoc ::boost::container::flat_set::rend() const
+ const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT;
- //////////////////////////////////////////////
- //
- // capacity
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::flat_set::crend() const
+ const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns true if the container contains no elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- bool empty() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.empty(); }
+ //! @copydoc ::boost::container::flat_set::empty() const
+ bool empty() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns the number of the elements contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- size_type size() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.size(); }
+ //! @copydoc ::boost::container::flat_set::size() const
+ size_type size() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns the largest possible size of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- size_type max_size() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.max_size(); }
+ //! @copydoc ::boost::container::flat_set::max_size() const
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Number of elements for which memory has been allocated.
- //! capacity() is always greater than or equal to size().
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- size_type capacity() const BOOST_CONTAINER_NOEXCEPT
- { return m_flat_tree.capacity(); }
+ //! @copydoc ::boost::container::flat_set::capacity() const
+ size_type capacity() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: 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.
- //!
- //! <b>Throws</b>: If memory allocation allocation throws or Key's copy constructor throws.
- //!
- //! <b>Note</b>: If capacity() is less than "cnt", iterators and references to
- //! to values might be invalidated.
- void reserve(size_type cnt)
- { m_flat_tree.reserve(cnt); }
+ //! @copydoc ::boost::container::flat_set::reserve(size_type)
+ void reserve(size_type cnt);
- //! <b>Effects</b>: Tries to deallocate the excess of memory created
- // with previous allocations. The size of the vector is unchanged
- //!
- //! <b>Throws</b>: If memory allocation throws, or Key's copy constructor throws.
- //!
- //! <b>Complexity</b>: Linear to size().
- void shrink_to_fit()
- { m_flat_tree.shrink_to_fit(); }
+ //! @copydoc ::boost::container::flat_set::shrink_to_fit()
+ void shrink_to_fit();
+
+ #endif // #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//////////////////////////////////////////////
//
@@ -1087,7 +898,7 @@ class flat_multiset
//! <b>Note</b>: If an element is inserted it might invalidate elements.
template <class... Args>
iterator emplace(Args&&... args)
- { return m_flat_tree.emplace_equal(boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_equal(boost::forward<Args>(args)...); }
//! <b>Effects</b>: Inserts an object of type Key constructed with
//! std::forward<Args>(args)... in the container.
@@ -1102,19 +913,19 @@ class flat_multiset
//! <b>Note</b>: If an element is inserted it might invalidate elements.
template <class... Args>
iterator emplace_hint(const_iterator hint, Args&&... args)
- { return m_flat_tree.emplace_hint_equal(hint, boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_hint_equal(hint, boost::forward<Args>(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 m_flat_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
+ { return this->base_t::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 m_flat_tree.emplace_hint_equal \
+ { return this->base_t::emplace_hint_equal \
(hint BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
//!
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
@@ -1169,7 +980,7 @@ class flat_multiset
//! <b>Note</b>: 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)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, value_type, iterator, this->priv_insert, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: first, last are not iterators into *this.
@@ -1182,7 +993,7 @@ class flat_multiset
//! <b>Note</b>: If an element is inserted it might invalidate elements.
template <class InputIterator>
void insert(InputIterator first, InputIterator last)
- { m_flat_tree.insert_equal(first, last); }
+ { this->base_t::insert_equal(first, last); }
//! <b>Requires</b>: first, last are not iterators into *this and
//! must be ordered according to the predicate.
@@ -1196,196 +1007,108 @@ class flat_multiset
//! <b>Note</b>: Non-standard extension. If an element is inserted it might invalidate elements.
template <class InputIterator>
void insert(ordered_range_t, InputIterator first, InputIterator last)
- { m_flat_tree.insert_equal(ordered_range, first, last); }
+ { this->base_t::insert_equal(ordered_range, first, last); }
- //! <b>Effects</b>: Erases the element pointed to by position.
- //!
- //! <b>Returns</b>: Returns an iterator pointing to the element immediately
- //! following q prior to the element being erased. If no such element exists,
- //! returns end().
- //!
- //! <b>Complexity</b>: Linear to the elements with keys bigger than position
- //!
- //! <b>Note</b>: Invalidates elements with keys
- //! not less than the erased element.
- iterator erase(const_iterator position)
- { return m_flat_tree.erase(position); }
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
- //!
- //! <b>Returns</b>: Returns the number of erased elements.
- //!
- //! <b>Complexity</b>: Logarithmic search time plus erasure time
- //! linear to the elements with bigger keys.
- size_type erase(const key_type& x)
- { return m_flat_tree.erase(x); }
+ //! @copydoc ::boost::container::flat_set::erase(const_iterator)
+ iterator erase(const_iterator position);
- //! <b>Effects</b>: Erases all the elements in the range [first, last).
- //!
- //! <b>Returns</b>: Returns last.
- //!
- //! <b>Complexity</b>: size()*N where N is the distance from first to last.
- //!
- //! <b>Complexity</b>: Logarithmic search time plus erasure time
- //! linear to the elements with bigger keys.
- iterator erase(const_iterator first, const_iterator last)
- { return m_flat_tree.erase(first, last); }
+ //! @copydoc ::boost::container::flat_set::erase(const key_type&)
+ size_type erase(const key_type& x);
- //! <b>Effects</b>: Swaps the contents of *this and x.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- void swap(flat_multiset& x)
- { m_flat_tree.swap(x.m_flat_tree); }
+ //! @copydoc ::boost::container::flat_set::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator first, const_iterator last);
- //! <b>Effects</b>: erase(a.begin(),a.end()).
- //!
- //! <b>Postcondition</b>: size() == 0.
- //!
- //! <b>Complexity</b>: linear in size().
- void clear() BOOST_CONTAINER_NOEXCEPT
- { m_flat_tree.clear(); }
+ //! @copydoc ::boost::container::flat_set::swap
+ void swap(flat_multiset& x);
- //////////////////////////////////////////////
- //
- // observers
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::flat_set::clear
+ void clear() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns the comparison object out
- //! of which a was constructed.
- //!
- //! <b>Complexity</b>: Constant.
- key_compare key_comp() const
- { return m_flat_tree.key_comp(); }
+ //! @copydoc ::boost::container::flat_set::key_comp
+ key_compare key_comp() const;
- //! <b>Effects</b>: Returns an object of value_compare constructed out
- //! of the comparison object.
- //!
- //! <b>Complexity</b>: Constant.
- value_compare value_comp() const
- { return m_flat_tree.key_comp(); }
+ //! @copydoc ::boost::container::flat_set::value_comp
+ value_compare value_comp() const;
- //////////////////////////////////////////////
- //
- // set operations
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::flat_set::find(const key_type& )
+ iterator find(const key_type& x);
- //! <b>Returns</b>: An iterator pointing to an element with the key
- //! equivalent to x, or end() if such an element is not found.
- //!
- //! <b>Complexity</b>: Logarithmic.
- iterator find(const key_type& x)
- { return m_flat_tree.find(x); }
+ //! @copydoc ::boost::container::flat_set::find(const key_type& ) const
+ const_iterator find(const key_type& x) const;
- //! <b>Returns</b>: Allocator const_iterator pointing to an element with the key
- //! equivalent to x, or end() if such an element is not found.
- //!
- //! <b>Complexity</b>: Logarithmic.s
- const_iterator find(const key_type& x) const
- { return m_flat_tree.find(x); }
+ //! @copydoc ::boost::container::flat_set::count(const key_type& ) const
+ size_type count(const key_type& x) const;
- //! <b>Returns</b>: The number of elements with key equivalent to x.
+ //! @copydoc ::boost::container::flat_set::lower_bound(const key_type& )
+ iterator lower_bound(const key_type& x);
+
+ //! @copydoc ::boost::container::flat_set::lower_bound(const key_type& ) const
+ const_iterator lower_bound(const key_type& x) const;
+
+ //! @copydoc ::boost::container::flat_set::upper_bound(const key_type& )
+ iterator upper_bound(const key_type& x);
+
+ //! @copydoc ::boost::container::flat_set::upper_bound(const key_type& ) const
+ const_iterator upper_bound(const key_type& x) const;
+
+ //! @copydoc ::boost::container::flat_set::equal_range(const key_type& ) const
+ std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const;
+
+ //! @copydoc ::boost::container::flat_set::equal_range(const key_type& )
+ std::pair<iterator,iterator> equal_range(const key_type& x);
+
+ //! <b>Effects</b>: Returns true if x and y are equal
//!
- //! <b>Complexity</b>: log(size())+count(k)
- size_type count(const key_type& x) const
- { return m_flat_tree.count(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const flat_multiset& x, const flat_multiset& y);
- //! <b>Returns</b>: An iterator pointing to the first element with key not less
- //! than k, or a.end() if such an element is not found.
+ //! <b>Effects</b>: Returns true if x and y are unequal
//!
- //! <b>Complexity</b>: Logarithmic
- iterator lower_bound(const key_type& x)
- { return m_flat_tree.lower_bound(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const flat_multiset& x, const flat_multiset& y);
- //! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
- //! less than k, or a.end() if such an element is not found.
+ //! <b>Effects</b>: Returns true if x is less than y
//!
- //! <b>Complexity</b>: Logarithmic
- const_iterator lower_bound(const key_type& x) const
- { return m_flat_tree.lower_bound(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const flat_multiset& x, const flat_multiset& y);
- //! <b>Returns</b>: An iterator pointing to the first element with key not less
- //! than x, or end() if such an element is not found.
+ //! <b>Effects</b>: Returns true if x is greater than y
//!
- //! <b>Complexity</b>: Logarithmic
- iterator upper_bound(const key_type& x)
- { return m_flat_tree.upper_bound(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const flat_multiset& x, const flat_multiset& y);
- //! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
- //! less than x, or end() if such an element is not found.
+ //! <b>Effects</b>: Returns true if x is equal or less than y
//!
- //! <b>Complexity</b>: Logarithmic
- const_iterator upper_bound(const key_type& x) const
- { return m_flat_tree.upper_bound(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const flat_multiset& x, const flat_multiset& y);
- //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
//!
- //! <b>Complexity</b>: Logarithmic
- std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const
- { return m_flat_tree.equal_range(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const flat_multiset& x, const flat_multiset& y);
- //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
+ //! <b>Effects</b>: x.swap(y)
//!
- //! <b>Complexity</b>: Logarithmic
- std::pair<iterator,iterator> equal_range(const key_type& x)
- { return m_flat_tree.equal_range(x); }
-
- /// @cond
- template <class K1, class C1, class A1>
- friend bool operator== (const flat_multiset<K1,C1,A1>&,
- const flat_multiset<K1,C1,A1>&);
- template <class K1, class C1, class A1>
- friend bool operator< (const flat_multiset<K1,C1,A1>&,
- const flat_multiset<K1,C1,A1>&);
+ //! <b>Complexity</b>: Constant.
+ friend void swap(flat_multiset& x, flat_multiset& y);
+
+ #endif //#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
template <class KeyType>
iterator priv_insert(BOOST_FWD_REF(KeyType) x)
- { return m_flat_tree.insert_equal(::boost::forward<KeyType>(x)); }
+ { return this->base_t::insert_equal(::boost::forward<KeyType>(x)); }
template <class KeyType>
iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x)
- { return m_flat_tree.insert_equal(p, ::boost::forward<KeyType>(x)); }
- /// @endcond
+ { return this->base_t::insert_equal(p, ::boost::forward<KeyType>(x)); }
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
-template <class Key, class Compare, class Allocator>
-inline bool operator==(const flat_multiset<Key,Compare,Allocator>& x,
- const flat_multiset<Key,Compare,Allocator>& y)
- { return x.m_flat_tree == y.m_flat_tree; }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator<(const flat_multiset<Key,Compare,Allocator>& x,
- const flat_multiset<Key,Compare,Allocator>& y)
- { return x.m_flat_tree < y.m_flat_tree; }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator!=(const flat_multiset<Key,Compare,Allocator>& x,
- const flat_multiset<Key,Compare,Allocator>& y)
- { return !(x == y); }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator>(const flat_multiset<Key,Compare,Allocator>& x,
- const flat_multiset<Key,Compare,Allocator>& y)
- { return y < x; }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator<=(const flat_multiset<Key,Compare,Allocator>& x,
- const flat_multiset<Key,Compare,Allocator>& y)
- { return !(y < x); }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator>=(const flat_multiset<Key,Compare,Allocator>& x,
- const flat_multiset<Key,Compare,Allocator>& y)
-{ return !(x < y); }
-
-template <class Key, class Compare, class Allocator>
-inline void swap(flat_multiset<Key,Compare,Allocator>& x, flat_multiset<Key,Compare,Allocator>& y)
- { x.swap(y); }
-
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
} //namespace container {
@@ -1399,7 +1122,7 @@ struct has_trivial_destructor_after_move<boost::container::flat_multiset<Key, C,
namespace container {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
}}
diff --git a/3party/boost/boost/container/list.hpp b/3party/boost/boost/container/list.hpp
index 79f4a6b73d..291c190035 100644
--- a/3party/boost/boost/container/list.hpp
+++ b/3party/boost/boost/container/list.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -10,7 +10,7 @@
#ifndef BOOST_CONTAINER_LIST_HPP
#define BOOST_CONTAINER_LIST_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -18,6 +18,8 @@
#include <boost/container/detail/workaround.hpp>
#include <boost/container/container_fwd.hpp>
#include <boost/container/detail/version_type.hpp>
+#include <boost/container/detail/iterators.hpp>
+#include <boost/container/detail/mpl.hpp>
#include <boost/container/throw_exception.hpp>
#include <boost/move/utility.hpp>
#include <boost/move/iterator.hpp>
@@ -26,7 +28,6 @@
#include <boost/container/detail/utilities.hpp>
#include <boost/container/detail/algorithms.hpp>
#include <boost/type_traits/has_trivial_destructor.hpp>
-#include <boost/container/detail/mpl.hpp>
#include <boost/intrusive/list.hpp>
#include <boost/assert.hpp>
#include <boost/container/detail/node_alloc_holder.hpp>
@@ -46,7 +47,7 @@
namespace boost {
namespace container {
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace container_detail {
template<class VoidPointer>
@@ -64,8 +65,16 @@ struct list_node
list_node();
public:
+ typedef T value_type;
typedef typename list_hook<VoidPointer>::type hook_type;
+
T m_data;
+
+ T &get_data()
+ { return this->m_data; }
+
+ const T &get_data() const
+ { return this->m_data; }
};
template<class Allocator>
@@ -89,107 +98,8 @@ struct intrusive_list_type
typedef container_type type ;
};
-template<class T, class IIterator>
-class list_const_iterator
- : public std::iterator< std::bidirectional_iterator_tag, T
- , typename iiterator_types<T, IIterator>::difference_type
- , typename iiterator_types<T, IIterator>::const_pointer
- , typename iiterator_types<T, IIterator>::const_reference>
-{
- protected:
-
- IIterator m_it;
-
- public:
- typedef typename iiterator_types<T, IIterator>::const_pointer const_pointer;
- typedef typename iiterator_types<T, IIterator>::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<const_pointer>::pointer_to(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; }
-
- const IIterator &get() const
- { return this->m_it; }
-};
-
-template<class T, class IIterator>
-class list_iterator
- : public list_const_iterator<T, IIterator>
-{
- private:
- typedef list_const_iterator<T, IIterator> const_iterator;
-
- public:
- typedef typename iiterator_types<T, IIterator>::pointer pointer;
- typedef typename iiterator_types<T, IIterator>::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>::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); }
-
- const IIterator &get() const
- { return this->m_it; }
-};
-
} //namespace container_detail {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! A list is a doubly linked list. That is, it is a Sequence that supports both
//! forward and backward traversal, and (amortized) constant time insertion and
@@ -201,6 +111,9 @@ class list_iterator
//! after a list operation than it did before), but the iterators themselves will
//! not be invalidated or made to point to different elements unless that invalidation
//! or mutation is explicit.
+//!
+//! \tparam T The type of object that is stored in the list
+//! \tparam Allocator The allocator used for all internal memory management
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class T, class Allocator = std::allocator<T> >
#else
@@ -210,7 +123,7 @@ class list
: protected container_detail::node_alloc_holder
<Allocator, typename container_detail::intrusive_list_type<Allocator>::type>
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
typedef typename
container_detail::intrusive_list_type<Allocator>::type Icont;
typedef container_detail::node_alloc_holder<Allocator, Icont> AllocHolder;
@@ -255,9 +168,9 @@ class list
BOOST_COPYABLE_AND_MOVABLE(list)
- typedef container_detail::list_iterator<T, typename Icont::iterator> iterator_impl;
- typedef container_detail::list_const_iterator<T, typename Icont::iterator>const_iterator_impl;
- /// @endcond
+ typedef container_detail::iterator<typename Icont::iterator, false> iterator_impl;
+ typedef container_detail::iterator<typename Icont::iterator, true> const_iterator_impl;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -307,7 +220,7 @@ class list
//! <b>Effects</b>: Constructs a list that will use a copy of allocator a
//! and inserts n copies of value.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
+ //! <b>Throws</b>: If allocator_type's default constructor
//! throws or T's default or copy constructor throws.
//!
//! <b>Complexity</b>: Linear to n.
@@ -318,7 +231,7 @@ class list
//! <b>Effects</b>: Constructs a list that will use a copy of allocator a
//! and inserts n copies of value.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
+ //! <b>Throws</b>: If allocator_type's default constructor
//! throws or T's default or copy constructor throws.
//!
//! <b>Complexity</b>: Linear to n.
@@ -330,7 +243,7 @@ class list
//!
//! <b>Postcondition</b>: x == *this.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor throws.
+ //! <b>Throws</b>: If allocator_type's default constructor throws.
//!
//! <b>Complexity</b>: Linear to the elements x contains.
list(const list& x)
@@ -377,8 +290,8 @@ class list
//! <b>Effects</b>: Constructs a list that will use a copy of allocator a
//! and inserts a copy of the range [first, last) in the list.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
- //! throws or T's constructor taking an dereferenced InIt throws.
+ //! <b>Throws</b>: If allocator_type's default constructor
+ //! throws or T's constructor taking a dereferenced InIt throws.
//!
//! <b>Complexity</b>: Linear to the range [first, last).
template <class InpIt>
@@ -419,33 +332,40 @@ class list
return *this;
}
- //! <b>Effects</b>: Move assignment. All mx's values are transferred to *this.
+ //! <b>Effects</b>: Move assignment. All x's values are transferred to *this.
//!
//! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
//! before the function.
//!
- //! <b>Throws</b>: If allocator_type's copy constructor throws.
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and (allocation throws or value_type's move constructor throws)
//!
- //! <b>Complexity</b>: Constant.
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
list& operator=(BOOST_RV_REF(list) x)
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
{
- 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>::iterator_category ItCat;
- this->assign( boost::make_move_iterator(x.begin())
- , boost::make_move_iterator(x.end()));
- }
+ BOOST_ASSERT(this != &x);
+ NodeAlloc &this_alloc = this->node_alloc();
+ NodeAlloc &x_alloc = x.node_alloc();
+ const bool propagate_alloc = allocator_traits_type::
+ propagate_on_container_move_assignment::value;
+ const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
+ //Resources can be transferred if both allocators are
+ //going to be equal after this function (either propagated or already equal)
+ if(propagate_alloc || allocators_equal){
+ //Destroy
+ this->clear();
+ //Move allocator if needed
+ this->AllocHolder::move_assign_alloc(x);
+ //Obtain resources
+ this->icont() = boost::move(x.icont());
+ }
+ //Else do a one by one move
+ else{
+ this->assign( boost::make_move_iterator(x.begin())
+ , boost::make_move_iterator(x.end()));
}
return *this;
}
@@ -654,7 +574,7 @@ class list
{ return AllocHolder::max_size(); }
//! <b>Effects</b>: Inserts or erases elements at the end such that
- //! the size becomes n. New elements are default constructed.
+ //! the size becomes n. New elements are value initialized.
//!
//! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
//!
@@ -662,8 +582,8 @@ class list
void resize(size_type new_size)
{
if(!priv_try_shrink(new_size)){
- typedef default_construct_iterator<value_type, difference_type> default_iterator;
- this->insert(this->cend(), default_iterator(new_size - this->size()), default_iterator());
+ typedef value_init_construct_iterator<value_type, difference_type> value_init_iterator;
+ this->insert(this->cend(), value_init_iterator(new_size - this->size()), value_init_iterator());
}
}
@@ -868,7 +788,7 @@ class list
//! <b>Complexity</b>: Amortized constant time.
iterator insert(const_iterator position, T &&x);
#else
- BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: p must be a valid iterator of *this.
@@ -1273,7 +1193,7 @@ class list
//! <b>Throws</b>: If comparison throws.
//!
//! <b>Notes</b>: Iterators and references are not invalidated.
- //!
+ //!
//! <b>Complexity</b>: The number of comparisons is approximately N log N, where N
//! is the list's size.
void sort()
@@ -1305,9 +1225,65 @@ class list
//!
//! <b>Note</b>: Iterators and references are not invalidated
void reverse() BOOST_CONTAINER_NOEXCEPT
- { this->icont().reverse(); }
+ { this->icont().reverse(); }
+
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const list& x, const list& y)
+ {
+ if(x.size() != y.size()){
+ return false;
+ }
+ typedef typename list::const_iterator const_iterator;
+ const_iterator end1 = x.end();
+
+ const_iterator i1 = x.begin();
+ const_iterator i2 = y.begin();
+ while (i1 != end1 && *i1 == *i2) {
+ ++i1;
+ ++i2;
+ }
+ return i1 == end1;
+ }
+
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const list& x, const list& y)
+ { return !(x == y); }
+
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const list& x, const list& y)
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
+
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const list& x, const list& y)
+ { return y < x; }
+
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const list& x, const list& y)
+ { return !(y < x); }
+
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const list& x, const list& y)
+ { return !(x < y); }
+
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(list& x, list& y)
+ { x.swap(y); }
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
bool priv_try_shrink(size_type new_size)
@@ -1350,13 +1326,13 @@ class list
return iterator(this->icont().insert(p.get(), *tmp));
}
- void priv_push_back (const T &x)
+ void priv_push_back (const T &x)
{ this->insert(this->cend(), x); }
void priv_push_back (BOOST_RV_REF(T) x)
{ this->insert(this->cend(), boost::move(x)); }
- void priv_push_front (const T &x)
+ void priv_push_front (const T &x)
{ this->insert(this->cbegin(), x); }
void priv_push_front (BOOST_RV_REF(T) x)
@@ -1394,66 +1370,11 @@ class list
bool operator()(const value_type &a, const value_type &b) const
{ return a == b; }
};
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
-template <class T, class Allocator>
-inline bool operator==(const list<T,Allocator>& x, const list<T,Allocator>& y)
-{
- if(x.size() != y.size()){
- return false;
- }
- typedef typename list<T,Allocator>::const_iterator const_iterator;
- const_iterator end1 = x.end();
-
- const_iterator i1 = x.begin();
- const_iterator i2 = y.begin();
- while (i1 != end1 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1;
-}
-
-template <class T, class Allocator>
-inline bool operator<(const list<T,Allocator>& x,
- const list<T,Allocator>& y)
-{
- return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-template <class T, class Allocator>
-inline bool operator!=(const list<T,Allocator>& x, const list<T,Allocator>& y)
-{
- return !(x == y);
-}
-
-template <class T, class Allocator>
-inline bool operator>(const list<T,Allocator>& x, const list<T,Allocator>& y)
-{
- return y < x;
-}
-
-template <class T, class Allocator>
-inline bool operator<=(const list<T,Allocator>& x, const list<T,Allocator>& y)
-{
- return !(y < x);
-}
-
-template <class T, class Allocator>
-inline bool operator>=(const list<T,Allocator>& x, const list<T,Allocator>& y)
-{
- return !(x < y);
-}
-
-template <class T, class Allocator>
-inline void swap(list<T, Allocator>& x, list<T, Allocator>& y)
-{
- x.swap(y);
-}
-
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
} //namespace container {
@@ -1466,7 +1387,7 @@ struct has_trivial_destructor_after_move<boost::container::list<T, Allocator> >
namespace container {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
}}
diff --git a/3party/boost/boost/container/map.hpp b/3party/boost/boost/container/map.hpp
index b1faf495ab..ec1c30a3db 100644
--- a/3party/boost/boost/container/map.hpp
+++ b/3party/boost/boost/container/map.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,7 +11,7 @@
#ifndef BOOST_CONTAINER_MAP_HPP
#define BOOST_CONTAINER_MAP_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -39,49 +39,47 @@
namespace boost {
namespace container {
-/// @cond
-// Forward declarations of operators == and <, needed for friend declarations.
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator==(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-/// @endcond
+#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
//! A map is a kind of associative container that supports unique keys (contains at
//! most one of each key value) and provides for fast retrieval of values of another
//! type T based on the keys. The map class supports bidirectional iterators.
//!
//! A map satisfies all of the requirements of a container and of a reversible
-//! container and of an associative container. For a
-//! map<Key,T> the key_type is Key and the value_type is std::pair<const Key,T>.
-//!
-//! Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
+//! container and of an associative container. The <code>value_type</code> stored
+//! by this container is the value_type is std::pair<const Key, T>.
//!
-//! Allocator is the allocator to allocate the value_types
-//! (e.g. <i>allocator< std::pair<const Key, T> > </i>).
-#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
-template <class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator< std::pair< const Key, T> > >
+//! \tparam Key is the key_type of the map
+//! \tparam Value is the <code>mapped_type</code>
+//! \tparam Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
+//! \tparam Allocator is the allocator to allocate the <code>value_type</code>s
+//! (e.g. <i>allocator< std::pair<const Key, T> > </i>).
+//! \tparam MapOptions is an packed option type generated using using boost::container::tree_assoc_options.
+template < class Key, class T, class Compare = std::less<Key>
+ , class Allocator = std::allocator< std::pair< const Key, T> >, class MapOptions = tree_assoc_defaults >
#else
-template <class Key, class T, class Compare, class Allocator>
+template <class Key, class T, class Compare, class Allocator, class MapOptions>
#endif
class map
+ ///@cond
+ : public container_detail::tree
+ < Key, std::pair<const Key, T>
+ , container_detail::select1st< std::pair<const Key, T> >
+ , Compare, Allocator, MapOptions>
+ ///@endcond
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(map)
typedef std::pair<const Key, T> value_type_impl;
- typedef container_detail::rbtree
- <Key, value_type_impl, container_detail::select1st<value_type_impl>, Compare, Allocator> tree_t;
+ typedef container_detail::tree
+ <Key, value_type_impl, container_detail::select1st<value_type_impl>, Compare, Allocator, MapOptions> base_t;
typedef container_detail::pair <Key, T> movable_value_type_impl;
typedef container_detail::tree_value_compare
< Key, value_type_impl, Compare, container_detail::select1st<value_type_impl>
> value_compare_impl;
- tree_t m_tree; // red-black tree representing map
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -91,6 +89,7 @@ class map
//////////////////////////////////////////////
typedef Key key_type;
+ typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
typedef T mapped_type;
typedef std::pair<const Key, T> value_type;
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
@@ -100,13 +99,13 @@ class map
typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
typedef typename boost::container::allocator_traits<Allocator>::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(base_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 typename BOOST_CONTAINER_IMPDEF(base_t::iterator) iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_iterator) const_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::reverse_iterator) reverse_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_reverse_iterator) const_reverse_iterator;
typedef std::pair<key_type, mapped_type> nonconst_value_type;
typedef BOOST_CONTAINER_IMPDEF(movable_value_type_impl) movable_value_type;
@@ -120,7 +119,7 @@ class map
//!
//! <b>Complexity</b>: Constant.
map()
- : m_tree()
+ : base_t()
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -132,7 +131,17 @@ class map
//! <b>Complexity</b>: Constant.
explicit map(const Compare& comp,
const allocator_type& a = allocator_type())
- : m_tree(comp, a)
+ : base_t(comp, a)
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
+ }
+
+ //! <b>Effects</b>: Constructs an empty map using the specified allocator.
+ //!
+ //! <b>Complexity</b>: Constant.
+ explicit map(const allocator_type& a)
+ : base_t(a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -146,7 +155,7 @@ class map
template <class InputIterator>
map(InputIterator first, InputIterator last, const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
- : m_tree(true, first, last, comp, a)
+ : base_t(true, first, last, comp, a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -160,10 +169,12 @@ class map
//! unique values.
//!
//! <b>Complexity</b>: Linear in N.
+ //!
+ //! <b>Note</b>: Non-standard extension.
template <class InputIterator>
map( ordered_unique_range_t, InputIterator first, InputIterator last
, const Compare& comp = Compare(), const allocator_type& a = allocator_type())
- : m_tree(ordered_range, first, last, comp, a)
+ : base_t(ordered_range, first, last, comp, a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -173,7 +184,7 @@ class map
//!
//! <b>Complexity</b>: Linear in x.size().
map(const map& x)
- : m_tree(x.m_tree)
+ : base_t(static_cast<const base_t&>(x))
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -185,7 +196,7 @@ class map
//!
//! <b>Postcondition</b>: x is emptied.
map(BOOST_RV_REF(map) x)
- : m_tree(boost::move(x.m_tree))
+ : base_t(boost::move(static_cast<base_t&>(x)))
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -195,7 +206,7 @@ class map
//!
//! <b>Complexity</b>: Linear in x.size().
map(const map& x, const allocator_type &a)
- : m_tree(x.m_tree, a)
+ : base_t(static_cast<const base_t&>(x), a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -208,7 +219,7 @@ class map
//!
//! <b>Postcondition</b>: x is emptied.
map(BOOST_RV_REF(map) x, const allocator_type &a)
- : m_tree(boost::move(x.m_tree), a)
+ : base_t(boost::move(static_cast<base_t&>(x)), a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -218,20 +229,27 @@ class map
//!
//! <b>Complexity</b>: Linear in x.size().
map& operator=(BOOST_COPY_ASSIGN_REF(map) x)
- { m_tree = x.m_tree; return *this; }
+ { return static_cast<map&>(this->base_t::operator=(static_cast<const base_t&>(x))); }
//! <b>Effects</b>: this->swap(x.get()).
//!
- //! <b>Complexity</b>: Constant.
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and (allocation throws or value_type's move constructor throws)
+ //!
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
map& operator=(BOOST_RV_REF(map) x)
- { m_tree = boost::move(x.m_tree); return *this; }
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
+ { return static_cast<map&>(this->base_t::operator=(boost::move(static_cast<base_t&>(x)))); }
+
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Effects</b>: Returns a copy of the Allocator that
//! was passed to the object's constructor.
//!
//! <b>Complexity</b>: Constant.
- allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.get_allocator(); }
+ allocator_type get_allocator() const;
//! <b>Effects</b>: Returns a reference to the internal allocator.
//!
@@ -240,8 +258,7 @@ class map
//! <b>Complexity</b>: Constant.
//!
//! <b>Note</b>: Non-standard extension.
- stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.get_stored_allocator(); }
+ stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a reference to the internal allocator.
//!
@@ -250,107 +267,89 @@ class map
//! <b>Complexity</b>: Constant.
//!
//! <b>Note</b>: Non-standard extension.
- const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.get_stored_allocator(); }
-
- //////////////////////////////////////////////
- //
- // iterators
- //
- //////////////////////////////////////////////
+ const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns an iterator to the first element contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- iterator begin() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.begin(); }
+ iterator begin() BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
- { return this->cbegin(); }
+ const_iterator begin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns an iterator to the end of the container.
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- iterator end() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.end(); }
+ const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
+ //! <b>Effects</b>: Returns an iterator to the end of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator end() const BOOST_CONTAINER_NOEXCEPT
- { return this->cend(); }
+ iterator end() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
- //! of the reversed container.
+ //! <b>Effects</b>: Returns a const_iterator to the end of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.rbegin(); }
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed container.
+ //! <b>Effects</b>: Returns a const_iterator to the end of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
- { return this->crbegin(); }
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
//! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.rend(); }
+ reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
//! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
- { return this->crend(); }
+ const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
+ //! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.begin(); }
+ const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
+ //! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.end(); }
+ reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
//! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.rbegin(); }
+ const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
//! of the reversed container.
@@ -358,44 +357,30 @@ class map
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.rend(); }
-
- //////////////////////////////////////////////
- //
- // capacity
- //
- //////////////////////////////////////////////
+ const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns true if the container contains no elements.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- bool empty() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.empty(); }
+ bool empty() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns the number of the elements contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- size_type size() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.size(); }
+ size_type size() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns the largest possible size of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- size_type max_size() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.max_size(); }
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT;
- //////////////////////////////////////////////
- //
- // element access
- //
- //////////////////////////////////////////////
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! Effects: If there is no key equivalent to x in the map, inserts
@@ -456,7 +441,7 @@ class map
//!
//! <b>Complexity</b>: Logarithmic.
std::pair<iterator,bool> insert(const value_type& x)
- { return m_tree.insert_unique(x); }
+ { return this->base_t::insert_unique(x); }
//! <b>Effects</b>: Inserts a new value_type created from the pair if and only if
//! there is no element in the container with key equivalent to the key of x.
@@ -467,7 +452,7 @@ class map
//!
//! <b>Complexity</b>: Logarithmic.
std::pair<iterator,bool> insert(const nonconst_value_type& x)
- { return m_tree.insert_unique(x); }
+ { return this->base_t::insert_unique(x); }
//! <b>Effects</b>: 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.
@@ -478,7 +463,7 @@ class map
//!
//! <b>Complexity</b>: Logarithmic.
std::pair<iterator,bool> insert(BOOST_RV_REF(nonconst_value_type) x)
- { return m_tree.insert_unique(boost::move(x)); }
+ { return this->base_t::insert_unique(boost::move(x)); }
//! <b>Effects</b>: 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.
@@ -489,7 +474,7 @@ class map
//!
//! <b>Complexity</b>: Logarithmic.
std::pair<iterator,bool> insert(BOOST_RV_REF(movable_value_type) x)
- { return m_tree.insert_unique(boost::move(x)); }
+ { return this->base_t::insert_unique(boost::move(x)); }
//! <b>Effects</b>: 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.
@@ -500,7 +485,7 @@ class map
//!
//! <b>Complexity</b>: Logarithmic.
std::pair<iterator,bool> insert(BOOST_RV_REF(value_type) x)
- { return m_tree.insert_unique(boost::move(x)); }
+ { return this->base_t::insert_unique(boost::move(x)); }
//! <b>Effects</b>: 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.
@@ -512,7 +497,7 @@ class map
//! <b>Complexity</b>: 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_unique(position, x); }
+ { return this->base_t::insert_unique(position, x); }
//! <b>Effects</b>: 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.
@@ -524,7 +509,7 @@ class map
//! <b>Complexity</b>: 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_unique(position, boost::move(x)); }
+ { return this->base_t::insert_unique(position, boost::move(x)); }
//! <b>Effects</b>: 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.
@@ -536,7 +521,7 @@ class map
//! <b>Complexity</b>: 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_unique(position, boost::move(x)); }
+ { return this->base_t::insert_unique(position, boost::move(x)); }
//! <b>Effects</b>: Inserts a copy of x in the container.
//! p is a hint pointing to where the insert should start to search.
@@ -545,7 +530,7 @@ class map
//!
//! <b>Complexity</b>: Logarithmic.
iterator insert(const_iterator position, const nonconst_value_type& x)
- { return m_tree.insert_unique(position, x); }
+ { return this->base_t::insert_unique(position, x); }
//! <b>Effects</b>: Inserts an element move constructed from x in the container.
//! p is a hint pointing to where the insert should start to search.
@@ -554,7 +539,7 @@ class map
//!
//! <b>Complexity</b>: Logarithmic.
iterator insert(const_iterator position, BOOST_RV_REF(value_type) x)
- { return m_tree.insert_unique(position, boost::move(x)); }
+ { return this->base_t::insert_unique(position, boost::move(x)); }
//! <b>Requires</b>: first, last are not iterators into *this.
//!
@@ -564,7 +549,7 @@ class map
//! <b>Complexity</b>: At most N log(size()+N) (N is the distance from first to last)
template <class InputIterator>
void insert(InputIterator first, InputIterator last)
- { m_tree.insert_unique(first, last); }
+ { this->base_t::insert_unique(first, last); }
#if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -581,7 +566,7 @@ class map
//! is inserted right before p.
template <class... Args>
std::pair<iterator,bool> emplace(Args&&... args)
- { return m_tree.emplace_unique(boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_unique(boost::forward<Args>(args)...); }
//! <b>Effects</b>: Inserts an object of type T constructed with
//! std::forward<Args>(args)... in the container if and only if there is
@@ -595,19 +580,19 @@ class map
//! is inserted right before p.
template <class... Args>
iterator emplace_hint(const_iterator hint, Args&&... args)
- { return m_tree.emplace_hint_unique(hint, boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_hint_unique(hint, boost::forward<Args>(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<iterator,bool> emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
- { return m_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
+ { return this->base_t::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 m_tree.emplace_hint_unique(hint \
+ { return this->base_t::emplace_hint_unique(hint \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \
//!
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
@@ -615,6 +600,8 @@ class map
#endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
//! <b>Effects</b>: Erases the element pointed to by position.
//!
//! <b>Returns</b>: Returns an iterator pointing to the element immediately
@@ -622,141 +609,154 @@ class map
//! returns end().
//!
//! <b>Complexity</b>: Amortized constant time
- iterator erase(const_iterator position) BOOST_CONTAINER_NOEXCEPT
- { return m_tree.erase(position); }
+ iterator erase(const_iterator position) BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
//!
//! <b>Returns</b>: Returns the number of erased elements.
//!
//! <b>Complexity</b>: log(size()) + count(k)
- size_type erase(const key_type& x) BOOST_CONTAINER_NOEXCEPT
- { return m_tree.erase(x); }
+ size_type erase(const key_type& x) BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Erases all the elements in the range [first, last).
//!
//! <b>Returns</b>: Returns last.
//!
//! <b>Complexity</b>: log(size())+N where N is the distance from first to last.
- iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
- { return m_tree.erase(first, last); }
+ iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Swaps the contents of *this and x.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- void swap(map& x)
- { m_tree.swap(x.m_tree); }
+ void swap(map& x);
//! <b>Effects</b>: erase(a.begin(),a.end()).
//!
//! <b>Postcondition</b>: size() == 0.
//!
//! <b>Complexity</b>: linear in size().
- void clear() BOOST_CONTAINER_NOEXCEPT
- { m_tree.clear(); }
-
- //////////////////////////////////////////////
- //
- // observers
- //
- //////////////////////////////////////////////
+ void clear() BOOST_CONTAINER_NOEXCEPT;
//! <b>Effects</b>: Returns the comparison object out
//! of which a was constructed.
//!
//! <b>Complexity</b>: Constant.
- key_compare key_comp() const
- { return m_tree.key_comp(); }
+ key_compare key_comp() const;
//! <b>Effects</b>: Returns an object of value_compare constructed out
//! of the comparison object.
//!
//! <b>Complexity</b>: Constant.
- value_compare value_comp() const
- { return value_compare(m_tree.key_comp()); }
-
- //////////////////////////////////////////////
- //
- // map operations
- //
- //////////////////////////////////////////////
+ value_compare value_comp() const;
//! <b>Returns</b>: An iterator pointing to an element with the key
//! equivalent to x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic.
- iterator find(const key_type& x)
- { return m_tree.find(x); }
+ iterator find(const key_type& x);
//! <b>Returns</b>: Allocator const_iterator pointing to an element with the key
//! equivalent to x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic.
- const_iterator find(const key_type& x) const
- { return m_tree.find(x); }
+ const_iterator find(const key_type& x) const;
+
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Returns</b>: The number of elements with key equivalent to x.
//!
//! <b>Complexity</b>: log(size())+count(k)
size_type count(const key_type& x) const
- { return m_tree.find(x) == m_tree.end() ? 0 : 1; }
+ { return static_cast<size_type>(this->find(x) != this->cend()); }
+
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Returns</b>: An iterator pointing to the first element with key not less
//! than k, or a.end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- iterator lower_bound(const key_type& x)
- { return m_tree.lower_bound(x); }
+ iterator lower_bound(const key_type& x);
//! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
//! less than k, or a.end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- const_iterator lower_bound(const key_type& x) const
- { return m_tree.lower_bound(x); }
+ const_iterator lower_bound(const key_type& x) const;
//! <b>Returns</b>: An iterator pointing to the first element with key not less
//! than x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- iterator upper_bound(const key_type& x)
- { return m_tree.upper_bound(x); }
+ iterator upper_bound(const key_type& x);
//! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
//! less than x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- const_iterator upper_bound(const key_type& x) const
- { return m_tree.upper_bound(x); }
+ const_iterator upper_bound(const key_type& x) const;
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
//!
//! <b>Complexity</b>: Logarithmic
- std::pair<iterator,iterator> equal_range(const key_type& x)
- { return m_tree.equal_range(x); }
+ std::pair<iterator,iterator> equal_range(const key_type& x);
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
//!
//! <b>Complexity</b>: Logarithmic
- std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const
- { return m_tree.equal_range(x); }
-
- /// @cond
- template <class K1, class T1, class C1, class A1>
- friend bool operator== (const map<K1, T1, C1, A1>&,
- const map<K1, T1, C1, A1>&);
- template <class K1, class T1, class C1, class A1>
- friend bool operator< (const map<K1, T1, C1, A1>&,
- const map<K1, T1, C1, A1>&);
+ std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const;
+
+ //! <b>Effects</b>: Rebalances the tree. It's a no-op for Red-Black and AVL trees.
+ //!
+ //! <b>Complexity</b>: Linear
+ void rebalance();
+
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const map& x, const map& y);
+
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const map& x, const map& y);
+
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const map& x, const map& y);
+
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const map& x, const map& y);
+
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const map& x, const map& y);
+
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const map& x, const map& y);
+
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(map& x, map& y);
+
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
mapped_type& priv_subscript(const key_type &k)
{
//we can optimize this
- iterator i = lower_bound(k);
+ iterator i = this->lower_bound(k);
// i->first is greater than or equivalent to k.
- if (i == end() || key_comp()(k, (*i).first)){
+ if (i == this->end() || this->key_comp()(k, (*i).first)){
container_detail::value_init<mapped_type> m;
movable_value_type val(k, boost::move(m.m_t));
i = insert(i, boost::move(val));
@@ -768,9 +768,9 @@ class map
{
key_type &k = mk;
//we can optimize this
- iterator i = lower_bound(k);
+ iterator i = this->lower_bound(k);
// i->first is greater than or equivalent to k.
- if (i == end() || key_comp()(k, (*i).first)){
+ if (i == this->end() || this->key_comp()(k, (*i).first)){
container_detail::value_init<mapped_type> m;
movable_value_type val(boost::move(k), boost::move(m.m_t));
i = insert(i, boost::move(val));
@@ -778,54 +778,11 @@ class map
return (*i).second;
}
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator==(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y)
- { return x.m_tree == y.m_tree; }
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y)
- { return x.m_tree < y.m_tree; }
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator!=(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y)
- { return !(x == y); }
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator>(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y)
- { return y < x; }
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<=(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y)
- { return !(y < x); }
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator>=(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y)
- { return !(x < y); }
-
-template <class Key, class T, class Compare, class Allocator>
-inline void swap(map<Key,T,Compare,Allocator>& x, map<Key,T,Compare,Allocator>& y)
- { x.swap(y); }
-
-/// @cond
-
-// Forward declaration of operators < and ==, needed for friend declaration.
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator==(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
} //namespace container {
@@ -839,7 +796,9 @@ struct has_trivial_destructor_after_move<boost::container::map<K, T, C, Allocato
namespace container {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
//! A multimap is a kind of associative container that supports equivalent keys
//! (possibly containing multiple copies of the same key value) and provides for
@@ -847,33 +806,40 @@ namespace container {
//! supports bidirectional iterators.
//!
//! A multimap satisfies all of the requirements of a container and of a reversible
-//! container and of an associative container. For a
-//! map<Key,T> the key_type is Key and the value_type is std::pair<const Key,T>.
+//! container and of an associative container. The <code>value_type</code> stored
+//! by this container is the value_type is std::pair<const Key, T>.
//!
-//! Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
-//!
-//! Allocator is the allocator to allocate the value_types
-//!(e.g. <i>allocator< std::pair<<b>const</b> Key, T> ></i>).
-#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
-template <class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator< std::pair< const Key, T> > >
+//! \tparam Key is the key_type of the map
+//! \tparam Value is the <code>mapped_type</code>
+//! \tparam Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
+//! \tparam Allocator is the allocator to allocate the <code>value_type</code>s
+//! (e.g. <i>allocator< std::pair<const Key, T> > </i>).
+//! \tparam MultiMapOptions is an packed option type generated using using boost::container::tree_assoc_options.
+template < class Key, class T, class Compare = std::less<Key>
+ , class Allocator = std::allocator< std::pair< const Key, T> >, class MultiMapOptions = tree_assoc_defaults>
#else
-template <class Key, class T, class Compare, class Allocator>
+template <class Key, class T, class Compare, class Allocator, class MultiMapOptions>
#endif
class multimap
+ ///@cond
+ : public container_detail::tree
+ < Key, std::pair<const Key, T>
+ , container_detail::select1st< std::pair<const Key, T> >
+ , Compare, Allocator, MultiMapOptions>
+ ///@endcond
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(multimap)
typedef std::pair<const Key, T> value_type_impl;
- typedef container_detail::rbtree
- <Key, value_type_impl, container_detail::select1st<value_type_impl>, Compare, Allocator> tree_t;
+ typedef container_detail::tree
+ <Key, value_type_impl, container_detail::select1st<value_type_impl>, Compare, Allocator, MultiMapOptions> base_t;
typedef container_detail::pair <Key, T> movable_value_type_impl;
typedef container_detail::tree_value_compare
< Key, value_type_impl, Compare, container_detail::select1st<value_type_impl>
> value_compare_impl;
- tree_t m_tree; // red-black tree representing map
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -892,13 +858,13 @@ class multimap
typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
typedef typename boost::container::allocator_traits<Allocator>::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(base_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 typename BOOST_CONTAINER_IMPDEF(base_t::iterator) iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_iterator) const_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::reverse_iterator) reverse_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_reverse_iterator) const_reverse_iterator;
typedef std::pair<key_type, mapped_type> nonconst_value_type;
typedef BOOST_CONTAINER_IMPDEF(movable_value_type_impl) movable_value_type;
@@ -912,7 +878,17 @@ class multimap
//!
//! <b>Complexity</b>: Constant.
multimap()
- : m_tree()
+ : base_t()
+ {
+ //Allocator type must be std::pair<CONST Key, T>
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
+ }
+
+ //! <b>Effects</b>: Constructs an empty multimap using the specified allocator.
+ //!
+ //! <b>Complexity</b>: Constant.
+ explicit multimap(const Compare& comp, const allocator_type& a = allocator_type())
+ : base_t(comp, a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -922,8 +898,8 @@ class multimap
//! object and allocator.
//!
//! <b>Complexity</b>: Constant.
- explicit multimap(const Compare& comp, const allocator_type& a = allocator_type())
- : m_tree(comp, a)
+ explicit multimap(const allocator_type& a)
+ : base_t(a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -938,7 +914,7 @@ class multimap
multimap(InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
- : m_tree(false, first, last, comp, a)
+ : base_t(false, first, last, comp, a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -951,17 +927,19 @@ class multimap
//! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
//!
//! <b>Complexity</b>: Linear in N.
+ //!
+ //! <b>Note</b>: Non-standard extension.
template <class InputIterator>
multimap(ordered_range_t, InputIterator first, InputIterator last, const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
- : m_tree(ordered_range, first, last, comp, a)
+ : base_t(ordered_range, first, last, comp, a)
{}
//! <b>Effects</b>: Copy constructs a multimap.
//!
//! <b>Complexity</b>: Linear in x.size().
multimap(const multimap& x)
- : m_tree(x.m_tree)
+ : base_t(static_cast<const base_t&>(x))
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -973,7 +951,7 @@ class multimap
//!
//! <b>Postcondition</b>: x is emptied.
multimap(BOOST_RV_REF(multimap) x)
- : m_tree(boost::move(x.m_tree))
+ : base_t(boost::move(static_cast<base_t&>(x)))
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -983,7 +961,7 @@ class multimap
//!
//! <b>Complexity</b>: Linear in x.size().
multimap(const multimap& x, const allocator_type &a)
- : m_tree(x.m_tree, a)
+ : base_t(static_cast<const base_t&>(x), a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -995,7 +973,7 @@ class multimap
//!
//! <b>Postcondition</b>: x is emptied.
multimap(BOOST_RV_REF(multimap) x, const allocator_type &a)
- : m_tree(boost::move(x.m_tree), a)
+ : base_t(boost::move(static_cast<base_t&>(x)), a)
{
//Allocator type must be std::pair<CONST Key, T>
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
@@ -1005,184 +983,71 @@ class multimap
//!
//! <b>Complexity</b>: Linear in x.size().
multimap& operator=(BOOST_COPY_ASSIGN_REF(multimap) x)
- { m_tree = x.m_tree; return *this; }
+ { return static_cast<multimap&>(this->base_t::operator=(static_cast<const base_t&>(x))); }
//! <b>Effects</b>: this->swap(x.get()).
//!
//! <b>Complexity</b>: Constant.
multimap& operator=(BOOST_RV_REF(multimap) x)
- { m_tree = boost::move(x.m_tree); return *this; }
+ { return static_cast<multimap&>(this->base_t::operator=(boost::move(static_cast<base_t&>(x)))); }
- //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the object's constructor.
- //!
- //! <b>Complexity</b>: Constant.
- allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.get_allocator(); }
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! <b>Effects</b>: Returns a reference to the internal allocator.
- //!
- //! <b>Throws</b>: Nothing
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Note</b>: Non-standard extension.
- stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.get_stored_allocator(); }
+ //! @copydoc ::boost::container::set::get_allocator()
+ allocator_type get_allocator() const;
- //! <b>Effects</b>: Returns a reference to the internal allocator.
- //!
- //! <b>Throws</b>: Nothing
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Note</b>: Non-standard extension.
- const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.get_stored_allocator(); }
+ //! @copydoc ::boost::container::set::get_stored_allocator()
+ stored_allocator_type &get_stored_allocator();
- //////////////////////////////////////////////
- //
- // iterators
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::set::get_stored_allocator() const
+ const stored_allocator_type &get_stored_allocator() const;
- //! <b>Effects</b>: Returns an iterator to the first element contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- iterator begin() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
- { return this->cbegin(); }
+ //! @copydoc ::boost::container::set::begin()
+ iterator begin();
- //! <b>Effects</b>: Returns an iterator to the end of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- iterator end() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.end(); }
+ //! @copydoc ::boost::container::set::begin() const
+ const_iterator begin() const;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator end() const BOOST_CONTAINER_NOEXCEPT
- { return this->cend(); }
+ //! @copydoc ::boost::container::set::cbegin() const
+ const_iterator cbegin() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.rbegin(); }
+ //! @copydoc ::boost::container::set::end()
+ iterator end() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
- { return this->crbegin(); }
+ //! @copydoc ::boost::container::set::end() const
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
- { return m_tree.rend(); }
+ //! @copydoc ::boost::container::set::cend() const
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
- { return this->crend(); }
+ //! @copydoc ::boost::container::set::rbegin()
+ reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.begin(); }
+ //! @copydoc ::boost::container::set::rbegin() const
+ const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.end(); }
+ //! @copydoc ::boost::container::set::crbegin() const
+ const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.rbegin(); }
+ //! @copydoc ::boost::container::set::rend()
+ reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.rend(); }
+ //! @copydoc ::boost::container::set::rend() const
+ const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT;
- //////////////////////////////////////////////
- //
- // capacity
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::set::crend() const
+ const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns true if the container contains no elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- bool empty() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.empty(); }
+ //! @copydoc ::boost::container::set::empty() const
+ bool empty() const;
- //! <b>Effects</b>: Returns the number of the elements contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- size_type size() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.size(); }
+ //! @copydoc ::boost::container::set::size() const
+ size_type size() const;
- //! <b>Effects</b>: Returns the largest possible size of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- size_type max_size() const BOOST_CONTAINER_NOEXCEPT
- { return m_tree.max_size(); }
+ //! @copydoc ::boost::container::set::max_size() const
+ size_type max_size() const;
- //////////////////////////////////////////////
- //
- // modifiers
- //
- //////////////////////////////////////////////
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
#if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -1197,7 +1062,7 @@ class multimap
//! is inserted right before p.
template <class... Args>
iterator emplace(Args&&... args)
- { return m_tree.emplace_equal(boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_equal(boost::forward<Args>(args)...); }
//! <b>Effects</b>: Inserts an object of type T constructed with
//! std::forward<Args>(args)... in the container.
@@ -1210,19 +1075,19 @@ class multimap
//! is inserted right before p.
template <class... Args>
iterator emplace_hint(const_iterator hint, Args&&... args)
- { return m_tree.emplace_hint_equal(hint, boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_hint_equal(hint, boost::forward<Args>(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 m_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
+ { return this->base_t::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 m_tree.emplace_hint_equal(hint \
+ { return this->base_t::emplace_hint_equal(hint \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \
//!
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
@@ -1235,28 +1100,28 @@ class multimap
//!
//! <b>Complexity</b>: Logarithmic.
iterator insert(const value_type& x)
- { return m_tree.insert_equal(x); }
+ { return this->base_t::insert_equal(x); }
//! <b>Effects</b>: Inserts a new value constructed from x and returns
//! the iterator pointing to the newly inserted element.
//!
//! <b>Complexity</b>: Logarithmic.
iterator insert(const nonconst_value_type& x)
- { return m_tree.insert_equal(x); }
+ { return this->base_t::insert_equal(x); }
//! <b>Effects</b>: Inserts a new value move-constructed from x and returns
//! the iterator pointing to the newly inserted element.
//!
//! <b>Complexity</b>: Logarithmic.
iterator insert(BOOST_RV_REF(nonconst_value_type) x)
- { return m_tree.insert_equal(boost::move(x)); }
+ { return this->base_t::insert_equal(boost::move(x)); }
//! <b>Effects</b>: Inserts a new value move-constructed from x and returns
//! the iterator pointing to the newly inserted element.
//!
//! <b>Complexity</b>: Logarithmic.
iterator insert(BOOST_RV_REF(movable_value_type) x)
- { return m_tree.insert_equal(boost::move(x)); }
+ { return this->base_t::insert_equal(boost::move(x)); }
//! <b>Effects</b>: Inserts a copy of x in the container.
//! p is a hint pointing to where the insert should start to search.
@@ -1267,7 +1132,7 @@ class multimap
//! <b>Complexity</b>: 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); }
+ { return this->base_t::insert_equal(position, x); }
//! <b>Effects</b>: Inserts a new value constructed from x in the container.
//! p is a hint pointing to where the insert should start to search.
@@ -1278,7 +1143,7 @@ class multimap
//! <b>Complexity</b>: 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); }
+ { return this->base_t::insert_equal(position, x); }
//! <b>Effects</b>: Inserts a new value move constructed from x in the container.
//! p is a hint pointing to where the insert should start to search.
@@ -1289,7 +1154,7 @@ class multimap
//! <b>Complexity</b>: 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)); }
+ { return this->base_t::insert_equal(position, boost::move(x)); }
//! <b>Effects</b>: Inserts a new value move constructed from x in the container.
//! p is a hint pointing to where the insert should start to search.
@@ -1300,7 +1165,7 @@ class multimap
//! <b>Complexity</b>: 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)); }
+ { return this->base_t::insert_equal(position, boost::move(x)); }
//! <b>Requires</b>: first, last are not iterators into *this.
//!
@@ -1309,182 +1174,126 @@ class multimap
//! <b>Complexity</b>: At most N log(size()+N) (N is the distance from first to last)
template <class InputIterator>
void insert(InputIterator first, InputIterator last)
- { m_tree.insert_equal(first, last); }
+ { this->base_t::insert_equal(first, last); }
- //! <b>Effects</b>: Erases the element pointed to by position.
- //!
- //! <b>Returns</b>: Returns an iterator pointing to the element immediately
- //! following q prior to the element being erased. If no such element exists,
- //! returns end().
- //!
- //! <b>Complexity</b>: Amortized constant time
- iterator erase(const_iterator position) BOOST_CONTAINER_NOEXCEPT
- { return m_tree.erase(position); }
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
- //!
- //! <b>Returns</b>: Returns the number of erased elements.
- //!
- //! <b>Complexity</b>: log(size()) + count(k)
- size_type erase(const key_type& x) BOOST_CONTAINER_NOEXCEPT
- { return m_tree.erase(x); }
+ //! @copydoc ::boost::container::set::erase(const_iterator)
+ iterator erase(const_iterator p);
- //! <b>Effects</b>: Erases all the elements in the range [first, last).
- //!
- //! <b>Returns</b>: Returns last.
- //!
- //! <b>Complexity</b>: log(size())+N where N is the distance from first to last.
- iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
- { return m_tree.erase(first, last); }
+ //! @copydoc ::boost::container::set::erase(const key_type&)
+ size_type erase(const key_type& x);
- //! <b>Effects</b>: Swaps the contents of *this and x.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- void swap(multimap& x)
- { m_tree.swap(x.m_tree); }
+ //! @copydoc ::boost::container::set::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator first, const_iterator last);
- //! <b>Effects</b>: erase(a.begin(),a.end()).
- //!
- //! <b>Postcondition</b>: size() == 0.
- //!
- //! <b>Complexity</b>: linear in size().
- void clear() BOOST_CONTAINER_NOEXCEPT
- { m_tree.clear(); }
+ //! @copydoc ::boost::container::set::swap
+ void swap(flat_multiset& x);
- //////////////////////////////////////////////
- //
- // observers
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::set::clear
+ void clear() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns the comparison object out
- //! of which a was constructed.
- //!
- //! <b>Complexity</b>: Constant.
- key_compare key_comp() const
- { return m_tree.key_comp(); }
+ //! @copydoc ::boost::container::set::key_comp
+ key_compare key_comp() const;
- //! <b>Effects</b>: Returns an object of value_compare constructed out
- //! of the comparison object.
- //!
- //! <b>Complexity</b>: Constant.
- value_compare value_comp() const
- { return value_compare(m_tree.key_comp()); }
-
- //////////////////////////////////////////////
- //
- // map operations
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::set::value_comp
+ value_compare value_comp() const;
//! <b>Returns</b>: An iterator pointing to an element with the key
//! equivalent to x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic.
- iterator find(const key_type& x)
- { return m_tree.find(x); }
+ iterator find(const key_type& x);
//! <b>Returns</b>: Allocator const iterator pointing to an element with the key
//! equivalent to x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic.
- const_iterator find(const key_type& x) const
- { return m_tree.find(x); }
+ const_iterator find(const key_type& x) const;
//! <b>Returns</b>: The number of elements with key equivalent to x.
//!
//! <b>Complexity</b>: log(size())+count(k)
- size_type count(const key_type& x) const
- { return m_tree.count(x); }
+ size_type count(const key_type& x) const;
//! <b>Returns</b>: An iterator pointing to the first element with key not less
//! than k, or a.end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- iterator lower_bound(const key_type& x)
- {return m_tree.lower_bound(x); }
+ iterator lower_bound(const key_type& x);
//! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
//! less than k, or a.end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- const_iterator lower_bound(const key_type& x) const
- { return m_tree.lower_bound(x); }
+ const_iterator lower_bound(const key_type& x) const;
//! <b>Returns</b>: An iterator pointing to the first element with key not less
//! than x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- iterator upper_bound(const key_type& x)
- { return m_tree.upper_bound(x); }
+ iterator upper_bound(const key_type& x);
//! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
//! less than x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- const_iterator upper_bound(const key_type& x) const
- { return m_tree.upper_bound(x); }
+ const_iterator upper_bound(const key_type& x) const;
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
//!
//! <b>Complexity</b>: Logarithmic
- std::pair<iterator,iterator> equal_range(const key_type& x)
- { return m_tree.equal_range(x); }
+ std::pair<iterator,iterator> equal_range(const key_type& x);
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
//!
//! <b>Complexity</b>: Logarithmic
- std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const
- { return m_tree.equal_range(x); }
-
- /// @cond
- template <class K1, class T1, class C1, class A1>
- friend bool operator== (const multimap<K1, T1, C1, A1>& x,
- const multimap<K1, T1, C1, A1>& y);
-
- template <class K1, class T1, class C1, class A1>
- friend bool operator< (const multimap<K1, T1, C1, A1>& x,
- const multimap<K1, T1, C1, A1>& y);
- /// @endcond
-};
+ std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const;
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator==(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y)
-{ return x.m_tree == y.m_tree; }
+ //! <b>Effects</b>: Rebalances the tree. It's a no-op for Red-Black and AVL trees.
+ //!
+ //! <b>Complexity</b>: Linear
+ void rebalance();
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y)
-{ return x.m_tree < y.m_tree; }
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const multimap& x, const multimap& y);
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator!=(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y)
-{ return !(x == y); }
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const multimap& x, const multimap& y);
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator>(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y)
-{ return y < x; }
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const multimap& x, const multimap& y);
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator<=(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y)
-{ return !(y < x); }
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const multimap& x, const multimap& y);
+
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const multimap& x, const multimap& y);
+
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const multimap& x, const multimap& y);
-template <class Key, class T, class Compare, class Allocator>
-inline bool operator>=(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y)
-{ return !(x < y); }
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(multimap& x, multimap& y);
-template <class Key, class T, class Compare, class Allocator>
-inline void swap(multimap<Key,T,Compare,Allocator>& x, multimap<Key,T,Compare,Allocator>& y)
-{ x.swap(y); }
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+};
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
} //namespace container {
@@ -1498,7 +1307,7 @@ struct has_trivial_destructor_after_move<boost::container::multimap<K, T, C, All
namespace container {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
}}
diff --git a/3party/boost/boost/container/node_allocator.hpp b/3party/boost/boost/container/node_allocator.hpp
new file mode 100644
index 0000000000..249a640e61
--- /dev/null
+++ b/3party/boost/boost/container/node_allocator.hpp
@@ -0,0 +1,345 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2008-2013. 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_POOLED_NODE_ALLOCATOR_HPP
+#define BOOST_CONTAINER_POOLED_NODE_ALLOCATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+#include <boost/container/container_fwd.hpp>
+#include <boost/container/throw_exception.hpp>
+#include <boost/container/detail/node_pool.hpp>
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/multiallocation_chain.hpp>
+#include <boost/container/detail/alloc_lib_auto_link.hpp>
+#include <boost/container/detail/singleton.hpp>
+
+#include <boost/assert.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/static_assert.hpp>
+#include <memory>
+#include <algorithm>
+#include <cstddef>
+#include <new>
+
+namespace boost {
+namespace container {
+
+//!An STL node allocator that uses a modified DlMalloc as memory
+//!source.
+//!
+//!This node allocator shares a segregated storage between all instances
+//!of node_allocator with equal sizeof(T).
+//!
+//!NodesPerBlock is the number of nodes allocated at once when the allocator
+//!runs out of nodes
+#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
+template
+ < class T
+ , std::size_t NodesPerBlock = NodeAlloc_nodes_per_block>
+#else
+template
+ < class T
+ , std::size_t NodesPerBlock
+ , std::size_t Version>
+#endif
+class node_allocator
+{
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ //! If Version is 1, the allocator is a STL conforming allocator. If Version is 2,
+ //! the allocator offers advanced expand in place and burst allocation capabilities.
+ public:
+ typedef unsigned int allocation_type;
+ typedef node_allocator<T, NodesPerBlock, Version> self_t;
+
+ static const std::size_t nodes_per_block = NodesPerBlock;
+
+ BOOST_STATIC_ASSERT((Version <=2));
+ #endif
+
+ public:
+ //-------
+ typedef T value_type;
+ typedef T * pointer;
+ typedef const T * const_pointer;
+ typedef typename ::boost::container::
+ container_detail::unvoid<T>::type & reference;
+ typedef const typename ::boost::container::
+ container_detail::unvoid<T>::type & const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ typedef boost::container::container_detail::
+ version_type<self_t, Version> version;
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ typedef boost::container::container_detail::
+ basic_multiallocation_chain<void*> multiallocation_chain_void;
+ typedef boost::container::container_detail::
+ transform_multiallocation_chain
+ <multiallocation_chain_void, T> multiallocation_chain;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ //!Obtains node_allocator from
+ //!node_allocator
+ template<class T2>
+ struct rebind
+ {
+ typedef node_allocator< T2, NodesPerBlock
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ , Version
+ #endif
+ > other;
+ };
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ private:
+ //!Not assignable from related node_allocator
+ template<class T2, std::size_t N2>
+ node_allocator& operator=
+ (const node_allocator<T2, N2>&);
+
+ //!Not assignable from other node_allocator
+ node_allocator& operator=(const node_allocator&);
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ public:
+
+ //!Default constructor
+ node_allocator() BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Copy constructor from other node_allocator.
+ node_allocator(const node_allocator &) BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Copy constructor from related node_allocator.
+ template<class T2>
+ node_allocator
+ (const node_allocator<T2, NodesPerBlock
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ , Version
+ #endif
+ > &) BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Destructor
+ ~node_allocator() BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!Returns the number of elements that could be allocated.
+ //!Never throws
+ size_type max_size() const
+ { return size_type(-1)/sizeof(T); }
+
+ //!Allocate memory for an array of count elements.
+ //!Throws std::bad_alloc if there is no enough memory
+ pointer allocate(size_type count, const void * = 0)
+ {
+ if(count > this->max_size())
+ boost::container::throw_bad_alloc();
+
+ if(Version == 1 && count == 1){
+ typedef container_detail::shared_node_pool
+ <sizeof(T), NodesPerBlock> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ return pointer(static_cast<T*>(singleton_t::instance().allocate_node()));
+ }
+ else{
+ void *ret = boost_cont_malloc(count*sizeof(T));
+ if(!ret)
+ boost::container::throw_bad_alloc();
+ return static_cast<pointer>(ret);
+ }
+ }
+
+ //!Deallocate allocated memory.
+ //!Never throws
+ void deallocate(const pointer &ptr, size_type count) BOOST_CONTAINER_NOEXCEPT
+ {
+ (void)count;
+ if(Version == 1 && count == 1){
+ typedef container_detail::shared_node_pool
+ <sizeof(T), NodesPerBlock> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ singleton_t::instance().deallocate_node(ptr);
+ }
+ else{
+ boost_cont_free(ptr);
+ }
+ }
+
+ //!Deallocates all free blocks of the pool
+ static void deallocate_free_blocks() BOOST_CONTAINER_NOEXCEPT
+ {
+ typedef container_detail::shared_node_pool
+ <sizeof(T), NodesPerBlock> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ singleton_t::instance().deallocate_free_blocks();
+ }
+
+ std::pair<pointer, bool>
+ allocation_command(allocation_type command,
+ size_type limit_size,
+ size_type preferred_size,
+ size_type &received_size, pointer reuse = pointer())
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ std::pair<pointer, bool> ret =
+ priv_allocation_command(command, limit_size, preferred_size, received_size, reuse);
+ if(!ret.first && !(command & BOOST_CONTAINER_NOTHROW_ALLOCATION))
+ boost::container::throw_bad_alloc();
+ return ret;
+ }
+
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold.
+ size_type size(pointer p) const BOOST_CONTAINER_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ return boost_cont_size(p);
+ }
+
+ //!Allocates just one object. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ //!Throws bad_alloc if there is no enough memory
+ pointer allocate_one()
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ typedef container_detail::shared_node_pool
+ <sizeof(T), NodesPerBlock> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ return (pointer)singleton_t::instance().allocate_node();
+ }
+
+ //!Allocates many elements of size == 1.
+ //!Elements must be individually deallocated with deallocate_one()
+ void allocate_individual(std::size_t num_elements, multiallocation_chain &chain)
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ typedef container_detail::shared_node_pool
+ <sizeof(T), NodesPerBlock> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ typename shared_pool_t::multiallocation_chain ch;
+ singleton_t::instance().allocate_nodes(num_elements, ch);
+ chain.incorporate_after(chain.before_begin(), (T*)&*ch.begin(), (T*)&*ch.last(), ch.size());
+ }
+
+ //!Deallocates memory previously allocated with allocate_one().
+ //!You should never use deallocate_one to deallocate memory allocated
+ //!with other functions different from allocate_one(). Never throws
+ void deallocate_one(pointer p) BOOST_CONTAINER_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ typedef container_detail::shared_node_pool
+ <sizeof(T), NodesPerBlock> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ singleton_t::instance().deallocate_node(p);
+ }
+
+ void deallocate_individual(multiallocation_chain &chain) BOOST_CONTAINER_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ typedef container_detail::shared_node_pool
+ <sizeof(T), NodesPerBlock> shared_pool_t;
+ typedef container_detail::singleton_default<shared_pool_t> singleton_t;
+ typename shared_pool_t::multiallocation_chain ch(&*chain.begin(), &*chain.last(), chain.size());
+ singleton_t::instance().deallocate_nodes(ch);
+ }
+
+ //!Allocates many elements of size elem_size.
+ //!Elements must be individually deallocated with deallocate()
+ void allocate_many(size_type elem_size, std::size_t n_elements, multiallocation_chain &chain)
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ boost_cont_memchain ch;
+ BOOST_CONTAINER_MEMCHAIN_INIT(&ch);
+ if(!boost_cont_multialloc_nodes(n_elements, elem_size*sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch)){
+ boost::container::throw_bad_alloc();
+ }
+ chain.incorporate_after( chain.before_begin()
+ , (T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
+ , (T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
+ , BOOST_CONTAINER_MEMCHAIN_SIZE(&ch));
+ }
+
+ //!Allocates n_elements elements, each one of size elem_sizes[i]
+ //!Elements must be individually deallocated with deallocate()
+ void allocate_many(const size_type *elem_sizes, size_type n_elements, multiallocation_chain &chain)
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ boost_cont_memchain ch;
+ boost_cont_multialloc_arrays(n_elements, elem_sizes, sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch);
+ if(BOOST_CONTAINER_MEMCHAIN_EMPTY(&ch)){
+ boost::container::throw_bad_alloc();
+ }
+ chain.incorporate_after( chain.before_begin()
+ , (T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
+ , (T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
+ , BOOST_CONTAINER_MEMCHAIN_SIZE(&ch));
+ }
+
+ void deallocate_many(multiallocation_chain &chain) BOOST_CONTAINER_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT(( Version > 1 ));
+ void *first = &*chain.begin();
+ void *last = &*chain.last();
+ size_t num = chain.size();
+ boost_cont_memchain ch;
+ BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&ch, first, last, num);
+ boost_cont_multidealloc(&ch);
+ }
+
+ //!Swaps allocators. Does not throw. If each allocator is placed in a
+ //!different memory segment, the result is undefined.
+ friend void swap(self_t &, self_t &) BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ //!An allocator always compares to true, as memory allocated with one
+ //!instance can be deallocated by another instance
+ friend bool operator==(const node_allocator &, const node_allocator &) BOOST_CONTAINER_NOEXCEPT
+ { return true; }
+
+ //!An allocator always compares to false, as memory allocated with one
+ //!instance can be deallocated by another instance
+ friend bool operator!=(const node_allocator &, const node_allocator &) BOOST_CONTAINER_NOEXCEPT
+ { return false; }
+
+ private:
+ std::pair<pointer, bool> priv_allocation_command
+ (allocation_type command, std::size_t limit_size
+ ,std::size_t preferred_size,std::size_t &received_size, void *reuse_ptr)
+ {
+ boost_cont_command_ret_t ret = {0 , 0};
+ if(limit_size > this->max_size() || preferred_size > this->max_size()){
+ //ret.first = 0;
+ return std::pair<pointer, bool>(pointer(), false);
+ }
+ std::size_t l_size = limit_size*sizeof(T);
+ std::size_t p_size = preferred_size*sizeof(T);
+ std::size_t r_size;
+ {
+ ret = boost_cont_allocation_command(command, sizeof(T), l_size, p_size, &r_size, reuse_ptr);
+ }
+ received_size = r_size/sizeof(T);
+ return std::pair<pointer, bool>(static_cast<pointer>(ret.first), !!ret.second);
+ }
+};
+
+} //namespace container {
+} //namespace boost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_CONTAINER_POOLED_NODE_ALLOCATOR_HPP
diff --git a/3party/boost/boost/container/options.hpp b/3party/boost/boost/container/options.hpp
new file mode 100644
index 0000000000..11bf9deee8
--- /dev/null
+++ b/3party/boost/boost/container/options.hpp
@@ -0,0 +1,72 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2013-2013
+//
+// 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_OPTIONS_HPP
+#define BOOST_CONTAINER_OPTIONS_HPP
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/container_fwd.hpp>
+#include <boost/intrusive/pack_options.hpp>
+
+namespace boost {
+namespace container {
+
+#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+template<tree_type_enum TreeType, bool OptimizeSize>
+struct tree_opt
+{
+ static const boost::container::tree_type_enum tree_type = TreeType;
+ static const bool optimize_size = OptimizeSize;
+};
+
+#endif //!defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+//!This option setter specifies the underlying tree type
+//!(red-black, AVL, Scapegoat or Splay) for ordered associative containers
+BOOST_INTRUSIVE_OPTION_CONSTANT(tree_type, tree_type_enum, TreeType, tree_type)
+
+//!This option setter specifies if node size is optimized
+//!storing rebalancing data masked into pointers for ordered associative containers
+BOOST_INTRUSIVE_OPTION_CONSTANT(optimize_size, bool, Enabled, optimize_size)
+
+//! Helper metafunction to combine options into a single type to be used
+//! by \c boost::container::set, \c boost::container::multiset
+//! \c boost::container::map and \c boost::container::multimap.
+//! Supported options are: \c boost::container::optimize_size and \c boost::container::tree_type
+#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) || defined(BOOST_CONTAINER_VARIADIC_TEMPLATES)
+template<class ...Options>
+#else
+template<class O1 = void, class O2 = void, class O3 = void, class O4 = void>
+#endif
+struct tree_assoc_options
+{
+ /// @cond
+ typedef typename ::boost::intrusive::pack_options
+ < tree_assoc_defaults,
+ #if !defined(BOOST_CONTAINER_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+ typedef tree_opt<packed_options::tree_type, packed_options::optimize_size> implementation_defined;
+ /// @endcond
+ typedef implementation_defined type;
+};
+
+} //namespace container {
+} //namespace boost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_CONTAINER_OPTIONS_HPP
diff --git a/3party/boost/boost/container/scoped_allocator.hpp b/3party/boost/boost/container/scoped_allocator.hpp
index f9f210871b..e594c0a239 100644
--- a/3party/boost/boost/container/scoped_allocator.hpp
+++ b/3party/boost/boost/container/scoped_allocator.hpp
@@ -6,7 +6,7 @@
//
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2011-2013. 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)
//
@@ -17,7 +17,7 @@
#ifndef BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_HPP
#define BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_HPP
-#if (defined MSC_VER) && (_MSC_VER >= 1200)
+#if defined (_MSC_VER)
# pragma once
#endif
@@ -46,8 +46,8 @@ namespace boost { namespace container {
//! and if T is used in a context where a container must call such a constructor, then the program is
//! ill-formed.
//!
-//! [Example:
-//! template <class T, class Allocator = allocator<T> >
+//! <code>
+//! template <class T, class Allocator = allocator<T> >
//! class Z {
//! public:
//! typedef Allocator allocator_type;
@@ -62,9 +62,9 @@ namespace boost { namespace container {
//!
//! // Specialize trait for class template Z
//! template <class T, class Allocator = allocator<T> >
-//! struct constructible_with_allocator_suffix<Z<T,Allocator> >
+//! struct constructible_with_allocator_suffix<Z<T,Allocator> >
//! : ::boost::true_type { };
-//! -- end example]
+//! </code>
//!
//! <b>Note</b>: This trait is a workaround inspired by "N2554: The Scoped Allocator Model (Rev 2)"
//! (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as
@@ -80,7 +80,7 @@ struct constructible_with_allocator_suffix
{};
//! <b>Remark</b>: if a specialization is derived from true_type, indicates that T may be constructed
-//! with allocator_arg and T::allocator_type as its first two constructor arguments.
+//! with allocator_arg and T::allocator_type as its first two constructor arguments.
//! Ideally, all constructors of T (including the copy and move constructors) should have a variant
//! that accepts these two initial arguments.
//!
@@ -90,32 +90,32 @@ struct constructible_with_allocator_suffix
//! called with these initial arguments, and if T is used in a context where a container must call such
//! a constructor, then the program is ill-formed.
//!
-//! [Example:
+//! <code>
//! template <class T, class Allocator = allocator<T> >
//! class Y {
//! public:
//! typedef Allocator allocator_type;
-//!
+//!
//! // Default constructor with and allocator-extended default constructor
//! Y();
//! Y(allocator_arg_t, const allocator_type& a);
-//!
+//!
//! // Copy constructor and allocator-extended copy constructor
//! Y(const Y& yy);
//! Y(allocator_arg_t, const allocator_type& a, const Y& yy);
-//!
+//!
//! // Variadic constructor and allocator-extended variadic constructor
//! template<class ...Args> Y(Args&& args...);
-//! template<class ...Args>
+//! template<class ...Args>
//! Y(allocator_arg_t, const allocator_type& a, Args&&... args);
//! };
-//!
+//!
//! // Specialize trait for class template Y
//! template <class T, class Allocator = allocator<T> >
-//! struct constructible_with_allocator_prefix<Y<T,Allocator> >
+//! struct constructible_with_allocator_prefix<Y<T,Allocator> >
//! : ::boost::true_type { };
-//!
-//! -- end example]
+//!
+//! </code>
//!
//! <b>Note</b>: This trait is a workaround inspired by "N2554: The Scoped Allocator Model (Rev 2)"
//! (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as
@@ -130,7 +130,7 @@ struct constructible_with_allocator_prefix
: ::boost::false_type
{};
-///@cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace container_detail {
@@ -159,7 +159,7 @@ struct uses_allocator_imp
} //namespace container_detail {
-///@endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! <b>Remark</b>: Automatically detects if T has a nested allocator_type that is convertible from
//! Alloc. Meets the BinaryTypeTrait requirements ([meta.rqmts] 20.4.1). A program may
@@ -173,7 +173,7 @@ struct uses_allocator
: boost::integral_constant<bool, container_detail::uses_allocator_imp<T, Alloc>::value>
{};
-///@cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace container_detail {
@@ -583,8 +583,10 @@ class scoped_allocator_adaptor_base
};
typedef OuterAlloc outer_allocator_type;
- typedef scoped_allocator_adaptor<InnerAllocs...> inner_allocator_type;
- typedef allocator_traits<inner_allocator_type> inner_traits_type;
+ typedef scoped_allocator_adaptor<InnerAllocs...> inner_allocator_type;
+ typedef allocator_traits<inner_allocator_type> inner_traits_type;
+ typedef scoped_allocator_adaptor
+ <OuterAlloc, InnerAllocs...> scoped_allocator_type;
typedef boost::integral_constant<
bool,
outer_traits_type::propagate_on_container_copy_assignment::value ||
@@ -635,7 +637,7 @@ class scoped_allocator_adaptor_base
, m_inner(other.inner_allocator())
{}
- protected:
+ public:
struct internal_type_t{};
template <class OuterA2>
@@ -670,18 +672,30 @@ class scoped_allocator_adaptor_base
boost::container::swap_dispatch(this->m_inner, r.inner_allocator());
}
- inner_allocator_type& inner_allocator()
+ friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r)
+ { l.swap(r); }
+
+ inner_allocator_type& inner_allocator() BOOST_CONTAINER_NOEXCEPT
{ return m_inner; }
- inner_allocator_type const& inner_allocator() const
+ inner_allocator_type const& inner_allocator() const BOOST_CONTAINER_NOEXCEPT
{ return m_inner; }
- outer_allocator_type & outer_allocator()
+ outer_allocator_type & outer_allocator() BOOST_CONTAINER_NOEXCEPT
{ return static_cast<outer_allocator_type&>(*this); }
- const outer_allocator_type &outer_allocator() const
+ const outer_allocator_type &outer_allocator() const BOOST_CONTAINER_NOEXCEPT
{ return static_cast<const outer_allocator_type&>(*this); }
+ scoped_allocator_type select_on_container_copy_construction() const
+ {
+ return scoped_allocator_type
+ (internal_type_t()
+ ,outer_traits_type::select_on_container_copy_construction(this->outer_allocator())
+ ,inner_traits_type::select_on_container_copy_construction(this->inner_allocator())
+ );
+ }
+
private:
inner_allocator_type m_inner;
};
@@ -730,6 +744,11 @@ class scoped_allocator_adaptor_base<OuterAlloc, true
( BOOST_PP_SUB(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, n) \
, BOOST_CONTAINER_PP_IDENTITY, nat) \
> inner_allocator_type; \
+ typedef scoped_allocator_adaptor<OuterAlloc, BOOST_PP_ENUM_PARAMS(n, Q) \
+ BOOST_PP_ENUM_TRAILING \
+ ( BOOST_PP_SUB(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, n) \
+ , BOOST_CONTAINER_PP_IDENTITY, nat) \
+ > scoped_allocator_type; \
typedef allocator_traits<inner_allocator_type> inner_traits_type; \
typedef boost::integral_constant< \
bool, \
@@ -790,7 +809,7 @@ class scoped_allocator_adaptor_base<OuterAlloc, true
, m_inner(other.inner_allocator()) \
{} \
\
- protected: \
+ public: \
struct internal_type_t{}; \
\
template <class OuterA2> \
@@ -824,6 +843,9 @@ class scoped_allocator_adaptor_base<OuterAlloc, true
boost::container::swap_dispatch(this->m_inner, r.inner_allocator()); \
} \
\
+ friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r) \
+ { l.swap(r); } \
+ \
inner_allocator_type& inner_allocator() \
{ return m_inner; } \
\
@@ -836,6 +858,14 @@ class scoped_allocator_adaptor_base<OuterAlloc, true
const outer_allocator_type &outer_allocator() const \
{ return static_cast<const outer_allocator_type&>(*this); } \
\
+ scoped_allocator_type select_on_container_copy_construction() const \
+ { \
+ return scoped_allocator_type \
+ (internal_type_t() \
+ ,outer_traits_type::select_on_container_copy_construction(this->outer_allocator()) \
+ ,inner_traits_type::select_on_container_copy_construction(this->inner_allocator()) \
+ ); \
+ } \
private: \
inner_allocator_type m_inner; \
}; \
@@ -874,6 +904,7 @@ class scoped_allocator_adaptor_base
typedef OuterAlloc outer_allocator_type;
typedef allocator_traits<OuterAlloc> outer_traits_type;
typedef scoped_allocator_adaptor<OuterAlloc> inner_allocator_type;
+ typedef inner_allocator_type scoped_allocator_type;
typedef allocator_traits<inner_allocator_type> inner_traits_type;
typedef typename outer_traits_type::
propagate_on_container_copy_assignment propagate_on_container_copy_assignment;
@@ -922,14 +953,14 @@ class scoped_allocator_adaptor_base
: outer_allocator_type(other.outer_allocator())
{}
- protected:
+ public:
struct internal_type_t{};
template <class OuterA2>
scoped_allocator_adaptor_base(internal_type_t, BOOST_FWD_REF(OuterA2) outerAlloc, const inner_allocator_type &)
: outer_allocator_type(::boost::forward<OuterA2>(outerAlloc))
{}
-
+
public:
scoped_allocator_adaptor_base &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other)
{
@@ -948,6 +979,9 @@ class scoped_allocator_adaptor_base
boost::container::swap_dispatch(this->outer_allocator(), r.outer_allocator());
}
+ friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r)
+ { l.swap(r); }
+
inner_allocator_type& inner_allocator()
{ return static_cast<inner_allocator_type&>(*this); }
@@ -959,11 +993,22 @@ class scoped_allocator_adaptor_base
const outer_allocator_type &outer_allocator() const
{ return static_cast<const outer_allocator_type&>(*this); }
+
+ scoped_allocator_type select_on_container_copy_construction() const
+ {
+ return scoped_allocator_type
+ (internal_type_t()
+ ,outer_traits_type::select_on_container_copy_construction(this->outer_allocator())
+ //Don't use inner_traits_type::select_on_container_copy_construction(this->inner_allocator())
+ //as inner_allocator() is equal to *this and that would trigger an infinite loop
+ , this->inner_allocator()
+ );
+ }
};
} //namespace container_detail {
-///@endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//Scoped allocator
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -993,14 +1038,14 @@ class scoped_allocator_adaptor_base
//! scoped_allocator_adaptor is derived from the outer allocator type so it can be
//! substituted for the outer allocator type in most expressions. -end note]
//!
- //! In the construct member functions, `OUTERMOST(x)` is x if x does not have
- //! an `outer_allocator()` member function and
- //! `OUTERMOST(x.outer_allocator())` otherwise; `OUTERMOST_ALLOC_TRAITS(x)` is
- //! `allocator_traits<decltype(OUTERMOST(x))>`.
+ //! In the construct member functions, <code>OUTERMOST(x)</code> is x if x does not have
+ //! an <code>outer_allocator()</code> member function and
+ //! <code>OUTERMOST(x.outer_allocator())</code> otherwise; <code>OUTERMOST_ALLOC_TRAITS(x)</code> is
+ //! <code>allocator_traits<decltype(OUTERMOST(x))></code>.
//!
- //! [<b>Note</b>: `OUTERMOST(x)` and
- //! `OUTERMOST_ALLOC_TRAITS(x)` are recursive operations. It is incumbent upon
- //! the definition of `outer_allocator()` to ensure that the recursion terminates.
+ //! [<b>Note</b>: <code>OUTERMOST(x)</code> and
+ //! <code>OUTERMOST_ALLOC_TRAITS(x)</code> are recursive operations. It is incumbent upon
+ //! the definition of <code>outer_allocator()</code> to ensure that the recursion terminates.
//! It will terminate for all instantiations of scoped_allocator_adaptor. -end note]
template <typename OuterAlloc, typename ...InnerAllocs>
class scoped_allocator_adaptor
@@ -1031,7 +1076,7 @@ class scoped_allocator_adaptor
BOOST_COPYABLE_AND_MOVABLE(scoped_allocator_adaptor)
public:
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
typedef container_detail::scoped_allocator_adaptor_base
<OuterAlloc
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -1040,14 +1085,14 @@ class scoped_allocator_adaptor
, true BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, Q)
#endif
> base_type;
- typedef typename base_type::internal_type_t internal_type_t;
- /// @endcond
+ typedef typename base_type::internal_type_t internal_type_t;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
typedef OuterAlloc outer_allocator_type;
//! Type: For exposition only
//!
typedef allocator_traits<OuterAlloc> outer_traits_type;
- //! Type: `scoped_allocator_adaptor<OuterAlloc>` if `sizeof...(InnerAllocs)` is zero; otherwise,
- //! `scoped_allocator_adaptor<InnerAllocs...>`.
+ //! Type: <code>scoped_allocator_adaptor<OuterAlloc></code> if <code>sizeof...(InnerAllocs)</code> is zero; otherwise,
+ //! <code>scoped_allocator_adaptor<InnerAllocs...></code>.
typedef typename base_type::inner_allocator_type inner_allocator_type;
typedef allocator_traits<inner_allocator_type> inner_traits_type;
typedef typename outer_traits_type::value_type value_type;
@@ -1057,23 +1102,23 @@ 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<Allocator>::propagate_on_container_copy_assignment::value` is
- //! true for any `Allocator` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type.
+ //! Type: <code>true_type</code> if <code>allocator_traits<Allocator>::propagate_on_container_copy_assignment::value</code> is
+ //! true for any <code>Allocator</code> in the set of <code>OuterAlloc</code> and <code>InnerAllocs...</code>; otherwise, false_type.
typedef typename base_type::
propagate_on_container_copy_assignment propagate_on_container_copy_assignment;
- //! Type: `true_type` if `allocator_traits<Allocator>::propagate_on_container_move_assignment::value` is
- //! true for any `Allocator` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type.
+ //! Type: <code>true_type</code> if <code>allocator_traits<Allocator>::propagate_on_container_move_assignment::value</code> is
+ //! true for any <code>Allocator</code> in the set of <code>OuterAlloc</code> and <code>InnerAllocs...</code>; otherwise, false_type.
typedef typename base_type::
propagate_on_container_move_assignment propagate_on_container_move_assignment;
- //! Type: `true_type` if `allocator_traits<Allocator>::propagate_on_container_swap::value` is true for any
- //! `Allocator` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type.
+ //! Type: <code>true_type</code> if <code>allocator_traits<Allocator>::propagate_on_container_swap::value</code> is true for any
+ //! <code>Allocator</code> in the set of <code>OuterAlloc</code> and <code>InnerAllocs...</code>; otherwise, false_type.
typedef typename base_type::
propagate_on_container_swap propagate_on_container_swap;
//! Type: Rebinds scoped allocator to
- //! `typedef scoped_allocator_adaptor
+ //! <code>typedef scoped_allocator_adaptor
//! < typename outer_traits_type::template portable_rebind_alloc<U>::type
- //! , InnerAllocs... >`
+ //! , InnerAllocs... ></code>
template <class U>
struct rebind
{
@@ -1164,132 +1209,117 @@ class scoped_allocator_adaptor
{}
scoped_allocator_adaptor &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor) other)
- {
- base_type::operator=(static_cast<const base_type &>(other));
- return *this;
- }
+ { return static_cast<scoped_allocator_adaptor&>(base_type::operator=(static_cast<const base_type &>(other))); }
scoped_allocator_adaptor &operator=(BOOST_RV_REF(scoped_allocator_adaptor) other)
- {
- base_type::operator=(boost::move(static_cast<scoped_allocator_adaptor&>(other)));
- return *this;
- }
+ { return static_cast<scoped_allocator_adaptor&>(base_type::operator=(boost::move(static_cast<base_type&>(other)))); }
+ #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
//! <b>Effects</b>: swaps *this with r.
//!
- void swap(scoped_allocator_adaptor &r)
- {
- base_type::swap(r);
- }
+ void swap(scoped_allocator_adaptor &r);
//! <b>Effects</b>: swaps *this with r.
//!
- friend void swap(scoped_allocator_adaptor &l, scoped_allocator_adaptor &r)
- { l.swap(r); }
+ friend void swap(scoped_allocator_adaptor &l, scoped_allocator_adaptor &r);
//! <b>Returns</b>:
- //! `static_cast<OuterAlloc&>(*this)`.
- outer_allocator_type & outer_allocator()
- { return *this; }
+ //! <code>static_cast<OuterAlloc&>(*this)</code>.
+ outer_allocator_type & outer_allocator() BOOST_CONTAINER_NOEXCEPT;
//! <b>Returns</b>:
- //! `static_cast<const OuterAlloc&>(*this)`.
- const outer_allocator_type &outer_allocator() const
- { return *this; }
+ //! <code>static_cast<const OuterAlloc&>(*this)</code>.
+ const outer_allocator_type &outer_allocator() const BOOST_CONTAINER_NOEXCEPT;
//! <b>Returns</b>:
- //! *this if `sizeof...(InnerAllocs)` is zero; otherwise, inner.
- inner_allocator_type& inner_allocator()
- { return base_type::inner_allocator(); }
+ //! *this if <code>sizeof...(InnerAllocs)</code> is zero; otherwise, inner.
+ inner_allocator_type& inner_allocator() BOOST_CONTAINER_NOEXCEPT;
//! <b>Returns</b>:
- //! *this if `sizeof...(InnerAllocs)` is zero; otherwise, inner.
- inner_allocator_type const& inner_allocator() const
- { return base_type::inner_allocator(); }
+ //! *this if <code>sizeof...(InnerAllocs)</code> is zero; otherwise, inner.
+ inner_allocator_type const& inner_allocator() const BOOST_CONTAINER_NOEXCEPT;
+
+ #endif //BOOST_CONTAINER_DOXYGEN_INVOKED
//! <b>Returns</b>:
- //! `allocator_traits<OuterAlloc>::max_size(outer_allocator())`.
- size_type max_size() const
+ //! <code>allocator_traits<OuterAlloc>::max_size(outer_allocator())</code>.
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT
{
return outer_traits_type::max_size(this->outer_allocator());
}
//! <b>Effects</b>:
- //! calls `OUTERMOST_ALLOC_TRAITS(*this)::destroy(OUTERMOST(*this), p)`.
+ //! calls <code>OUTERMOST_ALLOC_TRAITS(*this)::destroy(OUTERMOST(*this), p)</code>.
template <class T>
- void destroy(T* p)
+ void destroy(T* p) BOOST_CONTAINER_NOEXCEPT
{
allocator_traits<typename outermost_allocator<OuterAlloc>::type>
::destroy(get_outermost_allocator(this->outer_allocator()), p);
}
//! <b>Returns</b>:
- //! `allocator_traits<OuterAlloc>::allocate(outer_allocator(), n)`.
+ //! <code>allocator_traits<OuterAlloc>::allocate(outer_allocator(), n)</code>.
pointer allocate(size_type n)
{
return outer_traits_type::allocate(this->outer_allocator(), n);
}
//! <b>Returns</b>:
- //! `allocator_traits<OuterAlloc>::allocate(outer_allocator(), n, hint)`.
+ //! <code>allocator_traits<OuterAlloc>::allocate(outer_allocator(), n, hint)</code>.
pointer allocate(size_type n, const_void_pointer hint)
{
return outer_traits_type::allocate(this->outer_allocator(), n, hint);
}
//! <b>Effects</b>:
- //! `allocator_traits<OuterAlloc>::deallocate(outer_allocator(), p, n)`.
+ //! <code>allocator_traits<OuterAlloc>::deallocate(outer_allocator(), p, n)</code>.
void deallocate(pointer p, size_type n)
{
outer_traits_type::deallocate(this->outer_allocator(), p, n);
}
+ #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
//! <b>Returns</b>: Allocator new scoped_allocator_adaptor object where each allocator
//! A in the adaptor is initialized from the result of calling
- //! `allocator_traits<Allocator>::select_on_container_copy_construction()` on
+ //! <code>allocator_traits<Allocator>::select_on_container_copy_construction()</code> on
//! the corresponding allocator in *this.
- scoped_allocator_adaptor select_on_container_copy_construction() const
- {
- return scoped_allocator_adaptor
- (internal_type_t()
- ,outer_traits_type::select_on_container_copy_construction(this->outer_allocator())
- ,inner_traits_type::select_on_container_copy_construction(this->inner_allocator())
- );
- }
- /// @cond
+ scoped_allocator_adaptor select_on_container_copy_construction() const;
+ #endif //BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
base_type &base() { return *this; }
const base_type &base() const { return *this; }
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Effects</b>:
- //! 1) If `uses_allocator<T, inner_allocator_type>::value` is false calls
- //! `OUTERMOST_ALLOC_TRAITS(*this)::construct
- //! (OUTERMOST(*this), p, std::forward<Args>(args)...)`.
+ //! 1) If <code>uses_allocator<T, inner_allocator_type>::value</code> is false calls
+ //! <code>OUTERMOST_ALLOC_TRAITS(*this)::construct
+ //! (OUTERMOST(*this), p, std::forward<Args>(args)...)</code>.
//!
- //! 2) Otherwise, if `uses_allocator<T, inner_allocator_type>::value` is true and
- //! `is_constructible<T, allocator_arg_t, inner_allocator_type, Args...>::value` is true, calls
- //! `OUTERMOST_ALLOC_TRAITS(*this)::construct(OUTERMOST(*this), p, allocator_arg,
- //! inner_allocator(), std::forward<Args>(args)...)`.
+ //! 2) Otherwise, if <code>uses_allocator<T, inner_allocator_type>::value</code> is true and
+ //! <code>is_constructible<T, allocator_arg_t, inner_allocator_type, Args...>::value</code> is true, calls
+ //! <code>OUTERMOST_ALLOC_TRAITS(*this)::construct(OUTERMOST(*this), p, allocator_arg,
+ //! inner_allocator(), std::forward<Args>(args)...)</code>.
//!
- //! [<b>Note</b>: In compilers without advanced decltype SFINAE support, `is_constructible` can't
+ //! [<b>Note</b>: In compilers without advanced decltype SFINAE support, <code>is_constructible</code> can't
//! be implemented so that condition will be replaced by
//! constructible_with_allocator_prefix<T>::value. -end note]
//!
//! 3) Otherwise, if uses_allocator<T, inner_allocator_type>::value is true and
- //! `is_constructible<T, Args..., inner_allocator_type>::value` is true, calls
- //! `OUTERMOST_ALLOC_TRAITS(*this)::construct(OUTERMOST(*this), p,
- //! std::forward<Args>(args)..., inner_allocator())`.
+ //! <code>is_constructible<T, Args..., inner_allocator_type>::value</code> is true, calls
+ //! <code>OUTERMOST_ALLOC_TRAITS(*this)::construct(OUTERMOST(*this), p,
+ //! std::forward<Args>(args)..., inner_allocator())</code>.
//!
- //! [<b>Note</b>: In compilers without advanced decltype SFINAE support, `is_constructible` can't be
+ //! [<b>Note</b>: In compilers without advanced decltype SFINAE support, <code>is_constructible</code> can't be
//! implemented so that condition will be replaced by
- //! `constructible_with_allocator_suffix<T>::value`. -end note]
+ //! <code>constructible_with_allocator_suffix<T>::value</code>. -end note]
//!
//! 4) Otherwise, the program is ill-formed.
//!
- //! [<b>Note</b>: An error will result if `uses_allocator` evaluates
+ //! [<b>Note</b>: An error will result if <code>uses_allocator</code> evaluates
//! to true but the specific constructor does not take an allocator. This definition prevents a silent
//! failure to pass an inner allocator to a contained element. -end note]
template < typename T, class ...Args>
@@ -1345,7 +1375,7 @@ class scoped_allocator_adaptor
template <class T1, class T2, class U, class V>
void construct(container_detail::pair<T1, T2>* p, BOOST_FWD_REF(U) x, BOOST_FWD_REF(V) y)
{ this->construct_pair(p, ::boost::forward<U>(x), ::boost::forward<V>(y)); }
-
+
template <class T1, class T2, class U, class V>
void construct(std::pair<T1, T2>* p, const std::pair<U, V>& x)
{ this->construct_pair(p, x); }
@@ -1354,7 +1384,7 @@ class scoped_allocator_adaptor
void construct( container_detail::pair<T1, T2>* p
, const container_detail::pair<U, V>& x)
{ this->construct_pair(p, x); }
-
+
template <class T1, class T2, class U, class V>
void construct( std::pair<T1, T2>* p
, BOOST_RV_REF_BEG std::pair<U, V> BOOST_RV_REF_END x)
@@ -1365,7 +1395,7 @@ class scoped_allocator_adaptor
, BOOST_RV_REF_BEG container_detail::pair<U, V> BOOST_RV_REF_END x)
{ this->construct_pair(p, x); }
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
template <class Pair>
void construct_pair(Pair* p)
@@ -1426,13 +1456,14 @@ class scoped_allocator_adaptor
//template <class T1, class T2, class... Args1, class... Args2>
//void construct(pair<T1, T2>* p, piecewise_construct_t, tuple<Args1...> x, tuple<Args2...> y);
- private:
+ public:
+ //Internal function
template <class OuterA2>
scoped_allocator_adaptor(internal_type_t, BOOST_FWD_REF(OuterA2) outer, const inner_allocator_type& inner)
: base_type(internal_type_t(), ::boost::forward<OuterA2>(outer), inner)
{}
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
template <typename OuterA1, typename OuterA2
@@ -1458,7 +1489,7 @@ inline bool operator==(
#endif
>& b)
{
- #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
const bool has_zero_inner = sizeof...(InnerAllocs) == 0u;
#else
const bool has_zero_inner =
diff --git a/3party/boost/boost/container/scoped_allocator_fwd.hpp b/3party/boost/boost/container/scoped_allocator_fwd.hpp
index ef2479933f..f19e27e885 100644
--- a/3party/boost/boost/container/scoped_allocator_fwd.hpp
+++ b/3party/boost/boost/container/scoped_allocator_fwd.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2011-2013. 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)
//
@@ -11,7 +11,11 @@
#ifndef BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_FWD_HPP
#define BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_FWD_HPP
-#if (defined MSC_VER) && (_MSC_VER >= 1200)
+//! \file
+//! This header file forward declares boost::container::scoped_allocator_adaptor
+//! and defines the following types:
+
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -25,7 +29,7 @@
namespace boost { namespace container {
-///@cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
@@ -55,7 +59,7 @@ class scoped_allocator_adaptor;
#endif
-///@endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! The allocator_arg_t struct is an empty structure type used as a unique type to
//! disambiguate constructor and function overloading. Specifically, several types
diff --git a/3party/boost/boost/container/set.hpp b/3party/boost/boost/container/set.hpp
index 0b4937610e..93a02d0faf 100644
--- a/3party/boost/boost/container/set.hpp
+++ b/3party/boost/boost/container/set.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,7 +11,7 @@
#ifndef BOOST_CONTAINER_SET_HPP
#define BOOST_CONTAINER_SET_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -35,16 +35,7 @@
namespace boost {
namespace container {
-/// @cond
-// Forward declarations of operators < and ==, needed for friend declaration.
-template <class Key, class Compare, class Allocator>
-inline bool operator==(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-
-template <class Key, class Compare, class Allocator>
-inline bool operator<(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-/// @endcond
+#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
//! A set is a kind of associative container that supports unique keys (contains at
//! most one of each key value) and provides for fast retrieval of the keys themselves.
@@ -53,20 +44,27 @@ inline bool operator<(const set<Key,Compare,Allocator>& x,
//! A set satisfies all of the requirements of a container and of a reversible container
//! , and of an associative container. A set also provides most operations described in
//! for unique keys.
-#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
-template <class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key> >
+//!
+//! \tparam Key is the type to be inserted in the set, which is also the key_type
+//! \tparam Compare is the comparison functor used to order keys
+//! \tparam Allocator is the allocator to be used to allocate memory for this container
+//! \tparam SetOptions is an packed option type generated using using boost::container::tree_assoc_options.
+template <class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>, class SetOptions = tree_assoc_defaults >
#else
-template <class Key, class Compare, class Allocator>
+template <class Key, class Compare, class Allocator, class SetOptions>
#endif
class set
+ ///@cond
+ : public container_detail::tree
+ < Key, Key, container_detail::identity<Key>, Compare, Allocator, SetOptions>
+ ///@endcond
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(set)
- typedef container_detail::rbtree<Key, Key,
- container_detail::identity<Key>, Compare, Allocator> tree_t;
- tree_t m_tree; // red-black tree representing set
- /// @endcond
+ typedef container_detail::tree
+ < Key, Key, container_detail::identity<Key>, Compare, Allocator, SetOptions> base_t;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -78,6 +76,7 @@ class set
typedef Key value_type;
typedef Compare key_compare;
typedef Compare value_compare;
+ typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename ::boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
typedef typename ::boost::container::allocator_traits<Allocator>::reference reference;
@@ -85,11 +84,11 @@ class set
typedef typename ::boost::container::allocator_traits<Allocator>::size_type size_type;
typedef typename ::boost::container::allocator_traits<Allocator>::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;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::stored_allocator_type) stored_allocator_type;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::iterator) iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_iterator) const_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::reverse_iterator) reverse_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_reverse_iterator) const_reverse_iterator;
//////////////////////////////////////////////
//
@@ -101,7 +100,7 @@ class set
//!
//! <b>Complexity</b>: Constant.
set()
- : m_tree()
+ : base_t()
{}
//! <b>Effects</b>: Constructs an empty set using the specified comparison object
@@ -110,7 +109,14 @@ class set
//! <b>Complexity</b>: Constant.
explicit set(const Compare& comp,
const allocator_type& a = allocator_type())
- : m_tree(comp, a)
+ : base_t(comp, a)
+ {}
+
+ //! <b>Effects</b>: Constructs an empty set using the specified allocator object.
+ //!
+ //! <b>Complexity</b>: Constant.
+ explicit set(const allocator_type& a)
+ : base_t(a)
{}
//! <b>Effects</b>: Constructs an empty set using the specified comparison object and
@@ -121,7 +127,7 @@ class set
template <class InputIterator>
set(InputIterator first, InputIterator last, const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
- : m_tree(true, first, last, comp, a)
+ : base_t(true, first, last, comp, a)
{}
//! <b>Effects</b>: Constructs an empty set using the specified comparison object and
@@ -132,17 +138,19 @@ class set
//! unique values.
//!
//! <b>Complexity</b>: Linear in N.
+ //!
+ //! <b>Note</b>: Non-standard extension.
template <class InputIterator>
set( ordered_unique_range_t, InputIterator first, InputIterator last
, const Compare& comp = Compare(), const allocator_type& a = allocator_type())
- : m_tree(ordered_range, first, last, comp, a)
+ : base_t(ordered_range, first, last, comp, a)
{}
//! <b>Effects</b>: Copy constructs a set.
//!
//! <b>Complexity</b>: Linear in x.size().
set(const set& x)
- : m_tree(x.m_tree)
+ : base_t(static_cast<const base_t&>(x))
{}
//! <b>Effects</b>: Move constructs a set. Constructs *this using x's resources.
@@ -151,14 +159,14 @@ class set
//!
//! <b>Postcondition</b>: x is emptied.
set(BOOST_RV_REF(set) x)
- : m_tree(boost::move(x.m_tree))
+ : base_t(boost::move(static_cast<base_t&>(x)))
{}
//! <b>Effects</b>: Copy constructs a set using the specified allocator.
//!
//! <b>Complexity</b>: Linear in x.size().
set(const set& x, const allocator_type &a)
- : m_tree(x.m_tree, a)
+ : base_t(static_cast<const base_t&>(x), a)
{}
//! <b>Effects</b>: Move constructs a set using the specified allocator.
@@ -166,27 +174,34 @@ class set
//!
//! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
set(BOOST_RV_REF(set) x, const allocator_type &a)
- : m_tree(boost::move(x.m_tree), a)
+ : base_t(boost::move(static_cast<base_t&>(x)), a)
{}
//! <b>Effects</b>: Makes *this a copy of x.
//!
//! <b>Complexity</b>: Linear in x.size().
set& operator=(BOOST_COPY_ASSIGN_REF(set) x)
- { m_tree = x.m_tree; return *this; }
+ { return static_cast<set&>(this->base_t::operator=(static_cast<const base_t&>(x))); }
//! <b>Effects</b>: this->swap(x.get()).
//!
- //! <b>Complexity</b>: Constant.
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and (allocation throws or value_type's move constructor throws)
+ //!
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
set& operator=(BOOST_RV_REF(set) x)
- { m_tree = boost::move(x.m_tree); return *this; }
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
+ { return static_cast<set&>(this->base_t::operator=(boost::move(static_cast<base_t&>(x)))); }
+
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Effects</b>: Returns a copy of the Allocator that
//! was passed to the object's constructor.
//!
//! <b>Complexity</b>: Constant.
- allocator_type get_allocator() const
- { return m_tree.get_allocator(); }
+ allocator_type get_allocator() const;
//! <b>Effects</b>: Returns a reference to the internal allocator.
//!
@@ -195,8 +210,7 @@ class set
//! <b>Complexity</b>: Constant.
//!
//! <b>Note</b>: Non-standard extension.
- const stored_allocator_type &get_stored_allocator() const
- { return m_tree.get_stored_allocator(); }
+ stored_allocator_type &get_stored_allocator();
//! <b>Effects</b>: Returns a reference to the internal allocator.
//!
@@ -205,107 +219,89 @@ class set
//! <b>Complexity</b>: Constant.
//!
//! <b>Note</b>: Non-standard extension.
- stored_allocator_type &get_stored_allocator()
- { return m_tree.get_stored_allocator(); }
-
- //////////////////////////////////////////////
- //
- // capacity
- //
- //////////////////////////////////////////////
+ const stored_allocator_type &get_stored_allocator() const;
//! <b>Effects</b>: Returns an iterator to the first element contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant
- iterator begin()
- { return m_tree.begin(); }
+ iterator begin();
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator begin() const
- { return m_tree.begin(); }
+ const_iterator begin() const;
- //! <b>Effects</b>: Returns an iterator to the end of the container.
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- iterator end()
- { return m_tree.end(); }
+ const_iterator cbegin() const;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
+ //! <b>Effects</b>: Returns an iterator to the end of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator end() const
- { return m_tree.end(); }
+ iterator end();
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
- //! of the reversed container.
+ //! <b>Effects</b>: Returns a const_iterator to the end of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- reverse_iterator rbegin()
- { return m_tree.rbegin(); }
+ const_iterator end() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed container.
+ //! <b>Effects</b>: Returns a const_iterator to the end of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator rbegin() const
- { return m_tree.rbegin(); }
+ const_iterator cend() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
//! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- reverse_iterator rend()
- { return m_tree.rend(); }
+ reverse_iterator rbegin();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
//! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator rend() const
- { return m_tree.rend(); }
+ const_reverse_iterator rbegin() const;
- //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
+ //! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator cbegin() const
- { return m_tree.cbegin(); }
+ const_reverse_iterator crbegin() const;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
+ //! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_iterator cend() const
- { return m_tree.cend(); }
+ reverse_iterator rend();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
//! of the reversed container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator crbegin() const
- { return m_tree.crbegin(); }
+ const_reverse_iterator rend() const;
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
//! of the reversed container.
@@ -313,44 +309,29 @@ class set
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- const_reverse_iterator crend() const
- { return m_tree.crend(); }
-
- //////////////////////////////////////////////
- //
- // capacity
- //
- //////////////////////////////////////////////
+ const_reverse_iterator crend() const;
//! <b>Effects</b>: Returns true if the container contains no elements.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- bool empty() const
- { return m_tree.empty(); }
+ bool empty() const;
//! <b>Effects</b>: Returns the number of the elements contained in the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- size_type size() const
- { return m_tree.size(); }
+ size_type size() const;
//! <b>Effects</b>: Returns the largest possible size of the container.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- size_type max_size() const
- { return m_tree.max_size(); }
-
- //////////////////////////////////////////////
- //
- // modifiers
- //
- //////////////////////////////////////////////
+ size_type max_size() const;
+ #endif // #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
#if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -370,7 +351,7 @@ class set
//! <b>Complexity</b>: Logarithmic.
template <class... Args>
std::pair<iterator,bool> emplace(Args&&... args)
- { return m_tree.emplace_unique(boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_unique(boost::forward<Args>(args)...); }
//! <b>Effects</b>: Inserts an object of type Key constructed with
//! std::forward<Args>(args)... if and only if there is
@@ -383,19 +364,19 @@ class set
//! <b>Complexity</b>: Logarithmic.
template <class... Args>
iterator emplace_hint(const_iterator hint, Args&&... args)
- { return m_tree.emplace_hint_unique(hint, boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_hint_unique(hint, boost::forward<Args>(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<iterator,bool> emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
- { return m_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
+ { return this->base_t::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 m_tree.emplace_hint_unique(hint \
+ { return this->base_t::emplace_hint_unique(hint \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \
//!
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
@@ -450,7 +431,7 @@ class set
//! <b>Complexity</b>: 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)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, value_type, iterator, this->priv_insert, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: first, last are not iterators into *this.
@@ -461,7 +442,9 @@ class set
//! <b>Complexity</b>: At most N log(size()+N) (N is the distance from first to last)
template <class InputIterator>
void insert(InputIterator first, InputIterator last)
- { m_tree.insert_unique(first, last); }
+ { this->base_t::insert_unique(first, last); }
+
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Effects</b>: Erases the element pointed to by p.
//!
@@ -470,203 +453,197 @@ class set
//! returns end().
//!
//! <b>Complexity</b>: Amortized constant time
- iterator erase(const_iterator p)
- { return m_tree.erase(p); }
+ iterator erase(const_iterator p);
//! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
//!
//! <b>Returns</b>: Returns the number of erased elements.
//!
//! <b>Complexity</b>: log(size()) + count(k)
- size_type erase(const key_type& x)
- { return m_tree.erase(x); }
+ size_type erase(const key_type& x);
//! <b>Effects</b>: Erases all the elements in the range [first, last).
//!
//! <b>Returns</b>: Returns last.
//!
//! <b>Complexity</b>: log(size())+N where N is the distance from first to last.
- iterator erase(const_iterator first, const_iterator last)
- { return m_tree.erase(first, last); }
+ iterator erase(const_iterator first, const_iterator last);
//! <b>Effects</b>: Swaps the contents of *this and x.
//!
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- void swap(set& x)
- { m_tree.swap(x.m_tree); }
+ void swap(set& x);
//! <b>Effects</b>: erase(a.begin(),a.end()).
//!
//! <b>Postcondition</b>: size() == 0.
//!
//! <b>Complexity</b>: linear in size().
- void clear()
- { m_tree.clear(); }
-
- //////////////////////////////////////////////
- //
- // observers
- //
- //////////////////////////////////////////////
+ void clear();
//! <b>Effects</b>: Returns the comparison object out
//! of which a was constructed.
//!
//! <b>Complexity</b>: Constant.
- key_compare key_comp() const
- { return m_tree.key_comp(); }
+ key_compare key_comp() const;
//! <b>Effects</b>: Returns an object of value_compare constructed out
//! of the comparison object.
//!
//! <b>Complexity</b>: Constant.
- value_compare value_comp() const
- { return m_tree.key_comp(); }
-
- //////////////////////////////////////////////
- //
- // set operations
- //
- //////////////////////////////////////////////
+ value_compare value_comp() const;
//! <b>Returns</b>: An iterator pointing to an element with the key
//! equivalent to x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic.
- iterator find(const key_type& x)
- { return m_tree.find(x); }
+ iterator find(const key_type& x);
//! <b>Returns</b>: Allocator const_iterator pointing to an element with the key
//! equivalent to x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic.
- const_iterator find(const key_type& x) const
- { return m_tree.find(x); }
+ const_iterator find(const key_type& x) const;
+
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Returns</b>: The number of elements with key equivalent to x.
//!
//! <b>Complexity</b>: log(size())+count(k)
size_type count(const key_type& x) const
- { return m_tree.find(x) == m_tree.end() ? 0 : 1; }
+ { return static_cast<size_type>(this->base_t::find(x) != this->base_t::cend()); }
+
+ //! <b>Returns</b>: The number of elements with key equivalent to x.
+ //!
+ //! <b>Complexity</b>: log(size())+count(k)
+ size_type count(const key_type& x)
+ { return static_cast<size_type>(this->base_t::find(x) != this->base_t::end()); }
+
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Returns</b>: An iterator pointing to the first element with key not less
//! than k, or a.end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- iterator lower_bound(const key_type& x)
- { return m_tree.lower_bound(x); }
+ iterator lower_bound(const key_type& x);
//! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
//! less than k, or a.end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- const_iterator lower_bound(const key_type& x) const
- { return m_tree.lower_bound(x); }
+ const_iterator lower_bound(const key_type& x) const;
//! <b>Returns</b>: An iterator pointing to the first element with key not less
//! than x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- iterator upper_bound(const key_type& x)
- { return m_tree.upper_bound(x); }
+ iterator upper_bound(const key_type& x);
//! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
//! less than x, or end() if such an element is not found.
//!
//! <b>Complexity</b>: Logarithmic
- const_iterator upper_bound(const key_type& x) const
- { return m_tree.upper_bound(x); }
+ const_iterator upper_bound(const key_type& x) const;
+
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
//!
//! <b>Complexity</b>: Logarithmic
std::pair<iterator,iterator> equal_range(const key_type& x)
- { return m_tree.equal_range(x); }
+ { return this->base_t::lower_bound_range(x); }
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
//!
//! <b>Complexity</b>: Logarithmic
std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const
- { return m_tree.equal_range(x); }
+ { return this->base_t::lower_bound_range(x); }
- /// @cond
- template <class K1, class C1, class A1>
- friend bool operator== (const set<K1,C1,A1>&, const set<K1,C1,A1>&);
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- template <class K1, class C1, class A1>
- friend bool operator< (const set<K1,C1,A1>&, const set<K1,C1,A1>&);
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
+ //!
+ //! <b>Complexity</b>: Logarithmic
+ std::pair<iterator,iterator> equal_range(const key_type& x);
- private:
- template <class KeyType>
- std::pair<iterator, bool> priv_insert(BOOST_FWD_REF(KeyType) x)
- { return m_tree.insert_unique(::boost::forward<KeyType>(x)); }
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
+ //!
+ //! <b>Complexity</b>: Logarithmic
+ std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const;
- template <class KeyType>
- iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x)
- { return m_tree.insert_unique(p, ::boost::forward<KeyType>(x)); }
- /// @endcond
-};
+ //! <b>Effects</b>: Rebalances the tree. It's a no-op for Red-Black and AVL trees.
+ //!
+ //! <b>Complexity</b>: Linear
+ void rebalance();
+
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const set& x, const set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator==(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y)
-{ return x.m_tree == y.m_tree; }
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const set& x, const set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator<(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y)
-{ return x.m_tree < y.m_tree; }
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const set& x, const set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator!=(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y)
-{ return !(x == y); }
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const set& x, const set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator>(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y)
-{ return y < x; }
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const set& x, const set& y);
+
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const set& x, const set& y);
+
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(set& x, set& y);
-template <class Key, class Compare, class Allocator>
-inline bool operator<=(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y)
-{ return !(y < x); }
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
-template <class Key, class Compare, class Allocator>
-inline bool operator>=(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y)
-{ return !(x < y); }
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ private:
+ template <class KeyType>
+ std::pair<iterator, bool> priv_insert(BOOST_FWD_REF(KeyType) x)
+ { return this->base_t::insert_unique(::boost::forward<KeyType>(x)); }
-template <class Key, class Compare, class Allocator>
-inline void swap(set<Key,Compare,Allocator>& x, set<Key,Compare,Allocator>& y)
-{ x.swap(y); }
+ template <class KeyType>
+ iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x)
+ { return this->base_t::insert_unique(p, ::boost::forward<KeyType>(x)); }
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+};
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
} //namespace container {
//!has_trivial_destructor_after_move<> == true_type
//!specialization for optimizations
-template <class Key, class C, class Allocator>
-struct has_trivial_destructor_after_move<boost::container::set<Key, C, Allocator> >
+template <class Key, class C, class SetOptions, class Allocator>
+struct has_trivial_destructor_after_move<boost::container::set<Key, C, Allocator, SetOptions> >
{
static const bool value = has_trivial_destructor_after_move<Allocator>::value && has_trivial_destructor_after_move<C>::value;
};
namespace container {
-// Forward declaration of operators < and ==, needed for friend declaration.
-
-template <class Key, class Compare, class Allocator>
-inline bool operator==(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
-template <class Key, class Compare, class Allocator>
-inline bool operator<(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-/// @endcond
+#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
//! A multiset is a kind of associative container that supports equivalent keys
//! (possibly contains multiple copies of the same key value) and provides for
@@ -675,20 +652,27 @@ inline bool operator<(const multiset<Key,Compare,Allocator>& x,
//! A multiset satisfies all of the requirements of a container and of a reversible
//! container, and of an associative container). multiset also provides most operations
//! described for duplicate keys.
-#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
-template <class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key> >
+//!
+//! \tparam Key is the type to be inserted in the set, which is also the key_type
+//! \tparam Compare is the comparison functor used to order keys
+//! \tparam Allocator is the allocator to be used to allocate memory for this container
+//! \tparam MultiSetOptions is an packed option type generated using using boost::container::tree_assoc_options.
+template <class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>, class MultiSetOptions = tree_assoc_defaults >
#else
-template <class Key, class Compare, class Allocator>
+template <class Key, class Compare, class Allocator, class MultiSetOptions>
#endif
class multiset
-{
/// @cond
+ : public container_detail::tree
+ <Key, Key,container_detail::identity<Key>, Compare, Allocator, MultiSetOptions>
+ /// @endcond
+{
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(multiset)
- typedef container_detail::rbtree<Key, Key,
- container_detail::identity<Key>, Compare, Allocator> tree_t;
- tree_t m_tree; // red-black tree representing multiset
- /// @endcond
+ typedef container_detail::tree
+ <Key, Key,container_detail::identity<Key>, Compare, Allocator, MultiSetOptions> base_t;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
@@ -701,6 +685,7 @@ class multiset
typedef Key value_type;
typedef Compare key_compare;
typedef Compare value_compare;
+ typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename ::boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
typedef typename ::boost::container::allocator_traits<Allocator>::reference reference;
@@ -708,11 +693,11 @@ class multiset
typedef typename ::boost::container::allocator_traits<Allocator>::size_type size_type;
typedef typename ::boost::container::allocator_traits<Allocator>::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;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::stored_allocator_type) stored_allocator_type;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::iterator) iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_iterator) const_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::reverse_iterator) reverse_iterator;
+ typedef typename BOOST_CONTAINER_IMPDEF(base_t::const_reverse_iterator) const_reverse_iterator;
//////////////////////////////////////////////
//
@@ -720,33 +705,28 @@ class multiset
//
//////////////////////////////////////////////
- //! <b>Effects</b>: Constructs an empty multiset using the specified comparison
- //! object and allocator.
- //!
- //! <b>Complexity</b>: Constant.
+ //! @copydoc ::boost::container::set::set()
multiset()
- : m_tree()
+ : base_t()
{}
- //! <b>Effects</b>: Constructs an empty multiset using the specified comparison
- //! object and allocator.
- //!
- //! <b>Complexity</b>: Constant.
+ //! @copydoc ::boost::container::set::set(const Compare&, const allocator_type&)
explicit multiset(const Compare& comp,
const allocator_type& a = allocator_type())
- : m_tree(comp, a)
+ : base_t(comp, a)
{}
- //! <b>Effects</b>: Constructs an empty multiset using the specified comparison object
- //! and allocator, and inserts elements from the range [first ,last ).
- //!
- //! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
- //! comp and otherwise N logN, where N is last - first.
+ //! @copydoc ::boost::container::set::set(const allocator_type&)
+ explicit multiset(const allocator_type& a)
+ : base_t(a)
+ {}
+
+ //! @copydoc ::boost::container::set::set(InputIterator, InputIterator, const Compare& comp, const allocator_type&)
template <class InputIterator>
multiset(InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const allocator_type& a = allocator_type())
- : m_tree(false, first, last, comp, a)
+ : base_t(false, first, last, comp, a)
{}
//! <b>Effects</b>: Constructs an empty multiset using the specified comparison object and
@@ -756,228 +736,100 @@ class multiset
//! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
//!
//! <b>Complexity</b>: Linear in N.
+ //!
+ //! <b>Note</b>: Non-standard extension.
template <class InputIterator>
multiset( ordered_range_t, InputIterator first, InputIterator last
, const Compare& comp = Compare()
, const allocator_type& a = allocator_type())
- : m_tree(ordered_range, first, last, comp, a)
+ : base_t(ordered_range, first, last, comp, a)
{}
- //! <b>Effects</b>: Copy constructs a multiset.
- //!
- //! <b>Complexity</b>: Linear in x.size().
+ //! @copydoc ::boost::container::set::set(const set &)
multiset(const multiset& x)
- : m_tree(x.m_tree)
+ : base_t(static_cast<const base_t&>(x))
{}
- //! <b>Effects</b>: Move constructs a multiset. Constructs *this using x's resources.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Postcondition</b>: x is emptied.
+ //! @copydoc ::boost::container::set(set &&)
multiset(BOOST_RV_REF(multiset) x)
- : m_tree(boost::move(x.m_tree))
+ : base_t(boost::move(static_cast<base_t&>(x)))
{}
- //! <b>Effects</b>: Copy constructs a multiset using the specified allocator.
- //!
- //! <b>Complexity</b>: Linear in x.size().
+ //! @copydoc ::boost::container::set(const set &, const allocator_type &)
multiset(const multiset& x, const allocator_type &a)
- : m_tree(x.m_tree, a)
+ : base_t(static_cast<const base_t&>(x), a)
{}
- //! <b>Effects</b>: Move constructs a multiset using the specified allocator.
- //! Constructs *this using x's resources.
- //!
- //! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
- //!
- //! <b>Postcondition</b>: x is emptied.
+ //! @copydoc ::boost::container::set(set &&, const allocator_type &)
multiset(BOOST_RV_REF(multiset) x, const allocator_type &a)
- : m_tree(boost::move(x.m_tree), a)
+ : base_t(boost::move(static_cast<base_t&>(x)), a)
{}
- //! <b>Effects</b>: Makes *this a copy of x.
- //!
- //! <b>Complexity</b>: Linear in x.size().
+ //! @copydoc ::boost::container::set::operator=(const set &)
multiset& operator=(BOOST_COPY_ASSIGN_REF(multiset) x)
- { m_tree = x.m_tree; return *this; }
+ { return static_cast<multiset&>(this->base_t::operator=(static_cast<const base_t&>(x))); }
- //! <b>Effects</b>: this->swap(x.get()).
- //!
- //! <b>Complexity</b>: Constant.
+ //! @copydoc ::boost::container::set::operator=(set &&)
multiset& operator=(BOOST_RV_REF(multiset) x)
- { m_tree = boost::move(x.m_tree); return *this; }
-
- //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the object's constructor.
- //!
- //! <b>Complexity</b>: Constant.
- allocator_type get_allocator() const
- { return m_tree.get_allocator(); }
+ { return static_cast<multiset&>(this->base_t::operator=(boost::move(static_cast<base_t&>(x)))); }
- //! <b>Effects</b>: Returns a reference to the internal allocator.
- //!
- //! <b>Throws</b>: Nothing
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Note</b>: Non-standard extension.
- stored_allocator_type &get_stored_allocator()
- { return m_tree.get_stored_allocator(); }
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! <b>Effects</b>: Returns a reference to the internal allocator.
- //!
- //! <b>Throws</b>: Nothing
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Note</b>: Non-standard extension.
- const stored_allocator_type &get_stored_allocator() const
- { return m_tree.get_stored_allocator(); }
+ //! @copydoc ::boost::container::set::get_allocator()
+ allocator_type get_allocator() const;
- //////////////////////////////////////////////
- //
- // iterators
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::set::get_stored_allocator()
+ stored_allocator_type &get_stored_allocator();
- //! <b>Effects</b>: Returns an iterator to the first element contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- iterator begin()
- { return m_tree.begin(); }
+ //! @copydoc ::boost::container::set::get_stored_allocator() const
+ const stored_allocator_type &get_stored_allocator() const;
- //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator begin() const
- { return m_tree.begin(); }
+ //! @copydoc ::boost::container::set::begin()
+ iterator begin();
- //! <b>Effects</b>: Returns an iterator to the end of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- iterator end()
- { return m_tree.end(); }
+ //! @copydoc ::boost::container::set::begin() const
+ const_iterator begin() const;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator end() const
- { return m_tree.end(); }
+ //! @copydoc ::boost::container::set::cbegin() const
+ const_iterator cbegin() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- reverse_iterator rbegin()
- { return m_tree.rbegin(); }
+ //! @copydoc ::boost::container::set::end()
+ iterator end() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator rbegin() const
- { return m_tree.rbegin(); }
+ //! @copydoc ::boost::container::set::end() const
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- reverse_iterator rend()
- { return m_tree.rend(); }
+ //! @copydoc ::boost::container::set::cend() const
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator rend() const
- { return m_tree.rend(); }
+ //! @copydoc ::boost::container::set::rbegin()
+ reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator cbegin() const
- { return m_tree.cbegin(); }
+ //! @copydoc ::boost::container::set::rbegin() const
+ const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_iterator to the end of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_iterator cend() const
- { return m_tree.cend(); }
+ //! @copydoc ::boost::container::set::crbegin() const
+ const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator crbegin() const
- { return m_tree.crbegin(); }
+ //! @copydoc ::boost::container::set::rend()
+ reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- const_reverse_iterator crend() const
- { return m_tree.crend(); }
+ //! @copydoc ::boost::container::set::rend() const
+ const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT;
- //////////////////////////////////////////////
- //
- // capacity
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::set::crend() const
+ const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns true if the container contains no elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- bool empty() const
- { return m_tree.empty(); }
+ //! @copydoc ::boost::container::set::empty() const
+ bool empty() const;
- //! <b>Effects</b>: Returns the number of the elements contained in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- size_type size() const
- { return m_tree.size(); }
+ //! @copydoc ::boost::container::set::size() const
+ size_type size() const;
- //! <b>Effects</b>: Returns the largest possible size of the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- size_type max_size() const
- { return m_tree.max_size(); }
+ //! @copydoc ::boost::container::set::max_size() const
+ size_type max_size() const;
- //////////////////////////////////////////////
- //
- // modifiers
- //
- //////////////////////////////////////////////
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
#if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -988,7 +840,7 @@ class multiset
//! <b>Complexity</b>: Logarithmic.
template <class... Args>
iterator emplace(Args&&... args)
- { return m_tree.emplace_equal(boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_equal(boost::forward<Args>(args)...); }
//! <b>Effects</b>: Inserts an object of type Key constructed with
//! std::forward<Args>(args)...
@@ -1000,19 +852,19 @@ class multiset
//! is inserted right before p.
template <class... Args>
iterator emplace_hint(const_iterator hint, Args&&... args)
- { return m_tree.emplace_hint_equal(hint, boost::forward<Args>(args)...); }
+ { return this->base_t::emplace_hint_equal(hint, boost::forward<Args>(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 m_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
+ { return this->base_t::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 m_tree.emplace_hint_equal(hint \
+ { return this->base_t::emplace_hint_equal(hint \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \
//!
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
@@ -1020,9 +872,6 @@ class multiset
#endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
-
-
-
#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Effects</b>: Inserts x and returns the iterator pointing to the
//! newly inserted element.
@@ -1063,7 +912,7 @@ class multiset
//! 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)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, value_type, iterator, this->priv_insert, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: first, last are not iterators into *this.
@@ -1073,204 +922,126 @@ class multiset
//! <b>Complexity</b>: At most N log(size()+N) (N is the distance from first to last)
template <class InputIterator>
void insert(InputIterator first, InputIterator last)
- { m_tree.insert_equal(first, last); }
+ { this->base_t::insert_equal(first, last); }
- //! <b>Effects</b>: Erases the element pointed to by p.
- //!
- //! <b>Returns</b>: Returns an iterator pointing to the element immediately
- //! following q prior to the element being erased. If no such element exists,
- //! returns end().
- //!
- //! <b>Complexity</b>: Amortized constant time
- iterator erase(const_iterator p)
- { return m_tree.erase(p); }
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
- //!
- //! <b>Returns</b>: Returns the number of erased elements.
- //!
- //! <b>Complexity</b>: log(size()) + count(k)
- size_type erase(const key_type& x)
- { return m_tree.erase(x); }
+ //! @copydoc ::boost::container::set::erase(const_iterator)
+ iterator erase(const_iterator p);
- //! <b>Effects</b>: Erases all the elements in the range [first, last).
- //!
- //! <b>Returns</b>: Returns last.
- //!
- //! <b>Complexity</b>: log(size())+N where N is the distance from first to last.
- iterator erase(const_iterator first, const_iterator last)
- { return m_tree.erase(first, last); }
+ //! @copydoc ::boost::container::set::erase(const key_type&)
+ size_type erase(const key_type& x);
- //! <b>Effects</b>: Swaps the contents of *this and x.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- void swap(multiset& x)
- { m_tree.swap(x.m_tree); }
+ //! @copydoc ::boost::container::set::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator first, const_iterator last);
- //! <b>Effects</b>: erase(a.begin(),a.end()).
- //!
- //! <b>Postcondition</b>: size() == 0.
- //!
- //! <b>Complexity</b>: linear in size().
- void clear()
- { m_tree.clear(); }
+ //! @copydoc ::boost::container::set::swap
+ void swap(flat_multiset& x);
- //////////////////////////////////////////////
- //
- // observers
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::set::clear
+ void clear() BOOST_CONTAINER_NOEXCEPT;
- //! <b>Effects</b>: Returns the comparison object out
- //! of which a was constructed.
- //!
- //! <b>Complexity</b>: Constant.
- key_compare key_comp() const
- { return m_tree.key_comp(); }
+ //! @copydoc ::boost::container::set::key_comp
+ key_compare key_comp() const;
- //! <b>Effects</b>: Returns an object of value_compare constructed out
- //! of the comparison object.
- //!
- //! <b>Complexity</b>: Constant.
- value_compare value_comp() const
- { return m_tree.key_comp(); }
+ //! @copydoc ::boost::container::set::value_comp
+ value_compare value_comp() const;
- //////////////////////////////////////////////
- //
- // set operations
- //
- //////////////////////////////////////////////
+ //! @copydoc ::boost::container::set::find(const key_type& )
+ iterator find(const key_type& x);
- //! <b>Returns</b>: An iterator pointing to an element with the key
- //! equivalent to x, or end() if such an element is not found.
- //!
- //! <b>Complexity</b>: Logarithmic.
- iterator find(const key_type& x)
- { return m_tree.find(x); }
+ //! @copydoc ::boost::container::set::find(const key_type& ) const
+ const_iterator find(const key_type& x) const;
- //! <b>Returns</b>: Allocator const iterator pointing to an element with the key
- //! equivalent to x, or end() if such an element is not found.
- //!
- //! <b>Complexity</b>: Logarithmic.
- const_iterator find(const key_type& x) const
- { return m_tree.find(x); }
+ //! @copydoc ::boost::container::set::count(const key_type& ) const
+ size_type count(const key_type& x) const;
- //! <b>Returns</b>: The number of elements with key equivalent to x.
+ //! @copydoc ::boost::container::set::lower_bound(const key_type& )
+ iterator lower_bound(const key_type& x);
+
+ //! @copydoc ::boost::container::set::lower_bound(const key_type& ) const
+ const_iterator lower_bound(const key_type& x) const;
+
+ //! @copydoc ::boost::container::set::upper_bound(const key_type& )
+ iterator upper_bound(const key_type& x);
+
+ //! @copydoc ::boost::container::set::upper_bound(const key_type& ) const
+ const_iterator upper_bound(const key_type& x) const;
+
+ //! @copydoc ::boost::container::set::equal_range(const key_type& ) const
+ std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const;
+
+ //! @copydoc ::boost::container::set::equal_range(const key_type& )
+ std::pair<iterator,iterator> equal_range(const key_type& x);
+
+ //! @copydoc ::boost::container::set::rebalance()
+ void rebalance();
+
+ //! <b>Effects</b>: Returns true if x and y are equal
//!
- //! <b>Complexity</b>: log(size())+count(k)
- size_type count(const key_type& x) const
- { return m_tree.count(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const multiset& x, const multiset& y);
- //! <b>Returns</b>: An iterator pointing to the first element with key not less
- //! than k, or a.end() if such an element is not found.
+ //! <b>Effects</b>: Returns true if x and y are unequal
//!
- //! <b>Complexity</b>: Logarithmic
- iterator lower_bound(const key_type& x)
- { return m_tree.lower_bound(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const multiset& x, const multiset& y);
- //! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
- //! less than k, or a.end() if such an element is not found.
+ //! <b>Effects</b>: Returns true if x is less than y
//!
- //! <b>Complexity</b>: Logarithmic
- const_iterator lower_bound(const key_type& x) const
- { return m_tree.lower_bound(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const multiset& x, const multiset& y);
- //! <b>Returns</b>: An iterator pointing to the first element with key not less
- //! than x, or end() if such an element is not found.
+ //! <b>Effects</b>: Returns true if x is greater than y
//!
- //! <b>Complexity</b>: Logarithmic
- iterator upper_bound(const key_type& x)
- { return m_tree.upper_bound(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const multiset& x, const multiset& y);
- //! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
- //! less than x, or end() if such an element is not found.
+ //! <b>Effects</b>: Returns true if x is equal or less than y
//!
- //! <b>Complexity</b>: Logarithmic
- const_iterator upper_bound(const key_type& x) const
- { return m_tree.upper_bound(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const multiset& x, const multiset& y);
- //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
//!
- //! <b>Complexity</b>: Logarithmic
- std::pair<iterator,iterator> equal_range(const key_type& x)
- { return m_tree.equal_range(x); }
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const multiset& x, const multiset& y);
- //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
+ //! <b>Effects</b>: x.swap(y)
//!
- //! <b>Complexity</b>: Logarithmic
- std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const
- { return m_tree.equal_range(x); }
+ //! <b>Complexity</b>: Constant.
+ friend void swap(multiset& x, multiset& y);
- /// @cond
- template <class K1, class C1, class A1>
- friend bool operator== (const multiset<K1,C1,A1>&,
- const multiset<K1,C1,A1>&);
- template <class K1, class C1, class A1>
- friend bool operator< (const multiset<K1,C1,A1>&,
- const multiset<K1,C1,A1>&);
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
template <class KeyType>
iterator priv_insert(BOOST_FWD_REF(KeyType) x)
- { return m_tree.insert_equal(::boost::forward<KeyType>(x)); }
+ { return this->base_t::insert_equal(::boost::forward<KeyType>(x)); }
template <class KeyType>
iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x)
- { return m_tree.insert_equal(p, ::boost::forward<KeyType>(x)); }
+ { return this->base_t::insert_equal(p, ::boost::forward<KeyType>(x)); }
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
-template <class Key, class Compare, class Allocator>
-inline bool operator==(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y)
-{ return x.m_tree == y.m_tree; }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator<(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y)
-{ return x.m_tree < y.m_tree; }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator!=(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y)
-{ return !(x == y); }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator>(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y)
-{ return y < x; }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator<=(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y)
-{ return !(y < x); }
-
-template <class Key, class Compare, class Allocator>
-inline bool operator>=(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y)
-{ return !(x < y); }
-
-template <class Key, class Compare, class Allocator>
-inline void swap(multiset<Key,Compare,Allocator>& x, multiset<Key,Compare,Allocator>& y)
-{ x.swap(y); }
-
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
} //namespace container {
//!has_trivial_destructor_after_move<> == true_type
//!specialization for optimizations
-template <class Key, class C, class Allocator>
-struct has_trivial_destructor_after_move<boost::container::multiset<Key, C, Allocator> >
+template <class Key, class C, class Allocator, class MultiSetOptions>
+struct has_trivial_destructor_after_move<boost::container::multiset<Key, C, Allocator, MultiSetOptions> >
{
static const bool value = has_trivial_destructor_after_move<Allocator>::value && has_trivial_destructor_after_move<C>::value;
};
namespace container {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
}}
diff --git a/3party/boost/boost/container/slist.hpp b/3party/boost/boost/container/slist.hpp
index a9a4f67781..6941d29ed2 100644
--- a/3party/boost/boost/container/slist.hpp
+++ b/3party/boost/boost/container/slist.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2004-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2004-2013. 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)
//
@@ -11,7 +11,7 @@
#ifndef BOOST_CONTAINER_SLIST_HPP
#define BOOST_CONTAINER_SLIST_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -24,6 +24,7 @@
#include <boost/move/detail/move_helpers.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/container/detail/utilities.hpp>
+#include <boost/container/detail/iterators.hpp>
#include <boost/container/detail/mpl.hpp>
#include <boost/container/detail/type_traits.hpp>
#include <boost/type_traits/has_trivial_destructor.hpp>
@@ -47,7 +48,7 @@
namespace boost {
namespace container {
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class T, class Allocator>
class slist;
@@ -69,8 +70,16 @@ struct slist_node
slist_node();
public:
+ typedef T value_type;
typedef typename slist_hook<VoidPointer>::type hook_type;
+
T m_data;
+
+ T &get_data()
+ { return this->m_data; }
+
+ const T &get_data() const
+ { return this->m_data; }
};
template<class Allocator>
@@ -95,96 +104,9 @@ struct intrusive_slist_type
typedef container_type type ;
};
-template<class T, class IIterator>
-class slist_const_iterator
- : public std::iterator< std::forward_iterator_tag, T
- , typename iiterator_types<T, IIterator>::difference_type
- , typename iiterator_types<T, IIterator>::const_pointer
- , typename iiterator_types<T, IIterator>::const_reference>
-{
- protected:
-
- IIterator m_it;
-
- public:
- typedef typename iiterator_types<T, IIterator>::const_pointer const_pointer;
- typedef typename iiterator_types<T, IIterator>::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<const_pointer>::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; }
-
- const IIterator &get() const
- { return this->m_it; }
-};
-
-template<class T, class IIterator>
-class slist_iterator
- : public slist_const_iterator<T, IIterator>
-{
- private:
- typedef slist_const_iterator<T, IIterator> const_iterator;
-
- public:
- typedef typename iiterator_types<T, IIterator>::pointer pointer;
- typedef typename iiterator_types<T, IIterator>::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<pointer>::pointer_to(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); }
-
- const IIterator &get() const
- { return this->m_it; }
-};
-
} //namespace container_detail {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! An slist is a singly linked list: a list where each element is linked to the next
//! element, but not to the previous element. That is, it is a Sequence that
@@ -218,6 +140,9 @@ class slist_iterator
//! possible. If you find that insert_after and erase_after aren't adequate for your
//! 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.
+//!
+//! \tparam T The type of object that is stored in the list
+//! \tparam Allocator The allocator used for all internal memory management
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class T, class Allocator = std::allocator<T> >
#else
@@ -227,7 +152,7 @@ class slist
: protected container_detail::node_alloc_holder
<Allocator, typename container_detail::intrusive_slist_type<Allocator>::type>
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
typedef typename
container_detail::intrusive_slist_type<Allocator>::type Icont;
typedef container_detail::node_alloc_holder<Allocator, Icont> AllocHolder;
@@ -271,9 +196,9 @@ class slist
};
BOOST_COPYABLE_AND_MOVABLE(slist)
- typedef container_detail::slist_iterator<T, typename Icont::iterator> iterator_impl;
- typedef container_detail::slist_const_iterator<T, typename Icont::iterator>const_iterator_impl;
- /// @endcond
+ typedef container_detail::iterator<typename Icont::iterator, false> iterator_impl;
+ typedef container_detail::iterator<typename Icont::iterator, true > const_iterator_impl;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -327,7 +252,7 @@ class slist
//! <b>Effects</b>: Constructs a list that will use a copy of allocator a
//! and inserts n copies of value.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
+ //! <b>Throws</b>: If allocator_type's default constructor
//! throws or T's default or copy constructor throws.
//!
//! <b>Complexity</b>: Linear to n.
@@ -338,8 +263,8 @@ class slist
//! <b>Effects</b>: Constructs a list that will use a copy of allocator a
//! and inserts a copy of the range [first, last) in the list.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
- //! throws or T's constructor taking an dereferenced InIt throws.
+ //! <b>Throws</b>: If allocator_type's default constructor
+ //! throws or T's constructor taking a dereferenced InIt throws.
//!
//! <b>Complexity</b>: Linear to the range [first, last).
template <class InpIt>
@@ -351,7 +276,7 @@ class slist
//!
//! <b>Postcondition</b>: x == *this.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor throws.
+ //! <b>Throws</b>: If allocator_type's default constructor
//!
//! <b>Complexity</b>: Linear to the elements x contains.
slist(const slist& x)
@@ -371,7 +296,7 @@ class slist
//!
//! <b>Postcondition</b>: x == *this.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor throws.
+ //! <b>Throws</b>: If allocator_type's default constructor
//!
//! <b>Complexity</b>: Linear to the elements x contains.
slist(const slist& x, const allocator_type &a)
@@ -391,7 +316,7 @@ class slist
this->icont().swap(x.icont());
}
else{
- this->insert(this->cbegin(), x.begin(), x.end());
+ this->insert_after(this->cbefore_begin(), x.begin(), x.end());
}
}
@@ -433,28 +358,35 @@ class slist
//! <b>Postcondition</b>: this->size() == x.size(). *this contains a copy
//! of each of x's elements.
//!
- //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and (allocation throws or value_type's move constructor throws)
//!
- //! <b>Complexity</b>: Linear to the number of elements in x.
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
slist& operator= (BOOST_RV_REF(slist) x)
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
{
- if (&x != this){
- NodeAlloc &this_alloc = this->node_alloc();
- NodeAlloc &x_alloc = x.node_alloc();
- //If allocators a re 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>::iterator_category ItCat;
- this->assign( boost::make_move_iterator(x.begin())
- , boost::make_move_iterator(x.end()));
- }
+ BOOST_ASSERT(this != &x);
+ NodeAlloc &this_alloc = this->node_alloc();
+ NodeAlloc &x_alloc = x.node_alloc();
+ const bool propagate_alloc = allocator_traits_type::
+ propagate_on_container_move_assignment::value;
+ const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
+ //Resources can be transferred if both allocators are
+ //going to be equal after this function (either propagated or already equal)
+ if(propagate_alloc || allocators_equal){
+ //Destroy
+ this->clear();
+ //Move allocator if needed
+ this->AllocHolder::move_assign_alloc(x);
+ //Obtain resources
+ this->icont() = boost::move(x.icont());
+ }
+ //Else do a one by one move
+ else{
+ this->assign( boost::make_move_iterator(x.begin())
+ , boost::make_move_iterator(x.end()));
}
return *this;
}
@@ -667,7 +599,7 @@ class slist
{ return AllocHolder::max_size(); }
//! <b>Effects</b>: Inserts or erases elements at the end such that
- //! the size becomes n. New elements are default constructed.
+ //! the size becomes n. New elements are value initialized.
//!
//! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
//!
@@ -676,8 +608,8 @@ class slist
{
const_iterator last_pos;
if(!priv_try_shrink(new_size, last_pos)){
- typedef default_construct_iterator<value_type, difference_type> default_iterator;
- this->insert_after(last_pos, default_iterator(new_size - this->size()), default_iterator());
+ typedef value_init_construct_iterator<value_type, difference_type> value_init_iterator;
+ this->insert_after(last_pos, value_init_iterator(new_size - this->size()), value_init_iterator());
}
}
@@ -832,7 +764,7 @@ class slist
//! 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)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert_after, T, iterator, priv_insert_after, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: prev_pos must be a valid iterator of *this.
@@ -1345,7 +1277,7 @@ class slist
//! <b>Complexity</b>: 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)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: p must be a valid iterator of *this.
@@ -1363,7 +1295,7 @@ class slist
this->insert_after(prev, n, x);
return ++iterator(prev.get());
}
-
+
//! <b>Requires</b>: p must be a valid iterator of *this.
//!
//! <b>Effects</b>: Insert a copy of the [first, last) range before p.
@@ -1502,14 +1434,70 @@ class slist
void splice(const_iterator p, BOOST_RV_REF(slist) x, const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
{ this->splice(p, static_cast<slist&>(x), first, last); }
- /// @cond
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const slist& x, const slist& y)
+ {
+ if(x.size() != y.size()){
+ return false;
+ }
+ typedef typename slist<T,Allocator>::const_iterator const_iterator;
+ const_iterator end1 = x.end();
+
+ const_iterator i1 = x.begin();
+ const_iterator i2 = y.begin();
+ while (i1 != end1 && *i1 == *i2){
+ ++i1;
+ ++i2;
+ }
+ return i1 == end1;
+ }
+
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const slist& x, const slist& y)
+ { return !(x == y); }
+
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const slist& x, const slist& y)
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
+
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const slist& x, const slist& y)
+ { return y < x; }
+
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const slist& x, const slist& y)
+ { return !(y < x); }
+
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const slist& x, const slist& y)
+ { return !(x < y); }
+
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(slist& x, slist& y)
+ { x.swap(y); }
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
- void priv_push_front (const T &x)
- { this->insert(this->cbegin(), x); }
+ void priv_push_front (const T &x)
+ { this->insert_after(this->cbefore_begin(), x); }
void priv_push_front (BOOST_RV_REF(T) x)
- { this->insert(this->cbegin(), ::boost::move(x)); }
+ { this->insert_after(this->cbefore_begin(), ::boost::move(x)); }
bool priv_try_shrink(size_type new_size, const_iterator &last_pos)
{
@@ -1584,63 +1572,12 @@ class slist
const value_type &m_ref;
};
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
-template <class T, class Allocator>
-inline bool
-operator==(const slist<T,Allocator>& x, const slist<T,Allocator>& y)
-{
- if(x.size() != y.size()){
- return false;
- }
- typedef typename slist<T,Allocator>::const_iterator const_iterator;
- const_iterator end1 = x.end();
-
- const_iterator i1 = x.begin();
- const_iterator i2 = y.begin();
- while (i1 != end1 && *i1 == *i2){
- ++i1;
- ++i2;
- }
- return i1 == end1;
-}
-
-template <class T, class Allocator>
-inline bool
-operator<(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
-{
- return std::lexicographical_compare
- (sL1.begin(), sL1.end(), sL2.begin(), sL2.end());
-}
-
-template <class T, class Allocator>
-inline bool
-operator!=(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
- { return !(sL1 == sL2); }
-
-template <class T, class Allocator>
-inline bool
-operator>(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
- { return sL2 < sL1; }
-
-template <class T, class Allocator>
-inline bool
-operator<=(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
- { return !(sL2 < sL1); }
-
-template <class T, class Allocator>
-inline bool
-operator>=(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
- { return !(sL1 < sL2); }
-
-template <class T, class Allocator>
-inline void swap(slist<T,Allocator>& x, slist<T,Allocator>& y)
- { x.swap(y); }
-
}}
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace boost {
@@ -1653,14 +1590,14 @@ struct has_trivial_destructor_after_move<boost::container::slist<T, Allocator> >
namespace container {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
}} //namespace boost{ namespace container {
// Specialization of insert_iterator so that insertions will be constant
// time rather than linear time.
-///@cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//Ummm, I don't like to define things in namespace std, but
//there is no other way
@@ -1699,7 +1636,7 @@ class insert_iterator<boost::container::slist<T, Allocator> >
} //namespace std;
-///@endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#include <boost/container/detail/config_end.hpp>
diff --git a/3party/boost/boost/container/stable_vector.hpp b/3party/boost/boost/container/stable_vector.hpp
index 3da8c6413c..5348b935bb 100644
--- a/3party/boost/boost/container/stable_vector.hpp
+++ b/3party/boost/boost/container/stable_vector.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2008-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2008-2013. 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,15 +19,13 @@
#ifndef BOOST_CONTAINER_STABLE_VECTOR_HPP
#define BOOST_CONTAINER_STABLE_VECTOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/container_fwd.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/not.hpp>
#include <boost/assert.hpp>
#include <boost/container/throw_exception.hpp>
#include <boost/container/detail/allocator_version_traits.hpp>
@@ -47,18 +45,18 @@
#include <memory>
#include <new> //placement new
-///@cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#include <boost/container/vector.hpp>
//#define STABLE_VECTOR_ENABLE_INVARIANT_CHECKING
-///@endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace boost {
namespace container {
-///@cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace stable_vector_detail{
@@ -77,7 +75,7 @@ class clear_on_destroy
{
if(do_clear_){
c_.clear();
- c_.priv_clear_pool();
+ c_.priv_clear_pool();
}
}
@@ -88,7 +86,7 @@ class clear_on_destroy
bool do_clear_;
};
-template<typename VoidPointer, typename T>
+template<typename Pointer>
struct node;
template<class VoidPtr>
@@ -116,167 +114,18 @@ struct node_base
node_base_ptr_ptr up;
};
-template<typename VoidPointer, typename T>
+template<typename Pointer>
struct node
- : public node_base<VoidPointer>
+ : public node_base
+ <typename ::boost::intrusive::pointer_traits<Pointer>::template
+ rebind_pointer<void>::type
+ >
{
private:
node();
public:
- T value;
-};
-
-template<typename T, typename Reference, typename Pointer>
-class iterator
- : public std::iterator< std::random_access_iterator_tag
- , T
- , typename boost::intrusive::
- pointer_traits<Pointer>::difference_type
- , Pointer
- , Reference>
-{
- typedef boost::intrusive::
- pointer_traits<Pointer> ptr_traits;
- typedef typename ptr_traits::template
- rebind_pointer<void>::type void_ptr;
- typedef node<void_ptr, T> node_type;
- typedef node_base<void_ptr> node_base_type;
- typedef typename ptr_traits::template
- rebind_pointer<node_type>::type node_ptr;
- typedef boost::intrusive::
- pointer_traits<node_ptr> node_ptr_traits;
- typedef typename ptr_traits::template
- rebind_pointer<node_base_type>::type node_base_ptr;
- typedef typename ptr_traits::template
- rebind_pointer<node_base_ptr>::type node_base_ptr_ptr;
- typedef typename ptr_traits::template
- rebind_pointer<T>::type friend_iterator_pointer;
-
- friend class iterator<T, const T, friend_iterator_pointer>;
-
- public:
- typedef std::random_access_iterator_tag iterator_category;
- typedef T value_type;
- typedef typename ptr_traits::difference_type difference_type;
- typedef Pointer pointer;
- typedef Reference reference;
-
- iterator()
- {}
-
- explicit iterator(node_ptr p)
- : pn(p)
- {}
-
- iterator(const iterator<T, T&, friend_iterator_pointer>& x)
- : pn(x.pn)
- {}
-
- node_ptr &node_pointer()
- { return pn; }
-
- const node_ptr &node_pointer() const
- { return pn; }
-
- public:
- //Pointer like operators
- reference operator*() const
- { return pn->value; }
-
- pointer operator->() const
- { return ptr_traits::pointer_to(this->operator*()); }
-
- //Increment / Decrement
- 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--()
- {
- 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); }
-
- reference operator[](difference_type off) const
- {
- iterator tmp(*this);
- tmp += off;
- return *tmp;
- }
-
- iterator& operator+=(difference_type off)
- {
- if(node_base_ptr_ptr p = this->pn->up){
- p += off;
- this->pn = node_ptr_traits::static_cast_from(*p);
- }
- return *this;
- }
-
- friend iterator operator+(const iterator &left, difference_type off)
- {
- iterator tmp(left);
- tmp += off;
- return tmp;
- }
-
- friend iterator operator+(difference_type off, const iterator& right)
- {
- iterator tmp(right);
- tmp += off;
- return tmp;
- }
-
- iterator& operator-=(difference_type off)
- { *this += -off; return *this; }
-
- friend iterator operator-(const iterator &left, difference_type off)
- {
- iterator tmp(left);
- tmp -= off;
- return tmp;
- }
-
- friend difference_type operator-(const iterator& left, const iterator& right)
- {
- return left.pn->up - right.pn->up;
- }
-
- //Comparison operators
- friend bool operator== (const iterator& l, const iterator& r)
- { return l.pn == r.pn; }
-
- friend bool operator!= (const iterator& l, const iterator& r)
- { return l.pn != r.pn; }
-
- friend bool operator< (const iterator& l, const iterator& r)
- { return l.pn->up < r.pn->up; }
-
- friend bool operator<= (const iterator& l, const iterator& r)
- { return l.pn->up <= r.pn->up; }
-
- friend bool operator> (const iterator& l, const iterator& r)
- { return l.pn->up > r.pn->up; }
-
- friend bool operator>= (const iterator& l, const iterator& r)
- { return l.pn->up >= r.pn->up; }
-
- node_ptr pn;
+ typename ::boost::intrusive::pointer_traits<Pointer>::element_type value;
};
template<class VoidPtr, class VoidAllocator>
@@ -354,7 +203,6 @@ struct index_traits
}
}
-
#ifdef STABLE_VECTOR_ENABLE_INVARIANT_CHECKING
static bool invariants(index_type &index)
{
@@ -373,23 +221,153 @@ struct index_traits
} //namespace stable_vector_detail
-#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+template<typename Pointer, bool IsConst>
+class stable_vector_iterator
+{
+ typedef boost::intrusive::pointer_traits<Pointer> non_const_ptr_traits;
+ public:
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef typename non_const_ptr_traits::element_type value_type;
+ typedef typename non_const_ptr_traits::difference_type difference_type;
+ typedef typename ::boost::container::container_detail::if_c
+ < IsConst
+ , typename non_const_ptr_traits::template
+ rebind_pointer<const value_type>::type
+ , Pointer
+ >::type pointer;
+ typedef boost::intrusive::pointer_traits<pointer> ptr_traits;
+ typedef typename ptr_traits::reference reference;
+
+ private:
+ typedef typename non_const_ptr_traits::template
+ rebind_pointer<void>::type void_ptr;
+ typedef stable_vector_detail::node<Pointer> node_type;
+ typedef stable_vector_detail::node_base<void_ptr> node_base_type;
+ typedef typename non_const_ptr_traits::template
+ rebind_pointer<node_type>::type node_ptr;
+ typedef boost::intrusive::
+ pointer_traits<node_ptr> node_ptr_traits;
+ typedef typename non_const_ptr_traits::template
+ rebind_pointer<node_base_type>::type node_base_ptr;
+ typedef typename non_const_ptr_traits::template
+ rebind_pointer<node_base_ptr>::type node_base_ptr_ptr;
+
+ node_base_ptr m_pn;
+
+ public:
+
+ explicit stable_vector_iterator(node_base_ptr p) BOOST_CONTAINER_NOEXCEPT
+ : m_pn(p)
+ {}
+
+ stable_vector_iterator() BOOST_CONTAINER_NOEXCEPT
+ {}
+
+ stable_vector_iterator(stable_vector_iterator<Pointer, false> const& other) BOOST_CONTAINER_NOEXCEPT
+ : m_pn(other.node_pointer())
+ {}
+
+ node_ptr node_pointer() const BOOST_CONTAINER_NOEXCEPT
+ { return node_ptr_traits::static_cast_from(m_pn); }
+
+ public:
+ //Pointer like operators
+ reference operator*() const BOOST_CONTAINER_NOEXCEPT
+ { return node_pointer()->value; }
+
+ pointer operator->() const BOOST_CONTAINER_NOEXCEPT
+ { return ptr_traits::pointer_to(this->operator*()); }
+
+ //Increment / Decrement
+ stable_vector_iterator& operator++() BOOST_CONTAINER_NOEXCEPT
+ {
+ node_base_ptr_ptr p(this->m_pn->up);
+ this->m_pn = *(++p);
+ return *this;
+ }
+
+ stable_vector_iterator operator++(int) BOOST_CONTAINER_NOEXCEPT
+ { stable_vector_iterator tmp(*this); ++*this; return stable_vector_iterator(tmp); }
+
+ stable_vector_iterator& operator--() BOOST_CONTAINER_NOEXCEPT
+ {
+ node_base_ptr_ptr p(this->m_pn->up);
+ this->m_pn = *(--p);
+ return *this;
+ }
+
+ stable_vector_iterator operator--(int) BOOST_CONTAINER_NOEXCEPT
+ { stable_vector_iterator tmp(*this); --*this; return stable_vector_iterator(tmp); }
+
+ reference operator[](difference_type off) const BOOST_CONTAINER_NOEXCEPT
+ { return node_ptr_traits::static_cast_from(this->m_pn->up[off])->value; }
+
+ stable_vector_iterator& operator+=(difference_type off) BOOST_CONTAINER_NOEXCEPT
+ {
+ if(off) this->m_pn = this->m_pn->up[off];
+ return *this;
+ }
+
+ friend stable_vector_iterator operator+(const stable_vector_iterator &left, difference_type off) BOOST_CONTAINER_NOEXCEPT
+ {
+ stable_vector_iterator tmp(left);
+ tmp += off;
+ return tmp;
+ }
+
+ friend stable_vector_iterator operator+(difference_type off, const stable_vector_iterator& right) BOOST_CONTAINER_NOEXCEPT
+ {
+ stable_vector_iterator tmp(right);
+ tmp += off;
+ return tmp;
+ }
+
+ stable_vector_iterator& operator-=(difference_type off) BOOST_CONTAINER_NOEXCEPT
+ { *this += -off; return *this; }
+
+ friend stable_vector_iterator operator-(const stable_vector_iterator &left, difference_type off) BOOST_CONTAINER_NOEXCEPT
+ {
+ stable_vector_iterator tmp(left);
+ tmp -= off;
+ return tmp;
+ }
+
+ friend difference_type operator-(const stable_vector_iterator& left, const stable_vector_iterator& right) BOOST_CONTAINER_NOEXCEPT
+ { return left.m_pn->up - right.m_pn->up; }
+
+ //Comparison operators
+ friend bool operator== (const stable_vector_iterator& l, const stable_vector_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return l.m_pn == r.m_pn; }
+
+ friend bool operator!= (const stable_vector_iterator& l, const stable_vector_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return l.m_pn != r.m_pn; }
+
+ friend bool operator< (const stable_vector_iterator& l, const stable_vector_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return l.m_pn->up < r.m_pn->up; }
+
+ friend bool operator<= (const stable_vector_iterator& l, const stable_vector_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return l.m_pn->up <= r.m_pn->up; }
+
+ friend bool operator> (const stable_vector_iterator& l, const stable_vector_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return l.m_pn->up > r.m_pn->up; }
+
+ friend bool operator>= (const stable_vector_iterator& l, const stable_vector_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ { return l.m_pn->up >= r.m_pn->up; }
+};
#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();
+ #define STABLE_VECTOR_CHECK_INVARIANT \
+ invariant_checker BOOST_JOIN(check_invariant_,__LINE__)(*this); \
+ BOOST_JOIN(check_invariant_,__LINE__).touch();
#else //STABLE_VECTOR_ENABLE_INVARIANT_CHECKING
- #define STABLE_VECTOR_CHECK_INVARIANT
+ #define STABLE_VECTOR_CHECK_INVARIANT
#endif //#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING)
-#endif //#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
-
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! 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
@@ -422,6 +400,9 @@ struct index_traits
//!
//! Exception safety: As stable_vector does not internally copy elements around, some
//! operations provide stronger exception safety guarantees than in std::vector.
+//!
+//! \tparam T The type of object that is stored in the stable_vector
+//! \tparam Allocator The allocator used for all internal memory management
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class T, class Allocator = std::allocator<T> >
#else
@@ -429,10 +410,12 @@ template <class T, class Allocator>
#endif
class stable_vector
{
- ///@cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
typedef allocator_traits<Allocator> allocator_traits_type;
- typedef typename boost::intrusive::pointer_traits
- <typename allocator_traits_type::pointer>::
+ typedef boost::intrusive::
+ pointer_traits
+ <typename allocator_traits_type::pointer> ptr_traits;
+ typedef typename ptr_traits::
template rebind_pointer<void>::type void_ptr;
typedef typename allocator_traits_type::
template portable_rebind_alloc
@@ -451,10 +434,8 @@ class stable_vector
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
- <typename allocator_traits_type::pointer> ptr_traits;
- typedef stable_vector_detail::node<void_ptr, T> node_type;
+ typedef stable_vector_detail::node
+ <typename ptr_traits::pointer> node_type;
typedef typename ptr_traits::template
rebind_pointer<node_type>::type node_ptr;
typedef boost::intrusive::
@@ -494,15 +475,13 @@ class stable_vector
{ allocator_version_traits_t::deallocate_individual(this->priv_node_alloc(), holder); }
friend class stable_vector_detail::clear_on_destroy<stable_vector>;
- typedef stable_vector_detail::iterator
- < T
- , typename allocator_traits<Allocator>::reference
- , typename allocator_traits<Allocator>::pointer> iterator_impl;
- typedef stable_vector_detail::iterator
- < T
- , typename allocator_traits<Allocator>::const_reference
- , typename allocator_traits<Allocator>::const_pointer> const_iterator_impl;
- ///@endcond
+ typedef stable_vector_iterator
+ < typename allocator_traits<Allocator>::pointer
+ , false> iterator_impl;
+ typedef stable_vector_iterator
+ < typename allocator_traits<Allocator>::pointer
+ , false> const_iterator_impl;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -524,7 +503,7 @@ class stable_vector
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
- ///@cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(stable_vector)
static const size_type ExtraPointers = index_traits_type::ExtraPointers;
@@ -534,7 +513,7 @@ class stable_vector
class push_back_rollback;
friend class push_back_rollback;
- ///@endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -566,9 +545,9 @@ class stable_vector
}
//! <b>Effects</b>: Constructs a stable_vector that will use a copy of allocator a
- //! and inserts n default contructed values.
+ //! and inserts n value initialized values.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
+ //! <b>Throws</b>: If allocator_type's default constructor
//! throws or T's default or copy constructor throws.
//!
//! <b>Complexity</b>: Linear to n.
@@ -582,9 +561,27 @@ class stable_vector
}
//! <b>Effects</b>: Constructs a stable_vector that will use a copy of allocator a
+ //! and inserts n default initialized values.
+ //!
+ //! <b>Throws</b>: If allocator_type's default constructor
+ //! throws or T's default or copy constructor throws.
+ //!
+ //! <b>Complexity</b>: Linear to n.
+ //!
+ //! <b>Note</b>: Non-standard extension
+ stable_vector(size_type n, default_init_t)
+ : internal_data(), index()
+ {
+ stable_vector_detail::clear_on_destroy<stable_vector> cod(*this);
+ this->resize(n, default_init);
+ STABLE_VECTOR_CHECK_INVARIANT;
+ cod.release();
+ }
+
+ //! <b>Effects</b>: Constructs a stable_vector that will use a copy of allocator a
//! and inserts n copies of value.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
+ //! <b>Throws</b>: If allocator_type's default constructor
//! throws or T's default or copy constructor throws.
//!
//! <b>Complexity</b>: Linear to n.
@@ -600,8 +597,8 @@ class stable_vector
//! <b>Effects</b>: Constructs a stable_vector that will use a copy of allocator a
//! and inserts a copy of the range [first, last) in the stable_vector.
//!
- //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
- //! throws or T's constructor taking an dereferenced InIt throws.
+ //! <b>Throws</b>: If allocator_type's default constructor
+ //! throws or T's constructor taking a dereferenced InIt throws.
//!
//! <b>Complexity</b>: Linear to the range [first, last).
template <class InputIterator>
@@ -685,7 +682,7 @@ class stable_vector
~stable_vector()
{
this->clear();
- this->priv_clear_pool();
+ this->priv_clear_pool();
}
//! <b>Effects</b>: Makes *this contain the same elements as x.
@@ -720,35 +717,42 @@ class stable_vector
//! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
//! before the function.
//!
- //! <b>Throws</b>: If allocator_type's copy constructor throws.
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and (allocation throws or T's move constructor throws)
//!
- //! <b>Complexity</b>: Linear.
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
stable_vector& operator=(BOOST_RV_REF(stable_vector) x)
- {
- if (&x != this){
- 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->index = boost::move(x.index);
- this->priv_swap_members(x);
- //Move allocator if needed
- container_detail::bool_<allocator_traits_type::
- propagate_on_container_move_assignment::value> 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{
- this->assign( boost::make_move_iterator(x.begin())
- , boost::make_move_iterator(x.end()));
- }
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
+ {
+ //for move constructor, no aliasing (&x != this) is assummed.
+ BOOST_ASSERT(this != &x);
+ node_allocator_type &this_alloc = this->priv_node_alloc();
+ node_allocator_type &x_alloc = x.priv_node_alloc();
+ const bool propagate_alloc = allocator_traits_type::
+ propagate_on_container_move_assignment::value;
+ container_detail::bool_<propagate_alloc> flag;
+ const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
+ //Resources can be transferred if both allocators are
+ //going to be equal after this function (either propagated or already equal)
+ if(propagate_alloc || allocators_equal){
+ //Destroy objects but retain memory in case x reuses it in the future
+ this->clear();
+ //Move allocator if needed
+ container_detail::move_alloc(this_alloc, x_alloc, flag);
+ //Take resources
+ this->index = boost::move(x.index);
+ this->priv_swap_members(x);
+ }
+ //Else do a one by one move
+ else{
+ this->assign( boost::make_move_iterator(x.begin())
+ , boost::make_move_iterator(x.end()));
}
return *this;
}
-
//! <b>Effects</b>: Assigns the n copies of val to *this.
//!
//! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
@@ -958,17 +962,35 @@ class stable_vector
{ return this->index.max_size() - ExtraPointers; }
//! <b>Effects</b>: Inserts or erases elements at the end such that
- //! the size becomes n. New elements are default constructed.
+ //! the size becomes n. New elements are value initialized.
//!
- //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
+ //! <b>Throws</b>: If memory allocation throws, or T's value initialization throws.
//!
//! <b>Complexity</b>: Linear to the difference between size() and new_size.
void resize(size_type n)
{
- typedef default_construct_iterator<value_type, difference_type> default_iterator;
+ typedef value_init_construct_iterator<value_type, difference_type> value_init_iterator;
+ STABLE_VECTOR_CHECK_INVARIANT;
+ if(n > this->size())
+ this->insert(this->cend(), value_init_iterator(n - this->size()), value_init_iterator());
+ else if(n < this->size())
+ this->erase(this->cbegin() + n, this->cend());
+ }
+
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
+ //! the size becomes n. New elements are default initialized.
+ //!
+ //! <b>Throws</b>: If memory allocation throws, or T's default initialization throws.
+ //!
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
+ //!
+ //! <b>Note</b>: Non-standard extension
+ void resize(size_type n, default_init_t)
+ {
+ typedef default_init_construct_iterator<value_type, difference_type> default_init_iterator;
STABLE_VECTOR_CHECK_INVARIANT;
if(n > this->size())
- this->insert(this->cend(), default_iterator(n - this->size()), default_iterator());
+ this->insert(this->cend(), default_init_iterator(n - this->size()), default_init_iterator());
else if(n < this->size())
this->erase(this->cbegin() + n, this->cend());
}
@@ -1020,7 +1042,7 @@ class stable_vector
throw_length_error("stable_vector::reserve max_size() exceeded");
}
- size_type sz = this->size();
+ size_type sz = this->size();
size_type old_capacity = this->capacity();
if(n > old_capacity){
index_traits_type::initialize_end_node(this->index, this->internal_data.end_node, n);
@@ -1304,7 +1326,7 @@ class stable_vector
//! Linear time otherwise.
iterator insert(const_iterator position, T &&x);
#else
- BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: pos must be a valid iterator of *this.
@@ -1472,8 +1494,49 @@ class stable_vector
void clear() BOOST_CONTAINER_NOEXCEPT
{ this->erase(this->cbegin(),this->cend()); }
- /// @cond
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const stable_vector& x, const stable_vector& y)
+ { return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin()); }
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const stable_vector& x, const stable_vector& y)
+ { return !(x == y); }
+
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const stable_vector& x, const stable_vector& y)
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
+
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const stable_vector& x, const stable_vector& y)
+ { return y < x; }
+
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const stable_vector& x, const stable_vector& y)
+ { return !(y < x); }
+
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const stable_vector& x, const stable_vector& y)
+ { return !(x < y); }
+
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(stable_vector& x, stable_vector& y)
+ { x.swap(y); }
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
class insert_rollback
@@ -1674,11 +1737,8 @@ class stable_vector
return ret;
}
- node_ptr priv_get_end_node() const
- {
- return node_ptr_traits::pointer_to
- (static_cast<node_type&>(const_cast<node_base_type&>(this->internal_data.end_node)));
- }
+ node_base_ptr priv_get_end_node() const
+ { return node_base_ptr_traits::pointer_to(const_cast<node_base_type&>(this->internal_data.end_node)); }
void priv_destroy_node(const node_type &n)
{
@@ -1798,58 +1858,14 @@ class stable_vector
const node_allocator_type &priv_node_alloc() const { return internal_data; }
index_type index;
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
-template <typename T,typename Allocator>
-bool operator==(const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
-{
- return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin());
-}
-
-template <typename T,typename Allocator>
-bool operator< (const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
-{
- return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
-}
-
-template <typename T,typename Allocator>
-bool operator!=(const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
-{
- return !(x==y);
-}
-
-template <typename T,typename Allocator>
-bool operator> (const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
-{
- return y<x;
-}
-
-template <typename T,typename Allocator>
-bool operator>=(const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
-{
- return !(x<y);
-}
-
-template <typename T,typename Allocator>
-bool operator<=(const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
-{
- return !(x>y);
-}
-
-// specialized algorithms:
-
-template <typename T, typename Allocator>
-void swap(stable_vector<T,Allocator>& x,stable_vector<T,Allocator>& y)
-{
- x.swap(y);
-}
-
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#undef STABLE_VECTOR_CHECK_INVARIANT
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
/*
diff --git a/3party/boost/boost/container/static_vector.hpp b/3party/boost/boost/container/static_vector.hpp
index fb97b7fc5f..234fc266f2 100644
--- a/3party/boost/boost/container/static_vector.hpp
+++ b/3party/boost/boost/container/static_vector.hpp
@@ -2,6 +2,7 @@
//
// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
// Copyright (c) 2011-2013 Andrew Hundt.
+// Copyright (c) 2013-2014 Ion Gaztanaga
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -10,7 +11,7 @@
#ifndef BOOST_CONTAINER_STATIC_VECTOR_HPP
#define BOOST_CONTAINER_STATIC_VECTOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -21,6 +22,8 @@
namespace boost { namespace container {
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
namespace container_detail {
template<class T, std::size_t N>
@@ -61,43 +64,46 @@ class static_storage_allocator
} //namespace container_detail {
-/**
- * @defgroup static_vector_non_member static_vector non-member functions
- */
-
-/**
- * @brief A variable-size array container with fixed capacity.
- *
- * static_vector is a sequence container like boost::container::vector with contiguous storage that can
- * change in size, along with the static allocation, low overhead, and fixed capacity of boost::array.
- *
- * A static_vector is a sequence that supports random access to elements, constant time insertion and
- * removal of elements at the end, and linear time insertion and removal of elements at the beginning or
- * in the middle. The number of elements in a static_vector may vary dynamically up to a fixed capacity
- * because elements are stored within the object itself similarly to an array. However, objects are
- * initialized as they are inserted into static_vector unlike C arrays or std::array which must construct
- * all elements on instantiation. The behavior of static_vector enables the use of statically allocated
- * elements in cases with complex object lifetime requirements that would otherwise not be trivially
- * possible.
- *
- * @par Error Handling
- * Insertion beyond the capacity and out of bounds errors results in calling throw_bad_alloc().
- * The reason for this is because unlike vectors, static_vector does not perform allocation.
- *
- * @tparam Value The type of element that will be stored.
- * @tparam Capacity The maximum number of elements static_vector can store, fixed at compile time.
- */
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//!
+//!@brief A variable-size array container with fixed capacity.
+//!
+//!static_vector is a sequence container like boost::container::vector with contiguous storage that can
+//!change in size, along with the static allocation, low overhead, and fixed capacity of boost::array.
+//!
+//!A static_vector is a sequence that supports random access to elements, constant time insertion and
+//!removal of elements at the end, and linear time insertion and removal of elements at the beginning or
+//!in the middle. The number of elements in a static_vector may vary dynamically up to a fixed capacity
+//!because elements are stored within the object itself similarly to an array. However, objects are
+//!initialized as they are inserted into static_vector unlike C arrays or std::array which must construct
+//!all elements on instantiation. The behavior of static_vector enables the use of statically allocated
+//!elements in cases with complex object lifetime requirements that would otherwise not be trivially
+//!possible.
+//!
+//!@par Error Handling
+//! Insertion beyond the capacity result in throwing std::bad_alloc() if exceptions are enabled or
+//! calling throw_bad_alloc() if not enabled.
+//!
+//! std::out_of_range is thrown if out of bound access is performed in <code>at()</code> if exceptions are
+//! enabled, throw_out_of_range() if not enabled.
+//!
+//!@tparam Value The type of element that will be stored.
+//!@tparam Capacity The maximum number of elements static_vector can store, fixed at compile time.
template <typename Value, std::size_t Capacity>
class static_vector
: public vector<Value, container_detail::static_storage_allocator<Value, Capacity> >
{
- typedef vector<Value, container_detail::static_storage_allocator<Value, Capacity> > base_t;
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ typedef vector<Value, container_detail::static_storage_allocator<Value, Capacity> > base_t;
- BOOST_COPYABLE_AND_MOVABLE(static_vector)
+ BOOST_COPYABLE_AND_MOVABLE(static_vector)
template<class U, std::size_t OtherCapacity>
friend class static_vector;
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
public:
//! @brief The type of elements stored in the container.
typedef typename base_t::value_type value_type;
@@ -135,12 +141,12 @@ public:
//! @pre <tt>count <= capacity()</tt>
//!
- //! @brief Constructs a static_vector containing count default constructed Values.
+ //! @brief Constructs a static_vector containing count value initialized values.
//!
//! @param count The number of values which will be contained in the container.
//!
//! @par Throws
- //! If Value's default constructor throws.
+ //! If Value's value initialization throws.
//!
//! @par Complexity
//! Linear O(N).
@@ -150,6 +156,24 @@ public:
//! @pre <tt>count <= capacity()</tt>
//!
+ //! @brief Constructs a static_vector containing count default initialized values.
+ //!
+ //! @param count The number of values which will be contained in the container.
+ //!
+ //! @par Throws
+ //! If Value's default initialization throws.
+ //!
+ //! @par Complexity
+ //! Linear O(N).
+ //!
+ //! @par Note
+ //! Non-standard extension
+ static_vector(size_type count, default_init_t)
+ : base_t(count, default_init_t())
+ {}
+
+ //! @pre <tt>count <= capacity()</tt>
+ //!
//! @brief Constructs a static_vector containing count copies of value.
//!
//! @param count The number of copies of a values that will be contained in the container.
@@ -208,76 +232,72 @@ public:
//! @par Complexity
//! Linear O(N).
template <std::size_t C>
- static_vector(static_vector<value_type, C> const& other) : base_t(other) {}
+ static_vector(static_vector<value_type, C> const& other)
+ : base_t(other)
+ {}
- //! @brief Copy assigns Values stored in the other static_vector to this one.
+ //! @brief Move constructor. Moves Values stored in the other static_vector to this one.
//!
- //! @param other The static_vector which content will be copied to this one.
+ //! @param other The static_vector which content will be moved to this one.
//!
//! @par Throws
- //! If Value's copy constructor or copy assignment throws.
+ //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor throws.
+ //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor throws.
//!
//! @par Complexity
- //! Linear O(N).
- static_vector & operator=(BOOST_COPY_ASSIGN_REF(static_vector) other)
- {
- base_t::operator=(static_cast<base_t const&>(other));
- return *this;
- }
+ //! Linear O(N).
+ static_vector(BOOST_RV_REF(static_vector) other)
+ : base_t(boost::move(static_cast<base_t&>(other)))
+ {}
//! @pre <tt>other.size() <= capacity()</tt>
//!
- //! @brief Copy assigns Values stored in the other static_vector to this one.
+ //! @brief Move constructor. Moves Values stored in the other static_vector to this one.
//!
- //! @param other The static_vector which content will be copied to this one.
+ //! @param other The static_vector which content will be moved to this one.
//!
//! @par Throws
- //! If Value's copy constructor or copy assignment throws.
+ //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor throws.
+ //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor throws.
//!
//! @par Complexity
//! Linear O(N).
template <std::size_t C>
-// TEMPORARY WORKAROUND
-#if defined(BOOST_NO_RVALUE_REFERENCES)
- static_vector & operator=(::boost::rv< static_vector<value_type, C> > const& other)
-#else
- static_vector & operator=(static_vector<value_type, C> const& other)
-#endif
- {
- base_t::operator=(static_cast<static_vector<value_type, C> const&>(other));
- return *this;
- }
+ static_vector(BOOST_RV_REF_BEG static_vector<value_type, C> BOOST_RV_REF_END other)
+ : base_t(boost::move(static_cast<typename static_vector<value_type, C>::base_t&>(other)))
+ {}
- //! @brief Move constructor. Moves Values stored in the other static_vector to this one.
+ //! @brief Copy assigns Values stored in the other static_vector to this one.
//!
- //! @param other The static_vector which content will be moved to this one.
+ //! @param other The static_vector which content will be copied to this one.
//!
//! @par Throws
- //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor throws.
- //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor throws.
+ //! If Value's copy constructor or copy assignment throws.
//!
//! @par Complexity
- //! Linear O(N).
- static_vector(BOOST_RV_REF(static_vector) other)
- : base_t(boost::move(static_cast<base_t&>(other)))
- {}
+ //! Linear O(N).
+ static_vector & operator=(BOOST_COPY_ASSIGN_REF(static_vector) other)
+ {
+ return static_cast<static_vector&>(base_t::operator=(static_cast<base_t const&>(other)));
+ }
//! @pre <tt>other.size() <= capacity()</tt>
//!
- //! @brief Move constructor. Moves Values stored in the other static_vector to this one.
+ //! @brief Copy assigns Values stored in the other static_vector to this one.
//!
- //! @param other The static_vector which content will be moved to this one.
+ //! @param other The static_vector which content will be copied to this one.
//!
//! @par Throws
- //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor throws.
- //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor throws.
+ //! If Value's copy constructor or copy assignment throws.
//!
//! @par Complexity
//! Linear O(N).
template <std::size_t C>
- static_vector(BOOST_RV_REF_BEG static_vector<value_type, C> BOOST_RV_REF_END other)
- : base_t(boost::move(static_cast<typename static_vector<value_type, C>::base_t&>(other)))
- {}
+ static_vector & operator=(static_vector<value_type, C> const& other)
+ {
+ return static_cast<static_vector&>(base_t::operator=
+ (static_cast<typename static_vector<value_type, C>::base_t const&>(other)));
+ }
//! @brief Move assignment. Moves Values stored in the other static_vector to this one.
//!
@@ -291,8 +311,7 @@ public:
//! Linear O(N).
static_vector & operator=(BOOST_RV_REF(static_vector) other)
{
- base_t::operator=(boost::move(static_cast<base_t&>(other)));
- return *this;
+ return static_cast<static_vector&>(base_t::operator=(boost::move(static_cast<base_t&>(other))));
}
//! @pre <tt>other.size() <= capacity()</tt>
@@ -310,8 +329,8 @@ public:
template <std::size_t C>
static_vector & operator=(BOOST_RV_REF_BEG static_vector<value_type, C> BOOST_RV_REF_END other)
{
- base_t::operator=(boost::move(static_cast<typename static_vector<value_type, C>::base_t&>(other)));
- return *this;
+ return static_cast<static_vector&>(base_t::operator=
+ (boost::move(static_cast<typename static_vector<value_type, C>::base_t&>(other))));
}
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
@@ -355,12 +374,12 @@ public:
//! @pre <tt>count <= capacity()</tt>
//!
//! @brief Inserts or erases elements at the end such that
- //! the size becomes count. New elements are default constructed.
+ //! the size becomes count. New elements are value initialized.
//!
//! @param count The number of elements which will be stored in the container.
//!
//! @par Throws
- //! If Value's default constructor throws.
+ //! If Value's value initialization throws.
//!
//! @par Complexity
//! Linear O(N).
@@ -369,6 +388,23 @@ public:
//! @pre <tt>count <= capacity()</tt>
//!
//! @brief Inserts or erases elements at the end such that
+ //! the size becomes count. New elements are default initialized.
+ //!
+ //! @param count The number of elements which will be stored in the container.
+ //!
+ //! @par Throws
+ //! If Value's default initialization throws.
+ //!
+ //! @par Complexity
+ //! Linear O(N).
+ //!
+ //! @par Note
+ //! Non-standard extension
+ void resize(size_type count, default_init_t);
+
+ //! @pre <tt>count <= capacity()</tt>
+ //!
+ //! @brief Inserts or erases elements at the end such that
//! the size becomes count. New elements are copy constructed from value.
//!
//! @param count The number of elements which will be stored in the container.
diff --git a/3party/boost/boost/container/string.hpp b/3party/boost/boost/container/string.hpp
index e97f7895ab..89bb5ac2a9 100644
--- a/3party/boost/boost/container/string.hpp
+++ b/3party/boost/boost/container/string.hpp
@@ -1,34 +1,12 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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.
//
//////////////////////////////////////////////////////////////////////////////
-// Copyright (c) 1996,1997
-// Silicon Graphics Computer Systems, Inc.
-//
-// Permission to use, copy, modify, distribute and sell this software
-// and its documentation for any purpose is hereby granted without fee,
-// provided that the above copyright notice appear in all copies and
-// that both that copyright notice and this permission notice appear
-// in supporting documentation. Silicon Graphics makes no
-// representations about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied warranty.
-//
-//
-// Copyright (c) 1994
-// Hewlett-Packard Company
-//
-// Permission to use, copy, modify, distribute and sell this software
-// and its documentation for any purpose is hereby granted without fee,
-// provided that the above copyright notice appear in all copies and
-// that both that copyright notice and this permission notice appear
-// in supporting documentation. Hewlett-Packard Company makes no
-// representations about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied warranty.
#ifndef BOOST_CONTAINER_STRING_HPP
#define BOOST_CONTAINER_STRING_HPP
@@ -74,10 +52,10 @@
namespace boost {
namespace container {
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace container_detail {
// ------------------------------------------------------------
-// Class basic_string_base.
+// Class basic_string_base.
// basic_string_base is a helper class that makes it it easier to write
// an exception-safe version of basic_string. The constructor allocates,
@@ -110,20 +88,20 @@ class basic_string_base
basic_string_base(const allocator_type& a, size_type n)
: members_(a)
- {
+ {
this->init();
this->allocate_initial_block(n);
}
basic_string_base(BOOST_RV_REF(basic_string_base) b)
: members_(boost::move(b.alloc()))
- {
+ {
this->init();
this->swap_data(b);
}
~basic_string_base()
- {
+ {
if(!this->is_short()){
this->deallocate_block();
this->is_short(true);
@@ -171,7 +149,7 @@ class basic_string_base
//This type has the same alignment and size as long_t but it's POD
//so, unlike long_t, it can be placed in a union
-
+
typedef typename boost::aligned_storage< sizeof(long_t),
container_detail::alignment_of<long_t>::value>::type long_raw_t;
@@ -290,10 +268,15 @@ class basic_string_base
}
size_type next_capacity(size_type additional_objects) const
- { return get_next_capacity(allocator_traits_type::max_size(this->alloc()), this->priv_storage(), additional_objects); }
+ {
+ return next_capacity_calculator
+ <size_type, NextCapacityDouble /*NextCapacity60Percent*/>::
+ get( allocator_traits_type::max_size(this->alloc())
+ , this->priv_storage(), additional_objects );
+ }
void deallocate(pointer p, size_type n)
- {
+ {
if (p && (n > InternalBufferChars))
this->alloc().deallocate(p, n);
}
@@ -342,7 +325,7 @@ class basic_string_base
void deallocate_block()
{ this->deallocate(this->priv_addr(), this->priv_storage()); }
-
+
size_type max_size() const
{ return allocator_traits_type::max_size(this->alloc()) - 1; }
@@ -385,13 +368,13 @@ class basic_string_base
{ return this->members_.m_repr.long_repr().storage; }
void priv_storage(size_type storage)
- {
+ {
if(!this->is_short())
this->priv_long_storage(storage);
}
void priv_long_storage(size_type storage)
- {
+ {
this->members_.m_repr.long_repr().storage = storage;
}
@@ -405,7 +388,7 @@ class basic_string_base
{ return this->members_.m_repr.long_repr().length; }
void priv_size(size_type sz)
- {
+ {
if(this->is_short())
this->priv_short_size(sz);
else
@@ -413,12 +396,12 @@ class basic_string_base
}
void priv_short_size(size_type sz)
- {
+ {
this->members_.m_repr.s.h.length = (unsigned char)sz;
}
void priv_long_size(size_type sz)
- {
+ {
this->members_.m_repr.long_repr().length = sz;
}
@@ -455,7 +438,7 @@ class basic_string_base
} //namespace container_detail {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! The basic_string class represents a Sequence of characters. It contains all the
//! usual operations of a Sequence, and, additionally, it contains standard string
@@ -485,6 +468,10 @@ class basic_string_base
//! end(), rbegin(), rend(), operator[], c_str(), and data() do not invalidate iterators.
//! In this implementation, iterators are only invalidated by member functions that
//! explicitly change the string's contents.
+//!
+//! \tparam CharT The type of character it contains.
+//! \tparam Traits The Character Traits type, which encapsulates basic character operations
+//! \tparam Allocator The allocator, used for internal memory management.
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class CharT, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT> >
#else
@@ -493,7 +480,7 @@ template <class CharT, class Traits, class Allocator>
class basic_string
: private container_detail::basic_string_base<Allocator>
{
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
typedef allocator_traits<Allocator> allocator_traits_type;
BOOST_COPYABLE_AND_MOVABLE(basic_string)
@@ -505,19 +492,22 @@ class basic_string
template <class Tr>
struct Eq_traits
- : public std::binary_function<typename Tr::char_type,
- typename Tr::char_type,
- bool>
{
- bool operator()(const typename Tr::char_type& x,
- const typename Tr::char_type& y) const
+ //Compatibility with std::binary_function
+ typedef typename Tr::char_type first_argument_type;
+ typedef typename Tr::char_type second_argument_type;
+ typedef bool result_type;
+
+ bool operator()(const first_argument_type& x, const second_argument_type& y) const
{ return Tr::eq(x, y); }
};
template <class Tr>
struct Not_within_traits
- : public std::unary_function<typename Tr::char_type, bool>
{
+ typedef typename Tr::char_type argument_type;
+ typedef bool result_type;
+
typedef const typename Tr::char_type* Pointer;
const Pointer m_first;
const Pointer m_last;
@@ -531,7 +521,7 @@ class basic_string
std::bind1st(Eq_traits<Tr>(), x)) == m_last;
}
};
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -555,14 +545,14 @@ class basic_string
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
static const size_type npos = size_type(-1);
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
typedef constant_iterator<CharT, difference_type> cvalue_iterator;
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> pointer_traits;
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public: // Constructor, destructor, assignment.
//////////////////////////////////////////////
@@ -570,7 +560,7 @@ class basic_string
// construct/copy/destroy
//
//////////////////////////////////////////////
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
struct reserve_t {};
basic_string(reserve_t, size_type n,
@@ -581,7 +571,7 @@ class basic_string
, n + 1)
{ this->priv_terminate_string(); }
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! <b>Effects</b>: Default constructs a basic_string.
//!
@@ -602,7 +592,7 @@ class basic_string
//!
//! <b>Postcondition</b>: x == *this.
//!
- //! <b>Throws</b>: If allocator_type's default constructor throws.
+ //! <b>Throws</b>: If allocator_type's default constructor or allocation throws.
basic_string(const basic_string& s)
: base_t(allocator_traits_type::select_on_container_copy_construction(s.alloc()))
{
@@ -691,6 +681,15 @@ class basic_string
}
//! <b>Effects</b>: Constructs a basic_string taking the allocator as parameter,
+ //! and is initialized by n default-initialized characters.
+ basic_string(size_type n, default_init_t, const allocator_type& a = allocator_type())
+ : base_t(a, n + 1)
+ {
+ this->priv_size(n);
+ this->priv_terminate_string();
+ }
+
+ //! <b>Effects</b>: Constructs a basic_string taking the allocator as parameter,
//! and a range of iterators.
template <class InputIterator>
basic_string(InputIterator f, InputIterator l, const allocator_type& a = allocator_type())
@@ -707,7 +706,7 @@ class basic_string
//! <b>Complexity</b>: Constant.
~basic_string() BOOST_CONTAINER_NOEXCEPT
{}
-
+
//! <b>Effects</b>: Copy constructs a string.
//!
//! <b>Postcondition</b>: x == *this.
@@ -734,30 +733,38 @@ class basic_string
return *this;
}
- //! <b>Effects</b>: Move constructor. Moves mx's resources to *this.
- //!
- //! <b>Throws</b>: If allocator_type's copy constructor throws.
- //!
- //! <b>Complexity</b>: Constant.
- basic_string& operator=(BOOST_RV_REF(basic_string) x) 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_data(x);
- //Move allocator if needed
- container_detail::bool_<allocator_traits_type::
- propagate_on_container_move_assignment::value> flag;
- container_detail::move_alloc(this_alloc, x_alloc, flag);
- }
- //If unequal allocators, then do a one by one move
- else{
- this->assign( x.begin(), x.end());
- }
+ //! <b>Effects</b>: Move constructor. Moves x's resources to *this.
+ //!
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and allocation throws
+ //!
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
+ basic_string& operator=(BOOST_RV_REF(basic_string) x)
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
+ {
+ //for move constructor, no aliasing (&x != this) is assummed.
+ BOOST_ASSERT(this != &x);
+ allocator_type &this_alloc = this->alloc();
+ allocator_type &x_alloc = x.alloc();
+ const bool propagate_alloc = allocator_traits_type::
+ propagate_on_container_move_assignment::value;
+ container_detail::bool_<propagate_alloc> flag;
+ const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
+ //Resources can be transferred if both allocators are
+ //going to be equal after this function (either propagated or already equal)
+ if(propagate_alloc || allocators_equal){
+ //Destroy objects but retain memory in case x reuses it in the future
+ this->clear();
+ //Move allocator if needed
+ container_detail::move_alloc(this_alloc, x_alloc, flag);
+ //Nothrow swap
+ this->swap_data(x);
+ }
+ //Else do a one by one move
+ else{
+ this->assign( x.begin(), x.end());
}
return *this;
}
@@ -959,7 +966,7 @@ class basic_string
}
//! <b>Effects</b>: Inserts or erases elements at the end such that
- //! the size becomes n. New elements are default constructed.
+ //! the size becomes n. New elements are value initialized.
//!
//! <b>Throws</b>: If memory allocation throws
//!
@@ -967,6 +974,26 @@ class basic_string
void resize(size_type n)
{ resize(n, CharT()); }
+
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
+ //! the size becomes n. New elements are uninitialized.
+ //!
+ //! <b>Throws</b>: If memory allocation throws
+ //!
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
+ //!
+ //! <b>Note</b>: Non-standard extension
+ void resize(size_type n, default_init_t)
+ {
+ if (n <= this->size())
+ this->erase(this->begin() + n, this->end());
+ else{
+ this->priv_reserve(n, false);
+ this->priv_size(n);
+ this->priv_terminate_string();
+ }
+ }
+
//! <b>Effects</b>: Number of elements for which memory has been allocated.
//! capacity() is always greater than or equal to size().
//!
@@ -983,29 +1010,7 @@ class basic_string
//!
//! <b>Throws</b>: If memory allocation allocation throws
void reserve(size_type res_arg)
- {
- if (res_arg > this->max_size()){
- throw_length_error("basic_string::reserve max_size() exceeded");
- }
-
- if (this->capacity() < res_arg){
- size_type n = container_detail::max_value(res_arg, this->size()) + 1;
- size_type new_cap = this->next_capacity(n);
- pointer new_start = this->allocation_command
- (allocate_new, n, new_cap, new_cap).first;
- size_type new_length = 0;
-
- const pointer addr = this->priv_addr();
- new_length += priv_uninitialized_copy
- (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_long_size(new_length);
- this->priv_storage(new_cap);
- }
- }
+ { this->priv_reserve(res_arg); }
//! <b>Effects</b>: Tries to deallocate the excess of memory created
//! with previous allocations. The size of the string is unchanged
@@ -1231,7 +1236,7 @@ class basic_string
//! length n whose elements are a copy of those pointed to by s.
//!
//! <b>Throws</b>: If memory allocation throws or length_error if n > max_size().
- //!
+ //!
//! <b>Returns</b>: *this
basic_string& assign(const CharT* s, size_type n)
{ return this->assign(s, s + n); }
@@ -1251,6 +1256,20 @@ class basic_string
{ return this->assign(cvalue_iterator(c, n), cvalue_iterator()); }
//! <b>Effects</b>: Equivalent to assign(basic_string(first, last)).
+ //!
+ //! <b>Returns</b>: *this
+ basic_string& assign(const CharT* first, const CharT* last)
+ {
+ size_type n = static_cast<size_type>(last - first);
+ this->reserve(n);
+ CharT* ptr = container_detail::to_raw_pointer(this->priv_addr());
+ Traits::copy(ptr, first, n);
+ this->priv_construct_null(ptr + n);
+ this->priv_size(n);
+ return *this;
+ }
+
+ //! <b>Effects</b>: Equivalent to assign(basic_string(first, last)).
//!
//! <b>Returns</b>: *this
template <class InputIter>
@@ -1416,7 +1435,7 @@ class basic_string
for ( ; first != last; ++first, ++p) {
p = this->insert(p, *first);
}
- return this->begin() + n_pos;
+ return this->begin() + n_pos;
}
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -1440,7 +1459,7 @@ class basic_string
//Check if we have enough capacity
if (remaining >= n){
- enough_capacity = true;
+ enough_capacity = true;
}
else {
//Otherwise expand current buffer or allocate new storage
@@ -1549,7 +1568,7 @@ class basic_string
const pointer addr = this->priv_addr();
erase(addr + pos, addr + pos + container_detail::min_value(n, this->size() - pos));
return *this;
- }
+ }
//! <b>Effects</b>: Removes the character referred to by p.
//!
@@ -2318,8 +2337,35 @@ class basic_string
int compare(size_type pos1, size_type n1, const CharT* s) const
{ return this->compare(pos1, n1, s, Traits::length(s)); }
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
+ void priv_reserve(size_type res_arg, const bool null_terminate = true)
+ {
+ if (res_arg > this->max_size()){
+ throw_length_error("basic_string::reserve max_size() exceeded");
+ }
+
+ if (this->capacity() < res_arg){
+ size_type n = container_detail::max_value(res_arg, this->size()) + 1;
+ size_type new_cap = this->next_capacity(n);
+ pointer new_start = this->allocation_command
+ (allocate_new, n, new_cap, new_cap).first;
+ size_type new_length = 0;
+
+ const pointer addr = this->priv_addr();
+ new_length += priv_uninitialized_copy
+ (addr, addr + this->priv_size(), new_start);
+ if(null_terminate){
+ 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_storage(new_cap);
+ }
+ }
+
static int s_compare(const_pointer f1, const_pointer l1,
const_pointer f2, const_pointer l2)
{
@@ -2453,9 +2499,11 @@ class basic_string
return this->priv_replace(first, last, f, l, Category());
}
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
+#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
+
//!Typedef for a basic_string of
//!narrow characters
typedef basic_string
@@ -2472,12 +2520,14 @@ typedef basic_string
,std::allocator<wchar_t> >
wstring;
+#endif
+
// ------------------------------------------------------------
// Non-member functions.
// Operator+
-template <class CharT, class Traits, class Allocator> inline
+template <class CharT, class Traits, class Allocator> inline
basic_string<CharT,Traits,Allocator>
operator+(const basic_string<CharT,Traits,Allocator>& x
,const basic_string<CharT,Traits,Allocator>& y)
@@ -2526,7 +2576,7 @@ template <class CharT, class Traits, class Allocator> inline
return y;
}
-template <class CharT, class Traits, class Allocator> inline
+template <class CharT, class Traits, class Allocator> inline
basic_string<CharT,Traits,Allocator> operator+
(basic_string<CharT,Traits,Allocator> x, const CharT* s)
{
@@ -2542,7 +2592,7 @@ template <class CharT, class Traits, class Allocator> inline
return y;
}
-template <class CharT, class Traits, class Allocator> inline
+template <class CharT, class Traits, class Allocator> inline
basic_string<CharT,Traits,Allocator> operator+
(basic_string<CharT,Traits,Allocator> x, const CharT c)
{
@@ -2685,8 +2735,8 @@ template <class CharT, class Traits, class Allocator>
inline void swap(basic_string<CharT,Traits,Allocator>& x, basic_string<CharT,Traits,Allocator>& y)
{ x.swap(y); }
-/// @cond
-// I/O.
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+// I/O.
namespace container_detail {
template <class CharT, class Traits>
@@ -2705,7 +2755,7 @@ string_fill(std::basic_ostream<CharT, Traits>& os,
}
} //namespace container_detail {
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class CharT, class Traits, class Allocator>
std::basic_ostream<CharT, Traits>&
@@ -2724,9 +2774,9 @@ operator<<(std::basic_ostream<CharT, Traits>& os, const basic_string<CharT,Trait
if (w != 0 && n < w)
pad_len = w - n;
-
+
if (!left)
- ok = container_detail::string_fill(os, buf, pad_len);
+ ok = container_detail::string_fill(os, buf, pad_len);
ok = ok &&
buf->sputn(s.data(), std::streamsize(n)) == std::streamsize(n);
@@ -2778,7 +2828,7 @@ operator>>(std::basic_istream<CharT, Traits>& is, basic_string<CharT,Traits,Allo
s.push_back(c);
}
}
-
+
// If we have read no characters, then set failbit.
if (s.size() == 0)
is.setstate(std::ios_base::failbit);
@@ -2789,7 +2839,7 @@ operator>>(std::basic_istream<CharT, Traits>& is, basic_string<CharT,Traits,Allo
return is;
}
-template <class CharT, class Traits, class Allocator>
+template <class CharT, class Traits, class Allocator>
std::basic_istream<CharT, Traits>&
getline(std::istream& is, basic_string<CharT,Traits,Allocator>& s,CharT delim)
{
@@ -2821,7 +2871,7 @@ getline(std::istream& is, basic_string<CharT,Traits,Allocator>& s,CharT delim)
return is;
}
-template <class CharT, class Traits, class Allocator>
+template <class CharT, class Traits, class Allocator>
inline std::basic_istream<CharT, Traits>&
getline(std::basic_istream<CharT, Traits>& is, basic_string<CharT,Traits,Allocator>& s)
{
@@ -2836,7 +2886,7 @@ inline std::size_t hash_value(basic_string<Ch, std::char_traits<Ch>, Allocator>
}}
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace boost {
@@ -2849,7 +2899,7 @@ struct has_trivial_destructor_after_move<boost::container::basic_string<C, T, Al
}
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#include <boost/container/detail/config_end.hpp>
diff --git a/3party/boost/boost/container/throw_exception.hpp b/3party/boost/boost/container/throw_exception.hpp
index e22d10422f..ab01c30f3e 100644
--- a/3party/boost/boost/container/throw_exception.hpp
+++ b/3party/boost/boost/container/throw_exception.hpp
@@ -14,7 +14,7 @@
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -76,26 +76,82 @@ namespace container {
#else //defined(BOOST_NO_EXCEPTIONS)
+ //! Exception callback called by Boost.Container when fails to allocate the requested storage space.
+ //! <ul>
+ //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::bad_alloc()</code> is thrown.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+ //! is NOT defined <code>BOOST_ASSERT(!"boost::container bad_alloc thrown")</code> is called
+ //! and <code>std::abort()</code> if the former returns.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+ //! the user must provide an implementation and the function should not return.</li>
+ //! </ul>
inline void throw_bad_alloc()
{
throw std::bad_alloc();
}
+ //! Exception callback called by Boost.Container to signal arguments out of range.
+ //! <ul>
+ //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::out_of_range(str)</code> is thrown.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+ //! is NOT defined <code>BOOST_ASSERT_MSG(!"boost::container out_of_range thrown", str)</code> is called
+ //! and <code>std::abort()</code> if the former returns.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+ //! the user must provide an implementation and the function should not return.</li>
+ //! </ul>
inline void throw_out_of_range(const char* str)
{
throw std::out_of_range(str);
}
+ //! Exception callback called by Boost.Container to signal errors resizing.
+ //! <ul>
+ //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::length_error(str)</code> is thrown.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+ //! is NOT defined <code>BOOST_ASSERT_MSG(!"boost::container length_error thrown", str)</code> is called
+ //! and <code>std::abort()</code> if the former returns.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+ //! the user must provide an implementation and the function should not return.</li>
+ //! </ul>
inline void throw_length_error(const char* str)
{
throw std::length_error(str);
}
+ //! Exception callback called by Boost.Container to report errors in the internal logical
+ //! of the program, such as violation of logical preconditions or class invariants.
+ //! <ul>
+ //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::logic_error(str)</code> is thrown.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+ //! is NOT defined <code>BOOST_ASSERT_MSG(!"boost::container logic_error thrown", str)</code> is called
+ //! and <code>std::abort()</code> if the former returns.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+ //! the user must provide an implementation and the function should not return.</li>
+ //! </ul>
inline void throw_logic_error(const char* str)
{
throw std::logic_error(str);
}
+ //! Exception callback called by Boost.Container to report errors that can only be detected during runtime.
+ //! <ul>
+ //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::runtime_error(str)</code> is thrown.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+ //! is NOT defined <code>BOOST_ASSERT_MSG(!"boost::container runtime_error thrown", str)</code> is called
+ //! and <code>std::abort()</code> if the former returns.</li>
+ //!
+ //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+ //! the user must provide an implementation and the function should not return.</li>
+ //! </ul>
inline void throw_runtime_error(const char* str)
{
throw std::runtime_error(str);
diff --git a/3party/boost/boost/container/vector.hpp b/3party/boost/boost/container/vector.hpp
index dac536ac65..16f52d3c5c 100644
--- a/3party/boost/boost/container/vector.hpp
+++ b/3party/boost/boost/container/vector.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -11,7 +11,7 @@
#ifndef BOOST_CONTAINER_CONTAINER_VECTOR_HPP
#define BOOST_CONTAINER_CONTAINER_VECTOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -53,7 +53,7 @@
namespace boost {
namespace container {
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//#define BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
@@ -61,20 +61,24 @@ namespace container_detail {
#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
-//! Const vector_iterator used to iterate through a vector.
-template <class Pointer>
-class vector_const_iterator
+template <class Pointer, bool IsConst>
+class vec_iterator
{
public:
- typedef std::random_access_iterator_tag iterator_category;
+ typedef std::random_access_iterator_tag iterator_category;
typedef typename boost::intrusive::pointer_traits<Pointer>::element_type value_type;
typedef typename boost::intrusive::pointer_traits<Pointer>::difference_type difference_type;
- typedef typename boost::intrusive::pointer_traits<Pointer>::template
- rebind_pointer<const value_type>::type pointer;
- typedef const value_type& reference;
+ typedef typename if_c
+ < IsConst
+ , typename boost::intrusive::pointer_traits<Pointer>::template
+ rebind_pointer<const value_type>::type
+ , Pointer
+ >::type pointer;
+ typedef typename boost::intrusive::pointer_traits<Pointer> ptr_traits;
+ typedef typename ptr_traits::reference reference;
- /// @cond
- protected:
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+ private:
Pointer m_ptr;
public:
@@ -84,155 +88,96 @@ class vector_const_iterator
Pointer &get_ptr() BOOST_CONTAINER_NOEXCEPT
{ return m_ptr; }
- explicit vector_const_iterator(Pointer ptr) BOOST_CONTAINER_NOEXCEPT
+ explicit vec_iterator(Pointer ptr) BOOST_CONTAINER_NOEXCEPT
: m_ptr(ptr)
{}
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//Constructors
- vector_const_iterator() BOOST_CONTAINER_NOEXCEPT
+ vec_iterator() BOOST_CONTAINER_NOEXCEPT
#ifndef NDEBUG
: m_ptr()
#else
- // No value initialization of m_ptr() to speed up things a bit:
+ // No value initialization of m_ptr() to speed up things a bit:
#endif
{}
+ vec_iterator(vec_iterator<Pointer, false> const& other) BOOST_CONTAINER_NOEXCEPT
+ : m_ptr(other.get_ptr())
+ {}
+
//Pointer like operators
reference operator*() const BOOST_CONTAINER_NOEXCEPT
{ return *m_ptr; }
- const value_type * operator->() const BOOST_CONTAINER_NOEXCEPT
- { return container_detail::to_raw_pointer(m_ptr); }
+ pointer operator->() const BOOST_CONTAINER_NOEXCEPT
+ { return ::boost::intrusive::pointer_traits<pointer>::pointer_to(this->operator*()); }
reference operator[](difference_type off) const BOOST_CONTAINER_NOEXCEPT
{ return m_ptr[off]; }
//Increment / Decrement
- vector_const_iterator& operator++() BOOST_CONTAINER_NOEXCEPT
+ vec_iterator& operator++() BOOST_CONTAINER_NOEXCEPT
{ ++m_ptr; return *this; }
- vector_const_iterator operator++(int) BOOST_CONTAINER_NOEXCEPT
- { return vector_const_iterator(m_ptr++); }
+ vec_iterator operator++(int) BOOST_CONTAINER_NOEXCEPT
+ { return vec_iterator(m_ptr++); }
- vector_const_iterator& operator--() BOOST_CONTAINER_NOEXCEPT
+ vec_iterator& operator--() BOOST_CONTAINER_NOEXCEPT
{ --m_ptr; return *this; }
- vector_const_iterator operator--(int) BOOST_CONTAINER_NOEXCEPT
- { return vector_const_iterator(m_ptr--); }
+ vec_iterator operator--(int) BOOST_CONTAINER_NOEXCEPT
+ { return vec_iterator(m_ptr--); }
//Arithmetic
- vector_const_iterator& operator+=(difference_type off) BOOST_CONTAINER_NOEXCEPT
+ vec_iterator& operator+=(difference_type off) BOOST_CONTAINER_NOEXCEPT
{ m_ptr += off; return *this; }
- vector_const_iterator& operator-=(difference_type off) BOOST_CONTAINER_NOEXCEPT
+ vec_iterator& operator-=(difference_type off) BOOST_CONTAINER_NOEXCEPT
{ m_ptr -= off; return *this; }
- friend vector_const_iterator operator+(const vector_const_iterator &x, difference_type off) BOOST_CONTAINER_NOEXCEPT
- { return vector_const_iterator(x.m_ptr+off); }
+ friend vec_iterator operator+(const vec_iterator &x, difference_type off) BOOST_CONTAINER_NOEXCEPT
+ { return vec_iterator(x.m_ptr+off); }
- friend vector_const_iterator operator+(difference_type off, vector_const_iterator right) BOOST_CONTAINER_NOEXCEPT
+ friend vec_iterator operator+(difference_type off, vec_iterator right) BOOST_CONTAINER_NOEXCEPT
{ right.m_ptr += off; return right; }
- friend vector_const_iterator operator-(vector_const_iterator left, difference_type off) BOOST_CONTAINER_NOEXCEPT
+ friend vec_iterator operator-(vec_iterator left, difference_type off) BOOST_CONTAINER_NOEXCEPT
{ left.m_ptr -= off; return left; }
- friend difference_type operator-(const vector_const_iterator &left, const vector_const_iterator& right) BOOST_CONTAINER_NOEXCEPT
+ friend difference_type operator-(const vec_iterator &left, const vec_iterator& right) BOOST_CONTAINER_NOEXCEPT
{ return left.m_ptr - right.m_ptr; }
//Comparison operators
- friend bool operator== (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ friend bool operator== (const vec_iterator& l, const vec_iterator& r) BOOST_CONTAINER_NOEXCEPT
{ return l.m_ptr == r.m_ptr; }
- friend bool operator!= (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ friend bool operator!= (const vec_iterator& l, const vec_iterator& r) BOOST_CONTAINER_NOEXCEPT
{ return l.m_ptr != r.m_ptr; }
- friend bool operator< (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ friend bool operator< (const vec_iterator& l, const vec_iterator& r) BOOST_CONTAINER_NOEXCEPT
{ return l.m_ptr < r.m_ptr; }
- friend bool operator<= (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ friend bool operator<= (const vec_iterator& l, const vec_iterator& r) BOOST_CONTAINER_NOEXCEPT
{ return l.m_ptr <= r.m_ptr; }
- friend bool operator> (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ friend bool operator> (const vec_iterator& l, const vec_iterator& r) BOOST_CONTAINER_NOEXCEPT
{ return l.m_ptr > r.m_ptr; }
- friend bool operator>= (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
+ friend bool operator>= (const vec_iterator& l, const vec_iterator& r) BOOST_CONTAINER_NOEXCEPT
{ return l.m_ptr >= r.m_ptr; }
};
-//! Iterator used to iterate through a vector
-template <class Pointer>
-class vector_iterator
- : public vector_const_iterator<Pointer>
-{
- typedef vector_const_iterator<Pointer> base_t;
- public:
- explicit vector_iterator(Pointer ptr) BOOST_CONTAINER_NOEXCEPT
- : base_t(ptr)
- {}
-
- public:
- typedef std::random_access_iterator_tag iterator_category;
- typedef typename boost::intrusive::pointer_traits<Pointer>::element_type value_type;
- typedef typename boost::intrusive::pointer_traits<Pointer>::difference_type difference_type;
- typedef Pointer pointer;
- typedef value_type& reference;
-
- //Constructors
- vector_iterator() BOOST_CONTAINER_NOEXCEPT
- : base_t()
- {}
-
- //Pointer like operators
- reference operator*() const BOOST_CONTAINER_NOEXCEPT
- { return *this->m_ptr; }
-
- value_type* operator->() const BOOST_CONTAINER_NOEXCEPT
- { return container_detail::to_raw_pointer(this->m_ptr); }
-
- reference operator[](difference_type off) const BOOST_CONTAINER_NOEXCEPT
- { return this->m_ptr[off]; }
-
- //Increment / Decrement
- vector_iterator& operator++() BOOST_CONTAINER_NOEXCEPT
- { ++this->m_ptr; return *this; }
-
- vector_iterator operator++(int) BOOST_CONTAINER_NOEXCEPT
- { return vector_iterator(this->m_ptr++); }
-
- vector_iterator& operator--() BOOST_CONTAINER_NOEXCEPT
- { --this->m_ptr; return *this; }
-
- vector_iterator operator--(int) BOOST_CONTAINER_NOEXCEPT
- { return vector_iterator(this->m_ptr--); }
-
- // Arithmetic
- vector_iterator& operator+=(difference_type off) BOOST_CONTAINER_NOEXCEPT
- { this->m_ptr += off; return *this; }
-
- vector_iterator& operator-=(difference_type off) BOOST_CONTAINER_NOEXCEPT
- { this->m_ptr -= off; return *this; }
-
- friend vector_iterator operator+(vector_iterator left, difference_type off) BOOST_CONTAINER_NOEXCEPT
- { left.m_ptr += off; return left; }
-
- friend vector_iterator operator+(difference_type off, vector_iterator right) BOOST_CONTAINER_NOEXCEPT
- { right.m_ptr += off; return right; }
-
- friend vector_iterator operator-(vector_iterator left, difference_type off) BOOST_CONTAINER_NOEXCEPT
- { left.m_ptr -= off; return left; }
-};
-
} //namespace container_detail {
-template<class Pointer>
-const Pointer &vector_iterator_get_ptr(const container_detail::vector_const_iterator<Pointer> &it) BOOST_CONTAINER_NOEXCEPT
+template<class Pointer, bool IsConst>
+const Pointer &vector_iterator_get_ptr(const container_detail::vec_iterator<Pointer, IsConst> &it) BOOST_CONTAINER_NOEXCEPT
{ return it.get_ptr(); }
-template<class Pointer>
-Pointer &get_ptr(container_detail::vector_const_iterator<Pointer> &it) BOOST_CONTAINER_NOEXCEPT
+template<class Pointer, bool IsConst>
+Pointer &get_ptr(container_detail::vec_iterator<Pointer, IsConst> &it) BOOST_CONTAINER_NOEXCEPT
{ return it.get_ptr(); }
namespace container_detail {
@@ -251,7 +196,7 @@ struct vector_get_ptr_pointer_to_non_const
typedef typename pointer_traits_t
::template rebind_pointer<non_const_element_type>::type return_type;
- static return_type get_ptr(const const_pointer &ptr)
+ static return_type get_ptr(const const_pointer &ptr) BOOST_CONTAINER_NOEXCEPT
{ return boost::intrusive::pointer_traits<return_type>::const_cast_from(ptr); }
};
@@ -259,7 +204,7 @@ template<class Pointer>
struct vector_get_ptr_pointer_to_non_const<Pointer, false>
{
typedef const Pointer & return_type;
- static return_type get_ptr(const Pointer &ptr)
+ static return_type get_ptr(const Pointer &ptr) BOOST_CONTAINER_NOEXCEPT
{ return ptr; }
};
@@ -276,6 +221,9 @@ namespace container_detail {
#endif //#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+struct uninitialized_size_t {};
+static const uninitialized_size_t uninitialized_size = uninitialized_size_t();
+
template <class T, class Allocator>
struct vector_value_traits
{
@@ -294,17 +242,10 @@ struct vector_value_traits
<trivial_dctr
,container_detail::null_scoped_destructor_n<Allocator>
,container_detail::scoped_destructor_n<Allocator>
- >::type OldArrayDestructor;
- //This is the anti-exception array destructor
- //to destroy objects created with copy construction
- typedef typename container_detail::if_c
- <nothrow_copy
- ,container_detail::null_scoped_destructor_n<Allocator>
- ,container_detail::scoped_destructor_n<Allocator>
>::type ArrayDestructor;
//This is the anti-exception array deallocator
typedef typename container_detail::if_c
- <nothrow_copy
+ <false//nothrow_copy
,container_detail::null_scoped_array_deallocator<Allocator>
,container_detail::scoped_array_deallocator<Allocator>
>::type ArrayDeallocator;
@@ -312,10 +253,7 @@ struct vector_value_traits
//!This struct deallocates and allocated memory
template < class Allocator
- , class AllocatorVersion = container_detail::integral_constant
- < unsigned
- , boost::container::container_detail::version<Allocator>::value
- >
+ , class AllocatorVersion = typename container_detail::version<Allocator>::type
>
struct vector_alloc_holder
: public Allocator
@@ -343,20 +281,28 @@ struct vector_alloc_holder
//Constructor, does not throw
template<class AllocConvertible>
- explicit vector_alloc_holder(BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
+ vector_alloc_holder(uninitialized_size_t, BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
: Allocator(boost::forward<AllocConvertible>(a))
+ , m_start()
, m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
+ , m_capacity()
{
- m_start = this->allocation_command(allocate_new, initial_size, initial_size, m_capacity, m_start).first;
+ if(initial_size){
+ m_start = this->allocation_command(allocate_new, initial_size, initial_size, m_capacity, m_start).first;
+ }
}
//Constructor, does not throw
- explicit vector_alloc_holder(size_type initial_size)
+ vector_alloc_holder(uninitialized_size_t, size_type initial_size)
: Allocator()
+ , m_start()
, m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
+ , m_capacity()
{
- m_start = this->allocation_command
- (allocate_new, initial_size, initial_size, m_capacity, m_start).first;
+ if(initial_size){
+ m_start = this->allocation_command
+ (allocate_new, initial_size, initial_size, m_capacity, m_start).first;
+ }
}
vector_alloc_holder(BOOST_RV_REF(vector_alloc_holder) holder) BOOST_CONTAINER_NOEXCEPT
@@ -371,8 +317,10 @@ struct vector_alloc_holder
void first_allocation(size_type cap)
{
- m_start = this->allocation_command
- (allocate_new, cap, cap, m_capacity, m_start).first;
+ if(cap){
+ m_start = this->allocation_command
+ (allocate_new, cap, cap, m_capacity, m_start).first;
+ }
}
void first_allocation_same_allocator_type(size_type cap)
@@ -386,7 +334,7 @@ struct vector_alloc_holder
}
std::pair<pointer, bool>
- allocation_command(allocation_type command,
+ allocation_command(boost::container::allocation_type command,
size_type limit_size,
size_type preferred_size,
size_type &received_size, const pointer &reuse = pointer())
@@ -397,11 +345,10 @@ struct vector_alloc_holder
size_type next_capacity(size_type additional_objects) const
{
- std::size_t num_objects = this->m_size + additional_objects;
- std::size_t next_cap = this->m_capacity + this->m_capacity/2;
- return num_objects > next_cap ? num_objects : next_cap;/*
- return get_next_capacity( allocator_traits_type::max_size(this->m_holder.alloc())
- , this->m_capacity, additional_objects);*/
+ return next_capacity_calculator
+ <size_type, NextCapacityDouble/*NextCapacity60Percent*/>::
+ get( allocator_traits_type::max_size(this->alloc())
+ , this->m_capacity, additional_objects );
}
pointer m_start;
@@ -417,8 +364,8 @@ struct vector_alloc_holder
void move_from_empty(vector_alloc_holder &x) BOOST_CONTAINER_NOEXCEPT
{
+ //this->m_size was previously initialized
this->m_start = x.m_start;
- this->m_size = x.m_size;
this->m_capacity = x.m_capacity;
x.m_start = pointer();
x.m_size = x.m_capacity = 0;
@@ -467,18 +414,20 @@ struct vector_alloc_holder<Allocator, container_detail::integral_constant<unsign
//Constructor, does not throw
template<class AllocConvertible>
- explicit vector_alloc_holder(BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
+ vector_alloc_holder(uninitialized_size_t, BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
: Allocator(boost::forward<AllocConvertible>(a))
- , m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
+ , m_size(initial_size) //Size is initialized here...
{
+ //... and capacity here, so vector, must call uninitialized_xxx in the derived constructor
this->first_allocation(initial_size);
}
//Constructor, does not throw
- explicit vector_alloc_holder(size_type initial_size)
+ vector_alloc_holder(uninitialized_size_t, size_type initial_size)
: Allocator()
- , m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
+ , m_size(initial_size) //Size is initialized here...
{
+ //... and capacity here, so vector, must call uninitialized_xxx in the derived constructor
this->first_allocation(initial_size);
}
@@ -565,15 +514,16 @@ struct vector_alloc_holder<Allocator, container_detail::integral_constant<unsign
};
} //namespace container_detail {
-/// @endcond
-//! \class vector
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
//! A vector is a sequence that supports random access to elements, constant
//! time insertion and removal of elements at the end, and linear time insertion
//! and removal of elements at the beginning or in the middle. The number of
//! elements in a vector may vary dynamically; memory management is automatic.
-//! boost::container::vector is similar to std::vector but it's compatible
-//! with shared memory and memory mapped files.
+//!
+//! \tparam T The type of object that is stored in the vector
+//! \tparam Allocator The allocator used for all internal memory management
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
template <class T, class Allocator = std::allocator<T> >
#else
@@ -581,16 +531,21 @@ template <class T, class Allocator>
#endif
class vector
{
- /// @cond
- typedef container_detail::integral_constant
- <unsigned, boost::container::container_detail::version
- <Allocator>::value > alloc_version;
- boost::container::container_detail::vector_alloc_holder<Allocator, alloc_version> m_holder;
- typedef container_detail::vector_alloc_holder<Allocator> base_t;
- typedef allocator_traits<Allocator> allocator_traits_type;
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+ typedef typename container_detail::version<Allocator>::type alloc_version;
+ boost::container::container_detail::vector_alloc_holder
+ <Allocator, alloc_version> m_holder;
+ typedef allocator_traits<Allocator> allocator_traits_type;
template <class U, class UAllocator>
friend class vector;
- /// @endcond
+
+ typedef typename ::boost::container::allocator_traits
+ <Allocator>::pointer pointer_impl;
+ typedef container_detail::vec_iterator<pointer_impl, false> iterator_impl;
+ typedef container_detail::vec_iterator<pointer_impl, true > const_iterator_impl;
+
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
//
@@ -611,13 +566,13 @@ class vector
typedef BOOST_CONTAINER_IMPDEF(pointer) iterator;
typedef BOOST_CONTAINER_IMPDEF(const_pointer) const_iterator;
#else
- typedef BOOST_CONTAINER_IMPDEF(container_detail::vector_iterator<pointer>) iterator;
- typedef BOOST_CONTAINER_IMPDEF(container_detail::vector_const_iterator<pointer>) const_iterator;
+ typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator;
+ typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator;
#endif
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
- /// @cond
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
BOOST_COPYABLE_AND_MOVABLE(vector)
typedef container_detail::vector_value_traits<value_type, Allocator> value_traits;
@@ -627,7 +582,7 @@ class vector
typedef container_detail::integral_constant<unsigned, 2> allocator_v2;
typedef constant_iterator<T, difference_type> cvalue_iterator;
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//////////////////////////////////////////////
@@ -656,16 +611,33 @@ class vector
{}
//! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
- //! and inserts n default contructed values.
+ //! and inserts n value initialized values.
//!
//! <b>Throws</b>: If allocator_type's default constructor or allocation
- //! throws or T's default constructor throws.
+ //! throws or T's value initialization throws.
//!
//! <b>Complexity</b>: Linear to n.
explicit vector(size_type n)
- : m_holder(n)
+ : m_holder(container_detail::uninitialized_size, n)
+ {
+ boost::container::uninitialized_value_init_alloc_n
+ (this->m_holder.alloc(), n, container_detail::to_raw_pointer(this->m_holder.start()));
+ }
+
+ //! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
+ //! and inserts n default initialized values.
+ //!
+ //! <b>Throws</b>: If allocator_type's default constructor or allocation
+ //! throws or T's default initialization throws.
+ //!
+ //! <b>Complexity</b>: Linear to n.
+ //!
+ //! <b>Note</b>: Non-standard extension
+ vector(size_type n, default_init_t)
+ : m_holder(container_detail::uninitialized_size, n)
{
- boost::container::uninitialized_default_alloc_n(this->m_holder.alloc(), n, container_detail::to_raw_pointer(this->m_holder.start()));
+ boost::container::uninitialized_default_init_alloc_n
+ (this->m_holder.alloc(), n, container_detail::to_raw_pointer(this->m_holder.start()));
}
//! <b>Effects</b>: Constructs a vector
@@ -676,7 +648,7 @@ class vector
//!
//! <b>Complexity</b>: Linear to n.
vector(size_type n, const T& value)
- : m_holder(n)
+ : m_holder(container_detail::uninitialized_size, n)
{
boost::container::uninitialized_fill_alloc_n
(this->m_holder.alloc(), value, n, container_detail::to_raw_pointer(this->m_holder.start()));
@@ -690,7 +662,7 @@ class vector
//!
//! <b>Complexity</b>: Linear to n.
vector(size_type n, const T& value, const allocator_type& a)
- : m_holder(a, n)
+ : m_holder(container_detail::uninitialized_size, a, n)
{
boost::container::uninitialized_fill_alloc_n
(this->m_holder.alloc(), value, n, container_detail::to_raw_pointer(this->m_holder.start()));
@@ -700,7 +672,7 @@ class vector
//! and inserts a copy of the range [first, last) in the vector.
//!
//! <b>Throws</b>: If allocator_type's default constructor or allocation
- //! throws or T's constructor taking an dereferenced InIt throws.
+ //! throws or T's constructor taking a dereferenced InIt throws.
//!
//! <b>Complexity</b>: Linear to the range [first, last).
template <class InIt>
@@ -712,7 +684,7 @@ class vector
//! and inserts a copy of the range [first, last) in the vector.
//!
//! <b>Throws</b>: If allocator_type's default constructor or allocation
- //! throws or T's constructor taking an dereferenced InIt throws.
+ //! throws or T's constructor taking a dereferenced InIt throws.
//!
//! <b>Complexity</b>: Linear to the range [first, last).
template <class InIt>
@@ -729,34 +701,39 @@ class vector
//!
//! <b>Complexity</b>: Linear to the elements x contains.
vector(const vector &x)
- : m_holder(allocator_traits_type::select_on_container_copy_construction(x.m_holder.alloc()), x.size())
+ : m_holder( container_detail::uninitialized_size
+ , allocator_traits_type::select_on_container_copy_construction(x.m_holder.alloc())
+ , x.size())
{
::boost::container::uninitialized_copy_alloc_n
( this->m_holder.alloc(), container_detail::to_raw_pointer(x.m_holder.start())
, x.size(), container_detail::to_raw_pointer(this->m_holder.start()));
}
- //! <b>Effects</b>: Move constructor. Moves mx's resources to *this.
+ //! <b>Effects</b>: Move constructor. Moves x's resources to *this.
//!
//! <b>Throws</b>: Nothing
//!
//! <b>Complexity</b>: Constant.
- vector(BOOST_RV_REF(vector) mx) BOOST_CONTAINER_NOEXCEPT
- : m_holder(boost::move(mx.m_holder))
+ vector(BOOST_RV_REF(vector) x) BOOST_CONTAINER_NOEXCEPT
+ : m_holder(boost::move(x.m_holder))
{}
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! <b>Effects</b>: Move constructor. Moves mx's resources to *this.
+ //! <b>Effects</b>: Move constructor. Moves x's resources to *this.
//!
//! <b>Throws</b>: If T's move constructor or allocation throws
//!
//! <b>Complexity</b>: Linear.
//!
- //! <b>Note</b>: Non-standard extension
+ //! <b>Note</b>: Non-standard extension to support static_vector
template<class OtherAllocator>
- vector(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END mx)
- : m_holder(boost::move(mx.m_holder))
+ vector(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
+ , typename container_detail::enable_if_c
+ < container_detail::is_version<OtherAllocator, 0>::value>::type * = 0
+ )
+ : m_holder(boost::move(x.m_holder))
{}
#endif //!defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -770,7 +747,7 @@ class vector
//!
//! <b>Complexity</b>: Linear to the elements x contains.
vector(const vector &x, const allocator_type &a)
- : m_holder(a, x.size())
+ : m_holder(container_detail::uninitialized_size, a, x.size())
{
::boost::container::uninitialized_copy_alloc_n_source
( this->m_holder.alloc(), container_detail::to_raw_pointer(x.m_holder.start())
@@ -778,25 +755,24 @@ class vector
}
//! <b>Effects</b>: Move constructor using the specified allocator.
- //! Moves mx's resources to *this if a == allocator_type().
+ //! Moves x's resources to *this if a == allocator_type().
//! Otherwise copies values from x to *this.
//!
//! <b>Throws</b>: If allocation or T's copy constructor throws.
//!
- //! <b>Complexity</b>: Constant if a == mx.get_allocator(), linear otherwise.
- vector(BOOST_RV_REF(vector) mx, const allocator_type &a)
- : m_holder(a)
+ //! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
+ vector(BOOST_RV_REF(vector) x, const allocator_type &a)
+ : m_holder(container_detail::uninitialized_size, a, x.size())
{
- if(mx.m_holder.alloc() == a){
- this->m_holder.move_from_empty(mx.m_holder);
+ if(x.m_holder.alloc() == a){
+ this->m_holder.move_from_empty(x.m_holder);
}
else{
- const size_type n = mx.size();
+ const size_type n = x.size();
this->m_holder.first_allocation_same_allocator_type(n);
::boost::container::uninitialized_move_alloc_n_source
- ( this->m_holder.alloc(), container_detail::to_raw_pointer(mx.m_holder.start())
+ ( this->m_holder.alloc(), container_detail::to_raw_pointer(x.m_holder.start())
, n, container_detail::to_raw_pointer(this->m_holder.start()));
- this->m_holder.m_size = n;
}
}
@@ -811,7 +787,7 @@ class vector
boost::container::destroy_alloc_n
(this->get_stored_allocator(), container_detail::to_raw_pointer(this->m_holder.start()), this->m_holder.m_size);
//vector_alloc_holder deallocates the data
- }
+ }
//! <b>Effects</b>: Makes *this contain the same elements as x.
//!
@@ -824,30 +800,32 @@ class vector
vector& operator=(BOOST_COPY_ASSIGN_REF(vector) x)
{
if (&x != this){
- this->priv_copy_assign(boost::move(x), alloc_version());
+ this->priv_copy_assign(x);
}
return *this;
}
- //! <b>Effects</b>: Move assignment. All mx's values are transferred to *this.
+ //! <b>Effects</b>: Move assignment. All x's values are transferred to *this.
//!
//! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
//! before the function.
//!
- //! <b>Throws</b>: Nothing
+ //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+ //! is false and (allocation throws or value_type's move constructor throws)
//!
- //! <b>Complexity</b>: Linear.
+ //! <b>Complexity</b>: Constant if allocator_traits_type::
+ //! propagate_on_container_move_assignment is true or
+ //! this->get>allocator() == x.get_allocator(). Linear otherwise.
vector& operator=(BOOST_RV_REF(vector) x)
- //iG BOOST_CONTAINER_NOEXCEPT_IF(!allocator_type::propagate_on_container_move_assignment::value || is_nothrow_move_assignable<allocator_type>::value);)
- BOOST_CONTAINER_NOEXCEPT
+ BOOST_CONTAINER_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value)
{
- this->priv_move_assign(boost::move(x), alloc_version());
+ this->priv_move_assign(boost::move(x));
return *this;
}
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! <b>Effects</b>: Move assignment. All mx's values are transferred to *this.
+ //! <b>Effects</b>: Move assignment. All x's values are transferred to *this.
//!
//! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
//! before the function.
@@ -855,10 +833,37 @@ class vector
//! <b>Throws</b>: If move constructor/assignment of T throws or allocation throws
//!
//! <b>Complexity</b>: Linear.
- template<class OtherAllocator, class OtherAllocatorVersion>
- vector& operator=(BOOST_RV_REF_BEG vector<OtherAllocator, OtherAllocatorVersion> BOOST_RV_REF_END x)
+ //!
+ //! <b>Note</b>: Non-standard extension to support static_vector
+ template<class OtherAllocator>
+ typename container_detail::enable_if_c
+ < container_detail::is_version<OtherAllocator, 0>::value &&
+ !container_detail::is_same<OtherAllocator, allocator_type>::value
+ , vector& >::type
+ operator=(BOOST_RV_REF_BEG vector<value_type, OtherAllocator> BOOST_RV_REF_END x)
{
- this->priv_move_assign(boost::move(x), alloc_version());
+ this->priv_move_assign(boost::move(x));
+ return *this;
+ }
+
+ //! <b>Effects</b>: Copy assignment. All x's values are copied to *this.
+ //!
+ //! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
+ //! before the function.
+ //!
+ //! <b>Throws</b>: If move constructor/assignment of T throws or allocation throws
+ //!
+ //! <b>Complexity</b>: Linear.
+ //!
+ //! <b>Note</b>: Non-standard extension to support static_vector
+ template<class OtherAllocator>
+ typename container_detail::enable_if_c
+ < container_detail::is_version<OtherAllocator, 0>::value &&
+ !container_detail::is_same<OtherAllocator, allocator_type>::value
+ , vector& >::type
+ operator=(const vector<value_type, OtherAllocator> &x)
+ {
+ this->priv_copy_assign(x);
return *this;
}
@@ -874,8 +879,9 @@ class vector
void assign(InIt first, InIt last
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
, typename container_detail::enable_if_c
- < !container_detail::is_convertible<InIt, size_type>::value
- //&& container_detail::is_input_iterator<InIt>::value
+ < !container_detail::is_convertible<InIt, size_type>::value &&
+ ( container_detail::is_input_iterator<InIt>::value ||
+ container_detail::is_same<alloc_version, allocator_v0>::value )
>::type * = 0
#endif
)
@@ -899,6 +905,64 @@ class vector
}
}
+ //! <b>Effects</b>: Assigns the the range [first, last) to *this.
+ //!
+ //! <b>Throws</b>: If memory allocation throws or T's copy/move constructor/assignment or
+ //! T's constructor/assignment from dereferencing InpIt throws.
+ //!
+ //! <b>Complexity</b>: Linear to n.
+ template <class FwdIt>
+ void assign(FwdIt first, FwdIt last
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+ , typename container_detail::enable_if_c
+ < !container_detail::is_convertible<FwdIt, size_type>::value &&
+ ( !container_detail::is_input_iterator<FwdIt>::value &&
+ !container_detail::is_same<alloc_version, allocator_v0>::value )
+ >::type * = 0
+ #endif
+ )
+ {
+ //For Fwd iterators the standard only requires EmplaceConstructible and assignable from *first
+ //so we can't do any backwards allocation
+ const size_type input_sz = static_cast<size_type>(std::distance(first, last));
+ const size_type old_capacity = this->capacity();
+ if(input_sz > old_capacity){ //If input range is too big, we need to reallocate
+ size_type real_cap = 0;
+ std::pair<pointer, bool> ret =
+ this->m_holder.allocation_command(allocate_new, input_sz, input_sz, real_cap, this->m_holder.start());
+ if(!ret.second){ //New allocation, just emplace new values
+ pointer const old_p = this->m_holder.start();
+ if(old_p){
+ this->priv_destroy_all();
+ this->m_holder.alloc().deallocate(old_p, old_capacity);
+ }
+ this->m_holder.start(ret.first);
+ this->m_holder.capacity(real_cap);
+ this->m_holder.m_size = 0;
+ this->priv_uninitialized_construct_at_end(first, last);
+ return;
+ }
+ else{
+ //Forward expansion, use assignment + back deletion/construction that comes later
+ }
+ }
+ //Overwrite all elements we can from [first, last)
+ iterator cur = this->begin();
+ const iterator end_it = this->end();
+ for ( ; first != last && cur != end_it; ++cur, ++first){
+ *cur = *first;
+ }
+
+ if (first == last){
+ //There are no more elements in the sequence, erase remaining
+ this->priv_destroy_last_n(this->size() - input_sz);
+ }
+ else{
+ //Uninitialized construct at end the remaining range
+ this->priv_uninitialized_construct_at_end(first, last);
+ }
+ }
+
//! <b>Effects</b>: Assigns the n copies of val to *this.
//!
//! <b>Throws</b>: If memory allocation throws or
@@ -1075,44 +1139,33 @@ class vector
{ return allocator_traits_type::max_size(this->m_holder.alloc()); }
//! <b>Effects</b>: Inserts or erases elements at the end such that
- //! the size becomes n. New elements are default constructed.
+ //! the size becomes n. New elements are value initialized.
//!
- //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
+ //! <b>Throws</b>: If memory allocation throws, or T's copy/move or value initialization throws.
//!
//! <b>Complexity</b>: Linear to the difference between size() and new_size.
void resize(size_type new_size)
- {
- const size_type sz = this->size();
- if (new_size < sz){
- //Destroy last elements
- this->priv_destroy_last_n(sz - new_size);
- }
- else{
- const size_type n = new_size - this->size();
- container_detail::insert_default_constructed_n_proxy<Allocator, T*> proxy(this->m_holder.alloc());
- this->priv_forward_range_insert_at_end(n, proxy, alloc_version());
- }
- }
+ { this->priv_resize(new_size, value_init); }
+
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
+ //! the size becomes n. New elements are default initialized.
+ //!
+ //! <b>Throws</b>: If memory allocation throws, or T's copy/move or default initialization throws.
+ //!
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
+ //!
+ //! <b>Note</b>: Non-standard extension
+ void resize(size_type new_size, default_init_t)
+ { this->priv_resize(new_size, default_init); }
//! <b>Effects</b>: Inserts or erases elements at the end such that
//! the size becomes n. New elements are copy constructed from x.
//!
- //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
+ //! <b>Throws</b>: If memory allocation throws, or T's copy/move constructor throws.
//!
//! <b>Complexity</b>: Linear to the difference between size() and new_size.
void resize(size_type new_size, const T& x)
- {
- const size_type sz = this->size();
- if (new_size < sz){
- //Destroy last elements
- this->priv_destroy_last_n(sz - new_size);
- }
- else{
- const size_type n = new_size - this->size();
- container_detail::insert_n_copies_proxy<Allocator, T*> proxy(this->m_holder.alloc(), x);
- this->priv_forward_range_insert_at_end(n, proxy, alloc_version());
- }
- }
+ { this->priv_resize(new_size, x); }
//! <b>Effects</b>: Number of elements for which memory has been allocated.
//! capacity() is always greater than or equal to size().
@@ -1274,7 +1327,7 @@ class vector
//! std::forward<Args>(args)... in the end of the vector.
//!
//! <b>Throws</b>: If memory allocation throws or the in-place constructor throws or
- //! T's move constructor throws.
+ //! T's copy/move constructor throws.
//!
//! <b>Complexity</b>: Amortized constant time.
template<class ...Args>
@@ -1289,7 +1342,7 @@ class vector
else{
typedef container_detail::insert_emplace_proxy<Allocator, T*, Args...> type;
this->priv_forward_range_insert_no_capacity
- (vector_iterator_get_ptr(this->cend()), 1, type(this->m_holder.alloc(), ::boost::forward<Args>(args)...), alloc_version());
+ (vector_iterator_get_ptr(this->cend()), 1, type(::boost::forward<Args>(args)...), alloc_version());
}
}
@@ -1299,7 +1352,7 @@ class vector
//! std::forward<Args>(args)... before position
//!
//! <b>Throws</b>: If memory allocation throws or the in-place constructor throws or
- //! T's move constructor/assignment throws.
+ //! T's copy/move constructor/assignment throws.
//!
//! <b>Complexity</b>: If position is end(), amortized constant time
//! Linear time otherwise.
@@ -1308,8 +1361,8 @@ class vector
{
//Just call more general insert(pos, size, value) and return iterator
typedef container_detail::insert_emplace_proxy<Allocator, T*, Args...> type;
- return this->priv_forward_range_insert( vector_iterator_get_ptr(position), 1, type(this->m_holder.alloc()
- , ::boost::forward<Args>(args)...), alloc_version());
+ return this->priv_forward_range_insert( vector_iterator_get_ptr(position), 1
+ , type(::boost::forward<Args>(args)...), alloc_version());
}
#else
@@ -1326,11 +1379,11 @@ class vector
++this->m_holder.m_size; \
} \
else{ \
- container_detail::BOOST_PP_CAT(insert_emplace_proxy_arg, n) \
- <Allocator, T* BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
- (this->m_holder.alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
+ typedef container_detail::BOOST_PP_CAT(insert_emplace_proxy_arg, n) \
+ <Allocator, T* BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> type; \
this->priv_forward_range_insert_no_capacity \
- (vector_iterator_get_ptr(this->cend()), 1, proxy, alloc_version()); \
+ ( vector_iterator_get_ptr(this->cend()), 1 \
+ , type(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)), alloc_version()); \
} \
} \
\
@@ -1338,11 +1391,11 @@ class vector
iterator emplace(const_iterator pos \
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
{ \
- container_detail::BOOST_PP_CAT(insert_emplace_proxy_arg, n) \
- <Allocator, T* BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
- (this->m_holder.alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
+ typedef container_detail::BOOST_PP_CAT(insert_emplace_proxy_arg, n) \
+ <Allocator, T* BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> type; \
return this->priv_forward_range_insert \
- (container_detail::to_raw_pointer(vector_iterator_get_ptr(pos)), 1, proxy, alloc_version()); \
+ ( container_detail::to_raw_pointer(vector_iterator_get_ptr(pos)), 1 \
+ , type(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)), alloc_version()); \
} \
//!
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
@@ -1360,17 +1413,17 @@ class vector
void push_back(const T &x);
//! <b>Effects</b>: Constructs a new element in the end of the vector
- //! and moves the resources of mx to this new element.
+ //! and moves the resources of x to this new element.
//!
//! <b>Throws</b>: If memory allocation throws or
- //! T's move constructor throws.
+ //! T's copy/move constructor throws.
//!
//! <b>Complexity</b>: 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)
//! <b>Requires</b>: position must be a valid iterator of *this.
//!
@@ -1384,7 +1437,7 @@ class vector
//! <b>Requires</b>: position must be a valid iterator of *this.
//!
- //! <b>Effects</b>: Insert a new element before position with mx's resources.
+ //! <b>Effects</b>: Insert a new element before position with x's resources.
//!
//! <b>Throws</b>: If memory allocation throws.
//!
@@ -1392,7 +1445,7 @@ class vector
//! Linear time otherwise.
iterator insert(const_iterator position, T &&x);
#else
- BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator)
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator, const_iterator)
#endif
//! <b>Requires</b>: p must be a valid iterator of *this.
@@ -1401,12 +1454,12 @@ class vector
//!
//! <b>Returns</b>: an iterator to the first inserted element or p if n is 0.
//!
- //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
+ //! <b>Throws</b>: If memory allocation throws or T's copy/move constructor throws.
//!
//! <b>Complexity</b>: Linear to n.
iterator insert(const_iterator p, size_type n, const T& x)
{
- container_detail::insert_n_copies_proxy<Allocator, T*> proxy(this->m_holder.alloc(), x);
+ container_detail::insert_n_copies_proxy<Allocator, T*> proxy(x);
return this->priv_forward_range_insert(vector_iterator_get_ptr(p), n, proxy, alloc_version());
}
@@ -1448,11 +1501,37 @@ class vector
>::type * = 0
)
{
- container_detail::insert_range_proxy<Allocator, FwdIt, T*> proxy(this->m_holder.alloc(), first);
+ container_detail::insert_range_proxy<Allocator, FwdIt, T*> proxy(first);
return this->priv_forward_range_insert(vector_iterator_get_ptr(pos), std::distance(first, last), proxy, alloc_version());
}
#endif
+ //! <b>Requires</b>: p must be a valid iterator of *this. num, must
+ //! be equal to std::distance(first, last)
+ //!
+ //! <b>Effects</b>: Insert a copy of the [first, last) range before pos.
+ //!
+ //! <b>Returns</b>: an iterator to the first inserted element or pos if first == last.
+ //!
+ //! <b>Throws</b>: If memory allocation throws, T's constructor from a
+ //! dereferenced InpIt throws or T's copy/move constructor/assignment throws.
+ //!
+ //! <b>Complexity</b>: Linear to std::distance [first, last).
+ //!
+ //! <b>Note</b>: This function avoids a linear operation to calculate std::distance[first, last)
+ //! for forward and bidirectional iterators, and a one by one insertion for input iterators. This is a
+ //! a non-standard extension.
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+ template <class InIt>
+ iterator insert(const_iterator pos, size_type num, InIt first, InIt last)
+ {
+ BOOST_ASSERT(container_detail::is_input_iterator<InIt>::value ||
+ num == static_cast<size_type>(std::distance(first, last)));
+ container_detail::insert_range_proxy<Allocator, InIt, T*> proxy(first);
+ return this->priv_forward_range_insert(vector_iterator_get_ptr(pos), num, proxy, alloc_version());
+ }
+ #endif
+
//! <b>Effects</b>: Removes the last element from the vector.
//!
//! <b>Throws</b>: Nothing.
@@ -1508,7 +1587,7 @@ class vector
//! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Constant.
- void swap(vector& x) BOOST_CONTAINER_NOEXCEPT_IF((!container_detail::is_same<alloc_version, allocator_v0>::value))
+ void swap(vector& x) BOOST_CONTAINER_NOEXCEPT_IF((!container_detail::is_version<Allocator, 0>::value))
{
//Just swap internals in case of !allocator_v0. Otherwise, deep swap
this->m_holder.swap(x.m_holder);
@@ -1521,16 +1600,18 @@ class vector
//! <b>Effects</b>: Swaps the contents of *this and x.
//!
- //! <b>Throws</b>: If T's move constructor throws.
+ //! <b>Throws</b>: Nothing.
//!
//! <b>Complexity</b>: Linear
//!
- //! <b>Note</b>: non-standard extension.
+ //! <b>Note</b>: Non-standard extension to support static_vector
template<class OtherAllocator>
- void swap(vector<T, OtherAllocator> & x)
- {
- this->m_holder.swap(x.m_holder);
- }
+ void swap(vector<T, OtherAllocator> & x
+ , typename container_detail::enable_if_c
+ < container_detail::is_version<OtherAllocator, 0>::value &&
+ !container_detail::is_same<OtherAllocator, allocator_type>::value >::type * = 0
+ )
+ { this->m_holder.swap(x.m_holder); }
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
@@ -1538,61 +1619,81 @@ class vector
//!
//! <b>Throws</b>: Nothing.
//!
- //! <b>Complexity</b>: Linear to the number of elements in the vector.
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
void clear() BOOST_CONTAINER_NOEXCEPT
{ this->priv_destroy_all(); }
- /// @cond
+ //! <b>Effects</b>: Returns true if x and y are equal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator==(const vector& x, const vector& y)
+ { return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin()); }
+
+ //! <b>Effects</b>: Returns true if x and y are unequal
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator!=(const vector& x, const vector& y)
+ { return !(x == y); }
+
+ //! <b>Effects</b>: Returns true if x is less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<(const vector& x, const vector& y)
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
+
+ //! <b>Effects</b>: Returns true if x is greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>(const vector& x, const vector& y)
+ { return y < x; }
+
+ //! <b>Effects</b>: Returns true if x is equal or less than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator<=(const vector& x, const vector& y)
+ { return !(y < x); }
+
+ //! <b>Effects</b>: Returns true if x is equal or greater than y
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements in the container.
+ friend bool operator>=(const vector& x, const vector& y)
+ { return !(x < y); }
+
+ //! <b>Effects</b>: x.swap(y)
+ //!
+ //! <b>Complexity</b>: Constant.
+ friend void swap(vector& x, vector& y)
+ { x.swap(y); }
+
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//Absolutely experimental. This function might change, disappear or simply crash!
template<class BiDirPosConstIt, class BiDirValueIt>
void insert_ordered_at(size_type element_count, BiDirPosConstIt last_position_it, BiDirValueIt last_value_it)
{
const size_type *dummy = 0;
- this->priv_insert_ordered_at(element_count, last_position_it, false, &dummy[0], last_value_it);
+ this->priv_insert_ordered_at(element_count, last_position_it, false, dummy, last_value_it);
}
//Absolutely experimental. This function might change, disappear or simply crash!
template<class BiDirPosConstIt, class BiDirSkipConstIt, class BiDirValueIt>
- void insert_ordered_at(size_type element_count, BiDirPosConstIt last_position_it, BiDirSkipConstIt last_skip_it, BiDirValueIt last_value_it)
+ void insert_ordered_at( size_type element_count, BiDirPosConstIt last_position_it
+ , BiDirSkipConstIt last_skip_it, BiDirValueIt last_value_it)
{
this->priv_insert_ordered_at(element_count, last_position_it, true, last_skip_it, last_value_it);
}
private:
- template<class OtherAllocator, class AllocVersion>
+ template<class OtherAllocator>
void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
- , AllocVersion
, typename container_detail::enable_if_c
- < container_detail::is_same<AllocVersion, allocator_v0>::value &&
- !container_detail::is_same<OtherAllocator, allocator_type>::value
- >::type * = 0)
+ < container_detail::is_version<OtherAllocator, 0>::value >::type * = 0)
{
- if(this->capacity() < x.size()){
+ if(!container_detail::is_same<OtherAllocator, allocator_type>::value &&
+ this->capacity() < x.size()){
throw_bad_alloc();
}
- this->priv_move_assign_impl(boost::move(x), AllocVersion());
- }
-
- template<class OtherAllocator, class AllocVersion>
- void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
- , AllocVersion
- , typename container_detail::enable_if_c
- < !container_detail::is_same<AllocVersion, allocator_v0>::value ||
- container_detail::is_same<OtherAllocator, allocator_type>::value
- >::type * = 0)
- {
- this->priv_move_assign_impl(boost::move(x), AllocVersion());
- }
-
- template<class OtherAllocator, class AllocVersion>
- void priv_move_assign_impl(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
- , AllocVersion
- , typename container_detail::enable_if_c
- < container_detail::is_same<AllocVersion, allocator_v0>::value
- >::type * = 0)
- {
T* const this_start = container_detail::to_raw_pointer(m_holder.start());
T* const other_start = container_detail::to_raw_pointer(x.m_holder.start());
const size_type this_sz = m_holder.m_size;
@@ -1601,40 +1702,46 @@ class vector
this->m_holder.m_size = other_sz;
}
- template<class OtherAllocator, class AllocVersion>
- void priv_move_assign_impl(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
- , AllocVersion
+ template<class OtherAllocator>
+ void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
, typename container_detail::enable_if_c
- < !container_detail::is_same<AllocVersion, allocator_v0>::value
- >::type * = 0)
+ < !container_detail::is_version<OtherAllocator, 0>::value &&
+ container_detail::is_same<OtherAllocator, allocator_type>::value>::type * = 0)
{
//for move constructor, no aliasing (&x != this) is assummed.
+ BOOST_ASSERT(this != &x);
allocator_type &this_alloc = this->m_holder.alloc();
allocator_type &x_alloc = x.m_holder.alloc();
- //If allocators are equal we can just swap pointers
- if(this_alloc == x_alloc){
+ const bool propagate_alloc = allocator_traits_type::
+ propagate_on_container_move_assignment::value;
+ container_detail::bool_<propagate_alloc> flag;
+ const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
+ //Resources can be transferred if both allocators are
+ //going to be equal after this function (either propagated or already equal)
+ if(propagate_alloc || allocators_equal){
//Destroy objects but retain memory in case x reuses it in the future
this->clear();
- this->m_holder.swap(x.m_holder);
//Move allocator if needed
- container_detail::bool_<allocator_traits_type::
- propagate_on_container_move_assignment::value> flag;
container_detail::move_alloc(this_alloc, x_alloc, flag);
+ //Nothrow swap
+ this->m_holder.swap(x.m_holder);
}
- //If unequal allocators, then do a one by one move
+ //Else do a one by one move
else{
- //TO-DO: optimize this
- this->assign( boost::make_move_iterator(container_detail::to_raw_pointer(x.m_holder.start()))
- , boost::make_move_iterator(container_detail::to_raw_pointer(x.m_holder.start() + x.m_holder.m_size)));
+ this->assign( boost::make_move_iterator(x.begin())
+ , boost::make_move_iterator(x.end()));
}
}
- template<class AllocVersion>
- void priv_copy_assign(const vector &x, AllocVersion
+ template<class OtherAllocator>
+ void priv_copy_assign(const vector<T, OtherAllocator> &x
, typename container_detail::enable_if_c
- < container_detail::is_same<AllocVersion, allocator_v0>::value
- >::type * = 0)
+ < container_detail::is_version<OtherAllocator, 0>::value >::type * = 0)
{
+ if(!container_detail::is_same<OtherAllocator, allocator_type>::value &&
+ this->capacity() < x.size()){
+ throw_bad_alloc();
+ }
T* const this_start = container_detail::to_raw_pointer(m_holder.start());
T* const other_start = container_detail::to_raw_pointer(x.m_holder.start());
const size_type this_sz = m_holder.m_size;
@@ -1643,11 +1750,11 @@ class vector
this->m_holder.m_size = other_sz;
}
- template<class AllocVersion>
- void priv_copy_assign(const vector &x, AllocVersion
+ template<class OtherAllocator>
+ void priv_copy_assign(const vector<T, OtherAllocator> &x
, typename container_detail::enable_if_c
- < !container_detail::is_same<AllocVersion, allocator_v0>::value
- >::type * = 0)
+ < !container_detail::is_version<OtherAllocator, 0>::value &&
+ container_detail::is_same<OtherAllocator, allocator_type>::value >::type * = 0)
{
allocator_type &this_alloc = this->m_holder.alloc();
const allocator_type &x_alloc = x.m_holder.alloc();
@@ -1663,25 +1770,23 @@ class vector
}
void priv_reserve(size_type, allocator_v0)
+ { throw_bad_alloc(); }
+
+ container_detail::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*> priv_dummy_empty_proxy()
{
- throw_bad_alloc();
+ return container_detail::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*>
+ (::boost::make_move_iterator((T *)0));
}
void priv_reserve(size_type new_cap, allocator_v1)
{
//There is not enough memory, allocate a new buffer
pointer p = this->m_holder.allocate(new_cap);
- //Backwards (and possibly forward) expansion
- #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
- ++this->num_alloc;
- #endif
- T * const raw_beg = container_detail::to_raw_pointer(this->m_holder.start());
- const size_type sz = m_holder.m_size;
- ::boost::container::uninitialized_move_alloc_n_source
- ( this->m_holder.alloc(), raw_beg, sz, container_detail::to_raw_pointer(p) );
- boost::container::destroy_alloc_n(this->m_holder.alloc(), raw_beg, sz);
- this->m_holder.start(p);
- this->m_holder.capacity(new_cap);
+ //We will reuse insert code, so create a dummy input iterator
+ this->priv_forward_range_insert_new_allocation
+ ( container_detail::to_raw_pointer(p), new_cap
+ , container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size
+ , 0, this->priv_dummy_empty_proxy());
}
void priv_reserve(size_type new_cap, allocator_v2)
@@ -1690,10 +1795,8 @@ class vector
//buffer or expand the old one.
bool same_buffer_start;
size_type real_cap = 0;
- std::pair<pointer, bool> ret =
- this->m_holder.allocation_command
- (allocate_new | expand_fwd | expand_bwd,
- new_cap, new_cap, real_cap, this->m_holder.start());
+ std::pair<pointer, bool> ret = this->m_holder.allocation_command
+ (allocate_new | expand_fwd | expand_bwd, new_cap, new_cap, real_cap, this->m_holder.start());
//Check for forward expansion
same_buffer_start = ret.second && this->m_holder.start() == ret.first;
@@ -1703,49 +1806,26 @@ class vector
#endif
this->m_holder.capacity(real_cap);
}
- //If there is no forward expansion, move objects
- else{
- //Backwards (and possibly forward) expansion
- if(ret.second){
- //We will reuse insert code, so create a dummy input iterator
- container_detail::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*>
- proxy(this->m_holder.alloc(), ::boost::make_move_iterator((T *)0));
+ else{ //If there is no forward expansion, move objects, we will reuse insertion code
+ T * const new_mem = container_detail::to_raw_pointer(ret.first);
+ T * const ins_pos = container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size;
+ if(ret.second){ //Backwards (and possibly forward) expansion
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
++this->num_expand_bwd;
#endif
this->priv_forward_range_insert_expand_backwards
- ( container_detail::to_raw_pointer(ret.first)
- , real_cap
- , container_detail::to_raw_pointer(this->m_holder.start())
- , 0
- , proxy);
+ ( new_mem , real_cap, ins_pos, 0, this->priv_dummy_empty_proxy());
}
- //New buffer
- else{
- //Backwards (and possibly forward) expansion
+ else{ //New buffer
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
++this->num_alloc;
#endif
- T * const raw_beg = container_detail::to_raw_pointer(this->m_holder.start());
- const size_type sz = m_holder.m_size;
- ::boost::container::uninitialized_move_alloc_n_source
- ( this->m_holder.alloc(), raw_beg, sz, container_detail::to_raw_pointer(ret.first) );
- boost::container::destroy_alloc_n(this->m_holder.alloc(), raw_beg, sz);
- this->m_holder.start(ret.first);
- this->m_holder.capacity(real_cap);
+ this->priv_forward_range_insert_new_allocation
+ ( new_mem, real_cap, ins_pos, 0, this->priv_dummy_empty_proxy());
}
}
}
- template<class Proxy>
- void priv_uninitialized_fill(Proxy proxy, size_type n) const
- {
- //Copy first new elements in pos
- proxy.uninitialized_copy_n_and_update
- (container_detail::to_raw_pointer(this->m_holder.start()), n);
- //m_holder.size was already initialized to n in vector_alloc_holder's constructor
- }
-
void priv_destroy(value_type* p) BOOST_CONTAINER_NOEXCEPT
{
if(!value_traits::trivial_dctr)
@@ -1759,6 +1839,16 @@ class vector
this->m_holder.m_size -= n;
}
+ template<class InpIt>
+ void priv_uninitialized_construct_at_end(InpIt first, InpIt last)
+ {
+ T* end_pos = container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size;
+ for(; first != last; ++first, ++end_pos, ++this->m_holder.m_size){
+ //There is more memory, just construct a new object at the end
+ allocator_traits_type::construct(this->m_holder.alloc(), end_pos, *first);
+ }
+ }
+
void priv_destroy_all() BOOST_CONTAINER_NOEXCEPT
{
boost::container::destroy_alloc_n
@@ -1770,39 +1860,54 @@ class vector
iterator priv_insert(const const_iterator &p, BOOST_FWD_REF(U) x)
{
return this->priv_forward_range_insert
- ( vector_iterator_get_ptr(p), 1, container_detail::get_insert_value_proxy<T*>(this->m_holder.alloc()
- , ::boost::forward<U>(x)), alloc_version());
+ ( vector_iterator_get_ptr(p), 1, container_detail::get_insert_value_proxy<T*, Allocator>
+ (::boost::forward<U>(x)), alloc_version());
}
- void priv_push_back(const T &x)
+ container_detail::insert_copy_proxy<Allocator, T*> priv_single_insert_proxy(const T &x)
+ { return container_detail::insert_copy_proxy<Allocator, T*> (x); }
+
+ container_detail::insert_move_proxy<Allocator, T*> priv_single_insert_proxy(BOOST_RV_REF(T) x)
+ { return container_detail::insert_move_proxy<Allocator, T*> (x); }
+
+ template <class U>
+ void priv_push_back(BOOST_FWD_REF(U) u)
{
if (this->m_holder.m_size < this->m_holder.capacity()){
//There is more memory, just construct a new object at the end
allocator_traits_type::construct
( this->m_holder.alloc()
, container_detail::to_raw_pointer(this->m_holder.start() + this->m_holder.m_size)
- , x );
+ , ::boost::forward<U>(u) );
++this->m_holder.m_size;
}
else{
- container_detail::insert_copy_proxy<Allocator, T*> proxy(this->m_holder.alloc(), x);
- this->priv_forward_range_insert_no_capacity(vector_iterator_get_ptr(this->cend()), 1, proxy, alloc_version());
+ this->priv_forward_range_insert_no_capacity
+ ( vector_iterator_get_ptr(this->cend()), 1
+ , this->priv_single_insert_proxy(::boost::forward<U>(u)), alloc_version());
}
}
- void priv_push_back(BOOST_RV_REF(T) x)
+ container_detail::insert_n_copies_proxy<Allocator, T*> priv_resize_proxy(const T &x)
+ { return container_detail::insert_n_copies_proxy<Allocator, T*>(x); }
+
+ container_detail::insert_default_initialized_n_proxy<Allocator, T*> priv_resize_proxy(default_init_t)
+ { return container_detail::insert_default_initialized_n_proxy<Allocator, T*>(); }
+
+ container_detail::insert_value_initialized_n_proxy<Allocator, T*> priv_resize_proxy(value_init_t)
+ { return container_detail::insert_value_initialized_n_proxy<Allocator, T*>(); }
+
+ template <class U>
+ void priv_resize(size_type new_size, const U& u)
{
- if (this->m_holder.m_size < this->m_holder.capacity()){
- //There is more memory, just construct a new object at the end
- allocator_traits_type::construct
- ( this->m_holder.alloc()
- , container_detail::to_raw_pointer(this->m_holder.start() + this->m_holder.m_size)
- , ::boost::move(x) );
- ++this->m_holder.m_size;
+ const size_type sz = this->size();
+ if (new_size < sz){
+ //Destroy last elements
+ this->priv_destroy_last_n(sz - new_size);
}
else{
- container_detail::insert_move_proxy<Allocator, T*> proxy(this->m_holder.alloc(), x);
- this->priv_forward_range_insert_no_capacity(vector_iterator_get_ptr(this->cend()), 1, proxy, alloc_version());
+ const size_type n = new_size - this->size();
+ this->priv_forward_range_insert_at_end(n, this->priv_resize_proxy(u), alloc_version());
}
}
@@ -1824,17 +1929,13 @@ class vector
pointer p = this->m_holder.allocate(sz);
//We will reuse insert code, so create a dummy input iterator
- container_detail::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*>
- proxy(this->m_holder.alloc(), ::boost::make_move_iterator((T *)0));
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
++this->num_alloc;
#endif
this->priv_forward_range_insert_new_allocation
- ( container_detail::to_raw_pointer(p)
- , sz
+ ( container_detail::to_raw_pointer(p), sz
, container_detail::to_raw_pointer(this->m_holder.start())
- , 0
- , proxy);
+ , 0, this->priv_dummy_empty_proxy());
}
}
}
@@ -1889,7 +1990,6 @@ class vector
return iterator(this->m_holder.start() + n_pos);
}
-
template <class InsertionProxy>
iterator priv_forward_range_insert_no_capacity
(const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy, allocator_v2)
@@ -1966,8 +2066,7 @@ class vector
if (n <= remaining){
const size_type n_pos = raw_pos - container_detail::to_raw_pointer(this->m_holder.start());
- this->priv_forward_range_insert_expand_forward
- (raw_pos, n, insert_range_proxy);
+ this->priv_forward_range_insert_expand_forward(raw_pos, n, insert_range_proxy);
return iterator(this->m_holder.start() + n_pos);
}
else{
@@ -2100,7 +2199,7 @@ class vector
//
//Old situation:
// first_pos last_pos old_limit
- // | | |
+ // | | |
// ____________V_______V__________________V_____________
//| prefix | range | suffix |raw_mem ~
//|____________|_______|__________________|_____________~
@@ -2109,19 +2208,19 @@ class vector
// range is moved through move assignments
//
// first_pos last_pos limit_pos
- // | | |
+ // | | |
// ____________V_______V__________________V_____________
//| prefix' | | | range |suffix'|raw_mem ~
//|________________+______|___^___|_______|_____________~
// | |
- // |_>_>_>_>_>^
+ // |_>_>_>_>_>^
//
//
//New situation in Case B (hole_size > 0):
// range is moved through uninitialized moves
//
// first_pos last_pos limit_pos
- // | | |
+ // | | |
// ____________V_______V__________________V________________
//| prefix' | | | [hole] | range |
//|_______________________________________|________|___^___|
@@ -2132,7 +2231,7 @@ class vector
// range is moved through move assignments and uninitialized moves
//
// first_pos last_pos limit_pos
- // | | |
+ // | | |
// ____________V_______V__________________V___
//| prefix' | | | range |
//|___________________________________|___^___|
@@ -2149,7 +2248,7 @@ class vector
T* const last_ptr = begin_ptr + last_pos;
size_type hole_size = 0;
- //Case Allocator:
+ //Case A:
if((last_pos + shift_count) <= limit_pos){
//All move assigned
boost::move_backward(first_ptr, last_ptr, last_ptr + shift_count);
@@ -2178,7 +2277,7 @@ class vector
void priv_forward_range_insert_at_end_expand_forward(const size_type n, InsertionProxy insert_range_proxy)
{
T* const old_finish = container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size;
- insert_range_proxy.uninitialized_copy_n_and_update(old_finish, n);
+ insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, n);
this->m_holder.m_size += n;
}
@@ -2192,7 +2291,7 @@ class vector
const size_type elems_after = old_finish - pos;
if (!elems_after){
- insert_range_proxy.uninitialized_copy_n_and_update(old_finish, n);
+ insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, n);
this->m_holder.m_size += n;
}
else if (elems_after >= n){
@@ -2204,7 +2303,7 @@ class vector
//Copy previous to last objects to the initialized end
boost::move_backward(pos, old_finish - n, old_finish);
//Insert new objects in the pos
- insert_range_proxy.copy_n_and_update(pos, n);
+ insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), pos, n);
}
else {
//The new elements don't fit in the [pos, end()) range.
@@ -2213,9 +2312,9 @@ class vector
::boost::container::uninitialized_move_alloc(this->m_holder.alloc(), pos, old_finish, pos + n);
BOOST_TRY{
//Copy first new elements in pos (gap is still there)
- insert_range_proxy.copy_n_and_update(pos, elems_after);
+ insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), pos, elems_after);
//Copy to the beginning of the unallocated zone the last new elements (the gap is closed).
- insert_range_proxy.uninitialized_copy_n_and_update(old_finish, n - elems_after);
+ insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, n - elems_after);
this->m_holder.m_size += n;
}
BOOST_CATCH(...){
@@ -2234,21 +2333,22 @@ class vector
T *new_finish = new_start;
T *old_finish;
//Anti-exception rollbacks
- typename value_traits::ArrayDeallocator scoped_alloc(new_start, this->m_holder.alloc(), new_cap);
- typename value_traits::ArrayDestructor constructed_values_destroyer(new_start, this->m_holder.alloc(), 0u);
+ typename value_traits::ArrayDeallocator new_buffer_deallocator(new_start, this->m_holder.alloc(), new_cap);
+ typename value_traits::ArrayDestructor new_values_destroyer(new_start, this->m_holder.alloc(), 0u);
//Initialize with [begin(), pos) old buffer
//the start of the new buffer
- T *old_buffer = container_detail::to_raw_pointer(this->m_holder.start());
+ T * const old_buffer = container_detail::to_raw_pointer(this->m_holder.start());
if(old_buffer){
new_finish = ::boost::container::uninitialized_move_alloc
(this->m_holder.alloc(), container_detail::to_raw_pointer(this->m_holder.start()), pos, old_finish = new_finish);
- constructed_values_destroyer.increment_size(new_finish - old_finish);
+ new_values_destroyer.increment_size(new_finish - old_finish);
}
//Initialize new objects, starting from previous point
- insert_range_proxy.uninitialized_copy_n_and_update(old_finish = new_finish, n);
+ old_finish = new_finish;
+ insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, n);
new_finish += n;
- constructed_values_destroyer.increment_size(new_finish - old_finish);
+ new_values_destroyer.increment_size(new_finish - old_finish);
//Initialize from the rest of the old buffer,
//starting from previous point
if(old_buffer){
@@ -2264,8 +2364,8 @@ class vector
this->m_holder.m_size = new_finish - new_start;
this->m_holder.capacity(new_cap);
//All construction successful, disable rollbacks
- constructed_values_destroyer.release();
- scoped_alloc.release();
+ new_values_destroyer.release();
+ new_buffer_deallocator.release();
}
template <class InsertionProxy>
@@ -2276,8 +2376,8 @@ class vector
//n can be zero to just expand capacity
//Backup old data
T* const old_start = container_detail::to_raw_pointer(this->m_holder.start());
- T* const old_finish = old_start + this->m_holder.m_size;
const size_type old_size = this->m_holder.m_size;
+ T* const old_finish = old_start + old_size;
//We can have 8 possibilities:
const size_type elemsbefore = static_cast<size_type>(pos - old_start);
@@ -2291,17 +2391,18 @@ class vector
//If anything goes wrong, this object will destroy
//all the old objects to fulfill previous vector state
- typename value_traits::OldArrayDestructor old_values_destroyer(old_start, this->m_holder.alloc(), old_size);
+ typename value_traits::ArrayDestructor old_values_destroyer(old_start, this->m_holder.alloc(), old_size);
//Check if s_before is big enough to hold the beginning of old data + new data
if(s_before >= before_plus_new){
//Copy first old values before pos, after that the new objects
- T *const new_elem_pos = ::boost::container::uninitialized_move_alloc(this->m_holder.alloc(), old_start, pos, new_start);
+ T *const new_elem_pos =
+ ::boost::container::uninitialized_move_alloc(this->m_holder.alloc(), old_start, pos, new_start);
this->m_holder.m_size = elemsbefore;
- insert_range_proxy.uninitialized_copy_n_and_update(new_elem_pos, n);
- this->m_holder.m_size += n;
+ insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), new_elem_pos, n);
+ this->m_holder.m_size = before_plus_new;
+ const size_type new_size = old_size + n;
//Check if s_before is so big that even copying the old data + new data
//there is a gap between the new data and the old data
- const size_type new_size = old_size + n;
if(s_before >= new_size){
//Old situation:
// _________________________________________________________
@@ -2314,10 +2415,12 @@ class vector
//|___________|__________|_________|________________________|
//
//Now initialize the rest of memory with the last old values
- ::boost::container::uninitialized_move_alloc
- (this->m_holder.alloc(), pos, old_finish, new_start + before_plus_new);
- //All new elements correctly constructed, avoid new element destruction
- this->m_holder.m_size = new_size;
+ if(before_plus_new != new_size){ //Special case to avoid operations in back insertion
+ ::boost::container::uninitialized_move_alloc
+ (this->m_holder.alloc(), pos, old_finish, new_start + before_plus_new);
+ //All new elements correctly constructed, avoid new element destruction
+ this->m_holder.m_size = new_size;
+ }
//Old values destroyed automatically with "old_values_destroyer"
//when "old_values_destroyer" goes out of scope unless the have trivial
//destructor after move.
@@ -2339,22 +2442,28 @@ class vector
//Now initialize the rest of memory with the last old values
//All new elements correctly constructed, avoid new element destruction
const size_type raw_gap = s_before - before_plus_new;
- //Now initialize the rest of s_before memory with the
- //first of elements after new values
- ::boost::container::uninitialized_move_alloc_n
- (this->m_holder.alloc(), pos, raw_gap, new_start + before_plus_new);
- //Update size since we have a contiguous buffer
- this->m_holder.m_size = old_size + s_before;
- //All new elements correctly constructed, avoid old element destruction
- old_values_destroyer.release();
- //Now copy remaining last objects in the old buffer begin
- T * const to_destroy = ::boost::move(pos + raw_gap, old_finish, old_start);
- //Now destroy redundant elements except if they were moved and
- //they have trivial destructor after move
- size_type n_destroy = old_finish - to_destroy;
- if(!value_traits::trivial_dctr_after_move)
- boost::container::destroy_alloc_n(this->get_stored_allocator(), to_destroy, n_destroy);
- this->m_holder.m_size -= n_destroy;
+ if(!value_traits::trivial_dctr){
+ //Now initialize the rest of s_before memory with the
+ //first of elements after new values
+ ::boost::container::uninitialized_move_alloc_n
+ (this->m_holder.alloc(), pos, raw_gap, new_start + before_plus_new);
+ //Now we have a contiguous buffer so program trailing element destruction
+ //and update size to the final size.
+ old_values_destroyer.shrink_forward(elemsbefore + raw_gap);
+ this->m_holder.m_size = new_size;
+ //Now move remaining last objects in the old buffer begin
+ ::boost::move(pos + raw_gap, old_finish, old_start);
+ //Once moved, avoid calling the destructors if trivial after move
+ if(value_traits::trivial_dctr_after_move){
+ old_values_destroyer.release();
+ }
+ }
+ else{ //If trivial destructor, we can uninitialized copy + copy in a single uninitialized copy
+ ::boost::container::uninitialized_move_alloc_n
+ (this->m_holder.alloc(), pos, old_finish - pos, new_start + before_plus_new);
+ this->m_holder.m_size = new_size;
+ old_values_destroyer.release();
+ }
}
}
else{
@@ -2408,27 +2517,30 @@ class vector
//Copy the first part of old_begin to raw_mem
::boost::container::uninitialized_move_alloc_n
(this->m_holder.alloc(), old_start, s_before, new_start);
- //The buffer is all constructed until old_end,
- //release destroyer and update size
- old_values_destroyer.release();
- this->m_holder.m_size = old_size + s_before;
- //Now copy the second part of old_begin overwriting itself
- T *const next = ::boost::move(old_start + s_before, pos, old_start);
+ //The buffer is all constructed until old_end
if(do_after){
+ //release destroyer and update size
+ old_values_destroyer.release();
+ this->m_holder.m_size = old_size + s_before;
+ //Now copy the second part of old_begin overwriting itself
+ T *const next = ::boost::move(old_start + s_before, pos, old_start);
//Now copy the new_beg elements
- insert_range_proxy.copy_n_and_update(next, s_before);
+ insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), next, s_before);
}
else{
+ //The buffer is all constructed until old_end,
+ //so program trailing destruction and assign final size
+ this->m_holder.m_size = old_size + n;
+ const size_type n_destroy = s_before - n;
+ old_values_destroyer.shrink_forward(old_size - n_destroy);
+ //Now copy the second part of old_begin overwriting itself
+ T *const next = ::boost::move(old_start + s_before, pos, old_start);
//Now copy the all the new elements
- insert_range_proxy.copy_n_and_update(next, n);
+ insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), next, n);
//Now displace old_end elements
- T* const move_end = ::boost::move(pos, old_finish, next + n);
- //Destroy remaining moved elements from old_end except if
- //they have trivial destructor after being moved
- const size_type n_destroy = s_before - n;
- if(!value_traits::trivial_dctr_after_move)
- boost::container::destroy_alloc_n(this->get_stored_allocator(), move_end, n_destroy);
- this->m_holder.m_size -= n_destroy;
+ ::boost::move(pos, old_finish, next + n);
+ if(value_traits::trivial_dctr_after_move)
+ old_values_destroyer.release();
}
}
else {
@@ -2462,7 +2574,7 @@ class vector
(this->m_holder.alloc(), old_start, pos, new_start);
this->m_holder.m_size = elemsbefore;
const size_type mid_n = s_before - elemsbefore;
- insert_range_proxy.uninitialized_copy_n_and_update(new_pos, mid_n);
+ insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), new_pos, mid_n);
//The buffer is all constructed until old_end,
//release destroyer
this->m_holder.m_size = old_size + s_before;
@@ -2470,15 +2582,15 @@ class vector
if(do_after){
//Copy new_beg part
- insert_range_proxy.copy_n_and_update(old_start, elemsbefore);
+ insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), old_start, elemsbefore);
}
else{
//Copy all new elements
const size_type rest_new = n - mid_n;
- insert_range_proxy.copy_n_and_update(old_start, rest_new);
- T* move_start = old_start + rest_new;
+ insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), old_start, rest_new);
+ T* const move_start = old_start + rest_new;
//Displace old_end
- T* move_end = ::boost::move(pos, old_finish, move_start);
+ T* const move_end = ::boost::move(pos, old_finish, move_start);
//Destroy remaining moved elements from old_end except if they
//have trivial destructor after being moved
size_type n_destroy = s_before - n;
@@ -2533,7 +2645,7 @@ class vector
boost::move_backward(pos, finish_n, old_finish);
//Now overwrite with new_end
//The new_end part is [first + (n - n_after), last)
- insert_range_proxy.copy_n_and_update(pos, n_after);
+ insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), pos, n_after);
}
else {
//The raw_mem from end will divide new_end part
@@ -2558,9 +2670,9 @@ class vector
BOOST_TRY{
//Copy the first part to the already constructed old_end zone
- insert_range_proxy.copy_n_and_update(pos, elemsafter);
+ insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), pos, elemsafter);
//Copy the rest to the uninitialized zone filling the gap
- insert_range_proxy.uninitialized_copy_n_and_update(old_finish, mid_last_dist);
+ insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, mid_last_dist);
this->m_holder.m_size += n_after;
}
BOOST_CATCH(...){
@@ -2602,39 +2714,12 @@ class vector
void reset_alloc_stats()
{ num_expand_fwd = num_expand_bwd = num_alloc = 0, num_shrink = 0; }
#endif
- /// @endcond
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
};
-template <class T, class Allocator>
-inline bool
-operator==(const vector<T, Allocator>& x, const vector<T, Allocator>& y)
-{
- //Check first size and each element if needed
- return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin());
-}
-
-template <class T, class Allocator>
-inline bool
-operator!=(const vector<T, Allocator>& x, const vector<T, Allocator>& y)
-{
- //Check first size and each element if needed
- return x.size() != y.size() || !std::equal(x.begin(), x.end(), y.begin());
-}
-
-template <class T, class Allocator>
-inline bool
-operator<(const vector<T, Allocator>& x, const vector<T, Allocator>& y)
-{
- return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-template <class T, class Allocator>
-inline void swap(vector<T, Allocator>& x, vector<T, Allocator>& y)
-{ x.swap(y); }
-
}}
-/// @cond
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace boost {
@@ -2663,9 +2748,8 @@ inline void swap(boost::container::vector<T, Allocator>& x, boost::container::ve
#endif
-/// @endcond
+#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#include <boost/container/detail/config_end.hpp>
#endif // #ifndef BOOST_CONTAINER_CONTAINER_VECTOR_HPP
-
diff --git a/3party/boost/boost/context/detail/config.hpp b/3party/boost/boost/context/detail/config.hpp
index 0d7b7fce6b..c30c8f8b84 100644
--- a/3party/boost/boost/context/detail/config.hpp
+++ b/3party/boost/boost/context/detail/config.hpp
@@ -14,16 +14,12 @@
# undef BOOST_CONTEXT_DECL
#endif
-#if defined(BOOST_HAS_DECLSPEC)
-# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CONTEXT_DYN_LINK)
-# if ! defined(BOOST_DYN_LINK)
-# define BOOST_DYN_LINK
-# endif
-# if defined(BOOST_CONTEXT_SOURCE)
-# define BOOST_CONTEXT_DECL BOOST_SYMBOL_EXPORT
-# else
-# define BOOST_CONTEXT_DECL BOOST_SYMBOL_IMPORT
-# endif
+#if (defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CONTEXT_DYN_LINK) ) && ! defined(BOOST_CONTEXT_STATIC_LINK)
+# if defined(BOOST_CONTEXT_SOURCE)
+# define BOOST_CONTEXT_DECL BOOST_SYMBOL_EXPORT
+# define BOOST_CONTEXT_BUILD_DLL
+# else
+# define BOOST_CONTEXT_DECL BOOST_SYMBOL_IMPORT
# endif
#endif
@@ -39,4 +35,15 @@
# include <boost/config/auto_link.hpp>
#endif
+#undef BOOST_CONTEXT_CALLDECL
+#if (defined(i386) || defined(__i386__) || defined(__i386) \
+ || defined(__i486__) || defined(__i586__) || defined(__i686__) \
+ || defined(__X86__) || defined(_X86_) || defined(__THW_INTEL__) \
+ || defined(__I86__) || defined(__INTEL__) || defined(__IA32__) \
+ || defined(_M_IX86) || defined(_I86_)) && defined(BOOST_WINDOWS)
+# define BOOST_CONTEXT_CALLDECL __cdecl
+#else
+# define BOOST_CONTEXT_CALLDECL
+#endif
+
#endif // BOOST_CONTEXT_DETAIL_CONFIG_H
diff --git a/3party/boost/boost/context/detail/fcontext_arm_mac.hpp b/3party/boost/boost/context/detail/fcontext_arm_mac.hpp
new file mode 100644
index 0000000000..a8416efd0c
--- /dev/null
+++ b/3party/boost/boost/context/detail/fcontext_arm_mac.hpp
@@ -0,0 +1,70 @@
+
+// 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_DETAIL_FCONTEXT_ARM_MAC_H
+#define BOOST_CONTEXT_DETAIL_FCONTEXT_ARM_MAC_H
+
+#include <cstddef>
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/context/detail/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace context {
+
+extern "C" {
+
+#define BOOST_CONTEXT_CALLDECL
+
+struct stack_t
+{
+ void * sp;
+ std::size_t size;
+
+ stack_t() :
+ sp( 0), size( 0)
+ {}
+};
+
+struct fp_t
+{
+ boost::uint32_t fc_freg[16];
+
+ fp_t() :
+ fc_freg()
+ {}
+};
+
+struct fcontext_t
+{
+ boost::uint32_t fc_greg[11];
+ stack_t fc_stack;
+ fp_t fc_fp;
+ void * fc_unwind_sjlj;
+
+ fcontext_t() :
+ fc_greg(),
+ fc_stack(),
+ fc_fp(),
+ fc_unwind_sjlj( 0)
+ {}
+};
+
+}
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_CONTEXT_DETAIL_FCONTEXT_ARM_MAC_H
diff --git a/3party/boost/boost/context/detail/fcontext_arm_win.hpp b/3party/boost/boost/context/detail/fcontext_arm_win.hpp
new file mode 100644
index 0000000000..5449ae763f
--- /dev/null
+++ b/3party/boost/boost/context/detail/fcontext_arm_win.hpp
@@ -0,0 +1,71 @@
+
+// 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_DETAIL_FCONTEXT_ARM_WIN_H
+#define BOOST_CONTEXT_DETAIL_FCONTEXT_ARM_WIN_H
+
+#include <cstddef>
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/context/detail/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace context {
+
+extern "C" {
+
+#define BOOST_CONTEXT_CALLDECL
+
+struct stack_t
+{
+ void * sp;
+ std::size_t size;
+ void * limit;
+
+ stack_t() :
+ sp( 0), size( 0), limit( 0)
+ {}
+};
+
+struct fp_t
+{
+ boost::uint32_t fc_freg[16];
+
+ fp_t() :
+ fc_freg()
+ {}
+};
+
+struct fcontext_t
+{
+ boost::uint32_t fc_greg[11];
+ stack_t fc_stack;
+ fp_t fc_fp;
+ boost::uint32_t fc_dealloc;
+
+ fcontext_t() :
+ fc_greg(),
+ fc_stack(),
+ fc_fp(),
+ fc_dealloc( 0)
+ {}
+};
+
+}
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_CONTEXT_DETAIL_FCONTEXT_ARM_WIN_H
diff --git a/3party/boost/boost/context/fcontext.hpp b/3party/boost/boost/context/fcontext.hpp
index c7e809e4d9..d054df290c 100644
--- a/3party/boost/boost/context/fcontext.hpp
+++ b/3party/boost/boost/context/fcontext.hpp
@@ -24,55 +24,16 @@ typedef int intptr_t;
# include BOOST_ABI_PREFIX
#endif
-// x86_64
-// test x86_64 before i386 because icc might
-// define __i686__ for x86_64 too
-#if defined(__x86_64__) || defined(__x86_64) \
- || defined(__amd64__) || defined(__amd64) \
- || defined(_M_X64) || defined(_M_AMD64)
-# if defined(BOOST_WINDOWS)
-# include <boost/context/detail/fcontext_x86_64_win.hpp>
-# else
-# include <boost/context/detail/fcontext_x86_64.hpp>
-# endif
-// i386
-#elif defined(i386) || defined(__i386__) || defined(__i386) \
- || defined(__i486__) || defined(__i586__) || defined(__i686__) \
- || defined(__X86__) || defined(_X86_) || defined(__THW_INTEL__) \
- || defined(__I86__) || defined(__INTEL__) || defined(__IA32__) \
- || defined(_M_IX86) || defined(_I86_)
-# if defined(BOOST_WINDOWS)
-# include <boost/context/detail/fcontext_i386_win.hpp>
-# else
-# include <boost/context/detail/fcontext_i386.hpp>
-# endif
-// arm
-#elif defined(__arm__) || defined(__thumb__) || defined(__TARGET_ARCH_ARM) \
- || defined(__TARGET_ARCH_THUMB) || defined(_ARM) || defined(_M_ARM)
-# include <boost/context/detail/fcontext_arm.hpp>
-// mips
-#elif (defined(__mips) && __mips == 1) || defined(_MIPS_ISA_MIPS1) \
- || defined(_R3000)
-# include <boost/context/detail/fcontext_mips.hpp>
-// powerpc
-#elif defined(__powerpc) || defined(__powerpc__) || defined(__ppc) \
- || defined(__ppc__) || defined(_ARCH_PPC) || defined(__POWERPC__) \
- || defined(__PPCGECKO__) || defined(__PPCBROADWAY) || defined(_XENON)
-# include <boost/context/detail/fcontext_ppc.hpp>
-#elif defined(__sparc__) || defined(__sparc)
-// sparc or sparc64
-# include <boost/context/detail/fcontext_sparc.hpp>
-#else
-# error "platform not supported"
-#endif
-
namespace boost {
namespace context {
+typedef void* fcontext_t;
+
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);
+intptr_t BOOST_CONTEXT_CALLDECL jump_fcontext( fcontext_t * ofc, fcontext_t nfc,
+ intptr_t vp, bool preserve_fpu = true);
extern "C" BOOST_CONTEXT_DECL
-fcontext_t * BOOST_CONTEXT_CALLDECL make_fcontext( void * sp, std::size_t size, void (* fn)( intptr_t) );
+fcontext_t BOOST_CONTEXT_CALLDECL make_fcontext( void * sp, std::size_t size, void (* fn)( intptr_t) );
}}
diff --git a/3party/boost/boost/core/addressof.hpp b/3party/boost/boost/core/addressof.hpp
new file mode 100644
index 0000000000..a90fcc3e24
--- /dev/null
+++ b/3party/boost/boost/core/addressof.hpp
@@ -0,0 +1,162 @@
+// Copyright (C) 2002 Brad King (brad.king@kitware.com)
+// Douglas Gregor (gregod@cs.rpi.edu)
+//
+// Copyright (C) 2002, 2008, 2013 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_CORE_ADDRESSOF_HPP
+#define BOOST_CORE_ADDRESSOF_HPP
+
+# include <boost/config.hpp>
+# include <boost/detail/workaround.hpp>
+# include <cstddef>
+
+namespace boost
+{
+
+namespace detail
+{
+
+template<class T> struct addr_impl_ref
+{
+ T & v_;
+
+ BOOST_FORCEINLINE addr_impl_ref( T & v ): v_( v ) {}
+ BOOST_FORCEINLINE operator T& () const { return v_; }
+
+private:
+ addr_impl_ref & operator=(const addr_impl_ref &);
+};
+
+template<class T> struct addressof_impl
+{
+ static BOOST_FORCEINLINE T * f( T & v, long )
+ {
+ return reinterpret_cast<T*>(
+ &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
+ }
+
+ static BOOST_FORCEINLINE T * f( T * v, int )
+ {
+ return v;
+ }
+};
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+#if defined( __clang__ ) && !defined( _LIBCPP_VERSION ) && !defined( BOOST_NO_CXX11_DECLTYPE )
+
+ typedef decltype(nullptr) addr_nullptr_t;
+
+#else
+
+ typedef std::nullptr_t addr_nullptr_t;
+
+#endif
+
+template<> struct addressof_impl< addr_nullptr_t >
+{
+ typedef addr_nullptr_t T;
+
+ static BOOST_FORCEINLINE T * f( T & v, int )
+ {
+ return &v;
+ }
+};
+
+template<> struct addressof_impl< addr_nullptr_t const >
+{
+ typedef addr_nullptr_t const T;
+
+ static BOOST_FORCEINLINE T * f( T & v, int )
+ {
+ return &v;
+ }
+};
+
+template<> struct addressof_impl< addr_nullptr_t volatile >
+{
+ typedef addr_nullptr_t volatile T;
+
+ static BOOST_FORCEINLINE T * f( T & v, int )
+ {
+ return &v;
+ }
+};
+
+template<> struct addressof_impl< addr_nullptr_t const volatile >
+{
+ typedef addr_nullptr_t const volatile T;
+
+ static BOOST_FORCEINLINE T * f( T & v, int )
+ {
+ return &v;
+ }
+};
+
+#endif
+
+} // namespace detail
+
+template<class T>
+BOOST_FORCEINLINE
+T * addressof( T & v )
+{
+#if (defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x610 ) ) ) || defined( __SUNPRO_CC )
+
+ return boost::detail::addressof_impl<T>::f( v, 0 );
+
+#else
+
+ return boost::detail::addressof_impl<T>::f( boost::detail::addr_impl_ref<T>( v ), 0 );
+
+#endif
+}
+
+#if defined( __SUNPRO_CC ) && BOOST_WORKAROUND( __SUNPRO_CC, BOOST_TESTED_AT( 0x590 ) )
+
+namespace detail
+{
+
+template<class T> struct addressof_addp
+{
+ typedef T * type;
+};
+
+} // namespace detail
+
+template< class T, std::size_t N >
+BOOST_FORCEINLINE
+typename detail::addressof_addp< T[N] >::type addressof( T (&t)[N] )
+{
+ return &t;
+}
+
+#endif
+
+// Borland doesn't like casting an array reference to a char reference
+// but these overloads work around the problem.
+#if defined( __BORLANDC__ ) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template<typename T,std::size_t N>
+BOOST_FORCEINLINE
+T (*addressof(T (&t)[N]))[N]
+{
+ return reinterpret_cast<T(*)[N]>(&t);
+}
+
+template<typename T,std::size_t N>
+BOOST_FORCEINLINE
+const T (*addressof(const T (&t)[N]))[N]
+{
+ return reinterpret_cast<const T(*)[N]>(&t);
+}
+#endif
+
+} // namespace boost
+
+#endif // BOOST_CORE_ADDRESSOF_HPP
diff --git a/3party/boost/boost/core/checked_delete.hpp b/3party/boost/boost/core/checked_delete.hpp
new file mode 100644
index 0000000000..b086e03e88
--- /dev/null
+++ b/3party/boost/boost/core/checked_delete.hpp
@@ -0,0 +1,69 @@
+#ifndef BOOST_CORE_CHECKED_DELETE_HPP
+#define BOOST_CORE_CHECKED_DELETE_HPP
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/checked_delete.hpp
+//
+// Copyright (c) 2002, 2003 Peter Dimov
+// Copyright (c) 2003 Daniel Frey
+// Copyright (c) 2003 Howard Hinnant
+//
+// 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/core/doc/html/core/checked_delete.html for documentation.
+//
+
+namespace boost
+{
+
+// verify that types are complete for increased safety
+
+template<class T> inline void checked_delete(T * x)
+{
+ // intentionally complex - simplification causes regressions
+ typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
+ (void) sizeof(type_must_be_complete);
+ delete x;
+}
+
+template<class T> inline void checked_array_delete(T * x)
+{
+ typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
+ (void) sizeof(type_must_be_complete);
+ delete [] x;
+}
+
+template<class T> struct checked_deleter
+{
+ typedef void result_type;
+ typedef T * argument_type;
+
+ void operator()(T * x) const
+ {
+ // boost:: disables ADL
+ boost::checked_delete(x);
+ }
+};
+
+template<class T> struct checked_array_deleter
+{
+ typedef void result_type;
+ typedef T * argument_type;
+
+ void operator()(T * x) const
+ {
+ boost::checked_array_delete(x);
+ }
+};
+
+} // namespace boost
+
+#endif // #ifndef BOOST_CORE_CHECKED_DELETE_HPP
diff --git a/3party/boost/boost/core/demangle.hpp b/3party/boost/boost/core/demangle.hpp
new file mode 100644
index 0000000000..eebd0ce0f1
--- /dev/null
+++ b/3party/boost/boost/core/demangle.hpp
@@ -0,0 +1,121 @@
+#ifndef BOOST_CORE_DEMANGLE_HPP_INCLUDED
+#define BOOST_CORE_DEMANGLE_HPP_INCLUDED
+
+// core::demangle
+//
+// Copyright 2014 Peter Dimov
+// Copyright 2014 Andrey Semashev
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/config.hpp>
+#include <string>
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#if defined( __clang__ ) && defined( __has_include )
+# if __has_include(<cxxabi.h>)
+# define BOOST_CORE_HAS_CXXABI_H
+# endif
+#elif defined( __GLIBCXX__ ) || defined( __GLIBCPP__ )
+# define BOOST_CORE_HAS_CXXABI_H
+#endif
+
+#if defined( BOOST_CORE_HAS_CXXABI_H )
+# include <cxxabi.h>
+# include <cstdlib>
+# include <cstddef>
+#endif
+
+namespace boost
+{
+
+namespace core
+{
+
+inline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT;
+inline void demangle_free( char const * name ) BOOST_NOEXCEPT;
+
+class scoped_demangled_name
+{
+private:
+ char const * m_p;
+
+public:
+ explicit scoped_demangled_name( char const * name ) BOOST_NOEXCEPT :
+ m_p( demangle_alloc( name ) )
+ {
+ }
+
+ ~scoped_demangled_name() BOOST_NOEXCEPT
+ {
+ demangle_free( m_p );
+ }
+
+ char const * get() const BOOST_NOEXCEPT
+ {
+ return m_p;
+ }
+
+ BOOST_DELETED_FUNCTION(scoped_demangled_name( scoped_demangled_name const& ))
+ BOOST_DELETED_FUNCTION(scoped_demangled_name& operator= ( scoped_demangled_name const& ))
+};
+
+
+#if defined( BOOST_CORE_HAS_CXXABI_H )
+
+inline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT
+{
+ int status = 0;
+ std::size_t size = 0;
+ return abi::__cxa_demangle( name, NULL, &size, &status );
+}
+
+inline void demangle_free( char const * name ) BOOST_NOEXCEPT
+{
+ std::free( const_cast< char* >( name ) );
+}
+
+inline std::string demangle( char const * name )
+{
+ scoped_demangled_name demangled_name( name );
+ char const * const p = demangled_name.get();
+ if( p )
+ {
+ return p;
+ }
+ else
+ {
+ return name;
+ }
+}
+
+#else
+
+inline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT
+{
+ return name;
+}
+
+inline void demangle_free( char const * ) BOOST_NOEXCEPT
+{
+}
+
+inline std::string demangle( char const * name )
+{
+ return name;
+}
+
+#endif
+
+} // namespace core
+
+} // namespace boost
+
+#undef BOOST_CORE_HAS_CXXABI_H
+
+#endif // #ifndef BOOST_CORE_DEMANGLE_HPP_INCLUDED
diff --git a/3party/boost/boost/core/enable_if.hpp b/3party/boost/boost/core/enable_if.hpp
new file mode 100644
index 0000000000..a3302b18a1
--- /dev/null
+++ b/3party/boost/boost/core/enable_if.hpp
@@ -0,0 +1,119 @@
+// Boost enable_if library
+
+// Copyright 2003 (c) The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
+// Jeremiah Willcock (jewillco at osl.iu.edu)
+// Andrew Lumsdaine (lums at osl.iu.edu)
+
+
+#ifndef BOOST_CORE_ENABLE_IF_HPP
+#define BOOST_CORE_ENABLE_IF_HPP
+
+#include "boost/config.hpp"
+
+// Even the definition of enable_if causes problems on some compilers,
+// so it's macroed out for all compilers that do not support SFINAE
+
+#ifndef BOOST_NO_SFINAE
+
+namespace boost
+{
+
+ template <bool B, class T = void>
+ struct enable_if_c {
+ typedef T type;
+ };
+
+ template <class T>
+ struct enable_if_c<false, T> {};
+
+ template <class Cond, class T = void>
+ struct enable_if : public enable_if_c<Cond::value, T> {};
+
+ template <bool B, class T>
+ struct lazy_enable_if_c {
+ typedef typename T::type type;
+ };
+
+ template <class T>
+ struct lazy_enable_if_c<false, T> {};
+
+ template <class Cond, class T>
+ struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};
+
+
+ template <bool B, class T = void>
+ struct disable_if_c {
+ typedef T type;
+ };
+
+ template <class T>
+ struct disable_if_c<true, T> {};
+
+ template <class Cond, class T = void>
+ struct disable_if : public disable_if_c<Cond::value, T> {};
+
+ template <bool B, class T>
+ struct lazy_disable_if_c {
+ typedef typename T::type type;
+ };
+
+ template <class T>
+ struct lazy_disable_if_c<true, T> {};
+
+ template <class Cond, class T>
+ struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};
+
+} // namespace boost
+
+#else
+
+namespace boost {
+
+ namespace detail { typedef void enable_if_default_T; }
+
+ template <typename T>
+ struct enable_if_does_not_work_on_this_compiler;
+
+ template <bool B, class T = detail::enable_if_default_T>
+ struct enable_if_c : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <bool B, class T = detail::enable_if_default_T>
+ struct disable_if_c : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <bool B, class T = detail::enable_if_default_T>
+ struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <bool B, class T = detail::enable_if_default_T>
+ struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <class Cond, class T = detail::enable_if_default_T>
+ struct enable_if : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <class Cond, class T = detail::enable_if_default_T>
+ struct disable_if : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <class Cond, class T = detail::enable_if_default_T>
+ struct lazy_enable_if : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <class Cond, class T = detail::enable_if_default_T>
+ struct lazy_disable_if : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+} // namespace boost
+
+#endif // BOOST_NO_SFINAE
+
+#endif
diff --git a/3party/boost/boost/core/explicit_operator_bool.hpp b/3party/boost/boost/core/explicit_operator_bool.hpp
new file mode 100644
index 0000000000..a8936e2cd6
--- /dev/null
+++ b/3party/boost/boost/core/explicit_operator_bool.hpp
@@ -0,0 +1,154 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+/*!
+ * \file explicit_operator_bool.hpp
+ * \author Andrey Semashev
+ * \date 08.03.2009
+ *
+ * This header defines a compatibility macro that implements an unspecified
+ * \c bool operator idiom, which is superseded with explicit conversion operators in
+ * C++11.
+ */
+
+#ifndef BOOST_CORE_EXPLICIT_OPERATOR_BOOL_HPP
+#define BOOST_CORE_EXPLICIT_OPERATOR_BOOL_HPP
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
+
+/*!
+ * \brief The macro defines an explicit operator of conversion to \c bool
+ *
+ * The macro should be used inside the definition of a class that has to
+ * support the conversion. The class should also implement <tt>operator!</tt>,
+ * in terms of which the conversion operator will be implemented.
+ */
+#define BOOST_EXPLICIT_OPERATOR_BOOL()\
+ BOOST_FORCEINLINE explicit operator bool () const\
+ {\
+ return !this->operator! ();\
+ }
+
+/*!
+ * \brief The macro defines a noexcept explicit operator of conversion to \c bool
+ *
+ * The macro should be used inside the definition of a class that has to
+ * support the conversion. The class should also implement <tt>operator!</tt>,
+ * in terms of which the conversion operator will be implemented.
+ */
+#define BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()\
+ BOOST_FORCEINLINE explicit operator bool () const BOOST_NOEXCEPT\
+ {\
+ return !this->operator! ();\
+ }
+
+/*!
+ * \brief The macro defines a constexpr explicit operator of conversion to \c bool
+ *
+ * The macro should be used inside the definition of a class that has to
+ * support the conversion. The class should also implement <tt>operator!</tt>,
+ * in terms of which the conversion operator will be implemented.
+ */
+#define BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()\
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit operator bool () const BOOST_NOEXCEPT\
+ {\
+ return !this->operator! ();\
+ }
+
+#else // !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
+
+#if (defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) && !defined(BOOST_NO_COMPILER_CONFIG)
+// Sun C++ 5.3 can't handle the safe_bool idiom, so don't use it
+#define BOOST_NO_UNSPECIFIED_BOOL
+#endif // (defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) && !defined(BOOST_NO_COMPILER_CONFIG)
+
+#if !defined(BOOST_NO_UNSPECIFIED_BOOL)
+
+namespace boost {
+
+namespace detail {
+
+#if !defined(_MSC_VER) && !defined(__IBMCPP__)
+
+ struct unspecified_bool
+ {
+ // NOTE TO THE USER: If you see this in error messages then you tried
+ // to apply an unsupported operator on the object that supports
+ // explicit conversion to bool.
+ struct OPERATORS_NOT_ALLOWED;
+ static void true_value(OPERATORS_NOT_ALLOWED*) {}
+ };
+ typedef void (*unspecified_bool_type)(unspecified_bool::OPERATORS_NOT_ALLOWED*);
+
+#else
+
+ // MSVC and VACPP are too eager to convert pointer to function to void* even though they shouldn't
+ struct unspecified_bool
+ {
+ // NOTE TO THE USER: If you see this in error messages then you tried
+ // to apply an unsupported operator on the object that supports
+ // explicit conversion to bool.
+ struct OPERATORS_NOT_ALLOWED;
+ void true_value(OPERATORS_NOT_ALLOWED*) {}
+ };
+ typedef void (unspecified_bool::*unspecified_bool_type)(unspecified_bool::OPERATORS_NOT_ALLOWED*);
+
+#endif
+
+} // namespace detail
+
+} // namespace boost
+
+#define BOOST_EXPLICIT_OPERATOR_BOOL()\
+ BOOST_FORCEINLINE operator boost::detail::unspecified_bool_type () const\
+ {\
+ return (!this->operator! () ? &boost::detail::unspecified_bool::true_value : (boost::detail::unspecified_bool_type)0);\
+ }
+
+#define BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()\
+ BOOST_FORCEINLINE operator boost::detail::unspecified_bool_type () const BOOST_NOEXCEPT\
+ {\
+ return (!this->operator! () ? &boost::detail::unspecified_bool::true_value : (boost::detail::unspecified_bool_type)0);\
+ }
+
+#define BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()\
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator boost::detail::unspecified_bool_type () const BOOST_NOEXCEPT\
+ {\
+ return (!this->operator! () ? &boost::detail::unspecified_bool::true_value : (boost::detail::unspecified_bool_type)0);\
+ }
+
+#else // !defined(BOOST_NO_UNSPECIFIED_BOOL)
+
+#define BOOST_EXPLICIT_OPERATOR_BOOL()\
+ BOOST_FORCEINLINE operator bool () const\
+ {\
+ return !this->operator! ();\
+ }
+
+#define BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()\
+ BOOST_FORCEINLINE operator bool () const BOOST_NOEXCEPT\
+ {\
+ return !this->operator! ();\
+ }
+
+#define BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()\
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator bool () const BOOST_NOEXCEPT\
+ {\
+ return !this->operator! ();\
+ }
+
+#endif // !defined(BOOST_NO_UNSPECIFIED_BOOL)
+
+#endif // !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
+
+#endif // BOOST_CORE_EXPLICIT_OPERATOR_BOOL_HPP
diff --git a/3party/boost/boost/core/ignore_unused.hpp b/3party/boost/boost/core/ignore_unused.hpp
new file mode 100644
index 0000000000..22047c2e54
--- /dev/null
+++ b/3party/boost/boost/core/ignore_unused.hpp
@@ -0,0 +1,70 @@
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+//
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_CORE_IGNORE_UNUSED_HPP
+#define BOOST_CORE_IGNORE_UNUSED_HPP
+
+#include <boost/config.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+
+template <typename... Ts>
+inline void ignore_unused(Ts const& ...)
+{}
+
+template <typename... Ts>
+inline void ignore_unused()
+{}
+
+#else
+
+template <typename T1>
+inline void ignore_unused(T1 const&)
+{}
+
+template <typename T1, typename T2>
+inline void ignore_unused(T1 const&, T2 const&)
+{}
+
+template <typename T1, typename T2, typename T3>
+inline void ignore_unused(T1 const&, T2 const&, T3 const&)
+{}
+
+template <typename T1, typename T2, typename T3, typename T4>
+inline void ignore_unused(T1 const&, T2 const&, T3 const&, T4 const&)
+{}
+
+template <typename T1, typename T2, typename T3, typename T4, typename T5>
+inline void ignore_unused(T1 const&, T2 const&, T3 const&, T4 const&, T5 const&)
+{}
+
+template <typename T1>
+inline void ignore_unused()
+{}
+
+template <typename T1, typename T2>
+inline void ignore_unused()
+{}
+
+template <typename T1, typename T2, typename T3>
+inline void ignore_unused()
+{}
+
+template <typename T1, typename T2, typename T3, typename T4>
+inline void ignore_unused()
+{}
+
+template <typename T1, typename T2, typename T3, typename T4, typename T5>
+inline void ignore_unused()
+{}
+
+#endif
+
+} // namespace boost
+
+#endif // BOOST_CORE_IGNORE_UNUSED_HPP
diff --git a/3party/boost/boost/core/is_same.hpp b/3party/boost/boost/core/is_same.hpp
new file mode 100644
index 0000000000..f373c654d5
--- /dev/null
+++ b/3party/boost/boost/core/is_same.hpp
@@ -0,0 +1,40 @@
+#ifndef BOOST_CORE_IS_SAME_HPP_INCLUDED
+#define BOOST_CORE_IS_SAME_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// is_same<T1,T2>::value is true when T1 == T2
+//
+// Copyright 2014 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/config.hpp>
+
+namespace boost
+{
+
+namespace core
+{
+
+template< class T1, class T2 > struct is_same
+{
+ BOOST_STATIC_CONSTANT( bool, value = false );
+};
+
+template< class T > struct is_same< T, T >
+{
+ BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+} // namespace core
+
+} // namespace boost
+
+#endif // #ifndef BOOST_CORE_IS_SAME_HPP_INCLUDED
diff --git a/3party/boost/boost/core/lightweight_test.hpp b/3party/boost/boost/core/lightweight_test.hpp
new file mode 100644
index 0000000000..f5943b3db2
--- /dev/null
+++ b/3party/boost/boost/core/lightweight_test.hpp
@@ -0,0 +1,171 @@
+#ifndef BOOST_CORE_LIGHTWEIGHT_TEST_HPP
+#define BOOST_CORE_LIGHTWEIGHT_TEST_HPP
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+//
+// boost/core/lightweight_test.hpp - lightweight test library
+//
+// Copyright (c) 2002, 2009, 2014 Peter Dimov
+// Copyright (2) Beman Dawes 2010, 2011
+// Copyright (3) Ion Gaztanaga 2013
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/assert.hpp>
+#include <boost/current_function.hpp>
+#include <boost/core/no_exceptions_support.hpp>
+#include <iostream>
+
+// IDE's like Visual Studio perform better if output goes to std::cout or
+// some other stream, so allow user to configure output stream:
+#ifndef BOOST_LIGHTWEIGHT_TEST_OSTREAM
+# define BOOST_LIGHTWEIGHT_TEST_OSTREAM std::cerr
+#endif
+
+namespace boost
+{
+
+namespace detail
+{
+
+struct report_errors_reminder
+{
+ bool called_report_errors_function;
+
+ report_errors_reminder() : called_report_errors_function(false) {}
+
+ ~report_errors_reminder()
+ {
+ BOOST_ASSERT(called_report_errors_function); // verify report_errors() was called
+ }
+};
+
+inline report_errors_reminder& report_errors_remind()
+{
+ static report_errors_reminder r;
+ return r;
+}
+
+inline int & test_errors()
+{
+ static int x = 0;
+ report_errors_remind();
+ return x;
+}
+
+inline void test_failed_impl(char const * expr, char const * file, int line, char const * function)
+{
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM
+ << file << "(" << line << "): test '" << expr << "' failed in function '"
+ << function << "'" << std::endl;
+ ++test_errors();
+}
+
+inline void error_impl(char const * msg, char const * file, int line, char const * function)
+{
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM
+ << file << "(" << line << "): " << msg << " in function '"
+ << function << "'" << std::endl;
+ ++test_errors();
+}
+
+inline void throw_failed_impl(char const * excep, char const * file, int line, char const * function)
+{
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM
+ << file << "(" << line << "): Exception '" << excep << "' not thrown in function '"
+ << function << "'" << std::endl;
+ ++test_errors();
+}
+
+template<class T, class U> inline void test_eq_impl( char const * expr1, char const * expr2,
+ char const * file, int line, char const * function, T const & t, U const & u )
+{
+ if( t == u )
+ {
+ report_errors_remind();
+ }
+ else
+ {
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM
+ << file << "(" << line << "): test '" << expr1 << " == " << expr2
+ << "' failed in function '" << function << "': "
+ << "'" << t << "' != '" << u << "'" << std::endl;
+ ++test_errors();
+ }
+}
+
+template<class T, class U> inline void test_ne_impl( char const * expr1, char const * expr2,
+ char const * file, int line, char const * function, T const & t, U const & u )
+{
+ if( t != u )
+ {
+ report_errors_remind();
+ }
+ else
+ {
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM
+ << file << "(" << line << "): test '" << expr1 << " != " << expr2
+ << "' failed in function '" << function << "': "
+ << "'" << t << "' == '" << u << "'" << std::endl;
+ ++test_errors();
+ }
+}
+
+} // namespace detail
+
+inline int report_errors()
+{
+ detail::report_errors_remind().called_report_errors_function = true;
+
+ int errors = detail::test_errors();
+
+ if( errors == 0 )
+ {
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM
+ << "No errors detected." << std::endl;
+ return 0;
+ }
+ else
+ {
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM
+ << errors << " error" << (errors == 1? "": "s") << " detected." << std::endl;
+ return 1;
+ }
+}
+
+} // namespace boost
+
+#define BOOST_TEST(expr) ((expr)? (void)0: ::boost::detail::test_failed_impl(#expr, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))
+
+#define BOOST_ERROR(msg) ( ::boost::detail::error_impl(msg, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
+
+#define BOOST_TEST_EQ(expr1,expr2) ( ::boost::detail::test_eq_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )
+#define BOOST_TEST_NE(expr1,expr2) ( ::boost::detail::test_ne_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )
+
+#ifndef BOOST_NO_EXCEPTIONS
+ #define BOOST_TEST_THROWS( EXPR, EXCEP ) \
+ try { \
+ EXPR; \
+ ::boost::detail::throw_failed_impl \
+ (#EXCEP, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); \
+ } \
+ catch(EXCEP const&) { \
+ } \
+ catch(...) { \
+ ::boost::detail::throw_failed_impl \
+ (#EXCEP, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); \
+ } \
+ //
+#else
+ #define BOOST_TEST_THROWS( EXPR, EXCEP )
+#endif
+
+#endif // #ifndef BOOST_CORE_LIGHTWEIGHT_TEST_HPP
diff --git a/3party/boost/boost/core/lightweight_test_trait.hpp b/3party/boost/boost/core/lightweight_test_trait.hpp
new file mode 100644
index 0000000000..0e2aab4435
--- /dev/null
+++ b/3party/boost/boost/core/lightweight_test_trait.hpp
@@ -0,0 +1,56 @@
+#ifndef BOOST_CORE_LIGHTWEIGHT_TEST_TRAIT_HPP
+#define BOOST_CORE_LIGHTWEIGHT_TEST_TRAIT_HPP
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+// boost/core/lightweight_test_trait.hpp
+//
+// BOOST_TEST_TRAIT_TRUE, BOOST_TEST_TRAIT_FALSE
+//
+// Copyright 2014 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/core/lightweight_test.hpp>
+#include <boost/core/typeinfo.hpp>
+
+namespace boost
+{
+
+namespace detail
+{
+
+template< class T > inline void test_trait_impl( char const * trait, void (*)( T ),
+ bool expected, char const * file, int line, char const * function )
+{
+ if( T::value == expected )
+ {
+ report_errors_remind();
+ }
+ else
+ {
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM
+ << file << "(" << line << "): predicate '" << trait << "' ["
+ << boost::core::demangled_name( BOOST_CORE_TYPEID(T) ) << "]"
+ << " test failed in function '" << function
+ << "' (should have been " << ( expected? "true": "false" ) << ")"
+ << std::endl;
+
+ ++test_errors();
+ }
+}
+
+} // namespace detail
+
+} // namespace boost
+
+#define BOOST_TEST_TRAIT_TRUE(type) ( ::boost::detail::test_trait_impl(#type, (void(*)type)0, true, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
+#define BOOST_TEST_TRAIT_FALSE(type) ( ::boost::detail::test_trait_impl(#type, (void(*)type)0, false, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
+
+#endif // #ifndef BOOST_CORE_LIGHTWEIGHT_TEST_TRAIT_HPP
diff --git a/3party/boost/boost/core/no_exceptions_support.hpp b/3party/boost/boost/core/no_exceptions_support.hpp
new file mode 100644
index 0000000000..a697f01a52
--- /dev/null
+++ b/3party/boost/boost/core/no_exceptions_support.hpp
@@ -0,0 +1,44 @@
+#ifndef BOOST_CORE_NO_EXCEPTIONS_SUPPORT_HPP
+#define BOOST_CORE_NO_EXCEPTIONS_SUPPORT_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+//----------------------------------------------------------------------
+// (C) Copyright 2004 Pavel Vozenilek.
+// 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)
+//
+//
+// This file contains helper macros used when exception support may be
+// disabled (as indicated by macro BOOST_NO_EXCEPTIONS).
+//
+// Before picking up these macros you may consider using RAII techniques
+// to deal with exceptions - their syntax can be always the same with
+// or without exception support enabled.
+//----------------------------------------------------------------------
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !(defined BOOST_NO_EXCEPTIONS)
+# define BOOST_TRY { try
+# define BOOST_CATCH(x) catch(x)
+# define BOOST_RETHROW throw;
+# define BOOST_CATCH_END }
+#else
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# define BOOST_TRY { if ("")
+# define BOOST_CATCH(x) else if (!"")
+# else
+# define BOOST_TRY { if (true)
+# define BOOST_CATCH(x) else if (false)
+# endif
+# define BOOST_RETHROW
+# define BOOST_CATCH_END }
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/core/noncopyable.hpp b/3party/boost/boost/core/noncopyable.hpp
new file mode 100644
index 0000000000..6ae8c244dd
--- /dev/null
+++ b/3party/boost/boost/core/noncopyable.hpp
@@ -0,0 +1,48 @@
+// Boost noncopyable.hpp header file --------------------------------------//
+
+// (C) Copyright Beman Dawes 1999-2003. 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/utility for documentation.
+
+#ifndef BOOST_CORE_NONCOPYABLE_HPP
+#define BOOST_CORE_NONCOPYABLE_HPP
+
+#include <boost/config.hpp>
+
+namespace boost {
+
+// Private copy constructor and copy assignment ensure classes derived from
+// class noncopyable cannot be copied.
+
+// Contributed by Dave Abrahams
+
+namespace noncopyable_ // protection from unintended ADL
+{
+ class noncopyable
+ {
+ protected:
+#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS)
+ BOOST_CONSTEXPR noncopyable() = default;
+ ~noncopyable() = default;
+#else
+ noncopyable() {}
+ ~noncopyable() {}
+#endif
+#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
+ noncopyable( const noncopyable& ) = delete;
+ noncopyable& operator=( const noncopyable& ) = delete;
+#else
+ private: // emphasize the following members are private
+ noncopyable( const noncopyable& );
+ noncopyable& operator=( const noncopyable& );
+#endif
+ };
+}
+
+typedef noncopyable_::noncopyable noncopyable;
+
+} // namespace boost
+
+#endif // BOOST_CORE_NONCOPYABLE_HPP
diff --git a/3party/boost/boost/core/null_deleter.hpp b/3party/boost/boost/core/null_deleter.hpp
new file mode 100644
index 0000000000..f0af59034e
--- /dev/null
+++ b/3party/boost/boost/core/null_deleter.hpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2014.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file null_deleter.hpp
+ * \author Andrey Semashev
+ * \date 22.04.2007
+ *
+ * This header contains a \c null_deleter implementation. This is an empty
+ * function object that receives a pointer and does nothing with it.
+ * Such empty deletion strategy may be convenient, for example, when
+ * constructing <tt>shared_ptr</tt>s that point to some object that should not be
+ * deleted (i.e. a variable on the stack or some global singleton, like <tt>std::cout</tt>).
+ */
+
+#ifndef BOOST_CORE_NULL_DELETER_HPP
+#define BOOST_CORE_NULL_DELETER_HPP
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+
+//! A function object that does nothing and can be used as an empty deleter for \c shared_ptr
+struct null_deleter
+{
+ //! Function object result type
+ typedef void result_type;
+ /*!
+ * Does nothing
+ */
+ template< typename T >
+ void operator() (T*) const BOOST_NOEXCEPT {}
+};
+
+} // namespace boost
+
+#endif // BOOST_CORE_NULL_DELETER_HPP
diff --git a/3party/boost/boost/core/ref.hpp b/3party/boost/boost/core/ref.hpp
new file mode 100644
index 0000000000..47dc858007
--- /dev/null
+++ b/3party/boost/boost/core/ref.hpp
@@ -0,0 +1,301 @@
+#ifndef BOOST_CORE_REF_HPP
+#define BOOST_CORE_REF_HPP
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/detail/workaround.hpp>
+
+//
+// ref.hpp - ref/cref, useful helper functions
+//
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2001, 2002 Peter Dimov
+// Copyright (C) 2002 David Abrahams
+//
+// Copyright (C) 2014 Glen Joseph Fernandes
+// glenfe at live dot com
+// Copyright (C) 2014 Agustin Berge
+//
+// 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/core/doc/html/core/ref.html for documentation.
+//
+
+/**
+ @file
+*/
+
+/**
+ Boost namespace.
+*/
+namespace boost
+{
+
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1600 )
+
+ struct ref_workaround_tag {};
+
+#endif
+
+// reference_wrapper
+
+/**
+ @brief Contains a reference to an object of type `T`.
+
+ `reference_wrapper` is primarily used to "feed" references to
+ function templates (algorithms) that take their parameter by
+ value. It provides an implicit conversion to `T&`, which
+ usually allows the function templates to work on references
+ unmodified.
+*/
+template<class T> class reference_wrapper
+{
+public:
+ /**
+ Type `T`.
+ */
+ typedef T type;
+
+ /**
+ Constructs a `reference_wrapper` object that stores a
+ reference to `t`.
+
+ @remark Does not throw.
+ */
+ BOOST_FORCEINLINE explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}
+
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1600 )
+
+ BOOST_FORCEINLINE explicit reference_wrapper( T & t, ref_workaround_tag ): t_( boost::addressof( t ) ) {}
+
+#endif
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ /**
+ @remark Construction from a temporary object is disabled.
+ */
+ BOOST_DELETED_FUNCTION(reference_wrapper(T&& t))
+public:
+#endif
+
+ /**
+ @return The stored reference.
+ @remark Does not throw.
+ */
+ BOOST_FORCEINLINE operator T& () const { return *t_; }
+
+ /**
+ @return The stored reference.
+ @remark Does not throw.
+ */
+ BOOST_FORCEINLINE T& get() const { return *t_; }
+
+ /**
+ @return A pointer to the object referenced by the stored
+ reference.
+ @remark Does not throw.
+ */
+ BOOST_FORCEINLINE T* get_pointer() const { return t_; }
+
+private:
+
+ T* t_;
+};
+
+// ref
+
+/**
+ @cond
+*/
+#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )
+# define BOOST_REF_CONST
+#else
+# define BOOST_REF_CONST const
+#endif
+/**
+ @endcond
+*/
+
+/**
+ @return `reference_wrapper<T>(t)`
+ @remark Does not throw.
+*/
+template<class T> BOOST_FORCEINLINE reference_wrapper<T> BOOST_REF_CONST ref( T & t )
+{
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1600 )
+
+ return reference_wrapper<T>( t, ref_workaround_tag() );
+
+#else
+
+ return reference_wrapper<T>( t );
+
+#endif
+}
+
+// cref
+
+/**
+ @return `reference_wrapper<T const>(t)`
+ @remark Does not throw.
+*/
+template<class T> BOOST_FORCEINLINE reference_wrapper<T const> BOOST_REF_CONST cref( T const & t )
+{
+ return reference_wrapper<T const>(t);
+}
+
+#undef BOOST_REF_CONST
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+/**
+ @cond
+*/
+#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
+# define BOOST_REF_DELETE
+#else
+# define BOOST_REF_DELETE = delete
+#endif
+/**
+ @endcond
+*/
+
+/**
+ @remark Construction from a temporary object is disabled.
+*/
+template<class T> void ref(T const&&) BOOST_REF_DELETE;
+
+/**
+ @remark Construction from a temporary object is disabled.
+*/
+template<class T> void cref(T const&&) BOOST_REF_DELETE;
+
+#undef BOOST_REF_DELETE
+
+#endif
+
+// is_reference_wrapper
+
+/**
+ @brief Determine if a type `T` is an instantiation of
+ `reference_wrapper`.
+
+ The value static constant will be true if the type `T` is a
+ specialization of `reference_wrapper`.
+*/
+template<typename T> struct is_reference_wrapper
+{
+ BOOST_STATIC_CONSTANT( bool, value = false );
+};
+
+/**
+ @cond
+*/
+template<typename T> struct is_reference_wrapper< reference_wrapper<T> >
+{
+ BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+#if !defined(BOOST_NO_CV_SPECIALIZATIONS)
+
+template<typename T> struct is_reference_wrapper< reference_wrapper<T> const >
+{
+ BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+template<typename T> struct is_reference_wrapper< reference_wrapper<T> volatile >
+{
+ BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+template<typename T> struct is_reference_wrapper< reference_wrapper<T> const volatile >
+{
+ BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+#endif // !defined(BOOST_NO_CV_SPECIALIZATIONS)
+
+/**
+ @endcond
+*/
+
+
+// unwrap_reference
+
+/**
+ @brief Find the type in a `reference_wrapper`.
+
+ The `typedef` type is `T::type` if `T` is a
+ `reference_wrapper`, `T` otherwise.
+*/
+template<typename T> struct unwrap_reference
+{
+ typedef T type;
+};
+
+/**
+ @cond
+*/
+template<typename T> struct unwrap_reference< reference_wrapper<T> >
+{
+ typedef T type;
+};
+
+#if !defined(BOOST_NO_CV_SPECIALIZATIONS)
+
+template<typename T> struct unwrap_reference< reference_wrapper<T> const >
+{
+ typedef T type;
+};
+
+template<typename T> struct unwrap_reference< reference_wrapper<T> volatile >
+{
+ typedef T type;
+};
+
+template<typename T> struct unwrap_reference< reference_wrapper<T> const volatile >
+{
+ typedef T type;
+};
+
+#endif // !defined(BOOST_NO_CV_SPECIALIZATIONS)
+
+/**
+ @endcond
+*/
+
+// unwrap_ref
+
+/**
+ @return `unwrap_reference<T>::type&(t)`
+ @remark Does not throw.
+*/
+template<class T> BOOST_FORCEINLINE typename unwrap_reference<T>::type& unwrap_ref( T & t )
+{
+ return t;
+}
+
+// get_pointer
+
+/**
+ @cond
+*/
+template<class T> BOOST_FORCEINLINE T* get_pointer( reference_wrapper<T> const & r )
+{
+ return r.get_pointer();
+}
+/**
+ @endcond
+*/
+
+} // namespace boost
+
+#endif // #ifndef BOOST_CORE_REF_HPP
diff --git a/3party/boost/boost/core/scoped_enum.hpp b/3party/boost/boost/core/scoped_enum.hpp
new file mode 100644
index 0000000000..78c548bf81
--- /dev/null
+++ b/3party/boost/boost/core/scoped_enum.hpp
@@ -0,0 +1,192 @@
+// scoped_enum.hpp ---------------------------------------------------------//
+
+// Copyright Beman Dawes, 2009
+// Copyright (C) 2011-2012 Vicente J. Botet Escriba
+// Copyright (C) 2012 Anthony Williams
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_CORE_SCOPED_ENUM_HPP
+#define BOOST_CORE_SCOPED_ENUM_HPP
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+
+#ifdef BOOST_NO_CXX11_SCOPED_ENUMS
+
+ /**
+ * Meta-function to get the native enum type associated to an enum class or its emulation.
+ */
+ template <typename EnumType>
+ struct native_type
+ {
+ /**
+ * The member typedef type names the native enum type associated to the scoped enum,
+ * which is it self if the compiler supports scoped enums or EnumType::enum_type if it is an emulated scoped enum.
+ */
+ typedef typename EnumType::enum_type type;
+ };
+
+ /**
+ * Casts a scoped enum to its underlying type.
+ *
+ * This function is useful when working with scoped enum classes, which doens't implicitly convert to the underlying type.
+ * @param v A scoped enum.
+ * @returns The underlying type.
+ * @throws No-throws.
+ */
+ template <typename UnderlyingType, typename EnumType>
+ UnderlyingType underlying_cast(EnumType v)
+ {
+ return v.get_underlying_value_();
+ }
+
+ /**
+ * Casts a scoped enum to its native enum type.
+ *
+ * This function is useful to make programs portable when the scoped enum emulation can not be use where native enums can.
+ *
+ * EnumType the scoped enum type
+ *
+ * @param v A scoped enum.
+ * @returns The native enum value.
+ * @throws No-throws.
+ */
+ template <typename EnumType>
+ inline
+ typename EnumType::enum_type native_value(EnumType e)
+ {
+ return e.get_native_value_();
+ }
+
+#else // BOOST_NO_CXX11_SCOPED_ENUMS
+
+ template <typename EnumType>
+ struct native_type
+ {
+ typedef EnumType type;
+ };
+
+ template <typename UnderlyingType, typename EnumType>
+ UnderlyingType underlying_cast(EnumType v)
+ {
+ return static_cast<UnderlyingType>(v);
+ }
+
+ template <typename EnumType>
+ inline
+ EnumType native_value(EnumType e)
+ {
+ return e;
+ }
+
+#endif // BOOST_NO_CXX11_SCOPED_ENUMS
+}
+
+
+#ifdef BOOST_NO_CXX11_SCOPED_ENUMS
+
+#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+
+#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \
+ explicit operator underlying_type() const BOOST_NOEXCEPT { return get_underlying_value_(); }
+
+#else
+
+#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR
+
+#endif
+
+/**
+ * Start a declaration of a scoped enum.
+ *
+ * @param EnumType The new scoped enum.
+ * @param UnderlyingType The underlying type.
+ */
+#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType, UnderlyingType) \
+ struct EnumType { \
+ typedef void is_boost_scoped_enum_tag; \
+ typedef UnderlyingType underlying_type; \
+ EnumType() BOOST_NOEXCEPT {} \
+ explicit EnumType(underlying_type v) BOOST_NOEXCEPT : v_(v) {} \
+ underlying_type get_underlying_value_() const BOOST_NOEXCEPT { return v_; } \
+ BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \
+ private: \
+ underlying_type v_; \
+ typedef EnumType self_type; \
+ public: \
+ enum enum_type
+
+#define BOOST_SCOPED_ENUM_DECLARE_END2() \
+ enum_type get_native_value_() const BOOST_NOEXCEPT { return enum_type(v_); } \
+ friend bool operator ==(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==enum_type(rhs.v_); } \
+ friend bool operator ==(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==rhs; } \
+ friend bool operator ==(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs==enum_type(rhs.v_); } \
+ friend bool operator !=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=enum_type(rhs.v_); } \
+ friend bool operator !=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=rhs; } \
+ friend bool operator !=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs!=enum_type(rhs.v_); } \
+ friend bool operator <(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<enum_type(rhs.v_); } \
+ friend bool operator <(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<rhs; } \
+ friend bool operator <(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<enum_type(rhs.v_); } \
+ friend bool operator <=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=enum_type(rhs.v_); } \
+ friend bool operator <=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=rhs; } \
+ friend bool operator <=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<=enum_type(rhs.v_); } \
+ friend bool operator >(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>enum_type(rhs.v_); } \
+ friend bool operator >(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>rhs; } \
+ friend bool operator >(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>enum_type(rhs.v_); } \
+ friend bool operator >=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=enum_type(rhs.v_); } \
+ friend bool operator >=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=rhs; } \
+ friend bool operator >=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>=enum_type(rhs.v_); } \
+ };
+
+#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) \
+ ; \
+ EnumType(enum_type v) BOOST_NOEXCEPT : v_(v) {} \
+ BOOST_SCOPED_ENUM_DECLARE_END2()
+
+/**
+ * Starts a declaration of a scoped enum with the default int underlying type.
+ *
+ * @param EnumType The new scoped enum.
+ */
+#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) \
+ BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,int)
+
+/**
+ * Name of the native enum type.
+ *
+ * @param EnumType The new scoped enum.
+ */
+#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType::enum_type
+/**
+ * Forward declares an scoped enum.
+ *
+ * @param EnumType The scoped enum.
+ */
+#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) struct EnumType
+
+#else // BOOST_NO_CXX11_SCOPED_ENUMS
+
+#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,UnderlyingType) enum class EnumType : UnderlyingType
+#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) enum class EnumType
+#define BOOST_SCOPED_ENUM_DECLARE_END2()
+#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) ;
+
+#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType
+#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) enum class EnumType
+
+#endif // BOOST_NO_CXX11_SCOPED_ENUMS
+
+// Deprecated macros
+#define BOOST_SCOPED_ENUM_START(name) BOOST_SCOPED_ENUM_DECLARE_BEGIN(name)
+#define BOOST_SCOPED_ENUM_END BOOST_SCOPED_ENUM_DECLARE_END2()
+#define BOOST_SCOPED_ENUM(name) BOOST_SCOPED_ENUM_NATIVE(name)
+
+#endif // BOOST_CORE_SCOPED_ENUM_HPP
diff --git a/3party/boost/boost/core/swap.hpp b/3party/boost/boost/core/swap.hpp
new file mode 100644
index 0000000000..baa1be970d
--- /dev/null
+++ b/3party/boost/boost/core/swap.hpp
@@ -0,0 +1,60 @@
+// Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// For more information, see http://www.boost.org
+
+
+#ifndef BOOST_CORE_SWAP_HPP
+#define BOOST_CORE_SWAP_HPP
+
+// Note: the implementation of this utility contains various workarounds:
+// - swap_impl is put outside the boost namespace, to avoid infinite
+// recursion (causing stack overflow) when swapping objects of a primitive
+// type.
+// - swap_impl has a using-directive, rather than a using-declaration,
+// because some compilers (including MSVC 7.1, Borland 5.9.3, and
+// Intel 8.1) don't do argument-dependent lookup when it has a
+// using-declaration instead.
+// - boost::swap has two template arguments, instead of one, to
+// avoid ambiguity when swapping objects of a Boost type that does
+// not have its own boost::swap overload.
+
+#include <utility> //for std::swap (C++11)
+#include <algorithm> //for std::swap (C++98)
+#include <cstddef> //for std::size_t
+#include <boost/config.hpp>
+
+namespace boost_swap_impl
+{
+ template<class T>
+ BOOST_GPU_ENABLED
+ void swap_impl(T& left, T& right)
+ {
+ using namespace std;//use std::swap if argument dependent lookup fails
+ swap(left,right);
+ }
+
+ template<class T, std::size_t N>
+ BOOST_GPU_ENABLED
+ void swap_impl(T (& left)[N], T (& right)[N])
+ {
+ for (std::size_t i = 0; i < N; ++i)
+ {
+ ::boost_swap_impl::swap_impl(left[i], right[i]);
+ }
+ }
+}
+
+namespace boost
+{
+ template<class T1, class T2>
+ BOOST_GPU_ENABLED
+ void swap(T1& left, T2& right)
+ {
+ ::boost_swap_impl::swap_impl(left, right);
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/core/typeinfo.hpp b/3party/boost/boost/core/typeinfo.hpp
new file mode 100644
index 0000000000..e67b4a3198
--- /dev/null
+++ b/3party/boost/boost/core/typeinfo.hpp
@@ -0,0 +1,151 @@
+#ifndef BOOST_CORE_TYPEINFO_HPP_INCLUDED
+#define BOOST_CORE_TYPEINFO_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// core::typeinfo, BOOST_CORE_TYPEID
+//
+// Copyright 2007, 2014 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+
+#if defined( BOOST_NO_TYPEID )
+
+#include <boost/current_function.hpp>
+#include <functional>
+
+namespace boost
+{
+
+namespace core
+{
+
+class typeinfo
+{
+private:
+
+ typeinfo( typeinfo const& );
+ typeinfo& operator=( typeinfo const& );
+
+ char const * name_;
+
+public:
+
+ explicit typeinfo( char const * name ): name_( name )
+ {
+ }
+
+ bool operator==( typeinfo const& rhs ) const
+ {
+ return this == &rhs;
+ }
+
+ bool operator!=( typeinfo const& rhs ) const
+ {
+ return this != &rhs;
+ }
+
+ bool before( typeinfo const& rhs ) const
+ {
+ return std::less< typeinfo const* >()( this, &rhs );
+ }
+
+ char const* name() const
+ {
+ return name_;
+ }
+};
+
+inline char const * demangled_name( core::typeinfo const & ti )
+{
+ return ti.name();
+}
+
+} // namespace core
+
+namespace detail
+{
+
+template<class T> struct core_typeid_
+{
+ static boost::core::typeinfo ti_;
+
+ static char const * name()
+ {
+ return BOOST_CURRENT_FUNCTION;
+ }
+};
+
+#if defined(__SUNPRO_CC)
+// see #4199, the Sun Studio compiler gets confused about static initialization
+// constructor arguments. But an assignment works just fine.
+template<class T> boost::core::typeinfo core_typeid_< T >::ti_ = core_typeid_< T >::name();
+#else
+template<class T> boost::core::typeinfo core_typeid_< T >::ti_(core_typeid_< T >::name());
+#endif
+
+template<class T> struct core_typeid_< T & >: core_typeid_< T >
+{
+};
+
+template<class T> struct core_typeid_< T const >: core_typeid_< T >
+{
+};
+
+template<class T> struct core_typeid_< T volatile >: core_typeid_< T >
+{
+};
+
+template<class T> struct core_typeid_< T const volatile >: core_typeid_< T >
+{
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#define BOOST_CORE_TYPEID(T) (boost::detail::core_typeid_<T>::ti_)
+
+#else
+
+#include <boost/core/demangle.hpp>
+#include <typeinfo>
+
+namespace boost
+{
+
+namespace core
+{
+
+#if defined( BOOST_NO_STD_TYPEINFO )
+
+typedef ::type_info typeinfo;
+
+#else
+
+typedef std::type_info typeinfo;
+
+#endif
+
+inline std::string demangled_name( core::typeinfo const & ti )
+{
+ return core::demangle( ti.name() );
+}
+
+} // namespace core
+
+} // namespace boost
+
+#define BOOST_CORE_TYPEID(T) typeid(T)
+
+#endif
+
+#endif // #ifndef BOOST_CORE_TYPEINFO_HPP_INCLUDED
diff --git a/3party/boost/boost/core/underlying_type.hpp b/3party/boost/boost/core/underlying_type.hpp
new file mode 100644
index 0000000000..c79a0a6e56
--- /dev/null
+++ b/3party/boost/boost/core/underlying_type.hpp
@@ -0,0 +1,79 @@
+// underlying_type.hpp ---------------------------------------------------------//
+
+// Copyright Beman Dawes, 2009
+// Copyright (C) 2011-2012 Vicente J. Botet Escriba
+// Copyright (C) 2012 Anthony Williams
+// Copyright (C) 2014 Andrey Semashev
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_CORE_UNDERLYING_TYPE_HPP
+#define BOOST_CORE_UNDERLYING_TYPE_HPP
+
+#include <boost/config.hpp>
+
+// GCC 4.7 and later seem to provide std::underlying_type
+#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) || (defined(BOOST_GCC) && BOOST_GCC >= 40700 && defined(__GXX_EXPERIMENTAL_CXX0X__))
+#include <type_traits>
+#define BOOST_DETAIL_HAS_STD_UNDERLYING_TYPE
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+
+namespace detail {
+
+template< typename EnumType, typename Void = void >
+struct underlying_type_impl;
+
+#if defined(BOOST_NO_CXX11_SCOPED_ENUMS)
+
+// Support for boost/core/scoped_enum.hpp
+template< typename EnumType >
+struct underlying_type_impl< EnumType, typename EnumType::is_boost_scoped_enum_tag >
+{
+ /**
+ * The member typedef type names the underlying type of EnumType. It is EnumType::underlying_type when the EnumType is an emulated scoped enum,
+ */
+ typedef typename EnumType::underlying_type type;
+};
+
+#endif
+
+#if defined(BOOST_DETAIL_HAS_STD_UNDERLYING_TYPE)
+
+template< typename EnumType, typename Void >
+struct underlying_type_impl
+{
+ typedef typename std::underlying_type< EnumType >::type type;
+};
+
+#endif
+
+} // namespace detail
+
+#if !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && !defined(BOOST_DETAIL_HAS_STD_UNDERLYING_TYPE)
+#define BOOST_NO_UNDERLYING_TYPE
+#endif
+
+/**
+ * Meta-function to get the underlying type of a scoped enum.
+ *
+ * Requires EnumType must be an enum type or the emulation of a scoped enum.
+ * If BOOST_NO_UNDERLYING_TYPE is defined, the implementation will not be able
+ * to deduce the underlying type of enums. The used is expected to specialize
+ * this trait.
+ */
+template< typename EnumType >
+struct underlying_type :
+ public detail::underlying_type_impl< EnumType >
+{
+};
+
+} // namespace boost
+
+#endif // BOOST_CORE_UNDERLYING_TYPE_HPP
diff --git a/3party/boost/boost/coroutine/all.hpp b/3party/boost/boost/coroutine/all.hpp
index d80ca206be..42f63a0a73 100644
--- a/3party/boost/boost/coroutine/all.hpp
+++ b/3party/boost/boost/coroutine/all.hpp
@@ -9,7 +9,13 @@
#include <boost/coroutine/attributes.hpp>
#include <boost/coroutine/coroutine.hpp>
+#include <boost/coroutine/exceptions.hpp>
#include <boost/coroutine/flags.hpp>
+#include <boost/coroutine/protected_stack_allocator.hpp>
+#include <boost/coroutine/segmented_stack_allocator.hpp>
#include <boost/coroutine/stack_allocator.hpp>
+#include <boost/coroutine/stack_context.hpp>
+#include <boost/coroutine/stack_traits.hpp>
+#include <boost/coroutine/standard_stack_allocator.hpp>
#endif // BOOST_COROUTINES_ALL_H
diff --git a/3party/boost/boost/coroutine/asymmetric_coroutine.hpp b/3party/boost/boost/coroutine/asymmetric_coroutine.hpp
new file mode 100644
index 0000000000..38ad3ab939
--- /dev/null
+++ b/3party/boost/boost/coroutine/asymmetric_coroutine.hpp
@@ -0,0 +1,2269 @@
+
+// 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_COROUTINES_ASYMMETRIC_COROUTINE_H
+#define BOOST_COROUTINES_ASYMMETRIC_COROUTINE_H
+
+#include <cstddef>
+#include <iterator>
+#include <memory>
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/move/move.hpp>
+#include <boost/range.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
+
+#include <boost/coroutine/attributes.hpp>
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/coroutine_context.hpp>
+#include <boost/coroutine/detail/parameters.hpp>
+#include <boost/coroutine/exceptions.hpp>
+#include <boost/coroutine/stack_allocator.hpp>
+#include <boost/coroutine/detail/pull_coroutine_impl.hpp>
+#include <boost/coroutine/detail/pull_coroutine_object.hpp>
+#include <boost/coroutine/detail/pull_coroutine_synthesized.hpp>
+#include <boost/coroutine/detail/push_coroutine_impl.hpp>
+#include <boost/coroutine/detail/push_coroutine_object.hpp>
+#include <boost/coroutine/detail/push_coroutine_synthesized.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+
+template< typename R >
+class pull_coroutine;
+
+template< typename Arg >
+class push_coroutine
+{
+private:
+ template< typename V, typename X, typename Y, typename Z >
+ friend class detail::pull_coroutine_object;
+
+ typedef detail::push_coroutine_impl< Arg > impl_type;
+ typedef detail::push_coroutine_synthesized< Arg > synth_type;
+ typedef detail::parameters< Arg > param_type;
+
+ struct dummy {};
+
+ impl_type * impl_;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( push_coroutine)
+
+ explicit push_coroutine( detail::synthesized_t::flag_t, impl_type & impl) :
+ impl_( & impl)
+ { BOOST_ASSERT( impl_); }
+
+public:
+ push_coroutine() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+ typedef void ( * coroutine_fn)( pull_coroutine< Arg > &);
+
+ explicit push_coroutine( coroutine_fn,
+ attributes const& = attributes() );
+
+ template< typename StackAllocator >
+ explicit push_coroutine( coroutine_fn,
+ attributes const&,
+ StackAllocator);
+# endif
+ template< typename Fn >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const& = attributes() );
+
+ template< typename Fn, typename StackAllocator >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const&,
+ StackAllocator);
+#else
+ template< typename Fn >
+ explicit push_coroutine( Fn fn,
+ attributes const& = attributes() );
+
+ template< typename Fn, typename StackAllocator >
+ explicit push_coroutine( Fn fn,
+ attributes const&,
+ StackAllocator);
+
+ template< typename Fn >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const& = attributes() );
+
+ template< typename Fn, typename StackAllocator >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const&,
+ StackAllocator);
+#endif
+
+ ~push_coroutine()
+ {
+ if ( 0 != impl_)
+ {
+ impl_->destroy();
+ impl_ = 0;
+ }
+ }
+
+ push_coroutine( BOOST_RV_REF( push_coroutine) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ push_coroutine & operator=( BOOST_RV_REF( push_coroutine) other) BOOST_NOEXCEPT
+ {
+ push_coroutine tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_ || impl_->is_complete(); }
+
+ void swap( push_coroutine & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ push_coroutine & operator()( Arg arg)
+ {
+ BOOST_ASSERT( * this);
+
+ impl_->push( arg);
+ return * this;
+ }
+
+ class iterator : public std::iterator< std::output_iterator_tag, void, void, void, void >
+ {
+ private:
+ push_coroutine< Arg > * c_;
+
+ public:
+ iterator() :
+ c_( 0)
+ {}
+
+ explicit iterator( push_coroutine< Arg > * c) :
+ c_( c)
+ {}
+
+ iterator & operator=( Arg a)
+ {
+ BOOST_ASSERT( c_);
+ if ( ! ( * c_)( a) ) c_ = 0;
+ return * this;
+ }
+
+ bool operator==( iterator const& other) const
+ { return other.c_ == c_; }
+
+ bool operator!=( iterator const& other) const
+ { return other.c_ != c_; }
+
+ iterator & operator*()
+ { return * this; }
+
+ iterator & operator++()
+ { return * this; }
+ };
+
+ struct const_iterator;
+};
+
+template< typename Arg >
+class push_coroutine< Arg & >
+{
+private:
+ template< typename V, typename X, typename Y, typename Z >
+ friend class detail::pull_coroutine_object;
+
+ typedef detail::push_coroutine_impl< Arg & > impl_type;
+ typedef detail::push_coroutine_synthesized< Arg & > synth_type;
+ typedef detail::parameters< Arg & > param_type;
+
+ struct dummy {};
+
+ impl_type * impl_;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( push_coroutine)
+
+ explicit push_coroutine( detail::synthesized_t::flag_t, impl_type & impl) :
+ impl_( & impl)
+ { BOOST_ASSERT( impl_); }
+
+public:
+ push_coroutine() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+ typedef void ( * coroutine_fn)( pull_coroutine< Arg & > &);
+
+ explicit push_coroutine( coroutine_fn,
+ attributes const& = attributes() );
+
+ template< typename StackAllocator >
+ explicit push_coroutine( coroutine_fn,
+ attributes const&,
+ StackAllocator);
+# endif
+ template< typename Fn >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const& = attributes() );
+
+ template< typename Fn, typename StackAllocator >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const&,
+ StackAllocator);
+#else
+ template< typename Fn >
+ explicit push_coroutine( Fn,
+ attributes const& = attributes() );
+
+ template< typename Fn, typename StackAllocator >
+ explicit push_coroutine( Fn,
+ attributes const&,
+ StackAllocator);
+
+ template< typename Fn >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const& = attributes() );
+
+ template< typename Fn, typename StackAllocator >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const&,
+ StackAllocator);
+#endif
+
+ ~push_coroutine()
+ {
+ if ( 0 != impl_)
+ {
+ impl_->destroy();
+ impl_ = 0;
+ }
+ }
+
+ push_coroutine( BOOST_RV_REF( push_coroutine) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ push_coroutine & operator=( BOOST_RV_REF( push_coroutine) other) BOOST_NOEXCEPT
+ {
+ push_coroutine tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_ || impl_->is_complete(); }
+
+ void swap( push_coroutine & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ push_coroutine & operator()( Arg & arg)
+ {
+ BOOST_ASSERT( * this);
+
+ impl_->push( arg);
+ return * this;
+ }
+
+ class iterator : public std::iterator< std::output_iterator_tag, void, void, void, void >
+ {
+ private:
+ push_coroutine< Arg & > * c_;
+
+ public:
+ iterator() :
+ c_( 0)
+ {}
+
+ explicit iterator( push_coroutine< Arg & > * c) :
+ c_( c)
+ {}
+
+ iterator & operator=( Arg & a)
+ {
+ BOOST_ASSERT( c_);
+ if ( ! ( * c_)( a) ) c_ = 0;
+ return * this;
+ }
+
+ bool operator==( iterator const& other) const
+ { return other.c_ == c_; }
+
+ bool operator!=( iterator const& other) const
+ { return other.c_ != c_; }
+
+ iterator & operator*()
+ { return * this; }
+
+ iterator & operator++()
+ { return * this; }
+ };
+
+ struct const_iterator;
+};
+
+template<>
+class push_coroutine< void >
+{
+private:
+ template< typename V, typename X, typename Y, typename Z >
+ friend class detail::pull_coroutine_object;
+
+ typedef detail::push_coroutine_impl< void > impl_type;
+ typedef detail::push_coroutine_synthesized< void > synth_type;
+ typedef detail::parameters< void > param_type;
+
+ struct dummy {};
+
+ impl_type * impl_;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( push_coroutine)
+
+ explicit push_coroutine( detail::synthesized_t::flag_t, impl_type & impl) :
+ impl_( & impl)
+ { BOOST_ASSERT( impl_); }
+
+public:
+ push_coroutine() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+ typedef void ( * coroutine_fn)( pull_coroutine< void > &);
+
+ explicit push_coroutine( coroutine_fn,
+ attributes const& = attributes() );
+
+ template< typename StackAllocator >
+ explicit push_coroutine( coroutine_fn,
+ attributes const&,
+ StackAllocator);
+# endif
+ template< typename Fn >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const& = attributes() );
+
+ template< typename Fn, typename StackAllocator >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const&,
+ StackAllocator);
+#else
+ template< typename Fn >
+ explicit push_coroutine( Fn,
+ attributes const& = attributes() );
+
+ template< typename Fn, typename StackAllocator >
+ explicit push_coroutine( Fn,
+ attributes const&,
+ StackAllocator);
+
+ template< typename Fn >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const& = attributes() );
+
+ template< typename Fn, typename StackAllocator >
+ explicit push_coroutine( BOOST_RV_REF( Fn),
+ attributes const&,
+ StackAllocator);
+#endif
+
+ ~push_coroutine()
+ {
+ if ( 0 != impl_)
+ {
+ impl_->destroy();
+ impl_ = 0;
+ }
+ }
+
+ push_coroutine( BOOST_RV_REF( push_coroutine) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ push_coroutine & operator=( BOOST_RV_REF( push_coroutine) other) BOOST_NOEXCEPT
+ {
+ push_coroutine tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_ || impl_->is_complete(); }
+
+ void swap( push_coroutine & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ push_coroutine & operator()()
+ {
+ BOOST_ASSERT( * this);
+
+ impl_->push();
+ return * this;
+ }
+
+ struct iterator;
+ struct const_iterator;
+};
+
+
+
+template< typename R >
+class pull_coroutine
+{
+private:
+ template< typename V, typename X, typename Y, typename Z >
+ friend class detail::push_coroutine_object;
+
+ typedef detail::pull_coroutine_impl< R > impl_type;
+ typedef detail::pull_coroutine_synthesized< R > synth_type;
+ typedef detail::parameters< R > param_type;
+
+ struct dummy {};
+
+ impl_type * impl_;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( pull_coroutine)
+
+ explicit pull_coroutine( detail::synthesized_t::flag_t, impl_type & impl) :
+ impl_( & impl)
+ { BOOST_ASSERT( impl_); }
+
+public:
+ pull_coroutine() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+ typedef void ( * coroutine_fn)( push_coroutine< R > &);
+
+ explicit pull_coroutine( coroutine_fn fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R >, R, coroutine_fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename StackAllocator >
+ explicit pull_coroutine( coroutine_fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R >, R, coroutine_fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+# endif
+ template< typename Fn >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R >, R, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R >, R, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+#else
+ template< typename Fn >
+ explicit pull_coroutine( Fn fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R >, R, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit pull_coroutine( Fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R >, R, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R >, R, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R >, R, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+#endif
+
+ ~pull_coroutine()
+ {
+ if ( 0 != impl_)
+ {
+ impl_->destroy();
+ impl_ = 0;
+ }
+ }
+
+ pull_coroutine( BOOST_RV_REF( pull_coroutine) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ pull_coroutine & operator=( BOOST_RV_REF( pull_coroutine) other) BOOST_NOEXCEPT
+ {
+ pull_coroutine tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_ || impl_->is_complete(); }
+
+ void swap( pull_coroutine & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ pull_coroutine & operator()()
+ {
+ BOOST_ASSERT( * this);
+
+ impl_->pull();
+ return * this;
+ }
+
+ R get() const
+ {
+ BOOST_ASSERT( 0 != impl_);
+
+ return impl_->get();
+ }
+
+ class iterator : public std::iterator< std::input_iterator_tag, typename remove_reference< R >::type >
+ {
+ private:
+ pull_coroutine< R > * c_;
+ R * val_;
+
+ void fetch_()
+ {
+ BOOST_ASSERT( c_);
+
+ if ( ! ( * c_) )
+ {
+ c_ = 0;
+ val_ = 0;
+ return;
+ }
+ val_ = c_->impl_->get_pointer();
+ }
+
+ void increment_()
+ {
+ BOOST_ASSERT( c_);
+ BOOST_ASSERT( * c_);
+
+ ( * c_)();
+ fetch_();
+ }
+
+ public:
+ typedef typename iterator::pointer pointer_t;
+ typedef typename iterator::reference reference_t;
+
+ iterator() :
+ c_( 0), val_( 0)
+ {}
+
+ explicit iterator( pull_coroutine< R > * c) :
+ c_( c), val_( 0)
+ { fetch_(); }
+
+ iterator( iterator const& other) :
+ c_( other.c_), val_( other.val_)
+ {}
+
+ iterator & operator=( iterator const& other)
+ {
+ if ( this == & other) return * this;
+ c_ = other.c_;
+ val_ = other.val_;
+ return * this;
+ }
+
+ bool operator==( iterator const& other) const
+ { return other.c_ == c_ && other.val_ == val_; }
+
+ bool operator!=( iterator const& other) const
+ { return other.c_ != c_ || other.val_ != val_; }
+
+ iterator & operator++()
+ {
+ increment_();
+ return * this;
+ }
+
+ iterator operator++( int)
+ {
+ iterator tmp( * this);
+ ++*this;
+ return tmp;
+ }
+
+ reference_t operator*() const
+ {
+ if ( ! val_)
+ boost::throw_exception(
+ invalid_result() );
+ return * val_;
+ }
+
+ pointer_t operator->() const
+ {
+ if ( ! val_)
+ boost::throw_exception(
+ invalid_result() );
+ return val_;
+ }
+ };
+
+ friend class iterator;
+
+ struct const_iterator;
+};
+
+template< typename R >
+class pull_coroutine< R & >
+{
+private:
+ template< typename V, typename X, typename Y, typename Z >
+ friend class detail::push_coroutine_object;
+
+ typedef detail::pull_coroutine_impl< R & > impl_type;
+ typedef detail::pull_coroutine_synthesized< R & > synth_type;
+ typedef detail::parameters< R & > param_type;
+
+ struct dummy {};
+
+ impl_type * impl_;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( pull_coroutine)
+
+ explicit pull_coroutine( detail::synthesized_t::flag_t, impl_type & impl) :
+ impl_( & impl)
+ { BOOST_ASSERT( impl_); }
+
+public:
+ pull_coroutine() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+ typedef void ( * coroutine_fn)( push_coroutine< R & > &);
+
+ explicit pull_coroutine( coroutine_fn fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R & >, R &, coroutine_fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename StackAllocator >
+ explicit pull_coroutine( coroutine_fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R & >, R &, coroutine_fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+# endif
+ template< typename Fn >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R & >, R &, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R & >, R &, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+#else
+ template< typename Fn >
+ explicit pull_coroutine( Fn fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R & >, R &, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit pull_coroutine( Fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R & >, R &, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R & >, R &, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< R & >, R &, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+#endif
+
+ ~pull_coroutine()
+ {
+ if ( 0 != impl_)
+ {
+ impl_->destroy();
+ impl_ = 0;
+ }
+ }
+
+ pull_coroutine( BOOST_RV_REF( pull_coroutine) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ pull_coroutine & operator=( BOOST_RV_REF( pull_coroutine) other) BOOST_NOEXCEPT
+ {
+ pull_coroutine tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_ || impl_->is_complete(); }
+
+ void swap( pull_coroutine & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ pull_coroutine & operator()()
+ {
+ BOOST_ASSERT( * this);
+
+ impl_->pull();
+ return * this;
+ }
+
+ R & get() const
+ { return impl_->get(); }
+
+ class iterator : public std::iterator< std::input_iterator_tag, R >
+ {
+ private:
+ pull_coroutine< R & > * c_;
+ R * val_;
+
+ void fetch_()
+ {
+ BOOST_ASSERT( c_);
+
+ if ( ! ( * c_) )
+ {
+ c_ = 0;
+ val_ = 0;
+ return;
+ }
+ val_ = c_->impl_->get_pointer();
+ }
+
+ void increment_()
+ {
+ BOOST_ASSERT( c_);
+ BOOST_ASSERT( * c_);
+
+ ( * c_)();
+ fetch_();
+ }
+
+ public:
+ typedef typename iterator::pointer pointer_t;
+ typedef typename iterator::reference reference_t;
+
+ iterator() :
+ c_( 0), val_( 0)
+ {}
+
+ explicit iterator( pull_coroutine< R & > * c) :
+ c_( c), val_( 0)
+ { fetch_(); }
+
+ iterator( iterator const& other) :
+ c_( other.c_), val_( other.val_)
+ {}
+
+ iterator & operator=( iterator const& other)
+ {
+ if ( this == & other) return * this;
+ c_ = other.c_;
+ val_ = other.val_;
+ return * this;
+ }
+
+ bool operator==( iterator const& other) const
+ { return other.c_ == c_ && other.val_ == val_; }
+
+ bool operator!=( iterator const& other) const
+ { return other.c_ != c_ || other.val_ != val_; }
+
+ iterator & operator++()
+ {
+ increment_();
+ return * this;
+ }
+
+ iterator operator++( int)
+ {
+ iterator tmp( * this);
+ ++*this;
+ return tmp;
+ }
+
+ reference_t operator*() const
+ {
+ if ( ! val_)
+ boost::throw_exception(
+ invalid_result() );
+ return * val_;
+ }
+
+ pointer_t operator->() const
+ {
+ if ( ! val_)
+ boost::throw_exception(
+ invalid_result() );
+ return val_;
+ }
+ };
+
+ friend class iterator;
+
+ struct const_iterator;
+};
+
+template<>
+class pull_coroutine< void >
+{
+private:
+ template< typename V, typename X, typename Y, typename Z >
+ friend class detail::push_coroutine_object;
+
+ typedef detail::pull_coroutine_impl< void > impl_type;
+ typedef detail::pull_coroutine_synthesized< void > synth_type;
+ typedef detail::parameters< void > param_type;
+
+ struct dummy {};
+
+ impl_type * impl_;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( pull_coroutine)
+
+ explicit pull_coroutine( detail::synthesized_t::flag_t, impl_type & impl) :
+ impl_( & impl)
+ { BOOST_ASSERT( impl_); }
+
+public:
+ pull_coroutine() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+ typedef void ( * coroutine_fn)( push_coroutine< void > &);
+
+ explicit pull_coroutine( coroutine_fn fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< void >, void, coroutine_fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename StackAllocator >
+ explicit pull_coroutine( coroutine_fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< void >, void, coroutine_fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+# endif
+ template< typename Fn >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< void >, void, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< void >, void, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+#else
+ template< typename Fn >
+ explicit pull_coroutine( Fn fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< void >, void, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit pull_coroutine( Fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< void >, void, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< void >, void, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit pull_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::pull_coroutine_object<
+ push_coroutine< void >, void, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ impl_->pull();
+ }
+#endif
+
+ ~pull_coroutine()
+ {
+ if ( 0 != impl_)
+ {
+ impl_->destroy();
+ impl_ = 0;
+ }
+ }
+
+ pull_coroutine( BOOST_RV_REF( pull_coroutine) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ pull_coroutine & operator=( BOOST_RV_REF( pull_coroutine) other) BOOST_NOEXCEPT
+ {
+ pull_coroutine tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_ || impl_->is_complete(); }
+
+ void swap( pull_coroutine & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ pull_coroutine & operator()()
+ {
+ BOOST_ASSERT( * this);
+
+ impl_->pull();
+ return * this;
+ }
+
+ struct iterator;
+ struct const_iterator;
+};
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+template< typename Arg >
+push_coroutine< Arg >::push_coroutine( coroutine_fn fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg >, Arg, coroutine_fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename StackAllocator >
+push_coroutine< Arg >::push_coroutine( coroutine_fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg >, Arg, coroutine_fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+push_coroutine< Arg & >::push_coroutine( coroutine_fn fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg & >, Arg &, coroutine_fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename StackAllocator >
+push_coroutine< Arg & >::push_coroutine( coroutine_fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg & >, Arg &, coroutine_fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+push_coroutine< void >::push_coroutine( coroutine_fn fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< void >, void, coroutine_fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename StackAllocator >
+push_coroutine< void >::push_coroutine( coroutine_fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< void >, void, coroutine_fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+# endif
+template< typename Arg >
+template< typename Fn >
+push_coroutine< Arg >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg >, Arg, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn, typename StackAllocator >
+push_coroutine< Arg >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg >, Arg, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn >
+push_coroutine< Arg & >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg & >, Arg &, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn, typename StackAllocator >
+push_coroutine< Arg & >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg & >, Arg &, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Fn >
+push_coroutine< void >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< void >, void, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Fn, typename StackAllocator >
+push_coroutine< void >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< void >, void, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+#else
+template< typename Arg >
+template< typename Fn >
+push_coroutine< Arg >::push_coroutine( Fn fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg >, Arg, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn, typename StackAllocator >
+push_coroutine< Arg >::push_coroutine( Fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg >, Arg, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn >
+push_coroutine< Arg & >::push_coroutine( Fn fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg & >, Arg &, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn, typename StackAllocator >
+push_coroutine< Arg & >::push_coroutine( Fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg & >, Arg &, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Fn >
+push_coroutine< void >::push_coroutine( Fn fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< void >, void, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Fn, typename StackAllocator >
+push_coroutine< void >::push_coroutine( Fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< void >, void, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn >
+push_coroutine< Arg >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg >, Arg, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn, typename StackAllocator >
+push_coroutine< Arg >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg >, Arg, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn >
+push_coroutine< Arg & >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg & >, Arg &, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Arg >
+template< typename Fn, typename StackAllocator >
+push_coroutine< Arg & >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< Arg & >, Arg &, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Fn >
+push_coroutine< void >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ stack_allocator stack_alloc;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< void >, void, Fn, stack_allocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+
+template< typename Fn, typename StackAllocator >
+push_coroutine< void >::push_coroutine( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+{
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef detail::push_coroutine_object<
+ pull_coroutine< void >, void, Fn, StackAllocator
+ > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+}
+#endif
+
+template< typename R >
+void swap( pull_coroutine< R > & l, pull_coroutine< R > & r) BOOST_NOEXCEPT
+{ l.swap( r); }
+
+template< typename Arg >
+void swap( push_coroutine< Arg > & l, push_coroutine< Arg > & r) BOOST_NOEXCEPT
+{ l.swap( r); }
+
+template< typename R >
+typename pull_coroutine< R >::iterator
+range_begin( pull_coroutine< R > & c)
+{ return typename pull_coroutine< R >::iterator( & c); }
+
+template< typename R >
+typename pull_coroutine< R >::iterator
+range_end( pull_coroutine< R > &)
+{ return typename pull_coroutine< R >::iterator(); }
+
+template< typename Arg >
+typename push_coroutine< Arg >::iterator
+range_begin( push_coroutine< Arg > & c)
+{ return typename push_coroutine< Arg >::iterator( & c); }
+
+template< typename Arg >
+typename push_coroutine< Arg >::iterator
+range_end( push_coroutine< Arg > &)
+{ return typename push_coroutine< Arg >::iterator(); }
+
+template< typename T >
+struct asymmetric_coroutine
+{
+ typedef push_coroutine< T > push_type;
+ typedef pull_coroutine< T > pull_type;
+};
+
+// deprecated
+template< typename T >
+struct coroutine
+{
+ typedef push_coroutine< T > push_type;
+ typedef pull_coroutine< T > pull_type;
+};
+
+#if defined(__clang__)
+template< typename R >
+typename pull_coroutine< R >::iterator
+begin( pull_coroutine< R > & c)
+{ return boost::begin( c); }
+
+template< typename R >
+typename pull_coroutine< R >::iterator
+end( pull_coroutine< R > & c)
+{ return boost::end( c); }
+
+template< typename R >
+typename push_coroutine< R >::iterator
+begin( push_coroutine< R > & c)
+{ return boost::begin( c); }
+
+template< typename R >
+typename push_coroutine< R >::iterator
+end( push_coroutine< R > & c)
+{ return boost::end( c); }
+#endif
+
+}
+
+template< typename Arg >
+struct range_mutable_iterator< coroutines::push_coroutine< Arg > >
+{ typedef typename coroutines::push_coroutine< Arg >::iterator type; };
+
+template< typename R >
+struct range_mutable_iterator< coroutines::pull_coroutine< R > >
+{ typedef typename coroutines::pull_coroutine< R >::iterator type; };
+
+}
+
+namespace std {
+
+template< typename R >
+typename boost::coroutines::pull_coroutine< R >::iterator
+begin( boost::coroutines::pull_coroutine< R > & c)
+{ return boost::begin( c); }
+
+template< typename R >
+typename boost::coroutines::pull_coroutine< R >::iterator
+end( boost::coroutines::pull_coroutine< R > & c)
+{ return boost::end( c); }
+
+template< typename R >
+typename boost::coroutines::push_coroutine< R >::iterator
+begin( boost::coroutines::push_coroutine< R > & c)
+{ return boost::begin( c); }
+
+template< typename R >
+typename boost::coroutines::push_coroutine< R >::iterator
+end( boost::coroutines::push_coroutine< R > & c)
+{ return boost::end( c); }
+
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_ASYMMETRIC_COROUTINE_H
diff --git a/3party/boost/boost/coroutine/attributes.hpp b/3party/boost/boost/coroutine/attributes.hpp
index 2855082423..065a4c66e3 100644
--- a/3party/boost/boost/coroutine/attributes.hpp
+++ b/3party/boost/boost/coroutine/attributes.hpp
@@ -28,7 +28,7 @@ struct attributes
flag_fpu_t preserve_fpu;
attributes() BOOST_NOEXCEPT :
- size( stack_allocator::default_stacksize() ),
+ size( stack_allocator::traits_type::default_size() ),
do_unwind( stack_unwind),
preserve_fpu( fpu_preserved)
{}
@@ -40,13 +40,13 @@ struct attributes
{}
explicit attributes( flag_unwind_t do_unwind_) BOOST_NOEXCEPT :
- size( stack_allocator::default_stacksize() ),
+ size( stack_allocator::traits_type::default_size() ),
do_unwind( do_unwind_),
preserve_fpu( fpu_preserved)
{}
explicit attributes( flag_fpu_t preserve_fpu_) BOOST_NOEXCEPT :
- size( stack_allocator::default_stacksize() ),
+ size( stack_allocator::traits_type::default_size() ),
do_unwind( stack_unwind),
preserve_fpu( preserve_fpu_)
{}
@@ -70,7 +70,16 @@ struct attributes
explicit attributes(
flag_unwind_t do_unwind_,
flag_fpu_t preserve_fpu_) BOOST_NOEXCEPT :
- size( stack_allocator::default_stacksize() ),
+ size( stack_allocator::traits_type::default_size() ),
+ do_unwind( do_unwind_),
+ preserve_fpu( preserve_fpu_)
+ {}
+
+ explicit attributes(
+ std::size_t size_,
+ flag_unwind_t do_unwind_,
+ flag_fpu_t preserve_fpu_) BOOST_NOEXCEPT :
+ size( size_),
do_unwind( do_unwind_),
preserve_fpu( preserve_fpu_)
{}
diff --git a/3party/boost/boost/coroutine/checkpoint.hpp b/3party/boost/boost/coroutine/checkpoint.hpp
deleted file mode 100644
index e7134142fa..0000000000
--- a/3party/boost/boost/coroutine/checkpoint.hpp
+++ /dev/null
@@ -1,34 +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_COROUTINES_CHECKPOINT_H
-#define BOOST_COROUTINES_CHECKPOINT_H
-
-#include <boost/config.hpp>
-#include <boost/context/fcontext.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-
-class checkpoint
-{
-public:
-private:
- context::fcontext_t ctx_;
- void * sp_;
-};
-
-}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_CHECKPOINT_H
diff --git a/3party/boost/boost/coroutine/coroutine.hpp b/3party/boost/boost/coroutine/coroutine.hpp
index bfb89d9fe5..076ffd26ea 100644
--- a/3party/boost/boost/coroutine/coroutine.hpp
+++ b/3party/boost/boost/coroutine/coroutine.hpp
@@ -7,10 +7,7 @@
#ifndef BOOST_COROUTINES_COROUTINE_H
#define BOOST_COROUTINES_COROUTINE_H
-#ifdef BOOST_COROUTINES_V2
-#include <boost/coroutine/v2/coroutine.hpp>
-#else
-#include <boost/coroutine/v1/coroutine.hpp>
-#endif
+#include <boost/coroutine/asymmetric_coroutine.hpp>
+#include <boost/coroutine/symmetric_coroutine.hpp>
#endif // BOOST_COROUTINES_COROUTINE_H
diff --git a/3party/boost/boost/coroutine/detail/config.hpp b/3party/boost/boost/coroutine/detail/config.hpp
index 04527304c7..9a3f4bf334 100644
--- a/3party/boost/boost/coroutine/detail/config.hpp
+++ b/3party/boost/boost/coroutine/detail/config.hpp
@@ -14,16 +14,12 @@
# undef BOOST_COROUTINES_DECL
#endif
-#if defined(BOOST_HAS_DECLSPEC)
-# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_COROUTINES_DYN_LINK)
-# if ! defined(BOOST_DYN_LINK)
-# define BOOST_DYN_LINK
-# endif
-# if defined(BOOST_COROUTINES_SOURCE)
-# define BOOST_COROUTINES_DECL BOOST_SYMBOL_EXPORT
-# else
-# define BOOST_COROUTINES_DECL BOOST_SYMBOL_IMPORT
-# endif
+#if (defined(BOOST_ALL_DYN_LINK) || defined(BOOST_COROUTINES_DYN_LINK) ) && ! defined(BOOST_COROUTINES_STATIC_LINK)
+# if defined(BOOST_COROUTINES_SOURCE)
+# define BOOST_COROUTINES_DECL BOOST_SYMBOL_EXPORT
+# define BOOST_COROUTINES_BUILD_DLL
+# else
+# define BOOST_COROUTINES_DECL BOOST_SYMBOL_IMPORT
# endif
#endif
@@ -32,7 +28,7 @@
#endif
#if ! defined(BOOST_COROUTINES_SOURCE) && ! defined(BOOST_ALL_NO_LIB) && ! defined(BOOST_COROUTINES_NO_LIB)
-# define BOOST_LIB_NAME boost_context
+# define BOOST_LIB_NAME boost_coroutine
# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_COROUTINES_DYN_LINK)
# define BOOST_DYN_LINK
# endif
@@ -40,14 +36,14 @@
#endif
#if defined(BOOST_USE_SEGMENTED_STACKS)
-# if ! (defined(__GNUC__) && __GNUC__ > 3 && __GNUC_MINOR__ > 6)
+# if ! ( (defined(__GNUC__) && __GNUC__ > 3 && __GNUC_MINOR__ > 6) || \
+ (defined(__clang__) && __clang_major__ > 2 && __clang_minor__ > 3) )
# error "compiler does not support segmented stacks"
# endif
# define BOOST_COROUTINES_SEGMENTS 10
#endif
-//#ifndef BOOST_COROUTINES_V1
-//# define BOOST_COROUTINES_V2
-//#endif
+#define BOOST_COROUTINES_UNIDIRECT
+#define BOOST_COROUTINES_SYMMETRIC
#endif // BOOST_COROUTINES_DETAIL_CONFIG_H
diff --git a/3party/boost/boost/coroutine/detail/coroutine_context.hpp b/3party/boost/boost/coroutine/detail/coroutine_context.hpp
index d02ab1a955..6c4ebb68b1 100644
--- a/3party/boost/boost/coroutine/detail/coroutine_context.hpp
+++ b/3party/boost/boost/coroutine/detail/coroutine_context.hpp
@@ -14,42 +14,43 @@
#include <boost/context/fcontext.hpp>
#include <boost/coroutine/detail/config.hpp>
-#include "boost/coroutine/stack_context.hpp"
+#include <boost/coroutine/stack_context.hpp>
#ifdef BOOST_HAS_ABI_HEADERS
# include BOOST_ABI_PREFIX
#endif
-#if defined(BOOST_USE_SEGMENTED_STACKS)
-extern "C" void *__splitstack_makecontext(
- std::size_t, void * [BOOST_COROUTINES_SEGMENTS], std::size_t *);
-#endif
-
namespace boost {
namespace coroutines {
namespace detail {
-
-class BOOST_COROUTINES_DECL coroutine_context : private context::fcontext_t,
- private stack_context
+// class hold stack-context and coroutines execution-context
+class BOOST_COROUTINES_DECL coroutine_context
{
private:
- stack_context * stack_ctx_;
- context::fcontext_t * ctx_;
+ stack_context stack_ctx_;
+ context::fcontext_t ctx_;
public:
typedef void( * ctx_fn)( intptr_t);
+ // default ctor represents the current execution-context
coroutine_context();
- explicit coroutine_context( ctx_fn, stack_context *);
+ // ctor creates a new execution-context running coroutine-fn `fn`
+ // `ctx_` will be allocated on top of the stack managed by parameter
+ // `stack_ctx`
+ coroutine_context( ctx_fn fn, stack_context const& stack_ctx);
coroutine_context( coroutine_context const&);
coroutine_context& operator=( coroutine_context const&);
intptr_t jump( coroutine_context &, intptr_t = 0, bool = true);
+
+ stack_context & stack_ctx()
+ { return stack_ctx_; }
};
}}}
diff --git a/3party/boost/boost/coroutine/detail/exceptions.hpp b/3party/boost/boost/coroutine/detail/exceptions.hpp
deleted file mode 100644
index 39f385407c..0000000000
--- a/3party/boost/boost/coroutine/detail/exceptions.hpp
+++ /dev/null
@@ -1,28 +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_COROUTINES_DETAIL_EXCEPTIONs_H
-#define BOOST_COROUTINES_DETAIL_EXCEPTIONs_H
-
-#include <boost/config.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-struct forced_unwind {};
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_DETAIL_EXCEPTIONs_H
diff --git a/3party/boost/boost/coroutine/detail/flags.hpp b/3party/boost/boost/coroutine/detail/flags.hpp
index 33f2142f75..8d19757ee8 100644
--- a/3party/boost/boost/coroutine/detail/flags.hpp
+++ b/3party/boost/boost/coroutine/detail/flags.hpp
@@ -19,10 +19,24 @@ namespace detail {
enum flag_t
{
- flag_complete = 1 << 1,
- flag_unwind_stack = 1 << 2,
- flag_force_unwind = 1 << 3,
- flag_preserve_fpu = 1 << 4
+ flag_started = 1 << 1,
+ flag_running = 1 << 2,
+ flag_complete = 1 << 3,
+ flag_unwind_stack = 1 << 4,
+ flag_force_unwind = 1 << 5,
+ flag_preserve_fpu = 1 << 6
+};
+
+struct unwind_t
+{
+ enum flag_t
+ { force_unwind = 1 };
+};
+
+struct synthesized_t
+{
+ enum flag_t
+ { syntesized = 1 };
};
}}}
diff --git a/3party/boost/boost/coroutine/detail/holder.hpp b/3party/boost/boost/coroutine/detail/holder.hpp
deleted file mode 100644
index 0d2d4f08f8..0000000000
--- a/3party/boost/boost/coroutine/detail/holder.hpp
+++ /dev/null
@@ -1,90 +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_COROUTINES_DETAIL_HOLDER_H
-#define BOOST_COROUTINES_DETAIL_HOLDER_H
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/optional.hpp>
-
-#include <boost/coroutine/detail/coroutine_context.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template< typename Data >
-struct holder
-{
- coroutine_context * ctx;
- optional< Data > data;
- bool force_unwind;
-
- explicit holder( coroutine_context * ctx_) :
- ctx( ctx_), data(), force_unwind( false)
- { BOOST_ASSERT( ctx); }
-
- explicit holder( coroutine_context * ctx_, Data data_) :
- ctx( ctx_), data( data_), force_unwind( false)
- { BOOST_ASSERT( ctx); }
-
- explicit holder( coroutine_context * ctx_, bool force_unwind_) :
- ctx( ctx_), data(), force_unwind( force_unwind_)
- {
- BOOST_ASSERT( ctx);
- BOOST_ASSERT( force_unwind);
- }
-
- holder( holder const& other) :
- ctx( other.ctx), data( other.data),
- force_unwind( other.force_unwind)
- {}
-
- holder & operator=( holder const& other)
- {
- if ( this == & other) return * this;
- ctx = other.ctx;
- data = other.data;
- force_unwind = other.force_unwind;
- return * this;
- }
-};
-
-template<>
-struct holder< void >
-{
- coroutine_context * ctx;
- bool force_unwind;
-
- explicit holder( coroutine_context * ctx_, bool force_unwind_ = false) :
- ctx( ctx_), force_unwind( force_unwind_)
- { BOOST_ASSERT( ctx); }
-
- holder( holder const& other) :
- ctx( other.ctx), force_unwind( other.force_unwind)
- {}
-
- holder & operator=( holder const& other)
- {
- if ( this == & other) return * this;
- ctx = other.ctx;
- force_unwind = other.force_unwind;
- return * this;
- }
-};
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_DETAIL_HOLDER_H
diff --git a/3party/boost/boost/coroutine/detail/param.hpp b/3party/boost/boost/coroutine/detail/param.hpp
deleted file mode 100644
index 4e8f1fecb3..0000000000
--- a/3party/boost/boost/coroutine/detail/param.hpp
+++ /dev/null
@@ -1,46 +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_COROUTINES_DETAIL_PARAM_H
-#define BOOST_COROUTINES_DETAIL_PARAM_H
-
-#include <boost/config.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/or.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/is_reference.hpp>
-#include <boost/type_traits/is_scalar.hpp>
-#include <boost/type_traits/is_stateless.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template< typename T >
-struct param :
- public mpl::eval_if<
- mpl::or_<
- is_scalar< T >,
- is_stateless< T >,
- is_reference< T >
- >,
- mpl::identity< T >,
- add_reference< T >
- >
-{};
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_DETAIL_PARAM_H
diff --git a/3party/boost/boost/coroutine/detail/parameters.hpp b/3party/boost/boost/coroutine/detail/parameters.hpp
new file mode 100644
index 0000000000..8bad3910a9
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/parameters.hpp
@@ -0,0 +1,102 @@
+
+// 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_COROUTINES_DETAIL_PARAMETERS_H
+#define BOOST_COROUTINES_DETAIL_PARAMETERS_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/flags.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename Data >
+struct parameters
+{
+ Data * data;
+ bool do_unwind;
+ void * coro;
+
+ parameters() :
+ data( 0), do_unwind( false), coro( 0)
+ {}
+
+ explicit parameters( void * coro_) :
+ data( 0), do_unwind( false), coro( coro_)
+ { BOOST_ASSERT( 0 != coro); }
+
+ explicit parameters( Data * data_, void * coro_) :
+ data( data_), do_unwind( false), coro( coro_)
+ {
+ BOOST_ASSERT( 0 != data);
+ BOOST_ASSERT( 0 != coro);
+ }
+
+ explicit parameters( unwind_t::flag_t) :
+ data( 0), do_unwind( true)
+ {}
+};
+
+template< typename Data >
+struct parameters< Data & >
+{
+ Data * data;
+ bool do_unwind;
+ void * coro;
+
+ parameters() :
+ data( 0), do_unwind( false), coro( 0)
+ {}
+
+ explicit parameters( void * coro_) :
+ data( 0), do_unwind( false), coro( coro_)
+ { BOOST_ASSERT( 0 != coro); }
+
+ explicit parameters( Data * data_, void * coro_) :
+ data( data_), do_unwind( false), coro( coro_)
+ {
+ BOOST_ASSERT( 0 != data);
+ BOOST_ASSERT( 0 != coro);
+ }
+
+ explicit parameters( unwind_t::flag_t) :
+ data( 0), do_unwind( true), coro( 0)
+ {}
+};
+
+template<>
+struct parameters< void >
+{
+ bool do_unwind;
+ void * coro;
+
+ parameters() :
+ do_unwind( false), coro(0)
+ {}
+
+ parameters( void * coro_) :
+ do_unwind( false), coro( coro_)
+ { BOOST_ASSERT( 0 != coro); }
+
+ explicit parameters( unwind_t::flag_t) :
+ do_unwind( true), coro( 0)
+ {}
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_PARAMETERS_H
diff --git a/3party/boost/boost/coroutine/detail/pull_coroutine_impl.hpp b/3party/boost/boost/coroutine/detail/pull_coroutine_impl.hpp
new file mode 100644
index 0000000000..97a18bf005
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/pull_coroutine_impl.hpp
@@ -0,0 +1,355 @@
+
+// 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_COROUTINES_DETAIL_PULL_COROUTINE_IMPL_H
+#define BOOST_COROUTINES_DETAIL_PULL_COROUTINE_IMPL_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/exception_ptr.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/utility.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/coroutine_context.hpp>
+#include <boost/coroutine/detail/flags.hpp>
+#include <boost/coroutine/detail/parameters.hpp>
+#include <boost/coroutine/detail/trampoline_pull.hpp>
+#include <boost/coroutine/exceptions.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+
+struct stack_context;
+
+namespace detail {
+
+template< typename R >
+class pull_coroutine_impl : private noncopyable
+{
+protected:
+ int flags_;
+ exception_ptr except_;
+ coroutine_context * caller_;
+ coroutine_context * callee_;
+ R * result_;
+
+public:
+ typedef parameters< R > param_type;
+
+ pull_coroutine_impl( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ flags_( 0),
+ except_(),
+ caller_( caller),
+ callee_( callee),
+ result_( 0)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ pull_coroutine_impl( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu,
+ R * result) :
+ flags_( 0),
+ except_(),
+ caller_( caller),
+ callee_( callee),
+ result_( result)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ virtual ~pull_coroutine_impl() {}
+
+ bool force_unwind() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_force_unwind); }
+
+ bool unwind_requested() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_unwind_stack); }
+
+ bool preserve_fpu() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_preserve_fpu); }
+
+ bool is_started() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_started); }
+
+ bool is_running() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_running); }
+
+ bool is_complete() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_complete); }
+
+ void unwind_stack() BOOST_NOEXCEPT
+ {
+ if ( is_started() && ! is_complete() && force_unwind() )
+ {
+ flags_ |= flag_unwind_stack;
+ param_type to( unwind_t::force_unwind);
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_unwind_stack;
+
+ BOOST_ASSERT( is_complete() );
+ }
+ }
+
+ void pull()
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ |= flag_running;
+ param_type to( this);
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ &= ~flag_running;
+ result_ = from->data;
+ if ( from->do_unwind) throw forced_unwind();
+ if ( except_) rethrow_exception( except_);
+ }
+
+ bool has_result() const
+ { return 0 != result_; }
+
+ R get() const
+ {
+ if ( ! has_result() )
+ boost::throw_exception(
+ invalid_result() );
+ return * result_;
+ }
+
+ R * get_pointer() const
+ {
+ if ( ! has_result() )
+ boost::throw_exception(
+ invalid_result() );
+ return result_;
+ }
+
+ virtual void destroy() = 0;
+};
+
+template< typename R >
+class pull_coroutine_impl< R & > : private noncopyable
+{
+protected:
+ int flags_;
+ exception_ptr except_;
+ coroutine_context * caller_;
+ coroutine_context * callee_;
+ R * result_;
+
+public:
+ typedef parameters< R & > param_type;
+
+ pull_coroutine_impl( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ flags_( 0),
+ except_(),
+ caller_( caller),
+ callee_( callee),
+ result_( 0)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ pull_coroutine_impl( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu,
+ R * result) :
+ flags_( 0),
+ except_(),
+ caller_( caller),
+ callee_( callee),
+ result_( result)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ virtual ~pull_coroutine_impl() {}
+
+ bool force_unwind() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_force_unwind); }
+
+ bool unwind_requested() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_unwind_stack); }
+
+ bool preserve_fpu() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_preserve_fpu); }
+
+ bool is_started() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_started); }
+
+ bool is_running() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_running); }
+
+ bool is_complete() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_complete); }
+
+ void unwind_stack() BOOST_NOEXCEPT
+ {
+ if ( is_started() && ! is_complete() && force_unwind() )
+ {
+ flags_ |= flag_unwind_stack;
+ param_type to( unwind_t::force_unwind);
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_unwind_stack;
+
+ BOOST_ASSERT( is_complete() );
+ }
+ }
+
+ void pull()
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ |= flag_running;
+ param_type to( this);
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ &= ~flag_running;
+ result_ = from->data;
+ if ( from->do_unwind) throw forced_unwind();
+ if ( except_) rethrow_exception( except_);
+ }
+
+ bool has_result() const
+ { return 0 != result_; }
+
+ R & get() const
+ {
+ if ( ! has_result() )
+ boost::throw_exception(
+ invalid_result() );
+ return * result_;
+ }
+
+ R * get_pointer() const
+ {
+ if ( ! has_result() )
+ boost::throw_exception(
+ invalid_result() );
+ return result_;
+ }
+
+ virtual void destroy() = 0;
+};
+
+template<>
+class pull_coroutine_impl< void > : private noncopyable
+{
+protected:
+ int flags_;
+ exception_ptr except_;
+ coroutine_context * caller_;
+ coroutine_context * callee_;
+
+public:
+ typedef parameters< void > param_type;
+
+ pull_coroutine_impl( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ flags_( 0),
+ except_(),
+ caller_( caller),
+ callee_( callee)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ virtual ~pull_coroutine_impl() {}
+
+ bool force_unwind() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_force_unwind); }
+
+ bool unwind_requested() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_unwind_stack); }
+
+ bool preserve_fpu() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_preserve_fpu); }
+
+ bool is_started() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_started); }
+
+ bool is_running() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_running); }
+
+ bool is_complete() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_complete); }
+
+ void unwind_stack() BOOST_NOEXCEPT
+ {
+ if ( is_started() && ! is_complete() && force_unwind() )
+ {
+ flags_ |= flag_unwind_stack;
+ param_type to( unwind_t::force_unwind);
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_unwind_stack;
+
+ BOOST_ASSERT( is_complete() );
+ }
+ }
+
+ void pull()
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ |= flag_running;
+ param_type to( this);
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ &= ~flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ if ( except_) rethrow_exception( except_);
+ }
+
+ virtual void destroy() = 0;
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_PULL_COROUTINE_IMPL_H
diff --git a/3party/boost/boost/coroutine/detail/pull_coroutine_object.hpp b/3party/boost/boost/coroutine/detail/pull_coroutine_object.hpp
new file mode 100644
index 0000000000..acc9a570a3
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/pull_coroutine_object.hpp
@@ -0,0 +1,324 @@
+
+// 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_COROUTINES_DETAIL_PULL_COROUTINE_OBJECT_H
+#define BOOST_COROUTINES_DETAIL_PULL_COROUTINE_OBJECT_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/exception_ptr.hpp>
+#include <boost/move/move.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/coroutine_context.hpp>
+#include <boost/coroutine/detail/flags.hpp>
+#include <boost/coroutine/detail/pull_coroutine_impl.hpp>
+#include <boost/coroutine/detail/trampoline_pull.hpp>
+#include <boost/coroutine/exceptions.hpp>
+#include <boost/coroutine/flags.hpp>
+#include <boost/coroutine/stack_context.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4355)
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+struct pull_coroutine_context
+{
+ coroutine_context caller;
+ coroutine_context callee;
+
+ template< typename Coro >
+ pull_coroutine_context( stack_context const& stack_ctx, Coro *) :
+ caller(),
+ callee( trampoline_pull< Coro >, stack_ctx)
+ {}
+};
+
+template< typename PushCoro, typename R, typename Fn, typename StackAllocator >
+class pull_coroutine_object : private pull_coroutine_context,
+ public pull_coroutine_impl< R >
+{
+private:
+ typedef pull_coroutine_context ctx_t;
+ typedef pull_coroutine_impl< R > base_t;
+ typedef pull_coroutine_object< PushCoro, R, Fn, StackAllocator > obj_t;
+
+ Fn fn_;
+ stack_context stack_ctx_;
+ StackAllocator stack_alloc_;
+
+ static void deallocate_( obj_t * obj)
+ {
+ stack_context stack_ctx( obj->stack_ctx_);
+ StackAllocator stack_alloc( obj->stack_alloc_);
+ obj->unwind_stack();
+ obj->~obj_t();
+ stack_alloc.deallocate( stack_ctx);
+ }
+
+public:
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ pull_coroutine_object( Fn fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+ fn_( fn),
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+#endif
+
+ pull_coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn_( fn),
+#else
+ fn_( forward< Fn >( fn) ),
+#endif
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+
+ void run()
+ {
+ BOOST_ASSERT( ! base_t::unwind_requested() );
+
+ base_t::flags_ |= flag_started;
+ base_t::flags_ |= flag_running;
+
+ // create push_coroutine
+ typename PushCoro::synth_type b( & this->callee, & this->caller, false, base_t::preserve_fpu() );
+ PushCoro push_coro( synthesized_t::syntesized, b);
+ try
+ { fn_( push_coro); }
+ catch ( forced_unwind const&)
+ {}
+ catch (...)
+ { base_t::except_ = current_exception(); }
+
+ base_t::flags_ |= flag_complete;
+ base_t::flags_ &= ~flag_running;
+ typename base_t::param_type to;
+ this->callee.jump(
+ this->caller,
+ reinterpret_cast< intptr_t >( & to),
+ base_t::preserve_fpu() );
+ BOOST_ASSERT_MSG( false, "pull_coroutine is complete");
+ }
+
+ void destroy()
+ { deallocate_( this); }
+};
+
+template< typename PushCoro, typename R, typename Fn, typename StackAllocator >
+class pull_coroutine_object< PushCoro, R &, Fn, StackAllocator > : private pull_coroutine_context,
+ public pull_coroutine_impl< R & >
+{
+private:
+ typedef pull_coroutine_context ctx_t;
+ typedef pull_coroutine_impl< R & > base_t;
+ typedef pull_coroutine_object< PushCoro, R &, Fn, StackAllocator > obj_t;
+
+ Fn fn_;
+ stack_context stack_ctx_;
+ StackAllocator stack_alloc_;
+
+ static void deallocate_( obj_t * obj)
+ {
+ stack_context stack_ctx( obj->stack_ctx_);
+ StackAllocator stack_alloc( obj->stack_alloc_);
+ obj->unwind_stack();
+ obj->~obj_t();
+ stack_alloc.deallocate( stack_ctx);
+ }
+
+public:
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ pull_coroutine_object( Fn fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+ fn_( fn),
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+#endif
+
+ pull_coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn_( fn),
+#else
+ fn_( forward< Fn >( fn) ),
+#endif
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+
+ void run()
+ {
+ BOOST_ASSERT( ! base_t::unwind_requested() );
+
+ base_t::flags_ |= flag_started;
+ base_t::flags_ |= flag_running;
+
+ // create push_coroutine
+ typename PushCoro::synth_type b( & this->callee, & this->caller, false, base_t::preserve_fpu() );
+ PushCoro push_coro( synthesized_t::syntesized, b);
+ try
+ { fn_( push_coro); }
+ catch ( forced_unwind const&)
+ {}
+ catch (...)
+ { base_t::except_ = current_exception(); }
+
+ base_t::flags_ |= flag_complete;
+ base_t::flags_ &= ~flag_running;
+ typename base_t::param_type to;
+ this->callee.jump(
+ this->caller,
+ reinterpret_cast< intptr_t >( & to),
+ base_t::preserve_fpu() );
+ BOOST_ASSERT_MSG( false, "pull_coroutine is complete");
+ }
+
+ void destroy()
+ { deallocate_( this); }
+};
+
+template< typename PushCoro, typename Fn, typename StackAllocator >
+class pull_coroutine_object< PushCoro, void, Fn, StackAllocator > : private pull_coroutine_context,
+ public pull_coroutine_impl< void >
+{
+private:
+ typedef pull_coroutine_context ctx_t;
+ typedef pull_coroutine_impl< void > base_t;
+ typedef pull_coroutine_object< PushCoro, void, Fn, StackAllocator > obj_t;
+
+ Fn fn_;
+ stack_context stack_ctx_;
+ StackAllocator stack_alloc_;
+
+ static void deallocate_( obj_t * obj)
+ {
+ stack_context stack_ctx( obj->stack_ctx_);
+ StackAllocator stack_alloc( obj->stack_alloc_);
+ obj->unwind_stack();
+ obj->~obj_t();
+ stack_alloc.deallocate( stack_ctx);
+ }
+
+public:
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ pull_coroutine_object( Fn fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+ fn_( fn),
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+#endif
+
+ pull_coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn_( fn),
+#else
+ fn_( forward< Fn >( fn) ),
+#endif
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+
+ void run()
+ {
+ BOOST_ASSERT( ! base_t::unwind_requested() );
+
+ base_t::flags_ |= flag_started;
+ base_t::flags_ |= flag_running;
+
+ // create push_coroutine
+ typename PushCoro::synth_type b( & this->callee, & this->caller, false, base_t::preserve_fpu() );
+ PushCoro push_coro( synthesized_t::syntesized, b);
+ try
+ { fn_( push_coro); }
+ catch ( forced_unwind const&)
+ {}
+ catch (...)
+ { base_t::except_ = current_exception(); }
+
+ base_t::flags_ |= flag_complete;
+ base_t::flags_ &= ~flag_running;
+ typename base_t::param_type to;
+ this->callee.jump(
+ this->caller,
+ reinterpret_cast< intptr_t >( & to),
+ base_t::preserve_fpu() );
+ BOOST_ASSERT_MSG( false, "pull_coroutine is complete");
+ }
+
+ void destroy()
+ { deallocate_( this); }
+};
+
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_PULL_COROUTINE_OBJECT_H
diff --git a/3party/boost/boost/coroutine/detail/pull_coroutine_synthesized.hpp b/3party/boost/boost/coroutine/detail/pull_coroutine_synthesized.hpp
new file mode 100644
index 0000000000..1736c86a97
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/pull_coroutine_synthesized.hpp
@@ -0,0 +1,80 @@
+
+// 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_COROUTINES_DETAIL_PULL_COROUTINE_SYNTHESIZED_H
+#define BOOST_COROUTINES_DETAIL_PULL_COROUTINE_SYNTHESIZED_H
+
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/coroutine_context.hpp>
+#include <boost/coroutine/detail/pull_coroutine_impl.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename R >
+class pull_coroutine_synthesized : public pull_coroutine_impl< R >
+{
+private:
+ typedef pull_coroutine_impl< R > impl_t;
+
+public:
+ pull_coroutine_synthesized( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu,
+ R * result) :
+ impl_t( caller, callee, unwind, preserve_fpu, result)
+ {}
+
+ void destroy() {}
+};
+
+template< typename R >
+class pull_coroutine_synthesized< R & > : public pull_coroutine_impl< R & >
+{
+private:
+ typedef pull_coroutine_impl< R & > impl_t;
+
+public:
+ pull_coroutine_synthesized( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu,
+ R * result) :
+ impl_t( caller, callee, unwind, preserve_fpu, result)
+ {}
+
+ void destroy() {}
+};
+
+template<>
+class pull_coroutine_synthesized< void > : public pull_coroutine_impl< void >
+{
+private:
+ typedef pull_coroutine_impl< void > impl_t;
+
+public:
+ pull_coroutine_synthesized( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ impl_t( caller, callee, unwind, preserve_fpu)
+ {}
+
+ void destroy() {}
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_PULL_COROUTINE_SYNTHESIZED_H
diff --git a/3party/boost/boost/coroutine/detail/push_coroutine_impl.hpp b/3party/boost/boost/coroutine/detail/push_coroutine_impl.hpp
new file mode 100644
index 0000000000..da052fc4e1
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/push_coroutine_impl.hpp
@@ -0,0 +1,295 @@
+
+// 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_COROUTINES_DETAIL_PUSH_COROUTINE_IMPL_H
+#define BOOST_COROUTINES_DETAIL_PUSH_COROUTINE_IMPL_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/exception_ptr.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/utility.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/coroutine_context.hpp>
+#include <boost/coroutine/detail/flags.hpp>
+#include <boost/coroutine/detail/parameters.hpp>
+#include <boost/coroutine/detail/trampoline_push.hpp>
+#include <boost/coroutine/exceptions.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+
+struct stack_context;
+
+namespace detail {
+
+template< typename Arg >
+class push_coroutine_impl : private noncopyable
+{
+protected:
+ int flags_;
+ exception_ptr except_;
+ coroutine_context * caller_;
+ coroutine_context * callee_;
+
+public:
+ typedef parameters< Arg > param_type;
+
+ push_coroutine_impl( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ flags_( 0),
+ except_(),
+ caller_( caller),
+ callee_( callee)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ bool force_unwind() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_force_unwind); }
+
+ bool unwind_requested() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_unwind_stack); }
+
+ bool preserve_fpu() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_preserve_fpu); }
+
+ bool is_started() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_started); }
+
+ bool is_running() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_running); }
+
+ bool is_complete() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_complete); }
+
+ void unwind_stack() BOOST_NOEXCEPT
+ {
+ if ( is_started() && ! is_complete() && force_unwind() )
+ {
+ flags_ |= flag_unwind_stack;
+ param_type to( unwind_t::force_unwind);
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_unwind_stack;
+
+ BOOST_ASSERT( is_complete() );
+ }
+ }
+
+ void push( Arg const& arg)
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ |= flag_running;
+ param_type to( const_cast< Arg * >( & arg), this);
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ &= ~flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ if ( except_) rethrow_exception( except_);
+ }
+
+ void push( BOOST_RV_REF( Arg) arg)
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ |= flag_running;
+ param_type to( const_cast< Arg * >( & arg), this);
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ &= ~flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ if ( except_) rethrow_exception( except_);
+ }
+
+ virtual void destroy() = 0;
+};
+
+template< typename Arg >
+class push_coroutine_impl< Arg & > : private noncopyable
+{
+protected:
+ int flags_;
+ exception_ptr except_;
+ coroutine_context * caller_;
+ coroutine_context * callee_;
+
+public:
+ typedef parameters< Arg & > param_type;
+
+ push_coroutine_impl( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ flags_( 0),
+ except_(),
+ caller_( caller),
+ callee_( callee)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ bool force_unwind() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_force_unwind); }
+
+ bool unwind_requested() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_unwind_stack); }
+
+ bool preserve_fpu() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_preserve_fpu); }
+
+ bool is_started() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_started); }
+
+ bool is_running() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_running); }
+
+ bool is_complete() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_complete); }
+
+ void unwind_stack() BOOST_NOEXCEPT
+ {
+ if ( is_started() && ! is_complete() && force_unwind() )
+ {
+ flags_ |= flag_unwind_stack;
+ param_type to( unwind_t::force_unwind);
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_unwind_stack;
+
+ BOOST_ASSERT( is_complete() );
+ }
+ }
+
+ void push( Arg & arg)
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ |= flag_running;
+ param_type to( & arg, this);
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ &= ~flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ if ( except_) rethrow_exception( except_);
+ }
+
+ virtual void destroy() = 0;
+};
+
+template<>
+class push_coroutine_impl< void > : private noncopyable
+{
+protected:
+ int flags_;
+ exception_ptr except_;
+ coroutine_context * caller_;
+ coroutine_context * callee_;
+
+public:
+ typedef parameters< void > param_type;
+
+ push_coroutine_impl( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ flags_( 0),
+ except_(),
+ caller_( caller),
+ callee_( callee)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ bool force_unwind() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_force_unwind); }
+
+ bool unwind_requested() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_unwind_stack); }
+
+ bool preserve_fpu() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_preserve_fpu); }
+
+ bool is_started() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_started); }
+
+ bool is_running() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_running); }
+
+ bool is_complete() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_complete); }
+
+ void unwind_stack() BOOST_NOEXCEPT
+ {
+ if ( is_started() && ! is_complete() && force_unwind() )
+ {
+ flags_ |= flag_unwind_stack;
+ param_type to( unwind_t::force_unwind);
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_unwind_stack;
+
+ BOOST_ASSERT( is_complete() );
+ }
+ }
+
+ void push()
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ |= flag_running;
+ param_type to( this);
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ caller_->jump(
+ * callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ &= ~flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ if ( except_) rethrow_exception( except_);
+ }
+
+ virtual void destroy() = 0;
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_PUSH_COROUTINE_IMPL_H
diff --git a/3party/boost/boost/coroutine/detail/push_coroutine_object.hpp b/3party/boost/boost/coroutine/detail/push_coroutine_object.hpp
new file mode 100644
index 0000000000..1a0aa7e3d8
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/push_coroutine_object.hpp
@@ -0,0 +1,336 @@
+
+// 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_COROUTINES_DETAIL_PUSH_COROUTINE_OBJECT_H
+#define BOOST_COROUTINES_DETAIL_PUSH_COROUTINE_OBJECT_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/exception_ptr.hpp>
+#include <boost/move/move.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/coroutine_context.hpp>
+#include <boost/coroutine/detail/flags.hpp>
+#include <boost/coroutine/detail/push_coroutine_impl.hpp>
+#include <boost/coroutine/detail/trampoline_push.hpp>
+#include <boost/coroutine/exceptions.hpp>
+#include <boost/coroutine/flags.hpp>
+#include <boost/coroutine/stack_context.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4355)
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+struct push_coroutine_context
+{
+ coroutine_context caller;
+ coroutine_context callee;
+
+ template< typename Coro >
+ push_coroutine_context( stack_context const& stack_ctx, Coro *) :
+ caller(),
+ callee( trampoline_push< Coro >, stack_ctx)
+ {}
+};
+
+struct push_coroutine_context_void
+{
+ coroutine_context caller;
+ coroutine_context callee;
+
+ template< typename Coro >
+ push_coroutine_context_void( stack_context const& stack_ctx, Coro *) :
+ caller(),
+ callee( trampoline_push_void< Coro >, stack_ctx)
+ {}
+};
+
+template< typename PullCoro, typename R, typename Fn, typename StackAllocator >
+class push_coroutine_object : private push_coroutine_context,
+ public push_coroutine_impl< R >
+{
+private:
+ typedef push_coroutine_context ctx_t;
+ typedef push_coroutine_impl< R > base_t;
+ typedef push_coroutine_object< PullCoro, R, Fn, StackAllocator > obj_t;
+
+ Fn fn_;
+ stack_context stack_ctx_;
+ StackAllocator stack_alloc_;
+
+ static void deallocate_( obj_t * obj)
+ {
+ stack_context stack_ctx( obj->stack_ctx_);
+ StackAllocator stack_alloc( obj->stack_alloc_);
+ obj->unwind_stack();
+ obj->~obj_t();
+ stack_alloc.deallocate( stack_ctx);
+ }
+
+public:
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ push_coroutine_object( Fn fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+ fn_( fn),
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+#endif
+
+ push_coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn_( fn),
+#else
+ fn_( forward< Fn >( fn) ),
+#endif
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+
+ void run( R * result)
+ {
+ BOOST_ASSERT( ! base_t::unwind_requested() );
+
+ base_t::flags_ |= flag_started;
+ base_t::flags_ |= flag_running;
+
+ // create push_coroutine
+ typename PullCoro::synth_type b( & this->callee, & this->caller, false, base_t::preserve_fpu(), result);
+ PullCoro pull_coro( synthesized_t::syntesized, b);
+ try
+ { fn_( pull_coro); }
+ catch ( forced_unwind const&)
+ {}
+ catch (...)
+ { base_t::except_ = current_exception(); }
+
+ base_t::flags_ |= flag_complete;
+ base_t::flags_ &= ~flag_running;
+ typename base_t::param_type to;
+ this->callee.jump(
+ this->caller,
+ reinterpret_cast< intptr_t >( & to),
+ base_t::preserve_fpu() );
+ BOOST_ASSERT_MSG( false, "pull_coroutine is complete");
+ }
+
+ void destroy()
+ { deallocate_( this); }
+};
+
+template< typename PullCoro, typename R, typename Fn, typename StackAllocator >
+class push_coroutine_object< PullCoro, R &, Fn, StackAllocator > : private push_coroutine_context,
+ public push_coroutine_impl< R & >
+{
+private:
+ typedef push_coroutine_context ctx_t;
+ typedef push_coroutine_impl< R & > base_t;
+ typedef push_coroutine_object< PullCoro, R &, Fn, StackAllocator > obj_t;
+
+ Fn fn_;
+ stack_context stack_ctx_;
+ StackAllocator stack_alloc_;
+
+ static void deallocate_( obj_t * obj)
+ {
+ stack_context stack_ctx( obj->stack_ctx_);
+ StackAllocator stack_alloc( obj->stack_alloc_);
+ obj->unwind_stack();
+ obj->~obj_t();
+ stack_alloc.deallocate( stack_ctx);
+ }
+
+public:
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ push_coroutine_object( Fn fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+ fn_( fn),
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+#endif
+
+ push_coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn_( fn),
+#else
+ fn_( forward< Fn >( fn) ),
+#endif
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+
+ void run( R * result)
+ {
+ BOOST_ASSERT( ! base_t::unwind_requested() );
+
+ base_t::flags_ |= flag_started;
+ base_t::flags_ |= flag_running;
+
+ // create push_coroutine
+ typename PullCoro::synth_type b( & this->callee, & this->caller, false, base_t::preserve_fpu(), result);
+ PullCoro push_coro( synthesized_t::syntesized, b);
+ try
+ { fn_( push_coro); }
+ catch ( forced_unwind const&)
+ {}
+ catch (...)
+ { base_t::except_ = current_exception(); }
+
+ base_t::flags_ |= flag_complete;
+ base_t::flags_ &= ~flag_running;
+ typename base_t::param_type to;
+ this->callee.jump(
+ this->caller,
+ reinterpret_cast< intptr_t >( & to),
+ base_t::preserve_fpu() );
+ BOOST_ASSERT_MSG( false, "pull_coroutine is complete");
+ }
+
+ void destroy()
+ { deallocate_( this); }
+};
+
+template< typename PullCoro, typename Fn, typename StackAllocator >
+class push_coroutine_object< PullCoro, void, Fn, StackAllocator > : private push_coroutine_context_void,
+ public push_coroutine_impl< void >
+{
+private:
+ typedef push_coroutine_context_void ctx_t;
+ typedef push_coroutine_impl< void > base_t;
+ typedef push_coroutine_object< PullCoro, void, Fn, StackAllocator > obj_t;
+
+ Fn fn_;
+ stack_context stack_ctx_;
+ StackAllocator stack_alloc_;
+
+ static void deallocate_( obj_t * obj)
+ {
+ stack_context stack_ctx( obj->stack_ctx_);
+ StackAllocator stack_alloc( obj->stack_alloc_);
+ obj->unwind_stack();
+ obj->~obj_t();
+ stack_alloc.deallocate( stack_ctx);
+ }
+
+public:
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ push_coroutine_object( Fn fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+ fn_( fn),
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+#endif
+
+ push_coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ ctx_t( internal_stack_ctx, this),
+ base_t( & this->caller,
+ & this->callee,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn_( fn),
+#else
+ fn_( forward< Fn >( fn) ),
+#endif
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+
+ void run()
+ {
+ BOOST_ASSERT( ! base_t::unwind_requested() );
+
+ base_t::flags_ |= flag_started;
+ base_t::flags_ |= flag_running;
+
+ // create push_coroutine
+ typename PullCoro::synth_type b( & this->callee, & this->caller, false, base_t::preserve_fpu() );
+ PullCoro push_coro( synthesized_t::syntesized, b);
+ try
+ { fn_( push_coro); }
+ catch ( forced_unwind const&)
+ {}
+ catch (...)
+ { base_t::except_ = current_exception(); }
+
+ base_t::flags_ |= flag_complete;
+ base_t::flags_ &= ~flag_running;
+ typename base_t::param_type to;
+ this->callee.jump(
+ this->caller,
+ reinterpret_cast< intptr_t >( & to),
+ base_t::preserve_fpu() );
+ BOOST_ASSERT_MSG( false, "pull_coroutine is complete");
+ }
+
+ void destroy()
+ { deallocate_( this); }
+};
+
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_PUSH_COROUTINE_OBJECT_H
diff --git a/3party/boost/boost/coroutine/detail/push_coroutine_synthesized.hpp b/3party/boost/boost/coroutine/detail/push_coroutine_synthesized.hpp
new file mode 100644
index 0000000000..ac79a76346
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/push_coroutine_synthesized.hpp
@@ -0,0 +1,78 @@
+
+// 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_COROUTINES_DETAIL_PUSH_COROUTINE_SYNTHESIZED_H
+#define BOOST_COROUTINES_DETAIL_PUSH_COROUTINE_SYNTHESIZED_H
+
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/coroutine_context.hpp>
+#include <boost/coroutine/detail/push_coroutine_impl.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename R >
+class push_coroutine_synthesized : public push_coroutine_impl< R >
+{
+private:
+ typedef push_coroutine_impl< R > impl_t;
+
+public:
+ push_coroutine_synthesized( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ impl_t( caller, callee, unwind, preserve_fpu)
+ {}
+
+ void destroy() {}
+};
+
+template< typename R >
+class push_coroutine_synthesized< R & > : public push_coroutine_impl< R & >
+{
+private:
+ typedef push_coroutine_impl< R & > impl_t;
+
+public:
+ push_coroutine_synthesized( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ impl_t( caller, callee, unwind, preserve_fpu)
+ {}
+
+ void destroy() {}
+};
+
+template<>
+class push_coroutine_synthesized< void > : public push_coroutine_impl< void >
+{
+private:
+ typedef push_coroutine_impl< void > impl_t;
+
+public:
+ push_coroutine_synthesized( coroutine_context * caller,
+ coroutine_context * callee,
+ bool unwind, bool preserve_fpu) :
+ impl_t( caller, callee, unwind, preserve_fpu)
+ {}
+
+ void destroy() {}
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_PUSH_COROUTINE_SYNTHESIZED_H
diff --git a/3party/boost/boost/coroutine/detail/segmented_stack_allocator.hpp b/3party/boost/boost/coroutine/detail/segmented_stack_allocator.hpp
deleted file mode 100644
index 5afefa0cde..0000000000
--- a/3party/boost/boost/coroutine/detail/segmented_stack_allocator.hpp
+++ /dev/null
@@ -1,51 +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_COROUTINES_DETAIL_SEGMENTED_STACK_ALLOCATOR_H
-#define BOOST_COROUTINES_DETAIL_SEGMENTED_STACK_ALLOCATOR_H
-
-#include <cstddef>
-
-#include <boost/config.hpp>
-
-#include <boost/coroutine/detail/config.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-
-struct stack_context;
-
-namespace detail {
-
-#if defined(BOOST_USE_SEGMENTED_STACKS)
-class segmented_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( stack_context &, std::size_t = minimum_stacksize() );
-
- void deallocate( stack_context &);
-};
-#endif
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_DETAIL_SEGMENTED_STACK_ALLOCATOR_H
diff --git a/3party/boost/boost/coroutine/detail/setup.hpp b/3party/boost/boost/coroutine/detail/setup.hpp
new file mode 100644
index 0000000000..a776029e76
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/setup.hpp
@@ -0,0 +1,75 @@
+
+// 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_COROUTINES_DETAIL_SETUP_H
+#define BOOST_COROUTINES_DETAIL_SETUP_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/move/move.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/coroutine/attributes.hpp>
+#include <boost/coroutine/detail/coroutine_context.hpp>
+#include <boost/coroutine/detail/flags.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename Fn >
+struct setup
+{
+ struct dummy {};
+
+ Fn fn;
+ coroutine_context * caller;
+ coroutine_context * callee;
+ attributes attr;
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ setup( Fn fn_,
+ coroutine_context * caller_,
+ coroutine_context * callee_,
+ attributes const& attr_) :
+ fn( forward< Fn >( fn_) ),
+ caller( caller_),
+ callee( callee_),
+ attr( attr_)
+ {}
+#endif
+ setup( BOOST_RV_REF( Fn) fn_,
+ coroutine_context * caller_,
+ coroutine_context * callee_,
+ attributes const& attr_,
+ typename disable_if<
+ is_same< typename decay< Fn >::type, setup >,
+ dummy*
+ >::type = 0) :
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn( fn_),
+#else
+ fn( forward< Fn >( fn_) ),
+#endif
+ caller( caller_),
+ callee( callee_),
+ attr( attr_)
+ {}
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_SETUP_H
diff --git a/3party/boost/boost/coroutine/detail/standard_stack_allocator.hpp b/3party/boost/boost/coroutine/detail/standard_stack_allocator.hpp
deleted file mode 100644
index c20499bdff..0000000000
--- a/3party/boost/boost/coroutine/detail/standard_stack_allocator.hpp
+++ /dev/null
@@ -1,49 +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_COROUTINES_DETAIL_STANDARD_STACK_ALLOCATOR_H
-#define BOOST_COROUTINES_DETAIL_STANDARD_STACK_ALLOCATOR_H
-
-#include <cstddef>
-
-#include <boost/config.hpp>
-
-#include <boost/context/detail/config.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-
-struct stack_context;
-
-namespace detail {
-
-class standard_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( stack_context &, std::size_t);
-
- void deallocate( stack_context &);
-};
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_DETAIL_STANDARD_STACK_ALLOCATOR_H
diff --git a/3party/boost/boost/coroutine/detail/symmetric_coroutine_call.hpp b/3party/boost/boost/coroutine/detail/symmetric_coroutine_call.hpp
new file mode 100644
index 0000000000..8a6702a392
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/symmetric_coroutine_call.hpp
@@ -0,0 +1,822 @@
+
+// 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_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_CALL_H
+#define BOOST_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_CALL_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/move/move.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
+
+#include <boost/coroutine/attributes.hpp>
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/symmetric_coroutine_impl.hpp>
+#include <boost/coroutine/detail/symmetric_coroutine_object.hpp>
+#include <boost/coroutine/detail/symmetric_coroutine_yield.hpp>
+#include <boost/coroutine/stack_allocator.hpp>
+#include <boost/coroutine/stack_context.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename Arg >
+class symmetric_coroutine_call
+{
+private:
+ template< typename X >
+ friend class symmetric_coroutine_yield;
+
+ typedef symmetric_coroutine_impl< Arg > impl_type;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( symmetric_coroutine_call)
+
+ struct dummy {};
+
+ impl_type * impl_;
+
+public:
+ typedef Arg value_type;
+ typedef symmetric_coroutine_yield< Arg > yield_type;
+
+ symmetric_coroutine_call() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+ typedef void ( * coroutine_fn)( yield_type &);
+
+ explicit symmetric_coroutine_call( coroutine_fn fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg, coroutine_fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename StackAllocator >
+ explicit symmetric_coroutine_call( coroutine_fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg, coroutine_fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+# endif
+ template< typename Fn >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg, Fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg, Fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+#else
+ template< typename Fn >
+ explicit symmetric_coroutine_call( Fn fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg, Fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit symmetric_coroutine_call( Fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg, Fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg, Fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg, Fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+#endif
+
+ ~symmetric_coroutine_call()
+ {
+ if ( 0 != impl_)
+ {
+ impl_->destroy();
+ impl_ = 0;
+ }
+ }
+
+ symmetric_coroutine_call( BOOST_RV_REF( symmetric_coroutine_call) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ symmetric_coroutine_call & operator=( BOOST_RV_REF( symmetric_coroutine_call) other) BOOST_NOEXCEPT
+ {
+ symmetric_coroutine_call tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_ || impl_->is_complete() || impl_->is_running(); }
+
+ void swap( symmetric_coroutine_call & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ symmetric_coroutine_call & operator()( Arg arg) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( * this);
+
+ impl_->resume( arg);
+ return * this;
+ }
+};
+
+template< typename Arg >
+class symmetric_coroutine_call< Arg & >
+{
+private:
+ template< typename X >
+ friend class symmetric_coroutine_yield;
+
+ typedef symmetric_coroutine_impl< Arg & > impl_type;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( symmetric_coroutine_call)
+
+ struct dummy {};
+
+ impl_type * impl_;
+
+public:
+ typedef Arg value_type;
+ typedef symmetric_coroutine_yield< Arg & > yield_type;
+
+ symmetric_coroutine_call() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+ typedef void ( * coroutine_fn)( yield_type &);
+
+ explicit symmetric_coroutine_call( coroutine_fn fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg &, coroutine_fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename StackAllocator >
+ explicit symmetric_coroutine_call( coroutine_fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg &, coroutine_fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+# endif
+ template< typename Fn >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg &, Fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg &, Fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+#else
+ template< typename Fn >
+ explicit symmetric_coroutine_call( Fn fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg &, Fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit symmetric_coroutine_call( Fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg &, Fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg &, Fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< Arg &, Fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+#endif
+
+ ~symmetric_coroutine_call()
+ {
+ if ( 0 != impl_)
+ {
+ impl_->destroy();
+ impl_ = 0;
+ }
+ }
+
+ symmetric_coroutine_call( BOOST_RV_REF( symmetric_coroutine_call) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ symmetric_coroutine_call & operator=( BOOST_RV_REF( symmetric_coroutine_call) other) BOOST_NOEXCEPT
+ {
+ symmetric_coroutine_call tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_ || impl_->is_complete() || impl_->is_running(); }
+
+ void swap( symmetric_coroutine_call & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ symmetric_coroutine_call & operator()( Arg & arg) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( * this);
+
+ impl_->resume( arg);
+ return * this;
+ }
+};
+
+template<>
+class symmetric_coroutine_call< void >
+{
+private:
+ template< typename X >
+ friend class symmetric_coroutine_yield;
+
+ typedef symmetric_coroutine_impl< void > impl_type;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( symmetric_coroutine_call)
+
+ struct dummy {};
+
+ impl_type * impl_;
+
+public:
+ typedef void value_type;
+ typedef symmetric_coroutine_yield< void > yield_type;
+
+ symmetric_coroutine_call() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+# ifdef BOOST_MSVC
+ typedef void ( * coroutine_fn)( yield_type &);
+
+ explicit symmetric_coroutine_call( coroutine_fn fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< void, coroutine_fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename StackAllocator >
+ explicit symmetric_coroutine_call( coroutine_fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< void, coroutine_fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< coroutine_fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+# endif
+ template< typename Fn >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< void, Fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< void, Fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t(
+ forward< Fn >( fn), attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+#else
+ template< typename Fn >
+ explicit symmetric_coroutine_call( Fn fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< void, Fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit symmetric_coroutine_call( Fn fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< void, Fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs = attributes(),
+ stack_allocator stack_alloc = stack_allocator() ) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< void, Fn, stack_allocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+
+ template< typename Fn, typename StackAllocator >
+ explicit symmetric_coroutine_call( BOOST_RV_REF( Fn) fn,
+ attributes const& attrs,
+ StackAllocator stack_alloc) :
+ impl_( 0)
+ {
+ // create a stack-context
+ stack_context stack_ctx;
+ // allocate the coroutine-stack
+ stack_alloc.allocate( stack_ctx, attrs.size);
+ BOOST_ASSERT( 0 < stack_ctx.sp);
+ // typedef of internal coroutine-type
+ typedef symmetric_coroutine_object< void, Fn, StackAllocator > object_t;
+ // reserve space on top of coroutine-stack for internal coroutine-type
+ stack_context internal_stack_ctx;
+ internal_stack_ctx.sp = static_cast< char * >( stack_ctx.sp) - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.sp);
+ internal_stack_ctx.size = stack_ctx.size - sizeof( object_t);
+ BOOST_ASSERT( 0 < internal_stack_ctx.size);
+ // placement new for internal coroutine
+ impl_ = new ( internal_stack_ctx.sp) object_t( fn, attrs, stack_ctx, internal_stack_ctx, stack_alloc);
+ BOOST_ASSERT( impl_);
+ }
+#endif
+
+ ~symmetric_coroutine_call()
+ {
+ if ( 0 != impl_)
+ {
+ impl_->destroy();
+ impl_ = 0;
+ }
+ }
+
+ symmetric_coroutine_call( BOOST_RV_REF( symmetric_coroutine_call) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ symmetric_coroutine_call & operator=( BOOST_RV_REF( symmetric_coroutine_call) other) BOOST_NOEXCEPT
+ {
+ symmetric_coroutine_call tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_ || impl_->is_complete() || impl_->is_running(); }
+
+ void swap( symmetric_coroutine_call & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ symmetric_coroutine_call & operator()() BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( * this);
+
+ impl_->resume();
+ return * this;
+ }
+};
+
+template< typename Arg >
+void swap( symmetric_coroutine_call< Arg > & l,
+ symmetric_coroutine_call< Arg > & r)
+{ l.swap( r); }
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_CALL_H
diff --git a/3party/boost/boost/coroutine/detail/symmetric_coroutine_impl.hpp b/3party/boost/boost/coroutine/detail/symmetric_coroutine_impl.hpp
new file mode 100644
index 0000000000..5a1e0529c4
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/symmetric_coroutine_impl.hpp
@@ -0,0 +1,472 @@
+
+// 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_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_IMPL_H
+#define BOOST_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_IMPL_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/utility.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/coroutine_context.hpp>
+#include <boost/coroutine/detail/flags.hpp>
+#include <boost/coroutine/detail/parameters.hpp>
+#include <boost/coroutine/detail/trampoline.hpp>
+#include <boost/coroutine/exceptions.hpp>
+#include <boost/coroutine/stack_context.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename R >
+class symmetric_coroutine_impl : private noncopyable
+{
+public:
+ typedef parameters< R > param_type;
+
+ symmetric_coroutine_impl( stack_context const& stack_ctx,
+ bool unwind, bool preserve_fpu) BOOST_NOEXCEPT :
+ flags_( 0),
+ caller_(),
+ callee_( trampoline< symmetric_coroutine_impl< R > >, stack_ctx)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ virtual ~symmetric_coroutine_impl() {}
+
+ bool force_unwind() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_force_unwind); }
+
+ bool unwind_requested() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_unwind_stack); }
+
+ bool preserve_fpu() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_preserve_fpu); }
+
+ bool is_started() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_started); }
+
+ bool is_running() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_running); }
+
+ bool is_complete() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_complete); }
+
+ void unwind_stack() BOOST_NOEXCEPT
+ {
+ if ( is_started() && ! is_complete() && force_unwind() )
+ {
+ flags_ |= flag_unwind_stack;
+ flags_ |= flag_running;
+ param_type to( unwind_t::force_unwind);
+ caller_.jump(
+ callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_running;
+ flags_ &= ~flag_unwind_stack;
+
+ BOOST_ASSERT( is_complete() );
+ }
+ }
+
+ void resume( R r) BOOST_NOEXCEPT
+ {
+ param_type to( const_cast< R * >( & r), this);
+ resume_( & to);
+ }
+
+ R * yield()
+ {
+ BOOST_ASSERT( is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ &= ~flag_running;
+ param_type to;
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ callee_.jump(
+ caller_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ |= flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ BOOST_ASSERT( from->data);
+ return from->data;
+ }
+
+ template< typename X >
+ R * yield_to( symmetric_coroutine_impl< X > * other, X x)
+ {
+ typename symmetric_coroutine_impl< X >::param_type to( & x, other);
+ return yield_to_( other, & to);
+ }
+
+ template< typename X >
+ R * yield_to( symmetric_coroutine_impl< X & > * other, X & x)
+ {
+ typename symmetric_coroutine_impl< X & >::param_type to( & x, other);
+ return yield_to_( other, & to);
+ }
+
+ template< typename X >
+ R * yield_to( symmetric_coroutine_impl< X > * other)
+ {
+ typename symmetric_coroutine_impl< X >::param_type to( other);
+ return yield_to_( other, & to);
+ }
+
+ virtual void run( R *) BOOST_NOEXCEPT = 0;
+
+ virtual void destroy() = 0;
+
+protected:
+ template< typename X >
+ friend class symmetric_coroutine_impl;
+
+ int flags_;
+ coroutine_context caller_;
+ coroutine_context callee_;
+
+ void resume_( param_type * to) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ |= flag_running;
+ caller_.jump(
+ callee_,
+ reinterpret_cast< intptr_t >( to),
+ preserve_fpu() );
+ flags_ &= ~flag_running;
+ }
+
+ template< typename Other >
+ R * yield_to_( Other * other, typename Other::param_type * to)
+ {
+ BOOST_ASSERT( is_running() );
+ BOOST_ASSERT( ! is_complete() );
+ BOOST_ASSERT( ! other->is_running() );
+ BOOST_ASSERT( ! other->is_complete() );
+
+ other->caller_ = caller_;
+ flags_ &= ~flag_running;
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ callee_.jump(
+ other->callee_,
+ reinterpret_cast< intptr_t >( to),
+ preserve_fpu() ) ) );
+ flags_ |= flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ BOOST_ASSERT( from->data);
+ return from->data;
+ }
+};
+
+template< typename R >
+class symmetric_coroutine_impl< R & > : private noncopyable
+{
+public:
+ typedef parameters< R & > param_type;
+
+ symmetric_coroutine_impl( stack_context const& stack_ctx,
+ bool unwind, bool preserve_fpu) BOOST_NOEXCEPT :
+ flags_( 0),
+ caller_(),
+ callee_( trampoline< symmetric_coroutine_impl< R > >, stack_ctx)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ virtual ~symmetric_coroutine_impl() {}
+
+ bool force_unwind() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_force_unwind); }
+
+ bool unwind_requested() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_unwind_stack); }
+
+ bool preserve_fpu() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_preserve_fpu); }
+
+ bool is_started() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_started); }
+
+ bool is_running() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_running); }
+
+ bool is_complete() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_complete); }
+
+ void unwind_stack() BOOST_NOEXCEPT
+ {
+ if ( is_started() && ! is_complete() && force_unwind() )
+ {
+ flags_ |= flag_unwind_stack;
+ flags_ |= flag_running;
+ param_type to( unwind_t::force_unwind);
+ caller_.jump(
+ callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_running;
+ flags_ &= ~flag_unwind_stack;
+
+ BOOST_ASSERT( is_complete() );
+ }
+ }
+
+ void resume( R & arg) BOOST_NOEXCEPT
+ {
+ param_type to( & arg, this);
+ resume_( & to);
+ }
+
+ R * yield()
+ {
+ BOOST_ASSERT( is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ &= ~flag_running;
+ param_type to;
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ callee_.jump(
+ caller_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ |= flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ BOOST_ASSERT( from->data);
+ return from->data;
+ }
+
+ template< typename X >
+ R * yield_to( symmetric_coroutine_impl< X > * other, X x)
+ {
+ typename symmetric_coroutine_impl< X >::param_type to( & x, other);
+ return yield_to_( other, & to);
+ }
+
+ template< typename X >
+ R * yield_to( symmetric_coroutine_impl< X & > * other, X & x)
+ {
+ typename symmetric_coroutine_impl< X & >::param_type to( & x, other);
+ return yield_to_( other, & to);
+ }
+
+ template< typename X >
+ R * yield_to( symmetric_coroutine_impl< X > * other)
+ {
+ typename symmetric_coroutine_impl< X >::param_type to( other);
+ return yield_to_( other, & to);
+ }
+
+ virtual void run( R *) BOOST_NOEXCEPT = 0;
+
+ virtual void destroy() = 0;
+
+protected:
+ template< typename X >
+ friend class symmetric_coroutine_impl;
+
+ int flags_;
+ coroutine_context caller_;
+ coroutine_context callee_;
+
+ void resume_( param_type * to) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ |= flag_running;
+ caller_.jump(
+ callee_,
+ reinterpret_cast< intptr_t >( to),
+ preserve_fpu() );
+ flags_ &= ~flag_running;
+ }
+
+ template< typename Other >
+ R * yield_to_( Other * other, typename Other::param_type * to)
+ {
+ BOOST_ASSERT( is_running() );
+ BOOST_ASSERT( ! is_complete() );
+ BOOST_ASSERT( ! other->is_running() );
+ BOOST_ASSERT( ! other->is_complete() );
+
+ other->caller_ = caller_;
+ flags_ &= ~flag_running;
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ callee_.jump(
+ other->callee_,
+ reinterpret_cast< intptr_t >( to),
+ preserve_fpu() ) ) );
+ flags_ |= flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ BOOST_ASSERT( from->data);
+ return from->data;
+ }
+};
+
+template<>
+class symmetric_coroutine_impl< void > : private noncopyable
+{
+public:
+ typedef parameters< void > param_type;
+
+ symmetric_coroutine_impl( stack_context const& stack_ctx,
+ bool unwind, bool preserve_fpu) BOOST_NOEXCEPT :
+ flags_( 0),
+ caller_(),
+ callee_( trampoline_void< symmetric_coroutine_impl< void > >, stack_ctx)
+ {
+ if ( unwind) flags_ |= flag_force_unwind;
+ if ( preserve_fpu) flags_ |= flag_preserve_fpu;
+ }
+
+ virtual ~symmetric_coroutine_impl() {}
+
+ bool force_unwind() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_force_unwind); }
+
+ bool unwind_requested() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_unwind_stack); }
+
+ bool preserve_fpu() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_preserve_fpu); }
+
+ bool is_started() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_started); }
+
+ bool is_running() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_running); }
+
+ bool is_complete() const BOOST_NOEXCEPT
+ { return 0 != ( flags_ & flag_complete); }
+
+ void unwind_stack() BOOST_NOEXCEPT
+ {
+ if ( is_started() && ! is_complete() && force_unwind() )
+ {
+ flags_ |= flag_unwind_stack;
+ flags_ |= flag_running;
+ param_type to( unwind_t::force_unwind);
+ caller_.jump(
+ callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_running;
+ flags_ &= ~flag_unwind_stack;
+
+ BOOST_ASSERT( is_complete() );
+ }
+ }
+
+ void resume() BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( ! is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ param_type to( this);
+ flags_ |= flag_running;
+ caller_.jump(
+ callee_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() );
+ flags_ &= ~flag_running;
+ }
+
+ void yield() BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( is_running() );
+ BOOST_ASSERT( ! is_complete() );
+
+ flags_ &= ~flag_running;
+ param_type to;
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ callee_.jump(
+ caller_,
+ reinterpret_cast< intptr_t >( & to),
+ preserve_fpu() ) ) );
+ flags_ |= flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ }
+
+ template< typename X >
+ void yield_to( symmetric_coroutine_impl< X > * other, X x)
+ {
+ typename symmetric_coroutine_impl< X >::param_type to( & x, other);
+ yield_to_( other, & to);
+ }
+
+ template< typename X >
+ void yield_to( symmetric_coroutine_impl< X & > * other, X & x)
+ {
+ typename symmetric_coroutine_impl< X & >::param_type to( & x, other);
+ yield_to_( other, & to);
+ }
+
+ template< typename X >
+ void yield_to( symmetric_coroutine_impl< X > * other)
+ {
+ typename symmetric_coroutine_impl< X >::param_type to( other);
+ yield_to_( other, & to);
+ }
+
+ virtual void run() BOOST_NOEXCEPT = 0;
+
+ virtual void destroy() = 0;
+
+protected:
+ template< typename X >
+ friend class symmetric_coroutine_impl;
+
+ int flags_;
+ coroutine_context caller_;
+ coroutine_context callee_;
+
+ template< typename Other >
+ void yield_to_( Other * other, typename Other::param_type * to)
+ {
+ BOOST_ASSERT( is_running() );
+ BOOST_ASSERT( ! is_complete() );
+ BOOST_ASSERT( ! other->is_running() );
+ BOOST_ASSERT( ! other->is_complete() );
+
+ other->caller_ = caller_;
+ flags_ &= ~flag_running;
+ param_type * from(
+ reinterpret_cast< param_type * >(
+ callee_.jump(
+ other->callee_,
+ reinterpret_cast< intptr_t >( to),
+ preserve_fpu() ) ) );
+ flags_ |= flag_running;
+ if ( from->do_unwind) throw forced_unwind();
+ }
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_IMPL_H
diff --git a/3party/boost/boost/coroutine/detail/symmetric_coroutine_object.hpp b/3party/boost/boost/coroutine/detail/symmetric_coroutine_object.hpp
new file mode 100644
index 0000000000..c7516f9cc2
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/symmetric_coroutine_object.hpp
@@ -0,0 +1,281 @@
+
+// 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_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_OBJECT_H
+#define BOOST_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_OBJECT_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/move/move.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/flags.hpp>
+#include <boost/coroutine/detail/symmetric_coroutine_impl.hpp>
+#include <boost/coroutine/detail/symmetric_coroutine_yield.hpp>
+#include <boost/coroutine/exceptions.hpp>
+#include <boost/coroutine/stack_context.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+
+struct stack_context;
+
+namespace detail {
+
+template< typename R, typename Fn, typename StackAllocator >
+class symmetric_coroutine_object : public symmetric_coroutine_impl< R >
+{
+private:
+ typedef symmetric_coroutine_impl< R > impl_t;
+ typedef symmetric_coroutine_object< R, Fn, StackAllocator > obj_t;
+
+ Fn fn_;
+ stack_context stack_ctx_;
+ StackAllocator stack_alloc_;
+
+ static void deallocate_( obj_t * obj)
+ {
+ stack_context stack_ctx( obj->stack_ctx_);
+ StackAllocator stack_alloc( obj->stack_alloc_);
+ obj->unwind_stack();
+ obj->~obj_t();
+ stack_alloc.deallocate( stack_ctx);
+ }
+
+public:
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ symmetric_coroutine_object( Fn fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ impl_t( internal_stack_ctx,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+ fn_( fn),
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+#endif
+
+ symmetric_coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ impl_t( internal_stack_ctx,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn_( fn),
+#else
+ fn_( forward< Fn >( fn) ),
+#endif
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+
+ void run( R * r) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( ! impl_t::unwind_requested() );
+
+ impl_t::flags_ |= flag_started;
+ impl_t::flags_ |= flag_running;
+ try
+ {
+ symmetric_coroutine_yield< R > yc( this, r);
+ fn_( yc);
+ }
+ catch ( forced_unwind const&)
+ {}
+ catch (...)
+ { std::terminate(); }
+
+ impl_t::flags_ |= flag_complete;
+ impl_t::flags_ &= ~flag_running;
+ typename impl_t::param_type to;
+ impl_t::callee_.jump(
+ impl_t::caller_,
+ reinterpret_cast< intptr_t >( & to),
+ impl_t::preserve_fpu() );
+ BOOST_ASSERT_MSG( false, "coroutine is complete");
+ }
+
+ void destroy()
+ { deallocate_( this); }
+};
+
+template< typename R, typename Fn, typename StackAllocator >
+class symmetric_coroutine_object< R &, Fn, StackAllocator > : public symmetric_coroutine_impl< R & >
+{
+private:
+ typedef symmetric_coroutine_impl< R & > impl_t;
+ typedef symmetric_coroutine_object< R &, Fn, StackAllocator > obj_t;
+
+ Fn fn_;
+ stack_context stack_ctx_;
+ StackAllocator stack_alloc_;
+
+ static void deallocate_( obj_t * obj)
+ {
+ stack_context stack_ctx( obj->stack_ctx_);
+ StackAllocator stack_alloc( obj->stack_alloc_);
+ obj->unwind_stack();
+ obj->~obj_t();
+ stack_alloc.deallocate( stack_ctx);
+ }
+
+public:
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ symmetric_coroutine_object( Fn fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ impl_t( internal_stack_ctx,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+ fn_( fn),
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+#endif
+
+ symmetric_coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ impl_t( internal_stack_ctx,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn_( fn),
+#else
+ fn_( forward< Fn >( fn) ),
+#endif
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+
+ void run( R * r) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( ! impl_t::unwind_requested() );
+
+ impl_t::flags_ |= flag_started;
+ impl_t::flags_ |= flag_running;
+ try
+ {
+ symmetric_coroutine_yield< R & > yc( this, r);
+ fn_( yc);
+ }
+ catch ( forced_unwind const&)
+ {}
+ catch (...)
+ { std::terminate(); }
+
+ impl_t::flags_ |= flag_complete;
+ impl_t::flags_ &= ~flag_running;
+ typename impl_t::param_type to;
+ impl_t::callee_.jump(
+ impl_t::caller_,
+ reinterpret_cast< intptr_t >( & to),
+ impl_t::preserve_fpu() );
+ BOOST_ASSERT_MSG( false, "coroutine is complete");
+ }
+
+ void destroy()
+ { deallocate_( this); }
+};
+
+template< typename Fn, typename StackAllocator >
+class symmetric_coroutine_object< void, Fn, StackAllocator > : public symmetric_coroutine_impl< void >
+{
+private:
+ typedef symmetric_coroutine_impl< void > impl_t;
+ typedef symmetric_coroutine_object< void, Fn, StackAllocator > obj_t;
+
+ Fn fn_;
+ stack_context stack_ctx_;
+ StackAllocator stack_alloc_;
+
+ static void deallocate_( obj_t * obj)
+ {
+ stack_context stack_ctx( obj->stack_ctx_);
+ StackAllocator stack_alloc( obj->stack_alloc_);
+ obj->unwind_stack();
+ obj->~obj_t();
+ stack_alloc.deallocate( stack_ctx);
+ }
+
+public:
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ symmetric_coroutine_object( Fn fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ impl_t( internal_stack_ctx,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+ fn_( fn),
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+#endif
+
+ symmetric_coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attrs,
+ stack_context const& stack_ctx,
+ stack_context const& internal_stack_ctx,
+ StackAllocator const& stack_alloc) BOOST_NOEXCEPT :
+ impl_t( internal_stack_ctx,
+ stack_unwind == attrs.do_unwind,
+ fpu_preserved == attrs.preserve_fpu),
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn_( fn),
+#else
+ fn_( forward< Fn >( fn) ),
+#endif
+ stack_ctx_( stack_ctx),
+ stack_alloc_( stack_alloc)
+ {}
+
+ void run() BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT( ! impl_t::unwind_requested() );
+
+ impl_t::flags_ |= flag_started;
+ impl_t::flags_ |= flag_running;
+ try
+ {
+ symmetric_coroutine_yield< void > yc( this);
+ fn_( yc);
+ }
+ catch ( forced_unwind const&)
+ {}
+ catch (...)
+ { std::terminate(); }
+
+ impl_t::flags_ |= flag_complete;
+ impl_t::flags_ &= ~flag_running;
+ typename impl_t::param_type to;
+ impl_t::callee_.jump(
+ impl_t::caller_,
+ reinterpret_cast< intptr_t >( & to),
+ impl_t::preserve_fpu() );
+ BOOST_ASSERT_MSG( false, "coroutine is complete");
+ }
+
+ void destroy()
+ { deallocate_( this); }
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_OBJECT_H
diff --git a/3party/boost/boost/coroutine/detail/symmetric_coroutine_yield.hpp b/3party/boost/boost/coroutine/detail/symmetric_coroutine_yield.hpp
new file mode 100644
index 0000000000..c357d9e943
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/symmetric_coroutine_yield.hpp
@@ -0,0 +1,307 @@
+
+// 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_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_YIELD_H
+#define BOOST_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_YIELD_H
+
+#include <algorithm>
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/move/move.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/exceptions.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename R >
+class symmetric_coroutine_yield
+{
+private:
+ template< typename X, typename Y, typename Z >
+ friend class symmetric_coroutine_object;
+
+ typedef symmetric_coroutine_impl< R > impl_type;
+
+ struct dummy {};
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( symmetric_coroutine_yield)
+
+ impl_type * impl_;
+ R * result_;
+
+ symmetric_coroutine_yield( impl_type * impl, R * result) BOOST_NOEXCEPT :
+ impl_( impl),
+ result_( result)
+ {
+ BOOST_ASSERT( 0 != impl_);
+ BOOST_ASSERT( 0 != result_);
+ }
+
+public:
+ symmetric_coroutine_yield() BOOST_NOEXCEPT :
+ impl_( 0),
+ result_( 0)
+ {}
+
+ symmetric_coroutine_yield( BOOST_RV_REF( symmetric_coroutine_yield) other) BOOST_NOEXCEPT :
+ impl_( 0),
+ result_( 0)
+ { swap( other); }
+
+ symmetric_coroutine_yield & operator=( BOOST_RV_REF( symmetric_coroutine_yield) other) BOOST_NOEXCEPT
+ {
+ symmetric_coroutine_yield tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_; }
+
+ void swap( symmetric_coroutine_yield & other) BOOST_NOEXCEPT
+ {
+ std::swap( impl_, other.impl_);
+ std::swap( result_, other.result_);
+ }
+
+ symmetric_coroutine_yield & operator()()
+ {
+ result_ = impl_->yield();
+ return * this;
+ }
+
+ template< typename Coro >
+ symmetric_coroutine_yield & operator()( Coro & other, typename Coro::value_type x,
+ typename disable_if<
+ is_same< typename Coro::value_type, void >,
+ dummy*
+ >::type = 0)
+ {
+ BOOST_ASSERT( other);
+
+ result_ = impl_->yield_to( other.impl_, x);
+ return * this;
+ }
+
+ template< typename Coro >
+ symmetric_coroutine_yield & operator()( Coro & other,
+ typename enable_if<
+ is_same< typename Coro::value_type, void >,
+ dummy*
+ >::type = 0)
+ {
+ BOOST_ASSERT( other);
+
+ result_ = impl_->yield_to( other.impl_);
+ return * this;
+ }
+
+ R get() const
+ {
+ if ( 0 == result_)
+ boost::throw_exception(
+ invalid_result() );
+
+ return * result_;
+ }
+};
+
+template< typename R >
+class symmetric_coroutine_yield< R & >
+{
+private:
+ template< typename X, typename Y, typename Z >
+ friend class symmetric_coroutine_object;
+
+ typedef symmetric_coroutine_impl< R & > impl_type;
+
+ struct dummy {};
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( symmetric_coroutine_yield)
+
+ impl_type * impl_;
+ R * result_;
+
+ symmetric_coroutine_yield( impl_type * impl, R * result) BOOST_NOEXCEPT :
+ impl_( impl),
+ result_( result)
+ {
+ BOOST_ASSERT( 0 != impl_);
+ BOOST_ASSERT( 0 != result_);
+ }
+
+public:
+ symmetric_coroutine_yield() BOOST_NOEXCEPT :
+ impl_( 0),
+ result_( 0)
+ {}
+
+ symmetric_coroutine_yield( BOOST_RV_REF( symmetric_coroutine_yield) other) BOOST_NOEXCEPT :
+ impl_( 0),
+ result_( 0)
+ { swap( other); }
+
+ symmetric_coroutine_yield & operator=( BOOST_RV_REF( symmetric_coroutine_yield) other) BOOST_NOEXCEPT
+ {
+ symmetric_coroutine_yield tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_; }
+
+ void swap( symmetric_coroutine_yield & other) BOOST_NOEXCEPT
+ {
+ std::swap( impl_, other.impl_);
+ std::swap( result_, other.result_);
+ }
+
+ symmetric_coroutine_yield & operator()()
+ {
+ result_ = impl_->yield();
+ return * this;
+ }
+
+ template< typename Coro >
+ symmetric_coroutine_yield & operator()( Coro & other, typename Coro::value_type & x,
+ typename disable_if<
+ is_same< typename Coro::value_type, void >,
+ dummy*
+ >::type = 0)
+ {
+ BOOST_ASSERT( other);
+
+ result_ = impl_->yield_to( other.impl_, x);
+ return * this;
+ }
+
+ template< typename Coro >
+ symmetric_coroutine_yield & operator()( Coro & other,
+ typename enable_if<
+ is_same< typename Coro::value_type, void >,
+ dummy*
+ >::type = 0)
+ {
+ BOOST_ASSERT( other);
+
+ result_ = impl_->yield_to( other.impl_);
+ return * this;
+ }
+
+ R & get() const
+ {
+ if ( 0 == result_)
+ boost::throw_exception(
+ invalid_result() );
+
+ return * result_;
+ }
+};
+
+template<>
+class symmetric_coroutine_yield< void >
+{
+private:
+ template< typename X, typename Y, typename Z >
+ friend class symmetric_coroutine_object;
+
+ typedef symmetric_coroutine_impl< void > impl_type;
+
+ struct dummy {};
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE( symmetric_coroutine_yield)
+
+ impl_type * impl_;
+
+ symmetric_coroutine_yield( impl_type * impl) BOOST_NOEXCEPT :
+ impl_( impl)
+ { BOOST_ASSERT( 0 != impl_); }
+
+public:
+ symmetric_coroutine_yield() BOOST_NOEXCEPT :
+ impl_( 0)
+ {}
+
+ symmetric_coroutine_yield( BOOST_RV_REF( symmetric_coroutine_yield) other) BOOST_NOEXCEPT :
+ impl_( 0)
+ { swap( other); }
+
+ symmetric_coroutine_yield & operator=( BOOST_RV_REF( symmetric_coroutine_yield) other) BOOST_NOEXCEPT
+ {
+ symmetric_coroutine_yield tmp( boost::move( other) );
+ swap( tmp);
+ return * this;
+ }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL();
+
+ bool operator!() const BOOST_NOEXCEPT
+ { return 0 == impl_; }
+
+ void swap( symmetric_coroutine_yield & other) BOOST_NOEXCEPT
+ { std::swap( impl_, other.impl_); }
+
+ symmetric_coroutine_yield & operator()()
+ {
+ impl_->yield();
+ return * this;
+ }
+
+ template< typename Coro >
+ symmetric_coroutine_yield & operator()( Coro & other, typename Coro::value_type & x,
+ typename disable_if<
+ is_same< typename Coro::value_type, void >,
+ dummy*
+ >::type = 0)
+ {
+ BOOST_ASSERT( other);
+
+ impl_->yield_to( other.impl_, x);
+ return * this;
+ }
+
+ template< typename Coro >
+ symmetric_coroutine_yield & operator()( Coro & other,
+ typename enable_if<
+ is_same< typename Coro::value_type, void >,
+ dummy*
+ >::type = 0)
+ {
+ BOOST_ASSERT( other);
+
+ impl_->yield_to( other.impl_);
+ return * this;
+ }
+};
+
+template< typename R >
+void swap( symmetric_coroutine_yield< R > & l, symmetric_coroutine_yield< R > & r)
+{ l.swap( r); }
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_SYMMETRIC_COROUTINE_YIELD_H
diff --git a/3party/boost/boost/coroutine/detail/trampoline.hpp b/3party/boost/boost/coroutine/detail/trampoline.hpp
new file mode 100644
index 0000000000..1cb3226d15
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/trampoline.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_COROUTINES_DETAIL_TRAMPOLINE_H
+#define BOOST_COROUTINES_DETAIL_TRAMPOLINE_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename Coro >
+void trampoline( intptr_t vp)
+{
+ typedef typename Coro::param_type param_type;
+
+ BOOST_ASSERT( 0 != vp);
+
+ param_type * param(
+ reinterpret_cast< param_type * >( vp) );
+ BOOST_ASSERT( 0 != param);
+ BOOST_ASSERT( 0 != param->data);
+
+ Coro * coro(
+ reinterpret_cast< Coro * >( param->coro) );
+ BOOST_ASSERT( 0 != coro);
+
+ coro->run( param->data);
+}
+
+template< typename Coro >
+void trampoline_void( intptr_t vp)
+{
+ typedef typename Coro::param_type param_type;
+
+ BOOST_ASSERT( 0 != vp);
+
+ param_type * param(
+ reinterpret_cast< param_type * >( vp) );
+ BOOST_ASSERT( 0 != param);
+
+ Coro * coro(
+ reinterpret_cast< Coro * >( param->coro) );
+ BOOST_ASSERT( 0 != coro);
+
+ coro->run();
+}
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_TRAMPOLINE_H
diff --git a/3party/boost/boost/coroutine/detail/trampoline_pull.hpp b/3party/boost/boost/coroutine/detail/trampoline_pull.hpp
new file mode 100644
index 0000000000..179024529d
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/trampoline_pull.hpp
@@ -0,0 +1,48 @@
+
+// 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_COROUTINES_DETAIL_TRAMPOLINE_PULL_H
+#define BOOST_COROUTINES_DETAIL_TRAMPOLINE_PULL_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename Coro >
+void trampoline_pull( intptr_t vp)
+{
+ typedef typename Coro::param_type param_type;
+
+ BOOST_ASSERT( 0 != vp);
+
+ param_type * param(
+ reinterpret_cast< param_type * >( vp) );
+ BOOST_ASSERT( 0 != param);
+
+ Coro * coro(
+ reinterpret_cast< Coro * >( param->coro) );
+ BOOST_ASSERT( 0 != coro);
+
+ coro->run();
+}
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_TRAMPOLINE_PULL_H
diff --git a/3party/boost/boost/coroutine/detail/trampoline_push.hpp b/3party/boost/boost/coroutine/detail/trampoline_push.hpp
new file mode 100644
index 0000000000..448904456e
--- /dev/null
+++ b/3party/boost/boost/coroutine/detail/trampoline_push.hpp
@@ -0,0 +1,77 @@
+
+// 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_COROUTINES_DETAIL_TRAMPOLINE_PUSH_H
+#define BOOST_COROUTINES_DETAIL_TRAMPOLINE_PUSH_H
+
+#include <cstddef>
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/exception_ptr.hpp>
+#include <boost/move/move.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/detail/flags.hpp>
+#include <boost/coroutine/detail/parameters.hpp>
+#include <boost/coroutine/detail/setup.hpp>
+#include <boost/coroutine/detail/setup.hpp>
+#include <boost/coroutine/exceptions.hpp>
+#include <boost/coroutine/flags.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename Coro >
+void trampoline_push( intptr_t vp)
+{
+ typedef typename Coro::param_type param_type;
+
+ BOOST_ASSERT( vp);
+
+ param_type * param(
+ reinterpret_cast< param_type * >( vp) );
+ BOOST_ASSERT( 0 != param);
+ BOOST_ASSERT( 0 != param->data);
+
+ Coro * coro(
+ reinterpret_cast< Coro * >( param->coro) );
+ BOOST_ASSERT( 0 != coro);
+
+ coro->run( param->data);
+}
+
+template< typename Coro >
+void trampoline_push_void( intptr_t vp)
+{
+ typedef typename Coro::param_type param_type;
+
+ BOOST_ASSERT( vp);
+
+ param_type * param(
+ reinterpret_cast< param_type * >( vp) );
+ BOOST_ASSERT( 0 != param);
+
+ Coro * coro(
+ reinterpret_cast< Coro * >( param->coro) );
+ BOOST_ASSERT( 0 != coro);
+
+ coro->run();
+}
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_TRAMPOLINE_PUSH_H
diff --git a/3party/boost/boost/coroutine/exceptions.hpp b/3party/boost/boost/coroutine/exceptions.hpp
new file mode 100644
index 0000000000..f263429719
--- /dev/null
+++ b/3party/boost/boost/coroutine/exceptions.hpp
@@ -0,0 +1,105 @@
+
+// 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_COROUTINES_EXCEPTIONS_H
+#define BOOST_COROUTINES_EXCEPTIONS_H
+
+#include <stdexcept>
+#include <string>
+
+#include <boost/config.hpp>
+#include <boost/detail/scoped_enum_emulation.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/system/system_error.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+struct forced_unwind {};
+
+}
+
+BOOST_SCOPED_ENUM_DECLARE_BEGIN(coroutine_errc)
+{
+ no_data = 1
+}
+BOOST_SCOPED_ENUM_DECLARE_END(coroutine_errc)
+
+BOOST_COROUTINES_DECL system::error_category const& coroutine_category() BOOST_NOEXCEPT;
+
+}
+
+namespace system {
+
+template<>
+struct is_error_code_enum< coroutines::coroutine_errc > : public true_type
+{};
+
+#ifdef BOOST_NO_CXX11_SCOPED_ENUMS
+template<>
+struct is_error_code_enum< coroutines::coroutine_errc::enum_type > : public true_type
+{};
+#endif
+
+inline
+error_code make_error_code( coroutines::coroutine_errc e) //BOOST_NOEXCEPT
+{
+ return error_code( underlying_cast< int >( e), coroutines::coroutine_category() );
+}
+
+inline
+error_condition make_error_condition( coroutines::coroutine_errc e) //BOOST_NOEXCEPT
+{
+ return error_condition( underlying_cast< int >( e), coroutines::coroutine_category() );
+}
+
+}
+
+namespace coroutines {
+
+class coroutine_error : public std::logic_error
+{
+private:
+ system::error_code ec_;
+
+public:
+ coroutine_error( system::error_code ec) :
+ logic_error( ec.message() ),
+ ec_( ec)
+ {}
+
+ system::error_code const& code() const BOOST_NOEXCEPT
+ { return ec_; }
+
+ const char* what() const throw()
+ { return code().message().c_str(); }
+};
+
+class invalid_result : public coroutine_error
+{
+public:
+ invalid_result() :
+ coroutine_error(
+ system::make_error_code(
+ coroutine_errc::no_data) )
+ {}
+};
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_EXCEPTIONS_H
diff --git a/3party/boost/boost/coroutine/posix/protected_stack_allocator.hpp b/3party/boost/boost/coroutine/posix/protected_stack_allocator.hpp
new file mode 100644
index 0000000000..f9b153d4a9
--- /dev/null
+++ b/3party/boost/boost/coroutine/posix/protected_stack_allocator.hpp
@@ -0,0 +1,95 @@
+
+// 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_COROUTINES_PROTECTED_STACK_ALLOCATOR_H
+#define BOOST_COROUTINES_PROTECTED_STACK_ALLOCATOR_H
+
+extern "C" {
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <unistd.h>
+}
+
+#include <cmath>
+#include <cstddef>
+#include <new>
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/stack_context.hpp>
+#include <boost/coroutine/stack_traits.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+
+template< typename traitsT >
+struct basic_protected_stack_allocator
+{
+ typedef traitsT traits_type;
+
+ void allocate( stack_context & ctx, std::size_t size = traits_type::minimum_size() )
+ {
+ BOOST_ASSERT( traits_type::minimum_size() <= size);
+ BOOST_ASSERT( traits_type::is_unbounded() || ( traits_type::maximum_size() >= size) );
+
+ // page at bottom will be used as guard-page
+ const std::size_t pages(
+ static_cast< std::size_t >(
+ std::floor(
+ static_cast< float >( size) / traits_type::page_size() ) ) );
+ BOOST_ASSERT_MSG( 2 <= pages, "at least two pages must fit into stack (one page is guard-page)");
+ const std::size_t size_( pages * traits_type::page_size() );
+ BOOST_ASSERT( 0 < size && 0 < size_);
+ BOOST_ASSERT( size_ <= size);
+
+ // conform to POSIX.4 (POSIX.1b-1993, _POSIX_C_SOURCE=199309L)
+#if defined(MAP_ANON)
+ void * limit = ::mmap( 0, size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
+#else
+ void * limit = ::mmap( 0, size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+#endif
+ if ( MAP_FAILED == limit) throw std::bad_alloc();
+
+ // conforming to POSIX.1-2001
+#if defined(BOOST_DISABLE_ASSERTS)
+ ::mprotect( limit, traits_type::page_size(), PROT_NONE);
+#else
+ const int result( ::mprotect( limit, traits_type::page_size(), PROT_NONE) );
+ BOOST_ASSERT( 0 == result);
+#endif
+
+ ctx.size = size_;
+ ctx.sp = static_cast< char * >( limit) + ctx.size;
+ }
+
+ void deallocate( stack_context & ctx)
+ {
+ BOOST_ASSERT( ctx.sp);
+ BOOST_ASSERT( traits_type::minimum_size() <= ctx.size);
+ BOOST_ASSERT( traits_type::is_unbounded() || ( traits_type::maximum_size() >= ctx.size) );
+
+ void * limit = static_cast< char * >( ctx.sp) - ctx.size;
+ // conform to POSIX.4 (POSIX.1b-1993, _POSIX_C_SOURCE=199309L)
+ ::munmap( limit, ctx.size);
+ }
+};
+
+typedef basic_protected_stack_allocator< stack_traits > protected_stack_allocator;
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_PROTECTED_STACK_ALLOCATOR_H
diff --git a/3party/boost/boost/coroutine/posix/segmented_stack_allocator.hpp b/3party/boost/boost/coroutine/posix/segmented_stack_allocator.hpp
new file mode 100644
index 0000000000..335e5789b4
--- /dev/null
+++ b/3party/boost/boost/coroutine/posix/segmented_stack_allocator.hpp
@@ -0,0 +1,69 @@
+
+// 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_COROUTINES_SEGMENTED_STACK_ALLOCATOR_H
+#define BOOST_COROUTINES_SEGMENTED_STACK_ALLOCATOR_H
+
+#include <cstddef>
+#include <new>
+
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/stack_context.hpp>
+#include <boost/coroutine/stack_traits.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+// forward declaration for splitstack-functions defined in libgcc
+extern "C" {
+void *__splitstack_makecontext( std::size_t,
+ void * [BOOST_COROUTINES_SEGMENTS],
+ std::size_t *);
+
+void __splitstack_releasecontext( void * [BOOST_COROUTINES_SEGMENTS]);
+
+void __splitstack_resetcontext( void * [BOOST_COROUTINES_SEGMENTS]);
+
+void __splitstack_block_signals_context( void * [BOOST_COROUTINES_SEGMENTS],
+ int * new_value, int * old_value);
+}
+
+namespace boost {
+namespace coroutines {
+
+template< typename traitsT >
+struct basic_segmented_stack_allocator
+{
+ typedef traitsT traits_type;
+
+ void allocate( stack_context & ctx, std::size_t size = traits_type::minimum_size() )
+ {
+ void * limit = __splitstack_makecontext( size, ctx.segments_ctx, & ctx.size);
+ if ( ! limit) throw std::bad_alloc();
+
+ // ctx.size is already filled by __splitstack_makecontext
+ ctx.sp = static_cast< char * >( limit) + ctx.size;
+
+ int off = 0;
+ __splitstack_block_signals_context( ctx.segments_ctx, & off, 0);
+ }
+
+ void deallocate( stack_context & ctx)
+ { __splitstack_releasecontext( ctx.segments_ctx); }
+};
+
+typedef basic_segmented_stack_allocator< stack_traits > segmented_stack_allocator;
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_SEGMENTED_STACK_ALLOCATOR_H
diff --git a/3party/boost/boost/coroutine/protected_stack_allocator.hpp b/3party/boost/boost/coroutine/protected_stack_allocator.hpp
new file mode 100644
index 0000000000..268786fec4
--- /dev/null
+++ b/3party/boost/boost/coroutine/protected_stack_allocator.hpp
@@ -0,0 +1,13 @@
+
+// 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)
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_WINDOWS)
+# include <boost/coroutine/windows/protected_stack_allocator.hpp>
+#else
+# include <boost/coroutine/posix/protected_stack_allocator.hpp>
+#endif
diff --git a/3party/boost/boost/coroutine/segmented_stack_allocator.hpp b/3party/boost/boost/coroutine/segmented_stack_allocator.hpp
new file mode 100644
index 0000000000..f9525a1a5e
--- /dev/null
+++ b/3party/boost/boost/coroutine/segmented_stack_allocator.hpp
@@ -0,0 +1,15 @@
+
+// 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)
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_USE_SEGMENTED_STACKS)
+# if defined(BOOST_WINDOWS)
+# error "segmented stacks are not supported by Windows"
+# else
+# include <boost/coroutine/posix/segmented_stack_allocator.hpp>
+# endif
+#endif
diff --git a/3party/boost/boost/coroutine/stack_allocator.hpp b/3party/boost/boost/coroutine/stack_allocator.hpp
index 3b52679365..662533efe7 100644
--- a/3party/boost/boost/coroutine/stack_allocator.hpp
+++ b/3party/boost/boost/coroutine/stack_allocator.hpp
@@ -4,16 +4,16 @@
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#ifndef BOOST_COROUTINES_DETAIL_STACK_ALLOCATOR_H
-#define BOOST_COROUTINES_DETAIL_STACK_ALLOCATOR_H
+#ifndef BOOST_COROUTINES_STACK_ALLOCATOR_H
+#define BOOST_COROUTINES_STACK_ALLOCATOR_H
#include <cstddef>
#include <boost/config.hpp>
#include <boost/context/detail/config.hpp>
-#include <boost/coroutine/detail/segmented_stack_allocator.hpp>
-#include <boost/coroutine/detail/standard_stack_allocator.hpp>
+#include <boost/coroutine/segmented_stack_allocator.hpp>
+#include <boost/coroutine/standard_stack_allocator.hpp>
#ifdef BOOST_HAS_ABI_HEADERS
# include BOOST_ABI_PREFIX
@@ -23,9 +23,9 @@ namespace boost {
namespace coroutines {
#if defined(BOOST_USE_SEGMENTED_STACKS)
-typedef detail::segmented_stack_allocator stack_allocator;
+typedef segmented_stack_allocator stack_allocator;
#else
-typedef detail::standard_stack_allocator stack_allocator;
+typedef standard_stack_allocator stack_allocator;
#endif
}}
@@ -34,4 +34,4 @@ typedef detail::standard_stack_allocator stack_allocator;
# include BOOST_ABI_SUFFIX
#endif
-#endif // BOOST_COROUTINES_DETAIL_STACK_ALLOCATOR_H
+#endif // BOOST_COROUTINES_STACK_ALLOCATOR_H
diff --git a/3party/boost/boost/coroutine/stack_traits.hpp b/3party/boost/boost/coroutine/stack_traits.hpp
new file mode 100644
index 0000000000..0e8f25182d
--- /dev/null
+++ b/3party/boost/boost/coroutine/stack_traits.hpp
@@ -0,0 +1,42 @@
+
+// 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_COROUTINES_STACK_TRAITS_H
+#define BOOST_COROUTINES_STACK_TRAITS_H
+
+#include <cstddef>
+
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+
+struct BOOST_COROUTINES_DECL stack_traits
+{
+ static bool is_unbounded() BOOST_NOEXCEPT;
+
+ static std::size_t page_size() BOOST_NOEXCEPT;
+
+ static std::size_t default_size() BOOST_NOEXCEPT;
+
+ static std::size_t minimum_size() BOOST_NOEXCEPT;
+
+ static std::size_t maximum_size() BOOST_NOEXCEPT;
+};
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_STACK_TRAITS_H
diff --git a/3party/boost/boost/coroutine/standard_stack_allocator.hpp b/3party/boost/boost/coroutine/standard_stack_allocator.hpp
new file mode 100644
index 0000000000..3341ce3ec8
--- /dev/null
+++ b/3party/boost/boost/coroutine/standard_stack_allocator.hpp
@@ -0,0 +1,64 @@
+
+// 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_COROUTINES_STANDARD_STACK_ALLOCATOR_H
+#define BOOST_COROUTINES_STANDARD_STACK_ALLOCATOR_H
+
+#include <cstddef>
+#include <cstdlib>
+#include <new>
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/stack_context.hpp>
+#include <boost/coroutine/stack_traits.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+
+template< typename traitsT >
+struct basic_standard_stack_allocator
+{
+ typedef traitsT traits_type;
+
+ void allocate( stack_context & ctx, std::size_t size = traits_type::minimum_size() )
+ {
+ BOOST_ASSERT( traits_type::minimum_size() <= size);
+ BOOST_ASSERT( traits_type::is_unbounded() || ( traits_type::maximum_size() >= size) );
+
+ void * limit = std::malloc( size);
+ if ( ! limit) throw std::bad_alloc();
+
+ ctx.size = size;
+ ctx.sp = static_cast< char * >( limit) + ctx.size;
+ }
+
+ void deallocate( stack_context & ctx)
+ {
+ BOOST_ASSERT( ctx.sp);
+ BOOST_ASSERT( traits_type::minimum_size() <= ctx.size);
+ BOOST_ASSERT( traits_type::is_unbounded() || ( traits_type::maximum_size() >= ctx.size) );
+
+ void * limit = static_cast< char * >( ctx.sp) - ctx.size;
+ std::free( limit);
+ }
+};
+
+typedef basic_standard_stack_allocator< stack_traits > standard_stack_allocator;
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_STANDARD_STACK_ALLOCATOR_H
diff --git a/3party/boost/boost/coroutine/symmetric_coroutine.hpp b/3party/boost/boost/coroutine/symmetric_coroutine.hpp
new file mode 100644
index 0000000000..543cae0a37
--- /dev/null
+++ b/3party/boost/boost/coroutine/symmetric_coroutine.hpp
@@ -0,0 +1,35 @@
+
+// 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_COROUTINES_SYMMETRIC_COROUTINE_H
+#define BOOST_COROUTINES_SYMMETRIC_COROUTINE_H
+
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/symmetric_coroutine_call.hpp>
+#include <boost/coroutine/detail/symmetric_coroutine_yield.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+
+template< typename T >
+struct symmetric_coroutine
+{
+ typedef detail::symmetric_coroutine_call< T > call_type;
+ typedef detail::symmetric_coroutine_yield< T > yield_type;
+};
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_SYMMETRIC_COROUTINE_H
diff --git a/3party/boost/boost/coroutine/v1/coroutine.hpp b/3party/boost/boost/coroutine/v1/coroutine.hpp
deleted file mode 100644
index 294d81c01d..0000000000
--- a/3party/boost/boost/coroutine/v1/coroutine.hpp
+++ /dev/null
@@ -1,1430 +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_COROUTINES_V1_COROUTINE_H
-#define BOOST_COROUTINES_V1_COROUTINE_H
-
-#include <cstddef>
-#include <memory>
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/move/move.hpp>
-#include <boost/range.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/decay.hpp>
-#include <boost/type_traits/function_traits.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/utility/enable_if.hpp>
-#include <boost/utility/result_of.hpp>
-
-#include <boost/coroutine/attributes.hpp>
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/detail/coroutine_context.hpp>
-#include <boost/coroutine/stack_allocator.hpp>
-#include <boost/coroutine/v1/detail/arg.hpp>
-#include <boost/coroutine/v1/detail/coroutine_base.hpp>
-#include <boost/coroutine/v1/detail/coroutine_caller.hpp>
-#include <boost/coroutine/v1/detail/coroutine_get.hpp>
-#include <boost/coroutine/v1/detail/coroutine_object.hpp>
-#include <boost/coroutine/v1/detail/coroutine_op.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template<
- typename Signature,
- template< class, int > class C,
- typename Result = typename function_traits< Signature >::result_type,
- int arity = function_traits< Signature >::arity
->
-struct caller;
-
-template<
- typename Signature,
- template< class, int > class C
->
-struct caller< Signature, C, void, 0 >
-{ typedef C< void(), 0 > type; };
-
-template<
- typename Signature,
- template< class, int > class C,
- typename Result
->
-struct caller< Signature, C, Result, 0 >
-{ typedef C< void( Result), 1 > type; };
-
-template<
- typename Signature,
- template< class, int > class C,
- int arity
->
-struct caller< Signature, C, void, arity >
-{ typedef C< typename detail::arg< Signature >::type(), 0 > type; };
-
-template<
- typename Signature,
- template< class, int > class C,
- typename Result, int arity
->
-struct caller
-{ typedef C< typename detail::arg< Signature >::type( Result), 1 > type; };
-
-}
-
-template< typename Signature, int arity = function_traits< Signature >::arity >
-class coroutine;
-
-template< typename Signature >
-class coroutine< Signature, 0 > : public detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >,
- public detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >
-{
-private:
- typedef detail::coroutine_base< Signature > base_t;
- typedef typename base_t::ptr_t ptr_t;
-
- template< typename X, typename Y, int >
- friend struct detail::coroutine_get;
- template< typename X, typename Y, typename Z, int >
- friend struct detail::coroutine_op;
- template< typename X, typename Y, typename Z, typename A, typename B, typename C, int >
- friend class detail::coroutine_object;
-
- struct dummy
- { void nonnull() {} };
-
- typedef void ( dummy::*safe_bool)();
-
- ptr_t impl_;
-
- BOOST_MOVABLE_BUT_NOT_COPYABLE( coroutine)
-
- template< typename Allocator >
- coroutine( detail::coroutine_context const& callee,
- bool unwind, bool preserve_fpu,
- Allocator const& alloc) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
-
- >(),
- impl_()
- {
- typedef detail::coroutine_caller<
- Signature, Allocator
- > caller_t;
- typename caller_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) caller_t(
- callee, unwind, preserve_fpu, a) );
- }
-
-public:
- typedef typename detail::caller<
- Signature,
- boost::coroutines::coroutine
- >::type caller_type;
-
- coroutine() BOOST_NOEXCEPT :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {}
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-#ifdef BOOST_MSVC
- typedef void ( * coroutine_fn) ( caller_type &);
-
- explicit coroutine( coroutine_fn fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >() ) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
- typedef detail::coroutine_object<
- Signature,
- coroutine_fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< coroutine_fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename StackAllocator >
- explicit coroutine( coroutine_fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >() ) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
- typedef detail::coroutine_object<
- Signature,
- coroutine_fn, StackAllocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< coroutine_fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename StackAllocator, typename Allocator >
- explicit coroutine( coroutine_fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
- typedef detail::coroutine_object<
- Signature,
- coroutine_fn, StackAllocator, Allocator,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< coroutine_fn >( fn), attr, stack_alloc, a) );
- }
-#endif
- template< typename Fn >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, Allocator,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-#else
- template< typename Fn >
- explicit coroutine( Fn fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit coroutine( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit coroutine( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, Allocator,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, Allocator,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-#endif
-
- coroutine( BOOST_RV_REF( coroutine) other) BOOST_NOEXCEPT :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- { swap( other); }
-
- coroutine & operator=( BOOST_RV_REF( coroutine) other) BOOST_NOEXCEPT
- {
- coroutine tmp( boost::move( other) );
- swap( tmp);
- return * this;
- }
-
- bool empty() const BOOST_NOEXCEPT
- { return ! impl_; }
-
- operator safe_bool() const BOOST_NOEXCEPT
- { return ( empty() || impl_->is_complete() ) ? 0 : & dummy::nonnull; }
-
- bool operator!() const BOOST_NOEXCEPT
- { return empty() || impl_->is_complete(); }
-
- void swap( coroutine & other) BOOST_NOEXCEPT
- { impl_.swap( other.impl_); }
-};
-
-template< typename Signature, int arity >
-class coroutine : public detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >,
- public detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >
-{
-private:
- typedef detail::coroutine_base< Signature > base_t;
- typedef typename base_t::ptr_t ptr_t;
-
- template< typename X, typename Y, int >
- friend struct detail::coroutine_get;
- template< typename X, typename Y, typename Z, int >
- friend struct detail::coroutine_op;
- template< typename X, typename Y, typename Z, typename A, typename B, typename C, int >
- friend class detail::coroutine_object;
-
- struct dummy
- { void nonnull() {} };
-
- typedef void ( dummy::*safe_bool)();
-
- ptr_t impl_;
-
- BOOST_MOVABLE_BUT_NOT_COPYABLE( coroutine)
-
- template< typename Allocator >
- coroutine( detail::coroutine_context const& callee,
- bool unwind, bool preserve_fpu,
- Allocator const& alloc) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
- typedef detail::coroutine_caller<
- Signature, Allocator
- > caller_t;
- typename caller_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) caller_t(
- callee, unwind, preserve_fpu, a) );
- }
-
-public:
- typedef typename detail::caller<
- Signature,
- boost::coroutines::coroutine
- >::type caller_type;
- typedef typename detail::arg< Signature >::type arguments;
-
- coroutine() BOOST_NOEXCEPT :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {}
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-#ifdef BOOST_MSVC
- typedef void ( * coroutine_fn) ( caller_type &);
-
- explicit coroutine( coroutine_fn fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >() ) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
- typedef detail::coroutine_object<
- Signature,
- coroutine_fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< coroutine_fn >( fn), attr, stack_alloc, a) );
- }
-
- explicit coroutine( coroutine_fn fn, arguments arg, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >() ) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
- typedef detail::coroutine_object<
- Signature,
- coroutine_fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< coroutine_fn >( fn), arg, attr, stack_alloc, a) );
- }
-
- template< typename StackAllocator >
- explicit coroutine( coroutine_fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >() ) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
- typedef detail::coroutine_object<
- Signature,
- coroutine_fn, StackAllocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< coroutine_fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename StackAllocator, typename Allocator >
- explicit coroutine( coroutine_fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
- typedef detail::coroutine_object<
- Signature,
- coroutine_fn, StackAllocator, Allocator,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< coroutine_fn >( fn), attr, stack_alloc, a) );
- }
-#endif
- template< typename Fn >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename Fn >
- explicit coroutine( BOOST_RV_REF( Fn) fn, arguments arg, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), arg, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, arguments arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), arg, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, Allocator,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, arguments arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, Allocator,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), arg, attr, stack_alloc, a) );
- }
-#else
- template< typename Fn >
- explicit coroutine( Fn fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn >
- explicit coroutine( Fn fn, arguments arg, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, arg, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit coroutine( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit coroutine( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, Allocator,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, stack_allocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< coroutine > const& alloc =
- std::allocator< coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, std::allocator< coroutine >,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_same< typename decay< Fn >::type, coroutine >,
- dummy *
- >::type = 0) :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- {
-// BOOST_STATIC_ASSERT((
-// is_same< void, typename result_of< Fn() >::type >::value));
- typedef detail::coroutine_object<
- Signature,
- Fn, StackAllocator, Allocator,
- caller_type,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-#endif
-
- coroutine( BOOST_RV_REF( coroutine) other) BOOST_NOEXCEPT :
- detail::coroutine_op<
- Signature,
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- detail::coroutine_get<
- coroutine< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- impl_()
- { swap( other); }
-
- coroutine & operator=( BOOST_RV_REF( coroutine) other) BOOST_NOEXCEPT
- {
- coroutine tmp( boost::move( other) );
- swap( tmp);
- return * this;
- }
-
- bool empty() const BOOST_NOEXCEPT
- { return ! impl_; }
-
- operator safe_bool() const BOOST_NOEXCEPT
- { return ( empty() || impl_->is_complete() ) ? 0 : & dummy::nonnull; }
-
- bool operator!() const BOOST_NOEXCEPT
- { return empty() || impl_->is_complete(); }
-
- void swap( coroutine & other) BOOST_NOEXCEPT
- { impl_.swap( other.impl_); }
-};
-
-template< typename Signature >
-void swap( coroutine< Signature > & l, coroutine< Signature > & r) BOOST_NOEXCEPT
-{ l.swap( r); }
-
-template< typename Signature >
-inline
-typename coroutine< Signature >::iterator
-range_begin( coroutine< Signature > & c)
-{ return typename coroutine< Signature >::iterator( & c); }
-
-template< typename Signature >
-inline
-typename coroutine< Signature >::const_iterator
-range_begin( coroutine< Signature > const& c)
-{ return typename coroutine< Signature >::const_iterator( & c); }
-
-template< typename Signature >
-inline
-typename coroutine< Signature >::iterator
-range_end( coroutine< Signature > &)
-{ return typename coroutine< Signature >::iterator(); }
-
-template< typename Signature >
-inline
-typename coroutine< Signature >::const_iterator
-range_end( coroutine< Signature > const&)
-{ return typename coroutine< Signature >::const_iterator(); }
-
-template< typename Signature >
-inline
-typename coroutine< Signature >::iterator
-begin( coroutine< Signature > & c)
-{ return boost::begin( c); }
-
-template< typename Signature >
-inline
-typename coroutine< Signature >::iterator
-end( coroutine< Signature > & c)
-{ return boost::end( c); }
-
-template< typename Signature >
-inline
-typename coroutine< Signature >::const_iterator
-begin( coroutine< Signature > const& c)
-{ return boost::const_begin( c); }
-
-template< typename Signature >
-inline
-typename coroutine< Signature >::const_iterator
-end( coroutine< Signature > const& c)
-{ return boost::const_end( c); }
-
-}
-
-template< typename Signature >
-struct range_mutable_iterator< coroutines::coroutine< Signature > >
-{ typedef typename coroutines::coroutine< Signature >::iterator type; };
-
-template< typename Signature >
-struct range_const_iterator< coroutines::coroutine< Signature > >
-{ typedef typename coroutines::coroutine< Signature >::const_iterator type; };
-
-}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_V1_COROUTINE_H
diff --git a/3party/boost/boost/coroutine/v1/detail/arg.hpp b/3party/boost/boost/coroutine/v1/detail/arg.hpp
deleted file mode 100644
index 00b2462101..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/arg.hpp
+++ /dev/null
@@ -1,62 +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_COROUTINES_V1_DETAIL_ARG_H
-#define BOOST_COROUTINES_V1_DETAIL_ARG_H
-
-#include <boost/config.hpp>
-#include <boost/preprocessor/arithmetic/add.hpp>
-#include <boost/preprocessor/arithmetic/sub.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/punctuation/comma_if.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/type_traits/function_traits.hpp>
-
-#include <boost/coroutine/detail/config.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template<
- typename Signature,
- int arity = function_traits< Signature >::arity >
-struct arg;
-
-template< typename Signature >
-struct arg< Signature, 1 >
-{
- typedef typename function_traits< Signature >::arg1_type type;
-};
-
-#define BOOST_CONTEXT_TUPLE_COMMA(n) BOOST_PP_COMMA_IF(BOOST_PP_SUB(n,1))
-#define BOOST_CONTEXT_TUPLE_TYPE(z,n,unused) \
- BOOST_CONTEXT_TUPLE_COMMA(n) typename function_traits< Signature >::BOOST_PP_CAT(BOOST_PP_CAT(arg,n),_type)
-#define BOOST_CONTEXT_TUPLE_TYPES(n) BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(n,1),BOOST_CONTEXT_TUPLE_TYPE,~)
-#define BOOST_CONTEXT_TUPLE(z,n,unused) \
-template< typename Signature > \
-struct arg< Signature, n > \
-{ \
- typedef tuple< BOOST_CONTEXT_TUPLE_TYPES(n) > type; \
-};
-BOOST_PP_REPEAT_FROM_TO(2,11,BOOST_CONTEXT_TUPLE,~)
-#undef BOOST_CONTEXT_TUPLE
-#undef BOOST_CONTEXT_TUPLE_TYPES
-#undef BOOST_CONTEXT_TUPLE_TYPE
-#undef BOOST_CONTEXT_TUPLE_COMMA
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_V1_DETAIL_ARG_H
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_base.hpp b/3party/boost/boost/coroutine/v1/detail/coroutine_base.hpp
deleted file mode 100644
index a460cf30cc..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_base.hpp
+++ /dev/null
@@ -1,125 +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_COROUTINES_V1_DETAIL_COROUTINE_BASE_H
-#define BOOST_COROUTINES_V1_DETAIL_COROUTINE_BASE_H
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/context/fcontext.hpp>
-#include <boost/exception_ptr.hpp>
-#include <boost/intrusive_ptr.hpp>
-#include <boost/type_traits/function_traits.hpp>
-#include <boost/utility.hpp>
-
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/detail/coroutine_context.hpp>
-#include <boost/coroutine/detail/flags.hpp>
-#include <boost/coroutine/v1/detail/coroutine_base_resume.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-
-struct stack_context;
-
-namespace detail {
-
-template< typename Signature >
-class coroutine_base : private noncopyable,
- public coroutine_base_resume<
- Signature,
- coroutine_base< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >
-{
-public:
- typedef intrusive_ptr< coroutine_base > ptr_t;
-
-private:
- template< typename X, typename Y, typename Z, int >
- friend class coroutine_base_resume;
- template< typename X, typename Y, typename Z, typename A, typename B, typename C, int >
- friend class coroutine_object;
-
- unsigned int use_count_;
- coroutine_context caller_;
- coroutine_context callee_;
- int flags_;
- exception_ptr except_;
-
-protected:
- virtual void deallocate_object() = 0;
-
-public:
- coroutine_base( coroutine_context::ctx_fn fn, stack_context * stack_ctx,
- bool unwind, bool preserve_fpu) :
- coroutine_base_resume<
- Signature,
- coroutine_base< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- use_count_( 0),
- caller_(),
- callee_( fn, stack_ctx),
- flags_( 0),
- except_()
- {
- if ( unwind) flags_ |= flag_force_unwind;
- if ( preserve_fpu) flags_ |= flag_preserve_fpu;
- }
-
- coroutine_base( coroutine_context const& callee, bool unwind, bool preserve_fpu) :
- coroutine_base_resume<
- Signature,
- coroutine_base< Signature >,
- typename function_traits< Signature >::result_type,
- function_traits< Signature >::arity
- >(),
- use_count_( 0),
- caller_(),
- callee_( callee),
- flags_( 0),
- except_()
- {
- if ( unwind) flags_ |= flag_force_unwind;
- if ( preserve_fpu) flags_ |= flag_preserve_fpu;
- }
-
- virtual ~coroutine_base()
- {}
-
- bool force_unwind() const BOOST_NOEXCEPT
- { return 0 != ( flags_ & flag_force_unwind); }
-
- bool unwind_requested() const BOOST_NOEXCEPT
- { return 0 != ( flags_ & flag_unwind_stack); }
-
- bool preserve_fpu() const BOOST_NOEXCEPT
- { return 0 != ( flags_ & flag_preserve_fpu); }
-
- bool is_complete() const BOOST_NOEXCEPT
- { return 0 != ( flags_ & flag_complete); }
-
- friend inline void intrusive_ptr_add_ref( coroutine_base * p) BOOST_NOEXCEPT
- { ++p->use_count_; }
-
- friend inline void intrusive_ptr_release( coroutine_base * p) BOOST_NOEXCEPT
- { if ( --p->use_count_ == 0) p->deallocate_object(); }
-};
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_V1_DETAIL_COROUTINE_BASE_H
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_base_resume.hpp b/3party/boost/boost/coroutine/v1/detail/coroutine_base_resume.hpp
deleted file mode 100644
index 9c8a8048b4..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_base_resume.hpp
+++ /dev/null
@@ -1,237 +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_COROUTINES_V1_DETAIL_COROUTINE_BASE_RESUME_H
-#define BOOST_COROUTINES_V1_DETAIL_COROUTINE_BASE_RESUME_H
-
-#include <iterator>
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/context/fcontext.hpp>
-#include <boost/optional.hpp>
-#include <boost/preprocessor/arithmetic/add.hpp>
-#include <boost/preprocessor/arithmetic/sub.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/punctuation/comma_if.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/range.hpp>
-
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/detail/coroutine_context.hpp>
-#include <boost/coroutine/detail/exceptions.hpp>
-#include <boost/coroutine/detail/holder.hpp>
-#include <boost/coroutine/v1/detail/arg.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template< typename Signature, typename D, typename Result, int arity >
-class coroutine_base_resume;
-
-template< typename Signature, typename D >
-class coroutine_base_resume< Signature, D, void, 0 >
-{
-public:
- void resume()
- {
- holder< void > hldr_to( & static_cast< D * >( this)->caller_);
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- hldr_to.ctx->jump(
- static_cast< D * >( this)->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- static_cast< D * >( this)->preserve_fpu() ) ) );
- BOOST_ASSERT( hldr_from->ctx);
- static_cast< D * >( this)->callee_ = * hldr_from->ctx;
- if ( hldr_from->force_unwind) throw forced_unwind();
- if ( static_cast< D * >( this)->except_)
- rethrow_exception( static_cast< D * >( this)->except_);
- }
-};
-
-template< typename Signature, typename D, typename Result >
-class coroutine_base_resume< Signature, D, Result, 0 >
-{
-public:
- void resume()
- {
- BOOST_ASSERT( static_cast< D * >( this));
- BOOST_ASSERT( ! static_cast< D * >( this)->is_complete() );
-
- holder< void > hldr_to( & static_cast< D * >( this)->caller_);
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- hldr_to.ctx->jump(
- static_cast< D * >( this)->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- static_cast< D * >( this)->preserve_fpu() ) ) );
- BOOST_ASSERT( hldr_from->ctx);
- static_cast< D * >( this)->callee_ = * hldr_from->ctx;
- result_ = hldr_from->data;
- if ( hldr_from->force_unwind) throw forced_unwind();
- if ( static_cast< D * >( this)->except_)
- rethrow_exception( static_cast< D * >( this)->except_);
- }
-
-protected:
- template< typename X, typename Y, int >
- friend struct coroutine_get;
-
- optional< Result > result_;
-};
-
-template< typename Signature, typename D >
-class coroutine_base_resume< Signature, D, void, 1 >
-{
-public:
- typedef typename arg< Signature >::type arg_type;
-
- void resume( arg_type a1)
- {
- BOOST_ASSERT( static_cast< D * >( this));
- BOOST_ASSERT( ! static_cast< D * >( this)->is_complete() );
-
- holder< arg_type > hldr_to( & static_cast< D * >( this)->caller_, a1);
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- hldr_to.ctx->jump(
- static_cast< D * >( this)->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- static_cast< D * >( this)->preserve_fpu() ) ) );
- BOOST_ASSERT( hldr_from->ctx);
- static_cast< D * >( this)->callee_ = * hldr_from->ctx;
- if ( hldr_from->force_unwind) throw forced_unwind();
- if ( static_cast< D * >( this)->except_)
- rethrow_exception( static_cast< D * >( this)->except_);
- }
-};
-
-template< typename Signature, typename D, typename Result >
-class coroutine_base_resume< Signature, D, Result, 1 >
-{
-public:
- typedef typename arg< Signature >::type arg_type;
-
- void resume( arg_type a1)
- {
- BOOST_ASSERT( static_cast< D * >( this));
- BOOST_ASSERT( ! static_cast< D * >( this)->is_complete() );
-
- coroutine_context caller;
- holder< arg_type > hldr_to( & static_cast< D * >( this)->caller_, a1);
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- hldr_to.ctx->jump(
- static_cast< D * >( this)->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- static_cast< D * >( this)->preserve_fpu() ) ) );
- BOOST_ASSERT( hldr_from->ctx);
- static_cast< D * >( this)->callee_ = * hldr_from->ctx;
- result_ = hldr_from->data;
- if ( hldr_from->force_unwind) throw forced_unwind();
- if ( static_cast< D * >( this)->except_)
- rethrow_exception( static_cast< D * >( this)->except_);
- }
-
-protected:
- template< typename X, typename Y, int >
- friend struct coroutine_get;
-
- optional< Result > result_;
-};
-
-#define BOOST_COROUTINE_BASE_RESUME_COMMA(n) BOOST_PP_COMMA_IF(BOOST_PP_SUB(n,1))
-#define BOOST_COROUTINE_BASE_RESUME_VAL(z,n,unused) BOOST_COROUTINE_BASE_RESUME_COMMA(n) BOOST_PP_CAT(a,n)
-#define BOOST_COROUTINE_BASE_RESUME_VALS(n) BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(n,1),BOOST_COROUTINE_BASE_RESUME_VAL,~)
-#define BOOST_COROUTINE_BASE_RESUME_ARG_TYPE(n) \
- typename function_traits< Signature >::BOOST_PP_CAT(BOOST_PP_CAT(arg,n),_type)
-#define BOOST_COROUTINE_BASE_RESUME_ARG(z,n,unused) BOOST_COROUTINE_BASE_RESUME_COMMA(n) BOOST_COROUTINE_BASE_RESUME_ARG_TYPE(n) BOOST_PP_CAT(a,n)
-#define BOOST_COROUTINE_BASE_RESUME_ARGS(n) BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(n,1),BOOST_COROUTINE_BASE_RESUME_ARG,~)
-#define BOOST_COROUTINE_BASE_RESUME(z,n,unused) \
-template< typename Signature, typename D > \
-class coroutine_base_resume< Signature, D, void, n > \
-{ \
-public: \
- typedef typename arg< Signature >::type arg_type; \
-\
- void resume( BOOST_COROUTINE_BASE_RESUME_ARGS(n)) \
- { \
- BOOST_ASSERT( static_cast< D * >( this)); \
- BOOST_ASSERT( ! static_cast< D * >( this)->is_complete() ); \
-\
- holder< arg_type > hldr_to( \
- & static_cast< D * >( this)->caller_, \
- arg_type(BOOST_COROUTINE_BASE_RESUME_VALS(n) ) ); \
- holder< void > * hldr_from( \
- reinterpret_cast< holder< void > * >( \
- hldr_to.ctx->jump( \
- static_cast< D * >( this)->callee_, \
- reinterpret_cast< intptr_t >( & hldr_to), \
- static_cast< D * >( this)->preserve_fpu() ) ) ); \
- BOOST_ASSERT( hldr_from->ctx); \
- static_cast< D * >( this)->callee_ = * hldr_from->ctx; \
- if ( hldr_from->force_unwind) throw forced_unwind(); \
- if ( static_cast< D * >( this)->except_) \
- rethrow_exception( static_cast< D * >( this)->except_); \
- } \
-}; \
-\
-template< typename Signature, typename D, typename Result > \
-class coroutine_base_resume< Signature, D, Result, n > \
-{ \
-public: \
- typedef typename arg< Signature >::type arg_type; \
-\
- void resume( BOOST_COROUTINE_BASE_RESUME_ARGS(n)) \
- { \
- BOOST_ASSERT( static_cast< D * >( this)); \
- BOOST_ASSERT( ! static_cast< D * >( this)->is_complete() ); \
-\
- holder< arg_type > hldr_to( \
- & static_cast< D * >( this)->caller_, \
- arg_type(BOOST_COROUTINE_BASE_RESUME_VALS(n) ) ); \
- holder< Result > * hldr_from( \
- reinterpret_cast< holder< Result > * >( \
- hldr_to.ctx->jump( \
- static_cast< D * >( this)->callee_, \
- reinterpret_cast< intptr_t >( & hldr_to), \
- static_cast< D * >( this)->preserve_fpu() ) ) ); \
- BOOST_ASSERT( hldr_from->ctx); \
- static_cast< D * >( this)->callee_ = * hldr_from->ctx; \
- result_ = hldr_from->data; \
- if ( hldr_from->force_unwind) throw forced_unwind(); \
- if ( static_cast< D * >( this)->except_) \
- rethrow_exception( static_cast< D * >( this)->except_); \
- } \
-\
-protected: \
- template< typename X, typename Y, int > \
- friend struct coroutine_get; \
-\
- optional< Result > result_; \
-};
-BOOST_PP_REPEAT_FROM_TO(2,11,BOOST_COROUTINE_BASE_RESUME,~)
-#undef BOOST_COROUTINE_BASE_RESUME
-#undef BOOST_COROUTINE_BASE_RESUME_ARGS
-#undef BOOST_COROUTINE_BASE_RESUME_ARG
-#undef BOOST_COROUTINE_BASE_RESUME_ARG_TYPE
-#undef BOOST_COROUTINE_BASE_RESUME_VALS
-#undef BOOST_COROUTINE_BASE_RESUME_VAL
-#undef BOOST_COROUTINE_BASE_RESUME_COMMA
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_V1_DETAIL_coroutine_base_resume_H
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_caller.hpp b/3party/boost/boost/coroutine/v1/detail/coroutine_caller.hpp
deleted file mode 100644
index 3796de7356..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_caller.hpp
+++ /dev/null
@@ -1,57 +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_COROUTINES_V1_DETAIL_COROUTINE_CALLER_H
-#define BOOST_COROUTINES_V1_DETAIL_COROUTINE_CALLER_H
-
-#include <boost/config.hpp>
-#include <boost/context/fcontext.hpp>
-
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/v1/detail/coroutine_base.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template< typename Signature, typename Allocator >
-class coroutine_caller : public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_caller< Signature, Allocator >
- >::other allocator_t;
-
- coroutine_caller( coroutine_context const& callee, bool unwind, bool preserve_fpu,
- allocator_t const& alloc) BOOST_NOEXCEPT :
- coroutine_base< Signature >( callee, unwind, preserve_fpu),
- alloc_( alloc)
- {}
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-
-private:
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_caller * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-};
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_V1_DETAIL_COROUTINE_CALLER_H
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_get.hpp b/3party/boost/boost/coroutine/v1/detail/coroutine_get.hpp
deleted file mode 100644
index 62b73bba7d..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_get.hpp
+++ /dev/null
@@ -1,54 +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_COROUTINES_V1_DETAIL_COROUTINE_GET_H
-#define BOOST_COROUTINES_V1_DETAIL_COROUTINE_GET_H
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/type_traits/function_traits.hpp>
-
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/detail/param.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template<
- typename D,
- typename Result, int arity
->
-struct coroutine_get;
-
-template< typename D, int arity >
-struct coroutine_get< D, void, arity >
-{};
-
-template< typename D, typename Result, int arity >
-struct coroutine_get
-{
- bool has_result() const
- { return static_cast< D const* >( this)->impl_->result_; }
-
- typename param< Result >::type get() const
- {
- BOOST_ASSERT( static_cast< D const* >( this)->impl_->result_);
- return static_cast< D const* >( this)->impl_->result_.get();
- }
-};
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_V1_DETAIL_COROUTINE_GET_H
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_object.hpp b/3party/boost/boost/coroutine/v1/detail/coroutine_object.hpp
deleted file mode 100644
index 6e8978a0e7..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_object.hpp
+++ /dev/null
@@ -1,111 +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_COROUTINES_V1_DETAIL_COROUTINE_OBJECT_H
-#define BOOST_COROUTINES_V1_DETAIL_COROUTINE_OBJECT_H
-
-#include <cstddef>
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/exception_ptr.hpp>
-#include <boost/move/move.hpp>
-#include <boost/ref.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/type_traits/function_traits.hpp>
-#include <boost/utility.hpp>
-
-#include <boost/coroutine/attributes.hpp>
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/detail/exceptions.hpp>
-#include <boost/coroutine/detail/flags.hpp>
-#include <boost/coroutine/detail/holder.hpp>
-#include <boost/coroutine/detail/param.hpp>
-#include <boost/coroutine/flags.hpp>
-#include <boost/coroutine/stack_context.hpp>
-#include <boost/coroutine/v1/detail/arg.hpp>
-#include <boost/coroutine/v1/detail/coroutine_base.hpp>
-
-#ifdef BOOST_MSVC
- #pragma warning (push)
- #pragma warning (disable: 4355) // using 'this' in initializer list
-#endif
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template< typename Coroutine >
-void trampoline1( intptr_t vp)
-{
- BOOST_ASSERT( vp);
-
- reinterpret_cast< Coroutine * >( vp)->run();
-}
-
-template< typename Coroutine, typename Arg >
-void trampoline2( intptr_t vp)
-{
- BOOST_ASSERT( vp);
-
- tuple< Coroutine *, Arg > * tpl(
- reinterpret_cast< tuple< Coroutine *, Arg > * >( vp) );
- Coroutine * coro( get< 0 >( * tpl) );
- Arg arg( get< 1 >( * tpl) );
-
- coro->run( arg);
-}
-
-template< typename StackAllocator >
-struct stack_tuple
-{
- coroutines::stack_context stack_ctx;
- StackAllocator stack_alloc;
-
- stack_tuple( StackAllocator const& stack_alloc_, std::size_t size) :
- stack_ctx(),
- stack_alloc( stack_alloc_)
- {
- stack_alloc.allocate( stack_ctx, size);
- }
-
- ~stack_tuple()
- {
- stack_alloc.deallocate( stack_ctx);
- }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result, int arity
->
-class coroutine_object;
-
-#include <boost/coroutine/v1/detail/coroutine_object_void_0.ipp>
-#include <boost/coroutine/v1/detail/coroutine_object_void_1.ipp>
-#include <boost/coroutine/v1/detail/coroutine_object_void_arity.ipp>
-#include <boost/coroutine/v1/detail/coroutine_object_result_0.ipp>
-#include <boost/coroutine/v1/detail/coroutine_object_result_1.ipp>
-#include <boost/coroutine/v1/detail/coroutine_object_result_arity.ipp>
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#ifdef BOOST_MSVC
- #pragma warning (pop)
-#endif
-
-#endif // BOOST_COROUTINES_V1_DETAIL_COROUTINE_OBJECT_H
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_object_result_0.ipp b/3party/boost/boost/coroutine/v1/detail/coroutine_object_result_0.ipp
deleted file mode 100644
index 96022fc800..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_object_result_0.ipp
+++ /dev/null
@@ -1,363 +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)
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result
->
-class coroutine_object< Signature, Fn, StackAllocator, Allocator, Caller, Result, 0 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, Result, 0
- >
- >::other allocator_t;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object const&);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< void > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_(); }
-#else
- coroutine_object( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-#endif
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result
->
-class coroutine_object< Signature, reference_wrapper< Fn >, StackAllocator, Allocator, Caller, Result, 0 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, Result, 0
- >
- >::other allocator_t;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object const&);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< void > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result
->
-class coroutine_object< Signature, const reference_wrapper< Fn >, StackAllocator, Allocator, Caller, Result, 0 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, Result, 0
- >
- >::other allocator_t;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object const&);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< void > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( const reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( & this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_object_result_1.ipp b/3party/boost/boost/coroutine/v1/detail/coroutine_object_result_1.ipp
deleted file mode 100644
index b1e5dfefa0..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_object_result_1.ipp
+++ /dev/null
@@ -1,557 +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)
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result
->
-class coroutine_object< Signature, Fn, StackAllocator, Allocator, Caller, Result, 1 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, Result, 1
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_( arg); }
-#else
- coroutine_object( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( Fn fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-#endif
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result
->
-class coroutine_object< Signature, reference_wrapper< Fn >, StackAllocator, Allocator, Caller, Result, 1 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, Result, 1
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( reference_wrapper< Fn > fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result
->
-class coroutine_object< Signature, const reference_wrapper< Fn >, StackAllocator, Allocator, Caller, Result, 1 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, Result, 1
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( const reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( const reference_wrapper< Fn > fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_object_result_arity.ipp b/3party/boost/boost/coroutine/v1/detail/coroutine_object_result_arity.ipp
deleted file mode 100644
index c2728cbd86..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_object_result_arity.ipp
+++ /dev/null
@@ -1,559 +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)
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result, int arity
->
-class coroutine_object :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, Result, arity
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_( arg); }
-#else
- coroutine_object( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( Fn fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-#endif
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result, int arity
->
-class coroutine_object< Signature, reference_wrapper< Fn >, StackAllocator, Allocator, Caller, Result, arity > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, Result, arity
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( reference_wrapper< Fn > fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result, int arity
->
-class coroutine_object< Signature, const reference_wrapper< Fn >, StackAllocator, Allocator, Caller, Result, arity > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, Result, arity
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( const reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( const reference_wrapper< Fn > fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- {
- fn_( c);
- }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_object_void_0.ipp b/3party/boost/boost/coroutine/v1/detail/coroutine_object_void_0.ipp
deleted file mode 100644
index e20df6fadc..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_object_void_0.ipp
+++ /dev/null
@@ -1,357 +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)
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller
->
-class coroutine_object< Signature, Fn, StackAllocator, Allocator, Caller, void, 0 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, void, 0
- >
- >::other allocator_t;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object const&);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< void > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_(); }
-#else
- coroutine_object( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->pbase_type::stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-#endif
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller
->
-class coroutine_object< Signature, reference_wrapper< Fn >, StackAllocator, Allocator, Caller, void, 0 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, void, 0
- >
- >::other allocator_t;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object const&);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< void > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller
->
-class coroutine_object< Signature, const reference_wrapper< Fn >, StackAllocator, Allocator, Caller, void, 0 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, void, 0
- >
- >::other allocator_t;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object const&);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< void > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( const reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_object_void_1.ipp b/3party/boost/boost/coroutine/v1/detail/coroutine_object_void_1.ipp
deleted file mode 100644
index 7fba21619a..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_object_void_1.ipp
+++ /dev/null
@@ -1,550 +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)
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller
->
-class coroutine_object< Signature, Fn, StackAllocator, Allocator, Caller, void, 1 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, void, 1
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_( arg); }
-#else
- coroutine_object( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( Fn fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-#endif
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller
->
-class coroutine_object< Signature, reference_wrapper< Fn >, StackAllocator, Allocator, Caller, void, 1 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, void, 1
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( reference_wrapper< Fn > fn,
- typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller
->
-class coroutine_object< Signature, const reference_wrapper< Fn >, StackAllocator, Allocator, Caller, void, 1 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, void, 1
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( const reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( const reference_wrapper< Fn > fn,
- typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_object_void_arity.ipp b/3party/boost/boost/coroutine/v1/detail/coroutine_object_void_arity.ipp
deleted file mode 100644
index 7da3e777f0..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_object_void_arity.ipp
+++ /dev/null
@@ -1,551 +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)
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- int arity
->
-class coroutine_object< Signature, Fn, StackAllocator, Allocator, Caller, void, arity > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, void, arity
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_( arg); }
-#else
- coroutine_object( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( Fn fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-#endif
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- int arity
->
-class coroutine_object< Signature, reference_wrapper< Fn >, StackAllocator, Allocator, Caller, void, arity > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, void, arity
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( reference_wrapper< Fn > fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Signature,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- int arity
->
-class coroutine_object< Signature, const reference_wrapper< Fn >, StackAllocator, Allocator, Caller, void, arity > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Signature >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Signature, Fn, StackAllocator, Allocator, Caller, void, arity
- >
- >::other allocator_t;
- typedef typename arg< Signature >::type arg_type;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Signature > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object &);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void enter_( typename detail::param< arg_type >::type arg)
- {
- tuple< coroutine_object *,
- typename detail::param< arg_type >::type
- > tpl( this, arg);
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & tpl),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< arg_type > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( const reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( const reference_wrapper< Fn > fn, typename detail::param< arg_type >::type arg, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline2< coroutine_object, typename detail::param< arg_type >::type >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_( arg); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void run( typename detail::param< arg_type >::type arg)
- {
- coroutine_context callee;
- coroutine_context caller;
-
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- c.impl_->result_ = arg;
- try
- { fn_( c); }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
- callee = c.impl_->callee_;
- }
-
- this->flags_ |= flag_complete;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
diff --git a/3party/boost/boost/coroutine/v1/detail/coroutine_op.hpp b/3party/boost/boost/coroutine/v1/detail/coroutine_op.hpp
deleted file mode 100644
index 83806acce9..0000000000
--- a/3party/boost/boost/coroutine/v1/detail/coroutine_op.hpp
+++ /dev/null
@@ -1,326 +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_COROUTINES_V1_DETAIL_COROUTINE_OP_H
-#define BOOST_COROUTINES_V1_DETAIL_COROUTINE_OP_H
-
-#include <iterator>
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/context/fcontext.hpp>
-#include <boost/optional.hpp>
-#include <boost/preprocessor/arithmetic/add.hpp>
-#include <boost/preprocessor/arithmetic/sub.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/punctuation/comma_if.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/type_traits/function_traits.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/v1/detail/arg.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template< typename Signature, typename D, typename Result, int arity >
-struct coroutine_op;
-
-template< typename Signature, typename D >
-struct coroutine_op< Signature, D, void, 0 >
-{
- D & operator()()
- {
- BOOST_ASSERT( static_cast< D * >( this)->impl_);
- BOOST_ASSERT( ! static_cast< D * >( this)->impl_->is_complete() );
-
- static_cast< D * >( this)->impl_->resume();
-
- return * static_cast< D * >( this);
- }
-};
-
-template< typename Signature, typename D, typename Result >
-struct coroutine_op< Signature, D, Result, 0 >
-{
- class iterator : public std::iterator< std::input_iterator_tag, typename remove_reference< Result >::type >
- {
- private:
- D * dp_;
- optional< Result > val_;
-
- void fetch_()
- {
- BOOST_ASSERT( dp_);
-
- if ( ! dp_->has_result() )
- {
- dp_ = 0;
- val_ = none;
- return;
- }
- val_ = dp_->get();
- }
-
- void increment_()
- {
- BOOST_ASSERT( dp_);
- BOOST_ASSERT( * dp_);
-
- ( * dp_)();
- fetch_();
- }
-
- public:
- typedef typename iterator::pointer pointer_t;
- typedef typename iterator::reference reference_t;
-
- iterator() :
- dp_( 0), val_()
- {}
-
- explicit iterator( D * dp) :
- dp_( dp), val_()
- { fetch_(); }
-
- iterator( iterator const& other) :
- dp_( other.dp_), val_( other.val_)
- {}
-
- iterator & operator=( iterator const& other)
- {
- if ( this == & other) return * this;
- dp_ = other.dp_;
- val_ = other.val_;
- return * this;
- }
-
- bool operator==( iterator const& other)
- { return other.dp_ == dp_ && other.val_ == val_; }
-
- bool operator!=( iterator const& other)
- { return other.dp_ != dp_ || other.val_ != val_; }
-
- iterator & operator++()
- {
- increment_();
- return * this;
- }
-
- iterator operator++( int)
- {
- iterator tmp( * this);
- ++*this;
- return tmp;
- }
-
- reference_t operator*() const
- { return const_cast< optional< Result > & >( val_).get(); }
-
- pointer_t operator->() const
- { return const_cast< optional< Result > & >( val_).get_ptr(); }
- };
-
- class const_iterator : public std::iterator< std::input_iterator_tag, const typename remove_reference< Result >::type >
- {
- private:
- D * dp_;
- optional< Result > val_;
-
- void fetch_()
- {
- BOOST_ASSERT( dp_);
-
- if ( ! dp_->has_result() )
- {
- dp_ = 0;
- val_ = none;
- return;
- }
- val_ = dp_->get();
- }
-
- void increment_()
- {
- BOOST_ASSERT( dp_);
- BOOST_ASSERT( * dp_);
-
- ( * dp_)();
- fetch_();
- }
-
- public:
- typedef typename const_iterator::pointer pointer_t;
- typedef typename const_iterator::reference reference_t;
-
- const_iterator() :
- dp_( 0), val_()
- {}
-
- explicit const_iterator( D const* dp) :
- dp_( const_cast< D * >( dp) ), val_()
- { fetch_(); }
-
- const_iterator( const_iterator const& other) :
- dp_( other.dp_), val_( other.val_)
- {}
-
- const_iterator & operator=( const_iterator const& other)
- {
- if ( this == & other) return * this;
- dp_ = other.dp_;
- val_ = other.val_;
- return * this;
- }
-
- bool operator==( const_iterator const& other)
- { return other.dp_ == dp_ && other.val_ == val_; }
-
- bool operator!=( const_iterator const& other)
- { return other.dp_ != dp_ || other.val_ != val_; }
-
- const_iterator & operator++()
- {
- increment_();
- return * this;
- }
-
- const_iterator operator++( int)
- {
- const_iterator tmp( * this);
- ++*this;
- return tmp;
- }
-
- reference_t operator*() const
- { return val_.get(); }
-
- pointer_t operator->() const
- { return val_.get_ptr(); }
- };
-
- D & operator()()
- {
- BOOST_ASSERT( static_cast< D * >( this)->impl_);
- BOOST_ASSERT( ! static_cast< D * >( this)->impl_->is_complete() );
-
- static_cast< D * >( this)->impl_->resume();
-
- return * static_cast< D * >( this);
- }
-};
-
-template< typename Signature, typename D >
-struct coroutine_op< Signature, D, void, 1 >
-{
- typedef typename arg< Signature >::type arg_type;
-
- class iterator : public std::iterator< std::output_iterator_tag, void, void, void, void >
- {
- private:
- D * dp_;
-
- public:
- iterator() :
- dp_( 0)
- {}
-
- explicit iterator( D * dp) :
- dp_( dp)
- {}
-
- iterator & operator=( arg_type a1)
- {
- BOOST_ASSERT( dp_);
- if ( ! ( * dp_)( a1) ) dp_ = 0;
- return * this;
- }
-
- bool operator==( iterator const& other)
- { return other.dp_ == dp_; }
-
- bool operator!=( iterator const& other)
- { return other.dp_ != dp_; }
-
- iterator & operator*()
- { return * this; }
-
- iterator & operator++()
- { return * this; }
- };
-
- struct const_iterator;
-
- D & operator()( arg_type a1)
- {
- BOOST_ASSERT( static_cast< D * >( this)->impl_);
- BOOST_ASSERT( ! static_cast< D * >( this)->impl_->is_complete() );
-
- static_cast< D * >( this)->impl_->resume( a1);
-
- return * static_cast< D * >( this);
- }
-};
-
-template< typename Signature, typename D, typename Result >
-struct coroutine_op< Signature, D, Result, 1 >
-{
- typedef typename arg< Signature >::type arg_type;
-
- D & operator()( arg_type a1)
- {
- BOOST_ASSERT( static_cast< D * >( this)->impl_);
- BOOST_ASSERT( ! static_cast< D * >( this)->impl_->is_complete() );
-
- static_cast< D * >( this)->impl_->resume( a1);
-
- return * static_cast< D * >( this);
- }
-};
-
-#define BOOST_COROUTINE_OP_COMMA(n) BOOST_PP_COMMA_IF(BOOST_PP_SUB(n,1))
-#define BOOST_COROUTINE_OP_VAL(z,n,unused) BOOST_COROUTINE_OP_COMMA(n) BOOST_PP_CAT(a,n)
-#define BOOST_COROUTINE_OP_VALS(n) BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(n,1),BOOST_COROUTINE_OP_VAL,~)
-#define BOOST_COROUTINE_OP_ARG_TYPE(n) \
- typename function_traits< Signature >::BOOST_PP_CAT(BOOST_PP_CAT(arg,n),_type)
-#define BOOST_COROUTINE_OP_ARG(z,n,unused) BOOST_COROUTINE_OP_COMMA(n) BOOST_COROUTINE_OP_ARG_TYPE(n) BOOST_PP_CAT(a,n)
-#define BOOST_COROUTINE_OP_ARGS(n) BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(n,1),BOOST_COROUTINE_OP_ARG,~)
-#define BOOST_COROUTINE_OP(z,n,unused) \
-template< typename Signature, typename D, typename Result > \
-struct coroutine_op< Signature, D, Result, n > \
-{ \
- D & operator()( BOOST_COROUTINE_OP_ARGS(n)) \
- { \
- BOOST_ASSERT( static_cast< D * >( this)->impl_); \
- BOOST_ASSERT( ! static_cast< D * >( this)->impl_->is_complete() ); \
-\
- static_cast< D * >( this)->impl_->resume(BOOST_COROUTINE_OP_VALS(n)); \
-\
- return * static_cast< D * >( this); \
- } \
-};
-BOOST_PP_REPEAT_FROM_TO(2,11,BOOST_COROUTINE_OP,~)
-#undef BOOST_COROUTINE_OP
-#undef BOOST_COROUTINE_OP_ARGS
-#undef BOOST_COROUTINE_OP_ARG
-#undef BOOST_COROUTINE_OP_ARG_TYPE
-#undef BOOST_COROUTINE_OP_VALS
-#undef BOOST_COROUTINE_OP_VAL
-#undef BOOST_COROUTINE_OP_COMMA
-
-}}}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_V1_DETAIL_COROUTINE_OP_H
diff --git a/3party/boost/boost/coroutine/v2/detail/coroutine_object.hpp b/3party/boost/boost/coroutine/v2/detail/coroutine_object.hpp
deleted file mode 100644
index 4255b85b01..0000000000
--- a/3party/boost/boost/coroutine/v2/detail/coroutine_object.hpp
+++ /dev/null
@@ -1,423 +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_COROUTINES_V1_DETAIL_COROUTINE_OBJECT_H
-#define BOOST_COROUTINES_V1_DETAIL_COROUTINE_OBJECT_H
-
-#include <cstddef>
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/exception_ptr.hpp>
-#include <boost/move/move.hpp>
-#include <boost/ref.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/type_traits/function_traits.hpp>
-#include <boost/utility.hpp>
-
-#include <boost/coroutine/attributes.hpp>
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/detail/exceptions.hpp>
-#include <boost/coroutine/detail/flags.hpp>
-#include <boost/coroutine/detail/holder.hpp>
-#include <boost/coroutine/detail/param.hpp>
-#include <boost/coroutine/flags.hpp>
-#include <boost/coroutine/stack_context.hpp>
-#include <boost/coroutine/v2/detail/arg.hpp>
-#include <boost/coroutine/v2/detail/coroutine_base.hpp>
-
-template<
- typename Arg,
- typename Fn, typename StackAllocator, typename Allocator
->
-class coroutine_object< Arg, Fn, StackAllocator, Allocator > :
- private stack_tuple< StackAllocator >,
- public coroutine_base
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Arg, Fn, StackAllocator, Allocator
- >
- >::other allocator_t;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object const&);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< void > * hldr_from(
- reinterpret_cast< holder< void > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void run_( Caller & c)
- {
- coroutine_context callee;
- coroutine_context caller;
- try
- {
- fn_( c);
- this->flags_ |= flag_complete;
- callee = c.impl_->callee_;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
-
- this->flags_ |= flag_complete;
- callee = c.impl_->callee_;
- holder< void > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< void > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( forward< Fn >( fn) ),
- alloc_( alloc)
- { enter_(); }
-#else
- coroutine_object( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- coroutine_object( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-#endif
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- run_( c);
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Arg,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result
->
-class coroutine_object< Arg, reference_wrapper< Fn >, StackAllocator, Allocator, Caller, Result, 0 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Arg >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Arg, Fn, StackAllocator, Allocator, Caller, Result, 0
- >
- >::other allocator_t;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Arg > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object const&);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = * hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void run_( Caller & c)
- {
- coroutine_context callee;
- coroutine_context caller;
- try
- {
- fn_( c);
- this->flags_ |= flag_complete;
- callee = c.impl_->callee_;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
-
- this->flags_ |= flag_complete;
- callee = c.impl_->callee_;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< void > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- Caller c( this->caller_, false, this->preserve_fpu(), alloc_);
- run_( c);
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
-
-template<
- typename Arg,
- typename Fn, typename StackAllocator, typename Allocator,
- typename Caller,
- typename Result
->
-class coroutine_object< Arg, const reference_wrapper< Fn >, StackAllocator, Allocator, Caller, Result, 0 > :
- private stack_tuple< StackAllocator >,
- public coroutine_base< Arg >
-{
-public:
- typedef typename Allocator::template rebind<
- coroutine_object<
- Arg, Fn, StackAllocator, Allocator, Caller, Result, 0
- >
- >::other allocator_t;
-
-private:
- typedef stack_tuple< StackAllocator > pbase_type;
- typedef coroutine_base< Arg > base_type;
-
- Fn fn_;
- allocator_t alloc_;
-
- static void destroy_( allocator_t & alloc, coroutine_object * p)
- {
- alloc.destroy( p);
- alloc.deallocate( p, 1);
- }
-
- coroutine_object( coroutine_object const&);
- coroutine_object & operator=( coroutine_object const&);
-
- void enter_()
- {
- holder< Result > * hldr_from(
- reinterpret_cast< holder< Result > * >(
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( this),
- this->preserve_fpu() ) ) );
- this->callee_ = hldr_from->ctx;
- this->result_ = hldr_from->data;
- if ( this->except_) rethrow_exception( this->except_);
- }
-
- void run_( Caller & c)
- {
- coroutine_context callee;
- coroutine_context caller;
- try
- {
- fn_( c);
- this->flags_ |= flag_complete;
- callee = c.impl_->callee_;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
- catch ( forced_unwind const&)
- {}
- catch (...)
- { this->except_ = current_exception(); }
-
- this->flags_ |= flag_complete;
- callee = c.impl_->callee_;
- holder< Result > hldr_to( & caller);
- caller.jump(
- callee,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- BOOST_ASSERT_MSG( false, "coroutine is complete");
- }
-
- void unwind_stack_() BOOST_NOEXCEPT
- {
- BOOST_ASSERT( ! this->is_complete() );
-
- this->flags_ |= flag_unwind_stack;
- holder< void > hldr_to( & this->caller_, true);
- this->caller_.jump(
- this->callee_,
- reinterpret_cast< intptr_t >( & hldr_to),
- this->preserve_fpu() );
- this->flags_ &= ~flag_unwind_stack;
-
- BOOST_ASSERT( this->is_complete() );
- }
-
-public:
- coroutine_object( const reference_wrapper< Fn > fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- allocator_t const& alloc) :
- pbase_type( stack_alloc, attr.size),
- base_type(
- trampoline1< coroutine_object >,
- & this->stack_ctx,
- stack_unwind == attr.do_unwind,
- fpu_preserved == attr.preserve_fpu),
- fn_( fn),
- alloc_( alloc)
- { enter_(); }
-
- ~coroutine_object()
- {
- if ( ! this->is_complete() && this->force_unwind() )
- unwind_stack_();
- }
-
- void run()
- {
- Caller c( & this->caller_, false, this->preserve_fpu(), alloc_);
- run_( c);
- }
-
- void deallocate_object()
- { destroy_( alloc_, this); }
-};
diff --git a/3party/boost/boost/coroutine/v2/pull_corotuine.hpp b/3party/boost/boost/coroutine/v2/pull_corotuine.hpp
deleted file mode 100644
index fa214765ab..0000000000
--- a/3party/boost/boost/coroutine/v2/pull_corotuine.hpp
+++ /dev/null
@@ -1,355 +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_COROUTINES_V2_PULL_COROUTINE_H
-#define BOOST_COROUTINES_V2_PULL_COROUTINE_H
-
-#include <cstddef>
-#include <memory>
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/move/move.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/decay.hpp>
-#include <boost/type_traits/function_traits.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/utility/enable_if.hpp>
-#include <boost/utility/result_of.hpp>
-
-#include <boost/coroutine/attributes.hpp>
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/detail/coroutine_context.hpp>
-#include <boost/coroutine/stack_allocator.hpp>
-#include <boost/coroutine/v2/pull_coroutine_base.hpp.hpp>
-#include <boost/coroutine/v2/pull_coroutine_object.hpp.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template< typename R >
-class pull_coroutine
-{
-private:
- typedef detail::pull_coroutine_base< R > base_t;
- typedef typename base_t::ptr_t ptr_t;
-
- struct dummy
- { void nonnull() {} };
-
- typedef void ( dummy::*safe_bool)();
-
- ptr_t impl_;
-
- BOOST_MOVABLE_BUT_NOT_COPYABLE( pull_coroutine)
-
-public:
- pull_coroutine() BOOST_NOEXCEPT :
- impl_()
- {}
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- template< typename Fn >
- explicit pull_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< pull_coroutine > const& alloc =
- std::allocator< pull_coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, pull_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::pull_coroutine_object<
- R, Fn, stack_allocator, std::allocator< pull_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit pull_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< pull_coroutine > const& alloc =
- std::allocator< pull_coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, pull_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::pull_coroutine_object<
- R, Fn, StackAllocator, std::allocator< pull_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit pull_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_same< typename decay< Fn >::type, pull_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::pull_coroutine_object<
- R, Fn, StackAllocator, Allocator
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-#else
- template< typename Fn >
- explicit pull_coroutine( Fn fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< pull_coroutine > const& alloc =
- std::allocator< pull_coroutine >(),
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::pull_coroutine_object<
- R, Fn, stack_allocator, std::allocator< pull_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit pull_coroutine( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< pull_coroutine > const& alloc =
- std::allocator< pull_coroutine >(),
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::pull_coroutine_object<
- R, Fn, StackAllocator, std::allocator< pull_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit pull_coroutine( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::pull_coroutine_object<
- R, Fn, StackAllocator, Allocator
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn >
- explicit pull_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< pull_coroutine > const& alloc =
- std::allocator< pull_coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, pull_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::pull_coroutine_object<
- R, Fn, stack_allocator, std::allocator< pull_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit pull_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< pull_coroutine > const& alloc =
- std::allocator< pull_coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, pull_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::pull_coroutine_object<
- R, Fn, StackAllocator, std::allocator< pull_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit pull_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_same< typename decay< Fn >::type, pull_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::pull_coroutine_object<
- R, Fn, StackAllocator, Allocator
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-#endif
-
- pull_coroutine( BOOST_RV_REF( pull_coroutine) other) BOOST_NOEXCEPT :
- impl_()
- { swap( other); }
-
- pull_coroutine & operator=( BOOST_RV_REF( pull_coroutine) other) BOOST_NOEXCEPT
- {
- pull_coroutine tmp( boost::move( other) );
- swap( tmp);
- return * this;
- }
-
- bool empty() const BOOST_NOEXCEPT
- { return ! impl_; }
-
- operator safe_bool() const BOOST_NOEXCEPT
- { return ( empty() || impl_->is_complete() ) ? 0 : & dummy::nonnull; }
-
- bool operator!() const BOOST_NOEXCEPT
- { return empty() || impl_->is_complete(); }
-
- void swap( pull_coroutine & other) BOOST_NOEXCEPT
- { impl_.swap( other.impl_); }
-
- void operator()()
- {
- BOOST_ASSERT( * this);
-
- impl_->resume();
- }
-
- bool has_result() const
- {
- BOOST_ASSERT( * this);
-
- return impl_->has_result();
- }
-
- R get() const
- {
- BOOST_ASSERT( * this);
-
- return impl_->get();
- }
-};
-
-template< typename R >
-void swap( pull_coroutine< R > & l, pull_coroutine< R > & r) BOOST_NOEXCEPT
-{ l.swap( r); }
-#if 0
-template< typename R >
-inline
-typename pull_coroutine< R >::iterator
-range_begin( pull_coroutine< R > & c)
-{ return typename pull_coroutine< R >::iterator( & c); }
-
-template< typename R >
-inline
-typename pull_coroutine< R >::const_iterator
-range_begin( pull_coroutine< R > const& c)
-{ return typename pull_coroutine< R >::const_iterator( & c); }
-
-template< typename R >
-inline
-typename pull_coroutine< R >::iterator
-range_end( pull_coroutine< R > &)
-{ return typename pull_coroutine< R >::iterator(); }
-
-template< typename R >
-inline
-typename pull_coroutine< R >::const_iterator
-range_end( pull_coroutine< R > const&)
-{ return typename pull_coroutine< R >::const_iterator(); }
-
-template< typename R >
-inline
-typename pull_coroutine< R >::iterator
-begin( pull_coroutine< R > & c)
-{ return boost::begin( c); }
-
-template< typename R >
-inline
-typename pull_coroutine< R >::iterator
-end( pull_coroutine< R > & c)
-{ return boost::end( c); }
-
-template< typename R >
-inline
-typename pull_coroutine< R >::const_iterator
-begin( pull_coroutine< R > const& c)
-{ return boost::const_begin( c); }
-
-template< typename R >
-inline
-typename pull_coroutine< R >::const_iterator
-end( pull_coroutine< R > const& c)
-{ return boost::const_end( c); }
-
-}
-
-template< typename R >
-struct range_mutable_iterator< coroutines::coroutine< R > >
-{ typedef typename coroutines::coroutine< R >::iterator type; };
-
-template< typename R >
-struct range_const_iterator< coroutines::coroutine< R > >
-{ typedef typename coroutines::coroutine< R >::const_iterator type; };
-#endif
-}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_V2_PULL_COROUTINE_H
diff --git a/3party/boost/boost/coroutine/v2/push_coroutine.hpp b/3party/boost/boost/coroutine/v2/push_coroutine.hpp
deleted file mode 100644
index a0a63e5609..0000000000
--- a/3party/boost/boost/coroutine/v2/push_coroutine.hpp
+++ /dev/null
@@ -1,357 +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_COROUTINES_V2_PUSH_COROUTINE_H
-#define BOOST_COROUTINES_V2_PUSH_COROUTINE_H
-
-#include <cstddef>
-#include <memory>
-
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/move/move.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/decay.hpp>
-#include <boost/type_traits/function_traits.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/utility/enable_if.hpp>
-#include <boost/utility/result_of.hpp>
-
-#include <boost/coroutine/attributes.hpp>
-#include <boost/coroutine/detail/config.hpp>
-#include <boost/coroutine/detail/coroutine_context.hpp>
-#include <boost/coroutine/stack_allocator.hpp>
-#include <boost/coroutine/v2/push_coroutine_base.hpp>
-#include <boost/coroutine/v2/push_coroutine_object.hpp.hpp>
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-namespace boost {
-namespace coroutines {
-namespace detail {
-
-template< typename Arg >
-class push_coroutine
-{
-private:
- typedef detail::push_coroutine_base< Arg > base_t;
- typedef typename base_t::ptr_t ptr_t;
-
- struct dummy
- { void nonnull() {} };
-
- typedef void ( dummy::*safe_bool)();
-
- ptr_t impl_;
-
- BOOST_MOVABLE_BUT_NOT_COPYABLE( push_coroutine)
-
-public:
- push_coroutine() BOOST_NOEXCEPT :
- impl_()
- {}
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- template< typename Fn >
- explicit push_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< push_coroutine > const& alloc =
- std::allocator< push_coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, push_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::push_coroutine_object<
- Arg, Fn, stack_allocator, std::allocator< push_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit push_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< push_coroutine > const& alloc =
- std::allocator< push_coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, push_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::push_coroutine_object<
- Arg, Fn, StackAllocator, std::allocator< push_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit push_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_same< typename decay< Fn >::type, push_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::push_coroutine_object<
- Arg, Fn, StackAllocator, Allocator
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( forward< Fn >( fn), attr, stack_alloc, a) );
- }
-#else
- template< typename Fn >
- explicit push_coroutine( Fn fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< push_coroutine > const& alloc =
- std::allocator< push_coroutine >(),
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::push_coroutine_object<
- Arg, Fn, stack_allocator, std::allocator< push_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit push_coroutine( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< push_coroutine > const& alloc =
- std::allocator< push_coroutine >(),
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::push_coroutine_object<
- Arg, Fn, StackAllocator, std::allocator< push_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit push_coroutine( Fn fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_convertible< Fn &, BOOST_RV_REF( Fn) >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::push_coroutine_object<
- Arg, Fn, StackAllocator, Allocator
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn >
- explicit push_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr = attributes(),
- stack_allocator const& stack_alloc =
- stack_allocator(),
- std::allocator< push_coroutine > const& alloc =
- std::allocator< push_coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, push_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::push_coroutine_object<
- Arg, Fn, stack_allocator, std::allocator< push_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator >
- explicit push_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- std::allocator< push_coroutine > const& alloc =
- std::allocator< push_coroutine >(),
- typename disable_if<
- is_same< typename decay< Fn >::type, push_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::push_coroutine_object<
- Arg, Fn, StackAllocator, std::allocator< push_coroutine >
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-
- template< typename Fn, typename StackAllocator, typename Allocator >
- explicit push_coroutine( BOOST_RV_REF( Fn) fn, attributes const& attr,
- StackAllocator const& stack_alloc,
- Allocator const& alloc,
- typename disable_if<
- is_same< typename decay< Fn >::type, push_coroutine >,
- dummy *
- >::type = 0) :
- impl_()
- {
- typedef detail::push_coroutine_object<
- Arg, Fn, StackAllocator, Allocator
- > object_t;
- typename object_t::allocator_t a( alloc);
- impl_ = ptr_t(
- // placement new
- ::new( a.allocate( 1) ) object_t( fn, attr, stack_alloc, a) );
- }
-#endif
-
- push_coroutine( BOOST_RV_REF( push_coroutine) other) BOOST_NOEXCEPT :
- impl_()
- { swap( other); }
-
- push_coroutine & operator=( BOOST_RV_REF( push_coroutine) other) BOOST_NOEXCEPT
- {
- push_coroutine tmp( boost::move( other) );
- swap( tmp);
- return * this;
- }
-
- bool empty() const BOOST_NOEXCEPT
- { return ! impl_; }
-
- operator safe_bool() const BOOST_NOEXCEPT
- { return ( empty() || impl_->is_complete() ) ? 0 : & dummy::nonnull; }
-
- bool operator!() const BOOST_NOEXCEPT
- { return empty() || impl_->is_complete(); }
-
- void swap( push_coroutine & other) BOOST_NOEXCEPT
- { impl_.swap( other.impl_); }
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- void operator()( Arg && arg)
- {
- BOOST_ASSERT( * this);
-
- impl_->resume( boost::forward< Arg >( arg) );
- }
-#else
- void operator()( BOOST_RV_REF( Arg) arg)
- {
- BOOST_ASSERT( * this);
-
- impl_->resume( boost::forward< Arg >( arg) );
- }
-#endif
-
- void operator()( Arg arg)
- {
- BOOST_ASSERT( * this);
-
- impl_->resume( arg);
- }
-};
-
-template< typename Arg >
-void swap( push_coroutine< Arg > & l, push_coroutine< Arg > & r) BOOST_NOEXCEPT
-{ l.swap( r); }
-#if 0
-template< typename Arg >
-inline
-typename push_coroutine< Arg >::iterator
-range_begin( push_coroutine< Arg > & c)
-{ return typename push_coroutine< Arg >::iterator( & c); }
-
-template< typename Arg >
-inline
-typename push_coroutine< Arg >::const_iterator
-range_begin( push_coroutine< Arg > const& c)
-{ return typename push_coroutine< Arg >::const_iterator( & c); }
-
-template< typename Arg >
-inline
-typename push_coroutine< Arg >::iterator
-range_end( push_coroutine< Arg > &)
-{ return typename push_coroutine< Arg >::iterator(); }
-
-template< typename Arg >
-inline
-typename push_coroutine< Arg >::const_iterator
-range_end( push_coroutine< Arg > const&)
-{ return typename push_coroutine< Arg >::const_iterator(); }
-
-template< typename Arg >
-inline
-typename push_coroutine< Arg >::iterator
-begin( push_coroutine< Arg > & c)
-{ return boost::begin( c); }
-
-template< typename Arg >
-inline
-typename push_coroutine< Arg >::iterator
-end( push_coroutine< Arg > & c)
-{ return boost::end( c); }
-
-template< typename Arg >
-inline
-typename push_coroutine< Arg >::const_iterator
-begin( push_coroutine< Arg > const& c)
-{ return boost::const_begin( c); }
-
-template< typename Arg >
-inline
-typename push_coroutine< Arg >::const_iterator
-end( push_coroutine< Arg > const& c)
-{ return boost::const_end( c); }
-
-}
-
-template< typename Arg >
-struct range_mutable_iterator< coroutines::coroutine< Arg > >
-{ typedef typename coroutines::coroutine< Arg >::iterator type; };
-
-template< typename Arg >
-struct range_const_iterator< coroutines::coroutine< Arg > >
-{ typedef typename coroutines::coroutine< Arg >::const_iterator type; };
-#endif
-}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-#endif // BOOST_COROUTINES_V2_PUSH_COROUTINE_H
diff --git a/3party/boost/boost/coroutine/windows/protected_stack_allocator.hpp b/3party/boost/boost/coroutine/windows/protected_stack_allocator.hpp
new file mode 100644
index 0000000000..293901223b
--- /dev/null
+++ b/3party/boost/boost/coroutine/windows/protected_stack_allocator.hpp
@@ -0,0 +1,87 @@
+
+// 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_COROUTINES_PROTECTED_STACK_ALLOCATOR_H
+#define BOOST_COROUTINES_PROTECTED_STACK_ALLOCATOR_H
+
+extern "C" {
+#include <windows.h>
+}
+
+#include <cmath>
+#include <cstddef>
+#include <new>
+
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/coroutine/stack_traits.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+
+struct stack_context;
+
+template< typename traitsT >
+struct basic_protected_stack_allocator
+{
+ typedef traitsT traits_type;
+
+ void allocate( stack_context & ctx, std::size_t size)
+ {
+ BOOST_ASSERT( traits_type::minimum_size() <= size);
+ BOOST_ASSERT( traits_type::is_unbounded() || ( traits_type::maximum_size() >= size) );
+
+ // page at bottom will be used as guard-page
+ const std::size_t pages(
+ static_cast< std::size_t >(
+ std::floor(
+ static_cast< float >( size) / traits_type::page_size() ) ) );
+ BOOST_ASSERT_MSG( 2 <= pages, "at least two pages must fit into stack (one page is guard-page)");
+ const std::size_t size_ = pages * traits_type::page_size();
+ BOOST_ASSERT( 0 < size && 0 < size_);
+
+ void * limit = ::VirtualAlloc( 0, size_, MEM_COMMIT, PAGE_READWRITE);
+ if ( ! limit) throw std::bad_alloc();
+
+ DWORD old_options;
+#if defined(BOOST_DISABLE_ASSERTS)
+ ::VirtualProtect(
+ limit, traits_type::page_size(), PAGE_READWRITE | PAGE_GUARD /*PAGE_NOACCESS*/, & old_options);
+#else
+ const BOOL result = ::VirtualProtect(
+ limit, traits_type::page_size(), PAGE_READWRITE | PAGE_GUARD /*PAGE_NOACCESS*/, & old_options);
+ BOOST_ASSERT( FALSE != result);
+#endif
+
+ ctx.size = size_;
+ ctx.sp = static_cast< char * >( limit) + ctx.size;
+ }
+
+ void deallocate( stack_context & ctx)
+ {
+ BOOST_ASSERT( ctx.sp);
+ BOOST_ASSERT( traits_type::minimum_size() <= ctx.size);
+ BOOST_ASSERT( traits_type::is_unbounded() || ( traits_type::maximum_size() >= ctx.size) );
+
+ void * limit = static_cast< char * >( ctx.sp) - ctx.size;
+ ::VirtualFree( limit, 0, MEM_RELEASE);
+ }
+};
+
+typedef basic_protected_stack_allocator< stack_traits > protected_stack_allocator;
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_PROTECTED_STACK_ALLOCATOR_H
diff --git a/3party/boost/boost/cstdfloat.hpp b/3party/boost/boost/cstdfloat.hpp
new file mode 100644
index 0000000000..0af4e41149
--- /dev/null
+++ b/3party/boost/boost/cstdfloat.hpp
@@ -0,0 +1,58 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2014.
+// Copyright John Maddock 2014.
+// Copyright Paul Bristow 2014.
+// 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)
+//
+
+// <boost/cstdfloat.hpp> implements floating-point typedefs having
+// specified widths, as described in N3626 (proposed for C++14).
+// See: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3626.pdf
+
+#ifndef _BOOST_CSTDFLOAT_2014_01_09_HPP_
+ #define _BOOST_CSTDFLOAT_2014_01_09_HPP_
+
+ // Include the floating-point type definitions.
+ #include <boost/math/cstdfloat/cstdfloat_types.hpp>
+
+ // Support a specialization of std::numeric_limits<> for the wrapped quadmath library (if available).
+ #if !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_LIMITS)
+ #include <boost/math/cstdfloat/cstdfloat_limits.hpp>
+ #endif
+
+ // Support <cmath> functions for the wrapped quadmath library (if available).
+ #if !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_CMATH)
+ #include <boost/math/cstdfloat/cstdfloat_cmath.hpp>
+ #endif
+
+ // Support I/O stream operations for the wrapped quadmath library (if available).
+ #if !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_IOSTREAM)
+ #if defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_CMATH)
+ #error You can not use <boost/math/cstdfloat/cstdfloat_iostream.hpp> with BOOST_CSTDFLOAT_NO_LIBQUADMATH_CMATH defined.
+ #endif
+ #include <boost/math/cstdfloat/cstdfloat_iostream.hpp>
+ #endif
+
+ // Support a specialization of std::complex<> for the wrapped quadmath library (if available).
+ #if !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_COMPLEX)
+ #if defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_LIMITS)
+ #error You can not use <boost/math/cstdfloat/cstdfloat_complex.hpp> with BOOST_CSTDFLOAT_NO_LIBQUADMATH_LIMITS defined.
+ #endif
+ #if defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_CMATH)
+ #error You can not use <boost/math/cstdfloat/cstdfloat_complex.hpp> with BOOST_CSTDFLOAT_NO_LIBQUADMATH_CMATH defined.
+ #endif
+ #if defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_IOSTREAM)
+ #error You can not use <boost/math/cstdfloat/cstdfloat_complex.hpp> with BOOST_CSTDFLOAT_NO_LIBQUADMATH_IOSTREAM defined.
+ #endif
+ #include <boost/math/cstdfloat/cstdfloat_complex.hpp>
+ #endif
+
+
+ // Undefine BOOST_NO_FLOAT128_T because this constant is not meant for public use.
+ #if defined(BOOST_CSTDFLOAT_HAS_INTERNAL_FLOAT128_T)
+ #undef BOOST_CSTDFLOAT_HAS_INTERNAL_FLOAT128_T
+ #endif
+
+#endif // _BOOST_CSTDFLOAT_2014_01_09_HPP_
diff --git a/3party/boost/boost/cstdint.hpp b/3party/boost/boost/cstdint.hpp
index ea84b65062..98faeae019 100644
--- a/3party/boost/boost/cstdint.hpp
+++ b/3party/boost/boost/cstdint.hpp
@@ -1,8 +1,8 @@
// boost cstdint.hpp header file ------------------------------------------//
-// (C) Copyright Beman Dawes 1999.
-// (C) Copyright Jens Mauer 2001
-// (C) Copyright John Maddock 2001
+// (C) Copyright Beman Dawes 1999.
+// (C) Copyright Jens Mauer 2001
+// (C) Copyright John Maddock 2001
// 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,9 +24,9 @@
#define BOOST_CSTDINT_HPP
//
-// Since we always define the INT#_C macros as per C++0x,
+// Since we always define the INT#_C macros as per C++0x,
// define __STDC_CONSTANT_MACROS so that <stdint.h> does the right
-// thing if possible, and so that the user knows that the macros
+// thing if possible, and so that the user knows that the macros
// are actually defined as per C99.
//
#ifndef __STDC_CONSTANT_MACROS
@@ -41,7 +41,10 @@
// so we disable use of stdint.h when GLIBC does not define __GLIBC_HAVE_LONG_LONG.
// See https://svn.boost.org/trac/boost/ticket/3548 and http://sources.redhat.com/bugzilla/show_bug.cgi?id=10990
//
-#if defined(BOOST_HAS_STDINT_H) && (!defined(__GLIBC__) || defined(__GLIBC_HAVE_LONG_LONG))
+#if defined(BOOST_HAS_STDINT_H) \
+ && (!defined(__GLIBC__) \
+ || defined(__GLIBC_HAVE_LONG_LONG) \
+ || (defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 17)))))
// The following #include is an implementation artifact; not part of interface.
# ifdef __hpux
@@ -50,7 +53,7 @@
# ifdef __STDC_32_MODE__
// this is triggered with GCC, because it defines __cplusplus < 199707L
# define BOOST_NO_INT64_T
-# endif
+# endif
# elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX)
# include <inttypes.h>
# else
@@ -100,40 +103,40 @@ typedef ::uintfast64_t uint_fast64_t;
namespace boost
{
- using ::int8_t;
- using ::int_least8_t;
- using ::int_fast8_t;
- using ::uint8_t;
- using ::uint_least8_t;
- using ::uint_fast8_t;
-
- using ::int16_t;
- using ::int_least16_t;
- using ::int_fast16_t;
- using ::uint16_t;
- using ::uint_least16_t;
- using ::uint_fast16_t;
-
- using ::int32_t;
- using ::int_least32_t;
- using ::int_fast32_t;
- using ::uint32_t;
- using ::uint_least32_t;
- using ::uint_fast32_t;
-
+ using ::int8_t;
+ using ::int_least8_t;
+ using ::int_fast8_t;
+ using ::uint8_t;
+ using ::uint_least8_t;
+ using ::uint_fast8_t;
+
+ using ::int16_t;
+ using ::int_least16_t;
+ using ::int_fast16_t;
+ using ::uint16_t;
+ using ::uint_least16_t;
+ using ::uint_fast16_t;
+
+ using ::int32_t;
+ using ::int_least32_t;
+ using ::int_fast32_t;
+ using ::uint32_t;
+ using ::uint_least32_t;
+ using ::uint_fast32_t;
+
# ifndef BOOST_NO_INT64_T
- using ::int64_t;
- using ::int_least64_t;
- using ::int_fast64_t;
- using ::uint64_t;
- using ::uint_least64_t;
- using ::uint_fast64_t;
-
+ using ::int64_t;
+ using ::int_least64_t;
+ using ::int_fast64_t;
+ using ::uint64_t;
+ using ::uint_least64_t;
+ using ::uint_fast64_t;
+
# endif
- using ::intmax_t;
- using ::uintmax_t;
+ using ::intmax_t;
+ using ::uintmax_t;
} // namespace boost
@@ -143,35 +146,35 @@ namespace boost
namespace boost {
- using ::int8_t;
- typedef int8_t int_least8_t;
- typedef int8_t int_fast8_t;
- using ::uint8_t;
- typedef uint8_t uint_least8_t;
- typedef uint8_t uint_fast8_t;
-
- using ::int16_t;
- typedef int16_t int_least16_t;
- typedef int16_t int_fast16_t;
- using ::uint16_t;
- typedef uint16_t uint_least16_t;
- typedef uint16_t uint_fast16_t;
-
- using ::int32_t;
- typedef int32_t int_least32_t;
- typedef int32_t int_fast32_t;
- using ::uint32_t;
- typedef uint32_t uint_least32_t;
- typedef uint32_t uint_fast32_t;
-
-# ifndef BOOST_NO_INT64_T
-
- using ::int64_t;
- typedef int64_t int_least64_t;
- typedef int64_t int_fast64_t;
- using ::uint64_t;
- typedef uint64_t uint_least64_t;
- typedef uint64_t uint_fast64_t;
+ using ::int8_t;
+ typedef int8_t int_least8_t;
+ typedef int8_t int_fast8_t;
+ using ::uint8_t;
+ typedef uint8_t uint_least8_t;
+ typedef uint8_t uint_fast8_t;
+
+ using ::int16_t;
+ typedef int16_t int_least16_t;
+ typedef int16_t int_fast16_t;
+ using ::uint16_t;
+ typedef uint16_t uint_least16_t;
+ typedef uint16_t uint_fast16_t;
+
+ using ::int32_t;
+ typedef int32_t int_least32_t;
+ typedef int32_t int_fast32_t;
+ using ::uint32_t;
+ typedef uint32_t uint_least32_t;
+ typedef uint32_t uint_fast32_t;
+
+# ifndef BOOST_NO_INT64_T
+
+ using ::int64_t;
+ typedef int64_t int_least64_t;
+ typedef int64_t int_fast64_t;
+ using ::uint64_t;
+ typedef uint64_t uint_least64_t;
+ typedef uint64_t uint_fast64_t;
typedef int64_t intmax_t;
typedef uint64_t uintmax_t;
@@ -235,15 +238,15 @@ namespace boost
typedef unsigned short uint_least16_t;
typedef unsigned short uint_fast16_t;
# endif
-# elif (USHRT_MAX == 0xffffffff) && defined(__MTA__)
- // On MTA / XMT short is 32 bits unless the -short16 compiler flag is specified
- // MTA / XMT does support the following non-standard integer types
- typedef __short16 int16_t;
- typedef __short16 int_least16_t;
- typedef __short16 int_fast16_t;
- typedef unsigned __short16 uint16_t;
- typedef unsigned __short16 uint_least16_t;
- typedef unsigned __short16 uint_fast16_t;
+# elif (USHRT_MAX == 0xffffffff) && defined(__MTA__)
+ // On MTA / XMT short is 32 bits unless the -short16 compiler flag is specified
+ // MTA / XMT does support the following non-standard integer types
+ typedef __short16 int16_t;
+ typedef __short16 int_least16_t;
+ typedef __short16 int_fast16_t;
+ typedef unsigned __short16 uint16_t;
+ typedef unsigned __short16 uint_least16_t;
+ typedef unsigned __short16 uint_fast16_t;
# elif (USHRT_MAX == 0xffffffff) && defined(CRAY)
// no 16-bit types on Cray:
typedef short int_least16_t;
@@ -277,14 +280,14 @@ namespace boost
typedef unsigned long uint32_t;
typedef unsigned long uint_least32_t;
typedef unsigned long uint_fast32_t;
-# elif (UINT_MAX == 0xffffffffffffffff) && defined(__MTA__)
- // Integers are 64 bits on the MTA / XMT
- typedef __int32 int32_t;
- typedef __int32 int_least32_t;
- typedef __int32 int_fast32_t;
- typedef unsigned __int32 uint32_t;
- typedef unsigned __int32 uint_least32_t;
- typedef unsigned __int32 uint_fast32_t;
+# elif (UINT_MAX == 0xffffffffffffffff) && defined(__MTA__)
+ // Integers are 64 bits on the MTA / XMT
+ typedef __int32 int32_t;
+ typedef __int32 int_least32_t;
+ typedef __int32 int_fast32_t;
+ typedef unsigned __int32 uint32_t;
+ typedef unsigned __int32 uint_least32_t;
+ typedef unsigned __int32 uint_fast32_t;
# else
# error defaults not correct; you must hand modify boost/cstdint.hpp
# endif
@@ -358,6 +361,40 @@ namespace boost
#endif // BOOST_HAS_STDINT_H
+// intptr_t/uintptr_t are defined separately because they are optional and not universally available
+#if defined(BOOST_WINDOWS) && !defined(_WIN32_WCE) && !defined(BOOST_HAS_STDINT_H)
+// Older MSVC don't have stdint.h and have intptr_t/uintptr_t defined in stddef.h
+#include <stddef.h>
+#endif
+
+// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.
+#if !defined(__PGIC__)
+
+#if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
+ || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
+ || defined(__CYGWIN__) \
+ || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
+ || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
+
+namespace boost {
+ using ::intptr_t;
+ using ::uintptr_t;
+}
+#define BOOST_HAS_INTPTR_T
+
+// Clang pretends to be GCC, so it'll match this condition
+#elif defined(__GNUC__) && defined(__INTPTR_TYPE__) && defined(__UINTPTR_TYPE__)
+
+namespace boost {
+ typedef __INTPTR_TYPE__ intptr_t;
+ typedef __UINTPTR_TYPE__ uintptr_t;
+}
+#define BOOST_HAS_INTPTR_T
+
+#endif
+
+#endif // !defined(__PGIC__)
+
#endif // BOOST_CSTDINT_HPP
@@ -376,15 +413,15 @@ INT#_C macros if they're not already defined (John Maddock).
#if !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && \
(!defined(INT8_C) || !defined(INT16_C) || !defined(INT32_C) || !defined(INT64_C))
//
-// For the following code we get several warnings along the lines of:
-//
-// boost/cstdint.hpp:428:35: error: use of C99 long long integer constant
-//
-// So we declare this a system header to suppress these warnings.
+// For the following code we get several warnings along the lines of:
+//
+// boost/cstdint.hpp:428:35: error: use of C99 long long integer constant
//
-#if defined(__GNUC__) && (__GNUC__ >= 4)
-#pragma GCC system_header
-#endif
+// So we declare this a system header to suppress these warnings.
+//
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#pragma GCC system_header
+#endif
#include <limits.h>
# define BOOST__STDC_CONSTANT_MACROS_DEFINED
diff --git a/3party/boost/boost/current_function.hpp b/3party/boost/boost/current_function.hpp
index cb36e35c36..5c113f8093 100644
--- a/3party/boost/boost/current_function.hpp
+++ b/3party/boost/boost/current_function.hpp
@@ -12,11 +12,11 @@
//
// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
//
-// 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)
+// 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
//
-// http://www.boost.org/libs/utility/current_function.html
+// http://www.boost.org/libs/assert/current_function.html
//
namespace boost
@@ -52,6 +52,10 @@ inline void current_function_helper()
# define BOOST_CURRENT_FUNCTION __func__
+#elif defined(__cplusplus) && (__cplusplus >= 201103)
+
+# define BOOST_CURRENT_FUNCTION __func__
+
#else
# define BOOST_CURRENT_FUNCTION "(unknown)"
@@ -65,4 +69,3 @@ inline void current_function_helper()
} // namespace boost
#endif // #ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED
-
diff --git a/3party/boost/boost/date_time.hpp b/3party/boost/boost/date_time.hpp
index 07715262cd..51628cd328 100644
--- a/3party/boost/boost/date_time.hpp
+++ b/3party/boost/boost/date_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
- * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
// See www.boost.org/libs/date_time for documentation.
diff --git a/3party/boost/boost/date_time/adjust_functors.hpp b/3party/boost/boost/date_time/adjust_functors.hpp
index dde8ca8590..f6c5a04c4d 100644
--- a/3party/boost/boost/date_time/adjust_functors.hpp
+++ b/3party/boost/boost/date_time/adjust_functors.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$
*/
#include "boost/date_time/date.hpp"
diff --git a/3party/boost/boost/date_time/c_local_time_adjustor.hpp b/3party/boost/boost/date_time/c_local_time_adjustor.hpp
index 45e96d3af8..aa563122b1 100644
--- a/3party/boost/boost/date_time/c_local_time_adjustor.hpp
+++ b/3party/boost/boost/date_time/c_local_time_adjustor.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-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
/*! @file c_local_time_adjustor.hpp
@@ -42,7 +42,10 @@ namespace date_time {
}
date_duration_type dd = t.date() - time_t_start_day;
time_duration_type td = t.time_of_day();
- std::time_t t2 = dd.days()*86400 + td.hours()*3600 + td.minutes()*60 + td.seconds();
+ std::time_t t2 = static_cast<std::time_t>(dd.days())*86400 +
+ static_cast<std::time_t>(td.hours())*3600 +
+ static_cast<std::time_t>(td.minutes())*60 +
+ td.seconds();
std::tm tms, *tms_ptr;
tms_ptr = c_time::localtime(&t2, &tms);
date_type d(static_cast<unsigned short>(tms_ptr->tm_year + 1900),
diff --git a/3party/boost/boost/date_time/c_time.hpp b/3party/boost/boost/date_time/c_time.hpp
index f7e116b2dd..5998908c4e 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-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
@@ -88,7 +88,7 @@ namespace date_time {
boost::throw_exception(std::runtime_error("could not convert calendar time to UTC time"));
return result;
}
-#else // BOOST_HAS_THREADS
+#else // BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
#if (defined(_MSC_VER) && (_MSC_VER >= 1400))
#pragma warning(push) // preserve warning settings
@@ -116,7 +116,7 @@ namespace date_time {
#pragma warning(pop) // restore warnings to previous state
#endif // _MSC_VER >= 1400
-#endif // BOOST_HAS_THREADS
+#endif // BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
};
}} // namespaces
diff --git a/3party/boost/boost/date_time/compiler_config.hpp b/3party/boost/boost/date_time/compiler_config.hpp
index 1aa1330f64..e37d0614a4 100644
--- a/3party/boost/boost/date_time/compiler_config.hpp
+++ b/3party/boost/boost/date_time/compiler_config.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: 2011-07-26 10:40:21 -0700 (Tue, 26 Jul 2011) $
+ * $Date$
*/
#include <cstdlib>
diff --git a/3party/boost/boost/date_time/constrained_value.hpp b/3party/boost/boost/date_time/constrained_value.hpp
index 7338105e2d..910e99a861 100644
--- a/3party/boost/boost/date_time/constrained_value.hpp
+++ b/3party/boost/boost/date_time/constrained_value.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: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
#include <exception>
diff --git a/3party/boost/boost/date_time/date.hpp b/3party/boost/boost/date_time/date.hpp
index f77ae29d5d..2bd936cd5b 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: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
#include <boost/operators.hpp>
diff --git a/3party/boost/boost/date_time/date_clock_device.hpp b/3party/boost/boost/date_time/date_clock_device.hpp
index 6202f6c58f..2145d65fd5 100644
--- a/3party/boost/boost/date_time/date_clock_device.hpp
+++ b/3party/boost/boost/date_time/date_clock_device.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$
*/
#include "boost/date_time/c_time.hpp"
@@ -36,18 +36,18 @@ namespace date_time {
{
::std::tm result;
::std::tm* curr = get_local_time(result);
- return ymd_type(curr->tm_year + 1900,
- curr->tm_mon + 1,
- curr->tm_mday);
+ return ymd_type(static_cast<unsigned short>(curr->tm_year + 1900),
+ static_cast<unsigned short>(curr->tm_mon + 1),
+ static_cast<unsigned short>(curr->tm_mday));
}
//! Get the current day in universal date as a ymd_type
static typename date_type::ymd_type universal_day_ymd()
{
::std::tm result;
::std::tm* curr = get_universal_time(result);
- return ymd_type(curr->tm_year + 1900,
- curr->tm_mon + 1,
- curr->tm_mday);
+ return ymd_type(static_cast<unsigned short>(curr->tm_year + 1900),
+ static_cast<unsigned short>(curr->tm_mon + 1),
+ static_cast<unsigned short>(curr->tm_mday));
}
//! Get the UTC day as a date type
static date_type universal_day()
diff --git a/3party/boost/boost/date_time/date_defs.hpp b/3party/boost/boost/date_time/date_defs.hpp
index ae7e4c5a03..6c80db3a83 100644
--- a/3party/boost/boost/date_time/date_defs.hpp
+++ b/3party/boost/boost/date_time/date_defs.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/date_duration.hpp b/3party/boost/boost/date_time/date_duration.hpp
index c573944571..f5b4b083d7 100644
--- a/3party/boost/boost/date_time/date_duration.hpp
+++ b/3party/boost/boost/date_time/date_duration.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-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/date_duration_types.hpp b/3party/boost/boost/date_time/date_duration_types.hpp
index e44c59fff6..8c0e9860d0 100644
--- a/3party/boost/boost/date_time/date_duration_types.hpp
+++ b/3party/boost/boost/date_time/date_duration_types.hpp
@@ -6,7 +6,7 @@
* (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$
*/
#include <boost/date_time/int_adapter.hpp>
diff --git a/3party/boost/boost/date_time/date_facet.hpp b/3party/boost/boost/date_time/date_facet.hpp
index fc2ddc246e..c3574cc953 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: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $
+ * $Date$
*/
#include <locale>
diff --git a/3party/boost/boost/date_time/date_format_simple.hpp b/3party/boost/boost/date_time/date_format_simple.hpp
index 05119c4413..452990379b 100644
--- a/3party/boost/boost/date_time/date_format_simple.hpp
+++ b/3party/boost/boost/date_time/date_format_simple.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$
*/
#include "boost/date_time/parse_format_base.hpp"
diff --git a/3party/boost/boost/date_time/date_formatting.hpp b/3party/boost/boost/date_time/date_formatting.hpp
index 06709bc5e9..d4ca3dd27c 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-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $
+ * $Date$
*/
#include "boost/date_time/iso_format.hpp"
diff --git a/3party/boost/boost/date_time/date_formatting_limited.hpp b/3party/boost/boost/date_time/date_formatting_limited.hpp
index 5721473ba1..7c5c1735a3 100644
--- a/3party/boost/boost/date_time/date_formatting_limited.hpp
+++ b/3party/boost/boost/date_time/date_formatting_limited.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$
*/
#include "boost/date_time/iso_format.hpp"
diff --git a/3party/boost/boost/date_time/date_formatting_locales.hpp b/3party/boost/boost/date_time/date_formatting_locales.hpp
index e3aec4967c..2c17c055cd 100644
--- a/3party/boost/boost/date_time/date_formatting_locales.hpp
+++ b/3party/boost/boost/date_time/date_formatting_locales.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$
*/
diff --git a/3party/boost/boost/date_time/date_generator_formatter.hpp b/3party/boost/boost/date_time/date_generator_formatter.hpp
index 159cf36eb8..42c396b2c0 100644
--- a/3party/boost/boost/date_time/date_generator_formatter.hpp
+++ b/3party/boost/boost/date_time/date_generator_formatter.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-11-13 11:05:31 -0800 (Thu, 13 Nov 2008) $
+ * $Date$
*/
#include <iostream>
diff --git a/3party/boost/boost/date_time/date_generator_parser.hpp b/3party/boost/boost/date_time/date_generator_parser.hpp
index 7cff9ca363..f4d7b27a79 100644
--- a/3party/boost/boost/date_time/date_generator_parser.hpp
+++ b/3party/boost/boost/date_time/date_generator_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: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
#include <string>
diff --git a/3party/boost/boost/date_time/date_generators.hpp b/3party/boost/boost/date_time/date_generators.hpp
index 6d3a4ac0b7..274ce1f06a 100644
--- a/3party/boost/boost/date_time/date_generators.hpp
+++ b/3party/boost/boost/date_time/date_generators.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-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
/*! @file date_generators.hpp
diff --git a/3party/boost/boost/date_time/date_iterator.hpp b/3party/boost/boost/date_time/date_iterator.hpp
index c8ec50eeb4..3526ba18b4 100644
--- a/3party/boost/boost/date_time/date_iterator.hpp
+++ b/3party/boost/boost/date_time/date_iterator.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-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
#include <iterator>
diff --git a/3party/boost/boost/date_time/date_names_put.hpp b/3party/boost/boost/date_time/date_names_put.hpp
index 32aeb36f5c..e055fa8734 100644
--- a/3party/boost/boost/date_time/date_names_put.hpp
+++ b/3party/boost/boost/date_time/date_names_put.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-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/date_parsing.hpp b/3party/boost/boost/date_time/date_parsing.hpp
index 35ec8e43c3..33c5366027 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: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $
+ * $Date$
*/
#include <string>
@@ -113,7 +113,6 @@ namespace date_time {
spec_str = "mdy";
}
- typedef typename date_type::year_type year_type;
typedef typename date_type::month_type month_type;
unsigned pos = 0;
unsigned short year(0), month(0), day(0);
@@ -160,7 +159,6 @@ namespace date_time {
parse_undelimited_date(const std::string& s) {
int offsets[] = {4,2,2};
int pos = 0;
- typedef typename date_type::year_type year_type;
//typename date_type::ymd_type ymd((year_type::min)(),1,1);
unsigned short y = 0, m = 0, d = 0;
diff --git a/3party/boost/boost/date_time/dst_rules.hpp b/3party/boost/boost/date_time/dst_rules.hpp
index cf65c1622f..32290190d9 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: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $
+ * $Date$
*/
/*! @file dst_rules.hpp
diff --git a/3party/boost/boost/date_time/filetime_functions.hpp b/3party/boost/boost/date_time/filetime_functions.hpp
index 3c7f13f38c..ca5a1ad933 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-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
/*! @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 3f6476752e..a40dee6fb6 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: 2013-06-21 08:04:12 -0700 (Fri, 21 Jun 2013) $
+ * $Date$
*/
@@ -63,7 +63,7 @@ fixed_string_to_int(std::istreambuf_iterator<charT>& itr,
itr++;
j++;
}
- int_type i = -1;
+ int_type i = static_cast<int_type>(-1);
// mr.cache will hold leading zeros. size() tells us when input is too short.
if(mr.cache.size() < length) {
return i;
@@ -111,7 +111,7 @@ var_string_to_int(std::istreambuf_iterator<charT>& itr,
++itr;
++j;
}
- int_type i = -1;
+ int_type i = static_cast<int_type>(-1);
if(!s.empty()) {
i = boost::lexical_cast<int_type>(s);
}
@@ -271,7 +271,8 @@ class format_date_parser
const_itr itr(format_str.begin());
while (itr != format_str.end() && (sitr != stream_end)) {
if (*itr == '%') {
- itr++;
+ if ( ++itr == format_str.end())
+ break;
if (*itr != '%') {
switch(*itr) {
case 'a':
@@ -476,7 +477,8 @@ class format_date_parser
const_itr itr(format_str.begin());
while (itr != format_str.end() && (sitr != stream_end)) {
if (*itr == '%') {
- itr++;
+ if ( ++itr == format_str.end())
+ break;
if (*itr != '%') {
switch(*itr) {
case 'b':
@@ -577,7 +579,8 @@ class format_date_parser
const_itr itr(format_str.begin());
while (itr != format_str.end() && (sitr != stream_end)) {
if (*itr == '%') {
- itr++;
+ if ( ++itr == format_str.end())
+ break;
if (*itr != '%') {
switch(*itr) {
case 'a':
@@ -666,7 +669,8 @@ class format_date_parser
const_itr itr(format_str.begin());
while (itr != format_str.end() && (sitr != stream_end)) {
if (*itr == '%') {
- itr++;
+ if ( ++itr == format_str.end())
+ break;
if (*itr != '%') {
//match_results mr;
switch(*itr) {
diff --git a/3party/boost/boost/date_time/gregorian/conversion.hpp b/3party/boost/boost/date_time/gregorian/conversion.hpp
index 33f6856bf0..c844c4e34b 100644
--- a/3party/boost/boost/date_time/gregorian/conversion.hpp
+++ b/3party/boost/boost/date_time/gregorian/conversion.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-06-09 11:10:13 -0700 (Wed, 09 Jun 2010) $
+ * $Date$
*/
#include <cstring>
diff --git a/3party/boost/boost/date_time/gregorian/formatters.hpp b/3party/boost/boost/date_time/gregorian/formatters.hpp
index eda7dc34be..d486ef0f4c 100644
--- a/3party/boost/boost/date_time/gregorian/formatters.hpp
+++ b/3party/boost/boost/date_time/gregorian/formatters.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$
*/
#include "boost/date_time/compiler_config.hpp"
diff --git a/3party/boost/boost/date_time/gregorian/formatters_limited.hpp b/3party/boost/boost/date_time/gregorian/formatters_limited.hpp
index 8dfd2d0c60..755f5aa68b 100644
--- a/3party/boost/boost/date_time/gregorian/formatters_limited.hpp
+++ b/3party/boost/boost/date_time/gregorian/formatters_limited.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$
*/
#include "boost/date_time/gregorian/gregorian_types.hpp"
diff --git a/3party/boost/boost/date_time/gregorian/greg_calendar.hpp b/3party/boost/boost/date_time/gregorian/greg_calendar.hpp
index e9c1852e0b..34ce0aec47 100644
--- a/3party/boost/boost/date_time/gregorian/greg_calendar.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_calendar.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: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $
+ * $Date$
*/
#include <boost/cstdint.hpp>
diff --git a/3party/boost/boost/date_time/gregorian/greg_date.hpp b/3party/boost/boost/date_time/gregorian/greg_date.hpp
index 860a407c95..f7aa2fc5f1 100644
--- a/3party/boost/boost/date_time/gregorian/greg_date.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_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
- * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $
+ * $Date$
*/
#include <boost/throw_exception.hpp>
diff --git a/3party/boost/boost/date_time/gregorian/greg_day.hpp b/3party/boost/boost/date_time/gregorian/greg_day.hpp
index 4ea829fbec..4a2d5e7e46 100644
--- a/3party/boost/boost/date_time/gregorian/greg_day.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_day.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/constrained_value.hpp"
diff --git a/3party/boost/boost/date_time/gregorian/greg_day_of_year.hpp b/3party/boost/boost/date_time/gregorian/greg_day_of_year.hpp
index 2f8874d2b7..abf0c9eeb3 100644
--- a/3party/boost/boost/date_time/gregorian/greg_day_of_year.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_day_of_year.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/constrained_value.hpp"
diff --git a/3party/boost/boost/date_time/gregorian/greg_duration.hpp b/3party/boost/boost/date_time/gregorian/greg_duration.hpp
index a9c0c171b8..dc6ad60755 100644
--- a/3party/boost/boost/date_time/gregorian/greg_duration.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_duration.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-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
#include <boost/date_time/date_duration.hpp>
diff --git a/3party/boost/boost/date_time/gregorian/greg_duration_types.hpp b/3party/boost/boost/date_time/gregorian/greg_duration_types.hpp
index 8328ca303f..d1f9a65f97 100644
--- a/3party/boost/boost/date_time/gregorian/greg_duration_types.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_duration_types.hpp
@@ -5,7 +5,7 @@
* Subject to 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$
*/
diff --git a/3party/boost/boost/date_time/gregorian/greg_facet.hpp b/3party/boost/boost/date_time/gregorian/greg_facet.hpp
index 9efc61951a..b8c6d57fe5 100644
--- a/3party/boost/boost/date_time/gregorian/greg_facet.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_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, Bart Garst
- * $Date: 2008-11-23 03:13:35 -0800 (Sun, 23 Nov 2008) $
+ * $Date$
*/
#include "boost/date_time/gregorian/gregorian_types.hpp"
@@ -97,7 +97,7 @@ namespace gregorian {
std::locale locale = os.getloc();
if (std::has_facet<facet_def>(locale)) {
const facet_def& f = std::use_facet<facet_def>(locale);
- greg_weekday_formatter::format_weekday(wd.as_enum(), os, f, true);
+ greg_weekday_formatter::format_weekday(wd, os, f, true);
}
else { //default to short English string eg: Sun, Mon, Tue, Wed...
os << wd.as_short_string();
@@ -214,8 +214,6 @@ namespace gregorian {
std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is, date& d)
{
std::istream_iterator<std::basic_string<charT>, charT> beg(is), eos;
-
- typedef boost::date_time::all_date_names_put<greg_facet_config, charT> facet_def;
d = from_stream(beg, eos);
return is;
}
diff --git a/3party/boost/boost/date_time/gregorian/greg_month.hpp b/3party/boost/boost/date_time/gregorian/greg_month.hpp
index b48a8a8911..d483f77424 100644
--- a/3party/boost/boost/date_time/gregorian/greg_month.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_month.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$
*/
#include "boost/date_time/constrained_value.hpp"
diff --git a/3party/boost/boost/date_time/gregorian/greg_serialize.hpp b/3party/boost/boost/date_time/gregorian/greg_serialize.hpp
index 2cfad93c40..a870c7068a 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-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $
+ * $Date$
*/
#include "boost/date_time/gregorian/gregorian_types.hpp"
diff --git a/3party/boost/boost/date_time/gregorian/greg_weekday.hpp b/3party/boost/boost/date_time/gregorian/greg_weekday.hpp
index ab68fcd19b..60fec32297 100644
--- a/3party/boost/boost/date_time/gregorian/greg_weekday.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_weekday.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-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
#include "boost/date_time/constrained_value.hpp"
diff --git a/3party/boost/boost/date_time/gregorian/greg_year.hpp b/3party/boost/boost/date_time/gregorian/greg_year.hpp
index 322f40d0d0..3d98fd06b2 100644
--- a/3party/boost/boost/date_time/gregorian/greg_year.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_year.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/constrained_value.hpp"
diff --git a/3party/boost/boost/date_time/gregorian/greg_ymd.hpp b/3party/boost/boost/date_time/gregorian/greg_ymd.hpp
index e7d441efea..503666c31d 100644
--- a/3party/boost/boost/date_time/gregorian/greg_ymd.hpp
+++ b/3party/boost/boost/date_time/gregorian/greg_ymd.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/year_month_day.hpp"
diff --git a/3party/boost/boost/date_time/gregorian/gregorian.hpp b/3party/boost/boost/date_time/gregorian/gregorian.hpp
index becbc06817..47d545eccd 100644
--- a/3party/boost/boost/date_time/gregorian/gregorian.hpp
+++ b/3party/boost/boost/date_time/gregorian/gregorian.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$
*/
/*! @file gregorian.hpp
diff --git a/3party/boost/boost/date_time/gregorian/gregorian_io.hpp b/3party/boost/boost/date_time/gregorian/gregorian_io.hpp
index e6ba01fe50..e0a23f3269 100644
--- a/3party/boost/boost/date_time/gregorian/gregorian_io.hpp
+++ b/3party/boost/boost/date_time/gregorian/gregorian_io.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-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
#include <locale>
diff --git a/3party/boost/boost/date_time/gregorian/gregorian_types.hpp b/3party/boost/boost/date_time/gregorian/gregorian_types.hpp
index 3f4b92fd87..d50e9cc7d7 100644
--- a/3party/boost/boost/date_time/gregorian/gregorian_types.hpp
+++ b/3party/boost/boost/date_time/gregorian/gregorian_types.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$
*/
/*! @file gregorian_types.hpp
diff --git a/3party/boost/boost/date_time/gregorian/parsers.hpp b/3party/boost/boost/date_time/gregorian/parsers.hpp
index a2fa4e1dae..afc6537c3b 100644
--- a/3party/boost/boost/date_time/gregorian/parsers.hpp
+++ b/3party/boost/boost/date_time/gregorian/parsers.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$
*/
#include "boost/date_time/gregorian/gregorian_types.hpp"
diff --git a/3party/boost/boost/date_time/gregorian_calendar.hpp b/3party/boost/boost/date_time/gregorian_calendar.hpp
index b645aa49b0..dfe3771aab 100644
--- a/3party/boost/boost/date_time/gregorian_calendar.hpp
+++ b/3party/boost/boost/date_time/gregorian_calendar.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: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/gregorian_calendar.ipp b/3party/boost/boost/date_time/gregorian_calendar.ipp
index af19394f3d..8a58c8844a 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-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
#ifndef NO_BOOST_DATE_TIME_INLINE
diff --git a/3party/boost/boost/date_time/int_adapter.hpp b/3party/boost/boost/date_time/int_adapter.hpp
index d1246e7b50..81f68f645c 100644
--- a/3party/boost/boost/date_time/int_adapter.hpp
+++ b/3party/boost/boost/date_time/int_adapter.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-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/iso_format.hpp b/3party/boost/boost/date_time/iso_format.hpp
index 1f9e73d678..2e7942d8ba 100644
--- a/3party/boost/boost/date_time/iso_format.hpp
+++ b/3party/boost/boost/date_time/iso_format.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$
*/
#include "boost/date_time/parse_format_base.hpp"
diff --git a/3party/boost/boost/date_time/local_time/conversion.hpp b/3party/boost/boost/date_time/local_time/conversion.hpp
index a530de4224..aa0b72c6c4 100644
--- a/3party/boost/boost/date_time/local_time/conversion.hpp
+++ b/3party/boost/boost/date_time/local_time/conversion.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: 2009-06-04 01:24:49 -0700 (Thu, 04 Jun 2009) $
+ * $Date$
*/
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 84c59a3a0b..b89218a659 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
@@ -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-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
#include "boost/date_time/time_zone_base.hpp"
@@ -64,7 +64,7 @@ namespace local_time {
//! True if zone uses daylight savings adjustments
virtual bool has_dst() const
{
- return (dst_calc_rules_); //if calc_rule is set the tz has dst
+ return (bool) dst_calc_rules_; //if calc_rule is set the tz has dst
}
//! Local time that DST starts -- NADT if has_dst is false
virtual posix_time::ptime dst_local_start_time(gregorian::greg_year y) const
diff --git a/3party/boost/boost/date_time/local_time/date_duration_operators.hpp b/3party/boost/boost/date_time/local_time/date_duration_operators.hpp
index b4c325df0a..e0f170fd7c 100644
--- a/3party/boost/boost/date_time/local_time/date_duration_operators.hpp
+++ b/3party/boost/boost/date_time/local_time/date_duration_operators.hpp
@@ -6,7 +6,7 @@
* (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$
*/
#include "boost/date_time/gregorian/greg_duration_types.hpp"
diff --git a/3party/boost/boost/date_time/local_time/dst_transition_day_rules.hpp b/3party/boost/boost/date_time/local_time/dst_transition_day_rules.hpp
index d82731c084..f372e44a45 100644
--- a/3party/boost/boost/date_time/local_time/dst_transition_day_rules.hpp
+++ b/3party/boost/boost/date_time/local_time/dst_transition_day_rules.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
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 96b2915837..a3762d9243 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: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
#include <string>
diff --git a/3party/boost/boost/date_time/local_time/local_time.hpp b/3party/boost/boost/date_time/local_time/local_time.hpp
index 162cac5b36..880989b6e7 100644
--- a/3party/boost/boost/date_time/local_time/local_time.hpp
+++ b/3party/boost/boost/date_time/local_time/local_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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/posix_time/posix_time.hpp"
diff --git a/3party/boost/boost/date_time/local_time/local_time_io.hpp b/3party/boost/boost/date_time/local_time/local_time_io.hpp
index b5e3c3f1ba..c32b81e407 100644
--- a/3party/boost/boost/date_time/local_time/local_time_io.hpp
+++ b/3party/boost/boost/date_time/local_time/local_time_io.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: 2008-11-13 11:05:31 -0800 (Thu, 13 Nov 2008) $
+ * $Date$
*/
#include <locale>
@@ -36,7 +36,6 @@ namespace local_time {
boost::io::ios_flags_saver iflags(os);
typedef local_date_time time_type;//::utc_time_type typename
typedef date_time::time_facet<time_type, CharT> custom_time_facet;
- typedef std::time_put<CharT> std_time_facet;
std::ostreambuf_iterator<CharT> oitr(os);
if(std::has_facet<custom_time_facet>(os.getloc())) {
@@ -123,7 +122,6 @@ namespace local_time {
const boost::local_time::local_time_period& p) {
boost::io::ios_flags_saver iflags(os);
typedef boost::date_time::time_facet<local_date_time, CharT> custom_facet;
- typedef std::time_put<CharT> std_time_facet;
std::ostreambuf_iterator<CharT> oitr(os);
if (std::has_facet<custom_facet>(os.getloc())) {
std::use_facet<custom_facet>(os.getloc()).put(oitr, os, os.fill(), p);
diff --git a/3party/boost/boost/date_time/local_time/local_time_types.hpp b/3party/boost/boost/date_time/local_time/local_time_types.hpp
index 5e04422e8f..df2d08cb49 100644
--- a/3party/boost/boost/date_time/local_time/local_time_types.hpp
+++ b/3party/boost/boost/date_time/local_time/local_time_types.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/local_time/local_date_time.hpp"
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 ee1b553eea..d0ef31d5b8 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: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
#include <string>
@@ -430,9 +430,9 @@ namespace local_time{
dst_calc_rules_ = shared_ptr<dst_calc_rule>(
new partial_date_dst_rule(
partial_date_dst_rule::start_rule(
- sd, static_cast<date_time::months_of_year>(sm)),
+ static_cast<unsigned short>(sd), static_cast<date_time::months_of_year>(sm)),
partial_date_dst_rule::end_rule(
- ed, static_cast<date_time::months_of_year>(em))
+ static_cast<unsigned short>(ed), static_cast<date_time::months_of_year>(em))
)
);
}
diff --git a/3party/boost/boost/date_time/local_time/tz_database.hpp b/3party/boost/boost/date_time/local_time/tz_database.hpp
index aceda93915..0c6fbbf9ea 100644
--- a/3party/boost/boost/date_time/local_time/tz_database.hpp
+++ b/3party/boost/boost/date_time/local_time/tz_database.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include <string>
diff --git a/3party/boost/boost/date_time/local_time_adjustor.hpp b/3party/boost/boost/date_time/local_time_adjustor.hpp
index 13251a2cfb..64134f3b28 100644
--- a/3party/boost/boost/date_time/local_time_adjustor.hpp
+++ b/3party/boost/boost/date_time/local_time_adjustor.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: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
/*! @file local_time_adjustor.hpp
diff --git a/3party/boost/boost/date_time/local_timezone_defs.hpp b/3party/boost/boost/date_time/local_timezone_defs.hpp
index b56278ed28..5564a11080 100644
--- a/3party/boost/boost/date_time/local_timezone_defs.hpp
+++ b/3party/boost/boost/date_time/local_timezone_defs.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: 2008-11-13 12:10:23 -0800 (Thu, 13 Nov 2008) $
+ * $Date$
*/
#include "boost/date_time/dst_rules.hpp"
diff --git a/3party/boost/boost/date_time/locale_config.hpp b/3party/boost/boost/date_time/locale_config.hpp
index 194d5dd37b..42a2b73043 100644
--- a/3party/boost/boost/date_time/locale_config.hpp
+++ b/3party/boost/boost/date_time/locale_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
- * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
// This file configures whether the library will support locales and hence
diff --git a/3party/boost/boost/date_time/microsec_time_clock.hpp b/3party/boost/boost/date_time/microsec_time_clock.hpp
index 177811ee6f..bffc74137e 100644
--- a/3party/boost/boost/date_time/microsec_time_clock.hpp
+++ b/3party/boost/boost/date_time/microsec_time_clock.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-05-10 02:15:48 -0700 (Mon, 10 May 2010) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/parse_format_base.hpp b/3party/boost/boost/date_time/parse_format_base.hpp
index 087baf9532..d4b2f5975b 100644
--- a/3party/boost/boost/date_time/parse_format_base.hpp
+++ b/3party/boost/boost/date_time/parse_format_base.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
namespace boost {
diff --git a/3party/boost/boost/date_time/period.hpp b/3party/boost/boost/date_time/period.hpp
index 3e34def323..1a88209341 100644
--- a/3party/boost/boost/date_time/period.hpp
+++ b/3party/boost/boost/date_time/period.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$
*/
/*! \file period.hpp
diff --git a/3party/boost/boost/date_time/period_formatter.hpp b/3party/boost/boost/date_time/period_formatter.hpp
index b6ddc82175..0cce32a68a 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: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/period_parser.hpp b/3party/boost/boost/date_time/period_parser.hpp
index 84b9d1378c..8374234897 100644
--- a/3party/boost/boost/date_time/period_parser.hpp
+++ b/3party/boost/boost/date_time/period_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: 2008-11-13 12:10:23 -0800 (Thu, 13 Nov 2008) $
+ * $Date$
*/
#include <boost/throw_exception.hpp>
diff --git a/3party/boost/boost/date_time/posix_time/conversion.hpp b/3party/boost/boost/date_time/posix_time/conversion.hpp
index 83ccf60068..59e5cb7c12 100644
--- a/3party/boost/boost/date_time/posix_time/conversion.hpp
+++ b/3party/boost/boost/date_time/posix_time/conversion.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-06-09 11:10:13 -0700 (Wed, 09 Jun 2010) $
+ * $Date$
*/
#include <cstring>
diff --git a/3party/boost/boost/date_time/posix_time/date_duration_operators.hpp b/3party/boost/boost/date_time/posix_time/date_duration_operators.hpp
index 6846a77815..60821f0c46 100644
--- a/3party/boost/boost/date_time/posix_time/date_duration_operators.hpp
+++ b/3party/boost/boost/date_time/posix_time/date_duration_operators.hpp
@@ -6,7 +6,7 @@
* (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$
*/
#include "boost/date_time/gregorian/greg_duration_types.hpp"
diff --git a/3party/boost/boost/date_time/posix_time/posix_time.hpp b/3party/boost/boost/date_time/posix_time/posix_time.hpp
index 3b85ff46ff..aecf8a818d 100644
--- a/3party/boost/boost/date_time/posix_time/posix_time.hpp
+++ b/3party/boost/boost/date_time/posix_time/posix_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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
/*!@file posix_time.hpp Global header file to get all of posix time types
*/
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 d0b76536e9..60b34683fd 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: 2012-10-10 12:05:03 -0700 (Wed, 10 Oct 2012) $
+ * $Date$
*/
#include <cstdlib> //for MCW 7.2 std::abs(long long)
diff --git a/3party/boost/boost/date_time/posix_time/posix_time_duration.hpp b/3party/boost/boost/date_time/posix_time/posix_time_duration.hpp
index 9778fd7f3e..7e15df2302 100644
--- a/3party/boost/boost/date_time/posix_time/posix_time_duration.hpp
+++ b/3party/boost/boost/date_time/posix_time/posix_time_duration.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/posix_time/posix_time_config.hpp"
diff --git a/3party/boost/boost/date_time/posix_time/posix_time_io.hpp b/3party/boost/boost/date_time/posix_time/posix_time_io.hpp
index fb63a9165c..45c338b220 100644
--- a/3party/boost/boost/date_time/posix_time/posix_time_io.hpp
+++ b/3party/boost/boost/date_time/posix_time/posix_time_io.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-11-13 11:05:31 -0800 (Thu, 13 Nov 2008) $
+ * $Date$
*/
#include <locale>
@@ -47,7 +47,6 @@ namespace posix_time {
const ptime& p) {
boost::io::ios_flags_saver iflags(os);
typedef boost::date_time::time_facet<ptime, CharT> custom_ptime_facet;
- typedef std::time_put<CharT> std_ptime_facet;
std::ostreambuf_iterator<CharT> oitr(os);
if (std::has_facet<custom_ptime_facet>(os.getloc()))
std::use_facet<custom_ptime_facet>(os.getloc()).put(oitr, os, os.fill(), p);
@@ -114,7 +113,6 @@ namespace posix_time {
const boost::posix_time::time_period& p) {
boost::io::ios_flags_saver iflags(os);
typedef boost::date_time::time_facet<ptime, CharT> custom_ptime_facet;
- typedef std::time_put<CharT> std_time_facet;
std::ostreambuf_iterator<CharT> oitr(os);
if (std::has_facet<custom_ptime_facet>(os.getloc())) {
std::use_facet<custom_ptime_facet>(os.getloc()).put(oitr, os, os.fill(), p);
@@ -180,7 +178,6 @@ namespace posix_time {
{
boost::io::ios_flags_saver iflags(os);
typedef boost::date_time::time_facet<ptime, CharT> custom_ptime_facet;
- typedef std::time_put<CharT> std_ptime_facet;
std::ostreambuf_iterator<CharT> oitr(os);
if (std::has_facet<custom_ptime_facet>(os.getloc()))
std::use_facet<custom_ptime_facet>(os.getloc()).put(oitr, os, os.fill(), td);
diff --git a/3party/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp b/3party/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp
index fcc3fac1d9..b31fb98723 100644
--- a/3party/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp
+++ b/3party/boost/boost/date_time/posix_time/posix_time_legacy_io.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$
*/
/*! @file posix_time_pre133_operators.hpp
@@ -80,7 +80,7 @@ namespace posix_time {
// any marker (such as '\0').
typename std::basic_string<charT>::iterator e = inp_s.end();
while(b != e){
- out_ss << out_ss.narrow(*b, 0);
+ out_ss << is.narrow(*b, 0);
++b;
}
diff --git a/3party/boost/boost/date_time/posix_time/posix_time_system.hpp b/3party/boost/boost/date_time/posix_time/posix_time_system.hpp
index 13626e9bad..84c21ca00f 100644
--- a/3party/boost/boost/date_time/posix_time/posix_time_system.hpp
+++ b/3party/boost/boost/date_time/posix_time/posix_time_system.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/posix_time/ptime.hpp b/3party/boost/boost/date_time/posix_time/ptime.hpp
index 3f1cb0473f..e4f9d02d1f 100644
--- a/3party/boost/boost/date_time/posix_time/ptime.hpp
+++ b/3party/boost/boost/date_time/posix_time/ptime.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/posix_time/posix_time_system.hpp"
diff --git a/3party/boost/boost/date_time/posix_time/time_formatters.hpp b/3party/boost/boost/date_time/posix_time/time_formatters.hpp
index 534b9525b8..ce19568228 100644
--- a/3party/boost/boost/date_time/posix_time/time_formatters.hpp
+++ b/3party/boost/boost/date_time/posix_time/time_formatters.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$
*/
#include <boost/date_time/gregorian/gregorian.hpp>
diff --git a/3party/boost/boost/date_time/posix_time/time_formatters_limited.hpp b/3party/boost/boost/date_time/posix_time/time_formatters_limited.hpp
index 8d2ebdce58..c74fcfa0b0 100644
--- a/3party/boost/boost/date_time/posix_time/time_formatters_limited.hpp
+++ b/3party/boost/boost/date_time/posix_time/time_formatters_limited.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$
*/
#include <boost/date_time/gregorian/gregorian.hpp>
diff --git a/3party/boost/boost/date_time/posix_time/time_parsers.hpp b/3party/boost/boost/date_time/posix_time/time_parsers.hpp
index 3dc02b18a3..55b6ccf1f8 100644
--- a/3party/boost/boost/date_time/posix_time/time_parsers.hpp
+++ b/3party/boost/boost/date_time/posix_time/time_parsers.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/gregorian/gregorian.hpp"
diff --git a/3party/boost/boost/date_time/posix_time/time_period.hpp b/3party/boost/boost/date_time/posix_time/time_period.hpp
index 11f8120732..7c6095b896 100644
--- a/3party/boost/boost/date_time/posix_time/time_period.hpp
+++ b/3party/boost/boost/date_time/posix_time/time_period.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/period.hpp"
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 c9038f19a6..8650ae1da9 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-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $
+ * $Date$
*/
#include "boost/date_time/posix_time/posix_time.hpp"
diff --git a/3party/boost/boost/date_time/special_defs.hpp b/3party/boost/boost/date_time/special_defs.hpp
index 661814ec19..5a757be103 100644
--- a/3party/boost/boost/date_time/special_defs.hpp
+++ b/3party/boost/boost/date_time/special_defs.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
namespace boost {
diff --git a/3party/boost/boost/date_time/special_values_formatter.hpp b/3party/boost/boost/date_time/special_values_formatter.hpp
index 53fe98452d..c8653c1f48 100644
--- a/3party/boost/boost/date_time/special_values_formatter.hpp
+++ b/3party/boost/boost/date_time/special_values_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
- * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include <vector>
diff --git a/3party/boost/boost/date_time/string_convert.hpp b/3party/boost/boost/date_time/string_convert.hpp
index a3cc86c2db..30be3567a5 100644
--- a/3party/boost/boost/date_time/string_convert.hpp
+++ b/3party/boost/boost/date_time/string_convert.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include "boost/date_time/compiler_config.hpp"
@@ -21,7 +21,6 @@ namespace date_time {
inline
std::basic_string<OutputT> convert_string_type(const std::basic_string<InputT>& inp_str)
{
- typedef std::basic_string<InputT> input_type;
typedef std::basic_string<OutputT> output_type;
output_type result;
result.insert(result.begin(), inp_str.begin(), inp_str.end());
diff --git a/3party/boost/boost/date_time/string_parse_tree.hpp b/3party/boost/boost/date_time/string_parse_tree.hpp
index d67bf6b7d0..9e977663fa 100644
--- a/3party/boost/boost/date_time/string_parse_tree.hpp
+++ b/3party/boost/boost/date_time/string_parse_tree.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-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/strings_from_facet.hpp b/3party/boost/boost/date_time/strings_from_facet.hpp
index 82da517c7a..800919a0b5 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: 2013-06-21 08:04:12 -0700 (Fri, 21 Jun 2013) $
+ * $Date$
*/
#include <sstream>
@@ -35,7 +35,6 @@ gather_month_strings(const std::locale& locale, bool short_strings=true)
{
typedef std::basic_string<charT> string_type;
typedef std::vector<string_type> collection_type;
- typedef std::basic_ostringstream<charT> ostream_type;
typedef std::ostreambuf_iterator<charT> ostream_iter_type;
typedef std::basic_ostringstream<charT> stringstream_type;
typedef std::time_put<charT> time_put_facet_type;
@@ -86,7 +85,6 @@ gather_weekday_strings(const std::locale& locale, bool short_strings=true)
{
typedef std::basic_string<charT> string_type;
typedef std::vector<string_type> collection_type;
- typedef std::basic_ostringstream<charT> ostream_type;
typedef std::ostreambuf_iterator<charT> ostream_iter_type;
typedef std::basic_ostringstream<charT> stringstream_type;
typedef std::time_put<charT> time_put_facet_type;
diff --git a/3party/boost/boost/date_time/time.hpp b/3party/boost/boost/date_time/time.hpp
index 8b21144b6e..0a7810a0ef 100644
--- a/3party/boost/boost/date_time/time.hpp
+++ b/3party/boost/boost/date_time/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: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/time_clock.hpp b/3party/boost/boost/date_time/time_clock.hpp
index 9aa2ff0e39..a64a5b81b9 100644
--- a/3party/boost/boost/date_time/time_clock.hpp
+++ b/3party/boost/boost/date_time/time_clock.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$
*/
/*! @file time_clock.hpp
diff --git a/3party/boost/boost/date_time/time_defs.hpp b/3party/boost/boost/date_time/time_defs.hpp
index d74631d5eb..852207e685 100644
--- a/3party/boost/boost/date_time/time_defs.hpp
+++ b/3party/boost/boost/date_time/time_defs.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: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/time_duration.hpp b/3party/boost/boost/date_time/time_duration.hpp
index fc3660b7ce..92a0e2d59a 100644
--- a/3party/boost/boost/date_time/time_duration.hpp
+++ b/3party/boost/boost/date_time/time_duration.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-10-10 12:05:03 -0700 (Wed, 10 Oct 2012) $
+ * $Date$
*/
#include <boost/cstdint.hpp>
diff --git a/3party/boost/boost/date_time/time_facet.hpp b/3party/boost/boost/date_time/time_facet.hpp
index 8346ca3009..b9abedfba9 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-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
#include <cctype>
@@ -822,7 +822,7 @@ namespace date_time {
const_itr itr(m_time_duration_format.begin());
while (itr != m_time_duration_format.end() && (sitr != stream_end)) {
if (*itr == '%') {
- ++itr;
+ if (++itr == m_time_duration_format.end()) break;
if (*itr != '%') {
switch(*itr) {
case 'O':
@@ -994,7 +994,7 @@ namespace date_time {
const_itr itr(this->m_format.begin());
while (itr != this->m_format.end() && (sitr != stream_end)) {
if (*itr == '%') {
- ++itr;
+ if (++itr == this->m_format.end()) break;
if (*itr != '%') {
// the cases are grouped by date & time flags - not alphabetical order
switch(*itr) {
diff --git a/3party/boost/boost/date_time/time_formatting_streams.hpp b/3party/boost/boost/date_time/time_formatting_streams.hpp
index 2d07d344ee..f69f87a348 100644
--- a/3party/boost/boost/date_time/time_formatting_streams.hpp
+++ b/3party/boost/boost/date_time/time_formatting_streams.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-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $
+ * $Date$
*/
#include <boost/date_time/compiler_config.hpp>
diff --git a/3party/boost/boost/date_time/time_iterator.hpp b/3party/boost/boost/date_time/time_iterator.hpp
index 4c33f39e97..64439363d7 100644
--- a/3party/boost/boost/date_time/time_iterator.hpp
+++ b/3party/boost/boost/date_time/time_iterator.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-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/time_parsing.hpp b/3party/boost/boost/date_time/time_parsing.hpp
index 7b71de0da3..6de4b7dbde 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: 2012-10-10 12:05:03 -0700 (Wed, 10 Oct 2012) $
+ * $Date$
*/
#include "boost/tokenizer.hpp"
diff --git a/3party/boost/boost/date_time/time_resolution_traits.hpp b/3party/boost/boost/date_time/time_resolution_traits.hpp
index 903830c76e..37785d0e68 100644
--- a/3party/boost/boost/date_time/time_resolution_traits.hpp
+++ b/3party/boost/boost/date_time/time_resolution_traits.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-06 04:25:55 -0700 (Sat, 06 Jun 2009) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/time_system_counted.hpp b/3party/boost/boost/date_time/time_system_counted.hpp
index 5425f62af4..e5ed20b8c6 100644
--- a/3party/boost/boost/date_time/time_system_counted.hpp
+++ b/3party/boost/boost/date_time/time_system_counted.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$
*/
diff --git a/3party/boost/boost/date_time/time_system_split.hpp b/3party/boost/boost/date_time/time_system_split.hpp
index 6fc4a336b5..cf5931a4f2 100644
--- a/3party/boost/boost/date_time/time_system_split.hpp
+++ b/3party/boost/boost/date_time/time_system_split.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-11-13 12:10:23 -0800 (Thu, 13 Nov 2008) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/time_zone_base.hpp b/3party/boost/boost/date_time/time_zone_base.hpp
index f239d545a0..576c77a223 100644
--- a/3party/boost/boost/date_time/time_zone_base.hpp
+++ b/3party/boost/boost/date_time/time_zone_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-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/time_zone_names.hpp b/3party/boost/boost/date_time/time_zone_names.hpp
index a56502704e..405e7e0a70 100644
--- a/3party/boost/boost/date_time/time_zone_names.hpp
+++ b/3party/boost/boost/date_time/time_zone_names.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
#include <string>
diff --git a/3party/boost/boost/date_time/tz_db_base.hpp b/3party/boost/boost/date_time/tz_db_base.hpp
index 567e7ada2f..29d60063c3 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: 2013-06-13 07:00:48 -0700 (Thu, 13 Jun 2013) $
+ * $Date$
*/
#include <map>
@@ -180,7 +180,6 @@ namespace boost {
/*! May throw data_not_accessible, or bad_field_count exceptions */
void load_from_file(const std::string& pathspec)
{
- string_type in_str;
std::string buff;
std::ifstream ifs(pathspec.c_str());
@@ -261,8 +260,12 @@ namespace boost {
e_wn = get_week_num(e_nth);
- return new rule_type(start_rule(s_wn, s_d, s_m),
- end_rule(e_wn, e_d, e_m));
+ return new rule_type(start_rule(s_wn,
+ static_cast<unsigned short>(s_d),
+ static_cast<unsigned short>(s_m)),
+ end_rule(e_wn,
+ static_cast<unsigned short>(e_d),
+ static_cast<unsigned short>(e_m)));
}
//! helper function for parse_rules()
week_num get_week_num(int nth) const
diff --git a/3party/boost/boost/date_time/wrapping_int.hpp b/3party/boost/boost/date_time/wrapping_int.hpp
index e6f87d52cb..6f869d3023 100644
--- a/3party/boost/boost/date_time/wrapping_int.hpp
+++ b/3party/boost/boost/date_time/wrapping_int.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-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $
+ * $Date$
*/
diff --git a/3party/boost/boost/date_time/year_month_day.hpp b/3party/boost/boost/date_time/year_month_day.hpp
index 9340e53f55..e1bf2c7001 100644
--- a/3party/boost/boost/date_time/year_month_day.hpp
+++ b/3party/boost/boost/date_time/year_month_day.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: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $
+ * $Date$
*/
namespace boost {
diff --git a/3party/boost/boost/detail/allocator_utilities.hpp b/3party/boost/boost/detail/allocator_utilities.hpp
index 5d6ef48b05..ed3de8466d 100644
--- a/3party/boost/boost/detail/allocator_utilities.hpp
+++ b/3party/boost/boost/detail/allocator_utilities.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2009 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -11,7 +11,6 @@
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
#include <boost/detail/workaround.hpp>
-#include <boost/mpl/aux_/msvc_never_true.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/type_traits/is_same.hpp>
#include <cstddef>
@@ -116,29 +115,6 @@ struct partial_std_allocator_rebind_to
/* rebind operation in all other cases */
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
-/* Workaround for a problem in MSVC with dependent template typedefs
- * when doing rebinding of allocators.
- * Modeled after <boost/mpl/aux_/msvc_dtw.hpp> (thanks, Aleksey!)
- */
-
-template<typename Allocator>
-struct rebinder
-{
- template<bool> struct fake_allocator:Allocator{};
- template<> struct fake_allocator<true>
- {
- template<typename Type> struct rebind{};
- };
-
- template<typename Type>
- struct result:
- fake_allocator<mpl::aux::msvc_never_true<Allocator>::value>::
- template rebind<Type>
- {
- };
-};
-#else
template<typename Allocator>
struct rebinder
{
@@ -149,7 +125,6 @@ struct rebinder
rebind<Type>::other other;
};
};
-#endif
template<typename Allocator,typename Type>
struct compliant_allocator_rebind_to
diff --git a/3party/boost/boost/detail/basic_pointerbuf.hpp b/3party/boost/boost/detail/basic_pointerbuf.hpp
new file mode 100644
index 0000000000..1d8cf373b3
--- /dev/null
+++ b/3party/boost/boost/detail/basic_pointerbuf.hpp
@@ -0,0 +1,139 @@
+//-----------------------------------------------------------------------------
+// boost detail/templated_streams.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2013 John Maddock, Antony Polukhin
+//
+//
+// 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_DETAIL_BASIC_POINTERBUF_HPP
+#define BOOST_DETAIL_BASIC_POINTERBUF_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include "boost/config.hpp"
+#include <streambuf>
+
+namespace boost { namespace detail {
+
+//
+// class basic_pointerbuf:
+// acts as a stream buffer which wraps around a pair of pointers:
+//
+template <class charT, class BufferT >
+class basic_pointerbuf : public BufferT {
+protected:
+ typedef BufferT base_type;
+ typedef basic_pointerbuf<charT, BufferT> this_type;
+ typedef typename base_type::int_type int_type;
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::pos_type pos_type;
+ typedef ::std::streamsize streamsize;
+ typedef typename base_type::off_type off_type;
+
+public:
+ basic_pointerbuf() : base_type() { setbuf(0, 0); }
+ const charT* getnext() { return this->gptr(); }
+
+#ifndef BOOST_NO_USING_TEMPLATE
+ using base_type::pptr;
+ using base_type::pbase;
+#else
+ charT* pptr() const { return base_type::pptr(); }
+ charT* pbase() const { return base_type::pbase(); }
+#endif
+
+protected:
+ // VC mistakenly assumes that `setbuf` and other functions are not referenced.
+ // Marking those functions with `inline` suppresses the warnings.
+ // There must be no harm from marking virtual functions as inline: inline virtual
+ // call can be inlined ONLY when the compiler knows the "exact class".
+ inline base_type* setbuf(char_type* s, streamsize n);
+ inline typename this_type::pos_type seekpos(pos_type sp, ::std::ios_base::openmode which);
+ inline typename this_type::pos_type seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which);
+
+private:
+ basic_pointerbuf& operator=(const basic_pointerbuf&);
+ basic_pointerbuf(const basic_pointerbuf&);
+};
+
+template<class charT, class BufferT>
+BufferT*
+basic_pointerbuf<charT, BufferT>::setbuf(char_type* s, streamsize n)
+{
+ this->setg(s, s, s + n);
+ return this;
+}
+
+template<class charT, class BufferT>
+typename basic_pointerbuf<charT, BufferT>::pos_type
+basic_pointerbuf<charT, BufferT>::seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which)
+{
+ typedef typename boost::int_t<sizeof(way) * CHAR_BIT>::least cast_type;
+
+ if(which & ::std::ios_base::out)
+ return pos_type(off_type(-1));
+ std::ptrdiff_t size = this->egptr() - this->eback();
+ std::ptrdiff_t pos = this->gptr() - this->eback();
+ charT* g = this->eback();
+ switch(static_cast<cast_type>(way))
+ {
+ case ::std::ios_base::beg:
+ if((off < 0) || (off > size))
+ return pos_type(off_type(-1));
+ else
+ this->setg(g, g + off, g + size);
+ break;
+ case ::std::ios_base::end:
+ if((off < 0) || (off > size))
+ return pos_type(off_type(-1));
+ else
+ this->setg(g, g + size - off, g + size);
+ break;
+ case ::std::ios_base::cur:
+ {
+ std::ptrdiff_t newpos = static_cast<std::ptrdiff_t>(pos + off);
+ if((newpos < 0) || (newpos > size))
+ return pos_type(off_type(-1));
+ else
+ this->setg(g, g + newpos, g + size);
+ break;
+ }
+ default: ;
+ }
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4244)
+#endif
+ return static_cast<pos_type>(this->gptr() - this->eback());
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template<class charT, class BufferT>
+typename basic_pointerbuf<charT, BufferT>::pos_type
+basic_pointerbuf<charT, BufferT>::seekpos(pos_type sp, ::std::ios_base::openmode which)
+{
+ if(which & ::std::ios_base::out)
+ return pos_type(off_type(-1));
+ off_type size = static_cast<off_type>(this->egptr() - this->eback());
+ charT* g = this->eback();
+ if(off_type(sp) <= size)
+ {
+ this->setg(g, g + off_type(sp), g + size);
+ }
+ return pos_type(off_type(-1));
+}
+
+}} // namespace boost::detail
+
+#endif // BOOST_DETAIL_BASIC_POINTERBUF_HPP
+
diff --git a/3party/boost/boost/detail/catch_exceptions.hpp b/3party/boost/boost/detail/catch_exceptions.hpp
index b1a3c76b2a..823ebd1e29 100644
--- a/3party/boost/boost/detail/catch_exceptions.hpp
+++ b/3party/boost/boost/detail/catch_exceptions.hpp
@@ -24,11 +24,7 @@
#include <exception> // for exception, bad_exception
#include <stdexcept> // for std exception hierarchy
#include <boost/cstdlib.hpp> // for exit codes
-# if __GNUC__ != 2 || __GNUC_MINOR__ > 96
-# include <ostream> // for ostream
-# else
-# include <iostream> // workaround GNU missing ostream header
-# endif
+#include <ostream> // for ostream
# if defined(__BORLANDC__) && (__BORLANDC__ <= 0x0551)
# define BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT
diff --git a/3party/boost/boost/detail/compressed_pair.hpp b/3party/boost/boost/detail/compressed_pair.hpp
index 3f326456ce..5dc21e23e6 100644
--- a/3party/boost/boost/detail/compressed_pair.hpp
+++ b/3party/boost/boost/detail/compressed_pair.hpp
@@ -6,7 +6,7 @@
// See http://www.boost.org/libs/utility for most recent version including documentation.
// compressed_pair: pair that "compresses" empty members
-// (see libs/utility/compressed_pair.htm)
+// (see libs/utility/doc/html/compressed_pair.html)
//
// JM changes 25 Jan 2004:
// For the case where T1 == T2 and both are empty, then first() and second()
diff --git a/3party/boost/boost/detail/container_fwd.hpp b/3party/boost/boost/detail/container_fwd.hpp
index ef17498063..04ce972738 100644
--- a/3party/boost/boost/detail/container_fwd.hpp
+++ b/3party/boost/boost/detail/container_fwd.hpp
@@ -8,7 +8,7 @@
#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP)
#define BOOST_DETAIL_CONTAINER_FWD_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020) && \
+#if defined(_MSC_VER) && \
!defined(BOOST_DETAIL_TEST_CONFIG_ONLY)
# pragma once
#endif
@@ -119,12 +119,7 @@ namespace std
template <class T> class allocator;
template <class charT, class traits, class Allocator> class basic_string;
-#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
-
- template <class charT> struct string_char_traits;
-#else
template <class charT> struct char_traits;
-#endif
#if defined(BOOST_CONTAINER_FWD_COMPLEX_STRUCT)
template <class T> struct complex;
diff --git a/3party/boost/boost/detail/dynamic_bitset.hpp b/3party/boost/boost/detail/dynamic_bitset.hpp
index 281aa55cd6..e0f675d5ec 100644
--- a/3party/boost/boost/detail/dynamic_bitset.hpp
+++ b/3party/boost/boost/detail/dynamic_bitset.hpp
@@ -3,6 +3,9 @@
// Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
// Copyright (c) 2003-2006, 2008 Gennaro Prota
//
+// Copyright (c) 2014 Glen Joseph Fernandes
+// glenfe at live dot com
+//
// 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)
@@ -12,6 +15,7 @@
#ifndef BOOST_DETAIL_DYNAMIC_BITSET_HPP
#define BOOST_DETAIL_DYNAMIC_BITSET_HPP
+#include <memory>
#include <cstddef>
#include "boost/config.hpp"
#include "boost/detail/workaround.hpp"
@@ -155,17 +159,25 @@ namespace boost {
// meaningful info.
//
template <typename T>
- typename T::size_type vector_max_size_workaround(const T & v) {
+ inline typename T::size_type vector_max_size_workaround(const T & v)
+ BOOST_NOEXCEPT
+ {
+ typedef typename T::allocator_type allocator_type;
+
+ const allocator_type& alloc = v.get_allocator();
- typedef typename T::allocator_type allocator_type;
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef std::allocator_traits<allocator_type> allocator_traits;
+
+ const typename allocator_traits::size_type alloc_max =
+ allocator_traits::max_size(alloc);
+#else
+ const typename allocator_type::size_type alloc_max = alloc.max_size();
+#endif
- const typename allocator_type::size_type alloc_max =
- v.get_allocator().max_size();
- const typename T::size_type container_max = v.max_size();
+ const typename T::size_type container_max = v.max_size();
- return alloc_max < container_max?
- alloc_max :
- container_max;
+ return alloc_max < container_max ? alloc_max : container_max;
}
// for static_asserts
diff --git a/3party/boost/boost/detail/endian.hpp b/3party/boost/boost/detail/endian.hpp
index 3236808d5f..f576c26b89 100644
--- a/3party/boost/boost/detail/endian.hpp
+++ b/3party/boost/boost/detail/endian.hpp
@@ -1,126 +1,11 @@
-// Copyright 2005 Caleb Epstein
-// Copyright 2006 John Maddock
-// Copyright 2010 Rene Rivera
+// Copyright 2013 Rene Rivera
// Distributed under the Boost Software License, Version 1.0. (See accompany-
// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/*
- * Copyright notice reproduced from <boost/detail/limits.hpp>, from
- * which this code was originally taken.
- *
- * Modified by Caleb Epstein to use <endian.h> with GNU libc and to
- * defined the BOOST_ENDIAN macro.
- */
-
#ifndef BOOST_DETAIL_ENDIAN_HPP
#define BOOST_DETAIL_ENDIAN_HPP
-//
-// Special cases come first:
-//
-#if defined (__GLIBC__)
-// GNU libc offers the helpful header <endian.h> which defines
-// __BYTE_ORDER
-# include <endian.h>
-# if (__BYTE_ORDER == __LITTLE_ENDIAN)
-# define BOOST_LITTLE_ENDIAN
-# elif (__BYTE_ORDER == __BIG_ENDIAN)
-# define BOOST_BIG_ENDIAN
-# elif (__BYTE_ORDER == __PDP_ENDIAN)
-# define BOOST_PDP_ENDIAN
-# else
-# error Unknown machine endianness detected.
-# endif
-# define BOOST_BYTE_ORDER __BYTE_ORDER
-
-#elif defined(__NetBSD__) || defined(__FreeBSD__) || \
- defined(__OpenBSD__) || (__DragonFly__)
-//
-// BSD has endian.h, see https://svn.boost.org/trac/boost/ticket/6013
-# if defined(__OpenBSD__)
-# include <machine/endian.h>
-# else
-# include <sys/endian.h>
-# endif
-# if (_BYTE_ORDER == _LITTLE_ENDIAN)
-# define BOOST_LITTLE_ENDIAN
-# elif (_BYTE_ORDER == _BIG_ENDIAN)
-# define BOOST_BIG_ENDIAN
-# elif (_BYTE_ORDER == _PDP_ENDIAN)
-# define BOOST_PDP_ENDIAN
-# else
-# error Unknown machine endianness detected.
-# endif
-# define BOOST_BYTE_ORDER _BYTE_ORDER
-
-#elif defined( __ANDROID__ )
-// Adroid specific code, see: https://svn.boost.org/trac/boost/ticket/7528
-// Here we can use machine/_types.h, see:
-// http://stackoverflow.com/questions/6212951/endianness-of-android-ndk
-# include "machine/_types.h"
-# ifdef __ARMEB__
-# define BOOST_BIG_ENDIAN
-# define BOOST_BYTE_ORDER 4321
-# else
-# define BOOST_LITTLE_ENDIAN
-# define BOOST_BYTE_ORDER 1234
-# endif // __ARMEB__
-
-#elif defined( _XBOX )
-//
-// XBox is always big endian??
-//
-# define BOOST_BIG_ENDIAN
-# define BOOST_BYTE_ORDER 4321
+// Use the Predef library for the detection of endianess.
+#include <boost/predef/detail/endian_compat.h>
-#elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) || \
- defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) || \
- defined(__BIGENDIAN__) && !defined(__LITTLEENDIAN__) || \
- defined(_STLP_BIG_ENDIAN) && !defined(_STLP_LITTLE_ENDIAN)
-# define BOOST_BIG_ENDIAN
-# define BOOST_BYTE_ORDER 4321
-#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) || \
- defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) || \
- defined(__LITTLEENDIAN__) && !defined(__BIGENDIAN__) || \
- defined(_STLP_LITTLE_ENDIAN) && !defined(_STLP_BIG_ENDIAN)
-# define BOOST_LITTLE_ENDIAN
-# define BOOST_BYTE_ORDER 1234
-#elif defined(__sparc) || defined(__sparc__) \
- || defined(_POWER) || defined(__powerpc__) \
- || defined(__ppc__) || defined(__hpux) || defined(__hppa) \
- || defined(_MIPSEB) || defined(_POWER) \
- || defined(__s390__) || defined(__ARMEB__)
-# define BOOST_BIG_ENDIAN
-# define BOOST_BYTE_ORDER 4321
-#elif defined(__i386__) || defined(__alpha__) \
- || defined(__ia64) || defined(__ia64__) \
- || defined(_M_IX86) || defined(_M_IA64) \
- || defined(_M_ALPHA) || defined(__amd64) \
- || defined(__amd64__) || defined(_M_AMD64) \
- || defined(__x86_64) || defined(__x86_64__) \
- || defined(_M_X64) || defined(__bfin__) \
- || defined(__ARMEL__) \
- || (defined(_WIN32) && defined(__ARM__) && defined(_MSC_VER)) // ARM Windows CE don't define anything reasonably unique, but there are no big-endian Windows versions
-
-# define BOOST_LITTLE_ENDIAN
-# define BOOST_BYTE_ORDER 1234
-#else
-# error The file boost/detail/endian.hpp needs to be set up for your CPU type.
#endif
-
-
-#endif
-
diff --git a/3party/boost/boost/detail/fenv.hpp b/3party/boost/boost/detail/fenv.hpp
index f048706416..b268f5c1cc 100644
--- a/3party/boost/boost/detail/fenv.hpp
+++ b/3party/boost/boost/detail/fenv.hpp
@@ -14,7 +14,7 @@
#if !defined(BOOST_DETAIL_FENV_HPP)
#define BOOST_DETAIL_FENV_HPP
-/* If we're using clang + glibc, we have to get hacky.
+/* If we're using clang + glibc, we have to get hacky.
* See http://llvm.org/bugs/show_bug.cgi?id=6907 */
#if defined(__clang__) && (__clang_major__ < 3) && \
defined(__GNU_LIBRARY__) && /* up to version 5 */ \
@@ -61,14 +61,41 @@
using ::feholdexcept;
} }
+#elif defined(__MINGW32__) && defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408
+
+ // MinGW (32-bit) has a bug in mingw32/bits/c++config.h, it does not define _GLIBCXX_HAVE_FENV_H,
+ // which prevents the C fenv.h header contents to be included in the C++ wrapper header fenv.h. This is at least
+ // the case with gcc 4.8.1 packages tested so far, up to 4.8.1-4. Note that there is no issue with
+ // MinGW-w64.
+ // To work around the bug we avoid including the C++ wrapper header and include the C header directly
+ // and import all relevant symbols into std:: ourselves.
+
+ #include <../include/fenv.h>
+
+ namespace std {
+ using ::fenv_t;
+ using ::fexcept_t;
+ using ::fegetexceptflag;
+ using ::fesetexceptflag;
+ using ::feclearexcept;
+ using ::feraiseexcept;
+ using ::fetestexcept;
+ using ::fegetround;
+ using ::fesetround;
+ using ::fegetenv;
+ using ::fesetenv;
+ using ::feupdateenv;
+ using ::feholdexcept;
+ }
+
#else /* if we're not using GNU's C stdlib, fenv.h should work with clang */
+
#if defined(__SUNPRO_CC) /* lol suncc */
#include <stdio.h>
#endif
-
+
#include <fenv.h>
#endif
#endif /* BOOST_DETAIL_FENV_HPP */
-
diff --git a/3party/boost/boost/detail/identifier.hpp b/3party/boost/boost/detail/identifier.hpp
index 688a664f7d..063d23801e 100644
--- a/3party/boost/boost/detail/identifier.hpp
+++ b/3party/boost/boost/detail/identifier.hpp
@@ -57,9 +57,7 @@ namespace boost
identifier() {}
explicit identifier( value_type v ) : m_value(v) {}
- #if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // 1300 == VC++ 7.0 bug workaround
private:
- #endif
T m_value;
};
diff --git a/3party/boost/boost/detail/indirect_traits.hpp b/3party/boost/boost/detail/indirect_traits.hpp
index f9c0cd6a04..7c8f76b09d 100644
--- a/3party/boost/boost/detail/indirect_traits.hpp
+++ b/3party/boost/boost/detail/indirect_traits.hpp
@@ -26,15 +26,11 @@
# include <boost/mpl/not.hpp>
# include <boost/mpl/aux_/lambda_support.hpp>
-# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-# include <boost/detail/is_function_ref_tester.hpp>
-# endif
namespace boost { namespace detail {
namespace indirect_traits {
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T>
struct is_reference_to_const : mpl::false_
{
@@ -199,284 +195,6 @@ struct is_pointer_to_class
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T))
};
-# else
-
-using namespace boost::detail::is_function_ref_tester_;
-
-typedef char (&inner_yes_type)[3];
-typedef char (&inner_no_type)[2];
-typedef char (&outer_no_type)[1];
-
-template <typename V>
-struct is_const_help
-{
- typedef typename mpl::if_<
- is_const<V>
- , inner_yes_type
- , inner_no_type
- >::type type;
-};
-
-template <typename V>
-struct is_volatile_help
-{
- typedef typename mpl::if_<
- is_volatile<V>
- , inner_yes_type
- , inner_no_type
- >::type type;
-};
-
-template <typename V>
-struct is_pointer_help
-{
- typedef typename mpl::if_<
- is_pointer<V>
- , inner_yes_type
- , inner_no_type
- >::type type;
-};
-
-template <typename V>
-struct is_class_help
-{
- typedef typename mpl::if_<
- is_class<V>
- , inner_yes_type
- , inner_no_type
- >::type type;
-};
-
-template <class T>
-struct is_reference_to_function_aux
-{
- static T t;
- BOOST_STATIC_CONSTANT(
- bool, value = sizeof(detail::is_function_ref_tester(t,0)) == sizeof(::boost::type_traits::yes_type));
- typedef mpl::bool_<value> type;
- };
-
-template <class T>
-struct is_reference_to_function
- : mpl::if_<is_reference<T>, is_reference_to_function_aux<T>, mpl::bool_<false> >::type
-{
-};
-
-template <class T>
-struct is_pointer_to_function_aux
-{
- static T t;
- BOOST_STATIC_CONSTANT(
- bool, value
- = sizeof(::boost::type_traits::is_function_ptr_tester(t)) == sizeof(::boost::type_traits::yes_type));
- typedef mpl::bool_<value> type;
-};
-
-template <class T>
-struct is_pointer_to_function
- : mpl::if_<is_pointer<T>, is_pointer_to_function_aux<T>, mpl::bool_<false> >::type
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_function,(T))
-};
-
-struct false_helper1
-{
- template <class T>
- struct apply : mpl::false_
- {
- };
-};
-
-template <typename V>
-typename is_const_help<V>::type reference_to_const_helper(V&);
-outer_no_type
-reference_to_const_helper(...);
-
-struct true_helper1
-{
- template <class T>
- struct apply
- {
- static T t;
- BOOST_STATIC_CONSTANT(
- bool, value
- = sizeof(reference_to_const_helper(t)) == sizeof(inner_yes_type));
- typedef mpl::bool_<value> type;
- };
-};
-
-template <bool ref = true>
-struct is_reference_to_const_helper1 : true_helper1
-{
-};
-
-template <>
-struct is_reference_to_const_helper1<false> : false_helper1
-{
-};
-
-
-template <class T>
-struct is_reference_to_const
- : is_reference_to_const_helper1<is_reference<T>::value>::template apply<T>
-{
-};
-
-
-template <bool ref = true>
-struct is_reference_to_non_const_helper1
-{
- template <class T>
- struct apply
- {
- static T t;
- BOOST_STATIC_CONSTANT(
- bool, value
- = sizeof(reference_to_const_helper(t)) == sizeof(inner_no_type));
-
- typedef mpl::bool_<value> type;
- };
-};
-
-template <>
-struct is_reference_to_non_const_helper1<false> : false_helper1
-{
-};
-
-
-template <class T>
-struct is_reference_to_non_const
- : is_reference_to_non_const_helper1<is_reference<T>::value>::template apply<T>
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_non_const,(T))
-};
-
-
-template <typename V>
-typename is_volatile_help<V>::type reference_to_volatile_helper(V&);
-outer_no_type
-reference_to_volatile_helper(...);
-
-template <bool ref = true>
-struct is_reference_to_volatile_helper1
-{
- template <class T>
- struct apply
- {
- static T t;
- BOOST_STATIC_CONSTANT(
- bool, value
- = sizeof(reference_to_volatile_helper(t)) == sizeof(inner_yes_type));
- typedef mpl::bool_<value> type;
- };
-};
-
-template <>
-struct is_reference_to_volatile_helper1<false> : false_helper1
-{
-};
-
-
-template <class T>
-struct is_reference_to_volatile
- : is_reference_to_volatile_helper1<is_reference<T>::value>::template apply<T>
-{
-};
-
-template <typename V>
-typename is_pointer_help<V>::type reference_to_pointer_helper(V&);
-outer_no_type reference_to_pointer_helper(...);
-
-template <class T>
-struct reference_to_pointer_impl
-{
- static T t;
- BOOST_STATIC_CONSTANT(
- bool, value
- = (sizeof((reference_to_pointer_helper)(t)) == sizeof(inner_yes_type))
- );
-
- typedef mpl::bool_<value> type;
-};
-
-template <class T>
-struct is_reference_to_pointer
- : mpl::eval_if<is_reference<T>, reference_to_pointer_impl<T>, mpl::false_>::type
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_pointer,(T))
-};
-
-template <class T>
-struct is_reference_to_function_pointer
- : mpl::eval_if<is_reference<T>, is_pointer_to_function_aux<T>, mpl::false_>::type
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_function_pointer,(T))
-};
-
-
-template <class T>
-struct is_member_function_pointer_help
- : mpl::if_<is_member_function_pointer<T>, inner_yes_type, inner_no_type>
-{};
-
-template <typename V>
-typename is_member_function_pointer_help<V>::type member_function_pointer_helper(V&);
-outer_no_type member_function_pointer_helper(...);
-
-template <class T>
-struct is_pointer_to_member_function_aux
-{
- static T t;
- BOOST_STATIC_CONSTANT(
- bool, value
- = sizeof((member_function_pointer_helper)(t)) == sizeof(inner_yes_type));
- typedef mpl::bool_<value> type;
-};
-
-template <class T>
-struct is_reference_to_member_function_pointer
- : mpl::if_<
- is_reference<T>
- , is_pointer_to_member_function_aux<T>
- , mpl::bool_<false>
- >::type
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T))
-};
-
-template <typename V>
-typename is_class_help<V>::type reference_to_class_helper(V const volatile&);
-outer_no_type reference_to_class_helper(...);
-
-template <class T>
-struct is_reference_to_class
-{
- static T t;
- BOOST_STATIC_CONSTANT(
- bool, value
- = (is_reference<T>::value
- & (sizeof(reference_to_class_helper(t)) == sizeof(inner_yes_type)))
- );
- typedef mpl::bool_<value> type;
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T))
-};
-
-template <typename V>
-typename is_class_help<V>::type pointer_to_class_helper(V const volatile*);
-outer_no_type pointer_to_class_helper(...);
-
-template <class T>
-struct is_pointer_to_class
-{
- static T t;
- BOOST_STATIC_CONSTANT(
- bool, value
- = (is_pointer<T>::value
- && sizeof(pointer_to_class_helper(t)) == sizeof(inner_yes_type))
- );
- typedef mpl::bool_<value> type;
-};
-# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
}
diff --git a/3party/boost/boost/detail/interlocked.hpp b/3party/boost/boost/detail/interlocked.hpp
index 75e5a3061a..1152f710b1 100644
--- a/3party/boost/boost/detail/interlocked.hpp
+++ b/3party/boost/boost/detail/interlocked.hpp
@@ -1,12 +1,6 @@
#ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
#define BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
-// MS compatible compilers support #pragma once
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
//
// boost/detail/interlocked.hpp
//
@@ -19,6 +13,11 @@
#include <boost/config.hpp>
+// MS compatible compilers support #pragma once
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
#if defined( BOOST_USE_WINDOWS_H )
# include <windows.h>
@@ -31,6 +30,30 @@
# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER InterlockedCompareExchangePointer
# define BOOST_INTERLOCKED_EXCHANGE_POINTER InterlockedExchangePointer
+#elif defined( BOOST_USE_INTRIN_H )
+
+#include <intrin.h>
+
+# 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
+
+# if defined(_M_IA64) || defined(_M_AMD64) || defined(__x86_64__) || defined(__x86_64)
+
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
+
+# else
+
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
+ ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
+ ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
+
+# endif
+
#elif defined(_WIN32_WCE)
#if _WIN32_WCE >= 0x600
@@ -71,7 +94,7 @@ extern "C" long __cdecl InterlockedExchangeAdd( long*, long );
#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )
-#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1600
+#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1500
#include <intrin.h>
@@ -93,20 +116,11 @@ extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long );
#endif
-# pragma intrinsic( _InterlockedIncrement )
-# pragma intrinsic( _InterlockedDecrement )
-# pragma intrinsic( _InterlockedCompareExchange )
-# pragma intrinsic( _InterlockedExchange )
-# pragma intrinsic( _InterlockedExchangeAdd )
-
# if defined(_M_IA64) || defined(_M_AMD64)
extern "C" void* __cdecl _InterlockedCompareExchangePointer( void* volatile *, void*, void* );
extern "C" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* );
-# pragma intrinsic( _InterlockedCompareExchangePointer )
-# pragma intrinsic( _InterlockedExchangePointer )
-
# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
@@ -125,14 +139,30 @@ extern "C" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* );
# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+// Unlike __MINGW64__, __MINGW64_VERSION_MAJOR is defined by MinGW-w64 for both 32 and 64-bit targets.
+#elif defined(__MINGW64_VERSION_MAJOR)
+
+// MinGW-w64 provides intrin.h for both 32 and 64-bit targets.
+#include <intrin.h>
+
+# 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
+# if defined(__x86_64__) || defined(__x86_64)
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
+# else
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
+ ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
+ ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
+# endif
+
#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )
-#if defined(__MINGW64__)
-#define BOOST_INTERLOCKED_IMPORT
-#else
#define BOOST_INTERLOCKED_IMPORT __declspec(dllimport)
-#endif
-
namespace boost
{
diff --git a/3party/boost/boost/detail/is_function_ref_tester.hpp b/3party/boost/boost/detail/is_function_ref_tester.hpp
deleted file mode 100644
index 8e7d1d77f4..0000000000
--- a/3party/boost/boost/detail/is_function_ref_tester.hpp
+++ /dev/null
@@ -1,136 +0,0 @@
-
-// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
-// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.
-// 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_PP_IS_ITERATING)
-
-///// header body
-
-#ifndef BOOST_DETAIL_IS_FUNCTION_REF_TESTER_HPP_INCLUDED
-#define BOOST_DETAIL_IS_FUNCTION_REF_TESTER_HPP_INCLUDED
-
-#include "boost/type_traits/detail/yes_no_type.hpp"
-#include "boost/type_traits/config.hpp"
-
-#if defined(BOOST_TT_PREPROCESSING_MODE)
-# include "boost/preprocessor/iterate.hpp"
-# include "boost/preprocessor/enum_params.hpp"
-# include "boost/preprocessor/comma_if.hpp"
-#endif
-
-namespace boost {
-namespace detail {
-namespace is_function_ref_tester_ {
-
-template <class T>
-boost::type_traits::no_type BOOST_TT_DECL is_function_ref_tester(T& ...);
-
-#if !defined(BOOST_TT_PREPROCESSING_MODE)
-// preprocessor-generated part, don't edit by hand!
-
-template <class R>
-boost::type_traits::yes_type is_function_ref_tester(R (&)(), int);
-
-template <class R,class T0 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0), int);
-
-template <class R,class T0,class T1 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1), int);
-
-template <class R,class T0,class T1,class T2 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2), int);
-
-template <class R,class T0,class T1,class T2,class T3 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20,class T21 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20,class T21,class T22 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20,class T21,class T22,class T23 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23), int);
-
-template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20,class T21,class T22,class T23,class T24 >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24), int);
-
-#else
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (0, 25, "boost/detail/is_function_ref_tester.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif // BOOST_TT_PREPROCESSING_MODE
-
-} // namespace detail
-} // namespace python
-} // namespace boost
-
-#endif // BOOST_DETAIL_IS_FUNCTION_REF_TESTER_HPP_INCLUDED
-
-///// iteration
-
-#else
-#define i BOOST_PP_FRAME_ITERATION(1)
-
-template <class R BOOST_PP_COMMA_IF(i) BOOST_PP_ENUM_PARAMS(i,class T) >
-boost::type_traits::yes_type is_function_ref_tester(R (&)(BOOST_PP_ENUM_PARAMS(i,T)), int);
-
-#undef i
-#endif // BOOST_PP_IS_ITERATING
-
diff --git a/3party/boost/boost/detail/is_incrementable.hpp b/3party/boost/boost/detail/is_incrementable.hpp
index e7ef9dc625..6b36378fa2 100644
--- a/3party/boost/boost/detail/is_incrementable.hpp
+++ b/3party/boost/boost/detail/is_incrementable.hpp
@@ -55,8 +55,7 @@ namespace is_incrementable_
# endif
-# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
- || BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202))
# define BOOST_comma(a,b) (a)
# else
// In case an operator++ is found that returns void, we'll use ++x,0
diff --git a/3party/boost/boost/detail/is_xxx.hpp b/3party/boost/boost/detail/is_xxx.hpp
index cb64fb32b8..3f9a1265ee 100644
--- a/3party/boost/boost/detail/is_xxx.hpp
+++ b/3party/boost/boost/detail/is_xxx.hpp
@@ -8,39 +8,6 @@
# include <boost/mpl/bool.hpp>
# include <boost/preprocessor/enum_params.hpp>
-# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-# include <boost/type_traits/is_reference.hpp>
-# include <boost/type_traits/add_reference.hpp>
-
-# define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \
-template <class X_> \
-struct is_##name \
-{ \
- typedef char yes; \
- typedef char (&no)[2]; \
- \
- static typename add_reference<X_>::type dummy; \
- \
- struct helpers \
- { \
- template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \
- static yes test( \
- qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) >&, int \
- ); \
- \
- template <class U> \
- static no test(U&, ...); \
- }; \
- \
- BOOST_STATIC_CONSTANT( \
- bool, value \
- = !is_reference<X_>::value \
- & (sizeof(helpers::test(dummy, 0)) == sizeof(yes))); \
- \
- typedef mpl::bool_<value> type; \
-};
-
-# else
# define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \
template <class T> \
@@ -56,6 +23,5 @@ struct is_##name< \
{ \
};
-# endif
#endif // BOOST_DETAIL_IS_XXX_DWA20051011_HPP
diff --git a/3party/boost/boost/detail/iterator.hpp b/3party/boost/boost/detail/iterator.hpp
index 5bb9c6269c..c2e8f1e2a5 100644
--- a/3party/boost/boost/detail/iterator.hpp
+++ b/3party/boost/boost/detail/iterator.hpp
@@ -3,492 +3,24 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-// Boost versions of
-//
-// std::iterator_traits<>::iterator_category
-// std::iterator_traits<>::difference_type
-// std::distance()
-//
-// ...for all compilers and iterators
-//
-// Additionally, if X is a pointer
-// std::iterator_traits<X>::pointer
-
-// Otherwise, if partial specialization is supported or X is not a pointer
-// std::iterator_traits<X>::value_type
-// std::iterator_traits<X>::pointer
-// std::iterator_traits<X>::reference
-//
-// See http://www.boost.org for most recent version including documentation.
-
-// Revision History
-// 04 Mar 2001 - More attempted fixes for Intel C++ (David Abrahams)
-// 03 Mar 2001 - Put all implementation into namespace
-// boost::detail::iterator_traits_. Some progress made on fixes
-// for Intel compiler. (David Abrahams)
-// 02 Mar 2001 - Changed BOOST_MSVC to BOOST_MSVC_STD_ITERATOR in a few
-// places. (Jeremy Siek)
-// 19 Feb 2001 - Improved workarounds for stock MSVC6; use yes_type and
-// no_type from type_traits.hpp; stopped trying to remove_cv
-// before detecting is_pointer, in honor of the new type_traits
-// semantics. (David Abrahams)
-// 13 Feb 2001 - Make it work with nearly all standard-conforming iterators
-// under raw VC6. The one category remaining which will fail is
-// that of iterators derived from std::iterator but not
-// boost::iterator and which redefine difference_type.
-// 11 Feb 2001 - Clean away code which can never be used (David Abrahams)
-// 09 Feb 2001 - Always have a definition for each traits member, even if it
-// can't be properly deduced. These will be incomplete types in
-// some cases (undefined<void>), but it helps suppress MSVC errors
-// elsewhere (David Abrahams)
-// 07 Feb 2001 - Support for more of the traits members where possible, making
-// this useful as a replacement for std::iterator_traits<T> when
-// used as a default template parameter.
-// 06 Feb 2001 - Removed useless #includes of standard library headers
-// (David Abrahams)
-
#ifndef ITERATOR_DWA122600_HPP_
-# define ITERATOR_DWA122600_HPP_
-
-# include <boost/config.hpp>
-# include <iterator>
-
-// STLPort 4.0 and betas have a bug when debugging is enabled and there is no
-// partial specialization: instead of an iterator_category typedef, the standard
-// container iterators have _Iterator_category.
-//
-// Also, whether debugging is enabled or not, there is a broken specialization
-// of std::iterator<output_iterator_tag,void,void,void,void> which has no
-// typedefs but iterator_category.
-# if defined(__SGI_STL_PORT)
-
-# if (__SGI_STL_PORT <= 0x410) && !defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && defined(__STL_DEBUG)
-# define BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
-# endif
-
-# define BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
-
-# endif // STLPort <= 4.1b4 && no partial specialization
-
-# if !defined(BOOST_NO_STD_ITERATOR_TRAITS) \
- && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
- && !defined(BOOST_MSVC_STD_ITERATOR)
-
-namespace boost { namespace detail {
-
-// Define a new template so it can be specialized
-template <class Iterator>
-struct iterator_traits
- : std::iterator_traits<Iterator>
-{};
-using std::distance;
-
-}} // namespace boost::detail
-
-# else
-
-# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
- && !defined(BOOST_MSVC_STD_ITERATOR)
-
-// This is the case where everything conforms except BOOST_NO_STD_ITERATOR_TRAITS
-
-namespace boost { namespace detail {
-
-// Rogue Wave Standard Library fools itself into thinking partial
-// specialization is missing on some platforms (e.g. Sun), so fails to
-// supply iterator_traits!
-template <class Iterator>
-struct iterator_traits
-{
- typedef typename Iterator::value_type value_type;
- typedef typename Iterator::reference reference;
- typedef typename Iterator::pointer pointer;
- typedef typename Iterator::difference_type difference_type;
- typedef typename Iterator::iterator_category iterator_category;
-};
-
-template <class T>
-struct iterator_traits<T*>
-{
- typedef T value_type;
- typedef T& reference;
- typedef T* pointer;
- typedef std::ptrdiff_t difference_type;
- typedef std::random_access_iterator_tag iterator_category;
-};
-
-template <class T>
-struct iterator_traits<T const*>
-{
- typedef T value_type;
- typedef T const& reference;
- typedef T const* pointer;
- typedef std::ptrdiff_t difference_type;
- typedef std::random_access_iterator_tag iterator_category;
-};
-
-}} // namespace boost::detail
-
-# else
-
-# include <boost/type_traits/remove_const.hpp>
-# include <boost/type_traits/detail/yes_no_type.hpp>
-# include <boost/type_traits/is_pointer.hpp>
-
-# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-# include <boost/type_traits/is_same.hpp>
-# include <boost/type_traits/remove_pointer.hpp>
-# endif
-# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
-# include <boost/type_traits/is_base_and_derived.hpp>
-# endif
-
-# include <boost/mpl/if.hpp>
-# include <boost/mpl/has_xxx.hpp>
-# include <cstddef>
-
-// should be the last #include
-# include "boost/type_traits/detail/bool_trait_def.hpp"
-
-namespace boost { namespace detail {
-
-BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
-BOOST_MPL_HAS_XXX_TRAIT_DEF(reference)
-BOOST_MPL_HAS_XXX_TRAIT_DEF(pointer)
-BOOST_MPL_HAS_XXX_TRAIT_DEF(difference_type)
-BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator_category)
-
-// is_mutable_iterator --
-//
-// A metafunction returning true iff T is a mutable iterator type
-// with a nested value_type. Will only work portably with iterators
-// whose operator* returns a reference, but that seems to be OK for
-// the iterators supplied by Dinkumware. Some input iterators may
-// compile-time if they arrive here, and if the compiler is strict
-// about not taking the address of an rvalue.
-
-// This one detects ordinary mutable iterators - the result of
-// operator* is convertible to the value_type.
-template <class T>
-type_traits::yes_type is_mutable_iterator_helper(T const*, BOOST_DEDUCED_TYPENAME T::value_type*);
-
-// Since you can't take the address of an rvalue, the guts of
-// is_mutable_iterator_impl will fail if we use &*t directly. This
-// makes sure we can still work with non-lvalue iterators.
-template <class T> T* mutable_iterator_lvalue_helper(T& x);
-int mutable_iterator_lvalue_helper(...);
-
-
-// This one detects output iterators such as ostream_iterator which
-// return references to themselves.
-template <class T>
-type_traits::yes_type is_mutable_iterator_helper(T const*, T const*);
-
-type_traits::no_type is_mutable_iterator_helper(...);
-
-template <class T>
-struct is_mutable_iterator_impl
-{
- static T t;
-
- BOOST_STATIC_CONSTANT(
- bool, value = sizeof(
- detail::is_mutable_iterator_helper(
- (T*)0
- , mutable_iterator_lvalue_helper(*t) // like &*t
- ))
- == sizeof(type_traits::yes_type)
- );
-};
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(
- is_mutable_iterator,T,::boost::detail::is_mutable_iterator_impl<T>::value)
-
-
-// is_full_iterator_traits --
-//
-// A metafunction returning true iff T has all the requisite nested
-// types to satisfy the requirements for a fully-conforming
-// iterator_traits implementation.
-template <class T>
-struct is_full_iterator_traits_impl
-{
- enum { value =
- has_value_type<T>::value
- & has_reference<T>::value
- & has_pointer<T>::value
- & has_difference_type<T>::value
- & has_iterator_category<T>::value
- };
-};
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(
- is_full_iterator_traits,T,::boost::detail::is_full_iterator_traits_impl<T>::value)
+#define ITERATOR_DWA122600_HPP_
+// This header is obsolete and will be deprecated.
-# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
-BOOST_MPL_HAS_XXX_TRAIT_DEF(_Iterator_category)
-
-// is_stlport_40_debug_iterator --
-//
-// A metafunction returning true iff T has all the requisite nested
-// types to satisfy the requirements of an STLPort 4.0 debug iterator
-// iterator_traits implementation.
-template <class T>
-struct is_stlport_40_debug_iterator_impl
-{
- enum { value =
- has_value_type<T>::value
- & has_reference<T>::value
- & has_pointer<T>::value
- & has_difference_type<T>::value
- & has__Iterator_category<T>::value
- };
-};
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(
- is_stlport_40_debug_iterator,T,::boost::detail::is_stlport_40_debug_iterator_impl<T>::value)
-
-template <class T>
-struct stlport_40_debug_iterator_traits
-{
- typedef typename T::value_type value_type;
- typedef typename T::reference reference;
- typedef typename T::pointer pointer;
- typedef typename T::difference_type difference_type;
- typedef typename T::_Iterator_category iterator_category;
-};
-# endif // BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
-
-template <class T> struct pointer_iterator_traits;
-
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-template <class T>
-struct pointer_iterator_traits<T*>
-{
- typedef typename remove_const<T>::type value_type;
- typedef T* pointer;
- typedef T& reference;
- typedef std::random_access_iterator_tag iterator_category;
- typedef std::ptrdiff_t difference_type;
-};
-# else
-
-// In case of no template partial specialization, and if T is a
-// pointer, iterator_traits<T>::value_type can still be computed. For
-// some basic types, remove_pointer is manually defined in
-// type_traits/broken_compiler_spec.hpp. For others, do it yourself.
-
-template<class P> class please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee;
-
-template<class P>
-struct pointer_value_type
- : mpl::if_<
- is_same<P, typename remove_pointer<P>::type>
- , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<P>
- , typename remove_const<
- typename remove_pointer<P>::type
- >::type
- >
-{
-};
-
-
-template<class P>
-struct pointer_reference
- : mpl::if_<
- is_same<P, typename remove_pointer<P>::type>
- , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<P>
- , typename remove_pointer<P>::type&
- >
-{
-};
-
-template <class T>
-struct pointer_iterator_traits
-{
- typedef T pointer;
- typedef std::random_access_iterator_tag iterator_category;
- typedef std::ptrdiff_t difference_type;
-
- typedef typename pointer_value_type<T>::type value_type;
- typedef typename pointer_reference<T>::type reference;
-};
-
-# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-// We'll sort iterator types into one of these classifications, from which we
-// can determine the difference_type, pointer, reference, and value_type
-template <class Iterator>
-struct standard_iterator_traits
-{
- typedef typename Iterator::difference_type difference_type;
- typedef typename Iterator::value_type value_type;
- typedef typename Iterator::pointer pointer;
- typedef typename Iterator::reference reference;
- typedef typename Iterator::iterator_category iterator_category;
-};
-
-template <class Iterator>
-struct msvc_stdlib_mutable_traits
- : std::iterator_traits<Iterator>
-{
- typedef typename std::iterator_traits<Iterator>::distance_type difference_type;
- typedef typename std::iterator_traits<Iterator>::value_type* pointer;
- typedef typename std::iterator_traits<Iterator>::value_type& reference;
-};
+#include <iterator>
-template <class Iterator>
-struct msvc_stdlib_const_traits
- : std::iterator_traits<Iterator>
+namespace boost
{
- typedef typename std::iterator_traits<Iterator>::distance_type difference_type;
- typedef const typename std::iterator_traits<Iterator>::value_type* pointer;
- typedef const typename std::iterator_traits<Iterator>::value_type& reference;
-};
-# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
-template <class Iterator>
-struct is_bad_output_iterator
- : is_base_and_derived<
- std::iterator<std::output_iterator_tag,void,void,void,void>
- , Iterator>
+namespace detail
{
-};
-struct bad_output_iterator_traits
-{
- typedef void value_type;
- typedef void difference_type;
- typedef std::output_iterator_tag iterator_category;
- typedef void pointer;
- typedef void reference;
-};
-# endif
-
-// If we're looking at an MSVC6 (old Dinkumware) ``standard''
-// iterator, this will generate an appropriate traits class.
-template <class Iterator>
-struct msvc_stdlib_iterator_traits
- : mpl::if_<
- is_mutable_iterator<Iterator>
- , msvc_stdlib_mutable_traits<Iterator>
- , msvc_stdlib_const_traits<Iterator>
- >::type
-{};
-
-template <class Iterator>
-struct non_pointer_iterator_traits
- : mpl::if_<
- // if the iterator contains all the right nested types...
- is_full_iterator_traits<Iterator>
- // Use a standard iterator_traits implementation
- , standard_iterator_traits<Iterator>
-# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
- // Check for STLPort 4.0 broken _Iterator_category type
- , mpl::if_<
- is_stlport_40_debug_iterator<Iterator>
- , stlport_40_debug_iterator_traits<Iterator>
-# endif
- // Otherwise, assume it's a Dinkum iterator
- , msvc_stdlib_iterator_traits<Iterator>
-# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
- >::type
-# endif
- >::type
-{
-};
-
-template <class Iterator>
-struct iterator_traits_aux
- : mpl::if_<
- is_pointer<Iterator>
- , pointer_iterator_traits<Iterator>
- , non_pointer_iterator_traits<Iterator>
- >::type
-{
-};
-
-template <class Iterator>
-struct iterator_traits
-{
- // Explicit forwarding from base class needed to keep MSVC6 happy
- // under some circumstances.
- private:
-# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
- typedef
- typename mpl::if_<
- is_bad_output_iterator<Iterator>
- , bad_output_iterator_traits
- , iterator_traits_aux<Iterator>
- >::type base;
-# else
- typedef iterator_traits_aux<Iterator> base;
-# endif
- public:
- typedef typename base::value_type value_type;
- typedef typename base::pointer pointer;
- typedef typename base::reference reference;
- typedef typename base::difference_type difference_type;
- typedef typename base::iterator_category iterator_category;
-};
-
-// This specialization cuts off ETI (Early Template Instantiation) for MSVC.
-template <> struct iterator_traits<int>
-{
- typedef int value_type;
- typedef int pointer;
- typedef int reference;
- typedef int difference_type;
- typedef int iterator_category;
-};
-
-}} // namespace boost::detail
-
-# endif // workarounds
-
-namespace boost { namespace detail {
-
-namespace iterator_traits_
-{
- template <class Iterator, class Difference>
- struct distance_select
- {
- static Difference execute(Iterator i1, const Iterator i2, ...)
- {
- Difference result = 0;
- while (i1 != i2)
- {
- ++i1;
- ++result;
- }
- return result;
- }
-
- static Difference execute(Iterator i1, const Iterator i2, std::random_access_iterator_tag*)
- {
- return i2 - i1;
- }
- };
-} // namespace boost::detail::iterator_traits_
-
-template <class Iterator>
-inline typename iterator_traits<Iterator>::difference_type
-distance(Iterator first, Iterator last)
-{
- typedef typename iterator_traits<Iterator>::difference_type diff_t;
- typedef typename ::boost::detail::iterator_traits<Iterator>::iterator_category iterator_category;
-
- return iterator_traits_::distance_select<Iterator,diff_t>::execute(
- first, last, (iterator_category*)0);
-}
-
-}}
-
-# endif
+using std::iterator_traits;
+using std::distance;
+} // namespace detail
-# undef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
-# undef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
+} // namespace boost
#endif // ITERATOR_DWA122600_HPP_
diff --git a/3party/boost/boost/detail/lightweight_test.hpp b/3party/boost/boost/detail/lightweight_test.hpp
index 49dd5e45d2..9fece8ab7e 100644
--- a/3party/boost/boost/detail/lightweight_test.hpp
+++ b/3party/boost/boost/detail/lightweight_test.hpp
@@ -1,208 +1,17 @@
-#ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED
-#define BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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)
+ */
-// MS compatible compilers support #pragma once
+#ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP
+#define BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-//
-// boost/detail/lightweight_test.hpp - lightweight test library
-//
-// Copyright (c) 2002, 2009 Peter Dimov
-// Copyright (2) Beman Dawes 2010, 2011
-// Copyright (3) Ion Gaztanaga 2013
-//
-// 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 expression is false increases the error count
-// and outputs a message containing 'expression'
-//
-// BOOST_TEST(expression)
-//
-// ---------------
-//
-// Increases error count and outputs a message containing 'message'
-//
-// BOOST_ERROR(message)
-//
-// ---------------
-//
-// If 'expr1' != 'expr2' increases the error count
-// and outputs a message containing both expressions
-//
-// BOOST_TEST_EQ(expr1, expr2)
-//
-// ---------------
-//
-// If 'expr1' == 'expr2' increases the error count
-// and outputs a message containing both expressions
-//
-// BOOST_TEST_NE(expr1, expr2)
-//
-// ---------------
-//
-// If BOOST_NO_EXCEPTIONS is NOT defined and if 'expr' does not
-// throw an exception of type 'excep', increases the error count
-// and outputs a message containing the expression.
-//
-// If BOOST_NO_EXCEPTIONS is defined, this macro expands to nothing
-// and 'expr' is not evaluated.
-//
-// BOOST_TEST_THROWS(expr, excep)
-//
-// ---------------
-//
-// Returns the error count
-//
-// int boost::report_errors()
-//
-
-#include <iostream>
-#include <boost/current_function.hpp>
-#include <boost/assert.hpp>
-#include <boost/detail/no_exceptions_support.hpp>
-
-// IDE's like Visual Studio perform better if output goes to std::cout or
-// some other stream, so allow user to configure output stream:
-#ifndef BOOST_LIGHTWEIGHT_TEST_OSTREAM
-# define BOOST_LIGHTWEIGHT_TEST_OSTREAM std::cerr
-#endif
-
-namespace boost
-{
-
-namespace detail
-{
-
-struct report_errors_reminder
-{
- bool called_report_errors_function;
- report_errors_reminder() : called_report_errors_function(false) {}
- ~report_errors_reminder()
- {
- BOOST_ASSERT(called_report_errors_function); // verify report_errors() was called
- }
-};
-
-inline report_errors_reminder& report_errors_remind()
-{
- static report_errors_reminder r;
- return r;
-}
-
-inline int & test_errors()
-{
- static int x = 0;
- report_errors_remind();
- return x;
-}
+// The header file at this path is deprecated;
+// use boost/core/lightweight_test.hpp instead.
-inline void test_failed_impl(char const * expr, char const * file, int line, char const * function)
-{
- BOOST_LIGHTWEIGHT_TEST_OSTREAM
- << file << "(" << line << "): test '" << expr << "' failed in function '"
- << function << "'" << std::endl;
- ++test_errors();
-}
+#include <boost/core/lightweight_test.hpp>
-inline void error_impl(char const * msg, char const * file, int line, char const * function)
-{
- BOOST_LIGHTWEIGHT_TEST_OSTREAM
- << file << "(" << line << "): " << msg << " in function '"
- << function << "'" << std::endl;
- ++test_errors();
-}
-
-inline void throw_failed_impl(char const * excep, char const * file, int line, char const * function)
-{
- BOOST_LIGHTWEIGHT_TEST_OSTREAM
- << file << "(" << line << "): Exception '" << excep << "' not thrown in function '"
- << function << "'" << std::endl;
- ++test_errors();
-}
-
-template<class T, class U> inline void test_eq_impl( char const * expr1, char const * expr2,
- char const * file, int line, char const * function, T const & t, U const & u )
-{
- if( t == u )
- {
- }
- else
- {
- BOOST_LIGHTWEIGHT_TEST_OSTREAM
- << file << "(" << line << "): test '" << expr1 << " == " << expr2
- << "' failed in function '" << function << "': "
- << "'" << t << "' != '" << u << "'" << std::endl;
- ++test_errors();
- }
-}
-
-template<class T, class U> inline void test_ne_impl( char const * expr1, char const * expr2,
- char const * file, int line, char const * function, T const & t, U const & u )
-{
- if( t != u )
- {
- }
- else
- {
- BOOST_LIGHTWEIGHT_TEST_OSTREAM
- << file << "(" << line << "): test '" << expr1 << " != " << expr2
- << "' failed in function '" << function << "': "
- << "'" << t << "' == '" << u << "'" << std::endl;
- ++test_errors();
- }
-}
-
-} // namespace detail
-
-inline int report_errors()
-{
- detail::report_errors_remind().called_report_errors_function = true;
-
- int errors = detail::test_errors();
-
- if( errors == 0 )
- {
- BOOST_LIGHTWEIGHT_TEST_OSTREAM
- << "No errors detected." << std::endl;
- return 0;
- }
- else
- {
- BOOST_LIGHTWEIGHT_TEST_OSTREAM
- << errors << " error" << (errors == 1? "": "s") << " detected." << std::endl;
- return 1;
- }
-}
-
-} // namespace boost
-
-#define BOOST_TEST(expr) ((expr)? (void)0: ::boost::detail::test_failed_impl(#expr, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))
-#define BOOST_ERROR(msg) ::boost::detail::error_impl(msg, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION)
-#define BOOST_TEST_EQ(expr1,expr2) ( ::boost::detail::test_eq_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )
-#define BOOST_TEST_NE(expr1,expr2) ( ::boost::detail::test_ne_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )
-#ifndef BOOST_NO_EXCEPTIONS
- #define BOOST_TEST_THROWS( EXPR, EXCEP ) \
- try { \
- EXPR; \
- ::boost::detail::throw_failed_impl \
- (#EXCEP, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); \
- } \
- catch(EXCEP const&) { \
- } \
- catch(...) { \
- ::boost::detail::throw_failed_impl \
- (#EXCEP, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); \
- } \
- //
-#else
- #define BOOST_TEST_THROWS( EXPR, EXCEP )
#endif
-
-#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED
diff --git a/3party/boost/boost/detail/limits.hpp b/3party/boost/boost/detail/limits.hpp
deleted file mode 100644
index 6f018dfaca..0000000000
--- a/3party/boost/boost/detail/limits.hpp
+++ /dev/null
@@ -1,449 +0,0 @@
-// Copyright 2001 John Maddock
-// Distributed under the Boost Software License, Version 1.0. (See accompany-
-// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is not portable code. Parts of numeric_limits<> are
- * inherently machine-dependent, and this file is written for the MIPS
- * architecture and the SGI MIPSpro C++ compiler. Parts of it (in
- * particular, some of the characteristics of floating-point types)
- * are almost certainly incorrect for any other platform.
- */
-
-/* The above comment is almost certainly out of date. This file works
- * on systems other than SGI MIPSpro C++ now.
- */
-
-/*
- * Revision history:
- * 21 Sep 2001:
- * Only include <cwchar> if BOOST_NO_CWCHAR is defined. (Darin Adler)
- * 10 Aug 2001:
- * Added MIPS (big endian) to the big endian family. (Jens Maurer)
- * 13 Apr 2001:
- * Added powerpc to the big endian family. (Jeremy Siek)
- * 5 Apr 2001:
- * Added sparc (big endian) processor support (John Maddock).
- * Initial sub:
- * Modified by Jens Maurer for gcc 2.95 on x86.
- */
-
-#ifndef BOOST_SGI_CPP_LIMITS
-#define BOOST_SGI_CPP_LIMITS
-
-#include <climits>
-#include <cfloat>
-#include <boost/config.hpp>
-#include <boost/detail/endian.hpp>
-
-#ifndef BOOST_NO_CWCHAR
-#include <cwchar> // for WCHAR_MIN and WCHAR_MAX
-#endif
-
-namespace std {
-
-enum float_round_style {
- round_indeterminate = -1,
- round_toward_zero = 0,
- round_to_nearest = 1,
- round_toward_infinity = 2,
- round_toward_neg_infinity = 3
-};
-
-enum float_denorm_style {
- denorm_indeterminate = -1,
- denorm_absent = 0,
- denorm_present = 1
-};
-
-// The C++ standard (section 18.2.1) requires that some of the members of
-// numeric_limits be static const data members that are given constant-
-// initializers within the class declaration. On compilers where the
-// BOOST_NO_INCLASS_MEMBER_INITIALIZATION macro is defined, it is impossible to write
-// a standard-conforming numeric_limits class.
-//
-// There are two possible workarounds: either initialize the data
-// members outside the class, or change them from data members to
-// enums. Neither workaround is satisfactory: the former makes it
-// impossible to use the data members in constant-expressions, and the
-// latter means they have the wrong type and that it is impossible to
-// take their addresses. We choose the former workaround.
-
-#ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
-# define BOOST_STL_DECLARE_LIMITS_MEMBER(__mem_type, __mem_name, __mem_value) \
- enum { __mem_name = __mem_value }
-#else /* BOOST_NO_INCLASS_MEMBER_INITIALIZATION */
-# define BOOST_STL_DECLARE_LIMITS_MEMBER(__mem_type, __mem_name, __mem_value) \
- static const __mem_type __mem_name = __mem_value
-#endif /* BOOST_NO_INCLASS_MEMBER_INITIALIZATION */
-
-// Base class for all specializations of numeric_limits.
-template <class __number>
-class _Numeric_limits_base {
-public:
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, false);
-
- static __number min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __number(); }
- static __number max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __number(); }
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits, 0);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, 0);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, false);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_integer, false);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_exact, false);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 0);
-
- static __number epsilon() throw() { return __number(); }
- static __number round_error() throw() { return __number(); }
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent, 0);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent10, 0);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent, 0);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent10, 0);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_infinity, false);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_quiet_NaN, false);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_signaling_NaN, false);
- BOOST_STL_DECLARE_LIMITS_MEMBER(float_denorm_style,
- has_denorm,
- denorm_absent);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_denorm_loss, false);
-
- static __number infinity() throw() { return __number(); }
- static __number quiet_NaN() throw() { return __number(); }
- static __number signaling_NaN() throw() { return __number(); }
- static __number denorm_min() throw() { return __number(); }
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_iec559, false);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, false);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_modulo, false);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, traps, false);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, tinyness_before, false);
- BOOST_STL_DECLARE_LIMITS_MEMBER(float_round_style,
- round_style,
- round_toward_zero);
-};
-
-// Base class for integers.
-
-template <class _Int,
- _Int __imin,
- _Int __imax,
- int __idigits = -1>
-class _Integer_limits : public _Numeric_limits_base<_Int>
-{
-public:
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, true);
-
- static _Int min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __imin; }
- static _Int max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __imax; }
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(int,
- digits,
- (__idigits < 0) ? (int)(sizeof(_Int) * CHAR_BIT)
- - (__imin == 0 ? 0 : 1)
- : __idigits);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, (digits * 301) / 1000);
- // log 2 = 0.301029995664...
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, __imin != 0);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_integer, true);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_exact, true);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 2);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, true);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_modulo, true);
-};
-
-#if defined(BOOST_BIG_ENDIAN)
-
- template<class Number, unsigned int Word>
- struct float_helper{
- static Number get_word() throw() {
- // sizeof(long double) == 16
- const unsigned int _S_word[4] = { Word, 0, 0, 0 };
- return *reinterpret_cast<const Number*>(&_S_word);
- }
-};
-
-#else
-
- template<class Number, unsigned int Word>
- struct float_helper{
- static Number get_word() throw() {
- // sizeof(long double) == 12, but only 10 bytes significant
- const unsigned int _S_word[4] = { 0, 0, 0, Word };
- return *reinterpret_cast<const Number*>(
- reinterpret_cast<const char *>(&_S_word)+16-
- (sizeof(Number) == 12 ? 10 : sizeof(Number)));
- }
-};
-
-#endif
-
-// Base class for floating-point numbers.
-template <class __number,
- int __Digits, int __Digits10,
- int __MinExp, int __MaxExp,
- int __MinExp10, int __MaxExp10,
- unsigned int __InfinityWord,
- unsigned int __QNaNWord, unsigned int __SNaNWord,
- bool __IsIEC559,
- float_round_style __RoundStyle>
-class _Floating_limits : public _Numeric_limits_base<__number>
-{
-public:
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, true);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits, __Digits);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, __Digits10);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, true);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 2);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent, __MinExp);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent, __MaxExp);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent10, __MinExp10);
- BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent10, __MaxExp10);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_infinity, true);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_quiet_NaN, true);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_signaling_NaN, true);
- BOOST_STL_DECLARE_LIMITS_MEMBER(float_denorm_style,
- has_denorm,
- denorm_indeterminate);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_denorm_loss, false);
-
-
- static __number infinity() throw() {
- return float_helper<__number, __InfinityWord>::get_word();
- }
- static __number quiet_NaN() throw() {
- return float_helper<__number,__QNaNWord>::get_word();
- }
- static __number signaling_NaN() throw() {
- return float_helper<__number,__SNaNWord>::get_word();
- }
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_iec559, __IsIEC559);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, true);
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, traps, false /* was: true */ );
- BOOST_STL_DECLARE_LIMITS_MEMBER(bool, tinyness_before, false);
-
- BOOST_STL_DECLARE_LIMITS_MEMBER(float_round_style, round_style, __RoundStyle);
-};
-
-// Class numeric_limits
-
-// The unspecialized class.
-
-template<class T>
-class numeric_limits : public _Numeric_limits_base<T> {};
-
-// Specializations for all built-in integral types.
-
-template<>
-class numeric_limits<bool>
- : public _Integer_limits<bool, false, true, 0>
-{};
-
-template<>
-class numeric_limits<char>
- : public _Integer_limits<char, CHAR_MIN, CHAR_MAX>
-{};
-
-template<>
-class numeric_limits<signed char>
- : public _Integer_limits<signed char, SCHAR_MIN, SCHAR_MAX>
-{};
-
-template<>
-class numeric_limits<unsigned char>
- : public _Integer_limits<unsigned char, 0, UCHAR_MAX>
-{};
-
-#ifndef BOOST_NO_INTRINSIC_WCHAR_T
-template<>
-class numeric_limits<wchar_t>
-#if !defined(WCHAR_MAX) || !defined(WCHAR_MIN)
-#if defined(_WIN32) || defined(__CYGWIN__)
- : public _Integer_limits<wchar_t, 0, USHRT_MAX>
-#elif defined(__hppa)
-// wchar_t has "unsigned int" as the underlying type
- : public _Integer_limits<wchar_t, 0, UINT_MAX>
-#else
-// assume that wchar_t has "int" as the underlying type
- : public _Integer_limits<wchar_t, INT_MIN, INT_MAX>
-#endif
-#else
-// we have WCHAR_MIN and WCHAR_MAX defined, so use it
- : public _Integer_limits<wchar_t, WCHAR_MIN, WCHAR_MAX>
-#endif
-{};
-#endif
-
-template<>
-class numeric_limits<short>
- : public _Integer_limits<short, SHRT_MIN, SHRT_MAX>
-{};
-
-template<>
-class numeric_limits<unsigned short>
- : public _Integer_limits<unsigned short, 0, USHRT_MAX>
-{};
-
-template<>
-class numeric_limits<int>
- : public _Integer_limits<int, INT_MIN, INT_MAX>
-{};
-
-template<>
-class numeric_limits<unsigned int>
- : public _Integer_limits<unsigned int, 0, UINT_MAX>
-{};
-
-template<>
-class numeric_limits<long>
- : public _Integer_limits<long, LONG_MIN, LONG_MAX>
-{};
-
-template<>
-class numeric_limits<unsigned long>
- : public _Integer_limits<unsigned long, 0, ULONG_MAX>
-{};
-
-#ifdef __GNUC__
-
-// Some compilers have long long, but don't define the
-// LONGLONG_MIN and LONGLONG_MAX macros in limits.h. This
-// assumes that long long is 64 bits.
-#if !defined(LONGLONG_MAX) && !defined(ULONGLONG_MAX)
-
-# define ULONGLONG_MAX 0xffffffffffffffffLLU
-# define LONGLONG_MAX 0x7fffffffffffffffLL
-
-#endif
-
-#if !defined(LONGLONG_MIN)
-# define LONGLONG_MIN (-LONGLONG_MAX - 1)
-#endif
-
-
-#if !defined(ULONGLONG_MIN)
-# define ULONGLONG_MIN 0
-#endif
-
-#endif /* __GNUC__ */
-
-// Specializations for all built-in floating-point type.
-
-template<> class numeric_limits<float>
- : public _Floating_limits<float,
- FLT_MANT_DIG, // Binary digits of precision
- FLT_DIG, // Decimal digits of precision
- FLT_MIN_EXP, // Minimum exponent
- FLT_MAX_EXP, // Maximum exponent
- FLT_MIN_10_EXP, // Minimum base 10 exponent
- FLT_MAX_10_EXP, // Maximum base 10 exponent
-#if defined(BOOST_BIG_ENDIAN)
- 0x7f80 << (sizeof(int)*CHAR_BIT-16), // Last word of +infinity
- 0x7f81 << (sizeof(int)*CHAR_BIT-16), // Last word of quiet NaN
- 0x7fc1 << (sizeof(int)*CHAR_BIT-16), // Last word of signaling NaN
-#else
- 0x7f800000u, // Last word of +infinity
- 0x7f810000u, // Last word of quiet NaN
- 0x7fc10000u, // Last word of signaling NaN
-#endif
- true, // conforms to iec559
- round_to_nearest>
-{
-public:
- static float min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return FLT_MIN; }
- static float denorm_min() throw() { return FLT_MIN; }
- static float max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return FLT_MAX; }
- static float epsilon() throw() { return FLT_EPSILON; }
- static float round_error() throw() { return 0.5f; } // Units: ulps.
-};
-
-template<> class numeric_limits<double>
- : public _Floating_limits<double,
- DBL_MANT_DIG, // Binary digits of precision
- DBL_DIG, // Decimal digits of precision
- DBL_MIN_EXP, // Minimum exponent
- DBL_MAX_EXP, // Maximum exponent
- DBL_MIN_10_EXP, // Minimum base 10 exponent
- DBL_MAX_10_EXP, // Maximum base 10 exponent
-#if defined(BOOST_BIG_ENDIAN)
- 0x7ff0 << (sizeof(int)*CHAR_BIT-16), // Last word of +infinity
- 0x7ff1 << (sizeof(int)*CHAR_BIT-16), // Last word of quiet NaN
- 0x7ff9 << (sizeof(int)*CHAR_BIT-16), // Last word of signaling NaN
-#else
- 0x7ff00000u, // Last word of +infinity
- 0x7ff10000u, // Last word of quiet NaN
- 0x7ff90000u, // Last word of signaling NaN
-#endif
- true, // conforms to iec559
- round_to_nearest>
-{
-public:
- static double min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return DBL_MIN; }
- static double denorm_min() throw() { return DBL_MIN; }
- static double max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return DBL_MAX; }
- static double epsilon() throw() { return DBL_EPSILON; }
- static double round_error() throw() { return 0.5; } // Units: ulps.
-};
-
-template<> class numeric_limits<long double>
- : public _Floating_limits<long double,
- LDBL_MANT_DIG, // Binary digits of precision
- LDBL_DIG, // Decimal digits of precision
- LDBL_MIN_EXP, // Minimum exponent
- LDBL_MAX_EXP, // Maximum exponent
- LDBL_MIN_10_EXP,// Minimum base 10 exponent
- LDBL_MAX_10_EXP,// Maximum base 10 exponent
-#if defined(BOOST_BIG_ENDIAN)
- 0x7ff0 << (sizeof(int)*CHAR_BIT-16), // Last word of +infinity
- 0x7ff1 << (sizeof(int)*CHAR_BIT-16), // Last word of quiet NaN
- 0x7ff9 << (sizeof(int)*CHAR_BIT-16), // Last word of signaling NaN
-#else
- 0x7fff8000u, // Last word of +infinity
- 0x7fffc000u, // Last word of quiet NaN
- 0x7fff9000u, // Last word of signaling NaN
-#endif
- false, // Doesn't conform to iec559
- round_to_nearest>
-{
-public:
- static long double min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return LDBL_MIN; }
- static long double denorm_min() throw() { return LDBL_MIN; }
- static long double max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return LDBL_MAX; }
- static long double epsilon() throw() { return LDBL_EPSILON; }
- static long double round_error() throw() { return 4; } // Units: ulps.
-};
-
-} // namespace std
-
-#endif /* BOOST_SGI_CPP_LIMITS */
-
-// Local Variables:
-// mode:C++
-// End:
-
-
-
diff --git a/3party/boost/boost/detail/no_exceptions_support.hpp b/3party/boost/boost/detail/no_exceptions_support.hpp
index d94e35834f..7d17454a73 100644
--- a/3party/boost/boost/detail/no_exceptions_support.hpp
+++ b/3party/boost/boost/detail/no_exceptions_support.hpp
@@ -1,87 +1,17 @@
-#ifndef BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP_
-#define BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP_
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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 _MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif
-
-//----------------------------------------------------------------------
-// (C) Copyright 2004 Pavel Vozenilek.
-// 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)
-//
-//
-// This file contains helper macros used when exception support may be
-// disabled (as indicated by macro BOOST_NO_EXCEPTIONS).
-//
-// Before picking up these macros you may consider using RAII techniques
-// to deal with exceptions - their syntax can be always the same with
-// or without exception support enabled.
-//
-
-/* Example of use:
-
-void foo() {
- BOOST_TRY {
- ...
- } BOOST_CATCH(const std::bad_alloc&) {
- ...
- BOOST_RETHROW
- } BOOST_CATCH(const std::exception& e) {
- ...
- }
- BOOST_CATCH_END
-}
-
-With exception support enabled it will expand into:
+#ifndef BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP
+#define BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP
-void foo() {
- { try {
- ...
- } catch (const std::bad_alloc&) {
- ...
- throw;
- } catch (const std::exception& e) {
- ...
- }
- }
-}
+// The header file at this path is deprecated;
+// use boost/core/no_exceptions_support.hpp instead.
-With exception support disabled it will expand into:
+#include <boost/core/no_exceptions_support.hpp>
-void foo() {
- { if(true) {
- ...
- } else if (false) {
- ...
- } else if (false) {
- ...
- }
- }
-}
-*/
-//----------------------------------------------------------------------
-
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-#if !(defined BOOST_NO_EXCEPTIONS)
-# define BOOST_TRY { try
-# define BOOST_CATCH(x) catch(x)
-# define BOOST_RETHROW throw;
-# define BOOST_CATCH_END }
-#else
-# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
-# define BOOST_TRY { if ("")
-# define BOOST_CATCH(x) else if (!"")
-# else
-# define BOOST_TRY { if (true)
-# define BOOST_CATCH(x) else if (false)
-# endif
-# define BOOST_RETHROW
-# define BOOST_CATCH_END }
#endif
-
-
-#endif
diff --git a/3party/boost/boost/detail/none_t.hpp b/3party/boost/boost/detail/none_t.hpp
deleted file mode 100644
index 40805ec0ff..0000000000
--- a/3party/boost/boost/detail/none_t.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
-//
-// 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)
-//
-// See http://www.boost.org/libs/optional for documentation.
-//
-// You are welcome to contact the author at:
-// fernando_cacciola@hotmail.com
-//
-#ifndef BOOST_DETAIL_NONE_T_17SEP2003_HPP
-#define BOOST_DETAIL_NONE_T_17SEP2003_HPP
-
-namespace boost {
-
-namespace detail {
-
-struct none_helper{};
-
-typedef int none_helper::*none_t ;
-
-} // namespace detail
-
-} // namespace boost
-
-#endif
-
diff --git a/3party/boost/boost/detail/numeric_traits.hpp b/3party/boost/boost/detail/numeric_traits.hpp
index 6325d70cb0..2f97ebf9c8 100644
--- a/3party/boost/boost/detail/numeric_traits.hpp
+++ b/3party/boost/boost/detail/numeric_traits.hpp
@@ -74,7 +74,7 @@ namespace boost { namespace detail {
template <class Number>
struct is_signed
{
-#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || defined(BOOST_MSVC) && BOOST_MSVC <= 1300
+#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
BOOST_STATIC_CONSTANT(bool, value = (Number(-1) < Number(0)));
#else
BOOST_STATIC_CONSTANT(bool, value = std::numeric_limits<Number>::is_signed);
@@ -128,15 +128,6 @@ namespace boost { namespace detail {
private:
typedef Integer integer_type;
typedef std::numeric_limits<integer_type> x;
-# if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
- // for some reason, MSVC asserts when it shouldn't unless we make these
- // local definitions
- BOOST_STATIC_CONSTANT(bool, is_integer = x::is_integer);
- BOOST_STATIC_CONSTANT(bool, is_specialized = x::is_specialized);
-
- BOOST_STATIC_ASSERT(is_integer);
- BOOST_STATIC_ASSERT(is_specialized);
-# endif
public:
typedef typename
if_true<(int(x::is_signed)
diff --git a/3party/boost/boost/detail/ob_call_traits.hpp b/3party/boost/boost/detail/ob_call_traits.hpp
deleted file mode 100644
index eb4df7a30f..0000000000
--- a/3party/boost/boost/detail/ob_call_traits.hpp
+++ /dev/null
@@ -1,168 +0,0 @@
-// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
-// Use, modification and distribution are subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt).
-//
-// See http://www.boost.org/libs/utility for most recent version including documentation.
-//
-// Crippled version for crippled compilers:
-// see libs/utility/call_traits.htm
-//
-
-/* Release notes:
- 01st October 2000:
- Fixed call_traits on VC6, using "poor man's partial specialisation",
- using ideas taken from "Generative programming" by Krzysztof Czarnecki
- & Ulrich Eisenecker.
-*/
-
-#ifndef BOOST_OB_CALL_TRAITS_HPP
-#define BOOST_OB_CALL_TRAITS_HPP
-
-#ifndef BOOST_CONFIG_HPP
-#include <boost/config.hpp>
-#endif
-
-#ifndef BOOST_ARITHMETIC_TYPE_TRAITS_HPP
-#include <boost/type_traits/arithmetic_traits.hpp>
-#endif
-#ifndef BOOST_COMPOSITE_TYPE_TRAITS_HPP
-#include <boost/type_traits/composite_traits.hpp>
-#endif
-
-namespace boost{
-
-#ifdef BOOST_MSVC6_MEMBER_TEMPLATES
-//
-// use member templates to emulate
-// partial specialisation:
-//
-namespace detail{
-
-template <class T>
-struct standard_call_traits
-{
- typedef T value_type;
- typedef T& reference;
- typedef const T& const_reference;
- typedef const T& param_type;
-};
-template <class T>
-struct simple_call_traits
-{
- typedef T value_type;
- typedef T& reference;
- typedef const T& const_reference;
- typedef const T param_type;
-};
-template <class T>
-struct reference_call_traits
-{
- typedef T value_type;
- typedef T reference;
- typedef T const_reference;
- typedef T param_type;
-};
-
-template <bool pointer, bool arithmetic, bool reference>
-struct call_traits_chooser
-{
- template <class T>
- struct rebind
- {
- typedef standard_call_traits<T> type;
- };
-};
-
-template <>
-struct call_traits_chooser<true, false, false>
-{
- template <class T>
- struct rebind
- {
- typedef simple_call_traits<T> type;
- };
-};
-
-template <>
-struct call_traits_chooser<false, false, true>
-{
- template <class T>
- struct rebind
- {
- typedef reference_call_traits<T> type;
- };
-};
-
-template <bool size_is_small>
-struct call_traits_sizeof_chooser2
-{
- template <class T>
- struct small_rebind
- {
- typedef simple_call_traits<T> small_type;
- };
-};
-
-template<>
-struct call_traits_sizeof_chooser2<false>
-{
- template <class T>
- struct small_rebind
- {
- typedef standard_call_traits<T> small_type;
- };
-};
-
-template <>
-struct call_traits_chooser<false, true, false>
-{
- template <class T>
- struct rebind
- {
- enum { sizeof_choice = (sizeof(T) <= sizeof(void*)) };
- typedef call_traits_sizeof_chooser2<(sizeof(T) <= sizeof(void*))> chooser;
- typedef typename chooser::template small_rebind<T> bound_type;
- typedef typename bound_type::small_type type;
- };
-};
-
-} // namespace detail
-template <typename T>
-struct call_traits
-{
-private:
- typedef detail::call_traits_chooser<
- ::boost::is_pointer<T>::value,
- ::boost::is_arithmetic<T>::value,
- ::boost::is_reference<T>::value
- > chooser;
- typedef typename chooser::template rebind<T> bound_type;
- typedef typename bound_type::type call_traits_type;
-public:
- typedef typename call_traits_type::value_type value_type;
- typedef typename call_traits_type::reference reference;
- typedef typename call_traits_type::const_reference const_reference;
- typedef typename call_traits_type::param_type param_type;
-};
-
-#else
-//
-// sorry call_traits is completely non-functional
-// blame your broken compiler:
-//
-
-template <typename T>
-struct call_traits
-{
- typedef T value_type;
- typedef T& reference;
- typedef const T& const_reference;
- typedef const T& param_type;
-};
-
-#endif // member templates
-
-}
-
-#endif // BOOST_OB_CALL_TRAITS_HPP
diff --git a/3party/boost/boost/detail/ob_compressed_pair.hpp b/3party/boost/boost/detail/ob_compressed_pair.hpp
index 727acab6da..326e454980 100644
--- a/3party/boost/boost/detail/ob_compressed_pair.hpp
+++ b/3party/boost/boost/detail/ob_compressed_pair.hpp
@@ -167,17 +167,6 @@ public:
compressed_pair_1(const ::boost::compressed_pair<T1,T2>& x)
: T2(x.second()), _first(x.first()) {}
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
- // Total weirdness. If the assignment to _first is moved after
- // the call to the inherited operator=, then this breaks graph/test/graph.cpp
- // by way of iterator_adaptor.
- compressed_pair_1& operator=(const compressed_pair_1& x) {
- _first = x._first;
- T2::operator=(x);
- return *this;
- }
-#endif
-
first_reference first() { return _first; }
first_const_reference first() const { return _first; }
diff --git a/3party/boost/boost/detail/reference_content.hpp b/3party/boost/boost/detail/reference_content.hpp
index daf56a8b19..36b80d244e 100644
--- a/3party/boost/boost/detail/reference_content.hpp
+++ b/3party/boost/boost/detail/reference_content.hpp
@@ -15,13 +15,8 @@
#include "boost/config.hpp"
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
# include "boost/mpl/bool.hpp"
# include "boost/type_traits/has_nothrow_copy.hpp"
-#else
-# include "boost/mpl/if.hpp"
-# include "boost/type_traits/is_reference.hpp"
-#endif
#include "boost/mpl/void.hpp"
@@ -78,7 +73,6 @@ public: // queries
template <typename T = mpl::void_> struct make_reference_content;
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename T>
struct make_reference_content
@@ -92,19 +86,6 @@ struct make_reference_content< T& >
typedef reference_content<T&> type;
};
-#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-template <typename T>
-struct make_reference_content
- : mpl::if_<
- is_reference<T>
- , reference_content<T>
- , T
- >
-{
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
template <>
struct make_reference_content< mpl::void_ >
@@ -124,7 +105,6 @@ struct make_reference_content< mpl::void_ >
// reference_content<T&> type traits specializations
//
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename T>
struct has_nothrow_copy<
@@ -134,7 +114,6 @@ struct has_nothrow_copy<
{
};
-#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
} // namespace boost
diff --git a/3party/boost/boost/detail/scoped_enum_emulation.hpp b/3party/boost/boost/detail/scoped_enum_emulation.hpp
index d266e0e33c..1c7bc23c1c 100644
--- a/3party/boost/boost/detail/scoped_enum_emulation.hpp
+++ b/3party/boost/boost/detail/scoped_enum_emulation.hpp
@@ -1,337 +1,17 @@
-// scoped_enum_emulation.hpp ---------------------------------------------------------//
-
-// Copyright Beman Dawes, 2009
-// Copyright (C) 2011-2012 Vicente J. Botet Escriba
-// Copyright (C) 2012 Anthony Williams
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
/*
-[section:scoped_enums Scoped Enums]
-
-Generates C++0x scoped enums if the feature is present, otherwise emulates C++0x
-scoped enums with C++03 namespaces and enums. The Boost.Config BOOST_NO_CXX11_SCOPED_ENUMS
-macro is used to detect feature support.
-
-See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf for a
-description of the scoped enum feature. Note that the committee changed the name
-from strongly typed enum to scoped enum.
-
-Some of the enumerations defined in the standard library are scoped enums.
-
- enum class future_errc
- {
- broken_promise,
- future_already_retrieved,
- promise_already_satisfied,
- no_state
- };
-
-On compilers that don't support them, the library provides two emulations:
-
-[heading Strict]
-
-* Able to specify the underlying type.
-* explicit conversion to/from underlying type.
-* The wrapper is not a C++03 enum type.
-
-The user can declare declare these types as
-
- BOOST_SCOPED_ENUM_DECLARE_BEGIN(future_errc)
- {
- broken_promise,
- future_already_retrieved,
- promise_already_satisfied,
- no_state
- }
- BOOST_SCOPED_ENUM_DECLARE_END(future_errc)
-
-These macros allows to use 'future_errc' in almost all the cases as an scoped enum.
-
- future_errc err = future_errc::no_state;
-
-There are however some limitations:
-
-* The type is not a C++ enum, so 'is_enum<future_errc>' will be false_type.
-* The emulated scoped enum can not be used in switch nor in template arguments. For these cases the user needs to use some macros.
-
-Instead of
-
- switch (ev)
- {
- case future_errc::broken_promise:
- // ...
-
-use
-
- switch (boost::native_value(ev))
- {
- case future_errc::broken_promise:
-
-And instead of
-
- #ifdef BOOST_NO_CXX11_SCOPED_ENUMS
- template <>
- struct BOOST_SYMBOL_VISIBLE is_error_code_enum<future_errc> : public true_type { };
- #endif
-
-use
-
- #ifdef BOOST_NO_CXX11_SCOPED_ENUMS
- template <>
- struct BOOST_SYMBOL_VISIBLE is_error_code_enum<future_errc::enum_type > : public true_type { };
- #endif
-
-
-Sample usage:
-
- BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(algae, char) { green, red, cyan }; BOOST_SCOPED_ENUM_DECLARE_END(algae)
- ...
- algae sample( algae::red );
- void foo( algae color );
- ...
- sample = algae::green;
- foo( algae::cyan );
-
- Light
- Caution: only the syntax is emulated; the semantics are not emulated and
- the syntax emulation doesn't include being able to specify the underlying
- representation type.
-
- The literal scoped emulation is via struct rather than namespace to allow use within classes.
- Thanks to Andrey Semashev for pointing that out.
- However the type is an real C++03 enum and so convertible implicitly to an int.
-
- Sample usage:
-
- BOOST_SCOPED_ENUM_START(algae) { green, red, cyan }; BOOST_SCOPED_ENUM_END
- ...
- BOOST_SCOPED_ENUM(algae) sample( algae::red );
- void foo( BOOST_SCOPED_ENUM(algae) color );
- ...
- sample = algae::green;
- foo( algae::cyan );
-
- Helpful comments and suggestions were also made by Kjell Elster, Phil Endecott,
- Joel Falcou, Mathias Gaunard, Felipe Magno de Almeida, Matt Calabrese, Vicente
- Botet, and Daniel James.
-
-[endsect]
-*/
-
-
-#ifndef BOOST_SCOPED_ENUM_EMULATION_HPP
-#define BOOST_SCOPED_ENUM_EMULATION_HPP
-
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-namespace boost
-{
-
-#ifdef BOOST_NO_CXX11_SCOPED_ENUMS
- /**
- * Meta-function to get the underlying type of a scoped enum.
- *
- * Requires EnumType must be an enum type or the emulation of a scoped enum
- */
- template <typename EnumType>
- struct underlying_type
- {
- /**
- * The member typedef type names the underlying type of EnumType. It is EnumType::underlying_type when the EnumType is an emulated scoped enum,
- * std::underlying_type<EnumType>::type when the standard library std::underlying_type is provided.
- *
- * The user will need to specialize it when the compiler supports scoped enums but don't provides std::underlying_type.
- */
- typedef typename EnumType::underlying_type type;
- };
-
- /**
- * Meta-function to get the native enum type associated to an enum class or its emulation.
- */
- template <typename EnumType>
- struct native_type
- {
- /**
- * The member typedef type names the native enum type associated to the scoped enum,
- * which is it self if the compiler supports scoped enums or EnumType::enum_type if it is an emulated scoped enum.
- */
- typedef typename EnumType::enum_type type;
- };
-
- /**
- * Casts a scoped enum to its underlying type.
- *
- * This function is useful when working with scoped enum classes, which doens't implicitly convert to the underlying type.
- * @param v A scoped enum.
- * @returns The underlying type.
- * @throws No-throws.
- */
- template <typename UnderlyingType, typename EnumType>
- UnderlyingType underlying_cast(EnumType v)
- {
- return v.get_underlying_value_();
- }
-
- /**
- * Casts a scoped enum to its native enum type.
- *
- * This function is useful to make programs portable when the scoped enum emulation can not be use where native enums can.
- *
- * EnumType the scoped enum type
- *
- * @param v A scoped enum.
- * @returns The native enum value.
- * @throws No-throws.
- */
- template <typename EnumType>
- inline
- typename EnumType::enum_type native_value(EnumType e)
- {
- return e.native_value_();
- }
-
-#else // BOOST_NO_CXX11_SCOPED_ENUMS
-
- template <typename EnumType>
- struct underlying_type
- {
- //typedef typename std::underlying_type<EnumType>::type type;
- };
-
- template <typename EnumType>
- struct native_type
- {
- typedef EnumType type;
- };
-
- template <typename UnderlyingType, typename EnumType>
- UnderlyingType underlying_cast(EnumType v)
- {
- return static_cast<UnderlyingType>(v);
- }
-
- template <typename EnumType>
- inline
- EnumType native_value(EnumType e)
- {
- return e;
- }
-
-#endif
-}
-
-
-#ifdef BOOST_NO_CXX11_SCOPED_ENUMS
-
-#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
-
-#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \
- explicit operator underlying_type() const { return get_underlying_value_(); }
-
-#else
-
-#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR
-
-#endif
-
-/**
- * Start a declaration of a scoped enum.
+ * Copyright (c) 2014 Andrey Semashev
*
- * @param EnumType The new scoped enum.
- * @param UnderlyingType The underlying type.
+ * 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)
*/
-#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType, UnderlyingType) \
- struct EnumType { \
- typedef UnderlyingType underlying_type; \
- EnumType() BOOST_NOEXCEPT {} \
- explicit EnumType(underlying_type v) : v_(v) {} \
- underlying_type get_underlying_value_() const { return v_; } \
- BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \
- private: \
- underlying_type v_; \
- typedef EnumType self_type; \
- public: \
- enum enum_type
-#define BOOST_SCOPED_ENUM_DECLARE_END2() \
- enum_type get_native_value_() const BOOST_NOEXCEPT { return enum_type(v_); } \
- operator enum_type() const BOOST_NOEXCEPT { return get_native_value_(); } \
- friend bool operator ==(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==enum_type(rhs.v_); } \
- friend bool operator ==(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==rhs; } \
- friend bool operator ==(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs==enum_type(rhs.v_); } \
- friend bool operator !=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=enum_type(rhs.v_); } \
- friend bool operator !=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=rhs; } \
- friend bool operator !=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs!=enum_type(rhs.v_); } \
- friend bool operator <(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<enum_type(rhs.v_); } \
- friend bool operator <(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<rhs; } \
- friend bool operator <(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<enum_type(rhs.v_); } \
- friend bool operator <=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=enum_type(rhs.v_); } \
- friend bool operator <=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=rhs; } \
- friend bool operator <=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<=enum_type(rhs.v_); } \
- friend bool operator >(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>enum_type(rhs.v_); } \
- friend bool operator >(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>rhs; } \
- friend bool operator >(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>enum_type(rhs.v_); } \
- friend bool operator >=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=enum_type(rhs.v_); } \
- friend bool operator >=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=rhs; } \
- friend bool operator >=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>=enum_type(rhs.v_); } \
- };
+#ifndef BOOST_DETAIL_SCOPED_ENUM_EMULATION_HPP
+#define BOOST_DETAIL_SCOPED_ENUM_EMULATION_HPP
-#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) \
- ; \
- EnumType(enum_type v) BOOST_NOEXCEPT : v_(v) {} \
- BOOST_SCOPED_ENUM_DECLARE_END2()
+// The header file at this path is deprecated;
+// use boost/core/scoped_enum.hpp instead.
-/**
- * Starts a declaration of a scoped enum with the default int underlying type.
- *
- * @param EnumType The new scoped enum.
- */
-#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) \
- BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,int)
+#include <boost/core/scoped_enum.hpp>
-/**
- * Name of the native enum type.
- *
- * @param NT The new scoped enum.
- */
-#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType::enum_type
-/**
- * Forward declares an scoped enum.
- *
- * @param NT The scoped enum.
- */
-#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) struct EnumType
-
-#else // BOOST_NO_CXX11_SCOPED_ENUMS
-
-#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,UnderlyingType) enum class EnumType:UnderlyingType
-#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) enum class EnumType
-#define BOOST_SCOPED_ENUM_DECLARE_END2()
-#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) ;
-
-#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType
-#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) enum class EnumType
-
-#endif // BOOST_NO_CXX11_SCOPED_ENUMS
-
-#define BOOST_SCOPED_ENUM_START(name) BOOST_SCOPED_ENUM_DECLARE_BEGIN(name)
-#define BOOST_SCOPED_ENUM_END BOOST_SCOPED_ENUM_DECLARE_END2()
-#define BOOST_SCOPED_ENUM(name) BOOST_SCOPED_ENUM_NATIVE(name)
-
-//#ifdef BOOST_NO_CXX11_SCOPED_ENUMS
-//
-//# define BOOST_SCOPED_ENUM_START(name) struct name { enum enum_type
-//# define BOOST_SCOPED_ENUM_END };
-//# define BOOST_SCOPED_ENUM(name) name::enum_type
-//
-//#else
-//
-//# define BOOST_SCOPED_ENUM_START(name) enum class name
-//# define BOOST_SCOPED_ENUM_END
-//# define BOOST_SCOPED_ENUM(name) name
-//
-//#endif
-#endif // BOOST_SCOPED_ENUM_EMULATION_HPP
+#endif
diff --git a/3party/boost/boost/detail/sp_typeinfo.hpp b/3party/boost/boost/detail/sp_typeinfo.hpp
index 43fae78ef1..4e4de55b05 100644
--- a/3party/boost/boost/detail/sp_typeinfo.hpp
+++ b/3party/boost/boost/detail/sp_typeinfo.hpp
@@ -9,104 +9,15 @@
// detail/sp_typeinfo.hpp
//
+// Deprecated, please use boost/core/typeinfo.hpp
+//
// Copyright 2007 Peter Dimov
//
-// Distributed under the Boost Software License, Version 1.0.
-// See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/config.hpp>
-
-#if defined( BOOST_NO_TYPEID )
-
-#include <boost/current_function.hpp>
-#include <functional>
-
-namespace boost
-{
-
-namespace detail
-{
-
-class sp_typeinfo
-{
-private:
-
- sp_typeinfo( sp_typeinfo const& );
- sp_typeinfo& operator=( sp_typeinfo const& );
-
- char const * name_;
-
-public:
-
- explicit sp_typeinfo( char const * name ): name_( name )
- {
- }
-
- bool operator==( sp_typeinfo const& rhs ) const
- {
- return this == &rhs;
- }
-
- bool operator!=( sp_typeinfo const& rhs ) const
- {
- return this != &rhs;
- }
-
- bool before( sp_typeinfo const& rhs ) const
- {
- return std::less< sp_typeinfo const* >()( this, &rhs );
- }
-
- char const* name() const
- {
- return name_;
- }
-};
-
-template<class T> struct sp_typeid_
-{
- static sp_typeinfo ti_;
-
- static char const * name()
- {
- return BOOST_CURRENT_FUNCTION;
- }
-};
+// 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(__SUNPRO_CC)
-// see #4199, the Sun Studio compiler gets confused about static initialization
-// constructor arguments. But an assignment works just fine.
-template<class T> sp_typeinfo sp_typeid_< T >::ti_ = sp_typeid_< T >::name();
-#else
-template<class T> sp_typeinfo sp_typeid_< T >::ti_(sp_typeid_< T >::name());
-#endif
-
-template<class T> struct sp_typeid_< T & >: sp_typeid_< T >
-{
-};
-
-template<class T> struct sp_typeid_< T const >: sp_typeid_< T >
-{
-};
-
-template<class T> struct sp_typeid_< T volatile >: sp_typeid_< T >
-{
-};
-
-template<class T> struct sp_typeid_< T const volatile >: sp_typeid_< T >
-{
-};
-
-} // namespace detail
-
-} // namespace boost
-
-#define BOOST_SP_TYPEID(T) (boost::detail::sp_typeid_<T>::ti_)
-
-#else
-
-#include <typeinfo>
+#include <boost/core/typeinfo.hpp>
namespace boost
{
@@ -114,22 +25,12 @@ namespace boost
namespace detail
{
-#if defined( BOOST_NO_STD_TYPEINFO )
-
-typedef ::type_info sp_typeinfo;
-
-#else
-
-typedef std::type_info sp_typeinfo;
-
-#endif
+typedef boost::core::typeinfo sp_typeinfo;
} // namespace detail
} // namespace boost
-#define BOOST_SP_TYPEID(T) typeid(T)
-
-#endif
+#define BOOST_SP_TYPEID(T) BOOST_CORE_TYPEID(T)
#endif // #ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED
diff --git a/3party/boost/boost/detail/utf8_codecvt_facet.hpp b/3party/boost/boost/detail/utf8_codecvt_facet.hpp
index b777ff934e..753b339336 100644
--- a/3party/boost/boost/detail/utf8_codecvt_facet.hpp
+++ b/3party/boost/boost/detail/utf8_codecvt_facet.hpp
@@ -122,9 +122,13 @@ protected:
) const;
virtual std::codecvt_base::result do_out(
- std::mbstate_t & state, const wchar_t * from,
- const wchar_t * from_end, const wchar_t* & from_next,
- char * to, char * to_end, char * & to_next
+ std::mbstate_t & state,
+ const wchar_t * from,
+ const wchar_t * from_end,
+ const wchar_t* & from_next,
+ char * to,
+ char * to_end,
+ char * & to_next
) const;
bool invalid_continuing_octet(unsigned char octet_1) const {
@@ -137,17 +141,19 @@ protected:
}
// continuing octets = octets except for the leading octet
- static unsigned int get_cont_octet_count(unsigned char lead_octet) {
+ static unsigned int get_cont_octet_count(unsigned char lead_octet) {
return get_octet_count(lead_octet) - 1;
}
- static unsigned int get_octet_count(unsigned char lead_octet);
+ static unsigned int get_octet_count(unsigned char lead_octet);
// How many "continuing octets" will be needed for this word
// == total octets - 1.
int get_cont_octet_out_count(wchar_t word) const ;
- virtual bool do_always_noconv() const throw() { return false; }
+ virtual bool do_always_noconv() const BOOST_NOEXCEPT_OR_NOTHROW {
+ return false;
+ }
// UTF-8 isn't really stateful since we rewind on partial conversions
virtual std::codecvt_base::result do_unshift(
@@ -155,13 +161,12 @@ protected:
char * from,
char * /*to*/,
char * & next
- ) const
- {
+ ) const {
next = from;
return ok;
}
- virtual int do_encoding() const throw() {
+ virtual int do_encoding() const BOOST_NOEXCEPT_OR_NOTHROW {
const int variable_byte_external_encoding=0;
return variable_byte_external_encoding;
}
@@ -173,14 +178,10 @@ protected:
const char * from,
const char * from_end,
std::size_t max_limit
-#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
- ) const throw();
-#else
- ) const;
-#endif
+ ) const;
// Largest possible value do_length(state,from,from_end,1) could return.
- virtual int do_max_length() const throw () {
+ virtual int do_max_length() const BOOST_NOEXCEPT_OR_NOTHROW {
return 6; // largest UTF-8 encoding of a UCS-4 character
}
};
diff --git a/3party/boost/boost/detail/utf8_codecvt_facet.ipp b/3party/boost/boost/detail/utf8_codecvt_facet.ipp
index 064fdaf58e..8a13124657 100644
--- a/3party/boost/boost/detail/utf8_codecvt_facet.ipp
+++ b/3party/boost/boost/detail/utf8_codecvt_facet.ipp
@@ -171,14 +171,13 @@ std::codecvt_base::result utf8_codecvt_facet::do_out(
// How many char objects can I process to get <= max_limit
// wchar_t objects?
int utf8_codecvt_facet::do_length(
- BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &,
+ const std::mbstate_t &,
const char * from,
const char * from_end,
std::size_t max_limit
-#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
-) const throw()
-#else
) const
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+ throw()
#endif
{
// RG - this code is confusing! I need a better way to express it.
diff --git a/3party/boost/boost/detail/win/GetCurrentProcess.hpp b/3party/boost/boost/detail/win/GetCurrentProcess.hpp
deleted file mode 100644
index a76eb06e8f..0000000000
--- a/3party/boost/boost/detail/win/GetCurrentProcess.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// GetCurrentProcess.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_GETCURRENTPROCESS_HPP
-#define BOOST_DETAIL_WIN_GETCURRENTPROCESS_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( BOOST_USE_WINDOWS_H )
- using ::GetCurrentProcess;
-#else
- extern "C" __declspec(dllimport) HANDLE_ WINAPI GetCurrentProcess();
-#endif
-}
-}
-}
-#endif // BOOST_DETAIL_WIN_TIME_HPP
diff --git a/3party/boost/boost/detail/win/GetCurrentThread.hpp b/3party/boost/boost/detail/win/GetCurrentThread.hpp
deleted file mode 100644
index cdc6d36c78..0000000000
--- a/3party/boost/boost/detail/win/GetCurrentThread.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// GetCurrentThread.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_GETCURRENTTHREAD_HPP
-#define BOOST_DETAIL_WIN_GETCURRENTTHREAD_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( UNDER_CE )
-// Windows CE define GetCurrentThread as an inline function in kfuncs.h
-inline HANDLE_ GetCurrentThread()
-{
- return ::GetCurrentThread();
-}
-#else
-#if defined( BOOST_USE_WINDOWS_H )
- using ::GetCurrentThread;
-#else
- extern "C" __declspec(dllimport) HANDLE_ WINAPI GetCurrentThread();
-#endif
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_TIME_HPP
diff --git a/3party/boost/boost/detail/win/GetLastError.hpp b/3party/boost/boost/detail/win/GetLastError.hpp
deleted file mode 100644
index d040abf50d..0000000000
--- a/3party/boost/boost/detail/win/GetLastError.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// GetLastError.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_GETLASTERROR_HPP
-#define BOOST_DETAIL_WIN_GETLASTERROR_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( BOOST_USE_WINDOWS_H )
- using ::GetLastError;
-#else
- extern "C" __declspec(dllimport) DWORD_ WINAPI
- GetLastError();
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_TIME_HPP
diff --git a/3party/boost/boost/detail/win/GetProcessTimes.hpp b/3party/boost/boost/detail/win/GetProcessTimes.hpp
deleted file mode 100644
index 8d76995893..0000000000
--- a/3party/boost/boost/detail/win/GetProcessTimes.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// GetProcessTimes.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_GETPROCESSTIMES_HPP
-#define BOOST_DETAIL_WIN_GETPROCESSTIMES_HPP
-
-#include <boost/detail/win/time.hpp>
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if !defined(UNDER_CE) // Windows CE does not define GetProcessTimes
-#if defined( BOOST_USE_WINDOWS_H )
- using ::GetProcessTimes;
-#else
- extern "C" __declspec(dllimport) BOOL_ WINAPI
- GetProcessTimes(
- HANDLE_ hProcess,
- LPFILETIME_ lpCreationTime,
- LPFILETIME_ lpExitTime,
- LPFILETIME_ lpKernelTime,
- LPFILETIME_ lpUserTime
- );
-#endif
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_GETPROCESSTIMES_HPP
diff --git a/3party/boost/boost/detail/win/GetThreadTimes.hpp b/3party/boost/boost/detail/win/GetThreadTimes.hpp
deleted file mode 100644
index cf19c462ed..0000000000
--- a/3party/boost/boost/detail/win/GetThreadTimes.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// GetThreadTimes.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_GETTHREADTIMES_HPP
-#define BOOST_DETAIL_WIN_GETTHREADTIMES_HPP
-
-#include <boost/detail/win/time.hpp>
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( BOOST_USE_WINDOWS_H )
- using ::GetThreadTimes;
-#else
- extern "C" __declspec(dllimport) BOOL_ WINAPI
- GetThreadTimes(
- HANDLE_ hThread,
- LPFILETIME_ lpCreationTime,
- LPFILETIME_ lpExitTime,
- LPFILETIME_ lpKernelTime,
- LPFILETIME_ lpUserTime
- );
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_GETTHREADTIMES_HPP
diff --git a/3party/boost/boost/detail/win/LocalFree.hpp b/3party/boost/boost/detail/win/LocalFree.hpp
deleted file mode 100644
index da1c77b669..0000000000
--- a/3party/boost/boost/detail/win/LocalFree.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// LocalFree.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_LOCALFREE_HPP
-#define BOOST_DETAIL_WIN_LOCALFREE_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( BOOST_USE_WINDOWS_H )
- typedef HANDLE_ HLOCAL_;
-
- using ::LocalFree;
-#else
- extern "C" typedef HANDLE_ HLOCAL_;
- extern "C" __declspec(dllimport) HLOCAL_ WINAPI
- LocalFree(HLOCAL_ hMem);
-#endif
-}
-}
-}
-#endif // BOOST_DETAIL_WIN_LOCALFREE_HPP
diff --git a/3party/boost/boost/detail/win/basic_types.hpp b/3party/boost/boost/detail/win/basic_types.hpp
deleted file mode 100644
index f4e34721cf..0000000000
--- a/3party/boost/boost/detail/win/basic_types.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-// basic_types.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_BASIC_TYPES_HPP
-#define BOOST_DETAIL_WIN_BASIC_TYPES_HPP
-#include <boost/config.hpp>
-#include <cstdarg>
-#include <boost/cstdint.hpp>
-#if defined( BOOST_USE_WINDOWS_H )
-# include <windows.h>
-#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined(__CYGWIN__)
-# include <WinError.h>
-// @FIXME Which condition must be tested
-# ifdef UNDER_CE
-# ifndef WINAPI
-# ifndef _WIN32_WCE_EMULATION
-# define WINAPI __cdecl // Note this doesn't match the desktop definition
-# else
-# define WINAPI __stdcall
-# endif
-# endif
-# else
-# ifndef WINAPI
-# define WINAPI __stdcall
-# endif
-# endif
-#else
-# error "Win32 functions not available"
-#endif
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( BOOST_USE_WINDOWS_H )
- typedef ::BOOL BOOL_;
- typedef ::WORD WORD_;
- typedef ::DWORD DWORD_;
- typedef ::HANDLE HANDLE_;
- typedef ::LONG LONG_;
- typedef ::LONGLONG LONGLONG_;
- typedef ::ULONG_PTR ULONG_PTR_;
- typedef ::LARGE_INTEGER LARGE_INTEGER_;
- typedef ::PLARGE_INTEGER PLARGE_INTEGER_;
- typedef ::PVOID PVOID_;
- typedef ::LPVOID LPVOID_;
- typedef ::CHAR CHAR_;
- typedef ::LPSTR LPSTR_;
- typedef ::LPCSTR LPCSTR_;
- typedef ::WCHAR WCHAR_;
- typedef ::LPWSTR LPWSTR_;
- typedef ::LPCWSTR LPCWSTR_;
-#else
-extern "C" {
- typedef int BOOL_;
- typedef unsigned short WORD_;
- typedef unsigned long DWORD_;
- typedef void* HANDLE_;
-
- typedef long LONG_;
-
-// @FIXME Which condition must be tested
-//~ #if !defined(_M_IX86)
-//~ #if defined(BOOST_NO_INT64_T)
- //~ typedef double LONGLONG_;
-//~ #else
- //~ typedef __int64 LONGLONG_;
-//~ #endif
-//~ #else
- //~ typedef double LONGLONG_;
-//~ #endif
- typedef boost::int64_t LONGLONG_;
-
-// @FIXME Which condition must be tested
-# ifdef _WIN64
-#if defined(__CYGWIN__)
- typedef unsigned long ULONG_PTR_;
-#else
- typedef unsigned __int64 ULONG_PTR_;
-#endif
-# else
- typedef unsigned long ULONG_PTR_;
-# endif
-
- typedef struct _LARGE_INTEGER {
- LONGLONG_ QuadPart;
- } LARGE_INTEGER_;
- typedef LARGE_INTEGER_ *PLARGE_INTEGER_;
-
- typedef void *PVOID_;
- typedef void *LPVOID_;
- typedef const void *LPCVOID_;
-
- typedef char CHAR_;
- typedef CHAR_ *LPSTR_;
- typedef const CHAR_ *LPCSTR_;
-
- typedef wchar_t WCHAR_;
- typedef WCHAR_ *LPWSTR_;
- typedef const WCHAR_ *LPCWSTR_;
-
-}
-#endif
-}
-}
-}
-#endif // BOOST_DETAIL_WIN_TIME_HPP
diff --git a/3party/boost/boost/detail/win/directory_management.hpp b/3party/boost/boost/detail/win/directory_management.hpp
deleted file mode 100644
index 1ffe659766..0000000000
--- a/3party/boost/boost/detail/win/directory_management.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// directory_management.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_DIRECTORY_MANAGEMENT_HPP
-#define BOOST_DETAIL_WIN_DIRECTORY_MANAGEMENT_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-#include <boost/detail/win/security.hpp>
-
-namespace boost
-{
-namespace detail
-{
-namespace win32
-{
-#if defined( BOOST_USE_WINDOWS_H )
- using ::CreateDirectory;
- using ::CreateDirectoryA;
- using ::GetTempPathA;
- using ::RemoveDirectoryA;
-#else
-extern "C" {
- __declspec(dllimport) int __stdcall
- CreateDirectory(LPCTSTR_, LPSECURITY_ATTRIBUTES_*);
- __declspec(dllimport) int __stdcall
- CreateDirectoryA(LPCTSTR_, interprocess_security_attributes*);
- __declspec(dllimport) int __stdcall
- GetTempPathA(unsigned long length, char *buffer);
- __declspec(dllimport) int __stdcall
- RemoveDirectoryA(LPCTSTR_);
-
-}
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_THREAD_HPP
diff --git a/3party/boost/boost/detail/win/dll.hpp b/3party/boost/boost/detail/win/dll.hpp
deleted file mode 100644
index 605a1bf596..0000000000
--- a/3party/boost/boost/detail/win/dll.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-// dll.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_DLL_HPP
-#define BOOST_DETAIL_WIN_DLL_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-#include <boost/detail/win/security.hpp>
-
-namespace boost
-{
-namespace detail
-{
-namespace win32
-{
-#if defined( BOOST_USE_WINDOWS_H )
- using ::LoadLibrary;
- using ::FreeLibrary;
- using ::GetProcAddress;
- using ::GetModuleHandleA;
-#else
-extern "C" {
- __declspec(dllimport) HMODULE_ __stdcall
- LoadLibrary(
- LPCTSTR_ lpFileName
- );
- __declspec(dllimport) BOOL_ __stdcall
- FreeLibrary(
- HMODULE_ hModule
- );
- __declspec(dllimport) FARPROC_ __stdcall
- GetProcAddress(
- HMODULE_ hModule,
- LPCSTR_ lpProcName
- );
- __declspec(dllimport) FARPROC_ __stdcall
- GetModuleHandleA(
- LPCSTR_ lpProcName
- );
-
-}
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_THREAD_HPP
diff --git a/3party/boost/boost/detail/win/error_handling.hpp b/3party/boost/boost/detail/win/error_handling.hpp
deleted file mode 100644
index d6fb428a76..0000000000
--- a/3party/boost/boost/detail/win/error_handling.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-// error_handling.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_ERROR_HANDLING_HPP
-#define BOOST_DETAIL_WIN_ERROR_HANDLING_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-#include <boost/detail/win/GetCurrentThread.hpp>
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( BOOST_USE_WINDOWS_H )
- using ::FormatMessageA;
- using ::FormatMessageW;
-
- const int FORMAT_MESSAGE_ALLOCATE_BUFFER_= FORMAT_MESSAGE_ALLOCATE_BUFFER;
- const int FORMAT_MESSAGE_IGNORE_INSERTS_= FORMAT_MESSAGE_IGNORE_INSERTS;
- const int FORMAT_MESSAGE_FROM_STRING_= FORMAT_MESSAGE_FROM_STRING;
- const int FORMAT_MESSAGE_FROM_HMODULE_= FORMAT_MESSAGE_FROM_HMODULE;
- const int FORMAT_MESSAGE_FROM_SYSTEM_= FORMAT_MESSAGE_FROM_SYSTEM;
- const int FORMAT_MESSAGE_ARGUMENT_ARRAY_= FORMAT_MESSAGE_ARGUMENT_ARRAY;
- const int FORMAT_MESSAGE_MAX_WIDTH_MASK_= FORMAT_MESSAGE_MAX_WIDTH_MASK;
-
- const char LANG_NEUTRAL_= LANG_NEUTRAL;
- const char LANG_INVARIANT_= LANG_INVARIANT;
-
- const char SUBLANG_DEFAULT_= SUBLANG_DEFAULT; // user default
- inline WORD_ MAKELANGID_(WORD_ p, WORD_ s) {
- return MAKELANGID(p,s);
- }
-#else
-extern "C" {
- // using ::FormatMessageA;
- __declspec(dllimport)
- DWORD_
- WINAPI
- FormatMessageA(
- DWORD_ dwFlags,
- LPCVOID_ lpSource,
- DWORD_ dwMessageId,
- DWORD_ dwLanguageId,
- LPSTR_ lpBuffer,
- DWORD_ nSize,
- va_list *Arguments
- );
-
- // using ::FormatMessageW;
- __declspec(dllimport)
- DWORD_
- WINAPI
- FormatMessageW(
- DWORD_ dwFlags,
- LPCVOID_ lpSource,
- DWORD_ dwMessageId,
- DWORD_ dwLanguageId,
- LPWSTR_ lpBuffer,
- DWORD_ nSize,
- va_list *Arguments
- );
-
- const int FORMAT_MESSAGE_ALLOCATE_BUFFER_= 0x00000100;
- const int FORMAT_MESSAGE_IGNORE_INSERTS_= 0x00000200;
- const int FORMAT_MESSAGE_FROM_STRING_= 0x00000400;
- const int FORMAT_MESSAGE_FROM_HMODULE_= 0x00000800;
- const int FORMAT_MESSAGE_FROM_SYSTEM_= 0x00001000;
- const int FORMAT_MESSAGE_ARGUMENT_ARRAY_= 0x00002000;
- const int FORMAT_MESSAGE_MAX_WIDTH_MASK_= 0x000000FF;
-
- const char LANG_NEUTRAL_= 0x00;
- const char LANG_INVARIANT_= 0x7f;
-
- const char SUBLANG_DEFAULT_= 0x01; // user default
- inline WORD_ MAKELANGID_(WORD_ p, WORD_ s) {
- return ((((WORD_ )(s)) << 10) | (WORD_ )(p));
- }
-
-}
-#endif
-}
-}
-}
-#endif // BOOST_DETAIL_WIN_ERROR_HANDLING_HPP
diff --git a/3party/boost/boost/detail/win/file_management.hpp b/3party/boost/boost/detail/win/file_management.hpp
deleted file mode 100644
index 5cb0dbff29..0000000000
--- a/3party/boost/boost/detail/win/file_management.hpp
+++ /dev/null
@@ -1,126 +0,0 @@
-// thread.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_FILE_MANAGEMENT_HPP
-#define BOOST_DETAIL_WIN_FILE_MANAGEMENT_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-#include <boost/detail/win/security.hpp>
-
-namespace boost
-{
-namespace detail
-{
-namespace win32
-{
-#if defined( BOOST_USE_WINDOWS_H )
- using ::CreateFileA;
- using ::DeleteFileA;
- using ::FindFirstFileA;
- using ::FindNextFileA;
- using ::FindClose;
- using ::GetFileSizeEx;
- using ::MoveFileExA;
- using ::SetFileValidData;
-#else
-extern "C" {
- typedef struct _OVERLAPPED {
- ULONG_PTR Internal;
- ULONG_PTR InternalHigh;
- union {
- struct {
- DWORD Offset;
- DWORD OffsetHigh;
- } ;
- PVOID Pointer;
- } ;
- HANDLE hEvent;
- } OVERLAPPED, *LPOVERLAPPED;
-
-
- __declspec(dllimport) void * __stdcall
- CreateFileA (const char *, unsigned long, unsigned long, struct SECURITY_ATTRIBUTES_*, unsigned long, unsigned long, void *);
- __declspec(dllimport) int __stdcall
- DeleteFileA (const char *);
- __declspec(dllimport) void *__stdcall
- FindFirstFileA(const char *lpFileName, win32_find_data_t *lpFindFileData);
- __declspec(dllimport) int __stdcall
- FindNextFileA(void *hFindFile, win32_find_data_t *lpFindFileData);
- __declspec(dllimport) int __stdcall
- FindClose(void *hFindFile);
- __declspec(dllimport) BOOL __stdcall
- GetFileSizeEx(
- HANDLE_ hFile,
- PLARGE_INTEGER_ lpFileSize
- );
- __declspec(dllimport) int __stdcall
- MoveFileExA (const char *, const char *, unsigned long);
- __declspec(dllimport) BOOL_ __stdcall
- SetFileValidData(
- HANDLE_ hFile,
- LONGLONG_ ValidDataLength
- );
- __declspec(dllimport) BOOL_ __stdcall
- SetEndOfFile(
- HANDLE_ hFile
- );
- __declspec(dllimport) BOOL_ __stdcall
- SetFilePointerEx(
- HANDLE_ hFile,
- LARGE_INTEGER_ liDistanceToMove,
- PLARGE_INTEGER_ lpNewFilePointer,
- DWORD_ dwMoveMethod
- );
- __declspec(dllimport) BOOL_ __stdcall
- LockFile(
- HANDLE_ hFile,
- DWORD_ dwFileOffsetLow,
- DWORD_ dwFileOffsetHigh,
- DWORD_ nNumberOfBytesToLockLow,
- DWORD_ nNumberOfBytesToLockHigh
- );
- __declspec(dllimport) BOOL_ __stdcall
- UnlockFile(
- HANDLE_ hFile,
- DWORD_ dwFileOffsetLow,
- DWORD_ dwFileOffsetHigh,
- DWORD_ nNumberOfBytesToUnlockLow,
- DWORD_ nNumberOfBytesToUnlockHigh
- );
- __declspec(dllimport) BOOL_ __stdcall
- LockFileEx(
- HANDLE_ hFile,
- DWORD_ dwFlags,
- DWORD_ dwReserved,
- DWORD_ nNumberOfBytesToLockLow,
- DWORD_ nNumberOfBytesToLockHigh,
- LPOVERLAPPED_ lpOverlapped
- );
- __declspec(dllimport) BOOL_ __stdcall
- UnlockFileEx(
- HANDLE_ hFile,
- DWORD_ dwReserved,
- DWORD_ nNumberOfBytesToUnlockLow,
- DWORD_ nNumberOfBytesToUnlockHigh,
- LPOVERLAPPED_ lpOverlapped
- );
- __declspec(dllimport) BOOL_ __stdcall
- WriteFile(
- HANDLE_ hFile,
- LPCVOID_ lpBuffer,
- DWORD_ nNumberOfBytesToWrite,
- LPDWORD_ lpNumberOfBytesWritten,
- LPOVERLAPPED_ lpOverlapped
- );
-}
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_THREAD_HPP
diff --git a/3party/boost/boost/detail/win/handles.hpp b/3party/boost/boost/detail/win/handles.hpp
deleted file mode 100644
index 1441d10a2c..0000000000
--- a/3party/boost/boost/detail/win/handles.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-// memory.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_HANDLES_HPP
-#define BOOST_DETAIL_WIN_HANDLES_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-
-
-namespace boost
-{
-namespace detail
-{
-namespace win32
-{
-#if defined( BOOST_USE_WINDOWS_H )
- using ::CloseHandle;
- using ::DuplicateHandle;
-#else
-extern "C" {
- __declspec(dllimport) int __stdcall
- CloseHandle(void*);
- __declspec(dllimport) int __stdcall
- DuplicateHandle(void*,void*,void*,void**,unsigned long,int,unsigned long);
-}
-
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_HANDLES_HPP
diff --git a/3party/boost/boost/detail/win/memory.hpp b/3party/boost/boost/detail/win/memory.hpp
deleted file mode 100644
index 8bf59ad87e..0000000000
--- a/3party/boost/boost/detail/win/memory.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// memory.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_MEMORY_HPP
-#define BOOST_DETAIL_WIN_MEMORY_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-#include <boost/detail/win/security.hpp>
-#include <boost/detail/win/LocalFree.hpp>
-
-
-namespace boost
-{
-namespace detail
-{
-namespace win32
-{
-#if defined( BOOST_USE_WINDOWS_H )
- using ::CreateFileMappingA;
- using ::FlushViewOfFile;
- using ::GetProcessHeap;
- using ::HeapAlloc;
- using ::HeapFree;
- using ::MapViewOfFileEx;
- using ::OpenFileMappingA;
- using ::UnmapViewOfFile;
-#else
-# ifdef HeapAlloc
-# undef HeapAlloc
-# endif
-extern "C" {
- __declspec(dllimport) void * __stdcall
- CreateFileMappingA (void *, SECURITY_ATTRIBUTES_*, unsigned long, unsigned long, unsigned long, const char *);
- __declspec(dllimport) int __stdcall
- FlushViewOfFile (void *, std::size_t);
- __declspec(dllimport) HANDLE_ __stdcall
- GetProcessHeap();
- __declspec(dllimport) void* __stdcall
- HeapAlloc(HANDLE_,DWORD_,SIZE_T_);
- __declspec(dllimport) BOOL_ __stdcall
- HeapFree(HANDLE_,DWORD_,LPVOID_);
- __declspec(dllimport) void * __stdcall
- MapViewOfFileEx (void *, unsigned long, unsigned long, unsigned long, std::size_t, void*);
- __declspec(dllimport) void * __stdcall
- OpenFileMappingA (unsigned long, int, const char *);
- __declspec(dllimport) int __stdcall
- UnmapViewOfFile(void *);
-}
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_SYNCHRONIZATION_HPP
diff --git a/3party/boost/boost/detail/win/process.hpp b/3party/boost/boost/detail/win/process.hpp
deleted file mode 100644
index 10c3a9392c..0000000000
--- a/3party/boost/boost/detail/win/process.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// process.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_PROCESS_HPP
-#define BOOST_DETAIL_WIN_PROCESS_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-#include <boost/detail/win/GetCurrentProcess.hpp>
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( BOOST_USE_WINDOWS_H )
- using ::GetCurrentProcessId;
-#else
-# ifndef UNDER_CE
-extern "C" {
- __declspec(dllimport) unsigned long __stdcall
- GetCurrentProcessId(void);
-}
-# else
- using ::GetCurrentProcessId;
-# endif
-#endif
-}
-}
-}
-#endif // BOOST_DETAIL_WIN_PROCESS_HPP
diff --git a/3party/boost/boost/detail/win/security.hpp b/3party/boost/boost/detail/win/security.hpp
deleted file mode 100644
index ee38985193..0000000000
--- a/3party/boost/boost/detail/win/security.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-// security.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_SECURITY_HPP
-#define BOOST_DETAIL_WIN_SECURITY_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-
-
-namespace boost
-{
-namespace detail
-{
-namespace win32
-{
-#if defined( BOOST_USE_WINDOWS_H )
-typedef ::SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES_;
-typedef ::PSECURITY_ATTRIBUTES PSECURITY_ATTRIBUTES_;
-typedef ::LPSECURITY_ATTRIBUTES LPSECURITY_ATTRIBUTES_;
-
-#else
-extern "C" {
- struct SECURITY_DESCRIPTOR_;
- typedef SECURITY_DESCRIPTOR_* PSECURITY_DESCRIPTOR_;
- typedef struct _ACL {
- BYTE_ AclRevision;
- BYTE_ Sbz1;
- WORD_ AclSize;
- WORD_ AceCount;
- WORD_ Sbz2;
- } ACL_, *PACL_;
-
- typedef struct _SECURITY_ATTRIBUTES {
- DWORD_ nLength;
- LPVOID_ lpSecurityDescriptor;
- BOOL_ bInheritHandle;
- } SECURITY_ATTRIBUTES_, *PSECURITY_ATTRIBUTES_, *LPSECURITY_ATTRIBUTES_;
-
- __declspec(dllimport) BOOL_ __stdcall
- InitializeSecurityDescriptor(
- PSECURITY_DESCRIPTOR_ pSecurityDescriptor,
- DWORD_ dwRevision
- );
- __declspec(dllimport) BOOL_ __stdcall
- SetSecurityDescriptorDacl(
- PSECURITY_DESCRIPTOR_ pSecurityDescriptor,
- BOOL_ bDaclPresent,
- PACL_ pDacl,
- BOOL_ bDaclDefaulted
- );
-}
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_SECURITY_HPP
diff --git a/3party/boost/boost/detail/win/synchronization.hpp b/3party/boost/boost/detail/win/synchronization.hpp
deleted file mode 100644
index 8fe015b353..0000000000
--- a/3party/boost/boost/detail/win/synchronization.hpp
+++ /dev/null
@@ -1,125 +0,0 @@
-// synchronizaion.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_SYNCHRONIZATION_HPP
-#define BOOST_DETAIL_WIN_SYNCHRONIZATION_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-
-
-namespace boost
-{
-namespace detail
-{
-namespace win32
-{
-#if defined( BOOST_USE_WINDOWS_H )
- typedef ::CRITICAL_SECTION CRITICAL_SECTION_;
- typedef ::PAPCFUNC PAPCFUNC_;
-
- using ::InitializeCriticalSection;
- using ::EnterCriticalSection;
- using ::TryEnterCriticalSection;
- using ::LeaveCriticalSection;
- using ::DeleteCriticalSection;
-
-# ifdef BOOST_NO_ANSI_APIS
- using ::CreateMutexW;
- using ::CreateEventW;
- using ::OpenEventW;
- using ::CreateSemaphoreW;
-# else
- using ::CreateMutexA;
- using ::CreateEventA;
- using ::OpenEventA;
- using ::CreateSemaphoreA;
-# endif
- using ::ReleaseMutex;
- using ::ReleaseSemaphore;
- using ::SetEvent;
- using ::ResetEvent;
- using ::WaitForMultipleObjects;
- using ::WaitForSingleObject;
- using ::QueueUserAPC;
-#else
-extern "C" {
- struct CRITICAL_SECTION_
- {
- struct critical_section_debug * DebugInfo;
- long LockCount;
- long RecursionCount;
- void * OwningThread;
- void * LockSemaphore;
- #if defined(_WIN64)
- unsigned __int64 SpinCount;
- #else
- unsigned long SpinCount;
- #endif
- };
-
- __declspec(dllimport) void __stdcall
- InitializeCriticalSection(CRITICAL_SECTION_ *);
- __declspec(dllimport) void __stdcall
- EnterCriticalSection(CRITICAL_SECTION_ *);
- __declspec(dllimport) bool __stdcall
- TryEnterCriticalSection(CRITICAL_SECTION_ *);
- __declspec(dllimport) void __stdcall
- LeaveCriticalSection(CRITICAL_SECTION_ *);
- __declspec(dllimport) void __stdcall
- DeleteCriticalSection(CRITICAL_SECTION_ *);
-
- struct _SECURITY_ATTRIBUTES;
-# ifdef BOOST_NO_ANSI_APIS
- __declspec(dllimport) void* __stdcall
- CreateMutexW(_SECURITY_ATTRIBUTES*,int,wchar_t const*);
- __declspec(dllimport) void* __stdcall
- CreateSemaphoreW(_SECURITY_ATTRIBUTES*,long,long,wchar_t const*);
- __declspec(dllimport) void* __stdcall
- CreateEventW(_SECURITY_ATTRIBUTES*,int,int,wchar_t const*);
- __declspec(dllimport) void* __stdcall
- OpenEventW(unsigned long,int,wchar_t const*);
-# else
- __declspec(dllimport) void* __stdcall
- CreateMutexA(_SECURITY_ATTRIBUTES*,int,char const*);
- __declspec(dllimport) void* __stdcall
- CreateSemaphoreA(_SECURITY_ATTRIBUTES*,long,long,char const*);
- __declspec(dllimport) void* __stdcall
- CreateEventA(_SECURITY_ATTRIBUTES*,int,int,char const*);
- __declspec(dllimport) void* __stdcall
- OpenEventA(unsigned long,int,char const*);
-# endif
- __declspec(dllimport) int __stdcall
- ReleaseMutex(void*);
- __declspec(dllimport) unsigned long __stdcall
- WaitForSingleObject(void*,unsigned long);
- __declspec(dllimport) unsigned long __stdcall
- WaitForMultipleObjects(unsigned long nCount,
- void* const * lpHandles,
- int bWaitAll,
- unsigned long dwMilliseconds);
- __declspec(dllimport) int __stdcall
- ReleaseSemaphore(void*,long,long*);
- typedef void (__stdcall *PAPCFUNC8)(ulong_ptr);
- __declspec(dllimport) unsigned long __stdcall
- QueueUserAPC(PAPCFUNC8,void*,ulong_ptr);
-# ifndef UNDER_CE
- __declspec(dllimport) int __stdcall
- SetEvent(void*);
- __declspec(dllimport) int __stdcall
- ResetEvent(void*);
-# else
- using ::SetEvent;
- using ::ResetEvent;
-# endif
-}
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_SYNCHRONIZATION_HPP
diff --git a/3party/boost/boost/detail/win/system.hpp b/3party/boost/boost/detail/win/system.hpp
deleted file mode 100644
index 3bcffcec8e..0000000000
--- a/3party/boost/boost/detail/win/system.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-// system.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_SYSTEM_HPP
-#define BOOST_DETAIL_WIN_SYSTEM_HPP
-#include <boost/config.hpp>
-#include <cstdarg>
-
-#include <boost/detail/win/basic_types.hpp>
-extern "C" __declspec(dllimport) void __stdcall GetSystemInfo (struct system_info *);
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( BOOST_USE_WINDOWS_H )
- typedef ::SYSTEM_INFO SYSTEM_INFO_;
-#else
-extern "C" {
- typedef struct _SYSTEM_INFO {
- union {
- DWORD_ dwOemId;
- struct {
- WORD_ wProcessorArchitecture;
- WORD_ wReserved;
- } dummy;
- } ;
- DWORD_ dwPageSize;
- LPVOID_ lpMinimumApplicationAddress;
- LPVOID_ lpMaximumApplicationAddress;
- DWORD_PTR_ dwActiveProcessorMask;
- DWORD_ dwNumberOfProcessors;
- DWORD_ dwProcessorType;
- DWORD_ dwAllocationGranularity;
- WORD_ wProcessorLevel;
- WORD_ wProcessorRevision;
- } SYSTEM_INFO_;
-
- __declspec(dllimport) void __stdcall
- GetSystemInfo (struct system_info *);
-}
-#endif
-}
-}
-}
-#endif // BOOST_DETAIL_WIN_TIME_HPP
diff --git a/3party/boost/boost/detail/win/thread.hpp b/3party/boost/boost/detail/win/thread.hpp
deleted file mode 100644
index 4e1bf307f9..0000000000
--- a/3party/boost/boost/detail/win/thread.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// thread.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_THREAD_HPP
-#define BOOST_DETAIL_WIN_THREAD_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-#include <boost/detail/win/GetCurrentThread.hpp>
-
-namespace boost
-{
-namespace detail
-{
-namespace win32
-{
-#if defined( BOOST_USE_WINDOWS_H )
- using ::GetCurrentThreadId;
- using ::SleepEx;
- using ::Sleep;
-#else
-extern "C" {
-# ifndef UNDER_CE
- __declspec(dllimport) unsigned long __stdcall
- GetCurrentThreadId(void);
- __declspec(dllimport) unsigned long __stdcall
- SleepEx(unsigned long,int);
- __declspec(dllimport) void __stdcall
- Sleep(unsigned long);
-#else
- using ::GetCurrentThreadId;
- using ::SleepEx;
- using ::Sleep;
-#endif
-}
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_THREAD_HPP
diff --git a/3party/boost/boost/detail/win/time.hpp b/3party/boost/boost/detail/win/time.hpp
deleted file mode 100644
index 7f636edbae..0000000000
--- a/3party/boost/boost/detail/win/time.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// time.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_TIME_HPP
-#define BOOST_DETAIL_WIN_TIME_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-
-
-namespace boost {
-namespace detail {
-namespace win32 {
-#if defined( BOOST_USE_WINDOWS_H )
- typedef FILETIME FILETIME_;
- typedef PFILETIME PFILETIME_;
- typedef LPFILETIME LPFILETIME_;
-
- typedef SYSTEMTIME SYSTEMTIME_;
- typedef SYSTEMTIME* PSYSTEMTIME_;
-
- #ifndef UNDER_CE // Windows CE does not define GetSystemTimeAsFileTime
- using ::GetSystemTimeAsFileTime;
- #endif
- using ::FileTimeToLocalFileTime;
- using ::GetSystemTime;
- using ::SystemTimeToFileTime;
- using ::GetTickCount;
-
-#else
-extern "C" {
- typedef struct _FILETIME {
- DWORD_ dwLowDateTime;
- DWORD_ dwHighDateTime;
- } FILETIME_, *PFILETIME_, *LPFILETIME_;
-
- typedef struct _SYSTEMTIME {
- WORD_ wYear;
- WORD_ wMonth;
- WORD_ wDayOfWeek;
- WORD_ wDay;
- WORD_ wHour;
- WORD_ wMinute;
- WORD_ wSecond;
- WORD_ wMilliseconds;
- } SYSTEMTIME_, *PSYSTEMTIME_;
-
- #ifndef UNDER_CE // Windows CE does not define GetSystemTimeAsFileTime
- __declspec(dllimport) void WINAPI
- GetSystemTimeAsFileTime(FILETIME_* lpFileTime);
- #endif
- __declspec(dllimport) int WINAPI
- FileTimeToLocalFileTime(const FILETIME_* lpFileTime,
- FILETIME_* lpLocalFileTime);
- __declspec(dllimport) void WINAPI
- GetSystemTime(SYSTEMTIME_* lpSystemTime);
- __declspec(dllimport) int WINAPI
- SystemTimeToFileTime(const SYSTEMTIME_* lpSystemTime,
- FILETIME_* lpFileTime);
- __declspec(dllimport) unsigned long __stdcall
- GetTickCount();
-}
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_TIME_HPP
diff --git a/3party/boost/boost/detail/win/timers.hpp b/3party/boost/boost/detail/win/timers.hpp
deleted file mode 100644
index 753c91f83e..0000000000
--- a/3party/boost/boost/detail/win/timers.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-// timers.hpp --------------------------------------------------------------//
-
-// Copyright 2010 Vicente J. Botet Escriba
-
-// Distributed under the Boost Software License, Version 1.0.
-// See http://www.boost.org/LICENSE_1_0.txt
-
-
-#ifndef BOOST_DETAIL_WIN_TIMERS_HPP
-#define BOOST_DETAIL_WIN_TIMERS_HPP
-
-#include <boost/detail/win/basic_types.hpp>
-
-
-namespace boost
-{
-namespace detail
-{
-namespace win32
-{
-#if defined( BOOST_USE_WINDOWS_H )
- using ::QueryPerformanceCounter;
- using ::QueryPerformanceFrequency;
-#else
-extern "C" {
- __declspec(dllimport) BOOL_ WINAPI
- QueryPerformanceCounter(
- LARGE_INTEGER_ *lpPerformanceCount
- );
-
- __declspec(dllimport) BOOL_ WINAPI
- QueryPerformanceFrequency(
- LARGE_INTEGER_ *lpFrequency
- );
-}
-#endif
-}
-}
-}
-
-#endif // BOOST_DETAIL_WIN_TIMERS_HPP
diff --git a/3party/boost/boost/detail/winapi/GetCurrentProcess.hpp b/3party/boost/boost/detail/winapi/GetCurrentProcess.hpp
new file mode 100644
index 0000000000..51206bb4e8
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/GetCurrentProcess.hpp
@@ -0,0 +1,29 @@
+// GetCurrentProcess.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP
+#define BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::GetCurrentProcess;
+#else
+ extern "C" __declspec(dllimport) HANDLE_ WINAPI GetCurrentProcess();
+#endif
+}
+}
+}
+#endif // BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP
diff --git a/3party/boost/boost/detail/winapi/GetCurrentThread.hpp b/3party/boost/boost/detail/winapi/GetCurrentThread.hpp
new file mode 100644
index 0000000000..595b751d13
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/GetCurrentThread.hpp
@@ -0,0 +1,38 @@
+// GetCurrentThread.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP
+#define BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+#if defined( UNDER_CE )
+// Windows CE define GetCurrentThread as an inline function in kfuncs.h
+inline HANDLE_ GetCurrentThread()
+{
+ return ::GetCurrentThread();
+}
+#else
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::GetCurrentThread;
+#else
+ extern "C" __declspec(dllimport) HANDLE_ WINAPI GetCurrentThread();
+#endif
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP
diff --git a/3party/boost/boost/detail/winapi/GetLastError.hpp b/3party/boost/boost/detail/winapi/GetLastError.hpp
new file mode 100644
index 0000000000..6e9e2d998a
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/GetLastError.hpp
@@ -0,0 +1,31 @@
+// GetLastError.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
+#define BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::GetLastError;
+#else
+ extern "C" __declspec(dllimport) DWORD_ WINAPI
+ GetLastError();
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
diff --git a/3party/boost/boost/detail/winapi/GetProcessTimes.hpp b/3party/boost/boost/detail/winapi/GetProcessTimes.hpp
new file mode 100644
index 0000000000..f2860b06bd
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/GetProcessTimes.hpp
@@ -0,0 +1,39 @@
+// GetProcessTimes.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP
+#define BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP
+
+#include <boost/detail/winapi/time.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+#if !defined(UNDER_CE) // Windows CE does not define GetProcessTimes
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::GetProcessTimes;
+#else
+ extern "C" __declspec(dllimport) BOOL_ WINAPI
+ GetProcessTimes(
+ HANDLE_ hProcess,
+ LPFILETIME_ lpCreationTime,
+ LPFILETIME_ lpExitTime,
+ LPFILETIME_ lpKernelTime,
+ LPFILETIME_ lpUserTime
+ );
+#endif
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP
diff --git a/3party/boost/boost/detail/winapi/GetThreadTimes.hpp b/3party/boost/boost/detail/winapi/GetThreadTimes.hpp
new file mode 100644
index 0000000000..3428edad22
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/GetThreadTimes.hpp
@@ -0,0 +1,37 @@
+// GetThreadTimes.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP
+#define BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP
+
+#include <boost/detail/winapi/time.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::GetThreadTimes;
+#else
+ extern "C" __declspec(dllimport) BOOL_ WINAPI
+ GetThreadTimes(
+ HANDLE_ hThread,
+ LPFILETIME_ lpCreationTime,
+ LPFILETIME_ lpExitTime,
+ LPFILETIME_ lpKernelTime,
+ LPFILETIME_ lpUserTime
+ );
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP
diff --git a/3party/boost/boost/detail/winapi/LocalFree.hpp b/3party/boost/boost/detail/winapi/LocalFree.hpp
new file mode 100644
index 0000000000..697016c0c6
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/LocalFree.hpp
@@ -0,0 +1,33 @@
+// LocalFree.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_LOCALFREE_HPP
+#define BOOST_DETAIL_WINAPI_LOCALFREE_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+#if defined( BOOST_USE_WINDOWS_H )
+ typedef HANDLE_ HLOCAL_;
+
+ using ::LocalFree;
+#else
+ extern "C" typedef HANDLE_ HLOCAL_;
+ extern "C" __declspec(dllimport) HLOCAL_ WINAPI
+ LocalFree(HLOCAL_ hMem);
+#endif
+}
+}
+}
+#endif // BOOST_DETAIL_WINAPI_LOCALFREE_HPP
diff --git a/3party/boost/boost/detail/winapi/basic_types.hpp b/3party/boost/boost/detail/winapi/basic_types.hpp
new file mode 100644
index 0000000000..09d907bdc2
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/basic_types.hpp
@@ -0,0 +1,134 @@
+// basic_types.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP
+#define BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP
+
+#include <cstdarg>
+#include <boost/cstdint.hpp>
+#include <boost/detail/winapi/config.hpp>
+
+#if defined( BOOST_USE_WINDOWS_H )
+# include <windows.h>
+#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined(__CYGWIN__)
+# include <winerror.h>
+// @FIXME Which condition must be tested
+# ifdef UNDER_CE
+# ifndef WINAPI
+# ifndef _WIN32_WCE_EMULATION
+# define WINAPI __cdecl // Note this doesn't match the desktop definition
+# else
+# define WINAPI __stdcall
+# endif
+# endif
+# else
+# ifndef WINAPI
+# define WINAPI __stdcall
+# endif
+# endif
+# ifndef NTAPI
+# define NTAPI __stdcall
+# endif
+#else
+# error "Win32 functions not available"
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+#if defined( BOOST_USE_WINDOWS_H )
+ typedef ::BOOL BOOL_;
+ typedef ::BOOLEAN BOOLEAN_;
+ typedef ::PBOOLEAN PBOOLEAN_;
+ typedef ::BYTE BYTE_;
+ typedef ::WORD WORD_;
+ typedef ::DWORD DWORD_;
+ typedef ::HANDLE HANDLE_;
+ typedef ::HMODULE HMODULE_;
+ typedef ::LONG LONG_;
+ typedef ::ULONG ULONG_;
+ typedef ::LONGLONG LONGLONG_;
+ typedef ::ULONGLONG ULONGLONG_;
+ typedef ::INT_PTR INT_PTR_;
+ typedef ::UINT_PTR UINT_PTR_;
+ typedef ::LONG_PTR LONG_PTR_;
+ typedef ::ULONG_PTR ULONG_PTR_;
+ typedef ::LARGE_INTEGER LARGE_INTEGER_;
+ typedef ::PLARGE_INTEGER PLARGE_INTEGER_;
+ typedef ::PVOID PVOID_;
+ typedef ::LPVOID LPVOID_;
+ typedef ::CHAR CHAR_;
+ typedef ::LPSTR LPSTR_;
+ typedef ::LPCSTR LPCSTR_;
+ typedef ::WCHAR WCHAR_;
+ typedef ::LPWSTR LPWSTR_;
+ typedef ::LPCWSTR LPCWSTR_;
+#else
+extern "C" {
+ typedef int BOOL_;
+ typedef unsigned char BYTE_;
+ typedef BYTE_ BOOLEAN_;
+ typedef BOOLEAN_* PBOOLEAN_;
+ typedef unsigned short WORD_;
+ typedef unsigned long DWORD_;
+ typedef void* HANDLE_;
+ typedef void* HMODULE_;
+
+ typedef long LONG_;
+ typedef unsigned long ULONG_;
+
+ typedef boost::int64_t LONGLONG_;
+ typedef boost::uint64_t ULONGLONG_;
+
+// @FIXME Which condition must be tested
+# ifdef _WIN64
+#if defined(__CYGWIN__)
+ typedef long INT_PTR_;
+ typedef unsigned long UINT_PTR_;
+ typedef long LONG_PTR_;
+ typedef unsigned long ULONG_PTR_;
+#else
+ typedef __int64 INT_PTR_;
+ typedef unsigned __int64 UINT_PTR_;
+ typedef __int64 LONG_PTR_;
+ typedef unsigned __int64 ULONG_PTR_;
+#endif
+# else
+ typedef int INT_PTR_;
+ typedef unsigned int UINT_PTR_;
+ typedef long LONG_PTR_;
+ typedef unsigned long ULONG_PTR_;
+# endif
+
+ typedef struct _LARGE_INTEGER {
+ LONGLONG_ QuadPart;
+ } LARGE_INTEGER_;
+ typedef LARGE_INTEGER_ *PLARGE_INTEGER_;
+
+ typedef void *PVOID_;
+ typedef void *LPVOID_;
+ typedef const void *LPCVOID_;
+
+ typedef char CHAR_;
+ typedef CHAR_ *LPSTR_;
+ typedef const CHAR_ *LPCSTR_;
+
+ typedef wchar_t WCHAR_;
+ typedef WCHAR_ *LPWSTR_;
+ typedef const WCHAR_ *LPCWSTR_;
+}
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP
diff --git a/3party/boost/boost/detail/winapi/config.hpp b/3party/boost/boost/detail/winapi/config.hpp
new file mode 100644
index 0000000000..2b0cdfbada
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/config.hpp
@@ -0,0 +1,53 @@
+// config.hpp --------------------------------------------------------------//
+
+// Copyright 2013 Andrey Semashev
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
+#define BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+// These constants reflect _WIN32_WINNT_* macros from sdkddkver.h
+// See also: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745%28v=vs.85%29.aspx#setting_winver_or__win32_winnt
+#define BOOST_WINAPI_VERSION_NT4 0x0400
+#define BOOST_WINAPI_VERSION_WIN2K 0x0500
+#define BOOST_WINAPI_VERSION_WINXP 0x0501
+#define BOOST_WINAPI_VERSION_WS03 0x0502
+#define BOOST_WINAPI_VERSION_WIN6 0x0600
+#define BOOST_WINAPI_VERSION_VISTA 0x0600
+#define BOOST_WINAPI_VERSION_WS08 0x0600
+#define BOOST_WINAPI_VERSION_LONGHORN 0x0600
+#define BOOST_WINAPI_VERSION_WIN7 0x0601
+#define BOOST_WINAPI_VERSION_WIN8 0x0602
+#define BOOST_WINAPI_VERSION_WINBLUE 0x0603
+
+#if !defined(BOOST_USE_WINAPI_VERSION)
+#if defined(_WIN32_WINNT)
+#define BOOST_USE_WINAPI_VERSION _WIN32_WINNT
+#elif defined(WINVER)
+#define BOOST_USE_WINAPI_VERSION WINVER
+#else
+// By default use Windows XP API
+#define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WINXP
+#endif
+#endif
+
+#if defined(BOOST_USE_WINDOWS_H)
+// We have to define the version macros so that windows.h provides the necessary symbols
+#if !defined(_WIN32_WINNT)
+#define _WIN32_WINNT BOOST_USE_WINAPI_VERSION
+#endif
+#if !defined(WINVER)
+#define WINVER BOOST_USE_WINAPI_VERSION
+#endif
+#endif
+
+#endif // BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
diff --git a/3party/boost/boost/detail/winapi/directory_management.hpp b/3party/boost/boost/detail/winapi/directory_management.hpp
new file mode 100644
index 0000000000..19af1ee4ea
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/directory_management.hpp
@@ -0,0 +1,46 @@
+// directory_management.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_DIRECTORY_MANAGEMENT_HPP
+#define BOOST_DETAIL_WINAPI_DIRECTORY_MANAGEMENT_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+#include <boost/detail/winapi/security.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::CreateDirectory;
+ using ::CreateDirectoryA;
+ using ::GetTempPathA;
+ using ::RemoveDirectoryA;
+#else
+extern "C" {
+ __declspec(dllimport) int __stdcall
+ CreateDirectory(LPCTSTR_, LPSECURITY_ATTRIBUTES_*);
+ __declspec(dllimport) int __stdcall
+ CreateDirectoryA(LPCTSTR_, interprocess_security_attributes*);
+ __declspec(dllimport) int __stdcall
+ GetTempPathA(unsigned long length, char *buffer);
+ __declspec(dllimport) int __stdcall
+ RemoveDirectoryA(LPCTSTR_);
+}
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_THREAD_HPP
diff --git a/3party/boost/boost/detail/winapi/dll.hpp b/3party/boost/boost/detail/winapi/dll.hpp
new file mode 100644
index 0000000000..2ec5a73bc9
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/dll.hpp
@@ -0,0 +1,86 @@
+// dll.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_DLL_HPP
+#define BOOST_DETAIL_WINAPI_DLL_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+#include <boost/detail/winapi/security.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+ typedef ::FARPROC FARPROC_;
+ typedef ::NEARPROC NEARPROC_;
+ typedef ::PROC PROC_;
+
+# ifdef BOOST_NO_ANSI_APIS
+ using ::LoadLibraryW;
+ using ::GetModuleHandleW;
+# else
+ using ::LoadLibraryA;
+ using ::GetModuleHandleA;
+# endif
+ using ::FreeLibrary;
+ using ::GetProcAddress;
+#else
+extern "C" {
+# ifdef _WIN64
+ typedef INT_PTR_ (WINAPI *FARPROC_)();
+ typedef INT_PTR_ (WINAPI *NEARPROC_)();
+ typedef INT_PTR_ (WINAPI *PROC_)();
+# else
+ typedef int (WINAPI *FARPROC_)();
+ typedef int (WINAPI *NEARPROC_)();
+ typedef int (WINAPI *PROC_)();
+# endif // _WIN64
+
+# ifdef BOOST_NO_ANSI_APIS
+ __declspec(dllimport) HMODULE_ WINAPI
+ LoadLibraryW(
+ LPCWSTR_ lpFileName
+ );
+ __declspec(dllimport) HMODULE_ WINAPI
+ GetModuleHandleW(
+ LPCWSTR_ lpFileName
+ );
+# else
+ __declspec(dllimport) HMODULE_ WINAPI
+ LoadLibraryA(
+ LPCSTR_ lpFileName
+ );
+ __declspec(dllimport) HMODULE_ WINAPI
+ GetModuleHandleA(
+ LPCSTR_ lpFileName
+ );
+# endif
+
+ __declspec(dllimport) BOOL_ WINAPI
+ FreeLibrary(
+ HMODULE_ hModule
+ );
+ __declspec(dllimport) FARPROC_ WINAPI
+ GetProcAddress(
+ HMODULE_ hModule,
+ LPCSTR_ lpProcName
+ );
+}
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_DLL_HPP
diff --git a/3party/boost/boost/detail/winapi/error_handling.hpp b/3party/boost/boost/detail/winapi/error_handling.hpp
new file mode 100644
index 0000000000..fbe9924b25
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/error_handling.hpp
@@ -0,0 +1,93 @@
+// error_handling.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_ERROR_HANDLING_HPP
+#define BOOST_DETAIL_WINAPI_ERROR_HANDLING_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+#include <boost/detail/winapi/GetCurrentThread.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::FormatMessageA;
+ using ::FormatMessageW;
+
+ const int FORMAT_MESSAGE_ALLOCATE_BUFFER_= FORMAT_MESSAGE_ALLOCATE_BUFFER;
+ const int FORMAT_MESSAGE_IGNORE_INSERTS_= FORMAT_MESSAGE_IGNORE_INSERTS;
+ const int FORMAT_MESSAGE_FROM_STRING_= FORMAT_MESSAGE_FROM_STRING;
+ const int FORMAT_MESSAGE_FROM_HMODULE_= FORMAT_MESSAGE_FROM_HMODULE;
+ const int FORMAT_MESSAGE_FROM_SYSTEM_= FORMAT_MESSAGE_FROM_SYSTEM;
+ const int FORMAT_MESSAGE_ARGUMENT_ARRAY_= FORMAT_MESSAGE_ARGUMENT_ARRAY;
+ const int FORMAT_MESSAGE_MAX_WIDTH_MASK_= FORMAT_MESSAGE_MAX_WIDTH_MASK;
+
+ const char LANG_NEUTRAL_= LANG_NEUTRAL;
+ const char LANG_INVARIANT_= LANG_INVARIANT;
+
+ const char SUBLANG_DEFAULT_= SUBLANG_DEFAULT; // user default
+ inline WORD_ MAKELANGID_(WORD_ p, WORD_ s) {
+ return MAKELANGID(p,s);
+ }
+#else
+extern "C" {
+ // using ::FormatMessageA;
+ __declspec(dllimport)
+ DWORD_
+ WINAPI
+ FormatMessageA(
+ DWORD_ dwFlags,
+ LPCVOID_ lpSource,
+ DWORD_ dwMessageId,
+ DWORD_ dwLanguageId,
+ LPSTR_ lpBuffer,
+ DWORD_ nSize,
+ va_list *Arguments
+ );
+
+ // using ::FormatMessageW;
+ __declspec(dllimport)
+ DWORD_
+ WINAPI
+ FormatMessageW(
+ DWORD_ dwFlags,
+ LPCVOID_ lpSource,
+ DWORD_ dwMessageId,
+ DWORD_ dwLanguageId,
+ LPWSTR_ lpBuffer,
+ DWORD_ nSize,
+ va_list *Arguments
+ );
+
+ const int FORMAT_MESSAGE_ALLOCATE_BUFFER_= 0x00000100;
+ const int FORMAT_MESSAGE_IGNORE_INSERTS_= 0x00000200;
+ const int FORMAT_MESSAGE_FROM_STRING_= 0x00000400;
+ const int FORMAT_MESSAGE_FROM_HMODULE_= 0x00000800;
+ const int FORMAT_MESSAGE_FROM_SYSTEM_= 0x00001000;
+ const int FORMAT_MESSAGE_ARGUMENT_ARRAY_= 0x00002000;
+ const int FORMAT_MESSAGE_MAX_WIDTH_MASK_= 0x000000FF;
+
+ const char LANG_NEUTRAL_= 0x00;
+ const char LANG_INVARIANT_= 0x7f;
+
+ const char SUBLANG_DEFAULT_= 0x01; // user default
+ inline WORD_ MAKELANGID_(WORD_ p, WORD_ s) {
+ return ((((WORD_ )(s)) << 10) | (WORD_ )(p));
+ }
+
+}
+#endif
+}
+}
+}
+#endif // BOOST_DETAIL_WINAPI_ERROR_HANDLING_HPP
diff --git a/3party/boost/boost/detail/winapi/file_management.hpp b/3party/boost/boost/detail/winapi/file_management.hpp
new file mode 100644
index 0000000000..c1d5978ba7
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/file_management.hpp
@@ -0,0 +1,130 @@
+// thread.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_FILE_MANAGEMENT_HPP
+#define BOOST_DETAIL_WINAPI_FILE_MANAGEMENT_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+#include <boost/detail/winapi/security.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::CreateFileA;
+ using ::DeleteFileA;
+ using ::FindFirstFileA;
+ using ::FindNextFileA;
+ using ::FindClose;
+ using ::GetFileSizeEx;
+ using ::MoveFileExA;
+ using ::SetFileValidData;
+#else
+extern "C" {
+ typedef struct _OVERLAPPED {
+ ULONG_PTR Internal;
+ ULONG_PTR InternalHigh;
+ union {
+ struct {
+ DWORD Offset;
+ DWORD OffsetHigh;
+ } ;
+ PVOID Pointer;
+ } ;
+ HANDLE hEvent;
+ } OVERLAPPED, *LPOVERLAPPED;
+
+
+ __declspec(dllimport) void * __stdcall
+ CreateFileA (const char *, unsigned long, unsigned long, struct SECURITY_ATTRIBUTES_*, unsigned long, unsigned long, void *);
+ __declspec(dllimport) int __stdcall
+ DeleteFileA (const char *);
+ __declspec(dllimport) void *__stdcall
+ FindFirstFileA(const char *lpFileName, win32_find_data_t *lpFindFileData);
+ __declspec(dllimport) int __stdcall
+ FindNextFileA(void *hFindFile, win32_find_data_t *lpFindFileData);
+ __declspec(dllimport) int __stdcall
+ FindClose(void *hFindFile);
+ __declspec(dllimport) BOOL __stdcall
+ GetFileSizeEx(
+ HANDLE_ hFile,
+ PLARGE_INTEGER_ lpFileSize
+ );
+ __declspec(dllimport) int __stdcall
+ MoveFileExA (const char *, const char *, unsigned long);
+ __declspec(dllimport) BOOL_ __stdcall
+ SetFileValidData(
+ HANDLE_ hFile,
+ LONGLONG_ ValidDataLength
+ );
+ __declspec(dllimport) BOOL_ __stdcall
+ SetEndOfFile(
+ HANDLE_ hFile
+ );
+ __declspec(dllimport) BOOL_ __stdcall
+ SetFilePointerEx(
+ HANDLE_ hFile,
+ LARGE_INTEGER_ liDistanceToMove,
+ PLARGE_INTEGER_ lpNewFilePointer,
+ DWORD_ dwMoveMethod
+ );
+ __declspec(dllimport) BOOL_ __stdcall
+ LockFile(
+ HANDLE_ hFile,
+ DWORD_ dwFileOffsetLow,
+ DWORD_ dwFileOffsetHigh,
+ DWORD_ nNumberOfBytesToLockLow,
+ DWORD_ nNumberOfBytesToLockHigh
+ );
+ __declspec(dllimport) BOOL_ __stdcall
+ UnlockFile(
+ HANDLE_ hFile,
+ DWORD_ dwFileOffsetLow,
+ DWORD_ dwFileOffsetHigh,
+ DWORD_ nNumberOfBytesToUnlockLow,
+ DWORD_ nNumberOfBytesToUnlockHigh
+ );
+ __declspec(dllimport) BOOL_ __stdcall
+ LockFileEx(
+ HANDLE_ hFile,
+ DWORD_ dwFlags,
+ DWORD_ dwReserved,
+ DWORD_ nNumberOfBytesToLockLow,
+ DWORD_ nNumberOfBytesToLockHigh,
+ LPOVERLAPPED_ lpOverlapped
+ );
+ __declspec(dllimport) BOOL_ __stdcall
+ UnlockFileEx(
+ HANDLE_ hFile,
+ DWORD_ dwReserved,
+ DWORD_ nNumberOfBytesToUnlockLow,
+ DWORD_ nNumberOfBytesToUnlockHigh,
+ LPOVERLAPPED_ lpOverlapped
+ );
+ __declspec(dllimport) BOOL_ __stdcall
+ WriteFile(
+ HANDLE_ hFile,
+ LPCVOID_ lpBuffer,
+ DWORD_ nNumberOfBytesToWrite,
+ LPDWORD_ lpNumberOfBytesWritten,
+ LPOVERLAPPED_ lpOverlapped
+ );
+}
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_THREAD_HPP
diff --git a/3party/boost/boost/detail/winapi/handles.hpp b/3party/boost/boost/detail/winapi/handles.hpp
new file mode 100644
index 0000000000..7108daa10b
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/handles.hpp
@@ -0,0 +1,46 @@
+// memory.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_HANDLES_HPP
+#define BOOST_DETAIL_WINAPI_HANDLES_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::CloseHandle;
+ using ::DuplicateHandle;
+
+ const DWORD_ duplicate_close_source = DUPLICATE_CLOSE_SOURCE;
+ const DWORD_ duplicate_same_access = DUPLICATE_SAME_ACCESS;
+ const HANDLE_ invalid_handle_value = INVALID_HANDLE_VALUE;
+#else
+extern "C" {
+ __declspec(dllimport) int __stdcall
+ CloseHandle(void*);
+ __declspec(dllimport) int __stdcall
+ DuplicateHandle(void*,void*,void*,void**,unsigned long,int,unsigned long);
+}
+ const DWORD_ duplicate_close_source = 1;
+ const DWORD_ duplicate_same_access = 2;
+ const HANDLE_ invalid_handle_value = (HANDLE_)(-1);
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_HANDLES_HPP
diff --git a/3party/boost/boost/detail/winapi/memory.hpp b/3party/boost/boost/detail/winapi/memory.hpp
new file mode 100644
index 0000000000..b5316e09e0
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/memory.hpp
@@ -0,0 +1,60 @@
+// memory.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_MEMORY_HPP
+#define BOOST_DETAIL_WINAPI_MEMORY_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+#include <boost/detail/winapi/security.hpp>
+#include <boost/detail/winapi/LocalFree.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::CreateFileMappingA;
+ using ::FlushViewOfFile;
+ using ::GetProcessHeap;
+ using ::HeapAlloc;
+ using ::HeapFree;
+ using ::MapViewOfFileEx;
+ using ::OpenFileMappingA;
+ using ::UnmapViewOfFile;
+#else
+#undef HeapAlloc
+extern "C" {
+ __declspec(dllimport) void * __stdcall
+ CreateFileMappingA (void *, SECURITY_ATTRIBUTES_*, unsigned long, unsigned long, unsigned long, const char *);
+ __declspec(dllimport) int __stdcall
+ FlushViewOfFile (void *, std::size_t);
+ __declspec(dllimport) HANDLE_ __stdcall
+ GetProcessHeap();
+ __declspec(dllimport) void* __stdcall
+ HeapAlloc(HANDLE_,DWORD_,SIZE_T_);
+ __declspec(dllimport) BOOL_ __stdcall
+ HeapFree(HANDLE_,DWORD_,LPVOID_);
+ __declspec(dllimport) void * __stdcall
+ MapViewOfFileEx (void *, unsigned long, unsigned long, unsigned long, std::size_t, void*);
+ __declspec(dllimport) void * __stdcall
+ OpenFileMappingA (unsigned long, int, const char *);
+ __declspec(dllimport) int __stdcall
+ UnmapViewOfFile(void *);
+}
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_MEMORY_HPP
diff --git a/3party/boost/boost/detail/winapi/process.hpp b/3party/boost/boost/detail/winapi/process.hpp
new file mode 100644
index 0000000000..de287b15fc
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/process.hpp
@@ -0,0 +1,36 @@
+// process.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_PROCESS_HPP
+#define BOOST_DETAIL_WINAPI_PROCESS_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+#include <boost/detail/winapi/GetCurrentProcess.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::GetCurrentProcessId;
+#else
+# ifndef UNDER_CE
+extern "C" {
+ __declspec(dllimport) DWORD_ WINAPI GetCurrentProcessId(void);
+}
+# else
+ using ::GetCurrentProcessId;
+# endif
+#endif
+}
+}
+}
+#endif // BOOST_DETAIL_WINAPI_PROCESS_HPP
diff --git a/3party/boost/boost/detail/winapi/security.hpp b/3party/boost/boost/detail/winapi/security.hpp
new file mode 100644
index 0000000000..79925c6c67
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/security.hpp
@@ -0,0 +1,65 @@
+// security.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_SECURITY_HPP
+#define BOOST_DETAIL_WINAPI_SECURITY_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+typedef ::SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES_;
+typedef ::PSECURITY_ATTRIBUTES PSECURITY_ATTRIBUTES_;
+typedef ::LPSECURITY_ATTRIBUTES LPSECURITY_ATTRIBUTES_;
+
+#else
+extern "C" {
+ struct SECURITY_DESCRIPTOR_;
+ typedef SECURITY_DESCRIPTOR_* PSECURITY_DESCRIPTOR_;
+ typedef struct _ACL {
+ BYTE_ AclRevision;
+ BYTE_ Sbz1;
+ WORD_ AclSize;
+ WORD_ AceCount;
+ WORD_ Sbz2;
+ } ACL_, *PACL_;
+
+ typedef struct _SECURITY_ATTRIBUTES {
+ DWORD_ nLength;
+ LPVOID_ lpSecurityDescriptor;
+ BOOL_ bInheritHandle;
+ } SECURITY_ATTRIBUTES_, *PSECURITY_ATTRIBUTES_, *LPSECURITY_ATTRIBUTES_;
+
+ __declspec(dllimport) BOOL_ __stdcall
+ InitializeSecurityDescriptor(
+ PSECURITY_DESCRIPTOR_ pSecurityDescriptor,
+ DWORD_ dwRevision
+ );
+ __declspec(dllimport) BOOL_ __stdcall
+ SetSecurityDescriptorDacl(
+ PSECURITY_DESCRIPTOR_ pSecurityDescriptor,
+ BOOL_ bDaclPresent,
+ PACL_ pDacl,
+ BOOL_ bDaclDefaulted
+ );
+}
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_SECURITY_HPP
diff --git a/3party/boost/boost/detail/winapi/synchronization.hpp b/3party/boost/boost/detail/winapi/synchronization.hpp
new file mode 100644
index 0000000000..b9497cbf7c
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/synchronization.hpp
@@ -0,0 +1,293 @@
+// synchronizaion.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_SYNCHRONIZATION_HPP
+#define BOOST_DETAIL_WINAPI_SYNCHRONIZATION_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+ typedef ::CRITICAL_SECTION CRITICAL_SECTION_;
+ typedef ::PAPCFUNC PAPCFUNC_;
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ typedef ::INIT_ONCE INIT_ONCE_;
+ typedef ::PINIT_ONCE PINIT_ONCE_;
+ typedef ::LPINIT_ONCE LPINIT_ONCE_;
+ #define BOOST_DETAIL_WINAPI_INIT_ONCE_STATIC_INIT INIT_ONCE_STATIC_INIT
+ typedef ::PINIT_ONCE_FN PINIT_ONCE_FN_;
+
+ typedef ::SRWLOCK SRWLOCK_;
+ typedef ::PSRWLOCK PSRWLOCK_;
+ #define BOOST_DETAIL_WINAPI_SRWLOCK_INIT SRWLOCK_INIT
+
+ typedef ::CONDITION_VARIABLE CONDITION_VARIABLE_;
+ typedef ::PCONDITION_VARIABLE PCONDITION_VARIABLE_;
+ #define BOOST_DETAIL_WINAPI_CONDITION_VARIABLE_INIT CONDITION_VARIABLE_INIT
+#endif
+
+ using ::InitializeCriticalSection;
+#if BOOST_USE_WINAPI_VERSION >= 0x0403
+ using ::InitializeCriticalSectionAndSpinCount;
+#endif
+ using ::EnterCriticalSection;
+ using ::TryEnterCriticalSection;
+ using ::LeaveCriticalSection;
+ using ::DeleteCriticalSection;
+
+# ifdef BOOST_NO_ANSI_APIS
+ using ::CreateMutexW;
+ using ::OpenMutexW;
+ using ::CreateEventW;
+ using ::OpenEventW;
+ using ::CreateSemaphoreW;
+ using ::OpenSemaphoreW;
+# else
+ using ::CreateMutexA;
+ using ::OpenMutexA;
+ using ::CreateEventA;
+ using ::OpenEventA;
+ using ::CreateSemaphoreA;
+ using ::OpenSemaphoreA;
+# endif
+ using ::ReleaseMutex;
+ using ::ReleaseSemaphore;
+ using ::SetEvent;
+ using ::ResetEvent;
+ using ::WaitForMultipleObjects;
+ using ::WaitForSingleObject;
+ using ::QueueUserAPC;
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ using ::InitOnceInitialize;
+ using ::InitOnceExecuteOnce;
+ using ::InitOnceBeginInitialize;
+ using ::InitOnceComplete;
+
+ using ::InitializeSRWLock;
+ using ::AcquireSRWLockExclusive;
+ using ::TryAcquireSRWLockExclusive;
+ using ::ReleaseSRWLockExclusive;
+ using ::AcquireSRWLockShared;
+ using ::TryAcquireSRWLockShared;
+ using ::ReleaseSRWLockShared;
+
+ using ::InitializeConditionVariable;
+ using ::WakeConditionVariable;
+ using ::WakeAllConditionVariable;
+ using ::SleepConditionVariableCS;
+ using ::SleepConditionVariableSRW;
+#endif
+
+ const DWORD_ infinite = INFINITE;
+ const DWORD_ wait_abandoned = WAIT_ABANDONED;
+ const DWORD_ wait_object_0 = WAIT_OBJECT_0;
+ const DWORD_ wait_timeout = WAIT_TIMEOUT;
+ const DWORD_ wait_failed = WAIT_FAILED;
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ const DWORD_ init_once_async = INIT_ONCE_ASYNC;
+ const DWORD_ init_once_check_only = INIT_ONCE_CHECK_ONLY;
+ const DWORD_ init_once_init_failed = INIT_ONCE_INIT_FAILED;
+ const DWORD_ init_once_ctx_reserved_bits = INIT_ONCE_CTX_RESERVED_BITS;
+
+ const ULONG_ condition_variable_lockmode_shared = CONDITION_VARIABLE_LOCKMODE_SHARED;
+#endif
+
+#else // defined( BOOST_USE_WINDOWS_H )
+
+extern "C" {
+
+ typedef struct CRITICAL_SECTION_
+ {
+ struct critical_section_debug * DebugInfo;
+ long LockCount;
+ long RecursionCount;
+ void * OwningThread;
+ void * LockSemaphore;
+ #if defined(_WIN64)
+ unsigned __int64 SpinCount;
+ #else
+ unsigned long SpinCount;
+ #endif
+ }
+ *PCRITICAL_SECTION_;
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ typedef union INIT_ONCE_
+ {
+ PVOID_ Ptr;
+ }
+ *PINIT_ONCE_, *LPINIT_ONCE_;
+ #define BOOST_DETAIL_WINAPI_INIT_ONCE_STATIC_INIT {0}
+ typedef BOOL_ (WINAPI *PINIT_ONCE_FN_)(PINIT_ONCE_ InitOnce, PVOID_ Parameter, PVOID_ *Context);
+
+ typedef struct SRWLOCK_
+ {
+ PVOID_ Ptr;
+ }
+ * PSRWLOCK_;
+ #define BOOST_DETAIL_WINAPI_SRWLOCK_INIT {0}
+
+ typedef struct CONDITION_VARIABLE_
+ {
+ PVOID_ Ptr;
+ }
+ * PCONDITION_VARIABLE_;
+ #define BOOST_DETAIL_WINAPI_CONDITION_VARIABLE_INIT {0}
+
+#endif
+
+ __declspec(dllimport) void WINAPI
+ InitializeCriticalSection(PCRITICAL_SECTION_);
+#if BOOST_USE_WINAPI_VERSION >= 0x0403
+ __declspec(dllimport) BOOL_ WINAPI
+ InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION_* lpCS, DWORD_ dwSpinCount);
+#endif
+ __declspec(dllimport) void WINAPI
+ EnterCriticalSection(PCRITICAL_SECTION_);
+ __declspec(dllimport) BOOL_ WINAPI
+ TryEnterCriticalSection(PCRITICAL_SECTION_);
+ __declspec(dllimport) void WINAPI
+ LeaveCriticalSection(PCRITICAL_SECTION_);
+ __declspec(dllimport) void WINAPI
+ DeleteCriticalSection(PCRITICAL_SECTION_);
+
+ struct _SECURITY_ATTRIBUTES;
+# ifdef BOOST_NO_ANSI_APIS
+ __declspec(dllimport) HANDLE_ WINAPI
+ CreateMutexW(_SECURITY_ATTRIBUTES*, BOOL_, LPCWSTR_);
+ __declspec(dllimport) HANDLE_ WINAPI
+ OpenMutexW(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName);
+ __declspec(dllimport) HANDLE_ WINAPI
+ CreateSemaphoreW(_SECURITY_ATTRIBUTES*, LONG_, LONG_, LPCWSTR_);
+ __declspec(dllimport) HANDLE_ WINAPI
+ OpenSemaphoreW(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName);
+ __declspec(dllimport) HANDLE_ WINAPI
+ CreateEventW(_SECURITY_ATTRIBUTES*, BOOL_, BOOL_, LPCWSTR_);
+ __declspec(dllimport) HANDLE_ WINAPI
+ OpenEventW(DWORD_, BOOL_, LPCWSTR_);
+# else
+ __declspec(dllimport) HANDLE_ WINAPI
+ CreateMutexA(_SECURITY_ATTRIBUTES*, BOOL_, LPCSTR_);
+ __declspec(dllimport) HANDLE_ WINAPI
+ OpenMutexA(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName);
+ __declspec(dllimport) HANDLE_ WINAPI
+ CreateSemaphoreA(_SECURITY_ATTRIBUTES*, LONG_, LONG_, LPCSTR_);
+ __declspec(dllimport) HANDLE_ WINAPI
+ OpenSemaphoreA(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName);
+ __declspec(dllimport) HANDLE_ WINAPI
+ CreateEventA(_SECURITY_ATTRIBUTES*, BOOL_, BOOL_, LPCSTR_);
+ __declspec(dllimport) HANDLE_ WINAPI
+ OpenEventA(DWORD_, BOOL_, LPCSTR_);
+# endif
+ __declspec(dllimport) BOOL_ WINAPI
+ ReleaseMutex(HANDLE_);
+ __declspec(dllimport) DWORD_ WINAPI
+ WaitForSingleObject(HANDLE_, DWORD_);
+ __declspec(dllimport) DWORD_ WINAPI
+ WaitForMultipleObjects(DWORD_ nCount,
+ HANDLE_ const * lpHandles,
+ BOOL_ bWaitAll,
+ DWORD_ dwMilliseconds);
+ __declspec(dllimport) BOOL_ WINAPI
+ ReleaseSemaphore(HANDLE_, LONG_, LONG_*);
+ __declspec(dllimport) BOOL_ WINAPI
+ SetEvent(HANDLE_);
+ __declspec(dllimport) BOOL_ WINAPI
+ ResetEvent(HANDLE_);
+
+ typedef void (__stdcall *PAPCFUNC_)(ULONG_PTR_);
+ __declspec(dllimport) DWORD_ WINAPI
+ QueueUserAPC(PAPCFUNC_, HANDLE_, ULONG_PTR_);
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ __declspec(dllimport) void WINAPI InitOnceInitialize(PINIT_ONCE_);
+ __declspec(dllimport) BOOL_ WINAPI InitOnceExecuteOnce(PINIT_ONCE_ InitOnce, PINIT_ONCE_FN_ InitFn, PVOID_ Parameter, LPVOID_* Context);
+ __declspec(dllimport) BOOL_ WINAPI InitOnceBeginInitialize(LPINIT_ONCE_ lpInitOnce, DWORD_ dwFlags, BOOL_* fPending, LPVOID_* lpContext);
+ __declspec(dllimport) BOOL_ WINAPI InitOnceComplete(LPINIT_ONCE_ lpInitOnce, DWORD_ dwFlags, LPVOID_* lpContext);
+
+
+ __declspec(dllimport) void WINAPI InitializeSRWLock(PSRWLOCK_ SRWLock);
+ __declspec(dllimport) void WINAPI AcquireSRWLockExclusive(PSRWLOCK_ SRWLock);
+ __declspec(dllimport) BOOLEAN_ WINAPI TryAcquireSRWLockExclusive(PSRWLOCK_ SRWLock);
+ __declspec(dllimport) void WINAPI ReleaseSRWLockExclusive(PSRWLOCK_ SRWLock);
+ __declspec(dllimport) void WINAPI AcquireSRWLockShared(PSRWLOCK_ SRWLock);
+ __declspec(dllimport) BOOLEAN_ WINAPI TryAcquireSRWLockShared(PSRWLOCK_ SRWLock);
+ __declspec(dllimport) void WINAPI ReleaseSRWLockShared(PSRWLOCK_ SRWLock);
+
+ __declspec(dllimport) void WINAPI InitializeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable);
+ __declspec(dllimport) void WINAPI WakeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable);
+ __declspec(dllimport) void WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE_ ConditionVariable);
+ __declspec(dllimport) BOOL_ WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE_ ConditionVariable, PCRITICAL_SECTION_ CriticalSection, DWORD_ dwMilliseconds);
+ __declspec(dllimport) BOOL_ WINAPI SleepConditionVariableSRW(PCONDITION_VARIABLE_ ConditionVariable, PSRWLOCK_ SRWLock, DWORD_ dwMilliseconds, ULONG_ Flags);
+#endif
+
+} // extern "C"
+
+const DWORD_ infinite = (DWORD_)0xFFFFFFFF;
+const DWORD_ wait_abandoned = 0x00000080L;
+const DWORD_ wait_object_0 = 0x00000000L;
+const DWORD_ wait_timeout = 0x00000102L;
+const DWORD_ wait_failed = (DWORD_)0xFFFFFFFF;
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+const DWORD_ init_once_async = 0x00000002UL;
+const DWORD_ init_once_check_only = 0x00000001UL;
+const DWORD_ init_once_init_failed = 0x00000004UL;
+const DWORD_ init_once_ctx_reserved_bits = 2;
+
+const ULONG_ condition_variable_lockmode_shared = 0x00000001;
+#endif
+
+#endif // defined( BOOST_USE_WINDOWS_H )
+
+const DWORD_ max_non_infinite_wait = (DWORD_)0xFFFFFFFE;
+
+BOOST_FORCEINLINE HANDLE_ create_anonymous_mutex(_SECURITY_ATTRIBUTES* lpAttributes, BOOL_ bInitialOwner)
+{
+#ifdef BOOST_NO_ANSI_APIS
+ return CreateMutexW(lpAttributes, bInitialOwner, 0);
+#else
+ return CreateMutexA(lpAttributes, bInitialOwner, 0);
+#endif
+}
+
+BOOST_FORCEINLINE HANDLE_ create_anonymous_semaphore(_SECURITY_ATTRIBUTES* lpAttributes, LONG_ lInitialCount, LONG_ lMaximumCount)
+{
+#ifdef BOOST_NO_ANSI_APIS
+ return CreateSemaphoreW(lpAttributes, lInitialCount, lMaximumCount, 0);
+#else
+ return CreateSemaphoreA(lpAttributes, lInitialCount, lMaximumCount, 0);
+#endif
+}
+
+BOOST_FORCEINLINE HANDLE_ create_anonymous_event(_SECURITY_ATTRIBUTES* lpAttributes, BOOL_ bManualReset, BOOL_ bInitialState)
+{
+#ifdef BOOST_NO_ANSI_APIS
+ return CreateEventW(lpAttributes, bManualReset, bInitialState, 0);
+#else
+ return CreateEventA(lpAttributes, bManualReset, bInitialState, 0);
+#endif
+}
+
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_SYNCHRONIZATION_HPP
diff --git a/3party/boost/boost/detail/winapi/system.hpp b/3party/boost/boost/detail/winapi/system.hpp
new file mode 100644
index 0000000000..2c2d82a8a9
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/system.hpp
@@ -0,0 +1,62 @@
+// system.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_SYSTEM_HPP
+#define BOOST_DETAIL_WINAPI_SYSTEM_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+#if defined( BOOST_USE_WINDOWS_H )
+ typedef ::SYSTEM_INFO SYSTEM_INFO_;
+# if BOOST_USE_WINAPI_VERSION < BOOST_WINAPI_VERSION_WINXP
+extern "C" __declspec(dllimport) void __stdcall GetSystemInfo (struct system_info *);
+# else
+extern "C" __declspec(dllimport) void __stdcall GetNativeSystemInfo (struct system_info *);
+# endif
+#else
+extern "C" {
+ typedef struct _SYSTEM_INFO {
+ union {
+ DWORD_ dwOemId;
+ struct {
+ WORD_ wProcessorArchitecture;
+ WORD_ wReserved;
+ } dummy;
+ } ;
+ DWORD_ dwPageSize;
+ LPVOID_ lpMinimumApplicationAddress;
+ LPVOID_ lpMaximumApplicationAddress;
+ DWORD_PTR_ dwActiveProcessorMask;
+ DWORD_ dwNumberOfProcessors;
+ DWORD_ dwProcessorType;
+ DWORD_ dwAllocationGranularity;
+ WORD_ wProcessorLevel;
+ WORD_ wProcessorRevision;
+ } SYSTEM_INFO_;
+
+# if BOOST_USE_WINAPI_VERSION < BOOST_WINAPI_VERSION_WINXP
+ __declspec(dllimport) void __stdcall
+ GetSystemInfo (struct system_info *);
+# else
+ __declspec(dllimport) void __stdcall
+ GetNativeSystemInfo (struct system_info *);
+# endif
+}
+#endif
+}
+}
+}
+#endif // BOOST_DETAIL_WINAPI_SYSTEM_HPP
diff --git a/3party/boost/boost/detail/winapi/thread.hpp b/3party/boost/boost/detail/winapi/thread.hpp
new file mode 100644
index 0000000000..ee0dac6242
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/thread.hpp
@@ -0,0 +1,49 @@
+// thread.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_THREAD_HPP
+#define BOOST_DETAIL_WINAPI_THREAD_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+#include <boost/detail/winapi/GetCurrentThread.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::GetCurrentThreadId;
+ using ::SleepEx;
+ using ::Sleep;
+ using ::SwitchToThread;
+#else
+extern "C" {
+# ifndef UNDER_CE
+ __declspec(dllimport) DWORD_ WINAPI GetCurrentThreadId(void);
+ __declspec(dllimport) DWORD_ WINAPI SleepEx(DWORD_, BOOL_);
+ __declspec(dllimport) void WINAPI Sleep(DWORD_);
+ __declspec(dllimport) BOOL_ WINAPI SwitchToThread(void);
+#else
+ using ::GetCurrentThreadId;
+ using ::SleepEx;
+ using ::Sleep;
+ using ::SwitchToThread;
+#endif
+}
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_THREAD_HPP
diff --git a/3party/boost/boost/detail/winapi/thread_pool.hpp b/3party/boost/boost/detail/winapi/thread_pool.hpp
new file mode 100644
index 0000000000..57059dc1b2
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/thread_pool.hpp
@@ -0,0 +1,96 @@
+// thread_pool.hpp --------------------------------------------------------------//
+
+// Copyright 2013 Andrey Semashev
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_THREAD_POOL_HPP
+#define BOOST_DETAIL_WINAPI_THREAD_POOL_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+
+typedef ::WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACKFUNC_;
+typedef ::WAITORTIMERCALLBACK WAITORTIMERCALLBACK_;
+
+using ::RegisterWaitForSingleObject;
+using ::UnregisterWait;
+using ::UnregisterWaitEx;
+
+const ULONG_ wt_execute_default = WT_EXECUTEDEFAULT;
+const ULONG_ wt_execute_in_io_thread = WT_EXECUTEINIOTHREAD;
+const ULONG_ wt_execute_in_ui_thread = WT_EXECUTEINUITHREAD;
+const ULONG_ wt_execute_in_wait_thread = WT_EXECUTEINWAITTHREAD;
+const ULONG_ wt_execute_only_once = WT_EXECUTEONLYONCE;
+const ULONG_ wt_execute_in_timer_thread = WT_EXECUTEINTIMERTHREAD;
+const ULONG_ wt_execute_long_function = WT_EXECUTELONGFUNCTION;
+const ULONG_ wt_execute_in_persistent_io_thread = WT_EXECUTEINPERSISTENTIOTHREAD;
+const ULONG_ wt_execute_in_persistent_thread = WT_EXECUTEINPERSISTENTTHREAD;
+const ULONG_ wt_transfer_impersonation = WT_TRANSFER_IMPERSONATION;
+
+inline ULONG_ wt_set_max_threadpool_threads(ULONG_ flags, ULONG_ limit)
+{
+ return WT_SET_MAX_THREADPOOL_THREADS(flags, limit);
+}
+
+#else
+
+extern "C" {
+
+typedef void (NTAPI* WAITORTIMERCALLBACKFUNC_) (PVOID_, BOOLEAN_);
+typedef WAITORTIMERCALLBACKFUNC_ WAITORTIMERCALLBACK_;
+
+__declspec(dllimport) BOOL_ WINAPI RegisterWaitForSingleObject
+(
+ HANDLE_* phNewWaitObject,
+ HANDLE_ hObject,
+ WAITORTIMERCALLBACK_ Callback,
+ PVOID_ Context,
+ ULONG_ dwMilliseconds,
+ ULONG_ dwFlags
+);
+
+__declspec(dllimport) BOOL_ WINAPI UnregisterWait(HANDLE_ WaitHandle);
+__declspec(dllimport) BOOL_ WINAPI UnregisterWaitEx(HANDLE_ WaitHandle, HANDLE_ CompletionEvent);
+
+} // extern "C"
+
+const ULONG_ wt_execute_default = 0x00000000;
+const ULONG_ wt_execute_in_io_thread = 0x00000001;
+const ULONG_ wt_execute_in_ui_thread = 0x00000002;
+const ULONG_ wt_execute_in_wait_thread = 0x00000004;
+const ULONG_ wt_execute_only_once = 0x00000008;
+const ULONG_ wt_execute_in_timer_thread = 0x00000020;
+const ULONG_ wt_execute_long_function = 0x00000010;
+const ULONG_ wt_execute_in_persistent_io_thread = 0x00000040;
+const ULONG_ wt_execute_in_persistent_thread = 0x00000080;
+const ULONG_ wt_transfer_impersonation = 0x00000100;
+
+inline ULONG_ wt_set_max_threadpool_threads(ULONG_ flags, ULONG_ limit)
+{
+ return flags | (limit << 16);
+}
+
+#endif
+}
+}
+}
+
+#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K
+
+#endif // BOOST_DETAIL_WINAPI_THREAD_POOL_HPP
diff --git a/3party/boost/boost/detail/winapi/time.hpp b/3party/boost/boost/detail/winapi/time.hpp
new file mode 100644
index 0000000000..6a6b447117
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/time.hpp
@@ -0,0 +1,105 @@
+// time.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_TIME_HPP
+#define BOOST_DETAIL_WINAPI_TIME_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+#include <boost/predef.h>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+namespace detail {
+namespace winapi {
+
+#if defined( BOOST_USE_WINDOWS_H )
+
+ typedef FILETIME FILETIME_;
+ typedef PFILETIME PFILETIME_;
+ typedef LPFILETIME LPFILETIME_;
+
+ typedef SYSTEMTIME SYSTEMTIME_;
+ typedef SYSTEMTIME* PSYSTEMTIME_;
+
+ #ifdef BOOST_HAS_GETSYSTEMTIMEASFILETIME // Windows CE does not define GetSystemTimeAsFileTime
+ using ::GetSystemTimeAsFileTime;
+ #endif
+ #if BOOST_PLAT_WINDOWS_DESKTOP
+ using ::FileTimeToLocalFileTime;
+ #endif
+ using ::GetSystemTime;
+ using ::SystemTimeToFileTime;
+
+ #if BOOST_PLAT_WINDOWS_DESKTOP
+ using ::GetTickCount;
+ #endif
+ #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ using ::GetTickCount64;
+ #endif
+
+#else
+
+extern "C" {
+ typedef struct _FILETIME {
+ DWORD_ dwLowDateTime;
+ DWORD_ dwHighDateTime;
+ } FILETIME_, *PFILETIME_, *LPFILETIME_;
+
+ typedef struct _SYSTEMTIME {
+ WORD_ wYear;
+ WORD_ wMonth;
+ WORD_ wDayOfWeek;
+ WORD_ wDay;
+ WORD_ wHour;
+ WORD_ wMinute;
+ WORD_ wSecond;
+ WORD_ wMilliseconds;
+ } SYSTEMTIME_, *PSYSTEMTIME_;
+
+ #ifdef BOOST_HAS_GETSYSTEMTIMEASFILETIME // Windows CE does not define GetSystemTimeAsFileTime
+ __declspec(dllimport) void WINAPI
+ GetSystemTimeAsFileTime(FILETIME_* lpFileTime);
+ #endif
+ __declspec(dllimport) int WINAPI
+ FileTimeToLocalFileTime(const FILETIME_* lpFileTime,
+ FILETIME_* lpLocalFileTime);
+ __declspec(dllimport) void WINAPI
+ GetSystemTime(SYSTEMTIME_* lpSystemTime);
+ __declspec(dllimport) int WINAPI
+ SystemTimeToFileTime(const SYSTEMTIME_* lpSystemTime,
+ FILETIME_* lpFileTime);
+ #if BOOST_PLAT_WINDOWS_DESKTOP
+ __declspec(dllimport) DWORD_ WINAPI
+ GetTickCount();
+ #endif
+ #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ __declspec(dllimport) ULONGLONG_ WINAPI
+ GetTickCount64();
+ #endif
+}
+
+#endif
+
+#ifndef BOOST_HAS_GETSYSTEMTIMEASFILETIME
+inline void WINAPI GetSystemTimeAsFileTime(FILETIME_* lpFileTime)
+{
+ SYSTEMTIME_ st;
+ GetSystemTime(&st);
+ SystemTimeToFileTime(&st, lpFileTime);
+}
+#endif
+
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_TIME_HPP
diff --git a/3party/boost/boost/detail/winapi/timers.hpp b/3party/boost/boost/detail/winapi/timers.hpp
new file mode 100644
index 0000000000..04c6dfbc41
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/timers.hpp
@@ -0,0 +1,44 @@
+// timers.hpp --------------------------------------------------------------//
+
+// Copyright 2010 Vicente J. Botet Escriba
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_TIMERS_HPP
+#define BOOST_DETAIL_WINAPI_TIMERS_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+ using ::QueryPerformanceCounter;
+ using ::QueryPerformanceFrequency;
+#else
+extern "C" {
+ __declspec(dllimport) BOOL_ WINAPI
+ QueryPerformanceCounter(
+ LARGE_INTEGER_ *lpPerformanceCount
+ );
+
+ __declspec(dllimport) BOOL_ WINAPI
+ QueryPerformanceFrequency(
+ LARGE_INTEGER_ *lpFrequency
+ );
+}
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_TIMERS_HPP
diff --git a/3party/boost/boost/detail/winapi/tls.hpp b/3party/boost/boost/detail/winapi/tls.hpp
new file mode 100644
index 0000000000..d948693cc9
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/tls.hpp
@@ -0,0 +1,49 @@
+// tls.hpp --------------------------------------------------------------//
+
+// Copyright 2013 Andrey Semashev
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_TLS_HPP
+#define BOOST_DETAIL_WINAPI_TLS_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+
+using ::TlsAlloc;
+using ::TlsGetValue;
+using ::TlsSetValue;
+using ::TlsFree;
+
+const DWORD_ tls_out_of_indexes = TLS_OUT_OF_INDEXES;
+
+#else
+
+extern "C" {
+__declspec(dllimport) DWORD_ WINAPI TlsAlloc(void);
+__declspec(dllimport) LPVOID_ WINAPI TlsGetValue(DWORD_ dwTlsIndex);
+__declspec(dllimport) BOOL_ WINAPI TlsSetValue(DWORD_ dwTlsIndex, LPVOID_ lpTlsValue);
+__declspec(dllimport) BOOL_ WINAPI TlsFree(DWORD_ dwTlsIndex);
+}
+
+const DWORD_ tls_out_of_indexes = 0xFFFFFFFF;
+
+#endif
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_TLS_HPP
diff --git a/3party/boost/boost/detail/winapi/waitable_timer.hpp b/3party/boost/boost/detail/winapi/waitable_timer.hpp
new file mode 100644
index 0000000000..52a7338a20
--- /dev/null
+++ b/3party/boost/boost/detail/winapi/waitable_timer.hpp
@@ -0,0 +1,110 @@
+// waitable_timer.hpp --------------------------------------------------------------//
+
+// Copyright 2013 Andrey Semashev
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP
+#define BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost
+{
+namespace detail
+{
+namespace winapi
+{
+#if defined( BOOST_USE_WINDOWS_H )
+
+typedef ::PTIMERAPCROUTINE PTIMERAPCROUTINE_;
+
+# ifdef BOOST_NO_ANSI_APIS
+using ::CreateWaitableTimerW;
+using ::OpenWaitableTimerW;
+# else
+using ::CreateWaitableTimerA;
+using ::OpenWaitableTimerA;
+# endif
+using ::SetWaitableTimer;
+using ::CancelWaitableTimer;
+
+#else
+
+extern "C" {
+
+struct _SECURITY_ATTRIBUTES;
+
+typedef void (WINAPI* PTIMERAPCROUTINE_)
+(
+ LPVOID_ lpArgToCompletionRoutine,
+ DWORD_ dwTimerLowValue,
+ DWORD_ dwTimerHighValue
+);
+
+# ifdef BOOST_NO_ANSI_APIS
+__declspec(dllimport) HANDLE_ WINAPI CreateWaitableTimerW
+(
+ _SECURITY_ATTRIBUTES* lpTimerAttributes,
+ BOOL_ bManualReset,
+ LPCWSTR_ lpTimerName
+);
+
+__declspec(dllimport) HANDLE_ WINAPI OpenWaitableTimerW
+(
+ DWORD_ dwDesiredAccess,
+ BOOL_ bInheritHandle,
+ LPCWSTR_ lpTimerName
+);
+# else
+__declspec(dllimport) HANDLE_ WINAPI CreateWaitableTimerA
+(
+ _SECURITY_ATTRIBUTES* lpTimerAttributes,
+ BOOL_ bManualReset,
+ LPCSTR_ lpTimerName
+);
+
+__declspec(dllimport) HANDLE_ WINAPI OpenWaitableTimerA
+(
+ DWORD_ dwDesiredAccess,
+ BOOL_ bInheritHandle,
+ LPCSTR_ lpTimerName
+);
+# endif
+
+__declspec(dllimport) BOOL_ WINAPI SetWaitableTimer
+(
+ HANDLE_ hTimer,
+ const LARGE_INTEGER_ *lpDueTime,
+ LONG_ lPeriod,
+ PTIMERAPCROUTINE_ pfnCompletionRoutine,
+ LPVOID_ lpArgToCompletionRoutine,
+ BOOL_ fResume
+);
+
+__declspec(dllimport) BOOL_ WINAPI CancelWaitableTimer(HANDLE_ hTimer);
+
+}
+
+#endif
+
+BOOST_FORCEINLINE HANDLE_ create_anonymous_waitable_timer(_SECURITY_ATTRIBUTES* lpTimerAttributes, BOOL_ bManualReset)
+{
+#ifdef BOOST_NO_ANSI_APIS
+ return CreateWaitableTimerW(lpTimerAttributes, bManualReset, 0);
+#else
+ return CreateWaitableTimerA(lpTimerAttributes, bManualReset, 0);
+#endif
+}
+
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP
diff --git a/3party/boost/boost/dynamic_bitset/dynamic_bitset.hpp b/3party/boost/boost/dynamic_bitset/dynamic_bitset.hpp
index 930e4b2dab..4d6011c2e9 100644
--- a/3party/boost/boost/dynamic_bitset/dynamic_bitset.hpp
+++ b/3party/boost/boost/dynamic_bitset/dynamic_bitset.hpp
@@ -2,6 +2,10 @@
//
// Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
// Copyright (c) 2003-2006, 2008 Gennaro Prota
+// Copyright (c) 2014 Ahmed Charles
+//
+// Copyright (c) 2014 Glen Joseph Fernandes
+// glenfe at live dot com
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -36,9 +40,13 @@
#include "boost/dynamic_bitset_fwd.hpp"
#include "boost/detail/dynamic_bitset.hpp"
#include "boost/detail/iterator.hpp" // used to implement append(Iter, Iter)
-#include "boost/static_assert.hpp"
+#include "boost/move/move.hpp"
#include "boost/limits.hpp"
#include "boost/pending/lowest_bit.hpp"
+#include "boost/static_assert.hpp"
+#include "boost/utility/addressof.hpp"
+#include "boost/detail/no_exceptions_support.hpp"
+#include "boost/throw_exception.hpp"
namespace boost {
@@ -46,21 +54,22 @@ namespace boost {
template <typename Block, typename Allocator>
class dynamic_bitset
{
- // Portability note: member function templates are defined inside
- // this class definition to avoid problems with VC++. Similarly,
- // with the member functions of nested classes.
- //
- // [October 2008: the note above is mostly historical; new versions
- // of VC++ are likely able to digest a more drinking form of the
- // code; but changing it now is probably not worth the risks...]
+ // Portability note: member function templates are defined inside
+ // this class definition to avoid problems with VC++. Similarly,
+ // with the member functions of nested classes.
+ //
+ // [October 2008: the note above is mostly historical; new versions
+ // of VC++ are likely able to digest a more drinking form of the
+ // code; but changing it now is probably not worth the risks...]
- BOOST_STATIC_ASSERT((bool)detail::dynamic_bitset_impl::allowed_block_type<Block>::value);
+ BOOST_STATIC_ASSERT((bool)detail::dynamic_bitset_impl::allowed_block_type<Block>::value);
+ typedef std::vector<Block, Allocator> buffer_type;
public:
typedef Block block_type;
typedef Allocator allocator_type;
typedef std::size_t size_type;
- typedef block_type block_width_type;
+ typedef typename buffer_type::size_type block_width_type;
BOOST_STATIC_CONSTANT(block_width_type, bits_per_block = (std::numeric_limits<Block>::digits));
BOOST_STATIC_CONSTANT(size_type, npos = static_cast<size_type>(-1));
@@ -207,6 +216,11 @@ public:
void swap(dynamic_bitset& b);
dynamic_bitset& operator=(const dynamic_bitset& b);
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ dynamic_bitset(dynamic_bitset&& src);
+ dynamic_bitset& operator=(dynamic_bitset&& src);
+#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
+
allocator_type get_allocator() const;
// size changing operations
@@ -270,10 +284,12 @@ public:
dynamic_bitset& flip(size_type n);
dynamic_bitset& flip();
bool test(size_type n) const;
+ bool test_set(size_type n, bool val = true);
+ bool all() const;
bool any() const;
bool none() const;
dynamic_bitset operator~() const;
- size_type count() const;
+ size_type count() const BOOST_NOEXCEPT;
// subscript
reference operator[](size_type pos) {
@@ -283,10 +299,10 @@ public:
unsigned long to_ulong() const;
- size_type size() const;
- size_type num_blocks() const;
- size_type max_size() const;
- bool empty() const;
+ size_type size() const BOOST_NOEXCEPT;
+ size_type num_blocks() const BOOST_NOEXCEPT;
+ size_type max_size() const BOOST_NOEXCEPT;
+ bool empty() const BOOST_NOEXCEPT;
bool is_subset_of(const dynamic_bitset& a) const;
bool is_proper_subset_of(const dynamic_bitset& a) const;
@@ -330,17 +346,16 @@ public:
private:
BOOST_STATIC_CONSTANT(block_width_type, ulong_width = std::numeric_limits<unsigned long>::digits);
- typedef std::vector<block_type, allocator_type> buffer_type;
void m_zero_unused_bits();
bool m_check_invariants() const;
size_type m_do_find_from(size_type first_block) const;
- block_width_type count_extra_bits() const { return bit_index(size()); }
- static size_type block_index(size_type pos) { return pos / bits_per_block; }
- static block_width_type bit_index(size_type pos) { return static_cast<block_width_type>(pos % bits_per_block); }
- static Block bit_mask(size_type pos) { return Block(1) << bit_index(pos); }
+ block_width_type count_extra_bits() const BOOST_NOEXCEPT { return bit_index(size()); }
+ static size_type block_index(size_type pos) BOOST_NOEXCEPT { return pos / bits_per_block; }
+ static block_width_type bit_index(size_type pos) BOOST_NOEXCEPT { return static_cast<block_width_type>(pos % bits_per_block); }
+ static Block bit_mask(size_type pos) BOOST_NOEXCEPT { return Block(1) << bit_index(pos); }
template <typename CharT, typename Traits, typename Alloc>
void init_from_string(const std::basic_string<CharT, Traits, Alloc>& s,
@@ -633,6 +648,34 @@ operator=(const dynamic_bitset<Block, Allocator>& b)
return *this;
}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template <typename Block, typename Allocator>
+inline dynamic_bitset<Block, Allocator>::
+dynamic_bitset(dynamic_bitset<Block, Allocator>&& b)
+ : m_bits(boost::move(b.m_bits)), m_num_bits(boost::move(b.m_num_bits))
+{
+ // Required so that assert(m_check_invariants()); works.
+ assert((b.m_bits = buffer_type()).empty());
+ b.m_num_bits = 0;
+}
+
+template <typename Block, typename Allocator>
+inline dynamic_bitset<Block, Allocator>& dynamic_bitset<Block, Allocator>::
+operator=(dynamic_bitset<Block, Allocator>&& b)
+{
+ if (boost::addressof(b) == this) { return *this; }
+
+ m_bits = boost::move(b.m_bits);
+ m_num_bits = boost::move(b.m_num_bits);
+ // Required so that assert(m_check_invariants()); works.
+ assert((b.m_bits = buffer_type()).empty());
+ b.m_num_bits = 0;
+ return *this;
+}
+
+#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
+
template <typename Block, typename Allocator>
inline typename dynamic_bitset<Block, Allocator>::allocator_type
dynamic_bitset<Block, Allocator>::get_allocator() const
@@ -807,7 +850,7 @@ dynamic_bitset<Block, Allocator>::operator<<=(size_type n)
}
// zero out div blocks at the less significant end
- std::fill_n(b, div, static_cast<block_type>(0));
+ std::fill_n(m_bits.begin(), div, static_cast<block_type>(0));
// zero out any 1 bit that flowed into the unused part
m_zero_unused_bits(); // thanks to Lester Gong
@@ -860,7 +903,7 @@ dynamic_bitset<B, A> & dynamic_bitset<B, A>::operator>>=(size_type n) {
// div blocks are zero filled at the most significant end
- std::fill_n(b + (num_blocks()-div), div, static_cast<block_type>(0));
+ std::fill_n(m_bits.begin() + (num_blocks()-div), div, static_cast<block_type>(0));
}
return *this;
@@ -967,6 +1010,46 @@ bool dynamic_bitset<Block, Allocator>::test(size_type pos) const
}
template <typename Block, typename Allocator>
+bool dynamic_bitset<Block, Allocator>::test_set(size_type pos, bool val)
+{
+ bool const b = test(pos);
+ if (b != val) {
+ set(pos, val);
+ }
+ return b;
+}
+
+template <typename Block, typename Allocator>
+bool dynamic_bitset<Block, Allocator>::all() const
+{
+ if (empty()) {
+ return true;
+ }
+
+ const block_width_type extra_bits = count_extra_bits();
+ block_type const all_ones = ~static_cast<Block>(0);
+
+ if (extra_bits == 0) {
+ for (size_type i = 0, e = num_blocks(); i < e; ++i) {
+ if (m_bits[i] != all_ones) {
+ return false;
+ }
+ }
+ } else {
+ for (size_type i = 0, e = num_blocks() - 1; i < e; ++i) {
+ if (m_bits[i] != all_ones) {
+ return false;
+ }
+ }
+ block_type const mask = ~(~static_cast<Block>(0) << extra_bits);
+ if (m_highest_block() != mask) {
+ return false;
+ }
+ }
+ return true;
+}
+
+template <typename Block, typename Allocator>
bool dynamic_bitset<Block, Allocator>::any() const
{
for (size_type i = 0; i < num_blocks(); ++i)
@@ -992,7 +1075,7 @@ dynamic_bitset<Block, Allocator>::operator~() const
template <typename Block, typename Allocator>
typename dynamic_bitset<Block, Allocator>::size_type
-dynamic_bitset<Block, Allocator>::count() const
+dynamic_bitset<Block, Allocator>::count() const BOOST_NOEXCEPT
{
using detail::dynamic_bitset_impl::table_width;
using detail::dynamic_bitset_impl::access_by_bytes;
@@ -1101,7 +1184,7 @@ to_ulong() const
// Check for overflows. This may be a performance burden on very
// large bitsets but is required by the specification, sorry
if (find_next(ulong_width - 1) != npos)
- throw std::overflow_error("boost::dynamic_bitset::to_ulong overflow");
+ BOOST_THROW_EXCEPTION(std::overflow_error("boost::dynamic_bitset::to_ulong overflow"));
// Ok, from now on we can be sure there's no "on" bit
@@ -1126,21 +1209,21 @@ to_ulong() const
template <typename Block, typename Allocator>
inline typename dynamic_bitset<Block, Allocator>::size_type
-dynamic_bitset<Block, Allocator>::size() const
+dynamic_bitset<Block, Allocator>::size() const BOOST_NOEXCEPT
{
return m_num_bits;
}
template <typename Block, typename Allocator>
inline typename dynamic_bitset<Block, Allocator>::size_type
-dynamic_bitset<Block, Allocator>::num_blocks() const
+dynamic_bitset<Block, Allocator>::num_blocks() const BOOST_NOEXCEPT
{
return m_bits.size();
}
template <typename Block, typename Allocator>
inline typename dynamic_bitset<Block, Allocator>::size_type
-dynamic_bitset<Block, Allocator>::max_size() const
+dynamic_bitset<Block, Allocator>::max_size() const BOOST_NOEXCEPT
{
// Semantics of vector<>::max_size() aren't very clear
// (see lib issue 197) and many library implementations
@@ -1161,7 +1244,7 @@ dynamic_bitset<Block, Allocator>::max_size() const
}
template <typename Block, typename Allocator>
-inline bool dynamic_bitset<Block, Allocator>::empty() const
+inline bool dynamic_bitset<Block, Allocator>::empty() const BOOST_NOEXCEPT
{
return size() == 0;
}
@@ -1230,7 +1313,7 @@ dynamic_bitset<Block, Allocator>::m_do_find_from(size_type first_block) const
if (i >= num_blocks())
return npos; // not found
- return i * bits_per_block + boost::lowest_bit(m_bits[i]);
+ return i * bits_per_block + static_cast<size_type>(boost::lowest_bit(m_bits[i]));
}
@@ -1257,11 +1340,11 @@ dynamic_bitset<Block, Allocator>::find_next(size_type pos) const
const size_type blk = block_index(pos);
const block_width_type ind = bit_index(pos);
- // mask out bits before pos
- const Block fore = m_bits[blk] & ( ~Block(0) << ind );
+ // shift bits upto one immediately after current
+ const Block fore = m_bits[blk] >> ind;
return fore?
- blk * bits_per_block + lowest_bit(fore)
+ pos + static_cast<size_type>(lowest_bit(fore))
:
m_do_find_from(blk + 1);
@@ -1422,19 +1505,20 @@ operator<<(std::basic_ostream<Ch, Tr>& os,
const Ch zero = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '0');
const Ch one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1');
- try {
+ BOOST_TRY {
- typedef typename dynamic_bitset<Block, Alloc>::size_type bitsetsize_type;
+ typedef typename dynamic_bitset<Block, Alloc>::size_type bitset_size_type;
typedef basic_streambuf<Ch, Tr> buffer_type;
buffer_type * buf = os.rdbuf();
- size_t npad = os.width() <= 0 // careful: os.width() is signed (and can be < 0)
- || (bitsetsize_type) os.width() <= b.size()? 0 : os.width() - b.size();
+ // careful: os.width() is signed (and can be < 0)
+ const bitset_size_type width = (os.width() <= 0) ? 0 : static_cast<bitset_size_type>(os.width());
+ streamsize npad = (width <= b.size()) ? 0 : width - b.size();
const Ch fill_char = os.fill();
const ios_base::fmtflags adjustfield = os.flags() & ios_base::adjustfield;
- // if needed fill at left; pad is decresed along the way
+ // if needed fill at left; pad is decreased along the way
if (adjustfield != ios_base::left) {
for (; 0 < npad; --npad)
if (Tr::eq_int_type(Tr::eof(), buf->sputc(fill_char))) {
@@ -1445,7 +1529,7 @@ operator<<(std::basic_ostream<Ch, Tr>& os,
if (err == ok) {
// output the bitset
- for (bitsetsize_type i = b.size(); 0 < i; --i) {
+ for (bitset_size_type i = b.size(); 0 < i; --i) {
typename buffer_type::int_type
ret = buf->sputc(b.test(i-1)? one : zero);
if (Tr::eq_int_type(Tr::eof(), ret)) {
@@ -1468,13 +1552,14 @@ operator<<(std::basic_ostream<Ch, Tr>& os,
os.width(0);
- } catch (...) { // see std 27.6.1.1/4
+ } BOOST_CATCH (...) { // see std 27.6.1.1/4
bool rethrow = false;
- try { os.setstate(ios_base::failbit); } catch (...) { rethrow = true; }
+ BOOST_TRY { os.setstate(ios_base::failbit); } BOOST_CATCH (...) { rethrow = true; } BOOST_CATCH_END
if (rethrow)
- throw;
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
}
if(err != ok)
@@ -1520,7 +1605,7 @@ operator>>(std::istream& is, dynamic_bitset<Block, Alloc>& b)
const std::streamsize w = is.width();
const size_type limit = w > 0 && static_cast<size_type>(w) < b.max_size()
- ? w : b.max_size();
+ ? static_cast<size_type>(w) : b.max_size();
typename bitset_type::bit_appender appender(b);
std::streambuf * buf = is.rdbuf();
for(int c = buf->sgetc(); appender.get_count() < limit; c = buf->snextc() ) {
@@ -1533,13 +1618,14 @@ operator>>(std::istream& is, dynamic_bitset<Block, Alloc>& b)
break; // non digit character
else {
- try {
+ BOOST_TRY {
appender.do_append(char(c) == '1');
}
- catch(...) {
+ BOOST_CATCH(...) {
is.setstate(std::ios::failbit); // assume this can't throw
- throw;
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
}
} // for
@@ -1568,7 +1654,7 @@ operator>>(std::basic_istream<Ch, Tr>& is, dynamic_bitset<Block, Alloc>& b)
const streamsize w = is.width();
const size_type limit = 0 < w && static_cast<size_type>(w) < b.max_size()?
- w : b.max_size();
+ static_cast<size_type>(w) : b.max_size();
ios_base::iostate err = ios_base::goodbit;
typename basic_istream<Ch, Tr>::sentry cerberos(is); // skips whitespaces
@@ -1580,7 +1666,7 @@ operator>>(std::basic_istream<Ch, Tr>& is, dynamic_bitset<Block, Alloc>& b)
const Ch one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1');
b.clear();
- try {
+ BOOST_TRY {
typename bitset_type::bit_appender appender(b);
basic_streambuf <Ch, Tr> * buf = is.rdbuf();
typename Tr::int_type c = buf->sgetc();
@@ -1603,7 +1689,7 @@ operator>>(std::basic_istream<Ch, Tr>& is, dynamic_bitset<Block, Alloc>& b)
} // for
}
- catch (...) {
+ BOOST_CATCH (...) {
// catches from stream buf, or from vector:
//
// bits_stored bits have been extracted and stored, and
@@ -1611,13 +1697,15 @@ operator>>(std::basic_istream<Ch, Tr>& is, dynamic_bitset<Block, Alloc>& b)
// append to the underlying vector (out of memory)
bool rethrow = false; // see std 27.6.1.1/4
- try { is.setstate(ios_base::badbit); }
- catch(...) { rethrow = true; }
+ BOOST_TRY { is.setstate(ios_base::badbit); }
+ BOOST_CATCH(...) { rethrow = true; }
+ BOOST_CATCH_END
if (rethrow)
- throw;
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
}
is.width(0);
@@ -1694,7 +1782,7 @@ inline typename dynamic_bitset<Block, Allocator>::size_type
dynamic_bitset<Block, Allocator>::calc_num_blocks(size_type num_bits)
{
return num_bits / bits_per_block
- + static_cast<int>( num_bits % bits_per_block != 0 );
+ + static_cast<size_type>( num_bits % bits_per_block != 0 );
}
// gives a reference to the highest block
diff --git a/3party/boost/boost/exception.hpp b/3party/boost/boost/exception.hpp
deleted file mode 100644
index 6424159c6d..0000000000
--- a/3party/boost/boost/exception.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.
-
-//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 UUID_1D94A7C6054E11DB9804B622A1EF5492
-#define UUID_1D94A7C6054E11DB9804B622A1EF5492
-
-#error The header <boost/exception.hpp> has been deprecated. Please #include <boost/exception/all.hpp> instead.
-
-#endif
diff --git a/3party/boost/boost/exception/N3757.hpp b/3party/boost/boost/exception/N3757.hpp
new file mode 100644
index 0000000000..23b06066b1
--- /dev/null
+++ b/3party/boost/boost/exception/N3757.hpp
@@ -0,0 +1,46 @@
+//Copyright (c) 2006-2013 Emil Dotchevski and Reverge Studios, Inc.
+
+//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 UUID_9011016A11A711E3B46CD9FA6088709B
+#define UUID_9011016A11A711E3B46CD9FA6088709B
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <boost/exception/info.hpp>
+#include <boost/exception/get_error_info.hpp>
+
+namespace
+boost
+ {
+ //Here we're using the boost::error_info machinery to store the info in the exception
+ //object. Within the context of N3757, this is strictly an implementation detail.
+
+ template <class Tag>
+ inline
+ void
+ exception::
+ set( typename Tag::type const & v )
+ {
+ exception_detail::set_info(*this,error_info<Tag,typename Tag::type>(v));
+ }
+
+ template <class Tag>
+ inline
+ typename Tag::type const *
+ exception::
+ get() const
+ {
+ return get_error_info<error_info<Tag,typename Tag::type> >(*this);
+ }
+ }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/3party/boost/boost/exception/detail/attribute_noreturn.hpp b/3party/boost/boost/exception/detail/attribute_noreturn.hpp
deleted file mode 100644
index ae9f031efe..0000000000
--- a/3party/boost/boost/exception/detail/attribute_noreturn.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-//Copyright (c) 2009 Emil Dotchevski and Reverge Studios, Inc.
-
-//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 UUID_61531AB0680611DEADD5846855D89593
-#define UUID_61531AB0680611DEADD5846855D89593
-
-#if defined(_MSC_VER)
-#define BOOST_ATTRIBUTE_NORETURN __declspec(noreturn)
-#elif defined(__GNUC__)
-#define BOOST_ATTRIBUTE_NORETURN __attribute__((__noreturn__))
-#else
-#define BOOST_ATTRIBUTE_NORETURN
-#endif
-
-#endif
diff --git a/3party/boost/boost/exception/detail/clone_current_exception.hpp b/3party/boost/boost/exception/detail/clone_current_exception.hpp
index cc201b908d..6fc1374737 100644
--- a/3party/boost/boost/exception/detail/clone_current_exception.hpp
+++ b/3party/boost/boost/exception/detail/clone_current_exception.hpp
@@ -1,10 +1,16 @@
-//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+//Copyright (c) 2006-2013 Emil Dotchevski and Reverge Studios, Inc.
//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 UUID_81522C0EB56511DFAB613DB0DFD72085
#define UUID_81522C0EB56511DFAB613DB0DFD72085
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
#ifdef BOOST_NO_EXCEPTIONS
# error This header requires exception handling to be enabled.
@@ -44,4 +50,7 @@ boost
}
}
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
#endif
diff --git a/3party/boost/boost/exception/detail/exception_ptr.hpp b/3party/boost/boost/exception/detail/exception_ptr.hpp
index b2ee3656b9..530a6bd629 100644
--- a/3party/boost/boost/exception/detail/exception_ptr.hpp
+++ b/3party/boost/boost/exception/detail/exception_ptr.hpp
@@ -21,6 +21,9 @@
#include <boost/exception/diagnostic_information.hpp>
#include <boost/exception/detail/type_info.hpp>
#include <boost/exception/detail/clone_current_exception.hpp>
+//#ifndef BOOST_NO_RTTI
+//#include <boost/units/detail/utility.hpp>
+//#endif
#include <boost/shared_ptr.hpp>
#include <stdexcept>
#include <new>
@@ -31,7 +34,7 @@ namespace
boost
{
class exception_ptr;
- BOOST_ATTRIBUTE_NORETURN void rethrow_exception( exception_ptr const & );
+ BOOST_NORETURN void rethrow_exception( exception_ptr const & );
exception_ptr current_exception();
class
@@ -89,7 +92,7 @@ boost
std::string
to_string( original_exception_type const & x )
{
- return x.value()->name();
+ return /*units::detail::demangle*/(x.value()->name());
}
#endif
@@ -118,10 +121,12 @@ boost
{
Exception ba;
exception_detail::clone_impl<Exception> c(ba);
+#ifndef BOOST_EXCEPTION_DISABLE
c <<
throw_function(BOOST_CURRENT_FUNCTION) <<
throw_file(__FILE__) <<
throw_line(__LINE__);
+#endif
static exception_ptr ep(shared_ptr<exception_detail::clone_base const>(new exception_detail::clone_impl<Exception>(c)));
return ep;
}
@@ -449,7 +454,7 @@ boost
return ret;
}
- BOOST_ATTRIBUTE_NORETURN
+ BOOST_NORETURN
inline
void
rethrow_exception( exception_ptr const & p )
diff --git a/3party/boost/boost/exception/detail/type_info.hpp b/3party/boost/boost/exception/detail/type_info.hpp
index 15fa1c49f4..0af8ef52ee 100644
--- a/3party/boost/boost/exception/detail/type_info.hpp
+++ b/3party/boost/boost/exception/detail/type_info.hpp
@@ -15,9 +15,9 @@
#include <boost/detail/sp_typeinfo.hpp>
#include <boost/current_function.hpp>
#include <boost/config.hpp>
-#ifndef BOOST_NO_TYPEID
-#include <boost/units/detail/utility.hpp>
-#endif
+//#ifndef BOOST_NO_TYPEID
+//#include <boost/units/detail/utility.hpp>
+//#endif
#include <string>
namespace
@@ -31,7 +31,7 @@ boost
#ifdef BOOST_NO_TYPEID
return BOOST_CURRENT_FUNCTION;
#else
- return units::detail::demangle(typeid(T*).name());
+ return /*units::detail::demangle*/(typeid(T*).name());
#endif
}
@@ -43,7 +43,7 @@ boost
#ifdef BOOST_NO_TYPEID
return BOOST_CURRENT_FUNCTION;
#else
- return units::detail::demangle(typeid(T).name());
+ return /*units::detail::demangle*/(typeid(T).name());
#endif
}
diff --git a/3party/boost/boost/exception/diagnostic_information.hpp b/3party/boost/boost/exception/diagnostic_information.hpp
index 5ac8c6b15c..7889c8f9f3 100644
--- a/3party/boost/boost/exception/diagnostic_information.hpp
+++ b/3party/boost/boost/exception/diagnostic_information.hpp
@@ -16,9 +16,9 @@
#include <boost/exception/get_error_info.hpp>
#include <boost/exception/info.hpp>
#include <boost/utility/enable_if.hpp>
-#ifndef BOOST_NO_RTTI
-#include <boost/units/detail/utility.hpp>
-#endif
+//#ifndef BOOST_NO_RTTI
+//#include <boost/units/detail/utility.hpp>
+//#endif
#include <exception>
#include <sstream>
#include <string>
@@ -151,7 +151,7 @@ boost
#ifndef BOOST_NO_RTTI
if ( verbose )
tmp << std::string("Dynamic exception type: ") <<
- units::detail::demangle((be?(BOOST_EXCEPTION_DYNAMIC_TYPEID(*be)):(BOOST_EXCEPTION_DYNAMIC_TYPEID(*se))).type_->name()) << '\n';
+ /*units::detail::demangle*/((be?(BOOST_EXCEPTION_DYNAMIC_TYPEID(*be)):(BOOST_EXCEPTION_DYNAMIC_TYPEID(*se))).type_->name()) << '\n';
#endif
if( with_what && se && verbose )
tmp << "std::exception::what: " << wh << '\n';
diff --git a/3party/boost/boost/exception/exception.hpp b/3party/boost/boost/exception/exception.hpp
index 31d43178df..d762cf827e 100644
--- a/3party/boost/boost/exception/exception.hpp
+++ b/3party/boost/boost/exception/exception.hpp
@@ -207,6 +207,12 @@ boost
class
exception
{
+ //<N3757>
+ public:
+ template <class Tag> void set( typename Tag::type const & );
+ template <class Tag> typename Tag::type const * get() const;
+ //</N3757>
+
protected:
exception():
diff --git a/3party/boost/boost/filesystem/operations.hpp b/3party/boost/boost/filesystem/operations.hpp
index dc01b7d8ba..9005b3e94b 100644
--- a/3party/boost/boost/filesystem/operations.hpp
+++ b/3party/boost/boost/filesystem/operations.hpp
@@ -33,8 +33,9 @@
#include <boost/type_traits/is_same.hpp>
#include <boost/iterator.hpp>
#include <boost/cstdint.hpp>
+#include <boost/range/mutable_iterator.hpp>
+#include <boost/range/const_iterator.hpp>
#include <boost/assert.hpp>
-
#include <string>
#include <utility> // for pair
#include <ctime>
@@ -54,6 +55,116 @@ namespace boost
namespace filesystem
{
+ //--------------------------------------------------------------------------------------//
+ // //
+ // class filesystem_error //
+ // //
+ //--------------------------------------------------------------------------------------//
+
+ class BOOST_SYMBOL_VISIBLE filesystem_error : public system::system_error
+ {
+ // see http://www.boost.org/more/error_handling.html for design rationale
+
+ // all functions are inline to avoid issues with crossing dll boundaries
+
+ // functions previously throw() are now BOOST_NOEXCEPT_OR_NOTHROW
+ // functions previously without throw() are now BOOST_NOEXCEPT
+
+ public:
+ // compiler generates copy constructor and copy assignment
+
+ filesystem_error(
+ const std::string & what_arg, system::error_code ec) BOOST_NOEXCEPT
+ : system::system_error(ec, what_arg)
+ {
+ try
+ {
+ m_imp_ptr.reset(new m_imp);
+ }
+ catch (...) { m_imp_ptr.reset(); }
+ }
+
+ filesystem_error(
+ const std::string & what_arg, const path& path1_arg,
+ system::error_code ec) BOOST_NOEXCEPT
+ : system::system_error(ec, what_arg)
+ {
+ try
+ {
+ m_imp_ptr.reset(new m_imp);
+ m_imp_ptr->m_path1 = path1_arg;
+ }
+ catch (...) { m_imp_ptr.reset(); }
+ }
+
+ filesystem_error(
+ const std::string & what_arg, const path& path1_arg,
+ const path& path2_arg, system::error_code ec) BOOST_NOEXCEPT
+ : system::system_error(ec, what_arg)
+ {
+ try
+ {
+ m_imp_ptr.reset(new m_imp);
+ m_imp_ptr->m_path1 = path1_arg;
+ m_imp_ptr->m_path2 = path2_arg;
+ }
+ catch (...) { m_imp_ptr.reset(); }
+ }
+
+ ~filesystem_error() BOOST_NOEXCEPT_OR_NOTHROW{}
+
+ const path& path1() const BOOST_NOEXCEPT
+ {
+ static const path empty_path;
+ return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path;
+ }
+ const path& path2() const BOOST_NOEXCEPT
+ {
+ static const path empty_path;
+ return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path;
+ }
+
+ const char* what() const BOOST_NOEXCEPT_OR_NOTHROW
+ {
+ if (!m_imp_ptr.get())
+ return system::system_error::what();
+
+ try
+ {
+ if (m_imp_ptr->m_what.empty())
+ {
+ m_imp_ptr->m_what = system::system_error::what();
+ if (!m_imp_ptr->m_path1.empty())
+ {
+ m_imp_ptr->m_what += ": \"";
+ m_imp_ptr->m_what += m_imp_ptr->m_path1.string();
+ m_imp_ptr->m_what += "\"";
+ }
+ if (!m_imp_ptr->m_path2.empty())
+ {
+ m_imp_ptr->m_what += ", \"";
+ m_imp_ptr->m_what += m_imp_ptr->m_path2.string();
+ m_imp_ptr->m_what += "\"";
+ }
+ }
+ return m_imp_ptr->m_what.c_str();
+ }
+ catch (...)
+ {
+ return system::system_error::what();
+ }
+ }
+
+ private:
+ struct m_imp
+ {
+ path m_path1; // may be empty()
+ path m_path2; // may be empty()
+ std::string m_what; // not built until needed
+ };
+ boost::shared_ptr<m_imp> m_imp_ptr;
+ };
+
//--------------------------------------------------------------------------------------//
// file_type //
//--------------------------------------------------------------------------------------//
@@ -108,7 +219,7 @@ namespace boost
others_exe = 01, // S_IXOTH, Execute/search permission, others
others_all = 07, // S_IRWXO, Read, write, execute/search by others
- all_all = owner_all|group_all|others_all, // 0777
+ all_all = 0777, // owner_all|group_all|others_all
// other POSIX bits
@@ -121,7 +232,7 @@ namespace boost
// (SVID-v4.2) On directories: restricted deletion flag
// Also see http://en.wikipedia.org/wiki/Sticky_bit
- perms_mask = all_all|set_uid_on_exe|set_gid_on_exe|sticky_bit, // 07777
+ perms_mask = 07777, // all_all|set_uid_on_exe|set_gid_on_exe|sticky_bit
perms_not_known = 0xFFFF, // present when directory_entry cache not loaded
@@ -721,6 +832,37 @@ namespace detail
{ return m_imp == rhs.m_imp; }
};
+ // enable C++11 range-base for statement use ---------------------------------------//
+
+ // begin() and end() are only used by a range-based for statement in the context of
+ // auto - thus the top-level const is stripped - so returning const is harmless and
+ // emphasizes begin() is just a pass through.
+ inline
+ const directory_iterator& begin(const directory_iterator& iter) {return iter;}
+ inline
+ directory_iterator end(const directory_iterator&) {return directory_iterator();}
+
+ // enable BOOST_FOREACH ------------------------------------------------------------//
+
+ inline
+ directory_iterator& range_begin(directory_iterator& iter) {return iter;}
+ inline
+ directory_iterator range_begin(const directory_iterator& iter) {return iter;}
+ inline
+ directory_iterator range_end(const directory_iterator&) {return directory_iterator();}
+ } // namespace filesystem
+
+ // namespace boost template specializations
+ template<>
+ struct range_mutable_iterator<boost::filesystem::directory_iterator>
+ { typedef boost::filesystem::directory_iterator type; };
+ template<>
+ struct range_const_iterator <boost::filesystem::directory_iterator>
+ { typedef boost::filesystem::directory_iterator type; };
+
+namespace filesystem
+{
+
//--------------------------------------------------------------------------------------//
// //
// recursive_directory_iterator helpers //
@@ -751,6 +893,8 @@ namespace detail
void increment(system::error_code* ec); // ec == 0 means throw on error
+ bool push_directory(system::error_code& ec) BOOST_NOEXCEPT;
+
void pop();
};
@@ -760,9 +904,14 @@ namespace detail
// clients of struct 'boost::filesystem::detail::recur_dir_itr_imp'
inline
- void recur_dir_itr_imp::increment(system::error_code* ec)
- // ec == 0 means throw on error
+ bool recur_dir_itr_imp::push_directory(system::error_code& ec) BOOST_NOEXCEPT
+ // Returns: true if push occurs, otherwise false. Always returns false on error.
{
+ ec.clear();
+
+ // Discover if the iterator is for a directory that needs to be recursed into,
+ // taking symlinks and options into account.
+
if ((m_options & symlink_option::_detail_no_push) == symlink_option::_detail_no_push)
m_options &= ~symlink_option::_detail_no_push;
@@ -775,40 +924,78 @@ namespace detail
// && is_directory(m_stack.top()->status())) ...
// The predicate code has since been rewritten to pass error_code arguments,
// per ticket #5653.
- bool or_pred = (m_options & symlink_option::recurse) == symlink_option::recurse
- || (ec == 0 ? !is_symlink(m_stack.top()->symlink_status())
- : !is_symlink(m_stack.top()->symlink_status(*ec)));
- if (ec != 0 && *ec)
- return;
- bool and_pred = or_pred && (ec == 0 ? is_directory(m_stack.top()->status())
- : is_directory(m_stack.top()->status(*ec)));
- if (ec != 0 && *ec)
- return;
-
- if (and_pred)
+
+ file_status symlink_stat;
+
+ if ((m_options & symlink_option::recurse) != symlink_option::recurse)
{
- if (ec == 0)
- m_stack.push(directory_iterator(m_stack.top()->path()));
- else
- {
- m_stack.push(directory_iterator(m_stack.top()->path(), *ec));
- if (*ec)
- return;
- }
- if (m_stack.top() != directory_iterator())
+ symlink_stat = m_stack.top()->symlink_status(ec);
+ if (ec)
+ return false;
+ }
+
+ if ((m_options & symlink_option::recurse) == symlink_option::recurse
+ || !is_symlink(symlink_stat))
+ {
+ file_status stat = m_stack.top()->status(ec);
+ if (ec || !is_directory(stat))
+ return false;
+
+ directory_iterator next(m_stack.top()->path(), ec);
+ if (!ec && next != directory_iterator())
{
+ m_stack.push(next);
++m_level;
- return;
+ return true;
}
- m_stack.pop();
}
}
+ return false;
+ }
+
+ inline
+ void recur_dir_itr_imp::increment(system::error_code* ec)
+ // ec == 0 means throw on error
+ //
+ // Invariant: On return, the top of the iterator stack is the next valid (possibly
+ // end) iterator, regardless of whether or not an error is reported, and regardless of
+ // whether any error is reported by exception or error code. In other words, progress
+ // is always made so a loop on the iterator will always eventually terminate
+ // regardless of errors.
+ {
+ system::error_code ec_push_directory;
+
+ // if various conditions are met, push a directory_iterator into the iterator stack
+ if (push_directory(ec_push_directory))
+ {
+ if (ec)
+ ec->clear();
+ return;
+ }
+ // Do the actual increment operation on the top iterator in the iterator
+ // stack, popping the stack if necessary, until either the stack is empty or a
+ // non-end iterator is reached.
while (!m_stack.empty() && ++m_stack.top() == directory_iterator())
{
m_stack.pop();
--m_level;
}
+
+ // report errors if any
+ if (ec_push_directory)
+ {
+ if (ec)
+ *ec = ec_push_directory;
+ else
+ {
+ BOOST_FILESYSTEM_THROW(filesystem_error(
+ "filesystem::recursive_directory_iterator directory error",
+ ec_push_directory));
+ }
+ }
+ else if (ec)
+ ec->clear();
}
inline
@@ -967,116 +1154,45 @@ namespace detail
};
-# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED)
- typedef recursive_directory_iterator wrecursive_directory_iterator;
-# endif
+ // enable C++11 range-base for statement use ---------------------------------------//
-//--------------------------------------------------------------------------------------//
-// //
-// class filesystem_error //
-// //
-//--------------------------------------------------------------------------------------//
-
- class BOOST_SYMBOL_VISIBLE filesystem_error : public system::system_error
- {
- // see http://www.boost.org/more/error_handling.html for design rationale
-
- // all functions are inline to avoid issues with crossing dll boundaries
-
- public:
- // compiler generates copy constructor and copy assignment
-
- filesystem_error(
- const std::string & what_arg, system::error_code ec)
- : system::system_error(ec, what_arg)
- {
- try
- {
- m_imp_ptr.reset(new m_imp);
- }
- catch (...) { m_imp_ptr.reset(); }
- }
-
- filesystem_error(
- const std::string & what_arg, const path& path1_arg,
- system::error_code ec)
- : system::system_error(ec, what_arg)
- {
- try
- {
- m_imp_ptr.reset(new m_imp);
- m_imp_ptr->m_path1 = path1_arg;
- }
- catch (...) { m_imp_ptr.reset(); }
- }
-
- filesystem_error(
- const std::string & what_arg, const path& path1_arg,
- const path& path2_arg, system::error_code ec)
- : system::system_error(ec, what_arg)
- {
- try
- {
- m_imp_ptr.reset(new m_imp);
- m_imp_ptr->m_path1 = path1_arg;
- m_imp_ptr->m_path2 = path2_arg;
- }
- catch (...) { m_imp_ptr.reset(); }
- }
+ // begin() and end() are only used by a range-based for statement in the context of
+ // auto - thus the top-level const is stripped - so returning const is harmless and
+ // emphasizes begin() is just a pass through.
+ inline
+ const recursive_directory_iterator& begin(const recursive_directory_iterator& iter)
+ {return iter;}
+ inline
+ recursive_directory_iterator end(const recursive_directory_iterator&)
+ {return recursive_directory_iterator();}
- ~filesystem_error() throw() {}
+ // enable BOOST_FOREACH ------------------------------------------------------------//
- const path& path1() const
- {
- static const path empty_path;
- return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ;
- }
- const path& path2() const
- {
- static const path empty_path;
- return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ;
- }
+ inline
+ recursive_directory_iterator& range_begin(recursive_directory_iterator& iter)
+ {return iter;}
+ inline
+ recursive_directory_iterator range_begin(const recursive_directory_iterator& iter)
+ {return iter;}
+ inline
+ recursive_directory_iterator range_end(const recursive_directory_iterator&)
+ {return recursive_directory_iterator();}
+ } // namespace filesystem
- const char* what() const throw()
- {
- if (!m_imp_ptr.get())
- return system::system_error::what();
+ // namespace boost template specializations
+ template<>
+ struct range_mutable_iterator<boost::filesystem::recursive_directory_iterator>
+ { typedef boost::filesystem::recursive_directory_iterator type; };
+ template<>
+ struct range_const_iterator <boost::filesystem::recursive_directory_iterator>
+ { typedef boost::filesystem::recursive_directory_iterator type; };
- try
- {
- if (m_imp_ptr->m_what.empty())
- {
- m_imp_ptr->m_what = system::system_error::what();
- if (!m_imp_ptr->m_path1.empty())
- {
- m_imp_ptr->m_what += ": \"";
- m_imp_ptr->m_what += m_imp_ptr->m_path1.string();
- m_imp_ptr->m_what += "\"";
- }
- if (!m_imp_ptr->m_path2.empty())
- {
- m_imp_ptr->m_what += ", \"";
- m_imp_ptr->m_what += m_imp_ptr->m_path2.string();
- m_imp_ptr->m_what += "\"";
- }
- }
- return m_imp_ptr->m_what.c_str();
- }
- catch (...)
- {
- return system::system_error::what();
- }
- }
+namespace filesystem
+{
- private:
- struct m_imp
- {
- path m_path1; // may be empty()
- path m_path2; // may be empty()
- std::string m_what; // not built until needed
- };
- boost::shared_ptr<m_imp> m_imp_ptr;
- };
+# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED)
+ typedef recursive_directory_iterator wrecursive_directory_iterator;
+# endif
// test helper -----------------------------------------------------------------------//
diff --git a/3party/boost/boost/flyweight.hpp b/3party/boost/boost/flyweight.hpp
index 6fe3042681..852ea8ecf6 100644
--- a/3party/boost/boost/flyweight.hpp
+++ b/3party/boost/boost/flyweight.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_HPP
#define BOOST_FLYWEIGHT_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/assoc_container_factory.hpp b/3party/boost/boost/flyweight/assoc_container_factory.hpp
index bb5ae76541..96deee3ee9 100644
--- a/3party/boost/boost/flyweight/assoc_container_factory.hpp
+++ b/3party/boost/boost/flyweight/assoc_container_factory.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2009 Joaquin M Lopez Munoz.
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_ASSOC_CONTAINER_FACTORY_HPP
#define BOOST_FLYWEIGHT_ASSOC_CONTAINER_FACTORY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -22,6 +22,10 @@
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/mpl/if.hpp>
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <utility>
+#endif
+
namespace boost{namespace flyweights{namespace detail{
BOOST_FLYWEIGHT_NESTED_XXX_IF_NOT_PLACEHOLDER_EXPRESSION_DEF(iterator);
BOOST_FLYWEIGHT_NESTED_XXX_IF_NOT_PLACEHOLDER_EXPRESSION_DEF(value_type);
@@ -57,6 +61,13 @@ public:
return cont.insert(x).first;
}
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ handle_type insert(entry_type&& x)
+ {
+ return cont.insert(std::move(x)).first;
+ }
+#endif
+
void erase(handle_type h)
{
cont.erase(h);
diff --git a/3party/boost/boost/flyweight/assoc_container_factory_fwd.hpp b/3party/boost/boost/flyweight/assoc_container_factory_fwd.hpp
index 2d0c356d74..278c04d711 100644
--- a/3party/boost/boost/flyweight/assoc_container_factory_fwd.hpp
+++ b/3party/boost/boost/flyweight/assoc_container_factory_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_ASSOC_CONTAINER_FACTORY_FWD_HPP
#define BOOST_FLYWEIGHT_ASSOC_CONTAINER_FACTORY_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/detail/default_value_policy.hpp b/3party/boost/boost/flyweight/detail/default_value_policy.hpp
index 186e1e0d8b..4209a69c1c 100644
--- a/3party/boost/boost/flyweight/detail/default_value_policy.hpp
+++ b/3party/boost/boost/flyweight/detail/default_value_policy.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2008 Joaquin M Lopez Munoz.
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,12 +9,14 @@
#ifndef BOOST_FLYWEIGHT_DETAIL_DEFAULT_VALUE_POLICY_HPP
#define BOOST_FLYWEIGHT_DETAIL_DEFAULT_VALUE_POLICY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+#include <boost/flyweight/detail/perfect_fwd.hpp>
#include <boost/flyweight/detail/value_tag.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
/* Default value policy: the key is the same as the value.
*/
@@ -35,10 +37,31 @@ struct default_value_policy:value_marker
{
/* template ctors */
-#define BOOST_FLYWEIGHT_PERFECT_FWD_NAME explicit rep_type
-#define BOOST_FLYWEIGHT_PERFECT_FWD_BODY(n) \
- :x(BOOST_PP_ENUM_PARAMS(n,t)){}
-#include <boost/flyweight/detail/perfect_fwd.hpp>
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)&&\
+ !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)&&\
+ BOOST_WORKAROUND(__GNUC__,<=4)&&(__GNUC__<4||__GNUC_MINOR__<=4)
+
+/* GCC 4.4.2 (and probably prior) bug: the default ctor generated by the
+ * variadic temmplate ctor below fails to value-initialize x.
+ */
+
+ rep_type():x(){}
+#endif
+
+#define BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY(args) \
+ :x(BOOST_FLYWEIGHT_FORWARD(args)){}
+
+ BOOST_FLYWEIGHT_PERFECT_FWD(
+ explicit rep_type,
+ BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY)
+
+#undef BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY
+
+ rep_type(const rep_type& r):x(r.x){}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ rep_type(rep_type&& r):x(std::move(r.x)){}
+#endif
operator const value_type&()const{return x;}
@@ -47,6 +70,10 @@ struct default_value_policy:value_marker
static void construct_value(const rep_type&){}
static void copy_value(const rep_type&){}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ static void move_value(const rep_type&){}
+#endif
};
} /* namespace flyweights::detail */
diff --git a/3party/boost/boost/flyweight/detail/dyn_perfect_fwd.hpp b/3party/boost/boost/flyweight/detail/dyn_perfect_fwd.hpp
index e921718a45..28b0c42c82 100644
--- a/3party/boost/boost/flyweight/detail/dyn_perfect_fwd.hpp
+++ b/3party/boost/boost/flyweight/detail/dyn_perfect_fwd.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2008 Joaquin M Lopez Munoz.
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -6,7 +6,46 @@
* See http://www.boost.org/libs/flyweight for library home page.
*/
-/* no include guards */
+#ifndef BOOST_FLYWEIGHT_DETAIL_DYN_PERFECT_FWD_HPP
+#define BOOST_FLYWEIGHT_DETAIL_DYN_PERFECT_FWD_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+
+#define BOOST_FLYWEIGHT_PERFECT_FWD_ARG(z,n,_) \
+BOOST_PP_CAT(T,n)&& BOOST_PP_CAT(t,n)
+
+#define BOOST_FLYWEIGHT_PERFECT_FWD_N_AUX(n,name,body) \
+template<BOOST_PP_ENUM_PARAMS(n,typename T)> \
+name(BOOST_PP_ENUM(n,BOOST_FLYWEIGHT_PERFECT_FWD_ARG,~)) \
+body((FORWARD)(n))
+
+#define BOOST_FLYWEIGHT_PERFECT_FWD_N(z,n,data) \
+BOOST_FLYWEIGHT_PERFECT_FWD_N_AUX( \
+ n,BOOST_PP_SEQ_HEAD(data), \
+ BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_TAIL(data)))
+
+#define BOOST_FLYWEIGHT_PERFECT_FWD(name,body) \
+name()body((ENUM)(0)) \
+BOOST_PP_REPEAT_FROM_TO( \
+ 1,BOOST_PP_ADD(BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS,1), \
+ BOOST_FLYWEIGHT_PERFECT_FWD_N,(name)(body))
+
+#else
+
+/* no rvalue refs -> [const] Tn& overloads */
#include <boost/preprocessor/arithmetic/add.hpp>
#include <boost/preprocessor/cat.hpp>
@@ -16,6 +55,7 @@
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/preprocessor/seq/elem.hpp>
#include <boost/preprocessor/seq/for_each_product.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
#include <boost/preprocessor/seq/size.hpp>
#define BOOST_FLYWEIGHT_CONST(b) BOOST_PP_CAT(BOOST_FLYWEIGHT_CONST,b)
@@ -34,42 +74,35 @@ BOOST_PP_CAT(T,n)& BOOST_PP_CAT(t,n)
* marked const or not according to the given mask (a seq of 0 or 1)
*/
-#define BOOST_FLYWEIGHT_PERFECT_FWD(r,mask) \
+#define BOOST_FLYWEIGHT_PERFECT_FWD_MASK_AUX(r,name,body,mask) \
template<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(mask),typename T)> \
-BOOST_FLYWEIGHT_PERFECT_FWD_NAME( \
+name( \
BOOST_PP_ENUM( \
BOOST_PP_SEQ_SIZE(mask),BOOST_FLYWEIGHT_PERFECT_FWD_ARG,mask)) \
-BOOST_FLYWEIGHT_PERFECT_FWD_BODY(BOOST_PP_SEQ_SIZE(mask))
+body((ENUM)(BOOST_PP_SEQ_SIZE(mask)))
+
+#define BOOST_FLYWEIGHT_PERFECT_FWD_MASK(r,data) \
+BOOST_FLYWEIGHT_PERFECT_FWD_MASK_AUX( \
+ r, \
+ BOOST_PP_SEQ_ELEM(0,BOOST_PP_SEQ_HEAD(data)), \
+ BOOST_PP_SEQ_ELEM(1,BOOST_PP_SEQ_HEAD(data)), \
+ BOOST_PP_SEQ_TAIL(data))
#define BOOST_FLYWEIGHT_01(z,n,_) ((0)(1))
/* Perfect forwarding overloads accepting 1 to n args */
-#define BOOST_FLYWEIGHT_PERFECT_FWDS_N(z,n,_) \
+#define BOOST_FLYWEIGHT_PERFECT_FWD_N(z,n,data) \
BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
- BOOST_FLYWEIGHT_PERFECT_FWD, \
+ BOOST_FLYWEIGHT_PERFECT_FWD_MASK, \
+ ((data)) \
BOOST_PP_REPEAT(n,BOOST_FLYWEIGHT_01,~))
-#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
+#define BOOST_FLYWEIGHT_PERFECT_FWD(name,body) \
+name()body((ENUM)(0)) \
BOOST_PP_REPEAT_FROM_TO( \
1,BOOST_PP_ADD(BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS,1), \
- BOOST_FLYWEIGHT_PERFECT_FWDS_N,~)
-
-/* generate the overloads */
-
-BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
-
-/* clean up */
-
-#undef BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
-#undef BOOST_FLYWEIGHT_01
-#undef BOOST_FLYWEIGHT_PERFECT_FWD
-#undef BOOST_FLYWEIGHT_PERFECT_FWD_ARG
-#undef BOOST_FLYWEIGHT_CONST1
-#undef BOOST_FLYWEIGHT_CONST0
-#undef BOOST_FLYWEIGHT_CONST
-
-/* user supplied argument macros */
+ BOOST_FLYWEIGHT_PERFECT_FWD_N,(name)(body))
-#undef BOOST_FLYWEIGHT_PERFECT_FWD_BODY
-#undef BOOST_FLYWEIGHT_PERFECT_FWD_NAME
+#endif
+#endif
diff --git a/3party/boost/boost/flyweight/detail/flyweight_core.hpp b/3party/boost/boost/flyweight/detail/flyweight_core.hpp
index a55c43e462..8be8586e1b 100644
--- a/3party/boost/boost/flyweight/detail/flyweight_core.hpp
+++ b/3party/boost/boost/flyweight/detail/flyweight_core.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2009 Joaquin M Lopez Munoz.
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,15 +9,15 @@
#ifndef BOOST_FLYWEIGHT_DETAIL_FLYWEIGHT_CORE_HPP
#define BOOST_FLYWEIGHT_DETAIL_FLYWEIGHT_CORE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
#include <boost/detail/no_exceptions_support.hpp>
#include <boost/detail/workaround.hpp>
+#include <boost/flyweight/detail/perfect_fwd.hpp>
#include <boost/mpl/apply.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1400))
#pragma warning(push)
@@ -63,11 +63,12 @@ public:
}
template<typename Checker>
- static void erase(const handle_type& h,Checker check)
+ static void erase(const handle_type& h,Checker chk)
{
typedef typename core::lock_type lock_type;
+ core::init();
lock_type lock(core::mutex());
- if(check(h))core::factory().erase(h);
+ if(chk(h))core::factory().erase(h);
}
};
@@ -118,16 +119,25 @@ public:
/* insert overloads*/
-#define BOOST_FLYWEIGHT_PERFECT_FWD_NAME static handle_type insert
-#define BOOST_FLYWEIGHT_PERFECT_FWD_BODY(n) \
-{ \
- return insert_rep(rep_type(BOOST_PP_ENUM_PARAMS(n,t))); \
+#define BOOST_FLYWEIGHT_PERFECT_FWD_INSERT_BODY(args) \
+{ \
+ return insert_rep(rep_type(BOOST_FLYWEIGHT_FORWARD(args))); \
}
-#include <boost/flyweight/detail/perfect_fwd.hpp>
+
+ BOOST_FLYWEIGHT_PERFECT_FWD(
+ static handle_type insert,
+ BOOST_FLYWEIGHT_PERFECT_FWD_INSERT_BODY)
+
+#undef BOOST_FLYWEIGHT_PERFECT_FWD_INSERT_BODY
static handle_type insert(const value_type& x){return insert_value(x);}
static handle_type insert(value_type& x){return insert_value(x);}
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ static handle_type insert(const value_type&& x){return insert_value(x);}
+ static handle_type insert(value_type&& x){return insert_value(std::move(x));}
+#endif
+
static const entry_type& entry(const base_handle_type& h)
{
return factory().entry(h);
@@ -169,7 +179,12 @@ private:
init();
entry_type e(x);
lock_type lock(mutex());
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ base_handle_type h(factory().insert(std::move(e)));
+#else
base_handle_type h(factory().insert(e));
+#endif
+
BOOST_TRY{
ValuePolicy::construct_value(
static_cast<const rep_type&>(entry(h)));
@@ -187,7 +202,13 @@ private:
init();
entry_type e((rep_type(x)));
lock_type lock(mutex());
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ base_handle_type h(factory().insert(std::move(e)));
+#else
base_handle_type h(factory().insert(e));
+#endif
+
BOOST_TRY{
ValuePolicy::copy_value(
static_cast<const rep_type&>(entry(h)));
@@ -200,6 +221,45 @@ private:
return static_cast<handle_type>(h);
}
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ static handle_type insert_rep(rep_type&& x)
+ {
+ init();
+ entry_type e(std::move(x));
+ lock_type lock(mutex());
+ base_handle_type h(factory().insert(std::move(e)));
+
+ BOOST_TRY{
+ ValuePolicy::construct_value(
+ static_cast<const rep_type&>(entry(h)));
+ }
+ BOOST_CATCH(...){
+ factory().erase(h);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ return static_cast<handle_type>(h);
+ }
+
+ static handle_type insert_value(value_type&& x)
+ {
+ init();
+ entry_type e(rep_type(std::move(x)));
+ lock_type lock(mutex());
+ base_handle_type h(factory().insert(std::move(e)));
+ BOOST_TRY{
+ ValuePolicy::move_value(
+ static_cast<const rep_type&>(entry(h)));
+ }
+ BOOST_CATCH(...){
+ factory().erase(h);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ return static_cast<handle_type>(h);
+ }
+#endif
+
static bool static_initializer;
static factory_type* static_factory_ptr;
static mutex_type* static_mutex_ptr;
diff --git a/3party/boost/boost/flyweight/detail/is_placeholder_expr.hpp b/3party/boost/boost/flyweight/detail/is_placeholder_expr.hpp
index a53e8d2dbb..a89aad650b 100644
--- a/3party/boost/boost/flyweight/detail/is_placeholder_expr.hpp
+++ b/3party/boost/boost/flyweight/detail/is_placeholder_expr.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_DETAIL_IS_PLACEHOLDER_EXPR_HPP
#define BOOST_FLYWEIGHT_DETAIL_IS_PLACEHOLDER_EXPR_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/detail/nested_xxx_if_not_ph.hpp b/3party/boost/boost/flyweight/detail/nested_xxx_if_not_ph.hpp
index 8221efb777..32412b41a1 100644
--- a/3party/boost/boost/flyweight/detail/nested_xxx_if_not_ph.hpp
+++ b/3party/boost/boost/flyweight/detail/nested_xxx_if_not_ph.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_DETAIL_NESTED_XXX_IF_NOT_PH_HPP
#define BOOST_FLYWEIGHT_DETAIL_NESTED_XXX_IF_NOT_PH_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/detail/not_placeholder_expr.hpp b/3party/boost/boost/flyweight/detail/not_placeholder_expr.hpp
index a62bd09301..004c67035a 100644
--- a/3party/boost/boost/flyweight/detail/not_placeholder_expr.hpp
+++ b/3party/boost/boost/flyweight/detail/not_placeholder_expr.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_DETAIL_NOT_PLACEHOLDER_EXPR_HPP
#define BOOST_FLYWEIGHT_DETAIL_NOT_PLACEHOLDER_EXPR_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/detail/perfect_fwd.hpp b/3party/boost/boost/flyweight/detail/perfect_fwd.hpp
index 05d670c69f..1e0faa31cc 100644
--- a/3party/boost/boost/flyweight/detail/perfect_fwd.hpp
+++ b/3party/boost/boost/flyweight/detail/perfect_fwd.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2008 Joaquin M Lopez Munoz.
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -6,23 +6,78 @@
* See http://www.boost.org/libs/flyweight for library home page.
*/
-/* Brute force implementation of perfect forwarding overloads.
- * Usage: include after having defined the argument macros:
- * BOOST_FLYWEIGHT_PERFECT_FWD_NAME
- * BOOST_FLYWEIGHT_PERFECT_FWD_BODY
- */
+#ifndef BOOST_FLYWEIGHT_DETAIL_PERFECT_FWD_HPP
+#define BOOST_FLYWEIGHT_DETAIL_PERFECT_FWD_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
-/* This user_definable macro limits the maximum number of arguments to
- * be perfect forwarded. Beware combinatorial explosion: manual perfect
- * forwarding for n arguments produces 2^n distinct overloads.
+/* C++03-compatible implementation of perfect forwarding.
+ * Usage:
+ *
+ * # define NAME ...
+ * # define BODY(args) {...BOOST_FLYWEIGHT_FORWARD(args)...}
+ * BOOST_FLYWEIGHT_PERFECT_FWD(name,body)
+ *
+ * where NAME includes the return type and qualifiers (if any) and BODY(args)
+ * is expected to fo the forwarding through BOOST_FLYWEIGHT_FORWARD(args).
+ *
+ * In compilers capable of perfect forwarding, the real thing is provided
+ * (just one variadic args overload is generated). Otherwise the machinery
+ * generates n+1 overloads, if rvalue refs are supported, or else 2^(n+1)-1
+ * overloads accepting any combination of lvalue refs and const lvalue refs,
+ * up to BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS args.
*/
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <utility>
+#endif
+
+#define BOOST_FLYWEIGHT_FORWARD_FORWARD_AUX(z,n,_) \
+std::forward<BOOST_PP_CAT(T,n)>(BOOST_PP_CAT(t,n))
+
+#define BOOST_FLYWEIGHT_FORWARD_FORWARD(n) \
+BOOST_PP_ENUM(n,BOOST_FLYWEIGHT_FORWARD_FORWARD_AUX,~)
+
+#define BOOST_FLYWEIGHT_FORWARD_ENUM(n) BOOST_PP_ENUM_PARAMS(n,t)
+
+#define BOOST_FLYWEIGHT_FORWARD_PASS(arg) arg
+
+#define BOOST_FLYWEIGHT_FORWARD(args)\
+BOOST_PP_CAT(BOOST_FLYWEIGHT_FORWARD_,BOOST_PP_SEQ_HEAD(args))( \
+BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_TAIL(args)))
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)||\
+ defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
#if !defined(BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS)
#define BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS 5
#endif
+#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS<0
+#error BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS must be >=0
+#endif
+
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS<=5
#include <boost/flyweight/detail/pp_perfect_fwd.hpp>
#else
#include <boost/flyweight/detail/dyn_perfect_fwd.hpp>
#endif
+
+#else
+
+/* real perfect forwarding */
+
+#define BOOST_FLYWEIGHT_PERFECT_FWD(name,body) \
+template<typename... Args>name(Args&&... args) \
+body((PASS)(std::forward<Args>(args)...))
+
+#endif
+#endif
diff --git a/3party/boost/boost/flyweight/detail/pp_perfect_fwd.hpp b/3party/boost/boost/flyweight/detail/pp_perfect_fwd.hpp
index 889d4c7e26..bf2ac5a01d 100644
--- a/3party/boost/boost/flyweight/detail/pp_perfect_fwd.hpp
+++ b/3party/boost/boost/flyweight/detail/pp_perfect_fwd.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2008 Joaquin M Lopez Munoz.
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -6,148 +6,169 @@
* See http://www.boost.org/libs/flyweight for library home page.
*/
-/* no include guards */
+#ifndef BOOST_FLYWEIGHT_DETAIL_PP_PERFECT_FWD_HPP
+#define BOOST_FLYWEIGHT_DETAIL_PP_PERFECT_FWD_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+#define BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body) \
+name()body((FORWARD)(0))
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=1
-#define BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
-template<typename T0> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(1)\
-template<typename T0> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(1)
+#define BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body) \
+template<typename T0> name(T0&& t0)body((FORWARD)(1))
#endif
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=2
-#define BOOST_FLYWEIGHT_PERFECT_FWDS_2 \
-template<typename T0,typename T1> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(2)\
-template<typename T0,typename T1> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(2)\
-template<typename T0,typename T1> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(2)\
-template<typename T0,typename T1> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(2)
+#define BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body) \
+template<typename T0,typename T1> name(T0&& t0,T1&& t1)body((FORWARD)(2))
#endif
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=3
-#define BOOST_FLYWEIGHT_PERFECT_FWDS_3 \
-template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
-template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
-template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
-template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
-template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
-template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
-template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
-template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)
+#define BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body) \
+template<typename T0,typename T1,typename T2> name(T0&& t0,T1&& t1,T2&& t2)body((FORWARD)(3))
#endif
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=4
-#define BOOST_FLYWEIGHT_PERFECT_FWDS_4 \
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
-template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)
+#define BOOST_FLYWEIGHT_PERFECT_FWD_4(name,body) \
+template<typename T0,typename T1,typename T2,typename T3> name(T0&& t0,T1&& t1,T2&& t2,T3&& t3)body((FORWARD)(4))
#endif
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=5
-#define BOOST_FLYWEIGHT_PERFECT_FWDS_5 \
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
-template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)
-#endif
-
-#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==0
-#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
-#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==1
-#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
-BOOST_FLYWEIGHT_PERFECT_FWDS_1
-#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==2
-#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
-BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_2
-#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==3
-#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
-BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_2 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_3
-#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==4
-#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
-BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_2 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_3 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_4
-#else /* BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==5 */
-#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
-BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_2 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_3 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_4 \
-BOOST_FLYWEIGHT_PERFECT_FWDS_5
+#define BOOST_FLYWEIGHT_PERFECT_FWD_5(name,body) \
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0&& t0,T1&& t1,T2&& t2,T3&& t3,T4&& t4)body((FORWARD)(5))
#endif
-/* generate the overloads */
-
-BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
+#else
-/* clean up */
+/* no rvalue refs -> [const] Tn& overloads */
-#undef BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
+#define BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body) \
+name()body((ENUM)(0))
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=1
-#undef BOOST_FLYWEIGHT_PERFECT_FWDS_1
+#define BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body) \
+template<typename T0> name(T0& t0)body((ENUM)(1))\
+template<typename T0> name(const T0& t0)body((ENUM)(1))
#endif
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=2
-#undef BOOST_FLYWEIGHT_PERFECT_FWDS_2
+#define BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body) \
+template<typename T0,typename T1> name(T0& t0,T1& t1)body((ENUM)(2))\
+template<typename T0,typename T1> name(T0& t0,const T1& t1)body((ENUM)(2))\
+template<typename T0,typename T1> name(const T0& t0,T1& t1)body((ENUM)(2))\
+template<typename T0,typename T1> name(const T0& t0,const T1& t1)body((ENUM)(2))
#endif
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=3
-#undef BOOST_FLYWEIGHT_PERFECT_FWDS_3
+#define BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body) \
+template<typename T0,typename T1,typename T2> name(T0& t0,T1& t1,T2& t2)body((ENUM)(3))\
+template<typename T0,typename T1,typename T2> name(T0& t0,T1& t1,const T2& t2)body((ENUM)(3))\
+template<typename T0,typename T1,typename T2> name(T0& t0,const T1& t1,T2& t2)body((ENUM)(3))\
+template<typename T0,typename T1,typename T2> name(T0& t0,const T1& t1,const T2& t2)body((ENUM)(3))\
+template<typename T0,typename T1,typename T2> name(const T0& t0,T1& t1,T2& t2)body((ENUM)(3))\
+template<typename T0,typename T1,typename T2> name(const T0& t0,T1& t1,const T2& t2)body((ENUM)(3))\
+template<typename T0,typename T1,typename T2> name(const T0& t0,const T1& t1,T2& t2)body((ENUM)(3))\
+template<typename T0,typename T1,typename T2> name(const T0& t0,const T1& t1,const T2& t2)body((ENUM)(3))
#endif
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=4
-#undef BOOST_FLYWEIGHT_PERFECT_FWDS_4
+#define BOOST_FLYWEIGHT_PERFECT_FWD_4(name,body) \
+template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,T1& t1,T2& t2,T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,T1& t1,T2& t2,const T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,T1& t1,const T2& t2,T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,T1& t1,const T2& t2,const T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,const T1& t1,T2& t2,T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,const T1& t1,T2& t2,const T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,const T1& t1,const T2& t2,T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,const T1& t1,const T2& t2,const T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,T1& t1,T2& t2,T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,T1& t1,T2& t2,const T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,T1& t1,const T2& t2,T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,T1& t1,const T2& t2,const T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,const T1& t1,T2& t2,T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,const T1& t1,T2& t2,const T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,const T1& t1,const T2& t2,T3& t3)body((ENUM)(4))\
+template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,const T1& t1,const T2& t2,const T3& t3)body((ENUM)(4))
#endif
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=5
-#undef BOOST_FLYWEIGHT_PERFECT_FWDS_5
+#define BOOST_FLYWEIGHT_PERFECT_FWD_5(name,body) \
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,const T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,const T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,const T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,const T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,const T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,const T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,const T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,const T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,const T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,const T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,const T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,const T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,const T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,const T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,const T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
+template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,const T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))
+#endif
+
#endif
-/* user supplied argument macros */
+#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==0
+#define BOOST_FLYWEIGHT_PERFECT_FWD(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body)
+#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==1
+#define BOOST_FLYWEIGHT_PERFECT_FWD(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body)
+#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==2
+#define BOOST_FLYWEIGHT_PERFECT_FWD(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body)
+#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==3
+#define BOOST_FLYWEIGHT_PERFECT_FWD(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body)
+#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==4
+#define BOOST_FLYWEIGHT_PERFECT_FWD(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_4(name,body)
+#else /* BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==5 */
+#define BOOST_FLYWEIGHT_PERFECT_FWD(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_4(name,body) \
+BOOST_FLYWEIGHT_PERFECT_FWD_5(name,body)
+#endif
-#undef BOOST_FLYWEIGHT_PERFECT_FWD_NAME
-#undef BOOST_FLYWEIGHT_PERFECT_FWD_BODY
+#endif
diff --git a/3party/boost/boost/flyweight/detail/recursive_lw_mutex.hpp b/3party/boost/boost/flyweight/detail/recursive_lw_mutex.hpp
index 5bb2082074..6e780868ec 100644
--- a/3party/boost/boost/flyweight/detail/recursive_lw_mutex.hpp
+++ b/3party/boost/boost/flyweight/detail/recursive_lw_mutex.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2008 Joaquin M Lopez Munoz.
+/* Copyright 2006-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_DETAIL_RECURSIVE_LW_MUTEX_HPP
#define BOOST_FLYWEIGHT_DETAIL_RECURSIVE_LW_MUTEX_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -39,6 +39,7 @@ typedef boost::detail::lightweight_mutex recursive_lightweight_mutex;
#else
/* code shamelessly ripped from <boost/detail/lwm_pthreads.hpp> */
+#include <boost/assert.hpp>
#include <boost/noncopyable.hpp>
#include <pthread.h>
@@ -53,10 +54,10 @@ struct recursive_lightweight_mutex:noncopyable
recursive_lightweight_mutex()
{
pthread_mutexattr_t attr;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
- pthread_mutex_init(&m_,&attr);
- pthread_mutexattr_destroy(&attr);
+ BOOST_VERIFY(pthread_mutexattr_init(&attr)==0);
+ BOOST_VERIFY(pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE)==0);
+ BOOST_VERIFY(pthread_mutex_init(&m_,&attr)==0);
+ BOOST_VERIFY(pthread_mutexattr_destroy(&attr)==0);
}
~recursive_lightweight_mutex(){pthread_mutex_destroy(&m_);}
@@ -68,10 +69,10 @@ struct recursive_lightweight_mutex:noncopyable
public:
scoped_lock(recursive_lightweight_mutex& m):m_(m.m_)
{
- pthread_mutex_lock(&m_);
+ BOOST_VERIFY(pthread_mutex_lock(&m_)==0);
}
- ~scoped_lock(){pthread_mutex_unlock(&m_);}
+ ~scoped_lock(){BOOST_VERIFY(pthread_mutex_unlock(&m_)==0);}
private:
pthread_mutex_t& m_;
diff --git a/3party/boost/boost/flyweight/detail/value_tag.hpp b/3party/boost/boost/flyweight/detail/value_tag.hpp
index cf4b5723a1..cec0d49976 100644
--- a/3party/boost/boost/flyweight/detail/value_tag.hpp
+++ b/3party/boost/boost/flyweight/detail/value_tag.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_DETAIL_VALUE_TAG_HPP
#define BOOST_FLYWEIGHT_DETAIL_VALUE_TAG_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/factory_tag.hpp b/3party/boost/boost/flyweight/factory_tag.hpp
index ddb747304e..37b62556b1 100644
--- a/3party/boost/boost/flyweight/factory_tag.hpp
+++ b/3party/boost/boost/flyweight/factory_tag.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_FACTORY_TAG_HPP
#define BOOST_FLYWEIGHT_FACTORY_TAG_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/flyweight.hpp b/3party/boost/boost/flyweight/flyweight.hpp
index b909b676fc..624649b166 100644
--- a/3party/boost/boost/flyweight/flyweight.hpp
+++ b/3party/boost/boost/flyweight/flyweight.hpp
@@ -1,6 +1,6 @@
/* Flyweight class.
*
- * Copyright 2006-2009 Joaquin M Lopez Munoz.
+ * Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -11,7 +11,7 @@
#ifndef BOOST_FLYWEIGHT_FLYWEIGHT_HPP
#define BOOST_FLYWEIGHT_FLYWEIGHT_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -20,6 +20,7 @@
#include <boost/detail/workaround.hpp>
#include <boost/flyweight/detail/default_value_policy.hpp>
#include <boost/flyweight/detail/flyweight_core.hpp>
+#include <boost/flyweight/detail/perfect_fwd.hpp>
#include <boost/flyweight/factory_tag.hpp>
#include <boost/flyweight/flyweight_fwd.hpp>
#include <boost/flyweight/locking_tag.hpp>
@@ -35,10 +36,15 @@
#include <boost/mpl/not.hpp>
#include <boost/mpl/or.hpp>
#include <boost/parameter/binding.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/utility/swap.hpp>
+#if !defined(BOOST_NO_SFINAE)&&!defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <initializer_list>
+#endif
+
#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1400))
#pragma warning(push)
#pragma warning(disable:4521) /* multiple copy ctors */
@@ -182,20 +188,52 @@ public:
/* construct/copy/destroy */
- flyweight():h(core::insert(key_type())){}
+#define BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY(args) \
+ :h(core::insert(BOOST_FLYWEIGHT_FORWARD(args))){}
+
+ BOOST_FLYWEIGHT_PERFECT_FWD(
+ explicit flyweight,
+ BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY)
+
+#undef BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY
+
+#if !defined(BOOST_NO_SFINAE)&&!defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ template<typename V>
+ flyweight(
+ std::initializer_list<V> list,
+ typename boost::enable_if<
+ boost::is_convertible<std::initializer_list<V>,key_type> >::type* =0):
+ h(core::insert(list)){}
+#endif
+
flyweight(const flyweight& x):h(x.h){}
flyweight(flyweight& x):h(x.h){}
- /* template ctors */
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ flyweight(const flyweight&& x):h(x.h){}
+ flyweight(flyweight&& x):h(x.h){}
+#endif
-#define BOOST_FLYWEIGHT_PERFECT_FWD_NAME explicit flyweight
-#define BOOST_FLYWEIGHT_PERFECT_FWD_BODY(n) \
- :h(core::insert(BOOST_PP_ENUM_PARAMS(n,t))){}
-#include <boost/flyweight/detail/perfect_fwd.hpp>
+#if !defined(BOOST_NO_SFINAE)&&!defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ template<typename V>
+ typename boost::enable_if<
+ boost::is_convertible<std::initializer_list<V>,key_type>,flyweight&>::type
+ operator=(std::initializer_list<V> list)
+ {
+ return operator=(flyweight(list));
+ }
+#endif
flyweight& operator=(const flyweight& x){h=x.h;return *this;}
flyweight& operator=(const value_type& x){return operator=(flyweight(x));}
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ flyweight& operator=(value_type&& x)
+ {
+ return operator=(flyweight(std::move(x)));
+ }
+#endif
+
/* convertibility to underlying type */
const key_type& get_key()const{return core::key(h);}
diff --git a/3party/boost/boost/flyweight/flyweight_fwd.hpp b/3party/boost/boost/flyweight/flyweight_fwd.hpp
index 6295a8dbfb..31b06742ac 100644
--- a/3party/boost/boost/flyweight/flyweight_fwd.hpp
+++ b/3party/boost/boost/flyweight/flyweight_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_FLYWEIGHT_FWD_HPP
#define BOOST_FLYWEIGHT_FLYWEIGHT_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/hashed_factory.hpp b/3party/boost/boost/flyweight/hashed_factory.hpp
index 18062aae8b..899eb619e7 100644
--- a/3party/boost/boost/flyweight/hashed_factory.hpp
+++ b/3party/boost/boost/flyweight/hashed_factory.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2009 Joaquin M Lopez Munoz.
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_HASHED_FACTORY_HPP
#define BOOST_FLYWEIGHT_HASHED_FACTORY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -22,6 +22,10 @@
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/mpl/if.hpp>
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <utility>
+#endif
+
/* Flyweight factory based on a hashed container implemented
* with Boost.MultiIndex.
*/
@@ -72,6 +76,13 @@ public:
return &*cont.insert(x).first;
}
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ handle_type insert(Entry&& x)
+ {
+ return &*cont.insert(std::move(x)).first;
+ }
+#endif
+
void erase(handle_type h)
{
cont.erase(cont.iterator_to(*h));
diff --git a/3party/boost/boost/flyweight/hashed_factory_fwd.hpp b/3party/boost/boost/flyweight/hashed_factory_fwd.hpp
index 1da6b211ea..a934118c61 100644
--- a/3party/boost/boost/flyweight/hashed_factory_fwd.hpp
+++ b/3party/boost/boost/flyweight/hashed_factory_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_HASHED_FACTORY_FWD_HPP
#define BOOST_FLYWEIGHT_HASHED_FACTORY_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/holder_tag.hpp b/3party/boost/boost/flyweight/holder_tag.hpp
index 745f1320f2..43a01ff40b 100644
--- a/3party/boost/boost/flyweight/holder_tag.hpp
+++ b/3party/boost/boost/flyweight/holder_tag.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_HOLDER_TAG_HPP
#define BOOST_FLYWEIGHT_HOLDER_TAG_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/intermodule_holder.hpp b/3party/boost/boost/flyweight/intermodule_holder.hpp
index d8d9cd3ae6..a96bc5412f 100644
--- a/3party/boost/boost/flyweight/intermodule_holder.hpp
+++ b/3party/boost/boost/flyweight/intermodule_holder.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_INTERMODULE_HOLDER_HPP
#define BOOST_FLYWEIGHT_INTERMODULE_HOLDER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/intermodule_holder_fwd.hpp b/3party/boost/boost/flyweight/intermodule_holder_fwd.hpp
index 8acc0ce775..f2ea8845d4 100644
--- a/3party/boost/boost/flyweight/intermodule_holder_fwd.hpp
+++ b/3party/boost/boost/flyweight/intermodule_holder_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_INTERMODULE_HOLDER_FWD_HPP
#define BOOST_FLYWEIGHT_INTERMODULE_HOLDER_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/key_value.hpp b/3party/boost/boost/flyweight/key_value.hpp
index 5ac1c0d57d..eb58d152cb 100644
--- a/3party/boost/boost/flyweight/key_value.hpp
+++ b/3party/boost/boost/flyweight/key_value.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2008 Joaquin M Lopez Munoz.
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,14 +9,16 @@
#ifndef BOOST_FLYWEIGHT_KEY_VALUE_HPP
#define BOOST_FLYWEIGHT_KEY_VALUE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+#include <boost/flyweight/detail/perfect_fwd.hpp>
#include <boost/flyweight/detail/value_tag.hpp>
#include <boost/flyweight/key_value_fwd.hpp>
#include <boost/mpl/assert.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/type_traits/aligned_storage.hpp>
#include <boost/type_traits/alignment_of.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -54,21 +56,34 @@ struct optimized_key_value:value_marker
public:
/* template ctors */
-#define BOOST_FLYWEIGHT_PERFECT_FWD_NAME explicit rep_type
-#define BOOST_FLYWEIGHT_PERFECT_FWD_BODY(n) \
- :value_ptr(0) \
-{ \
- new(spc_ptr())key_type(BOOST_PP_ENUM_PARAMS(n,t)); \
+#define BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY(args) \
+ :value_ptr(0) \
+{ \
+ new(spc_ptr())key_type(BOOST_FLYWEIGHT_FORWARD(args)); \
}
-#include <boost/flyweight/detail/perfect_fwd.hpp>
- rep_type(const value_type& x):value_ptr(&x){}
+ BOOST_FLYWEIGHT_PERFECT_FWD(
+ explicit rep_type,
+ BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY)
+
+#undef BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY
rep_type(const rep_type& x):value_ptr(x.value_ptr)
{
if(!x.value_ptr)new(key_ptr())key_type(*x.key_ptr());
}
+ rep_type(const value_type& x):value_ptr(&x){}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ rep_type(rep_type&& x):value_ptr(x.value_ptr)
+ {
+ if(!x.value_ptr)new(key_ptr())key_type(std::move(*x.key_ptr()));
+ }
+
+ rep_type(value_type&& x):value_ptr(&x){}
+#endif
+
~rep_type()
{
if(!value_ptr) key_ptr()->~key_type();
@@ -113,7 +128,12 @@ struct optimized_key_value:value_marker
if(!value_cted()){
/* value_ptr must be ==0, oherwise copy_value would have been called */
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ key_type k(std::move(*key_ptr()));
+#else
key_type k(*key_ptr());
+#endif
+
key_ptr()->~key_type();
value_ptr= /* guarantees key won't be re-dted at ~rep_type if the */
static_cast<value_type*>(spc_ptr())+1; /* next statement throws */
@@ -126,6 +146,14 @@ struct optimized_key_value:value_marker
if(!value_cted())value_ptr=new(spc_ptr())value_type(*value_ptr);
}
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ void move_value()const
+ {
+ if(!value_cted())value_ptr=
+ new(spc_ptr())value_type(std::move(const_cast<value_type&>(*value_ptr)));
+ }
+#endif
+
mutable typename boost::aligned_storage<
(sizeof(key_type)>sizeof(value_type))?
sizeof(key_type):sizeof(value_type),
@@ -146,6 +174,13 @@ struct optimized_key_value:value_marker
{
r.copy_value();
}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ static void move_value(const rep_type& r)
+ {
+ r.move_value();
+ }
+#endif
};
template<typename Key,typename Value>
@@ -159,14 +194,33 @@ struct regular_key_value:value_marker
public:
/* template ctors */
-#define BOOST_FLYWEIGHT_PERFECT_FWD_NAME explicit rep_type
-#define BOOST_FLYWEIGHT_PERFECT_FWD_BODY(n) \
- :key(BOOST_PP_ENUM_PARAMS(n,t)),value_ptr(0){}
-#include <boost/flyweight/detail/perfect_fwd.hpp>
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)&&\
+ !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)&&\
+ BOOST_WORKAROUND(__GNUC__,<=4)&&(__GNUC__<4||__GNUC_MINOR__<=4)
- rep_type(const value_type& x):key(no_key_from_value_failure()){}
+/* GCC 4.4.2 (and probably prior) bug: the default ctor generated by the
+ * variadic temmplate ctor below fails to value-initialize key.
+ */
+
+ rep_type():key(),value_ptr(0){}
+#endif
+
+#define BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY(args) \
+ :key(BOOST_FLYWEIGHT_FORWARD(args)),value_ptr(0){}
+
+ BOOST_FLYWEIGHT_PERFECT_FWD(
+ explicit rep_type,
+ BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY)
+
+#undef BOOST_FLYWEIGHT_PERFECT_FWD_CTR_BODY
rep_type(const rep_type& x):key(x.key),value_ptr(0){}
+ rep_type(const value_type& x):key(no_key_from_value_failure()){}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ rep_type(rep_type&& x):key(std::move(x.key)),value_ptr(0){}
+ rep_type(value_type&& x):key(no_key_from_value_failure()){}
+#endif
~rep_type()
{
@@ -217,7 +271,16 @@ struct regular_key_value:value_marker
r.construct_value();
}
+ /* copy_value() and move_value() can't really ever be called, provided to avoid
+ * compile errors (it is the no_key_from_value_failure compile error we want to
+ * appear in these cases).
+ */
+
static void copy_value(const rep_type&){}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ static void move_value(const rep_type&){}
+#endif
};
} /* namespace flyweights::detail */
diff --git a/3party/boost/boost/flyweight/key_value_fwd.hpp b/3party/boost/boost/flyweight/key_value_fwd.hpp
index d20d71e1c7..878a778c05 100644
--- a/3party/boost/boost/flyweight/key_value_fwd.hpp
+++ b/3party/boost/boost/flyweight/key_value_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_KEY_VALUE_FWD_HPP
#define BOOST_FLYWEIGHT_KEY_VALUE_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/locking_tag.hpp b/3party/boost/boost/flyweight/locking_tag.hpp
index c467a4acc0..d32343679a 100644
--- a/3party/boost/boost/flyweight/locking_tag.hpp
+++ b/3party/boost/boost/flyweight/locking_tag.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_LOCKING_TAG_HPP
#define BOOST_FLYWEIGHT_LOCKING_TAG_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/no_locking.hpp b/3party/boost/boost/flyweight/no_locking.hpp
index fa0031a046..4d1bcd8bf9 100644
--- a/3party/boost/boost/flyweight/no_locking.hpp
+++ b/3party/boost/boost/flyweight/no_locking.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_NO_LOCKING_HPP
#define BOOST_FLYWEIGHT_NO_LOCKING_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/no_locking_fwd.hpp b/3party/boost/boost/flyweight/no_locking_fwd.hpp
index 95177e986d..132f50dc80 100644
--- a/3party/boost/boost/flyweight/no_locking_fwd.hpp
+++ b/3party/boost/boost/flyweight/no_locking_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_NO_LOCKING_FWD_HPP
#define BOOST_FLYWEIGHT_NO_LOCKING_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/no_tracking.hpp b/3party/boost/boost/flyweight/no_tracking.hpp
index 1433d6dac0..47ce8f9efd 100644
--- a/3party/boost/boost/flyweight/no_tracking.hpp
+++ b/3party/boost/boost/flyweight/no_tracking.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_NO_TRACKING_HPP
#define BOOST_FLYWEIGHT_NO_TRACKING_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/no_tracking_fwd.hpp b/3party/boost/boost/flyweight/no_tracking_fwd.hpp
index dd6b446e3d..a601012535 100644
--- a/3party/boost/boost/flyweight/no_tracking_fwd.hpp
+++ b/3party/boost/boost/flyweight/no_tracking_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_NO_TRACKING_FWD_HPP
#define BOOST_FLYWEIGHT_NO_TRACKING_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/refcounted.hpp b/3party/boost/boost/flyweight/refcounted.hpp
index 28b7629c1c..7b55416376 100644
--- a/3party/boost/boost/flyweight/refcounted.hpp
+++ b/3party/boost/boost/flyweight/refcounted.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2006-2010 Joaquin M Lopez Munoz.
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_REFCOUNTED_HPP
#define BOOST_FLYWEIGHT_REFCOUNTED_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -21,6 +21,10 @@
#include <boost/flyweight/tracking_tag.hpp>
#include <boost/utility/swap.hpp>
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <utility>
+#endif
+
/* Refcounting tracking policy.
* The implementation deserves some explanation; values are equipped with two
* reference counts:
@@ -63,6 +67,22 @@ public:
x=r.x;
return *this;
}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ explicit refcounted_value(Value&& x_):
+ x(std::move(x_)),ref(0),del_ref(0)
+ {}
+
+ refcounted_value(refcounted_value&& r):
+ x(std::move(r.x)),ref(0),del_ref(0)
+ {}
+
+ refcounted_value& operator=(refcounted_value&& r)
+ {
+ x=std::move(r.x);
+ return *this;
+ }
+#endif
operator const Value&()const{return x;}
operator const Key&()const{return x;}
@@ -103,7 +123,7 @@ public:
refcounted_handle& operator=(refcounted_handle x)
{
- swap(*this,x);
+ this->swap(x);
return *this;
}
@@ -116,9 +136,9 @@ public:
operator const Handle&()const{return h;}
- friend void swap(refcounted_handle& x, refcounted_handle& y)
+ void swap(refcounted_handle& x)
{
- boost::swap(x.h,y.h);
+ std::swap(h,x.h);
}
private:
@@ -130,8 +150,32 @@ private:
Handle h;
};
+template<typename Handle,typename TrackingHelper>
+void swap(
+ refcounted_handle<Handle,TrackingHelper>& x,
+ refcounted_handle<Handle,TrackingHelper>& y)
+{
+ x.swap(y);
+}
+
} /* namespace flyweights::detail */
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1500)
+/* swap lookup by boost::swap fails under obscure circumstances */
+
+} /* namespace flyweights */
+
+template<typename Handle,typename TrackingHelper>
+void swap(
+ ::boost::flyweights::detail::refcounted_handle<Handle,TrackingHelper>& x,
+ ::boost::flyweights::detail::refcounted_handle<Handle,TrackingHelper>& y)
+{
+ ::boost::flyweights::detail::swap(x,y);
+}
+
+namespace flyweights{
+#endif
+
struct refcounted:tracking_marker
{
struct entry_type
diff --git a/3party/boost/boost/flyweight/refcounted_fwd.hpp b/3party/boost/boost/flyweight/refcounted_fwd.hpp
index cb0e727011..7da6f6ec20 100644
--- a/3party/boost/boost/flyweight/refcounted_fwd.hpp
+++ b/3party/boost/boost/flyweight/refcounted_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_REFCOUNTED_FWD_HPP
#define BOOST_FLYWEIGHT_REFCOUNTED_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/set_factory.hpp b/3party/boost/boost/flyweight/set_factory.hpp
index 42da89586c..b0eeee75c6 100644
--- a/3party/boost/boost/flyweight/set_factory.hpp
+++ b/3party/boost/boost/flyweight/set_factory.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_SET_FACTORY_HPP
#define BOOST_FLYWEIGHT_SET_FACTORY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/set_factory_fwd.hpp b/3party/boost/boost/flyweight/set_factory_fwd.hpp
index 07cd0eae6b..8d26e73de0 100644
--- a/3party/boost/boost/flyweight/set_factory_fwd.hpp
+++ b/3party/boost/boost/flyweight/set_factory_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_SET_FACTORY_FWD_HPP
#define BOOST_FLYWEIGHT_SET_FACTORY_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/simple_locking.hpp b/3party/boost/boost/flyweight/simple_locking.hpp
index 503413320d..23e7f3b8e5 100644
--- a/3party/boost/boost/flyweight/simple_locking.hpp
+++ b/3party/boost/boost/flyweight/simple_locking.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_SIMPLE_LOCKING_HPP
#define BOOST_FLYWEIGHT_SIMPLE_LOCKING_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/simple_locking_fwd.hpp b/3party/boost/boost/flyweight/simple_locking_fwd.hpp
index c810860587..a7212fb682 100644
--- a/3party/boost/boost/flyweight/simple_locking_fwd.hpp
+++ b/3party/boost/boost/flyweight/simple_locking_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_SIMPLE_LOCKING_FWD_HPP
#define BOOST_FLYWEIGHT_SIMPLE_LOCKING_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/static_holder.hpp b/3party/boost/boost/flyweight/static_holder.hpp
index 892bd1bf8a..6cc1f51bce 100644
--- a/3party/boost/boost/flyweight/static_holder.hpp
+++ b/3party/boost/boost/flyweight/static_holder.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_STATIC_HOLDER_HPP
#define BOOST_FLYWEIGHT_STATIC_HOLDER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/static_holder_fwd.hpp b/3party/boost/boost/flyweight/static_holder_fwd.hpp
index 5f6f437e59..3624900ddb 100644
--- a/3party/boost/boost/flyweight/static_holder_fwd.hpp
+++ b/3party/boost/boost/flyweight/static_holder_fwd.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_STATIC_HOLDER_FWD_HPP
#define BOOST_FLYWEIGHT_STATIC_HOLDER_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/tag.hpp b/3party/boost/boost/flyweight/tag.hpp
index 62efc36a1d..52595541ee 100644
--- a/3party/boost/boost/flyweight/tag.hpp
+++ b/3party/boost/boost/flyweight/tag.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_TAG_HPP
#define BOOST_FLYWEIGHT_TAG_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/flyweight/tracking_tag.hpp b/3party/boost/boost/flyweight/tracking_tag.hpp
index efc7bce7ab..cda8d05dff 100644
--- a/3party/boost/boost/flyweight/tracking_tag.hpp
+++ b/3party/boost/boost/flyweight/tracking_tag.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_FLYWEIGHT_TRACKING_TAG_HPP
#define BOOST_FLYWEIGHT_TRACKING_TAG_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/foreach.hpp b/3party/boost/boost/foreach.hpp
index 33b59202d6..ac2e6134d2 100644
--- a/3party/boost/boost/foreach.hpp
+++ b/3party/boost/boost/foreach.hpp
@@ -20,7 +20,7 @@
#ifndef BOOST_FOREACH
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -32,7 +32,7 @@
// Some compilers let us detect even const-qualified rvalues at compile-time
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) \
- || BOOST_WORKAROUND(BOOST_MSVC, >= 1310) && !defined(_PREFAST_) \
+ || defined(BOOST_MSVC) && !defined(_PREFAST_) \
|| (BOOST_WORKAROUND(__GNUC__, == 4) && (__GNUC_MINOR__ <= 5) && !defined(BOOST_INTEL) && \
!defined(BOOST_CLANG)) \
|| (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ >= 4) && !defined(BOOST_INTEL) && \
@@ -42,8 +42,7 @@
// Some compilers allow temporaries to be bound to non-const references.
// These compilers make it impossible to for BOOST_FOREACH to detect
// temporaries and avoid reevaluation of the collection expression.
-# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
- || BOOST_WORKAROUND(__BORLANDC__, < 0x593) \
+# if BOOST_WORKAROUND(__BORLANDC__, < 0x593) \
|| (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \
|| BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) \
|| BOOST_WORKAROUND(__DECCXX_VER, <= 60590042)
@@ -55,8 +54,6 @@
|| defined(BOOST_NO_SFINAE) \
|| BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
|| BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(1400)) \
- || BOOST_WORKAROUND(__GNUC__, < 3) \
- || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 2)) \
|| (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 3) && defined(__APPLE_CC__)) \
|| BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
|| BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) \
@@ -349,9 +346,7 @@ struct foreach_iterator
//
// To treat the container as an array, use boost::as_array() in <boost/range/as_array.hpp>,
// as in BOOST_FOREACH( char ch, boost::as_array("hello") ) ...
- #if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
BOOST_MPL_ASSERT_MSG( (!is_char_array<T>::value), IS_THIS_AN_ARRAY_OR_A_NULL_TERMINATED_STRING, (T&) );
- #endif
// If the type is a pointer to a null terminated string (as opposed
// to an array type), there is no ambiguity.
@@ -380,9 +375,7 @@ struct foreach_reverse_iterator
//
// To treat the container as an array, use boost::as_array() in <boost/range/as_array.hpp>,
// as in BOOST_FOREACH( char ch, boost::as_array("hello") ) ...
- #if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
BOOST_MPL_ASSERT_MSG( (!is_char_array<T>::value), IS_THIS_AN_ARRAY_OR_A_NULL_TERMINATED_STRING, (T&) );
- #endif
// If the type is a pointer to a null terminated string (as opposed
// to an array type), there is no ambiguity.
diff --git a/3party/boost/boost/format/detail/config_macros.hpp b/3party/boost/boost/format/detail/config_macros.hpp
index 1f01b1789b..44d1e86c63 100644
--- a/3party/boost/boost/format/detail/config_macros.hpp
+++ b/3party/boost/boost/format/detail/config_macros.hpp
@@ -49,12 +49,6 @@
#define BOOST_NO_OVERLOAD_FOR_NON_CONST
#endif
-// gcc-2.95's native stringstream is not usable
-#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
-#define BOOST_FORMAT_IGNORE_STRINGSTREAM
-#endif
-
-
// **** Workaround for io streams, stlport and msvc.
#ifdef BOOST_IO_NEEDS_USING_DECLARATION
namespace boost {
@@ -80,6 +74,10 @@ namespace boost {
// -end N.S. boost
#endif // needs_using_declaration
+#if ! defined(BOOST_NO_STD_LOCALE)
+#include <locale>
+#endif
+
// *** hide std::locale if it doesnt exist.
// this typedef is either std::locale or int, avoids placing ifdefs everywhere
diff --git a/3party/boost/boost/format/detail/msvc_disambiguater.hpp b/3party/boost/boost/format/detail/msvc_disambiguater.hpp
index f12e5e97b2..c2692c4435 100644
--- a/3party/boost/boost/format/detail/msvc_disambiguater.hpp
+++ b/3party/boost/boost/format/detail/msvc_disambiguater.hpp
@@ -14,9 +14,7 @@
#ifndef BOOST_MSVC_DISAMBIGUATER_HPP
#define BOOST_MSVC_DISAMBIGUATER_HPP
-#if BOOST_WORKAROUND( BOOST_MSVC, <= 1300) || \
- BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
- // this whole header is specifically for msvc up to 7.0
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
#include <boost/format/group.hpp>
#include <ostream>
@@ -51,6 +49,6 @@ struct disambiguater
} // namespace io
} // namespace boost
-#endif // -BOOST_MSVC
+#endif // -__DECCXX_VER
#endif // -BOOST_MSVC_DISAMBIGUATER_HPP
diff --git a/3party/boost/boost/format/detail/workarounds_stlport.hpp b/3party/boost/boost/format/detail/workarounds_stlport.hpp
index eb35dc1708..5d435b98a0 100644
--- a/3party/boost/boost/format/detail/workarounds_stlport.hpp
+++ b/3party/boost/boost/format/detail/workarounds_stlport.hpp
@@ -13,12 +13,6 @@
#ifndef BOOST_MACROS_STLPORT_HPP
#define BOOST_MACROS_STLPORT_HPP
-#if defined(_STLPORT_VERSION) && BOOST_WORKAROUND( BOOST_MSVC, <= 1300)
-// msvc-6-stlport fails to find basic_string::append( iterator, iterator) when linking
-// might affect other MSwindows compilers
-#define BOOST_NO_STRING_APPEND
-#endif
-
// *** This should go to "boost/config/stdlib/stlport.hpp".
// If the streams are not native and there are problems with using templates
diff --git a/3party/boost/boost/format/feed_args.hpp b/3party/boost/boost/format/feed_args.hpp
index 53243dccc8..dcfd955b36 100644
--- a/3party/boost/boost/format/feed_args.hpp
+++ b/3party/boost/boost/format/feed_args.hpp
@@ -70,9 +70,8 @@ namespace detail {
} // -mk_str(..)
-#if BOOST_WORKAROUND( BOOST_MSVC, <= 1300) || \
- BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
-// MSVC needs to be tricked to disambiguate this simple overload..
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+// __DECCXX needs to be tricked to disambiguate this simple overload..
// the trick is in "boost/format/msvc_disambiguater.hpp"
template< class Ch, class Tr, class T> inline
@@ -115,7 +114,40 @@ namespace detail {
os << x ;
}
#endif
-#endif // -msvc workaround
+#endif // -__DECCXX workaround
+
+ template< class Ch, class Tr, class T>
+ void call_put_head(BOOST_IO_STD basic_ostream<Ch, Tr> & os, const void* x) {
+ put_head(os, *(typename ::boost::remove_reference<T>::type*)x);
+ }
+
+ template< class Ch, class Tr, class T>
+ void call_put_last(BOOST_IO_STD basic_ostream<Ch, Tr> & os, const void* x) {
+ put_last(os, *(T*)x);
+ }
+
+ template< class Ch, class Tr>
+ struct put_holder {
+ template<class T>
+ put_holder(T& t)
+ : arg(&t),
+ put_head(&call_put_head<Ch, Tr, T>),
+ put_last(&call_put_last<Ch, Tr, T>)
+ {}
+ const void* arg;
+ void (*put_head)(BOOST_IO_STD basic_ostream<Ch, Tr> & os, const void* x);
+ void (*put_last)(BOOST_IO_STD basic_ostream<Ch, Tr> & os, const void* x);
+ };
+
+ template< class Ch, class Tr> inline
+ void put_head( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const put_holder<Ch, Tr>& t) {
+ t.put_head(os, t.arg);
+ }
+
+ template< class Ch, class Tr> inline
+ void put_last( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const put_holder<Ch, Tr>& t) {
+ t.put_last(os, t.arg);
+ }
template< class Ch, class Tr, class Alloc, class T>
@@ -258,7 +290,7 @@ namespace detail {
template<class Ch, class Tr, class Alloc, class T>
basic_format<Ch, Tr, Alloc>&
- feed (basic_format<Ch,Tr, Alloc>& self, T x) {
+ feed_impl (basic_format<Ch,Tr, Alloc>& self, T x) {
if(self.dumped_) self.clear();
distribute<Ch, Tr, Alloc, T> (self, x);
++self.cur_arg_;
@@ -268,6 +300,12 @@ namespace detail {
}
return self;
}
+
+ template<class Ch, class Tr, class Alloc, class T> inline
+ basic_format<Ch, Tr, Alloc>&
+ feed (basic_format<Ch,Tr, Alloc>& self, T x) {
+ return feed_impl<Ch, Tr, Alloc, const put_holder<Ch, Tr>&>(self, put_holder<Ch, Tr>(x));
+ }
} // namespace detail
} // namespace io
diff --git a/3party/boost/boost/format/format_class.hpp b/3party/boost/boost/format/format_class.hpp
index 4555e56ec3..2ac59ef280 100644
--- a/3party/boost/boost/format/format_class.hpp
+++ b/3party/boost/boost/format/format_class.hpp
@@ -126,7 +126,7 @@ namespace boost {
template<class Ch2, class Tr2, class Alloc2, class T>
friend basic_format<Ch2, Tr2, Alloc2>&
- io::detail::feed (basic_format<Ch2, Tr2, Alloc2>&, T);
+ io::detail::feed_impl (basic_format<Ch2, Tr2, Alloc2>&, T);
template<class Ch2, class Tr2, class Alloc2, class T> friend
void io::detail::distribute (basic_format<Ch2, Tr2, Alloc2>&, T);
diff --git a/3party/boost/boost/format/format_fwd.hpp b/3party/boost/boost/format/format_fwd.hpp
index be3228af3c..16b8565468 100644
--- a/3party/boost/boost/format/format_fwd.hpp
+++ b/3party/boost/boost/format/format_fwd.hpp
@@ -21,18 +21,12 @@
namespace boost {
template <class Ch,
-#if !( BOOST_WORKAROUND(__GNUC__, <3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) )
- // gcc-2.95's native stdlid needs special treatment
- class Tr = BOOST_IO_STD char_traits<Ch>, class Alloc = std::allocator<Ch> >
-#else
- class Tr = std::string_char_traits<Ch>, class Alloc = std::alloc >
-#endif
+ class Tr = BOOST_IO_STD char_traits<Ch>, class Alloc = std::allocator<Ch> >
class basic_format;
typedef basic_format<char > format;
-#if !defined(BOOST_NO_STD_WSTRING) && !defined(BOOST_NO_STD_WSTREAMBUF) \
- && !defined(BOOST_FORMAT_IGNORE_STRINGSTREAM)
+#if !defined(BOOST_NO_STD_WSTRING) && !defined(BOOST_NO_STD_WSTREAMBUF)
typedef basic_format<wchar_t > wformat;
#endif
diff --git a/3party/boost/boost/format/internals.hpp b/3party/boost/boost/format/internals.hpp
index b0d874a1fb..1c67006aee 100644
--- a/3party/boost/boost/format/internals.hpp
+++ b/3party/boost/boost/format/internals.hpp
@@ -104,6 +104,15 @@ namespace detail {
template<class Ch, class Tr>
void stream_format_state<Ch,Tr>:: apply_on (basic_ios & os,
boost::io::detail::locale_t * loc_default) const {
+ // If a locale is available, set it first. "os.fill(fill_);" may chrash otherwise.
+#if !defined(BOOST_NO_STD_LOCALE)
+ if(loc_)
+ os.imbue(loc_.get());
+ else if(loc_default)
+ os.imbue(*loc_default);
+#else
+ (void) loc_default; // keep compiler quiet if we don't support locales
+#endif
// set the state of this stream according to our params
if(width_ != -1)
os.width(width_);
@@ -114,14 +123,6 @@ namespace detail {
os.flags(flags_);
os.clear(rdstate_);
os.exceptions(exceptions_);
-#if !defined(BOOST_NO_STD_LOCALE)
- if(loc_)
- os.imbue(loc_.get());
- else if(loc_default)
- os.imbue(*loc_default);
-#else
- (void) loc_default; // keep compiler quiet if we don't support locales
-#endif
}
template<class Ch, class Tr>
diff --git a/3party/boost/boost/format/internals_fwd.hpp b/3party/boost/boost/format/internals_fwd.hpp
index e44eb3c132..18cf122412 100644
--- a/3party/boost/boost/format/internals_fwd.hpp
+++ b/3party/boost/boost/format/internals_fwd.hpp
@@ -50,6 +50,10 @@ namespace detail {
template<class Ch, class Tr, class Alloc, class T>
basic_format<Ch, Tr, Alloc>&
feed (basic_format<Ch,Tr, Alloc>& self, T x);
+
+ template<class Ch, class Tr, class Alloc, class T>
+ basic_format<Ch, Tr, Alloc>&
+ feed_impl (basic_format<Ch,Tr, Alloc>& self, T x);
} // namespace detail
diff --git a/3party/boost/boost/format/parsing.hpp b/3party/boost/boost/format/parsing.hpp
index b14ca82c98..3ff1828081 100644
--- a/3party/boost/boost/format/parsing.hpp
+++ b/3party/boost/boost/format/parsing.hpp
@@ -390,11 +390,7 @@ namespace detail {
void append_string(String& dst, const String& src,
const typename String::size_type beg,
const typename String::size_type end) {
-#if !defined(BOOST_NO_STRING_APPEND)
dst.append(src.begin()+beg, src.begin()+end);
-#else
- dst += src.substr(beg, end-beg);
-#endif
}
} // detail namespace
diff --git a/3party/boost/boost/function/function_base.hpp b/3party/boost/boost/function/function_base.hpp
index 78b7dd1e99..f3663d796a 100644
--- a/3party/boost/boost/function/function_base.hpp
+++ b/3party/boost/boost/function/function_base.hpp
@@ -56,7 +56,7 @@
// need to use std::type_info::name to compare instead of operator==.
#if defined( BOOST_NO_TYPEID )
# define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y))
-#elif (defined(__GNUC__) && __GNUC__ >= 3) \
+#elif defined(__GNUC__) \
|| defined(_AIX) \
|| ( defined(__sgi) && defined(__host_mips))
# include <cstring>
@@ -66,11 +66,11 @@
# define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y))
#endif
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__ICL) && __ICL <= 600 || defined(__MWERKS__) && __MWERKS__ < 0x2406 && !defined(BOOST_STRICT_CONFIG)
+#if defined(__ICL) && __ICL <= 600 || defined(__MWERKS__) && __MWERKS__ < 0x2406 && !defined(BOOST_STRICT_CONFIG)
# define BOOST_FUNCTION_TARGET_FIX(x) x
#else
# define BOOST_FUNCTION_TARGET_FIX(x)
-#endif // not MSVC
+#endif // __ICL etc
#if !BOOST_WORKAROUND(__BORLANDC__, < 0x5A0)
# define BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor,Type) \
@@ -661,11 +661,7 @@ public:
}
template<typename Functor>
-#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- const Functor* target( Functor * = 0 ) const
-#else
const Functor* target() const
-#endif
{
if (!vtable) return 0;
@@ -683,11 +679,7 @@ public:
template<typename F>
bool contains(const F& f) const
{
-#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- if (const F* fp = this->target( (F*)0 ))
-#else
if (const F* fp = this->template target<F>())
-#endif
{
return function_equal(*fp, f);
} else {
diff --git a/3party/boost/boost/function/function_fwd.hpp b/3party/boost/boost/function/function_fwd.hpp
index fb318c990a..e79b504899 100644
--- a/3party/boost/boost/function/function_fwd.hpp
+++ b/3party/boost/boost/function/function_fwd.hpp
@@ -19,8 +19,7 @@ namespace boost { namespace python { namespace objects {
}}}
#endif
-#if defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
- || defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) \
+#if defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) \
|| !(defined(BOOST_STRICT_CONFIG) || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540)
# define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
#endif
diff --git a/3party/boost/boost/function/function_template.hpp b/3party/boost/boost/function/function_template.hpp
index 73ed72ef40..72b7fabd18 100644
--- a/3party/boost/boost/function/function_template.hpp
+++ b/3party/boost/boost/function/function_template.hpp
@@ -935,10 +935,11 @@ namespace boost {
if (stored_vtable.assign_to(f, functor)) {
std::size_t value = reinterpret_cast<std::size_t>(&stored_vtable.base);
+ // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
if (boost::has_trivial_copy_constructor<Functor>::value &&
boost::has_trivial_destructor<Functor>::value &&
detail::function::function_allows_small_object_optimization<Functor>::value)
- value |= static_cast<size_t>(0x01);
+ value |= static_cast<std::size_t>(0x01);
vtable = reinterpret_cast<detail::function::vtable_base *>(value);
} else
vtable = 0;
@@ -969,6 +970,7 @@ namespace boost {
if (stored_vtable.assign_to_a(f, functor, a)) {
std::size_t value = reinterpret_cast<std::size_t>(&stored_vtable.base);
+ // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
if (boost::has_trivial_copy_constructor<Functor>::value &&
boost::has_trivial_destructor<Functor>::value &&
detail::function::function_allows_small_object_optimization<Functor>::value)
diff --git a/3party/boost/boost/functional.hpp b/3party/boost/boost/functional.hpp
index 3e0588e00f..b618485c10 100644
--- a/3party/boost/boost/functional.hpp
+++ b/3party/boost/boost/functional.hpp
@@ -6,7 +6,7 @@
// Boost functional.hpp header file
// See http://www.boost.org/libs/functional for documentation.
// ------------------------------------------------------------------------------
-// $Id: functional.hpp 36246 2006-12-02 14:17:26Z andreas_huber69 $
+// $Id$
// ------------------------------------------------------------------------------
#ifndef BOOST_FUNCTIONAL_HPP
diff --git a/3party/boost/boost/functional/hash/detail/float_functions.hpp b/3party/boost/boost/functional/hash/detail/float_functions.hpp
index 4b8374d471..f3db52f9cc 100644
--- a/3party/boost/boost/functional/hash/detail/float_functions.hpp
+++ b/3party/boost/boost/functional/hash/detail/float_functions.hpp
@@ -7,12 +7,12 @@
#define BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP
#include <boost/config.hpp>
-#include <boost/config/no_tr1/cmath.hpp>
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
+#include <boost/config/no_tr1/cmath.hpp>
+
// Set BOOST_HASH_CONFORMANT_FLOATS to 1 for libraries known to have
// sufficiently good floating point support to not require any
// workarounds.
diff --git a/3party/boost/boost/functional/hash/detail/hash_float.hpp b/3party/boost/boost/functional/hash/detail/hash_float.hpp
index a98cd700f8..ee0ee87745 100644
--- a/3party/boost/boost/functional/hash/detail/hash_float.hpp
+++ b/3party/boost/boost/functional/hash/detail/hash_float.hpp
@@ -6,11 +6,11 @@
#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER)
#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
-#include <boost/config.hpp>
#include <boost/functional/hash/detail/float_functions.hpp>
#include <boost/functional/hash/detail/limits.hpp>
#include <boost/utility/enable_if.hpp>
@@ -90,15 +90,21 @@ namespace boost
return seed;
}
+ template <typename Float, unsigned digits, unsigned max_exponent>
+ struct enable_binary_hash
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ std::numeric_limits<Float>::is_iec559 &&
+ std::numeric_limits<Float>::digits == digits &&
+ std::numeric_limits<Float>::radix == 2 &&
+ std::numeric_limits<Float>::max_exponent == max_exponent);
+ };
+
template <typename Float>
inline std::size_t float_hash_impl(Float v,
BOOST_DEDUCED_TYPENAME boost::enable_if_c<
- std::numeric_limits<Float>::is_iec559 &&
- std::numeric_limits<Float>::digits == 24 &&
- std::numeric_limits<Float>::radix == 2 &&
- std::numeric_limits<Float>::max_exponent == 128,
- int>::type
- )
+ enable_binary_hash<Float, 24, 128>::value,
+ std::size_t>::type)
{
return hash_binary((char*) &v, 4);
}
@@ -107,12 +113,8 @@ namespace boost
template <typename Float>
inline std::size_t float_hash_impl(Float v,
BOOST_DEDUCED_TYPENAME boost::enable_if_c<
- std::numeric_limits<Float>::is_iec559 &&
- std::numeric_limits<Float>::digits == 53 &&
- std::numeric_limits<Float>::radix == 2 &&
- std::numeric_limits<Float>::max_exponent == 1024,
- int>::type
- )
+ enable_binary_hash<Float, 53, 1024>::value,
+ std::size_t>::type)
{
return hash_binary((char*) &v, 8);
}
@@ -120,12 +122,8 @@ namespace boost
template <typename Float>
inline std::size_t float_hash_impl(Float v,
BOOST_DEDUCED_TYPENAME boost::enable_if_c<
- std::numeric_limits<Float>::is_iec559 &&
- std::numeric_limits<Float>::digits == 64 &&
- std::numeric_limits<Float>::radix == 2 &&
- std::numeric_limits<Float>::max_exponent == 16384,
- int>::type
- )
+ enable_binary_hash<Float, 64, 16384>::value,
+ std::size_t>::type)
{
return hash_binary((char*) &v, 10);
}
@@ -133,12 +131,8 @@ namespace boost
template <typename Float>
inline std::size_t float_hash_impl(Float v,
BOOST_DEDUCED_TYPENAME boost::enable_if_c<
- std::numeric_limits<Float>::is_iec559 &&
- std::numeric_limits<Float>::digits == 113 &&
- std::numeric_limits<Float>::radix == 2 &&
- std::numeric_limits<Float>::max_exponent == 16384,
- int>::type
- )
+ enable_binary_hash<Float, 113, 16384>::value,
+ std::size_t>::type)
{
return hash_binary((char*) &v, 16);
}
diff --git a/3party/boost/boost/functional/hash/detail/limits.hpp b/3party/boost/boost/functional/hash/detail/limits.hpp
index f5b520ea9d..4a971a6ac2 100644
--- a/3party/boost/boost/functional/hash/detail/limits.hpp
+++ b/3party/boost/boost/functional/hash/detail/limits.hpp
@@ -9,8 +9,9 @@
#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER)
#define BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/limits.hpp>
diff --git a/3party/boost/boost/functional/hash/extensions.hpp b/3party/boost/boost/functional/hash/extensions.hpp
index 998c08e46d..eafaefe85d 100644
--- a/3party/boost/boost/functional/hash/extensions.hpp
+++ b/3party/boost/boost/functional/hash/extensions.hpp
@@ -13,6 +13,11 @@
#if !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)
#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+
#include <boost/functional/hash/hash.hpp>
#include <boost/detail/container_fwd.hpp>
#include <boost/utility/enable_if.hpp>
@@ -32,18 +37,10 @@
# include <memory>
#endif
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
#include <boost/type_traits/is_array.hpp>
#endif
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-#include <boost/type_traits/is_const.hpp>
-#endif
-
namespace boost
{
template <class A, class B>
@@ -232,11 +229,7 @@ namespace boost
template <class Array>
struct inner
{
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
static std::size_t call(Array const& v)
-#else
- static std::size_t call(Array& v)
-#endif
{
const int size = sizeof(v) / sizeof(*v);
return boost::hash_range(v, v + size);
@@ -298,8 +291,6 @@ namespace boost
template <bool IsPointer>
struct hash_impl;
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
template <>
struct hash_impl<false>
{
@@ -320,58 +311,6 @@ namespace boost
#endif
};
};
-
-#else // Visual C++ 6.5
-
- // Visual C++ 6.5 has problems with nested member functions and
- // applying const to const types in templates. So we get this:
-
- template <bool IsConst>
- struct hash_impl_msvc
- {
- template <class T>
- struct inner
- : public std::unary_function<T, std::size_t>
- {
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T const>::call(val);
- }
-
- std::size_t operator()(T& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
- };
- };
-
- template <>
- struct hash_impl_msvc<true>
- {
- template <class T>
- struct inner
- : public std::unary_function<T, std::size_t>
- {
- std::size_t operator()(T& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
- };
- };
-
- template <class T>
- struct hash_impl_msvc2
- : public hash_impl_msvc<boost::is_const<T>::value>
- ::BOOST_NESTED_TEMPLATE inner<T> {};
-
- template <>
- struct hash_impl<false>
- {
- template <class T>
- struct inner : public hash_impl_msvc2<T> {};
- };
-
-#endif // Visual C++ 6.5
}
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
}
diff --git a/3party/boost/boost/functional/hash/hash.hpp b/3party/boost/boost/functional/hash/hash.hpp
index aa4e49f8ae..3e5ab5bcf9 100644
--- a/3party/boost/boost/functional/hash/hash.hpp
+++ b/3party/boost/boost/functional/hash/hash.hpp
@@ -1,11 +1,17 @@
-// Copyright 2005-2009 Daniel James.
+// Copyright 2005-2014 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
// issue 6.18.
+//
+// This also contains public domain code from MurmurHash. From the
+// MurmurHash header:
+
+// MurmurHash3 was written by Austin Appleby, and is placed in the public
+// domain. The author hereby disclaims copyright to this source code.
#if !defined(BOOST_FUNCTIONAL_HASH_HASH_HPP)
#define BOOST_FUNCTIONAL_HASH_HASH_HPP
@@ -18,6 +24,7 @@
#include <boost/type_traits/is_enum.hpp>
#include <boost/type_traits/is_integral.hpp>
#include <boost/utility/enable_if.hpp>
+#include <boost/cstdint.hpp>
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
#include <boost/type_traits/is_pointer.hpp>
@@ -27,6 +34,17 @@
#include <typeindex>
#endif
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+
+#if BOOST_MSVC >= 1400
+#pragma warning(disable:6295) // Ill-defined for-loop : 'unsigned int' values
+ // are always of range '0' to '4294967295'.
+ // Loop executes infinitely.
+#endif
+
+#endif
+
#if BOOST_WORKAROUND(__GNUC__, < 3) \
&& !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
#define BOOST_HASH_CHAR_TRAITS string_char_traits
@@ -34,6 +52,12 @@
#define BOOST_HASH_CHAR_TRAITS char_traits
#endif
+#if defined(_MSC_VER)
+# define BOOST_FUNCTIONAL_HASH_ROTL32(x, r) _rotl(x,r)
+#else
+# define BOOST_FUNCTIONAL_HASH_ROTL32(x, r) (x << r) | (x >> (32 - r))
+#endif
+
namespace boost
{
namespace hash_detail
@@ -181,6 +205,51 @@ namespace boost
return seed;
}
+
+ template <typename SizeT>
+ inline void hash_combine_impl(SizeT& seed, SizeT value)
+ {
+ seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2);
+ }
+
+ template <typename SizeT>
+ inline void hash_combine_impl(boost::uint32_t& h1,
+ boost::uint32_t k1)
+ {
+ const uint32_t c1 = 0xcc9e2d51;
+ const uint32_t c2 = 0x1b873593;
+
+ k1 *= c1;
+ k1 = BOOST_FUNCTIONAL_HASH_ROTL32(k1,15);
+ k1 *= c2;
+
+ h1 ^= k1;
+ h1 = BOOST_FUNCTIONAL_HASH_ROTL32(h1,13);
+ h1 = h1*5+0xe6546b64;
+ }
+
+
+// Don't define 64-bit hash combine on platforms with 64 bit integers,
+// and also not for 32-bit gcc as it warns about the 64-bit constant.
+#if !defined(BOOST_NO_INT64_T) && \
+ !(defined(__GNUC__) && ULONG_MAX == 0xffffffff)
+
+ template <typename SizeT>
+ inline void hash_combine_impl(boost::uint64_t& h,
+ boost::uint64_t k)
+ {
+ const uint64_t m = UINT64_C(0xc6a4a7935bd1e995);
+ const int r = 47;
+
+ k *= m;
+ k ^= k >> r;
+ k *= m;
+
+ h ^= k;
+ h *= m;
+ }
+
+#endif // BOOST_NO_INT64_T
}
template <typename T>
@@ -237,16 +306,11 @@ namespace boost
#endif
#endif
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- template <class T>
- inline void hash_combine(std::size_t& seed, T& v)
-#else
template <class T>
inline void hash_combine(std::size_t& seed, T const& v)
-#endif
{
boost::hash<T> hasher;
- seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
+ return boost::hash_detail::hash_combine_impl(seed, hasher(v));
}
#if defined(BOOST_MSVC)
@@ -351,27 +415,6 @@ namespace boost
//
// These are undefined later.
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-#define BOOST_HASH_SPECIALIZE(type) \
- template <> struct hash<type> \
- : public std::unary_function<type, std::size_t> \
- { \
- std::size_t operator()(type v) const \
- { \
- return boost::hash_value(v); \
- } \
- };
-
-#define BOOST_HASH_SPECIALIZE_REF(type) \
- template <> struct hash<type> \
- : public std::unary_function<type, std::size_t> \
- { \
- std::size_t operator()(type const& v) const \
- { \
- return boost::hash_value(v); \
- } \
- };
-#else
#define BOOST_HASH_SPECIALIZE(type) \
template <> struct hash<type> \
: public std::unary_function<type, std::size_t> \
@@ -380,15 +423,6 @@ namespace boost
{ \
return boost::hash_value(v); \
} \
- }; \
- \
- template <> struct hash<const type> \
- : public std::unary_function<const type, std::size_t> \
- { \
- std::size_t operator()(const type v) const \
- { \
- return boost::hash_value(v); \
- } \
};
#define BOOST_HASH_SPECIALIZE_REF(type) \
@@ -399,17 +433,7 @@ namespace boost
{ \
return boost::hash_value(v); \
} \
- }; \
- \
- template <> struct hash<const type> \
- : public std::unary_function<const type, std::size_t> \
- { \
- std::size_t operator()(type const& v) const \
- { \
- return boost::hash_value(v); \
- } \
};
-#endif
BOOST_HASH_SPECIALIZE(bool)
BOOST_HASH_SPECIALIZE(char)
@@ -517,6 +541,11 @@ namespace boost
}
#undef BOOST_HASH_CHAR_TRAITS
+#undef BOOST_FUNCTIONAL_HASH_ROTL32
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
#endif // BOOST_FUNCTIONAL_HASH_HASH_HPP
diff --git a/3party/boost/boost/functional/hash/hash_fwd.hpp b/3party/boost/boost/functional/hash/hash_fwd.hpp
index 1d51b07f2d..01fe012ed6 100644
--- a/3party/boost/boost/functional/hash/hash_fwd.hpp
+++ b/3party/boost/boost/functional/hash/hash_fwd.hpp
@@ -10,11 +10,11 @@
#if !defined(BOOST_FUNCTIONAL_HASH_FWD_HPP)
#define BOOST_FUNCTIONAL_HASH_FWD_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
-#include <boost/config.hpp>
#include <cstddef>
#include <boost/detail/workaround.hpp>
@@ -22,11 +22,7 @@ namespace boost
{
template <class T> struct hash;
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- template <class T> void hash_combine(std::size_t& seed, T& v);
-#else
template <class T> void hash_combine(std::size_t& seed, T const& v);
-#endif
template <class It> std::size_t hash_range(It, It);
template <class It> void hash_range(std::size_t&, It, It);
diff --git a/3party/boost/boost/functional/hash_fwd.hpp b/3party/boost/boost/functional/hash_fwd.hpp
index b640988618..eea9073884 100644
--- a/3party/boost/boost/functional/hash_fwd.hpp
+++ b/3party/boost/boost/functional/hash_fwd.hpp
@@ -3,5 +3,9 @@
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-#include <boost/functional/hash/hash_fwd.hpp>
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+#include <boost/functional/hash/hash_fwd.hpp>
diff --git a/3party/boost/boost/fusion/adapted.hpp b/3party/boost/boost/fusion/adapted.hpp
index bcff7161b0..5bc33899c7 100644
--- a/3party/boost/boost/fusion/adapted.hpp
+++ b/3party/boost/boost/fusion/adapted.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_ADAPTED_30122005_1420)
#define BOOST_FUSION_ADAPTED_30122005_1420
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt.hpp>
#include <boost/fusion/adapted/array.hpp>
#include <boost/fusion/adapted/boost_array.hpp>
@@ -18,7 +19,7 @@
// The std_tuple_iterator adaptor only supports implementations
// using variadic templates
-#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/fusion/adapted/std_tuple.hpp>
#endif
diff --git a/3party/boost/boost/fusion/adapted/adt.hpp b/3party/boost/boost/fusion/adapted/adt.hpp
index a8293caaf8..d70cf82386 100644
--- a/3party/boost/boost/fusion/adapted/adt.hpp
+++ b/3party/boost/boost/fusion/adapted/adt.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_HPP
#define BOOST_FUSION_ADAPTED_ADT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/adapted/adt/adapt_adt_named.hpp>
diff --git a/3party/boost/boost/fusion/adapted/adt/adapt_adt.hpp b/3party/boost/boost/fusion/adapted/adt/adapt_adt.hpp
index 454ac922e5..3be25b1efc 100644
--- a/3party/boost/boost/fusion/adapted/adt/adapt_adt.hpp
+++ b/3party/boost/boost/fusion/adapted/adt/adapt_adt.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/type_traits/add_reference.hpp>
diff --git a/3party/boost/boost/fusion/adapted/adt/adapt_adt_named.hpp b/3party/boost/boost/fusion/adapted/adt/adapt_adt_named.hpp
index c2ace0130c..617e2f184a 100644
--- a/3party/boost/boost/fusion/adapted/adt/adapt_adt_named.hpp
+++ b/3party/boost/boost/fusion/adapted/adt/adapt_adt_named.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_NAMED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_adt.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
diff --git a/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt.hpp b/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt.hpp
index cce1dfb081..12bf6aa24f 100644
--- a/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt.hpp
+++ b/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
diff --git a/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp b/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp
index b875982533..a420e5d3cb 100644
--- a/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp
+++ b/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_NAMED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
diff --git a/3party/boost/boost/fusion/adapted/adt/detail/adapt_base.hpp b/3party/boost/boost/fusion/adapted/adt/detail/adapt_base.hpp
index bddc79de7e..3de396dd6b 100644
--- a/3party/boost/boost/fusion/adapted/adt/detail/adapt_base.hpp
+++ b/3party/boost/boost/fusion/adapted/adt/detail/adapt_base.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_HPP
#define BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/seq/seq.hpp>
#include <boost/preprocessor/seq/elem.hpp>
@@ -39,6 +40,7 @@
> \
{ \
template<class Val> \
+ BOOST_FUSION_GPU_ENABLED \
static void \
boost_fusion_adapt_adt_impl_set( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj, \
@@ -47,6 +49,7 @@
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 3, ATTRIBUTE); \
} \
\
+ BOOST_FUSION_GPU_ENABLED \
static BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) \
boost_fusion_adapt_adt_impl_get( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj) \
@@ -54,6 +57,7 @@
return BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 2, ATTRIBUTE); \
} \
\
+ BOOST_FUSION_GPU_ENABLED \
static BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) \
boost_fusion_adapt_adt_impl_get( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const& obj) \
@@ -73,12 +77,14 @@
{ \
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) type; \
\
+ BOOST_FUSION_GPU_ENABLED \
explicit \
adt_attribute_proxy( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const& o) \
: obj(&o) \
{} \
\
+ BOOST_FUSION_GPU_ENABLED \
type get() const \
{ \
return access::adt_attribute_access< \
@@ -87,6 +93,7 @@
>::boost_fusion_adapt_adt_impl_get(*obj); \
} \
\
+ BOOST_FUSION_GPU_ENABLED \
operator type() const \
{ \
return get(); \
@@ -106,6 +113,7 @@
{ \
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) type; \
\
+ BOOST_FUSION_GPU_ENABLED \
explicit \
adt_attribute_proxy( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& o) \
@@ -113,6 +121,7 @@
{} \
\
template<class Val> \
+ BOOST_FUSION_GPU_ENABLED \
adt_attribute_proxy& \
operator=(Val const& val) \
{ \
@@ -123,6 +132,7 @@
return *this; \
} \
\
+ BOOST_FUSION_GPU_ENABLED \
type get() const \
{ \
return access::adt_attribute_access< \
@@ -131,6 +141,7 @@
>::boost_fusion_adapt_adt_impl_get(*obj); \
} \
\
+ BOOST_FUSION_GPU_ENABLED \
operator type() const \
{ \
return get(); \
@@ -170,6 +181,7 @@
> \
type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type \
call(Seq& obj) \
{ \
diff --git a/3party/boost/boost/fusion/adapted/adt/detail/extension.hpp b/3party/boost/boost/fusion/adapted/adt/detail/extension.hpp
index 2f4db4dd09..6349118053 100644
--- a/3party/boost/boost/fusion/adapted/adt/detail/extension.hpp
+++ b/3party/boost/boost/fusion/adapted/adt/detail/extension.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_DETAIL_EXTENSION_HPP
#define BOOST_FUSION_ADAPTED_ADT_DETAIL_EXTENSION_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/fusion/support/as_const.hpp>
@@ -19,16 +20,17 @@ namespace boost { namespace fusion
{
namespace detail
{
- template <typename T, typename Dummy>
- struct get_identity
- : remove_const<typename remove_reference<T>::type>
- {};
+ template <typename T, typename Dummy>
+ struct get_identity
+ : remove_const<typename remove_reference<T>::type>
+ {};
}
namespace extension
{
// Overload as_const() to unwrap adt_attribute_proxy.
template <typename T, int N, bool Const>
+ BOOST_FUSION_GPU_ENABLED
typename adt_attribute_proxy<T, N, Const>::type as_const(const adt_attribute_proxy<T, N, Const>& proxy)
{
return proxy.get();
diff --git a/3party/boost/boost/fusion/adapted/array/at_impl.hpp b/3party/boost/boost/fusion/adapted/array/at_impl.hpp
index 12f0372670..084fffc208 100644
--- a/3party/boost/boost/fusion/adapted/array/at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/array/at_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_AT_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_AT_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/remove_extent.hpp>
@@ -26,6 +27,7 @@ namespace boost { namespace fusion { namespace extension
add_reference<typename remove_extent<Seq>::type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
diff --git a/3party/boost/boost/fusion/adapted/array/begin_impl.hpp b/3party/boost/boost/fusion/adapted/array/begin_impl.hpp
index 2ee4d707b1..4ffaba01f1 100644
--- a/3party/boost/boost/fusion/adapted/array/begin_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/array/begin_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_BEGIN_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_BEGIN_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
namespace boost { namespace fusion { namespace extension
@@ -30,6 +31,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
diff --git a/3party/boost/boost/fusion/adapted/array/deref_impl.hpp b/3party/boost/boost/fusion/adapted/array/deref_impl.hpp
index a58cf99001..a7dc7cb9ca 100644
--- a/3party/boost/boost/fusion/adapted/array/deref_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/array/deref_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_DEREF_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_DEREF_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/remove_extent.hpp>
@@ -28,6 +29,7 @@ namespace boost { namespace fusion { namespace extension
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{
diff --git a/3party/boost/boost/fusion/adapted/array/end_impl.hpp b/3party/boost/boost/fusion/adapted/array/end_impl.hpp
index 5b367f9c00..d36c6b81b3 100644
--- a/3party/boost/boost/fusion/adapted/array/end_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/array/end_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_END_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_END_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/type_traits/rank.hpp>
#include <boost/type_traits/extent.hpp>
@@ -32,6 +33,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
diff --git a/3party/boost/boost/fusion/adapted/array/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/array/is_sequence_impl.hpp
index d6de858561..0f5d31fad3 100644
--- a/3party/boost/boost/fusion/adapted/array/is_sequence_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/array/is_sequence_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_IS_SEQUENCE_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_IS_SEQUENCE_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/adapted/array/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/array/is_view_impl.hpp
index 238eac0e58..7cf69d8a01 100644
--- a/3party/boost/boost/fusion/adapted/array/is_view_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/array/is_view_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_IS_VIEW_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_IS_VIEW_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/adapted/array/size_impl.hpp b/3party/boost/boost/fusion/adapted/array/size_impl.hpp
index 8be5a29d81..d208da1472 100644
--- a/3party/boost/boost/fusion/adapted/array/size_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/array/size_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_SIZE_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_SIZE_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/rank.hpp>
#include <boost/type_traits/extent.hpp>
diff --git a/3party/boost/boost/fusion/adapted/array/tag_of.hpp b/3party/boost/boost/fusion/adapted/array/tag_of.hpp
index 7c732a7021..d62fe65b84 100644
--- a/3party/boost/boost/fusion/adapted/array/tag_of.hpp
+++ b/3party/boost/boost/fusion/adapted/array/tag_of.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_TAG_OF_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_TAG_OF_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
#include <cstddef>
diff --git a/3party/boost/boost/fusion/adapted/array/value_at_impl.hpp b/3party/boost/boost/fusion/adapted/array/value_at_impl.hpp
index 4e04c37a8f..9aab11b528 100644
--- a/3party/boost/boost/fusion/adapted/array/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/array/value_at_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_VALUE_AT_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_VALUE_AT_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_extent.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/adapted/array/value_of_impl.hpp b/3party/boost/boost/fusion/adapted/array/value_of_impl.hpp
index 2bbddf235e..3f91e80133 100644
--- a/3party/boost/boost/fusion/adapted/array/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/array/value_of_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_VALUE_OF_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_VALUE_OF_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_extent.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/adapted/boost_array.hpp b/3party/boost/boost/fusion/adapted/boost_array.hpp
index ed9fd9b3ad..eb6c0af37a 100644
--- a/3party/boost/boost/fusion/adapted/boost_array.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_array.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_BOOST_ARRAY_27122005_1035)
#define BOOST_FUSION_BOOST_ARRAY_27122005_1035
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
#include <boost/fusion/adapted/boost_array/tag_of.hpp>
#include <boost/fusion/adapted/boost_array/detail/is_view_impl.hpp>
diff --git a/3party/boost/boost/fusion/adapted/boost_array/array_iterator.hpp b/3party/boost/boost/fusion/adapted/boost_array/array_iterator.hpp
index 1246144980..0e39d45709 100644
--- a/3party/boost/boost/fusion/adapted/boost_array/array_iterator.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_array/array_iterator.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_ARRAY_ITERATOR_26122005_2250)
#define BOOST_FUSION_ARRAY_ITERATOR_26122005_2250
+#include <boost/fusion/support/config.hpp>
#include <cstddef>
#include <boost/config.hpp>
#include <boost/mpl/int.hpp>
@@ -31,6 +32,7 @@ namespace boost { namespace fusion
typedef mpl::int_<Pos> index;
typedef Array array_type;
+ BOOST_FUSION_GPU_ENABLED
array_iterator(Array& a)
: array(a) {}
@@ -55,6 +57,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const & it)
{
@@ -69,6 +72,7 @@ namespace boost { namespace fusion
typedef typename Iterator::array_type array_type;
typedef array_iterator<array_type, index::value + N::value> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -91,6 +95,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{
diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/at_impl.hpp
index 6df8858663..15235e8e57 100644
--- a/3party/boost/boost/fusion/adapted/boost_array/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_array/detail/at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_AT_IMPL_27122005_1241)
#define BOOST_FUSION_AT_IMPL_27122005_1241
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/mpl/if.hpp>
@@ -32,6 +33,7 @@ namespace boost { namespace fusion {
typename Sequence::const_reference,
typename Sequence::reference>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/begin_impl.hpp
index c8bce9ffe7..5e0752c145 100644
--- a/3party/boost/boost/fusion/adapted/boost_array/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_array/detail/begin_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_27122005_1117)
#define BOOST_FUSION_BEGIN_IMPL_27122005_1117
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
namespace boost { namespace fusion {
@@ -27,6 +28,7 @@ namespace boost { namespace fusion {
{
typedef array_iterator<Sequence, 0> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{
diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/category_of_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/category_of_impl.hpp
index 8e92efd7c3..038f6db9de 100644
--- a/3party/boost/boost/fusion/adapted/boost_array/detail/category_of_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_array/detail/category_of_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_27122005_1044)
#define BOOST_FUSION_CATEGORY_OF_IMPL_27122005_1044
+#include <boost/fusion/support/config.hpp>
#include <boost/config/no_tr1/utility.hpp>
namespace boost { namespace fusion {
diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/end_impl.hpp
index 38b5a82cb4..13ed1e3e3d 100644
--- a/3party/boost/boost/fusion/adapted/boost_array/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_array/detail/end_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_END_IMPL_27122005_1120)
#define BOOST_FUSION_END_IMPL_27122005_1120
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
namespace boost { namespace fusion {
@@ -27,6 +28,7 @@ namespace boost { namespace fusion {
{
typedef array_iterator<Sequence, Sequence::static_size> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{
diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp
index cdbe6c8382..ac52e720eb 100644
--- a/3party/boost/boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_27122005_1648)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_27122005_1648
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion {
diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/is_view_impl.hpp
index cf63c6a667..0a84aa0ae1 100644
--- a/3party/boost/boost/fusion/adapted/boost_array/detail/is_view_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_array/detail/is_view_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_27042006_2221)
#define BOOST_FUSION_IS_VIEW_IMPL_27042006_2221
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/boost_array/tag_of.hpp b/3party/boost/boost/fusion/adapted/boost_array/tag_of.hpp
index f33c93fc70..d93fed1d30 100644
--- a/3party/boost/boost/fusion/adapted/boost_array/tag_of.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_array/tag_of.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_SEQUENCE_TAG_OF_27122005_1030)
#define FUSION_SEQUENCE_TAG_OF_27122005_1030
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
#include <cstddef>
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple.hpp b/3party/boost/boost/fusion/adapted/boost_tuple.hpp
index 6149478f3a..85af576461 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_BOOST_TUPLE_09272006_0732)
#define BOOST_FUSION_BOOST_TUPLE_09272006_0732
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple/tag_of.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp>
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp
index 551f0fd900..416880b4e9 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_BOOST_TUPLE_ITERATOR_09262006_1851)
#define FUSION_BOOST_TUPLE_ITERATOR_09262006_1851
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/add_const.hpp>
@@ -47,6 +48,7 @@ namespace boost { namespace fusion
{
typedef Cons cons_type;
+ BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons& in_cons)
: cons(in_cons) {}
Cons& cons;
@@ -67,6 +69,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& iter)
{
@@ -88,6 +91,7 @@ namespace boost { namespace fusion
>::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& iter)
{
@@ -121,6 +125,7 @@ namespace boost { namespace fusion
lazy_next_distance<I1, I2>
>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{
@@ -156,6 +161,7 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::null_type>
{
template <typename Cons>
+ BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
@@ -164,6 +170,7 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::null_type const>
{
template <typename Cons>
+ BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
@@ -172,6 +179,7 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::tuple<> >
{
template <typename Cons>
+ BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
@@ -180,6 +188,7 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::tuple<> const>
{
template <typename Cons>
+ BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
}}
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/at_impl.hpp
index 8e2312500b..32ca5bec55 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/at_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_AT_IMPL_09262006_1920)
#define BOOST_FUSION_AT_IMPL_09262006_1920
+#include <boost/fusion/support/config.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/mpl/if.hpp>
@@ -37,6 +38,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp
index 010c442750..1fbbb19c14 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_09272006_0719)
#define BOOST_FUSION_BEGIN_IMPL_09272006_0719
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp>
namespace boost { namespace fusion
@@ -26,6 +27,7 @@ namespace boost { namespace fusion
{
typedef boost_tuple_iterator<Sequence> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/end_impl.hpp
index e54702bf74..9f7f07c3a1 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/end_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_END_IMPL_09272006_0721)
#define BOOST_FUSION_END_IMPL_09272006_0721
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_const.hpp>
@@ -41,6 +42,7 @@ namespace boost { namespace fusion
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp
index c74fb4dfea..eb4a1185e0 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_09272006_0726)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_09272006_0726
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp
index 5d639d2b23..6384411034 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_09272006_0725)
#define BOOST_FUSION_IS_VIEW_IMPL_09272006_0725
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/size_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/size_impl.hpp
index 1dad42030f..371627867b 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/size_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/size_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SIZE_IMPL_09272006_0724)
#define BOOST_FUSION_SIZE_IMPL_09272006_0724
+#include <boost/fusion/support/config.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/mpl/int.hpp>
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp
index 4f5fc6a656..3999271368 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_VALUE_AT_IMPL_09262006_1926)
#define BOOST_FUSION_VALUE_AT_IMPL_09262006_1926
+#include <boost/fusion/support/config.hpp>
#include <boost/tuple/tuple.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/tag_of.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/tag_of.hpp
index 18356de2af..cf24ffbf80 100644
--- a/3party/boost/boost/fusion/adapted/boost_tuple/tag_of.hpp
+++ b/3party/boost/boost/fusion/adapted/boost_tuple/tag_of.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_TAG_OF_09262006_1900)
#define BOOST_FUSION_TAG_OF_09262006_1900
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
namespace boost { namespace tuples
diff --git a/3party/boost/boost/fusion/adapted/mpl.hpp b/3party/boost/boost/fusion/adapted/mpl.hpp
index 739ff93826..3eca0320ad 100644
--- a/3party/boost/boost/fusion/adapted/mpl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_MPL_31122005_1152)
#define BOOST_FUSION_MPL_31122005_1152
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl/detail/begin_impl.hpp>
#include <boost/fusion/adapted/mpl/detail/end_impl.hpp>
#include <boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp>
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/at_impl.hpp
index 99342d7b3c..3fcafaac1d 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_AT_IMPL_31122005_1642)
#define BOOST_FUSION_AT_IMPL_31122005_1642
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
namespace boost { namespace fusion
@@ -27,6 +28,7 @@ namespace boost { namespace fusion
{
typedef typename mpl::at<Sequence, N>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence)
{
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/begin_impl.hpp
index ef274ba0a6..c64e2828f4 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/begin_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_31122005_1209)
#define BOOST_FUSION_BEGIN_IMPL_31122005_1209
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
#include <boost/mpl/begin.hpp>
#include <boost/type_traits/remove_const.hpp>
@@ -32,6 +33,7 @@ namespace boost { namespace fusion {
>::type iterator;
typedef mpl_iterator<iterator> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence)
{
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/category_of_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/category_of_impl.hpp
index be43a56194..8cf2f88bfe 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/category_of_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/category_of_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141)
#define BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/is_sequence.hpp>
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/empty_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/empty_impl.hpp
index f2eb22a0d9..4e385ff513 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/empty_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/empty_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_EMPTY_IMPL_31122005_1554)
#define BOOST_FUSION_EMPTY_IMPL_31122005_1554
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/empty.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/end_impl.hpp
index 613ab63cc0..579e5a69e0 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/end_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_END_IMPL_31122005_1237)
#define BOOST_FUSION_END_IMPL_31122005_1237
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
#include <boost/mpl/end.hpp>
#include <boost/type_traits/add_const.hpp>
@@ -32,6 +33,7 @@ namespace boost { namespace fusion
>::type iterator;
typedef mpl_iterator<iterator> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence)
{
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/has_key_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/has_key_impl.hpp
index b2b3253a8e..9e5a1dc4d2 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/has_key_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/has_key_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_HAS_KEY_IMPL_31122005_1647)
#define BOOST_FUSION_HAS_KEY_IMPL_31122005_1647
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/has_key.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp
index 2c6c5f988b..caed9e62de 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/is_view_impl.hpp
index bd9b7a4211..b494248972 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/is_view_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/is_view_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_03202006_0048)
#define BOOST_FUSION_IS_VIEW_IMPL_03202006_0048
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/size_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/size_impl.hpp
index 38168724d4..379b97dca8 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/size_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/size_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SIZE_IMPL_31122005_1508)
#define BOOST_FUSION_SIZE_IMPL_31122005_1508
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/size.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/value_at_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/value_at_impl.hpp
index 5560b82717..0d3eb6524b 100644
--- a/3party/boost/boost/fusion/adapted/mpl/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/detail/value_at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_VALUE_AT_IMPL_31122005_1621)
#define BOOST_FUSION_VALUE_AT_IMPL_31122005_1621
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/mpl/mpl_iterator.hpp b/3party/boost/boost/fusion/adapted/mpl/mpl_iterator.hpp
index 7caa8ea728..cc03767293 100644
--- a/3party/boost/boost/fusion/adapted/mpl/mpl_iterator.hpp
+++ b/3party/boost/boost/fusion/adapted/mpl/mpl_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_MPL_ITERATOR_05052005_0731)
#define FUSION_MPL_ITERATOR_05052005_0731
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/type_traits/remove_const.hpp>
@@ -37,6 +38,7 @@ namespace boost { namespace fusion
typename Iterator::iterator_type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator)
{
@@ -51,6 +53,7 @@ namespace boost { namespace fusion
typename mpl::next<typename Iterator::iterator_type>::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator)
{
@@ -65,6 +68,7 @@ namespace boost { namespace fusion
typename mpl::prior<typename Iterator::iterator_type>::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator)
{
@@ -79,6 +83,7 @@ namespace boost { namespace fusion
typename mpl::advance<typename Iterator::iterator_type, N>::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& /*i*/)
{
@@ -99,6 +104,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{
diff --git a/3party/boost/boost/fusion/adapted/std_pair.hpp b/3party/boost/boost/fusion/adapted/std_pair.hpp
index 4263e00c98..79de3d44f3 100644
--- a/3party/boost/boost/fusion/adapted/std_pair.hpp
+++ b/3party/boost/boost/fusion/adapted/std_pair.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STD_PAIR_HPP
#define BOOST_FUSION_ADAPTED_STD_PAIR_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <utility>
diff --git a/3party/boost/boost/fusion/adapted/std_tuple.hpp b/3party/boost/boost/fusion/adapted/std_tuple.hpp
index a49b4807d4..984a4df478 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_BOOST_TUPLE_09242011_1744)
#define BOOST_FUSION_BOOST_TUPLE_09242011_1744
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp>
#include <boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp>
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/at_impl.hpp
index 400f366e94..cffd442885 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/at_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_AT_IMPL_09242011_1744)
#define BOOST_FUSION_AT_IMPL_09242011_1744
+#include <boost/fusion/support/config.hpp>
#include <tuple>
#include <utility>
#include <boost/mpl/if.hpp>
@@ -39,6 +40,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/begin_impl.hpp
index 8b219024b8..33613c20b1 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/begin_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_09242011_1744)
#define BOOST_FUSION_BEGIN_IMPL_09242011_1744
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp>
namespace boost { namespace fusion
@@ -26,6 +27,7 @@ namespace boost { namespace fusion
{
typedef std_tuple_iterator<Sequence, 0> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp
index 96d567d5e9..b41e84181f 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp
@@ -4,8 +4,8 @@
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_FUSION_CATEGORY_OF_IMPL_09272006_0726)
-#define BOOST_FUSION_CATEGORY_OF_IMPL_09272006_0726
+#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_04202013_0940)
+#define BOOST_FUSION_CATEGORY_OF_IMPL_04202013_0940
namespace boost { namespace fusion
{
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/end_impl.hpp
index 78782b7943..77048698a1 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/end_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_END_IMPL_09242011_1744)
#define BOOST_FUSION_END_IMPL_09242011_1744
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <tuple>
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
static int const size = std::tuple_size<seq_type>::value;
typedef std_tuple_iterator<Sequence, size> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp
index 6da5bdc34d..672072654d 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_09242011_1744)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_09242011_1744
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp
index 9439431b5a..e161984f22 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_09242011_1744)
#define BOOST_FUSION_IS_VIEW_IMPL_09242011_1744
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/size_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/size_impl.hpp
index d8b10af1ef..11c294e574 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/detail/size_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/size_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SIZE_IMPL_09242011_1744)
#define BOOST_FUSION_SIZE_IMPL_09242011_1744
+#include <boost/fusion/support/config.hpp>
#include <tuple>
#include <boost/mpl/int.hpp>
#include <boost/type_traits/remove_const.hpp>
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp
index fa9656e7b2..e3e853ca42 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_VALUE_AT_IMPL_09242011_1744)
#define BOOST_FUSION_VALUE_AT_IMPL_09242011_1744
+#include <boost/fusion/support/config.hpp>
#include <tuple>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp b/3party/boost/boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp
index 082018a449..c4d957ea0b 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_STD_TUPLE_ITERATOR_09112011_1905)
#define FUSION_STD_TUPLE_ITERATOR_09112011_1905
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/remove_const.hpp>
@@ -35,7 +36,7 @@ namespace boost { namespace fusion
typename add_const<Tuple>::type, Index>
identity;
- explicit std_tuple_iterator(Tuple& tuple)
+ BOOST_FUSION_GPU_ENABLED explicit std_tuple_iterator(Tuple& tuple)
: tuple(tuple) {}
Tuple& tuple;
@@ -57,6 +58,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& iter)
{
@@ -71,6 +73,7 @@ namespace boost { namespace fusion
typedef typename Iterator::tuple_type tuple_type;
typedef std_tuple_iterator<tuple_type, index+N::value> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -93,6 +96,7 @@ namespace boost { namespace fusion
{
typedef mpl::int_<Last::index-First::index> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(First const&, Last const&)
{
diff --git a/3party/boost/boost/fusion/adapted/std_tuple/tag_of.hpp b/3party/boost/boost/fusion/adapted/std_tuple/tag_of.hpp
index 6d7b4d6fb7..e145335445 100644
--- a/3party/boost/boost/fusion/adapted/std_tuple/tag_of.hpp
+++ b/3party/boost/boost/fusion/adapted/std_tuple/tag_of.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_TAG_OF_09112011_1842)
#define BOOST_FUSION_TAG_OF_09112011_1842
+#include <boost/fusion/support/config.hpp>
#include <tuple>
#include <boost/fusion/support/tag_of_fwd.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct.hpp b/3party/boost/boost/fusion/adapted/struct.hpp
index e51b514b0a..3f159038a0 100644
--- a/3party/boost/boost/fusion/adapted/struct.hpp
+++ b/3party/boost/boost/fusion/adapted/struct.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
#include <boost/fusion/adapted/struct/adapt_struct_named.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct.hpp b/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct.hpp
index 755bffd1c6..eca77d613b 100644
--- a/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp b/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp
index 92c3aa3e30..2f1a9a3037 100644
--- a/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_NAMED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct/adapt_struct.hpp b/3party/boost/boost/fusion/adapted/struct/adapt_struct.hpp
index f20533c99e..f60ca03e19 100644
--- a/3party/boost/boost/fusion/adapted/struct/adapt_struct.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/adapt_struct.hpp
@@ -9,6 +9,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/type_traits/add_reference.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct/adapt_struct_named.hpp b/3party/boost/boost/fusion/adapted/struct/adapt_struct_named.hpp
index 17a3d8e3ca..3f29f3a39e 100644
--- a/3party/boost/boost/fusion/adapted/struct/adapt_struct_named.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/adapt_struct_named.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_NAMED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
#include <boost/preprocessor/empty.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct/define_assoc_struct.hpp b/3party/boost/boost/fusion/adapted/struct/define_assoc_struct.hpp
index 9d264e4085..1f5ce8dca7 100644
--- a/3party/boost/boost/fusion/adapted/struct/define_assoc_struct.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/define_assoc_struct.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DEFINE_ASSOC_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_ASSOC_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
#include <boost/fusion/adapted/struct/detail/define_struct.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct/define_struct.hpp b/3party/boost/boost/fusion/adapted/struct/define_struct.hpp
index b733115ac0..fa1f549f91 100644
--- a/3party/boost/boost/fusion/adapted/struct/define_struct.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/define_struct.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/adapted/struct/detail/define_struct.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct/define_struct_inline.hpp b/3party/boost/boost/fusion/adapted/struct/define_struct_inline.hpp
index 9dc5b44cc6..5986c0d445 100644
--- a/3party/boost/boost/fusion/adapted/struct/define_struct_inline.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/define_struct_inline.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_INLINE_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_INLINE_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/adapted/struct/detail/define_struct_inline.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/adapt_base.hpp b/3party/boost/boost/fusion/adapted/struct/detail/adapt_base.hpp
index 1c8f040850..db702ae155 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/adapt_base.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/adapt_base.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_ADAPT_BASE_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_ADAPT_BASE_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
@@ -137,6 +138,7 @@
>::type \
type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type \
call(Seq& seq) \
{ \
@@ -156,6 +158,7 @@
{ \
typedef char const* type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type \
call() \
{ \
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/at_impl.hpp
index 68fd241a88..52ed847d6e 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/at_impl.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_AT_IMPL_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_AT_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/begin_impl.hpp
index a7901fcad5..9cb68719a9 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/begin_impl.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_BEGIN_IMPL_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_BEGIN_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
namespace boost { namespace fusion { namespace extension
@@ -32,6 +33,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
@@ -55,6 +57,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/define_struct.hpp b/3party/boost/boost/fusion/adapted/struct/detail/define_struct.hpp
index 53f1e5d646..44d99f06b4 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/define_struct.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/define_struct.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_DEFINE_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_DEFINE_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/iterator/deref.hpp>
@@ -61,6 +62,7 @@
ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
\
template<typename Seq> \
+ BOOST_FUSION_GPU_ENABLED \
self_type& \
operator=(Seq const& seq) \
{ \
@@ -119,6 +121,7 @@
ATTRIBUTE_TUPEL_SIZE, \
ATTRIBUTES_SEQ) \
\
+ BOOST_FUSION_GPU_ENABLED \
NAME() \
: BOOST_PP_SEQ_FOR_EACH_I_R( \
1, \
@@ -127,6 +130,7 @@
ATTRIBUTES_SEQ) \
{} \
\
+ BOOST_FUSION_GPU_ENABLED \
NAME(self_type const& other_self) \
: BOOST_PP_SEQ_FOR_EACH_I_R( \
1, \
@@ -136,6 +140,7 @@
{} \
\
template<typename Seq> \
+ BOOST_FUSION_GPU_ENABLED \
NAME(Seq const& seq \
BOOST_PP_IF( \
BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
@@ -155,6 +160,7 @@
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_1( \
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
\
+ BOOST_FUSION_GPU_ENABLED \
explicit \
NAME(boost::call_traits< \
BOOST_PP_TUPLE_ELEM( \
@@ -167,6 +173,7 @@
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1( \
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
\
+ BOOST_FUSION_GPU_ENABLED \
explicit \
NAME(typename boost::call_traits< \
typename boost::fusion::detail::get_first_arg< \
@@ -203,6 +210,7 @@
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N( \
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
\
+ BOOST_FUSION_GPU_ENABLED \
NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
1, \
BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I, \
@@ -230,6 +238,7 @@
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_N( \
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
\
+ BOOST_FUSION_GPU_ENABLED \
NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
1, \
BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I, \
@@ -271,10 +280,12 @@
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
\
template<typename Seq> \
+ BOOST_FUSION_GPU_ENABLED \
NAME(Seq const&) \
{} \
\
template<typename Seq> \
+ BOOST_FUSION_GPU_ENABLED \
self_type& \
operator=(Seq const& seq) \
{ \
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 7bc5fe08af..87ab09fa5d 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
@@ -8,6 +8,8 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_DEFINE_STRUCT_INLINE_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_DEFINE_STRUCT_INLINE_HPP
+#include <boost/fusion/support/config.hpp>
+#include <boost/config.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/sequence/sequence_facade.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
@@ -25,8 +27,32 @@
#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/seq/size.hpp>
#include <boost/preprocessor/seq/enum.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
+// MSVC and GCC <= 4.4 have a bug that affects partial specializations of
+// nested templates under some circumstances. This affects the implementation
+// of BOOST_FUSION_DEFINE_STRUCT_INLINE, which uses such specializations for
+// the iterator class's 'deref' and 'value_of' metafunctions. On these compilers
+// an alternate implementation for these metafunctions is used that does not
+// require such specializations. The alternate implementation takes longer
+// to compile so its use is restricted to the offending compilers.
+// For MSVC, the bug was reported at https://connect.microsoft.com/VisualStudio/feedback/details/757891/c-compiler-error-involving-partial-specializations-of-nested-templates
+// For GCC, 4.4 and earlier are no longer maintained so there is no need
+// to report a bug.
+#if defined(BOOST_MSVC) || (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ <= 4)))
+ #define BOOST_FUSION_NEED_NESTED_TEMPLATE_PARTIAL_SPEC_WKND
+#endif
+
+#ifdef BOOST_FUSION_NEED_NESTED_TEMPLATE_PARTIAL_SPEC_WKND
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/fusion/sequence/intrinsic/at_c.hpp>
+#include <boost/fusion/container/vector.hpp>
+#endif
+
+
#define BOOST_FUSION_MAKE_DEFAULT_INIT_LIST_ENTRY(R, DATA, N, ATTRIBUTE) \
BOOST_PP_COMMA_IF(N) BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE)()
@@ -87,6 +113,7 @@
struct deref<SPEC_TYPE, N> > \
{ \
typedef typename boost_fusion_detail_Sq::t##N##_type TYPE_QUAL& type; \
+ BOOST_FUSION_GPU_ENABLED \
static type call(CALL_ARG_TYPE, N> const& iter) \
{ \
return iter.seq_.BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \
@@ -136,6 +163,7 @@
typename boost_fusion_detail_Sq::t##N##_type& \
>::type type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type call(boost_fusion_detail_Sq& sq) \
{ \
return sq. BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \
@@ -148,6 +176,96 @@
#define BOOST_FUSION_MAKE_DATA_MEMBER(R, DATA, N, ATTRIBUTE) \
BOOST_PP_TUPLE_ELEM(2, 0, ATTRIBUTE) BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE);
+#ifdef BOOST_FUSION_NEED_NESTED_TEMPLATE_PARTIAL_SPEC_WKND
+
+#define BOOST_FUSION_DEFINE_ITERATOR_VALUE_OF(NAME, ATTRIBUTE_SEQ_SIZE) \
+ template <typename boost_fusion_detail_Iterator> \
+ struct value_of : boost::fusion::result_of::at_c< \
+ ref_vec_t, \
+ boost_fusion_detail_Iterator::index::value \
+ > \
+ { \
+ };
+
+#define BOOST_FUSION_DEFINE_ITERATOR_DEREF(NAME, ATTRIBUTES_SEQ) \
+ template <typename boost_fusion_detail_Iterator> \
+ struct deref \
+ { \
+ typedef typename boost::remove_const< \
+ boost_fusion_detail_Iterator \
+ >::type iterator_raw_type; \
+ \
+ static const int index = iterator_raw_type::index::value; \
+ \
+ typedef typename boost::fusion::result_of::at_c< \
+ ref_vec_t, \
+ index \
+ >::type result_raw_type; \
+ \
+ typedef typename boost::mpl::if_< \
+ boost::is_const<typename iterator_raw_type::sequence_type>, \
+ typename boost::add_const<result_raw_type>::type, \
+ result_raw_type \
+ >::type type; \
+ \
+ BOOST_FUSION_GPU_ENABLED \
+ static type call(iterator_raw_type const& iter) \
+ { \
+ return boost::fusion::at_c<index>(iter.ref_vec); \
+ } \
+ };
+
+#define BOOST_FUSION_MAKE_ITERATOR_WKND_FIELD_NAME(R, DATA, N, ATTRIBUTE) \
+ BOOST_PP_COMMA_IF(N) seq.BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE)
+
+#define BOOST_FUSION_DEFINE_ITERATOR_WKND_INIT_LIST_ENTRIES(ATTRIBUTES_SEQ) \
+ , ref_vec(BOOST_PP_SEQ_FOR_EACH_I( \
+ BOOST_FUSION_MAKE_ITERATOR_WKND_FIELD_NAME, \
+ ~, \
+ BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ)))
+
+#define BOOST_FUSION_MAKE_ITERATOR_WKND_REF(Z, N, DATA) \
+ BOOST_PP_COMMA_IF(N) \
+ typename boost::mpl::if_< \
+ boost::is_const<boost_fusion_detail_Seq>, \
+ typename boost::add_const< \
+ typename boost_fusion_detail_Seq::t##N##_type \
+ >::type, \
+ typename boost_fusion_detail_Seq::t##N##_type \
+ >::type&
+
+#define BOOST_FUSION_DEFINE_ITERATOR_WKND_MEMBERS(ATTRIBUTES_SEQ_SIZE) \
+ typedef boost::fusion::vector< \
+ BOOST_PP_REPEAT( \
+ ATTRIBUTES_SEQ_SIZE, \
+ BOOST_FUSION_MAKE_ITERATOR_WKND_REF, \
+ ~) \
+ > ref_vec_t; \
+ \
+ ref_vec_t ref_vec;
+
+#else
+
+#define BOOST_FUSION_DEFINE_ITERATOR_VALUE_OF(NAME, ATTRIBUTES_SEQ_SIZE) \
+ template <typename boost_fusion_detail_T> struct value_of; \
+ BOOST_PP_REPEAT( \
+ ATTRIBUTES_SEQ_SIZE, \
+ BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS, \
+ NAME)
+
+#define BOOST_FUSION_DEFINE_ITERATOR_DEREF(NAME, ATTRIBUTES_SEQ) \
+ template <typename boost_fusion_detail_T> struct deref; \
+ BOOST_PP_SEQ_FOR_EACH_I( \
+ BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS, \
+ NAME, \
+ ATTRIBUTES_SEQ)
+
+#define BOOST_FUSION_DEFINE_ITERATOR_WKND_INIT_LIST_ENTRIES(ATTRIBUTES_SEQ)
+
+#define BOOST_FUSION_DEFINE_ITERATOR_WKND_MEMBERS(ATTRIBUTES_SEQ_SIZE)
+
+#endif // BOOST_FUSION_NEED_NESTED_TEMPLATE_PARTIAL_SPEC_WKND
+
// Note: We can't nest the iterator inside the struct because we run into
// a MSVC10 bug involving partial specializations of nested templates.
@@ -218,22 +336,20 @@
typedef boost::mpl::int_<N> index; \
typedef boost_fusion_detail_Seq sequence_type; \
\
+ BOOST_FUSION_GPU_ENABLED \
BOOST_FUSION_ITERATOR_NAME(NAME)(boost_fusion_detail_Seq& seq) \
- : seq_(seq) {} \
+ : seq_(seq) \
+ BOOST_FUSION_DEFINE_ITERATOR_WKND_INIT_LIST_ENTRIES( \
+ (0)ATTRIBUTES_SEQ) \
+ {} \
\
boost_fusion_detail_Seq& seq_; \
\
- template <typename boost_fusion_detail_T> struct value_of; \
- BOOST_PP_REPEAT( \
- ATTRIBUTES_SEQ_SIZE, \
- BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS, \
- NAME) \
+ BOOST_FUSION_DEFINE_ITERATOR_WKND_MEMBERS(ATTRIBUTES_SEQ_SIZE) \
\
- template <typename boost_fusion_detail_T> struct deref; \
- BOOST_PP_SEQ_FOR_EACH_I( \
- BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS, \
- NAME, \
- ATTRIBUTES_SEQ) \
+ BOOST_FUSION_DEFINE_ITERATOR_VALUE_OF(NAME, ATTRIBUTES_SEQ_SIZE) \
+ \
+ BOOST_FUSION_DEFINE_ITERATOR_DEREF(NAME, ATTRIBUTES_SEQ) \
\
template <typename boost_fusion_detail_It> \
struct next \
@@ -243,6 +359,7 @@
boost_fusion_detail_It::index::value + 1 \
> type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type call(boost_fusion_detail_It const& it) \
{ \
return type(it.seq_); \
@@ -257,6 +374,7 @@
boost_fusion_detail_It::index::value - 1 \
> type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type call(boost_fusion_detail_It const& it) \
{ \
return type(it.seq_); \
@@ -274,6 +392,7 @@
typename boost_fusion_detail_It1::index \
>::type type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type call(boost_fusion_detail_It1 const& it1, \
boost_fusion_detail_It2 const& it2) \
{ \
@@ -293,6 +412,7 @@
+ boost_fusion_detail_M::value \
> type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type call(boost_fusion_detail_It const& it) \
{ \
return type(it.seq_); \
@@ -325,12 +445,14 @@
(NAME, ATTRIBUTES_SEQ) \
\
template <typename boost_fusion_detail_Seq> \
+ BOOST_FUSION_GPU_ENABLED \
NAME(const boost_fusion_detail_Seq& rhs) \
{ \
boost::fusion::copy(rhs, *this); \
} \
\
template <typename boost_fusion_detail_Seq> \
+ BOOST_FUSION_GPU_ENABLED \
NAME& operator=(const boost_fusion_detail_Seq& rhs) \
{ \
boost::fusion::copy(rhs, *this); \
@@ -343,6 +465,7 @@
typedef BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, 0> \
type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type call(boost_fusion_detail_Sq& sq) \
{ \
return type(sq); \
@@ -357,6 +480,7 @@
ATTRIBUTES_SEQ_SIZE \
> type; \
\
+ BOOST_FUSION_GPU_ENABLED \
static type call(boost_fusion_detail_Sq& sq) \
{ \
return type(sq); \
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/deref_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/deref_impl.hpp
index 3f25efef58..a3bc9f3e19 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/deref_impl.hpp
@@ -28,6 +28,7 @@ namespace boost { namespace fusion { namespace extension
typedef typename impl::type type;
+ BOOST_FUSION_GPU_ENABLED
static
type
call(It const& it)
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/end_impl.hpp
index 0d09092957..b17eba7139 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/end_impl.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_END_IMPL_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_END_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
namespace boost { namespace fusion { namespace extension
@@ -32,6 +33,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
@@ -55,6 +57,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/extension.hpp b/3party/boost/boost/fusion/adapted/struct/detail/extension.hpp
index 17edb89dca..e63a0a4535 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/extension.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/extension.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_EXTENSION_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_EXTENSION_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/category_of.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp
index c32222f8cf..afcbe5ba44 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_IS_SEQUENCE_IMPL_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_IS_SEQUENCE_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/namespace.hpp b/3party/boost/boost/fusion/adapted/struct/detail/namespace.hpp
index 0f3ec5e0b1..2ad509df86 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/namespace.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/namespace.hpp
@@ -9,6 +9,7 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_NAMESPACE_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_NAMESPACE_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/dec.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/seq/seq.hpp>
diff --git a/3party/boost/boost/fusion/adapted/struct/detail/proxy_type.hpp b/3party/boost/boost/fusion/adapted/struct/detail/proxy_type.hpp
index bf0a6ebd53..350137a482 100644
--- a/3party/boost/boost/fusion/adapted/struct/detail/proxy_type.hpp
+++ b/3party/boost/boost/fusion/adapted/struct/detail/proxy_type.hpp
@@ -9,6 +9,7 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_PROXY_TYPE_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_PROXY_TYPE_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/detail/namespace.hpp>
#define BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE_IMPL( \
@@ -18,6 +19,7 @@
\
struct NAME \
{ \
+ BOOST_FUSION_GPU_ENABLED \
NAME(WRAPPED_TYPE& in_obj) \
: obj(in_obj) \
{} \
diff --git a/3party/boost/boost/fusion/algorithm.hpp b/3party/boost/boost/fusion/algorithm.hpp
index 0b085bf41a..f698ff9771 100644
--- a/3party/boost/boost/fusion/algorithm.hpp
+++ b/3party/boost/boost/fusion/algorithm.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ALGORITHM_10022005_0549)
#define FUSION_ALGORITHM_10022005_0549
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration.hpp>
#include <boost/fusion/algorithm/query.hpp>
#include <boost/fusion/algorithm/transformation.hpp>
diff --git a/3party/boost/boost/fusion/algorithm/auxiliary.hpp b/3party/boost/boost/fusion/algorithm/auxiliary.hpp
index 34deba37d1..ec327a0bdb 100644
--- a/3party/boost/boost/fusion/algorithm/auxiliary.hpp
+++ b/3party/boost/boost/fusion/algorithm/auxiliary.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ALGORITHM_AUXILIARY_02192011_0907)
#define FUSION_ALGORITHM_AUXILIARY_02192011_0907
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/auxiliary/copy.hpp>
#endif
diff --git a/3party/boost/boost/fusion/algorithm/auxiliary/copy.hpp b/3party/boost/boost/fusion/algorithm/auxiliary/copy.hpp
index fd866468eb..7ac8e6f589 100644
--- a/3party/boost/boost/fusion/algorithm/auxiliary/copy.hpp
+++ b/3party/boost/boost/fusion/algorithm/auxiliary/copy.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_COPY_02162011_2308)
#define FUSION_COPY_02162011_2308
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -33,12 +34,14 @@ namespace boost { namespace fusion
typedef typename result_of::end<Seq2>::type end2_type;
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static void
call(I1 const&, I2 const&, mpl::true_)
{
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static void
call(I1 const& src, I2 const& dest, mpl::false_)
{
@@ -47,6 +50,7 @@ namespace boost { namespace fusion
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static void
call(I1 const& src, I2 const& dest)
{
@@ -57,6 +61,7 @@ namespace boost { namespace fusion
}
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if_c<
@@ -69,7 +74,7 @@ namespace boost { namespace fusion
copy(Seq1 const& src, Seq2& dest)
{
BOOST_STATIC_ASSERT(
- result_of::size<Seq1>::value == result_of::size<Seq2>::value);
+ result_of::size<Seq1>::value <= result_of::size<Seq2>::value);
detail::sequence_copy<
Seq1 const, Seq2>::
diff --git a/3party/boost/boost/fusion/algorithm/auxiliary/move.hpp b/3party/boost/boost/fusion/algorithm/auxiliary/move.hpp
new file mode 100644
index 0000000000..688f54a9f2
--- /dev/null
+++ b/3party/boost/boost/fusion/algorithm/auxiliary/move.hpp
@@ -0,0 +1,89 @@
+/*=============================================================================
+ Copyright (c) 2001-2013 Joel de Guzman
+
+ 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_MOVE_01192013_2225)
+#define FUSION_MOVE_01192013_2225
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/sequence/comparison/detail/equal_to.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/ice.hpp>
+
+#if defined (BOOST_MSVC)
+# pragma warning(push)
+# pragma warning (disable: 4100) // unreferenced formal parameter
+#endif
+
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ template <typename Seq1, typename Seq2>
+ struct sequence_move
+ {
+ typedef typename result_of::end<Seq1>::type end1_type;
+ typedef typename result_of::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
+ static void
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ }
+
+ template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
+ static void
+ call(I1 const& src, I2 const& dest, mpl::false_)
+ {
+ *dest = std::move(*src);
+ call(fusion::next(src), fusion::next(dest));
+ }
+
+ template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
+ static void
+ call(I1 const& src, I2 const& dest)
+ {
+ typename result_of::equal_to<I1, end1_type>::type eq;
+ return call(src, dest, eq);
+ }
+ };
+ }
+
+ template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
+ inline
+ typename
+ enable_if_c<
+ type_traits::ice_and<
+ traits::is_sequence<Seq1>::value
+ , traits::is_sequence<Seq2>::value
+ >::value,
+ void
+ >::type
+ move(Seq1&& src, Seq2& dest)
+ {
+ BOOST_STATIC_ASSERT(
+ result_of::size<Seq1>::value <= result_of::size<Seq2>::value);
+
+ detail::sequence_move<
+ Seq1, Seq2>::
+ call(fusion::begin(src), fusion::begin(dest));
+ }
+}}
+
+#if defined (BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/3party/boost/boost/fusion/algorithm/iteration.hpp b/3party/boost/boost/fusion/algorithm/iteration.hpp
index 16a331b358..0b58a28ffe 100644
--- a/3party/boost/boost/fusion/algorithm/iteration.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ALGORITHM_ITERATION_10022005_0549)
#define FUSION_ALGORITHM_ITERATION_10022005_0549
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/accumulate.hpp>
#include <boost/fusion/algorithm/iteration/fold.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
diff --git a/3party/boost/boost/fusion/algorithm/iteration/accumulate.hpp b/3party/boost/boost/fusion/algorithm/iteration/accumulate.hpp
index 4b676dea6a..430f9eb546 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/accumulate.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/accumulate.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ACCUMULATE_09172005_1032)
#define FUSION_ACCUMULATE_09172005_1032
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/accumulate_fwd.hpp>
#include <boost/fusion/algorithm/iteration/fold.hpp>
#include <boost/fusion/support/is_sequence.hpp>
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
lazy_enable_if<
@@ -37,6 +39,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
lazy_enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/iteration/accumulate_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/accumulate_fwd.hpp
index a4ca316c1e..0633349825 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/accumulate_fwd.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/accumulate_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_ACCUMULATE_FWD_HPP_INCLUDED)
#define BOOST_FUSION_ACCUMULATE_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/utility/enable_if.hpp>
@@ -19,6 +20,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -27,6 +29,7 @@ namespace boost { namespace fusion
accumulate(Sequence& seq, State const& state, F f);
template <typename Sequence, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_enable_if<
traits::is_sequence<Sequence>
diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/fold.hpp
index 174c4b105c..71f60a7c63 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/detail/fold.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/detail/fold.hpp
@@ -58,6 +58,7 @@ namespace boost { namespace fusion
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -103,6 +104,7 @@ namespace boost { namespace fusion
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,3>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -133,6 +135,7 @@ namespace boost { namespace fusion
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,2>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -150,6 +153,7 @@ namespace boost { namespace fusion
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,1>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -162,8 +166,9 @@ namespace boost { namespace fusion
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,0>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
- call(State const& state,It0 const& it0, F)
+ call(State const& state,It0 const&, F)
{
return static_cast<Result>(state);
}
@@ -340,6 +345,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(StateRef state, Seq& seq, F f)
{
@@ -363,6 +369,7 @@ namespace boost { namespace fusion
{
typedef StateRef type;
+ BOOST_FUSION_GPU_ENABLED
static StateRef
call(StateRef state, Seq&, F)
{
@@ -397,6 +404,7 @@ namespace boost { namespace fusion
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::BOOST_FUSION_FOLD_NAME<
Seq
, State const
@@ -411,6 +419,7 @@ namespace boost { namespace fusion
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::BOOST_FUSION_FOLD_NAME<
Seq const
, State const
@@ -425,6 +434,7 @@ namespace boost { namespace fusion
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::BOOST_FUSION_FOLD_NAME<
Seq
, State const
@@ -439,6 +449,7 @@ namespace boost { namespace fusion
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::BOOST_FUSION_FOLD_NAME<
Seq const
, State const
diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/for_each.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/for_each.hpp
index 66a1935076..81b3ab7028 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/detail/for_each.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/detail/for_each.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_FOR_EACH_05052005_1028)
#define FUSION_FOR_EACH_05052005_1028
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
@@ -20,12 +21,14 @@ namespace boost { namespace fusion {
namespace detail
{
template <typename First, typename Last, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline void
for_each_linear(First const&, Last const&, F const&, mpl::true_)
{
}
template <typename First, typename Last, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline void
for_each_linear(First const& first, Last const& last, F const& f, mpl::false_)
{
@@ -36,6 +39,7 @@ namespace detail
template <typename Sequence, typename F, typename Tag>
+ BOOST_FUSION_GPU_ENABLED
inline void
for_each_dispatch(Sequence& seq, F const& f, Tag)
{
@@ -52,6 +56,7 @@ namespace detail
struct for_each_unrolled
{
template<typename I0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static void call(I0 const& i0, F const& f)
{
f(*i0);
@@ -72,6 +77,7 @@ namespace detail
struct for_each_unrolled<3>
{
template<typename I0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static void call(I0 const& i0, F const& f)
{
f(*i0);
@@ -88,6 +94,7 @@ namespace detail
struct for_each_unrolled<2>
{
template<typename I0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static void call(I0 const& i0, F const& f)
{
f(*i0);
@@ -101,6 +108,7 @@ namespace detail
struct for_each_unrolled<1>
{
template<typename I0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static void call(I0 const& i0, F const& f)
{
f(*i0);
@@ -111,12 +119,14 @@ namespace detail
struct for_each_unrolled<0>
{
template<typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static void call(It const&, F const&)
{
}
};
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline void
for_each_dispatch(Sequence& seq, F const& f, random_access_traversal_tag)
{
@@ -126,6 +136,7 @@ namespace detail
}
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline void
for_each(Sequence& seq, F const& f, mpl::false_) // unsegmented implementation
{
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 c89a7ddad1..140c70b1c2 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp
@@ -24,6 +24,7 @@ namespace boost { namespace fusion
struct unrolled_fold
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
struct unrolled_fold<Result,3>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -90,6 +92,7 @@ namespace boost { namespace fusion
struct unrolled_fold<Result,2>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -104,6 +107,7 @@ namespace boost { namespace fusion
struct unrolled_fold<Result,1>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -115,6 +119,7 @@ namespace boost { namespace fusion
struct unrolled_fold<Result,0>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const&, F)
{
@@ -277,6 +282,7 @@ namespace boost { namespace fusion
, SeqSize
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(StateRef state, Seq& seq, F f)
{
@@ -296,6 +302,7 @@ namespace boost { namespace fusion
struct fold_impl<0,StateRef,Seq,F>
{
typedef StateRef type;
+ BOOST_FUSION_GPU_ENABLED
static StateRef
call(StateRef state, Seq&, F)
{
@@ -327,6 +334,7 @@ namespace boost { namespace fusion
{};
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::fold<
Seq
, State const
@@ -340,6 +348,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::fold<
Seq const
, State const
@@ -353,6 +362,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::fold<
Seq
, State const
@@ -366,6 +376,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::fold<
Seq const
, State const
diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp
index 74f8a0577b..1211550d39 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp
@@ -23,6 +23,7 @@ namespace boost { namespace fusion
struct unrolled_iter_fold
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -63,6 +64,7 @@ namespace boost { namespace fusion
struct unrolled_iter_fold<Result,3>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -89,6 +91,7 @@ namespace boost { namespace fusion
struct unrolled_iter_fold<Result,2>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -103,6 +106,7 @@ namespace boost { namespace fusion
struct unrolled_iter_fold<Result,1>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -114,8 +118,9 @@ namespace boost { namespace fusion
struct unrolled_iter_fold<Result,0>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
- call(State const& state,It0 const& it0, F)
+ call(State const& state,It0 const&, F)
{
return static_cast<Result>(state);
}
@@ -276,6 +281,7 @@ namespace boost { namespace fusion
, SeqSize
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(StateRef state, Seq& seq, F f)
{
@@ -295,6 +301,7 @@ namespace boost { namespace fusion
struct iter_fold_impl<0,StateRef,Seq,F>
{
typedef StateRef type;
+ BOOST_FUSION_GPU_ENABLED
static StateRef
call(StateRef state, Seq&, F)
{
@@ -326,6 +333,7 @@ namespace boost { namespace fusion
{};
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::iter_fold<
Seq
, State const
@@ -339,6 +347,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::iter_fold<
Seq const
, State const
@@ -352,6 +361,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::iter_fold<
Seq
, State const
@@ -365,6 +375,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::iter_fold<
Seq const
, State const
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 48a4134467..cc78231a50 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
@@ -23,6 +23,7 @@ namespace boost { namespace fusion
struct unrolled_reverse_fold
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -63,6 +64,7 @@ namespace boost { namespace fusion
struct unrolled_reverse_fold<Result,3>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -89,6 +91,7 @@ namespace boost { namespace fusion
struct unrolled_reverse_fold<Result,2>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -103,6 +106,7 @@ namespace boost { namespace fusion
struct unrolled_reverse_fold<Result,1>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -114,6 +118,7 @@ namespace boost { namespace fusion
struct unrolled_reverse_fold<Result,0>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const&, F)
{
@@ -276,6 +281,7 @@ namespace boost { namespace fusion
, SeqSize
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(StateRef state, Seq& seq, F f)
{
@@ -295,6 +301,7 @@ namespace boost { namespace fusion
struct reverse_fold_impl<0,StateRef,Seq,F>
{
typedef StateRef type;
+ BOOST_FUSION_GPU_ENABLED
static StateRef
call(StateRef state, Seq&, F)
{
@@ -326,6 +333,7 @@ namespace boost { namespace fusion
{};
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_fold<
Seq
, State const
@@ -339,6 +347,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_fold<
Seq const
, State const
@@ -352,6 +361,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_fold<
Seq
, State const
@@ -365,6 +375,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_fold<
Seq const
, State const
diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp
index 93b8c988dc..3023a91239 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp
@@ -23,6 +23,7 @@ namespace boost { namespace fusion
struct unrolled_reverse_iter_fold
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -63,6 +64,7 @@ namespace boost { namespace fusion
struct unrolled_reverse_iter_fold<Result,3>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -89,6 +91,7 @@ namespace boost { namespace fusion
struct unrolled_reverse_iter_fold<Result,2>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -103,6 +106,7 @@ namespace boost { namespace fusion
struct unrolled_reverse_iter_fold<Result,1>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
call(State const& state,It0 const& it0,F f)
{
@@ -114,8 +118,9 @@ namespace boost { namespace fusion
struct unrolled_reverse_iter_fold<Result,0>
{
template<typename State, typename It0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static Result
- call(State const& state,It0 const& it0, F)
+ call(State const& state,It0 const&, F)
{
return static_cast<Result>(state);
}
@@ -276,6 +281,7 @@ namespace boost { namespace fusion
, SeqSize
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(StateRef state, Seq& seq, F f)
{
@@ -295,6 +301,7 @@ namespace boost { namespace fusion
struct reverse_iter_fold_impl<0,StateRef,Seq,F>
{
typedef StateRef type;
+ BOOST_FUSION_GPU_ENABLED
static StateRef
call(StateRef state, Seq&, F)
{
@@ -326,6 +333,7 @@ namespace boost { namespace fusion
{};
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_iter_fold<
Seq
, State const
@@ -339,6 +347,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_iter_fold<
Seq const
, State const
@@ -352,6 +361,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_iter_fold<
Seq
, State const
@@ -365,6 +375,7 @@ namespace boost { namespace fusion
f);
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_iter_fold<
Seq const
, State const
diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_fold.hpp
index 2371e1891e..58aab114a2 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_fold.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_fold.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_FOLD_S_HPP_INCLUDED)
#define BOOST_FUSION_FOLD_S_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/fold_fwd.hpp>
#include <boost/fusion/support/segmented_fold_until.hpp>
@@ -15,6 +16,7 @@ namespace boost { namespace fusion { namespace detail
template <typename Fun>
struct segmented_fold_fun
{
+ BOOST_FUSION_GPU_ENABLED
explicit segmented_fold_fun(Fun const& f)
: fun(f)
{}
@@ -27,6 +29,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename result_of::fold<Sequence, State, Fun>::type type;
typedef mpl::true_ continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, State const& state, Context const&, segmented_fold_fun const& fun)
{
return fusion::fold(seq, state, fun.fun);
@@ -49,6 +52,7 @@ namespace boost { namespace fusion { namespace detail
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(State& state, Sequence& seq, Fun fun)
{
return fusion::segmented_fold_until(seq, state, segmented_fold_fun<Fun>(fun));
diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp
index f7ffb24d94..a5d6d4be3e 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_FOR_EACH_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_FOR_EACH_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/support/void.hpp>
#include <boost/fusion/algorithm/iteration/for_each_fwd.hpp>
@@ -17,6 +18,7 @@ namespace boost { namespace fusion { namespace detail
template <typename Fun>
struct segmented_for_each_fun
{
+ BOOST_FUSION_GPU_ENABLED
explicit segmented_for_each_fun(Fun const& f)
: fun(f)
{}
@@ -29,6 +31,7 @@ namespace boost { namespace fusion { namespace detail
typedef void_ type;
typedef mpl::true_ continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, State const&, Context const&, segmented_for_each_fun const& fun)
{
fusion::for_each(seq, fun.fun);
@@ -38,6 +41,7 @@ namespace boost { namespace fusion { namespace detail
};
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline void
for_each(Sequence& seq, F const& f, mpl::true_) // segmented implementation
{
diff --git a/3party/boost/boost/fusion/algorithm/iteration/fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/fold.hpp
index 813bb6b377..a83b33b15a 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/fold.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/fold.hpp
@@ -9,6 +9,7 @@
#ifndef BOOST_FUSION_ALGORITHM_ITERATION_FOLD_HPP
#define BOOST_FUSION_ALGORITHM_ITERATION_FOLD_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/fold_fwd.hpp>
#include <boost/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
diff --git a/3party/boost/boost/fusion/algorithm/iteration/fold_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/fold_fwd.hpp
index edb43e012e..cd8dcd81c6 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/fold_fwd.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/fold_fwd.hpp
@@ -17,6 +17,7 @@ namespace boost { namespace fusion
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::fold<
Seq
, State const
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
fold(Seq& seq, State const& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::fold<
Seq const
, State const
@@ -33,6 +35,7 @@ namespace boost { namespace fusion
fold(Seq const& seq, State const& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::fold<
Seq
, State const
@@ -41,6 +44,7 @@ namespace boost { namespace fusion
fold(Seq& seq, State& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::fold<
Seq const
, State const
diff --git a/3party/boost/boost/fusion/algorithm/iteration/for_each.hpp b/3party/boost/boost/fusion/algorithm/iteration/for_each.hpp
index 17cde34a4b..836f4810a6 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/for_each.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/for_each.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_FOR_EACH_20070527_0943)
#define BOOST_FUSION_FOR_EACH_20070527_0943
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/detail/for_each.hpp>
#include <boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp>
#include <boost/fusion/support/is_segmented.hpp>
@@ -26,6 +27,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if<
@@ -38,6 +40,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/iteration/for_each_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/for_each_fwd.hpp
index b757873e6e..44a3d1da24 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/for_each_fwd.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/for_each_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_FOR_EACH_FWD_HPP_INCLUDED)
#define BOOST_FUSION_FOR_EACH_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/utility/enable_if.hpp>
@@ -19,6 +20,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if<
@@ -28,6 +30,7 @@ namespace boost { namespace fusion
for_each(Sequence& seq, F const& f);
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/iteration/iter_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/iter_fold.hpp
index 37c7cde40e..4c03cdf80f 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/iter_fold.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/iter_fold.hpp
@@ -9,6 +9,7 @@
#ifndef BOOST_FUSION_ALGORITHM_ITERATION_ITER_FOLD_HPP
#define BOOST_FUSION_ALGORITHM_ITERATION_ITER_FOLD_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/iter_fold_fwd.hpp>
#include <boost/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
diff --git a/3party/boost/boost/fusion/algorithm/iteration/iter_fold_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/iter_fold_fwd.hpp
index 96ff387d27..8e4898ba0b 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/iter_fold_fwd.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/iter_fold_fwd.hpp
@@ -17,6 +17,7 @@ namespace boost { namespace fusion
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::iter_fold<
Seq
, State const
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
iter_fold(Seq& seq, State const& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::iter_fold<
Seq const
, State const
@@ -33,6 +35,7 @@ namespace boost { namespace fusion
iter_fold(Seq const& seq, State const& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::iter_fold<
Seq
, State const
@@ -41,6 +44,7 @@ namespace boost { namespace fusion
iter_fold(Seq& seq, State& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::iter_fold<
Seq const
, State const
diff --git a/3party/boost/boost/fusion/algorithm/iteration/reverse_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/reverse_fold.hpp
index c8bdef51e1..76e6bf2575 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/reverse_fold.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/reverse_fold.hpp
@@ -9,6 +9,7 @@
#ifndef BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_FOLD_HPP
#define BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_FOLD_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp>
#include <boost/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
diff --git a/3party/boost/boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp
index 40546b538a..c5596e79ef 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp
@@ -17,6 +17,7 @@ namespace boost { namespace fusion
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::reverse_fold<
Seq
, State const
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
reverse_fold(Seq& seq, State const& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::reverse_fold<
Seq const
, State const
@@ -33,6 +35,7 @@ namespace boost { namespace fusion
reverse_fold(Seq const& seq, State const& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::reverse_fold<
Seq
, State const
@@ -41,6 +44,7 @@ namespace boost { namespace fusion
reverse_fold(Seq& seq, State& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::reverse_fold<
Seq const
, State const
diff --git a/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold.hpp
index 4c3d551f3c..e49f8b8310 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_ITER_FOLD_HPP
#define BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_ITER_FOLD_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp>
#include <boost/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
diff --git a/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp
index a28b4eec76..7b49ea69c2 100644
--- a/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp
+++ b/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp
@@ -17,6 +17,7 @@ namespace boost { namespace fusion
}
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::reverse_iter_fold<
Seq
, State const
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
reverse_iter_fold(Seq& seq, State const& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::reverse_iter_fold<
Seq const
, State const
@@ -33,6 +35,7 @@ namespace boost { namespace fusion
reverse_iter_fold(Seq const& seq, State const& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::reverse_iter_fold<
Seq
, State const
@@ -41,6 +44,7 @@ namespace boost { namespace fusion
reverse_iter_fold(Seq& seq, State& state, F f);
template<typename Seq, typename State, typename F>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::reverse_iter_fold<
Seq const
, State const
diff --git a/3party/boost/boost/fusion/algorithm/query.hpp b/3party/boost/boost/fusion/algorithm/query.hpp
index b4f54e5f50..1e999b4337 100644
--- a/3party/boost/boost/fusion/algorithm/query.hpp
+++ b/3party/boost/boost/fusion/algorithm/query.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ALGORITHM_QUERY_10022005_0549)
#define FUSION_ALGORITHM_QUERY_10022005_0549
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/all.hpp>
#include <boost/fusion/algorithm/query/any.hpp>
#include <boost/fusion/algorithm/query/count.hpp>
diff --git a/3party/boost/boost/fusion/algorithm/query/all.hpp b/3party/boost/boost/fusion/algorithm/query/all.hpp
index c6a47d8e25..d30d7952f7 100644
--- a/3party/boost/boost/fusion/algorithm/query/all.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/all.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_ALL_05052005_1238)
#define BOOST_FUSION_ALL_05052005_1238
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/algorithm/query/detail/all.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline bool
all(Sequence const& seq, F f)
{
diff --git a/3party/boost/boost/fusion/algorithm/query/any.hpp b/3party/boost/boost/fusion/algorithm/query/any.hpp
index 8b1fca0696..4ab971485e 100644
--- a/3party/boost/boost/fusion/algorithm/query/any.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/any.hpp
@@ -9,6 +9,7 @@
#if !defined(FUSION_ANY_05052005_1230)
#define FUSION_ANY_05052005_1230
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/algorithm/query/detail/any.hpp>
@@ -24,6 +25,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline bool
any(Sequence const& seq, F f)
{
diff --git a/3party/boost/boost/fusion/algorithm/query/count.hpp b/3party/boost/boost/fusion/algorithm/query/count.hpp
index 0488716327..a86bf4fe13 100644
--- a/3party/boost/boost/fusion/algorithm/query/count.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/count.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_COUNT_09162005_0150)
#define BOOST_FUSION_COUNT_09162005_0150
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/count_if.hpp>
#include <boost/fusion/algorithm/query/detail/count.hpp>
#include <boost/fusion/support/is_sequence.hpp>
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename T>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/query/count_if.hpp b/3party/boost/boost/fusion/algorithm/query/count_if.hpp
index 792979733a..ac44ac649b 100644
--- a/3party/boost/boost/fusion/algorithm/query/count_if.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/count_if.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_COUNT_IF_09162005_0137)
#define BOOST_FUSION_COUNT_IF_09162005_0137
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/detail/count_if.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/support/is_sequence.hpp>
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/query/detail/all.hpp b/3party/boost/boost/fusion/algorithm/query/detail/all.hpp
index 1465e20683..9c7b4c2672 100644
--- a/3party/boost/boost/fusion/algorithm/query/detail/all.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/detail/all.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_ALL_05052005_1237)
#define FUSION_ALL_05052005_1237
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
@@ -20,6 +21,7 @@
namespace boost { namespace fusion { namespace detail
{
template <typename First, typename Last, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline bool
linear_all(First const&, Last const&, F const&, mpl::true_)
{
@@ -27,6 +29,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename First, typename Last, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline bool
linear_all(First const& first, Last const& last, F& f, mpl::false_)
{
@@ -40,6 +43,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename Sequence, typename F, typename Tag>
+ BOOST_FUSION_GPU_ENABLED
inline bool
all(Sequence const& seq, F f, Tag)
{
@@ -56,6 +60,7 @@ namespace boost { namespace fusion { namespace detail
struct unrolled_all
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const& it, F f)
{
return
@@ -71,6 +76,7 @@ namespace boost { namespace fusion { namespace detail
struct unrolled_all<3>
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const& it, F f)
{
return
@@ -84,6 +90,7 @@ namespace boost { namespace fusion { namespace detail
struct unrolled_all<2>
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const& it, F f)
{
return
@@ -96,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
struct unrolled_all<1>
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const& it, F f)
{
return f(*it);
@@ -106,6 +114,7 @@ namespace boost { namespace fusion { namespace detail
struct unrolled_all<0>
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const& /*it*/, F /*f*/)
{
return true;
@@ -113,6 +122,7 @@ namespace boost { namespace fusion { namespace detail
};
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline bool
all(Sequence const& seq, F f, random_access_traversal_tag)
{
diff --git a/3party/boost/boost/fusion/algorithm/query/detail/any.hpp b/3party/boost/boost/fusion/algorithm/query/detail/any.hpp
index 5f6b85772a..4e0536836c 100644
--- a/3party/boost/boost/fusion/algorithm/query/detail/any.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/detail/any.hpp
@@ -9,6 +9,7 @@
#if !defined(FUSION_ANY_05052005_1229)
#define FUSION_ANY_05052005_1229
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion {
namespace detail
{
template <typename First, typename Last, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline bool
linear_any(First const&, Last const&, F const&, mpl::true_)
{
@@ -30,6 +32,7 @@ namespace detail
}
template <typename First, typename Last, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline bool
linear_any(First const& first, Last const& last, F& f, mpl::false_)
{
@@ -43,6 +46,7 @@ namespace detail
}
template <typename Sequence, typename F, typename Tag>
+ BOOST_FUSION_GPU_ENABLED
inline bool
any(Sequence const& seq, F f, Tag)
{
@@ -59,6 +63,7 @@ namespace detail
struct unrolled_any
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const& it, F f)
{
return
@@ -74,6 +79,7 @@ namespace detail
struct unrolled_any<3>
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const& it, F f)
{
return
@@ -87,6 +93,7 @@ namespace detail
struct unrolled_any<2>
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const& it, F f)
{
return
@@ -99,6 +106,7 @@ namespace detail
struct unrolled_any<1>
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const& it, F f)
{
return f(*it);
@@ -109,6 +117,7 @@ namespace detail
struct unrolled_any<0>
{
template <typename It, typename F>
+ BOOST_FUSION_GPU_ENABLED
static bool call(It const&, F)
{
return false;
@@ -116,6 +125,7 @@ namespace detail
};
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline bool
any(Sequence const& seq, F f, random_access_traversal_tag)
{
diff --git a/3party/boost/boost/fusion/algorithm/query/detail/count.hpp b/3party/boost/boost/fusion/algorithm/query/detail/count.hpp
index ffc6086a0c..5e046f6b5d 100644
--- a/3party/boost/boost/fusion/algorithm/query/detail/count.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/detail/count.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_COUNT_09162005_0158)
#define FUSION_COUNT_09162005_0158
+#include <boost/fusion/support/config.hpp>
#include <boost/config.hpp>
#include <boost/mpl/or.hpp>
#include <boost/type_traits/is_convertible.hpp>
@@ -27,6 +28,7 @@ namespace boost { namespace fusion { namespace detail
struct compare_convertible<true>
{
template <typename T1, typename T2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(T1 const& x, T2 const& y)
{
@@ -39,6 +41,7 @@ namespace boost { namespace fusion { namespace detail
struct compare_convertible<false>
{
template <typename T1, typename T2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(T1 const&, T2 const&)
{
@@ -50,10 +53,12 @@ namespace boost { namespace fusion { namespace detail
struct count_compare
{
typedef typename detail::call_param<T1>::type param;
+ BOOST_FUSION_GPU_ENABLED
count_compare(param in_x)
: x(in_x) {}
template <typename T2>
+ BOOST_FUSION_GPU_ENABLED
bool
operator()(T2 const& y)
{
diff --git a/3party/boost/boost/fusion/algorithm/query/detail/count_if.hpp b/3party/boost/boost/fusion/algorithm/query/detail/count_if.hpp
index 7110071ddf..baf9fe9f4f 100644
--- a/3party/boost/boost/fusion/algorithm/query/detail/count_if.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/detail/count_if.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_COUNT_IF_09162005_0141)
#define BOOST_FUSION_COUNT_IF_09162005_0141
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion {
namespace detail
{
template <typename First, typename Last, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline int
linear_count_if(First const&, Last const&, F const&, mpl::true_)
{
@@ -30,6 +32,7 @@ namespace detail
}
template <typename First, typename Last, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline int
linear_count_if(First const& first, Last const& last, F& f, mpl::false_)
{
@@ -45,6 +48,7 @@ namespace detail
}
template <typename Sequence, typename F, typename Tag>
+ BOOST_FUSION_GPU_ENABLED
inline int
count_if(Sequence const& seq, F f, Tag)
{
@@ -61,6 +65,7 @@ namespace detail
struct unrolled_count_if
{
template<typename I0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static int call(I0 const& i0, F f)
{
int ct = unrolled_count_if<n-4>::
@@ -91,6 +96,7 @@ namespace detail
struct unrolled_count_if<3>
{
template<typename I0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static int call(I0 const& i0, F f)
{
int ct = 0;
@@ -115,6 +121,7 @@ namespace detail
struct unrolled_count_if<2>
{
template<typename I0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static int call(I0 const& i0, F f)
{
int ct = 0;
@@ -135,6 +142,7 @@ namespace detail
struct unrolled_count_if<1>
{
template<typename I0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static int call(I0 const& i0, F f)
{
int ct = 0;
@@ -149,6 +157,7 @@ namespace detail
struct unrolled_count_if<0>
{
template<typename I0, typename F>
+ BOOST_FUSION_GPU_ENABLED
static int call(I0 const&, F)
{
return 0;
@@ -156,6 +165,7 @@ namespace detail
};
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline int
count_if(Sequence const& seq, F f, random_access_traversal_tag)
{
diff --git a/3party/boost/boost/fusion/algorithm/query/detail/find_if.hpp b/3party/boost/boost/fusion/algorithm/query/detail/find_if.hpp
index f7bae4533c..41baab4893 100644
--- a/3party/boost/boost/fusion/algorithm/query/detail/find_if.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/detail/find_if.hpp
@@ -9,6 +9,7 @@
#if !defined(FUSION_FIND_IF_05052005_1107)
#define FUSION_FIND_IF_05052005_1107
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
@@ -183,6 +184,7 @@ namespace detail
type;
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static type
recursive_call(Iterator const& iter, mpl::true_)
{
@@ -190,6 +192,7 @@ namespace detail
}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static type
recursive_call(Iterator const& iter, mpl::false_)
{
@@ -197,6 +200,7 @@ namespace detail
}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static type
recursive_call(Iterator const& iter)
{
@@ -205,6 +209,7 @@ namespace detail
}
template <typename Iterator, typename Tag>
+ BOOST_FUSION_GPU_ENABLED
static type
choose_call(Iterator const& iter, Tag)
{
@@ -212,6 +217,7 @@ namespace detail
}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static type
choose_call(Iterator const& iter, random_access_traversal_tag)
{
@@ -220,6 +226,7 @@ namespace detail
}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static type
iter_call(Iterator const& iter)
{
@@ -227,6 +234,7 @@ namespace detail
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/query/detail/segmented_find.hpp b/3party/boost/boost/fusion/algorithm/query/detail/segmented_find.hpp
index ead57834c6..21c13a46e5 100644
--- a/3party/boost/boost/fusion/algorithm/query/detail/segmented_find.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/detail/segmented_find.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_FIND_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_FIND_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/fusion/algorithm/query/find_fwd.hpp>
@@ -44,16 +45,19 @@ namespace boost { namespace fusion { namespace detail
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, State const&state, Context const& context, segmented_find_fun)
{
return call_impl(seq, state, context, continue_type());
}
+ BOOST_FUSION_GPU_ENABLED
static type call_impl(Sequence&, State const&state, Context const&, mpl::true_)
{
return state;
}
+ BOOST_FUSION_GPU_ENABLED
static type call_impl(Sequence& seq, State const&, Context const& context, mpl::false_)
{
return fusion::make_segmented_iterator(fusion::find<T>(seq), context);
@@ -74,6 +78,7 @@ namespace boost { namespace fusion { namespace detail
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
return fusion::segmented_fold_until(
diff --git a/3party/boost/boost/fusion/algorithm/query/detail/segmented_find_if.hpp b/3party/boost/boost/fusion/algorithm/query/detail/segmented_find_if.hpp
index 745edd2f7d..798ed085cf 100644
--- a/3party/boost/boost/fusion/algorithm/query/detail/segmented_find_if.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/detail/segmented_find_if.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_FIND_IF_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_FIND_IF_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/fusion/algorithm/query/find_if_fwd.hpp>
@@ -44,16 +45,19 @@ namespace boost { namespace fusion { namespace detail
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, State const&state, Context const& context, segmented_find_if_fun)
{
return call_impl(seq, state, context, continue_type());
}
+ BOOST_FUSION_GPU_ENABLED
static type call_impl(Sequence&, State const&state, Context const&, mpl::true_)
{
return state;
}
+ BOOST_FUSION_GPU_ENABLED
static type call_impl(Sequence& seq, State const&, Context const& context, mpl::false_)
{
return fusion::make_segmented_iterator(fusion::find_if<Pred>(seq), context);
@@ -74,6 +78,7 @@ namespace boost { namespace fusion { namespace detail
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
return fusion::segmented_fold_until(
diff --git a/3party/boost/boost/fusion/algorithm/query/find.hpp b/3party/boost/boost/fusion/algorithm/query/find.hpp
index 16def0899a..56e53c394a 100644
--- a/3party/boost/boost/fusion/algorithm/query/find.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/find.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_FIND_05052005_1107)
#define FUSION_FIND_05052005_1107
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/find_if_fwd.hpp>
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
#include <boost/fusion/algorithm/query/detail/segmented_find.hpp>
@@ -46,6 +47,7 @@ namespace boost { namespace fusion
}
template <typename T, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -58,6 +60,7 @@ namespace boost { namespace fusion
}
template <typename T, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::find<Sequence const, T>::type const
find(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/query/find_fwd.hpp b/3party/boost/boost/fusion/algorithm/query/find_fwd.hpp
index 96d989a484..a43b5eacb9 100644
--- a/3party/boost/boost/fusion/algorithm/query/find_fwd.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/find_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_FIND_FWD_HPP_INCLUDED)
#define BOOST_FUSION_FIND_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_const.hpp>
@@ -19,6 +20,7 @@ namespace boost { namespace fusion
}
template <typename T, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -27,6 +29,7 @@ namespace boost { namespace fusion
find(Sequence& seq);
template <typename T, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::find<Sequence const, T>::type const
find(Sequence const& seq);
}}
diff --git a/3party/boost/boost/fusion/algorithm/query/find_if.hpp b/3party/boost/boost/fusion/algorithm/query/find_if.hpp
index 9dbd46b58c..c9e5016270 100644
--- a/3party/boost/boost/fusion/algorithm/query/find_if.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/find_if.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_FIND_IF_05052005_1108)
#define FUSION_FIND_IF_05052005_1108
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/find_if_fwd.hpp>
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
#include <boost/fusion/algorithm/query/detail/segmented_find_if.hpp>
@@ -41,6 +42,7 @@ namespace boost { namespace fusion
}
template <typename Pred, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -53,6 +55,7 @@ namespace boost { namespace fusion
}
template <typename Pred, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::find_if<Sequence const, Pred>::type const
find_if(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/query/find_if_fwd.hpp b/3party/boost/boost/fusion/algorithm/query/find_if_fwd.hpp
index adb8f2de60..419a68c472 100644
--- a/3party/boost/boost/fusion/algorithm/query/find_if_fwd.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/find_if_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_FIND_IF_FWD_HPP_INCLUDED)
#define BOOST_FUSION_FIND_IF_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_const.hpp>
@@ -20,6 +21,7 @@ namespace boost { namespace fusion
}
template <typename Pred, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_disable_if<
is_const<Sequence>
@@ -28,6 +30,7 @@ namespace boost { namespace fusion
find_if(Sequence& seq);
template <typename Pred, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::find_if<Sequence const, Pred>::type const
find_if(Sequence const& seq);
}}
diff --git a/3party/boost/boost/fusion/algorithm/query/none.hpp b/3party/boost/boost/fusion/algorithm/query/none.hpp
index 4eaac17fa8..bb554e3b5f 100644
--- a/3party/boost/boost/fusion/algorithm/query/none.hpp
+++ b/3party/boost/boost/fusion/algorithm/query/none.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NONE_07062005_1128)
#define BOOST_FUSION_NONE_07062005_1128
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/any.hpp>
namespace boost { namespace fusion
@@ -22,6 +23,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline bool
none(Sequence const& seq, F f)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation.hpp b/3party/boost/boost/fusion/algorithm/transformation.hpp
index c2e152c20a..b9534e80db 100644
--- a/3party/boost/boost/fusion/algorithm/transformation.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ALGORITHM_TRANSFORMATION_10022005_0551)
#define FUSION_ALGORITHM_TRANSFORMATION_10022005_0551
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/clear.hpp>
#include <boost/fusion/algorithm/transformation/erase.hpp>
#include <boost/fusion/algorithm/transformation/erase_key.hpp>
@@ -25,6 +26,7 @@
#include <boost/fusion/algorithm/transformation/replace_if.hpp>
#include <boost/fusion/algorithm/transformation/reverse.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
-#include <boost/fusion/algorithm/transformation/zip.hpp>
+#include <boost/fusion/algorithm/transformation/zip.hpp>
+#include <boost/fusion/algorithm/transformation/flatten.hpp>
#endif
diff --git a/3party/boost/boost/fusion/algorithm/transformation/clear.hpp b/3party/boost/boost/fusion/algorithm/transformation/clear.hpp
index 946e45c842..de643408f6 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/clear.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/clear.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_CLEAR_09172005_1127)
#define FUSION_CLEAR_09172005_1127
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector10.hpp>
namespace boost { namespace fusion
@@ -21,6 +22,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::clear<Sequence const>::type
clear(Sequence const& /*seq*/)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp
index 706b667d99..33f353619e 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp
@@ -18,7 +18,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 >
- struct zip< T0 , T1 >
+ struct zip< T0 , T1
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -26,6 +28,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1>::type
zip(T0 const& t0 , T1 const& t1)
{
@@ -37,7 +40,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 >
- struct zip< T0 , T1 , T2 >
+ struct zip< T0 , T1 , T2
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -45,6 +50,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2)
{
@@ -56,7 +62,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 >
- struct zip< T0 , T1 , T2 , T3 >
+ struct zip< T0 , T1 , T2 , T3
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -64,6 +72,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
{
@@ -75,7 +84,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
- struct zip< T0 , T1 , T2 , T3 , T4 >
+ struct zip< T0 , T1 , T2 , T3 , T4
+ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -83,6 +94,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
{
@@ -94,7 +106,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5
+ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -102,6 +116,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
{
@@ -113,7 +128,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6
+ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -121,6 +138,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
{
@@ -132,7 +150,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -140,6 +160,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
{
@@ -151,7 +172,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -159,6 +182,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
{
@@ -170,7 +194,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -178,6 +204,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp
index 286a01200a..e7c790e04d 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp
@@ -18,7 +18,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 >
- struct zip< T0 , T1 >
+ struct zip< T0 , T1
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -26,6 +28,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1>::type
zip(T0 const& t0 , T1 const& t1)
{
@@ -37,7 +40,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 >
- struct zip< T0 , T1 , T2 >
+ struct zip< T0 , T1 , T2
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -45,6 +50,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2)
{
@@ -56,7 +62,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 >
- struct zip< T0 , T1 , T2 , T3 >
+ struct zip< T0 , T1 , T2 , T3
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -64,6 +72,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
{
@@ -75,7 +84,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
- struct zip< T0 , T1 , T2 , T3 , T4 >
+ struct zip< T0 , T1 , T2 , T3 , T4
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -83,6 +94,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
{
@@ -94,7 +106,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -102,6 +116,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
{
@@ -113,7 +128,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -121,6 +138,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
{
@@ -132,7 +150,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -140,6 +160,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
{
@@ -151,7 +172,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -159,6 +182,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
{
@@ -170,7 +194,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -178,6 +204,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
{
@@ -189,7 +216,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -197,6 +226,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10)
{
@@ -208,7 +238,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -216,6 +248,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11)
{
@@ -227,7 +260,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -235,6 +270,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12)
{
@@ -246,7 +282,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -254,6 +292,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13)
{
@@ -265,7 +304,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
+ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -273,6 +314,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14)
{
@@ -284,7 +326,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
+ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -292,6 +336,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15)
{
@@ -303,7 +348,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
+ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -311,6 +358,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16)
{
@@ -322,7 +370,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
+ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -330,6 +380,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17)
{
@@ -341,7 +392,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
+ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -349,6 +402,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18)
{
@@ -360,7 +414,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
+ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -368,6 +424,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp
index 13cc0a735c..215a0ce645 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp
@@ -18,7 +18,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 >
- struct zip< T0 , T1 >
+ struct zip< T0 , T1
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -26,6 +28,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1>::type
zip(T0 const& t0 , T1 const& t1)
{
@@ -37,7 +40,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 >
- struct zip< T0 , T1 , T2 >
+ struct zip< T0 , T1 , T2
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -45,6 +50,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2)
{
@@ -56,7 +62,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 >
- struct zip< T0 , T1 , T2 , T3 >
+ struct zip< T0 , T1 , T2 , T3
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -64,6 +72,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
{
@@ -75,7 +84,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
- struct zip< T0 , T1 , T2 , T3 , T4 >
+ struct zip< T0 , T1 , T2 , T3 , T4
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -83,6 +94,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
{
@@ -94,7 +106,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -102,6 +116,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
{
@@ -113,7 +128,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -121,6 +138,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
{
@@ -132,7 +150,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -140,6 +160,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
{
@@ -151,7 +172,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -159,6 +182,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
{
@@ -170,7 +194,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -178,6 +204,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
{
@@ -189,7 +216,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -197,6 +226,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10)
{
@@ -208,7 +238,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -216,6 +248,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11)
{
@@ -227,7 +260,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -235,6 +270,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12)
{
@@ -246,7 +282,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -254,6 +292,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13)
{
@@ -265,7 +304,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -273,6 +314,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14)
{
@@ -284,7 +326,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -292,6 +336,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15)
{
@@ -303,7 +348,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -311,6 +358,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16)
{
@@ -322,7 +370,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -330,6 +380,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17)
{
@@ -341,7 +392,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -349,6 +402,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18)
{
@@ -360,7 +414,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -368,6 +424,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19)
{
@@ -379,7 +436,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -387,6 +446,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20)
{
@@ -398,7 +458,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -406,6 +468,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21)
{
@@ -417,7 +480,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -425,6 +490,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22)
{
@@ -436,7 +502,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -444,6 +512,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23)
{
@@ -455,7 +524,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
+ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -463,6 +534,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24)
{
@@ -474,7 +546,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25
+ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -482,6 +556,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25)
{
@@ -493,7 +568,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26
+ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -501,6 +578,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26)
{
@@ -512,7 +590,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27
+ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -520,6 +600,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27)
{
@@ -531,7 +612,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28
+ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -539,6 +622,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28)
{
@@ -550,7 +634,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29
+ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -558,6 +644,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp
index 110ac89602..9e37eedd70 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp
@@ -18,7 +18,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 >
- struct zip< T0 , T1 >
+ struct zip< T0 , T1
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -26,6 +28,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1>::type
zip(T0 const& t0 , T1 const& t1)
{
@@ -37,7 +40,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 >
- struct zip< T0 , T1 , T2 >
+ struct zip< T0 , T1 , T2
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -45,6 +50,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2)
{
@@ -56,7 +62,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 >
- struct zip< T0 , T1 , T2 , T3 >
+ struct zip< T0 , T1 , T2 , T3
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -64,6 +72,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
{
@@ -75,7 +84,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
- struct zip< T0 , T1 , T2 , T3 , T4 >
+ struct zip< T0 , T1 , T2 , T3 , T4
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -83,6 +94,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
{
@@ -94,7 +106,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -102,6 +116,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
{
@@ -113,7 +128,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -121,6 +138,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
{
@@ -132,7 +150,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -140,6 +160,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
{
@@ -151,7 +172,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -159,6 +182,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
{
@@ -170,7 +194,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -178,6 +204,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
{
@@ -189,7 +216,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -197,6 +226,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10)
{
@@ -208,7 +238,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -216,6 +248,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11)
{
@@ -227,7 +260,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -235,6 +270,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12)
{
@@ -246,7 +282,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -254,6 +292,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13)
{
@@ -265,7 +304,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -273,6 +314,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14)
{
@@ -284,7 +326,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -292,6 +336,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15)
{
@@ -303,7 +348,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -311,6 +358,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16)
{
@@ -322,7 +370,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -330,6 +380,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17)
{
@@ -341,7 +392,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -349,6 +402,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18)
{
@@ -360,7 +414,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -368,6 +424,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19)
{
@@ -379,7 +436,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -387,6 +446,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20)
{
@@ -398,7 +458,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -406,6 +468,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21)
{
@@ -417,7 +480,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -425,6 +490,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22)
{
@@ -436,7 +502,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -444,6 +512,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23)
{
@@ -455,7 +524,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -463,6 +534,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24)
{
@@ -474,7 +546,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -482,6 +556,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25)
{
@@ -493,7 +568,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -501,6 +578,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26)
{
@@ -512,7 +590,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -520,6 +600,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27)
{
@@ -531,7 +612,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -539,6 +622,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28)
{
@@ -550,7 +634,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -558,6 +644,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29)
{
@@ -569,7 +656,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -577,6 +666,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30)
{
@@ -588,7 +678,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -596,6 +688,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31)
{
@@ -607,7 +700,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -615,6 +710,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32)
{
@@ -626,7 +722,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -634,6 +732,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33)
{
@@ -645,7 +744,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34
+ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -653,6 +754,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34)
{
@@ -664,7 +766,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35
+ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -672,6 +776,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35)
{
@@ -683,7 +788,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36
+ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -691,6 +798,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36)
{
@@ -702,7 +810,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37
+ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -710,6 +820,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37)
{
@@ -721,7 +832,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38
+ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -729,6 +842,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38)
{
@@ -740,7 +854,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39
+ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -748,6 +864,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp
index 438f991e1b..ecf300dfa4 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp
@@ -18,7 +18,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 >
- struct zip< T0 , T1 >
+ struct zip< T0 , T1
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -26,6 +28,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1>::type
zip(T0 const& t0 , T1 const& t1)
{
@@ -37,7 +40,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 >
- struct zip< T0 , T1 , T2 >
+ struct zip< T0 , T1 , T2
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -45,6 +50,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2)
{
@@ -56,7 +62,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 >
- struct zip< T0 , T1 , T2 , T3 >
+ struct zip< T0 , T1 , T2 , T3
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -64,6 +72,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
{
@@ -75,7 +84,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
- struct zip< T0 , T1 , T2 , T3 , T4 >
+ struct zip< T0 , T1 , T2 , T3 , T4
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -83,6 +94,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
{
@@ -94,7 +106,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -102,6 +116,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
{
@@ -113,7 +128,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -121,6 +138,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
{
@@ -132,7 +150,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -140,6 +160,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
{
@@ -151,7 +172,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -159,6 +182,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
{
@@ -170,7 +194,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -178,6 +204,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
{
@@ -189,7 +216,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -197,6 +226,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10)
{
@@ -208,7 +238,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -216,6 +248,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11)
{
@@ -227,7 +260,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -235,6 +270,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12)
{
@@ -246,7 +282,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -254,6 +292,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13)
{
@@ -265,7 +304,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -273,6 +314,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14)
{
@@ -284,7 +326,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -292,6 +336,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15)
{
@@ -303,7 +348,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -311,6 +358,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16)
{
@@ -322,7 +370,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -330,6 +380,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17)
{
@@ -341,7 +392,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -349,6 +402,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18)
{
@@ -360,7 +414,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -368,6 +424,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19)
{
@@ -379,7 +436,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -387,6 +446,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20)
{
@@ -398,7 +458,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -406,6 +468,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21)
{
@@ -417,7 +480,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -425,6 +490,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22)
{
@@ -436,7 +502,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -444,6 +512,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23)
{
@@ -455,7 +524,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -463,6 +534,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24)
{
@@ -474,7 +546,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -482,6 +556,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25)
{
@@ -493,7 +568,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -501,6 +578,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26)
{
@@ -512,7 +590,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -520,6 +600,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27)
{
@@ -531,7 +612,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -539,6 +622,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28)
{
@@ -550,7 +634,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -558,6 +644,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29)
{
@@ -569,7 +656,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -577,6 +666,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30)
{
@@ -588,7 +678,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -596,6 +688,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31)
{
@@ -607,7 +700,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -615,6 +710,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32)
{
@@ -626,7 +722,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -634,6 +732,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33)
{
@@ -645,7 +744,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -653,6 +754,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34)
{
@@ -664,7 +766,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -672,6 +776,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35)
{
@@ -683,7 +788,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -691,6 +798,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36)
{
@@ -702,7 +810,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -710,6 +820,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37)
{
@@ -721,7 +832,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -729,6 +842,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38)
{
@@ -740,7 +854,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -748,6 +864,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39)
{
@@ -759,7 +876,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -767,6 +886,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40)
{
@@ -778,7 +898,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -786,6 +908,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40 , const T41>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41)
{
@@ -797,7 +920,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -805,6 +930,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40 , const T41 , const T42>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42)
{
@@ -816,7 +942,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43
+ , void_ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -824,6 +952,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40 , const T41 , const T42 , const T43>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43)
{
@@ -835,7 +964,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44
+ , void_ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -843,6 +974,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40 , const T41 , const T42 , const T43 , const T44>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44)
{
@@ -854,7 +986,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45
+ , void_ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -862,6 +996,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40 , const T41 , const T42 , const T43 , const T44 , const T45>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45)
{
@@ -873,7 +1008,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46
+ , void_ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -881,6 +1018,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40 , const T41 , const T42 , const T43 , const T44 , const T45 , const T46>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46)
{
@@ -892,7 +1030,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47
+ , void_ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -900,6 +1040,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40 , const T41 , const T42 , const T43 , const T44 , const T45 , const T46 , const T47>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46 , T47 const& t47)
{
@@ -911,7 +1052,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48
+ , void_ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -919,6 +1062,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40 , const T41 , const T42 , const T43 , const T44 , const T45 , const T46 , const T47 , const T48>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46 , T47 const& t47 , T48 const& t48)
{
@@ -930,7 +1074,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49 >
- struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 >
+ struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49
+ , void_
+ >
{
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -938,6 +1084,7 @@ namespace boost { namespace fusion
};
}
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39 , const T40 , const T41 , const T42 , const T43 , const T44 , const T45 , const T46 , const T47 , const T48 , const T49>::type
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46 , T47 const& t47 , T48 const& t48 , T49 const& t49)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/replace.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/replace.hpp
index 18dab8cd65..5a7516bacc 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/detail/replace.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/detail/replace.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_REPLACE_08182005_0841)
#define FUSION_REPLACE_08182005_0841
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/remove_reference.hpp>
@@ -20,6 +21,7 @@ namespace boost { namespace fusion { namespace detail
struct replacer_helper<false>
{
template <typename U, typename T>
+ BOOST_FUSION_GPU_ENABLED
static U&
call(U& x, T const&, T const&)
{
@@ -31,6 +33,7 @@ namespace boost { namespace fusion { namespace detail
struct replacer_helper<true>
{
template <typename U, typename T>
+ BOOST_FUSION_GPU_ENABLED
static U
call(U& x, T const& old_value, T const& new_value)
{
@@ -41,6 +44,7 @@ namespace boost { namespace fusion { namespace detail
template <typename T>
struct replacer
{
+ BOOST_FUSION_GPU_ENABLED
replacer(T const& in_old_value, T const& in_new_value)
: old_value(in_old_value), new_value(in_new_value) {}
@@ -57,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
};
template <typename U>
+ BOOST_FUSION_GPU_ENABLED
typename result<replacer(U)>::type
operator()(U const& x) const
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/replace_if.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/replace_if.hpp
index d45ca39219..5b9663b138 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/detail/replace_if.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/detail/replace_if.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_REPLACE_IF_08182005_0946)
#define FUSION_REPLACE_IF_08182005_0946
+#include <boost/fusion/support/config.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/remove_reference.hpp>
@@ -20,6 +21,7 @@ namespace boost { namespace fusion { namespace detail
struct replacer_if_helper<false>
{
template <typename U, typename F, typename T>
+ BOOST_FUSION_GPU_ENABLED
static U&
call(U& x, F&, T const&)
{
@@ -31,6 +33,7 @@ namespace boost { namespace fusion { namespace detail
struct replacer_if_helper<true>
{
template <typename U, typename F, typename T>
+ BOOST_FUSION_GPU_ENABLED
static U
call(U& x, F& f, T const& new_value)
{
@@ -41,6 +44,7 @@ namespace boost { namespace fusion { namespace detail
template <typename F, typename T>
struct replacer_if
{
+ BOOST_FUSION_GPU_ENABLED
replacer_if(F in_f, T const& in_new_value)
: f(in_f), new_value(in_new_value) {}
@@ -57,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
};
template <typename U>
+ BOOST_FUSION_GPU_ENABLED
typename result<replacer_if(U)>::type
operator()(U const& x) const
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/erase.hpp b/3party/boost/boost/fusion/algorithm/transformation/erase.hpp
index 6ad737fd18..6ffdb4ded4 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/erase.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/erase.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ERASE_07232005_0534)
#define FUSION_ERASE_07232005_0534
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
#include <boost/fusion/container/vector/vector10.hpp>
@@ -37,18 +38,21 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(First const& first, mpl::false_)
{
return fusion::next(convert_iterator<First>::call(first));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(First const& first, mpl::true_)
{
return convert_iterator<First>::call(first);
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(First const& first)
{
@@ -95,6 +99,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename First>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -117,6 +122,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename First, typename Last>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::erase<Sequence const, First, Last>::type
erase(Sequence const& seq, First const& first, Last const& last)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/erase_key.hpp b/3party/boost/boost/fusion/algorithm/transformation/erase_key.hpp
index 383f4f800d..43340047d7 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/erase_key.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/erase_key.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ERASE_KEY_10022005_1851)
#define FUSION_ERASE_KEY_10022005_1851
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/find.hpp>
#include <boost/fusion/algorithm/transformation/erase.hpp>
#include <boost/mpl/not.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion
}
template <typename Key, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::erase_key<Sequence const, Key>::type
erase_key(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/filter.hpp b/3party/boost/boost/fusion/algorithm/transformation/filter.hpp
index fa347c7b58..2e290e29e0 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/filter.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/filter.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_FILTER_02122005_1839)
#define FUSION_FILTER_02122005_1839
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/filter_view/filter_view.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion
}
template <typename T, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::filter<Sequence const, T>::type
filter(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/filter_if.hpp b/3party/boost/boost/fusion/algorithm/transformation/filter_if.hpp
index d989d30858..1b9f0d323e 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/filter_if.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/filter_if.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_FILTER_IF_07172005_0818)
#define FUSION_FILTER_IF_07172005_0818
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/filter_view/filter_view.hpp>
namespace boost { namespace fusion
@@ -21,6 +22,7 @@ namespace boost { namespace fusion
}
template <typename Pred, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::filter_if<Sequence const, Pred>::type
filter_if(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/flatten.hpp b/3party/boost/boost/fusion/algorithm/transformation/flatten.hpp
new file mode 100644
index 0000000000..9cd81fa964
--- /dev/null
+++ b/3party/boost/boost/fusion/algorithm/transformation/flatten.hpp
@@ -0,0 +1,44 @@
+/*//////////////////////////////////////////////////////////////////////////////
+ Copyright (c) 2013 Jamboree
+
+ 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_FUSION_ALGORITHM_FLATTEN_HPP_INCLUDED
+#define BOOST_FUSION_ALGORITHM_FLATTEN_HPP_INCLUDED
+
+
+#include <boost/fusion/view/flatten_view.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/utility/enable_if.hpp>
+
+
+namespace boost { namespace fusion { namespace result_of
+{
+ template<typename Sequence>
+ struct flatten
+ {
+ typedef flatten_view<Sequence> type;
+ };
+}}}
+
+namespace boost { namespace fusion
+{
+ template <typename Sequence>
+ inline typename result_of::flatten<Sequence>::type
+ flatten(Sequence& view)
+ {
+ return flatten_view<Sequence>(view);
+ }
+
+ template <typename Sequence>
+ inline typename result_of::flatten<Sequence const>::type
+ flatten(Sequence const& view)
+ {
+ return flatten_view<Sequence const>(view);
+ }
+}}
+
+
+#endif
+
diff --git a/3party/boost/boost/fusion/algorithm/transformation/insert.hpp b/3party/boost/boost/fusion/algorithm/transformation/insert.hpp
index 2052fc01aa..78590222d8 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/insert.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/insert.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INSERT_07222005_0730)
#define FUSION_INSERT_07222005_0730
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
#include <boost/fusion/container/vector/vector10.hpp>
@@ -40,6 +41,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename Position, typename T>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
lazy_enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/transformation/insert_range.hpp b/3party/boost/boost/fusion/algorithm/transformation/insert_range.hpp
index f70a78ecbc..660ed17fa5 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/insert_range.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/insert_range.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INSERT_RANGE_009172005_1147)
#define FUSION_INSERT_RANGE_009172005_1147
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
#include <boost/fusion/container/vector/vector10.hpp>
#include <boost/fusion/view/joint_view/joint_view.hpp>
@@ -35,6 +36,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename Position, typename Range>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::insert_range<Sequence const, Position, Range const>::type
insert_range(Sequence const& seq, Position const& pos, Range const& range)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/join.hpp b/3party/boost/boost/fusion/algorithm/transformation/join.hpp
index f0cf2e4ebd..51af05352f 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/join.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/join.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_JOIN_200601222109)
#define FUSION_JOIN_200601222109
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/joint_view.hpp>
namespace boost { namespace fusion {
@@ -22,6 +23,7 @@ namespace boost { namespace fusion {
}
template<typename LhSequence, typename RhSequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::join<LhSequence const, RhSequence const>::type
join(LhSequence const& lhs, RhSequence const& rhs)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/pop_back.hpp b/3party/boost/boost/fusion/algorithm/transformation/pop_back.hpp
index 6059c555e8..b20b500356 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/pop_back.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/pop_back.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_POP_BACK_09172005_1038)
#define FUSION_POP_BACK_09172005_1038
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/iterator_range/iterator_range.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
@@ -32,6 +33,7 @@ namespace boost { namespace fusion
static bool const is_last = IsLast;
+ BOOST_FUSION_GPU_ENABLED
pop_back_iterator(Iterator_ const& iterator_base)
: base_type(iterator_base) {}
@@ -40,6 +42,7 @@ namespace boost { namespace fusion
{
typedef pop_back_iterator<BaseIterator, is_last> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(BaseIterator const& i)
{
@@ -91,6 +94,7 @@ namespace boost { namespace fusion
typedef pop_back_iterator<base_prior, false> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -112,6 +116,7 @@ namespace boost { namespace fusion
typedef pop_back_iterator<base_prior, false> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -147,6 +152,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::pop_back<Sequence const>::type
pop_back(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/pop_front.hpp b/3party/boost/boost/fusion/algorithm/transformation/pop_front.hpp
index 75e392c26e..636ab12c9a 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/pop_front.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/pop_front.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_POP_FRONT_09172005_1115)
#define FUSION_POP_FRONT_09172005_1115
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/iterator_range/iterator_range.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
@@ -31,6 +32,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::pop_front<Sequence const>::type
pop_front(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/push_back.hpp b/3party/boost/boost/fusion/algorithm/transformation/push_back.hpp
index 9afe538ab2..484425d832 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/push_back.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/push_back.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_PUSH_BACK_07162005_0235)
#define FUSION_PUSH_BACK_07162005_0235
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/view/joint_view/joint_view.hpp>
#include <boost/fusion/view/single_view/single_view.hpp>
@@ -26,6 +27,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename T>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
lazy_enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/transformation/push_front.hpp b/3party/boost/boost/fusion/algorithm/transformation/push_front.hpp
index abe7faadea..bda056b18e 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/push_front.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/push_front.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_PUSH_FRONT_07162005_0749)
#define FUSION_PUSH_FRONT_07162005_0749
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/view/joint_view/joint_view.hpp>
#include <boost/fusion/view/single_view/single_view.hpp>
@@ -26,6 +27,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename T>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
lazy_enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/transformation/remove.hpp b/3party/boost/boost/fusion/algorithm/transformation/remove.hpp
index ce4b0febdb..18dfd1d699 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/remove.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/remove.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_REMOVE_07162005_0818)
#define FUSION_REMOVE_07162005_0818
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/filter_view/filter_view.hpp>
#include <boost/mpl/not.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion
}
template <typename T, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::remove<Sequence const, T>::type
remove(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/remove_if.hpp b/3party/boost/boost/fusion/algorithm/transformation/remove_if.hpp
index e7b01b45c1..4024883971 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/remove_if.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/remove_if.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_REMOVE_IF_07162005_0818)
#define FUSION_REMOVE_IF_07162005_0818
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/filter_view/filter_view.hpp>
#include <boost/mpl/not.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion
}
template <typename Pred, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::remove_if<Sequence const, Pred>::type
remove_if(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/replace.hpp b/3party/boost/boost/fusion/algorithm/transformation/replace.hpp
index a92e6e3738..a0a9885bd8 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/replace.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/replace.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_REPLACE_08182005_0830)
#define FUSION_REPLACE_08182005_0830
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/transform_view/transform_view.hpp>
#include <boost/fusion/algorithm/transformation/detail/replace.hpp>
#include <boost/fusion/support/is_sequence.hpp>
@@ -24,6 +25,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename T>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/transformation/replace_if.hpp b/3party/boost/boost/fusion/algorithm/transformation/replace_if.hpp
index 39b9009a79..da3557aa18 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/replace_if.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/replace_if.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_REPLACE_IF_08182005_0939)
#define FUSION_REPLACE_IF_08182005_0939
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/transform_view/transform_view.hpp>
#include <boost/fusion/algorithm/transformation/detail/replace_if.hpp>
#include <boost/fusion/support/is_sequence.hpp>
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename F, typename T>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/transformation/reverse.hpp b/3party/boost/boost/fusion/algorithm/transformation/reverse.hpp
index 923b90fc6a..384224d960 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/reverse.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/reverse.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_REVERSE_07212005_1230)
#define FUSION_REVERSE_07212005_1230
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/reverse_view/reverse_view.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/utility/enable_if.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline
typename
enable_if<
diff --git a/3party/boost/boost/fusion/algorithm/transformation/transform.hpp b/3party/boost/boost/fusion/algorithm/transformation/transform.hpp
index 85e85611a1..94e45460eb 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/transform.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/transform.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_TRANSFORM_07052005_1057)
#define FUSION_TRANSFORM_07052005_1057
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/transform_view/transform_view.hpp>
namespace boost { namespace fusion
@@ -33,6 +34,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::transform<Sequence const, F>::type
transform(Sequence const& seq, F f)
{
@@ -40,6 +42,7 @@ namespace boost { namespace fusion
}
template <typename Sequence1, typename Sequence2, typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::transform<Sequence1 const, Sequence2 const, F>::type
transform(Sequence1 const& seq1, Sequence2 const& seq2, F f)
{
diff --git a/3party/boost/boost/fusion/algorithm/transformation/zip.hpp b/3party/boost/boost/fusion/algorithm/transformation/zip.hpp
index 610c60467d..796ec9e361 100644
--- a/3party/boost/boost/fusion/algorithm/transformation/zip.hpp
+++ b/3party/boost/boost/fusion/algorithm/transformation/zip.hpp
@@ -62,11 +62,15 @@ namespace boost { namespace fusion
struct zip;
}
+#define FUSION_TEXT(z, n, text) , text
+
#define BOOST_PP_FILENAME_1 \
<boost/fusion/algorithm/transformation/zip.hpp>
#define BOOST_PP_ITERATION_LIMITS (2, FUSION_MAX_ZIP_SEQUENCES)
#include BOOST_PP_ITERATE()
+#undef FUSION_TEXT
+
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
@@ -84,13 +88,9 @@ namespace boost { namespace fusion
namespace result_of
{
template< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, typename T) >
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
- #define TEXT(z, n, text) , text
- struct zip< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(ZIP_ITERATION), FUSION_MAX_ZIP_SEQUENCES, TEXT, void_) >
- #undef TEXT
-#else
- struct zip< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) >
-#endif
+ struct zip< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T)
+ BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(ZIP_ITERATION), FUSION_MAX_ZIP_SEQUENCES, FUSION_TEXT, void_)
+ >
{
typedef mpl::vector< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
@@ -101,6 +101,7 @@ namespace boost { namespace fusion
#define FUSION_REF_PARAM(z, n, data) const T ## n&
template<BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::zip<BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, const T)>::type
zip(BOOST_PP_ENUM_BINARY_PARAMS(ZIP_ITERATION, T, const& t))
{
diff --git a/3party/boost/boost/fusion/container.hpp b/3party/boost/boost/fusion/container.hpp
index 8bd65074e6..ab19e2cd15 100644
--- a/3party/boost/boost/fusion/container.hpp
+++ b/3party/boost/boost/fusion/container.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_CLASS_10022005_0614)
#define FUSION_SEQUENCE_CLASS_10022005_0614
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/container/list.hpp>
#include <boost/fusion/container/map.hpp>
diff --git a/3party/boost/boost/fusion/container/deque.hpp b/3party/boost/boost/fusion/container/deque.hpp
index 0ee058a382..c07de03048 100644
--- a/3party/boost/boost/fusion/container/deque.hpp
+++ b/3party/boost/boost/fusion/container/deque.hpp
@@ -8,6 +8,8 @@
#if !defined(BOOST_FUSION_SEQUENCE_CONTAINER_DEQUE_24112006_2036)
#define BOOST_FUSION_SEQUENCE_CONTAINER_DEQUE_24112006_2036
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/deque/deque_fwd.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#include <boost/fusion/container/deque/convert.hpp>
diff --git a/3party/boost/boost/fusion/container/deque/back_extended_deque.hpp b/3party/boost/boost/fusion/container/deque/back_extended_deque.hpp
index 738e05bbdb..a99acc7ab7 100644
--- a/3party/boost/boost/fusion/container/deque/back_extended_deque.hpp
+++ b/3party/boost/boost/fusion/container/deque/back_extended_deque.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_BACK_EXTENDED_DEQUE_26112006_2209)
#define BOOST_FUSION_BACK_EXTENDED_DEQUE_26112006_2209
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -27,17 +28,20 @@ namespace boost { namespace fusion
typedef mpl::int_<(result_of::size<Deque>::value + 1)> size;
template <typename Arg>
+ BOOST_FUSION_GPU_ENABLED
back_extended_deque(Deque const& deque, Arg const& val)
: base(val, deque)
{}
-#if defined(BOOST_NO_RVALUE_REFERENCES)
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename Arg>
+ BOOST_FUSION_GPU_ENABLED
back_extended_deque(Deque const& deque, Arg& val)
: base(val, deque)
{}
#else
template <typename Arg>
+ BOOST_FUSION_GPU_ENABLED
back_extended_deque(Deque const& deque, Arg&& val)
: base(std::forward<Arg>(val), deque)
{}
diff --git a/3party/boost/boost/fusion/container/deque/convert.hpp b/3party/boost/boost/fusion/container/deque/convert.hpp
index 1910cb84fc..f791519d08 100644
--- a/3party/boost/boost/fusion/container/deque/convert.hpp
+++ b/3party/boost/boost/fusion/container/deque/convert.hpp
@@ -1,5 +1,5 @@
/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2013 Joel de Guzman
Copyright (c) 2006 Dan Marsden
Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -8,43 +8,54 @@
#if !defined(FUSION_CONVERT_20061213_2207)
#define FUSION_CONVERT_20061213_2207
-#include <boost/fusion/container/deque/detail/as_deque.hpp>
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque/detail/convert_impl.hpp>
#include <boost/fusion/container/deque/deque.hpp>
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/sequence/intrinsic/size.hpp>
+
+#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+///////////////////////////////////////////////////////////////////////////////
+// C++03 (non-variadic) implementation
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/fusion/container/deque/detail/cpp03/build_deque.hpp>
+
+#else
+///////////////////////////////////////////////////////////////////////////////
+// C++11 variadic implementation
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/fusion/container/deque/detail/build_deque.hpp>
namespace boost { namespace fusion
{
namespace result_of
{
template <typename Sequence>
- struct as_deque
+ struct as_deque :
+ detail::build_deque<
+ typename result_of::begin<Sequence>::type
+ , typename result_of::end<Sequence>::type
+ >
{
- typedef typename
- detail::as_deque<result_of::size<Sequence>::value>
- gen;
- typedef typename gen::
- template apply<typename result_of::begin<Sequence>::type>::type
- type;
};
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_deque<Sequence>::type
as_deque(Sequence& seq)
{
- typedef typename result_of::as_deque<Sequence>::gen gen;
- return gen::call(fusion::begin(seq));
+ typedef result_of::as_deque<Sequence> gen;
+ return gen::call(fusion::begin(seq), fusion::end(seq));
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_deque<Sequence const>::type
as_deque(Sequence const& seq)
{
- typedef typename result_of::as_deque<Sequence const>::gen gen;
- return gen::call(fusion::begin(seq));
+ typedef result_of::as_deque<Sequence const> gen;
+ return gen::call(fusion::begin(seq), fusion::end(seq));
}
}}
#endif
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/deque.hpp b/3party/boost/boost/fusion/container/deque/deque.hpp
index 56ae290e0c..6fd3e1b0ce 100644
--- a/3party/boost/boost/fusion/container/deque/deque.hpp
+++ b/3party/boost/boost/fusion/container/deque/deque.hpp
@@ -8,26 +8,23 @@
#if !defined(BOOST_FUSION_DEQUE_26112006_1649)
#define BOOST_FUSION_DEQUE_26112006_1649
-#include <boost/config.hpp>
+# include <boost/fusion/container/deque/deque_fwd.hpp>
///////////////////////////////////////////////////////////////////////////////
-// With variadics, we will use the PP version version
+// Without variadics, we will use the PP version
///////////////////////////////////////////////////////////////////////////////
-#if defined(BOOST_NO_VARIADIC_TEMPLATES)
-# include <boost/fusion/container/deque/detail/pp_deque.hpp>
+#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+# include <boost/fusion/container/deque/detail/cpp03/deque.hpp>
#else
-# if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
-# define BOOST_FUSION_HAS_VARIADIC_DEQUE
-# endif
///////////////////////////////////////////////////////////////////////////////
-// C++11 variadic interface
+// C++11 interface
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
-#include <boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp>
+#include <boost/fusion/container/deque/detail/deque_keyed_values.hpp>
#include <boost/fusion/container/deque/deque_fwd.hpp>
#include <boost/fusion/container/deque/detail/value_at_impl.hpp>
#include <boost/fusion/container/deque/detail/at_impl.hpp>
@@ -57,6 +54,7 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
deque(Sequence const&,
typename enable_if<
mpl::and_<
@@ -64,6 +62,7 @@ namespace boost { namespace fusion
, result_of::empty<Sequence>>>::type* /*dummy*/ = 0)
{}
+ BOOST_FUSION_GPU_ENABLED
deque() {}
};
@@ -80,47 +79,56 @@ namespace boost { namespace fusion
typedef mpl::int_<((size::value == 0) ? 0 : -1)> next_down;
typedef mpl::false_ is_view;
+ BOOST_FUSION_GPU_ENABLED
deque()
{}
template <typename ...Elements>
+ BOOST_FUSION_GPU_ENABLED
deque(deque<Elements...> const& seq)
: base(seq)
{}
template <typename ...Elements>
+ BOOST_FUSION_GPU_ENABLED
deque(deque<Elements...>& seq)
: base(seq)
{}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename ...Elements>
+ BOOST_FUSION_GPU_ENABLED
deque(deque<Elements...>&& seq)
: base(std::forward<deque<Elements...>>(seq))
{}
#endif
+ BOOST_FUSION_GPU_ENABLED
deque(deque const& seq)
: base(seq)
{}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
deque(deque&& seq)
: base(std::forward<deque>(seq))
{}
#endif
+ BOOST_FUSION_GPU_ENABLED
explicit deque(Head const& head, Tail const&... tail)
: base(detail::deque_keyed_values<Head, Tail...>::construct(head, tail...))
{}
template <typename Head_, typename ...Tail_>
+ BOOST_FUSION_GPU_ENABLED
explicit deque(Head_ const& head, Tail_ const&... tail)
: base(detail::deque_keyed_values<Head_, Tail_...>::construct(head, tail...))
{}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename Head_, typename ...Tail_>
+ BOOST_FUSION_GPU_ENABLED
explicit deque(Head_&& head, Tail_&&... tail)
: base(detail::deque_keyed_values<Head, Tail...>
::forward_(std::forward<Head_>(head), std::forward<Tail_>(tail)...))
@@ -128,12 +136,14 @@ namespace boost { namespace fusion
#endif
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
explicit deque(Sequence const& seq
, typename disable_if<is_convertible<Sequence, Head> >::type* /*dummy*/ = 0)
: base(base::from_iterator(fusion::begin(seq)))
{}
template <typename ...Elements>
+ BOOST_FUSION_GPU_ENABLED
deque& operator=(deque<Elements...> const& rhs)
{
base::operator=(rhs);
@@ -141,14 +151,16 @@ namespace boost { namespace fusion
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
deque& operator=(T const& rhs)
{
base::operator=(rhs);
return *this;
}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
deque& operator=(T&& rhs)
{
base::operator=(std::forward<T>(rhs));
diff --git a/3party/boost/boost/fusion/container/deque/deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/deque_fwd.hpp
index fc1f9cbde3..639c00e52d 100644
--- a/3party/boost/boost/fusion/container/deque/deque_fwd.hpp
+++ b/3party/boost/boost/fusion/container/deque/deque_fwd.hpp
@@ -8,19 +8,28 @@
#if !defined(FUSION_DEQUE_FORWARD_02092007_0749)
#define FUSION_DEQUE_FORWARD_02092007_0749
+#include <boost/fusion/support/config.hpp>
#include <boost/config.hpp>
-///////////////////////////////////////////////////////////////////////////////
-// With no decltype and variadics, we will use the C++03 version
-///////////////////////////////////////////////////////////////////////////////
-#if (defined(BOOST_NO_DECLTYPE) \
- || defined(BOOST_NO_VARIADIC_TEMPLATES) \
- || defined(BOOST_NO_RVALUE_REFERENCES))
-# include <boost/fusion/container/deque/detail/pp_deque_fwd.hpp>
+#if (defined(BOOST_NO_CXX11_DECLTYPE) \
+ || defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) \
+ || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)) \
+ || (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+# if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+# undef BOOST_FUSION_HAS_VARIADIC_DEQUE
+# endif
#else
# if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
# define BOOST_FUSION_HAS_VARIADIC_DEQUE
# endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// With no decltype and variadics, we will use the C++03 version
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+# include <boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp>
+#else
///////////////////////////////////////////////////////////////////////////////
// C++11 interface
diff --git a/3party/boost/boost/fusion/container/deque/deque_iterator.hpp b/3party/boost/boost/fusion/container/deque/deque_iterator.hpp
index d3e5f31eb7..c61d6f97f0 100644
--- a/3party/boost/boost/fusion/container/deque/deque_iterator.hpp
+++ b/3party/boost/boost/fusion/container/deque/deque_iterator.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_DEQUE_ITERATOR_26112006_2154)
#define BOOST_FUSION_DEQUE_ITERATOR_26112006_2154
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
#include <boost/mpl/minus.hpp>
@@ -25,6 +26,7 @@ namespace boost { namespace fusion {
typedef Seq sequence;
typedef mpl::int_<Pos> index;
+ BOOST_FUSION_GPU_ENABLED
deque_iterator(Seq& seq)
: seq_(seq)
{}
@@ -47,6 +49,7 @@ namespace boost { namespace fusion {
add_const<element_type>,
mpl::identity<element_type> >::type>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& it)
{
@@ -61,6 +64,7 @@ namespace boost { namespace fusion {
typedef typename Iterator::sequence sequence;
typedef deque_iterator<sequence, index::value + N::value> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -87,6 +91,7 @@ namespace boost { namespace fusion {
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{
diff --git a/3party/boost/boost/fusion/container/deque/detail/as_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/as_deque.hpp
deleted file mode 100644
index 906f4fb657..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/as_deque.hpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2006 Dan Marsden
-
- 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_PP_IS_ITERATING
-#if !defined(FUSION_AS_DEQUE_20061213_2210)
-#define FUSION_AS_DEQUE_20061213_2210
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/inc.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/fusion/container/deque/deque.hpp>
-#include <boost/fusion/iterator/value_of.hpp>
-#include <boost/fusion/iterator/deref.hpp>
-#include <boost/fusion/iterator/next.hpp>
-
-namespace boost { namespace fusion { namespace detail
-{
- template <int size>
- struct as_deque;
-
- template <>
- struct as_deque<0>
- {
- template <typename Iterator>
- struct apply
- {
- typedef deque<> type;
- };
-
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator)
- {
- return deque<>();
- }
- };
-}}}
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/deque/detail/preprocessed/as_deque.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
-
-namespace boost { namespace fusion { namespace detail
-{
-#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \
- typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \
- BOOST_PP_CAT(I, BOOST_PP_INC(n));
-
-#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data) \
- typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n)) \
- BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
-
-#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data) \
- typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type \
- BOOST_PP_CAT(T, n);
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/deque/detail/as_deque.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_NEXT_ITERATOR
-#undef BOOST_FUSION_NEXT_CALL_ITERATOR
-#undef BOOST_FUSION_VALUE_OF_ITERATOR
-
-}}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
- template <>
- struct as_deque<N>
- {
- template <typename I0>
- struct apply
- {
- BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _)
- BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _)
- typedef deque<BOOST_PP_ENUM_PARAMS(N, T)> type;
- };
-
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_CALL_ITERATOR, _)
- return result(BOOST_PP_ENUM_PARAMS(N, *i));
- }
- };
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
diff --git a/3party/boost/boost/fusion/container/deque/detail/at_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/at_impl.hpp
index 0684dcf19e..4c5ffa9462 100644
--- a/3party/boost/boost/fusion/container/deque/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_DEQUE_AT_IMPL_09122006_2017)
#define BOOST_FUSION_DEQUE_AT_IMPL_09122006_2017
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -53,6 +54,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
return seq.get(adjusted_index());
diff --git a/3party/boost/boost/fusion/container/deque/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/begin_impl.hpp
index 1447868a33..8e7f263350 100644
--- a/3party/boost/boost/fusion/container/deque/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/begin_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_DEQUE_BEGIN_IMPL_09122006_2034)
#define BOOST_FUSION_DEQUE_BEGIN_IMPL_09122006_2034
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque/deque_iterator.hpp>
#include <boost/mpl/equal_to.hpp>
@@ -36,6 +37,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
return type(seq);
diff --git a/3party/boost/boost/fusion/container/deque/detail/build_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/build_deque.hpp
new file mode 100644
index 0000000000..d555c6c61c
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/build_deque.hpp
@@ -0,0 +1,78 @@
+/*=============================================================================
+ Copyright (c) 2005-2013 Joel de Guzman
+
+ 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_FUSION_BUILD_DEQUE_02032013_1921)
+#define BOOST_FUSION_BUILD_DEQUE_02032013_1921
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/container/deque/front_extended_deque.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename First, typename Last
+ , bool is_empty = result_of::equal_to<First, Last>::value>
+ struct build_deque;
+
+ template <typename First, typename Last>
+ struct build_deque<First, Last, true>
+ {
+ typedef deque<> type;
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(First const&, Last const&)
+ {
+ return type();
+ }
+ };
+
+ template <typename T, typename Rest>
+ struct push_front_deque;
+
+ template <typename T, typename ...Rest>
+ struct push_front_deque<T, deque<Rest...>>
+ {
+ typedef deque<T, Rest...> type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(T const& first, deque<Rest...> const& rest)
+ {
+ return type(front_extended_deque<deque<Rest...>, T>(rest, first));
+ }
+ };
+
+ template <typename First, typename Last>
+ struct build_deque<First, Last, false>
+ {
+ typedef
+ build_deque<typename result_of::next<First>::type, Last>
+ next_build_deque;
+
+ typedef push_front_deque<
+ typename result_of::value_of<First>::type
+ , typename next_build_deque::type>
+ push_front;
+
+ typedef typename push_front::type type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(First const& f, Last const& l)
+ {
+ typename result_of::value_of<First>::type v = *f;
+ return push_front::call(
+ v, next_build_deque::call(fusion::next(f), l));
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/convert_impl.hpp
index 1401ef1ac8..f8ff54294e 100644
--- a/3party/boost/boost/fusion/container/deque/detail/convert_impl.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/convert_impl.hpp
@@ -8,7 +8,8 @@
#if !defined(FUSION_CONVERT_IMPL_20061213_2207)
#define FUSION_CONVERT_IMPL_20061213_2207
-#include <boost/fusion/container/deque/detail/as_deque.hpp>
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/deque/convert.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -17,6 +18,12 @@ namespace boost { namespace fusion
{
struct deque_tag;
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct as_deque;
+ }
+
namespace extension
{
template <typename T>
@@ -28,14 +35,12 @@ namespace boost { namespace fusion
template <typename Sequence>
struct apply
{
- typedef detail::as_deque<result_of::size<Sequence>::value> gen;
- typedef typename gen::
- template apply<typename result_of::begin<Sequence>::type>::type
- type;
-
+ typedef result_of::as_deque<Sequence> gen;
+ typedef typename gen::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
- return gen::call(fusion::begin(seq));
+ return gen::call(seq);
}
};
};
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/as_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/as_deque.hpp
new file mode 100644
index 0000000000..650cd7042d
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/as_deque.hpp
@@ -0,0 +1,133 @@
+/*=============================================================================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+
+ 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_PP_IS_ITERATING
+#if !defined(FUSION_AS_DEQUE_20061213_2210)
+#define FUSION_AS_DEQUE_20061213_2210
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/fusion/container/deque/deque.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <int size>
+ struct as_deque;
+
+ template <>
+ struct as_deque<0>
+ {
+ template <typename Iterator>
+ struct apply
+ {
+ typedef deque<> type;
+ };
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator)
+ {
+ return deque<>();
+ }
+ };
+}}}
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion { namespace detail
+{
+#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \
+ typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \
+ BOOST_PP_CAT(I, BOOST_PP_INC(n));
+
+#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data) \
+ typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n)) \
+ BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
+
+#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data) \
+ typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type \
+ BOOST_PP_CAT(T, n);
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/deque/detail/cpp03/as_deque.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_NEXT_ITERATOR
+#undef BOOST_FUSION_NEXT_CALL_ITERATOR
+#undef BOOST_FUSION_VALUE_OF_ITERATOR
+
+}}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+// Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+ template <>
+ struct as_deque<N>
+ {
+ template <typename I0>
+ struct apply
+ {
+ BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _)
+ BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _)
+ typedef deque<BOOST_PP_ENUM_PARAMS(N, T)> type;
+ };
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_CALL_ITERATOR, _)
+ return result(BOOST_PP_ENUM_PARAMS(N, *i));
+ }
+ };
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/build_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/build_deque.hpp
new file mode 100644
index 0000000000..74d37faaf8
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/build_deque.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 2005-2013 Joel de Guzman
+
+ 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_FUSION_BUILD_DEQUE_02032013_1921)
+#define BOOST_FUSION_BUILD_DEQUE_02032013_1921
+
+#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+#error "C++03 only! This file should not have been included"
+#endif
+
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/container/deque/detail/cpp03/as_deque.hpp>
+#include <boost/fusion/container/deque/front_extended_deque.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct as_deque
+ {
+ typedef typename
+ detail::as_deque<result_of::size<Sequence>::value>
+ gen;
+ typedef typename gen::
+ template apply<typename result_of::begin<Sequence>::type>::type
+ type;
+ };
+ }
+
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ inline typename result_of::as_deque<Sequence>::type
+ as_deque(Sequence& seq)
+ {
+ typedef typename result_of::as_deque<Sequence>::gen gen;
+ return gen::call(fusion::begin(seq));
+ }
+
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ inline typename result_of::as_deque<Sequence const>::type
+ as_deque(Sequence const& seq)
+ {
+ typedef typename result_of::as_deque<Sequence const>::gen gen;
+ return gen::call(fusion::begin(seq));
+ }
+}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/deque.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque.hpp
new file mode 100644
index 0000000000..2dd7f6382b
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque.hpp
@@ -0,0 +1,198 @@
+/*=============================================================================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ 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_PP_FUSION_DEQUE_26112006_1649)
+#define BOOST_PP_FUSION_DEQUE_26112006_1649
+
+#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+#error "C++03 only! This file should not have been included"
+#endif
+
+#include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
+#include <boost/fusion/container/deque/front_extended_deque.hpp>
+#include <boost/fusion/container/deque/back_extended_deque.hpp>
+#include <boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp>
+#include <boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/container/deque/detail/keyed_element.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#include <boost/fusion/container/deque/deque_fwd.hpp>
+#include <boost/fusion/container/deque/detail/value_at_impl.hpp>
+#include <boost/fusion/container/deque/detail/at_impl.hpp>
+#include <boost/fusion/container/deque/detail/begin_impl.hpp>
+#include <boost/fusion/container/deque/detail/end_impl.hpp>
+#include <boost/fusion/container/deque/detail/is_sequence_impl.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/mpl/bool.hpp>
+
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/void.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+#define FUSION_HASH #
+
+namespace boost { namespace fusion {
+
+ struct deque_tag;
+
+ template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
+ struct deque
+ :
+ detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type,
+ sequence_base<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)> >
+ {
+ typedef deque_tag fusion_tag;
+ typedef bidirectional_traversal_tag category;
+ typedef typename detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type base;
+ typedef typename detail::deque_initial_size<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type size;
+ typedef mpl::int_<size::value> next_up;
+ typedef mpl::int_<
+ mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
+ typedef mpl::false_ is_view;
+
+#include <boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp>
+
+ BOOST_FUSION_GPU_ENABLED
+ deque()
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
+ : base(t0, detail::nil_keyed_element())
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque const& rhs)
+ : base(rhs)
+ {}
+
+ template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& seq)
+ : base(seq)
+ {}
+
+ template<typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0)
+ : base(base::from_iterator(fusion::begin(seq)))
+ {}
+
+ template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#endif
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
+ (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+ template <typename T0_>
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(T0_&& t0
+ , typename enable_if<is_convertible<T0_, T0> >::type* /*dummy*/ = 0
+ )
+ : base(std::forward<T0_>(t0), detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque&& rhs)
+ : base(std::forward<deque>(rhs))
+ {}
+ template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>&& seq)
+ : base(std::forward<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>>(seq))
+ {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T&& rhs)
+ {
+ base::operator=(std::forward<T>(rhs));
+ return *this;
+ }
+#endif
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH endif
+#endif
+
+ };
+
+ 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 <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const&,
+ typename enable_if<
+ mpl::and_<
+ traits::is_sequence<Sequence>
+ , result_of::empty<Sequence> > >::type* /*dummy*/ = 0)
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ deque() {}
+ };
+
+}}
+
+#undef FUSION_HASH
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp
new file mode 100644
index 0000000000..7b12d58ca8
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp
@@ -0,0 +1,69 @@
+/*=============================================================================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ 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_PP_IS_ITERATING)
+#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_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>(t##n)
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 \
+ <boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp>
+#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()
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#endif
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
+ (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+BOOST_FUSION_GPU_ENABLED
+deque(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<typename add_const<T, >::type>::type t))
+ : base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::construct(BOOST_PP_ENUM_PARAMS(N, t)))
+{}
+#endif
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH endif
+#endif
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#endif
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
+ (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+BOOST_FUSION_GPU_ENABLED
+deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& t))
+ : base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::construct(BOOST_PP_ENUM_PARAMS(N, t)))
+{}
+
+template <BOOST_PP_ENUM_PARAMS(N, typename T_)>
+BOOST_FUSION_GPU_ENABLED
+deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T_, && t))
+ : base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::
+ forward_(BOOST_PP_ENUM(N, FUSION_DEQUE_FORWARD_CTOR_FORWARD, _)))
+{}
+#endif
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH endif
+#endif
+
+#undef N
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp
new file mode 100644
index 0000000000..0da8bd2243
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2007 Dan Marsden
+
+ 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_PP_DEQUE_FORWARD_02092007_0749)
+#define FUSION_PP_DEQUE_FORWARD_02092007_0749
+
+#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+#error "C++03 only! This file should not have been included"
+#endif
+
+#include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR "_fwd.hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion
+{
+ struct void_;
+
+ template<
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+ FUSION_MAX_DEQUE_SIZE, typename T, void_)>
+ struct deque;
+}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp
new file mode 100644
index 0000000000..5ac245d956
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ 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_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139)
+#define BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139
+
+#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+#error "C++03 only! This file should not have been included"
+#endif
+
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/mpl/find.hpp>
+#include <boost/mpl/begin.hpp>
+#include <boost/mpl/distance.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/vector.hpp>
+
+namespace boost { namespace fusion
+{
+ struct void_;
+}}
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_initial_size" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion { namespace detail
+{
+ template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
+ struct deque_initial_size
+ {
+ typedef mpl::vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)> args;
+ typedef typename mpl::find<args, void_>::type first_void;
+ typedef typename mpl::distance<typename mpl::begin<args>::type, first_void>::type type;
+ };
+}}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp
new file mode 100644
index 0000000000..1ee91ba253
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp
@@ -0,0 +1,113 @@
+/*=============================================================================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ 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_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330)
+#define BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330
+
+#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+#error "C++03 only! This file should not have been included"
+#endif
+
+#include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
+#include <boost/fusion/container/deque/detail/keyed_element.hpp>
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/print.hpp>
+
+#define FUSION_VOID(z, n, _) void_
+
+namespace boost { namespace fusion
+{
+ struct void_;
+}}
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_keyed_values" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename Key, typename Value, typename Rest>
+ struct keyed_element;
+
+ struct nil_keyed_element;
+
+ template<typename N, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)>
+ struct deque_keyed_values_impl;
+
+ template<typename N>
+ struct deque_keyed_values_impl<N, BOOST_PP_ENUM(FUSION_MAX_DEQUE_SIZE, FUSION_VOID, _)>
+ {
+ typedef nil_keyed_element type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type construct()
+ {
+ return type();
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_()
+ {
+ return type();
+ }
+ };
+
+ template<typename N, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
+ struct deque_keyed_values_impl
+ {
+ typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
+
+ typedef typename deque_keyed_values_impl<
+ next_index,
+ BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type tail;
+ typedef keyed_element<N, T0, tail> type;
+
+#include <boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp>
+
+ };
+
+ template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)>
+ struct deque_keyed_values
+ : deque_keyed_values_impl<mpl::int_<0>, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>
+ {};
+
+}}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#undef FUSION_VOID
+
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp
new file mode 100644
index 0000000000..dcd9257dc5
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ 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_PP_IS_ITERATING)
+#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_VARIADIC_DEQUE)
+#error "C++03 only! This file should not have been included"
+#endif
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#include <boost/preprocessor/repetition/enum_shifted.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define FUSION_HASH #
+#define FUSION_DEQUE_KEYED_VALUES_FORWARD(z, n, _) \
+ std::forward<BOOST_PP_CAT(T_, n)>(BOOST_PP_CAT(t, n))
+
+#define BOOST_PP_FILENAME_1 \
+ <boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef FUSION_DEQUE_KEYED_VALUES_FORWARD
+#undef FUSION_HASH
+#endif
+#else
+
+#define N BOOST_PP_ITERATION()
+
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<typename add_const<T, >::type>::type t))
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ #if N > 1
+ , BOOST_PP_ENUM_SHIFTED_PARAMS(N, T)
+ #endif
+ >::construct(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t)));
+ }
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#endif
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
+ (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+ template <BOOST_PP_ENUM_PARAMS(N, typename T_)>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(BOOST_PP_ENUM_BINARY_PARAMS(N, T_, && t))
+ {
+ return type(std::forward<T_0>(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, _)));
+ }
+#endif
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH endif
+#endif
+
+#undef N
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/limits.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/limits.hpp
index 7892ba1a82..7892ba1a82 100644
--- a/3party/boost/boost/fusion/container/deque/limits.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/limits.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp
new file mode 100644
index 0000000000..abc2890a22
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if FUSION_MAX_DEQUE_SIZE <= 10
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 20
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 30
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 40
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 50
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp>
+#else
+#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp
new file mode 100644
index 0000000000..e573efb75c
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp
@@ -0,0 +1,221 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <>
+ struct as_deque<1>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef typename fusion::result_of::value_of<I0>::type T0;
+ typedef deque<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(*i0);
+ }
+ };
+ template <>
+ struct as_deque<2>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
+ typedef deque<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(*i0 , *i1);
+ }
+ };
+ template <>
+ struct as_deque<3>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
+ typedef deque<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(*i0 , *i1 , *i2);
+ }
+ };
+ template <>
+ struct as_deque<4>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
+ typedef deque<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(*i0 , *i1 , *i2 , *i3);
+ }
+ };
+ template <>
+ struct as_deque<5>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
+ typedef deque<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4);
+ }
+ };
+ template <>
+ struct as_deque<6>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
+ }
+ };
+ template <>
+ struct as_deque<7>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
+ }
+ };
+ template <>
+ struct as_deque<8>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
+ }
+ };
+ template <>
+ struct as_deque<9>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
+ }
+ };
+ template <>
+ struct as_deque<10>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp
new file mode 100644
index 0000000000..b3b7f15857
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp
@@ -0,0 +1,431 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <>
+ struct as_deque<1>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef typename fusion::result_of::value_of<I0>::type T0;
+ typedef deque<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(*i0);
+ }
+ };
+ template <>
+ struct as_deque<2>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
+ typedef deque<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(*i0 , *i1);
+ }
+ };
+ template <>
+ struct as_deque<3>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
+ typedef deque<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(*i0 , *i1 , *i2);
+ }
+ };
+ template <>
+ struct as_deque<4>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
+ typedef deque<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(*i0 , *i1 , *i2 , *i3);
+ }
+ };
+ template <>
+ struct as_deque<5>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
+ typedef deque<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4);
+ }
+ };
+ template <>
+ struct as_deque<6>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
+ }
+ };
+ template <>
+ struct as_deque<7>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
+ }
+ };
+ template <>
+ struct as_deque<8>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
+ }
+ };
+ template <>
+ struct as_deque<9>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
+ }
+ };
+ template <>
+ struct as_deque<10>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
+ }
+ };
+ template <>
+ struct as_deque<11>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
+ }
+ };
+ template <>
+ struct as_deque<12>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
+ }
+ };
+ template <>
+ struct as_deque<13>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
+ }
+ };
+ template <>
+ struct as_deque<14>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
+ }
+ };
+ template <>
+ struct as_deque<15>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
+ }
+ };
+ template <>
+ struct as_deque<16>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
+ }
+ };
+ template <>
+ struct as_deque<17>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
+ }
+ };
+ template <>
+ struct as_deque<18>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
+ }
+ };
+ template <>
+ struct as_deque<19>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
+ }
+ };
+ template <>
+ struct as_deque<20>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp
new file mode 100644
index 0000000000..18b4662cb1
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp
@@ -0,0 +1,641 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <>
+ struct as_deque<1>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef typename fusion::result_of::value_of<I0>::type T0;
+ typedef deque<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(*i0);
+ }
+ };
+ template <>
+ struct as_deque<2>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
+ typedef deque<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(*i0 , *i1);
+ }
+ };
+ template <>
+ struct as_deque<3>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
+ typedef deque<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(*i0 , *i1 , *i2);
+ }
+ };
+ template <>
+ struct as_deque<4>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
+ typedef deque<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(*i0 , *i1 , *i2 , *i3);
+ }
+ };
+ template <>
+ struct as_deque<5>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
+ typedef deque<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4);
+ }
+ };
+ template <>
+ struct as_deque<6>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
+ }
+ };
+ template <>
+ struct as_deque<7>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
+ }
+ };
+ template <>
+ struct as_deque<8>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
+ }
+ };
+ template <>
+ struct as_deque<9>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
+ }
+ };
+ template <>
+ struct as_deque<10>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
+ }
+ };
+ template <>
+ struct as_deque<11>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
+ }
+ };
+ template <>
+ struct as_deque<12>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
+ }
+ };
+ template <>
+ struct as_deque<13>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
+ }
+ };
+ template <>
+ struct as_deque<14>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
+ }
+ };
+ template <>
+ struct as_deque<15>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
+ }
+ };
+ template <>
+ struct as_deque<16>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
+ }
+ };
+ template <>
+ struct as_deque<17>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
+ }
+ };
+ template <>
+ struct as_deque<18>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
+ }
+ };
+ template <>
+ struct as_deque<19>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
+ }
+ };
+ template <>
+ struct as_deque<20>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
+ }
+ };
+ template <>
+ struct as_deque<21>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
+ }
+ };
+ template <>
+ struct as_deque<22>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
+ }
+ };
+ template <>
+ struct as_deque<23>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
+ }
+ };
+ template <>
+ struct as_deque<24>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
+ }
+ };
+ template <>
+ struct as_deque<25>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
+ }
+ };
+ template <>
+ struct as_deque<26>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
+ }
+ };
+ template <>
+ struct as_deque<27>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
+ }
+ };
+ template <>
+ struct as_deque<28>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
+ }
+ };
+ template <>
+ struct as_deque<29>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
+ }
+ };
+ template <>
+ struct as_deque<30>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp
new file mode 100644
index 0000000000..ec44a2b079
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp
@@ -0,0 +1,851 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <>
+ struct as_deque<1>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef typename fusion::result_of::value_of<I0>::type T0;
+ typedef deque<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(*i0);
+ }
+ };
+ template <>
+ struct as_deque<2>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
+ typedef deque<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(*i0 , *i1);
+ }
+ };
+ template <>
+ struct as_deque<3>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
+ typedef deque<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(*i0 , *i1 , *i2);
+ }
+ };
+ template <>
+ struct as_deque<4>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
+ typedef deque<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(*i0 , *i1 , *i2 , *i3);
+ }
+ };
+ template <>
+ struct as_deque<5>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
+ typedef deque<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4);
+ }
+ };
+ template <>
+ struct as_deque<6>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
+ }
+ };
+ template <>
+ struct as_deque<7>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
+ }
+ };
+ template <>
+ struct as_deque<8>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
+ }
+ };
+ template <>
+ struct as_deque<9>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
+ }
+ };
+ template <>
+ struct as_deque<10>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
+ }
+ };
+ template <>
+ struct as_deque<11>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
+ }
+ };
+ template <>
+ struct as_deque<12>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
+ }
+ };
+ template <>
+ struct as_deque<13>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
+ }
+ };
+ template <>
+ struct as_deque<14>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
+ }
+ };
+ template <>
+ struct as_deque<15>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
+ }
+ };
+ template <>
+ struct as_deque<16>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
+ }
+ };
+ template <>
+ struct as_deque<17>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
+ }
+ };
+ template <>
+ struct as_deque<18>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
+ }
+ };
+ template <>
+ struct as_deque<19>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
+ }
+ };
+ template <>
+ struct as_deque<20>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
+ }
+ };
+ template <>
+ struct as_deque<21>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
+ }
+ };
+ template <>
+ struct as_deque<22>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
+ }
+ };
+ template <>
+ struct as_deque<23>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
+ }
+ };
+ template <>
+ struct as_deque<24>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
+ }
+ };
+ template <>
+ struct as_deque<25>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
+ }
+ };
+ template <>
+ struct as_deque<26>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
+ }
+ };
+ template <>
+ struct as_deque<27>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
+ }
+ };
+ template <>
+ struct as_deque<28>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
+ }
+ };
+ template <>
+ struct as_deque<29>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
+ }
+ };
+ template <>
+ struct as_deque<30>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
+ }
+ };
+ template <>
+ struct as_deque<31>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30);
+ }
+ };
+ template <>
+ struct as_deque<32>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31);
+ }
+ };
+ template <>
+ struct as_deque<33>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32);
+ }
+ };
+ template <>
+ struct as_deque<34>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33);
+ }
+ };
+ template <>
+ struct as_deque<35>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34);
+ }
+ };
+ template <>
+ struct as_deque<36>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35);
+ }
+ };
+ template <>
+ struct as_deque<37>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36);
+ }
+ };
+ template <>
+ struct as_deque<38>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37);
+ }
+ };
+ template <>
+ struct as_deque<39>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38);
+ }
+ };
+ template <>
+ struct as_deque<40>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp
new file mode 100644
index 0000000000..6c83aed401
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp
@@ -0,0 +1,1061 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <>
+ struct as_deque<1>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef typename fusion::result_of::value_of<I0>::type T0;
+ typedef deque<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(*i0);
+ }
+ };
+ template <>
+ struct as_deque<2>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
+ typedef deque<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(*i0 , *i1);
+ }
+ };
+ template <>
+ struct as_deque<3>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
+ typedef deque<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(*i0 , *i1 , *i2);
+ }
+ };
+ template <>
+ struct as_deque<4>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
+ typedef deque<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(*i0 , *i1 , *i2 , *i3);
+ }
+ };
+ template <>
+ struct as_deque<5>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
+ typedef deque<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4);
+ }
+ };
+ template <>
+ struct as_deque<6>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
+ }
+ };
+ template <>
+ struct as_deque<7>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
+ }
+ };
+ template <>
+ struct as_deque<8>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
+ }
+ };
+ template <>
+ struct as_deque<9>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
+ }
+ };
+ template <>
+ struct as_deque<10>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
+ }
+ };
+ template <>
+ struct as_deque<11>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
+ }
+ };
+ template <>
+ struct as_deque<12>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
+ }
+ };
+ template <>
+ struct as_deque<13>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
+ }
+ };
+ template <>
+ struct as_deque<14>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
+ }
+ };
+ template <>
+ struct as_deque<15>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
+ }
+ };
+ template <>
+ struct as_deque<16>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
+ }
+ };
+ template <>
+ struct as_deque<17>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
+ }
+ };
+ template <>
+ struct as_deque<18>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
+ }
+ };
+ template <>
+ struct as_deque<19>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
+ }
+ };
+ template <>
+ struct as_deque<20>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
+ }
+ };
+ template <>
+ struct as_deque<21>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
+ }
+ };
+ template <>
+ struct as_deque<22>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
+ }
+ };
+ template <>
+ struct as_deque<23>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
+ }
+ };
+ template <>
+ struct as_deque<24>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
+ }
+ };
+ template <>
+ struct as_deque<25>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
+ }
+ };
+ template <>
+ struct as_deque<26>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
+ }
+ };
+ template <>
+ struct as_deque<27>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
+ }
+ };
+ template <>
+ struct as_deque<28>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
+ }
+ };
+ template <>
+ struct as_deque<29>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
+ }
+ };
+ template <>
+ struct as_deque<30>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
+ }
+ };
+ template <>
+ struct as_deque<31>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30);
+ }
+ };
+ template <>
+ struct as_deque<32>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31);
+ }
+ };
+ template <>
+ struct as_deque<33>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32);
+ }
+ };
+ template <>
+ struct as_deque<34>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33);
+ }
+ };
+ template <>
+ struct as_deque<35>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34);
+ }
+ };
+ template <>
+ struct as_deque<36>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35);
+ }
+ };
+ template <>
+ struct as_deque<37>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36);
+ }
+ };
+ template <>
+ struct as_deque<38>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37);
+ }
+ };
+ template <>
+ struct as_deque<39>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38);
+ }
+ };
+ template <>
+ struct as_deque<40>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
+ }
+ };
+ template <>
+ struct as_deque<41>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40);
+ }
+ };
+ template <>
+ struct as_deque<42>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41);
+ }
+ };
+ template <>
+ struct as_deque<43>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42);
+ }
+ };
+ template <>
+ struct as_deque<44>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43);
+ }
+ };
+ template <>
+ struct as_deque<45>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44);
+ }
+ };
+ template <>
+ struct as_deque<46>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45);
+ }
+ };
+ template <>
+ struct as_deque<47>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46);
+ }
+ };
+ template <>
+ struct as_deque<48>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46; typedef typename fusion::result_of::value_of<I47>::type T47;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47);
+ }
+ };
+ template <>
+ struct as_deque<49>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48; typedef typename fusion::result_of::next<I48>::type I49;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46; typedef typename fusion::result_of::value_of<I47>::type T47; typedef typename fusion::result_of::value_of<I48>::type T48;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48);
+ }
+ };
+ template <>
+ struct as_deque<50>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48; typedef typename fusion::result_of::next<I48>::type I49; typedef typename fusion::result_of::next<I49>::type I50;
+ typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46; typedef typename fusion::result_of::value_of<I47>::type T47; typedef typename fusion::result_of::value_of<I48>::type T48; typedef typename fusion::result_of::value_of<I49>::type T49;
+ typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); typename gen::I49 i49 = fusion::next(i48);
+ return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49);
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp
new file mode 100644
index 0000000000..3a5a21e259
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if FUSION_MAX_DEQUE_SIZE <= 10
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 20
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 30
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 40
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 50
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp>
+#else
+#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp
new file mode 100644
index 0000000000..59a4ca6a0e
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp
@@ -0,0 +1,271 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion {
+ struct deque_tag;
+ template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ struct deque
+ :
+ detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type,
+ sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> >
+ {
+ typedef deque_tag fusion_tag;
+ typedef bidirectional_traversal_tag category;
+ typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type base;
+ typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type size;
+ typedef mpl::int_<size::value> next_up;
+ typedef mpl::int_<
+ mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
+ typedef mpl::false_ is_view;
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+template <typename T_0 , typename T_1>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1)
+ : base(detail::deque_keyed_values<T0 , T1>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+template <typename T_0 , typename T_1 , typename T_2>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)))
+{}
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ deque()
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
+ : base(t0, detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque const& rhs)
+ : base(rhs)
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& seq)
+ : base(seq)
+ {}
+ template<typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
+ : base(base::from_iterator(fusion::begin(seq)))
+ {}
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T0_>
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(T0_&& t0
+ , typename enable_if<is_convertible<T0_, T0> >::type* = 0
+ )
+ : base(std::forward<T0_>(t0), detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque&& rhs)
+ : base(std::forward<deque>(rhs))
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9>&& seq)
+ : base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9>>(seq))
+ {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T&& rhs)
+ {
+ base::operator=(std::forward<T>(rhs));
+ return *this;
+ }
+# endif
+ };
+ 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 <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const&,
+ typename enable_if<
+ mpl::and_<
+ traits::is_sequence<Sequence>
+ , result_of::empty<Sequence> > >::type* = 0)
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ deque() {}
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque10_fwd.hpp
index 4752e96436..4752e96436 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque10_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp
new file mode 100644
index 0000000000..ca008a7b6e
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp
@@ -0,0 +1,451 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion {
+ struct deque_tag;
+ template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ struct deque
+ :
+ detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type,
+ sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> >
+ {
+ typedef deque_tag fusion_tag;
+ typedef bidirectional_traversal_tag category;
+ typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type base;
+ typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type size;
+ typedef mpl::int_<size::value> next_up;
+ typedef mpl::int_<
+ mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
+ typedef mpl::false_ is_view;
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+template <typename T_0 , typename T_1>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1)
+ : base(detail::deque_keyed_values<T0 , T1>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+template <typename T_0 , typename T_1 , typename T_2>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19)))
+{}
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ deque()
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
+ : base(t0, detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque const& rhs)
+ : base(rhs)
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& seq)
+ : base(seq)
+ {}
+ template<typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
+ : base(base::from_iterator(fusion::begin(seq)))
+ {}
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T0_>
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(T0_&& t0
+ , typename enable_if<is_convertible<T0_, T0> >::type* = 0
+ )
+ : base(std::forward<T0_>(t0), detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque&& rhs)
+ : base(std::forward<deque>(rhs))
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19>&& seq)
+ : base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19>>(seq))
+ {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T&& rhs)
+ {
+ base::operator=(std::forward<T>(rhs));
+ return *this;
+ }
+# endif
+ };
+ 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 <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const&,
+ typename enable_if<
+ mpl::and_<
+ traits::is_sequence<Sequence>
+ , result_of::empty<Sequence> > >::type* = 0)
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ deque() {}
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque20_fwd.hpp
index c53618811b..c53618811b 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque20_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp
new file mode 100644
index 0000000000..cc2c5b4014
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp
@@ -0,0 +1,631 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion {
+ struct deque_tag;
+ template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ struct deque
+ :
+ detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type,
+ sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> >
+ {
+ typedef deque_tag fusion_tag;
+ typedef bidirectional_traversal_tag category;
+ typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type base;
+ typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type size;
+ typedef mpl::int_<size::value> next_up;
+ typedef mpl::int_<
+ mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
+ typedef mpl::false_ is_view;
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+template <typename T_0 , typename T_1>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1)
+ : base(detail::deque_keyed_values<T0 , T1>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+template <typename T_0 , typename T_1 , typename T_2>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29)))
+{}
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ deque()
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
+ : base(t0, detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque const& rhs)
+ : base(rhs)
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& seq)
+ : base(seq)
+ {}
+ template<typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
+ : base(base::from_iterator(fusion::begin(seq)))
+ {}
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T0_>
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(T0_&& t0
+ , typename enable_if<is_convertible<T0_, T0> >::type* = 0
+ )
+ : base(std::forward<T0_>(t0), detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque&& rhs)
+ : base(std::forward<deque>(rhs))
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29>&& seq)
+ : base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29>>(seq))
+ {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T&& rhs)
+ {
+ base::operator=(std::forward<T>(rhs));
+ return *this;
+ }
+# endif
+ };
+ 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 <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const&,
+ typename enable_if<
+ mpl::and_<
+ traits::is_sequence<Sequence>
+ , result_of::empty<Sequence> > >::type* = 0)
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ deque() {}
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque30_fwd.hpp
index d7abffcb8b..d7abffcb8b 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque30_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp
new file mode 100644
index 0000000000..00d110b265
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp
@@ -0,0 +1,811 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion {
+ struct deque_tag;
+ template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ struct deque
+ :
+ detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type,
+ sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> >
+ {
+ typedef deque_tag fusion_tag;
+ typedef bidirectional_traversal_tag category;
+ typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type base;
+ typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type size;
+ typedef mpl::int_<size::value> next_up;
+ typedef mpl::int_<
+ mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
+ typedef mpl::false_ is_view;
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+template <typename T_0 , typename T_1>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1)
+ : base(detail::deque_keyed_values<T0 , T1>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+template <typename T_0 , typename T_1 , typename T_2>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39)))
+{}
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ deque()
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
+ : base(t0, detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque const& rhs)
+ : base(rhs)
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& seq)
+ : base(seq)
+ {}
+ template<typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
+ : base(base::from_iterator(fusion::begin(seq)))
+ {}
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T0_>
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(T0_&& t0
+ , typename enable_if<is_convertible<T0_, T0> >::type* = 0
+ )
+ : base(std::forward<T0_>(t0), detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque&& rhs)
+ : base(std::forward<deque>(rhs))
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39>&& seq)
+ : base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39>>(seq))
+ {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T&& rhs)
+ {
+ base::operator=(std::forward<T>(rhs));
+ return *this;
+ }
+# endif
+ };
+ 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 <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const&,
+ typename enable_if<
+ mpl::and_<
+ traits::is_sequence<Sequence>
+ , result_of::empty<Sequence> > >::type* = 0)
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ deque() {}
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque40_fwd.hpp
index 72f2b9c24c..72f2b9c24c 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque40_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp
new file mode 100644
index 0000000000..ec292ebf42
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp
@@ -0,0 +1,991 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion {
+ struct deque_tag;
+ template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ struct deque
+ :
+ detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type,
+ sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> >
+ {
+ typedef deque_tag fusion_tag;
+ typedef bidirectional_traversal_tag category;
+ typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type base;
+ typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type size;
+ typedef mpl::int_<size::value> next_up;
+ typedef mpl::int_<
+ mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
+ typedef mpl::false_ is_view;
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1)
+ : base(detail::deque_keyed_values<T0 , T1>::construct(t0 , t1))
+{}
+template <typename T_0 , typename T_1>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1)
+ : base(detail::deque_keyed_values<T0 , T1>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::construct(t0 , t1 , t2))
+{}
+template <typename T_0 , typename T_1 , typename T_2>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ : base(detail::deque_keyed_values<T0 , T1 , T2>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::construct(t0 , t1 , t2 , t3))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::construct(t0 , t1 , t2 , t3 , t4))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::construct(t0 , t1 , t2 , t3 , t4 , t5))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45 , typename T_46>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45 , T_46 && t46)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45) , std::forward<T_46>(t46)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46 , T47 const& t47)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45 , typename T_46 , typename T_47>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45 , T_46 && t46 , T_47 && t47)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45) , std::forward<T_46>(t46) , std::forward<T_47>(t47)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47 , typename add_reference<typename add_const<T48 >::type>::type t48)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46 , T47 const& t47 , T48 const& t48)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45 , typename T_46 , typename T_47 , typename T_48>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45 , T_46 && t46 , T_47 && t47 , T_48 && t48)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45) , std::forward<T_46>(t46) , std::forward<T_47>(t47) , std::forward<T_48>(t48)))
+{}
+# endif
+# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47 , typename add_reference<typename add_const<T48 >::type>::type t48 , typename add_reference<typename add_const<T49 >::type>::type t49)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48 , t49))
+{}
+# endif
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+BOOST_FUSION_GPU_ENABLED
+deque(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46 , T47 const& t47 , T48 const& t48 , T49 const& t49)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::construct(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48 , t49))
+{}
+template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45 , typename T_46 , typename T_47 , typename T_48 , typename T_49>
+BOOST_FUSION_GPU_ENABLED
+deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45 , T_46 && t46 , T_47 && t47 , T_48 && t48 , T_49 && t49)
+ : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::
+ forward_(std::forward<T_0>(t0) , std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45) , std::forward<T_46>(t46) , std::forward<T_47>(t47) , std::forward<T_48>(t48) , std::forward<T_49>(t49)))
+{}
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ deque()
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
+ : base(t0, detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque const& rhs)
+ : base(rhs)
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& seq)
+ : base(seq)
+ {}
+ template<typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
+ : base(base::from_iterator(fusion::begin(seq)))
+ {}
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T const& rhs)
+ {
+ base::operator=(rhs);
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T0_>
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(T0_&& t0
+ , typename enable_if<is_convertible<T0_, T0> >::type* = 0
+ )
+ : base(std::forward<T0_>(t0), detail::nil_keyed_element())
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit deque(deque&& rhs)
+ : base(std::forward<deque>(rhs))
+ {}
+ template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
+ deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49>&& seq)
+ : base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49>>(seq))
+ {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ deque&
+ operator=(T&& rhs)
+ {
+ base::operator=(std::forward<T>(rhs));
+ return *this;
+ }
+# endif
+ };
+ 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 <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ deque(Sequence const&,
+ typename enable_if<
+ mpl::and_<
+ traits::is_sequence<Sequence>
+ , result_of::empty<Sequence> > >::type* = 0)
+ {}
+ BOOST_FUSION_GPU_ENABLED
+ deque() {}
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque50_fwd.hpp
index d46a2c7585..d46a2c7585 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque50_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp
new file mode 100644
index 0000000000..9a770b9ef4
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if FUSION_MAX_DEQUE_SIZE <= 10
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque10_fwd.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 20
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque20_fwd.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 30
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque30_fwd.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 40
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque40_fwd.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 50
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque50_fwd.hpp>
+#else
+#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp
new file mode 100644
index 0000000000..9431abe2b8
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if FUSION_MAX_DEQUE_SIZE <= 10
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size10.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 20
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size20.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 30
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size30.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 40
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size40.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 50
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size50.hpp>
+#else
+#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size10.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size10.hpp
index 5bf08d560b..5bf08d560b 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size10.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size10.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size20.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size20.hpp
index a48c33ac44..a48c33ac44 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size20.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size20.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size30.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size30.hpp
index 53e805201f..53e805201f 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size30.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size30.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size40.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size40.hpp
index 3a613b8f7f..3a613b8f7f 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size40.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size40.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size50.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size50.hpp
index 2a31a72bd0..2a31a72bd0 100644
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size50.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size50.hpp
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp
new file mode 100644
index 0000000000..6e79686547
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if FUSION_MAX_DEQUE_SIZE <= 10
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 20
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 30
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 40
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp>
+#elif FUSION_MAX_DEQUE_SIZE <= 50
+#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp>
+#else
+#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
+#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp
new file mode 100644
index 0000000000..a193acd122
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp
@@ -0,0 +1,252 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename Key, typename Value, typename Rest>
+ struct keyed_element;
+ struct nil_keyed_element;
+ template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_>
+ struct deque_keyed_values_impl;
+ template<typename N>
+ struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
+ {
+ typedef nil_keyed_element type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct()
+ {
+ return type();
+ }
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_()
+ {
+ return type();
+ }
+ };
+ template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ struct deque_keyed_values_impl
+ {
+ typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
+ typedef typename deque_keyed_values_impl<
+ next_index,
+ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type tail;
+ typedef keyed_element<N, T0, tail> type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ >::construct());
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ >::forward_());
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1
+ >::construct(t1));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1
+ >::forward_(std::forward<T_1>(t1)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2
+ >::construct(t1 , t2));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3
+ >::construct(t1 , t2 , t3));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4
+ >::construct(t1 , t2 , t3 , t4));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5
+ >::construct(t1 , t2 , t3 , t4 , t5));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)));
+ }
+# endif
+ };
+ template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_>
+ struct deque_keyed_values
+ : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ {};
+}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp
new file mode 100644
index 0000000000..66c56883cb
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp
@@ -0,0 +1,462 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename Key, typename Value, typename Rest>
+ struct keyed_element;
+ struct nil_keyed_element;
+ template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_>
+ struct deque_keyed_values_impl;
+ template<typename N>
+ struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
+ {
+ typedef nil_keyed_element type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct()
+ {
+ return type();
+ }
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_()
+ {
+ return type();
+ }
+ };
+ template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ struct deque_keyed_values_impl
+ {
+ typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
+ typedef typename deque_keyed_values_impl<
+ next_index,
+ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type tail;
+ typedef keyed_element<N, T0, tail> type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ >::construct());
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ >::forward_());
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1
+ >::construct(t1));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1
+ >::forward_(std::forward<T_1>(t1)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2
+ >::construct(t1 , t2));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3
+ >::construct(t1 , t2 , t3));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4
+ >::construct(t1 , t2 , t3 , t4));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5
+ >::construct(t1 , t2 , t3 , t4 , t5));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19)));
+ }
+# endif
+ };
+ template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_>
+ struct deque_keyed_values
+ : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ {};
+}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp
new file mode 100644
index 0000000000..8680c66196
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp
@@ -0,0 +1,672 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename Key, typename Value, typename Rest>
+ struct keyed_element;
+ struct nil_keyed_element;
+ template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_>
+ struct deque_keyed_values_impl;
+ template<typename N>
+ struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
+ {
+ typedef nil_keyed_element type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct()
+ {
+ return type();
+ }
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_()
+ {
+ return type();
+ }
+ };
+ template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ struct deque_keyed_values_impl
+ {
+ typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
+ typedef typename deque_keyed_values_impl<
+ next_index,
+ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type tail;
+ typedef keyed_element<N, T0, tail> type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ >::construct());
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ >::forward_());
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1
+ >::construct(t1));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1
+ >::forward_(std::forward<T_1>(t1)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2
+ >::construct(t1 , t2));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3
+ >::construct(t1 , t2 , t3));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4
+ >::construct(t1 , t2 , t3 , t4));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5
+ >::construct(t1 , t2 , t3 , t4 , t5));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29)));
+ }
+# endif
+ };
+ template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_>
+ struct deque_keyed_values
+ : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ {};
+}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp
new file mode 100644
index 0000000000..4e9ed3e9f0
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp
@@ -0,0 +1,882 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename Key, typename Value, typename Rest>
+ struct keyed_element;
+ struct nil_keyed_element;
+ template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_>
+ struct deque_keyed_values_impl;
+ template<typename N>
+ struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
+ {
+ typedef nil_keyed_element type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct()
+ {
+ return type();
+ }
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_()
+ {
+ return type();
+ }
+ };
+ template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ struct deque_keyed_values_impl
+ {
+ typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
+ typedef typename deque_keyed_values_impl<
+ next_index,
+ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type tail;
+ typedef keyed_element<N, T0, tail> type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ >::construct());
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ >::forward_());
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1
+ >::construct(t1));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1
+ >::forward_(std::forward<T_1>(t1)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2
+ >::construct(t1 , t2));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3
+ >::construct(t1 , t2 , t3));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4
+ >::construct(t1 , t2 , t3 , t4));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5
+ >::construct(t1 , t2 , t3 , t4 , t5));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39)));
+ }
+# endif
+ };
+ template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_>
+ struct deque_keyed_values
+ : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ {};
+}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp
new file mode 100644
index 0000000000..0fab39e32b
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp
@@ -0,0 +1,1092 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename Key, typename Value, typename Rest>
+ struct keyed_element;
+ struct nil_keyed_element;
+ template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_>
+ struct deque_keyed_values_impl;
+ template<typename N>
+ struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
+ {
+ typedef nil_keyed_element type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct()
+ {
+ return type();
+ }
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_()
+ {
+ return type();
+ }
+ };
+ template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ struct deque_keyed_values_impl
+ {
+ typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
+ typedef typename deque_keyed_values_impl<
+ next_index,
+ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type tail;
+ typedef keyed_element<N, T0, tail> type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ >::construct());
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ >::forward_());
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1
+ >::construct(t1));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1
+ >::forward_(std::forward<T_1>(t1)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2
+ >::construct(t1 , t2));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3
+ >::construct(t1 , t2 , t3));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4
+ >::construct(t1 , t2 , t3 , t4));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5
+ >::construct(t1 , t2 , t3 , t4 , t5));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40 , T_41
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40 , T_41 , T_42
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40 , T_41 , T_42 , T_43
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40 , T_41 , T_42 , T_43 , T_44
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40 , T_41 , T_42 , T_43 , T_44 , T_45
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45 , typename T_46>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45 , T_46 && t46)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40 , T_41 , T_42 , T_43 , T_44 , T_45 , T_46
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45) , std::forward<T_46>(t46)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45 , typename T_46 , typename T_47>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45 , T_46 && t46 , T_47 && t47)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40 , T_41 , T_42 , T_43 , T_44 , T_45 , T_46 , T_47
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45) , std::forward<T_46>(t46) , std::forward<T_47>(t47)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47 , typename add_reference<typename add_const<T48 >::type>::type t48)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45 , typename T_46 , typename T_47 , typename T_48>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45 , T_46 && t46 , T_47 && t47 , T_48 && t48)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40 , T_41 , T_42 , T_43 , T_44 , T_45 , T_46 , T_47 , T_48
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45) , std::forward<T_46>(t46) , std::forward<T_47>(t47) , std::forward<T_48>(t48)));
+ }
+# endif
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47 , typename add_reference<typename add_const<T48 >::type>::type t48 , typename add_reference<typename add_const<T49 >::type>::type t49)
+ {
+ return type(t0,
+ deque_keyed_values_impl<
+ next_index
+ , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49
+ >::construct(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48 , t49));
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename T_0 , typename T_1 , typename T_2 , typename T_3 , typename T_4 , typename T_5 , typename T_6 , typename T_7 , typename T_8 , typename T_9 , typename T_10 , typename T_11 , typename T_12 , typename T_13 , typename T_14 , typename T_15 , typename T_16 , typename T_17 , typename T_18 , typename T_19 , typename T_20 , typename T_21 , typename T_22 , typename T_23 , typename T_24 , typename T_25 , typename T_26 , typename T_27 , typename T_28 , typename T_29 , typename T_30 , typename T_31 , typename T_32 , typename T_33 , typename T_34 , typename T_35 , typename T_36 , typename T_37 , typename T_38 , typename T_39 , typename T_40 , typename T_41 , typename T_42 , typename T_43 , typename T_44 , typename T_45 , typename T_46 , typename T_47 , typename T_48 , typename T_49>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_6 && t6 , T_7 && t7 , T_8 && t8 , T_9 && t9 , T_10 && t10 , T_11 && t11 , T_12 && t12 , T_13 && t13 , T_14 && t14 , T_15 && t15 , T_16 && t16 , T_17 && t17 , T_18 && t18 , T_19 && t19 , T_20 && t20 , T_21 && t21 , T_22 && t22 , T_23 && t23 , T_24 && t24 , T_25 && t25 , T_26 && t26 , T_27 && t27 , T_28 && t28 , T_29 && t29 , T_30 && t30 , T_31 && t31 , T_32 && t32 , T_33 && t33 , T_34 && t34 , T_35 && t35 , T_36 && t36 , T_37 && t37 , T_38 && t38 , T_39 && t39 , T_40 && t40 , T_41 && t41 , T_42 && t42 , T_43 && t43 , T_44 && t44 , T_45 && t45 , T_46 && t46 , T_47 && t47 , T_48 && t48 , T_49 && t49)
+ {
+ return type(std::forward<T_0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ , T_1 , T_2 , T_3 , T_4 , T_5 , T_6 , T_7 , T_8 , T_9 , T_10 , T_11 , T_12 , T_13 , T_14 , T_15 , T_16 , T_17 , T_18 , T_19 , T_20 , T_21 , T_22 , T_23 , T_24 , T_25 , T_26 , T_27 , T_28 , T_29 , T_30 , T_31 , T_32 , T_33 , T_34 , T_35 , T_36 , T_37 , T_38 , T_39 , T_40 , T_41 , T_42 , T_43 , T_44 , T_45 , T_46 , T_47 , T_48 , T_49
+ >::forward_(std::forward<T_1>(t1) , std::forward<T_2>(t2) , std::forward<T_3>(t3) , std::forward<T_4>(t4) , std::forward<T_5>(t5) , std::forward<T_6>(t6) , std::forward<T_7>(t7) , std::forward<T_8>(t8) , std::forward<T_9>(t9) , std::forward<T_10>(t10) , std::forward<T_11>(t11) , std::forward<T_12>(t12) , std::forward<T_13>(t13) , std::forward<T_14>(t14) , std::forward<T_15>(t15) , std::forward<T_16>(t16) , std::forward<T_17>(t17) , std::forward<T_18>(t18) , std::forward<T_19>(t19) , std::forward<T_20>(t20) , std::forward<T_21>(t21) , std::forward<T_22>(t22) , std::forward<T_23>(t23) , std::forward<T_24>(t24) , std::forward<T_25>(t25) , std::forward<T_26>(t26) , std::forward<T_27>(t27) , std::forward<T_28>(t28) , std::forward<T_29>(t29) , std::forward<T_30>(t30) , std::forward<T_31>(t31) , std::forward<T_32>(t32) , std::forward<T_33>(t33) , std::forward<T_34>(t34) , std::forward<T_35>(t35) , std::forward<T_36>(t36) , std::forward<T_37>(t37) , std::forward<T_38>(t38) , std::forward<T_39>(t39) , std::forward<T_40>(t40) , std::forward<T_41>(t41) , std::forward<T_42>(t42) , std::forward<T_43>(t43) , std::forward<T_44>(t44) , std::forward<T_45>(t45) , std::forward<T_46>(t46) , std::forward<T_47>(t47) , std::forward<T_48>(t48) , std::forward<T_49>(t49)));
+ }
+# endif
+ };
+ template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_>
+ struct deque_keyed_values
+ : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
+ {};
+}}}
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
deleted file mode 100644
index 44d279f62f..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- 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_PP_IS_ITERATING)
-#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_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>(t##n)
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_FILENAME_1 \
- <boost/fusion/container/deque/detail/deque_forward_ctor.hpp>
-#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<typename add_const<T, >::type>::type t))
- : base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::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<BOOST_PP_ENUM_PARAMS(N, T)>::
- 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
deleted file mode 100644
index 21075ef47f..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- 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_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139)
-#define BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139
-
-#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
-#error "C++03 only! This file should not have been included"
-#endif
-
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/mpl/find.hpp>
-#include <boost/mpl/begin.hpp>
-#include <boost/mpl/distance.hpp>
-#include <boost/mpl/equal_to.hpp>
-#include <boost/mpl/vector.hpp>
-
-namespace boost { namespace fusion
-{
- struct void_;
-}}
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_initial_size" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
-
-namespace boost { namespace fusion { namespace detail
-{
- template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
- struct deque_initial_size
- {
- typedef mpl::vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)> args;
- typedef typename mpl::find<args, void_>::type first_void;
- typedef typename mpl::distance<typename mpl::begin<args>::type, first_void>::type type;
- };
-}}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values.hpp
new file mode 100644
index 0000000000..9bcffeb234
--- /dev/null
+++ b/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ 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_FUSION_DEQUE_DETAIL_CPP11_DEQUE_KEYED_VALUES_07042012_1901)
+#define BOOST_FUSION_DEQUE_DETAIL_CPP11_DEQUE_KEYED_VALUES_07042012_1901
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/deque/detail/keyed_element.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename Key, typename Value, typename Rest>
+ struct keyed_element;
+
+ template <typename N, typename ...Elements>
+ struct deque_keyed_values_impl;
+
+ template <typename N, typename Head, typename ...Tail>
+ struct deque_keyed_values_impl<N, Head, Tail...>
+ {
+ typedef mpl::int_<(N::value + 1)> next_index;
+ typedef typename deque_keyed_values_impl<next_index, Tail...>::type tail;
+ typedef keyed_element<N, Head, tail> type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type construct(
+ typename detail::call_param<Head>::type head
+ , typename detail::call_param<Tail>::type... tail)
+ {
+ return type(
+ head
+ , deque_keyed_values_impl<next_index, Tail...>::construct(tail...)
+ );
+ }
+
+ template <typename Head_, typename ...Tail_>
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_(Head_&& head, Tail_&&... tail)
+ {
+ return type(
+ std::forward<Head_>(head)
+ , deque_keyed_values_impl<next_index, Tail_...>::
+ forward_(std::forward<Tail_>(tail)...)
+ );
+ }
+ };
+
+ struct nil_keyed_element;
+
+ template <typename N>
+ struct deque_keyed_values_impl<N>
+ {
+ typedef nil_keyed_element type;
+ BOOST_FUSION_GPU_ENABLED
+ static type construct() { return type(); }
+ BOOST_FUSION_GPU_ENABLED
+ static type forward_() { return type(); }
+ };
+
+ template <typename ...Elements>
+ struct deque_keyed_values
+ : deque_keyed_values_impl<mpl::int_<0>, Elements...> {};
+}}}
+
+#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
deleted file mode 100644
index d457516fc5..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- 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_PP_IS_ITERATING)
-#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_VARIADIC_DEQUE)
-#error "C++03 only! This file should not have been included"
-#endif
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
-#include <boost/preprocessor/repetition/enum_shifted.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define FUSION_DEQUE_KEYED_VALUES_FORWARD(z, n, _) \
- std::forward<BOOST_PP_CAT(T, n)>(BOOST_PP_CAT(t, n))
-
-#define BOOST_PP_FILENAME_1 \
- <boost/fusion/container/deque/detail/deque_keyed_values_call.hpp>
-#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 construct(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<typename add_const<T, >::type>::type t))
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- #if N > 1
- , BOOST_PP_ENUM_SHIFTED_PARAMS(N, T)
- #endif
- >::call(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t)));
- }
-
- static type forward_(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && t))
- {
- return type(std::forward<T0>(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/end_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/end_impl.hpp
index 8037689abf..73ef85ffb5 100644
--- a/3party/boost/boost/fusion/container/deque/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/end_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_DEQUE_END_IMPL_09122006_2034)
#define BOOST_FUSION_DEQUE_END_IMPL_09122006_2034
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque/deque_iterator.hpp>
#include <boost/mpl/equal_to.hpp>
@@ -36,6 +37,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
return type(seq);
diff --git a/3party/boost/boost/fusion/container/deque/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/is_sequence_impl.hpp
index b4718be41a..b4b9138cd9 100644
--- a/3party/boost/boost/fusion/container/deque/detail/is_sequence_impl.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/is_sequence_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_CONTAINER_DEQUE_DETAIL_IS_SEQUENCE_IMPL_HPP
#define BOOST_FUSION_CONTAINER_DEQUE_DETAIL_IS_SEQUENCE_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion
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 e5bdc2abd3..05258820dc 100644
--- a/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_DEQUE_DETAIL_KEYED_ELEMENT_26112006_1330)
#define BOOST_FUSION_DEQUE_DETAIL_KEYED_ELEMENT_26112006_1330
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/next.hpp>
@@ -22,9 +23,11 @@ namespace boost { namespace fusion { namespace detail
struct nil_keyed_element
{
typedef fusion_sequence_tag tag;
+ BOOST_FUSION_GPU_ENABLED
void get();
template<typename It>
+ BOOST_FUSION_GPU_ENABLED
static nil_keyed_element
from_iterator(It const&)
{
@@ -40,6 +43,7 @@ namespace boost { namespace fusion { namespace detail
using Rest::get;
template <typename It>
+ BOOST_FUSION_GPU_ENABLED
static keyed_element
from_iterator(It const& it)
{
@@ -47,11 +51,13 @@ namespace boost { namespace fusion { namespace detail
*it, base::from_iterator(fusion::next(it)));
}
+ BOOST_FUSION_GPU_ENABLED
keyed_element(keyed_element const& rhs)
: Rest(rhs.get_base()), value_(rhs.value_)
{}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
keyed_element(keyed_element&& rhs)
: Rest(std::forward<Rest>(rhs.forward_base()))
, value_(std::forward<Value>(rhs.value_))
@@ -59,58 +65,68 @@ namespace boost { namespace fusion { namespace detail
#endif
template <typename U, typename Rst>
+ BOOST_FUSION_GPU_ENABLED
keyed_element(keyed_element<Key, U, Rst> const& rhs)
: Rest(rhs.get_base()), value_(rhs.value_)
{}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
#endif
+ BOOST_FUSION_GPU_ENABLED
Rest& get_base()
{
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
Rest const& get_base() const
{
return *this;
}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
Rest&& forward_base()
{
return std::forward<Rest>(*static_cast<Rest*>(this));
}
#endif
+ BOOST_FUSION_GPU_ENABLED
typename cref_result<Value>::type get(Key) const
{
return value_;
}
+ BOOST_FUSION_GPU_ENABLED
typename ref_result<Value>::type get(Key)
{
return value_;
}
+ BOOST_FUSION_GPU_ENABLED
keyed_element(
typename detail::call_param<Value>::type value
, Rest const& rest)
: Rest(rest), value_(value)
{}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
keyed_element(Value&& value, Rest&& rest)
: Rest(std::forward<Rest>(rest))
, value_(std::forward<Value>(value))
{}
#endif
+ BOOST_FUSION_GPU_ENABLED
keyed_element()
: Rest(), value_()
{}
template<typename U, typename Rst>
+ BOOST_FUSION_GPU_ENABLED
keyed_element& operator=(keyed_element<Key, U, Rst> const& rhs)
{
base::operator=(static_cast<Rst const&>(rhs)); // cast for msvc-7.1
@@ -118,6 +134,7 @@ namespace boost { namespace fusion { namespace detail
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
keyed_element& operator=(keyed_element const& rhs)
{
base::operator=(rhs);
@@ -125,7 +142,8 @@ namespace boost { namespace fusion { namespace detail
return *this;
}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
keyed_element& operator=(keyed_element&& rhs)
{
base::operator=(std::forward<keyed_element>(rhs));
diff --git a/3party/boost/boost/fusion/container/deque/detail/pp_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/pp_deque.hpp
deleted file mode 100644
index 7913b67ba1..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/pp_deque.hpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- 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_PP_FUSION_DEQUE_26112006_1649)
-#define BOOST_PP_FUSION_DEQUE_26112006_1649
-
-#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
-#error "C++03 only! This file should not have been included"
-#endif
-
-#include <boost/fusion/container/deque/limits.hpp>
-#include <boost/fusion/container/deque/front_extended_deque.hpp>
-#include <boost/fusion/container/deque/back_extended_deque.hpp>
-#include <boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp>
-#include <boost/fusion/container/deque/detail/deque_initial_size.hpp>
-#include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/container/deque/detail/keyed_element.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-
-#include <boost/fusion/container/deque/deque_fwd.hpp>
-#include <boost/fusion/container/deque/detail/value_at_impl.hpp>
-#include <boost/fusion/container/deque/detail/at_impl.hpp>
-#include <boost/fusion/container/deque/detail/begin_impl.hpp>
-#include <boost/fusion/container/deque/detail/end_impl.hpp>
-#include <boost/fusion/container/deque/detail/is_sequence_impl.hpp>
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/mpl/bool.hpp>
-
-#include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/support/void.hpp>
-#include <boost/utility/enable_if.hpp>
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/deque/detail/preprocessed/deque.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
-
-namespace boost { namespace fusion {
-
- struct deque_tag;
-
- template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
- struct deque
- :
- detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type,
- sequence_base<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)> >
- {
- typedef deque_tag fusion_tag;
- typedef bidirectional_traversal_tag category;
- typedef typename detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type base;
- typedef typename detail::deque_initial_size<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type size;
- typedef mpl::int_<size::value> next_up;
- typedef mpl::int_<
- mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
- typedef mpl::false_ is_view;
-
-#include <boost/fusion/container/deque/detail/deque_forward_ctor.hpp>
-
- deque()
- {}
-
- explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
- : 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>(t0), detail::nil_keyed_element())
- {}
-
- explicit deque(deque&& rhs)
- : base(std::forward<deque>(rhs))
- {}
-#endif
-
- template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
- deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& seq)
- : base(seq)
- {}
-
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
- template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
- deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>&& seq)
- : base(std::forward<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>>(seq))
- {}
-#endif
-
- template<typename Sequence>
- deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0)
- : base(base::from_iterator(fusion::begin(seq)))
- {}
-
- template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
- deque&
- operator=(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
-
- template <typename T>
- deque&
- operator=(T const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
-
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
- template <typename T>
- deque&
- operator=(T&& rhs)
- {
- base::operator=(std::forward<T>(rhs));
- return *this;
- }
-#endif
-
- };
-}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/pp_deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/pp_deque_fwd.hpp
deleted file mode 100644
index 354cfccdc1..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/pp_deque_fwd.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2007 Dan Marsden
-
- 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_PP_DEQUE_FORWARD_02092007_0749)
-#define FUSION_PP_DEQUE_FORWARD_02092007_0749
-
-#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
-#error "C++03 only! This file should not have been included"
-#endif
-
-#include <boost/fusion/container/deque/limits.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR "_fwd.hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
-
-namespace boost { namespace fusion
-{
- struct void_;
-
- template<
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- FUSION_MAX_DEQUE_SIZE, typename T, void_)>
- struct deque;
-}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp
deleted file mode 100644
index a7c4939a36..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- 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_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330)
-#define BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330
-
-#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
-#error "C++03 only! This file should not have been included"
-#endif
-
-#include <boost/fusion/container/deque/limits.hpp>
-#include <boost/fusion/container/deque/detail/keyed_element.hpp>
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/type_traits/add_reference.hpp>
-
-#include <boost/mpl/plus.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/print.hpp>
-
-#define FUSION_VOID(z, n, _) void_
-
-namespace boost { namespace fusion
-{
- struct void_;
-}}
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_keyed_values" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
-
-namespace boost { namespace fusion { namespace detail
-{
- template<typename Key, typename Value, typename Rest>
- struct keyed_element;
-
- struct nil_keyed_element;
-
- template<typename N, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)>
- struct deque_keyed_values_impl;
-
- template<typename N>
- struct deque_keyed_values_impl<N, BOOST_PP_ENUM(FUSION_MAX_DEQUE_SIZE, FUSION_VOID, _)>
- {
- typedef nil_keyed_element type;
-
- static type call()
- {
- return type();
- }
-
- static type forward_()
- {
- return type();
- }
- };
-
- template<typename N, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
- struct deque_keyed_values_impl
- {
- typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
-
- typedef typename deque_keyed_values_impl<
- next_index,
- BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type tail;
- typedef keyed_element<N, T0, tail> type;
-
-#include <boost/fusion/container/deque/detail/deque_keyed_values_call.hpp>
-
- };
-
- template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)>
- struct deque_keyed_values
- : deque_keyed_values_impl<mpl::int_<0>, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>
- {};
-
-}}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#undef FUSION_VOID
-
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque.hpp
deleted file mode 100644
index f383bea28b..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if FUSION_MAX_DEQUE_SIZE <= 10
-#include <boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 20
-#include <boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 30
-#include <boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 40
-#include <boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 50
-#include <boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp>
-#else
-#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp
deleted file mode 100644
index 709ecf4973..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_deque<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef deque<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_deque<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef deque<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_deque<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef deque<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_deque<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef deque<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_deque<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef deque<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_deque<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_deque<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_deque<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_deque<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_deque<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp
deleted file mode 100644
index 7363f42984..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp
+++ /dev/null
@@ -1,411 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_deque<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef deque<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_deque<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef deque<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_deque<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef deque<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_deque<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef deque<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_deque<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef deque<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_deque<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_deque<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_deque<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_deque<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_deque<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
- template <>
- struct as_deque<11>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
- }
- };
- template <>
- struct as_deque<12>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
- }
- };
- template <>
- struct as_deque<13>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
- }
- };
- template <>
- struct as_deque<14>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
- }
- };
- template <>
- struct as_deque<15>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
- }
- };
- template <>
- struct as_deque<16>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
- }
- };
- template <>
- struct as_deque<17>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
- }
- };
- template <>
- struct as_deque<18>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
- }
- };
- template <>
- struct as_deque<19>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
- }
- };
- template <>
- struct as_deque<20>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp
deleted file mode 100644
index f0c72b0b8b..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp
+++ /dev/null
@@ -1,611 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_deque<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef deque<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_deque<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef deque<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_deque<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef deque<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_deque<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef deque<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_deque<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef deque<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_deque<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_deque<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_deque<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_deque<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_deque<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
- template <>
- struct as_deque<11>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
- }
- };
- template <>
- struct as_deque<12>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
- }
- };
- template <>
- struct as_deque<13>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
- }
- };
- template <>
- struct as_deque<14>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
- }
- };
- template <>
- struct as_deque<15>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
- }
- };
- template <>
- struct as_deque<16>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
- }
- };
- template <>
- struct as_deque<17>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
- }
- };
- template <>
- struct as_deque<18>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
- }
- };
- template <>
- struct as_deque<19>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
- }
- };
- template <>
- struct as_deque<20>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
- }
- };
- template <>
- struct as_deque<21>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
- }
- };
- template <>
- struct as_deque<22>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
- }
- };
- template <>
- struct as_deque<23>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
- }
- };
- template <>
- struct as_deque<24>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
- }
- };
- template <>
- struct as_deque<25>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
- }
- };
- template <>
- struct as_deque<26>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
- }
- };
- template <>
- struct as_deque<27>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
- }
- };
- template <>
- struct as_deque<28>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
- }
- };
- template <>
- struct as_deque<29>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
- }
- };
- template <>
- struct as_deque<30>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp
deleted file mode 100644
index 720db73f40..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp
+++ /dev/null
@@ -1,811 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_deque<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef deque<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_deque<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef deque<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_deque<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef deque<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_deque<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef deque<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_deque<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef deque<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_deque<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_deque<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_deque<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_deque<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_deque<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
- template <>
- struct as_deque<11>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
- }
- };
- template <>
- struct as_deque<12>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
- }
- };
- template <>
- struct as_deque<13>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
- }
- };
- template <>
- struct as_deque<14>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
- }
- };
- template <>
- struct as_deque<15>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
- }
- };
- template <>
- struct as_deque<16>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
- }
- };
- template <>
- struct as_deque<17>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
- }
- };
- template <>
- struct as_deque<18>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
- }
- };
- template <>
- struct as_deque<19>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
- }
- };
- template <>
- struct as_deque<20>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
- }
- };
- template <>
- struct as_deque<21>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
- }
- };
- template <>
- struct as_deque<22>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
- }
- };
- template <>
- struct as_deque<23>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
- }
- };
- template <>
- struct as_deque<24>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
- }
- };
- template <>
- struct as_deque<25>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
- }
- };
- template <>
- struct as_deque<26>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
- }
- };
- template <>
- struct as_deque<27>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
- }
- };
- template <>
- struct as_deque<28>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
- }
- };
- template <>
- struct as_deque<29>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
- }
- };
- template <>
- struct as_deque<30>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
- }
- };
- template <>
- struct as_deque<31>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30);
- }
- };
- template <>
- struct as_deque<32>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31);
- }
- };
- template <>
- struct as_deque<33>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32);
- }
- };
- template <>
- struct as_deque<34>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33);
- }
- };
- template <>
- struct as_deque<35>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34);
- }
- };
- template <>
- struct as_deque<36>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35);
- }
- };
- template <>
- struct as_deque<37>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36);
- }
- };
- template <>
- struct as_deque<38>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37);
- }
- };
- template <>
- struct as_deque<39>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38);
- }
- };
- template <>
- struct as_deque<40>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp
deleted file mode 100644
index e328927e38..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp
+++ /dev/null
@@ -1,1011 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_deque<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef deque<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_deque<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef deque<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_deque<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef deque<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_deque<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef deque<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_deque<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef deque<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_deque<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_deque<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_deque<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_deque<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_deque<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
- template <>
- struct as_deque<11>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
- }
- };
- template <>
- struct as_deque<12>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
- }
- };
- template <>
- struct as_deque<13>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
- }
- };
- template <>
- struct as_deque<14>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
- }
- };
- template <>
- struct as_deque<15>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
- }
- };
- template <>
- struct as_deque<16>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
- }
- };
- template <>
- struct as_deque<17>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
- }
- };
- template <>
- struct as_deque<18>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
- }
- };
- template <>
- struct as_deque<19>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
- }
- };
- template <>
- struct as_deque<20>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
- }
- };
- template <>
- struct as_deque<21>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
- }
- };
- template <>
- struct as_deque<22>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
- }
- };
- template <>
- struct as_deque<23>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
- }
- };
- template <>
- struct as_deque<24>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
- }
- };
- template <>
- struct as_deque<25>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
- }
- };
- template <>
- struct as_deque<26>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
- }
- };
- template <>
- struct as_deque<27>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
- }
- };
- template <>
- struct as_deque<28>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
- }
- };
- template <>
- struct as_deque<29>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
- }
- };
- template <>
- struct as_deque<30>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
- }
- };
- template <>
- struct as_deque<31>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30);
- }
- };
- template <>
- struct as_deque<32>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31);
- }
- };
- template <>
- struct as_deque<33>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32);
- }
- };
- template <>
- struct as_deque<34>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33);
- }
- };
- template <>
- struct as_deque<35>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34);
- }
- };
- template <>
- struct as_deque<36>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35);
- }
- };
- template <>
- struct as_deque<37>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36);
- }
- };
- template <>
- struct as_deque<38>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37);
- }
- };
- template <>
- struct as_deque<39>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38);
- }
- };
- template <>
- struct as_deque<40>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
- }
- };
- template <>
- struct as_deque<41>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40);
- }
- };
- template <>
- struct as_deque<42>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41);
- }
- };
- template <>
- struct as_deque<43>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42);
- }
- };
- template <>
- struct as_deque<44>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43);
- }
- };
- template <>
- struct as_deque<45>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44);
- }
- };
- template <>
- struct as_deque<46>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45);
- }
- };
- template <>
- struct as_deque<47>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46);
- }
- };
- template <>
- struct as_deque<48>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46; typedef typename fusion::result_of::value_of<I47>::type T47;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47);
- }
- };
- template <>
- struct as_deque<49>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48; typedef typename fusion::result_of::next<I48>::type I49;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46; typedef typename fusion::result_of::value_of<I47>::type T47; typedef typename fusion::result_of::value_of<I48>::type T48;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48);
- }
- };
- template <>
- struct as_deque<50>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48; typedef typename fusion::result_of::next<I48>::type I49; typedef typename fusion::result_of::next<I49>::type I50;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46; typedef typename fusion::result_of::value_of<I47>::type T47; typedef typename fusion::result_of::value_of<I48>::type T48; typedef typename fusion::result_of::value_of<I49>::type T49;
- typedef deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); typename gen::I49 i49 = fusion::next(i48);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque.hpp
deleted file mode 100644
index 404d20b748..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if FUSION_MAX_DEQUE_SIZE <= 10
-#include <boost/fusion/container/deque/detail/preprocessed/deque10.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 20
-#include <boost/fusion/container/deque/detail/preprocessed/deque20.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 30
-#include <boost/fusion/container/deque/detail/preprocessed/deque30.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 40
-#include <boost/fusion/container/deque/detail/preprocessed/deque40.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 50
-#include <boost/fusion/container/deque/detail/preprocessed/deque50.hpp>
-#else
-#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10.hpp
deleted file mode 100644
index b981e927dc..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion {
- struct deque_tag;
- template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct deque
- :
- detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type,
- sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> >
- {
- typedef deque_tag fusion_tag;
- typedef bidirectional_traversal_tag category;
- typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type base;
- typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type size;
- typedef mpl::int_<size::value> next_up;
- typedef mpl::int_<
- mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
- typedef mpl::false_ is_view;
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- : base(detail::deque_keyed_values<T0 , T1>::call(t0 , t1))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- : base(detail::deque_keyed_values<T0 , T1 , T2>::call(t0 , t1 , t2))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::call(t0 , t1 , t2 , t3))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::call(t0 , t1 , t2 , t3 , t4))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::call(t0 , t1 , t2 , t3 , t4 , t5))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
-{}
- deque()
- {}
- explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
- : base(t0, detail::nil_keyed_element())
- {}
- template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
- deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& seq)
- : base(seq)
- {}
- template<typename Sequence>
- deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
- : base(base::from_iterator(fusion::begin(seq)))
- {}
- template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
- deque&
- operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- template <typename T>
- deque&
- operator=(T const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- };
-}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20.hpp
deleted file mode 100644
index f70524ae87..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion {
- struct deque_tag;
- template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct deque
- :
- detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type,
- sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> >
- {
- typedef deque_tag fusion_tag;
- typedef bidirectional_traversal_tag category;
- typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type base;
- typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type size;
- typedef mpl::int_<size::value> next_up;
- typedef mpl::int_<
- mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
- typedef mpl::false_ is_view;
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- : base(detail::deque_keyed_values<T0 , T1>::call(t0 , t1))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- : base(detail::deque_keyed_values<T0 , T1 , T2>::call(t0 , t1 , t2))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::call(t0 , t1 , t2 , t3))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::call(t0 , t1 , t2 , t3 , t4))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::call(t0 , t1 , t2 , t3 , t4 , t5))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
-{}
- deque()
- {}
- explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
- : base(t0, detail::nil_keyed_element())
- {}
- template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
- deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& seq)
- : base(seq)
- {}
- template<typename Sequence>
- deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
- : base(base::from_iterator(fusion::begin(seq)))
- {}
- template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
- deque&
- operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- template <typename T>
- deque&
- operator=(T const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- };
-}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30.hpp
deleted file mode 100644
index fd1e7ccdf8..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion {
- struct deque_tag;
- template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct deque
- :
- detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type,
- sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> >
- {
- typedef deque_tag fusion_tag;
- typedef bidirectional_traversal_tag category;
- typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type base;
- typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type size;
- typedef mpl::int_<size::value> next_up;
- typedef mpl::int_<
- mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
- typedef mpl::false_ is_view;
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- : base(detail::deque_keyed_values<T0 , T1>::call(t0 , t1))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- : base(detail::deque_keyed_values<T0 , T1 , T2>::call(t0 , t1 , t2))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::call(t0 , t1 , t2 , t3))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::call(t0 , t1 , t2 , t3 , t4))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::call(t0 , t1 , t2 , t3 , t4 , t5))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29))
-{}
- deque()
- {}
- explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
- : base(t0, detail::nil_keyed_element())
- {}
- template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
- deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& seq)
- : base(seq)
- {}
- template<typename Sequence>
- deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
- : base(base::from_iterator(fusion::begin(seq)))
- {}
- template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
- deque&
- operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- template <typename T>
- deque&
- operator=(T const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- };
-}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40.hpp
deleted file mode 100644
index 5343685acc..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40.hpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion {
- struct deque_tag;
- template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct deque
- :
- detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type,
- sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> >
- {
- typedef deque_tag fusion_tag;
- typedef bidirectional_traversal_tag category;
- typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type base;
- typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type size;
- typedef mpl::int_<size::value> next_up;
- typedef mpl::int_<
- mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
- typedef mpl::false_ is_view;
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- : base(detail::deque_keyed_values<T0 , T1>::call(t0 , t1))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- : base(detail::deque_keyed_values<T0 , T1 , T2>::call(t0 , t1 , t2))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::call(t0 , t1 , t2 , t3))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::call(t0 , t1 , t2 , t3 , t4))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::call(t0 , t1 , t2 , t3 , t4 , t5))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39))
-{}
- deque()
- {}
- explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
- : base(t0, detail::nil_keyed_element())
- {}
- template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
- deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& seq)
- : base(seq)
- {}
- template<typename Sequence>
- deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
- : base(base::from_iterator(fusion::begin(seq)))
- {}
- template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
- deque&
- operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- template <typename T>
- deque&
- operator=(T const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- };
-}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50.hpp
deleted file mode 100644
index fc7d6b164f..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50.hpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion {
- struct deque_tag;
- template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct deque
- :
- detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type,
- sequence_base<deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> >
- {
- typedef deque_tag fusion_tag;
- typedef bidirectional_traversal_tag category;
- typedef typename detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type base;
- typedef typename detail::deque_initial_size<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type size;
- typedef mpl::int_<size::value> next_up;
- typedef mpl::int_<
- mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
- typedef mpl::false_ is_view;
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- : base(detail::deque_keyed_values<T0 , T1>::call(t0 , t1))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- : base(detail::deque_keyed_values<T0 , T1 , T2>::call(t0 , t1 , t2))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3>::call(t0 , t1 , t2 , t3))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4>::call(t0 , t1 , t2 , t3 , t4))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5>::call(t0 , t1 , t2 , t3 , t4 , t5))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47 , typename add_reference<typename add_const<T48 >::type>::type t48)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48))
-{}
-deque(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47 , typename add_reference<typename add_const<T48 >::type>::type t48 , typename add_reference<typename add_const<T49 >::type>::type t49)
- : base(detail::deque_keyed_values<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48 , t49))
-{}
- deque()
- {}
- explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
- : base(t0, detail::nil_keyed_element())
- {}
- template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
- deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& seq)
- : base(seq)
- {}
- template<typename Sequence>
- deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
- : base(base::from_iterator(fusion::begin(seq)))
- {}
- template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
- deque&
- operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- template <typename T>
- deque&
- operator=(T const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
- };
-}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp
deleted file mode 100644
index a0b75b7c4d..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if FUSION_MAX_DEQUE_SIZE <= 10
-#include <boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 20
-#include <boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 30
-#include <boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 40
-#include <boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 50
-#include <boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp>
-#else
-#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp
deleted file mode 100644
index a26dfdb26c..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if FUSION_MAX_DEQUE_SIZE <= 10
-#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size10.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 20
-#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size20.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 30
-#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size30.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 40
-#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size40.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 50
-#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size50.hpp>
-#else
-#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp
deleted file mode 100644
index 2460dda59d..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if FUSION_MAX_DEQUE_SIZE <= 10
-#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 20
-#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 30
-#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 40
-#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp>
-#elif FUSION_MAX_DEQUE_SIZE <= 50
-#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp>
-#else
-#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp
deleted file mode 100644
index 904c48c62d..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template<typename Key, typename Value, typename Rest>
- struct keyed_element;
- struct nil_keyed_element;
- template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_>
- struct deque_keyed_values_impl;
- template<typename N>
- struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
- {
- typedef nil_keyed_element type;
- static type call()
- {
- return type();
- }
- };
- template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct deque_keyed_values_impl
- {
- typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
- typedef typename deque_keyed_values_impl<
- next_index,
- T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type tail;
- typedef keyed_element<N, T0, tail> type;
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- >::call());
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1
- >::call(t1));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2
- >::call(t1 , t2));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3
- >::call(t1 , t2 , t3));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4
- >::call(t1 , t2 , t3 , t4));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5
- >::call(t1 , t2 , t3 , t4 , t5));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6
- >::call(t1 , t2 , t3 , t4 , t5 , t6));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
- }
- };
- template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_>
- struct deque_keyed_values
- : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
- {};
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp
deleted file mode 100644
index 391b2809a7..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp
+++ /dev/null
@@ -1,197 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template<typename Key, typename Value, typename Rest>
- struct keyed_element;
- struct nil_keyed_element;
- template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_>
- struct deque_keyed_values_impl;
- template<typename N>
- struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
- {
- typedef nil_keyed_element type;
- static type call()
- {
- return type();
- }
- };
- template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct deque_keyed_values_impl
- {
- typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
- typedef typename deque_keyed_values_impl<
- next_index,
- T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type tail;
- typedef keyed_element<N, T0, tail> type;
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- >::call());
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1
- >::call(t1));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2
- >::call(t1 , t2));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3
- >::call(t1 , t2 , t3));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4
- >::call(t1 , t2 , t3 , t4));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5
- >::call(t1 , t2 , t3 , t4 , t5));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6
- >::call(t1 , t2 , t3 , t4 , t5 , t6));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19));
- }
- };
- template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_>
- struct deque_keyed_values
- : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
- {};
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp
deleted file mode 100644
index 9ae6bf6110..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp
+++ /dev/null
@@ -1,277 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template<typename Key, typename Value, typename Rest>
- struct keyed_element;
- struct nil_keyed_element;
- template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_>
- struct deque_keyed_values_impl;
- template<typename N>
- struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
- {
- typedef nil_keyed_element type;
- static type call()
- {
- return type();
- }
- };
- template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct deque_keyed_values_impl
- {
- typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
- typedef typename deque_keyed_values_impl<
- next_index,
- T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type tail;
- typedef keyed_element<N, T0, tail> type;
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- >::call());
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1
- >::call(t1));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2
- >::call(t1 , t2));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3
- >::call(t1 , t2 , t3));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4
- >::call(t1 , t2 , t3 , t4));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5
- >::call(t1 , t2 , t3 , t4 , t5));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6
- >::call(t1 , t2 , t3 , t4 , t5 , t6));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29));
- }
- };
- template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_>
- struct deque_keyed_values
- : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
- {};
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp
deleted file mode 100644
index 8b427aee1a..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp
+++ /dev/null
@@ -1,357 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template<typename Key, typename Value, typename Rest>
- struct keyed_element;
- struct nil_keyed_element;
- template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_>
- struct deque_keyed_values_impl;
- template<typename N>
- struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
- {
- typedef nil_keyed_element type;
- static type call()
- {
- return type();
- }
- };
- template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct deque_keyed_values_impl
- {
- typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
- typedef typename deque_keyed_values_impl<
- next_index,
- T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type tail;
- typedef keyed_element<N, T0, tail> type;
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- >::call());
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1
- >::call(t1));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2
- >::call(t1 , t2));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3
- >::call(t1 , t2 , t3));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4
- >::call(t1 , t2 , t3 , t4));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5
- >::call(t1 , t2 , t3 , t4 , t5));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6
- >::call(t1 , t2 , t3 , t4 , t5 , t6));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39));
- }
- };
- template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_>
- struct deque_keyed_values
- : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
- {};
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp
deleted file mode 100644
index 730ee2f12b..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp
+++ /dev/null
@@ -1,437 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template<typename Key, typename Value, typename Rest>
- struct keyed_element;
- struct nil_keyed_element;
- template<typename N, typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_>
- struct deque_keyed_values_impl;
- template<typename N>
- struct deque_keyed_values_impl<N, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
- {
- typedef nil_keyed_element type;
- static type call()
- {
- return type();
- }
- };
- template<typename N, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct deque_keyed_values_impl
- {
- typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
- typedef typename deque_keyed_values_impl<
- next_index,
- T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type tail;
- typedef keyed_element<N, T0, tail> type;
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- >::call());
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1
- >::call(t1));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2
- >::call(t1 , t2));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3
- >::call(t1 , t2 , t3));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4
- >::call(t1 , t2 , t3 , t4));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5
- >::call(t1 , t2 , t3 , t4 , t5));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6
- >::call(t1 , t2 , t3 , t4 , t5 , t6));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47 , typename add_reference<typename add_const<T48 >::type>::type t48)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48));
- }
- static type call(typename add_reference<typename add_const<T0 >::type>::type t0 , typename add_reference<typename add_const<T1 >::type>::type t1 , typename add_reference<typename add_const<T2 >::type>::type t2 , typename add_reference<typename add_const<T3 >::type>::type t3 , typename add_reference<typename add_const<T4 >::type>::type t4 , typename add_reference<typename add_const<T5 >::type>::type t5 , typename add_reference<typename add_const<T6 >::type>::type t6 , typename add_reference<typename add_const<T7 >::type>::type t7 , typename add_reference<typename add_const<T8 >::type>::type t8 , typename add_reference<typename add_const<T9 >::type>::type t9 , typename add_reference<typename add_const<T10 >::type>::type t10 , typename add_reference<typename add_const<T11 >::type>::type t11 , typename add_reference<typename add_const<T12 >::type>::type t12 , typename add_reference<typename add_const<T13 >::type>::type t13 , typename add_reference<typename add_const<T14 >::type>::type t14 , typename add_reference<typename add_const<T15 >::type>::type t15 , typename add_reference<typename add_const<T16 >::type>::type t16 , typename add_reference<typename add_const<T17 >::type>::type t17 , typename add_reference<typename add_const<T18 >::type>::type t18 , typename add_reference<typename add_const<T19 >::type>::type t19 , typename add_reference<typename add_const<T20 >::type>::type t20 , typename add_reference<typename add_const<T21 >::type>::type t21 , typename add_reference<typename add_const<T22 >::type>::type t22 , typename add_reference<typename add_const<T23 >::type>::type t23 , typename add_reference<typename add_const<T24 >::type>::type t24 , typename add_reference<typename add_const<T25 >::type>::type t25 , typename add_reference<typename add_const<T26 >::type>::type t26 , typename add_reference<typename add_const<T27 >::type>::type t27 , typename add_reference<typename add_const<T28 >::type>::type t28 , typename add_reference<typename add_const<T29 >::type>::type t29 , typename add_reference<typename add_const<T30 >::type>::type t30 , typename add_reference<typename add_const<T31 >::type>::type t31 , typename add_reference<typename add_const<T32 >::type>::type t32 , typename add_reference<typename add_const<T33 >::type>::type t33 , typename add_reference<typename add_const<T34 >::type>::type t34 , typename add_reference<typename add_const<T35 >::type>::type t35 , typename add_reference<typename add_const<T36 >::type>::type t36 , typename add_reference<typename add_const<T37 >::type>::type t37 , typename add_reference<typename add_const<T38 >::type>::type t38 , typename add_reference<typename add_const<T39 >::type>::type t39 , typename add_reference<typename add_const<T40 >::type>::type t40 , typename add_reference<typename add_const<T41 >::type>::type t41 , typename add_reference<typename add_const<T42 >::type>::type t42 , typename add_reference<typename add_const<T43 >::type>::type t43 , typename add_reference<typename add_const<T44 >::type>::type t44 , typename add_reference<typename add_const<T45 >::type>::type t45 , typename add_reference<typename add_const<T46 >::type>::type t46 , typename add_reference<typename add_const<T47 >::type>::type t47 , typename add_reference<typename add_const<T48 >::type>::type t48 , typename add_reference<typename add_const<T49 >::type>::type t49)
- {
- return type(t0,
- deque_keyed_values_impl<
- next_index
- , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49
- >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48 , t49));
- }
- };
- template<typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_>
- struct deque_keyed_values
- : deque_keyed_values_impl<mpl::int_<0>, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
- {};
-}}}
diff --git a/3party/boost/boost/fusion/container/deque/detail/value_at_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/value_at_impl.hpp
index cba31a3e0a..f15dee01f8 100644
--- a/3party/boost/boost/fusion/container/deque/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/container/deque/detail/value_at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_DEQUE_VALUE_AT_IMPL_08122006_0756)
#define BOOST_FUSION_DEQUE_VALUE_AT_IMPL_08122006_0756
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
#include <boost/mpl/equal_to.hpp>
diff --git a/3party/boost/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp
deleted file mode 100644
index aae26a5b3c..0000000000
--- a/3party/boost/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- 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_FUSION_DEQUE_DETAIL_CPP11_DEQUE_KEYED_VALUES_07042012_1901)
-#define BOOST_FUSION_DEQUE_DETAIL_CPP11_DEQUE_KEYED_VALUES_07042012_1901
-
-#include <boost/fusion/container/deque/detail/keyed_element.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/mpl/int.hpp>
-
-namespace boost { namespace fusion { namespace detail
-{
- template<typename Key, typename Value, typename Rest>
- struct keyed_element;
-
- template <typename N, typename ...Elements>
- struct deque_keyed_values_impl;
-
- template <typename N, typename Head, typename ...Tail>
- struct deque_keyed_values_impl<N, Head, Tail...>
- {
- typedef mpl::int_<(N::value + 1)> next_index;
- typedef typename deque_keyed_values_impl<next_index, Tail...>::type tail;
- typedef keyed_element<N, Head, tail> type;
-
- static type construct(
- typename detail::call_param<Head>::type head
- , typename detail::call_param<Tail>::type... tail)
- {
- return type(
- head
- , deque_keyed_values_impl<next_index, Tail...>::construct(tail...)
- );
- }
-
- template <typename Head_, typename ...Tail_>
- static type forward_(Head_&& head, Tail_&&... tail)
- {
- return type(
- std::forward<Head_>(head)
- , deque_keyed_values_impl<next_index, Tail_...>::
- forward_(std::forward<Tail_>(tail)...)
- );
- }
- };
-
- struct nil_keyed_element;
-
- template <typename N>
- struct deque_keyed_values_impl<N>
- {
- typedef nil_keyed_element type;
- static type construct() { return type(); }
- static type forward_() { return type(); }
- };
-
- template <typename ...Elements>
- struct deque_keyed_values
- : deque_keyed_values_impl<mpl::int_<0>, Elements...> {};
-}}}
-
-#endif
diff --git a/3party/boost/boost/fusion/container/deque/front_extended_deque.hpp b/3party/boost/boost/fusion/container/deque/front_extended_deque.hpp
index 2f3654ede2..31336f31d6 100644
--- a/3party/boost/boost/fusion/container/deque/front_extended_deque.hpp
+++ b/3party/boost/boost/fusion/container/deque/front_extended_deque.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_FRONT_EXTENDED_DEQUE_26112006_2209)
#define BOOST_FUSION_FRONT_EXTENDED_DEQUE_26112006_2209
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -26,17 +27,20 @@ namespace boost { namespace fusion
typedef mpl::int_<(result_of::size<Deque>::value + 1)> size;
template <typename Arg>
+ BOOST_FUSION_GPU_ENABLED
front_extended_deque(Deque const& deque, Arg const& val)
: base(val, deque)
{}
-#if defined(BOOST_NO_RVALUE_REFERENCES)
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename Arg>
+ BOOST_FUSION_GPU_ENABLED
front_extended_deque(Deque const& deque, Arg& val)
: base(val, deque)
{}
#else
template <typename Arg>
+ BOOST_FUSION_GPU_ENABLED
front_extended_deque(Deque const& deque, Arg&& val)
: base(std::forward<Arg>(val), deque)
{}
diff --git a/3party/boost/boost/fusion/container/generation.hpp b/3party/boost/boost/fusion/container/generation.hpp
index 49d45757a5..98e0298b4a 100644
--- a/3party/boost/boost/fusion/container/generation.hpp
+++ b/3party/boost/boost/fusion/container/generation.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_GENERATION_10022005_0615)
#define FUSION_SEQUENCE_GENERATION_10022005_0615
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/make_deque.hpp>
#include <boost/fusion/container/generation/deque_tie.hpp>
#include <boost/fusion/container/generation/cons_tie.hpp>
diff --git a/3party/boost/boost/fusion/container/generation/cons_tie.hpp b/3party/boost/boost/fusion/container/generation/cons_tie.hpp
index 4459e0c37a..5987fd5f26 100644
--- a/3party/boost/boost/fusion/container/generation/cons_tie.hpp
+++ b/3party/boost/boost/fusion/container/generation/cons_tie.hpp
@@ -7,15 +7,16 @@
#if !defined(FUSION_CONS_TIE_07182005_0854)
#define FUSION_CONS_TIE_07182005_0854
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/cons.hpp>
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
namespace result_of
{
- template <typename Car, typename Cdr = nil>
+ template <typename Car, typename Cdr = nil_>
struct cons_tie
{
typedef cons<Car&, Cdr> type;
@@ -24,6 +25,7 @@ namespace boost { namespace fusion
// $$$ do we really want a cons_tie? $$$
template <typename Car>
+ BOOST_FUSION_GPU_ENABLED
inline cons<Car&>
cons_tie(Car& car)
{
@@ -32,6 +34,7 @@ namespace boost { namespace fusion
// $$$ do we really want a cons_tie? $$$
template <typename Car, typename Cdr>
+ BOOST_FUSION_GPU_ENABLED
inline cons<Car&, Cdr>
cons_tie(Car& car, Cdr const& cdr)
{
diff --git a/3party/boost/boost/fusion/container/generation/deque_tie.hpp b/3party/boost/boost/fusion/container/generation/deque_tie.hpp
index ea0afb92c9..727d984fe4 100644
--- a/3party/boost/boost/fusion/container/generation/deque_tie.hpp
+++ b/3party/boost/boost/fusion/container/generation/deque_tie.hpp
@@ -1,41 +1,24 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Copyright (c) 2006 Dan Marsden
+ Copyright (c) 2001-2013 Joel de Guzman
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_PP_IS_ITERATING
-#if !defined(FUSION_DEQUE_TIE_07192005_1242)
-#define FUSION_DEQUE_TIE_07192005_1242
+#if !defined(FUSION_DEQUE_TIE_01272013_1401)
+#define FUSION_DEQUE_TIE_01272013_1401
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque/deque.hpp>
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp>
+#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+# include <boost/fusion/container/generation/detail/pp_deque_tie.hpp>
#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque_tie" FUSION_MAX_DEQUE_SIZE_STR".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
- This is an auto-generated file. Do not edit!
-==============================================================================*/
+///////////////////////////////////////////////////////////////////////////////
+// C++11 variadic interface
+///////////////////////////////////////////////////////////////////////////////
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
namespace boost { namespace fusion
{
@@ -43,63 +26,22 @@ namespace boost { namespace fusion
namespace result_of
{
- template <
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- FUSION_MAX_DEQUE_SIZE, typename T, void_)
- , typename Extra = void_
- >
- struct deque_tie;
- }
-
-#define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)&
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/deque_tie.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_REF
-
-}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
- namespace result_of
- {
- template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
- #define TEXT(z, n, text) , text
- struct deque_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
- #undef TEXT
-#else
- struct deque_tie<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
+ template <typename ...T>
+ struct deque_tie
{
- typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
+ typedef deque<T&...> type;
};
}
- template <BOOST_PP_ENUM_PARAMS(N, typename T)>
- inline deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
- deque_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
+ template <typename ...T>
+ BOOST_FUSION_GPU_ENABLED
+ inline deque<T&...>
+ deque_tie(T&... arg)
{
- return deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>(
- BOOST_PP_ENUM_PARAMS(N, _));
+ return deque<T&...>(arg...);
}
+ }}
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
+#endif
+#endif
diff --git a/3party/boost/boost/fusion/container/generation/detail/pp_deque_tie.hpp b/3party/boost/boost/fusion/container/generation/detail/pp_deque_tie.hpp
new file mode 100644
index 0000000000..c3d7fc680e
--- /dev/null
+++ b/3party/boost/boost/fusion/container/generation/detail/pp_deque_tie.hpp
@@ -0,0 +1,102 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+
+ 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_PP_IS_ITERATING
+#if !defined(FUSION_PP_DEQUE_TIE_07192005_1242)
+#define FUSION_PP_DEQUE_TIE_07192005_1242
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/container/deque/deque.hpp>
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_tie" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion
+{
+ struct void_;
+
+ namespace result_of
+ {
+ template <
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+ FUSION_MAX_DEQUE_SIZE, typename T, void_)
+ , typename Extra = void_
+ >
+ struct deque_tie;
+ }
+
+#define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)&
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_deque_tie.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_REF
+
+}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+// Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+ namespace result_of
+ {
+ template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ #define TEXT(z, n, text) , text
+ struct deque_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
+ #undef TEXT
+ {
+ typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
+ };
+ }
+
+ template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ BOOST_FUSION_GPU_ENABLED
+ inline deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
+ deque_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
+ {
+ return deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>(
+ BOOST_PP_ENUM_PARAMS(N, _));
+ }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3party/boost/boost/fusion/container/generation/detail/pp_make_deque.hpp b/3party/boost/boost/fusion/container/generation/detail/pp_make_deque.hpp
new file mode 100644
index 0000000000..843ae7597a
--- /dev/null
+++ b/3party/boost/boost/fusion/container/generation/detail/pp_make_deque.hpp
@@ -0,0 +1,118 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+
+ 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_PP_IS_ITERATING
+#if !defined(FUSION_PP_MAKE_DEQUE_07162005_0243)
+#define FUSION_MAKE_PP_DEQUE_07162005_0243
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/container/deque/deque.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/generation/detail/preprocessed/make_deque.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/make_deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion
+{
+ struct void_;
+
+ namespace result_of
+ {
+ template <
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+ FUSION_MAX_DEQUE_SIZE, typename T, void_)
+ , typename Extra = void_
+ >
+ struct make_deque;
+
+ template <>
+ struct make_deque<>
+ {
+ typedef deque<> type;
+ };
+ }
+
+ BOOST_FUSION_GPU_ENABLED inline deque<>
+ make_deque()
+ {
+ return deque<>();
+ }
+
+#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \
+ typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
+
+#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \
+ typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_make_deque.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_AS_FUSION_ELEMENT
+
+}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+// Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+ namespace result_of
+ {
+ template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ #define TEXT(z, n, text) , text
+ struct make_deque< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
+ #undef TEXT
+ {
+ typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
+ };
+ }
+
+ template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ BOOST_FUSION_GPU_ENABLED
+ inline deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
+ make_deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
+ {
+ return deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
+ BOOST_PP_ENUM_PARAMS(N, _));
+ }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3party/boost/boost/fusion/container/generation/detail/pp_make_map.hpp b/3party/boost/boost/fusion/container/generation/detail/pp_make_map.hpp
new file mode 100644
index 0000000000..062d3ac7e7
--- /dev/null
+++ b/3party/boost/boost/fusion/container/generation/detail/pp_make_map.hpp
@@ -0,0 +1,129 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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_PP_IS_ITERATING
+#if !defined(FUSION_PP_MAKE_MAP_07222005_1247)
+#define FUSION_PP_MAKE_MAP_07222005_1247
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/container/map/map.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/support/pair.hpp>
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/generation/detail/preprocessed/make_map.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/make_map" FUSION_MAX_MAP_SIZE_STR".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion
+{
+ struct void_;
+
+ namespace result_of
+ {
+ template <
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+ FUSION_MAX_VECTOR_SIZE, typename K, void_)
+ , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+ FUSION_MAX_VECTOR_SIZE, typename D, void_)
+ , typename Extra = void_
+ >
+ struct make_map;
+
+ template <>
+ struct make_map<>
+ {
+ typedef map<> type;
+ };
+ }
+
+ BOOST_FUSION_GPU_ENABLED inline map<>
+ make_map()
+ {
+ return map<>();
+ }
+
+#define BOOST_FUSION_PAIR(z, n, data) \
+ fusion::pair< \
+ BOOST_PP_CAT(K, n) \
+ , typename detail::as_fusion_element<BOOST_PP_CAT(D, n)>::type>
+
+#define BOOST_FUSION_MAKE_PAIR(z, n, data) \
+ fusion::make_pair<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n)) \
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_make_map.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_PAIR
+#undef BOOST_FUSION_MAKE_PAIR
+
+}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+// Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+ namespace result_of
+ {
+ template <
+ BOOST_PP_ENUM_PARAMS(N, typename K)
+ , BOOST_PP_ENUM_PARAMS(N, typename D)
+ >
+ #define TEXT(z, n, text) , text
+ struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_VECTOR_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_)>
+ #undef TEXT
+ {
+ typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)> type;
+ };
+ }
+
+ template <
+ BOOST_PP_ENUM_PARAMS(N, typename K)
+ , BOOST_PP_ENUM_PARAMS(N, typename D)
+ >
+ BOOST_FUSION_GPU_ENABLED
+ inline map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>
+ make_map(BOOST_PP_ENUM_BINARY_PARAMS(N, D, const& _))
+ {
+ return map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>(
+ BOOST_PP_ENUM(N, BOOST_FUSION_MAKE_PAIR, _));
+ }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3party/boost/boost/fusion/container/generation/detail/pp_map_tie.hpp b/3party/boost/boost/fusion/container/generation/detail/pp_map_tie.hpp
new file mode 100644
index 0000000000..fc8d8ce60c
--- /dev/null
+++ b/3party/boost/boost/fusion/container/generation/detail/pp_map_tie.hpp
@@ -0,0 +1,132 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+
+ 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_PP_IS_ITERATING
+#if !defined(FUSION_PP_MAP_TIE_20060814_1116)
+#define FUSION_PP_MAP_TIE_20060814_1116
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/container/map/map.hpp>
+#include <boost/fusion/container/map/detail/cpp03/limits.hpp>
+#include <boost/fusion/support/pair.hpp>
+#include <boost/fusion/container/generation/pair_tie.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/generation/detail/preprocessed/map_tie.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/map_tie" FUSION_MAX_MAP_SIZE_STR".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion
+{
+ struct void_;
+
+ namespace result_of
+ {
+ template <
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+ FUSION_MAX_MAP_SIZE, typename K, void_)
+ , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+ FUSION_MAX_MAP_SIZE, typename D, void_)
+ , typename Extra = void_
+ >
+ struct map_tie;
+
+ template <>
+ struct map_tie<>
+ {
+ typedef map<> type;
+ };
+ }
+
+ BOOST_FUSION_GPU_ENABLED inline map<>
+ map_tie()
+ {
+ return map<>();
+ }
+
+#define BOOST_FUSION_TIED_PAIR(z, n, data) \
+ fusion::pair< \
+ BOOST_PP_CAT(K, n) \
+ , typename add_reference<BOOST_PP_CAT(D, n)>::type>
+
+#define BOOST_FUSION_PAIR_TIE(z, n, data) \
+ fusion::pair_tie<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n)) \
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_map_tie.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_PAIR
+#undef BOOST_FUSION_MAKE_PAIR
+
+}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+// Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+ namespace result_of
+ {
+ template <
+ BOOST_PP_ENUM_PARAMS(N, typename K)
+ , BOOST_PP_ENUM_PARAMS(N, typename D)
+ >
+ #define TEXT(z, n, text) , text
+ struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_MAP_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_MAP_SIZE, TEXT, void_)>
+ #undef TEXT
+ {
+ typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)> type;
+ };
+ }
+
+ template <
+ BOOST_PP_ENUM_PARAMS(N, typename K)
+ , BOOST_PP_ENUM_PARAMS(N, typename D)
+ >
+ BOOST_FUSION_GPU_ENABLED
+ inline map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>
+ map_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, D, & _))
+ {
+ return map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>(
+ BOOST_PP_ENUM(N, BOOST_FUSION_PAIR_TIE, _));
+ }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp
index 0fa5e8017a..4d73f24218 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct deque_tie<T0>
+ struct deque_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0&>
deque_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct deque_tie<T0 , T1>
+ struct deque_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1&>
deque_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct deque_tie<T0 , T1 , T2>
+ struct deque_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct deque_tie<T0 , T1 , T2 , T3>
+ struct deque_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct deque_tie<T0 , T1 , T2 , T3 , T4>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp
index 5002a2899d..81e30cc2e2 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct deque_tie<T0>
+ struct deque_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0&>
deque_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct deque_tie<T0 , T1>
+ struct deque_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1&>
deque_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct deque_tie<T0 , T1 , T2>
+ struct deque_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct deque_tie<T0 , T1 , T2 , T3>
+ struct deque_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct deque_tie<T0 , T1 , T2 , T3 , T4>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp
index 5d59f65743..08015e7d20 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct deque_tie<T0>
+ struct deque_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0&>
deque_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct deque_tie<T0 , T1>
+ struct deque_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1&>
deque_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct deque_tie<T0 , T1 , T2>
+ struct deque_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct deque_tie<T0 , T1 , T2 , T3>
+ struct deque_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct deque_tie<T0 , T1 , T2 , T3 , T4>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -320,12 +340,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -335,12 +356,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -350,12 +372,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -365,12 +388,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -380,12 +404,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -395,12 +420,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -410,12 +436,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -425,12 +452,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -440,12 +468,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -455,12 +484,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp
index 7701834a78..39a1a7e514 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct deque_tie<T0>
+ struct deque_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0&>
deque_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct deque_tie<T0 , T1>
+ struct deque_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1&>
deque_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct deque_tie<T0 , T1 , T2>
+ struct deque_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct deque_tie<T0 , T1 , T2 , T3>
+ struct deque_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct deque_tie<T0 , T1 , T2 , T3 , T4>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -320,12 +340,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -335,12 +356,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -350,12 +372,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -365,12 +388,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -380,12 +404,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -395,12 +420,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -410,12 +436,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -425,12 +452,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -440,12 +468,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -455,12 +484,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
@@ -470,12 +500,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30)
{
@@ -485,12 +516,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31)
{
@@ -500,12 +532,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32)
{
@@ -515,12 +548,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33)
{
@@ -530,12 +564,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34)
{
@@ -545,12 +580,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35)
{
@@ -560,12 +596,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36)
{
@@ -575,12 +612,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37)
{
@@ -590,12 +628,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38)
{
@@ -605,12 +644,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp
index ccc36c89b7..4a84f5ce6c 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct deque_tie<T0>
+ struct deque_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0&>
deque_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct deque_tie<T0 , T1>
+ struct deque_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1&>
deque_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct deque_tie<T0 , T1 , T2>
+ struct deque_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct deque_tie<T0 , T1 , T2 , T3>
+ struct deque_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct deque_tie<T0 , T1 , T2 , T3 , T4>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -320,12 +340,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -335,12 +356,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -350,12 +372,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -365,12 +388,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -380,12 +404,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -395,12 +420,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -410,12 +436,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -425,12 +452,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -440,12 +468,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -455,12 +484,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
@@ -470,12 +500,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30)
{
@@ -485,12 +516,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31)
{
@@ -500,12 +532,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32)
{
@@ -515,12 +548,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33)
{
@@ -530,12 +564,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34)
{
@@ -545,12 +580,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35)
{
@@ -560,12 +596,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36)
{
@@ -575,12 +612,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37)
{
@@ -590,12 +628,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38)
{
@@ -605,12 +644,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39)
{
@@ -620,12 +660,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40)
{
@@ -635,12 +676,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41)
{
@@ -650,12 +692,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42)
{
@@ -665,12 +708,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43)
{
@@ -680,12 +724,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44)
{
@@ -695,12 +740,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45)
{
@@ -710,12 +756,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , void_ , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46)
{
@@ -725,12 +772,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , void_ , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47)
{
@@ -740,12 +788,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , void_ , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48)
{
@@ -755,12 +804,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct deque_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
+ struct deque_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 , void_ >
{
typedef deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48& , T49&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline deque<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48& , T49&>
deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48 , T49 & _49)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp
index c68e7396b0..50233aa3aa 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct list_tie<T0>
+ struct list_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0&>
list_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct list_tie<T0 , T1>
+ struct list_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1&>
list_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct list_tie<T0 , T1 , T2>
+ struct list_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct list_tie<T0 , T1 , T2 , T3>
+ struct list_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct list_tie<T0 , T1 , T2 , T3 , T4>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp
index bef1cbb4c8..b969fa1457 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct list_tie<T0>
+ struct list_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0&>
list_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct list_tie<T0 , T1>
+ struct list_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1&>
list_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct list_tie<T0 , T1 , T2>
+ struct list_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct list_tie<T0 , T1 , T2 , T3>
+ struct list_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct list_tie<T0 , T1 , T2 , T3 , T4>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp
index d7d72361b7..0ccfd9c226 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct list_tie<T0>
+ struct list_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0&>
list_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct list_tie<T0 , T1>
+ struct list_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1&>
list_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct list_tie<T0 , T1 , T2>
+ struct list_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct list_tie<T0 , T1 , T2 , T3>
+ struct list_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct list_tie<T0 , T1 , T2 , T3 , T4>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -320,12 +340,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -335,12 +356,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -350,12 +372,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -365,12 +388,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -380,12 +404,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -395,12 +420,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -410,12 +436,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -425,12 +452,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -440,12 +468,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -455,12 +484,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp
index 159e7c3e69..9721eb95b6 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct list_tie<T0>
+ struct list_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0&>
list_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct list_tie<T0 , T1>
+ struct list_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1&>
list_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct list_tie<T0 , T1 , T2>
+ struct list_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct list_tie<T0 , T1 , T2 , T3>
+ struct list_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct list_tie<T0 , T1 , T2 , T3 , T4>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -320,12 +340,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -335,12 +356,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -350,12 +372,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -365,12 +388,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -380,12 +404,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -395,12 +420,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -410,12 +436,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -425,12 +452,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -440,12 +468,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -455,12 +484,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
@@ -470,12 +500,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30)
{
@@ -485,12 +516,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31)
{
@@ -500,12 +532,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32)
{
@@ -515,12 +548,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33)
{
@@ -530,12 +564,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34)
{
@@ -545,12 +580,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35)
{
@@ -560,12 +596,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36)
{
@@ -575,12 +612,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37)
{
@@ -590,12 +628,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38)
{
@@ -605,12 +644,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp
index 1890ba6aed..91217e1e99 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct list_tie<T0>
+ struct list_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0&>
list_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct list_tie<T0 , T1>
+ struct list_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1&>
list_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct list_tie<T0 , T1 , T2>
+ struct list_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct list_tie<T0 , T1 , T2 , T3>
+ struct list_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct list_tie<T0 , T1 , T2 , T3 , T4>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -320,12 +340,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -335,12 +356,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -350,12 +372,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -365,12 +388,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -380,12 +404,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -395,12 +420,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -410,12 +436,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -425,12 +452,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -440,12 +468,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -455,12 +484,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
@@ -470,12 +500,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30)
{
@@ -485,12 +516,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31)
{
@@ -500,12 +532,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32)
{
@@ -515,12 +548,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33)
{
@@ -530,12 +564,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34)
{
@@ -545,12 +580,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35)
{
@@ -560,12 +596,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36)
{
@@ -575,12 +612,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37)
{
@@ -590,12 +628,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38)
{
@@ -605,12 +644,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39)
{
@@ -620,12 +660,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40)
{
@@ -635,12 +676,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41)
{
@@ -650,12 +692,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42)
{
@@ -665,12 +708,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43)
{
@@ -680,12 +724,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44)
{
@@ -695,12 +740,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45)
{
@@ -710,12 +756,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , void_ , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46)
{
@@ -725,12 +772,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , void_ , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47)
{
@@ -740,12 +788,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , void_ , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48)
{
@@ -755,12 +804,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct list_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
+ struct list_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 , void_ >
{
typedef list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48& , T49&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline list<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48& , T49&>
list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48 , T49 & _49)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp
index 336061aad0..44f8963249 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef deque<> type;
};
}
- inline deque<>
+ BOOST_FUSION_GPU_ENABLED inline deque<>
make_deque()
{
return deque<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_deque<T0>
+ struct make_deque< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type>
make_deque(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_deque<T0 , T1>
+ struct make_deque< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_deque(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_deque<T0 , T1 , T2>
+ struct make_deque< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_deque<T0 , T1 , T2 , T3>
+ struct make_deque< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_deque<T0 , T1 , T2 , T3 , T4>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp
index f2568cda0f..693e1a59b0 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef deque<> type;
};
}
- inline deque<>
+ BOOST_FUSION_GPU_ENABLED inline deque<>
make_deque()
{
return deque<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_deque<T0>
+ struct make_deque< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type>
make_deque(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_deque<T0 , T1>
+ struct make_deque< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_deque(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_deque<T0 , T1 , T2>
+ struct make_deque< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_deque<T0 , T1 , T2 , T3>
+ struct make_deque< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_deque<T0 , T1 , T2 , T3 , T4>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp
index e403f52693..c2e7871519 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef deque<> type;
};
}
- inline deque<>
+ BOOST_FUSION_GPU_ENABLED inline deque<>
make_deque()
{
return deque<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_deque<T0>
+ struct make_deque< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type>
make_deque(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_deque<T0 , T1>
+ struct make_deque< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_deque(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_deque<T0 , T1 , T2>
+ struct make_deque< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_deque<T0 , T1 , T2 , T3>
+ struct make_deque< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_deque<T0 , T1 , T2 , T3 , T4>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp
index 0033770b1d..a85aa36814 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef deque<> type;
};
}
- inline deque<>
+ BOOST_FUSION_GPU_ENABLED inline deque<>
make_deque()
{
return deque<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_deque<T0>
+ struct make_deque< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type>
make_deque(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_deque<T0 , T1>
+ struct make_deque< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_deque(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_deque<T0 , T1 , T2>
+ struct make_deque< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_deque<T0 , T1 , T2 , T3>
+ struct make_deque< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_deque<T0 , T1 , T2 , T3 , T4>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -480,12 +510,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -495,12 +526,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -510,12 +542,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -525,12 +558,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -540,12 +574,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -555,12 +590,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -570,12 +606,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -585,12 +622,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -600,12 +638,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -615,12 +654,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp
index 4bb5e1bb10..2a83a1452b 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef deque<> type;
};
}
- inline deque<>
+ BOOST_FUSION_GPU_ENABLED inline deque<>
make_deque()
{
return deque<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_deque<T0>
+ struct make_deque< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type>
make_deque(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_deque<T0 , T1>
+ struct make_deque< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_deque(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_deque<T0 , T1 , T2>
+ struct make_deque< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_deque<T0 , T1 , T2 , T3>
+ struct make_deque< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_deque<T0 , T1 , T2 , T3 , T4>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -480,12 +510,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -495,12 +526,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -510,12 +542,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -525,12 +558,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -540,12 +574,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -555,12 +590,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -570,12 +606,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -585,12 +622,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -600,12 +638,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -615,12 +654,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
@@ -630,12 +670,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40)
{
@@ -645,12 +686,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41)
{
@@ -660,12 +702,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42)
{
@@ -675,12 +718,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43)
{
@@ -690,12 +734,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44)
{
@@ -705,12 +750,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , void_ , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45)
{
@@ -720,12 +766,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , void_ , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46)
{
@@ -735,12 +782,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , void_ , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47)
{
@@ -750,12 +798,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , void_ , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48)
{
@@ -765,12 +814,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct make_deque<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
+ struct make_deque< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 , void_ >
{
typedef deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type , typename detail::as_fusion_element<T49>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline deque<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type , typename detail::as_fusion_element<T49>::type>
make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list10.hpp
index f12580708e..50cbce6932 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list10.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list10.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef list<> type;
};
}
- inline list<>
+ BOOST_FUSION_GPU_ENABLED inline list<>
make_list()
{
return list<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_list<T0>
+ struct make_list< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type>
make_list(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_list<T0 , T1>
+ struct make_list< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_list(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_list<T0 , T1 , T2>
+ struct make_list< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_list<T0 , T1 , T2 , T3>
+ struct make_list< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_list<T0 , T1 , T2 , T3 , T4>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list20.hpp
index 7abf884359..6a0da3a505 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list20.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list20.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef list<> type;
};
}
- inline list<>
+ BOOST_FUSION_GPU_ENABLED inline list<>
make_list()
{
return list<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_list<T0>
+ struct make_list< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type>
make_list(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_list<T0 , T1>
+ struct make_list< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_list(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_list<T0 , T1 , T2>
+ struct make_list< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_list<T0 , T1 , T2 , T3>
+ struct make_list< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_list<T0 , T1 , T2 , T3 , T4>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list30.hpp
index b751d295dd..b1bc97d23a 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list30.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list30.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef list<> type;
};
}
- inline list<>
+ BOOST_FUSION_GPU_ENABLED inline list<>
make_list()
{
return list<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_list<T0>
+ struct make_list< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type>
make_list(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_list<T0 , T1>
+ struct make_list< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_list(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_list<T0 , T1 , T2>
+ struct make_list< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_list<T0 , T1 , T2 , T3>
+ struct make_list< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_list<T0 , T1 , T2 , T3 , T4>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list40.hpp
index 0a737fda68..4db1de8466 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list40.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list40.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef list<> type;
};
}
- inline list<>
+ BOOST_FUSION_GPU_ENABLED inline list<>
make_list()
{
return list<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_list<T0>
+ struct make_list< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type>
make_list(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_list<T0 , T1>
+ struct make_list< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_list(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_list<T0 , T1 , T2>
+ struct make_list< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_list<T0 , T1 , T2 , T3>
+ struct make_list< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_list<T0 , T1 , T2 , T3 , T4>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -480,12 +510,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -495,12 +526,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -510,12 +542,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -525,12 +558,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -540,12 +574,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -555,12 +590,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -570,12 +606,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -585,12 +622,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -600,12 +638,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -615,12 +654,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list50.hpp
index b49a9bfcb1..c568dfe2e0 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list50.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list50.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef list<> type;
};
}
- inline list<>
+ BOOST_FUSION_GPU_ENABLED inline list<>
make_list()
{
return list<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_list<T0>
+ struct make_list< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type>
make_list(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_list<T0 , T1>
+ struct make_list< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_list(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_list<T0 , T1 , T2>
+ struct make_list< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_list<T0 , T1 , T2 , T3>
+ struct make_list< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_list<T0 , T1 , T2 , T3 , T4>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -480,12 +510,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -495,12 +526,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -510,12 +542,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -525,12 +558,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -540,12 +574,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -555,12 +590,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -570,12 +606,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -585,12 +622,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -600,12 +638,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -615,12 +654,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
@@ -630,12 +670,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40)
{
@@ -645,12 +686,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41)
{
@@ -660,12 +702,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42)
{
@@ -675,12 +718,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43)
{
@@ -690,12 +734,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44)
{
@@ -705,12 +750,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , void_ , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45)
{
@@ -720,12 +766,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , void_ , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46)
{
@@ -735,12 +782,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , void_ , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47)
{
@@ -750,12 +798,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , void_ , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48)
{
@@ -765,12 +814,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct make_list<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
+ struct make_list< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 , void_ >
{
typedef list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type , typename detail::as_fusion_element<T49>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline list<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type , typename detail::as_fusion_element<T49>::type>
make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map10.hpp
index 7032f862ba..61d05bf05a 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map10.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map10.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
make_map()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct make_map<K0, D0>
+ struct make_map<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> >
make_map(D0 const& _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct make_map<K0 , K1, D0 , D1>
+ struct make_map<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> >
make_map(D0 const& _0 , D1 const& _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct make_map<K0 , K1 , K2, D0 , D1 , D2>
+ struct make_map<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map20.hpp
index 59054b1dc5..d706b65fc8 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map20.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map20.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
make_map()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct make_map<K0, D0>
+ struct make_map<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> >
make_map(D0 const& _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct make_map<K0 , K1, D0 , D1>
+ struct make_map<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> >
make_map(D0 const& _0 , D1 const& _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct make_map<K0 , K1 , K2, D0 , D1 , D2>
+ struct make_map<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9)
{
@@ -244,7 +254,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> > type;
};
@@ -253,6 +263,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10)
{
@@ -265,7 +276,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> > type;
};
@@ -274,6 +285,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11)
{
@@ -286,7 +298,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> > type;
};
@@ -295,6 +307,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12)
{
@@ -307,7 +320,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> > type;
};
@@ -316,6 +329,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13)
{
@@ -328,7 +342,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> > type;
};
@@ -337,6 +351,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14)
{
@@ -349,7 +364,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> > type;
};
@@ -358,6 +373,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15)
{
@@ -370,7 +386,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> > type;
};
@@ -379,6 +395,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16)
{
@@ -391,7 +408,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> > type;
};
@@ -400,6 +417,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17)
{
@@ -412,7 +430,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> > type;
};
@@ -421,6 +439,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18)
{
@@ -433,7 +452,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> > type;
};
@@ -442,6 +461,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map30.hpp
index de495b5f1d..91f4f482f8 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map30.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map30.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
make_map()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct make_map<K0, D0>
+ struct make_map<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> >
make_map(D0 const& _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct make_map<K0 , K1, D0 , D1>
+ struct make_map<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> >
make_map(D0 const& _0 , D1 const& _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct make_map<K0 , K1 , K2, D0 , D1 , D2>
+ struct make_map<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9)
{
@@ -244,7 +254,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> > type;
};
@@ -253,6 +263,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10)
{
@@ -265,7 +276,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> > type;
};
@@ -274,6 +285,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11)
{
@@ -286,7 +298,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> > type;
};
@@ -295,6 +307,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12)
{
@@ -307,7 +320,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> > type;
};
@@ -316,6 +329,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13)
{
@@ -328,7 +342,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> > type;
};
@@ -337,6 +351,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14)
{
@@ -349,7 +364,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> > type;
};
@@ -358,6 +373,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15)
{
@@ -370,7 +386,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> > type;
};
@@ -379,6 +395,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16)
{
@@ -391,7 +408,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> > type;
};
@@ -400,6 +417,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17)
{
@@ -412,7 +430,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> > type;
};
@@ -421,6 +439,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18)
{
@@ -433,7 +452,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> > type;
};
@@ -442,6 +461,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19)
{
@@ -454,7 +474,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> > type;
};
@@ -463,6 +483,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20)
{
@@ -475,7 +496,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> > type;
};
@@ -484,6 +505,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21)
{
@@ -496,7 +518,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> > type;
};
@@ -505,6 +527,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22)
{
@@ -517,7 +540,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> > type;
};
@@ -526,6 +549,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23)
{
@@ -538,7 +562,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> > type;
};
@@ -547,6 +571,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24)
{
@@ -559,7 +584,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> > type;
};
@@ -568,6 +593,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25)
{
@@ -580,7 +606,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> > type;
};
@@ -589,6 +615,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26)
{
@@ -601,7 +628,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> > type;
};
@@ -610,6 +637,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27)
{
@@ -622,7 +650,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> > type;
};
@@ -631,6 +659,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28)
{
@@ -643,7 +672,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> > type;
};
@@ -652,6 +681,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map40.hpp
index 94920d156a..1947140009 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map40.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map40.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
make_map()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct make_map<K0, D0>
+ struct make_map<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> >
make_map(D0 const& _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct make_map<K0 , K1, D0 , D1>
+ struct make_map<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> >
make_map(D0 const& _0 , D1 const& _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct make_map<K0 , K1 , K2, D0 , D1 , D2>
+ struct make_map<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9)
{
@@ -244,7 +254,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> > type;
};
@@ -253,6 +263,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10)
{
@@ -265,7 +276,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> > type;
};
@@ -274,6 +285,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11)
{
@@ -286,7 +298,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> > type;
};
@@ -295,6 +307,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12)
{
@@ -307,7 +320,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> > type;
};
@@ -316,6 +329,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13)
{
@@ -328,7 +342,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> > type;
};
@@ -337,6 +351,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14)
{
@@ -349,7 +364,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> > type;
};
@@ -358,6 +373,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15)
{
@@ -370,7 +386,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> > type;
};
@@ -379,6 +395,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16)
{
@@ -391,7 +408,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> > type;
};
@@ -400,6 +417,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17)
{
@@ -412,7 +430,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> > type;
};
@@ -421,6 +439,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18)
{
@@ -433,7 +452,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> > type;
};
@@ -442,6 +461,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19)
{
@@ -454,7 +474,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> > type;
};
@@ -463,6 +483,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20)
{
@@ -475,7 +496,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> > type;
};
@@ -484,6 +505,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21)
{
@@ -496,7 +518,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> > type;
};
@@ -505,6 +527,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22)
{
@@ -517,7 +540,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> > type;
};
@@ -526,6 +549,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23)
{
@@ -538,7 +562,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> > type;
};
@@ -547,6 +571,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24)
{
@@ -559,7 +584,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> > type;
};
@@ -568,6 +593,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25)
{
@@ -580,7 +606,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> > type;
};
@@ -589,6 +615,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26)
{
@@ -601,7 +628,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> > type;
};
@@ -610,6 +637,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27)
{
@@ -622,7 +650,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> > type;
};
@@ -631,6 +659,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28)
{
@@ -643,7 +672,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> > type;
};
@@ -652,6 +681,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29)
{
@@ -664,7 +694,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> > type;
};
@@ -673,6 +703,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30)
{
@@ -685,7 +716,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> > type;
};
@@ -694,6 +725,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31)
{
@@ -706,7 +738,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> > type;
};
@@ -715,6 +747,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32)
{
@@ -727,7 +760,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> > type;
};
@@ -736,6 +769,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33)
{
@@ -748,7 +782,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> > type;
};
@@ -757,6 +791,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34)
{
@@ -769,7 +804,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> > type;
};
@@ -778,6 +813,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35)
{
@@ -790,7 +826,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> > type;
};
@@ -799,6 +835,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36)
{
@@ -811,7 +848,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> > type;
};
@@ -820,6 +857,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37)
{
@@ -832,7 +870,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> > type;
};
@@ -841,6 +879,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38)
{
@@ -853,7 +892,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> > type;
};
@@ -862,6 +901,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map50.hpp
index 16dbcf75dd..f0fd8482a3 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map50.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map50.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
make_map()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct make_map<K0, D0>
+ struct make_map<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> >
make_map(D0 const& _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct make_map<K0 , K1, D0 , D1>
+ struct make_map<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> >
make_map(D0 const& _0 , D1 const& _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct make_map<K0 , K1 , K2, D0 , D1 , D2>
+ struct make_map<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct make_map<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct make_map<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9)
{
@@ -244,7 +254,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> > type;
};
@@ -253,6 +263,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10)
{
@@ -265,7 +276,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> > type;
};
@@ -274,6 +285,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11)
{
@@ -286,7 +298,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> > type;
};
@@ -295,6 +307,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12)
{
@@ -307,7 +320,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> > type;
};
@@ -316,6 +329,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13)
{
@@ -328,7 +342,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> > type;
};
@@ -337,6 +351,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14)
{
@@ -349,7 +364,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> > type;
};
@@ -358,6 +373,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15)
{
@@ -370,7 +386,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> > type;
};
@@ -379,6 +395,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16)
{
@@ -391,7 +408,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> > type;
};
@@ -400,6 +417,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17)
{
@@ -412,7 +430,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> > type;
};
@@ -421,6 +439,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18)
{
@@ -433,7 +452,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> > type;
};
@@ -442,6 +461,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19)
{
@@ -454,7 +474,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> > type;
};
@@ -463,6 +483,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20)
{
@@ -475,7 +496,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> > type;
};
@@ -484,6 +505,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21)
{
@@ -496,7 +518,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> > type;
};
@@ -505,6 +527,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22)
{
@@ -517,7 +540,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> > type;
};
@@ -526,6 +549,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23)
{
@@ -538,7 +562,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> > type;
};
@@ -547,6 +571,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24)
{
@@ -559,7 +584,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> > type;
};
@@ -568,6 +593,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25)
{
@@ -580,7 +606,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> > type;
};
@@ -589,6 +615,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26)
{
@@ -601,7 +628,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> > type;
};
@@ -610,6 +637,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27)
{
@@ -622,7 +650,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> > type;
};
@@ -631,6 +659,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28)
{
@@ -643,7 +672,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> > type;
};
@@ -652,6 +681,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29)
{
@@ -664,7 +694,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> > type;
};
@@ -673,6 +703,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30)
{
@@ -685,7 +716,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> > type;
};
@@ -694,6 +725,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31)
{
@@ -706,7 +738,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> > type;
};
@@ -715,6 +747,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32)
{
@@ -727,7 +760,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> > type;
};
@@ -736,6 +769,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33)
{
@@ -748,7 +782,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> > type;
};
@@ -757,6 +791,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34)
{
@@ -769,7 +804,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> > type;
};
@@ -778,6 +813,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35)
{
@@ -790,7 +826,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> > type;
};
@@ -799,6 +835,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36)
{
@@ -811,7 +848,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> > type;
};
@@ -820,6 +857,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37)
{
@@ -832,7 +870,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> > type;
};
@@ -841,6 +879,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38)
{
@@ -853,7 +892,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> > type;
};
@@ -862,6 +901,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39)
{
@@ -874,7 +914,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> > type;
};
@@ -883,6 +923,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40)
{
@@ -895,7 +936,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> > type;
};
@@ -904,6 +945,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41)
{
@@ -916,7 +958,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> > type;
};
@@ -925,6 +967,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42)
{
@@ -937,7 +980,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> > type;
};
@@ -946,6 +989,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43)
{
@@ -958,7 +1002,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> > type;
};
@@ -967,6 +1011,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44)
{
@@ -979,7 +1024,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> > type;
};
@@ -988,6 +1033,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45)
{
@@ -1000,7 +1046,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> , fusion::pair< K46 , typename detail::as_fusion_element<D46>::type> > type;
};
@@ -1009,6 +1055,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> , fusion::pair< K46 , typename detail::as_fusion_element<D46>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45 , D46 const& _46)
{
@@ -1021,7 +1068,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> , fusion::pair< K46 , typename detail::as_fusion_element<D46>::type> , fusion::pair< K47 , typename detail::as_fusion_element<D47>::type> > type;
};
@@ -1030,6 +1077,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> , fusion::pair< K46 , typename detail::as_fusion_element<D46>::type> , fusion::pair< K47 , typename detail::as_fusion_element<D47>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45 , D46 const& _46 , D47 const& _47)
{
@@ -1042,7 +1090,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 , K48, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , D48>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 , K48, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , D48 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> , fusion::pair< K46 , typename detail::as_fusion_element<D46>::type> , fusion::pair< K47 , typename detail::as_fusion_element<D47>::type> , fusion::pair< K48 , typename detail::as_fusion_element<D48>::type> > type;
};
@@ -1051,6 +1099,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> , fusion::pair< K46 , typename detail::as_fusion_element<D46>::type> , fusion::pair< K47 , typename detail::as_fusion_element<D47>::type> , fusion::pair< K48 , typename detail::as_fusion_element<D48>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45 , D46 const& _46 , D47 const& _47 , D48 const& _48)
{
@@ -1063,7 +1112,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 , typename K49
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 , typename D49
>
- struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 , K48 , K49, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , D48 , D49>
+ struct make_map<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 , K48 , K49, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , D48 , D49 , void_>
{
typedef map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> , fusion::pair< K46 , typename detail::as_fusion_element<D46>::type> , fusion::pair< K47 , typename detail::as_fusion_element<D47>::type> , fusion::pair< K48 , typename detail::as_fusion_element<D48>::type> , fusion::pair< K49 , typename detail::as_fusion_element<D49>::type> > type;
};
@@ -1072,6 +1121,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 , typename K49
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 , typename D49
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename detail::as_fusion_element<D0>::type> , fusion::pair< K1 , typename detail::as_fusion_element<D1>::type> , fusion::pair< K2 , typename detail::as_fusion_element<D2>::type> , fusion::pair< K3 , typename detail::as_fusion_element<D3>::type> , fusion::pair< K4 , typename detail::as_fusion_element<D4>::type> , fusion::pair< K5 , typename detail::as_fusion_element<D5>::type> , fusion::pair< K6 , typename detail::as_fusion_element<D6>::type> , fusion::pair< K7 , typename detail::as_fusion_element<D7>::type> , fusion::pair< K8 , typename detail::as_fusion_element<D8>::type> , fusion::pair< K9 , typename detail::as_fusion_element<D9>::type> , fusion::pair< K10 , typename detail::as_fusion_element<D10>::type> , fusion::pair< K11 , typename detail::as_fusion_element<D11>::type> , fusion::pair< K12 , typename detail::as_fusion_element<D12>::type> , fusion::pair< K13 , typename detail::as_fusion_element<D13>::type> , fusion::pair< K14 , typename detail::as_fusion_element<D14>::type> , fusion::pair< K15 , typename detail::as_fusion_element<D15>::type> , fusion::pair< K16 , typename detail::as_fusion_element<D16>::type> , fusion::pair< K17 , typename detail::as_fusion_element<D17>::type> , fusion::pair< K18 , typename detail::as_fusion_element<D18>::type> , fusion::pair< K19 , typename detail::as_fusion_element<D19>::type> , fusion::pair< K20 , typename detail::as_fusion_element<D20>::type> , fusion::pair< K21 , typename detail::as_fusion_element<D21>::type> , fusion::pair< K22 , typename detail::as_fusion_element<D22>::type> , fusion::pair< K23 , typename detail::as_fusion_element<D23>::type> , fusion::pair< K24 , typename detail::as_fusion_element<D24>::type> , fusion::pair< K25 , typename detail::as_fusion_element<D25>::type> , fusion::pair< K26 , typename detail::as_fusion_element<D26>::type> , fusion::pair< K27 , typename detail::as_fusion_element<D27>::type> , fusion::pair< K28 , typename detail::as_fusion_element<D28>::type> , fusion::pair< K29 , typename detail::as_fusion_element<D29>::type> , fusion::pair< K30 , typename detail::as_fusion_element<D30>::type> , fusion::pair< K31 , typename detail::as_fusion_element<D31>::type> , fusion::pair< K32 , typename detail::as_fusion_element<D32>::type> , fusion::pair< K33 , typename detail::as_fusion_element<D33>::type> , fusion::pair< K34 , typename detail::as_fusion_element<D34>::type> , fusion::pair< K35 , typename detail::as_fusion_element<D35>::type> , fusion::pair< K36 , typename detail::as_fusion_element<D36>::type> , fusion::pair< K37 , typename detail::as_fusion_element<D37>::type> , fusion::pair< K38 , typename detail::as_fusion_element<D38>::type> , fusion::pair< K39 , typename detail::as_fusion_element<D39>::type> , fusion::pair< K40 , typename detail::as_fusion_element<D40>::type> , fusion::pair< K41 , typename detail::as_fusion_element<D41>::type> , fusion::pair< K42 , typename detail::as_fusion_element<D42>::type> , fusion::pair< K43 , typename detail::as_fusion_element<D43>::type> , fusion::pair< K44 , typename detail::as_fusion_element<D44>::type> , fusion::pair< K45 , typename detail::as_fusion_element<D45>::type> , fusion::pair< K46 , typename detail::as_fusion_element<D46>::type> , fusion::pair< K47 , typename detail::as_fusion_element<D47>::type> , fusion::pair< K48 , typename detail::as_fusion_element<D48>::type> , fusion::pair< K49 , typename detail::as_fusion_element<D49>::type> >
make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45 , D46 const& _46 , D47 const& _47 , D48 const& _48 , D49 const& _49)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set10.hpp
index 77c7b7f2fb..aed7574c12 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set10.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set10.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef set<> type;
};
}
- inline set<>
+ BOOST_FUSION_GPU_ENABLED inline set<>
make_set()
{
return set<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_set<T0>
+ struct make_set< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type>
make_set(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_set<T0 , T1>
+ struct make_set< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_set(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_set<T0 , T1 , T2>
+ struct make_set< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_set<T0 , T1 , T2 , T3>
+ struct make_set< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_set<T0 , T1 , T2 , T3 , T4>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set20.hpp
index e8c6c8d38f..6e1db0d0d1 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set20.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set20.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef set<> type;
};
}
- inline set<>
+ BOOST_FUSION_GPU_ENABLED inline set<>
make_set()
{
return set<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_set<T0>
+ struct make_set< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type>
make_set(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_set<T0 , T1>
+ struct make_set< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_set(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_set<T0 , T1 , T2>
+ struct make_set< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_set<T0 , T1 , T2 , T3>
+ struct make_set< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_set<T0 , T1 , T2 , T3 , T4>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set30.hpp
index 5afcc4e94a..951c9abfaa 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set30.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set30.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef set<> type;
};
}
- inline set<>
+ BOOST_FUSION_GPU_ENABLED inline set<>
make_set()
{
return set<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_set<T0>
+ struct make_set< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type>
make_set(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_set<T0 , T1>
+ struct make_set< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_set(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_set<T0 , T1 , T2>
+ struct make_set< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_set<T0 , T1 , T2 , T3>
+ struct make_set< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_set<T0 , T1 , T2 , T3 , T4>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set40.hpp
index 1329452bfd..c2246e225c 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set40.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set40.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef set<> type;
};
}
- inline set<>
+ BOOST_FUSION_GPU_ENABLED inline set<>
make_set()
{
return set<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_set<T0>
+ struct make_set< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type>
make_set(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_set<T0 , T1>
+ struct make_set< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_set(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_set<T0 , T1 , T2>
+ struct make_set< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_set<T0 , T1 , T2 , T3>
+ struct make_set< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_set<T0 , T1 , T2 , T3 , T4>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -480,12 +510,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -495,12 +526,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -510,12 +542,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -525,12 +558,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -540,12 +574,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -555,12 +590,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -570,12 +606,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -585,12 +622,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -600,12 +638,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -615,12 +654,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set50.hpp
index b5cb4ace55..c23dfcf9f2 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set50.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set50.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef set<> type;
};
}
- inline set<>
+ BOOST_FUSION_GPU_ENABLED inline set<>
make_set()
{
return set<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_set<T0>
+ struct make_set< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type>
make_set(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_set<T0 , T1>
+ struct make_set< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_set(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_set<T0 , T1 , T2>
+ struct make_set< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_set<T0 , T1 , T2 , T3>
+ struct make_set< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_set<T0 , T1 , T2 , T3 , T4>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -480,12 +510,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -495,12 +526,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -510,12 +542,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -525,12 +558,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -540,12 +574,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -555,12 +590,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -570,12 +606,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -585,12 +622,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -600,12 +638,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -615,12 +654,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
@@ -630,12 +670,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40)
{
@@ -645,12 +686,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41)
{
@@ -660,12 +702,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42)
{
@@ -675,12 +718,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43)
{
@@ -690,12 +734,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44)
{
@@ -705,12 +750,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , void_ , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45)
{
@@ -720,12 +766,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , void_ , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46)
{
@@ -735,12 +782,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , void_ , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47)
{
@@ -750,12 +798,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , void_ , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48)
{
@@ -765,12 +814,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct make_set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
+ struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 , void_ >
{
typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type , typename detail::as_fusion_element<T49>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type , typename detail::as_fusion_element<T49>::type>
make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp
index 51e2665f8a..dbd7019c3f 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef vector0<> type;
};
}
- inline vector0<>
+ BOOST_FUSION_GPU_ENABLED inline vector0<>
make_vector()
{
return vector0<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_vector<T0>
+ struct make_vector< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector1<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector1<typename detail::as_fusion_element<T0>::type>
make_vector(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_vector<T0 , T1>
+ struct make_vector< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_vector(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_vector<T0 , T1 , T2>
+ struct make_vector< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_vector<T0 , T1 , T2 , T3>
+ struct make_vector< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_vector<T0 , T1 , T2 , T3 , T4>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ >
{
typedef vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ >
{
typedef vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ >
{
typedef vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ >
{
typedef vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp
index 745a7f1193..c889232d00 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef vector0<> type;
};
}
- inline vector0<>
+ BOOST_FUSION_GPU_ENABLED inline vector0<>
make_vector()
{
return vector0<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_vector<T0>
+ struct make_vector< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector1<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector1<typename detail::as_fusion_element<T0>::type>
make_vector(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_vector<T0 , T1>
+ struct make_vector< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_vector(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_vector<T0 , T1 , T2>
+ struct make_vector< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_vector<T0 , T1 , T2 , T3>
+ struct make_vector< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_vector<T0 , T1 , T2 , T3 , T4>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector11<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline vector11<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector12<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline vector12<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector13<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline vector13<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector14<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline vector14<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector15<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline vector15<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector16<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline vector16<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ >
{
typedef vector17<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline vector17<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ >
{
typedef vector18<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline vector18<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ >
{
typedef vector19<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline vector19<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ >
{
typedef vector20<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline vector20<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp
index c663ff198a..8784e7e572 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef vector0<> type;
};
}
- inline vector0<>
+ BOOST_FUSION_GPU_ENABLED inline vector0<>
make_vector()
{
return vector0<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_vector<T0>
+ struct make_vector< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector1<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector1<typename detail::as_fusion_element<T0>::type>
make_vector(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_vector<T0 , T1>
+ struct make_vector< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_vector(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_vector<T0 , T1 , T2>
+ struct make_vector< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_vector<T0 , T1 , T2 , T3>
+ struct make_vector< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_vector<T0 , T1 , T2 , T3 , T4>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector11<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline vector11<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector12<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline vector12<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector13<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline vector13<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector14<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline vector14<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector15<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline vector15<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector16<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline vector16<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector17<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline vector17<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector18<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline vector18<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector19<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline vector19<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector20<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline vector20<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector21<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline vector21<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector22<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline vector22<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector23<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline vector23<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector24<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline vector24<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector25<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline vector25<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector26<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline vector26<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ >
{
typedef vector27<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline vector27<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ >
{
typedef vector28<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline vector28<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ >
{
typedef vector29<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline vector29<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ >
{
typedef vector30<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline vector30<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp
index dc18e461c6..59e991e8ea 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef vector0<> type;
};
}
- inline vector0<>
+ BOOST_FUSION_GPU_ENABLED inline vector0<>
make_vector()
{
return vector0<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_vector<T0>
+ struct make_vector< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector1<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector1<typename detail::as_fusion_element<T0>::type>
make_vector(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_vector<T0 , T1>
+ struct make_vector< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_vector(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_vector<T0 , T1 , T2>
+ struct make_vector< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_vector<T0 , T1 , T2 , T3>
+ struct make_vector< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_vector<T0 , T1 , T2 , T3 , T4>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector11<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline vector11<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector12<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline vector12<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector13<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline vector13<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector14<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline vector14<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector15<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline vector15<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector16<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline vector16<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector17<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline vector17<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector18<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline vector18<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector19<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline vector19<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector20<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline vector20<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector21<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline vector21<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector22<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline vector22<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector23<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline vector23<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector24<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline vector24<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector25<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline vector25<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector26<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline vector26<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector27<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline vector27<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector28<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline vector28<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector29<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline vector29<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector30<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline vector30<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -480,12 +510,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector31<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline vector31<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -495,12 +526,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector32<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline vector32<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -510,12 +542,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector33<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline vector33<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -525,12 +558,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector34<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline vector34<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -540,12 +574,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector35<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline vector35<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -555,12 +590,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector36<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline vector36<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -570,12 +606,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ >
{
typedef vector37<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline vector37<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -585,12 +622,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ >
{
typedef vector38<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline vector38<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -600,12 +638,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ >
{
typedef vector39<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline vector39<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -615,12 +654,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ >
{
typedef vector40<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline vector40<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp
index 3210541f65..cab2c79805 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace fusion
typedef vector0<> type;
};
}
- inline vector0<>
+ BOOST_FUSION_GPU_ENABLED inline vector0<>
make_vector()
{
return vector0<>();
@@ -30,12 +30,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct make_vector<T0>
+ struct make_vector< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector1<typename detail::as_fusion_element<T0>::type> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector1<typename detail::as_fusion_element<T0>::type>
make_vector(T0 const& _0)
{
@@ -45,12 +46,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct make_vector<T0 , T1>
+ struct make_vector< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector2<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_vector(T0 const& _0 , T1 const& _1)
{
@@ -60,12 +62,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct make_vector<T0 , T1 , T2>
+ struct make_vector< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector3<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -75,12 +78,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct make_vector<T0 , T1 , T2 , T3>
+ struct make_vector< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector4<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -90,12 +94,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct make_vector<T0 , T1 , T2 , T3 , T4>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector5<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -105,12 +110,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector6<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -120,12 +126,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector7<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -135,12 +142,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector8<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -150,12 +158,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector9<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -165,12 +174,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector10<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -180,12 +190,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector11<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline vector11<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -195,12 +206,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector12<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline vector12<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -210,12 +222,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector13<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline vector13<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -225,12 +238,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector14<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline vector14<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -240,12 +254,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector15<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline vector15<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -255,12 +270,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector16<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline vector16<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -270,12 +286,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector17<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline vector17<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -285,12 +302,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector18<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline vector18<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -300,12 +318,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector19<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline vector19<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -315,12 +334,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector20<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline vector20<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -330,12 +350,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector21<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline vector21<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -345,12 +366,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector22<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline vector22<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -360,12 +382,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector23<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline vector23<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -375,12 +398,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector24<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline vector24<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -390,12 +414,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector25<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline vector25<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -405,12 +430,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector26<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline vector26<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -420,12 +446,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector27<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline vector27<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -435,12 +462,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector28<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline vector28<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -450,12 +478,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector29<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline vector29<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -465,12 +494,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector30<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline vector30<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -480,12 +510,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector31<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline vector31<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -495,12 +526,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector32<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline vector32<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -510,12 +542,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector33<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline vector33<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -525,12 +558,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector34<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline vector34<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -540,12 +574,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector35<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline vector35<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -555,12 +590,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector36<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline vector36<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -570,12 +606,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector37<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline vector37<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -585,12 +622,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector38<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline vector38<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -600,12 +638,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector39<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline vector39<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -615,12 +654,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector40<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline vector40<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
@@ -630,12 +670,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector41<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline vector41<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40)
{
@@ -645,12 +686,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector42<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline vector42<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41)
{
@@ -660,12 +702,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector43<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline vector43<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42)
{
@@ -675,12 +718,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector44<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline vector44<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43)
{
@@ -690,12 +734,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector45<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline vector45<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44)
{
@@ -705,12 +750,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector46<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline vector46<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45)
{
@@ -720,12 +766,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , void_ , void_ , void_ , void_ >
{
typedef vector47<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline vector47<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46)
{
@@ -735,12 +782,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , void_ , void_ , void_ >
{
typedef vector48<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline vector48<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47)
{
@@ -750,12 +798,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , void_ , void_ >
{
typedef vector49<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline vector49<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48)
{
@@ -765,12 +814,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct make_vector<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
+ struct make_vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 , void_ >
{
typedef vector50<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type , typename detail::as_fusion_element<T49>::type> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline vector50<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type , typename detail::as_fusion_element<T49>::type>
make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp
index 01b17a5abc..195b4146f0 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
map_tie()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct map_tie<K0, D0>
+ struct map_tie<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> >
map_tie(D0 & _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct map_tie<K0 , K1, D0 , D1>
+ struct map_tie<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> >
map_tie(D0 & _0 , D1 & _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct map_tie<K0 , K1 , K2, D0 , D1 , D2>
+ struct map_tie<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp
index b40ba7de1a..a607a2dabc 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
map_tie()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct map_tie<K0, D0>
+ struct map_tie<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> >
map_tie(D0 & _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct map_tie<K0 , K1, D0 , D1>
+ struct map_tie<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> >
map_tie(D0 & _0 , D1 & _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct map_tie<K0 , K1 , K2, D0 , D1 , D2>
+ struct map_tie<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9)
{
@@ -244,7 +254,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> > type;
};
@@ -253,6 +263,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10)
{
@@ -265,7 +276,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> > type;
};
@@ -274,6 +285,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11)
{
@@ -286,7 +298,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> > type;
};
@@ -295,6 +307,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12)
{
@@ -307,7 +320,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> > type;
};
@@ -316,6 +329,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13)
{
@@ -328,7 +342,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> > type;
};
@@ -337,6 +351,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14)
{
@@ -349,7 +364,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> > type;
};
@@ -358,6 +373,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15)
{
@@ -370,7 +386,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> > type;
};
@@ -379,6 +395,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16)
{
@@ -391,7 +408,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> > type;
};
@@ -400,6 +417,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17)
{
@@ -412,7 +430,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> > type;
};
@@ -421,6 +439,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18)
{
@@ -433,7 +452,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> > type;
};
@@ -442,6 +461,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp
index d7eb6dcaf8..911ab8ed64 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
map_tie()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct map_tie<K0, D0>
+ struct map_tie<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> >
map_tie(D0 & _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct map_tie<K0 , K1, D0 , D1>
+ struct map_tie<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> >
map_tie(D0 & _0 , D1 & _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct map_tie<K0 , K1 , K2, D0 , D1 , D2>
+ struct map_tie<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9)
{
@@ -244,7 +254,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> > type;
};
@@ -253,6 +263,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10)
{
@@ -265,7 +276,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> > type;
};
@@ -274,6 +285,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11)
{
@@ -286,7 +298,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> > type;
};
@@ -295,6 +307,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12)
{
@@ -307,7 +320,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> > type;
};
@@ -316,6 +329,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13)
{
@@ -328,7 +342,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> > type;
};
@@ -337,6 +351,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14)
{
@@ -349,7 +364,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> > type;
};
@@ -358,6 +373,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15)
{
@@ -370,7 +386,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> > type;
};
@@ -379,6 +395,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16)
{
@@ -391,7 +408,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> > type;
};
@@ -400,6 +417,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17)
{
@@ -412,7 +430,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> > type;
};
@@ -421,6 +439,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18)
{
@@ -433,7 +452,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> > type;
};
@@ -442,6 +461,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19)
{
@@ -454,7 +474,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> > type;
};
@@ -463,6 +483,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20)
{
@@ -475,7 +496,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> > type;
};
@@ -484,6 +505,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21)
{
@@ -496,7 +518,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> > type;
};
@@ -505,6 +527,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22)
{
@@ -517,7 +540,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> > type;
};
@@ -526,6 +549,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23)
{
@@ -538,7 +562,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> > type;
};
@@ -547,6 +571,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24)
{
@@ -559,7 +584,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> > type;
};
@@ -568,6 +593,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25)
{
@@ -580,7 +606,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> > type;
};
@@ -589,6 +615,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26)
{
@@ -601,7 +628,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> > type;
};
@@ -610,6 +637,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27)
{
@@ -622,7 +650,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> > type;
};
@@ -631,6 +659,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28)
{
@@ -643,7 +672,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> > type;
};
@@ -652,6 +681,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp
index fdda20a4eb..05aba22b4f 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
map_tie()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct map_tie<K0, D0>
+ struct map_tie<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> >
map_tie(D0 & _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct map_tie<K0 , K1, D0 , D1>
+ struct map_tie<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> >
map_tie(D0 & _0 , D1 & _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct map_tie<K0 , K1 , K2, D0 , D1 , D2>
+ struct map_tie<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9)
{
@@ -244,7 +254,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> > type;
};
@@ -253,6 +263,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10)
{
@@ -265,7 +276,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> > type;
};
@@ -274,6 +285,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11)
{
@@ -286,7 +298,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> > type;
};
@@ -295,6 +307,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12)
{
@@ -307,7 +320,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> > type;
};
@@ -316,6 +329,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13)
{
@@ -328,7 +342,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> > type;
};
@@ -337,6 +351,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14)
{
@@ -349,7 +364,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> > type;
};
@@ -358,6 +373,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15)
{
@@ -370,7 +386,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> > type;
};
@@ -379,6 +395,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16)
{
@@ -391,7 +408,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> > type;
};
@@ -400,6 +417,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17)
{
@@ -412,7 +430,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> > type;
};
@@ -421,6 +439,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18)
{
@@ -433,7 +452,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> > type;
};
@@ -442,6 +461,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19)
{
@@ -454,7 +474,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> > type;
};
@@ -463,6 +483,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20)
{
@@ -475,7 +496,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> > type;
};
@@ -484,6 +505,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21)
{
@@ -496,7 +518,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> > type;
};
@@ -505,6 +527,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22)
{
@@ -517,7 +540,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> > type;
};
@@ -526,6 +549,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23)
{
@@ -538,7 +562,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> > type;
};
@@ -547,6 +571,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24)
{
@@ -559,7 +584,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> > type;
};
@@ -568,6 +593,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25)
{
@@ -580,7 +606,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> > type;
};
@@ -589,6 +615,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26)
{
@@ -601,7 +628,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> > type;
};
@@ -610,6 +637,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27)
{
@@ -622,7 +650,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> > type;
};
@@ -631,6 +659,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28)
{
@@ -643,7 +672,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> > type;
};
@@ -652,6 +681,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29)
{
@@ -664,7 +694,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> > type;
};
@@ -673,6 +703,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30)
{
@@ -685,7 +716,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> > type;
};
@@ -694,6 +725,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31)
{
@@ -706,7 +738,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> > type;
};
@@ -715,6 +747,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32)
{
@@ -727,7 +760,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> > type;
};
@@ -736,6 +769,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33)
{
@@ -748,7 +782,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> > type;
};
@@ -757,6 +791,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34)
{
@@ -769,7 +804,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> > type;
};
@@ -778,6 +813,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35)
{
@@ -790,7 +826,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> > type;
};
@@ -799,6 +835,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36)
{
@@ -811,7 +848,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> > type;
};
@@ -820,6 +857,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37)
{
@@ -832,7 +870,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> > type;
};
@@ -841,6 +879,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38)
{
@@ -853,7 +892,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> > type;
};
@@ -862,6 +901,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp
index 5e26932c33..cb42fa7736 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace fusion
typedef map<> type;
};
}
- inline map<>
+ BOOST_FUSION_GPU_ENABLED inline map<>
map_tie()
{
return map<>();
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
- struct map_tie<K0, D0>
+ struct map_tie<K0, D0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> > type;
};
@@ -43,6 +43,7 @@ namespace boost { namespace fusion
typename K0
, typename D0
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> >
map_tie(D0 & _0)
{
@@ -55,7 +56,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
- struct map_tie<K0 , K1, D0 , D1>
+ struct map_tie<K0 , K1, D0 , D1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> > type;
};
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
typename K0 , typename K1
, typename D0 , typename D1
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> >
map_tie(D0 & _0 , D1 & _1)
{
@@ -76,7 +78,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
- struct map_tie<K0 , K1 , K2, D0 , D1 , D2>
+ struct map_tie<K0 , K1 , K2, D0 , D1 , D2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> > type;
};
@@ -85,6 +87,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2
, typename D0 , typename D1 , typename D2
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2)
{
@@ -97,7 +100,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
- struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3>
+ struct map_tie<K0 , K1 , K2 , K3, D0 , D1 , D2 , D3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> > type;
};
@@ -106,6 +109,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3
, typename D0 , typename D1 , typename D2 , typename D3
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3)
{
@@ -118,7 +122,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
- struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4>
+ struct map_tie<K0 , K1 , K2 , K3 , K4, D0 , D1 , D2 , D3 , D4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> > type;
};
@@ -127,6 +131,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4)
{
@@ -139,7 +144,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5, D0 , D1 , D2 , D3 , D4 , D5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> > type;
};
@@ -148,6 +153,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5)
{
@@ -160,7 +166,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6, D0 , D1 , D2 , D3 , D4 , D5 , D6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> > type;
};
@@ -169,6 +175,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6)
{
@@ -181,7 +188,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> > type;
};
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7)
{
@@ -202,7 +210,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> > type;
};
@@ -211,6 +219,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8)
{
@@ -223,7 +232,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> > type;
};
@@ -232,6 +241,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9)
{
@@ -244,7 +254,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> > type;
};
@@ -253,6 +263,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10)
{
@@ -265,7 +276,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> > type;
};
@@ -274,6 +285,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11)
{
@@ -286,7 +298,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> > type;
};
@@ -295,6 +307,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12)
{
@@ -307,7 +320,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> > type;
};
@@ -316,6 +329,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13)
{
@@ -328,7 +342,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> > type;
};
@@ -337,6 +351,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14)
{
@@ -349,7 +364,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> > type;
};
@@ -358,6 +373,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15)
{
@@ -370,7 +386,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> > type;
};
@@ -379,6 +395,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16)
{
@@ -391,7 +408,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> > type;
};
@@ -400,6 +417,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17)
{
@@ -412,7 +430,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> > type;
};
@@ -421,6 +439,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18)
{
@@ -433,7 +452,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> > type;
};
@@ -442,6 +461,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19)
{
@@ -454,7 +474,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> > type;
};
@@ -463,6 +483,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20)
{
@@ -475,7 +496,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> > type;
};
@@ -484,6 +505,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21)
{
@@ -496,7 +518,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> > type;
};
@@ -505,6 +527,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22)
{
@@ -517,7 +540,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> > type;
};
@@ -526,6 +549,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23)
{
@@ -538,7 +562,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> > type;
};
@@ -547,6 +571,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24)
{
@@ -559,7 +584,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> > type;
};
@@ -568,6 +593,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25)
{
@@ -580,7 +606,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> > type;
};
@@ -589,6 +615,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26)
{
@@ -601,7 +628,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> > type;
};
@@ -610,6 +637,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27)
{
@@ -622,7 +650,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> > type;
};
@@ -631,6 +659,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28)
{
@@ -643,7 +672,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> > type;
};
@@ -652,6 +681,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29)
{
@@ -664,7 +694,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> > type;
};
@@ -673,6 +703,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30)
{
@@ -685,7 +716,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> > type;
};
@@ -694,6 +725,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31)
{
@@ -706,7 +738,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> > type;
};
@@ -715,6 +747,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32)
{
@@ -727,7 +760,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> > type;
};
@@ -736,6 +769,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33)
{
@@ -748,7 +782,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> > type;
};
@@ -757,6 +791,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34)
{
@@ -769,7 +804,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> > type;
};
@@ -778,6 +813,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35)
{
@@ -790,7 +826,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> > type;
};
@@ -799,6 +835,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36)
{
@@ -811,7 +848,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> > type;
};
@@ -820,6 +857,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37)
{
@@ -832,7 +870,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> > type;
};
@@ -841,6 +879,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38)
{
@@ -853,7 +892,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> > type;
};
@@ -862,6 +901,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39)
{
@@ -874,7 +914,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> > type;
};
@@ -883,6 +923,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40)
{
@@ -895,7 +936,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> > type;
};
@@ -904,6 +945,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41)
{
@@ -916,7 +958,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> > type;
};
@@ -925,6 +967,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42)
{
@@ -937,7 +980,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> > type;
};
@@ -946,6 +989,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43)
{
@@ -958,7 +1002,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> > type;
};
@@ -967,6 +1011,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44)
{
@@ -979,7 +1024,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> > type;
};
@@ -988,6 +1033,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45)
{
@@ -1000,7 +1046,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> , fusion::pair< K46 , typename add_reference<D46>::type> > type;
};
@@ -1009,6 +1055,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> , fusion::pair< K46 , typename add_reference<D46>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45 , D46 & _46)
{
@@ -1021,7 +1068,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , void_ , void_ , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> , fusion::pair< K46 , typename add_reference<D46>::type> , fusion::pair< K47 , typename add_reference<D47>::type> > type;
};
@@ -1030,6 +1077,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> , fusion::pair< K46 , typename add_reference<D46>::type> , fusion::pair< K47 , typename add_reference<D47>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45 , D46 & _46 , D47 & _47)
{
@@ -1042,7 +1090,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 , K48, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , D48>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 , K48, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , D48 , void_ , void_ , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> , fusion::pair< K46 , typename add_reference<D46>::type> , fusion::pair< K47 , typename add_reference<D47>::type> , fusion::pair< K48 , typename add_reference<D48>::type> > type;
};
@@ -1051,6 +1099,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> , fusion::pair< K46 , typename add_reference<D46>::type> , fusion::pair< K47 , typename add_reference<D47>::type> , fusion::pair< K48 , typename add_reference<D48>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45 , D46 & _46 , D47 & _47 , D48 & _48)
{
@@ -1063,7 +1112,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 , typename K49
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 , typename D49
>
- struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 , K48 , K49, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , D48 , D49>
+ struct map_tie<K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 , K48 , K49, D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 , D8 , D9 , D10 , D11 , D12 , D13 , D14 , D15 , D16 , D17 , D18 , D19 , D20 , D21 , D22 , D23 , D24 , D25 , D26 , D27 , D28 , D29 , D30 , D31 , D32 , D33 , D34 , D35 , D36 , D37 , D38 , D39 , D40 , D41 , D42 , D43 , D44 , D45 , D46 , D47 , D48 , D49 , void_>
{
typedef map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> , fusion::pair< K46 , typename add_reference<D46>::type> , fusion::pair< K47 , typename add_reference<D47>::type> , fusion::pair< K48 , typename add_reference<D48>::type> , fusion::pair< K49 , typename add_reference<D49>::type> > type;
};
@@ -1072,6 +1121,7 @@ namespace boost { namespace fusion
typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 , typename K49
, typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 , typename D49
>
+ BOOST_FUSION_GPU_ENABLED
inline map<fusion::pair< K0 , typename add_reference<D0>::type> , fusion::pair< K1 , typename add_reference<D1>::type> , fusion::pair< K2 , typename add_reference<D2>::type> , fusion::pair< K3 , typename add_reference<D3>::type> , fusion::pair< K4 , typename add_reference<D4>::type> , fusion::pair< K5 , typename add_reference<D5>::type> , fusion::pair< K6 , typename add_reference<D6>::type> , fusion::pair< K7 , typename add_reference<D7>::type> , fusion::pair< K8 , typename add_reference<D8>::type> , fusion::pair< K9 , typename add_reference<D9>::type> , fusion::pair< K10 , typename add_reference<D10>::type> , fusion::pair< K11 , typename add_reference<D11>::type> , fusion::pair< K12 , typename add_reference<D12>::type> , fusion::pair< K13 , typename add_reference<D13>::type> , fusion::pair< K14 , typename add_reference<D14>::type> , fusion::pair< K15 , typename add_reference<D15>::type> , fusion::pair< K16 , typename add_reference<D16>::type> , fusion::pair< K17 , typename add_reference<D17>::type> , fusion::pair< K18 , typename add_reference<D18>::type> , fusion::pair< K19 , typename add_reference<D19>::type> , fusion::pair< K20 , typename add_reference<D20>::type> , fusion::pair< K21 , typename add_reference<D21>::type> , fusion::pair< K22 , typename add_reference<D22>::type> , fusion::pair< K23 , typename add_reference<D23>::type> , fusion::pair< K24 , typename add_reference<D24>::type> , fusion::pair< K25 , typename add_reference<D25>::type> , fusion::pair< K26 , typename add_reference<D26>::type> , fusion::pair< K27 , typename add_reference<D27>::type> , fusion::pair< K28 , typename add_reference<D28>::type> , fusion::pair< K29 , typename add_reference<D29>::type> , fusion::pair< K30 , typename add_reference<D30>::type> , fusion::pair< K31 , typename add_reference<D31>::type> , fusion::pair< K32 , typename add_reference<D32>::type> , fusion::pair< K33 , typename add_reference<D33>::type> , fusion::pair< K34 , typename add_reference<D34>::type> , fusion::pair< K35 , typename add_reference<D35>::type> , fusion::pair< K36 , typename add_reference<D36>::type> , fusion::pair< K37 , typename add_reference<D37>::type> , fusion::pair< K38 , typename add_reference<D38>::type> , fusion::pair< K39 , typename add_reference<D39>::type> , fusion::pair< K40 , typename add_reference<D40>::type> , fusion::pair< K41 , typename add_reference<D41>::type> , fusion::pair< K42 , typename add_reference<D42>::type> , fusion::pair< K43 , typename add_reference<D43>::type> , fusion::pair< K44 , typename add_reference<D44>::type> , fusion::pair< K45 , typename add_reference<D45>::type> , fusion::pair< K46 , typename add_reference<D46>::type> , fusion::pair< K47 , typename add_reference<D47>::type> , fusion::pair< K48 , typename add_reference<D48>::type> , fusion::pair< K49 , typename add_reference<D49>::type> >
map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45 , D46 & _46 , D47 & _47 , D48 & _48 , D49 & _49)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp
index 9e463b5a77..b68108b37a 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct vector_tie<T0>
+ struct vector_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0&>
vector_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct vector_tie<T0 , T1>
+ struct vector_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1&>
vector_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct vector_tie<T0 , T1 , T2>
+ struct vector_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct vector_tie<T0 , T1 , T2 , T3>
+ struct vector_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct vector_tie<T0 , T1 , T2 , T3 , T4>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp
index 20d6a5b9ac..6dd8741623 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct vector_tie<T0>
+ struct vector_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0&>
vector_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct vector_tie<T0 , T1>
+ struct vector_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1&>
vector_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct vector_tie<T0 , T1 , T2>
+ struct vector_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct vector_tie<T0 , T1 , T2 , T3>
+ struct vector_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct vector_tie<T0 , T1 , T2 , T3 , T4>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp
index dbfcd55300..e81978e8e9 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct vector_tie<T0>
+ struct vector_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0&>
vector_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct vector_tie<T0 , T1>
+ struct vector_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1&>
vector_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct vector_tie<T0 , T1 , T2>
+ struct vector_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct vector_tie<T0 , T1 , T2 , T3>
+ struct vector_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct vector_tie<T0 , T1 , T2 , T3 , T4>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -320,12 +340,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -335,12 +356,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -350,12 +372,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -365,12 +388,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -380,12 +404,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -395,12 +420,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -410,12 +436,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -425,12 +452,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -440,12 +468,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -455,12 +484,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp
index ff3ec3575a..d3725eb94e 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct vector_tie<T0>
+ struct vector_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0&>
vector_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct vector_tie<T0 , T1>
+ struct vector_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1&>
vector_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct vector_tie<T0 , T1 , T2>
+ struct vector_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct vector_tie<T0 , T1 , T2 , T3>
+ struct vector_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct vector_tie<T0 , T1 , T2 , T3 , T4>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -320,12 +340,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -335,12 +356,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -350,12 +372,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -365,12 +388,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -380,12 +404,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -395,12 +420,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -410,12 +436,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -425,12 +452,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -440,12 +468,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -455,12 +484,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
@@ -470,12 +500,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30)
{
@@ -485,12 +516,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31)
{
@@ -500,12 +532,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32)
{
@@ -515,12 +548,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33)
{
@@ -530,12 +564,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34)
{
@@ -545,12 +580,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35)
{
@@ -560,12 +596,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36)
{
@@ -575,12 +612,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37)
{
@@ -590,12 +628,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38)
{
@@ -605,12 +644,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39)
{
diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp
index 60814c395c..ad4f119aac 100644
--- a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp
+++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp
@@ -20,12 +20,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0>
- struct vector_tie<T0>
+ struct vector_tie< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0&> type;
};
}
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0&>
vector_tie(T0 & _0)
{
@@ -35,12 +36,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1>
- struct vector_tie<T0 , T1>
+ struct vector_tie< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1&> type;
};
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1&>
vector_tie(T0 & _0 , T1 & _1)
{
@@ -50,12 +52,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2>
- struct vector_tie<T0 , T1 , T2>
+ struct vector_tie< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2&> type;
};
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -65,12 +68,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3>
- struct vector_tie<T0 , T1 , T2 , T3>
+ struct vector_tie< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -80,12 +84,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
- struct vector_tie<T0 , T1 , T2 , T3 , T4>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -95,12 +100,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -110,12 +116,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -125,12 +132,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -140,12 +148,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -155,12 +164,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -170,12 +180,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -185,12 +196,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -200,12 +212,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -215,12 +228,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -230,12 +244,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -245,12 +260,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -260,12 +276,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -275,12 +292,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -290,12 +308,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -305,12 +324,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -320,12 +340,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -335,12 +356,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -350,12 +372,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -365,12 +388,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -380,12 +404,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -395,12 +420,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -410,12 +436,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -425,12 +452,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -440,12 +468,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -455,12 +484,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
@@ -470,12 +500,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30)
{
@@ -485,12 +516,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31)
{
@@ -500,12 +532,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32)
{
@@ -515,12 +548,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33)
{
@@ -530,12 +564,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34)
{
@@ -545,12 +580,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35)
{
@@ -560,12 +596,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36)
{
@@ -575,12 +612,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37)
{
@@ -590,12 +628,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38)
{
@@ -605,12 +644,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39)
{
@@ -620,12 +660,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40)
{
@@ -635,12 +676,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41)
{
@@ -650,12 +692,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42)
{
@@ -665,12 +708,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43)
{
@@ -680,12 +724,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , void_ , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44)
{
@@ -695,12 +740,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , void_ , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45)
{
@@ -710,12 +756,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , void_ , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46)
{
@@ -725,12 +772,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , void_ , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47)
{
@@ -740,12 +788,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , void_ , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48)
{
@@ -755,12 +804,13 @@ namespace boost { namespace fusion
namespace result_of
{
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct vector_tie<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
+ struct vector_tie< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 , void_ >
{
typedef vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48& , T49&> type;
};
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline vector<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48& , T49&>
vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48 , T49 & _49)
{
diff --git a/3party/boost/boost/fusion/container/generation/ignore.hpp b/3party/boost/boost/fusion/container/generation/ignore.hpp
index 8e1b00c947..0bebade465 100644
--- a/3party/boost/boost/fusion/container/generation/ignore.hpp
+++ b/3party/boost/boost/fusion/container/generation/ignore.hpp
@@ -17,6 +17,7 @@ namespace boost { namespace fusion
struct swallow_assign
{
template<typename T>
+ BOOST_FUSION_GPU_ENABLED
swallow_assign const&
operator=(const T&) const
{
diff --git a/3party/boost/boost/fusion/container/generation/list_tie.hpp b/3party/boost/boost/fusion/container/generation/list_tie.hpp
index 2a663908c5..1631d0d365 100644
--- a/3party/boost/boost/fusion/container/generation/list_tie.hpp
+++ b/3party/boost/boost/fusion/container/generation/list_tie.hpp
@@ -80,19 +80,16 @@ namespace boost { namespace fusion
namespace result_of
{
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct list_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
#undef TEXT
-#else
- struct list_tie<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
{
typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
};
}
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
list_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
{
diff --git a/3party/boost/boost/fusion/container/generation/make_cons.hpp b/3party/boost/boost/fusion/container/generation/make_cons.hpp
index dcb606dc9d..bb844ea38c 100644
--- a/3party/boost/boost/fusion/container/generation/make_cons.hpp
+++ b/3party/boost/boost/fusion/container/generation/make_cons.hpp
@@ -8,16 +8,17 @@
#if !defined(FUSION_MAKE_CONS_07172005_0918)
#define FUSION_MAKE_CONS_07172005_0918
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/container/list/cons.hpp>
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
namespace result_of
{
- template <typename Car, typename Cdr = nil>
+ template <typename Car, typename Cdr = nil_>
struct make_cons
{
typedef cons<typename detail::as_fusion_element<Car>::type, Cdr> type;
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
}
template <typename Car>
+ BOOST_FUSION_GPU_ENABLED
inline cons<typename detail::as_fusion_element<Car>::type>
make_cons(Car const& car)
{
@@ -32,6 +34,7 @@ namespace boost { namespace fusion
}
template <typename Car, typename Cdr>
+ BOOST_FUSION_GPU_ENABLED
inline cons<typename detail::as_fusion_element<Car>::type, Cdr>
make_cons(Car const& car, Cdr const& cdr)
{
diff --git a/3party/boost/boost/fusion/container/generation/make_deque.hpp b/3party/boost/boost/fusion/container/generation/make_deque.hpp
index fdc7dce73f..20246f785c 100644
--- a/3party/boost/boost/fusion/container/generation/make_deque.hpp
+++ b/3party/boost/boost/fusion/container/generation/make_deque.hpp
@@ -1,124 +1,45 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Copyright (c) 2006 Dan Marsden
+ Copyright (c) 2001-2013 Joel de Guzman
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)
==============================================================================*/
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#if !defined(FUSION_MAKE_DEQUE_07162005_0243)
-#define FUSION_MAKE_DEQUE_07162005_0243
+#if !defined(FUSION_MAKE_DEQUE_01272013_1401)
+#define FUSION_MAKE_DEQUE_01272013_1401
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque/deque.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/generation/detail/preprocessed/make_deque.hpp>
+#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+# include <boost/fusion/container/generation/detail/pp_make_deque.hpp>
#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_deque" FUSION_MAX_DEQUE_SIZE_STR".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
- This is an auto-generated file. Do not edit!
-==============================================================================*/
+///////////////////////////////////////////////////////////////////////////////
+// C++11 variadic interface
+///////////////////////////////////////////////////////////////////////////////
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
namespace boost { namespace fusion
{
- struct void_;
-
namespace result_of
{
- template <
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- FUSION_MAX_DEQUE_SIZE, typename T, void_)
- , typename Extra = void_
- >
- struct make_deque;
-
- template <>
- struct make_deque<>
+ template <typename ...T>
+ struct make_deque
{
- typedef deque<> type;
+ typedef deque<T...> type;
};
}
- inline deque<>
- make_deque()
+ template <typename ...T>
+ BOOST_FUSION_GPU_ENABLED
+ inline deque<typename detail::as_fusion_element<T>::type...>
+ make_deque(T const&... arg)
{
- return deque<>();
+ return deque<typename detail::as_fusion_element<T>::type...>(arg...);
}
-
-#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \
- typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_deque.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_AS_FUSION_ELEMENT
-
-}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+ }}
#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
- namespace result_of
- {
- template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
- #define TEXT(z, n, text) , text
- struct make_deque< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
- #undef TEXT
-#else
- struct make_deque<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
- {
- typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
- };
- }
-
- template <BOOST_PP_ENUM_PARAMS(N, typename T)>
- inline deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
- make_deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
- {
- return deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
- BOOST_PP_ENUM_PARAMS(N, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/fusion/container/generation/make_list.hpp b/3party/boost/boost/fusion/container/generation/make_list.hpp
index 1270839ef6..d1f9ea5721 100644
--- a/3party/boost/boost/fusion/container/generation/make_list.hpp
+++ b/3party/boost/boost/fusion/container/generation/make_list.hpp
@@ -56,7 +56,7 @@ namespace boost { namespace fusion
};
}
- inline list<>
+ BOOST_FUSION_GPU_ENABLED inline list<>
make_list()
{
return list<>();
@@ -92,19 +92,16 @@ namespace boost { namespace fusion
namespace result_of
{
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct make_list< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
#undef TEXT
-#else
- struct make_list<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
{
typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
};
}
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
make_list(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
{
diff --git a/3party/boost/boost/fusion/container/generation/make_map.hpp b/3party/boost/boost/fusion/container/generation/make_map.hpp
index 08938d4c3c..d2eb16e22c 100644
--- a/3party/boost/boost/fusion/container/generation/make_map.hpp
+++ b/3party/boost/boost/fusion/container/generation/make_map.hpp
@@ -1,132 +1,64 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2013 Joel de Guzman
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_PP_IS_ITERATING
#if !defined(FUSION_MAKE_MAP_07222005_1247)
#define FUSION_MAKE_MAP_07222005_1247
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/map/map.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-#include <boost/fusion/support/pair.hpp>
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/generation/detail/preprocessed/make_map.hpp>
+#if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
+# include <boost/fusion/container/generation/detail/pp_make_map.hpp>
#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_map" FUSION_MAX_MAP_SIZE_STR".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
+///////////////////////////////////////////////////////////////////////////////
+// C++11 variadic interface
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/support/pair.hpp>
namespace boost { namespace fusion
{
- struct void_;
-
namespace result_of
{
- template <
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- FUSION_MAX_VECTOR_SIZE, typename K, void_)
- , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- FUSION_MAX_VECTOR_SIZE, typename D, void_)
- , typename Extra = void_
- >
- struct make_map;
-
- template <>
- struct make_map<>
+ template <typename ...Key>
+ struct make_map
{
- typedef map<> type;
+ template <typename ...T>
+ struct apply
+ {
+ typedef map<
+ fusion::pair<
+ Key
+ , typename detail::as_fusion_element<T>::type
+ >...>
+ type;
+ };
};
}
- inline map<>
- make_map()
+ template <typename ...Key, typename ...T>
+ BOOST_FUSION_GPU_ENABLED
+ inline map<
+ fusion::pair<
+ Key
+ , typename detail::as_fusion_element<T>::type
+ >...>
+ make_map(T const&... arg)
{
- return map<>();
+ typedef map<
+ fusion::pair<
+ Key
+ , typename detail::as_fusion_element<T>::type
+ >...>
+ result_type;
+
+ return result_type(arg...);
}
-
-#define BOOST_FUSION_PAIR(z, n, data) \
- fusion::pair< \
- BOOST_PP_CAT(K, n) \
- , typename detail::as_fusion_element<BOOST_PP_CAT(D, n)>::type>
-
-#define BOOST_FUSION_MAKE_PAIR(z, n, data) \
- fusion::make_pair<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n)) \
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_map.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_PAIR
-#undef BOOST_FUSION_MAKE_PAIR
-
-}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+ }}
#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
- namespace result_of
- {
- template <
- BOOST_PP_ENUM_PARAMS(N, typename K)
- , BOOST_PP_ENUM_PARAMS(N, typename D)
- >
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
- #define TEXT(z, n, text) , text
- struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_VECTOR_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_)>
- #undef TEXT
-#else
- struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
#endif
- {
- typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)> type;
- };
- }
-
- template <
- BOOST_PP_ENUM_PARAMS(N, typename K)
- , BOOST_PP_ENUM_PARAMS(N, typename D)
- >
- inline map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>
- make_map(BOOST_PP_ENUM_BINARY_PARAMS(N, D, const& _))
- {
- return map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>(
- BOOST_PP_ENUM(N, BOOST_FUSION_MAKE_PAIR, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
diff --git a/3party/boost/boost/fusion/container/generation/make_set.hpp b/3party/boost/boost/fusion/container/generation/make_set.hpp
index 229f7d0dfb..4cd20ab77a 100644
--- a/3party/boost/boost/fusion/container/generation/make_set.hpp
+++ b/3party/boost/boost/fusion/container/generation/make_set.hpp
@@ -57,7 +57,7 @@ namespace boost { namespace fusion
};
}
- inline set<>
+ BOOST_FUSION_GPU_ENABLED inline set<>
make_set()
{
return set<>();
@@ -94,19 +94,16 @@ namespace boost { namespace fusion
namespace result_of
{
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct make_set< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_SET_SIZE, TEXT, void_) >
#undef TEXT
-#else
- struct make_set<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
{
typedef set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
};
}
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
make_set(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
{
diff --git a/3party/boost/boost/fusion/container/generation/make_vector.hpp b/3party/boost/boost/fusion/container/generation/make_vector.hpp
index a6fd8323d0..4911f4bfd5 100644
--- a/3party/boost/boost/fusion/container/generation/make_vector.hpp
+++ b/3party/boost/boost/fusion/container/generation/make_vector.hpp
@@ -56,7 +56,7 @@ namespace boost { namespace fusion
};
}
- inline vector0<>
+ BOOST_FUSION_GPU_ENABLED inline vector0<>
make_vector()
{
return vector0<>();
@@ -92,19 +92,16 @@ namespace boost { namespace fusion
namespace result_of
{
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct make_vector< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
#undef TEXT
-#else
- struct make_vector<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
{
typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
};
}
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
make_vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
{
diff --git a/3party/boost/boost/fusion/container/generation/map_tie.hpp b/3party/boost/boost/fusion/container/generation/map_tie.hpp
index 26fc2dfa82..4a988d4283 100644
--- a/3party/boost/boost/fusion/container/generation/map_tie.hpp
+++ b/3party/boost/boost/fusion/container/generation/map_tie.hpp
@@ -1,136 +1,48 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Copyright (c) 2006 Dan Marsden
+ Copyright (c) 2001-2013 Joel de Guzman
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_PP_IS_ITERATING
-#if !defined(FUSION_MAP_TIE_20060814_1116)
-#define FUSION_MAP_TIE_20060814_1116
+#if !defined(FUSION_MAP_TIE_07222005_1247)
+#define FUSION_MAP_TIE_07222005_1247
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/map/map.hpp>
-#include <boost/fusion/container/map/limits.hpp>
-#include <boost/fusion/support/pair.hpp>
-#include <boost/fusion/container/generation/pair_tie.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/generation/detail/preprocessed/map_tie.hpp>
+#if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
+# include <boost/fusion/container/generation/detail/pp_map_tie.hpp>
#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/map_tie" FUSION_MAX_MAP_SIZE_STR".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
+///////////////////////////////////////////////////////////////////////////////
+// C++11 variadic interface
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/fusion/support/pair.hpp>
namespace boost { namespace fusion
{
- struct void_;
-
namespace result_of
{
- template <
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- FUSION_MAX_MAP_SIZE, typename K, void_)
- , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- FUSION_MAX_MAP_SIZE, typename D, void_)
- , typename Extra = void_
- >
- struct map_tie;
-
- template <>
- struct map_tie<>
+ template <typename ...Key>
+ struct map_tie
{
- typedef map<> type;
+ template <typename ...T>
+ struct apply
+ {
+ typedef map<fusion::pair<Key, T&>...> type;
+ };
};
}
- inline map<>
- map_tie()
+ template <typename ...Key, typename ...T>
+ BOOST_FUSION_GPU_ENABLED
+ inline map<fusion::pair<Key, T&>...>
+ map_tie(T&... arg)
{
- return map<>();
+ typedef map<fusion::pair<Key, T&>...> result_type;
+ return result_type(arg...);
}
+ }}
-#define BOOST_FUSION_TIED_PAIR(z, n, data) \
- fusion::pair< \
- BOOST_PP_CAT(K, n) \
- , typename add_reference<BOOST_PP_CAT(D, n)>::type>
-
-#define BOOST_FUSION_PAIR_TIE(z, n, data) \
- fusion::pair_tie<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n)) \
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/map_tie.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_PAIR
-#undef BOOST_FUSION_MAKE_PAIR
-
-}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
- namespace result_of
- {
- template <
- BOOST_PP_ENUM_PARAMS(N, typename K)
- , BOOST_PP_ENUM_PARAMS(N, typename D)
- >
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
- #define TEXT(z, n, text) , text
-
- struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_MAP_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_MAP_SIZE, TEXT, void_)>
- #undef TEXT
-#else
- struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
-#endif
- {
- typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)> type;
- };
- }
-
- template <
- BOOST_PP_ENUM_PARAMS(N, typename K)
- , BOOST_PP_ENUM_PARAMS(N, typename D)
- >
- inline map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>
- map_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, D, & _))
- {
- return map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>(
- BOOST_PP_ENUM(N, BOOST_FUSION_PAIR_TIE, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
diff --git a/3party/boost/boost/fusion/container/generation/pair_tie.hpp b/3party/boost/boost/fusion/container/generation/pair_tie.hpp
index 0f740a129e..b4fbc780bf 100644
--- a/3party/boost/boost/fusion/container/generation/pair_tie.hpp
+++ b/3party/boost/boost/fusion/container/generation/pair_tie.hpp
@@ -8,6 +8,7 @@
#if !defined (BOOST_FUSION_PAIR_TIE_20060812_2058)
#define BOOST_FUSION_PAIR_TIE_20060812_2058
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/utility/enable_if.hpp>
@@ -26,6 +27,7 @@ namespace boost { namespace fusion {
}
template<typename Key, typename T>
+ BOOST_FUSION_GPU_ENABLED
typename disable_if<is_const<T>, typename result_of::pair_tie<Key, T>::type>::type
pair_tie(T& t)
{
@@ -33,6 +35,7 @@ namespace boost { namespace fusion {
}
template<typename Key, typename T>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::pair_tie<Key, T const>::type
pair_tie(T const& t)
{
diff --git a/3party/boost/boost/fusion/container/generation/vector_tie.hpp b/3party/boost/boost/fusion/container/generation/vector_tie.hpp
index 919b4f1e66..f71b7677be 100644
--- a/3party/boost/boost/fusion/container/generation/vector_tie.hpp
+++ b/3party/boost/boost/fusion/container/generation/vector_tie.hpp
@@ -78,19 +78,16 @@ namespace boost { namespace fusion
namespace result_of
{
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct vector_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
#undef TEXT
-#else
- struct vector_tie<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
{
typedef vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
};
}
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
vector_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
{
diff --git a/3party/boost/boost/fusion/container/list.hpp b/3party/boost/boost/fusion/container/list.hpp
index 3e8c4d3e0b..bdb5dc9a02 100644
--- a/3party/boost/boost/fusion/container/list.hpp
+++ b/3party/boost/boost/fusion/container/list.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_CLASS_LIST_10022005_0605)
#define FUSION_SEQUENCE_CLASS_LIST_10022005_0605
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/cons.hpp>
#include <boost/fusion/container/list/cons_iterator.hpp>
#include <boost/fusion/container/list/limits.hpp>
diff --git a/3party/boost/boost/fusion/container/list/cons.hpp b/3party/boost/boost/fusion/container/list/cons.hpp
index 666b5367b6..1de7048b63 100644
--- a/3party/boost/boost/fusion/container/list/cons.hpp
+++ b/3party/boost/boost/fusion/container/list/cons.hpp
@@ -8,12 +8,14 @@
#if !defined(FUSION_CONS_07172005_0843)
#define FUSION_CONS_07172005_0843
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/cons_fwd.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/container/list/nil.hpp>
#include <boost/fusion/container/list/cons_iterator.hpp>
#include <boost/fusion/container/list/detail/begin_impl.hpp>
#include <boost/fusion/container/list/detail/end_impl.hpp>
@@ -34,29 +36,7 @@ namespace boost { namespace fusion
struct forward_traversal_tag;
struct fusion_sequence_tag;
- struct nil : sequence_base<nil>
- {
- typedef mpl::int_<0> size;
- typedef cons_tag fusion_tag;
- typedef fusion_sequence_tag tag; // this gets picked up by MPL
- typedef mpl::false_ is_view;
- typedef forward_traversal_tag category;
- typedef void_ car_type;
- typedef void_ cdr_type;
-
- nil() {}
-
- template <typename Iterator>
- nil(Iterator const& /*iter*/, mpl::true_ /*this_is_an_iterator*/)
- {}
-
- template <typename Iterator>
- void assign_from_iter(Iterator const& /*iter*/)
- {
- }
- };
-
- template <typename Car, typename Cdr /*= nil*/>
+ template <typename Car, typename Cdr /*= nil_*/>
struct cons : sequence_base<cons<Car, Cdr> >
{
typedef mpl::int_<Cdr::size::value+1> size;
@@ -67,25 +47,31 @@ namespace boost { namespace fusion
typedef Car car_type;
typedef Cdr cdr_type;
+ BOOST_FUSION_GPU_ENABLED
cons()
: car(), cdr() {}
+ BOOST_FUSION_GPU_ENABLED
explicit cons(typename detail::call_param<Car>::type in_car)
: car(in_car), cdr() {}
+ BOOST_FUSION_GPU_ENABLED
cons(
typename detail::call_param<Car>::type in_car
, typename detail::call_param<Cdr>::type in_cdr)
: car(in_car), cdr(in_cdr) {}
template <typename Car2, typename Cdr2>
+ BOOST_FUSION_GPU_ENABLED
cons(cons<Car2, Cdr2> const& rhs)
: car(rhs.car), cdr(rhs.cdr) {}
+ BOOST_FUSION_GPU_ENABLED
cons(cons const& rhs)
: car(rhs.car), cdr(rhs.cdr) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
cons(
Sequence const& seq
, typename boost::disable_if<
@@ -99,11 +85,13 @@ namespace boost { namespace fusion
, cdr(fusion::next(fusion::begin(seq)), mpl::true_()) {}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
cons(Iterator const& iter, mpl::true_ /*this_is_an_iterator*/)
: car(*iter)
, cdr(fusion::next(iter), mpl::true_()) {}
template <typename Car2, typename Cdr2>
+ BOOST_FUSION_GPU_ENABLED
cons& operator=(cons<Car2, Cdr2> const& rhs)
{
car = rhs.car;
@@ -111,6 +99,7 @@ namespace boost { namespace fusion
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
cons& operator=(cons const& rhs)
{
car = rhs.car;
@@ -119,6 +108,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, Car>, cons&>::type
operator=(Sequence const& seq)
{
@@ -129,6 +119,7 @@ namespace boost { namespace fusion
}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
void assign_from_iter(Iterator const& iter)
{
car = *iter;
diff --git a/3party/boost/boost/fusion/container/list/cons_fwd.hpp b/3party/boost/boost/fusion/container/list/cons_fwd.hpp
index 80bb0443c8..547c42ca9b 100644
--- a/3party/boost/boost/fusion/container/list/cons_fwd.hpp
+++ b/3party/boost/boost/fusion/container/list/cons_fwd.hpp
@@ -2,7 +2,7 @@
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005 Eric Niebler
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_FUSION_CONS_FWD_HPP_INCLUDED)
@@ -10,9 +10,12 @@
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
+ #ifndef nil
+ typedef nil_ nil;
+ #endif
- template <typename Car, typename Cdr = nil>
+ template <typename Car, typename Cdr = nil_>
struct cons;
}}
diff --git a/3party/boost/boost/fusion/container/list/cons_iterator.hpp b/3party/boost/boost/fusion/container/list/cons_iterator.hpp
index bc4fa0948c..42c023c16f 100644
--- a/3party/boost/boost/fusion/container/list/cons_iterator.hpp
+++ b/3party/boost/boost/fusion/container/list/cons_iterator.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_CONS_ITERATOR_07172005_0849)
#define FUSION_CONS_ITERATOR_07172005_0849
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_const.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/container/list/detail/deref_impl.hpp>
@@ -18,14 +19,14 @@
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct cons_iterator_tag;
struct forward_traversal_tag;
template <typename Cons>
struct cons_iterator_identity;
- template <typename Cons = nil>
+ template <typename Cons = nil_>
struct cons_iterator : iterator_base<cons_iterator<Cons> >
{
typedef cons_iterator_tag fusion_tag;
@@ -35,6 +36,7 @@ namespace boost { namespace fusion
typename add_const<Cons>::type>
identity;
+ BOOST_FUSION_GPU_ENABLED
explicit cons_iterator(cons_type& in_cons)
: cons(in_cons) {}
@@ -49,40 +51,50 @@ namespace boost { namespace fusion
{
typedef forward_traversal_tag category;
typedef cons_iterator_tag fusion_tag;
- typedef nil cons_type;
+ typedef nil_ cons_type;
typedef cons_iterator_identity<
- add_const<nil>::type>
+ add_const<nil_>::type>
identity;
+ BOOST_FUSION_GPU_ENABLED
nil_iterator() {}
- explicit nil_iterator(nil const&) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit nil_iterator(nil_ const&) {}
};
template <>
- struct cons_iterator<nil> : nil_iterator
+ struct cons_iterator<nil_> : nil_iterator
{
+ BOOST_FUSION_GPU_ENABLED
cons_iterator() {}
- explicit cons_iterator(nil const&) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit cons_iterator(nil_ const&) {}
};
template <>
- struct cons_iterator<nil const> : nil_iterator
+ struct cons_iterator<nil_ const> : nil_iterator
{
+ BOOST_FUSION_GPU_ENABLED
cons_iterator() {}
- explicit cons_iterator(nil const&) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit cons_iterator(nil_ const&) {}
};
template <>
struct cons_iterator<list<> > : nil_iterator
{
+ BOOST_FUSION_GPU_ENABLED
cons_iterator() {}
- explicit cons_iterator(nil const&) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit cons_iterator(nil_ const&) {}
};
template <>
struct cons_iterator<list<> const> : nil_iterator
{
+ BOOST_FUSION_GPU_ENABLED
cons_iterator() {}
- explicit cons_iterator(nil const&) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit cons_iterator(nil_ const&) {}
};
}}
diff --git a/3party/boost/boost/fusion/container/list/convert.hpp b/3party/boost/boost/fusion/container/list/convert.hpp
index f356d7e0a1..f34ad396d4 100644
--- a/3party/boost/boost/fusion/container/list/convert.hpp
+++ b/3party/boost/boost/fusion/container/list/convert.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_CONVERT_09232005_1215)
#define FUSION_CONVERT_09232005_1215
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/cons.hpp>
#include <boost/fusion/container/list/detail/build_cons.hpp>
#include <boost/fusion/container/list/detail/convert_impl.hpp>
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
typedef typename build_cons::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
@@ -39,6 +41,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_list<Sequence>::type
as_list(Sequence& seq)
{
@@ -46,6 +49,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_list<Sequence const>::type
as_list(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/at_impl.hpp b/3party/boost/boost/fusion/container/list/detail/at_impl.hpp
index 757463928a..b7688522a3 100644
--- a/3party/boost/boost/fusion/container/list/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/at_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_AT_IMPL_07172005_0726)
#define FUSION_AT_IMPL_07172005_0726
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/add_const.hpp>
@@ -106,6 +107,7 @@ namespace boost { namespace fusion
type;
template <typename Cons, int N2>
+ BOOST_FUSION_GPU_ENABLED
static type
call(Cons& s, mpl::int_<N2>)
{
@@ -113,12 +115,14 @@ namespace boost { namespace fusion
}
template <typename Cons>
+ BOOST_FUSION_GPU_ENABLED
static type
call(Cons& s, mpl::int_<0>)
{
return s.car;
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/list/detail/begin_impl.hpp
index 571e681111..a30223456c 100644
--- a/3party/boost/boost/fusion/container/list/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/begin_impl.hpp
@@ -8,12 +8,13 @@
#if !defined(FUSION_BEGIN_IMPL_07172005_0824)
#define FUSION_BEGIN_IMPL_07172005_0824
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_const.hpp>
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct cons_tag;
@@ -36,6 +37,7 @@ namespace boost { namespace fusion
{
typedef cons_iterator<Sequence> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& t)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/build_cons.hpp b/3party/boost/boost/fusion/container/list/detail/build_cons.hpp
index ef4865227f..0f40700896 100644
--- a/3party/boost/boost/fusion/container/list/detail/build_cons.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/build_cons.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_BUILD_CONS_09232005_1222)
#define FUSION_BUILD_CONS_09232005_1222
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/cons.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/iterator/next.hpp>
@@ -24,12 +25,13 @@ namespace boost { namespace fusion { namespace detail
template <typename First, typename Last>
struct build_cons<First, Last, true>
{
- typedef nil type;
+ typedef nil_ type;
- static nil
+ BOOST_FUSION_GPU_ENABLED
+ static nil_
call(First const&, Last const&)
{
- return nil();
+ return nil_();
}
};
@@ -45,6 +47,7 @@ namespace boost { namespace fusion { namespace detail
, typename next_build_cons::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(First const& f, Last const& l)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/list/detail/convert_impl.hpp
index 19e5fc2f5f..000280e7c3 100644
--- a/3party/boost/boost/fusion/container/list/detail/convert_impl.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/convert_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_CONVERT_IMPL_09232005_1215)
#define FUSION_CONVERT_IMPL_09232005_1215
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/cons.hpp>
#include <boost/fusion/container/list/detail/build_cons.hpp>
#include <boost/fusion/sequence/intrinsic/empty.hpp>
@@ -38,6 +39,7 @@ namespace boost { namespace fusion
typedef typename build_cons::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/deref_impl.hpp b/3party/boost/boost/fusion/container/list/detail/deref_impl.hpp
index a5f75eaeac..aefffd757f 100644
--- a/3party/boost/boost/fusion/container/list/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/deref_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_DEREF_IMPL_07172005_0831)
#define FUSION_DEREF_IMPL_07172005_0831
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/add_const.hpp>
@@ -37,6 +38,7 @@ namespace boost { namespace fusion
, add_reference<value_type> >::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/empty_impl.hpp b/3party/boost/boost/fusion/container/list/detail/empty_impl.hpp
index 5c92c7335e..e25eab0bcc 100644
--- a/3party/boost/boost/fusion/container/list/detail/empty_impl.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/empty_impl.hpp
@@ -7,13 +7,15 @@
#if !defined(BOOST_FUSION_SEQUENCE_EMPTY_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_SEQUENCE_EMPTY_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_convertible.hpp>
+#include <boost/fusion/container/list/nil.hpp>
namespace boost { namespace fusion
{
struct cons_tag;
- struct nil;
+ struct nil_;
template <typename Car, typename Cdr>
struct cons;
@@ -28,7 +30,7 @@ namespace boost { namespace fusion
{
template <typename Sequence>
struct apply
- : boost::is_convertible<Sequence, nil>
+ : boost::is_convertible<Sequence, nil_>
{};
};
}
diff --git a/3party/boost/boost/fusion/container/list/detail/end_impl.hpp b/3party/boost/boost/fusion/container/list/detail/end_impl.hpp
index 3792250c05..9220d24a78 100644
--- a/3party/boost/boost/fusion/container/list/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/end_impl.hpp
@@ -8,12 +8,13 @@
#if !defined(FUSION_END_IMPL_07172005_0828)
#define FUSION_END_IMPL_07172005_0828
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_const.hpp>
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct cons_tag;
@@ -35,9 +36,10 @@ namespace boost { namespace fusion
struct apply
{
typedef cons_iterator<
- typename mpl::if_<is_const<Sequence>, nil const, nil>::type>
+ typename mpl::if_<is_const<Sequence>, nil_ const, nil_>::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence&)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/container/list/detail/equal_to_impl.hpp
index a4d5929913..0cbb6bef4f 100644
--- a/3party/boost/boost/fusion/container/list/detail/equal_to_impl.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/equal_to_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_EQUAL_TO_IMPL_09172005_1120)
#define FUSION_EQUAL_TO_IMPL_09172005_1120
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/mpl/equal_to.hpp>
#include <boost/mpl/and.hpp>
diff --git a/3party/boost/boost/fusion/container/list/detail/list_forward_ctor.hpp b/3party/boost/boost/fusion/container/list/detail/list_forward_ctor.hpp
index 05edc4fe6c..941e2008d5 100644
--- a/3party/boost/boost/fusion/container/list/detail/list_forward_ctor.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/list_forward_ctor.hpp
@@ -34,6 +34,7 @@
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
+ BOOST_FUSION_GPU_ENABLED
#if N == 1
explicit
#endif
diff --git a/3party/boost/boost/fusion/container/list/detail/list_to_cons.hpp b/3party/boost/boost/fusion/container/list/detail/list_to_cons.hpp
index 4a7dbb8306..bc8718631c 100644
--- a/3party/boost/boost/fusion/container/list/detail/list_to_cons.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/list_to_cons.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_LIST_TO_CONS_07172005_1041)
#define FUSION_LIST_TO_CONS_07172005_1041
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/cons.hpp>
#include <boost/fusion/container/list/limits.hpp>
#include <boost/preprocessor/repetition/enum.hpp>
@@ -18,7 +19,7 @@
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct void_;
}}
@@ -61,7 +62,7 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<BOOST_PP_ENUM(FUSION_MAX_LIST_SIZE, FUSION_VOID, _)>
{
- typedef nil type;
+ typedef nil_ type;
};
}}}
diff --git a/3party/boost/boost/fusion/container/list/detail/list_to_cons_call.hpp b/3party/boost/boost/fusion/container/list/detail/list_to_cons_call.hpp
index 4e4c11a02a..430e462c9d 100644
--- a/3party/boost/boost/fusion/container/list/detail/list_to_cons_call.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/list_to_cons_call.hpp
@@ -26,6 +26,7 @@
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
+ BOOST_FUSION_GPU_ENABLED
static type
call(BOOST_PP_ENUM_BINARY_PARAMS(
N, typename detail::call_param<T, >::type _))
diff --git a/3party/boost/boost/fusion/container/list/detail/next_impl.hpp b/3party/boost/boost/fusion/container/list/detail/next_impl.hpp
index 71006e5bb6..7383a9630b 100644
--- a/3party/boost/boost/fusion/container/list/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/next_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_NEXT_IMPL_07172005_0836)
#define FUSION_NEXT_IMPL_07172005_0836
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -44,6 +45,7 @@ namespace boost { namespace fusion
>::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list10.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list10.hpp
index e233b46d44..c8aa725e0c 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list10.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list10.hpp
@@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
struct list
@@ -20,12 +20,15 @@ namespace boost { namespace fusion
list_to_cons;
public:
typedef typename list_to_cons::type inherited_type;
+ BOOST_FUSION_GPU_ENABLED
list()
: inherited_type() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
list(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
: inherited_type(rhs) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
list(Sequence const& rhs)
: inherited_type(rhs) {}
@@ -35,38 +38,49 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
list(typename detail::call_param<T0 >::type _0)
: inherited_type(list_to_cons::call(_0))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: inherited_type(list_to_cons::call(_0 , _1))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: inherited_type(list_to_cons::call(_0 , _1 , _2))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9))
{}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
{
@@ -74,6 +88,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(T const& rhs)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list20.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list20.hpp
index 405681a161..d18fc580cf 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list20.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list20.hpp
@@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
struct list
@@ -20,12 +20,15 @@ namespace boost { namespace fusion
list_to_cons;
public:
typedef typename list_to_cons::type inherited_type;
+ BOOST_FUSION_GPU_ENABLED
list()
: inherited_type() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
list(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
: inherited_type(rhs) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
list(Sequence const& rhs)
: inherited_type(rhs) {}
@@ -35,68 +38,89 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
list(typename detail::call_param<T0 >::type _0)
: inherited_type(list_to_cons::call(_0))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: inherited_type(list_to_cons::call(_0 , _1))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: inherited_type(list_to_cons::call(_0 , _1 , _2))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19))
{}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
{
@@ -104,6 +128,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(T const& rhs)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list30.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list30.hpp
index 841295ef4b..07ebfa6a97 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list30.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list30.hpp
@@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
struct list
@@ -20,12 +20,15 @@ namespace boost { namespace fusion
list_to_cons;
public:
typedef typename list_to_cons::type inherited_type;
+ BOOST_FUSION_GPU_ENABLED
list()
: inherited_type() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
list(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
: inherited_type(rhs) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
list(Sequence const& rhs)
: inherited_type(rhs) {}
@@ -35,98 +38,129 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
list(typename detail::call_param<T0 >::type _0)
: inherited_type(list_to_cons::call(_0))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: inherited_type(list_to_cons::call(_0 , _1))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: inherited_type(list_to_cons::call(_0 , _1 , _2))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29))
{}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
{
@@ -134,6 +168,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(T const& rhs)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list40.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list40.hpp
index c486f6b846..7c10229474 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list40.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list40.hpp
@@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
struct list
@@ -20,12 +20,15 @@ namespace boost { namespace fusion
list_to_cons;
public:
typedef typename list_to_cons::type inherited_type;
+ BOOST_FUSION_GPU_ENABLED
list()
: inherited_type() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
list(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
: inherited_type(rhs) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
list(Sequence const& rhs)
: inherited_type(rhs) {}
@@ -35,128 +38,169 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
list(typename detail::call_param<T0 >::type _0)
: inherited_type(list_to_cons::call(_0))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: inherited_type(list_to_cons::call(_0 , _1))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: inherited_type(list_to_cons::call(_0 , _1 , _2))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39))
{}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
{
@@ -164,6 +208,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(T const& rhs)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list50.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list50.hpp
index 21264094d5..9c4f96ea27 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list50.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list50.hpp
@@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
struct list
@@ -20,12 +20,15 @@ namespace boost { namespace fusion
list_to_cons;
public:
typedef typename list_to_cons::type inherited_type;
+ BOOST_FUSION_GPU_ENABLED
list()
: inherited_type() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
list(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& rhs)
: inherited_type(rhs) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
list(Sequence const& rhs)
: inherited_type(rhs) {}
@@ -35,158 +38,209 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
list(typename detail::call_param<T0 >::type _0)
: inherited_type(list_to_cons::call(_0))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: inherited_type(list_to_cons::call(_0 , _1))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: inherited_type(list_to_cons::call(_0 , _1 , _2))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48))
{}
+ BOOST_FUSION_GPU_ENABLED
list(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48 , typename detail::call_param<T49 >::type _49)
: inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49))
{}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(list<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& rhs)
{
@@ -194,6 +248,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(T const& rhs)
{
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons10.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons10.hpp
index a0f01f515d..ed94114cc8 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons10.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons10.hpp
@@ -17,60 +17,70 @@ namespace boost { namespace fusion { namespace detail
tail_list_to_cons;
typedef typename tail_list_to_cons::type tail_type;
typedef cons<head_type, tail_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0)
{
return type(_0
);
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
{
return type(_0
, tail_list_to_cons::call(_1));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
{
return type(_0
, tail_list_to_cons::call(_1 , _2));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
{
@@ -81,6 +91,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
- typedef nil type;
+ typedef nil_ type;
};
}}}
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons20.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons20.hpp
index b90b7a76f1..188999cfdf 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons20.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons20.hpp
@@ -17,120 +17,140 @@ namespace boost { namespace fusion { namespace detail
tail_list_to_cons;
typedef typename tail_list_to_cons::type tail_type;
typedef cons<head_type, tail_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0)
{
return type(_0
);
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
{
return type(_0
, tail_list_to_cons::call(_1));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
{
return type(_0
, tail_list_to_cons::call(_1 , _2));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
{
@@ -141,6 +161,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
- typedef nil type;
+ typedef nil_ type;
};
}}}
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons30.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons30.hpp
index 8b8a046d35..1569312b39 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons30.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons30.hpp
@@ -17,180 +17,210 @@ namespace boost { namespace fusion { namespace detail
tail_list_to_cons;
typedef typename tail_list_to_cons::type tail_type;
typedef cons<head_type, tail_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0)
{
return type(_0
);
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
{
return type(_0
, tail_list_to_cons::call(_1));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
{
return type(_0
, tail_list_to_cons::call(_1 , _2));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
{
@@ -201,6 +231,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
- typedef nil type;
+ typedef nil_ type;
};
}}}
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons40.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons40.hpp
index a435c02109..b2650b3856 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons40.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons40.hpp
@@ -17,240 +17,280 @@ namespace boost { namespace fusion { namespace detail
tail_list_to_cons;
typedef typename tail_list_to_cons::type tail_type;
typedef cons<head_type, tail_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0)
{
return type(_0
);
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
{
return type(_0
, tail_list_to_cons::call(_1));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
{
return type(_0
, tail_list_to_cons::call(_1 , _2));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
{
@@ -261,6 +301,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
- typedef nil type;
+ typedef nil_ type;
};
}}}
diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons50.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons50.hpp
index 7837e9c23b..b538b703ef 100644
--- a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons50.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons50.hpp
@@ -17,300 +17,350 @@ namespace boost { namespace fusion { namespace detail
tail_list_to_cons;
typedef typename tail_list_to_cons::type tail_type;
typedef cons<head_type, tail_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0)
{
return type(_0
);
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
{
return type(_0
, tail_list_to_cons::call(_1));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
{
return type(_0
, tail_list_to_cons::call(_1 , _2));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48)
{
return type(_0
, tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48));
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48 , typename detail::call_param<T49 >::type _49)
{
@@ -321,6 +371,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
- typedef nil type;
+ typedef nil_ type;
};
}}}
diff --git a/3party/boost/boost/fusion/container/list/detail/reverse_cons.hpp b/3party/boost/boost/fusion/container/list/detail/reverse_cons.hpp
index 59178e84bf..f80e2c2d30 100644
--- a/3party/boost/boost/fusion/container/list/detail/reverse_cons.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/reverse_cons.hpp
@@ -7,12 +7,13 @@
#if !defined(BOOST_FUSION_REVERSE_CONS_HPP_INCLUDED)
#define BOOST_FUSION_REVERSE_CONS_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/cons_fwd.hpp>
namespace boost { namespace fusion { namespace detail
{
////////////////////////////////////////////////////////////////////////////
- template<typename Cons, typename State = nil>
+ template<typename Cons, typename State = nil_>
struct reverse_cons;
template<typename Car, typename Cdr, typename State>
@@ -21,6 +22,7 @@ namespace boost { namespace fusion { namespace detail
typedef reverse_cons<Cdr, cons<Car, State> > impl;
typedef typename impl::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(cons<Car, Cdr> const &cons, State const &state = State())
{
typedef fusion::cons<Car, State> cdr_type;
@@ -29,11 +31,12 @@ namespace boost { namespace fusion { namespace detail
};
template<typename State>
- struct reverse_cons<nil, State>
+ struct reverse_cons<nil_, State>
{
typedef State type;
- static State const &call(nil const &, State const &state = State())
+ BOOST_FUSION_GPU_ENABLED
+ static State const &call(nil_ const &, State const &state = State())
{
return state;
}
diff --git a/3party/boost/boost/fusion/container/list/detail/value_at_impl.hpp b/3party/boost/boost/fusion/container/list/detail/value_at_impl.hpp
index 353f8d5bbd..ea9a859361 100644
--- a/3party/boost/boost/fusion/container/list/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/container/list/detail/value_at_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VALUE_AT_IMPL_07172005_0952)
#define FUSION_VALUE_AT_IMPL_07172005_0952
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/mpl/eval_if.hpp>
diff --git a/3party/boost/boost/fusion/container/list/limits.hpp b/3party/boost/boost/fusion/container/list/limits.hpp
index 1d545ba044..cc64ad7224 100644
--- a/3party/boost/boost/fusion/container/list/limits.hpp
+++ b/3party/boost/boost/fusion/container/list/limits.hpp
@@ -7,6 +7,8 @@
#if !defined(FUSION_LIST_LIMITS_07172005_0112)
#define FUSION_LIST_LIMITS_07172005_0112
+#include <boost/fusion/support/detail/pp_round.hpp>
+
#if !defined(FUSION_MAX_LIST_SIZE)
# define FUSION_MAX_LIST_SIZE 10
#else
diff --git a/3party/boost/boost/fusion/container/list/list.hpp b/3party/boost/boost/fusion/container/list/list.hpp
index 45e2f6376d..9e042bb481 100644
--- a/3party/boost/boost/fusion/container/list/list.hpp
+++ b/3party/boost/boost/fusion/container/list/list.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_LIST_07172005_1153)
#define FUSION_LIST_07172005_1153
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/list_fwd.hpp>
#include <boost/fusion/container/list/detail/list_to_cons.hpp>
@@ -32,7 +33,7 @@
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
struct void_;
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_LIST_SIZE, typename T)>
@@ -47,14 +48,17 @@ namespace boost { namespace fusion
public:
typedef typename list_to_cons::type inherited_type;
+ BOOST_FUSION_GPU_ENABLED
list()
: inherited_type() {}
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_LIST_SIZE, typename U)>
+ BOOST_FUSION_GPU_ENABLED
list(list<BOOST_PP_ENUM_PARAMS(FUSION_MAX_LIST_SIZE, U)> const& rhs)
: inherited_type(rhs) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
list(Sequence const& rhs)
: inherited_type(rhs) {}
@@ -68,6 +72,7 @@ namespace boost { namespace fusion
#include <boost/fusion/container/list/detail/list_forward_ctor.hpp>
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_LIST_SIZE, typename U)>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(list<BOOST_PP_ENUM_PARAMS(FUSION_MAX_LIST_SIZE, U)> const& rhs)
{
@@ -76,6 +81,7 @@ namespace boost { namespace fusion
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
list&
operator=(T const& rhs)
{
diff --git a/3party/boost/boost/fusion/container/list/list_fwd.hpp b/3party/boost/boost/fusion/container/list/list_fwd.hpp
index a142689227..d827d283e8 100644
--- a/3party/boost/boost/fusion/container/list/list_fwd.hpp
+++ b/3party/boost/boost/fusion/container/list/list_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_LIST_FORWARD_07172005_0224)
#define FUSION_LIST_FORWARD_07172005_0224
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/limits.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
diff --git a/3party/boost/boost/fusion/container/list/nil.hpp b/3party/boost/boost/fusion/container/list/nil.hpp
new file mode 100644
index 0000000000..c94186da93
--- /dev/null
+++ b/3party/boost/boost/fusion/container/list/nil.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005, 2014 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)
+==============================================================================*/
+#if !defined(FUSION_NIL_04232014_0843)
+#define FUSION_NIL_04232014_0843
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/list/cons_fwd.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct void_;
+ struct cons_tag;
+ struct forward_traversal_tag;
+ struct fusion_sequence_tag;
+
+ struct nil_ : sequence_base<nil_>
+ {
+ typedef mpl::int_<0> size;
+ typedef cons_tag fusion_tag;
+ typedef fusion_sequence_tag tag; // this gets picked up by MPL
+ typedef mpl::false_ is_view;
+ typedef forward_traversal_tag category;
+ typedef void_ car_type;
+ typedef void_ cdr_type;
+
+ BOOST_FUSION_GPU_ENABLED
+ nil_() {}
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ nil_(Iterator const& /*iter*/, mpl::true_ /*this_is_an_iterator*/)
+ {}
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ void assign_from_iter(Iterator const& /*iter*/)
+ {
+ }
+ };
+}}
+
+#endif
+
diff --git a/3party/boost/boost/fusion/container/map.hpp b/3party/boost/boost/fusion/container/map.hpp
index b9e8cd2c0f..9599889813 100644
--- a/3party/boost/boost/fusion/container/map.hpp
+++ b/3party/boost/boost/fusion/container/map.hpp
@@ -7,7 +7,7 @@
#if !defined(FUSION_SEQUENCE_CLASS_MAP_10022005_0606)
#define FUSION_SEQUENCE_CLASS_MAP_10022005_0606
-#include <boost/fusion/container/map/limits.hpp>
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/map/map.hpp>
#include <boost/fusion/container/map/map_fwd.hpp>
#include <boost/fusion/container/map/convert.hpp>
diff --git a/3party/boost/boost/fusion/container/map/convert.hpp b/3party/boost/boost/fusion/container/map/convert.hpp
index 5bb6fc9dde..d106610b7b 100644
--- a/3party/boost/boost/fusion/container/map/convert.hpp
+++ b/3party/boost/boost/fusion/container/map/convert.hpp
@@ -4,44 +4,114 @@
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_CONVERT_09232005_1340)
-#define FUSION_CONVERT_09232005_1340
+#if !defined(FUSION_CONVERT_MAIN_09232005_1340)
+#define FUSION_CONVERT_MAIN_09232005_1340
-#include <boost/fusion/container/map/detail/as_map.hpp>
-#include <boost/fusion/container/map/detail/convert_impl.hpp>
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/map/map.hpp>
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/sequence/intrinsic/size.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename It, bool is_assoc>
+ struct pair_from
+ {
+ typedef typename result_of::value_of<It>::type type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static inline type call(It const& it)
+ {
+ return *it;
+ }
+ };
+
+ template <typename It>
+ struct pair_from<It, true>
+ {
+ typedef typename result_of::key_of<It>::type key_type;
+ typedef typename result_of::value_of_data<It>::type data_type;
+ typedef typename fusion::pair<key_type, data_type> type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static inline type call(It const& it)
+ {
+ return type(deref_data(it));
+ }
+ };
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+// Without variadics, we will use the PP version
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
+# include <boost/fusion/container/map/detail/cpp03/convert.hpp>
+
+#else
+///////////////////////////////////////////////////////////////////////////////
+// C++11 variadic implementation
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/fusion/container/map/detail/build_map.hpp>
namespace boost { namespace fusion
{
namespace result_of
{
template <typename Sequence>
- struct as_map
+ struct as_map :
+ detail::build_map<
+ typename result_of::begin<Sequence>::type
+ , typename result_of::end<Sequence>::type
+ , is_base_of<
+ associative_tag
+ , typename traits::category_of<Sequence>::type>::value
+ >
{
- typedef typename detail::as_map<result_of::size<Sequence>::value> gen;
- typedef typename gen::
- template apply<typename result_of::begin<Sequence>::type>::type
- type;
};
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_map<Sequence>::type
as_map(Sequence& seq)
{
- typedef typename result_of::as_map<Sequence>::gen gen;
- return gen::call(fusion::begin(seq));
+ typedef result_of::as_map<Sequence> gen;
+ return gen::call(fusion::begin(seq), fusion::end(seq));
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_map<Sequence const>::type
as_map(Sequence const& seq)
{
- typedef typename result_of::as_map<Sequence const>::gen gen;
- return gen::call(fusion::begin(seq));
+ typedef result_of::as_map<Sequence const> gen;
+ return gen::call(fusion::begin(seq), fusion::end(seq));
+ }
+
+ namespace extension
+ {
+ template <typename T>
+ struct convert_impl;
+
+ template <>
+ struct convert_impl<map_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef typename
+ result_of::as_map<Sequence>::type
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type call(Sequence& seq)
+ {
+ typedef result_of::as_map<Sequence> gen;
+ return gen::call(fusion::begin(seq), fusion::end(seq));
+ }
+ };
+ };
}
}}
#endif
+#endif
+
diff --git a/3party/boost/boost/fusion/container/map/detail/as_map.hpp b/3party/boost/boost/fusion/container/map/detail/as_map.hpp
deleted file mode 100644
index b1a4d09f1f..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/as_map.hpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#if !defined(FUSION_AS_MAP_0932005_1339)
-#define FUSION_AS_MAP_0932005_1339
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/inc.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/fusion/container/map/map.hpp>
-#include <boost/fusion/iterator/value_of.hpp>
-#include <boost/fusion/iterator/deref.hpp>
-#include <boost/fusion/iterator/next.hpp>
-
-namespace boost { namespace fusion { namespace detail
-{
- template <int size>
- struct as_map;
-
- template <>
- struct as_map<0>
- {
- template <typename Iterator>
- struct apply
- {
- typedef map<> type;
- };
-
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator)
- {
- return map<>();
- }
- };
-}}}
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/map/detail/preprocessed/as_map.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_map" FUSION_MAX_MAP_SIZE_STR ".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
-
-namespace boost { namespace fusion { namespace detail
-{
-#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \
- typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \
- BOOST_PP_CAT(I, BOOST_PP_INC(n));
-
-#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data) \
- typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n)) \
- BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
-
-#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data) \
- typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type \
- BOOST_PP_CAT(T, n);
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/map/detail/as_map.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_NEXT_ITERATOR
-#undef BOOST_FUSION_NEXT_CALL_ITERATOR
-#undef BOOST_FUSION_VALUE_OF_ITERATOR
-
-}}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
- template <>
- struct as_map<N>
- {
- template <typename I0>
- struct apply
- {
- BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _)
- BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _)
- typedef map<BOOST_PP_ENUM_PARAMS(N, T)> type;
- };
-
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_CALL_ITERATOR, _)
- return result(BOOST_PP_ENUM_PARAMS(N, *i));
- }
- };
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
diff --git a/3party/boost/boost/fusion/container/map/detail/at_impl.hpp b/3party/boost/boost/fusion/container/map/detail/at_impl.hpp
index 025c1724a1..c2a565ebe0 100644
--- a/3party/boost/boost/fusion/container/map/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/container/map/detail/at_impl.hpp
@@ -1,17 +1,14 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Copyright (c) 2011 Brandon Kohn
+ Copyright (c) 2001-2013 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_FUSION_MAP_DETAIL_AT_IMPL_HPP)
-#define BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP
+#if !defined(BOOST_FUSION_MAP_DETAIL_AT_IMPL_02042013_0821)
+#define BOOST_FUSION_MAP_DETAIL_AT_IMPL_02042013_0821
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/int.hpp>
namespace boost { namespace fusion
{
@@ -26,36 +23,38 @@ namespace boost { namespace fusion
struct at_impl<map_tag>
{
template <typename Sequence, typename N>
- struct apply
+ struct apply
{
- typedef typename
- mpl::at<typename Sequence::storage_type::types, N>::type
- element;
- typedef typename detail::ref_result<element>::type type;
-
+ typedef mpl::int_<N::value> index;
+ typedef
+ decltype(std::declval<Sequence>().get(index()))
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& m)
{
- return m.get_data().at_impl(N());
+ return m.get(index());
}
};
template <typename Sequence, typename N>
struct apply<Sequence const, N>
{
- typedef typename
- mpl::at<typename Sequence::storage_type::types, N>::type
- element;
- typedef typename detail::cref_result<element>::type type;
-
+ typedef mpl::int_<N::value> index;
+ typedef
+ decltype(std::declval<Sequence const>().get(index()))
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence const& m)
{
- return m.get_data().at_impl(N());
+ return m.get(index());
}
};
};
}
}}
-#endif //BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/at_key_impl.hpp b/3party/boost/boost/fusion/container/map/detail/at_key_impl.hpp
new file mode 100644
index 0000000000..5b57c4b835
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/at_key_impl.hpp
@@ -0,0 +1,61 @@
+/*=============================================================================
+ Copyright (c) 2001-2013 Joel de Guzman
+
+ 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_FUSION_MAP_DETAIL_AT_KEY_IMPL_02042013_0821)
+#define BOOST_FUSION_MAP_DETAIL_AT_KEY_IMPL_02042013_0821
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion
+{
+ struct map_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct at_key_impl;
+
+ template <>
+ struct at_key_impl<map_tag>
+ {
+ template <typename Sequence, typename Key>
+ struct apply
+ {
+ typedef
+ decltype(std::declval<Sequence>().get(mpl::identity<Key>()))
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(Sequence& m)
+ {
+ return m.get(mpl::identity<Key>());
+ }
+ };
+
+ template <typename Sequence, typename Key>
+ struct apply<Sequence const, Key>
+ {
+ typedef
+ decltype(std::declval<Sequence const>().get(mpl::identity<Key>()))
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(Sequence const& m)
+ {
+ return m.get(mpl::identity<Key>());
+ }
+ };
+ };
+ }
+}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/map/detail/begin_impl.hpp
index 2d0f854be7..9c8f4acbeb 100644
--- a/3party/boost/boost/fusion/container/map/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/container/map/detail/begin_impl.hpp
@@ -1,43 +1,40 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2005-2013 Joel de Guzman
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_FUSION_MAP_BEGIN_IMPL_02042013_0857)
+#define BOOST_FUSION_MAP_BEGIN_IMPL_02042013_0857
-#ifndef BOOST_FUSION_CONTAINER_MAP_DETAIL_BEGIN_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_MAP_DETAIL_BEGIN_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/map/map_iterator.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
-
-namespace boost { namespace fusion { namespace extension
+namespace boost { namespace fusion
{
- template <typename>
- struct begin_impl;
+ struct map_tag;
- template <>
- struct begin_impl<map_tag>
+ namespace extension
{
- template <typename Seq>
- struct apply
- {
- typedef
- basic_iterator<
- map_iterator_tag
- , typename Seq::category
- , Seq
- , 0
- >
- type;
+ template<typename T>
+ struct begin_impl;
- static type
- call(Seq& seq)
+ template<>
+ struct begin_impl<map_tag>
+ {
+ template<typename Sequence>
+ struct apply
{
- return type(seq,0);
- }
+ typedef map_iterator<Sequence, 0> type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type call(Sequence& seq)
+ {
+ return type(seq);
+ }
+ };
};
- };
-}}}
+ }
+}}
#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/build_map.hpp b/3party/boost/boost/fusion/container/map/detail/build_map.hpp
new file mode 100644
index 0000000000..f5a6875f83
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/build_map.hpp
@@ -0,0 +1,80 @@
+/*=============================================================================
+ Copyright (c) 2005-2013 Joel de Guzman
+
+ 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_FUSION_BUILD_MAP_02042013_1448)
+#define BOOST_FUSION_BUILD_MAP_02042013_1448
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/container/map/map.hpp>
+#include <boost/fusion/algorithm/transformation/push_front.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename First, typename Last, bool is_assoc
+ , bool is_empty = result_of::equal_to<First, Last>::value
+ >
+ struct build_map;
+
+ template <typename First, typename Last, bool is_assoc>
+ struct build_map<First, Last, is_assoc, true>
+ {
+ typedef map<> type;
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(First const&, Last const&)
+ {
+ return type();
+ }
+ };
+
+ template <typename T, typename Rest>
+ struct push_front_map;
+
+ template <typename T, typename ...Rest>
+ struct push_front_map<T, map<Rest...>>
+ {
+ typedef map<T, Rest...> type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(T const& first, map<Rest...> const& rest)
+ {
+ return type(push_front(rest, first));
+ }
+ };
+
+ template <typename First, typename Last, bool is_assoc>
+ struct build_map<First, Last, is_assoc, false>
+ {
+ typedef
+ build_map<typename result_of::next<First>::type, Last, is_assoc>
+ next_build_map;
+
+ typedef push_front_map<
+ typename pair_from<First, is_assoc>::type
+ , typename next_build_map::type>
+ push_front;
+
+ typedef typename push_front::type type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(First const& f, Last const& l)
+ {
+ return push_front::call(
+ pair_from<First, is_assoc>::call(f)
+ , next_build_map::call(fusion::next(f), l));
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/map/detail/convert_impl.hpp
deleted file mode 100644
index c4b9389da4..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/convert_impl.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- 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_CONVERT_IMPL_09232005_1340)
-#define FUSION_CONVERT_IMPL_09232005_1340
-
-#include <boost/fusion/container/map/detail/as_map.hpp>
-#include <boost/fusion/container/map/map.hpp>
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/sequence/intrinsic/size.hpp>
-
-namespace boost { namespace fusion
-{
- struct map_tag;
-
- namespace extension
- {
- template <typename T>
- struct convert_impl;
-
- template <>
- struct convert_impl<map_tag>
- {
- template <typename Sequence>
- struct apply
- {
- typedef typename detail::as_map<result_of::size<Sequence>::value> gen;
- typedef typename gen::
- template apply<typename result_of::begin<Sequence>::type>::type
- type;
-
- static type call(Sequence& seq)
- {
- return gen::call(fusion::begin(seq));
- }
- };
- };
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/as_map.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/as_map.hpp
new file mode 100644
index 0000000000..62748be143
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/as_map.hpp
@@ -0,0 +1,136 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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_PP_IS_ITERATING
+#if !defined(FUSION_AS_MAP_0932005_1339)
+#define FUSION_AS_MAP_0932005_1339
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/fusion/container/map/detail/cpp03/map.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <int size, bool is_assoc>
+ struct as_map;
+
+ template <bool is_assoc>
+ struct as_map<0, is_assoc>
+ {
+ template <typename Iterator>
+ struct apply
+ {
+ typedef map<> type;
+ };
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator)
+ {
+ return map<>();
+ }
+ };
+}}}
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/as_map.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_map" FUSION_MAX_MAP_SIZE_STR ".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion { namespace detail
+{
+#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \
+ typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \
+ BOOST_PP_CAT(I, BOOST_PP_INC(n));
+
+#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data) \
+ typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n)) \
+ BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
+
+#define BOOST_FUSION_PAIR_FROM_ITERATOR(z, n, data) \
+ typedef pair_from<BOOST_PP_CAT(I, n), is_assoc> BOOST_PP_CAT(D, n); \
+ typedef typename BOOST_PP_CAT(D, n)::type BOOST_PP_CAT(T, n);
+
+#define BOOST_FUSION_DREF_CALL_ITERATOR(z, n, data) \
+ gen::BOOST_PP_CAT(D, n)::call(BOOST_PP_CAT(i, n))
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/map/detail/cpp03/as_map.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_NEXT_ITERATOR
+#undef BOOST_FUSION_NEXT_CALL_ITERATOR
+#undef BOOST_FUSION_PAIR_FROM_ITERATOR
+#undef BOOST_FUSION_DREF_CALL_ITERATOR
+
+}}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+// Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+ template <bool is_assoc>
+ struct as_map<N, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_ITERATOR, _)
+ BOOST_PP_REPEAT(N, BOOST_FUSION_PAIR_FROM_ITERATOR, _)
+ typedef map<BOOST_PP_ENUM_PARAMS(N, T)> type;
+ };
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_CALL_ITERATOR, _)
+ return result(BOOST_PP_ENUM(N, BOOST_FUSION_DREF_CALL_ITERATOR, _));
+ }
+ };
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/at_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/at_impl.hpp
new file mode 100644
index 0000000000..8a3209d75a
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/at_impl.hpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2011 Brandon Kohn
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP)
+#define BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion
+{
+ struct map_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct at_impl;
+
+ template <>
+ struct at_impl<map_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply
+ {
+ typedef typename
+ mpl::at<typename Sequence::storage_type::types, N>::type
+ element;
+ typedef typename detail::ref_result<element>::type type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(Sequence& m)
+ {
+ return m.get_data().at_impl(N());
+ }
+ };
+
+ template <typename Sequence, typename N>
+ struct apply<Sequence const, N>
+ {
+ typedef typename
+ mpl::at<typename Sequence::storage_type::types, N>::type
+ element;
+ typedef typename detail::cref_result<element>::type type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(Sequence const& m)
+ {
+ return m.get_data().at_impl(N());
+ }
+ };
+ };
+ }
+}}
+
+#endif //BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/begin_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/begin_impl.hpp
new file mode 100644
index 0000000000..5fe1466e18
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/begin_impl.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2009 Christopher Schmidt
+
+ 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_FUSION_CONTAINER_MAP_DETAIL_BEGIN_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_MAP_DETAIL_BEGIN_IMPL_HPP
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<map_tag>
+ {
+ template <typename Seq>
+ struct apply
+ {
+ typedef
+ basic_iterator<
+ map_iterator_tag
+ , typename Seq::category
+ , Seq
+ , 0
+ >
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(Seq& seq)
+ {
+ return type(seq,0);
+ }
+ };
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/convert.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/convert.hpp
new file mode 100644
index 0000000000..a03840ce13
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/convert.hpp
@@ -0,0 +1,57 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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_CONVERT_09232005_1340)
+#define FUSION_CONVERT_09232005_1340
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/map/detail/cpp03/as_map.hpp>
+#include <boost/fusion/container/map/detail/cpp03/convert_impl.hpp>
+#include <boost/fusion/container/map/detail/cpp03/map.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct as_map
+ {
+ typedef typename
+ detail::as_map<
+ result_of::size<Sequence>::value
+ , is_base_of<
+ associative_tag
+ , typename traits::category_of<Sequence>::type>::value
+ >
+ gen;
+ typedef typename gen::
+ template apply<typename result_of::begin<Sequence>::type>::type
+ type;
+ };
+ }
+
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ inline typename result_of::as_map<Sequence>::type
+ as_map(Sequence& seq)
+ {
+ typedef typename result_of::as_map<Sequence>::gen gen;
+ return gen::call(fusion::begin(seq));
+ }
+
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ inline typename result_of::as_map<Sequence const>::type
+ as_map(Sequence const& seq)
+ {
+ typedef typename result_of::as_map<Sequence const>::gen gen;
+ return gen::call(fusion::begin(seq));
+ }
+}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/convert_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/convert_impl.hpp
new file mode 100644
index 0000000000..14a821e879
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/convert_impl.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ 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_CONVERT_IMPL_09232005_1340)
+#define FUSION_CONVERT_IMPL_09232005_1340
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/map/detail/cpp03/as_map.hpp>
+#include <boost/fusion/container/map/detail/cpp03/map.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+
+namespace boost { namespace fusion
+{
+ struct map_tag;
+
+ namespace extension
+ {
+ template <typename T>
+ struct convert_impl;
+
+ template <>
+ struct convert_impl<map_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef typename
+ detail::as_map<
+ result_of::size<Sequence>::value
+ , is_base_of<
+ associative_tag
+ , typename traits::category_of<Sequence>::type>::value
+ >
+ gen;
+ typedef typename gen::
+ template apply<typename result_of::begin<Sequence>::type>::type
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type call(Sequence& seq)
+ {
+ return gen::call(fusion::begin(seq));
+ }
+ };
+ };
+ }
+}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/deref_data_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/deref_data_impl.hpp
new file mode 100644
index 0000000000..7be6fd962a
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/deref_data_impl.hpp
@@ -0,0 +1,49 @@
+/*=============================================================================
+ Copyright (c) 2009 Christopher Schmidt
+
+ 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_FUSION_CONTAINER_MAP_DETAIL_DEREF_DATA_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_MAP_DETAIL_DEREF_DATA_IMPL_HPP
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename>
+ struct deref_data_impl;
+
+ template <>
+ struct deref_data_impl<map_iterator_tag>
+ {
+ template <typename It>
+ struct apply
+ {
+ typedef typename result_of::value_of<It>::type::second_type data;
+
+ typedef typename
+ mpl::if_<
+ is_const<typename It::seq_type>
+ , typename detail::cref_result<data>::type
+ , typename detail::ref_result<data>::type
+ >::type
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(It const& it)
+ {
+ return fusion::deref(it).second;
+ }
+ };
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/deref_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/deref_impl.hpp
new file mode 100644
index 0000000000..260c5dfddd
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/deref_impl.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+ Copyright (c) 2009 Christopher Schmidt
+
+ 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_FUSION_CONTAINER_MAP_DETAIL_DEREF_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_MAP_DETAIL_DEREF_IMPL_HPP
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<map_iterator_tag>
+ {
+ template <typename It>
+ struct apply
+ {
+ typedef typename
+ result_of::at<
+ typename mpl::if_<
+ is_const<typename It::seq_type>
+ , typename It::seq_type::storage_type const
+ , typename It::seq_type::storage_type
+ >::type
+ , typename It::index
+ >::type
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(It const& it)
+ {
+ return fusion::at<typename It::index>(it.seq->get_data());
+ }
+ };
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/end_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/end_impl.hpp
new file mode 100644
index 0000000000..33940c7a7e
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/end_impl.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2009 Christopher Schmidt
+
+ 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_FUSION_CONTAINER_MAP_DETAIL_END_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_MAP_DETAIL_END_IMPL_HPP
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename>
+ struct end_impl;
+
+ template <>
+ struct end_impl<map_tag>
+ {
+ template <typename Seq>
+ struct apply
+ {
+ typedef
+ basic_iterator<
+ map_iterator_tag
+ , typename Seq::category
+ , Seq
+ , Seq::size::value
+ >
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(Seq& seq)
+ {
+ return type(seq,0);
+ }
+ };
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/key_of_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/key_of_impl.hpp
new file mode 100644
index 0000000000..db3b4fff0e
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/key_of_impl.hpp
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2009 Christopher Schmidt
+
+ 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_FUSION_CONTAINER_MAP_DETAIL_KEY_OF_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_MAP_DETAIL_KEY_OF_IMPL_HPP
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/map/detail/cpp03/value_of_impl.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename>
+ struct key_of_impl;
+
+ template <>
+ struct key_of_impl<map_iterator_tag>
+ {
+ template <typename It>
+ struct apply
+ {
+ typedef typename
+ value_of_impl<map_iterator_tag>::
+ template apply<It>::type::first_type
+ type;
+ };
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/limits.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/limits.hpp
new file mode 100644
index 0000000000..43b5abb261
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/limits.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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_MAP_LIMITS_07212005_1104)
+#define FUSION_MAP_LIMITS_07212005_1104
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/vector/limits.hpp>
+
+#if !defined(FUSION_MAX_MAP_SIZE)
+# define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE
+#else
+# if FUSION_MAX_MAP_SIZE < 3
+# undef FUSION_MAX_MAP_SIZE
+# if (FUSION_MAX_VECTOR_SIZE > 10)
+# define FUSION_MAX_MAP_SIZE 10
+# else
+# define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE
+# endif
+# endif
+#endif
+
+#define FUSION_MAX_MAP_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_MAP_SIZE))
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/map.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/map.hpp
new file mode 100644
index 0000000000..8673895ea8
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/map.hpp
@@ -0,0 +1,111 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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_MAP_07212005_1106)
+#define FUSION_MAP_07212005_1106
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/support/pair.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/container/map/detail/cpp03/map_fwd.hpp>
+#include <boost/fusion/container/map/detail/cpp03/at_impl.hpp>
+#include <boost/fusion/container/map/detail/cpp03/value_at_impl.hpp>
+#include <boost/fusion/container/map/detail/cpp03/begin_impl.hpp>
+#include <boost/fusion/container/map/detail/cpp03/end_impl.hpp>
+#include <boost/fusion/container/map/detail/cpp03/value_of_impl.hpp>
+#include <boost/fusion/container/map/detail/cpp03/deref_data_impl.hpp>
+#include <boost/fusion/container/map/detail/cpp03/deref_impl.hpp>
+#include <boost/fusion/container/map/detail/cpp03/key_of_impl.hpp>
+#include <boost/fusion/container/map/detail/cpp03/value_of_data_impl.hpp>
+#include <boost/fusion/container/vector/vector.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/map" FUSION_MAX_MAP_SIZE_STR ".hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion
+{
+ struct void_;
+ struct fusion_sequence_tag;
+
+ template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, typename T)>
+ struct map : sequence_base<map<BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)> >
+ {
+ struct category : random_access_traversal_tag, associative_tag {};
+
+ typedef map_tag fusion_tag;
+ typedef fusion_sequence_tag tag; // this gets picked up by MPL
+ typedef mpl::false_ is_view;
+
+ typedef vector<
+ BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)>
+ storage_type;
+
+ typedef typename storage_type::size size;
+
+ BOOST_FUSION_GPU_ENABLED
+ map()
+ : data() {}
+
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ map(Sequence const& rhs)
+ : data(rhs) {}
+
+ #include <boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp>
+
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(T const& rhs)
+ {
+ data = rhs;
+ return *this;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(map const& rhs)
+ {
+ data = rhs.data;
+ return *this;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type const& get_data() const { return data; }
+
+ private:
+
+ storage_type data;
+ };
+}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp
new file mode 100644
index 0000000000..ac303788e2
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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_PP_IS_ITERATING
+#if !defined(FUSION_MAP_FORWARD_CTOR_07222005_0106)
+#define FUSION_MAP_FORWARD_CTOR_07222005_0106
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 \
+ <boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
+#include BOOST_PP_ITERATE()
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+// Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+ BOOST_FUSION_GPU_ENABLED
+#if N == 1
+ explicit
+#endif
+ map(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
+ : data(BOOST_PP_ENUM_PARAMS(N, _)) {}
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/map_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/map_fwd.hpp
new file mode 100644
index 0000000000..cf26fdddc3
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/map_fwd.hpp
@@ -0,0 +1,53 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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_MAP_FORWARD_07212005_1105)
+#define FUSION_MAP_FORWARD_07212005_1105
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/map/detail/cpp03/limits.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map_fwd.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "preprocessed/map" FUSION_MAX_MAP_SIZE_STR "_fwd.hpp")
+#endif
+
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
+
+namespace boost { namespace fusion
+{
+ struct void_;
+ struct map_tag;
+ struct map_iterator_tag;
+
+ template <
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+ FUSION_MAX_MAP_SIZE, typename T, void_)
+ >
+ struct map;
+}}
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(output: null)
+#endif
+
+#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map.hpp
new file mode 100644
index 0000000000..1d1be0804d
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if FUSION_MAX_MAP_SIZE <= 10
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/as_map10.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 20
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/as_map20.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 30
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/as_map30.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 40
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/as_map40.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 50
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/as_map50.hpp>
+#else
+#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers"
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map10.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map10.hpp
new file mode 100644
index 0000000000..c5273214f6
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map10.hpp
@@ -0,0 +1,221 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <bool is_assoc>
+ struct as_map<1, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0;
+ typedef map<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(gen::D0::call(i0));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<2, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1;
+ typedef map<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(gen::D0::call(i0) , gen::D1::call(i1));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<3, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2;
+ typedef map<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<4, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3;
+ typedef map<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<5, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4;
+ typedef map<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<6, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<7, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<8, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<9, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<10, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9));
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map20.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map20.hpp
new file mode 100644
index 0000000000..b62cf67526
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map20.hpp
@@ -0,0 +1,431 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <bool is_assoc>
+ struct as_map<1, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0;
+ typedef map<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(gen::D0::call(i0));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<2, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1;
+ typedef map<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(gen::D0::call(i0) , gen::D1::call(i1));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<3, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2;
+ typedef map<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<4, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3;
+ typedef map<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<5, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4;
+ typedef map<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<6, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<7, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<8, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<9, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<10, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<11, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<12, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<13, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<14, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<15, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<16, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<17, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<18, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<19, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<20, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19));
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map30.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map30.hpp
new file mode 100644
index 0000000000..bb2c6d539a
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map30.hpp
@@ -0,0 +1,641 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <bool is_assoc>
+ struct as_map<1, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0;
+ typedef map<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(gen::D0::call(i0));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<2, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1;
+ typedef map<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(gen::D0::call(i0) , gen::D1::call(i1));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<3, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2;
+ typedef map<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<4, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3;
+ typedef map<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<5, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4;
+ typedef map<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<6, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<7, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<8, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<9, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<10, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<11, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<12, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<13, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<14, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<15, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<16, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<17, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<18, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<19, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<20, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<21, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<22, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<23, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<24, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<25, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<26, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<27, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<28, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<29, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<30, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29));
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map40.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map40.hpp
new file mode 100644
index 0000000000..1c4d7c60a9
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map40.hpp
@@ -0,0 +1,851 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <bool is_assoc>
+ struct as_map<1, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0;
+ typedef map<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(gen::D0::call(i0));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<2, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1;
+ typedef map<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(gen::D0::call(i0) , gen::D1::call(i1));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<3, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2;
+ typedef map<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<4, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3;
+ typedef map<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<5, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4;
+ typedef map<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<6, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<7, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<8, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<9, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<10, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<11, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<12, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<13, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<14, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<15, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<16, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<17, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<18, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<19, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<20, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<21, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<22, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<23, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<24, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<25, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<26, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<27, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<28, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<29, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<30, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<31, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<32, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<33, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<34, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<35, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<36, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<37, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<38, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<39, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<40, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39));
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map50.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map50.hpp
new file mode 100644
index 0000000000..e9cec05b5c
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/as_map50.hpp
@@ -0,0 +1,1061 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion { namespace detail
+{
+ template <bool is_assoc>
+ struct as_map<1, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0;
+ typedef map<T0> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+
+ return result(gen::D0::call(i0));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<2, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1;
+ typedef map<T0 , T1> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0);
+ return result(gen::D0::call(i0) , gen::D1::call(i1));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<3, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2;
+ typedef map<T0 , T1 , T2> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<4, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3;
+ typedef map<T0 , T1 , T2 , T3> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<5, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4;
+ typedef map<T0 , T1 , T2 , T3 , T4> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<6, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<7, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<8, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<9, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<10, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<11, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<12, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<13, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<14, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<15, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<16, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<17, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<18, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<19, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<20, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<21, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<22, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<23, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<24, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<25, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<26, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<27, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<28, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<29, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<30, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<31, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<32, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<33, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<34, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<35, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<36, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<37, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<38, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<39, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<40, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<41, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<42, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40; typedef pair_from<I41, is_assoc> D41; typedef typename D41::type T41;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<43, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40; typedef pair_from<I41, is_assoc> D41; typedef typename D41::type T41; typedef pair_from<I42, is_assoc> D42; typedef typename D42::type T42;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41) , gen::D42::call(i42));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<44, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40; typedef pair_from<I41, is_assoc> D41; typedef typename D41::type T41; typedef pair_from<I42, is_assoc> D42; typedef typename D42::type T42; typedef pair_from<I43, is_assoc> D43; typedef typename D43::type T43;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41) , gen::D42::call(i42) , gen::D43::call(i43));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<45, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40; typedef pair_from<I41, is_assoc> D41; typedef typename D41::type T41; typedef pair_from<I42, is_assoc> D42; typedef typename D42::type T42; typedef pair_from<I43, is_assoc> D43; typedef typename D43::type T43; typedef pair_from<I44, is_assoc> D44; typedef typename D44::type T44;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41) , gen::D42::call(i42) , gen::D43::call(i43) , gen::D44::call(i44));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<46, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40; typedef pair_from<I41, is_assoc> D41; typedef typename D41::type T41; typedef pair_from<I42, is_assoc> D42; typedef typename D42::type T42; typedef pair_from<I43, is_assoc> D43; typedef typename D43::type T43; typedef pair_from<I44, is_assoc> D44; typedef typename D44::type T44; typedef pair_from<I45, is_assoc> D45; typedef typename D45::type T45;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41) , gen::D42::call(i42) , gen::D43::call(i43) , gen::D44::call(i44) , gen::D45::call(i45));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<47, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40; typedef pair_from<I41, is_assoc> D41; typedef typename D41::type T41; typedef pair_from<I42, is_assoc> D42; typedef typename D42::type T42; typedef pair_from<I43, is_assoc> D43; typedef typename D43::type T43; typedef pair_from<I44, is_assoc> D44; typedef typename D44::type T44; typedef pair_from<I45, is_assoc> D45; typedef typename D45::type T45; typedef pair_from<I46, is_assoc> D46; typedef typename D46::type T46;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41) , gen::D42::call(i42) , gen::D43::call(i43) , gen::D44::call(i44) , gen::D45::call(i45) , gen::D46::call(i46));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<48, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40; typedef pair_from<I41, is_assoc> D41; typedef typename D41::type T41; typedef pair_from<I42, is_assoc> D42; typedef typename D42::type T42; typedef pair_from<I43, is_assoc> D43; typedef typename D43::type T43; typedef pair_from<I44, is_assoc> D44; typedef typename D44::type T44; typedef pair_from<I45, is_assoc> D45; typedef typename D45::type T45; typedef pair_from<I46, is_assoc> D46; typedef typename D46::type T46; typedef pair_from<I47, is_assoc> D47; typedef typename D47::type T47;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41) , gen::D42::call(i42) , gen::D43::call(i43) , gen::D44::call(i44) , gen::D45::call(i45) , gen::D46::call(i46) , gen::D47::call(i47));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<49, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40; typedef pair_from<I41, is_assoc> D41; typedef typename D41::type T41; typedef pair_from<I42, is_assoc> D42; typedef typename D42::type T42; typedef pair_from<I43, is_assoc> D43; typedef typename D43::type T43; typedef pair_from<I44, is_assoc> D44; typedef typename D44::type T44; typedef pair_from<I45, is_assoc> D45; typedef typename D45::type T45; typedef pair_from<I46, is_assoc> D46; typedef typename D46::type T46; typedef pair_from<I47, is_assoc> D47; typedef typename D47::type T47; typedef pair_from<I48, is_assoc> D48; typedef typename D48::type T48;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41) , gen::D42::call(i42) , gen::D43::call(i43) , gen::D44::call(i44) , gen::D45::call(i45) , gen::D46::call(i46) , gen::D47::call(i47) , gen::D48::call(i48));
+ }
+ };
+ template <bool is_assoc>
+ struct as_map<50, is_assoc>
+ {
+ template <typename I0>
+ struct apply
+ {
+ typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48; typedef typename fusion::result_of::next<I48>::type I49;
+ typedef pair_from<I0, is_assoc> D0; typedef typename D0::type T0; typedef pair_from<I1, is_assoc> D1; typedef typename D1::type T1; typedef pair_from<I2, is_assoc> D2; typedef typename D2::type T2; typedef pair_from<I3, is_assoc> D3; typedef typename D3::type T3; typedef pair_from<I4, is_assoc> D4; typedef typename D4::type T4; typedef pair_from<I5, is_assoc> D5; typedef typename D5::type T5; typedef pair_from<I6, is_assoc> D6; typedef typename D6::type T6; typedef pair_from<I7, is_assoc> D7; typedef typename D7::type T7; typedef pair_from<I8, is_assoc> D8; typedef typename D8::type T8; typedef pair_from<I9, is_assoc> D9; typedef typename D9::type T9; typedef pair_from<I10, is_assoc> D10; typedef typename D10::type T10; typedef pair_from<I11, is_assoc> D11; typedef typename D11::type T11; typedef pair_from<I12, is_assoc> D12; typedef typename D12::type T12; typedef pair_from<I13, is_assoc> D13; typedef typename D13::type T13; typedef pair_from<I14, is_assoc> D14; typedef typename D14::type T14; typedef pair_from<I15, is_assoc> D15; typedef typename D15::type T15; typedef pair_from<I16, is_assoc> D16; typedef typename D16::type T16; typedef pair_from<I17, is_assoc> D17; typedef typename D17::type T17; typedef pair_from<I18, is_assoc> D18; typedef typename D18::type T18; typedef pair_from<I19, is_assoc> D19; typedef typename D19::type T19; typedef pair_from<I20, is_assoc> D20; typedef typename D20::type T20; typedef pair_from<I21, is_assoc> D21; typedef typename D21::type T21; typedef pair_from<I22, is_assoc> D22; typedef typename D22::type T22; typedef pair_from<I23, is_assoc> D23; typedef typename D23::type T23; typedef pair_from<I24, is_assoc> D24; typedef typename D24::type T24; typedef pair_from<I25, is_assoc> D25; typedef typename D25::type T25; typedef pair_from<I26, is_assoc> D26; typedef typename D26::type T26; typedef pair_from<I27, is_assoc> D27; typedef typename D27::type T27; typedef pair_from<I28, is_assoc> D28; typedef typename D28::type T28; typedef pair_from<I29, is_assoc> D29; typedef typename D29::type T29; typedef pair_from<I30, is_assoc> D30; typedef typename D30::type T30; typedef pair_from<I31, is_assoc> D31; typedef typename D31::type T31; typedef pair_from<I32, is_assoc> D32; typedef typename D32::type T32; typedef pair_from<I33, is_assoc> D33; typedef typename D33::type T33; typedef pair_from<I34, is_assoc> D34; typedef typename D34::type T34; typedef pair_from<I35, is_assoc> D35; typedef typename D35::type T35; typedef pair_from<I36, is_assoc> D36; typedef typename D36::type T36; typedef pair_from<I37, is_assoc> D37; typedef typename D37::type T37; typedef pair_from<I38, is_assoc> D38; typedef typename D38::type T38; typedef pair_from<I39, is_assoc> D39; typedef typename D39::type T39; typedef pair_from<I40, is_assoc> D40; typedef typename D40::type T40; typedef pair_from<I41, is_assoc> D41; typedef typename D41::type T41; typedef pair_from<I42, is_assoc> D42; typedef typename D42::type T42; typedef pair_from<I43, is_assoc> D43; typedef typename D43::type T43; typedef pair_from<I44, is_assoc> D44; typedef typename D44::type T44; typedef pair_from<I45, is_assoc> D45; typedef typename D45::type T45; typedef pair_from<I46, is_assoc> D46; typedef typename D46::type T46; typedef pair_from<I47, is_assoc> D47; typedef typename D47::type T47; typedef pair_from<I48, is_assoc> D48; typedef typename D48::type T48; typedef pair_from<I49, is_assoc> D49; typedef typename D49::type T49;
+ typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> type;
+ };
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ static typename apply<Iterator>::type
+ call(Iterator const& i0)
+ {
+ typedef apply<Iterator> gen;
+ typedef typename gen::type result;
+ typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); typename gen::I49 i49 = fusion::next(i48);
+ return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41) , gen::D42::call(i42) , gen::D43::call(i43) , gen::D44::call(i44) , gen::D45::call(i45) , gen::D46::call(i46) , gen::D47::call(i47) , gen::D48::call(i48) , gen::D49::call(i49));
+ }
+ };
+}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map.hpp
new file mode 100644
index 0000000000..c6cd526a60
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if FUSION_MAX_MAP_SIZE <= 10
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map10.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 20
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map20.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 30
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map30.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 40
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map40.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 50
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map50.hpp>
+#else
+#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers"
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map10.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map10.hpp
new file mode 100644
index 0000000000..3948e81068
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map10.hpp
@@ -0,0 +1,82 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion
+{
+ struct void_;
+ struct fusion_sequence_tag;
+ template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> >
+ {
+ struct category : random_access_traversal_tag, associative_tag {};
+ typedef map_tag fusion_tag;
+ typedef fusion_sequence_tag tag;
+ typedef mpl::false_ is_view;
+ typedef vector<
+ T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
+ storage_type;
+ typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
+ map()
+ : data() {}
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ map(Sequence const& rhs)
+ : data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ map(T0 const& _0)
+ : data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1)
+ : data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2)
+ : data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
+ : data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
+ : data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
+ : data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(T const& rhs)
+ {
+ data = rhs;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(map const& rhs)
+ {
+ data = rhs.data;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type const& get_data() const { return data; }
+ private:
+ storage_type data;
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map10_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map10_fwd.hpp
index cd9292e3f1..cd9292e3f1 100644
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map10_fwd.hpp
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map10_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map20.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map20.hpp
new file mode 100644
index 0000000000..f562fad610
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map20.hpp
@@ -0,0 +1,112 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion
+{
+ struct void_;
+ struct fusion_sequence_tag;
+ template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> >
+ {
+ struct category : random_access_traversal_tag, associative_tag {};
+ typedef map_tag fusion_tag;
+ typedef fusion_sequence_tag tag;
+ typedef mpl::false_ is_view;
+ typedef vector<
+ T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
+ storage_type;
+ typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
+ map()
+ : data() {}
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ map(Sequence const& rhs)
+ : data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ map(T0 const& _0)
+ : data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1)
+ : data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2)
+ : data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
+ : data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
+ : data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
+ : data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(T const& rhs)
+ {
+ data = rhs;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(map const& rhs)
+ {
+ data = rhs.data;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type const& get_data() const { return data; }
+ private:
+ storage_type data;
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map20_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map20_fwd.hpp
index 0ff5fa50c5..0ff5fa50c5 100644
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map20_fwd.hpp
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map20_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map30.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map30.hpp
new file mode 100644
index 0000000000..3cbf4018b8
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map30.hpp
@@ -0,0 +1,142 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion
+{
+ struct void_;
+ struct fusion_sequence_tag;
+ template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> >
+ {
+ struct category : random_access_traversal_tag, associative_tag {};
+ typedef map_tag fusion_tag;
+ typedef fusion_sequence_tag tag;
+ typedef mpl::false_ is_view;
+ typedef vector<
+ T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
+ storage_type;
+ typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
+ map()
+ : data() {}
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ map(Sequence const& rhs)
+ : data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ map(T0 const& _0)
+ : data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1)
+ : data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2)
+ : data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
+ : data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
+ : data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
+ : data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(T const& rhs)
+ {
+ data = rhs;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(map const& rhs)
+ {
+ data = rhs.data;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type const& get_data() const { return data; }
+ private:
+ storage_type data;
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map30_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map30_fwd.hpp
index d9be47ab44..d9be47ab44 100644
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map30_fwd.hpp
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map30_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map40.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map40.hpp
new file mode 100644
index 0000000000..2a38432805
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map40.hpp
@@ -0,0 +1,172 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion
+{
+ struct void_;
+ struct fusion_sequence_tag;
+ template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> >
+ {
+ struct category : random_access_traversal_tag, associative_tag {};
+ typedef map_tag fusion_tag;
+ typedef fusion_sequence_tag tag;
+ typedef mpl::false_ is_view;
+ typedef vector<
+ T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
+ storage_type;
+ typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
+ map()
+ : data() {}
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ map(Sequence const& rhs)
+ : data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ map(T0 const& _0)
+ : data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1)
+ : data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2)
+ : data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
+ : data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
+ : data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
+ : data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(T const& rhs)
+ {
+ data = rhs;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(map const& rhs)
+ {
+ data = rhs.data;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type const& get_data() const { return data; }
+ private:
+ storage_type data;
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map40_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map40_fwd.hpp
index c2b40e1ced..c2b40e1ced 100644
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map40_fwd.hpp
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map40_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map50.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map50.hpp
new file mode 100644
index 0000000000..e2cca91587
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map50.hpp
@@ -0,0 +1,202 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+namespace boost { namespace fusion
+{
+ struct void_;
+ struct fusion_sequence_tag;
+ template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> >
+ {
+ struct category : random_access_traversal_tag, associative_tag {};
+ typedef map_tag fusion_tag;
+ typedef fusion_sequence_tag tag;
+ typedef mpl::false_ is_view;
+ typedef vector<
+ T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
+ storage_type;
+ typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
+ map()
+ : data() {}
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ map(Sequence const& rhs)
+ : data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ map(T0 const& _0)
+ : data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1)
+ : data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2)
+ : data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
+ : data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
+ : data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
+ : data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49)
+ : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {}
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(T const& rhs)
+ {
+ data = rhs;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(map const& rhs)
+ {
+ data = rhs.data;
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
+ storage_type const& get_data() const { return data; }
+ private:
+ storage_type data;
+ };
+}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map50_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map50_fwd.hpp
index 6c107225a7..6c107225a7 100644
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map50_fwd.hpp
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map50_fwd.hpp
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map_fwd.hpp
new file mode 100644
index 0000000000..2e66a4577f
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/preprocessed/map_fwd.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+
+ This is an auto-generated file. Do not edit!
+==============================================================================*/
+
+#if FUSION_MAX_MAP_SIZE <= 10
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map10_fwd.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 20
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map20_fwd.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 30
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map30_fwd.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 40
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map40_fwd.hpp>
+#elif FUSION_MAX_MAP_SIZE <= 50
+#include <boost/fusion/container/map/detail/cpp03/preprocessed/map50_fwd.hpp>
+#else
+#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers"
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/value_at_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/value_at_impl.hpp
new file mode 100644
index 0000000000..d61ab2038a
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/value_at_impl.hpp
@@ -0,0 +1,35 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2011 Brandon Kohn
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_HPP)
+#define BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_HPP
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion
+{
+ struct map_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct value_at_impl;
+
+ template <>
+ struct value_at_impl<map_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply
+ {
+ typedef typename mpl::at<typename Sequence::storage_type::types, N>::type type;
+ };
+ };
+ }
+}}
+
+#endif //BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_HPP
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/value_of_data_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/value_of_data_impl.hpp
new file mode 100644
index 0000000000..f6d24aed2d
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/value_of_data_impl.hpp
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2009 Christopher Schmidt
+
+ 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_FUSION_CONTAINER_MAP_DETAIL_VALUE_OF_DATA_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_MAP_DETAIL_VALUE_OF_DATA_IMPL_HPP
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/map/detail/cpp03/value_of_impl.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename>
+ struct value_of_data_impl;
+
+ template <>
+ struct value_of_data_impl<map_iterator_tag>
+ {
+ template <typename It>
+ struct apply
+ {
+ typedef typename
+ value_of_impl<map_iterator_tag>::
+ template apply<It>::type::second_type
+ type;
+ };
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/cpp03/value_of_impl.hpp b/3party/boost/boost/fusion/container/map/detail/cpp03/value_of_impl.hpp
new file mode 100644
index 0000000000..9b0f9a074b
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/cpp03/value_of_impl.hpp
@@ -0,0 +1,40 @@
+/*=============================================================================
+ Copyright (c) 2009 Christopher Schmidt
+
+ 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_FUSION_CONTAINER_MAP_DETAIL_VALUE_OF_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_MAP_DETAIL_VALUE_OF_IMPL_HPP
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename>
+ struct value_of_impl;
+
+ template <>
+ struct value_of_impl<map_iterator_tag>
+ {
+ template <typename It>
+ struct apply
+ {
+ typedef typename
+ result_of::value_at<
+ typename mpl::if_<
+ is_const<typename It::seq_type>
+ , typename It::seq_type::storage_type const
+ , typename It::seq_type::storage_type
+ >::type
+ , typename It::index
+ >::type
+ type;
+ };
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/deref_data_impl.hpp b/3party/boost/boost/fusion/container/map/detail/deref_data_impl.hpp
deleted file mode 100644
index 8304c898ee..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/deref_data_impl.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
-
- 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_FUSION_CONTAINER_MAP_DETAIL_DEREF_DATA_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_MAP_DETAIL_DEREF_DATA_IMPL_HPP
-
-#include <boost/fusion/iterator/value_of.hpp>
-#include <boost/fusion/iterator/deref.hpp>
-#include <boost/fusion/support/detail/access.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/mpl/if.hpp>
-
-namespace boost { namespace fusion { namespace extension
-{
- template <typename>
- struct deref_data_impl;
-
- template <>
- struct deref_data_impl<map_iterator_tag>
- {
- template <typename It>
- struct apply
- {
- typedef typename result_of::value_of<It>::type::second_type data;
-
- typedef typename
- mpl::if_<
- is_const<typename It::seq_type>
- , typename detail::cref_result<data>::type
- , typename detail::ref_result<data>::type
- >::type
- type;
-
- static type
- call(It const& it)
- {
- return fusion::deref(it).second;
- }
- };
- };
-}}}
-
-#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/deref_impl.hpp b/3party/boost/boost/fusion/container/map/detail/deref_impl.hpp
deleted file mode 100644
index 725477bdd1..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/deref_impl.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
-
- 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_FUSION_CONTAINER_MAP_DETAIL_DEREF_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_MAP_DETAIL_DEREF_IMPL_HPP
-
-#include <boost/fusion/sequence/intrinsic/at.hpp>
-#include <boost/type_traits/is_const.hpp>
-
-namespace boost { namespace fusion { namespace extension
-{
- template <typename>
- struct deref_impl;
-
- template <>
- struct deref_impl<map_iterator_tag>
- {
- template <typename It>
- struct apply
- {
- typedef typename
- result_of::at<
- typename mpl::if_<
- is_const<typename It::seq_type>
- , typename It::seq_type::storage_type const
- , typename It::seq_type::storage_type
- >::type
- , typename It::index
- >::type
- type;
-
- static type
- call(It const& it)
- {
- return fusion::at<typename It::index>(it.seq->get_data());
- }
- };
- };
-}}}
-
-#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/end_impl.hpp b/3party/boost/boost/fusion/container/map/detail/end_impl.hpp
index 1375b7af0e..fea45db37b 100644
--- a/3party/boost/boost/fusion/container/map/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/container/map/detail/end_impl.hpp
@@ -1,43 +1,40 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2005-2013 Joel de Guzman
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_FUSION_MAP_END_IMPL_02042013_0857)
+#define BOOST_FUSION_MAP_END_IMPL_02042013_0857
-#ifndef BOOST_FUSION_CONTAINER_MAP_DETAIL_END_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_MAP_DETAIL_END_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/map/map_iterator.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
-
-namespace boost { namespace fusion { namespace extension
+namespace boost { namespace fusion
{
- template <typename>
- struct end_impl;
+ struct map_tag;
- template <>
- struct end_impl<map_tag>
+ namespace extension
{
- template <typename Seq>
- struct apply
- {
- typedef
- basic_iterator<
- map_iterator_tag
- , typename Seq::category
- , Seq
- , Seq::size::value
- >
- type;
+ template<typename T>
+ struct end_impl;
- static type
- call(Seq& seq)
+ template<>
+ struct end_impl<map_tag>
+ {
+ template<typename Sequence>
+ struct apply
{
- return type(seq,0);
- }
+ typedef map_iterator<Sequence, Sequence::size::value> type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type call(Sequence& seq)
+ {
+ return type(seq);
+ }
+ };
};
- };
-}}}
+ }
+}}
#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/key_of_impl.hpp b/3party/boost/boost/fusion/container/map/detail/key_of_impl.hpp
deleted file mode 100644
index 5a90c03784..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/key_of_impl.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
-
- 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_FUSION_CONTAINER_MAP_DETAIL_KEY_OF_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_MAP_DETAIL_KEY_OF_IMPL_HPP
-
-#include <boost/fusion/container/map/detail/value_of_impl.hpp>
-
-namespace boost { namespace fusion { namespace extension
-{
- template <typename>
- struct key_of_impl;
-
- template <>
- struct key_of_impl<map_iterator_tag>
- {
- template <typename It>
- struct apply
- {
- typedef typename
- value_of_impl<map_iterator_tag>::
- template apply<It>::type::first_type
- type;
- };
- };
-}}}
-
-#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/map_forward_ctor.hpp b/3party/boost/boost/fusion/container/map/detail/map_forward_ctor.hpp
deleted file mode 100644
index c0f983c4d2..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/map_forward_ctor.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#if !defined(FUSION_MAP_FORWARD_CTOR_07222005_0106)
-#define FUSION_MAP_FORWARD_CTOR_07222005_0106
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_FILENAME_1 \
- <boost/fusion/container/map/detail/map_forward_ctor.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
-#include BOOST_PP_ITERATE()
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-#if N == 1
- explicit
-#endif
- map(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
- : data(BOOST_PP_ENUM_PARAMS(N, _)) {}
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
diff --git a/3party/boost/boost/fusion/container/map/detail/map_impl.hpp b/3party/boost/boost/fusion/container/map/detail/map_impl.hpp
new file mode 100644
index 0000000000..f70d139231
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/map_impl.hpp
@@ -0,0 +1,206 @@
+/*=============================================================================
+ Copyright (c) 2005-2013 Joel de Guzman
+
+ 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_FUSION_MAP_IMPL_02032013_2233)
+#define BOOST_FUSION_MAP_IMPL_02032013_2233
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion
+{
+ struct fusion_sequence_tag;
+}}
+
+namespace boost { namespace fusion { namespace detail
+{
+ struct map_impl_from_iterator {};
+
+ template <int index, typename ...T>
+ struct map_impl;
+
+ template <int index_>
+ struct map_impl<index_>
+ {
+ typedef fusion_sequence_tag tag;
+ static int const index = index_;
+ static int const size = 0;
+
+ BOOST_FUSION_GPU_ENABLED
+ map_impl() {}
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ map_impl(Iterator const& iter, map_impl_from_iterator)
+ {}
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ void assign(Iterator const& iter, map_impl_from_iterator)
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ void get();
+ BOOST_FUSION_GPU_ENABLED
+ void get_val();
+ BOOST_FUSION_GPU_ENABLED
+ void get_key();
+ };
+
+ template <int index_, typename Pair, typename ...T>
+ struct map_impl<index_, Pair, T...> : map_impl<index_ + 1, T...>
+ {
+ typedef fusion_sequence_tag tag;
+ typedef map_impl<index_+1, T...> rest_type;
+
+ using rest_type::get;
+ using rest_type::get_val;
+ using rest_type::get_key;
+
+ static int const index = index_;
+ static int const size = rest_type::size + 1;
+
+ typedef Pair pair_type;
+ typedef typename Pair::first_type key_type;
+ typedef typename Pair::second_type value_type;
+
+ BOOST_FUSION_GPU_ENABLED
+ map_impl()
+ : rest_type(), element()
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ map_impl(map_impl const& rhs)
+ : rest_type(rhs.get_base()), element(rhs.element)
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ map_impl(map_impl&& rhs)
+ : rest_type(std::forward<rest_type>(*static_cast<rest_type*>(&rhs)))
+ , element(std::forward<Pair>(rhs.element))
+ {}
+
+ template <typename ...U>
+ BOOST_FUSION_GPU_ENABLED
+ map_impl(map_impl<index, U...> const& rhs)
+ : rest_type(rhs.get_base()), element(rhs.element)
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ map_impl(typename detail::call_param<Pair>::type element_
+ , typename detail::call_param<T>::type... rest)
+ : rest_type(rest...), element(element_)
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ map_impl(Pair&& element_, T&&... rest)
+ : rest_type(std::forward<T>(rest)...)
+ , element(std::forward<Pair>(element_))
+ {}
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ map_impl(Iterator const& iter, map_impl_from_iterator fi)
+ : rest_type(fusion::next(iter), fi)
+ , element(*iter)
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ rest_type& get_base()
+ {
+ return *this;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ rest_type const& get_base() const
+ {
+ return *this;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ value_type get_val(mpl::identity<key_type>);
+ BOOST_FUSION_GPU_ENABLED
+ pair_type get_val(mpl::int_<index>);
+ BOOST_FUSION_GPU_ENABLED
+ value_type get_val(mpl::identity<key_type>) const;
+ BOOST_FUSION_GPU_ENABLED
+ pair_type get_val(mpl::int_<index>) const;
+
+ BOOST_FUSION_GPU_ENABLED
+ mpl::identity<key_type> get_key(mpl::int_<index>);
+ BOOST_FUSION_GPU_ENABLED
+ mpl::identity<key_type> get_key(mpl::int_<index>) const;
+
+ BOOST_FUSION_GPU_ENABLED
+ typename cref_result<value_type>::type
+ get(mpl::identity<key_type>) const
+ {
+ return element.second;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ typename ref_result<value_type>::type
+ get(mpl::identity<key_type>)
+ {
+ return element.second;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ typename cref_result<pair_type>::type
+ get(mpl::int_<index>) const
+ {
+ return element;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ typename ref_result<pair_type>::type
+ get(mpl::int_<index>)
+ {
+ return element;
+ }
+
+ template <typename ...U>
+ BOOST_FUSION_GPU_ENABLED
+ map_impl& operator=(map_impl<index, U...> const& rhs)
+ {
+ rest_type::operator=(rhs);
+ element = rhs.element;
+ return *this;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ map_impl& operator=(map_impl const& rhs)
+ {
+ rest_type::operator=(rhs);
+ element = rhs.element;
+ return *this;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ map_impl& operator=(map_impl&& rhs)
+ {
+ rest_type::operator=(std::forward<map_impl>(rhs));
+ element = std::forward<Pair>(rhs.element);
+ return *this;
+ }
+
+ template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
+ void assign(Iterator const& iter, map_impl_from_iterator fi)
+ {
+ rest_type::assign(fusion::next(iter), fi);
+ element = *iter;
+ }
+
+ Pair element;
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/map_index.hpp b/3party/boost/boost/fusion/container/map/detail/map_index.hpp
new file mode 100644
index 0000000000..9326cdeda9
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/map_index.hpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2005-2013 Joel de Guzman
+
+ 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_FUSION_MAP_INDEX_02032013_2233)
+#define BOOST_FUSION_MAP_INDEX_02032013_2233
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <int N>
+ struct map_index
+ {
+ static int const value = N;
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map.hpp
deleted file mode 100644
index 47eb0e4c88..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if FUSION_MAX_MAP_SIZE <= 10
-#include <boost/fusion/container/map/detail/preprocessed/as_map10.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 20
-#include <boost/fusion/container/map/detail/preprocessed/as_map20.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 30
-#include <boost/fusion/container/map/detail/preprocessed/as_map30.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 40
-#include <boost/fusion/container/map/detail/preprocessed/as_map40.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 50
-#include <boost/fusion/container/map/detail/preprocessed/as_map50.hpp>
-#else
-#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers"
-#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map10.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map10.hpp
deleted file mode 100644
index 98dae25bcc..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map10.hpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_map<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef map<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_map<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef map<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_map<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef map<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_map<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef map<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_map<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef map<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_map<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_map<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_map<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_map<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_map<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map20.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map20.hpp
deleted file mode 100644
index 2907ab2794..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map20.hpp
+++ /dev/null
@@ -1,411 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_map<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef map<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_map<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef map<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_map<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef map<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_map<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef map<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_map<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef map<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_map<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_map<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_map<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_map<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_map<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
- template <>
- struct as_map<11>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
- }
- };
- template <>
- struct as_map<12>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
- }
- };
- template <>
- struct as_map<13>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
- }
- };
- template <>
- struct as_map<14>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
- }
- };
- template <>
- struct as_map<15>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
- }
- };
- template <>
- struct as_map<16>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
- }
- };
- template <>
- struct as_map<17>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
- }
- };
- template <>
- struct as_map<18>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
- }
- };
- template <>
- struct as_map<19>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
- }
- };
- template <>
- struct as_map<20>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map30.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map30.hpp
deleted file mode 100644
index fca89ae874..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map30.hpp
+++ /dev/null
@@ -1,611 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_map<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef map<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_map<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef map<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_map<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef map<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_map<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef map<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_map<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef map<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_map<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_map<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_map<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_map<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_map<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
- template <>
- struct as_map<11>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
- }
- };
- template <>
- struct as_map<12>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
- }
- };
- template <>
- struct as_map<13>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
- }
- };
- template <>
- struct as_map<14>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
- }
- };
- template <>
- struct as_map<15>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
- }
- };
- template <>
- struct as_map<16>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
- }
- };
- template <>
- struct as_map<17>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
- }
- };
- template <>
- struct as_map<18>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
- }
- };
- template <>
- struct as_map<19>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
- }
- };
- template <>
- struct as_map<20>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
- }
- };
- template <>
- struct as_map<21>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
- }
- };
- template <>
- struct as_map<22>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
- }
- };
- template <>
- struct as_map<23>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
- }
- };
- template <>
- struct as_map<24>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
- }
- };
- template <>
- struct as_map<25>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
- }
- };
- template <>
- struct as_map<26>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
- }
- };
- template <>
- struct as_map<27>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
- }
- };
- template <>
- struct as_map<28>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
- }
- };
- template <>
- struct as_map<29>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
- }
- };
- template <>
- struct as_map<30>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map40.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map40.hpp
deleted file mode 100644
index 6e800f6086..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map40.hpp
+++ /dev/null
@@ -1,811 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_map<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef map<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_map<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef map<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_map<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef map<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_map<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef map<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_map<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef map<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_map<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_map<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_map<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_map<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_map<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
- template <>
- struct as_map<11>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
- }
- };
- template <>
- struct as_map<12>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
- }
- };
- template <>
- struct as_map<13>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
- }
- };
- template <>
- struct as_map<14>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
- }
- };
- template <>
- struct as_map<15>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
- }
- };
- template <>
- struct as_map<16>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
- }
- };
- template <>
- struct as_map<17>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
- }
- };
- template <>
- struct as_map<18>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
- }
- };
- template <>
- struct as_map<19>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
- }
- };
- template <>
- struct as_map<20>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
- }
- };
- template <>
- struct as_map<21>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
- }
- };
- template <>
- struct as_map<22>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
- }
- };
- template <>
- struct as_map<23>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
- }
- };
- template <>
- struct as_map<24>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
- }
- };
- template <>
- struct as_map<25>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
- }
- };
- template <>
- struct as_map<26>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
- }
- };
- template <>
- struct as_map<27>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
- }
- };
- template <>
- struct as_map<28>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
- }
- };
- template <>
- struct as_map<29>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
- }
- };
- template <>
- struct as_map<30>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
- }
- };
- template <>
- struct as_map<31>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30);
- }
- };
- template <>
- struct as_map<32>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31);
- }
- };
- template <>
- struct as_map<33>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32);
- }
- };
- template <>
- struct as_map<34>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33);
- }
- };
- template <>
- struct as_map<35>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34);
- }
- };
- template <>
- struct as_map<36>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35);
- }
- };
- template <>
- struct as_map<37>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36);
- }
- };
- template <>
- struct as_map<38>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37);
- }
- };
- template <>
- struct as_map<39>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38);
- }
- };
- template <>
- struct as_map<40>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map50.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map50.hpp
deleted file mode 100644
index 2cc45eeb1c..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map50.hpp
+++ /dev/null
@@ -1,1011 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion { namespace detail
-{
- template <>
- struct as_map<1>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1;
- typedef typename fusion::result_of::value_of<I0>::type T0;
- typedef map<T0> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
-
- return result(*i0);
- }
- };
- template <>
- struct as_map<2>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1;
- typedef map<T0 , T1> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0);
- return result(*i0 , *i1);
- }
- };
- template <>
- struct as_map<3>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2;
- typedef map<T0 , T1 , T2> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1);
- return result(*i0 , *i1 , *i2);
- }
- };
- template <>
- struct as_map<4>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3;
- typedef map<T0 , T1 , T2 , T3> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2);
- return result(*i0 , *i1 , *i2 , *i3);
- }
- };
- template <>
- struct as_map<5>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4;
- typedef map<T0 , T1 , T2 , T3 , T4> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3);
- return result(*i0 , *i1 , *i2 , *i3 , *i4);
- }
- };
- template <>
- struct as_map<6>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
- }
- };
- template <>
- struct as_map<7>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
- }
- };
- template <>
- struct as_map<8>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
- }
- };
- template <>
- struct as_map<9>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
- }
- };
- template <>
- struct as_map<10>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
- }
- };
- template <>
- struct as_map<11>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
- }
- };
- template <>
- struct as_map<12>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
- }
- };
- template <>
- struct as_map<13>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
- }
- };
- template <>
- struct as_map<14>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
- }
- };
- template <>
- struct as_map<15>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
- }
- };
- template <>
- struct as_map<16>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
- }
- };
- template <>
- struct as_map<17>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
- }
- };
- template <>
- struct as_map<18>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
- }
- };
- template <>
- struct as_map<19>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
- }
- };
- template <>
- struct as_map<20>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
- }
- };
- template <>
- struct as_map<21>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
- }
- };
- template <>
- struct as_map<22>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
- }
- };
- template <>
- struct as_map<23>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
- }
- };
- template <>
- struct as_map<24>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
- }
- };
- template <>
- struct as_map<25>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
- }
- };
- template <>
- struct as_map<26>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
- }
- };
- template <>
- struct as_map<27>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
- }
- };
- template <>
- struct as_map<28>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
- }
- };
- template <>
- struct as_map<29>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
- }
- };
- template <>
- struct as_map<30>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
- }
- };
- template <>
- struct as_map<31>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30);
- }
- };
- template <>
- struct as_map<32>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31);
- }
- };
- template <>
- struct as_map<33>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32);
- }
- };
- template <>
- struct as_map<34>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33);
- }
- };
- template <>
- struct as_map<35>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34);
- }
- };
- template <>
- struct as_map<36>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35);
- }
- };
- template <>
- struct as_map<37>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36);
- }
- };
- template <>
- struct as_map<38>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37);
- }
- };
- template <>
- struct as_map<39>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38);
- }
- };
- template <>
- struct as_map<40>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
- }
- };
- template <>
- struct as_map<41>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40);
- }
- };
- template <>
- struct as_map<42>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41);
- }
- };
- template <>
- struct as_map<43>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42);
- }
- };
- template <>
- struct as_map<44>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43);
- }
- };
- template <>
- struct as_map<45>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44);
- }
- };
- template <>
- struct as_map<46>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45);
- }
- };
- template <>
- struct as_map<47>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46);
- }
- };
- template <>
- struct as_map<48>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46; typedef typename fusion::result_of::value_of<I47>::type T47;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47);
- }
- };
- template <>
- struct as_map<49>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48; typedef typename fusion::result_of::next<I48>::type I49;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46; typedef typename fusion::result_of::value_of<I47>::type T47; typedef typename fusion::result_of::value_of<I48>::type T48;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48);
- }
- };
- template <>
- struct as_map<50>
- {
- template <typename I0>
- struct apply
- {
- typedef typename fusion::result_of::next<I0>::type I1; typedef typename fusion::result_of::next<I1>::type I2; typedef typename fusion::result_of::next<I2>::type I3; typedef typename fusion::result_of::next<I3>::type I4; typedef typename fusion::result_of::next<I4>::type I5; typedef typename fusion::result_of::next<I5>::type I6; typedef typename fusion::result_of::next<I6>::type I7; typedef typename fusion::result_of::next<I7>::type I8; typedef typename fusion::result_of::next<I8>::type I9; typedef typename fusion::result_of::next<I9>::type I10; typedef typename fusion::result_of::next<I10>::type I11; typedef typename fusion::result_of::next<I11>::type I12; typedef typename fusion::result_of::next<I12>::type I13; typedef typename fusion::result_of::next<I13>::type I14; typedef typename fusion::result_of::next<I14>::type I15; typedef typename fusion::result_of::next<I15>::type I16; typedef typename fusion::result_of::next<I16>::type I17; typedef typename fusion::result_of::next<I17>::type I18; typedef typename fusion::result_of::next<I18>::type I19; typedef typename fusion::result_of::next<I19>::type I20; typedef typename fusion::result_of::next<I20>::type I21; typedef typename fusion::result_of::next<I21>::type I22; typedef typename fusion::result_of::next<I22>::type I23; typedef typename fusion::result_of::next<I23>::type I24; typedef typename fusion::result_of::next<I24>::type I25; typedef typename fusion::result_of::next<I25>::type I26; typedef typename fusion::result_of::next<I26>::type I27; typedef typename fusion::result_of::next<I27>::type I28; typedef typename fusion::result_of::next<I28>::type I29; typedef typename fusion::result_of::next<I29>::type I30; typedef typename fusion::result_of::next<I30>::type I31; typedef typename fusion::result_of::next<I31>::type I32; typedef typename fusion::result_of::next<I32>::type I33; typedef typename fusion::result_of::next<I33>::type I34; typedef typename fusion::result_of::next<I34>::type I35; typedef typename fusion::result_of::next<I35>::type I36; typedef typename fusion::result_of::next<I36>::type I37; typedef typename fusion::result_of::next<I37>::type I38; typedef typename fusion::result_of::next<I38>::type I39; typedef typename fusion::result_of::next<I39>::type I40; typedef typename fusion::result_of::next<I40>::type I41; typedef typename fusion::result_of::next<I41>::type I42; typedef typename fusion::result_of::next<I42>::type I43; typedef typename fusion::result_of::next<I43>::type I44; typedef typename fusion::result_of::next<I44>::type I45; typedef typename fusion::result_of::next<I45>::type I46; typedef typename fusion::result_of::next<I46>::type I47; typedef typename fusion::result_of::next<I47>::type I48; typedef typename fusion::result_of::next<I48>::type I49; typedef typename fusion::result_of::next<I49>::type I50;
- typedef typename fusion::result_of::value_of<I0>::type T0; typedef typename fusion::result_of::value_of<I1>::type T1; typedef typename fusion::result_of::value_of<I2>::type T2; typedef typename fusion::result_of::value_of<I3>::type T3; typedef typename fusion::result_of::value_of<I4>::type T4; typedef typename fusion::result_of::value_of<I5>::type T5; typedef typename fusion::result_of::value_of<I6>::type T6; typedef typename fusion::result_of::value_of<I7>::type T7; typedef typename fusion::result_of::value_of<I8>::type T8; typedef typename fusion::result_of::value_of<I9>::type T9; typedef typename fusion::result_of::value_of<I10>::type T10; typedef typename fusion::result_of::value_of<I11>::type T11; typedef typename fusion::result_of::value_of<I12>::type T12; typedef typename fusion::result_of::value_of<I13>::type T13; typedef typename fusion::result_of::value_of<I14>::type T14; typedef typename fusion::result_of::value_of<I15>::type T15; typedef typename fusion::result_of::value_of<I16>::type T16; typedef typename fusion::result_of::value_of<I17>::type T17; typedef typename fusion::result_of::value_of<I18>::type T18; typedef typename fusion::result_of::value_of<I19>::type T19; typedef typename fusion::result_of::value_of<I20>::type T20; typedef typename fusion::result_of::value_of<I21>::type T21; typedef typename fusion::result_of::value_of<I22>::type T22; typedef typename fusion::result_of::value_of<I23>::type T23; typedef typename fusion::result_of::value_of<I24>::type T24; typedef typename fusion::result_of::value_of<I25>::type T25; typedef typename fusion::result_of::value_of<I26>::type T26; typedef typename fusion::result_of::value_of<I27>::type T27; typedef typename fusion::result_of::value_of<I28>::type T28; typedef typename fusion::result_of::value_of<I29>::type T29; typedef typename fusion::result_of::value_of<I30>::type T30; typedef typename fusion::result_of::value_of<I31>::type T31; typedef typename fusion::result_of::value_of<I32>::type T32; typedef typename fusion::result_of::value_of<I33>::type T33; typedef typename fusion::result_of::value_of<I34>::type T34; typedef typename fusion::result_of::value_of<I35>::type T35; typedef typename fusion::result_of::value_of<I36>::type T36; typedef typename fusion::result_of::value_of<I37>::type T37; typedef typename fusion::result_of::value_of<I38>::type T38; typedef typename fusion::result_of::value_of<I39>::type T39; typedef typename fusion::result_of::value_of<I40>::type T40; typedef typename fusion::result_of::value_of<I41>::type T41; typedef typename fusion::result_of::value_of<I42>::type T42; typedef typename fusion::result_of::value_of<I43>::type T43; typedef typename fusion::result_of::value_of<I44>::type T44; typedef typename fusion::result_of::value_of<I45>::type T45; typedef typename fusion::result_of::value_of<I46>::type T46; typedef typename fusion::result_of::value_of<I47>::type T47; typedef typename fusion::result_of::value_of<I48>::type T48; typedef typename fusion::result_of::value_of<I49>::type T49;
- typedef map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> type;
- };
- template <typename Iterator>
- static typename apply<Iterator>::type
- call(Iterator const& i0)
- {
- typedef apply<Iterator> gen;
- typedef typename gen::type result;
- typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); typename gen::I49 i49 = fusion::next(i48);
- return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49);
- }
- };
-}}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map.hpp
deleted file mode 100644
index 93455c7196..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if FUSION_MAX_MAP_SIZE <= 10
-#include <boost/fusion/container/map/detail/preprocessed/map10.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 20
-#include <boost/fusion/container/map/detail/preprocessed/map20.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 30
-#include <boost/fusion/container/map/detail/preprocessed/map30.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 40
-#include <boost/fusion/container/map/detail/preprocessed/map40.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 50
-#include <boost/fusion/container/map/detail/preprocessed/map50.hpp>
-#else
-#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers"
-#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map10.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map10.hpp
deleted file mode 100644
index fdf28eb2a1..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map10.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion
-{
- struct void_;
- struct fusion_sequence_tag;
- template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
- struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> >
- {
- struct category : random_access_traversal_tag, associative_tag {};
- typedef map_tag fusion_tag;
- typedef fusion_sequence_tag tag;
- typedef mpl::false_ is_view;
- typedef vector<
- T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
- storage_type;
- typedef typename storage_type::size size;
- map()
- : data() {}
- template <typename Sequence>
- map(Sequence const& rhs)
- : data(rhs) {}
- explicit
- map(T0 const& _0)
- : data(_0) {}
- map(T0 const& _0 , T1 const& _1)
- : data(_0 , _1) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2)
- : data(_0 , _1 , _2) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
- : data(_0 , _1 , _2 , _3) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
- : data(_0 , _1 , _2 , _3 , _4) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
- : data(_0 , _1 , _2 , _3 , _4 , _5) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
- template <typename T>
- map&
- operator=(T const& rhs)
- {
- data = rhs;
- return *this;
- }
- storage_type& get_data() { return data; }
- storage_type const& get_data() const { return data; }
- private:
- storage_type data;
- };
-}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map20.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map20.hpp
deleted file mode 100644
index 33cd2e5956..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map20.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion
-{
- struct void_;
- struct fusion_sequence_tag;
- template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
- struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> >
- {
- struct category : random_access_traversal_tag, associative_tag {};
- typedef map_tag fusion_tag;
- typedef fusion_sequence_tag tag;
- typedef mpl::false_ is_view;
- typedef vector<
- T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
- storage_type;
- typedef typename storage_type::size size;
- map()
- : data() {}
- template <typename Sequence>
- map(Sequence const& rhs)
- : data(rhs) {}
- explicit
- map(T0 const& _0)
- : data(_0) {}
- map(T0 const& _0 , T1 const& _1)
- : data(_0 , _1) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2)
- : data(_0 , _1 , _2) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
- : data(_0 , _1 , _2 , _3) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
- : data(_0 , _1 , _2 , _3 , _4) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
- : data(_0 , _1 , _2 , _3 , _4 , _5) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
- template <typename T>
- map&
- operator=(T const& rhs)
- {
- data = rhs;
- return *this;
- }
- storage_type& get_data() { return data; }
- storage_type const& get_data() const { return data; }
- private:
- storage_type data;
- };
-}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map30.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map30.hpp
deleted file mode 100644
index 54f492d0fd..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map30.hpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion
-{
- struct void_;
- struct fusion_sequence_tag;
- template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
- struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> >
- {
- struct category : random_access_traversal_tag, associative_tag {};
- typedef map_tag fusion_tag;
- typedef fusion_sequence_tag tag;
- typedef mpl::false_ is_view;
- typedef vector<
- T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
- storage_type;
- typedef typename storage_type::size size;
- map()
- : data() {}
- template <typename Sequence>
- map(Sequence const& rhs)
- : data(rhs) {}
- explicit
- map(T0 const& _0)
- : data(_0) {}
- map(T0 const& _0 , T1 const& _1)
- : data(_0 , _1) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2)
- : data(_0 , _1 , _2) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
- : data(_0 , _1 , _2 , _3) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
- : data(_0 , _1 , _2 , _3 , _4) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
- : data(_0 , _1 , _2 , _3 , _4 , _5) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
- template <typename T>
- map&
- operator=(T const& rhs)
- {
- data = rhs;
- return *this;
- }
- storage_type& get_data() { return data; }
- storage_type const& get_data() const { return data; }
- private:
- storage_type data;
- };
-}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map40.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map40.hpp
deleted file mode 100644
index 7060a6707b..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map40.hpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion
-{
- struct void_;
- struct fusion_sequence_tag;
- template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
- struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> >
- {
- struct category : random_access_traversal_tag, associative_tag {};
- typedef map_tag fusion_tag;
- typedef fusion_sequence_tag tag;
- typedef mpl::false_ is_view;
- typedef vector<
- T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
- storage_type;
- typedef typename storage_type::size size;
- map()
- : data() {}
- template <typename Sequence>
- map(Sequence const& rhs)
- : data(rhs) {}
- explicit
- map(T0 const& _0)
- : data(_0) {}
- map(T0 const& _0 , T1 const& _1)
- : data(_0 , _1) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2)
- : data(_0 , _1 , _2) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
- : data(_0 , _1 , _2 , _3) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
- : data(_0 , _1 , _2 , _3 , _4) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
- : data(_0 , _1 , _2 , _3 , _4 , _5) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
- template <typename T>
- map&
- operator=(T const& rhs)
- {
- data = rhs;
- return *this;
- }
- storage_type& get_data() { return data; }
- storage_type const& get_data() const { return data; }
- private:
- storage_type data;
- };
-}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map50.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map50.hpp
deleted file mode 100644
index 1da736410b..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map50.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-namespace boost { namespace fusion
-{
- struct void_;
- struct fusion_sequence_tag;
- template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
- struct map : sequence_base<map<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> >
- {
- struct category : random_access_traversal_tag, associative_tag {};
- typedef map_tag fusion_tag;
- typedef fusion_sequence_tag tag;
- typedef mpl::false_ is_view;
- typedef vector<
- T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
- storage_type;
- typedef typename storage_type::size size;
- map()
- : data() {}
- template <typename Sequence>
- map(Sequence const& rhs)
- : data(rhs) {}
- explicit
- map(T0 const& _0)
- : data(_0) {}
- map(T0 const& _0 , T1 const& _1)
- : data(_0 , _1) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2)
- : data(_0 , _1 , _2) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
- : data(_0 , _1 , _2 , _3) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
- : data(_0 , _1 , _2 , _3 , _4) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
- : data(_0 , _1 , _2 , _3 , _4 , _5) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {}
- map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49)
- : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {}
- template <typename T>
- map&
- operator=(T const& rhs)
- {
- data = rhs;
- return *this;
- }
- storage_type& get_data() { return data; }
- storage_type const& get_data() const { return data; }
- private:
- storage_type data;
- };
-}}
diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map_fwd.hpp
deleted file mode 100644
index e478a6f859..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/preprocessed/map_fwd.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if FUSION_MAX_MAP_SIZE <= 10
-#include <boost/fusion/container/map/detail/preprocessed/map10_fwd.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 20
-#include <boost/fusion/container/map/detail/preprocessed/map20_fwd.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 30
-#include <boost/fusion/container/map/detail/preprocessed/map30_fwd.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 40
-#include <boost/fusion/container/map/detail/preprocessed/map40_fwd.hpp>
-#elif FUSION_MAX_MAP_SIZE <= 50
-#include <boost/fusion/container/map/detail/preprocessed/map50_fwd.hpp>
-#else
-#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers"
-#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/value_at_impl.hpp b/3party/boost/boost/fusion/container/map/detail/value_at_impl.hpp
index 31d9b38383..f98c580068 100644
--- a/3party/boost/boost/fusion/container/map/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/container/map/detail/value_at_impl.hpp
@@ -1,13 +1,13 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Copyright (c) 2011 Brandon Kohn
+ Copyright (c) 2001-2013 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_FUSION_MAP_DETAIL_VALUE_AT_IMPL_HPP)
-#define BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_HPP
+#if !defined(BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_02042013_0821)
+#define BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_02042013_0821
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
namespace boost { namespace fusion
@@ -23,12 +23,16 @@ namespace boost { namespace fusion
struct value_at_impl<map_tag>
{
template <typename Sequence, typename N>
- struct apply
+ struct apply
{
- typedef typename mpl::at<typename Sequence::storage_type::types, N>::type type;
+ typedef mpl::int_<N::value> index;
+ typedef
+ decltype(std::declval<Sequence>().get_val(index()))
+ type;
};
};
}
}}
-#endif //BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_HPP
+#endif
+
diff --git a/3party/boost/boost/fusion/container/map/detail/value_at_key_impl.hpp b/3party/boost/boost/fusion/container/map/detail/value_at_key_impl.hpp
new file mode 100644
index 0000000000..00a54c4e2d
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/detail/value_at_key_impl.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+ Copyright (c) 2001-2013 Joel de Guzman
+
+ 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_FUSION_MAP_DETAIL_VALUE_AT_KEY_IMPL_02042013_0821)
+#define BOOST_FUSION_MAP_DETAIL_VALUE_AT_KEY_IMPL_02042013_0821
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion
+{
+ struct map_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct value_at_key_impl;
+
+ template <>
+ struct value_at_key_impl<map_tag>
+ {
+ template <typename Sequence, typename Key>
+ struct apply
+ {
+ typedef
+ decltype(std::declval<Sequence>().get_val(mpl::identity<Key>()))
+ type;
+ };
+ };
+ }
+}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/value_of_data_impl.hpp b/3party/boost/boost/fusion/container/map/detail/value_of_data_impl.hpp
deleted file mode 100644
index 28d21678f0..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/value_of_data_impl.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
-
- 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_FUSION_CONTAINER_MAP_DETAIL_VALUE_OF_DATA_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_MAP_DETAIL_VALUE_OF_DATA_IMPL_HPP
-
-#include <boost/fusion/container/map/detail/value_of_impl.hpp>
-
-namespace boost { namespace fusion { namespace extension
-{
- template <typename>
- struct value_of_data_impl;
-
- template <>
- struct value_of_data_impl<map_iterator_tag>
- {
- template <typename It>
- struct apply
- {
- typedef typename
- value_of_impl<map_iterator_tag>::
- template apply<It>::type::second_type
- type;
- };
- };
-}}}
-
-#endif
diff --git a/3party/boost/boost/fusion/container/map/detail/value_of_impl.hpp b/3party/boost/boost/fusion/container/map/detail/value_of_impl.hpp
deleted file mode 100644
index 26b19f20f3..0000000000
--- a/3party/boost/boost/fusion/container/map/detail/value_of_impl.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
-
- 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_FUSION_CONTAINER_MAP_DETAIL_VALUE_OF_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_MAP_DETAIL_VALUE_OF_IMPL_HPP
-
-#include <boost/fusion/sequence/intrinsic/value_at.hpp>
-#include <boost/type_traits/is_const.hpp>
-
-namespace boost { namespace fusion { namespace extension
-{
- template <typename>
- struct value_of_impl;
-
- template <>
- struct value_of_impl<map_iterator_tag>
- {
- template <typename It>
- struct apply
- {
- typedef typename
- result_of::value_at<
- typename mpl::if_<
- is_const<typename It::seq_type>
- , typename It::seq_type::storage_type const
- , typename It::seq_type::storage_type
- >::type
- , typename It::index
- >::type
- type;
- };
- };
-}}}
-
-#endif
diff --git a/3party/boost/boost/fusion/container/map/limits.hpp b/3party/boost/boost/fusion/container/map/limits.hpp
deleted file mode 100644
index ae5c378674..0000000000
--- a/3party/boost/boost/fusion/container/map/limits.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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_MAP_LIMITS_07212005_1104)
-#define FUSION_MAP_LIMITS_07212005_1104
-
-#include <boost/fusion/container/vector/limits.hpp>
-
-#if !defined(FUSION_MAX_MAP_SIZE)
-# define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE
-#else
-# if FUSION_MAX_MAP_SIZE < 3
-# undef FUSION_MAX_MAP_SIZE
-# if (FUSION_MAX_VECTOR_SIZE > 10)
-# define FUSION_MAX_MAP_SIZE 10
-# else
-# define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE
-# endif
-# endif
-#endif
-
-#define FUSION_MAX_MAP_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_MAP_SIZE))
-
-#endif
diff --git a/3party/boost/boost/fusion/container/map/map.hpp b/3party/boost/boost/fusion/container/map/map.hpp
index 5152e6e19d..80e53ee777 100644
--- a/3party/boost/boost/fusion/container/map/map.hpp
+++ b/3party/boost/boost/fusion/container/map/map.hpp
@@ -4,96 +4,129 @@
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_MAP_07212005_1106)
-#define FUSION_MAP_07212005_1106
+#if !defined(FUSION_MAP_MAIN_07212005_1106)
+#define FUSION_MAP_MAIN_07212005_1106
-#include <boost/fusion/support/pair.hpp>
-#include <boost/fusion/support/category_of.hpp>
-#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/map/map_fwd.hpp>
-#include <boost/fusion/container/map/detail/at_impl.hpp>
-#include <boost/fusion/container/map/detail/value_at_impl.hpp>
-#include <boost/fusion/container/map/detail/begin_impl.hpp>
-#include <boost/fusion/container/map/detail/end_impl.hpp>
-#include <boost/fusion/container/map/detail/value_of_impl.hpp>
-#include <boost/fusion/container/map/detail/deref_data_impl.hpp>
-#include <boost/fusion/container/map/detail/deref_impl.hpp>
-#include <boost/fusion/container/map/detail/key_of_impl.hpp>
-#include <boost/fusion/container/map/detail/value_of_data_impl.hpp>
-#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/bool.hpp>
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/map/detail/preprocessed/map.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/map" FUSION_MAX_MAP_SIZE_STR ".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
+#include <boost/fusion/support/pair.hpp>
- 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)
+///////////////////////////////////////////////////////////////////////////////
+// Without variadics, we will use the PP version
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
+# include <boost/fusion/container/map/detail/cpp03/map.hpp>
+#else
- This is an auto-generated file. Do not edit!
-==============================================================================*/
+///////////////////////////////////////////////////////////////////////////////
+// C++11 interface
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/fusion/container/map/detail/map_impl.hpp>
+#include <boost/fusion/container/map/detail/begin_impl.hpp>
+#include <boost/fusion/container/map/detail/end_impl.hpp>
+#include <boost/fusion/container/map/detail/at_impl.hpp>
+#include <boost/fusion/container/map/detail/at_key_impl.hpp>
+#include <boost/fusion/container/map/detail/value_at_impl.hpp>
+#include <boost/fusion/container/map/detail/value_at_key_impl.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/fusion/sequence/intrinsic/at_c.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/category_of.hpp>
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
+#include <boost/utility/enable_if.hpp>
namespace boost { namespace fusion
{
- struct void_;
- struct fusion_sequence_tag;
+ struct map_tag;
- template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, typename T)>
- struct map : sequence_base<map<BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)> >
+ template <typename ...T>
+ struct map : detail::map_impl<0, T...>, sequence_base<map<T...>>
{
- struct category : random_access_traversal_tag, associative_tag {};
-
typedef map_tag fusion_tag;
- typedef fusion_sequence_tag tag; // this gets picked up by MPL
+ typedef detail::map_impl<0, T...> base_type;
+
+ struct category : random_access_traversal_tag, associative_tag {};
+ typedef mpl::int_<base_type::size> size;
typedef mpl::false_ is_view;
- typedef vector<
- BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)>
- storage_type;
+ BOOST_FUSION_GPU_ENABLED
+ map() {}
- typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
+ map(map const& seq)
+ : base_type(seq.base())
+ {}
- map()
- : data() {}
+ BOOST_FUSION_GPU_ENABLED
+ map(map&& seq)
+ : base_type(std::forward<map>(seq))
+ {}
template <typename Sequence>
- map(Sequence const& rhs)
- : data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
+ map(Sequence const& seq
+ , typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
+ : base_type(begin(seq), detail::map_impl_from_iterator())
+ {}
- #include <boost/fusion/container/map/detail/map_forward_ctor.hpp>
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ map(Sequence& seq
+ , typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
+ : base_type(begin(seq), detail::map_impl_from_iterator())
+ {}
- template <typename T>
- map&
- operator=(T const& rhs)
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ map(Sequence&& seq
+ , typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
+ : base_type(begin(seq), detail::map_impl_from_iterator())
+ {}
+
+ template <typename First, typename ...T_>
+ BOOST_FUSION_GPU_ENABLED
+ map(First const& first, T_ const&... rest)
+ : base_type(first, rest...)
+ {}
+
+ template <typename First, typename ...T_>
+ BOOST_FUSION_GPU_ENABLED
+ map(First&& first, T_&&... rest)
+ : base_type(std::forward<First>(first), std::forward<T_>(rest)...)
+ {}
+
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(map const& rhs)
{
- data = rhs;
+ base_type::operator=(rhs.base());
return *this;
}
- storage_type& get_data() { return data; }
- storage_type const& get_data() const { return data; }
+ BOOST_FUSION_GPU_ENABLED
+ map& operator=(map&& rhs)
+ {
+ base_type::operator=(std::forward<base_type>(rhs.base()));
+ return *this;
+ }
- private:
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ typename enable_if<traits::is_sequence<Sequence>, map&>::type
+ operator=(Sequence const& seq)
+ {
+ base().assign(begin(seq), detail::map_impl_from_iterator());
+ return *this;
+ }
- storage_type data;
+ BOOST_FUSION_GPU_ENABLED
+ base_type& base() { return *this; }
+ BOOST_FUSION_GPU_ENABLED
+ base_type const& base() const { return *this; }
};
}}
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
#endif
diff --git a/3party/boost/boost/fusion/container/map/map_fwd.hpp b/3party/boost/boost/fusion/container/map/map_fwd.hpp
index 76c5eea7fe..0eca6299ff 100644
--- a/3party/boost/boost/fusion/container/map/map_fwd.hpp
+++ b/3party/boost/boost/fusion/container/map/map_fwd.hpp
@@ -4,49 +4,42 @@
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_MAP_FORWARD_07212005_1105)
-#define FUSION_MAP_FORWARD_07212005_1105
-
-#include <boost/fusion/container/map/limits.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/map/detail/preprocessed/map_fwd.hpp>
+#if !defined(FUSION_MAP_FORWARD_MAIN_07212005_1105)
+#define FUSION_MAP_FORWARD_MAIN_07212005_1105
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/config.hpp>
+
+#if (defined(BOOST_NO_CXX11_DECLTYPE) \
+ || defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) \
+ || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)) \
+ || (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+# if defined(BOOST_FUSION_HAS_VARIADIC_MAP)
+# undef BOOST_FUSION_HAS_VARIADIC_MAP
+# endif
#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/map" FUSION_MAX_MAP_SIZE_STR "_fwd.hpp")
+# if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
+# define BOOST_FUSION_HAS_VARIADIC_MAP
+# endif
#endif
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
-
- 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
+///////////////////////////////////////////////////////////////////////////////
+// With no decltype and variadics, we will use the C++03 version
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
+# include <boost/fusion/container/map/detail/cpp03/map_fwd.hpp>
+#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
+#include <boost/fusion/container/map/detail/map_impl.hpp>
+///////////////////////////////////////////////////////////////////////////////
+// C++11 interface
+///////////////////////////////////////////////////////////////////////////////
namespace boost { namespace fusion
{
- struct void_;
- struct map_tag;
- struct map_iterator_tag;
-
- template <
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- FUSION_MAX_MAP_SIZE, typename T, void_)
- >
+ template <typename ...T>
struct map;
}}
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
#endif
diff --git a/3party/boost/boost/fusion/container/map/map_iterator.hpp b/3party/boost/boost/fusion/container/map/map_iterator.hpp
new file mode 100644
index 0000000000..1c03d8eb9e
--- /dev/null
+++ b/3party/boost/boost/fusion/container/map/map_iterator.hpp
@@ -0,0 +1,153 @@
+/*=============================================================================
+ Copyright (c) 2005-2013 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ 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_FUSION_MAP_ITERATOR_02042013_0835)
+#define BOOST_FUSION_MAP_ITERATOR_02042013_0835
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/iterator/iterator_facade.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/equal_to.hpp>
+
+namespace boost { namespace fusion
+{
+ struct random_access_traversal_tag;
+
+ template <typename Seq, int Pos>
+ struct map_iterator
+ : iterator_facade<
+ map_iterator<Seq, Pos>
+ , typename Seq::category>
+ {
+ typedef Seq sequence;
+ typedef mpl::int_<Pos> index;
+
+ BOOST_FUSION_GPU_ENABLED
+ map_iterator(Seq& seq)
+ : seq_(seq)
+ {}
+
+ template<typename Iterator>
+ struct value_of
+ {
+ typedef typename Iterator::sequence sequence;
+ typedef typename Iterator::index index;
+ typedef
+ decltype(std::declval<sequence>().get_val(index()))
+ type;
+ };
+
+ template<typename Iterator>
+ struct value_of_data
+ {
+ typedef typename Iterator::sequence sequence;
+ typedef typename Iterator::index index;
+ typedef
+ decltype(std::declval<sequence>().get_val(index()).second)
+ type;
+ };
+
+ template<typename Iterator>
+ struct key_of
+ {
+ typedef typename Iterator::sequence sequence;
+ typedef typename Iterator::index index;
+ typedef decltype(std::declval<sequence>().get_key(index())) key_identity_type;
+ typedef typename key_identity_type::type type;
+ };
+
+ template<typename Iterator>
+ struct deref
+ {
+ typedef typename Iterator::sequence sequence;
+ typedef typename Iterator::index index;
+ typedef
+ decltype(std::declval<sequence>().get(index()))
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(Iterator const& it)
+ {
+ return it.seq_.get(typename Iterator::index());
+ }
+ };
+
+ template<typename Iterator>
+ struct deref_data
+ {
+ typedef typename Iterator::sequence sequence;
+ typedef typename Iterator::index index;
+ typedef
+ decltype(std::declval<sequence>().get(index()).second)
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(Iterator const& it)
+ {
+ return it.seq_.get(typename Iterator::index()).second;
+ }
+ };
+
+ template <typename Iterator, typename N>
+ struct advance
+ {
+ typedef typename Iterator::index index;
+ typedef typename Iterator::sequence sequence;
+ typedef map_iterator<sequence, index::value + N::value> type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(Iterator const& i)
+ {
+ return type(i.seq_);
+ }
+ };
+
+ template<typename Iterator>
+ struct next
+ : advance<Iterator, mpl::int_<1> >
+ {};
+
+ template<typename Iterator>
+ struct prior
+ : advance<Iterator, mpl::int_<-1> >
+ {};
+
+ template <typename I1, typename I2>
+ struct distance
+ {
+ typedef typename
+ mpl::minus<
+ typename I2::index, typename I1::index
+ >::type
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
+ static type
+ call(I1 const&, I2 const&)
+ {
+ return type();
+ }
+ };
+
+ template<typename I1, typename I2>
+ struct equal_to
+ : mpl::equal_to<typename I1::index, typename I2::index>
+ {};
+
+ Seq& seq_;
+
+ private:
+ // silence MSVC warning C4512: assignment operator could not be generated
+ map_iterator& operator= (map_iterator const&);
+ };
+
+}}
+
+#endif
diff --git a/3party/boost/boost/fusion/container/set.hpp b/3party/boost/boost/fusion/container/set.hpp
index 81ac261ee4..6445397464 100644
--- a/3party/boost/boost/fusion/container/set.hpp
+++ b/3party/boost/boost/fusion/container/set.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_CLASS_SET_10022005_0607)
#define FUSION_SEQUENCE_CLASS_SET_10022005_0607
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/limits.hpp>
#include <boost/fusion/container/set/set.hpp>
#include <boost/fusion/container/set/set_fwd.hpp>
diff --git a/3party/boost/boost/fusion/container/set/convert.hpp b/3party/boost/boost/fusion/container/set/convert.hpp
index c268e5d9d1..631c251d44 100644
--- a/3party/boost/boost/fusion/container/set/convert.hpp
+++ b/3party/boost/boost/fusion/container/set/convert.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_CONVERT_09232005_1341)
#define FUSION_CONVERT_09232005_1341
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/detail/as_set.hpp>
#include <boost/fusion/container/set/detail/convert_impl.hpp>
#include <boost/fusion/container/set/set.hpp>
@@ -28,6 +29,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_set<Sequence>::type
as_set(Sequence& seq)
{
@@ -36,6 +38,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_set<Sequence const>::type
as_set(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/as_set.hpp b/3party/boost/boost/fusion/container/set/detail/as_set.hpp
index 19c0b3521d..26a719e3be 100644
--- a/3party/boost/boost/fusion/container/set/detail/as_set.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/as_set.hpp
@@ -35,6 +35,7 @@ namespace boost { namespace fusion { namespace detail
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator)
{
@@ -115,6 +116,7 @@ namespace boost { namespace fusion { namespace detail
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/set/detail/begin_impl.hpp
index 348af7ed37..df522b5742 100644
--- a/3party/boost/boost/fusion/container/set/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/begin_impl.hpp
@@ -9,6 +9,7 @@
#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_BEGIN_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_BEGIN_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
namespace boost { namespace fusion { namespace extension
@@ -31,6 +32,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/set/detail/convert_impl.hpp
index a9fba752df..4a24dff883 100644
--- a/3party/boost/boost/fusion/container/set/detail/convert_impl.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/convert_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_CONVERT_IMPL_09232005_1341)
#define FUSION_CONVERT_IMPL_09232005_1341
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/detail/as_set.hpp>
#include <boost/fusion/container/set/set.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
@@ -33,6 +34,7 @@ namespace boost { namespace fusion
template apply<typename result_of::begin<Sequence>::type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
return gen::call(fusion::begin(seq));
diff --git a/3party/boost/boost/fusion/container/set/detail/deref_data_impl.hpp b/3party/boost/boost/fusion/container/set/detail/deref_data_impl.hpp
index 7238cc6f11..05e44a9226 100644
--- a/3party/boost/boost/fusion/container/set/detail/deref_data_impl.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/deref_data_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_DEREF_DATA_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_DEREF_DATA_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/detail/deref_impl.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/container/set/detail/deref_impl.hpp b/3party/boost/boost/fusion/container/set/detail/deref_impl.hpp
index 10a0349687..4a43819d13 100644
--- a/3party/boost/boost/fusion/container/set/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/deref_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_DEREF_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_DEREF_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/type_traits/is_const.hpp>
@@ -33,6 +34,7 @@ namespace boost { namespace fusion { namespace extension
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/end_impl.hpp b/3party/boost/boost/fusion/container/set/detail/end_impl.hpp
index 13fa5b53db..b793addc1e 100644
--- a/3party/boost/boost/fusion/container/set/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/end_impl.hpp
@@ -9,6 +9,7 @@
#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_END_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_END_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
namespace boost { namespace fusion { namespace extension
@@ -31,6 +32,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/key_of_impl.hpp b/3party/boost/boost/fusion/container/set/detail/key_of_impl.hpp
index 9c56aaf5da..0e453ee23c 100644
--- a/3party/boost/boost/fusion/container/set/detail/key_of_impl.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/key_of_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_KEY_OF_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_KEY_OF_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/detail/value_of_data_impl.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set10.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set10.hpp
index a7386dc6be..f285cd5aad 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set10.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set10.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set20.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set20.hpp
index 0e7da29f02..b7ad7fa39a 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set20.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set20.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -219,6 +229,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -239,6 +250,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -259,6 +271,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -279,6 +292,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -299,6 +313,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -319,6 +334,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -339,6 +355,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -359,6 +376,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -379,6 +397,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -399,6 +418,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set30.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set30.hpp
index b7bfedcca1..7a97a8e55a 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set30.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set30.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -219,6 +229,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -239,6 +250,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -259,6 +271,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -279,6 +292,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -299,6 +313,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -319,6 +334,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -339,6 +355,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -359,6 +376,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -379,6 +397,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -399,6 +418,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -419,6 +439,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -439,6 +460,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -459,6 +481,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -479,6 +502,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -499,6 +523,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -519,6 +544,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -539,6 +565,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -559,6 +586,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -579,6 +607,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -599,6 +628,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set40.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set40.hpp
index 77930e2954..8e98f68a8b 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set40.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set40.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -219,6 +229,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -239,6 +250,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -259,6 +271,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -279,6 +292,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -299,6 +313,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -319,6 +334,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -339,6 +355,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -359,6 +376,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -379,6 +397,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -399,6 +418,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -419,6 +439,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -439,6 +460,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -459,6 +481,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -479,6 +502,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -499,6 +523,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -519,6 +544,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -539,6 +565,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -559,6 +586,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -579,6 +607,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -599,6 +628,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -619,6 +649,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -639,6 +670,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -659,6 +691,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -679,6 +712,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -699,6 +733,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -719,6 +754,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -739,6 +775,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -759,6 +796,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -779,6 +817,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -799,6 +838,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set50.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set50.hpp
index f33cbb3b78..6cefd9a15c 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set50.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set50.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -219,6 +229,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -239,6 +250,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -259,6 +271,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -279,6 +292,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -299,6 +313,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -319,6 +334,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -339,6 +355,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -359,6 +376,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -379,6 +397,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -399,6 +418,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -419,6 +439,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -439,6 +460,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -459,6 +481,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -479,6 +502,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -499,6 +523,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -519,6 +544,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -539,6 +565,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -559,6 +586,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -579,6 +607,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -599,6 +628,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -619,6 +649,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -639,6 +670,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -659,6 +691,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -679,6 +712,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -699,6 +733,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -719,6 +754,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -739,6 +775,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -759,6 +796,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -779,6 +817,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -799,6 +838,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -819,6 +859,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -839,6 +880,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -859,6 +901,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -879,6 +922,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -899,6 +943,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -919,6 +964,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -939,6 +985,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -959,6 +1006,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -979,6 +1027,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -999,6 +1048,7 @@ namespace boost { namespace fusion { namespace detail
typedef set<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set10.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set10.hpp
index d53bd3f81f..92c3465314 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/set10.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set10.hpp
@@ -21,40 +21,55 @@ namespace boost { namespace fusion
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
storage_type;
typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
set()
: data() {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
set(Sequence const& rhs)
: data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
set(typename detail::call_param<T0 >::type _0)
: data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
set&
operator=(T const& rhs)
{
data = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
storage_type const& get_data() const { return data; }
private:
storage_type data;
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set20.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set20.hpp
index 259fcf3cb9..9860456392 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/set20.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set20.hpp
@@ -21,60 +21,85 @@ namespace boost { namespace fusion
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
storage_type;
typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
set()
: data() {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
set(Sequence const& rhs)
: data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
set(typename detail::call_param<T0 >::type _0)
: data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
set&
operator=(T const& rhs)
{
data = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
storage_type const& get_data() const { return data; }
private:
storage_type data;
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set30.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set30.hpp
index b4fea40a33..7227bf71e8 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/set30.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set30.hpp
@@ -21,80 +21,115 @@ namespace boost { namespace fusion
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
storage_type;
typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
set()
: data() {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
set(Sequence const& rhs)
: data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
set(typename detail::call_param<T0 >::type _0)
: data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
set&
operator=(T const& rhs)
{
data = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
storage_type const& get_data() const { return data; }
private:
storage_type data;
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set40.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set40.hpp
index 62ca9f2d69..f1944ca933 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/set40.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set40.hpp
@@ -21,100 +21,145 @@ namespace boost { namespace fusion
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
storage_type;
typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
set()
: data() {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
set(Sequence const& rhs)
: data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
set(typename detail::call_param<T0 >::type _0)
: data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
set&
operator=(T const& rhs)
{
data = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
storage_type const& get_data() const { return data; }
private:
storage_type data;
diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set50.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set50.hpp
index da9a25cc15..5464614420 100644
--- a/3party/boost/boost/fusion/container/set/detail/preprocessed/set50.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set50.hpp
@@ -21,120 +21,175 @@ namespace boost { namespace fusion
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
storage_type;
typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
set()
: data() {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
set(Sequence const& rhs)
: data(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
set(typename detail::call_param<T0 >::type _0)
: data(_0) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: data(_0 , _1) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: data(_0 , _1 , _2) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: data(_0 , _1 , _2 , _3) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: data(_0 , _1 , _2 , _3 , _4) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: data(_0 , _1 , _2 , _3 , _4 , _5) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {}
+ BOOST_FUSION_GPU_ENABLED
set(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48 , typename detail::call_param<T49 >::type _49)
: data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
set&
operator=(T const& rhs)
{
data = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
storage_type const& get_data() const { return data; }
private:
storage_type data;
diff --git a/3party/boost/boost/fusion/container/set/detail/set_forward_ctor.hpp b/3party/boost/boost/fusion/container/set/detail/set_forward_ctor.hpp
index 789c7f3413..9e6fd926d4 100644
--- a/3party/boost/boost/fusion/container/set/detail/set_forward_ctor.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/set_forward_ctor.hpp
@@ -27,6 +27,7 @@
#define N BOOST_PP_ITERATION()
+ BOOST_FUSION_GPU_ENABLED
#if N == 1
explicit
#endif
diff --git a/3party/boost/boost/fusion/container/set/detail/value_of_data_impl.hpp b/3party/boost/boost/fusion/container/set/detail/value_of_data_impl.hpp
index c98e5b9f77..9059dd87eb 100644
--- a/3party/boost/boost/fusion/container/set/detail/value_of_data_impl.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/value_of_data_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_VALUE_OF_DATA_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_VALUE_OF_DATA_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/detail/value_of_data_impl.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/container/set/detail/value_of_impl.hpp b/3party/boost/boost/fusion/container/set/detail/value_of_impl.hpp
index 02218310ae..e12ab162c0 100644
--- a/3party/boost/boost/fusion/container/set/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/container/set/detail/value_of_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_VALUE_OF_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_VALUE_OF_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/container/set/limits.hpp b/3party/boost/boost/fusion/container/set/limits.hpp
index d01920e71d..adfecdbd0a 100644
--- a/3party/boost/boost/fusion/container/set/limits.hpp
+++ b/3party/boost/boost/fusion/container/set/limits.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SET_LIMITS_09162005_1103)
#define FUSION_SET_LIMITS_09162005_1103
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/limits.hpp>
#if !defined(FUSION_MAX_SET_SIZE)
diff --git a/3party/boost/boost/fusion/container/set/set.hpp b/3party/boost/boost/fusion/container/set/set.hpp
index f26ea740ff..e1d019a77b 100644
--- a/3party/boost/boost/fusion/container/set/set.hpp
+++ b/3party/boost/boost/fusion/container/set/set.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SET_09162005_1104)
#define FUSION_SET_09162005_1104
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/support/detail/access.hpp>
@@ -62,16 +63,19 @@ namespace boost { namespace fusion
typedef typename storage_type::size size;
+ BOOST_FUSION_GPU_ENABLED
set()
: data() {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
set(Sequence const& rhs)
: data(rhs) {}
#include <boost/fusion/container/set/detail/set_forward_ctor.hpp>
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
set&
operator=(T const& rhs)
{
@@ -79,7 +83,9 @@ namespace boost { namespace fusion
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
storage_type& get_data() { return data; }
+ BOOST_FUSION_GPU_ENABLED
storage_type const& get_data() const { return data; }
private:
diff --git a/3party/boost/boost/fusion/container/set/set_fwd.hpp b/3party/boost/boost/fusion/container/set/set_fwd.hpp
index 7b09d165ae..2de3db6d5b 100644
--- a/3party/boost/boost/fusion/container/set/set_fwd.hpp
+++ b/3party/boost/boost/fusion/container/set/set_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SET_FORWARD_09162005_1102)
#define FUSION_SET_FORWARD_09162005_1102
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/limits.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
diff --git a/3party/boost/boost/fusion/container/vector.hpp b/3party/boost/boost/fusion/container/vector.hpp
index fa64cd0ff1..06fa5a04bb 100644
--- a/3party/boost/boost/fusion/container/vector.hpp
+++ b/3party/boost/boost/fusion/container/vector.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_CLASS_VECTOR_10022005_0602)
#define FUSION_SEQUENCE_CLASS_VECTOR_10022005_0602
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/limits.hpp>
#include <boost/fusion/container/vector/vector10.hpp>
diff --git a/3party/boost/boost/fusion/container/vector/convert.hpp b/3party/boost/boost/fusion/container/vector/convert.hpp
index b317f995b7..0582fe5cbf 100644
--- a/3party/boost/boost/fusion/container/vector/convert.hpp
+++ b/3party/boost/boost/fusion/container/vector/convert.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_CONVERT_09222005_1104)
#define FUSION_CONVERT_09222005_1104
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/detail/as_vector.hpp>
#include <boost/fusion/container/vector/detail/convert_impl.hpp>
#include <boost/fusion/container/vector/vector.hpp>
@@ -28,6 +29,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_vector<Sequence>::type
as_vector(Sequence& seq)
{
@@ -36,6 +38,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::as_vector<Sequence const>::type
as_vector(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/advance_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/advance_impl.hpp
index cded8f49f4..af45a1a8ef 100644
--- a/3party/boost/boost/fusion/container/vector/detail/advance_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/advance_impl.hpp
@@ -29,6 +29,7 @@ namespace boost { namespace fusion
typedef typename Iterator::vector vector;
typedef vector_iterator<vector, index::value+N::value> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/as_vector.hpp b/3party/boost/boost/fusion/container/vector/detail/as_vector.hpp
index a311bd6389..2224fcc6ab 100644
--- a/3party/boost/boost/fusion/container/vector/detail/as_vector.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/as_vector.hpp
@@ -35,6 +35,7 @@ namespace boost { namespace fusion { namespace detail
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator)
{
@@ -116,6 +117,7 @@ namespace boost { namespace fusion { namespace detail
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/at_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/at_impl.hpp
index 0017d9c813..eb09b212a6 100644
--- a/3party/boost/boost/fusion/container/vector/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/at_impl.hpp
@@ -1,12 +1,13 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_AT_IMPL_05042005_0741)
#define FUSION_AT_IMPL_05042005_0741
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/mpl/at.hpp>
@@ -25,14 +26,16 @@ namespace boost { namespace fusion
struct at_impl<vector_tag>
{
template <typename Sequence, typename N>
- struct apply
+ struct apply
{
typedef typename mpl::at<typename Sequence::types, N>::type element;
typedef typename detail::ref_result<element>::type type;
-
+
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{
+ BOOST_STATIC_ASSERT((N::value < Sequence::size::value));
return v.at_impl(N());
}
};
@@ -42,10 +45,12 @@ namespace boost { namespace fusion
{
typedef typename mpl::at<typename Sequence::types, N>::type element;
typedef typename detail::cref_result<element>::type type;
-
+
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence const& v)
{
+ BOOST_STATIC_ASSERT((N::value < Sequence::size::value));
return v.at_impl(N());
}
};
diff --git a/3party/boost/boost/fusion/container/vector/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/begin_impl.hpp
index f5583ba6c1..026b34ff6e 100644
--- a/3party/boost/boost/fusion/container/vector/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/begin_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_BEGIN_IMPL_05042005_1136)
#define FUSION_BEGIN_IMPL_05042005_1136
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector_iterator.hpp>
namespace boost { namespace fusion
@@ -26,6 +27,7 @@ namespace boost { namespace fusion
{
typedef vector_iterator<Sequence, 0> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/convert_impl.hpp
index 633e688f02..ddf42590b0 100644
--- a/3party/boost/boost/fusion/container/vector/detail/convert_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/convert_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_CONVERT_IMPL_09222005_1104)
#define FUSION_CONVERT_IMPL_09222005_1104
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/detail/as_vector.hpp>
#include <boost/fusion/container/vector/vector.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
@@ -33,6 +34,7 @@ namespace boost { namespace fusion
template apply<typename result_of::begin<Sequence>::type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
return gen::call(fusion::begin(seq));
diff --git a/3party/boost/boost/fusion/container/vector/detail/deref_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/deref_impl.hpp
index 8c5fb94207..b338d2fe20 100644
--- a/3party/boost/boost/fusion/container/vector/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/deref_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_DEREF_IMPL_05042005_1037)
#define FUSION_DEREF_IMPL_05042005_1037
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/type_traits/is_const.hpp>
@@ -41,6 +42,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/distance_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/distance_impl.hpp
index 146d5ba12c..948355383f 100644
--- a/3party/boost/boost/fusion/container/vector/detail/distance_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/distance_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_DISTANCE_IMPL_09172005_0751)
#define FUSION_DISTANCE_IMPL_09172005_0751
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/minus.hpp>
namespace boost { namespace fusion
@@ -24,6 +25,7 @@ namespace boost { namespace fusion
template <typename First, typename Last>
struct apply : mpl::minus<typename Last::index, typename First::index>
{
+ BOOST_FUSION_GPU_ENABLED
static typename mpl::minus<
typename Last::index, typename First::index>::type
call(First const&, Last const&)
diff --git a/3party/boost/boost/fusion/container/vector/detail/end_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/end_impl.hpp
index fde365c7f8..14c6715775 100644
--- a/3party/boost/boost/fusion/container/vector/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/end_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_END_IMPL_05042005_1142)
#define FUSION_END_IMPL_05042005_1142
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector_iterator.hpp>
namespace boost { namespace fusion
@@ -27,6 +28,7 @@ namespace boost { namespace fusion
typedef typename Sequence::size size;
typedef vector_iterator<Sequence, size::value> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/equal_to_impl.hpp
index 3c6fcbd2ee..50420cc827 100644
--- a/3party/boost/boost/fusion/container/vector/detail/equal_to_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/equal_to_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_EQUAL_TO_IMPL_05052005_1215)
#define FUSION_EQUAL_TO_IMPL_05052005_1215
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/mpl/equal_to.hpp>
#include <boost/mpl/and.hpp>
diff --git a/3party/boost/boost/fusion/container/vector/detail/next_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/next_impl.hpp
index 169297d524..78aef85d56 100644
--- a/3party/boost/boost/fusion/container/vector/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/next_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_NEXT_IMPL_05042005_1058)
#define FUSION_NEXT_IMPL_05042005_1058
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector_iterator.hpp>
namespace boost { namespace fusion
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
typedef typename Iterator::index index;
typedef vector_iterator<vector, index::value+1> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp
index 312a42a1ff..8a48beda9e 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector1<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector2<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector3<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector4<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector5<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector6<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector7<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector8<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector9<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector10<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector20.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector20.hpp
index 0893bcfdb3..63bb0d5899 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector20.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector20.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector1<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector2<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector3<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector4<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector5<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector6<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector7<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector8<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector9<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector10<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -219,6 +229,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector11<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -239,6 +250,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector12<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -259,6 +271,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector13<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -279,6 +292,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector14<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -299,6 +313,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector15<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -319,6 +334,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector16<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -339,6 +355,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector17<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -359,6 +376,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector18<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -379,6 +397,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector19<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -399,6 +418,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector20<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector30.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector30.hpp
index dcea3f4c6e..8888b2d8b9 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector30.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector30.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector1<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector2<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector3<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector4<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector5<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector6<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector7<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector8<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector9<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector10<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -219,6 +229,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector11<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -239,6 +250,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector12<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -259,6 +271,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector13<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -279,6 +292,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector14<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -299,6 +313,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector15<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -319,6 +334,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector16<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -339,6 +355,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector17<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -359,6 +376,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector18<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -379,6 +397,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector19<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -399,6 +418,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector20<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -419,6 +439,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector21<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -439,6 +460,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector22<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -459,6 +481,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector23<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -479,6 +502,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector24<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -499,6 +523,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector25<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -519,6 +544,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector26<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -539,6 +565,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector27<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -559,6 +586,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector28<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -579,6 +607,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector29<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -599,6 +628,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector30<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector40.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector40.hpp
index 465ae1191a..cfd7b055ec 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector40.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector40.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector1<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector2<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector3<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector4<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector5<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector6<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector7<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector8<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector9<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector10<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -219,6 +229,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector11<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -239,6 +250,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector12<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -259,6 +271,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector13<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -279,6 +292,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector14<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -299,6 +313,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector15<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -319,6 +334,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector16<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -339,6 +355,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector17<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -359,6 +376,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector18<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -379,6 +397,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector19<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -399,6 +418,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector20<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -419,6 +439,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector21<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -439,6 +460,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector22<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -459,6 +481,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector23<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -479,6 +502,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector24<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -499,6 +523,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector25<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -519,6 +544,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector26<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -539,6 +565,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector27<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -559,6 +586,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector28<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -579,6 +607,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector29<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -599,6 +628,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector30<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -619,6 +649,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector31<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -639,6 +670,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector32<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -659,6 +691,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector33<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -679,6 +712,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector34<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -699,6 +733,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector35<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -719,6 +754,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector36<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -739,6 +775,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector37<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -759,6 +796,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector38<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -779,6 +817,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector39<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -799,6 +838,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector40<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector50.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector50.hpp
index 5aa3fbc768..ea42ba2f8a 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector50.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector50.hpp
@@ -19,6 +19,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector1<T0> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -39,6 +40,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector2<T0 , T1> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector3<T0 , T1 , T2> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector4<T0 , T1 , T2 , T3> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -99,6 +103,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector5<T0 , T1 , T2 , T3 , T4> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -119,6 +124,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector6<T0 , T1 , T2 , T3 , T4 , T5> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -139,6 +145,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector7<T0 , T1 , T2 , T3 , T4 , T5 , T6> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -159,6 +166,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector8<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -179,6 +187,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector9<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -199,6 +208,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector10<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -219,6 +229,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector11<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -239,6 +250,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector12<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -259,6 +271,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector13<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -279,6 +292,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector14<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -299,6 +313,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector15<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -319,6 +334,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector16<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -339,6 +355,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector17<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -359,6 +376,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector18<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -379,6 +397,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector19<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -399,6 +418,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector20<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -419,6 +439,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector21<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -439,6 +460,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector22<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -459,6 +481,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector23<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -479,6 +502,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector24<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -499,6 +523,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector25<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -519,6 +544,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector26<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -539,6 +565,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector27<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -559,6 +586,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector28<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -579,6 +607,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector29<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -599,6 +628,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector30<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -619,6 +649,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector31<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -639,6 +670,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector32<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -659,6 +691,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector33<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -679,6 +712,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector34<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -699,6 +733,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector35<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -719,6 +754,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector36<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -739,6 +775,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector37<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -759,6 +796,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector38<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -779,6 +817,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector39<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -799,6 +838,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector40<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -819,6 +859,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector41<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -839,6 +880,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector42<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -859,6 +901,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector43<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -879,6 +922,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector44<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -899,6 +943,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector45<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -919,6 +964,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector46<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -939,6 +985,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector47<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -959,6 +1006,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector48<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -979,6 +1027,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector49<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
@@ -999,6 +1048,7 @@ namespace boost { namespace fusion { namespace detail
typedef vector50<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> type;
};
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
static typename apply<Iterator>::type
call(Iterator const& i0)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10.hpp
index 8ef9947de9..600b663f7e 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10.hpp
@@ -8,17 +8,35 @@
==============================================================================*/
namespace boost { namespace fusion
{
+ struct vector_tag;
+ struct fusion_sequence_tag;
+ struct random_access_traversal_tag;
template <typename T0>
struct vector_data1
{
+ BOOST_FUSION_GPU_ENABLED
vector_data1()
: m0() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data1(U0 && _0
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) {}
+ vector_data1(
+ vector_data1&& other)
+ : m0(std::forward<T0>(other.m0)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data1(
typename detail::call_param<T0 >::type _0)
: m0(_0) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data1(
vector_data1 const& other)
: m0(other.m0) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data1&
operator=(vector_data1 const& vec)
{
@@ -26,6 +44,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data1
init_from_sequence(Sequence const& seq)
{
@@ -35,6 +54,7 @@ namespace boost { namespace fusion
return vector_data1(*i0);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data1
init_from_sequence(Sequence& seq)
{
@@ -58,28 +78,63 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<1> size;
+ BOOST_FUSION_GPU_ENABLED
vector1() {}
+ BOOST_FUSION_GPU_ENABLED
explicit
vector1(
typename detail::call_param<T0 >::type _0)
: base_type(_0) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ vector1(U0&& _0
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : base_type(std::forward<U0>(_0)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector1(vector1&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector1(vector1 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector1&
+ operator=(vector1 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector1&
+ operator=(vector1&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0);
+ return *this;
+ }
+# endif
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
vector1(
vector1<U0> const& vec)
: base_type(vec.m0) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector1(
Sequence const& seq
, typename boost::disable_if<is_convertible<Sequence, T0> >::type* = 0
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector1(
Sequence& seq
, typename boost::disable_if<is_convertible<Sequence, T0> >::type* = 0
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
vector1&
operator=(vector1<U0> const& vec)
{
@@ -87,6 +142,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -96,14 +152,16 @@ namespace boost { namespace fusion
this->m0 = *i0;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -113,14 +171,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1>
struct vector_data2
{
+ BOOST_FUSION_GPU_ENABLED
vector_data2()
: m0() , m1() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data2(U0 && _0 , U1 && _1
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) {}
+ vector_data2(
+ vector_data2&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data2(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: m0(_0) , m1(_1) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data2(
vector_data2 const& other)
: m0(other.m0) , m1(other.m1) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data2&
operator=(vector_data2 const& vec)
{
@@ -128,6 +201,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data2
init_from_sequence(Sequence const& seq)
{
@@ -137,6 +211,7 @@ namespace boost { namespace fusion
return vector_data2(*i0 , *i1);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data2
init_from_sequence(Sequence& seq)
{
@@ -160,25 +235,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<2> size;
+ BOOST_FUSION_GPU_ENABLED
vector2() {}
+ BOOST_FUSION_GPU_ENABLED
vector2(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: base_type(_0 , _1) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
+ vector2(U0 && _0 , U1 && _1)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector2(vector2&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector2(vector2 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector2&
+ operator=(vector2 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector2&
+ operator=(vector2&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
vector2(
vector2<U0 , U1> const& vec)
: base_type(vec.m0 , vec.m1) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector2(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector2(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
vector2&
operator=(vector2<U0 , U1> const& vec)
{
@@ -186,6 +293,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -195,14 +303,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -212,14 +322,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2>
struct vector_data3
{
+ BOOST_FUSION_GPU_ENABLED
vector_data3()
: m0() , m1() , m2() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data3(U0 && _0 , U1 && _1 , U2 && _2
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) {}
+ vector_data3(
+ vector_data3&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data3(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: m0(_0) , m1(_1) , m2(_2) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data3(
vector_data3 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data3&
operator=(vector_data3 const& vec)
{
@@ -227,6 +352,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data3
init_from_sequence(Sequence const& seq)
{
@@ -236,6 +362,7 @@ namespace boost { namespace fusion
return vector_data3(*i0 , *i1 , *i2);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data3
init_from_sequence(Sequence& seq)
{
@@ -259,25 +386,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<3> size;
+ BOOST_FUSION_GPU_ENABLED
vector3() {}
+ BOOST_FUSION_GPU_ENABLED
vector3(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: base_type(_0 , _1 , _2) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
+ vector3(U0 && _0 , U1 && _1 , U2 && _2)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector3(vector3&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector3(vector3 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector3&
+ operator=(vector3 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector3&
+ operator=(vector3&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
vector3(
vector3<U0 , U1 , U2> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector3(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector3(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
vector3&
operator=(vector3<U0 , U1 , U2> const& vec)
{
@@ -285,6 +444,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -294,14 +454,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -311,14 +473,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3>
struct vector_data4
{
+ BOOST_FUSION_GPU_ENABLED
vector_data4()
: m0() , m1() , m2() , m3() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data4(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) {}
+ vector_data4(
+ vector_data4&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data4(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data4(
vector_data4 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data4&
operator=(vector_data4 const& vec)
{
@@ -326,6 +503,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data4
init_from_sequence(Sequence const& seq)
{
@@ -335,6 +513,7 @@ namespace boost { namespace fusion
return vector_data4(*i0 , *i1 , *i2 , *i3);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data4
init_from_sequence(Sequence& seq)
{
@@ -358,25 +537,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<4> size;
+ BOOST_FUSION_GPU_ENABLED
vector4() {}
+ BOOST_FUSION_GPU_ENABLED
vector4(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: base_type(_0 , _1 , _2 , _3) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
+ vector4(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector4(vector4&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector4(vector4 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector4&
+ operator=(vector4 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector4&
+ operator=(vector4&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
vector4(
vector4<U0 , U1 , U2 , U3> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector4(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector4(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
vector4&
operator=(vector4<U0 , U1 , U2 , U3> const& vec)
{
@@ -384,6 +595,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -393,14 +605,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -410,14 +624,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
struct vector_data5
{
+ BOOST_FUSION_GPU_ENABLED
vector_data5()
: m0() , m1() , m2() , m3() , m4() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data5(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) {}
+ vector_data5(
+ vector_data5&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data5(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data5(
vector_data5 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data5&
operator=(vector_data5 const& vec)
{
@@ -425,6 +654,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data5
init_from_sequence(Sequence const& seq)
{
@@ -434,6 +664,7 @@ namespace boost { namespace fusion
return vector_data5(*i0 , *i1 , *i2 , *i3 , *i4);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data5
init_from_sequence(Sequence& seq)
{
@@ -457,25 +688,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<5> size;
+ BOOST_FUSION_GPU_ENABLED
vector5() {}
+ BOOST_FUSION_GPU_ENABLED
vector5(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: base_type(_0 , _1 , _2 , _3 , _4) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
+ vector5(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector5(vector5&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector5(vector5 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector5&
+ operator=(vector5 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector5&
+ operator=(vector5&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
vector5(
vector5<U0 , U1 , U2 , U3 , U4> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector5(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector5(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
vector5&
operator=(vector5<U0 , U1 , U2 , U3 , U4> const& vec)
{
@@ -483,6 +746,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -492,14 +756,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -509,14 +775,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
struct vector_data6
{
+ BOOST_FUSION_GPU_ENABLED
vector_data6()
: m0() , m1() , m2() , m3() , m4() , m5() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data6(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) {}
+ vector_data6(
+ vector_data6&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data6(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data6(
vector_data6 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data6&
operator=(vector_data6 const& vec)
{
@@ -524,6 +805,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data6
init_from_sequence(Sequence const& seq)
{
@@ -533,6 +815,7 @@ namespace boost { namespace fusion
return vector_data6(*i0 , *i1 , *i2 , *i3 , *i4 , *i5);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data6
init_from_sequence(Sequence& seq)
{
@@ -556,25 +839,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<6> size;
+ BOOST_FUSION_GPU_ENABLED
vector6() {}
+ BOOST_FUSION_GPU_ENABLED
vector6(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: base_type(_0 , _1 , _2 , _3 , _4 , _5) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
+ vector6(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector6(vector6&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector6(vector6 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector6&
+ operator=(vector6 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector6&
+ operator=(vector6&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
vector6(
vector6<U0 , U1 , U2 , U3 , U4 , U5> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector6(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector6(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
vector6&
operator=(vector6<U0 , U1 , U2 , U3 , U4 , U5> const& vec)
{
@@ -582,6 +897,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -591,14 +907,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -608,14 +926,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
struct vector_data7
{
+ BOOST_FUSION_GPU_ENABLED
vector_data7()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data7(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) {}
+ vector_data7(
+ vector_data7&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data7(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data7(
vector_data7 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data7&
operator=(vector_data7 const& vec)
{
@@ -623,6 +956,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data7
init_from_sequence(Sequence const& seq)
{
@@ -632,6 +966,7 @@ namespace boost { namespace fusion
return vector_data7(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data7
init_from_sequence(Sequence& seq)
{
@@ -655,25 +990,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<7> size;
+ BOOST_FUSION_GPU_ENABLED
vector7() {}
+ BOOST_FUSION_GPU_ENABLED
vector7(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
+ vector7(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector7(vector7&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector7(vector7 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector7&
+ operator=(vector7 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector7&
+ operator=(vector7&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
vector7(
vector7<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector7(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector7(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
vector7&
operator=(vector7<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& vec)
{
@@ -681,6 +1048,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -690,14 +1058,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -707,14 +1077,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
struct vector_data8
{
+ BOOST_FUSION_GPU_ENABLED
vector_data8()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data8(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) {}
+ vector_data8(
+ vector_data8&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data8(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data8(
vector_data8 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data8&
operator=(vector_data8 const& vec)
{
@@ -722,6 +1107,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data8
init_from_sequence(Sequence const& seq)
{
@@ -731,6 +1117,7 @@ namespace boost { namespace fusion
return vector_data8(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data8
init_from_sequence(Sequence& seq)
{
@@ -754,25 +1141,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<8> size;
+ BOOST_FUSION_GPU_ENABLED
vector8() {}
+ BOOST_FUSION_GPU_ENABLED
vector8(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
+ vector8(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector8(vector8&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector8(vector8 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector8&
+ operator=(vector8 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector8&
+ operator=(vector8&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
vector8(
vector8<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector8(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector8(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
vector8&
operator=(vector8<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& vec)
{
@@ -780,6 +1199,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -789,14 +1209,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -806,14 +1228,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
struct vector_data9
{
+ BOOST_FUSION_GPU_ENABLED
vector_data9()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data9(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) {}
+ vector_data9(
+ vector_data9&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data9(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data9(
vector_data9 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data9&
operator=(vector_data9 const& vec)
{
@@ -821,6 +1258,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data9
init_from_sequence(Sequence const& seq)
{
@@ -830,6 +1268,7 @@ namespace boost { namespace fusion
return vector_data9(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data9
init_from_sequence(Sequence& seq)
{
@@ -853,25 +1292,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<9> size;
+ BOOST_FUSION_GPU_ENABLED
vector9() {}
+ BOOST_FUSION_GPU_ENABLED
vector9(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
+ vector9(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector9(vector9&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector9(vector9 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector9&
+ operator=(vector9 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector9&
+ operator=(vector9&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
vector9(
vector9<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector9(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector9(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
vector9&
operator=(vector9<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& vec)
{
@@ -879,6 +1350,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -888,14 +1360,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -905,14 +1379,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
struct vector_data10
{
+ BOOST_FUSION_GPU_ENABLED
vector_data10()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data10(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) {}
+ vector_data10(
+ vector_data10&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data10(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data10(
vector_data10 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data10&
operator=(vector_data10 const& vec)
{
@@ -920,6 +1409,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data10
init_from_sequence(Sequence const& seq)
{
@@ -929,6 +1419,7 @@ namespace boost { namespace fusion
return vector_data10(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data10
init_from_sequence(Sequence& seq)
{
@@ -952,25 +1443,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<10> size;
+ BOOST_FUSION_GPU_ENABLED
vector10() {}
+ BOOST_FUSION_GPU_ENABLED
vector10(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ vector10(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector10(vector10&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector10(vector10 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector10&
+ operator=(vector10 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector10&
+ operator=(vector10&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
vector10(
vector10<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector10(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector10(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
vector10&
operator=(vector10<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& vec)
{
@@ -978,6 +1501,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -987,14 +1511,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20.hpp
index 151acbbdc8..7b71763f23 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20.hpp
@@ -14,14 +14,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
struct vector_data11
{
+ BOOST_FUSION_GPU_ENABLED
vector_data11()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data11(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) {}
+ vector_data11(
+ vector_data11&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data11(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data11(
vector_data11 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data11&
operator=(vector_data11 const& vec)
{
@@ -29,6 +44,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data11
init_from_sequence(Sequence const& seq)
{
@@ -38,6 +54,7 @@ namespace boost { namespace fusion
return vector_data11(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data11
init_from_sequence(Sequence& seq)
{
@@ -61,25 +78,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<11> size;
+ BOOST_FUSION_GPU_ENABLED
vector11() {}
+ BOOST_FUSION_GPU_ENABLED
vector11(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
+ vector11(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector11(vector11&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector11(vector11 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector11&
+ operator=(vector11 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector11&
+ operator=(vector11&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
vector11(
vector11<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector11(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector11(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
vector11&
operator=(vector11<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& vec)
{
@@ -87,6 +136,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -96,14 +146,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -113,14 +165,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
struct vector_data12
{
+ BOOST_FUSION_GPU_ENABLED
vector_data12()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data12(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) {}
+ vector_data12(
+ vector_data12&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data12(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data12(
vector_data12 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data12&
operator=(vector_data12 const& vec)
{
@@ -128,6 +195,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data12
init_from_sequence(Sequence const& seq)
{
@@ -137,6 +205,7 @@ namespace boost { namespace fusion
return vector_data12(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data12
init_from_sequence(Sequence& seq)
{
@@ -160,25 +229,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<12> size;
+ BOOST_FUSION_GPU_ENABLED
vector12() {}
+ BOOST_FUSION_GPU_ENABLED
vector12(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
+ vector12(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector12(vector12&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector12(vector12 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector12&
+ operator=(vector12 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector12&
+ operator=(vector12&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
vector12(
vector12<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector12(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector12(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
vector12&
operator=(vector12<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& vec)
{
@@ -186,6 +287,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -195,14 +297,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -212,14 +316,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
struct vector_data13
{
+ BOOST_FUSION_GPU_ENABLED
vector_data13()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data13(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) {}
+ vector_data13(
+ vector_data13&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data13(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data13(
vector_data13 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data13&
operator=(vector_data13 const& vec)
{
@@ -227,6 +346,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data13
init_from_sequence(Sequence const& seq)
{
@@ -236,6 +356,7 @@ namespace boost { namespace fusion
return vector_data13(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data13
init_from_sequence(Sequence& seq)
{
@@ -259,25 +380,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<13> size;
+ BOOST_FUSION_GPU_ENABLED
vector13() {}
+ BOOST_FUSION_GPU_ENABLED
vector13(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
+ vector13(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector13(vector13&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector13(vector13 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector13&
+ operator=(vector13 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector13&
+ operator=(vector13&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
vector13(
vector13<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector13(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector13(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
vector13&
operator=(vector13<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& vec)
{
@@ -285,6 +438,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -294,14 +448,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -311,14 +467,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
struct vector_data14
{
+ BOOST_FUSION_GPU_ENABLED
vector_data14()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data14(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) {}
+ vector_data14(
+ vector_data14&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data14(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data14(
vector_data14 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data14&
operator=(vector_data14 const& vec)
{
@@ -326,6 +497,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data14
init_from_sequence(Sequence const& seq)
{
@@ -335,6 +507,7 @@ namespace boost { namespace fusion
return vector_data14(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data14
init_from_sequence(Sequence& seq)
{
@@ -358,25 +531,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<14> size;
+ BOOST_FUSION_GPU_ENABLED
vector14() {}
+ BOOST_FUSION_GPU_ENABLED
vector14(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
+ vector14(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector14(vector14&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector14(vector14 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector14&
+ operator=(vector14 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector14&
+ operator=(vector14&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
vector14(
vector14<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector14(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector14(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
vector14&
operator=(vector14<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& vec)
{
@@ -384,6 +589,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -393,14 +599,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -410,14 +618,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
struct vector_data15
{
+ BOOST_FUSION_GPU_ENABLED
vector_data15()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data15(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) {}
+ vector_data15(
+ vector_data15&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data15(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data15(
vector_data15 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data15&
operator=(vector_data15 const& vec)
{
@@ -425,6 +648,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data15
init_from_sequence(Sequence const& seq)
{
@@ -434,6 +658,7 @@ namespace boost { namespace fusion
return vector_data15(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data15
init_from_sequence(Sequence& seq)
{
@@ -457,25 +682,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<15> size;
+ BOOST_FUSION_GPU_ENABLED
vector15() {}
+ BOOST_FUSION_GPU_ENABLED
vector15(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
+ vector15(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector15(vector15&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector15(vector15 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector15&
+ operator=(vector15 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector15&
+ operator=(vector15&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
vector15(
vector15<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector15(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector15(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
vector15&
operator=(vector15<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& vec)
{
@@ -483,6 +740,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -492,14 +750,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -509,14 +769,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
struct vector_data16
{
+ BOOST_FUSION_GPU_ENABLED
vector_data16()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data16(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) {}
+ vector_data16(
+ vector_data16&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data16(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data16(
vector_data16 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data16&
operator=(vector_data16 const& vec)
{
@@ -524,6 +799,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data16
init_from_sequence(Sequence const& seq)
{
@@ -533,6 +809,7 @@ namespace boost { namespace fusion
return vector_data16(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data16
init_from_sequence(Sequence& seq)
{
@@ -556,25 +833,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<16> size;
+ BOOST_FUSION_GPU_ENABLED
vector16() {}
+ BOOST_FUSION_GPU_ENABLED
vector16(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
+ vector16(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector16(vector16&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector16(vector16 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector16&
+ operator=(vector16 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector16&
+ operator=(vector16&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
vector16(
vector16<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector16(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector16(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
vector16&
operator=(vector16<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& vec)
{
@@ -582,6 +891,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -591,14 +901,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -608,14 +920,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
struct vector_data17
{
+ BOOST_FUSION_GPU_ENABLED
vector_data17()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data17(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) {}
+ vector_data17(
+ vector_data17&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data17(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data17(
vector_data17 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data17&
operator=(vector_data17 const& vec)
{
@@ -623,6 +950,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data17
init_from_sequence(Sequence const& seq)
{
@@ -632,6 +960,7 @@ namespace boost { namespace fusion
return vector_data17(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data17
init_from_sequence(Sequence& seq)
{
@@ -655,25 +984,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<17> size;
+ BOOST_FUSION_GPU_ENABLED
vector17() {}
+ BOOST_FUSION_GPU_ENABLED
vector17(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
+ vector17(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector17(vector17&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector17(vector17 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector17&
+ operator=(vector17 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector17&
+ operator=(vector17&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
vector17(
vector17<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector17(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector17(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
vector17&
operator=(vector17<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& vec)
{
@@ -681,6 +1042,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -690,14 +1052,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -707,14 +1071,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
struct vector_data18
{
+ BOOST_FUSION_GPU_ENABLED
vector_data18()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data18(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) {}
+ vector_data18(
+ vector_data18&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data18(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data18(
vector_data18 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data18&
operator=(vector_data18 const& vec)
{
@@ -722,6 +1101,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data18
init_from_sequence(Sequence const& seq)
{
@@ -731,6 +1111,7 @@ namespace boost { namespace fusion
return vector_data18(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data18
init_from_sequence(Sequence& seq)
{
@@ -754,25 +1135,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<18> size;
+ BOOST_FUSION_GPU_ENABLED
vector18() {}
+ BOOST_FUSION_GPU_ENABLED
vector18(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
+ vector18(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector18(vector18&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector18(vector18 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector18&
+ operator=(vector18 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector18&
+ operator=(vector18&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
vector18(
vector18<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector18(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector18(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
vector18&
operator=(vector18<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& vec)
{
@@ -780,6 +1193,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -789,14 +1203,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -806,14 +1222,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
struct vector_data19
{
+ BOOST_FUSION_GPU_ENABLED
vector_data19()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data19(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) {}
+ vector_data19(
+ vector_data19&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data19(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data19(
vector_data19 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data19&
operator=(vector_data19 const& vec)
{
@@ -821,6 +1252,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data19
init_from_sequence(Sequence const& seq)
{
@@ -830,6 +1262,7 @@ namespace boost { namespace fusion
return vector_data19(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data19
init_from_sequence(Sequence& seq)
{
@@ -853,25 +1286,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<19> size;
+ BOOST_FUSION_GPU_ENABLED
vector19() {}
+ BOOST_FUSION_GPU_ENABLED
vector19(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
+ vector19(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector19(vector19&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector19(vector19 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector19&
+ operator=(vector19 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector19&
+ operator=(vector19&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
vector19(
vector19<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector19(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector19(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
vector19&
operator=(vector19<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& vec)
{
@@ -879,6 +1344,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -888,14 +1354,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -905,14 +1373,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
struct vector_data20
{
+ BOOST_FUSION_GPU_ENABLED
vector_data20()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data20(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) {}
+ vector_data20(
+ vector_data20&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data20(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data20(
vector_data20 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data20&
operator=(vector_data20 const& vec)
{
@@ -920,6 +1403,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data20
init_from_sequence(Sequence const& seq)
{
@@ -929,6 +1413,7 @@ namespace boost { namespace fusion
return vector_data20(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data20
init_from_sequence(Sequence& seq)
{
@@ -952,25 +1437,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<20> size;
+ BOOST_FUSION_GPU_ENABLED
vector20() {}
+ BOOST_FUSION_GPU_ENABLED
vector20(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
+ vector20(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector20(vector20&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector20(vector20 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector20&
+ operator=(vector20 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector20&
+ operator=(vector20&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
vector20(
vector20<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector20(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector20(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
vector20&
operator=(vector20<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& vec)
{
@@ -978,6 +1495,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -987,14 +1505,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30.hpp
index 3810091bcf..8810fb0a71 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30.hpp
@@ -14,14 +14,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
struct vector_data21
{
+ BOOST_FUSION_GPU_ENABLED
vector_data21()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data21(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) {}
+ vector_data21(
+ vector_data21&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data21(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data21(
vector_data21 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data21&
operator=(vector_data21 const& vec)
{
@@ -29,6 +44,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data21
init_from_sequence(Sequence const& seq)
{
@@ -38,6 +54,7 @@ namespace boost { namespace fusion
return vector_data21(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data21
init_from_sequence(Sequence& seq)
{
@@ -61,25 +78,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<21> size;
+ BOOST_FUSION_GPU_ENABLED
vector21() {}
+ BOOST_FUSION_GPU_ENABLED
vector21(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
+ vector21(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector21(vector21&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector21(vector21 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector21&
+ operator=(vector21 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector21&
+ operator=(vector21&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
vector21(
vector21<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector21(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector21(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
vector21&
operator=(vector21<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20> const& vec)
{
@@ -87,6 +136,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -96,14 +146,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -113,14 +165,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
struct vector_data22
{
+ BOOST_FUSION_GPU_ENABLED
vector_data22()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data22(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) {}
+ vector_data22(
+ vector_data22&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data22(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data22(
vector_data22 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data22&
operator=(vector_data22 const& vec)
{
@@ -128,6 +195,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data22
init_from_sequence(Sequence const& seq)
{
@@ -137,6 +205,7 @@ namespace boost { namespace fusion
return vector_data22(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data22
init_from_sequence(Sequence& seq)
{
@@ -160,25 +229,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<22> size;
+ BOOST_FUSION_GPU_ENABLED
vector22() {}
+ BOOST_FUSION_GPU_ENABLED
vector22(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
+ vector22(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector22(vector22&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector22(vector22 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector22&
+ operator=(vector22 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector22&
+ operator=(vector22&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
vector22(
vector22<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector22(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector22(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
vector22&
operator=(vector22<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21> const& vec)
{
@@ -186,6 +287,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -195,14 +297,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -212,14 +316,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
struct vector_data23
{
+ BOOST_FUSION_GPU_ENABLED
vector_data23()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data23(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) {}
+ vector_data23(
+ vector_data23&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data23(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data23(
vector_data23 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data23&
operator=(vector_data23 const& vec)
{
@@ -227,6 +346,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data23
init_from_sequence(Sequence const& seq)
{
@@ -236,6 +356,7 @@ namespace boost { namespace fusion
return vector_data23(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data23
init_from_sequence(Sequence& seq)
{
@@ -259,25 +380,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<23> size;
+ BOOST_FUSION_GPU_ENABLED
vector23() {}
+ BOOST_FUSION_GPU_ENABLED
vector23(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
+ vector23(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector23(vector23&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector23(vector23 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector23&
+ operator=(vector23 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector23&
+ operator=(vector23&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
vector23(
vector23<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector23(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector23(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
vector23&
operator=(vector23<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22> const& vec)
{
@@ -285,6 +438,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -294,14 +448,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -311,14 +467,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
struct vector_data24
{
+ BOOST_FUSION_GPU_ENABLED
vector_data24()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data24(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) {}
+ vector_data24(
+ vector_data24&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data24(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data24(
vector_data24 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data24&
operator=(vector_data24 const& vec)
{
@@ -326,6 +497,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data24
init_from_sequence(Sequence const& seq)
{
@@ -335,6 +507,7 @@ namespace boost { namespace fusion
return vector_data24(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data24
init_from_sequence(Sequence& seq)
{
@@ -358,25 +531,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<24> size;
+ BOOST_FUSION_GPU_ENABLED
vector24() {}
+ BOOST_FUSION_GPU_ENABLED
vector24(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
+ vector24(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector24(vector24&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector24(vector24 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector24&
+ operator=(vector24 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector24&
+ operator=(vector24&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
vector24(
vector24<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector24(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector24(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
vector24&
operator=(vector24<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23> const& vec)
{
@@ -384,6 +589,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -393,14 +599,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -410,14 +618,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
struct vector_data25
{
+ BOOST_FUSION_GPU_ENABLED
vector_data25()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data25(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) {}
+ vector_data25(
+ vector_data25&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data25(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data25(
vector_data25 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data25&
operator=(vector_data25 const& vec)
{
@@ -425,6 +648,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data25
init_from_sequence(Sequence const& seq)
{
@@ -434,6 +658,7 @@ namespace boost { namespace fusion
return vector_data25(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data25
init_from_sequence(Sequence& seq)
{
@@ -457,25 +682,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<25> size;
+ BOOST_FUSION_GPU_ENABLED
vector25() {}
+ BOOST_FUSION_GPU_ENABLED
vector25(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
+ vector25(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector25(vector25&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector25(vector25 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector25&
+ operator=(vector25 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector25&
+ operator=(vector25&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
vector25(
vector25<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector25(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector25(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
vector25&
operator=(vector25<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24> const& vec)
{
@@ -483,6 +740,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -492,14 +750,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -509,14 +769,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
struct vector_data26
{
+ BOOST_FUSION_GPU_ENABLED
vector_data26()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data26(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) {}
+ vector_data26(
+ vector_data26&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data26(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data26(
vector_data26 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data26&
operator=(vector_data26 const& vec)
{
@@ -524,6 +799,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data26
init_from_sequence(Sequence const& seq)
{
@@ -533,6 +809,7 @@ namespace boost { namespace fusion
return vector_data26(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data26
init_from_sequence(Sequence& seq)
{
@@ -556,25 +833,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<26> size;
+ BOOST_FUSION_GPU_ENABLED
vector26() {}
+ BOOST_FUSION_GPU_ENABLED
vector26(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
+ vector26(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector26(vector26&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector26(vector26 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector26&
+ operator=(vector26 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector26&
+ operator=(vector26&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
vector26(
vector26<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector26(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector26(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
vector26&
operator=(vector26<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25> const& vec)
{
@@ -582,6 +891,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -591,14 +901,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -608,14 +920,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
struct vector_data27
{
+ BOOST_FUSION_GPU_ENABLED
vector_data27()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data27(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) {}
+ vector_data27(
+ vector_data27&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data27(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data27(
vector_data27 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data27&
operator=(vector_data27 const& vec)
{
@@ -623,6 +950,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data27
init_from_sequence(Sequence const& seq)
{
@@ -632,6 +960,7 @@ namespace boost { namespace fusion
return vector_data27(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data27
init_from_sequence(Sequence& seq)
{
@@ -655,25 +984,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<27> size;
+ BOOST_FUSION_GPU_ENABLED
vector27() {}
+ BOOST_FUSION_GPU_ENABLED
vector27(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
+ vector27(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector27(vector27&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector27(vector27 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector27&
+ operator=(vector27 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector27&
+ operator=(vector27&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
vector27(
vector27<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector27(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector27(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
vector27&
operator=(vector27<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26> const& vec)
{
@@ -681,6 +1042,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -690,14 +1052,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -707,14 +1071,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
struct vector_data28
{
+ BOOST_FUSION_GPU_ENABLED
vector_data28()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data28(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) {}
+ vector_data28(
+ vector_data28&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data28(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data28(
vector_data28 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data28&
operator=(vector_data28 const& vec)
{
@@ -722,6 +1101,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data28
init_from_sequence(Sequence const& seq)
{
@@ -731,6 +1111,7 @@ namespace boost { namespace fusion
return vector_data28(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data28
init_from_sequence(Sequence& seq)
{
@@ -754,25 +1135,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<28> size;
+ BOOST_FUSION_GPU_ENABLED
vector28() {}
+ BOOST_FUSION_GPU_ENABLED
vector28(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
+ vector28(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector28(vector28&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector28(vector28 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector28&
+ operator=(vector28 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector28&
+ operator=(vector28&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
vector28(
vector28<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector28(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector28(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
vector28&
operator=(vector28<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27> const& vec)
{
@@ -780,6 +1193,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -789,14 +1203,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -806,14 +1222,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
struct vector_data29
{
+ BOOST_FUSION_GPU_ENABLED
vector_data29()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data29(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) {}
+ vector_data29(
+ vector_data29&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data29(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data29(
vector_data29 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data29&
operator=(vector_data29 const& vec)
{
@@ -821,6 +1252,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data29
init_from_sequence(Sequence const& seq)
{
@@ -830,6 +1262,7 @@ namespace boost { namespace fusion
return vector_data29(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data29
init_from_sequence(Sequence& seq)
{
@@ -853,25 +1286,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<29> size;
+ BOOST_FUSION_GPU_ENABLED
vector29() {}
+ BOOST_FUSION_GPU_ENABLED
vector29(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
+ vector29(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector29(vector29&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector29(vector29 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector29&
+ operator=(vector29 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector29&
+ operator=(vector29&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
vector29(
vector29<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector29(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector29(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
vector29&
operator=(vector29<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28> const& vec)
{
@@ -879,6 +1344,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -888,14 +1354,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -905,14 +1373,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
struct vector_data30
{
+ BOOST_FUSION_GPU_ENABLED
vector_data30()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data30(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) {}
+ vector_data30(
+ vector_data30&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data30(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data30(
vector_data30 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data30&
operator=(vector_data30 const& vec)
{
@@ -920,6 +1403,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data30
init_from_sequence(Sequence const& seq)
{
@@ -929,6 +1413,7 @@ namespace boost { namespace fusion
return vector_data30(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data30
init_from_sequence(Sequence& seq)
{
@@ -952,25 +1437,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<30> size;
+ BOOST_FUSION_GPU_ENABLED
vector30() {}
+ BOOST_FUSION_GPU_ENABLED
vector30(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
+ vector30(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector30(vector30&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector30(vector30 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector30&
+ operator=(vector30 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector30&
+ operator=(vector30&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
vector30(
vector30<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector30(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector30(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
vector30&
operator=(vector30<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& vec)
{
@@ -978,6 +1495,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -987,14 +1505,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40.hpp
index 07fac8dcff..cac27a27ab 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40.hpp
@@ -14,14 +14,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
struct vector_data31
{
+ BOOST_FUSION_GPU_ENABLED
vector_data31()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data31(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) {}
+ vector_data31(
+ vector_data31&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data31(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data31(
vector_data31 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data31&
operator=(vector_data31 const& vec)
{
@@ -29,6 +44,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data31
init_from_sequence(Sequence const& seq)
{
@@ -38,6 +54,7 @@ namespace boost { namespace fusion
return vector_data31(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data31
init_from_sequence(Sequence& seq)
{
@@ -61,25 +78,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<31> size;
+ BOOST_FUSION_GPU_ENABLED
vector31() {}
+ BOOST_FUSION_GPU_ENABLED
vector31(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
+ vector31(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector31(vector31&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector31(vector31 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector31&
+ operator=(vector31 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector31&
+ operator=(vector31&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
vector31(
vector31<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector31(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector31(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
vector31&
operator=(vector31<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30> const& vec)
{
@@ -87,6 +136,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -96,14 +146,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -113,14 +165,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
struct vector_data32
{
+ BOOST_FUSION_GPU_ENABLED
vector_data32()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data32(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) {}
+ vector_data32(
+ vector_data32&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data32(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data32(
vector_data32 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data32&
operator=(vector_data32 const& vec)
{
@@ -128,6 +195,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data32
init_from_sequence(Sequence const& seq)
{
@@ -137,6 +205,7 @@ namespace boost { namespace fusion
return vector_data32(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data32
init_from_sequence(Sequence& seq)
{
@@ -160,25 +229,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<32> size;
+ BOOST_FUSION_GPU_ENABLED
vector32() {}
+ BOOST_FUSION_GPU_ENABLED
vector32(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
+ vector32(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector32(vector32&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector32(vector32 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector32&
+ operator=(vector32 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector32&
+ operator=(vector32&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
vector32(
vector32<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector32(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector32(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
vector32&
operator=(vector32<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31> const& vec)
{
@@ -186,6 +287,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -195,14 +297,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -212,14 +316,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
struct vector_data33
{
+ BOOST_FUSION_GPU_ENABLED
vector_data33()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data33(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) {}
+ vector_data33(
+ vector_data33&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data33(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data33(
vector_data33 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data33&
operator=(vector_data33 const& vec)
{
@@ -227,6 +346,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data33
init_from_sequence(Sequence const& seq)
{
@@ -236,6 +356,7 @@ namespace boost { namespace fusion
return vector_data33(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data33
init_from_sequence(Sequence& seq)
{
@@ -259,25 +380,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<33> size;
+ BOOST_FUSION_GPU_ENABLED
vector33() {}
+ BOOST_FUSION_GPU_ENABLED
vector33(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
+ vector33(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector33(vector33&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector33(vector33 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector33&
+ operator=(vector33 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector33&
+ operator=(vector33&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
vector33(
vector33<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector33(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector33(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
vector33&
operator=(vector33<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32> const& vec)
{
@@ -285,6 +438,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -294,14 +448,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -311,14 +467,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
struct vector_data34
{
+ BOOST_FUSION_GPU_ENABLED
vector_data34()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data34(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) {}
+ vector_data34(
+ vector_data34&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data34(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data34(
vector_data34 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data34&
operator=(vector_data34 const& vec)
{
@@ -326,6 +497,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data34
init_from_sequence(Sequence const& seq)
{
@@ -335,6 +507,7 @@ namespace boost { namespace fusion
return vector_data34(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data34
init_from_sequence(Sequence& seq)
{
@@ -358,25 +531,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<34> size;
+ BOOST_FUSION_GPU_ENABLED
vector34() {}
+ BOOST_FUSION_GPU_ENABLED
vector34(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
+ vector34(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector34(vector34&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector34(vector34 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector34&
+ operator=(vector34 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector34&
+ operator=(vector34&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
vector34(
vector34<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector34(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector34(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
vector34&
operator=(vector34<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33> const& vec)
{
@@ -384,6 +589,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -393,14 +599,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -410,14 +618,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
struct vector_data35
{
+ BOOST_FUSION_GPU_ENABLED
vector_data35()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data35(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) {}
+ vector_data35(
+ vector_data35&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data35(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data35(
vector_data35 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data35&
operator=(vector_data35 const& vec)
{
@@ -425,6 +648,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data35
init_from_sequence(Sequence const& seq)
{
@@ -434,6 +658,7 @@ namespace boost { namespace fusion
return vector_data35(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data35
init_from_sequence(Sequence& seq)
{
@@ -457,25 +682,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<35> size;
+ BOOST_FUSION_GPU_ENABLED
vector35() {}
+ BOOST_FUSION_GPU_ENABLED
vector35(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
+ vector35(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector35(vector35&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector35(vector35 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector35&
+ operator=(vector35 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector35&
+ operator=(vector35&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
vector35(
vector35<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector35(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector35(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
vector35&
operator=(vector35<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34> const& vec)
{
@@ -483,6 +740,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -492,14 +750,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -509,14 +769,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
struct vector_data36
{
+ BOOST_FUSION_GPU_ENABLED
vector_data36()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data36(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) {}
+ vector_data36(
+ vector_data36&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data36(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data36(
vector_data36 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data36&
operator=(vector_data36 const& vec)
{
@@ -524,6 +799,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data36
init_from_sequence(Sequence const& seq)
{
@@ -533,6 +809,7 @@ namespace boost { namespace fusion
return vector_data36(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data36
init_from_sequence(Sequence& seq)
{
@@ -556,25 +833,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<36> size;
+ BOOST_FUSION_GPU_ENABLED
vector36() {}
+ BOOST_FUSION_GPU_ENABLED
vector36(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
+ vector36(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector36(vector36&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector36(vector36 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector36&
+ operator=(vector36 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector36&
+ operator=(vector36&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
vector36(
vector36<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector36(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector36(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
vector36&
operator=(vector36<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35> const& vec)
{
@@ -582,6 +891,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -591,14 +901,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -608,14 +920,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
struct vector_data37
{
+ BOOST_FUSION_GPU_ENABLED
vector_data37()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data37(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) {}
+ vector_data37(
+ vector_data37&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data37(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data37(
vector_data37 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data37&
operator=(vector_data37 const& vec)
{
@@ -623,6 +950,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data37
init_from_sequence(Sequence const& seq)
{
@@ -632,6 +960,7 @@ namespace boost { namespace fusion
return vector_data37(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data37
init_from_sequence(Sequence& seq)
{
@@ -655,25 +984,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<37> size;
+ BOOST_FUSION_GPU_ENABLED
vector37() {}
+ BOOST_FUSION_GPU_ENABLED
vector37(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
+ vector37(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector37(vector37&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector37(vector37 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector37&
+ operator=(vector37 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector37&
+ operator=(vector37&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
vector37(
vector37<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector37(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector37(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
vector37&
operator=(vector37<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36> const& vec)
{
@@ -681,6 +1042,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -690,14 +1052,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -707,14 +1071,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
struct vector_data38
{
+ BOOST_FUSION_GPU_ENABLED
vector_data38()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data38(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) {}
+ vector_data38(
+ vector_data38&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data38(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data38(
vector_data38 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data38&
operator=(vector_data38 const& vec)
{
@@ -722,6 +1101,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data38
init_from_sequence(Sequence const& seq)
{
@@ -731,6 +1111,7 @@ namespace boost { namespace fusion
return vector_data38(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data38
init_from_sequence(Sequence& seq)
{
@@ -754,25 +1135,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<38> size;
+ BOOST_FUSION_GPU_ENABLED
vector38() {}
+ BOOST_FUSION_GPU_ENABLED
vector38(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
+ vector38(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector38(vector38&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector38(vector38 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector38&
+ operator=(vector38 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector38&
+ operator=(vector38&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
vector38(
vector38<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector38(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector38(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
vector38&
operator=(vector38<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37> const& vec)
{
@@ -780,6 +1193,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -789,14 +1203,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -806,14 +1222,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
struct vector_data39
{
+ BOOST_FUSION_GPU_ENABLED
vector_data39()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data39(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) {}
+ vector_data39(
+ vector_data39&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data39(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data39(
vector_data39 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data39&
operator=(vector_data39 const& vec)
{
@@ -821,6 +1252,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data39
init_from_sequence(Sequence const& seq)
{
@@ -830,6 +1262,7 @@ namespace boost { namespace fusion
return vector_data39(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data39
init_from_sequence(Sequence& seq)
{
@@ -853,25 +1286,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<39> size;
+ BOOST_FUSION_GPU_ENABLED
vector39() {}
+ BOOST_FUSION_GPU_ENABLED
vector39(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
+ vector39(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector39(vector39&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector39(vector39 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector39&
+ operator=(vector39 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector39&
+ operator=(vector39&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
vector39(
vector39<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector39(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector39(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
vector39&
operator=(vector39<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38> const& vec)
{
@@ -879,6 +1344,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -888,14 +1354,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -905,14 +1373,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
struct vector_data40
{
+ BOOST_FUSION_GPU_ENABLED
vector_data40()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data40(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) {}
+ vector_data40(
+ vector_data40&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data40(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data40(
vector_data40 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data40&
operator=(vector_data40 const& vec)
{
@@ -920,6 +1403,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data40
init_from_sequence(Sequence const& seq)
{
@@ -929,6 +1413,7 @@ namespace boost { namespace fusion
return vector_data40(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data40
init_from_sequence(Sequence& seq)
{
@@ -952,25 +1437,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<40> size;
+ BOOST_FUSION_GPU_ENABLED
vector40() {}
+ BOOST_FUSION_GPU_ENABLED
vector40(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
+ vector40(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector40(vector40&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector40(vector40 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector40&
+ operator=(vector40 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector40&
+ operator=(vector40&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
vector40(
vector40<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector40(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector40(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
vector40&
operator=(vector40<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& vec)
{
@@ -978,6 +1495,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -987,14 +1505,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50.hpp
index 7ef9402e66..38b2f0c732 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50.hpp
@@ -14,14 +14,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
struct vector_data41
{
+ BOOST_FUSION_GPU_ENABLED
vector_data41()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data41(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) {}
+ vector_data41(
+ vector_data41&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data41(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data41(
vector_data41 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data41&
operator=(vector_data41 const& vec)
{
@@ -29,6 +44,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data41
init_from_sequence(Sequence const& seq)
{
@@ -38,6 +54,7 @@ namespace boost { namespace fusion
return vector_data41(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data41
init_from_sequence(Sequence& seq)
{
@@ -61,25 +78,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<41> size;
+ BOOST_FUSION_GPU_ENABLED
vector41() {}
+ BOOST_FUSION_GPU_ENABLED
vector41(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40>
+ BOOST_FUSION_GPU_ENABLED
+ vector41(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector41(vector41&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector41(vector41 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector41&
+ operator=(vector41 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector41&
+ operator=(vector41&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40>
+ BOOST_FUSION_GPU_ENABLED
vector41(
vector41<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector41(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector41(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40>
+ BOOST_FUSION_GPU_ENABLED
vector41&
operator=(vector41<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40> const& vec)
{
@@ -87,6 +136,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -96,14 +146,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -113,14 +165,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
struct vector_data42
{
+ BOOST_FUSION_GPU_ENABLED
vector_data42()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data42(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) , m41(std::forward<U41>(_41)) {}
+ vector_data42(
+ vector_data42&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) , m41(std::forward<T41>(other.m41)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data42(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data42(
vector_data42 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data42&
operator=(vector_data42 const& vec)
{
@@ -128,6 +195,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data42
init_from_sequence(Sequence const& seq)
{
@@ -137,6 +205,7 @@ namespace boost { namespace fusion
return vector_data42(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data42
init_from_sequence(Sequence& seq)
{
@@ -160,25 +229,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<42> size;
+ BOOST_FUSION_GPU_ENABLED
vector42() {}
+ BOOST_FUSION_GPU_ENABLED
vector42(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41>
+ BOOST_FUSION_GPU_ENABLED
+ vector42(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector42(vector42&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector42(vector42 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector42&
+ operator=(vector42 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector42&
+ operator=(vector42&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40); this->m41 = std::forward< T41>(vec.m41);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41>
+ BOOST_FUSION_GPU_ENABLED
vector42(
vector42<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector42(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector42(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41>
+ BOOST_FUSION_GPU_ENABLED
vector42&
operator=(vector42<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41> const& vec)
{
@@ -186,6 +287,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -195,14 +297,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -212,14 +316,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
struct vector_data43
{
+ BOOST_FUSION_GPU_ENABLED
vector_data43()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data43(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) , m41(std::forward<U41>(_41)) , m42(std::forward<U42>(_42)) {}
+ vector_data43(
+ vector_data43&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) , m41(std::forward<T41>(other.m41)) , m42(std::forward<T42>(other.m42)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data43(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data43(
vector_data43 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data43&
operator=(vector_data43 const& vec)
{
@@ -227,6 +346,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data43
init_from_sequence(Sequence const& seq)
{
@@ -236,6 +356,7 @@ namespace boost { namespace fusion
return vector_data43(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data43
init_from_sequence(Sequence& seq)
{
@@ -259,25 +380,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<43> size;
+ BOOST_FUSION_GPU_ENABLED
vector43() {}
+ BOOST_FUSION_GPU_ENABLED
vector43(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42>
+ BOOST_FUSION_GPU_ENABLED
+ vector43(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector43(vector43&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector43(vector43 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector43&
+ operator=(vector43 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector43&
+ operator=(vector43&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40); this->m41 = std::forward< T41>(vec.m41); this->m42 = std::forward< T42>(vec.m42);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42>
+ BOOST_FUSION_GPU_ENABLED
vector43(
vector43<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector43(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector43(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42>
+ BOOST_FUSION_GPU_ENABLED
vector43&
operator=(vector43<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42> const& vec)
{
@@ -285,6 +438,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -294,14 +448,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -311,14 +467,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
struct vector_data44
{
+ BOOST_FUSION_GPU_ENABLED
vector_data44()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data44(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) , m41(std::forward<U41>(_41)) , m42(std::forward<U42>(_42)) , m43(std::forward<U43>(_43)) {}
+ vector_data44(
+ vector_data44&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) , m41(std::forward<T41>(other.m41)) , m42(std::forward<T42>(other.m42)) , m43(std::forward<T43>(other.m43)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data44(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data44(
vector_data44 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data44&
operator=(vector_data44 const& vec)
{
@@ -326,6 +497,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data44
init_from_sequence(Sequence const& seq)
{
@@ -335,6 +507,7 @@ namespace boost { namespace fusion
return vector_data44(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data44
init_from_sequence(Sequence& seq)
{
@@ -358,25 +531,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<44> size;
+ BOOST_FUSION_GPU_ENABLED
vector44() {}
+ BOOST_FUSION_GPU_ENABLED
vector44(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43>
+ BOOST_FUSION_GPU_ENABLED
+ vector44(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector44(vector44&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector44(vector44 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector44&
+ operator=(vector44 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector44&
+ operator=(vector44&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40); this->m41 = std::forward< T41>(vec.m41); this->m42 = std::forward< T42>(vec.m42); this->m43 = std::forward< T43>(vec.m43);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43>
+ BOOST_FUSION_GPU_ENABLED
vector44(
vector44<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector44(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector44(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43>
+ BOOST_FUSION_GPU_ENABLED
vector44&
operator=(vector44<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43> const& vec)
{
@@ -384,6 +589,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -393,14 +599,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -410,14 +618,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
struct vector_data45
{
+ BOOST_FUSION_GPU_ENABLED
vector_data45()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data45(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) , m41(std::forward<U41>(_41)) , m42(std::forward<U42>(_42)) , m43(std::forward<U43>(_43)) , m44(std::forward<U44>(_44)) {}
+ vector_data45(
+ vector_data45&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) , m41(std::forward<T41>(other.m41)) , m42(std::forward<T42>(other.m42)) , m43(std::forward<T43>(other.m43)) , m44(std::forward<T44>(other.m44)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data45(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data45(
vector_data45 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data45&
operator=(vector_data45 const& vec)
{
@@ -425,6 +648,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data45
init_from_sequence(Sequence const& seq)
{
@@ -434,6 +658,7 @@ namespace boost { namespace fusion
return vector_data45(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data45
init_from_sequence(Sequence& seq)
{
@@ -457,25 +682,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<45> size;
+ BOOST_FUSION_GPU_ENABLED
vector45() {}
+ BOOST_FUSION_GPU_ENABLED
vector45(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44>
+ BOOST_FUSION_GPU_ENABLED
+ vector45(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector45(vector45&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector45(vector45 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector45&
+ operator=(vector45 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector45&
+ operator=(vector45&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40); this->m41 = std::forward< T41>(vec.m41); this->m42 = std::forward< T42>(vec.m42); this->m43 = std::forward< T43>(vec.m43); this->m44 = std::forward< T44>(vec.m44);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44>
+ BOOST_FUSION_GPU_ENABLED
vector45(
vector45<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector45(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector45(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44>
+ BOOST_FUSION_GPU_ENABLED
vector45&
operator=(vector45<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44> const& vec)
{
@@ -483,6 +740,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -492,14 +750,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -509,14 +769,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
struct vector_data46
{
+ BOOST_FUSION_GPU_ENABLED
vector_data46()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data46(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) , m41(std::forward<U41>(_41)) , m42(std::forward<U42>(_42)) , m43(std::forward<U43>(_43)) , m44(std::forward<U44>(_44)) , m45(std::forward<U45>(_45)) {}
+ vector_data46(
+ vector_data46&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) , m41(std::forward<T41>(other.m41)) , m42(std::forward<T42>(other.m42)) , m43(std::forward<T43>(other.m43)) , m44(std::forward<T44>(other.m44)) , m45(std::forward<T45>(other.m45)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data46(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data46(
vector_data46 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data46&
operator=(vector_data46 const& vec)
{
@@ -524,6 +799,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data46
init_from_sequence(Sequence const& seq)
{
@@ -533,6 +809,7 @@ namespace boost { namespace fusion
return vector_data46(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data46
init_from_sequence(Sequence& seq)
{
@@ -556,25 +833,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<46> size;
+ BOOST_FUSION_GPU_ENABLED
vector46() {}
+ BOOST_FUSION_GPU_ENABLED
vector46(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45>
+ BOOST_FUSION_GPU_ENABLED
+ vector46(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector46(vector46&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector46(vector46 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector46&
+ operator=(vector46 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector46&
+ operator=(vector46&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40); this->m41 = std::forward< T41>(vec.m41); this->m42 = std::forward< T42>(vec.m42); this->m43 = std::forward< T43>(vec.m43); this->m44 = std::forward< T44>(vec.m44); this->m45 = std::forward< T45>(vec.m45);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45>
+ BOOST_FUSION_GPU_ENABLED
vector46(
vector46<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector46(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector46(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45>
+ BOOST_FUSION_GPU_ENABLED
vector46&
operator=(vector46<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45> const& vec)
{
@@ -582,6 +891,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -591,14 +901,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -608,14 +920,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
struct vector_data47
{
+ BOOST_FUSION_GPU_ENABLED
vector_data47()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data47(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) , m41(std::forward<U41>(_41)) , m42(std::forward<U42>(_42)) , m43(std::forward<U43>(_43)) , m44(std::forward<U44>(_44)) , m45(std::forward<U45>(_45)) , m46(std::forward<U46>(_46)) {}
+ vector_data47(
+ vector_data47&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) , m41(std::forward<T41>(other.m41)) , m42(std::forward<T42>(other.m42)) , m43(std::forward<T43>(other.m43)) , m44(std::forward<T44>(other.m44)) , m45(std::forward<T45>(other.m45)) , m46(std::forward<T46>(other.m46)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data47(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data47(
vector_data47 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data47&
operator=(vector_data47 const& vec)
{
@@ -623,6 +950,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data47
init_from_sequence(Sequence const& seq)
{
@@ -632,6 +960,7 @@ namespace boost { namespace fusion
return vector_data47(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data47
init_from_sequence(Sequence& seq)
{
@@ -655,25 +984,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<47> size;
+ BOOST_FUSION_GPU_ENABLED
vector47() {}
+ BOOST_FUSION_GPU_ENABLED
vector47(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46>
+ BOOST_FUSION_GPU_ENABLED
+ vector47(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45) , std::forward<U46>(_46)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector47(vector47&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector47(vector47 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector47&
+ operator=(vector47 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector47&
+ operator=(vector47&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40); this->m41 = std::forward< T41>(vec.m41); this->m42 = std::forward< T42>(vec.m42); this->m43 = std::forward< T43>(vec.m43); this->m44 = std::forward< T44>(vec.m44); this->m45 = std::forward< T45>(vec.m45); this->m46 = std::forward< T46>(vec.m46);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46>
+ BOOST_FUSION_GPU_ENABLED
vector47(
vector47<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector47(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector47(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46>
+ BOOST_FUSION_GPU_ENABLED
vector47&
operator=(vector47<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46> const& vec)
{
@@ -681,6 +1042,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -690,14 +1052,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference<T46>::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference<typename add_const<T46>::type>::type at_impl(mpl::int_<46>) const { return this->m46; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; } BOOST_FUSION_GPU_ENABLED typename add_reference<T46>::type at_impl(mpl::int_<46>) { return this->m46; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T46>::type>::type at_impl(mpl::int_<46>) const { return this->m46; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -707,14 +1071,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
struct vector_data48
{
+ BOOST_FUSION_GPU_ENABLED
vector_data48()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() , m47() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data48(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46 , U47 && _47
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) , m41(std::forward<U41>(_41)) , m42(std::forward<U42>(_42)) , m43(std::forward<U43>(_43)) , m44(std::forward<U44>(_44)) , m45(std::forward<U45>(_45)) , m46(std::forward<U46>(_46)) , m47(std::forward<U47>(_47)) {}
+ vector_data48(
+ vector_data48&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) , m41(std::forward<T41>(other.m41)) , m42(std::forward<T42>(other.m42)) , m43(std::forward<T43>(other.m43)) , m44(std::forward<T44>(other.m44)) , m45(std::forward<T45>(other.m45)) , m46(std::forward<T46>(other.m46)) , m47(std::forward<T47>(other.m47)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data48(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) , m47(_47) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data48(
vector_data48 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) , m47(other.m47) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data48&
operator=(vector_data48 const& vec)
{
@@ -722,6 +1101,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data48
init_from_sequence(Sequence const& seq)
{
@@ -731,6 +1111,7 @@ namespace boost { namespace fusion
return vector_data48(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data48
init_from_sequence(Sequence& seq)
{
@@ -754,25 +1135,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<48> size;
+ BOOST_FUSION_GPU_ENABLED
vector48() {}
+ BOOST_FUSION_GPU_ENABLED
vector48(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47>
+ BOOST_FUSION_GPU_ENABLED
+ vector48(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46 , U47 && _47)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45) , std::forward<U46>(_46) , std::forward<U47>(_47)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector48(vector48&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector48(vector48 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector48&
+ operator=(vector48 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector48&
+ operator=(vector48&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40); this->m41 = std::forward< T41>(vec.m41); this->m42 = std::forward< T42>(vec.m42); this->m43 = std::forward< T43>(vec.m43); this->m44 = std::forward< T44>(vec.m44); this->m45 = std::forward< T45>(vec.m45); this->m46 = std::forward< T46>(vec.m46); this->m47 = std::forward< T47>(vec.m47);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47>
+ BOOST_FUSION_GPU_ENABLED
vector48(
vector48<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46 , vec.m47) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector48(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector48(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47>
+ BOOST_FUSION_GPU_ENABLED
vector48&
operator=(vector48<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47> const& vec)
{
@@ -780,6 +1193,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -789,14 +1203,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; this->m47 = *i47;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference<T46>::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference<typename add_const<T46>::type>::type at_impl(mpl::int_<46>) const { return this->m46; } typename add_reference<T47>::type at_impl(mpl::int_<47>) { return this->m47; } typename add_reference<typename add_const<T47>::type>::type at_impl(mpl::int_<47>) const { return this->m47; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; } BOOST_FUSION_GPU_ENABLED typename add_reference<T46>::type at_impl(mpl::int_<46>) { return this->m46; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T46>::type>::type at_impl(mpl::int_<46>) const { return this->m46; } BOOST_FUSION_GPU_ENABLED typename add_reference<T47>::type at_impl(mpl::int_<47>) { return this->m47; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T47>::type>::type at_impl(mpl::int_<47>) const { return this->m47; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -806,14 +1222,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
struct vector_data49
{
+ BOOST_FUSION_GPU_ENABLED
vector_data49()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() , m47() , m48() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data49(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46 , U47 && _47 , U48 && _48
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) , m41(std::forward<U41>(_41)) , m42(std::forward<U42>(_42)) , m43(std::forward<U43>(_43)) , m44(std::forward<U44>(_44)) , m45(std::forward<U45>(_45)) , m46(std::forward<U46>(_46)) , m47(std::forward<U47>(_47)) , m48(std::forward<U48>(_48)) {}
+ vector_data49(
+ vector_data49&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) , m41(std::forward<T41>(other.m41)) , m42(std::forward<T42>(other.m42)) , m43(std::forward<T43>(other.m43)) , m44(std::forward<T44>(other.m44)) , m45(std::forward<T45>(other.m45)) , m46(std::forward<T46>(other.m46)) , m47(std::forward<T47>(other.m47)) , m48(std::forward<T48>(other.m48)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data49(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) , m47(_47) , m48(_48) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data49(
vector_data49 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) , m47(other.m47) , m48(other.m48) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data49&
operator=(vector_data49 const& vec)
{
@@ -821,6 +1252,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data49
init_from_sequence(Sequence const& seq)
{
@@ -830,6 +1262,7 @@ namespace boost { namespace fusion
return vector_data49(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data49
init_from_sequence(Sequence& seq)
{
@@ -853,25 +1286,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<49> size;
+ BOOST_FUSION_GPU_ENABLED
vector49() {}
+ BOOST_FUSION_GPU_ENABLED
vector49(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48>
+ BOOST_FUSION_GPU_ENABLED
+ vector49(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46 , U47 && _47 , U48 && _48)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45) , std::forward<U46>(_46) , std::forward<U47>(_47) , std::forward<U48>(_48)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector49(vector49&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector49(vector49 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector49&
+ operator=(vector49 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector49&
+ operator=(vector49&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40); this->m41 = std::forward< T41>(vec.m41); this->m42 = std::forward< T42>(vec.m42); this->m43 = std::forward< T43>(vec.m43); this->m44 = std::forward< T44>(vec.m44); this->m45 = std::forward< T45>(vec.m45); this->m46 = std::forward< T46>(vec.m46); this->m47 = std::forward< T47>(vec.m47); this->m48 = std::forward< T48>(vec.m48);
+ return *this;
+ }
+# endif
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48>
+ BOOST_FUSION_GPU_ENABLED
vector49(
vector49<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46 , vec.m47 , vec.m48) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector49(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector49(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48>
+ BOOST_FUSION_GPU_ENABLED
vector49&
operator=(vector49<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48> const& vec)
{
@@ -879,6 +1344,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -888,14 +1354,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; this->m47 = *i47; this->m48 = *i48;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference<T46>::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference<typename add_const<T46>::type>::type at_impl(mpl::int_<46>) const { return this->m46; } typename add_reference<T47>::type at_impl(mpl::int_<47>) { return this->m47; } typename add_reference<typename add_const<T47>::type>::type at_impl(mpl::int_<47>) const { return this->m47; } typename add_reference<T48>::type at_impl(mpl::int_<48>) { return this->m48; } typename add_reference<typename add_const<T48>::type>::type at_impl(mpl::int_<48>) const { return this->m48; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; } BOOST_FUSION_GPU_ENABLED typename add_reference<T46>::type at_impl(mpl::int_<46>) { return this->m46; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T46>::type>::type at_impl(mpl::int_<46>) const { return this->m46; } BOOST_FUSION_GPU_ENABLED typename add_reference<T47>::type at_impl(mpl::int_<47>) { return this->m47; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T47>::type>::type at_impl(mpl::int_<47>) const { return this->m47; } BOOST_FUSION_GPU_ENABLED typename add_reference<T48>::type at_impl(mpl::int_<48>) { return this->m48; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T48>::type>::type at_impl(mpl::int_<48>) const { return this->m48; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -905,14 +1373,29 @@ namespace boost { namespace fusion
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
struct vector_data50
{
+ BOOST_FUSION_GPU_ENABLED
vector_data50()
: m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() , m47() , m48() , m49() {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
+ vector_data50(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46 , U47 && _47 , U48 && _48 , U49 && _49
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* = 0
+ )
+ : m0(std::forward<U0>(_0)) , m1(std::forward<U1>(_1)) , m2(std::forward<U2>(_2)) , m3(std::forward<U3>(_3)) , m4(std::forward<U4>(_4)) , m5(std::forward<U5>(_5)) , m6(std::forward<U6>(_6)) , m7(std::forward<U7>(_7)) , m8(std::forward<U8>(_8)) , m9(std::forward<U9>(_9)) , m10(std::forward<U10>(_10)) , m11(std::forward<U11>(_11)) , m12(std::forward<U12>(_12)) , m13(std::forward<U13>(_13)) , m14(std::forward<U14>(_14)) , m15(std::forward<U15>(_15)) , m16(std::forward<U16>(_16)) , m17(std::forward<U17>(_17)) , m18(std::forward<U18>(_18)) , m19(std::forward<U19>(_19)) , m20(std::forward<U20>(_20)) , m21(std::forward<U21>(_21)) , m22(std::forward<U22>(_22)) , m23(std::forward<U23>(_23)) , m24(std::forward<U24>(_24)) , m25(std::forward<U25>(_25)) , m26(std::forward<U26>(_26)) , m27(std::forward<U27>(_27)) , m28(std::forward<U28>(_28)) , m29(std::forward<U29>(_29)) , m30(std::forward<U30>(_30)) , m31(std::forward<U31>(_31)) , m32(std::forward<U32>(_32)) , m33(std::forward<U33>(_33)) , m34(std::forward<U34>(_34)) , m35(std::forward<U35>(_35)) , m36(std::forward<U36>(_36)) , m37(std::forward<U37>(_37)) , m38(std::forward<U38>(_38)) , m39(std::forward<U39>(_39)) , m40(std::forward<U40>(_40)) , m41(std::forward<U41>(_41)) , m42(std::forward<U42>(_42)) , m43(std::forward<U43>(_43)) , m44(std::forward<U44>(_44)) , m45(std::forward<U45>(_45)) , m46(std::forward<U46>(_46)) , m47(std::forward<U47>(_47)) , m48(std::forward<U48>(_48)) , m49(std::forward<U49>(_49)) {}
+ vector_data50(
+ vector_data50&& other)
+ : m0(std::forward<T0>(other.m0)) , m1(std::forward<T1>(other.m1)) , m2(std::forward<T2>(other.m2)) , m3(std::forward<T3>(other.m3)) , m4(std::forward<T4>(other.m4)) , m5(std::forward<T5>(other.m5)) , m6(std::forward<T6>(other.m6)) , m7(std::forward<T7>(other.m7)) , m8(std::forward<T8>(other.m8)) , m9(std::forward<T9>(other.m9)) , m10(std::forward<T10>(other.m10)) , m11(std::forward<T11>(other.m11)) , m12(std::forward<T12>(other.m12)) , m13(std::forward<T13>(other.m13)) , m14(std::forward<T14>(other.m14)) , m15(std::forward<T15>(other.m15)) , m16(std::forward<T16>(other.m16)) , m17(std::forward<T17>(other.m17)) , m18(std::forward<T18>(other.m18)) , m19(std::forward<T19>(other.m19)) , m20(std::forward<T20>(other.m20)) , m21(std::forward<T21>(other.m21)) , m22(std::forward<T22>(other.m22)) , m23(std::forward<T23>(other.m23)) , m24(std::forward<T24>(other.m24)) , m25(std::forward<T25>(other.m25)) , m26(std::forward<T26>(other.m26)) , m27(std::forward<T27>(other.m27)) , m28(std::forward<T28>(other.m28)) , m29(std::forward<T29>(other.m29)) , m30(std::forward<T30>(other.m30)) , m31(std::forward<T31>(other.m31)) , m32(std::forward<T32>(other.m32)) , m33(std::forward<T33>(other.m33)) , m34(std::forward<T34>(other.m34)) , m35(std::forward<T35>(other.m35)) , m36(std::forward<T36>(other.m36)) , m37(std::forward<T37>(other.m37)) , m38(std::forward<T38>(other.m38)) , m39(std::forward<T39>(other.m39)) , m40(std::forward<T40>(other.m40)) , m41(std::forward<T41>(other.m41)) , m42(std::forward<T42>(other.m42)) , m43(std::forward<T43>(other.m43)) , m44(std::forward<T44>(other.m44)) , m45(std::forward<T45>(other.m45)) , m46(std::forward<T46>(other.m46)) , m47(std::forward<T47>(other.m47)) , m48(std::forward<T48>(other.m48)) , m49(std::forward<T49>(other.m49)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector_data50(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48 , typename detail::call_param<T49 >::type _49)
: m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) , m47(_47) , m48(_48) , m49(_49) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data50(
vector_data50 const& other)
: m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) , m47(other.m47) , m48(other.m48) , m49(other.m49) {}
+ BOOST_FUSION_GPU_ENABLED
vector_data50&
operator=(vector_data50 const& vec)
{
@@ -920,6 +1403,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data50
init_from_sequence(Sequence const& seq)
{
@@ -929,6 +1413,7 @@ namespace boost { namespace fusion
return vector_data50(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49);
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static vector_data50
init_from_sequence(Sequence& seq)
{
@@ -952,25 +1437,57 @@ namespace boost { namespace fusion
typedef mpl::false_ is_view;
typedef random_access_traversal_tag category;
typedef mpl::int_<50> size;
+ BOOST_FUSION_GPU_ENABLED
vector50() {}
+ BOOST_FUSION_GPU_ENABLED
vector50(
typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48 , typename detail::call_param<T49 >::type _49)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
+ vector50(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46 , U47 && _47 , U48 && _48 , U49 && _49)
+ : base_type(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45) , std::forward<U46>(_46) , std::forward<U47>(_47) , std::forward<U48>(_48) , std::forward<U49>(_49)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector50(vector50&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector50(vector50 const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector50&
+ operator=(vector50 const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+ BOOST_FUSION_GPU_ENABLED
+ vector50&
+ operator=(vector50&& vec)
+ {
+ this->m0 = std::forward< T0>(vec.m0); this->m1 = std::forward< T1>(vec.m1); this->m2 = std::forward< T2>(vec.m2); this->m3 = std::forward< T3>(vec.m3); this->m4 = std::forward< T4>(vec.m4); this->m5 = std::forward< T5>(vec.m5); this->m6 = std::forward< T6>(vec.m6); this->m7 = std::forward< T7>(vec.m7); this->m8 = std::forward< T8>(vec.m8); this->m9 = std::forward< T9>(vec.m9); this->m10 = std::forward< T10>(vec.m10); this->m11 = std::forward< T11>(vec.m11); this->m12 = std::forward< T12>(vec.m12); this->m13 = std::forward< T13>(vec.m13); this->m14 = std::forward< T14>(vec.m14); this->m15 = std::forward< T15>(vec.m15); this->m16 = std::forward< T16>(vec.m16); this->m17 = std::forward< T17>(vec.m17); this->m18 = std::forward< T18>(vec.m18); this->m19 = std::forward< T19>(vec.m19); this->m20 = std::forward< T20>(vec.m20); this->m21 = std::forward< T21>(vec.m21); this->m22 = std::forward< T22>(vec.m22); this->m23 = std::forward< T23>(vec.m23); this->m24 = std::forward< T24>(vec.m24); this->m25 = std::forward< T25>(vec.m25); this->m26 = std::forward< T26>(vec.m26); this->m27 = std::forward< T27>(vec.m27); this->m28 = std::forward< T28>(vec.m28); this->m29 = std::forward< T29>(vec.m29); this->m30 = std::forward< T30>(vec.m30); this->m31 = std::forward< T31>(vec.m31); this->m32 = std::forward< T32>(vec.m32); this->m33 = std::forward< T33>(vec.m33); this->m34 = std::forward< T34>(vec.m34); this->m35 = std::forward< T35>(vec.m35); this->m36 = std::forward< T36>(vec.m36); this->m37 = std::forward< T37>(vec.m37); this->m38 = std::forward< T38>(vec.m38); this->m39 = std::forward< T39>(vec.m39); this->m40 = std::forward< T40>(vec.m40); this->m41 = std::forward< T41>(vec.m41); this->m42 = std::forward< T42>(vec.m42); this->m43 = std::forward< T43>(vec.m43); this->m44 = std::forward< T44>(vec.m44); this->m45 = std::forward< T45>(vec.m45); this->m46 = std::forward< T46>(vec.m46); this->m47 = std::forward< T47>(vec.m47); this->m48 = std::forward< T48>(vec.m48); this->m49 = std::forward< T49>(vec.m49);
+ return *this;
+ }
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
vector50(
vector50<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& vec)
: base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46 , vec.m47 , vec.m48 , vec.m49) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector50(
Sequence const& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector50(
Sequence& seq
)
: base_type(base_type::init_from_sequence(seq)) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
vector50&
operator=(vector50<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& vec)
{
@@ -978,6 +1495,7 @@ namespace boost { namespace fusion
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
@@ -987,14 +1505,16 @@ namespace boost { namespace fusion
this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; this->m47 = *i47; this->m48 = *i48; this->m49 = *i49;
return *this;
}
- typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference<T46>::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference<typename add_const<T46>::type>::type at_impl(mpl::int_<46>) const { return this->m46; } typename add_reference<T47>::type at_impl(mpl::int_<47>) { return this->m47; } typename add_reference<typename add_const<T47>::type>::type at_impl(mpl::int_<47>) const { return this->m47; } typename add_reference<T48>::type at_impl(mpl::int_<48>) { return this->m48; } typename add_reference<typename add_const<T48>::type>::type at_impl(mpl::int_<48>) const { return this->m48; } typename add_reference<T49>::type at_impl(mpl::int_<49>) { return this->m49; } typename add_reference<typename add_const<T49>::type>::type at_impl(mpl::int_<49>) const { return this->m49; }
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T0>::type at_impl(mpl::int_<0>) { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T0>::type>::type at_impl(mpl::int_<0>) const { return this->m0; } BOOST_FUSION_GPU_ENABLED typename add_reference<T1>::type at_impl(mpl::int_<1>) { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T1>::type>::type at_impl(mpl::int_<1>) const { return this->m1; } BOOST_FUSION_GPU_ENABLED typename add_reference<T2>::type at_impl(mpl::int_<2>) { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T2>::type>::type at_impl(mpl::int_<2>) const { return this->m2; } BOOST_FUSION_GPU_ENABLED typename add_reference<T3>::type at_impl(mpl::int_<3>) { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T3>::type>::type at_impl(mpl::int_<3>) const { return this->m3; } BOOST_FUSION_GPU_ENABLED typename add_reference<T4>::type at_impl(mpl::int_<4>) { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T4>::type>::type at_impl(mpl::int_<4>) const { return this->m4; } BOOST_FUSION_GPU_ENABLED typename add_reference<T5>::type at_impl(mpl::int_<5>) { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T5>::type>::type at_impl(mpl::int_<5>) const { return this->m5; } BOOST_FUSION_GPU_ENABLED typename add_reference<T6>::type at_impl(mpl::int_<6>) { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T6>::type>::type at_impl(mpl::int_<6>) const { return this->m6; } BOOST_FUSION_GPU_ENABLED typename add_reference<T7>::type at_impl(mpl::int_<7>) { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T7>::type>::type at_impl(mpl::int_<7>) const { return this->m7; } BOOST_FUSION_GPU_ENABLED typename add_reference<T8>::type at_impl(mpl::int_<8>) { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T8>::type>::type at_impl(mpl::int_<8>) const { return this->m8; } BOOST_FUSION_GPU_ENABLED typename add_reference<T9>::type at_impl(mpl::int_<9>) { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T9>::type>::type at_impl(mpl::int_<9>) const { return this->m9; } BOOST_FUSION_GPU_ENABLED typename add_reference<T10>::type at_impl(mpl::int_<10>) { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T10>::type>::type at_impl(mpl::int_<10>) const { return this->m10; } BOOST_FUSION_GPU_ENABLED typename add_reference<T11>::type at_impl(mpl::int_<11>) { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T11>::type>::type at_impl(mpl::int_<11>) const { return this->m11; } BOOST_FUSION_GPU_ENABLED typename add_reference<T12>::type at_impl(mpl::int_<12>) { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T12>::type>::type at_impl(mpl::int_<12>) const { return this->m12; } BOOST_FUSION_GPU_ENABLED typename add_reference<T13>::type at_impl(mpl::int_<13>) { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T13>::type>::type at_impl(mpl::int_<13>) const { return this->m13; } BOOST_FUSION_GPU_ENABLED typename add_reference<T14>::type at_impl(mpl::int_<14>) { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T14>::type>::type at_impl(mpl::int_<14>) const { return this->m14; } BOOST_FUSION_GPU_ENABLED typename add_reference<T15>::type at_impl(mpl::int_<15>) { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T15>::type>::type at_impl(mpl::int_<15>) const { return this->m15; } BOOST_FUSION_GPU_ENABLED typename add_reference<T16>::type at_impl(mpl::int_<16>) { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T16>::type>::type at_impl(mpl::int_<16>) const { return this->m16; } BOOST_FUSION_GPU_ENABLED typename add_reference<T17>::type at_impl(mpl::int_<17>) { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T17>::type>::type at_impl(mpl::int_<17>) const { return this->m17; } BOOST_FUSION_GPU_ENABLED typename add_reference<T18>::type at_impl(mpl::int_<18>) { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T18>::type>::type at_impl(mpl::int_<18>) const { return this->m18; } BOOST_FUSION_GPU_ENABLED typename add_reference<T19>::type at_impl(mpl::int_<19>) { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T19>::type>::type at_impl(mpl::int_<19>) const { return this->m19; } BOOST_FUSION_GPU_ENABLED typename add_reference<T20>::type at_impl(mpl::int_<20>) { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T20>::type>::type at_impl(mpl::int_<20>) const { return this->m20; } BOOST_FUSION_GPU_ENABLED typename add_reference<T21>::type at_impl(mpl::int_<21>) { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T21>::type>::type at_impl(mpl::int_<21>) const { return this->m21; } BOOST_FUSION_GPU_ENABLED typename add_reference<T22>::type at_impl(mpl::int_<22>) { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T22>::type>::type at_impl(mpl::int_<22>) const { return this->m22; } BOOST_FUSION_GPU_ENABLED typename add_reference<T23>::type at_impl(mpl::int_<23>) { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T23>::type>::type at_impl(mpl::int_<23>) const { return this->m23; } BOOST_FUSION_GPU_ENABLED typename add_reference<T24>::type at_impl(mpl::int_<24>) { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T24>::type>::type at_impl(mpl::int_<24>) const { return this->m24; } BOOST_FUSION_GPU_ENABLED typename add_reference<T25>::type at_impl(mpl::int_<25>) { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T25>::type>::type at_impl(mpl::int_<25>) const { return this->m25; } BOOST_FUSION_GPU_ENABLED typename add_reference<T26>::type at_impl(mpl::int_<26>) { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T26>::type>::type at_impl(mpl::int_<26>) const { return this->m26; } BOOST_FUSION_GPU_ENABLED typename add_reference<T27>::type at_impl(mpl::int_<27>) { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T27>::type>::type at_impl(mpl::int_<27>) const { return this->m27; } BOOST_FUSION_GPU_ENABLED typename add_reference<T28>::type at_impl(mpl::int_<28>) { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T28>::type>::type at_impl(mpl::int_<28>) const { return this->m28; } BOOST_FUSION_GPU_ENABLED typename add_reference<T29>::type at_impl(mpl::int_<29>) { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T29>::type>::type at_impl(mpl::int_<29>) const { return this->m29; } BOOST_FUSION_GPU_ENABLED typename add_reference<T30>::type at_impl(mpl::int_<30>) { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T30>::type>::type at_impl(mpl::int_<30>) const { return this->m30; } BOOST_FUSION_GPU_ENABLED typename add_reference<T31>::type at_impl(mpl::int_<31>) { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T31>::type>::type at_impl(mpl::int_<31>) const { return this->m31; } BOOST_FUSION_GPU_ENABLED typename add_reference<T32>::type at_impl(mpl::int_<32>) { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T32>::type>::type at_impl(mpl::int_<32>) const { return this->m32; } BOOST_FUSION_GPU_ENABLED typename add_reference<T33>::type at_impl(mpl::int_<33>) { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T33>::type>::type at_impl(mpl::int_<33>) const { return this->m33; } BOOST_FUSION_GPU_ENABLED typename add_reference<T34>::type at_impl(mpl::int_<34>) { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T34>::type>::type at_impl(mpl::int_<34>) const { return this->m34; } BOOST_FUSION_GPU_ENABLED typename add_reference<T35>::type at_impl(mpl::int_<35>) { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T35>::type>::type at_impl(mpl::int_<35>) const { return this->m35; } BOOST_FUSION_GPU_ENABLED typename add_reference<T36>::type at_impl(mpl::int_<36>) { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T36>::type>::type at_impl(mpl::int_<36>) const { return this->m36; } BOOST_FUSION_GPU_ENABLED typename add_reference<T37>::type at_impl(mpl::int_<37>) { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T37>::type>::type at_impl(mpl::int_<37>) const { return this->m37; } BOOST_FUSION_GPU_ENABLED typename add_reference<T38>::type at_impl(mpl::int_<38>) { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T38>::type>::type at_impl(mpl::int_<38>) const { return this->m38; } BOOST_FUSION_GPU_ENABLED typename add_reference<T39>::type at_impl(mpl::int_<39>) { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T39>::type>::type at_impl(mpl::int_<39>) const { return this->m39; } BOOST_FUSION_GPU_ENABLED typename add_reference<T40>::type at_impl(mpl::int_<40>) { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T40>::type>::type at_impl(mpl::int_<40>) const { return this->m40; } BOOST_FUSION_GPU_ENABLED typename add_reference<T41>::type at_impl(mpl::int_<41>) { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T41>::type>::type at_impl(mpl::int_<41>) const { return this->m41; } BOOST_FUSION_GPU_ENABLED typename add_reference<T42>::type at_impl(mpl::int_<42>) { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T42>::type>::type at_impl(mpl::int_<42>) const { return this->m42; } BOOST_FUSION_GPU_ENABLED typename add_reference<T43>::type at_impl(mpl::int_<43>) { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T43>::type>::type at_impl(mpl::int_<43>) const { return this->m43; } BOOST_FUSION_GPU_ENABLED typename add_reference<T44>::type at_impl(mpl::int_<44>) { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T44>::type>::type at_impl(mpl::int_<44>) const { return this->m44; } BOOST_FUSION_GPU_ENABLED typename add_reference<T45>::type at_impl(mpl::int_<45>) { return this->m45; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T45>::type>::type at_impl(mpl::int_<45>) const { return this->m45; } BOOST_FUSION_GPU_ENABLED typename add_reference<T46>::type at_impl(mpl::int_<46>) { return this->m46; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T46>::type>::type at_impl(mpl::int_<46>) const { return this->m46; } BOOST_FUSION_GPU_ENABLED typename add_reference<T47>::type at_impl(mpl::int_<47>) { return this->m47; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T47>::type>::type at_impl(mpl::int_<47>) const { return this->m47; } BOOST_FUSION_GPU_ENABLED typename add_reference<T48>::type at_impl(mpl::int_<48>) { return this->m48; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T48>::type>::type at_impl(mpl::int_<48>) const { return this->m48; } BOOST_FUSION_GPU_ENABLED typename add_reference<T49>::type at_impl(mpl::int_<49>) { return this->m49; } BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T49>::type>::type at_impl(mpl::int_<49>) const { return this->m49; }
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
return this->at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp
index 8e6f1f68a1..ab2a39299c 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp
@@ -27,14 +27,18 @@ namespace boost { namespace fusion
typedef typename vector_n::size size;
typedef typename vector_n::category category;
typedef typename vector_n::is_view is_view;
+ BOOST_FUSION_GPU_ENABLED
vector()
: vec() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
vector(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
: vec(rhs.vec) {}
+ BOOST_FUSION_GPU_ENABLED
vector(vector const& rhs)
: vec(rhs.vec) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector(Sequence const& rhs)
: vec(BOOST_FUSION_VECTOR_COPY_INIT()) {}
@@ -44,28 +48,100 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
vector(typename detail::call_param<T0 >::type _0)
: vec(_0) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ vector(U0 && _0)
+ : vec(std::forward<U0>(_0)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: vec(_0 , _1) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: vec(_0 , _1 , _2) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: vec(_0 , _1 , _2 , _3) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: vec(_0 , _1 , _2 , _3 , _4) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: vec(_0 , _1 , _2 , _3 , _4 , _5) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9)) {}
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
{
@@ -73,13 +149,42 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(T const& rhs)
{
vec = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector const& rhs)
+ {
+ vec = rhs.vec;
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
+ vector(vector&& rhs)
+ : vec(std::forward<vector_n>(rhs.vec)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector&& rhs)
+ {
+ vec = std::forward<vector_n>(rhs.vec);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(T&& rhs)
+ {
+ vec = std::forward<T>(rhs);
+ return *this;
+ }
+# endif
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at_c<types, N>::type
>::type
@@ -88,6 +193,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at_c<types, N>::type
@@ -98,6 +204,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at<types, I>::type
>::type
@@ -106,6 +213,7 @@ namespace boost { namespace fusion
return vec.at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at<types, I>::type
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp
index bc04fefeed..0ae2b8a4c4 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp
@@ -27,14 +27,18 @@ namespace boost { namespace fusion
typedef typename vector_n::size size;
typedef typename vector_n::category category;
typedef typename vector_n::is_view is_view;
+ BOOST_FUSION_GPU_ENABLED
vector()
: vec() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
vector(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
: vec(rhs.vec) {}
+ BOOST_FUSION_GPU_ENABLED
vector(vector const& rhs)
: vec(rhs.vec) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector(Sequence const& rhs)
: vec(BOOST_FUSION_VECTOR_COPY_INIT()) {}
@@ -44,48 +48,190 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
vector(typename detail::call_param<T0 >::type _0)
: vec(_0) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ vector(U0 && _0)
+ : vec(std::forward<U0>(_0)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: vec(_0 , _1) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: vec(_0 , _1 , _2) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: vec(_0 , _1 , _2 , _3) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: vec(_0 , _1 , _2 , _3 , _4) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: vec(_0 , _1 , _2 , _3 , _4 , _5) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19)) {}
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
{
@@ -93,13 +239,42 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(T const& rhs)
{
vec = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector const& rhs)
+ {
+ vec = rhs.vec;
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
+ vector(vector&& rhs)
+ : vec(std::forward<vector_n>(rhs.vec)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector&& rhs)
+ {
+ vec = std::forward<vector_n>(rhs.vec);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(T&& rhs)
+ {
+ vec = std::forward<T>(rhs);
+ return *this;
+ }
+# endif
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at_c<types, N>::type
>::type
@@ -108,6 +283,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at_c<types, N>::type
@@ -118,6 +294,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at<types, I>::type
>::type
@@ -126,6 +303,7 @@ namespace boost { namespace fusion
return vec.at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at<types, I>::type
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp
index 0841920a27..3c9d5230f7 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp
@@ -27,14 +27,18 @@ namespace boost { namespace fusion
typedef typename vector_n::size size;
typedef typename vector_n::category category;
typedef typename vector_n::is_view is_view;
+ BOOST_FUSION_GPU_ENABLED
vector()
: vec() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
vector(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
: vec(rhs.vec) {}
+ BOOST_FUSION_GPU_ENABLED
vector(vector const& rhs)
: vec(rhs.vec) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector(Sequence const& rhs)
: vec(BOOST_FUSION_VECTOR_COPY_INIT()) {}
@@ -44,68 +48,280 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
vector(typename detail::call_param<T0 >::type _0)
: vec(_0) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ vector(U0 && _0)
+ : vec(std::forward<U0>(_0)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: vec(_0 , _1) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: vec(_0 , _1 , _2) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: vec(_0 , _1 , _2 , _3) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: vec(_0 , _1 , _2 , _3 , _4) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: vec(_0 , _1 , _2 , _3 , _4 , _5) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29)) {}
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
{
@@ -113,13 +329,42 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(T const& rhs)
{
vec = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector const& rhs)
+ {
+ vec = rhs.vec;
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
+ vector(vector&& rhs)
+ : vec(std::forward<vector_n>(rhs.vec)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector&& rhs)
+ {
+ vec = std::forward<vector_n>(rhs.vec);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(T&& rhs)
+ {
+ vec = std::forward<T>(rhs);
+ return *this;
+ }
+# endif
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at_c<types, N>::type
>::type
@@ -128,6 +373,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at_c<types, N>::type
@@ -138,6 +384,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at<types, I>::type
>::type
@@ -146,6 +393,7 @@ namespace boost { namespace fusion
return vec.at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at<types, I>::type
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp
index 11d9cc7d66..e5555a2495 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp
@@ -27,14 +27,18 @@ namespace boost { namespace fusion
typedef typename vector_n::size size;
typedef typename vector_n::category category;
typedef typename vector_n::is_view is_view;
+ BOOST_FUSION_GPU_ENABLED
vector()
: vec() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
vector(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
: vec(rhs.vec) {}
+ BOOST_FUSION_GPU_ENABLED
vector(vector const& rhs)
: vec(rhs.vec) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector(Sequence const& rhs)
: vec(BOOST_FUSION_VECTOR_COPY_INIT()) {}
@@ -44,88 +48,370 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
vector(typename detail::call_param<T0 >::type _0)
: vec(_0) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ vector(U0 && _0)
+ : vec(std::forward<U0>(_0)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: vec(_0 , _1) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: vec(_0 , _1 , _2) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: vec(_0 , _1 , _2 , _3) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: vec(_0 , _1 , _2 , _3 , _4) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: vec(_0 , _1 , _2 , _3 , _4 , _5) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39)) {}
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
{
@@ -133,13 +419,42 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(T const& rhs)
{
vec = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector const& rhs)
+ {
+ vec = rhs.vec;
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
+ vector(vector&& rhs)
+ : vec(std::forward<vector_n>(rhs.vec)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector&& rhs)
+ {
+ vec = std::forward<vector_n>(rhs.vec);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(T&& rhs)
+ {
+ vec = std::forward<T>(rhs);
+ return *this;
+ }
+# endif
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at_c<types, N>::type
>::type
@@ -148,6 +463,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at_c<types, N>::type
@@ -158,6 +474,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at<types, I>::type
>::type
@@ -166,6 +483,7 @@ namespace boost { namespace fusion
return vec.at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at<types, I>::type
diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp
index 1ac6c6f423..e9e2a506fc 100644
--- a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp
@@ -27,14 +27,18 @@ namespace boost { namespace fusion
typedef typename vector_n::size size;
typedef typename vector_n::category category;
typedef typename vector_n::is_view is_view;
+ BOOST_FUSION_GPU_ENABLED
vector()
: vec() {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
vector(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& rhs)
: vec(rhs.vec) {}
+ BOOST_FUSION_GPU_ENABLED
vector(vector const& rhs)
: vec(rhs.vec) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector(Sequence const& rhs)
: vec(BOOST_FUSION_VECTOR_COPY_INIT()) {}
@@ -44,108 +48,460 @@ namespace boost { namespace fusion
+ BOOST_FUSION_GPU_ENABLED
explicit
vector(typename detail::call_param<T0 >::type _0)
: vec(_0) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
+ explicit
+ vector(U0 && _0)
+ : vec(std::forward<U0>(_0)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: vec(_0 , _1) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: vec(_0 , _1 , _2) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: vec(_0 , _1 , _2 , _3) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: vec(_0 , _1 , _2 , _3 , _4) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: vec(_0 , _1 , _2 , _3 , _4 , _5) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45) , std::forward<U46>(_46)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46 , U47 && _47)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45) , std::forward<U46>(_46) , std::forward<U47>(_47)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46 , U47 && _47 , U48 && _48)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45) , std::forward<U46>(_46) , std::forward<U47>(_47) , std::forward<U48>(_48)) {}
+# endif
+ BOOST_FUSION_GPU_ENABLED
vector(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48 , typename detail::call_param<T49 >::type _49)
: vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {}
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
+ vector(U0 && _0 , U1 && _1 , U2 && _2 , U3 && _3 , U4 && _4 , U5 && _5 , U6 && _6 , U7 && _7 , U8 && _8 , U9 && _9 , U10 && _10 , U11 && _11 , U12 && _12 , U13 && _13 , U14 && _14 , U15 && _15 , U16 && _16 , U17 && _17 , U18 && _18 , U19 && _19 , U20 && _20 , U21 && _21 , U22 && _22 , U23 && _23 , U24 && _24 , U25 && _25 , U26 && _26 , U27 && _27 , U28 && _28 , U29 && _29 , U30 && _30 , U31 && _31 , U32 && _32 , U33 && _33 , U34 && _34 , U35 && _35 , U36 && _36 , U37 && _37 , U38 && _38 , U39 && _39 , U40 && _40 , U41 && _41 , U42 && _42 , U43 && _43 , U44 && _44 , U45 && _45 , U46 && _46 , U47 && _47 , U48 && _48 , U49 && _49)
+ : vec(std::forward<U0>(_0) , std::forward<U1>(_1) , std::forward<U2>(_2) , std::forward<U3>(_3) , std::forward<U4>(_4) , std::forward<U5>(_5) , std::forward<U6>(_6) , std::forward<U7>(_7) , std::forward<U8>(_8) , std::forward<U9>(_9) , std::forward<U10>(_10) , std::forward<U11>(_11) , std::forward<U12>(_12) , std::forward<U13>(_13) , std::forward<U14>(_14) , std::forward<U15>(_15) , std::forward<U16>(_16) , std::forward<U17>(_17) , std::forward<U18>(_18) , std::forward<U19>(_19) , std::forward<U20>(_20) , std::forward<U21>(_21) , std::forward<U22>(_22) , std::forward<U23>(_23) , std::forward<U24>(_24) , std::forward<U25>(_25) , std::forward<U26>(_26) , std::forward<U27>(_27) , std::forward<U28>(_28) , std::forward<U29>(_29) , std::forward<U30>(_30) , std::forward<U31>(_31) , std::forward<U32>(_32) , std::forward<U33>(_33) , std::forward<U34>(_34) , std::forward<U35>(_35) , std::forward<U36>(_36) , std::forward<U37>(_37) , std::forward<U38>(_38) , std::forward<U39>(_39) , std::forward<U40>(_40) , std::forward<U41>(_41) , std::forward<U42>(_42) , std::forward<U43>(_43) , std::forward<U44>(_44) , std::forward<U45>(_45) , std::forward<U46>(_46) , std::forward<U47>(_47) , std::forward<U48>(_48) , std::forward<U49>(_49)) {}
+# endif
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(vector<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& rhs)
{
@@ -153,13 +509,42 @@ namespace boost { namespace fusion
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(T const& rhs)
{
vec = rhs;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector const& rhs)
+ {
+ vec = rhs.vec;
+ return *this;
+ }
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
+ vector(vector&& rhs)
+ : vec(std::forward<vector_n>(rhs.vec)) {}
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector&& rhs)
+ {
+ vec = std::forward<vector_n>(rhs.vec);
+ return *this;
+ }
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(T&& rhs)
+ {
+ vec = std::forward<T>(rhs);
+ return *this;
+ }
+# endif
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at_c<types, N>::type
>::type
@@ -168,6 +553,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at_c<types, N>::type
@@ -178,6 +564,7 @@ namespace boost { namespace fusion
return vec.at_impl(index);
}
template <typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at<types, I>::type
>::type
@@ -186,6 +573,7 @@ namespace boost { namespace fusion
return vec.at_impl(mpl::int_<I::value>());
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at<types, I>::type
diff --git a/3party/boost/boost/fusion/container/vector/detail/prior_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/prior_impl.hpp
index b0a6a684db..b3bdc55f60 100644
--- a/3party/boost/boost/fusion/container/vector/detail/prior_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/prior_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_PRIOR_IMPL_05042005_1145)
#define FUSION_PRIOR_IMPL_05042005_1145
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector_iterator.hpp>
namespace boost { namespace fusion
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
typedef typename Iterator::index index;
typedef vector_iterator<vector, index::value-1> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/container/vector/detail/value_at_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/value_at_impl.hpp
index b5aeb199e9..9b94e9deb3 100644
--- a/3party/boost/boost/fusion/container/vector/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/value_at_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VALUE_AT_IMPL_05052005_0232)
#define FUSION_VALUE_AT_IMPL_05052005_0232
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/container/vector/detail/value_of_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/value_of_impl.hpp
index e10c5225b3..7527d58148 100644
--- a/3party/boost/boost/fusion/container/vector/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/value_of_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VALUE_OF_IMPL_05052005_1128)
#define FUSION_VALUE_OF_IMPL_05052005_1128
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
namespace boost { namespace fusion
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 c41d5b297b..976e2a1f74 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
@@ -1,25 +1,21 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_PP_IS_ITERATING
#if !defined(FUSION_VECTOR_FORWARD_CTOR_07122005_1123)
#define FUSION_VECTOR_FORWARD_CTOR_07122005_1123
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define FUSION_FORWARD_CTOR_MOVE(z, n, _) std::move(_##n)
+#define FUSION_FORWARD_CTOR_FORWARD(z, n, _) std::forward<U##n>(_##n)
#define BOOST_PP_FILENAME_1 \
<boost/fusion/container/vector/detail/vector_forward_ctor.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
#include BOOST_PP_ITERATE()
-#undef FUSION_FORWARD_CTOR_MOVE
+#undef FUSION_FORWARD_CTOR_FORWARD
#endif
#else // defined(BOOST_PP_IS_ITERATING)
///////////////////////////////////////////////////////////////////////////////
@@ -28,23 +24,32 @@
//
///////////////////////////////////////////////////////////////////////////////
-#define N BOOST_PP_ITERATION()
+#define M BOOST_PP_ITERATION()
-#if N == 1
+ BOOST_FUSION_GPU_ENABLED
+#if M == 1
explicit
#endif
vector(BOOST_PP_ENUM_BINARY_PARAMS(
- N, typename detail::call_param<T, >::type _))
- : vec(BOOST_PP_ENUM_PARAMS(N, _)) {}
+ M, typename detail::call_param<T, >::type _))
+ : vec(BOOST_PP_ENUM_PARAMS(M, _)) {}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
-#if N == 1
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#endif
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
+ (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+ template <BOOST_PP_ENUM_PARAMS(M, typename U)>
+ BOOST_FUSION_GPU_ENABLED
+#if M == 1
explicit
#endif
- vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _))
- : vec(BOOST_PP_ENUM(N, FUSION_FORWARD_CTOR_MOVE, _)) {}
+ vector(BOOST_PP_ENUM_BINARY_PARAMS(M, U, && _))
+ : vec(BOOST_PP_ENUM(M, FUSION_FORWARD_CTOR_FORWARD, _)) {}
+#endif
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH endif
#endif
-#undef N
+#undef M
#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 539b47fa99..89c6f03c1b 100644
--- a/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp
+++ b/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp
@@ -9,28 +9,41 @@
#if !defined(FUSION_MACRO_05042005)
#define FUSION_MACRO_05042005
-#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<T##n>(other.m##n))
-#define FUSION_VECTOR_ARG_FWD(z, n, _) m##n(std::forward<T##n>(_##n))
-#define FUSION_VECTOR_MEMBER_MEMBER_DECL(z, n, _) T##n m##n;
-#define FUSION_VECTOR_MEMBER_FORWARD(z, n, _) std::forward<T##n>(_##n)
-
-#define FUSION_VECTOR_MEMBER_MEMBER_ASSIGN(z, n, _) \
+#define FUSION_VECTOR_CTOR_DEFAULT_INIT(z, n, _) \
+ m##n()
+
+#define FUSION_VECTOR_CTOR_INIT(z, n, _) \
+ m##n(_##n)
+
+#define FUSION_VECTOR_MEMBER_CTOR_INIT(z, n, _) \
+ m##n(other.m##n)
+
+#define FUSION_VECTOR_CTOR_FORWARD(z, n, _) \
+ m##n(std::forward<T##n>(other.m##n))
+
+#define FUSION_VECTOR_CTOR_ARG_FWD(z, n, _) \
+ m##n(std::forward<U##n>(_##n))
+
+#define FUSION_VECTOR_MEMBER_DECL(z, n, _) \
+ T##n m##n;
+
+#define FUSION_VECTOR_MEMBER_FORWARD(z, n, _) \
+ std::forward<U##n>(_##n)
+
+#define FUSION_VECTOR_MEMBER_ASSIGN(z, n, _) \
this->BOOST_PP_CAT(m, n) = vec.BOOST_PP_CAT(m, n);
-#define FUSION_VECTOR_MEMBER_DEREF_MEMBER_ASSIGN(z, n, _) \
+#define FUSION_VECTOR_MEMBER_DEREF_ASSIGN(z, n, _) \
this->BOOST_PP_CAT(m, n) = *BOOST_PP_CAT(i, n);
-#define FUSION_VECTOR_MEMBER_MEMBER_FORWARD(z, n, _) \
+#define FUSION_VECTOR_MEMBER_MOVE(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<T##n>::type \
+ BOOST_FUSION_GPU_ENABLED typename add_reference<T##n>::type \
at_impl(mpl::int_<n>) { return this->m##n; } \
- typename add_reference<typename add_const<T##n>::type>::type \
+ BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T##n>::type>::type \
at_impl(mpl::int_<n>) const { return this->m##n; }
#define FUSION_VECTOR_MEMBER_ITER_DECL_VAR(z, n, _) \
@@ -46,37 +59,50 @@
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
struct BOOST_PP_CAT(vector_data, N)
{
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector_data, N)()
- : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_MEMBER_DEFAULT_INIT, _) {}
+ : BOOST_PP_ENUM(N, FUSION_VECTOR_CTOR_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, _) {}
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#endif
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
+ (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+ template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+ BOOST_FUSION_GPU_ENABLED
+ BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_BINARY_PARAMS(N, U, && _)
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* /*dummy*/ = 0
+ )
+ : BOOST_PP_ENUM(N, FUSION_VECTOR_CTOR_ARG_FWD, _) {}
+ BOOST_PP_CAT(vector_data, N)(
+ BOOST_PP_CAT(vector_data, N)&& other)
+ : BOOST_PP_ENUM(N, FUSION_VECTOR_CTOR_FORWARD, _) {}
+#endif
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH endif
#endif
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector_data, N)(
BOOST_PP_ENUM_BINARY_PARAMS(
N, typename detail::call_param<T, >::type _))
- : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_MEMBER_INIT, _) {}
+ : BOOST_PP_ENUM(N, FUSION_VECTOR_CTOR_INIT, _) {}
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector_data, N)(
BOOST_PP_CAT(vector_data, N) const& other)
- : 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_ENUM(N, FUSION_VECTOR_MEMBER_CTOR_INIT, _) {}
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector_data, N)&
operator=(BOOST_PP_CAT(vector_data, N) const& vec)
{
- BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_ASSIGN, _)
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_ASSIGN, _)
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static BOOST_PP_CAT(vector_data, N)
init_from_sequence(Sequence const& seq)
{
@@ -87,6 +113,7 @@
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
static BOOST_PP_CAT(vector_data, N)
init_from_sequence(Sequence& seq)
{
@@ -96,7 +123,7 @@
return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i));
}
- BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_DECL, _)
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_DECL, _)
};
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
@@ -113,8 +140,10 @@
typedef random_access_traversal_tag category;
typedef mpl::int_<N> size;
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector, N)() {}
+ BOOST_FUSION_GPU_ENABLED
#if (N == 1)
explicit
#endif
@@ -123,25 +152,60 @@
N, typename detail::call_param<T, >::type _))
: base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#endif
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
+ (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+ template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+ BOOST_FUSION_GPU_ENABLED
#if (N == 1)
explicit
-#endif
- BOOST_PP_CAT(vector, N)(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _))
+ BOOST_PP_CAT(vector, N)(U0&& _0
+ , typename boost::enable_if<is_convertible<U0, T0> >::type* /*dummy*/ = 0
+ )
+ : base_type(std::forward<U0>(_0)) {}
+#else
+ BOOST_PP_CAT(vector, N)(BOOST_PP_ENUM_BINARY_PARAMS(N, U, && _))
: base_type(BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_FORWARD, _)) {}
#endif
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector, N)(BOOST_PP_CAT(vector, N)&& rhs)
: base_type(std::forward<base_type>(rhs)) {}
+
+ BOOST_FUSION_GPU_ENABLED
+ BOOST_PP_CAT(vector, N)(BOOST_PP_CAT(vector, N) const& rhs)
+ : base_type(static_cast<base_type const&>(rhs)) {}
+
+ BOOST_FUSION_GPU_ENABLED
+ BOOST_PP_CAT(vector, N)&
+ operator=(BOOST_PP_CAT(vector, N) const& vec)
+ {
+ base_type::operator=(vec);
+ return *this;
+ }
+
+ BOOST_FUSION_GPU_ENABLED
+ BOOST_PP_CAT(vector, N)&
+ operator=(BOOST_PP_CAT(vector, N)&& vec)
+ {
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MOVE, _)
+ return *this;
+ }
+#endif
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH endif
#endif
template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector, N)(
BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& vec)
: base_type(BOOST_PP_ENUM_PARAMS(N, vec.m)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector, N)(
Sequence const& seq
#if (N == 1)
@@ -151,6 +215,7 @@
: base_type(base_type::init_from_sequence(seq)) {}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector, N)(
Sequence& seq
#if (N == 1)
@@ -160,36 +225,30 @@
: base_type(base_type::init_from_sequence(seq)) {}
template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+ BOOST_FUSION_GPU_ENABLED
BOOST_PP_CAT(vector, N)&
operator=(BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& vec)
{
- BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_ASSIGN, _)
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_ASSIGN, _)
return *this;
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename boost::disable_if<is_convertible<Sequence, T0>, this_type&>::type
operator=(Sequence const& seq)
{
typedef typename result_of::begin<Sequence const>::type I0;
I0 i0 = fusion::begin(seq);
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;
- }
-
-#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, _)
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_DEREF_ASSIGN, _)
return *this;
}
-#endif
BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_AT_IMPL, _)
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename mpl::at<types, I>::type>::type
at_impl(I)
{
@@ -197,6 +256,7 @@
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
at_impl(I) const
{
@@ -205,5 +265,3 @@
};
#undef N
-
-
diff --git a/3party/boost/boost/fusion/container/vector/limits.hpp b/3party/boost/boost/fusion/container/vector/limits.hpp
index e1b6042d6b..6e106144bb 100644
--- a/3party/boost/boost/fusion/container/vector/limits.hpp
+++ b/3party/boost/boost/fusion/container/vector/limits.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VECTOR_LIMITS_07072005_1246)
#define FUSION_VECTOR_LIMITS_07072005_1246
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/pp_round.hpp>
#if !defined(FUSION_MAX_VECTOR_SIZE)
diff --git a/3party/boost/boost/fusion/container/vector/vector.hpp b/3party/boost/boost/fusion/container/vector/vector.hpp
index 36c1b7ac9c..391bf39d25 100644
--- a/3party/boost/boost/fusion/container/vector/vector.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector.hpp
@@ -7,6 +7,10 @@
#if !defined(FUSION_VECTOR_07072005_1244)
#define FUSION_VECTOR_07072005_1244
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector_fwd.hpp>
#include <boost/fusion/container/vector/detail/vector_n_chooser.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
@@ -17,7 +21,7 @@
#include <boost/type_traits/is_base_of.hpp>
#include <boost/detail/workaround.hpp>
-#if !defined(__WAVE__)
+#define FUSION_HASH #
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600)
@@ -25,6 +29,7 @@
ctor_helper(rhs, is_base_of<vector, Sequence>()) \
#define BOOST_FUSION_VECTOR_CTOR_HELPER() \
+ BOOST_FUSION_GPU_ENABLED \
static vector_n const& \
ctor_helper(vector const& rhs, mpl::true_) \
{ \
@@ -32,6 +37,7 @@
} \
\
template <typename T> \
+ BOOST_FUSION_GPU_ENABLED \
static T const& \
ctor_helper(T const& rhs, mpl::false_) \
{ \
@@ -47,8 +53,6 @@
#endif
-#endif // !defined(__WAVE__)
-
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/vector/detail/preprocessed/vector.hpp>
#else
@@ -96,22 +100,21 @@ namespace boost { namespace fusion
typedef typename vector_n::category category;
typedef typename vector_n::is_view is_view;
+ BOOST_FUSION_GPU_ENABLED
vector()
: vec() {}
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
+ BOOST_FUSION_GPU_ENABLED
vector(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs)
: vec(rhs.vec) {}
+ BOOST_FUSION_GPU_ENABLED
vector(vector const& rhs)
: vec(rhs.vec) {}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
- vector(vector&& rhs)
- : vec(std::forward<vector_n>(rhs.vec)) {}
-#endif
-
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector(Sequence const& rhs)
: vec(BOOST_FUSION_VECTOR_COPY_INIT()) {}
@@ -125,6 +128,7 @@ namespace boost { namespace fusion
#include <boost/fusion/container/vector/detail/vector_forward_ctor.hpp>
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs)
{
@@ -133,6 +137,7 @@ namespace boost { namespace fusion
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(T const& rhs)
{
@@ -140,7 +145,23 @@ namespace boost { namespace fusion
return *this;
}
-#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector const& rhs)
+ {
+ vec = rhs.vec;
+ return *this;
+ }
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#endif
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
+ (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+ BOOST_FUSION_GPU_ENABLED
+ vector(vector&& rhs)
+ : vec(std::forward<vector_n>(rhs.vec)) {}
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(vector&& rhs)
{
@@ -149,6 +170,7 @@ namespace boost { namespace fusion
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
vector&
operator=(T&& rhs)
{
@@ -156,8 +178,12 @@ namespace boost { namespace fusion
return *this;
}
#endif
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH endif
+#endif
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at_c<types, N>::type
>::type
@@ -167,6 +193,7 @@ namespace boost { namespace fusion
}
template <int N>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at_c<types, N>::type
@@ -178,6 +205,7 @@ namespace boost { namespace fusion
}
template <typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename mpl::at<types, I>::type
>::type
@@ -187,6 +215,7 @@ namespace boost { namespace fusion
}
template<typename I>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<
typename add_const<
typename mpl::at<types, I>::type
@@ -210,4 +239,5 @@ namespace boost { namespace fusion
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
+#undef FUSION_HASH
#endif
diff --git a/3party/boost/boost/fusion/container/vector/vector10.hpp b/3party/boost/boost/fusion/container/vector/vector10.hpp
index bcafe59981..4f9b18f5e1 100644
--- a/3party/boost/boost/fusion/container/vector/vector10.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector10.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VECTOR10_05042005_0257)
#define FUSION_VECTOR10_05042005_0257
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector10_fwd.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/detail/access.hpp>
@@ -50,9 +51,11 @@ namespace boost { namespace fusion
typedef random_access_traversal_tag category;
typedef mpl::int_<0> size;
+ BOOST_FUSION_GPU_ENABLED
vector0() {}
template<typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
vector0(Sequence const& /*seq*/)
{}
};
@@ -80,12 +83,16 @@ namespace boost { namespace fusion
namespace boost { namespace fusion
{
+ struct vector_tag;
+ struct fusion_sequence_tag;
+ struct random_access_traversal_tag;
+#define FUSION_HASH #
// expand vector1 to vector10
#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, 10)
#include BOOST_PP_ITERATE()
-
+#undef FUSION_HASH
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
diff --git a/3party/boost/boost/fusion/container/vector/vector10_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector10_fwd.hpp
index 5f8c2188c3..ce5cb1e806 100644
--- a/3party/boost/boost/fusion/container/vector/vector10_fwd.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector10_fwd.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_VECTOR10_FWD_HPP_INCLUDED)
#define BOOST_FUSION_VECTOR10_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/iteration/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
diff --git a/3party/boost/boost/fusion/container/vector/vector20.hpp b/3party/boost/boost/fusion/container/vector/vector20.hpp
index d688a0d22e..11df242062 100644
--- a/3party/boost/boost/fusion/container/vector/vector20.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector20.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_VECTOR20_05052005_0205)
#define FUSION_VECTOR20_05052005_0205
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector20_fwd.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/detail/access.hpp>
@@ -61,11 +62,12 @@ namespace boost { namespace fusion
struct fusion_sequence_tag;
struct random_access_traversal_tag;
+#define FUSION_HASH #
// expand vector11 to vector20
#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (11, 20)
#include BOOST_PP_ITERATE()
-
+#undef FUSION_HASH
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
diff --git a/3party/boost/boost/fusion/container/vector/vector20_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector20_fwd.hpp
index 4102888f3e..bf1b39b454 100644
--- a/3party/boost/boost/fusion/container/vector/vector20_fwd.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector20_fwd.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_VECTOR20_FWD_HPP_INCLUDED)
#define BOOST_FUSION_VECTOR20_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/iteration/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
diff --git a/3party/boost/boost/fusion/container/vector/vector30.hpp b/3party/boost/boost/fusion/container/vector/vector30.hpp
index 4080005ad6..de379a06a2 100644
--- a/3party/boost/boost/fusion/container/vector/vector30.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector30.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VECTOR30_05052005_0206)
#define FUSION_VECTOR30_05052005_0206
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector30_fwd.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/detail/access.hpp>
@@ -60,11 +61,12 @@ namespace boost { namespace fusion
struct fusion_sequence_tag;
struct random_access_traversal_tag;
+#define FUSION_HASH #
// expand vector21 to vector30
#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (21, 30)
#include BOOST_PP_ITERATE()
-
+#undef FUSION_HASH
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
diff --git a/3party/boost/boost/fusion/container/vector/vector30_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector30_fwd.hpp
index 9b60644929..23b38569e5 100644
--- a/3party/boost/boost/fusion/container/vector/vector30_fwd.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector30_fwd.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_VECTOR30_FWD_HPP_INCLUDED)
#define BOOST_FUSION_VECTOR30_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/iteration/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
diff --git a/3party/boost/boost/fusion/container/vector/vector40.hpp b/3party/boost/boost/fusion/container/vector/vector40.hpp
index 3350badbc4..2c6fd85431 100644
--- a/3party/boost/boost/fusion/container/vector/vector40.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector40.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_VECTOR40_05052005_0208)
#define FUSION_VECTOR40_05052005_0208
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector40_fwd.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/detail/access.hpp>
@@ -61,11 +62,12 @@ namespace boost { namespace fusion
struct fusion_sequence_tag;
struct random_access_traversal_tag;
+#define FUSION_HASH #
// expand vector31 to vector40
#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (31, 40)
#include BOOST_PP_ITERATE()
-
+#undef FUSION_HASH
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
diff --git a/3party/boost/boost/fusion/container/vector/vector40_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector40_fwd.hpp
index 05342d1dea..fc3d29d195 100644
--- a/3party/boost/boost/fusion/container/vector/vector40_fwd.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector40_fwd.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_VECTOR40_FWD_HPP_INCLUDED)
#define BOOST_FUSION_VECTOR40_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/iteration/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
diff --git a/3party/boost/boost/fusion/container/vector/vector50.hpp b/3party/boost/boost/fusion/container/vector/vector50.hpp
index ec28828e7e..d209966535 100644
--- a/3party/boost/boost/fusion/container/vector/vector50.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector50.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VECTOR50_05052005_0207)
#define FUSION_VECTOR50_05052005_0207
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector50_fwd.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/detail/access.hpp>
@@ -60,11 +61,12 @@ namespace boost { namespace fusion
struct fusion_sequence_tag;
struct random_access_traversal_tag;
+#define FUSION_HASH #
// expand vector41 to vector50
#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (41, 50)
#include BOOST_PP_ITERATE()
-
+#undef FUSION_HASH
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
diff --git a/3party/boost/boost/fusion/container/vector/vector50_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector50_fwd.hpp
index 03b3b2f87a..52083ad47c 100644
--- a/3party/boost/boost/fusion/container/vector/vector50_fwd.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector50_fwd.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_VECTOR50_FWD_HPP_INCLUDED)
#define BOOST_FUSION_VECTOR50_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/iteration/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
diff --git a/3party/boost/boost/fusion/container/vector/vector_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector_fwd.hpp
index 194736a250..d157ea81f8 100644
--- a/3party/boost/boost/fusion/container/vector/vector_fwd.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector_fwd.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_VECTOR_FORWARD_07072005_0125)
#define FUSION_VECTOR_FORWARD_07072005_0125
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/limits.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
diff --git a/3party/boost/boost/fusion/container/vector/vector_iterator.hpp b/3party/boost/boost/fusion/container/vector/vector_iterator.hpp
index 66e9ebed26..ffa4d1380f 100644
--- a/3party/boost/boost/fusion/container/vector/vector_iterator.hpp
+++ b/3party/boost/boost/fusion/container/vector/vector_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VECTOR_ITERATOR_05042005_0635)
#define FUSION_VECTOR_ITERATOR_05042005_0635
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/container/vector/detail/deref_impl.hpp>
#include <boost/fusion/container/vector/detail/value_of_impl.hpp>
@@ -36,6 +37,7 @@ namespace boost { namespace fusion
typedef vector_iterator_identity<
typename add_const<Vector>::type, N> identity;
+ BOOST_FUSION_GPU_ENABLED
vector_iterator(Vector& in_vec)
: vec(in_vec) {}
Vector& vec;
diff --git a/3party/boost/boost/fusion/functional.hpp b/3party/boost/boost/fusion/functional.hpp
index 12662d973a..56b25cff02 100644
--- a/3party/boost/boost/fusion/functional.hpp
+++ b/3party/boost/boost/fusion/functional.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/invocation.hpp>
#include <boost/fusion/functional/adapter.hpp>
#include <boost/fusion/functional/generation.hpp>
diff --git a/3party/boost/boost/fusion/functional/adapter.hpp b/3party/boost/boost/fusion/functional/adapter.hpp
index 1a1f9819f0..a4ddc7a382 100644
--- a/3party/boost/boost/fusion/functional/adapter.hpp
+++ b/3party/boost/boost/fusion/functional/adapter.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_ADAPTER_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/fused.hpp>
#include <boost/fusion/functional/adapter/fused_procedure.hpp>
#include <boost/fusion/functional/adapter/fused_function_object.hpp>
diff --git a/3party/boost/boost/fusion/functional/adapter/fused.hpp b/3party/boost/boost/fusion/functional/adapter/fused.hpp
index 91ae1f2cf1..c6b1b03c81 100644
--- a/3party/boost/boost/fusion/functional/adapter/fused.hpp
+++ b/3party/boost/boost/fusion/functional/adapter/fused.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/config.hpp>
@@ -36,11 +37,13 @@ namespace boost { namespace fusion
public:
+ BOOST_FUSION_GPU_ENABLED
inline explicit fused(func_const_fwd_t f = Function())
: fnc_transformed(f)
{ }
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke<func_const_fwd_t,Seq const>::type
operator()(Seq const & s) const
{
@@ -48,6 +51,7 @@ namespace boost { namespace fusion
}
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke<func_fwd_t,Seq const>::type
operator()(Seq const & s)
{
@@ -55,6 +59,7 @@ namespace boost { namespace fusion
}
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke<func_const_fwd_t,Seq>::type
operator()(Seq & s) const
{
@@ -62,6 +67,7 @@ namespace boost { namespace fusion
}
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke<func_fwd_t,Seq>::type
operator()(Seq & s)
{
diff --git a/3party/boost/boost/fusion/functional/adapter/fused_function_object.hpp b/3party/boost/boost/fusion/functional/adapter/fused_function_object.hpp
index da8ac99baf..b3973a11d1 100644
--- a/3party/boost/boost/fusion/functional/adapter/fused_function_object.hpp
+++ b/3party/boost/boost/fusion/functional/adapter/fused_function_object.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_FUNCTION_OBJECT_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_FUNCTION_OBJECT_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/config.hpp>
@@ -36,11 +37,13 @@ namespace boost { namespace fusion
public:
+ BOOST_FUSION_GPU_ENABLED
inline explicit fused_function_object(func_const_fwd_t f = Function())
: fnc_transformed(f)
{ }
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<func_const_fwd_t,
Seq const>::type operator()(Seq const & s) const
{
@@ -49,6 +52,7 @@ namespace boost { namespace fusion
}
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<func_fwd_t,
Seq const>::type
operator()(Seq const & s)
@@ -58,6 +62,7 @@ namespace boost { namespace fusion
}
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<func_const_fwd_t,
Seq>::type
operator()(Seq & s) const
@@ -67,6 +72,7 @@ namespace boost { namespace fusion
}
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<func_fwd_t,Seq>::type
operator()(Seq & s)
{
diff --git a/3party/boost/boost/fusion/functional/adapter/fused_procedure.hpp b/3party/boost/boost/fusion/functional/adapter/fused_procedure.hpp
index 10c7c7a0d2..495320af7b 100644
--- a/3party/boost/boost/fusion/functional/adapter/fused_procedure.hpp
+++ b/3party/boost/boost/fusion/functional/adapter/fused_procedure.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_PROCEDURE_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_PROCEDURE_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/config.hpp>
@@ -36,11 +37,13 @@ namespace boost { namespace fusion
public:
+ BOOST_FUSION_GPU_ENABLED
inline explicit fused_procedure(func_const_fwd_t f = Function())
: fnc_transformed(f)
{ }
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline void operator()(Seq const & s) const
{
fusion::invoke_procedure<
@@ -48,6 +51,7 @@ namespace boost { namespace fusion
}
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline void operator()(Seq const & s)
{
fusion::invoke_procedure<
@@ -55,6 +59,7 @@ namespace boost { namespace fusion
}
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline void operator()(Seq & s) const
{
fusion::invoke_procedure<
@@ -62,6 +67,7 @@ namespace boost { namespace fusion
}
template <class Seq>
+ BOOST_FUSION_GPU_ENABLED
inline void operator()(Seq & s)
{
return fusion::invoke_procedure<
diff --git a/3party/boost/boost/fusion/functional/adapter/unfused.hpp b/3party/boost/boost/fusion/functional/adapter/unfused.hpp
index facd5c5427..b02f5d28a9 100644
--- a/3party/boost/boost/fusion/functional/adapter/unfused.hpp
+++ b/3party/boost/boost/fusion/functional/adapter/unfused.hpp
@@ -47,14 +47,14 @@ namespace boost { namespace fusion
using unfused<Function,false>::operator();
- inline explicit unfused(func_const_fwd_t f = function())
+ BOOST_FUSION_GPU_ENABLED inline explicit unfused(func_const_fwd_t f = function())
: unfused<Function,false>(f)
{ }
typedef typename boost::result_of<
function_c(fusion::vector0<> &) >::type call_const_0_result;
- inline call_const_0_result operator()() const
+ BOOST_FUSION_GPU_ENABLED inline call_const_0_result operator()() const
{
fusion::vector0<> arg;
return this->fnc_transformed(arg);
@@ -63,7 +63,7 @@ namespace boost { namespace fusion
typedef typename boost::result_of<
function(fusion::vector0<> &) >::type call_0_result;
- inline call_0_result operator()()
+ BOOST_FUSION_GPU_ENABLED inline call_0_result operator()()
{
fusion::vector0<> arg;
return this->fnc_transformed(arg);
@@ -79,6 +79,7 @@ namespace boost { namespace fusion
typedef typename detail::call_param<Function>::type func_const_fwd_t;
public:
+ BOOST_FUSION_GPU_ENABLED
inline explicit unfused(func_const_fwd_t f = function())
: fnc_transformed(f)
{ }
@@ -100,7 +101,7 @@ namespace boost { namespace fusion
namespace boost
{
-#if !defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_NO_DECLTYPE)
+#if !defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_NO_CXX11_DECLTYPE)
template<class F>
struct result_of< boost::fusion::unfused<F> const () >
{
@@ -148,6 +149,7 @@ namespace boost
{ };
template <BOOST_PP_ENUM_PARAMS(N,typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline typename boost::result_of<function_c(BOOST_PP_CAT(fusion::vector,N)
<BOOST_PP_ENUM_BINARY_PARAMS(N,T,& BOOST_PP_INTERCEPT)> & )>::type
operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,& a)) const
@@ -159,6 +161,7 @@ namespace boost
}
template <BOOST_PP_ENUM_PARAMS(N,typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline typename boost::result_of<function(BOOST_PP_CAT(fusion::vector,N)
<BOOST_PP_ENUM_BINARY_PARAMS(N,T,& BOOST_PP_INTERCEPT)> & )>::type
operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,& a))
diff --git a/3party/boost/boost/fusion/functional/adapter/unfused_typed.hpp b/3party/boost/boost/fusion/functional/adapter/unfused_typed.hpp
index 923c6876c1..c3ab33dd74 100644
--- a/3party/boost/boost/fusion/functional/adapter/unfused_typed.hpp
+++ b/3party/boost/boost/fusion/functional/adapter/unfused_typed.hpp
@@ -63,6 +63,7 @@ namespace boost { namespace fusion
public:
+ BOOST_FUSION_GPU_ENABLED
inline explicit unfused_typed(func_const_fwd_t f = Function())
: fnc_transformed(f)
{ }
@@ -80,7 +81,7 @@ namespace boost { namespace fusion
namespace boost
{
-#if !defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_NO_DECLTYPE)
+#if !defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_NO_CXX11_DECLTYPE)
template<class F, class Seq>
struct result_of< boost::fusion::unfused_typed<F,Seq> const () >
: boost::fusion::unfused_typed<F,Seq>::template result<
@@ -129,7 +130,8 @@ namespace boost
#define M(z,i,s) \
typename call_param<typename result_of::value_at_c<s,i>::type>::type a##i
- inline typename boost::result_of<
+ BOOST_FUSION_GPU_ENABLED
+ inline typename boost::result_of<
function_c(arg_vector_t &) >::type
operator()(BOOST_PP_ENUM(N,M,arg_vector_t)) const
{
@@ -141,6 +143,7 @@ namespace boost
return static_cast<Derived const *>(this)->fnc_transformed(arg);
}
+ BOOST_FUSION_GPU_ENABLED
inline typename boost::result_of<
function(arg_vector_t &) >::type
operator()(BOOST_PP_ENUM(N,M,arg_vector_t))
diff --git a/3party/boost/boost/fusion/functional/generation.hpp b/3party/boost/boost/fusion/functional/generation.hpp
index 3d812b9f7e..b97fd6c019 100644
--- a/3party/boost/boost/fusion/functional/generation.hpp
+++ b/3party/boost/boost/fusion/functional/generation.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_GENERATION_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_GENERATION_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/generation/make_fused.hpp>
#include <boost/fusion/functional/generation/make_fused_procedure.hpp>
#include <boost/fusion/functional/generation/make_fused_function_object.hpp>
diff --git a/3party/boost/boost/fusion/functional/generation/detail/gen_make_adapter.hpp b/3party/boost/boost/fusion/functional/generation/detail/gen_make_adapter.hpp
index 1c2c3e95a0..b7744826bd 100644
--- a/3party/boost/boost/fusion/functional/generation/detail/gen_make_adapter.hpp
+++ b/3party/boost/boost/fusion/functional/generation/detail/gen_make_adapter.hpp
@@ -31,6 +31,7 @@ namespace boost { namespace fusion
}
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::BOOST_FUSION_FUNC_NAME<F>::type
BOOST_FUSION_FUNC_NAME(F const & f)
{
diff --git a/3party/boost/boost/fusion/functional/generation/make_fused.hpp b/3party/boost/boost/fusion/functional/generation/make_fused.hpp
index 12365824f7..13ed807ea3 100644
--- a/3party/boost/boost/fusion/functional/generation/make_fused.hpp
+++ b/3party/boost/boost/fusion/functional/generation/make_fused.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/fused.hpp>
#define BOOST_FUSION_CLASS_TPL_NAME fused
diff --git a/3party/boost/boost/fusion/functional/generation/make_fused_function_object.hpp b/3party/boost/boost/fusion/functional/generation/make_fused_function_object.hpp
index 4146ddd6a7..f3169e6ee8 100644
--- a/3party/boost/boost/fusion/functional/generation/make_fused_function_object.hpp
+++ b/3party/boost/boost/fusion/functional/generation/make_fused_function_object.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_FUNCTION_OBJECT_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_FUNCTION_OBJECT_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/fused_function_object.hpp>
#define BOOST_FUSION_CLASS_TPL_NAME fused_function_object
diff --git a/3party/boost/boost/fusion/functional/generation/make_fused_procedure.hpp b/3party/boost/boost/fusion/functional/generation/make_fused_procedure.hpp
index 0687577c26..f8ca1254a7 100644
--- a/3party/boost/boost/fusion/functional/generation/make_fused_procedure.hpp
+++ b/3party/boost/boost/fusion/functional/generation/make_fused_procedure.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_PROCEDURE_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_PROCEDURE_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/fused_procedure.hpp>
#define BOOST_FUSION_CLASS_TPL_NAME fused_procedure
diff --git a/3party/boost/boost/fusion/functional/generation/make_unfused.hpp b/3party/boost/boost/fusion/functional/generation/make_unfused.hpp
index 79eadbd5aa..6e7f9e0061 100644
--- a/3party/boost/boost/fusion/functional/generation/make_unfused.hpp
+++ b/3party/boost/boost/fusion/functional/generation/make_unfused.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_UNFUSED_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_UNFUSED_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/unfused.hpp>
#define BOOST_FUSION_CLASS_TPL_NAME unfused
diff --git a/3party/boost/boost/fusion/functional/invocation.hpp b/3party/boost/boost/fusion/functional/invocation.hpp
index 3ca68c34ff..fe881bfb51 100644
--- a/3party/boost/boost/fusion/functional/invocation.hpp
+++ b/3party/boost/boost/fusion/functional/invocation.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_INVOCATION_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_INVOCATION_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/invocation/invoke.hpp>
#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
#include <boost/fusion/functional/invocation/invoke_function_object.hpp>
diff --git a/3party/boost/boost/fusion/functional/invocation/detail/that_ptr.hpp b/3party/boost/boost/fusion/functional/invocation/detail/that_ptr.hpp
index a92c436b25..a2b4a86a4d 100644
--- a/3party/boost/boost/fusion/functional/invocation/detail/that_ptr.hpp
+++ b/3party/boost/boost/fusion/functional/invocation/detail/that_ptr.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_INVOCATION_DETAIL_THAT_PTR_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_INVOCATION_DETAIL_THAT_PTR_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/get_pointer.hpp>
#include <boost/utility/addressof.hpp>
#include <boost/type_traits/config.hpp>
@@ -24,11 +25,13 @@ namespace boost { namespace fusion { namespace detail
typedef typename remove_reference<Wanted>::type pointee;
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
static inline pointee * do_get_pointer(T &, pointee * x)
{
return x;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
static inline pointee * do_get_pointer(T & x, void const *)
{
return get_pointer(x);
@@ -36,17 +39,21 @@ namespace boost { namespace fusion { namespace detail
public:
+ BOOST_FUSION_GPU_ENABLED
static inline pointee * get(pointee * x)
{
return x;
}
+ BOOST_FUSION_GPU_ENABLED
static inline pointee * get(pointee & x)
{
return boost::addressof(x);
}
- template <typename T> static inline pointee * get(T & x)
+ template <typename T>
+ BOOST_FUSION_GPU_ENABLED
+ static inline pointee * get(T & x)
{
return do_get_pointer(x, boost::addressof(x));
}
diff --git a/3party/boost/boost/fusion/functional/invocation/invoke.hpp b/3party/boost/boost/fusion/functional/invocation/invoke.hpp
index 1a49170277..d4aa945647 100644
--- a/3party/boost/boost/fusion/functional/invocation/invoke.hpp
+++ b/3party/boost/boost/fusion/functional/invocation/invoke.hpp
@@ -145,6 +145,7 @@ namespace boost { namespace fusion
typedef typename boost::add_reference<qualified_type>::type
result_type;
+ BOOST_FUSION_GPU_ENABLED
static inline result_type call(T C::* f, Sequence & s)
{
typename result_of::front<Sequence>::type c = fusion::front(s);
@@ -164,6 +165,7 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke<Function,Sequence>::type
invoke(Function f, Sequence & s)
{
@@ -173,6 +175,7 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke<Function,Sequence const>::type
invoke(Function f, Sequence const & s)
{
@@ -205,6 +208,7 @@ namespace boost { namespace fusion
#if N > 0
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@@ -214,6 +218,7 @@ namespace boost { namespace fusion
#else
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@@ -234,6 +239,7 @@ namespace boost { namespace fusion
#if N > 0
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@@ -243,6 +249,7 @@ namespace boost { namespace fusion
#else
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@@ -263,6 +270,7 @@ namespace boost { namespace fusion
typedef typename ft::result_type<Function>::type result_type;
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@@ -293,6 +301,7 @@ namespace boost { namespace fusion
#if N > 0
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@@ -304,6 +313,7 @@ namespace boost { namespace fusion
#else
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@@ -326,6 +336,7 @@ namespace boost { namespace fusion
#if N > 0
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@@ -337,6 +348,7 @@ namespace boost { namespace fusion
#else
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@@ -358,6 +370,7 @@ namespace boost { namespace fusion
typedef typename ft::result_type<Function>::type result_type;
template <typename F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
diff --git a/3party/boost/boost/fusion/functional/invocation/invoke_function_object.hpp b/3party/boost/boost/fusion/functional/invocation/invoke_function_object.hpp
index 81c33f9229..a5c9510c25 100644
--- a/3party/boost/boost/fusion/functional/invocation/invoke_function_object.hpp
+++ b/3party/boost/boost/fusion/functional/invocation/invoke_function_object.hpp
@@ -40,10 +40,12 @@ namespace boost { namespace fusion
}
template <class Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<Function, Sequence>::type
invoke_function_object(Function, Sequence &);
template <class Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<Function, Sequence const
>::type invoke_function_object(Function, Sequence const &);
@@ -79,6 +81,7 @@ namespace boost { namespace fusion
}
template <class Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<Function,Sequence>::type
invoke_function_object(Function f, Sequence & s)
{
@@ -88,6 +91,7 @@ namespace boost { namespace fusion
}
template <class Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<Function,Sequence const>::type
invoke_function_object(Function f, Sequence const & s)
{
@@ -121,6 +125,7 @@ namespace boost { namespace fusion
#if N > 0
template <class F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@@ -132,6 +137,7 @@ namespace boost { namespace fusion
#else
template <class F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@@ -155,6 +161,7 @@ namespace boost { namespace fusion
#if N > 0
template <class F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@@ -170,6 +177,7 @@ namespace boost { namespace fusion
#else
template <class F>
+ BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
diff --git a/3party/boost/boost/fusion/functional/invocation/invoke_procedure.hpp b/3party/boost/boost/fusion/functional/invocation/invoke_procedure.hpp
index ddb5e5065d..bd3e49b9d0 100644
--- a/3party/boost/boost/fusion/functional/invocation/invoke_procedure.hpp
+++ b/3party/boost/boost/fusion/functional/invocation/invoke_procedure.hpp
@@ -47,9 +47,11 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline void invoke_procedure(Function, Sequence &);
template <typename Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline void invoke_procedure(Function, Sequence const &);
//----- ---- --- -- - - - -
@@ -75,6 +77,7 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline void invoke_procedure(Function f, Sequence & s)
{
detail::invoke_procedure_impl<
@@ -83,6 +86,7 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline void invoke_procedure(Function f, Sequence const & s)
{
detail::invoke_procedure_impl<
@@ -109,6 +113,7 @@ namespace boost { namespace fusion
#if N > 0
+ BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & s)
{
f(BOOST_PP_ENUM(N,M,~));
@@ -116,6 +121,7 @@ namespace boost { namespace fusion
#else
+ BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & /*s*/)
{
f();
@@ -129,6 +135,7 @@ namespace boost { namespace fusion
template <typename Function, class Sequence>
struct invoke_procedure_impl<Function,Sequence,N,true,true>
{
+ BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & s)
{
(that_ptr<typename mpl::front<
@@ -151,6 +158,7 @@ namespace boost { namespace fusion
#if N > 0
+ BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & s)
{
typedef typename result_of::begin<Sequence>::type I0;
@@ -160,6 +168,7 @@ namespace boost { namespace fusion
}
#else
+ BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & /*s*/)
{
f();
@@ -173,6 +182,7 @@ namespace boost { namespace fusion
template <typename Function, class Sequence>
struct invoke_procedure_impl<Function,Sequence,N,true,false>
{
+ BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & s)
{
typedef typename result_of::begin<Sequence>::type I0;
diff --git a/3party/boost/boost/fusion/include/accumulate.hpp b/3party/boost/boost/fusion/include/accumulate.hpp
index b9ca6526ef..b2cbc189e6 100644
--- a/3party/boost/boost/fusion/include/accumulate.hpp
+++ b/3party/boost/boost/fusion/include/accumulate.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ACCUMULATE)
#define FUSION_INCLUDE_ACCUMULATE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/accumulate.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_adt.hpp b/3party/boost/boost/fusion/include/adapt_adt.hpp
index 87ef15e848..b84016d67c 100644
--- a/3party/boost/boost/fusion/include/adapt_adt.hpp
+++ b/3party/boost/boost/fusion/include/adapt_adt.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_ADT_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_ADT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_adt.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_adt_named.cpp b/3party/boost/boost/fusion/include/adapt_adt_named.cpp
index 8ac033a019..8ccdf0777e 100644
--- a/3party/boost/boost/fusion/include/adapt_adt_named.cpp
+++ b/3party/boost/boost/fusion/include/adapt_adt_named.cpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ADAPT_ADT_NAMED)
#define FUSION_INCLUDE_ADAPT_ADT_NAMED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_adt_named.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_adt_named.hpp b/3party/boost/boost/fusion/include/adapt_adt_named.hpp
index 308249e818..46b0a4cb39 100644
--- a/3party/boost/boost/fusion/include/adapt_adt_named.hpp
+++ b/3party/boost/boost/fusion/include/adapt_adt_named.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_ADT_NAMED_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_ADT_NAMED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_adt_named.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_assoc_adt.hpp b/3party/boost/boost/fusion/include/adapt_assoc_adt.hpp
index 55bd551465..775057c073 100644
--- a/3party/boost/boost/fusion/include/adapt_assoc_adt.hpp
+++ b/3party/boost/boost/fusion/include/adapt_assoc_adt.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_ASSOC_ADT_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_ASSOC_ADR_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_assoc_adt_named.hpp b/3party/boost/boost/fusion/include/adapt_assoc_adt_named.hpp
index aa356e756d..d25aae5149 100644
--- a/3party/boost/boost/fusion/include/adapt_assoc_adt_named.hpp
+++ b/3party/boost/boost/fusion/include/adapt_assoc_adt_named.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_ASSOC_ADT_NAMED_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_ASSOC_ADT_NAMED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_assoc_class.hpp b/3party/boost/boost/fusion/include/adapt_assoc_class.hpp
index ccbfeb18e6..83d6c4daa4 100644
--- a/3party/boost/boost/fusion/include/adapt_assoc_class.hpp
+++ b/3party/boost/boost/fusion/include/adapt_assoc_class.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_ASSOC_CLASS_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_ASSOC_CLASS_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/class/adapt_assoc_class.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_assoc_class_named.hpp b/3party/boost/boost/fusion/include/adapt_assoc_class_named.hpp
index 10782681d5..3c04183d2a 100644
--- a/3party/boost/boost/fusion/include/adapt_assoc_class_named.hpp
+++ b/3party/boost/boost/fusion/include/adapt_assoc_class_named.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_ASSOC_CLASS_NAMED_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_ASSOC_CLASS_NAMED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/class/adapt_assoc_class_named.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_assoc_struct.hpp b/3party/boost/boost/fusion/include/adapt_assoc_struct.hpp
index 681aa2e421..a55f6e560d 100644
--- a/3party/boost/boost/fusion/include/adapt_assoc_struct.hpp
+++ b/3party/boost/boost/fusion/include/adapt_assoc_struct.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_ASSOC_STRUCT_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_ASSOC_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_assoc_struct_named.hpp b/3party/boost/boost/fusion/include/adapt_assoc_struct_named.hpp
index 19204f50b5..3afd13733b 100644
--- a/3party/boost/boost/fusion/include/adapt_assoc_struct_named.hpp
+++ b/3party/boost/boost/fusion/include/adapt_assoc_struct_named.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_ASSOC_STRUCT_NAMED_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_ASSOC_STRUCT_NAMED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_struct.hpp b/3party/boost/boost/fusion/include/adapt_struct.hpp
index c1271543f8..ea2fea5b75 100644
--- a/3party/boost/boost/fusion/include/adapt_struct.hpp
+++ b/3party/boost/boost/fusion/include/adapt_struct.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_STRUCT_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapt_struct_named.hpp b/3party/boost/boost/fusion/include/adapt_struct_named.hpp
index 01cbf3294d..c80b57df2f 100644
--- a/3party/boost/boost/fusion/include/adapt_struct_named.hpp
+++ b/3party/boost/boost/fusion/include/adapt_struct_named.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ADAPT_STRUCT_NAMED_HPP
#define BOOST_FUSION_INCLUDE_ADAPT_STRUCT_NAMED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct_named.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapted.hpp b/3party/boost/boost/fusion/include/adapted.hpp
index 1827267da5..da68f5b206 100644
--- a/3party/boost/boost/fusion/include/adapted.hpp
+++ b/3party/boost/boost/fusion/include/adapted.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ADAPTED)
#define FUSION_INCLUDE_ADAPTED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/adapter.hpp b/3party/boost/boost/fusion/include/adapter.hpp
index 2441d7caa6..53ff0796e3 100644
--- a/3party/boost/boost/fusion/include/adapter.hpp
+++ b/3party/boost/boost/fusion/include/adapter.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ADAPTER)
#define FUSION_INCLUDE_ADAPTER
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/advance.hpp b/3party/boost/boost/fusion/include/advance.hpp
index cb9ed7a9b8..011c3b8b7c 100644
--- a/3party/boost/boost/fusion/include/advance.hpp
+++ b/3party/boost/boost/fusion/include/advance.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ADVANCE)
#define FUSION_INCLUDE_ADVANCE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/advance.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/algorithm.hpp b/3party/boost/boost/fusion/include/algorithm.hpp
index 1a362fd8f6..df33a54a47 100644
--- a/3party/boost/boost/fusion/include/algorithm.hpp
+++ b/3party/boost/boost/fusion/include/algorithm.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ALGORITHM)
#define FUSION_INCLUDE_ALGORITHM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/all.hpp b/3party/boost/boost/fusion/include/all.hpp
index 5802626890..1848e754bd 100644
--- a/3party/boost/boost/fusion/include/all.hpp
+++ b/3party/boost/boost/fusion/include/all.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ALL)
#define FUSION_INCLUDE_ALL
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/all.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/any.hpp b/3party/boost/boost/fusion/include/any.hpp
index e5c7306020..c76d6b6905 100644
--- a/3party/boost/boost/fusion/include/any.hpp
+++ b/3party/boost/boost/fusion/include/any.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ANY)
#define FUSION_INCLUDE_ANY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/any.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/array.hpp b/3party/boost/boost/fusion/include/array.hpp
index b54cd70d88..b0e53a7b35 100644
--- a/3party/boost/boost/fusion/include/array.hpp
+++ b/3party/boost/boost/fusion/include/array.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ARRAY)
#define FUSION_INCLUDE_ARRAY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/array.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/as_deque.hpp b/3party/boost/boost/fusion/include/as_deque.hpp
index 8f1686f268..77f90fd34a 100644
--- a/3party/boost/boost/fusion/include/as_deque.hpp
+++ b/3party/boost/boost/fusion/include/as_deque.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_AS_DEQUE)
#define FUSION_INCLUDE_AS_DEQUE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque/convert.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/as_list.hpp b/3party/boost/boost/fusion/include/as_list.hpp
index 6c477d2402..9a4072ebbd 100644
--- a/3party/boost/boost/fusion/include/as_list.hpp
+++ b/3party/boost/boost/fusion/include/as_list.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_AS_LIST)
#define FUSION_INCLUDE_AS_LIST
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/convert.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/as_map.hpp b/3party/boost/boost/fusion/include/as_map.hpp
index bdfd3f53c0..3a6db91344 100644
--- a/3party/boost/boost/fusion/include/as_map.hpp
+++ b/3party/boost/boost/fusion/include/as_map.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_AS_MAP)
#define FUSION_INCLUDE_AS_MAP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/map/convert.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/as_set.hpp b/3party/boost/boost/fusion/include/as_set.hpp
index c0d5a8b3d4..697f86c7ce 100644
--- a/3party/boost/boost/fusion/include/as_set.hpp
+++ b/3party/boost/boost/fusion/include/as_set.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_AS_SET)
#define FUSION_INCLUDE_AS_SET
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/convert.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/as_vector.hpp b/3party/boost/boost/fusion/include/as_vector.hpp
index 4c9b39d041..35aecd8f37 100644
--- a/3party/boost/boost/fusion/include/as_vector.hpp
+++ b/3party/boost/boost/fusion/include/as_vector.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_AS_VECTOR)
#define FUSION_INCLUDE_AS_VECTOR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/convert.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/at.hpp b/3party/boost/boost/fusion/include/at.hpp
index eacd7bbb80..99b70d6d94 100644
--- a/3party/boost/boost/fusion/include/at.hpp
+++ b/3party/boost/boost/fusion/include/at.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_AT)
#define FUSION_INCLUDE_AT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/at_c.hpp b/3party/boost/boost/fusion/include/at_c.hpp
index a2403d16c3..053a596210 100644
--- a/3party/boost/boost/fusion/include/at_c.hpp
+++ b/3party/boost/boost/fusion/include/at_c.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_AT_C)
#define FUSION_INCLUDE_AT_C
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/at_c.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/at_key.hpp b/3party/boost/boost/fusion/include/at_key.hpp
index 89a0aae26a..17331b9172 100644
--- a/3party/boost/boost/fusion/include/at_key.hpp
+++ b/3party/boost/boost/fusion/include/at_key.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_AT_KEY)
#define FUSION_INCLUDE_AT_KEY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/at_key.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/auxiliary.hpp b/3party/boost/boost/fusion/include/auxiliary.hpp
index e75ee3c611..af36d6d2f4 100644
--- a/3party/boost/boost/fusion/include/auxiliary.hpp
+++ b/3party/boost/boost/fusion/include/auxiliary.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_AUXILIARY)
#define FUSION_INCLUDE_AUXILIARY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/auxiliary.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/back.hpp b/3party/boost/boost/fusion/include/back.hpp
index d5e77f0a67..9e2e977007 100644
--- a/3party/boost/boost/fusion/include/back.hpp
+++ b/3party/boost/boost/fusion/include/back.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_BACK)
#define FUSION_INCLUDE_BACK
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/back.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/begin.hpp b/3party/boost/boost/fusion/include/begin.hpp
index 53361fb210..88a449f20f 100644
--- a/3party/boost/boost/fusion/include/begin.hpp
+++ b/3party/boost/boost/fusion/include/begin.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_BEGIN)
#define FUSION_INCLUDE_BEGIN
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/boost_array.hpp b/3party/boost/boost/fusion/include/boost_array.hpp
index d2c2bed836..b85fa53ff7 100644
--- a/3party/boost/boost/fusion/include/boost_array.hpp
+++ b/3party/boost/boost/fusion/include/boost_array.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_BOOST_ARRAY)
#define FUSION_INCLUDE_BOOST_ARRAY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/boost_tuple.hpp b/3party/boost/boost/fusion/include/boost_tuple.hpp
index 1ccc94dab4..3f5fc8c308 100644
--- a/3party/boost/boost/fusion/include/boost_tuple.hpp
+++ b/3party/boost/boost/fusion/include/boost_tuple.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_BOOST_TUPLE)
#define FUSION_INCLUDE_BOOST_TUPLE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/category_of.hpp b/3party/boost/boost/fusion/include/category_of.hpp
index c390686cd6..0b75369fe3 100644
--- a/3party/boost/boost/fusion/include/category_of.hpp
+++ b/3party/boost/boost/fusion/include/category_of.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_CATEGORY_OF)
#define FUSION_INCLUDE_CATEGORY_OF
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/category_of.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/clear.hpp b/3party/boost/boost/fusion/include/clear.hpp
index 7fd863323d..0c742fd58e 100644
--- a/3party/boost/boost/fusion/include/clear.hpp
+++ b/3party/boost/boost/fusion/include/clear.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_CLEAR)
#define FUSION_INCLUDE_CLEAR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/clear.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/comparison.hpp b/3party/boost/boost/fusion/include/comparison.hpp
index e7790f2831..07e7cd808d 100644
--- a/3party/boost/boost/fusion/include/comparison.hpp
+++ b/3party/boost/boost/fusion/include/comparison.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_COMPARISON)
#define FUSION_INCLUDE_COMPARISON
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/comparison.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/cons.hpp b/3party/boost/boost/fusion/include/cons.hpp
index 853eb6d2c4..498e9407ee 100644
--- a/3party/boost/boost/fusion/include/cons.hpp
+++ b/3party/boost/boost/fusion/include/cons.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_CONS)
#define FUSION_INCLUDE_CONS
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/cons.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/cons_tie.hpp b/3party/boost/boost/fusion/include/cons_tie.hpp
index 740e1739f0..7467ee4703 100644
--- a/3party/boost/boost/fusion/include/cons_tie.hpp
+++ b/3party/boost/boost/fusion/include/cons_tie.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_CONS_TIE)
#define FUSION_INCLUDE_CONS_TIE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/cons_tie.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/container.hpp b/3party/boost/boost/fusion/include/container.hpp
index 657b4c3022..4e6886f8c6 100644
--- a/3party/boost/boost/fusion/include/container.hpp
+++ b/3party/boost/boost/fusion/include/container.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_CONTAINER)
#define FUSION_INCLUDE_CONTAINER
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/convert.hpp b/3party/boost/boost/fusion/include/convert.hpp
index 1d64ea1b00..10fff22e55 100644
--- a/3party/boost/boost/fusion/include/convert.hpp
+++ b/3party/boost/boost/fusion/include/convert.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_CONVERT)
#define FUSION_INCLUDE_CONVERT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/convert.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/copy.hpp b/3party/boost/boost/fusion/include/copy.hpp
index 9fb4bb5432..e44f58bf3b 100644
--- a/3party/boost/boost/fusion/include/copy.hpp
+++ b/3party/boost/boost/fusion/include/copy.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_COPY)
#define FUSION_INCLUDE_COPY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/auxiliary/copy.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/count.hpp b/3party/boost/boost/fusion/include/count.hpp
index 750a030327..3e5b8fca59 100644
--- a/3party/boost/boost/fusion/include/count.hpp
+++ b/3party/boost/boost/fusion/include/count.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_COUNT)
#define FUSION_INCLUDE_COUNT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/count.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/count_if.hpp b/3party/boost/boost/fusion/include/count_if.hpp
index ff804ae94e..524af8aba8 100644
--- a/3party/boost/boost/fusion/include/count_if.hpp
+++ b/3party/boost/boost/fusion/include/count_if.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_COUNT_IF)
#define FUSION_INCLUDE_COUNT_IF
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/count_if.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/deduce.hpp b/3party/boost/boost/fusion/include/deduce.hpp
index 43ec5c0f3d..572e0d52fd 100644
--- a/3party/boost/boost/fusion/include/deduce.hpp
+++ b/3party/boost/boost/fusion/include/deduce.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_DEDUCE)
#define FUSION_INCLUDE_DEDUCE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/deduce.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/deduce_sequence.hpp b/3party/boost/boost/fusion/include/deduce_sequence.hpp
index a8d36c08c9..153fac544d 100644
--- a/3party/boost/boost/fusion/include/deduce_sequence.hpp
+++ b/3party/boost/boost/fusion/include/deduce_sequence.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_DEDUCE_SEQUENCE)
#define FUSION_INCLUDE_DEDUCE_SEQUENCE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/deduce_sequence.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/define_assoc_struct.hpp b/3party/boost/boost/fusion/include/define_assoc_struct.hpp
index 8b8ee261d2..56ca85af77 100644
--- a/3party/boost/boost/fusion/include/define_assoc_struct.hpp
+++ b/3party/boost/boost/fusion/include/define_assoc_struct.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_DEFINE_ASSOC_STRUCT_HPP
#define BOOST_FUSION_INCLUDE_DEFINE_ASSOC_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/define_struct.hpp b/3party/boost/boost/fusion/include/define_struct.hpp
index 564f1c7834..366c98d323 100644
--- a/3party/boost/boost/fusion/include/define_struct.hpp
+++ b/3party/boost/boost/fusion/include/define_struct.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_DEFINE_STRUCT_HPP
#define BOOST_FUSION_INCLUDE_DEFINE_STRUCT_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/define_struct.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/define_struct_inline.hpp b/3party/boost/boost/fusion/include/define_struct_inline.hpp
index 141ad4e2dd..bf18865233 100644
--- a/3party/boost/boost/fusion/include/define_struct_inline.hpp
+++ b/3party/boost/boost/fusion/include/define_struct_inline.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_DEFINE_STRUCT_INLINE_HPP
#define BOOST_FUSION_INCLUDE_DEFINE_STRUCT_INLINE_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/deque.hpp b/3party/boost/boost/fusion/include/deque.hpp
index 17386a1dc1..bbbdfe80a4 100644
--- a/3party/boost/boost/fusion/include/deque.hpp
+++ b/3party/boost/boost/fusion/include/deque.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_DEQUE)
#define FUSION_INCLUDE_DEQUE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/deque_fwd.hpp b/3party/boost/boost/fusion/include/deque_fwd.hpp
index 915c3cbb4e..8a41121a68 100644
--- a/3party/boost/boost/fusion/include/deque_fwd.hpp
+++ b/3party/boost/boost/fusion/include/deque_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_DEQUE)
#define FUSION_INCLUDE_DEQUE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/deque/deque_fwd.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/deque_tie.hpp b/3party/boost/boost/fusion/include/deque_tie.hpp
index 8adbc4c0bc..400e9803e0 100644
--- a/3party/boost/boost/fusion/include/deque_tie.hpp
+++ b/3party/boost/boost/fusion/include/deque_tie.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_GENERATION)
#define FUSION_INCLUDE_GENERATION
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation.hpp>
#include <boost/fusion/functional/generation.hpp>
diff --git a/3party/boost/boost/fusion/include/deref.hpp b/3party/boost/boost/fusion/include/deref.hpp
index 9c831f79da..64dbe6972c 100644
--- a/3party/boost/boost/fusion/include/deref.hpp
+++ b/3party/boost/boost/fusion/include/deref.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_DEREF)
#define FUSION_INCLUDE_DEREF
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/deref_data.hpp b/3party/boost/boost/fusion/include/deref_data.hpp
index 24d4e7cfd1..e6bc41f4df 100644
--- a/3party/boost/boost/fusion/include/deref_data.hpp
+++ b/3party/boost/boost/fusion/include/deref_data.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_DEREF_DATA_HPP
#define BOOST_FUSION_INCLUDE_DEREF_DATA_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref_data.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/distance.hpp b/3party/boost/boost/fusion/include/distance.hpp
index fac103a6f2..f76bad114f 100644
--- a/3party/boost/boost/fusion/include/distance.hpp
+++ b/3party/boost/boost/fusion/include/distance.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_DISTANCE)
#define FUSION_INCLUDE_DISTANCE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/distance.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/empty.hpp b/3party/boost/boost/fusion/include/empty.hpp
index 0a8af33c44..8e6ed931c5 100644
--- a/3party/boost/boost/fusion/include/empty.hpp
+++ b/3party/boost/boost/fusion/include/empty.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_EMPTY)
#define FUSION_INCLUDE_EMPTY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/empty.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/end.hpp b/3party/boost/boost/fusion/include/end.hpp
index 61d65de01d..255d05f0d5 100644
--- a/3party/boost/boost/fusion/include/end.hpp
+++ b/3party/boost/boost/fusion/include/end.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_END)
#define FUSION_INCLUDE_END
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/equal_to.hpp b/3party/boost/boost/fusion/include/equal_to.hpp
index 5607b8e231..24499a9069 100644
--- a/3party/boost/boost/fusion/include/equal_to.hpp
+++ b/3party/boost/boost/fusion/include/equal_to.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_EQUAL_TO)
#define FUSION_INCLUDE_EQUAL_TO
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/sequence/comparison/equal_to.hpp>
diff --git a/3party/boost/boost/fusion/include/erase.hpp b/3party/boost/boost/fusion/include/erase.hpp
index b7e6fafb35..07e756540d 100644
--- a/3party/boost/boost/fusion/include/erase.hpp
+++ b/3party/boost/boost/fusion/include/erase.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ERASE)
#define FUSION_INCLUDE_ERASE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/erase.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/erase_key.hpp b/3party/boost/boost/fusion/include/erase_key.hpp
index e13c889f2c..11c342c4eb 100644
--- a/3party/boost/boost/fusion/include/erase_key.hpp
+++ b/3party/boost/boost/fusion/include/erase_key.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ERASE_KEY)
#define FUSION_INCLUDE_ERASE_KEY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/erase_key.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/filter.hpp b/3party/boost/boost/fusion/include/filter.hpp
index 234e40642b..96c8bd6c4d 100644
--- a/3party/boost/boost/fusion/include/filter.hpp
+++ b/3party/boost/boost/fusion/include/filter.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FILTER)
#define FUSION_INCLUDE_FILTER
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/filter.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/filter_if.hpp b/3party/boost/boost/fusion/include/filter_if.hpp
index 31fdec5d32..081541b0f2 100644
--- a/3party/boost/boost/fusion/include/filter_if.hpp
+++ b/3party/boost/boost/fusion/include/filter_if.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FILTER_IF)
#define FUSION_INCLUDE_FILTER_IF
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/filter_if.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/filter_view.hpp b/3party/boost/boost/fusion/include/filter_view.hpp
index 196df8a012..6ba64fe16d 100644
--- a/3party/boost/boost/fusion/include/filter_view.hpp
+++ b/3party/boost/boost/fusion/include/filter_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FILTER_VIEW)
#define FUSION_INCLUDE_FILTER_VIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/filter_view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/find.hpp b/3party/boost/boost/fusion/include/find.hpp
index cf50c412fd..47167d8545 100644
--- a/3party/boost/boost/fusion/include/find.hpp
+++ b/3party/boost/boost/fusion/include/find.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FIND)
#define FUSION_INCLUDE_FIND
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/find.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/find_if.hpp b/3party/boost/boost/fusion/include/find_if.hpp
index aa1a4c7a45..a864d801df 100644
--- a/3party/boost/boost/fusion/include/find_if.hpp
+++ b/3party/boost/boost/fusion/include/find_if.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FIND_IF)
#define FUSION_INCLUDE_FIND_IF
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/find_if.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/flatten.hpp b/3party/boost/boost/fusion/include/flatten.hpp
new file mode 100644
index 0000000000..33d7349990
--- /dev/null
+++ b/3party/boost/boost/fusion/include/flatten.hpp
@@ -0,0 +1,14 @@
+/*//////////////////////////////////////////////////////////////////////////////
+ Copyright (c) 2014 Jamboree
+
+ 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 FUSION_INCLUDE_FLATTEN
+#define FUSION_INCLUDE_FLATTEN
+
+
+#include <boost/fusion/algorithm/transformation/flatten.hpp>
+
+
+#endif
diff --git a/3party/boost/boost/fusion/include/flatten_view.hpp b/3party/boost/boost/fusion/include/flatten_view.hpp
new file mode 100644
index 0000000000..9a3536b238
--- /dev/null
+++ b/3party/boost/boost/fusion/include/flatten_view.hpp
@@ -0,0 +1,14 @@
+/*//////////////////////////////////////////////////////////////////////////////
+ Copyright (c) 2014 Jamboree
+
+ 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 FUSION_INCLUDE_FLATTEN_VIEW
+#define FUSION_INCLUDE_FLATTEN_VIEW
+
+
+#include <boost/fusion/view/flatten_view.hpp>
+
+
+#endif
diff --git a/3party/boost/boost/fusion/include/fold.hpp b/3party/boost/boost/fusion/include/fold.hpp
index 40bf3a793e..04a18580b0 100644
--- a/3party/boost/boost/fusion/include/fold.hpp
+++ b/3party/boost/boost/fusion/include/fold.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FOLD)
#define FUSION_INCLUDE_FOLD
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/fold.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/for_each.hpp b/3party/boost/boost/fusion/include/for_each.hpp
index b20578e5e8..b4a96ae0ea 100644
--- a/3party/boost/boost/fusion/include/for_each.hpp
+++ b/3party/boost/boost/fusion/include/for_each.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FOR_EACH)
#define FUSION_INCLUDE_FOR_EACH
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/front.hpp b/3party/boost/boost/fusion/include/front.hpp
index 495deaf74d..b080fe5659 100644
--- a/3party/boost/boost/fusion/include/front.hpp
+++ b/3party/boost/boost/fusion/include/front.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FRONT)
#define FUSION_INCLUDE_FRONT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/front.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/functional.hpp b/3party/boost/boost/fusion/include/functional.hpp
index ab38fe1f43..01e7439a01 100644
--- a/3party/boost/boost/fusion/include/functional.hpp
+++ b/3party/boost/boost/fusion/include/functional.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FUNCTIONAL)
#define FUSION_INCLUDE_FUNCTIONAL
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/fused.hpp b/3party/boost/boost/fusion/include/fused.hpp
index fa9dd46443..f27094f1f6 100644
--- a/3party/boost/boost/fusion/include/fused.hpp
+++ b/3party/boost/boost/fusion/include/fused.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FUSED)
#define FUSION_INCLUDE_FUSED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/fused.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/fused_function_object.hpp b/3party/boost/boost/fusion/include/fused_function_object.hpp
index d35140c655..4196410d3d 100644
--- a/3party/boost/boost/fusion/include/fused_function_object.hpp
+++ b/3party/boost/boost/fusion/include/fused_function_object.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FUSED_FUNCTION_OBJECT)
#define FUSION_INCLUDE_FUSED_FUNCTION_OBJECT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/fused_function_object.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/fused_procedure.hpp b/3party/boost/boost/fusion/include/fused_procedure.hpp
index 9df4717b7d..f6c3a01def 100644
--- a/3party/boost/boost/fusion/include/fused_procedure.hpp
+++ b/3party/boost/boost/fusion/include/fused_procedure.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_FUSED_PROCEDURE)
#define FUSION_INCLUDE_FUSED_PROCEDURE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/fused_procedure.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/generation.hpp b/3party/boost/boost/fusion/include/generation.hpp
index 8adbc4c0bc..400e9803e0 100644
--- a/3party/boost/boost/fusion/include/generation.hpp
+++ b/3party/boost/boost/fusion/include/generation.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_GENERATION)
#define FUSION_INCLUDE_GENERATION
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation.hpp>
#include <boost/fusion/functional/generation.hpp>
diff --git a/3party/boost/boost/fusion/include/greater.hpp b/3party/boost/boost/fusion/include/greater.hpp
index a5ff306fd4..e70550ced2 100644
--- a/3party/boost/boost/fusion/include/greater.hpp
+++ b/3party/boost/boost/fusion/include/greater.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_NOT_GREATER)
#define FUSION_INCLUDE_NOT_GREATER
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/comparison/greater.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/greater_equal.hpp b/3party/boost/boost/fusion/include/greater_equal.hpp
index 3a09255147..efd462c54d 100644
--- a/3party/boost/boost/fusion/include/greater_equal.hpp
+++ b/3party/boost/boost/fusion/include/greater_equal.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_GREATER_EQUAL)
#define FUSION_INCLUDE_GREATER_EQUAL
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/comparison/greater_equal.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/has_key.hpp b/3party/boost/boost/fusion/include/has_key.hpp
index b696241d03..ee192cf09e 100644
--- a/3party/boost/boost/fusion/include/has_key.hpp
+++ b/3party/boost/boost/fusion/include/has_key.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_HAS_KEY)
#define FUSION_INCLUDE_HAS_KEY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/has_key.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/ignore.hpp b/3party/boost/boost/fusion/include/ignore.hpp
index 8adbc4c0bc..400e9803e0 100644
--- a/3party/boost/boost/fusion/include/ignore.hpp
+++ b/3party/boost/boost/fusion/include/ignore.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_GENERATION)
#define FUSION_INCLUDE_GENERATION
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation.hpp>
#include <boost/fusion/functional/generation.hpp>
diff --git a/3party/boost/boost/fusion/include/in.hpp b/3party/boost/boost/fusion/include/in.hpp
index ca285c0e58..4ceb928c99 100644
--- a/3party/boost/boost/fusion/include/in.hpp
+++ b/3party/boost/boost/fusion/include/in.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_IN)
#define FUSION_INCLUDE_IN
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/io/in.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/insert.hpp b/3party/boost/boost/fusion/include/insert.hpp
index 53c0b05ea6..389333d400 100644
--- a/3party/boost/boost/fusion/include/insert.hpp
+++ b/3party/boost/boost/fusion/include/insert.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_INSERT)
#define FUSION_INCLUDE_INSERT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/insert.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/insert_range.hpp b/3party/boost/boost/fusion/include/insert_range.hpp
index f7093ed994..9f280e4e7f 100644
--- a/3party/boost/boost/fusion/include/insert_range.hpp
+++ b/3party/boost/boost/fusion/include/insert_range.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_INSERT_RANGE)
#define FUSION_INCLUDE_INSERT_RANGE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/insert_range.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/intrinsic.hpp b/3party/boost/boost/fusion/include/intrinsic.hpp
index c9d787117b..dcceea544d 100644
--- a/3party/boost/boost/fusion/include/intrinsic.hpp
+++ b/3party/boost/boost/fusion/include/intrinsic.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_INTRINSIC)
#define FUSION_INCLUDE_INTRINSIC
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/invocation.hpp b/3party/boost/boost/fusion/include/invocation.hpp
index 2a6f12a37f..fbb4061ffe 100644
--- a/3party/boost/boost/fusion/include/invocation.hpp
+++ b/3party/boost/boost/fusion/include/invocation.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_INVOCATION)
#define FUSION_INCLUDE_INVOCATION
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/invocation.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/invoke.hpp b/3party/boost/boost/fusion/include/invoke.hpp
index 452264259b..2565f1fa73 100644
--- a/3party/boost/boost/fusion/include/invoke.hpp
+++ b/3party/boost/boost/fusion/include/invoke.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_INVOKE)
#define FUSION_INCLUDE_INVOKE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/invocation/invoke.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/invoke_function_object.hpp b/3party/boost/boost/fusion/include/invoke_function_object.hpp
index 4ffeb24dd8..f0ca0a98fe 100644
--- a/3party/boost/boost/fusion/include/invoke_function_object.hpp
+++ b/3party/boost/boost/fusion/include/invoke_function_object.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_INVOKE_FUNCTION_OBJECT)
#define FUSION_INCLUDE_INVOKE_FUNCTION_OBJECT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/invocation/invoke_function_object.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/invoke_procedure.hpp b/3party/boost/boost/fusion/include/invoke_procedure.hpp
index afd46259b9..28bd35d3cb 100644
--- a/3party/boost/boost/fusion/include/invoke_procedure.hpp
+++ b/3party/boost/boost/fusion/include/invoke_procedure.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_INVOKE_PROCEDURE)
#define FUSION_INCLUDE_INVOKE_PROCEDURE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/io.hpp b/3party/boost/boost/fusion/include/io.hpp
index d84fdf3511..992e0be291 100644
--- a/3party/boost/boost/fusion/include/io.hpp
+++ b/3party/boost/boost/fusion/include/io.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_IO)
#define FUSION_INCLUDE_IO
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/io.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/is_iterator.hpp b/3party/boost/boost/fusion/include/is_iterator.hpp
index 31348eb788..83dc1484d6 100644
--- a/3party/boost/boost/fusion/include/is_iterator.hpp
+++ b/3party/boost/boost/fusion/include/is_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_IS_ITERATOR)
#define FUSION_INCLUDE_IS_ITERATOR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/is_iterator.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/is_segmented.hpp b/3party/boost/boost/fusion/include/is_segmented.hpp
index 28fa434651..b13be3f00c 100644
--- a/3party/boost/boost/fusion/include/is_segmented.hpp
+++ b/3party/boost/boost/fusion/include/is_segmented.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_INCLUDE_IS_SEGMENTED)
#define BOOST_FUSION_INCLUDE_IS_SEGMENTED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/is_segmented.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/is_sequence.hpp b/3party/boost/boost/fusion/include/is_sequence.hpp
index a7f2b4d88d..d3d820fcd7 100644
--- a/3party/boost/boost/fusion/include/is_sequence.hpp
+++ b/3party/boost/boost/fusion/include/is_sequence.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_IS_SEQUENCE)
#define FUSION_INCLUDE_IS_SEQUENCE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/is_view.hpp b/3party/boost/boost/fusion/include/is_view.hpp
index 5ebc34732d..1f886f4dc8 100644
--- a/3party/boost/boost/fusion/include/is_view.hpp
+++ b/3party/boost/boost/fusion/include/is_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_IS_VIEW)
#define FUSION_INCLUDE_IS_VIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/is_view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/iter_fold.hpp b/3party/boost/boost/fusion/include/iter_fold.hpp
index ba6f9b7e70..e39651bd11 100644
--- a/3party/boost/boost/fusion/include/iter_fold.hpp
+++ b/3party/boost/boost/fusion/include/iter_fold.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_ITER_FOLD_HPP
#define BOOST_FUSION_INCLUDE_ITER_FOLD_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/iter_fold.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/iteration.hpp b/3party/boost/boost/fusion/include/iteration.hpp
index 372aa726a2..612f00c45f 100644
--- a/3party/boost/boost/fusion/include/iteration.hpp
+++ b/3party/boost/boost/fusion/include/iteration.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ITERATION)
#define FUSION_INCLUDE_ITERATION
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/iterator.hpp b/3party/boost/boost/fusion/include/iterator.hpp
index 2ed8e8381f..a69be64081 100644
--- a/3party/boost/boost/fusion/include/iterator.hpp
+++ b/3party/boost/boost/fusion/include/iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ITERATOR)
#define FUSION_INCLUDE_ITERATOR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/iterator_adapter.hpp b/3party/boost/boost/fusion/include/iterator_adapter.hpp
index 4ecdf2b2b4..95de7cfba1 100644
--- a/3party/boost/boost/fusion/include/iterator_adapter.hpp
+++ b/3party/boost/boost/fusion/include/iterator_adapter.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ITERATOR_ADAPTER)
#define FUSION_INCLUDE_ITERATOR_ADAPTER
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_adapter.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/iterator_base.hpp b/3party/boost/boost/fusion/include/iterator_base.hpp
index bbd353217e..41223c58f8 100644
--- a/3party/boost/boost/fusion/include/iterator_base.hpp
+++ b/3party/boost/boost/fusion/include/iterator_base.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ITERATOR_BASE)
#define FUSION_INCLUDE_ITERATOR_BASE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/iterator_facade.hpp b/3party/boost/boost/fusion/include/iterator_facade.hpp
index a36f8b162f..a137414bab 100644
--- a/3party/boost/boost/fusion/include/iterator_facade.hpp
+++ b/3party/boost/boost/fusion/include/iterator_facade.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ITERATOR_FACADE)
#define FUSION_INCLUDE_ITERATOR_FACADE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/iterator_range.hpp b/3party/boost/boost/fusion/include/iterator_range.hpp
index 54eba6dd2a..1f5d1ed6a7 100644
--- a/3party/boost/boost/fusion/include/iterator_range.hpp
+++ b/3party/boost/boost/fusion/include/iterator_range.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ITERATOR_RANGE)
#define FUSION_INCLUDE_ITERATOR_RANGE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/iterator_range.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/join.hpp b/3party/boost/boost/fusion/include/join.hpp
index 5f701ad305..419caabf10 100644
--- a/3party/boost/boost/fusion/include/join.hpp
+++ b/3party/boost/boost/fusion/include/join.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_JOIN)
#define FUSION_INCLUDE_JOIN
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/join.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/joint_view.hpp b/3party/boost/boost/fusion/include/joint_view.hpp
index e3d1e20485..94b2d07160 100644
--- a/3party/boost/boost/fusion/include/joint_view.hpp
+++ b/3party/boost/boost/fusion/include/joint_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_JOINT_VIEW)
#define FUSION_INCLUDE_JOINT_VIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/joint_view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/key_of.hpp b/3party/boost/boost/fusion/include/key_of.hpp
index cb29f571ad..4e79a0efbe 100644
--- a/3party/boost/boost/fusion/include/key_of.hpp
+++ b/3party/boost/boost/fusion/include/key_of.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_KEY_OF_HPP
#define BOOST_FUSION_INCLUDE_KEY_OF_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/key_of.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/less.hpp b/3party/boost/boost/fusion/include/less.hpp
index bd4d27714e..463b91a65b 100644
--- a/3party/boost/boost/fusion/include/less.hpp
+++ b/3party/boost/boost/fusion/include/less.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_LESS)
#define FUSION_INCLUDE_LESS
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/comparison/less.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/less_equal.hpp b/3party/boost/boost/fusion/include/less_equal.hpp
index 2ac1b72ba7..48de2a373b 100644
--- a/3party/boost/boost/fusion/include/less_equal.hpp
+++ b/3party/boost/boost/fusion/include/less_equal.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_LESS_EQUAL)
#define FUSION_INCLUDE_LESS_EQUAL
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/comparison/less_equal.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/list.hpp b/3party/boost/boost/fusion/include/list.hpp
index 0a3a1a63f6..9d8e33c13b 100644
--- a/3party/boost/boost/fusion/include/list.hpp
+++ b/3party/boost/boost/fusion/include/list.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_LIST)
#define FUSION_INCLUDE_LIST
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/list_fwd.hpp b/3party/boost/boost/fusion/include/list_fwd.hpp
index 08823bf673..8f7216d14a 100644
--- a/3party/boost/boost/fusion/include/list_fwd.hpp
+++ b/3party/boost/boost/fusion/include/list_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_LIST_FWD)
#define FUSION_INCLUDE_LIST_FWD
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/list/list_fwd.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/list_tie.hpp b/3party/boost/boost/fusion/include/list_tie.hpp
index 8adbc4c0bc..400e9803e0 100644
--- a/3party/boost/boost/fusion/include/list_tie.hpp
+++ b/3party/boost/boost/fusion/include/list_tie.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_GENERATION)
#define FUSION_INCLUDE_GENERATION
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation.hpp>
#include <boost/fusion/functional/generation.hpp>
diff --git a/3party/boost/boost/fusion/include/make_cons.hpp b/3party/boost/boost/fusion/include/make_cons.hpp
index 76c4caa530..89d3a26bd9 100644
--- a/3party/boost/boost/fusion/include/make_cons.hpp
+++ b/3party/boost/boost/fusion/include/make_cons.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_CONS)
#define FUSION_INCLUDE_MAKE_CONS
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/make_cons.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_deque.hpp b/3party/boost/boost/fusion/include/make_deque.hpp
index 35520e8d2b..d16b3785b0 100644
--- a/3party/boost/boost/fusion/include/make_deque.hpp
+++ b/3party/boost/boost/fusion/include/make_deque.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_DEQUE)
#define FUSION_INCLUDE_MAKE_DEQUE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/make_deque.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_fused.hpp b/3party/boost/boost/fusion/include/make_fused.hpp
index 6ed860ef54..82b7ed7edf 100644
--- a/3party/boost/boost/fusion/include/make_fused.hpp
+++ b/3party/boost/boost/fusion/include/make_fused.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_FUSED)
#define FUSION_INCLUDE_MAKE_FUSED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/generation/make_fused.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_fused_function_object.hpp b/3party/boost/boost/fusion/include/make_fused_function_object.hpp
index dfc1295b10..68667c777e 100644
--- a/3party/boost/boost/fusion/include/make_fused_function_object.hpp
+++ b/3party/boost/boost/fusion/include/make_fused_function_object.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_FUSED_FUNCTION_OBJECT)
#define FUSION_INCLUDE_MAKE_FUSED_FUNCTION_OBJECT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/generation/make_fused_function_object.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_fused_procedure.hpp b/3party/boost/boost/fusion/include/make_fused_procedure.hpp
index 94e44717aa..b6ac333983 100644
--- a/3party/boost/boost/fusion/include/make_fused_procedure.hpp
+++ b/3party/boost/boost/fusion/include/make_fused_procedure.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_FUSED_PROCEDURE)
#define FUSION_INCLUDE_MAKE_FUSED_PROCEDURE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/generation/make_fused_procedure.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_list.hpp b/3party/boost/boost/fusion/include/make_list.hpp
index 7adb350718..affee72153 100644
--- a/3party/boost/boost/fusion/include/make_list.hpp
+++ b/3party/boost/boost/fusion/include/make_list.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_LIST)
#define FUSION_INCLUDE_MAKE_LIST
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/make_list.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_map.hpp b/3party/boost/boost/fusion/include/make_map.hpp
index 90d599216a..9492eaefd9 100644
--- a/3party/boost/boost/fusion/include/make_map.hpp
+++ b/3party/boost/boost/fusion/include/make_map.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_MAP)
#define FUSION_INCLUDE_MAKE_MAP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/make_map.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_set.hpp b/3party/boost/boost/fusion/include/make_set.hpp
index 19f344f670..c87b3998a4 100644
--- a/3party/boost/boost/fusion/include/make_set.hpp
+++ b/3party/boost/boost/fusion/include/make_set.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_SET)
#define FUSION_INCLUDE_MAKE_SET
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/make_set.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_tuple.hpp b/3party/boost/boost/fusion/include/make_tuple.hpp
index 8cfbdc8e5f..82f3447d69 100644
--- a/3party/boost/boost/fusion/include/make_tuple.hpp
+++ b/3party/boost/boost/fusion/include/make_tuple.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_TUPLE)
#define FUSION_INCLUDE_MAKE_TUPLE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/tuple/make_tuple.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_unfused.hpp b/3party/boost/boost/fusion/include/make_unfused.hpp
index ae3b667928..db3ad80c70 100644
--- a/3party/boost/boost/fusion/include/make_unfused.hpp
+++ b/3party/boost/boost/fusion/include/make_unfused.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_MAKE_UNFUSED_HPP
#define BOOST_FUSION_INCLUDE_MAKE_UNFUSED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/generation/make_unfused.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/make_vector.hpp b/3party/boost/boost/fusion/include/make_vector.hpp
index b165ba3ed5..9d9a70a329 100644
--- a/3party/boost/boost/fusion/include/make_vector.hpp
+++ b/3party/boost/boost/fusion/include/make_vector.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAKE_VECTOR)
#define FUSION_INCLUDE_MAKE_VECTOR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/map.hpp b/3party/boost/boost/fusion/include/map.hpp
index 07441b4a08..17c4e762d3 100644
--- a/3party/boost/boost/fusion/include/map.hpp
+++ b/3party/boost/boost/fusion/include/map.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAP)
#define FUSION_INCLUDE_MAP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/map.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/map_fwd.hpp b/3party/boost/boost/fusion/include/map_fwd.hpp
index 970c413270..86fa7cafa1 100644
--- a/3party/boost/boost/fusion/include/map_fwd.hpp
+++ b/3party/boost/boost/fusion/include/map_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAP_FWD)
#define FUSION_INCLUDE_MAP_FWD
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/map/map_fwd.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/map_tie.hpp b/3party/boost/boost/fusion/include/map_tie.hpp
index 89aeb71617..58afafbada 100644
--- a/3party/boost/boost/fusion/include/map_tie.hpp
+++ b/3party/boost/boost/fusion/include/map_tie.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MAP_TIE)
#define FUSION_INCLUDE_MAP_TIE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/map_tie.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/move.hpp b/3party/boost/boost/fusion/include/move.hpp
new file mode 100644
index 0000000000..8042db48e1
--- /dev/null
+++ b/3party/boost/boost/fusion/include/move.hpp
@@ -0,0 +1,13 @@
+/*=============================================================================
+ Copyright (c) 2001-2013 Joel de Guzman
+
+ 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_INCLUDE_MOVE)
+#define FUSION_INCLUDE_MOVE
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/algorithm/auxiliary/move.hpp>
+
+#endif
diff --git a/3party/boost/boost/fusion/include/mpl.hpp b/3party/boost/boost/fusion/include/mpl.hpp
index 8a1cbfd025..cf7fff2f59 100644
--- a/3party/boost/boost/fusion/include/mpl.hpp
+++ b/3party/boost/boost/fusion/include/mpl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_MPL)
#define FUSION_INCLUDE_MPL
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl.hpp>
#include <boost/fusion/mpl.hpp>
diff --git a/3party/boost/boost/fusion/include/next.hpp b/3party/boost/boost/fusion/include/next.hpp
index 6188c65a72..266b6ecb36 100644
--- a/3party/boost/boost/fusion/include/next.hpp
+++ b/3party/boost/boost/fusion/include/next.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_NEXT)
#define FUSION_INCLUDE_NEXT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/next.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/nil.hpp b/3party/boost/boost/fusion/include/nil.hpp
new file mode 100644
index 0000000000..3efde4e99d
--- /dev/null
+++ b/3party/boost/boost/fusion/include/nil.hpp
@@ -0,0 +1,13 @@
+/*=============================================================================
+ Copyright (c) 2014 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)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_NIL)
+#define FUSION_INCLUDE_NIL
+
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/container/list/nil.hpp>
+
+#endif
diff --git a/3party/boost/boost/fusion/include/none.hpp b/3party/boost/boost/fusion/include/none.hpp
index 19720ef8cc..3870b39802 100644
--- a/3party/boost/boost/fusion/include/none.hpp
+++ b/3party/boost/boost/fusion/include/none.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_NONE)
#define FUSION_INCLUDE_NONE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/none.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/not_equal_to.hpp b/3party/boost/boost/fusion/include/not_equal_to.hpp
index 9e23b899da..e11f2d6aec 100644
--- a/3party/boost/boost/fusion/include/not_equal_to.hpp
+++ b/3party/boost/boost/fusion/include/not_equal_to.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_NOT_EQUAL_TO)
#define FUSION_INCLUDE_NOT_EQUAL_TO
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/sequence/comparison/not_equal_to.hpp>
diff --git a/3party/boost/boost/fusion/include/nview.hpp b/3party/boost/boost/fusion/include/nview.hpp
index 215329d02b..f1309ca51f 100644
--- a/3party/boost/boost/fusion/include/nview.hpp
+++ b/3party/boost/boost/fusion/include/nview.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_NVIEW)
#define FUSION_INCLUDE_NVIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/nview.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/out.hpp b/3party/boost/boost/fusion/include/out.hpp
index 9ecef3e713..85d26dda10 100644
--- a/3party/boost/boost/fusion/include/out.hpp
+++ b/3party/boost/boost/fusion/include/out.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_OUT)
#define FUSION_INCLUDE_OUT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/io/out.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/pair.hpp b/3party/boost/boost/fusion/include/pair.hpp
index 97ebfcd8bd..bf0897d0f9 100644
--- a/3party/boost/boost/fusion/include/pair.hpp
+++ b/3party/boost/boost/fusion/include/pair.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_PAIR)
#define FUSION_INCLUDE_PAIR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/pair.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/pair_tie.hpp b/3party/boost/boost/fusion/include/pair_tie.hpp
index ac192cada1..3a783f33c1 100644
--- a/3party/boost/boost/fusion/include/pair_tie.hpp
+++ b/3party/boost/boost/fusion/include/pair_tie.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_PAIR_TIE)
#define FUSION_INCLUDE_PAIR_TIE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/pair_tie.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/pop_back.hpp b/3party/boost/boost/fusion/include/pop_back.hpp
index b5a808cd5e..213fb3b271 100644
--- a/3party/boost/boost/fusion/include/pop_back.hpp
+++ b/3party/boost/boost/fusion/include/pop_back.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_POP_BACK)
#define FUSION_INCLUDE_POP_BACK
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/pop_back.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/pop_front.hpp b/3party/boost/boost/fusion/include/pop_front.hpp
index 7df977e0d6..d52d61226e 100644
--- a/3party/boost/boost/fusion/include/pop_front.hpp
+++ b/3party/boost/boost/fusion/include/pop_front.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_POP_FRONT)
#define FUSION_INCLUDE_POP_FRONT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/pop_front.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/prior.hpp b/3party/boost/boost/fusion/include/prior.hpp
index b18a55a394..605b3b398a 100644
--- a/3party/boost/boost/fusion/include/prior.hpp
+++ b/3party/boost/boost/fusion/include/prior.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_PRIOR)
#define FUSION_INCLUDE_PRIOR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/prior.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/proxy_type.hpp b/3party/boost/boost/fusion/include/proxy_type.hpp
index 31e8dce010..a73c234481 100644
--- a/3party/boost/boost/fusion/include/proxy_type.hpp
+++ b/3party/boost/boost/fusion/include/proxy_type.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_PROXY_TYPE_HPP
#define BOOST_FUSION_INCLUDE_PROXY_TYPE_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/push_back.hpp b/3party/boost/boost/fusion/include/push_back.hpp
index 4908e87c63..6e74b3fa8a 100644
--- a/3party/boost/boost/fusion/include/push_back.hpp
+++ b/3party/boost/boost/fusion/include/push_back.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_PUSH_BACK)
#define FUSION_INCLUDE_PUSH_BACK
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/push_back.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/push_front.hpp b/3party/boost/boost/fusion/include/push_front.hpp
index 5a9cfa5ec2..8c4b0357ef 100644
--- a/3party/boost/boost/fusion/include/push_front.hpp
+++ b/3party/boost/boost/fusion/include/push_front.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_PUSH_FRONT)
#define FUSION_INCLUDE_PUSH_FRONT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/push_front.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/query.hpp b/3party/boost/boost/fusion/include/query.hpp
index 6e5144b57d..edfbd1e296 100644
--- a/3party/boost/boost/fusion/include/query.hpp
+++ b/3party/boost/boost/fusion/include/query.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_QUERY)
#define FUSION_INCLUDE_QUERY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/remove.hpp b/3party/boost/boost/fusion/include/remove.hpp
index 9f11d69617..269d86f221 100644
--- a/3party/boost/boost/fusion/include/remove.hpp
+++ b/3party/boost/boost/fusion/include/remove.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_REMOVE)
#define FUSION_INCLUDE_REMOVE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/remove.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/remove_if.hpp b/3party/boost/boost/fusion/include/remove_if.hpp
index 7f0b4657da..6e6266d302 100644
--- a/3party/boost/boost/fusion/include/remove_if.hpp
+++ b/3party/boost/boost/fusion/include/remove_if.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_REMOVE_IF)
#define FUSION_INCLUDE_REMOVE_IF
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/remove_if.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/repetitive_view.hpp b/3party/boost/boost/fusion/include/repetitive_view.hpp
index f56bca8821..b57c997dda 100644
--- a/3party/boost/boost/fusion/include/repetitive_view.hpp
+++ b/3party/boost/boost/fusion/include/repetitive_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_REPETETIVE_VIEW)
#define FUSION_INCLUDE_REPETETIVE_VIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/repetitive_view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/replace.hpp b/3party/boost/boost/fusion/include/replace.hpp
index 4d0b3af829..3ff05a67e0 100644
--- a/3party/boost/boost/fusion/include/replace.hpp
+++ b/3party/boost/boost/fusion/include/replace.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_REPLACE)
#define FUSION_INCLUDE_REPLACE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/replace.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/replace_if.hpp b/3party/boost/boost/fusion/include/replace_if.hpp
index 354e13abd0..9bc9931d52 100644
--- a/3party/boost/boost/fusion/include/replace_if.hpp
+++ b/3party/boost/boost/fusion/include/replace_if.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_REPLACE_IF)
#define FUSION_INCLUDE_REPLACE_IF
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/replace_if.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/reverse.hpp b/3party/boost/boost/fusion/include/reverse.hpp
index 3f9fd7824d..4f147b9882 100644
--- a/3party/boost/boost/fusion/include/reverse.hpp
+++ b/3party/boost/boost/fusion/include/reverse.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_REVERSE)
#define FUSION_INCLUDE_REVERSE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/reverse.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/reverse_fold.hpp b/3party/boost/boost/fusion/include/reverse_fold.hpp
index f2379e6779..4b3e61c2b5 100644
--- a/3party/boost/boost/fusion/include/reverse_fold.hpp
+++ b/3party/boost/boost/fusion/include/reverse_fold.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_REVERSE_FOLD_HPP
#define BOOST_FUSION_INCLUDE_REVERSE_FOLD_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/reverse_fold.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/reverse_iter_fold.hpp b/3party/boost/boost/fusion/include/reverse_iter_fold.hpp
index ba92d5fea1..bbd1ea40c8 100644
--- a/3party/boost/boost/fusion/include/reverse_iter_fold.hpp
+++ b/3party/boost/boost/fusion/include/reverse_iter_fold.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_REVERSE_ITER_FOLD_HPP
#define BOOST_FUSION_INCLUDE_REVERSE_ITER_FOLD_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/iteration/reverse_iter_fold.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/reverse_view.hpp b/3party/boost/boost/fusion/include/reverse_view.hpp
index 844532d62d..6652d0607c 100644
--- a/3party/boost/boost/fusion/include/reverse_view.hpp
+++ b/3party/boost/boost/fusion/include/reverse_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_REVERSE_VIEW)
#define FUSION_INCLUDE_REVERSE_VIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/reverse_view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/segmented_fold_until.hpp b/3party/boost/boost/fusion/include/segmented_fold_until.hpp
index d7fe06af57..7a5cc62d35 100644
--- a/3party/boost/boost/fusion/include/segmented_fold_until.hpp
+++ b/3party/boost/boost/fusion/include/segmented_fold_until.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_INCLUDE_SEGMENTED_FOLD_UNTIL)
#define BOOST_FUSION_INCLUDE_SEGMENTED_FOLD_UNTIL
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/segmented_fold_until.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/segmented_iterator.hpp b/3party/boost/boost/fusion/include/segmented_iterator.hpp
index 6e8a4964b2..18d0a65ee4 100644
--- a/3party/boost/boost/fusion/include/segmented_iterator.hpp
+++ b/3party/boost/boost/fusion/include/segmented_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_INCLUDE_SEGMENTED_ITERATOR)
#define BOOST_FUSION_INCLUDE_SEGMENTED_ITERATOR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/segmented_iterator.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/segments.hpp b/3party/boost/boost/fusion/include/segments.hpp
index 7bc7b2bf02..c0a4c50c4a 100644
--- a/3party/boost/boost/fusion/include/segments.hpp
+++ b/3party/boost/boost/fusion/include/segments.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_INCLUDE_SEGMENTS)
#define BOOST_FUSION_INCLUDE_SEGMENTS
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/segments.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/sequence.hpp b/3party/boost/boost/fusion/include/sequence.hpp
index 09cded778e..ff36266b60 100644
--- a/3party/boost/boost/fusion/include/sequence.hpp
+++ b/3party/boost/boost/fusion/include/sequence.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_SEQUENCE)
#define FUSION_INCLUDE_SEQUENCE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/sequence_base.hpp b/3party/boost/boost/fusion/include/sequence_base.hpp
index 7e50a23704..fc68090e9a 100644
--- a/3party/boost/boost/fusion/include/sequence_base.hpp
+++ b/3party/boost/boost/fusion/include/sequence_base.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_SEQUENCE_BASE)
#define FUSION_INCLUDE_SEQUENCE_BASE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/sequence_facade.hpp b/3party/boost/boost/fusion/include/sequence_facade.hpp
index b8773e28af..ef989b4c71 100644
--- a/3party/boost/boost/fusion/include/sequence_facade.hpp
+++ b/3party/boost/boost/fusion/include/sequence_facade.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_SEQUENCE_FACADE)
#define FUSION_INCLUDE_SEQUENCE_FACADE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/sequence_facade.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/set.hpp b/3party/boost/boost/fusion/include/set.hpp
index 90dd5004be..370ae65587 100644
--- a/3party/boost/boost/fusion/include/set.hpp
+++ b/3party/boost/boost/fusion/include/set.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_SET)
#define FUSION_INCLUDE_SET
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/set_fwd.hpp b/3party/boost/boost/fusion/include/set_fwd.hpp
index 9bc45ad5cf..3c21cd67bd 100644
--- a/3party/boost/boost/fusion/include/set_fwd.hpp
+++ b/3party/boost/boost/fusion/include/set_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_SET_FWD)
#define FUSION_INCLUDE_SET_FWD
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/set_fwd.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/single_view.hpp b/3party/boost/boost/fusion/include/single_view.hpp
index a95d04a80d..306fac6c50 100644
--- a/3party/boost/boost/fusion/include/single_view.hpp
+++ b/3party/boost/boost/fusion/include/single_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_SINGLE_VIEW)
#define FUSION_INCLUDE_SINGLE_VIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/single_view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/size.hpp b/3party/boost/boost/fusion/include/size.hpp
index 02d2a00fcb..5131116da0 100644
--- a/3party/boost/boost/fusion/include/size.hpp
+++ b/3party/boost/boost/fusion/include/size.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_SIZE)
#define FUSION_INCLUDE_SIZE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/std_pair.hpp b/3party/boost/boost/fusion/include/std_pair.hpp
index 98f37c8672..7a882a97ad 100644
--- a/3party/boost/boost/fusion/include/std_pair.hpp
+++ b/3party/boost/boost/fusion/include/std_pair.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_STD_PAIR)
#define FUSION_INCLUDE_STD_PAIR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/std_pair.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/struct.hpp b/3party/boost/boost/fusion/include/struct.hpp
index f0886aab86..fc4366fdb1 100644
--- a/3party/boost/boost/fusion/include/struct.hpp
+++ b/3party/boost/boost/fusion/include/struct.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_STRUCT)
#define FUSION_INCLUDE_STRUCT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/support.hpp b/3party/boost/boost/fusion/include/support.hpp
index d57eafeb87..8762517f70 100644
--- a/3party/boost/boost/fusion/include/support.hpp
+++ b/3party/boost/boost/fusion/include/support.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_SUPPORT)
#define FUSION_INCLUDE_SUPPORT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/swap.hpp b/3party/boost/boost/fusion/include/swap.hpp
index 1f428aa175..c25d557f12 100644
--- a/3party/boost/boost/fusion/include/swap.hpp
+++ b/3party/boost/boost/fusion/include/swap.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_SWAP)
#define FUSION_INCLUDE_SWAP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/swap.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/tag_of.hpp b/3party/boost/boost/fusion/include/tag_of.hpp
index f15b41b54a..dc583eeb59 100644
--- a/3party/boost/boost/fusion/include/tag_of.hpp
+++ b/3party/boost/boost/fusion/include/tag_of.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_TAG_OF)
#define FUSION_INCLUDE_TAG_OF
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/tag_of_fwd.hpp b/3party/boost/boost/fusion/include/tag_of_fwd.hpp
index fbc7ebe752..287dc33893 100644
--- a/3party/boost/boost/fusion/include/tag_of_fwd.hpp
+++ b/3party/boost/boost/fusion/include/tag_of_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_TAG_OF_FWD)
#define FUSION_INCLUDE_TAG_OF_FWD
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/transform.hpp b/3party/boost/boost/fusion/include/transform.hpp
index 2b66c4f736..04fdc38477 100644
--- a/3party/boost/boost/fusion/include/transform.hpp
+++ b/3party/boost/boost/fusion/include/transform.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_TRANSFORM)
#define FUSION_INCLUDE_TRANSFORM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/transform_view.hpp b/3party/boost/boost/fusion/include/transform_view.hpp
index 3aceaaee9f..b07a797936 100644
--- a/3party/boost/boost/fusion/include/transform_view.hpp
+++ b/3party/boost/boost/fusion/include/transform_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_TRANSFORM_VIEW)
#define FUSION_INCLUDE_TRANSFORM_VIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/transform_view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/transformation.hpp b/3party/boost/boost/fusion/include/transformation.hpp
index f14ab70c75..195b3eb2e8 100644
--- a/3party/boost/boost/fusion/include/transformation.hpp
+++ b/3party/boost/boost/fusion/include/transformation.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_TRANSFORMATION)
#define FUSION_INCLUDE_TRANSFORMATION
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/tuple.hpp b/3party/boost/boost/fusion/include/tuple.hpp
index 52e53fb594..5d167f4f9d 100644
--- a/3party/boost/boost/fusion/include/tuple.hpp
+++ b/3party/boost/boost/fusion/include/tuple.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_TUPLE)
#define FUSION_INCLUDE_TUPLE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/tuple.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/tuple_fwd.hpp b/3party/boost/boost/fusion/include/tuple_fwd.hpp
index a66653a3b0..d95ce2be71 100644
--- a/3party/boost/boost/fusion/include/tuple_fwd.hpp
+++ b/3party/boost/boost/fusion/include/tuple_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_TUPLE_FWD)
#define FUSION_INCLUDE_TUPLE_FWD
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/tuple/tuple_fwd.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/tuple_tie.hpp b/3party/boost/boost/fusion/include/tuple_tie.hpp
index 677976a65f..c61451a0b8 100644
--- a/3party/boost/boost/fusion/include/tuple_tie.hpp
+++ b/3party/boost/boost/fusion/include/tuple_tie.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_TUPLE_TIE)
#define FUSION_INCLUDE_TUPLE_TIE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/tuple/tuple_tie.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/unfused.hpp b/3party/boost/boost/fusion/include/unfused.hpp
index e386ce5a7b..192d23b296 100644
--- a/3party/boost/boost/fusion/include/unfused.hpp
+++ b/3party/boost/boost/fusion/include/unfused.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_UNFUSED_HPP
#define BOOST_FUSION_INCLUDE_UNFUSED_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/unfused.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/unfused_typed.hpp b/3party/boost/boost/fusion/include/unfused_typed.hpp
index a118b306c2..c14c515355 100644
--- a/3party/boost/boost/fusion/include/unfused_typed.hpp
+++ b/3party/boost/boost/fusion/include/unfused_typed.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_UNFUSED_TYPED)
#define FUSION_INCLUDE_UNFUSED_TYPED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/functional/adapter/unfused_typed.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/unused.hpp b/3party/boost/boost/fusion/include/unused.hpp
index f91ea8fe69..6114f282cf 100644
--- a/3party/boost/boost/fusion/include/unused.hpp
+++ b/3party/boost/boost/fusion/include/unused.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_UNUSED)
#define FUSION_INCLUDE_UNUSED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/unused.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/value_at.hpp b/3party/boost/boost/fusion/include/value_at.hpp
index da5745d9b8..d40a9f08b0 100644
--- a/3party/boost/boost/fusion/include/value_at.hpp
+++ b/3party/boost/boost/fusion/include/value_at.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VALUE_AT)
#define FUSION_INCLUDE_VALUE_AT
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/value_at_key.hpp b/3party/boost/boost/fusion/include/value_at_key.hpp
index 4ab3dc1422..229210096a 100644
--- a/3party/boost/boost/fusion/include/value_at_key.hpp
+++ b/3party/boost/boost/fusion/include/value_at_key.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VALUE_AT_KEY)
#define FUSION_INCLUDE_VALUE_AT_KEY
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/value_at_key.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/value_of.hpp b/3party/boost/boost/fusion/include/value_of.hpp
index 4f2bef9599..33e49d8fd7 100644
--- a/3party/boost/boost/fusion/include/value_of.hpp
+++ b/3party/boost/boost/fusion/include/value_of.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VALUE_OF)
#define FUSION_INCLUDE_VALUE_OF
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/value_of_data.hpp b/3party/boost/boost/fusion/include/value_of_data.hpp
index 6884185fd0..afa9863f8a 100644
--- a/3party/boost/boost/fusion/include/value_of_data.hpp
+++ b/3party/boost/boost/fusion/include/value_of_data.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_INCLUDE_VALUE_OF_DATA_HPP
#define BOOST_FUSION_INCLUDE_VALUE_OF_DATA_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of_data.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/vector.hpp b/3party/boost/boost/fusion/include/vector.hpp
index 689c2f8827..83aa74446c 100644
--- a/3party/boost/boost/fusion/include/vector.hpp
+++ b/3party/boost/boost/fusion/include/vector.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VECTOR)
#define FUSION_INCLUDE_VECTOR
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/vector10.hpp b/3party/boost/boost/fusion/include/vector10.hpp
index d3e10ddc60..50e5f18259 100644
--- a/3party/boost/boost/fusion/include/vector10.hpp
+++ b/3party/boost/boost/fusion/include/vector10.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VECTOR10)
#define FUSION_INCLUDE_VECTOR10
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector10.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/vector20.hpp b/3party/boost/boost/fusion/include/vector20.hpp
index accda290d7..5d1f1fe629 100644
--- a/3party/boost/boost/fusion/include/vector20.hpp
+++ b/3party/boost/boost/fusion/include/vector20.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VECTOR20)
#define FUSION_INCLUDE_VECTOR20
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector20.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/vector30.hpp b/3party/boost/boost/fusion/include/vector30.hpp
index 72a72a25b6..243f2bb9a1 100644
--- a/3party/boost/boost/fusion/include/vector30.hpp
+++ b/3party/boost/boost/fusion/include/vector30.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VECTOR30)
#define FUSION_INCLUDE_VECTOR30
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector30.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/vector40.hpp b/3party/boost/boost/fusion/include/vector40.hpp
index 427c531918..8dd800a8cf 100644
--- a/3party/boost/boost/fusion/include/vector40.hpp
+++ b/3party/boost/boost/fusion/include/vector40.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VECTOR40)
#define FUSION_INCLUDE_VECTOR40
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector40.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/vector50.hpp b/3party/boost/boost/fusion/include/vector50.hpp
index 5980373b94..d3e8996889 100644
--- a/3party/boost/boost/fusion/include/vector50.hpp
+++ b/3party/boost/boost/fusion/include/vector50.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VECTOR50)
#define FUSION_INCLUDE_VECTOR50
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector50.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/vector_fwd.hpp b/3party/boost/boost/fusion/include/vector_fwd.hpp
index 578754fbc9..f9c71a6f74 100644
--- a/3party/boost/boost/fusion/include/vector_fwd.hpp
+++ b/3party/boost/boost/fusion/include/vector_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VECTOR_FWD)
#define FUSION_INCLUDE_VECTOR_FWD
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector_fwd.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/vector_tie.hpp b/3party/boost/boost/fusion/include/vector_tie.hpp
index 3a0431c1ed..390e3bfedc 100644
--- a/3party/boost/boost/fusion/include/vector_tie.hpp
+++ b/3party/boost/boost/fusion/include/vector_tie.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VECTOR_TIE)
#define FUSION_INCLUDE_VECTOR_TIE
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/generation/vector_tie.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/view.hpp b/3party/boost/boost/fusion/include/view.hpp
index 48405df849..66ffa74ea9 100644
--- a/3party/boost/boost/fusion/include/view.hpp
+++ b/3party/boost/boost/fusion/include/view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VIEW)
#define FUSION_INCLUDE_VIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/void.hpp b/3party/boost/boost/fusion/include/void.hpp
index b3e9cf2785..ee358fb137 100644
--- a/3party/boost/boost/fusion/include/void.hpp
+++ b/3party/boost/boost/fusion/include/void.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_VOID)
#define FUSION_INCLUDE_VOID
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/void.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/zip.hpp b/3party/boost/boost/fusion/include/zip.hpp
index 8a5656102e..87b04bc3f7 100644
--- a/3party/boost/boost/fusion/include/zip.hpp
+++ b/3party/boost/boost/fusion/include/zip.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ZIP)
#define FUSION_INCLUDE_ZIP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/transformation/zip.hpp>
#endif
diff --git a/3party/boost/boost/fusion/include/zip_view.hpp b/3party/boost/boost/fusion/include/zip_view.hpp
index 1aecfd4dc1..bf0e9cfb9a 100644
--- a/3party/boost/boost/fusion/include/zip_view.hpp
+++ b/3party/boost/boost/fusion/include/zip_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INCLUDE_ZIP_VIEW)
#define FUSION_INCLUDE_ZIP_VIEW
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/zip_view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/iterator.hpp b/3party/boost/boost/fusion/iterator.hpp
index f8d5958a75..8aa15a39d9 100644
--- a/3party/boost/boost/fusion/iterator.hpp
+++ b/3party/boost/boost/fusion/iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ITERATOR_10022005_0559)
#define FUSION_ITERATOR_10022005_0559
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/fusion/iterator/iterator_adapter.hpp>
#include <boost/fusion/iterator/segmented_iterator.hpp>
diff --git a/3party/boost/boost/fusion/iterator/advance.hpp b/3party/boost/boost/fusion/iterator/advance.hpp
index bfd8af4b64..69b464274b 100644
--- a/3party/boost/boost/fusion/iterator/advance.hpp
+++ b/3party/boost/boost/fusion/iterator/advance.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ADVANCE_09172005_1146)
#define FUSION_ADVANCE_09172005_1146
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/detail/advance.hpp>
#include <boost/fusion/support/category_of.hpp>
@@ -74,6 +75,7 @@ namespace boost { namespace fusion
}
template <int N, typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::advance_c<Iterator, N>::type const
advance_c(Iterator const& i)
{
@@ -81,6 +83,7 @@ namespace boost { namespace fusion
}
template<typename N, typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::advance<Iterator, N>::type const
advance(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/iterator/basic_iterator.hpp b/3party/boost/boost/fusion/iterator/basic_iterator.hpp
index 4327a8cef5..bab6a4a6a8 100644
--- a/3party/boost/boost/fusion/iterator/basic_iterator.hpp
+++ b/3party/boost/boost/fusion/iterator/basic_iterator.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ITERATOR_BASIC_ITERATOR_HPP
#define BOOST_FUSION_ITERATOR_BASIC_ITERATOR_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/mpl/and.hpp>
@@ -39,7 +40,7 @@ namespace boost { namespace fusion
template<typename Tag, typename Category, typename Seq, int Index>
struct basic_iterator
- : iterator_facade<basic_iterator<Tag,Category,Seq,Index>, Category>
+ : iterator_facade<basic_iterator<Tag, Category, Seq, Index>, Category>
{
typedef mpl::int_<Index> index;
typedef Seq seq_type;
@@ -76,6 +77,7 @@ namespace boost { namespace fusion
basic_iterator<Tag, Category, Seq, Index + N::value>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{
@@ -98,6 +100,7 @@ namespace boost { namespace fusion
{
typedef mpl::minus<typename It2::index, typename It1::index> type;
+ BOOST_FUSION_GPU_ENABLED
static
type
call(It1 const&, It2 const&)
@@ -118,15 +121,18 @@ namespace boost { namespace fusion
{};
template<typename OtherSeq>
+ BOOST_FUSION_GPU_ENABLED
basic_iterator(basic_iterator<Tag,Category,OtherSeq,Index> const& it)
: seq(it.seq)
{}
+ BOOST_FUSION_GPU_ENABLED
basic_iterator(Seq& in_seq, int)
: seq(&in_seq)
{}
template<typename OtherSeq>
+ BOOST_FUSION_GPU_ENABLED
basic_iterator&
operator=(basic_iterator<Tag,Category,OtherSeq,Index> const& it)
{
diff --git a/3party/boost/boost/fusion/iterator/deref.hpp b/3party/boost/boost/fusion/iterator/deref.hpp
index 5b01e65728..a608b0a0a1 100644
--- a/3party/boost/boost/fusion/iterator/deref.hpp
+++ b/3party/boost/boost/fusion/iterator/deref.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_DEREF_05042005_1019)
#define FUSION_DEREF_05042005_1019
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/support/tag_of.hpp>
@@ -54,6 +55,7 @@ namespace boost { namespace fusion
}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::deref<Iterator>::type
deref(Iterator const& i)
{
@@ -62,6 +64,7 @@ namespace boost { namespace fusion
}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::deref<Iterator>::type
operator*(iterator_base<Iterator> const& i)
{
diff --git a/3party/boost/boost/fusion/iterator/deref_data.hpp b/3party/boost/boost/fusion/iterator/deref_data.hpp
index 09ba439214..0dff0309c7 100644
--- a/3party/boost/boost/fusion/iterator/deref_data.hpp
+++ b/3party/boost/boost/fusion/iterator/deref_data.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ITERATOR_DEREF_DATA_HPP
#define BOOST_FUSION_ITERATOR_DEREF_DATA_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of.hpp>
namespace boost { namespace fusion
@@ -39,6 +40,7 @@ namespace boost { namespace fusion
}
template <typename It>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::deref_data<It>::type
deref_data(It const& it)
{
diff --git a/3party/boost/boost/fusion/iterator/detail/adapt_deref_traits.hpp b/3party/boost/boost/fusion/iterator/detail/adapt_deref_traits.hpp
index 197dfc10bf..ef6005569b 100644
--- a/3party/boost/boost/fusion/iterator/detail/adapt_deref_traits.hpp
+++ b/3party/boost/boost/fusion/iterator/detail/adapt_deref_traits.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ADAPT_DEREF_TRAITS_05062005_0900)
#define FUSION_ADAPT_DEREF_TRAITS_05062005_0900
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref.hpp>
namespace boost { namespace fusion { namespace detail
@@ -20,6 +21,7 @@ namespace boost { namespace fusion { namespace detail
result_of::deref<typename Iterator::first_type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/iterator/detail/adapt_value_traits.hpp b/3party/boost/boost/fusion/iterator/detail/adapt_value_traits.hpp
index 6649ade145..e27a2f90fd 100644
--- a/3party/boost/boost/fusion/iterator/detail/adapt_value_traits.hpp
+++ b/3party/boost/boost/fusion/iterator/detail/adapt_value_traits.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ADAPT_VALUE_TRAITS_05062005_0859)
#define FUSION_ADAPT_VALUE_TRAITS_05062005_0859
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of.hpp>
namespace boost { namespace fusion { namespace detail
diff --git a/3party/boost/boost/fusion/iterator/detail/advance.hpp b/3party/boost/boost/fusion/iterator/detail/advance.hpp
index 56dfab9c94..ace4ed4989 100644
--- a/3party/boost/boost/fusion/iterator/detail/advance.hpp
+++ b/3party/boost/boost/fusion/iterator/detail/advance.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ADVANCE_09172005_1149)
#define FUSION_ADVANCE_09172005_1149
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -44,6 +45,7 @@ namespace boost { namespace fusion { namespace advance_detail
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type const&
call(type const& i)
{
@@ -51,6 +53,7 @@ namespace boost { namespace fusion { namespace advance_detail
}
template <typename I>
+ BOOST_FUSION_GPU_ENABLED
static type
call(I const& i)
{
@@ -83,6 +86,7 @@ namespace boost { namespace fusion { namespace advance_detail
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type const&
call(type const& i)
{
@@ -90,6 +94,7 @@ namespace boost { namespace fusion { namespace advance_detail
}
template <typename I>
+ BOOST_FUSION_GPU_ENABLED
static type
call(I const& i)
{
diff --git a/3party/boost/boost/fusion/iterator/detail/distance.hpp b/3party/boost/boost/fusion/iterator/detail/distance.hpp
index 3994cb3064..c037995210 100644
--- a/3party/boost/boost/fusion/iterator/detail/distance.hpp
+++ b/3party/boost/boost/fusion/iterator/detail/distance.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_DISTANCE_09172005_0730)
#define FUSION_DISTANCE_09172005_0730
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -52,6 +53,7 @@ namespace boost { namespace fusion { namespace distance_detail
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(First const&, Last const&)
{
diff --git a/3party/boost/boost/fusion/iterator/detail/segment_sequence.hpp b/3party/boost/boost/fusion/iterator/detail/segment_sequence.hpp
index c372a83630..90db25ea7d 100644
--- a/3party/boost/boost/fusion/iterator/detail/segment_sequence.hpp
+++ b/3party/boost/boost/fusion/iterator/detail/segment_sequence.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_SEQUENCE_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_SEQUENCE_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/fusion/support/tag_of.hpp>
@@ -29,7 +30,7 @@ namespace boost { namespace fusion { namespace detail
typedef Sequence sequence_type;
sequence_type sequence;
- explicit segment_sequence(Sequence const & seq)
+ BOOST_FUSION_GPU_ENABLED explicit segment_sequence(Sequence const & seq)
: sequence(seq)
{}
};
@@ -60,6 +61,7 @@ namespace extension
{
typedef typename Sequence::sequence_type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence & seq)
{
return seq.sequence;
diff --git a/3party/boost/boost/fusion/iterator/detail/segmented_equal_to.hpp b/3party/boost/boost/fusion/iterator/detail/segmented_equal_to.hpp
index 1e4ad268ae..77a080f2b2 100644
--- a/3party/boost/boost/fusion/iterator/detail/segmented_equal_to.hpp
+++ b/3party/boost/boost/fusion/iterator/detail/segmented_equal_to.hpp
@@ -7,13 +7,14 @@
#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_EQUAL_TO_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_ITERATOR_EQUAL_TO_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
namespace detail
{
@@ -32,7 +33,7 @@ namespace boost { namespace fusion
{};
template <>
- struct segmented_equal_to<fusion::nil, fusion::nil>
+ struct segmented_equal_to<fusion::nil_, fusion::nil_>
: mpl::true_
{};
}
diff --git a/3party/boost/boost/fusion/iterator/detail/segmented_iterator.hpp b/3party/boost/boost/fusion/iterator/detail/segmented_iterator.hpp
index ccd45fbf9f..1d4f62d3a7 100644
--- a/3party/boost/boost/fusion/iterator/detail/segmented_iterator.hpp
+++ b/3party/boost/boost/fusion/iterator/detail/segmented_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_SEGMENTED_ITERATOR_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_ITERATOR_SEGMENTED_ITERATOR_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
@@ -19,7 +20,7 @@
namespace boost { namespace fusion
{
- struct nil;
+ struct nil_;
namespace detail
{
@@ -34,7 +35,7 @@ namespace boost { namespace fusion
struct segmented_iterator
: iterator_facade<segmented_iterator<Context>, forward_traversal_tag>
{
- explicit segmented_iterator(Context const& ctx)
+ BOOST_FUSION_GPU_ENABLED explicit segmented_iterator(Context const& ctx)
: context(ctx)
{}
@@ -51,6 +52,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(It const& it)
{
return *it.context.car.first;
@@ -70,6 +72,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(It const& it)
{
return fusion::deref_data(it.context.car.first);
@@ -129,6 +132,7 @@ namespace boost { namespace fusion
typedef detail::segmented_next_impl<typename It::context_type> impl;
typedef segmented_iterator<typename impl::type> type;
+ BOOST_FUSION_GPU_ENABLED
static type call(It const& it)
{
return type(impl::call(it.context));
diff --git a/3party/boost/boost/fusion/iterator/detail/segmented_next_impl.hpp b/3party/boost/boost/fusion/iterator/detail/segmented_next_impl.hpp
index 2a7f6f6c86..a2b75d710a 100644
--- a/3party/boost/boost/fusion/iterator/detail/segmented_next_impl.hpp
+++ b/3party/boost/boost/fusion/iterator/detail/segmented_next_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_NEXT_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_ITERATOR_NEXT_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
@@ -64,6 +65,7 @@ namespace boost { namespace fusion
cons<car_type, typename Stack::cdr_type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const & stack)
{
return type(
@@ -83,7 +85,7 @@ namespace boost { namespace fusion
//auto segmented_next_impl_recurse3(stack)
//{
// if (size(stack) == 1)
- // return cons(iterator_range(end(car(stack)), end(car(stack))), nil);
+ // return cons(iterator_range(end(car(stack)), end(car(stack))), nil_);
// else
// return segmented_next_impl_recurse(stack.cdr);
//}
@@ -96,6 +98,7 @@ namespace boost { namespace fusion
typedef segmented_next_impl_recurse<typename Stack::cdr_type> impl;
typedef typename impl::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const & stack)
{
return impl::call(stack.cdr);
@@ -109,6 +112,7 @@ namespace boost { namespace fusion
typedef iterator_range<end_type, end_type> range_type;
typedef cons<range_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const & stack)
{
return type(range_type(stack.car.last, stack.car.last));
@@ -143,6 +147,7 @@ namespace boost { namespace fusion
typedef segmented_next_impl_recurse3<Stack> impl;
typedef typename impl::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const & stack)
{
return impl::call(stack);
@@ -154,6 +159,7 @@ namespace boost { namespace fusion
{
typedef Result type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const & stack)
{
return segmented_begin_impl<Sequence, Stack>::call(*stack.car.first, stack);
@@ -179,6 +185,7 @@ namespace boost { namespace fusion
typename segmented_next_impl_recurse<typename Stack::cdr_type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const& stack)
{
return segmented_next_impl_recurse<typename Stack::cdr_type>::call(stack.cdr);
@@ -190,6 +197,7 @@ namespace boost { namespace fusion
{
typedef Next type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const & stack)
{
return pop_front_car<Stack>::call(stack);
@@ -202,6 +210,7 @@ namespace boost { namespace fusion
typedef segmented_next_impl_recurse2<Next> impl;
typedef typename impl::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const & stack)
{
return impl::call(pop_front_car<Stack>::call(stack));
@@ -227,6 +236,7 @@ namespace boost { namespace fusion
typedef segmented_next_impl_recurse<typename Stack::cdr_type> impl;
typedef typename impl::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const & stack)
{
return impl::call(stack.cdr);
@@ -238,6 +248,7 @@ namespace boost { namespace fusion
{
typedef Next type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const & stack)
{
return pop_front_car<Stack>::call(stack);
diff --git a/3party/boost/boost/fusion/iterator/distance.hpp b/3party/boost/boost/fusion/iterator/distance.hpp
index 74d2d3ef2f..afca6a363e 100644
--- a/3party/boost/boost/fusion/iterator/distance.hpp
+++ b/3party/boost/boost/fusion/iterator/distance.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_DISTANCE_09172005_0721)
#define FUSION_DISTANCE_09172005_0721
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/detail/distance.hpp>
#include <boost/fusion/support/category_of.hpp>
@@ -68,6 +69,7 @@ namespace boost { namespace fusion
}
template <typename First, typename Last>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::distance<First, Last>::type
distance(First const& a, Last const& b)
{
diff --git a/3party/boost/boost/fusion/iterator/equal_to.hpp b/3party/boost/boost/fusion/iterator/equal_to.hpp
index 334783770e..1927ce7e96 100644
--- a/3party/boost/boost/fusion/iterator/equal_to.hpp
+++ b/3party/boost/boost/fusion/iterator/equal_to.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_EQUAL_TO_05052005_1208)
#define FUSION_EQUAL_TO_05052005_1208
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/type_traits/add_const.hpp>
@@ -73,6 +74,7 @@ namespace boost { namespace fusion
namespace iterator_operators
{
template <typename Iter1, typename Iter2>
+ BOOST_FUSION_GPU_ENABLED
inline typename
boost::enable_if<
mpl::and_<is_fusion_iterator<Iter1>, is_fusion_iterator<Iter2> >
@@ -84,6 +86,7 @@ namespace boost { namespace fusion
}
template <typename Iter1, typename Iter2>
+ BOOST_FUSION_GPU_ENABLED
inline typename
boost::enable_if<
mpl::and_<is_fusion_iterator<Iter1>, is_fusion_iterator<Iter2> >
diff --git a/3party/boost/boost/fusion/iterator/iterator_adapter.hpp b/3party/boost/boost/fusion/iterator/iterator_adapter.hpp
index 9077f8fa00..af6978b20e 100644
--- a/3party/boost/boost/fusion/iterator/iterator_adapter.hpp
+++ b/3party/boost/boost/fusion/iterator/iterator_adapter.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ITERATOR_ADAPTER_08112011_0942)
#define FUSION_ITERATOR_ADAPTER_08112011_0942
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/detail/advance.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/type_traits/remove_const.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion
iterator_base_type;
iterator_base_type iterator_base;
+ BOOST_FUSION_GPU_ENABLED
iterator_adapter(iterator_base_type const& iterator_base_)
: iterator_base(iterator_base_) {}
@@ -45,6 +47,7 @@ namespace boost { namespace fusion
>::type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& it)
{
@@ -79,6 +82,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& it)
{
@@ -96,6 +100,7 @@ namespace boost { namespace fusion
>::type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -113,6 +118,7 @@ namespace boost { namespace fusion
>::type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/iterator/iterator_facade.hpp b/3party/boost/boost/fusion/iterator/iterator_facade.hpp
index abd6607d67..415e841c00 100644
--- a/3party/boost/boost/fusion/iterator/iterator_facade.hpp
+++ b/3party/boost/boost/fusion/iterator/iterator_facade.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ITERATOR_FACADE_09252006_1011)
#define FUSION_ITERATOR_FACADE_09252006_1011
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/iterator/detail/advance.hpp>
#include <boost/fusion/iterator/detail/distance.hpp>
diff --git a/3party/boost/boost/fusion/iterator/key_of.hpp b/3party/boost/boost/fusion/iterator/key_of.hpp
index 64c2f86aa7..3459ab58e5 100644
--- a/3party/boost/boost/fusion/iterator/key_of.hpp
+++ b/3party/boost/boost/fusion/iterator/key_of.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ITERATOR_KEY_OF_HPP
#define BOOST_FUSION_ITERATOR_KEY_OF_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/iterator/mpl.hpp b/3party/boost/boost/fusion/iterator/mpl.hpp
index a5274a49f6..fdaf749c08 100644
--- a/3party/boost/boost/fusion/iterator/mpl.hpp
+++ b/3party/boost/boost/fusion/iterator/mpl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ITERATOR_MPL_10022005_0557)
#define FUSION_ITERATOR_MPL_10022005_0557
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
#include <boost/fusion/iterator/mpl/fusion_iterator.hpp>
diff --git a/3party/boost/boost/fusion/iterator/mpl/convert_iterator.hpp b/3party/boost/boost/fusion/iterator/mpl/convert_iterator.hpp
index dd52d4c587..54c9ef690f 100644
--- a/3party/boost/boost/fusion/iterator/mpl/convert_iterator.hpp
+++ b/3party/boost/boost/fusion/iterator/mpl/convert_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_CONVERT_ITERATOR_05062005_1218)
#define FUSION_CONVERT_ITERATOR_05062005_1218
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/is_iterator.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/bool.hpp>
@@ -30,18 +31,21 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static T const&
call(T const& x, mpl::true_)
{
return x;
}
+ BOOST_FUSION_GPU_ENABLED
static mpl_iterator<T>
call(T const& /*x*/, mpl::false_)
{
return mpl_iterator<T>();
}
+ BOOST_FUSION_GPU_ENABLED
static typename
mpl::if_<
is_fusion_iterator<T>
diff --git a/3party/boost/boost/fusion/iterator/mpl/fusion_iterator.hpp b/3party/boost/boost/fusion/iterator/mpl/fusion_iterator.hpp
index 82889e0806..f8feacf671 100644
--- a/3party/boost/boost/fusion/iterator/mpl/fusion_iterator.hpp
+++ b/3party/boost/boost/fusion/iterator/mpl/fusion_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_FUSION_ITERATOR_10012005_1551)
#define FUSION_FUSION_ITERATOR_10012005_1551
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/prior.hpp>
diff --git a/3party/boost/boost/fusion/iterator/next.hpp b/3party/boost/boost/fusion/iterator/next.hpp
index 5cc9c80771..bd76eac152 100644
--- a/3party/boost/boost/fusion/iterator/next.hpp
+++ b/3party/boost/boost/fusion/iterator/next.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_NEXT_05042005_1101)
#define FUSION_NEXT_05042005_1101
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of.hpp>
namespace boost { namespace fusion
@@ -53,6 +54,7 @@ namespace boost { namespace fusion
}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::next<Iterator>::type const
next(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/iterator/prior.hpp b/3party/boost/boost/fusion/iterator/prior.hpp
index 818851b1b7..78d8390b3c 100644
--- a/3party/boost/boost/fusion/iterator/prior.hpp
+++ b/3party/boost/boost/fusion/iterator/prior.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_PRIOR_05042005_1144)
#define FUSION_PRIOR_05042005_1144
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of.hpp>
namespace boost { namespace fusion
@@ -53,6 +54,7 @@ namespace boost { namespace fusion
}
template <typename Iterator>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::prior<Iterator>::type const
prior(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/iterator/segmented_iterator.hpp b/3party/boost/boost/fusion/iterator/segmented_iterator.hpp
index 21095e78c3..b9aac07c6c 100644
--- a/3party/boost/boost/fusion/iterator/segmented_iterator.hpp
+++ b/3party/boost/boost/fusion/iterator/segmented_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_ITERATOR_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/detail/segmented_iterator.hpp>
#include <boost/fusion/iterator/detail/segmented_next_impl.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
diff --git a/3party/boost/boost/fusion/iterator/value_of.hpp b/3party/boost/boost/fusion/iterator/value_of.hpp
index fe0cd56811..1408dc7a55 100644
--- a/3party/boost/boost/fusion/iterator/value_of.hpp
+++ b/3party/boost/boost/fusion/iterator/value_of.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VALUE_OF_05052005_1126)
#define FUSION_VALUE_OF_05052005_1126
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/support/tag_of.hpp>
diff --git a/3party/boost/boost/fusion/iterator/value_of_data.hpp b/3party/boost/boost/fusion/iterator/value_of_data.hpp
index 4a8316deb7..341fe882a9 100644
--- a/3party/boost/boost/fusion/iterator/value_of_data.hpp
+++ b/3party/boost/boost/fusion/iterator/value_of_data.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ITERATOR_VALUE_OF_DATA_HPP
#define BOOST_FUSION_ITERATOR_VALUE_OF_DATA_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/mpl/at.hpp b/3party/boost/boost/fusion/mpl/at.hpp
index 27e95edb5d..ec4b257d7c 100644
--- a/3party/boost/boost/fusion/mpl/at.hpp
+++ b/3party/boost/boost/fusion/mpl/at.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_AT_10022005_1616)
#define FUSION_AT_10022005_1616
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
diff --git a/3party/boost/boost/fusion/mpl/back.hpp b/3party/boost/boost/fusion/mpl/back.hpp
index a516fa738e..631b4ea653 100644
--- a/3party/boost/boost/fusion/mpl/back.hpp
+++ b/3party/boost/boost/fusion/mpl/back.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_BACK_10022005_1620)
#define FUSION_BACK_10022005_1620
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/back.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/iterator/prior.hpp>
diff --git a/3party/boost/boost/fusion/mpl/begin.hpp b/3party/boost/boost/fusion/mpl/begin.hpp
index c9f92f85e5..f97e82ceb1 100644
--- a/3party/boost/boost/fusion/mpl/begin.hpp
+++ b/3party/boost/boost/fusion/mpl/begin.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_BEGIN_10022005_1620)
#define FUSION_BEGIN_10022005_1620
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/adapted/mpl/detail/begin_impl.hpp>
diff --git a/3party/boost/boost/fusion/mpl/clear.hpp b/3party/boost/boost/fusion/mpl/clear.hpp
index 28d0e5b1dc..745ca0f9c0 100644
--- a/3party/boost/boost/fusion/mpl/clear.hpp
+++ b/3party/boost/boost/fusion/mpl/clear.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_CLEAR_10022005_1817)
#define FUSION_CLEAR_10022005_1817
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/clear.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/mpl/detail/clear.hpp>
diff --git a/3party/boost/boost/fusion/mpl/detail/clear.hpp b/3party/boost/boost/fusion/mpl/detail/clear.hpp
index e6e83f610b..9e640daad6 100644
--- a/3party/boost/boost/fusion/mpl/detail/clear.hpp
+++ b/3party/boost/boost/fusion/mpl/detail/clear.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_CLEAR_10022005_1442)
#define FUSION_CLEAR_10022005_1442
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/vector_fwd.hpp>
#include <boost/fusion/container/list/list_fwd.hpp>
#include <boost/fusion/container/map/map_fwd.hpp>
diff --git a/3party/boost/boost/fusion/mpl/empty.hpp b/3party/boost/boost/fusion/mpl/empty.hpp
index 56d0924348..b058ae9503 100644
--- a/3party/boost/boost/fusion/mpl/empty.hpp
+++ b/3party/boost/boost/fusion/mpl/empty.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_EMPTY_10022005_1619)
#define FUSION_EMPTY_10022005_1619
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/empty.hpp>
#include <boost/fusion/sequence/intrinsic/empty.hpp>
diff --git a/3party/boost/boost/fusion/mpl/end.hpp b/3party/boost/boost/fusion/mpl/end.hpp
index 3de5e18881..e5aa8b96c4 100644
--- a/3party/boost/boost/fusion/mpl/end.hpp
+++ b/3party/boost/boost/fusion/mpl/end.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_END_10022005_1619)
#define FUSION_END_10022005_1619
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/adapted/mpl/detail/end_impl.hpp>
diff --git a/3party/boost/boost/fusion/mpl/erase.hpp b/3party/boost/boost/fusion/mpl/erase.hpp
index 7566866a98..82d4260fba 100644
--- a/3party/boost/boost/fusion/mpl/erase.hpp
+++ b/3party/boost/boost/fusion/mpl/erase.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ERASE_10022005_1835)
#define FUSION_ERASE_10022005_1835
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/erase.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/algorithm/transformation/erase.hpp>
diff --git a/3party/boost/boost/fusion/mpl/erase_key.hpp b/3party/boost/boost/fusion/mpl/erase_key.hpp
index 9d1df693a9..4dabf04255 100644
--- a/3party/boost/boost/fusion/mpl/erase_key.hpp
+++ b/3party/boost/boost/fusion/mpl/erase_key.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ERASE_KEY_10022005_1907)
#define FUSION_ERASE_KEY_10022005_1907
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/erase_key.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/algorithm/transformation/erase_key.hpp>
diff --git a/3party/boost/boost/fusion/mpl/front.hpp b/3party/boost/boost/fusion/mpl/front.hpp
index 43bbd42f28..45672a6dcb 100644
--- a/3party/boost/boost/fusion/mpl/front.hpp
+++ b/3party/boost/boost/fusion/mpl/front.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_FRONT_10022005_1618)
#define FUSION_FRONT_10022005_1618
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/front.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/iterator/value_of.hpp>
diff --git a/3party/boost/boost/fusion/mpl/has_key.hpp b/3party/boost/boost/fusion/mpl/has_key.hpp
index 6ab5ea157f..f1e3359f50 100644
--- a/3party/boost/boost/fusion/mpl/has_key.hpp
+++ b/3party/boost/boost/fusion/mpl/has_key.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_HAS_KEY_10022005_1617)
#define FUSION_HAS_KEY_10022005_1617
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/has_key.hpp>
#include <boost/fusion/sequence/intrinsic/has_key.hpp>
diff --git a/3party/boost/boost/fusion/mpl/insert.hpp b/3party/boost/boost/fusion/mpl/insert.hpp
index d59e54b942..45b5d87d78 100644
--- a/3party/boost/boost/fusion/mpl/insert.hpp
+++ b/3party/boost/boost/fusion/mpl/insert.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INSERT_10022005_1837)
#define FUSION_INSERT_10022005_1837
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/insert.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/algorithm/transformation/insert.hpp>
diff --git a/3party/boost/boost/fusion/mpl/insert_range.hpp b/3party/boost/boost/fusion/mpl/insert_range.hpp
index e8b5b8e6f7..31389ffc44 100644
--- a/3party/boost/boost/fusion/mpl/insert_range.hpp
+++ b/3party/boost/boost/fusion/mpl/insert_range.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_INSERT_RANGE_10022005_1838)
#define FUSION_INSERT_RANGE_10022005_1838
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/insert_range.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/algorithm/transformation/insert_range.hpp>
diff --git a/3party/boost/boost/fusion/mpl/pop_back.hpp b/3party/boost/boost/fusion/mpl/pop_back.hpp
index 505daea01d..d91ca8aac4 100644
--- a/3party/boost/boost/fusion/mpl/pop_back.hpp
+++ b/3party/boost/boost/fusion/mpl/pop_back.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_POP_BACK_10022005_1801)
#define FUSION_POP_BACK_10022005_1801
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/pop_back.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/algorithm/transformation/pop_back.hpp>
diff --git a/3party/boost/boost/fusion/mpl/pop_front.hpp b/3party/boost/boost/fusion/mpl/pop_front.hpp
index d51cf705ad..5f6533bc32 100644
--- a/3party/boost/boost/fusion/mpl/pop_front.hpp
+++ b/3party/boost/boost/fusion/mpl/pop_front.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_POP_FRONT_10022005_1800)
#define FUSION_POP_FRONT_10022005_1800
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/pop_front.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/algorithm/transformation/pop_front.hpp>
diff --git a/3party/boost/boost/fusion/mpl/push_back.hpp b/3party/boost/boost/fusion/mpl/push_back.hpp
index a2348c55b3..8af5456ba6 100644
--- a/3party/boost/boost/fusion/mpl/push_back.hpp
+++ b/3party/boost/boost/fusion/mpl/push_back.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_PUSH_BACK_10022005_1647)
#define FUSION_PUSH_BACK_10022005_1647
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/push_back.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/algorithm/transformation/push_back.hpp>
diff --git a/3party/boost/boost/fusion/mpl/push_front.hpp b/3party/boost/boost/fusion/mpl/push_front.hpp
index 5bcf9bbd0b..5978fd6e21 100644
--- a/3party/boost/boost/fusion/mpl/push_front.hpp
+++ b/3party/boost/boost/fusion/mpl/push_front.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_PUSH_FRONT_10022005_1720)
#define FUSION_PUSH_FRONT_10022005_1720
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/push_front.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/algorithm/transformation/push_front.hpp>
diff --git a/3party/boost/boost/fusion/mpl/size.hpp b/3party/boost/boost/fusion/mpl/size.hpp
index 1e7f351011..c77e55fbd5 100644
--- a/3party/boost/boost/fusion/mpl/size.hpp
+++ b/3party/boost/boost/fusion/mpl/size.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SIZE_10022005_1617)
#define FUSION_SIZE_10022005_1617
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/size.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
diff --git a/3party/boost/boost/fusion/sequence.hpp b/3party/boost/boost/fusion/sequence.hpp
index 11c95a64ba..4d5d8a2b11 100644
--- a/3party/boost/boost/fusion/sequence.hpp
+++ b/3party/boost/boost/fusion/sequence.hpp
@@ -5,8 +5,9 @@
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(FUSION_SEQUENCE_10022005_0559)
-#define FUSION_ITERATOR_10022005_0559
+#define FUSION_SEQUENCE_10022005_0559
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/sequence_facade.hpp>
#include <boost/fusion/sequence/comparison.hpp>
#include <boost/fusion/sequence/intrinsic.hpp>
diff --git a/3party/boost/boost/fusion/sequence/comparison.hpp b/3party/boost/boost/fusion/sequence/comparison.hpp
index 52fd1384c8..d319f9e07f 100644
--- a/3party/boost/boost/fusion/sequence/comparison.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_COMPARISON_10022005_0615)
#define FUSION_SEQUENCE_COMPARISON_10022005_0615
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/comparison/equal_to.hpp>
#include <boost/fusion/sequence/comparison/greater.hpp>
#include <boost/fusion/sequence/comparison/greater_equal.hpp>
diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/equal_to.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/equal_to.hpp
index 56cfe1b247..577023db6a 100644
--- a/3party/boost/boost/fusion/sequence/comparison/detail/equal_to.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/detail/equal_to.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_EQUAL_TO_05052005_1142)
#define FUSION_EQUAL_TO_05052005_1142
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/next.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename result_of::end<Seq2>::type end2_type;
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const&, I2 const&, mpl::true_)
{
@@ -30,6 +32,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b, mpl::false_)
{
@@ -38,6 +41,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b)
{
@@ -50,6 +54,7 @@ namespace boost { namespace fusion { namespace detail
struct sequence_equal_to<Seq1, Seq2, false>
{
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& /*a*/, I2 const& /*b*/)
{
diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/greater.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/greater.hpp
index e61287765f..d875f16b2b 100644
--- a/3party/boost/boost/fusion/sequence/comparison/detail/greater.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/detail/greater.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_GREATER_05052005_1142)
#define FUSION_GREATER_05052005_1142
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/next.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename result_of::end<Seq2>::type end2_type;
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const&, I2 const&, mpl::true_)
{
@@ -30,6 +32,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b, mpl::false_)
{
@@ -39,6 +42,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b)
{
diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/greater_equal.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/greater_equal.hpp
index 6d91e27bbd..e0aa530e18 100644
--- a/3party/boost/boost/fusion/sequence/comparison/detail/greater_equal.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/detail/greater_equal.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_GREATER_EQUAL_05052005_1142)
#define FUSION_GREATER_EQUAL_05052005_1142
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/next.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename result_of::end<Seq2>::type end2_type;
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const&, I2 const&, mpl::true_)
{
@@ -30,6 +32,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b, mpl::false_)
{
@@ -39,6 +42,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b)
{
diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/less.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/less.hpp
index 1342bb1427..8964ca7d13 100644
--- a/3party/boost/boost/fusion/sequence/comparison/detail/less.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/detail/less.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_LESS_05052005_1141)
#define FUSION_LESS_05052005_1141
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/next.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename result_of::end<Seq2>::type end2_type;
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const&, I2 const&, mpl::true_)
{
@@ -30,6 +32,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b, mpl::false_)
{
@@ -39,6 +42,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b)
{
diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/less_equal.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/less_equal.hpp
index 5683849a2c..10bcb76791 100644
--- a/3party/boost/boost/fusion/sequence/comparison/detail/less_equal.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/detail/less_equal.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_LESS_EQUAL_05052005_1141)
#define FUSION_LESS_EQUAL_05052005_1141
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/next.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename result_of::end<Seq2>::type end2_type;
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const&, I2 const&, mpl::true_)
{
@@ -30,6 +32,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b, mpl::false_)
{
@@ -39,6 +42,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b)
{
diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/not_equal_to.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/not_equal_to.hpp
index 77c235089f..b230ac1fba 100644
--- a/3party/boost/boost/fusion/sequence/comparison/detail/not_equal_to.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/detail/not_equal_to.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_NOT_EQUAL_TO_05052005_1141)
#define FUSION_NOT_EQUAL_TO_05052005_1141
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/next.hpp>
@@ -23,6 +24,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename result_of::end<Seq2>::type end2_type;
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const&, I2 const&, mpl::true_)
{
@@ -30,6 +32,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b, mpl::false_)
{
@@ -38,6 +41,7 @@ namespace boost { namespace fusion { namespace detail
}
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b)
{
@@ -50,6 +54,7 @@ namespace boost { namespace fusion { namespace detail
struct sequence_not_equal_to<Seq1, Seq2, false>
{
template <typename I1, typename I2>
+ BOOST_FUSION_GPU_ENABLED
static bool
call(I1 const& a, I2 const& b)
{
diff --git a/3party/boost/boost/fusion/sequence/comparison/enable_comparison.hpp b/3party/boost/boost/fusion/sequence/comparison/enable_comparison.hpp
index bd55ac302e..1279417714 100644
--- a/3party/boost/boost/fusion/sequence/comparison/enable_comparison.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/enable_comparison.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ENABLE_COMPARISON_09232005_1958)
#define FUSION_ENABLE_COMPARISON_09232005_1958
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/or.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/not.hpp>
diff --git a/3party/boost/boost/fusion/sequence/comparison/equal_to.hpp b/3party/boost/boost/fusion/sequence/comparison/equal_to.hpp
index 9c4e043558..485df0bac2 100644
--- a/3party/boost/boost/fusion/sequence/comparison/equal_to.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/equal_to.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_EQUAL_TO_05052005_0431)
#define FUSION_EQUAL_TO_05052005_0431
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -23,6 +24,7 @@
namespace boost { namespace fusion
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline bool
equal_to(Seq1 const& a, Seq2 const& b)
{
@@ -36,6 +38,7 @@ namespace boost { namespace fusion
namespace operators
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline typename
boost::enable_if<
traits::enable_equality<Seq1, Seq2>
diff --git a/3party/boost/boost/fusion/sequence/comparison/greater.hpp b/3party/boost/boost/fusion/sequence/comparison/greater.hpp
index 077138d80d..5ad7ef74b9 100644
--- a/3party/boost/boost/fusion/sequence/comparison/greater.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/greater.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_GREATER_05052005_0432)
#define FUSION_GREATER_05052005_0432
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -22,6 +23,7 @@
namespace boost { namespace fusion
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline bool
greater(Seq1 const& a, Seq2 const& b)
{
@@ -36,6 +38,7 @@ namespace boost { namespace fusion
namespace operators
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline typename
boost::enable_if<
traits::enable_comparison<Seq1, Seq2>
diff --git a/3party/boost/boost/fusion/sequence/comparison/greater_equal.hpp b/3party/boost/boost/fusion/sequence/comparison/greater_equal.hpp
index 90175bc7d2..65904f8339 100644
--- a/3party/boost/boost/fusion/sequence/comparison/greater_equal.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/greater_equal.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_GREATER_EQUAL_05052005_0432)
#define FUSION_GREATER_EQUAL_05052005_0432
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -22,6 +23,7 @@
namespace boost { namespace fusion
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline bool
greater_equal(Seq1 const& a, Seq2 const& b)
{
@@ -36,6 +38,7 @@ namespace boost { namespace fusion
namespace operators
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline typename
boost::enable_if<
traits::enable_comparison<Seq1, Seq2>
diff --git a/3party/boost/boost/fusion/sequence/comparison/less.hpp b/3party/boost/boost/fusion/sequence/comparison/less.hpp
index 944cdcf69e..28762b7394 100644
--- a/3party/boost/boost/fusion/sequence/comparison/less.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/less.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_LESS_05052005_0432)
#define FUSION_LESS_05052005_0432
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -17,6 +18,7 @@
namespace boost { namespace fusion
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline bool
less(Seq1 const& a, Seq2 const& b)
{
@@ -27,6 +29,7 @@ namespace boost { namespace fusion
namespace operators
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline typename
boost::enable_if<
traits::enable_comparison<Seq1, Seq2>
diff --git a/3party/boost/boost/fusion/sequence/comparison/less_equal.hpp b/3party/boost/boost/fusion/sequence/comparison/less_equal.hpp
index 0e5d23a5eb..d0668208f0 100644
--- a/3party/boost/boost/fusion/sequence/comparison/less_equal.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/less_equal.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_LESS_EQUAL_05052005_0432)
#define FUSION_LESS_EQUAL_05052005_0432
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -23,6 +24,7 @@
namespace boost { namespace fusion
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline bool
less_equal(Seq1 const& a, Seq2 const& b)
{
@@ -39,6 +41,7 @@ namespace boost { namespace fusion
#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1400)
// Workaround for VC8.0 and VC7.1
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline bool
operator<=(sequence_base<Seq1> const& a, sequence_base<Seq2> const& b)
{
@@ -46,6 +49,7 @@ namespace boost { namespace fusion
}
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline typename disable_if<traits::is_native_fusion_sequence<Seq2>, bool>::type
operator<=(sequence_base<Seq1> const& a, Seq2 const& b)
{
@@ -53,6 +57,7 @@ namespace boost { namespace fusion
}
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline typename disable_if<traits::is_native_fusion_sequence<Seq1>, bool>::type
operator<=(Seq1 const& a, sequence_base<Seq2> const& b)
{
@@ -64,6 +69,7 @@ namespace boost { namespace fusion
// but barfs somewhere else.
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline typename
boost::enable_if<
traits::enable_comparison<Seq1, Seq2>
diff --git a/3party/boost/boost/fusion/sequence/comparison/not_equal_to.hpp b/3party/boost/boost/fusion/sequence/comparison/not_equal_to.hpp
index 14ef25df7f..4cd94f9e53 100644
--- a/3party/boost/boost/fusion/sequence/comparison/not_equal_to.hpp
+++ b/3party/boost/boost/fusion/sequence/comparison/not_equal_to.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_NOT_EQUAL_TO_05052005_0431)
#define FUSION_NOT_EQUAL_TO_05052005_0431
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -22,6 +23,7 @@
namespace boost { namespace fusion
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline bool
not_equal_to(Seq1 const& a, Seq2 const& b)
{
@@ -39,6 +41,7 @@ namespace boost { namespace fusion
namespace operators
{
template <typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
inline typename
boost::enable_if<
traits::enable_equality<Seq1, Seq2>
diff --git a/3party/boost/boost/fusion/sequence/convert.hpp b/3party/boost/boost/fusion/sequence/convert.hpp
index 5264810102..461b92120d 100644
--- a/3party/boost/boost/fusion/sequence/convert.hpp
+++ b/3party/boost/boost/fusion/sequence/convert.hpp
@@ -20,15 +20,16 @@ namespace boost { namespace fusion
template <typename Tag, typename Sequence>
struct convert
{
- typedef typename extension::convert_impl<Tag> gen;
-
typedef typename
- gen::template apply<Sequence>::type
- type;
+ extension::convert_impl<Tag>::template apply<Sequence>
+ gen;
+
+ typedef typename gen::type type;
};
}
template <typename Tag, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::convert<Tag, Sequence>::type
convert(Sequence& seq)
{
@@ -37,6 +38,7 @@ namespace boost { namespace fusion
}
template <typename Tag, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::convert<Tag, Sequence const>::type
convert(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic.hpp b/3party/boost/boost/fusion/sequence/intrinsic.hpp
index 7da2cf03d5..4583807406 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_INTRINSIC_10022005_0618)
#define FUSION_SEQUENCE_INTRINSIC_10022005_0618
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/fusion/sequence/intrinsic/back.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/at.hpp b/3party/boost/boost/fusion/sequence/intrinsic/at.hpp
index 92da7bbd2c..aa0d97445d 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/at.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/at.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_AT_05042005_0722)
#define FUSION_AT_05042005_0722
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
@@ -71,6 +72,7 @@ namespace boost { namespace fusion
template <typename N, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -82,6 +84,7 @@ namespace boost { namespace fusion
}
template <typename N, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::at<Sequence const, N>::type
at(Sequence const& seq)
{
@@ -89,6 +92,7 @@ namespace boost { namespace fusion
}
template <int N, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -100,6 +104,7 @@ namespace boost { namespace fusion
}
template <int N, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_c<Sequence const, N>::type
at_c(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/at_c.hpp b/3party/boost/boost/fusion/sequence/intrinsic/at_c.hpp
index 449e3f4149..327798c0ce 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/at_c.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/at_c.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_AT_C_08252008_0308)
#define FUSION_AT_C_08252008_0308
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#endif
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/at_key.hpp b/3party/boost/boost/fusion/sequence/intrinsic/at_key.hpp
index 24c2fffa65..844de840e4 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/at_key.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/at_key.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_AT_KEY_20060304_1755)
#define BOOST_FUSION_AT_KEY_20060304_1755
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/algorithm/query/find.hpp>
@@ -37,6 +38,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
@@ -72,6 +74,7 @@ namespace boost { namespace fusion
}
template <typename Key, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -83,6 +86,7 @@ namespace boost { namespace fusion
}
template <typename Key, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_key<Sequence const, Key>::type
at_key(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/back.hpp b/3party/boost/boost/fusion/sequence/intrinsic/back.hpp
index 0a4d482053..f934355381 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/back.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/back.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_BACK_09162005_0350)
#define FUSION_BACK_09162005_0350
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/iterator/prior.hpp>
@@ -26,6 +27,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::back<Sequence>::type
back(Sequence& seq)
{
@@ -33,6 +35,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::back<Sequence const>::type
back(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/begin.hpp b/3party/boost/boost/fusion/sequence/intrinsic/begin.hpp
index 7a7ecf6afd..af4e31225d 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/begin.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/begin.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_BEGIN_04052005_1132)
#define FUSION_BEGIN_04052005_1132
+#include <boost/fusion/support/config.hpp>
#include <boost/blank.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/if.hpp>
@@ -70,6 +71,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -81,6 +83,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_enable_if<
traits::is_sequence<Sequence>
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp
index 968718eb2a..81d09660b1 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp>
#include <boost/fusion/iterator/segmented_iterator.hpp>
#include <boost/fusion/view/iterator_range.hpp>
@@ -19,22 +20,23 @@ namespace boost { namespace fusion { namespace detail
{
//auto segmented_begin( seq )
//{
- // return make_segmented_iterator( segmented_begin_impl( seq, nil ) );
+ // return make_segmented_iterator( segmented_begin_impl( seq, nil_ ) );
//}
- template <typename Sequence, typename Nil = fusion::nil>
+ template <typename Sequence, typename Nil_ = fusion::nil_>
struct segmented_begin
{
typedef
segmented_iterator<
- typename segmented_begin_impl<Sequence, Nil>::type
+ typename segmented_begin_impl<Sequence, Nil_>::type
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
return type(
- segmented_begin_impl<Sequence, Nil>::call(seq, Nil()));
+ segmented_begin_impl<Sequence, Nil_>::call(seq, Nil_()));
}
};
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp
index 5069432761..2ab462702d 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/fusion/container/list/cons_fwd.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
@@ -37,6 +38,7 @@ namespace boost { namespace fusion { namespace detail
typedef cons<range_type, Context> type;
typedef mpl::false_ continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, State const&, Context const& context, segmented_begin_fun)
{
return type(range_type(fusion::begin(seq), fusion::end(seq)), context);
@@ -62,6 +64,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename fold_impl::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, Stack const& stack)
{
return fold_impl::call(seq, end_impl::call(seq, stack), stack, segmented_begin_fun());
@@ -76,6 +79,7 @@ namespace boost { namespace fusion { namespace detail
typedef iterator_range<begin_type, end_type> pair_type;
typedef cons<pair_type, Stack> type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, Stack stack)
{
return type(pair_type(fusion::begin(seq), fusion::end(seq)), stack);
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp
index 469862ac3b..c26865a671 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp>
#include <boost/fusion/iterator/segmented_iterator.hpp>
#include <boost/fusion/container/list/cons.hpp>
@@ -18,19 +19,20 @@ namespace boost { namespace fusion { namespace detail
// return make_segmented_iterator( segmented_end_impl( seq ) );
//}
- template <typename Sequence, typename Nil = fusion::nil>
+ template <typename Sequence, typename Nil_ = fusion::nil_>
struct segmented_end
{
typedef
segmented_iterator<
- typename segmented_end_impl<Sequence, Nil>::type
+ typename segmented_end_impl<Sequence, Nil_>::type
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence & seq)
{
return type(
- segmented_end_impl<Sequence, Nil>::call(seq, Nil()));
+ segmented_end_impl<Sequence, Nil_>::call(seq, Nil_()));
}
};
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp
index 149027bc2d..9be150433a 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
@@ -47,6 +48,7 @@ namespace boost { namespace fusion { namespace detail
typedef iterator_range<end_type, end_type> pair_type;
typedef cons<pair_type, Stack> type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence & seq, Stack stack)
{
end_type end = fusion::end(fusion::segments(seq));
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp
index 03cef28fa5..4defcedde1 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_SIZE_08112006_1141)
#define BOOST_FUSION_SEGMENTED_SIZE_08112006_1141
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/mpl/fold.hpp>
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/empty.hpp b/3party/boost/boost/fusion/sequence/intrinsic/empty.hpp
index a9928ab1a1..3c8666abd4 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/empty.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/empty.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_EMPTY_09162005_0335)
#define FUSION_EMPTY_09162005_0335
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/mpl/bool.hpp>
@@ -50,6 +51,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::empty<Sequence>::type
empty(Sequence const&)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/end.hpp b/3party/boost/boost/fusion/sequence/intrinsic/end.hpp
index 995ed7a083..3e69518efa 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/end.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/end.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_END_04052005_1141)
#define FUSION_END_04052005_1141
+#include <boost/fusion/support/config.hpp>
#include <boost/blank.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/if.hpp>
@@ -70,6 +71,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -81,6 +83,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_enable_if<
traits::is_sequence<Sequence>
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/front.hpp b/3party/boost/boost/fusion/sequence/intrinsic/front.hpp
index 0e50e3ca75..6d939da3d3 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/front.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/front.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_FRONT_09162005_0343)
#define FUSION_FRONT_09162005_0343
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/iterator/deref.hpp>
@@ -25,6 +26,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::front<Sequence>::type
front(Sequence& seq)
{
@@ -32,6 +34,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::front<Sequence const>::type
front(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp b/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp
index 9e0969a97b..bba2c695b3 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_HAS_KEY_09232005_1454)
#define FUSION_HAS_KEY_09232005_1454
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
@@ -67,6 +68,7 @@ namespace boost { namespace fusion
}
template <typename Key, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::has_key<Sequence, Key>::type
has_key(Sequence const&)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/segments.hpp b/3party/boost/boost/fusion/sequence/intrinsic/segments.hpp
index afd5d400eb..a1bbacaf06 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/segments.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/segments.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTS_04052005_1141)
#define BOOST_FUSION_SEGMENTS_04052005_1141
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
@@ -53,6 +54,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -65,6 +67,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::segments<Sequence const>::type
segments(Sequence const& seq)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/size.hpp b/3party/boost/boost/fusion/sequence/intrinsic/size.hpp
index 0a1c1659b2..51e613f693 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/size.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/size.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SIZE_05052005_0214)
#define FUSION_SIZE_05052005_0214
+#include <boost/fusion/support/config.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/int.hpp>
@@ -77,6 +78,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::size<Sequence>::type
size(Sequence const&)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/swap.hpp b/3party/boost/boost/fusion/sequence/intrinsic/swap.hpp
index 329f812484..05ce9b44b1 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/swap.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/swap.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SWAP_20070501_1956)
#define BOOST_FUSION_SWAP_20070501_1956
+#include <boost/fusion/support/config.hpp>
#include <algorithm>
#include <boost/fusion/support/is_sequence.hpp>
@@ -39,6 +40,7 @@ namespace boost { namespace fusion {
};
template<typename Elem>
+ BOOST_FUSION_GPU_ENABLED
void operator()(Elem const& e) const
{
using std::swap;
@@ -48,6 +50,7 @@ namespace boost { namespace fusion {
}
template<typename Seq1, typename Seq2>
+ BOOST_FUSION_GPU_ENABLED
typename enable_if<mpl::and_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >, void>::type
swap(Seq1& lhs, Seq2& rhs)
{
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/value_at.hpp b/3party/boost/boost/fusion/sequence/intrinsic/value_at.hpp
index ce314a8362..362669b521 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/value_at.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/value_at.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VALUE_AT_05052005_0229)
#define FUSION_VALUE_AT_05052005_0229
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/support/tag_of.hpp>
diff --git a/3party/boost/boost/fusion/sequence/intrinsic/value_at_key.hpp b/3party/boost/boost/fusion/sequence/intrinsic/value_at_key.hpp
index 23d34ee6bc..6d8be3fbcd 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic/value_at_key.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic/value_at_key.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_VALUE_AT_KEY_05052005_0229)
#define FUSION_VALUE_AT_KEY_05052005_0229
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/iterator/value_of_data.hpp>
diff --git a/3party/boost/boost/fusion/sequence/intrinsic_fwd.hpp b/3party/boost/boost/fusion/sequence/intrinsic_fwd.hpp
index 57409a3917..3b248a04bb 100644
--- a/3party/boost/boost/fusion/sequence/intrinsic_fwd.hpp
+++ b/3party/boost/boost/fusion/sequence/intrinsic_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED)
#define BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/fusion/support/is_sequence.hpp>
@@ -92,6 +93,7 @@ namespace boost { namespace fusion
}
template <typename N, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_disable_if<
is_const<Sequence>
@@ -100,10 +102,12 @@ namespace boost { namespace fusion
at(Sequence& seq);
template <typename N, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::at<Sequence const, N>::type
at(Sequence const& seq);
template <int N, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_disable_if<
is_const<Sequence>
@@ -112,18 +116,22 @@ namespace boost { namespace fusion
at_c(Sequence& seq);
template <int N, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::at_c<Sequence const, N>::type
at_c(Sequence const& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::back<Sequence>::type
back(Sequence& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::back<Sequence const>::type
back(Sequence const& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -132,6 +140,7 @@ namespace boost { namespace fusion
begin(Sequence& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -140,10 +149,12 @@ namespace boost { namespace fusion
begin(Sequence const& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::empty<Sequence>::type
empty(Sequence const&);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -152,6 +163,7 @@ namespace boost { namespace fusion
end(Sequence& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -160,18 +172,22 @@ namespace boost { namespace fusion
end(Sequence const& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::front<Sequence>::type
front(Sequence& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::front<Sequence const>::type
front(Sequence const& seq);
template <typename Key, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::has_key<Sequence, Key>::type
has_key(Sequence const& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_disable_if<
is_const<Sequence>
@@ -180,14 +196,17 @@ namespace boost { namespace fusion
segments(Sequence& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::segments<Sequence const>::type
segments(Sequence const& seq);
template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::size<Sequence>::type
size(Sequence const&);
template <typename Key, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_disable_if<
is_const<Sequence>
@@ -196,6 +215,7 @@ namespace boost { namespace fusion
at_key(Sequence& seq);
template <typename Key, typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::at_key<Sequence const, Key>::type
at_key(Sequence const& seq);
}}
diff --git a/3party/boost/boost/fusion/sequence/io.hpp b/3party/boost/boost/fusion/sequence/io.hpp
index 1c5925de17..b0baf426c5 100644
--- a/3party/boost/boost/fusion/sequence/io.hpp
+++ b/3party/boost/boost/fusion/sequence/io.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_IO_10032005_0836)
#define FUSION_SEQUENCE_IO_10032005_0836
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/io/in.hpp>
#include <boost/fusion/sequence/io/out.hpp>
diff --git a/3party/boost/boost/fusion/sequence/io/detail/in.hpp b/3party/boost/boost/fusion/sequence/io/detail/in.hpp
index 38c4dd5fa5..d0a8dc4964 100644
--- a/3party/boost/boost/fusion/sequence/io/detail/in.hpp
+++ b/3party/boost/boost/fusion/sequence/io/detail/in.hpp
@@ -9,6 +9,7 @@
#if !defined(FUSION_IN_05052005_0121)
#define FUSION_IN_05052005_0121
+#include <boost/fusion/support/config.hpp>
#include <istream>
#include <boost/fusion/sequence/io/detail/manip.hpp>
diff --git a/3party/boost/boost/fusion/sequence/io/detail/manip.hpp b/3party/boost/boost/fusion/sequence/io/detail/manip.hpp
index 371d0d29f7..8d8c296d3b 100644
--- a/3party/boost/boost/fusion/sequence/io/detail/manip.hpp
+++ b/3party/boost/boost/fusion/sequence/io/detail/manip.hpp
@@ -9,6 +9,7 @@
#if !defined(FUSION_MANIP_05052005_1200)
#define FUSION_MANIP_05052005_1200
+#include <boost/fusion/support/config.hpp>
#include <boost/config.hpp>
#include <string>
#include <vector>
@@ -19,15 +20,11 @@
#define FUSION_GET_CHAR_TYPE(T) typename T::char_type
#define FUSION_GET_TRAITS_TYPE(T) typename T::traits_type
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
-#define FUSION_STRING_OF_STREAM(Stream) std::string
-#else
#define FUSION_STRING_OF_STREAM(Stream) \
std::basic_string< \
FUSION_GET_CHAR_TYPE(Stream) \
, FUSION_GET_TRAITS_TYPE(Stream) \
>
-#endif
//$$$ these should be part of the public API$$$
//$$$ rename tuple_open, tuple_close and tuple_delimiter to
@@ -154,55 +151,6 @@ namespace boost { namespace fusion
} // detail
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
-
-#define STD_TUPLE_DEFINE_MANIPULATOR(name) \
- namespace detail \
- { \
- struct name##_tag; \
- \
- struct name##_type \
- { \
- typedef std::string string_type; \
- string_type data; \
- name##_type(const string_type& d): data(d) {} \
- }; \
- \
- template <typename Stream> \
- Stream& operator>>(Stream& s, const name##_type& m) \
- { \
- string_ios_manip<name##_tag, Stream>(s).set(m.data); \
- return s; \
- } \
- \
- template <typename Stream> \
- Stream& operator<<(Stream& s, const name##_type& m) \
- { \
- string_ios_manip<name##_tag, Stream>(s).set(m.data); \
- return s; \
- } \
- }
-
-#define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \
- inline detail::name##_type \
- name(const std::string& s) \
- { \
- return detail::name##_type(s); \
- } \
- \
- inline detail::name##_type \
- name(const char* s) \
- { \
- return detail::name##_type(std::string(s)); \
- } \
- \
- inline detail::name##_type \
- name(char c) \
- { \
- return detail::name##_type(std::string(1, c)); \
- }
-
-#else // defined(BOOST_NO_TEMPLATED_STREAMS)
#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
@@ -299,7 +247,6 @@ namespace boost { namespace fusion
} \
} \
-#endif // defined(BOOST_NO_TEMPLATED_STREAMS)
STD_TUPLE_DEFINE_MANIPULATOR(tuple_open)
STD_TUPLE_DEFINE_MANIPULATOR(tuple_close)
diff --git a/3party/boost/boost/fusion/sequence/io/detail/out.hpp b/3party/boost/boost/fusion/sequence/io/detail/out.hpp
index 52caf00d7d..7da87a53a4 100644
--- a/3party/boost/boost/fusion/sequence/io/detail/out.hpp
+++ b/3party/boost/boost/fusion/sequence/io/detail/out.hpp
@@ -9,6 +9,7 @@
#if !defined(FUSION_OUT_05052005_0121)
#define FUSION_OUT_05052005_0121
+#include <boost/fusion/support/config.hpp>
#include <ostream>
#include <boost/fusion/sequence/io/detail/manip.hpp>
diff --git a/3party/boost/boost/fusion/sequence/io/in.hpp b/3party/boost/boost/fusion/sequence/io/in.hpp
index 73a1fffbff..288c247331 100644
--- a/3party/boost/boost/fusion/sequence/io/in.hpp
+++ b/3party/boost/boost/fusion/sequence/io/in.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_IN_05042005_0120)
#define BOOST_IN_05042005_0120
+#include <boost/fusion/support/config.hpp>
#include <istream>
#include <boost/fusion/sequence/io/detail/in.hpp>
#include <boost/fusion/support/is_sequence.hpp>
diff --git a/3party/boost/boost/fusion/sequence/io/out.hpp b/3party/boost/boost/fusion/sequence/io/out.hpp
index 988a39856a..5c4637d57b 100644
--- a/3party/boost/boost/fusion/sequence/io/out.hpp
+++ b/3party/boost/boost/fusion/sequence/io/out.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_OUT_05042005_0120)
#define BOOST_OUT_05042005_0120
+#include <boost/fusion/support/config.hpp>
#include <ostream>
#include <boost/fusion/sequence/io/detail/out.hpp>
#include <boost/fusion/support/is_sequence.hpp>
diff --git a/3party/boost/boost/fusion/sequence/sequence_facade.hpp b/3party/boost/boost/fusion/sequence/sequence_facade.hpp
index fd6b095eab..ff578a00c5 100644
--- a/3party/boost/boost/fusion/sequence/sequence_facade.hpp
+++ b/3party/boost/boost/fusion/sequence/sequence_facade.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_FACADE_09252006_1044)
#define FUSION_SEQUENCE_FACADE_09252006_1044
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/mpl/bool.hpp>
diff --git a/3party/boost/boost/fusion/support.hpp b/3party/boost/boost/fusion/support.hpp
index 50bf924f9a..11e17eb565 100644
--- a/3party/boost/boost/fusion/support.hpp
+++ b/3party/boost/boost/fusion/support.hpp
@@ -1,12 +1,13 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_SUPPORT_10022005_0545)
#define FUSION_SUPPORT_10022005_0545
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/support/is_iterator.hpp>
#include <boost/fusion/support/is_sequence.hpp>
diff --git a/3party/boost/boost/fusion/support/as_const.hpp b/3party/boost/boost/fusion/support/as_const.hpp
index bb2a96a65d..ed535970c3 100644
--- a/3party/boost/boost/fusion/support/as_const.hpp
+++ b/3party/boost/boost/fusion/support/as_const.hpp
@@ -16,6 +16,7 @@ namespace boost { namespace fusion { namespace extension
// such contexts with calls to this function. Users can
// specialize this function for their own wrappers.
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
const T& as_const(const T& obj)
{
return obj;
diff --git a/3party/boost/boost/fusion/support/category_of.hpp b/3party/boost/boost/fusion/support/category_of.hpp
index 805d895ba2..6bdf6d0291 100644
--- a/3party/boost/boost/fusion/support/category_of.hpp
+++ b/3party/boost/boost/fusion/support/category_of.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_CATEGORY_OF_07202005_0308)
#define FUSION_CATEGORY_OF_07202005_0308
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/category_of.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/type_traits/is_base_of.hpp>
diff --git a/3party/boost/boost/fusion/support/config.hpp b/3party/boost/boost/fusion/support/config.hpp
new file mode 100644
index 0000000000..16e38f9587
--- /dev/null
+++ b/3party/boost/boost/fusion/support/config.hpp
@@ -0,0 +1,16 @@
+/*=============================================================================
+ Copyright (c) 2014 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)
+==============================================================================*/
+#if !defined(FUSION_SUPPORT_CONFIG_01092014_1718)
+#define FUSION_SUPPORT_CONFIG_01092014_1718
+
+#include <boost/config.hpp>
+
+#ifndef BOOST_FUSION_GPU_ENABLED
+#define BOOST_FUSION_GPU_ENABLED BOOST_GPU_ENABLED
+#endif
+
+#endif
diff --git a/3party/boost/boost/fusion/support/deduce.hpp b/3party/boost/boost/fusion/support/deduce.hpp
index 3a7231bdf1..8d53115ffc 100644
--- a/3party/boost/boost/fusion/support/deduce.hpp
+++ b/3party/boost/boost/fusion/support/deduce.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_SUPPORT_DEDUCE_HPP_INCLUDED)
#define BOOST_FUSION_SUPPORT_DEDUCE_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/ref.hpp>
namespace boost { namespace fusion { namespace traits
diff --git a/3party/boost/boost/fusion/support/deduce_sequence.hpp b/3party/boost/boost/fusion/support/deduce_sequence.hpp
index ce02a3cd0d..24f4e2d821 100644
--- a/3party/boost/boost/fusion/support/deduce_sequence.hpp
+++ b/3party/boost/boost/fusion/support/deduce_sequence.hpp
@@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP_INCLUDED)
#define BOOST_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/deduce.hpp>
#include <boost/fusion/container/vector/convert.hpp>
#include <boost/fusion/view/transform_view.hpp>
@@ -32,8 +33,9 @@ namespace boost { namespace fusion { namespace traits
{ };
// never called, but needed for decltype-based result_of (C++0x)
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
typename result< deducer(T) >::type
operator()(T&&) const;
#endif
diff --git a/3party/boost/boost/fusion/support/detail/access.hpp b/3party/boost/boost/fusion/support/detail/access.hpp
index ced7cea18b..ab88538314 100644
--- a/3party/boost/boost/fusion/support/detail/access.hpp
+++ b/3party/boost/boost/fusion/support/detail/access.hpp
@@ -1,12 +1,13 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_ACCESS_04182005_0737)
#define FUSION_ACCESS_04182005_0737
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/add_reference.hpp>
@@ -21,10 +22,10 @@ namespace boost { namespace fusion { namespace detail
template <typename T>
struct cref_result
{
- typedef typename
+ typedef typename
add_reference<
typename add_const<T>::type
- >::type
+ >::type
type;
};
@@ -35,7 +36,7 @@ namespace boost { namespace fusion { namespace detail
};
template <typename T>
- struct call_param<T &>
+ struct call_param<T&>
{
typedef T& type;
};
diff --git a/3party/boost/boost/fusion/support/detail/as_fusion_element.hpp b/3party/boost/boost/fusion/support/detail/as_fusion_element.hpp
index 96cf2d004e..628dca4d16 100644
--- a/3party/boost/boost/fusion/support/detail/as_fusion_element.hpp
+++ b/3party/boost/boost/fusion/support/detail/as_fusion_element.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_AS_FUSION_ELEMENT_05052005_0338)
#define FUSION_AS_FUSION_ELEMENT_05052005_0338
+#include <boost/fusion/support/config.hpp>
#include <boost/ref.hpp>
namespace boost { namespace fusion { namespace detail
diff --git a/3party/boost/boost/fusion/support/detail/is_mpl_sequence.hpp b/3party/boost/boost/fusion/support/detail/is_mpl_sequence.hpp
index 376afc281c..1c485f91c5 100644
--- a/3party/boost/boost/fusion/support/detail/is_mpl_sequence.hpp
+++ b/3party/boost/boost/fusion/support/detail/is_mpl_sequence.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105)
#define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/mpl/is_sequence.hpp>
#include <boost/mpl/and.hpp>
diff --git a/3party/boost/boost/fusion/support/detail/pp_round.hpp b/3party/boost/boost/fusion/support/detail/pp_round.hpp
index e1a6161166..6c43b66f11 100644
--- a/3party/boost/boost/fusion/support/detail/pp_round.hpp
+++ b/3party/boost/boost/fusion/support/detail/pp_round.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_BOOST_FUSION_SUPPORT_PP_ROUND_HPP
#define BOOST_BOOST_FUSION_SUPPORT_PP_ROUND_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/comparison/less.hpp>
#include <boost/preprocessor/control/if.hpp>
diff --git a/3party/boost/boost/fusion/support/detail/segmented_fold_until_impl.hpp b/3party/boost/boost/fusion/support/detail/segmented_fold_until_impl.hpp
index 08096c16ae..514e8d950b 100644
--- a/3party/boost/boost/fusion/support/detail/segmented_fold_until_impl.hpp
+++ b/3party/boost/boost/fusion/support/detail/segmented_fold_until_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_FOLD_UNTIL_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_FOLD_UNTIL_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
@@ -65,6 +66,7 @@ namespace boost { namespace fusion
}
template <typename Cur, typename Context>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::make_segmented_iterator<Cur, Context>::type
make_segmented_iterator(Cur const& cur, Context const& context)
{
@@ -119,6 +121,7 @@ namespace boost { namespace fusion
typedef iterator_range<Cur, End> range_type;
typedef cons<range_type, Context> type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Cur const& cur, End const& end, Context const& context)
{
return cons<range_type, Context>(range_type(cur, end), context);
@@ -167,6 +170,7 @@ namespace boost { namespace fusion
typedef typename impl::type type;
typedef typename impl::continue_type continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, State const& state, Context const& context, Fun const& fun)
{
return impl::call(fusion::segments(seq), state, context, fun);
@@ -188,6 +192,7 @@ namespace boost { namespace fusion
typedef typename apply_type::type type;
typedef typename apply_type::continue_type continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, State const& state, Context const& context, Fun const& fun)
{
return apply_type::call(seq, state, context, fun);
@@ -269,12 +274,14 @@ namespace boost { namespace fusion
>::type
continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Begin const& beg, End const& end, State const& state
, Context const& context, Fun const& fun)
{
return call(beg, end, state, context, fun, typename fold_recurse_impl::continue_type());
}
+ BOOST_FUSION_GPU_ENABLED
static type call(Begin const& beg, End const& end, State const& state
, Context const& context, Fun const& fun, mpl::true_) // continue
{
@@ -290,6 +297,7 @@ namespace boost { namespace fusion
, fun);
}
+ BOOST_FUSION_GPU_ENABLED
static type call(Begin const& beg, End const& end, State const& state
, Context const& context, Fun const& fun, mpl::false_) // break
{
@@ -317,6 +325,7 @@ namespace boost { namespace fusion
typedef typename impl::type type;
typedef typename impl::continue_type continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Begin const& beg, End const& end, State const& state
, Context const& context, Fun const& fun)
{
@@ -342,6 +351,7 @@ namespace boost { namespace fusion
typedef typename impl::type type;
typedef typename impl::continue_type continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Begin const& beg, End const& end, State const& state
, Context const& context, Fun const& fun)
{
@@ -355,6 +365,7 @@ namespace boost { namespace fusion
typedef State type;
typedef mpl::true_ continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Begin const&, End const&, State const& state
, Context const&, Fun const&)
{
@@ -378,6 +389,7 @@ namespace boost { namespace fusion
typedef typename impl::type type;
typedef typename impl::continue_type continue_type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Segments& segs, State const& state, Context const& context, Fun const& fun)
{
return impl::call(fusion::begin(segs), fusion::end(segs), state, context, fun);
diff --git a/3party/boost/boost/fusion/support/is_iterator.hpp b/3party/boost/boost/fusion/support/is_iterator.hpp
index f0272d05a9..b48aab8c3f 100644
--- a/3party/boost/boost/fusion/support/is_iterator.hpp
+++ b/3party/boost/boost/fusion/support/is_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_IS_ITERATOR_05062005_1219)
#define FUSION_IS_ITERATOR_05062005_1219
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_base_of.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/support/is_segmented.hpp b/3party/boost/boost/fusion/support/is_segmented.hpp
index 6e62eac430..1326feb346 100644
--- a/3party/boost/boost/fusion/support/is_segmented.hpp
+++ b/3party/boost/boost/fusion/support/is_segmented.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_IS_SEGMENTED_03202006_0015)
#define FUSION_IS_SEGMENTED_03202006_0015
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/support/tag_of.hpp>
diff --git a/3party/boost/boost/fusion/support/is_sequence.hpp b/3party/boost/boost/fusion/support/is_sequence.hpp
index 184bbbb6dc..8b5821042f 100644
--- a/3party/boost/boost/fusion/support/is_sequence.hpp
+++ b/3party/boost/boost/fusion/support/is_sequence.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_IS_SEQUENCE_05052005_1002)
#define FUSION_IS_SEQUENCE_05052005_1002
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/mpl/is_sequence.hpp>
@@ -61,7 +62,7 @@ namespace boost { namespace fusion
struct is_sequence
: mpl::bool_<
(bool)extension::is_sequence_impl<
- typename fusion::detail::tag_of<T>::type
+ typename fusion::detail::tag_of<T>::type
>::template apply<T>::type::value
>
{};
diff --git a/3party/boost/boost/fusion/support/is_view.hpp b/3party/boost/boost/fusion/support/is_view.hpp
index 4ec9e06528..c54e60e19b 100644
--- a/3party/boost/boost/fusion/support/is_view.hpp
+++ b/3party/boost/boost/fusion/support/is_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_IS_VIEW_03202006_0015)
#define FUSION_IS_VIEW_03202006_0015
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/fusion/support/detail/is_view.hpp>
#include <boost/fusion/support/tag_of.hpp>
diff --git a/3party/boost/boost/fusion/support/iterator_base.hpp b/3party/boost/boost/fusion/support/iterator_base.hpp
index ad24d93f6f..d23d05c62e 100644
--- a/3party/boost/boost/fusion/support/iterator_base.hpp
+++ b/3party/boost/boost/fusion/support/iterator_base.hpp
@@ -7,6 +7,8 @@
#if !defined(FUSION_ITERATOR_BASE_05042005_1008)
#define FUSION_ITERATOR_BASE_05042005_1008
+#include <boost/fusion/support/config.hpp>
+
namespace boost { namespace fusion
{
struct iterator_root {};
@@ -14,12 +16,14 @@ namespace boost { namespace fusion
template <typename Iterator>
struct iterator_base : iterator_root
{
+ BOOST_FUSION_GPU_ENABLED
Iterator const&
cast() const
{
return static_cast<Iterator const&>(*this);
}
+ BOOST_FUSION_GPU_ENABLED
Iterator&
cast()
{
diff --git a/3party/boost/boost/fusion/support/pair.hpp b/3party/boost/boost/fusion/support/pair.hpp
index 11ad1ffe7e..c547926e9b 100644
--- a/3party/boost/boost/fusion/support/pair.hpp
+++ b/3party/boost/boost/fusion/support/pair.hpp
@@ -8,11 +8,14 @@
#if !defined(FUSION_PAIR_07222005_1203)
#define FUSION_PAIR_07222005_1203
+#include <boost/fusion/support/config.hpp>
#include <iosfwd>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/config.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
#if defined (BOOST_MSVC)
# pragma warning(push)
@@ -25,23 +28,63 @@ namespace boost { namespace fusion
template <typename First, typename Second>
struct pair
{
+ BOOST_FUSION_GPU_ENABLED
pair()
: second() {}
+ BOOST_FUSION_GPU_ENABLED
+ pair(pair const& rhs)
+ : second(rhs.second) {}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
+ pair(pair&& rhs)
+ : second(std::forward<Second>(rhs.second)) {}
+#endif
+
+ BOOST_FUSION_GPU_ENABLED
pair(typename detail::call_param<Second>::type val)
: second(val) {}
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+ template <typename Second2>
+ BOOST_FUSION_GPU_ENABLED
+ pair(Second2&& val
+ , typename boost::enable_if<is_convertible<Second2, Second> >::type* /*dummy*/ = 0
+ ) : second(std::forward<Second2>(val)) {}
+
+#endif
+
template <typename Second2>
+ BOOST_FUSION_GPU_ENABLED
pair(pair<First, Second2> const& rhs)
: second(rhs.second) {}
template <typename Second2>
+ BOOST_FUSION_GPU_ENABLED
pair& operator=(pair<First, Second2> const& rhs)
{
second = rhs.second;
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
+ pair& operator=(pair const& rhs)
+ {
+ second = rhs.second;
+ return *this;
+ }
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_FUSION_GPU_ENABLED
+ pair& operator=(pair&& rhs)
+ {
+ second = std::forward<Second>(rhs.second);
+ return *this;
+ }
+#endif
+
typedef First first_type;
typedef Second second_type;
Second second;
@@ -70,6 +113,7 @@ namespace boost { namespace fusion
}
template <typename First, typename Second>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::make_pair<First,Second>::type
make_pair(Second const& val)
{
@@ -93,6 +137,7 @@ namespace boost { namespace fusion
}
template <typename First, typename SecondL, typename SecondR>
+ BOOST_FUSION_GPU_ENABLED
inline bool
operator==(pair<First, SecondL> const& l, pair<First, SecondR> const& r)
{
@@ -100,11 +145,20 @@ namespace boost { namespace fusion
}
template <typename First, typename SecondL, typename SecondR>
+ BOOST_FUSION_GPU_ENABLED
inline bool
operator!=(pair<First, SecondL> const& l, pair<First, SecondR> const& r)
{
return l.second != r.second;
}
+
+ template <typename First, typename SecondL, typename SecondR>
+ BOOST_FUSION_GPU_ENABLED
+ inline bool
+ operator<(pair<First, SecondL> const& l, pair<First, SecondR> const& r)
+ {
+ return l.second < r.second;
+ }
}}
#if defined (BOOST_MSVC)
diff --git a/3party/boost/boost/fusion/support/segmented_fold_until.hpp b/3party/boost/boost/fusion/support/segmented_fold_until.hpp
index 6ea58ac611..8d3ea68219 100644
--- a/3party/boost/boost/fusion/support/segmented_fold_until.hpp
+++ b/3party/boost/boost/fusion/support/segmented_fold_until.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_FOLD_UNTIL_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_FOLD_UNTIL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/fusion/support/detail/segmented_fold_until_impl.hpp>
@@ -20,7 +21,7 @@ namespace boost { namespace fusion
{
//auto segmented_fold_until(seq, state, fun)
//{
- // return first(segmented_fold_until_impl(seq, state, nil, fun));
+ // return first(segmented_fold_until_impl(seq, state, nil_, fun));
//}
namespace result_of
@@ -32,7 +33,7 @@ namespace boost { namespace fusion
detail::segmented_fold_until_impl<
Sequence
, State
- , fusion::nil
+ , fusion::nil_
, Fun
>
filter;
@@ -44,6 +45,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename State, typename Fun>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_disable_if<
is_const<Sequence>
@@ -55,10 +57,11 @@ namespace boost { namespace fusion
typename result_of::segmented_fold_until<Sequence, State, Fun>::filter
filter;
- return filter::call(seq, state, fusion::nil(), fun);
+ return filter::call(seq, state, fusion::nil_(), fun);
}
template <typename Sequence, typename State, typename Fun>
+ BOOST_FUSION_GPU_ENABLED
typename result_of::segmented_fold_until<Sequence const, State, Fun>::type
segmented_fold_until(Sequence const& seq, State const& state, Fun const& fun)
{
@@ -66,7 +69,7 @@ namespace boost { namespace fusion
typename result_of::segmented_fold_until<Sequence const, State, Fun>::filter
filter;
- return filter::call(seq, state, fusion::nil(), fun);
+ return filter::call(seq, state, fusion::nil_(), fun);
}
}}
diff --git a/3party/boost/boost/fusion/support/sequence_base.hpp b/3party/boost/boost/fusion/support/sequence_base.hpp
index 89affab666..b59121c09b 100644
--- a/3party/boost/boost/fusion/support/sequence_base.hpp
+++ b/3party/boost/boost/fusion/support/sequence_base.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_SEQUENCE_BASE_04182005_0737)
#define FUSION_SEQUENCE_BASE_04182005_0737
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/begin_end_fwd.hpp>
namespace boost { namespace fusion
@@ -21,18 +22,21 @@ namespace boost { namespace fusion
template <typename Sequence>
struct sequence_base
{
+ BOOST_FUSION_GPU_ENABLED
Sequence const&
derived() const
{
return static_cast<Sequence const&>(*this);
}
+ BOOST_FUSION_GPU_ENABLED
Sequence&
derived()
{
return static_cast<Sequence&>(*this);
}
+ BOOST_FUSION_GPU_ENABLED
operator detail::from_sequence_convertible_type()const
{
return detail::from_sequence_convertible_type();
diff --git a/3party/boost/boost/fusion/support/tag_of.hpp b/3party/boost/boost/fusion/support/tag_of.hpp
index a3fef3ba20..61cb3b19ae 100644
--- a/3party/boost/boost/fusion/support/tag_of.hpp
+++ b/3party/boost/boost/fusion/support/tag_of.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_TAG_OF_09232005_0845)
#define FUSION_TAG_OF_09232005_0845
+#include <boost/fusion/support/config.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
diff --git a/3party/boost/boost/fusion/support/unused.hpp b/3party/boost/boost/fusion/support/unused.hpp
index 8e0d5f2753..b3eec5ce13 100644
--- a/3party/boost/boost/fusion/support/unused.hpp
+++ b/3party/boost/boost/fusion/support/unused.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SUPPORT_UNUSED_20070305_1038)
#define BOOST_FUSION_SUPPORT_UNUSED_20070305_1038
+#include <boost/fusion/support/config.hpp>
#include <iosfwd>
#include <boost/config.hpp>
@@ -21,16 +22,19 @@ namespace boost { namespace fusion
{
struct unused_type
{
+ BOOST_FUSION_GPU_ENABLED
unused_type()
{
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
unused_type(T const&)
{
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
unused_type const&
operator=(T const&) const
{
@@ -38,18 +42,21 @@ namespace boost { namespace fusion
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
unused_type&
operator=(T const&)
{
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
unused_type const&
operator=(unused_type const&) const
{
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
unused_type&
operator=(unused_type const&)
{
@@ -63,6 +70,7 @@ namespace boost { namespace fusion
{
struct unused_only
{
+ BOOST_FUSION_GPU_ENABLED
unused_only(unused_type const&) {}
};
}
diff --git a/3party/boost/boost/fusion/tuple.hpp b/3party/boost/boost/fusion/tuple.hpp
index 3a4e7d01d4..49dac1d745 100644
--- a/3party/boost/boost/fusion/tuple.hpp
+++ b/3party/boost/boost/fusion/tuple.hpp
@@ -7,9 +7,11 @@
#if !defined(FUSION_TUPLE_10032005_0806)
#define FUSION_TUPLE_10032005_0806
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/tuple/tuple.hpp>
#include <boost/fusion/tuple/make_tuple.hpp>
#include <boost/fusion/tuple/tuple_tie.hpp>
#include <boost/fusion/container/generation/ignore.hpp>
#endif
+
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp
index 679af2f607..6f3c826e2b 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type>
make_tuple(T0 const& _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_tuple(T0 const& _0 , T1 const& _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp
index 6a3a733c4f..89f23ccb59 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type>
make_tuple(T0 const& _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_tuple(T0 const& _0 , T1 const& _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -79,6 +89,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -86,6 +97,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -93,6 +105,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -100,6 +113,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -107,6 +121,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -114,6 +129,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -121,6 +137,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -128,6 +145,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -135,6 +153,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -142,6 +161,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp
index 358ed8094c..7bbd06ca6c 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type>
make_tuple(T0 const& _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_tuple(T0 const& _0 , T1 const& _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -79,6 +89,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -86,6 +97,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -93,6 +105,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -100,6 +113,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -107,6 +121,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -114,6 +129,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -121,6 +137,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -128,6 +145,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -135,6 +153,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -142,6 +161,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -149,6 +169,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -156,6 +177,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -163,6 +185,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -170,6 +193,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -177,6 +201,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -184,6 +209,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -191,6 +217,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -198,6 +225,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -205,6 +233,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -212,6 +241,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp
index 420c41e465..46280e35df 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type>
make_tuple(T0 const& _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_tuple(T0 const& _0 , T1 const& _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -79,6 +89,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -86,6 +97,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -93,6 +105,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -100,6 +113,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -107,6 +121,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -114,6 +129,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -121,6 +137,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -128,6 +145,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -135,6 +153,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -142,6 +161,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -149,6 +169,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -156,6 +177,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -163,6 +185,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -170,6 +193,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -177,6 +201,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -184,6 +209,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -191,6 +217,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -198,6 +225,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -205,6 +233,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -212,6 +241,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -219,6 +249,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -226,6 +257,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -233,6 +265,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -240,6 +273,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -247,6 +281,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -254,6 +289,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -261,6 +297,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -268,6 +305,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -275,6 +313,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -282,6 +321,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp
index f387400fa4..748631d9e8 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type>
make_tuple(T0 const& _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
make_tuple(T0 const& _0 , T1 const& _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9)
{
@@ -79,6 +89,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10)
{
@@ -86,6 +97,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11)
{
@@ -93,6 +105,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12)
{
@@ -100,6 +113,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13)
{
@@ -107,6 +121,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14)
{
@@ -114,6 +129,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15)
{
@@ -121,6 +137,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16)
{
@@ -128,6 +145,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17)
{
@@ -135,6 +153,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18)
{
@@ -142,6 +161,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19)
{
@@ -149,6 +169,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20)
{
@@ -156,6 +177,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21)
{
@@ -163,6 +185,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22)
{
@@ -170,6 +193,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23)
{
@@ -177,6 +201,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24)
{
@@ -184,6 +209,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25)
{
@@ -191,6 +217,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26)
{
@@ -198,6 +225,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27)
{
@@ -205,6 +233,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28)
{
@@ -212,6 +241,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29)
{
@@ -219,6 +249,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30)
{
@@ -226,6 +257,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31)
{
@@ -233,6 +265,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32)
{
@@ -240,6 +273,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33)
{
@@ -247,6 +281,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34)
{
@@ -254,6 +289,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35)
{
@@ -261,6 +297,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36)
{
@@ -268,6 +305,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37)
{
@@ -275,6 +313,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38)
{
@@ -282,6 +321,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39)
{
@@ -289,6 +329,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40)
{
@@ -296,6 +337,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41)
{
@@ -303,6 +345,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42)
{
@@ -310,6 +353,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43)
{
@@ -317,6 +361,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44)
{
@@ -324,6 +369,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45)
{
@@ -331,6 +377,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46)
{
@@ -338,6 +385,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47)
{
@@ -345,6 +393,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48)
{
@@ -352,6 +401,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type , typename detail::as_fusion_element<T20>::type , typename detail::as_fusion_element<T21>::type , typename detail::as_fusion_element<T22>::type , typename detail::as_fusion_element<T23>::type , typename detail::as_fusion_element<T24>::type , typename detail::as_fusion_element<T25>::type , typename detail::as_fusion_element<T26>::type , typename detail::as_fusion_element<T27>::type , typename detail::as_fusion_element<T28>::type , typename detail::as_fusion_element<T29>::type , typename detail::as_fusion_element<T30>::type , typename detail::as_fusion_element<T31>::type , typename detail::as_fusion_element<T32>::type , typename detail::as_fusion_element<T33>::type , typename detail::as_fusion_element<T34>::type , typename detail::as_fusion_element<T35>::type , typename detail::as_fusion_element<T36>::type , typename detail::as_fusion_element<T37>::type , typename detail::as_fusion_element<T38>::type , typename detail::as_fusion_element<T39>::type , typename detail::as_fusion_element<T40>::type , typename detail::as_fusion_element<T41>::type , typename detail::as_fusion_element<T42>::type , typename detail::as_fusion_element<T43>::type , typename detail::as_fusion_element<T44>::type , typename detail::as_fusion_element<T45>::type , typename detail::as_fusion_element<T46>::type , typename detail::as_fusion_element<T47>::type , typename detail::as_fusion_element<T48>::type , typename detail::as_fusion_element<T49>::type>
make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple.hpp
index 8f9b94a5cd..3fd0e18bec 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple.hpp
@@ -18,4 +18,5 @@
#include <boost/fusion/tuple/detail/preprocessed/tuple50.hpp>
#else
#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers"
-#endif \ No newline at end of file
+#endif
+
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10.hpp
index dc0b8de69c..87b64e6711 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10.hpp
@@ -14,136 +14,170 @@ namespace boost { namespace fusion
typedef vector<
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>
base_type;
- tuple()
+ BOOST_FUSION_GPU_ENABLED tuple()
: base_type() {}
- tuple(tuple const& rhs)
+ BOOST_FUSION_GPU_ENABLED tuple(tuple const& rhs)
: base_type(rhs) {}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(std::pair<U1, U2> const& rhs)
: base_type(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
tuple(typename detail::call_param<T0 >::type _0)
: base_type(_0) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0> const& rhs)
: base_type(rhs) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: base_type(_0 , _1) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: base_type(_0 , _1 , _2) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: base_type(_0 , _1 , _2 , _3) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: base_type(_0 , _1 , _2 , _3 , _4) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: base_type(_0 , _1 , _2 , _3 , _4 , _5) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(T const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(std::pair<U1, U2> const& rhs)
{
base_type::operator=(rhs);
@@ -155,6 +189,7 @@ namespace boost { namespace fusion
template <int N, typename Tuple>
struct tuple_element : result_of::value_at_c<Tuple, N> {};
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Tuple>
@@ -165,6 +200,7 @@ namespace boost { namespace fusion
return at_c<N>(tup);
}
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_c<Tuple const, N>::type
get(Tuple const& tup)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20.hpp
index 7ce38594d0..210a13ad25 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20.hpp
@@ -14,246 +14,310 @@ namespace boost { namespace fusion
typedef vector<
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>
base_type;
- tuple()
+ BOOST_FUSION_GPU_ENABLED tuple()
: base_type() {}
- tuple(tuple const& rhs)
+ BOOST_FUSION_GPU_ENABLED tuple(tuple const& rhs)
: base_type(rhs) {}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(std::pair<U1, U2> const& rhs)
: base_type(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
tuple(typename detail::call_param<T0 >::type _0)
: base_type(_0) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0> const& rhs)
: base_type(rhs) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: base_type(_0 , _1) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: base_type(_0 , _1 , _2) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: base_type(_0 , _1 , _2 , _3) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: base_type(_0 , _1 , _2 , _3 , _4) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: base_type(_0 , _1 , _2 , _3 , _4 , _5) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(T const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(std::pair<U1, U2> const& rhs)
{
base_type::operator=(rhs);
@@ -265,6 +329,7 @@ namespace boost { namespace fusion
template <int N, typename Tuple>
struct tuple_element : result_of::value_at_c<Tuple, N> {};
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Tuple>
@@ -275,6 +340,7 @@ namespace boost { namespace fusion
return at_c<N>(tup);
}
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_c<Tuple const, N>::type
get(Tuple const& tup)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30.hpp
index d0652931ed..33a3bee699 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30.hpp
@@ -14,356 +14,450 @@ namespace boost { namespace fusion
typedef vector<
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>
base_type;
- tuple()
+ BOOST_FUSION_GPU_ENABLED tuple()
: base_type() {}
- tuple(tuple const& rhs)
+ BOOST_FUSION_GPU_ENABLED tuple(tuple const& rhs)
: base_type(rhs) {}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(std::pair<U1, U2> const& rhs)
: base_type(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
tuple(typename detail::call_param<T0 >::type _0)
: base_type(_0) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0> const& rhs)
: base_type(rhs) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: base_type(_0 , _1) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: base_type(_0 , _1 , _2) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: base_type(_0 , _1 , _2 , _3) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: base_type(_0 , _1 , _2 , _3 , _4) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: base_type(_0 , _1 , _2 , _3 , _4 , _5) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(T const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(std::pair<U1, U2> const& rhs)
{
base_type::operator=(rhs);
@@ -375,6 +469,7 @@ namespace boost { namespace fusion
template <int N, typename Tuple>
struct tuple_element : result_of::value_at_c<Tuple, N> {};
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Tuple>
@@ -385,6 +480,7 @@ namespace boost { namespace fusion
return at_c<N>(tup);
}
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_c<Tuple const, N>::type
get(Tuple const& tup)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40.hpp
index fca8b24f84..4292d3a66c 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40.hpp
@@ -14,466 +14,590 @@ namespace boost { namespace fusion
typedef vector<
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>
base_type;
- tuple()
+ BOOST_FUSION_GPU_ENABLED tuple()
: base_type() {}
- tuple(tuple const& rhs)
+ BOOST_FUSION_GPU_ENABLED tuple(tuple const& rhs)
: base_type(rhs) {}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(std::pair<U1, U2> const& rhs)
: base_type(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
tuple(typename detail::call_param<T0 >::type _0)
: base_type(_0) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0> const& rhs)
: base_type(rhs) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: base_type(_0 , _1) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: base_type(_0 , _1 , _2) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: base_type(_0 , _1 , _2 , _3) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: base_type(_0 , _1 , _2 , _3 , _4) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: base_type(_0 , _1 , _2 , _3 , _4 , _5) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(T const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(std::pair<U1, U2> const& rhs)
{
base_type::operator=(rhs);
@@ -485,6 +609,7 @@ namespace boost { namespace fusion
template <int N, typename Tuple>
struct tuple_element : result_of::value_at_c<Tuple, N> {};
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Tuple>
@@ -495,6 +620,7 @@ namespace boost { namespace fusion
return at_c<N>(tup);
}
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_c<Tuple const, N>::type
get(Tuple const& tup)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50.hpp
index 34ba8d4a02..c58682754f 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50.hpp
@@ -14,576 +14,730 @@ namespace boost { namespace fusion
typedef vector<
T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>
base_type;
- tuple()
+ BOOST_FUSION_GPU_ENABLED tuple()
: base_type() {}
- tuple(tuple const& rhs)
+ BOOST_FUSION_GPU_ENABLED tuple(tuple const& rhs)
: base_type(rhs) {}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(std::pair<U1, U2> const& rhs)
: base_type(rhs) {}
+ BOOST_FUSION_GPU_ENABLED
explicit
tuple(typename detail::call_param<T0 >::type _0)
: base_type(_0) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0> const& rhs)
: base_type(rhs) {}
template <typename U0>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1)
: base_type(_0 , _1) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2)
: base_type(_0 , _1 , _2) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3)
: base_type(_0 , _1 , _2 , _3) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4)
: base_type(_0 , _1 , _2 , _3 , _4) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5)
: base_type(_0 , _1 , _2 , _3 , _4 , _5) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple(typename detail::call_param<T0 >::type _0 , typename detail::call_param<T1 >::type _1 , typename detail::call_param<T2 >::type _2 , typename detail::call_param<T3 >::type _3 , typename detail::call_param<T4 >::type _4 , typename detail::call_param<T5 >::type _5 , typename detail::call_param<T6 >::type _6 , typename detail::call_param<T7 >::type _7 , typename detail::call_param<T8 >::type _8 , typename detail::call_param<T9 >::type _9 , typename detail::call_param<T10 >::type _10 , typename detail::call_param<T11 >::type _11 , typename detail::call_param<T12 >::type _12 , typename detail::call_param<T13 >::type _13 , typename detail::call_param<T14 >::type _14 , typename detail::call_param<T15 >::type _15 , typename detail::call_param<T16 >::type _16 , typename detail::call_param<T17 >::type _17 , typename detail::call_param<T18 >::type _18 , typename detail::call_param<T19 >::type _19 , typename detail::call_param<T20 >::type _20 , typename detail::call_param<T21 >::type _21 , typename detail::call_param<T22 >::type _22 , typename detail::call_param<T23 >::type _23 , typename detail::call_param<T24 >::type _24 , typename detail::call_param<T25 >::type _25 , typename detail::call_param<T26 >::type _26 , typename detail::call_param<T27 >::type _27 , typename detail::call_param<T28 >::type _28 , typename detail::call_param<T29 >::type _29 , typename detail::call_param<T30 >::type _30 , typename detail::call_param<T31 >::type _31 , typename detail::call_param<T32 >::type _32 , typename detail::call_param<T33 >::type _33 , typename detail::call_param<T34 >::type _34 , typename detail::call_param<T35 >::type _35 , typename detail::call_param<T36 >::type _36 , typename detail::call_param<T37 >::type _37 , typename detail::call_param<T38 >::type _38 , typename detail::call_param<T39 >::type _39 , typename detail::call_param<T40 >::type _40 , typename detail::call_param<T41 >::type _41 , typename detail::call_param<T42 >::type _42 , typename detail::call_param<T43 >::type _43 , typename detail::call_param<T44 >::type _44 , typename detail::call_param<T45 >::type _45 , typename detail::call_param<T46 >::type _46 , typename detail::call_param<T47 >::type _47 , typename detail::call_param<T48 >::type _48 , typename detail::call_param<T49 >::type _49)
: base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& rhs)
: base_type(rhs) {}
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(T const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(std::pair<U1, U2> const& rhs)
{
base_type::operator=(rhs);
@@ -595,6 +749,7 @@ namespace boost { namespace fusion
template <int N, typename Tuple>
struct tuple_element : result_of::value_at_c<Tuple, N> {};
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Tuple>
@@ -605,6 +760,7 @@ namespace boost { namespace fusion
return at_c<N>(tup);
}
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_c<Tuple const, N>::type
get(Tuple const& tup)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp
index be8c547871..e5d27a7e66 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0&>
tie(T0 & _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1&>
tie(T0 & _0 , T1 & _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2&>
tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp
index f14060ec75..5e668a3120 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0&>
tie(T0 & _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1&>
tie(T0 & _0 , T1 & _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2&>
tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -79,6 +89,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -86,6 +97,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -93,6 +105,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -100,6 +113,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -107,6 +121,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -114,6 +129,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -121,6 +137,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -128,6 +145,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -135,6 +153,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -142,6 +161,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp
index 513c78069d..23e602312d 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0&>
tie(T0 & _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1&>
tie(T0 & _0 , T1 & _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2&>
tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -79,6 +89,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -86,6 +97,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -93,6 +105,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -100,6 +113,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -107,6 +121,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -114,6 +129,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -121,6 +137,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -128,6 +145,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -135,6 +153,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -142,6 +161,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -149,6 +169,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -156,6 +177,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -163,6 +185,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -170,6 +193,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -177,6 +201,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -184,6 +209,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -191,6 +217,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -198,6 +225,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -205,6 +233,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -212,6 +241,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp
index be56add684..2d020ec0cf 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0&>
tie(T0 & _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1&>
tie(T0 & _0 , T1 & _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2&>
tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -79,6 +89,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -86,6 +97,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -93,6 +105,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -100,6 +113,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -107,6 +121,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -114,6 +129,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -121,6 +137,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -128,6 +145,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -135,6 +153,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -142,6 +161,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -149,6 +169,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -156,6 +177,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -163,6 +185,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -170,6 +193,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -177,6 +201,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -184,6 +209,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -191,6 +217,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -198,6 +225,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -205,6 +233,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -212,6 +241,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
@@ -219,6 +249,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30)
{
@@ -226,6 +257,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31)
{
@@ -233,6 +265,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32)
{
@@ -240,6 +273,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33)
{
@@ -247,6 +281,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34)
{
@@ -254,6 +289,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35)
{
@@ -261,6 +297,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36)
{
@@ -268,6 +305,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37)
{
@@ -275,6 +313,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38)
{
@@ -282,6 +321,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp
index 164db79761..e30de17c6c 100644
--- a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp
@@ -9,6 +9,7 @@
namespace boost { namespace fusion
{
template <typename T0>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0&>
tie(T0 & _0)
{
@@ -16,6 +17,7 @@ namespace boost { namespace fusion
_0);
}
template <typename T0 , typename T1>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1&>
tie(T0 & _0 , T1 & _1)
{
@@ -23,6 +25,7 @@ namespace boost { namespace fusion
_0 , _1);
}
template <typename T0 , typename T1 , typename T2>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2&>
tie(T0 & _0 , T1 & _1 , T2 & _2)
{
@@ -30,6 +33,7 @@ namespace boost { namespace fusion
_0 , _1 , _2);
}
template <typename T0 , typename T1 , typename T2 , typename T3>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3)
{
@@ -37,6 +41,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4)
{
@@ -44,6 +49,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5)
{
@@ -51,6 +57,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6)
{
@@ -58,6 +65,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7)
{
@@ -65,6 +73,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8)
{
@@ -72,6 +81,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9)
{
@@ -79,6 +89,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10)
{
@@ -86,6 +97,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11)
{
@@ -93,6 +105,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12)
{
@@ -100,6 +113,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13)
{
@@ -107,6 +121,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14)
{
@@ -114,6 +129,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15)
{
@@ -121,6 +137,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16)
{
@@ -128,6 +145,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17)
{
@@ -135,6 +153,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18)
{
@@ -142,6 +161,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19)
{
@@ -149,6 +169,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20)
{
@@ -156,6 +177,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21)
{
@@ -163,6 +185,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22)
{
@@ -170,6 +193,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23)
{
@@ -177,6 +201,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24)
{
@@ -184,6 +209,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25)
{
@@ -191,6 +217,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26)
{
@@ -198,6 +225,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27)
{
@@ -205,6 +233,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28)
{
@@ -212,6 +241,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29)
{
@@ -219,6 +249,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30)
{
@@ -226,6 +257,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31)
{
@@ -233,6 +265,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32)
{
@@ -240,6 +273,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33)
{
@@ -247,6 +281,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34)
{
@@ -254,6 +289,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35)
{
@@ -261,6 +297,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36)
{
@@ -268,6 +305,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37)
{
@@ -275,6 +313,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38)
{
@@ -282,6 +321,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39)
{
@@ -289,6 +329,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40)
{
@@ -296,6 +337,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41)
{
@@ -303,6 +345,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42)
{
@@ -310,6 +353,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43)
{
@@ -317,6 +361,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44)
{
@@ -324,6 +369,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45)
{
@@ -331,6 +377,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46)
{
@@ -338,6 +385,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47)
{
@@ -345,6 +393,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48)
{
@@ -352,6 +401,7 @@ namespace boost { namespace fusion
_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48);
}
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<T0& , T1& , T2& , T3& , T4& , T5& , T6& , T7& , T8& , T9& , T10& , T11& , T12& , T13& , T14& , T15& , T16& , T17& , T18& , T19& , T20& , T21& , T22& , T23& , T24& , T25& , T26& , T27& , T28& , T29& , T30& , T31& , T32& , T33& , T34& , T35& , T36& , T37& , T38& , T39& , T40& , T41& , T42& , T43& , T44& , T45& , T46& , T47& , T48& , T49&>
tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48 , T49 & _49)
{
diff --git a/3party/boost/boost/fusion/tuple/detail/tuple_expand.hpp b/3party/boost/boost/fusion/tuple/detail/tuple_expand.hpp
index e23c2e4fe0..026ab8f492 100644
--- a/3party/boost/boost/fusion/tuple/detail/tuple_expand.hpp
+++ b/3party/boost/boost/fusion/tuple/detail/tuple_expand.hpp
@@ -27,6 +27,7 @@
#define N BOOST_PP_ITERATION()
+ BOOST_FUSION_GPU_ENABLED
#if N == 1
explicit
#endif
@@ -35,10 +36,12 @@
: base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+ BOOST_FUSION_GPU_ENABLED
tuple(tuple<BOOST_PP_ENUM_PARAMS(N, U)> const& rhs)
: base_type(rhs) {}
template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple<BOOST_PP_ENUM_PARAMS(N, U)> const& rhs)
{
base_type::operator=(rhs);
diff --git a/3party/boost/boost/fusion/tuple/make_tuple.hpp b/3party/boost/boost/fusion/tuple/make_tuple.hpp
index b2defa27bf..9c3bb45ed9 100644
--- a/3party/boost/boost/fusion/tuple/make_tuple.hpp
+++ b/3party/boost/boost/fusion/tuple/make_tuple.hpp
@@ -16,7 +16,7 @@
namespace boost { namespace fusion
{
- inline tuple<>
+ BOOST_FUSION_GPU_ENABLED inline tuple<>
make_tuple()
{
return tuple<>();
@@ -73,6 +73,7 @@ namespace boost { namespace fusion
#define N BOOST_PP_ITERATION()
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
make_tuple(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
{
diff --git a/3party/boost/boost/fusion/tuple/tuple.hpp b/3party/boost/boost/fusion/tuple/tuple.hpp
index 62350721a0..953f2b6664 100644
--- a/3party/boost/boost/fusion/tuple/tuple.hpp
+++ b/3party/boost/boost/fusion/tuple/tuple.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_TUPLE_10032005_0810)
#define FUSION_TUPLE_10032005_0810
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/tuple/tuple_fwd.hpp>
#include <boost/fusion/container/vector/vector.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@@ -47,25 +48,28 @@ namespace boost { namespace fusion
BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>
base_type;
- tuple()
+ BOOST_FUSION_GPU_ENABLED tuple()
: base_type() {}
- tuple(tuple const& rhs)
+ BOOST_FUSION_GPU_ENABLED tuple(tuple const& rhs)
: base_type(rhs) {}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple(std::pair<U1, U2> const& rhs)
: base_type(rhs) {}
#include <boost/fusion/tuple/detail/tuple_expand.hpp>
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(T const& rhs)
{
base_type::operator=(rhs);
return *this;
}
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(tuple const& rhs)
{
base_type::operator=(rhs);
@@ -73,6 +77,7 @@ namespace boost { namespace fusion
}
template <typename U1, typename U2>
+ BOOST_FUSION_GPU_ENABLED
tuple& operator=(std::pair<U1, U2> const& rhs)
{
base_type::operator=(rhs);
@@ -87,6 +92,7 @@ namespace boost { namespace fusion
struct tuple_element : result_of::value_at_c<Tuple, N> {};
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Tuple>
@@ -98,6 +104,7 @@ namespace boost { namespace fusion
}
template <int N, typename Tuple>
+ BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_c<Tuple const, N>::type
get(Tuple const& tup)
{
@@ -112,3 +119,4 @@ namespace boost { namespace fusion
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
#endif
+
diff --git a/3party/boost/boost/fusion/tuple/tuple_fwd.hpp b/3party/boost/boost/fusion/tuple/tuple_fwd.hpp
index e4dbbd2802..68969183d1 100644
--- a/3party/boost/boost/fusion/tuple/tuple_fwd.hpp
+++ b/3party/boost/boost/fusion/tuple/tuple_fwd.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_TUPLE_FORWARD_10032005_0956)
#define FUSION_TUPLE_FORWARD_10032005_0956
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/limits.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
@@ -48,3 +49,4 @@ namespace boost { namespace fusion
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
#endif
+
diff --git a/3party/boost/boost/fusion/tuple/tuple_tie.hpp b/3party/boost/boost/fusion/tuple/tuple_tie.hpp
index 726a5528a5..eeb0c15888 100644
--- a/3party/boost/boost/fusion/tuple/tuple_tie.hpp
+++ b/3party/boost/boost/fusion/tuple/tuple_tie.hpp
@@ -63,6 +63,7 @@ namespace boost { namespace fusion
#define N BOOST_PP_ITERATION()
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ BOOST_FUSION_GPU_ENABLED
inline tuple<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
{
diff --git a/3party/boost/boost/fusion/view.hpp b/3party/boost/boost/fusion/view.hpp
index 36ecf1cd1f..4cb49122d2 100644
--- a/3party/boost/boost/fusion/view.hpp
+++ b/3party/boost/boost/fusion/view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_VIEW_10022005_0620)
#define FUSION_SEQUENCE_VIEW_10022005_0620
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/filter_view.hpp>
#include <boost/fusion/view/iterator_range.hpp>
#include <boost/fusion/view/joint_view.hpp>
@@ -15,5 +16,6 @@
#include <boost/fusion/view/reverse_view.hpp>
#include <boost/fusion/view/transform_view.hpp>
#include <boost/fusion/view/zip_view.hpp>
+#include <boost/fusion/view/flatten_view.hpp>
#endif
diff --git a/3party/boost/boost/fusion/view/detail/strictest_traversal.hpp b/3party/boost/boost/fusion/view/detail/strictest_traversal.hpp
index 7b7c976048..4092ea4da6 100644
--- a/3party/boost/boost/fusion/view/detail/strictest_traversal.hpp
+++ b/3party/boost/boost/fusion/view/detail/strictest_traversal.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_STRICTEST_TRAVERSAL_20060123_2101)
#define FUSION_STRICTEST_TRAVERSAL_20060123_2101
+#include <boost/fusion/support/config.hpp>
#include <boost/config.hpp>
#include <boost/mpl/or.hpp>
#include <boost/mpl/if.hpp>
@@ -56,8 +57,9 @@ namespace boost { namespace fusion
};
// never called, but needed for decltype-based result_of (C++0x)
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template<typename StrictestSoFar, typename Next>
+ BOOST_FUSION_GPU_ENABLED
typename result<strictest_traversal_impl(StrictestSoFar, Next)>::type
operator()(StrictestSoFar&&, Next&&) const;
#endif
diff --git a/3party/boost/boost/fusion/view/filter_view.hpp b/3party/boost/boost/fusion/view/filter_view.hpp
index 3986d7d9b1..2226026b6b 100644
--- a/3party/boost/boost/fusion/view/filter_view.hpp
+++ b/3party/boost/boost/fusion/view/filter_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_VIEW_FILTER_VIEW_10022005_0608)
#define FUSION_SEQUENCE_VIEW_FILTER_VIEW_10022005_0608
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/filter_view/filter_view.hpp>
#include <boost/fusion/view/filter_view/filter_view_iterator.hpp>
diff --git a/3party/boost/boost/fusion/view/filter_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/begin_impl.hpp
index cb1a08c687..89f67d02ad 100644
--- a/3party/boost/boost/fusion/view/filter_view/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/detail/begin_impl.hpp
@@ -31,6 +31,7 @@ namespace boost { namespace fusion
typedef typename Sequence::category category;
typedef filter_iterator<category, first_type, last_type, pred_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/view/filter_view/detail/deref_data_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/deref_data_impl.hpp
index bf721b5a5a..ba8631f501 100644
--- a/3party/boost/boost/fusion/view/filter_view/detail/deref_data_impl.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/detail/deref_data_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
#define BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref_data.hpp>
namespace boost { namespace fusion { namespace extension
@@ -25,6 +26,7 @@ namespace boost { namespace fusion { namespace extension
result_of::deref_data<typename It::first_type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{
diff --git a/3party/boost/boost/fusion/view/filter_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/deref_impl.hpp
index c535b7f272..d122dc5378 100644
--- a/3party/boost/boost/fusion/view/filter_view/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/detail/deref_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_DEREF_IMPL_05062005_0905)
#define FUSION_DEREF_IMPL_05062005_0905
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/detail/adapt_deref_traits.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/view/filter_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/end_impl.hpp
index 195cb0a40b..fee9f6d459 100644
--- a/3party/boost/boost/fusion/view/filter_view/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/detail/end_impl.hpp
@@ -30,6 +30,7 @@ namespace boost { namespace fusion
typedef typename Sequence::category category;
typedef filter_iterator<category,last_type, last_type, pred_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/view/filter_view/detail/key_of_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/key_of_impl.hpp
index 09d9112b1f..4ab69a6950 100644
--- a/3party/boost/boost/fusion/view/filter_view/detail/key_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/detail/key_of_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_KEY_OF_IMPL_HPP
#define BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_KEY_OF_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/key_of.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/view/filter_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/next_impl.hpp
index ae1e0f0dae..0091e897ea 100644
--- a/3party/boost/boost/fusion/view/filter_view/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/detail/next_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_NEXT_IMPL_06052005_0900)
#define FUSION_NEXT_IMPL_06052005_0900
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -62,6 +63,7 @@ namespace boost { namespace fusion
category, typename filter::type, last_type, pred_type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/filter_view/detail/size_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/size_impl.hpp
index 158ee01363..f6cf17cb32 100644
--- a/3party/boost/boost/fusion/view/filter_view/detail/size_impl.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/detail/size_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SIZE_IMPL_09232005_1058)
#define FUSION_SIZE_IMPL_09232005_1058
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/distance.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
diff --git a/3party/boost/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp
index 38d1bdc063..a845ac2a5c 100644
--- a/3party/boost/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
#define BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of_data.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/view/filter_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/value_of_impl.hpp
index ad4ba611bc..b460a48bc1 100644
--- a/3party/boost/boost/fusion/view/filter_view/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/detail/value_of_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VALUE_OF_IMPL_05062005_0857)
#define FUSION_VALUE_OF_IMPL_05062005_0857
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/detail/adapt_value_traits.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/view/filter_view/filter_view.hpp b/3party/boost/boost/fusion/view/filter_view/filter_view.hpp
index 6b6ad4b718..dd710fabd1 100644
--- a/3party/boost/boost/fusion/view/filter_view/filter_view.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/filter_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_FILTER_VIEW_HPP)
#define FUSION_SEQUENCE_FILTER_VIEW_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/is_view.hpp>
@@ -45,11 +46,14 @@ namespace boost { namespace fusion
typedef typename result_of::end<Sequence>::type last_type;
typedef Pred pred_type;
+ BOOST_FUSION_GPU_ENABLED
filter_view(Sequence& in_seq)
: seq(in_seq)
{}
+ BOOST_FUSION_GPU_ENABLED
first_type first() const { return fusion::begin(seq); }
+ BOOST_FUSION_GPU_ENABLED
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
diff --git a/3party/boost/boost/fusion/view/filter_view/filter_view_iterator.hpp b/3party/boost/boost/fusion/view/filter_view/filter_view_iterator.hpp
index 66975bd5a1..14aaa46005 100644
--- a/3party/boost/boost/fusion/view/filter_view/filter_view_iterator.hpp
+++ b/3party/boost/boost/fusion/view/filter_view/filter_view_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_FILTER_VIEW_ITERATOR_05062005_0849)
#define FUSION_FILTER_VIEW_ITERATOR_05062005_0849
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
#include <boost/fusion/iterator/value_of.hpp>
@@ -54,6 +55,7 @@ namespace boost { namespace fusion
typedef last_iter last_type;
typedef Pred pred_type;
+ BOOST_FUSION_GPU_ENABLED
filter_iterator(First const& in_first)
: first(filter::iter_call(first_converter::call(in_first))) {}
diff --git a/3party/boost/boost/fusion/view/flatten_view.hpp b/3party/boost/boost/fusion/view/flatten_view.hpp
new file mode 100644
index 0000000000..dcef08dec7
--- /dev/null
+++ b/3party/boost/boost/fusion/view/flatten_view.hpp
@@ -0,0 +1,15 @@
+/*//////////////////////////////////////////////////////////////////////////////
+ Copyright (c) 2013 Jamboree
+
+ 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_FUSION_SEQUENCE_FLATTEN_VIEW_HPP_INCLUDED
+#define BOOST_FUSION_SEQUENCE_FLATTEN_VIEW_HPP_INCLUDED
+
+
+#include <boost/fusion/view/flatten_view/flatten_view.hpp>
+#include <boost/fusion/view/flatten_view/flatten_view_iterator.hpp>
+
+
+#endif
diff --git a/3party/boost/boost/fusion/view/flatten_view/flatten_view.hpp b/3party/boost/boost/fusion/view/flatten_view/flatten_view.hpp
new file mode 100644
index 0000000000..aa47240771
--- /dev/null
+++ b/3party/boost/boost/fusion/view/flatten_view/flatten_view.hpp
@@ -0,0 +1,127 @@
+/*//////////////////////////////////////////////////////////////////////////////
+ Copyright (c) 2013 Jamboree
+
+ 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_FUSION_FLATTEN_VIEW_HPP_INCLUDED
+#define BOOST_FUSION_FLATTEN_VIEW_HPP_INCLUDED
+
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/single_view.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/is_view.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/view/flatten_view/flatten_view_iterator.hpp>
+
+
+namespace boost { namespace fusion
+{
+ struct forward_traversal_tag;
+ struct flatten_view_tag;
+
+ template <typename Sequence>
+ struct flatten_view
+ : sequence_base<flatten_view<Sequence> >
+ {
+ typedef flatten_view_tag fusion_tag;
+ typedef fusion_sequence_tag tag; // this gets picked up by MPL
+ typedef mpl::true_ is_view;
+ typedef forward_traversal_tag category;
+
+ typedef Sequence sequence_type;
+ typedef typename result_of::begin<Sequence>::type first_type;
+ typedef typename result_of::end<Sequence>::type last_type;
+
+ explicit flatten_view(Sequence& seq)
+ : seq(seq)
+ {}
+
+ first_type first() const { return fusion::begin(seq); }
+ last_type last() const { return fusion::end(seq); }
+
+ typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
+ };
+}}
+
+namespace boost { namespace fusion { namespace extension
+{
+ template<>
+ struct begin_impl<flatten_view_tag>
+ {
+ template<typename Sequence>
+ struct apply
+ {
+ typedef typename Sequence::first_type first_type;
+
+ typedef typename
+ result_of::begin<
+ mpl::single_view<
+ typename Sequence::sequence_type> >::type
+ root_iterator;
+
+ typedef
+ detail::seek_descent<root_iterator, first_type>
+ seek_descent;
+
+ typedef typename seek_descent::type type;
+
+ static inline
+ type call(Sequence& seq)
+ {
+ return seek_descent::apply(root_iterator(), seq.first());
+ }
+ };
+ };
+
+ template<>
+ struct end_impl<flatten_view_tag>
+ {
+ template<typename Sequence>
+ struct apply
+ {
+ typedef typename Sequence::last_type last_type;
+
+ typedef typename
+ result_of::end<
+ mpl::single_view<
+ typename Sequence::sequence_type> >::type
+ type;
+
+ static inline
+ type call(Sequence&)
+ {
+ return type();
+ }
+ };
+ };
+
+ template<>
+ struct size_impl<flatten_view_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ : result_of::distance
+ <
+ typename result_of::begin<Sequence>::type
+ , typename result_of::end<Sequence>::type
+ >
+ {};
+ };
+
+ template<>
+ struct empty_impl<flatten_view_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ : result_of::empty<typename Sequence::sequence_type>
+ {};
+ };
+}}}
+
+
+#endif
diff --git a/3party/boost/boost/fusion/view/flatten_view/flatten_view_iterator.hpp b/3party/boost/boost/fusion/view/flatten_view/flatten_view_iterator.hpp
new file mode 100644
index 0000000000..dfe613ac84
--- /dev/null
+++ b/3party/boost/boost/fusion/view/flatten_view/flatten_view_iterator.hpp
@@ -0,0 +1,199 @@
+/*//////////////////////////////////////////////////////////////////////////////
+ Copyright (c) 2013 Jamboree
+
+ 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_FUSION_FLATTEN_VIEW_ITERATOR_HPP_INCLUDED
+#define BOOST_FUSION_FLATTEN_VIEW_ITERATOR_HPP_INCLUDED
+
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/fusion/container/list/cons.hpp>
+#include <boost/fusion/support/unused.hpp>
+#include <boost/fusion/include/equal_to.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+
+
+namespace boost { namespace fusion
+{
+ struct forward_traversal_tag;
+ struct flatten_view_iterator_tag;
+
+ template<class First, class Base>
+ struct flatten_view_iterator
+ : iterator_base<flatten_view_iterator<First, Base> >
+ {
+ typedef flatten_view_iterator_tag fusion_tag;
+ typedef forward_traversal_tag category;
+
+ typedef convert_iterator<First> first_converter;
+ typedef typename first_converter::type first_type;
+ typedef Base base_type;
+
+ flatten_view_iterator(First const& first, Base const& base)
+ : first(first), base(base)
+ {}
+
+ first_type first;
+ base_type base;
+ };
+}}
+
+namespace boost { namespace fusion { namespace detail
+{
+ template<class Iterator, class = void>
+ struct make_descent_cons
+ {
+ typedef cons<Iterator> type;
+
+ static inline type apply(Iterator const& it)
+ {
+ return type(it);
+ }
+ };
+
+ template<class Iterator>
+ struct make_descent_cons<Iterator,
+ typename enable_if<traits::is_sequence<
+ typename result_of::value_of<Iterator>::type> >::type>
+ {
+ // we use 'value_of' above for convenience, assuming the value won't be reference,
+ // while we must use the regular 'deref' here for const issues...
+ typedef typename
+ remove_reference<typename result_of::deref<Iterator>::type>::type
+ sub_sequence;
+
+ typedef typename
+ result_of::begin<sub_sequence>::type
+ sub_begin;
+
+ typedef cons<Iterator, typename make_descent_cons<sub_begin>::type> type;
+
+ static inline type apply(Iterator const& it)
+ {
+ return type(it, make_descent_cons<sub_begin>::apply(
+ fusion::begin(*it)));
+ }
+ };
+
+ template<class Cons, class Base>
+ struct build_flatten_view_iterator;
+
+ template<class Car, class Base>
+ struct build_flatten_view_iterator<cons<Car>, Base>
+ {
+ typedef flatten_view_iterator<Car, Base> type;
+
+ static inline type apply(cons<Car> const& cons, Base const& base)
+ {
+ return type(cons.car, base);
+ }
+ };
+
+ template<class Car, class Cdr, class Base>
+ struct build_flatten_view_iterator<cons<Car, Cdr>, Base>
+ {
+ typedef flatten_view_iterator<Car, Base> next_base;
+ typedef build_flatten_view_iterator<Cdr, next_base> next;
+ typedef typename next::type type;
+
+ static inline type apply(cons<Car, Cdr> const& cons, Base const& base)
+ {
+ return next::apply(cons.cdr, next_base(cons.car, base));
+ }
+ };
+
+ template<class Base, class Iterator, class = void>
+ struct seek_descent
+ {
+ typedef make_descent_cons<Iterator> make_descent_cons_;
+ typedef typename make_descent_cons_::type cons_type;
+ typedef
+ build_flatten_view_iterator<cons_type, Base>
+ build_flatten_view_iterator_;
+ typedef typename build_flatten_view_iterator_::type type;
+
+ static inline type apply(Base const& base, Iterator const& it)
+ {
+ return build_flatten_view_iterator_::apply(
+ make_descent_cons_::apply(it), base);
+ }
+ };
+
+ template<class Base, class Iterator>
+ struct seek_descent<Base, Iterator,
+ typename enable_if<
+ result_of::equal_to<Iterator, typename result_of::end<
+ typename result_of::value_of<Base>::type>::type> >::type>
+ {
+ typedef typename result_of::next<Base>::type type;
+
+ static inline type apply(Base const& base, Iterator const&)
+ {
+ return fusion::next(base);
+ }
+ };
+}}}
+
+namespace boost { namespace fusion { namespace extension
+{
+ template<>
+ struct next_impl<flatten_view_iterator_tag>
+ {
+ template<typename Iterator>
+ struct apply
+ {
+ typedef typename Iterator::first_type first_type;
+ typedef typename Iterator::base_type base_type;
+ typedef typename result_of::next<first_type>::type next_type;
+
+ typedef detail::seek_descent<base_type, next_type> seek_descent;
+ typedef typename seek_descent::type type;
+
+ static inline
+ type call(Iterator const& it)
+ {
+ return seek_descent::apply(it.base, fusion::next(it.first));
+ }
+ };
+ };
+
+ template<>
+ struct deref_impl<flatten_view_iterator_tag>
+ {
+ template<typename Iterator>
+ struct apply
+ {
+ typedef typename
+ result_of::deref<typename Iterator::first_type>::type
+ type;
+
+ static inline
+ type call(Iterator const& it)
+ {
+ return *it.first;
+ }
+ };
+ };
+
+ template<>
+ struct value_of_impl<flatten_view_iterator_tag>
+ {
+ template<typename Iterator>
+ struct apply
+ {
+ typedef typename
+ result_of::value_of<typename Iterator::first_type>::type
+ type;
+ };
+ };
+}}}
+
+
+#endif
+
diff --git a/3party/boost/boost/fusion/view/iterator_range.hpp b/3party/boost/boost/fusion/view/iterator_range.hpp
index 800600704e..78d6ffad9e 100644
--- a/3party/boost/boost/fusion/view/iterator_range.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_VIEW_ITERATOR_RANGE_10022005_0610)
#define FUSION_SEQUENCE_VIEW_ITERATOR_RANGE_10022005_0610
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/iterator_range/iterator_range.hpp>
#endif
diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/at_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/at_impl.hpp
index 1b425231ec..0626ae2ec5 100644
--- a/3party/boost/boost/fusion/view/iterator_range/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range/detail/at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_ITERATOR_RANGE_AT_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_ITERATOR_RANGE_AT_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/advance.hpp>
#include <boost/fusion/iterator/deref.hpp>
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
typedef typename result_of::advance<begin_type,N>::type pos;
typedef typename result_of::deref<pos>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& s)
{
diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/begin_impl.hpp
index 2902e73bc1..e34b6ede30 100644
--- a/3party/boost/boost/fusion/view/iterator_range/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range/detail/begin_impl.hpp
@@ -24,6 +24,7 @@ namespace boost { namespace fusion
{
typedef typename Sequence::begin_type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/end_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/end_impl.hpp
index 3147afe107..2428198cb8 100644
--- a/3party/boost/boost/fusion/view/iterator_range/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range/detail/end_impl.hpp
@@ -24,6 +24,7 @@ namespace boost { namespace fusion
{
typedef typename Sequence::end_type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp
index 032225dc2b..88f4358bdf 100644
--- a/3party/boost/boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED)
#define BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/bool.hpp>
diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp
index 9bf459c4ec..7dc4506c79 100644
--- a/3party/boost/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_RANGE_HPP_INCLUDED)
#define BOOST_FUSION_SEGMENTED_ITERATOR_RANGE_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
@@ -47,6 +48,7 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename T>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -55,6 +57,7 @@ namespace boost { namespace fusion
push_back(Sequence const& seq, T const& x);
template <typename Sequence, typename T>
+ BOOST_FUSION_GPU_ENABLED
typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -70,7 +73,7 @@ namespace boost { namespace fusion { namespace detail
// switch (size(stack_begin))
// {
// case 1:
- // return nil;
+ // return nil_;
// case 2:
// // car(cdr(stack_begin)) is a range over values.
// assert(end(front(car(stack_begin))) == end(car(cdr(stack_begin))));
@@ -149,6 +152,7 @@ namespace boost { namespace fusion { namespace detail
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const& stack)
{
//return segment_sequence(
@@ -195,6 +199,7 @@ namespace boost { namespace fusion { namespace detail
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const& stack)
{
// return iterator_range(begin(car(cdr(stack_begin))), end(front(car(stack_begin))));
@@ -205,8 +210,9 @@ namespace boost { namespace fusion { namespace detail
template <typename Stack>
struct make_segment_sequence_front<Stack, 1>
{
- typedef typename Stack::cdr_type type; // nil
+ typedef typename Stack::cdr_type type; // nil_
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const &stack)
{
return stack.cdr;
@@ -218,7 +224,7 @@ namespace boost { namespace fusion { namespace detail
// switch (size(stack_end))
// {
// case 1:
- // return nil;
+ // return nil_;
// case 2:
// // car(cdr(stack_back)) is a range over values.
// assert(end(front(car(stack_end))) == end(car(cdr(stack_end))));
@@ -292,6 +298,7 @@ namespace boost { namespace fusion { namespace detail
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const& stack)
{
// return segment_sequence(
@@ -338,6 +345,7 @@ namespace boost { namespace fusion { namespace detail
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const& stack)
{
// return iterator_range(begin(front(car(stack_end))), begin(car(cdr(stack_end))));
@@ -348,8 +356,9 @@ namespace boost { namespace fusion { namespace detail
template <typename Stack>
struct make_segment_sequence_back<Stack, 1>
{
- typedef typename Stack::cdr_type type; // nil
+ typedef typename Stack::cdr_type type; // nil_
+ BOOST_FUSION_GPU_ENABLED
static type call(Stack const& stack)
{
return stack.cdr;
@@ -428,6 +437,7 @@ namespace boost { namespace fusion { namespace detail
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(StackBegin stack_begin, StackEnd stack_end)
{
//return segment_sequence(
@@ -461,6 +471,7 @@ namespace boost { namespace fusion { namespace detail
typename impl::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(StackBegin stack_begin, StackEnd stack_end)
{
return impl::call(stack_begin.cdr, stack_end.cdr);
@@ -490,6 +501,7 @@ namespace boost { namespace fusion { namespace detail
segment_sequence<segment_type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(StackBegin stack_begin, StackEnd stack_end)
{
//return segment_sequence(
@@ -519,6 +531,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename impl::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Begin const& begin, End const& end)
{
return impl::call(
diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/segments_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/segments_impl.hpp
index ede49683d0..9d570cf1f0 100644
--- a/3party/boost/boost/fusion/view/iterator_range/detail/segments_impl.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range/detail/segments_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_ITERATOR_RANGE_SEGMENTS_HPP_INCLUDED)
#define BOOST_FUSION_ITERATOR_RANGE_SEGMENTS_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/fusion/sequence/intrinsic/segments.hpp>
#include <boost/fusion/support/is_segmented.hpp>
@@ -40,6 +41,7 @@ namespace boost { namespace fusion
typename result_of::segments<typename impl::type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence & seq)
{
return fusion::segments(impl::call(seq.first, seq.last));
diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/size_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/size_impl.hpp
index 90951b2ff9..0678e5dde1 100644
--- a/3party/boost/boost/fusion/view/iterator_range/detail/size_impl.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range/detail/size_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_ITERATOR_RANGE_SIZE_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_ITERATOR_RANGE_SIZE_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/distance.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/value_at_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/value_at_impl.hpp
index b6fe888179..652b8da192 100644
--- a/3party/boost/boost/fusion/view/iterator_range/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range/detail/value_at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_ITERATOR_RANGE_VALUE_AT_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_ITERATOR_RANGE_VALUE_AT_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/advance.hpp>
#include <boost/fusion/iterator/value_of.hpp>
diff --git a/3party/boost/boost/fusion/view/iterator_range/iterator_range.hpp b/3party/boost/boost/fusion/view/iterator_range/iterator_range.hpp
index 4f517c8d8a..f5aafd4a19 100644
--- a/3party/boost/boost/fusion/view/iterator_range/iterator_range.hpp
+++ b/3party/boost/boost/fusion/view/iterator_range/iterator_range.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_ITERATOR_RANGE_05062005_1224)
#define FUSION_ITERATOR_RANGE_05062005_1224
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/category_of.hpp>
@@ -43,6 +44,7 @@ namespace boost { namespace fusion
typedef typename traits::category_of<begin_type>::type category;
+ BOOST_FUSION_GPU_ENABLED
iterator_range(First const& in_first, Last const& in_last)
: first(convert_iterator<First>::call(in_first))
, last(convert_iterator<Last>::call(in_last)) {}
diff --git a/3party/boost/boost/fusion/view/joint_view.hpp b/3party/boost/boost/fusion/view/joint_view.hpp
index 457926ad1f..58be4b8620 100644
--- a/3party/boost/boost/fusion/view/joint_view.hpp
+++ b/3party/boost/boost/fusion/view/joint_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_VIEW_JOINT_VIEW_10022005_0610)
#define FUSION_SEQUENCE_VIEW_JOINT_VIEW_10022005_0610
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/joint_view/joint_view.hpp>
#include <boost/fusion/view/joint_view/joint_view_iterator.hpp>
diff --git a/3party/boost/boost/fusion/view/joint_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/begin_impl.hpp
index a85a7e152e..f58d129042 100644
--- a/3party/boost/boost/fusion/view/joint_view/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/detail/begin_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_BEGIN_IMPL_07162005_0115)
#define FUSION_BEGIN_IMPL_07162005_0115
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/mpl/if.hpp>
@@ -42,18 +43,21 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s, mpl::true_)
{
return s.concat();
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s, mpl::false_)
{
return type(s.first(), s.concat());
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/view/joint_view/detail/deref_data_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/deref_data_impl.hpp
index a60a125fa9..02780d99d9 100644
--- a/3party/boost/boost/fusion/view/joint_view/detail/deref_data_impl.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/detail/deref_data_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
#define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref_data.hpp>
namespace boost { namespace fusion { namespace extension
@@ -25,6 +26,7 @@ namespace boost { namespace fusion { namespace extension
result_of::deref_data<typename It::first_type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{
diff --git a/3party/boost/boost/fusion/view/joint_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/deref_impl.hpp
index ea4055de8a..0e1e39fffa 100644
--- a/3party/boost/boost/fusion/view/joint_view/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/detail/deref_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_DEREF_IMPL_07162005_0137)
#define FUSION_DEREF_IMPL_07162005_0137
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/detail/adapt_deref_traits.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/view/joint_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/end_impl.hpp
index 7b88e56c48..b9e0113815 100644
--- a/3party/boost/boost/fusion/view/joint_view/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/detail/end_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_END_IMPL_07162005_0128)
#define FUSION_END_IMPL_07162005_0128
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/mpl/if.hpp>
@@ -27,6 +28,7 @@ namespace boost { namespace fusion
{
typedef typename Sequence::concat_last_type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/view/joint_view/detail/key_of_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/key_of_impl.hpp
index e413c3d441..ec682f614d 100644
--- a/3party/boost/boost/fusion/view/joint_view/detail/key_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/detail/key_of_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_KEY_OF_IMPL_HPP
#define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_KEY_OF_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/key_of.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/view/joint_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/next_impl.hpp
index 47b4d486f2..a3c066d1f3 100644
--- a/3party/boost/boost/fusion/view/joint_view/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/detail/next_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_NEXT_IMPL_07162005_0136)
#define FUSION_NEXT_IMPL_07162005_0136
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/mpl/if.hpp>
@@ -44,18 +45,21 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i, mpl::true_)
{
return i.concat;
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i, mpl::false_)
{
return type(fusion::next(i.first), i.concat);
}
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp
index cc883d7023..f797135b39 100644
--- a/3party/boost/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
#define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of_data.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/view/joint_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/value_of_impl.hpp
index 98637e4e5f..f058a60cbc 100644
--- a/3party/boost/boost/fusion/view/joint_view/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/detail/value_of_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VALUE_IMPL_07162005_0132)
#define FUSION_VALUE_IMPL_07162005_0132
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/detail/adapt_value_traits.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/view/joint_view/joint_view.hpp b/3party/boost/boost/fusion/view/joint_view/joint_view.hpp
index 11b74f9c26..3ad3191420 100644
--- a/3party/boost/boost/fusion/view/joint_view/joint_view.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/joint_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_JOINT_VIEW_07162005_0140)
#define FUSION_JOINT_VIEW_07162005_0140
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/joint_view/joint_view_fwd.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/is_view.hpp>
@@ -55,13 +56,17 @@ namespace boost { namespace fusion
result_of::size<Sequence1>::value + result_of::size<Sequence2>::value>
size;
+ BOOST_FUSION_GPU_ENABLED
joint_view(Sequence1& in_seq1, Sequence2& in_seq2)
: seq1(in_seq1)
, seq2(in_seq2)
{}
+ BOOST_FUSION_GPU_ENABLED
first_type first() const { return fusion::begin(seq1); }
+ BOOST_FUSION_GPU_ENABLED
concat_type concat() const { return fusion::begin(seq2); }
+ BOOST_FUSION_GPU_ENABLED
concat_last_type concat_last() const { return fusion::end(seq2); }
private:
diff --git a/3party/boost/boost/fusion/view/joint_view/joint_view_iterator.hpp b/3party/boost/boost/fusion/view/joint_view/joint_view_iterator.hpp
index 6f5824851f..9858474078 100644
--- a/3party/boost/boost/fusion/view/joint_view/joint_view_iterator.hpp
+++ b/3party/boost/boost/fusion/view/joint_view/joint_view_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_JOINT_VIEW_ITERATOR_07162005_0140)
#define FUSION_JOINT_VIEW_ITERATOR_07162005_0140
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
@@ -40,6 +41,7 @@ namespace boost { namespace fusion
typedef Category category;
BOOST_STATIC_ASSERT((!result_of::equal_to<first_type, last_type>::value));
+ BOOST_FUSION_GPU_ENABLED
joint_view_iterator(First const& in_first, Concat const& in_concat)
: first(first_converter::call(in_first))
, concat(concat_converter::call(in_concat))
diff --git a/3party/boost/boost/fusion/view/nview.hpp b/3party/boost/boost/fusion/view/nview.hpp
index 28d85e0f7d..b8b51cee18 100644
--- a/3party/boost/boost/fusion/view/nview.hpp
+++ b/3party/boost/boost/fusion/view/nview.hpp
@@ -9,6 +9,7 @@
#if !defined(FUSION_NVIEW_SEP_23_2009_1107PM)
#define FUSION_NVIEW_SEP_23_2009_1107PM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/nview/nview.hpp>
#include <boost/fusion/view/nview/nview_iterator.hpp>
diff --git a/3party/boost/boost/fusion/view/nview/detail/advance_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/advance_impl.hpp
index 391bebd8b0..ad82983eac 100644
--- a/3party/boost/boost/fusion/view/nview/detail/advance_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/advance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_ADVANCE_IMPL_SEP_24_2009_0212PM)
#define BOOST_FUSION_NVIEW_ADVANCE_IMPL_SEP_24_2009_0212PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/advance.hpp>
#include <boost/fusion/iterator/advance.hpp>
@@ -35,6 +36,7 @@ namespace boost { namespace fusion
typedef nview_iterator<sequence_type,
typename mpl::advance<iterator_type, Dist>::type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/nview/detail/at_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/at_impl.hpp
index f1f41642ab..45f9faf6f6 100644
--- a/3party/boost/boost/fusion/view/nview/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_AT_IMPL_SEP_24_2009_0225PM)
#define BOOST_FUSION_NVIEW_AT_IMPL_SEP_24_2009_0225PM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
namespace boost { namespace fusion
@@ -31,6 +32,7 @@ namespace boost { namespace fusion
typedef typename result_of::at<index_type, N>::type index;
typedef typename result_of::at<sequence_type, index>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/view/nview/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/begin_impl.hpp
index 8ba59fc5d8..ca600b9a16 100644
--- a/3party/boost/boost/fusion/view/nview/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/begin_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_BEGIN_IMPL_SEP_23_2009_1036PM)
#define BOOST_FUSION_NVIEW_BEGIN_IMPL_SEP_23_2009_1036PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/begin.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
@@ -34,6 +35,7 @@ namespace boost { namespace fusion
typedef nview_iterator<Sequence,
typename mpl::begin<index_type>::type> type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& s)
{
return type(s);
diff --git a/3party/boost/boost/fusion/view/nview/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/deref_impl.hpp
index 075f0b0f18..bbdb982528 100644
--- a/3party/boost/boost/fusion/view/nview/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/deref_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_DEREF_IMPL_SEP_24_2009_0818AM)
#define BOOST_FUSION_NVIEW_DEREF_IMPL_SEP_24_2009_0818AM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/container/vector.hpp>
@@ -33,6 +34,7 @@ namespace boost { namespace fusion
typedef typename result_of::at<
typename sequence_type::sequence_type, index>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Iterator const& i)
{
return at<index>(i.seq.seq);
diff --git a/3party/boost/boost/fusion/view/nview/detail/distance_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/distance_impl.hpp
index 8b1906f6d2..e3e5a9a086 100644
--- a/3party/boost/boost/fusion/view/nview/detail/distance_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/distance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_DISTANCE_IMPL_SEP_23_2009_0328PM)
#define BOOST_FUSION_NVIEW_DISTANCE_IMPL_SEP_23_2009_0328PM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/distance.hpp>
namespace boost { namespace fusion
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
typename First::first_type, typename Last::first_type
>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(First const& /*first*/, Last const& /*last*/)
{
diff --git a/3party/boost/boost/fusion/view/nview/detail/end_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/end_impl.hpp
index 7897748b7d..d36260dbb7 100644
--- a/3party/boost/boost/fusion/view/nview/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/end_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_END_IMPL_SEP_24_2009_0140PM)
#define BOOST_FUSION_NVIEW_END_IMPL_SEP_24_2009_0140PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/end.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
@@ -35,6 +36,7 @@ namespace boost { namespace fusion
typedef nview_iterator<Sequence,
typename mpl::end<index_type>::type> type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Sequence& s)
{
return type(s);
diff --git a/3party/boost/boost/fusion/view/nview/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/equal_to_impl.hpp
index 517204b078..4b04788bb6 100644
--- a/3party/boost/boost/fusion/view/nview/detail/equal_to_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/equal_to_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_ITERATOR_SEP_24_2009_0329PM)
#define BOOST_FUSION_NVIEW_ITERATOR_SEP_24_2009_0329PM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/view/nview/detail/next_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/next_impl.hpp
index 01cccf2b84..5193bfe655 100644
--- a/3party/boost/boost/fusion/view/nview/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/next_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_NEXT_IMPL_SEP_24_2009_0116PM)
#define BOOST_FUSION_NVIEW_NEXT_IMPL_SEP_24_2009_0116PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/next.hpp>
namespace boost { namespace fusion
@@ -34,6 +35,7 @@ namespace boost { namespace fusion
typedef nview_iterator<sequence_type,
typename mpl::next<first_type>::type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/nview/detail/nview_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/nview_impl.hpp
index 555c34eac1..6c7a3e21d1 100644
--- a/3party/boost/boost/fusion/view/nview/detail/nview_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/nview_impl.hpp
@@ -63,6 +63,7 @@ namespace boost { namespace fusion { namespace result_of
namespace boost { namespace fusion
{
template<BOOST_PP_ENUM_PARAMS(N, int I), typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
inline nview<Sequence, mpl::vector_c<int, BOOST_PP_ENUM_PARAMS(N, I)> >
as_nview(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/view/nview/detail/prior_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/prior_impl.hpp
index 079a9ca6c9..374b45f669 100644
--- a/3party/boost/boost/fusion/view/nview/detail/prior_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/prior_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_PRIOR_IMPL_SEP_24_2009_0142PM)
#define BOOST_FUSION_NVIEW_PRIOR_IMPL_SEP_24_2009_0142PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/prior.hpp>
namespace boost { namespace fusion
@@ -34,6 +35,7 @@ namespace boost { namespace fusion
typedef nview_iterator<sequence_type,
typename mpl::prior<first_type>::type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/nview/detail/size_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/size_impl.hpp
index e367f89925..57e6765386 100644
--- a/3party/boost/boost/fusion/view/nview/detail/size_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/size_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_NVIEW_SIZE_IMPL_OCT_06_2009_0525PM)
#define FUSION_NVIEW_SIZE_IMPL_OCT_06_2009_0525PM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/distance.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
diff --git a/3party/boost/boost/fusion/view/nview/detail/value_at_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/value_at_impl.hpp
index 145bb629bb..2afe9bee61 100644
--- a/3party/boost/boost/fusion/view/nview/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/value_at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_VALUE_AT_IMPL_SEP_24_2009_0234PM)
#define BOOST_FUSION_NVIEW_VALUE_AT_IMPL_SEP_24_2009_0234PM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/view/nview/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/value_of_impl.hpp
index 5b0a85ba9a..dc48e61ff6 100644
--- a/3party/boost/boost/fusion/view/nview/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/nview/detail/value_of_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_VALUE_OF_PRIOR_IMPL_SEP_24_2009_0158PM)
#define BOOST_FUSION_VALUE_OF_PRIOR_IMPL_SEP_24_2009_0158PM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/container/vector.hpp>
diff --git a/3party/boost/boost/fusion/view/nview/nview.hpp b/3party/boost/boost/fusion/view/nview/nview.hpp
index 2355b68857..45b7380bdf 100644
--- a/3party/boost/boost/fusion/view/nview/nview.hpp
+++ b/3party/boost/boost/fusion/view/nview/nview.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_NVIEW_SEP_23_2009_0948PM)
#define BOOST_FUSION_NVIEW_SEP_23_2009_0948PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/size.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/vector_c.hpp>
@@ -37,8 +38,9 @@ namespace boost { namespace fusion
template<typename U>
struct result<addref(U)> : add_reference<U> {};
-#ifdef BOOST_NO_RVALUE_REFERENCES
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<T>::type
operator()(T& x) const
{
@@ -46,6 +48,7 @@ namespace boost { namespace fusion
}
#else
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
typename result<addref(T)>::type
operator()(T&& x) const
{
@@ -65,6 +68,7 @@ namespace boost { namespace fusion
{};
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<T>::type>::type
operator()(T& x) const
{
@@ -72,6 +76,7 @@ namespace boost { namespace fusion
}
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
typename add_reference<typename add_const<T>::type>::type
operator()(T const& x) const
{
@@ -103,7 +108,7 @@ namespace boost { namespace fusion
typedef typename result_of::as_vector<transform_view_type>::type
sequence_type;
- explicit nview(Sequence& val)
+ BOOST_FUSION_GPU_ENABLED explicit nview(Sequence& val)
: seq(sequence_type(transform_view_type(val, transform_type())))
{}
diff --git a/3party/boost/boost/fusion/view/nview/nview_iterator.hpp b/3party/boost/boost/fusion/view/nview/nview_iterator.hpp
index 3b7ec1f905..c614cbbb92 100644
--- a/3party/boost/boost/fusion/view/nview/nview_iterator.hpp
+++ b/3party/boost/boost/fusion/view/nview/nview_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_NVIEW_ITERATOR_SEP_23_2009_0948PM)
#define BOOST_FUSION_NVIEW_ITERATOR_SEP_23_2009_0948PM
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
@@ -41,7 +42,7 @@ namespace boost { namespace fusion
typedef Sequence sequence_type;
typedef mpl_iterator<Pos> first_type;
- explicit nview_iterator(Sequence& in_seq)
+ BOOST_FUSION_GPU_ENABLED explicit nview_iterator(Sequence& in_seq)
: seq(in_seq) {}
Sequence& seq;
diff --git a/3party/boost/boost/fusion/view/repetitive_view.hpp b/3party/boost/boost/fusion/view/repetitive_view.hpp
index fef1462fa2..abc2fda53a 100644
--- a/3party/boost/boost/fusion/view/repetitive_view.hpp
+++ b/3party/boost/boost/fusion/view/repetitive_view.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_REPETITIVE_VIEW_HPP_INCLUDED)
#define BOOST_FUSION_REPETITIVE_VIEW_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/repetitive_view/repetitive_view.hpp>
#include <boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp>
diff --git a/3party/boost/boost/fusion/view/repetitive_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/repetitive_view/detail/begin_impl.hpp
index 321d7b8d8d..3da6b21dbf 100644
--- a/3party/boost/boost/fusion/view/repetitive_view/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/view/repetitive_view/detail/begin_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_REPETITIVE_VIEW_BEGIN_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_REPETITIVE_VIEW_BEGIN_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/view/repetitive_view/repetitive_view_fwd.hpp>
@@ -34,6 +35,7 @@ namespace boost { namespace fusion
typedef repetitive_view_iterator<sequence_type,
typename result_of::begin<sequence_type>::type > type;
+ BOOST_FUSION_GPU_ENABLED
static type call(View const& v)
{
return type(v.seq);
diff --git a/3party/boost/boost/fusion/view/repetitive_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/repetitive_view/detail/deref_impl.hpp
index 2c0caf8022..c54ff38ef8 100644
--- a/3party/boost/boost/fusion/view/repetitive_view/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/view/repetitive_view/detail/deref_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_REPETITIVE_VIEW_DEREF_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_REPETITIVE_VIEW_DEREF_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref.hpp>
namespace boost { namespace fusion
@@ -29,6 +30,7 @@ namespace boost { namespace fusion
result_of::deref<typename Iterator::pos_type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Iterator const& i)
{
return *i.pos;
diff --git a/3party/boost/boost/fusion/view/repetitive_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/repetitive_view/detail/end_impl.hpp
index 52e36da50d..ca1c270f95 100644
--- a/3party/boost/boost/fusion/view/repetitive_view/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/view/repetitive_view/detail/end_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_REPETITIVE_VIEW_END_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_REPETITIVE_VIEW_END_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/view/repetitive_view/repetitive_view_fwd.hpp>
@@ -34,6 +35,7 @@ namespace boost { namespace fusion
typedef repetitive_view_iterator<sequence_type,
typename result_of::end<sequence_type>::type > type;
+ BOOST_FUSION_GPU_ENABLED
static type call(View const& v)
{
return type(v.seq,end(v.seq));
diff --git a/3party/boost/boost/fusion/view/repetitive_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/repetitive_view/detail/next_impl.hpp
index b629cb0122..acefd513c0 100644
--- a/3party/boost/boost/fusion/view/repetitive_view/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/view/repetitive_view/detail/next_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_REPETITIVE_VIEW_NEXT_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_REPETITIVE_VIEW_NEXT_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
@@ -41,6 +42,7 @@ namespace boost { namespace fusion
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Iterator const& i)
{
return type(i.seq, next(i.pos));
@@ -57,6 +59,7 @@ namespace boost { namespace fusion
>
type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Iterator const& i)
{
return type(i.seq);
@@ -77,6 +80,7 @@ namespace boost { namespace fusion
typedef Iterator type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Iterator const& i)
{
return type(i);
diff --git a/3party/boost/boost/fusion/view/repetitive_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/repetitive_view/detail/value_of_impl.hpp
index bf5f2f0615..234c9fb7f5 100644
--- a/3party/boost/boost/fusion/view/repetitive_view/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/repetitive_view/detail/value_of_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_REPETITIVE_VIEW_VALUE_OF_IMPL_HPP_INCLUDED)
#define BOOST_FUSION_REPETITIVE_VIEW_VALUE_OF_IMPL_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/view/repetitive_view/repetitive_view.hpp b/3party/boost/boost/fusion/view/repetitive_view/repetitive_view.hpp
index 509db859c1..89678755f4 100644
--- a/3party/boost/boost/fusion/view/repetitive_view/repetitive_view.hpp
+++ b/3party/boost/boost/fusion/view/repetitive_view/repetitive_view.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_REPETITIVE_REPETITIVE_VIEW_VIEW_HPP_INCLUDED)
#define BOOST_FUSION_REPETITIVE_VIEW_REPETITIVE_VIEW_HPP_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/mpl/if.hpp>
@@ -37,6 +38,7 @@ namespace boost { namespace fusion
mpl::if_<traits::is_view<Sequence>, Sequence, sequence_type&>::type
stored_seq_type;
+ BOOST_FUSION_GPU_ENABLED
repetitive_view(Sequence& in_seq)
: seq(in_seq) {}
diff --git a/3party/boost/boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp b/3party/boost/boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp
index 4dff006e01..7d5d139d66 100644
--- a/3party/boost/boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp
+++ b/3party/boost/boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_REPETITIVE_VIEW_ITERATOR_HPP_INCLUDED)
#define BOOST_FUSION_REPETITIVE_VIEW_HPP_ITERATOR_INCLUDED
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
@@ -35,9 +36,10 @@ namespace boost { namespace fusion
typedef typename convert_iterator<typename result_of::end<Sequence>::type>::type end_type;
typedef single_pass_traversal_tag category;
- explicit repetitive_view_iterator(Sequence& in_seq)
+ BOOST_FUSION_GPU_ENABLED explicit repetitive_view_iterator(Sequence& in_seq)
: seq(in_seq), pos(begin(in_seq)) {}
+ BOOST_FUSION_GPU_ENABLED
repetitive_view_iterator(Sequence& in_seq, pos_type const& in_pos)
: seq(in_seq), pos(in_pos) {}
diff --git a/3party/boost/boost/fusion/view/reverse_view.hpp b/3party/boost/boost/fusion/view/reverse_view.hpp
index 5ba6773036..c0c1fd7c84 100644
--- a/3party/boost/boost/fusion/view/reverse_view.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_VIEW_REVERSE_VIEW_10022005_0612)
#define FUSION_SEQUENCE_VIEW_REVERSE_VIEW_10022005_0612
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/reverse_view/reverse_view.hpp>
#include <boost/fusion/view/reverse_view/reverse_view_iterator.hpp>
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/advance_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/advance_impl.hpp
index cd0a730966..1304d0a9c2 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/advance_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/advance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_ADVANCE_IMPL_14122005_2015)
#define FUSION_ADVANCE_IMPL_14122005_2015
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/advance.hpp>
#include <boost/mpl/negate.hpp>
@@ -34,6 +35,7 @@ namespace boost { namespace fusion {
typedef typename result_of::advance<first_type, negative_dist>::type advanced_type;
typedef reverse_view_iterator<advanced_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/at_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/at_impl.hpp
index 2e842596c4..ebad8f3524 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/at_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_AT_IMPL_HPP
#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_AT_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/mpl/minus.hpp>
#include <boost/mpl/int.hpp>
@@ -29,6 +30,7 @@ namespace boost { namespace fusion { namespace extension
result_of::at<typename Seq::seq_type, real_n>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/begin_impl.hpp
index 5c83eefb7a..2f20df57a4 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/begin_impl.hpp
@@ -27,6 +27,7 @@ namespace boost { namespace fusion
{
typedef reverse_view_iterator<typename Sequence::last_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence const& s)
{
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp
index 2f52bdd898..20d381baba 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref_data.hpp>
namespace boost { namespace fusion { namespace extension
@@ -25,6 +26,7 @@ namespace boost { namespace fusion { namespace extension
result_of::deref_data<typename It::first_type>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/deref_impl.hpp
index 3a82145ea4..530921fe3a 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/deref_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_DEREF_IMPL_07202005_0851)
#define FUSION_DEREF_IMPL_07202005_0851
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/prior.hpp>
@@ -33,6 +34,7 @@ namespace boost { namespace fusion
>::type
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/distance_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/distance_impl.hpp
index 13421d8d01..3a5fdc6114 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/distance_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/distance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_DISTANCE_IMPL_14122005_2104)
#define FUSION_DISTANCE_IMPL_14122005_2104
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/distance.hpp>
namespace boost { namespace fusion {
@@ -32,6 +33,7 @@ namespace boost { namespace fusion {
typedef typename Last::first_type last_type;
typedef typename result_of::distance<last_type, first_type>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(First const& first, Last const& last)
{
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/end_impl.hpp
index bf4ddfb476..1747d64f33 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/end_impl.hpp
@@ -27,6 +27,7 @@ namespace boost { namespace fusion
{
typedef reverse_view_iterator<typename Sequence::first_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence const& s)
{
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/key_of_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/key_of_impl.hpp
index 3d760fd272..985e5fa9cd 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/key_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/key_of_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_KEY_OF_IMPL_HPP
#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_KEY_OF_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/key_of.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/next_impl.hpp
index 18817280c0..1aaa692023 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/next_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_NEXT_IMPL_07202005_0856)
#define FUSION_NEXT_IMPL_07202005_0856
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/prior.hpp>
@@ -32,6 +33,7 @@ namespace boost { namespace fusion
typedef reverse_view_iterator<typename wrapped::type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/prior_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/prior_impl.hpp
index 014267259b..4007ad4d97 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/prior_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/prior_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_PRIOR_IMPL_07202005_0857)
#define FUSION_PRIOR_IMPL_07202005_0857
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/prior.hpp>
@@ -32,6 +33,7 @@ namespace boost { namespace fusion
typedef reverse_view_iterator<typename wrapped::type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/value_at_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/value_at_impl.hpp
index 90f5129bc9..76465fd74a 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/value_at_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_AT_IMPL_HPP
#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_AT_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
#include <boost/mpl/minus.hpp>
#include <boost/mpl/int.hpp>
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp
index 69d310ffb1..a96d1ce362 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of_data.hpp>
namespace boost { namespace fusion { namespace extension
diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/value_of_impl.hpp
index 3cb7258187..ea171ba950 100644
--- a/3party/boost/boost/fusion/view/reverse_view/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/detail/value_of_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VALUE_OF_IMPL_07202005_0900)
#define FUSION_VALUE_OF_IMPL_07202005_0900
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/iterator/prior.hpp>
diff --git a/3party/boost/boost/fusion/view/reverse_view/reverse_view.hpp b/3party/boost/boost/fusion/view/reverse_view/reverse_view.hpp
index e5716a40f0..3b134d5f26 100644
--- a/3party/boost/boost/fusion/view/reverse_view/reverse_view.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/reverse_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_REVERSE_VIEW_07202005_0836)
#define FUSION_REVERSE_VIEW_07202005_0836
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/is_view.hpp>
#include <boost/fusion/support/category_of.hpp>
@@ -49,11 +50,14 @@ namespace boost { namespace fusion
bidirectional_traversal_tag
, typename traits::category_of<first_type>::type>::value));
+ BOOST_FUSION_GPU_ENABLED
reverse_view(Sequence& in_seq)
: seq(in_seq)
{}
+ BOOST_FUSION_GPU_ENABLED
first_type first() const { return fusion::begin(seq); }
+ BOOST_FUSION_GPU_ENABLED
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
diff --git a/3party/boost/boost/fusion/view/reverse_view/reverse_view_iterator.hpp b/3party/boost/boost/fusion/view/reverse_view/reverse_view_iterator.hpp
index 4c249438fe..9de2169ef1 100644
--- a/3party/boost/boost/fusion/view/reverse_view/reverse_view_iterator.hpp
+++ b/3party/boost/boost/fusion/view/reverse_view/reverse_view_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_REVERSE_VIEW_ITERATOR_07202005_0835)
#define FUSION_REVERSE_VIEW_ITERATOR_07202005_0835
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
@@ -41,6 +42,7 @@ namespace boost { namespace fusion
bidirectional_traversal_tag
, category>::value));
+ BOOST_FUSION_GPU_ENABLED
reverse_view_iterator(First const& in_first)
: first(converter::call(in_first)) {}
diff --git a/3party/boost/boost/fusion/view/single_view.hpp b/3party/boost/boost/fusion/view/single_view.hpp
index 1d9696fe12..a3a3e91852 100644
--- a/3party/boost/boost/fusion/view/single_view.hpp
+++ b/3party/boost/boost/fusion/view/single_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SINGLE_VIEW_03192006_2216)
#define FUSION_SINGLE_VIEW_03192006_2216
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/single_view/single_view.hpp>
#include <boost/fusion/view/single_view/single_view_iterator.hpp>
diff --git a/3party/boost/boost/fusion/view/single_view/detail/advance_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/advance_impl.hpp
index d0846ec4e5..9dd9e4d712 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/advance_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/advance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_ADVANCE_IMPL_JUL_07_2011_1348PM)
#define BOOST_FUSION_SINGLE_VIEW_ADVANCE_IMPL_JUL_07_2011_1348PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/plus.hpp>
namespace boost { namespace fusion
@@ -33,6 +34,7 @@ namespace boost { namespace fusion
typename mpl::plus<typename Iterator::position, Dist>::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/single_view/detail/at_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/at_impl.hpp
index 3e0915fce6..b63497c8d2 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_AT_IMPL_JUL_07_2011_1348PM)
#define BOOST_FUSION_SINGLE_VIEW_AT_IMPL_JUL_07_2011_1348PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/equal_to.hpp>
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
BOOST_MPL_ASSERT((mpl::equal_to<N, mpl::int_<0> >));
typedef typename Sequence::value_type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/view/single_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/begin_impl.hpp
index eb1a3eee26..63e4292348 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/begin_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_BEGIN_IMPL_05052005_0305)
#define BOOST_FUSION_SINGLE_VIEW_BEGIN_IMPL_05052005_0305
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
namespace boost { namespace fusion
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
{
typedef single_view_iterator<Sequence, mpl::int_<0> > type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/view/single_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/deref_impl.hpp
index b5b37a6128..ad50a41357 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/deref_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_DEREF_IMPL_05052005_0258)
#define BOOST_FUSION_SINGLE_VIEW_DEREF_IMPL_05052005_0258
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/equal_to.hpp>
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
BOOST_MPL_ASSERT((mpl::equal_to<typename Iterator::position, mpl::int_<0> >));
typedef typename Iterator::value_type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/single_view/detail/distance_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/distance_impl.hpp
index fec204cd02..73231b4152 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/distance_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/distance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_DISTANCE_IMPL_JUL_07_2011_1348PM)
#define BOOST_FUSION_SINGLE_VIEW_DISTANCE_IMPL_JUL_07_2011_1348PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/minus.hpp>
namespace boost { namespace fusion
@@ -29,6 +30,7 @@ namespace boost { namespace fusion
typedef typename mpl::minus<typename Last::position,
typename First::position>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(First const& /*first*/, Last const& /*last*/)
{
diff --git a/3party/boost/boost/fusion/view/single_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/end_impl.hpp
index e069b24d96..50a7c56240 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/end_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_END_IMPL_05052005_0332)
#define BOOST_FUSION_SINGLE_VIEW_END_IMPL_05052005_0332
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
namespace boost { namespace fusion
@@ -30,6 +31,7 @@ namespace boost { namespace fusion
{
typedef single_view_iterator<Sequence, mpl::int_<1> > type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
diff --git a/3party/boost/boost/fusion/view/single_view/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/equal_to_impl.hpp
index c9a7ebdeb2..a14b4c5128 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/equal_to_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/equal_to_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_ITERATOR_JUL_07_2011_1348PM)
#define BOOST_FUSION_SINGLE_VIEW_ITERATOR_JUL_07_2011_1348PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/equal_to.hpp>
#include <boost/type_traits/is_same.hpp>
diff --git a/3party/boost/boost/fusion/view/single_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/next_impl.hpp
index 1ebc502bfb..d5e0ac8037 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/next_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_NEXT_IMPL_05052005_0331)
#define BOOST_FUSION_SINGLE_VIEW_NEXT_IMPL_05052005_0331
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/next.hpp>
#include <boost/static_assert.hpp>
@@ -34,6 +35,7 @@ namespace boost { namespace fusion
typename mpl::next<typename Iterator::position>::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/single_view/detail/prior_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/prior_impl.hpp
index ece6795d7a..c34e481a27 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/prior_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/prior_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_PRIOR_IMPL_JUL_07_2011_1348PM)
#define BOOST_FUSION_SINGLE_VIEW_PRIOR_IMPL_JUL_07_2011_1348PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/prior.hpp>
namespace boost { namespace fusion
@@ -32,6 +33,7 @@ namespace boost { namespace fusion
typename mpl::prior<typename Iterator::position>::type>
type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/single_view/detail/value_at_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/value_at_impl.hpp
index a8c20ad5fa..b5721b84bd 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/value_at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_VALUE_AT_IMPL_JUL_07_2011_1348PM)
#define BOOST_FUSION_SINGLE_VIEW_VALUE_AT_IMPL_JUL_07_2011_1348PM
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/equal_to.hpp>
diff --git a/3party/boost/boost/fusion/view/single_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/value_of_impl.hpp
index 81e8817962..dfb345c8cd 100644
--- a/3party/boost/boost/fusion/view/single_view/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/single_view/detail/value_of_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_VALUE_OF_IMPL_05052005_0324)
#define BOOST_FUSION_SINGLE_VIEW_VALUE_OF_IMPL_05052005_0324
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/equal_to.hpp>
diff --git a/3party/boost/boost/fusion/view/single_view/single_view.hpp b/3party/boost/boost/fusion/view/single_view/single_view.hpp
index 5e7e5ab5cc..36c2c931c0 100644
--- a/3party/boost/boost/fusion/view/single_view/single_view.hpp
+++ b/3party/boost/boost/fusion/view/single_view/single_view.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_05052005_0335)
#define BOOST_FUSION_SINGLE_VIEW_05052005_0335
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/support/sequence_base.hpp>
@@ -42,16 +43,18 @@ namespace boost { namespace fusion
typedef mpl::int_<1> size;
typedef T value_type;
+ BOOST_FUSION_GPU_ENABLED
single_view()
: val() {}
- explicit single_view(typename detail::call_param<T>::type in_val)
+ BOOST_FUSION_GPU_ENABLED explicit single_view(typename detail::call_param<T>::type in_val)
: val(in_val) {}
value_type val;
};
template <typename T>
+ BOOST_FUSION_GPU_ENABLED
inline single_view<typename detail::as_fusion_element<T>::type>
make_single_view(T const& v)
{
diff --git a/3party/boost/boost/fusion/view/single_view/single_view_iterator.hpp b/3party/boost/boost/fusion/view/single_view/single_view_iterator.hpp
index 77b508a0f9..128c1cae66 100644
--- a/3party/boost/boost/fusion/view/single_view/single_view_iterator.hpp
+++ b/3party/boost/boost/fusion/view/single_view/single_view_iterator.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SINGLE_VIEW_ITERATOR_05052005_0340)
#define BOOST_FUSION_SINGLE_VIEW_ITERATOR_05052005_0340
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/view/single_view/detail/deref_impl.hpp>
@@ -39,7 +40,7 @@ namespace boost { namespace fusion
typedef Pos position;
typedef SingleView single_view_type;
- explicit single_view_iterator(single_view_type& in_view)
+ BOOST_FUSION_GPU_ENABLED explicit single_view_iterator(single_view_type& in_view)
: view(in_view) {}
SingleView& view;
diff --git a/3party/boost/boost/fusion/view/transform_view.hpp b/3party/boost/boost/fusion/view/transform_view.hpp
index b64395e377..57ff612a73 100644
--- a/3party/boost/boost/fusion/view/transform_view.hpp
+++ b/3party/boost/boost/fusion/view/transform_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_SEQUENCE_VIEW_TRANSFORM_VIEW_10022005_0612)
#define FUSION_SEQUENCE_VIEW_TRANSFORM_VIEW_10022005_0612
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/transform_view/transform_view.hpp>
#include <boost/fusion/view/transform_view/transform_view_iterator.hpp>
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/advance_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/advance_impl.hpp
index 9027226f5b..ae8a84ce63 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/advance_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/advance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_ADVANCE_IMPL_13122005_1906)
#define FUSION_ADVANCE_IMPL_13122005_1906
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/advance.hpp>
namespace boost { namespace fusion
@@ -38,6 +39,7 @@ namespace boost { namespace fusion
typedef typename Iterator::transform_type transform_type;
typedef transform_view_iterator<advanced_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -60,6 +62,7 @@ namespace boost { namespace fusion
typedef typename Iterator::transform_type transform_type;
typedef transform_view_iterator2<advanced1_type, advanced2_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/apply_transform_result.hpp b/3party/boost/boost/fusion/view/transform_view/detail/apply_transform_result.hpp
index 100055c4a5..87c057f231 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/apply_transform_result.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/apply_transform_result.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936)
#define BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936
+#include <boost/fusion/support/config.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/at_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/at_impl.hpp
index 5133de8b07..5c6dd8fb0d 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_AT_IMPL_20061029_1946)
#define BOOST_FUSION_AT_IMPL_20061029_1946
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
@@ -32,6 +33,7 @@ namespace boost { namespace fusion {
typedef typename boost::fusion::result_of::at<typename Seq::sequence_type, N>::type value_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Seq& seq)
{
return seq.f(boost::fusion::at<N>(seq.seq));
@@ -51,6 +53,7 @@ namespace boost { namespace fusion {
typedef typename boost::fusion::result_of::at<typename Seq::sequence2_type, N>::type value2_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type call(Seq& seq)
{
return seq.f(boost::fusion::at<N>(seq.seq1), boost::fusion::at<N>(seq.seq2));
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/begin_impl.hpp
index 09fe8897e5..7c40505ae2 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/begin_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_BEGIN_IMPL_07162005_1031)
#define FUSION_BEGIN_IMPL_07162005_1031
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/transform_view/transform_view_fwd.hpp>
namespace boost { namespace fusion
@@ -33,6 +34,7 @@ namespace boost { namespace fusion
typedef typename Sequence::transform_type transform_type;
typedef transform_view_iterator<first_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
@@ -53,6 +55,7 @@ namespace boost { namespace fusion
typedef typename Sequence::transform_type transform_type;
typedef transform_view_iterator2<first1_type, first2_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/deref_impl.hpp
index dcdf04eff3..35dacbd1d7 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/deref_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_DEREF_IMPL_07162005_1026)
#define FUSION_DEREF_IMPL_07162005_1026
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/value_of.hpp>
@@ -36,6 +37,7 @@ namespace boost { namespace fusion
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -61,6 +63,7 @@ namespace boost { namespace fusion
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/distance_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/distance_impl.hpp
index 12a2d7976b..ecbc8c5dd0 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/distance_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/distance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_DISTANCE_IMPL_13122005_2139)
#define FUSION_DISTANCE_IMPL_13122005_2139
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/distance.hpp>
namespace boost { namespace fusion {
@@ -28,6 +29,7 @@ namespace boost { namespace fusion {
struct apply
: result_of::distance<typename First::first_type, typename Last::first_type>
{
+ BOOST_FUSION_GPU_ENABLED
static
typename result_of::distance<typename First::first_type, typename Last::first_type>::type
call(First const& first, Last const& last)
@@ -45,6 +47,7 @@ namespace boost { namespace fusion {
struct apply
: result_of::distance<typename First::first1_type, typename Last::first1_type>
{
+ BOOST_FUSION_GPU_ENABLED
static
typename result_of::distance<typename First::first1_type, typename Last::first1_type>::type
call(First const& first, Last const& last)
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/end_impl.hpp
index 0c19403797..58e161b1f6 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/end_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_END_IMPL_07162005_1028)
#define FUSION_END_IMPL_07162005_1028
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/transform_view/transform_view_fwd.hpp>
namespace boost { namespace fusion
@@ -33,6 +34,7 @@ namespace boost { namespace fusion
typedef typename Sequence::transform_type transform_type;
typedef transform_view_iterator<last_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
@@ -53,6 +55,7 @@ namespace boost { namespace fusion
typedef typename Sequence::transform_type transform_type;
typedef transform_view_iterator2<last1_type, last2_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& s)
{
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/equal_to_impl.hpp
index b1f0ae2db7..c4c6815ec7 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/equal_to_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/equal_to_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_TRANSFORM_VIEW_ITERATOR_20070127_0957)
#define BOOST_FUSION_TRANSFORM_VIEW_ITERATOR_20070127_0957
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
namespace boost { namespace fusion {
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/next_impl.hpp
index 5c61a6055b..cebba59526 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/next_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_NEXT_IMPL_07162005_1029)
#define FUSION_NEXT_IMPL_07162005_1029
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/next.hpp>
namespace boost { namespace fusion
@@ -37,6 +38,7 @@ namespace boost { namespace fusion
typedef typename Iterator::transform_type transform_type;
typedef transform_view_iterator<next_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -59,6 +61,7 @@ namespace boost { namespace fusion
typedef typename Iterator::transform_type transform_type;
typedef transform_view_iterator2<next1_type, next2_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/prior_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/prior_impl.hpp
index 772b3e5075..19c802c622 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/prior_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/prior_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_PREV_IMPL_13122005_2110)
#define FUSION_PREV_IMPL_13122005_2110
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/prior.hpp>
namespace boost { namespace fusion
@@ -38,6 +39,7 @@ namespace boost { namespace fusion
typedef typename Iterator::transform_type transform_type;
typedef transform_view_iterator<prior_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@@ -60,6 +62,7 @@ namespace boost { namespace fusion
typedef typename Iterator::transform_type transform_type;
typedef transform_view_iterator2<prior1_type, prior2_type, transform_type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/value_at_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/value_at_impl.hpp
index 445bbd0b6c..6875cbed08 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/value_at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_VALUE_AT_IMPL_20061101_0745)
#define BOOST_FUSION_VALUE_AT_IMPL_20061101_0745
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
diff --git a/3party/boost/boost/fusion/view/transform_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/value_of_impl.hpp
index 108586293e..ae20cd4ba1 100644
--- a/3party/boost/boost/fusion/view/transform_view/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/detail/value_of_impl.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_VALUE_OF_IMPL_07162005_1030)
#define FUSION_VALUE_OF_IMPL_07162005_1030
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
diff --git a/3party/boost/boost/fusion/view/transform_view/transform_view.hpp b/3party/boost/boost/fusion/view/transform_view/transform_view.hpp
index 1049f11e5c..d18f49c61c 100644
--- a/3party/boost/boost/fusion/view/transform_view/transform_view.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/transform_view.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_TRANSFORM_VIEW_07162005_1037)
#define FUSION_TRANSFORM_VIEW_07162005_1037
+#include <boost/fusion/support/config.hpp>
#include <boost/static_assert.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/is_view.hpp>
@@ -55,15 +56,20 @@ namespace boost { namespace fusion
typedef Sequence2 sequence2_type;
typedef F transform_type;
+ BOOST_FUSION_GPU_ENABLED
transform_view(Sequence1& in_seq1, Sequence2& in_seq2, F const& binop)
: f(binop)
, seq1(in_seq1)
, seq2(in_seq2)
{}
+ BOOST_FUSION_GPU_ENABLED
first1_type first1() const { return fusion::begin(seq1); }
+ BOOST_FUSION_GPU_ENABLED
first2_type first2() const { return fusion::begin(seq2); }
+ BOOST_FUSION_GPU_ENABLED
last1_type last1() const { return fusion::end(seq1); }
+ BOOST_FUSION_GPU_ENABLED
last2_type last2() const { return fusion::end(seq2); }
transform_type f;
@@ -94,12 +100,15 @@ namespace boost { namespace fusion
typedef Sequence sequence_type;
typedef F transform_type;
+ BOOST_FUSION_GPU_ENABLED
transform_view(Sequence& in_seq, F const& in_f)
: seq(in_seq)
, f(in_f)
{}
+ BOOST_FUSION_GPU_ENABLED
first_type first() const { return fusion::begin(seq); }
+ BOOST_FUSION_GPU_ENABLED
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
transform_type f;
diff --git a/3party/boost/boost/fusion/view/transform_view/transform_view_iterator.hpp b/3party/boost/boost/fusion/view/transform_view/transform_view_iterator.hpp
index af9d52be51..0762228fca 100644
--- a/3party/boost/boost/fusion/view/transform_view/transform_view_iterator.hpp
+++ b/3party/boost/boost/fusion/view/transform_view/transform_view_iterator.hpp
@@ -7,6 +7,7 @@
#if !defined(FUSION_TRANSFORM_VIEW_ITERATOR_07162005_1033)
#define FUSION_TRANSFORM_VIEW_ITERATOR_07162005_1033
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
@@ -34,6 +35,7 @@ namespace boost { namespace fusion
typedef typename traits::category_of<first_type>::type category;
typedef F transform_type;
+ BOOST_FUSION_GPU_ENABLED
transform_view_iterator(First const& in_first, F const& in_f)
: first(converter::call(in_first)), f(in_f) {}
@@ -60,6 +62,7 @@ namespace boost { namespace fusion
typedef typename traits::category_of<first1_type>::type category;
typedef F transform_type;
+ BOOST_FUSION_GPU_ENABLED
transform_view_iterator2(First1 const& in_first1, First2 const& in_first2, F const& in_f)
: first1(converter1::call(in_first1)), first2(converter2::call(in_first2)), f(in_f) {}
diff --git a/3party/boost/boost/fusion/view/zip_view.hpp b/3party/boost/boost/fusion/view/zip_view.hpp
index 50209a9fb0..5376f99924 100644
--- a/3party/boost/boost/fusion/view/zip_view.hpp
+++ b/3party/boost/boost/fusion/view/zip_view.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_ZIP_VIEW_23012006_0811)
#define FUSION_ZIP_VIEW_23012006_0811
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/zip_view/zip_view.hpp>
#include <boost/fusion/view/zip_view/zip_view_iterator.hpp>
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/advance_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/advance_impl.hpp
index 2e4e1a7895..17012ac8b6 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/advance_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/advance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_ADVANCE_IMPL_20061024_2021)
#define FUSION_ADVANCE_IMPL_20061024_2021
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp>
#include <boost/fusion/iterator/advance.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
@@ -33,6 +34,7 @@ namespace boost { namespace fusion {
};
template<typename It>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_advance(It)>::type
operator()(const It& it) const
{
@@ -55,6 +57,7 @@ namespace boost { namespace fusion {
typedef zip_view_iterator<
typename result_of::transform<typename It::iterators, detail::poly_advance<N> >::type> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/at_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/at_impl.hpp
index 89df542f1f..f92c981725 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/at_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_AT_IMPL_20060124_1933)
#define FUSION_AT_IMPL_20060124_1933
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/fusion/container/vector/convert.hpp>
@@ -43,6 +44,7 @@ namespace boost { namespace fusion
};
template<typename Seq>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_at(Seq&)>::type
operator()(Seq& seq) const
{
@@ -50,12 +52,14 @@ namespace boost { namespace fusion
}
template<typename Seq>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_at(Seq const&)>::type
operator()(Seq const& seq) const
{
return fusion::at<N>(seq);
}
+ BOOST_FUSION_GPU_ENABLED
unused_type operator()(unused_type const&) const
{
return unused_type();
@@ -78,6 +82,7 @@ namespace boost { namespace fusion
typename result_of::transform<
typename Seq::sequences, detail::poly_at<N> >::type>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/begin_impl.hpp
index 43852d79c6..32be2c7d33 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/begin_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/begin_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_BEGIN_IMPL_20060123_2147)
#define FUSION_BEGIN_IMPL_20060123_2147
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
@@ -40,6 +41,7 @@ namespace boost { namespace fusion {
};
template<typename Seq>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_begin(Seq&)>::type
operator()(Seq& seq) const
{
@@ -47,12 +49,14 @@ namespace boost { namespace fusion {
}
template<typename Seq>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_begin(Seq const&)>::type
operator()(Seq const& seq) const
{
return fusion::begin(seq);
}
+ BOOST_FUSION_GPU_ENABLED
unused_type operator()(unused_type const&) const
{
return unused_type();
@@ -75,6 +79,7 @@ namespace boost { namespace fusion {
typename result_of::transform<typename Sequence::sequences, detail::poly_begin>::type,
typename Sequence::category> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& sequence)
{
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/deref_impl.hpp
index c24e1452d5..e9f091c3b5 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/deref_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/deref_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_DEREF_IMPL_20061024_1959)
#define FUSION_DEREF_IMPL_20061024_1959
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
@@ -42,12 +43,14 @@ namespace boost { namespace fusion {
};
template<typename It>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_deref(It)>::type
operator()(const It& it) const
{
return fusion::deref(it);
}
+ BOOST_FUSION_GPU_ENABLED
unused_type operator()(unused_type const&) const
{
return unused_type();
@@ -69,6 +72,7 @@ namespace boost { namespace fusion {
typedef typename result_of::as_vector<
typename result_of::transform<typename It::iterators, detail::poly_deref>::type>::type type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/distance_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/distance_impl.hpp
index 8c9789330e..8beaccca44 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/distance_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/distance_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_DISTANCE_IMPL_20060124_2033)
#define FUSION_DISTANCE_IMPL_20060124_2033
+#include <boost/fusion/support/config.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/assert.hpp>
@@ -69,6 +70,7 @@ namespace boost { namespace fusion {
struct apply
: detail::zip_view_iterator_distance<It1, It2>::type
{
+ BOOST_FUSION_GPU_ENABLED
static typename detail::zip_view_iterator_distance<It1, It2>::type
call(It1 const& /*it1*/, It2 const& /*it2*/)
{
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/end_impl.hpp
index 6423a88f18..d57b08fbd7 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/end_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/end_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_END_IMPL_20060123_2208)
#define FUSION_END_IMPL_20060123_2208
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
@@ -54,6 +55,7 @@ namespace boost { namespace fusion {
};
template<typename Seq>
+ BOOST_FUSION_GPU_ENABLED
typename result<endpoints(Seq&)>::type
operator()(Seq& seq) const
{
@@ -61,12 +63,14 @@ namespace boost { namespace fusion {
}
template<typename Seq>
+ BOOST_FUSION_GPU_ENABLED
typename result<endpoints(Seq const&)>::type
operator()(Seq const& seq) const
{
return fusion::advance<M>(fusion::begin(seq));
}
+ BOOST_FUSION_GPU_ENABLED
unused_type operator()(unused_type const&) const
{
return unused_type();
@@ -89,6 +93,7 @@ namespace boost { namespace fusion {
typename result_of::transform<typename Sequence::sequences, detail::endpoints<typename Sequence::size> >::type,
typename Sequence::category> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& sequence)
{
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/equal_to_impl.hpp
index 0349d814e5..6292a525f0 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/equal_to_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/equal_to_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_EQUAL_TO_IMPL_20060128_1423)
#define FUSION_EQUAL_TO_IMPL_20060128_1423
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/mpl.hpp>
#include <boost/mpl/lambda.hpp>
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/next_impl.hpp
index 56bf853d65..e9236b4200 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/next_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/next_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_NEXT_IMPL_20060124_2006)
#define FUSION_NEXT_IMPL_20060124_2006
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
@@ -41,12 +42,14 @@ namespace boost { namespace fusion {
};
template<typename It>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_next(It)>::type
operator()(const It& it) const
{
return fusion::next(it);
}
+ BOOST_FUSION_GPU_ENABLED
unused_type operator()(unused_type const&) const
{
return unused_type();
@@ -69,6 +72,7 @@ namespace boost { namespace fusion {
typename result_of::transform<typename Iterator::iterators, detail::poly_next>::type,
typename Iterator::category> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& it)
{
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/prior_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/prior_impl.hpp
index 875e7d2853..aa69229565 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/prior_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/prior_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_PRIOR_IMPL_20060124_2006)
#define FUSION_PRIOR_IMPL_20060124_2006
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp>
#include <boost/fusion/iterator/prior.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
@@ -40,12 +41,14 @@ namespace boost { namespace fusion {
};
template<typename It>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_prior(It)>::type
operator()(const It& it) const
{
return fusion::prior(it);
}
+ BOOST_FUSION_GPU_ENABLED
unused_type operator()(unused_type const&) const
{
return unused_type();
@@ -68,6 +71,7 @@ namespace boost { namespace fusion {
typename result_of::transform<typename Iterator::iterators, detail::poly_prior>::type,
typename Iterator::category> type;
+ BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& it)
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/value_at_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/value_at_impl.hpp
index 13e0274f6d..26d75b469e 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/value_at_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/value_at_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_VALUE_AT_IMPL_20060124_2129)
#define FUSION_VALUE_AT_IMPL_20060124_2129
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/convert.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
@@ -38,8 +39,9 @@ namespace boost { namespace fusion {
{};
// never called, but needed for decltype-based result_of (C++0x)
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template<typename Seq>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_value_at(Seq)>::type
operator()(Seq&&) const;
#endif
diff --git a/3party/boost/boost/fusion/view/zip_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/value_of_impl.hpp
index 5571155e25..0c06e0e10c 100644
--- a/3party/boost/boost/fusion/view/zip_view/detail/value_of_impl.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/detail/value_of_impl.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_VALUE_OF_IMPL_20060124_2147)
#define FUSION_VALUE_OF_IMPL_20060124_2147
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/convert.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
#include <boost/fusion/iterator/value_of.hpp>
@@ -37,8 +38,9 @@ namespace boost { namespace fusion
{};
// never called, but needed for decltype-based result_of (C++0x)
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template<typename It>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_value_of(It)>::type
operator()(It&&) const;
#endif
diff --git a/3party/boost/boost/fusion/view/zip_view/zip_view.hpp b/3party/boost/boost/fusion/view/zip_view/zip_view.hpp
index e9a0222df5..4e807f732b 100644
--- a/3party/boost/boost/fusion/view/zip_view/zip_view.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/zip_view.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_ZIP_VIEW_23012006_0813)
#define FUSION_ZIP_VIEW_23012006_0813
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/unused.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
@@ -68,8 +69,9 @@ namespace boost { namespace fusion {
};
// never called, but needed for decltype-based result_of (C++0x)
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template<typename Seq>
+ BOOST_FUSION_GPU_ENABLED
typename result<seq_ref_size(Seq)>::type
operator()(Seq&&) const;
#endif
@@ -89,8 +91,9 @@ namespace boost { namespace fusion {
};
// never called, but needed for decltype-based result_of (C++0x)
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template<typename Lhs, typename Rhs>
+ BOOST_FUSION_GPU_ENABLED
typename result<poly_min(Lhs, Rhs)>::type
operator()(Lhs&&, Rhs&&) const;
#endif
@@ -119,6 +122,7 @@ namespace boost { namespace fusion {
typedef typename fusion::result_of::as_vector<Sequences>::type sequences;
typedef typename detail::min_size<real_sequences>::type size;
+ BOOST_FUSION_GPU_ENABLED
zip_view(
const Sequences& seqs)
: sequences_(seqs)
diff --git a/3party/boost/boost/fusion/view/zip_view/zip_view_iterator.hpp b/3party/boost/boost/fusion/view/zip_view/zip_view_iterator.hpp
index bf0b8a39e5..fec50e6f18 100644
--- a/3party/boost/boost/fusion/view/zip_view/zip_view_iterator.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/zip_view_iterator.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_ZIP_VIEW_ITERATOR_23012006_0814)
#define FUSION_ZIP_VIEW_ITERATOR_23012006_0814
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/view/zip_view/detail/deref_impl.hpp>
@@ -34,6 +35,7 @@ namespace boost { namespace fusion {
typedef Traversal category;
template<typename InitSeq>
+ BOOST_FUSION_GPU_ENABLED
zip_view_iterator(
const InitSeq& iterator_seq)
: iterators_(iterator_seq)
diff --git a/3party/boost/boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp b/3party/boost/boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp
index d2bfff2388..7f1623090f 100644
--- a/3party/boost/boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp
+++ b/3party/boost/boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp
@@ -8,6 +8,7 @@
#if !defined(FUSION_ZIP_VIEW_ITERATOR_FWD)
#define FUSION_ZIP_VIEW_ITERATOR_FWD
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/detail/strictest_traversal.hpp>
namespace boost { namespace fusion {
diff --git a/3party/boost/boost/geometry/algorithms/append.hpp b/3party/boost/boost/geometry/algorithms/append.hpp
index f2d0d366d9..1dafac04b6 100644
--- a/3party/boost/boost/geometry/algorithms/append.hpp
+++ b/3party/boost/boost/geometry/algorithms/append.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -105,7 +110,7 @@ struct range_to_polygon
typedef typename ring_type<Polygon>::type ring_type;
static inline void apply(Polygon& polygon, Range const& range,
- int ring_index, int )
+ int ring_index, int = 0)
{
if (ring_index == -1)
{
@@ -194,8 +199,14 @@ struct append<Geometry, RangeOrPoint, point_tag>
: splitted_dispatch::append_point<typename tag<Geometry>::type, Geometry, RangeOrPoint>
{};
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_variant {
+
template <typename Geometry>
-struct devarianted_append
+struct append
{
template <typename RangeOrPoint>
static inline void apply(Geometry& geometry,
@@ -204,16 +215,16 @@ struct devarianted_append
int multi_index)
{
concept::check<Geometry>();
- append<Geometry, RangeOrPoint>::apply(geometry,
- range_or_point,
- ring_index,
- multi_index);
+ dispatch::append<Geometry, RangeOrPoint>::apply(geometry,
+ range_or_point,
+ ring_index,
+ multi_index);
}
};
template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct devarianted_append<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+struct append<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
{
template <typename RangeOrPoint>
struct visitor: boost::static_visitor<void>
@@ -221,7 +232,7 @@ struct devarianted_append<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
RangeOrPoint const& m_range_or_point;
int m_ring_index;
int m_multi_index;
-
+
visitor(RangeOrPoint const& range_or_point,
int ring_index,
int multi_index):
@@ -229,15 +240,14 @@ struct devarianted_append<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
m_ring_index(ring_index),
m_multi_index(multi_index)
{}
-
+
template <typename Geometry>
void operator()(Geometry& geometry) const
{
- concept::check<Geometry>();
- append<Geometry, RangeOrPoint>::apply(geometry,
- m_range_or_point,
- m_ring_index,
- m_multi_index);
+ append<Geometry>::apply(geometry,
+ m_range_or_point,
+ m_ring_index,
+ m_multi_index);
}
};
@@ -258,9 +268,7 @@ struct devarianted_append<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
}
};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
+} // namespace resolve_variant;
/*!
@@ -272,7 +280,7 @@ struct devarianted_append<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
\param range_or_point The point or range to add
\param ring_index The index of the ring in case of a polygon:
exterior ring (-1, the default) or interior ring index
-\param multi_index Reserved for multi polygons or multi linestrings
+\param multi_index The index of the geometry to which the points are appended
\qbk{[include reference/algorithms/append.qbk]}
}
@@ -281,8 +289,8 @@ template <typename Geometry, typename RangeOrPoint>
inline void append(Geometry& geometry, RangeOrPoint const& range_or_point,
int ring_index = -1, int multi_index = 0)
{
- dispatch::devarianted_append<Geometry>
- ::apply(geometry, range_or_point, ring_index, multi_index);
+ resolve_variant::append<Geometry>
+ ::apply(geometry, range_or_point, ring_index, multi_index);
}
diff --git a/3party/boost/boost/geometry/algorithms/area.hpp b/3party/boost/boost/geometry/algorithms/area.hpp
index 537a36763b..7377798719 100644
--- a/3party/boost/boost/geometry/algorithms/area.hpp
+++ b/3party/boost/boost/geometry/algorithms/area.hpp
@@ -26,13 +26,16 @@
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
#include <boost/geometry/core/point_order.hpp>
+#include <boost/geometry/core/point_type.hpp>
#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/detail/calculate_null.hpp>
#include <boost/geometry/algorithms/detail/calculate_sum.hpp>
// #include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
+#include <boost/geometry/algorithms/detail/multi_sum.hpp>
#include <boost/geometry/strategies/area.hpp>
#include <boost/geometry/strategies/default_area_result.hpp>
@@ -87,7 +90,7 @@ struct ring_area
// An open ring has at least three points,
// A closed ring has at least four points,
// if not, there is no (zero) area
- if (int(boost::size(ring))
+ if (boost::size(ring)
< core_detail::closure::minimum_ring_size<Closure>::value)
{
return typename Strategy::return_type();
@@ -176,19 +179,41 @@ struct area<Polygon, polygon_tag> : detail::calculate_polygon_sum
};
+template <typename MultiGeometry>
+struct area<MultiGeometry, multi_polygon_tag> : detail::multi_sum
+{
+ template <typename Strategy>
+ static inline typename Strategy::return_type
+ apply(MultiGeometry const& multi, Strategy const& strategy)
+ {
+ return multi_sum::apply
+ <
+ typename Strategy::return_type,
+ area<typename boost::range_value<MultiGeometry>::type>
+ >(multi, strategy);
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_variant {
+
template <typename Geometry>
-struct devarianted_area
+struct area
{
template <typename Strategy>
static inline typename Strategy::return_type apply(Geometry const& geometry,
Strategy const& strategy)
{
- return area<Geometry>::apply(geometry, strategy);
+ return dispatch::area<Geometry>::apply(geometry, strategy);
}
};
template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct devarianted_area<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+struct area<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
{
template <typename Strategy>
struct visitor: boost::static_visitor<typename Strategy::return_type>
@@ -200,7 +225,7 @@ struct devarianted_area<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
template <typename Geometry>
typename Strategy::return_type operator()(Geometry const& geometry) const
{
- return devarianted_area<Geometry>::apply(geometry, m_strategy);
+ return area<Geometry>::apply(geometry, m_strategy);
}
};
@@ -213,10 +238,7 @@ struct devarianted_area<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
}
};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
+} // namespace resolve_variant
/*!
@@ -245,6 +267,8 @@ inline typename default_area_result<Geometry>::type area(Geometry const& geometr
{
concept::check<Geometry const>();
+ // TODO put this into a resolve_strategy stage
+ // (and take the return type from resolve_variant)
typedef typename point_type<Geometry>::type point_type;
typedef typename strategy::area::services::default_strategy
<
@@ -253,8 +277,8 @@ inline typename default_area_result<Geometry>::type area(Geometry const& geometr
>::type strategy_type;
// detail::throw_on_empty_input(geometry);
-
- return dispatch::devarianted_area<Geometry>::apply(geometry, strategy_type());
+
+ return resolve_variant::area<Geometry>::apply(geometry, strategy_type());
}
/*!
@@ -288,8 +312,8 @@ inline typename Strategy::return_type area(
concept::check<Geometry const>();
// detail::throw_on_empty_input(geometry);
-
- return dispatch::devarianted_area<Geometry>::apply(geometry, strategy);
+
+ return resolve_variant::area<Geometry>::apply(geometry, strategy);
}
diff --git a/3party/boost/boost/geometry/algorithms/assign.hpp b/3party/boost/boost/geometry/algorithms/assign.hpp
index 97a033d1db..32f095b9ac 100644
--- a/3party/boost/boost/geometry/algorithms/assign.hpp
+++ b/3party/boost/boost/geometry/algorithms/assign.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -40,6 +41,8 @@
#include <boost/geometry/util/for_each_coordinate.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
namespace boost { namespace geometry
{
@@ -122,6 +125,229 @@ inline void assign_zero(Geometry& geometry)
}
/*!
+\brief Assign two coordinates to a geometry (usually a 2D point)
+\ingroup assign
+\tparam Geometry \tparam_geometry
+\tparam Type \tparam_numeric to specify the coordinates
+\param geometry \param_geometry
+\param c1 \param_x
+\param c2 \param_y
+
+\qbk{distinguish, 2 coordinate values}
+\qbk{
+[heading Example]
+[assign_2d_point] [assign_2d_point_output]
+
+[heading See also]
+\* [link geometry.reference.algorithms.make.make_2_2_coordinate_values make]
+}
+ */
+template <typename Geometry, typename Type>
+inline void assign_values(Geometry& geometry, Type const& c1, Type const& c2)
+{
+ concept::check<Geometry>();
+
+ dispatch::assign
+ <
+ typename tag<Geometry>::type,
+ Geometry,
+ geometry::dimension<Geometry>::type::value
+ >::apply(geometry, c1, c2);
+}
+
+/*!
+\brief Assign three values to a geometry (usually a 3D point)
+\ingroup assign
+\tparam Geometry \tparam_geometry
+\tparam Type \tparam_numeric to specify the coordinates
+\param geometry \param_geometry
+\param c1 \param_x
+\param c2 \param_y
+\param c3 \param_z
+
+\qbk{distinguish, 3 coordinate values}
+\qbk{
+[heading Example]
+[assign_3d_point] [assign_3d_point_output]
+
+[heading See also]
+\* [link geometry.reference.algorithms.make.make_3_3_coordinate_values make]
+}
+ */
+template <typename Geometry, typename Type>
+inline void assign_values(Geometry& geometry,
+ Type const& c1, Type const& c2, Type const& c3)
+{
+ concept::check<Geometry>();
+
+ dispatch::assign
+ <
+ typename tag<Geometry>::type,
+ Geometry,
+ geometry::dimension<Geometry>::type::value
+ >::apply(geometry, c1, c2, c3);
+}
+
+/*!
+\brief Assign four values to a geometry (usually a box or segment)
+\ingroup assign
+\tparam Geometry \tparam_geometry
+\tparam Type \tparam_numeric to specify the coordinates
+\param geometry \param_geometry
+\param c1 First coordinate (usually x1)
+\param c2 Second coordinate (usually y1)
+\param c3 Third coordinate (usually x2)
+\param c4 Fourth coordinate (usually y2)
+
+\qbk{distinguish, 4 coordinate values}
+ */
+template <typename Geometry, typename Type>
+inline void assign_values(Geometry& geometry,
+ Type const& c1, Type const& c2, Type const& c3, Type const& c4)
+{
+ concept::check<Geometry>();
+
+ dispatch::assign
+ <
+ typename tag<Geometry>::type,
+ Geometry,
+ geometry::dimension<Geometry>::type::value
+ >::apply(geometry, c1, c2, c3, c4);
+}
+
+
+
+namespace resolve_variant
+{
+
+template <typename Geometry1, typename Geometry2>
+struct assign
+{
+ static inline void
+ apply(
+ Geometry1& geometry1,
+ const Geometry2& geometry2)
+ {
+ concept::check<Geometry1>();
+ concept::check<Geometry2 const>();
+ concept::check_concepts_and_equal_dimensions<Geometry1, Geometry2 const>();
+
+ bool const same_point_order =
+ point_order<Geometry1>::value == point_order<Geometry2>::value;
+ bool const same_closure =
+ closure<Geometry1>::value == closure<Geometry2>::value;
+
+ BOOST_MPL_ASSERT_MSG
+ (
+ same_point_order, ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_POINT_ORDER
+ , (types<Geometry1, Geometry2>)
+ );
+ BOOST_MPL_ASSERT_MSG
+ (
+ same_closure, ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_CLOSURE
+ , (types<Geometry1, Geometry2>)
+ );
+
+ dispatch::convert<Geometry2, Geometry1>::apply(geometry2, geometry1);
+ }
+};
+
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct assign<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ struct visitor: static_visitor<void>
+ {
+ Geometry2 const& m_geometry2;
+
+ visitor(Geometry2 const& geometry2)
+ : m_geometry2(geometry2)
+ {}
+
+ template <typename Geometry1>
+ result_type operator()(Geometry1& geometry1) const
+ {
+ return assign
+ <
+ Geometry1,
+ Geometry2
+ >::apply
+ (geometry1, m_geometry2);
+ }
+ };
+
+ static inline void
+ apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry1,
+ Geometry2 const& geometry2)
+ {
+ return apply_visitor(visitor(geometry2), geometry1);
+ }
+};
+
+
+template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct assign<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: static_visitor<void>
+ {
+ Geometry1& m_geometry1;
+
+ visitor(Geometry1 const& geometry1)
+ : m_geometry1(geometry1)
+ {}
+
+ template <typename Geometry2>
+ result_type operator()(Geometry2 const& geometry2) const
+ {
+ return assign
+ <
+ Geometry1,
+ Geometry2
+ >::apply
+ (m_geometry1, geometry2);
+ }
+ };
+
+ static inline void
+ apply(Geometry1& geometry1,
+ variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2)
+ {
+ return apply_visitor(visitor(geometry1), geometry2);
+ }
+};
+
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename A), BOOST_VARIANT_ENUM_PARAMS(typename B)>
+struct assign<variant<BOOST_VARIANT_ENUM_PARAMS(A)>, variant<BOOST_VARIANT_ENUM_PARAMS(B)> >
+{
+ struct visitor: static_visitor<void>
+ {
+ template <typename Geometry1, typename Geometry2>
+ result_type operator()(
+ Geometry1& geometry1,
+ Geometry2 const& geometry2) const
+ {
+ return assign
+ <
+ Geometry1,
+ Geometry2
+ >::apply
+ (geometry1, geometry2);
+ }
+ };
+
+ static inline void
+ apply(variant<BOOST_VARIANT_ENUM_PARAMS(A)>& geometry1,
+ variant<BOOST_VARIANT_ENUM_PARAMS(B)> const& geometry2)
+ {
+ return apply_visitor(visitor(), geometry1, geometry2);
+ }
+};
+
+} // namespace resolve_variant
+
+
+/*!
\brief Assigns one geometry to another geometry
\details The assign algorithm assigns one geometry, e.g. a BOX, to another
geometry, e.g. a RING. This only works if it is possible and applicable.
@@ -142,25 +368,7 @@ geometry, e.g. a RING. This only works if it is possible and applicable.
template <typename Geometry1, typename Geometry2>
inline void assign(Geometry1& geometry1, Geometry2 const& geometry2)
{
- concept::check_concepts_and_equal_dimensions<Geometry1, Geometry2 const>();
-
- bool const same_point_order =
- point_order<Geometry1>::value == point_order<Geometry2>::value;
- bool const same_closure =
- closure<Geometry1>::value == closure<Geometry2>::value;
-
- BOOST_MPL_ASSERT_MSG
- (
- same_point_order, ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_POINT_ORDER
- , (types<Geometry1, Geometry2>)
- );
- BOOST_MPL_ASSERT_MSG
- (
- same_closure, ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_CLOSURE
- , (types<Geometry1, Geometry2>)
- );
-
- dispatch::convert<Geometry2, Geometry1>::apply(geometry2, geometry1);
+ resolve_variant::assign<Geometry1, Geometry2>::apply(geometry1, geometry2);
}
diff --git a/3party/boost/boost/geometry/algorithms/buffer.hpp b/3party/boost/boost/geometry/algorithms/buffer.hpp
index 29966d8cc8..b8b07ad4d9 100644
--- a/3party/boost/boost/geometry/algorithms/buffer.hpp
+++ b/3party/boost/boost/geometry/algorithms/buffer.hpp
@@ -17,16 +17,19 @@
#include <cstddef>
#include <boost/numeric/conversion/cast.hpp>
-
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/algorithms/envelope.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/algorithms/detail/disjoint.hpp>
#include <boost/geometry/arithmetic/arithmetic.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/geometries/segment.hpp>
+#include <boost/geometry/geometries/box.hpp>
#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp>
namespace boost { namespace geometry
{
@@ -92,21 +95,71 @@ struct buffer<BoxIn, BoxOut, box_tag, box_tag>
{
template <typename Distance>
static inline void apply(BoxIn const& box_in, Distance const& distance,
- Distance const& , BoxIn& box_out)
+ Distance const& , BoxOut& box_out)
{
detail::buffer::buffer_box(box_in, distance, box_out);
}
};
-// Many things to do. Point is easy, other geometries require self intersections
-// For point, note that it should output as a polygon (like the rest). Buffers
-// of a set of geometries are often lateron combined using a "dissolve" operation.
-// Two points close to each other get a combined kidney shaped buffer then.
-
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
+namespace resolve_variant {
+
+template <typename Geometry>
+struct buffer
+{
+ template <typename Distance, typename GeometryOut>
+ static inline void apply(Geometry const& geometry,
+ Distance const& distance,
+ Distance const& chord_length,
+ GeometryOut& out)
+ {
+ dispatch::buffer<Geometry, GeometryOut>::apply(geometry, distance, chord_length, out);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct buffer<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename Distance, typename GeometryOut>
+ struct visitor: boost::static_visitor<void>
+ {
+ Distance const& m_distance;
+ Distance const& m_chord_length;
+ GeometryOut& m_out;
+
+ visitor(Distance const& distance,
+ Distance const& chord_length,
+ GeometryOut& out)
+ : m_distance(distance),
+ m_chord_length(chord_length),
+ m_out(out)
+ {}
+
+ template <typename Geometry>
+ void operator()(Geometry const& geometry) const
+ {
+ buffer<Geometry>::apply(geometry, m_distance, m_chord_length, m_out);
+ }
+ };
+
+ template <typename Distance, typename GeometryOut>
+ static inline void apply(
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ Distance const& distance,
+ Distance const& chord_length,
+ GeometryOut& out
+ )
+ {
+ boost::apply_visitor(visitor<Distance, GeometryOut>(distance, chord_length, out), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
/*!
\brief \brief_calc{buffer}
\ingroup buffer
@@ -118,7 +171,6 @@ struct buffer<BoxIn, BoxOut, box_tag, box_tag>
\param geometry_out \param_geometry
\param distance The distance to be used for the buffer
\param chord_length (optional) The length of the chord's in the generated arcs around points or bends
-\note Currently only implemented for box, the trivial case, but still useful
\qbk{[include reference/algorithms/buffer.qbk]}
*/
@@ -129,11 +181,7 @@ inline void buffer(Input const& geometry_in, Output& geometry_out,
concept::check<Input const>();
concept::check<Output>();
- dispatch::buffer
- <
- Input,
- Output
- >::apply(geometry_in, distance, chord_length, geometry_out);
+ resolve_variant::buffer<Input>::apply(geometry_in, distance, chord_length, geometry_out);
}
/*!
@@ -146,7 +194,7 @@ inline void buffer(Input const& geometry_in, Output& geometry_out,
\param geometry \param_geometry
\param distance The distance to be used for the buffer
\param chord_length (optional) The length of the chord's in the generated arcs
- around points or bends
+ around points or bends (RESERVED, NOT YET USED)
\return \return_calc{buffer}
*/
template <typename Output, typename Input, typename Distance>
@@ -157,15 +205,78 @@ Output return_buffer(Input const& geometry, Distance const& distance, Distance c
Output geometry_out;
- dispatch::buffer
- <
- Input,
- Output
- >::apply(geometry, distance, chord_length, geometry_out);
+ resolve_variant::buffer<Input>::apply(geometry, distance, chord_length, geometry_out);
return geometry_out;
}
+/*!
+\brief \brief_calc{buffer}
+\ingroup buffer
+\details \details_calc{buffer, \det_buffer}.
+\tparam GeometryIn \tparam_geometry
+\tparam MultiPolygon \tparam_geometry{MultiPolygon}
+\tparam DistanceStrategy A strategy defining distance (or radius)
+\tparam SideStrategy A strategy defining creation along sides
+\tparam JoinStrategy A strategy defining creation around convex corners
+\tparam EndStrategy A strategy defining creation at linestring ends
+\tparam PointStrategy A strategy defining creation around points
+\param geometry_in \param_geometry
+\param geometry_out output multi polygon (or std:: collection of polygons),
+ will contain a buffered version of the input geometry
+\param distance_strategy The distance strategy to be used
+\param side_strategy The side strategy to be used
+\param join_strategy The join strategy to be used
+\param end_strategy The end strategy to be used
+\param point_strategy The point strategy to be used
+
+\qbk{distinguish,with strategies}
+\qbk{[include reference/algorithms/buffer_with_strategies.qbk]}
+ */
+template
+<
+ typename GeometryIn,
+ typename MultiPolygon,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy
+>
+inline void buffer(GeometryIn const& geometry_in,
+ MultiPolygon& geometry_out,
+ DistanceStrategy const& distance_strategy,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ PointStrategy const& point_strategy)
+{
+ typedef typename boost::range_value<MultiPolygon>::type polygon_type;
+ concept::check<GeometryIn const>();
+ concept::check<polygon_type>();
+
+ typedef typename point_type<GeometryIn>::type point_type;
+ typedef typename rescale_policy_type<point_type>::type rescale_policy_type;
+
+ geometry_out.clear();
+
+ model::box<point_type> box;
+ envelope(geometry_in, box);
+ buffer(box, box, distance_strategy.max_distance(join_strategy, end_strategy));
+
+ rescale_policy_type rescale_policy
+ = boost::geometry::get_rescale_policy<rescale_policy_type>(box);
+
+ detail::buffer::buffer_inserter<polygon_type>(geometry_in, std::back_inserter(geometry_out),
+ distance_strategy,
+ side_strategy,
+ join_strategy,
+ end_strategy,
+ point_strategy,
+ rescale_policy);
+}
+
+
}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_ALGORITHMS_BUFFER_HPP
diff --git a/3party/boost/boost/geometry/algorithms/centroid.hpp b/3party/boost/boost/geometry/algorithms/centroid.hpp
index 9be51f4093..2d8a737a18 100644
--- a/3party/boost/boost/geometry/algorithms/centroid.hpp
+++ b/3party/boost/boost/geometry/algorithms/centroid.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -18,7 +19,10 @@
#include <cstddef>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/core/closure.hpp>
#include <boost/geometry/core/cs.hpp>
@@ -27,18 +31,24 @@
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/distance.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/strategies/centroid.hpp>
#include <boost/geometry/strategies/concepts/centroid_concept.hpp>
+#include <boost/geometry/strategies/default_strategy.hpp>
#include <boost/geometry/views/closeable_view.hpp>
#include <boost/geometry/util/for_each_coordinate.hpp>
#include <boost/geometry/util/select_coordinate_type.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/multi/algorithms/num_points.hpp>
namespace boost { namespace geometry
@@ -63,8 +73,15 @@ class centroid_exception : public geometry::exception
{
public:
+ /*!
+ \brief The default constructor
+ */
inline centroid_exception() {}
+ /*!
+ \brief Returns the explanatory string.
+ \return Pointer to a null-terminated string with explanatory information.
+ */
virtual char const* what() const throw()
{
return "Boost.Geometry Centroid calculation exception";
@@ -90,55 +107,56 @@ struct centroid_point
template
<
- typename Box,
+ typename Indexed,
typename Point,
std::size_t Dimension,
std::size_t DimensionCount
>
-struct centroid_box_calculator
+struct centroid_indexed_calculator
{
typedef typename select_coordinate_type
<
- Box, Point
+ Indexed, Point
>::type coordinate_type;
- static inline void apply(Box const& box, Point& centroid)
+ static inline void apply(Indexed const& indexed, Point& centroid)
{
- coordinate_type const c1 = get<min_corner, Dimension>(box);
- coordinate_type const c2 = get<max_corner, Dimension>(box);
+ coordinate_type const c1 = get<min_corner, Dimension>(indexed);
+ coordinate_type const c2 = get<max_corner, Dimension>(indexed);
coordinate_type m = c1 + c2;
- m /= 2.0;
+ coordinate_type const two = 2;
+ m /= two;
set<Dimension>(centroid, m);
- centroid_box_calculator
+ centroid_indexed_calculator
<
- Box, Point,
+ Indexed, Point,
Dimension + 1, DimensionCount
- >::apply(box, centroid);
+ >::apply(indexed, centroid);
}
};
-template<typename Box, typename Point, std::size_t DimensionCount>
-struct centroid_box_calculator<Box, Point, DimensionCount, DimensionCount>
+template<typename Indexed, typename Point, std::size_t DimensionCount>
+struct centroid_indexed_calculator<Indexed, Point, DimensionCount, DimensionCount>
{
- static inline void apply(Box const& , Point& )
+ static inline void apply(Indexed const& , Point& )
{
}
};
-struct centroid_box
+struct centroid_indexed
{
- template<typename Box, typename Point, typename Strategy>
- static inline void apply(Box const& box, Point& centroid,
+ template<typename Indexed, typename Point, typename Strategy>
+ static inline void apply(Indexed const& indexed, Point& centroid,
Strategy const&)
{
- centroid_box_calculator
+ centroid_indexed_calculator
<
- Box, Point,
- 0, dimension<Box>::type::value
- >::apply(box, centroid);
+ Indexed, Point,
+ 0, dimension<Indexed>::type::value
+ >::apply(indexed, centroid);
}
};
@@ -231,9 +249,11 @@ struct centroid_polygon_state
per_ring::apply(exterior_ring(poly), strategy, state);
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(poly);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(poly);
+
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
per_ring::apply(*it, strategy, state);
}
@@ -256,6 +276,59 @@ struct centroid_polygon
};
+/*!
+ \brief Building block of a multi-point, to be used as Policy in the
+ more generec centroid_multi
+*/
+struct centroid_multi_point_state
+{
+ template <typename Point, typename Strategy>
+ static inline void apply(Point const& point,
+ Strategy const& strategy, typename Strategy::state_type& state)
+ {
+ strategy.apply(point, state);
+ }
+};
+
+
+/*!
+ \brief Generic implementation which calls a policy to calculate the
+ centroid of the total of its single-geometries
+ \details The Policy is, in general, the single-version, with state. So
+ detail::centroid::centroid_polygon_state is used as a policy for this
+ detail::centroid::centroid_multi
+
+*/
+template <typename Policy>
+struct centroid_multi
+{
+ template <typename Multi, typename Point, typename Strategy>
+ static inline void apply(Multi const& multi, Point& centroid,
+ Strategy const& strategy)
+ {
+#if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW)
+ // If there is nothing in any of the ranges, it is not possible
+ // to calculate the centroid
+ if (geometry::num_points(multi) == 0)
+ {
+ throw centroid_exception();
+ }
+#endif
+
+ typename Strategy::state_type state;
+
+ for (typename boost::range_iterator<Multi const>::type
+ it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it)
+ {
+ Policy::apply(*it, strategy, state);
+ }
+ Strategy::result(state, centroid);
+ }
+};
+
+
}} // namespace detail::centroid
#endif // DOXYGEN_NO_DETAIL
@@ -279,7 +352,12 @@ struct centroid<Geometry, point_tag>
template <typename Box>
struct centroid<Box, box_tag>
- : detail::centroid::centroid_box
+ : detail::centroid::centroid_indexed
+{};
+
+template <typename Segment>
+struct centroid<Segment, segment_tag>
+ : detail::centroid::centroid_indexed
{};
template <typename Ring>
@@ -290,17 +368,124 @@ struct centroid<Ring, ring_tag>
template <typename Linestring>
struct centroid<Linestring, linestring_tag>
: detail::centroid::centroid_range<closed>
- {};
+{};
template <typename Polygon>
struct centroid<Polygon, polygon_tag>
: detail::centroid::centroid_polygon
- {};
+{};
+
+template <typename MultiLinestring>
+struct centroid<MultiLinestring, multi_linestring_tag>
+ : detail::centroid::centroid_multi
+ <
+ detail::centroid::centroid_range_state<closed>
+ >
+{};
+
+template <typename MultiPolygon>
+struct centroid<MultiPolygon, multi_polygon_tag>
+ : detail::centroid::centroid_multi
+ <
+ detail::centroid::centroid_polygon_state
+ >
+{};
+
+template <typename MultiPoint>
+struct centroid<MultiPoint, multi_point_tag>
+ : detail::centroid::centroid_multi
+ <
+ detail::centroid::centroid_multi_point_state
+ >
+{};
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
+namespace resolve_strategy {
+
+template <typename Geometry>
+struct centroid
+{
+ template <typename Point, typename Strategy>
+ static inline void apply(Geometry const& geometry, Point& out, Strategy const& strategy)
+ {
+ dispatch::centroid<Geometry>::apply(geometry, out, strategy);
+ }
+
+ template <typename Point>
+ static inline void apply(Geometry const& geometry, Point& out, default_strategy)
+ {
+ typedef typename strategy::centroid::services::default_strategy
+ <
+ typename cs_tag<Geometry>::type,
+ typename tag_cast
+ <
+ typename tag<Geometry>::type,
+ pointlike_tag,
+ linear_tag,
+ areal_tag
+ >::type,
+ dimension<Geometry>::type::value,
+ Point,
+ Geometry
+ >::type strategy_type;
+
+ dispatch::centroid<Geometry>::apply(geometry, out, strategy_type());
+ }
+};
+
+} // namespace resolve_strategy
+
+
+namespace resolve_variant {
+
+template <typename Geometry>
+struct centroid
+{
+ template <typename Point, typename Strategy>
+ static inline void apply(Geometry const& geometry, Point& out, Strategy const& strategy)
+ {
+ concept::check_concepts_and_equal_dimensions<Point, Geometry const>();
+ resolve_strategy::centroid<Geometry>::apply(geometry, out, strategy);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct centroid<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename Point, typename Strategy>
+ struct visitor: boost::static_visitor<void>
+ {
+ Point& m_out;
+ Strategy const& m_strategy;
+
+ visitor(Point& out, Strategy const& strategy)
+ : m_out(out), m_strategy(strategy)
+ {}
+
+ template <typename Geometry>
+ void operator()(Geometry const& geometry) const
+ {
+ centroid<Geometry>::apply(geometry, m_out, m_strategy);
+ }
+ };
+
+ template <typename Point, typename Strategy>
+ static inline void
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ Point& out,
+ Strategy const& strategy)
+ {
+ boost::apply_visitor(visitor<Point, Strategy>(out, strategy), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
/*!
\brief \brief_calc{centroid} \brief_strategy
\ingroup centroid
@@ -322,15 +507,7 @@ template<typename Geometry, typename Point, typename Strategy>
inline void centroid(Geometry const& geometry, Point& c,
Strategy const& strategy)
{
- //BOOST_CONCEPT_ASSERT( (geometry::concept::CentroidStrategy<Strategy>) );
-
- concept::check_concepts_and_equal_dimensions<Point, Geometry const>();
-
- typedef typename point_type<Geometry>::type point_type;
-
- // Call dispatch apply method. That one returns true if centroid
- // should be taken from state.
- dispatch::centroid<Geometry>::apply(geometry, c, strategy);
+ resolve_variant::centroid<Geometry>::apply(geometry, c, strategy);
}
@@ -353,24 +530,7 @@ inline void centroid(Geometry const& geometry, Point& c,
template<typename Geometry, typename Point>
inline void centroid(Geometry const& geometry, Point& c)
{
- concept::check_concepts_and_equal_dimensions<Point, Geometry const>();
-
- typedef typename strategy::centroid::services::default_strategy
- <
- typename cs_tag<Geometry>::type,
- typename tag_cast
- <
- typename tag<Geometry>::type,
- pointlike_tag,
- linear_tag,
- areal_tag
- >::type,
- dimension<Geometry>::type::value,
- Point,
- Geometry
- >::type strategy_type;
-
- centroid(geometry, c, strategy_type());
+ centroid(geometry, c, default_strategy());
}
@@ -388,8 +548,6 @@ inline void centroid(Geometry const& geometry, Point& c)
template<typename Point, typename Geometry>
inline Point return_centroid(Geometry const& geometry)
{
- concept::check_concepts_and_equal_dimensions<Point, Geometry const>();
-
Point c;
centroid(geometry, c);
return c;
@@ -413,10 +571,6 @@ inline Point return_centroid(Geometry const& geometry)
template<typename Point, typename Geometry, typename Strategy>
inline Point return_centroid(Geometry const& geometry, Strategy const& strategy)
{
- //BOOST_CONCEPT_ASSERT( (geometry::concept::CentroidStrategy<Strategy>) );
-
- concept::check_concepts_and_equal_dimensions<Point, Geometry const>();
-
Point c;
centroid(geometry, c, strategy);
return c;
diff --git a/3party/boost/boost/geometry/algorithms/clear.hpp b/3party/boost/boost/geometry/algorithms/clear.hpp
index b8cd0dca71..1850816b1b 100644
--- a/3party/boost/boost/geometry/algorithms/clear.hpp
+++ b/3party/boost/boost/geometry/algorithms/clear.hpp
@@ -15,17 +15,19 @@
#define BOOST_GEOMETRY_ALGORITHMS_CLEAR_HPP
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
#include <boost/geometry/core/mutable_range.hpp>
#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/type_traits/remove_const.hpp>
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
namespace boost { namespace geometry
@@ -125,16 +127,28 @@ struct clear<Polygon, polygon_tag>
template <typename Geometry>
-struct devarianted_clear
+struct clear<Geometry, multi_tag>
+ : detail::clear::collection_clear<Geometry>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_variant {
+
+template <typename Geometry>
+struct clear
{
static inline void apply(Geometry& geometry)
{
- clear<Geometry>::apply(geometry);
+ dispatch::clear<Geometry>::apply(geometry);
}
};
template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct devarianted_clear<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+struct clear<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
{
struct visitor: static_visitor<void>
{
@@ -151,9 +165,7 @@ struct devarianted_clear<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
}
};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
+} // namespace resolve_variant
/*!
@@ -174,7 +186,7 @@ inline void clear(Geometry& geometry)
{
concept::check<Geometry>();
- dispatch::devarianted_clear<Geometry>::apply(geometry);
+ resolve_variant::clear<Geometry>::apply(geometry);
}
diff --git a/3party/boost/boost/geometry/algorithms/comparable_distance.hpp b/3party/boost/boost/geometry/algorithms/comparable_distance.hpp
index 3467045ca2..6f009da3ed 100644
--- a/3party/boost/boost/geometry/algorithms/comparable_distance.hpp
+++ b/3party/boost/boost/geometry/algorithms/comparable_distance.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,61 +19,7 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP
#define BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP
-
-#include <boost/geometry/algorithms/distance.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
-\brief \brief_calc2{comparable distance measurement}
-\ingroup distance
-\details The free function comparable_distance does not necessarily calculate the distance,
- but it calculates a distance measure such that two distances are comparable to each other.
- For example: for the Cartesian coordinate system, Pythagoras is used but the square root
- is not taken, which makes it faster and the results of two point pairs can still be
- compared to each other.
-\tparam Geometry1 first geometry type
-\tparam Geometry2 second geometry type
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_calc{comparable distance}
-
-\qbk{[include reference/algorithms/comparable_distance.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline typename default_distance_result<Geometry1, Geometry2>::type comparable_distance(
- Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- concept::check<Geometry1 const>();
- concept::check<Geometry2 const>();
-
- typedef typename point_type<Geometry1>::type point1_type;
- typedef typename point_type<Geometry2>::type point2_type;
-
- // Define a point-point-distance-strategy
- // for either the normal case, either the reversed case
-
- typedef typename strategy::distance::services::comparable_type
- <
- typename boost::mpl::if_c
- <
- geometry::reverse_dispatch
- <Geometry1, Geometry2>::type::value,
- typename strategy::distance::services::default_strategy
- <point_tag, point2_type, point1_type>::type,
- typename strategy::distance::services::default_strategy
- <point_tag, point1_type, point2_type>::type
- >::type
- >::type strategy_type;
-
- return distance(geometry1, geometry2, strategy_type());
-}
-
-
-}} // namespace boost::geometry
-
+#include <boost/geometry/algorithms/detail/comparable_distance/interface.hpp>
+#include <boost/geometry/algorithms/detail/comparable_distance/implementation.hpp>
#endif // BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/convert.hpp b/3party/boost/boost/geometry/algorithms/convert.hpp
index 6b48ca604a..f8685af2d7 100644
--- a/3party/boost/boost/geometry/algorithms/convert.hpp
+++ b/3party/boost/boost/geometry/algorithms/convert.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -20,6 +21,10 @@
#include <boost/numeric/conversion/cast.hpp>
#include <boost/range.hpp>
#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/arithmetic/arithmetic.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
@@ -31,6 +36,7 @@
#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
#include <boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/views/closeable_view.hpp>
#include <boost/geometry/views/reversible_view.hpp>
@@ -38,11 +44,9 @@
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/core/closure.hpp>
#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/core/tags.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
namespace boost { namespace geometry
@@ -51,7 +55,7 @@ namespace boost { namespace geometry
// Silence warning C4127: conditional expression is constant
// Silence warning C4512: assignment operator could not be generated
#if defined(_MSC_VER)
-#pragma warning(push)
+#pragma warning(push)
#pragma warning(disable : 4127 4512)
#endif
@@ -127,22 +131,22 @@ struct segment_to_range
}
};
-template
+template
<
- typename Range1,
- typename Range2,
+ typename Range1,
+ typename Range2,
bool Reverse = false
>
struct range_to_range
{
typedef typename reversible_view
<
- Range1 const,
+ Range1 const,
Reverse ? iterate_reverse : iterate_forward
>::type rview_type;
typedef typename closeable_view
<
- rview_type const,
+ rview_type const,
geometry::closure<Range1>::value
>::type view_type;
@@ -178,7 +182,7 @@ struct polygon_to_polygon
{
typedef range_to_range
<
- typename geometry::ring_type<Polygon1>::type,
+ typename geometry::ring_type<Polygon1>::type,
typename geometry::ring_type<Polygon2>::type,
geometry::point_order<Polygon1>::value
!= geometry::point_order<Polygon2>::value
@@ -188,7 +192,7 @@ struct polygon_to_polygon
{
// Clearing managed per ring, and in the resizing of interior rings
- per_ring::apply(geometry::exterior_ring(source),
+ per_ring::apply(geometry::exterior_ring(source),
geometry::exterior_ring(destination));
// Container should be resizeable
@@ -200,13 +204,15 @@ struct polygon_to_polygon
>::type
>::apply(interior_rings(destination), num_interior_rings(source));
- typename interior_return_type<Polygon1 const>::type rings_source
- = interior_rings(source);
- typename interior_return_type<Polygon2>::type rings_dest
- = interior_rings(destination);
+ typename interior_return_type<Polygon1 const>::type
+ rings_source = interior_rings(source);
+ typename interior_return_type<Polygon2>::type
+ rings_dest = interior_rings(destination);
- BOOST_AUTO_TPL(it_source, boost::begin(rings_source));
- BOOST_AUTO_TPL(it_dest, boost::begin(rings_dest));
+ typename detail::interior_iterator<Polygon1 const>::type
+ it_source = boost::begin(rings_source);
+ typename detail::interior_iterator<Polygon2>::type
+ it_dest = boost::begin(rings_dest);
for ( ; it_source != boost::end(rings_source); ++it_source, ++it_dest)
{
@@ -215,6 +221,37 @@ struct polygon_to_polygon
}
};
+template <typename Single, typename Multi, typename Policy>
+struct single_to_multi: private Policy
+{
+ static inline void apply(Single const& single, Multi& multi)
+ {
+ traits::resize<Multi>::apply(multi, 1);
+ Policy::apply(single, *boost::begin(multi));
+ }
+};
+
+
+
+template <typename Multi1, typename Multi2, typename Policy>
+struct multi_to_multi: private Policy
+{
+ static inline void apply(Multi1 const& multi1, Multi2& multi2)
+ {
+ traits::resize<Multi2>::apply(multi2, boost::size(multi1));
+
+ typename boost::range_iterator<Multi1 const>::type it1
+ = boost::begin(multi1);
+ typename boost::range_iterator<Multi2>::type it2
+ = boost::begin(multi2);
+
+ for (; it1 != boost::end(multi1); ++it1, ++it2)
+ {
+ Policy::apply(*it1, *it2);
+ }
+ }
+};
+
}} // namespace detail::conversion
#endif // DOXYGEN_NO_DETAIL
@@ -292,8 +329,8 @@ struct convert<Segment, LineString, segment_tag, linestring_tag, DimensionCount,
template <typename Ring1, typename Ring2, std::size_t DimensionCount>
struct convert<Ring1, Ring2, ring_tag, ring_tag, DimensionCount, false>
: detail::conversion::range_to_range
- <
- Ring1,
+ <
+ Ring1,
Ring2,
geometry::point_order<Ring1>::value
!= geometry::point_order<Ring2>::value
@@ -314,8 +351,8 @@ template <typename Box, typename Ring>
struct convert<Box, Ring, box_tag, ring_tag, 2, false>
: detail::conversion::box_to_range
<
- Box,
- Ring,
+ Box,
+ Ring,
geometry::closure<Ring>::value == closed,
geometry::point_order<Ring>::value == counterclockwise
>
@@ -389,18 +426,74 @@ struct convert<Polygon, Ring, polygon_tag, ring_tag, DimensionCount, false>
};
+// Dispatch for multi <-> multi, specifying their single-version as policy.
+// Note that, even if the multi-types are mutually different, their single
+// version types might be the same and therefore we call boost::is_same again
+
+template <typename Multi1, typename Multi2, std::size_t DimensionCount>
+struct convert<Multi1, Multi2, multi_tag, multi_tag, DimensionCount, false>
+ : detail::conversion::multi_to_multi
+ <
+ Multi1,
+ Multi2,
+ convert
+ <
+ typename boost::range_value<Multi1>::type,
+ typename boost::range_value<Multi2>::type,
+ typename single_tag_of
+ <
+ typename tag<Multi1>::type
+ >::type,
+ typename single_tag_of
+ <
+ typename tag<Multi2>::type
+ >::type,
+ DimensionCount
+ >
+ >
+{};
+
+
+template <typename Single, typename Multi, typename SingleTag, std::size_t DimensionCount>
+struct convert<Single, Multi, SingleTag, multi_tag, DimensionCount, false>
+ : detail::conversion::single_to_multi
+ <
+ Single,
+ Multi,
+ convert
+ <
+ Single,
+ typename boost::range_value<Multi>::type,
+ typename tag<Single>::type,
+ typename single_tag_of
+ <
+ typename tag<Multi>::type
+ >::type,
+ DimensionCount,
+ false
+ >
+ >
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_variant {
+
template <typename Geometry1, typename Geometry2>
-struct devarianted_convert
+struct convert
{
static inline void apply(Geometry1 const& geometry1, Geometry2& geometry2)
{
concept::check_concepts_and_equal_dimensions<Geometry1 const, Geometry2>();
- convert<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ dispatch::convert<Geometry1, Geometry2>::apply(geometry1, geometry2);
}
};
template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct devarianted_convert<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+struct convert<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
{
struct visitor: static_visitor<void>
{
@@ -413,7 +506,7 @@ struct devarianted_convert<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometr
template <typename Geometry1>
inline void operator()(Geometry1 const& geometry1) const
{
- devarianted_convert<Geometry1, Geometry2>::apply(geometry1, m_geometry2);
+ convert<Geometry1, Geometry2>::apply(geometry1, m_geometry2);
}
};
@@ -426,17 +519,15 @@ struct devarianted_convert<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometr
}
};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
+}
/*!
\brief Converts one geometry to another geometry
\details The convert algorithm converts one geometry, e.g. a BOX, to another
geometry, e.g. a RING. This only works if it is possible and applicable.
-If the point-order is different, or the closure is different between two
-geometry types, it will be converted correctly by explicitly reversing the
+If the point-order is different, or the closure is different between two
+geometry types, it will be converted correctly by explicitly reversing the
points or closing or opening the polygon rings.
\ingroup convert
\tparam Geometry1 \tparam_geometry
@@ -449,7 +540,7 @@ points or closing or opening the polygon rings.
template <typename Geometry1, typename Geometry2>
inline void convert(Geometry1 const& geometry1, Geometry2& geometry2)
{
- dispatch::devarianted_convert<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ resolve_variant::convert<Geometry1, Geometry2>::apply(geometry1, geometry2);
}
#if defined(_MSC_VER)
diff --git a/3party/boost/boost/geometry/algorithms/convex_hull.hpp b/3party/boost/boost/geometry/algorithms/convex_hull.hpp
index a623064bf2..d5bd4d92a5 100644
--- a/3party/boost/boost/geometry/algorithms/convex_hull.hpp
+++ b/3party/boost/boost/geometry/algorithms/convex_hull.hpp
@@ -15,6 +15,9 @@
#define BOOST_GEOMETRY_ALGORITHMS_CONVEX_HULL_HPP
#include <boost/array.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/core/point_order.hpp>
@@ -24,6 +27,7 @@
#include <boost/geometry/strategies/convex_hull.hpp>
#include <boost/geometry/strategies/concepts/convex_hull_concept.hpp>
+#include <boost/geometry/strategies/default_strategy.hpp>
#include <boost/geometry/views/detail/range_type.hpp>
@@ -77,18 +81,6 @@ struct hull_to_geometry
}
};
-
-// Helper metafunction for default strategy retrieval
-template <typename Geometry>
-struct default_strategy
- : strategy_convex_hull
- <
- Geometry,
- typename point_type<Geometry>::type
- >
-{};
-
-
}} // namespace detail::convex_hull
#endif // DOXYGEN_NO_DETAIL
@@ -142,25 +134,169 @@ struct convex_hull_insert
#endif // DOXYGEN_NO_DISPATCH
-template<typename Geometry, typename OutputGeometry, typename Strategy>
-inline void convex_hull(Geometry const& geometry,
- OutputGeometry& out, Strategy const& strategy)
+namespace resolve_strategy {
+
+struct convex_hull
{
- concept::check_concepts_and_equal_dimensions
- <
+ template <typename Geometry, typename OutputGeometry, typename Strategy>
+ static inline void apply(Geometry const& geometry,
+ OutputGeometry& out,
+ Strategy const& strategy)
+ {
+ BOOST_CONCEPT_ASSERT( (geometry::concept::ConvexHullStrategy<Strategy>) );
+ dispatch::convex_hull<Geometry>::apply(geometry, out, strategy);
+ }
+
+ template <typename Geometry, typename OutputGeometry>
+ static inline void apply(Geometry const& geometry,
+ OutputGeometry& out,
+ default_strategy)
+ {
+ typedef typename strategy_convex_hull<
+ Geometry,
+ typename point_type<Geometry>::type
+ >::type strategy_type;
+
+ apply(geometry, out, strategy_type());
+ }
+};
+
+struct convex_hull_insert
+{
+ template <typename Geometry, typename OutputIterator, typename Strategy>
+ static inline OutputIterator apply(Geometry const& geometry,
+ OutputIterator& out,
+ Strategy const& strategy)
+ {
+ BOOST_CONCEPT_ASSERT( (geometry::concept::ConvexHullStrategy<Strategy>) );
+
+ return dispatch::convex_hull_insert<
+ geometry::point_order<Geometry>::value
+ >::apply(geometry, out, strategy);
+ }
+
+ template <typename Geometry, typename OutputIterator>
+ static inline OutputIterator apply(Geometry const& geometry,
+ OutputIterator& out,
+ default_strategy)
+ {
+ typedef typename strategy_convex_hull<
+ Geometry,
+ typename point_type<Geometry>::type
+ >::type strategy_type;
+
+ return apply(geometry, out, strategy_type());
+ }
+};
+
+}; // namespace resolve_strategy
+
+
+namespace resolve_variant {
+
+template <typename Geometry>
+struct convex_hull
+{
+ template <typename OutputGeometry, typename Strategy>
+ static inline void apply(Geometry const& geometry, OutputGeometry& out, Strategy const& strategy)
+ {
+ concept::check_concepts_and_equal_dimensions<
const Geometry,
OutputGeometry
>();
- BOOST_CONCEPT_ASSERT( (geometry::concept::ConvexHullStrategy<Strategy>) );
+ resolve_strategy::convex_hull::apply(geometry, out, strategy);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct convex_hull<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename OutputGeometry, typename Strategy>
+ struct visitor: boost::static_visitor<void>
+ {
+ OutputGeometry& m_out;
+ Strategy const& m_strategy;
+
+ visitor(OutputGeometry& out, Strategy const& strategy)
+ : m_out(out), m_strategy(strategy)
+ {}
+
+ template <typename Geometry>
+ void operator()(Geometry const& geometry) const
+ {
+ convex_hull<Geometry>::apply(geometry, m_out, m_strategy);
+ }
+ };
+
+ template <typename OutputGeometry, typename Strategy>
+ static inline void
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ OutputGeometry& out,
+ Strategy const& strategy)
+ {
+ boost::apply_visitor(visitor<OutputGeometry, Strategy>(out, strategy), geometry);
+ }
+};
+
+template <typename Geometry>
+struct convex_hull_insert
+{
+ template <typename OutputIterator, typename Strategy>
+ static inline OutputIterator apply(Geometry const& geometry, OutputIterator& out, Strategy const& strategy)
+ {
+ // Concept: output point type = point type of input geometry
+ concept::check<Geometry const>();
+ concept::check<typename point_type<Geometry>::type>();
+
+ return resolve_strategy::convex_hull_insert::apply(geometry, out, strategy);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct convex_hull_insert<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename OutputIterator, typename Strategy>
+ struct visitor: boost::static_visitor<OutputIterator>
+ {
+ OutputIterator& m_out;
+ Strategy const& m_strategy;
+
+ visitor(OutputIterator& out, Strategy const& strategy)
+ : m_out(out), m_strategy(strategy)
+ {}
+ template <typename Geometry>
+ OutputIterator operator()(Geometry const& geometry) const
+ {
+ return convex_hull_insert<Geometry>::apply(geometry, m_out, m_strategy);
+ }
+ };
+
+ template <typename OutputIterator, typename Strategy>
+ static inline OutputIterator
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ OutputIterator& out,
+ Strategy const& strategy)
+ {
+ return boost::apply_visitor(visitor<OutputIterator, Strategy>(out, strategy), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
+template<typename Geometry, typename OutputGeometry, typename Strategy>
+inline void convex_hull(Geometry const& geometry,
+ OutputGeometry& out, Strategy const& strategy)
+{
if (geometry::num_points(geometry) == 0)
{
// Leave output empty
return;
}
- dispatch::convex_hull<Geometry>::apply(geometry, out, strategy);
+ resolve_variant::convex_hull<Geometry>::apply(geometry, out, strategy);
}
@@ -179,15 +315,7 @@ template<typename Geometry, typename OutputGeometry>
inline void convex_hull(Geometry const& geometry,
OutputGeometry& hull)
{
- concept::check_concepts_and_equal_dimensions
- <
- const Geometry,
- OutputGeometry
- >();
-
- typedef typename detail::convex_hull::default_strategy<Geometry>::type strategy_type;
-
- convex_hull(geometry, hull, strategy_type());
+ convex_hull(geometry, hull, default_strategy());
}
#ifndef DOXYGEN_NO_DETAIL
@@ -199,16 +327,8 @@ template<typename Geometry, typename OutputIterator, typename Strategy>
inline OutputIterator convex_hull_insert(Geometry const& geometry,
OutputIterator out, Strategy const& strategy)
{
- // Concept: output point type = point type of input geometry
- concept::check<Geometry const>();
- concept::check<typename point_type<Geometry>::type>();
-
- BOOST_CONCEPT_ASSERT( (geometry::concept::ConvexHullStrategy<Strategy>) );
-
- return dispatch::convex_hull_insert
- <
- geometry::point_order<Geometry>::value
- >::apply(geometry, out, strategy);
+ return resolve_variant::convex_hull_insert<Geometry>
+ ::apply(geometry, out, strategy);
}
@@ -229,13 +349,7 @@ template<typename Geometry, typename OutputIterator>
inline OutputIterator convex_hull_insert(Geometry const& geometry,
OutputIterator out)
{
- // Concept: output point type = point type of input geometry
- concept::check<Geometry const>();
- concept::check<typename point_type<Geometry>::type>();
-
- typedef typename detail::convex_hull::default_strategy<Geometry>::type strategy_type;
-
- return convex_hull_insert(geometry, out, strategy_type());
+ return convex_hull_insert(geometry, out, default_strategy());
}
diff --git a/3party/boost/boost/geometry/algorithms/correct.hpp b/3party/boost/boost/geometry/algorithms/correct.hpp
index 79c76a567d..3c61b2c0d2 100644
--- a/3party/boost/boost/geometry/algorithms/correct.hpp
+++ b/3party/boost/boost/geometry/algorithms/correct.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -21,28 +22,34 @@
#include <boost/mpl/assert.hpp>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/core/closure.hpp>
#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/mutable_range.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/area.hpp>
#include <boost/geometry/algorithms/disjoint.hpp>
+#include <boost/geometry/algorithms/detail/multi_modify.hpp>
#include <boost/geometry/util/order_as_direction.hpp>
-
namespace boost { namespace geometry
{
// Silence warning C4127: conditional expression is constant
#if defined(_MSC_VER)
-#pragma warning(push)
+#pragma warning(push)
#pragma warning(disable : 4127)
#endif
@@ -176,9 +183,10 @@ struct correct_polygon
std::less<area_result_type>
>::apply(exterior_ring(poly));
- typename interior_return_type<Polygon>::type rings
- = interior_rings(poly);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon>::type
+ rings = interior_rings(poly);
+ for (typename detail::interior_iterator<Polygon>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
correct_ring
<
@@ -238,10 +246,69 @@ struct correct<Polygon, polygon_tag>
{};
+template <typename MultiPoint>
+struct correct<MultiPoint, multi_point_tag>
+ : detail::correct::correct_nop<MultiPoint>
+{};
+
+
+template <typename MultiLineString>
+struct correct<MultiLineString, multi_linestring_tag>
+ : detail::correct::correct_nop<MultiLineString>
+{};
+
+
+template <typename Geometry>
+struct correct<Geometry, multi_polygon_tag>
+ : detail::multi_modify
+ <
+ Geometry,
+ detail::correct::correct_polygon
+ <
+ typename boost::range_value<Geometry>::type
+ >
+ >
+{};
+
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
+namespace resolve_variant {
+
+template <typename Geometry>
+struct correct
+{
+ static inline void apply(Geometry& geometry)
+ {
+ concept::check<Geometry const>();
+ dispatch::correct<Geometry>::apply(geometry);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct correct<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: boost::static_visitor<void>
+ {
+ template <typename Geometry>
+ void operator()(Geometry& geometry) const
+ {
+ correct<Geometry>::apply(geometry);
+ }
+ };
+
+ static inline void
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry)
+ {
+ boost::apply_visitor(visitor(), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
/*!
\brief Corrects a geometry
\details Corrects a geometry: all rings which are wrongly oriented with respect
@@ -257,9 +324,7 @@ struct correct<Polygon, polygon_tag>
template <typename Geometry>
inline void correct(Geometry& geometry)
{
- concept::check<Geometry const>();
-
- dispatch::correct<Geometry>::apply(geometry);
+ resolve_variant::correct<Geometry>::apply(geometry);
}
#if defined(_MSC_VER)
diff --git a/3party/boost/boost/geometry/algorithms/covered_by.hpp b/3party/boost/boost/geometry/algorithms/covered_by.hpp
index f0f5724213..e50dc338af 100644
--- a/3party/boost/boost/geometry/algorithms/covered_by.hpp
+++ b/3party/boost/boost/geometry/algorithms/covered_by.hpp
@@ -4,6 +4,9 @@
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -11,21 +14,52 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP
#define BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP
#include <cstddef>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/algorithms/within.hpp>
#include <boost/geometry/strategies/cartesian/point_in_box.hpp>
#include <boost/geometry/strategies/cartesian/box_in_box.hpp>
+#include <boost/geometry/strategies/default_strategy.hpp>
namespace boost { namespace geometry
{
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace covered_by {
+
+struct use_point_in_geometry
+{
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+ {
+ return detail::within::point_in_geometry(geometry1, geometry2, strategy) >= 0;
+ }
+};
+
+struct use_relate
+{
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& /*strategy*/)
+ {
+ return Strategy::apply(geometry1, geometry2);
+ }
+};
+
+}} // namespace detail::covered_by
+#endif // DOXYGEN_NO_DETAIL
+
#ifndef DOXYGEN_NO_DISPATCH
namespace dispatch
{
@@ -37,7 +71,8 @@ template
typename Tag1 = typename tag<Geometry1>::type,
typename Tag2 = typename tag<Geometry2>::type
>
-struct covered_by: not_implemented<Tag1, Tag2>
+struct covered_by
+ : not_implemented<Tag1, Tag2>
{};
@@ -65,43 +100,326 @@ struct covered_by<Box1, Box2, box_tag, box_tag>
};
+// P/P
+
+template <typename Point1, typename Point2>
+struct covered_by<Point1, Point2, point_tag, point_tag>
+ : public detail::covered_by::use_point_in_geometry
+{};
+
+template <typename Point, typename MultiPoint>
+struct covered_by<Point, MultiPoint, point_tag, multi_point_tag>
+ : public detail::covered_by::use_point_in_geometry
+{};
+
+// P/L
+
+template <typename Point, typename Segment>
+struct covered_by<Point, Segment, point_tag, segment_tag>
+ : public detail::covered_by::use_point_in_geometry
+{};
+
+template <typename Point, typename Linestring>
+struct covered_by<Point, Linestring, point_tag, linestring_tag>
+ : public detail::covered_by::use_point_in_geometry
+{};
+
+template <typename Point, typename MultiLinestring>
+struct covered_by<Point, MultiLinestring, point_tag, multi_linestring_tag>
+ : public detail::covered_by::use_point_in_geometry
+{};
+
+// P/A
template <typename Point, typename Ring>
struct covered_by<Point, Ring, point_tag, ring_tag>
+ : public detail::covered_by::use_point_in_geometry
+{};
+
+template <typename Point, typename Polygon>
+struct covered_by<Point, Polygon, point_tag, polygon_tag>
+ : public detail::covered_by::use_point_in_geometry
+{};
+
+template <typename Point, typename MultiPolygon>
+struct covered_by<Point, MultiPolygon, point_tag, multi_polygon_tag>
+ : public detail::covered_by::use_point_in_geometry
+{};
+
+// L/L
+
+template <typename Linestring1, typename Linestring2>
+struct covered_by<Linestring1, Linestring2, linestring_tag, linestring_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename Linestring, typename MultiLinestring>
+struct covered_by<Linestring, MultiLinestring, linestring_tag, multi_linestring_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename MultiLinestring, typename Linestring>
+struct covered_by<MultiLinestring, Linestring, multi_linestring_tag, linestring_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename MultiLinestring1, typename MultiLinestring2>
+struct covered_by<MultiLinestring1, MultiLinestring2, multi_linestring_tag, multi_linestring_tag>
+ : public detail::covered_by::use_relate
+{};
+
+// L/A
+
+template <typename Linestring, typename Ring>
+struct covered_by<Linestring, Ring, linestring_tag, ring_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename MultiLinestring, typename Ring>
+struct covered_by<MultiLinestring, Ring, multi_linestring_tag, ring_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename Linestring, typename Polygon>
+struct covered_by<Linestring, Polygon, linestring_tag, polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename MultiLinestring, typename Polygon>
+struct covered_by<MultiLinestring, Polygon, multi_linestring_tag, polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename Linestring, typename MultiPolygon>
+struct covered_by<Linestring, MultiPolygon, linestring_tag, multi_polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename MultiLinestring, typename MultiPolygon>
+struct covered_by<MultiLinestring, MultiPolygon, multi_linestring_tag, multi_polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+// A/A
+
+template <typename Ring1, typename Ring2>
+struct covered_by<Ring1, Ring2, ring_tag, ring_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename Ring, typename Polygon>
+struct covered_by<Ring, Polygon, ring_tag, polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename Polygon, typename Ring>
+struct covered_by<Polygon, Ring, polygon_tag, ring_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename Polygon1, typename Polygon2>
+struct covered_by<Polygon1, Polygon2, polygon_tag, polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename Ring, typename MultiPolygon>
+struct covered_by<Ring, MultiPolygon, ring_tag, multi_polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename MultiPolygon, typename Ring>
+struct covered_by<MultiPolygon, Ring, multi_polygon_tag, ring_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename Polygon, typename MultiPolygon>
+struct covered_by<Polygon, MultiPolygon, polygon_tag, multi_polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename MultiPolygon, typename Polygon>
+struct covered_by<MultiPolygon, Polygon, multi_polygon_tag, polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+template <typename MultiPolygon1, typename MultiPolygon2>
+struct covered_by<MultiPolygon1, MultiPolygon2, multi_polygon_tag, multi_polygon_tag>
+ : public detail::covered_by::use_relate
+{};
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_strategy {
+
+struct covered_by
{
- template <typename Strategy>
- static inline bool apply(Point const& point, Ring const& ring, Strategy const& strategy)
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
{
- return detail::within::point_in_ring
+ concept::within::check
<
- Point,
- Ring,
- order_as_direction<geometry::point_order<Ring>::value>::value,
- geometry::closure<Ring>::value,
+ typename tag<Geometry1>::type,
+ typename tag<Geometry2>::type,
+ typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
Strategy
- >::apply(point, ring, strategy) >= 0;
+ >();
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2 const>();
+ assert_dimension_equal<Geometry1, Geometry2>();
+
+ return dispatch::covered_by<Geometry1, Geometry2>::apply(geometry1,
+ geometry2,
+ strategy);
+ }
+
+ template <typename Geometry1, typename Geometry2>
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ default_strategy)
+ {
+ typedef typename point_type<Geometry1>::type point_type1;
+ typedef typename point_type<Geometry2>::type point_type2;
+
+ typedef typename strategy::covered_by::services::default_strategy
+ <
+ typename tag<Geometry1>::type,
+ typename tag<Geometry2>::type,
+ typename tag<Geometry1>::type,
+ typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type1>::type, spherical_tag
+ >::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type2>::type, spherical_tag
+ >::type,
+ Geometry1,
+ Geometry2
+ >::type strategy_type;
+
+ return covered_by::apply(geometry1, geometry2, strategy_type());
}
};
-template <typename Point, typename Polygon>
-struct covered_by<Point, Polygon, point_tag, polygon_tag>
+} // namespace resolve_strategy
+
+
+namespace resolve_variant {
+
+template <typename Geometry1, typename Geometry2>
+struct covered_by
{
template <typename Strategy>
- static inline bool apply(Point const& point, Polygon const& polygon, Strategy const& strategy)
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
{
- return detail::within::point_in_polygon
- <
- Point,
- Polygon,
- order_as_direction<geometry::point_order<Polygon>::value>::value,
- geometry::closure<Polygon>::value,
- Strategy
- >::apply(point, polygon, strategy) >= 0;
+ return resolve_strategy::covered_by
+ ::apply(geometry1, geometry2, strategy);
}
};
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct covered_by<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ template <typename Strategy>
+ struct visitor: boost::static_visitor<bool>
+ {
+ Geometry2 const& m_geometry2;
+ Strategy const& m_strategy;
+
+ visitor(Geometry2 const& geometry2, Strategy const& strategy)
+ : m_geometry2(geometry2), m_strategy(strategy) {}
+
+ template <typename Geometry1>
+ bool operator()(Geometry1 const& geometry1) const
+ {
+ return covered_by<Geometry1, Geometry2>
+ ::apply(geometry1, m_geometry2, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
+ {
+ return boost::apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
+ }
+};
+
+template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct covered_by<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename Strategy>
+ struct visitor: boost::static_visitor<bool>
+ {
+ Geometry1 const& m_geometry1;
+ Strategy const& m_strategy;
+
+ visitor(Geometry1 const& geometry1, Strategy const& strategy)
+ : m_geometry1(geometry1), m_strategy(strategy) {}
+
+ template <typename Geometry2>
+ bool operator()(Geometry2 const& geometry2) const
+ {
+ return covered_by<Geometry1, Geometry2>
+ ::apply(m_geometry1, geometry2, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline bool
+ apply(Geometry1 const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
+ Strategy const& strategy)
+ {
+ return boost::apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
+ }
+};
+
+template <
+ BOOST_VARIANT_ENUM_PARAMS(typename T1),
+ BOOST_VARIANT_ENUM_PARAMS(typename T2)
+>
+struct covered_by<
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
+>
+{
+ template <typename Strategy>
+ struct visitor: boost::static_visitor<bool>
+ {
+ Strategy const& m_strategy;
+
+ visitor(Strategy const& strategy): m_strategy(strategy) {}
+
+ template <typename Geometry1, typename Geometry2>
+ bool operator()(Geometry1 const& geometry1,
+ Geometry2 const& geometry2) const
+ {
+ return covered_by<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
+ Strategy const& strategy)
+ {
+ return boost::apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
+ }
+};
+
+} // namespace resolve_variant
/*!
@@ -122,36 +440,8 @@ struct covered_by<Point, Polygon, point_tag, polygon_tag>
template<typename Geometry1, typename Geometry2>
inline bool covered_by(Geometry1 const& geometry1, Geometry2 const& geometry2)
{
- concept::check<Geometry1 const>();
- concept::check<Geometry2 const>();
- assert_dimension_equal<Geometry1, Geometry2>();
-
- typedef typename point_type<Geometry1>::type point_type1;
- typedef typename point_type<Geometry2>::type point_type2;
-
- typedef typename strategy::covered_by::services::default_strategy
- <
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- typename tag<Geometry1>::type,
- typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
- typename tag_cast
- <
- typename cs_tag<point_type1>::type, spherical_tag
- >::type,
- typename tag_cast
- <
- typename cs_tag<point_type2>::type, spherical_tag
- >::type,
- Geometry1,
- Geometry2
- >::type strategy_type;
-
- return dispatch::covered_by
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, strategy_type());
+ return resolve_variant::covered_by<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2, default_strategy());
}
/*!
@@ -174,22 +464,8 @@ template<typename Geometry1, typename Geometry2, typename Strategy>
inline bool covered_by(Geometry1 const& geometry1, Geometry2 const& geometry2,
Strategy const& strategy)
{
- concept::within::check
- <
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
- Strategy
- >();
- concept::check<Geometry1 const>();
- concept::check<Geometry2 const>();
- assert_dimension_equal<Geometry1, Geometry2>();
-
- return dispatch::covered_by
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, strategy);
+ return resolve_variant::covered_by<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2, strategy);
}
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/algorithms/crosses.hpp b/3party/boost/boost/geometry/algorithms/crosses.hpp
new file mode 100644
index 0000000000..91ed3e0806
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/crosses.hpp
@@ -0,0 +1,194 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_CROSSES_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_CROSSES_HPP
+
+#include <cstddef>
+#include <boost/variant/variant_fwd.hpp>
+
+#include <boost/geometry/core/access.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/algorithms/detail/relate/relate.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template
+<
+ typename Geometry1,
+ typename Geometry2,
+ typename Tag1 = typename tag<Geometry1>::type,
+ typename Tag2 = typename tag<Geometry2>::type
+>
+struct crosses
+ : detail::relate::relate_base
+ <
+ detail::relate::static_mask_crosses_type,
+ Geometry1,
+ Geometry2
+ >
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_variant
+{
+ template <typename Geometry1, typename Geometry2>
+ struct crosses
+ {
+ static inline bool
+ apply(
+ const Geometry1& geometry1,
+ const Geometry2& geometry2)
+ {
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2 const>();
+
+ return dispatch::crosses<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ }
+ };
+
+
+ template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+ struct crosses<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+ {
+ struct visitor: static_visitor<bool>
+ {
+ Geometry2 const& m_geometry2;
+
+ visitor(Geometry2 const& geometry2)
+ : m_geometry2(geometry2)
+ {}
+
+ template <typename Geometry1>
+ result_type operator()(Geometry1 const& geometry1) const
+ {
+ return crosses
+ <
+ Geometry1,
+ Geometry2
+ >::apply
+ (geometry1, m_geometry2);
+ }
+ };
+
+ static inline bool
+ apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2 const& geometry2)
+ {
+ return apply_visitor(visitor(geometry2), geometry1);
+ }
+ };
+
+
+ template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+ struct crosses<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+ {
+ struct visitor: static_visitor<bool>
+ {
+ Geometry1 const& m_geometry1;
+
+ visitor(Geometry1 const& geometry1)
+ : m_geometry1(geometry1)
+ {}
+
+ template <typename Geometry2>
+ result_type operator()(Geometry2 const& geometry2) const
+ {
+ return crosses
+ <
+ Geometry1,
+ Geometry2
+ >::apply
+ (m_geometry1, geometry2);
+ }
+ };
+
+ static inline bool
+ apply(
+ Geometry1 const& geometry1,
+ const variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry2)
+ {
+ return apply_visitor(visitor(geometry1), geometry2);
+ }
+ };
+
+
+ template <BOOST_VARIANT_ENUM_PARAMS(typename A), BOOST_VARIANT_ENUM_PARAMS(typename B)>
+ struct crosses<variant<BOOST_VARIANT_ENUM_PARAMS(A)>, variant<BOOST_VARIANT_ENUM_PARAMS(B)> >
+ {
+ struct visitor: static_visitor<bool>
+ {
+ template <typename Geometry1, typename Geometry2>
+ result_type operator()(
+ Geometry1 const& geometry1,
+ Geometry2 const& geometry2) const
+ {
+ return crosses
+ <
+ Geometry1,
+ Geometry2
+ >::apply
+ (geometry1, geometry2);
+ }
+ };
+
+ static inline bool
+ apply(
+ const variant<BOOST_VARIANT_ENUM_PARAMS(A)>& geometry1,
+ const variant<BOOST_VARIANT_ENUM_PARAMS(B)>& geometry2)
+ {
+ return apply_visitor(visitor(), geometry1, geometry2);
+ }
+ };
+
+} // namespace resolve_variant
+
+
+/*!
+\brief \brief_check2{crosses}
+\ingroup crosses
+\tparam Geometry1 \tparam_geometry
+\tparam Geometry2 \tparam_geometry
+\param geometry1 \param_geometry
+\param geometry2 \param_geometry
+\return \return_check2{crosses}
+
+\qbk{[include reference/algorithms/crosses.qbk]}
+*/
+template <typename Geometry1, typename Geometry2>
+inline bool crosses(Geometry1 const& geometry1, Geometry2 const& geometry2)
+{
+ return resolve_variant::crosses<Geometry1, Geometry2>::apply(geometry1, geometry2);
+}
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_CROSSES_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp b/3party/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp
index 1637c30cce..f1bc596138 100644
--- a/3party/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp
@@ -26,7 +26,7 @@ namespace boost { namespace geometry
{
#ifndef DOXYGEN_NO_DETAIL
-namespace detail
+namespace detail
{
// Note: this is moved to namespace detail because the names and parameter orders
// are not yet 100% clear.
@@ -69,8 +69,8 @@ inline void assign_box_corners(Box const& box,
// Silence warning C4127: conditional expression is constant
#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
+#pragma warning(push)
+#pragma warning(disable : 4127)
#endif
diff --git a/3party/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp b/3party/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp
index a1cffb80a7..acfc37e250 100644
--- a/3party/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp
@@ -25,7 +25,7 @@ namespace boost { namespace geometry
{
#ifndef DOXYGEN_NO_DETAIL
-namespace detail
+namespace detail
{
/*!
diff --git a/3party/boost/boost/geometry/algorithms/detail/assign_values.hpp b/3party/boost/boost/geometry/algorithms/detail/assign_values.hpp
index ed4713493f..5e4a1795b5 100644
--- a/3party/boost/boost/geometry/algorithms/detail/assign_values.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/assign_values.hpp
@@ -46,36 +46,30 @@ namespace detail { namespace assign
{
-template
-<
- typename Box, std::size_t Index,
- std::size_t Dimension, std::size_t DimensionCount
->
+template <std::size_t Index, std::size_t Dimension, std::size_t DimensionCount>
struct initialize
{
- typedef typename coordinate_type<Box>::type coordinate_type;
-
- static inline void apply(Box& box, coordinate_type const& value)
+ template <typename Box>
+ static inline void apply(Box& box, typename coordinate_type<Box>::type const& value)
{
geometry::set<Index, Dimension>(box, value);
- initialize<Box, Index, Dimension + 1, DimensionCount>::apply(box, value);
+ initialize<Index, Dimension + 1, DimensionCount>::apply(box, value);
}
};
-template <typename Box, std::size_t Index, std::size_t DimensionCount>
-struct initialize<Box, Index, DimensionCount, DimensionCount>
+template <std::size_t Index, std::size_t DimensionCount>
+struct initialize<Index, DimensionCount, DimensionCount>
{
- typedef typename coordinate_type<Box>::type coordinate_type;
-
- static inline void apply(Box&, coordinate_type const& )
+ template <typename Box>
+ static inline void apply(Box&, typename coordinate_type<Box>::type const&)
{}
};
-template <typename Point>
struct assign_zero_point
{
+ template <typename Point>
static inline void apply(Point& point)
{
geometry::assign_value(point, 0);
@@ -83,44 +77,38 @@ struct assign_zero_point
};
-template <typename BoxOrSegment>
struct assign_inverse_box_or_segment
{
- typedef typename point_type<BoxOrSegment>::type point_type;
+ template <typename BoxOrSegment>
static inline void apply(BoxOrSegment& geometry)
{
+ typedef typename point_type<BoxOrSegment>::type point_type;
typedef typename coordinate_type<point_type>::type bound_type;
- initialize
- <
- BoxOrSegment, 0, 0, dimension<BoxOrSegment>::type::value
- >::apply(
- geometry, boost::numeric::bounds<bound_type>::highest());
- initialize
- <
- BoxOrSegment, 1, 0, dimension<BoxOrSegment>::type::value
- >::apply(
- geometry, boost::numeric::bounds<bound_type>::lowest());
+ initialize<0, 0, dimension<BoxOrSegment>::type::value>::apply(
+ geometry, boost::numeric::bounds<bound_type>::highest()
+ );
+ initialize<1, 0, dimension<BoxOrSegment>::type::value>::apply(
+ geometry, boost::numeric::bounds<bound_type>::lowest()
+ );
}
};
-template <typename BoxOrSegment>
struct assign_zero_box_or_segment
{
+ template <typename BoxOrSegment>
static inline void apply(BoxOrSegment& geometry)
{
typedef typename coordinate_type<BoxOrSegment>::type coordinate_type;
- initialize
- <
- BoxOrSegment, 0, 0, dimension<BoxOrSegment>::type::value
- >::apply(geometry, coordinate_type());
- initialize
- <
- BoxOrSegment, 1, 0, dimension<BoxOrSegment>::type::value
- >::apply(geometry, coordinate_type());
+ initialize<0, 0, dimension<BoxOrSegment>::type::value>::apply(
+ geometry, coordinate_type()
+ );
+ initialize<1, 0, dimension<BoxOrSegment>::type::value>::apply(
+ geometry, coordinate_type()
+ );
}
};
@@ -312,17 +300,17 @@ struct assign_zero {};
template <typename Point>
struct assign_zero<point_tag, Point>
- : detail::assign::assign_zero_point<Point>
+ : detail::assign::assign_zero_point
{};
template <typename Box>
struct assign_zero<box_tag, Box>
- : detail::assign::assign_zero_box_or_segment<Box>
+ : detail::assign::assign_zero_box_or_segment
{};
template <typename Segment>
struct assign_zero<segment_tag, Segment>
- : detail::assign::assign_zero_box_or_segment<Segment>
+ : detail::assign::assign_zero_box_or_segment
{};
@@ -331,112 +319,18 @@ struct assign_inverse {};
template <typename Box>
struct assign_inverse<box_tag, Box>
- : detail::assign::assign_inverse_box_or_segment<Box>
+ : detail::assign::assign_inverse_box_or_segment
{};
template <typename Segment>
struct assign_inverse<segment_tag, Segment>
- : detail::assign::assign_inverse_box_or_segment<Segment>
+ : detail::assign::assign_inverse_box_or_segment
{};
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-\brief Assign two coordinates to a geometry (usually a 2D point)
-\ingroup assign
-\tparam Geometry \tparam_geometry
-\tparam Type \tparam_numeric to specify the coordinates
-\param geometry \param_geometry
-\param c1 \param_x
-\param c2 \param_y
-
-\qbk{distinguish, 2 coordinate values}
-\qbk{
-[heading Example]
-[assign_2d_point] [assign_2d_point_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.make.make_2_2_coordinate_values make]
-}
- */
-template <typename Geometry, typename Type>
-inline void assign_values(Geometry& geometry, Type const& c1, Type const& c2)
-{
- concept::check<Geometry>();
-
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2);
-}
-
-/*!
-\brief Assign three values to a geometry (usually a 3D point)
-\ingroup assign
-\tparam Geometry \tparam_geometry
-\tparam Type \tparam_numeric to specify the coordinates
-\param geometry \param_geometry
-\param c1 \param_x
-\param c2 \param_y
-\param c3 \param_z
-
-\qbk{distinguish, 3 coordinate values}
-\qbk{
-[heading Example]
-[assign_3d_point] [assign_3d_point_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.make.make_3_3_coordinate_values make]
-}
- */
-template <typename Geometry, typename Type>
-inline void assign_values(Geometry& geometry,
- Type const& c1, Type const& c2, Type const& c3)
-{
- concept::check<Geometry>();
-
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2, c3);
-}
-
-/*!
-\brief Assign four values to a geometry (usually a box or segment)
-\ingroup assign
-\tparam Geometry \tparam_geometry
-\tparam Type \tparam_numeric to specify the coordinates
-\param geometry \param_geometry
-\param c1 First coordinate (usually x1)
-\param c2 Second coordinate (usually y1)
-\param c3 Third coordinate (usually x2)
-\param c4 Fourth coordinate (usually y2)
-
-\qbk{distinguish, 4 coordinate values}
- */
-template <typename Geometry, typename Type>
-inline void assign_values(Geometry& geometry,
- Type const& c1, Type const& c2, Type const& c3, Type const& c4)
-{
- concept::check<Geometry>();
-
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2, c3, c4);
-}
-
-
-
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp b/3party/boost/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp
new file mode 100644
index 0000000000..51b495d9e3
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp
@@ -0,0 +1,856 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_INSERTER_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_INSERTER_HPP
+
+#include <cstddef>
+#include <iterator>
+
+#include <boost/numeric/conversion/cast.hpp>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+
+#include <boost/geometry/util/math.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+#include <boost/geometry/strategies/side.hpp>
+#include <boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp>
+#include <boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp>
+#include <boost/geometry/algorithms/detail/buffer/parallel_continue.hpp>
+
+#include <boost/geometry/algorithms/simplify.hpp>
+
+#if defined(BOOST_GEOMETRY_BUFFER_SIMPLIFY_WITH_AX)
+#include <boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp>
+#endif
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+template <typename Range, typename DistanceStrategy>
+inline void simplify_input(Range const& range,
+ DistanceStrategy const& distance,
+ Range& simplified)
+{
+ // We have to simplify the ring before to avoid very small-scaled
+ // features in the original (convex/concave/convex) being enlarged
+ // in a very large scale and causing issues (IP's within pieces).
+ // This might be reconsidered later. Simplifying with a very small
+ // distance (1%% of the buffer) will never be visible in the result,
+ // if it is using round joins. For miter joins they are even more
+ // sensitive to small scale input features, however the result will
+ // look better.
+ // It also gets rid of duplicate points
+#if ! defined(BOOST_GEOMETRY_BUFFER_SIMPLIFY_WITH_AX)
+ geometry::simplify(range, simplified, distance.simplify_distance());
+#else
+
+ typedef typename boost::range_value<Range>::type point_type;
+ typedef strategy::distance::detail::projected_point_ax<> ax_type;
+ typedef typename strategy::distance::services::return_type
+ <
+ strategy::distance::detail::projected_point_ax<>,
+ point_type,
+ point_type
+ >::type return_type;
+
+ typedef strategy::distance::detail::projected_point_ax_less
+ <
+ return_type
+ > comparator_type;
+
+ typedef strategy::simplify::detail::douglas_peucker
+ <
+ point_type,
+ strategy::distance::detail::projected_point_ax<>,
+ comparator_type
+ > dp_ax;
+
+ return_type max_distance(distance.simplify_distance() * 2.0,
+ distance.simplify_distance());
+ comparator_type comparator(max_distance);
+ dp_ax strategy(comparator);
+
+ geometry::simplify(range, simplified, max_distance, strategy);
+#endif
+}
+
+
+template <typename RingOutput>
+struct buffer_range
+{
+ typedef typename point_type<RingOutput>::type output_point_type;
+ typedef typename coordinate_type<RingOutput>::type coordinate_type;
+
+ template
+ <
+ typename Collection,
+ typename Point,
+ typename DistanceStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename RobustPolicy
+ >
+ static inline
+ void add_join(Collection& collection,
+ Point const& penultimate_input,
+ Point const& previous_input,
+ output_point_type const& prev_perp1,
+ output_point_type const& prev_perp2,
+ Point const& input,
+ output_point_type const& perp1,
+ output_point_type const& perp2,
+ strategy::buffer::buffer_side_selector side,
+ DistanceStrategy const& distance,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ RobustPolicy const& )
+ {
+ output_point_type intersection_point;
+
+ strategy::buffer::join_selector join
+ = get_join_type(penultimate_input, previous_input, input);
+ if (join == strategy::buffer::join_convex)
+ {
+ // Calculate the intersection-point formed by the two sides.
+ // It might be that the two sides are not convex, but continue
+ // or spikey, we then change the join-type
+ join = line_line_intersection::apply(
+ perp1, perp2, prev_perp1, prev_perp2,
+ intersection_point);
+
+ }
+ switch(join)
+ {
+ case strategy::buffer::join_continue :
+ // No join, we get two consecutive sides
+ return;
+ case strategy::buffer::join_concave :
+ collection.add_piece(strategy::buffer::buffered_concave,
+ previous_input, prev_perp2, perp1);
+ return;
+ case strategy::buffer::join_spike :
+ {
+ // For linestrings, only add spike at one side to avoid
+ // duplicates
+ std::vector<output_point_type> range_out;
+ end_strategy.apply(penultimate_input, prev_perp2, previous_input, perp1, side, distance, range_out);
+ collection.add_endcap(end_strategy, range_out, previous_input);
+ }
+ return;
+ case strategy::buffer::join_convex :
+ break; // All code below handles this
+ }
+
+ // The corner is convex, we create a join
+ // TODO (future) - avoid a separate vector, add the piece directly
+ std::vector<output_point_type> range_out;
+ if (join_strategy.apply(intersection_point,
+ previous_input, prev_perp2, perp1,
+ distance.apply(previous_input, input, side),
+ range_out))
+ {
+ collection.add_piece(strategy::buffer::buffered_join,
+ previous_input, range_out);
+ }
+ }
+
+ static inline strategy::buffer::join_selector get_join_type(
+ output_point_type const& p0,
+ output_point_type const& p1,
+ output_point_type const& p2)
+ {
+ typedef typename strategy::side::services::default_strategy
+ <
+ typename cs_tag<output_point_type>::type
+ >::type side_strategy;
+
+ int const side = side_strategy::apply(p0, p1, p2);
+ return side == -1 ? strategy::buffer::join_convex
+ : side == 1 ? strategy::buffer::join_concave
+ : parallel_continue
+ (
+ get<0>(p2) - get<0>(p1),
+ get<1>(p2) - get<1>(p1),
+ get<0>(p1) - get<0>(p0),
+ get<1>(p1) - get<1>(p0)
+ ) ? strategy::buffer::join_continue
+ : strategy::buffer::join_spike;
+ }
+
+ template
+ <
+ typename Collection,
+ typename Iterator,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename RobustPolicy
+ >
+ static inline void iterate(Collection& collection,
+ Iterator begin, Iterator end,
+ strategy::buffer::buffer_side_selector side,
+ DistanceStrategy const& distance_strategy,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ RobustPolicy const& robust_policy,
+ output_point_type& first_p1,
+ output_point_type& first_p2,
+ output_point_type& last_p1,
+ output_point_type& last_p2)
+ {
+ typedef typename std::iterator_traits
+ <
+ Iterator
+ >::value_type point_type;
+
+ typedef typename robust_point_type
+ <
+ point_type,
+ RobustPolicy
+ >::type robust_point_type;
+
+ robust_point_type previous_robust_input;
+ point_type second_point, penultimate_point, ultimate_point; // last two points from begin/end
+
+ /*
+ * last.p1 last.p2 these are the "previous (last) perpendicular points"
+ * --------------
+ * | |
+ * *------------*____ <- *prev
+ * pup | | p1 "current perpendicular point 1"
+ * | |
+ * | | this forms a "side", a side is a piece
+ * | |
+ * *____| p2
+ *
+ * ^
+ * *it
+ *
+ * pup: penultimate_point
+ */
+
+ bool first = true;
+
+ Iterator it = begin;
+
+ geometry::recalculate(previous_robust_input, *begin, robust_policy);
+
+ std::vector<output_point_type> generated_side;
+ generated_side.reserve(2);
+
+ for (Iterator prev = it++; it != end; ++it)
+ {
+ robust_point_type robust_input;
+ geometry::recalculate(robust_input, *it, robust_policy);
+ // Check on equality - however, if input is simplified, this is highly
+ // unlikely (though possible by rescaling)
+ if (! detail::equals::equals_point_point(previous_robust_input, robust_input))
+ {
+ generated_side.clear();
+ side_strategy.apply(*prev, *it, side,
+ distance_strategy, generated_side);
+
+ if (! first)
+ {
+ add_join(collection,
+ penultimate_point,
+ *prev, last_p1, last_p2,
+ *it, generated_side.front(), generated_side.back(),
+ side,
+ distance_strategy, join_strategy, end_strategy,
+ robust_policy);
+ }
+
+ collection.add_piece(strategy::buffer::buffered_segment,
+ *prev, *it, generated_side, first);
+
+ penultimate_point = *prev;
+ ultimate_point = *it;
+ last_p1 = generated_side.front();
+ last_p2 = generated_side.back();
+ prev = it;
+ if (first)
+ {
+ first = false;
+ second_point = *it;
+ first_p1 = generated_side.front();
+ first_p2 = generated_side.back();
+ }
+ }
+ previous_robust_input = robust_input;
+ }
+ }
+};
+
+template
+<
+ typename Multi,
+ typename PolygonOutput,
+ typename Policy
+>
+struct buffer_multi
+{
+ template
+ <
+ typename Collection,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy,
+ typename RobustPolicy
+ >
+ static inline void apply(Multi const& multi,
+ Collection& collection,
+ DistanceStrategy const& distance_strategy,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ PointStrategy const& point_strategy,
+ RobustPolicy const& robust_policy)
+ {
+ for (typename boost::range_iterator<Multi const>::type
+ it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it)
+ {
+ Policy::apply(*it, collection,
+ distance_strategy, side_strategy,
+ join_strategy, end_strategy, point_strategy,
+ robust_policy);
+ }
+ }
+};
+
+struct visit_pieces_default_policy
+{
+ template <typename Collection>
+ static inline void apply(Collection const&, int)
+ {}
+};
+
+}} // namespace detail::buffer
+#endif // DOXYGEN_NO_DETAIL
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+template
+<
+ typename Tag,
+ typename RingInput,
+ typename RingOutput
+>
+struct buffer_inserter
+{};
+
+
+
+template
+<
+ typename Point,
+ typename RingOutput
+>
+struct buffer_inserter<point_tag, Point, RingOutput>
+{
+ template
+ <
+ typename Collection,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy,
+ typename RobustPolicy
+ >
+ static inline void apply(Point const& point, Collection& collection,
+ DistanceStrategy const& distance_strategy,
+ SideStrategy const& ,
+ JoinStrategy const& ,
+ EndStrategy const& ,
+ PointStrategy const& point_strategy,
+ RobustPolicy const& )
+ {
+ typedef typename point_type<RingOutput>::type output_point_type;
+
+ collection.start_new_ring();
+ std::vector<output_point_type> range_out;
+ point_strategy.apply(point, distance_strategy, range_out);
+ collection.add_piece(strategy::buffer::buffered_point, range_out, false);
+ collection.finish_ring();
+ }
+};
+
+
+template
+<
+ typename RingInput,
+ typename RingOutput
+>
+struct buffer_inserter<ring_tag, RingInput, RingOutput>
+{
+ typedef typename point_type<RingOutput>::type output_point_type;
+
+ template
+ <
+ typename Collection,
+ typename Iterator,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename RobustPolicy
+ >
+ static inline void iterate(Collection& collection,
+ Iterator begin, Iterator end,
+ strategy::buffer::buffer_side_selector side,
+ DistanceStrategy const& distance_strategy,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ RobustPolicy const& robust_policy)
+ {
+ output_point_type first_p1, first_p2, last_p1, last_p2;
+
+ typedef detail::buffer::buffer_range<RingOutput> buffer_range;
+
+ buffer_range::iterate(collection, begin, end,
+ side,
+ distance_strategy, side_strategy, join_strategy, end_strategy, robust_policy,
+ first_p1, first_p2, last_p1, last_p2);
+
+ // Generate closing join
+ buffer_range::add_join(collection,
+ *(end - 2),
+ *(end - 1), last_p1, last_p2,
+ *(begin + 1), first_p1, first_p2,
+ side,
+ distance_strategy, join_strategy, end_strategy,
+ robust_policy);
+
+ // Buffer is closed automatically by last closing corner
+ }
+
+ template
+ <
+ typename Collection,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy,
+ typename RobustPolicy
+ >
+ static inline void apply(RingInput const& ring,
+ Collection& collection,
+ DistanceStrategy const& distance,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ PointStrategy const& ,
+ RobustPolicy const& robust_policy)
+ {
+ if (boost::size(ring) > 3)
+ {
+ RingOutput simplified;
+ detail::buffer::simplify_input(ring, distance, simplified);
+
+ if (distance.negative())
+ {
+ // Walk backwards (rings will be reversed afterwards)
+ // It might be that this will be changed later.
+ // TODO: decide this.
+ iterate(collection, boost::rbegin(simplified), boost::rend(simplified),
+ strategy::buffer::buffer_side_right,
+ distance, side_strategy, join_strategy, end_strategy, robust_policy);
+ }
+ else
+ {
+ iterate(collection, boost::begin(simplified), boost::end(simplified),
+ strategy::buffer::buffer_side_left,
+ distance, side_strategy, join_strategy, end_strategy, robust_policy);
+ }
+
+ }
+ }
+};
+
+
+template
+<
+ typename Linestring,
+ typename Polygon
+>
+struct buffer_inserter<linestring_tag, Linestring, Polygon>
+{
+ typedef typename ring_type<Polygon>::type output_ring_type;
+ typedef typename point_type<output_ring_type>::type output_point_type;
+ typedef typename point_type<Linestring>::type input_point_type;
+
+ template <typename DistanceStrategy, typename SideStrategy>
+ static inline output_point_type first_perpendicular_point(
+ input_point_type const& p1, input_point_type const& p2,
+ DistanceStrategy const& distance_strategy,
+ SideStrategy const& side_strategy)
+ {
+ std::vector<output_point_type> generated_side;
+ side_strategy.apply(p1, p2,
+ strategy::buffer::buffer_side_right,
+ distance_strategy, generated_side);
+ return generated_side.front();
+ }
+
+ template
+ <
+ typename Collection,
+ typename Iterator,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename RobustPolicy
+ >
+ static inline void iterate(Collection& collection,
+ Iterator begin, Iterator end,
+ strategy::buffer::buffer_side_selector side,
+ DistanceStrategy const& distance_strategy,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ RobustPolicy const& robust_policy,
+ output_point_type& first_p1)
+ {
+ input_point_type const& ultimate_point = *(end - 1);
+ input_point_type const& penultimate_point = *(end - 2);
+
+ // For the end-cap, we need to have the last perpendicular point on the
+ // other side of the linestring. If it is the second pass (right),
+ // we have it already from the first phase (left).
+ // But for the first pass, we have to generate it
+ output_point_type reverse_p1
+ = side == strategy::buffer::buffer_side_right
+ ? first_p1
+ : first_perpendicular_point(ultimate_point, penultimate_point, distance_strategy, side_strategy);
+
+ output_point_type first_p2, last_p1, last_p2;
+
+ detail::buffer::buffer_range<output_ring_type>::iterate(collection,
+ begin, end, side,
+ distance_strategy, side_strategy, join_strategy, end_strategy, robust_policy,
+ first_p1, first_p2, last_p1, last_p2);
+
+ std::vector<output_point_type> range_out;
+ end_strategy.apply(penultimate_point, last_p2, ultimate_point, reverse_p1, side, distance_strategy, range_out);
+ collection.add_endcap(end_strategy, range_out, ultimate_point);
+ }
+
+ template
+ <
+ typename Collection,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy,
+ typename RobustPolicy
+ >
+ static inline void apply(Linestring const& linestring, Collection& collection,
+ DistanceStrategy const& distance,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ PointStrategy const& ,
+ RobustPolicy const& robust_policy)
+ {
+ if (boost::size(linestring) > 1)
+ {
+ Linestring simplified;
+ detail::buffer::simplify_input(linestring, distance, simplified);
+
+ collection.start_new_ring();
+ output_point_type first_p1;
+ iterate(collection, boost::begin(simplified), boost::end(simplified),
+ strategy::buffer::buffer_side_left,
+ distance, side_strategy, join_strategy, end_strategy, robust_policy,
+ first_p1);
+
+ iterate(collection, boost::rbegin(simplified), boost::rend(simplified),
+ strategy::buffer::buffer_side_right,
+ distance, side_strategy, join_strategy, end_strategy, robust_policy,
+ first_p1);
+ collection.finish_ring();
+ }
+ else
+ {
+ // Use point_strategy to buffer degenerated linestring
+ }
+ }
+};
+
+
+template
+<
+ typename PolygonInput,
+ typename PolygonOutput
+>
+struct buffer_inserter<polygon_tag, PolygonInput, PolygonOutput>
+{
+private:
+ typedef typename ring_type<PolygonInput>::type input_ring_type;
+ typedef typename ring_type<PolygonOutput>::type output_ring_type;
+
+ typedef buffer_inserter<ring_tag, input_ring_type, output_ring_type> policy;
+
+
+ template
+ <
+ typename Iterator,
+ typename Collection,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy,
+ typename RobustPolicy
+ >
+ static inline
+ void iterate(Iterator begin, Iterator end,
+ Collection& collection,
+ DistanceStrategy const& distance,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ PointStrategy const& point_strategy,
+ RobustPolicy const& robust_policy)
+ {
+ for (Iterator it = begin; it != end; ++it)
+ {
+ collection.start_new_ring();
+ policy::apply(*it, collection, distance, side_strategy,
+ join_strategy, end_strategy, point_strategy,
+ robust_policy);
+ collection.finish_ring();
+ }
+ }
+
+ template
+ <
+ typename InteriorRings,
+ typename Collection,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy,
+ typename RobustPolicy
+ >
+ static inline
+ void apply_interior_rings(InteriorRings const& interior_rings,
+ Collection& collection,
+ DistanceStrategy const& distance,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ PointStrategy const& point_strategy,
+ RobustPolicy const& robust_policy)
+ {
+ iterate(boost::begin(interior_rings), boost::end(interior_rings),
+ collection, distance, side_strategy,
+ join_strategy, end_strategy, point_strategy,
+ robust_policy);
+ }
+
+public:
+ template
+ <
+ typename Collection,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy,
+ typename RobustPolicy
+ >
+ static inline void apply(PolygonInput const& polygon,
+ Collection& collection,
+ DistanceStrategy const& distance,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ PointStrategy const& point_strategy,
+ RobustPolicy const& robust_policy)
+ {
+ {
+ collection.start_new_ring();
+ policy::apply(exterior_ring(polygon), collection,
+ distance, side_strategy,
+ join_strategy, end_strategy, point_strategy,
+ robust_policy);
+ collection.finish_ring();
+ }
+
+ apply_interior_rings(interior_rings(polygon),
+ collection, distance, side_strategy,
+ join_strategy, end_strategy, point_strategy,
+ robust_policy);
+ }
+};
+
+
+template
+<
+ typename Multi,
+ typename PolygonOutput
+>
+struct buffer_inserter<multi_tag, Multi, PolygonOutput>
+ : public detail::buffer::buffer_multi
+ <
+ Multi,
+ PolygonOutput,
+ dispatch::buffer_inserter
+ <
+ typename single_tag_of
+ <
+ typename tag<Multi>::type
+ >::type,
+ typename boost::range_value<Multi const>::type,
+ typename geometry::ring_type<PolygonOutput>::type
+ >
+ >
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+template
+<
+ typename GeometryOutput,
+ typename GeometryInput,
+ typename OutputIterator,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy,
+ typename RobustPolicy,
+ typename VisitPiecesPolicy
+>
+inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator out,
+ DistanceStrategy const& distance_strategy,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ PointStrategy const& point_strategy,
+ RobustPolicy const& robust_policy,
+ VisitPiecesPolicy& visit_pieces_policy
+ )
+{
+ typedef detail::buffer::buffered_piece_collection
+ <
+ typename geometry::ring_type<GeometryOutput>::type,
+ RobustPolicy
+ > collection_type;
+ collection_type collection(robust_policy);
+ collection_type const& const_collection = collection;
+
+ dispatch::buffer_inserter
+ <
+ typename tag_cast
+ <
+ typename tag<GeometryInput>::type,
+ multi_tag
+ >::type,
+ GeometryInput,
+ GeometryOutput
+ >::apply(geometry_input, collection,
+ distance_strategy, side_strategy, join_strategy,
+ end_strategy, point_strategy,
+ robust_policy);
+
+ collection.get_turns(geometry_input, distance_strategy);
+
+ // Visit the piece collection. This does nothing (by default), but
+ // optionally a debugging tool can be attached (e.g. console or svg),
+ // or the piece collection can be unit-tested
+ // phase 0: turns (before discarded)
+ visit_pieces_policy.apply(const_collection, 0);
+
+ collection.discard_rings();
+ collection.discard_turns();
+ collection.enrich();
+ collection.traverse();
+
+ if (distance_strategy.negative()
+ && boost::is_same
+ <
+ typename tag_cast<typename tag<GeometryInput>::type, areal_tag>::type,
+ areal_tag
+ >::type::value)
+ {
+ collection.reverse();
+ }
+
+ collection.template assign<GeometryOutput>(out);
+
+ // Visit collection again
+ // phase 1: rings (after discarding and traversing)
+ visit_pieces_policy.apply(const_collection, 1);
+}
+
+template
+<
+ typename GeometryOutput,
+ typename GeometryInput,
+ typename OutputIterator,
+ typename DistanceStrategy,
+ typename SideStrategy,
+ typename JoinStrategy,
+ typename EndStrategy,
+ typename PointStrategy,
+ typename RobustPolicy
+>
+inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator out,
+ DistanceStrategy const& distance_strategy,
+ SideStrategy const& side_strategy,
+ JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy,
+ PointStrategy const& point_strategy,
+ RobustPolicy const& robust_policy)
+{
+ detail::buffer::visit_pieces_default_policy visitor;
+ buffer_inserter<GeometryOutput>(geometry_input, out,
+ distance_strategy, side_strategy, join_strategy,
+ end_strategy, point_strategy,
+ robust_policy, visitor);
+}
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace detail::buffer
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_INSERTER_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp b/3party/boost/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp
new file mode 100644
index 0000000000..c37f32fd70
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp
@@ -0,0 +1,164 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_POLICIES_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_POLICIES_HPP
+
+
+#include <cstddef>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+
+enum intersection_location_type
+{
+ location_ok, inside_buffer, inside_original
+};
+
+class backtrack_for_buffer
+{
+public :
+ typedef detail::overlay::backtrack_state state_type;
+
+ template <typename Operation, typename Rings, typename Turns, typename Geometry, typename RobustPolicy>
+ static inline void apply(std::size_t size_at_start,
+ Rings& rings, typename boost::range_value<Rings>::type& ring,
+ Turns& turns, Operation& operation,
+ std::string const& /*reason*/,
+ Geometry const& ,
+ Geometry const& ,
+ RobustPolicy const& ,
+ state_type& state
+ )
+ {
+#if defined(BOOST_GEOMETRY_COUNT_BACKTRACK_WARNINGS)
+extern int g_backtrack_warning_count;
+g_backtrack_warning_count++;
+#endif
+//std::cout << "!";
+//std::cout << "WARNING " << reason << std::endl;
+
+ state.m_good = false;
+
+ // Make bad output clean
+ rings.resize(size_at_start);
+ ring.clear();
+
+ // Reject this as a starting point
+ operation.visited.set_rejected();
+
+ // And clear all visit info
+ clear_visit_info(turns);
+ }
+};
+
+// Should follow traversal-turn-concept (enrichment, visit structure)
+// and adds index in piece vector to find it back
+template <typename Point, typename SegmentRatio>
+struct buffer_turn_operation
+ : public detail::overlay::traversal_turn_operation<Point, SegmentRatio>
+{
+ int piece_index;
+ int index_in_robust_ring;
+
+ inline buffer_turn_operation()
+ : piece_index(-1)
+ , index_in_robust_ring(-1)
+ {}
+};
+
+// Version for buffer including type of location, is_opposite, and helper variables
+template <typename Point, typename RobustPoint, typename SegmentRatio>
+struct buffer_turn_info
+ : public detail::overlay::turn_info
+ <
+ Point,
+ SegmentRatio,
+ buffer_turn_operation<Point, SegmentRatio>
+ >
+{
+ typedef Point point_type;
+ typedef RobustPoint robust_point_type;
+
+ int turn_index; // TODO: this might go if partition can operate on non-const input
+
+ RobustPoint robust_point;
+#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
+ // Will (most probably) be removed later
+ RobustPoint mapped_robust_point; // alas... we still need to adapt our points, offsetting them 1 integer to be co-located with neighbours
+#endif
+
+
+ inline RobustPoint const& get_robust_point() const
+ {
+#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
+ return mapped_robust_point;
+#endif
+ return robust_point;
+ }
+
+
+ intersection_location_type location;
+
+ int count_within;
+ int count_on_offsetted;
+ int count_on_helper;
+ int count_on_occupied;
+ int count_on_multi;
+
+ inline buffer_turn_info()
+ : turn_index(-1)
+ , location(location_ok)
+ , count_within(0)
+ , count_on_offsetted(0)
+ , count_on_helper(0)
+ , count_on_occupied(0)
+ , count_on_multi(0)
+ {}
+};
+
+struct buffer_operation_less
+{
+ template <typename Turn>
+ inline bool operator()(Turn const& left, Turn const& right) const
+ {
+ segment_identifier const& sl = left.seg_id;
+ segment_identifier const& sr = right.seg_id;
+
+ // Sort them descending
+ return sl == sr
+ ? left.fraction < right.fraction
+ : sl < sr;
+ }
+};
+
+}} // namespace detail::buffer
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_POLICIES_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp b/3party/boost/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp
new file mode 100644
index 0000000000..2015d18368
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp
@@ -0,0 +1,841 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_PIECE_COLLECTION_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_PIECE_COLLECTION_HPP
+
+#include <algorithm>
+#include <cstddef>
+#include <set>
+#include <boost/range.hpp>
+
+
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/envelope.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+
+#include <boost/geometry/geometries/ring.hpp>
+
+#include <boost/geometry/algorithms/detail/buffer/buffered_ring.hpp>
+#include <boost/geometry/algorithms/detail/buffer/buffer_policies.hpp>
+#include <boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp>
+#include <boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp>
+#include <boost/geometry/algorithms/detail/buffer/turn_in_input.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/add_rings.hpp>
+#include <boost/geometry/algorithms/detail/overlay/assign_parents.hpp>
+#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp>
+#include <boost/geometry/algorithms/detail/overlay/ring_properties.hpp>
+#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/traverse.hpp>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/occupation_info.hpp>
+#include <boost/geometry/algorithms/detail/partition.hpp>
+
+#include <boost/geometry/util/range.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+enum segment_relation_code
+{
+ segment_relation_on_left,
+ segment_relation_on_right,
+ segment_relation_within,
+ segment_relation_disjoint
+};
+
+
+template <typename Ring, typename RobustPolicy>
+struct buffered_piece_collection
+{
+ typedef buffered_piece_collection<Ring, RobustPolicy> this_type;
+
+ typedef typename geometry::point_type<Ring>::type point_type;
+ typedef typename geometry::coordinate_type<Ring>::type coordinate_type;
+ typedef typename geometry::robust_point_type
+ <
+ point_type,
+ RobustPolicy
+ >::type robust_point_type;
+
+ typedef typename strategy::side::services::default_strategy
+ <
+ typename cs_tag<point_type>::type
+ >::type side_strategy;
+
+ typedef typename geometry::rescale_policy_type
+ <
+ typename geometry::point_type<Ring>::type
+ >::type rescale_policy_type;
+
+ typedef typename geometry::segment_ratio_type
+ <
+ point_type,
+ RobustPolicy
+ >::type segment_ratio_type;
+
+ typedef buffer_turn_info
+ <
+ point_type,
+ robust_point_type,
+ segment_ratio_type
+ > buffer_turn_info_type;
+
+ typedef buffer_turn_operation
+ <
+ point_type,
+ segment_ratio_type
+ > buffer_turn_operation_type;
+
+ typedef std::vector<buffer_turn_info_type> turn_vector_type;
+
+ struct robust_turn
+ {
+ int turn_index;
+ int operation_index;
+ robust_point_type point;
+ segment_identifier seg_id;
+ segment_ratio_type fraction;
+ };
+
+ struct piece
+ {
+ strategy::buffer::piece_type type;
+ int index;
+
+ int left_index; // points to previous piece
+ int right_index; // points to next piece
+
+ // The next two members form together a complete clockwise ring
+ // for each piece (with one dupped point)
+
+ // 1: half, part of offsetted_rings
+ segment_identifier first_seg_id;
+ int last_segment_index; // no segment-identifier - it is the same as first_seg_id
+ int offsetted_count;
+
+ // 2: half, not part (future: might be indexed in one vector too)
+ std::vector<point_type> helper_segments; // 3 points for segment, 2 points for join - 0 points for flat-end
+
+ // Robust representations
+ std::vector<robust_turn> robust_turns; // Used only in rescale_pieces - we might use a map instead
+ geometry::model::ring<robust_point_type> robust_ring;
+ geometry::model::box<robust_point_type> robust_envelope;
+ };
+
+ typedef std::vector<piece> piece_vector_type;
+
+ piece_vector_type m_pieces;
+ turn_vector_type m_turns;
+ int m_first_piece_index;
+
+ buffered_ring_collection<buffered_ring<Ring> > offsetted_rings; // indexed by multi_index
+ std::vector< std::vector < robust_point_type > > robust_offsetted_rings;
+ buffered_ring_collection<Ring> traversed_rings;
+ segment_identifier current_segment_id;
+
+ RobustPolicy const& m_robust_policy;
+
+ struct redundant_turn
+ {
+ inline bool operator()(buffer_turn_info_type const& turn) const
+ {
+ // Erase discarded turns (location not OK) and the turns
+ // only used to detect oppositeness.
+ return turn.location != location_ok
+ || turn.opposite();
+ }
+ };
+
+ buffered_piece_collection(RobustPolicy const& robust_policy)
+ : m_first_piece_index(-1)
+ , m_robust_policy(robust_policy)
+ {}
+
+
+#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
+ // Will (most probably) be removed later
+ template <typename OccupationMap>
+ inline void adapt_mapped_robust_point(OccupationMap const& map,
+ buffer_turn_info_type& turn, int distance) const
+ {
+ for (int x = -distance; x <= distance; x++)
+ {
+ for (int y = -distance; y <= distance; y++)
+ {
+ robust_point_type rp = turn.robust_point;
+ geometry::set<0>(rp, geometry::get<0>(rp) + x);
+ geometry::set<1>(rp, geometry::get<1>(rp) + y);
+ if (map.find(rp) != map.end())
+ {
+ turn.mapped_robust_point = rp;
+ return;
+ }
+ }
+ }
+ }
+#endif
+
+ inline void get_occupation(
+#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
+ int distance = 0
+#endif
+ )
+ {
+ typedef occupation_info<angle_info<robust_point_type, coordinate_type> >
+ buffer_occupation_info;
+
+ typedef std::map
+ <
+ robust_point_type,
+ buffer_occupation_info,
+ geometry::less<robust_point_type>
+ > occupation_map_type;
+
+ occupation_map_type occupation_map;
+
+ // 1: Add all intersection points to occupation map
+ typedef typename boost::range_iterator<turn_vector_type>::type
+ iterator_type;
+
+ for (iterator_type it = boost::begin(m_turns);
+ it != boost::end(m_turns);
+ ++it)
+ {
+ if (it->count_on_offsetted >= 1)
+ {
+#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
+ if (distance > 0 && ! occupation_map.empty())
+ {
+ adapt_mapped_robust_point(occupation_map, *it, distance);
+ }
+#endif
+ occupation_map[it->get_robust_point()].count++;
+ }
+ }
+
+ // 2: Remove all points from map which has only one
+ typename occupation_map_type::iterator it = occupation_map.begin();
+ while (it != occupation_map.end())
+ {
+ if (it->second.count <= 1)
+ {
+ typename occupation_map_type::iterator to_erase = it;
+ ++it;
+ occupation_map.erase(to_erase);
+ }
+ else
+ {
+ ++it;
+ }
+ }
+
+ if (occupation_map.empty())
+ {
+ return;
+ }
+
+ // 3: Add vectors (incoming->intersection-point,
+ // intersection-point -> outgoing)
+ // for all (co-located) points still present in the map
+
+ int index = 0;
+ for (iterator_type it = boost::begin(m_turns);
+ it != boost::end(m_turns);
+ ++it, ++index)
+ {
+ typename occupation_map_type::iterator mit =
+ occupation_map.find(it->get_robust_point());
+
+ if (mit != occupation_map.end())
+ {
+ buffer_occupation_info& info = mit->second;
+ for (int i = 0; i < 2; i++)
+ {
+ add_incoming_and_outgoing_angles(it->get_robust_point(), *it,
+ m_pieces,
+ index, i, it->operations[i].seg_id,
+ info);
+ }
+
+ it->count_on_multi++;
+ }
+ }
+
+#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
+ // X: Check rounding issues
+ if (distance == 0)
+ {
+ for (typename occupation_map_type::const_iterator it = occupation_map.begin();
+ it != occupation_map.end(); ++it)
+ {
+ if (it->second.has_rounding_issues(it->first))
+ {
+ if(distance == 0)
+ {
+ get_occupation(distance + 1);
+ return;
+ }
+ }
+ }
+ }
+#endif
+
+ // If, in a cluster, one turn is blocked, block them all
+ for (typename occupation_map_type::const_iterator it = occupation_map.begin();
+ it != occupation_map.end(); ++it)
+ {
+ typename buffer_occupation_info::turn_vector_type const& turns = it->second.turns;
+ bool blocked = false;
+ for (std::size_t i = 0; i < turns.size(); i++)
+ {
+ if (m_turns[turns[i].turn_index].blocked())
+ {
+ blocked = true;
+ break;
+ }
+ }
+ if (blocked)
+ {
+ for (std::size_t i = 0; i < turns.size(); i++)
+ {
+ m_turns[turns[i].turn_index].count_on_occupied++;
+ }
+ }
+ }
+
+ // 4: Mark all turns as not selectable as a starting point for traversing
+ // rings. They still can be used to continue already started rings.
+ for (typename occupation_map_type::iterator it = occupation_map.begin();
+ it != occupation_map.end(); ++it)
+ {
+ typename buffer_occupation_info::turn_vector_type const& turns = it->second.turns;
+ for (std::size_t i = 0; i < turns.size(); i++)
+ {
+ m_turns[turns[i].turn_index].selectable_start = false;
+ }
+ }
+ }
+
+ inline void classify_turns()
+ {
+ for (typename boost::range_iterator<turn_vector_type>::type it =
+ boost::begin(m_turns); it != boost::end(m_turns); ++it)
+ {
+ if ( it->count_within > 0
+ || it->count_on_occupied > 0 )
+ {
+ it->location = inside_buffer;
+ }
+ }
+ }
+
+ template <typename Geometry, typename DistanceStrategy>
+ inline void check_remaining_points(Geometry const& input_geometry, DistanceStrategy const& distance_strategy)
+ {
+ int const factor = distance_strategy.factor();
+
+ // This might use partition too (for multi-polygons)
+
+ for (typename boost::range_iterator<turn_vector_type>::type it =
+ boost::begin(m_turns); it != boost::end(m_turns); ++it)
+ {
+ if (it->location == location_ok)
+ {
+ int code = turn_in_input
+ <
+ typename geometry::tag<Geometry>::type
+ >::apply(it->point, input_geometry);
+ if (code * factor == 1)
+ {
+ it->location = inside_original;
+ }
+ }
+ }
+ }
+
+ inline bool assert_indices_in_robust_rings() const
+ {
+ geometry::equal_to<robust_point_type> comparator;
+ for (typename boost::range_iterator<turn_vector_type const>::type it =
+ boost::begin(m_turns); it != boost::end(m_turns); ++it)
+ {
+ for (int i = 0; i < 2; i++)
+ {
+ robust_point_type const &p1
+ = m_pieces[it->operations[i].piece_index].robust_ring
+ [it->operations[i].index_in_robust_ring];
+ robust_point_type const &p2 = it->robust_point;
+ if (! comparator(p1, p2))
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ inline void rescale_piece_rings()
+ {
+ for (typename piece_vector_type::iterator it = boost::begin(m_pieces);
+ it != boost::end(m_pieces);
+ ++it)
+ {
+ piece& pc = *it;
+
+ pc.offsetted_count = pc.last_segment_index - pc.first_seg_id.segment_index;
+ BOOST_ASSERT(pc.offsetted_count >= 0);
+
+ pc.robust_ring.reserve(pc.offsetted_count + pc.helper_segments.size());
+
+ // Add rescaled offsetted segments
+ {
+ buffered_ring<Ring> const& ring = offsetted_rings[pc.first_seg_id.multi_index];
+
+ typedef typename boost::range_iterator<const buffered_ring<Ring> >::type it_type;
+ for (it_type it = boost::begin(ring) + pc.first_seg_id.segment_index;
+ it != boost::begin(ring) + pc.last_segment_index;
+ ++it)
+ {
+ robust_point_type point;
+ geometry::recalculate(point, *it, m_robust_policy);
+ pc.robust_ring.push_back(point);
+ }
+ }
+
+ // Add rescaled helper-segments
+ {
+ typedef typename std::vector<point_type>::const_iterator it_type;
+ for (it_type it = boost::begin(pc.helper_segments);
+ it != boost::end(pc.helper_segments);
+ ++it)
+ {
+ robust_point_type point;
+ geometry::recalculate(point, *it, m_robust_policy);
+ pc.robust_ring.push_back(point);
+ }
+ }
+
+ // Calculate the envelope
+ geometry::detail::envelope::envelope_range::apply(pc.robust_ring,
+ pc.robust_envelope);
+ }
+ }
+
+ inline void insert_rescaled_piece_turns()
+ {
+ // Add rescaled turn points to corresponding pieces
+ // (after this, each turn occurs twice)
+ int index = 0;
+ for (typename boost::range_iterator<turn_vector_type>::type it =
+ boost::begin(m_turns); it != boost::end(m_turns); ++it, ++index)
+ {
+ geometry::recalculate(it->robust_point, it->point, m_robust_policy);
+#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
+ it->mapped_robust_point = it->robust_point;
+#endif
+
+ robust_turn turn;
+ it->turn_index = index;
+ turn.turn_index = index;
+ turn.point = it->robust_point;
+ for (int i = 0; i < 2; i++)
+ {
+ turn.operation_index = i;
+ turn.seg_id = it->operations[i].seg_id;
+ turn.fraction = it->operations[i].fraction;
+
+ piece& pc = m_pieces[it->operations[i].piece_index];
+ pc.robust_turns.push_back(turn);
+
+ // Take into account for the box (intersection points should fall inside,
+ // but in theory they can be one off because of rounding
+ geometry::expand(pc.robust_envelope, it->robust_point);
+ }
+ }
+
+ // Insert all rescaled turn-points into these rings, to form a
+ // reliable integer-based ring. All turns can be compared (inside) to this
+ // rings to see if they are inside.
+
+ for (typename piece_vector_type::iterator it = boost::begin(m_pieces);
+ it != boost::end(m_pieces);
+ ++it)
+ {
+ piece& pc = *it;
+ int piece_segment_index = pc.first_seg_id.segment_index;
+ if (! pc.robust_turns.empty())
+ {
+ if (pc.robust_turns.size() > 1u)
+ {
+ std::sort(pc.robust_turns.begin(), pc.robust_turns.end(), buffer_operation_less());
+ }
+ // Walk through them, in reverse to insert at right index
+ int index_offset = pc.robust_turns.size() - 1;
+ for (typename std::vector<robust_turn>::const_reverse_iterator
+ rit = pc.robust_turns.rbegin();
+ rit != pc.robust_turns.rend();
+ ++rit, --index_offset)
+ {
+ int const index_in_vector = 1 + rit->seg_id.segment_index - piece_segment_index;
+ BOOST_ASSERT
+ (
+ index_in_vector > 0 && index_in_vector < pc.offsetted_count
+ );
+
+ pc.robust_ring.insert(boost::begin(pc.robust_ring) + index_in_vector, rit->point);
+ pc.offsetted_count++;
+
+ m_turns[rit->turn_index].operations[rit->operation_index].index_in_robust_ring = index_in_vector + index_offset;
+ }
+ }
+ }
+
+ BOOST_ASSERT(assert_indices_in_robust_rings());
+ }
+
+ template <typename Geometry, typename DistanceStrategy>
+ inline void get_turns(Geometry const& input_geometry, DistanceStrategy const& distance_strategy)
+ {
+ rescale_piece_rings();
+
+ {
+ // Calculate the turns
+ piece_turn_visitor
+ <
+ buffered_ring_collection<buffered_ring<Ring> >,
+ turn_vector_type,
+ RobustPolicy
+ > visitor(offsetted_rings, m_turns, m_robust_policy, m_pieces.size());
+
+ geometry::partition
+ <
+ model::box<robust_point_type>, piece_get_box, piece_ovelaps_box
+ >::apply(m_pieces, visitor);
+ }
+
+ insert_rescaled_piece_turns();
+
+ {
+ // Check if it is inside any of the pieces
+ turn_in_piece_visitor
+ <
+ turn_vector_type, piece_vector_type
+ > visitor(m_turns, m_pieces);
+
+ geometry::partition
+ <
+ model::box<robust_point_type>,
+ turn_get_box, turn_ovelaps_box,
+ piece_get_box, piece_ovelaps_box
+ >::apply(m_turns, m_pieces, visitor);
+
+ }
+
+
+ get_occupation();
+
+ classify_turns();
+
+ check_remaining_points(input_geometry, distance_strategy);
+ }
+
+ inline void start_new_ring()
+ {
+ int const n = offsetted_rings.size();
+ current_segment_id.source_index = 0;
+ current_segment_id.multi_index = n;
+ current_segment_id.ring_index = -1;
+ current_segment_id.segment_index = 0;
+
+ offsetted_rings.resize(n + 1);
+
+ m_first_piece_index = boost::size(m_pieces);
+ }
+
+ inline void finish_ring()
+ {
+ BOOST_ASSERT(m_first_piece_index != -1);
+ if (m_first_piece_index < static_cast<int>(boost::size(m_pieces)))
+ {
+ // If piece was added
+ // Reassign left-of-first and right-of-last
+ geometry::range::at(m_pieces, m_first_piece_index).left_index
+ = boost::size(m_pieces) - 1;
+ geometry::range::back(m_pieces).right_index = m_first_piece_index;
+ }
+ m_first_piece_index = -1;
+ }
+
+ inline int add_point(point_type const& p)
+ {
+ BOOST_ASSERT
+ (
+ boost::size(offsetted_rings) > 0
+ );
+
+ current_segment_id.segment_index++;
+ offsetted_rings.back().push_back(p);
+ return offsetted_rings.back().size();
+ }
+
+ //-------------------------------------------------------------------------
+
+ inline piece& add_piece(strategy::buffer::piece_type type, bool decrease_segment_index_by_one)
+ {
+ piece pc;
+ pc.type = type;
+ pc.index = boost::size(m_pieces);
+ pc.first_seg_id = current_segment_id;
+
+ // Assign left/right (for first/last piece per ring they will be re-assigned later)
+ pc.left_index = pc.index - 1;
+ pc.right_index = pc.index + 1;
+
+ std::size_t const n = boost::size(offsetted_rings.back());
+ pc.first_seg_id.segment_index = decrease_segment_index_by_one ? n - 1 : n;
+
+ m_pieces.push_back(pc);
+ return m_pieces.back();
+ }
+
+ template <typename Range>
+ inline void add_piece(strategy::buffer::piece_type type, point_type const& p1, point_type const& p2,
+ Range const& range, bool first)
+ {
+ piece& pc = add_piece(type, ! first);
+
+ // If it follows a non-join (so basically the same piece-type) point b1 should be added.
+ // There should be two intersections later and it should be discarded.
+ // But for now we need it to calculate intersections
+ if (first)
+ {
+ add_point(range.front());
+ }
+ pc.last_segment_index = add_point(range.back());
+
+ pc.helper_segments.push_back(range.back());
+ pc.helper_segments.push_back(p2);
+ pc.helper_segments.push_back(p1);
+ pc.helper_segments.push_back(range.front());
+ }
+
+ inline void add_piece(strategy::buffer::piece_type type, point_type const& p,
+ point_type const& b1, point_type const& b2)
+ {
+ piece& pc = add_piece(type, false);
+ add_point(b1);
+ pc.last_segment_index = add_point(b2);
+ pc.helper_segments.push_back(b2);
+ pc.helper_segments.push_back(p);
+ pc.helper_segments.push_back(b1);
+ }
+
+
+ template <typename Range>
+ inline piece& add_piece(strategy::buffer::piece_type type, Range const& range, bool decrease_segment_index_by_one)
+ {
+ piece& pc = add_piece(type, decrease_segment_index_by_one);
+
+ bool first = true;
+ int last = offsetted_rings.back().size() + 1;
+ for (typename Range::const_iterator it = boost::begin(range);
+ it != boost::end(range);
+ ++it)
+ {
+ bool add = true;
+ if (first)
+ {
+ // Only for very first one, add first. In all other cases it is shared with previous.
+ add = offsetted_rings.back().empty();
+ first = false;
+ }
+ if (add)
+ {
+ last = add_point(*it);
+ }
+
+ }
+
+ pc.last_segment_index = last;
+
+ return pc;
+ }
+
+ template <typename Range>
+ inline void add_piece(strategy::buffer::piece_type type, point_type const& p, Range const& range)
+ {
+ piece& pc = add_piece(type, range, true);
+
+ if (boost::size(range) > 0)
+ {
+ pc.helper_segments.push_back(range.back());
+ pc.helper_segments.push_back(p);
+ pc.helper_segments.push_back(range.front());
+ }
+ }
+
+ template <typename EndcapStrategy, typename Range>
+ inline void add_endcap(EndcapStrategy const& strategy, Range const& range, point_type const& end_point)
+ {
+ if (range.empty())
+ {
+ return;
+ }
+ strategy::buffer::piece_type pt = strategy.get_piece_type();
+ if (pt == strategy::buffer::buffered_flat_end)
+ {
+ // It is flat, should just be added, without helper segments
+ add_piece(pt, range, true);
+ }
+ else
+ {
+ // Normal case, it has an "inside", helper segments should be added
+ add_piece(pt, end_point, range);
+ }
+ }
+
+ //-------------------------------------------------------------------------
+
+ inline void enrich()
+ {
+ typedef typename strategy::side::services::default_strategy
+ <
+ typename cs_tag<Ring>::type
+ >::type side_strategy_type;
+
+ enrich_intersection_points<false, false>(m_turns,
+ detail::overlay::operation_union,
+ offsetted_rings, offsetted_rings,
+ m_robust_policy, side_strategy_type());
+ }
+
+ // Discards all rings which do have not-OK intersection points only.
+ // Those can never be traversed and should not be part of the output.
+ inline void discard_rings()
+ {
+ for (typename boost::range_iterator<turn_vector_type const>::type it =
+ boost::begin(m_turns); it != boost::end(m_turns); ++it)
+ {
+ if (it->location != location_ok)
+ {
+ offsetted_rings[it->operations[0].seg_id.multi_index].has_discarded_intersections = true;
+ offsetted_rings[it->operations[1].seg_id.multi_index].has_discarded_intersections = true;
+ }
+ else if (! it->both(detail::overlay::operation_union))
+ {
+ offsetted_rings[it->operations[0].seg_id.multi_index].has_accepted_intersections = true;
+ offsetted_rings[it->operations[1].seg_id.multi_index].has_accepted_intersections = true;
+ }
+ }
+ }
+
+ inline void discard_turns()
+ {
+ m_turns.erase
+ (
+ std::remove_if(boost::begin(m_turns), boost::end(m_turns),
+ redundant_turn()),
+ boost::end(m_turns)
+ );
+
+ }
+
+ inline void traverse()
+ {
+ typedef detail::overlay::traverse
+ <
+ false, false,
+ buffered_ring_collection<buffered_ring<Ring> >, buffered_ring_collection<buffered_ring<Ring > >,
+ backtrack_for_buffer
+ > traverser;
+
+ traversed_rings.clear();
+ traverser::apply(offsetted_rings, offsetted_rings,
+ detail::overlay::operation_union,
+ m_robust_policy, m_turns, traversed_rings);
+ }
+
+ inline void reverse()
+ {
+ for(typename buffered_ring_collection<buffered_ring<Ring> >::iterator it = boost::begin(offsetted_rings);
+ it != boost::end(offsetted_rings);
+ ++it)
+ {
+ if (! it->has_intersections())
+ {
+ std::reverse(it->begin(), it->end());
+ }
+ }
+ for (typename boost::range_iterator<buffered_ring_collection<Ring> >::type
+ it = boost::begin(traversed_rings);
+ it != boost::end(traversed_rings);
+ ++it)
+ {
+ std::reverse(it->begin(), it->end());
+ }
+
+ }
+
+ template <typename GeometryOutput, typename OutputIterator>
+ inline OutputIterator assign(OutputIterator out) const
+ {
+ typedef detail::overlay::ring_properties<point_type> properties;
+
+ std::map<ring_identifier, properties> selected;
+
+ // Select all rings which do not have any self-intersection (other ones should be traversed)
+ int index = 0;
+ for(typename buffered_ring_collection<buffered_ring<Ring> >::const_iterator it = boost::begin(offsetted_rings);
+ it != boost::end(offsetted_rings);
+ ++it, ++index)
+ {
+ if (! it->has_intersections())
+ {
+ ring_identifier id(0, index, -1);
+ selected[id] = properties(*it, true);
+ }
+ }
+
+ // Select all created rings
+ index = 0;
+ for (typename boost::range_iterator<buffered_ring_collection<Ring> const>::type
+ it = boost::begin(traversed_rings);
+ it != boost::end(traversed_rings);
+ ++it, ++index)
+ {
+ ring_identifier id(2, index, -1);
+ selected[id] = properties(*it, true);
+ }
+
+ detail::overlay::assign_parents(offsetted_rings, traversed_rings, selected, false);
+ return detail::overlay::add_rings<GeometryOutput>(selected, offsetted_rings, traversed_rings, out);
+ }
+
+};
+
+
+}} // namespace detail::buffer
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_PIECE_COLLECTION_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/buffer/buffered_ring.hpp b/3party/boost/boost/geometry/algorithms/detail/buffer/buffered_ring.hpp
new file mode 100644
index 0000000000..03ec598c90
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/buffer/buffered_ring.hpp
@@ -0,0 +1,238 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_RING
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_RING
+
+
+#include <cstddef>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
+#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
+#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
+#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+
+#include <boost/geometry/multi/algorithms/within.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+struct buffered_ring_collection_tag : polygonal_tag, multi_tag
+{};
+
+
+template <typename Ring>
+struct buffered_ring : public Ring
+{
+ bool has_accepted_intersections;
+ bool has_discarded_intersections;
+
+ inline buffered_ring()
+ : has_accepted_intersections(false)
+ , has_discarded_intersections(false)
+ {}
+
+ inline bool discarded() const
+ {
+ return has_discarded_intersections && ! has_accepted_intersections;
+ }
+ inline bool has_intersections() const
+ {
+ return has_discarded_intersections || has_accepted_intersections;
+ }
+};
+
+// This is a collection now special for overlay (needs vector of rings)
+template <typename Ring>
+struct buffered_ring_collection : public std::vector<Ring>
+{
+};
+
+}} // namespace detail::buffer
+
+
+// Turn off concept checking (for now)
+namespace dispatch
+{
+template <typename Geometry, bool IsConst>
+struct check<Geometry, detail::buffer::buffered_ring_collection_tag, IsConst>
+{
+};
+
+}
+
+
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+// Register the types
+namespace traits
+{
+
+
+template <typename Ring>
+struct tag<detail::buffer::buffered_ring<Ring> >
+{
+ typedef ring_tag type;
+};
+
+
+template <typename Ring>
+struct point_order<detail::buffer::buffered_ring<Ring> >
+{
+ static const order_selector value = geometry::point_order<Ring>::value;
+};
+
+
+template <typename Ring>
+struct closure<detail::buffer::buffered_ring<Ring> >
+{
+ static const closure_selector value = geometry::closure<Ring>::value;
+};
+
+
+template <typename Ring>
+struct point_type<detail::buffer::buffered_ring_collection<Ring> >
+{
+ typedef typename geometry::point_type<Ring>::type type;
+};
+
+template <typename Ring>
+struct tag<detail::buffer::buffered_ring_collection<Ring> >
+{
+ typedef detail::buffer::buffered_ring_collection_tag type;
+};
+
+
+} // namespace traits
+
+
+
+
+namespace core_dispatch
+{
+
+template <typename Ring>
+struct ring_type
+<
+ detail::buffer::buffered_ring_collection_tag,
+ detail::buffer::buffered_ring_collection<Ring>
+>
+{
+ typedef Ring type;
+};
+
+}
+
+namespace dispatch
+{
+
+template
+<
+ typename MultiRing,
+ bool Reverse,
+ typename SegmentIdentifier,
+ typename PointOut
+>
+struct copy_segment_point
+ <
+ detail::buffer::buffered_ring_collection_tag,
+ MultiRing,
+ Reverse,
+ SegmentIdentifier,
+ PointOut
+ >
+ : detail::copy_segments::copy_segment_point_multi
+ <
+ MultiRing,
+ SegmentIdentifier,
+ PointOut,
+ detail::copy_segments::copy_segment_point_range
+ <
+ typename boost::range_value<MultiRing>::type,
+ Reverse,
+ SegmentIdentifier,
+ PointOut
+ >
+ >
+{};
+
+
+template<bool Reverse>
+struct copy_segments
+ <
+ detail::buffer::buffered_ring_collection_tag,
+ Reverse
+ >
+ : detail::copy_segments::copy_segments_multi
+ <
+ detail::copy_segments::copy_segments_ring<Reverse>
+ >
+{};
+
+template <typename Point, typename MultiGeometry>
+struct within
+<
+ Point,
+ MultiGeometry,
+ point_tag,
+ detail::buffer::buffered_ring_collection_tag
+>
+{
+ template <typename Strategy>
+ static inline bool apply(Point const& point,
+ MultiGeometry const& multi, Strategy const& strategy)
+ {
+ return detail::within::point_in_geometry(point, multi, strategy) == 1;
+ }
+};
+
+
+} // namespace dispatch
+
+namespace detail { namespace overlay
+{
+
+template<>
+struct get_ring<detail::buffer::buffered_ring_collection_tag>
+{
+ template<typename MultiGeometry>
+ static inline typename ring_type<MultiGeometry>::type const& apply(
+ ring_identifier const& id,
+ MultiGeometry const& multi_ring)
+ {
+ BOOST_ASSERT
+ (
+ id.multi_index >= 0
+ && id.multi_index < int(boost::size(multi_ring))
+ );
+ return get_ring<ring_tag>::apply(id, multi_ring[id.multi_index]);
+ }
+};
+
+}}
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_RING
diff --git a/3party/boost/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp
new file mode 100644
index 0000000000..e3c41a2a4b
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp
@@ -0,0 +1,204 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_GET_PIECE_TURNS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_GET_PIECE_TURNS_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/expand.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
+#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+
+struct piece_get_box
+{
+ template <typename Box, typename Piece>
+ static inline void apply(Box& total, Piece const& piece)
+ {
+ geometry::expand(total, piece.robust_envelope);
+ }
+};
+
+struct piece_ovelaps_box
+{
+ template <typename Box, typename Piece>
+ static inline bool apply(Box const& box, Piece const& piece)
+ {
+ return ! geometry::detail::disjoint::disjoint_box_box(box, piece.robust_envelope);
+ }
+};
+
+template
+<
+ typename Rings,
+ typename Turns,
+ typename RobustPolicy
+>
+class piece_turn_visitor
+{
+ Rings const& m_rings;
+ Turns& m_turns;
+ RobustPolicy const& m_robust_policy;
+ int m_last_piece_index;
+
+ template <typename Piece>
+ inline bool is_adjacent(Piece const& piece1, Piece const& piece2) const
+ {
+ if (piece1.first_seg_id.multi_index != piece2.first_seg_id.multi_index)
+ {
+ return false;
+ }
+
+ if (std::abs(piece1.index - piece2.index) == 1)
+ {
+ return true;
+ }
+
+ return (piece1.index == 0 && piece2.index == m_last_piece_index)
+ || (piece1.index == m_last_piece_index && piece2.index == 0)
+ ;
+ }
+
+ template <typename Range, typename Iterator>
+ inline void move_to_next_point(Range const& range, Iterator& next) const
+ {
+ ++next;
+ if (next == boost::end(range))
+ {
+ next = boost::begin(range) + 1;
+ }
+ }
+
+ template <typename Range, typename Iterator>
+ inline Iterator next_point(Range const& range, Iterator it) const
+ {
+ Iterator result = it;
+ move_to_next_point(range, result);
+ // TODO: we could use either piece-boundaries, or comparison with
+ // robust points, to check if the point equals the last one
+ while(geometry::equals(*it, *result))
+ {
+ move_to_next_point(range, result);
+ }
+ return result;
+ }
+
+ template <typename Piece>
+ inline void calculate_turns(Piece const& piece1, Piece const& piece2)
+ {
+ typedef typename boost::range_value<Rings const>::type ring_type;
+ typedef typename boost::range_value<Turns const>::type turn_type;
+ typedef typename boost::range_iterator<ring_type const>::type iterator;
+
+ segment_identifier seg_id1 = piece1.first_seg_id;
+ segment_identifier seg_id2 = piece2.first_seg_id;
+
+ if (seg_id1.segment_index < 0 || seg_id2.segment_index < 0)
+ {
+ return;
+ }
+
+ ring_type const& ring1 = m_rings[seg_id1.multi_index];
+ iterator it1_first = boost::begin(ring1) + seg_id1.segment_index;
+ iterator it1_last = boost::begin(ring1) + piece1.last_segment_index;
+
+ ring_type const& ring2 = m_rings[seg_id2.multi_index];
+ iterator it2_first = boost::begin(ring2) + seg_id2.segment_index;
+ iterator it2_last = boost::begin(ring2) + piece2.last_segment_index;
+
+ turn_type the_model;
+ the_model.operations[0].piece_index = piece1.index;
+ the_model.operations[0].seg_id = piece1.first_seg_id;
+
+ iterator it1 = it1_first;
+ for (iterator prev1 = it1++;
+ it1 != it1_last;
+ prev1 = it1++, the_model.operations[0].seg_id.segment_index++)
+ {
+ the_model.operations[1].piece_index = piece2.index;
+ the_model.operations[1].seg_id = piece2.first_seg_id;
+
+ iterator next1 = next_point(ring1, it1);
+
+ iterator it2 = it2_first;
+ for (iterator prev2 = it2++;
+ it2 != it2_last;
+ prev2 = it2++, the_model.operations[1].seg_id.segment_index++)
+ {
+ // Revert (this is used more often - should be common function TODO)
+ the_model.operations[0].other_id = the_model.operations[1].seg_id;
+ the_model.operations[1].other_id = the_model.operations[0].seg_id;
+
+ iterator next2 = next_point(ring2, it2);
+
+ // TODO: internally get_turn_info calculates robust points.
+ // But they are already calculated.
+ // We should be able to use them.
+ // this means passing them to this visitor,
+ // and iterating in sync with them...
+ typedef detail::overlay::get_turn_info
+ <
+ detail::overlay::assign_null_policy
+ > turn_policy;
+
+ turn_policy::apply(*prev1, *it1, *next1,
+ *prev2, *it2, *next2,
+ false, false, false, false,
+ the_model, m_robust_policy,
+ std::back_inserter(m_turns));
+ }
+ }
+ }
+
+public:
+
+ piece_turn_visitor(Rings const& ring_collection,
+ Turns& turns,
+ RobustPolicy const& robust_policy,
+ int last_piece_index)
+ : m_rings(ring_collection)
+ , m_turns(turns)
+ , m_robust_policy(robust_policy)
+ , m_last_piece_index(last_piece_index)
+ {}
+
+ template <typename Piece>
+ inline void apply(Piece const& piece1, Piece const& piece2,
+ bool first = true)
+ {
+ boost::ignore_unused_variable_warning(first);
+ if ( is_adjacent(piece1, piece2)
+ || detail::disjoint::disjoint_box_box(piece1.robust_envelope,
+ piece2.robust_envelope))
+ {
+ return;
+ }
+ calculate_turns(piece1, piece2);
+ }
+};
+
+
+}} // namespace detail::buffer
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_GET_PIECE_TURNS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp b/3party/boost/boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp
new file mode 100644
index 0000000000..618afe5fba
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp
@@ -0,0 +1,88 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_LINE_LINE_INTERSECTION_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_LINE_LINE_INTERSECTION_HPP
+
+
+#include <boost/geometry/arithmetic/determinant.hpp>
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/strategies/buffer.hpp>
+#include <boost/geometry/algorithms/detail/buffer/parallel_continue.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+
+// TODO: once change this to proper strategy
+// It is different from current segment intersection because these are not segments but lines
+// If we have the Line concept, we can create a strategy
+// Assumes a convex corner
+struct line_line_intersection
+{
+
+ template <typename Point>
+ static inline strategy::buffer::join_selector apply(Point const& pi, Point const& pj,
+ Point const& qi, Point const& qj, Point& ip)
+ {
+ // See http://mathworld.wolfram.com/Line-LineIntersection.html
+ typedef typename coordinate_type<Point>::type coordinate_type;
+
+ coordinate_type const denominator
+ = determinant<coordinate_type>(get<0>(pi) - get<0>(pj),
+ get<1>(pi) - get<1>(pj),
+ get<0>(qi) - get<0>(qj),
+ get<1>(qi) - get<1>(qj));
+
+ // Even if the corner was checked before (so it is convex now), that
+ // was done on the original geometry. This function runs on the buffered
+ // geometries, where sides are generated and might be slightly off. In
+ // Floating Point, that slightly might just exceed the limit and we have
+ // to check it again.
+
+ // For round joins, it will not be used at all.
+ // For miter joints, there is a miter limit
+ // If segments are parallel/collinear we must be distinguish two cases:
+ // they continue each other, or they form a spike
+ if (math::equals(denominator, coordinate_type()))
+ {
+ return parallel_continue(get<0>(qj) - get<0>(qi),
+ get<1>(qj) - get<1>(qi),
+ get<0>(pj) - get<0>(pi),
+ get<1>(pj) - get<1>(pi))
+ ? strategy::buffer::join_continue
+ : strategy::buffer::join_spike
+ ;
+ }
+
+ coordinate_type d1 = determinant<coordinate_type>(get<0>(pi), get<1>(pi), get<0>(pj), get<1>(pj));
+ coordinate_type d2 = determinant<coordinate_type>(get<0>(qi), get<1>(qi), get<0>(qj), get<1>(qj));
+
+ double const multiplier = 1.0 / denominator;
+
+ set<0>(ip, determinant<coordinate_type>(d1, get<0>(pi) - get<0>(pj), d2, get<0>(qi) - get<0>(qj)) * multiplier);
+ set<1>(ip, determinant<coordinate_type>(d1, get<1>(pi) - get<1>(pj), d2, get<1>(qi) - get<1>(qj)) * multiplier);
+
+ return strategy::buffer::join_convex;
+ }
+};
+
+
+}} // namespace detail::buffer
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_LINE_LINE_INTERSECTION_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/buffer/parallel_continue.hpp b/3party/boost/boost/geometry/algorithms/detail/buffer/parallel_continue.hpp
new file mode 100644
index 0000000000..119d64de74
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/buffer/parallel_continue.hpp
@@ -0,0 +1,33 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_PARALLEL_CONTINUE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_PARALLEL_CONTINUE_HPP
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+template <typename T>
+inline bool parallel_continue(T dx1, T dy1, T dx2, T dy2)
+{
+ T const dot = dx1 * dx2 + dy1 * dy2;
+ return dot > 0;
+}
+
+}} // namespace detail::buffer
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_PARALLEL_CONTINUE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/buffer/turn_in_input.hpp b/3party/boost/boost/geometry/algorithms/detail/buffer/turn_in_input.hpp
new file mode 100644
index 0000000000..2b1c33d291
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/buffer/turn_in_input.hpp
@@ -0,0 +1,98 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_INPUT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_INPUT_HPP
+
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/algorithms/covered_by.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+// Checks if an turn/intersection point is inside (or covered by) the input geometry
+
+template <typename Tag>
+struct turn_in_input
+{
+};
+
+template <>
+struct turn_in_input<polygon_tag>
+{
+ template <typename Point, typename Geometry>
+ static inline int apply(Point const& point, Geometry const& geometry)
+ {
+ return geometry::covered_by(point, geometry) ? 1 : -1;
+ }
+};
+
+template <>
+struct turn_in_input<linestring_tag>
+{
+ template <typename Point, typename Geometry>
+ static inline int apply(Point const& , Geometry const& )
+ {
+ return 0;
+ }
+};
+
+template <>
+struct turn_in_input<point_tag>
+{
+ template <typename Point, typename Geometry>
+ static inline int apply(Point const& , Geometry const& )
+ {
+ return 0;
+ }
+};
+
+template <>
+struct turn_in_input<multi_polygon_tag>
+{
+ template <typename Point, typename Geometry>
+ static inline int apply(Point const& point, Geometry const& geometry)
+ {
+ return geometry::covered_by(point, geometry) ? 1 : -1;
+ }
+};
+
+template <>
+struct turn_in_input<multi_linestring_tag>
+{
+ template <typename Point, typename Geometry>
+ static inline int apply(Point const& , Geometry const& )
+ {
+ return 0;
+ }
+};
+
+template <>
+struct turn_in_input<multi_point_tag>
+{
+ template <typename Point, typename Geometry>
+ static inline int apply(Point const& , Geometry const& )
+ {
+ return 0;
+ }
+};
+
+
+}} // namespace detail::buffer
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_INPUT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp b/3party/boost/boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp
new file mode 100644
index 0000000000..0ace72f637
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp
@@ -0,0 +1,198 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_PIECE_VISITOR
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_PIECE_VISITOR
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/arithmetic/dot_product.hpp>
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/expand.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
+#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/strategies/buffer.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace buffer
+{
+
+
+struct turn_get_box
+{
+ template <typename Box, typename Turn>
+ static inline void apply(Box& total, Turn const& turn)
+ {
+ geometry::expand(total, turn.robust_point);
+ }
+};
+
+struct turn_ovelaps_box
+{
+ template <typename Box, typename Turn>
+ static inline bool apply(Box const& box, Turn const& turn)
+ {
+ return ! geometry::disjoint(box, turn.robust_point);
+ }
+};
+
+template <typename Turns, typename Pieces>
+class turn_in_piece_visitor
+{
+ Turns& m_turns; // because partition is currently operating on const input only
+ Pieces const& m_pieces; // to check for piece-type
+
+ template <typename Point>
+ static inline bool projection_on_segment(Point const& subject, Point const& p, Point const& q)
+ {
+ typedef Point vector_type;
+ typedef typename geometry::coordinate_type<Point>::type coordinate_type;
+
+ vector_type v = q;
+ vector_type w = subject;
+ subtract_point(v, p);
+ subtract_point(w, p);
+
+ coordinate_type const zero = coordinate_type();
+ coordinate_type const c1 = dot_product(w, v);
+
+ if (c1 < zero)
+ {
+ return false;
+ }
+ coordinate_type const c2 = dot_product(v, v);
+ if (c2 < c1)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+
+ template <typename Point, typename Piece>
+ inline bool on_offsetted(Point const& point, Piece const& piece) const
+ {
+ typedef typename strategy::side::services::default_strategy
+ <
+ typename cs_tag<Point>::type
+ >::type side_strategy;
+
+ for (int i = 1; i < piece.offsetted_count; i++)
+ {
+ Point const& previous = piece.robust_ring[i - 1];
+ Point const& current = piece.robust_ring[i];
+ int const side = side_strategy::apply(point, previous, current);
+ if (side == 0)
+ {
+ // Collinear, check if projection falls on it
+ if (projection_on_segment(point, previous, current))
+ {
+ return true;
+ }
+ }
+
+ }
+ return false;
+ }
+
+
+public:
+
+ inline turn_in_piece_visitor(Turns& turns, Pieces const& pieces)
+ : m_turns(turns)
+ , m_pieces(pieces)
+ {}
+
+ template <typename Turn, typename Piece>
+ inline void apply(Turn const& turn, Piece const& piece, bool first = true)
+ {
+ boost::ignore_unused_variable_warning(first);
+
+ if (turn.count_within > 0)
+ {
+ // Already inside - no need to check again
+ return;
+ }
+
+ if (piece.type == strategy::buffer::buffered_flat_end
+ || piece.type == strategy::buffer::buffered_concave)
+ {
+ // Turns cannot be inside a flat end (though they can be on border)
+ // Neither we need to check if they are inside concave helper pieces
+ return;
+ }
+
+ bool neighbour = false;
+ for (int i = 0; i < 2; i++)
+ {
+ // Don't compare against one of the two source-pieces
+ if (turn.operations[i].piece_index == piece.index)
+ {
+ return;
+ }
+
+ typename boost::range_value<Pieces>::type const& pc
+ = m_pieces[turn.operations[i].piece_index];
+ if (pc.left_index == piece.index
+ || pc.right_index == piece.index)
+ {
+ if (pc.type == strategy::buffer::buffered_flat_end)
+ {
+ // If it is a flat end, don't compare against its neighbor:
+ // it will always be located on one of the helper segments
+ return;
+ }
+ neighbour = true;
+ }
+ }
+
+ int geometry_code = detail::within::point_in_geometry(turn.robust_point, piece.robust_ring);
+
+ if (geometry_code == -1)
+ {
+ return;
+ }
+
+ Turn& mutable_turn = m_turns[turn.turn_index];
+ if (geometry_code == 0 && ! neighbour)
+ {
+ // If it is on the border and they are neighbours, it should be
+ // on the offsetted ring
+
+ if (! on_offsetted(turn.robust_point, piece))
+ {
+ // It is on the border but not on the offsetted ring.
+ // Then it is somewhere on the helper-segments
+ // Classify it as inside
+ geometry_code = 1;
+ mutable_turn.count_on_helper++;
+ }
+ }
+
+ switch (geometry_code)
+ {
+ case 1 : mutable_turn.count_within++; break;
+ case 0 : mutable_turn.count_on_offsetted++; break;
+ }
+ }
+};
+
+
+}} // namespace detail::buffer
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_PIECE_VISITOR
diff --git a/3party/boost/boost/geometry/algorithms/detail/calculate_sum.hpp b/3party/boost/boost/geometry/algorithms/detail/calculate_sum.hpp
index dd0399bb17..b23e70171b 100644
--- a/3party/boost/boost/geometry/algorithms/detail/calculate_sum.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/calculate_sum.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,9 +15,7 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_SUM_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_SUM_HPP
-
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
namespace boost { namespace geometry
{
@@ -32,7 +31,8 @@ class calculate_polygon_sum
static inline ReturnType sum_interior_rings(Rings const& rings, Strategy const& strategy)
{
ReturnType sum = ReturnType();
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ for (typename boost::range_iterator<Rings const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
sum += Policy::apply(*it, strategy);
}
diff --git a/3party/boost/boost/geometry/algorithms/detail/check_iterator_range.hpp b/3party/boost/boost/geometry/algorithms/detail/check_iterator_range.hpp
new file mode 100644
index 0000000000..09ea7f79a0
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/check_iterator_range.hpp
@@ -0,0 +1,71 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CHECK_ITERATOR_RANGE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CHECK_ITERATOR_RANGE_HPP
+
+#include <boost/core/ignore_unused.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+// Check whether (each element of) an iterator range satisfies a given
+// predicate.
+// The predicate must be implemented as having a static apply unary
+// method that returns a bool.
+// By default an empty range is accepted
+template <typename Predicate, bool AllowEmptyRange = true>
+struct check_iterator_range
+{
+ template <typename InputIterator>
+ static inline bool apply(InputIterator first, InputIterator beyond)
+ {
+ for (InputIterator it = first; it != beyond; ++it)
+ {
+ if ( !Predicate::apply(*it) )
+ {
+ return false;
+ }
+ }
+ return AllowEmptyRange || first != beyond;
+ }
+
+
+ // version where we can pass a predicate object
+ template <typename InputIterator>
+ static inline bool apply(InputIterator first,
+ InputIterator beyond,
+ Predicate const& predicate)
+ {
+ // in case predicate's apply method is static, MSVC will
+ // complain that predicate is not used
+ boost::ignore_unused(predicate);
+
+ for (InputIterator it = first; it != beyond; ++it)
+ {
+ if ( !predicate.apply(*it) )
+ {
+ return false;
+ }
+ }
+ return AllowEmptyRange || first != beyond;
+ }
+};
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CHECK_ITERATOR_RANGE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/comparable_distance/implementation.hpp b/3party/boost/boost/geometry/algorithms/detail/comparable_distance/implementation.hpp
new file mode 100644
index 0000000000..b6eb7a27f1
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/comparable_distance/implementation.hpp
@@ -0,0 +1,24 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_IMPLEMENTATION_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_IMPLEMENTATION_HPP
+
+#include <boost/geometry/algorithms/detail/distance/implementation.hpp>
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_IMPLEMENTATION_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/comparable_distance/interface.hpp b/3party/boost/boost/geometry/algorithms/detail/comparable_distance/interface.hpp
new file mode 100644
index 0000000000..1a57c8f4b3
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/comparable_distance/interface.hpp
@@ -0,0 +1,363 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_INTERFACE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_INTERFACE_HPP
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/strategies/comparable_distance_result.hpp>
+#include <boost/geometry/strategies/default_comparable_distance_result.hpp>
+#include <boost/geometry/strategies/distance.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/interface.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+namespace resolve_strategy
+{
+
+struct comparable_distance
+{
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline
+ typename comparable_distance_result<Geometry1, Geometry2, Strategy>::type
+ apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
+ {
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy_type;
+
+ return dispatch::distance
+ <
+ Geometry1, Geometry2, comparable_strategy_type
+ >::apply(geometry1,
+ geometry2,
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy));
+ }
+
+ template <typename Geometry1, typename Geometry2>
+ static inline typename comparable_distance_result
+ <
+ Geometry1, Geometry2, default_strategy
+ >::type
+ apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ default_strategy)
+ {
+ typedef typename strategy::distance::services::comparable_type
+ <
+ typename detail::distance::default_strategy
+ <
+ Geometry1, Geometry2
+ >::type
+ >::type comparable_strategy_type;
+
+ return dispatch::distance
+ <
+ Geometry1, Geometry2, comparable_strategy_type
+ >::apply(geometry1, geometry2, comparable_strategy_type());
+ }
+};
+
+} // namespace resolve_strategy
+
+
+namespace resolve_variant
+{
+
+
+template <typename Geometry1, typename Geometry2>
+struct comparable_distance
+{
+ template <typename Strategy>
+ static inline
+ typename comparable_distance_result<Geometry1, Geometry2, Strategy>::type
+ apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
+ {
+ return resolve_strategy::comparable_distance::apply(geometry1,
+ geometry2,
+ strategy);
+ }
+};
+
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct comparable_distance
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Geometry2
+ >
+{
+ template <typename Strategy>
+ struct visitor: static_visitor
+ <
+ typename comparable_distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Geometry2,
+ Strategy
+ >::type
+ >
+ {
+ Geometry2 const& m_geometry2;
+ Strategy const& m_strategy;
+
+ visitor(Geometry2 const& geometry2,
+ Strategy const& strategy)
+ : m_geometry2(geometry2),
+ m_strategy(strategy)
+ {}
+
+ template <typename Geometry1>
+ typename comparable_distance_result
+ <
+ Geometry1, Geometry2, Strategy
+ >::type
+ operator()(Geometry1 const& geometry1) const
+ {
+ return comparable_distance
+ <
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ Strategy
+ >(geometry1, m_geometry2, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline typename comparable_distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Geometry2,
+ Strategy
+ >::type
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
+ {
+ return apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
+ }
+};
+
+
+template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct comparable_distance
+ <
+ Geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>
+ >
+{
+ template <typename Strategy>
+ struct visitor: static_visitor
+ <
+ typename comparable_distance_result
+ <
+ Geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Strategy
+ >::type
+ >
+ {
+ Geometry1 const& m_geometry1;
+ Strategy const& m_strategy;
+
+ visitor(Geometry1 const& geometry1,
+ Strategy const& strategy)
+ : m_geometry1(geometry1),
+ m_strategy(strategy)
+ {}
+
+ template <typename Geometry2>
+ typename comparable_distance_result
+ <
+ Geometry1, Geometry2, Strategy
+ >::type
+ operator()(Geometry2 const& geometry2) const
+ {
+ return comparable_distance
+ <
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ Strategy
+ >(m_geometry1, geometry2, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline typename comparable_distance_result
+ <
+ Geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Strategy
+ >::type
+ apply(Geometry1 const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
+ Strategy const& strategy)
+ {
+ return apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
+ }
+};
+
+
+template
+<
+ BOOST_VARIANT_ENUM_PARAMS(typename A),
+ BOOST_VARIANT_ENUM_PARAMS(typename B)
+>
+struct comparable_distance
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(A)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(B)>
+ >
+{
+ template <typename Strategy>
+ struct visitor: static_visitor
+ <
+ typename comparable_distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(A)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(B)>,
+ Strategy
+ >::type
+ >
+ {
+ Strategy const& m_strategy;
+
+ visitor(Strategy const& strategy)
+ : m_strategy(strategy)
+ {}
+
+ template <typename Geometry1, typename Geometry2>
+ typename comparable_distance_result
+ <
+ Geometry1, Geometry2, Strategy
+ >::type
+ operator()(Geometry1 const& geometry1, Geometry2 const& geometry2) const
+ {
+ return comparable_distance
+ <
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ Strategy
+ >(geometry1, geometry2, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline typename comparable_distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(A)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(B)>,
+ Strategy
+ >::type
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(A)> const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(B)> const& geometry2,
+ Strategy const& strategy)
+ {
+ return apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
+ }
+};
+
+} // namespace resolve_variant
+
+
+
+/*!
+\brief \brief_calc2{comparable distance measurement} \brief_strategy
+\ingroup distance
+\details The free function comparable_distance does not necessarily calculate the distance,
+ but it calculates a distance measure such that two distances are comparable to each other.
+ For example: for the Cartesian coordinate system, Pythagoras is used but the square root
+ is not taken, which makes it faster and the results of two point pairs can still be
+ compared to each other.
+\tparam Geometry1 first geometry type
+\tparam Geometry2 second geometry type
+\tparam Strategy \tparam_strategy{Distance}
+\param geometry1 \param_geometry
+\param geometry2 \param_geometry
+\param strategy \param_strategy{distance}
+\return \return_calc{comparable distance}
+
+\qbk{distinguish,with strategy}
+ */
+template <typename Geometry1, typename Geometry2, typename Strategy>
+inline typename comparable_distance_result<Geometry1, Geometry2, Strategy>::type
+comparable_distance(Geometry1 const& geometry1, Geometry2 const& geometry2,
+ Strategy const& strategy)
+{
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2 const>();
+
+ return resolve_variant::comparable_distance
+ <
+ Geometry1,
+ Geometry2
+ >::apply(geometry1, geometry2, strategy);
+}
+
+
+
+/*!
+\brief \brief_calc2{comparable distance measurement}
+\ingroup distance
+\details The free function comparable_distance does not necessarily calculate the distance,
+ but it calculates a distance measure such that two distances are comparable to each other.
+ For example: for the Cartesian coordinate system, Pythagoras is used but the square root
+ is not taken, which makes it faster and the results of two point pairs can still be
+ compared to each other.
+\tparam Geometry1 first geometry type
+\tparam Geometry2 second geometry type
+\param geometry1 \param_geometry
+\param geometry2 \param_geometry
+\return \return_calc{comparable distance}
+
+\qbk{[include reference/algorithms/comparable_distance.qbk]}
+ */
+template <typename Geometry1, typename Geometry2>
+inline typename default_comparable_distance_result<Geometry1, Geometry2>::type
+comparable_distance(Geometry1 const& geometry1, Geometry2 const& geometry2)
+{
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2 const>();
+
+ return comparable_distance(geometry1, geometry2, default_strategy());
+}
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_INTERFACE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp b/3party/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp
index d39824a61d..fccdf4bb1d 100644
--- a/3party/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp
@@ -33,9 +33,9 @@ namespace detail { namespace conversion
template
<
- typename Source,
- typename Destination,
- std::size_t Dimension,
+ typename Source,
+ typename Destination,
+ std::size_t Dimension,
std::size_t DimensionCount
>
struct indexed_to_indexed
@@ -44,25 +44,25 @@ struct indexed_to_indexed
{
typedef typename coordinate_type<Destination>::type coordinate_type;
- geometry::set<min_corner, Dimension>(destination,
+ geometry::set<min_corner, Dimension>(destination,
boost::numeric_cast<coordinate_type>(
geometry::get<min_corner, Dimension>(source)));
- geometry::set<max_corner, Dimension>(destination,
+ geometry::set<max_corner, Dimension>(destination,
boost::numeric_cast<coordinate_type>(
geometry::get<max_corner, Dimension>(source)));
-
+
indexed_to_indexed
<
- Source, Destination,
+ Source, Destination,
Dimension + 1, DimensionCount
>::apply(source, destination);
}
};
-template
+template
<
- typename Source,
- typename Destination,
+ typename Source,
+ typename Destination,
std::size_t DimensionCount
>
struct indexed_to_indexed<Source, Destination, DimensionCount, DimensionCount>
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint.hpp
deleted file mode 100644
index e944e5169a..0000000000
--- a/3party/boost/boost/geometry/algorithms/detail/disjoint.hpp
+++ /dev/null
@@ -1,239 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_HPP
-
-// Note: contrary to most files, the geometry::detail::disjoint namespace
-// is partly implemented in a separate file, to avoid circular references
-// disjoint -> get_turns -> disjoint
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-
-struct disjoint_interrupt_policy
-{
- static bool const enabled = true;
- bool has_intersections;
-
- inline disjoint_interrupt_policy()
- : has_intersections(false)
- {}
-
- template <typename Range>
- inline bool apply(Range const& range)
- {
- // If there is any IP in the range, it is NOT disjoint
- if (boost::size(range) > 0)
- {
- has_intersections = true;
- return true;
- }
- return false;
- }
-};
-
-
-
-template
-<
- typename Point1, typename Point2,
- std::size_t Dimension, std::size_t DimensionCount
->
-struct point_point
-{
- static inline bool apply(Point1 const& p1, Point2 const& p2)
- {
- if (! geometry::math::equals(get<Dimension>(p1), get<Dimension>(p2)))
- {
- return true;
- }
- return point_point
- <
- Point1, Point2,
- Dimension + 1, DimensionCount
- >::apply(p1, p2);
- }
-};
-
-
-template <typename Point1, typename Point2, std::size_t DimensionCount>
-struct point_point<Point1, Point2, DimensionCount, DimensionCount>
-{
- static inline bool apply(Point1 const& , Point2 const& )
- {
- return false;
- }
-};
-
-
-template
-<
- typename Point, typename Box,
- std::size_t Dimension, std::size_t DimensionCount
->
-struct point_box
-{
- static inline bool apply(Point const& point, Box const& box)
- {
- if (get<Dimension>(point) < get<min_corner, Dimension>(box)
- || get<Dimension>(point) > get<max_corner, Dimension>(box))
- {
- return true;
- }
- return point_box
- <
- Point, Box,
- Dimension + 1, DimensionCount
- >::apply(point, box);
- }
-};
-
-
-template <typename Point, typename Box, std::size_t DimensionCount>
-struct point_box<Point, Box, DimensionCount, DimensionCount>
-{
- static inline bool apply(Point const& , Box const& )
- {
- return false;
- }
-};
-
-
-template
-<
- typename Box1, typename Box2,
- std::size_t Dimension, std::size_t DimensionCount
->
-struct box_box
-{
- static inline bool apply(Box1 const& box1, Box2 const& box2)
- {
- if (get<max_corner, Dimension>(box1) < get<min_corner, Dimension>(box2))
- {
- return true;
- }
- if (get<min_corner, Dimension>(box1) > get<max_corner, Dimension>(box2))
- {
- return true;
- }
- return box_box
- <
- Box1, Box2,
- Dimension + 1, DimensionCount
- >::apply(box1, box2);
- }
-};
-
-
-template <typename Box1, typename Box2, std::size_t DimensionCount>
-struct box_box<Box1, Box2, DimensionCount, DimensionCount>
-{
- static inline bool apply(Box1 const& , Box2 const& )
- {
- return false;
- }
-};
-
-
-template
-<
- typename Geometry1, typename Geometry2
->
-struct reverse_covered_by
-{
- static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
- {
- return ! geometry::covered_by(geometry1, geometry2);
- }
-};
-
-
-
-/*!
- \brief Internal utility function to detect of boxes are disjoint
- \note Is used from other algorithms, declared separately
- to avoid circular references
- */
-template <typename Box1, typename Box2>
-inline bool disjoint_box_box(Box1 const& box1, Box2 const& box2)
-{
- return box_box
- <
- Box1, Box2,
- 0, dimension<Box1>::type::value
- >::apply(box1, box2);
-}
-
-
-
-/*!
- \brief Internal utility function to detect of points are disjoint
- \note To avoid circular references
- */
-template <typename Point1, typename Point2>
-inline bool disjoint_point_point(Point1 const& point1, Point2 const& point2)
-{
- return point_point
- <
- Point1, Point2,
- 0, dimension<Point1>::type::value
- >::apply(point1, point2);
-}
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace equals
-{
-
-/*!
- \brief Internal utility function to detect of points are disjoint
- \note To avoid circular references
- */
-template <typename Point1, typename Point2>
-inline bool equals_point_point(Point1 const& point1, Point2 const& point2)
-{
- return ! detail::disjoint::disjoint_point_point(point1, point2);
-}
-
-
-}} // namespace detail::equals
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/areal_areal.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/areal_areal.hpp
new file mode 100644
index 0000000000..140d87daf2
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/areal_areal.hpp
@@ -0,0 +1,134 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_AREAL_AREAL_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_AREAL_AREAL_HPP
+
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/algorithms/within.hpp>
+#include <boost/geometry/algorithms/detail/for_each_range.hpp>
+#include <boost/geometry/algorithms/point_on_surface.hpp>
+
+#include <boost/geometry/algorithms/detail/disjoint/linear_linear.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+
+template<typename Geometry>
+struct check_each_ring_for_within
+{
+ bool has_within;
+ Geometry const& m_geometry;
+
+ inline check_each_ring_for_within(Geometry const& g)
+ : has_within(false)
+ , m_geometry(g)
+ {}
+
+ template <typename Range>
+ inline void apply(Range const& range)
+ {
+ if ( geometry::within(geometry::return_point_on_surface(range), m_geometry) )
+ {
+ has_within = true;
+ }
+ }
+};
+
+
+
+template <typename FirstGeometry, typename SecondGeometry>
+inline bool rings_containing(FirstGeometry const& geometry1,
+ SecondGeometry const& geometry2)
+{
+ check_each_ring_for_within<FirstGeometry> checker(geometry1);
+ geometry::detail::for_each_range(geometry2, checker);
+ return checker.has_within;
+}
+
+
+
+template <typename Geometry1, typename Geometry2>
+struct general_areal
+{
+ static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
+ {
+ if ( ! disjoint_linear<Geometry1, Geometry2>::apply(geometry1, geometry2) )
+ {
+ return false;
+ }
+
+ // If there is no intersection of segments, they might located
+ // inside each other
+
+ // We check that using a point on the surface, and see if that is inside
+ // the other geometry. And vice versa.
+
+ if ( rings_containing(geometry1, geometry2)
+ || rings_containing(geometry2, geometry1) )
+ {
+ return false;
+ }
+
+ return true;
+ }
+};
+
+
+}} // namespace detail::disjoint
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Areal1, typename Areal2>
+struct disjoint<Areal1, Areal2, 2, areal_tag, areal_tag, false>
+ : detail::disjoint::general_areal<Areal1, Areal2>
+{};
+
+
+template <typename Areal, typename Box>
+struct disjoint<Areal, Box, 2, areal_tag, box_tag, false>
+ : detail::disjoint::general_areal<Areal, Box>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_AREAL_AREAL_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/box_box.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/box_box.hpp
new file mode 100644
index 0000000000..ccff9799fd
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/box_box.hpp
@@ -0,0 +1,114 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_BOX_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_BOX_BOX_HPP
+
+#include <cstddef>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+
+template
+<
+ typename Box1, typename Box2,
+ std::size_t Dimension, std::size_t DimensionCount
+>
+struct box_box
+{
+ static inline bool apply(Box1 const& box1, Box2 const& box2)
+ {
+ if (get<max_corner, Dimension>(box1) < get<min_corner, Dimension>(box2))
+ {
+ return true;
+ }
+ if (get<min_corner, Dimension>(box1) > get<max_corner, Dimension>(box2))
+ {
+ return true;
+ }
+ return box_box
+ <
+ Box1, Box2,
+ Dimension + 1, DimensionCount
+ >::apply(box1, box2);
+ }
+};
+
+
+template <typename Box1, typename Box2, std::size_t DimensionCount>
+struct box_box<Box1, Box2, DimensionCount, DimensionCount>
+{
+ static inline bool apply(Box1 const& , Box2 const& )
+ {
+ return false;
+ }
+};
+
+
+/*!
+ \brief Internal utility function to detect of boxes are disjoint
+ \note Is used from other algorithms, declared separately
+ to avoid circular references
+ */
+template <typename Box1, typename Box2>
+inline bool disjoint_box_box(Box1 const& box1, Box2 const& box2)
+{
+ return box_box
+ <
+ Box1, Box2,
+ 0, dimension<Box1>::type::value
+ >::apply(box1, box2);
+}
+
+
+}} // namespace detail::disjoint
+#endif // DOXYGEN_NO_DETAIL
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Box1, typename Box2, std::size_t DimensionCount>
+struct disjoint<Box1, Box2, DimensionCount, box_tag, box_tag, false>
+ : detail::disjoint::box_box<Box1, Box2, 0, DimensionCount>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_BOX_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/implementation.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/implementation.hpp
new file mode 100644
index 0000000000..0c8079b8e4
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/implementation.hpp
@@ -0,0 +1,36 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_IMPLEMENTATION_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_IMPLEMENTATION_HPP
+
+
+#include <boost/geometry/algorithms/detail/disjoint/areal_areal.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/linear_areal.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/linear_linear.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/point_geometry.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/point_point.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/segment_box.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp>
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_IMPLEMENTATION_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/interface.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/interface.hpp
new file mode 100644
index 0000000000..ec9057ba0d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/interface.hpp
@@ -0,0 +1,187 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_INTERFACE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_INTERFACE_HPP
+
+#include <cstddef>
+
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// If reversal is needed, perform it
+template
+<
+ typename Geometry1, typename Geometry2,
+ std::size_t DimensionCount,
+ typename Tag1, typename Tag2
+>
+struct disjoint<Geometry1, Geometry2, DimensionCount, Tag1, Tag2, true>
+{
+ static inline bool apply(Geometry1 const& g1, Geometry2 const& g2)
+ {
+ return disjoint
+ <
+ Geometry2, Geometry1,
+ DimensionCount,
+ Tag2, Tag1
+ >::apply(g2, g1);
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_variant {
+
+template <typename Geometry1, typename Geometry2>
+struct disjoint
+{
+ static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
+ {
+ concept::check_concepts_and_equal_dimensions
+ <
+ Geometry1 const,
+ Geometry2 const
+ >();
+
+ return dispatch::disjoint<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct disjoint<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ struct visitor: boost::static_visitor<bool>
+ {
+ Geometry2 const& m_geometry2;
+
+ visitor(Geometry2 const& geometry2): m_geometry2(geometry2) {}
+
+ template <typename Geometry1>
+ bool operator()(Geometry1 const& geometry1) const
+ {
+ return disjoint<Geometry1, Geometry2>::apply(geometry1, m_geometry2);
+ }
+ };
+
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2 const& geometry2)
+ {
+ return boost::apply_visitor(visitor(geometry2), geometry1);
+ }
+};
+
+template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct disjoint<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: boost::static_visitor<bool>
+ {
+ Geometry1 const& m_geometry1;
+
+ visitor(Geometry1 const& geometry1): m_geometry1(geometry1) {}
+
+ template <typename Geometry2>
+ bool operator()(Geometry2 const& geometry2) const
+ {
+ return disjoint<Geometry1, Geometry2>::apply(m_geometry1, geometry2);
+ }
+ };
+
+ static inline bool
+ apply(Geometry1 const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2)
+ {
+ return boost::apply_visitor(visitor(geometry1), geometry2);
+ }
+};
+
+template <
+ BOOST_VARIANT_ENUM_PARAMS(typename T1),
+ BOOST_VARIANT_ENUM_PARAMS(typename T2)
+>
+struct disjoint<
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
+>
+{
+ struct visitor: boost::static_visitor<bool>
+ {
+ template <typename Geometry1, typename Geometry2>
+ bool operator()(Geometry1 const& geometry1,
+ Geometry2 const& geometry2) const
+ {
+ return disjoint<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ }
+ };
+
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2)
+ {
+ return boost::apply_visitor(visitor(), geometry1, geometry2);
+ }
+};
+
+} // namespace resolve_variant
+
+
+
+/*!
+\brief \brief_check2{are disjoint}
+\ingroup disjoint
+\tparam Geometry1 \tparam_geometry
+\tparam Geometry2 \tparam_geometry
+\param geometry1 \param_geometry
+\param geometry2 \param_geometry
+\return \return_check2{are disjoint}
+
+\qbk{[include reference/algorithms/disjoint.qbk]}
+*/
+template <typename Geometry1, typename Geometry2>
+inline bool disjoint(Geometry1 const& geometry1,
+ Geometry2 const& geometry2)
+{
+ return resolve_variant::disjoint<Geometry1, Geometry2>::apply(geometry1, geometry2);
+}
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_INTERFACE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/linear_areal.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/linear_areal.hpp
new file mode 100644
index 0000000000..eefd351b8d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/linear_areal.hpp
@@ -0,0 +1,244 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_AREAL_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_AREAL_HPP
+
+#include <iterator>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
+#include <boost/geometry/algorithms/detail/point_on_border.hpp>
+
+#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/segment_box.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp>
+
+#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+
+template<typename Geometry1, typename Geometry2>
+struct disjoint_linear_areal
+{
+ static inline bool apply(Geometry1 const& g1, Geometry2 const& g2)
+ {
+ // if there are intersections - return false
+ if ( !disjoint_linear<Geometry1, Geometry2>::apply(g1, g2) )
+ return false;
+
+ typedef typename point_type<Geometry1>::type point1_type;
+ point1_type p;
+ geometry::point_on_border(p, g1);
+ return !geometry::covered_by(p, g2);
+ }
+};
+
+
+
+
+template
+<
+ typename Segment,
+ typename Areal,
+ typename Tag = typename tag<Areal>::type
+>
+struct disjoint_segment_areal
+ : not_implemented<Segment, Areal>
+{};
+
+
+template <typename Segment, typename Polygon>
+class disjoint_segment_areal<Segment, Polygon, polygon_tag>
+{
+private:
+ template <typename RingIterator>
+ static inline bool check_interior_rings(RingIterator first,
+ RingIterator beyond,
+ Segment const& segment)
+ {
+ for (RingIterator it = first; it != beyond; ++it)
+ {
+ if ( !disjoint_range_segment_or_box
+ <
+ typename std::iterator_traits
+ <
+ RingIterator
+ >::value_type,
+ closure<Polygon>::value,
+ Segment
+ >::apply(*it, segment) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+
+ template <typename InteriorRings>
+ static inline
+ bool check_interior_rings(InteriorRings const& interior_rings,
+ Segment const& segment)
+ {
+ return check_interior_rings(boost::begin(interior_rings),
+ boost::end(interior_rings),
+ segment);
+ }
+
+
+public:
+ static inline bool apply(Segment const& segment, Polygon const& polygon)
+ {
+ typedef typename geometry::ring_type<Polygon>::type ring;
+
+ if ( !disjoint_range_segment_or_box
+ <
+ ring, closure<Polygon>::value, Segment
+ >::apply(geometry::exterior_ring(polygon), segment) )
+ {
+ return false;
+ }
+
+ if ( !check_interior_rings(geometry::interior_rings(polygon), segment) )
+ {
+ return false;
+ }
+
+ typename point_type<Segment>::type p;
+ detail::assign_point_from_index<0>(segment, p);
+
+ return !geometry::covered_by(p, polygon);
+ }
+};
+
+
+template <typename Segment, typename MultiPolygon>
+struct disjoint_segment_areal<Segment, MultiPolygon, multi_polygon_tag>
+{
+ static inline
+ bool apply(Segment const& segment, MultiPolygon const& multipolygon)
+ {
+ return disjoint_multirange_segment_or_box
+ <
+ MultiPolygon, Segment
+ >::apply(multipolygon, segment);
+ }
+};
+
+
+template <typename Segment, typename Ring>
+struct disjoint_segment_areal<Segment, Ring, ring_tag>
+{
+ static inline bool apply(Segment const& segment, Ring const& ring)
+ {
+ if ( !disjoint_range_segment_or_box
+ <
+ Ring, closure<Ring>::value, Segment
+ >::apply(ring, segment) )
+ {
+ return false;
+ }
+
+ typename point_type<Segment>::type p;
+ detail::assign_point_from_index<0>(segment, p);
+
+ return !geometry::covered_by(p, ring);
+ }
+};
+
+
+}} // namespace detail::disjoint
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Linear, typename Areal>
+struct disjoint<Linear, Areal, 2, linear_tag, areal_tag, false>
+ : public detail::disjoint::disjoint_linear_areal<Linear, Areal>
+{};
+
+
+template <typename Areal, typename Linear>
+struct disjoint<Areal, Linear, 2, areal_tag, linear_tag, false>
+{
+ static inline
+ bool apply(Areal const& areal, Linear const& linear)
+ {
+ return detail::disjoint::disjoint_linear_areal
+ <
+ Linear, Areal
+ >::apply(linear, areal);
+ }
+};
+
+
+template <typename Areal, typename Segment>
+struct disjoint<Areal, Segment, 2, areal_tag, segment_tag, false>
+{
+ static inline bool apply(Areal const& g1, Segment const& g2)
+ {
+ return detail::disjoint::disjoint_segment_areal
+ <
+ Segment, Areal
+ >::apply(g2, g1);
+ }
+};
+
+
+template <typename Segment, typename Areal>
+struct disjoint<Segment, Areal, 2, segment_tag, areal_tag, false>
+ : detail::disjoint::disjoint_segment_areal<Segment, Areal>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_AREAL_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp
new file mode 100644
index 0000000000..ad84d7191d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp
@@ -0,0 +1,174 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_LINEAR_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_LINEAR_HPP
+
+#include <cstddef>
+#include <deque>
+
+#include <boost/range.hpp>
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
+#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
+
+#include <boost/geometry/policies/disjoint_interrupt_policy.hpp>
+#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
+
+#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+template <typename Segment1, typename Segment2>
+struct disjoint_segment
+{
+ static inline bool apply(Segment1 const& segment1, Segment2 const& segment2)
+ {
+ typedef typename point_type<Segment1>::type point_type;
+
+ // We don't need to rescale to detect disjointness
+ typedef no_rescale_policy rescale_policy_type;
+ rescale_policy_type robust_policy;
+
+ typedef segment_intersection_points
+ <
+ point_type,
+ typename segment_ratio_type
+ <
+ point_type,
+ rescale_policy_type
+ >::type
+ > intersection_return_type;
+
+ intersection_return_type is
+ = strategy::intersection::relate_cartesian_segments
+ <
+ policies::relate::segments_intersection_points
+ <
+ intersection_return_type
+ >
+ >::apply(segment1, segment2, robust_policy);
+
+ return is.count == 0;
+ }
+};
+
+
+struct assign_disjoint_policy
+{
+ // We want to include all points:
+ static bool const include_no_turn = true;
+ static bool const include_degenerate = true;
+ static bool const include_opposite = true;
+
+ // We don't assign extra info:
+ template
+ <
+ typename Info,
+ typename Point1,
+ typename Point2,
+ typename IntersectionInfo,
+ typename DirInfo
+ >
+ static inline void apply(Info& , Point1 const& , Point2 const&,
+ IntersectionInfo const&, DirInfo const&)
+ {}
+};
+
+
+template <typename Geometry1, typename Geometry2>
+struct disjoint_linear
+{
+ static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
+ {
+ typedef typename geometry::point_type<Geometry1>::type point_type;
+ typedef detail::no_rescale_policy rescale_policy_type;
+ typedef overlay::turn_info
+ <
+ point_type,
+ typename segment_ratio_type<point_type, rescale_policy_type>::type
+ > turn_info;
+ std::deque<turn_info> turns;
+
+ static const bool reverse1 = overlay::do_reverse<geometry::point_order<Geometry1>::value>::value; // should be false
+ static const bool reverse2 = overlay::do_reverse<geometry::point_order<Geometry2>::value>::value; // should be false
+
+ // Specify two policies:
+ // 1) Stop at any intersection
+ // 2) In assignment, include also degenerate points (which are normally skipped)
+ disjoint_interrupt_policy policy;
+ rescale_policy_type robust_policy;
+ geometry::get_turns
+ <
+ reverse1, reverse2,
+ assign_disjoint_policy
+ >(geometry1, geometry2, robust_policy, turns, policy);
+
+ return !policy.has_intersections;
+ }
+};
+
+
+}} // namespace detail::disjoint
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Linear1, typename Linear2>
+struct disjoint<Linear1, Linear2, 2, linear_tag, linear_tag, false>
+ : detail::disjoint::disjoint_linear<Linear1, Linear2>
+{};
+
+
+template <typename Segment1, typename Segment2>
+struct disjoint<Segment1, Segment2, 2, segment_tag, segment_tag, false>
+ : detail::disjoint::disjoint_segment<Segment1, Segment2>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_LINEAR_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp
new file mode 100644
index 0000000000..d181726e2e
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp
@@ -0,0 +1,195 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_SEGMENT_OR_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_SEGMENT_OR_BOX_HPP
+
+#include <boost/range.hpp>
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+
+#include <boost/geometry/geometries/segment.hpp>
+
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+#include <boost/geometry/views/closeable_view.hpp>
+
+#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+
+template <typename MultiRange, typename SegmentOrBox>
+struct disjoint_multirange_segment_or_box
+{
+ static inline
+ bool apply(MultiRange const& multirange, SegmentOrBox const& segment_or_box)
+ {
+ typedef typename boost::range_iterator
+ <
+ MultiRange const
+ >::type const_iterator;
+
+ for (const_iterator it = boost::begin(multirange);
+ it != boost::end(multirange); ++it)
+ {
+ if ( !dispatch::disjoint
+ <
+ typename boost::range_value<MultiRange>::type,
+ SegmentOrBox
+ >::apply(*it, segment_or_box) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+};
+
+
+template
+<
+ typename Range,
+ closure_selector Closure,
+ typename SegmentOrBox
+>
+struct disjoint_range_segment_or_box
+{
+ static inline
+ bool apply(Range const& range, SegmentOrBox const& segment_or_box)
+ {
+ typedef typename closeable_view<Range const, Closure>::type view_type;
+
+ typedef typename ::boost::range_value<view_type>::type point_type;
+ typedef typename ::boost::range_iterator
+ <
+ view_type const
+ >::type const_iterator;
+
+ typedef typename ::boost::range_size<view_type>::type size_type;
+
+ typedef typename geometry::model::referring_segment
+ <
+ point_type const
+ > range_segment;
+
+ view_type view(range);
+
+ const size_type count = ::boost::size(view);
+
+ if ( count == 0 )
+ {
+ return false;
+ }
+ else if ( count == 1 )
+ {
+ return dispatch::disjoint
+ <
+ point_type, SegmentOrBox
+ >::apply(geometry::range::front<view_type const>(view),
+ segment_or_box);
+ }
+ else
+ {
+ const_iterator it0 = ::boost::begin(view);
+ const_iterator it1 = ::boost::begin(view) + 1;
+ const_iterator last = ::boost::end(view);
+
+ for ( ; it1 != last ; ++it0, ++it1 )
+ {
+ range_segment rng_segment(*it0, *it1);
+ if ( !dispatch::disjoint
+ <
+ range_segment, SegmentOrBox
+ >::apply(rng_segment, segment_or_box) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+};
+
+
+
+
+template
+<
+ typename Linear,
+ typename SegmentOrBox,
+ typename Tag = typename tag<Linear>::type
+>
+struct disjoint_linear_segment_or_box
+ : not_implemented<Linear, SegmentOrBox>
+{};
+
+
+template <typename Linestring, typename SegmentOrBox>
+struct disjoint_linear_segment_or_box<Linestring, SegmentOrBox, linestring_tag>
+ : disjoint_range_segment_or_box<Linestring, closed, SegmentOrBox>
+{};
+
+
+template <typename MultiLinestring, typename SegmentOrBox>
+struct disjoint_linear_segment_or_box
+ <
+ MultiLinestring, SegmentOrBox, multi_linestring_tag
+ > : disjoint_multirange_segment_or_box<MultiLinestring, SegmentOrBox>
+{};
+
+
+}} // namespace detail::disjoint
+#endif // DOXYGEN_NO_DETAIL
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Linear, typename Segment>
+struct disjoint<Linear, Segment, 2, linear_tag, segment_tag, false>
+ : detail::disjoint::disjoint_linear_segment_or_box<Linear, Segment>
+{};
+
+
+template <typename Linear, typename Box, std::size_t DimensionCount>
+struct disjoint<Linear, Box, DimensionCount, linear_tag, box_tag, false>
+ : detail::disjoint::disjoint_linear_segment_or_box<Linear, Box>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_SEGMENT_OR_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/point_box.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/point_box.hpp
new file mode 100644
index 0000000000..ea6609a153
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/point_box.hpp
@@ -0,0 +1,94 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_BOX_HPP
+
+#include <cstddef>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+
+template
+<
+ typename Point, typename Box,
+ std::size_t Dimension, std::size_t DimensionCount
+>
+struct point_box
+{
+ static inline bool apply(Point const& point, Box const& box)
+ {
+ if (get<Dimension>(point) < get<min_corner, Dimension>(box)
+ || get<Dimension>(point) > get<max_corner, Dimension>(box))
+ {
+ return true;
+ }
+ return point_box
+ <
+ Point, Box,
+ Dimension + 1, DimensionCount
+ >::apply(point, box);
+ }
+};
+
+
+template <typename Point, typename Box, std::size_t DimensionCount>
+struct point_box<Point, Box, DimensionCount, DimensionCount>
+{
+ static inline bool apply(Point const& , Box const& )
+ {
+ return false;
+ }
+};
+
+
+}} // namespace detail::equals
+#endif // DOXYGEN_NO_DETAIL
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Point, typename Box, std::size_t DimensionCount>
+struct disjoint<Point, Box, DimensionCount, point_tag, box_tag, false>
+ : detail::disjoint::point_box<Point, Box, 0, DimensionCount>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/point_geometry.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/point_geometry.hpp
new file mode 100644
index 0000000000..a58bff41da
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/point_geometry.hpp
@@ -0,0 +1,111 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_GEOMETRY_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_GEOMETRY_HPP
+
+#include <boost/geometry/geometries/segment.hpp>
+
+#include <boost/geometry/algorithms/covered_by.hpp>
+
+#include <boost/geometry/algorithms/detail/disjoint/linear_linear.hpp>
+
+#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+
+template<typename Point, typename Geometry>
+struct disjoint_point_linear
+{
+ static inline
+ bool apply(Point const& pt, Geometry const& g)
+ {
+ return !geometry::covered_by(pt, g);
+ }
+};
+
+
+template <typename Geometry1, typename Geometry2>
+struct reverse_covered_by
+{
+ static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
+ {
+ return !geometry::covered_by(geometry1, geometry2);
+ }
+};
+
+
+}} // namespace detail::disjoint
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template<typename Point, typename Linear, std::size_t DimensionCount>
+struct disjoint<Point, Linear, DimensionCount, point_tag, linear_tag, false>
+ : public detail::disjoint::disjoint_point_linear<Point, Linear>
+{};
+
+
+template <typename Point, typename Areal, std::size_t DimensionCount>
+struct disjoint<Point, Areal, DimensionCount, point_tag, areal_tag, false>
+ : detail::disjoint::reverse_covered_by<Point, Areal>
+{};
+
+
+template<typename Point, typename Segment, std::size_t DimensionCount>
+struct disjoint<Point, Segment, DimensionCount, point_tag, segment_tag, false>
+{
+ static inline bool apply(Point const& point, Segment const& segment)
+ {
+ typedef geometry::model::referring_segment<Point const> other_segment;
+
+ other_segment other(point, point);
+ return detail::disjoint::disjoint_segment
+ <
+ Segment, other_segment
+ >::apply(segment, other);
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_GEOMETRY_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/point_point.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/point_point.hpp
new file mode 100644
index 0000000000..b1d32bf95e
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/point_point.hpp
@@ -0,0 +1,112 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_POINT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_POINT_HPP
+
+#include <cstddef>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/util/math.hpp>
+
+#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+template
+<
+ typename Point1, typename Point2,
+ std::size_t Dimension, std::size_t DimensionCount
+>
+struct point_point
+{
+ static inline bool apply(Point1 const& p1, Point2 const& p2)
+ {
+ if (! geometry::math::equals(get<Dimension>(p1), get<Dimension>(p2)))
+ {
+ return true;
+ }
+ return point_point
+ <
+ Point1, Point2,
+ Dimension + 1, DimensionCount
+ >::apply(p1, p2);
+ }
+};
+
+
+template <typename Point1, typename Point2, std::size_t DimensionCount>
+struct point_point<Point1, Point2, DimensionCount, DimensionCount>
+{
+ static inline bool apply(Point1 const& , Point2 const& )
+ {
+ return false;
+ }
+};
+
+
+/*!
+ \brief Internal utility function to detect of points are disjoint
+ \note To avoid circular references
+ */
+template <typename Point1, typename Point2>
+inline bool disjoint_point_point(Point1 const& point1, Point2 const& point2)
+{
+ return point_point
+ <
+ Point1, Point2,
+ 0, dimension<Point1>::type::value
+ >::apply(point1, point2);
+}
+
+
+}} // namespace detail::disjoint
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Point1, typename Point2, std::size_t DimensionCount>
+struct disjoint<Point1, Point2, DimensionCount, point_tag, point_tag, false>
+ : detail::disjoint::point_point<Point1, Point2, 0, DimensionCount>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_POINT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint/segment_box.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint/segment_box.hpp
new file mode 100644
index 0000000000..5368432ed4
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/disjoint/segment_box.hpp
@@ -0,0 +1,291 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_SEGMENT_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_SEGMENT_BOX_HPP
+
+#include <cstddef>
+#include <utility>
+
+#include <boost/numeric/conversion/cast.hpp>
+
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/calculation_type.hpp>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
+
+#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+
+template <std::size_t I>
+struct compute_tmin_tmax_per_dim
+{
+ template <typename SegmentPoint, typename Box, typename RelativeDistance>
+ static inline void apply(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ Box const& box,
+ RelativeDistance& ti_min,
+ RelativeDistance& ti_max,
+ RelativeDistance& diff)
+ {
+ typedef typename coordinate_type<Box>::type box_coordinate_type;
+ typedef typename coordinate_type
+ <
+ SegmentPoint
+ >::type point_coordinate_type;
+
+ RelativeDistance c_p0 = boost::numeric_cast
+ <
+ point_coordinate_type
+ >( geometry::get<I>(p0) );
+
+ RelativeDistance c_p1 = boost::numeric_cast
+ <
+ point_coordinate_type
+ >( geometry::get<I>(p1) );
+
+ RelativeDistance c_b_min = boost::numeric_cast
+ <
+ box_coordinate_type
+ >( geometry::get<geometry::min_corner, I>(box) );
+
+ RelativeDistance c_b_max = boost::numeric_cast
+ <
+ box_coordinate_type
+ >( geometry::get<geometry::max_corner, I>(box) );
+
+ if ( geometry::get<I>(p1) >= geometry::get<I>(p0) )
+ {
+ diff = c_p1 - c_p0;
+ ti_min = c_b_min - c_p0;
+ ti_max = c_b_max - c_p0;
+ }
+ else
+ {
+ diff = c_p0 - c_p1;
+ ti_min = c_p0 - c_b_max;
+ ti_max = c_p0 - c_b_min;
+ }
+ }
+};
+
+
+template
+<
+ typename RelativeDistance,
+ typename SegmentPoint,
+ typename Box,
+ std::size_t I,
+ std::size_t Dimension
+>
+struct disjoint_segment_box_impl
+{
+ template <typename RelativeDistancePair>
+ static inline bool apply(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ Box const& box,
+ RelativeDistancePair& t_min,
+ RelativeDistancePair& t_max)
+ {
+ RelativeDistance ti_min, ti_max, diff;
+
+ compute_tmin_tmax_per_dim<I>::apply(p0, p1, box, ti_min, ti_max, diff);
+
+ if ( geometry::math::equals(diff, 0) )
+ {
+ if ( (geometry::math::equals(t_min.second, 0)
+ && t_min.first > ti_max)
+ ||
+ (geometry::math::equals(t_max.second, 0)
+ && t_max.first < ti_min) )
+ {
+ return true;
+ }
+ }
+
+ RelativeDistance t_min_x_diff = t_min.first * diff;
+ RelativeDistance t_max_x_diff = t_max.first * diff;
+
+ if ( t_min_x_diff > ti_max * t_min.second
+ || t_max_x_diff < ti_min * t_max.second )
+ {
+ return true;
+ }
+
+ if ( ti_min * t_min.second > t_min_x_diff )
+ {
+ t_min.first = ti_min;
+ t_min.second = diff;
+ }
+ if ( ti_max * t_max.second < t_max_x_diff )
+ {
+ t_max.first = ti_max;
+ t_max.second = diff;
+ }
+
+ if ( t_min.first > t_min.second || t_max.first < 0 )
+ {
+ return true;
+ }
+
+ return disjoint_segment_box_impl
+ <
+ RelativeDistance,
+ SegmentPoint,
+ Box,
+ I + 1,
+ Dimension
+ >::apply(p0, p1, box, t_min, t_max);
+ }
+};
+
+
+template
+<
+ typename RelativeDistance,
+ typename SegmentPoint,
+ typename Box,
+ std::size_t Dimension
+>
+struct disjoint_segment_box_impl
+ <
+ RelativeDistance, SegmentPoint, Box, 0, Dimension
+ >
+{
+ static inline bool apply(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ Box const& box)
+ {
+ std::pair<RelativeDistance, RelativeDistance> t_min, t_max;
+ RelativeDistance diff;
+
+ compute_tmin_tmax_per_dim<0>::apply(p0, p1, box,
+ t_min.first, t_max.first, diff);
+
+ if ( geometry::math::equals(diff, 0) )
+ {
+ if ( geometry::math::equals(t_min.first, 0) ) { t_min.first = -1; }
+ if ( geometry::math::equals(t_max.first, 0) ) { t_max.first = 1; }
+ }
+
+ if ( t_min.first > diff || t_max.first < 0 )
+ {
+ return true;
+ }
+
+ t_min.second = t_max.second = diff;
+
+ return disjoint_segment_box_impl
+ <
+ RelativeDistance, SegmentPoint, Box, 1, Dimension
+ >::apply(p0, p1, box, t_min, t_max);
+ }
+};
+
+
+template
+<
+ typename RelativeDistance,
+ typename SegmentPoint,
+ typename Box,
+ std::size_t Dimension
+>
+struct disjoint_segment_box_impl
+ <
+ RelativeDistance, SegmentPoint, Box, Dimension, Dimension
+ >
+{
+ template <typename RelativeDistancePair>
+ static inline bool apply(SegmentPoint const&, SegmentPoint const&,
+ Box const&,
+ RelativeDistancePair&, RelativeDistancePair&)
+ {
+ return false;
+ }
+};
+
+
+//=========================================================================
+
+
+template <typename Segment, typename Box>
+struct disjoint_segment_box
+{
+ static inline bool apply(Segment const& segment, Box const& box)
+ {
+ assert_dimension_equal<Segment, Box>();
+
+ typedef typename util::calculation_type::geometric::binary
+ <
+ Segment, Box, void
+ >::type relative_distance_type;
+
+ typedef typename point_type<Segment>::type segment_point_type;
+ segment_point_type p0, p1;
+ geometry::detail::assign_point_from_index<0>(segment, p0);
+ geometry::detail::assign_point_from_index<1>(segment, p1);
+
+ return disjoint_segment_box_impl
+ <
+ relative_distance_type, segment_point_type, Box,
+ 0, dimension<Box>::value
+ >::apply(p0, p1, box);
+ }
+};
+
+
+}} // namespace detail::disjoint
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Segment, typename Box, std::size_t DimensionCount>
+struct disjoint<Segment, Box, DimensionCount, segment_tag, box_tag, false>
+ : detail::disjoint::disjoint_segment_box<Segment, Box>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_SEGMENT_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/backward_compatibility.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/backward_compatibility.hpp
new file mode 100644
index 0000000000..363439d20c
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/backward_compatibility.hpp
@@ -0,0 +1,345 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BACKWARD_COMPATIBILITY_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BACKWARD_COMPATIBILITY_HPP
+
+#include <utility>
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
+#include <boost/geometry/algorithms/detail/distance/point_to_geometry.hpp>
+#include <boost/geometry/algorithms/detail/distance/single_to_multi.hpp>
+#include <boost/geometry/algorithms/detail/distance/multi_to_multi.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+template<typename Point, typename Segment, typename Strategy>
+struct point_to_segment
+{
+ static inline typename strategy::distance::services::return_type
+ <
+ Strategy,
+ Point,
+ typename point_type<Segment>::type
+ >::type
+ apply(Point const& point, Segment const& segment, Strategy const& )
+ {
+ typename detail::distance::default_ps_strategy
+ <
+ Point,
+ typename point_type<Segment>::type,
+ Strategy
+ >::type segment_strategy;
+
+ typename point_type<Segment>::type p[2];
+ geometry::detail::assign_point_from_index<0>(segment, p[0]);
+ geometry::detail::assign_point_from_index<1>(segment, p[1]);
+ return segment_strategy.apply(point, p[0], p[1]);
+ }
+};
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// Point-segment version 1, with point-point strategy
+template <typename Point, typename Segment, typename Strategy>
+struct distance
+<
+ Point, Segment, Strategy,
+ point_tag, segment_tag, strategy_tag_distance_point_point,
+ false
+> : detail::distance::point_to_segment<Point, Segment, Strategy>
+{};
+
+
+// Point-line version 1, where point-point strategy is specified
+template <typename Point, typename Linestring, typename Strategy>
+struct distance
+<
+ Point, Linestring, Strategy,
+ point_tag, linestring_tag, strategy_tag_distance_point_point,
+ false
+>
+{
+
+ static inline typename return_type<Strategy, Point, typename point_type<Linestring>::type>::type
+ apply(Point const& point,
+ Linestring const& linestring,
+ Strategy const&)
+ {
+ typedef typename detail::distance::default_ps_strategy
+ <
+ Point,
+ typename point_type<Linestring>::type,
+ Strategy
+ >::type ps_strategy_type;
+
+ return detail::distance::point_to_range
+ <
+ Point, Linestring, closed, ps_strategy_type
+ >::apply(point, linestring, ps_strategy_type());
+ }
+};
+
+
+// Point-ring , where point-point strategy is specified
+template <typename Point, typename Ring, typename Strategy>
+struct distance
+<
+ Point, Ring, Strategy,
+ point_tag, ring_tag, strategy_tag_distance_point_point,
+ false
+>
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy, Point, typename point_type<Ring>::type
+ >::type return_type;
+
+ static inline return_type apply(Point const& point,
+ Ring const& ring,
+ Strategy const&)
+ {
+ typedef typename detail::distance::default_ps_strategy
+ <
+ Point,
+ typename point_type<Ring>::type,
+ Strategy
+ >::type ps_strategy_type;
+
+ std::pair<return_type, bool>
+ dc = detail::distance::point_to_ring
+ <
+ Point, Ring,
+ geometry::closure<Ring>::value,
+ ps_strategy_type
+ >::apply(point, ring, ps_strategy_type());
+
+ return dc.second ? return_type(0) : dc.first;
+ }
+};
+
+
+// Point-polygon , where point-point strategy is specified
+template <typename Point, typename Polygon, typename Strategy>
+struct distance
+<
+ Point, Polygon, Strategy,
+ point_tag, polygon_tag, strategy_tag_distance_point_point,
+ false
+>
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy, Point, typename point_type<Polygon>::type
+ >::type return_type;
+
+ static inline return_type apply(Point const& point,
+ Polygon const& polygon,
+ Strategy const&)
+ {
+ typedef typename detail::distance::default_ps_strategy
+ <
+ Point,
+ typename point_type<Polygon>::type,
+ Strategy
+ >::type ps_strategy_type;
+
+ std::pair<return_type, bool>
+ dc = detail::distance::point_to_polygon
+ <
+ Point, Polygon,
+ geometry::closure<Polygon>::value,
+ ps_strategy_type
+ >::apply(point, polygon, ps_strategy_type());
+
+ return dc.second ? return_type(0) : dc.first;
+ }
+};
+
+
+
+
+namespace splitted_dispatch
+{
+
+
+template
+<
+ typename Point,
+ typename MultiGeometry,
+ typename MultiGeometryTag,
+ typename Strategy
+>
+struct distance_single_to_multi
+ <
+ Point, MultiGeometry, Strategy,
+ point_tag, MultiGeometryTag,
+ strategy_tag_distance_point_point
+ >
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy, Point, typename point_type<MultiGeometry>::type
+ >::type return_type;
+
+ static inline return_type apply(Point const& point,
+ MultiGeometry const& multigeometry,
+ Strategy const&)
+ {
+ typedef typename detail::distance::default_ps_strategy
+ <
+ Point,
+ typename point_type<MultiGeometry>::type,
+ Strategy
+ >::type ps_strategy_type;
+
+ return distance_single_to_multi
+ <
+ Point, MultiGeometry, ps_strategy_type,
+ point_tag, MultiGeometryTag,
+ strategy_tag_distance_point_segment
+ >::apply(point, multigeometry, ps_strategy_type());
+ }
+};
+
+
+template
+<
+ typename Geometry,
+ typename MultiPoint,
+ typename GeometryTag,
+ typename Strategy
+>
+struct distance_single_to_multi
+ <
+ Geometry, MultiPoint, Strategy,
+ GeometryTag, multi_point_tag,
+ strategy_tag_distance_point_point
+ >
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<MultiPoint>::type,
+ typename point_type<Geometry>::type
+ >::type return_type;
+
+ static inline return_type apply(Geometry const& geometry,
+ MultiPoint const& multipoint,
+ Strategy const&)
+ {
+ typedef typename detail::distance::default_ps_strategy
+ <
+ typename point_type<MultiPoint>::type,
+ typename point_type<Geometry>::type,
+ Strategy
+ >::type ps_strategy_type;
+
+ return distance_single_to_multi
+ <
+ Geometry, MultiPoint, ps_strategy_type,
+ GeometryTag, multi_point_tag,
+ strategy_tag_distance_point_segment
+ >::apply(geometry, multipoint, ps_strategy_type());
+ }
+};
+
+
+template
+<
+ typename MultiPoint,
+ typename MultiGeometry,
+ typename MultiGeometryTag,
+ typename Strategy
+>
+struct distance_multi_to_multi
+ <
+ MultiPoint, MultiGeometry, Strategy,
+ multi_point_tag, MultiGeometryTag,
+ strategy_tag_distance_point_point
+ >
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<MultiPoint>::type,
+ typename point_type<MultiGeometry>::type
+ >::type return_type;
+
+ static inline return_type apply(MultiPoint const& multipoint,
+ MultiGeometry const& multigeometry,
+ Strategy const&)
+ {
+ typedef typename detail::distance::default_ps_strategy
+ <
+ typename point_type<MultiPoint>::type,
+ typename point_type<MultiGeometry>::type,
+ Strategy
+ >::type ps_strategy_type;
+
+ return distance_multi_to_multi
+ <
+ MultiPoint, MultiGeometry, ps_strategy_type,
+ multi_point_tag, MultiGeometryTag,
+ strategy_tag_distance_point_segment
+ >::apply(multipoint, multigeometry, ps_strategy_type());
+ }
+};
+
+
+} // namespace splitted_dispatch
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BACKWARD_COMPATIBILITY_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/box_to_box.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/box_to_box.hpp
new file mode 100644
index 0000000000..57c908d38f
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/box_to_box.hpp
@@ -0,0 +1,58 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BOX_TO_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BOX_TO_BOX_HPP
+
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Box1, typename Box2, typename Strategy>
+struct distance
+ <
+ Box1, Box2, Strategy, box_tag, box_tag,
+ strategy_tag_distance_box_box, false
+ >
+{
+ static inline typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Box1>::type,
+ typename point_type<Box2>::type
+ >::type
+ apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy)
+ {
+ boost::ignore_unused_variable_warning(strategy);
+ return strategy.apply(box1, box2);
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BOX_TO_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/default_strategies.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/default_strategies.hpp
new file mode 100644
index 0000000000..3b79f82a36
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/default_strategies.hpp
@@ -0,0 +1,143 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_DEFAULT_STRATEGIES_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_DEFAULT_STRATEGIES_HPP
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/reverse_dispatch.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+
+// Helper metafunction for default strategy retrieval
+template
+<
+ typename Geometry1,
+ typename Geometry2 = Geometry1,
+ typename Tag1 = typename tag_cast
+ <
+ typename tag<Geometry1>::type, pointlike_tag
+ >::type,
+ typename Tag2 = typename tag_cast
+ <
+ typename tag<Geometry2>::type, pointlike_tag
+ >::type,
+ bool Reverse = geometry::reverse_dispatch<Geometry1, Geometry2>::type::value
+>
+struct default_strategy
+ : strategy::distance::services::default_strategy
+ <
+ point_tag, segment_tag,
+ typename point_type<Geometry1>::type,
+ typename point_type<Geometry2>::type
+ >
+{};
+
+template
+<
+ typename Geometry1,
+ typename Geometry2,
+ typename Tag1,
+ typename Tag2
+>
+struct default_strategy<Geometry1, Geometry2, Tag1, Tag2, true>
+ : default_strategy<Geometry2, Geometry1, Tag2, Tag1, false>
+{};
+
+
+template <typename Pointlike1, typename Pointlike2>
+struct default_strategy
+ <
+ Pointlike1, Pointlike2,
+ pointlike_tag, pointlike_tag, false
+ > : strategy::distance::services::default_strategy
+ <
+ point_tag, point_tag,
+ typename point_type<Pointlike1>::type,
+ typename point_type<Pointlike2>::type
+ >
+{};
+
+
+template <typename Pointlike, typename Box>
+struct default_strategy<Pointlike, Box, pointlike_tag, box_tag, false>
+ : strategy::distance::services::default_strategy
+ <
+ point_tag, box_tag,
+ typename point_type<Pointlike>::type,
+ typename point_type<Box>::type,
+ cartesian_tag,
+ cartesian_tag,
+ void
+ >
+{};
+
+
+template <typename Box1, typename Box2>
+struct default_strategy<Box1, Box2, box_tag, box_tag, false>
+ : strategy::distance::services::default_strategy
+ <
+ box_tag, box_tag,
+ typename point_type<Box1>::type,
+ typename point_type<Box2>::type,
+ cartesian_tag,
+ cartesian_tag,
+ void
+ >
+{};
+
+
+
+// Helper metafunction for default point-segment strategy retrieval
+template <typename Geometry1, typename Geometry2, typename Strategy>
+struct default_ps_strategy
+ : strategy::distance::services::default_strategy
+ <
+ point_tag, segment_tag,
+ typename point_type<Geometry1>::type,
+ typename point_type<Geometry2>::type,
+ typename cs_tag<typename point_type<Geometry1>::type>::type,
+ typename cs_tag<typename point_type<Geometry2>::type>::type,
+ Strategy
+ >
+{};
+
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_DEFAULT_STRATEGIES_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/geometry_to_geometry_rtree.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/geometry_to_geometry_rtree.hpp
new file mode 100644
index 0000000000..7ebb394665
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/geometry_to_geometry_rtree.hpp
@@ -0,0 +1,383 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_GEOMETRY_TO_GEOMETRY_RTREE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_GEOMETRY_TO_GEOMETRY_RTREE_HPP
+
+#include <cstddef>
+#include <algorithm>
+#include <iterator>
+
+#include <boost/assert.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/iterators/point_iterator.hpp>
+#include <boost/geometry/iterators/has_one_element.hpp>
+
+#include <boost/geometry/algorithms/for_each.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/distance_comparable_to_regular.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+
+template
+<
+ typename RTreePoint,
+ typename Geometry,
+ typename Strategy
+>
+class point_range_to_geometry_rtree
+{
+private:
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy,
+ RTreePoint,
+ typename point_type<Geometry>::type
+ >::type comparable_return_type;
+
+ typedef index::rtree<RTreePoint, index::linear<8> > r_tree;
+
+ // functor to evaluate minimum comparable distance
+ struct minimum_comparable_distance_evaluator
+ {
+ r_tree const& m_r_tree;
+ comparable_strategy const& m_cstrategy;
+ bool m_first;
+ comparable_return_type m_min_cd;
+
+ minimum_comparable_distance_evaluator
+ (r_tree const& r_tree, comparable_strategy const& cstrategy)
+ : m_r_tree(r_tree)
+ , m_cstrategy(cstrategy)
+ , m_first(true)
+ , m_min_cd()
+ {}
+
+ template <typename QueryGeometry>
+ inline void operator()(QueryGeometry const& query_geometry)
+ {
+ typename r_tree::value_type t_v;
+ std::size_t n =
+ m_r_tree.query(index::nearest(query_geometry, 1), &t_v);
+
+ BOOST_ASSERT( n > 0 );
+
+ comparable_return_type cd = dispatch::distance
+ <
+ typename r_tree::value_type,
+ QueryGeometry,
+ comparable_strategy
+ >::apply(t_v, query_geometry, m_cstrategy);
+
+ if ( m_first || cd < m_min_cd )
+ {
+ m_first = false;
+ m_min_cd = cd;
+ }
+ }
+ };
+
+
+
+ // class to choose between for_each_point and for_each_segment
+ template <typename G, typename Tag = typename tag<G>::type>
+ struct for_each_selector
+ {
+ typedef dispatch::for_each_segment<G> type;
+ };
+
+ template <typename MultiPoint>
+ struct for_each_selector<MultiPoint, multi_point_tag>
+ {
+ typedef dispatch::for_each_point<MultiPoint> type;
+ };
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ RTreePoint,
+ typename point_type<Geometry>::type
+ >::type return_type;
+
+ template <typename PointIterator>
+ static inline return_type apply(PointIterator points_first,
+ PointIterator points_beyond,
+ Geometry const& geometry,
+ Strategy const& strategy)
+ {
+ BOOST_ASSERT( points_first != points_beyond );
+
+ if ( geometry::has_one_element(points_first, points_beyond) )
+ {
+ return dispatch::distance
+ <
+ typename std::iterator_traits<PointIterator>::value_type,
+ Geometry,
+ Strategy
+ >::apply(*points_first, geometry, strategy);
+ }
+
+ // create -- packing algorithm
+ r_tree rt(points_first, points_beyond);
+
+ minimum_comparable_distance_evaluator
+ functor(rt,
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy));
+
+ for_each_selector<Geometry>::type::apply(geometry, functor);
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy, Strategy, RTreePoint, Geometry
+ >::apply(functor.m_min_cd);
+ }
+};
+
+
+
+template
+<
+ typename Geometry1,
+ typename Geometry2,
+ typename Strategy
+>
+class geometry_to_geometry_rtree
+{
+ // the following works with linear geometries seen as ranges of points
+ //
+ // we compute the r-tree for the points of one range and then,
+ // compute nearest points for the segments of the other,
+ // ... and ...
+ // vice versa.
+
+private:
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy,
+ typename point_type<Geometry1>::type,
+ typename point_type<Geometry2>::type
+ >::type comparable_return_type;
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Geometry1>::type,
+ typename point_type<Geometry2>::type
+ >::type return_type;
+
+ static inline return_type apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy,
+ bool check_intersection = true)
+ {
+ point_iterator<Geometry1 const> first1 = points_begin(geometry1);
+ point_iterator<Geometry1 const> beyond1 = points_end(geometry1);
+ point_iterator<Geometry2 const> first2 = points_begin(geometry2);
+ point_iterator<Geometry2 const> beyond2 = points_end(geometry2);
+
+ if ( geometry::has_one_element(first1, beyond1) )
+ {
+ return dispatch::distance
+ <
+ typename point_type<Geometry1>::type,
+ Geometry2,
+ Strategy
+ >::apply(*first1, geometry2, strategy);
+ }
+
+ if ( geometry::has_one_element(first2, beyond2) )
+ {
+ return dispatch::distance
+ <
+ typename point_type<Geometry2>::type,
+ Geometry1,
+ Strategy
+ >::apply(*first2, geometry1, strategy);
+ }
+
+ if ( check_intersection && geometry::intersects(geometry1, geometry2) )
+ {
+ return return_type(0);
+ }
+
+ comparable_strategy cstrategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+
+ comparable_return_type cdist1 = point_range_to_geometry_rtree
+ <
+ typename point_type<Geometry1>::type,
+ Geometry2,
+ comparable_strategy
+ >::apply(first1, beyond1, geometry2, cstrategy);
+
+ comparable_return_type cdist2 = point_range_to_geometry_rtree
+ <
+ typename point_type<Geometry2>::type,
+ Geometry1,
+ comparable_strategy
+ >::apply(first2, beyond2, geometry1, cstrategy);
+
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy, Strategy, Geometry1, Geometry2
+ >::apply( (std::min)(cdist1, cdist2) );
+ }
+};
+
+
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Linestring1, typename Linestring2, typename Strategy>
+struct distance
+ <
+ Linestring1, Linestring2, Strategy,
+ linestring_tag, linestring_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::geometry_to_geometry_rtree
+ <
+ Linestring1, Linestring2, Strategy
+ >
+{};
+
+
+
+template <typename Linestring, typename Polygon, typename Strategy>
+struct distance
+ <
+ Linestring, Polygon, Strategy,
+ linestring_tag, polygon_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::geometry_to_geometry_rtree
+ <
+ Linestring, Polygon, Strategy
+ >
+{};
+
+
+
+template <typename Linestring, typename Ring, typename Strategy>
+struct distance
+ <
+ Linestring, Ring, Strategy,
+ linestring_tag, ring_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::geometry_to_geometry_rtree
+ <
+ Linestring, Ring, Strategy
+ >
+{};
+
+
+
+template <typename Polygon1, typename Polygon2, typename Strategy>
+struct distance
+ <
+ Polygon1, Polygon2, Strategy,
+ polygon_tag, polygon_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::geometry_to_geometry_rtree
+ <
+ Polygon1, Polygon2, Strategy
+ >
+{};
+
+
+
+template <typename Polygon, typename Ring, typename Strategy>
+struct distance
+ <
+ Polygon, Ring, Strategy,
+ polygon_tag, ring_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::geometry_to_geometry_rtree
+ <
+ Polygon, Ring, Strategy
+ >
+{};
+
+
+
+template <typename Ring1, typename Ring2, typename Strategy>
+struct distance
+ <
+ Ring1, Ring2, Strategy,
+ ring_tag, ring_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::geometry_to_geometry_rtree
+ <
+ Ring1, Ring2, Strategy
+ >
+{};
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_GEOMETRY_TO_GEOMETRY_RTREE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/implementation.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/implementation.hpp
new file mode 100644
index 0000000000..45f40bbb33
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/implementation.hpp
@@ -0,0 +1,38 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_IMPLEMENTATION_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_IMPLEMENTATION_HPP
+
+// the implementation details
+#include <boost/geometry/algorithms/detail/distance/point_to_geometry.hpp>
+#include <boost/geometry/algorithms/detail/distance/range_to_segment_or_box.hpp>
+#include <boost/geometry/algorithms/detail/distance/segment_to_box.hpp>
+#include <boost/geometry/algorithms/detail/distance/polygon_to_segment_or_box.hpp>
+#include <boost/geometry/algorithms/detail/distance/box_to_box.hpp>
+#include <boost/geometry/algorithms/detail/distance/single_to_multi.hpp>
+#include <boost/geometry/algorithms/detail/distance/multi_to_multi.hpp>
+#include <boost/geometry/algorithms/detail/distance/multipoint_to_range.hpp>
+#include <boost/geometry/algorithms/detail/distance/geometry_to_geometry_rtree.hpp>
+#include <boost/geometry/algorithms/detail/distance/segment_to_segment.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/backward_compatibility.hpp>
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_IMPLEMENTATION_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/interface.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/interface.hpp
new file mode 100644
index 0000000000..9b377f524b
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/interface.hpp
@@ -0,0 +1,403 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_INTERFACE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_INTERFACE_HPP
+
+#include <boost/concept_check.hpp>
+
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/strategies/default_strategy.hpp>
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/default_distance_result.hpp>
+#include <boost/geometry/strategies/distance_result.hpp>
+
+#include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
+#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// If reversal is needed, perform it
+template
+<
+ typename Geometry1, typename Geometry2, typename Strategy,
+ typename Tag1, typename Tag2, typename StrategyTag
+>
+struct distance
+<
+ Geometry1, Geometry2, Strategy,
+ Tag1, Tag2, StrategyTag,
+ true
+>
+ : distance<Geometry2, Geometry1, Strategy, Tag2, Tag1, StrategyTag, false>
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Geometry2>::type,
+ typename point_type<Geometry1>::type
+ >::type return_type;
+
+ static inline return_type apply(
+ Geometry1 const& g1,
+ Geometry2 const& g2,
+ Strategy const& strategy)
+ {
+ return distance
+ <
+ Geometry2, Geometry1, Strategy,
+ Tag2, Tag1, StrategyTag,
+ false
+ >::apply(g2, g1, strategy);
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_strategy
+{
+
+struct distance
+{
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline typename distance_result<Geometry1, Geometry2, Strategy>::type
+ apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
+ {
+ return dispatch::distance
+ <
+ Geometry1, Geometry2, Strategy
+ >::apply(geometry1, geometry2, strategy);
+ }
+
+ template <typename Geometry1, typename Geometry2>
+ static inline
+ typename distance_result<Geometry1, Geometry2, default_strategy>::type
+ apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ default_strategy)
+ {
+ typedef typename detail::distance::default_strategy
+ <
+ Geometry1, Geometry2
+ >::type strategy_type;
+
+ return dispatch::distance
+ <
+ Geometry1, Geometry2, strategy_type
+ >::apply(geometry1, geometry2, strategy_type());
+ }
+};
+
+} // namespace resolve_strategy
+
+
+namespace resolve_variant
+{
+
+
+template <typename Geometry1, typename Geometry2>
+struct distance
+{
+ template <typename Strategy>
+ static inline typename distance_result<Geometry1, Geometry2, Strategy>::type
+ apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
+ {
+ return
+ resolve_strategy::distance::apply(geometry1, geometry2, strategy);
+ }
+};
+
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct distance<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ template <typename Strategy>
+ struct visitor: static_visitor
+ <
+ typename distance_result
+ <
+ variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Geometry2,
+ Strategy
+ >::type
+ >
+ {
+ Geometry2 const& m_geometry2;
+ Strategy const& m_strategy;
+
+ visitor(Geometry2 const& geometry2,
+ Strategy const& strategy)
+ : m_geometry2(geometry2),
+ m_strategy(strategy)
+ {}
+
+ template <typename Geometry1>
+ typename distance_result<Geometry1, Geometry2, Strategy>::type
+ operator()(Geometry1 const& geometry1) const
+ {
+ return distance
+ <
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ Strategy
+ >(geometry1, m_geometry2, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline typename distance_result
+ <
+ variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Geometry2,
+ Strategy
+ >::type
+ apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
+ {
+ return apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
+ }
+};
+
+
+template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct distance<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename Strategy>
+ struct visitor: static_visitor
+ <
+ typename distance_result
+ <
+ Geometry1,
+ variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Strategy
+ >::type
+ >
+ {
+ Geometry1 const& m_geometry1;
+ Strategy const& m_strategy;
+
+ visitor(Geometry1 const& geometry1,
+ Strategy const& strategy)
+ : m_geometry1(geometry1),
+ m_strategy(strategy)
+ {}
+
+ template <typename Geometry2>
+ typename distance_result<Geometry1, Geometry2, Strategy>::type
+ operator()(Geometry2 const& geometry2) const
+ {
+ return distance
+ <
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ Strategy
+ >(m_geometry1, geometry2, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline typename distance_result
+ <
+ Geometry1,
+ variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Strategy
+ >::type
+ apply(
+ Geometry1 const& geometry1,
+ const variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry2,
+ Strategy const& strategy)
+ {
+ return apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
+ }
+};
+
+
+template
+<
+ BOOST_VARIANT_ENUM_PARAMS(typename A),
+ BOOST_VARIANT_ENUM_PARAMS(typename B)
+>
+struct distance
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(A)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(B)>
+ >
+{
+ template <typename Strategy>
+ struct visitor: static_visitor
+ <
+ typename distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(A)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(B)>,
+ Strategy
+ >::type
+ >
+ {
+ Strategy const& m_strategy;
+
+ visitor(Strategy const& strategy)
+ : m_strategy(strategy)
+ {}
+
+ template <typename Geometry1, typename Geometry2>
+ typename distance_result<Geometry1, Geometry2, Strategy>::type
+ operator()(Geometry1 const& geometry1, Geometry2 const& geometry2) const
+ {
+ return distance
+ <
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ Strategy
+ >(geometry1, geometry2, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline typename distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(A)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(B)>,
+ Strategy
+ >::type
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(A)> const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(B)> const& geometry2,
+ Strategy const& strategy)
+ {
+ return apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
+ }
+};
+
+} // namespace resolve_variant
+
+
+/*!
+\brief \brief_calc2{distance} \brief_strategy
+\ingroup distance
+\details
+\details \details_calc{area}. \brief_strategy. \details_strategy_reasons
+
+\tparam Geometry1 \tparam_geometry
+\tparam Geometry2 \tparam_geometry
+\tparam Strategy \tparam_strategy{Distance}
+\param geometry1 \param_geometry
+\param geometry2 \param_geometry
+\param strategy \param_strategy{distance}
+\return \return_calc{distance}
+\note The strategy can be a point-point strategy. In case of distance point-line/point-polygon
+ it may also be a point-segment strategy.
+
+\qbk{distinguish,with strategy}
+
+\qbk{
+[heading Available Strategies]
+\* [link geometry.reference.strategies.strategy_distance_pythagoras Pythagoras (cartesian)]
+\* [link geometry.reference.strategies.strategy_distance_haversine Haversine (spherical)]
+\* [link geometry.reference.strategies.strategy_distance_cross_track Cross track (spherical\, point-to-segment)]
+\* [link geometry.reference.strategies.strategy_distance_projected_point Projected point (cartesian\, point-to-segment)]
+\* more (currently extensions): Vincenty\, Andoyer (geographic)
+}
+ */
+
+/*
+Note, in case of a Compilation Error:
+if you get:
+ - "Failed to specialize function template ..."
+ - "error: no matching function for call to ..."
+for distance, it is probably so that there is no specialization
+for return_type<...> for your strategy.
+*/
+template <typename Geometry1, typename Geometry2, typename Strategy>
+inline typename distance_result<Geometry1, Geometry2, Strategy>::type
+distance(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
+{
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2 const>();
+
+ detail::throw_on_empty_input(geometry1);
+ detail::throw_on_empty_input(geometry2);
+
+ return resolve_variant::distance
+ <
+ Geometry1,
+ Geometry2
+ >::apply(geometry1, geometry2, strategy);
+}
+
+
+/*!
+\brief \brief_calc2{distance}
+\ingroup distance
+\details The default strategy is used, corresponding to the coordinate system of the geometries
+\tparam Geometry1 \tparam_geometry
+\tparam Geometry2 \tparam_geometry
+\param geometry1 \param_geometry
+\param geometry2 \param_geometry
+\return \return_calc{distance}
+
+\qbk{[include reference/algorithms/distance.qbk]}
+ */
+template <typename Geometry1, typename Geometry2>
+inline typename default_distance_result<Geometry1, Geometry2>::type
+distance(Geometry1 const& geometry1,
+ Geometry2 const& geometry2)
+{
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2 const>();
+
+ return distance(geometry1, geometry2, default_strategy());
+}
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_INTERFACE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/multi_to_multi.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/multi_to_multi.hpp
new file mode 100644
index 0000000000..0d541cc3af
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/multi_to_multi.hpp
@@ -0,0 +1,256 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_MULTI_TO_MULTI_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_MULTI_TO_MULTI_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/distance_comparable_to_regular.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+
+#include <boost/geometry/util/math.hpp>
+
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/single_to_multi.hpp>
+#include <boost/geometry/algorithms/detail/distance/geometry_to_geometry_rtree.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+
+template <typename Multi1, typename Multi2, typename Strategy>
+class distance_multi_to_multi_generic
+{
+private:
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy,
+ typename point_type<Multi1>::type,
+ typename point_type<Multi2>::type
+ >::type comparable_return_type;
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Multi1>::type,
+ typename point_type<Multi2>::type
+ >::type return_type;
+
+ static inline return_type apply(Multi1 const& multi1,
+ Multi2 const& multi2, Strategy const& strategy)
+ {
+ comparable_return_type min_cdist = comparable_return_type();
+ bool first = true;
+
+ comparable_strategy cstrategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+
+ for(typename range_iterator<Multi1 const>::type it = boost::begin(multi1);
+ it != boost::end(multi1);
+ ++it, first = false)
+ {
+ comparable_return_type cdist =
+ dispatch::splitted_dispatch::distance_single_to_multi
+ <
+ typename range_value<Multi1>::type,
+ Multi2,
+ comparable_strategy,
+ typename tag<typename range_value<Multi1>::type>::type,
+ typename tag<Multi2>::type,
+ typename strategy::distance::services::tag
+ <
+ comparable_strategy
+ >::type
+ >::apply(*it, multi2, cstrategy);
+ if (first || cdist < min_cdist)
+ {
+ min_cdist = cdist;
+ if ( geometry::math::equals(min_cdist, 0) )
+ {
+ break;
+ }
+ }
+ }
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy,
+ Strategy,
+ Multi1,
+ Multi2
+ >::apply(min_cdist);
+ }
+};
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+namespace splitted_dispatch
+{
+
+
+template
+<
+ typename MultiGeometry1,
+ typename MultiGeometry2,
+ typename Strategy,
+ typename Tag1,
+ typename Tag2,
+ typename StrategyTag
+>
+struct distance_multi_to_multi
+ : not_implemented<MultiGeometry1, MultiGeometry2>
+{};
+
+
+
+template
+<
+ typename MultiPoint,
+ typename MultiPolygon,
+ typename Strategy
+>
+struct distance_multi_to_multi
+ <
+ MultiPoint, MultiPolygon, Strategy,
+ multi_point_tag, multi_polygon_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_multi_to_multi_generic
+ <
+ MultiPoint, MultiPolygon, Strategy
+ >
+{};
+
+
+
+template
+<
+ typename MultiLinestring1,
+ typename MultiLinestring2,
+ typename Strategy
+>
+struct distance_multi_to_multi
+ <
+ MultiLinestring1, MultiLinestring2, Strategy,
+ multi_linestring_tag, multi_linestring_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ MultiLinestring1, MultiLinestring2, Strategy
+ >
+{};
+
+
+template
+<
+ typename MultiLinestring,
+ typename MultiPolygon,
+ typename Strategy
+>
+struct distance_multi_to_multi
+ <
+ MultiLinestring, MultiPolygon, Strategy,
+ multi_linestring_tag, multi_polygon_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ MultiLinestring, MultiPolygon, Strategy
+ >
+{};
+
+
+template <typename MultiPolygon1, typename MultiPolygon2, typename Strategy>
+struct distance_multi_to_multi
+ <
+ MultiPolygon1, MultiPolygon2, Strategy,
+ multi_polygon_tag, multi_polygon_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ MultiPolygon1, MultiPolygon2, Strategy
+ >
+{};
+
+
+} // namespace splitted_dispatch
+
+
+
+
+template
+<
+ typename MultiGeometry1,
+ typename MultiGeometry2,
+ typename Strategy,
+ typename StrategyTag
+>
+struct distance
+ <
+ MultiGeometry1, MultiGeometry2, Strategy, multi_tag, multi_tag,
+ StrategyTag, false
+ > : splitted_dispatch::distance_multi_to_multi
+ <
+ MultiGeometry1, MultiGeometry2, Strategy,
+ typename geometry::tag<MultiGeometry1>::type,
+ typename geometry::tag<MultiGeometry2>::type,
+ StrategyTag
+ >
+{};
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_MULTI_TO_MULTI_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/multipoint_to_range.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/multipoint_to_range.hpp
new file mode 100644
index 0000000000..1774fab72e
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/multipoint_to_range.hpp
@@ -0,0 +1,183 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_MULTIPOINT_TO_RANGE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_MULTIPOINT_TO_RANGE_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/single_to_multi.hpp>
+#include <boost/geometry/algorithms/detail/distance/multi_to_multi.hpp>
+#include <boost/geometry/algorithms/detail/distance/geometry_to_geometry_rtree.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/iterators/point_iterator.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+template <typename MultiPoint1, typename MultiPoint2, typename Strategy>
+struct multipoint_to_multipoint
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<MultiPoint1>::type,
+ typename point_type<MultiPoint2>::type
+ >::type return_type;
+
+ static inline return_type apply(MultiPoint1 const& multipoint1,
+ MultiPoint2 const& multipoint2,
+ Strategy const& strategy)
+ {
+ if ( boost::size(multipoint1) > boost::size(multipoint2) )
+
+ {
+ return multipoint_to_multipoint
+ <
+ MultiPoint2, MultiPoint1, Strategy
+ >::apply(multipoint2, multipoint1, strategy);
+ }
+
+ return point_range_to_geometry_rtree
+ <
+ typename point_type<MultiPoint1>::type,
+ MultiPoint2,
+ Strategy
+ >::apply(points_begin(multipoint1), points_end(multipoint1),
+ multipoint2, strategy);
+ }
+};
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+namespace splitted_dispatch
+{
+
+// specializations of distance_single_to_multi for various geometry combinations
+
+template<typename Linestring, typename MultiPoint, typename Strategy>
+struct distance_single_to_multi
+ <
+ Linestring, MultiPoint, Strategy,
+ linestring_tag, multi_point_tag,
+ strategy_tag_distance_point_segment
+ >
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Linestring>::type,
+ typename point_type<MultiPoint>::type
+ >::type return_type;
+
+ static inline return_type apply(Linestring const& linestring,
+ MultiPoint const& multipoint,
+ Strategy const& strategy)
+ {
+ return detail::distance::point_range_to_geometry_rtree
+ <
+ typename point_type<MultiPoint>::type,
+ Linestring,
+ Strategy
+ >::apply(geometry::points_begin(multipoint),
+ geometry::points_end(multipoint),
+ linestring, strategy);
+
+ }
+};
+
+
+
+
+// specializations of distance_multi_to_multi for various geometry combinations
+
+
+template <typename MultiPoint1, typename MultiPoint2, typename Strategy>
+struct distance_multi_to_multi
+ <
+ MultiPoint1, MultiPoint2, Strategy,
+ multi_point_tag, multi_point_tag,
+ strategy_tag_distance_point_point
+ > : detail::distance::multipoint_to_multipoint
+ <
+ MultiPoint1, MultiPoint2, Strategy
+ >
+{};
+
+
+
+template
+<
+ typename MultiPoint,
+ typename MultiLinestring,
+ typename Strategy
+>
+struct distance_multi_to_multi
+ <
+ MultiPoint, MultiLinestring, Strategy,
+ multi_point_tag, multi_linestring_tag,
+ strategy_tag_distance_point_segment
+ >
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<MultiPoint>::type,
+ typename point_type<MultiLinestring>::type
+ >::type return_type;
+
+ static inline return_type apply(MultiPoint const& multipoint,
+ MultiLinestring const& multilinestring,
+ Strategy const& strategy)
+ {
+ return detail::distance::point_range_to_geometry_rtree
+ <
+ typename point_type<MultiPoint>::type,
+ MultiLinestring,
+ Strategy
+ >::apply(geometry::points_begin(multipoint),
+ geometry::points_end(multipoint),
+ multilinestring, strategy);
+
+ }
+};
+
+} // namespace splitted_dispatch
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_ALTERNATE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp
new file mode 100644
index 0000000000..a46f1fe7d1
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp
@@ -0,0 +1,442 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_POINT_TO_GEOMETRY_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_POINT_TO_GEOMETRY_HPP
+
+#include <utility>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/interior_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/util/math.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+#include <boost/geometry/strategies/distance_comparable_to_regular.hpp>
+
+#include <boost/geometry/views/closeable_view.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+template <typename P1, typename P2, typename Strategy>
+struct point_to_point
+{
+ static inline
+ typename strategy::distance::services::return_type<Strategy, P1, P2>::type
+ apply(P1 const& p1, P2 const& p2, Strategy const& strategy)
+ {
+ boost::ignore_unused_variable_warning(strategy);
+ return strategy.apply(p1, p2);
+ }
+};
+
+
+template
+<
+ typename Point,
+ typename Range,
+ closure_selector Closure,
+ typename Strategy
+>
+class point_to_range
+{
+private:
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy,
+ Point,
+ typename boost::range_value<Range>::type
+ >::type comparable_return_type;
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ Point,
+ typename boost::range_value<Range>::type
+ >::type return_type;
+
+ static inline return_type apply(Point const& point, Range const& range,
+ Strategy const& strategy)
+ {
+ comparable_strategy c_strategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+
+ comparable_return_type const zero = comparable_return_type(0);
+
+ if (boost::size(range) == 0)
+ {
+ return zero;
+ }
+
+ typedef typename closeable_view<Range const, Closure>::type view_type;
+
+ view_type view(range);
+
+ // line of one point: return point distance
+ typedef typename boost::range_iterator<view_type const>::type iterator_type;
+ iterator_type it = boost::begin(view);
+ iterator_type prev = it++;
+ if (it == boost::end(view))
+ {
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy, Strategy, Point,
+ typename boost::range_value<Range>::type
+ >::apply( c_strategy.apply(point,
+ *boost::begin(view),
+ *boost::begin(view)) );
+ }
+
+ // start with first segment distance
+ comparable_return_type cd = c_strategy.apply(point, *prev, *it);
+
+ // check if other segments are closer
+ for (++prev, ++it; it != boost::end(view); ++prev, ++it)
+ {
+ comparable_return_type cds = c_strategy.apply(point, *prev, *it);
+ if (geometry::math::equals(cds, zero))
+ {
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy,
+ Strategy,
+ Point,
+ typename boost::range_value<Range>::type
+ >::apply(zero);
+ }
+ else if (cds < cd)
+ {
+ cd = cds;
+ }
+ }
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy,
+ Strategy,
+ Point,
+ typename boost::range_value<Range>::type
+ >::apply(cd);
+ }
+};
+
+
+template
+<
+ typename Point,
+ typename Ring,
+ closure_selector Closure,
+ typename Strategy
+>
+struct point_to_ring
+{
+ typedef std::pair
+ <
+ typename strategy::distance::services::return_type
+ <
+ Strategy, Point, typename point_type<Ring>::type
+ >::type,
+ bool
+ > distance_containment;
+
+ static inline distance_containment apply(Point const& point,
+ Ring const& ring,
+ Strategy const& strategy)
+ {
+ return distance_containment
+ (
+ point_to_range
+ <
+ Point,
+ Ring,
+ Closure,
+ Strategy
+ >::apply(point, ring, strategy),
+ geometry::within(point, ring)
+ );
+ }
+};
+
+
+
+template
+<
+ typename Point,
+ typename Polygon,
+ closure_selector Closure,
+ typename Strategy
+>
+class point_to_polygon
+{
+private:
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy, Point, typename point_type<Polygon>::type
+ >::type comparable_return_type;
+
+ typedef std::pair
+ <
+ comparable_return_type, bool
+ > comparable_distance_containment;
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy, Point, typename point_type<Polygon>::type
+ >::type return_type;
+ typedef std::pair<return_type, bool> distance_containment;
+
+ static inline distance_containment apply(Point const& point,
+ Polygon const& polygon,
+ Strategy const& strategy)
+ {
+ comparable_strategy c_strategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+
+ // Check distance to all rings
+ typedef point_to_ring
+ <
+ Point,
+ typename ring_type<Polygon>::type,
+ Closure,
+ comparable_strategy
+ > per_ring;
+
+ comparable_distance_containment dc =
+ per_ring::apply(point, exterior_ring(polygon), c_strategy);
+
+ typename interior_return_type<Polygon const>::type rings
+ = interior_rings(polygon);
+ for (typename boost::range_iterator
+ <
+ typename interior_type<Polygon const>::type const
+ >::type it = boost::begin(rings);
+ it != boost::end(rings); ++it)
+ {
+ comparable_distance_containment dcr =
+ per_ring::apply(point, *it, c_strategy);
+ if (dcr.first < dc.first)
+ {
+ dc.first = dcr.first;
+ }
+ // If it was inside, and also inside inner ring,
+ // turn off the inside-flag, it is outside the polygon
+ if (dc.second && dcr.second)
+ {
+ dc.second = false;
+ }
+ }
+
+ return_type rd = strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy, Strategy, Point, Polygon
+ >::apply(dc.first);
+
+ return std::make_pair(rd, dc.second);
+ }
+};
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// Point-point
+template <typename P1, typename P2, typename Strategy>
+struct distance
+ <
+ P1, P2, Strategy,
+ point_tag, point_tag, strategy_tag_distance_point_point,
+ false
+ >
+ : detail::distance::point_to_point<P1, P2, Strategy>
+{};
+
+
+// Point-line version 2, where point-segment strategy is specified
+template <typename Point, typename Linestring, typename Strategy>
+struct distance
+<
+ Point, Linestring, Strategy,
+ point_tag, linestring_tag, strategy_tag_distance_point_segment,
+ false
+> : detail::distance::point_to_range<Point, Linestring, closed, Strategy>
+{};
+
+
+// Point-ring , where point-segment strategy is specified
+template <typename Point, typename Ring, typename Strategy>
+struct distance
+<
+ Point, Ring, Strategy,
+ point_tag, ring_tag, strategy_tag_distance_point_segment,
+ false
+>
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy, Point, typename point_type<Ring>::type
+ >::type return_type;
+
+ static inline return_type apply(Point const& point,
+ Ring const& ring,
+ Strategy const& strategy)
+ {
+ std::pair<return_type, bool>
+ dc = detail::distance::point_to_ring
+ <
+ Point, Ring,
+ geometry::closure<Ring>::value,
+ Strategy
+ >::apply(point, ring, strategy);
+
+ return dc.second ? return_type(0) : dc.first;
+ }
+};
+
+
+// Point-polygon , where point-segment strategy is specified
+template <typename Point, typename Polygon, typename Strategy>
+struct distance
+<
+ Point, Polygon, Strategy, point_tag, polygon_tag,
+ strategy_tag_distance_point_segment, false
+>
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy, Point, typename point_type<Polygon>::type
+ >::type return_type;
+
+ static inline return_type apply(Point const& point,
+ Polygon const& polygon,
+ Strategy const& strategy)
+ {
+ std::pair<return_type, bool>
+ dc = detail::distance::point_to_polygon
+ <
+ Point, Polygon,
+ geometry::closure<Polygon>::value,
+ Strategy
+ >::apply(point, polygon, strategy);
+
+ return dc.second ? return_type(0) : dc.first;
+ }
+};
+
+
+// Point-segment version 2, with point-segment strategy
+template <typename Point, typename Segment, typename Strategy>
+struct distance
+<
+ Point, Segment, Strategy,
+ point_tag, segment_tag, strategy_tag_distance_point_segment,
+ false
+>
+{
+ static inline typename return_type<Strategy, Point, typename point_type<Segment>::type>::type
+ apply(Point const& point,
+ Segment const& segment,
+ Strategy const& strategy)
+ {
+ typename point_type<Segment>::type p[2];
+ geometry::detail::assign_point_from_index<0>(segment, p[0]);
+ geometry::detail::assign_point_from_index<1>(segment, p[1]);
+
+ boost::ignore_unused_variable_warning(strategy);
+ return strategy.apply(point, p[0], p[1]);
+ }
+};
+
+
+
+template <typename Point, typename Box, typename Strategy>
+struct distance
+ <
+ Point, Box, Strategy, point_tag, box_tag,
+ strategy_tag_distance_point_box, false
+ >
+{
+ static inline typename strategy::distance::services::return_type
+ <
+ Strategy, Point, typename point_type<Box>::type
+ >::type
+ apply(Point const& point, Box const& box, Strategy const& strategy)
+ {
+ boost::ignore_unused_variable_warning(strategy);
+ return strategy.apply(point, box);
+ }
+};
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_POINT_TO_GEOMETRY_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/polygon_to_segment_or_box.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/polygon_to_segment_or_box.hpp
new file mode 100644
index 0000000000..631cb25d37
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/polygon_to_segment_or_box.hpp
@@ -0,0 +1,160 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_POLYGON_TO_SEGMENT_OR_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_POLYGON_TO_SEGMENT_OR_BOX_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/distance_comparable_to_regular.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+
+#include <boost/geometry/util/math.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/point_to_geometry.hpp>
+#include <boost/geometry/algorithms/detail/distance/range_to_segment_or_box.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+template <typename Polygon, typename SegmentOrBox, typename Strategy>
+class polygon_to_segment_or_box
+{
+private:
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy,
+ typename point_type<Polygon>::type,
+ typename point_type<SegmentOrBox>::type
+ >::type comparable_return_type;
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Polygon>::type,
+ typename point_type<SegmentOrBox>::type
+ >::type return_type;
+
+ static inline return_type apply(Polygon const& polygon,
+ SegmentOrBox const& segment_or_box,
+ Strategy const& strategy)
+ {
+ typedef typename geometry::ring_type<Polygon>::type e_ring;
+ typedef typename geometry::interior_type<Polygon>::type i_rings;
+ typedef typename range_value<i_rings>::type i_ring;
+
+ if ( geometry::intersects(polygon, segment_or_box) )
+ {
+ return 0;
+ }
+
+ e_ring const& ext_ring = geometry::exterior_ring<Polygon>(polygon);
+ i_rings const& int_rings = geometry::interior_rings<Polygon>(polygon);
+
+ comparable_strategy cstrategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+
+
+ comparable_return_type cd_min = range_to_segment_or_box
+ <
+ e_ring, SegmentOrBox, comparable_strategy
+ >::apply(ext_ring, segment_or_box, cstrategy, false);
+
+ typedef typename boost::range_iterator<i_rings const>::type iterator_type;
+ for (iterator_type it = boost::begin(int_rings);
+ it != boost::end(int_rings); ++it)
+ {
+ comparable_return_type cd = range_to_segment_or_box
+ <
+ i_ring, SegmentOrBox, comparable_strategy
+ >::apply(*it, segment_or_box, cstrategy, false);
+
+ if ( cd < cd_min )
+ {
+ cd_min = cd;
+ }
+ }
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy,
+ Strategy,
+ Polygon,
+ SegmentOrBox
+ >::apply(cd_min);
+ }
+};
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace dispatch
+{
+
+
+template <typename Polygon, typename Segment, typename Strategy>
+struct distance
+ <
+ Polygon, Segment, Strategy, polygon_tag, segment_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::polygon_to_segment_or_box<Polygon, Segment, Strategy>
+{};
+
+
+
+template <typename Polygon, typename Box, typename Strategy>
+struct distance
+ <
+ Polygon, Box, Strategy, polygon_tag, box_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::polygon_to_segment_or_box<Polygon, Box, Strategy>
+{};
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_POLYGON_TO_SEGMENT_OR_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/range_to_segment_or_box.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/range_to_segment_or_box.hpp
new file mode 100644
index 0000000000..8d02e1cce0
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/range_to_segment_or_box.hpp
@@ -0,0 +1,333 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_RANGE_TO_SEGMENT_OR_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_RANGE_TO_SEGMENT_OR_BOX_HPP
+
+#include <vector>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/reverse_dispatch.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/distance_comparable_to_regular.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+
+#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
+#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/point_to_geometry.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+
+template
+<
+ typename Range,
+ typename SegmentOrBox,
+ typename Strategy
+>
+class range_to_segment_or_box
+{
+private:
+ typedef typename point_type<SegmentOrBox>::type segment_or_box_point;
+ typedef typename point_type<Range>::type range_point;
+
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy, range_point, segment_or_box_point
+ >::type comparable_return_type;
+
+ typedef typename strategy::distance::services::tag
+ <
+ comparable_strategy
+ >::type comparable_strategy_tag;
+
+ typedef dispatch::distance
+ <
+ segment_or_box_point, Range, comparable_strategy,
+ point_tag, typename tag<Range>::type,
+ comparable_strategy_tag, false
+ > comparable_point_to_range;
+
+ // compute distance of a point to a segment or a box
+ template
+ <
+ typename Point,
+ typename SegOrBoxPoints,
+ typename ComparableStrategy,
+ typename Tag
+ >
+ struct comparable_distance_point_to_segment_or_box
+ {};
+
+ template
+ <
+ typename Point,
+ typename SegmentPoints,
+ typename ComparableStrategy
+ >
+ struct comparable_distance_point_to_segment_or_box
+ <
+ Point, SegmentPoints, ComparableStrategy, segment_tag
+ >
+ {
+ static inline
+ comparable_return_type apply(Point const& point,
+ SegmentPoints const& segment_points,
+ ComparableStrategy const& strategy)
+ {
+ boost::ignore_unused_variable_warning(strategy);
+ return strategy.apply(point, segment_points[0], segment_points[1]);
+ }
+ };
+
+ template
+ <
+ typename Point,
+ typename BoxPoints,
+ typename ComparableStrategy
+ >
+ struct comparable_distance_point_to_segment_or_box
+ <
+ Point, BoxPoints, ComparableStrategy, box_tag
+ >
+ {
+ static inline
+ comparable_return_type apply(Point const& point,
+ BoxPoints const& box_points,
+ ComparableStrategy const& strategy)
+ {
+ return point_to_range
+ <
+ Point, BoxPoints, open, ComparableStrategy
+ >::apply(point, box_points, strategy);
+ }
+ };
+
+
+ // assign the points of a segment or a box to a range
+ template
+ <
+ typename SegOrBox,
+ typename PointRange,
+ typename Tag = typename tag<SegOrBox>::type
+ >
+ struct assign_segment_or_box_points
+ {};
+
+
+ template <typename Segment, typename PointRange>
+ struct assign_segment_or_box_points<Segment, PointRange, segment_tag>
+ {
+ static inline void apply(Segment const& segment, PointRange& range)
+ {
+ detail::assign_point_from_index<0>(segment, range[0]);
+ detail::assign_point_from_index<1>(segment, range[1]);
+ }
+ };
+
+ template <typename Box, typename PointRange>
+ struct assign_segment_or_box_points<Box, PointRange, box_tag>
+ {
+ static inline void apply(Box const& box, PointRange& range)
+ {
+ detail::assign_box_corners_oriented<true>(box, range);
+ }
+ };
+
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy, range_point, segment_or_box_point
+ >::type return_type;
+
+ static inline return_type
+ apply(Range const& range, SegmentOrBox const& segment_or_box,
+ Strategy const& strategy, bool check_intersection = true)
+ {
+ if ( check_intersection && geometry::intersects(range, segment_or_box) )
+ {
+ return 0;
+ }
+
+ comparable_strategy cstrategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+
+
+ // get all points of the segment or the box
+ std::vector<segment_or_box_point>
+ segment_or_box_points(geometry::num_points(segment_or_box));
+
+ assign_segment_or_box_points
+ <
+
+ SegmentOrBox,
+ std::vector<segment_or_box_point>
+ >::apply(segment_or_box, segment_or_box_points);
+
+ // consider all distances from each endpoint of the segment or box
+ // to the range
+ typename std::vector<segment_or_box_point>::const_iterator it
+ = segment_or_box_points.begin();
+ comparable_return_type cd_min =
+ comparable_point_to_range::apply(*it, range, cstrategy);
+
+ for (++it; it != segment_or_box_points.end(); ++it)
+ {
+ comparable_return_type cd =
+ comparable_point_to_range::apply(*it, range, cstrategy);
+ if ( cd < cd_min )
+ {
+ cd_min = cd;
+ }
+ }
+
+ // consider all distances of the points in the range to the
+ // segment or box
+ typedef typename range_iterator<Range const>::type iterator_type;
+ for (iterator_type it = boost::begin(range); it != boost::end(range); ++it)
+ {
+ comparable_return_type cd =
+ comparable_distance_point_to_segment_or_box
+ <
+ typename point_type<Range>::type,
+ std::vector<segment_or_box_point>,
+ comparable_strategy,
+ typename tag<SegmentOrBox>::type
+ >::apply(*it, segment_or_box_points, cstrategy);
+
+ if ( cd < cd_min )
+ {
+ cd_min = cd;
+ }
+ }
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy, Strategy,
+ range_point, segment_or_box_point
+ >::apply(cd_min);
+ }
+
+ static inline return_type
+ apply(SegmentOrBox const& segment_or_box, Range const& range,
+ Strategy const& strategy, bool check_intersection = true)
+ {
+ return apply(range, segment_or_box, strategy, check_intersection);
+ }
+};
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+
+template <typename Linestring, typename Segment, typename Strategy>
+struct distance
+ <
+ Linestring, Segment, Strategy, linestring_tag, segment_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::range_to_segment_or_box
+ <
+ Linestring, Segment, Strategy
+ >
+{};
+
+
+
+
+template <typename Segment, typename Ring, typename Strategy>
+struct distance
+ <
+ Segment, Ring, Strategy, segment_tag, ring_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::range_to_segment_or_box
+ <
+ Ring, Segment, Strategy
+ >
+{};
+
+
+
+
+template <typename Linestring, typename Box, typename Strategy>
+struct distance
+ <
+ Linestring, Box, Strategy, linestring_tag, box_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::range_to_segment_or_box
+ <
+ Linestring, Box, Strategy
+ >
+{};
+
+
+
+
+template <typename Ring, typename Box, typename Strategy>
+struct distance
+ <
+ Ring, Box, Strategy, ring_tag, box_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::range_to_segment_or_box
+ <
+ Ring, Box, Strategy
+ >
+{};
+
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_RANGE_TO_SEGMENT_OR_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/segment_to_box.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/segment_to_box.hpp
new file mode 100644
index 0000000000..695f3a2bec
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/segment_to_box.hpp
@@ -0,0 +1,814 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_BOX_HPP
+
+#include <functional>
+#include <vector>
+
+#include <boost/assert.hpp>
+#include <boost/numeric/conversion/cast.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/if.hpp>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/util/calculation_type.hpp>
+#include <boost/geometry/util/math.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/distance_comparable_to_regular.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+
+#include <boost/geometry/policies/compare.hpp>
+
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
+#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
+#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
+#include <boost/geometry/algorithms/detail/distance/point_to_geometry.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+template
+<
+ typename Segment,
+ typename Box,
+ typename Strategy,
+ bool UsePointBoxStrategy = false
+>
+class segment_to_box_2D_generic
+{
+private:
+ typedef typename point_type<Segment>::type segment_point;
+ typedef typename point_type<Box>::type box_point;
+
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy, segment_point, box_point
+ >::type comparable_return_type;
+
+ typedef point_to_range
+ <
+ segment_point, std::vector<box_point>, open, comparable_strategy
+ > point_to_box_boundary;
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy, segment_point, box_point
+ >::type return_type;
+
+ static inline return_type apply(Segment const& segment,
+ Box const& box,
+ Strategy const& strategy,
+ bool check_intersection = true)
+ {
+ if ( check_intersection && geometry::intersects(segment, box) )
+ {
+ return 0;
+ }
+
+ comparable_strategy cstrategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+ boost::ignore_unused_variable_warning(cstrategy);
+
+ // get segment points
+ segment_point p[2];
+ detail::assign_point_from_index<0>(segment, p[0]);
+ detail::assign_point_from_index<1>(segment, p[1]);
+
+ // get box points
+ std::vector<box_point> box_points(4);
+ detail::assign_box_corners_oriented<true>(box, box_points);
+
+ comparable_return_type cd[6];
+ for (unsigned int i = 0; i < 4; ++i)
+ {
+ cd[i] = cstrategy.apply(box_points[i], p[0], p[1]);
+ }
+ cd[4] = point_to_box_boundary::apply(p[0], box_points, cstrategy);
+ cd[5] = point_to_box_boundary::apply(p[1], box_points, cstrategy);
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy, Strategy, Segment, Box
+ >::apply( *std::min_element(cd, cd + 6) );
+ }
+};
+
+
+template
+<
+ typename Segment,
+ typename Box,
+ typename Strategy
+>
+class segment_to_box_2D_generic<Segment, Box, Strategy, true>
+{
+private:
+ typedef typename point_type<Segment>::type segment_point;
+ typedef typename point_type<Box>::type box_point;
+
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy, segment_point, box_point
+ >::type comparable_return_type;
+
+ typedef typename strategy::distance::services::comparable_type
+ <
+ typename detail::distance::default_strategy
+ <
+ segment_point, Box
+ >::type
+ >::type point_box_comparable_strategy;
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy, segment_point, box_point
+ >::type return_type;
+
+ static inline return_type apply(Segment const& segment,
+ Box const& box,
+ Strategy const& strategy,
+ bool check_intersection = true)
+ {
+ if ( check_intersection && geometry::intersects(segment, box) )
+ {
+ return 0;
+ }
+
+ comparable_strategy cstrategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+ boost::ignore_unused_variable_warning(cstrategy);
+
+ // get segment points
+ segment_point p[2];
+ detail::assign_point_from_index<0>(segment, p[0]);
+ detail::assign_point_from_index<1>(segment, p[1]);
+
+ // get box points
+ std::vector<box_point> box_points(4);
+ detail::assign_box_corners_oriented<true>(box, box_points);
+
+ comparable_return_type cd[6];
+ for (unsigned int i = 0; i < 4; ++i)
+ {
+ cd[i] = cstrategy.apply(box_points[i], p[0], p[1]);
+ }
+
+ point_box_comparable_strategy pb_cstrategy;
+ boost::ignore_unused_variable_warning(pb_cstrategy);
+ cd[4] = pb_cstrategy.apply(p[0], box);
+ cd[5] = pb_cstrategy.apply(p[1], box);
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy, Strategy, Segment, Box
+ >::apply( *std::min_element(cd, cd + 6) );
+ }
+};
+
+
+
+
+template
+<
+ typename ReturnType,
+ typename SegmentPoint,
+ typename BoxPoint,
+ typename PPStrategy,
+ typename PSStrategy
+>
+class segment_to_box_2D
+{
+private:
+ template <typename Result>
+ struct cast_to_result
+ {
+ template <typename T>
+ static inline Result apply(T const& t)
+ {
+ return boost::numeric_cast<Result>(t);
+ }
+ };
+
+
+ template <typename T, bool IsLess /* true */>
+ struct compare_less_equal
+ {
+ typedef compare_less_equal<T, !IsLess> other;
+
+ template <typename T1, typename T2>
+ inline bool operator()(T1 const& t1, T2 const& t2) const
+ {
+ return std::less_equal<T>()(cast_to_result<T>::apply(t1),
+ cast_to_result<T>::apply(t2));
+ }
+ };
+
+ template <typename T>
+ struct compare_less_equal<T, false>
+ {
+ typedef compare_less_equal<T, true> other;
+
+ template <typename T1, typename T2>
+ inline bool operator()(T1 const& t1, T2 const& t2) const
+ {
+ return std::greater_equal<T>()(cast_to_result<T>::apply(t1),
+ cast_to_result<T>::apply(t2));
+ }
+ };
+
+
+ template <typename LessEqual>
+ struct other_compare
+ {
+ typedef typename LessEqual::other type;
+ };
+
+
+ // it is assumed here that p0 lies to the right of the box (so the
+ // entire segment lies to the right of the box)
+ template <typename LessEqual>
+ struct right_of_box
+ {
+ static inline ReturnType apply(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ BoxPoint const& bottom_right,
+ BoxPoint const& top_right,
+ PPStrategy const& pp_strategy,
+ PSStrategy const& ps_strategy)
+ {
+ // the implementation below is written for non-negative slope
+ // segments
+ //
+ // for negative slope segments swap the roles of bottom_right
+ // and top_right and use greater_equal instead of less_equal.
+
+ typedef cast_to_result<ReturnType> cast;
+
+ LessEqual less_equal;
+
+ if ( less_equal(geometry::get<1>(top_right), geometry::get<1>(p0)) )
+ {
+ // closest box point is the top-right corner
+ return cast::apply(pp_strategy.apply(p0, top_right));
+ }
+ else if ( less_equal(geometry::get<1>(bottom_right),
+ geometry::get<1>(p0)) )
+ {
+ // distance is realized between p0 and right-most
+ // segment of box
+ ReturnType diff = cast::apply(geometry::get<0>(p0))
+ - cast::apply(geometry::get<0>(bottom_right));
+ return diff * diff;
+ }
+ else
+ {
+ // distance is realized between the bottom-right
+ // corner of the box and the segment
+ return cast::apply(ps_strategy.apply(bottom_right, p0, p1));
+ }
+ }
+ };
+
+
+ // it is assumed here that p0 lies above the box (so the
+ // entire segment lies above the box)
+ template <typename LessEqual>
+ struct above_of_box
+ {
+ static inline ReturnType apply(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ BoxPoint const& top_left,
+ PSStrategy const& ps_strategy)
+ {
+ // the segment lies above the box
+
+ typedef cast_to_result<ReturnType> cast;
+
+ LessEqual less_equal;
+
+ // p0 is above the upper segment of the box
+ // (and inside its band)
+ if ( less_equal(geometry::get<0>(top_left), geometry::get<0>(p0)) )
+ {
+ ReturnType diff = cast::apply(geometry::get<1>(p0))
+ - cast::apply(geometry::get<1>(top_left));
+ return diff * diff;
+ }
+
+ // p0 is to the left of the box, but p1 is above the box
+ // in this case the distance is realized between the
+ // top-left corner of the box and the segment
+ return cast::apply(ps_strategy.apply(top_left, p0, p1));
+ }
+ };
+
+
+ template <typename LessEqual>
+ struct check_right_left_of_box
+ {
+ static inline bool apply(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ BoxPoint const& top_left,
+ BoxPoint const& top_right,
+ BoxPoint const& bottom_left,
+ BoxPoint const& bottom_right,
+ PPStrategy const& pp_strategy,
+ PSStrategy const& ps_strategy,
+ ReturnType& result)
+ {
+ // p0 lies to the right of the box
+ if ( geometry::get<0>(p0) >= geometry::get<0>(top_right) )
+ {
+ result = right_of_box
+ <
+ LessEqual
+ >::apply(p0, p1, bottom_right, top_right,
+ pp_strategy, ps_strategy);
+ return true;
+ }
+
+ // p1 lies to the left of the box
+ if ( geometry::get<0>(p1) <= geometry::get<0>(bottom_left) )
+ {
+ result = right_of_box
+ <
+ typename other_compare<LessEqual>::type
+ >::apply(p1, p0, top_left, bottom_left,
+ pp_strategy, ps_strategy);
+ return true;
+ }
+
+ return false;
+ }
+ };
+
+
+ template <typename LessEqual>
+ struct check_above_below_of_box
+ {
+ static inline bool apply(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ BoxPoint const& top_left,
+ BoxPoint const& top_right,
+ BoxPoint const& bottom_left,
+ BoxPoint const& bottom_right,
+ PSStrategy const& ps_strategy,
+ ReturnType& result)
+ {
+ // the segment lies below the box
+ if ( geometry::get<1>(p1) < geometry::get<1>(bottom_left) )
+ {
+ result = above_of_box
+ <
+ typename other_compare<LessEqual>::type
+ >::apply(p1, p0, bottom_right, ps_strategy);
+ return true;
+ }
+
+ // the segment lies above the box
+ if ( geometry::get<1>(p0) > geometry::get<1>(top_right) )
+ {
+ result = above_of_box
+ <
+ LessEqual
+ >::apply(p0, p1, top_left, ps_strategy);
+ return true;
+ }
+ return false;
+ }
+ };
+
+ struct check_generic_position
+ {
+ static inline bool apply(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ BoxPoint const& bottom_left0,
+ BoxPoint const& top_right0,
+ BoxPoint const& bottom_left1,
+ BoxPoint const& top_right1,
+ BoxPoint const& corner1,
+ BoxPoint const& corner2,
+ PSStrategy const& ps_strategy,
+ ReturnType& result)
+ {
+ typedef cast_to_result<ReturnType> cast;
+
+ ReturnType diff0 = cast::apply(geometry::get<0>(p1))
+ - cast::apply(geometry::get<0>(p0));
+ ReturnType t_min0 = cast::apply(geometry::get<0>(bottom_left0))
+ - cast::apply(geometry::get<0>(p0));
+ ReturnType t_max0 = cast::apply(geometry::get<0>(top_right0))
+ - cast::apply(geometry::get<0>(p0));
+
+ ReturnType diff1 = cast::apply(geometry::get<1>(p1))
+ - cast::apply(geometry::get<1>(p0));
+ ReturnType t_min1 = cast::apply(geometry::get<1>(bottom_left1))
+ - cast::apply(geometry::get<1>(p0));
+ ReturnType t_max1 = cast::apply(geometry::get<1>(top_right1))
+ - cast::apply(geometry::get<1>(p0));
+
+ if ( diff1 < 0 )
+ {
+ diff1 = -diff1;
+ t_min1 = -t_min1;
+ t_max1 = -t_max1;
+ }
+
+ // t_min0 > t_max1
+ if ( t_min0 * diff1 > t_max1 * diff0 )
+ {
+ result = cast::apply(ps_strategy.apply(corner1, p0, p1));
+ return true;
+ }
+
+ // t_max0 < t_min1
+ if ( t_max0 * diff1 < t_min1 * diff0 )
+ {
+ result = cast::apply(ps_strategy.apply(corner2, p0, p1));
+ return true;
+ }
+ return false;
+ }
+ };
+
+ static inline ReturnType
+ non_negative_slope_segment(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ BoxPoint const& top_left,
+ BoxPoint const& top_right,
+ BoxPoint const& bottom_left,
+ BoxPoint const& bottom_right,
+ PPStrategy const& pp_strategy,
+ PSStrategy const& ps_strategy)
+ {
+ typedef compare_less_equal<ReturnType, true> less_equal;
+
+ // assert that the segment has non-negative slope
+ BOOST_ASSERT( ( math::equals(geometry::get<0>(p0), geometry::get<0>(p1))
+ && geometry::get<1>(p0) < geometry::get<1>(p1))
+ ||
+ ( geometry::get<0>(p0) < geometry::get<0>(p1)
+ && geometry::get<1>(p0) <= geometry::get<1>(p1) )
+ );
+
+ ReturnType result(0);
+
+ if ( check_right_left_of_box
+ <
+ less_equal
+ >::apply(p0, p1,
+ top_left, top_right, bottom_left, bottom_right,
+ pp_strategy, ps_strategy, result) )
+ {
+ return result;
+ }
+
+ if ( check_above_below_of_box
+ <
+ less_equal
+ >::apply(p0, p1,
+ top_left, top_right, bottom_left, bottom_right,
+ ps_strategy, result) )
+ {
+ return result;
+ }
+
+ if ( check_generic_position::apply(p0, p1,
+ bottom_left, top_right,
+ bottom_left, top_right,
+ top_left, bottom_right,
+ ps_strategy, result) )
+ {
+ return result;
+ }
+
+ // in all other cases the box and segment intersect, so return 0
+ return result;
+ }
+
+
+ static inline ReturnType
+ negative_slope_segment(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ BoxPoint const& top_left,
+ BoxPoint const& top_right,
+ BoxPoint const& bottom_left,
+ BoxPoint const& bottom_right,
+ PPStrategy const& pp_strategy,
+ PSStrategy const& ps_strategy)
+ {
+ typedef compare_less_equal<ReturnType, false> greater_equal;
+
+ // assert that the segment has negative slope
+ BOOST_ASSERT( geometry::get<0>(p0) < geometry::get<0>(p1)
+ && geometry::get<1>(p0) > geometry::get<1>(p1) );
+
+ ReturnType result(0);
+
+ if ( check_right_left_of_box
+ <
+ greater_equal
+ >::apply(p0, p1,
+ bottom_left, bottom_right, top_left, top_right,
+ pp_strategy, ps_strategy, result) )
+ {
+ return result;
+ }
+
+ if ( check_above_below_of_box
+ <
+ greater_equal
+ >::apply(p1, p0,
+ top_right, top_left, bottom_right, bottom_left,
+ ps_strategy, result) )
+ {
+ return result;
+ }
+
+ if ( check_generic_position::apply(p0, p1,
+ bottom_left, top_right,
+ top_right, bottom_left,
+ bottom_left, top_right,
+ ps_strategy, result) )
+ {
+ return result;
+ }
+
+ // in all other cases the box and segment intersect, so return 0
+ return result;
+ }
+
+public:
+ static inline ReturnType apply(SegmentPoint const& p0,
+ SegmentPoint const& p1,
+ BoxPoint const& top_left,
+ BoxPoint const& top_right,
+ BoxPoint const& bottom_left,
+ BoxPoint const& bottom_right,
+ PPStrategy const& pp_strategy,
+ PSStrategy const& ps_strategy)
+ {
+ BOOST_ASSERT( geometry::less<SegmentPoint>()(p0, p1) );
+
+ if ( geometry::get<0>(p0) < geometry::get<0>(p1)
+ && geometry::get<1>(p0) > geometry::get<1>(p1) )
+ {
+ return negative_slope_segment(p0, p1,
+ top_left, top_right,
+ bottom_left, bottom_right,
+ pp_strategy, ps_strategy);
+ }
+
+ return non_negative_slope_segment(p0, p1,
+ top_left, top_right,
+ bottom_left, bottom_right,
+ pp_strategy, ps_strategy);
+ }
+};
+
+
+//=========================================================================
+
+
+template
+<
+ typename Segment,
+ typename Box,
+ typename std::size_t Dimension,
+ typename PPStrategy,
+ typename PSStrategy
+>
+class segment_to_box
+ : not_implemented<Segment, Box>
+{};
+
+
+template
+<
+ typename Segment,
+ typename Box,
+ typename PPStrategy,
+ typename PSStrategy
+>
+class segment_to_box<Segment, Box, 2, PPStrategy, PSStrategy>
+{
+private:
+ typedef typename point_type<Segment>::type segment_point;
+ typedef typename point_type<Box>::type box_point;
+
+ typedef typename strategy::distance::services::comparable_type
+ <
+ PPStrategy
+ >::type pp_comparable_strategy;
+
+ typedef typename strategy::distance::services::comparable_type
+ <
+ PSStrategy
+ >::type ps_comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ ps_comparable_strategy, segment_point, box_point
+ >::type comparable_return_type;
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ PSStrategy, segment_point, box_point
+ >::type return_type;
+
+ static inline return_type apply(Segment const& segment,
+ Box const& box,
+ PPStrategy const& pp_strategy,
+ PSStrategy const& ps_strategy)
+ {
+ segment_point p[2];
+ detail::assign_point_from_index<0>(segment, p[0]);
+ detail::assign_point_from_index<1>(segment, p[1]);
+
+ if ( geometry::equals(p[0], p[1]) )
+ {
+ typedef typename boost::mpl::if_
+ <
+ boost::is_same
+ <
+ ps_comparable_strategy,
+ PSStrategy
+ >,
+ typename strategy::distance::services::comparable_type
+ <
+ typename detail::distance::default_strategy
+ <
+ segment_point, Box
+ >::type
+ >::type,
+ typename detail::distance::default_strategy
+ <
+ segment_point, Box
+ >::type
+ >::type point_box_strategy_type;
+
+ return dispatch::distance
+ <
+ segment_point,
+ Box,
+ point_box_strategy_type
+ >::apply(p[0], box, point_box_strategy_type());
+ }
+
+ box_point top_left, top_right, bottom_left, bottom_right;
+ detail::assign_box_corners(box, bottom_left, bottom_right,
+ top_left, top_right);
+
+ pp_comparable_strategy c_pp_strategy =
+ strategy::distance::services::get_comparable
+ <
+ PPStrategy
+ >::apply(pp_strategy);
+
+ ps_comparable_strategy c_ps_strategy =
+ strategy::distance::services::get_comparable
+ <
+ PSStrategy
+ >::apply(ps_strategy);
+
+ comparable_return_type cd;
+
+ if ( geometry::less<segment_point>()(p[0], p[1]) )
+ {
+ cd = segment_to_box_2D
+ <
+ return_type,
+ segment_point,
+ box_point,
+ pp_comparable_strategy,
+ ps_comparable_strategy
+ >::apply(p[0], p[1],
+ top_left, top_right, bottom_left, bottom_right,
+ c_pp_strategy,
+ c_ps_strategy);
+ }
+ else
+ {
+ cd = segment_to_box_2D
+ <
+ return_type,
+ segment_point,
+ box_point,
+ pp_comparable_strategy,
+ ps_comparable_strategy
+ >::apply(p[1], p[0],
+ top_left, top_right, bottom_left, bottom_right,
+ c_pp_strategy,
+ c_ps_strategy);
+ }
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ ps_comparable_strategy, PSStrategy, Segment, Box
+ >::apply( cd );
+ }
+};
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Segment, typename Box, typename Strategy>
+struct distance
+ <
+ Segment, Box, Strategy, segment_tag, box_tag,
+ strategy_tag_distance_point_segment, false
+ >
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Segment>::type,
+ typename point_type<Box>::type
+ >::type return_type;
+
+
+ static inline return_type apply(Segment const& segment,
+ Box const& box,
+ Strategy const& strategy)
+ {
+ assert_dimension_equal<Segment, Box>();
+
+ typedef typename detail::distance::default_strategy
+ <
+ typename point_type<Segment>::type,
+ typename point_type<Box>::type
+ >::type pp_strategy_type;
+
+ return detail::distance::segment_to_box
+ <
+ Segment,
+ Box,
+ dimension<Segment>::value,
+ pp_strategy_type,
+ Strategy
+ >::apply(segment, box, pp_strategy_type(), strategy);
+ }
+};
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/segment_to_segment.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/segment_to_segment.hpp
new file mode 100644
index 0000000000..1ae22153ce
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/segment_to_segment.hpp
@@ -0,0 +1,131 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_SEGMENT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_SEGMENT_HPP
+
+#include <algorithm>
+
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+#include <boost/geometry/strategies/distance_comparable_to_regular.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+
+// compute segment-segment distance
+template<typename Segment1, typename Segment2, typename Strategy>
+class segment_to_segment
+{
+private:
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy,
+ typename point_type<Segment1>::type,
+ typename point_type<Segment2>::type
+ >::type comparable_return_type;
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Segment1>::type,
+ typename point_type<Segment2>::type
+ >::type return_type;
+
+ static inline return_type
+ apply(Segment1 const& segment1, Segment2 const& segment2,
+ Strategy const& strategy)
+ {
+ if ( geometry::intersects(segment1, segment2) )
+ {
+ return 0;
+ }
+
+ typename point_type<Segment1>::type p[2];
+ detail::assign_point_from_index<0>(segment1, p[0]);
+ detail::assign_point_from_index<1>(segment1, p[1]);
+
+ typename point_type<Segment2>::type q[2];
+ detail::assign_point_from_index<0>(segment2, q[0]);
+ detail::assign_point_from_index<1>(segment2, q[1]);
+
+ comparable_strategy cstrategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+
+ comparable_return_type d[4];
+ d[0] = cstrategy.apply(q[0], p[0], p[1]);
+ d[1] = cstrategy.apply(q[1], p[0], p[1]);
+ d[2] = cstrategy.apply(p[0], q[0], q[1]);
+ d[3] = cstrategy.apply(p[1], q[0], q[1]);
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy, Strategy, Segment1, Segment2
+ >::apply( *std::min_element(d, d + 4) );
+ }
+};
+
+
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+
+// segment-segment
+template <typename Segment1, typename Segment2, typename Strategy>
+struct distance
+ <
+ Segment1, Segment2, Strategy, segment_tag, segment_tag,
+ strategy_tag_distance_point_segment, false
+ >
+ : detail::distance::segment_to_segment<Segment1, Segment2, Strategy>
+{};
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_SEGMENT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/distance/single_to_multi.hpp b/3party/boost/boost/geometry/algorithms/detail/distance/single_to_multi.hpp
new file mode 100644
index 0000000000..59cf172309
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/distance/single_to_multi.hpp
@@ -0,0 +1,526 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SINGLE_TO_MULTI_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SINGLE_TO_MULTI_HPP
+
+#include <boost/numeric/conversion/bounds.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/geometry_id.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+
+#include <boost/geometry/util/select_coordinate_type.hpp>
+#include <boost/geometry/util/math.hpp>
+
+#include <boost/geometry/algorithms/not_implemented.hpp>
+#include <boost/geometry/algorithms/dispatch/distance.hpp>
+
+#include <boost/geometry/algorithms/detail/for_each_range.hpp>
+#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
+#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
+
+#include <boost/geometry/views/detail/range_type.hpp>
+
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/disjoint.hpp>
+#include <boost/geometry/algorithms/for_each.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/geometry_to_geometry_rtree.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace distance
+{
+
+
+template<typename Geometry, typename MultiGeometry, typename Strategy>
+class distance_single_to_multi_generic
+{
+private:
+ typedef typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type comparable_strategy;
+
+ typedef typename strategy::distance::services::return_type
+ <
+ comparable_strategy,
+ typename point_type<Geometry>::type,
+ typename point_type<MultiGeometry>::type
+ >::type comparable_return_type;
+
+public:
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Geometry>::type,
+ typename point_type<MultiGeometry>::type
+ >::type return_type;
+
+ static inline return_type apply(Geometry const& geometry,
+ MultiGeometry const& multi,
+ Strategy const& strategy)
+ {
+ comparable_return_type min_cdist = comparable_return_type();
+ bool first = true;
+
+ comparable_strategy cstrategy =
+ strategy::distance::services::get_comparable
+ <
+ Strategy
+ >::apply(strategy);
+
+ for (typename range_iterator<MultiGeometry const>::type it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it, first = false)
+ {
+ comparable_return_type cdist = dispatch::distance
+ <
+ Geometry,
+ typename range_value<MultiGeometry>::type,
+ comparable_strategy
+ >::apply(geometry, *it, cstrategy);
+
+ if (first || cdist < min_cdist)
+ {
+ min_cdist = cdist;
+ if ( geometry::math::equals(min_cdist, 0) )
+ {
+ break;
+ }
+ }
+ }
+
+ return strategy::distance::services::comparable_to_regular
+ <
+ comparable_strategy, Strategy, Geometry, MultiGeometry
+ >::apply(min_cdist);
+ }
+};
+
+
+
+template <typename MultiGeometry, typename Geometry, typename Strategy>
+struct distance_multi_to_single_generic
+{
+ typedef typename strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<MultiGeometry>::type,
+ typename point_type<Geometry>::type
+ >::type return_type;
+
+ static inline return_type apply(MultiGeometry const& multi,
+ Geometry const& geometry,
+ Strategy const& strategy)
+ {
+ return distance_single_to_multi_generic
+ <
+ Geometry, MultiGeometry, Strategy
+ >::apply(geometry, multi, strategy);
+ }
+};
+
+
+
+
+}} // namespace detail::distance
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+namespace splitted_dispatch
+{
+
+
+template
+<
+ typename Geometry,
+ typename MultiGeometry,
+ typename Strategy,
+ typename GeometryTag,
+ typename MultiGeometryTag,
+ typename StrategyTag
+>
+struct distance_single_to_multi
+ : not_implemented<Geometry, MultiGeometry>
+{};
+
+
+
+template<typename Point, typename MultiPoint, typename Strategy>
+struct distance_single_to_multi
+ <
+ Point, MultiPoint, Strategy,
+ point_tag, multi_point_tag,
+ strategy_tag_distance_point_point
+ > : detail::distance::distance_single_to_multi_generic
+ <
+ Point, MultiPoint, Strategy
+ >
+{};
+
+
+
+template<typename Point, typename MultiLinestring, typename Strategy>
+struct distance_single_to_multi
+ <
+ Point, MultiLinestring, Strategy,
+ point_tag, multi_linestring_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_single_to_multi_generic
+ <
+ Point, MultiLinestring, Strategy
+ >
+{};
+
+
+
+template<typename Point, typename MultiPolygon, typename Strategy>
+struct distance_single_to_multi
+ <
+ Point, MultiPolygon, Strategy,
+ point_tag, multi_polygon_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_single_to_multi_generic
+ <
+ Point, MultiPolygon, Strategy
+ >
+{};
+
+
+
+template<typename Linestring, typename MultiLinestring, typename Strategy>
+struct distance_single_to_multi
+ <
+ Linestring, MultiLinestring, Strategy,
+ linestring_tag, multi_linestring_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ Linestring, MultiLinestring, Strategy
+ >
+{};
+
+
+
+template <typename Linestring, typename MultiPolygon, typename Strategy>
+struct distance_single_to_multi
+ <
+ Linestring, MultiPolygon, Strategy,
+ linestring_tag, multi_polygon_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ Linestring, MultiPolygon, Strategy
+ >
+{};
+
+
+
+template <typename Polygon, typename MultiPoint, typename Strategy>
+struct distance_single_to_multi
+ <
+ Polygon, MultiPoint, Strategy,
+ polygon_tag, multi_point_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_single_to_multi_generic
+ <
+ Polygon, MultiPoint, Strategy
+ >
+{};
+
+
+
+template <typename Polygon, typename MultiLinestring, typename Strategy>
+struct distance_single_to_multi
+ <
+ Polygon, MultiLinestring, Strategy,
+ polygon_tag, multi_linestring_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ Polygon, MultiLinestring, Strategy
+ >
+{};
+
+
+
+template <typename Polygon, typename MultiPolygon, typename Strategy>
+struct distance_single_to_multi
+ <
+ Polygon, MultiPolygon, Strategy,
+ polygon_tag, multi_polygon_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ Polygon, MultiPolygon, Strategy
+ >
+{};
+
+
+
+template <typename MultiLinestring, typename Ring, typename Strategy>
+struct distance_single_to_multi
+ <
+ MultiLinestring, Ring, Strategy,
+ multi_linestring_tag, ring_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ MultiLinestring, Ring, Strategy
+ >
+{};
+
+
+template <typename MultiPolygon, typename Ring, typename Strategy>
+struct distance_single_to_multi
+ <
+ MultiPolygon, Ring, Strategy,
+ multi_polygon_tag, ring_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ MultiPolygon, Ring, Strategy
+ >
+{};
+
+
+
+template
+<
+ typename MultiGeometry,
+ typename Geometry,
+ typename Strategy,
+ typename MultiGeometryTag,
+ typename GeometryTag,
+ typename StrategyTag
+>
+struct distance_multi_to_single
+ : not_implemented<MultiGeometry, Geometry>
+{};
+
+
+
+template
+<
+ typename MultiPoint,
+ typename Segment,
+ typename Strategy
+>
+struct distance_multi_to_single
+ <
+ MultiPoint, Segment, Strategy,
+ multi_point_tag, segment_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_multi_to_single_generic
+ <
+ MultiPoint, Segment, Strategy
+ >
+{};
+
+
+
+template
+<
+ typename MultiPoint,
+ typename Ring,
+ typename Strategy
+>
+struct distance_multi_to_single
+ <
+ MultiPoint, Ring, Strategy,
+ multi_point_tag, ring_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_multi_to_single_generic
+ <
+ MultiPoint, Ring, Strategy
+ >
+{};
+
+
+
+template
+<
+ typename MultiPoint,
+ typename Box,
+ typename Strategy
+>
+struct distance_multi_to_single
+ <
+ MultiPoint, Box, Strategy,
+ multi_point_tag, box_tag,
+ strategy_tag_distance_point_box
+ > : detail::distance::distance_multi_to_single_generic
+ <
+ MultiPoint, Box, Strategy
+ >
+{};
+
+
+template <typename MultiLinestring, typename Segment, typename Strategy>
+struct distance_multi_to_single
+ <
+ MultiLinestring, Segment, Strategy,
+ multi_linestring_tag, segment_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_multi_to_single_generic
+ <
+ MultiLinestring, Segment, Strategy
+ >
+{};
+
+
+template <typename MultiLinestring, typename Ring, typename Strategy>
+struct distance_multi_to_single
+ <
+ MultiLinestring, Ring, Strategy,
+ multi_linestring_tag, ring_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ MultiLinestring, Ring, Strategy
+ >
+{};
+
+
+template <typename MultiLinestring, typename Box, typename Strategy>
+struct distance_multi_to_single
+ <
+ MultiLinestring, Box, Strategy,
+ multi_linestring_tag, box_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_multi_to_single_generic
+ <
+ MultiLinestring, Box, Strategy
+ >
+{};
+
+
+
+template <typename MultiPolygon, typename Segment, typename Strategy>
+struct distance_multi_to_single
+ <
+ MultiPolygon, Segment, Strategy,
+ multi_polygon_tag, segment_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_multi_to_single_generic
+ <
+ MultiPolygon, Segment, Strategy
+ >
+{};
+
+
+template <typename MultiPolygon, typename Ring, typename Strategy>
+struct distance_multi_to_single
+ <
+ MultiPolygon, Ring, Strategy,
+ multi_polygon_tag, ring_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::geometry_to_geometry_rtree
+ <
+ MultiPolygon, Ring, Strategy
+ >
+{};
+
+
+template <typename MultiPolygon, typename Box, typename Strategy>
+struct distance_multi_to_single
+ <
+ MultiPolygon, Box, Strategy,
+ multi_polygon_tag, box_tag,
+ strategy_tag_distance_point_segment
+ > : detail::distance::distance_multi_to_single_generic
+ <
+ MultiPolygon, Box, Strategy
+ >
+{};
+
+
+} // namespace splitted_dispatch
+
+
+template
+<
+ typename Geometry,
+ typename MultiGeometry,
+ typename Strategy,
+ typename GeometryTag,
+ typename StrategyTag
+>
+struct distance
+ <
+ Geometry, MultiGeometry, Strategy, GeometryTag, multi_tag,
+ StrategyTag, false
+ > : splitted_dispatch::distance_single_to_multi
+ <
+ Geometry, MultiGeometry, Strategy,
+ GeometryTag, typename tag<MultiGeometry>::type,
+ StrategyTag
+ >
+{};
+
+
+
+template
+<
+ typename MultiGeometry,
+ typename Geometry,
+ typename Strategy,
+ typename GeometryTag,
+ typename StrategyTag
+>
+struct distance
+ <
+ MultiGeometry, Geometry, Strategy, multi_tag, GeometryTag,
+ StrategyTag, false
+ > : splitted_dispatch::distance_multi_to_single
+ <
+ MultiGeometry, Geometry, Strategy,
+ typename tag<MultiGeometry>::type, GeometryTag,
+ StrategyTag
+ >
+{};
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SINGLE_TO_MULTI_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp b/3party/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp
index 9c2fe28057..5bcb5ffaa0 100644
--- a/3party/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp
@@ -1,8 +1,9 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -17,12 +18,13 @@
#include <boost/numeric/conversion/cast.hpp>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/tags.hpp>
+
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/util/math.hpp>
@@ -75,9 +77,9 @@ struct collected_vector
inline bool same_direction(collected_vector<T> const& other) const
{
- // For high precision arithmetic, we have to be
+ // For high precision arithmetic, we have to be
// more relaxed then using ==
- // Because 2/sqrt( (0,0)<->(2,2) ) == 1/sqrt( (0,0)<->(1,1) )
+ // Because 2/sqrt( (0,0)<->(2,2) ) == 1/sqrt( (0,0)<->(1,1) )
// is not always true (at least, it is not for ttmath)
return math::equals_with_epsilon(dx, other.dx)
&& math::equals_with_epsilon(dy, other.dy);
@@ -111,6 +113,9 @@ struct range_collect_vectors
return;
}
+ typedef typename boost::range_size<Collection>::type collection_size_t;
+ collection_size_t c_old_size = boost::size(collection);
+
typedef typename boost::range_iterator<Range const>::type iterator;
bool first = true;
@@ -131,7 +136,7 @@ struct range_collect_vectors
// Normalize the vector -> this results in points+direction
// and is comparible between geometries
- calculation_type magnitude = sqrt(
+ calculation_type magnitude = math::sqrt(
boost::numeric_cast<calculation_type>(v.dx * v.dx + v.dy * v.dy));
// Avoid non-duplicate points (AND division by zero)
@@ -150,10 +155,19 @@ struct range_collect_vectors
}
// If first one has same direction as last one, remove first one
- if (boost::size(collection) > 1
- && collection.front().same_direction(collection.back()))
+ collection_size_t collected_count = boost::size(collection) - c_old_size;
+ if ( collected_count > 1 )
{
- collection.erase(collection.begin());
+ typedef typename boost::range_iterator<Collection>::type c_iterator;
+ c_iterator first = collection.begin() + c_old_size;
+
+ if ( first->same_direction(collection.back()) )
+ {
+ //collection.erase(first);
+ // O(1) instead of O(N)
+ *first = collection.back();
+ collection.pop_back();
+ }
}
}
};
@@ -194,9 +208,10 @@ struct polygon_collect_vectors
typedef range_collect_vectors<ring_type, Collection> per_range;
per_range::apply(collection, exterior_ring(polygon));
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(polygon);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(polygon);
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
per_range::apply(collection, *it);
}
diff --git a/3party/boost/boost/geometry/algorithms/detail/equals/point_point.hpp b/3party/boost/boost/geometry/algorithms/detail/equals/point_point.hpp
new file mode 100644
index 0000000000..12daa85e9d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/equals/point_point.hpp
@@ -0,0 +1,52 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_POINT_POINT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_POINT_POINT_HPP
+
+#include <boost/geometry/algorithms/detail/disjoint/point_point.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace equals
+{
+
+/*!
+ \brief Internal utility function to detect of points are disjoint
+ \note To avoid circular references
+ */
+template <typename Point1, typename Point2>
+inline bool equals_point_point(Point1 const& point1, Point2 const& point2)
+{
+ return ! detail::disjoint::disjoint_point_point(point1, point2);
+}
+
+
+}} // namespace detail::equals
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_POINT_POINT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/extreme_points.hpp b/3party/boost/boost/geometry/algorithms/detail/extreme_points.hpp
new file mode 100644
index 0000000000..c6a47bb8f4
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/extreme_points.hpp
@@ -0,0 +1,515 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
+
+
+#include <cstddef>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/iterators/ever_circling_iterator.hpp>
+
+#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
+
+#include <boost/geometry/strategies/side.hpp>
+
+#include <boost/geometry/util/math.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace extreme_points
+{
+
+template <std::size_t Dimension>
+struct compare
+{
+ template <typename Point>
+ inline bool operator()(Point const& lhs, Point const& rhs)
+ {
+ return geometry::get<Dimension>(lhs) < geometry::get<Dimension>(rhs);
+ }
+};
+
+
+template <std::size_t Dimension, typename PointType, typename CoordinateType>
+inline void move_along_vector(PointType& point, PointType const& extreme, CoordinateType const& base_value)
+{
+ // Moves a point along the vector (point, extreme) in the direction of the extreme point
+ // This adapts the possibly uneven legs of the triangle (or trapezium-like shape)
+ // _____extreme _____
+ // / \ / \ .
+ // /base \ => / \ point .
+ // \ point .
+ //
+ // For so-called intruders, it can be used to adapt both legs to the level of "base"
+ // For the base, it can be used to adapt both legs to the level of the max-value of the intruders
+ // If there are 2 or more extreme values, use the one close to 'point' to have a correct vector
+
+ CoordinateType const value = geometry::get<Dimension>(point);
+ //if (geometry::math::equals(value, base_value))
+ if (value >= base_value)
+ {
+ return;
+ }
+
+ PointType vector = point;
+ subtract_point(vector, extreme);
+
+ CoordinateType const diff = geometry::get<Dimension>(vector);
+
+ // diff should never be zero
+ // because of the way our triangle/trapezium is build.
+ // We just return if it would be the case.
+ if (geometry::math::equals(diff, 0))
+ {
+ return;
+ }
+
+ CoordinateType const base_diff = base_value - geometry::get<Dimension>(extreme);
+
+ multiply_value(vector, base_diff / diff);
+
+ // The real move:
+ point = extreme;
+ add_point(point, vector);
+}
+
+
+template <std::size_t Dimension, typename Range, typename CoordinateType>
+inline void move_along_vector(Range& range, CoordinateType const& base_value)
+{
+ if (range.size() >= 3)
+ {
+ move_along_vector<Dimension>(range.front(), *(range.begin() + 1), base_value);
+ move_along_vector<Dimension>(range.back(), *(range.rbegin() + 1), base_value);
+ }
+}
+
+
+template<typename Ring, std::size_t Dimension>
+struct extreme_points_on_ring
+{
+
+ typedef typename geometry::coordinate_type<Ring>::type coordinate_type;
+ typedef typename boost::range_iterator<Ring const>::type range_iterator;
+ typedef typename geometry::point_type<Ring>::type point_type;
+
+ typedef typename geometry::strategy::side::services::default_strategy
+ <
+ typename geometry::cs_tag<point_type>::type
+ >::type side_strategy;
+
+
+ template <typename CirclingIterator, typename Points>
+ static inline bool extend(CirclingIterator& it,
+ std::size_t n,
+ coordinate_type max_coordinate_value,
+ Points& points, int direction)
+ {
+ std::size_t safe_index = 0;
+ do
+ {
+ it += direction;
+
+ points.push_back(*it);
+
+ if (safe_index++ >= n)
+ {
+ // E.g.: ring is completely horizontal or vertical (= invalid, but we don't want to have an infinite loop)
+ return false;
+ }
+ } while (geometry::math::equals(geometry::get<Dimension>(*it), max_coordinate_value));
+
+ return true;
+ }
+
+ // Overload without adding to poinst
+ template <typename CirclingIterator>
+ static inline bool extend(CirclingIterator& it,
+ std::size_t n,
+ coordinate_type max_coordinate_value,
+ int direction)
+ {
+ std::size_t safe_index = 0;
+ do
+ {
+ it += direction;
+
+ if (safe_index++ >= n)
+ {
+ // E.g.: ring is completely horizontal or vertical (= invalid, but we don't want to have an infinite loop)
+ return false;
+ }
+ } while (geometry::math::equals(geometry::get<Dimension>(*it), max_coordinate_value));
+
+ return true;
+ }
+
+ template <typename CirclingIterator>
+ static inline bool extent_both_sides(Ring const& ring,
+ point_type extreme,
+ CirclingIterator& left,
+ CirclingIterator& right)
+ {
+ std::size_t const n = boost::size(ring);
+ coordinate_type const max_coordinate_value = geometry::get<Dimension>(extreme);
+
+ if (! extend(left, n, max_coordinate_value, -1))
+ {
+ return false;
+ }
+ if (! extend(right, n, max_coordinate_value, +1))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ template <typename Collection, typename CirclingIterator>
+ static inline bool collect(Ring const& ring,
+ point_type extreme,
+ Collection& points,
+ CirclingIterator& left,
+ CirclingIterator& right)
+ {
+ std::size_t const n = boost::size(ring);
+ coordinate_type const max_coordinate_value = geometry::get<Dimension>(extreme);
+
+ // Collects first left, which is reversed (if more than one point) then adds the top itself, then right
+ if (! extend(left, n, max_coordinate_value, points, -1))
+ {
+ return false;
+ }
+ std::reverse(points.begin(), points.end());
+ points.push_back(extreme);
+ if (! extend(right, n, max_coordinate_value, points, +1))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ template <typename Extremes, typename Intruders, typename CirclingIterator>
+ static inline void get_intruders(Ring const& ring, CirclingIterator left, CirclingIterator right,
+ Extremes const& extremes,
+ Intruders& intruders)
+ {
+ if (boost::size(extremes) < 3)
+ {
+ return;
+ }
+ coordinate_type const min_value = geometry::get<Dimension>(*std::min_element(boost::begin(extremes), boost::end(extremes), compare<Dimension>()));
+
+ // Also select left/right (if Dimension=1)
+ coordinate_type const other_min = geometry::get<1 - Dimension>(*std::min_element(boost::begin(extremes), boost::end(extremes), compare<1 - Dimension>()));
+ coordinate_type const other_max = geometry::get<1 - Dimension>(*std::max_element(boost::begin(extremes), boost::end(extremes), compare<1 - Dimension>()));
+
+ std::size_t defensive_check_index = 0; // in case we skip over left/right check, collect modifies right too
+ std::size_t const n = boost::size(ring);
+ while (left != right && defensive_check_index < n)
+ {
+ coordinate_type const coordinate = geometry::get<Dimension>(*right);
+ coordinate_type const other_coordinate = geometry::get<1 - Dimension>(*right);
+ if (coordinate > min_value && other_coordinate > other_min && other_coordinate < other_max)
+ {
+ int const first_side = side_strategy::apply(*right, extremes.front(), *(extremes.begin() + 1));
+ int const last_side = side_strategy::apply(*right, *(extremes.rbegin() + 1), extremes.back());
+
+ // If not lying left from any of the extemes side
+ if (first_side != 1 && last_side != 1)
+ {
+ //std::cout << "first " << first_side << " last " << last_side << std::endl;
+
+ // we start at this intrusion until it is handled, and don't affect our initial left iterator
+ CirclingIterator left_intrusion_it = right;
+ typename boost::range_value<Intruders>::type intruder;
+ collect(ring, *right, intruder, left_intrusion_it, right);
+
+ // Also moves these to base-level, makes sorting possible which can be done in case of self-tangencies
+ // (we might postpone this action, it is often not necessary. However it is not time-consuming)
+ move_along_vector<Dimension>(intruder, min_value);
+ intruders.push_back(intruder);
+ --right;
+ }
+ }
+ ++right;
+ defensive_check_index++;
+ }
+ }
+
+ template <typename Extremes, typename Intruders>
+ static inline void get_intruders(Ring const& ring,
+ Extremes const& extremes,
+ Intruders& intruders)
+ {
+ std::size_t const n = boost::size(ring);
+ if (n >= 3)
+ {
+ geometry::ever_circling_range_iterator<Ring const> left(ring);
+ geometry::ever_circling_range_iterator<Ring const> right(ring);
+ ++right;
+
+ get_intruders(ring, left, right, extremes, intruders);
+ }
+ }
+
+ template <typename Iterator>
+ static inline bool right_turn(Ring const& ring, Iterator it)
+ {
+ int const index = std::distance(boost::begin(ring), it);
+ geometry::ever_circling_range_iterator<Ring const> left(ring);
+ geometry::ever_circling_range_iterator<Ring const> right(ring);
+ left += index;
+ right += index;
+
+ if (! extent_both_sides(ring, *it, left, right))
+ {
+ return false;
+ }
+
+ int const first_side = side_strategy::apply(*(right - 1), *right, *left);
+ int const last_side = side_strategy::apply(*left, *(left + 1), *right);
+
+//std::cout << "Candidate at " << geometry::wkt(*it) << " first=" << first_side << " last=" << last_side << std::endl;
+
+ // Turn should not be left (actually, it should be right because extent removes horizontal/collinear cases)
+ return first_side != 1 && last_side != 1;
+ }
+
+
+ // Gets the extreme segments (top point plus neighbouring points), plus intruders, if any, on the same ring
+ template <typename Extremes, typename Intruders>
+ static inline bool apply(Ring const& ring, Extremes& extremes, Intruders& intruders)
+ {
+ std::size_t const n = boost::size(ring);
+ if (n < 3)
+ {
+ return false;
+ }
+
+ // Get all maxima, usually one. In case of self-tangencies, or self-crossings,
+ // the max might be is not valid. A valid max should make a right turn
+ range_iterator max_it = boost::begin(ring);
+ compare<Dimension> smaller;
+ for (range_iterator it = max_it + 1; it != boost::end(ring); ++it)
+ {
+ if (smaller(*max_it, *it) && right_turn(ring, it))
+ {
+ max_it = it;
+ }
+ }
+
+ if (max_it == boost::end(ring))
+ {
+ return false;
+ }
+
+ int const index = std::distance(boost::begin(ring), max_it);
+//std::cout << "Extreme point lies at " << index << " having " << geometry::wkt(*max_it) << std::endl;
+
+ geometry::ever_circling_range_iterator<Ring const> left(ring);
+ geometry::ever_circling_range_iterator<Ring const> right(ring);
+ left += index;
+ right += index;
+
+ // Collect all points (often 3) in a temporary vector
+ std::vector<point_type> points;
+ points.reserve(3);
+ if (! collect(ring, *max_it, points, left, right))
+ {
+ return false;
+ }
+
+//std::cout << "Built vector of " << points.size() << std::endl;
+
+ coordinate_type const front_value = geometry::get<Dimension>(points.front());
+ coordinate_type const back_value = geometry::get<Dimension>(points.back());
+ coordinate_type const base_value = (std::max)(front_value, back_value);
+ if (front_value < back_value)
+ {
+ move_along_vector<Dimension>(points.front(), *(points.begin() + 1), base_value);
+ }
+ else
+ {
+ move_along_vector<Dimension>(points.back(), *(points.rbegin() + 1), base_value);
+ }
+
+ std::copy(points.begin(), points.end(), std::back_inserter(extremes));
+
+ get_intruders(ring, left, right, extremes, intruders);
+
+ return true;
+ }
+};
+
+
+
+
+
+}} // namespace detail::extreme_points
+#endif // DOXYGEN_NO_DETAIL
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template
+<
+ typename Geometry,
+ std::size_t Dimension,
+ typename GeometryTag = typename tag<Geometry>::type
+>
+struct extreme_points
+{};
+
+
+template<typename Ring, std::size_t Dimension>
+struct extreme_points<Ring, Dimension, ring_tag>
+ : detail::extreme_points::extreme_points_on_ring<Ring, Dimension>
+{};
+
+
+template<typename Polygon, std::size_t Dimension>
+struct extreme_points<Polygon, Dimension, polygon_tag>
+{
+ template <typename Extremes, typename Intruders>
+ static inline bool apply(Polygon const& polygon, Extremes& extremes, Intruders& intruders)
+ {
+ typedef typename geometry::ring_type<Polygon>::type ring_type;
+ typedef detail::extreme_points::extreme_points_on_ring
+ <
+ ring_type, Dimension
+ > ring_implementation;
+
+ if (! ring_implementation::apply(geometry::exterior_ring(polygon), extremes, intruders))
+ {
+ return false;
+ }
+
+ // For a polygon, its interior rings can contain intruders
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(polygon);
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
+ {
+ ring_implementation::get_intruders(*it, extremes, intruders);
+ }
+
+ return true;
+ }
+};
+
+template<typename Box>
+struct extreme_points<Box, 1, box_tag>
+{
+ template <typename Extremes, typename Intruders>
+ static inline bool apply(Box const& box, Extremes& extremes, Intruders& )
+ {
+ extremes.resize(4);
+ geometry::detail::assign_box_corners_oriented<false>(box, extremes);
+ // ll,ul,ur,lr, contains too exactly the right info
+ return true;
+ }
+};
+
+template<typename Box>
+struct extreme_points<Box, 0, box_tag>
+{
+ template <typename Extremes, typename Intruders>
+ static inline bool apply(Box const& box, Extremes& extremes, Intruders& )
+ {
+ extremes.resize(4);
+ geometry::detail::assign_box_corners_oriented<false>(box, extremes);
+ // ll,ul,ur,lr, rotate one to start with UL and end with LL
+ std::rotate(extremes.begin(), extremes.begin() + 1, extremes.end());
+ return true;
+ }
+};
+
+template<typename MultiPolygon, std::size_t Dimension>
+struct extreme_points<MultiPolygon, Dimension, multi_polygon_tag>
+{
+ template <typename Extremes, typename Intruders>
+ static inline bool apply(MultiPolygon const& multi, Extremes& extremes, Intruders& intruders)
+ {
+ // Get one for the very first polygon, that is (for the moment) enough.
+ // It is not guaranteed the "extreme" then, but for the current purpose
+ // (point_on_surface) it can just be this point.
+ if (boost::size(multi) >= 1)
+ {
+ return extreme_points
+ <
+ typename boost::range_value<MultiPolygon const>::type,
+ Dimension,
+ polygon_tag
+ >::apply(*boost::begin(multi), extremes, intruders);
+ }
+
+ return false;
+ }
+};
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+/*!
+\brief Returns extreme points (for Edge=1 in dimension 1, so the top,
+ for Edge=0 in dimension 0, the right side)
+\note We could specify a strategy (less/greater) to get bottom/left side too. However, until now we don't need that.
+ */
+template <std::size_t Edge, typename Geometry, typename Extremes, typename Intruders>
+inline bool extreme_points(Geometry const& geometry, Extremes& extremes, Intruders& intruders)
+{
+ concept::check<Geometry const>();
+
+ // Extremes is not required to follow a geometry concept (but it should support an output iterator),
+ // but its elements should fulfil the point-concept
+ concept::check<typename boost::range_value<Extremes>::type>();
+
+ // Intruders should contain collections which value type is point-concept
+ // Extremes might be anything (supporting an output iterator), but its elements should fulfil the point-concept
+ concept::check
+ <
+ typename boost::range_value
+ <
+ typename boost::range_value<Intruders>::type
+ >::type
+ const
+ >();
+
+ return dispatch::extreme_points<Geometry, Edge>::apply(geometry, extremes, intruders);
+}
+
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/for_each_range.hpp b/3party/boost/boost/geometry/algorithms/detail/for_each_range.hpp
index 7cb01fa9b4..e8c92160f1 100644
--- a/3party/boost/boost/geometry/algorithms/detail/for_each_range.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/for_each_range.hpp
@@ -17,9 +17,13 @@
#include <boost/mpl/assert.hpp>
#include <boost/concept/requires.hpp>
+#include <boost/range.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
#include <boost/geometry/core/tag.hpp>
#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/util/add_const_if_c.hpp>
#include <boost/geometry/views/box_view.hpp>
@@ -34,24 +38,20 @@ namespace detail { namespace for_each
{
-template <typename Range, typename Actor, bool IsConst>
+template <typename Range, typename Actor>
struct fe_range_range
{
- static inline void apply(
- typename add_const_if_c<IsConst, Range>::type& range,
- Actor& actor)
+ static inline void apply(Range & range, Actor & actor)
{
actor.apply(range);
}
};
-template <typename Polygon, typename Actor, bool IsConst>
+template <typename Polygon, typename Actor>
struct fe_range_polygon
{
- static inline void apply(
- typename add_const_if_c<IsConst, Polygon>::type& polygon,
- Actor& actor)
+ static inline void apply(Polygon & polygon, Actor & actor)
{
actor.apply(exterior_ring(polygon));
@@ -60,17 +60,27 @@ struct fe_range_polygon
}
};
-template <typename Box, typename Actor, bool IsConst>
+template <typename Box, typename Actor>
struct fe_range_box
{
- static inline void apply(
- typename add_const_if_c<IsConst, Box>::type& box,
- Actor& actor)
+ static inline void apply(Box & box, Actor & actor)
{
- actor.apply(box_view<Box>(box));
+ actor.apply(box_view<typename boost::remove_const<Box>::type>(box));
}
};
+template <typename Multi, typename Actor, typename SinglePolicy>
+struct fe_range_multi
+{
+ static inline void apply(Multi & multi, Actor & actor)
+ {
+ for ( typename boost::range_iterator<Multi>::type
+ it = boost::begin(multi); it != boost::end(multi); ++it)
+ {
+ SinglePolicy::apply(*it, actor);
+ }
+ }
+};
}} // namespace detail::for_each
#endif // DOXYGEN_NO_DETAIL
@@ -83,10 +93,9 @@ namespace dispatch
template
<
- typename Tag,
typename Geometry,
typename Actor,
- bool IsConst
+ typename Tag = typename tag<Geometry>::type
>
struct for_each_range
{
@@ -98,26 +107,71 @@ struct for_each_range
};
-template <typename Linestring, typename Actor, bool IsConst>
-struct for_each_range<linestring_tag, Linestring, Actor, IsConst>
- : detail::for_each::fe_range_range<Linestring, Actor, IsConst>
+template <typename Linestring, typename Actor>
+struct for_each_range<Linestring, Actor, linestring_tag>
+ : detail::for_each::fe_range_range<Linestring, Actor>
+{};
+
+
+template <typename Ring, typename Actor>
+struct for_each_range<Ring, Actor, ring_tag>
+ : detail::for_each::fe_range_range<Ring, Actor>
+{};
+
+
+template <typename Polygon, typename Actor>
+struct for_each_range<Polygon, Actor, polygon_tag>
+ : detail::for_each::fe_range_polygon<Polygon, Actor>
+{};
+
+
+template <typename Box, typename Actor>
+struct for_each_range<Box, Actor, box_tag>
+ : detail::for_each::fe_range_box<Box, Actor>
{};
-template <typename Ring, typename Actor, bool IsConst>
-struct for_each_range<ring_tag, Ring, Actor, IsConst>
- : detail::for_each::fe_range_range<Ring, Actor, IsConst>
+template <typename MultiPoint, typename Actor>
+struct for_each_range<MultiPoint, Actor, multi_point_tag>
+ : detail::for_each::fe_range_range<MultiPoint, Actor>
{};
-template <typename Polygon, typename Actor, bool IsConst>
-struct for_each_range<polygon_tag, Polygon, Actor, IsConst>
- : detail::for_each::fe_range_polygon<Polygon, Actor, IsConst>
+template <typename Geometry, typename Actor>
+struct for_each_range<Geometry, Actor, multi_linestring_tag>
+ : detail::for_each::fe_range_multi
+ <
+ Geometry,
+ Actor,
+ detail::for_each::fe_range_range
+ <
+ typename add_const_if_c
+ <
+ boost::is_const<Geometry>::value,
+ typename boost::range_value<Geometry>::type
+ >::type,
+ Actor
+ >
+ >
{};
-template <typename Box, typename Actor, bool IsConst>
-struct for_each_range<box_tag, Box, Actor, IsConst>
- : detail::for_each::fe_range_box<Box, Actor, IsConst>
+
+template <typename Geometry, typename Actor>
+struct for_each_range<Geometry, Actor, multi_polygon_tag>
+ : detail::for_each::fe_range_multi
+ <
+ Geometry,
+ Actor,
+ detail::for_each::fe_range_polygon
+ <
+ typename add_const_if_c
+ <
+ boost::is_const<Geometry>::value,
+ typename boost::range_value<Geometry>::type
+ >::type,
+ Actor
+ >
+ >
{};
@@ -128,14 +182,12 @@ namespace detail
{
template <typename Geometry, typename Actor>
-inline void for_each_range(Geometry const& geometry, Actor& actor)
+inline void for_each_range(Geometry const& geometry, Actor & actor)
{
dispatch::for_each_range
<
- typename tag<Geometry>::type,
- Geometry,
- Actor,
- true
+ Geometry const,
+ Actor
>::apply(geometry, actor);
}
diff --git a/3party/boost/boost/geometry/algorithms/detail/get_left_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/get_left_turns.hpp
index d23f1e4c27..deb2aaf59d 100644
--- a/3party/boost/boost/geometry/algorithms/detail/get_left_turns.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/get_left_turns.hpp
@@ -1,6 +1,6 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,7 +9,12 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP
+#include <boost/geometry/arithmetic/arithmetic.hpp>
+#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/iterators/closing_iterator.hpp>
#include <boost/geometry/iterators/ever_circling_iterator.hpp>
+#include <boost/geometry/strategies/side.hpp>
namespace boost { namespace geometry
{
@@ -21,347 +26,262 @@ namespace detail
// TODO: move this to /util/
template <typename T>
-static inline std::pair<T, T> ordered_pair(T const& first, T const& second)
+inline std::pair<T, T> ordered_pair(T const& first, T const& second)
{
return first < second ? std::make_pair(first, second) : std::make_pair(second, first);
}
-template <typename AngleInfo>
-inline void debug_left_turn(AngleInfo const& ai, AngleInfo const& previous)
+namespace left_turns
{
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION
- std::cout << "Angle: " << (ai.incoming ? "i" : "o")
- << " " << si(ai.seg_id)
- << " " << (math::r2d * (ai.angle) )
- << " turn: " << ai.turn_index << "[" << ai.operation_index << "]"
- ;
- if (ai.turn_index != previous.turn_index
- || ai.operation_index != previous.operation_index)
+template <typename Point>
+struct turn_angle_info
+{
+ segment_identifier seg_id;
+ int turn_index;
+ Point points[2];
+
+ turn_angle_info(segment_identifier const& id, Point const& from, Point const& to)
+ : seg_id(id)
+ , turn_index(-1)
{
- std::cout << " diff: " << math::r2d * math::abs(previous.angle - ai.angle);
+ points[0] = from;
+ points[1] = to;
}
- std::cout << std::endl;
-#endif
-}
+};
-template <typename AngleInfo>
-inline void debug_left_turn(std::string const& caption, AngleInfo const& ai, AngleInfo const& previous,
- int code = -99, int code2 = -99, int code3 = -99, int code4 = -99)
-{
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION
- std::cout << " " << caption
- << " turn: " << ai.turn_index << "[" << ai.operation_index << "]"
- << " " << si(ai.seg_id)
- << " " << (ai.incoming ? "i" : "o")
- << " " << (math::r2d * (ai.angle) )
- << " turn: " << previous.turn_index << "[" << previous.operation_index << "]"
- << " " << si(previous.seg_id)
- << " " << (previous.incoming ? "i" : "o")
- << " " << (math::r2d * (previous.angle) )
- ;
- if (code != -99)
+template <typename Point>
+struct angle_info
+{
+ segment_identifier seg_id;
+ Point point;
+ bool incoming;
+ bool blocked;
+
+ inline angle_info(segment_identifier const& id, bool inc, Point const& p)
+ : seg_id(id)
+ , point(p)
+ , incoming(inc)
+ , blocked(false)
{
- std::cout << " code: " << code << " , " << code2 << " , " << code3 << " , " << code4;
}
- std::cout << std::endl;
-#endif
-}
-
+};
-template <typename Operation>
-inline bool include_operation(Operation const& op,
- segment_identifier const& outgoing_seg_id,
- segment_identifier const& incoming_seg_id)
+template <typename Vector>
+inline int get_quadrant(Vector const& vector)
{
- return op.seg_id == outgoing_seg_id
- && op.other_id == incoming_seg_id
- && (op.operation == detail::overlay::operation_union
- ||op.operation == detail::overlay::operation_continue)
- ;
+ // Return quadrant as layouted in the code below:
+ // 3 | 0
+ // -----
+ // 2 | 1
+ return geometry::get<1>(vector) >= 0
+ ? (geometry::get<0>(vector) < 0 ? 3 : 0)
+ : (geometry::get<0>(vector) < 0 ? 2 : 1)
+ ;
}
-template <typename Turn>
-inline bool process_include(segment_identifier const& outgoing_seg_id, segment_identifier const& incoming_seg_id,
- int turn_index, Turn& turn,
- std::set<int>& keep_indices, int priority)
+template <typename Vector>
+inline int squared_length(Vector const& vector)
{
- bool result = false;
- for (int i = 0; i < 2; i++)
- {
- if (include_operation(turn.operations[i], outgoing_seg_id, incoming_seg_id))
- {
- turn.operations[i].include_in_occupation_map = true;
- if (priority > turn.priority)
- {
- turn.priority = priority;
- }
- keep_indices.insert(turn_index);
- result = true;
- }
- }
- return result;
+ return geometry::get<0>(vector) * geometry::get<0>(vector)
+ + geometry::get<1>(vector) * geometry::get<1>(vector)
+ ;
}
-template <typename AngleInfo, typename Turns, typename TurnSegmentIndices>
-inline bool include_left_turn_of_all(
- AngleInfo const& outgoing, AngleInfo const& incoming,
- Turns& turns, TurnSegmentIndices const& turn_segment_indices,
- std::set<int>& keep_indices, int priority)
+
+template <typename Point>
+struct angle_less
{
- segment_identifier const& outgoing_seg_id = turns[outgoing.turn_index].operations[outgoing.operation_index].seg_id;
- segment_identifier const& incoming_seg_id = turns[incoming.turn_index].operations[incoming.operation_index].seg_id;
+ typedef Point vector_type;
+ typedef typename strategy::side::services::default_strategy
+ <
+ typename cs_tag<Point>::type
+ >::type side_strategy_type;
- if (outgoing.turn_index == incoming.turn_index)
- {
- return process_include(outgoing_seg_id, incoming_seg_id, outgoing.turn_index, turns[outgoing.turn_index], keep_indices, priority);
- }
+ angle_less(Point const& origin)
+ : m_origin(origin)
+ {}
- bool result = false;
- std::pair<segment_identifier, segment_identifier> pair = ordered_pair(outgoing_seg_id, incoming_seg_id);
- typename boost::range_iterator<TurnSegmentIndices const>::type it = turn_segment_indices.find(pair);
- if (it != turn_segment_indices.end())
+ template <typename Angle>
+ inline bool operator()(Angle const& p, Angle const& q) const
{
- for (std::set<int>::const_iterator sit = it->second.begin(); sit != it->second.end(); ++sit)
+ // Vector origin -> p and origin -> q
+ vector_type pv = p.point;
+ vector_type qv = q.point;
+ geometry::subtract_point(pv, m_origin);
+ geometry::subtract_point(qv, m_origin);
+
+ int const quadrant_p = get_quadrant(pv);
+ int const quadrant_q = get_quadrant(qv);
+ if (quadrant_p != quadrant_q)
{
- if (process_include(outgoing_seg_id, incoming_seg_id, *sit, turns[*sit], keep_indices, priority))
- {
- result = true;
- }
+ return quadrant_p < quadrant_q;
+ }
+ // Same quadrant, check if p is located left of q
+ int const side = side_strategy_type::apply(m_origin, q.point,
+ p.point);
+ if (side != 0)
+ {
+ return side == 1;
+ }
+ // Collinear, check if one is incoming
+ if (p.incoming != q.incoming)
+ {
+ return int(p.incoming) < int(q.incoming);
+ }
+ // Same quadrant/side/direction, return longest first
+ int const length_p = squared_length(pv);
+ int const length_q = squared_length(qv);
+ if (length_p != length_q)
+ {
+ return squared_length(pv) > squared_length(qv);
}
+ // They are still the same. Just compare on seg_id
+ return p.seg_id < q.seg_id;
}
- return result;
-}
-template <std::size_t Index, typename Turn>
-inline bool corresponds(Turn const& turn, segment_identifier const& seg_id)
+private:
+ Point m_origin;
+};
+
+template <typename Point>
+struct angle_equal_to
{
- return turn.operations[Index].operation == detail::overlay::operation_union
- && turn.operations[Index].seg_id == seg_id;
-}
+ typedef Point vector_type;
+ typedef typename strategy::side::services::default_strategy
+ <
+ typename cs_tag<Point>::type
+ >::type side_strategy_type;
+ inline angle_equal_to(Point const& origin)
+ : m_origin(origin)
+ {}
-template <typename Turns, typename TurnSegmentIndices>
-inline bool prefer_by_other(Turns const& turns,
- TurnSegmentIndices const& turn_segment_indices,
- std::set<int>& indices)
-{
- std::map<segment_identifier, int> map;
- for (std::set<int>::const_iterator sit = indices.begin();
- sit != indices.end();
- ++sit)
+ template <typename Angle>
+ inline bool operator()(Angle const& p, Angle const& q) const
{
- map[turns[*sit].operations[0].seg_id]++;
- map[turns[*sit].operations[1].seg_id]++;
- }
+ // Vector origin -> p and origin -> q
+ vector_type pv = p.point;
+ vector_type qv = q.point;
+ geometry::subtract_point(pv, m_origin);
+ geometry::subtract_point(qv, m_origin);
- std::set<segment_identifier> segment_occuring_once;
- for (std::map<segment_identifier, int>::const_iterator mit = map.begin();
- mit != map.end();++mit)
- {
- if (mit->second == 1)
+ if (get_quadrant(pv) != get_quadrant(qv))
{
- segment_occuring_once.insert(mit->first);
+ return false;
}
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_PREFER
- std::cout << si(mit->first) << " " << mit->second << std::endl;
-#endif
+ // Same quadrant, check if p/q are collinear
+ int const side = side_strategy_type::apply(m_origin, q.point,
+ p.point);
+ return side == 0;
}
- if (segment_occuring_once.size() == 2)
- {
- // Try to find within all turns a turn with these two segments
+private:
+ Point m_origin;
+};
- std::set<segment_identifier>::const_iterator soo_it = segment_occuring_once.begin();
- segment_identifier front = *soo_it;
- soo_it++;
- segment_identifier back = *soo_it;
+struct left_turn
+{
+ segment_identifier from;
+ segment_identifier to;
+};
- std::pair<segment_identifier, segment_identifier> pair = ordered_pair(front, back);
- typename boost::range_iterator<TurnSegmentIndices const>::type it = turn_segment_indices.find(pair);
- if (it != turn_segment_indices.end())
- {
- // debug_turns_by_indices("Found", it->second);
- // Check which is the union/continue
- segment_identifier good;
- for (std::set<int>::const_iterator sit = it->second.begin(); sit != it->second.end(); ++sit)
- {
- if (turns[*sit].operations[0].operation == detail::overlay::operation_union)
- {
- good = turns[*sit].operations[0].seg_id;
- }
- else if (turns[*sit].operations[1].operation == detail::overlay::operation_union)
- {
- good = turns[*sit].operations[1].seg_id;
- }
- }
-
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_PREFER
- std::cout << "Good: " << si(good) << std::endl;
-#endif
+template <typename Point, typename AngleCollection, typename OutputCollection>
+inline void get_left_turns(AngleCollection const& sorted_angles, Point const& origin,
+ OutputCollection& output_collection)
+{
+ angle_equal_to<Point> comparator(origin);
+ typedef geometry::closing_iterator<AngleCollection const> closing_iterator;
+ closing_iterator it(sorted_angles);
+ closing_iterator end(sorted_angles, true);
- // Find in indexes-to-keep this segment with the union. Discard the other one
- std::set<int> ok_indices;
- for (std::set<int>::const_iterator sit = indices.begin(); sit != indices.end(); ++sit)
- {
- if (corresponds<0>(turns[*sit], good) || corresponds<1>(turns[*sit], good))
- {
- ok_indices.insert(*sit);
- }
- }
- if (ok_indices.size() > 0 && ok_indices.size() < indices.size())
+ closing_iterator previous = it++;
+ for( ; it != end; previous = it++)
+ {
+ if (! it->blocked)
+ {
+ bool equal = comparator(*previous, *it);
+ bool include = ! equal
+ && previous->incoming
+ && !it->incoming;
+ if (include)
{
- indices = ok_indices;
- std::cout << "^";
- return true;
+ left_turn turn;
+ turn.from = previous->seg_id;
+ turn.to = it->seg_id;
+ output_collection.push_back(turn);
}
}
}
- return false;
}
-template <typename Turns>
-inline void prefer_by_priority(Turns const& turns, std::set<int>& indices)
+template <typename AngleTurnCollection, typename AngleCollection>
+inline void block_turns_on_right_sides(AngleTurnCollection const& turns,
+ AngleCollection& sorted)
{
- // Find max prio
- int min_prio = 1024, max_prio = 0;
- for (std::set<int>::const_iterator sit = indices.begin(); sit != indices.end(); ++sit)
+ // Create a small (seg_id -> index) map for fast finding turns
+ std::map<segment_identifier, int> incoming;
+ std::map<segment_identifier, int> outgoing;
+ int index = 0;
+ for (typename boost::range_iterator<AngleCollection>::type it =
+ sorted.begin(); it != sorted.end(); ++it, ++index)
{
- if (turns[*sit].priority > max_prio)
+ if (it->incoming)
{
- max_prio = turns[*sit].priority;
+ incoming[it->seg_id] = index;
}
- if (turns[*sit].priority < min_prio)
- {
- min_prio = turns[*sit].priority;
- }
- }
-
- if (min_prio == max_prio)
- {
- return;
- }
-
- // Only keep indices with high prio
- std::set<int> ok_indices;
- for (std::set<int>::const_iterator sit = indices.begin(); sit != indices.end(); ++sit)
- {
- if (turns[*sit].priority >= max_prio)
+ else
{
- ok_indices.insert(*sit);
+ outgoing[it->seg_id] = index;
}
}
- if (ok_indices.size() > 0 && ok_indices.size() < indices.size())
- {
- indices = ok_indices;
- std::cout << "%";
- }
-}
-
-template <typename AngleInfo, typename Angles, typename Turns, typename TurnSegmentIndices>
-inline void calculate_left_turns(Angles const& angles,
- Turns& turns, TurnSegmentIndices const& turn_segment_indices,
- std::set<int>& keep_indices)
-{
- bool debug_indicate_size = false;
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<typename AngleInfo::point_type>::type
- >::type side_strategy;
-
- std::size_t i = 0;
- std::size_t n = boost::size(angles);
-
- typedef geometry::ever_circling_range_iterator<Angles const> circling_iterator;
- circling_iterator cit(angles);
-
- debug_left_turn(*cit, *cit);
- for(circling_iterator prev = cit++; i < n; prev = cit++, i++)
+ // Walk through turns and block every outgoing angle on the right side
+ for (typename boost::range_iterator<AngleTurnCollection const>::type it =
+ turns.begin(); it != turns.end(); ++it)
{
- debug_left_turn(*cit, *prev);
-
- bool const include = ! geometry::math::equals(prev->angle, cit->angle)
- && ! prev->incoming
- && cit->incoming;
-
- if (include)
+ int incoming_index = incoming[it->seg_id];
+ int outgoing_index = outgoing[it->seg_id];
+ int index = incoming_index;
+ while(index != outgoing_index)
{
- // Go back to possibly include more same left outgoing angles:
- // Because we check on side too we can take a large "epsilon"
- circling_iterator back = prev - 1;
-
- typename AngleInfo::angle_type eps = 0.00001;
- int b = 1;
- for(std::size_t d = 0;
- math::abs(prev->angle - back->angle) < eps
- && ! back->incoming
- && d < n;
- d++)
+ if (!sorted[index].incoming)
{
- --back;
- ++b;
+ sorted[index].blocked = true;
}
- // Same but forward to possibly include more incoming angles
- int f = 1;
- circling_iterator forward = cit + 1;
- for(std::size_t d = 0;
- math::abs(cit->angle - forward->angle) < eps
- && forward->incoming
- && d < n;
- d++)
+ // Go back (circular)
+ index--;
+ if (index == -1)
{
- ++forward;
- ++f;
- }
-
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION
- std::cout << "HANDLE " << b << "/" << f << " ANGLES" << std::endl;
-#endif
- for(circling_iterator bit = prev; bit != back; --bit)
- {
- int code = side_strategy::apply(bit->direction_point, prev->intersection_point, prev->direction_point);
- int code2 = side_strategy::apply(prev->direction_point, bit->intersection_point, bit->direction_point);
- for(circling_iterator fit = cit; fit != forward; ++fit)
- {
- int code3 = side_strategy::apply(fit->direction_point, cit->intersection_point, cit->direction_point);
- int code4 = side_strategy::apply(cit->direction_point, fit->intersection_point, fit->direction_point);
-
- int priority = 2;
- if (code == -1 && code2 == 1)
- {
- // This segment is lying right of the other one.
- // Cannot ignore it (because of robustness, see a.o. #rt_p21 from unit test).
- // But if we find more we can prefer later by priority
- // (a.o. necessary for #rt_o2 from unit test)
- priority = 1;
- }
-
- bool included = include_left_turn_of_all(*bit, *fit, turns, turn_segment_indices, keep_indices, priority);
- debug_left_turn(included ? "KEEP" : "SKIP", *fit, *bit, code, code2, code3, code4);
- }
+ index = boost::size(sorted) - 1;
}
}
}
+}
- if (debug_indicate_size)
- {
- std::cout << " size=" << keep_indices.size();
- }
-
- if (keep_indices.size() >= 2)
- {
- prefer_by_other(turns, turn_segment_indices, keep_indices);
- }
- if (keep_indices.size() >= 2)
+template <typename AngleCollection, typename Point>
+inline bool has_rounding_issues(AngleCollection const& angles, Point const& origin)
+{
+ for (typename boost::range_iterator<AngleCollection const>::type it =
+ angles.begin(); it != angles.end(); ++it)
{
- prefer_by_priority(turns, keep_indices);
+ // Vector origin -> p and origin -> q
+ typedef Point vector_type;
+ vector_type v = it->point;
+ geometry::subtract_point(v, origin);
+ return geometry::math::abs(geometry::get<0>(v)) <= 1
+ || geometry::math::abs(geometry::get<1>(v)) <= 1
+ ;
}
+ return false;
}
+
+} // namespace left_turns
+
} // namespace detail
#endif // DOXYGEN_NO_DETAIL
diff --git a/3party/boost/boost/geometry/algorithms/detail/get_max_size.hpp b/3party/boost/boost/geometry/algorithms/detail/get_max_size.hpp
new file mode 100644
index 0000000000..8ac43e78b8
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/get_max_size.hpp
@@ -0,0 +1,64 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_MAX_SIZE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_MAX_SIZE_HPP
+
+
+#include <cstddef>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/util/math.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+template <typename Box, std::size_t Dimension>
+struct get_max_size_box
+{
+ static inline typename coordinate_type<Box>::type apply(Box const& box)
+ {
+ typename coordinate_type<Box>::type s
+ = geometry::math::abs(geometry::get<1, Dimension>(box) - geometry::get<0, Dimension>(box));
+
+ return (std::max)(s, get_max_size_box<Box, Dimension - 1>::apply(box));
+ }
+};
+
+template <typename Box>
+struct get_max_size_box<Box, 0>
+{
+ static inline typename coordinate_type<Box>::type apply(Box const& box)
+ {
+ return geometry::math::abs(geometry::get<1, 0>(box) - geometry::get<0, 0>(box));
+ }
+};
+
+// This might be implemented later on for other geometries too.
+// Not dispatched yet.
+template <typename Box>
+inline typename coordinate_type<Box>::type get_max_size(Box const& box)
+{
+ return get_max_size_box<Box, dimension<Box>::value - 1>::apply(box);
+}
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_MAX_SIZE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp b/3party/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp
index 1e6215ed93..24746ac627 100644
--- a/3party/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp
@@ -17,7 +17,10 @@
#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp>
+#include <boost/geometry/policies/disjoint_interrupt_policy.hpp>
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
+#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
#ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS
# include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
@@ -56,26 +59,33 @@ namespace detail { namespace overlay
{
-template <typename Geometry>
-inline bool has_self_intersections(Geometry const& geometry)
+template <typename Geometry, typename RobustPolicy>
+inline bool has_self_intersections(Geometry const& geometry,
+ RobustPolicy const& robust_policy,
+ bool throw_on_self_intersection = true)
{
typedef typename point_type<Geometry>::type point_type;
- typedef detail::overlay::turn_info<point_type> turn_info;
+ typedef turn_info
+ <
+ point_type,
+ typename segment_ratio_type<point_type, RobustPolicy>::type
+ > turn_info;
std::deque<turn_info> turns;
detail::disjoint::disjoint_interrupt_policy policy;
- geometry::self_turns<detail::overlay::assign_null_policy>(geometry, turns, policy);
-
+
+ geometry::self_turns<detail::overlay::assign_null_policy>(geometry, robust_policy, turns, policy);
+
#ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS
bool first = true;
-#endif
- for(typename std::deque<turn_info>::const_iterator it = boost::begin(turns);
+#endif
+ for(typename std::deque<turn_info>::const_iterator it = boost::begin(turns);
it != boost::end(turns); ++it)
{
turn_info const& info = *it;
- bool const both_union_turn =
+ bool const both_union_turn =
info.operations[0].operation == detail::overlay::operation_union
&& info.operations[1].operation == detail::overlay::operation_union;
- bool const both_intersection_turn =
+ bool const both_intersection_turn =
info.operations[0].operation == detail::overlay::operation_intersection
&& info.operations[1].operation == detail::overlay::operation_intersection;
@@ -95,19 +105,40 @@ inline bool has_self_intersections(Geometry const& geometry)
for (int i = 0; i < 2; i++)
{
std::cout << " " << operation_char(info.operations[i].operation);
+ std::cout << " " << info.operations[i].seg_id;
}
std::cout << " " << geometry::dsv(info.point) << std::endl;
#endif
#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
- throw overlay_invalid_input_exception();
+ if (throw_on_self_intersection)
+ {
+ throw overlay_invalid_input_exception();
+ }
#endif
+ return true;
}
}
return false;
}
+// For backward compatibility
+template <typename Geometry>
+inline bool has_self_intersections(Geometry const& geometry,
+ bool throw_on_self_intersection = true)
+{
+ typedef typename geometry::point_type<Geometry>::type point_type;
+ typedef typename geometry::rescale_policy_type<point_type>::type
+ rescale_policy_type;
+
+ rescale_policy_type robust_policy
+ = geometry::get_rescale_policy<rescale_policy_type>(geometry);
+
+ return has_self_intersections(geometry, robust_policy,
+ throw_on_self_intersection);
+}
+
}} // namespace detail::overlay
#endif // DOXYGEN_NO_DETAIL
diff --git a/3party/boost/boost/geometry/algorithms/detail/interior_iterator.hpp b/3party/boost/boost/geometry/algorithms/detail/interior_iterator.hpp
new file mode 100644
index 0000000000..3582773c3d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/interior_iterator.hpp
@@ -0,0 +1,71 @@
+// Boost.Geometry
+
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERIOR_ITERATOR_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERIOR_ITERATOR_HPP
+
+#include <boost/range/iterator.hpp>
+#include <boost/range/value_type.hpp>
+
+#include <boost/geometry/core/interior_type.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+/*!
+\brief Structure defining the type of interior rings iterator
+\note If the Geometry is const, const iterator is defined.
+\tparam Geometry \tparam_geometry
+ */
+template <typename Geometry>
+struct interior_iterator
+{
+ typedef typename boost::range_iterator
+ <
+ typename geometry::interior_type<Geometry>::type
+ >::type type;
+};
+
+template <typename BaseT, typename T>
+struct copy_const
+{
+ typedef T type;
+};
+
+template <typename BaseT, typename T>
+struct copy_const<BaseT const, T>
+{
+ typedef T const type;
+};
+
+template <typename Geometry>
+struct interior_ring_iterator
+{
+ typedef typename boost::range_iterator
+ <
+ typename copy_const
+ <
+ typename geometry::interior_type<Geometry>::type,
+ typename boost::range_value
+ <
+ typename geometry::interior_type<Geometry>::type
+ >::type
+ >::type
+ >::type type;
+};
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERIOR_ITERATOR_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_simple/always_simple.hpp b/3party/boost/boost/geometry/algorithms/detail/is_simple/always_simple.hpp
new file mode 100644
index 0000000000..91e2ef76bd
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_simple/always_simple.hpp
@@ -0,0 +1,83 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_ALWAYS_SIMPLE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_ALWAYS_SIMPLE_HPP
+
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_simple
+{
+
+
+template <typename Geometry>
+struct always_simple
+{
+ static inline bool apply(Geometry const&)
+ {
+ return true;
+ }
+};
+
+
+}} // namespace detail::is_simple
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// A point is always simple
+template <typename Point>
+struct is_simple<Point, point_tag>
+ : detail::is_simple::always_simple<Point>
+{};
+
+
+// A valid segment is always simple.
+// A segment is a curve.
+// A curve is simple if it does not pass through the same point twice,
+// with the possible exception of its two endpoints
+//
+// Reference: OGC 06-103r4 (6.1.6.1)
+template <typename Segment>
+struct is_simple<Segment, segment_tag>
+ : detail::is_simple::always_simple<Segment>
+{};
+
+
+// A valid box is always simple
+// A box is a Polygon, and it satisfies the conditions for Polygon validity.
+//
+// Reference (for polygon validity): OGC 06-103r4 (6.1.11.1)
+template <typename Box>
+struct is_simple<Box, box_tag>
+ : detail::is_simple::always_simple<Box>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_ALWAYS_SIMPLE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_simple/areal.hpp b/3party/boost/boost/geometry/algorithms/detail/is_simple/areal.hpp
new file mode 100644
index 0000000000..9a1a16507a
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_simple/areal.hpp
@@ -0,0 +1,141 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_AREAL_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_AREAL_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_simple
+{
+
+
+template <typename Ring>
+struct is_simple_ring
+{
+ static inline bool apply(Ring const& ring)
+ {
+ return
+ !detail::is_valid::has_duplicates
+ <
+ Ring, geometry::closure<Ring>::value
+ >::apply(ring);
+ }
+};
+
+
+template <typename Polygon>
+class is_simple_polygon
+{
+private:
+ template <typename InteriorRings>
+ static inline
+ bool are_simple_interior_rings(InteriorRings const& interior_rings)
+ {
+ return
+ detail::check_iterator_range
+ <
+ is_simple_ring
+ <
+ typename boost::range_value<InteriorRings>::type
+ >
+ >::apply(boost::begin(interior_rings),
+ boost::end(interior_rings));
+ }
+
+public:
+ static inline bool apply(Polygon const& polygon)
+ {
+ return
+ is_simple_ring
+ <
+ typename ring_type<Polygon>::type
+ >::apply(exterior_ring(polygon))
+ &&
+ are_simple_interior_rings(geometry::interior_rings(polygon));
+ }
+};
+
+
+}} // namespace detail::is_simple
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// A Ring is a Polygon.
+// A Polygon is always a simple geometric object provided that it is valid.
+//
+// Reference (for polygon validity): OGC 06-103r4 (6.1.11.1)
+template <typename Ring>
+struct is_simple<Ring, ring_tag>
+ : detail::is_simple::is_simple_ring<Ring>
+{};
+
+
+// A Polygon is always a simple geometric object provided that it is valid.
+//
+// Reference (for validity of Polygons): OGC 06-103r4 (6.1.11.1)
+template <typename Polygon>
+struct is_simple<Polygon, polygon_tag>
+ : detail::is_simple::is_simple_polygon<Polygon>
+{};
+
+
+// Not clear what the definition is.
+// Right now we consider a MultiPolygon as simple if it is valid.
+//
+// Reference (for validity of MultiPolygons): OGC 06-103r4 (6.1.14)
+template <typename MultiPolygon>
+struct is_simple<MultiPolygon, multi_polygon_tag>
+{
+ static inline bool apply(MultiPolygon const& multipolygon)
+ {
+ return
+ detail::check_iterator_range
+ <
+ detail::is_simple::is_simple_polygon
+ <
+ typename boost::range_value<MultiPolygon>::type
+ >,
+ false // do not allow empty multi-polygon
+ >::apply(boost::begin(multipolygon), boost::end(multipolygon));
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_AREAL_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp b/3party/boost/boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp
new file mode 100644
index 0000000000..75c37c68f8
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp
@@ -0,0 +1,82 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_DEBUG_PRINT_BOUNDARY_POINTS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_DEBUG_PRINT_BOUNDARY_POINTS_HPP
+
+#ifdef BOOST_GEOMETRY_TEST_DEBUG
+#include <algorithm>
+#include <iostream>
+#include <vector>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/io/dsv/write.hpp>
+
+#include <boost/geometry/policies/compare.hpp>
+
+#include <boost/geometry/algorithms/equals.hpp>
+#endif
+
+
+namespace boost { namespace geometry
+{
+
+namespace detail { namespace is_simple
+{
+
+
+#ifdef BOOST_GEOMETRY_TEST_DEBUG
+template <typename MultiLinestring>
+inline void debug_print_boundary_points(MultiLinestring const& multilinestring)
+{
+ typedef typename point_type<MultiLinestring>::type point_type;
+ typedef std::vector<point_type> point_vector;
+
+ point_vector boundary_points;
+ for (typename boost::range_iterator<MultiLinestring const>::type it
+ = boost::begin(multilinestring);
+ it != boost::end(multilinestring); ++it)
+ {
+ if ( boost::size(*it) > 1
+ && !geometry::equals(range::front(*it), range::back(*it)) )
+ {
+ boundary_points.push_back( range::front(*it) );
+ boundary_points.push_back( range::back(*it) );
+ }
+ }
+
+ std::sort(boundary_points.begin(), boundary_points.end(),
+ geometry::less<point_type>());
+
+ std::cout << "boundary points: ";
+ for (typename point_vector::const_iterator pit = boundary_points.begin();
+ pit != boundary_points.end(); ++pit)
+ {
+ std::cout << " " << geometry::dsv(*pit);
+ }
+ std::cout << std::endl << std::endl;
+}
+#else
+template <typename MultiLinestring>
+inline void debug_print_boundary_points(MultiLinestring const&)
+{
+}
+#endif // BOOST_GEOMETRY_TEST_DEBUG
+
+
+}} // namespace detail::is_simple
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_DEBUG_PRINT_BOUNDARY_POINTS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_simple/implementation.hpp b/3party/boost/boost/geometry/algorithms/detail/is_simple/implementation.hpp
new file mode 100644
index 0000000000..e69b273ce3
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_simple/implementation.hpp
@@ -0,0 +1,18 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_IMPLEMENTATION_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_IMPLEMENTATION_HPP
+
+#include <boost/geometry/algorithms/detail/is_simple/always_simple.hpp>
+#include <boost/geometry/algorithms/detail/is_simple/areal.hpp>
+#include <boost/geometry/algorithms/detail/is_simple/linear.hpp>
+#include <boost/geometry/algorithms/detail/is_simple/multipoint.hpp>
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_IMPLEMENTATION_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_simple/interface.hpp b/3party/boost/boost/geometry/algorithms/detail/is_simple/interface.hpp
new file mode 100644
index 0000000000..4239664ed1
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_simple/interface.hpp
@@ -0,0 +1,80 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_INTERFACE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_INTERFACE_HPP
+
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+namespace resolve_variant {
+
+template <typename Geometry>
+struct is_simple
+{
+ static inline bool apply(Geometry const& geometry)
+ {
+ concept::check<Geometry const>();
+ return dispatch::is_simple<Geometry>::apply(geometry);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct is_simple<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor : boost::static_visitor<bool>
+ {
+ template <typename Geometry>
+ bool operator()(Geometry const& geometry) const
+ {
+ return is_simple<Geometry>::apply(geometry);
+ }
+ };
+
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry)
+ {
+ return boost::apply_visitor(visitor(), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
+
+/*!
+\brief \brief_check{is simple}
+\ingroup is_simple
+\tparam Geometry \tparam_geometry
+\param geometry \param_geometry
+\return \return_check{is simple}
+
+\qbk{[include reference/algorithms/is_simple.qbk]}
+*/
+template <typename Geometry>
+inline bool is_simple(Geometry const& geometry)
+{
+ return resolve_variant::is_simple<Geometry>::apply(geometry);
+}
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_INTERFACE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_simple/linear.hpp b/3party/boost/boost/geometry/algorithms/detail/is_simple/linear.hpp
new file mode 100644
index 0000000000..18c33bfc3a
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_simple/linear.hpp
@@ -0,0 +1,248 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_LINEAR_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_LINEAR_HPP
+
+#include <algorithm>
+#include <deque>
+
+#include <boost/assert.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/policies/predicate_based_interrupt_policy.hpp>
+#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio.hpp>
+
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+
+#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
+
+#include <boost/geometry/algorithms/detail/disjoint/linear_linear.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/has_spikes.hpp>
+
+#include <boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_simple
+{
+
+
+template <typename Linestring, bool CheckSelfIntersections = true>
+struct is_simple_linestring
+{
+ static inline bool apply(Linestring const& linestring)
+ {
+ return !detail::is_valid::has_duplicates
+ <
+ Linestring, closed
+ >::apply(linestring)
+ && !detail::is_valid::has_spikes
+ <
+ Linestring, closed
+ >::apply(linestring)
+ && !(CheckSelfIntersections && geometry::intersects(linestring));
+ }
+};
+
+
+
+template <typename MultiLinestring>
+class is_simple_multilinestring
+{
+private:
+ class is_acceptable_turn
+ {
+ private:
+ template <typename Point, typename Linestring>
+ static inline bool is_boundary_point_of(Point const& point,
+ Linestring const& linestring)
+ {
+ BOOST_ASSERT( boost::size(linestring) > 1 );
+ return
+ !geometry::equals(range::front(linestring),
+ range::back(linestring))
+ &&
+ ( geometry::equals(point, range::front(linestring))
+ || geometry::equals(point, range::back(linestring)) );
+ }
+
+ template <typename Linestring1, typename Linestring2>
+ static inline bool have_same_boundary_points(Linestring1 const& ls1,
+ Linestring2 const& ls2)
+ {
+ return
+ geometry::equals(range::front(ls1), range::front(ls2))
+ ?
+ geometry::equals(range::back(ls1), range::back(ls2))
+ :
+ (geometry::equals(range::front(ls1), range::back(ls2))
+ &&
+ geometry::equals(range::back(ls1), range::front(ls2))
+ )
+ ;
+ }
+
+ public:
+ is_acceptable_turn(MultiLinestring const& multilinestring)
+ : m_multilinestring(multilinestring)
+ {}
+
+ template <typename Turn>
+ inline bool apply(Turn const& turn) const
+ {
+ typedef typename boost::range_value
+ <
+ MultiLinestring
+ >::type linestring;
+
+ linestring const& ls1 =
+ range::at(m_multilinestring,
+ turn.operations[0].seg_id.multi_index);
+
+ linestring const& ls2 =
+ range::at(m_multilinestring,
+ turn.operations[0].other_id.multi_index);
+
+ return
+ is_boundary_point_of(turn.point, ls1)
+ && is_boundary_point_of(turn.point, ls2)
+ &&
+ ( boost::size(ls1) != 2
+ || boost::size(ls2) != 2
+ || !have_same_boundary_points(ls1, ls2) );
+ }
+
+ private:
+ MultiLinestring const& m_multilinestring;
+ };
+
+
+public:
+ static inline bool apply(MultiLinestring const& multilinestring)
+ {
+ typedef typename boost::range_value<MultiLinestring>::type linestring;
+ typedef typename point_type<MultiLinestring>::type point_type;
+ typedef point_type point;
+
+
+ // check each of the linestrings for simplicity
+ if ( !detail::check_iterator_range
+ <
+ is_simple_linestring<linestring>,
+ false // do not allow empty multilinestring
+ >::apply(boost::begin(multilinestring),
+ boost::end(multilinestring))
+ )
+ {
+ return false;
+ }
+
+
+ // compute self turns
+ typedef detail::overlay::turn_info
+ <
+ point_type,
+ geometry::segment_ratio
+ <
+ typename geometry::coordinate_type<point>::type
+ >
+ > turn_info;
+
+ std::deque<turn_info> turns;
+
+ typedef detail::overlay::get_turn_info
+ <
+ detail::disjoint::assign_disjoint_policy
+ > turn_policy;
+
+ is_acceptable_turn predicate(multilinestring);
+ detail::overlay::predicate_based_interrupt_policy
+ <
+ is_acceptable_turn
+ > interrupt_policy(predicate);
+
+ detail::self_get_turn_points::get_turns
+ <
+ turn_policy
+ >::apply(multilinestring,
+ detail::no_rescale_policy(),
+ turns,
+ interrupt_policy);
+
+ detail::is_valid::debug_print_turns(turns.begin(), turns.end());
+ debug_print_boundary_points(multilinestring);
+
+ return !interrupt_policy.has_intersections;
+ }
+
+};
+
+
+
+}} // namespace detail::is_simple
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+// A linestring is a curve.
+// A curve is simple if it does not pass through the same point twice,
+// with the possible exception of its two endpoints
+//
+// Reference: OGC 06-103r4 (6.1.6.1)
+template <typename Linestring>
+struct is_simple<Linestring, linestring_tag>
+ : detail::is_simple::is_simple_linestring<Linestring>
+{};
+
+
+// A MultiLinestring is a MultiCurve
+// A MultiCurve is simple if all of its elements are simple and the
+// only intersections between any two elements occur at Points that
+// are on the boundaries of both elements.
+//
+// Reference: OGC 06-103r4 (6.1.8.1; Fig. 9)
+template <typename MultiLinestring>
+struct is_simple<MultiLinestring, multi_linestring_tag>
+ : detail::is_simple::is_simple_multilinestring<MultiLinestring>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_LINEAR_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_simple/multipoint.hpp b/3party/boost/boost/geometry/algorithms/detail/is_simple/multipoint.hpp
new file mode 100644
index 0000000000..d996eb64e9
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_simple/multipoint.hpp
@@ -0,0 +1,84 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_MULTIPOINT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_MULTIPOINT_HPP
+
+#include <algorithm>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/policies/compare.hpp>
+
+#include <boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_simple
+{
+
+
+template <typename MultiPoint>
+struct is_simple_multipoint
+{
+ static inline bool apply(MultiPoint const& multipoint)
+ {
+ if ( boost::size(multipoint) == 0 )
+ {
+ return false;
+ }
+
+ MultiPoint mp(multipoint);
+ std::sort(boost::begin(mp), boost::end(mp),
+ geometry::less<typename point_type<MultiPoint>::type>());
+
+ return !detail::is_valid::has_duplicates<MultiPoint, closed>::apply(mp);
+ }
+};
+
+
+}} // namespace detail::is_simple
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// A MultiPoint is simple if no two Points in the MultiPoint are equal
+// (have identical coordinate values in X and Y)
+//
+// Reference: OGC 06-103r4 (6.1.5)
+template <typename MultiPoint>
+struct is_simple<MultiPoint, multi_point_tag>
+ : detail::is_simple::is_simple_multipoint<MultiPoint>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_MULTIPOINT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/box.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/box.hpp
new file mode 100644
index 0000000000..f82b3f9bf1
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/box.hpp
@@ -0,0 +1,86 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_BOX_HPP
+
+#include <cstddef>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_valid
+{
+
+template <typename Box, std::size_t I>
+struct has_valid_corners
+{
+ static inline bool apply(Box const& box)
+ {
+ if ( geometry::get<geometry::max_corner, I-1>(box)
+ <=
+ geometry::get<geometry::min_corner, I-1>(box) )
+ {
+ return false;
+ }
+ return has_valid_corners<Box, I-1>::apply(box);
+ }
+};
+
+
+template <typename Box>
+struct has_valid_corners<Box, 0>
+{
+ static inline bool apply(Box const&)
+ {
+ return true;
+ }
+};
+
+}} // namespace detail::is_valid
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// A box is always simple
+// A box is a Polygon, and it satisfies the conditions for Polygon validity.
+//
+// The only thing we have to check is whether the max corner lies in
+// the upper-right quadrant as defined by the min corner
+//
+// Reference (for polygon validity): OGC 06-103r4 (6.1.11.1)
+template <typename Box>
+struct is_valid<Box, box_tag>
+ : detail::is_valid::has_valid_corners<Box, dimension<Box>::value>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp
new file mode 100644
index 0000000000..2272bbf32f
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp
@@ -0,0 +1,239 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_COMPLEMENT_GRAPH_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_COMPLEMENT_GRAPH_HPP
+
+#include <cstddef>
+
+#include <set>
+#include <stack>
+#include <utility>
+#include <vector>
+
+#include <boost/assert.hpp>
+#include <boost/core/addressof.hpp>
+
+#include <boost/geometry/policies/compare.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace detail { namespace is_valid
+{
+
+
+template <typename TurnPoint>
+class complement_graph_vertex
+{
+public:
+ complement_graph_vertex(std::size_t id)
+ : m_id(id)
+ , m_turn_point(NULL)
+ {}
+
+ complement_graph_vertex(TurnPoint const* turn_point,
+ std::size_t expected_id)
+ : m_id(expected_id)
+ , m_turn_point(turn_point)
+ {}
+
+ inline std::size_t id() const { return m_id; }
+
+ inline bool operator<(complement_graph_vertex const& other) const
+ {
+ if ( m_turn_point != NULL && other.m_turn_point != NULL )
+ {
+ return geometry::less
+ <
+ TurnPoint
+ >()(*m_turn_point, *other.m_turn_point);
+ }
+ if ( m_turn_point == NULL && other.m_turn_point == NULL )
+ {
+ return m_id < other.m_id;
+ }
+ return m_turn_point == NULL;
+ }
+
+private:
+ // the value of m_turn_point determines the type of the vertex
+ // non-NULL: vertex corresponds to an IP
+ // NULL : vertex corresponds to a hole or outer space, and the id
+ // is the ring id of the corresponding ring of the polygon
+ std::size_t m_id;
+ TurnPoint const* m_turn_point;
+};
+
+
+
+
+template <typename TurnPoint>
+class complement_graph
+{
+private:
+ typedef complement_graph_vertex<TurnPoint> vertex;
+ typedef std::set<vertex> vertex_container;
+
+public:
+ typedef typename vertex_container::const_iterator vertex_handle;
+
+private:
+ struct vertex_handle_less
+ {
+ inline bool operator()(vertex_handle v1, vertex_handle v2) const
+ {
+ return v1->id() < v2->id();
+ }
+ };
+
+ typedef std::set<vertex_handle, vertex_handle_less> neighbor_container;
+
+ class has_cycles_dfs_data
+ {
+ public:
+ has_cycles_dfs_data(std::size_t num_nodes)
+ : m_visited(num_nodes, false)
+ , m_parent_id(num_nodes, -1)
+ {}
+
+ inline int parent_id(vertex_handle v) const
+ {
+ return m_parent_id[v->id()];
+ }
+
+ inline void set_parent_id(vertex_handle v, int id)
+ {
+ m_parent_id[v->id()] = id;
+ }
+
+ inline bool visited(vertex_handle v) const
+ {
+ return m_visited[v->id()];
+ }
+
+ inline void set_visited(vertex_handle v, bool value)
+ {
+ m_visited[v->id()] = value;
+ }
+ private:
+ std::vector<bool> m_visited;
+ std::vector<int> m_parent_id;
+ };
+
+
+ inline bool has_cycles(vertex_handle start_vertex,
+ has_cycles_dfs_data& data) const
+ {
+ std::stack<vertex_handle> stack;
+ stack.push(start_vertex);
+
+ while ( !stack.empty() )
+ {
+ vertex_handle v = stack.top();
+ stack.pop();
+
+ data.set_visited(v, true);
+ for (typename neighbor_container::const_iterator nit
+ = m_neighbors[v->id()].begin();
+ nit != m_neighbors[v->id()].end(); ++nit)
+ {
+ if ( static_cast<int>((*nit)->id()) != data.parent_id(v) )
+ {
+ if ( data.visited(*nit) )
+ {
+ return true;
+ }
+ else
+ {
+ data.set_parent_id(*nit, static_cast<int>(v->id()));
+ stack.push(*nit);
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+public:
+ // num_rings: total number of rings, including the exterior ring
+ complement_graph(std::size_t num_rings)
+ : m_num_rings(num_rings)
+ , m_num_turns(0)
+ , m_vertices()
+ , m_neighbors(num_rings)
+ {}
+
+ // inserts a ring vertex in the graph and returns its handle
+ // ring id's are zero-based (so the first interior ring has id 1)
+ inline vertex_handle add_vertex(int id)
+ {
+ return m_vertices.insert(vertex(static_cast<std::size_t>(id))).first;
+ }
+
+ // inserts an IP in the graph and returns its id
+ inline vertex_handle add_vertex(TurnPoint const& turn_point)
+ {
+ std::pair<vertex_handle, bool> res
+ = m_vertices.insert(vertex(boost::addressof(turn_point),
+ m_num_rings + m_num_turns)
+ );
+
+ if ( res.second )
+ {
+ // a new element is inserted
+ m_neighbors.push_back(neighbor_container());
+ ++m_num_turns;
+ }
+ return res.first;
+ }
+
+ inline void add_edge(vertex_handle v1, vertex_handle v2)
+ {
+ BOOST_ASSERT( v1 != m_vertices.end() );
+ BOOST_ASSERT( v2 != m_vertices.end() );
+ m_neighbors[v1->id()].insert(v2);
+ m_neighbors[v2->id()].insert(v1);
+ }
+
+ inline bool has_cycles() const
+ {
+ // initialize all vertices as non-visited and with no parent set
+ // this is done by the constructor of has_cycles_dfs_data
+ has_cycles_dfs_data data(m_num_rings + m_num_turns);
+
+ // for each non-visited vertex, start a DFS from that vertex
+ for (vertex_handle it = m_vertices.begin();
+ it != m_vertices.end(); ++it)
+ {
+ if ( !data.visited(it) && has_cycles(it, data) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ template <typename OStream, typename TP>
+ friend inline
+ void debug_print_complement_graph(OStream&, complement_graph<TP> const&);
+
+private:
+ std::size_t m_num_rings, m_num_turns;
+ vertex_container m_vertices;
+ std::vector<neighbor_container> m_neighbors;
+};
+
+
+}} // namespace detail::is_valid
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_COMPLEMENT_GRAPH_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp
new file mode 100644
index 0000000000..60f597e296
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp
@@ -0,0 +1,70 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_COMPLEMENT_GRAPH_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_COMPLEMENT_GRAPH_HPP
+
+#ifdef BOOST_GEOMETRY_TEST_DEBUG
+#include <iostream>
+#endif
+
+namespace boost { namespace geometry
+{
+
+namespace detail { namespace is_valid
+{
+
+
+#ifdef BOOST_GEOMETRY_TEST_DEBUG
+template <typename OutputStream, typename TurnPoint>
+inline void
+debug_print_complement_graph(OutputStream& os,
+ complement_graph<TurnPoint> const& graph)
+{
+ typedef typename complement_graph<TurnPoint>::vertex_handle vertex_handle;
+
+ os << "num rings: " << graph.m_num_rings << std::endl;
+ os << "vertex ids: {";
+ for (vertex_handle it = graph.m_vertices.begin();
+ it != graph.m_vertices.end(); ++it)
+ {
+ os << " " << it->id();
+ }
+ os << " }" << std::endl;
+
+ for (vertex_handle it = graph.m_vertices.begin();
+ it != graph.m_vertices.end(); ++it)
+ {
+ os << "neighbors of " << it->id() << ": {";
+ for (typename complement_graph
+ <
+ TurnPoint
+ >::neighbor_container::const_iterator
+ nit = graph.m_neighbors[it->id()].begin();
+ nit != graph.m_neighbors[it->id()].end(); ++nit)
+ {
+ os << " " << (*nit)->id();
+ }
+ os << "}" << std::endl;
+ }
+}
+#else
+template <typename OutputStream, typename TurnPoint>
+inline void debug_print_complement_graph(OutputStream&,
+ complement_graph<TurnPoint> const&)
+{
+}
+#endif
+
+
+}} // namespace detail::is_valid
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_COMPLEMENT_GRAPH_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp
new file mode 100644
index 0000000000..b14355639d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp
@@ -0,0 +1,64 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_PRINT_TURNS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_PRINT_TURNS_HPP
+
+#ifdef BOOST_GEOMETRY_TEST_DEBUG
+#include <iostream>
+
+#include <boost/geometry/io/dsv/write.hpp>
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+#endif
+
+
+namespace boost { namespace geometry
+{
+
+namespace detail { namespace is_valid
+{
+
+#ifdef BOOST_GEOMETRY_TEST_DEBUG
+template <typename TurnIterator>
+inline void debug_print_turns(TurnIterator first, TurnIterator beyond)
+{
+ std::cout << "turns:";
+ for (TurnIterator tit = first; tit != beyond; ++tit)
+ {
+ std::cout << " ["
+ << geometry::method_char(tit->method)
+ << ","
+ << geometry::operation_char(tit->operations[0].operation)
+ << "/"
+ << geometry::operation_char(tit->operations[1].operation)
+ << " {"
+ << tit->operations[0].seg_id.multi_index
+ << ", "
+ << tit->operations[0].other_id.multi_index
+ << "} {"
+ << tit->operations[0].seg_id.ring_index
+ << ", "
+ << tit->operations[0].other_id.ring_index
+ << "} "
+ << geometry::dsv(tit->point)
+ << "]";
+ }
+ std::cout << std::endl << std::endl;
+}
+#else
+template <typename TurnIterator>
+inline void debug_print_turns(TurnIterator, TurnIterator)
+{}
+#endif // BOOST_GEOMETRY_TEST_DEBUG
+
+}} // namespace detail::is_valid
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_PRINT_TURNS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp
new file mode 100644
index 0000000000..6f1c263646
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp
@@ -0,0 +1,68 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_VALIDITY_PHASE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_VALIDITY_PHASE_HPP
+
+#ifdef GEOMETRY_TEST_DEBUG
+#include <iostream>
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+#endif
+
+
+namespace boost { namespace geometry
+{
+
+namespace detail { namespace is_valid
+{
+
+template <typename Geometry, typename Tag = typename tag<Geometry>::type>
+struct debug_validity_phase
+{
+ static inline void apply(int)
+ {
+ }
+};
+
+#ifdef BOOST_GEOMETRY_TEST_DEBUG
+template <typename Polygon>
+struct debug_validity_phase<Polygon, polygon_tag>
+{
+ static inline void apply(int phase)
+ {
+ switch (phase)
+ {
+ case 1:
+ std::cout << "checking exterior ring..." << std::endl;
+ break;
+ case 2:
+ std::cout << "checking interior rings..." << std::endl;
+ break;
+ case 3:
+ std::cout << "computing and analyzing turns..." << std::endl;
+ break;
+ case 4:
+ std::cout << "checking if holes are inside the exterior ring..."
+ << std::endl;
+ break;
+ case 5:
+ std::cout << "checking connectivity of interior..." << std::endl;
+ break;
+ }
+ }
+};
+#endif
+
+}} // namespace detail::is_valid
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_VALIDITY_PHASE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp
new file mode 100644
index 0000000000..dd0922bb2b
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp
@@ -0,0 +1,70 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_DUPLICATES_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_DUPLICATES_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+
+#include <boost/geometry/policies/compare.hpp>
+
+#include <boost/geometry/views/closeable_view.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_valid
+{
+
+template <typename Range, closure_selector Closure>
+struct has_duplicates
+{
+ static inline bool apply(Range const& range)
+ {
+ typedef typename closeable_view<Range const, Closure>::type view_type;
+ typedef typename boost::range_iterator<view_type const>::type iterator;
+
+ view_type view(range);
+
+ if ( boost::size(view) < 2 )
+ {
+ return false;
+ }
+
+ geometry::equal_to<typename boost::range_value<Range>::type> equal;
+
+ iterator it = boost::begin(view);
+ iterator next = ++boost::begin(view);
+ for (; next != boost::end(view); ++it, ++next)
+ {
+ if ( equal(*it, *next) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+};
+
+
+
+}} // namespace detail::is_valid
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_DUPLICATES_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp
new file mode 100644
index 0000000000..9b95017482
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp
@@ -0,0 +1,139 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_SPIKES_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_SPIKES_HPP
+
+#include <algorithm>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/views/closeable_view.hpp>
+
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_valid
+{
+
+template <typename Point>
+struct equal_to
+{
+ Point const& m_point;
+
+ equal_to(Point const& point)
+ : m_point(point)
+ {}
+
+ template <typename OtherPoint>
+ inline bool operator()(OtherPoint const& other) const
+ {
+ return geometry::equals(m_point, other);
+ }
+};
+
+template <typename Point>
+struct not_equal_to
+{
+ Point const& m_point;
+
+ not_equal_to(Point const& point)
+ : m_point(point)
+ {}
+
+ template <typename OtherPoint>
+ inline bool operator()(OtherPoint const& other) const
+ {
+ return !geometry::equals(other, m_point);
+ }
+};
+
+
+
+template <typename Range, closure_selector Closure>
+struct has_spikes
+{
+ static inline bool apply(Range const& range)
+ {
+ typedef not_equal_to<typename point_type<Range>::type> not_equal;
+
+ typedef typename closeable_view<Range const, Closure>::type view_type;
+ typedef typename boost::range_iterator<view_type const>::type iterator;
+
+ view_type const view(range);
+
+ iterator prev = boost::begin(view);
+
+ iterator cur = std::find_if(prev, boost::end(view), not_equal(*prev));
+ if ( cur == boost::end(view) )
+ {
+ // the range has only one distinct point, so it
+ // cannot have a spike
+ return false;
+ }
+
+ iterator next = std::find_if(cur, boost::end(view), not_equal(*cur));
+ if ( next == boost::end(view) )
+ {
+ // the range has only two distinct points, so it
+ // cannot have a spike
+ return false;
+ }
+
+ while ( next != boost::end(view) )
+ {
+ if ( geometry::detail::point_is_spike_or_equal(*prev,
+ *next,
+ *cur) )
+ {
+ return true;
+ }
+ prev = cur;
+ cur = next;
+ next = std::find_if(cur, boost::end(view), not_equal(*cur));
+ }
+
+ if ( geometry::equals(range::front(view), range::back(view)) )
+ {
+ iterator cur = boost::begin(view);
+ typename boost::range_reverse_iterator
+ <
+ view_type const
+ >::type prev = std::find_if(boost::rbegin(view),
+ boost::rend(view),
+ not_equal(range::back(view)));
+ iterator next =
+ std::find_if(cur, boost::end(view), not_equal(*cur));
+ return detail::point_is_spike_or_equal(*prev, *next, *cur);
+ }
+
+ return false;
+ }
+};
+
+
+
+}} // namespace detail::is_valid
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_SPIKES_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp
new file mode 100644
index 0000000000..220a67bcd1
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp
@@ -0,0 +1,93 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_VALID_SELF_TURNS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_VALID_SELF_TURNS_HPP
+
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/policies/predicate_based_interrupt_policy.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
+#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
+
+#include <boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_valid
+{
+
+
+template
+<
+ typename Geometry,
+ typename IsAcceptableTurn = is_acceptable_turn<Geometry>
+>
+class has_valid_self_turns
+{
+private:
+ typedef typename point_type<Geometry>::type point_type;
+
+ typedef typename geometry::rescale_policy_type
+ <
+ point_type
+ >::type rescale_policy_type;
+
+ typedef detail::overlay::get_turn_info
+ <
+ detail::overlay::assign_null_policy
+ > turn_policy;
+
+public:
+ typedef detail::overlay::turn_info
+ <
+ point_type,
+ typename geometry::segment_ratio_type
+ <
+ point_type,
+ rescale_policy_type
+ >::type
+ > turn_type;
+
+ // returns true if all turns are valid
+ template <typename Turns>
+ static inline bool apply(Geometry const& geometry, Turns& turns)
+ {
+ rescale_policy_type robust_policy
+ = geometry::get_rescale_policy<rescale_policy_type>(geometry);
+
+ detail::overlay::stateless_predicate_based_interrupt_policy
+ <
+ IsAcceptableTurn
+ > interrupt_policy;
+
+ geometry::self_turns<turn_policy>(geometry,
+ robust_policy,
+ turns,
+ interrupt_policy);
+
+ return !interrupt_policy.has_intersections;
+ }
+};
+
+
+}} // namespace detail::is_valid
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_VALID_SELF_TURNS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/implementation.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/implementation.hpp
new file mode 100644
index 0000000000..4a515a3073
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/implementation.hpp
@@ -0,0 +1,21 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IMPLEMENTATION_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IMPLEMENTATION_HPP
+
+#include <boost/geometry/algorithms/detail/is_valid/pointlike.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/linear.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/polygon.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/multipolygon.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/ring.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/segment.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/box.hpp>
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IMPLEMENTATION_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/interface.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/interface.hpp
new file mode 100644
index 0000000000..4b232fd436
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/interface.hpp
@@ -0,0 +1,78 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_INTERFACE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_INTERFACE_HPP
+
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+namespace resolve_variant {
+
+template <typename Geometry>
+struct is_valid
+{
+ static inline bool apply(Geometry const& geometry)
+ {
+ concept::check<Geometry const>();
+ return dispatch::is_valid<Geometry>::apply(geometry);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct is_valid<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor : boost::static_visitor<bool>
+ {
+ template <typename Geometry>
+ bool operator()(Geometry const& geometry) const
+ {
+ return is_valid<Geometry>::apply(geometry);
+ }
+ };
+
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry)
+ {
+ return boost::apply_visitor(visitor(), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
+/*!
+\brief \brief_check{is valid (in the OGC sense)}
+\ingroup is_valid
+\tparam Geometry \tparam_geometry
+\param geometry \param_geometry
+\return \return_check{is valid (in the OGC sense)}
+
+\qbk{[include reference/algorithms/is_valid.qbk]}
+*/
+template <typename Geometry>
+inline bool is_valid(Geometry const& geometry)
+{
+ return resolve_variant::is_valid<Geometry>::apply(geometry);
+}
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_INTERFACE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp
new file mode 100644
index 0000000000..9841aafd27
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp
@@ -0,0 +1,144 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IS_ACCEPTABLE_TURN_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IS_ACCEPTABLE_TURN_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/point_order.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_valid
+{
+
+
+template
+<
+ typename Geometry,
+ order_selector Order = geometry::point_order<Geometry>::value,
+ typename Tag = typename tag<Geometry>::type
+>
+struct acceptable_operation
+{};
+
+template <typename Polygon>
+struct acceptable_operation<Polygon, counterclockwise, polygon_tag>
+{
+ static const detail::overlay::operation_type value =
+ detail::overlay::operation_union;
+};
+
+template <typename Polygon>
+struct acceptable_operation<Polygon, clockwise, polygon_tag>
+{
+ static const detail::overlay::operation_type value =
+ detail::overlay::operation_intersection;
+};
+
+template <typename MultiPolygon>
+struct acceptable_operation<MultiPolygon, counterclockwise, multi_polygon_tag>
+{
+ static const detail::overlay::operation_type value =
+ detail::overlay::operation_intersection;
+};
+
+template <typename MultiPolygon>
+struct acceptable_operation<MultiPolygon, clockwise, multi_polygon_tag>
+{
+ static const detail::overlay::operation_type value =
+ detail::overlay::operation_union;
+};
+
+
+
+
+template <typename Geometry, typename Tag = typename tag<Geometry>::type>
+struct is_acceptable_turn
+{};
+
+template <typename Polygon>
+class is_acceptable_turn<Polygon, polygon_tag>
+{
+protected:
+ template <typename Turn, typename Method, typename Operation>
+ static inline bool check_turn(Turn const& turn,
+ Method method,
+ Operation operation)
+ {
+ return turn.method == method
+ && turn.operations[0].operation == operation
+ && turn.operations[1].operation == operation;
+ }
+
+
+public:
+ template <typename Turn>
+ static inline bool apply(Turn const& turn)
+ {
+ using namespace detail::overlay;
+
+ if ( turn.operations[0].seg_id.ring_index
+ == turn.operations[0].other_id.ring_index )
+ {
+ return false;
+ }
+
+ operation_type const op = acceptable_operation<Polygon>::value;
+
+ return check_turn(turn, method_touch_interior, op)
+ || check_turn(turn, method_touch, op)
+ ;
+ }
+};
+
+template <typename MultiPolygon>
+class is_acceptable_turn<MultiPolygon, multi_polygon_tag>
+ : is_acceptable_turn<typename boost::range_value<MultiPolygon>::type>
+{
+private:
+ typedef typename boost::range_value<MultiPolygon>::type polygon;
+ typedef is_acceptable_turn<polygon> base;
+
+public:
+ template <typename Turn>
+ static inline bool apply(Turn const& turn)
+ {
+ using namespace detail::overlay;
+
+ if ( turn.operations[0].seg_id.multi_index
+ == turn.operations[0].other_id.multi_index )
+ {
+ return base::apply(turn);
+ }
+
+ operation_type const op = acceptable_operation<MultiPolygon>::value;
+
+ return base::check_turn(turn, method_touch_interior, op)
+ || base::check_turn(turn, method_touch, op)
+ ;
+ }
+};
+
+
+}} // namespace detail::is_valid
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IS_ACCEPTABLE_TURN_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/linear.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/linear.hpp
new file mode 100644
index 0000000000..244df9b035
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/linear.hpp
@@ -0,0 +1,125 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_LINEAR_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_LINEAR_HPP
+
+#include <cstddef>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/has_spikes.hpp>
+#include <boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_valid
+{
+
+
+template <typename Linestring, bool AllowSpikes>
+struct is_valid_linestring
+{
+ static inline bool apply(Linestring const& linestring)
+ {
+ std::size_t num_distinct = detail::num_distinct_consecutive_points
+ <
+ Linestring,
+ 3u,
+ true,
+ not_equal_to<typename point_type<Linestring>::type>
+ >::apply(linestring);
+
+ if ( num_distinct < 2u )
+ {
+ return false;
+ }
+
+ return num_distinct == 2u
+ || AllowSpikes
+ || !has_spikes<Linestring, closed>::apply(linestring);
+ }
+};
+
+
+}} // namespace detail::is_valid
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// A linestring is a curve.
+// A curve is 1-dimensional so it has to have at least two distinct
+// points.
+// A curve is simple if it does not pass through the same point twice,
+// with the possible exception of its two endpoints
+//
+// There is an option here as to whether spikes are allowed for linestrings;
+// here we pass this as an additional template parameter: allow_spikes
+// If allow_spikes is set to true, spikes are allowed, false otherwise.
+// By default, spikes are disallowed
+//
+// Reference: OGC 06-103r4 (6.1.6.1)
+template <typename Linestring, bool AllowSpikes>
+struct is_valid<Linestring, linestring_tag, AllowSpikes>
+ : detail::is_valid::is_valid_linestring<Linestring, AllowSpikes>
+{};
+
+
+// A MultiLinestring is a MultiCurve
+// A MultiCurve is simple if all of its elements are simple and the
+// only intersections between any two elements occur at Points that
+// are on the boundaries of both elements.
+//
+// Reference: OGC 06-103r4 (6.1.8.1; Fig. 9)
+template <typename MultiLinestring, bool AllowSpikes>
+struct is_valid<MultiLinestring, multi_linestring_tag, AllowSpikes>
+{
+ static inline bool apply(MultiLinestring const& multilinestring)
+ {
+ return detail::check_iterator_range
+ <
+ detail::is_valid::is_valid_linestring
+ <
+ typename boost::range_value<MultiLinestring>::type,
+ AllowSpikes
+ >,
+ false // do not allow empty multilinestring
+ >::apply(boost::begin(multilinestring),
+ boost::end(multilinestring));
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_LINEAR_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp
new file mode 100644
index 0000000000..373825f232
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp
@@ -0,0 +1,292 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_MULTIPOLYGON_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_MULTIPOLYGON_HPP
+
+#include <deque>
+
+#include <boost/iterator/filter_iterator.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/algorithms/within.hpp>
+
+#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
+
+#include <boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/polygon.hpp>
+
+#include <boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_valid
+{
+
+
+template <typename MultiPolygon, bool AllowDuplicates>
+class is_valid_multipolygon
+ : is_valid_polygon
+ <
+ typename boost::range_value<MultiPolygon>::type,
+ AllowDuplicates,
+ true // check only the validity of rings
+ >
+{
+private:
+ typedef is_valid_polygon
+ <
+ typename boost::range_value<MultiPolygon>::type,
+ AllowDuplicates,
+ true
+ > base;
+
+
+
+ template <typename PolygonIterator, typename TurnIterator>
+ static inline
+ bool are_polygon_interiors_disjoint(PolygonIterator polygons_first,
+ PolygonIterator polygons_beyond,
+ TurnIterator turns_first,
+ TurnIterator turns_beyond)
+ {
+ std::set<int> multi_indices;
+ for (TurnIterator tit = turns_first; tit != turns_beyond; ++tit)
+ {
+ multi_indices.insert(tit->operations[0].seg_id.multi_index);
+ multi_indices.insert(tit->operations[0].other_id.multi_index);
+ }
+
+ int multi_index = 0;
+ for (PolygonIterator it1 = polygons_first; it1 != polygons_beyond;
+ ++it1, ++multi_index)
+ {
+ if ( multi_indices.find(multi_index) != multi_indices.end() )
+ {
+ continue;
+ }
+
+ for (PolygonIterator it2 = polygons_first;
+ it2 != polygons_beyond; ++it2)
+ {
+ if ( it1 != it2
+ &&
+ geometry::within(range::front(exterior_ring(*it1)), *it2)
+ )
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+
+
+ class has_multi_index
+ {
+ public:
+ has_multi_index(int multi_index)
+ : m_multi_index(multi_index)
+ {}
+
+ template <typename Turn>
+ inline bool operator()(Turn const& turn) const
+ {
+ return turn.operations[0].seg_id.multi_index == m_multi_index
+ && turn.operations[0].other_id.multi_index == m_multi_index;
+ }
+
+ private:
+ int const m_multi_index;
+ };
+
+
+
+ template <typename Predicate>
+ struct has_property_per_polygon
+ {
+ template <typename PolygonIterator, typename TurnIterator>
+ static inline bool apply(PolygonIterator polygons_first,
+ PolygonIterator polygons_beyond,
+ TurnIterator turns_first,
+ TurnIterator turns_beyond)
+ {
+ int multi_index = 0;
+ for (PolygonIterator it = polygons_first; it != polygons_beyond;
+ ++it, ++multi_index)
+ {
+ has_multi_index index_predicate(multi_index);
+
+ typedef boost::filter_iterator
+ <
+ has_multi_index, TurnIterator
+ > filtered_turn_iterator;
+
+ filtered_turn_iterator filtered_turns_first(index_predicate,
+ turns_first,
+ turns_beyond);
+
+ filtered_turn_iterator filtered_turns_beyond(index_predicate,
+ turns_beyond,
+ turns_beyond);
+
+ if ( !Predicate::apply(*it,
+ filtered_turns_first,
+ filtered_turns_beyond) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ };
+
+
+
+ template <typename PolygonIterator, typename TurnIterator>
+ static inline bool have_holes_inside(PolygonIterator polygons_first,
+ PolygonIterator polygons_beyond,
+ TurnIterator turns_first,
+ TurnIterator turns_beyond)
+ {
+ return has_property_per_polygon
+ <
+ typename base::has_holes_inside
+ >::apply(polygons_first, polygons_beyond,
+ turns_first, turns_beyond);
+ }
+
+
+
+ template <typename PolygonIterator, typename TurnIterator>
+ static inline bool have_connected_interior(PolygonIterator polygons_first,
+ PolygonIterator polygons_beyond,
+ TurnIterator turns_first,
+ TurnIterator turns_beyond)
+ {
+ return has_property_per_polygon
+ <
+ typename base::has_connected_interior
+ >::apply(polygons_first, polygons_beyond,
+ turns_first, turns_beyond);
+ }
+
+
+public:
+ static inline bool apply(MultiPolygon const& multipolygon)
+ {
+ typedef debug_validity_phase<MultiPolygon> debug_phase;
+
+ // check validity of all polygons ring
+ debug_phase::apply(1);
+
+ if ( !detail::check_iterator_range
+ <
+ base,
+ false // do not allow empty multi-polygons
+ >::apply(boost::begin(multipolygon),
+ boost::end(multipolygon)) )
+ {
+ return false;
+ }
+
+
+ // compute turns and check if all are acceptable
+ debug_phase::apply(2);
+
+ typedef has_valid_self_turns<MultiPolygon> has_valid_turns;
+
+ std::deque<typename has_valid_turns::turn_type> turns;
+ bool has_invalid_turns = !has_valid_turns::apply(multipolygon, turns);
+ debug_print_turns(turns.begin(), turns.end());
+
+ if ( has_invalid_turns )
+ {
+ return false;
+ }
+
+
+ // check if each polygon's interior rings are inside the
+ // exterior and not one inside the other
+ debug_phase::apply(3);
+
+ if ( !have_holes_inside(boost::begin(multipolygon),
+ boost::end(multipolygon),
+ turns.begin(),
+ turns.end()) )
+ {
+ return false;
+ }
+
+
+ // check that each polygon's interior is connected
+ debug_phase::apply(4);
+
+ if ( !have_connected_interior(boost::begin(multipolygon),
+ boost::end(multipolygon),
+ turns.begin(),
+ turns.end()) )
+ {
+ return false;
+ }
+
+
+ // check if polygon interiors are disjoint
+ debug_phase::apply(5);
+ return are_polygon_interiors_disjoint(boost::begin(multipolygon),
+ boost::end(multipolygon),
+ turns.begin(),
+ turns.end());
+ }
+};
+
+}} // namespace detail::is_valid
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// Not clear what the definition is.
+// Right now we check that each element is simple (in fact valid), and
+// that the MultiPolygon is also valid.
+//
+// Reference (for validity of MultiPolygons): OGC 06-103r4 (6.1.14)
+template <typename MultiPolygon, bool AllowSpikes, bool AllowDuplicates>
+struct is_valid<MultiPolygon, multi_polygon_tag, AllowSpikes, AllowDuplicates>
+ : detail::is_valid::is_valid_multipolygon<MultiPolygon, AllowDuplicates>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_MULTIPOLYGON_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/pointlike.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/pointlike.hpp
new file mode 100644
index 0000000000..8a4818ef15
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/pointlike.hpp
@@ -0,0 +1,62 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POINTLIKE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POINTLIKE_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+// A point is always simple
+template <typename Point>
+struct is_valid<Point, point_tag>
+{
+ static inline bool apply(Point const&)
+ {
+ return true;
+ }
+};
+
+
+
+// A MultiPoint is simple if no two Points in the MultiPoint are equal
+// (have identical coordinate values in X and Y)
+//
+// Reference: OGC 06-103r4 (6.1.5)
+template <typename MultiPoint>
+struct is_valid<MultiPoint, multi_point_tag>
+{
+ static inline bool apply(MultiPoint const& multipoint)
+ {
+ return boost::size(multipoint) > 0;
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POINTLIKE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/polygon.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/polygon.hpp
new file mode 100644
index 0000000000..268b8975e2
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/polygon.hpp
@@ -0,0 +1,322 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POLYGON_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POLYGON_HPP
+
+#include <cstddef>
+
+#include <algorithm>
+#include <deque>
+#include <iterator>
+#include <set>
+
+#include <boost/assert.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/num_interior_rings.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+
+#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
+
+#include <boost/geometry/algorithms/detail/is_valid/complement_graph.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/ring.hpp>
+
+#include <boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_valid
+{
+
+
+template
+<
+ typename Polygon,
+ bool AllowDuplicates,
+ bool CheckRingValidityOnly = false
+>
+class is_valid_polygon
+{
+protected:
+ typedef debug_validity_phase<Polygon> debug_phase;
+
+
+
+ template <typename InteriorRings>
+ static bool has_valid_interior_rings(InteriorRings const& interior_rings)
+ {
+ return
+ detail::check_iterator_range
+ <
+ detail::is_valid::is_valid_ring
+ <
+ typename boost::range_value<InteriorRings>::type,
+ AllowDuplicates,
+ false, // do not check self-intersections
+ true // indicate that the ring is interior
+ >
+ >::apply(boost::begin(interior_rings),
+ boost::end(interior_rings));
+ }
+
+ struct has_valid_rings
+ {
+ static inline bool apply(Polygon const& polygon)
+ {
+ typedef typename ring_type<Polygon>::type ring_type;
+
+ // check validity of exterior ring
+ debug_phase::apply(1);
+
+ if ( !detail::is_valid::is_valid_ring
+ <
+ ring_type,
+ AllowDuplicates,
+ false // do not check self intersections
+ >::apply(exterior_ring(polygon)) )
+ {
+ return false;
+ }
+
+ // check validity of interior rings
+ debug_phase::apply(2);
+
+ return has_valid_interior_rings(geometry::interior_rings(polygon));
+ }
+ };
+
+
+
+
+ template
+ <
+ typename RingIterator,
+ typename ExteriorRing,
+ typename TurnIterator
+ >
+ static inline bool are_holes_inside(RingIterator rings_first,
+ RingIterator rings_beyond,
+ ExteriorRing const& exterior_ring,
+ TurnIterator turns_first,
+ TurnIterator turns_beyond)
+ {
+ // collect the interior ring indices that have turns with the
+ // exterior ring
+ std::set<int> ring_indices;
+ for (TurnIterator tit = turns_first; tit != turns_beyond; ++tit)
+ {
+ if ( tit->operations[0].seg_id.ring_index == -1 )
+ {
+ BOOST_ASSERT( tit->operations[0].other_id.ring_index != -1 );
+ ring_indices.insert(tit->operations[0].other_id.ring_index);
+ }
+ else if ( tit->operations[0].other_id.ring_index == -1 )
+ {
+ BOOST_ASSERT( tit->operations[0].seg_id.ring_index != -1 );
+ ring_indices.insert(tit->operations[0].seg_id.ring_index);
+ }
+ }
+
+ int ring_index = 0;
+ for (RingIterator it = rings_first; it != rings_beyond;
+ ++it, ++ring_index)
+ {
+ // do not examine interior rings that have turns with the
+ // exterior ring
+ if ( ring_indices.find(ring_index) == ring_indices.end()
+ && !geometry::covered_by(range::front(*it), exterior_ring) )
+ {
+ return false;
+ }
+ }
+
+ // collect all rings (exterior and/or interior) that have turns
+ for (TurnIterator tit = turns_first; tit != turns_beyond; ++tit)
+ {
+ ring_indices.insert(tit->operations[0].seg_id.ring_index);
+ ring_indices.insert(tit->operations[0].other_id.ring_index);
+ }
+
+ ring_index = 0;
+ for (RingIterator it1 = rings_first; it1 != rings_beyond;
+ ++it1, ++ring_index)
+ {
+ // do not examine rings that are associated with turns
+ if ( ring_indices.find(ring_index) == ring_indices.end() )
+ {
+ for (RingIterator it2 = rings_first; it2 != rings_beyond; ++it2)
+ {
+ if ( it1 != it2
+ && geometry::within(range::front(*it1), *it2) )
+ {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ template
+ <
+ typename InteriorRings,
+ typename ExteriorRing,
+ typename TurnIterator
+ >
+ static inline bool are_holes_inside(InteriorRings const& interior_rings,
+ ExteriorRing const& exterior_ring,
+ TurnIterator first,
+ TurnIterator beyond)
+ {
+ return are_holes_inside(boost::begin(interior_rings),
+ boost::end(interior_rings),
+ exterior_ring,
+ first,
+ beyond);
+ }
+
+ struct has_holes_inside
+ {
+ template <typename TurnIterator>
+ static inline bool apply(Polygon const& polygon,
+ TurnIterator first,
+ TurnIterator beyond)
+ {
+ return are_holes_inside(geometry::interior_rings(polygon),
+ geometry::exterior_ring(polygon),
+ first,
+ beyond);
+ }
+ };
+
+
+
+
+ struct has_connected_interior
+ {
+ template <typename TurnIterator>
+ static inline bool apply(Polygon const& polygon,
+ TurnIterator first,
+ TurnIterator beyond)
+ {
+ typedef typename std::iterator_traits
+ <
+ TurnIterator
+ >::value_type turn_type;
+ typedef complement_graph<typename turn_type::point_type> graph;
+
+ graph g(geometry::num_interior_rings(polygon) + 1);
+ for (TurnIterator tit = first; tit != beyond; ++tit)
+ {
+ typename graph::vertex_handle v1 = g.add_vertex
+ ( tit->operations[0].seg_id.ring_index + 1 );
+ typename graph::vertex_handle v2 = g.add_vertex
+ ( tit->operations[0].other_id.ring_index + 1 );
+ typename graph::vertex_handle vip = g.add_vertex(tit->point);
+
+ g.add_edge(v1, vip);
+ g.add_edge(v2, vip);
+ }
+
+ debug_print_complement_graph(std::cout, g);
+
+ return !g.has_cycles();
+ }
+ };
+
+public:
+ static inline bool apply(Polygon const& polygon)
+ {
+ if ( !has_valid_rings::apply(polygon) )
+ {
+ return false;
+ }
+
+ if ( CheckRingValidityOnly )
+ {
+ return true;
+ }
+
+ // compute turns and check if all are acceptable
+ debug_phase::apply(3);
+
+ typedef has_valid_self_turns<Polygon> has_valid_turns;
+
+ std::deque<typename has_valid_turns::turn_type> turns;
+ bool has_invalid_turns = !has_valid_turns::apply(polygon, turns);
+ debug_print_turns(turns.begin(), turns.end());
+
+ if ( has_invalid_turns )
+ {
+ return false;
+ }
+
+ // check if all interior rings are inside the exterior ring
+ debug_phase::apply(4);
+
+ if ( !has_holes_inside::apply(polygon, turns.begin(), turns.end()) )
+ {
+ return false;
+ }
+
+ // check whether the interior of the polygon is a connected set
+ debug_phase::apply(5);
+
+ return has_connected_interior::apply(polygon,
+ turns.begin(),
+ turns.end());
+ }
+};
+
+
+}} // namespace detail::is_valid
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// A Polygon is always a simple geometric object provided that it is valid.
+//
+// Reference (for validity of Polygons): OGC 06-103r4 (6.1.11.1)
+template <typename Polygon, bool AllowSpikes, bool AllowDuplicates>
+struct is_valid<Polygon, polygon_tag, AllowSpikes, AllowDuplicates>
+ : detail::is_valid::is_valid_polygon<Polygon, AllowDuplicates>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POLYGON_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/ring.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/ring.hpp
new file mode 100644
index 0000000000..c88df79b05
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/ring.hpp
@@ -0,0 +1,173 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_RING_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_RING_HPP
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/point_order.hpp>
+
+#include <boost/geometry/util/order_as_direction.hpp>
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/algorithms/equals.hpp>
+
+#include <boost/geometry/views/reversible_view.hpp>
+#include <boost/geometry/views/closeable_view.hpp>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/has_spikes.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp>
+
+#include <boost/geometry/strategies/area.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace is_valid
+{
+
+
+// struct to check whether a ring is topologically closed
+template <typename Ring, closure_selector Closure /* open */>
+struct is_topologically_closed
+{
+ static inline bool apply(Ring const&)
+ {
+ return true;
+ }
+};
+
+template <typename Ring>
+struct is_topologically_closed<Ring, closed>
+{
+ static inline bool apply(Ring const& ring)
+ {
+ return geometry::equals(range::front(ring), range::back(ring));
+ }
+};
+
+
+
+template <typename ResultType, bool IsInteriorRing /* false */>
+struct ring_area_predicate
+{
+ typedef std::greater<ResultType> type;
+};
+
+template <typename ResultType>
+struct ring_area_predicate<ResultType, true>
+{
+ typedef std::less<ResultType> type;
+};
+
+
+
+template <typename Ring, bool IsInteriorRing>
+struct is_properly_oriented
+{
+ typedef typename point_type<Ring>::type point_type;
+
+ typedef typename strategy::area::services::default_strategy
+ <
+ typename cs_tag<point_type>::type,
+ point_type
+ >::type strategy_type;
+
+ typedef detail::area::ring_area
+ <
+ order_as_direction<geometry::point_order<Ring>::value>::value,
+ geometry::closure<Ring>::value
+ > ring_area_type;
+
+ typedef typename default_area_result<Ring>::type area_result_type;
+
+ static inline bool apply(Ring const& ring)
+ {
+ typename ring_area_predicate
+ <
+ area_result_type, IsInteriorRing
+ >::type predicate;
+
+ // Check area
+ area_result_type const zero = area_result_type();
+ return predicate(ring_area_type::apply(ring, strategy_type()), zero);
+ }
+};
+
+
+
+template
+<
+ typename Ring,
+ bool AllowDuplicates,
+ bool CheckSelfIntersections = true,
+ bool IsInteriorRing = false
+>
+struct is_valid_ring
+{
+ static inline bool apply(Ring const& ring)
+ {
+ // return invalid if any of the following condition holds:
+ // (a) the ring's size is below the minimal one
+ // (b) the ring is not topologically closed
+ // (c) the ring has spikes
+ // (d) the ring has duplicate points (if AllowDuplicates is false)
+ // (e) the boundary of the ring has self-intersections
+ // (f) the order of the points is inconsistent with the defined order
+ //
+ // Note: no need to check if the area is zero. If this is the
+ // case, then the ring must have at least two spikes, which is
+ // checked by condition (c).
+
+ closure_selector const closure = geometry::closure<Ring>::value;
+
+ return
+ ( boost::size(ring)
+ >= core_detail::closure::minimum_ring_size<closure>::value )
+ && is_topologically_closed<Ring, closure>::apply(ring)
+ && (AllowDuplicates || !has_duplicates<Ring, closure>::apply(ring))
+ && !has_spikes<Ring, closure>::apply(ring)
+ && !(CheckSelfIntersections && geometry::intersects(ring))
+ && is_properly_oriented<Ring, IsInteriorRing>::apply(ring);
+ }
+};
+
+
+}} // namespace dispatch
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+// A Ring is a Polygon with exterior boundary only.
+// The Ring's boundary must be a LinearRing (see OGC 06-103-r4,
+// 6.1.7.1, for the definition of LinearRing)
+//
+// Reference (for polygon validity): OGC 06-103r4 (6.1.11.1)
+template <typename Ring, bool AllowSpikes, bool AllowDuplicates>
+struct is_valid<Ring, ring_tag, AllowSpikes, AllowDuplicates>
+ : detail::is_valid::is_valid_ring<Ring, AllowDuplicates>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_RING_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/is_valid/segment.hpp b/3party/boost/boost/geometry/algorithms/detail/is_valid/segment.hpp
new file mode 100644
index 0000000000..486289dabe
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/is_valid/segment.hpp
@@ -0,0 +1,61 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_SEGMENT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_SEGMENT_HPP
+
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/algorithms/equals.hpp>
+
+#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// A segment is a curve.
+// A curve is simple if it does not pass through the same point twice,
+// with the possible exception of its two endpoints
+// A curve is 1-dimensional, hence we have to check is the two
+// endpoints of the segment coincide, since in this case it is
+// 0-dimensional.
+//
+// Reference: OGC 06-103r4 (6.1.6.1)
+template <typename Segment>
+struct is_valid<Segment, segment_tag>
+{
+ static inline bool apply(Segment const& segment)
+ {
+ typename point_type<Segment>::type p[2];
+ detail::assign_point_from_index<0>(segment, p[0]);
+ detail::assign_point_from_index<1>(segment, p[1]);
+
+ return !geometry::equals(p[0], p[1]);
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_SEGMENT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/multi_modify.hpp b/3party/boost/boost/geometry/algorithms/detail/multi_modify.hpp
new file mode 100644
index 0000000000..f0b9ddd3e6
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/multi_modify.hpp
@@ -0,0 +1,53 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_HPP
+
+
+#include <boost/range.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+
+template <typename MultiGeometry, typename Policy>
+struct multi_modify
+{
+ static inline void apply(MultiGeometry& multi)
+ {
+ typedef typename boost::range_iterator<MultiGeometry>::type iterator_type;
+ for (iterator_type it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it)
+ {
+ Policy::apply(*it);
+ }
+ }
+};
+
+
+} // namespace detail
+#endif
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp b/3party/boost/boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp
new file mode 100644
index 0000000000..c3787f9a10
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp
@@ -0,0 +1,52 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_WITH_PREDICATE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_WITH_PREDICATE_HPP
+
+
+#include <boost/range.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+template <typename MultiGeometry, typename Predicate, typename Policy>
+struct multi_modify_with_predicate
+{
+ static inline void apply(MultiGeometry& multi, Predicate const& predicate)
+ {
+ typedef typename boost::range_iterator<MultiGeometry>::type iterator_type;
+ for (iterator_type it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it)
+ {
+ Policy::apply(*it, predicate);
+ }
+ }
+};
+
+
+} // namespace detail
+#endif
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_WITH_PREDICATE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/multi_sum.hpp b/3party/boost/boost/geometry/algorithms/detail/multi_sum.hpp
new file mode 100644
index 0000000000..af3f425c9c
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/multi_sum.hpp
@@ -0,0 +1,52 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_SUM_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_SUM_HPP
+
+#include <boost/range.hpp>
+
+
+namespace boost { namespace geometry
+{
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+struct multi_sum
+{
+ template <typename ReturnType, typename Policy, typename MultiGeometry, typename Strategy>
+ static inline ReturnType apply(MultiGeometry const& geometry, Strategy const& strategy)
+ {
+ ReturnType sum = ReturnType();
+ for (typename boost::range_iterator
+ <
+ MultiGeometry const
+ >::type it = boost::begin(geometry);
+ it != boost::end(geometry);
+ ++it)
+ {
+ sum += Policy::apply(*it, strategy);
+ }
+ return sum;
+ }
+};
+
+
+} // namespace detail
+#endif
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_SUM_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp b/3party/boost/boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp
new file mode 100644
index 0000000000..16fba72fe0
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp
@@ -0,0 +1,93 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_NUM_DISTINCT_CONSECUTIVE_POINTS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_NUM_DISTINCT_CONSECUTIVE_POINTS_HPP
+
+#include <cstddef>
+
+#include <algorithm>
+
+#include <boost/range.hpp>
+
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+
+// returns the number of distinct values in the range;
+// return values are 0u through MaximumNumber, where MaximumNumber
+// corresponds to MaximumNumber or more distinct values
+//
+// FUTURE: take into account topologically closed ranges;
+// add appropriate template parameter(s) to control whether
+// the closing point for topologically closed ranges is to be
+// accounted for separately or not
+template
+<
+ typename Range,
+ std::size_t MaximumNumber,
+ bool AllowDuplicates /* true */,
+ typename NotEqualTo
+>
+struct num_distinct_consecutive_points
+{
+ static inline std::size_t apply(Range const& range)
+ {
+ typedef typename boost::range_iterator<Range const>::type iterator;
+
+ std::size_t const size = boost::size(range);
+
+ if ( size < 2u )
+ {
+ return (size < MaximumNumber) ? size : MaximumNumber;
+ }
+
+ iterator current = boost::begin(range);
+ std::size_t counter(0);
+ do
+ {
+ ++counter;
+ iterator next = std::find_if(current,
+ boost::end(range),
+ NotEqualTo(*current));
+ current = next;
+ }
+ while ( current != boost::end(range) && counter <= MaximumNumber );
+
+ return counter;
+ }
+};
+
+
+template <typename Range, std::size_t MaximumNumber, typename NotEqualTo>
+struct num_distinct_consecutive_points<Range, MaximumNumber, false, NotEqualTo>
+{
+ static inline std::size_t apply(Range const& range)
+ {
+ std::size_t const size = boost::size(range);
+ return (size < MaximumNumber) ? size : MaximumNumber;
+ }
+};
+
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_NUM_DISTINCT_CONSECUTIVE_POINTS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/occupation_info.hpp b/3party/boost/boost/geometry/algorithms/detail/occupation_info.hpp
index f4d5adac8a..92c07006f2 100644
--- a/3party/boost/boost/geometry/algorithms/detail/occupation_info.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/occupation_info.hpp
@@ -1,6 +1,6 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,17 +9,13 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP
-#if ! defined(NDEBUG)
-// #define BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION
-#endif
-
#include <algorithm>
#include <boost/range.hpp>
#include <boost/geometry/core/coordinate_type.hpp>
#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/policies/compare.hpp>
#include <boost/geometry/iterators/closing_iterator.hpp>
#include <boost/geometry/algorithms/detail/get_left_turns.hpp>
@@ -33,80 +29,6 @@ namespace boost { namespace geometry
namespace detail
{
-template <typename P>
-class relaxed_less
-{
- typedef typename geometry::coordinate_type<P>::type coordinate_type;
-
- coordinate_type epsilon;
-
-public :
-
- inline relaxed_less()
- {
- // TODO: adapt for ttmath, and maybe build the map in another way
- // (e.g. exact constellations of segment-id's), maybe adaptive.
- epsilon = std::numeric_limits<double>::epsilon() * 100.0;
- }
-
- inline bool operator()(P const& a, P const& b) const
- {
- coordinate_type const dx = math::abs(geometry::get<0>(a) - geometry::get<0>(b));
- coordinate_type const dy = math::abs(geometry::get<1>(a) - geometry::get<1>(b));
-
-
- if (dx < epsilon && dy < epsilon)
- {
- return false;
- }
- if (dx < epsilon)
- {
- return geometry::get<1>(a) < geometry::get<1>(b);
- }
-
- return geometry::get<0>(a) < geometry::get<0>(b);
- }
-
- inline bool equals(P const& a, P const& b) const
- {
- typedef typename geometry::coordinate_type<P>::type coordinate_type;
-
- coordinate_type const dx = math::abs(geometry::get<0>(a) - geometry::get<0>(b));
- coordinate_type const dy = math::abs(geometry::get<1>(a) - geometry::get<1>(b));
-
- return dx < epsilon && dy < epsilon;
- };
-};
-
-
-template <typename T, typename P1, typename P2>
-inline T calculate_angle(P1 const& from_point, P2 const& to_point)
-{
- typedef P1 vector_type;
- vector_type v = from_point;
- geometry::subtract_point(v, to_point);
- return atan2(geometry::get<1>(v), geometry::get<0>(v));
-}
-
-template <typename Iterator, typename Vector>
-inline Iterator advance_circular(Iterator it, Vector const& vector, segment_identifier& seg_id, bool forward = true)
-{
- int const increment = forward ? 1 : -1;
- if (it == boost::begin(vector) && increment < 0)
- {
- it = boost::end(vector);
- seg_id.segment_index = boost::size(vector);
- }
- it += increment;
- seg_id.segment_index += increment;
- if (it == boost::end(vector))
- {
- seg_id.segment_index = 0;
- it = boost::begin(vector);
- }
- return it;
-}
-
template <typename Point, typename T>
struct angle_info
{
@@ -117,207 +39,160 @@ struct angle_info
int turn_index;
int operation_index;
Point intersection_point;
- Point direction_point;
- T angle;
+ Point point; // either incoming or outgoing point
bool incoming;
+ bool blocked;
+ bool included;
+
+ inline angle_info()
+ : blocked(false)
+ , included(false)
+ {}
};
template <typename AngleInfo>
class occupation_info
{
- typedef std::vector<AngleInfo> collection_type;
-
- struct angle_sort
- {
- inline bool operator()(AngleInfo const& left, AngleInfo const& right) const
- {
- // In this case we can compare even double using equals
- // return geometry::math::equals(left.angle, right.angle)
- return left.angle == right.angle
- ? int(left.incoming) < int(right.incoming)
- : left.angle < right.angle
- ;
- }
- };
-
public :
- collection_type angles;
-private :
- bool m_occupied;
- bool m_calculated;
-
- inline bool is_occupied()
- {
- if (boost::size(angles) <= 1)
- {
- return false;
- }
+ typedef std::vector<AngleInfo> collection_type;
+ typedef std::vector
+ <
+ detail::left_turns::turn_angle_info<typename AngleInfo::point_type>
+ > turn_vector_type;
- std::sort(angles.begin(), angles.end(), angle_sort());
+ collection_type angles; // each turn splitted in incoming/outgoing vectors
+ turn_vector_type turns;
+ int count;
- typedef geometry::closing_iterator<collection_type const> closing_iterator;
- closing_iterator vit(angles);
- closing_iterator end(angles, true);
- closing_iterator prev = vit++;
- for( ; vit != end; prev = vit++)
- {
- if (! geometry::math::equals(prev->angle, vit->angle)
- && ! prev->incoming
- && vit->incoming)
- {
- return false;
- }
- }
- return true;
- }
-
-public :
inline occupation_info()
- : m_occupied(false)
- , m_calculated(false)
+ : count(0)
{}
- template <typename PointC, typename Point1, typename Point2>
- inline void add(PointC const& map_point, Point1 const& direction_point, Point2 const& intersection_point,
+ template <typename RobustPoint>
+ inline void add(RobustPoint const& incoming_point,
+ RobustPoint const& outgoing_point,
+ RobustPoint const& intersection_point,
int turn_index, int operation_index,
- segment_identifier const& seg_id, bool incoming)
+ segment_identifier const& seg_id)
{
- //std::cout << "-> adding angle " << geometry::wkt(direction_point) << " .. " << geometry::wkt(intersection_point) << " " << int(incoming) << std::endl;
- if (geometry::equals(direction_point, intersection_point))
+ geometry::equal_to<RobustPoint> comparator;
+ if (comparator(incoming_point, intersection_point))
+ {
+ return;
+ }
+ if (comparator(outgoing_point, intersection_point))
{
- //std::cout << "EQUAL! Skipping" << std::endl;
return;
}
AngleInfo info;
- info.incoming = incoming;
- info.angle = calculate_angle<typename AngleInfo::angle_type>(direction_point, map_point);
info.seg_id = seg_id;
info.turn_index = turn_index;
info.operation_index = operation_index;
info.intersection_point = intersection_point;
- info.direction_point = direction_point;
- angles.push_back(info);
- m_calculated = false;
- }
-
- inline bool occupied()
- {
- if (! m_calculated)
{
- m_occupied = is_occupied();
- m_calculated = true;
+ info.point = incoming_point;
+ info.incoming = true;
+ angles.push_back(info);
+ }
+ {
+ info.point = outgoing_point;
+ info.incoming = false;
+ angles.push_back(info);
}
- return m_occupied;
+ detail::left_turns::turn_angle_info<typename AngleInfo::point_type> turn(seg_id, incoming_point, outgoing_point);
+ turn.turn_index = turn_index;
+ turns.push_back(turn);
}
- template <typename Turns, typename TurnSegmentIndices>
- inline void get_left_turns(
- Turns& turns, TurnSegmentIndices const& turn_segment_indices,
- std::set<int>& keep_indices)
+ template <typename RobustPoint>
+ inline void get_left_turns(RobustPoint const& origin,
+ std::vector<detail::left_turns::left_turn>& turns_to_keep)
{
- std::sort(angles.begin(), angles.end(), angle_sort());
- calculate_left_turns<AngleInfo>(angles, turns, turn_segment_indices, keep_indices);
- }
-};
+ // Sort on angle
+ std::sort(angles.begin(), angles.end(),
+ detail::left_turns::angle_less<typename AngleInfo::point_type>(origin));
+ // Block all turns on the right side of any turn
+ detail::left_turns::block_turns_on_right_sides(turns, angles);
-template <typename Point, typename Ring, typename Info>
-inline void add_incoming_and_outgoing_angles(Point const& map_point, Point const& intersection_point,
- Ring const& ring,
- int turn_index,
- int operation_index,
- segment_identifier seg_id,
- Info& info)
-{
- typedef typename boost::range_iterator
- <
- Ring const
- >::type iterator_type;
-
- int const n = boost::size(ring);
- if (seg_id.segment_index >= n || seg_id.segment_index < 0)
- {
- return;
+ detail::left_turns::get_left_turns(angles, origin, turns_to_keep);
}
- segment_identifier real_seg_id = seg_id;
- iterator_type it = boost::begin(ring) + seg_id.segment_index;
-
- // TODO: if we use turn-info ("to", "middle"), we know if to advance without resorting to equals
- relaxed_less<Point> comparator;
-
- if (comparator.equals(intersection_point, *it))
+ template <typename RobustPoint>
+ inline bool has_rounding_issues(RobustPoint const& origin) const
{
- // It should be equal only once. But otherwise we skip it (in "add")
- it = advance_circular(it, ring, seg_id, false);
+ return detail::left_turns::has_rounding_issues(angles, origin);
}
+};
- info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, true);
+template<typename Pieces>
+inline void move_index(Pieces const& pieces, int& index, int& piece_index, int direction)
+{
+ BOOST_ASSERT(direction == 1 || direction == -1);
+ BOOST_ASSERT(piece_index >= 0 && piece_index < static_cast<int>(boost::size(pieces)) );
+ BOOST_ASSERT(index >= 0 && index < static_cast<int>(boost::size(pieces[piece_index].robust_ring)));
- if (comparator.equals(intersection_point, *it))
- {
- it = advance_circular(it, ring, real_seg_id);
- }
- else
+ index += direction;
+ if (direction == -1 && index < 0)
{
- // Don't upgrade the ID
- it = advance_circular(it, ring, seg_id);
+ piece_index--;
+ if (piece_index < 0)
+ {
+ piece_index = boost::size(pieces) - 1;
+ }
+ index = boost::size(pieces[piece_index].robust_ring) - 1;
}
- for (int defensive_check = 0;
- comparator.equals(intersection_point, *it) && defensive_check < n;
- defensive_check++)
+ if (direction == 1
+ && index >= static_cast<int>(boost::size(pieces[piece_index].robust_ring)))
{
- it = advance_circular(it, ring, real_seg_id);
+ piece_index++;
+ if (piece_index >= static_cast<int>(boost::size(pieces)))
+ {
+ piece_index = 0;
+ }
+ index = 0;
}
-
- info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, false);
}
-// Map in two senses of the word: it is a std::map where the key is a point.
-// Per point an "occupation_info" record is kept
-// Used for the buffer (but will also be used for intersections/unions having complex self-tangencies)
-template <typename Point, typename OccupationInfo>
-class occupation_map
+template
+<
+ typename RobustPoint,
+ typename Turn,
+ typename Pieces,
+ typename Info
+>
+inline void add_incoming_and_outgoing_angles(
+ RobustPoint const& intersection_point, // rescaled
+ Turn const& turn,
+ Pieces const& pieces, // using rescaled offsets of it
+ int turn_index,
+ int operation_index,
+ segment_identifier seg_id,
+ Info& info)
{
-public :
- typedef std::map<Point, OccupationInfo, relaxed_less<Point> > map_type;
-
- map_type map;
- std::set<int> turn_indices;
+ segment_identifier real_seg_id = seg_id;
+ geometry::equal_to<RobustPoint> comparator;
- inline OccupationInfo& find_or_insert(Point const& point, Point& mapped_point)
+ // Move backward and forward
+ RobustPoint direction_points[2];
+ for (int i = 0; i < 2; i++)
{
- typename map_type::iterator it = map.find(point);
- if (it == boost::end(map))
+ int index = turn.operations[operation_index].index_in_robust_ring;
+ int piece_index = turn.operations[operation_index].piece_index;
+ while(comparator(pieces[piece_index].robust_ring[index], intersection_point))
{
- std::pair<typename map_type::iterator, bool> pair
- = map.insert(std::make_pair(point, OccupationInfo()));
- it = pair.first;
+ move_index(pieces, index, piece_index, i == 0 ? -1 : 1);
}
- mapped_point = it->first;
- return it->second;
- }
-
- inline bool contains(Point const& point) const
- {
- typename map_type::const_iterator it = map.find(point);
- return it != boost::end(map);
- }
-
- inline bool contains_turn_index(int index) const
- {
- return turn_indices.count(index) > 0;
+ direction_points[i] = pieces[piece_index].robust_ring[index];
}
- inline void insert_turn_index(int index)
- {
- turn_indices.insert(index);
- }
-};
+ info.add(direction_points[0], direction_points[1], intersection_point,
+ turn_index, operation_index, real_seg_id);
+}
} // namespace detail
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp
index 2c0f88e2aa..0fd1fe4de9 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp
@@ -13,7 +13,7 @@
#include <boost/range.hpp>
#include <boost/geometry/algorithms/append.hpp>
-#include <boost/geometry/algorithms/detail/disjoint.hpp>
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
@@ -29,7 +29,7 @@ template <typename Range, typename Point>
inline void append_no_duplicates(Range& range, Point const& point, bool force = false)
{
if (boost::size(range) == 0
- || force
+ || force
|| ! geometry::detail::equals::equals_point_point(*(boost::end(range)-1), point))
{
#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp
new file mode 100644
index 0000000000..d44db17ad3
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp
@@ -0,0 +1,160 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPS_OR_SPIKES_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPS_OR_SPIKES_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/algorithms/append.hpp>
+#include <boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp>
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
+
+#include <boost/geometry/util/range.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay
+{
+
+// TODO: move this / rename this
+template <typename Point1, typename Point2, typename RobustPolicy>
+inline bool points_equal_or_close(Point1 const& point1,
+ Point2 const& point2,
+ RobustPolicy const& robust_policy)
+{
+ if (detail::equals::equals_point_point(point1, point2))
+ {
+ return true;
+ }
+
+ if (! RobustPolicy::enabled)
+ {
+ return false;
+ }
+
+ // Try using specified robust policy
+ typedef typename geometry::robust_point_type
+ <
+ Point1,
+ RobustPolicy
+ >::type robust_point_type;
+
+ robust_point_type point1_rob, point2_rob;
+ geometry::recalculate(point1_rob, point1, robust_policy);
+ geometry::recalculate(point2_rob, point2, robust_policy);
+
+ return detail::equals::equals_point_point(point1_rob, point2_rob);
+}
+
+
+template <typename Range, typename Point, typename RobustPolicy>
+inline void append_no_dups_or_spikes(Range& range, Point const& point,
+ RobustPolicy const& robust_policy)
+{
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ std::cout << " add: ("
+ << geometry::get<0>(point) << ", " << geometry::get<1>(point) << ")"
+ << std::endl;
+#endif
+ // The code below thies condition checks all spikes/dups
+ // for geometries >= 3 points.
+ // So we have to check the first potential duplicate differently
+ if (boost::size(range) == 1
+ && points_equal_or_close(*(boost::begin(range)), point, robust_policy))
+ {
+ return;
+ }
+
+ traits::push_back<Range>::apply(range, point);
+
+ // If a point is equal, or forming a spike, remove the pen-ultimate point
+ // because this one caused the spike.
+ // If so, the now-new-pen-ultimate point can again cause a spike
+ // (possibly at a corner). So keep doing this.
+ // Besides spikes it will also avoid adding duplicates.
+ while(boost::size(range) >= 3
+ && point_is_spike_or_equal(point,
+ *(boost::end(range) - 3),
+ *(boost::end(range) - 2),
+ robust_policy))
+ {
+ // Use the Concept/traits, so resize and append again
+ traits::resize<Range>::apply(range, boost::size(range) - 2);
+ traits::push_back<Range>::apply(range, point);
+ }
+}
+
+template <typename Range, typename RobustPolicy>
+inline void clean_closing_dups_and_spikes(Range& range,
+ RobustPolicy const& robust_policy)
+{
+ std::size_t const minsize
+ = core_detail::closure::minimum_ring_size
+ <
+ geometry::closure<Range>::value
+ >::value;
+
+ if (boost::size(range) <= minsize)
+ {
+ return;
+ }
+
+ typedef typename boost::range_iterator<Range>::type iterator_type;
+ static bool const closed = geometry::closure<Range>::value == geometry::closed;
+
+// TODO: the following algorithm could be rewritten to first look for spikes
+// and then erase some number of points from the beginning of the Range
+
+ bool found = false;
+ do
+ {
+ found = false;
+ iterator_type first = boost::begin(range);
+ iterator_type second = first + 1;
+ iterator_type ultimate = boost::end(range) - 1;
+ if (closed)
+ {
+ ultimate--;
+ }
+
+ // Check if closing point is a spike (this is so if the second point is
+ // considered as a spike w.r.t. the last segment)
+ if (point_is_spike_or_equal(*second, *ultimate, *first, robust_policy))
+ {
+ range::erase(range, first);
+ if (closed)
+ {
+ // Remove closing last point
+ range::resize(range, boost::size(range) - 1);
+ // Add new closing point
+ range::push_back(range, range::front(range));
+ }
+ found = true;
+ }
+ } while(found && boost::size(range) > minsize);
+}
+
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPS_OR_SPIKES_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp
index 5063f49eb4..a7cbd038d2 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp
@@ -18,6 +18,10 @@
#include <boost/geometry/geometries/box.hpp>
+#ifdef BOOST_GEOMETRY_TIME_OVERLAY
+# include <boost/timer.hpp>
+#endif
+
namespace boost { namespace geometry
{
@@ -243,7 +247,7 @@ inline void assign_parents(Geometry1 const& geometry1,
// a dramatic improvement (factor 5 for star_comb testcase)
ring_identifier id_of_positive = vector[index_positive].id;
ring_info_type& outer = ring_map[id_of_positive];
- std::size_t index = 0;
+ index = 0;
for (vector_iterator_type it = boost::begin(vector);
it != boost::end(vector); ++it, ++index)
{
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
index 012b3aca30..90901dee70 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
@@ -55,8 +55,8 @@ inline void clear_visit_info(Turns& turns)
struct backtrack_state
{
bool m_good;
-
- inline backtrack_state() : m_good(true) {}
+
+ inline backtrack_state() : m_good(true) {}
inline void reset() { m_good = true; }
inline bool good() const { return m_good; }
};
@@ -79,29 +79,30 @@ class backtrack_check_self_intersections
public :
typedef state state_type;
- template <typename Operation, typename Rings, typename Turns>
- static inline void apply(std::size_t size_at_start,
- Rings& rings, typename boost::range_value<Rings>::type& ring,
+ template <typename Operation, typename Rings, typename Ring, typename Turns, typename RobustPolicy>
+ static inline void apply(std::size_t size_at_start,
+ Rings& rings, Ring& ring,
Turns& turns, Operation& operation,
std::string const& ,
Geometry1 const& geometry1,
Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
state_type& state
)
{
state.m_good = false;
-
+
// Check self-intersections and throw exception if appropriate
if (! state.m_checked)
{
state.m_checked = true;
- has_self_intersections(geometry1);
- has_self_intersections(geometry2);
+ has_self_intersections(geometry1, robust_policy);
+ has_self_intersections(geometry2, robust_policy);
}
// Make bad output clean
rings.resize(size_at_start);
- ring.clear();
+ geometry::traits::clear<typename boost::range_value<Rings>::type>::apply(ring);
// Reject this as a starting point
operation.visited.set_rejected();
@@ -123,7 +124,7 @@ public :
typedef backtrack_state state_type;
template <typename Operation, typename Rings, typename Turns>
- static inline void apply(std::size_t size_at_start,
+ static inline void apply(std::size_t size_at_start,
Rings& rings, typename boost::range_value<Rings>::type& ring,
Turns& turns, Operation& operation,
std::string const& reason,
@@ -133,7 +134,7 @@ public :
)
{
std::cout << " REJECT " << reason << std::endl;
-
+
state.m_good = false;
rings.resize(size_at_start);
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp
deleted file mode 100644
index a365ccf90a..0000000000
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CALCULATE_DISTANCE_POLICY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CALCULATE_DISTANCE_POLICY_HPP
-
-
-#include <boost/geometry/algorithms/comparable_distance.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-/*!
- \brief Policy calculating distance
- \details get_turn_info has an optional policy to get some
- extra information.
- This policy calculates the distance (using default distance strategy)
- */
-struct calculate_distance_policy
-{
- static bool const include_no_turn = false;
- static bool const include_degenerate = false;
- static bool const include_opposite = false;
-
- template
- <
- typename Info,
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo
- >
- static inline void apply(Info& info, Point1 const& p1, Point2 const& p2,
- IntersectionInfo const&, DirInfo const&)
- {
- info.operations[0].enriched.distance
- = geometry::comparable_distance(info.point, p1);
- info.operations[1].enriched.distance
- = geometry::comparable_distance(info.point, p2);
- }
-
-};
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CALCULATE_DISTANCE_POLICY_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp
index b210fd04b1..03be18e07a 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp
@@ -137,7 +137,7 @@ inline bool check_graph(TurnPoints& turn_points, operation_type for_operation)
it != boost::end(meta_turns);
++it)
{
- if (! (it->turn->blocked() || it->turn->is_discarded()))
+ if (! (it->turn->blocked() || it->turn->discarded))
{
for (int i = 0 ; i < 2; i++)
{
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp
index 5e18d0453a..4040fbe6b1 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp
@@ -17,6 +17,7 @@
#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/algorithms/convert.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/views/closeable_view.hpp>
@@ -124,6 +125,30 @@ struct copy_segment_point_box
};
+template
+<
+ typename MultiGeometry,
+ typename SegmentIdentifier,
+ typename PointOut,
+ typename Policy
+>
+struct copy_segment_point_multi
+{
+ static inline bool apply(MultiGeometry const& multi,
+ SegmentIdentifier const& seg_id, bool second,
+ PointOut& point)
+ {
+
+ BOOST_ASSERT
+ (
+ seg_id.multi_index >= 0
+ && seg_id.multi_index < int(boost::size(multi))
+ );
+
+ // Call the single-version
+ return Policy::apply(multi[seg_id.multi_index], seg_id, second, point);
+ }
+};
}} // namespace detail::copy_segments
@@ -188,6 +213,66 @@ struct copy_segment_point<box_tag, Box, Reverse, SegmentIdentifier, PointOut>
{};
+template
+<
+ typename MultiGeometry,
+ bool Reverse,
+ typename SegmentIdentifier,
+ typename PointOut
+>
+struct copy_segment_point
+ <
+ multi_polygon_tag,
+ MultiGeometry,
+ Reverse,
+ SegmentIdentifier,
+ PointOut
+ >
+ : detail::copy_segments::copy_segment_point_multi
+ <
+ MultiGeometry,
+ SegmentIdentifier,
+ PointOut,
+ detail::copy_segments::copy_segment_point_polygon
+ <
+ typename boost::range_value<MultiGeometry>::type,
+ Reverse,
+ SegmentIdentifier,
+ PointOut
+ >
+ >
+{};
+
+template
+<
+ typename MultiGeometry,
+ bool Reverse,
+ typename SegmentIdentifier,
+ typename PointOut
+>
+struct copy_segment_point
+ <
+ multi_linestring_tag,
+ MultiGeometry,
+ Reverse,
+ SegmentIdentifier,
+ PointOut
+ >
+ : detail::copy_segments::copy_segment_point_multi
+ <
+ MultiGeometry,
+ SegmentIdentifier,
+ PointOut,
+ detail::copy_segments::copy_segment_point_range
+ <
+ typename boost::range_value<MultiGeometry>::type,
+ Reverse,
+ SegmentIdentifier,
+ PointOut
+ >
+ >
+{};
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp
index 805f3923e3..d4bf0a90f4 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp
@@ -1,6 +1,11 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -10,24 +15,30 @@
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP
-#include <boost/array.hpp>
-#include <boost/mpl/assert.hpp>
#include <vector>
+#include <boost/array.hpp>
#include <boost/assert.hpp>
+#include <boost/mpl/assert.hpp>
#include <boost/range.hpp>
+#include <boost/type_traits/integral_constant.hpp>
#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/iterators/ever_circling_iterator.hpp>
#include <boost/geometry/views/closeable_view.hpp>
#include <boost/geometry/views/reversible_view.hpp>
#include <boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp>
+#include <boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp>
+
namespace boost { namespace geometry
{
@@ -38,34 +49,37 @@ namespace detail { namespace copy_segments
{
-template
-<
- typename Ring,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
->
+template <bool Reverse>
struct copy_segments_ring
{
- typedef typename closeable_view
+ template
+ <
+ typename Ring,
+ typename SegmentIdentifier,
+ typename RobustPolicy,
+ typename RangeOut
+ >
+ static inline void apply(Ring const& ring,
+ SegmentIdentifier const& seg_id, int to_index,
+ RobustPolicy const& robust_policy,
+ RangeOut& current_output)
+ {
+ typedef typename closeable_view
<
Ring const,
closure<Ring>::value
>::type cview_type;
- typedef typename reversible_view
+ typedef typename reversible_view
<
cview_type const,
Reverse ? iterate_reverse : iterate_forward
>::type rview_type;
- typedef typename boost::range_iterator<rview_type const>::type iterator;
- typedef geometry::ever_circling_iterator<iterator> ec_iterator;
+ typedef typename boost::range_iterator<rview_type const>::type iterator;
+ typedef geometry::ever_circling_iterator<iterator> ec_iterator;
+
- static inline void apply(Ring const& ring,
- SegmentIdentifier const& seg_id, int to_index,
- RangeOut& current_output)
- {
cview_type cview(ring);
rview_type view(cview);
@@ -93,31 +107,55 @@ struct copy_segments_ring
for (size_type i = 0; i < count; ++i, ++it)
{
- detail::overlay::append_no_duplicates(current_output, *it);
+ detail::overlay::append_no_dups_or_spikes(current_output, *it, robust_policy);
}
}
};
-template
-<
- typename LineString,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
->
-struct copy_segments_linestring
+template <bool Reverse, bool RemoveSpikes = true>
+class copy_segments_linestring
{
+private:
+ // remove spikes
+ template <typename RangeOut, typename Point, typename RobustPolicy>
+ static inline void append_to_output(RangeOut& current_output,
+ Point const& point,
+ RobustPolicy const& robust_policy,
+ boost::true_type const&)
+ {
+ detail::overlay::append_no_dups_or_spikes(current_output, point,
+ robust_policy);
+ }
- typedef typename boost::range_iterator<LineString const>::type iterator;
+ // keep spikes
+ template <typename RangeOut, typename Point, typename RobustPolicy>
+ static inline void append_to_output(RangeOut& current_output,
+ Point const& point,
+ RobustPolicy const&,
+ boost::false_type const&)
+ {
+ detail::overlay::append_no_duplicates(current_output, point);
+ }
+public:
+ template
+ <
+ typename LineString,
+ typename SegmentIdentifier,
+ typename RobustPolicy,
+ typename RangeOut
+ >
static inline void apply(LineString const& ls,
SegmentIdentifier const& seg_id, int to_index,
+ RobustPolicy const& robust_policy,
RangeOut& current_output)
{
int const from_index = seg_id.segment_index + 1;
// Sanity check
- if (from_index > to_index || from_index < 0 || to_index >= int(boost::size(ls)))
+ if ( from_index > to_index
+ || from_index < 0
+ || to_index >= int(boost::size(ls)) )
{
return;
}
@@ -125,58 +163,59 @@ struct copy_segments_linestring
typedef typename boost::range_difference<LineString>::type size_type;
size_type const count = to_index - from_index + 1;
- typename boost::range_iterator<LineString const>::type it = boost::begin(ls) + from_index;
+ typename boost::range_iterator<LineString const>::type
+ it = boost::begin(ls) + from_index;
for (size_type i = 0; i < count; ++i, ++it)
{
- detail::overlay::append_no_duplicates(current_output, *it);
+ append_to_output(current_output, *it, robust_policy,
+ boost::integral_constant<bool, RemoveSpikes>());
}
}
};
-template
-<
- typename Polygon,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
->
+template <bool Reverse>
struct copy_segments_polygon
{
+ template
+ <
+ typename Polygon,
+ typename SegmentIdentifier,
+ typename RobustPolicy,
+ typename RangeOut
+ >
static inline void apply(Polygon const& polygon,
SegmentIdentifier const& seg_id, int to_index,
+ RobustPolicy const& robust_policy,
RangeOut& current_output)
{
// Call ring-version with the right ring
- copy_segments_ring
- <
- typename geometry::ring_type<Polygon>::type,
- Reverse,
- SegmentIdentifier,
- RangeOut
- >::apply
- (
- seg_id.ring_index < 0
- ? geometry::exterior_ring(polygon)
- : geometry::interior_rings(polygon)[seg_id.ring_index],
- seg_id, to_index,
- current_output
- );
+ copy_segments_ring<Reverse>::apply
+ (
+ seg_id.ring_index < 0
+ ? geometry::exterior_ring(polygon)
+ : geometry::interior_rings(polygon)[seg_id.ring_index],
+ seg_id, to_index,
+ robust_policy,
+ current_output
+ );
}
};
-template
-<
- typename Box,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
->
+template <bool Reverse>
struct copy_segments_box
{
+ template
+ <
+ typename Box,
+ typename SegmentIdentifier,
+ typename RobustPolicy,
+ typename RangeOut
+ >
static inline void apply(Box const& box,
SegmentIdentifier const& seg_id, int to_index,
+ RobustPolicy const& robust_policy,
RangeOut& current_output)
{
int index = seg_id.segment_index + 1;
@@ -195,13 +234,45 @@ struct copy_segments_box
// (see comments in ring-version)
for (int i = 0; i < count; i++, index++)
{
- detail::overlay::append_no_duplicates(current_output, bp[index % 5]);
+ detail::overlay::append_no_dups_or_spikes(current_output,
+ bp[index % 5], robust_policy);
}
}
};
+template<typename Policy>
+struct copy_segments_multi
+{
+ template
+ <
+ typename MultiGeometry,
+ typename SegmentIdentifier,
+ typename RobustPolicy,
+ typename RangeOut
+ >
+ static inline void apply(MultiGeometry const& multi_geometry,
+ SegmentIdentifier const& seg_id, int to_index,
+ RobustPolicy const& robust_policy,
+ RangeOut& current_output)
+ {
+
+ BOOST_ASSERT
+ (
+ seg_id.multi_index >= 0
+ && seg_id.multi_index < int(boost::size(multi_geometry))
+ );
+
+ // Call the single-version
+ Policy::apply(multi_geometry[seg_id.multi_index],
+ seg_id, to_index,
+ robust_policy,
+ current_output);
+ }
+};
+
+
}} // namespace detail::copy_segments
#endif // DOXYGEN_NO_DETAIL
@@ -213,82 +284,44 @@ namespace dispatch
template
<
typename Tag,
- typename GeometryIn,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
+ bool Reverse
>
-struct copy_segments
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<GeometryIn>)
- );
-};
+struct copy_segments : not_implemented<Tag>
+{};
-template
-<
- typename Ring,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
->
-struct copy_segments<ring_tag, Ring, Reverse, SegmentIdentifier, RangeOut>
- : detail::copy_segments::copy_segments_ring
- <
- Ring, Reverse, SegmentIdentifier, RangeOut
- >
+template <bool Reverse>
+struct copy_segments<ring_tag, Reverse>
+ : detail::copy_segments::copy_segments_ring<Reverse>
{};
+template <bool Reverse>
+struct copy_segments<linestring_tag, Reverse>
+ : detail::copy_segments::copy_segments_linestring<Reverse>
+{};
-template
-<
- typename LineString,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
->
-struct copy_segments<linestring_tag, LineString, Reverse, SegmentIdentifier, RangeOut>
- : detail::copy_segments::copy_segments_linestring
- <
- LineString, Reverse, SegmentIdentifier, RangeOut
- >
+template <bool Reverse>
+struct copy_segments<polygon_tag, Reverse>
+ : detail::copy_segments::copy_segments_polygon<Reverse>
{};
-template
-<
- typename Polygon,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
->
-struct copy_segments<polygon_tag, Polygon, Reverse, SegmentIdentifier, RangeOut>
- : detail::copy_segments::copy_segments_polygon
- <
- Polygon, Reverse, SegmentIdentifier, RangeOut
- >
+
+template <bool Reverse>
+struct copy_segments<box_tag, Reverse>
+ : detail::copy_segments::copy_segments_box<Reverse>
{};
-template
-<
- typename Box,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
->
-struct copy_segments<box_tag, Box, Reverse, SegmentIdentifier, RangeOut>
- : detail::copy_segments::copy_segments_box
+template<bool Reverse>
+struct copy_segments<multi_polygon_tag, Reverse>
+ : detail::copy_segments::copy_segments_multi
<
- Box, Reverse, SegmentIdentifier, RangeOut
+ detail::copy_segments::copy_segments_polygon<Reverse>
>
{};
-
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
@@ -303,10 +336,12 @@ template
bool Reverse,
typename Geometry,
typename SegmentIdentifier,
+ typename RobustPolicy,
typename RangeOut
>
inline void copy_segments(Geometry const& geometry,
SegmentIdentifier const& seg_id, int to_index,
+ RobustPolicy const& robust_policy,
RangeOut& range_out)
{
concept::check<Geometry const>();
@@ -314,11 +349,8 @@ inline void copy_segments(Geometry const& geometry,
dispatch::copy_segments
<
typename tag<Geometry>::type,
- Geometry,
- Reverse,
- SegmentIdentifier,
- RangeOut
- >::apply(geometry, seg_id, to_index, range_out);
+ Reverse
+ >::apply(geometry, seg_id, to_index, robust_policy, range_out);
}
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/do_reverse.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/do_reverse.hpp
new file mode 100644
index 0000000000..15100f8d0b
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/do_reverse.hpp
@@ -0,0 +1,47 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DO_REVERSE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DO_REVERSE_HPP
+
+#include <boost/geometry/core/point_order.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay
+{
+
+// Metafunction helper for intersection and union
+template <order_selector Selector, bool Reverse = false>
+struct do_reverse {};
+
+template <>
+struct do_reverse<clockwise, false> : boost::false_type {};
+
+template <>
+struct do_reverse<clockwise, true> : boost::true_type {};
+
+template <>
+struct do_reverse<counterclockwise, false> : boost::true_type {};
+
+template <>
+struct do_reverse<counterclockwise, true> : boost::false_type {};
+
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DO_REVERSE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp
index 00b7a5c3a9..9f4dd218de 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp
@@ -29,6 +29,7 @@
#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
#include <boost/geometry/algorithms/detail/overlay/get_relative_order.hpp>
#include <boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp>
+#include <boost/geometry/policies/robustness/robust_type.hpp>
#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
# include <boost/geometry/algorithms/detail/overlay/check_enrich.hpp>
#endif
@@ -75,19 +76,22 @@ template
typename TurnPoints,
typename Indexed,
typename Geometry1, typename Geometry2,
+ typename RobustPolicy,
bool Reverse1, bool Reverse2,
typename Strategy
>
-struct sort_on_segment_and_distance
+struct sort_on_segment_and_ratio
{
- inline sort_on_segment_and_distance(TurnPoints const& turn_points
+ inline sort_on_segment_and_ratio(TurnPoints const& turn_points
, Geometry1 const& geometry1
, Geometry2 const& geometry2
+ , RobustPolicy const& robust_policy
, Strategy const& strategy
, bool* clustered)
: m_turn_points(turn_points)
, m_geometry1(geometry1)
, m_geometry2(geometry2)
+ , m_robust_policy(robust_policy)
, m_strategy(strategy)
, m_clustered(clustered)
{
@@ -98,13 +102,25 @@ private :
TurnPoints const& m_turn_points;
Geometry1 const& m_geometry1;
Geometry2 const& m_geometry2;
+ RobustPolicy const& m_robust_policy;
Strategy const& m_strategy;
mutable bool* m_clustered;
- inline bool consider_relative_order(Indexed const& left,
- Indexed const& right) const
+ typedef typename geometry::point_type<Geometry1>::type point_type;
+ typedef typename geometry::robust_point_type
+ <
+ point_type,
+ RobustPolicy
+ >::type robust_point_type;
+
+ // TODO: this function is shared with handle_tangencies
+ // The one in handle_tangencies will go as soon as we have
+ // reliable "cluster_info" (using occupation_map, get_left_turns)
+ inline void get_situation_map(Indexed const& left, Indexed const& right,
+ robust_point_type& pi_rob, robust_point_type& pj_rob,
+ robust_point_type& ri_rob, robust_point_type& rj_rob,
+ robust_point_type& si_rob, robust_point_type& sj_rob) const
{
- typedef typename geometry::point_type<Geometry1>::type point_type;
point_type pi, pj, ri, rj, si, sj;
geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
@@ -117,10 +133,23 @@ private :
right.subject.other_id,
si, sj);
+ geometry::recalculate(pi_rob, pi, m_robust_policy);
+ geometry::recalculate(pj_rob, pj, m_robust_policy);
+ geometry::recalculate(ri_rob, ri, m_robust_policy);
+ geometry::recalculate(rj_rob, rj, m_robust_policy);
+ geometry::recalculate(si_rob, si, m_robust_policy);
+ geometry::recalculate(sj_rob, sj, m_robust_policy);
+ }
+
+ inline bool consider_relative_order(Indexed const& left,
+ Indexed const& right) const
+ {
+ robust_point_type pi, pj, ri, rj, si, sj;
+ get_situation_map(left, right, pi, pj, ri, rj, si, sj);
int const order = get_relative_order
<
- point_type
- >::apply(pi, pj,ri, rj, si, sj);
+ robust_point_type
+ >::apply(pi, pj, ri, rj, si, sj);
//debug("r/o", order == -1);
return order == -1;
}
@@ -137,12 +166,13 @@ public :
if (sl == sr)
{
// Both left and right are located on the SAME segment.
- typedef typename geometry::coordinate_type<Geometry1>::type coordinate_type;
- coordinate_type diff = geometry::math::abs(left.subject.enriched.distance - right.subject.enriched.distance);
- if (diff < geometry::math::relaxed_epsilon<coordinate_type>(10))
+ if (left.subject.fraction == right.subject.fraction)
{
// First check "real" intersection (crosses)
// -> distance zero due to precision, solve it by sorting
+ // TODO: reconsider this. Using integer maths, this will
+ // ALWAYS return 0 because either fractions are different, or
+ // the (currently calculated) relative-order is identical
if (m_turn_points[left.index].method == method_crosses
&& m_turn_points[right.index].method == method_crosses)
{
@@ -152,14 +182,11 @@ public :
// If that is not the case, cluster it later on.
// Indicate that this is necessary.
*m_clustered = true;
-
- return left.subject.enriched.distance < right.subject.enriched.distance;
}
}
return sl == sr
- ? left.subject.enriched.distance < right.subject.enriched.distance
+ ? left.subject.fraction < right.subject.fraction
: sl < sr;
-
}
};
@@ -197,12 +224,14 @@ template
typename Container,
typename TurnPoints,
typename Geometry1, typename Geometry2,
+ typename RobustPolicy,
typename Strategy
>
inline void enrich_sort(Container& operations,
TurnPoints& turn_points,
operation_type for_operation,
Geometry1 const& geometry1, Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
Strategy const& strategy)
{
typedef typename IndexType::type operations_type;
@@ -210,14 +239,15 @@ inline void enrich_sort(Container& operations,
bool clustered = false;
std::sort(boost::begin(operations),
boost::end(operations),
- sort_on_segment_and_distance
+ sort_on_segment_and_ratio
<
TurnPoints,
IndexType,
Geometry1, Geometry2,
+ RobustPolicy,
Reverse1, Reverse2,
Strategy
- >(turn_points, geometry1, geometry2, strategy, &clustered));
+ >(turn_points, geometry1, geometry2, robust_policy, strategy, &clustered));
// DONT'T discard xx / (for union) ix / ii / (for intersection) ux / uu here
// It would give way to "lonely" ui turn points, traveling all
@@ -240,8 +270,7 @@ inline void enrich_sort(Container& operations,
if (prev_op.seg_id == op.seg_id
&& (turn_points[prev->index].method != method_crosses
|| turn_points[it->index].method != method_crosses)
- && geometry::math::equals(prev_op.enriched.distance,
- op.enriched.distance))
+ && prev_op.fraction == op.fraction)
{
if (begin_cluster == boost::end(operations))
{
@@ -251,14 +280,14 @@ inline void enrich_sort(Container& operations,
else if (begin_cluster != boost::end(operations))
{
handle_cluster<IndexType, Reverse1, Reverse2>(begin_cluster, it, turn_points,
- for_operation, geometry1, geometry2, strategy);
+ for_operation, geometry1, geometry2, robust_policy, strategy);
begin_cluster = boost::end(operations);
}
}
if (begin_cluster != boost::end(operations))
{
handle_cluster<IndexType, Reverse1, Reverse2>(begin_cluster, it, turn_points,
- for_operation, geometry1, geometry2, strategy);
+ for_operation, geometry1, geometry2, robust_policy, strategy);
}
}
@@ -348,7 +377,7 @@ inline void enrich_assign(Container& operations,
std::cout << it->index
<< " meth: " << method_char(turn_points[it->index].method)
<< " seg: " << op.seg_id
- << " dst: " << boost::numeric_cast<double>(op.enriched.distance)
+ << " dst: " << op.fraction // needs define
<< " op: " << operation_char(turn_points[it->index].operations[0].operation)
<< operation_char(turn_points[it->index].operations[1].operation)
<< " dsc: " << (turn_points[it->index].discarded ? "T" : "F")
@@ -424,6 +453,7 @@ inline void create_map(TurnPoints const& turn_points, MappedVector& mapped_vecto
\param for_operation operation_type (union or intersection)
\param geometry1 \param_geometry
\param geometry2 \param_geometry
+\param robust_policy policy to handle robustness issues
\param strategy strategy
*/
template
@@ -431,11 +461,13 @@ template
bool Reverse1, bool Reverse2,
typename TurnPoints,
typename Geometry1, typename Geometry2,
+ typename RobustPolicy,
typename Strategy
>
inline void enrich_intersection_points(TurnPoints& turn_points,
detail::overlay::operation_type for_operation,
Geometry1 const& geometry1, Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
Strategy const& strategy)
{
typedef typename boost::range_value<TurnPoints>::type turn_point_type;
@@ -464,6 +496,10 @@ inline void enrich_intersection_points(TurnPoints& turn_points,
{
it->discarded = true;
}
+ if (it->both(detail::overlay::operation_none))
+ {
+ it->discarded = true;
+ }
}
@@ -486,7 +522,7 @@ inline void enrich_intersection_points(TurnPoints& turn_points,
<< mit->first << std::endl;
#endif
detail::overlay::enrich_sort<indexed_turn_operation, Reverse1, Reverse2>(mit->second, turn_points, for_operation,
- geometry1, geometry2, strategy);
+ geometry1, geometry2, robust_policy, strategy);
}
for (typename mapped_vector_type::iterator mit
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp
index 8c8ed96189..6668c99249 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp
@@ -10,9 +10,6 @@
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICHMENT_INFO_HPP
-#include <boost/geometry/strategies/distance.hpp>
-
-
namespace boost { namespace geometry
{
@@ -31,23 +28,10 @@ namespace detail { namespace overlay
template<typename P>
struct enrichment_info
{
- typedef typename strategy::distance::services::return_type
- <
- typename strategy::distance::services::comparable_type
- <
- typename strategy::distance::services::default_strategy
- <
- point_tag,
- P
- >::type
- >::type
- >::type distance_type;
-
inline enrichment_info()
: travels_to_vertex_index(-1)
, travels_to_ip_index(-1)
, next_ip_index(-1)
- , distance(distance_type())
{}
// vertex to which is free travel after this IP,
@@ -60,8 +44,6 @@ struct enrichment_info
// index of next IP on this segment, -1 if there is no one
int next_ip_index;
-
- distance_type distance; // distance-measurement from segment.first to IP
};
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/follow.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/follow.hpp
index b110cc9602..632f79f40e 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/follow.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/follow.hpp
@@ -1,6 +1,11 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -20,6 +25,7 @@
#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/clear.hpp>
namespace boost { namespace geometry
@@ -32,7 +38,7 @@ namespace detail { namespace overlay
namespace following
{
-
+
template <typename Turn, typename Operation>
static inline bool is_entering(Turn const& /* TODO remove this parameter */, Operation const& op)
{
@@ -44,43 +50,43 @@ static inline bool is_entering(Turn const& /* TODO remove this parameter */, Ope
;
}
-template
+template
<
- typename Turn,
- typename Operation,
- typename LineString,
+ typename Turn,
+ typename Operation,
+ typename LineString,
typename Polygon
>
-static inline bool last_covered_by(Turn const& turn, Operation const& op,
+static inline bool last_covered_by(Turn const& turn, Operation const& op,
LineString const& linestring, Polygon const& polygon)
{
- // Check any point between the this one and the first IP
+ // Check any point between the this one and the first IP
typedef typename geometry::point_type<LineString>::type point_type;
point_type point_in_between;
detail::point_on_border::midpoint_helper
<
point_type,
0, dimension<point_type>::value
- >::apply(point_in_between, linestring[op.seg_id.segment_index], turn.point);
+ >::apply(point_in_between, *(::boost::begin(linestring) + op.seg_id.segment_index), turn.point);
return geometry::covered_by(point_in_between, polygon);
}
-template
+template
<
- typename Turn,
- typename Operation,
- typename LineString,
+ typename Turn,
+ typename Operation,
+ typename LineString,
typename Polygon
>
-static inline bool is_leaving(Turn const& turn, Operation const& op,
- bool entered, bool first,
+static inline bool is_leaving(Turn const& turn, Operation const& op,
+ bool entered, bool first,
LineString const& linestring, Polygon const& polygon)
{
if (op.operation == operation_union)
{
- return entered
+ return entered
|| turn.method == method_crosses
|| (first && last_covered_by(turn, op, linestring, polygon))
;
@@ -89,20 +95,20 @@ static inline bool is_leaving(Turn const& turn, Operation const& op,
}
-template
+template
<
- typename Turn,
- typename Operation,
- typename LineString,
+ typename Turn,
+ typename Operation,
+ typename LineString,
typename Polygon
>
-static inline bool is_staying_inside(Turn const& turn, Operation const& op,
- bool entered, bool first,
+static inline bool is_staying_inside(Turn const& turn, Operation const& op,
+ bool entered, bool first,
LineString const& linestring, Polygon const& polygon)
{
if (turn.method == method_crosses)
{
- // The normal case, this is completely covered with entering/leaving
+ // The normal case, this is completely covered with entering/leaving
// so stay out of this time consuming "covered_by"
return false;
}
@@ -115,11 +121,11 @@ static inline bool is_staying_inside(Turn const& turn, Operation const& op,
return false;
}
-template
+template
<
- typename Turn,
- typename Operation,
- typename Linestring,
+ typename Turn,
+ typename Operation,
+ typename Linestring,
typename Polygon
>
static inline bool was_entered(Turn const& turn, Operation const& op, bool first,
@@ -134,7 +140,7 @@ static inline bool was_entered(Turn const& turn, Operation const& op, bool first
// Template specialization structure to call the right actions for the right type
-template<overlay_type OverlayType>
+template <overlay_type OverlayType, bool RemoveSpikes = true>
struct action_selector
{
// If you get here the overlay type is not intersection or difference
@@ -142,51 +148,86 @@ struct action_selector
};
// Specialization for intersection, containing the implementation
-template<>
-struct action_selector<overlay_intersection>
+template <bool RemoveSpikes>
+struct action_selector<overlay_intersection, RemoveSpikes>
{
template
<
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation
+ typename OutputIterator,
+ typename LineStringOut,
+ typename LineString,
+ typename Point,
+ typename Operation,
+ typename RobustPolicy
>
static inline void enter(LineStringOut& current_piece,
- LineString const& ,
+ LineString const& ,
segment_identifier& segment_id,
int , Point const& point,
- Operation const& operation, OutputIterator& )
+ Operation const& operation,
+ RobustPolicy const& ,
+ OutputIterator& )
{
// On enter, append the intersection point and remember starting point
+ // TODO: we don't check on spikes for linestrings (?). Consider this.
detail::overlay::append_no_duplicates(current_piece, point);
segment_id = operation.seg_id;
}
template
<
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation
+ typename OutputIterator,
+ typename LineStringOut,
+ typename LineString,
+ typename Point,
+ typename Operation,
+ typename RobustPolicy
>
static inline void leave(LineStringOut& current_piece,
LineString const& linestring,
segment_identifier& segment_id,
int index, Point const& point,
- Operation const& , OutputIterator& out)
+ Operation const& ,
+ RobustPolicy const& robust_policy,
+ OutputIterator& out)
{
// On leave, copy all segments from starting point, append the intersection point
// and add the output piece
- geometry::copy_segments<false>(linestring, segment_id, index, current_piece);
+ detail::copy_segments::copy_segments_linestring
+ <
+ false, RemoveSpikes
+ >::apply(linestring, segment_id, index, robust_policy, current_piece);
detail::overlay::append_no_duplicates(current_piece, point);
- if (current_piece.size() > 1)
+ if (::boost::size(current_piece) > 1)
{
*out++ = current_piece;
}
- current_piece.clear();
+
+ geometry::clear(current_piece);
+ }
+
+ template
+ <
+ typename OutputIterator,
+ typename LineStringOut,
+ typename LineString,
+ typename Point,
+ typename Operation
+ >
+ static inline void isolated_point(LineStringOut&,
+ LineString const&,
+ segment_identifier&,
+ int, Point const& point,
+ Operation const& , OutputIterator& out)
+ {
+ LineStringOut isolated_point_ls;
+ geometry::append(isolated_point_ls, point);
+
+#ifndef BOOST_GEOMETRY_ALLOW_ONE_POINT_LINESTRINGS
+ geometry::append(isolated_point_ls, point);
+#endif // BOOST_GEOMETRY_ALLOW_ONE_POINT_LINESTRINGS
+
+ *out++ = isolated_point_ls;
}
static inline bool is_entered(bool entered)
@@ -194,8 +235,15 @@ struct action_selector<overlay_intersection>
return entered;
}
- template <typename Point, typename Geometry>
- static inline bool included(Point const& point, Geometry const& geometry)
+ template
+ <
+ typename Point,
+ typename Geometry,
+ typename RobustPolicy
+ >
+ static inline bool included(Point const& point,
+ Geometry const& geometry,
+ RobustPolicy const& )
{
return geometry::covered_by(point, geometry);
}
@@ -203,45 +251,67 @@ struct action_selector<overlay_intersection>
};
// Specialization for difference, which reverses these actions
-template<>
-struct action_selector<overlay_difference>
+template <bool RemoveSpikes>
+struct action_selector<overlay_difference, RemoveSpikes>
{
- typedef action_selector<overlay_intersection> normal_action;
+ typedef action_selector<overlay_intersection, RemoveSpikes> normal_action;
template
<
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation
+ typename OutputIterator,
+ typename LineStringOut,
+ typename LineString,
+ typename Point,
+ typename Operation,
+ typename RobustPolicy
>
- static inline void enter(LineStringOut& current_piece,
- LineString const& linestring,
- segment_identifier& segment_id,
- int index, Point const& point,
- Operation const& operation, OutputIterator& out)
+ static inline void enter(LineStringOut& current_piece,
+ LineString const& linestring,
+ segment_identifier& segment_id,
+ int index, Point const& point,
+ Operation const& operation,
+ RobustPolicy const& robust_policy,
+ OutputIterator& out)
{
- normal_action::leave(current_piece, linestring, segment_id, index,
- point, operation, out);
+ normal_action::leave(current_piece, linestring, segment_id, index,
+ point, operation, robust_policy, out);
}
template
<
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation
+ typename OutputIterator,
+ typename LineStringOut,
+ typename LineString,
+ typename Point,
+ typename Operation,
+ typename RobustPolicy
>
static inline void leave(LineStringOut& current_piece,
LineString const& linestring,
segment_identifier& segment_id,
int index, Point const& point,
- Operation const& operation, OutputIterator& out)
+ Operation const& operation,
+ RobustPolicy const& robust_policy,
+ OutputIterator& out)
{
normal_action::enter(current_piece, linestring, segment_id, index,
- point, operation, out);
+ point, operation, robust_policy, out);
+ }
+
+ template
+ <
+ typename OutputIterator,
+ typename LineStringOut,
+ typename LineString,
+ typename Point,
+ typename Operation
+ >
+ static inline void isolated_point(LineStringOut&,
+ LineString const&,
+ segment_identifier&,
+ int, Point const&,
+ Operation const&, OutputIterator&)
+ {
}
static inline bool is_entered(bool entered)
@@ -249,10 +319,17 @@ struct action_selector<overlay_difference>
return ! normal_action::is_entered(entered);
}
- template <typename Point, typename Geometry>
- static inline bool included(Point const& point, Geometry const& geometry)
+ template
+ <
+ typename Point,
+ typename Geometry,
+ typename RobustPolicy
+ >
+ static inline bool included(Point const& point,
+ Geometry const& geometry,
+ RobustPolicy const& robust_policy)
{
- return ! normal_action::included(point, geometry);
+ return ! normal_action::included(point, geometry, robust_policy);
}
};
@@ -269,12 +346,13 @@ template
typename LineStringOut,
typename LineString,
typename Polygon,
- overlay_type OverlayType
+ overlay_type OverlayType,
+ bool RemoveSpikes = true
>
class follow
{
- template<typename Turn>
+ template <typename Turn>
struct sort_on_segment
{
// In case of turn point at the same location, we want to have continue/blocked LAST
@@ -296,15 +374,15 @@ class follow
inline bool use_operation(Turn const& left, Turn const& right) const
{
- // If they are the same, OK.
+ // If they are the same, OK.
return operation_order(left) < operation_order(right);
}
inline bool use_distance(Turn const& left, Turn const& right) const
{
- return geometry::math::equals(left.operations[0].enriched.distance, right.operations[0].enriched.distance)
+ return left.operations[0].fraction == right.operations[0].fraction
? use_operation(left, right)
- : left.operations[0].enriched.distance < right.operations[0].enriched.distance
+ : left.operations[0].fraction < right.operations[0].fraction
;
}
@@ -325,16 +403,33 @@ class follow
public :
- template <typename Point, typename Geometry>
- static inline bool included(Point const& point, Geometry const& geometry)
+ template
+ <
+ typename Point,
+ typename Geometry,
+ typename RobustPolicy
+ >
+ static inline bool included(Point const& point,
+ Geometry const& geometry,
+ RobustPolicy const& robust_policy)
{
- return following::action_selector<OverlayType>::included(point, geometry);
+ return following::action_selector
+ <
+ OverlayType, RemoveSpikes
+ >::included(point, geometry, robust_policy);
}
- template<typename Turns, typename OutputIterator>
+ template
+ <
+ typename Turns,
+ typename OutputIterator,
+ typename RobustPolicy
+ >
static inline OutputIterator apply(LineString const& linestring, Polygon const& polygon,
detail::overlay::operation_type , // TODO: this parameter might be redundant
- Turns& turns, OutputIterator out)
+ Turns& turns,
+ RobustPolicy const& robust_policy,
+ OutputIterator out)
{
typedef typename boost::range_iterator<Turns>::type turn_iterator;
typedef typename boost::range_value<Turns>::type turn_type;
@@ -343,7 +438,7 @@ public :
typename turn_type::container_type
>::type turn_operation_iterator_type;
- typedef following::action_selector<OverlayType> action;
+ typedef following::action_selector<OverlayType, RemoveSpikes> action;
// Sort intersection points on segments-along-linestring, and distance
// (like in enrich is done for poly/poly)
@@ -376,27 +471,36 @@ public :
debug_traverse(*it, *iit, "-> Entering");
entered = true;
- action::enter(current_piece, linestring, current_segment_id, iit->seg_id.segment_index, it->point, *iit, out);
+ action::enter(current_piece, linestring, current_segment_id,
+ iit->seg_id.segment_index, it->point, *iit,
+ robust_policy,
+ out);
}
else if (following::is_leaving(*it, *iit, entered, first, linestring, polygon))
{
debug_traverse(*it, *iit, "-> Leaving");
entered = false;
- action::leave(current_piece, linestring, current_segment_id, iit->seg_id.segment_index, it->point, *iit, out);
+ action::leave(current_piece, linestring, current_segment_id,
+ iit->seg_id.segment_index, it->point, *iit,
+ robust_policy,
+ out);
}
first = false;
}
if (action::is_entered(entered))
{
- geometry::copy_segments<false>(linestring, current_segment_id,
- boost::size(linestring) - 1,
- current_piece);
+ detail::copy_segments::copy_segments_linestring
+ <
+ false, RemoveSpikes
+ >::apply(linestring, current_segment_id,
+ boost::size(linestring) - 1, robust_policy,
+ current_piece);
}
// Output the last one, if applicable
- if (current_piece.size() > 1)
+ if (::boost::size(current_piece) > 1)
{
*out++ = current_piece;
}
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp
new file mode 100644
index 0000000000..851162bda8
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp
@@ -0,0 +1,534 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_LINEAR_LINEAR_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_LINEAR_LINEAR_HPP
+
+#include <cstddef>
+#include <algorithm>
+#include <iterator>
+
+#include <boost/assert.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
+#include <boost/geometry/algorithms/detail/overlay/follow.hpp>
+#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
+#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+
+#include <boost/geometry/algorithms/detail/turns/debug_turn.hpp>
+
+#include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay
+{
+
+namespace following { namespace linear
+{
+
+
+
+
+// follower for linear/linear geometries set operations
+
+template <typename Turn, typename Operation>
+static inline bool is_entering(Turn const& turn,
+ Operation const& operation)
+{
+ if ( turn.method != method_touch && turn.method != method_touch_interior )
+ {
+ return false;
+ }
+ return operation.operation == operation_intersection;
+}
+
+
+
+template <typename Turn, typename Operation>
+static inline bool is_staying_inside(Turn const& turn,
+ Operation const& operation,
+ bool entered)
+{
+ if ( !entered )
+ {
+ return false;
+ }
+
+ if ( turn.method != method_equal && turn.method != method_collinear )
+ {
+ return false;
+ }
+ return operation.operation == operation_continue;
+}
+
+
+
+template <typename Turn, typename Operation>
+static inline bool is_leaving(Turn const& turn,
+ Operation const& operation,
+ bool entered)
+{
+ if ( !entered )
+ {
+ return false;
+ }
+
+ if ( turn.method != method_touch
+ && turn.method != method_touch_interior
+ && turn.method != method_equal
+ && turn.method != method_collinear )
+ {
+ return false;
+ }
+
+ if ( operation.operation == operation_blocked )
+ {
+ return true;
+ }
+
+ if ( operation.operation != operation_union )
+ {
+ return false;
+ }
+
+ return operation.is_collinear;
+}
+
+
+
+template <typename Turn, typename Operation>
+static inline bool is_isolated_point(Turn const& turn,
+ Operation const& operation,
+ bool entered)
+{
+ if ( entered )
+ {
+ return false;
+ }
+
+ if ( turn.method == method_none )
+ {
+ BOOST_ASSERT( operation.operation == operation_continue );
+ return true;
+ }
+
+ if ( turn.method == method_crosses )
+ {
+ return true;
+ }
+
+ if ( turn.method != method_touch && turn.method != method_touch_interior )
+ {
+ return false;
+ }
+
+ if ( operation.operation == operation_blocked )
+ {
+ return true;
+ }
+
+ if ( operation.operation != operation_union )
+ {
+ return false;
+ }
+
+ return !operation.is_collinear;
+}
+
+
+
+
+
+
+
+
+
+template
+<
+ typename LinestringOut,
+ typename Linestring,
+ typename Linear,
+ overlay_type OverlayType,
+ bool FollowIsolatedPoints,
+ bool FollowContinueTurns
+>
+class follow_linestring_linear_linestring
+{
+protected:
+ // allow spikes (false indicates: do not remove spikes)
+ typedef following::action_selector<OverlayType, false> action;
+
+ template
+ <
+ typename TurnIterator,
+ typename TurnOperationIterator,
+ typename SegmentIdentifier,
+ typename OutputIterator
+ >
+ static inline OutputIterator
+ process_turn(TurnIterator it,
+ TurnOperationIterator op_it,
+ bool& entered,
+ std::size_t& enter_count,
+ Linestring const& linestring,
+ LinestringOut& current_piece,
+ SegmentIdentifier& current_segment_id,
+ OutputIterator oit)
+ {
+ // We don't rescale linear/linear
+ detail::no_rescale_policy robust_policy;
+
+ if ( is_entering(*it, *op_it) )
+ {
+ detail::turns::debug_turn(*it, *op_it, "-> Entering");
+
+ entered = true;
+ if ( enter_count == 0 )
+ {
+ action::enter(current_piece, linestring,
+ current_segment_id,
+ op_it->seg_id.segment_index,
+ it->point, *op_it, robust_policy, oit);
+ }
+ ++enter_count;
+ }
+ else if ( is_leaving(*it, *op_it, entered) )
+ {
+ detail::turns::debug_turn(*it, *op_it, "-> Leaving");
+
+ --enter_count;
+ if ( enter_count == 0 )
+ {
+ entered = false;
+ action::leave(current_piece, linestring,
+ current_segment_id,
+ op_it->seg_id.segment_index,
+ it->point, *op_it, robust_policy, oit);
+ }
+ }
+ else if ( FollowIsolatedPoints
+ && is_isolated_point(*it, *op_it, entered) )
+ {
+ detail::turns::debug_turn(*it, *op_it, "-> Isolated point");
+
+ action::isolated_point(current_piece, linestring,
+ current_segment_id,
+ op_it->seg_id.segment_index,
+ it->point, *op_it, oit);
+ }
+ else if ( FollowContinueTurns
+ && is_staying_inside(*it, *op_it, entered) )
+ {
+ detail::turns::debug_turn(*it, *op_it, "-> Staying inside");
+
+ entered = true;
+ }
+ return oit;
+ }
+
+ template
+ <
+ typename SegmentIdentifier,
+ typename OutputIterator
+ >
+ static inline OutputIterator
+ process_end(bool entered,
+ Linestring const& linestring,
+ SegmentIdentifier const& current_segment_id,
+ LinestringOut& current_piece,
+ OutputIterator oit)
+ {
+ if ( action::is_entered(entered) )
+ {
+ // We don't rescale linear/linear
+ detail::no_rescale_policy robust_policy;
+
+ detail::copy_segments::copy_segments_linestring
+ <
+ false, false // do not reverse; do not remove spikes
+ >::apply(linestring, current_segment_id,
+ boost::size(linestring) - 1, robust_policy,
+ current_piece);
+ }
+
+ // Output the last one, if applicable
+ if (::boost::size(current_piece) > 1)
+ {
+ *oit++ = current_piece;
+ }
+
+ return oit;
+ }
+
+public:
+ template <typename TurnIterator, typename OutputIterator>
+ static inline OutputIterator
+ apply(Linestring const& linestring, Linear const&,
+ TurnIterator first, TurnIterator beyond,
+ OutputIterator oit)
+ {
+ // Iterate through all intersection points (they are
+ // ordered along the each line)
+
+ LinestringOut current_piece;
+ geometry::segment_identifier current_segment_id(0, -1, -1, -1);
+
+ bool entered = false;
+ std::size_t enter_count = 0;
+
+ for (TurnIterator it = first; it != beyond; ++it)
+ {
+ oit = process_turn(it, boost::begin(it->operations),
+ entered, enter_count,
+ linestring,
+ current_piece, current_segment_id,
+ oit);
+ }
+
+ BOOST_ASSERT( enter_count == 0 );
+
+ return process_end(entered, linestring,
+ current_segment_id, current_piece,
+ oit);
+ }
+};
+
+
+
+
+template
+<
+ typename LinestringOut,
+ typename MultiLinestring,
+ typename Linear,
+ overlay_type OverlayType,
+ bool FollowIsolatedPoints,
+ bool FollowContinueTurns
+>
+class follow_multilinestring_linear_linestring
+ : follow_linestring_linear_linestring
+ <
+ LinestringOut,
+ typename boost::range_value<MultiLinestring>::type,
+ Linear,
+ OverlayType,
+ FollowIsolatedPoints,
+ FollowContinueTurns
+ >
+{
+protected:
+ typedef typename boost::range_value<MultiLinestring>::type Linestring;
+
+ typedef follow_linestring_linear_linestring
+ <
+ LinestringOut, Linestring, Linear,
+ OverlayType, FollowIsolatedPoints, FollowContinueTurns
+ > Base;
+
+ typedef following::action_selector<OverlayType> action;
+
+ typedef typename boost::range_iterator
+ <
+ MultiLinestring const
+ >::type linestring_iterator;
+
+
+ template <typename OutputIt, overlay_type OT>
+ struct copy_linestrings_in_range
+ {
+ static inline OutputIt
+ apply(linestring_iterator, linestring_iterator, OutputIt oit)
+ {
+ return oit;
+ }
+ };
+
+ template <typename OutputIt>
+ struct copy_linestrings_in_range<OutputIt, overlay_difference>
+ {
+ static inline OutputIt
+ apply(linestring_iterator first, linestring_iterator beyond,
+ OutputIt oit)
+ {
+ for (linestring_iterator ls_it = first; ls_it != beyond; ++ls_it)
+ {
+ LinestringOut line_out;
+ geometry::convert(*ls_it, line_out);
+ *oit++ = line_out;
+ }
+ return oit;
+ }
+ };
+
+ template <typename TurnIterator>
+ static inline int get_multi_index(TurnIterator it)
+ {
+ return boost::begin(it->operations)->seg_id.multi_index;
+ }
+
+ class has_other_multi_id
+ {
+ private:
+ int m_multi_id;
+
+ public:
+ has_other_multi_id(int multi_id)
+ : m_multi_id(multi_id) {}
+
+ template <typename Turn>
+ bool operator()(Turn const& turn) const
+ {
+ return boost::begin(turn.operations)->seg_id.multi_index
+ != m_multi_id;
+ }
+ };
+
+public:
+ template <typename TurnIterator, typename OutputIterator>
+ static inline OutputIterator
+ apply(MultiLinestring const& multilinestring, Linear const& linear,
+ TurnIterator first, TurnIterator beyond,
+ OutputIterator oit)
+ {
+ BOOST_ASSERT( first != beyond );
+
+ typedef copy_linestrings_in_range
+ <
+ OutputIterator, OverlayType
+ > copy_linestrings;
+
+ linestring_iterator ls_first = boost::begin(multilinestring);
+ linestring_iterator ls_beyond = boost::end(multilinestring);
+
+ // Iterate through all intersection points (they are
+ // ordered along the each linestring)
+
+ int current_multi_id = get_multi_index(first);
+
+ oit = copy_linestrings::apply(ls_first,
+ ls_first + current_multi_id,
+ oit);
+
+ TurnIterator per_ls_next = first;
+ do {
+ TurnIterator per_ls_current = per_ls_next;
+
+ // find turn with different multi-index
+ per_ls_next = std::find_if(per_ls_current, beyond,
+ has_other_multi_id(current_multi_id));
+
+ oit = Base::apply(*(ls_first + current_multi_id),
+ linear, per_ls_current, per_ls_next, oit);
+
+ int next_multi_id(-1);
+ linestring_iterator ls_next = ls_beyond;
+ if ( per_ls_next != beyond )
+ {
+ next_multi_id = get_multi_index(per_ls_next);
+ ls_next = ls_first + next_multi_id;
+ }
+ oit = copy_linestrings::apply(ls_first + current_multi_id + 1,
+ ls_next,
+ oit);
+
+ current_multi_id = next_multi_id;
+ }
+ while ( per_ls_next != beyond );
+
+ return oit;
+ }
+};
+
+
+
+
+
+
+template
+<
+ typename LinestringOut,
+ typename Geometry1,
+ typename Geometry2,
+ overlay_type OverlayType,
+ bool FollowIsolatedPoints,
+ bool FollowContinueTurns,
+ typename TagOut = typename tag<LinestringOut>::type,
+ typename TagIn1 = typename tag<Geometry1>::type
+>
+struct follow
+ : not_implemented<LinestringOut, Geometry1>
+{};
+
+
+
+template
+<
+ typename LinestringOut,
+ typename Linestring,
+ typename Linear,
+ overlay_type OverlayType,
+ bool FollowIsolatedPoints,
+ bool FollowContinueTurns
+>
+struct follow
+ <
+ LinestringOut, Linestring, Linear,
+ OverlayType, FollowIsolatedPoints, FollowContinueTurns,
+ linestring_tag, linestring_tag
+ > : follow_linestring_linear_linestring
+ <
+ LinestringOut, Linestring, Linear,
+ OverlayType, FollowIsolatedPoints, FollowContinueTurns
+ >
+{};
+
+
+template
+<
+ typename LinestringOut,
+ typename MultiLinestring,
+ typename Linear,
+ overlay_type OverlayType,
+ bool FollowIsolatedPoints,
+ bool FollowContinueTurns
+>
+struct follow
+ <
+ LinestringOut, MultiLinestring, Linear,
+ OverlayType, FollowIsolatedPoints, FollowContinueTurns,
+ linestring_tag, multi_linestring_tag
+ > : follow_multilinestring_linear_linestring
+ <
+ LinestringOut, MultiLinestring, Linear,
+ OverlayType, FollowIsolatedPoints, FollowContinueTurns
+ >
+{};
+
+
+
+}} // namespace following::linear
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_LINEAR_LINEAR_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp
index 019c3ba3f9..63011c7d48 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp
@@ -17,6 +17,7 @@
#include <boost/geometry/geometries/segment.hpp>
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
namespace boost { namespace geometry
{
@@ -35,32 +36,45 @@ template
>
struct get_turn_without_info
{
- typedef strategy_intersection
- <
- typename cs_tag<typename TurnInfo::point_type>::type,
- Point1,
- Point2,
- typename TurnInfo::point_type
- > si;
-
- typedef typename si::segment_intersection_strategy_type strategy;
-
-
-
- template <typename OutputIterator>
+ template <typename RobustPolicy, typename OutputIterator>
static inline OutputIterator apply(
- Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ Point1 const& pi, Point1 const& pj, Point1 const& /*pk*/,
+ Point2 const& qi, Point2 const& qj, Point2 const& /*qk*/,
+ bool /*is_p_first*/, bool /*is_p_last*/,
+ bool /*is_q_first*/, bool /*is_q_last*/,
TurnInfo const& ,
+ RobustPolicy const& robust_policy,
OutputIterator out)
{
+ typedef strategy_intersection
+ <
+ typename cs_tag<typename TurnInfo::point_type>::type,
+ Point1,
+ Point2,
+ typename TurnInfo::point_type,
+ RobustPolicy
+ > si;
+
+ typedef typename si::segment_intersection_strategy_type strategy;
+
typedef model::referring_segment<Point1 const> segment_type1;
typedef model::referring_segment<Point1 const> segment_type2;
- segment_type1 p1(pi, pj), p2(pj, pk);
- segment_type2 q1(qi, qj), q2(qj, qk);
+ segment_type1 p1(pi, pj);
+ segment_type2 q1(qi, qj);
- //
- typename strategy::return_type result = strategy::apply(p1, q1);
+ typedef typename geometry::robust_point_type
+ <
+ Point1, RobustPolicy
+ >::type robust_point_type;
+
+ robust_point_type pi_rob, pj_rob, qi_rob, qj_rob;
+ geometry::recalculate(pi_rob, pi, robust_policy);
+ geometry::recalculate(pj_rob, pj, robust_policy);
+ geometry::recalculate(qi_rob, qi, robust_policy);
+ geometry::recalculate(qj_rob, qj, robust_policy);
+ typename strategy::return_type result
+ = strategy::apply(p1, q1, robust_policy,
+ pi_rob, pj_rob, qi_rob, qj_rob);
for (std::size_t i = 0; i < result.template get<0>().count; i++)
{
@@ -84,10 +98,12 @@ template
<
typename Geometry1,
typename Geometry2,
+ typename RobustPolicy,
typename Turns
>
inline void get_intersection_points(Geometry1 const& geometry1,
Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
Turns& turns)
{
concept::check_concepts_and_equal_dimensions<Geometry1 const, Geometry2 const>();
@@ -99,14 +115,6 @@ inline void get_intersection_points(Geometry1 const& geometry1,
typename boost::range_value<Turns>::type
> TurnPolicy;
- typedef typename strategy_intersection
- <
- typename cs_tag<Geometry1>::type,
- Geometry1,
- Geometry2,
- typename boost::range_value<Turns>::type
- >::segment_intersection_strategy_type segment_intersection_strategy_type;
-
detail::get_turns::no_interrupt_policy interrupt_policy;
boost::mpl::if_c
@@ -118,9 +126,7 @@ inline void get_intersection_points(Geometry1 const& geometry1,
typename tag<Geometry2>::type,
Geometry1, Geometry2,
false, false,
- Turns, TurnPolicy,
- //segment_intersection_strategy_type,
- detail::get_turns::no_interrupt_policy
+ TurnPolicy
>,
dispatch::get_turns
<
@@ -128,13 +134,12 @@ inline void get_intersection_points(Geometry1 const& geometry1,
typename tag<Geometry2>::type,
Geometry1, Geometry2,
false, false,
- Turns, TurnPolicy,
- //segment_intersection_strategy_type,
- detail::get_turns::no_interrupt_policy
+ TurnPolicy
>
>::type::apply(
0, geometry1,
1, geometry2,
+ robust_policy,
turns, interrupt_policy);
}
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp
index 522ef68382..d71f4ad51f 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp
@@ -10,8 +10,6 @@
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RELATIVE_ORDER_HPP
-#include <boost/geometry/algorithms/distance.hpp>
-
#include <boost/geometry/strategies/intersection.hpp>
@@ -36,15 +34,10 @@ namespace detail { namespace overlay
template <typename Point1>
struct get_relative_order
{
- typedef strategy_intersection
+ typedef typename strategy::side::services::default_strategy
<
- typename cs_tag<Point1>::type,
- Point1,
- Point1,
- Point1
- > si;
-
- typedef typename si::side_strategy_type strategy;
+ typename cs_tag<Point1>::type
+ >::type strategy;
template <typename Point>
static inline int value_via_product(Point const& ti, Point const& tj,
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp
index c2c6980577..ab9219a3d5 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp
@@ -13,11 +13,12 @@
#include <boost/assert.hpp>
#include <boost/range.hpp>
-
-#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
namespace boost { namespace geometry
@@ -92,6 +93,25 @@ struct get_ring<polygon_tag>
};
+template<>
+struct get_ring<multi_polygon_tag>
+{
+ template<typename MultiPolygon>
+ static inline typename ring_type<MultiPolygon>::type const& apply(
+ ring_identifier const& id,
+ MultiPolygon const& multi_polygon)
+ {
+ BOOST_ASSERT
+ (
+ id.multi_index >= 0
+ && id.multi_index < int(boost::size(multi_polygon))
+ );
+ return get_ring<polygon_tag>::apply(id,
+ multi_polygon[id.multi_index]);
+ }
+};
+
+
}} // namespace detail::overlay
#endif // DOXYGEN_NO_DETAIL
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp
index 68aa62bb41..5b3a74de5a 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp
@@ -16,14 +16,17 @@
#include <boost/geometry/algorithms/convert.hpp>
#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/recalculate.hpp>
#include <boost/geometry/geometries/segment.hpp>
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp>
// Silence warning C4127: conditional expression is constant
#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
+#pragma warning(push)
+#pragma warning(disable : 4127)
#endif
@@ -37,7 +40,7 @@ class turn_info_exception : public geometry::exception
public:
// NOTE: "char" will be replaced by enum in future version
- inline turn_info_exception(char const method)
+ inline turn_info_exception(char const method)
{
message = "Boost.Geometry Turn exception: ";
message += method;
@@ -57,7 +60,6 @@ public:
namespace detail { namespace overlay
{
-
struct base_turn_handler
{
// Returns true if both sides are opposite
@@ -98,13 +100,32 @@ struct base_turn_handler
{
both(ti, condition ? operation_union : operation_intersection);
}
+
+ template <typename TurnInfo, typename IntersectionInfo>
+ static inline void assign_point(TurnInfo& ti,
+ method_type method,
+ IntersectionInfo const& info, int index)
+ {
+ ti.method = method;
+ BOOST_ASSERT(index >= 0 && unsigned(index) < info.count); // TODO remove this
+ geometry::convert(info.intersections[index], ti.point);
+ ti.operations[0].fraction = info.fractions[index].robust_ra;
+ ti.operations[1].fraction = info.fractions[index].robust_rb;
+ }
+
+ template <typename IntersectionInfo>
+ static inline int non_opposite_to_index(IntersectionInfo const& info)
+ {
+ return info.fractions[0].robust_rb < info.fractions[1].robust_rb
+ ? 1 : 0;
+ }
+
};
template
<
- typename TurnInfo,
- typename SideStrategy
+ typename TurnInfo
>
struct touch_interior : public base_turn_handler
{
@@ -115,17 +136,18 @@ struct touch_interior : public base_turn_handler
typename Point1,
typename Point2,
typename IntersectionInfo,
- typename DirInfo
+ typename DirInfo,
+ typename SidePolicy
>
static inline void apply(
- Point1 const& pi, Point1 const& pj, Point1 const& ,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ Point1 const& , Point1 const& , Point1 const& ,
+ Point2 const& , Point2 const& , Point2 const& ,
TurnInfo& ti,
IntersectionInfo const& intersection_info,
- DirInfo const& dir_info)
+ DirInfo const& dir_info,
+ SidePolicy const& side)
{
- ti.method = method_touch_interior;
- geometry::convert(intersection_info.intersections[0], ti.point);
+ assign_point(ti, method_touch_interior, intersection_info, 0);
// Both segments of q touch segment p somewhere in its interior
// 1) We know: if q comes from LEFT or RIGHT
@@ -137,7 +159,7 @@ struct touch_interior : public base_turn_handler
static int const index_q = 1 - Index;
int const side_qi_p = dir_info.sides.template get<index_q, 0>();
- int const side_qk_p = SideStrategy::apply(pi, pj, qk);
+ int const side_qk_p = side.qk_wrt_p1();
if (side_qi_p == -side_qk_p)
{
@@ -150,7 +172,7 @@ struct touch_interior : public base_turn_handler
return;
}
- int const side_qk_q = SideStrategy::apply(qi, qj, qk);
+ int const side_qk_q = side.qk_wrt_q1();
if (side_qi_p == -1 && side_qk_p == -1 && side_qk_q == 1)
{
@@ -210,8 +232,7 @@ struct touch_interior : public base_turn_handler
template
<
- typename TurnInfo,
- typename SideStrategy
+ typename TurnInfo
>
struct touch : public base_turn_handler
{
@@ -234,37 +255,34 @@ struct touch : public base_turn_handler
typename Point1,
typename Point2,
typename IntersectionInfo,
- typename DirInfo
+ typename DirInfo,
+ typename SidePolicy
>
static inline void apply(
- Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ Point1 const& , Point1 const& , Point1 const& ,
+ Point2 const& , Point2 const& , Point2 const& ,
TurnInfo& ti,
IntersectionInfo const& intersection_info,
- DirInfo const& dir_info)
+ DirInfo const& dir_info,
+ SidePolicy const& side)
{
- ti.method = method_touch;
- geometry::convert(intersection_info.intersections[0], ti.point);
+ assign_point(ti, method_touch, intersection_info, 0);
int const side_qi_p1 = dir_info.sides.template get<1, 0>();
- int const side_qk_p1 = SideStrategy::apply(pi, pj, qk);
+ int const side_qk_p1 = side.qk_wrt_p1();
// If Qi and Qk are both at same side of Pi-Pj,
// or collinear (so: not opposite sides)
if (! opposite(side_qi_p1, side_qk_p1))
{
- int const side_pk_q2 = SideStrategy::apply(qj, qk, pk);
- int const side_pk_p = SideStrategy::apply(pi, pj, pk);
- int const side_qk_q = SideStrategy::apply(qi, qj, qk);
-
- bool const both_continue = side_pk_p == 0 && side_qk_q == 0;
- bool const robustness_issue_in_continue = both_continue && side_pk_q2 != 0;
+ int const side_pk_q2 = side.pk_wrt_q2();
+ int const side_pk_p = side.pk_wrt_p1();
+ int const side_qk_q = side.qk_wrt_q1();
bool const q_turns_left = side_qk_q == 1;
bool const block_q = side_qk_p1 == 0
&& ! same(side_qi_p1, side_qk_q)
- && ! robustness_issue_in_continue
;
// If Pk at same side as Qi/Qk
@@ -283,7 +301,7 @@ struct touch : public base_turn_handler
return;
}
- int const side_pk_q1 = SideStrategy::apply(qi, qj, pk);
+ int const side_pk_q1 = side.pk_wrt_q1();
// Collinear opposite case -> block P
@@ -336,9 +354,6 @@ struct touch : public base_turn_handler
else
{
// Pk at other side than Qi/Pk
- int const side_qk_q = SideStrategy::apply(qi, qj, qk);
- bool const q_turns_left = side_qk_q == 1;
-
ti.operations[0].operation = q_turns_left
? operation_intersection
: operation_union;
@@ -354,13 +369,13 @@ struct touch : public base_turn_handler
else
{
// From left to right or from right to left
- int const side_pk_p = SideStrategy::apply(pi, pj, pk);
+ int const side_pk_p = side.pk_wrt_p1();
bool const right_to_left = side_qk_p1 == 1;
// If p turns into direction of qi (1,2)
if (side_pk_p == side_qi_p1)
{
- int const side_pk_q1 = SideStrategy::apply(qi, qj, pk);
+ int const side_pk_q1 = side.pk_wrt_q1();
// Collinear opposite case -> block P
if (side_pk_q1 == 0)
@@ -381,7 +396,7 @@ struct touch : public base_turn_handler
// If p turns into direction of qk (4,5)
if (side_pk_p == side_qk_p1)
{
- int const side_pk_q2 = SideStrategy::apply(qj, qk, pk);
+ int const side_pk_q2 = side.pk_wrt_q2();
// Collinear case -> lines join, continue
if (side_pk_q2 == 0)
@@ -420,8 +435,7 @@ struct touch : public base_turn_handler
template
<
- typename TurnInfo,
- typename SideStrategy
+ typename TurnInfo
>
struct equal : public base_turn_handler
{
@@ -430,22 +444,24 @@ struct equal : public base_turn_handler
typename Point1,
typename Point2,
typename IntersectionInfo,
- typename DirInfo
+ typename DirInfo,
+ typename SidePolicy
>
static inline void apply(
- Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& , Point2 const& qj, Point2 const& qk,
+ Point1 const& , Point1 const& , Point1 const& ,
+ Point2 const& , Point2 const& , Point2 const& ,
TurnInfo& ti,
- IntersectionInfo const& intersection_info,
- DirInfo const& )
+ IntersectionInfo const& info,
+ DirInfo const& ,
+ SidePolicy const& side)
{
- ti.method = method_equal;
- // Copy the SECOND intersection point
- geometry::convert(intersection_info.intersections[1], ti.point);
+ // Copy the intersection point in TO direction
+ assign_point(ti, method_equal, info, non_opposite_to_index(info));
+
+ int const side_pk_q2 = side.pk_wrt_q2();
+ int const side_pk_p = side.pk_wrt_p1();
+ int const side_qk_p = side.qk_wrt_p1();
- int const side_pk_q2 = SideStrategy::apply(qj, qk, pk);
- int const side_pk_p = SideStrategy::apply(pi, pj, pk);
- int const side_qk_p = SideStrategy::apply(pi, pj, qk);
// If pk is collinear with qj-qk, they continue collinearly.
// This can be on either side of p1 (== q1), or collinear
@@ -454,6 +470,7 @@ struct equal : public base_turn_handler
if (side_pk_q2 == 0 && side_pk_p == side_qk_p)
{
both(ti, operation_continue);
+
return;
}
@@ -461,8 +478,6 @@ struct equal : public base_turn_handler
// If they turn to same side (not opposite sides)
if (! opposite(side_pk_p, side_qk_p))
{
- int const side_pk_q2 = SideStrategy::apply(qj, qk, pk);
-
// If pk is left of q2 or collinear: p: union, q: intersection
ui_else_iu(side_pk_q2 != -1, ti);
}
@@ -507,7 +522,7 @@ struct equal_opposite : public base_turn_handler
}
for (unsigned int i = 0; i < intersection_info.count; i++)
{
- geometry::convert(intersection_info.intersections[i], tp.point);
+ assign_point(tp, method_none, intersection_info, i);
AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
*out++ = tp;
}
@@ -517,8 +532,7 @@ struct equal_opposite : public base_turn_handler
template
<
- typename TurnInfo,
- typename SideStrategy
+ typename TurnInfo
>
struct collinear : public base_turn_handler
{
@@ -550,7 +564,7 @@ struct collinear : public base_turn_handler
ROBUSTNESS: p and q are collinear, so you would expect
that side qk//p1 == pk//q1. But that is not always the case
in near-epsilon ranges. Then decision logic is different.
- If p arrives, q is further, so the angle qk//p1 is (normally)
+ If p arrives, q is further, so the angle qk//p1 is (normally)
more precise than pk//p1
*/
@@ -559,24 +573,26 @@ struct collinear : public base_turn_handler
typename Point1,
typename Point2,
typename IntersectionInfo,
- typename DirInfo
+ typename DirInfo,
+ typename SidePolicy
>
static inline void apply(
- Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ Point1 const& , Point1 const& , Point1 const& ,
+ Point2 const& , Point2 const& , Point2 const& ,
TurnInfo& ti,
- IntersectionInfo const& intersection_info,
- DirInfo const& dir_info)
+ IntersectionInfo const& info,
+ DirInfo const& dir_info,
+ SidePolicy const& side)
{
- ti.method = method_collinear;
- geometry::convert(intersection_info.intersections[1], ti.point);
+ // Copy the intersection point in TO direction
+ assign_point(ti, method_collinear, info, non_opposite_to_index(info));
int const arrival = dir_info.arrival[0];
// Should not be 0, this is checked before
BOOST_ASSERT(arrival != 0);
- int const side_p = SideStrategy::apply(pi, pj, pk);
- int const side_q = SideStrategy::apply(qi, qj, qk);
+ int const side_p = side.pk_wrt_p1();
+ int const side_q = side.qk_wrt_q1();
// If p arrives, use p, else use q
int const side_p_or_q = arrival == 1
@@ -584,9 +600,6 @@ struct collinear : public base_turn_handler
: side_q
;
- int const side_pk = SideStrategy::apply(qi, qj, pk);
- int const side_qk = SideStrategy::apply(pi, pj, qk);
-
// See comments above,
// resulting in a strange sort of mathematic rule here:
// The arrival-info multiplied by the relevant side
@@ -594,15 +607,7 @@ struct collinear : public base_turn_handler
int const product = arrival * side_p_or_q;
- // Robustness: side_p is supposed to be equal to side_pk (because p/q are collinear)
- // and side_q to side_qk
- bool const robustness_issue = side_pk != side_p || side_qk != side_q;
-
- if (robustness_issue)
- {
- handle_robustness(ti, arrival, side_p, side_q, side_pk, side_qk);
- }
- else if(product == 0)
+ if(product == 0)
{
both(ti, operation_continue);
}
@@ -612,43 +617,11 @@ struct collinear : public base_turn_handler
}
}
- static inline void handle_robustness(TurnInfo& ti, int arrival,
- int side_p, int side_q, int side_pk, int side_qk)
- {
- // We take the longer one, i.e. if q arrives in p (arrival == -1),
- // then p exceeds q and we should take p for a union...
-
- bool use_p_for_union = arrival == -1;
-
- // ... unless one of the sides consistently directs to the other side
- int const consistent_side_p = side_p == side_pk ? side_p : 0;
- int const consistent_side_q = side_q == side_qk ? side_q : 0;
- if (arrival == -1 && (consistent_side_p == -1 || consistent_side_q == 1))
- {
- use_p_for_union = false;
- }
- if (arrival == 1 && (consistent_side_p == 1 || consistent_side_q == -1))
- {
- use_p_for_union = true;
- }
-
- //std::cout << "ROBUSTNESS -> Collinear "
- // << " arr: " << arrival
- // << " dir: " << side_p << " " << side_q
- // << " rev: " << side_pk << " " << side_qk
- // << " cst: " << cside_p << " " << cside_q
- // << std::boolalpha << " " << use_p_for_union
- // << std::endl;
-
- ui_else_iu(use_p_for_union, ti);
- }
-
};
template
<
typename TurnInfo,
- typename SideStrategy,
typename AssignPolicy
>
struct collinear_opposite : public base_turn_handler
@@ -684,26 +657,13 @@ private :
typename Point,
typename IntersectionInfo
>
- static inline bool set_tp(Point const& ri, Point const& rj, Point const& rk,
- bool const handle_robustness, Point const& si, Point const& sj,
+ static inline bool set_tp(Point const& , Point const& , Point const& , int side_rk_r,
+ bool const handle_robustness,
+ Point const& , Point const& , int side_rk_s,
TurnInfo& tp, IntersectionInfo const& intersection_info)
{
- int side_rk_r = SideStrategy::apply(ri, rj, rk);
-
- if (handle_robustness)
- {
- int const side_rk_s = SideStrategy::apply(si, sj, rk);
-
- // For Robustness: also calculate rk w.r.t. the other line. Because they are collinear opposite, that direction should be the reverse of the first direction.
- // If this is not the case, we make it all-collinear, so zero
- if (side_rk_r != 0 && side_rk_r != -side_rk_s)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_ROBUSTNESS
- std::cout << "Robustness correction: " << side_rk_r << " / " << side_rk_s << std::endl;
-#endif
- side_rk_r = 0;
- }
- }
+ boost::ignore_unused_variable_warning(handle_robustness);
+ boost::ignore_unused_variable_warning(side_rk_s);
operation_type blocked = operation_blocked;
switch(side_rk_r)
@@ -741,18 +701,21 @@ private :
// If P arrives within Q, set info on P (which is done above, index=0),
// this turn-info belongs to the second intersection point, index=1
// (see e.g. figure CLO1)
- geometry::convert(intersection_info.intersections[1 - Index], tp.point);
+ assign_point(tp, method_collinear, intersection_info, 1 - Index);
return true;
}
public:
+ static inline void empty_transformer(TurnInfo &) {}
+
template
<
typename Point1,
typename Point2,
typename OutputIterator,
typename IntersectionInfo,
- typename DirInfo
+ typename DirInfo,
+ typename SidePolicy
>
static inline void apply(
Point1 const& pi, Point1 const& pj, Point1 const& pk,
@@ -763,24 +726,57 @@ public:
OutputIterator& out,
IntersectionInfo const& intersection_info,
- DirInfo const& dir_info)
+ DirInfo const& dir_info,
+ SidePolicy const& side)
{
- TurnInfo tp = tp_model;
+ apply(pi, pj, pk, qi, qj, qk, tp_model, out, intersection_info, dir_info, side, empty_transformer);
+ }
- tp.method = method_collinear;
+public:
+ template
+ <
+ typename Point1,
+ typename Point2,
+ typename OutputIterator,
+ typename IntersectionInfo,
+ typename DirInfo,
+ typename SidePolicy,
+ typename TurnTransformer
+ >
+ static inline void apply(
+ Point1 const& pi, Point1 const& pj, Point1 const& pk,
+ Point2 const& qi, Point2 const& qj, Point2 const& qk,
+
+ // Opposite collinear can deliver 2 intersection points,
+ TurnInfo const& tp_model,
+ OutputIterator& out,
+
+ IntersectionInfo const& intersection_info,
+ DirInfo const& dir_info,
+ SidePolicy const& side,
+ TurnTransformer turn_transformer,
+ bool const is_pk_valid = true, bool const is_qk_valid = true)
+ {
+ TurnInfo tp = tp_model;
// If P arrives within Q, there is a turn dependent on P
- if (dir_info.arrival[0] == 1
- && set_tp<0>(pi, pj, pk, true, qi, qj, tp, intersection_info))
+ if ( dir_info.arrival[0] == 1
+ && is_pk_valid
+ && set_tp<0>(pi, pj, pk, side.pk_wrt_p1(), true, qi, qj, side.pk_wrt_q1(), tp, intersection_info) )
{
+ turn_transformer(tp);
+
AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
*out++ = tp;
}
// If Q arrives within P, there is a turn dependent on Q
- if (dir_info.arrival[1] == 1
- && set_tp<1>(qi, qj, qk, false, pi, pj, tp, intersection_info))
+ if ( dir_info.arrival[1] == 1
+ && is_qk_valid
+ && set_tp<1>(qi, qj, qk, side.qk_wrt_q1(), false, pi, pj, side.qk_wrt_p1(), tp, intersection_info) )
{
+ turn_transformer(tp);
+
AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
*out++ = tp;
}
@@ -797,7 +793,7 @@ public:
}
for (unsigned int i = 0; i < intersection_info.count; i++)
{
- geometry::convert(intersection_info.intersections[i], tp.point);
+ assign_point(tp, method_collinear, intersection_info, i);
AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
*out++ = tp;
}
@@ -810,8 +806,7 @@ public:
template
<
- typename TurnInfo,
- typename SideStrategy
+ typename TurnInfo
>
struct crosses : public base_turn_handler
{
@@ -829,8 +824,7 @@ struct crosses : public base_turn_handler
IntersectionInfo const& intersection_info,
DirInfo const& dir_info)
{
- ti.method = method_crosses;
- geometry::convert(intersection_info.intersections[0], ti.point);
+ assign_point(ti, method_crosses, intersection_info, 0);
// In all casees:
// If Q crosses P from left to right
@@ -844,14 +838,12 @@ struct crosses : public base_turn_handler
}
};
-template<typename TurnInfo>
-struct only_convert
+struct only_convert : public base_turn_handler
{
- template<typename IntersectionInfo>
+ template<typename TurnInfo, typename IntersectionInfo>
static inline void apply(TurnInfo& ti, IntersectionInfo const& intersection_info)
{
- ti.method = method_collinear;
- geometry::convert(intersection_info.intersections[0], ti.point);
+ assign_point(ti, method_none, intersection_info, 0); // was collinear
ti.operations[0].operation = operation_continue;
ti.operations[1].operation = operation_continue;
}
@@ -869,7 +861,7 @@ struct assign_null_policy
static bool const include_degenerate = false;
static bool const include_opposite = false;
- template
+ template
<
typename Info,
typename Point1,
@@ -897,48 +889,39 @@ struct assign_null_policy
It also defines if a certain class of points
(degenerate, non-turns) should be included.
*/
-template
-<
- typename Point1,
- typename Point2,
- typename TurnInfo,
- typename AssignPolicy
->
+template<typename AssignPolicy>
struct get_turn_info
{
- typedef strategy_intersection
- <
- typename cs_tag<typename TurnInfo::point_type>::type,
- Point1,
- Point2,
- typename TurnInfo::point_type
- > si;
-
- typedef typename si::segment_intersection_strategy_type strategy;
-
// Intersect pi-pj with qi-qj
- // The points pk and qk are only used do determine more information
- // about the turn.
- template <typename OutputIterator>
+ // The points pk and qk are used do determine more information
+ // about the turn (turn left/right)
+ template
+ <
+ typename Point1,
+ typename Point2,
+ typename TurnInfo,
+ typename RobustPolicy,
+ typename OutputIterator
+ >
static inline OutputIterator apply(
Point1 const& pi, Point1 const& pj, Point1 const& pk,
Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ bool /*is_p_first*/, bool /*is_p_last*/,
+ bool /*is_q_first*/, bool /*is_q_last*/,
TurnInfo const& tp_model,
+ RobustPolicy const& robust_policy,
OutputIterator out)
{
- typedef model::referring_segment<Point1 const> segment_type1;
- typedef model::referring_segment<Point1 const> segment_type2;
- segment_type1 p1(pi, pj), p2(pj, pk);
- segment_type2 q1(qi, qj), q2(qj, qk);
+ typedef intersection_info<Point1, Point2, typename TurnInfo::point_type, RobustPolicy>
+ inters_info;
- typename strategy::return_type result = strategy::apply(p1, q1);
+ inters_info inters(pi, pj, pk, qi, qj, qk, robust_policy);
- char const method = result.template get<1>().how;
+ char const method = inters.d_info().how;
// Copy, to copy possibly extended fields
TurnInfo tp = tp_model;
-
// Select method and apply
switch(method)
{
@@ -946,11 +929,10 @@ struct get_turn_info
case 'f' : // collinear, "from"
case 's' : // starts from the middle
if (AssignPolicy::include_no_turn
- && result.template get<0>().count > 0)
+ && inters.i_info().count > 0)
{
- only_convert<TurnInfo>::apply(tp,
- result.template get<0>());
- AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ only_convert::apply(tp, inters.i_info());
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
*out++ = tp;
}
break;
@@ -962,70 +944,59 @@ struct get_turn_info
{
typedef touch_interior
<
- TurnInfo,
- typename si::side_strategy_type
+ TurnInfo
> policy;
// If Q (1) arrives (1)
- if (result.template get<1>().arrival[1] == 1)
+ if ( inters.d_info().arrival[1] == 1 )
{
policy::template apply<0>(pi, pj, pk, qi, qj, qk,
- tp, result.template get<0>(), result.template get<1>());
+ tp, inters.i_info(), inters.d_info(),
+ inters.sides());
}
else
{
// Swap p/q
+ side_calculator
+ <
+ typename inters_info::robust_point2_type,
+ typename inters_info::robust_point1_type
+ > swapped_side_calc(inters.rqi(), inters.rqj(), inters.rqk(),
+ inters.rpi(), inters.rpj(), inters.rpk());
policy::template apply<1>(qi, qj, qk, pi, pj, pk,
- tp, result.template get<0>(), result.template get<1>());
+ tp, inters.i_info(), inters.d_info(),
+ swapped_side_calc);
}
- AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
*out++ = tp;
}
break;
case 'i' :
{
- typedef crosses
- <
- TurnInfo,
- typename si::side_strategy_type
- > policy;
-
- policy::apply(pi, pj, pk, qi, qj, qk,
- tp, result.template get<0>(), result.template get<1>());
- AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ crosses<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info());
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
*out++ = tp;
}
break;
case 't' :
{
// Both touch (both arrive there)
- typedef touch
- <
- TurnInfo,
- typename si::side_strategy_type
- > policy;
-
- policy::apply(pi, pj, pk, qi, qj, qk,
- tp, result.template get<0>(), result.template get<1>());
- AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ touch<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
*out++ = tp;
}
break;
case 'e':
{
- if (! result.template get<1>().opposite)
+ if ( ! inters.d_info().opposite )
{
// Both equal
// or collinear-and-ending at intersection point
- typedef equal
- <
- TurnInfo,
- typename si::side_strategy_type
- > policy;
-
- policy::apply(pi, pj, pk, qi, qj, qk,
- tp, result.template get<0>(), result.template get<1>());
- AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
*out++ = tp;
}
else
@@ -1035,40 +1006,32 @@ struct get_turn_info
TurnInfo,
AssignPolicy
>::apply(pi, qi,
- tp, out, result.template get<0>(), result.template get<1>());
+ tp, out, inters.i_info(), inters.d_info());
}
}
break;
case 'c' :
{
// Collinear
- if (! result.template get<1>().opposite)
+ if ( ! inters.d_info().opposite )
{
- if (result.template get<1>().arrival[0] == 0)
+ if ( inters.d_info().arrival[0] == 0 )
{
// Collinear, but similar thus handled as equal
- equal
- <
- TurnInfo,
- typename si::side_strategy_type
- >::apply(pi, pj, pk, qi, qj, qk,
- tp, result.template get<0>(), result.template get<1>());
+ equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
// override assigned method
tp.method = method_collinear;
}
else
{
- collinear
- <
- TurnInfo,
- typename si::side_strategy_type
- >::apply(pi, pj, pk, qi, qj, qk,
- tp, result.template get<0>(), result.template get<1>());
+ collinear<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
}
- AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
*out++ = tp;
}
else
@@ -1076,10 +1039,9 @@ struct get_turn_info
collinear_opposite
<
TurnInfo,
- typename si::side_strategy_type,
AssignPolicy
>::apply(pi, pj, pk, qi, qj, qk,
- tp, out, result.template get<0>(), result.template get<1>());
+ tp, out, inters.i_info(), inters.d_info(), inters.sides());
}
}
break;
@@ -1088,14 +1050,17 @@ struct get_turn_info
// degenerate points
if (AssignPolicy::include_degenerate)
{
- only_convert<TurnInfo>::apply(tp, result.template get<0>());
- AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ only_convert::apply(tp, inters.i_info());
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
*out++ = tp;
}
}
break;
default :
{
+#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
+ std::cout << "TURN: Unknown method: " << method << std::endl;
+#endif
#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
throw turn_info_exception(method);
#endif
@@ -1116,7 +1081,7 @@ struct get_turn_info
#if defined(_MSC_VER)
-#pragma warning(pop)
+#pragma warning(pop)
#endif
#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp
new file mode 100644
index 0000000000..6cf4d25abb
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp
@@ -0,0 +1,661 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_FOR_ENDPOINT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_FOR_ENDPOINT_HPP
+
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay {
+
+// SEGMENT_INTERSECTION RESULT
+
+// C H0 H1 A0 A1 O IP1 IP2
+
+// D0 and D1 == 0
+
+// |--------> 2 0 0 0 0 F i/i x/x
+// |-------->
+//
+// |--------> 2 0 0 0 0 T i/x x/i
+// <--------|
+//
+// |-----> 1 0 0 0 0 T x/x
+// <-----|
+//
+
+// |---------> 2 0 0 0 1 T i/x x/i
+// <----|
+//
+// |---------> 2 0 0 0 0 F i/i x/x
+// |---->
+//
+// |---------> 2 0 0 -1 1 F i/i u/x
+// |---->
+//
+// |---------> 2 0 0 -1 0 T i/x u/i
+// <----|
+
+// |-------> 2 0 0 1 -1 F and i/i x/u
+// |-------> 2 0 0 -1 1 F symetric i/i u/x
+// |------->
+//
+// |-------> 2 0 0 -1 -1 T i/u u/i
+// <-------|
+//
+// |-------> 2 0 0 1 1 T i/x x/i
+// <-------|
+//
+// |--------> 2 0 0 -1 1 F i/i u/x
+// |---->
+//
+// |--------> 2 0 0 -1 1 T i/x u/i
+// <----|
+
+// |-----> 1 -1 -1 -1 -1 T u/u
+// <-----|
+//
+// |-----> 1 -1 0 -1 0 F and u/x
+// |-----> 1 0 -1 0 -1 F symetric x/u
+// |----->
+
+// D0 or D1 != 0
+
+// ^
+// |
+// + 1 -1 1 -1 1 F and u/x (P is vertical)
+// |--------> 1 1 -1 1 -1 F symetric x/u (P is horizontal)
+// ^
+// |
+// +
+//
+// +
+// |
+// v
+// |--------> 1 1 1 1 1 F x/x (P is vertical)
+//
+// ^
+// |
+// +
+// |--------> 1 -1 -1 -1 -1 F u/u (P is vertical)
+//
+// ^
+// |
+// +
+// |--------> 1 0 -1 0 -1 F u/u (P is vertical)
+//
+// +
+// |
+// v
+// |--------> 1 0 1 0 1 F u/x (P is vertical)
+//
+
+class linear_intersections
+{
+public:
+ template <typename Point1, typename Point2, typename IntersectionResult>
+ linear_intersections(Point1 const& pi,
+ Point2 const& qi,
+ IntersectionResult const& result,
+ bool is_p_last, bool is_q_last)
+ {
+ int arrival_a = result.template get<1>().arrival[0];
+ int arrival_b = result.template get<1>().arrival[1];
+ bool same_dirs = result.template get<1>().dir_a == 0
+ && result.template get<1>().dir_b == 0;
+
+ if ( same_dirs )
+ {
+ if ( result.template get<0>().count == 2 )
+ {
+ if ( ! result.template get<1>().opposite )
+ {
+ ips[0].p_operation = operation_intersection;
+ ips[0].q_operation = operation_intersection;
+ ips[1].p_operation = union_or_blocked_same_dirs(arrival_a, is_p_last);
+ ips[1].q_operation = union_or_blocked_same_dirs(arrival_b, is_q_last);
+
+ ips[0].is_pi
+ = equals::equals_point_point(
+ pi, result.template get<0>().intersections[0]);
+ ips[0].is_qi
+ = equals::equals_point_point(
+ qi, result.template get<0>().intersections[0]);
+ ips[1].is_pj = arrival_a != -1;
+ ips[1].is_qj = arrival_b != -1;
+ }
+ else
+ {
+ ips[0].p_operation = operation_intersection;
+ ips[0].q_operation = union_or_blocked_same_dirs(arrival_b, is_q_last);
+ ips[1].p_operation = union_or_blocked_same_dirs(arrival_a, is_p_last);
+ ips[1].q_operation = operation_intersection;
+
+ ips[0].is_pi = arrival_b != 1;
+ ips[0].is_qj = arrival_b != -1;
+ ips[1].is_pj = arrival_a != -1;
+ ips[1].is_qi = arrival_a != 1;
+ }
+ }
+ else
+ {
+ BOOST_ASSERT(result.template get<0>().count == 1);
+ ips[0].p_operation = union_or_blocked_same_dirs(arrival_a, is_p_last);
+ ips[0].q_operation = union_or_blocked_same_dirs(arrival_b, is_q_last);
+
+ ips[0].is_pi = arrival_a == -1;
+ ips[0].is_qi = arrival_b == -1;
+ ips[0].is_pj = arrival_a == 0;
+ ips[0].is_qj = arrival_b == 0;
+ }
+ }
+ else
+ {
+ ips[0].p_operation = union_or_blocked_different_dirs(arrival_a, is_p_last);
+ ips[0].q_operation = union_or_blocked_different_dirs(arrival_b, is_q_last);
+
+ ips[0].is_pi = arrival_a == -1;
+ ips[0].is_qi = arrival_b == -1;
+ ips[0].is_pj = arrival_a == 1;
+ ips[0].is_qj = arrival_b == 1;
+ }
+ }
+
+ struct ip_info
+ {
+ inline ip_info()
+ : p_operation(operation_none), q_operation(operation_none)
+ , is_pi(false), is_pj(false), is_qi(false), is_qj(false)
+ {}
+
+ operation_type p_operation, q_operation;
+ bool is_pi, is_pj, is_qi, is_qj;
+ };
+
+ template <std::size_t I>
+ ip_info const& get() const
+ {
+ BOOST_STATIC_ASSERT(I < 2);
+ return ips[I];
+ }
+
+private:
+
+ // only if collinear (same_dirs)
+ static inline operation_type union_or_blocked_same_dirs(int arrival, bool is_last)
+ {
+ if ( arrival == 1 )
+ return operation_blocked;
+ else if ( arrival == -1 )
+ return operation_union;
+ else
+ return is_last ? operation_blocked : operation_union;
+ //return operation_blocked;
+ }
+
+ // only if not collinear (!same_dirs)
+ static inline operation_type union_or_blocked_different_dirs(int arrival, bool is_last)
+ {
+ if ( arrival == 1 )
+ //return operation_blocked;
+ return is_last ? operation_blocked : operation_union;
+ else
+ return operation_union;
+ }
+
+ ip_info ips[2];
+};
+
+template <typename AssignPolicy, bool EnableFirst, bool EnableLast>
+struct get_turn_info_for_endpoint
+{
+ BOOST_STATIC_ASSERT(EnableFirst || EnableLast);
+
+ template<typename Point1,
+ typename Point2,
+ typename TurnInfo,
+ typename IntersectionInfo,
+ typename OutputIterator
+ >
+ static inline bool apply(Point1 const& pi, Point1 const& pj, Point1 const& pk,
+ Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ bool is_p_first, bool is_p_last,
+ bool is_q_first, bool is_q_last,
+ TurnInfo const& tp_model,
+ IntersectionInfo const& inters,
+ method_type /*method*/,
+ OutputIterator out)
+ {
+ std::size_t ip_count = inters.i_info().count;
+ // no intersection points
+ if ( ip_count == 0 )
+ return false;
+
+ int segment_index0 = tp_model.operations[0].seg_id.segment_index;
+ int segment_index1 = tp_model.operations[1].seg_id.segment_index;
+ BOOST_ASSERT(segment_index0 >= 0 && segment_index1 >= 0);
+
+ if ( !is_p_first && !is_p_last && !is_q_first && !is_q_last )
+ return false;
+
+ linear_intersections intersections(pi, qi, inters.result(), is_p_last, is_q_last);
+
+ bool append0_last
+ = analyse_segment_and_assign_ip(pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ intersections.template get<0>(),
+ tp_model, inters, 0, out);
+
+ // NOTE: opposite && ip_count == 1 may be true!
+ bool opposite = inters.d_info().opposite;
+
+ // don't ignore only for collinear opposite
+ bool result_ignore_ip0 = append0_last && ( ip_count == 1 || !opposite );
+
+ if ( intersections.template get<1>().p_operation == operation_none )
+ return result_ignore_ip0;
+
+ bool append1_last
+ = analyse_segment_and_assign_ip(pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ intersections.template get<1>(),
+ tp_model, inters, 1, out);
+
+ // don't ignore only for collinear opposite
+ bool result_ignore_ip1 = append1_last && !opposite /*&& ip_count == 2*/;
+
+ return result_ignore_ip0 || result_ignore_ip1;
+ }
+
+ template <typename Point1,
+ typename Point2,
+ typename TurnInfo,
+ typename IntersectionInfo,
+ typename OutputIterator>
+ static inline
+ bool analyse_segment_and_assign_ip(Point1 const& pi, Point1 const& pj, Point1 const& pk,
+ Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ bool is_p_first, bool is_p_last,
+ bool is_q_first, bool is_q_last,
+ linear_intersections::ip_info const& ip_info,
+ TurnInfo const& tp_model,
+ IntersectionInfo const& inters,
+ int ip_index,
+ OutputIterator out)
+ {
+#ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS_LINEAR_LINEAR
+ // may this give false positives for INTs?
+ typename IntersectionResult::point_type const&
+ inters_pt = result.template get<0>().intersections[ip_index];
+ BOOST_ASSERT(ip_info.is_pi == equals::equals_point_point(pi, inters_pt));
+ BOOST_ASSERT(ip_info.is_qi == equals::equals_point_point(qi, inters_pt));
+ BOOST_ASSERT(ip_info.is_pj == equals::equals_point_point(pj, inters_pt));
+ BOOST_ASSERT(ip_info.is_qj == equals::equals_point_point(qj, inters_pt));
+#endif
+
+ // TODO - calculate first/last only if needed
+ bool is_p_first_ip = is_p_first && ip_info.is_pi;
+ bool is_p_last_ip = is_p_last && ip_info.is_pj;
+ bool is_q_first_ip = is_q_first && ip_info.is_qi;
+ bool is_q_last_ip = is_q_last && ip_info.is_qj;
+ bool append_first = EnableFirst && (is_p_first_ip || is_q_first_ip);
+ bool append_last = EnableLast && (is_p_last_ip || is_q_last_ip);
+
+ operation_type p_operation = ip_info.p_operation;
+ operation_type q_operation = ip_info.q_operation;
+
+ if ( append_first || append_last )
+ {
+ bool handled = handle_internal<0>(pi, pj, pk, qi, qj, qk,
+ inters.rpi(), inters.rpj(), inters.rpk(),
+ inters.rqi(), inters.rqj(), inters.rqk(),
+ is_p_first_ip, is_p_last_ip,
+ is_q_first_ip, is_q_last_ip,
+ ip_info.is_qi, ip_info.is_qj,
+ tp_model, inters, ip_index,
+ p_operation, q_operation);
+ if ( !handled )
+ {
+ handle_internal<1>(qi, qj, qk, pi, pj, pk,
+ inters.rqi(), inters.rqj(), inters.rqk(),
+ inters.rpi(), inters.rpj(), inters.rpk(),
+ is_q_first_ip, is_q_last_ip,
+ is_p_first_ip, is_p_last_ip,
+ ip_info.is_pi, ip_info.is_pj,
+ tp_model, inters, ip_index,
+ q_operation, p_operation);
+ }
+
+ if ( p_operation != operation_none )
+ {
+ method_type method = endpoint_ip_method(ip_info.is_pi, ip_info.is_pj,
+ ip_info.is_qi, ip_info.is_qj);
+ turn_position p_pos = ip_position(is_p_first_ip, is_p_last_ip);
+ turn_position q_pos = ip_position(is_q_first_ip, is_q_last_ip);
+
+ // handle spikes
+
+ // P is spike and should be handled
+ if ( !is_p_last
+ && ip_info.is_pj // this check is redundant (also in is_spike_p) but faster
+ && inters.i_info().count == 2
+ && inters.is_spike_p() )
+ {
+ assign(pi, qi, inters.result(), ip_index, method, operation_blocked, q_operation,
+ p_pos, q_pos, is_p_first_ip, is_q_first_ip, true, false, tp_model, out);
+ assign(pi, qi, inters.result(), ip_index, method, operation_intersection, q_operation,
+ p_pos, q_pos, is_p_first_ip, is_q_first_ip, true, false, tp_model, out);
+ }
+ // Q is spike and should be handled
+ else if ( !is_q_last
+ && ip_info.is_qj // this check is redundant (also in is_spike_q) but faster
+ && inters.i_info().count == 2
+ && inters.is_spike_q() )
+ {
+ assign(pi, qi, inters.result(), ip_index, method, p_operation, operation_blocked,
+ p_pos, q_pos, is_p_first_ip, is_q_first_ip, false, true, tp_model, out);
+ assign(pi, qi, inters.result(), ip_index, method, p_operation, operation_intersection,
+ p_pos, q_pos, is_p_first_ip, is_q_first_ip, false, true, tp_model, out);
+ }
+ // no spikes
+ else
+ {
+ assign(pi, qi, inters.result(), ip_index, method, p_operation, q_operation,
+ p_pos, q_pos, is_p_first_ip, is_q_first_ip, false, false, tp_model, out);
+ }
+ }
+ }
+
+ return append_last;
+ }
+
+ // TODO: IT'S ALSO PROBABLE THAT ALL THIS FUNCTION COULD BE INTEGRATED WITH handle_segment
+ // however now it's lazily calculated and then it would be always calculated
+
+ template<std::size_t G1Index,
+ typename Point1,
+ typename Point2,
+ typename RobustPoint1,
+ typename RobustPoint2,
+ typename TurnInfo,
+ typename IntersectionInfo
+ >
+ static inline bool handle_internal(Point1 const& /*i1*/, Point1 const& /*j1*/, Point1 const& /*k1*/,
+ Point2 const& i2, Point2 const& j2, Point2 const& /*k2*/,
+ RobustPoint1 const& ri1, RobustPoint1 const& rj1, RobustPoint1 const& /*rk1*/,
+ RobustPoint2 const& ri2, RobustPoint2 const& rj2, RobustPoint2 const& rk2,
+ bool first1, bool last1, bool first2, bool last2,
+ bool ip_i2, bool ip_j2, TurnInfo const& tp_model,
+ IntersectionInfo const& inters, int ip_index,
+ operation_type & op1, operation_type & op2)
+ {
+ boost::ignore_unused_variable_warning(i2);
+ boost::ignore_unused_variable_warning(j2);
+ boost::ignore_unused_variable_warning(ip_index);
+ boost::ignore_unused_variable_warning(tp_model);
+
+ if ( !first2 && !last2 )
+ {
+ if ( first1 )
+ {
+#ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS_LINEAR_LINEAR
+ // may this give false positives for INTs?
+ typename IntersectionResult::point_type const&
+ inters_pt = inters.i_info().intersections[ip_index];
+ BOOST_ASSERT(ip_i2 == equals::equals_point_point(i2, inters_pt));
+ BOOST_ASSERT(ip_j2 == equals::equals_point_point(j2, inters_pt));
+#endif
+ if ( ip_i2 )
+ {
+ // don't output this IP - for the first point of other geometry segment
+ op1 = operation_none;
+ op2 = operation_none;
+ return true;
+ }
+ else if ( ip_j2 )
+ {
+ side_calculator<RobustPoint1, RobustPoint2, RobustPoint2>
+ side_calc(ri2, ri1, rj1, ri2, rj2, rk2);
+
+ std::pair<operation_type, operation_type>
+ operations = operations_of_equal(side_calc);
+
+// TODO: must the above be calculated?
+// wouldn't it be enough to check if segments are collinear?
+
+ if ( operations_both(operations, operation_continue) )
+ {
+ if ( op1 != operation_union
+ || op2 != operation_union
+ || ! ( G1Index == 0 ? inters.is_spike_q() : inters.is_spike_p() ) )
+ {
+ // THIS IS WRT THE ORIGINAL SEGMENTS! NOT THE ONES ABOVE!
+ bool opposite = inters.d_info().opposite;
+
+ op1 = operation_intersection;
+ op2 = opposite ? operation_union : operation_intersection;
+ }
+ }
+ else
+ {
+ BOOST_ASSERT(operations_combination(operations, operation_intersection, operation_union));
+ //op1 = operation_union;
+ //op2 = operation_union;
+ }
+
+ return true;
+ }
+ // else do nothing - shouldn't be handled this way
+ }
+ else if ( last1 )
+ {
+#ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS_LINEAR_LINEAR
+ // may this give false positives for INTs?
+ typename IntersectionResult::point_type const&
+ inters_pt = inters.i_info().intersections[ip_index];
+ BOOST_ASSERT(ip_i2 == equals::equals_point_point(i2, inters_pt));
+ BOOST_ASSERT(ip_j2 == equals::equals_point_point(j2, inters_pt));
+#endif
+ if ( ip_i2 )
+ {
+ // don't output this IP - for the first point of other geometry segment
+ op1 = operation_none;
+ op2 = operation_none;
+ return true;
+ }
+ else if ( ip_j2 )
+ {
+ side_calculator<RobustPoint1, RobustPoint2, RobustPoint2>
+ side_calc(ri2, rj1, ri1, ri2, rj2, rk2);
+
+ std::pair<operation_type, operation_type>
+ operations = operations_of_equal(side_calc);
+
+// TODO: must the above be calculated?
+// wouldn't it be enough to check if segments are collinear?
+
+ if ( operations_both(operations, operation_continue) )
+ {
+ if ( op1 != operation_blocked
+ || op2 != operation_union
+ || ! ( G1Index == 0 ? inters.is_spike_q() : inters.is_spike_p() ) )
+ {
+ // THIS IS WRT THE ORIGINAL SEGMENTS! NOT THE ONES ABOVE!
+ bool second_going_out = inters.i_info().count > 1;
+
+ op1 = operation_blocked;
+ op2 = second_going_out ? operation_union : operation_intersection;
+ }
+ }
+ else
+ {
+ BOOST_ASSERT(operations_combination(operations, operation_intersection, operation_union));
+ //op1 = operation_blocked;
+ //op2 = operation_union;
+ }
+
+ return true;
+ }
+ // else do nothing - shouldn't be handled this way
+ }
+ // else do nothing - shouldn't be handled this way
+ }
+
+ return false;
+ }
+
+ static inline method_type endpoint_ip_method(bool ip_pi, bool ip_pj, bool ip_qi, bool ip_qj)
+ {
+ if ( (ip_pi || ip_pj) && (ip_qi || ip_qj) )
+ return method_touch;
+ else
+ return method_touch_interior;
+ }
+
+ static inline turn_position ip_position(bool is_ip_first_i, bool is_ip_last_j)
+ {
+ return is_ip_first_i ? position_front :
+ ( is_ip_last_j ? position_back : position_middle );
+ }
+
+ template <typename Point1,
+ typename Point2,
+ typename IntersectionResult,
+ typename TurnInfo,
+ typename OutputIterator>
+ static inline void assign(Point1 const& pi, Point2 const& qi,
+ IntersectionResult const& result,
+ int ip_index,
+ method_type method,
+ operation_type op0, operation_type op1,
+ turn_position pos0, turn_position pos1,
+ bool is_p_first_ip, bool is_q_first_ip,
+ bool is_p_spike, bool is_q_spike,
+ TurnInfo const& tp_model,
+ OutputIterator out)
+ {
+ TurnInfo tp = tp_model;
+
+ //geometry::convert(ip, tp.point);
+ //tp.method = method;
+ base_turn_handler::assign_point(tp, method, result.template get<0>(), ip_index);
+
+ tp.operations[0].operation = op0;
+ tp.operations[1].operation = op1;
+ tp.operations[0].position = pos0;
+ tp.operations[1].position = pos1;
+
+ if ( result.template get<0>().count > 1 )
+ {
+ // NOTE: is_collinear is NOT set for the first endpoint
+ // for which there is no preceding segment
+
+ //BOOST_ASSERT( result.template get<1>().dir_a == 0 && result.template get<1>().dir_b == 0 );
+ if ( ! is_p_first_ip )
+ {
+ tp.operations[0].is_collinear = op0 != operation_intersection
+ || is_p_spike;
+ }
+
+ if ( ! is_q_first_ip )
+ {
+ tp.operations[1].is_collinear = op1 != operation_intersection
+ || is_q_spike;
+ }
+ }
+ else //if ( result.template get<0>().count == 1 )
+ {
+ if ( op0 == operation_blocked && op1 == operation_intersection )
+ {
+ tp.operations[0].is_collinear = true;
+ }
+ else if ( op0 == operation_intersection && op1 == operation_blocked )
+ {
+ tp.operations[1].is_collinear = true;
+ }
+ }
+
+ AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ *out++ = tp;
+ }
+
+ template <typename SidePolicy>
+ static inline std::pair<operation_type, operation_type> operations_of_equal(SidePolicy const& side)
+ {
+ int const side_pk_q2 = side.pk_wrt_q2();
+ int const side_pk_p = side.pk_wrt_p1();
+ int const side_qk_p = side.qk_wrt_p1();
+
+ // If pk is collinear with qj-qk, they continue collinearly.
+ // This can be on either side of p1 (== q1), or collinear
+ // The second condition checks if they do not continue
+ // oppositely
+ if ( side_pk_q2 == 0 && side_pk_p == side_qk_p )
+ {
+ return std::make_pair(operation_continue, operation_continue);
+ }
+
+ // If they turn to same side (not opposite sides)
+ if ( ! base_turn_handler::opposite(side_pk_p, side_qk_p) )
+ {
+ // If pk is left of q2 or collinear: p: union, q: intersection
+ if ( side_pk_q2 != -1 )
+ {
+ return std::make_pair(operation_union, operation_intersection);
+ }
+ else
+ {
+ return std::make_pair(operation_intersection, operation_union);
+ }
+ }
+ else
+ {
+ // They turn opposite sides. If p turns left (or collinear),
+ // p: union, q: intersection
+ if ( side_pk_p != -1 )
+ {
+ return std::make_pair(operation_union, operation_intersection);
+ }
+ else
+ {
+ return std::make_pair(operation_intersection, operation_union);
+ }
+ }
+ }
+
+ static inline bool operations_both(
+ std::pair<operation_type, operation_type> const& operations,
+ operation_type const op)
+ {
+ return operations.first == op && operations.second == op;
+ }
+
+ static inline bool operations_combination(
+ std::pair<operation_type, operation_type> const& operations,
+ operation_type const op1, operation_type const op2)
+ {
+ return ( operations.first == op1 && operations.second == op2 )
+ || ( operations.first == op2 && operations.second == op1 );
+ }
+};
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_FOR_ENDPOINT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp
new file mode 100644
index 0000000000..eead0d719b
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp
@@ -0,0 +1,329 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HELPERS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HELPERS_HPP
+
+#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay {
+
+enum turn_position { position_middle, position_front, position_back };
+
+template <typename SegmentRatio>
+struct turn_operation_linear
+ : public turn_operation<SegmentRatio>
+{
+ turn_operation_linear()
+ : position(position_middle)
+ , is_collinear(false)
+ {}
+
+ turn_position position;
+ bool is_collinear; // valid only for Linear geometry
+};
+
+template <typename PointP, typename PointQ,
+ typename Pi = PointP, typename Pj = PointP, typename Pk = PointP,
+ typename Qi = PointQ, typename Qj = PointQ, typename Qk = PointQ
+>
+struct side_calculator
+{
+ typedef boost::geometry::strategy::side::side_by_triangle<> side; // todo: get from coordinate system
+
+ inline side_calculator(Pi const& pi, Pj const& pj, Pk const& pk,
+ Qi const& qi, Qj const& qj, Qk const& qk)
+ : m_pi(pi), m_pj(pj), m_pk(pk)
+ , m_qi(qi), m_qj(qj), m_qk(qk)
+ {}
+
+ inline int pk_wrt_p1() const { return side::apply(m_pi, m_pj, m_pk); }
+ inline int pk_wrt_q1() const { return side::apply(m_qi, m_qj, m_pk); }
+ inline int qk_wrt_p1() const { return side::apply(m_pi, m_pj, m_qk); }
+ inline int qk_wrt_q1() const { return side::apply(m_qi, m_qj, m_qk); }
+
+ inline int pk_wrt_q2() const { return side::apply(m_qj, m_qk, m_pk); }
+ inline int qk_wrt_p2() const { return side::apply(m_pj, m_pk, m_qk); }
+
+ Pi const& m_pi;
+ Pj const& m_pj;
+ Pk const& m_pk;
+ Qi const& m_qi;
+ Qj const& m_qj;
+ Qk const& m_qk;
+};
+
+template <typename Point1, typename Point2, typename RobustPolicy>
+struct robust_points
+{
+ typedef typename geometry::robust_point_type
+ <
+ Point1, RobustPolicy
+ >::type robust_point1_type;
+ // TODO: define robust_point2_type using Point2?
+ typedef robust_point1_type robust_point2_type;
+
+ inline robust_points(Point1 const& pi, Point1 const& pj, Point1 const& pk,
+ Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ RobustPolicy const& robust_policy)
+ {
+ geometry::recalculate(m_rpi, pi, robust_policy);
+ geometry::recalculate(m_rpj, pj, robust_policy);
+ geometry::recalculate(m_rpk, pk, robust_policy);
+ geometry::recalculate(m_rqi, qi, robust_policy);
+ geometry::recalculate(m_rqj, qj, robust_policy);
+ geometry::recalculate(m_rqk, qk, robust_policy);
+ }
+
+ robust_point1_type m_rpi, m_rpj, m_rpk;
+ robust_point2_type m_rqi, m_rqj, m_rqk;
+};
+
+template <typename Point1, typename Point2, typename RobustPolicy>
+class intersection_info_base
+ : private robust_points<Point1, Point2, RobustPolicy>
+{
+ typedef robust_points<Point1, Point2, RobustPolicy> base_t;
+
+public:
+ typedef Point1 point1_type;
+ typedef Point2 point2_type;
+
+ typedef typename base_t::robust_point1_type robust_point1_type;
+ typedef typename base_t::robust_point2_type robust_point2_type;
+
+ typedef side_calculator<robust_point1_type, robust_point2_type> side_calculator_type;
+
+ intersection_info_base(Point1 const& pi, Point1 const& pj, Point1 const& pk,
+ Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ RobustPolicy const& robust_policy)
+ : base_t(pi, pj, pk, qi, qj, qk, robust_policy)
+ , m_side_calc(base_t::m_rpi, base_t::m_rpj, base_t::m_rpk,
+ base_t::m_rqi, base_t::m_rqj, base_t::m_rqk)
+ , m_pi(pi), m_pj(pj), m_pk(pk)
+ , m_qi(qi), m_qj(qj), m_qk(qk)
+ {}
+
+ inline Point1 const& pi() const { return m_pi; }
+ inline Point1 const& pj() const { return m_pj; }
+ inline Point1 const& pk() const { return m_pk; }
+
+ inline Point2 const& qi() const { return m_qi; }
+ inline Point2 const& qj() const { return m_qj; }
+ inline Point2 const& qk() const { return m_qk; }
+
+ inline robust_point1_type const& rpi() const { return base_t::m_rpi; }
+ inline robust_point1_type const& rpj() const { return base_t::m_rpj; }
+ inline robust_point1_type const& rpk() const { return base_t::m_rpk; }
+
+ inline robust_point2_type const& rqi() const { return base_t::m_rqi; }
+ inline robust_point2_type const& rqj() const { return base_t::m_rqj; }
+ inline robust_point2_type const& rqk() const { return base_t::m_rqk; }
+
+ inline side_calculator_type const& sides() const { return m_side_calc; }
+
+private:
+ side_calculator_type m_side_calc;
+
+ point1_type const& m_pi;
+ point1_type const& m_pj;
+ point1_type const& m_pk;
+ point2_type const& m_qi;
+ point2_type const& m_qj;
+ point2_type const& m_qk;
+};
+
+template <typename Point1, typename Point2>
+class intersection_info_base<Point1, Point2, detail::no_rescale_policy>
+{
+public:
+ typedef Point1 point1_type;
+ typedef Point2 point2_type;
+
+ typedef Point1 robust_point1_type;
+ typedef Point2 robust_point2_type;
+
+ typedef side_calculator<Point1, Point2> side_calculator_type;
+
+ intersection_info_base(Point1 const& pi, Point1 const& pj, Point1 const& pk,
+ Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ no_rescale_policy const& /*robust_policy*/)
+ : m_side_calc(pi, pj, pk, qi, qj, qk)
+ {}
+
+ inline Point1 const& pi() const { return m_side_calc.m_pi; }
+ inline Point1 const& pj() const { return m_side_calc.m_pj; }
+ inline Point1 const& pk() const { return m_side_calc.m_pk; }
+
+ inline Point2 const& qi() const { return m_side_calc.m_qi; }
+ inline Point2 const& qj() const { return m_side_calc.m_qj; }
+ inline Point2 const& qk() const { return m_side_calc.m_qk; }
+
+ inline Point1 const& rpi() const { return pi(); }
+ inline Point1 const& rpj() const { return pj(); }
+ inline Point1 const& rpk() const { return pk(); }
+
+ inline Point2 const& rqi() const { return qi(); }
+ inline Point2 const& rqj() const { return qj(); }
+ inline Point2 const& rqk() const { return qk(); }
+
+ inline side_calculator_type const& sides() const { return m_side_calc; }
+
+private:
+ side_calculator_type m_side_calc;
+};
+
+
+template <typename Point1, typename Point2, typename TurnPoint, typename RobustPolicy>
+class intersection_info
+ : public intersection_info_base<Point1, Point2, RobustPolicy>
+{
+ typedef intersection_info_base<Point1, Point2, RobustPolicy> base_t;
+
+ typedef typename strategy_intersection
+ <
+ typename cs_tag<TurnPoint>::type,
+ Point1,
+ Point2,
+ TurnPoint,
+ RobustPolicy
+ >::segment_intersection_strategy_type strategy;
+
+public:
+ typedef model::referring_segment<Point1 const> segment_type1;
+ typedef model::referring_segment<Point2 const> segment_type2;
+ typedef typename base_t::side_calculator_type side_calculator_type;
+
+ typedef typename strategy::return_type result_type;
+ typedef typename boost::tuples::element<0, result_type>::type i_info_type; // intersection_info
+ typedef typename boost::tuples::element<1, result_type>::type d_info_type; // dir_info
+
+ intersection_info(Point1 const& pi, Point1 const& pj, Point1 const& pk,
+ Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ RobustPolicy const& robust_policy)
+ : base_t(pi, pj, pk, qi, qj, qk, robust_policy)
+ , m_result(strategy::apply(segment_type1(pi, pj),
+ segment_type2(qi, qj),
+ robust_policy))
+ , m_robust_policy(robust_policy)
+ {}
+
+ inline result_type const& result() const { return m_result; }
+ inline i_info_type const& i_info() const { return m_result.template get<0>(); }
+ inline d_info_type const& d_info() const { return m_result.template get<1>(); }
+
+ // TODO: it's more like is_spike_ip_p
+ inline bool is_spike_p() const
+ {
+ if ( base_t::sides().pk_wrt_p1() == 0 )
+ {
+ if ( ! is_ip_j<0>() )
+ return false;
+
+ int const qk_p1 = base_t::sides().qk_wrt_p1();
+ int const qk_p2 = base_t::sides().qk_wrt_p2();
+
+ if ( qk_p1 == -qk_p2 )
+ {
+ if ( qk_p1 == 0 )
+ {
+ return is_spike_of_collinear(base_t::pi(), base_t::pj(), base_t::pk());
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ // TODO: it's more like is_spike_ip_q
+ inline bool is_spike_q() const
+ {
+ if ( base_t::sides().qk_wrt_q1() == 0 )
+ {
+ if ( ! is_ip_j<1>() )
+ return false;
+
+ int const pk_q1 = base_t::sides().pk_wrt_q1();
+ int const pk_q2 = base_t::sides().pk_wrt_q2();
+
+ if ( pk_q1 == -pk_q2 )
+ {
+ if ( pk_q1 == 0 )
+ {
+ return is_spike_of_collinear(base_t::qi(), base_t::qj(), base_t::qk());
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+private:
+ template <typename Point>
+ inline bool is_spike_of_collinear(Point const& i, Point const& j, Point const& k) const
+ {
+ typedef model::referring_segment<Point const> seg_t;
+
+ typedef strategy_intersection
+ <
+ typename cs_tag<Point>::type, Point, Point, Point, RobustPolicy
+ > si;
+
+ typedef typename si::segment_intersection_strategy_type strategy;
+
+ typename strategy::return_type result
+ = strategy::apply(seg_t(i, j), seg_t(j, k), m_robust_policy);
+
+ return result.template get<0>().count == 2;
+ }
+
+ template <std::size_t OpId>
+ bool is_ip_j() const
+ {
+ int arrival = d_info().arrival[OpId];
+ bool same_dirs = d_info().dir_a == 0 && d_info().dir_b == 0;
+
+ if ( same_dirs )
+ {
+ if ( i_info().count == 2 )
+ {
+ return arrival != -1;
+ }
+ else
+ {
+ return arrival == 0;
+ }
+ }
+ else
+ {
+ return arrival == 1;
+ }
+ }
+
+ result_type m_result;
+ RobustPolicy const& m_robust_policy;
+};
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HELPERS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp
new file mode 100644
index 0000000000..20340a6080
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp
@@ -0,0 +1,809 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LA_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LA_HPP
+
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp>
+
+// TEMP, for spikes detector
+//#include <boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay {
+
+template<typename AssignPolicy>
+struct get_turn_info_linear_areal
+{
+ static const bool handle_spikes = true;
+
+ template
+ <
+ typename Point1,
+ typename Point2,
+ typename TurnInfo,
+ typename RobustPolicy,
+ typename OutputIterator
+ >
+ static inline OutputIterator apply(
+ Point1 const& pi, Point1 const& pj, Point1 const& pk,
+ Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ bool is_p_first, bool is_p_last,
+ bool is_q_first, bool is_q_last,
+ TurnInfo const& tp_model,
+ RobustPolicy const& robust_policy,
+ OutputIterator out)
+ {
+ typedef intersection_info<Point1, Point2, typename TurnInfo::point_type, RobustPolicy>
+ inters_info;
+
+ inters_info inters(pi, pj, pk, qi, qj, qk, robust_policy);
+
+ char const method = inters.d_info().how;
+
+ // Copy, to copy possibly extended fields
+ TurnInfo tp = tp_model;
+
+ // Select method and apply
+ switch(method)
+ {
+ case 'a' : // collinear, "at"
+ case 'f' : // collinear, "from"
+ case 's' : // starts from the middle
+ get_turn_info_for_endpoint<true, true>(
+ pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_none, out);
+ break;
+
+ case 'd' : // disjoint: never do anything
+ break;
+
+ case 'm' :
+ {
+ if ( get_turn_info_for_endpoint<false, true>(
+ pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_touch_interior, out) )
+ {
+ // do nothing
+ }
+ else
+ {
+ typedef touch_interior
+ <
+ TurnInfo
+ > policy;
+
+ // If Q (1) arrives (1)
+ if ( inters.d_info().arrival[1] == 1 )
+ {
+ policy::template apply<0>(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(),
+ inters.sides());
+ }
+ else
+ {
+ // Swap p/q
+ side_calculator
+ <
+ typename inters_info::robust_point2_type,
+ typename inters_info::robust_point1_type
+ > swapped_side_calc(inters.rqi(), inters.rqj(), inters.rqk(),
+ inters.rpi(), inters.rpj(), inters.rpk());
+ policy::template apply<1>(qi, qj, qk, pi, pj, pk,
+ tp, inters.i_info(), inters.d_info(),
+ swapped_side_calc);
+ }
+
+ if ( tp.operations[1].operation == operation_blocked )
+ {
+ tp.operations[0].is_collinear = true;
+ }
+
+ replace_method_and_operations_tm(tp.method,
+ tp.operations[0].operation,
+ tp.operations[1].operation);
+
+ // this function assumes that 'u' must be set for a spike
+ calculate_spike_operation(tp.operations[0].operation,
+ inters, is_p_last);
+
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+
+ *out++ = tp;
+ }
+ }
+ break;
+ case 'i' :
+ {
+ crosses<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info());
+
+ replace_operations_i(tp.operations[0].operation, tp.operations[1].operation);
+
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+ *out++ = tp;
+ }
+ break;
+ case 't' :
+ {
+ // Both touch (both arrive there)
+ if ( get_turn_info_for_endpoint<false, true>(
+ pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_touch, out) )
+ {
+ // do nothing
+ }
+ else
+ {
+ touch<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+
+ if ( tp.operations[1].operation == operation_blocked )
+ {
+ tp.operations[0].is_collinear = true;
+ }
+
+ // workarounds for touch<> not taking spikes into account starts here
+ // those was discovered empirically
+ // touch<> is not symmetrical!
+ // P spikes and Q spikes may produce various operations!
+ // Only P spikes are valid for L/A
+ // TODO: this is not optimal solution - think about rewriting touch<>
+
+ if ( tp.operations[0].operation == operation_blocked )
+ {
+ // a spike on P on the same line with Q1
+ if ( inters.is_spike_p() )
+ {
+ if ( inters.sides().qk_wrt_p1() == 0 )
+ {
+ tp.operations[0].is_collinear = true;
+ }
+ else
+ {
+ tp.operations[0].operation = operation_union;
+ }
+ }
+ }
+ else if ( tp.operations[0].operation == operation_continue
+ && tp.operations[1].operation == operation_continue )
+ {
+ // P spike on the same line with Q2 (opposite)
+ if ( inters.sides().pk_wrt_q1() == -inters.sides().qk_wrt_q1()
+ && inters.is_spike_p() )
+ {
+ tp.operations[0].operation = operation_union;
+ tp.operations[1].operation = operation_union;
+ }
+ }
+ else if ( tp.operations[0].operation == operation_none
+ && tp.operations[1].operation == operation_none )
+ {
+ // spike not handled by touch<>
+ if ( inters.is_spike_p() )
+ {
+ tp.operations[0].operation = operation_intersection;
+ tp.operations[1].operation = operation_union;
+
+ if ( inters.sides().pk_wrt_q2() == 0 )
+ {
+ tp.operations[0].operation = operation_continue; // will be converted to i
+ tp.operations[0].is_collinear = true;
+ }
+ }
+ }
+
+ // workarounds for touch<> not taking spikes into account ends here
+
+ replace_method_and_operations_tm(tp.method,
+ tp.operations[0].operation,
+ tp.operations[1].operation);
+
+ bool ignore_spike
+ = calculate_spike_operation(tp.operations[0].operation,
+ inters, is_p_last);
+
+// TODO: move this into the append_xxx and call for each turn?
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+
+ if ( ! handle_spikes
+ || ignore_spike
+ || ! append_opposite_spikes<append_touches>( // for 'i' or 'c' i???
+ tp, inters, is_p_last, is_q_last, out) )
+ {
+ *out++ = tp;
+ }
+ }
+ }
+ break;
+ case 'e':
+ {
+ if ( get_turn_info_for_endpoint<true, true>(
+ pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_equal, out) )
+ {
+ // do nothing
+ }
+ else
+ {
+ tp.operations[0].is_collinear = true;
+
+ if ( ! inters.d_info().opposite )
+ {
+ // Both equal
+ // or collinear-and-ending at intersection point
+ equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+
+ turn_transformer_ec<false> transformer(method_touch);
+ transformer(tp);
+
+// TODO: move this into the append_xxx and call for each turn?
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+
+ // conditionally handle spikes
+ if ( ! handle_spikes
+ || ! append_collinear_spikes(tp, inters, is_p_last, is_q_last,
+ method_touch, append_equal, out) )
+ {
+ *out++ = tp; // no spikes
+ }
+ }
+ else
+ {
+ equal_opposite
+ <
+ TurnInfo,
+ AssignPolicy
+ >::apply(pi, qi,
+ tp, out, inters.i_info(), inters.d_info());
+ }
+ }
+ }
+ break;
+ case 'c' :
+ {
+ // Collinear
+ if ( get_turn_info_for_endpoint<true, true>(
+ pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_collinear, out) )
+ {
+ // do nothing
+ }
+ else
+ {
+ tp.operations[0].is_collinear = true;
+
+ if ( ! inters.d_info().opposite )
+ {
+ method_type method_replace = method_touch_interior;
+ append_version_c version = append_collinear;
+
+ if ( inters.d_info().arrival[0] == 0 )
+ {
+ // Collinear, but similar thus handled as equal
+ equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+
+ method_replace = method_touch;
+ version = append_equal;
+ }
+ else
+ {
+ collinear<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+
+ //method_replace = method_touch_interior;
+ //version = append_collinear;
+ }
+
+ turn_transformer_ec<false> transformer(method_replace);
+ transformer(tp);
+
+// TODO: move this into the append_xxx and call for each turn?
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+
+ // conditionally handle spikes
+ if ( ! handle_spikes
+ || ! append_collinear_spikes(tp, inters, is_p_last, is_q_last,
+ method_replace, version, out) )
+ {
+ // no spikes
+ *out++ = tp;
+ }
+ }
+ else
+ {
+ // Is this always 'm' ?
+ turn_transformer_ec<false> transformer(method_touch_interior);
+
+ // conditionally handle spikes
+ if ( handle_spikes )
+ {
+ append_opposite_spikes<append_collinear_opposite>(
+ tp, inters, is_p_last, is_q_last, out);
+ }
+
+ // TODO: ignore for spikes?
+ // E.g. pass is_p_valid = !is_p_last && !is_pj_spike,
+ // the same with is_q_valid
+
+ collinear_opposite
+ <
+ TurnInfo,
+ AssignPolicy
+ >::apply(pi, pj, pk, qi, qj, qk,
+ tp, out, inters.i_info(), inters.d_info(),
+ inters.sides(), transformer);
+ }
+ }
+ }
+ break;
+ case '0' :
+ {
+ // degenerate points
+ if (AssignPolicy::include_degenerate)
+ {
+ only_convert::apply(tp, inters.i_info());
+
+ if ( is_p_first
+ && equals::equals_point_point(pi, tp.point) )
+ {
+ tp.operations[0].position = position_front;
+ }
+ else if ( is_p_last
+ && equals::equals_point_point(pj, tp.point) )
+ {
+ tp.operations[0].position = position_back;
+ }
+ // tp.operations[1].position = position_middle;
+
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+ *out++ = tp;
+ }
+ }
+ break;
+ default :
+ {
+#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
+ std::cout << "TURN: Unknown method: " << method << std::endl;
+#endif
+#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
+ throw turn_info_exception(method);
+#endif
+ }
+ break;
+ }
+
+ return out;
+ }
+
+ template <typename Operation,
+ typename IntersectionInfo>
+ static inline bool calculate_spike_operation(Operation & op,
+ IntersectionInfo const& inters,
+ bool is_p_last)
+ {
+ bool is_p_spike = ( op == operation_union || op == operation_intersection )
+ && ! is_p_last
+ && inters.is_spike_p();
+
+ if ( is_p_spike )
+ {
+ bool going_in = false, going_out = false;
+
+ int const pk_q1 = inters.sides().pk_wrt_q1();
+ int const pk_q2 = inters.sides().pk_wrt_q2();
+
+ if ( inters.sides().qk_wrt_q1() <= 0 ) // Q turning R or C
+ {
+ going_in = pk_q1 < 0 && pk_q2 < 0; // Pk on the right of both
+ going_out = pk_q1 > 0 || pk_q2 > 0; // Pk on the left of one of them
+ }
+ else
+ {
+ going_in = pk_q1 < 0 || pk_q2 < 0; // Pk on the right of one of them
+ going_out = pk_q1 > 0 && pk_q2 > 0; // Pk on the left of both
+ }
+
+ if ( going_in )
+ {
+ op = operation_intersection;
+ return true;
+ }
+ else if ( going_out )
+ {
+ op = operation_union;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ enum append_version_c { append_equal, append_collinear };
+
+ template <typename TurnInfo,
+ typename IntersectionInfo,
+ typename OutIt>
+ static inline bool append_collinear_spikes(TurnInfo & tp,
+ IntersectionInfo const& inters,
+ bool is_p_last, bool /*is_q_last*/,
+ method_type method, append_version_c version,
+ OutIt out)
+ {
+ // method == touch || touch_interior
+ // both position == middle
+
+ bool is_p_spike = ( version == append_equal ?
+ ( tp.operations[0].operation == operation_union
+ || tp.operations[0].operation == operation_intersection ) :
+ tp.operations[0].operation == operation_continue )
+ && ! is_p_last
+ && inters.is_spike_p();
+
+ // TODO: throw an exception for spike in Areal?
+ /*bool is_q_spike = tp.operations[1].operation == spike_op
+ && ! is_q_last
+ && inters.is_spike_q();*/
+
+ if ( is_p_spike )
+ {
+ tp.method = method;
+ tp.operations[0].operation = operation_blocked;
+ tp.operations[1].operation = operation_union;
+ *out++ = tp;
+ tp.operations[0].operation = operation_continue; // boundary
+ //tp.operations[1].operation = operation_union;
+ *out++ = tp;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ enum append_version_o { append_touches, append_collinear_opposite };
+
+ template <append_version_o Version,
+ typename TurnInfo,
+ typename IntersectionInfo,
+ typename OutIt>
+ static inline bool append_opposite_spikes(TurnInfo & tp,
+ IntersectionInfo const& inters,
+ bool is_p_last, bool /*is_q_last*/,
+ OutIt out)
+ {
+ bool is_p_spike = ( Version == append_touches ?
+ ( tp.operations[0].operation == operation_continue
+ || tp.operations[0].operation == operation_intersection ) : // i ???
+ true )
+ && ! is_p_last
+ && inters.is_spike_p();
+ // TODO: throw an exception for spike in Areal?
+ /*bool is_q_spike = ( Version == append_touches ?
+ ( tp.operations[1].operation == operation_continue
+ || tp.operations[1].operation == operation_intersection ) :
+ true )
+ && ! is_q_last
+ && inters.is_spike_q();*/
+
+ if ( is_p_spike && ( Version == append_touches || inters.d_info().arrival[0] == 1 ) )
+ {
+ if ( Version == append_touches )
+ {
+ tp.operations[0].is_collinear = true;
+ //tp.operations[1].is_collinear = false;
+ tp.method = method_touch;
+ }
+ else
+ {
+ tp.operations[0].is_collinear = true;
+ //tp.operations[1].is_collinear = false;
+
+ BOOST_ASSERT(inters.i_info().count > 1);
+ base_turn_handler::assign_point(tp, method_touch_interior, inters.i_info(), 1);
+
+ AssignPolicy::apply(tp, inters.pi(), inters.qi(), inters.i_info(), inters.d_info());
+ }
+
+ tp.operations[0].operation = operation_blocked;
+ tp.operations[1].operation = operation_continue; // boundary
+ *out++ = tp;
+ tp.operations[0].operation = operation_continue; // boundary
+ //tp.operations[1].operation = operation_continue; // boundary
+ *out++ = tp;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ static inline void replace_method_and_operations_tm(method_type & method,
+ operation_type & op0,
+ operation_type & op1)
+ {
+ if ( op0 == operation_blocked && op1 == operation_blocked )
+ {
+ // NOTE: probably only if methods are WRT IPs, not segments!
+ method = (method == method_touch ? method_equal : method_collinear);
+ }
+
+ // Assuming G1 is always Linear
+ if ( op0 == operation_blocked )
+ {
+ op0 = operation_continue;
+ }
+
+ if ( op1 == operation_blocked )
+ {
+ op1 = operation_continue;
+ }
+ else if ( op1 == operation_intersection )
+ {
+ op1 = operation_union;
+ }
+
+ // spikes in 'm'
+ if ( method == method_error )
+ {
+ method = method_touch_interior;
+ op0 = operation_union;
+ op1 = operation_union;
+ }
+ }
+
+ template <bool IsFront>
+ class turn_transformer_ec
+ {
+ public:
+ explicit turn_transformer_ec(method_type method_t_or_m)
+ : m_method(method_t_or_m)
+ {}
+
+ template <typename Turn>
+ void operator()(Turn & turn) const
+ {
+ operation_type & op0 = turn.operations[0].operation;
+ operation_type & op1 = turn.operations[1].operation;
+
+ // NOTE: probably only if methods are WRT IPs, not segments!
+ if ( IsFront
+ || op0 == operation_intersection || op0 == operation_union
+ || op1 == operation_intersection || op1 == operation_union )
+ {
+ turn.method = m_method;
+ }
+
+ turn.operations[0].is_collinear = op0 != operation_blocked;
+
+ // Assuming G1 is always Linear
+ if ( op0 == operation_blocked )
+ {
+ op0 = operation_continue;
+ }
+
+ if ( op1 == operation_blocked )
+ {
+ op1 = operation_continue;
+ }
+ else if ( op1 == operation_intersection )
+ {
+ op1 = operation_union;
+ }
+ }
+
+ private:
+ method_type m_method;
+ };
+
+ static inline void replace_operations_i(operation_type & /*op0*/, operation_type & op1)
+ {
+ // assuming Linear is always the first one
+ op1 = operation_union;
+ }
+
+ // NOTE: Spikes may NOT be handled for Linear endpoints because it's not
+ // possible to define a spike on an endpoint. Areal geometries must
+ // NOT have spikes at all. One thing that could be done is to throw
+ // an exception when spike is detected in Areal geometry.
+
+ template <bool EnableFirst,
+ bool EnableLast,
+ typename Point1,
+ typename Point2,
+ typename TurnInfo,
+ typename IntersectionInfo,
+ typename OutputIterator>
+ static inline bool get_turn_info_for_endpoint(
+ Point1 const& pi, Point1 const& /*pj*/, Point1 const& /*pk*/,
+ Point2 const& qi, Point2 const& /*qj*/, Point2 const& /*qk*/,
+ bool is_p_first, bool is_p_last,
+ bool /*is_q_first*/, bool is_q_last,
+ TurnInfo const& tp_model,
+ IntersectionInfo const& inters,
+ method_type /*method*/,
+ OutputIterator out)
+ {
+ namespace ov = overlay;
+ typedef ov::get_turn_info_for_endpoint<AssignPolicy, EnableFirst, EnableLast> get_info_e;
+
+ const std::size_t ip_count = inters.i_info().count;
+ // no intersection points
+ if ( ip_count == 0 )
+ return false;
+
+ const int segment_index0 = tp_model.operations[0].seg_id.segment_index;
+ const int segment_index1 = tp_model.operations[1].seg_id.segment_index;
+ BOOST_ASSERT(segment_index0 >= 0 && segment_index1 >= 0);
+
+ if ( !is_p_first && !is_p_last )
+ return false;
+
+// TODO: is_q_last could probably be replaced by false and removed from parameters
+
+ linear_intersections intersections(pi, qi, inters.result(), is_p_last, is_q_last);
+ linear_intersections::ip_info const& ip0 = intersections.template get<0>();
+ linear_intersections::ip_info const& ip1 = intersections.template get<1>();
+
+ const bool opposite = inters.d_info().opposite;
+
+ // ANALYSE AND ASSIGN FIRST
+
+ // IP on the first point of Linear Geometry
+ if ( EnableFirst && is_p_first && ip0.is_pi && !ip0.is_qi ) // !q0i prevents duplication
+ {
+ TurnInfo tp = tp_model;
+ tp.operations[0].position = position_front;
+ tp.operations[1].position = position_middle;
+
+ if ( opposite ) // opposite -> collinear
+ {
+ tp.operations[0].operation = operation_continue;
+ tp.operations[1].operation = operation_union;
+ tp.method = ip0.is_qj ? method_touch : method_touch_interior;
+ }
+ else
+ {
+ method_type replaced_method = method_touch_interior;
+
+ if ( ip0.is_qj )
+ {
+ side_calculator
+ <
+ typename IntersectionInfo::robust_point1_type,
+ typename IntersectionInfo::robust_point2_type,
+ typename IntersectionInfo::robust_point2_type
+ > side_calc(inters.rqi(), inters.rpi(), inters.rpj(),
+ inters.rqi(), inters.rqj(), inters.rqk());
+
+ std::pair<operation_type, operation_type>
+ operations = get_info_e::operations_of_equal(side_calc);
+
+ tp.operations[0].operation = operations.first;
+ tp.operations[1].operation = operations.second;
+
+ replaced_method = method_touch;
+ }
+ else
+ {
+ side_calculator
+ <
+ typename IntersectionInfo::robust_point1_type,
+ typename IntersectionInfo::robust_point2_type,
+ typename IntersectionInfo::robust_point2_type,
+ typename IntersectionInfo::robust_point1_type,
+ typename IntersectionInfo::robust_point1_type,
+ typename IntersectionInfo::robust_point2_type,
+ typename IntersectionInfo::robust_point1_type,
+ typename IntersectionInfo::robust_point2_type
+ > side_calc(inters.rqi(), inters.rpi(), inters.rpj(),
+ inters.rqi(), inters.rpi(), inters.rqj());
+
+ std::pair<operation_type, operation_type>
+ operations = get_info_e::operations_of_equal(side_calc);
+
+ tp.operations[0].operation = operations.first;
+ tp.operations[1].operation = operations.second;
+ }
+
+ turn_transformer_ec<true> transformer(replaced_method);
+ transformer(tp);
+ }
+
+ // equals<> or collinear<> will assign the second point,
+ // we'd like to assign the first one
+ base_turn_handler::assign_point(tp, tp.method, inters.i_info(), 0);
+
+ // NOTE: is_collinear is not set for the first endpoint of L
+ // for which there is no preceding segment
+ // here is_p_first_ip == true
+ tp.operations[0].is_collinear = false;
+
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+ *out++ = tp;
+ }
+
+ // ANALYSE AND ASSIGN LAST
+
+ // IP on the last point of Linear Geometry
+ if ( EnableLast
+ && is_p_last
+ && ( ip_count > 1 ? (ip1.is_pj && !ip1.is_qi) : (ip0.is_pj && !ip0.is_qi) ) ) // prevents duplication
+ {
+ TurnInfo tp = tp_model;
+
+ if ( inters.i_info().count > 1 )
+ {
+ //BOOST_ASSERT( result.template get<1>().dir_a == 0 && result.template get<1>().dir_b == 0 );
+ tp.operations[0].is_collinear = true;
+ tp.operations[1].operation = opposite ? operation_continue : operation_union;
+ }
+ else //if ( result.template get<0>().count == 1 )
+ {
+ side_calculator
+ <
+ typename IntersectionInfo::robust_point1_type,
+ typename IntersectionInfo::robust_point2_type,
+ typename IntersectionInfo::robust_point2_type
+ > side_calc(inters.rqi(), inters.rpj(), inters.rpi(),
+ inters.rqi(), inters.rqj(), inters.rqk());
+
+ std::pair<operation_type, operation_type>
+ operations = get_info_e::operations_of_equal(side_calc);
+
+ tp.operations[0].operation = operations.first;
+ tp.operations[1].operation = operations.second;
+
+ turn_transformer_ec<false> transformer(method_none);
+ transformer(tp);
+
+ tp.operations[0].is_collinear = tp.both(operation_continue);
+ }
+
+ tp.method = ( ip_count > 1 ? ip1.is_qj : ip0.is_qj ) ? method_touch : method_touch_interior;
+ tp.operations[0].operation = operation_blocked;
+ tp.operations[0].position = position_back;
+ tp.operations[1].position = position_middle;
+
+ // equals<> or collinear<> will assign the second point,
+ // we'd like to assign the first one
+ int ip_index = ip_count > 1 ? 1 : 0;
+ base_turn_handler::assign_point(tp, tp.method, inters.i_info(), ip_index);
+
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+ *out++ = tp;
+
+ return true;
+ }
+
+ // don't ignore anything for now
+ return false;
+ }
+};
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LA_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp
new file mode 100644
index 0000000000..4f0384877f
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp
@@ -0,0 +1,720 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LL_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LL_HPP
+
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay {
+
+template<typename AssignPolicy>
+struct get_turn_info_linear_linear
+{
+ static const bool handle_spikes = true;
+
+ template
+ <
+ typename Point1,
+ typename Point2,
+ typename TurnInfo,
+ typename RobustPolicy,
+ typename OutputIterator
+ >
+ static inline OutputIterator apply(
+ Point1 const& pi, Point1 const& pj, Point1 const& pk,
+ Point2 const& qi, Point2 const& qj, Point2 const& qk,
+ bool is_p_first, bool is_p_last,
+ bool is_q_first, bool is_q_last,
+ TurnInfo const& tp_model,
+ RobustPolicy const& robust_policy,
+ OutputIterator out)
+ {
+ typedef intersection_info<Point1, Point2, typename TurnInfo::point_type, RobustPolicy>
+ inters_info;
+
+ inters_info inters(pi, pj, pk, qi, qj, qk, robust_policy);
+
+ char const method = inters.d_info().how;
+
+ // Copy, to copy possibly extended fields
+ TurnInfo tp = tp_model;
+
+ // Select method and apply
+ switch(method)
+ {
+ case 'a' : // collinear, "at"
+ case 'f' : // collinear, "from"
+ case 's' : // starts from the middle
+ get_turn_info_for_endpoint<AssignPolicy, true, true>
+ ::apply(pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_none, out);
+ break;
+
+ case 'd' : // disjoint: never do anything
+ break;
+
+ case 'm' :
+ {
+ if ( get_turn_info_for_endpoint<AssignPolicy, false, true>
+ ::apply(pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_touch_interior, out) )
+ {
+ // do nothing
+ }
+ else
+ {
+ typedef touch_interior
+ <
+ TurnInfo
+ > policy;
+
+ // If Q (1) arrives (1)
+ if ( inters.d_info().arrival[1] == 1)
+ {
+ policy::template apply<0>(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(),
+ inters.sides());
+ }
+ else
+ {
+ // Swap p/q
+ side_calculator
+ <
+ typename inters_info::robust_point2_type,
+ typename inters_info::robust_point1_type
+ > swapped_side_calc(inters.rqi(), inters.rqj(), inters.rqk(),
+ inters.rpi(), inters.rpj(), inters.rpk());
+
+ policy::template apply<1>(qi, qj, qk, pi, pj, pk,
+ tp, inters.i_info(), inters.d_info(),
+ swapped_side_calc);
+ }
+
+ if ( tp.operations[0].operation == operation_blocked )
+ {
+ tp.operations[1].is_collinear = true;
+ }
+ if ( tp.operations[1].operation == operation_blocked )
+ {
+ tp.operations[0].is_collinear = true;
+ }
+
+ replace_method_and_operations_tm(tp.method,
+ tp.operations[0].operation,
+ tp.operations[1].operation);
+
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+ *out++ = tp;
+ }
+ }
+ break;
+ case 'i' :
+ {
+ crosses<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info());
+
+ replace_operations_i(tp.operations[0].operation, tp.operations[1].operation);
+
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+ *out++ = tp;
+ }
+ break;
+ case 't' :
+ {
+ // Both touch (both arrive there)
+ if ( get_turn_info_for_endpoint<AssignPolicy, false, true>
+ ::apply(pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_touch, out) )
+ {
+ // do nothing
+ }
+ else
+ {
+ touch<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+
+ // workarounds for touch<> not taking spikes into account starts here
+ // those was discovered empirically
+ // touch<> is not symmetrical!
+ // P spikes and Q spikes may produce various operations!
+ // TODO: this is not optimal solution - think about rewriting touch<>
+
+ if ( tp.operations[0].operation == operation_blocked
+ && tp.operations[1].operation == operation_blocked )
+ {
+ // two touching spikes on the same line
+ if ( inters.is_spike_p() && inters.is_spike_q() )
+ {
+ tp.operations[0].operation = operation_union;
+ tp.operations[1].operation = operation_union;
+ }
+ else
+ {
+ tp.operations[0].is_collinear = true;
+ tp.operations[1].is_collinear = true;
+ }
+ }
+ else if ( tp.operations[0].operation == operation_blocked )
+ {
+ // a spike on P on the same line with Q1
+ if ( inters.is_spike_p() )
+ {
+ if ( inters.sides().qk_wrt_p1() == 0 )
+ {
+ tp.operations[0].is_collinear = true;
+ }
+ else
+ {
+ tp.operations[0].operation = operation_union;
+ }
+ }
+ else
+ {
+ tp.operations[1].is_collinear = true;
+ }
+ }
+ else if ( tp.operations[1].operation == operation_blocked )
+ {
+ // a spike on Q on the same line with P1
+ if ( inters.is_spike_q() )
+ {
+ if ( inters.sides().pk_wrt_q1() == 0 )
+ {
+ tp.operations[1].is_collinear = true;
+ }
+ else
+ {
+ tp.operations[1].operation = operation_union;
+ }
+ }
+ else
+ {
+ tp.operations[0].is_collinear = true;
+ }
+ }
+ else if ( tp.operations[0].operation == operation_continue
+ && tp.operations[1].operation == operation_continue )
+ {
+ // P spike on the same line with Q2 (opposite)
+ if ( inters.sides().pk_wrt_q1() == -inters.sides().qk_wrt_q1()
+ && inters.is_spike_p() )
+ {
+ tp.operations[0].operation = operation_union;
+ tp.operations[1].operation = operation_union;
+ }
+ }
+ else if ( tp.operations[0].operation == operation_none
+ && tp.operations[1].operation == operation_none )
+ {
+ // spike not handled by touch<>
+ bool const is_p = inters.is_spike_p();
+ bool const is_q = inters.is_spike_q();
+
+ if ( is_p || is_q )
+ {
+ tp.operations[0].operation = operation_union;
+ tp.operations[1].operation = operation_union;
+
+ if ( inters.sides().pk_wrt_q2() == 0 )
+ {
+ tp.operations[0].operation = operation_continue; // will be converted to i
+ if ( is_p )
+ {
+ tp.operations[0].is_collinear = true;
+ }
+ }
+
+ if ( inters.sides().qk_wrt_p2() == 0 )
+ {
+ tp.operations[1].operation = operation_continue; // will be converted to i
+ if ( is_q )
+ {
+ tp.operations[1].is_collinear = true;
+ }
+ }
+ }
+ }
+
+ // workarounds for touch<> not taking spikes into account ends here
+
+ replace_method_and_operations_tm(tp.method,
+ tp.operations[0].operation,
+ tp.operations[1].operation);
+
+// TODO: move this into the append_xxx and call for each turn?
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+
+ if ( ! handle_spikes
+ || ! append_opposite_spikes<append_touches>(tp, inters,
+ is_p_last, is_q_last,
+ out) )
+ {
+ *out++ = tp;
+ }
+ }
+ }
+ break;
+ case 'e':
+ {
+ if ( get_turn_info_for_endpoint<AssignPolicy, true, true>
+ ::apply(pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_equal, out) )
+ {
+ // do nothing
+ }
+ else
+ {
+ tp.operations[0].is_collinear = true;
+ tp.operations[1].is_collinear = true;
+
+ if ( ! inters.d_info().opposite )
+ {
+ // Both equal
+ // or collinear-and-ending at intersection point
+ equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+
+ // transform turn
+ turn_transformer_ec transformer(method_touch);
+ transformer(tp);
+
+// TODO: move this into the append_xxx and call for each turn?
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+
+ // conditionally handle spikes
+ if ( ! handle_spikes
+ || ! append_collinear_spikes(tp, inters,
+ is_p_last, is_q_last,
+ method_touch, operation_union,
+ out) )
+ {
+ *out++ = tp; // no spikes
+ }
+ }
+ else
+ {
+ // TODO: ignore for spikes or generate something else than opposite?
+
+ equal_opposite
+ <
+ TurnInfo,
+ AssignPolicy
+ >::apply(pi, qi, tp, out, inters.i_info(), inters.d_info());
+ }
+ }
+ }
+ break;
+ case 'c' :
+ {
+ // Collinear
+ if ( get_turn_info_for_endpoint<AssignPolicy, true, true>
+ ::apply(pi, pj, pk, qi, qj, qk,
+ is_p_first, is_p_last, is_q_first, is_q_last,
+ tp_model, inters, method_collinear, out) )
+ {
+ // do nothing
+ }
+ else
+ {
+ // NOTE: this is for spikes since those are set in the turn_transformer_ec
+ tp.operations[0].is_collinear = true;
+ tp.operations[1].is_collinear = true;
+
+ if ( ! inters.d_info().opposite )
+ {
+ method_type method_replace = method_touch_interior;
+ operation_type spike_op = operation_continue;
+
+ if ( inters.d_info().arrival[0] == 0 )
+ {
+ // Collinear, but similar thus handled as equal
+ equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+
+ method_replace = method_touch;
+ spike_op = operation_union;
+ }
+ else
+ {
+ collinear<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
+ tp, inters.i_info(), inters.d_info(), inters.sides());
+
+ //method_replace = method_touch_interior;
+ //spike_op = operation_continue;
+ }
+
+ // transform turn
+ turn_transformer_ec transformer(method_replace);
+ transformer(tp);
+
+// TODO: move this into the append_xxx and call for each turn?
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+
+ // conditionally handle spikes
+ if ( ! handle_spikes
+ || ! append_collinear_spikes(tp, inters,
+ is_p_last, is_q_last,
+ method_replace, spike_op,
+ out) )
+ {
+ // no spikes
+ *out++ = tp;
+ }
+ }
+ else
+ {
+ // If this always 'm' ?
+ turn_transformer_ec transformer(method_touch_interior);
+
+ // conditionally handle spikes
+ if ( handle_spikes )
+ {
+ append_opposite_spikes<append_collinear_opposite>(tp, inters,
+ is_p_last, is_q_last,
+ out);
+ }
+
+ // TODO: ignore for spikes?
+ // E.g. pass is_p_valid = !is_p_last && !is_pj_spike,
+ // the same with is_q_valid
+
+ collinear_opposite
+ <
+ TurnInfo,
+ AssignPolicy
+ >::apply(pi, pj, pk, qi, qj, qk,
+ tp, out, inters.i_info(), inters.d_info(), inters.sides(),
+ transformer, !is_p_last, !is_q_last);
+ }
+ }
+ }
+ break;
+ case '0' :
+ {
+ // degenerate points
+ if (AssignPolicy::include_degenerate)
+ {
+ only_convert::apply(tp, inters.i_info());
+
+ // if any, only one of those should be true
+ if ( is_p_first
+ && equals::equals_point_point(pi, tp.point) )
+ {
+ tp.operations[0].position = position_front;
+ }
+ else if ( is_p_last
+ && equals::equals_point_point(pj, tp.point) )
+ {
+ tp.operations[0].position = position_back;
+ }
+ else if ( is_q_first
+ && equals::equals_point_point(qi, tp.point) )
+ {
+ tp.operations[1].position = position_front;
+ }
+ else if ( is_q_last
+ && equals::equals_point_point(qj, tp.point) )
+ {
+ tp.operations[1].position = position_back;
+ }
+
+ AssignPolicy::apply(tp, pi, qi, inters.i_info(), inters.d_info());
+ *out++ = tp;
+ }
+ }
+ break;
+ default :
+ {
+#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
+ std::cout << "TURN: Unknown method: " << method << std::endl;
+#endif
+#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
+ throw turn_info_exception(method);
+#endif
+ }
+ break;
+ }
+
+ return out;
+ }
+
+ template <typename TurnInfo,
+ typename IntersectionInfo,
+ typename OutIt>
+ static inline bool append_collinear_spikes(TurnInfo & tp,
+ IntersectionInfo const& inters_info,
+ bool is_p_last, bool is_q_last,
+ method_type method, operation_type spike_op,
+ OutIt out)
+ {
+ // method == touch || touch_interior
+ // both position == middle
+
+ bool is_p_spike = tp.operations[0].operation == spike_op
+ && ! is_p_last
+ && inters_info.is_spike_p();
+ bool is_q_spike = tp.operations[1].operation == spike_op
+ && ! is_q_last
+ && inters_info.is_spike_q();
+
+ if ( is_p_spike && is_q_spike )
+ {
+ tp.method = method;
+ tp.operations[0].operation = operation_blocked;
+ tp.operations[1].operation = operation_blocked;
+ *out++ = tp;
+ tp.operations[0].operation = operation_intersection;
+ tp.operations[1].operation = operation_intersection;
+ *out++ = tp;
+
+ return true;
+ }
+ else if ( is_p_spike )
+ {
+ tp.method = method;
+ tp.operations[0].operation = operation_blocked;
+ tp.operations[1].operation = operation_union;
+ *out++ = tp;
+ tp.operations[0].operation = operation_intersection;
+ //tp.operations[1].operation = operation_union;
+ *out++ = tp;
+
+ return true;
+ }
+ else if ( is_q_spike )
+ {
+ tp.method = method;
+ tp.operations[0].operation = operation_union;
+ tp.operations[1].operation = operation_blocked;
+ *out++ = tp;
+ //tp.operations[0].operation = operation_union;
+ tp.operations[1].operation = operation_intersection;
+ *out++ = tp;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ enum append_version { append_touches, append_collinear_opposite };
+
+ template <append_version Version,
+ typename TurnInfo,
+ typename IntersectionInfo,
+ typename OutIt>
+ static inline bool append_opposite_spikes(TurnInfo & tp,
+ IntersectionInfo const& inters,
+ bool is_p_last, bool is_q_last,
+ OutIt out)
+ {
+ bool is_p_spike = ( Version == append_touches ?
+ ( tp.operations[0].operation == operation_continue
+ || tp.operations[0].operation == operation_intersection ) :
+ true )
+ && ! is_p_last
+ && inters.is_spike_p();
+ bool is_q_spike = ( Version == append_touches ?
+ ( tp.operations[1].operation == operation_continue
+ || tp.operations[1].operation == operation_intersection ) :
+ true )
+ && ! is_q_last
+ && inters.is_spike_q();
+
+ bool res = false;
+
+ if ( is_p_spike && ( Version == append_touches || inters.d_info().arrival[0] == 1 ) )
+ {
+ if ( Version == append_touches )
+ {
+ tp.operations[0].is_collinear = true;
+ tp.operations[1].is_collinear = false;
+ tp.method = method_touch;
+ }
+ else // Version == append_collinear_opposite
+ {
+ tp.operations[0].is_collinear = true;
+ tp.operations[1].is_collinear = false;
+
+ BOOST_ASSERT(inters.i_info().count > 1);
+
+ base_turn_handler::assign_point(tp, method_touch_interior,
+ inters.i_info(), 1);
+
+ AssignPolicy::apply(tp, inters.pi(), inters.qi(),
+ inters.i_info(), inters.d_info());
+ }
+
+ tp.operations[0].operation = operation_blocked;
+ tp.operations[1].operation = operation_intersection;
+ *out++ = tp;
+ tp.operations[0].operation = operation_intersection;
+ //tp.operations[1].operation = operation_intersection;
+ *out++ = tp;
+
+ res = true;
+ }
+
+ if ( is_q_spike && ( Version == append_touches || inters.d_info().arrival[1] == 1 ) )
+ {
+ if ( Version == append_touches )
+ {
+ tp.operations[0].is_collinear = false;
+ tp.operations[1].is_collinear = true;
+ tp.method = method_touch;
+ }
+ else // Version == append_collinear_opposite
+ {
+ tp.operations[0].is_collinear = false;
+ tp.operations[1].is_collinear = true;
+
+ BOOST_ASSERT(inters.i_info().count > 0);
+
+ base_turn_handler::assign_point(tp, method_touch_interior, inters.i_info(), 0);
+
+ AssignPolicy::apply(tp, inters.pi(), inters.qi(),
+ inters.i_info(), inters.d_info());
+ }
+
+ tp.operations[0].operation = operation_intersection;
+ tp.operations[1].operation = operation_blocked;
+ *out++ = tp;
+ //tp.operations[0].operation = operation_intersection;
+ tp.operations[1].operation = operation_intersection;
+ *out++ = tp;
+
+ res = true;
+ }
+
+ return res;
+ }
+
+ static inline void replace_method_and_operations_tm(method_type & method,
+ operation_type & op0,
+ operation_type & op1)
+ {
+ if ( op0 == operation_blocked && op1 == operation_blocked )
+ {
+ // NOTE: probably only if methods are WRT IPs, not segments!
+ method = (method == method_touch ? method_equal : method_collinear);
+ op0 = operation_continue;
+ op1 = operation_continue;
+ }
+ else
+ {
+ if ( op0 == operation_continue || op0 == operation_blocked )
+ {
+ op0 = operation_intersection;
+ }
+ else if ( op0 == operation_intersection )
+ {
+ op0 = operation_union;
+ }
+
+ if ( op1 == operation_continue || op1 == operation_blocked )
+ {
+ op1 = operation_intersection;
+ }
+ else if ( op1 == operation_intersection )
+ {
+ op1 = operation_union;
+ }
+
+ // spikes in 'm'
+ if ( method == method_error )
+ {
+ method = method_touch_interior;
+ op0 = operation_union;
+ op1 = operation_union;
+ }
+ }
+ }
+
+ class turn_transformer_ec
+ {
+ public:
+ explicit turn_transformer_ec(method_type method_t_or_m)
+ : m_method(method_t_or_m)
+ {}
+
+ template <typename Turn>
+ void operator()(Turn & turn) const
+ {
+ operation_type & op0 = turn.operations[0].operation;
+ operation_type & op1 = turn.operations[1].operation;
+
+ BOOST_ASSERT(op0 != operation_blocked || op1 != operation_blocked );
+
+ if ( op0 == operation_blocked )
+ {
+ op0 = operation_intersection;
+ }
+ else if ( op0 == operation_intersection )
+ {
+ op0 = operation_union;
+ }
+
+ if ( op1 == operation_blocked )
+ {
+ op1 = operation_intersection;
+ }
+ else if ( op1 == operation_intersection )
+ {
+ op1 = operation_union;
+ }
+
+ if ( op0 == operation_intersection || op0 == operation_union
+ || op1 == operation_intersection || op1 == operation_union )
+ {
+ turn.method = m_method;
+ }
+
+// TODO: is this correct?
+// it's equivalent to comparing to operation_blocked at the beginning of the function
+ turn.operations[0].is_collinear = op0 != operation_intersection;
+ turn.operations[1].is_collinear = op1 != operation_intersection;
+ }
+
+ private:
+ method_type m_method;
+ };
+
+ static inline void replace_operations_i(operation_type & op0, operation_type & op1)
+ {
+ if ( op0 == operation_intersection )
+ {
+ op0 = operation_union;
+ }
+
+ if ( op1 == operation_intersection )
+ {
+ op1 = operation_union;
+ }
+ }
+};
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LL_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp
index 782ea7fd2b..513bfd372f 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp
@@ -1,11 +1,17 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
// 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)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
@@ -17,15 +23,14 @@
#include <boost/concept_check.hpp>
#include <boost/mpl/if.hpp>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/reverse_dispatch.hpp>
#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
@@ -43,17 +48,22 @@
#include <boost/geometry/strategies/intersection.hpp>
#include <boost/geometry/strategies/intersection_result.hpp>
-#include <boost/geometry/algorithms/detail/disjoint.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/point_point.hpp>
+
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/algorithms/detail/partition.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/algorithms/detail/recalculate.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp>
#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
-
#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
+#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
# include <sstream>
@@ -66,10 +76,10 @@ namespace boost { namespace geometry
// Silence warning C4127: conditional expression is constant
#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
+#pragma warning(push)
+#pragma warning(disable : 4127)
#endif
-
+
#ifndef DOXYGEN_NO_DETAIL
namespace detail { namespace get_turns
@@ -93,9 +103,7 @@ template
typename Geometry1, typename Geometry2,
bool Reverse1, bool Reverse2,
typename Section1, typename Section2,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
class get_turns_in_sections
{
@@ -152,12 +160,12 @@ class get_turns_in_sections
<
typename tag_cast
<
- typename geometry::point_type<Geometry1>::type,
+ typename geometry::tag<Geometry>::type,
areal_tag
- >::type,
+ >::type,
areal_tag
>::value
- && index1 == 0
+ && index1 == 0
&& index2 >= n - 2
;
}
@@ -165,15 +173,27 @@ class get_turns_in_sections
public :
// Returns true if terminated, false if interrupted
+ template <typename Turns, typename RobustPolicy, typename InterruptPolicy>
static inline bool apply(
int source_id1, Geometry1 const& geometry1, Section1 const& sec1,
int source_id2, Geometry2 const& geometry2, Section2 const& sec2,
bool skip_larger,
+ RobustPolicy const& robust_policy,
Turns& turns,
InterruptPolicy& interrupt_policy)
{
boost::ignore_unused_variable_warning(interrupt_policy);
+ if ((sec1.duplicate && (sec1.count + 1) < sec1.range_count)
+ || (sec2.duplicate && (sec2.count + 1) < sec2.range_count))
+ {
+ // Skip sections containig only duplicates.
+ // They are still important (can indicate non-disjointness)
+ // but they will be found processing adjacent sections.
+ // Do NOT skip if they are the ONLY section
+ return true;
+ }
+
cview_type1 cview1(range_by_section(geometry1, sec1));
cview_type2 cview2(range_by_section(geometry2, sec2));
view_type1 view1(cview1);
@@ -198,7 +218,7 @@ public :
range1_iterator prev1, it1, end1;
get_start_point_iterator(sec1, view1, prev1, it1, end1,
- index1, ndi1, dir1, sec2.bounding_box);
+ index1, ndi1, dir1, sec2.bounding_box, robust_policy);
// We need a circular iterator because it might run through the closing point.
// One circle is actually enough but this one is just convenient.
@@ -209,12 +229,12 @@ public :
// section 2: [--------------]
// section 1: |----|---|---|---|---|
for (prev1 = it1++, next1++;
- it1 != end1 && ! exceeding<0>(dir1, *prev1, sec2.bounding_box);
+ it1 != end1 && ! exceeding<0>(dir1, *prev1, sec2.bounding_box, robust_policy);
++prev1, ++it1, ++index1, ++next1, ++ndi1)
{
ever_circling_iterator<range1_iterator> nd_next1(
begin_range_1, end_range_1, next1, true);
- advance_to_non_duplicate_next(nd_next1, it1, sec1);
+ advance_to_non_duplicate_next(nd_next1, it1, sec1, robust_policy);
int index2 = sec2.begin_index;
int ndi2 = sec2.non_duplicate_index;
@@ -222,12 +242,12 @@ public :
range2_iterator prev2, it2, end2;
get_start_point_iterator(sec2, view2, prev2, it2, end2,
- index2, ndi2, dir2, sec1.bounding_box);
+ index2, ndi2, dir2, sec1.bounding_box, robust_policy);
ever_circling_iterator<range2_iterator> next2(begin_range_2, end_range_2, it2, true);
next2++;
for (prev2 = it2++, next2++;
- it2 != end2 && ! exceeding<0>(dir2, *prev2, sec1.bounding_box);
+ it2 != end2 && ! exceeding<0>(dir2, *prev2, sec1.bounding_box, robust_policy);
++prev2, ++it2, ++index2, ++next2, ++ndi2)
{
bool skip = same_source;
@@ -253,10 +273,9 @@ public :
// Move to the "non duplicate next"
ever_circling_iterator<range2_iterator> nd_next2(
begin_range_2, end_range_2, next2, true);
- advance_to_non_duplicate_next(nd_next2, it2, sec2);
+ advance_to_non_duplicate_next(nd_next2, it2, sec2, robust_policy);
typedef typename boost::range_value<Turns>::type turn_info;
- typedef typename turn_info::point_type ip;
turn_info ti;
ti.operations[0].seg_id = segment_identifier(source_id1,
@@ -269,8 +288,14 @@ public :
std::size_t const size_before = boost::size(turns);
+ bool const is_1_first = sec1.is_non_duplicate_first && index1 == sec1.begin_index;
+ bool const is_1_last = sec1.is_non_duplicate_last && index1+1 >= sec1.end_index;
+ bool const is_2_first = sec2.is_non_duplicate_first && index2 == sec2.begin_index;
+ bool const is_2_last = sec2.is_non_duplicate_last && index2+1 >= sec2.end_index;
+
TurnPolicy::apply(*prev1, *it1, *nd_next1, *prev2, *it2, *nd_next2,
- ti, std::back_inserter(turns));
+ is_1_first, is_1_last, is_2_first, is_2_last,
+ ti, robust_policy, std::back_inserter(turns));
if (InterruptPolicy::enabled)
{
@@ -295,24 +320,34 @@ private :
typedef typename model::referring_segment<point2_type const> segment2_type;
- template <size_t Dim, typename Point, typename Box>
- static inline bool preceding(int dir, Point const& point, Box const& box)
+ template <size_t Dim, typename Point, typename Box, typename RobustPolicy>
+ static inline bool preceding(int dir, Point const& point, Box const& box, RobustPolicy const& robust_policy)
{
- return (dir == 1 && get<Dim>(point) < get<min_corner, Dim>(box))
- || (dir == -1 && get<Dim>(point) > get<max_corner, Dim>(box));
+ typename robust_point_type<Point, RobustPolicy>::type robust_point;
+ geometry::recalculate(robust_point, point, robust_policy);
+ return (dir == 1 && get<Dim>(robust_point) < get<min_corner, Dim>(box))
+ || (dir == -1 && get<Dim>(robust_point) > get<max_corner, Dim>(box));
}
- template <size_t Dim, typename Point, typename Box>
- static inline bool exceeding(int dir, Point const& point, Box const& box)
+ template <size_t Dim, typename Point, typename Box, typename RobustPolicy>
+ static inline bool exceeding(int dir, Point const& point, Box const& box, RobustPolicy const& robust_policy)
{
- return (dir == 1 && get<Dim>(point) > get<max_corner, Dim>(box))
- || (dir == -1 && get<Dim>(point) < get<min_corner, Dim>(box));
+ typename robust_point_type<Point, RobustPolicy>::type robust_point;
+ geometry::recalculate(robust_point, point, robust_policy);
+ return (dir == 1 && get<Dim>(robust_point) > get<max_corner, Dim>(box))
+ || (dir == -1 && get<Dim>(robust_point) < get<min_corner, Dim>(box));
}
- template <typename Iterator, typename RangeIterator, typename Section>
+ template <typename Iterator, typename RangeIterator, typename Section, typename RobustPolicy>
static inline void advance_to_non_duplicate_next(Iterator& next,
- RangeIterator const& it, Section const& section)
+ RangeIterator const& it, Section const& section, RobustPolicy const& robust_policy)
{
+ typedef typename robust_point_type<point1_type, RobustPolicy>::type robust_point_type;
+ robust_point_type robust_point_from_it;
+ robust_point_type robust_point_from_next;
+ geometry::recalculate(robust_point_from_it, *it, robust_policy);
+ geometry::recalculate(robust_point_from_next, *next, robust_policy);
+
// To see where the next segments bend to, in case of touch/intersections
// on end points, we need (in case of degenerate/duplicate points) an extra
// iterator which moves to the REAL next point, so non duplicate.
@@ -323,10 +358,14 @@ private :
// So advance to the "non duplicate next"
// (the check is defensive, to avoid endless loops)
std::size_t check = 0;
- while(! detail::disjoint::disjoint_point_point(*it, *next)
+ while(! detail::disjoint::disjoint_point_point
+ (
+ robust_point_from_it, robust_point_from_next
+ )
&& check++ < section.range_count)
{
next++;
+ geometry::recalculate(robust_point_from_next, *next, robust_policy);
}
}
@@ -334,14 +373,14 @@ private :
// because of the logistics of "index" (the section-iterator automatically
// skips to the begin-point, we loose the index or have to recalculate it)
// So we mimic it here
- template <typename Range, typename Section, typename Box>
+ template <typename Range, typename Section, typename Box, typename RobustPolicy>
static inline void get_start_point_iterator(Section & section,
Range const& range,
typename boost::range_iterator<Range const>::type& it,
typename boost::range_iterator<Range const>::type& prev,
typename boost::range_iterator<Range const>::type& end,
int& index, int& ndi,
- int dir, Box const& other_bounding_box)
+ int dir, Box const& other_bounding_box, RobustPolicy const& robust_policy)
{
it = boost::begin(range) + section.begin_index;
end = boost::begin(range) + section.end_index + 1;
@@ -349,7 +388,7 @@ private :
// Mimic section-iterator:
// Skip to point such that section interects other box
prev = it++;
- for(; it != end && preceding<0>(dir, *it, other_bounding_box);
+ for(; it != end && preceding<0>(dir, *it, other_bounding_box, robust_policy);
prev = it++, index++, ndi++)
{}
// Go back one step because we want to start completely preceding
@@ -381,6 +420,7 @@ template
bool Reverse1, bool Reverse2,
typename Turns,
typename TurnPolicy,
+ typename RobustPolicy,
typename InterruptPolicy
>
struct section_visitor
@@ -389,14 +429,17 @@ struct section_visitor
Geometry1 const& m_geometry1;
int m_source_id2;
Geometry2 const& m_geometry2;
+ RobustPolicy const& m_rescale_policy;
Turns& m_turns;
InterruptPolicy& m_interrupt_policy;
section_visitor(int id1, Geometry1 const& g1,
int id2, Geometry2 const& g2,
+ RobustPolicy const& robust_policy,
Turns& turns, InterruptPolicy& ip)
: m_source_id1(id1), m_geometry1(g1)
, m_source_id2(id2), m_geometry2(g2)
+ , m_rescale_policy(robust_policy)
, m_turns(turns)
, m_interrupt_policy(ip)
{}
@@ -412,13 +455,12 @@ struct section_visitor
Geometry2,
Reverse1, Reverse2,
Section, Section,
- Turns,
- TurnPolicy,
- InterruptPolicy
+ TurnPolicy
>::apply(
m_source_id1, m_geometry1, sec1,
m_source_id2, m_geometry2, sec2,
false,
+ m_rescale_policy,
m_turns, m_interrupt_policy);
}
return true;
@@ -430,37 +472,45 @@ template
<
typename Geometry1, typename Geometry2,
bool Reverse1, bool Reverse2,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
class get_turns_generic
{
public:
+ template <typename RobustPolicy, typename Turns, typename InterruptPolicy>
static inline void apply(
int source_id1, Geometry1 const& geometry1,
int source_id2, Geometry2 const& geometry2,
- Turns& turns, InterruptPolicy& interrupt_policy)
+ RobustPolicy const& robust_policy,
+ Turns& turns,
+ InterruptPolicy& interrupt_policy)
{
// First create monotonic sections...
typedef typename boost::range_value<Turns>::type ip_type;
typedef typename ip_type::point_type point_type;
- typedef model::box<point_type> box_type;
+
+ typedef model::box
+ <
+ typename geometry::robust_point_type
+ <
+ point_type, RobustPolicy
+ >::type
+ > box_type;
typedef typename geometry::sections<box_type, 2> sections_type;
sections_type sec1, sec2;
- geometry::sectionalize<Reverse1>(geometry1, sec1, 0);
- geometry::sectionalize<Reverse2>(geometry2, sec2, 1);
+ geometry::sectionalize<Reverse1>(geometry1, robust_policy, true, sec1, 0);
+ geometry::sectionalize<Reverse2>(geometry2, robust_policy, true, sec2, 1);
// ... and then partition them, intersecting overlapping sections in visitor method
section_visitor
<
Geometry1, Geometry2,
Reverse1, Reverse2,
- Turns, TurnPolicy, InterruptPolicy
- > visitor(source_id1, geometry1, source_id2, geometry2, turns, interrupt_policy);
+ Turns, TurnPolicy, RobustPolicy, InterruptPolicy
+ > visitor(source_id1, geometry1, source_id2, geometry2, robust_policy, turns, interrupt_policy);
geometry::partition
<
@@ -475,13 +525,10 @@ template
<
typename Range, typename Box,
bool ReverseRange, bool ReverseBox,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct get_turns_cs
{
- typedef typename boost::range_value<Turns>::type turn_info;
typedef typename geometry::point_type<Range>::type point_type;
typedef typename geometry::point_type<Box>::type box_point_type;
@@ -503,14 +550,16 @@ struct get_turns_cs
>::type iterator_type;
+ template <typename RobustPolicy, typename Turns, typename InterruptPolicy>
static inline void apply(
int source_id1, Range const& range,
int source_id2, Box const& box,
+ RobustPolicy const& robust_policy,
Turns& turns,
InterruptPolicy& interrupt_policy,
int multi_index = -1, int ring_index = -1)
{
- if (boost::size(range) <= 1)
+ if ( boost::size(range) <= 1)
{
return;
}
@@ -521,6 +570,8 @@ struct get_turns_cs
cview_type cview(range);
view_type view(cview);
+ typename boost::range_size<view_type>::type segments_count1 = boost::size(view) - 1;
+
iterator_type it = boost::begin(view);
ever_circling_iterator<iterator_type> next(
@@ -569,9 +620,13 @@ struct get_turns_cs
get_turns_with_box(seg_id, source_id2,
*prev, *it, *next,
bp[0], bp[1], bp[2], bp[3],
+ // NOTE: some dummy values could be passed below since this would be called only for Polygons and Boxes
+ index == 0,
+ unsigned(index) == segments_count1,
+ robust_policy,
turns, interrupt_policy);
- // Future performance enhancement:
- // return if told by the interrupt policy
+ // Future performance enhancement:
+ // return if told by the interrupt policy
}
}
}
@@ -597,6 +652,7 @@ private:
else return 0;
}
+ template <typename RobustPolicy, typename Turns, typename InterruptPolicy>
static inline void get_turns_with_box(segment_identifier const& seg_id, int source_id2,
// Points from a range:
point_type const& rp0,
@@ -607,6 +663,9 @@ private:
box_point_type const& bp1,
box_point_type const& bp2,
box_point_type const& bp3,
+ bool const is_range_first,
+ bool const is_range_last,
+ RobustPolicy const& robust_policy,
// Output
Turns& turns,
InterruptPolicy& interrupt_policy)
@@ -624,19 +683,27 @@ private:
ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 0);
TurnPolicy::apply(rp0, rp1, rp2, bp0, bp1, bp2,
- ti, std::back_inserter(turns));
+ is_range_first, is_range_last,
+ true, false,
+ ti, robust_policy, std::back_inserter(turns));
ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 1);
TurnPolicy::apply(rp0, rp1, rp2, bp1, bp2, bp3,
- ti, std::back_inserter(turns));
+ is_range_first, is_range_last,
+ false, false,
+ ti, robust_policy, std::back_inserter(turns));
ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 2);
TurnPolicy::apply(rp0, rp1, rp2, bp2, bp3, bp0,
- ti, std::back_inserter(turns));
+ is_range_first, is_range_last,
+ false, false,
+ ti, robust_policy, std::back_inserter(turns));
ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 3);
TurnPolicy::apply(rp0, rp1, rp2, bp3, bp0, bp1,
- ti, std::back_inserter(turns));
+ is_range_first, is_range_last,
+ false, true,
+ ti, robust_policy, std::back_inserter(turns));
if (InterruptPolicy::enabled)
{
@@ -652,15 +719,15 @@ template
<
typename Polygon, typename Box,
bool Reverse, bool ReverseBox,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct get_turns_polygon_cs
{
+ template <typename RobustPolicy, typename Turns, typename InterruptPolicy>
static inline void apply(
int source_id1, Polygon const& polygon,
int source_id2, Box const& box,
+ RobustPolicy const& robust_policy,
Turns& turns, InterruptPolicy& interrupt_policy,
int multi_index = -1)
{
@@ -670,32 +737,118 @@ struct get_turns_polygon_cs
<
ring_type, Box,
Reverse, ReverseBox,
- Turns,
- TurnPolicy,
- InterruptPolicy
+ TurnPolicy
> intersector_type;
intersector_type::apply(
source_id1, geometry::exterior_ring(polygon),
- source_id2, box, turns, interrupt_policy,
+ source_id2, box,
+ robust_policy,
+ turns, interrupt_policy,
multi_index, -1);
int i = 0;
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(polygon);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings);
- ++it, ++i)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(polygon);
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it, ++i)
{
intersector_type::apply(
source_id1, *it,
- source_id2, box, turns, interrupt_policy,
+ source_id2, box,
+ robust_policy,
+ turns, interrupt_policy,
multi_index, i);
}
}
};
+
+template
+<
+ typename Multi, typename Box,
+ bool Reverse, bool ReverseBox,
+ typename TurnPolicy
+>
+struct get_turns_multi_polygon_cs
+{
+ template <typename RobustPolicy, typename Turns, typename InterruptPolicy>
+ static inline void apply(
+ int source_id1, Multi const& multi,
+ int source_id2, Box const& box,
+ RobustPolicy const& robust_policy,
+ Turns& turns, InterruptPolicy& interrupt_policy)
+ {
+ typedef typename boost::range_iterator
+ <
+ Multi const
+ >::type iterator_type;
+
+ int i = 0;
+ for (iterator_type it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it, ++i)
+ {
+ // Call its single version
+ get_turns_polygon_cs
+ <
+ typename boost::range_value<Multi>::type, Box,
+ Reverse, ReverseBox,
+ TurnPolicy
+ >::apply(source_id1, *it, source_id2, box,
+ robust_policy, turns, interrupt_policy, i);
+ }
+ }
+};
+
+
+// GET_TURN_INFO_TYPE
+
+template <typename Geometry>
+struct topological_tag_base
+{
+ typedef typename tag_cast<typename tag<Geometry>::type, pointlike_tag, linear_tag, areal_tag>::type type;
+};
+
+template <typename Geometry1, typename Geometry2, typename AssignPolicy,
+ typename Tag1 = typename tag<Geometry1>::type, typename Tag2 = typename tag<Geometry2>::type,
+ typename TagBase1 = typename topological_tag_base<Geometry1>::type, typename TagBase2 = typename topological_tag_base<Geometry2>::type>
+struct get_turn_info_type
+ : overlay::get_turn_info<AssignPolicy>
+{};
+
+template <typename Geometry1, typename Geometry2, typename AssignPolicy, typename Tag1, typename Tag2>
+struct get_turn_info_type<Geometry1, Geometry2, AssignPolicy, Tag1, Tag2, linear_tag, linear_tag>
+ : overlay::get_turn_info_linear_linear<AssignPolicy>
+{};
+
+template <typename Geometry1, typename Geometry2, typename AssignPolicy, typename Tag1, typename Tag2>
+struct get_turn_info_type<Geometry1, Geometry2, AssignPolicy, Tag1, Tag2, linear_tag, areal_tag>
+ : overlay::get_turn_info_linear_areal<AssignPolicy>
+{};
+
+template <typename Geometry1, typename Geometry2, typename SegmentRatio,
+ typename Tag1 = typename tag<Geometry1>::type, typename Tag2 = typename tag<Geometry2>::type,
+ typename TagBase1 = typename topological_tag_base<Geometry1>::type, typename TagBase2 = typename topological_tag_base<Geometry2>::type>
+struct turn_operation_type
+{
+ typedef overlay::turn_operation<SegmentRatio> type;
+};
+
+template <typename Geometry1, typename Geometry2, typename SegmentRatio, typename Tag1, typename Tag2>
+struct turn_operation_type<Geometry1, Geometry2, SegmentRatio, Tag1, Tag2, linear_tag, linear_tag>
+{
+ typedef overlay::turn_operation_linear<SegmentRatio> type;
+};
+
+template <typename Geometry1, typename Geometry2, typename SegmentRatio, typename Tag1, typename Tag2>
+struct turn_operation_type<Geometry1, Geometry2, SegmentRatio, Tag1, Tag2, linear_tag, areal_tag>
+{
+ typedef overlay::turn_operation_linear<SegmentRatio> type;
+};
+
}} // namespace detail::get_turns
#endif // DOXYGEN_NO_DETAIL
@@ -711,18 +864,14 @@ template
typename GeometryTag1, typename GeometryTag2,
typename Geometry1, typename Geometry2,
bool Reverse1, bool Reverse2,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct get_turns
: detail::get_turns::get_turns_generic
<
Geometry1, Geometry2,
Reverse1, Reverse2,
- Turns,
- TurnPolicy,
- InterruptPolicy
+ TurnPolicy
>
{};
@@ -731,23 +880,19 @@ template
<
typename Polygon, typename Box,
bool ReversePolygon, bool ReverseBox,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct get_turns
<
polygon_tag, box_tag,
Polygon, Box,
ReversePolygon, ReverseBox,
- Turns,
- TurnPolicy,
- InterruptPolicy
+ TurnPolicy
> : detail::get_turns::get_turns_polygon_cs
<
Polygon, Box,
ReversePolygon, ReverseBox,
- Turns, TurnPolicy, InterruptPolicy
+ TurnPolicy
>
{};
@@ -756,22 +901,18 @@ template
<
typename Ring, typename Box,
bool ReverseRing, bool ReverseBox,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct get_turns
<
ring_tag, box_tag,
Ring, Box,
ReverseRing, ReverseBox,
- Turns,
- TurnPolicy,
- InterruptPolicy
+ TurnPolicy
> : detail::get_turns::get_turns_cs
<
Ring, Box, ReverseRing, ReverseBox,
- Turns, TurnPolicy, InterruptPolicy
+ TurnPolicy
>
{};
@@ -779,28 +920,52 @@ struct get_turns
template
<
+ typename MultiPolygon,
+ typename Box,
+ bool ReverseMultiPolygon, bool ReverseBox,
+ typename TurnPolicy
+>
+struct get_turns
+ <
+ multi_polygon_tag, box_tag,
+ MultiPolygon, Box,
+ ReverseMultiPolygon, ReverseBox,
+ TurnPolicy
+ >
+ : detail::get_turns::get_turns_multi_polygon_cs
+ <
+ MultiPolygon, Box,
+ ReverseMultiPolygon, ReverseBox,
+ TurnPolicy
+ >
+{};
+
+
+template
+<
typename GeometryTag1, typename GeometryTag2,
typename Geometry1, typename Geometry2,
bool Reverse1, bool Reverse2,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct get_turns_reversed
{
+ template <typename RobustPolicy, typename Turns, typename InterruptPolicy>
static inline void apply(
int source_id1, Geometry1 const& g1,
int source_id2, Geometry2 const& g2,
- Turns& turns, InterruptPolicy& interrupt_policy)
+ RobustPolicy const& robust_policy,
+ Turns& turns,
+ InterruptPolicy& interrupt_policy)
{
get_turns
<
GeometryTag2, GeometryTag1,
Geometry2, Geometry1,
Reverse2, Reverse1,
- Turns, TurnPolicy,
- InterruptPolicy
- >::apply(source_id2, g2, source_id1, g1, turns, interrupt_policy);
+ TurnPolicy
+ >::apply(source_id2, g2, source_id1, g1, robust_policy,
+ turns, interrupt_policy);
}
};
@@ -818,6 +983,7 @@ struct get_turns_reversed
\tparam Turns type of turn-container (e.g. vector of "intersection/turn point"'s)
\param geometry1 \param_geometry
\param geometry2 \param_geometry
+\param robust_policy policy to handle robustness issues
\param turns container which will contain turn points
\param interrupt_policy policy determining if process is stopped
when intersection is found
@@ -828,31 +994,20 @@ template
typename AssignPolicy,
typename Geometry1,
typename Geometry2,
+ typename RobustPolicy,
typename Turns,
typename InterruptPolicy
>
inline void get_turns(Geometry1 const& geometry1,
Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
Turns& turns,
InterruptPolicy& interrupt_policy)
{
concept::check_concepts_and_equal_dimensions<Geometry1 const, Geometry2 const>();
- typedef typename strategy_intersection
- <
- typename cs_tag<Geometry1>::type,
- Geometry1,
- Geometry2,
- typename boost::range_value<Turns>::type
- >::segment_intersection_strategy_type segment_intersection_strategy_type;
-
- typedef detail::overlay::get_turn_info
- <
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type,
- typename boost::range_value<Turns>::type,
- AssignPolicy
- > TurnPolicy;
+ typedef detail::overlay::get_turn_info<AssignPolicy> TurnPolicy;
+ //typedef detail::get_turns::get_turn_info_type<Geometry1, Geometry2, AssignPolicy> TurnPolicy;
boost::mpl::if_c
<
@@ -863,8 +1018,7 @@ inline void get_turns(Geometry1 const& geometry1,
typename tag<Geometry2>::type,
Geometry1, Geometry2,
Reverse1, Reverse2,
- Turns, TurnPolicy,
- InterruptPolicy
+ TurnPolicy
>,
dispatch::get_turns
<
@@ -872,17 +1026,17 @@ inline void get_turns(Geometry1 const& geometry1,
typename tag<Geometry2>::type,
Geometry1, Geometry2,
Reverse1, Reverse2,
- Turns, TurnPolicy,
- InterruptPolicy
+ TurnPolicy
>
>::type::apply(
0, geometry1,
1, geometry2,
+ robust_policy,
turns, interrupt_policy);
}
#if defined(_MSC_VER)
-#pragma warning(pop)
+#pragma warning(pop)
#endif
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp
index 84ec16f238..9bb8284985 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp
@@ -14,7 +14,17 @@
#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/recalculate.hpp>
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
+#include <boost/geometry/policies/robustness/robust_type.hpp>
+
+#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES)
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+#endif
+
+#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/segment.hpp>
@@ -31,6 +41,7 @@ template
typename TurnPoints,
typename Indexed,
typename Geometry1, typename Geometry2,
+ typename RobustPolicy,
bool Reverse1, bool Reverse2,
typename Strategy
>
@@ -39,10 +50,12 @@ struct sort_in_cluster
inline sort_in_cluster(TurnPoints const& turn_points
, Geometry1 const& geometry1
, Geometry2 const& geometry2
+ , RobustPolicy const& robust_policy
, Strategy const& strategy)
: m_turn_points(turn_points)
, m_geometry1(geometry1)
, m_geometry2(geometry2)
+ , m_rescale_policy(robust_policy)
, m_strategy(strategy)
{}
@@ -51,49 +64,101 @@ private :
TurnPoints const& m_turn_points;
Geometry1 const& m_geometry1;
Geometry2 const& m_geometry2;
+ RobustPolicy const& m_rescale_policy;
Strategy const& m_strategy;
typedef typename Indexed::type turn_operation_type;
typedef typename geometry::point_type<Geometry1>::type point_type;
- typedef model::referring_segment<point_type const> segment_type;
+
+ typedef typename geometry::robust_point_type
+ <
+ point_type,
+ RobustPolicy
+ >::type robust_point_type;
+
+ // TODO: this function is shared with enrich_intersection_points
+ // Still called by #case_102_multi, #case_107_multi
+ // #case_recursive_boxes_3
+ inline void get_situation_map(Indexed const& left, Indexed const& right,
+ robust_point_type& pi_rob, robust_point_type& pj_rob,
+ robust_point_type& ri_rob, robust_point_type& rj_rob,
+ robust_point_type& si_rob, robust_point_type& sj_rob) const
+ {
+ point_type pi, pj, ri, rj, si, sj;
+
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
+ left.subject.seg_id,
+ pi, pj);
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
+ left.subject.other_id,
+ ri, rj);
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
+ right.subject.other_id,
+ si, sj);
+
+ geometry::recalculate(pi_rob, pi, m_rescale_policy);
+ geometry::recalculate(pj_rob, pj, m_rescale_policy);
+ geometry::recalculate(ri_rob, ri, m_rescale_policy);
+ geometry::recalculate(rj_rob, rj, m_rescale_policy);
+ geometry::recalculate(si_rob, si, m_rescale_policy);
+ geometry::recalculate(sj_rob, sj, m_rescale_policy);
+ }
+
+#if BOOST_GEOMETRY_HANDLE_TANGENCIES_WITH_OVERLAP_INFO
+ // This method was still called but did no effect whatsoever on the results,
+ // with or without robustness-rescaling.
+ // Probable cause: we rescale in this file ourselves, ignoring passed policy
+ // TODO: check this more.
+ // Besides this, it currently does not compile for yet unknown reasons
+ // (does not find specialization for segment_ratio_type)
+ // It is currently only called from the Unit Test "multi_intersection.cpp"
// Determine how p/r and p/s are located.
- template <typename P>
- static inline void overlap_info(P const& pi, P const& pj,
- P const& ri, P const& rj,
- P const& si, P const& sj,
- bool& pr_overlap, bool& ps_overlap, bool& rs_overlap)
+ inline void overlap_info(
+ robust_point_type const& pi, robust_point_type const& pj,
+ robust_point_type const& ri, robust_point_type const& rj,
+ robust_point_type const& si, robust_point_type const& sj,
+ bool& pr_overlap, bool& ps_overlap, bool& rs_overlap) const
{
// Determine how p/r and p/s are located.
// One of them is coming from opposite direction.
+ typedef segment_intersection_points
+ <
+ point_type,
+ typename segment_ratio_type
+ <
+ point_type, RobustPolicy
+ >::type
+ > intersection_return_type;
+
typedef strategy::intersection::relate_cartesian_segments
<
policies::relate::segments_intersection_points
<
- segment_type,
- segment_type,
- segment_intersection_points<point_type>
+ intersection_return_type
>
> policy;
+ typedef model::referring_segment<robust_point_type const> segment_type;
segment_type p(pi, pj);
segment_type r(ri, rj);
segment_type s(si, sj);
// Get the intersection point (or two points)
- segment_intersection_points<point_type> pr = policy::apply(p, r);
- segment_intersection_points<point_type> ps = policy::apply(p, s);
- segment_intersection_points<point_type> rs = policy::apply(r, s);
+ intersection_return_type pr = policy::apply(p, r, m_rescale_policy, pi, pj, ri, rj);
+ intersection_return_type ps = policy::apply(p, s, m_rescale_policy, pi, pj, si, sj);
+ intersection_return_type rs = policy::apply(r, s, m_rescale_policy, ri, rj, si, sj);
// Check on overlap
pr_overlap = pr.count == 2;
ps_overlap = ps.count == 2;
rs_overlap = rs.count == 2;
}
+#endif
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+#ifdef BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES
inline void debug_consider(int order, Indexed const& left,
Indexed const& right, std::string const& header,
bool skip = true,
@@ -102,19 +167,15 @@ private :
{
if (skip) return;
- point_type pi, pj, ri, rj, si, sj;
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- left.subject.seg_id,
- pi, pj);
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- left.subject.other_id,
- ri, rj);
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- right.subject.other_id,
- si, sj);
+ std::cout << "Case: " << header << " for " << left.index << " / " << right.index << std::endl;
+
+ robust_point_type pi, pj, ri, rj, si, sj;
+ get_situation_map(left, right, pi, pj, ri, rj, si, sj);
+#if BOOST_GEOMETRY_HANDLE_TANGENCIES_WITH_OVERLAP_INFO
bool prc = false, psc = false, rsc = false;
overlap_info(pi, pj, ri, rj, si, sj, prc, psc, rsc);
+#endif
int const side_ri_p = m_strategy.apply(pi, pj, ri);
int const side_rj_p = m_strategy.apply(pi, pj, rj);
@@ -123,8 +184,7 @@ private :
int const side_si_r = m_strategy.apply(ri, rj, si);
int const side_sj_r = m_strategy.apply(ri, rj, sj);
- std::cout << "Case: " << header << " for " << left.index << " / " << right.index << std::endl;
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH_MORE
+#ifdef BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES_MORE
std::cout << " Segment p:" << geometry::wkt(pi) << " .. " << geometry::wkt(pj) << std::endl;
std::cout << " Segment r:" << geometry::wkt(ri) << " .. " << geometry::wkt(rj) << std::endl;
std::cout << " Segment s:" << geometry::wkt(si) << " .. " << geometry::wkt(sj) << std::endl;
@@ -141,7 +201,9 @@ private :
<< " ri//p: " << side_ri_p
<< " si//p: " << side_si_p
<< " si//r: " << side_si_r
+#if BOOST_GEOMETRY_HANDLE_TANGENCIES_WITH_OVERLAP_INFO
<< " cnts: " << int(prc) << "," << int(psc) << "," << int(rsc)
+#endif
//<< " idx: " << left.index << "/" << right.index
;
@@ -183,7 +245,7 @@ private :
}
else
{
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES)
std::cout << "ux/ux unhandled" << std::endl;
#endif
}
@@ -226,7 +288,7 @@ private :
}
else
{
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES)
// this still happens in the traverse.cpp test
std::cout << " iu/ux unhandled" << std::endl;
#endif
@@ -270,7 +332,7 @@ private :
// Default case, should not occur
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES)
std::cout << "ix/ix unhandled" << std::endl;
#endif
//debug_consider(0, left, right, header, false, "-> return", ret);
@@ -280,7 +342,7 @@ private :
inline bool consider_iu_iu(Indexed const& left, Indexed const& right,
- std::string const& header) const
+ std::string const& header, bool redo = false) const
{
//debug_consider(0, left, right, header);
@@ -298,16 +360,8 @@ private :
return true;
}
- point_type pi, pj, ri, rj, si, sj;
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- left.subject.seg_id,
- pi, pj);
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- left.subject.other_id,
- ri, rj);
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- right.subject.other_id,
- si, sj);
+ robust_point_type pi, pj, ri, rj, si, sj;
+ get_situation_map(left, right, pi, pj, ri, rj, si, sj);
int const side_ri_p = m_strategy.apply(pi, pj, ri);
int const side_si_p = m_strategy.apply(pi, pj, si);
@@ -337,14 +391,18 @@ private :
debug_consider(0, left, right, header, false, "opp.", ret);
return ret;
}
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES)
std::cout << " iu/iu coming from opposite unhandled" << std::endl;
#endif
}
+#if BOOST_GEOMETRY_HANDLE_TANGENCIES_WITH_OVERLAP_INFO
// We need EXTRA information here: are p/r/s overlapping?
bool pr_ov = false, ps_ov = false, rs_ov = false;
overlap_info(pi, pj, ri, rj, si, sj, pr_ov, ps_ov, rs_ov);
+#else
+ // std::cout << "Boost.Geometry: skipping overlap_info" << std::endl;
+#endif
// One coming from right (#83,#90)
// One coming from left (#90, #94, #95)
@@ -352,12 +410,14 @@ private :
{
bool ret = false;
+#if BOOST_GEOMETRY_HANDLE_TANGENCIES_WITH_OVERLAP_INFO
if (pr_ov || ps_ov)
{
int r = side_ri_p != 0 ? side_ri_p : side_si_p;
ret = r * side_si_r == 1;
}
else
+#endif
{
ret = side_si_r == 1;
}
@@ -374,6 +434,7 @@ private :
// Take the one NOT overlapping
bool ret = false;
bool found = false;
+#if BOOST_GEOMETRY_HANDLE_TANGENCIES_WITH_OVERLAP_INFO
if (pr_ov && ! ps_ov)
{
ret = true;
@@ -384,6 +445,7 @@ private :
ret = false;
found = true;
}
+#endif
debug_consider(0, left, right, header, false, "aligned", ret);
if (found)
@@ -392,10 +454,17 @@ private :
}
}
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES)
std::cout << " iu/iu unhandled" << std::endl;
debug_consider(0, left, right, header, false, "unhandled", left.index < right.index);
#endif
+ if (! redo)
+ {
+ // In some cases behaviour is not symmetrical. TODO: fix this properly
+ // OR: alternatively we might consider calling all these functions one-way anyway
+ return ! consider_iu_iu(right, left, header, true);
+ }
+
return left.index < right.index;
}
@@ -404,16 +473,8 @@ private :
{
debug_consider(0, left, right, header);
- point_type pi, pj, ri, rj, si, sj;
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- left.subject.seg_id,
- pi, pj);
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- left.subject.other_id,
- ri, rj);
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- right.subject.other_id,
- si, sj);
+ robust_point_type pi, pj, ri, rj, si, sj;
+ get_situation_map(left, right, pi, pj, ri, rj, si, sj);
int const side_ri_p = m_strategy.apply(pi, pj, ri);
int const side_si_p = m_strategy.apply(pi, pj, si);
@@ -518,7 +579,7 @@ public :
// Now we have no clue how to sort.
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES)
std::cout << " Consider: " << operation_char(m_turn_points[left.index].operations[0].operation)
<< operation_char(m_turn_points[left.index].operations[1].operation)
<< "/" << operation_char(m_turn_points[right.index].operations[0].operation)
@@ -633,12 +694,14 @@ template
typename TurnPoints,
typename Geometry1,
typename Geometry2,
+ typename RobustPolicy,
typename Strategy
>
inline void handle_cluster(Iterator begin_cluster, Iterator end_cluster,
TurnPoints& turn_points,
operation_type for_operation,
Geometry1 const& geometry1, Geometry2 const& geometry2,
+ RobustPolicy& robust_policy,
Strategy const& strategy)
{
// First inspect and (possibly) discard rows
@@ -653,17 +716,17 @@ inline void handle_cluster(Iterator begin_cluster, Iterator end_cluster,
TurnPoints,
IndexType,
Geometry1, Geometry2,
+ RobustPolicy,
Reverse1, Reverse2,
Strategy
- >(turn_points, geometry1, geometry2, strategy));
-
+ >(turn_points, geometry1, geometry2, robust_policy, strategy));
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_TANGENCIES)
typedef typename IndexType::type operations_type;
operations_type const& op = turn_points[begin_cluster->index].operations[begin_cluster->operation_index];
- std::cout << "Clustered points on equal distance " << op.enriched.distance << std::endl;
- std::cout << "->Indexes ";
+ std::cout << std::endl << "Clustered points on equal distance " << op.fraction << std::endl;
+ std::cout << "->Indexes ";
for (Iterator it = begin_cluster; it != end_cluster; ++it)
{
std::cout << " " << it->index;
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp
new file mode 100644
index 0000000000..dd041b0d7d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp
@@ -0,0 +1,84 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_BOX_BOX_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_BOX_BOX_HPP
+
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace intersection
+{
+
+template <std::size_t Dimension, std::size_t DimensionCount>
+struct intersection_box_box
+{
+ template
+ <
+ typename Box1, typename Box2,
+ typename RobustPolicy,
+ typename BoxOut,
+ typename Strategy
+ >
+ static inline bool apply(Box1 const& box1,
+ Box2 const& box2,
+ RobustPolicy const& robust_policy,
+ BoxOut& box_out,
+ Strategy const& strategy)
+ {
+ typedef typename coordinate_type<BoxOut>::type ct;
+
+ ct min1 = get<min_corner, Dimension>(box1);
+ ct min2 = get<min_corner, Dimension>(box2);
+ ct max1 = get<max_corner, Dimension>(box1);
+ ct max2 = get<max_corner, Dimension>(box2);
+
+ if (max1 < min2 || max2 < min1)
+ {
+ return false;
+ }
+ // Set dimensions of output coordinate
+ set<min_corner, Dimension>(box_out, min1 < min2 ? min2 : min1);
+ set<max_corner, Dimension>(box_out, max1 > max2 ? max2 : max1);
+
+ return intersection_box_box<Dimension + 1, DimensionCount>
+ ::apply(box1, box2, robust_policy, box_out, strategy);
+ }
+};
+
+template <std::size_t DimensionCount>
+struct intersection_box_box<DimensionCount, DimensionCount>
+{
+ template
+ <
+ typename Box1, typename Box2,
+ typename RobustPolicy,
+ typename BoxOut,
+ typename Strategy
+ >
+ static inline bool apply(Box1 const&, Box2 const&,
+ RobustPolicy const&, BoxOut&, Strategy const&)
+ {
+ return true;
+ }
+};
+
+
+}} // namespace detail::intersection
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_BOX_BOX_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp
index f0307eaf83..a13a627456 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp
@@ -1,6 +1,11 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -28,8 +33,17 @@
#include <boost/geometry/algorithms/detail/overlay/overlay.hpp>
#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
#include <boost/geometry/algorithms/detail/overlay/follow.hpp>
+
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
+#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
+
#include <boost/geometry/views/segment_view.hpp>
+#include <boost/geometry/algorithms/detail/overlay/linear_linear.hpp>
+#include <boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp>
+
+
#if defined(BOOST_GEOMETRY_DEBUG_FOLLOW)
#include <boost/foreach.hpp>
#endif
@@ -47,25 +61,58 @@ struct intersection_segment_segment_point
template
<
typename Segment1, typename Segment2,
+ typename RobustPolicy,
typename OutputIterator, typename Strategy
>
static inline OutputIterator apply(Segment1 const& segment1,
- Segment2 const& segment2, OutputIterator out,
+ Segment2 const& segment2,
+ RobustPolicy const& robust_policy,
+ OutputIterator out,
Strategy const& )
{
typedef typename point_type<PointOut>::type point_type;
+ typedef typename geometry::robust_point_type
+ <
+ typename geometry::point_type<Segment1>::type,
+ RobustPolicy
+ >::type robust_point_type;
+
+ // TODO: rescale segment -> robust points
+ robust_point_type pi_rob, pj_rob, qi_rob, qj_rob;
+ {
+ // Workaround:
+ point_type pi, pj, qi, qj;
+ assign_point_from_index<0>(segment1, pi);
+ assign_point_from_index<1>(segment1, pj);
+ assign_point_from_index<0>(segment2, qi);
+ assign_point_from_index<1>(segment2, qj);
+ geometry::recalculate(pi_rob, pi, robust_policy);
+ geometry::recalculate(pj_rob, pj, robust_policy);
+ geometry::recalculate(qi_rob, qi, robust_policy);
+ geometry::recalculate(qj_rob, qj, robust_policy);
+ }
+
// Get the intersection point (or two points)
- segment_intersection_points<point_type> is
- = strategy::intersection::relate_cartesian_segments
+ typedef segment_intersection_points
+ <
+ point_type,
+ typename segment_ratio_type
+ <
+ point_type, RobustPolicy
+ >::type
+ > intersection_return_type;
+
+ typedef strategy::intersection::relate_cartesian_segments
<
policies::relate::segments_intersection_points
<
- Segment1,
- Segment2,
- segment_intersection_points<point_type>
+ intersection_return_type
>
- >::apply(segment1, segment2);
+ > policy;
+
+ intersection_return_type is = policy::apply(segment1, segment2,
+ robust_policy, pi_rob, pj_rob, qi_rob, qj_rob);
for (std::size_t i = 0; i < is.count; i++)
{
@@ -83,18 +130,25 @@ struct intersection_linestring_linestring_point
template
<
typename Linestring1, typename Linestring2,
+ typename RobustPolicy,
typename OutputIterator, typename Strategy
>
static inline OutputIterator apply(Linestring1 const& linestring1,
- Linestring2 const& linestring2, OutputIterator out,
+ Linestring2 const& linestring2,
+ RobustPolicy const& robust_policy,
+ OutputIterator out,
Strategy const& )
{
typedef typename point_type<PointOut>::type point_type;
- typedef detail::overlay::turn_info<point_type> turn_info;
+ typedef detail::overlay::turn_info
+ <
+ point_type,
+ typename segment_ratio_type<point_type, RobustPolicy>::type
+ > turn_info;
std::deque<turn_info> turns;
- geometry::get_intersection_points(linestring1, linestring2, turns);
+ geometry::get_intersection_points(linestring1, linestring2, robust_policy, turns);
for (typename boost::range_iterator<std::deque<turn_info> const>::type
it = boost::begin(turns); it != boost::end(turns); ++it)
@@ -120,7 +174,7 @@ struct intersection_of_linestring_with_areal
{
#if defined(BOOST_GEOMETRY_DEBUG_FOLLOW)
template <typename Turn, typename Operation>
- static inline void debug_follow(Turn const& turn, Operation op,
+ static inline void debug_follow(Turn const& turn, Operation op,
int index)
{
std::cout << index
@@ -138,9 +192,11 @@ struct intersection_of_linestring_with_areal
template
<
typename LineString, typename Areal,
+ typename RobustPolicy,
typename OutputIterator, typename Strategy
>
static inline OutputIterator apply(LineString const& linestring, Areal const& areal,
+ RobustPolicy const& robust_policy,
OutputIterator out,
Strategy const& )
{
@@ -158,8 +214,11 @@ struct intersection_of_linestring_with_areal
> follower;
typedef typename point_type<LineStringOut>::type point_type;
-
- typedef detail::overlay::traversal_turn_info<point_type> turn_info;
+ typedef detail::overlay::traversal_turn_info
+ <
+ point_type,
+ typename geometry::segment_ratio_type<point_type, RobustPolicy>::type
+ > turn_info;
std::deque<turn_info> turns;
detail::get_turns::no_interrupt_policy policy;
@@ -167,12 +226,12 @@ struct intersection_of_linestring_with_areal
<
false,
(OverlayType == overlay_intersection ? ReverseAreal : !ReverseAreal),
- detail::overlay::calculate_distance_policy
- >(linestring, areal, turns, policy);
+ detail::overlay::assign_null_policy
+ >(linestring, areal, robust_policy, turns, policy);
if (turns.empty())
{
- // No intersection points, it is either completely
+ // No intersection points, it is either completely
// inside (interior + borders)
// or completely outside
@@ -184,8 +243,7 @@ struct intersection_of_linestring_with_areal
return out;
}
-
- if (follower::included(border_point, areal))
+ if (follower::included(border_point, areal, robust_policy))
{
LineStringOut copy;
geometry::convert(linestring, copy);
@@ -206,7 +264,7 @@ struct intersection_of_linestring_with_areal
(
linestring, areal,
geometry::detail::overlay::operation_intersection,
- turns, out
+ turns, robust_policy, out
);
}
};
@@ -335,22 +393,23 @@ template
<
typename Linestring, typename Box,
typename GeometryOut,
- overlay_type OverlayType,
bool Reverse1, bool Reverse2, bool ReverseOut
>
struct intersection_insert
<
Linestring, Box,
GeometryOut,
- OverlayType,
+ overlay_intersection,
Reverse1, Reverse2, ReverseOut,
linestring_tag, box_tag, linestring_tag,
false, true, false
>
{
- template <typename OutputIterator, typename Strategy>
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
static inline OutputIterator apply(Linestring const& linestring,
- Box const& box, OutputIterator out, Strategy const& )
+ Box const& box,
+ RobustPolicy const& ,
+ OutputIterator out, Strategy const& )
{
typedef typename point_type<GeometryOut>::type point_type;
strategy::intersection::liang_barsky<Box, point_type> lb_strategy;
@@ -424,9 +483,11 @@ struct intersection_insert
false, true, false
>
{
- template <typename OutputIterator, typename Strategy>
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
static inline OutputIterator apply(Segment const& segment,
- Box const& box, OutputIterator out, Strategy const& )
+ Box const& box,
+ RobustPolicy const& ,// TODO: propagate to clip_range_with_box
+ OutputIterator out, Strategy const& )
{
geometry::segment_view<Segment> range(segment);
@@ -456,19 +517,25 @@ struct intersection_insert
Areal1, Areal2, false
>
{
- template <typename OutputIterator, typename Strategy>
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
static inline OutputIterator apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2, OutputIterator out, Strategy const& )
+ Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
+ OutputIterator out, Strategy const& )
{
- typedef detail::overlay::turn_info<PointOut> turn_info;
+ typedef detail::overlay::turn_info
+ <
+ PointOut,
+ typename segment_ratio_type<PointOut, RobustPolicy>::type
+ > turn_info;
std::vector<turn_info> turns;
detail::get_turns::no_interrupt_policy policy;
geometry::get_turns
<
false, false, detail::overlay::assign_null_policy
- >(geometry1, geometry2, turns, policy);
+ >(geometry1, geometry2, robust_policy, turns, policy);
for (typename std::vector<turn_info>::const_iterator it
= turns.begin(); it != turns.end(); ++it)
{
@@ -488,9 +555,11 @@ template
>
struct intersection_insert_reversed
{
- template <typename OutputIterator, typename Strategy>
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
static inline OutputIterator apply(Geometry1 const& g1,
- Geometry2 const& g2, OutputIterator out,
+ Geometry2 const& g2,
+ RobustPolicy const& robust_policy,
+ OutputIterator out,
Strategy const& strategy)
{
return intersection_insert
@@ -498,12 +567,138 @@ struct intersection_insert_reversed
Geometry2, Geometry1, GeometryOut,
OverlayType,
Reverse2, Reverse1, ReverseOut
- >::apply(g2, g1, out, strategy);
+ >::apply(g2, g1, robust_policy, out, strategy);
}
};
+// dispatch for non-areal geometries
+template
+<
+ typename Geometry1, typename Geometry2, typename GeometryOut,
+ overlay_type OverlayType,
+ bool Reverse1, bool Reverse2, bool ReverseOut,
+ typename TagIn1, typename TagIn2
+>
+struct intersection_insert
+ <
+ Geometry1, Geometry2, GeometryOut,
+ OverlayType,
+ Reverse1, Reverse2, ReverseOut,
+ TagIn1, TagIn2, linestring_tag,
+ false, false, false
+ > : intersection_insert
+ <
+ Geometry1, Geometry2, GeometryOut,
+ OverlayType,
+ Reverse1, Reverse2, ReverseOut,
+ typename tag_cast<TagIn1, pointlike_tag, linear_tag>::type,
+ typename tag_cast<TagIn2, pointlike_tag, linear_tag>::type,
+ linestring_tag,
+ false, false, false
+ >
+{};
+
+
+// dispatch for difference/intersection of linear geometries
+template
+<
+ typename Linear1, typename Linear2, typename LineStringOut,
+ overlay_type OverlayType,
+ bool Reverse1, bool Reverse2, bool ReverseOut
+>
+struct intersection_insert
+ <
+ Linear1, Linear2, LineStringOut, OverlayType,
+ Reverse1, Reverse2, ReverseOut,
+ linear_tag, linear_tag, linestring_tag,
+ false, false, false
+ > : detail::overlay::linear_linear_linestring
+ <
+ Linear1, Linear2, LineStringOut, OverlayType
+ >
+{};
+
+
+// dispatch for difference/intersection of point-like geometries
+
+template
+<
+ typename Point1, typename Point2, typename PointOut,
+ overlay_type OverlayType,
+ bool Reverse1, bool Reverse2, bool ReverseOut
+>
+struct intersection_insert
+ <
+ Point1, Point2, PointOut, OverlayType,
+ Reverse1, Reverse2, ReverseOut,
+ point_tag, point_tag, point_tag,
+ false, false, false
+ > : detail::overlay::point_point_point
+ <
+ Point1, Point2, PointOut, OverlayType
+ >
+{};
+
+
+template
+<
+ typename MultiPoint, typename Point, typename PointOut,
+ overlay_type OverlayType,
+ bool Reverse1, bool Reverse2, bool ReverseOut
+>
+struct intersection_insert
+ <
+ MultiPoint, Point, PointOut, OverlayType,
+ Reverse1, Reverse2, ReverseOut,
+ multi_point_tag, point_tag, point_tag,
+ false, false, false
+ > : detail::overlay::multipoint_point_point
+ <
+ MultiPoint, Point, PointOut, OverlayType
+ >
+{};
+
+
+template
+<
+ typename Point, typename MultiPoint, typename PointOut,
+ overlay_type OverlayType,
+ bool Reverse1, bool Reverse2, bool ReverseOut
+>
+struct intersection_insert
+ <
+ Point, MultiPoint, PointOut, OverlayType,
+ Reverse1, Reverse2, ReverseOut,
+ point_tag, multi_point_tag, point_tag,
+ false, false, false
+ > : detail::overlay::point_multipoint_point
+ <
+ Point, MultiPoint, PointOut, OverlayType
+ >
+{};
+
+
+template
+<
+ typename MultiPoint1, typename MultiPoint2, typename PointOut,
+ overlay_type OverlayType,
+ bool Reverse1, bool Reverse2, bool ReverseOut
+>
+struct intersection_insert
+ <
+ MultiPoint1, MultiPoint2, PointOut, OverlayType,
+ Reverse1, Reverse2, ReverseOut,
+ multi_point_tag, multi_point_tag, point_tag,
+ false, false, false
+ > : detail::overlay::multipoint_multipoint_point
+ <
+ MultiPoint1, MultiPoint2, PointOut, OverlayType
+ >
+{};
+
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
@@ -519,35 +714,37 @@ template
bool ReverseSecond,
overlay_type OverlayType,
typename Geometry1, typename Geometry2,
+ typename RobustPolicy,
typename OutputIterator,
typename Strategy
>
inline OutputIterator insert(Geometry1 const& geometry1,
Geometry2 const& geometry2,
+ RobustPolicy robust_policy,
OutputIterator out,
Strategy const& strategy)
{
return boost::mpl::if_c
+ <
+ geometry::reverse_dispatch<Geometry1, Geometry2>::type::value,
+ geometry::dispatch::intersection_insert_reversed
<
- geometry::reverse_dispatch<Geometry1, Geometry2>::type::value,
- geometry::dispatch::intersection_insert_reversed
- <
- Geometry1, Geometry2,
- GeometryOut,
- OverlayType,
- overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
- overlay::do_reverse<geometry::point_order<Geometry2>::value, ReverseSecond>::value,
- overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value
- >,
- geometry::dispatch::intersection_insert
- <
- Geometry1, Geometry2,
- GeometryOut,
- OverlayType,
- geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
- geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, ReverseSecond>::value
- >
- >::type::apply(geometry1, geometry2, out, strategy);
+ Geometry1, Geometry2,
+ GeometryOut,
+ OverlayType,
+ overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
+ overlay::do_reverse<geometry::point_order<Geometry2>::value, ReverseSecond>::value,
+ overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value
+ >,
+ geometry::dispatch::intersection_insert
+ <
+ Geometry1, Geometry2,
+ GeometryOut,
+ OverlayType,
+ geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
+ geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, ReverseSecond>::value
+ >
+ >::type::apply(geometry1, geometry2, robust_policy, out, strategy);
}
@@ -586,10 +783,14 @@ inline OutputIterator intersection_insert(Geometry1 const& geometry1,
concept::check<Geometry1 const>();
concept::check<Geometry2 const>();
+ typedef typename Strategy::rescale_policy_type rescale_policy_type;
+ rescale_policy_type robust_policy
+ = geometry::get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
+
return detail::intersection::insert
<
GeometryOut, false, overlay_intersection
- >(geometry1, geometry2, out, strategy);
+ >(geometry1, geometry2, robust_policy, out, strategy);
}
@@ -623,12 +824,18 @@ inline OutputIterator intersection_insert(Geometry1 const& geometry1,
concept::check<Geometry1 const>();
concept::check<Geometry2 const>();
+ typedef typename geometry::rescale_policy_type
+ <
+ typename geometry::point_type<Geometry1>::type // TODO from both
+ >::type rescale_policy_type;
+
typedef strategy_intersection
<
typename cs_tag<GeometryOut>::type,
Geometry1,
Geometry2,
- typename geometry::point_type<GeometryOut>::type
+ typename geometry::point_type<GeometryOut>::type,
+ rescale_policy_type
> strategy;
return intersection_insert<GeometryOut>(geometry1, geometry2, out,
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/linear_linear.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/linear_linear.hpp
new file mode 100644
index 0000000000..3a7a7a7f3e
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/linear_linear.hpp
@@ -0,0 +1,326 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_LINEAR_LINEAR_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_LINEAR_LINEAR_HPP
+
+#include <algorithm>
+#include <vector>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/detail/relate/turns.hpp>
+
+#include <boost/geometry/algorithms/detail/turns/compare_turns.hpp>
+#include <boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp>
+#include <boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
+#include <boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp>
+
+#include <boost/geometry/algorithms/convert.hpp>
+
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay
+{
+
+
+template
+<
+ typename LineStringOut,
+ overlay_type OverlayType,
+ typename Geometry,
+ typename GeometryTag
+>
+struct linear_linear_no_intersections;
+
+
+template <typename LineStringOut, typename LineString>
+struct linear_linear_no_intersections
+ <
+ LineStringOut, overlay_difference, LineString, linestring_tag
+ >
+{
+ template <typename OutputIterator>
+ static inline OutputIterator apply(LineString const& linestring,
+ OutputIterator oit)
+ {
+ LineStringOut ls_out;
+ geometry::convert(linestring, ls_out);
+ *oit++ = ls_out;
+ return oit;
+ }
+};
+
+
+template <typename LineStringOut, typename MultiLineString>
+struct linear_linear_no_intersections
+ <
+ LineStringOut,
+ overlay_difference,
+ MultiLineString,
+ multi_linestring_tag
+ >
+{
+ template <typename OutputIterator>
+ static inline OutputIterator apply(MultiLineString const& multilinestring,
+ OutputIterator oit)
+ {
+ for (typename boost::range_iterator<MultiLineString const>::type
+ it = boost::begin(multilinestring);
+ it != boost::end(multilinestring); ++it)
+ {
+ LineStringOut ls_out;
+ geometry::convert(*it, ls_out);
+ *oit++ = ls_out;
+ }
+ return oit;
+ }
+};
+
+
+template <typename LineStringOut, typename Geometry, typename GeometryTag>
+struct linear_linear_no_intersections
+ <
+ LineStringOut, overlay_intersection, Geometry, GeometryTag
+ >
+{
+ template <typename OutputIterator>
+ static inline OutputIterator apply(Geometry const&,
+ OutputIterator oit)
+ {
+ return oit;
+ }
+};
+
+
+
+
+
+
+
+template
+<
+ typename Linear1,
+ typename Linear2,
+ typename LinestringOut,
+ overlay_type OverlayType,
+ bool EnableFilterContinueTurns = false,
+ bool EnableRemoveDuplicateTurns = false,
+ bool EnableDegenerateTurns = true,
+#ifdef BOOST_GEOMETRY_INTERSECTION_DO_NOT_INCLUDE_ISOLATED_POINTS
+ bool EnableFollowIsolatedPoints = false
+#else
+ bool EnableFollowIsolatedPoints = true
+#endif
+>
+class linear_linear_linestring
+{
+protected:
+ struct assign_policy
+ {
+ static bool const include_no_turn = false;
+ static bool const include_degenerate = EnableDegenerateTurns;
+ static bool const include_opposite = false;
+
+ template
+ <
+ typename Info,
+ typename Point1,
+ typename Point2,
+ typename IntersectionInfo,
+ typename DirInfo
+ >
+ static inline void apply(Info& , Point1 const& , Point2 const& ,
+ IntersectionInfo const& , DirInfo const& )
+ {
+ }
+ };
+
+
+ template
+ <
+ typename Turns,
+ typename LinearGeometry1,
+ typename LinearGeometry2
+ >
+ static inline void compute_turns(Turns& turns,
+ LinearGeometry1 const& linear1,
+ LinearGeometry2 const& linear2)
+ {
+ turns.clear();
+ geometry::detail::relate::turns::get_turns
+ <
+ LinearGeometry1,
+ LinearGeometry2,
+ detail::get_turns::get_turn_info_type
+ <
+ LinearGeometry1,
+ LinearGeometry2,
+ assign_policy
+ >
+ >::apply(turns, linear1, linear2);
+ }
+
+
+ template
+ <
+ overlay_type OverlayTypeForFollow,
+ bool FollowIsolatedPoints,
+ typename Turns,
+ typename LinearGeometry1,
+ typename LinearGeometry2,
+ typename OutputIterator
+ >
+ static inline OutputIterator
+ sort_and_follow_turns(Turns& turns,
+ LinearGeometry1 const& linear1,
+ LinearGeometry2 const& linear2,
+ OutputIterator oit)
+ {
+ // remove turns that have no added value
+ turns::filter_continue_turns
+ <
+ Turns,
+ EnableFilterContinueTurns && OverlayType != overlay_intersection
+ >::apply(turns);
+
+ // sort by seg_id, distance, and operation
+ std::sort(boost::begin(turns), boost::end(turns),
+ detail::turns::less_seg_fraction_other_op<>());
+
+ // remove duplicate turns
+ turns::remove_duplicate_turns
+ <
+ Turns, EnableRemoveDuplicateTurns
+ >::apply(turns);
+
+ return detail::overlay::following::linear::follow
+ <
+ LinestringOut,
+ LinearGeometry1,
+ LinearGeometry2,
+ OverlayTypeForFollow,
+ FollowIsolatedPoints,
+ !EnableFilterContinueTurns || OverlayType == overlay_intersection
+ >::apply(linear1, linear2, boost::begin(turns), boost::end(turns),
+ oit);
+ }
+
+public:
+ template
+ <
+ typename RobustPolicy, typename OutputIterator, typename Strategy
+ >
+ static inline OutputIterator apply(Linear1 const& linear1,
+ Linear2 const& linear2,
+ RobustPolicy const&,
+ OutputIterator oit,
+ Strategy const& )
+ {
+ typedef typename detail::relate::turns::get_turns
+ <
+ Linear1, Linear2
+ >::turn_info turn_info;
+
+ typedef std::vector<turn_info> turns_container;
+
+ turns_container turns;
+ compute_turns(turns, linear1, linear2);
+
+ if ( turns.empty() )
+ {
+ // the two linear geometries are disjoint
+ return linear_linear_no_intersections
+ <
+ LinestringOut,
+ OverlayType,
+ Linear1,
+ typename tag<Linear1>::type
+ >::apply(linear1, oit);
+ }
+
+ return sort_and_follow_turns
+ <
+ OverlayType,
+ EnableFollowIsolatedPoints
+ && OverlayType == overlay_intersection
+ >(turns, linear1, linear2, oit);
+ }
+};
+
+
+
+
+template
+<
+ typename Linear1,
+ typename Linear2,
+ typename LinestringOut,
+ bool EnableFilterContinueTurns,
+ bool EnableRemoveDuplicateTurns,
+ bool EnableDegenerateTurns,
+ bool EnableFollowIsolatedPoints
+>
+struct linear_linear_linestring
+ <
+ Linear1, Linear2, LinestringOut, overlay_union,
+ EnableFilterContinueTurns, EnableRemoveDuplicateTurns,
+ EnableDegenerateTurns, EnableFollowIsolatedPoints
+ >
+{
+ template
+ <
+ typename RobustPolicy, typename OutputIterator, typename Strategy
+ >
+ static inline OutputIterator apply(Linear1 const& linear1,
+ Linear2 const& linear2,
+ RobustPolicy const& robust_policy,
+ OutputIterator oit,
+ Strategy const& strategy)
+ {
+ oit = linear_linear_no_intersections
+ <
+ LinestringOut,
+ overlay_difference,
+ Linear1,
+ typename tag<Linear1>::type
+ >::apply(linear1, oit);
+
+ return linear_linear_linestring
+ <
+ Linear2, Linear1, LinestringOut, overlay_difference,
+ EnableFilterContinueTurns, EnableRemoveDuplicateTurns,
+ EnableDegenerateTurns, EnableFollowIsolatedPoints
+ >::apply(linear2, linear1, robust_policy, oit, strategy);
+ }
+};
+
+
+
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_LINEAR_LINEAR_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp
index af9a8d991b..29e0dad0ce 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp
@@ -1,6 +1,7 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -17,7 +18,6 @@
#include <boost/mpl/assert.hpp>
-#include <boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp>
#include <boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp>
#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
@@ -26,6 +26,7 @@
#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/recalculate.hpp>
#include <boost/geometry/algorithms/num_points.hpp>
#include <boost/geometry/algorithms/reverse.hpp>
@@ -34,12 +35,19 @@
#include <boost/geometry/algorithms/detail/overlay/assign_parents.hpp>
#include <boost/geometry/algorithms/detail/overlay/ring_properties.hpp>
#include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
+#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
+
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
#ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE
# include <boost/geometry/io/dsv/write.hpp>
#endif
+#ifdef BOOST_GEOMETRY_TIME_OVERLAY
+# include <boost/timer.hpp>
+#endif
+
namespace boost { namespace geometry
{
@@ -112,8 +120,8 @@ inline OutputIterator return_if_one_input_is_empty(Geometry1 const& geometry1,
// Silence warning C4127: conditional expression is constant
#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
+#pragma warning(push)
+#pragma warning(disable : 4127)
#endif
// Union: return either of them
@@ -127,7 +135,7 @@ inline OutputIterator return_if_one_input_is_empty(Geometry1 const& geometry1,
}
#if defined(_MSC_VER)
-#pragma warning(pop)
+#pragma warning(pop)
#endif
@@ -150,20 +158,21 @@ template
>
struct overlay
{
- template <typename OutputIterator, typename Strategy>
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
static inline OutputIterator apply(
Geometry1 const& geometry1, Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
OutputIterator out,
Strategy const& )
{
- if (geometry::num_points(geometry1) == 0
- && geometry::num_points(geometry2) == 0)
+ if ( geometry::num_points(geometry1) == 0
+ && geometry::num_points(geometry2) == 0 )
{
return out;
}
- if (geometry::num_points(geometry1) == 0
- || geometry::num_points(geometry2) == 0)
+ if ( geometry::num_points(geometry1) == 0
+ || geometry::num_points(geometry2) == 0 )
{
return return_if_one_input_is_empty
<
@@ -172,7 +181,11 @@ struct overlay
}
typedef typename geometry::point_type<GeometryOut>::type point_type;
- typedef detail::overlay::traversal_turn_info<point_type> turn_info;
+ typedef detail::overlay::traversal_turn_info
+ <
+ point_type,
+ typename geometry::segment_ratio_type<point_type, RobustPolicy>::type
+ > turn_info;
typedef std::deque<turn_info> container_type;
typedef std::deque
@@ -193,8 +206,8 @@ std::cout << "get turns" << std::endl;
geometry::get_turns
<
Reverse1, Reverse2,
- detail::overlay::calculate_distance_policy
- >(geometry1, geometry2, turn_points, policy);
+ detail::overlay::assign_null_policy
+ >(geometry1, geometry2, robust_policy, turn_points, policy);
#ifdef BOOST_GEOMETRY_TIME_OVERLAY
std::cout << "get_turns: " << timer.elapsed() << std::endl;
@@ -209,6 +222,7 @@ std::cout << "enrich" << std::endl;
? geometry::detail::overlay::operation_union
: geometry::detail::overlay::operation_intersection,
geometry1, geometry2,
+ robust_policy,
side_strategy);
#ifdef BOOST_GEOMETRY_TIME_OVERLAY
@@ -229,6 +243,7 @@ std::cout << "traverse" << std::endl;
Direction == overlay_union
? geometry::detail::overlay::operation_union
: geometry::detail::overlay::operation_intersection,
+ robust_policy,
turn_points, rings
);
@@ -259,8 +274,8 @@ std::cout << "traverse" << std::endl;
ring_identifier id(2, 0, -1);
for (typename boost::range_iterator<ring_container_type>::type
it = boost::begin(rings);
- it != boost::end(rings);
- ++it)
+ it != boost::end(rings);
+ ++it)
{
selected[id] = properties(*it, true);
selected[id].reversed = ReverseOut;
@@ -284,24 +299,6 @@ std::cout << "traverse" << std::endl;
};
-// Metafunction helper for intersection and union
-template <order_selector Selector, bool Reverse = false>
-struct do_reverse {};
-
-template <>
-struct do_reverse<clockwise, false> : boost::false_type {};
-
-template <>
-struct do_reverse<clockwise, true> : boost::true_type {};
-
-template <>
-struct do_reverse<counterclockwise, false> : boost::true_type {};
-
-template <>
-struct do_reverse<counterclockwise, true> : boost::false_type {};
-
-
-
}} // namespace detail::overlay
#endif // DOXYGEN_NO_DETAIL
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp
new file mode 100644
index 0000000000..0af062d271
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp
@@ -0,0 +1,435 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_POINTLIKE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_POINTLIKE_HPP
+
+#include <algorithm>
+#include <vector>
+
+#include <boost/assert.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+#include <boost/geometry/algorithms/detail/relate/less.hpp>
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
+#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay
+{
+
+
+// struct for copying points of the pointlike geometries to output
+template
+<
+ typename PointOut,
+ typename GeometryIn,
+ typename TagIn = typename tag<GeometryIn>::type
+>
+struct copy_points
+ : not_implemented<PointOut, GeometryIn>
+{};
+
+template <typename PointOut, typename PointIn>
+struct copy_points<PointOut, PointIn, point_tag>
+{
+ template <typename OutputIterator>
+ static inline void apply(PointIn const& point_in,
+ OutputIterator& oit)
+ {
+ PointOut point_out;
+ geometry::convert(point_in, point_out);
+ *oit++ = point_out;
+ }
+};
+
+
+template <typename PointOut, typename MultiPointIn>
+struct copy_points<PointOut, MultiPointIn, multi_point_tag>
+{
+ template <typename OutputIterator>
+ static inline void apply(MultiPointIn const& multi_point_in,
+ OutputIterator& oit)
+ {
+ for (typename boost::range_iterator<MultiPointIn const>::type
+ it = boost::begin(multi_point_in);
+ it != boost::end(multi_point_in); ++it)
+ {
+ PointOut point_out;
+ geometry::convert(*it, point_out);
+ *oit++ = point_out;
+ }
+ }
+};
+
+
+
+// action struct for difference/intersection
+template <typename PointOut, overlay_type OverlayType>
+struct action_selector_pl_pl
+{};
+
+template <typename PointOut>
+struct action_selector_pl_pl<PointOut, overlay_intersection>
+{
+ template
+ <
+ typename Point,
+ typename OutputIterator
+ >
+ static inline void apply(Point const& point,
+ bool is_common,
+ OutputIterator& oit)
+ {
+ if ( is_common )
+ {
+ copy_points<PointOut, Point>::apply(point, oit);
+ }
+ }
+};
+
+
+
+template <typename PointOut>
+struct action_selector_pl_pl<PointOut, overlay_difference>
+{
+ template
+ <
+ typename Point,
+ typename OutputIterator
+ >
+ static inline void apply(Point const& point,
+ bool is_common,
+ OutputIterator& oit)
+ {
+ if ( !is_common )
+ {
+ copy_points<PointOut, Point>::apply(point, oit);
+ }
+ }
+};
+
+
+//===========================================================================
+
+// difference/intersection of point-point
+template
+<
+ typename Point1,
+ typename Point2,
+ typename PointOut,
+ overlay_type OverlayType
+>
+struct point_point_point
+{
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
+ static inline OutputIterator apply(Point1 const& point1,
+ Point2 const& point2,
+ RobustPolicy const& ,
+ OutputIterator oit,
+ Strategy const&)
+ {
+ action_selector_pl_pl
+ <
+ PointOut, OverlayType
+ >::apply(point1,
+ detail::equals::equals_point_point(point1, point2),
+ oit);
+
+ return oit;
+ }
+};
+
+
+
+// difference of multipoint-point
+//
+// the apply method in the following struct is called only for
+// difference; for intersection the reversal will
+// always call the point-multipoint version
+template
+<
+ typename MultiPoint,
+ typename Point,
+ typename PointOut,
+ overlay_type OverlayType
+>
+struct multipoint_point_point
+{
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
+ static inline OutputIterator apply(MultiPoint const& multipoint,
+ Point const& point,
+ RobustPolicy const& ,
+ OutputIterator oit,
+ Strategy const&)
+ {
+ BOOST_ASSERT( OverlayType == overlay_difference );
+
+ for (typename boost::range_iterator<MultiPoint const>::type
+ it = boost::begin(multipoint);
+ it != boost::end(multipoint); ++it)
+ {
+ action_selector_pl_pl
+ <
+ PointOut, OverlayType
+ >::apply(*it,
+ detail::equals::equals_point_point(*it, point),
+ oit);
+ }
+
+ return oit;
+ }
+};
+
+
+// difference/intersection of point-multipoint
+template
+<
+ typename Point,
+ typename MultiPoint,
+ typename PointOut,
+ overlay_type OverlayType
+>
+struct point_multipoint_point
+{
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
+ static inline OutputIterator apply(Point const& point,
+ MultiPoint const& multipoint,
+ RobustPolicy const& ,
+ OutputIterator oit,
+ Strategy const&)
+ {
+ typedef action_selector_pl_pl<PointOut, OverlayType> action;
+
+ for (typename boost::range_iterator<MultiPoint const>::type
+ it = boost::begin(multipoint);
+ it != boost::end(multipoint); ++it)
+ {
+ if ( detail::equals::equals_point_point(*it, point) )
+ {
+ action::apply(point, true, oit);
+ return oit;
+ }
+ }
+
+ action::apply(point, false, oit);
+ return oit;
+ }
+};
+
+
+
+// difference/intersection of multipoint-multipoint
+template
+<
+ typename MultiPoint1,
+ typename MultiPoint2,
+ typename PointOut,
+ overlay_type OverlayType
+>
+struct multipoint_multipoint_point
+{
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
+ static inline OutputIterator apply(MultiPoint1 const& multipoint1,
+ MultiPoint2 const& multipoint2,
+ RobustPolicy const& robust_policy,
+ OutputIterator oit,
+ Strategy const& strategy)
+ {
+ if ( OverlayType != overlay_difference
+ && boost::size(multipoint1) > boost::size(multipoint2) )
+ {
+ return multipoint_multipoint_point
+ <
+ MultiPoint2, MultiPoint1, PointOut, OverlayType
+ >::apply(multipoint2, multipoint1, robust_policy, oit, strategy);
+ }
+
+ std::vector<typename point_type<MultiPoint2>::type>
+ points2(boost::begin(multipoint2), boost::end(multipoint2));
+
+ std::sort(points2.begin(), points2.end(), detail::relate::less());
+
+ for (typename boost::range_iterator<MultiPoint1 const>::type
+ it1 = boost::begin(multipoint1);
+ it1 != boost::end(multipoint1); ++it1)
+ {
+ bool found = std::binary_search(points2.begin(), points2.end(),
+ *it1, detail::relate::less());
+
+ action_selector_pl_pl
+ <
+ PointOut, OverlayType
+ >::apply(*it1, found, oit);
+ }
+ return oit;
+ }
+};
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+
+//===========================================================================
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace detail_dispatch { namespace overlay
+{
+
+// dispatch struct for pointlike-pointlike difference/intersection
+// computation
+template
+<
+ typename PointLike1,
+ typename PointLike2,
+ typename PointOut,
+ overlay_type OverlayType,
+ typename Tag1,
+ typename Tag2
+>
+struct pointlike_pointlike_point
+ : not_implemented<PointLike1, PointLike2, PointOut>
+{};
+
+
+template
+<
+ typename Point1,
+ typename Point2,
+ typename PointOut,
+ overlay_type OverlayType
+>
+struct pointlike_pointlike_point
+ <
+ Point1, Point2, PointOut, OverlayType,
+ point_tag, point_tag
+ > : detail::overlay::point_point_point
+ <
+ Point1, Point2, PointOut, OverlayType
+ >
+{};
+
+
+template
+<
+ typename Point,
+ typename MultiPoint,
+ typename PointOut,
+ overlay_type OverlayType
+>
+struct pointlike_pointlike_point
+ <
+ Point, MultiPoint, PointOut, OverlayType,
+ point_tag, multi_point_tag
+ > : detail::overlay::point_multipoint_point
+ <
+ Point, MultiPoint, PointOut, OverlayType
+ >
+{};
+
+
+template
+<
+ typename MultiPoint,
+ typename Point,
+ typename PointOut,
+ overlay_type OverlayType
+>
+struct pointlike_pointlike_point
+ <
+ MultiPoint, Point, PointOut, OverlayType,
+ multi_point_tag, point_tag
+ > : detail::overlay::multipoint_point_point
+ <
+ MultiPoint, Point, PointOut, OverlayType
+ >
+{};
+
+
+template
+<
+ typename MultiPoint1,
+ typename MultiPoint2,
+ typename PointOut,
+ overlay_type OverlayType
+>
+struct pointlike_pointlike_point
+ <
+ MultiPoint1, MultiPoint2, PointOut, OverlayType,
+ multi_point_tag, multi_point_tag
+ > : detail::overlay::multipoint_multipoint_point
+ <
+ MultiPoint1, MultiPoint2, PointOut, OverlayType
+ >
+{};
+
+
+}} // namespace detail_dispatch::overlay
+#endif // DOXYGEN_NO_DISPATCH
+
+
+//===========================================================================
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay
+{
+
+
+// generic pointlike-pointlike union implementation
+template
+<
+ typename PointLike1,
+ typename PointLike2,
+ typename PointOut
+>
+struct union_pointlike_pointlike_point
+{
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
+ static inline OutputIterator apply(PointLike1 const& pointlike1,
+ PointLike2 const& pointlike2,
+ RobustPolicy const& robust_policy,
+ OutputIterator oit,
+ Strategy const& strategy)
+ {
+ copy_points<PointOut, PointLike1>::apply(pointlike1, oit);
+
+ return detail_dispatch::overlay::pointlike_pointlike_point
+ <
+ PointLike2, PointLike1, PointOut, overlay_difference,
+ typename tag<PointLike2>::type,
+ typename tag<PointLike1>::type
+ >::apply(pointlike2, pointlike1, robust_policy, oit, strategy);
+ }
+
+};
+
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_POINTLIKE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp
index f664b19514..385658a190 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp
@@ -1,6 +1,7 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,11 +10,16 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP
+
#include <map>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/algorithms/area.hpp>
#include <boost/geometry/algorithms/within.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/algorithms/detail/point_on_border.hpp>
#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
#include <boost/geometry/algorithms/detail/overlay/ring_properties.hpp>
@@ -40,14 +46,14 @@ namespace dispatch
struct select_rings<box_tag, Box>
{
template <typename Geometry, typename Map>
- static inline void apply(Box const& box, Geometry const& ,
+ static inline void apply(Box const& box, Geometry const& ,
ring_identifier const& id, Map& map, bool midpoint)
{
map[id] = typename Map::mapped_type(box, midpoint);
}
template <typename Map>
- static inline void apply(Box const& box,
+ static inline void apply(Box const& box,
ring_identifier const& id, Map& map, bool midpoint)
{
map[id] = typename Map::mapped_type(box, midpoint);
@@ -68,7 +74,7 @@ namespace dispatch
}
template <typename Map>
- static inline void apply(Ring const& ring,
+ static inline void apply(Ring const& ring,
ring_identifier const& id, Map& map, bool midpoint)
{
if (boost::size(ring) > 0)
@@ -91,9 +97,10 @@ namespace dispatch
per_ring::apply(exterior_ring(polygon), geometry, id, map, midpoint);
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(polygon);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(polygon);
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
id.ring_index++;
per_ring::apply(*it, geometry, id, map, midpoint);
@@ -109,16 +116,42 @@ namespace dispatch
per_ring::apply(exterior_ring(polygon), id, map, midpoint);
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(polygon);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(polygon);
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
id.ring_index++;
per_ring::apply(*it, id, map, midpoint);
}
}
};
-}
+
+ template <typename Multi>
+ struct select_rings<multi_polygon_tag, Multi>
+ {
+ template <typename Geometry, typename Map>
+ static inline void apply(Multi const& multi, Geometry const& geometry,
+ ring_identifier id, Map& map, bool midpoint)
+ {
+ typedef typename boost::range_iterator
+ <
+ Multi const
+ >::type iterator_type;
+
+ typedef select_rings<polygon_tag, typename boost::range_value<Multi>::type> per_polygon;
+
+ id.multi_index = 0;
+ for (iterator_type it = boost::begin(multi); it != boost::end(multi); ++it)
+ {
+ id.ring_index = -1;
+ per_polygon::apply(*it, geometry, id, map, midpoint);
+ id.multi_index++;
+ }
+ }
+ };
+
+} // namespace dispatch
template<overlay_type OverlayType>
@@ -213,7 +246,7 @@ inline void update_selection_map(Geometry1 const& geometry1,
typename SelectionMap::mapped_type properties = it->second; // Copy by value
// Calculate the "within code" (previously this was done earlier but is
- // must efficienter here - it can be even more efficient doing it all at once,
+ // much efficienter here - it can be even more efficient doing it all at once,
// using partition, TODO)
// So though this is less elegant than before, it avoids many unused point-in-poly calculations
switch(id.source_index)
@@ -248,7 +281,7 @@ template
typename IntersectionMap, typename SelectionMap
>
inline void select_rings(Geometry1 const& geometry1, Geometry2 const& geometry2,
- IntersectionMap const& intersection_map,
+ IntersectionMap const& intersection_map,
SelectionMap& selection_map, bool midpoint)
{
typedef typename geometry::tag<Geometry1>::type tag1;
@@ -271,16 +304,16 @@ template
typename IntersectionMap, typename SelectionMap
>
inline void select_rings(Geometry const& geometry,
- IntersectionMap const& intersection_map,
+ IntersectionMap const& intersection_map,
SelectionMap& selection_map, bool midpoint)
{
typedef typename geometry::tag<Geometry>::type tag;
SelectionMap map_with_all;
- dispatch::select_rings<tag, Geometry>::apply(geometry,
+ dispatch::select_rings<tag, Geometry>::apply(geometry,
ring_identifier(0, -1, -1), map_with_all, midpoint);
- update_selection_map<OverlayType>(geometry, geometry, intersection_map,
+ update_selection_map<OverlayType>(geometry, geometry, intersection_map,
map_with_all, selection_map);
}
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp
index 9c4c99394e..8dffeae283 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp
@@ -9,16 +9,18 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
+
#include <cstddef>
#include <boost/range.hpp>
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/algorithms/detail/disjoint.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
#include <boost/geometry/algorithms/detail/partition.hpp>
#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
@@ -55,17 +57,21 @@ template
typename Geometry,
typename Turns,
typename TurnPolicy,
+ typename RobustPolicy,
typename InterruptPolicy
>
struct self_section_visitor
{
Geometry const& m_geometry;
+ RobustPolicy const& m_rescale_policy;
Turns& m_turns;
InterruptPolicy& m_interrupt_policy;
inline self_section_visitor(Geometry const& g,
+ RobustPolicy const& rp,
Turns& turns, InterruptPolicy& ip)
: m_geometry(g)
+ , m_rescale_policy(rp)
, m_turns(turns)
, m_interrupt_policy(ip)
{}
@@ -82,12 +88,12 @@ struct self_section_visitor
Geometry, Geometry,
false, false,
Section, Section,
- Turns, TurnPolicy,
- InterruptPolicy
+ TurnPolicy
>::apply(
0, m_geometry, sec1,
0, m_geometry, sec2,
false,
+ m_rescale_policy,
m_turns, m_interrupt_policy);
}
if (m_interrupt_policy.has_intersections)
@@ -103,17 +109,13 @@ struct self_section_visitor
-template
-<
- typename Geometry,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
->
+template<typename TurnPolicy>
struct get_turns
{
+ template <typename Geometry, typename RobustPolicy, typename Turns, typename InterruptPolicy>
static inline bool apply(
Geometry const& geometry,
+ RobustPolicy const& robust_policy,
Turns& turns,
InterruptPolicy& interrupt_policy)
{
@@ -127,20 +129,20 @@ struct get_turns
> sections_type;
sections_type sec;
- geometry::sectionalize<false>(geometry, sec);
+ geometry::sectionalize<false>(geometry, robust_policy, false, sec);
self_section_visitor
<
Geometry,
- Turns, TurnPolicy, InterruptPolicy
- > visitor(geometry, turns, interrupt_policy);
+ Turns, TurnPolicy, RobustPolicy, InterruptPolicy
+ > visitor(geometry, robust_policy, turns, interrupt_policy);
try
{
geometry::partition
<
- box_type,
- detail::get_turns::get_section_box,
+ box_type,
+ detail::get_turns::get_section_box,
detail::get_turns::ovelaps_section_box
>::apply(sec, visitor);
}
@@ -166,9 +168,7 @@ template
<
typename GeometryTag,
typename Geometry,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct self_get_turn_points
{
@@ -178,44 +178,32 @@ struct self_get_turn_points
template
<
typename Ring,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct self_get_turn_points
<
ring_tag, Ring,
- Turns,
- TurnPolicy,
- InterruptPolicy
+ TurnPolicy
>
- : detail::self_get_turn_points::get_turns
- <
- Ring,
- Turns,
- TurnPolicy,
- InterruptPolicy
- >
+ : detail::self_get_turn_points::get_turns<TurnPolicy>
{};
template
<
typename Box,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct self_get_turn_points
<
box_tag, Box,
- Turns,
- TurnPolicy,
- InterruptPolicy
+ TurnPolicy
>
{
+ template <typename RobustPolicy, typename Turns, typename InterruptPolicy>
static inline bool apply(
Box const& ,
+ RobustPolicy const& ,
Turns& ,
InterruptPolicy& )
{
@@ -227,24 +215,28 @@ struct self_get_turn_points
template
<
typename Polygon,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
+ typename TurnPolicy
>
struct self_get_turn_points
<
polygon_tag, Polygon,
- Turns,
- TurnPolicy,
- InterruptPolicy
+ TurnPolicy
+ >
+ : detail::self_get_turn_points::get_turns<TurnPolicy>
+{};
+
+
+template
+<
+ typename MultiPolygon,
+ typename TurnPolicy
+>
+struct self_get_turn_points
+ <
+ multi_polygon_tag, MultiPolygon,
+ TurnPolicy
>
- : detail::self_get_turn_points::get_turns
- <
- Polygon,
- Turns,
- TurnPolicy,
- InterruptPolicy
- >
+ : detail::self_get_turn_points::get_turns<TurnPolicy>
{};
@@ -259,6 +251,7 @@ struct self_get_turn_points
\tparam Turns type of intersection container
(e.g. vector of "intersection/turn point"'s)
\param geometry geometry
+ \param robust_policy policy to handle robustness issues
\param turns container which will contain intersection points
\param interrupt_policy policy determining if process is stopped
when intersection is found
@@ -267,38 +260,24 @@ template
<
typename AssignPolicy,
typename Geometry,
+ typename RobustPolicy,
typename Turns,
typename InterruptPolicy
>
inline void self_turns(Geometry const& geometry,
+ RobustPolicy const& robust_policy,
Turns& turns, InterruptPolicy& interrupt_policy)
{
concept::check<Geometry const>();
- typedef typename strategy_intersection
- <
- typename cs_tag<Geometry>::type,
- Geometry,
- Geometry,
- typename boost::range_value<Turns>::type
- >::segment_intersection_strategy_type strategy_type;
-
- typedef detail::overlay::get_turn_info
- <
- typename point_type<Geometry>::type,
- typename point_type<Geometry>::type,
- typename boost::range_value<Turns>::type,
- detail::overlay::assign_null_policy
- > TurnPolicy;
+ typedef detail::overlay::get_turn_info<detail::overlay::assign_null_policy> turn_policy;
dispatch::self_get_turn_points
<
typename tag<Geometry>::type,
Geometry,
- Turns,
- TurnPolicy,
- InterruptPolicy
- >::apply(geometry, turns, interrupt_policy);
+ turn_policy
+ >::apply(geometry, robust_policy, turns, interrupt_policy);
}
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp
index eebe381944..51fd1b3dca 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp
@@ -35,7 +35,6 @@ namespace detail { namespace overlay
template <typename P>
std::ostream& operator<<(std::ostream &os, turn_info<P> const& info)
{
- typename geometry::coordinate_type<P>::type d = info.distance;
os << "\t"
<< " src " << info.seg_id.source_index
<< " seg " << info.seg_id.segment_index
@@ -54,7 +53,7 @@ namespace detail { namespace overlay
<< " nxt seg " << info.travels_to_vertex_index
<< " , ip " << info.travels_to_ip_index
<< " , or " << info.next_ip_index
- << " dst " << double(d)
+ << " frac " << info.fraction
<< info.visit_state;
if (info.flagged)
{
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp
index 810a27af04..6ee32c17c0 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp
@@ -24,15 +24,21 @@ namespace detail { namespace overlay
{
-template <typename P>
-struct traversal_turn_operation : public turn_operation
+template <typename Point, typename SegmentRatio>
+struct traversal_turn_operation : public turn_operation<SegmentRatio>
{
- enrichment_info<P> enriched;
+ enrichment_info<Point> enriched;
visit_info visited;
};
-template <typename P>
-struct traversal_turn_info : public turn_info<P, traversal_turn_operation<P> >
+template <typename Point, typename SegmentRatio>
+struct traversal_turn_info
+ : public turn_info
+ <
+ Point,
+ SegmentRatio,
+ traversal_turn_operation<Point, SegmentRatio>
+ >
{};
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp
index 72665922b3..bde86b4d73 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp
@@ -13,7 +13,6 @@
#include <boost/range.hpp>
-#include <boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp>
#include <boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp>
#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
@@ -40,7 +39,7 @@ namespace detail { namespace overlay
template <typename Turn, typename Operation>
#ifdef BOOST_GEOMETRY_DEBUG_TRAVERSE
-inline void debug_traverse(Turn const& turn, Operation op,
+inline void debug_traverse(Turn const& turn, Operation op,
std::string const& header)
{
std::cout << header
@@ -94,14 +93,16 @@ template
typename G1,
typename G2,
typename Turns,
- typename IntersectionInfo
+ typename IntersectionInfo,
+ typename RobustPolicy
>
inline bool assign_next_ip(G1 const& g1, G2 const& g2,
Turns& turns,
typename boost::range_iterator<Turns>::type& ip,
GeometryOut& current_output,
IntersectionInfo& info,
- segment_identifier& seg_id)
+ segment_identifier& seg_id,
+ RobustPolicy const& robust_policy)
{
info.visited.set_visited();
set_visited_for_continue(*ip, info);
@@ -109,7 +110,7 @@ inline bool assign_next_ip(G1 const& g1, G2 const& g2,
// If there is no next IP on this segment
if (info.enriched.next_ip_index < 0)
{
- if (info.enriched.travels_to_vertex_index < 0
+ if (info.enriched.travels_to_vertex_index < 0
|| info.enriched.travels_to_ip_index < 0)
{
return false;
@@ -122,12 +123,14 @@ inline bool assign_next_ip(G1 const& g1, G2 const& g2,
{
geometry::copy_segments<Reverse1>(g1, info.seg_id,
info.enriched.travels_to_vertex_index,
+ robust_policy,
current_output);
}
else
{
geometry::copy_segments<Reverse2>(g2, info.seg_id,
info.enriched.travels_to_vertex_index,
+ robust_policy,
current_output);
}
seg_id = info.seg_id;
@@ -139,7 +142,9 @@ inline bool assign_next_ip(G1 const& g1, G2 const& g2,
seg_id = info.seg_id;
}
- detail::overlay::append_no_duplicates(current_output, ip->point);
+ detail::overlay::append_no_dups_or_spikes(current_output, ip->point,
+ robust_policy);
+
return true;
}
@@ -229,10 +234,11 @@ template
class traverse
{
public :
- template <typename Turns, typename Rings>
+ template <typename RobustPolicy, typename Turns, typename Rings>
static inline void apply(Geometry1 const& geometry1,
Geometry2 const& geometry2,
detail::overlay::operation_type operation,
+ RobustPolicy const& robust_policy,
Turns& turns, Rings& rings)
{
typedef typename boost::range_value<Rings>::type ring_type;
@@ -262,7 +268,7 @@ public :
++it)
{
// Skip discarded ones
- if (! (it->is_discarded() || it->blocked()))
+ if (! (it->discarded || ! it->selectable_start || it->blocked()))
{
for (turn_operation_iterator_type iit = boost::begin(it->operations);
state.good() && iit != boost::end(it->operations);
@@ -277,8 +283,8 @@ public :
set_visited_for_continue(*it, *iit);
ring_type current_output;
- detail::overlay::append_no_duplicates(current_output,
- it->point, true);
+ detail::overlay::append_no_dups_or_spikes(current_output,
+ it->point, robust_policy);
turn_iterator current = it;
turn_operation_iterator_type current_iit = iit;
@@ -288,13 +294,14 @@ public :
geometry1, geometry2,
turns,
current, current_output,
- *iit, current_seg_id))
+ *iit, current_seg_id,
+ robust_policy))
{
Backtrack::apply(
- size_at_start,
+ size_at_start,
rings, current_output, turns, *current_iit,
"No next IP",
- geometry1, geometry2, state);
+ geometry1, geometry2, robust_policy, state);
}
if (! detail::overlay::select_next_ip(
@@ -304,10 +311,10 @@ public :
current_iit))
{
Backtrack::apply(
- size_at_start,
+ size_at_start,
rings, current_output, turns, *iit,
"Dead end at start",
- geometry1, geometry2, state);
+ geometry1, geometry2, robust_policy, state);
}
else
{
@@ -326,10 +333,10 @@ public :
// It visits a visited node again, without passing the start node.
// This makes it suspicious for endless loops
Backtrack::apply(
- size_at_start,
+ size_at_start,
rings, current_output, turns, *iit,
"Visit again",
- geometry1, geometry2, state);
+ geometry1, geometry2, robust_policy, state);
}
else
{
@@ -348,7 +355,8 @@ public :
detail::overlay::assign_next_ip<Reverse1, Reverse2>(
geometry1, geometry2,
turns, current, current_output,
- *current_iit, current_seg_id);
+ *current_iit, current_seg_id,
+ robust_policy);
if (! detail::overlay::select_next_ip(
operation,
@@ -360,10 +368,10 @@ public :
// Should not occur in self-intersecting polygons without spikes
// Might occur in polygons with spikes
Backtrack::apply(
- size_at_start,
+ size_at_start,
rings, current_output, turns, *iit,
"Dead end",
- geometry1, geometry2, state);
+ geometry1, geometry2, robust_policy, state);
}
else
{
@@ -376,10 +384,10 @@ public :
// than turn points.
// Turn points marked as "ii" can be visited twice.
Backtrack::apply(
- size_at_start,
+ size_at_start,
rings, current_output, turns, *iit,
"Endless loop",
- geometry1, geometry2, state);
+ geometry1, geometry2, robust_policy, state);
}
}
}
@@ -390,6 +398,7 @@ public :
detail::overlay::debug_traverse(*current, *iit, "->Finished");
if (geometry::num_points(current_output) >= min_num_points)
{
+ clean_closing_dups_and_spikes(current_output, robust_policy);
rings.push_back(current_output);
}
}
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp
index 89a60b21ab..91a133789e 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp
@@ -54,11 +54,13 @@ enum method_type
The class is to be included in the turn_info class, either direct
or a derived or similar class with more (e.g. enrichment) information.
*/
+template <typename SegmentRatio>
struct turn_operation
{
operation_type operation;
segment_identifier seg_id;
segment_identifier other_id;
+ SegmentRatio fraction;
inline turn_operation()
: operation(operation_none)
@@ -78,7 +80,8 @@ struct turn_operation
template
<
typename Point,
- typename Operation = turn_operation,
+ typename SegmentRatio,
+ typename Operation = turn_operation<SegmentRatio>,
typename Container = boost::array<Operation, 2>
>
struct turn_info
@@ -90,6 +93,7 @@ struct turn_info
Point point;
method_type method;
bool discarded;
+ bool selectable_start; // Can be used as starting-turn in traverse
Container operations;
@@ -97,13 +101,14 @@ struct turn_info
inline turn_info()
: method(method_none)
, discarded(false)
+ , selectable_start(true)
{}
inline bool both(operation_type type) const
{
return has12(type, type);
}
-
+
inline bool has(operation_type type) const
{
return this->operations[0].operation == type
@@ -115,8 +120,6 @@ struct turn_info
return has12(type1, type2) || has12(type2, type1);
}
-
- inline bool is_discarded() const { return discarded; }
inline bool blocked() const
{
return both(operation_blocked);
diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp
index 6be63f42b4..4284a801a1 100644
--- a/3party/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp
@@ -10,11 +10,6 @@
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP
-#ifdef BOOST_GEOMETRY_USE_MSM
-# include <boost/geometry/algorithms/detail/overlay/msm_state.hpp>
-#endif
-
-
namespace boost { namespace geometry
{
@@ -22,9 +17,6 @@ namespace boost { namespace geometry
namespace detail { namespace overlay
{
-
-#if ! defined(BOOST_GEOMETRY_USE_MSM)
-
class visit_info
{
private :
@@ -66,8 +58,6 @@ public:
}
}
-
-
#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
friend std::ostream& operator<<(std::ostream &os, visit_info const& v)
{
@@ -82,50 +72,6 @@ public:
};
-#else
-
-
-class visit_info
-{
-
-private :
-
-#ifndef USE_MSM_MINI
- mutable
-#endif
- traverse_state state;
-
-public :
- inline visit_info()
- {
- state.start();
- }
-
- inline void set_none() { state.process_event(none()); } // Not Yet Implemented!
- inline void set_visited() { state.process_event(visit()); }
- inline void set_started() { state.process_event(starting()); }
- inline void set_finished() { state.process_event(finish()); }
-
-#ifdef USE_MSM_MINI
- inline bool none() const { return state.flag_none(); }
- inline bool visited() const { return state.flag_visited(); }
- inline bool started() const { return state.flag_started(); }
-#else
- inline bool none() const { return state.is_flag_active<is_init>(); }
- inline bool visited() const { return state.is_flag_active<is_visited>(); }
- inline bool started() const { return state.is_flag_active<is_started>(); }
-#endif
-
-#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
- friend std::ostream& operator<<(std::ostream &os, visit_info const& v)
- {
- return os;
- }
-#endif
-};
-#endif
-
-
}} // namespace detail::overlay
#endif //DOXYGEN_NO_DETAIL
diff --git a/3party/boost/boost/geometry/algorithms/detail/partition.hpp b/3party/boost/boost/geometry/algorithms/detail/partition.hpp
index 45ff52ccb1..8e5f5a15d9 100644
--- a/3party/boost/boost/geometry/algorithms/detail/partition.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/partition.hpp
@@ -23,7 +23,7 @@ namespace detail { namespace partition
typedef std::vector<std::size_t> index_vector_type;
template <int Dimension, typename Box>
-inline void divide_box(Box const& box, Box& lower_box, Box& upper_box)
+void divide_box(Box const& box, Box& lower_box, Box& upper_box)
{
typedef typename coordinate_type<Box>::type ctype;
@@ -39,10 +39,10 @@ inline void divide_box(Box const& box, Box& lower_box, Box& upper_box)
}
// Divide collection into three subsets: lower, upper and oversized
-// (not-fitting)
+// (not-fitting)
// (lower == left or bottom, upper == right or top)
template <typename OverlapsPolicy, typename InputCollection, typename Box>
-static inline void divide_into_subsets(Box const& lower_box,
+inline void divide_into_subsets(Box const& lower_box,
Box const& upper_box,
InputCollection const& collection,
index_vector_type const& input,
@@ -86,7 +86,7 @@ static inline void divide_into_subsets(Box const& lower_box,
// Match collection with itself
template <typename InputCollection, typename Policy>
-static inline void handle_one(InputCollection const& collection,
+inline void handle_one(InputCollection const& collection,
index_vector_type const& input,
Policy& policy)
{
@@ -106,10 +106,15 @@ static inline void handle_one(InputCollection const& collection,
}
// Match collection 1 with collection 2
-template <typename InputCollection, typename Policy>
-static inline void handle_two(
- InputCollection const& collection1, index_vector_type const& input1,
- InputCollection const& collection2, index_vector_type const& input2,
+template
+<
+ typename InputCollection1,
+ typename InputCollection2,
+ typename Policy
+>
+inline void handle_two(
+ InputCollection1 const& collection1, index_vector_type const& input1,
+ InputCollection2 const& collection2, index_vector_type const& input2,
Policy& policy)
{
typedef boost::range_iterator
@@ -209,7 +214,8 @@ template
<
int Dimension,
typename Box,
- typename OverlapsPolicy,
+ typename OverlapsPolicy1,
+ typename OverlapsPolicy2,
typename VisitBoxPolicy
>
class partition_two_collections
@@ -220,15 +226,21 @@ class partition_two_collections
<
1 - Dimension,
Box,
- OverlapsPolicy,
+ OverlapsPolicy1,
+ OverlapsPolicy2,
VisitBoxPolicy
> sub_divide;
- template <typename InputCollection, typename Policy>
+ template
+ <
+ typename InputCollection1,
+ typename InputCollection2,
+ typename Policy
+ >
static inline void next_level(Box const& box,
- InputCollection const& collection1,
+ InputCollection1 const& collection1,
index_vector_type const& input1,
- InputCollection const& collection2,
+ InputCollection2 const& collection2,
index_vector_type const& input2,
int level, std::size_t min_elements,
Policy& policy, VisitBoxPolicy& box_policy)
@@ -252,10 +264,15 @@ class partition_two_collections
}
public :
- template <typename InputCollection, typename Policy>
+ template
+ <
+ typename InputCollection1,
+ typename InputCollection2,
+ typename Policy
+ >
static inline void apply(Box const& box,
- InputCollection const& collection1, index_vector_type const& input1,
- InputCollection const& collection2, index_vector_type const& input2,
+ InputCollection1 const& collection1, index_vector_type const& input1,
+ InputCollection2 const& collection2, index_vector_type const& input2,
int level,
std::size_t min_elements,
Policy& policy, VisitBoxPolicy& box_policy)
@@ -267,9 +284,9 @@ public :
index_vector_type lower1, upper1, exceeding1;
index_vector_type lower2, upper2, exceeding2;
- divide_into_subsets<OverlapsPolicy>(lower_box, upper_box, collection1,
+ divide_into_subsets<OverlapsPolicy1>(lower_box, upper_box, collection1,
input1, lower1, upper1, exceeding1);
- divide_into_subsets<OverlapsPolicy>(lower_box, upper_box, collection2,
+ divide_into_subsets<OverlapsPolicy2>(lower_box, upper_box, collection2,
input2, lower2, upper2, exceeding2);
if (boost::size(exceeding1) > 0)
@@ -308,15 +325,17 @@ struct visit_no_policy
template
<
typename Box,
- typename ExpandPolicy,
- typename OverlapsPolicy,
+ typename ExpandPolicy1,
+ typename OverlapsPolicy1,
+ typename ExpandPolicy2 = ExpandPolicy1,
+ typename OverlapsPolicy2 = OverlapsPolicy1,
typename VisitBoxPolicy = visit_no_policy
>
class partition
{
typedef std::vector<std::size_t> index_vector_type;
- template <typename InputCollection>
+ template <typename ExpandPolicy, typename InputCollection>
static inline void expand_to_collection(InputCollection const& collection,
Box& total, index_vector_type& index_vector)
{
@@ -344,12 +363,12 @@ public :
index_vector_type index_vector;
Box total;
assign_inverse(total);
- expand_to_collection(collection, total, index_vector);
+ expand_to_collection<ExpandPolicy1>(collection, total, index_vector);
detail::partition::partition_one_collection
<
0, Box,
- OverlapsPolicy,
+ OverlapsPolicy1,
VisitBoxPolicy
>::apply(total, collection, index_vector, 0, min_elements,
visitor, box_visitor);
@@ -373,9 +392,14 @@ public :
}
}
- template <typename InputCollection, typename VisitPolicy>
- static inline void apply(InputCollection const& collection1,
- InputCollection const& collection2,
+ template
+ <
+ typename InputCollection1,
+ typename InputCollection2,
+ typename VisitPolicy
+ >
+ static inline void apply(InputCollection1 const& collection1,
+ InputCollection2 const& collection2,
VisitPolicy& visitor,
std::size_t min_elements = 16,
VisitBoxPolicy box_visitor = visit_no_policy()
@@ -387,12 +411,12 @@ public :
index_vector_type index_vector1, index_vector2;
Box total;
assign_inverse(total);
- expand_to_collection(collection1, total, index_vector1);
- expand_to_collection(collection2, total, index_vector2);
+ expand_to_collection<ExpandPolicy1>(collection1, total, index_vector1);
+ expand_to_collection<ExpandPolicy2>(collection2, total, index_vector2);
detail::partition::partition_two_collections
<
- 0, Box, OverlapsPolicy, VisitBoxPolicy
+ 0, Box, OverlapsPolicy1, OverlapsPolicy2, VisitBoxPolicy
>::apply(total,
collection1, index_vector1,
collection2, index_vector2,
@@ -402,13 +426,17 @@ public :
{
typedef typename boost::range_iterator
<
- InputCollection const
- >::type iterator_type;
- for(iterator_type it1 = boost::begin(collection1);
+ InputCollection1 const
+ >::type iterator_type1;
+ typedef typename boost::range_iterator
+ <
+ InputCollection2 const
+ >::type iterator_type2;
+ for(iterator_type1 it1 = boost::begin(collection1);
it1 != boost::end(collection1);
++it1)
{
- for(iterator_type it2 = boost::begin(collection2);
+ for(iterator_type2 it2 = boost::begin(collection2);
it2 != boost::end(collection2);
++it2)
{
@@ -417,9 +445,9 @@ public :
}
}
}
-
};
+
}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_PARTITION_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp b/3party/boost/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp
new file mode 100644
index 0000000000..cd3acb5ba4
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp
@@ -0,0 +1,126 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_IS_EQUAL_OR_SPIKE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_IS_EQUAL_OR_SPIKE_HPP
+
+#include <boost/geometry/arithmetic/arithmetic.hpp>
+#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
+#include <boost/geometry/algorithms/detail/recalculate.hpp>
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
+#include <boost/geometry/strategies/side.hpp>
+#include <boost/geometry/util/math.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+// Checks if a point ("last_point") causes a spike w.r.t.
+// the specified two other points (segment_a, segment_b)
+//
+// x-------x------x
+// a lp b
+//
+// Above, lp generates a spike w.r.t. segment(a,b)
+// So specify last point first, then (a,b) (this is unordered, so unintuitive)
+template <typename Point1, typename Point2, typename Point3>
+static inline bool point_is_spike_or_equal(Point1 const& last_point,
+ Point2 const& segment_a,
+ Point3 const& segment_b)
+{
+ typedef typename strategy::side::services::default_strategy
+ <
+ typename cs_tag<Point1>::type
+ >::type side_strategy;
+
+ typedef Point1 vector_type;
+
+ int const side = side_strategy::apply(last_point, segment_a, segment_b);
+ if (side == 0)
+ {
+ // Last point is collinear w.r.t previous segment.
+ // Check if it is equal
+ vector_type diff1;
+ conversion::convert_point_to_point(last_point, diff1);
+ geometry::subtract_point(diff1, segment_b);
+ int const sgn_x1 = math::sign(geometry::get<0>(diff1));
+ int const sgn_y1 = math::sign(geometry::get<1>(diff1));
+ if (sgn_x1 == 0 && sgn_y1 == 0)
+ {
+ return true;
+ }
+
+ // Check if it moves forward
+ vector_type diff2;
+ conversion::convert_point_to_point(segment_b, diff2);
+ geometry::subtract_point(diff2, segment_a);
+ int const sgn_x2 = math::sign(geometry::get<0>(diff2));
+ int const sgn_y2 = math::sign(geometry::get<1>(diff2));
+
+ return sgn_x1 != sgn_x2 || sgn_y1 != sgn_y2;
+ }
+ return false;
+}
+
+template
+<
+ typename Point1,
+ typename Point2,
+ typename Point3,
+ typename RobustPolicy
+>
+static inline bool point_is_spike_or_equal(Point1 const& last_point,
+ Point2 const& segment_a,
+ Point3 const& segment_b,
+ RobustPolicy const& robust_policy)
+{
+ if (point_is_spike_or_equal(last_point, segment_a, segment_b))
+ {
+ return true;
+ }
+
+ if (! RobustPolicy::enabled)
+ {
+ return false;
+ }
+
+ // Try using specified robust policy
+ typedef typename geometry::robust_point_type
+ <
+ Point1,
+ RobustPolicy
+ >::type robust_point_type;
+
+ robust_point_type last_point_rob, segment_a_rob, segment_b_rob;
+ geometry::recalculate(last_point_rob, last_point, robust_policy);
+ geometry::recalculate(segment_a_rob, segment_a, robust_policy);
+ geometry::recalculate(segment_b_rob, segment_b, robust_policy);
+
+ return point_is_spike_or_equal
+ (
+ last_point_rob,
+ segment_a_rob,
+ segment_b_rob
+ );
+}
+
+
+} // namespace detail
+#endif
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_IS_EQUAL_OR_SPIKE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/point_on_border.hpp b/3party/boost/boost/geometry/algorithms/detail/point_on_border.hpp
index b7e15ba3f9..24b88a8d19 100644
--- a/3party/boost/boost/geometry/algorithms/detail/point_on_border.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/point_on_border.hpp
@@ -19,6 +19,7 @@
#include <boost/range.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/core/point_type.hpp>
#include <boost/geometry/core/ring_type.hpp>
@@ -26,7 +27,7 @@
#include <boost/geometry/algorithms/assign.hpp>
#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/detail/disjoint.hpp>
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
namespace boost { namespace geometry
@@ -153,6 +154,35 @@ struct point_on_box
};
+template
+<
+ typename Point,
+ typename MultiGeometry,
+ typename Policy
+>
+struct point_on_multi
+{
+ static inline bool apply(Point& point, MultiGeometry const& multi, bool midpoint)
+ {
+ // Take a point on the first multi-geometry
+ // (i.e. the first that is not empty)
+ for (typename boost::range_iterator
+ <
+ MultiGeometry const
+ >::type it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it)
+ {
+ if (Policy::apply(point, *it, midpoint))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+};
+
+
}} // namespace detail::point_on_border
#endif // DOXYGEN_NO_DETAIL
@@ -203,6 +233,36 @@ struct point_on_border<box_tag, Point, Box>
{};
+template<typename Point, typename Multi>
+struct point_on_border<multi_polygon_tag, Point, Multi>
+ : detail::point_on_border::point_on_multi
+ <
+ Point,
+ Multi,
+ detail::point_on_border::point_on_polygon
+ <
+ Point,
+ typename boost::range_value<Multi>::type
+ >
+ >
+{};
+
+
+template<typename Point, typename Multi>
+struct point_on_border<multi_linestring_tag, Point, Multi>
+ : detail::point_on_border::point_on_multi
+ <
+ Point,
+ Multi,
+ detail::point_on_border::point_on_range
+ <
+ Point,
+ typename boost::range_value<Multi>::type
+ >
+ >
+{};
+
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
@@ -229,8 +289,6 @@ inline bool point_on_border(Point& point,
concept::check<Point>();
concept::check<Geometry const>();
- typedef typename point_type<Geometry>::type point_type;
-
return dispatch::point_on_border
<
typename tag<Geometry>::type,
diff --git a/3party/boost/boost/geometry/algorithms/detail/recalculate.hpp b/3party/boost/boost/geometry/algorithms/detail/recalculate.hpp
new file mode 100644
index 0000000000..2c3ea7413b
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/recalculate.hpp
@@ -0,0 +1,231 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RECALCULATE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RECALCULATE_HPP
+
+
+#include <cstddef>
+
+#include <boost/concept/requires.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/numeric/conversion/bounds.hpp>
+#include <boost/numeric/conversion/cast.hpp>
+#include <boost/type_traits.hpp>
+
+#include <boost/geometry/arithmetic/arithmetic.hpp>
+#include <boost/geometry/algorithms/append.hpp>
+#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace recalculate
+{
+
+template <std::size_t Dimension>
+struct recalculate_point
+{
+ template <typename Point1, typename Point2, typename Strategy>
+ static inline void apply(Point1& point1, Point2 const& point2, Strategy const& strategy)
+ {
+ std::size_t const dim = Dimension - 1;
+ geometry::set<dim>(point1, strategy.template apply<dim>(geometry::get<dim>(point2)));
+ recalculate_point<dim>::apply(point1, point2, strategy);
+ }
+};
+
+template <>
+struct recalculate_point<0>
+{
+ template <typename Point1, typename Point2, typename Strategy>
+ static inline void apply(Point1&, Point2 const&, Strategy const&)
+ {
+ }
+};
+
+
+template <std::size_t Dimension>
+struct recalculate_indexed
+{
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline void apply(Geometry1& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+ {
+ // Do it for both indices in one dimension
+ static std::size_t const dim = Dimension - 1;
+ geometry::set<0, dim>(geometry1, strategy.template apply<dim>(geometry::get<0, dim>(geometry2)));
+ geometry::set<1, dim>(geometry1, strategy.template apply<dim>(geometry::get<1, dim>(geometry2)));
+ recalculate_indexed<dim>::apply(geometry1, geometry2, strategy);
+ }
+};
+
+template <>
+struct recalculate_indexed<0>
+{
+
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline void apply(Geometry1& , Geometry2 const& , Strategy const& )
+ {
+ }
+};
+
+struct range_to_range
+{
+ template
+ <
+ typename Range1,
+ typename Range2,
+ typename Strategy
+ >
+ static inline void apply(Range1& destination, Range2 const& source,
+ Strategy const& strategy)
+ {
+ typedef typename geometry::point_type<Range2>::type point_type;
+ typedef recalculate_point<geometry::dimension<point_type>::value> per_point;
+ geometry::clear(destination);
+
+ for (typename boost::range_iterator<Range2 const>::type it
+ = boost::begin(source);
+ it != boost::end(source);
+ ++it)
+ {
+ point_type p;
+ per_point::apply(p, *it, strategy);
+ geometry::append(destination, p);
+ }
+ }
+};
+
+struct polygon_to_polygon
+{
+private:
+ template
+ <
+ typename IteratorIn,
+ typename IteratorOut,
+ typename Strategy
+ >
+ static inline void iterate(IteratorIn begin, IteratorIn end,
+ IteratorOut it_out,
+ Strategy const& strategy)
+ {
+ for (IteratorIn it_in = begin; it_in != end; ++it_in, ++it_out)
+ {
+ range_to_range::apply(*it_out, *it_in, strategy);
+ }
+ }
+
+ template
+ <
+ typename InteriorRingsOut,
+ typename InteriorRingsIn,
+ typename Strategy
+ >
+ static inline void apply_interior_rings(
+ InteriorRingsOut& interior_rings_out,
+ InteriorRingsIn const& interior_rings_in,
+ Strategy const& strategy)
+ {
+ traits::resize<InteriorRingsOut>::apply(interior_rings_out,
+ boost::size(interior_rings_in));
+
+ iterate(
+ boost::begin(interior_rings_in), boost::end(interior_rings_in),
+ boost::begin(interior_rings_out),
+ strategy);
+ }
+
+public:
+ template
+ <
+ typename Polygon1,
+ typename Polygon2,
+ typename Strategy
+ >
+ static inline void apply(Polygon1& destination, Polygon2 const& source,
+ Strategy const& strategy)
+ {
+ range_to_range::apply(geometry::exterior_ring(destination),
+ geometry::exterior_ring(source), strategy);
+
+ apply_interior_rings(geometry::interior_rings(destination),
+ geometry::interior_rings(source), strategy);
+ }
+};
+
+}} // namespace detail::recalculate
+#endif // DOXYGEN_NO_DETAIL
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+template
+<
+ typename Geometry1,
+ typename Geometry2,
+ typename Tag1 = typename geometry::tag<Geometry1>::type,
+ typename Tag2 = typename geometry::tag<Geometry2>::type
+>
+struct recalculate : not_implemented<Tag1, Tag2>
+{};
+
+template <typename Point1, typename Point2>
+struct recalculate<Point1, Point2, point_tag, point_tag>
+ : detail::recalculate::recalculate_point<geometry::dimension<Point1>::value>
+{};
+
+template <typename Box1, typename Box2>
+struct recalculate<Box1, Box2, box_tag, box_tag>
+ : detail::recalculate::recalculate_indexed<geometry::dimension<Box1>::value>
+{};
+
+template <typename Segment1, typename Segment2>
+struct recalculate<Segment1, Segment2, segment_tag, segment_tag>
+ : detail::recalculate::recalculate_indexed<geometry::dimension<Segment1>::value>
+{};
+
+template <typename Polygon1, typename Polygon2>
+struct recalculate<Polygon1, Polygon2, polygon_tag, polygon_tag>
+ : detail::recalculate::polygon_to_polygon
+{};
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+
+template <typename Geometry1, typename Geometry2, typename Strategy>
+inline void recalculate(Geometry1& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+{
+ concept::check<Geometry1>();
+ concept::check<Geometry2 const>();
+
+ // static assert dimensions (/types) are the same
+
+ dispatch::recalculate<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
+}
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RECALCULATE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/areal_areal.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/areal_areal.hpp
new file mode 100644
index 0000000000..1896b0ffa7
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/areal_areal.hpp
@@ -0,0 +1,823 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_AREAL_AREAL_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_AREAL_AREAL_HPP
+
+#include <boost/geometry/core/topological_dimension.hpp>
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/algorithms/num_interior_rings.hpp>
+#include <boost/geometry/algorithms/detail/point_on_border.hpp>
+#include <boost/geometry/algorithms/detail/sub_range.hpp>
+#include <boost/geometry/algorithms/detail/single_geometry.hpp>
+
+#include <boost/geometry/algorithms/detail/relate/point_geometry.hpp>
+#include <boost/geometry/algorithms/detail/relate/turns.hpp>
+#include <boost/geometry/algorithms/detail/relate/boundary_checker.hpp>
+#include <boost/geometry/algorithms/detail/relate/follow_helpers.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+// WARNING!
+// TODO: In the worst case calling this Pred in a loop for MultiPolygon/MultiPolygon may take O(NM)
+// Use the rtree in this case!
+
+// may be used to set EI and EB for an Areal geometry for which no turns were generated
+template <typename OtherAreal, typename Result, bool TransposeResult>
+class no_turns_aa_pred
+{
+public:
+ no_turns_aa_pred(OtherAreal const& other_areal, Result & res)
+ : m_result(res)
+ , m_other_areal(other_areal)
+ , m_flags(0)
+ {
+ // check which relations must be analysed
+
+ if ( ! may_update<interior, interior, '2', TransposeResult>(m_result)
+ && ! may_update<boundary, interior, '1', TransposeResult>(m_result)
+ && ! may_update<exterior, interior, '2', TransposeResult>(m_result) )
+ {
+ m_flags |= 1;
+ }
+
+ if ( ! may_update<interior, exterior, '2', TransposeResult>(m_result)
+ && ! may_update<boundary, exterior, '1', TransposeResult>(m_result) )
+ {
+ m_flags |= 2;
+ }
+ }
+
+ template <typename Areal>
+ bool operator()(Areal const& areal)
+ {
+ // if those flags are set nothing will change
+ if ( m_flags == 3 )
+ {
+ return false;
+ }
+
+ typedef typename geometry::point_type<Areal>::type point_type;
+ point_type pt;
+ bool const ok = boost::geometry::point_on_border(pt, areal);
+
+ // TODO: for now ignore, later throw an exception?
+ if ( !ok )
+ {
+ return true;
+ }
+
+ // check if the areal is inside the other_areal
+ // TODO: This is O(N)
+ // Run in a loop O(NM) - optimize!
+ int const pig = detail::within::point_in_geometry(pt, m_other_areal);
+ //BOOST_ASSERT( pig != 0 );
+
+ // inside
+ if ( pig > 0 )
+ {
+ update<interior, interior, '2', TransposeResult>(m_result);
+ update<boundary, interior, '1', TransposeResult>(m_result);
+ update<exterior, interior, '2', TransposeResult>(m_result);
+ m_flags |= 1;
+
+ // TODO: OPTIMIZE!
+ // Only the interior rings of other ONE single geometry must be checked
+ // NOT all geometries
+
+ // Check if any interior ring is outside
+ ring_identifier ring_id(0, -1, 0);
+ int const irings_count = boost::numeric_cast<int>(
+ geometry::num_interior_rings(areal) );
+ for ( ; ring_id.ring_index < irings_count ; ++ring_id.ring_index )
+ {
+ typename detail::sub_range_return_type<Areal const>::type
+ range_ref = detail::sub_range(areal, ring_id);
+
+ if ( boost::empty(range_ref) )
+ {
+ // TODO: throw exception?
+ continue; // ignore
+ }
+
+ // TODO: O(N)
+ // Optimize!
+ int const hpig = detail::within::point_in_geometry(range::front(range_ref), m_other_areal);
+
+ // hole outside
+ if ( hpig < 0 )
+ {
+ update<interior, exterior, '2', TransposeResult>(m_result);
+ update<boundary, exterior, '1', TransposeResult>(m_result);
+ m_flags |= 2;
+ break;
+ }
+ }
+ }
+ // outside
+ else
+ {
+ update<interior, exterior, '2', TransposeResult>(m_result);
+ update<boundary, exterior, '1', TransposeResult>(m_result);
+ m_flags |= 2;
+
+ // Check if any interior ring is inside
+ ring_identifier ring_id(0, -1, 0);
+ int const irings_count = boost::numeric_cast<int>(
+ geometry::num_interior_rings(areal) );
+ for ( ; ring_id.ring_index < irings_count ; ++ring_id.ring_index )
+ {
+ typename detail::sub_range_return_type<Areal const>::type
+ range_ref = detail::sub_range(areal, ring_id);
+
+ if ( boost::empty(range_ref) )
+ {
+ // TODO: throw exception?
+ continue; // ignore
+ }
+
+ // TODO: O(N)
+ // Optimize!
+ int const hpig = detail::within::point_in_geometry(range::front(range_ref), m_other_areal);
+
+ // hole inside
+ if ( hpig > 0 )
+ {
+ update<interior, interior, '2', TransposeResult>(m_result);
+ update<boundary, interior, '1', TransposeResult>(m_result);
+ update<exterior, interior, '2', TransposeResult>(m_result);
+ m_flags |= 1;
+ break;
+ }
+ }
+ }
+
+ return m_flags != 3 && !m_result.interrupt;
+ }
+
+private:
+ Result & m_result;
+ OtherAreal const& m_other_areal;
+ int m_flags;
+};
+
+// The implementation of an algorithm calculating relate() for A/A
+template <typename Geometry1, typename Geometry2>
+struct areal_areal
+{
+ // check Linear / Areal
+ BOOST_STATIC_ASSERT(topological_dimension<Geometry1>::value == 2
+ && topological_dimension<Geometry2>::value == 2);
+
+ static const bool interruption_enabled = true;
+
+ typedef typename geometry::point_type<Geometry1>::type point1_type;
+ typedef typename geometry::point_type<Geometry2>::type point2_type;
+
+ template <typename Result>
+ static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Result & result)
+ {
+// TODO: If Areal geometry may have infinite size, change the following line:
+
+ // The result should be FFFFFFFFF
+ relate::set<exterior, exterior, result_dimension<Geometry2>::value>(result);// FFFFFFFFd, d in [1,9] or T
+
+ if ( result.interrupt )
+ return;
+
+ // get and analyse turns
+ typedef typename turns::get_turns<Geometry1, Geometry2>::turn_info turn_type;
+ std::vector<turn_type> turns;
+
+ interrupt_policy_areal_areal<Result> interrupt_policy(geometry1, geometry2, result);
+
+ turns::get_turns<Geometry1, Geometry2>::apply(turns, geometry1, geometry2, interrupt_policy);
+ if ( result.interrupt )
+ return;
+
+ no_turns_aa_pred<Geometry2, Result, false> pred1(geometry2, result);
+ for_each_disjoint_geometry_if<0, Geometry1>::apply(turns.begin(), turns.end(), geometry1, pred1);
+ if ( result.interrupt )
+ return;
+
+ no_turns_aa_pred<Geometry1, Result, true> pred2(geometry1, result);
+ for_each_disjoint_geometry_if<1, Geometry2>::apply(turns.begin(), turns.end(), geometry2, pred2);
+ if ( result.interrupt )
+ return;
+
+ if ( turns.empty() )
+ return;
+
+ if ( may_update<interior, interior, '2'>(result)
+ || may_update<interior, exterior, '2'>(result)
+ || may_update<boundary, interior, '1'>(result)
+ || may_update<boundary, exterior, '1'>(result)
+ || may_update<exterior, interior, '2'>(result) )
+ {
+ // sort turns
+ typedef turns::less<0, turns::less_op_areal_areal> less;
+ std::sort(turns.begin(), turns.end(), less());
+
+ /*if ( may_update<interior, exterior, '2'>(result)
+ || may_update<boundary, exterior, '1'>(result)
+ || may_update<boundary, interior, '1'>(result)
+ || may_update<exterior, interior, '2'>(result) )*/
+ {
+ // analyse sorted turns
+ turns_analyser<turn_type, 0> analyser;
+ analyse_each_turn(result, analyser, turns.begin(), turns.end());
+
+ if ( result.interrupt )
+ return;
+ }
+
+ if ( may_update<interior, interior, '2'>(result)
+ || may_update<interior, exterior, '2'>(result)
+ || may_update<boundary, interior, '1'>(result)
+ || may_update<boundary, exterior, '1'>(result)
+ || may_update<exterior, interior, '2'>(result) )
+ {
+ // analyse rings for which turns were not generated
+ // or only i/i or u/u was generated
+ uncertain_rings_analyser<0, Result, Geometry1, Geometry2> rings_analyser(result, geometry1, geometry2);
+ analyse_uncertain_rings<0>::apply(rings_analyser, turns.begin(), turns.end());
+
+ if ( result.interrupt )
+ return;
+ }
+ }
+
+ if ( may_update<interior, interior, '2', true>(result)
+ || may_update<interior, exterior, '2', true>(result)
+ || may_update<boundary, interior, '1', true>(result)
+ || may_update<boundary, exterior, '1', true>(result)
+ || may_update<exterior, interior, '2', true>(result) )
+ {
+ // sort turns
+ typedef turns::less<1, turns::less_op_areal_areal> less;
+ std::sort(turns.begin(), turns.end(), less());
+
+ /*if ( may_update<interior, exterior, '2', true>(result)
+ || may_update<boundary, exterior, '1', true>(result)
+ || may_update<boundary, interior, '1', true>(result)
+ || may_update<exterior, interior, '2', true>(result) )*/
+ {
+ // analyse sorted turns
+ turns_analyser<turn_type, 1> analyser;
+ analyse_each_turn(result, analyser, turns.begin(), turns.end());
+
+ if ( result.interrupt )
+ return;
+ }
+
+ if ( may_update<interior, interior, '2', true>(result)
+ || may_update<interior, exterior, '2', true>(result)
+ || may_update<boundary, interior, '1', true>(result)
+ || may_update<boundary, exterior, '1', true>(result)
+ || may_update<exterior, interior, '2', true>(result) )
+ {
+ // analyse rings for which turns were not generated
+ // or only i/i or u/u was generated
+ uncertain_rings_analyser<1, Result, Geometry2, Geometry1> rings_analyser(result, geometry2, geometry1);
+ analyse_uncertain_rings<1>::apply(rings_analyser, turns.begin(), turns.end());
+
+ //if ( result.interrupt )
+ // return;
+ }
+ }
+ }
+
+ // interrupt policy which may be passed to get_turns to interrupt the analysis
+ // based on the info in the passed result/mask
+ template <typename Result>
+ class interrupt_policy_areal_areal
+ {
+ public:
+ static bool const enabled = true;
+
+ interrupt_policy_areal_areal(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Result & result)
+ : m_result(result)
+ , m_geometry1(geometry1)
+ , m_geometry2(geometry2)
+ {}
+
+ template <typename Range>
+ inline bool apply(Range const& turns)
+ {
+ typedef typename boost::range_iterator<Range const>::type iterator;
+
+ for (iterator it = boost::begin(turns) ; it != boost::end(turns) ; ++it)
+ {
+ per_turn<0>(*it);
+ per_turn<1>(*it);
+ }
+
+ return m_result.interrupt;
+ }
+
+ private:
+ template <std::size_t OpId, typename Turn>
+ inline void per_turn(Turn const& turn)
+ {
+ static const std::size_t other_op_id = (OpId + 1) % 2;
+ static const bool transpose_result = OpId != 0;
+
+ overlay::operation_type const op = turn.operations[OpId].operation;
+
+ if ( op == overlay::operation_union )
+ {
+ // ignore u/u
+ /*if ( turn.operations[other_op_id].operation != overlay::operation_union )
+ {
+ update<interior, exterior, '2', transpose_result>(m_result);
+ update<boundary, exterior, '1', transpose_result>(m_result);
+ }*/
+
+ update<boundary, boundary, '0', transpose_result>(m_result);
+ }
+ else if ( op == overlay::operation_intersection )
+ {
+ // ignore i/i
+ if ( turn.operations[other_op_id].operation != overlay::operation_intersection )
+ {
+ update<interior, interior, '2', transpose_result>(m_result);
+ //update<boundary, interior, '1', transpose_result>(m_result);
+ }
+
+ update<boundary, boundary, '0', transpose_result>(m_result);
+ }
+ else if ( op == overlay::operation_continue )
+ {
+ update<boundary, boundary, '1', transpose_result>(m_result);
+ update<interior, interior, '2', transpose_result>(m_result);
+ }
+ else if ( op == overlay::operation_blocked )
+ {
+ update<boundary, boundary, '1', transpose_result>(m_result);
+ update<interior, exterior, '2', transpose_result>(m_result);
+ }
+ }
+
+ Result & m_result;
+ Geometry1 const& m_geometry1;
+ Geometry2 const& m_geometry2;
+ };
+
+ // This analyser should be used like Input or SinglePass Iterator
+ // IMPORTANT! It should be called also for the end iterator - last
+ template <typename TurnInfo, std::size_t OpId>
+ class turns_analyser
+ {
+ typedef typename TurnInfo::point_type turn_point_type;
+
+ static const std::size_t op_id = OpId;
+ static const std::size_t other_op_id = (OpId + 1) % 2;
+ static const bool transpose_result = OpId != 0;
+
+ public:
+ turns_analyser()
+ : m_previous_turn_ptr(0)
+ , m_previous_operation(overlay::operation_none)
+ , m_enter_detected(false)
+ , m_exit_detected(false)
+ {}
+
+ template <typename Result,
+ typename TurnIt>
+ void apply(Result & result, TurnIt it)
+ {
+ //BOOST_ASSERT( it != last );
+
+ overlay::operation_type const op = it->operations[op_id].operation;
+
+ if ( op != overlay::operation_union
+ && op != overlay::operation_intersection
+ && op != overlay::operation_blocked
+ && op != overlay::operation_continue )
+ {
+ return;
+ }
+
+ segment_identifier const& seg_id = it->operations[op_id].seg_id;
+ //segment_identifier const& other_id = it->operations[other_op_id].seg_id;
+
+ const bool first_in_range = m_seg_watcher.update(seg_id);
+
+ if ( m_previous_turn_ptr )
+ {
+ if ( m_exit_detected /*m_previous_operation == overlay::operation_union*/ )
+ {
+ // real exit point - may be multiple
+ if ( first_in_range
+ || ! turn_on_the_same_ip<op_id>(*m_previous_turn_ptr, *it) )
+ {
+ update_exit(result);
+ m_exit_detected = false;
+ }
+ // fake exit point, reset state
+ else if ( op != overlay::operation_union )
+ {
+ m_exit_detected = false;
+ }
+ }
+ /*else*/
+ if ( m_enter_detected /*m_previous_operation == overlay::operation_intersection*/ )
+ {
+ // real entry point
+ if ( first_in_range
+ || ! turn_on_the_same_ip<op_id>(*m_previous_turn_ptr, *it) )
+ {
+ update_enter(result);
+ m_enter_detected = false;
+ }
+ // fake entry point, reset state
+ else if ( op != overlay::operation_intersection )
+ {
+ m_enter_detected = false;
+ }
+ }
+ }
+
+ if ( op == overlay::operation_union )
+ {
+ // already set in interrupt policy
+ //update<boundary, boundary, '0', transpose_result>(m_result);
+
+ // ignore u/u
+ //if ( it->operations[other_op_id].operation != overlay::operation_union )
+ {
+ m_exit_detected = true;
+ }
+ }
+ else if ( op == overlay::operation_intersection )
+ {
+ // ignore i/i
+ if ( it->operations[other_op_id].operation != overlay::operation_intersection )
+ {
+ // already set in interrupt policy
+ //update<interior, interior, '2', transpose_result>(result);
+ //update<boundary, boundary, '0', transpose_result>(result);
+ m_enter_detected = true;
+ }
+ }
+ else if ( op == overlay::operation_blocked )
+ {
+ // already set in interrupt policy
+ }
+ else // if ( op == overlay::operation_continue )
+ {
+ // already set in interrupt policy
+ }
+
+ // store ref to previously analysed (valid) turn
+ m_previous_turn_ptr = boost::addressof(*it);
+ // and previously analysed (valid) operation
+ m_previous_operation = op;
+ }
+
+ // it == last
+ template <typename Result>
+ void apply(Result & result)
+ {
+ //BOOST_ASSERT( first != last );
+
+ if ( m_exit_detected /*m_previous_operation == overlay::operation_union*/ )
+ {
+ update_exit(result);
+ m_exit_detected = false;
+ }
+
+ if ( m_enter_detected /*m_previous_operation == overlay::operation_intersection*/ )
+ {
+ update_enter(result);
+ m_enter_detected = false;
+ }
+ }
+
+ template <typename Result>
+ static inline void update_exit(Result & result)
+ {
+ update<interior, exterior, '2', transpose_result>(result);
+ update<boundary, exterior, '1', transpose_result>(result);
+ }
+
+ template <typename Result>
+ static inline void update_enter(Result & result)
+ {
+ update<boundary, interior, '1', transpose_result>(result);
+ update<exterior, interior, '2', transpose_result>(result);
+ }
+
+ private:
+ segment_watcher<same_ring> m_seg_watcher;
+ TurnInfo * m_previous_turn_ptr;
+ overlay::operation_type m_previous_operation;
+ bool m_enter_detected;
+ bool m_exit_detected;
+ };
+
+ // call analyser.apply() for each turn in range
+ // IMPORTANT! The analyser is also called for the end iterator - last
+ template <typename Result,
+ typename Analyser,
+ typename TurnIt>
+ static inline void analyse_each_turn(Result & res,
+ Analyser & analyser,
+ TurnIt first, TurnIt last)
+ {
+ if ( first == last )
+ return;
+
+ for ( TurnIt it = first ; it != last ; ++it )
+ {
+ analyser.apply(res, it);
+
+ if ( res.interrupt )
+ return;
+ }
+
+ analyser.apply(res);
+ }
+
+ template <std::size_t OpId, typename Result, typename Geometry, typename OtherGeometry>
+ class uncertain_rings_analyser
+ {
+ static const bool transpose_result = OpId != 0;
+ static const int other_id = (OpId + 1) % 2;
+
+ public:
+ inline uncertain_rings_analyser(Result & result,
+ Geometry const& geom,
+ OtherGeometry const& other_geom)
+ : geometry(geom), other_geometry(other_geom)
+ , interrupt(result.interrupt) // just in case, could be false as well
+ , m_result(result)
+ , m_flags(0)
+ {
+ // check which relations must be analysed
+
+ if ( ! may_update<interior, interior, '2', transpose_result>(m_result)
+ && ! may_update<boundary, interior, '1', transpose_result>(m_result) )
+ {
+ m_flags |= 1;
+ }
+
+ if ( ! may_update<interior, exterior, '2', transpose_result>(m_result)
+ && ! may_update<boundary, exterior, '1', transpose_result>(m_result) )
+ {
+ m_flags |= 2;
+ }
+
+ if ( ! may_update<boundary, interior, '1', transpose_result>(m_result)
+ && ! may_update<exterior, interior, '2', transpose_result>(m_result) )
+ {
+ m_flags |= 4;
+ }
+ }
+
+ inline void no_turns(segment_identifier const& seg_id)
+ {
+ // if those flags are set nothing will change
+ if ( (m_flags & 3) == 3 )
+ {
+ return;
+ }
+
+ typename detail::sub_range_return_type<Geometry const>::type
+ range_ref = detail::sub_range(geometry, seg_id);
+
+ if ( boost::empty(range_ref) )
+ {
+ // TODO: throw an exception?
+ return; // ignore
+ }
+
+ // TODO: possible optimization
+ // if the range is an interior ring we may use other IPs generated for this single geometry
+ // to know which other single geometries should be checked
+
+ // TODO: optimize! e.g. use spatial index
+ // O(N) - running it in a loop would gives O(NM)
+ int const pig = detail::within::point_in_geometry(range::front(range_ref), other_geometry);
+
+ //BOOST_ASSERT(pig != 0);
+ if ( pig > 0 )
+ {
+ update<boundary, interior, '1', transpose_result>(m_result);
+ update<interior, interior, '2', transpose_result>(m_result);
+ m_flags |= 1;
+ }
+ else
+ {
+ update<boundary, exterior, '1', transpose_result>(m_result);
+ update<interior, exterior, '2', transpose_result>(m_result);
+ m_flags |= 2;
+ }
+
+// TODO: break if all things are set
+// also some of them could be checked outside, before the analysis
+// In this case we shouldn't relay just on dummy flags
+// Flags should be initialized with proper values
+// or the result should be checked directly
+// THIS IS ALSO TRUE FOR OTHER ANALYSERS! in L/L and L/A
+
+ interrupt = m_flags == 7 || m_result.interrupt;
+ }
+
+ template <typename TurnIt>
+ inline void turns(TurnIt first, TurnIt last)
+ {
+ // if those flags are set nothing will change
+ if ( (m_flags & 6) == 6 )
+ {
+ return;
+ }
+
+ bool found_ii = false;
+ bool found_uu = false;
+
+ for ( TurnIt it = first ; it != last ; ++it )
+ {
+ if ( it->operations[0].operation == overlay::operation_intersection
+ && it->operations[1].operation == overlay::operation_intersection )
+ {
+ // ignore exterior ring
+ if ( it->operations[OpId].seg_id.ring_index >= 0 )
+ {
+ found_ii = true;
+ }
+ }
+ else if ( it->operations[0].operation == overlay::operation_union
+ && it->operations[1].operation == overlay::operation_union )
+ {
+ // ignore if u/u is for holes
+ //if ( it->operations[OpId].seg_id.ring_index >= 0
+ // && it->operations[other_id].seg_id.ring_index >= 0 )
+ {
+ found_uu = true;
+ }
+ }
+ else // ignore
+ {
+ return; // don't interrupt
+ }
+ }
+
+ // only i/i was generated for this ring
+ if ( found_ii )
+ {
+ //update<interior, interior, '0', transpose_result>(m_result);
+ //update<boundary, boundary, '0', transpose_result>(m_result);
+ update<boundary, interior, '1', transpose_result>(m_result);
+ update<exterior, interior, '2', transpose_result>(m_result);
+ m_flags |= 4;
+ }
+
+ // only u/u was generated for this ring
+ if ( found_uu )
+ {
+ update<boundary, exterior, '1', transpose_result>(m_result);
+ update<interior, exterior, '2', transpose_result>(m_result);
+ m_flags |= 2;
+
+ // not necessary since this will be checked in the next iteration
+ // but increases the pruning strength
+ // WARNING: this is not reflected in flags
+ update<exterior, boundary, '1', transpose_result>(m_result);
+ update<exterior, interior, '2', transpose_result>(m_result);
+ }
+
+ interrupt = m_flags == 7 || m_result.interrupt; // interrupt if the result won't be changed in the future
+ }
+
+ Geometry const& geometry;
+ OtherGeometry const& other_geometry;
+ bool interrupt;
+
+ private:
+ Result & m_result;
+ int m_flags;
+ };
+
+ template <std::size_t OpId>
+ class analyse_uncertain_rings
+ {
+ public:
+ template <typename Analyser, typename TurnIt>
+ static inline void apply(Analyser & analyser, TurnIt first, TurnIt last)
+ {
+ if ( first == last )
+ return;
+
+ for_preceding_rings(analyser, *first);
+ //analyser.per_turn(*first);
+
+ TurnIt prev = first;
+ for ( ++first ; first != last ; ++first, ++prev )
+ {
+ // same multi
+ if ( prev->operations[OpId].seg_id.multi_index
+ == first->operations[OpId].seg_id.multi_index )
+ {
+ // same ring
+ if ( prev->operations[OpId].seg_id.ring_index
+ == first->operations[OpId].seg_id.ring_index )
+ {
+ //analyser.per_turn(*first);
+ }
+ // same multi, next ring
+ else
+ {
+ //analyser.end_ring(*prev);
+ analyser.turns(prev, first);
+
+ //if ( prev->operations[OpId].seg_id.ring_index + 1
+ // < first->operations[OpId].seg_id.ring_index)
+ {
+ for_no_turns_rings(analyser,
+ *first,
+ prev->operations[OpId].seg_id.ring_index + 1,
+ first->operations[OpId].seg_id.ring_index);
+ }
+
+ //analyser.per_turn(*first);
+ }
+ }
+ // next multi
+ else
+ {
+ //analyser.end_ring(*prev);
+ analyser.turns(prev, first);
+ for_following_rings(analyser, *prev);
+ for_preceding_rings(analyser, *first);
+ //analyser.per_turn(*first);
+ }
+
+ if ( analyser.interrupt )
+ {
+ return;
+ }
+ }
+
+ //analyser.end_ring(*prev);
+ analyser.turns(prev, first); // first == last
+ for_following_rings(analyser, *prev);
+ }
+
+ private:
+ template <typename Analyser, typename Turn>
+ static inline void for_preceding_rings(Analyser & analyser, Turn const& turn)
+ {
+ segment_identifier const& seg_id = turn.operations[OpId].seg_id;
+
+ for_no_turns_rings(analyser, turn, -1, seg_id.ring_index);
+ }
+
+ template <typename Analyser, typename Turn>
+ static inline void for_following_rings(Analyser & analyser, Turn const& turn)
+ {
+ segment_identifier const& seg_id = turn.operations[OpId].seg_id;
+
+ int count = boost::numeric_cast<int>(
+ geometry::num_interior_rings(
+ detail::single_geometry(analyser.geometry, seg_id)));
+
+ for_no_turns_rings(analyser, turn, seg_id.ring_index + 1, count);
+ }
+
+ template <typename Analyser, typename Turn>
+ static inline void for_no_turns_rings(Analyser & analyser, Turn const& turn, int first, int last)
+ {
+ segment_identifier seg_id = turn.operations[OpId].seg_id;
+
+ for ( seg_id.ring_index = first ; seg_id.ring_index < last ; ++seg_id.ring_index )
+ {
+ analyser.no_turns(seg_id);
+ }
+ }
+ };
+};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_AREAL_AREAL_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/boundary_checker.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/boundary_checker.hpp
new file mode 100644
index 0000000000..f98c3e9b82
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/boundary_checker.hpp
@@ -0,0 +1,134 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_BOUNDARY_CHECKER_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_BOUNDARY_CHECKER_HPP
+
+#include <boost/geometry/util/range.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/algorithms/detail/sub_range.hpp>
+
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+enum boundary_query { boundary_front, boundary_back, boundary_any };
+
+template <typename Geometry,
+ typename Tag = typename geometry::tag<Geometry>::type>
+class boundary_checker {};
+
+template <typename Geometry>
+class boundary_checker<Geometry, linestring_tag>
+{
+ typedef typename point_type<Geometry>::type point_type;
+
+public:
+ boundary_checker(Geometry const& g)
+ : has_boundary( boost::size(g) >= 2
+ && !detail::equals::equals_point_point(range::front(g), range::back(g)) )
+ , geometry(g)
+ {}
+
+ template <boundary_query BoundaryQuery>
+ bool is_endpoint_boundary(point_type const& pt) const
+ {
+ boost::ignore_unused_variable_warning(pt);
+#ifdef BOOST_GEOMETRY_DEBUG_RELATE_BOUNDARY_CHECKER
+ // may give false positives for INT
+ BOOST_ASSERT( (BoundaryQuery == boundary_front || BoundaryQuery == boundary_any)
+ && detail::equals::equals_point_point(pt, range::front(geometry))
+ || (BoundaryQuery == boundary_back || BoundaryQuery == boundary_any)
+ && detail::equals::equals_point_point(pt, range::back(geometry)) );
+#endif
+ return has_boundary;
+ }
+
+private:
+ bool has_boundary;
+ Geometry const& geometry;
+};
+
+template <typename Geometry>
+class boundary_checker<Geometry, multi_linestring_tag>
+{
+ typedef typename point_type<Geometry>::type point_type;
+
+public:
+ boundary_checker(Geometry const& g)
+ : is_filled(false), geometry(g)
+ {}
+
+ // First call O(NlogN)
+ // Each next call O(logN)
+ template <boundary_query BoundaryQuery>
+ bool is_endpoint_boundary(point_type const& pt) const
+ {
+ typedef typename boost::range_size<Geometry>::type size_type;
+ size_type multi_count = boost::size(geometry);
+
+ if ( multi_count < 1 )
+ return false;
+
+ if ( ! is_filled )
+ {
+ //boundary_points.clear();
+ boundary_points.reserve(multi_count * 2);
+
+ typedef typename boost::range_iterator<Geometry const>::type multi_iterator;
+ for ( multi_iterator it = boost::begin(geometry) ;
+ it != boost::end(geometry) ; ++ it )
+ {
+ // empty or point - no boundary
+ if ( boost::size(*it) < 2 )
+ continue;
+
+ // linear ring or point - no boundary
+ if ( equals::equals_point_point(range::front(*it), range::back(*it)) )
+ continue;
+
+ boundary_points.push_back(range::front(*it));
+ boundary_points.push_back(range::back(*it));
+ }
+
+ std::sort(boundary_points.begin(), boundary_points.end(), geometry::less<point_type>());
+
+ is_filled = true;
+ }
+
+ std::size_t equal_points_count
+ = boost::size(
+ std::equal_range(boundary_points.begin(),
+ boundary_points.end(),
+ pt,
+ geometry::less<point_type>())
+ );
+
+ return equal_points_count % 2 != 0;// && equal_points_count > 0; // the number is odd and > 0
+ }
+
+private:
+ mutable bool is_filled;
+ // TODO: store references/pointers instead of points?
+ mutable std::vector<point_type> boundary_points;
+
+ Geometry const& geometry;
+};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_BOUNDARY_CHECKER_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/follow_helpers.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/follow_helpers.hpp
new file mode 100644
index 0000000000..78fa03798d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/follow_helpers.hpp
@@ -0,0 +1,401 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_FOLLOW_HELPERS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_FOLLOW_HELPERS_HPP
+
+#include <boost/geometry/util/range.hpp>
+//#include <boost/geometry/algorithms/detail/sub_range.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+// NOTE: This iterates through single geometries for which turns were not generated.
+// It doesn't mean that the geometry is disjoint, only that no turns were detected.
+
+template <std::size_t OpId,
+ typename Geometry,
+ typename Tag = typename geometry::tag<Geometry>::type,
+ bool IsMulti = boost::is_base_of<multi_tag, Tag>::value
+>
+struct for_each_disjoint_geometry_if
+ : public not_implemented<Tag>
+{};
+
+template <std::size_t OpId, typename Geometry, typename Tag>
+struct for_each_disjoint_geometry_if<OpId, Geometry, Tag, false>
+{
+ template <typename TurnIt, typename Pred>
+ static inline bool apply(TurnIt first, TurnIt last,
+ Geometry const& geometry,
+ Pred & pred)
+ {
+ if ( first != last )
+ return false;
+ pred(geometry);
+ return true;
+ }
+};
+
+template <std::size_t OpId, typename Geometry, typename Tag>
+struct for_each_disjoint_geometry_if<OpId, Geometry, Tag, true>
+{
+ template <typename TurnIt, typename Pred>
+ static inline bool apply(TurnIt first, TurnIt last,
+ Geometry const& geometry,
+ Pred & pred)
+ {
+ if ( first != last )
+ return for_turns(first, last, geometry, pred);
+ else
+ return for_empty(geometry, pred);
+ }
+
+ template <typename Pred>
+ static inline bool for_empty(Geometry const& geometry,
+ Pred & pred)
+ {
+ typedef typename boost::range_iterator<Geometry const>::type iterator;
+
+ // O(N)
+ // check predicate for each contained geometry without generated turn
+ for ( iterator it = boost::begin(geometry) ;
+ it != boost::end(geometry) ; ++it )
+ {
+ bool cont = pred(*it);
+ if ( !cont )
+ break;
+ }
+
+ return !boost::empty(geometry);
+ }
+
+ template <typename TurnIt, typename Pred>
+ static inline bool for_turns(TurnIt first, TurnIt last,
+ Geometry const& geometry,
+ Pred & pred)
+ {
+ BOOST_ASSERT(first != last);
+
+ const std::size_t count = boost::size(geometry);
+ boost::ignore_unused_variable_warning(count);
+
+ // O(I)
+ // gather info about turns generated for contained geometries
+ std::vector<bool> detected_intersections(count, false);
+ for ( TurnIt it = first ; it != last ; ++it )
+ {
+ int multi_index = it->operations[OpId].seg_id.multi_index;
+ BOOST_ASSERT(multi_index >= 0);
+ std::size_t index = static_cast<std::size_t>(multi_index);
+ BOOST_ASSERT(index < count);
+ detected_intersections[index] = true;
+ }
+
+ bool found = false;
+
+ // O(N)
+ // check predicate for each contained geometry without generated turn
+ for ( std::vector<bool>::iterator it = detected_intersections.begin() ;
+ it != detected_intersections.end() ; ++it )
+ {
+ // if there were no intersections for this multi_index
+ if ( *it == false )
+ {
+ found = true;
+ bool cont = pred(range::at(geometry,
+ std::distance(detected_intersections.begin(), it)));
+ if ( !cont )
+ break;
+ }
+ }
+
+ return found;
+ }
+};
+
+// WARNING! This class stores pointers!
+// Passing a reference to local variable will result in undefined behavior!
+template <typename Point>
+class point_info
+{
+public:
+ point_info() : sid_ptr(NULL), pt_ptr(NULL) {}
+ point_info(Point const& pt, segment_identifier const& sid)
+ : sid_ptr(boost::addressof(sid))
+ , pt_ptr(boost::addressof(pt))
+ {}
+ segment_identifier const& seg_id() const
+ {
+ BOOST_ASSERT(sid_ptr);
+ return *sid_ptr;
+ }
+ Point const& point() const
+ {
+ BOOST_ASSERT(pt_ptr);
+ return *pt_ptr;
+ }
+
+ //friend bool operator==(point_identifier const& l, point_identifier const& r)
+ //{
+ // return l.seg_id() == r.seg_id()
+ // && detail::equals::equals_point_point(l.point(), r.point());
+ //}
+
+private:
+ const segment_identifier * sid_ptr;
+ const Point * pt_ptr;
+};
+
+// WARNING! This class stores pointers!
+// Passing a reference to local variable will result in undefined behavior!
+class same_single
+{
+public:
+ same_single(segment_identifier const& sid)
+ : sid_ptr(boost::addressof(sid))
+ {}
+
+ bool operator()(segment_identifier const& sid) const
+ {
+ return sid.multi_index == sid_ptr->multi_index;
+ }
+
+ template <typename Point>
+ bool operator()(point_info<Point> const& pid) const
+ {
+ return operator()(pid.seg_id());
+ }
+
+private:
+ const segment_identifier * sid_ptr;
+};
+
+class same_ring
+{
+public:
+ same_ring(segment_identifier const& sid)
+ : sid_ptr(boost::addressof(sid))
+ {}
+
+ bool operator()(segment_identifier const& sid) const
+ {
+ return sid.multi_index == sid_ptr->multi_index
+ && sid.ring_index == sid_ptr->ring_index;
+ }
+
+private:
+ const segment_identifier * sid_ptr;
+};
+
+// WARNING! This class stores pointers!
+// Passing a reference to local variable will result in undefined behavior!
+template <typename SameRange = same_single>
+class segment_watcher
+{
+public:
+ segment_watcher()
+ : m_seg_id_ptr(NULL)
+ {}
+
+ bool update(segment_identifier const& seg_id)
+ {
+ bool result = m_seg_id_ptr == 0 || !SameRange(*m_seg_id_ptr)(seg_id);
+ m_seg_id_ptr = boost::addressof(seg_id);
+ return result;
+ }
+
+private:
+ const segment_identifier * m_seg_id_ptr;
+};
+
+// WARNING! This class stores pointers!
+// Passing a reference to local variable will result in undefined behavior!
+template <typename TurnInfo, std::size_t OpId>
+class exit_watcher
+{
+ static const std::size_t op_id = OpId;
+ static const std::size_t other_op_id = (OpId + 1) % 2;
+
+ typedef typename TurnInfo::point_type point_type;
+ typedef detail::relate::point_info<point_type> point_info;
+
+public:
+ exit_watcher()
+ : m_exit_operation(overlay::operation_none)
+ , m_exit_turn_ptr(NULL)
+ {}
+
+ void enter(TurnInfo const& turn)
+ {
+ m_other_entry_points.push_back(
+ point_info(turn.point, turn.operations[other_op_id].seg_id) );
+ }
+
+ // TODO: exit_per_geometry parameter looks not very safe
+ // wrong value may be easily passed
+
+ void exit(TurnInfo const& turn, bool exit_per_geometry = true)
+ {
+ //segment_identifier const& seg_id = turn.operations[op_id].seg_id;
+ segment_identifier const& other_id = turn.operations[other_op_id].seg_id;
+ overlay::operation_type exit_op = turn.operations[op_id].operation;
+
+ typedef typename std::vector<point_info>::iterator point_iterator;
+ // search for the entry point in the same range of other geometry
+ point_iterator entry_it = std::find_if(m_other_entry_points.begin(),
+ m_other_entry_points.end(),
+ same_single(other_id));
+
+ // this end point has corresponding entry point
+ if ( entry_it != m_other_entry_points.end() )
+ {
+ // erase the corresponding entry point
+ m_other_entry_points.erase(entry_it);
+
+ if ( exit_per_geometry || m_other_entry_points.empty() )
+ {
+ // here we know that we possibly left LS
+ // we must still check if we didn't get back on the same point
+ m_exit_operation = exit_op;
+ m_exit_turn_ptr = boost::addressof(turn);
+ }
+ }
+ }
+
+ bool is_outside() const
+ {
+ // if we didn't entered anything in the past, we're outside
+ return m_other_entry_points.empty();
+ }
+
+ bool is_outside(TurnInfo const& turn) const
+ {
+ return m_other_entry_points.empty()
+ || std::find_if(m_other_entry_points.begin(),
+ m_other_entry_points.end(),
+ same_single(
+ turn.operations[other_op_id].seg_id))
+ == m_other_entry_points.end();
+ }
+
+ overlay::operation_type get_exit_operation() const
+ {
+ return m_exit_operation;
+ }
+
+ point_type const& get_exit_point() const
+ {
+ BOOST_ASSERT(m_exit_operation != overlay::operation_none);
+ BOOST_ASSERT(m_exit_turn_ptr);
+ return m_exit_turn_ptr->point;
+ }
+
+ TurnInfo const& get_exit_turn() const
+ {
+ BOOST_ASSERT(m_exit_operation != overlay::operation_none);
+ BOOST_ASSERT(m_exit_turn_ptr);
+ return *m_exit_turn_ptr;
+ }
+
+ void reset_detected_exit()
+ {
+ m_exit_operation = overlay::operation_none;
+ }
+
+ void reset()
+ {
+ m_exit_operation = overlay::operation_none;
+ m_other_entry_points.clear();
+ }
+
+private:
+ overlay::operation_type m_exit_operation;
+ const TurnInfo * m_exit_turn_ptr;
+ std::vector<point_info> m_other_entry_points; // TODO: use map here or sorted vector?
+};
+
+template <std::size_t OpId, typename Turn>
+inline bool turn_on_the_same_ip(Turn const& prev_turn, Turn const& curr_turn)
+{
+ segment_identifier const& prev_seg_id = prev_turn.operations[OpId].seg_id;
+ segment_identifier const& curr_seg_id = curr_turn.operations[OpId].seg_id;
+
+ if ( prev_seg_id.multi_index != curr_seg_id.multi_index
+ || prev_seg_id.ring_index != curr_seg_id.ring_index )
+ {
+ return false;
+ }
+
+ // TODO: will this work if between segments there will be some number of degenerated ones?
+
+ if ( prev_seg_id.segment_index != curr_seg_id.segment_index
+ && ( ! curr_turn.operations[OpId].fraction.is_zero()
+ || prev_seg_id.segment_index + 1 != curr_seg_id.segment_index ) )
+ {
+ return false;
+ }
+
+ return detail::equals::equals_point_point(prev_turn.point, curr_turn.point);
+}
+
+template <boundary_query BoundaryQuery,
+ typename Point,
+ typename BoundaryChecker>
+static inline bool is_endpoint_on_boundary(Point const& pt,
+ BoundaryChecker & boundary_checker)
+{
+ return boundary_checker.template is_endpoint_boundary<BoundaryQuery>(pt);
+}
+
+template <boundary_query BoundaryQuery,
+ typename IntersectionPoint,
+ typename OperationInfo,
+ typename BoundaryChecker>
+static inline bool is_ip_on_boundary(IntersectionPoint const& ip,
+ OperationInfo const& operation_info,
+ BoundaryChecker & boundary_checker,
+ segment_identifier const& seg_id)
+{
+ boost::ignore_unused_variable_warning(seg_id);
+
+ bool res = false;
+
+ // IP on the last point of the linestring
+ if ( (BoundaryQuery == boundary_back || BoundaryQuery == boundary_any)
+ && operation_info.position == overlay::position_back )
+ {
+ // check if this point is a boundary
+ res = boundary_checker.template is_endpoint_boundary<boundary_back>(ip);
+ }
+ // IP on the last point of the linestring
+ else if ( (BoundaryQuery == boundary_front || BoundaryQuery == boundary_any)
+ && operation_info.position == overlay::position_front )
+ {
+ // check if this point is a boundary
+ res = boundary_checker.template is_endpoint_boundary<boundary_front>(ip);
+ }
+
+ return res;
+}
+
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_FOLLOW_HELPERS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/less.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/less.hpp
new file mode 100644
index 0000000000..3f11d4e87d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/less.hpp
@@ -0,0 +1,79 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LESS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LESS_HPP
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace detail_dispatch { namespace relate {
+
+// TODO: Integrate it with geometry::less?
+
+template <typename Point1,
+ typename Point2,
+ std::size_t I = 0,
+ std::size_t D = geometry::dimension<Point1>::value>
+struct less
+{
+ static inline bool apply(Point1 const& left, Point2 const& right)
+ {
+ typename geometry::coordinate_type<Point1>::type
+ cleft = geometry::get<I>(left);
+ typename geometry::coordinate_type<Point2>::type
+ cright = geometry::get<I>(right);
+
+ if ( geometry::math::equals(cleft, cright) )
+ {
+ return less<Point1, Point2, I + 1, D>::apply(left, right);
+ }
+ else
+ {
+ return cleft < cright;
+ }
+ }
+};
+
+template <typename Point1, typename Point2, std::size_t D>
+struct less<Point1, Point2, D, D>
+{
+ static inline bool apply(Point1 const&, Point2 const&)
+ {
+ return false;
+ }
+};
+
+}} // namespace detail_dispatch::relate
+
+#endif
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+struct less
+{
+ template <typename Point1, typename Point2>
+ inline bool operator()(Point1 const& point1, Point2 const& point2) const
+ {
+ return detail_dispatch::relate::less<Point1, Point2>::apply(point1, point2);
+ }
+};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LESS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/linear_areal.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/linear_areal.hpp
new file mode 100644
index 0000000000..f05832d552
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/linear_areal.hpp
@@ -0,0 +1,1111 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_AREAL_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_AREAL_HPP
+
+#include <boost/geometry/core/topological_dimension.hpp>
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/algorithms/num_interior_rings.hpp>
+#include <boost/geometry/algorithms/detail/point_on_border.hpp>
+#include <boost/geometry/algorithms/detail/sub_range.hpp>
+#include <boost/geometry/algorithms/detail/single_geometry.hpp>
+
+#include <boost/geometry/algorithms/detail/relate/point_geometry.hpp>
+#include <boost/geometry/algorithms/detail/relate/turns.hpp>
+#include <boost/geometry/algorithms/detail/relate/boundary_checker.hpp>
+#include <boost/geometry/algorithms/detail/relate/follow_helpers.hpp>
+
+#include <boost/geometry/views/detail/normalized_view.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+// WARNING!
+// TODO: In the worst case calling this Pred in a loop for MultiLinestring/MultiPolygon may take O(NM)
+// Use the rtree in this case!
+
+// may be used to set IE and BE for a Linear geometry for which no turns were generated
+template <typename Geometry2, typename Result, typename BoundaryChecker, bool TransposeResult>
+class no_turns_la_linestring_pred
+{
+public:
+ no_turns_la_linestring_pred(Geometry2 const& geometry2,
+ Result & res,
+ BoundaryChecker const& boundary_checker)
+ : m_geometry2(geometry2)
+ , m_result(res)
+ , m_boundary_checker(boundary_checker)
+ , m_interrupt_flags(0)
+ {
+ if ( ! may_update<interior, interior, '1', TransposeResult>(m_result) )
+ {
+ m_interrupt_flags |= 1;
+ }
+
+ if ( ! may_update<interior, exterior, '1', TransposeResult>(m_result) )
+ {
+ m_interrupt_flags |= 2;
+ }
+
+ if ( ! may_update<boundary, interior, '0', TransposeResult>(m_result) )
+ {
+ m_interrupt_flags |= 4;
+ }
+
+ if ( ! may_update<boundary, exterior, '0', TransposeResult>(m_result) )
+ {
+ m_interrupt_flags |= 8;
+ }
+ }
+
+ template <typename Linestring>
+ bool operator()(Linestring const& linestring)
+ {
+ std::size_t const count = boost::size(linestring);
+
+ // invalid input
+ if ( count < 2 )
+ {
+ // ignore
+ // TODO: throw an exception?
+ return true;
+ }
+
+ // if those flags are set nothing will change
+ if ( m_interrupt_flags == 0xF )
+ {
+ return false;
+ }
+
+ int const pig = detail::within::point_in_geometry(range::front(linestring), m_geometry2);
+ //BOOST_ASSERT_MSG(pig != 0, "There should be no IPs");
+
+ if ( pig > 0 )
+ {
+ update<interior, interior, '1', TransposeResult>(m_result);
+ m_interrupt_flags |= 1;
+ }
+ else
+ {
+ update<interior, exterior, '1', TransposeResult>(m_result);
+ m_interrupt_flags |= 2;
+ }
+
+ // check if there is a boundary
+ if ( ( m_interrupt_flags & 0xC ) != 0xC // if wasn't already set
+ && ( m_boundary_checker.template
+ is_endpoint_boundary<boundary_front>(range::front(linestring))
+ || m_boundary_checker.template
+ is_endpoint_boundary<boundary_back>(range::back(linestring)) ) )
+ {
+ if ( pig > 0 )
+ {
+ update<boundary, interior, '0', TransposeResult>(m_result);
+ m_interrupt_flags |= 4;
+ }
+ else
+ {
+ update<boundary, exterior, '0', TransposeResult>(m_result);
+ m_interrupt_flags |= 8;
+ }
+ }
+
+ return m_interrupt_flags != 0xF
+ && ! m_result.interrupt;
+ }
+
+private:
+ Geometry2 const& m_geometry2;
+ Result & m_result;
+ BoundaryChecker const& m_boundary_checker;
+ unsigned m_interrupt_flags;
+};
+
+// may be used to set EI and EB for an Areal geometry for which no turns were generated
+template <typename Result, bool TransposeResult>
+class no_turns_la_areal_pred
+{
+public:
+ no_turns_la_areal_pred(Result & res)
+ : m_result(res)
+ , interrupt(! may_update<interior, exterior, '2', TransposeResult>(m_result)
+ && ! may_update<boundary, exterior, '1', TransposeResult>(m_result) )
+ {}
+
+ template <typename Areal>
+ bool operator()(Areal const& areal)
+ {
+ if ( interrupt )
+ {
+ return false;
+ }
+
+ // TODO:
+ // handle empty/invalid geometries in a different way than below?
+
+ typedef typename geometry::point_type<Areal>::type point_type;
+ point_type dummy;
+ bool const ok = boost::geometry::point_on_border(dummy, areal);
+
+ // TODO: for now ignore, later throw an exception?
+ if ( !ok )
+ {
+ return true;
+ }
+
+ update<interior, exterior, '2', TransposeResult>(m_result);
+ update<boundary, exterior, '1', TransposeResult>(m_result);
+
+ return false;
+ }
+
+private:
+ Result & m_result;
+ bool const interrupt;
+};
+
+// The implementation of an algorithm calculating relate() for L/A
+template <typename Geometry1, typename Geometry2, bool TransposeResult = false>
+struct linear_areal
+{
+ // check Linear / Areal
+ BOOST_STATIC_ASSERT(topological_dimension<Geometry1>::value == 1
+ && topological_dimension<Geometry2>::value == 2);
+
+ static const bool interruption_enabled = true;
+
+ typedef typename geometry::point_type<Geometry1>::type point1_type;
+ typedef typename geometry::point_type<Geometry2>::type point2_type;
+
+ template <typename Result>
+ static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Result & result)
+ {
+// TODO: If Areal geometry may have infinite size, change the following line:
+
+ // The result should be FFFFFFFFF
+ relate::set<exterior, exterior, result_dimension<Geometry2>::value, TransposeResult>(result);// FFFFFFFFd, d in [1,9] or T
+
+ if ( result.interrupt )
+ return;
+
+ // get and analyse turns
+ typedef typename turns::get_turns<Geometry1, Geometry2>::turn_info turn_type;
+ std::vector<turn_type> turns;
+
+ interrupt_policy_linear_areal<Geometry2, Result> interrupt_policy(geometry2, result);
+
+ turns::get_turns<Geometry1, Geometry2>::apply(turns, geometry1, geometry2, interrupt_policy);
+ if ( result.interrupt )
+ return;
+
+ boundary_checker<Geometry1> boundary_checker1(geometry1);
+ no_turns_la_linestring_pred
+ <
+ Geometry2,
+ Result,
+ boundary_checker<Geometry1>,
+ TransposeResult
+ > pred1(geometry2, result, boundary_checker1);
+ for_each_disjoint_geometry_if<0, Geometry1>::apply(turns.begin(), turns.end(), geometry1, pred1);
+ if ( result.interrupt )
+ return;
+
+ no_turns_la_areal_pred<Result, !TransposeResult> pred2(result);
+ for_each_disjoint_geometry_if<1, Geometry2>::apply(turns.begin(), turns.end(), geometry2, pred2);
+ if ( result.interrupt )
+ return;
+
+ if ( turns.empty() )
+ return;
+
+ // This is set here because in the case if empty Areal geometry were passed
+ // those shouldn't be set
+ relate::set<exterior, interior, '2', TransposeResult>(result);// FFFFFF2Fd
+ if ( result.interrupt )
+ return;
+
+ {
+ // for different multi or same ring id: x, u, i, c
+ // for same multi and different ring id: c, i, u, x
+ typedef turns::less<0, turns::less_op_linear_areal> less;
+ std::sort(turns.begin(), turns.end(), less());
+
+ turns_analyser<turn_type> analyser;
+ analyse_each_turn(result, analyser,
+ turns.begin(), turns.end(),
+ geometry1, geometry2,
+ boundary_checker1);
+
+ if ( result.interrupt )
+ return;
+ }
+
+ // If 'c' (insersection_boundary) was not found we know that any Ls isn't equal to one of the Rings
+ if ( !interrupt_policy.is_boundary_found )
+ {
+ relate::set<exterior, boundary, '1', TransposeResult>(result);
+ }
+ // Don't calculate it if it's required
+ else if ( may_update<exterior, boundary, '1', TransposeResult>(result) )
+ {
+// TODO: REVISE THIS CODE AND PROBABLY REWRITE SOME PARTS TO BE MORE HUMAN-READABLE
+// IN GENERAL IT ANALYSES THE RINGS OF AREAL GEOMETRY AND DETECTS THE ONES THAT
+// MAY OVERLAP THE INTERIOR OF LINEAR GEOMETRY (NO IPs OR NON-FAKE 'u' OPERATION)
+// NOTE: For one case std::sort may be called again to sort data by operations for data already sorted by ring index
+// In the worst case scenario the complexity will be O( NlogN + R*(N/R)log(N/R) )
+// So always should remain O(NlogN) -> for R==1 <-> 1(N/1)log(N/1), for R==N <-> N(N/N)log(N/N)
+// Some benchmarking should probably be done to check if only one std::sort should be used
+
+ // sort by multi_index and rind_index
+ std::sort(turns.begin(), turns.end(), less_ring());
+
+ typedef typename std::vector<turn_type>::iterator turn_iterator;
+
+ turn_iterator it = turns.begin();
+ segment_identifier * prev_seg_id_ptr = NULL;
+ // for each ring
+ for ( ; it != turns.end() ; )
+ {
+ // it's the next single geometry
+ if ( prev_seg_id_ptr == NULL
+ || prev_seg_id_ptr->multi_index != it->operations[1].seg_id.multi_index )
+ {
+ // if the first ring has no IPs
+ if ( it->operations[1].seg_id.ring_index > -1 )
+ {
+ // we can be sure that the exterior overlaps the boundary
+ relate::set<exterior, boundary, '1', TransposeResult>(result);
+ break;
+ }
+ // if there was some previous ring
+ if ( prev_seg_id_ptr != NULL )
+ {
+ int const next_ring_index = prev_seg_id_ptr->ring_index + 1;
+ BOOST_ASSERT(next_ring_index >= 0);
+
+ // if one of the last rings of previous single geometry was ommited
+ if ( static_cast<std::size_t>(next_ring_index)
+ < geometry::num_interior_rings(
+ single_geometry(geometry2, *prev_seg_id_ptr)) )
+ {
+ // we can be sure that the exterior overlaps the boundary
+ relate::set<exterior, boundary, '1', TransposeResult>(result);
+ break;
+ }
+ }
+ }
+ // if it's the same single geometry
+ else /*if ( previous_multi_index == it->operations[1].seg_id.multi_index )*/
+ {
+ // and we jumped over one of the rings
+ if ( prev_seg_id_ptr != NULL // just in case
+ && prev_seg_id_ptr->ring_index + 1 < it->operations[1].seg_id.ring_index )
+ {
+ // we can be sure that the exterior overlaps the boundary
+ relate::set<exterior, boundary, '1', TransposeResult>(result);
+ break;
+ }
+ }
+
+ prev_seg_id_ptr = boost::addressof(it->operations[1].seg_id);
+
+ // find the next ring first iterator and check if the analysis should be performed
+ has_boundary_intersection has_boundary_inters;
+ turn_iterator next = find_next_ring(it, turns.end(), has_boundary_inters);
+
+ // if there is no 1d overlap with the boundary
+ if ( !has_boundary_inters.result )
+ {
+ // we can be sure that the exterior overlaps the boundary
+ relate::set<exterior, boundary, '1', TransposeResult>(result);
+ break;
+ }
+ // else there is 1d overlap with the boundary so we must analyse the boundary
+ else
+ {
+ // u, c
+ typedef turns::less<1, turns::less_op_areal_linear> less;
+ std::sort(it, next, less());
+
+ // analyse
+ areal_boundary_analyser<turn_type> analyser;
+ for ( turn_iterator rit = it ; rit != next ; ++rit )
+ {
+ // if the analyser requests, break the search
+ if ( !analyser.apply(it, rit, next) )
+ break;
+ }
+
+ // if the boundary of Areal goes out of the Linear
+ if ( analyser.is_union_detected )
+ {
+ // we can be sure that the boundary of Areal overlaps the exterior of Linear
+ relate::set<exterior, boundary, '1', TransposeResult>(result);
+ break;
+ }
+ }
+
+ it = next;
+ }
+
+ // if there was some previous ring
+ if ( prev_seg_id_ptr != NULL )
+ {
+ int const next_ring_index = prev_seg_id_ptr->ring_index + 1;
+ BOOST_ASSERT(next_ring_index >= 0);
+
+ // if one of the last rings of previous single geometry was ommited
+ if ( static_cast<std::size_t>(next_ring_index)
+ < geometry::num_interior_rings(
+ single_geometry(geometry2, *prev_seg_id_ptr)) )
+ {
+ // we can be sure that the exterior overlaps the boundary
+ relate::set<exterior, boundary, '1', TransposeResult>(result);
+ }
+ }
+ }
+ }
+
+ // interrupt policy which may be passed to get_turns to interrupt the analysis
+ // based on the info in the passed result/mask
+ template <typename Areal, typename Result>
+ class interrupt_policy_linear_areal
+ {
+ public:
+ static bool const enabled = true;
+
+ interrupt_policy_linear_areal(Areal const& areal, Result & result)
+ : m_result(result), m_areal(areal)
+ , is_boundary_found(false)
+ {}
+
+// TODO: since we update result for some operations here, we may not do it in the analyser!
+
+ template <typename Range>
+ inline bool apply(Range const& turns)
+ {
+ typedef typename boost::range_iterator<Range const>::type iterator;
+
+ for (iterator it = boost::begin(turns) ; it != boost::end(turns) ; ++it)
+ {
+ if ( it->operations[0].operation == overlay::operation_intersection )
+ {
+ bool const no_interior_rings
+ = geometry::num_interior_rings(
+ single_geometry(m_areal, it->operations[1].seg_id)) == 0;
+
+ // WARNING! THIS IS TRUE ONLY IF THE POLYGON IS SIMPLE!
+ // OR WITHOUT INTERIOR RINGS (AND OF COURSE VALID)
+ if ( no_interior_rings )
+ update<interior, interior, '1', TransposeResult>(m_result);
+ }
+ else if ( it->operations[0].operation == overlay::operation_continue )
+ {
+ update<interior, boundary, '1', TransposeResult>(m_result);
+ is_boundary_found = true;
+ }
+ else if ( ( it->operations[0].operation == overlay::operation_union
+ || it->operations[0].operation == overlay::operation_blocked )
+ && it->operations[0].position == overlay::position_middle )
+ {
+// TODO: here we could also check the boundaries and set BB at this point
+ update<interior, boundary, '0', TransposeResult>(m_result);
+ }
+ }
+
+ return m_result.interrupt;
+ }
+
+ private:
+ Result & m_result;
+ Areal const& m_areal;
+
+ public:
+ bool is_boundary_found;
+ };
+
+ // This analyser should be used like Input or SinglePass Iterator
+ // IMPORTANT! It should be called also for the end iterator - last
+ template <typename TurnInfo>
+ class turns_analyser
+ {
+ typedef typename TurnInfo::point_type turn_point_type;
+
+ static const std::size_t op_id = 0;
+ static const std::size_t other_op_id = 1;
+
+ public:
+ turns_analyser()
+ : m_previous_turn_ptr(NULL)
+ , m_previous_operation(overlay::operation_none)
+ , m_boundary_counter(0)
+ , m_interior_detected(false)
+ , m_first_interior_other_id_ptr(NULL)
+ {}
+
+ template <typename Result,
+ typename TurnIt,
+ typename Geometry,
+ typename OtherGeometry,
+ typename BoundaryChecker>
+ void apply(Result & res, TurnIt it,
+ Geometry const& geometry,
+ OtherGeometry const& other_geometry,
+ BoundaryChecker const& boundary_checker)
+ {
+ overlay::operation_type op = it->operations[op_id].operation;
+
+ if ( op != overlay::operation_union
+ && op != overlay::operation_intersection
+ && op != overlay::operation_blocked
+ && op != overlay::operation_continue ) // operation_boundary / operation_boundary_intersection
+ {
+ return;
+ }
+
+ segment_identifier const& seg_id = it->operations[op_id].seg_id;
+ segment_identifier const& other_id = it->operations[other_op_id].seg_id;
+
+ const bool first_in_range = m_seg_watcher.update(seg_id);
+
+ // handle possible exit
+ bool fake_enter_detected = false;
+ if ( m_exit_watcher.get_exit_operation() == overlay::operation_union )
+ {
+ // real exit point - may be multiple
+ // we know that we entered and now we exit
+ if ( ! turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )
+ {
+ m_exit_watcher.reset_detected_exit();
+
+ // not the last IP
+ update<interior, exterior, '1', TransposeResult>(res);
+ }
+ // fake exit point, reset state
+ else if ( op == overlay::operation_intersection
+ || op == overlay::operation_continue ) // operation_boundary
+ {
+ m_exit_watcher.reset_detected_exit();
+ fake_enter_detected = true;
+ }
+ }
+ else if ( m_exit_watcher.get_exit_operation() == overlay::operation_blocked )
+ {
+ // ignore multiple BLOCKs
+ if ( op == overlay::operation_blocked )
+ return;
+
+ if ( ( op == overlay::operation_intersection
+ || op == overlay::operation_continue )
+ && turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )
+ {
+ fake_enter_detected = true;
+ }
+
+ m_exit_watcher.reset_detected_exit();
+ }
+
+// NOTE: THE WHOLE m_interior_detected HANDLING IS HERE BECAUSE WE CAN'T EFFICIENTLY SORT TURNS (CORRECTLY)
+// BECAUSE THE SAME IP MAY BE REPRESENTED BY TWO SEGMENTS WITH DIFFERENT DISTANCES
+// IT WOULD REQUIRE THE CALCULATION OF MAX DISTANCE
+// TODO: WE COULD GET RID OF THE TEST IF THE DISTANCES WERE NORMALIZED
+
+// TODO: THIS IS POTENTIALLY ERROREOUS!
+// THIS ALGORITHM DEPENDS ON SOME SPECIFIC SEQUENCE OF OPERATIONS
+// IT WOULD GIVE WRONG RESULTS E.G.
+// IN THE CASE OF SELF-TOUCHING POINT WHEN 'i' WOULD BE BEFORE 'u'
+
+ // handle the interior overlap
+ if ( m_interior_detected )
+ {
+ // real interior overlap
+ if ( ! turn_on_the_same_ip<op_id>(*m_previous_turn_ptr, *it) )
+ {
+ update<interior, interior, '1', TransposeResult>(res);
+ m_interior_detected = false;
+ }
+ // fake interior overlap
+ else if ( op == overlay::operation_continue )
+ {
+ m_interior_detected = false;
+ }
+ else if ( op == overlay::operation_union )
+ {
+// TODO: this probably is not a good way of handling the interiors/enters
+// the solution similar to exit_watcher would be more robust
+// all enters should be kept and handled.
+// maybe integrate it with the exit_watcher -> enter_exit_watcher
+ if ( m_first_interior_other_id_ptr
+ && m_first_interior_other_id_ptr->multi_index == other_id.multi_index )
+ {
+ m_interior_detected = false;
+ }
+ }
+ }
+
+ // i/u, c/u
+ if ( op == overlay::operation_intersection
+ || op == overlay::operation_continue ) // operation_boundary/operation_boundary_intersection
+ {
+ bool no_enters_detected = m_exit_watcher.is_outside();
+ m_exit_watcher.enter(*it);
+
+ if ( op == overlay::operation_intersection )
+ {
+ if ( m_boundary_counter > 0 && it->operations[op_id].is_collinear )
+ --m_boundary_counter;
+
+ if ( m_boundary_counter == 0 )
+ {
+ // interiors overlaps
+ //update<interior, interior, '1', TransposeResult>(res);
+
+// TODO: think about the implementation of the more robust version
+// this way only the first enter will be handled
+ if ( !m_interior_detected )
+ {
+ // don't update now
+ // we might enter a boundary of some other ring on the same IP
+ m_interior_detected = true;
+ m_first_interior_other_id_ptr = boost::addressof(other_id);
+ }
+ }
+ }
+ else // operation_boundary
+ {
+ // don't add to the count for all met boundaries
+ // only if this is the "new" boundary
+ if ( first_in_range || !it->operations[op_id].is_collinear )
+ ++m_boundary_counter;
+
+ update<interior, boundary, '1', TransposeResult>(res);
+ }
+
+ bool const this_b
+ = is_ip_on_boundary<boundary_front>(it->point,
+ it->operations[op_id],
+ boundary_checker,
+ seg_id);
+ // going inside on boundary point
+ if ( this_b )
+ {
+ update<boundary, boundary, '0', TransposeResult>(res);
+ }
+ // going inside on non-boundary point
+ else
+ {
+ update<interior, boundary, '0', TransposeResult>(res);
+
+ // if we didn't enter in the past, we were outside
+ if ( no_enters_detected
+ && ! fake_enter_detected
+ && it->operations[op_id].position != overlay::position_front )
+ {
+// TODO: calculate_from_inside() is only needed if the current Linestring is not closed
+ bool const from_inside = first_in_range
+ && calculate_from_inside(geometry,
+ other_geometry,
+ *it);
+
+ if ( from_inside )
+ update<interior, interior, '1', TransposeResult>(res);
+ else
+ update<interior, exterior, '1', TransposeResult>(res);
+
+ // if it's the first IP then the first point is outside
+ if ( first_in_range )
+ {
+ bool const front_b = is_endpoint_on_boundary<boundary_front>(
+ range::front(sub_range(geometry, seg_id)),
+ boundary_checker);
+
+ // if there is a boundary on the first point
+ if ( front_b )
+ {
+ if ( from_inside )
+ update<boundary, interior, '0', TransposeResult>(res);
+ else
+ update<boundary, exterior, '0', TransposeResult>(res);
+ }
+ }
+ }
+ }
+ }
+ // u/u, x/u
+ else if ( op == overlay::operation_union || op == overlay::operation_blocked )
+ {
+ bool const op_blocked = op == overlay::operation_blocked;
+ bool const no_enters_detected = m_exit_watcher.is_outside()
+// TODO: is this condition ok?
+// TODO: move it into the exit_watcher?
+ && m_exit_watcher.get_exit_operation() == overlay::operation_none;
+
+ if ( op == overlay::operation_union )
+ {
+ if ( m_boundary_counter > 0 && it->operations[op_id].is_collinear )
+ --m_boundary_counter;
+ }
+ else // overlay::operation_blocked
+ {
+ m_boundary_counter = 0;
+ }
+
+ // we're inside, possibly going out right now
+ if ( ! no_enters_detected )
+ {
+ if ( op_blocked
+ && it->operations[op_id].position == overlay::position_back ) // ignore spikes!
+ {
+ // check if this is indeed the boundary point
+ // NOTE: is_ip_on_boundary<>() should be called here but the result will be the same
+ if ( is_endpoint_on_boundary<boundary_back>(it->point, boundary_checker) )
+ {
+ update<boundary, boundary, '0', TransposeResult>(res);
+ }
+ }
+ // union, inside, but no exit -> collinear on self-intersection point
+ // not needed since we're already inside the boundary
+ /*else if ( !exit_detected )
+ {
+ update<interior, boundary, '0', TransposeResult>(res);
+ }*/
+ }
+ // we're outside or inside and this is the first turn
+ else
+ {
+ bool const this_b = is_ip_on_boundary<boundary_any>(it->point,
+ it->operations[op_id],
+ boundary_checker,
+ seg_id);
+ // if current IP is on boundary of the geometry
+ if ( this_b )
+ {
+ update<boundary, boundary, '0', TransposeResult>(res);
+ }
+ // if current IP is not on boundary of the geometry
+ else
+ {
+ update<interior, boundary, '0', TransposeResult>(res);
+ }
+
+ // TODO: very similar code is used in the handling of intersection
+ if ( it->operations[op_id].position != overlay::position_front )
+ {
+// TODO: calculate_from_inside() is only needed if the current Linestring is not closed
+ bool const first_from_inside = first_in_range
+ && calculate_from_inside(geometry,
+ other_geometry,
+ *it);
+ if ( first_from_inside )
+ {
+ update<interior, interior, '1', TransposeResult>(res);
+
+ // notify the exit_watcher that we started inside
+ m_exit_watcher.enter(*it);
+ }
+ else
+ {
+ update<interior, exterior, '1', TransposeResult>(res);
+ }
+
+ // first IP on the last segment point - this means that the first point is outside or inside
+ if ( first_in_range && ( !this_b || op_blocked ) )
+ {
+ bool const front_b = is_endpoint_on_boundary<boundary_front>(
+ range::front(sub_range(geometry, seg_id)),
+ boundary_checker);
+
+ // if there is a boundary on the first point
+ if ( front_b )
+ {
+ if ( first_from_inside )
+ update<boundary, interior, '0', TransposeResult>(res);
+ else
+ update<boundary, exterior, '0', TransposeResult>(res);
+ }
+ }
+ }
+ }
+
+ // if we're going along a boundary, we exit only if the linestring was collinear
+ if ( m_boundary_counter == 0
+ || it->operations[op_id].is_collinear )
+ {
+ // notify the exit watcher about the possible exit
+ m_exit_watcher.exit(*it);
+ }
+ }
+
+ // store ref to previously analysed (valid) turn
+ m_previous_turn_ptr = boost::addressof(*it);
+ // and previously analysed (valid) operation
+ m_previous_operation = op;
+ }
+
+ // it == last
+ template <typename Result,
+ typename TurnIt,
+ typename Geometry,
+ typename OtherGeometry,
+ typename BoundaryChecker>
+ void apply(Result & res,
+ TurnIt first, TurnIt last,
+ Geometry const& geometry,
+ OtherGeometry const& /*other_geometry*/,
+ BoundaryChecker const& boundary_checker)
+ {
+ //BOOST_ASSERT( first != last );
+
+ // here, the possible exit is the real one
+ // we know that we entered and now we exit
+ if ( /*m_exit_watcher.get_exit_operation() == overlay::operation_union // THIS CHECK IS REDUNDANT
+ ||*/ m_previous_operation == overlay::operation_union
+ && !m_interior_detected )
+ {
+ // for sure
+ update<interior, exterior, '1', TransposeResult>(res);
+
+ BOOST_ASSERT(first != last);
+ BOOST_ASSERT(m_previous_turn_ptr);
+
+ segment_identifier const& prev_seg_id = m_previous_turn_ptr->operations[op_id].seg_id;
+
+ bool const prev_back_b = is_endpoint_on_boundary<boundary_back>(
+ range::back(sub_range(geometry, prev_seg_id)),
+ boundary_checker);
+
+ // if there is a boundary on the last point
+ if ( prev_back_b )
+ {
+ update<boundary, exterior, '0', TransposeResult>(res);
+ }
+ }
+ // we might enter some Areal and didn't go out,
+ else if ( m_previous_operation == overlay::operation_intersection
+ || m_interior_detected )
+ {
+ // just in case
+ update<interior, interior, '1', TransposeResult>(res);
+ m_interior_detected = false;
+
+ BOOST_ASSERT(first != last);
+ BOOST_ASSERT(m_previous_turn_ptr);
+
+ segment_identifier const& prev_seg_id = m_previous_turn_ptr->operations[op_id].seg_id;
+
+ bool const prev_back_b = is_endpoint_on_boundary<boundary_back>(
+ range::back(sub_range(geometry, prev_seg_id)),
+ boundary_checker);
+
+ // if there is a boundary on the last point
+ if ( prev_back_b )
+ {
+ update<boundary, interior, '0', TransposeResult>(res);
+ }
+ }
+
+ BOOST_ASSERT_MSG(m_previous_operation != overlay::operation_continue,
+ "Unexpected operation! Probably the error in get_turns(L,A) or relate(L,A)");
+
+ // Reset exit watcher before the analysis of the next Linestring
+ m_exit_watcher.reset();
+ m_boundary_counter = 0;
+ }
+
+ // check if the passed turn's segment of Linear geometry arrived
+ // from the inside or the outside of the Areal geometry
+ template <typename Turn>
+ static inline bool calculate_from_inside(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Turn const& turn)
+ {
+ if ( turn.operations[op_id].position == overlay::position_front )
+ return false;
+
+ typename sub_range_return_type<Geometry1 const>::type
+ range1 = sub_range(geometry1, turn.operations[op_id].seg_id);
+
+ typedef detail::normalized_view<Geometry2 const> const range2_type;
+ typedef typename boost::range_iterator<range2_type>::type range2_iterator;
+ range2_type range2(sub_range(geometry2, turn.operations[other_op_id].seg_id));
+
+ std::size_t const s1 = boost::size(range1);
+ std::size_t const s2 = boost::size(range2);
+ BOOST_ASSERT(s1 > 1 && s2 > 2);
+ std::size_t const seg_count2 = s2 - 1;
+
+ std::size_t const p_seg_ij = turn.operations[op_id].seg_id.segment_index;
+ std::size_t const q_seg_ij = turn.operations[other_op_id].seg_id.segment_index;
+
+ BOOST_ASSERT(p_seg_ij + 1 < s1 && q_seg_ij + 1 < s2);
+
+ point1_type const& pi = range::at(range1, p_seg_ij);
+ point2_type const& qi = range::at(range2, q_seg_ij);
+ point2_type const& qj = range::at(range2, q_seg_ij + 1);
+ point1_type qi_conv;
+ geometry::convert(qi, qi_conv);
+ bool const is_ip_qj = equals::equals_point_point(turn.point, qj);
+// TODO: test this!
+// BOOST_ASSERT(!equals::equals_point_point(turn.point, pi));
+// BOOST_ASSERT(!equals::equals_point_point(turn.point, qi));
+ point1_type new_pj;
+ geometry::convert(turn.point, new_pj);
+
+ if ( is_ip_qj )
+ {
+ std::size_t const q_seg_jk = (q_seg_ij + 1) % seg_count2;
+// TODO: the following function should return immediately, however the worst case complexity is O(N)
+// It would be good to replace it with some O(1) mechanism
+ range2_iterator qk_it = find_next_non_duplicated(boost::begin(range2),
+ boost::begin(range2) + q_seg_jk,
+ boost::end(range2));
+
+ // Will this sequence of points be always correct?
+ overlay::side_calculator<point1_type, point2_type> side_calc(qi_conv, new_pj, pi, qi, qj, *qk_it);
+
+ return calculate_from_inside_sides(side_calc);
+ }
+ else
+ {
+ point1_type new_qj;
+ geometry::convert(turn.point, new_qj);
+
+ overlay::side_calculator<point1_type, point2_type> side_calc(qi_conv, new_pj, pi, qi, new_qj, qj);
+
+ return calculate_from_inside_sides(side_calc);
+ }
+ }
+
+ template <typename It>
+ static inline It find_next_non_duplicated(It first, It current, It last)
+ {
+ BOOST_ASSERT( current != last );
+
+ It it = current;
+
+ for ( ++it ; it != last ; ++it )
+ {
+ if ( !equals::equals_point_point(*current, *it) )
+ return it;
+ }
+
+ // if not found start from the beginning
+ for ( it = first ; it != current ; ++it )
+ {
+ if ( !equals::equals_point_point(*current, *it) )
+ return it;
+ }
+
+ return current;
+ }
+
+ // calculate inside or outside based on side_calc
+ // this is simplified version of a check from equal<>
+ template <typename SideCalc>
+ static inline bool calculate_from_inside_sides(SideCalc const& side_calc)
+ {
+ int const side_pk_p = side_calc.pk_wrt_p1();
+ int const side_qk_p = side_calc.qk_wrt_p1();
+ // If they turn to same side (not opposite sides)
+ if (! overlay::base_turn_handler::opposite(side_pk_p, side_qk_p))
+ {
+ int const side_pk_q2 = side_calc.pk_wrt_q2();
+ return side_pk_q2 == -1;
+ }
+ else
+ {
+ return side_pk_p == -1;
+ }
+ }
+
+ private:
+ exit_watcher<TurnInfo, op_id> m_exit_watcher;
+ segment_watcher<same_single> m_seg_watcher;
+ TurnInfo * m_previous_turn_ptr;
+ overlay::operation_type m_previous_operation;
+ unsigned m_boundary_counter;
+ bool m_interior_detected;
+ const segment_identifier * m_first_interior_other_id_ptr;
+ };
+
+ // call analyser.apply() for each turn in range
+ // IMPORTANT! The analyser is also called for the end iterator - last
+ template <typename Result,
+ typename TurnIt,
+ typename Analyser,
+ typename Geometry,
+ typename OtherGeometry,
+ typename BoundaryChecker>
+ static inline void analyse_each_turn(Result & res,
+ Analyser & analyser,
+ TurnIt first, TurnIt last,
+ Geometry const& geometry,
+ OtherGeometry const& other_geometry,
+ BoundaryChecker const& boundary_checker)
+ {
+ if ( first == last )
+ return;
+
+ for ( TurnIt it = first ; it != last ; ++it )
+ {
+ analyser.apply(res, it,
+ geometry, other_geometry,
+ boundary_checker);
+
+ if ( res.interrupt )
+ return;
+ }
+
+ analyser.apply(res, first, last,
+ geometry, other_geometry,
+ boundary_checker);
+ }
+
+ // less comparator comparing multi_index then ring_index
+ // may be used to sort turns by ring
+ struct less_ring
+ {
+ template <typename Turn>
+ inline bool operator()(Turn const& left, Turn const& right) const
+ {
+ return left.operations[1].seg_id.multi_index < right.operations[1].seg_id.multi_index
+ || ( left.operations[1].seg_id.multi_index == right.operations[1].seg_id.multi_index
+ && left.operations[1].seg_id.ring_index < right.operations[1].seg_id.ring_index );
+ }
+ };
+
+ // policy/functor checking if a turn's operation is operation_continue
+ struct has_boundary_intersection
+ {
+ has_boundary_intersection()
+ : result(false) {}
+
+ template <typename Turn>
+ inline void operator()(Turn const& turn)
+ {
+ if ( turn.operations[1].operation == overlay::operation_continue )
+ result = true;
+ }
+
+ bool result;
+ };
+
+ // iterate through the range and search for the different multi_index or ring_index
+ // also call fun for each turn in the current range
+ template <typename It, typename Fun>
+ static inline It find_next_ring(It first, It last, Fun & fun)
+ {
+ if ( first == last )
+ return last;
+
+ int const multi_index = first->operations[1].seg_id.multi_index;
+ int const ring_index = first->operations[1].seg_id.ring_index;
+
+ fun(*first);
+ ++first;
+
+ for ( ; first != last ; ++first )
+ {
+ if ( multi_index != first->operations[1].seg_id.multi_index
+ || ring_index != first->operations[1].seg_id.ring_index )
+ {
+ return first;
+ }
+
+ fun(*first);
+ }
+
+ return last;
+ }
+
+ // analyser which called for turns sorted by seg/distance/operation
+ // checks if the boundary of Areal geometry really got out
+ // into the exterior of Linear geometry
+ template <typename TurnInfo>
+ class areal_boundary_analyser
+ {
+ public:
+ areal_boundary_analyser()
+ : is_union_detected(false)
+ , m_previous_turn_ptr(NULL)
+ {}
+
+ template <typename TurnIt>
+ bool apply(TurnIt /*first*/, TurnIt it, TurnIt last)
+ {
+ overlay::operation_type op = it->operations[1].operation;
+
+ if ( it != last )
+ {
+ if ( op != overlay::operation_union
+ && op != overlay::operation_continue )
+ {
+ return true;
+ }
+
+ if ( is_union_detected )
+ {
+ BOOST_ASSERT(m_previous_turn_ptr != NULL);
+ if ( !detail::equals::equals_point_point(it->point, m_previous_turn_ptr->point) )
+ {
+ // break
+ return false;
+ }
+ else if ( op == overlay::operation_continue ) // operation_boundary
+ {
+ is_union_detected = false;
+ }
+ }
+
+ if ( op == overlay::operation_union )
+ {
+ is_union_detected = true;
+ m_previous_turn_ptr = boost::addressof(*it);
+ }
+
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ bool is_union_detected;
+
+ private:
+ const TurnInfo * m_previous_turn_ptr;
+ };
+};
+
+template <typename Geometry1, typename Geometry2>
+struct areal_linear
+{
+ template <typename Result>
+ static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Result & result)
+ {
+ linear_areal<Geometry2, Geometry1, true>::apply(geometry2, geometry1, result);
+ }
+};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_AREAL_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/linear_linear.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/linear_linear.hpp
new file mode 100644
index 0000000000..f08aba0287
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/linear_linear.hpp
@@ -0,0 +1,765 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_LINEAR_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_LINEAR_HPP
+
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/algorithms/detail/sub_range.hpp>
+#include <boost/geometry/algorithms/detail/single_geometry.hpp>
+
+#include <boost/geometry/algorithms/detail/relate/point_geometry.hpp>
+#include <boost/geometry/algorithms/detail/relate/turns.hpp>
+#include <boost/geometry/algorithms/detail/relate/boundary_checker.hpp>
+#include <boost/geometry/algorithms/detail/relate/follow_helpers.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+template <typename Result, typename BoundaryChecker, bool TransposeResult>
+class disjoint_linestring_pred
+{
+public:
+ disjoint_linestring_pred(Result & res,
+ BoundaryChecker const& boundary_checker)
+ : m_result(res)
+ , m_boundary_checker(boundary_checker)
+ , m_flags(0)
+ {
+ if ( ! may_update<interior, exterior, '1', TransposeResult>(m_result) )
+ {
+ m_flags |= 1;
+ }
+ if ( ! may_update<boundary, exterior, '0', TransposeResult>(m_result) )
+ {
+ m_flags |= 2;
+ }
+ }
+
+ template <typename Linestring>
+ bool operator()(Linestring const& linestring)
+ {
+ if ( m_flags == 3 )
+ {
+ return false;
+ }
+
+ std::size_t const count = boost::size(linestring);
+
+ // invalid input
+ if ( count < 2 )
+ {
+ // ignore
+ // TODO: throw an exception?
+ return true;
+ }
+
+ // point-like linestring
+ if ( count == 2
+ && equals::equals_point_point(range::front(linestring),
+ range::back(linestring)) )
+ {
+ update<interior, exterior, '0', TransposeResult>(m_result);
+ }
+ else
+ {
+ update<interior, exterior, '1', TransposeResult>(m_result);
+ m_flags |= 1;
+
+ // check if there is a boundary
+ if ( m_flags < 2
+ && ( m_boundary_checker.template
+ is_endpoint_boundary<boundary_front>(range::front(linestring))
+ || m_boundary_checker.template
+ is_endpoint_boundary<boundary_back>(range::back(linestring)) ) )
+ {
+ update<boundary, exterior, '0', TransposeResult>(m_result);
+ m_flags |= 2;
+ }
+ }
+
+ return m_flags != 3
+ && ! m_result.interrupt;
+ }
+
+private:
+ Result & m_result;
+ BoundaryChecker const& m_boundary_checker;
+ unsigned m_flags;
+};
+
+template <typename Geometry1, typename Geometry2>
+struct linear_linear
+{
+ static const bool interruption_enabled = true;
+
+ typedef typename geometry::point_type<Geometry1>::type point1_type;
+ typedef typename geometry::point_type<Geometry2>::type point2_type;
+
+ template <typename Result>
+ static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Result & result)
+ {
+ // The result should be FFFFFFFFF
+ relate::set<exterior, exterior, result_dimension<Geometry1>::value>(result);// FFFFFFFFd, d in [1,9] or T
+ if ( result.interrupt )
+ return;
+
+ // get and analyse turns
+ typedef typename turns::get_turns<Geometry1, Geometry2>::turn_info turn_type;
+ std::vector<turn_type> turns;
+
+ interrupt_policy_linear_linear<Result> interrupt_policy(result);
+
+ turns::get_turns
+ <
+ Geometry1,
+ Geometry2,
+ detail::get_turns::get_turn_info_type<Geometry1, Geometry2, turns::assign_policy<true> >
+ >::apply(turns, geometry1, geometry2, interrupt_policy);
+
+ if ( result.interrupt )
+ return;
+
+ boundary_checker<Geometry1> boundary_checker1(geometry1);
+ disjoint_linestring_pred<Result, boundary_checker<Geometry1>, false> pred1(result, boundary_checker1);
+ for_each_disjoint_geometry_if<0, Geometry1>::apply(turns.begin(), turns.end(), geometry1, pred1);
+ if ( result.interrupt )
+ return;
+
+ boundary_checker<Geometry2> boundary_checker2(geometry2);
+ disjoint_linestring_pred<Result, boundary_checker<Geometry2>, true> pred2(result, boundary_checker2);
+ for_each_disjoint_geometry_if<1, Geometry2>::apply(turns.begin(), turns.end(), geometry2, pred2);
+ if ( result.interrupt )
+ return;
+
+ if ( turns.empty() )
+ return;
+
+ // TODO: turns must be sorted and followed only if it's possible to go out and in on the same point
+ // for linear geometries union operation must be detected which I guess would be quite often
+
+ if ( may_update<interior, interior, '1'>(result)
+ || may_update<interior, boundary, '0'>(result)
+ || may_update<interior, exterior, '1'>(result)
+ || may_update<boundary, interior, '0'>(result)
+ || may_update<boundary, boundary, '0'>(result)
+ || may_update<boundary, exterior, '0'>(result) )
+ {
+ typedef turns::less<0, turns::less_op_linear_linear> less;
+ std::sort(turns.begin(), turns.end(), less());
+
+ turns_analyser<turn_type, 0> analyser;
+ analyse_each_turn(result, analyser,
+ turns.begin(), turns.end(),
+ geometry1, geometry2,
+ boundary_checker1, boundary_checker2);
+ }
+
+ if ( result.interrupt )
+ return;
+
+ if ( may_update<interior, interior, '1', true>(result)
+ || may_update<interior, boundary, '0', true>(result)
+ || may_update<interior, exterior, '1', true>(result)
+ || may_update<boundary, interior, '0', true>(result)
+ || may_update<boundary, boundary, '0', true>(result)
+ || may_update<boundary, exterior, '0', true>(result) )
+ {
+ typedef turns::less<1, turns::less_op_linear_linear> less;
+ std::sort(turns.begin(), turns.end(), less());
+
+ turns_analyser<turn_type, 1> analyser;
+ analyse_each_turn(result, analyser,
+ turns.begin(), turns.end(),
+ geometry2, geometry1,
+ boundary_checker2, boundary_checker1);
+ }
+ }
+
+ template <typename Result>
+ class interrupt_policy_linear_linear
+ {
+ public:
+ static bool const enabled = true;
+
+ explicit interrupt_policy_linear_linear(Result & result)
+ : m_result(result)
+ {}
+
+// TODO: since we update result for some operations here, we may not do it in the analyser!
+
+ template <typename Range>
+ inline bool apply(Range const& turns)
+ {
+ typedef typename boost::range_iterator<Range const>::type iterator;
+
+ for (iterator it = boost::begin(turns) ; it != boost::end(turns) ; ++it)
+ {
+ if ( it->operations[0].operation == overlay::operation_intersection
+ || it->operations[1].operation == overlay::operation_intersection )
+ {
+ update<interior, interior, '1'>(m_result);
+ }
+ else if ( ( it->operations[0].operation == overlay::operation_union
+ || it->operations[0].operation == overlay::operation_blocked
+ || it->operations[1].operation == overlay::operation_union
+ || it->operations[1].operation == overlay::operation_blocked )
+ && it->operations[0].position == overlay::position_middle
+ && it->operations[1].position == overlay::position_middle )
+ {
+// TODO: here we could also check the boundaries and set IB,BI,BB at this point
+ update<interior, interior, '0'>(m_result);
+ }
+ }
+
+ return m_result.interrupt;
+ }
+
+ private:
+ Result & m_result;
+ };
+
+ // This analyser should be used like Input or SinglePass Iterator
+ template <typename TurnInfo, std::size_t OpId>
+ class turns_analyser
+ {
+ typedef typename TurnInfo::point_type turn_point_type;
+
+ static const std::size_t op_id = OpId;
+ static const std::size_t other_op_id = (OpId + 1) % 2;
+ static const bool transpose_result = OpId != 0;
+
+ public:
+ turns_analyser()
+ : m_previous_turn_ptr(NULL)
+ , m_previous_operation(overlay::operation_none)
+ , m_degenerated_turn_ptr(NULL)
+ {}
+
+ template <typename Result,
+ typename TurnIt,
+ typename Geometry,
+ typename OtherGeometry,
+ typename BoundaryChecker,
+ typename OtherBoundaryChecker>
+ void apply(Result & res, TurnIt it,
+ Geometry const& geometry,
+ OtherGeometry const& other_geometry,
+ BoundaryChecker const& boundary_checker,
+ OtherBoundaryChecker const& other_boundary_checker)
+ {
+ overlay::operation_type const op = it->operations[op_id].operation;
+
+ segment_identifier const& seg_id = it->operations[op_id].seg_id;
+ segment_identifier const& other_id = it->operations[other_op_id].seg_id;
+
+ bool const first_in_range = m_seg_watcher.update(seg_id);
+
+ if ( op != overlay::operation_union
+ && op != overlay::operation_intersection
+ && op != overlay::operation_blocked )
+ {
+ // degenerated turn
+ if ( op == overlay::operation_continue
+ && it->method == overlay::method_none
+ && m_exit_watcher.is_outside(*it)
+ /*&& ( m_exit_watcher.get_exit_operation() == overlay::operation_none
+ || ! turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )*/ )
+ {
+ // TODO: rewrite the above condition
+
+ // WARNING! For spikes the above condition may be TRUE
+ // When degenerated turns are be marked in a different way than c,c/c
+ // different condition will be checked
+
+ handle_degenerated(res, *it,
+ geometry, other_geometry,
+ boundary_checker, other_boundary_checker,
+ first_in_range);
+
+ // TODO: not elegant solution! should be rewritten.
+ if ( it->operations[op_id].position == overlay::position_back )
+ {
+ m_previous_operation = overlay::operation_blocked;
+ m_exit_watcher.reset_detected_exit();
+ }
+ }
+
+ return;
+ }
+
+ // reset
+ m_degenerated_turn_ptr = NULL;
+
+ // handle possible exit
+ bool fake_enter_detected = false;
+ if ( m_exit_watcher.get_exit_operation() == overlay::operation_union )
+ {
+ // real exit point - may be multiple
+ // we know that we entered and now we exit
+ if ( ! turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )
+ {
+ m_exit_watcher.reset_detected_exit();
+
+ // not the last IP
+ update<interior, exterior, '1', transpose_result>(res);
+ }
+ // fake exit point, reset state
+ else if ( op == overlay::operation_intersection )
+ {
+ m_exit_watcher.reset_detected_exit();
+ fake_enter_detected = true;
+ }
+ }
+ else if ( m_exit_watcher.get_exit_operation() == overlay::operation_blocked )
+ {
+ // ignore multiple BLOCKs
+ if ( op == overlay::operation_blocked )
+ return;
+
+ if ( op == overlay::operation_intersection
+ && turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )
+ {
+ fake_enter_detected = true;
+ }
+
+ m_exit_watcher.reset_detected_exit();
+ }
+
+ // i/i, i/x, i/u
+ if ( op == overlay::operation_intersection )
+ {
+ bool const was_outside = m_exit_watcher.is_outside();
+ m_exit_watcher.enter(*it);
+
+ // interiors overlaps
+ update<interior, interior, '1', transpose_result>(res);
+
+ bool const this_b = it->operations[op_id].position == overlay::position_front // ignore spikes!
+ && is_ip_on_boundary<boundary_front>(it->point,
+ it->operations[op_id],
+ boundary_checker,
+ seg_id);
+
+ // going inside on boundary point
+ // may be front only
+ if ( this_b )
+ {
+ // may be front and back
+ bool const other_b = is_ip_on_boundary<boundary_any>(it->point,
+ it->operations[other_op_id],
+ other_boundary_checker,
+ other_id);
+
+ // it's also the boundary of the other geometry
+ if ( other_b )
+ {
+ update<boundary, boundary, '0', transpose_result>(res);
+ }
+ else
+ {
+ update<boundary, interior, '0', transpose_result>(res);
+ }
+ }
+ // going inside on non-boundary point
+ else
+ {
+ // if we didn't enter in the past, we were outside
+ if ( was_outside
+ && ! fake_enter_detected
+ && it->operations[op_id].position != overlay::position_front )
+ {
+ update<interior, exterior, '1', transpose_result>(res);
+
+ // if it's the first IP then the first point is outside
+ if ( first_in_range )
+ {
+ bool const front_b = is_endpoint_on_boundary<boundary_front>(
+ range::front(sub_range(geometry, seg_id)),
+ boundary_checker);
+
+ // if there is a boundary on the first point
+ if ( front_b )
+ {
+ update<boundary, exterior, '0', transpose_result>(res);
+ }
+ }
+ }
+ }
+ }
+ // u/i, u/u, u/x, x/i, x/u, x/x
+ else if ( op == overlay::operation_union || op == overlay::operation_blocked )
+ {
+ // TODO: is exit watcher still needed?
+ // couldn't is_collinear and some going inside counter be used instead?
+
+ bool const is_collinear = it->operations[op_id].is_collinear;
+ bool const was_outside = m_exit_watcher.is_outside()
+ && m_exit_watcher.get_exit_operation() == overlay::operation_none;
+// TODO: move the above condition into the exit_watcher?
+
+ // to exit we must be currently inside and the current segment must be collinear
+ if ( !was_outside && is_collinear )
+ {
+ m_exit_watcher.exit(*it, false);
+ }
+
+ bool const op_blocked = op == overlay::operation_blocked;
+
+ // we're inside and going out from inside
+ // possibly going out right now
+ if ( ! was_outside && is_collinear )
+ {
+ if ( op_blocked
+ && it->operations[op_id].position == overlay::position_back ) // ignore spikes!
+ {
+ // check if this is indeed the boundary point
+ // NOTE: is_ip_on_boundary<>() should be called here but the result will be the same
+ if ( is_endpoint_on_boundary<boundary_back>(it->point, boundary_checker) )
+ {
+ // may be front and back
+ bool const other_b = is_ip_on_boundary<boundary_any>(it->point,
+ it->operations[other_op_id],
+ other_boundary_checker,
+ other_id);
+ // it's also the boundary of the other geometry
+ if ( other_b )
+ {
+ update<boundary, boundary, '0', transpose_result>(res);
+ }
+ else
+ {
+ update<boundary, interior, '0', transpose_result>(res);
+ }
+ }
+ }
+ }
+ // we're outside or intersects some segment from the outside
+ else
+ {
+ // if we are truly outside
+ if ( was_outside
+ && it->operations[op_id].position != overlay::position_front
+ /*&& !is_collinear*/ )
+ {
+ update<interior, exterior, '1', transpose_result>(res);
+ }
+
+ // boundaries don't overlap - just an optimization
+ if ( it->method == overlay::method_crosses )
+ {
+ // the L1 is going from one side of the L2 to the other through the point
+ update<interior, interior, '0', transpose_result>(res);
+
+ // it's the first point in range
+ if ( first_in_range )
+ {
+ bool const front_b = is_endpoint_on_boundary<boundary_front>(
+ range::front(sub_range(geometry, seg_id)),
+ boundary_checker);
+
+ // if there is a boundary on the first point
+ if ( front_b )
+ {
+ update<boundary, exterior, '0', transpose_result>(res);
+ }
+ }
+ }
+ // method other than crosses, check more conditions
+ else
+ {
+ bool const this_b = is_ip_on_boundary<boundary_any>(it->point,
+ it->operations[op_id],
+ boundary_checker,
+ seg_id);
+
+ bool const other_b = is_ip_on_boundary<boundary_any>(it->point,
+ it->operations[other_op_id],
+ other_boundary_checker,
+ other_id);
+
+ // if current IP is on boundary of the geometry
+ if ( this_b )
+ {
+ // it's also the boundary of the other geometry
+ if ( other_b )
+ {
+ update<boundary, boundary, '0', transpose_result>(res);
+ }
+ else
+ {
+ update<boundary, interior, '0', transpose_result>(res);
+ }
+ }
+ // if current IP is not on boundary of the geometry
+ else
+ {
+ // it's also the boundary of the other geometry
+ if ( other_b )
+ {
+ update<interior, boundary, '0', transpose_result>(res);
+ }
+ else
+ {
+ update<interior, interior, '0', transpose_result>(res);
+ }
+ }
+
+ // first IP on the last segment point - this means that the first point is outside
+ if ( first_in_range
+ && ( !this_b || op_blocked )
+ && was_outside
+ && it->operations[op_id].position != overlay::position_front
+ /*&& !is_collinear*/ )
+ {
+ bool const front_b = is_endpoint_on_boundary<boundary_front>(
+ range::front(sub_range(geometry, seg_id)),
+ boundary_checker);
+
+ // if there is a boundary on the first point
+ if ( front_b )
+ {
+ update<boundary, exterior, '0', transpose_result>(res);
+ }
+ }
+
+ }
+ }
+ }
+
+ // store ref to previously analysed (valid) turn
+ m_previous_turn_ptr = boost::addressof(*it);
+ // and previously analysed (valid) operation
+ m_previous_operation = op;
+ }
+
+ // Called for last
+ template <typename Result,
+ typename TurnIt,
+ typename Geometry,
+ typename OtherGeometry,
+ typename BoundaryChecker,
+ typename OtherBoundaryChecker>
+ void apply(Result & res,
+ TurnIt first, TurnIt last,
+ Geometry const& geometry,
+ OtherGeometry const& /*other_geometry*/,
+ BoundaryChecker const& boundary_checker,
+ OtherBoundaryChecker const& /*other_boundary_checker*/)
+ {
+ //BOOST_ASSERT( first != last );
+
+ // here, the possible exit is the real one
+ // we know that we entered and now we exit
+ if ( /*m_exit_watcher.get_exit_operation() == overlay::operation_union // THIS CHECK IS REDUNDANT
+ ||*/ m_previous_operation == overlay::operation_union
+ || m_degenerated_turn_ptr )
+ {
+ update<interior, exterior, '1', transpose_result>(res);
+
+ BOOST_ASSERT(first != last);
+
+ const TurnInfo * turn_ptr = NULL;
+ if ( m_degenerated_turn_ptr )
+ turn_ptr = m_degenerated_turn_ptr;
+ else if ( m_previous_turn_ptr )
+ turn_ptr = m_previous_turn_ptr;
+
+ if ( turn_ptr )
+ {
+ segment_identifier const& prev_seg_id = turn_ptr->operations[op_id].seg_id;
+
+ //BOOST_ASSERT(!boost::empty(sub_range(geometry, prev_seg_id)));
+ bool const prev_back_b = is_endpoint_on_boundary<boundary_back>(
+ range::back(sub_range(geometry, prev_seg_id)),
+ boundary_checker);
+
+ // if there is a boundary on the last point
+ if ( prev_back_b )
+ {
+ update<boundary, exterior, '0', transpose_result>(res);
+ }
+ }
+ }
+
+ // Just in case,
+ // reset exit watcher before the analysis of the next Linestring
+ // note that if there are some enters stored there may be some error above
+ m_exit_watcher.reset();
+
+ m_previous_turn_ptr = NULL;
+ m_previous_operation = overlay::operation_none;
+ m_degenerated_turn_ptr = NULL;
+ }
+
+ template <typename Result,
+ typename Turn,
+ typename Geometry,
+ typename OtherGeometry,
+ typename BoundaryChecker,
+ typename OtherBoundaryChecker>
+ void handle_degenerated(Result & res,
+ Turn const& turn,
+ Geometry const& geometry,
+ OtherGeometry const& other_geometry,
+ BoundaryChecker const& boundary_checker,
+ OtherBoundaryChecker const& /*other_boundary_checker*/,
+ bool first_in_range)
+ {
+ typename detail::single_geometry_return_type<Geometry const>::type
+ ls1_ref = detail::single_geometry(geometry, turn.operations[op_id].seg_id);
+ typename detail::single_geometry_return_type<OtherGeometry const>::type
+ ls2_ref = detail::single_geometry(other_geometry, turn.operations[op_id].other_id);
+
+ // only one of those should be true:
+
+ if ( turn.operations[op_id].position == overlay::position_front )
+ {
+ // valid, point-sized
+ if ( boost::size(ls2_ref) == 2 )
+ {
+ bool const front_b = is_endpoint_on_boundary<boundary_front>(turn.point, boundary_checker);
+
+ if ( front_b )
+ {
+ update<boundary, interior, '0', transpose_result>(res);
+ }
+ else
+ {
+ update<interior, interior, '0', transpose_result>(res);
+ }
+
+ // operation 'c' should be last for the same IP so we know that the next point won't be the same
+ update<interior, exterior, '1', transpose_result>(res);
+
+ m_degenerated_turn_ptr = boost::addressof(turn);
+ }
+ }
+ else if ( turn.operations[op_id].position == overlay::position_back )
+ {
+ // valid, point-sized
+ if ( boost::size(ls2_ref) == 2 )
+ {
+ update<interior, exterior, '1', transpose_result>(res);
+
+ bool const back_b = is_endpoint_on_boundary<boundary_back>(turn.point, boundary_checker);
+
+ if ( back_b )
+ {
+ update<boundary, interior, '0', transpose_result>(res);
+ }
+ else
+ {
+ update<interior, interior, '0', transpose_result>(res);
+ }
+
+ if ( first_in_range )
+ {
+ //BOOST_ASSERT(!boost::empty(ls1_ref));
+ bool const front_b = is_endpoint_on_boundary<boundary_front>(
+ range::front(ls1_ref), boundary_checker);
+ if ( front_b )
+ {
+ update<boundary, exterior, '0', transpose_result>(res);
+ }
+ }
+ }
+ }
+ else if ( turn.operations[op_id].position == overlay::position_middle
+ && turn.operations[other_op_id].position == overlay::position_middle )
+ {
+ update<interior, interior, '0', transpose_result>(res);
+
+ // here we don't know which one is degenerated
+
+ bool const is_point1 = boost::size(ls1_ref) == 2
+ && equals::equals_point_point(range::front(ls1_ref), range::back(ls1_ref));
+ bool const is_point2 = boost::size(ls2_ref) == 2
+ && equals::equals_point_point(range::front(ls2_ref), range::back(ls2_ref));
+
+ // if the second one is degenerated
+ if ( !is_point1 && is_point2 )
+ {
+ update<interior, exterior, '1', transpose_result>(res);
+
+ if ( first_in_range )
+ {
+ //BOOST_ASSERT(!boost::empty(ls1_ref));
+ bool const front_b = is_endpoint_on_boundary<boundary_front>(
+ range::front(ls1_ref), boundary_checker);
+ if ( front_b )
+ {
+ update<boundary, exterior, '0', transpose_result>(res);
+ }
+ }
+
+ m_degenerated_turn_ptr = boost::addressof(turn);
+ }
+ }
+
+ // NOTE: other.position == front and other.position == back
+ // will be handled later, for the other geometry
+ }
+
+ private:
+ exit_watcher<TurnInfo, OpId> m_exit_watcher;
+ segment_watcher<same_single> m_seg_watcher;
+ const TurnInfo * m_previous_turn_ptr;
+ overlay::operation_type m_previous_operation;
+ const TurnInfo * m_degenerated_turn_ptr;
+ };
+
+ template <typename Result,
+ typename TurnIt,
+ typename Analyser,
+ typename Geometry,
+ typename OtherGeometry,
+ typename BoundaryChecker,
+ typename OtherBoundaryChecker>
+ static inline void analyse_each_turn(Result & res,
+ Analyser & analyser,
+ TurnIt first, TurnIt last,
+ Geometry const& geometry,
+ OtherGeometry const& other_geometry,
+ BoundaryChecker const& boundary_checker,
+ OtherBoundaryChecker const& other_boundary_checker)
+ {
+ if ( first == last )
+ return;
+
+ for ( TurnIt it = first ; it != last ; ++it )
+ {
+ analyser.apply(res, it,
+ geometry, other_geometry,
+ boundary_checker, other_boundary_checker);
+
+ if ( res.interrupt )
+ return;
+ }
+
+ analyser.apply(res, first, last,
+ geometry, other_geometry,
+ boundary_checker, other_boundary_checker);
+ }
+};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_LINEAR_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/point_geometry.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/point_geometry.hpp
new file mode 100644
index 0000000000..86c236d357
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/point_geometry.hpp
@@ -0,0 +1,205 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014, Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_GEOMETRY_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_GEOMETRY_HPP
+
+#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
+//#include <boost/geometry/algorithms/within.hpp>
+//#include <boost/geometry/algorithms/covered_by.hpp>
+
+#include <boost/geometry/algorithms/detail/relate/topology_check.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+// non-point geometry
+template <typename Point, typename Geometry, bool Transpose = false>
+struct point_geometry
+{
+ // TODO: interrupt only if the topology check is complex
+
+ static const bool interruption_enabled = true;
+
+ template <typename Result>
+ static inline void apply(Point const& point, Geometry const& geometry, Result & result)
+ {
+ int pig = detail::within::point_in_geometry(point, geometry);
+
+ if ( pig > 0 ) // within
+ {
+ set<interior, interior, '0', Transpose>(result);
+ }
+ else if ( pig == 0 )
+ {
+ set<interior, boundary, '0', Transpose>(result);
+ }
+ else // pig < 0 - not within
+ {
+ set<interior, exterior, '0', Transpose>(result);
+ }
+
+ set<exterior, exterior, result_dimension<Point>::value, Transpose>(result);
+
+ if ( result.interrupt )
+ return;
+
+ // the point is on the boundary
+ if ( pig == 0 )
+ {
+ // NOTE: even for MLs, if there is at least one boundary point,
+ // somewhere there must be another one
+
+ // check if there are other boundaries outside
+ typedef detail::relate::topology_check<Geometry> tc_t;
+ //tc_t tc(geometry, point);
+ //if ( tc.has_interior )
+ set<exterior, interior, tc_t::interior, Transpose>(result);
+ //if ( tc.has_boundary )
+ set<exterior, boundary, tc_t::boundary, Transpose>(result);
+ }
+ else
+ {
+ // check if there is a boundary in Geometry
+ typedef detail::relate::topology_check<Geometry> tc_t;
+ tc_t tc(geometry);
+ if ( tc.has_interior )
+ set<exterior, interior, tc_t::interior, Transpose>(result);
+ if ( tc.has_boundary )
+ set<exterior, boundary, tc_t::boundary, Transpose>(result);
+ }
+ }
+};
+
+// transposed result of point_geometry
+template <typename Geometry, typename Point>
+struct geometry_point
+{
+ // TODO: interrupt only if the topology check is complex
+
+ static const bool interruption_enabled = true;
+
+ template <typename Result>
+ static inline void apply(Geometry const& geometry, Point const& point, Result & result)
+ {
+ point_geometry<Point, Geometry, true>::apply(point, geometry, result);
+ }
+};
+
+// TODO: rewrite the folowing:
+
+//// NOTE: Those tests should be consistent with within(Point, Box) and covered_by(Point, Box)
+//// There is no EPS used in those functions, values are compared using < or <=
+//// so comparing MIN and MAX in the same way should be fine
+//
+//template <typename Box, std::size_t I = 0, std::size_t D = geometry::dimension<Box>::value>
+//struct box_has_interior
+//{
+// static inline bool apply(Box const& box)
+// {
+// return geometry::get<min_corner, I>(box) < geometry::get<max_corner, I>(box)
+// && box_has_interior<Box, I + 1, D>::apply(box);
+// }
+//};
+//
+//template <typename Box, std::size_t D>
+//struct box_has_interior<Box, D, D>
+//{
+// static inline bool apply(Box const&) { return true; }
+//};
+//
+//// NOTE: especially important here (see the NOTE above).
+//
+//template <typename Box, std::size_t I = 0, std::size_t D = geometry::dimension<Box>::value>
+//struct box_has_equal_min_max
+//{
+// static inline bool apply(Box const& box)
+// {
+// return geometry::get<min_corner, I>(box) == geometry::get<max_corner, I>(box)
+// && box_has_equal_min_max<Box, I + 1, D>::apply(box);
+// }
+//};
+//
+//template <typename Box, std::size_t D>
+//struct box_has_equal_min_max<Box, D, D>
+//{
+// static inline bool apply(Box const&) { return true; }
+//};
+//
+//template <typename Point, typename Box>
+//struct point_box
+//{
+// static inline result apply(Point const& point, Box const& box)
+// {
+// result res;
+//
+// if ( geometry::within(point, box) ) // this also means that the box has interior
+// {
+// return result("0FFFFFTTT");
+// }
+// else if ( geometry::covered_by(point, box) ) // point is on the boundary
+// {
+// //if ( box_has_interior<Box>::apply(box) )
+// //{
+// // return result("F0FFFFTTT");
+// //}
+// //else if ( box_has_equal_min_max<Box>::apply(box) ) // no boundary outside point
+// //{
+// // return result("F0FFFFFFT");
+// //}
+// //else // no interior outside point
+// //{
+// // return result("F0FFFFFTT");
+// //}
+// return result("F0FFFF**T");
+// }
+// else
+// {
+// /*if ( box_has_interior<Box>::apply(box) )
+// {
+// return result("FF0FFFTTT");
+// }
+// else
+// {
+// return result("FF0FFFFTT");
+// }*/
+// return result("FF0FFF*TT");
+// }
+//
+// return res;
+// }
+//};
+//
+//template <typename Box, typename Point>
+//struct box_point
+//{
+// static inline result apply(Box const& box, Point const& point)
+// {
+// if ( geometry::within(point, box) )
+// return result("0FTFFTFFT");
+// else if ( geometry::covered_by(point, box) )
+// return result("FF*0F*FFT");
+// else
+// return result("FF*FFT0FT");
+// }
+//};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_GEOMETRY_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/point_point.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/point_point.hpp
new file mode 100644
index 0000000000..e623868b92
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/point_point.hpp
@@ -0,0 +1,242 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014, Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_POINT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_POINT_HPP
+
+#include <algorithm>
+#include <vector>
+
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
+#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
+#include <boost/geometry/algorithms/detail/relate/less.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+template <typename Point1, typename Point2>
+struct point_point
+{
+ static const bool interruption_enabled = false;
+
+ template <typename Result>
+ static inline void apply(Point1 const& point1, Point2 const& point2, Result & result)
+ {
+ bool equal = detail::equals::equals_point_point(point1, point2);
+ if ( equal )
+ {
+ set<interior, interior, '0'>(result);
+ }
+ else
+ {
+ set<interior, exterior, '0'>(result);
+ set<exterior, interior, '0'>(result);
+ }
+
+ set<exterior, exterior, result_dimension<Point1>::value>(result);
+ }
+};
+
+template <typename Point, typename MultiPoint>
+std::pair<bool, bool> point_multipoint_check(Point const& point, MultiPoint const& multi_point)
+{
+ bool found_inside = false;
+ bool found_outside = false;
+
+ // point_in_geometry could be used here but why iterate over MultiPoint twice?
+ // we must search for a point in the exterior because all points in MultiPoint can be equal
+
+ typedef typename boost::range_iterator<MultiPoint const>::type iterator;
+ iterator it = boost::begin(multi_point);
+ iterator last = boost::end(multi_point);
+ for ( ; it != last ; ++it )
+ {
+ bool ii = detail::equals::equals_point_point(point, *it);
+
+ if ( ii )
+ found_inside = true;
+ else
+ found_outside = true;
+
+ if ( found_inside && found_outside )
+ break;
+ }
+
+ return std::make_pair(found_inside, found_outside);
+}
+
+template <typename Point, typename MultiPoint, bool Transpose = false>
+struct point_multipoint
+{
+ static const bool interruption_enabled = false;
+
+ template <typename Result>
+ static inline void apply(Point const& point, MultiPoint const& multi_point, Result & result)
+ {
+ if ( boost::empty(multi_point) )
+ {
+ // TODO: throw on empty input?
+ set<interior, exterior, '0', Transpose>(result);
+ return;
+ }
+
+ std::pair<bool, bool> rel = point_multipoint_check(point, multi_point);
+
+ if ( rel.first ) // some point of MP is equal to P
+ {
+ set<interior, interior, '0', Transpose>(result);
+
+ if ( rel.second ) // a point of MP was found outside P
+ {
+ set<exterior, interior, '0', Transpose>(result);
+ }
+ }
+ else
+ {
+ set<interior, exterior, '0', Transpose>(result);
+ set<exterior, interior, '0', Transpose>(result);
+ }
+
+ set<exterior, exterior, result_dimension<Point>::value, Transpose>(result);
+ }
+};
+
+template <typename MultiPoint, typename Point>
+struct multipoint_point
+{
+ static const bool interruption_enabled = false;
+
+ template <typename Result>
+ static inline void apply(MultiPoint const& multi_point, Point const& point, Result & result)
+ {
+ point_multipoint<Point, MultiPoint, true>::apply(point, multi_point, result);
+ }
+};
+
+template <typename MultiPoint1, typename MultiPoint2>
+struct multipoint_multipoint
+{
+ static const bool interruption_enabled = true;
+
+ template <typename Result>
+ static inline void apply(MultiPoint1 const& multi_point1, MultiPoint2 const& multi_point2, Result & result)
+ {
+ {
+ // TODO: throw on empty input?
+ bool empty1 = boost::empty(multi_point1);
+ bool empty2 = boost::empty(multi_point2);
+ if ( empty1 && empty2 )
+ {
+ return;
+ }
+ else if ( empty1 )
+ {
+ set<exterior, interior, '0'>(result);
+ return;
+ }
+ else if ( empty2 )
+ {
+ set<interior, exterior, '0'>(result);
+ return;
+ }
+ }
+
+// TODO: ADD A CHECK TO THE RESULT INDICATING IF THE FIRST AND/OR SECOND GEOMETRY MUST BE ANALYSED
+
+// TODO: if I/I is set for one MPt, this won't be changed when the other one in analysed
+// so if e.g. only I/I must be analysed we musn't check the other MPt
+
+// TODO: Also, the geometry with the smaller number of points may be analysed first
+ //if ( boost::size(multi_point1) < boost::size(multi_point2) )
+
+ // NlogN + MlogN
+ bool all_handled = search<false>(multi_point1, multi_point2, result);
+
+ if ( all_handled || result.interrupt )
+ return;
+
+ // MlogM + NlogM
+ search<true>(multi_point2, multi_point1, result);
+ }
+
+ template <bool Transpose,
+ typename SortedMultiPoint,
+ typename IteratedMultiPoint,
+ typename Result>
+ static inline bool search(SortedMultiPoint const& sorted_mpt,
+ IteratedMultiPoint const& iterated_mpt,
+ Result & result)
+ {
+ // sort points from the 1 MPt
+ typedef typename geometry::point_type<SortedMultiPoint>::type point_type;
+ std::vector<point_type> points(boost::begin(sorted_mpt), boost::end(sorted_mpt));
+ std::sort(points.begin(), points.end(), less());
+
+ bool found_inside = false;
+ bool found_outside = false;
+
+ // for each point in the second MPt
+ typedef typename boost::range_iterator<IteratedMultiPoint const>::type iterator;
+ for ( iterator it = boost::begin(iterated_mpt) ;
+ it != boost::end(iterated_mpt) ; ++it )
+ {
+ bool ii =
+ std::binary_search(points.begin(), points.end(), *it, less());
+ if ( ii )
+ found_inside = true;
+ else
+ found_outside = true;
+
+ if ( found_inside && found_outside )
+ break;
+ }
+
+ // an optimization
+ bool all_handled = false;
+
+ if ( found_inside ) // some point of MP2 is equal to some of MP1
+ {
+// TODO: if I/I is set for one MPt, this won't be changed when the other one in analysed
+// so if e.g. only I/I must be analysed we musn't check the other MPt
+
+ set<interior, interior, '0', Transpose>(result);
+
+ if ( found_outside ) // some point of MP2 was found outside of MP1
+ {
+ set<exterior, interior, '0', Transpose>(result);
+ }
+ }
+ else
+ {
+ set<interior, exterior, '0', Transpose>(result);
+ set<exterior, interior, '0', Transpose>(result);
+
+ // if no point is intersecting the other MPt then we musn't analyse the reversed case
+ all_handled = true;
+ }
+
+ set<exterior, exterior, result_dimension<point_type>::value, Transpose>(result);
+
+ return all_handled;
+ }
+};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_POINT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/relate.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/relate.hpp
new file mode 100644
index 0000000000..946653452a
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/relate.hpp
@@ -0,0 +1,339 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RELATE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RELATE_HPP
+
+#include <cstddef>
+
+#include <boost/concept_check.hpp>
+#include <boost/range.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/point_order.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/strategies/concepts/within_concept.hpp>
+#include <boost/geometry/strategies/default_strategy.hpp>
+#include <boost/geometry/strategies/within.hpp>
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/order_as_direction.hpp>
+#include <boost/geometry/views/closeable_view.hpp>
+#include <boost/geometry/views/reversible_view.hpp>
+
+#include <boost/geometry/algorithms/detail/relate/result.hpp>
+
+#include <boost/geometry/algorithms/detail/relate/point_point.hpp>
+#include <boost/geometry/algorithms/detail/relate/point_geometry.hpp>
+#include <boost/geometry/algorithms/detail/relate/linear_linear.hpp>
+#include <boost/geometry/algorithms/detail/relate/linear_areal.hpp>
+#include <boost/geometry/algorithms/detail/relate/areal_areal.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+// Those are used only to allow dispatch::relate to produce compile-time error
+
+template <typename Geometry,
+ typename Tag = typename geometry::tag<Geometry>::type>
+struct is_supported_by_generic
+{
+ static const bool value
+ = boost::is_same<Tag, linestring_tag>::value
+ || boost::is_same<Tag, multi_linestring_tag>::value
+ || boost::is_same<Tag, ring_tag>::value
+ || boost::is_same<Tag, polygon_tag>::value
+ || boost::is_same<Tag, multi_polygon_tag>::value;
+};
+
+template <typename Geometry1,
+ typename Geometry2,
+ typename Tag1 = typename geometry::tag<Geometry1>::type,
+ typename Tag2 = typename geometry::tag<Geometry2>::type>
+struct is_generic
+{
+ static const bool value = is_supported_by_generic<Geometry1>::value
+ && is_supported_by_generic<Geometry2>::value;
+};
+
+
+template <typename Point, typename Geometry, typename Tag>
+struct is_generic<Point, Geometry, point_tag, Tag>
+{
+ static const bool value = is_supported_by_generic<Geometry>::value;
+};
+
+template <typename Geometry, typename Point, typename Tag>
+struct is_generic<Geometry, Point, Tag, point_tag>
+{
+ static const bool value = is_supported_by_generic<Geometry>::value;
+};
+
+template <typename Point1, typename Point2>
+struct is_generic<Point1, Point2, point_tag, point_tag>
+{
+ static const bool value = false;
+};
+
+
+}} // namespace detail::relate
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace detail_dispatch { namespace relate {
+
+
+template <typename Geometry1,
+ typename Geometry2,
+ typename Tag1 = typename geometry::tag<Geometry1>::type,
+ typename Tag2 = typename geometry::tag<Geometry2>::type,
+ int TopDim1 = geometry::topological_dimension<Geometry1>::value,
+ int TopDim2 = geometry::topological_dimension<Geometry2>::value,
+ bool IsGeneric = detail::relate::is_generic<Geometry1, Geometry2>::value
+>
+struct relate : not_implemented<Tag1, Tag2>
+{};
+
+
+template <typename Point1, typename Point2>
+struct relate<Point1, Point2, point_tag, point_tag, 0, 0, false>
+ : detail::relate::point_point<Point1, Point2>
+{};
+
+template <typename Point, typename MultiPoint>
+struct relate<Point, MultiPoint, point_tag, multi_point_tag, 0, 0, false>
+ : detail::relate::point_multipoint<Point, MultiPoint>
+{};
+
+template <typename MultiPoint, typename Point>
+struct relate<MultiPoint, Point, multi_point_tag, point_tag, 0, 0, false>
+ : detail::relate::multipoint_point<MultiPoint, Point>
+{};
+
+template <typename MultiPoint1, typename MultiPoint2>
+struct relate<MultiPoint1, MultiPoint2, multi_point_tag, multi_point_tag, 0, 0, false>
+ : detail::relate::multipoint_multipoint<MultiPoint1, MultiPoint2>
+{};
+
+//template <typename Point, typename Box, int TopDim2>
+//struct relate<Point, Box, point_tag, box_tag, 0, TopDim2, false>
+// : detail::relate::point_box<Point, Box>
+//{};
+//
+//template <typename Box, typename Point, int TopDim1>
+//struct relate<Box, Point, box_tag, point_tag, TopDim1, 0, false>
+// : detail::relate::box_point<Box, Point>
+//{};
+
+
+template <typename Point, typename Geometry, typename Tag2, int TopDim2>
+struct relate<Point, Geometry, point_tag, Tag2, 0, TopDim2, true>
+ : detail::relate::point_geometry<Point, Geometry>
+{};
+
+template <typename Geometry, typename Point, typename Tag1, int TopDim1>
+struct relate<Geometry, Point, Tag1, point_tag, TopDim1, 0, true>
+ : detail::relate::geometry_point<Geometry, Point>
+{};
+
+
+template <typename Linear1, typename Linear2, typename Tag1, typename Tag2>
+struct relate<Linear1, Linear2, Tag1, Tag2, 1, 1, true>
+ : detail::relate::linear_linear<Linear1, Linear2>
+{};
+
+
+template <typename Linear, typename Areal, typename Tag1, typename Tag2>
+struct relate<Linear, Areal, Tag1, Tag2, 1, 2, true>
+ : detail::relate::linear_areal<Linear, Areal>
+{};
+
+template <typename Areal, typename Linear, typename Tag1, typename Tag2>
+struct relate<Areal, Linear, Tag1, Tag2, 2, 1, true>
+ : detail::relate::areal_linear<Areal, Linear>
+{};
+
+
+template <typename Areal1, typename Areal2, typename Tag1, typename Tag2>
+struct relate<Areal1, Areal2, Tag1, Tag2, 2, 2, true>
+ : detail::relate::areal_areal<Areal1, Areal2>
+{};
+
+
+}} // namespace detail_dispatch::relate
+#endif // DOXYGEN_NO_DISPATCH
+
+namespace detail { namespace relate {
+
+template <typename Geometry1, typename Geometry2>
+struct interruption_enabled
+{
+ static const bool value =
+ detail_dispatch::relate::relate<Geometry1, Geometry2>::interruption_enabled;
+};
+
+template <typename Geometry1,
+ typename Geometry2,
+ typename Result,
+ bool IsSequence = boost::mpl::is_sequence<Result>::value>
+struct result_handler_type
+ : not_implemented<Result>
+{};
+
+template <typename Geometry1, typename Geometry2>
+struct result_handler_type<Geometry1, Geometry2, matrix9, false>
+{
+ typedef matrix_handler<matrix9> type;
+};
+
+template <typename Geometry1, typename Geometry2>
+struct result_handler_type<Geometry1, Geometry2, mask9, false>
+{
+ typedef mask_handler
+ <
+ mask9,
+ interruption_enabled
+ <
+ Geometry1,
+ Geometry2
+ >::value
+ > type;
+};
+
+template <typename Geometry1, typename Geometry2, typename Head, typename Tail>
+struct result_handler_type<Geometry1, Geometry2, boost::tuples::cons<Head, Tail>, false>
+{
+ typedef mask_handler
+ <
+ boost::tuples::cons<Head, Tail>,
+ interruption_enabled
+ <
+ Geometry1,
+ Geometry2
+ >::value
+ > type;
+};
+
+template <typename Geometry1, typename Geometry2,
+ char II, char IB, char IE,
+ char BI, char BB, char BE,
+ char EI, char EB, char EE>
+struct result_handler_type<Geometry1, Geometry2, static_mask<II, IB, IE, BI, BB, BE, EI, EB, EE>, false>
+{
+ typedef static_mask_handler
+ <
+ static_mask<II, IB, IE, BI, BB, BE, EI, EB, EE>,
+ interruption_enabled
+ <
+ Geometry1,
+ Geometry2
+ >::value
+ > type;
+};
+
+template <typename Geometry1, typename Geometry2, typename StaticSequence>
+struct result_handler_type<Geometry1, Geometry2, StaticSequence, true>
+{
+ typedef static_mask_handler
+ <
+ StaticSequence,
+ interruption_enabled
+ <
+ Geometry1,
+ Geometry2
+ >::value
+ > type;
+};
+
+template <typename MatrixOrMask, typename Geometry1, typename Geometry2>
+inline
+typename result_handler_type
+ <
+ Geometry1,
+ Geometry2,
+ MatrixOrMask
+ >::type::result_type
+relate(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ MatrixOrMask const& matrix_or_mask = MatrixOrMask())
+{
+ typedef typename result_handler_type
+ <
+ Geometry1,
+ Geometry2,
+ MatrixOrMask
+ >::type handler_type;
+
+ handler_type handler(matrix_or_mask);
+ detail_dispatch::relate::relate<Geometry1, Geometry2>::apply(geometry1, geometry2, handler);
+ return handler.result();
+}
+
+struct implemented_tag {};
+
+template <template <typename, typename> class StaticMaskTrait,
+ typename Geometry1,
+ typename Geometry2>
+struct relate_base
+ : boost::mpl::if_
+ <
+ boost::mpl::or_
+ <
+ boost::is_base_of
+ <
+ nyi::not_implemented_tag,
+ StaticMaskTrait<Geometry1, Geometry2>
+ >,
+ boost::is_base_of
+ <
+ nyi::not_implemented_tag,
+ detail_dispatch::relate::relate<Geometry1, Geometry2>
+ >
+ >,
+ not_implemented
+ <
+ typename geometry::tag<Geometry1>::type,
+ typename geometry::tag<Geometry2>::type
+ >,
+ implemented_tag
+ >::type
+{
+ static inline bool apply(Geometry1 const& g1, Geometry2 const& g2)
+ {
+ typedef typename StaticMaskTrait<Geometry1, Geometry2>::type static_mask;
+ return detail::relate::relate<static_mask>(g1, g2);
+ }
+};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RELATE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/result.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/result.hpp
new file mode 100644
index 0000000000..1bcb5275d2
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/result.hpp
@@ -0,0 +1,1390 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RESULT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RESULT_HPP
+
+#include <boost/tuple/tuple.hpp>
+
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/begin.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/vector_c.hpp>
+
+#include <boost/geometry/core/topological_dimension.hpp>
+
+// TEMP - move this header to geometry/detail
+#include <boost/geometry/index/detail/tuples.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+enum field { interior = 0, boundary = 1, exterior = 2 };
+
+// TODO: IF THE RESULT IS UPDATED WITH THE MAX POSSIBLE VALUE FOR SOME PAIR OF GEOEMTRIES
+// THE VALUE ALREADY STORED MUSN'T BE CHECKED
+// update() calls chould be replaced with set() in those cases
+// but for safety reasons (STATIC_ASSERT) we should check if parameter D is valid and set() doesn't do that
+// so some additional function could be added, e.g. set_dim()
+
+// matrix
+
+// TODO add height?
+
+template <std::size_t Width>
+class matrix
+{
+ BOOST_STATIC_ASSERT(Width == 2 || Width == 3);
+
+public:
+
+ static const std::size_t size = Width * Width;
+
+ inline matrix()
+ {
+ ::memset(m_array, 'F', size);
+ }
+
+ template <field F1, field F2>
+ inline char get() const
+ {
+ static const bool in_bounds = F1 * Width + F2 < size;
+ return get_dispatch<F1, F2>(integral_constant<bool, in_bounds>());
+ }
+
+ template <field F1, field F2, char V>
+ inline void set()
+ {
+ static const bool in_bounds = F1 * Width + F2 < size;
+ set_dispatch<F1, F2, V>(integral_constant<bool, in_bounds>());
+ }
+
+ template <field F1, field F2, char D>
+ inline void update()
+ {
+ static const bool in_bounds = F1 * Width + F2 < size;
+ update_dispatch<F1, F2, D>(integral_constant<bool, in_bounds>());
+ }
+
+ inline const char * data() const
+ {
+ return m_array;
+ }
+
+private:
+ template <field F1, field F2>
+ inline char get_dispatch(integral_constant<bool, true>) const
+ {
+ return m_array[F1 * Width + F2];
+ }
+ template <field F1, field F2>
+ inline char get_dispatch(integral_constant<bool, false>) const
+ {
+ return 'F';
+ }
+
+ template <field F1, field F2, char V>
+ inline void set_dispatch(integral_constant<bool, true>)
+ {
+ BOOST_STATIC_ASSERT(('0' <= V && V <= '9') || V == 'T' || V == 'F');
+ m_array[F1 * Width + F2] = V;
+ }
+ template <field F1, field F2, char V>
+ inline void set_dispatch(integral_constant<bool, false>)
+ {}
+
+ template <field F1, field F2, char D>
+ inline void update_dispatch(integral_constant<bool, true>)
+ {
+ BOOST_STATIC_ASSERT('0' <= D && D <= '9');
+ char c = m_array[F1 * Width + F2];
+ if ( D > c || c > '9')
+ m_array[F1 * Width + F2] = D;
+ }
+ template <field F1, field F2, char D>
+ inline void update_dispatch(integral_constant<bool, false>)
+ {}
+
+ char m_array[size];
+};
+
+// TODO add EnableDimensions parameter?
+
+struct matrix9 {};
+//struct matrix4 {};
+
+// matrix_width
+
+template <typename MatrixOrMask>
+struct matrix_width
+ : not_implemented<MatrixOrMask>
+{};
+
+template <>
+struct matrix_width<matrix9>
+{
+ static const std::size_t value = 3;
+};
+
+// matrix_handler
+
+template <typename Matrix>
+class matrix_handler
+ : private matrix<matrix_width<Matrix>::value>
+{
+ typedef matrix<matrix_width<Matrix>::value> base_t;
+
+public:
+ typedef std::string result_type;
+
+ static const bool interrupt = false;
+
+ matrix_handler(Matrix const&)
+ {}
+
+ result_type result() const
+ {
+ return std::string(this->data(),
+ this->data() + base_t::size);
+ }
+
+ template <field F1, field F2, char D>
+ inline bool may_update() const
+ {
+ BOOST_STATIC_ASSERT('0' <= D && D <= '9');
+
+ char const c = static_cast<base_t const&>(*this).template get<F1, F2>();
+ return D > c || c > '9';
+ }
+
+ //template <field F1, field F2>
+ //inline char get() const
+ //{
+ // return static_cast<base_t const&>(*this).template get<F1, F2>();
+ //}
+
+ template <field F1, field F2, char V>
+ inline void set()
+ {
+ static_cast<base_t&>(*this).template set<F1, F2, V>();
+ }
+
+ template <field F1, field F2, char D>
+ inline void update()
+ {
+ static_cast<base_t&>(*this).template update<F1, F2, D>();
+ }
+};
+
+// RUN-TIME MASKS
+
+// mask9
+
+class mask9
+{
+public:
+ static const std::size_t width = 3; // TEMP
+
+ inline mask9(std::string const& de9im_mask)
+ {
+ // TODO: throw an exception here?
+ BOOST_ASSERT(de9im_mask.size() == 9);
+ ::memcpy(m_mask, de9im_mask.c_str(), 9);
+ }
+
+ template <field F1, field F2>
+ inline char get() const
+ {
+ return m_mask[F1 * 3 + F2];
+ }
+
+private:
+ char m_mask[9];
+};
+
+// interrupt()
+
+template <typename Mask, bool InterruptEnabled>
+struct interrupt_dispatch
+{
+ template <field F1, field F2, char V>
+ static inline bool apply(Mask const&)
+ {
+ return false;
+ }
+};
+
+template <typename Mask>
+struct interrupt_dispatch<Mask, true>
+{
+ template <field F1, field F2, char V>
+ static inline bool apply(Mask const& mask)
+ {
+ char m = mask.template get<F1, F2>();
+ return check<V>(m);
+ }
+
+ template <char V>
+ static inline bool check(char m)
+ {
+ if ( V >= '0' && V <= '9' )
+ {
+ return m == 'F' || ( m < V && m >= '0' && m <= '9' );
+ }
+ else if ( V == 'T' )
+ {
+ return m == 'F';
+ }
+ return false;
+ }
+};
+
+template <typename Masks, int I = 0, int N = boost::tuples::length<Masks>::value>
+struct interrupt_dispatch_tuple
+{
+ template <field F1, field F2, char V>
+ static inline bool apply(Masks const& masks)
+ {
+ typedef typename boost::tuples::element<I, Masks>::type mask_type;
+ mask_type const& mask = boost::get<I>(masks);
+ return interrupt_dispatch<mask_type, true>::template apply<F1, F2, V>(mask)
+ && interrupt_dispatch_tuple<Masks, I+1>::template apply<F1, F2, V>(masks);
+ }
+};
+
+template <typename Masks, int N>
+struct interrupt_dispatch_tuple<Masks, N, N>
+{
+ template <field F1, field F2, char V>
+ static inline bool apply(Masks const& )
+ {
+ return true;
+ }
+};
+
+template <typename T0, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8, typename T9>
+struct interrupt_dispatch<boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>, true>
+{
+ typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> mask_type;
+
+ template <field F1, field F2, char V>
+ static inline bool apply(mask_type const& mask)
+ {
+ return interrupt_dispatch_tuple<mask_type>::template apply<F1, F2, V>(mask);
+ }
+};
+
+template <typename Head, typename Tail>
+struct interrupt_dispatch<boost::tuples::cons<Head, Tail>, true>
+{
+ typedef boost::tuples::cons<Head, Tail> mask_type;
+
+ template <field F1, field F2, char V>
+ static inline bool apply(mask_type const& mask)
+ {
+ return interrupt_dispatch_tuple<mask_type>::template apply<F1, F2, V>(mask);
+ }
+};
+
+template <field F1, field F2, char V, bool InterruptEnabled, typename Mask>
+inline bool interrupt(Mask const& mask)
+{
+ return interrupt_dispatch<Mask, InterruptEnabled>
+ ::template apply<F1, F2, V>(mask);
+}
+
+// may_update()
+
+template <typename Mask>
+struct may_update_dispatch
+{
+ template <field F1, field F2, char D, typename Matrix>
+ static inline bool apply(Mask const& mask, Matrix const& matrix)
+ {
+ BOOST_STATIC_ASSERT('0' <= D && D <= '9');
+
+ char const m = mask.template get<F1, F2>();
+
+ if ( m == 'F' )
+ {
+ return true;
+ }
+ else if ( m == 'T' )
+ {
+ char const c = matrix.template get<F1, F2>();
+ return c == 'F'; // if it's T or between 0 and 9, the result will be the same
+ }
+ else if ( m >= '0' && m <= '9' )
+ {
+ char const c = matrix.template get<F1, F2>();
+ return D > c || c > '9';
+ }
+
+ return false;
+ }
+};
+
+template <typename Masks, int I = 0, int N = boost::tuples::length<Masks>::value>
+struct may_update_dispatch_tuple
+{
+ template <field F1, field F2, char D, typename Matrix>
+ static inline bool apply(Masks const& masks, Matrix const& matrix)
+ {
+ typedef typename boost::tuples::element<I, Masks>::type mask_type;
+ mask_type const& mask = boost::get<I>(masks);
+ return may_update_dispatch<mask_type>::template apply<F1, F2, D>(mask, matrix)
+ || may_update_dispatch_tuple<Masks, I+1>::template apply<F1, F2, D>(masks, matrix);
+ }
+};
+
+template <typename Masks, int N>
+struct may_update_dispatch_tuple<Masks, N, N>
+{
+ template <field F1, field F2, char D, typename Matrix>
+ static inline bool apply(Masks const& , Matrix const& )
+ {
+ return false;
+ }
+};
+
+template <typename T0, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8, typename T9>
+struct may_update_dispatch< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
+{
+ typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> mask_type;
+
+ template <field F1, field F2, char D, typename Matrix>
+ static inline bool apply(mask_type const& mask, Matrix const& matrix)
+ {
+ return may_update_dispatch_tuple<mask_type>::template apply<F1, F2, D>(mask, matrix);
+ }
+};
+
+template <typename Head, typename Tail>
+struct may_update_dispatch< boost::tuples::cons<Head, Tail> >
+{
+ typedef boost::tuples::cons<Head, Tail> mask_type;
+
+ template <field F1, field F2, char D, typename Matrix>
+ static inline bool apply(mask_type const& mask, Matrix const& matrix)
+ {
+ return may_update_dispatch_tuple<mask_type>::template apply<F1, F2, D>(mask, matrix);
+ }
+};
+
+template <field F1, field F2, char D, typename Mask, typename Matrix>
+inline bool may_update(Mask const& mask, Matrix const& matrix)
+{
+ return may_update_dispatch<Mask>
+ ::template apply<F1, F2, D>(mask, matrix);
+}
+
+// check()
+
+template <typename Mask>
+struct check_dispatch
+{
+ template <typename Matrix>
+ static inline bool apply(Mask const& mask, Matrix const& matrix)
+ {
+ return per_one<interior, interior>(mask, matrix)
+ && per_one<interior, boundary>(mask, matrix)
+ && per_one<interior, exterior>(mask, matrix)
+ && per_one<boundary, interior>(mask, matrix)
+ && per_one<boundary, boundary>(mask, matrix)
+ && per_one<boundary, exterior>(mask, matrix)
+ && per_one<exterior, interior>(mask, matrix)
+ && per_one<exterior, boundary>(mask, matrix)
+ && per_one<exterior, exterior>(mask, matrix);
+ }
+
+ template <field F1, field F2, typename Matrix>
+ static inline bool per_one(Mask const& mask, Matrix const& matrix)
+ {
+ const char mask_el = mask.template get<F1, F2>();
+ const char el = matrix.template get<F1, F2>();
+
+ if ( mask_el == 'F' )
+ {
+ return el == 'F';
+ }
+ else if ( mask_el == 'T' )
+ {
+ return el == 'T' || ( el >= '0' && el <= '9' );
+ }
+ else if ( mask_el >= '0' && mask_el <= '9' )
+ {
+ return el == mask_el;
+ }
+
+ return true;
+ }
+};
+
+template <typename Masks, int I = 0, int N = boost::tuples::length<Masks>::value>
+struct check_dispatch_tuple
+{
+ template <typename Matrix>
+ static inline bool apply(Masks const& masks, Matrix const& matrix)
+ {
+ typedef typename boost::tuples::element<I, Masks>::type mask_type;
+ mask_type const& mask = boost::get<I>(masks);
+ return check_dispatch<mask_type>::apply(mask, matrix)
+ || check_dispatch_tuple<Masks, I+1>::apply(masks, matrix);
+ }
+};
+
+template <typename Masks, int N>
+struct check_dispatch_tuple<Masks, N, N>
+{
+ template <typename Matrix>
+ static inline bool apply(Masks const&, Matrix const&)
+ {
+ return false;
+ }
+};
+
+template <typename T0, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8, typename T9>
+struct check_dispatch< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
+{
+ typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> mask_type;
+
+ template <typename Matrix>
+ static inline bool apply(mask_type const& mask, Matrix const& matrix)
+ {
+ return check_dispatch_tuple<mask_type>::apply(mask, matrix);
+ }
+};
+
+template <typename Head, typename Tail>
+struct check_dispatch< boost::tuples::cons<Head, Tail> >
+{
+ typedef boost::tuples::cons<Head, Tail> mask_type;
+
+ template <typename Matrix>
+ static inline bool apply(mask_type const& mask, Matrix const& matrix)
+ {
+ return check_dispatch_tuple<mask_type>::apply(mask, matrix);
+ }
+};
+
+template <typename Mask, typename Matrix>
+inline bool check(Mask const& mask, Matrix const& matrix)
+{
+ return check_dispatch<Mask>::apply(mask, matrix);
+}
+
+// matrix_width
+
+template <>
+struct matrix_width<mask9>
+{
+ static const std::size_t value = 3;
+};
+
+template <typename Tuple,
+ int I = 0,
+ int N = boost::tuples::length<Tuple>::value>
+struct matrix_width_tuple
+{
+ static const std::size_t
+ current = matrix_width<typename boost::tuples::element<I, Tuple>::type>::value;
+ static const std::size_t
+ next = matrix_width_tuple<Tuple, I+1>::value;
+
+ static const std::size_t
+ value = current > next ? current : next;
+};
+
+template <typename Tuple, int N>
+struct matrix_width_tuple<Tuple, N, N>
+{
+ static const std::size_t value = 0;
+};
+
+template <typename Head, typename Tail>
+struct matrix_width< boost::tuples::cons<Head, Tail> >
+{
+ static const std::size_t
+ value = matrix_width_tuple< boost::tuples::cons<Head, Tail> >::value;
+};
+
+// matrix_handler
+
+template <typename Mask, bool Interrupt>
+class mask_handler
+ : private matrix<matrix_width<Mask>::value>
+{
+ typedef matrix<matrix_width<Mask>::value> base_t;
+
+public:
+ typedef bool result_type;
+
+ bool interrupt;
+
+ inline mask_handler(Mask const& m)
+ : interrupt(false)
+ , m_mask(m)
+ {}
+
+ result_type result() const
+ {
+ return !interrupt
+ && check(m_mask, static_cast<base_t const&>(*this));
+ }
+
+ template <field F1, field F2, char D>
+ inline bool may_update() const
+ {
+ return detail::relate::may_update<F1, F2, D>(
+ m_mask, static_cast<base_t const&>(*this)
+ );
+ }
+
+ //template <field F1, field F2>
+ //inline char get() const
+ //{
+ // return static_cast<base_t const&>(*this).template get<F1, F2>();
+ //}
+
+ template <field F1, field F2, char V>
+ inline void set()
+ {
+ if ( relate::interrupt<F1, F2, V, Interrupt>(m_mask) )
+ {
+ interrupt = true;
+ }
+ else
+ {
+ base_t::template set<F1, F2, V>();
+ }
+ }
+
+ template <field F1, field F2, char V>
+ inline void update()
+ {
+ if ( relate::interrupt<F1, F2, V, Interrupt>(m_mask) )
+ {
+ interrupt = true;
+ }
+ else
+ {
+ base_t::template update<F1, F2, V>();
+ }
+ }
+
+private:
+ Mask const& m_mask;
+};
+
+// STATIC MASKS
+
+// static_mask
+
+template <char II, char IB, char IE,
+ char BI, char BB, char BE,
+ char EI, char EB, char EE>
+class static_mask
+{
+ typedef boost::mpl::vector_c
+ <
+ char, II, IB, IE, BI, BB, BE, EI, EB, EE
+ > vector_type;
+
+public:
+ template <field F1, field F2>
+ struct get
+ {
+ BOOST_STATIC_ASSERT(F1 * 3 + F2 < boost::mpl::size<vector_type>::value);
+
+ static const char value
+ = boost::mpl::at_c<vector_type, F1 * 3 + F2>::type::value;
+ };
+};
+
+// static_should_handle_element
+
+template <typename StaticMask, field F1, field F2, bool IsSequence>
+struct static_should_handle_element_dispatch
+{
+ static const char mask_el = StaticMask::template get<F1, F2>::value;
+ static const bool value = mask_el == 'F'
+ || mask_el == 'T'
+ || ( mask_el >= '0' && mask_el <= '9' );
+};
+
+template <typename First, typename Last, field F1, field F2>
+struct static_should_handle_element_sequence
+{
+ typedef typename boost::mpl::deref<First>::type StaticMask;
+
+ static const bool value
+ = static_should_handle_element_dispatch
+ <
+ StaticMask,
+ F1, F2,
+ boost::mpl::is_sequence<StaticMask>::value
+ >::value
+ || static_should_handle_element_sequence
+ <
+ typename boost::mpl::next<First>::type,
+ Last,
+ F1, F2
+ >::value;
+};
+
+template <typename Last, field F1, field F2>
+struct static_should_handle_element_sequence<Last, Last, F1, F2>
+{
+ static const bool value = false;
+};
+
+template <typename StaticMask, field F1, field F2>
+struct static_should_handle_element_dispatch<StaticMask, F1, F2, true>
+{
+ static const bool value
+ = static_should_handle_element_sequence
+ <
+ typename boost::mpl::begin<StaticMask>::type,
+ typename boost::mpl::end<StaticMask>::type,
+ F1, F2
+ >::value;
+};
+
+template <typename StaticMask, field F1, field F2>
+struct static_should_handle_element
+{
+ static const bool value
+ = static_should_handle_element_dispatch
+ <
+ StaticMask,
+ F1, F2,
+ boost::mpl::is_sequence<StaticMask>::value
+ >::value;
+};
+
+// static_interrupt
+
+template <typename StaticMask, char V, field F1, field F2, bool InterruptEnabled, bool IsSequence>
+struct static_interrupt_dispatch
+{
+ static const bool value = false;
+};
+
+template <typename StaticMask, char V, field F1, field F2, bool IsSequence>
+struct static_interrupt_dispatch<StaticMask, V, F1, F2, true, IsSequence>
+{
+ static const char mask_el = StaticMask::template get<F1, F2>::value;
+
+ static const bool value
+ = ( V >= '0' && V <= '9' ) ?
+ ( mask_el == 'F' || ( mask_el < V && mask_el >= '0' && mask_el <= '9' ) ) :
+ ( ( V == 'T' ) ? mask_el == 'F' : false );
+};
+
+template <typename First, typename Last, char V, field F1, field F2>
+struct static_interrupt_sequence
+{
+ typedef typename boost::mpl::deref<First>::type StaticMask;
+
+ static const bool value
+ = static_interrupt_dispatch
+ <
+ StaticMask,
+ V, F1, F2,
+ true,
+ boost::mpl::is_sequence<StaticMask>::value
+ >::value
+ && static_interrupt_sequence
+ <
+ typename boost::mpl::next<First>::type,
+ Last,
+ V, F1, F2
+ >::value;
+};
+
+template <typename Last, char V, field F1, field F2>
+struct static_interrupt_sequence<Last, Last, V, F1, F2>
+{
+ static const bool value = true;
+};
+
+template <typename StaticMask, char V, field F1, field F2>
+struct static_interrupt_dispatch<StaticMask, V, F1, F2, true, true>
+{
+ static const bool value
+ = static_interrupt_sequence
+ <
+ typename boost::mpl::begin<StaticMask>::type,
+ typename boost::mpl::end<StaticMask>::type,
+ V, F1, F2
+ >::value;
+};
+
+template <typename StaticMask, char V, field F1, field F2, bool EnableInterrupt>
+struct static_interrupt
+{
+ static const bool value
+ = static_interrupt_dispatch
+ <
+ StaticMask,
+ V, F1, F2,
+ EnableInterrupt,
+ boost::mpl::is_sequence<StaticMask>::value
+ >::value;
+};
+
+// static_may_update
+
+template <typename StaticMask, char D, field F1, field F2, bool IsSequence>
+struct static_may_update_dispatch
+{
+ static const char mask_el = StaticMask::template get<F1, F2>::value;
+ static const int version
+ = mask_el == 'F' ? 0
+ : mask_el == 'T' ? 1
+ : mask_el >= '0' && mask_el <= '9' ? 2
+ : 3;
+
+ template <typename Matrix>
+ static inline bool apply(Matrix const& matrix)
+ {
+ return apply_dispatch(matrix, integral_constant<int, version>());
+ }
+
+ // mask_el == 'F'
+ template <typename Matrix>
+ static inline bool apply_dispatch(Matrix const& , integral_constant<int, 0>)
+ {
+ return true;
+ }
+ // mask_el == 'T'
+ template <typename Matrix>
+ static inline bool apply_dispatch(Matrix const& matrix, integral_constant<int, 1>)
+ {
+ char const c = matrix.template get<F1, F2>();
+ return c == 'F'; // if it's T or between 0 and 9, the result will be the same
+ }
+ // mask_el >= '0' && mask_el <= '9'
+ template <typename Matrix>
+ static inline bool apply_dispatch(Matrix const& matrix, integral_constant<int, 2>)
+ {
+ char const c = matrix.template get<F1, F2>();
+ return D > c || c > '9';
+ }
+ // else
+ template <typename Matrix>
+ static inline bool apply_dispatch(Matrix const&, integral_constant<int, 3>)
+ {
+ return false;
+ }
+};
+
+template <typename First, typename Last, char D, field F1, field F2>
+struct static_may_update_sequence
+{
+ typedef typename boost::mpl::deref<First>::type StaticMask;
+
+ template <typename Matrix>
+ static inline bool apply(Matrix const& matrix)
+ {
+ return static_may_update_dispatch
+ <
+ StaticMask,
+ D, F1, F2,
+ boost::mpl::is_sequence<StaticMask>::value
+ >::apply(matrix)
+ || static_may_update_sequence
+ <
+ typename boost::mpl::next<First>::type,
+ Last,
+ D, F1, F2
+ >::apply(matrix);
+ }
+};
+
+template <typename Last, char D, field F1, field F2>
+struct static_may_update_sequence<Last, Last, D, F1, F2>
+{
+ template <typename Matrix>
+ static inline bool apply(Matrix const& /*matrix*/)
+ {
+ return false;
+ }
+};
+
+template <typename StaticMask, char D, field F1, field F2>
+struct static_may_update_dispatch<StaticMask, D, F1, F2, true>
+{
+ template <typename Matrix>
+ static inline bool apply(Matrix const& matrix)
+ {
+ return static_may_update_sequence
+ <
+ typename boost::mpl::begin<StaticMask>::type,
+ typename boost::mpl::end<StaticMask>::type,
+ D, F1, F2
+ >::apply(matrix);
+ }
+};
+
+template <typename StaticMask, char D, field F1, field F2>
+struct static_may_update
+{
+ template <typename Matrix>
+ static inline bool apply(Matrix const& matrix)
+ {
+ return static_may_update_dispatch
+ <
+ StaticMask,
+ D, F1, F2,
+ boost::mpl::is_sequence<StaticMask>::value
+ >::apply(matrix);
+ }
+};
+
+// static_check
+
+template <typename StaticMask, bool IsSequence>
+struct static_check_dispatch
+{
+ template <typename Matrix>
+ static inline bool apply(Matrix const& matrix)
+ {
+ return per_one<interior, interior>::apply(matrix)
+ && per_one<interior, boundary>::apply(matrix)
+ && per_one<interior, exterior>::apply(matrix)
+ && per_one<boundary, interior>::apply(matrix)
+ && per_one<boundary, boundary>::apply(matrix)
+ && per_one<boundary, exterior>::apply(matrix)
+ && per_one<exterior, interior>::apply(matrix)
+ && per_one<exterior, boundary>::apply(matrix)
+ && per_one<exterior, exterior>::apply(matrix);
+ }
+
+ template <field F1, field F2>
+ struct per_one
+ {
+ static const char mask_el = StaticMask::template get<F1, F2>::value;
+ static const int version
+ = mask_el == 'F' ? 0
+ : mask_el == 'T' ? 1
+ : mask_el >= '0' && mask_el <= '9' ? 2
+ : 3;
+
+ template <typename Matrix>
+ static inline bool apply(Matrix const& matrix)
+ {
+ const char el = matrix.template get<F1, F2>();
+ return apply_dispatch(el, integral_constant<int, version>());
+ }
+
+ // mask_el == 'F'
+ static inline bool apply_dispatch(char el, integral_constant<int, 0>)
+ {
+ return el == 'F';
+ }
+ // mask_el == 'T'
+ static inline bool apply_dispatch(char el, integral_constant<int, 1>)
+ {
+ return el == 'T' || ( el >= '0' && el <= '9' );
+ }
+ // mask_el >= '0' && mask_el <= '9'
+ static inline bool apply_dispatch(char el, integral_constant<int, 2>)
+ {
+ return el == mask_el;
+ }
+ // else
+ static inline bool apply_dispatch(char /*el*/, integral_constant<int, 3>)
+ {
+ return true;
+ }
+ };
+};
+
+template <typename First, typename Last>
+struct static_check_sequence
+{
+ typedef typename boost::mpl::deref<First>::type StaticMask;
+
+ template <typename Matrix>
+ static inline bool apply(Matrix const& matrix)
+ {
+ return static_check_dispatch
+ <
+ StaticMask,
+ boost::mpl::is_sequence<StaticMask>::value
+ >::apply(matrix)
+ || static_check_sequence
+ <
+ typename boost::mpl::next<First>::type,
+ Last
+ >::apply(matrix);
+ }
+};
+
+template <typename Last>
+struct static_check_sequence<Last, Last>
+{
+ template <typename Matrix>
+ static inline bool apply(Matrix const& /*matrix*/)
+ {
+ return false;
+ }
+};
+
+template <typename StaticMask>
+struct static_check_dispatch<StaticMask, true>
+{
+ template <typename Matrix>
+ static inline bool apply(Matrix const& matrix)
+ {
+ return static_check_sequence
+ <
+ typename boost::mpl::begin<StaticMask>::type,
+ typename boost::mpl::end<StaticMask>::type
+ >::apply(matrix);
+ }
+};
+
+template <typename StaticMask>
+struct static_check
+{
+ template <typename Matrix>
+ static inline bool apply(Matrix const& matrix)
+ {
+ return static_check_dispatch
+ <
+ StaticMask,
+ boost::mpl::is_sequence<StaticMask>::value
+ >::apply(matrix);
+ }
+};
+
+// static_mask_handler
+
+template <typename StaticMask, bool Interrupt>
+class static_mask_handler
+ : private matrix<3>
+{
+ typedef matrix<3> base_t;
+
+public:
+ typedef bool result_type;
+
+ bool interrupt;
+
+ inline static_mask_handler(StaticMask const& /*dummy*/)
+ : interrupt(false)
+ {}
+
+ result_type result() const
+ {
+ return (!Interrupt || !interrupt)
+ && static_check<StaticMask>::
+ apply(static_cast<base_t const&>(*this));
+ }
+
+ template <field F1, field F2, char D>
+ inline bool may_update() const
+ {
+ return static_may_update<StaticMask, D, F1, F2>::
+ apply(static_cast<base_t const&>(*this));
+ }
+
+ template <field F1, field F2>
+ static inline bool expects()
+ {
+ return static_should_handle_element<StaticMask, F1, F2>::value;
+ }
+
+ //template <field F1, field F2>
+ //inline char get() const
+ //{
+ // return base_t::template get<F1, F2>();
+ //}
+
+ template <field F1, field F2, char V>
+ inline void set()
+ {
+ static const bool interrupt_c = static_interrupt<StaticMask, V, F1, F2, Interrupt>::value;
+ static const bool should_handle = static_should_handle_element<StaticMask, F1, F2>::value;
+ static const int version = interrupt_c ? 0
+ : should_handle ? 1
+ : 2;
+
+ set_dispatch<F1, F2, V>(integral_constant<int, version>());
+ }
+
+ template <field F1, field F2, char V>
+ inline void update()
+ {
+ static const bool interrupt_c = static_interrupt<StaticMask, V, F1, F2, Interrupt>::value;
+ static const bool should_handle = static_should_handle_element<StaticMask, F1, F2>::value;
+ static const int version = interrupt_c ? 0
+ : should_handle ? 1
+ : 2;
+
+ update_dispatch<F1, F2, V>(integral_constant<int, version>());
+ }
+
+private:
+ // Interrupt && interrupt
+ template <field F1, field F2, char V>
+ inline void set_dispatch(integral_constant<int, 0>)
+ {
+ interrupt = true;
+ }
+ // else should_handle
+ template <field F1, field F2, char V>
+ inline void set_dispatch(integral_constant<int, 1>)
+ {
+ base_t::template set<F1, F2, V>();
+ }
+ // else
+ template <field F1, field F2, char V>
+ inline void set_dispatch(integral_constant<int, 2>)
+ {}
+
+ // Interrupt && interrupt
+ template <field F1, field F2, char V>
+ inline void update_dispatch(integral_constant<int, 0>)
+ {
+ interrupt = true;
+ }
+ // else should_handle
+ template <field F1, field F2, char V>
+ inline void update_dispatch(integral_constant<int, 1>)
+ {
+ base_t::template update<F1, F2, V>();
+ }
+ // else
+ template <field F1, field F2, char V>
+ inline void update_dispatch(integral_constant<int, 2>)
+ {}
+};
+
+// OPERATORS
+
+template <typename Mask1, typename Mask2> inline
+boost::tuples::cons<
+ Mask1,
+ boost::tuples::cons<Mask2, boost::tuples::null_type>
+>
+operator||(Mask1 const& m1, Mask2 const& m2)
+{
+ namespace bt = boost::tuples;
+
+ return
+ bt::cons< Mask1, bt::cons<Mask2, bt::null_type> >
+ ( m1, bt::cons<Mask2, bt::null_type>(m2, bt::null_type()) );
+}
+
+template <typename Head, typename Tail, typename Mask> inline
+typename index::detail::tuples::push_back<
+ boost::tuples::cons<Head, Tail>, Mask
+>::type
+operator||(boost::tuples::cons<Head, Tail> const& t, Mask const& m)
+{
+ namespace bt = boost::tuples;
+
+ return
+ index::detail::tuples::push_back<
+ bt::cons<Head, Tail>, Mask
+ >::apply(t, m);
+}
+
+// PREDEFINED MASKS
+
+// TODO:
+// 1. specialize for simplified masks if available
+// e.g. for TOUCHES use 1 mask for A/A
+// 2. Think about dimensions > 2 e.g. should TOUCHES be true
+// if the interior of the Areal overlaps the boundary of the Volumetric
+// like it's true for Linear/Areal
+
+// EQUALS
+template <typename Geometry1, typename Geometry2>
+struct static_mask_equals_type
+{
+ typedef static_mask<'T', '*', 'F', '*', '*', 'F', 'F', 'F', '*'> type; // wikipedia
+ //typedef static_mask<'T', 'F', 'F', 'F', 'T', 'F', 'F', 'F', 'T'> type; // OGC
+};
+
+// DISJOINT
+typedef static_mask<'F', 'F', '*', 'F', 'F', '*', '*', '*', '*'> static_mask_disjoint;
+
+// TOUCHES - NOT P/P
+template <typename Geometry1,
+ typename Geometry2,
+ std::size_t Dim1 = topological_dimension<Geometry1>::value,
+ std::size_t Dim2 = topological_dimension<Geometry2>::value>
+struct static_mask_touches_impl
+{
+ typedef boost::mpl::vector<
+ static_mask<'F', 'T', '*', '*', '*', '*', '*', '*', '*'>,
+ static_mask<'F', '*', '*', 'T', '*', '*', '*', '*', '*'>,
+ static_mask<'F', '*', '*', '*', 'T', '*', '*', '*', '*'>
+ > type;
+};
+// According to OGC, doesn't apply to P/P
+// Using the above mask the result would be always false
+template <typename Geometry1, typename Geometry2>
+struct static_mask_touches_impl<Geometry1, Geometry2, 0, 0>
+ : not_implemented<typename geometry::tag<Geometry1>::type,
+ typename geometry::tag<Geometry2>::type>
+{};
+
+template <typename Geometry1, typename Geometry2>
+struct static_mask_touches_type
+ : static_mask_touches_impl<Geometry1, Geometry2>
+{};
+
+// WITHIN
+typedef static_mask<'T', '*', 'F', '*', '*', 'F', '*', '*', '*'> static_mask_within;
+
+// COVERED_BY (non OGC)
+typedef boost::mpl::vector<
+ static_mask<'T', '*', 'F', '*', '*', 'F', '*', '*', '*'>,
+ static_mask<'*', 'T', 'F', '*', '*', 'F', '*', '*', '*'>,
+ static_mask<'*', '*', 'F', 'T', '*', 'F', '*', '*', '*'>,
+ static_mask<'*', '*', 'F', '*', 'T', 'F', '*', '*', '*'>
+ > static_mask_covered_by;
+
+// CROSSES
+// dim(G1) < dim(G2) - P/L P/A L/A
+template <typename Geometry1,
+ typename Geometry2,
+ std::size_t Dim1 = topological_dimension<Geometry1>::value,
+ std::size_t Dim2 = topological_dimension<Geometry2>::value,
+ bool D1LessD2 = (Dim1 < Dim2)
+>
+struct static_mask_crosses_impl
+{
+ typedef static_mask<'T', '*', 'T', '*', '*', '*', '*', '*', '*'> type;
+};
+// TODO: I'm not sure if this one below should be available!
+// dim(G1) > dim(G2) - L/P A/P A/L
+template <typename Geometry1, typename Geometry2,
+ std::size_t Dim1, std::size_t Dim2
+>
+struct static_mask_crosses_impl<Geometry1, Geometry2, Dim1, Dim2, false>
+{
+ typedef static_mask<'T', '*', '*', '*', '*', '*', 'T', '*', '*'> type;
+};
+// dim(G1) == dim(G2) - P/P A/A
+template <typename Geometry1, typename Geometry2,
+ std::size_t Dim
+>
+struct static_mask_crosses_impl<Geometry1, Geometry2, Dim, Dim, false>
+ : not_implemented<typename geometry::tag<Geometry1>::type,
+ typename geometry::tag<Geometry2>::type>
+{};
+// dim(G1) == 1 && dim(G2) == 1 - L/L
+template <typename Geometry1, typename Geometry2>
+struct static_mask_crosses_impl<Geometry1, Geometry2, 1, 1, false>
+{
+ typedef static_mask<'0', '*', '*', '*', '*', '*', '*', '*', '*'> type;
+};
+
+template <typename Geometry1, typename Geometry2>
+struct static_mask_crosses_type
+ : static_mask_crosses_impl<Geometry1, Geometry2>
+{};
+
+// OVERLAPS
+
+// dim(G1) != dim(G2) - NOT P/P, L/L, A/A
+template <typename Geometry1,
+ typename Geometry2,
+ std::size_t Dim1 = topological_dimension<Geometry1>::value,
+ std::size_t Dim2 = topological_dimension<Geometry2>::value
+>
+struct static_mask_overlaps_impl
+ : not_implemented<typename geometry::tag<Geometry1>::type,
+ typename geometry::tag<Geometry2>::type>
+{};
+// dim(G1) == D && dim(G2) == D - P/P A/A
+template <typename Geometry1, typename Geometry2, std::size_t Dim>
+struct static_mask_overlaps_impl<Geometry1, Geometry2, Dim, Dim>
+{
+ typedef static_mask<'T', '*', 'T', '*', '*', '*', 'T', '*', '*'> type;
+};
+// dim(G1) == 1 && dim(G2) == 1 - L/L
+template <typename Geometry1, typename Geometry2>
+struct static_mask_overlaps_impl<Geometry1, Geometry2, 1, 1>
+{
+ typedef static_mask<'1', '*', 'T', '*', '*', '*', 'T', '*', '*'> type;
+};
+
+template <typename Geometry1, typename Geometry2>
+struct static_mask_overlaps_type
+ : static_mask_overlaps_impl<Geometry1, Geometry2>
+{};
+
+// RESULTS/HANDLERS UTILS
+
+template <field F1, field F2, char V, typename Result>
+inline void set(Result & res)
+{
+ res.template set<F1, F2, V>();
+}
+
+template <field F1, field F2, char V, bool Transpose>
+struct set_dispatch
+{
+ template <typename Result>
+ static inline void apply(Result & res)
+ {
+ res.template set<F1, F2, V>();
+ }
+};
+
+template <field F1, field F2, char V>
+struct set_dispatch<F1, F2, V, true>
+{
+ template <typename Result>
+ static inline void apply(Result & res)
+ {
+ res.template set<F2, F1, V>();
+ }
+};
+
+template <field F1, field F2, char V, bool Transpose, typename Result>
+inline void set(Result & res)
+{
+ set_dispatch<F1, F2, V, Transpose>::apply(res);
+}
+
+template <char V, typename Result>
+inline void set(Result & res)
+{
+ res.template set<interior, interior, V>();
+ res.template set<interior, boundary, V>();
+ res.template set<interior, exterior, V>();
+ res.template set<boundary, interior, V>();
+ res.template set<boundary, boundary, V>();
+ res.template set<boundary, exterior, V>();
+ res.template set<exterior, interior, V>();
+ res.template set<exterior, boundary, V>();
+ res.template set<exterior, exterior, V>();
+}
+
+template <char II, char IB, char IE, char BI, char BB, char BE, char EI, char EB, char EE, typename Result>
+inline void set(Result & res)
+{
+ res.template set<interior, interior, II>();
+ res.template set<interior, boundary, IB>();
+ res.template set<interior, exterior, IE>();
+ res.template set<boundary, interior, BI>();
+ res.template set<boundary, boundary, BB>();
+ res.template set<boundary, exterior, BE>();
+ res.template set<exterior, interior, EI>();
+ res.template set<exterior, boundary, EB>();
+ res.template set<exterior, exterior, EE>();
+}
+
+template <field F1, field F2, char D, typename Result>
+inline void update(Result & res)
+{
+ res.template update<F1, F2, D>();
+}
+
+template <field F1, field F2, char D, bool Transpose>
+struct update_result_dispatch
+{
+ template <typename Result>
+ static inline void apply(Result & res)
+ {
+ update<F1, F2, D>(res);
+ }
+};
+
+template <field F1, field F2, char D>
+struct update_result_dispatch<F1, F2, D, true>
+{
+ template <typename Result>
+ static inline void apply(Result & res)
+ {
+ update<F2, F1, D>(res);
+ }
+};
+
+template <field F1, field F2, char D, bool Transpose, typename Result>
+inline void update(Result & res)
+{
+ update_result_dispatch<F1, F2, D, Transpose>::apply(res);
+}
+
+template <field F1, field F2, char D, typename Result>
+inline bool may_update(Result const& res)
+{
+ return res.template may_update<F1, F2, D>();
+}
+
+template <field F1, field F2, char D, bool Transpose>
+struct may_update_result_dispatch
+{
+ template <typename Result>
+ static inline bool apply(Result const& res)
+ {
+ return may_update<F1, F2, D>(res);
+ }
+};
+
+template <field F1, field F2, char D>
+struct may_update_result_dispatch<F1, F2, D, true>
+{
+ template <typename Result>
+ static inline bool apply(Result const& res)
+ {
+ return may_update<F2, F1, D>(res);
+ }
+};
+
+template <field F1, field F2, char D, bool Transpose, typename Result>
+inline bool may_update(Result const& res)
+{
+ return may_update_result_dispatch<F1, F2, D, Transpose>::apply(res);
+}
+
+template <typename Result, char II, char IB, char IE, char BI, char BB, char BE, char EI, char EB, char EE>
+inline Result return_result()
+{
+ Result res;
+ set<II, IB, IE, BI, BB, BE, EI, EB, EE>(res);
+ return res;
+}
+
+template <typename Geometry>
+struct result_dimension
+{
+ BOOST_STATIC_ASSERT(geometry::dimension<Geometry>::value >= 0);
+ static const char value
+ = ( geometry::dimension<Geometry>::value <= 9 ) ?
+ ( '0' + geometry::dimension<Geometry>::value ) :
+ 'T';
+};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RESULT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/topology_check.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/topology_check.hpp
new file mode 100644
index 0000000000..98b857a488
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/topology_check.hpp
@@ -0,0 +1,241 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TOPOLOGY_CHECK_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TOPOLOGY_CHECK_HPP
+
+#include <boost/geometry/util/range.hpp>
+
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
+#include <boost/geometry/policies/compare.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate {
+
+// TODO: change the name for e.g. something with the word "exterior"
+
+template <typename Geometry,
+ typename Tag = typename geometry::tag<Geometry>::type>
+struct topology_check
+ : not_implemented<Tag>
+{};
+
+//template <typename Point>
+//struct topology_check<Point, point_tag>
+//{
+// static const char interior = '0';
+// static const char boundary = 'F';
+//
+// static const bool has_interior = true;
+// static const bool has_boundary = false;
+//
+// topology_check(Point const&) {}
+// template <typename IgnoreBoundaryPoint>
+// topology_check(Point const&, IgnoreBoundaryPoint const&) {}
+//};
+
+template <typename Linestring>
+struct topology_check<Linestring, linestring_tag>
+{
+ static const char interior = '1';
+ static const char boundary = '0';
+
+ bool has_interior;
+ bool has_boundary;
+
+ topology_check(Linestring const& ls)
+ {
+ init(ls, 0); /*dummy param*/
+ }
+
+ template <typename IgnoreBoundaryPoint>
+ topology_check(Linestring const& ls, IgnoreBoundaryPoint const& ibp)
+ {
+ init(ls, ibp); /*dummy param, won't be used*/
+ }
+
+ // Even if some point is on the boundary, if the Linestring has the boundary,
+ // there will be second boundary point different than IgnoreBoundaryPoint
+ template <typename IgnoreBoundaryPoint>
+ void init(Linestring const& ls, IgnoreBoundaryPoint const&)
+ {
+ std::size_t count = boost::size(ls);
+ has_interior = count > 0;
+ // NOTE: Linestring with all points equal is treated as 1d linear ring
+ has_boundary = count > 1
+ && ! detail::equals::equals_point_point(range::front(ls), range::back(ls));
+ }
+};
+
+template <typename MultiLinestring>
+struct topology_check<MultiLinestring, multi_linestring_tag>
+{
+ static const char interior = '1';
+ static const char boundary = '0';
+
+ bool has_interior;
+ bool has_boundary;
+
+ topology_check(MultiLinestring const& mls)
+ {
+ init(mls, not_ignoring_counter());
+ }
+
+ template <typename IgnoreBoundaryPoint>
+ topology_check(MultiLinestring const& mls, IgnoreBoundaryPoint const& ibp)
+ {
+ init(mls, ignoring_counter<IgnoreBoundaryPoint>(ibp));
+ }
+
+ template <typename OddCounter>
+ void init(MultiLinestring const& mls, OddCounter const& odd_counter)
+ {
+ typedef typename geometry::point_type<MultiLinestring>::type point_type;
+ std::vector<point_type> endpoints;
+ endpoints.reserve(boost::size(mls) * 2);
+
+ typedef typename boost::range_iterator<MultiLinestring const>::type ls_iterator;
+ for ( ls_iterator it = boost::begin(mls) ; it != boost::end(mls) ; ++it )
+ {
+ std::size_t count = boost::size(*it);
+
+ if ( count > 0 )
+ {
+ has_interior = true;
+ }
+
+ if ( count > 1 )
+ {
+ // don't store boundaries of linear rings, this doesn't change anything
+ if ( ! equals::equals_point_point(range::front(*it), range::back(*it)) )
+ {
+ endpoints.push_back(range::front(*it));
+ endpoints.push_back(range::back(*it));
+ }
+ }
+ }
+
+ has_boundary = false;
+
+ if ( !endpoints.empty() )
+ {
+ std::sort(endpoints.begin(), endpoints.end(), geometry::less<point_type>());
+ has_boundary = odd_counter(endpoints.begin(), endpoints.end());
+ }
+ }
+
+ struct not_ignoring_counter
+ {
+ template <typename It>
+ bool operator()(It first, It last) const
+ {
+ return find_odd_count(first, last);
+ }
+ };
+
+ template <typename Point>
+ struct ignoring_counter
+ {
+ ignoring_counter(Point const& pt) : m_pt(pt) {}
+
+ template <typename It>
+ bool operator()(It first, It last) const
+ {
+ typedef typename std::iterator_traits<It>::value_type point_type;
+
+ std::pair<It, It> ignore_range
+ = std::equal_range(first, last, m_pt,
+ geometry::less<point_type>());
+
+ if ( find_odd_count(first, ignore_range.first) )
+ return true;
+
+ return find_odd_count(ignore_range.second, last);
+ }
+
+ Point const& m_pt;
+ };
+
+ template <typename It>
+ static inline bool find_odd_count(It first, It last)
+ {
+ if ( first == last )
+ return false;
+
+ std::size_t count = 1;
+ It prev = first;
+ ++first;
+ for ( ; first != last ; ++first, ++prev )
+ {
+ // the end of the equal points subrange
+ if ( ! equals::equals_point_point(*first, *prev) )
+ {
+ if ( count % 2 != 0 )
+ return true;
+
+ count = 1;
+ }
+ else
+ {
+ ++count;
+ }
+ }
+
+ return count % 2 != 0;
+ }
+};
+
+template <typename Ring>
+struct topology_check<Ring, ring_tag>
+{
+ static const char interior = '2';
+ static const char boundary = '1';
+ static const bool has_interior = true;
+ static const bool has_boundary = true;
+
+ topology_check(Ring const&) {}
+ template <typename P>
+ topology_check(Ring const&, P const&) {}
+};
+
+template <typename Polygon>
+struct topology_check<Polygon, polygon_tag>
+{
+ static const char interior = '2';
+ static const char boundary = '1';
+ static const bool has_interior = true;
+ static const bool has_boundary = true;
+
+ topology_check(Polygon const&) {}
+ template <typename P>
+ topology_check(Polygon const&, P const&) {}
+};
+
+template <typename MultiPolygon>
+struct topology_check<MultiPolygon, multi_polygon_tag>
+{
+ static const char interior = '2';
+ static const char boundary = '1';
+ static const bool has_interior = true;
+ static const bool has_boundary = true;
+
+ topology_check(MultiPolygon const&) {}
+ template <typename P>
+ topology_check(MultiPolygon const&, P const&) {}
+};
+
+}} // namespace detail::relate
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TOPOLOGY_CHECK_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/relate/turns.hpp b/3party/boost/boost/geometry/algorithms/detail/relate/turns.hpp
new file mode 100644
index 0000000000..b8c292bee7
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/relate/turns.hpp
@@ -0,0 +1,228 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TURNS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TURNS_HPP
+
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+
+#include <boost/type_traits/is_base_of.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace relate { namespace turns {
+
+template <bool IncludeDegenerate = false>
+struct assign_policy
+ : overlay::assign_null_policy
+{
+ static bool const include_degenerate = IncludeDegenerate;
+};
+
+// GET_TURNS
+
+template <typename Geometry1,
+ typename Geometry2,
+ typename GetTurnPolicy
+ = detail::get_turns::get_turn_info_type<Geometry1, Geometry2, assign_policy<> > >
+struct get_turns
+{
+ typedef typename geometry::point_type<Geometry1>::type point1_type;
+
+ typedef overlay::turn_info
+ <
+ point1_type,
+ typename segment_ratio_type<point1_type, detail::no_rescale_policy>::type,
+ typename detail::get_turns::turn_operation_type
+ <
+ Geometry1, Geometry2,
+ typename segment_ratio_type<point1_type, detail::no_rescale_policy>::type
+ >::type
+ > turn_info;
+
+ template <typename Turns>
+ static inline void apply(Turns & turns,
+ Geometry1 const& geometry1,
+ Geometry2 const& geometry2)
+ {
+ detail::get_turns::no_interrupt_policy interrupt_policy;
+
+ apply(turns, geometry1, geometry2, interrupt_policy);
+ }
+
+ template <typename Turns, typename InterruptPolicy>
+ static inline void apply(Turns & turns,
+ Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ InterruptPolicy & interrupt_policy)
+ {
+ static const bool reverse1 = detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value;
+ static const bool reverse2 = detail::overlay::do_reverse<geometry::point_order<Geometry2>::value>::value;
+
+ dispatch::get_turns
+ <
+ typename geometry::tag<Geometry1>::type,
+ typename geometry::tag<Geometry2>::type,
+ Geometry1,
+ Geometry2,
+ reverse1,
+ reverse2,
+ GetTurnPolicy
+ >::apply(0, geometry1, 1, geometry2,
+ detail::no_rescale_policy(), turns, interrupt_policy);
+ }
+};
+
+// TURNS SORTING AND SEARCHING
+
+template <int N = 0, int U = 1, int I = 2, int B = 3, int C = 4, int O = 0>
+struct op_to_int
+{
+ template <typename Op>
+ inline int operator()(Op const& op) const
+ {
+ switch(op.operation)
+ {
+ case detail::overlay::operation_none : return N;
+ case detail::overlay::operation_union : return U;
+ case detail::overlay::operation_intersection : return I;
+ case detail::overlay::operation_blocked : return B;
+ case detail::overlay::operation_continue : return C;
+ case detail::overlay::operation_opposite : return O;
+ }
+ return -1;
+ }
+};
+
+template <typename OpToInt>
+struct less_op_xxx_linear
+{
+ template <typename Op>
+ inline bool operator()(Op const& left, Op const& right)
+ {
+ static OpToInt op_to_int;
+ return op_to_int(left) < op_to_int(right);
+ }
+};
+
+struct less_op_linear_linear
+ : less_op_xxx_linear< op_to_int<0,2,3,1,4,0> >
+{};
+
+struct less_op_linear_areal
+{
+ template <typename Op>
+ inline bool operator()(Op const& left, Op const& right)
+ {
+ static turns::op_to_int<0,2,3,1,4,0> op_to_int_xuic;
+ static turns::op_to_int<0,3,2,1,4,0> op_to_int_xiuc;
+
+ if ( left.other_id.multi_index == right.other_id.multi_index )
+ {
+ if ( left.other_id.ring_index == right.other_id.ring_index )
+ return op_to_int_xuic(left) < op_to_int_xuic(right);
+ else
+ return op_to_int_xiuc(left) < op_to_int_xiuc(right);
+ }
+ else
+ {
+ //return op_to_int_xuic(left) < op_to_int_xuic(right);
+ return left.other_id.multi_index < right.other_id.multi_index;
+ }
+ }
+};
+
+struct less_op_areal_linear
+ : less_op_xxx_linear< op_to_int<0,1,0,0,2,0> >
+{};
+
+struct less_op_areal_areal
+{
+ template <typename Op>
+ inline bool operator()(Op const& left, Op const& right)
+ {
+ static op_to_int<0, 1, 2, 3, 4, 0> op_to_int_uixc;
+ static op_to_int<0, 2, 1, 3, 4, 0> op_to_int_iuxc;
+
+ if ( left.other_id.multi_index == right.other_id.multi_index )
+ {
+ if ( left.other_id.ring_index == right.other_id.ring_index )
+ {
+ return op_to_int_uixc(left) < op_to_int_uixc(right);
+ }
+ else
+ {
+ if ( left.other_id.ring_index == -1 )
+ {
+ if ( left.operation == overlay::operation_union )
+ return false;
+ else if ( left.operation == overlay::operation_intersection )
+ return true;
+ }
+ else if ( right.other_id.ring_index == -1 )
+ {
+ if ( right.operation == overlay::operation_union )
+ return true;
+ else if ( right.operation == overlay::operation_intersection )
+ return false;
+ }
+
+ return op_to_int_iuxc(left) < op_to_int_iuxc(right);
+ }
+ }
+ else
+ {
+ return op_to_int_uixc(left) < op_to_int_uixc(right);
+ }
+ }
+};
+
+// sort turns by G1 - source_index == 0 by:
+// seg_id -> distance -> operation
+template <std::size_t OpId = 0,
+ typename LessOp = less_op_xxx_linear< op_to_int<> > >
+struct less
+{
+ BOOST_STATIC_ASSERT(OpId < 2);
+
+ template <typename Op> static inline
+ bool use_fraction(Op const& left, Op const& right)
+ {
+ static LessOp less_op;
+
+ if ( left.fraction == right.fraction )
+ return less_op(left, right);
+ else
+ return left.fraction < right.fraction;
+ }
+
+ template <typename Turn>
+ inline bool operator()(Turn const& left, Turn const& right) const
+ {
+ segment_identifier const& sl = left.operations[OpId].seg_id;
+ segment_identifier const& sr = right.operations[OpId].seg_id;
+
+ return sl < sr || ( sl == sr && use_fraction(left.operations[OpId], right.operations[OpId]) );
+ }
+};
+
+}}} // namespace detail::relate::turns
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TURNS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp b/3party/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp
index ad62f232bd..4ef11175f7 100644
--- a/3party/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp
@@ -7,14 +7,19 @@
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+// This file was modified by Oracle on 2013.
+// Modifications copyright (c) 2013, Oracle and/or its affiliates.
+
// 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)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
-
+#include <boost/assert.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/range.hpp>
@@ -22,7 +27,9 @@
#include <boost/geometry/core/closure.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
-
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
namespace boost { namespace geometry
@@ -55,6 +62,28 @@ struct full_section_polygon
};
+template
+<
+ typename MultiGeometry,
+ typename Section,
+ typename Policy
+>
+struct full_section_multi
+{
+ static inline typename ring_return_type<MultiGeometry const>::type apply(
+ MultiGeometry const& multi, Section const& section)
+ {
+ BOOST_ASSERT
+ (
+ section.ring_id.multi_index >= 0
+ && section.ring_id.multi_index < int(boost::size(multi))
+ );
+
+ return Policy::apply(multi[section.ring_id.multi_index], section);
+ }
+};
+
+
}} // namespace detail::section
#endif
@@ -98,6 +127,35 @@ struct range_by_section<polygon_tag, Polygon, Section>
{};
+template <typename MultiPolygon, typename Section>
+struct range_by_section<multi_polygon_tag, MultiPolygon, Section>
+ : detail::section::full_section_multi
+ <
+ MultiPolygon,
+ Section,
+ detail::section::full_section_polygon
+ <
+ typename boost::range_value<MultiPolygon>::type,
+ Section
+ >
+ >
+{};
+
+template <typename MultiLinestring, typename Section>
+struct range_by_section<multi_linestring_tag, MultiLinestring, Section>
+ : detail::section::full_section_multi
+ <
+ MultiLinestring,
+ Section,
+ detail::section::full_section_range
+ <
+ typename boost::range_value<MultiLinestring>::type,
+ Section
+ >
+ >
+{};
+
+
} // namespace dispatch
#endif
diff --git a/3party/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp b/3party/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp
index 2ec63aa429..250577c0c2 100644
--- a/3party/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp
@@ -3,6 +3,10 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -11,33 +15,39 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
#include <cstddef>
#include <vector>
+#include <boost/concept/requires.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
#include <boost/geometry/algorithms/assign.hpp>
#include <boost/geometry/algorithms/expand.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
+#include <boost/geometry/algorithms/detail/recalculate.hpp>
#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/core/closure.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/point_order.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
#include <boost/geometry/views/closeable_view.hpp>
#include <boost/geometry/views/reversible_view.hpp>
#include <boost/geometry/geometries/segment.hpp>
-
namespace boost { namespace geometry
{
@@ -71,6 +81,9 @@ struct section
bool duplicate;
int non_duplicate_index;
+ bool is_non_duplicate_first;
+ bool is_non_duplicate_last;
+
inline section()
: id(-1)
, begin_index(-1)
@@ -79,9 +92,11 @@ struct section
, range_count(0)
, duplicate(false)
, non_duplicate_index(-1)
+ , is_non_duplicate_first(false)
+ , is_non_duplicate_last(false)
{
assign_inverse(bounding_box);
- for (register std::size_t i = 0; i < DimensionCount; i++)
+ for (std::size_t i = 0; i < DimensionCount; i++)
{
directions[i] = 0;
}
@@ -107,14 +122,14 @@ struct sections : std::vector<section<Box, DimensionCount> >
namespace detail { namespace sectionalize
{
-template <typename Segment, std::size_t Dimension, std::size_t DimensionCount>
+template <std::size_t Dimension, std::size_t DimensionCount>
struct get_direction_loop
{
- typedef typename coordinate_type<Segment>::type coordinate_type;
-
+ template <typename Segment>
static inline void apply(Segment const& seg,
int directions[DimensionCount])
{
+ typedef typename coordinate_type<Segment>::type coordinate_type;
coordinate_type const diff =
geometry::get<1, Dimension>(seg) - geometry::get<0, Dimension>(seg);
@@ -123,14 +138,15 @@ struct get_direction_loop
get_direction_loop
<
- Segment, Dimension + 1, DimensionCount
+ Dimension + 1, DimensionCount
>::apply(seg, directions);
}
};
-template <typename Segment, std::size_t DimensionCount>
-struct get_direction_loop<Segment, DimensionCount, DimensionCount>
+template <std::size_t DimensionCount>
+struct get_direction_loop<DimensionCount, DimensionCount>
{
+ template <typename Segment>
static inline void apply(Segment const&, int [DimensionCount])
{}
};
@@ -182,16 +198,15 @@ struct compare_loop<T, DimensionCount, DimensionCount>
};
-template <typename Segment, std::size_t Dimension, std::size_t DimensionCount>
+template <std::size_t Dimension, std::size_t DimensionCount>
struct check_duplicate_loop
{
- typedef typename coordinate_type<Segment>::type coordinate_type;
-
+ template <typename Segment>
static inline bool apply(Segment const& seg)
{
if (! geometry::math::equals
(
- geometry::get<0, Dimension>(seg),
+ geometry::get<0, Dimension>(seg),
geometry::get<1, Dimension>(seg)
)
)
@@ -201,14 +216,15 @@ struct check_duplicate_loop
return check_duplicate_loop
<
- Segment, Dimension + 1, DimensionCount
+ Dimension + 1, DimensionCount
>::apply(seg);
}
};
-template <typename Segment, std::size_t DimensionCount>
-struct check_duplicate_loop<Segment, DimensionCount, DimensionCount>
+template <std::size_t DimensionCount>
+struct check_duplicate_loop<DimensionCount, DimensionCount>
{
+ template <typename Segment>
static inline bool apply(Segment const&)
{
return true;
@@ -236,48 +252,62 @@ struct assign_loop<T, DimensionCount, DimensionCount>
/// @brief Helper class to create sections of a part of a range, on the fly
template
<
- typename Range, // Can be closeable_view
typename Point,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
+ std::size_t DimensionCount
>
struct sectionalize_part
{
- typedef model::referring_segment<Point const> segment_type;
- typedef typename boost::range_value<Sections>::type section_type;
+ template
+ <
+ typename Range, // Can be closeable_view
+ typename RobustPolicy,
+ typename Sections
+ >
+ static inline void apply(Sections& sections,
+ Range const& range,
+ RobustPolicy const& robust_policy,
+ bool make_rescaled_boxes,
+ ring_identifier ring_id,
+ std::size_t max_count)
+ {
+ boost::ignore_unused_variable_warning(robust_policy);
+ boost::ignore_unused_variable_warning(make_rescaled_boxes);
- typedef typename boost::range_iterator<Range const>::type iterator_type;
+ typedef model::referring_segment<Point const> segment_type;
+ typedef typename boost::range_value<Sections>::type section_type;
+ typedef model::segment
+ <
+ typename robust_point_type<Point, RobustPolicy>::type
+ > robust_segment_type;
+ typedef typename boost::range_iterator<Range const>::type iterator_type;
- static inline void apply(Sections& sections, section_type& section,
- int& index, int& ndi,
- Range const& range,
- ring_identifier ring_id)
- {
- if (int(boost::size(range)) <= index)
+ if ( boost::empty(range) )
{
return;
}
- if (index == 0)
- {
- ndi = 0;
- }
+ int index = 0;
+ int ndi = 0; // non duplicate index
+ section_type section;
- iterator_type it = boost::begin(range);
- it += index;
+ bool mark_first_non_duplicated = true;
+ std::size_t last_non_duplicate_index = sections.size();
+ iterator_type it = boost::begin(range);
+
for(iterator_type previous = it++;
it != boost::end(range);
++previous, ++it, index++)
{
segment_type segment(*previous, *it);
+ robust_segment_type robust_segment;
+ geometry::recalculate(robust_segment, segment, robust_policy);
int direction_classes[DimensionCount] = {0};
get_direction_loop
<
- segment_type, 0, DimensionCount
- >::apply(segment, direction_classes);
+ 0, DimensionCount
+ >::apply(robust_segment, direction_classes);
// if "dir" == 0 for all point-dimensions, it is duplicate.
// Those sections might be omitted, if wished, lateron
@@ -290,8 +320,8 @@ struct sectionalize_part
// (DimensionCount might be < dimension<P>::value)
if (check_duplicate_loop
<
- segment_type, 0, geometry::dimension<Point>::type::value
- >::apply(segment)
+ 0, geometry::dimension<Point>::type::value
+ >::apply(robust_segment)
)
{
duplicate = true;
@@ -312,10 +342,15 @@ struct sectionalize_part
<
int, 0, DimensionCount
>::apply(direction_classes, section.directions)
- || section.count > MaxCount
+ || section.count > max_count
)
)
{
+ if ( !section.duplicate )
+ {
+ last_non_duplicate_index = sections.size();
+ }
+
sections.push_back(section);
section = section_type();
}
@@ -328,14 +363,21 @@ struct sectionalize_part
section.non_duplicate_index = ndi;
section.range_count = boost::size(range);
+ if ( mark_first_non_duplicated && !duplicate )
+ {
+ section.is_non_duplicate_first = true;
+ mark_first_non_duplicated = false;
+ }
+
copy_loop
<
int, 0, DimensionCount
>::apply(direction_classes, section.directions);
- geometry::expand(section.bounding_box, *previous);
+
+ expand_box(*previous, robust_policy, section);
}
- geometry::expand(section.bounding_box, *it);
+ expand_box(*it, robust_policy, section);
section.end_index = index + 1;
section.count++;
if (! duplicate)
@@ -343,20 +385,58 @@ struct sectionalize_part
ndi++;
}
}
+
+ // Add last section if applicable
+ if (section.count > 0)
+ {
+ if ( !section.duplicate )
+ {
+ last_non_duplicate_index = sections.size();
+ }
+
+ sections.push_back(section);
+ }
+
+ if ( last_non_duplicate_index < sections.size()
+ && !sections[last_non_duplicate_index].duplicate )
+ {
+ sections[last_non_duplicate_index].is_non_duplicate_last = true;
+ }
+ }
+
+ template <typename InputPoint, typename RobustPolicy, typename Section>
+ static inline void expand_box(InputPoint const& point,
+ RobustPolicy const& robust_policy,
+ Section& section)
+ {
+ typename geometry::point_type<typename Section::box_type>::type robust_point;
+ geometry::recalculate(robust_point, point, robust_policy);
+ geometry::expand(section.bounding_box, robust_point);
}
};
template
<
- typename Range, closure_selector Closure, bool Reverse,
+ closure_selector Closure, bool Reverse,
typename Point,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
+ std::size_t DimensionCount
>
struct sectionalize_range
{
+ template
+ <
+ typename Range,
+ typename RobustPolicy,
+ typename Sections
+ >
+ static inline void apply(Range const& range,
+ RobustPolicy const& robust_policy,
+ bool make_rescaled_boxes,
+ Sections& sections,
+ ring_identifier ring_id,
+ std::size_t max_count)
+ {
typedef typename closeable_view<Range const, Closure>::type cview_type;
typedef typename reversible_view
<
@@ -364,11 +444,6 @@ struct sectionalize_range
Reverse ? iterate_reverse : iterate_forward
>::type view_type;
- static inline void apply(Range const& range, Sections& sections,
- ring_identifier ring_id)
- {
- typedef model::referring_segment<Point const> segment_type;
-
cview_type cview(range);
view_type view(cview);
@@ -385,72 +460,69 @@ struct sectionalize_range
return;
}
- int index = 0;
- int ndi = 0; // non duplicate index
-
- typedef typename boost::range_value<Sections>::type section_type;
- section_type section;
-
- sectionalize_part
- <
- view_type, Point, Sections,
- DimensionCount, MaxCount
- >::apply(sections, section, index, ndi,
- view, ring_id);
-
- // Add last section if applicable
- if (section.count > 0)
- {
- sections.push_back(section);
- }
+ sectionalize_part<Point, DimensionCount>
+ ::apply(sections, view, robust_policy, make_rescaled_boxes, ring_id, max_count);
}
};
template
<
- typename Polygon,
bool Reverse,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
+ std::size_t DimensionCount
>
struct sectionalize_polygon
{
- static inline void apply(Polygon const& poly, Sections& sections,
- ring_identifier ring_id)
+ template
+ <
+ typename Polygon,
+ typename RobustPolicy,
+ typename Sections
+ >
+ static inline void apply(Polygon const& poly,
+ RobustPolicy const& robust_policy,
+ bool make_rescaled_boxes,
+ Sections& sections,
+ ring_identifier ring_id, std::size_t max_count)
{
typedef typename point_type<Polygon>::type point_type;
- typedef typename ring_type<Polygon>::type ring_type;
+ //typedef typename ring_type<Polygon>::type ring_type;
typedef sectionalize_range
<
- ring_type, closure<Polygon>::value, Reverse,
- point_type, Sections, DimensionCount, MaxCount
- > sectionalizer_type;
+ closure<Polygon>::value, Reverse,
+ point_type, DimensionCount
+ > per_range;
ring_id.ring_index = -1;
- sectionalizer_type::apply(exterior_ring(poly), sections, ring_id);//-1, multi_index);
+ per_range::apply(exterior_ring(poly), robust_policy, make_rescaled_boxes, sections, ring_id, max_count);
ring_id.ring_index++;
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(poly);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings);
- ++it, ++ring_id.ring_index)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(poly);
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it, ++ring_id.ring_index)
{
- sectionalizer_type::apply(*it, sections, ring_id);
+ per_range::apply(*it, robust_policy, make_rescaled_boxes, sections, ring_id, max_count);
}
}
};
template
<
- typename Box,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
+ std::size_t DimensionCount
>
struct sectionalize_box
{
- static inline void apply(Box const& box, Sections& sections, ring_identifier const& ring_id)
+ template
+ <
+ typename Box,
+ typename RobustPolicy,
+ typename Sections
+ >
+ static inline void apply(Box const& box,
+ RobustPolicy const& robust_policy,
+ bool make_rescaled_boxes,
+ Sections& sections,
+ ring_identifier const& ring_id, std::size_t max_count)
{
typedef typename point_type<Box>::type point_type;
@@ -462,7 +534,7 @@ struct sectionalize_box
// (or polygon would be a helper-type).
// Therefore we mimic a linestring/std::vector of 5 points
- // TODO: might be replaced by assign_box_corners_oriented
+ // TODO: might be replaced by assign_box_corners_oriented
// or just "convert"
point_type ll, lr, ul, ur;
geometry::detail::assign_box_corners(box, ll, lr, ul, ur);
@@ -476,12 +548,36 @@ struct sectionalize_box
sectionalize_range
<
- std::vector<point_type>, closed, false,
+ closed, false,
point_type,
- Sections,
- DimensionCount,
- MaxCount
- >::apply(points, sections, ring_id);
+ DimensionCount
+ >::apply(points, robust_policy, make_rescaled_boxes, sections,
+ ring_id, max_count);
+ }
+};
+
+template <std::size_t DimensionCount, typename Policy>
+struct sectionalize_multi
+{
+ template
+ <
+ typename MultiGeometry,
+ typename RobustPolicy,
+ typename Sections
+ >
+ static inline void apply(MultiGeometry const& multi,
+ RobustPolicy const& robust_policy,
+ bool make_rescaled_boxes,
+ Sections& sections, ring_identifier ring_id, std::size_t max_count)
+ {
+ ring_id.multi_index = 0;
+ for (typename boost::range_iterator<MultiGeometry const>::type
+ it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it, ++ring_id.multi_index)
+ {
+ Policy::apply(*it, robust_policy, make_rescaled_boxes, sections, ring_id, max_count);
+ }
}
};
@@ -499,7 +595,7 @@ inline void set_section_unique_ids(Sections& sections)
}
template <typename Sections>
-inline void enlargeSections(Sections& sections)
+inline void enlarge_sections(Sections& sections)
{
// Robustness issue. Increase sections a tiny bit such that all points are really within (and not on border)
// Reason: turns might, rarely, be missed otherwise (case: "buffer_mp1")
@@ -535,9 +631,7 @@ template
typename Tag,
typename Geometry,
bool Reverse,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
+ std::size_t DimensionCount
>
struct sectionalize
{
@@ -552,43 +646,29 @@ template
<
typename Box,
bool Reverse,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
+ std::size_t DimensionCount
>
-struct sectionalize<box_tag, Box, Reverse, Sections, DimensionCount, MaxCount>
- : detail::sectionalize::sectionalize_box
- <
- Box,
- Sections,
- DimensionCount,
- MaxCount
- >
+struct sectionalize<box_tag, Box, Reverse, DimensionCount>
+ : detail::sectionalize::sectionalize_box<DimensionCount>
{};
template
<
typename LineString,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
+ std::size_t DimensionCount
>
struct sectionalize
<
linestring_tag,
LineString,
false,
- Sections,
- DimensionCount,
- MaxCount
+ DimensionCount
>
: detail::sectionalize::sectionalize_range
<
- LineString, closed, false,
+ closed, false,
typename point_type<LineString>::type,
- Sections,
- DimensionCount,
- MaxCount
+ DimensionCount
>
{};
@@ -596,18 +676,14 @@ template
<
typename Ring,
bool Reverse,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
+ std::size_t DimensionCount
>
-struct sectionalize<ring_tag, Ring, Reverse, Sections, DimensionCount, MaxCount>
+struct sectionalize<ring_tag, Ring, Reverse, DimensionCount>
: detail::sectionalize::sectionalize_range
<
- Ring, geometry::closure<Ring>::value, Reverse,
+ geometry::closure<Ring>::value, Reverse,
typename point_type<Ring>::type,
- Sections,
- DimensionCount,
- MaxCount
+ DimensionCount
>
{};
@@ -615,15 +691,52 @@ template
<
typename Polygon,
bool Reverse,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
+ std::size_t DimensionCount
>
-struct sectionalize<polygon_tag, Polygon, Reverse, Sections, DimensionCount, MaxCount>
+struct sectionalize<polygon_tag, Polygon, Reverse, DimensionCount>
: detail::sectionalize::sectionalize_polygon
<
- Polygon, Reverse, Sections, DimensionCount, MaxCount
+ Reverse, DimensionCount
+ >
+{};
+
+template
+<
+ typename MultiPolygon,
+ bool Reverse,
+ std::size_t DimensionCount
+>
+struct sectionalize<multi_polygon_tag, MultiPolygon, Reverse, DimensionCount>
+ : detail::sectionalize::sectionalize_multi
+ <
+ DimensionCount,
+ detail::sectionalize::sectionalize_polygon
+ <
+ Reverse,
+ DimensionCount
+ >
+ >
+
+{};
+
+template
+<
+ typename MultiLinestring,
+ bool Reverse,
+ std::size_t DimensionCount
+>
+struct sectionalize<multi_linestring_tag, MultiLinestring, Reverse, DimensionCount>
+ : detail::sectionalize::sectionalize_multi
+ <
+ DimensionCount,
+ detail::sectionalize::sectionalize_range
+ <
+ closed, false,
+ typename point_type<MultiLinestring>::type,
+ DimensionCount
+ >
>
+
{};
} // namespace dispatch
@@ -636,36 +749,57 @@ struct sectionalize<polygon_tag, Polygon, Reverse, Sections, DimensionCount, Max
\tparam Geometry type of geometry to check
\tparam Sections type of sections to create
\param geometry geometry to create sections from
+ \param robust_policy policy to handle robustness issues
+ \param enlarge_secion_boxes if true, boxes are enlarged a tiny bit to be sure
+ they really contain all geometries (w.r.t. robustness)
\param sections structure with sections
\param source_index index to assign to the ring_identifiers
*/
-template<bool Reverse, typename Geometry, typename Sections>
-inline void sectionalize(Geometry const& geometry, Sections& sections, int source_index = 0)
+template<bool Reverse, typename Geometry, typename Sections, typename RobustPolicy>
+inline void sectionalize(Geometry const& geometry,
+ RobustPolicy const& robust_policy,
+ bool enlarge_secion_boxes,
+ Sections& sections,
+ int source_index = 0)
{
concept::check<Geometry const>();
- // TODO: review use of this constant (see below) as causing problems with GCC 4.6 --mloskot
+ sections.clear();
+
+ ring_identifier ring_id;
+ ring_id.source_index = source_index;
+
// A maximum of 10 segments per section seems to give the fastest results
- //static std::size_t const max_segments_per_section = 10;
- typedef dispatch::sectionalize
+ dispatch::sectionalize
<
typename tag<Geometry>::type,
Geometry,
Reverse,
- Sections,
- Sections::value,
- 10 // TODO: max_segments_per_section
- > sectionalizer_type;
+ Sections::value
+ >::apply(geometry, robust_policy, enlarge_secion_boxes, sections, ring_id, 10);
- sections.clear();
- ring_identifier ring_id;
- ring_id.source_index = source_index;
- sectionalizer_type::apply(geometry, sections, ring_id);
detail::sectionalize::set_section_unique_ids(sections);
- detail::sectionalize::enlargeSections(sections);
+ if (! enlarge_secion_boxes)
+ {
+ detail::sectionalize::enlarge_sections(sections);
+ }
}
+#if defined(BOOST_GEOMETRY_UNIT_TEST_SECTIONALIZE)
+// Backwards compatibility
+template<bool Reverse, typename Geometry, typename Sections>
+inline void sectionalize(Geometry const& geometry,
+ Sections& sections,
+ int source_index = 0)
+{
+ return geometry::sectionalize<Reverse>(geometry, detail::no_rescale_policy(),
+ false, sections,
+ source_index);
+}
+#endif
+
+
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/algorithms/detail/single_geometry.hpp b/3party/boost/boost/geometry/algorithms/detail/single_geometry.hpp
new file mode 100644
index 0000000000..c65ff8bf84
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/single_geometry.hpp
@@ -0,0 +1,95 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SINGLE_GEOMETRY_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SINGLE_GEOMETRY_HPP
+
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/util/range.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace detail_dispatch {
+
+// Returns single geometry by Id
+// for single geometries returns the geometry itself
+template <typename Geometry,
+ bool IsMulti = boost::is_base_of
+ <
+ multi_tag,
+ typename geometry::tag<Geometry>::type
+ >::value
+>
+struct single_geometry
+{
+ typedef Geometry & return_type;
+
+ template <typename Id>
+ static inline return_type apply(Geometry & g, Id const& ) { return g; }
+};
+
+// for multi geometries returns one of the stored single geometries
+template <typename Geometry>
+struct single_geometry<Geometry, true>
+{
+ typedef typename boost::mpl::if_c
+ <
+ boost::is_const<Geometry>::value,
+ typename boost::range_value<Geometry>::type const&,
+ typename boost::range_value<Geometry>::type
+ >::type return_type;
+
+ template <typename Id>
+ static inline return_type apply(Geometry & g, Id const& id)
+ {
+ BOOST_ASSERT(id.multi_index >= 0);
+ return range::at(g, id.multi_index);
+ }
+};
+
+} // namespace detail_dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail {
+
+template <typename Geometry>
+struct single_geometry_return_type
+{
+ typedef typename detail_dispatch::single_geometry<Geometry>::return_type type;
+};
+
+template <typename Geometry, typename Id>
+inline
+typename single_geometry_return_type<Geometry>::type
+single_geometry(Geometry & geometry, Id const& id)
+{
+ return detail_dispatch::single_geometry<Geometry>::apply(geometry, id);
+}
+
+template <typename Geometry, typename Id>
+inline
+typename single_geometry_return_type<Geometry const>::type
+single_geometry(Geometry const& geometry, Id const& id)
+{
+ return detail_dispatch::single_geometry<Geometry const>::apply(geometry, id);
+}
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SINGLE_GEOMETRY_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/sub_range.hpp b/3party/boost/boost/geometry/algorithms/detail/sub_range.hpp
new file mode 100644
index 0000000000..5c5b2f9c04
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/sub_range.hpp
@@ -0,0 +1,113 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SUB_RANGE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SUB_RANGE_HPP
+
+#include <boost/geometry/util/range.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace detail_dispatch {
+
+template <typename Geometry,
+ typename Tag = typename geometry::tag<Geometry>::type,
+ bool IsMulti = boost::is_base_of<multi_tag, Tag>::value>
+struct sub_range : not_implemented<Tag>
+{};
+
+template <typename Geometry, typename Tag>
+struct sub_range<Geometry, Tag, false>
+{
+ typedef Geometry & return_type;
+
+ template <typename Id> static inline
+ return_type apply(Geometry & geometry, Id const&)
+ {
+ return geometry;
+ }
+};
+
+template <typename Geometry>
+struct sub_range<Geometry, polygon_tag, false>
+{
+ typedef typename geometry::ring_type<Geometry>::type & return_type;
+
+ template <typename Id> static inline
+ return_type apply(Geometry & geometry, Id const& id)
+ {
+ if ( id.ring_index < 0 )
+ {
+ return geometry::exterior_ring(geometry);
+ }
+ else
+ {
+ std::size_t ri = static_cast<std::size_t>(id.ring_index);
+ return range::at(geometry::interior_rings(geometry), ri);
+ }
+ }
+};
+
+template <typename Geometry, typename Tag>
+struct sub_range<Geometry, Tag, true>
+{
+ typedef typename boost::range_value<Geometry>::type value_type;
+ typedef typename boost::mpl::if_c
+ <
+ boost::is_const<Geometry>::value,
+ typename boost::add_const<value_type>::type,
+ value_type
+ >::type sub_type;
+
+ typedef detail_dispatch::sub_range<sub_type> sub_sub_range;
+
+ // TODO: shouldn't it be return_type?
+ typedef typename sub_sub_range::return_type return_type;
+
+ template <typename Id> static inline
+ return_type apply(Geometry & geometry, Id const& id)
+ {
+ BOOST_ASSERT(0 <= id.multi_index);
+ return sub_sub_range::apply(range::at(geometry, id.multi_index), id);
+ }
+};
+
+} // namespace detail_dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+namespace detail {
+
+template <typename Geometry>
+struct sub_range_return_type
+{
+ typedef typename detail_dispatch::sub_range<Geometry>::return_type type;
+};
+
+// This function also works for geometry::segment_identifier
+
+template <typename Geometry, typename Id> inline
+typename sub_range_return_type<Geometry>::type
+sub_range(Geometry & geometry, Id const& id)
+{
+ return detail_dispatch::sub_range<Geometry>::apply(geometry, id);
+};
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SUB_RANGE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp b/3party/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp
index 62328a0d87..3d83e6930e 100644
--- a/3party/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp
+++ b/3party/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp
@@ -16,7 +16,7 @@
// BSG 2012-02-06: we use this currently only for distance.
// For other scalar results area,length,perimeter it is commented on purpose.
-// Reason is that for distance there is no other choice. distance of two
+// Reason is that for distance there is no other choice. distance of two
// empty geometries (or one empty) should NOT return any value.
// But for area it is no problem to be 0.
// Suppose: area(intersection(a,b)). We (probably) don't want a throw there...
diff --git a/3party/boost/boost/geometry/algorithms/detail/turns/compare_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/turns/compare_turns.hpp
new file mode 100644
index 0000000000..7e21c654eb
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/turns/compare_turns.hpp
@@ -0,0 +1,109 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_COMPARE_TURNS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_COMPARE_TURNS_HPP
+
+#include <cstddef>
+#include <functional>
+
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace detail { namespace turns
+{
+
+// TURNS SORTING AND SEARCHING
+
+// sort turns by G1 - source_index == 0 by:
+// seg_id -> fraction -> other_id -> operation
+template
+<
+ typename IdLess = std::less<int>,
+ int N = 0, int U = 1, int I = 2, int B = 3, int C = 4, int O = 0,
+ std::size_t OpId = 0
+>
+struct less_seg_fraction_other_op
+{
+ BOOST_STATIC_ASSERT(OpId < 2);
+
+ template <typename Op>
+ static inline int order_op(Op const& op)
+ {
+ switch (op.operation)
+ {
+ case detail::overlay::operation_none : return N;
+ case detail::overlay::operation_union : return U;
+ case detail::overlay::operation_intersection : return I;
+ case detail::overlay::operation_blocked : return B;
+ case detail::overlay::operation_continue : return C;
+ case detail::overlay::operation_opposite : return O;
+ }
+ return -1;
+ }
+
+ template <typename Op>
+ static inline bool use_operation(Op const& left, Op const& right)
+ {
+ return order_op(left) < order_op(right);
+ }
+
+ template <typename Op>
+ static inline bool use_other_id(Op const& left, Op const& right)
+ {
+ if ( left.other_id.multi_index != right.other_id.multi_index )
+ {
+ return left.other_id.multi_index < right.other_id.multi_index;
+ }
+ if ( left.other_id.ring_index != right.other_id.ring_index )
+ {
+ return left.other_id.ring_index != right.other_id.ring_index;
+ }
+ if ( left.other_id.segment_index != right.other_id.segment_index )
+ {
+ return IdLess()(left.other_id.segment_index,
+ right.other_id.segment_index);
+ }
+ return use_operation(left, right);
+ }
+
+ template <typename Op>
+ static inline bool use_fraction(Op const& left, Op const& right)
+ {
+ return left.fraction < right.fraction
+ || ( geometry::math::equals(left.fraction, right.fraction)
+ && use_other_id(left, right)
+ );
+ }
+
+ template <typename Turn>
+ inline bool operator()(Turn const& left, Turn const& right) const
+ {
+ segment_identifier const& sl = left.operations[OpId].seg_id;
+ segment_identifier const& sr = right.operations[OpId].seg_id;
+
+ return sl < sr || ( sl == sr && use_fraction(left.operations[OpId], right.operations[OpId]) );
+ }
+};
+
+
+
+
+
+}} // namespace detail::turns
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_COMPARE_TURNS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/turns/debug_turn.hpp b/3party/boost/boost/geometry/algorithms/detail/turns/debug_turn.hpp
new file mode 100644
index 0000000000..910324c5ed
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/turns/debug_turn.hpp
@@ -0,0 +1,63 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_DEBUG_TURN_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_DEBUG_TURN_HPP
+
+#ifdef BOOST_GEOMETRY_DEBUG_TURNS
+#include <iostream>
+#include <string>
+
+#include <boost/geometry/io/wkt/write.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#endif // BOOST_GEOMETRY_DEBUG_TURNS
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace turns
+{
+
+
+#ifdef BOOST_GEOMETRY_DEBUG_TURNS
+template <typename Turn, typename Operation>
+inline void debug_turn(Turn const& turn, Operation op,
+ std::string const& header)
+{
+ std::cout << header
+ << " at " << op.seg_id
+ << " meth: " << method_char(turn.method)
+ << " op: " << operation_char(op.operation)
+ << " of: " << operation_char(turn.operations[0].operation)
+ << operation_char(turn.operations[1].operation)
+ << " " << geometry::wkt(turn.point)
+ << std::endl;
+
+ if (boost::contains(header, "Finished"))
+ {
+ std::cout << std::endl;
+ }
+}
+#else
+template <typename Turn, typename Operation>
+inline void debug_turn(Turn const& , Operation, const char*)
+{
+}
+#endif // BOOST_GEOMETRY_DEBUG_TURNS
+
+
+}} // namespace detail::turns
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost:geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_DEBUG_TURN_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp
new file mode 100644
index 0000000000..17fbd65ddc
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp
@@ -0,0 +1,78 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_FILTER_CONTINUE_TURNS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_FILTER_CONTINUE_TURNS_HPP
+
+#include <algorithm>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+
+namespace boost { namespace geometry
+{
+
+namespace detail { namespace turns
+{
+
+
+template <typename Turns, bool Enable>
+struct filter_continue_turns
+{
+ static inline void apply(Turns&) {}
+};
+
+
+template <typename Turns>
+class filter_continue_turns<Turns, true>
+{
+private:
+ class IsContinueTurn
+ {
+ private:
+ template <typename Operation>
+ inline bool is_continue_or_opposite(Operation const& operation) const
+ {
+ return operation == detail::overlay::operation_continue
+ || operation == detail::overlay::operation_opposite;
+ }
+
+ public:
+ template <typename Turn>
+ bool operator()(Turn const& turn) const
+ {
+ if ( turn.method != detail::overlay::method_collinear
+ && turn.method != detail::overlay::method_equal )
+ {
+ return false;
+ }
+
+ return is_continue_or_opposite(turn.operations[0].operation)
+ && is_continue_or_opposite(turn.operations[1].operation);
+ }
+ };
+
+
+public:
+ static inline void apply(Turns& turns)
+ {
+ turns.erase( std::remove_if(turns.begin(), turns.end(),
+ IsContinueTurn()),
+ turns.end()
+ );
+ }
+};
+
+
+}} // namespace detail::turns
+
+}} // namespect boost::geometry
+
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_FILTER_CONTINUE_TURNS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/turns/print_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/turns/print_turns.hpp
new file mode 100644
index 0000000000..8b42a0ce96
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/turns/print_turns.hpp
@@ -0,0 +1,104 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_PRINT_TURNS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_PRINT_TURNS_HPP
+
+#include <iostream>
+
+#include <boost/foreach.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+
+namespace boost { namespace geometry
+{
+
+namespace detail { namespace turns
+{
+
+
+
+template <typename Geometry1, typename Geometry2, typename Turns>
+static inline void print_turns(Geometry1 const& g1,
+ Geometry2 const& g2,
+ Turns const& turns)
+{
+ typedef typename boost::range_value<Turns>::type turn_info;
+
+ std::cout << geometry::wkt(g1) << std::endl;
+ std::cout << geometry::wkt(g2) << std::endl;
+ int index = 0;
+ BOOST_FOREACH(turn_info const& turn, turns)
+ {
+ std::ostream& out = std::cout;
+ out << index
+ << ": " << geometry::method_char(turn.method);
+
+ if ( turn.discarded )
+ out << " (discarded)\n";
+ else if ( turn.blocked() )
+ out << " (blocked)\n";
+ else
+ out << '\n';
+
+ double fraction[2];
+
+ fraction[0] = turn.operations[0].fraction.numerator()
+ / turn.operations[0].fraction.denominator();
+
+ out << geometry::operation_char(turn.operations[0].operation)
+ <<": seg: " << turn.operations[0].seg_id.source_index
+ << ", m: " << turn.operations[0].seg_id.multi_index
+ << ", r: " << turn.operations[0].seg_id.ring_index
+ << ", s: " << turn.operations[0].seg_id.segment_index << ", ";
+ out << "other: " << turn.operations[0].other_id.source_index
+ << ", m: " << turn.operations[0].other_id.multi_index
+ << ", r: " << turn.operations[0].other_id.ring_index
+ << ", s: " << turn.operations[0].other_id.segment_index;
+ out << ", fr: " << fraction[0];
+ out << ", col?: " << turn.operations[0].is_collinear;
+ out << ' ' << geometry::dsv(turn.point) << ' ';
+
+ out << '\n';
+
+ fraction[1] = turn.operations[1].fraction.numerator()
+ / turn.operations[1].fraction.denominator();
+
+ out << geometry::operation_char(turn.operations[1].operation)
+ << ": seg: " << turn.operations[1].seg_id.source_index
+ << ", m: " << turn.operations[1].seg_id.multi_index
+ << ", r: " << turn.operations[1].seg_id.ring_index
+ << ", s: " << turn.operations[1].seg_id.segment_index << ", ";
+ out << "other: " << turn.operations[1].other_id.source_index
+ << ", m: " << turn.operations[1].other_id.multi_index
+ << ", r: " << turn.operations[1].other_id.ring_index
+ << ", s: " << turn.operations[1].other_id.segment_index;
+ out << ", fr: " << fraction[1];
+ out << ", col?: " << turn.operations[1].is_collinear;
+ out << ' ' << geometry::dsv(turn.point) << ' ';
+
+ ++index;
+ std::cout << std::endl;
+ }
+}
+
+
+
+
+}} // namespace detail::turns
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_PRINT_TURNS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp
new file mode 100644
index 0000000000..d48736c8f5
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp
@@ -0,0 +1,62 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_REMOVE_DUPLICATE_TURNS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_REMOVE_DUPLICATE_TURNS_HPP
+
+#include <algorithm>
+#include <boost/geometry/algorithms/equals.hpp>
+
+namespace boost { namespace geometry
+{
+
+namespace detail { namespace turns
+{
+
+template <typename Turns, bool Enable>
+struct remove_duplicate_turns
+{
+ static inline void apply(Turns&) {}
+};
+
+
+
+template <typename Turns>
+class remove_duplicate_turns<Turns, true>
+{
+private:
+ struct TurnEqualsTo
+ {
+ template <typename Turn>
+ bool operator()(Turn const& t1, Turn const& t2) const
+ {
+ return geometry::equals(t1.point, t2.point)
+ && t1.operations[0].seg_id == t2.operations[0].seg_id
+ && t1.operations[0].other_id == t2.operations[0].other_id;
+ }
+ };
+
+public:
+ static inline void apply(Turns& turns)
+ {
+ turns.erase( std::unique(turns.begin(), turns.end(),
+ TurnEqualsTo()),
+ turns.end()
+ );
+ }
+};
+
+
+
+}} // namespace detail::turns
+
+}} // namespect boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_REMOVE_DUPLICATE_TURNS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/within/point_in_geometry.hpp b/3party/boost/boost/geometry/algorithms/detail/within/point_in_geometry.hpp
new file mode 100644
index 0000000000..6f1c1816cb
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/within/point_in_geometry.hpp
@@ -0,0 +1,463 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014, Oracle and/or its affiliates.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_POINT_IN_GEOMETRY_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_POINT_IN_GEOMETRY_HPP
+
+#include <boost/assert.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/range.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/strategies/concepts/within_concept.hpp>
+#include <boost/geometry/strategies/default_strategy.hpp>
+#include <boost/geometry/strategies/within.hpp>
+#include <boost/geometry/strategies/covered_by.hpp>
+
+#include <boost/geometry/views/detail/normalized_view.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace within {
+
+// TODO: is this needed?
+inline int check_result_type(int result)
+{
+ return result;
+}
+
+template <typename T>
+inline T check_result_type(T result)
+{
+ BOOST_ASSERT(false);
+ return result;
+}
+
+template <typename Point, typename Range, typename Strategy> inline
+int point_in_range(Point const& point, Range const& range, Strategy const& strategy)
+{
+ boost::ignore_unused_variable_warning(strategy);
+
+ typedef typename boost::range_iterator<Range const>::type iterator_type;
+ typename Strategy::state_type state;
+ iterator_type it = boost::begin(range);
+ iterator_type end = boost::end(range);
+
+ for ( iterator_type previous = it++ ; it != end ; ++previous, ++it )
+ {
+ if ( ! strategy.apply(point, *previous, *it, state) )
+ {
+ break;
+ }
+ }
+
+ return check_result_type(strategy.result(state));
+}
+
+template <typename Geometry, typename Point, typename Range>
+inline int point_in_range(Point const& point, Range const& range)
+{
+ typedef typename point_type<Point>::type point_type1;
+ typedef typename point_type<Geometry>::type point_type2;
+
+ typedef typename strategy::within::services::default_strategy
+ <
+ typename tag<Point>::type,
+ typename tag<Geometry>::type,
+ typename tag<Point>::type,
+ typename tag_cast<typename tag<Geometry>::type, areal_tag>::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type1>::type, spherical_tag
+ >::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type2>::type, spherical_tag
+ >::type,
+ Point,
+ Geometry
+ >::type strategy_type;
+
+ typedef typename strategy::covered_by::services::default_strategy
+ <
+ typename tag<Point>::type,
+ typename tag<Geometry>::type,
+ typename tag<Point>::type,
+ typename tag_cast<typename tag<Geometry>::type, areal_tag>::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type1>::type, spherical_tag
+ >::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type2>::type, spherical_tag
+ >::type,
+ Point,
+ Geometry
+ >::type strategy_type2;
+
+ static const bool same_strategies = boost::is_same<strategy_type, strategy_type2>::value;
+ BOOST_MPL_ASSERT_MSG((same_strategies),
+ DEFAULT_WITHIN_AND_COVERED_BY_STRATEGIES_NOT_COMPATIBLE,
+ (strategy_type, strategy_type2));
+
+ return point_in_range(point, range, strategy_type());
+}
+
+}} // namespace detail::within
+
+namespace detail_dispatch { namespace within {
+
+// checks the relation between a point P and geometry G
+// returns 1 if P is in the interior of G
+// returns 0 if P is on the boundry of G
+// returns -1 if P is in the exterior of G
+
+template <typename Geometry,
+ typename Tag = typename geometry::tag<Geometry>::type>
+struct point_in_geometry
+ : not_implemented<Tag>
+{};
+
+template <typename Point2>
+struct point_in_geometry<Point2, point_tag>
+{
+ template <typename Point1, typename Strategy> static inline
+ int apply(Point1 const& point1, Point2 const& point2, Strategy const& strategy)
+ {
+ boost::ignore_unused_variable_warning(strategy);
+ return strategy.apply(point1, point2) ? 1 : -1;
+ }
+};
+
+template <typename Segment>
+struct point_in_geometry<Segment, segment_tag>
+{
+ template <typename Point, typename Strategy> static inline
+ int apply(Point const& point, Segment const& segment, Strategy const& strategy)
+ {
+ typedef typename geometry::point_type<Segment>::type point_type;
+ point_type p0, p1;
+// TODO: don't copy points
+ detail::assign_point_from_index<0>(segment, p0);
+ detail::assign_point_from_index<1>(segment, p1);
+
+ typename Strategy::state_type state;
+ strategy.apply(point, p0, p1, state);
+ int r = detail::within::check_result_type(strategy.result(state));
+
+ if ( r != 0 )
+ return -1; // exterior
+
+ // if the point is equal to the one of the terminal points
+ if ( detail::equals::equals_point_point(point, p0)
+ || detail::equals::equals_point_point(point, p1) )
+ return 0; // boundary
+ else
+ return 1; // interior
+ }
+};
+
+
+template <typename Linestring>
+struct point_in_geometry<Linestring, linestring_tag>
+{
+ template <typename Point, typename Strategy> static inline
+ int apply(Point const& point, Linestring const& linestring, Strategy const& strategy)
+ {
+ std::size_t count = boost::size(linestring);
+ if ( count > 1 )
+ {
+ if ( detail::within::point_in_range(point, linestring, strategy) != 0 )
+ return -1; // exterior
+
+ // if the linestring doesn't have a boundary
+ if ( detail::equals::equals_point_point(*boost::begin(linestring), *(--boost::end(linestring))) )
+ return 1; // interior
+ // else if the point is equal to the one of the terminal points
+ else if ( detail::equals::equals_point_point(point, *boost::begin(linestring))
+ || detail::equals::equals_point_point(point, *(--boost::end(linestring))) )
+ return 0; // boundary
+ else
+ return 1; // interior
+ }
+// TODO: for now degenerated linestrings are ignored
+// throw an exception here?
+ /*else if ( count == 1 )
+ {
+ if ( detail::equals::equals_point_point(point, *boost::begin(linestring)) )
+ return 1;
+ }*/
+
+ return -1; // exterior
+ }
+};
+
+template <typename Ring>
+struct point_in_geometry<Ring, ring_tag>
+{
+ template <typename Point, typename Strategy> static inline
+ int apply(Point const& point, Ring const& ring, Strategy const& strategy)
+ {
+ if ( boost::size(ring) < core_detail::closure::minimum_ring_size
+ <
+ geometry::closure<Ring>::value
+ >::value )
+ {
+ return -1;
+ }
+
+ detail::normalized_view<Ring const> view(ring);
+ return detail::within::point_in_range(point, view, strategy);
+ }
+};
+
+// Polygon: in exterior ring, and if so, not within interior ring(s)
+template <typename Polygon>
+struct point_in_geometry<Polygon, polygon_tag>
+{
+ template <typename Point, typename Strategy>
+ static inline int apply(Point const& point, Polygon const& polygon,
+ Strategy const& strategy)
+ {
+ int const code = point_in_geometry
+ <
+ typename ring_type<Polygon>::type
+ >::apply(point, exterior_ring(polygon), strategy);
+
+ if (code == 1)
+ {
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(polygon);
+
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings);
+ it != boost::end(rings);
+ ++it)
+ {
+ int const interior_code = point_in_geometry
+ <
+ typename ring_type<Polygon>::type
+ >::apply(point, *it, strategy);
+
+ if (interior_code != -1)
+ {
+ // If 0, return 0 (touch)
+ // If 1 (inside hole) return -1 (outside polygon)
+ // If -1 (outside hole) check other holes if any
+ return -interior_code;
+ }
+ }
+ }
+ return code;
+ }
+};
+
+template <typename Geometry>
+struct point_in_geometry<Geometry, multi_point_tag>
+{
+ template <typename Point, typename Strategy> static inline
+ int apply(Point const& point, Geometry const& geometry, Strategy const& strategy)
+ {
+ typedef typename boost::range_value<Geometry>::type point_type;
+ typedef typename boost::range_const_iterator<Geometry>::type iterator;
+ for ( iterator it = boost::begin(geometry) ; it != boost::end(geometry) ; ++it )
+ {
+ int pip = point_in_geometry<point_type>::apply(point, *it, strategy);
+
+ //BOOST_ASSERT(pip != 0);
+ if ( pip > 0 ) // inside
+ return 1;
+ }
+
+ return -1; // outside
+ }
+};
+
+template <typename Geometry>
+struct point_in_geometry<Geometry, multi_linestring_tag>
+{
+ template <typename Point, typename Strategy> static inline
+ int apply(Point const& point, Geometry const& geometry, Strategy const& strategy)
+ {
+ int pip = -1; // outside
+
+ typedef typename boost::range_value<Geometry>::type linestring_type;
+ typedef typename boost::range_value<linestring_type>::type point_type;
+ typedef typename boost::range_iterator<Geometry const>::type iterator;
+ iterator it = boost::begin(geometry);
+ for ( ; it != boost::end(geometry) ; ++it )
+ {
+ pip = point_in_geometry<linestring_type>::apply(point, *it, strategy);
+
+ // inside or on the boundary
+ if ( pip >= 0 )
+ {
+ ++it;
+ break;
+ }
+ }
+
+ // outside
+ if ( pip < 0 )
+ return -1;
+
+ // TODO: the following isn't needed for covered_by()
+
+ unsigned boundaries = pip == 0 ? 1 : 0;
+
+ for ( ; it != boost::end(geometry) ; ++it )
+ {
+ if ( boost::size(*it) < 2 )
+ continue;
+
+ point_type const& front = *boost::begin(*it);
+ point_type const& back = *(--boost::end(*it));
+
+ // is closed_ring - no boundary
+ if ( detail::equals::equals_point_point(front, back) )
+ continue;
+
+ // is point on boundary
+ if ( detail::equals::equals_point_point(point, front)
+ || detail::equals::equals_point_point(point, back) )
+ {
+ ++boundaries;
+ }
+ }
+
+ // if the number of boundaries is odd, the point is on the boundary
+ return boundaries % 2 ? 0 : 1;
+ }
+};
+
+template <typename Geometry>
+struct point_in_geometry<Geometry, multi_polygon_tag>
+{
+ template <typename Point, typename Strategy> static inline
+ int apply(Point const& point, Geometry const& geometry, Strategy const& strategy)
+ {
+ // For invalid multipolygons
+ //int res = -1; // outside
+
+ typedef typename boost::range_value<Geometry>::type polygon_type;
+ typedef typename boost::range_const_iterator<Geometry>::type iterator;
+ for ( iterator it = boost::begin(geometry) ; it != boost::end(geometry) ; ++it )
+ {
+ int pip = point_in_geometry<polygon_type>::apply(point, *it, strategy);
+
+ // inside or on the boundary
+ if ( pip >= 0 )
+ return pip;
+
+ // For invalid multi-polygons
+ //if ( 1 == pip ) // inside polygon
+ // return 1;
+ //else if ( res < pip ) // point must be inside at least one polygon
+ // res = pip;
+ }
+
+ return -1; // for valid multipolygons
+ //return res; // for invalid multipolygons
+ }
+};
+
+}} // namespace detail_dispatch::within
+
+namespace detail { namespace within {
+
+// 1 - in the interior
+// 0 - in the boundry
+// -1 - in the exterior
+template <typename Point, typename Geometry, typename Strategy>
+inline int point_in_geometry(Point const& point, Geometry const& geometry, Strategy const& strategy)
+{
+ concept::within::check
+ <
+ typename tag<Point>::type,
+ typename tag<Geometry>::type,
+ typename tag_cast<typename tag<Geometry>::type, areal_tag>::type,
+ Strategy
+ >();
+
+ return detail_dispatch::within::point_in_geometry<Geometry>::apply(point, geometry, strategy);
+}
+
+template <typename Point, typename Geometry>
+inline int point_in_geometry(Point const& point, Geometry const& geometry)
+{
+ typedef typename point_type<Point>::type point_type1;
+ typedef typename point_type<Geometry>::type point_type2;
+
+ typedef typename strategy::within::services::default_strategy
+ <
+ typename tag<Point>::type,
+ typename tag<Geometry>::type,
+ typename tag<Point>::type,
+ typename tag_cast<typename tag<Geometry>::type, areal_tag>::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type1>::type, spherical_tag
+ >::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type2>::type, spherical_tag
+ >::type,
+ Point,
+ Geometry
+ >::type strategy_type;
+
+ typedef typename strategy::covered_by::services::default_strategy
+ <
+ typename tag<Point>::type,
+ typename tag<Geometry>::type,
+ typename tag<Point>::type,
+ typename tag_cast<typename tag<Geometry>::type, areal_tag>::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type1>::type, spherical_tag
+ >::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type2>::type, spherical_tag
+ >::type,
+ Point,
+ Geometry
+ >::type strategy_type2;
+
+ static const bool same_strategies = boost::is_same<strategy_type, strategy_type2>::value;
+ BOOST_MPL_ASSERT_MSG((same_strategies),
+ DEFAULT_WITHIN_AND_COVERED_BY_STRATEGIES_NOT_COMPATIBLE,
+ (strategy_type, strategy_type2));
+
+ return point_in_geometry(point, geometry, strategy_type());
+}
+
+}} // namespace detail::within
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_POINT_IN_GEOMETRY_HPP
diff --git a/3party/boost/boost/geometry/algorithms/detail/within/within_no_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/within/within_no_turns.hpp
new file mode 100644
index 0000000000..8da05e58fd
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/detail/within/within_no_turns.hpp
@@ -0,0 +1,221 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2013.
+// Modifications copyright (c) 2013, Oracle and/or its affiliates.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_WITHIN_NO_TURNS_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_WITHIN_NO_TURNS_HPP
+
+#include <boost/geometry/algorithms/detail/point_on_border.hpp>
+#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
+
+namespace boost { namespace geometry {
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail_dispatch { namespace within {
+
+// returns true if G1 is within G2
+// this function should be called only if there are no intersection points
+// otherwise it may return invalid result
+// e.g. when non-first point of G1 is outside G2 or when some rings of G1 are the same as rings of G2
+
+template <typename Geometry1,
+ typename Geometry2,
+ typename Tag1 = typename geometry::tag<Geometry1>::type,
+ typename Tag2 = typename geometry::tag<Geometry2>::type>
+struct within_no_turns
+{
+ template <typename Strategy> static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+ {
+ typedef typename geometry::point_type<Geometry1>::type point1_type;
+ point1_type p;
+ if ( !geometry::point_on_border(p, geometry1) )
+ return false;
+
+ return detail::within::point_in_geometry(p, geometry2, strategy) >= 0;
+ }
+};
+
+template <typename Geometry1, typename Geometry2>
+struct within_no_turns<Geometry1, Geometry2, ring_tag, polygon_tag>
+{
+ template <typename Strategy> static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+ {
+ typedef typename geometry::point_type<Geometry1>::type point1_type;
+ typedef typename geometry::point_type<Geometry2>::type point2_type;
+ point1_type p;
+ if ( !geometry::point_on_border(p, geometry1) )
+ return false;
+ // check if one of ring points is outside the polygon
+ if ( detail::within::point_in_geometry(p, geometry2, strategy) < 0 )
+ return false;
+ // Now check if holes of G2 aren't inside G1
+ typedef typename boost::range_const_iterator
+ <
+ typename geometry::interior_type<Geometry2>::type
+ >::type iterator;
+ for ( iterator it = boost::begin(geometry::interior_rings(geometry2)) ;
+ it != boost::end(geometry::interior_rings(geometry2)) ;
+ ++it )
+ {
+ point2_type p;
+ if ( !geometry::point_on_border(p, *it) )
+ return false;
+ if ( detail::within::point_in_geometry(p, geometry1, strategy) > 0 )
+ return false;
+ }
+ return true;
+ }
+};
+
+template <typename Geometry1, typename Geometry2>
+struct within_no_turns<Geometry1, Geometry2, polygon_tag, polygon_tag>
+{
+ template <typename Strategy> static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+ {
+ typedef typename geometry::point_type<Geometry1>::type point1_type;
+ typedef typename geometry::point_type<Geometry2>::type point2_type;
+ point1_type p;
+ if ( !geometry::point_on_border(p, geometry1) )
+ return false;
+ // check if one of ring points is outside the polygon
+ if ( detail::within::point_in_geometry(p, geometry2, strategy) < 0 )
+ return false;
+ // Now check if holes of G2 aren't inside G1
+ typedef typename boost::range_const_iterator
+ <
+ typename geometry::interior_type<Geometry2>::type
+ >::type iterator2;
+ for ( iterator2 it = boost::begin(geometry::interior_rings(geometry2)) ;
+ it != boost::end(geometry::interior_rings(geometry2)) ;
+ ++it )
+ {
+ point2_type p2;
+ if ( !geometry::point_on_border(p2, *it) )
+ return false;
+ // if the hole of G2 is inside G1
+ if ( detail::within::point_in_geometry(p2, geometry1, strategy) > 0 )
+ {
+ // if it's also inside one of the G1 holes, it's ok
+ bool ok = false;
+ typedef typename boost::range_const_iterator
+ <
+ typename geometry::interior_type<Geometry1>::type
+ >::type iterator1;
+ for ( iterator1 it1 = boost::begin(geometry::interior_rings(geometry1)) ;
+ it1 != boost::end(geometry::interior_rings(geometry1)) ;
+ ++it1 )
+ {
+ if ( detail::within::point_in_geometry(p2, *it1, strategy) < 0 )
+ {
+ ok = true;
+ break;
+ }
+ }
+ if ( !ok )
+ return false;
+ }
+ }
+ return true;
+ }
+};
+
+template <typename Geometry1,
+ typename Geometry2,
+ typename Tag1 = typename geometry::tag<Geometry1>::type,
+ typename Tag2 = typename geometry::tag<Geometry2>::type,
+ bool IsMulti1 = boost::is_base_of<geometry::multi_tag, Tag1>::value,
+ bool IsMulti2 = boost::is_base_of<geometry::multi_tag, Tag2>::value>
+struct within_no_turns_multi
+{
+ template <typename Strategy> static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+ {
+ return within_no_turns<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
+ }
+};
+
+template <typename Geometry1, typename Geometry2, typename Tag1, typename Tag2>
+struct within_no_turns_multi<Geometry1, Geometry2, Tag1, Tag2, true, false>
+{
+ template <typename Strategy> static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+ {
+ // All values of G1 must be inside G2
+ typedef typename boost::range_value<Geometry1>::type subgeometry1;
+ typedef typename boost::range_const_iterator<Geometry1>::type iterator;
+ for ( iterator it = boost::begin(geometry1) ; it != boost::end(geometry1) ; ++it )
+ {
+ if ( !within_no_turns<subgeometry1, Geometry2>::apply(*it, geometry2, strategy) )
+ return false;
+ }
+ return true;
+ }
+};
+
+template <typename Geometry1, typename Geometry2, typename Tag1, typename Tag2>
+struct within_no_turns_multi<Geometry1, Geometry2, Tag1, Tag2, false, true>
+{
+ template <typename Strategy> static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+ {
+ // G1 must be within at least one value of G2
+ typedef typename boost::range_value<Geometry2>::type subgeometry2;
+ typedef typename boost::range_const_iterator<Geometry2>::type iterator;
+ for ( iterator it = boost::begin(geometry2) ; it != boost::end(geometry2) ; ++it )
+ {
+ if ( within_no_turns<Geometry1, subgeometry2>::apply(geometry1, *it, strategy) )
+ return true;
+ }
+ return false;
+ }
+};
+
+template <typename Geometry1, typename Geometry2, typename Tag1, typename Tag2>
+struct within_no_turns_multi<Geometry1, Geometry2, Tag1, Tag2, true, true>
+{
+ template <typename Strategy> static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+ {
+ // each value of G1 must be inside at least one value of G2
+ typedef typename boost::range_value<Geometry1>::type subgeometry1;
+ typedef typename boost::range_const_iterator<Geometry1>::type iterator;
+ for ( iterator it = boost::begin(geometry1) ; it != boost::end(geometry1) ; ++it )
+ {
+ if ( !within_no_turns_multi<subgeometry1, Geometry2>::apply(*it, geometry2, strategy) )
+ return false;
+ }
+ return true;
+ }
+};
+
+}} // namespace detail_dispatch::within
+
+namespace detail { namespace within {
+
+template <typename Geometry1, typename Geometry2, typename Strategy>
+inline bool within_no_turns(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
+{
+ return detail_dispatch::within::within_no_turns_multi<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
+}
+
+}} // namespace detail::within
+#endif // DOXYGEN_NO_DETAIL
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_WITHIN_NO_TURNS_HPP
diff --git a/3party/boost/boost/geometry/algorithms/difference.hpp b/3party/boost/boost/geometry/algorithms/difference.hpp
index 2f32b344c4..780436f015 100644
--- a/3party/boost/boost/geometry/algorithms/difference.hpp
+++ b/3party/boost/boost/geometry/algorithms/difference.hpp
@@ -12,6 +12,7 @@
#include <algorithm>
#include <boost/geometry/algorithms/detail/overlay/intersection_insert.hpp>
+#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
namespace boost { namespace geometry
{
@@ -43,17 +44,20 @@ template
typename GeometryOut,
typename Geometry1,
typename Geometry2,
+ typename RobustPolicy,
typename OutputIterator,
typename Strategy
>
inline OutputIterator difference_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2, OutputIterator out,
+ Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
+ OutputIterator out,
Strategy const& strategy)
{
concept::check<Geometry1 const>();
concept::check<Geometry2 const>();
concept::check<GeometryOut>();
-
+
return geometry::dispatch::intersection_insert
<
Geometry1, Geometry2,
@@ -61,7 +65,7 @@ inline OutputIterator difference_insert(Geometry1 const& geometry1,
overlay_difference,
geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, true>::value
- >::apply(geometry1, geometry2, out, strategy);
+ >::apply(geometry1, geometry2, robust_policy, out, strategy);
}
/*!
@@ -85,10 +89,13 @@ template
typename GeometryOut,
typename Geometry1,
typename Geometry2,
+ typename RobustPolicy,
typename OutputIterator
>
inline OutputIterator difference_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2, OutputIterator out)
+ Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
+ OutputIterator out)
{
concept::check<Geometry1 const>();
concept::check<Geometry2 const>();
@@ -99,11 +106,12 @@ inline OutputIterator difference_insert(Geometry1 const& geometry1,
typename cs_tag<GeometryOut>::type,
Geometry1,
Geometry2,
- typename geometry::point_type<GeometryOut>::type
+ typename geometry::point_type<GeometryOut>::type,
+ RobustPolicy
> strategy;
return difference_insert<GeometryOut>(geometry1, geometry2,
- out, strategy());
+ robust_policy, out, strategy());
}
@@ -140,8 +148,17 @@ inline void difference(Geometry1 const& geometry1,
typedef typename boost::range_value<Collection>::type geometry_out;
concept::check<geometry_out>();
+ typedef typename geometry::rescale_overlay_policy_type
+ <
+ Geometry1,
+ Geometry2
+ >::type rescale_policy_type;
+
+ rescale_policy_type robust_policy
+ = geometry::get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
+
detail::difference::difference_insert<geometry_out>(
- geometry1, geometry2,
+ geometry1, geometry2, robust_policy,
std::back_inserter(output_collection));
}
diff --git a/3party/boost/boost/geometry/algorithms/disjoint.hpp b/3party/boost/boost/geometry/algorithms/disjoint.hpp
index ade4e57d55..f997487c71 100644
--- a/3party/boost/boost/geometry/algorithms/disjoint.hpp
+++ b/3party/boost/boost/geometry/algorithms/disjoint.hpp
@@ -1,8 +1,15 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,283 +21,7 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_DISJOINT_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DISJOINT_HPP
-#include <cstddef>
-#include <deque>
-
-#include <boost/mpl/if.hpp>
-#include <boost/range.hpp>
-
-#include <boost/static_assert.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint.hpp>
-#include <boost/geometry/algorithms/detail/for_each_range.hpp>
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/algorithms/within.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-template<typename Geometry>
-struct check_each_ring_for_within
-{
- bool has_within;
- Geometry const& m_geometry;
-
- inline check_each_ring_for_within(Geometry const& g)
- : has_within(false)
- , m_geometry(g)
- {}
-
- template <typename Range>
- inline void apply(Range const& range)
- {
- typename geometry::point_type<Range>::type p;
- geometry::point_on_border(p, range);
- if (geometry::within(p, m_geometry))
- {
- has_within = true;
- }
- }
-};
-
-template <typename FirstGeometry, typename SecondGeometry>
-inline bool rings_containing(FirstGeometry const& geometry1,
- SecondGeometry const& geometry2)
-{
- check_each_ring_for_within<FirstGeometry> checker(geometry1);
- geometry::detail::for_each_range(geometry2, checker);
- return checker.has_within;
-}
-
-
-struct assign_disjoint_policy
-{
- // We want to include all points:
- static bool const include_no_turn = true;
- static bool const include_degenerate = true;
- static bool const include_opposite = true;
-
- // We don't assign extra info:
- template
- <
- typename Info,
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo
- >
- static inline void apply(Info& , Point1 const& , Point2 const&,
- IntersectionInfo const&, DirInfo const&)
- {}
-};
-
-
-template <typename Geometry1, typename Geometry2>
-struct disjoint_linear
-{
- static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
- {
- typedef typename geometry::point_type<Geometry1>::type point_type;
-
- typedef overlay::turn_info<point_type> turn_info;
- std::deque<turn_info> turns;
-
- // Specify two policies:
- // 1) Stop at any intersection
- // 2) In assignment, include also degenerate points (which are normally skipped)
- disjoint_interrupt_policy policy;
- geometry::get_turns
- <
- false, false,
- assign_disjoint_policy
- >(geometry1, geometry2, turns, policy);
- if (policy.has_intersections)
- {
- return false;
- }
-
- return true;
- }
-};
-
-template <typename Segment1, typename Segment2>
-struct disjoint_segment
-{
- static inline bool apply(Segment1 const& segment1, Segment2 const& segment2)
- {
- typedef typename point_type<Segment1>::type point_type;
-
- segment_intersection_points<point_type> is
- = strategy::intersection::relate_cartesian_segments
- <
- policies::relate::segments_intersection_points
- <
- Segment1,
- Segment2,
- segment_intersection_points<point_type>
- >
- >::apply(segment1, segment2);
-
- return is.count == 0;
- }
-};
-
-template <typename Geometry1, typename Geometry2>
-struct general_areal
-{
- static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
- {
- if (! disjoint_linear<Geometry1, Geometry2>::apply(geometry1, geometry2))
- {
- return false;
- }
-
- // If there is no intersection of segments, they might located
- // inside each other
- if (rings_containing(geometry1, geometry2)
- || rings_containing(geometry2, geometry1))
- {
- return false;
- }
-
- return true;
- }
-};
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry1, typename Geometry2,
- std::size_t DimensionCount = dimension<Geometry1>::type::value,
- typename Tag1 = typename tag<Geometry1>::type,
- typename Tag2 = typename tag<Geometry2>::type,
- bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
->
-struct disjoint
- : detail::disjoint::general_areal<Geometry1, Geometry2>
-{};
-
-
-// If reversal is needed, perform it
-template
-<
- typename Geometry1, typename Geometry2,
- std::size_t DimensionCount,
- typename Tag1, typename Tag2
->
-struct disjoint<Geometry1, Geometry2, DimensionCount, Tag1, Tag2, true>
- : disjoint<Geometry2, Geometry1, DimensionCount, Tag2, Tag1, false>
-{
- static inline bool apply(Geometry1 const& g1, Geometry2 const& g2)
- {
- return disjoint
- <
- Geometry2, Geometry1,
- DimensionCount,
- Tag2, Tag1
- >::apply(g2, g1);
- }
-};
-
-
-template <typename Point1, typename Point2, std::size_t DimensionCount, bool Reverse>
-struct disjoint<Point1, Point2, DimensionCount, point_tag, point_tag, Reverse>
- : detail::disjoint::point_point<Point1, Point2, 0, DimensionCount>
-{};
-
-
-template <typename Box1, typename Box2, std::size_t DimensionCount, bool Reverse>
-struct disjoint<Box1, Box2, DimensionCount, box_tag, box_tag, Reverse>
- : detail::disjoint::box_box<Box1, Box2, 0, DimensionCount>
-{};
-
-
-template <typename Point, typename Box, std::size_t DimensionCount, bool Reverse>
-struct disjoint<Point, Box, DimensionCount, point_tag, box_tag, Reverse>
- : detail::disjoint::point_box<Point, Box, 0, DimensionCount>
-{};
-
-template <typename Point, typename Ring, std::size_t DimensionCount, bool Reverse>
-struct disjoint<Point, Ring, DimensionCount, point_tag, ring_tag, Reverse>
- : detail::disjoint::reverse_covered_by<Point, Ring>
-{};
-
-template <typename Point, typename Polygon, std::size_t DimensionCount, bool Reverse>
-struct disjoint<Point, Polygon, DimensionCount, point_tag, polygon_tag, Reverse>
- : detail::disjoint::reverse_covered_by<Point, Polygon>
-{};
-
-template <typename Linestring1, typename Linestring2, bool Reverse>
-struct disjoint<Linestring1, Linestring2, 2, linestring_tag, linestring_tag, Reverse>
- : detail::disjoint::disjoint_linear<Linestring1, Linestring2>
-{};
-
-template <typename Linestring1, typename Linestring2, bool Reverse>
-struct disjoint<Linestring1, Linestring2, 2, segment_tag, segment_tag, Reverse>
- : detail::disjoint::disjoint_segment<Linestring1, Linestring2>
-{};
-
-template <typename Linestring, typename Segment, bool Reverse>
-struct disjoint<Linestring, Segment, 2, linestring_tag, segment_tag, Reverse>
- : detail::disjoint::disjoint_linear<Linestring, Segment>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-/*!
-\brief \brief_check2{are disjoint}
-\ingroup disjoint
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_check2{are disjoint}
-
-\qbk{[include reference/algorithms/disjoint.qbk]}
-*/
-template <typename Geometry1, typename Geometry2>
-inline bool disjoint(Geometry1 const& geometry1,
- Geometry2 const& geometry2)
-{
- concept::check_concepts_and_equal_dimensions
- <
- Geometry1 const,
- Geometry2 const
- >();
-
- return dispatch::disjoint<Geometry1, Geometry2>::apply(geometry1, geometry2);
-}
-
-
-}} // namespace boost::geometry
-
+#include <boost/geometry/algorithms/detail/disjoint/interface.hpp>
+#include <boost/geometry/algorithms/detail/disjoint/implementation.hpp>
#endif // BOOST_GEOMETRY_ALGORITHMS_DISJOINT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/dispatch/disjoint.hpp b/3party/boost/boost/geometry/algorithms/dispatch/disjoint.hpp
new file mode 100644
index 0000000000..627bcff83c
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/dispatch/disjoint.hpp
@@ -0,0 +1,70 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISJOINT_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISJOINT_HPP
+
+#include <cstddef>
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/core/reverse_dispatch.hpp>
+
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template
+<
+ typename Geometry1, typename Geometry2,
+ std::size_t DimensionCount = dimension<Geometry1>::type::value,
+ typename Tag1 = typename tag_cast
+ <
+ typename tag<Geometry1>::type,
+ segment_tag, box_tag, linear_tag, areal_tag
+ >::type,
+ typename Tag2 = typename tag_cast
+ <
+ typename tag<Geometry2>::type,
+ segment_tag, box_tag, linear_tag, areal_tag
+ >::type,
+ bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
+>
+struct disjoint
+ : not_implemented<Geometry1, Geometry2>
+{};
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISJOINT_HPP
diff --git a/3party/boost/boost/geometry/algorithms/dispatch/distance.hpp b/3party/boost/boost/geometry/algorithms/dispatch/distance.hpp
new file mode 100644
index 0000000000..58fd59340e
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/dispatch/distance.hpp
@@ -0,0 +1,65 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISTANCE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISTANCE_HPP
+
+
+#include <boost/geometry/core/reverse_dispatch.hpp>
+#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+using strategy::distance::services::return_type;
+
+
+template
+<
+ typename Geometry1, typename Geometry2,
+ typename Strategy = typename detail::distance::default_strategy<Geometry1, Geometry2>::type,
+ typename Tag1 = typename tag_cast<typename tag<Geometry1>::type, multi_tag>::type,
+ typename Tag2 = typename tag_cast<typename tag<Geometry2>::type, multi_tag>::type,
+ typename StrategyTag = typename strategy::distance::services::tag<Strategy>::type,
+ bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
+>
+struct distance: not_implemented<Tag1, Tag2>
+{};
+
+
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISTANCE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/dispatch/is_simple.hpp b/3party/boost/boost/geometry/algorithms/dispatch/is_simple.hpp
new file mode 100644
index 0000000000..2ac92256b3
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/dispatch/is_simple.hpp
@@ -0,0 +1,38 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_SIMPLE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_SIMPLE_HPP
+
+#include <boost/geometry/core/tag.hpp>
+
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Geometry, typename Tag = typename tag<Geometry>::type>
+struct is_simple
+ : not_implemented<Geometry>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_SIMPLE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/dispatch/is_valid.hpp b/3party/boost/boost/geometry/algorithms/dispatch/is_valid.hpp
new file mode 100644
index 0000000000..266bab9181
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/dispatch/is_valid.hpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_VALID_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_VALID_HPP
+
+#include <boost/geometry/core/tag.hpp>
+
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template
+<
+ typename Geometry,
+ typename Tag = typename tag<Geometry>::type,
+ // for linear geometries: determines if spikes are allowed
+ bool AllowSpikes = true,
+ // for areal geometries: determines if duplicate points are allowed
+ bool AllowDuplicates = true
+>
+struct is_valid
+ : not_implemented<Geometry>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_VALID_HPP
diff --git a/3party/boost/boost/geometry/algorithms/distance.hpp b/3party/boost/boost/geometry/algorithms/distance.hpp
index 0fd5c43f4a..dcfe597cd0 100644
--- a/3party/boost/boost/geometry/algorithms/distance.hpp
+++ b/3party/boost/boost/geometry/algorithms/distance.hpp
@@ -1,8 +1,14 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,583 +20,7 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP
-
-#include <boost/concept_check.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
-
-#include <boost/geometry/geometries/segment.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/default_distance_result.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/within.hpp>
-
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-// To avoid spurious namespaces here:
-using strategy::distance::services::return_type;
-
-template <typename P1, typename P2, typename Strategy>
-struct point_to_point
-{
- static inline typename return_type<Strategy>::type apply(P1 const& p1,
- P2 const& p2, Strategy const& strategy)
- {
- boost::ignore_unused_variable_warning(strategy);
- return strategy.apply(p1, p2);
- }
-};
-
-
-template<typename Point, typename Segment, typename Strategy>
-struct point_to_segment
-{
- static inline typename return_type<Strategy>::type apply(Point const& point,
- Segment const& segment, Strategy const& )
- {
- typename strategy::distance::services::default_strategy
- <
- segment_tag,
- Point,
- typename point_type<Segment>::type,
- typename cs_tag<Point>::type,
- typename cs_tag<typename point_type<Segment>::type>::type,
- Strategy
- >::type segment_strategy;
-
- typename point_type<Segment>::type p[2];
- geometry::detail::assign_point_from_index<0>(segment, p[0]);
- geometry::detail::assign_point_from_index<1>(segment, p[1]);
- return segment_strategy.apply(point, p[0], p[1]);
- }
-};
-
-
-template
-<
- typename Point,
- typename Range,
- closure_selector Closure,
- typename PPStrategy,
- typename PSStrategy
->
-struct point_to_range
-{
- typedef typename return_type<PSStrategy>::type return_type;
-
- static inline return_type apply(Point const& point, Range const& range,
- PPStrategy const& pp_strategy, PSStrategy const& ps_strategy)
- {
- return_type const zero = return_type(0);
-
- if (boost::size(range) == 0)
- {
- return zero;
- }
-
- typedef typename closeable_view<Range const, Closure>::type view_type;
-
- view_type view(range);
-
- // line of one point: return point distance
- typedef typename boost::range_iterator<view_type const>::type iterator_type;
- iterator_type it = boost::begin(view);
- iterator_type prev = it++;
- if (it == boost::end(view))
- {
- return pp_strategy.apply(point, *boost::begin(view));
- }
-
- // Create comparable (more efficient) strategy
- typedef typename strategy::distance::services::comparable_type<PSStrategy>::type eps_strategy_type;
- eps_strategy_type eps_strategy = strategy::distance::services::get_comparable<PSStrategy>::apply(ps_strategy);
-
- // start with first segment distance
- return_type d = eps_strategy.apply(point, *prev, *it);
- return_type rd = ps_strategy.apply(point, *prev, *it);
-
- // check if other segments are closer
- for (++prev, ++it; it != boost::end(view); ++prev, ++it)
- {
- return_type const ds = eps_strategy.apply(point, *prev, *it);
- if (geometry::math::equals(ds, zero))
- {
- return ds;
- }
- else if (ds < d)
- {
- d = ds;
- rd = ps_strategy.apply(point, *prev, *it);
- }
- }
-
- return rd;
- }
-};
-
-
-template
-<
- typename Point,
- typename Ring,
- closure_selector Closure,
- typename PPStrategy,
- typename PSStrategy
->
-struct point_to_ring
-{
- typedef std::pair
- <
- typename return_type<PPStrategy>::type, bool
- > distance_containment;
-
- static inline distance_containment apply(Point const& point,
- Ring const& ring,
- PPStrategy const& pp_strategy, PSStrategy const& ps_strategy)
- {
- return distance_containment
- (
- point_to_range
- <
- Point,
- Ring,
- Closure,
- PPStrategy,
- PSStrategy
- >::apply(point, ring, pp_strategy, ps_strategy),
- geometry::within(point, ring)
- );
- }
-};
-
-
-
-template
-<
- typename Point,
- typename Polygon,
- closure_selector Closure,
- typename PPStrategy,
- typename PSStrategy
->
-struct point_to_polygon
-{
- typedef typename return_type<PPStrategy>::type return_type;
- typedef std::pair<return_type, bool> distance_containment;
-
- static inline distance_containment apply(Point const& point,
- Polygon const& polygon,
- PPStrategy const& pp_strategy, PSStrategy const& ps_strategy)
- {
- // Check distance to all rings
- typedef point_to_ring
- <
- Point,
- typename ring_type<Polygon>::type,
- Closure,
- PPStrategy,
- PSStrategy
- > per_ring;
-
- distance_containment dc = per_ring::apply(point,
- exterior_ring(polygon), pp_strategy, ps_strategy);
-
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(polygon);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
- {
- distance_containment dcr = per_ring::apply(point,
- *it, pp_strategy, ps_strategy);
- if (dcr.first < dc.first)
- {
- dc.first = dcr.first;
- }
- // If it was inside, and also inside inner ring,
- // turn off the inside-flag, it is outside the polygon
- if (dc.second && dcr.second)
- {
- dc.second = false;
- }
- }
- return dc;
- }
-};
-
-
-// Helper metafunction for default strategy retrieval
-template <typename Geometry1, typename Geometry2>
-struct default_strategy
- : strategy::distance::services::default_strategy
- <
- point_tag,
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type
- >
-{};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-using strategy::distance::services::return_type;
-
-
-template
-<
- typename Geometry1, typename Geometry2,
- typename Strategy = typename detail::distance::default_strategy<Geometry1, Geometry2>::type,
- typename Tag1 = typename tag_cast<typename tag<Geometry1>::type, multi_tag>::type,
- typename Tag2 = typename tag_cast<typename tag<Geometry2>::type, multi_tag>::type,
- typename StrategyTag = typename strategy::distance::services::tag<Strategy>::type,
- bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
->
-struct distance: not_implemented<Tag1, Tag2>
-{};
-
-
-// If reversal is needed, perform it
-template
-<
- typename Geometry1, typename Geometry2, typename Strategy,
- typename Tag1, typename Tag2, typename StrategyTag
->
-struct distance
-<
- Geometry1, Geometry2, Strategy,
- Tag1, Tag2, StrategyTag,
- true
->
- : distance<Geometry2, Geometry1, Strategy, Tag2, Tag1, StrategyTag, false>
-{
- static inline typename return_type<Strategy>::type apply(
- Geometry1 const& g1,
- Geometry2 const& g2,
- Strategy const& strategy)
- {
- return distance
- <
- Geometry2, Geometry1, Strategy,
- Tag2, Tag1, StrategyTag,
- false
- >::apply(g2, g1, strategy);
- }
-};
-
-// If reversal is needed and we got the strategy by default, invert it before
-// proceeding to the reversal.
-template
-<
- typename Geometry1, typename Geometry2,
- typename Tag1, typename Tag2, typename StrategyTag
->
-struct distance
-<
- Geometry1, Geometry2,
- typename detail::distance::default_strategy<Geometry1, Geometry2>::type,
- Tag1, Tag2, StrategyTag,
- true
->
- : distance
- <
- Geometry2, Geometry1,
- typename detail::distance::default_strategy<Geometry2, Geometry1>::type,
- Tag2, Tag1, StrategyTag,
- false
- >
-{
- typedef typename detail::distance::default_strategy<Geometry2, Geometry1>::type reversed_strategy;
-
- static inline typename strategy::distance::services::return_type<reversed_strategy>::type apply(
- Geometry1 const& g1,
- Geometry2 const& g2,
- typename detail::distance::default_strategy<Geometry1, Geometry2>::type const&)
- {
- return distance
- <
- Geometry2, Geometry1, reversed_strategy,
- Tag2, Tag1, StrategyTag,
- false
- >::apply(g2, g1, reversed_strategy());
- }
-};
-
-
-// Point-point
-template <typename P1, typename P2, typename Strategy>
-struct distance
- <
- P1, P2, Strategy,
- point_tag, point_tag, strategy_tag_distance_point_point,
- false
- >
- : detail::distance::point_to_point<P1, P2, Strategy>
-{};
-
-
-// Point-line version 1, where point-point strategy is specified
-template <typename Point, typename Linestring, typename Strategy>
-struct distance
-<
- Point, Linestring, Strategy,
- point_tag, linestring_tag, strategy_tag_distance_point_point,
- false
->
-{
-
- static inline typename return_type<Strategy>::type apply(Point const& point,
- Linestring const& linestring,
- Strategy const& strategy)
- {
- typedef typename strategy::distance::services::default_strategy
- <
- segment_tag,
- Point,
- typename point_type<Linestring>::type,
- typename cs_tag<Point>::type,
- typename cs_tag<typename point_type<Linestring>::type>::type,
- Strategy
- >::type ps_strategy_type;
-
- return detail::distance::point_to_range
- <
- Point, Linestring, closed, Strategy, ps_strategy_type
- >::apply(point, linestring, strategy, ps_strategy_type());
- }
-};
-
-
-// Point-line version 2, where point-segment strategy is specified
-template <typename Point, typename Linestring, typename Strategy>
-struct distance
-<
- Point, Linestring, Strategy,
- point_tag, linestring_tag, strategy_tag_distance_point_segment,
- false
->
-{
- static inline typename return_type<Strategy>::type apply(Point const& point,
- Linestring const& linestring,
- Strategy const& strategy)
- {
- typedef typename Strategy::point_strategy_type pp_strategy_type;
- return detail::distance::point_to_range
- <
- Point, Linestring, closed, pp_strategy_type, Strategy
- >::apply(point, linestring, pp_strategy_type(), strategy);
- }
-};
-
-// Point-ring , where point-segment strategy is specified
-template <typename Point, typename Ring, typename Strategy>
-struct distance
-<
- Point, Ring, Strategy,
- point_tag, ring_tag, strategy_tag_distance_point_point,
- false
->
-{
- typedef typename return_type<Strategy>::type return_type;
-
- static inline return_type apply(Point const& point,
- Ring const& ring,
- Strategy const& strategy)
- {
- typedef typename strategy::distance::services::default_strategy
- <
- segment_tag,
- Point,
- typename point_type<Ring>::type
- >::type ps_strategy_type;
-
- std::pair<return_type, bool>
- dc = detail::distance::point_to_ring
- <
- Point, Ring,
- geometry::closure<Ring>::value,
- Strategy, ps_strategy_type
- >::apply(point, ring, strategy, ps_strategy_type());
-
- return dc.second ? return_type(0) : dc.first;
- }
-};
-
-
-// Point-polygon , where point-segment strategy is specified
-template <typename Point, typename Polygon, typename Strategy>
-struct distance
-<
- Point, Polygon, Strategy,
- point_tag, polygon_tag, strategy_tag_distance_point_point,
- false
->
-{
- typedef typename return_type<Strategy>::type return_type;
-
- static inline return_type apply(Point const& point,
- Polygon const& polygon,
- Strategy const& strategy)
- {
- typedef typename strategy::distance::services::default_strategy
- <
- segment_tag,
- Point,
- typename point_type<Polygon>::type
- >::type ps_strategy_type;
-
- std::pair<return_type, bool>
- dc = detail::distance::point_to_polygon
- <
- Point, Polygon,
- geometry::closure<Polygon>::value,
- Strategy, ps_strategy_type
- >::apply(point, polygon, strategy, ps_strategy_type());
-
- return dc.second ? return_type(0) : dc.first;
- }
-};
-
-
-
-// Point-segment version 1, with point-point strategy
-template <typename Point, typename Segment, typename Strategy>
-struct distance
-<
- Point, Segment, Strategy,
- point_tag, segment_tag, strategy_tag_distance_point_point,
- false
-> : detail::distance::point_to_segment<Point, Segment, Strategy>
-{};
-
-// Point-segment version 2, with point-segment strategy
-template <typename Point, typename Segment, typename Strategy>
-struct distance
-<
- Point, Segment, Strategy,
- point_tag, segment_tag, strategy_tag_distance_point_segment,
- false
->
-{
- static inline typename return_type<Strategy>::type apply(Point const& point,
- Segment const& segment, Strategy const& strategy)
- {
-
- typename point_type<Segment>::type p[2];
- geometry::detail::assign_point_from_index<0>(segment, p[0]);
- geometry::detail::assign_point_from_index<1>(segment, p[1]);
- return strategy.apply(point, p[0], p[1]);
- }
-};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-\brief \brief_calc2{distance} \brief_strategy
-\ingroup distance
-\details
-\details \details_calc{area}. \brief_strategy. \details_strategy_reasons
-
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy{Distance}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{distance}
-\return \return_calc{distance}
-\note The strategy can be a point-point strategy. In case of distance point-line/point-polygon
- it may also be a point-segment strategy.
-
-\qbk{distinguish,with strategy}
-
-\qbk{
-[heading Available Strategies]
-\* [link geometry.reference.strategies.strategy_distance_pythagoras Pythagoras (cartesian)]
-\* [link geometry.reference.strategies.strategy_distance_haversine Haversine (spherical)]
-\* [link geometry.reference.strategies.strategy_distance_cross_track Cross track (spherical\, point-to-segment)]
-\* [link geometry.reference.strategies.strategy_distance_projected_point Projected point (cartesian\, point-to-segment)]
-\* more (currently extensions): Vincenty\, Andoyer (geographic)
-}
- */
-
-/*
-Note, in case of a Compilation Error:
-if you get:
- - "Failed to specialize function template ..."
- - "error: no matching function for call to ..."
-for distance, it is probably so that there is no specialization
-for return_type<...> for your strategy.
-*/
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline typename strategy::distance::services::return_type<Strategy>::type distance(
- Geometry1 const& geometry1, Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- concept::check<Geometry1 const>();
- concept::check<Geometry2 const>();
-
- detail::throw_on_empty_input(geometry1);
- detail::throw_on_empty_input(geometry2);
-
- return dispatch::distance
- <
- Geometry1,
- Geometry2,
- Strategy
- >::apply(geometry1, geometry2, strategy);
-}
-
-
-/*!
-\brief \brief_calc2{distance}
-\ingroup distance
-\details The default strategy is used, corresponding to the coordinate system of the geometries
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_calc{distance}
-
-\qbk{[include reference/algorithms/distance.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline typename default_distance_result<Geometry1, Geometry2>::type distance(
- Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- concept::check<Geometry1 const>();
- concept::check<Geometry2 const>();
-
- return distance(geometry1, geometry2,
- typename detail::distance::default_strategy<Geometry1, Geometry2>::type());
-}
-
-}} // namespace boost::geometry
+#include <boost/geometry/algorithms/detail/distance/interface.hpp>
+#include <boost/geometry/algorithms/detail/distance/implementation.hpp>
#endif // BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/envelope.hpp b/3party/boost/boost/geometry/algorithms/envelope.hpp
index ee88fe888a..e06ed71e81 100644
--- a/3party/boost/boost/geometry/algorithms/envelope.hpp
+++ b/3party/boost/boost/geometry/algorithms/envelope.hpp
@@ -14,15 +14,22 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_ENVELOPE_HPP
#define BOOST_GEOMETRY_ALGORITHMS_ENVELOPE_HPP
-#include <boost/range.hpp>
+#include <vector>
#include <boost/numeric/conversion/cast.hpp>
+#include <boost/range.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/algorithms/assign.hpp>
#include <boost/geometry/algorithms/expand.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
#include <boost/geometry/geometries/concepts/check.hpp>
@@ -74,6 +81,42 @@ struct envelope_range
}
};
+
+struct envelope_multi_linestring
+{
+ template<typename MultiLinestring, typename Box>
+ static inline void apply(MultiLinestring const& mp, Box& mbr)
+ {
+ assign_inverse(mbr);
+ for (typename boost::range_iterator<MultiLinestring const>::type
+ it = mp.begin();
+ it != mp.end();
+ ++it)
+ {
+ envelope_range_additional(*it, mbr);
+ }
+ }
+};
+
+
+// version for multi_polygon: outer ring's of all polygons
+struct envelope_multi_polygon
+{
+ template<typename MultiPolygon, typename Box>
+ static inline void apply(MultiPolygon const& mp, Box& mbr)
+ {
+ assign_inverse(mbr);
+ for (typename boost::range_const_iterator<MultiPolygon>::type
+ it = mp.begin();
+ it != mp.end();
+ ++it)
+ {
+ envelope_range_additional(exterior_ring(*it), mbr);
+ }
+ }
+};
+
+
}} // namespace detail::envelope
#endif // DOXYGEN_NO_DETAIL
@@ -135,10 +178,72 @@ struct envelope<Polygon, polygon_tag>
};
+template <typename Multi>
+struct envelope<Multi, multi_point_tag>
+ : detail::envelope::envelope_range
+{};
+
+
+template <typename Multi>
+struct envelope<Multi, multi_linestring_tag>
+ : detail::envelope::envelope_multi_linestring
+{};
+
+
+template <typename Multi>
+struct envelope<Multi, multi_polygon_tag>
+ : detail::envelope::envelope_multi_polygon
+{};
+
+
} // namespace dispatch
#endif
+namespace resolve_variant {
+
+template <typename Geometry>
+struct envelope
+{
+ template <typename Box>
+ static inline void apply(Geometry const& geometry, Box& box)
+ {
+ concept::check<Geometry const>();
+ concept::check<Box>();
+
+ dispatch::envelope<Geometry>::apply(geometry, box);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct envelope<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename Box>
+ struct visitor: boost::static_visitor<void>
+ {
+ Box& m_box;
+
+ visitor(Box& box): m_box(box) {}
+
+ template <typename Geometry>
+ void operator()(Geometry const& geometry) const
+ {
+ envelope<Geometry>::apply(geometry, m_box);
+ }
+ };
+
+ template <typename Box>
+ static inline void
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ Box& box)
+ {
+ boost::apply_visitor(visitor<Box>(box), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
/*!
\brief \brief_calc{envelope}
\ingroup envelope
@@ -157,10 +262,7 @@ struct envelope<Polygon, polygon_tag>
template<typename Geometry, typename Box>
inline void envelope(Geometry const& geometry, Box& mbr)
{
- concept::check<Geometry const>();
- concept::check<Box>();
-
- dispatch::envelope<Geometry>::apply(geometry, mbr);
+ resolve_variant::envelope<Geometry>::apply(geometry, mbr);
}
@@ -182,11 +284,8 @@ inline void envelope(Geometry const& geometry, Box& mbr)
template<typename Box, typename Geometry>
inline Box return_envelope(Geometry const& geometry)
{
- concept::check<Geometry const>();
- concept::check<Box>();
-
Box mbr;
- dispatch::envelope<Geometry>::apply(geometry, mbr);
+ resolve_variant::envelope<Geometry>::apply(geometry, mbr);
return mbr;
}
diff --git a/3party/boost/boost/geometry/algorithms/equals.hpp b/3party/boost/boost/geometry/algorithms/equals.hpp
index 60175d4562..c6b718da1b 100644
--- a/3party/boost/boost/geometry/algorithms/equals.hpp
+++ b/3party/boost/boost/geometry/algorithms/equals.hpp
@@ -3,6 +3,12 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -22,11 +28,13 @@
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/core/geometry_id.hpp>
#include <boost/geometry/core/reverse_dispatch.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/algorithms/detail/disjoint.hpp>
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
#include <boost/geometry/algorithms/detail/not.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
@@ -38,11 +46,13 @@
#include <boost/geometry/util/select_most_precise.hpp>
#include <boost/geometry/algorithms/detail/equals/collect_vectors.hpp>
+#include <boost/geometry/algorithms/detail/relate/relate.hpp>
+
+#include <boost/geometry/views/detail/indexed_point_view.hpp>
#include <boost/variant/static_visitor.hpp>
#include <boost/variant/apply_visitor.hpp>
-
namespace boost { namespace geometry
{
@@ -81,6 +91,28 @@ struct box_box<DimensionCount, DimensionCount>
};
+struct segment_segment
+{
+ template <typename Segment1, typename Segment2>
+ static inline bool apply(Segment1 const& segment1, Segment2 const& segment2)
+ {
+ return equals::equals_point_point(
+ indexed_point_view<Segment1 const, 0>(segment1),
+ indexed_point_view<Segment2 const, 0>(segment2) )
+ ? equals::equals_point_point(
+ indexed_point_view<Segment1 const, 1>(segment1),
+ indexed_point_view<Segment2 const, 1>(segment2) )
+ : ( equals::equals_point_point(
+ indexed_point_view<Segment1 const, 0>(segment1),
+ indexed_point_view<Segment2 const, 1>(segment2) )
+ && equals::equals_point_point(
+ indexed_point_view<Segment1 const, 1>(segment1),
+ indexed_point_view<Segment2 const, 0>(segment2) )
+ );
+ }
+};
+
+
struct area_check
{
template <typename Geometry1, typename Geometry2>
@@ -144,6 +176,15 @@ struct equals_by_collection
}
};
+template<typename Geometry1, typename Geometry2>
+struct equals_by_relate
+ : detail::relate::relate_base
+ <
+ detail::relate::static_mask_equals_type,
+ Geometry1,
+ Geometry2
+ >
+{};
}} // namespace detail::equals
#endif // DOXYGEN_NO_DETAIL
@@ -218,12 +259,6 @@ struct equals<Polygon1, Polygon2, polygon_tag, polygon_tag, 2, Reverse>
{};
-template <typename LineString1, typename LineString2, bool Reverse>
-struct equals<LineString1, LineString2, linestring_tag, linestring_tag, 2, Reverse>
- : detail::equals::equals_by_collection<detail::equals::length_check>
-{};
-
-
template <typename Polygon, typename Ring, bool Reverse>
struct equals<Polygon, Ring, polygon_tag, ring_tag, 2, Reverse>
: detail::equals::equals_by_collection<detail::equals::area_check>
@@ -241,9 +276,60 @@ struct equals<Polygon, Box, polygon_tag, box_tag, 2, Reverse>
: detail::equals::equals_by_collection<detail::equals::area_check>
{};
+template <typename Segment1, typename Segment2, std::size_t DimensionCount, bool Reverse>
+struct equals<Segment1, Segment2, segment_tag, segment_tag, DimensionCount, Reverse>
+ : detail::equals::segment_segment
+{};
+
+template <typename LineString1, typename LineString2, bool Reverse>
+struct equals<LineString1, LineString2, linestring_tag, linestring_tag, 2, Reverse>
+ //: detail::equals::equals_by_collection<detail::equals::length_check>
+ : detail::equals::equals_by_relate<LineString1, LineString2>
+{};
+
+template <typename LineString, typename MultiLineString, bool Reverse>
+struct equals<LineString, MultiLineString, linestring_tag, multi_linestring_tag, 2, Reverse>
+ : detail::equals::equals_by_relate<LineString, MultiLineString>
+{};
+
+template <typename MultiLineString1, typename MultiLineString2, bool Reverse>
+struct equals<MultiLineString1, MultiLineString2, multi_linestring_tag, multi_linestring_tag, 2, Reverse>
+ : detail::equals::equals_by_relate<MultiLineString1, MultiLineString2>
+{};
+
+
+template <typename MultiPolygon1, typename MultiPolygon2, bool Reverse>
+struct equals
+ <
+ MultiPolygon1, MultiPolygon2,
+ multi_polygon_tag, multi_polygon_tag,
+ 2,
+ Reverse
+ >
+ : detail::equals::equals_by_collection<detail::equals::area_check>
+{};
+
+
+template <typename Polygon, typename MultiPolygon, bool Reverse>
+struct equals
+ <
+ Polygon, MultiPolygon,
+ polygon_tag, multi_polygon_tag,
+ 2,
+ Reverse
+ >
+ : detail::equals::equals_by_collection<detail::equals::area_check>
+{};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_variant {
template <typename Geometry1, typename Geometry2>
-struct devarianted_equals
+struct equals
{
static inline bool apply(Geometry1 const& geometry1,
Geometry2 const& geometry2)
@@ -253,12 +339,14 @@ struct devarianted_equals
Geometry1 const,
Geometry2 const
>();
- return equals<Geometry1, Geometry2>::apply(geometry1, geometry2);
+
+ return dispatch::equals<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2);
}
};
template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct devarianted_equals<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+struct equals<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
{
struct visitor: static_visitor<bool>
{
@@ -271,8 +359,8 @@ struct devarianted_equals<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry
template <typename Geometry1>
inline bool operator()(Geometry1 const& geometry1) const
{
- return devarianted_equals<Geometry1, Geometry2>
- ::apply(geometry1, m_geometry2);
+ return equals<Geometry1, Geometry2>
+ ::apply(geometry1, m_geometry2);
}
};
@@ -287,7 +375,7 @@ struct devarianted_equals<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry
};
template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct devarianted_equals<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+struct equals<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
{
struct visitor: static_visitor<bool>
{
@@ -300,8 +388,8 @@ struct devarianted_equals<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)
template <typename Geometry2>
inline bool operator()(Geometry2 const& geometry2) const
{
- return devarianted_equals<Geometry1, Geometry2>
- ::apply(m_geometry1, geometry2);
+ return equals<Geometry1, Geometry2>
+ ::apply(m_geometry1, geometry2);
}
};
@@ -319,7 +407,7 @@ template <
BOOST_VARIANT_ENUM_PARAMS(typename T1),
BOOST_VARIANT_ENUM_PARAMS(typename T2)
>
-struct devarianted_equals<
+struct equals<
boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
>
@@ -330,8 +418,8 @@ struct devarianted_equals<
inline bool operator()(Geometry1 const& geometry1,
Geometry2 const& geometry2) const
{
- return devarianted_equals<Geometry1, Geometry2>
- ::apply(geometry1, geometry2);
+ return equals<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2);
}
};
@@ -345,16 +433,14 @@ struct devarianted_equals<
}
};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
+} // namespace resolve_variant
/*!
\brief \brief_check{are spatially equal}
-\details \details_check12{equals, is spatially equal}. Spatially equal means
+\details \details_check12{equals, is spatially equal}. Spatially equal means
that the same point set is included. A box can therefore be spatially equal
- to a ring or a polygon, or a linestring can be spatially equal to a
+ to a ring or a polygon, or a linestring can be spatially equal to a
multi-linestring or a segment. This only works theoretically, not all
combinations are implemented yet.
\ingroup equals
@@ -370,8 +456,8 @@ struct devarianted_equals<
template <typename Geometry1, typename Geometry2>
inline bool equals(Geometry1 const& geometry1, Geometry2 const& geometry2)
{
- return dispatch::devarianted_equals<Geometry1, Geometry2>
- ::apply(geometry1, geometry2);
+ return resolve_variant::equals<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2);
}
diff --git a/3party/boost/boost/geometry/algorithms/expand.hpp b/3party/boost/boost/geometry/algorithms/expand.hpp
index 2e1531bf02..19e40aa2d0 100644
--- a/3party/boost/boost/geometry/algorithms/expand.hpp
+++ b/3party/boost/boost/geometry/algorithms/expand.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -28,6 +29,9 @@
#include <boost/geometry/strategies/compare.hpp>
#include <boost/geometry/policies/compare.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+
namespace boost { namespace geometry
{
@@ -249,6 +253,51 @@ struct expand<Box, Segment, StrategyLess, StrategyGreater, box_tag, segment_tag>
#endif // DOXYGEN_NO_DISPATCH
+namespace resolve_variant {
+
+template <typename Geometry>
+struct expand
+{
+ template <typename Box>
+ static inline void apply(Box& box, Geometry const& geometry)
+ {
+ concept::check<Box>();
+ concept::check<Geometry const>();
+ concept::check_concepts_and_equal_dimensions<Box, Geometry const>();
+
+ dispatch::expand<Box, Geometry>::apply(box, geometry);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct expand<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename Box>
+ struct visitor: boost::static_visitor<void>
+ {
+ Box& m_box;
+
+ visitor(Box& box) : m_box(box) {}
+
+ template <typename Geometry>
+ void operator()(Geometry const& geometry) const
+ {
+ return expand<Geometry>::apply(m_box, geometry);
+ }
+ };
+
+ template <class Box>
+ static inline void
+ apply(Box& box,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry)
+ {
+ return boost::apply_visitor(visitor<Box>(box), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
/***
*!
\brief Expands a box using the extend (envelope) of another geometry (box, point)
@@ -290,9 +339,7 @@ inline void expand(Box& box, Geometry const& geometry,
template <typename Box, typename Geometry>
inline void expand(Box& box, Geometry const& geometry)
{
- concept::check_concepts_and_equal_dimensions<Box, Geometry const>();
-
- dispatch::expand<Box, Geometry>::apply(box, geometry);
+ resolve_variant::expand<Geometry>::apply(box, geometry);
}
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/algorithms/for_each.hpp b/3party/boost/boost/geometry/algorithms/for_each.hpp
index 24d38d3d8a..036109d3c0 100644
--- a/3party/boost/boost/geometry/algorithms/for_each.hpp
+++ b/3party/boost/boost/geometry/algorithms/for_each.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -19,12 +20,15 @@
#include <boost/range.hpp>
#include <boost/type_traits/is_const.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/point_type.hpp>
#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
@@ -32,7 +36,6 @@
#include <boost/geometry/util/add_const_if_c.hpp>
-
namespace boost { namespace geometry
{
@@ -54,7 +57,7 @@ struct fe_point_per_point
struct fe_point_per_segment
{
template <typename Point, typename Functor>
- static inline void apply(Point& , Functor& f)
+ static inline void apply(Point& , Functor& /*f*/)
{
// TODO: if non-const, we should extract the points from the segment
// and call the functor on those two points
@@ -74,7 +77,8 @@ struct fe_range_per_point
// So we now loop manually.
- for (typename boost::range_iterator<Range>::type it = boost::begin(range); it != boost::end(range); ++it)
+ for (typename boost::range_iterator<Range>::type
+ it = boost::begin(range); it != boost::end(range); ++it)
{
f(*it);
}
@@ -92,9 +96,11 @@ struct fe_range_per_segment
is_const<Range>::value,
typename point_type<Range>::type
>::type point_type;
+ typedef typename boost::range_iterator<Range>::type
+ iterator_type;
- BOOST_AUTO_TPL(it, boost::begin(range));
- BOOST_AUTO_TPL(previous, it++);
+ iterator_type it = boost::begin(range);
+ iterator_type previous = it++;
while(it != boost::end(range))
{
model::referring_segment<point_type> s(*previous, *it);
@@ -112,9 +118,11 @@ struct fe_polygon_per_point
{
fe_range_per_point::apply(exterior_ring(poly), f);
- typename interior_return_type<Polygon>::type rings
- = interior_rings(poly);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon>::type
+ rings = interior_rings(poly);
+
+ for (typename detail::interior_iterator<Polygon>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
fe_range_per_point::apply(*it, f);
}
@@ -122,7 +130,6 @@ struct fe_polygon_per_point
};
-
struct fe_polygon_per_segment
{
template <typename Polygon, typename Functor>
@@ -130,9 +137,11 @@ struct fe_polygon_per_segment
{
fe_range_per_segment::apply(exterior_ring(poly), f);
- typename interior_return_type<Polygon>::type rings
- = interior_rings(poly);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon>::type
+ rings = interior_rings(poly);
+
+ for (typename detail::interior_iterator<Polygon>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
fe_range_per_segment::apply(*it, f);
}
@@ -140,6 +149,21 @@ struct fe_polygon_per_segment
};
+// Implementation of multi, for both point and segment,
+// just calling the single version.
+template <typename Policy>
+struct for_each_multi
+{
+ template <typename MultiGeometry, typename Functor>
+ static inline void apply(MultiGeometry& multi, Functor& f)
+ {
+ for (typename boost::range_iterator<MultiGeometry>::type
+ it = boost::begin(multi); it != boost::end(multi); ++it)
+ {
+ Policy::apply(*it, f);
+ }
+ }
+};
}} // namespace detail::for_each
#endif // DOXYGEN_NO_DETAIL
@@ -214,6 +238,40 @@ struct for_each_segment<Polygon, polygon_tag>
{};
+template <typename MultiGeometry>
+struct for_each_point<MultiGeometry, multi_tag>
+ : detail::for_each::for_each_multi
+ <
+ // Specify the dispatch of the single-version as policy
+ for_each_point
+ <
+ typename add_const_if_c
+ <
+ is_const<MultiGeometry>::value,
+ typename boost::range_value<MultiGeometry>::type
+ >::type
+ >
+ >
+{};
+
+
+template <typename MultiGeometry>
+struct for_each_segment<MultiGeometry, multi_tag>
+ : detail::for_each::for_each_multi
+ <
+ // Specify the dispatch of the single-version as policy
+ for_each_segment
+ <
+ typename add_const_if_c
+ <
+ is_const<MultiGeometry>::value,
+ typename boost::range_value<MultiGeometry>::type
+ >::type
+ >
+ >
+{};
+
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
diff --git a/3party/boost/boost/geometry/algorithms/intersection.hpp b/3party/boost/boost/geometry/algorithms/intersection.hpp
index 3125752db8..b066e8150c 100644
--- a/3party/boost/boost/geometry/algorithms/intersection.hpp
+++ b/3party/boost/boost/geometry/algorithms/intersection.hpp
@@ -12,67 +12,14 @@
#include <boost/geometry/core/coordinate_dimension.hpp>
#include <boost/geometry/algorithms/detail/overlay/intersection_insert.hpp>
+#include <boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp>
#include <boost/geometry/algorithms/intersects.hpp>
+#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
namespace boost { namespace geometry
{
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection
-{
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct intersection_box_box
-{
- template
- <
- typename Box1, typename Box2, typename BoxOut,
- typename Strategy
- >
- static inline bool apply(Box1 const& box1,
- Box2 const& box2, BoxOut& box_out,
- Strategy const& strategy)
- {
- typedef typename coordinate_type<BoxOut>::type ct;
-
- ct min1 = get<min_corner, Dimension>(box1);
- ct min2 = get<min_corner, Dimension>(box2);
- ct max1 = get<max_corner, Dimension>(box1);
- ct max2 = get<max_corner, Dimension>(box2);
-
- if (max1 < min2 || max2 < min1)
- {
- return false;
- }
- // Set dimensions of output coordinate
- set<min_corner, Dimension>(box_out, min1 < min2 ? min2 : min1);
- set<max_corner, Dimension>(box_out, max1 > max2 ? max2 : max1);
-
- return intersection_box_box<Dimension + 1, DimensionCount>
- ::apply(box1, box2, box_out, strategy);
- }
-};
-
-template <std::size_t DimensionCount>
-struct intersection_box_box<DimensionCount, DimensionCount>
-{
- template
- <
- typename Box1, typename Box2, typename BoxOut,
- typename Strategy
- >
- static inline bool apply(Box1 const&, Box2 const&, BoxOut&, Strategy const&)
- {
- return true;
- }
-};
-
-
-}} // namespace detail::intersection
-#endif // DOXYGEN_NO_DETAIL
-
-
#ifndef DOXYGEN_NO_DISPATCH
namespace dispatch
@@ -88,9 +35,10 @@ template
>
struct intersection
{
- template <typename GeometryOut, typename Strategy>
+ template <typename RobustPolicy, typename GeometryOut, typename Strategy>
static inline bool apply(Geometry1 const& geometry1,
Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
GeometryOut& geometry_out,
Strategy const& strategy)
{
@@ -100,7 +48,7 @@ struct intersection
<
Geometry1, Geometry2, OneOut,
overlay_intersection
- >::apply(geometry1, geometry2, std::back_inserter(geometry_out), strategy);
+ >::apply(geometry1, geometry2, robust_policy, std::back_inserter(geometry_out), strategy);
return true;
}
@@ -122,10 +70,11 @@ struct intersection
>
: intersection<Geometry2, Geometry1, Tag2, Tag1, false>
{
- template <typename GeometryOut, typename Strategy>
+ template <typename RobustPolicy, typename GeometryOut, typename Strategy>
static inline bool apply(
Geometry1 const& g1,
Geometry2 const& g2,
+ RobustPolicy const& robust_policy,
GeometryOut& out,
Strategy const& strategy)
{
@@ -133,7 +82,7 @@ struct intersection
Geometry2, Geometry1,
Tag2, Tag1,
false
- >::apply(g2, g1, out, strategy);
+ >::apply(g2, g1, robust_policy, out, strategy);
}
};
@@ -157,6 +106,175 @@ struct intersection
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
+
+namespace resolve_variant
+{
+
+template <typename Geometry1, typename Geometry2>
+struct intersection
+{
+ template <typename GeometryOut>
+ static inline bool
+ apply(
+ const Geometry1& geometry1,
+ const Geometry2& geometry2,
+ GeometryOut& geometry_out)
+ {
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2 const>();
+
+ typedef typename geometry::rescale_overlay_policy_type
+ <
+ Geometry1,
+ Geometry2
+ >::type rescale_policy_type;
+
+ rescale_policy_type robust_policy
+ = geometry::get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
+
+ typedef strategy_intersection
+ <
+ typename cs_tag<Geometry1>::type,
+ Geometry1,
+ Geometry2,
+ typename geometry::point_type<Geometry1>::type,
+ rescale_policy_type
+ > strategy;
+
+ return dispatch::intersection
+ <
+ Geometry1,
+ Geometry2
+ >::apply(geometry1, geometry2, robust_policy, geometry_out, strategy());
+ }
+};
+
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct intersection<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ template <typename GeometryOut>
+ struct visitor: static_visitor<bool>
+ {
+ Geometry2 const& m_geometry2;
+ GeometryOut& m_geometry_out;
+
+ visitor(Geometry2 const& geometry2,
+ GeometryOut& geometry_out)
+ : m_geometry2(geometry2),
+ m_geometry_out(geometry_out)
+ {}
+
+ template <typename Geometry1>
+ result_type operator()(Geometry1 const& geometry1) const
+ {
+ return intersection
+ <
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ GeometryOut
+ >
+ (geometry1, m_geometry2, m_geometry_out);
+ }
+ };
+
+ template <typename GeometryOut>
+ static inline bool
+ apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2 const& geometry2,
+ GeometryOut& geometry_out)
+ {
+ return apply_visitor(visitor<GeometryOut>(geometry2, geometry_out), geometry1);
+ }
+};
+
+
+template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct intersection<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename GeometryOut>
+ struct visitor: static_visitor<bool>
+ {
+ Geometry1 const& m_geometry1;
+ GeometryOut& m_geometry_out;
+
+ visitor(Geometry1 const& geometry1,
+ GeometryOut& geometry_out)
+ : m_geometry1(geometry1),
+ m_geometry_out(geometry_out)
+ {}
+
+ template <typename Geometry2>
+ result_type operator()(Geometry2 const& geometry2) const
+ {
+ return intersection
+ <
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ GeometryOut
+ >
+ (m_geometry1, geometry2, m_geometry_out);
+ }
+ };
+
+ template <typename GeometryOut>
+ static inline bool
+ apply(
+ Geometry1 const& geometry1,
+ const variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry2,
+ GeometryOut& geometry_out)
+ {
+ return apply_visitor(visitor<GeometryOut>(geometry1, geometry_out), geometry2);
+ }
+};
+
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename A), BOOST_VARIANT_ENUM_PARAMS(typename B)>
+struct intersection<variant<BOOST_VARIANT_ENUM_PARAMS(A)>, variant<BOOST_VARIANT_ENUM_PARAMS(B)> >
+{
+ template <typename GeometryOut>
+ struct visitor: static_visitor<bool>
+ {
+ GeometryOut& m_geometry_out;
+
+ visitor(GeometryOut& geometry_out)
+ : m_geometry_out(geometry_out)
+ {}
+
+ template <typename Geometry1, typename Geometry2>
+ result_type operator()(
+ Geometry1 const& geometry1,
+ Geometry2 const& geometry2) const
+ {
+ return intersection
+ <
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ GeometryOut
+ >
+ (geometry1, geometry2, m_geometry_out);
+ }
+ };
+
+ template <typename GeometryOut>
+ static inline bool
+ apply(
+ const variant<BOOST_VARIANT_ENUM_PARAMS(A)>& geometry1,
+ const variant<BOOST_VARIANT_ENUM_PARAMS(B)>& geometry2,
+ GeometryOut& geometry_out)
+ {
+ return apply_visitor(visitor<GeometryOut>(geometry_out), geometry1, geometry2);
+ }
+};
+
+} // namespace resolve_variant
+
/*!
\brief \brief_calc2{intersection}
@@ -183,22 +301,15 @@ inline bool intersection(Geometry1 const& geometry1,
Geometry2 const& geometry2,
GeometryOut& geometry_out)
{
- concept::check<Geometry1 const>();
- concept::check<Geometry2 const>();
-
- typedef strategy_intersection
+ return resolve_variant::intersection
<
- typename cs_tag<Geometry1>::type,
- Geometry1,
- Geometry2,
- typename geometry::point_type<Geometry1>::type
- > strategy;
-
-
- return dispatch::intersection<
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, geometry_out, strategy());
+ Geometry1,
+ Geometry2
+ >::template apply
+ <
+ GeometryOut
+ >
+ (geometry1, geometry2, geometry_out);
}
diff --git a/3party/boost/boost/geometry/algorithms/intersects.hpp b/3party/boost/boost/geometry/algorithms/intersects.hpp
index f367f2e258..12cf78173b 100644
--- a/3party/boost/boost/geometry/algorithms/intersects.hpp
+++ b/3party/boost/boost/geometry/algorithms/intersects.hpp
@@ -21,6 +21,9 @@
#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
#include <boost/geometry/algorithms/disjoint.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
+#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
+
namespace boost { namespace geometry
{
@@ -43,37 +46,31 @@ inline bool intersects(Geometry const& geometry)
{
concept::check<Geometry const>();
+ typedef typename geometry::point_type<Geometry>::type point_type;
+ typedef typename rescale_policy_type<point_type>::type
+ rescale_policy_type;
typedef detail::overlay::turn_info
<
- typename geometry::point_type<Geometry>::type
+ point_type,
+ typename segment_ratio_type<point_type, rescale_policy_type>::type
> turn_info;
- std::deque<turn_info> turns;
- typedef typename strategy_intersection
- <
- typename cs_tag<Geometry>::type,
- Geometry,
- Geometry,
- typename geometry::point_type<Geometry>::type
- >::segment_intersection_strategy_type segment_intersection_strategy_type;
+ std::deque<turn_info> turns;
typedef detail::overlay::get_turn_info
<
- typename point_type<Geometry>::type,
- typename point_type<Geometry>::type,
- turn_info,
detail::overlay::assign_null_policy
- > TurnPolicy;
+ > turn_policy;
+
+ rescale_policy_type robust_policy
+ = geometry::get_rescale_policy<rescale_policy_type>(geometry);
detail::disjoint::disjoint_interrupt_policy policy;
detail::self_get_turn_points::get_turns
- <
- Geometry,
- std::deque<turn_info>,
- TurnPolicy,
- detail::disjoint::disjoint_interrupt_policy
- >::apply(geometry, turns, policy);
+ <
+ turn_policy
+ >::apply(geometry, robust_policy, turns, policy);
return policy.has_intersections;
}
diff --git a/3party/boost/boost/geometry/algorithms/is_simple.hpp b/3party/boost/boost/geometry/algorithms/is_simple.hpp
new file mode 100644
index 0000000000..f48c957dfc
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/is_simple.hpp
@@ -0,0 +1,16 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_IS_SIMPLE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_IS_SIMPLE_HPP
+
+#include <boost/geometry/algorithms/detail/is_simple/interface.hpp>
+#include <boost/geometry/algorithms/detail/is_simple/implementation.hpp>
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_IS_SIMPLE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/is_valid.hpp b/3party/boost/boost/geometry/algorithms/is_valid.hpp
new file mode 100644
index 0000000000..24dc5f7737
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/is_valid.hpp
@@ -0,0 +1,16 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_IS_VALID_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_IS_VALID_HPP
+
+#include <boost/geometry/algorithms/detail/is_valid/interface.hpp>
+#include <boost/geometry/algorithms/detail/is_valid/implementation.hpp>
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_IS_VALID_HPP
diff --git a/3party/boost/boost/geometry/algorithms/length.hpp b/3party/boost/boost/geometry/algorithms/length.hpp
index 2051e41a96..6cbec5303e 100644
--- a/3party/boost/boost/geometry/algorithms/length.hpp
+++ b/3party/boost/boost/geometry/algorithms/length.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -29,22 +34,24 @@
#include <boost/mpl/transform.hpp>
#include <boost/type_traits.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/assign.hpp>
#include <boost/geometry/algorithms/detail/calculate_null.hpp>
+#include <boost/geometry/algorithms/detail/multi_sum.hpp>
// #include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
#include <boost/geometry/views/closeable_view.hpp>
#include <boost/geometry/strategies/distance.hpp>
#include <boost/geometry/strategies/default_length_result.hpp>
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
namespace boost { namespace geometry
{
@@ -149,39 +156,51 @@ struct length<Geometry, segment_tag>
{};
-template <typename Geometry>
-struct devarianted_length
+template <typename MultiLinestring>
+struct length<MultiLinestring, multi_linestring_tag> : detail::multi_sum
{
- typedef typename default_length_result<Geometry>::type result_type;
+ template <typename Strategy>
+ static inline typename default_length_result<MultiLinestring>::type
+ apply(MultiLinestring const& multi, Strategy const& strategy)
+ {
+ return multi_sum::apply
+ <
+ typename default_length_result<MultiLinestring>::type,
+ detail::length::range_length
+ <
+ typename boost::range_value<MultiLinestring>::type,
+ closed // no need to close it explicitly
+ >
+ >(multi, strategy);
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_variant {
+
+template <typename Geometry>
+struct length
+{
template <typename Strategy>
- static inline result_type apply(Geometry const& geometry,
- Strategy const& strategy)
+ static inline typename default_length_result<Geometry>::type
+ apply(Geometry const& geometry, Strategy const& strategy)
{
- return length<Geometry>::apply(geometry, strategy);
+ return dispatch::length<Geometry>::apply(geometry, strategy);
}
};
template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct devarianted_length<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+struct length<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
{
- typedef typename mpl::fold<
- typename mpl::transform<
- typename variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
- default_length_result<mpl::_>
- >::type,
- mpl::set0<>,
- mpl::insert<mpl::_1, mpl::_2>
- >::type possible_result_types;
-
- typedef typename mpl::if_<
- mpl::greater<
- mpl::size<possible_result_types>,
- mpl::int_<1>
- >,
- typename make_variant_over<possible_result_types>::type,
- typename mpl::front<possible_result_types>::type
- >::type result_type;
+ typedef typename default_length_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>
+ >::type result_type;
template <typename Strategy>
struct visitor
@@ -194,10 +213,10 @@ struct devarianted_length<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
{}
template <typename Geometry>
- inline typename devarianted_length<Geometry>::result_type
+ inline typename default_length_result<Geometry>::type
operator()(Geometry const& geometry) const
{
- return devarianted_length<Geometry>::apply(geometry, m_strategy);
+ return length<Geometry>::apply(geometry, m_strategy);
}
};
@@ -211,9 +230,7 @@ struct devarianted_length<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
}
};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
+} // namespace resolve_variant
/*!
@@ -228,19 +245,20 @@ struct devarianted_length<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
\qbk{[length] [length_output]}
*/
template<typename Geometry>
-inline typename dispatch::devarianted_length<Geometry>::result_type
+inline typename default_length_result<Geometry>::type
length(Geometry const& geometry)
{
concept::check<Geometry const>();
// detail::throw_on_empty_input(geometry);
+ // TODO put this into a resolve_strategy stage
typedef typename strategy::distance::services::default_strategy
<
- point_tag, typename point_type<Geometry>::type
+ point_tag, point_tag, typename point_type<Geometry>::type
>::type strategy_type;
- return dispatch::devarianted_length<Geometry>::apply(geometry, strategy_type());
+ return resolve_variant::length<Geometry>::apply(geometry, strategy_type());
}
@@ -259,14 +277,14 @@ length(Geometry const& geometry)
\qbk{[length_with_strategy] [length_with_strategy_output]}
*/
template<typename Geometry, typename Strategy>
-inline typename dispatch::devarianted_length<Geometry>::result_type
+inline typename default_length_result<Geometry>::type
length(Geometry const& geometry, Strategy const& strategy)
{
concept::check<Geometry const>();
// detail::throw_on_empty_input(geometry);
-
- return dispatch::devarianted_length<Geometry>::apply(geometry, strategy);
+
+ return resolve_variant::length<Geometry>::apply(geometry, strategy);
}
diff --git a/3party/boost/boost/geometry/algorithms/not_implemented.hpp b/3party/boost/boost/geometry/algorithms/not_implemented.hpp
index 008f111cc8..cd40a2772f 100644
--- a/3party/boost/boost/geometry/algorithms/not_implemented.hpp
+++ b/3party/boost/boost/geometry/algorithms/not_implemented.hpp
@@ -18,7 +18,6 @@
#include <boost/mpl/assert.hpp>
#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
namespace boost { namespace geometry
diff --git a/3party/boost/boost/geometry/algorithms/num_geometries.hpp b/3party/boost/boost/geometry/algorithms/num_geometries.hpp
index 58afe4b979..c32494607e 100644
--- a/3party/boost/boost/geometry/algorithms/num_geometries.hpp
+++ b/3party/boost/boost/geometry/algorithms/num_geometries.hpp
@@ -17,6 +17,8 @@
#include <cstddef>
+#include <boost/range.hpp>
+
#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/core/tag.hpp>
@@ -59,6 +61,15 @@ struct num_geometries<Geometry, single_tag>
};
+template <typename MultiGeometry>
+struct num_geometries<MultiGeometry, multi_tag>
+{
+ static inline std::size_t apply(MultiGeometry const& multi_geometry)
+ {
+ return boost::size(multi_geometry);
+ }
+};
+
} // namespace dispatch
#endif
diff --git a/3party/boost/boost/geometry/algorithms/num_points.hpp b/3party/boost/boost/geometry/algorithms/num_points.hpp
index 923ae8297f..d8dc91aceb 100644
--- a/3party/boost/boost/geometry/algorithms/num_points.hpp
+++ b/3party/boost/boost/geometry/algorithms/num_points.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -17,13 +18,12 @@
#include <cstddef>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
#include <boost/geometry/core/closure.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/algorithms/disjoint.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
@@ -37,7 +37,7 @@ namespace boost { namespace geometry
// Silence warning C4127: conditional expression is constant
#if defined(_MSC_VER)
-#pragma warning(push)
+#pragma warning(push)
#pragma warning(disable : 4127)
#endif
@@ -82,14 +82,12 @@ struct polygon_count: private range_count
template <typename Polygon>
static inline std::size_t apply(Polygon const& poly, bool add_for_open)
{
- typedef typename geometry::ring_type<Polygon>::type ring_type;
+ std::size_t n = range_count::apply(exterior_ring(poly), add_for_open);
- std::size_t n = range_count::apply(
- exterior_ring(poly), add_for_open);
-
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(poly);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(poly);
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
n += range_count::apply(*it, add_for_open);
}
@@ -144,18 +142,24 @@ struct num_points<Geometry, polygon_tag>
: detail::num_points::polygon_count
{};
+} // namespace dispatch
+#endif
+
+
+namespace resolve_variant {
+
template <typename Geometry>
-struct devarianted_num_points
+struct num_points
{
static inline std::size_t apply(Geometry const& geometry,
bool add_for_open)
{
- return num_points<Geometry>::apply(geometry, add_for_open);
+ return dispatch::num_points<Geometry>::apply(geometry, add_for_open);
}
};
template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct devarianted_num_points<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+struct num_points<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
{
struct visitor: boost::static_visitor<std::size_t>
{
@@ -166,7 +170,7 @@ struct devarianted_num_points<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
template <typename Geometry>
typename std::size_t operator()(Geometry const& geometry) const
{
- return dispatch::num_points<Geometry>::apply(geometry, m_add_for_open);
+ return num_points<Geometry>::apply(geometry, m_add_for_open);
}
};
@@ -178,9 +182,7 @@ struct devarianted_num_points<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
}
};
-
-} // namespace dispatch
-#endif
+} // namespace resolve_variant
/*!
@@ -199,7 +201,7 @@ inline std::size_t num_points(Geometry const& geometry, bool add_for_open = fals
{
concept::check<Geometry const>();
- return dispatch::devarianted_num_points<Geometry>::apply(geometry, add_for_open);
+ return resolve_variant::num_points<Geometry>::apply(geometry, add_for_open);
}
#if defined(_MSC_VER)
diff --git a/3party/boost/boost/geometry/algorithms/overlaps.hpp b/3party/boost/boost/geometry/algorithms/overlaps.hpp
index d417a4b1f5..f724a544fd 100644
--- a/3party/boost/boost/geometry/algorithms/overlaps.hpp
+++ b/3party/boost/boost/geometry/algorithms/overlaps.hpp
@@ -4,6 +4,9 @@
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -11,6 +14,8 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_ALGORITHMS_OVERLAPS_HPP
#define BOOST_GEOMETRY_ALGORITHMS_OVERLAPS_HPP
@@ -23,6 +28,8 @@
#include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/algorithms/detail/relate/relate.hpp>
+
namespace boost { namespace geometry
{
@@ -124,8 +131,6 @@ struct box_box
}
};
-
-
}} // namespace detail::overlaps
#endif // DOXYGEN_NO_DETAIL
@@ -143,7 +148,13 @@ template
typename Tag1 = typename tag<Geometry1>::type,
typename Tag2 = typename tag<Geometry2>::type
>
-struct overlaps: not_implemented<Tag1, Tag2>
+struct overlaps
+ : detail::relate::relate_base
+ <
+ detail::relate::static_mask_overlaps_type,
+ Geometry1,
+ Geometry2
+ >
{};
@@ -152,9 +163,6 @@ struct overlaps<Box1, Box2, box_tag, box_tag>
: detail::overlaps::box_box
{};
-
-
-
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
@@ -162,6 +170,10 @@ struct overlaps<Box1, Box2, box_tag, box_tag>
/*!
\brief \brief_check2{overlap}
\ingroup overlaps
+\tparam Geometry1 \tparam_geometry
+\tparam Geometry2 \tparam_geometry
+\param geometry1 \param_geometry
+\param geometry2 \param_geometry
\return \return_check2{overlap}
\qbk{[include reference/algorithms/overlaps.qbk]}
diff --git a/3party/boost/boost/geometry/algorithms/perimeter.hpp b/3party/boost/boost/geometry/algorithms/perimeter.hpp
index b70517e3e5..0ec153c1f4 100644
--- a/3party/boost/boost/geometry/algorithms/perimeter.hpp
+++ b/3party/boost/boost/geometry/algorithms/perimeter.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,16 +19,22 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_PERIMETER_HPP
#define BOOST_GEOMETRY_ALGORITHMS_PERIMETER_HPP
+#include <boost/range/metafunctions.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/strategies/default_length_result.hpp>
#include <boost/geometry/algorithms/length.hpp>
#include <boost/geometry/algorithms/detail/calculate_null.hpp>
#include <boost/geometry/algorithms/detail/calculate_sum.hpp>
+#include <boost/geometry/algorithms/detail/multi_sum.hpp>
// #include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
-
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/strategies/default_length_result.hpp>
+#include <boost/geometry/strategies/default_strategy.hpp>
namespace boost { namespace geometry
{
@@ -71,6 +82,22 @@ struct perimeter<Polygon, polygon_tag> : detail::calculate_polygon_sum
}
};
+template <typename MultiPolygon>
+struct perimeter<MultiPolygon, multi_polygon_tag> : detail::multi_sum
+{
+ typedef typename default_length_result<MultiPolygon>::type return_type;
+
+ template <typename Strategy>
+ static inline return_type apply(MultiPolygon const& multi, Strategy const& strategy)
+ {
+ return multi_sum::apply
+ <
+ return_type,
+ perimeter<typename boost::range_value<MultiPolygon>::type>
+ >(multi, strategy);
+ }
+};
+
// box,n-sphere: to be implemented
@@ -78,6 +105,82 @@ struct perimeter<Polygon, polygon_tag> : detail::calculate_polygon_sum
#endif // DOXYGEN_NO_DISPATCH
+namespace resolve_strategy {
+
+struct perimeter
+{
+ template <typename Geometry, typename Strategy>
+ static inline typename default_length_result<Geometry>::type
+ apply(Geometry const& geometry, Strategy const& strategy)
+ {
+ return dispatch::perimeter<Geometry>::apply(geometry, strategy);
+ }
+
+ template <typename Geometry>
+ static inline typename default_length_result<Geometry>::type
+ apply(Geometry const& geometry, default_strategy)
+ {
+ typedef typename strategy::distance::services::default_strategy
+ <
+ point_tag, point_tag, typename point_type<Geometry>::type
+ >::type strategy_type;
+
+ return dispatch::perimeter<Geometry>::apply(geometry, strategy_type());
+ }
+};
+
+} // namespace resolve_strategy
+
+
+namespace resolve_variant {
+
+template <typename Geometry>
+struct perimeter
+{
+ template <typename Strategy>
+ static inline typename default_length_result<Geometry>::type
+ apply(Geometry const& geometry, Strategy const& strategy)
+ {
+ concept::check<Geometry const>();
+ return resolve_strategy::perimeter::apply(geometry, strategy);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct perimeter<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ typedef typename default_length_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>
+ >::type result_type;
+
+ template <typename Strategy>
+ struct visitor: boost::static_visitor<result_type>
+ {
+ Strategy const& m_strategy;
+
+ visitor(Strategy const& strategy): m_strategy(strategy) {}
+
+ template <typename Geometry>
+ typename default_length_result<Geometry>::type
+ operator()(Geometry const& geometry) const
+ {
+ return perimeter<Geometry>::apply(geometry, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline result_type
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ Strategy const& strategy)
+ {
+ return boost::apply_visitor(visitor<Strategy>(strategy), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
/*!
\brief \brief_calc{perimeter}
\ingroup perimeter
@@ -93,17 +196,8 @@ template<typename Geometry>
inline typename default_length_result<Geometry>::type perimeter(
Geometry const& geometry)
{
- concept::check<Geometry const>();
-
- typedef typename point_type<Geometry>::type point_type;
- typedef typename strategy::distance::services::default_strategy
- <
- point_tag, point_type
- >::type strategy_type;
-
// detail::throw_on_empty_input(geometry);
-
- return dispatch::perimeter<Geometry>::apply(geometry, strategy_type());
+ return resolve_variant::perimeter<Geometry>::apply(geometry, default_strategy());
}
/*!
@@ -124,11 +218,8 @@ template<typename Geometry, typename Strategy>
inline typename default_length_result<Geometry>::type perimeter(
Geometry const& geometry, Strategy const& strategy)
{
- concept::check<Geometry const>();
-
// detail::throw_on_empty_input(geometry);
-
- return dispatch::perimeter<Geometry>::apply(geometry, strategy);
+ return resolve_variant::perimeter<Geometry>::apply(geometry, strategy);
}
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/algorithms/point_on_surface.hpp b/3party/boost/boost/geometry/algorithms/point_on_surface.hpp
new file mode 100644
index 0000000000..a6f7ed71d7
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/point_on_surface.hpp
@@ -0,0 +1,355 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_POINT_ON_SURFACE_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_POINT_ON_SURFACE_HPP
+
+
+#include <cstddef>
+
+#include <numeric>
+
+#include <boost/concept_check.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/algorithms/detail/extreme_points.hpp>
+
+#include <boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace point_on_surface
+{
+
+template <typename CoordinateType, int Dimension>
+struct specific_coordinate_first
+{
+ CoordinateType const m_value_to_be_first;
+
+ inline specific_coordinate_first(CoordinateType value_to_be_skipped)
+ : m_value_to_be_first(value_to_be_skipped)
+ {}
+
+ template <typename Point>
+ inline bool operator()(Point const& lhs, Point const& rhs)
+ {
+ CoordinateType const lh = geometry::get<Dimension>(lhs);
+ CoordinateType const rh = geometry::get<Dimension>(rhs);
+
+ // If both lhs and rhs equal m_value_to_be_first,
+ // we should handle conform if lh < rh = FALSE
+ // The first condition meets that, keep it first
+ if (geometry::math::equals(rh, m_value_to_be_first))
+ {
+ // Handle conform lh < -INF, which is always false
+ return false;
+ }
+
+ if (geometry::math::equals(lh, m_value_to_be_first))
+ {
+ // Handle conform -INF < rh, which is always true
+ return true;
+ }
+
+ return lh < rh;
+ }
+};
+
+template <int Dimension, typename Collection, typename Value, typename Predicate>
+inline bool max_value(Collection const& collection, Value& the_max, Predicate const& predicate)
+{
+ bool first = true;
+ for (typename Collection::const_iterator it = collection.begin(); it != collection.end(); ++it)
+ {
+ if (! it->empty())
+ {
+ Value the_value = geometry::get<Dimension>(*std::max_element(it->begin(), it->end(), predicate));
+ if (first || the_value > the_max)
+ {
+ the_max = the_value;
+ first = false;
+ }
+ }
+ }
+ return ! first;
+}
+
+
+template <int Dimension, typename Value>
+struct select_below
+{
+ Value m_value;
+ inline select_below(Value const& v)
+ : m_value(v)
+ {}
+
+ template <typename Intruder>
+ inline bool operator()(Intruder const& intruder) const
+ {
+ if (intruder.empty())
+ {
+ return true;
+ }
+ Value max = geometry::get<Dimension>(*std::max_element(intruder.begin(), intruder.end(), detail::extreme_points::compare<Dimension>()));
+ return geometry::math::equals(max, m_value) || max < m_value;
+ }
+};
+
+template <int Dimension, typename Value>
+struct adapt_base
+{
+ Value m_value;
+ inline adapt_base(Value const& v)
+ : m_value(v)
+ {}
+
+ template <typename Intruder>
+ inline void operator()(Intruder& intruder) const
+ {
+ if (intruder.size() >= 3)
+ {
+ detail::extreme_points::move_along_vector<Dimension>(intruder, m_value);
+ }
+ }
+};
+
+template <int Dimension, typename Value>
+struct min_of_intruder
+{
+ template <typename Intruder>
+ inline bool operator()(Intruder const& lhs, Intruder const& rhs) const
+ {
+ Value lhs_min = geometry::get<Dimension>(*std::min_element(lhs.begin(), lhs.end(), detail::extreme_points::compare<Dimension>()));
+ Value rhs_min = geometry::get<Dimension>(*std::min_element(rhs.begin(), rhs.end(), detail::extreme_points::compare<Dimension>()));
+ return lhs_min < rhs_min;
+ }
+};
+
+template <typename Point, typename Segments>
+inline void calculate_centroid(Point& point, Segments const& segments)
+{
+ if (segments.size() == 3)
+ {
+ // In almost all cases, the segments do have 3 values. In that case we use another
+ // centroid calculation, which should be slightly faster
+ // and is more precise (case #geos_1_test_overlay => normal centroid is outside! TODO)
+
+ typedef typename geometry::coordinate_type<Point>::type coordinate_type;
+ coordinate_type const three = 3.0;
+ coordinate_type const sx = geometry::get<0>(segments[0]) + geometry::get<0>(segments[1]) + geometry::get<0>(segments[2]);
+ coordinate_type const sy = geometry::get<1>(segments[0]) + geometry::get<1>(segments[1]) + geometry::get<1>(segments[2]);
+ geometry::set<0>(point, sx / three);
+ geometry::set<1>(point, sy / three);
+ return;
+ }
+
+ // For 4 or more segments, we use normal centroid calculation
+
+ // Specify centroid, it should have "areal_tag" to have correct calculation
+ typedef typename strategy::centroid::services::default_strategy
+ <
+ typename cs_tag<Point>::type,
+ areal_tag,
+ dimension<Point>::type::value,
+ Point,
+ Point
+ >::type strategy_type;
+
+ strategy_type strategy;
+
+
+ // Ignore warning (because using static method sometimes) on strategy
+ boost::ignore_unused_variable_warning(strategy);
+
+
+ typename strategy_type::state_type state;
+
+ typedef typename boost::range_iterator<Segments const>::type iterator_type;
+
+ iterator_type begin = boost::begin(segments);
+ iterator_type end = boost::end(segments);
+ iterator_type it = begin;
+ iterator_type previous = it++;
+ for (; it != end; ++previous, ++it)
+ {
+ strategy.apply(*previous, *it, state);
+ }
+ // Close it explicitly:
+ strategy.apply(*previous, *begin, state);
+
+ strategy.result(state, point);
+}
+
+
+
+template <int Dimension, typename Extremes, typename Intruders, typename CoordinateType>
+inline void replace_extremes_for_self_tangencies(Extremes& extremes, Intruders& intruders, CoordinateType const& max_intruder)
+{
+ // This function handles self-tangencies.
+ // Self-tangencies use, as usual, the major part of code...
+
+ // ___ e
+ // /|\ \ .
+ // / | \ \ .
+ // / | \ \ .
+ // / | \ \ .
+ // / /\ | \ \ .
+ // i2 i1
+
+ // The picture above shows the extreme (outside, "e") and two intruders ("i1","i2")
+ // Assume that "i1" is self-tangent with the extreme, in one point at the top
+ // Now the "penultimate" value is searched, this is is the top of i2
+ // Then everything including and below (this is "i2" here) is removed
+ // Then the base of "i1" and of "e" is adapted to this penultimate value
+ // It then looks like:
+
+ // b ___ e
+ // /|\ \ .
+ // / | \ \ .
+ // / | \ \ .
+ // / | \ \ .
+ // a c i1
+
+ // Then intruders (here "i1" but there may be more) are sorted from left to right
+ // Finally points "a","b" and "c" (in this order) are selected as a new triangle.
+ // This triangle will have a centroid which is inside (assumed that intruders left segment
+ // is not equal to extremes left segment, but that polygon would be invalid)
+
+ // Find highest non-self tangent intrusion, if any
+ CoordinateType penultimate_value;
+ specific_coordinate_first<CoordinateType, Dimension> pu_compare(max_intruder);
+ if (max_value<Dimension>(intruders, penultimate_value, pu_compare))
+ {
+ // Throw away all intrusions <= this value, and of the kept one set this as base.
+ select_below<Dimension, CoordinateType> predicate(penultimate_value);
+ intruders.erase
+ (
+ std::remove_if(boost::begin(intruders), boost::end(intruders), predicate),
+ boost::end(intruders)
+ );
+ adapt_base<Dimension, CoordinateType> fe_predicate(penultimate_value);
+ // Sort from left to right (or bottom to top if Dimension=0)
+ std::for_each(boost::begin(intruders), boost::end(intruders), fe_predicate);
+
+ // Also adapt base of extremes
+ detail::extreme_points::move_along_vector<Dimension>(extremes, penultimate_value);
+ }
+ // Then sort in 1-Dim. Take first to calc centroid.
+ std::sort(boost::begin(intruders), boost::end(intruders), min_of_intruder<1 - Dimension, CoordinateType>());
+
+ Extremes triangle;
+ triangle.reserve(3);
+
+ // Make a triangle of first two points of extremes (the ramp, from left to right), and last point of first intruder (which goes from right to left)
+ std::copy(extremes.begin(), extremes.begin() + 2, std::back_inserter(triangle));
+ triangle.push_back(intruders.front().back());
+
+ // (alternatively we could use the last two points of extremes, and first point of last intruder...):
+ //// ALTERNATIVE: std::copy(extremes.rbegin(), extremes.rbegin() + 2, std::back_inserter(triangle));
+ //// ALTERNATIVE: triangle.push_back(intruders.back().front());
+
+ // Now replace extremes with this smaller subset, a triangle, such that centroid calculation will result in a point inside
+ extremes = triangle;
+}
+
+template <int Dimension, typename Geometry, typename Point>
+inline bool calculate_point_on_surface(Geometry const& geometry, Point& point)
+{
+ typedef typename geometry::point_type<Geometry>::type point_type;
+ typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
+ std::vector<point_type> extremes;
+
+ typedef std::vector<std::vector<point_type> > intruders_type;
+ intruders_type intruders;
+ geometry::extreme_points<Dimension>(geometry, extremes, intruders);
+
+ if (extremes.size() < 3)
+ {
+ return false;
+ }
+
+ // If there are intruders, find the max.
+ if (! intruders.empty())
+ {
+ coordinate_type max_intruder;
+ detail::extreme_points::compare<Dimension> compare;
+ if (max_value<Dimension>(intruders, max_intruder, compare))
+ {
+ coordinate_type max_extreme = geometry::get<Dimension>(*std::max_element(extremes.begin(), extremes.end(), detail::extreme_points::compare<Dimension>()));
+ if (max_extreme > max_intruder)
+ {
+ detail::extreme_points::move_along_vector<Dimension>(extremes, max_intruder);
+ }
+ else
+ {
+ replace_extremes_for_self_tangencies<Dimension>(extremes, intruders, max_intruder);
+ }
+ }
+ }
+
+ // Now calculate the centroid of the (possibly adapted) extremes
+ calculate_centroid(point, extremes);
+
+ return true;
+}
+
+}} // namespace detail::point_on_surface
+#endif // DOXYGEN_NO_DETAIL
+
+
+/*!
+\brief Assigns a Point guaranteed to lie on the surface of the Geometry
+\tparam Geometry geometry type. This also defines the type of the output point
+\param geometry Geometry to take point from
+\param point Point to assign
+ */
+template <typename Geometry, typename Point>
+inline void point_on_surface(Geometry const& geometry, Point & point)
+{
+ concept::check<Point>();
+ concept::check<Geometry const>();
+
+ // First try in Y-direction (which should always succeed for valid polygons)
+ if (! detail::point_on_surface::calculate_point_on_surface<1>(geometry, point))
+ {
+ // For invalid polygons, we might try X-direction
+ detail::point_on_surface::calculate_point_on_surface<0>(geometry, point);
+ }
+}
+
+/*!
+\brief Returns point guaranteed to lie on the surface of the Geometry
+\tparam Geometry geometry type. This also defines the type of the output point
+\param geometry Geometry to take point from
+\return The Point guaranteed to lie on the surface of the Geometry
+ */
+template<typename Geometry>
+inline typename geometry::point_type<Geometry>::type
+return_point_on_surface(Geometry const& geometry)
+{
+ typename geometry::point_type<Geometry>::type result;
+ geometry::point_on_surface(geometry, result);
+ return result;
+}
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_POINT_ON_SURFACE_HPP
diff --git a/3party/boost/boost/geometry/algorithms/remove_spikes.hpp b/3party/boost/boost/geometry/algorithms/remove_spikes.hpp
new file mode 100644
index 0000000000..e62ea9fe3d
--- /dev/null
+++ b/3party/boost/boost/geometry/algorithms/remove_spikes.hpp
@@ -0,0 +1,280 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_REMOVE_SPIKES_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_REMOVE_SPIKES_HPP
+
+#include <deque>
+
+#include <boost/range.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/point_order.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
+#include <boost/geometry/algorithms/clear.hpp>
+
+
+/*
+Remove spikes from a ring/polygon.
+Ring (having 8 vertices, including closing vertex)
++------+
+| |
+| +--+
+| | ^this "spike" is removed, can be located outside/inside the ring
++------+
+(the actualy determination if it is removed is done by a strategy)
+
+*/
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace remove_spikes
+{
+
+
+template <typename Range>
+struct range_remove_spikes
+{
+ typedef typename strategy::side::services::default_strategy
+ <
+ typename cs_tag<Range>::type
+ >::type side_strategy;
+
+ typedef typename coordinate_type<Range>::type coordinate_type;
+ typedef typename point_type<Range>::type point_type;
+
+
+ static inline void apply(Range& range)
+ {
+ std::size_t n = boost::size(range);
+ std::size_t const min_num_points = core_detail::closure::minimum_ring_size
+ <
+ geometry::closure<Range>::value
+ >::value - 1; // subtract one: a polygon with only one spike should result into one point
+ if (n < min_num_points)
+ {
+ return;
+ }
+
+ std::deque<point_type> cleaned;
+ for (typename boost::range_iterator<Range const>::type it = boost::begin(range);
+ it != boost::end(range); ++it)
+ {
+ // Add point
+ cleaned.push_back(*it);
+
+ while(cleaned.size() >= 3
+ && detail::point_is_spike_or_equal(cleaned.back(), *(cleaned.end() - 3), *(cleaned.end() - 2)))
+ {
+ // Remove pen-ultimate point causing the spike (or which was equal)
+ cleaned.erase(cleaned.end() - 2);
+ }
+ }
+
+ // For a closed-polygon, remove closing point, this makes checking first point(s) easier and consistent
+ if (geometry::closure<Range>::value == geometry::closed)
+ {
+ cleaned.pop_back();
+ }
+
+ bool found = false;
+ do
+ {
+ found = false;
+ // Check for spike in first point
+ int const penultimate = 2;
+ while(cleaned.size() >= 3 && detail::point_is_spike_or_equal(cleaned.front(), *(cleaned.end() - penultimate), cleaned.back()))
+ {
+ cleaned.pop_back();
+ found = true;
+ }
+ // Check for spike in second point
+ while(cleaned.size() >= 3 && detail::point_is_spike_or_equal(*(cleaned.begin() + 1), cleaned.back(), cleaned.front()))
+ {
+ cleaned.pop_front();
+ found = true;
+ }
+ }
+ while (found);
+
+ if (cleaned.size() == 2)
+ {
+ // Ticket #9871: open polygon with only two points.
+ // the second point forms, by definition, a spike
+ cleaned.pop_back();
+ }
+
+ // Close if necessary
+ if (geometry::closure<Range>::value == geometry::closed)
+ {
+ cleaned.push_back(cleaned.front());
+ }
+
+ // Copy output
+ geometry::clear(range);
+ std::copy(cleaned.begin(), cleaned.end(), std::back_inserter(range));
+ }
+};
+
+
+template <typename Polygon>
+struct polygon_remove_spikes
+{
+ static inline void apply(Polygon& polygon)
+ {
+ typedef typename geometry::ring_type<Polygon>::type ring_type;
+
+ typedef range_remove_spikes<ring_type> per_range;
+ per_range::apply(exterior_ring(polygon));
+
+ typename interior_return_type<Polygon>::type
+ rings = interior_rings(polygon);
+
+ for (typename detail::interior_iterator<Polygon>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
+ {
+ per_range::apply(*it);
+ }
+ }
+};
+
+
+template <typename MultiGeometry, typename SingleVersion>
+struct multi_remove_spikes
+{
+ static inline void apply(MultiGeometry& multi)
+ {
+ for (typename boost::range_iterator<MultiGeometry>::type
+ it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it)
+ {
+ SingleVersion::apply(*it);
+ }
+ }
+};
+
+
+}} // namespace detail::remove_spikes
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template
+<
+ typename Geometry,
+ typename Tag = typename tag<Geometry>::type
+>
+struct remove_spikes
+{
+ static inline void apply(Geometry&)
+ {}
+};
+
+
+template <typename Ring>
+struct remove_spikes<Ring, ring_tag>
+ : detail::remove_spikes::range_remove_spikes<Ring>
+{};
+
+
+
+template <typename Polygon>
+struct remove_spikes<Polygon, polygon_tag>
+ : detail::remove_spikes::polygon_remove_spikes<Polygon>
+{};
+
+
+template <typename MultiPolygon>
+struct remove_spikes<MultiPolygon, multi_polygon_tag>
+ : detail::remove_spikes::multi_remove_spikes
+ <
+ MultiPolygon,
+ detail::remove_spikes::polygon_remove_spikes
+ <
+ typename boost::range_value<MultiPolygon>::type
+ >
+ >
+{};
+
+
+} // namespace dispatch
+#endif
+
+
+namespace resolve_variant {
+
+template <typename Geometry>
+struct remove_spikes
+{
+ static void apply(Geometry& geometry)
+ {
+ concept::check<Geometry>();
+ dispatch::remove_spikes<Geometry>::apply(geometry);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct remove_spikes<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: boost::static_visitor<void>
+ {
+ template <typename Geometry>
+ void operator()(Geometry& geometry) const
+ {
+ remove_spikes<Geometry>::apply(geometry);
+ }
+ };
+
+ static inline void apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry)
+ {
+ boost::apply_visitor(visitor(), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
+/*!
+ \ingroup remove_spikes
+ \tparam Geometry geometry type
+ \param geometry the geometry to make remove_spikes
+*/
+template <typename Geometry>
+inline void remove_spikes(Geometry& geometry)
+{
+ resolve_variant::remove_spikes<Geometry>::apply(geometry);
+}
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_REMOVE_SPIKES_HPP
diff --git a/3party/boost/boost/geometry/algorithms/reverse.hpp b/3party/boost/boost/geometry/algorithms/reverse.hpp
index 1e1168a5ae..17b23ffdfb 100644
--- a/3party/boost/boost/geometry/algorithms/reverse.hpp
+++ b/3party/boost/boost/geometry/algorithms/reverse.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -17,9 +18,15 @@
#include <algorithm>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
+#include <boost/geometry/algorithms/detail/multi_modify.hpp>
#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
@@ -47,13 +54,13 @@ struct polygon_reverse: private range_reverse
template <typename Polygon>
static inline void apply(Polygon& polygon)
{
- typedef typename geometry::ring_type<Polygon>::type ring_type;
-
range_reverse::apply(exterior_ring(polygon));
- typename interior_return_type<Polygon>::type rings
- = interior_rings(polygon);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon>::type
+ rings = interior_rings(polygon);
+
+ for (typename detail::interior_iterator<Polygon>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
range_reverse::apply(*it);
}
@@ -96,10 +103,65 @@ struct reverse<Polygon, polygon_tag>
{};
+template <typename Geometry>
+struct reverse<Geometry, multi_linestring_tag>
+ : detail::multi_modify
+ <
+ Geometry,
+ detail::reverse::range_reverse
+ >
+{};
+
+
+template <typename Geometry>
+struct reverse<Geometry, multi_polygon_tag>
+ : detail::multi_modify
+ <
+ Geometry,
+ detail::reverse::polygon_reverse
+ >
+{};
+
+
+
} // namespace dispatch
#endif
+namespace resolve_variant
+{
+
+template <typename Geometry>
+struct reverse
+{
+ static void apply(Geometry& geometry)
+ {
+ concept::check<Geometry>();
+ dispatch::reverse<Geometry>::apply(geometry);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct reverse<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: boost::static_visitor<void>
+ {
+ template <typename Geometry>
+ void operator()(Geometry& geometry) const
+ {
+ reverse<Geometry>::apply(geometry);
+ }
+ };
+
+ static inline void apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry)
+ {
+ boost::apply_visitor(visitor(), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
+
/*!
\brief Reverses the points within a geometry
\details Generic function to reverse a geometry. It resembles the std::reverse
@@ -114,9 +176,7 @@ struct reverse<Polygon, polygon_tag>
template <typename Geometry>
inline void reverse(Geometry& geometry)
{
- concept::check<Geometry>();
-
- dispatch::reverse<Geometry>::apply(geometry);
+ resolve_variant::reverse<Geometry>::apply(geometry);
}
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/algorithms/simplify.hpp b/3party/boost/boost/geometry/algorithms/simplify.hpp
index 7e3aca4016..101b1324e1 100644
--- a/3party/boost/boost/geometry/algorithms/simplify.hpp
+++ b/3party/boost/boost/geometry/algorithms/simplify.hpp
@@ -14,28 +14,30 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_SIMPLIFY_HPP
#define BOOST_GEOMETRY_ALGORITHMS_SIMPLIFY_HPP
-
#include <cstddef>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
#include <boost/geometry/core/mutable_range.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp>
#include <boost/geometry/strategies/concepts/simplify_concept.hpp>
+#include <boost/geometry/strategies/default_strategy.hpp>
#include <boost/geometry/algorithms/clear.hpp>
#include <boost/geometry/algorithms/convert.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
+#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
namespace boost { namespace geometry
{
@@ -114,13 +116,54 @@ struct simplify_range
struct simplify_polygon
{
+private:
+
+ template
+ <
+ std::size_t Minimum,
+ typename IteratorIn,
+ typename IteratorOut,
+ typename Distance,
+ typename Strategy
+ >
+ static inline void iterate(IteratorIn begin, IteratorIn end,
+ IteratorOut it_out,
+ Distance const& max_distance, Strategy const& strategy)
+ {
+ for (IteratorIn it_in = begin; it_in != end; ++it_in, ++it_out)
+ {
+ simplify_range<Minimum>::apply(*it_in, *it_out, max_distance, strategy);
+ }
+ }
+
+ template
+ <
+ std::size_t Minimum,
+ typename InteriorRingsIn,
+ typename InteriorRingsOut,
+ typename Distance,
+ typename Strategy
+ >
+ static inline void apply_interior_rings(
+ InteriorRingsIn const& interior_rings_in,
+ InteriorRingsOut& interior_rings_out,
+ Distance const& max_distance, Strategy const& strategy)
+ {
+ traits::resize<InteriorRingsOut>::apply(interior_rings_out,
+ boost::size(interior_rings_in));
+
+ iterate<Minimum>(
+ boost::begin(interior_rings_in), boost::end(interior_rings_in),
+ boost::begin(interior_rings_out),
+ max_distance, strategy);
+ }
+
+public:
template <typename Polygon, typename Strategy, typename Distance>
static inline void apply(Polygon const& poly_in, Polygon& poly_out,
Distance const& max_distance, Strategy const& strategy)
{
- typedef typename ring_type<Polygon>::type ring_type;
-
- int const Minimum = core_detail::closure::minimum_ring_size
+ std::size_t const minimum = core_detail::closure::minimum_ring_size
<
geometry::closure<Polygon>::value
>::value;
@@ -128,28 +171,34 @@ struct simplify_polygon
// Note that if there are inner rings, and distance is too large,
// they might intersect with the outer ring in the output,
// while it didn't in the input.
- simplify_range<Minimum>::apply(exterior_ring(poly_in),
+ simplify_range<minimum>::apply(exterior_ring(poly_in),
exterior_ring(poly_out),
max_distance, strategy);
- traits::resize
- <
- typename boost::remove_reference
- <
- typename traits::interior_mutable_type<Polygon>::type
- >::type
- >::apply(interior_rings(poly_out), num_interior_rings(poly_in));
-
- typename interior_return_type<Polygon const>::type rings_in
- = interior_rings(poly_in);
- typename interior_return_type<Polygon>::type rings_out
- = interior_rings(poly_out);
- BOOST_AUTO_TPL(it_out, boost::begin(rings_out));
- for (BOOST_AUTO_TPL(it_in, boost::begin(rings_in));
- it_in != boost::end(rings_in);
- ++it_in, ++it_out)
+ apply_interior_rings<minimum>(interior_rings(poly_in),
+ interior_rings(poly_out),
+ max_distance, strategy);
+ }
+};
+
+
+template<typename Policy>
+struct simplify_multi
+{
+ template <typename MultiGeometry, typename Strategy, typename Distance>
+ static inline void apply(MultiGeometry const& multi, MultiGeometry& out,
+ Distance const& max_distance, Strategy const& strategy)
+ {
+ traits::resize<MultiGeometry>::apply(out, boost::size(multi));
+
+ typename boost::range_iterator<MultiGeometry>::type it_out
+ = boost::begin(out);
+ for (typename boost::range_iterator<MultiGeometry const>::type
+ it_in = boost::begin(multi);
+ it_in != boost::end(multi);
+ ++it_in, ++it_out)
{
- simplify_range<Minimum>::apply(*it_in, *it_out, max_distance, strategy);
+ Policy::apply(*it_in, *it_out, max_distance, strategy);
}
}
};
@@ -224,11 +273,168 @@ struct simplify_insert<Ring, ring_tag>
: detail::simplify::simplify_range_insert
{};
+template <typename MultiPoint>
+struct simplify<MultiPoint, multi_point_tag>
+ : detail::simplify::simplify_copy
+{};
+
+
+template <typename MultiLinestring>
+struct simplify<MultiLinestring, multi_linestring_tag>
+ : detail::simplify::simplify_multi<detail::simplify::simplify_range<2> >
+{};
+
+
+template <typename MultiPolygon>
+struct simplify<MultiPolygon, multi_polygon_tag>
+ : detail::simplify::simplify_multi<detail::simplify::simplify_polygon>
+{};
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
+namespace resolve_strategy
+{
+
+struct simplify
+{
+ template <typename Geometry, typename Distance, typename Strategy>
+ static inline void apply(Geometry const& geometry,
+ Geometry& out,
+ Distance const& max_distance,
+ Strategy const& strategy)
+ {
+ dispatch::simplify<Geometry>::apply(geometry, out, max_distance, strategy);
+ }
+
+ template <typename Geometry, typename Distance>
+ static inline void apply(Geometry const& geometry,
+ Geometry& out,
+ Distance const& max_distance,
+ default_strategy)
+ {
+ typedef typename point_type<Geometry>::type point_type;
+
+ typedef typename strategy::distance::services::default_strategy
+ <
+ point_tag, segment_tag, point_type
+ >::type ds_strategy_type;
+
+ typedef strategy::simplify::douglas_peucker
+ <
+ point_type, ds_strategy_type
+ > strategy_type;
+
+ BOOST_CONCEPT_ASSERT(
+ (concept::SimplifyStrategy<strategy_type, point_type>)
+ );
+
+ apply(geometry, out, max_distance, strategy_type());
+ }
+};
+
+struct simplify_insert
+{
+ template
+ <
+ typename Geometry,
+ typename OutputIterator,
+ typename Distance,
+ typename Strategy
+ >
+ static inline void apply(Geometry const& geometry,
+ OutputIterator& out,
+ Distance const& max_distance,
+ Strategy const& strategy)
+ {
+ dispatch::simplify_insert<Geometry>::apply(geometry, out, max_distance, strategy);
+ }
+
+ template <typename Geometry, typename OutputIterator, typename Distance>
+ static inline void apply(Geometry const& geometry,
+ OutputIterator& out,
+ Distance const& max_distance,
+ default_strategy)
+ {
+ typedef typename point_type<Geometry>::type point_type;
+
+ typedef typename strategy::distance::services::default_strategy
+ <
+ point_tag, segment_tag, point_type
+ >::type ds_strategy_type;
+
+ typedef strategy::simplify::douglas_peucker
+ <
+ point_type, ds_strategy_type
+ > strategy_type;
+
+ BOOST_CONCEPT_ASSERT(
+ (concept::SimplifyStrategy<strategy_type, point_type>)
+ );
+
+ apply(geometry, out, max_distance, strategy_type());
+ }
+};
+
+} // namespace resolve_strategy
+
+
+namespace resolve_variant {
+
+template <typename Geometry>
+struct simplify
+{
+ template <typename Distance, typename Strategy>
+ static inline void apply(Geometry const& geometry,
+ Geometry& out,
+ Distance const& max_distance,
+ Strategy const& strategy)
+ {
+ resolve_strategy::simplify::apply(geometry, out, max_distance, strategy);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct simplify<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename Distance, typename Strategy>
+ struct visitor: boost::static_visitor<void>
+ {
+ Distance const& m_max_distance;
+ Strategy const& m_strategy;
+
+ visitor(Distance const& max_distance, Strategy const& strategy)
+ : m_max_distance(max_distance)
+ , m_strategy(strategy)
+ {}
+
+ template <typename Geometry>
+ void operator()(Geometry const& geometry, Geometry& out) const
+ {
+ simplify<Geometry>::apply(geometry, out, m_max_distance, m_strategy);
+ }
+ };
+
+ template <typename Distance, typename Strategy>
+ static inline void
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& out,
+ Distance const& max_distance,
+ Strategy const& strategy)
+ {
+ boost::apply_visitor(
+ visitor<Distance, Strategy>(max_distance, strategy),
+ geometry,
+ out
+ );
+ }
+};
+
+} // namespace resolve_variant
+
+
/*!
\brief Simplify a geometry using a specified strategy
\ingroup simplify
@@ -252,11 +458,9 @@ inline void simplify(Geometry const& geometry, Geometry& out,
{
concept::check<Geometry>();
- BOOST_CONCEPT_ASSERT( (geometry::concept::SimplifyStrategy<Strategy>) );
-
geometry::clear(out);
- dispatch::simplify<Geometry>::apply(geometry, out, max_distance, strategy);
+ resolve_variant::simplify<Geometry>::apply(geometry, out, max_distance, strategy);
}
@@ -282,18 +486,7 @@ inline void simplify(Geometry const& geometry, Geometry& out,
{
concept::check<Geometry>();
- typedef typename point_type<Geometry>::type point_type;
- typedef typename strategy::distance::services::default_strategy
- <
- segment_tag, point_type
- >::type ds_strategy_type;
-
- typedef strategy::simplify::douglas_peucker
- <
- point_type, ds_strategy_type
- > strategy_type;
-
- simplify(geometry, out, max_distance, strategy_type());
+ simplify(geometry, out, max_distance, default_strategy());
}
@@ -319,12 +512,11 @@ namespace detail { namespace simplify
*/
template<typename Geometry, typename OutputIterator, typename Distance, typename Strategy>
inline void simplify_insert(Geometry const& geometry, OutputIterator out,
- Distance const& max_distance, Strategy const& strategy)
+ Distance const& max_distance, Strategy const& strategy)
{
concept::check<Geometry const>();
- BOOST_CONCEPT_ASSERT( (geometry::concept::SimplifyStrategy<Strategy>) );
- dispatch::simplify_insert<Geometry>::apply(geometry, out, max_distance, strategy);
+ resolve_strategy::simplify_insert::apply(geometry, out, max_distance, strategy);
}
/*!
@@ -340,25 +532,13 @@ inline void simplify_insert(Geometry const& geometry, OutputIterator out,
*/
template<typename Geometry, typename OutputIterator, typename Distance>
inline void simplify_insert(Geometry const& geometry, OutputIterator out,
- Distance const& max_distance)
+ Distance const& max_distance)
{
- typedef typename point_type<Geometry>::type point_type;
-
// Concept: output point type = point type of input geometry
concept::check<Geometry const>();
- concept::check<point_type>();
-
- typedef typename strategy::distance::services::default_strategy
- <
- segment_tag, point_type
- >::type ds_strategy_type;
-
- typedef strategy::simplify::douglas_peucker
- <
- point_type, ds_strategy_type
- > strategy_type;
+ concept::check<typename point_type<Geometry>::type>();
- dispatch::simplify_insert<Geometry>::apply(geometry, out, max_distance, strategy_type());
+ simplify_insert(geometry, out, max_distance, default_strategy());
}
}} // namespace detail::simplify
diff --git a/3party/boost/boost/geometry/algorithms/sym_difference.hpp b/3party/boost/boost/geometry/algorithms/sym_difference.hpp
index 28affc43c0..de34c9c7b0 100644
--- a/3party/boost/boost/geometry/algorithms/sym_difference.hpp
+++ b/3party/boost/boost/geometry/algorithms/sym_difference.hpp
@@ -46,11 +46,14 @@ template
typename GeometryOut,
typename Geometry1,
typename Geometry2,
+ typename RobustPolicy,
typename OutputIterator,
typename Strategy
>
inline OutputIterator sym_difference_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2, OutputIterator out,
+ Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
+ OutputIterator out,
Strategy const& strategy)
{
concept::check<Geometry1 const>();
@@ -64,7 +67,7 @@ inline OutputIterator sym_difference_insert(Geometry1 const& geometry1,
overlay_difference,
geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, true>::value
- >::apply(geometry1, geometry2, out, strategy);
+ >::apply(geometry1, geometry2, robust_policy, out, strategy);
out = geometry::dispatch::intersection_insert
<
Geometry2, Geometry1,
@@ -73,7 +76,7 @@ inline OutputIterator sym_difference_insert(Geometry1 const& geometry1,
geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value>::value,
geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value, true>::value,
geometry::detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value
- >::apply(geometry2, geometry1, out, strategy);
+ >::apply(geometry2, geometry1, robust_policy, out, strategy);
return out;
}
@@ -97,10 +100,12 @@ template
typename GeometryOut,
typename Geometry1,
typename Geometry2,
+ typename RobustPolicy,
typename OutputIterator
>
inline OutputIterator sym_difference_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2, OutputIterator out)
+ Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy, OutputIterator out)
{
concept::check<Geometry1 const>();
concept::check<Geometry2 const>();
@@ -111,10 +116,11 @@ inline OutputIterator sym_difference_insert(Geometry1 const& geometry1,
typename cs_tag<GeometryOut>::type,
Geometry1,
Geometry2,
- typename geometry::point_type<GeometryOut>::type
+ typename geometry::point_type<GeometryOut>::type,
+ RobustPolicy
> strategy_type;
- return sym_difference_insert<GeometryOut>(geometry1, geometry2, out, strategy_type());
+ return sym_difference_insert<GeometryOut>(geometry1, geometry2, robust_policy, out, strategy_type());
}
}} // namespace detail::sym_difference
@@ -150,8 +156,17 @@ inline void sym_difference(Geometry1 const& geometry1,
typedef typename boost::range_value<Collection>::type geometry_out;
concept::check<geometry_out>();
+ typedef typename geometry::rescale_overlay_policy_type
+ <
+ Geometry1,
+ Geometry2
+ >::type rescale_policy_type;
+
+ rescale_policy_type robust_policy
+ = geometry::get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
+
detail::sym_difference::sym_difference_insert<geometry_out>(
- geometry1, geometry2,
+ geometry1, geometry2, robust_policy,
std::back_inserter(output_collection));
}
diff --git a/3party/boost/boost/geometry/algorithms/touches.hpp b/3party/boost/boost/geometry/algorithms/touches.hpp
index 7d424af428..a06071d428 100644
--- a/3party/boost/boost/geometry/algorithms/touches.hpp
+++ b/3party/boost/boost/geometry/algorithms/touches.hpp
@@ -3,6 +3,10 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014, Oracle and/or its affiliates.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -11,6 +15,8 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP
#define BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP
@@ -18,70 +24,511 @@
#include <deque>
#include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/algorithms/detail/for_each_range.hpp>
+#include <boost/geometry/algorithms/detail/overlay/overlay.hpp>
#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
#include <boost/geometry/algorithms/disjoint.hpp>
#include <boost/geometry/algorithms/intersects.hpp>
#include <boost/geometry/algorithms/num_geometries.hpp>
+#include <boost/geometry/algorithms/detail/sub_range.hpp>
+#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+#include <boost/geometry/algorithms/detail/relate/relate.hpp>
namespace boost { namespace geometry
{
-namespace detail { namespace touches
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace touches
{
-template <typename Turn>
-inline bool ok_for_touch(Turn const& turn)
-{
- return turn.both(detail::overlay::operation_union)
- || turn.both(detail::overlay::operation_blocked)
- || turn.combination(detail::overlay::operation_union, detail::overlay::operation_blocked)
- ;
-}
+// Box/Box
-template <typename Turns>
-inline bool has_only_turns(Turns const& turns)
+template
+<
+ std::size_t Dimension,
+ std::size_t DimensionCount
+>
+struct box_box_loop
{
- bool has_touch = false;
- typedef typename boost::range_iterator<Turns const>::type iterator_type;
- for (iterator_type it = boost::begin(turns); it != boost::end(turns); ++it)
+ template <typename Box1, typename Box2>
+ static inline bool apply(Box1 const& b1, Box2 const& b2, bool & touch)
{
- if (it->has(detail::overlay::operation_intersection))
+ typedef typename coordinate_type<Box1>::type coordinate_type1;
+ typedef typename coordinate_type<Box2>::type coordinate_type2;
+
+ coordinate_type1 const& min1 = get<min_corner, Dimension>(b1);
+ coordinate_type1 const& max1 = get<max_corner, Dimension>(b1);
+ coordinate_type2 const& min2 = get<min_corner, Dimension>(b2);
+ coordinate_type2 const& max2 = get<max_corner, Dimension>(b2);
+
+ // TODO assert or exception?
+ //BOOST_ASSERT(min1 <= max1 && min2 <= max2);
+
+ if ( max1 < min2 || max2 < min1 )
{
return false;
}
- switch(it->method)
+ if ( max1 == min2 || max2 == min1 )
+ {
+ touch = true;
+ }
+
+ return box_box_loop
+ <
+ Dimension + 1,
+ DimensionCount
+ >::apply(b1, b2, touch);
+ }
+};
+
+template
+<
+ std::size_t DimensionCount
+>
+struct box_box_loop<DimensionCount, DimensionCount>
+{
+ template <typename Box1, typename Box2>
+ static inline bool apply(Box1 const& , Box2 const&, bool &)
+ {
+ return true;
+ }
+};
+
+struct box_box
+{
+ template <typename Box1, typename Box2>
+ static inline bool apply(Box1 const& b1, Box2 const& b2)
+ {
+ BOOST_STATIC_ASSERT((boost::is_same
+ <
+ typename geometry::coordinate_system<Box1>::type,
+ typename geometry::coordinate_system<Box2>::type
+ >::value
+ ));
+ assert_dimension_equal<Box1, Box2>();
+
+ bool touches = false;
+ bool ok = box_box_loop
+ <
+ 0,
+ dimension<Box1>::type::value
+ >::apply(b1, b2, touches);
+
+ return ok && touches;
+ }
+};
+
+// Areal/Areal
+
+struct areal_interrupt_policy
+{
+ static bool const enabled = true;
+ bool found_touch;
+ bool found_not_touch;
+
+ // dummy variable required by self_get_turn_points::get_turns
+ static bool const has_intersections = false;
+
+ inline bool result()
+ {
+ return found_touch && !found_not_touch;
+ }
+
+ inline areal_interrupt_policy()
+ : found_touch(false), found_not_touch(false)
+ {}
+
+ template <typename Range>
+ inline bool apply(Range const& range)
+ {
+ // if already rejected (temp workaround?)
+ if ( found_not_touch )
+ return true;
+
+ typedef typename boost::range_iterator<Range const>::type iterator;
+ for ( iterator it = boost::begin(range) ; it != boost::end(range) ; ++it )
+ {
+ if ( it->has(overlay::operation_intersection) )
+ {
+ found_not_touch = true;
+ return true;
+ }
+
+ switch(it->method)
+ {
+ case overlay::method_crosses:
+ found_not_touch = true;
+ return true;
+ case overlay::method_equal:
+ // Segment spatially equal means: at the right side
+ // the polygon internally overlaps. So return false.
+ found_not_touch = true;
+ return true;
+ case overlay::method_touch:
+ case overlay::method_touch_interior:
+ case overlay::method_collinear:
+ if ( ok_for_touch(*it) )
+ {
+ found_touch = true;
+ }
+ else
+ {
+ found_not_touch = true;
+ return true;
+ }
+ break;
+ case overlay::method_none :
+ case overlay::method_disjoint :
+ case overlay::method_error :
+ break;
+ }
+ }
+
+ return false;
+ }
+
+ template <typename Turn>
+ inline bool ok_for_touch(Turn const& turn)
+ {
+ return turn.both(overlay::operation_union)
+ || turn.both(overlay::operation_blocked)
+ || turn.combination(overlay::operation_union, overlay::operation_blocked)
+ ;
+ }
+};
+
+template<typename Geometry>
+struct check_each_ring_for_within
+{
+ bool has_within;
+ Geometry const& m_geometry;
+
+ inline check_each_ring_for_within(Geometry const& g)
+ : has_within(false)
+ , m_geometry(g)
+ {}
+
+ template <typename Range>
+ inline void apply(Range const& range)
+ {
+ typename geometry::point_type<Range>::type p;
+ geometry::point_on_border(p, range);
+ if ( !has_within && geometry::within(p, m_geometry) )
{
- case detail::overlay::method_crosses:
- return false;
- case detail::overlay::method_equal:
- // Segment spatially equal means: at the right side
- // the polygon internally overlaps. So return false.
- return false;
- case detail::overlay::method_touch:
- case detail::overlay::method_touch_interior:
- case detail::overlay::method_collinear:
- if (ok_for_touch(*it))
- {
- has_touch = true;
- }
- else
- {
- return false;
- }
- break;
- case detail::overlay::method_none :
- case detail::overlay::method_disjoint :
- case detail::overlay::method_error :
- break;
+ has_within = true;
}
}
- return has_touch;
+};
+
+template <typename FirstGeometry, typename SecondGeometry>
+inline bool rings_containing(FirstGeometry const& geometry1,
+ SecondGeometry const& geometry2)
+{
+ check_each_ring_for_within<FirstGeometry> checker(geometry1);
+ geometry::detail::for_each_range(geometry2, checker);
+ return checker.has_within;
}
+template <typename Geometry1, typename Geometry2>
+struct areal_areal
+{
+ static inline
+ bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
+ {
+ typedef detail::no_rescale_policy rescale_policy_type;
+ typedef typename geometry::point_type<Geometry1>::type point_type;
+ typedef detail::overlay::turn_info
+ <
+ point_type,
+ typename segment_ratio_type<point_type, rescale_policy_type>::type
+ > turn_info;
+
+ std::deque<turn_info> turns;
+ detail::touches::areal_interrupt_policy policy;
+ rescale_policy_type robust_policy;
+ boost::geometry::get_turns
+ <
+ detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
+ detail::overlay::do_reverse<geometry::point_order<Geometry2>::value>::value,
+ detail::overlay::assign_null_policy
+ >(geometry1, geometry2, robust_policy, turns, policy);
+
+ return policy.result()
+ && ! geometry::detail::touches::rings_containing(geometry1, geometry2)
+ && ! geometry::detail::touches::rings_containing(geometry2, geometry1);
+ }
+};
+
+// P/*
+
+struct use_point_in_geometry
+{
+ template <typename Point, typename Geometry>
+ static inline bool apply(Point const& point, Geometry const& geometry)
+ {
+ return detail::within::point_in_geometry(point, geometry) == 0;
+ }
+};
+
}}
+#endif // DOXYGEN_NO_DETAIL
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch {
+
+// TODO: Since CastedTags are used is Reverse needed?
+
+template
+<
+ typename Geometry1, typename Geometry2,
+ typename Tag1 = typename tag<Geometry1>::type,
+ typename Tag2 = typename tag<Geometry2>::type,
+ typename CastedTag1 = typename tag_cast<Tag1, pointlike_tag, linear_tag, areal_tag>::type,
+ typename CastedTag2 = typename tag_cast<Tag2, pointlike_tag, linear_tag, areal_tag>::type,
+ bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
+>
+struct touches
+ : not_implemented<Tag1, Tag2>
+{};
+
+// If reversal is needed, perform it
+template
+<
+ typename Geometry1, typename Geometry2,
+ typename Tag1, typename Tag2,
+ typename CastedTag1, typename CastedTag2
+>
+struct touches<Geometry1, Geometry2, Tag1, Tag2, CastedTag1, CastedTag2, true>
+ : touches<Geometry2, Geometry1, Tag2, Tag1, CastedTag2, CastedTag1, false>
+{
+ static inline bool apply(Geometry1 const& g1, Geometry2 const& g2)
+ {
+ return touches<Geometry2, Geometry1>::apply(g2, g1);
+ }
+};
+
+// P/P
+
+template <typename Geometry1, typename Geometry2, typename Tag1, typename Tag2>
+struct touches<Geometry1, Geometry2, Tag1, Tag2, pointlike_tag, pointlike_tag, false>
+{
+ static inline bool apply(Geometry1 const& , Geometry2 const& )
+ {
+ return false;
+ }
+};
+
+// P/*
+
+template <typename Point, typename Geometry, typename Tag2, typename CastedTag2>
+struct touches<Point, Geometry, point_tag, Tag2, pointlike_tag, CastedTag2, false>
+ : detail::touches::use_point_in_geometry
+{};
+
+// TODO: support touches(MPt, Linear/Areal)
+
+// Box/Box
+
+template <typename Box1, typename Box2, typename CastedTag1, typename CastedTag2>
+struct touches<Box1, Box2, box_tag, box_tag, CastedTag1, CastedTag2, false>
+ : detail::touches::box_box
+{};
+
+template <typename Box1, typename Box2>
+struct touches<Box1, Box2, box_tag, box_tag, areal_tag, areal_tag, false>
+ : detail::touches::box_box
+{};
+
+// L/L
+
+template <typename Linear1, typename Linear2, typename Tag1, typename Tag2>
+struct touches<Linear1, Linear2, Tag1, Tag2, linear_tag, linear_tag, false>
+ : detail::relate::relate_base
+ <
+ detail::relate::static_mask_touches_type,
+ Linear1,
+ Linear2
+ >
+{};
+
+// L/A
+
+template <typename Linear, typename Areal, typename Tag1, typename Tag2>
+struct touches<Linear, Areal, Tag1, Tag2, linear_tag, areal_tag, false>
+ : detail::relate::relate_base
+ <
+ detail::relate::static_mask_touches_type,
+ Linear,
+ Areal
+ >
+{};
+
+// A/L
+template <typename Linear, typename Areal, typename Tag1, typename Tag2>
+struct touches<Linear, Areal, Tag1, Tag2, linear_tag, areal_tag, true>
+ : detail::relate::relate_base
+ <
+ detail::relate::static_mask_touches_type,
+ Areal,
+ Linear
+ >
+{};
+
+// A/A
+
+template <typename Areal1, typename Areal2, typename Tag1, typename Tag2>
+struct touches<Areal1, Areal2, Tag1, Tag2, areal_tag, areal_tag, false>
+ : detail::touches::areal_areal<Areal1, Areal2>
+{};
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_variant {
+
+template <typename Geometry1, typename Geometry2>
+struct touches
+{
+ static bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
+ {
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2 const>();
+
+ return dispatch::touches<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct touches<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ struct visitor: boost::static_visitor<bool>
+ {
+ Geometry2 const& m_geometry2;
+
+ visitor(Geometry2 const& geometry2): m_geometry2(geometry2) {}
+
+ template <typename Geometry1>
+ bool operator()(Geometry1 const& geometry1) const
+ {
+ return touches<Geometry1, Geometry2>::apply(geometry1, m_geometry2);
+ }
+ };
+
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2 const& geometry2)
+ {
+ return boost::apply_visitor(visitor(geometry2), geometry1);
+ }
+};
+
+template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct touches<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: boost::static_visitor<bool>
+ {
+ Geometry1 const& m_geometry1;
+
+ visitor(Geometry1 const& geometry1): m_geometry1(geometry1) {}
+
+ template <typename Geometry2>
+ bool operator()(Geometry2 const& geometry2) const
+ {
+ return touches<Geometry1, Geometry2>::apply(m_geometry1, geometry2);
+ }
+ };
+
+ static inline bool
+ apply(Geometry1 const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2)
+ {
+ return boost::apply_visitor(visitor(geometry1), geometry2);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T1),
+ BOOST_VARIANT_ENUM_PARAMS(typename T2)>
+struct touches<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> >
+{
+ struct visitor: boost::static_visitor<bool>
+ {
+ template <typename Geometry1, typename Geometry2>
+ bool operator()(Geometry1 const& geometry1,
+ Geometry2 const& geometry2) const
+ {
+ return touches<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ }
+ };
+
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2)
+ {
+ return boost::apply_visitor(visitor(), geometry1, geometry2);
+ }
+};
+
+template <typename Geometry>
+struct self_touches
+{
+ static bool apply(Geometry const& geometry)
+ {
+ concept::check<Geometry const>();
+
+ typedef detail::no_rescale_policy rescale_policy_type;
+ typedef typename geometry::point_type<Geometry>::type point_type;
+ typedef detail::overlay::turn_info
+ <
+ point_type,
+ typename segment_ratio_type<point_type, rescale_policy_type>::type
+ > turn_info;
+
+ typedef detail::overlay::get_turn_info
+ <
+ detail::overlay::assign_null_policy
+ > policy_type;
+
+ std::deque<turn_info> turns;
+ detail::touches::areal_interrupt_policy policy;
+ rescale_policy_type robust_policy;
+ detail::self_get_turn_points::get_turns
+ <
+ policy_type
+ >::apply(geometry, robust_policy, turns, policy);
+
+ return policy.result();
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct self_touches<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: boost::static_visitor<bool>
+ {
+ template <typename Geometry>
+ bool operator()(Geometry const& geometry) const
+ {
+ return self_touches<Geometry>::apply(geometry);
+ }
+ };
+
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry)
+ {
+ return boost::apply_visitor(visitor(), geometry);
+ }
+};
+
+} // namespace resolve_variant
+
/*!
\brief \brief_check{has at least one touching point (self-tangency)}
@@ -99,32 +546,7 @@ inline bool has_only_turns(Turns const& turns)
template <typename Geometry>
inline bool touches(Geometry const& geometry)
{
- concept::check<Geometry const>();
-
- typedef detail::overlay::turn_info
- <
- typename geometry::point_type<Geometry>::type
- > turn_info;
-
- typedef detail::overlay::get_turn_info
- <
- typename point_type<Geometry>::type,
- typename point_type<Geometry>::type,
- turn_info,
- detail::overlay::assign_null_policy
- > policy_type;
-
- std::deque<turn_info> turns;
- detail::self_get_turn_points::no_interrupt_policy policy;
- detail::self_get_turn_points::get_turns
- <
- Geometry,
- std::deque<turn_info>,
- policy_type,
- detail::self_get_turn_points::no_interrupt_policy
- >::apply(geometry, turns, policy);
-
- return detail::touches::has_only_turns(turns);
+ return resolve_variant::self_touches<Geometry>::apply(geometry);
}
@@ -143,39 +565,10 @@ inline bool touches(Geometry const& geometry)
template <typename Geometry1, typename Geometry2>
inline bool touches(Geometry1 const& geometry1, Geometry2 const& geometry2)
{
- concept::check<Geometry1 const>();
- concept::check<Geometry2 const>();
-
-
- typedef detail::overlay::turn_info
- <
- typename geometry::point_type<Geometry1>::type
- > turn_info;
-
- typedef detail::overlay::get_turn_info
- <
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type,
- turn_info,
- detail::overlay::assign_null_policy
- > policy_type;
-
- std::deque<turn_info> turns;
- detail::get_turns::no_interrupt_policy policy;
- boost::geometry::get_turns
- <
- false, false,
- detail::overlay::assign_null_policy
- >(geometry1, geometry2, turns, policy);
-
- return detail::touches::has_only_turns(turns)
- && ! geometry::detail::disjoint::rings_containing(geometry1, geometry2)
- && ! geometry::detail::disjoint::rings_containing(geometry2, geometry1)
- ;
+ return resolve_variant::touches<Geometry1, Geometry2>::apply(geometry1, geometry2);
}
-
}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP
diff --git a/3party/boost/boost/geometry/algorithms/transform.hpp b/3party/boost/boost/geometry/algorithms/transform.hpp
index 52d195fe89..1d6e8d0a35 100644
--- a/3party/boost/boost/geometry/algorithms/transform.hpp
+++ b/3party/boost/boost/geometry/algorithms/transform.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -18,10 +19,14 @@
#include <iterator>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/algorithms/assign.hpp>
#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/algorithms/num_interior_rings.hpp>
#include <boost/geometry/core/cs.hpp>
@@ -30,7 +35,9 @@
#include <boost/geometry/core/mutable_range.hpp>
#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/strategies/default_strategy.hpp>
#include <boost/geometry/strategies/transform.hpp>
@@ -149,8 +156,6 @@ struct transform_polygon
static inline bool apply(Polygon1 const& poly1, Polygon2& poly2,
Strategy const& strategy)
{
- typedef typename ring_type<Polygon1>::type ring1_type;
- typedef typename ring_type<Polygon2>::type ring2_type;
typedef typename point_type<Polygon2>::type point2_type;
geometry::clear(poly2);
@@ -170,16 +175,20 @@ struct transform_polygon
>::type
>::apply(interior_rings(poly2), num_interior_rings(poly1));
- typename interior_return_type<Polygon1 const>::type rings1
- = interior_rings(poly1);
- typename interior_return_type<Polygon2>::type rings2
- = interior_rings(poly2);
- BOOST_AUTO_TPL(it1, boost::begin(rings1));
- BOOST_AUTO_TPL(it2, boost::begin(rings2));
- for ( ; it1 != boost::end(interior_rings(poly1)); ++it1, ++it2)
+ typename interior_return_type<Polygon1 const>::type
+ rings1 = interior_rings(poly1);
+ typename interior_return_type<Polygon2>::type
+ rings2 = interior_rings(poly2);
+
+ typename detail::interior_iterator<Polygon1 const>::type
+ it1 = boost::begin(rings1);
+ typename detail::interior_iterator<Polygon2>::type
+ it2 = boost::begin(rings2);
+ for ( ; it1 != boost::end(rings1); ++it1, ++it2)
{
- if (!transform_range_out<point2_type>(*it1,
- std::back_inserter(*it2), strategy))
+ if ( ! transform_range_out<point2_type>(*it1,
+ std::back_inserter(*it2),
+ strategy) )
{
return false;
}
@@ -221,6 +230,36 @@ struct transform_range
}
};
+
+/*!
+ \brief Is able to transform any multi-geometry, calling the single-version as policy
+*/
+template <typename Policy>
+struct transform_multi
+{
+ template <typename Multi1, typename Multi2, typename S>
+ static inline bool apply(Multi1 const& multi1, Multi2& multi2, S const& strategy)
+ {
+ traits::resize<Multi2>::apply(multi2, boost::size(multi1));
+
+ typename boost::range_iterator<Multi1 const>::type it1
+ = boost::begin(multi1);
+ typename boost::range_iterator<Multi2>::type it2
+ = boost::begin(multi2);
+
+ for (; it1 != boost::end(multi1); ++it1, ++it2)
+ {
+ if (! Policy::apply(*it1, *it2, strategy))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+};
+
+
}} // namespace detail::transform
#endif // DOXYGEN_NO_DETAIL
@@ -278,11 +317,119 @@ struct transform<Segment1, Segment2, segment_tag, segment_tag>
{
};
+template <typename Multi1, typename Multi2>
+struct transform
+ <
+ Multi1, Multi2,
+ multi_tag, multi_tag
+ >
+ : detail::transform::transform_multi
+ <
+ dispatch::transform
+ <
+ typename boost::range_value<Multi1>::type,
+ typename boost::range_value<Multi2>::type
+ >
+ >
+{};
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
+namespace resolve_strategy {
+
+struct transform
+{
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2& geometry2,
+ Strategy const& strategy)
+ {
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2>();
+
+ return dispatch::transform<Geometry1, Geometry2>::apply(
+ geometry1,
+ geometry2,
+ strategy
+ );
+ }
+
+ template <typename Geometry1, typename Geometry2>
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2& geometry2,
+ default_strategy)
+ {
+ return apply(
+ geometry1,
+ geometry2,
+ typename detail::transform::select_strategy<Geometry1, Geometry2>::type()
+ );
+ }
+};
+
+} // namespace resolve_strategy
+
+
+namespace resolve_variant {
+
+template <typename Geometry1, typename Geometry2>
+struct transform
+{
+ template <typename Strategy>
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2& geometry2,
+ Strategy const& strategy)
+ {
+ return resolve_strategy::transform::apply(
+ geometry1,
+ geometry2,
+ strategy
+ );
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct transform<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ template <typename Strategy>
+ struct visitor: static_visitor<bool>
+ {
+ Geometry2& m_geometry2;
+ Strategy const& m_strategy;
+
+ visitor(Geometry2& geometry2, Strategy const& strategy)
+ : m_geometry2(geometry2)
+ , m_strategy(strategy)
+ {}
+
+ template <typename Geometry1>
+ inline bool operator()(Geometry1 const& geometry1) const
+ {
+ return transform<Geometry1, Geometry2>::apply(
+ geometry1,
+ m_geometry2,
+ m_strategy
+ );
+ }
+ };
+
+ template <typename Strategy>
+ static inline bool apply(
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2& geometry2,
+ Strategy const& strategy
+ )
+ {
+ return apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
+ }
+};
+
+} // namespace resolve_variant
+
+
/*!
\brief Transforms from one geometry to another geometry \brief_strategy
\ingroup transform
@@ -302,12 +449,8 @@ template <typename Geometry1, typename Geometry2, typename Strategy>
inline bool transform(Geometry1 const& geometry1, Geometry2& geometry2,
Strategy const& strategy)
{
- concept::check<Geometry1 const>();
- concept::check<Geometry2>();
-
- typedef dispatch::transform<Geometry1, Geometry2> transform_type;
-
- return transform_type::apply(geometry1, geometry2, strategy);
+ return resolve_variant::transform<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2, strategy);
}
@@ -325,11 +468,7 @@ inline bool transform(Geometry1 const& geometry1, Geometry2& geometry2,
template <typename Geometry1, typename Geometry2>
inline bool transform(Geometry1 const& geometry1, Geometry2& geometry2)
{
- concept::check<Geometry1 const>();
- concept::check<Geometry2>();
-
- typename detail::transform::select_strategy<Geometry1, Geometry2>::type strategy;
- return transform(geometry1, geometry2, strategy);
+ return transform(geometry1, geometry2, default_strategy());
}
diff --git a/3party/boost/boost/geometry/algorithms/union.hpp b/3party/boost/boost/geometry/algorithms/union.hpp
index 479f556a19..bfd0ab3ba1 100644
--- a/3party/boost/boost/geometry/algorithms/union.hpp
+++ b/3party/boost/boost/geometry/algorithms/union.hpp
@@ -1,6 +1,11 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -18,6 +23,10 @@
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/algorithms/detail/overlay/overlay.hpp>
+#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/linear_linear.hpp>
+#include <boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp>
namespace boost { namespace geometry
@@ -51,26 +60,29 @@ template
<
typename Geometry1, typename Geometry2, typename GeometryOut,
typename TagIn1, typename TagIn2, typename TagOut,
+ bool Areal1, bool Areal2, bool ArealOut,
bool Reverse1, bool Reverse2, bool ReverseOut
>
struct union_insert
<
Geometry1, Geometry2, GeometryOut,
TagIn1, TagIn2, TagOut,
- true, true, true,
+ Areal1, Areal2, ArealOut,
Reverse1, Reverse2, ReverseOut,
true
>: union_insert<Geometry2, Geometry1, GeometryOut>
{
- template <typename OutputIterator, typename Strategy>
+ template <typename RobustPolicy, typename OutputIterator, typename Strategy>
static inline OutputIterator apply(Geometry1 const& g1,
- Geometry2 const& g2, OutputIterator out,
+ Geometry2 const& g2,
+ RobustPolicy const& robust_policy,
+ OutputIterator out,
Strategy const& strategy)
{
return union_insert
<
Geometry2, Geometry1, GeometryOut
- >::apply(g2, g1, out, strategy);
+ >::apply(g2, g1, robust_policy, out, strategy);
}
};
@@ -93,6 +105,73 @@ struct union_insert
{};
+// dispatch for union of non-areal geometries
+template
+<
+ typename Geometry1, typename Geometry2, typename GeometryOut,
+ typename TagIn1, typename TagIn2, typename TagOut,
+ bool Reverse1, bool Reverse2, bool ReverseOut
+>
+struct union_insert
+ <
+ Geometry1, Geometry2, GeometryOut,
+ TagIn1, TagIn2, TagOut,
+ false, false, false,
+ Reverse1, Reverse2, ReverseOut,
+ false
+ > : union_insert
+ <
+ Geometry1, Geometry2, GeometryOut,
+ typename tag_cast<TagIn1, pointlike_tag, linear_tag>::type,
+ typename tag_cast<TagIn2, pointlike_tag, linear_tag>::type,
+ TagOut,
+ false, false, false,
+ Reverse1, Reverse2, ReverseOut,
+ false
+ >
+{};
+
+
+// dispatch for union of linear geometries
+template
+<
+ typename Linear1, typename Linear2, typename LineStringOut,
+ bool Reverse1, bool Reverse2, bool ReverseOut
+>
+struct union_insert
+ <
+ Linear1, Linear2, LineStringOut,
+ linear_tag, linear_tag, linestring_tag,
+ false, false, false,
+ Reverse1, Reverse2, ReverseOut,
+ false
+ > : detail::overlay::linear_linear_linestring
+ <
+ Linear1, Linear2, LineStringOut, overlay_union
+ >
+{};
+
+
+// dispatch for point-like geometries
+template
+<
+ typename PointLike1, typename PointLike2, typename PointOut,
+ bool Reverse1, bool Reverse2, bool ReverseOut
+>
+struct union_insert
+ <
+ PointLike1, PointLike2, PointOut,
+ pointlike_tag, pointlike_tag, point_tag,
+ false, false, false,
+ Reverse1, Reverse2, ReverseOut,
+ false
+ > : detail::overlay::union_pointlike_pointlike_point
+ <
+ PointLike1, PointLike2, PointOut
+ >
+{};
+
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
@@ -104,18 +183,20 @@ template
<
typename GeometryOut,
typename Geometry1, typename Geometry2,
+ typename RobustPolicy,
typename OutputIterator,
typename Strategy
>
inline OutputIterator insert(Geometry1 const& geometry1,
Geometry2 const& geometry2,
+ RobustPolicy const& robust_policy,
OutputIterator out,
Strategy const& strategy)
{
return dispatch::union_insert
<
Geometry1, Geometry2, GeometryOut
- >::apply(geometry1, geometry2, out, strategy);
+ >::apply(geometry1, geometry2, robust_policy, out, strategy);
}
/*!
@@ -153,7 +234,11 @@ inline OutputIterator union_insert(Geometry1 const& geometry1,
concept::check<Geometry2 const>();
concept::check<GeometryOut>();
- return detail::union_::insert<GeometryOut>(geometry1, geometry2, out, strategy);
+ typedef typename Strategy::rescale_policy_type rescale_policy_type;
+ rescale_policy_type robust_policy
+ = geometry::get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
+
+ return detail::union_::insert<GeometryOut>(geometry1, geometry2, robust_policy, out, strategy);
}
/*!
@@ -185,12 +270,19 @@ inline OutputIterator union_insert(Geometry1 const& geometry1,
concept::check<Geometry2 const>();
concept::check<GeometryOut>();
+ typedef typename geometry::rescale_overlay_policy_type
+ <
+ Geometry1,
+ Geometry2
+ >::type rescale_policy_type;
+
typedef strategy_intersection
<
typename cs_tag<GeometryOut>::type,
Geometry1,
Geometry2,
- typename geometry::point_type<GeometryOut>::type
+ typename geometry::point_type<GeometryOut>::type,
+ rescale_policy_type
> strategy;
return union_insert<GeometryOut>(geometry1, geometry2, out, strategy());
diff --git a/3party/boost/boost/geometry/algorithms/unique.hpp b/3party/boost/boost/geometry/algorithms/unique.hpp
index e11dc13c49..fed9f8af4b 100644
--- a/3party/boost/boost/geometry/algorithms/unique.hpp
+++ b/3party/boost/boost/geometry/algorithms/unique.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -17,10 +18,12 @@
#include <algorithm>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/core/interior_rings.hpp>
#include <boost/geometry/core/mutable_range.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/policies/compare.hpp>
@@ -57,13 +60,13 @@ struct polygon_unique
template <typename Polygon, typename ComparePolicy>
static inline void apply(Polygon& polygon, ComparePolicy const& policy)
{
- typedef typename geometry::ring_type<Polygon>::type ring_type;
-
range_unique::apply(exterior_ring(polygon), policy);
- typename interior_return_type<Polygon>::type rings
- = interior_rings(polygon);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon>::type
+ rings = interior_rings(polygon);
+
+ for (typename detail::interior_iterator<Polygon>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
range_unique::apply(*it, policy);
}
@@ -71,6 +74,22 @@ struct polygon_unique
};
+template <typename Policy>
+struct multi_unique
+{
+ template <typename MultiGeometry, typename ComparePolicy>
+ static inline void apply(MultiGeometry& multi, ComparePolicy const& compare)
+ {
+ for (typename boost::range_iterator<MultiGeometry>::type
+ it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it)
+ {
+ Policy::apply(*it, compare);
+ }
+ }
+};
+
}} // namespace detail::unique
#endif // DOXYGEN_NO_DETAIL
@@ -113,6 +132,24 @@ struct unique<Polygon, polygon_tag>
{};
+// For points, unique is not applicable and does nothing
+// (Note that it is not "spatially unique" but that it removes duplicate coordinates,
+// like std::unique does). Spatially unique is "dissolve" which can (or will be)
+// possible for multi-points as well, removing points at the same location.
+
+
+template <typename MultiLineString>
+struct unique<MultiLineString, multi_linestring_tag>
+ : detail::unique::multi_unique<detail::unique::range_unique>
+{};
+
+
+template <typename MultiPolygon>
+struct unique<MultiPolygon, multi_polygon_tag>
+ : detail::unique::multi_unique<detail::unique::polygon_unique>
+{};
+
+
} // namespace dispatch
#endif
diff --git a/3party/boost/boost/geometry/algorithms/within.hpp b/3party/boost/boost/geometry/algorithms/within.hpp
index b024bd9fa6..f66b1ed1c6 100644
--- a/3party/boost/boost/geometry/algorithms/within.hpp
+++ b/3party/boost/boost/geometry/algorithms/within.hpp
@@ -4,6 +4,9 @@
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -11,6 +14,8 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_ALGORITHMS_WITHIN_HPP
#define BOOST_GEOMETRY_ALGORITHMS_WITHIN_HPP
@@ -19,7 +24,9 @@
#include <boost/concept_check.hpp>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/algorithms/make.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
@@ -35,132 +42,47 @@
#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/strategies/within.hpp>
#include <boost/geometry/strategies/concepts/within_concept.hpp>
+#include <boost/geometry/strategies/default_strategy.hpp>
+#include <boost/geometry/strategies/within.hpp>
#include <boost/geometry/util/math.hpp>
#include <boost/geometry/util/order_as_direction.hpp>
#include <boost/geometry/views/closeable_view.hpp>
#include <boost/geometry/views/reversible_view.hpp>
+#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
+#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
+#include <deque>
namespace boost { namespace geometry
{
#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace within
-{
+namespace detail { namespace within {
-
-template
-<
- typename Point,
- typename Ring,
- iterate_direction Direction,
- closure_selector Closure,
- typename Strategy
->
-struct point_in_ring
+struct use_point_in_geometry
{
- BOOST_CONCEPT_ASSERT( (geometry::concept::WithinStrategyPolygonal<Strategy>) );
-
- static inline int apply(Point const& point, Ring const& ring,
- Strategy const& strategy)
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
{
- boost::ignore_unused_variable_warning(strategy);
- if (int(boost::size(ring))
- < core_detail::closure::minimum_ring_size<Closure>::value)
- {
- return -1;
- }
-
- typedef typename reversible_view<Ring const, Direction>::type rev_view_type;
- typedef typename closeable_view
- <
- rev_view_type const, Closure
- >::type cl_view_type;
- typedef typename boost::range_iterator<cl_view_type const>::type iterator_type;
-
- rev_view_type rev_view(ring);
- cl_view_type view(rev_view);
- typename Strategy::state_type state;
- iterator_type it = boost::begin(view);
- iterator_type end = boost::end(view);
-
- bool stop = false;
- for (iterator_type previous = it++;
- it != end && ! stop;
- ++previous, ++it)
- {
- if (! strategy.apply(point, *previous, *it, state))
- {
- stop = true;
- }
- }
-
- return strategy.result(state);
+ return detail::within::point_in_geometry(geometry1, geometry2, strategy) == 1;
}
};
-
-// Polygon: in exterior ring, and if so, not within interior ring(s)
-template
-<
- typename Point,
- typename Polygon,
- iterate_direction Direction,
- closure_selector Closure,
- typename Strategy
->
-struct point_in_polygon
+struct use_relate
{
- BOOST_CONCEPT_ASSERT( (geometry::concept::WithinStrategyPolygonal<Strategy>) );
-
- static inline int apply(Point const& point, Polygon const& poly,
- Strategy const& strategy)
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& /*strategy*/)
{
- int const code = point_in_ring
- <
- Point,
- typename ring_type<Polygon>::type,
- Direction,
- Closure,
- Strategy
- >::apply(point, exterior_ring(poly), strategy);
-
- if (code == 1)
- {
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(poly);
- for (BOOST_AUTO_TPL(it, boost::begin(rings));
- it != boost::end(rings);
- ++it)
- {
- int const interior_code = point_in_ring
- <
- Point,
- typename ring_type<Polygon>::type,
- Direction,
- Closure,
- Strategy
- >::apply(point, *it, strategy);
-
- if (interior_code != -1)
- {
- // If 0, return 0 (touch)
- // If 1 (inside hole) return -1 (outside polygon)
- // If -1 (outside hole) check other holes if any
- return -interior_code;
- }
- }
- }
- return code;
+ return Strategy::apply(geometry1, geometry2);
}
};
}} // namespace detail::within
#endif // DOXYGEN_NO_DETAIL
-
#ifndef DOXYGEN_NO_DISPATCH
namespace dispatch
{
@@ -172,7 +94,8 @@ template
typename Tag1 = typename tag<Geometry1>::type,
typename Tag2 = typename tag<Geometry2>::type
>
-struct within: not_implemented<Tag1, Tag2>
+struct within
+ : not_implemented<Tag1, Tag2>
{};
@@ -199,44 +122,344 @@ struct within<Box1, Box2, box_tag, box_tag>
}
};
+// P/P
+
+template <typename Point1, typename Point2>
+struct within<Point1, Point2, point_tag, point_tag>
+ : public detail::within::use_point_in_geometry
+{};
+
+template <typename Point, typename MultiPoint>
+struct within<Point, MultiPoint, point_tag, multi_point_tag>
+ : public detail::within::use_point_in_geometry
+{};
+
+// P/L
+
+template <typename Point, typename Segment>
+struct within<Point, Segment, point_tag, segment_tag>
+ : public detail::within::use_point_in_geometry
+{};
+
+template <typename Point, typename Linestring>
+struct within<Point, Linestring, point_tag, linestring_tag>
+ : public detail::within::use_point_in_geometry
+{};
+
+template <typename Point, typename MultiLinestring>
+struct within<Point, MultiLinestring, point_tag, multi_linestring_tag>
+ : public detail::within::use_point_in_geometry
+{};
+// P/A
template <typename Point, typename Ring>
struct within<Point, Ring, point_tag, ring_tag>
+ : public detail::within::use_point_in_geometry
+{};
+
+template <typename Point, typename Polygon>
+struct within<Point, Polygon, point_tag, polygon_tag>
+ : public detail::within::use_point_in_geometry
+{};
+
+template <typename Point, typename MultiPolygon>
+struct within<Point, MultiPolygon, point_tag, multi_polygon_tag>
+ : public detail::within::use_point_in_geometry
+{};
+
+// L/L
+
+template <typename Linestring1, typename Linestring2>
+struct within<Linestring1, Linestring2, linestring_tag, linestring_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename Linestring, typename MultiLinestring>
+struct within<Linestring, MultiLinestring, linestring_tag, multi_linestring_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename MultiLinestring, typename Linestring>
+struct within<MultiLinestring, Linestring, multi_linestring_tag, linestring_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename MultiLinestring1, typename MultiLinestring2>
+struct within<MultiLinestring1, MultiLinestring2, multi_linestring_tag, multi_linestring_tag>
+ : public detail::within::use_relate
+{};
+
+// L/A
+
+template <typename Linestring, typename Ring>
+struct within<Linestring, Ring, linestring_tag, ring_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename MultiLinestring, typename Ring>
+struct within<MultiLinestring, Ring, multi_linestring_tag, ring_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename Linestring, typename Polygon>
+struct within<Linestring, Polygon, linestring_tag, polygon_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename MultiLinestring, typename Polygon>
+struct within<MultiLinestring, Polygon, multi_linestring_tag, polygon_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename Linestring, typename MultiPolygon>
+struct within<Linestring, MultiPolygon, linestring_tag, multi_polygon_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename MultiLinestring, typename MultiPolygon>
+struct within<MultiLinestring, MultiPolygon, multi_linestring_tag, multi_polygon_tag>
+ : public detail::within::use_relate
+{};
+
+// A/A
+
+template <typename Ring1, typename Ring2>
+struct within<Ring1, Ring2, ring_tag, ring_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename Ring, typename Polygon>
+struct within<Ring, Polygon, ring_tag, polygon_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename Polygon, typename Ring>
+struct within<Polygon, Ring, polygon_tag, ring_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename Polygon1, typename Polygon2>
+struct within<Polygon1, Polygon2, polygon_tag, polygon_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename Ring, typename MultiPolygon>
+struct within<Ring, MultiPolygon, ring_tag, multi_polygon_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename MultiPolygon, typename Ring>
+struct within<MultiPolygon, Ring, multi_polygon_tag, ring_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename Polygon, typename MultiPolygon>
+struct within<Polygon, MultiPolygon, polygon_tag, multi_polygon_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename MultiPolygon, typename Polygon>
+struct within<MultiPolygon, Polygon, multi_polygon_tag, polygon_tag>
+ : public detail::within::use_relate
+{};
+
+template <typename MultiPolygon1, typename MultiPolygon2>
+struct within<MultiPolygon1, MultiPolygon2, multi_polygon_tag, multi_polygon_tag>
+ : public detail::within::use_relate
+{};
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+namespace resolve_strategy
{
- template <typename Strategy>
- static inline bool apply(Point const& point, Ring const& ring, Strategy const& strategy)
+
+struct within
+{
+ template <typename Geometry1, typename Geometry2, typename Strategy>
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
{
- return detail::within::point_in_ring
+ concept::within::check
<
- Point,
- Ring,
- order_as_direction<geometry::point_order<Ring>::value>::value,
- geometry::closure<Ring>::value,
+ typename tag<Geometry1>::type,
+ typename tag<Geometry2>::type,
+ typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
Strategy
- >::apply(point, ring, strategy) == 1;
+ >();
+
+ return dispatch::within<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
+ }
+
+ template <typename Geometry1, typename Geometry2>
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ default_strategy)
+ {
+ typedef typename point_type<Geometry1>::type point_type1;
+ typedef typename point_type<Geometry2>::type point_type2;
+
+ typedef typename strategy::within::services::default_strategy
+ <
+ typename tag<Geometry1>::type,
+ typename tag<Geometry2>::type,
+ typename tag<Geometry1>::type,
+ typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type1>::type, spherical_tag
+ >::type,
+ typename tag_cast
+ <
+ typename cs_tag<point_type2>::type, spherical_tag
+ >::type,
+ Geometry1,
+ Geometry2
+ >::type strategy_type;
+
+ return apply(geometry1, geometry2, strategy_type());
}
};
-template <typename Point, typename Polygon>
-struct within<Point, Polygon, point_tag, polygon_tag>
+} // namespace resolve_strategy
+
+
+namespace resolve_variant
+{
+
+template <typename Geometry1, typename Geometry2>
+struct within
{
template <typename Strategy>
- static inline bool apply(Point const& point, Polygon const& polygon, Strategy const& strategy)
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
{
- return detail::within::point_in_polygon
- <
- Point,
- Polygon,
- order_as_direction<geometry::point_order<Polygon>::value>::value,
- geometry::closure<Polygon>::value,
- Strategy
- >::apply(point, polygon, strategy) == 1;
+ concept::check<Geometry1 const>();
+ concept::check<Geometry2 const>();
+ assert_dimension_equal<Geometry1, Geometry2>();
+
+ return resolve_strategy::within::apply(geometry1,
+ geometry2,
+ strategy);
}
};
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct within<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ template <typename Strategy>
+ struct visitor: boost::static_visitor<bool>
+ {
+ Geometry2 const& m_geometry2;
+ Strategy const& m_strategy;
+
+ visitor(Geometry2 const& geometry2, Strategy const& strategy):
+ m_geometry2(geometry2),
+ m_strategy(strategy)
+ {}
+
+ template <typename Geometry1>
+ bool operator()(Geometry1 const& geometry1) const
+ {
+ return within<Geometry1, Geometry2>::apply(geometry1,
+ m_geometry2,
+ m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2 const& geometry2,
+ Strategy const& strategy)
+ {
+ return boost::apply_visitor(
+ visitor<Strategy>(geometry2, strategy),
+ geometry1
+ );
+ }
+};
+
+template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct within<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename Strategy>
+ struct visitor: boost::static_visitor<bool>
+ {
+ Geometry1 const& m_geometry1;
+ Strategy const& m_strategy;
+
+ visitor(Geometry1 const& geometry1, Strategy const& strategy):
+ m_geometry1(geometry1),
+ m_strategy(strategy)
+ {}
+
+ template <typename Geometry2>
+ bool operator()(Geometry2 const& geometry2) const
+ {
+ return within<Geometry1, Geometry2>::apply(m_geometry1,
+ geometry2,
+ m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline bool
+ apply(Geometry1 const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
+ Strategy const& strategy)
+ {
+ return boost::apply_visitor(
+ visitor<Strategy>(geometry1, strategy),
+ geometry2
+ );
+ }
+};
+
+template <
+ BOOST_VARIANT_ENUM_PARAMS(typename T1),
+ BOOST_VARIANT_ENUM_PARAMS(typename T2)
+>
+struct within<
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
+>
+{
+ template <typename Strategy>
+ struct visitor: boost::static_visitor<bool>
+ {
+ Strategy const& m_strategy;
+
+ visitor(Strategy const& strategy): m_strategy(strategy) {}
+
+ template <typename Geometry1, typename Geometry2>
+ bool operator()(Geometry1 const& geometry1,
+ Geometry2 const& geometry2) const
+ {
+ return within<Geometry1, Geometry2>::apply(geometry1,
+ geometry2,
+ m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline bool
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
+ Strategy const& strategy)
+ {
+ return boost::apply_visitor(
+ visitor<Strategy>(strategy),
+ geometry1, geometry2
+ );
+ }
+};
+
+}
/*!
@@ -263,36 +486,11 @@ struct within<Point, Polygon, point_tag, polygon_tag>
template<typename Geometry1, typename Geometry2>
inline bool within(Geometry1 const& geometry1, Geometry2 const& geometry2)
{
- concept::check<Geometry1 const>();
- concept::check<Geometry2 const>();
- assert_dimension_equal<Geometry1, Geometry2>();
-
- typedef typename point_type<Geometry1>::type point_type1;
- typedef typename point_type<Geometry2>::type point_type2;
-
- typedef typename strategy::within::services::default_strategy
+ return resolve_variant::within
<
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- typename tag<Geometry1>::type,
- typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
- typename tag_cast
- <
- typename cs_tag<point_type1>::type, spherical_tag
- >::type,
- typename tag_cast
- <
- typename cs_tag<point_type2>::type, spherical_tag
- >::type,
Geometry1,
Geometry2
- >::type strategy_type;
-
- return dispatch::within
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, strategy_type());
+ >::apply(geometry1, geometry2, default_strategy());
}
/*!
@@ -325,18 +523,7 @@ template<typename Geometry1, typename Geometry2, typename Strategy>
inline bool within(Geometry1 const& geometry1, Geometry2 const& geometry2,
Strategy const& strategy)
{
- concept::within::check
- <
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
- Strategy
- >();
- concept::check<Geometry1 const>();
- concept::check<Geometry2 const>();
- assert_dimension_equal<Geometry1, Geometry2>();
-
- return dispatch::within
+ return resolve_variant::within
<
Geometry1,
Geometry2
diff --git a/3party/boost/boost/geometry/arithmetic/arithmetic.hpp b/3party/boost/boost/geometry/arithmetic/arithmetic.hpp
index 6479ecc4a6..6eb31f488e 100644
--- a/3party/boost/boost/geometry/arithmetic/arithmetic.hpp
+++ b/3party/boost/boost/geometry/arithmetic/arithmetic.hpp
@@ -117,6 +117,7 @@ struct point_assignment
\brief Adds the same value to each coordinate of a point
\ingroup arithmetic
\details
+ \tparam Point \tparam_point
\param p point
\param value value to add
*/
@@ -133,13 +134,15 @@ inline void add_value(Point& p, typename detail::param<Point>::type value)
\ingroup arithmetic
\details The coordinates of the second point will be added to those of the first point.
The second point is not modified.
+ \tparam Point1 \tparam_point
+ \tparam Point2 \tparam_point
\param p1 first point
\param p2 second point
*/
template <typename Point1, typename Point2>
inline void add_point(Point1& p1, Point2 const& p2)
{
- BOOST_CONCEPT_ASSERT( (concept::Point<Point2>) );
+ BOOST_CONCEPT_ASSERT( (concept::Point<Point1>) );
BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
for_each_coordinate(p1, detail::point_operation<Point2, std::plus>(p2));
@@ -149,6 +152,7 @@ inline void add_point(Point1& p1, Point2 const& p2)
\brief Subtracts the same value to each coordinate of a point
\ingroup arithmetic
\details
+ \tparam Point \tparam_point
\param p point
\param value value to subtract
*/
@@ -165,13 +169,15 @@ inline void subtract_value(Point& p, typename detail::param<Point>::type value)
\ingroup arithmetic
\details The coordinates of the second point will be subtracted to those of the first point.
The second point is not modified.
+ \tparam Point1 \tparam_point
+ \tparam Point2 \tparam_point
\param p1 first point
\param p2 second point
*/
template <typename Point1, typename Point2>
inline void subtract_point(Point1& p1, Point2 const& p2)
{
- BOOST_CONCEPT_ASSERT( (concept::Point<Point2>) );
+ BOOST_CONCEPT_ASSERT( (concept::Point<Point1>) );
BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
for_each_coordinate(p1, detail::point_operation<Point2, std::minus>(p2));
@@ -181,6 +187,7 @@ inline void subtract_point(Point1& p1, Point2 const& p2)
\brief Multiplies each coordinate of a point by the same value
\ingroup arithmetic
\details
+ \tparam Point \tparam_point
\param p point
\param value value to multiply by
*/
@@ -197,6 +204,8 @@ inline void multiply_value(Point& p, typename detail::param<Point>::type value)
\ingroup arithmetic
\details The coordinates of the first point will be multiplied by those of the second point.
The second point is not modified.
+ \tparam Point1 \tparam_point
+ \tparam Point2 \tparam_point
\param p1 first point
\param p2 second point
\note This is *not* a dot, cross or wedge product. It is a mere field-by-field multiplication.
@@ -204,7 +213,7 @@ inline void multiply_value(Point& p, typename detail::param<Point>::type value)
template <typename Point1, typename Point2>
inline void multiply_point(Point1& p1, Point2 const& p2)
{
- BOOST_CONCEPT_ASSERT( (concept::Point<Point2>) );
+ BOOST_CONCEPT_ASSERT( (concept::Point<Point1>) );
BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
for_each_coordinate(p1, detail::point_operation<Point2, std::multiplies>(p2));
@@ -214,6 +223,7 @@ inline void multiply_point(Point1& p1, Point2 const& p2)
\brief Divides each coordinate of the same point by a value
\ingroup arithmetic
\details
+ \tparam Point \tparam_point
\param p point
\param value value to divide by
*/
@@ -230,13 +240,15 @@ inline void divide_value(Point& p, typename detail::param<Point>::type value)
\ingroup arithmetic
\details The coordinates of the first point will be divided by those of the second point.
The second point is not modified.
+ \tparam Point1 \tparam_point
+ \tparam Point2 \tparam_point
\param p1 first point
\param p2 second point
*/
template <typename Point1, typename Point2>
inline void divide_point(Point1& p1, Point2 const& p2)
{
- BOOST_CONCEPT_ASSERT( (concept::Point<Point2>) );
+ BOOST_CONCEPT_ASSERT( (concept::Point<Point1>) );
BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
for_each_coordinate(p1, detail::point_operation<Point2, std::divides>(p2));
@@ -246,6 +258,7 @@ inline void divide_point(Point1& p1, Point2 const& p2)
\brief Assign each coordinate of a point the same value
\ingroup arithmetic
\details
+ \tparam Point \tparam_point
\param p point
\param value value to assign
*/
@@ -262,13 +275,15 @@ inline void assign_value(Point& p, typename detail::param<Point>::type value)
\ingroup arithmetic
\details The coordinates of the first point will be assigned those of the second point.
The second point is not modified.
+ \tparam Point1 \tparam_point
+ \tparam Point2 \tparam_point
\param p1 first point
\param p2 second point
*/
template <typename Point1, typename Point2>
-inline void assign_point(Point1& p1, const Point2& p2)
+inline void assign_point(Point1& p1, Point2 const& p2)
{
- BOOST_CONCEPT_ASSERT( (concept::Point<Point2>) );
+ BOOST_CONCEPT_ASSERT( (concept::Point<Point1>) );
BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
for_each_coordinate(p1, detail::point_assignment<Point2>(p2));
diff --git a/3party/boost/boost/geometry/arithmetic/determinant.hpp b/3party/boost/boost/geometry/arithmetic/determinant.hpp
index db3b867096..14edea7182 100644
--- a/3party/boost/boost/geometry/arithmetic/determinant.hpp
+++ b/3party/boost/boost/geometry/arithmetic/determinant.hpp
@@ -62,7 +62,7 @@ inline ReturnType determinant(U const& u, V const& v)
return calculate_determinant
<
- ReturnType,
+ ReturnType,
typename geometry::coordinate_type<U>::type,
typename geometry::coordinate_type<V>::type
>::apply(get<0>(u), get<1>(u), get<0>(v), get<1>(v));
diff --git a/3party/boost/boost/geometry/arithmetic/dot_product.hpp b/3party/boost/boost/geometry/arithmetic/dot_product.hpp
index 13fe968779..fc2b3844e6 100644
--- a/3party/boost/boost/geometry/arithmetic/dot_product.hpp
+++ b/3party/boost/boost/geometry/arithmetic/dot_product.hpp
@@ -59,21 +59,23 @@ struct dot_product_maker<P1, P2, DimensionCount, DimensionCount>
/*!
\brief Computes the dot product (or scalar product) of 2 vectors (points).
\ingroup arithmetic
+ \tparam Point1 \tparam_point
+ \tparam Point2 \tparam_point
\param p1 first point
\param p2 second point
\return the dot product
*/
-template <typename P1, typename P2>
-inline typename select_coordinate_type<P1, P2>::type dot_product(
- P1 const& p1, P2 const& p2)
+template <typename Point1, typename Point2>
+inline typename select_coordinate_type<Point1, Point2>::type dot_product(
+ Point1 const& p1, Point2 const& p2)
{
- BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P1>) );
- BOOST_CONCEPT_ASSERT( (concept::ConstPoint<P2>) );
+ BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point1>) );
+ BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
return detail::dot_product_maker
<
- P1, P2,
- 0, dimension<P1>::type::value - 1
+ Point1, Point2,
+ 0, dimension<Point1>::type::value - 1
>::apply(p1, p2);
}
diff --git a/3party/boost/boost/geometry/core/access.hpp b/3party/boost/boost/geometry/core/access.hpp
index 9ee33cd64a..57f925763d 100644
--- a/3party/boost/boost/geometry/core/access.hpp
+++ b/3party/boost/boost/geometry/core/access.hpp
@@ -303,7 +303,7 @@ inline void set(Geometry& geometry
, typename coordinate_type<Geometry>::type const& value
#ifndef DOXYGEN_SHOULD_SKIP_THIS
, detail::signature_getset_dimension* dummy = 0
-#endif
+#endif
)
{
boost::ignore_unused_variable_warning(dummy);
@@ -338,7 +338,7 @@ template <std::size_t Index, std::size_t Dimension, typename Geometry>
inline typename coordinate_type<Geometry>::type get(Geometry const& geometry
#ifndef DOXYGEN_SHOULD_SKIP_THIS
, detail::signature_getset_index_dimension* dummy = 0
-#endif
+#endif
)
{
boost::ignore_unused_variable_warning(dummy);
@@ -382,7 +382,7 @@ inline void set(Geometry& geometry
typedef core_dispatch::indexed_access
<
- typename tag<Geometry>::type,
+ typename tag<Geometry>::type,
typename geometry::util::bare_type<Geometry>::type,
typename coordinate_type<Geometry>::type,
Index,
diff --git a/3party/boost/boost/geometry/core/closure.hpp b/3party/boost/boost/geometry/core/closure.hpp
index aab02e7871..b61e352e93 100644
--- a/3party/boost/boost/geometry/core/closure.hpp
+++ b/3party/boost/boost/geometry/core/closure.hpp
@@ -14,10 +14,9 @@
#ifndef BOOST_GEOMETRY_CORE_CLOSURE_HPP
#define BOOST_GEOMETRY_CORE_CLOSURE_HPP
-
#include <boost/mpl/assert.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/range.hpp>
+#include <boost/mpl/size_t.hpp>
+#include <boost/range/value_type.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/geometry/core/ring_type.hpp>
@@ -32,10 +31,10 @@ namespace boost { namespace geometry
\brief Enumerates options for defining if polygons are open or closed
\ingroup enum
\details The enumeration closure_selector describes options for if a polygon is
- open or closed. In a closed polygon the very first point (per ring) should
+ open or closed. In a closed polygon the very first point (per ring) should
be equal to the very last point.
- The specific closing property of a polygon type is defined by the closure
- metafunction. The closure metafunction defines a value, which is one of the
+ The specific closing property of a polygon type is defined by the closure
+ metafunction. The closure metafunction defines a value, which is one of the
values enumerated in the closure_selector
\qbk{
@@ -45,12 +44,12 @@ namespace boost { namespace geometry
*/
enum closure_selector
{
- /// Rings are open: first point and last point are different, algorithms
+ /// Rings are open: first point and last point are different, algorithms
/// close them explicitly on the fly
open = 0,
/// Rings are closed: first point and last point must be the same
closed = 1,
- /// (Not yet implemented): algorithms first figure out if ring must be
+ /// (Not yet implemented): algorithms first figure out if ring must be
/// closed on the fly
closure_undertermined = -1
};
@@ -93,10 +92,10 @@ template <closure_selector Closure>
struct minimum_ring_size {};
template <>
-struct minimum_ring_size<geometry::closed> : boost::mpl::int_<4> {};
+struct minimum_ring_size<geometry::closed> : boost::mpl::size_t<4> {};
template <>
-struct minimum_ring_size<geometry::open> : boost::mpl::int_<3> {};
+struct minimum_ring_size<geometry::open> : boost::mpl::size_t<3> {};
}} // namespace detail::point_order
@@ -128,18 +127,18 @@ template <typename Box>
struct closure<segment_tag, Box> : public core_detail::closure::closed {};
template <typename LineString>
-struct closure<linestring_tag, LineString>
+struct closure<linestring_tag, LineString>
: public core_detail::closure::closed {};
template <typename Ring>
struct closure<ring_tag, Ring>
{
- static const closure_selector value
+ static const closure_selector value
= geometry::traits::closure<Ring>::value;
};
-// Specialization for polygon: the closure is the closure of its rings
+// Specialization for Polygon: the closure is the closure of its rings
template <typename Polygon>
struct closure<polygon_tag, Polygon>
{
@@ -150,13 +149,31 @@ struct closure<polygon_tag, Polygon>
>::value ;
};
+template <typename MultiPoint>
+struct closure<multi_point_tag, MultiPoint>
+ : public core_detail::closure::closed {};
+
+template <typename MultiLinestring>
+struct closure<multi_linestring_tag, MultiLinestring>
+ : public core_detail::closure::closed {};
+
+// Specialization for MultiPolygon: the closure is the closure of Polygon's rings
+template <typename MultiPolygon>
+struct closure<multi_polygon_tag, MultiPolygon>
+{
+ static const closure_selector value = core_dispatch::closure
+ <
+ polygon_tag,
+ typename boost::range_value<MultiPolygon>::type
+ >::value ;
+};
} // namespace core_dispatch
#endif // DOXYGEN_NO_DISPATCH
/*!
-\brief \brief_meta{value, closure (clockwise\, counterclockwise),
+\brief \brief_meta{value, closure (clockwise\, counterclockwise),
\meta_geometry_type}
\tparam Geometry \tparam_geometry
\ingroup core
diff --git a/3party/boost/boost/geometry/core/cs.hpp b/3party/boost/boost/geometry/core/cs.hpp
index 3588ed1a86..cf6c56b53c 100644
--- a/3party/boost/boost/geometry/core/cs.hpp
+++ b/3party/boost/boost/geometry/core/cs.hpp
@@ -28,7 +28,7 @@ namespace boost { namespace geometry
/*!
\brief Unit of plane angle: Degrees
\details Tag defining the unit of plane angle for spherical coordinate systems.
- This tag specifies that coordinates are defined in degrees (-180 .. 180).
+ This tag specifies that coordinates are defined in degrees (-180 .. 180).
It has to be specified for some coordinate systems.
\qbk{[include reference/core/degree_radian.qbk]}
*/
@@ -38,7 +38,7 @@ struct degree {};
/*!
\brief Unit of plane angle: Radians
\details Tag defining the unit of plane angle for spherical coordinate systems.
- This tag specifies that coordinates are defined in radians (-PI .. PI).
+ This tag specifies that coordinates are defined in radians (-PI .. PI).
It has to be specified for some coordinate systems.
\qbk{[include reference/core/degree_radian.qbk]}
*/
@@ -106,7 +106,7 @@ struct spherical
/*!
\brief Spherical equatorial coordinate system, in degree or in radian
\details This one resembles the geographic coordinate system, and has latitude
- up from zero at the equator, to 90 at the pole
+ up from zero at the equator, to 90 at the pole
(opposite to the spherical(polar) coordinate system).
Used in astronomy and in GIS (but there is also the geographic)
@@ -185,20 +185,22 @@ struct cs_tag<cs::cartesian>
/*!
\brief Meta-function returning coordinate system tag (cs family) of any geometry
+\tparam Geometry \tparam_geometry
\ingroup core
*/
-template <typename G>
+template <typename Geometry>
struct cs_tag
{
typedef typename traits::cs_tag
<
- typename geometry::coordinate_system<G>::type
+ typename geometry::coordinate_system<Geometry>::type
>::type type;
};
/*!
\brief Meta-function to verify if a coordinate system is radian
+\tparam CoordinateSystem Any coordinate system.
\ingroup core
*/
template <typename CoordinateSystem>
diff --git a/3party/boost/boost/geometry/core/geometry_id.hpp b/3party/boost/boost/geometry/core/geometry_id.hpp
index 369c5cfa1a..5fc5a80050 100644
--- a/3party/boost/boost/geometry/core/geometry_id.hpp
+++ b/3party/boost/boost/geometry/core/geometry_id.hpp
@@ -18,8 +18,6 @@
#include <boost/mpl/assert.hpp>
#include <boost/mpl/int.hpp>
-#include <boost/type_traits.hpp>
-
#include <boost/geometry/core/tag.hpp>
#include <boost/geometry/core/tags.hpp>
@@ -45,28 +43,39 @@ struct geometry_id
template <>
-struct geometry_id<point_tag> : boost::mpl::int_<1> {};
+struct geometry_id<point_tag> : boost::mpl::int_<1> {};
template <>
-struct geometry_id<linestring_tag> : boost::mpl::int_<2> {};
+struct geometry_id<linestring_tag> : boost::mpl::int_<2> {};
template <>
-struct geometry_id<polygon_tag> : boost::mpl::int_<3> {};
+struct geometry_id<polygon_tag> : boost::mpl::int_<3> {};
template <>
-struct geometry_id<segment_tag> : boost::mpl::int_<92> {};
+struct geometry_id<multi_point_tag> : boost::mpl::int_<4> {};
template <>
-struct geometry_id<ring_tag> : boost::mpl::int_<93> {};
+struct geometry_id<multi_linestring_tag> : boost::mpl::int_<5> {};
template <>
-struct geometry_id<box_tag> : boost::mpl::int_<94> {};
+struct geometry_id<multi_polygon_tag> : boost::mpl::int_<6> {};
+
+
+template <>
+struct geometry_id<segment_tag> : boost::mpl::int_<92> {};
+
+template <>
+struct geometry_id<ring_tag> : boost::mpl::int_<93> {};
+
+
+template <>
+struct geometry_id<box_tag> : boost::mpl::int_<94> {};
} // namespace core_dispatch
@@ -76,9 +85,9 @@ struct geometry_id<box_tag> : boost::mpl::int_<94> {};
/*!
\brief Meta-function returning the id of a geometry type
-\details The meta-function geometry_id defines a numerical ID (based on
- boost::mpl::int_<...> ) for each geometry concept. A numerical ID is
- sometimes useful, and within Boost.Geometry it is used for the
+\details The meta-function geometry_id defines a numerical ID (based on
+ boost::mpl::int_<...> ) for each geometry concept. A numerical ID is
+ sometimes useful, and within Boost.Geometry it is used for the
reverse_dispatch metafuntion.
\note Used for e.g. reverse meta-function
\ingroup core
diff --git a/3party/boost/boost/geometry/core/interior_rings.hpp b/3party/boost/boost/geometry/core/interior_rings.hpp
index 10af2ae4ee..798f415779 100644
--- a/3party/boost/boost/geometry/core/interior_rings.hpp
+++ b/3party/boost/boost/geometry/core/interior_rings.hpp
@@ -17,7 +17,7 @@
#include <cstddef>
#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
+#include <boost/range/value_type.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/geometry/core/tag.hpp>
@@ -85,6 +85,17 @@ struct interior_rings<polygon_tag, Polygon>
};
+template <typename MultiPolygon>
+struct interior_type<multi_polygon_tag, MultiPolygon>
+{
+ typedef typename core_dispatch::interior_type
+ <
+ polygon_tag,
+ typename boost::range_value<MultiPolygon>::type
+ >::type type;
+};
+
+
} // namespace core_dispatch
#endif
diff --git a/3party/boost/boost/geometry/core/is_areal.hpp b/3party/boost/boost/geometry/core/is_areal.hpp
index 5ddfa753bc..23858605f4 100644
--- a/3party/boost/boost/geometry/core/is_areal.hpp
+++ b/3party/boost/boost/geometry/core/is_areal.hpp
@@ -16,8 +16,7 @@
#define BOOST_GEOMETRY_CORE_IS_AREAL_HPP
-#include <boost/type_traits.hpp>
-
+#include <boost/type_traits/integral_constant.hpp>
#include <boost/geometry/core/tag.hpp>
#include <boost/geometry/core/tags.hpp>
@@ -36,7 +35,7 @@ template <typename GeometryTag> struct is_areal : boost::false_type {};
template <> struct is_areal<ring_tag> : boost::true_type {};
template <> struct is_areal<box_tag> : boost::true_type {};
template <> struct is_areal<polygon_tag> : boost::true_type {};
-
+template <> struct is_areal<multi_polygon_tag> : boost::true_type {};
} // namespace core_dispatch
#endif
diff --git a/3party/boost/boost/geometry/core/point_order.hpp b/3party/boost/boost/geometry/core/point_order.hpp
index f09086a9d4..501dda777b 100644
--- a/3party/boost/boost/geometry/core/point_order.hpp
+++ b/3party/boost/boost/geometry/core/point_order.hpp
@@ -16,7 +16,7 @@
#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
+#include <boost/range/value_type.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/geometry/core/ring_type.hpp>
@@ -29,10 +29,10 @@ namespace boost { namespace geometry
/*!
\brief Enumerates options for the order of points within polygons
\ingroup enum
-\details The enumeration order_selector describes options for the order of
- points within a polygon. Polygons can be ordered either clockwise or
- counterclockwise. The specific order of a polygon type is defined by the
- point_order metafunction. The point_order metafunction defines a value,
+\details The enumeration order_selector describes options for the order of
+ points within a polygon. Polygons can be ordered either clockwise or
+ counterclockwise. The specific order of a polygon type is defined by the
+ point_order metafunction. The point_order metafunction defines a value,
which is one of the values enumerated in the order_selector
\qbk{
@@ -120,7 +120,7 @@ struct point_order<linestring_tag, LineString>
template <typename Ring>
struct point_order<ring_tag, Ring>
{
- static const order_selector value
+ static const order_selector value
= geometry::traits::point_order<Ring>::value;
};
@@ -135,12 +135,32 @@ struct point_order<polygon_tag, Polygon>
>::value ;
};
+template <typename MultiPoint>
+struct point_order<multi_point_tag, MultiPoint>
+ : public detail::point_order::clockwise {};
+
+template <typename MultiLinestring>
+struct point_order<multi_linestring_tag, MultiLinestring>
+ : public detail::point_order::clockwise {};
+
+
+// Specialization for multi_polygon: the order is the order of its polygons
+template <typename MultiPolygon>
+struct point_order<multi_polygon_tag, MultiPolygon>
+{
+ static const order_selector value = core_dispatch::point_order
+ <
+ polygon_tag,
+ typename boost::range_value<MultiPolygon>::type
+ >::value ;
+};
+
} // namespace core_dispatch
#endif // DOXYGEN_NO_DISPATCH
/*!
-\brief \brief_meta{value, point order (clockwise\, counterclockwise),
+\brief \brief_meta{value, point order (clockwise\, counterclockwise),
\meta_geometry_type}
\tparam Geometry \tparam_geometry
\ingroup core
diff --git a/3party/boost/boost/geometry/core/point_type.hpp b/3party/boost/boost/geometry/core/point_type.hpp
index e148c84a57..f70e1fedd5 100644
--- a/3party/boost/boost/geometry/core/point_type.hpp
+++ b/3party/boost/boost/geometry/core/point_type.hpp
@@ -16,7 +16,7 @@
#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
+#include <boost/range/value_type.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/geometry/core/ring_type.hpp>
@@ -102,13 +102,45 @@ struct point_type<polygon_tag, Polygon>
};
+template <typename MultiPoint>
+struct point_type<multi_point_tag, MultiPoint>
+{
+ typedef typename boost::range_value
+ <
+ MultiPoint
+ >::type type;
+};
+
+
+template <typename MultiLinestring>
+struct point_type<multi_linestring_tag, MultiLinestring>
+{
+ typedef typename point_type
+ <
+ linestring_tag,
+ typename boost::range_value<MultiLinestring>::type
+ >::type type;
+};
+
+
+template <typename MultiPolygon>
+struct point_type<multi_polygon_tag, MultiPolygon>
+{
+ typedef typename point_type
+ <
+ polygon_tag,
+ typename boost::range_value<MultiPolygon>::type
+ >::type type;
+};
+
+
} // namespace core_dispatch
#endif // DOXYGEN_NO_DISPATCH
/*!
\brief \brief_meta{type, point_type, \meta_geometry_type}
-\tparam Geometry \tparam_geometry
+\tparam Geometry \tparam_geometry
\ingroup core
\qbk{[include reference/core/point_type.qbk]}
diff --git a/3party/boost/boost/geometry/core/ring_type.hpp b/3party/boost/boost/geometry/core/ring_type.hpp
index 9b984faf3c..fe551f060f 100644
--- a/3party/boost/boost/geometry/core/ring_type.hpp
+++ b/3party/boost/boost/geometry/core/ring_type.hpp
@@ -18,8 +18,10 @@
#include <boost/mpl/assert.hpp>
#include <boost/mpl/if.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/remove_const.hpp>
-
+#include <boost/type_traits/remove_reference.hpp>
#include <boost/geometry/core/tag.hpp>
#include <boost/geometry/core/tags.hpp>
@@ -102,6 +104,38 @@ struct ring_return_type<polygon_tag, Polygon>
};
+template <typename MultiLinestring>
+struct ring_return_type<multi_linestring_tag, MultiLinestring>
+{
+ typedef typename ring_return_type
+ <
+ linestring_tag,
+ typename mpl::if_
+ <
+ boost::is_const<MultiLinestring>,
+ typename boost::range_value<MultiLinestring>::type const,
+ typename boost::range_value<MultiLinestring>::type
+ >::type
+ >::type type;
+};
+
+
+template <typename MultiPolygon>
+struct ring_return_type<multi_polygon_tag, MultiPolygon>
+{
+ typedef typename ring_return_type
+ <
+ polygon_tag,
+ typename mpl::if_
+ <
+ boost::is_const<MultiPolygon>,
+ typename boost::range_value<MultiPolygon>::type const,
+ typename boost::range_value<MultiPolygon>::type
+ >::type
+ >::type type;
+};
+
+
template <typename GeometryTag, typename Geometry>
struct ring_type
{};
@@ -124,7 +158,24 @@ struct ring_type<polygon_tag, Polygon>
};
+template <typename MultiLinestring>
+struct ring_type<multi_linestring_tag, MultiLinestring>
+{
+ typedef typename boost::remove_reference
+ <
+ typename ring_return_type<multi_linestring_tag, MultiLinestring>::type
+ >::type type;
+};
+
+template <typename MultiPolygon>
+struct ring_type<multi_polygon_tag, MultiPolygon>
+{
+ typedef typename boost::remove_reference
+ <
+ typename ring_return_type<multi_polygon_tag, MultiPolygon>::type
+ >::type type;
+};
} // namespace core_dispatch
diff --git a/3party/boost/boost/geometry/core/tag.hpp b/3party/boost/boost/geometry/core/tag.hpp
index 1687085a79..6bffcb932d 100644
--- a/3party/boost/boost/geometry/core/tag.hpp
+++ b/3party/boost/boost/geometry/core/tag.hpp
@@ -14,7 +14,6 @@
#ifndef BOOST_GEOMETRY_CORE_TAG_HPP
#define BOOST_GEOMETRY_CORE_TAG_HPP
-
#include <boost/mpl/assert.hpp>
#include <boost/geometry/core/tags.hpp>
@@ -52,7 +51,7 @@ struct tag
\brief \brief_meta{type, tag, \meta_geometry_type}
\details With Boost.Geometry, tags are the driving force of the tag dispatching
mechanism. The tag metafunction is therefore used in every free function.
-\tparam Geometry \tparam_geometry
+\tparam Geometry \tparam_geometry
\ingroup core
\qbk{[include reference/core/tag.qbk]}
diff --git a/3party/boost/boost/geometry/core/tag_cast.hpp b/3party/boost/boost/geometry/core/tag_cast.hpp
index 47a2e834f1..cafd13cba9 100644
--- a/3party/boost/boost/geometry/core/tag_cast.hpp
+++ b/3party/boost/boost/geometry/core/tag_cast.hpp
@@ -25,10 +25,10 @@ namespace boost { namespace geometry
\brief Metafunction defining a type being either the specified tag, or one
of the specified basetags if the type inherits from them.
\details Tags can inherit each other. A multi_point inherits, for example,
- both the multi_tag and the pointlike tag. Often behaviour can be shared
+ both the multi_tag and the pointlike_tag. Often behaviour can be shared
between different geometry types. A tag, found by the metafunction tag,
can be casted to a more basic tag, and then dispatched by that tag.
-\ingroup core
+\ingroup core
\tparam Tag The tag to be casted to one of the base tags
\tparam BaseTag First base tag
\tparam BaseTag2 Optional second base tag
diff --git a/3party/boost/boost/geometry/core/tags.hpp b/3party/boost/boost/geometry/core/tags.hpp
index 9272858ed2..160477b8c4 100644
--- a/3party/boost/boost/geometry/core/tags.hpp
+++ b/3party/boost/boost/geometry/core/tags.hpp
@@ -57,7 +57,7 @@ struct linear_tag {};
struct areal_tag {};
// Subset of areal types (polygon, multi_polygon, ring)
-struct polygonal_tag : areal_tag {};
+struct polygonal_tag : areal_tag {};
/// For volume types (also box (?), polyhedron)
struct volumetric_tag {};
@@ -88,6 +88,49 @@ struct box_tag : single_tag, areal_tag {};
struct segment_tag : single_tag, linear_tag {};
+/// OGC Multi point identifying tag
+struct multi_point_tag : multi_tag, pointlike_tag {};
+
+/// OGC Multi linestring identifying tag
+struct multi_linestring_tag : multi_tag, linear_tag {};
+
+/// OGC Multi polygon identifying tag
+struct multi_polygon_tag : multi_tag, polygonal_tag {};
+
+/// OGC Geometry Collection identifying tag
+struct geometry_collection_tag : multi_tag {};
+
+
+/*!
+\brief Meta-function to get for a tag of a multi-geometry
+ the tag of the corresponding single-geometry
+*/
+template <typename Tag>
+struct single_tag_of
+{};
+
+#ifndef DOXYGEN_NO_DETAIL
+
+template <>
+struct single_tag_of<multi_point_tag>
+{
+ typedef point_tag type;
+};
+
+template <>
+struct single_tag_of<multi_linestring_tag>
+{
+ typedef linestring_tag type;
+};
+
+template <>
+struct single_tag_of<multi_polygon_tag>
+{
+ typedef polygon_tag type;
+};
+
+#endif
+
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/core/topological_dimension.hpp b/3party/boost/boost/geometry/core/topological_dimension.hpp
index 02f1ed341e..22ed676fc6 100644
--- a/3party/boost/boost/geometry/core/topological_dimension.hpp
+++ b/3party/boost/boost/geometry/core/topological_dimension.hpp
@@ -49,10 +49,12 @@ struct top_dim<segment_tag> : boost::mpl::int_<1> {};
// ring: topological dimension of two, but some people say: 1 !!
+// NOTE: This is not OGC LinearRing!
template <>
struct top_dim<ring_tag> : boost::mpl::int_<2> {};
+// TODO: This is wrong! Boxes may have various topological dimensions
template <>
struct top_dim<box_tag> : boost::mpl::int_<2> {};
@@ -61,6 +63,17 @@ template <>
struct top_dim<polygon_tag> : boost::mpl::int_<2> {};
+template <>
+struct top_dim<multi_point_tag> : boost::mpl::int_<0> {};
+
+
+template <>
+struct top_dim<multi_linestring_tag> : boost::mpl::int_<1> {};
+
+
+template <>
+struct top_dim<multi_polygon_tag> : boost::mpl::int_<2> {};
+
} // namespace core_dispatch
#endif
diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp
index 93b21fee94..490fa45fe9 100644
--- a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp
+++ b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp
@@ -69,7 +69,26 @@ struct push_back<boost::polygon::polygon_data<CoordinateType> >
}
};
+template <typename CoordinateType>
+struct resize<boost::polygon::polygon_data<CoordinateType> >
+{
+ typedef boost::polygon::point_data<CoordinateType> point_type;
+ static inline void apply(boost::polygon::polygon_data<CoordinateType>& data,
+ std::size_t new_size)
+ {
+ // Boost.Polygon's polygons are not resizable. So create a temporary vector,
+ // resize it and set it to the original. Of course: this is not efficient.
+ // But there seems no other way (without using a wrapper)
+ std::vector<point_type> temporary_vector
+ (
+ boost::polygon::begin_points(data),
+ boost::polygon::end_points(data)
+ );
+ temporary_vector.resize(new_size);
+ data.set(temporary_vector.begin(), temporary_vector.end());
+ }
+};
} // namespace traits
diff --git a/3party/boost/boost/geometry/geometries/concepts/check.hpp b/3party/boost/boost/geometry/geometries/concepts/check.hpp
index 68cca9e98e..07ef84f4a4 100644
--- a/3party/boost/boost/geometry/geometries/concepts/check.hpp
+++ b/3party/boost/boost/geometry/geometries/concepts/check.hpp
@@ -18,13 +18,17 @@
#include <boost/concept_check.hpp>
#include <boost/concept/requires.hpp>
-
#include <boost/type_traits/is_const.hpp>
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/box_concept.hpp>
#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
+#include <boost/geometry/geometries/concepts/multi_point_concept.hpp>
+#include <boost/geometry/geometries/concepts/multi_linestring_concept.hpp>
+#include <boost/geometry/geometries/concepts/multi_polygon_concept.hpp>
#include <boost/geometry/geometries/concepts/point_concept.hpp>
#include <boost/geometry/geometries/concepts/polygon_concept.hpp>
#include <boost/geometry/geometries/concepts/ring_concept.hpp>
@@ -32,8 +36,6 @@
#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
namespace boost { namespace geometry
{
@@ -57,7 +59,7 @@ class check
namespace dispatch
{
-template
+template
<
typename Geometry,
typename GeometryTag = typename geometry::tag<Geometry>::type,
@@ -138,6 +140,42 @@ struct check<Geometry, segment_tag, false>
{};
+template <typename Geometry>
+struct check<Geometry, multi_point_tag, true>
+ : detail::concept_check::check<concept::ConstMultiPoint<Geometry> >
+{};
+
+
+template <typename Geometry>
+struct check<Geometry, multi_point_tag, false>
+ : detail::concept_check::check<concept::MultiPoint<Geometry> >
+{};
+
+
+template <typename Geometry>
+struct check<Geometry, multi_linestring_tag, true>
+ : detail::concept_check::check<concept::ConstMultiLinestring<Geometry> >
+{};
+
+
+template <typename Geometry>
+struct check<Geometry, multi_linestring_tag, false>
+ : detail::concept_check::check<concept::MultiLinestring<Geometry> >
+{};
+
+
+template <typename Geometry>
+struct check<Geometry, multi_polygon_tag, true>
+ : detail::concept_check::check<concept::ConstMultiPolygon<Geometry> >
+{};
+
+
+template <typename Geometry>
+struct check<Geometry, multi_polygon_tag, false>
+ : detail::concept_check::check<concept::MultiPolygon<Geometry> >
+{};
+
+
} // namespace dispatch
#endif
diff --git a/3party/boost/boost/geometry/geometries/concepts/multi_linestring_concept.hpp b/3party/boost/boost/geometry/geometries/concepts/multi_linestring_concept.hpp
new file mode 100644
index 0000000000..f13f7ac7e8
--- /dev/null
+++ b/3party/boost/boost/geometry/geometries/concepts/multi_linestring_concept.hpp
@@ -0,0 +1,91 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
+#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
+
+
+#include <boost/concept_check.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/metafunctions.hpp>
+
+
+#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
+
+
+namespace boost { namespace geometry { namespace concept
+{
+
+
+/*!
+\brief multi-linestring concept
+\ingroup concepts
+\par Formal definition:
+The multi linestring concept is defined as following:
+- there must be a specialization of traits::tag defining multi_linestring_tag as
+ type
+- it must behave like a Boost.Range
+- its range value must fulfil the Linestring concept
+
+*/
+template <typename Geometry>
+class MultiLinestring
+{
+#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
+ typedef typename boost::range_value<Geometry>::type linestring_type;
+
+ BOOST_CONCEPT_ASSERT( (concept::Linestring<linestring_type>) );
+ BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
+
+
+public :
+
+ BOOST_CONCEPT_USAGE(MultiLinestring)
+ {
+ Geometry* mls = 0;
+ traits::clear<Geometry>::apply(*mls);
+ traits::resize<Geometry>::apply(*mls, 0);
+ linestring_type* ls = 0;
+ traits::push_back<Geometry>::apply(*mls, *ls);
+ }
+#endif
+};
+
+
+/*!
+\brief concept for multi-linestring (const version)
+\ingroup const_concepts
+*/
+template <typename Geometry>
+class ConstMultiLinestring
+{
+#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
+ typedef typename boost::range_value<Geometry>::type linestring_type;
+
+ BOOST_CONCEPT_ASSERT( (concept::ConstLinestring<linestring_type>) );
+ BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
+
+
+public :
+
+ BOOST_CONCEPT_USAGE(ConstMultiLinestring)
+ {
+ }
+#endif
+};
+
+}}} // namespace boost::geometry::concept
+
+
+#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
diff --git a/3party/boost/boost/geometry/geometries/concepts/multi_point_concept.hpp b/3party/boost/boost/geometry/geometries/concepts/multi_point_concept.hpp
new file mode 100644
index 0000000000..81c087166f
--- /dev/null
+++ b/3party/boost/boost/geometry/geometries/concepts/multi_point_concept.hpp
@@ -0,0 +1,90 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
+#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
+
+
+#include <boost/concept_check.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/metafunctions.hpp>
+
+
+#include <boost/geometry/geometries/concepts/point_concept.hpp>
+
+
+namespace boost { namespace geometry { namespace concept
+{
+
+
+/*!
+\brief MultiPoint concept
+\ingroup concepts
+\par Formal definition:
+The multi point concept is defined as following:
+- there must be a specialization of traits::tag defining multi_point_tag as type
+- it must behave like a Boost.Range
+- its range value must fulfil the Point concept
+
+*/
+template <typename Geometry>
+class MultiPoint
+{
+#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
+ typedef typename boost::range_value<Geometry>::type point_type;
+
+ BOOST_CONCEPT_ASSERT( (concept::Point<point_type>) );
+ BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
+
+
+public :
+
+ BOOST_CONCEPT_USAGE(MultiPoint)
+ {
+ Geometry* mp = 0;
+ traits::clear<Geometry>::apply(*mp);
+ traits::resize<Geometry>::apply(*mp, 0);
+ point_type* point = 0;
+ traits::push_back<Geometry>::apply(*mp, *point);
+ }
+#endif
+};
+
+
+/*!
+\brief concept for multi-point (const version)
+\ingroup const_concepts
+*/
+template <typename Geometry>
+class ConstMultiPoint
+{
+#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
+ typedef typename boost::range_value<Geometry>::type point_type;
+
+ BOOST_CONCEPT_ASSERT( (concept::ConstPoint<point_type>) );
+ BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
+
+
+public :
+
+ BOOST_CONCEPT_USAGE(ConstMultiPoint)
+ {
+ }
+#endif
+};
+
+}}} // namespace boost::geometry::concept
+
+
+#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
diff --git a/3party/boost/boost/geometry/geometries/concepts/multi_polygon_concept.hpp b/3party/boost/boost/geometry/geometries/concepts/multi_polygon_concept.hpp
new file mode 100644
index 0000000000..b13d330f3c
--- /dev/null
+++ b/3party/boost/boost/geometry/geometries/concepts/multi_polygon_concept.hpp
@@ -0,0 +1,91 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
+#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
+
+
+#include <boost/concept_check.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/metafunctions.hpp>
+
+#include <boost/geometry/geometries/concepts/polygon_concept.hpp>
+
+
+namespace boost { namespace geometry { namespace concept
+{
+
+
+/*!
+\brief multi-polygon concept
+\ingroup concepts
+\par Formal definition:
+The multi polygon concept is defined as following:
+- there must be a specialization of traits::tag defining multi_polygon_tag
+ as type
+- it must behave like a Boost.Range
+- its range value must fulfil the Polygon concept
+
+*/
+template <typename Geometry>
+class MultiPolygon
+{
+#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
+ typedef typename boost::range_value<Geometry>::type polygon_type;
+
+ BOOST_CONCEPT_ASSERT( (concept::Polygon<polygon_type>) );
+ BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
+
+
+public :
+
+ BOOST_CONCEPT_USAGE(MultiPolygon)
+ {
+ Geometry* mp = 0;
+ traits::clear<Geometry>::apply(*mp);
+ traits::resize<Geometry>::apply(*mp, 0);
+ polygon_type* poly = 0;
+ traits::push_back<Geometry>::apply(*mp, *poly);
+ }
+#endif
+};
+
+
+/*!
+\brief concept for multi-polygon (const version)
+\ingroup const_concepts
+*/
+template <typename Geometry>
+class ConstMultiPolygon
+{
+#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
+ typedef typename boost::range_value<Geometry>::type polygon_type;
+
+ BOOST_CONCEPT_ASSERT( (concept::ConstPolygon<polygon_type>) );
+ BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
+
+
+public :
+
+ BOOST_CONCEPT_USAGE(ConstMultiPolygon)
+ {
+ }
+#endif
+};
+
+
+}}} // namespace boost::geometry::concept
+
+
+#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
diff --git a/3party/boost/boost/geometry/geometries/geometries.hpp b/3party/boost/boost/geometry/geometries/geometries.hpp
index cda55c1d28..de9e2b1fd9 100644
--- a/3party/boost/boost/geometry/geometries/geometries.hpp
+++ b/3party/boost/boost/geometry/geometries/geometries.hpp
@@ -18,6 +18,10 @@
#include <boost/geometry/geometries/linestring.hpp>
#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/multi_point.hpp>
+#include <boost/geometry/geometries/multi_linestring.hpp>
+#include <boost/geometry/geometries/multi_polygon.hpp>
+
#include <boost/geometry/geometries/box.hpp>
#include <boost/geometry/geometries/ring.hpp>
#include <boost/geometry/geometries/segment.hpp>
diff --git a/3party/boost/boost/geometry/geometries/multi_linestring.hpp b/3party/boost/boost/geometry/geometries/multi_linestring.hpp
new file mode 100644
index 0000000000..2ba8e7196b
--- /dev/null
+++ b/3party/boost/boost/geometry/geometries/multi_linestring.hpp
@@ -0,0 +1,80 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_GEOMETRIES_MULTI_LINESTRING_HPP
+#define BOOST_GEOMETRY_GEOMETRIES_MULTI_LINESTRING_HPP
+
+#include <memory>
+#include <vector>
+
+#include <boost/concept/requires.hpp>
+
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+namespace model
+{
+
+/*!
+\brief multi_line, a collection of linestring
+\details Multi-linestring can be used to group lines belonging to each other,
+ e.g. a highway (with interruptions)
+\ingroup geometries
+
+\qbk{before.synopsis,
+[heading Model of]
+[link geometry.reference.concepts.concept_multi_linestring MultiLineString Concept]
+}
+*/
+template
+<
+ typename LineString,
+ template<typename, typename> class Container = std::vector,
+ template<typename> class Allocator = std::allocator
+>
+class multi_linestring : public Container<LineString, Allocator<LineString> >
+{
+ BOOST_CONCEPT_ASSERT( (concept::Linestring<LineString>) );
+};
+
+
+} // namespace model
+
+
+#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+namespace traits
+{
+
+template
+<
+ typename LineString,
+ template<typename, typename> class Container,
+ template<typename> class Allocator
+>
+struct tag< model::multi_linestring<LineString, Container, Allocator> >
+{
+ typedef multi_linestring_tag type;
+};
+
+} // namespace traits
+#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_GEOMETRIES_MULTI_LINESTRING_HPP
diff --git a/3party/boost/boost/geometry/geometries/multi_point.hpp b/3party/boost/boost/geometry/geometries/multi_point.hpp
new file mode 100644
index 0000000000..d0a782a1de
--- /dev/null
+++ b/3party/boost/boost/geometry/geometries/multi_point.hpp
@@ -0,0 +1,94 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_GEOMETRIES_MULTI_POINT_HPP
+#define BOOST_GEOMETRY_GEOMETRIES_MULTI_POINT_HPP
+
+#include <memory>
+#include <vector>
+
+#include <boost/concept/requires.hpp>
+
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/point_concept.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace model
+{
+
+
+/*!
+\brief multi_point, a collection of points
+\ingroup geometries
+\tparam Point \tparam_point
+\tparam Container \tparam_container
+\tparam Allocator \tparam_allocator
+\details Multipoint can be used to group points belonging to each other,
+ e.g. a constellation, or the result set of an intersection
+\qbk{before.synopsis,
+[heading Model of]
+[link geometry.reference.concepts.concept_multi_point MultiPoint Concept]
+}
+*/
+template
+<
+ typename Point,
+ template<typename, typename> class Container = std::vector,
+ template<typename> class Allocator = std::allocator
+>
+class multi_point : public Container<Point, Allocator<Point> >
+{
+ BOOST_CONCEPT_ASSERT( (concept::Point<Point>) );
+
+ typedef Container<Point, Allocator<Point> > base_type;
+
+public :
+ /// \constructor_default{multi_point}
+ inline multi_point()
+ : base_type()
+ {}
+
+ /// \constructor_begin_end{multi_point}
+ template <typename Iterator>
+ inline multi_point(Iterator begin, Iterator end)
+ : base_type(begin, end)
+ {}
+};
+
+} // namespace model
+
+
+#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+namespace traits
+{
+
+template
+<
+ typename Point,
+ template<typename, typename> class Container,
+ template<typename> class Allocator
+>
+struct tag< model::multi_point<Point, Container, Allocator> >
+{
+ typedef multi_point_tag type;
+};
+
+} // namespace traits
+#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_GEOMETRIES_MULTI_POINT_HPP
diff --git a/3party/boost/boost/geometry/geometries/multi_polygon.hpp b/3party/boost/boost/geometry/geometries/multi_polygon.hpp
new file mode 100644
index 0000000000..228074cd34
--- /dev/null
+++ b/3party/boost/boost/geometry/geometries/multi_polygon.hpp
@@ -0,0 +1,77 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_GEOMETRIES_MULTI_POLYGON_HPP
+#define BOOST_GEOMETRY_GEOMETRIES_MULTI_POLYGON_HPP
+
+#include <memory>
+#include <vector>
+
+#include <boost/concept/requires.hpp>
+
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/polygon_concept.hpp>
+
+namespace boost { namespace geometry
+{
+
+namespace model
+{
+
+/*!
+\brief multi_polygon, a collection of polygons
+\details Multi-polygon can be used to group polygons belonging to each other,
+ e.g. Hawaii
+\ingroup geometries
+
+\qbk{before.synopsis,
+[heading Model of]
+[link geometry.reference.concepts.concept_multi_polygon MultiPolygon Concept]
+}
+*/
+template
+<
+ typename Polygon,
+ template<typename, typename> class Container = std::vector,
+ template<typename> class Allocator = std::allocator
+>
+class multi_polygon : public Container<Polygon, Allocator<Polygon> >
+{
+ BOOST_CONCEPT_ASSERT( (concept::Polygon<Polygon>) );
+};
+
+
+} // namespace model
+
+
+#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+namespace traits
+{
+
+template
+<
+ typename Polygon,
+ template<typename, typename> class Container,
+ template<typename> class Allocator
+>
+struct tag< model::multi_polygon<Polygon, Container, Allocator> >
+{
+ typedef multi_polygon_tag type;
+};
+
+} // namespace traits
+#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_GEOMETRIES_MULTI_POLYGON_HPP
diff --git a/3party/boost/boost/geometry/geometries/point.hpp b/3party/boost/boost/geometry/geometries/point.hpp
index b531147311..a25340c463 100644
--- a/3party/boost/boost/geometry/geometries/point.hpp
+++ b/3party/boost/boost/geometry/geometries/point.hpp
@@ -30,7 +30,7 @@ namespace boost { namespace geometry
// Silence warning C4127: conditional expression is constant
#if defined(_MSC_VER)
-#pragma warning(push)
+#pragma warning(push)
#pragma warning(disable : 4127)
#endif
@@ -71,7 +71,7 @@ public:
{}
/// @brief Constructor to set one, two or three values
- inline point(CoordinateType const& v0, CoordinateType const& v1 = 0, CoordinateType const& v2 = 0)
+ explicit inline point(CoordinateType const& v0, CoordinateType const& v1 = 0, CoordinateType const& v2 = 0)
{
if (DimensionCount >= 1) m_values[0] = v0;
if (DimensionCount >= 2) m_values[1] = v1;
diff --git a/3party/boost/boost/geometry/geometries/register/box.hpp b/3party/boost/boost/geometry/geometries/register/box.hpp
index 838c2bb5fc..71a7077a66 100644
--- a/3party/boost/boost/geometry/geometries/register/box.hpp
+++ b/3party/boost/boost/geometry/geometries/register/box.hpp
@@ -105,7 +105,7 @@ template <> struct indexed_access<Box, max_corner, 1> \
/*!
\brief \brief_macro{box}
\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_BOX, box} The
+\details \details_macro{BOOST_GEOMETRY_REGISTER_BOX, box} The
box may contain template parameters, which must be specified then.
\param Box \param_macro_type{Box}
\param Point Point type on which box is based. Might be two or three-dimensional
@@ -128,7 +128,7 @@ namespace boost { namespace geometry { namespace traits { \
/*!
\brief \brief_macro{box}
\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED, box}
+\details \details_macro{BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED, box}
\details_macro_templated{box, point}
\param Box \param_macro_type{Box}
\param MinCorner minimum corner (should be public member or method)
@@ -149,10 +149,10 @@ namespace boost { namespace geometry { namespace traits { \
/*!
\brief \brief_macro{box}
\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES, box}
+\details \details_macro{BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES, box}
\param Box \param_macro_type{Box}
\param Point Point type reported as point_type by box. Must be two dimensional.
- Note that these box tyeps do not contain points, but they must have a
+ Note that these box tyeps do not contain points, but they must have a
related point_type
\param Left Left side (must be public member or method)
\param Bottom Bottom side (must be public member or method)
diff --git a/3party/boost/boost/geometry/geometries/register/linestring.hpp b/3party/boost/boost/geometry/geometries/register/linestring.hpp
index b064398746..cfc7dcaed2 100644
--- a/3party/boost/boost/geometry/geometries/register/linestring.hpp
+++ b/3party/boost/boost/geometry/geometries/register/linestring.hpp
@@ -22,7 +22,7 @@
/*!
\brief \brief_macro{linestring}
\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_LINESTRING, linestring} The
+\details \details_macro{BOOST_GEOMETRY_REGISTER_LINESTRING, linestring} The
linestring may contain template parameters, which must be specified then.
\param Linestring \param_macro_type{linestring}
@@ -41,7 +41,7 @@ namespace boost { namespace geometry { namespace traits { \
/*!
\brief \brief_macro{templated linestring}
\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED, templated linestring}
+\details \details_macro{BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED, templated linestring}
\details_macro_templated{linestring, point}
\param Linestring \param_macro_type{linestring (without template parameters)}
diff --git a/3party/boost/boost/geometry/geometries/register/multi_linestring.hpp b/3party/boost/boost/geometry/geometries/register/multi_linestring.hpp
new file mode 100644
index 0000000000..ad11289d11
--- /dev/null
+++ b/3party/boost/boost/geometry/geometries/register/multi_linestring.hpp
@@ -0,0 +1,59 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
+#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+/*!
+\brief \brief_macro{multi_linestring}
+\ingroup register
+\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING, multi_linestring} The
+ multi_linestring may contain template parameters, which must be specified then.
+\param MultiLineString \param_macro_type{multi_linestring}
+
+\qbk{
+[heading Example]
+[register_multi_linestring]
+[register_multi_linestring_output]
+}
+*/
+#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING(MultiLineString) \
+namespace boost { namespace geometry { namespace traits { \
+ template<> struct tag<MultiLineString> { typedef multi_linestring_tag type; }; \
+}}}
+
+
+/*!
+\brief \brief_macro{templated multi_linestring}
+\ingroup register
+\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED, templated multi_linestring}
+ \details_macro_templated{multi_linestring, linestring}
+\param MultiLineString \param_macro_type{multi_linestring (without template parameters)}
+
+\qbk{
+[heading Example]
+[register_multi_linestring_templated]
+[register_multi_linestring_templated_output]
+}
+*/
+#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED(MultiLineString) \
+namespace boost { namespace geometry { namespace traits { \
+ template<typename LineString> struct tag< MultiLineString<LineString> > { typedef multi_linestring_tag type; }; \
+}}}
+
+
+#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
diff --git a/3party/boost/boost/geometry/geometries/register/multi_point.hpp b/3party/boost/boost/geometry/geometries/register/multi_point.hpp
new file mode 100644
index 0000000000..4e875ae0cd
--- /dev/null
+++ b/3party/boost/boost/geometry/geometries/register/multi_point.hpp
@@ -0,0 +1,59 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POINT_HPP
+#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POINT_HPP
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+/*!
+\brief \brief_macro{multi_point}
+\ingroup register
+\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT, multi_point} The
+ multi_point may contain template parameters, which must be specified then.
+\param MultiPoint \param_macro_type{multi_point}
+
+\qbk{
+[heading Example]
+[register_multi_point]
+[register_multi_point_output]
+}
+*/
+#define BOOST_GEOMETRY_REGISTER_MULTI_POINT(MultiPoint) \
+namespace boost { namespace geometry { namespace traits { \
+ template<> struct tag<MultiPoint> { typedef multi_point_tag type; }; \
+}}}
+
+
+/*!
+\brief \brief_macro{templated multi_point}
+\ingroup register
+\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED, templated multi_point}
+ \details_macro_templated{multi_point, point}
+\param MultiPoint \param_macro_type{multi_point (without template parameters)}
+
+\qbk{
+[heading Example]
+[register_multi_point_templated]
+[register_multi_point_templated_output]
+}
+*/
+#define BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED(MultiPoint) \
+namespace boost { namespace geometry { namespace traits { \
+ template<typename Point> struct tag< MultiPoint<Point> > { typedef multi_point_tag type; }; \
+}}}
+
+
+#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POINT_HPP
diff --git a/3party/boost/boost/geometry/geometries/register/multi_polygon.hpp b/3party/boost/boost/geometry/geometries/register/multi_polygon.hpp
new file mode 100644
index 0000000000..1c3818b551
--- /dev/null
+++ b/3party/boost/boost/geometry/geometries/register/multi_polygon.hpp
@@ -0,0 +1,59 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
+#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+/*!
+\brief \brief_macro{multi_polygon}
+\ingroup register
+\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON, multi_polygon} The
+ multi_polygon may contain template parameters, which must be specified then.
+\param MultiPolygon \param_macro_type{multi_polygon}
+
+\qbk{
+[heading Example]
+[register_multi_polygon]
+[register_multi_polygon_output]
+}
+*/
+#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON(MultiPolygon) \
+namespace boost { namespace geometry { namespace traits { \
+ template<> struct tag<MultiPolygon> { typedef multi_polygon_tag type; }; \
+}}}
+
+
+/*!
+\brief \brief_macro{templated multi_polygon}
+\ingroup register
+\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED, templated multi_polygon}
+ \details_macro_templated{multi_polygon, polygon}
+\param MultiPolygon \param_macro_type{multi_polygon (without template parameters)}
+
+\qbk{
+[heading Example]
+[register_multi_polygon_templated]
+[register_multi_polygon_templated_output]
+}
+*/
+#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED(MultiPolygon) \
+namespace boost { namespace geometry { namespace traits { \
+ template<typename Polygon> struct tag< MultiPolygon<Polygon> > { typedef multi_polygon_tag type; }; \
+}}}
+
+
+#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
diff --git a/3party/boost/boost/geometry/geometries/register/ring.hpp b/3party/boost/boost/geometry/geometries/register/ring.hpp
index fb6cb67200..761e46fbc4 100644
--- a/3party/boost/boost/geometry/geometries/register/ring.hpp
+++ b/3party/boost/boost/geometry/geometries/register/ring.hpp
@@ -22,7 +22,7 @@
/*!
\brief \brief_macro{ring}
\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_RING, ring} The
+\details \details_macro{BOOST_GEOMETRY_REGISTER_RING, ring} The
ring may contain template parameters, which must be specified then.
\param Ring \param_macro_type{ring}
@@ -41,7 +41,7 @@ namespace boost { namespace geometry { namespace traits { \
/*!
\brief \brief_macro{templated ring}
\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_RING_TEMPLATED, templated ring}
+\details \details_macro{BOOST_GEOMETRY_REGISTER_RING_TEMPLATED, templated ring}
\details_macro_templated{ring, point}
\param Ring \param_macro_type{ring (without template parameters)}
diff --git a/3party/boost/boost/geometry/geometry.hpp b/3party/boost/boost/geometry/geometry.hpp
index dce17e260c..35fb9b80f3 100644
--- a/3party/boost/boost/geometry/geometry.hpp
+++ b/3party/boost/boost/geometry/geometry.hpp
@@ -16,7 +16,15 @@
// Shortcut to include all header files
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/core/coordinate_system.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/interior_type.hpp>
+#include <boost/geometry/core/point_order.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/tag.hpp>
#include <boost/geometry/core/tag_cast.hpp>
#include <boost/geometry/core/tags.hpp>
@@ -45,6 +53,7 @@
#include <boost/geometry/algorithms/convex_hull.hpp>
#include <boost/geometry/algorithms/correct.hpp>
#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/crosses.hpp>
#include <boost/geometry/algorithms/difference.hpp>
#include <boost/geometry/algorithms/disjoint.hpp>
#include <boost/geometry/algorithms/distance.hpp>
@@ -54,6 +63,8 @@
#include <boost/geometry/algorithms/for_each.hpp>
#include <boost/geometry/algorithms/intersection.hpp>
#include <boost/geometry/algorithms/intersects.hpp>
+#include <boost/geometry/algorithms/is_simple.hpp>
+#include <boost/geometry/algorithms/is_valid.hpp>
#include <boost/geometry/algorithms/length.hpp>
#include <boost/geometry/algorithms/make.hpp>
#include <boost/geometry/algorithms/num_geometries.hpp>
@@ -61,6 +72,7 @@
#include <boost/geometry/algorithms/num_points.hpp>
#include <boost/geometry/algorithms/overlaps.hpp>
#include <boost/geometry/algorithms/perimeter.hpp>
+#include <boost/geometry/algorithms/remove_spikes.hpp>
#include <boost/geometry/algorithms/reverse.hpp>
#include <boost/geometry/algorithms/simplify.hpp>
#include <boost/geometry/algorithms/sym_difference.hpp>
@@ -79,14 +91,20 @@
#include <boost/geometry/util/for_each_coordinate.hpp>
#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
#include <boost/geometry/util/select_coordinate_type.hpp>
-#include <boost/geometry/io/dsv/write.hpp>
+#include <boost/geometry/util/select_most_precise.hpp>
#include <boost/geometry/views/box_view.hpp>
+#include <boost/geometry/views/closeable_view.hpp>
+#include <boost/geometry/views/identity_view.hpp>
+#include <boost/geometry/views/reversible_view.hpp>
#include <boost/geometry/views/segment_view.hpp>
#include <boost/geometry/io/io.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
#include <boost/geometry/io/svg/svg_mapper.hpp>
+#include <boost/geometry/io/svg/write_svg.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
#endif // BOOST_GEOMETRY_GEOMETRY_HPP
diff --git a/3party/boost/boost/geometry/index/detail/algorithms/bounds.hpp b/3party/boost/boost/geometry/index/detail/algorithms/bounds.hpp
index 58c575d267..4d2416e98d 100644
--- a/3party/boost/boost/geometry/index/detail/algorithms/bounds.hpp
+++ b/3party/boost/boost/geometry/index/detail/algorithms/bounds.hpp
@@ -2,7 +2,7 @@
//
// n-dimensional bounds
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -11,6 +11,8 @@
#ifndef BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_BOUNDS_HPP
#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_BOUNDS_HPP
+#include <boost/geometry/index/detail/bounded_view.hpp>
+
namespace boost { namespace geometry { namespace index { namespace detail {
namespace dispatch {
@@ -27,6 +29,16 @@ struct bounds
}
};
+template <typename Geometry, typename Bounds>
+struct bounds<Geometry, Bounds, segment_tag, box_tag>
+{
+ static inline void apply(Geometry const& g, Bounds & b)
+ {
+ index::detail::bounded_view<Geometry, Bounds> v(g);
+ geometry::convert(v, b);
+ }
+};
+
} // namespace dispatch
template <typename Geometry, typename Bounds>
@@ -36,6 +48,43 @@ inline void bounds(Geometry const& g, Bounds & b)
dispatch::bounds<Geometry, Bounds>::apply(g, b);
}
+namespace dispatch {
+
+template <typename Geometry,
+ typename TagGeometry = typename geometry::tag<Geometry>::type>
+struct return_ref_or_bounds
+{
+ typedef Geometry const& result_type;
+
+ static inline result_type apply(Geometry const& g)
+ {
+ return g;
+ }
+};
+
+template <typename Geometry>
+struct return_ref_or_bounds<Geometry, segment_tag>
+{
+ typedef typename point_type<Geometry>::type point_type;
+ typedef geometry::model::box<point_type> bounds_type;
+ typedef index::detail::bounded_view<Geometry, bounds_type> result_type;
+
+ static inline result_type apply(Geometry const& g)
+ {
+ return result_type(g);
+ }
+};
+
+} // namespace dispatch
+
+template <typename Geometry>
+inline
+typename dispatch::return_ref_or_bounds<Geometry>::result_type
+return_ref_or_bounds(Geometry const& g)
+{
+ return dispatch::return_ref_or_bounds<Geometry>::apply(g);
+}
+
}}}} // namespace boost::geometry::index::detail
#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_BOUNDS_HPP
diff --git a/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp b/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp
index 841876eb31..c4e44cae18 100644
--- a/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp
+++ b/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp
@@ -2,7 +2,7 @@
//
// squared distance between point and centroid of the box or point
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -24,7 +24,7 @@ template <
size_t N>
struct sum_for_indexable<Point, PointIndexable, point_tag, comparable_distance_centroid_tag, N>
{
- typedef typename geometry::default_distance_result<Point, PointIndexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<Point, PointIndexable>::type result_type;
inline static result_type apply(Point const& pt, PointIndexable const& i)
{
@@ -38,7 +38,7 @@ template <
size_t DimensionIndex>
struct sum_for_indexable_dimension<Point, BoxIndexable, box_tag, comparable_distance_centroid_tag, DimensionIndex>
{
- typedef typename geometry::default_distance_result<Point, BoxIndexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<Point, BoxIndexable>::type result_type;
inline static result_type apply(Point const& pt, BoxIndexable const& i)
{
@@ -59,7 +59,7 @@ struct sum_for_indexable_dimension<Point, BoxIndexable, box_tag, comparable_dist
};
template <typename Point, typename Indexable>
-typename geometry::default_distance_result<Point, Indexable>::type
+typename geometry::default_comparable_distance_result<Point, Indexable>::type
comparable_distance_centroid(Point const& pt, Indexable const& i)
{
return detail::sum_for_indexable<
diff --git a/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp b/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp
index 07dfcfc0f0..214fbf6aaf 100644
--- a/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp
+++ b/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp
@@ -2,7 +2,7 @@
//
// squared distance between point and furthest point of the box or point
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -26,7 +26,7 @@ template <
size_t DimensionIndex>
struct sum_for_indexable_dimension<Point, BoxIndexable, box_tag, comparable_distance_far_tag, DimensionIndex>
{
- typedef typename geometry::default_distance_result<Point, BoxIndexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<Point, BoxIndexable>::type result_type;
inline static result_type apply(Point const& pt, BoxIndexable const& i)
{
@@ -49,7 +49,7 @@ struct sum_for_indexable_dimension<Point, BoxIndexable, box_tag, comparable_dist
};
template <typename Point, typename Indexable>
-typename geometry::default_distance_result<Point, Indexable>::type
+typename geometry::default_comparable_distance_result<Point, Indexable>::type
comparable_distance_far(Point const& pt, Indexable const& i)
{
return detail::sum_for_indexable<
diff --git a/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp b/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp
index 5584bf85e3..15368a7d24 100644
--- a/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp
+++ b/3party/boost/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp
@@ -2,7 +2,7 @@
//
// squared distance between point and nearest point of the box or point
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -23,7 +23,7 @@ template <
size_t N>
struct sum_for_indexable<Point, PointIndexable, point_tag, comparable_distance_near_tag, N>
{
- typedef typename geometry::default_distance_result<Point, PointIndexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<Point, PointIndexable>::type result_type;
inline static result_type apply(Point const& pt, PointIndexable const& i)
{
@@ -37,7 +37,7 @@ template <
size_t DimensionIndex>
struct sum_for_indexable_dimension<Point, BoxIndexable, box_tag, comparable_distance_near_tag, DimensionIndex>
{
- typedef typename geometry::default_distance_result<Point, BoxIndexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<Point, BoxIndexable>::type result_type;
inline static result_type apply(Point const& pt, BoxIndexable const& i)
{
@@ -60,7 +60,7 @@ struct sum_for_indexable_dimension<Point, BoxIndexable, box_tag, comparable_dist
};
template <typename Point, typename Indexable>
-typename geometry::default_distance_result<Point, Indexable>::type
+typename geometry::default_comparable_distance_result<Point, Indexable>::type
comparable_distance_near(Point const& pt, Indexable const& i)
{
return detail::sum_for_indexable<
diff --git a/3party/boost/boost/geometry/index/detail/algorithms/intersection_content.hpp b/3party/boost/boost/geometry/index/detail/algorithms/intersection_content.hpp
index 955d6eb654..8e3db45305 100644
--- a/3party/boost/boost/geometry/index/detail/algorithms/intersection_content.hpp
+++ b/3party/boost/boost/geometry/index/detail/algorithms/intersection_content.hpp
@@ -2,7 +2,7 @@
//
// boxes union/intersection area/volume
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -12,6 +12,7 @@
#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_INTERSECTION_CONTENT_HPP
#include <boost/geometry/algorithms/intersection.hpp>
+#include <boost/geometry/strategies/intersection.hpp>
#include <boost/geometry/index/detail/algorithms/content.hpp>
namespace boost { namespace geometry { namespace index { namespace detail {
diff --git a/3party/boost/boost/geometry/index/detail/algorithms/is_valid.hpp b/3party/boost/boost/geometry/index/detail/algorithms/is_valid.hpp
index 56c164daeb..ee42e39364 100644
--- a/3party/boost/boost/geometry/index/detail/algorithms/is_valid.hpp
+++ b/3party/boost/boost/geometry/index/detail/algorithms/is_valid.hpp
@@ -2,7 +2,7 @@
//
// n-dimensional box's / point validity check
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -66,6 +66,15 @@ struct is_valid<Indexable, box_tag>
}
};
+template <typename Indexable>
+struct is_valid<Indexable, segment_tag>
+{
+ static inline bool apply(Indexable const&)
+ {
+ return true;
+ }
+};
+
} // namespace dispatch
template <typename Indexable>
diff --git a/3party/boost/boost/geometry/index/detail/algorithms/minmaxdist.hpp b/3party/boost/boost/geometry/index/detail/algorithms/minmaxdist.hpp
index 680fb202b4..ab6291504f 100644
--- a/3party/boost/boost/geometry/index/detail/algorithms/minmaxdist.hpp
+++ b/3party/boost/boost/geometry/index/detail/algorithms/minmaxdist.hpp
@@ -2,7 +2,7 @@
//
// minmaxdist used in R-tree k nearest neighbors query
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -28,7 +28,7 @@ template <
size_t DimensionIndex>
struct smallest_for_indexable_dimension<Point, BoxIndexable, box_tag, minmaxdist_tag, DimensionIndex>
{
- typedef typename geometry::default_distance_result<Point, BoxIndexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<Point, BoxIndexable>::type result_type;
inline static result_type apply(Point const& pt, BoxIndexable const& i, result_type const& maxd)
{
@@ -73,7 +73,7 @@ struct minmaxdist_impl
template <typename Point, typename Indexable>
struct minmaxdist_impl<Point, Indexable, point_tag>
{
- typedef typename geometry::default_distance_result<Point, Indexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<Point, Indexable>::type result_type;
inline static result_type apply(Point const& pt, Indexable const& i)
{
@@ -84,7 +84,7 @@ struct minmaxdist_impl<Point, Indexable, point_tag>
template <typename Point, typename Indexable>
struct minmaxdist_impl<Point, Indexable, box_tag>
{
- typedef typename geometry::default_distance_result<Point, Indexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<Point, Indexable>::type result_type;
inline static result_type apply(Point const& pt, Indexable const& i)
{
@@ -104,7 +104,7 @@ struct minmaxdist_impl<Point, Indexable, box_tag>
* This is comparable distace.
*/
template <typename Point, typename Indexable>
-typename geometry::default_distance_result<Point, Indexable>::type
+typename geometry::default_comparable_distance_result<Point, Indexable>::type
minmaxdist(Point const& pt, Indexable const& i)
{
return detail::minmaxdist_impl<
diff --git a/3party/boost/boost/geometry/index/detail/algorithms/path_intersection.hpp b/3party/boost/boost/geometry/index/detail/algorithms/path_intersection.hpp
index a9e0f3dcb1..fe92596ba2 100644
--- a/3party/boost/boost/geometry/index/detail/algorithms/path_intersection.hpp
+++ b/3party/boost/boost/geometry/index/detail/algorithms/path_intersection.hpp
@@ -2,7 +2,7 @@
//
// n-dimensional box-linestring intersection
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -23,6 +23,11 @@ struct path_intersection
BOOST_MPL_ASSERT_MSG((false), NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_OR_INDEXABLE, (path_intersection));
};
+// TODO: FP type must be used as a relative distance type!
+// and default_distance_result can be some user-defined int type
+// BUT! This code is experimental and probably won't be released at all
+// since more flexible user-defined-nearest predicate should be added instead
+
template <typename Indexable, typename Segment>
struct path_intersection<Indexable, Segment, box_tag, segment_tag>
{
diff --git a/3party/boost/boost/geometry/index/detail/algorithms/segment_intersection.hpp b/3party/boost/boost/geometry/index/detail/algorithms/segment_intersection.hpp
index 4ae82c6bac..ec7a88f490 100644
--- a/3party/boost/boost/geometry/index/detail/algorithms/segment_intersection.hpp
+++ b/3party/boost/boost/geometry/index/detail/algorithms/segment_intersection.hpp
@@ -2,7 +2,7 @@
//
// n-dimensional box-segment intersection
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -34,8 +34,10 @@ namespace dispatch {
template <typename Box, typename Point, size_t I>
struct box_segment_intersection_dim
{
- BOOST_STATIC_ASSERT(I < dimension<Box>::value);
- BOOST_STATIC_ASSERT(I < dimension<Point>::value);
+ BOOST_STATIC_ASSERT(0 <= dimension<Box>::value);
+ BOOST_STATIC_ASSERT(0 <= dimension<Point>::value);
+ BOOST_STATIC_ASSERT(I < size_t(dimension<Box>::value));
+ BOOST_STATIC_ASSERT(I < size_t(dimension<Point>::value));
BOOST_STATIC_ASSERT(dimension<Point>::value == dimension<Box>::value);
// WARNING! - RelativeDistance must be IEEE float for this to work
@@ -108,6 +110,9 @@ struct segment_intersection<Indexable, Point, box_tag>
template <typename RelativeDistance>
static inline bool apply(Indexable const& b, Point const& p0, Point const& p1, RelativeDistance & relative_distance)
{
+
+// TODO: this ASSERT CHECK is wrong for user-defined CoordinateTypes!
+
static const bool check = !::boost::is_integral<RelativeDistance>::value;
BOOST_MPL_ASSERT_MSG(check, RELATIVE_DISTANCE_MUST_BE_FLOATING_POINT_TYPE, (RelativeDistance));
diff --git a/3party/boost/boost/geometry/index/detail/bounded_view.hpp b/3party/boost/boost/geometry/index/detail/bounded_view.hpp
new file mode 100644
index 0000000000..572368e273
--- /dev/null
+++ b/3party/boost/boost/geometry/index/detail/bounded_view.hpp
@@ -0,0 +1,185 @@
+// Boost.Geometry Index
+//
+// This view makes possible to treat some simple primitives as its bounding geometry
+// e.g. box, nsphere, etc.
+//
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+//
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_INDEX_DETAIL_BOUNDED_VIEW_HPP
+#define BOOST_GEOMETRY_INDEX_DETAIL_BOUNDED_VIEW_HPP
+
+namespace boost { namespace geometry {
+
+namespace index { namespace detail {
+
+template <typename Geometry,
+ typename BoundingGeometry,
+ typename Tag = typename geometry::tag<Geometry>::type,
+ typename BoundingTag = typename geometry::tag<BoundingGeometry>::type>
+struct bounded_view
+{
+ BOOST_MPL_ASSERT_MSG(
+ (false),
+ NOT_IMPLEMENTED_FOR_THOSE_GEOMETRIES,
+ (BoundingTag, Tag));
+};
+
+
+// Segment -> Box
+
+template <typename Segment, typename Box>
+struct bounded_view<Segment, Box, segment_tag, box_tag>
+{
+public:
+ typedef typename geometry::coordinate_type<Box>::type coordinate_type;
+
+ explicit bounded_view(Segment const& segment)
+ : m_segment(segment)
+ {}
+
+ template <std::size_t Dimension>
+ inline coordinate_type get_min() const
+ {
+ return boost::numeric_cast<coordinate_type>(
+ (std::min)( geometry::get<0, Dimension>(m_segment),
+ geometry::get<1, Dimension>(m_segment) ) );
+ }
+
+ template <std::size_t Dimension>
+ inline coordinate_type get_max() const
+ {
+ return boost::numeric_cast<coordinate_type>(
+ (std::max)( geometry::get<0, Dimension>(m_segment),
+ geometry::get<1, Dimension>(m_segment) ) );
+ }
+
+private:
+ Segment const& m_segment;
+};
+
+// Box -> Box
+
+template <typename BoxIn, typename Box>
+struct bounded_view<BoxIn, Box, box_tag, box_tag>
+{
+public:
+ typedef typename geometry::coordinate_type<Box>::type coordinate_type;
+
+ explicit bounded_view(BoxIn const& box)
+ : m_box(box)
+ {}
+
+ template <std::size_t Dimension>
+ inline coordinate_type get_min() const
+ {
+ return boost::numeric_cast<coordinate_type>(
+ geometry::get<min_corner, Dimension>(m_box) );
+ }
+
+ template <std::size_t Dimension>
+ inline coordinate_type get_max() const
+ {
+ return boost::numeric_cast<coordinate_type>(
+ geometry::get<max_corner, Dimension>(m_box) );
+ }
+
+private:
+ BoxIn const& m_box;
+};
+
+// Point -> Box
+
+template <typename Point, typename Box>
+struct bounded_view<Point, Box, point_tag, box_tag>
+{
+public:
+ typedef typename geometry::coordinate_type<Box>::type coordinate_type;
+
+ explicit bounded_view(Point const& point)
+ : m_point(point)
+ {}
+
+ template <std::size_t Dimension>
+ inline coordinate_type get_min() const
+ {
+ return boost::numeric_cast<coordinate_type>(
+ geometry::get<Dimension>(m_point) );
+ }
+
+ template <std::size_t Dimension>
+ inline coordinate_type get_max() const
+ {
+ return boost::numeric_cast<coordinate_type>(
+ geometry::get<Dimension>(m_point) );
+ }
+
+private:
+ Point const& m_point;
+};
+
+}} // namespace index::detail
+
+// XXX -> Box
+
+#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+namespace traits
+{
+
+template <typename Geometry, typename Box, typename Tag>
+struct tag< index::detail::bounded_view<Geometry, Box, Tag, box_tag> >
+{
+ typedef box_tag type;
+};
+
+template <typename Segment, typename Box, typename Tag>
+struct point_type< index::detail::bounded_view<Segment, Box, Tag, box_tag> >
+{
+ typedef typename point_type<Box>::type type;
+};
+
+template <typename Segment, typename Box, typename Tag, std::size_t Dimension>
+struct indexed_access<index::detail::bounded_view<Segment, Box, Tag, box_tag>,
+ min_corner, Dimension>
+{
+ typedef index::detail::bounded_view<Segment, Box, Tag, box_tag> box_type;
+ typedef typename geometry::coordinate_type<Box>::type coordinate_type;
+
+ static inline coordinate_type get(box_type const& b)
+ {
+ return b.template get_min<Dimension>();
+ }
+
+ //static inline void set(box_type & b, coordinate_type const& value)
+ //{
+ // BOOST_ASSERT(false);
+ //}
+};
+
+template <typename Segment, typename Box, typename Tag, std::size_t Dimension>
+struct indexed_access<index::detail::bounded_view<Segment, Box, Tag, box_tag>,
+ max_corner, Dimension>
+{
+ typedef index::detail::bounded_view<Segment, Box, Tag, box_tag> box_type;
+ typedef typename geometry::coordinate_type<Box>::type coordinate_type;
+
+ static inline coordinate_type get(box_type const& b)
+ {
+ return b.template get_max<Dimension>();
+ }
+
+ //static inline void set(box_type & b, coordinate_type const& value)
+ //{
+ // BOOST_ASSERT(false);
+ //}
+};
+
+} // namespace traits
+#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_INDEX_DETAIL_BOUNDED_VIEW_HPP
diff --git a/3party/boost/boost/geometry/index/detail/distance_predicates.hpp b/3party/boost/boost/geometry/index/detail/distance_predicates.hpp
index c5c2c4c51e..3e057290a6 100644
--- a/3party/boost/boost/geometry/index/detail/distance_predicates.hpp
+++ b/3party/boost/boost/geometry/index/detail/distance_predicates.hpp
@@ -3,7 +3,7 @@
// Spatial index distance predicates, calculators and checkers
// used in nearest query - specialized for envelopes
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -108,11 +108,11 @@ struct calculate_distance< nearest<PointRelation>, Indexable, Tag >
{
typedef detail::relation<PointRelation> relation;
typedef typename relation::value_type point_type;
- typedef typename geometry::default_distance_result<point_type, Indexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<point_type, Indexable>::type result_type;
static inline bool apply(nearest<PointRelation> const& p, Indexable const& i, result_type & result)
{
- result = index::detail::comparable_distance_near(relation::value(p.point_or_relation), i);
+ result = geometry::comparable_distance(relation::value(p.point_or_relation), i);
return true;
}
};
@@ -121,7 +121,7 @@ template <typename Point, typename Indexable>
struct calculate_distance< nearest< to_centroid<Point> >, Indexable, value_tag>
{
typedef Point point_type;
- typedef typename geometry::default_distance_result<point_type, Indexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<point_type, Indexable>::type result_type;
static inline bool apply(nearest< to_centroid<Point> > const& p, Indexable const& i, result_type & result)
{
@@ -134,7 +134,7 @@ template <typename Point, typename Indexable>
struct calculate_distance< nearest< to_furthest<Point> >, Indexable, value_tag>
{
typedef Point point_type;
- typedef typename geometry::default_distance_result<point_type, Indexable>::type result_type;
+ typedef typename geometry::default_comparable_distance_result<point_type, Indexable>::type result_type;
static inline bool apply(nearest< to_furthest<Point> > const& p, Indexable const& i, result_type & result)
{
diff --git a/3party/boost/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp b/3party/boost/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp
index 45bd18a79d..bfe603001f 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp
@@ -3,7 +3,7 @@
// R-tree linear split algorithm implementation
//
// Copyright (c) 2008 Federico J. Fernandez.
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,6 +15,7 @@
#include <boost/type_traits/is_unsigned.hpp>
#include <boost/geometry/index/detail/algorithms/content.hpp>
+#include <boost/geometry/index/detail/bounded_view.hpp>
#include <boost/geometry/index/detail/rtree/node/node.hpp>
#include <boost/geometry/index/detail/rtree/visitors/insert.hpp>
@@ -76,12 +77,6 @@ inline R difference(T const& from, T const& to)
template <typename Elements, typename Parameters, typename Translator, typename Tag, size_t DimensionIndex>
struct find_greatest_normalized_separation
{
- BOOST_MPL_ASSERT_MSG(false, NOT_IMPLEMENTED_FOR_THIS_TAG, (Tag));
-};
-
-template <typename Elements, typename Parameters, typename Translator, size_t DimensionIndex>
-struct find_greatest_normalized_separation<Elements, Parameters, Translator, box_tag, DimensionIndex>
-{
typedef typename Elements::value_type element_type;
typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
typedef typename coordinate_type<indexable_type>::type coordinate_type;
@@ -92,6 +87,10 @@ struct find_greatest_normalized_separation<Elements, Parameters, Translator, box
coordinate_type
>::type separation_type;
+ typedef typename geometry::point_type<indexable_type>::type point_type;
+ typedef geometry::model::box<point_type> bounds_type;
+ typedef index::detail::bounded_view<indexable_type, bounds_type> bounded_view_type;
+
static inline void apply(Elements const& elements,
Parameters const& parameters,
Translator const& translator,
@@ -104,15 +103,18 @@ struct find_greatest_normalized_separation<Elements, Parameters, Translator, box
BOOST_GEOMETRY_INDEX_ASSERT(2 <= elements_count, "unexpected number of elements");
// find the lowest low, highest high
- coordinate_type lowest_low = geometry::get<min_corner, DimensionIndex>(rtree::element_indexable(elements[0], translator));
- coordinate_type highest_high = geometry::get<max_corner, DimensionIndex>(rtree::element_indexable(elements[0], translator));
+ bounded_view_type bounded_indexable_0(rtree::element_indexable(elements[0], translator));
+ coordinate_type lowest_low = geometry::get<min_corner, DimensionIndex>(bounded_indexable_0);
+ coordinate_type highest_high = geometry::get<max_corner, DimensionIndex>(bounded_indexable_0);
+
// and the lowest high
coordinate_type lowest_high = highest_high;
size_t lowest_high_index = 0;
for ( size_t i = 1 ; i < elements_count ; ++i )
{
- coordinate_type min_coord = geometry::get<min_corner, DimensionIndex>(rtree::element_indexable(elements[i], translator));
- coordinate_type max_coord = geometry::get<max_corner, DimensionIndex>(rtree::element_indexable(elements[i], translator));
+ bounded_view_type bounded_indexable(rtree::element_indexable(elements[i], translator));
+ coordinate_type min_coord = geometry::get<min_corner, DimensionIndex>(bounded_indexable);
+ coordinate_type max_coord = geometry::get<max_corner, DimensionIndex>(bounded_indexable);
if ( max_coord < lowest_high )
{
@@ -129,10 +131,12 @@ struct find_greatest_normalized_separation<Elements, Parameters, Translator, box
// find the highest low
size_t highest_low_index = lowest_high_index == 0 ? 1 : 0;
- coordinate_type highest_low = geometry::get<min_corner, DimensionIndex>(rtree::element_indexable(elements[highest_low_index], translator));
+ bounded_view_type bounded_indexable_hl(rtree::element_indexable(elements[highest_low_index], translator));
+ coordinate_type highest_low = geometry::get<min_corner, DimensionIndex>(bounded_indexable_hl);
for ( size_t i = highest_low_index ; i < elements_count ; ++i )
{
- coordinate_type min_coord = geometry::get<min_corner, DimensionIndex>(rtree::element_indexable(elements[i], translator));
+ bounded_view_type bounded_indexable(rtree::element_indexable(elements[i], translator));
+ coordinate_type min_coord = geometry::get<min_corner, DimensionIndex>(bounded_indexable);
if ( highest_low < min_coord &&
i != lowest_high_index )
{
@@ -325,7 +329,6 @@ struct redistribute_elements<Value, Options, Translator, Box, Allocators, linear
typedef typename rtree::elements_type<Node>::type elements_type;
typedef typename elements_type::value_type element_type;
typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
- typedef typename coordinate_type<indexable_type>::type coordinate_type;
typedef typename index::detail::default_content_result<Box>::type content_type;
elements_type & elements1 = rtree::elements(n);
@@ -335,6 +338,7 @@ struct redistribute_elements<Value, Options, Translator, Box, Allocators, linear
BOOST_GEOMETRY_INDEX_ASSERT(elements1.size() == elements1_count, "unexpected number of elements");
// copy original elements
+ // TODO: use container_from_elements_type for std::allocator
elements_type elements_copy(elements1); // MAY THROW, STRONG (alloc, copy)
// calculate initial seeds
diff --git a/3party/boost/boost/geometry/index/detail/rtree/node/node_auto_ptr.hpp b/3party/boost/boost/geometry/index/detail/rtree/node/node_auto_ptr.hpp
index 359d4380d9..c19e123b62 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/node/node_auto_ptr.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/node/node_auto_ptr.hpp
@@ -17,6 +17,8 @@ namespace boost { namespace geometry { namespace index {
namespace detail { namespace rtree {
+// TODO - change the name to node_scoped_ptr
+
template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
class node_auto_ptr
{
diff --git a/3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_dynamic.hpp b/3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_dynamic.hpp
index 832335f24a..1e3cd58d57 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_dynamic.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_dynamic.hpp
@@ -183,9 +183,9 @@ public:
typename node<Value, Parameters, Box, allocators, node_d_mem_dynamic_tag>::type
>::other::pointer node_pointer;
- typedef typename Allocator::template rebind<
- typename internal_node<Value, Parameters, Box, allocators, node_d_mem_dynamic_tag>::type
- >::other::pointer internal_node_pointer;
+// typedef typename Allocator::template rebind<
+// typename internal_node<Value, Parameters, Box, allocators, node_d_mem_dynamic_tag>::type
+// >::other::pointer internal_node_pointer;
typedef typename Allocator::template rebind<
typename internal_node<Value, Parameters, Box, allocators, node_d_mem_dynamic_tag>::type
diff --git a/3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_static.hpp b/3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_static.hpp
index bfbe0ae93b..184c48e44e 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_static.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/node/node_d_mem_static.hpp
@@ -130,9 +130,9 @@ public:
typename node<Value, Parameters, Box, allocators, node_d_mem_static_tag>::type
>::other::pointer node_pointer;
- typedef typename Allocator::template rebind<
- typename internal_node<Value, Parameters, Box, allocators, node_d_mem_static_tag>::type
- >::other::pointer internal_node_pointer;
+// typedef typename Allocator::template rebind<
+// typename internal_node<Value, Parameters, Box, allocators, node_d_mem_static_tag>::type
+// >::other::pointer internal_node_pointer;
typedef typename Allocator::template rebind<
typename internal_node<Value, Parameters, Box, allocators, node_d_mem_static_tag>::type
diff --git a/3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_dynamic.hpp b/3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_dynamic.hpp
index a37856c55e..8cf7c9c0d7 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_dynamic.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_dynamic.hpp
@@ -115,9 +115,9 @@ public:
typename node<Value, Parameters, Box, allocators, node_s_mem_dynamic_tag>::type
>::other::pointer node_pointer;
- typedef typename Allocator::template rebind<
- typename internal_node<Value, Parameters, Box, allocators, node_s_mem_dynamic_tag>::type
- >::other::pointer internal_node_pointer;
+// typedef typename Allocator::template rebind<
+// typename internal_node<Value, Parameters, Box, allocators, node_s_mem_dynamic_tag>::type
+// >::other::pointer internal_node_pointer;
typedef typename Allocator::template rebind<
typename node<Value, Parameters, Box, allocators, node_s_mem_dynamic_tag>::type
diff --git a/3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_static.hpp b/3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_static.hpp
index fa9fb456f7..5df869c954 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_static.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/node/node_s_mem_static.hpp
@@ -111,9 +111,9 @@ public:
typename node<Value, Parameters, Box, allocators, node_s_mem_static_tag>::type
>::other::pointer node_pointer;
- typedef typename Allocator::template rebind<
- typename internal_node<Value, Parameters, Box, allocators, node_s_mem_static_tag>::type
- >::other::pointer internal_node_pointer;
+// typedef typename Allocator::template rebind<
+// typename internal_node<Value, Parameters, Box, allocators, node_s_mem_static_tag>::type
+// >::other::pointer internal_node_pointer;
typedef typename Allocator::template rebind<
typename node<Value, Parameters, Box, allocators, node_s_mem_static_tag>::type
@@ -175,7 +175,7 @@ struct create_node<
return create_static_node<
typename Allocators::node_pointer,
static_internal_node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
- >::template apply(allocators.node_allocator());
+ >::apply(allocators.node_allocator());
}
};
@@ -191,7 +191,7 @@ struct create_node<
return create_static_node<
typename Allocators::node_pointer,
static_leaf<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
- >::template apply(allocators.node_allocator());
+ >::apply(allocators.node_allocator());
}
};
diff --git a/3party/boost/boost/geometry/index/detail/rtree/options.hpp b/3party/boost/boost/geometry/index/detail/rtree/options.hpp
index b1bb60df1f..b7947402cb 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/options.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/options.hpp
@@ -66,7 +66,7 @@ struct options_type< index::linear<MaxElements, MinElements> >
choose_by_content_diff_tag,
split_default_tag,
linear_tag,
- node_d_mem_static_tag
+ node_s_mem_static_tag
> type;
};
@@ -79,7 +79,7 @@ struct options_type< index::quadratic<MaxElements, MinElements> >
choose_by_content_diff_tag,
split_default_tag,
quadratic_tag,
- node_d_mem_static_tag
+ node_s_mem_static_tag
> type;
};
@@ -92,7 +92,7 @@ struct options_type< index::rstar<MaxElements, MinElements, OverlapCostThreshold
choose_by_overlap_diff_tag,
split_default_tag,
rstar_tag,
- node_d_mem_static_tag
+ node_s_mem_static_tag
> type;
};
@@ -105,7 +105,7 @@ struct options_type< index::rstar<MaxElements, MinElements, OverlapCostThreshold
// choose_by_content_diff_tag, // change it?
// split_kmeans_tag,
// int, // dummy tag - not used for now
-// node_d_mem_static_tag
+// node_s_mem_static_tag
// > type;
//};
@@ -118,7 +118,7 @@ struct options_type< index::dynamic_linear >
choose_by_content_diff_tag,
split_default_tag,
linear_tag,
- node_d_mem_dynamic_tag
+ node_s_mem_dynamic_tag
> type;
};
@@ -131,7 +131,7 @@ struct options_type< index::dynamic_quadratic >
choose_by_content_diff_tag,
split_default_tag,
quadratic_tag,
- node_d_mem_dynamic_tag
+ node_s_mem_dynamic_tag
> type;
};
@@ -144,7 +144,7 @@ struct options_type< index::dynamic_rstar >
choose_by_overlap_diff_tag,
split_default_tag,
rstar_tag,
- node_d_mem_dynamic_tag
+ node_s_mem_dynamic_tag
> type;
};
diff --git a/3party/boost/boost/geometry/index/detail/rtree/pack_create.hpp b/3party/boost/boost/geometry/index/detail/rtree/pack_create.hpp
index 44292f18cb..e3ac16aefa 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/pack_create.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/pack_create.hpp
@@ -2,7 +2,7 @@
//
// R-tree initial packing
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -55,14 +55,14 @@ struct point_entries_comparer
};
template <std::size_t I, std::size_t Dimension>
-struct partial_sort_and_half_boxes
+struct nth_element_and_half_boxes
{
template <typename EIt, typename Box>
static inline void apply(EIt first, EIt median, EIt last, Box const& box, Box & left, Box & right, std::size_t dim_index)
{
if ( I == dim_index )
{
- std::partial_sort(first, median, last, point_entries_comparer<I>());
+ std::nth_element(first, median, last, point_entries_comparer<I>());
geometry::convert(box, left);
geometry::convert(box, right);
@@ -74,12 +74,12 @@ struct partial_sort_and_half_boxes
geometry::set<min_corner, I>(right, median);
}
else
- partial_sort_and_half_boxes<I+1, Dimension>::apply(first, median, last, box, left, right, dim_index);
+ nth_element_and_half_boxes<I+1, Dimension>::apply(first, median, last, box, left, right, dim_index);
}
};
template <std::size_t Dimension>
-struct partial_sort_and_half_boxes<Dimension, Dimension>
+struct nth_element_and_half_boxes<Dimension, Dimension>
{
template <typename EIt, typename Box>
static inline void apply(EIt , EIt , EIt , Box const& , Box & , Box & , std::size_t ) {}
@@ -278,7 +278,7 @@ private:
std::size_t greatest_dim_index = 0;
pack_utils::biggest_edge<dimension>::apply(hint_box, greatest_length, greatest_dim_index);
Box left, right;
- pack_utils::partial_sort_and_half_boxes<0, dimension>
+ pack_utils::nth_element_and_half_boxes<0, dimension>
::apply(first, median, last, hint_box, left, right, greatest_dim_index);
per_level_packets(first, median, left,
@@ -294,7 +294,7 @@ private:
inline static
subtree_elements_counts calculate_subtree_elements_counts(std::size_t elements_count, parameters_type const& parameters, size_type & leafs_level)
{
- (void)parameters;
+ boost::ignore_unused_variable_warning(parameters);
subtree_elements_counts res(1, 1);
leafs_level = 0;
diff --git a/3party/boost/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp b/3party/boost/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp
index d18998970f..c7e948a05e 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp
@@ -2,7 +2,7 @@
//
// R-tree quadratic split algorithm implementation
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -16,6 +16,8 @@
#include <boost/geometry/index/detail/algorithms/content.hpp>
#include <boost/geometry/index/detail/algorithms/union_content.hpp>
+#include <boost/geometry/index/detail/bounded_view.hpp>
+
#include <boost/geometry/index/detail/rtree/node/node.hpp>
#include <boost/geometry/index/detail/rtree/visitors/insert.hpp>
#include <boost/geometry/index/detail/rtree/visitors/is_leaf.hpp>
@@ -34,6 +36,7 @@ struct pick_seeds
typedef typename coordinate_type<indexable_type>::type coordinate_type;
typedef Box box_type;
typedef typename index::detail::default_content_result<box_type>::type content_type;
+ typedef index::detail::bounded_view<indexable_type, box_type> bounded_indexable_view;
static inline void apply(Elements const& elements,
Parameters const& parameters,
@@ -61,7 +64,11 @@ struct pick_seeds
detail::bounds(ind1, enlarged_box);
geometry::expand(enlarged_box, ind2);
- content_type free_content = (index::detail::content(enlarged_box) - index::detail::content(ind1)) - index::detail::content(ind2);
+ bounded_indexable_view bounded_ind1(ind1);
+ bounded_indexable_view bounded_ind2(ind2);
+ content_type free_content = ( index::detail::content(enlarged_box)
+ - index::detail::content(bounded_ind1) )
+ - index::detail::content(bounded_ind2);
if ( greatest_free_content < free_content )
{
@@ -101,7 +108,6 @@ struct redistribute_elements<Value, Options, Translator, Box, Allocators, quadra
typedef typename rtree::elements_type<Node>::type elements_type;
typedef typename elements_type::value_type element_type;
typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
- typedef typename coordinate_type<indexable_type>::type coordinate_type;
elements_type & elements1 = rtree::elements(n);
elements_type & elements2 = rtree::elements(second_node);
@@ -109,6 +115,7 @@ struct redistribute_elements<Value, Options, Translator, Box, Allocators, quadra
BOOST_GEOMETRY_INDEX_ASSERT(elements1.size() == parameters.get_max_elements() + 1, "unexpected elements number");
// copy original elements
+ // TODO: use container_from_elements_type for std::allocator
elements_type elements_copy(elements1); // MAY THROW, STRONG (alloc, copy)
elements_type elements_backup(elements1); // MAY THROW, STRONG (alloc, copy)
diff --git a/3party/boost/boost/geometry/index/detail/rtree/query_iterators.hpp b/3party/boost/boost/geometry/index/detail/rtree/query_iterators.hpp
index 8d0dbdd9d9..8366fca191 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/query_iterators.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/query_iterators.hpp
@@ -11,9 +11,12 @@
#ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUERY_ITERATORS_HPP
#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUERY_ITERATORS_HPP
-namespace boost { namespace geometry { namespace index {
+#define BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_VIRTUAL
+//#define BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_FUNCTION
+//#define BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_TYPE_ERASURE
+//#define BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
-namespace detail { namespace rtree {
+namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace iterators {
template <typename Value, typename Allocators>
struct end_query_iterator
@@ -50,15 +53,10 @@ struct end_query_iterator
return *this;
}
- friend bool operator==(end_query_iterator l, end_query_iterator r)
+ friend bool operator==(end_query_iterator const& /*l*/, end_query_iterator const& /*r*/)
{
return true;
}
-
- friend bool operator!=(end_query_iterator l, end_query_iterator r)
- {
- return false;
- }
};
template <typename Value, typename Options, typename Translator, typename Box, typename Allocators, typename Predicates>
@@ -81,8 +79,7 @@ public:
inline spatial_query_iterator(node_pointer root, Translator const& t, Predicates const& p)
: m_visitor(t, p)
{
- detail::rtree::apply_visitor(m_visitor, *root);
- m_visitor.increment();
+ m_visitor.initialize(root);
}
reference operator*() const
@@ -113,30 +110,15 @@ public:
return l.m_visitor == r.m_visitor;
}
- friend bool operator==(spatial_query_iterator const& l, end_query_iterator<Value, Allocators>)
+ friend bool operator==(spatial_query_iterator const& l, end_query_iterator<Value, Allocators> const& /*r*/)
{
return l.m_visitor.is_end();
}
- friend bool operator==(end_query_iterator<Value, Allocators>, spatial_query_iterator const& r)
+ friend bool operator==(end_query_iterator<Value, Allocators> const& /*l*/, spatial_query_iterator const& r)
{
return r.m_visitor.is_end();
}
-
- friend bool operator!=(spatial_query_iterator const& l, spatial_query_iterator const& r)
- {
- return !(l.m_visitor == r.m_visitor);
- }
-
- friend bool operator!=(spatial_query_iterator const& l, end_query_iterator<Value, Allocators>)
- {
- return !l.m_visitor.is_end();
- }
-
- friend bool operator!=(end_query_iterator<Value, Allocators>, spatial_query_iterator const& r)
- {
- return !r.m_visitor.is_end();
- }
private:
visitor_type m_visitor;
@@ -162,8 +144,7 @@ public:
inline distance_query_iterator(node_pointer root, Translator const& t, Predicates const& p)
: m_visitor(t, p)
{
- detail::rtree::apply_visitor(m_visitor, *root);
- m_visitor.increment();
+ m_visitor.initialize(root);
}
reference operator*() const
@@ -194,37 +175,425 @@ public:
return l.m_visitor == r.m_visitor;
}
- friend bool operator==(distance_query_iterator const& l, end_query_iterator<Value, Allocators>)
+ friend bool operator==(distance_query_iterator const& l, end_query_iterator<Value, Allocators> const& /*r*/)
{
return l.m_visitor.is_end();
}
- friend bool operator==(end_query_iterator<Value, Allocators>, distance_query_iterator const& r)
+ friend bool operator==(end_query_iterator<Value, Allocators> const& /*l*/, distance_query_iterator const& r)
{
return r.m_visitor.is_end();
}
- friend bool operator!=(distance_query_iterator const& l, distance_query_iterator const& r)
+private:
+ visitor_type m_visitor;
+};
+
+template <typename L, typename R>
+inline bool operator!=(L const& l, R const& r)
+{
+ return !(l == r);
+}
+
+}}}}}} // namespace boost::geometry::index::detail::rtree::iterators
+
+#if defined(BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_VIRTUAL) || defined(BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_FUNCTION)
+
+#if defined(BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_VIRTUAL)
+
+namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace iterators {
+
+template <typename Value, typename Allocators>
+class query_iterator_base
+{
+public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef Value value_type;
+ typedef typename Allocators::const_reference reference;
+ typedef typename Allocators::difference_type difference_type;
+ typedef typename Allocators::const_pointer pointer;
+
+ virtual ~query_iterator_base() {}
+
+ virtual query_iterator_base * clone() const = 0;
+
+ virtual bool is_end() const = 0;
+ virtual reference dereference() const = 0;
+ virtual void increment() = 0;
+ virtual bool equals(query_iterator_base const&) const = 0;
+};
+
+template <typename Value, typename Allocators, typename Iterator>
+class query_iterator_wrapper
+ : public query_iterator_base<Value, Allocators>
+{
+ typedef query_iterator_base<Value, Allocators> base_t;
+
+public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef Value value_type;
+ typedef typename Allocators::const_reference reference;
+ typedef typename Allocators::difference_type difference_type;
+ typedef typename Allocators::const_pointer pointer;
+
+ explicit query_iterator_wrapper(Iterator const& it) : m_iterator(it) {}
+
+ virtual base_t * clone() const { return new query_iterator_wrapper(m_iterator); }
+
+ virtual bool is_end() const { return m_iterator == end_query_iterator<Value, Allocators>(); }
+ virtual reference dereference() const { return *m_iterator; }
+ virtual void increment() { ++m_iterator; }
+ virtual bool equals(base_t const& r) const
{
- return !(l.m_visitor == r.m_visitor);
+ const query_iterator_wrapper * p = dynamic_cast<const query_iterator_wrapper *>(boost::addressof(r));
+ BOOST_ASSERT_MSG(p, "those iterators can't be compared");
+ return m_iterator == p->m_iterator;
}
- friend bool operator!=(distance_query_iterator const& l, end_query_iterator<Value, Allocators>)
+private:
+ Iterator m_iterator;
+};
+
+#elif defined(BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_FUNCTION)
+
+#include <boost/function.hpp>
+#include <boost/bind.hpp>
+
+namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace iterators {
+
+template <typename Value, typename Allocators>
+class query_iterator_base
+{
+public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef Value value_type;
+ typedef typename Allocators::const_reference reference;
+ typedef typename Allocators::difference_type difference_type;
+ typedef typename Allocators::const_pointer pointer;
+
+ virtual ~query_iterator_base() {}
+
+ boost::function<query_iterator_base*()> clone;
+ boost::function<bool()> is_end;
+ boost::function<reference()> dereference;
+ boost::function<void()> increment;
+ boost::function<bool(query_iterator_base const&)> equals;
+};
+
+template <typename Value, typename Allocators, typename Iterator>
+class query_iterator_wrapper
+ : public query_iterator_base<Value, Allocators>
+{
+ typedef query_iterator_base<Value, Allocators> base_t;
+
+public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef Value value_type;
+ typedef typename Allocators::const_reference reference;
+ typedef typename Allocators::difference_type difference_type;
+ typedef typename Allocators::const_pointer pointer;
+
+ explicit query_iterator_wrapper(Iterator const& it)
+ : m_iterator(it)
{
- return !l.m_visitor.is_end();
+ base_t::clone = boost::bind(&query_iterator_wrapper::clone_, this);
+ base_t::is_end = boost::bind(&query_iterator_wrapper::is_end_, this);
+ base_t::dereference = boost::bind(&query_iterator_wrapper::dereference_, this);
+ base_t::increment = boost::bind(&query_iterator_wrapper::increment_, this);
+ base_t::equals = boost::bind(&query_iterator_wrapper::equals_, this, _1);
}
- friend bool operator!=(end_query_iterator<Value, Allocators>, distance_query_iterator const& r)
+private:
+ base_t * clone_() const { return new query_iterator_wrapper(m_iterator); }
+
+ bool is_end_() const { return m_iterator == end_query_iterator<Value, Allocators>(); }
+ reference dereference_() const { return *m_iterator; }
+ void increment_() { ++m_iterator; }
+ bool equals_(base_t const& r) const
{
- return !r.m_visitor.is_end();
+ const query_iterator_wrapper * p = dynamic_cast<const query_iterator_wrapper *>(boost::addressof(r));
+ BOOST_ASSERT_MSG(p, "those iterators can't be compared");
+ return m_iterator == p->m_iterator;
}
private:
- visitor_type m_visitor;
+ Iterator m_iterator;
+};
+
+#endif
+
+template <typename Value, typename Allocators>
+class query_iterator
+{
+ typedef query_iterator_base<Value, Allocators> iterator_base;
+ typedef std::auto_ptr<iterator_base> iterator_ptr;
+
+public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef Value value_type;
+ typedef typename Allocators::const_reference reference;
+ typedef typename Allocators::difference_type difference_type;
+ typedef typename Allocators::const_pointer pointer;
+
+ query_iterator() {}
+
+ template <typename It>
+ query_iterator(It const& it)
+ : m_ptr(static_cast<iterator_base*>(
+ new query_iterator_wrapper<Value, Allocators, It>(it) ))
+ {}
+
+ query_iterator(end_query_iterator<Value, Allocators> const& /*it*/)
+ {}
+
+ query_iterator(query_iterator const& o)
+ : m_ptr(o.m_ptr.get() ? o.m_ptr->clone() : 0)
+ {}
+
+#ifndef BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
+ query_iterator & operator=(query_iterator const& o)
+ {
+ m_ptr.reset(o.m_ptr.get() ? o.m_ptr->clone() : 0);
+ return *this;
+ }
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ query_iterator(query_iterator && o)
+ : m_ptr(o.m_ptr.get())
+ {
+ o.m_ptr.release();
+ }
+ query_iterator & operator=(query_iterator && o)
+ {
+ if ( this != boost::addressof(o) )
+ {
+ m_ptr.reset(o.m_ptr.get());
+ o.m_ptr.release();
+ }
+ return *this;
+ }
+#endif
+#else // !BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
+private:
+ BOOST_COPYABLE_AND_MOVABLE(query_iterator)
+public:
+ query_iterator & operator=(BOOST_COPY_ASSIGN_REF(query_iterator) o)
+ {
+ m_ptr.reset(o.m_ptr.get() ? o.m_ptr->clone() : 0);
+ return *this;
+ }
+ query_iterator(BOOST_RV_REF(query_iterator) o)
+ : m_ptr(o.m_ptr.get())
+ {
+ o.m_ptr.release();
+ }
+ query_iterator & operator=(BOOST_RV_REF(query_iterator) o)
+ {
+ if ( this != boost::addressof(o) )
+ {
+ m_ptr.reset(o.m_ptr.get());
+ o.m_ptr.release();
+ }
+ return *this;
+ }
+#endif // BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
+
+ reference operator*() const
+ {
+ return m_ptr->dereference();
+ }
+
+ const value_type * operator->() const
+ {
+ return boost::addressof(m_ptr->dereference());
+ }
+
+ query_iterator & operator++()
+ {
+ m_ptr->increment();
+ return *this;
+ }
+
+ query_iterator operator++(int)
+ {
+ query_iterator temp = *this;
+ this->operator++();
+ return temp;
+ }
+
+ friend bool operator==(query_iterator const& l, query_iterator const& r)
+ {
+ if ( l.m_ptr.get() )
+ {
+ if ( r.m_ptr.get() )
+ return l.m_ptr->equals(*r.m_ptr);
+ else
+ return l.m_ptr->is_end();
+ }
+ else
+ {
+ if ( r.m_ptr.get() )
+ return r.m_ptr->is_end();
+ else
+ return true;
+ }
+ }
+
+private:
+ iterator_ptr m_ptr;
+};
+
+}}}}}} // namespace boost::geometry::index::detail::rtree::iterators
+
+#elif defined(BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_TYPE_ERASURE)
+
+#include <boost/type_erasure/any.hpp>
+#include <boost/type_erasure/operators.hpp>
+#include <boost/type_erasure/is_empty.hpp>
+
+namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace iterators {
+
+template<typename T, typename Value, typename Allocators>
+struct single_pass_iterator_concept :
+ ::boost::mpl::vector<
+ ::boost::type_erasure::copy_constructible<T>,
+ ::boost::type_erasure::equality_comparable<T>,
+ ::boost::type_erasure::dereferenceable<typename Allocators::const_reference, T>,
+ ::boost::type_erasure::assignable<T>,
+ ::boost::type_erasure::incrementable<T>,
+ ::boost::type_erasure::equality_comparable<T, end_query_iterator<Value, Allocators> >,
+ ::boost::type_erasure::relaxed // default ctor
+ >
+{};
+
+template <typename Value, typename Allocators>
+struct single_pass_iterator_type
+{
+ typedef ::boost::type_erasure::any<
+ single_pass_iterator_concept<
+ ::boost::type_erasure::_self, Value, Allocators
+ >
+ > type;
+};
+
+}}}}}} // namespace boost::geometry::index::detail::rtree::iterators
+
+namespace boost { namespace type_erasure {
+
+template<typename T, typename Value, typename Allocators, typename Base>
+struct concept_interface<
+ ::boost::geometry::index::detail::rtree::single_pass_iterator_concept<
+ T, Value, Allocators
+ >, Base, T>
+ : Base
+{
+ typedef Value value_type;
+ typedef typename Allocators::const_reference reference;
+ typedef typename Allocators::const_pointer pointer;
+ typedef typename Allocators::difference_type difference_type;
+ typedef ::std::input_iterator_tag iterator_category;
+};
+
+}} // boost::type_erasure
+
+namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace iterators {
+
+template <typename Value, typename Allocators>
+class query_iterator
+{
+public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef Value value_type;
+ typedef typename Allocators::const_reference reference;
+ typedef typename Allocators::difference_type difference_type;
+ typedef typename Allocators::const_pointer pointer;
+
+private:
+ typedef typename rtree::single_pass_iterator_type<Value, Allocators>::type iterator_type;
+
+public:
+
+ query_iterator() {}
+
+ template <typename It>
+ query_iterator(It const& it)
+ : m_iterator(it)
+ {}
+
+ query_iterator(end_query_iterator<Value, Allocators> const& /*it*/)
+ {}
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
+private:
+ BOOST_COPYABLE_AND_MOVABLE(query_iterator)
+public:
+ query_iterator(query_iterator const& o)
+ : m_iterator(o.m_iterator)
+ {}
+ query_iterator & operator=(BOOST_COPY_ASSIGN_REF(query_iterator) o)
+ {
+ m_iterator = o.m_iterator;
+ return *this;
+ }
+ query_iterator(BOOST_RV_REF(query_iterator) o)
+ : m_iterator(boost::move(o.m_iterator))
+ {}
+ query_iterator & operator=(BOOST_RV_REF(query_iterator) o)
+ {
+ if ( this != boost::addressof(o) )
+ {
+ m_iterator = boost::move(o.m_iterator);
+ }
+ return *this;
+ }
+#endif // BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
+
+ reference operator*() const
+ {
+ return *m_iterator;
+ }
+
+ const value_type * operator->() const
+ {
+ return boost::addressof(*m_iterator);
+ }
+
+ query_iterator & operator++()
+ {
+ ++m_iterator;
+ return *this;
+ }
+
+ query_iterator operator++(int)
+ {
+ query_iterator temp = *this;
+ ++m_iterator;
+ return temp;
+ }
+
+ friend bool operator==(query_iterator const& l, query_iterator const& r)
+ {
+ if ( !::boost::type_erasure::is_empty(l.m_iterator) )
+ {
+ if ( !::boost::type_erasure::is_empty(r.m_iterator) )
+ return l.m_iterator == r.m_iterator;
+ else
+ return l.m_iterator == end_query_iterator<Value, Allocators>();
+ }
+ else
+ {
+ if ( !::boost::type_erasure::is_empty(r.m_iterator) )
+ return r.m_iterator == end_query_iterator<Value, Allocators>();
+ else
+ return true;
+ }
+ }
+
+private:
+ iterator_type m_iterator;
};
-}} // namespace detail::rtree
+}}}}}} // namespace boost::geometry::index::detail::rtree::iterators
-}}} // namespace boost::geometry::index
+#endif // BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_TYPE_ERASURE
#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUERY_ITERATORS_HPP
diff --git a/3party/boost/boost/geometry/index/detail/rtree/rstar/insert.hpp b/3party/boost/boost/geometry/index/detail/rtree/rstar/insert.hpp
index e681bbb6bc..c903d6ca2a 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/rstar/insert.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/rstar/insert.hpp
@@ -2,7 +2,7 @@
//
// R-tree R*-tree insert algorithm implementation
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -28,7 +28,9 @@ public:
typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
typedef typename Options::parameters_type parameters_type;
- typedef typename Allocators::internal_node_pointer internal_node_pointer;
+
+ //typedef typename Allocators::internal_node_pointer internal_node_pointer;
+ typedef internal_node * internal_node_pointer;
template <typename ResultElements, typename Node>
static inline void apply(ResultElements & result_elements,
@@ -43,7 +45,9 @@ public:
typedef typename elements_type::value_type element_type;
typedef typename geometry::point_type<Box>::type point_type;
// TODO: awulkiew - change second point_type to the point type of the Indexable?
- typedef typename geometry::default_distance_result<point_type>::type distance_type;
+ typedef typename
+ geometry::default_comparable_distance_result<point_type>::type
+ comparable_distance_type;
elements_type & elements = rtree::elements(n);
@@ -61,8 +65,9 @@ public:
// fill the container of centers' distances of children from current node's center
typedef typename index::detail::rtree::container_from_elements_type<
elements_type,
- std::pair<distance_type, element_type>
+ std::pair<comparable_distance_type, element_type>
>::type sorted_elements_type;
+
sorted_elements_type sorted_elements;
// If constructor is used instead of resize() MS implementation leaks here
sorted_elements.reserve(elements_count); // MAY THROW, STRONG (V, E: alloc, copy)
@@ -82,7 +87,7 @@ public:
sorted_elements.begin(),
sorted_elements.begin() + reinserted_elements_count,
sorted_elements.end(),
- distances_dsc<distance_type, element_type>); // MAY THROW, BASIC (V, E: copy)
+ distances_dsc<comparable_distance_type, element_type>); // MAY THROW, BASIC (V, E: copy)
// copy elements which will be reinserted
result_elements.clear();
diff --git a/3party/boost/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp b/3party/boost/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp
index aedc2d1a4f..0caf53f94e 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp
@@ -2,7 +2,7 @@
//
// R-tree R*-tree split algorithm implementation
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,6 +15,8 @@
#include <boost/geometry/index/detail/algorithms/union_content.hpp>
#include <boost/geometry/index/detail/algorithms/margin.hpp>
+#include <boost/geometry/index/detail/bounded_view.hpp>
+
#include <boost/geometry/index/detail/rtree/node/node.hpp>
#include <boost/geometry/index/detail/rtree/visitors/insert.hpp>
#include <boost/geometry/index/detail/rtree/visitors/is_leaf.hpp>
@@ -28,7 +30,27 @@ namespace rstar {
template <typename Element, typename Translator, typename Tag, size_t Corner, size_t AxisIndex>
class element_axis_corner_less
{
- BOOST_MPL_ASSERT_MSG(false, NOT_IMPLEMENTED_FOR_THIS_TAG, (Tag));
+ typedef typename rtree::element_indexable_type<Element, Translator>::type indexable_type;
+ typedef typename geometry::point_type<indexable_type>::type point_type;
+ typedef geometry::model::box<point_type> bounds_type;
+ typedef index::detail::bounded_view<indexable_type, bounds_type> bounded_view_type;
+
+public:
+ element_axis_corner_less(Translator const& tr)
+ : m_tr(tr)
+ {}
+
+ bool operator()(Element const& e1, Element const& e2) const
+ {
+ bounded_view_type bounded_ind1(rtree::element_indexable(e1, m_tr));
+ bounded_view_type bounded_ind2(rtree::element_indexable(e2, m_tr));
+
+ return geometry::get<Corner, AxisIndex>(bounded_ind1)
+ < geometry::get<Corner, AxisIndex>(bounded_ind2);
+ }
+
+private:
+ Translator const& m_tr;
};
template <typename Element, typename Translator, size_t Corner, size_t AxisIndex>
@@ -129,15 +151,15 @@ struct choose_split_axis_and_index_for_corner
}
};
+//template <typename Parameters, typename Box, size_t AxisIndex, typename ElementIndexableTag>
+//struct choose_split_axis_and_index_for_axis
+//{
+// BOOST_MPL_ASSERT_MSG(false, NOT_IMPLEMENTED_FOR_THIS_TAG, (ElementIndexableTag));
+//};
+
template <typename Parameters, typename Box, size_t AxisIndex, typename ElementIndexableTag>
struct choose_split_axis_and_index_for_axis
{
- BOOST_MPL_ASSERT_MSG(false, NOT_IMPLEMENTED_FOR_THIS_TAG, (ElementIndexableTag));
-};
-
-template <typename Parameters, typename Box, size_t AxisIndex>
-struct choose_split_axis_and_index_for_axis<Parameters, Box, AxisIndex, box_tag>
-{
typedef typename index::detail::default_margin_result<Box>::type margin_type;
typedef typename index::detail::default_content_result<Box>::type content_type;
@@ -375,6 +397,11 @@ struct redistribute_elements<Value, Options, Translator, Box, Allocators, rstar_
elements_type & elements1 = rtree::elements(n);
elements_type & elements2 = rtree::elements(second_node);
+ // copy original elements
+ // TODO: use container_from_elements_type for std::allocator
+ elements_type elements_copy(elements1); // MAY THROW, STRONG
+ elements_type elements_backup(elements1); // MAY THROW, STRONG
+
size_t split_axis = 0;
size_t split_corner = 0;
size_t split_index = parameters.get_min_elements();
@@ -382,32 +409,36 @@ struct redistribute_elements<Value, Options, Translator, Box, Allocators, rstar_
content_type smallest_overlap = (std::numeric_limits<content_type>::max)();
content_type smallest_content = (std::numeric_limits<content_type>::max)();
+ // NOTE: this function internally copies passed elements
+ // why not pass mutable elements and use the same container for all axes/corners
+ // and again, the same below calling partial_sort/nth_element
+ // It would be even possible to not re-sort/find nth_element if the axis/corner
+ // was found for the last sorting - last combination of axis/corner
rstar::choose_split_axis_and_index<
typename Options::parameters_type,
Box,
dimension
- >::apply(elements1,
+ >::apply(elements_copy,
split_axis, split_corner, split_index,
smallest_sum_of_margins, smallest_overlap, smallest_content,
parameters, translator); // MAY THROW, STRONG
// TODO: awulkiew - get rid of following static_casts?
-
BOOST_GEOMETRY_INDEX_ASSERT(split_axis < dimension, "unexpected value");
BOOST_GEOMETRY_INDEX_ASSERT(split_corner == static_cast<size_t>(min_corner) || split_corner == static_cast<size_t>(max_corner), "unexpected value");
BOOST_GEOMETRY_INDEX_ASSERT(parameters.get_min_elements() <= split_index && split_index <= parameters.get_max_elements() - parameters.get_min_elements() + 1, "unexpected value");
-
- // copy original elements
- elements_type elements_copy(elements1); // MAY THROW, STRONG
- elements_type elements_backup(elements1); // MAY THROW, STRONG
- // TODO: awulkiew - check if std::partial_sort produces the same result as std::sort
+ // TODO: consider using nth_element
if ( split_corner == static_cast<size_t>(min_corner) )
+ {
rstar::partial_sort<min_corner, dimension>
::apply(elements_copy, split_axis, split_index, translator); // MAY THROW, BASIC (copy)
+ }
else
+ {
rstar::partial_sort<max_corner, dimension>
::apply(elements_copy, split_axis, split_index, translator); // MAY THROW, BASIC (copy)
+ }
BOOST_TRY
{
diff --git a/3party/boost/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp b/3party/boost/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp
index f283c3e5b2..d2caa36707 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp
@@ -2,7 +2,7 @@
//
// R-tree boxes validating visitor implementation
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -89,7 +89,9 @@ public:
}
Box box_exp;
- geometry::convert(m_tr(elements.front()), box_exp);
+ geometry::convert(
+ index::detail::return_ref_or_bounds(m_tr(elements.front())),
+ box_exp);
for(typename elements_type::const_iterator it = elements.begin() + 1;
it != elements.end() ; ++it)
{
diff --git a/3party/boost/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp b/3party/boost/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp
index 7072a1879f..84201b6afe 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp
@@ -11,6 +11,8 @@
#ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_GL_DRAW_HPP
#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_GL_DRAW_HPP
+#include <boost/mpl/assert.hpp>
+
namespace boost { namespace geometry { namespace index { namespace detail {
namespace utilities {
@@ -26,8 +28,16 @@ struct gl_draw_point<Point, 2>
{
static inline void apply(Point const& p, typename coordinate_type<Point>::type z)
{
- glBegin(GL_POINT);
- glVertex3f(geometry::get<0>(p), geometry::get<1>(p), z);
+ typename coordinate_type<Point>::type const& x = geometry::get<0>(p);
+ typename coordinate_type<Point>::type const& y = geometry::get<1>(p);
+ /*glBegin(GL_POINT);
+ glVertex3f(x, y, z);
+ glEnd();*/
+ glBegin(GL_QUADS);
+ glVertex3f(x+1, y, z);
+ glVertex3f(x, y+1, z);
+ glVertex3f(x-1, y, z);
+ glVertex3f(x, y-1, z);
glEnd();
}
};
@@ -50,33 +60,43 @@ struct gl_draw_box<Box, 2>
}
};
-template <typename Indexable, typename Tag>
-struct gl_draw_indexable
-{
-};
+template <typename Segment, size_t Dimension>
+struct gl_draw_segment
+{};
-template <typename Indexable>
-struct gl_draw_indexable<Indexable, box_tag>
+template <typename Segment>
+struct gl_draw_segment<Segment, 2>
{
- static const size_t dimension = dimension<Indexable>::value;
-
- static inline void apply(Indexable const& i, typename coordinate_type<Indexable>::type z)
+ static inline void apply(Segment const& s, typename coordinate_type<Segment>::type z)
{
- gl_draw_box<Indexable, dimension>::apply(i, z);
+ glBegin(GL_LINES);
+ glVertex3f(geometry::get<0, 0>(s), geometry::get<0, 1>(s), z);
+ glVertex3f(geometry::get<1, 0>(s), geometry::get<1, 1>(s), z);
+ glEnd();
}
};
-template <typename Indexable>
-struct gl_draw_indexable<Indexable, point_tag>
+template <typename Indexable, typename Tag>
+struct gl_draw_indexable
{
- static const size_t dimension = dimension<Indexable>::value;
-
- static inline void apply(Indexable const& i, typename coordinate_type<Indexable>::type z)
- {
- gl_draw_point<Indexable, dimension>::apply(i, z);
- }
+ BOOST_MPL_ASSERT_MSG((false), NOT_IMPLEMENTED_FOR_THIS_TAG, (Tag));
};
+template <typename Box>
+struct gl_draw_indexable<Box, box_tag>
+ : gl_draw_box<Box, geometry::dimension<Box>::value>
+{};
+
+template <typename Point>
+struct gl_draw_indexable<Point, point_tag>
+ : gl_draw_point<Point, geometry::dimension<Point>::value>
+{};
+
+template <typename Segment>
+struct gl_draw_indexable<Segment, segment_tag>
+ : gl_draw_segment<Segment, geometry::dimension<Segment>::value>
+{};
+
} // namespace dispatch
template <typename Indexable> inline
diff --git a/3party/boost/boost/geometry/index/detail/rtree/utilities/print.hpp b/3party/boost/boost/geometry/index/detail/rtree/utilities/print.hpp
index f7d503a7dc..4c42659c64 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/utilities/print.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/utilities/print.hpp
@@ -66,12 +66,13 @@ struct print_corner<Box, Corner, 1>
template <typename Indexable, typename Tag>
struct print_indexable
{
+ BOOST_MPL_ASSERT_MSG((false), NOT_IMPLEMENTED_FOR_THIS_TAG, (Tag));
};
template <typename Indexable>
struct print_indexable<Indexable, box_tag>
{
- static const size_t dimension = dimension<Indexable>::value;
+ static const size_t dimension = geometry::dimension<Indexable>::value;
static inline void apply(std::ostream &os, Indexable const& i)
{
@@ -86,7 +87,7 @@ struct print_indexable<Indexable, box_tag>
template <typename Indexable>
struct print_indexable<Indexable, point_tag>
{
- static const size_t dimension = dimension<Indexable>::value;
+ static const size_t dimension = geometry::dimension<Indexable>::value;
static inline void apply(std::ostream &os, Indexable const& i)
{
@@ -96,6 +97,21 @@ struct print_indexable<Indexable, point_tag>
}
};
+template <typename Indexable>
+struct print_indexable<Indexable, segment_tag>
+{
+ static const size_t dimension = geometry::dimension<Indexable>::value;
+
+ static inline void apply(std::ostream &os, Indexable const& i)
+ {
+ os << '(';
+ print_corner<Indexable, 0, dimension>::apply(os, i);
+ os << ")-(";
+ print_corner<Indexable, 1, dimension>::apply(os, i);
+ os << ')';
+ }
+};
+
} // namespace dispatch
template <typename Indexable> inline
diff --git a/3party/boost/boost/geometry/index/detail/rtree/utilities/statistics.hpp b/3party/boost/boost/geometry/index/detail/rtree/utilities/statistics.hpp
index c8e420d916..bbaed8100e 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/utilities/statistics.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/utilities/statistics.hpp
@@ -13,7 +13,7 @@
#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_STATISTICS_HPP
#include <algorithm>
-#include <tuple>
+#include <boost/tuple/tuple.hpp>
namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace utilities {
diff --git a/3party/boost/boost/geometry/index/detail/rtree/visitors/count.hpp b/3party/boost/boost/geometry/index/detail/rtree/visitors/count.hpp
index 203422f33b..f521944a44 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/visitors/count.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/visitors/count.hpp
@@ -2,7 +2,7 @@
//
// R-tree count visitor implementation
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -36,8 +36,12 @@ struct count
for (typename elements_type::const_iterator it = elements.begin();
it != elements.end(); ++it)
{
- if ( geometry::covered_by(indexable, it->first) )
+ if ( geometry::covered_by(
+ return_ref_or_bounds(indexable),
+ it->first) )
+ {
rtree::apply_visitor(*this, *it->second);
+ }
}
}
@@ -84,8 +88,12 @@ struct count<Value, Value, Options, Translator, Box, Allocators>
for (typename elements_type::const_iterator it = elements.begin();
it != elements.end(); ++it)
{
- if ( geometry::covered_by(tr(value), it->first) )
+ if ( geometry::covered_by(
+ return_ref_or_bounds(tr(value)),
+ it->first) )
+ {
rtree::apply_visitor(*this, *it->second);
+ }
}
}
diff --git a/3party/boost/boost/geometry/index/detail/rtree/visitors/distance_query.hpp b/3party/boost/boost/geometry/index/detail/rtree/visitors/distance_query.hpp
index 616150222c..c0d336df1a 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/visitors/distance_query.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/visitors/distance_query.hpp
@@ -318,6 +318,12 @@ public:
return *(neighbors[current_neighbor].second);
}
+ void initialize(node_pointer root)
+ {
+ rtree::apply_visitor(*this, *root);
+ increment();
+ }
+
void increment()
{
for (;;)
diff --git a/3party/boost/boost/geometry/index/detail/rtree/visitors/insert.hpp b/3party/boost/boost/geometry/index/detail/rtree/visitors/insert.hpp
index 9ff5f07497..a5c16db8af 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/visitors/insert.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/visitors/insert.hpp
@@ -231,7 +231,9 @@ protected:
typedef rtree::node_auto_ptr<Value, Options, Translator, Box, Allocators> node_auto_ptr;
typedef typename Allocators::node_pointer node_pointer;
- typedef typename Allocators::internal_node_pointer internal_node_pointer;
+
+ //typedef typename Allocators::internal_node_pointer internal_node_pointer;
+ typedef internal_node * internal_node_pointer;
inline insert(node_pointer & root,
size_t & leafs_level,
@@ -286,6 +288,8 @@ protected:
// handle overflow
if ( m_parameters.get_max_elements() < rtree::elements(n).size() )
{
+ // NOTE: If the exception is thrown current node may contain more than MAX elements or be empty.
+ // Furthermore it may be empty root - internal node.
split(n); // MAY THROW (V, E: alloc, copy, N:alloc)
}
}
diff --git a/3party/boost/boost/geometry/index/detail/rtree/visitors/remove.hpp b/3party/boost/boost/geometry/index/detail/rtree/visitors/remove.hpp
index 5b77b5acb0..8e6255346d 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/visitors/remove.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/visitors/remove.hpp
@@ -2,7 +2,7 @@
//
// R-tree removing visitor implementation
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -32,7 +32,9 @@ class remove
typedef rtree::node_auto_ptr<Value, Options, Translator, Box, Allocators> node_auto_ptr;
typedef typename Allocators::node_pointer node_pointer;
- typedef typename Allocators::internal_node_pointer internal_node_pointer;
+
+ //typedef typename Allocators::internal_node_pointer internal_node_pointer;
+ typedef internal_node * internal_node_pointer;
public:
inline remove(node_pointer & root,
@@ -66,7 +68,9 @@ public:
size_t child_node_index = 0;
for ( ; child_node_index < children.size() ; ++child_node_index )
{
- if ( geometry::covered_by(m_translator(m_value), children[child_node_index].first) )
+ if ( geometry::covered_by(
+ return_ref_or_bounds(m_translator(m_value)),
+ children[child_node_index].first) )
{
// next traversing step
traverse_apply_visitor(n, child_node_index); // MAY THROW
@@ -198,6 +202,9 @@ private:
BOOST_TRY
{
+ // NOTE: those are elements of the internal node which means that copy/move shouldn't throw
+ // Though it's safer in case if the pointer type could throw in copy ctor.
+ // In the future this try-catch block could be removed.
rtree::move_from_back(elements, underfl_el_it); // MAY THROW (E: copy)
elements.pop_back();
}
diff --git a/3party/boost/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp b/3party/boost/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp
index 48d9c3d3c6..0a43111ac4 100644
--- a/3party/boost/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp
+++ b/3party/boost/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp
@@ -112,7 +112,6 @@ public:
{
m_values = ::boost::addressof(rtree::elements(n));
m_current = rtree::elements(n).begin();
- m_last = rtree::elements(n).end();
}
const_reference dereference() const
@@ -121,17 +120,26 @@ public:
return *m_current;
}
+ void initialize(node_pointer root)
+ {
+ rtree::apply_visitor(*this, *root);
+ search_value();
+ }
+
void increment()
{
- if ( m_values )
- ++m_current;
+ ++m_current;
+ search_value();
+ }
+ void search_value()
+ {
for (;;)
{
// if leaf is choosen, move to the next value in leaf
if ( m_values )
{
- if ( m_current != m_last )
+ if ( m_current != m_values->end() )
{
// return if next value is found
Value const& v = *m_current;
@@ -188,7 +196,7 @@ private:
std::vector< std::pair<internal_iterator, internal_iterator> > m_internal_stack;
const leaf_elements * m_values;
- leaf_iterator m_current, m_last;
+ leaf_iterator m_current;
};
}}} // namespace detail::rtree::visitors
diff --git a/3party/boost/boost/geometry/index/detail/serialization.hpp b/3party/boost/boost/geometry/index/detail/serialization.hpp
new file mode 100644
index 0000000000..4f3dc7c013
--- /dev/null
+++ b/3party/boost/boost/geometry/index/detail/serialization.hpp
@@ -0,0 +1,581 @@
+// Boost.Geometry Index
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_INDEX_DETAIL_SERIALIZATION_HPP
+#define BOOST_GEOMETRY_INDEX_DETAIL_SERIALIZATION_HPP
+
+//#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/version.hpp>
+//#include <boost/serialization/nvp.hpp>
+
+// TODO
+// how about using the unsigned type capable of storing Max in compile-time versions?
+
+// TODO
+// - add wrappers for Point and Box and implement serialize for those wrappers instead of
+// raw geometries
+// PROBLEM: after implementing this, how Values would be set?
+// - store the name of the parameters to know how to load and detect errors
+// - in the header, once store info about the Indexable and Bounds types (geometry type, point CS, Dim, etc.)
+// each geometry save without this info
+
+// TODO - move to index/detail/serialization.hpp
+namespace boost { namespace geometry { namespace index { namespace detail {
+
+// TODO - use boost::move?
+template<typename T>
+class serialization_storage
+{
+public:
+ template <typename Archive>
+ serialization_storage(Archive & ar, unsigned int version)
+ {
+ boost::serialization::load_construct_data_adl(ar, this->address(), version);
+ }
+ ~serialization_storage()
+ {
+ this->address()->~T();
+ }
+ T * address()
+ {
+ return static_cast<T*>(m_storage.address());
+ }
+private:
+ boost::aligned_storage<sizeof(T), boost::alignment_of<T>::value> m_storage;
+};
+
+// TODO - save and load item_version? see: collections_load_imp and collections_save_imp
+// this should be done once for the whole container
+// versions of all used types should be stored
+
+template <typename T, typename Archive> inline
+T serialization_load(const char * name, Archive & ar)
+{
+ namespace bs = boost::serialization;
+ serialization_storage<T> storage(ar, bs::version<T>::value); // load_construct_data
+ ar >> boost::serialization::make_nvp(name, *storage.address()); // serialize
+ //ar >> *storage.address(); // serialize
+ return *storage.address();
+}
+
+template <typename T, typename Archive> inline
+void serialization_save(T const& t, const char * name, Archive & ar)
+{
+ namespace bs = boost::serialization;
+ bs::save_construct_data_adl(ar, boost::addressof(t), bs::version<T>::value); // save_construct_data
+ ar << boost::serialization::make_nvp(name, t); // serialize
+ //ar << t; // serialize
+}
+
+}}}}
+
+// TODO - move to index/serialization/rtree.hpp
+namespace boost { namespace serialization {
+
+// boost::geometry::index::linear
+
+template<class Archive, size_t Max, size_t Min>
+void save_construct_data(Archive & ar, const boost::geometry::index::linear<Max, Min> * params, unsigned int )
+{
+ size_t max = params->get_max_elements(), min = params->get_min_elements();
+ ar << boost::serialization::make_nvp("max", max);
+ ar << boost::serialization::make_nvp("min", min);
+}
+template<class Archive, size_t Max, size_t Min>
+void load_construct_data(Archive & ar, boost::geometry::index::linear<Max, Min> * params, unsigned int )
+{
+ size_t max, min;
+ ar >> boost::serialization::make_nvp("max", max);
+ ar >> boost::serialization::make_nvp("min", min);
+ if ( max != params->get_max_elements() || min != params->get_min_elements() )
+ // TODO change exception type
+ BOOST_THROW_EXCEPTION(std::runtime_error("parameters not compatible"));
+ // the constructor musn't be called for this type
+ //::new(params)boost::geometry::index::linear<Max, Min>();
+}
+template<class Archive, size_t Max, size_t Min> void serialize(Archive &, boost::geometry::index::linear<Max, Min> &, unsigned int) {}
+
+// boost::geometry::index::quadratic
+
+template<class Archive, size_t Max, size_t Min>
+void save_construct_data(Archive & ar, const boost::geometry::index::quadratic<Max, Min> * params, unsigned int )
+{
+ size_t max = params->get_max_elements(), min = params->get_min_elements();
+ ar << boost::serialization::make_nvp("max", max);
+ ar << boost::serialization::make_nvp("min", min);
+}
+template<class Archive, size_t Max, size_t Min>
+void load_construct_data(Archive & ar, boost::geometry::index::quadratic<Max, Min> * params, unsigned int )
+{
+ size_t max, min;
+ ar >> boost::serialization::make_nvp("max", max);
+ ar >> boost::serialization::make_nvp("min", min);
+ if ( max != params->get_max_elements() || min != params->get_min_elements() )
+ // TODO change exception type
+ BOOST_THROW_EXCEPTION(std::runtime_error("parameters not compatible"));
+ // the constructor musn't be called for this type
+ //::new(params)boost::geometry::index::quadratic<Max, Min>();
+}
+template<class Archive, size_t Max, size_t Min> void serialize(Archive &, boost::geometry::index::quadratic<Max, Min> &, unsigned int) {}
+
+// boost::geometry::index::rstar
+
+template<class Archive, size_t Max, size_t Min, size_t RE, size_t OCT>
+void save_construct_data(Archive & ar, const boost::geometry::index::rstar<Max, Min, RE, OCT> * params, unsigned int )
+{
+ size_t max = params->get_max_elements()
+ , min = params->get_min_elements()
+ , re = params->get_reinserted_elements()
+ , oct = params->get_overlap_cost_threshold();
+ ar << boost::serialization::make_nvp("max", max);
+ ar << boost::serialization::make_nvp("min", min);
+ ar << boost::serialization::make_nvp("re", re);
+ ar << boost::serialization::make_nvp("oct", oct);
+}
+template<class Archive, size_t Max, size_t Min, size_t RE, size_t OCT>
+void load_construct_data(Archive & ar, boost::geometry::index::rstar<Max, Min, RE, OCT> * params, unsigned int )
+{
+ size_t max, min, re, oct;
+ ar >> boost::serialization::make_nvp("max", max);
+ ar >> boost::serialization::make_nvp("min", min);
+ ar >> boost::serialization::make_nvp("re", re);
+ ar >> boost::serialization::make_nvp("oct", oct);
+ if ( max != params->get_max_elements() || min != params->get_min_elements() ||
+ re != params->get_reinserted_elements() || oct != params->get_overlap_cost_threshold() )
+ // TODO change exception type
+ BOOST_THROW_EXCEPTION(std::runtime_error("parameters not compatible"));
+ // the constructor musn't be called for this type
+ //::new(params)boost::geometry::index::rstar<Max, Min, RE, OCT>();
+}
+template<class Archive, size_t Max, size_t Min, size_t RE, size_t OCT>
+void serialize(Archive &, boost::geometry::index::rstar<Max, Min, RE, OCT> &, unsigned int) {}
+
+// boost::geometry::index::dynamic_linear
+
+template<class Archive>
+inline void save_construct_data(Archive & ar, const boost::geometry::index::dynamic_linear * params, unsigned int )
+{
+ size_t max = params->get_max_elements(), min = params->get_min_elements();
+ ar << boost::serialization::make_nvp("max", max);
+ ar << boost::serialization::make_nvp("min", min);
+}
+template<class Archive>
+inline void load_construct_data(Archive & ar, boost::geometry::index::dynamic_linear * params, unsigned int )
+{
+ size_t max, min;
+ ar >> boost::serialization::make_nvp("max", max);
+ ar >> boost::serialization::make_nvp("min", min);
+ ::new(params)boost::geometry::index::dynamic_linear(max, min);
+}
+template<class Archive> void serialize(Archive &, boost::geometry::index::dynamic_linear &, unsigned int) {}
+
+// boost::geometry::index::dynamic_quadratic
+
+template<class Archive>
+inline void save_construct_data(Archive & ar, const boost::geometry::index::dynamic_quadratic * params, unsigned int )
+{
+ size_t max = params->get_max_elements(), min = params->get_min_elements();
+ ar << boost::serialization::make_nvp("max", max);
+ ar << boost::serialization::make_nvp("min", min);
+}
+template<class Archive>
+inline void load_construct_data(Archive & ar, boost::geometry::index::dynamic_quadratic * params, unsigned int )
+{
+ size_t max, min;
+ ar >> boost::serialization::make_nvp("max", max);
+ ar >> boost::serialization::make_nvp("min", min);
+ ::new(params)boost::geometry::index::dynamic_quadratic(max, min);
+}
+template<class Archive> void serialize(Archive &, boost::geometry::index::dynamic_quadratic &, unsigned int) {}
+
+// boost::geometry::index::dynamic_rstar
+
+template<class Archive>
+inline void save_construct_data(Archive & ar, const boost::geometry::index::dynamic_rstar * params, unsigned int )
+{
+ size_t max = params->get_max_elements()
+ , min = params->get_min_elements()
+ , re = params->get_reinserted_elements()
+ , oct = params->get_overlap_cost_threshold();
+ ar << boost::serialization::make_nvp("max", max);
+ ar << boost::serialization::make_nvp("min", min);
+ ar << boost::serialization::make_nvp("re", re);
+ ar << boost::serialization::make_nvp("oct", oct);
+}
+template<class Archive>
+inline void load_construct_data(Archive & ar, boost::geometry::index::dynamic_rstar * params, unsigned int )
+{
+ size_t max, min, re, oct;
+ ar >> boost::serialization::make_nvp("max", max);
+ ar >> boost::serialization::make_nvp("min", min);
+ ar >> boost::serialization::make_nvp("re", re);
+ ar >> boost::serialization::make_nvp("oct", oct);
+ ::new(params)boost::geometry::index::dynamic_rstar(max, min, re, oct);
+}
+template<class Archive> void serialize(Archive &, boost::geometry::index::dynamic_rstar &, unsigned int) {}
+
+}} // boost::serialization
+
+// TODO - move to index/detail/serialization.hpp or maybe geometry/serialization.hpp
+namespace boost { namespace geometry { namespace index { namespace detail {
+
+template <typename P, size_t I = 0, size_t D = traits::dimension<P>::value>
+struct serialize_point
+{
+ template <typename Archive>
+ static inline void save(Archive & ar, P const& p, unsigned int version)
+ {
+ typename coordinate_type<P>::type c = get<I>(p);
+ ar << boost::serialization::make_nvp("c", c);
+ serialize_point<P, I+1, D>::save(ar, p, version);
+ }
+
+ template <typename Archive>
+ static inline void load(Archive & ar, P & p, unsigned int version)
+ {
+ typename traits::coordinate_type<P>::type c;
+ ar >> boost::serialization::make_nvp("c", c);
+ set<I>(p, c);
+ serialize_point<P, I+1, D>::load(ar, p, version);
+ }
+};
+
+template <typename P, size_t D>
+struct serialize_point<P, D, D>
+{
+ template <typename Archive> static inline void save(Archive &, P const&, unsigned int) {}
+ template <typename Archive> static inline void load(Archive &, P &, unsigned int) {}
+};
+
+}}}}
+
+// TODO - move to index/detail/serialization.hpp or maybe geometry/serialization.hpp
+namespace boost { namespace serialization {
+
+template<class Archive, typename T, size_t D, typename C>
+void save(Archive & ar, boost::geometry::model::point<T, D, C> const& p, unsigned int version)
+{
+ boost::geometry::index::detail::serialize_point< boost::geometry::model::point<T, D, C> >::save(ar, p, version);
+}
+template<class Archive, typename T, size_t D, typename C>
+void load(Archive & ar, boost::geometry::model::point<T, D, C> & p, unsigned int version)
+{
+ boost::geometry::index::detail::serialize_point< boost::geometry::model::point<T, D, C> >::load(ar, p, version);
+}
+template<class Archive, typename T, size_t D, typename C>
+inline void serialize(Archive & ar, boost::geometry::model::point<T, D, C> & o, const unsigned int version) { split_free(ar, o, version); }
+
+template<class Archive, typename P>
+inline void serialize(Archive & ar, boost::geometry::model::box<P> & b, const unsigned int)
+{
+ ar & boost::serialization::make_nvp("min", b.min_corner());
+ ar & boost::serialization::make_nvp("max", b.max_corner());
+}
+
+}} // boost::serialization
+
+// TODO - move to index/detail/rtree/visitors/save.hpp
+namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace visitors {
+
+// TODO move saving and loading of the rtree outside the rtree, this will require adding some kind of members_view
+
+template <typename Archive, typename Value, typename Options, typename Translator, typename Box, typename Allocators>
+class save
+ : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
+{
+public:
+ typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
+ typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
+ typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
+
+ save(Archive & archive, unsigned int version)
+ : m_archive(archive), m_version(version)
+ {}
+
+ inline void operator()(internal_node const& n)
+ {
+ typedef typename rtree::elements_type<internal_node>::type elements_type;
+ elements_type const& elements = rtree::elements(n);
+
+ // change to elements_type::size_type or size_type?
+ size_t s = elements.size();
+ m_archive << boost::serialization::make_nvp("s", s);
+
+ for (typename elements_type::const_iterator it = elements.begin() ; it != elements.end() ; ++it)
+ {
+ serialization_save(it->first, "b", m_archive);
+
+ rtree::apply_visitor(*this, *it->second);
+ }
+ }
+
+ inline void operator()(leaf const& l)
+ {
+ typedef typename rtree::elements_type<leaf>::type elements_type;
+ typedef typename elements_type::size_type elements_size;
+ elements_type const& elements = rtree::elements(l);
+
+ // change to elements_type::size_type or size_type?
+ size_t s = elements.size();
+ m_archive << boost::serialization::make_nvp("s", s);
+
+ for (typename elements_type::const_iterator it = elements.begin() ; it != elements.end() ; ++it)
+ {
+ serialization_save(*it, "v", m_archive);
+ }
+ }
+
+private:
+ Archive & m_archive;
+ unsigned int m_version;
+};
+
+}}}}}} // boost::geometry::index::detail::rtree::visitors
+
+// TODO - move to index/detail/rtree/load.hpp
+namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree {
+
+template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
+class load
+{
+ typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
+ typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
+ typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
+
+ typedef typename Options::parameters_type parameters_type;
+
+ typedef typename Allocators::node_pointer node_pointer;
+ typedef rtree::node_auto_ptr<Value, Options, Translator, Box, Allocators> node_auto_ptr;
+ typedef typename Allocators::size_type size_type;
+
+public:
+ template <typename Archive> inline static
+ node_pointer apply(Archive & ar, unsigned int version, size_type leafs_level, size_type & values_count, parameters_type const& parameters, Translator const& translator, Allocators & allocators)
+ {
+ values_count = 0;
+ return raw_apply(ar, version, leafs_level, values_count, parameters, translator, allocators);
+ }
+
+private:
+ template <typename Archive> inline static
+ node_pointer raw_apply(Archive & ar, unsigned int version, size_type leafs_level, size_type & values_count, parameters_type const& parameters, Translator const& translator, Allocators & allocators, size_type current_level = 0)
+ {
+ //BOOST_GEOMETRY_INDEX_ASSERT(current_level <= leafs_level, "invalid parameter");
+
+ // change to elements_type::size_type or size_type?
+ size_t elements_count;
+ ar >> boost::serialization::make_nvp("s", elements_count);
+
+ if ( elements_count < parameters.get_min_elements() || parameters.get_max_elements() < elements_count )
+ BOOST_THROW_EXCEPTION(std::runtime_error("rtree loading error"));
+
+ if ( current_level < leafs_level )
+ {
+ node_pointer n = rtree::create_node<Allocators, internal_node>::apply(allocators); // MAY THROW (A)
+ node_auto_ptr auto_remover(n, allocators);
+ internal_node & in = rtree::get<internal_node>(*n);
+
+ typedef typename rtree::elements_type<internal_node>::type elements_type;
+ typedef typename elements_type::value_type element_type;
+ typedef typename elements_type::size_type elements_size;
+ elements_type & elements = rtree::elements(in);
+
+ elements.reserve(elements_count); // MAY THROW (A)
+
+ for ( size_t i = 0 ; i < elements_count ; ++i )
+ {
+ typedef typename elements_type::value_type::first_type box_type;
+ box_type b = serialization_load<box_type>("b", ar);
+ node_pointer n = raw_apply(ar, version, leafs_level, values_count, parameters, translator, allocators, current_level+1); // recursive call
+ elements.push_back(element_type(b, n));
+ }
+
+ auto_remover.release();
+ return n;
+ }
+ else
+ {
+ BOOST_GEOMETRY_INDEX_ASSERT(current_level == leafs_level, "unexpected value");
+
+ node_pointer n = rtree::create_node<Allocators, leaf>::apply(allocators); // MAY THROW (A)
+ node_auto_ptr auto_remover(n, allocators);
+ leaf & l = rtree::get<leaf>(*n);
+
+ typedef typename rtree::elements_type<leaf>::type elements_type;
+ typedef typename elements_type::value_type element_type;
+ elements_type & elements = rtree::elements(l);
+
+ values_count += elements_count;
+
+ elements.reserve(elements_count); // MAY THROW (A)
+
+ for ( size_t i = 0 ; i < elements_count ; ++i )
+ {
+ element_type el = serialization_load<element_type>("v", ar); // MAY THROW (C)
+ elements.push_back(el); // MAY THROW (C)
+ }
+
+ auto_remover.release();
+ return n;
+ }
+ }
+};
+
+}}}}} // boost::geometry::index::detail::rtree
+
+// TODO - move to index/detail/rtree/private_view.hpp
+namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree {
+
+template <typename Rtree>
+class const_private_view
+{
+public:
+ typedef typename Rtree::size_type size_type;
+
+ typedef typename Rtree::translator_type translator_type;
+ typedef typename Rtree::value_type value_type;
+ typedef typename Rtree::options_type options_type;
+ typedef typename Rtree::box_type box_type;
+ typedef typename Rtree::allocators_type allocators_type;
+
+ const_private_view(Rtree const& rt) : m_rtree(rt) {}
+
+ typedef typename Rtree::members_holder members_holder;
+
+ members_holder const& members() const { return m_rtree.m_members; }
+
+private:
+ const_private_view(const_private_view const&);
+ const_private_view & operator=(const_private_view const&);
+
+ Rtree const& m_rtree;
+};
+
+template <typename Rtree>
+class private_view
+{
+public:
+ typedef typename Rtree::size_type size_type;
+
+ typedef typename Rtree::translator_type translator_type;
+ typedef typename Rtree::value_type value_type;
+ typedef typename Rtree::options_type options_type;
+ typedef typename Rtree::box_type box_type;
+ typedef typename Rtree::allocators_type allocators_type;
+
+ private_view(Rtree & rt) : m_rtree(rt) {}
+
+ typedef typename Rtree::members_holder members_holder;
+
+ members_holder & members() { return m_rtree.m_members; }
+ members_holder const& members() const { return m_rtree.m_members; }
+
+private:
+ private_view(private_view const&);
+ private_view & operator=(private_view const&);
+
+ Rtree & m_rtree;
+};
+
+}}}}} // namespace boost::geometry::index::detail::rtree
+
+// TODO - move to index/serialization/rtree.hpp
+namespace boost { namespace serialization {
+
+template<class Archive, typename V, typename P, typename I, typename E, typename A>
+void save(Archive & ar, boost::geometry::index::rtree<V, P, I, E, A> const& rt, unsigned int version)
+{
+ namespace detail = boost::geometry::index::detail;
+
+ typedef boost::geometry::index::rtree<V, P, I, E, A> rtree;
+ typedef detail::rtree::const_private_view<rtree> view;
+ typedef typename view::translator_type translator_type;
+ typedef typename view::value_type value_type;
+ typedef typename view::options_type options_type;
+ typedef typename view::box_type box_type;
+ typedef typename view::allocators_type allocators_type;
+
+ view tree(rt);
+
+ detail::serialization_save(tree.members().parameters(), "parameters", ar);
+
+ ar << boost::serialization::make_nvp("values_count", tree.members().values_count);
+ ar << boost::serialization::make_nvp("leafs_level", tree.members().leafs_level);
+
+ if ( tree.members().values_count )
+ {
+ BOOST_GEOMETRY_INDEX_ASSERT(tree.members().root, "root shouldn't be null_ptr");
+
+ detail::rtree::visitors::save<Archive, value_type, options_type, translator_type, box_type, allocators_type> save_v(ar, version);
+ detail::rtree::apply_visitor(save_v, *tree.members().root);
+ }
+}
+
+template<class Archive, typename V, typename P, typename I, typename E, typename A>
+void load(Archive & ar, boost::geometry::index::rtree<V, P, I, E, A> & rt, unsigned int version)
+{
+ namespace detail = boost::geometry::index::detail;
+
+ typedef boost::geometry::index::rtree<V, P, I, E, A> rtree;
+ typedef detail::rtree::private_view<rtree> view;
+ typedef typename view::size_type size_type;
+ typedef typename view::translator_type translator_type;
+ typedef typename view::value_type value_type;
+ typedef typename view::options_type options_type;
+ typedef typename view::box_type box_type;
+ typedef typename view::allocators_type allocators_type;
+
+ typedef typename options_type::parameters_type parameters_type;
+ typedef typename allocators_type::node_pointer node_pointer;
+ typedef detail::rtree::node_auto_ptr<value_type, options_type, translator_type, box_type, allocators_type> node_auto_ptr;
+
+ view tree(rt);
+
+ parameters_type params = detail::serialization_load<parameters_type>("parameters", ar);
+
+ size_type values_count, leafs_level;
+ ar >> boost::serialization::make_nvp("values_count", values_count);
+ ar >> boost::serialization::make_nvp("leafs_level", leafs_level);
+
+ node_pointer n(0);
+ if ( 0 < values_count )
+ {
+ size_type loaded_values_count = 0;
+ n = detail::rtree::load<value_type, options_type, translator_type, box_type, allocators_type>
+ ::apply(ar, version, leafs_level, loaded_values_count, params, tree.members().translator(), tree.members().allocators()); // MAY THROW
+
+ node_auto_ptr remover(n, tree.members().allocators());
+ if ( loaded_values_count != values_count )
+ BOOST_THROW_EXCEPTION(std::runtime_error("unexpected number of values")); // TODO change exception type
+ remover.release();
+ }
+
+ tree.members().parameters() = params;
+ tree.members().values_count = values_count;
+ tree.members().leafs_level = leafs_level;
+
+ node_auto_ptr remover(tree.members().root, tree.members().allocators());
+ tree.members().root = n;
+}
+
+template<class Archive, typename V, typename P, typename I, typename E, typename A> inline
+void serialize(Archive & ar, boost::geometry::index::rtree<V, P, I, E, A> & rt, unsigned int version)
+{
+ split_free(ar, rt, version);
+}
+
+template<class Archive, typename V, typename P, typename I, typename E, typename A> inline
+void serialize(Archive & ar, boost::geometry::index::rtree<V, P, I, E, A> const& rt, unsigned int version)
+{
+ split_free(ar, rt, version);
+}
+
+}} // boost::serialization
+
+#endif // BOOST_GEOMETRY_INDEX_DETAIL_SERIALIZATION_HPP
diff --git a/3party/boost/boost/geometry/index/detail/tuples.hpp b/3party/boost/boost/geometry/index/detail/tuples.hpp
index 28e347bed0..e7f6d22357 100644
--- a/3party/boost/boost/geometry/index/detail/tuples.hpp
+++ b/3party/boost/boost/geometry/index/detail/tuples.hpp
@@ -164,13 +164,16 @@ struct add_unique
>::type type;
};
-template <typename Tuple, typename T, size_t I, size_t N>
-struct push_back_impl
+template <typename Tuple,
+ typename T,
+ size_t I = 0,
+ size_t N = boost::tuples::length<Tuple>::value>
+struct push_back
{
typedef
boost::tuples::cons<
typename boost::tuples::element<I, Tuple>::type,
- typename push_back_impl<Tuple, T, I+1, N>::type
+ typename push_back<Tuple, T, I+1, N>::type
> type;
static type apply(Tuple const& tup, T const& t)
@@ -178,13 +181,13 @@ struct push_back_impl
return
type(
boost::get<I>(tup),
- push_back_impl<Tuple, T, I+1, N>::apply(tup, t)
+ push_back<Tuple, T, I+1, N>::apply(tup, t)
);
}
};
template <typename Tuple, typename T, size_t N>
-struct push_back_impl<Tuple, T, N, N>
+struct push_back<Tuple, T, N, N>
{
typedef boost::tuples::cons<T, boost::tuples::null_type> type;
diff --git a/3party/boost/boost/geometry/index/detail/type_erased_iterators.hpp b/3party/boost/boost/geometry/index/detail/type_erased_iterators.hpp
deleted file mode 100644
index 92867a4ce1..0000000000
--- a/3party/boost/boost/geometry/index/detail/type_erased_iterators.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Boost.Geometry Index
-//
-// Type-erased iterators
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GEOMETRY_INDEX_DETAIL_TYPE_ERASED_ITERATORS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_TYPE_ERASED_ITERATORS_HPP
-
-#include <boost/type_erasure/any.hpp>
-#include <boost/type_erasure/operators.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template<typename T, typename ValueType, typename Reference, typename Pointer, typename DifferenceType>
-struct single_pass_iterator_concept :
- ::boost::mpl::vector<
- ::boost::type_erasure::copy_constructible<T>,
- ::boost::type_erasure::equality_comparable<T>,
- ::boost::type_erasure::dereferenceable<Reference, T>,
- ::boost::type_erasure::assignable<T>,
- ::boost::type_erasure::incrementable<T>
- >
-{};
-
-template <typename ValueType, typename Reference, typename Pointer, typename DifferenceType>
-struct single_pass_iterator_type
-{
- typedef ::boost::type_erasure::any<
- single_pass_iterator_concept<
- ::boost::type_erasure::_self, ValueType, Reference, Pointer, DifferenceType
- >
- > type;
-};
-
-}}}} // namespace boost::geometry::index::detail
-
-namespace boost { namespace type_erasure {
-
-template<typename T, typename ValueType, typename Reference, typename Pointer, typename DifferenceType, typename Base>
-struct concept_interface<
- ::boost::geometry::index::detail::single_pass_iterator_concept<
- T, ValueType, Reference, Pointer, DifferenceType
- >, Base, T>
- : Base
-{
- typedef ValueType value_type;
- typedef Reference reference;
- typedef Pointer pointer;
- typedef DifferenceType difference_type;
- typedef ::std::input_iterator_tag iterator_category;
-};
-
-}} // namespace boost::type_erasure
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_TYPE_ERASED_ITERATORS_HPP
diff --git a/3party/boost/boost/geometry/index/detail/varray.hpp b/3party/boost/boost/geometry/index/detail/varray.hpp
index 9570c21ce8..a795b7c3f3 100644
--- a/3party/boost/boost/geometry/index/detail/varray.hpp
+++ b/3party/boost/boost/geometry/index/detail/varray.hpp
@@ -37,6 +37,7 @@
#include <boost/geometry/index/detail/varray_detail.hpp>
#include <boost/concept_check.hpp>
+#include <boost/throw_exception.hpp>
/*!
\defgroup varray_non_member varray non-member functions
@@ -177,7 +178,7 @@ class varray
BOOST_COPYABLE_AND_MOVABLE(varray)
-#ifdef BOOST_NO_RVALUE_REFERENCES
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
public:
template <std::size_t C>
varray & operator=(varray<Value, C> & sv)
@@ -362,12 +363,7 @@ public:
//! @par Complexity
//! Linear O(N).
template <std::size_t C>
-// TEMPORARY WORKAROUND
-#if defined(BOOST_NO_RVALUE_REFERENCES)
- varray & operator=(::boost::rv< varray<value_type, C> > const& other)
-#else
- varray & operator=(varray<value_type, C> const& other)
-#endif
+ varray & operator=(BOOST_COPY_ASSIGN_REF_2_TEMPL_ARGS(varray, value_type, C) other)
{
this->assign(other.begin(), other.end()); // may throw
@@ -1950,7 +1946,6 @@ public:
void insert(iterator, Iterator first, Iterator last)
{
// TODO - add MPL_ASSERT, check if Iterator is really an iterator
- typedef typename boost::iterator_traversal<Iterator>::type traversal;
errh::check_capacity(*this, std::distance(first, last)); // may throw
}
@@ -1974,7 +1969,6 @@ public:
void assign(Iterator first, Iterator last)
{
// TODO - add MPL_ASSERT, check if Iterator is really an iterator
- typedef typename boost::iterator_traversal<Iterator>::type traversal;
errh::check_capacity(*this, std::distance(first, last)); // may throw
}
diff --git a/3party/boost/boost/geometry/index/detail/varray_detail.hpp b/3party/boost/boost/geometry/index/detail/varray_detail.hpp
index 4e16cc97da..962d4d8288 100644
--- a/3party/boost/boost/geometry/index/detail/varray_detail.hpp
+++ b/3party/boost/boost/geometry/index/detail/varray_detail.hpp
@@ -29,6 +29,8 @@
#include <boost/type_traits/has_trivial_copy.hpp>
#include <boost/type_traits/has_trivial_constructor.hpp>
#include <boost/type_traits/has_trivial_destructor.hpp>
+#include <boost/type_traits/has_trivial_move_constructor.hpp>
+#include <boost/type_traits/has_trivial_move_assign.hpp>
//#include <boost/type_traits/has_nothrow_constructor.hpp>
//#include <boost/type_traits/has_nothrow_copy.hpp>
//#include <boost/type_traits/has_nothrow_assign.hpp>
@@ -409,12 +411,12 @@ struct has_nothrow_move : public
template <typename I, typename O>
inline
O uninitialized_move_if_noexcept_dispatch(I first, I last, O dst, boost::mpl::bool_<true> const& /*use_move*/)
-{ return uninitialized_move(first, last, dst); }
+{ return varray_detail::uninitialized_move(first, last, dst); }
template <typename I, typename O>
inline
O uninitialized_move_if_noexcept_dispatch(I first, I last, O dst, boost::mpl::bool_<false> const& /*use_move*/)
-{ return uninitialized_copy(first, last, dst); }
+{ return varray_detail::uninitialized_copy(first, last, dst); }
template <typename I, typename O>
inline
@@ -532,16 +534,16 @@ void construct(DisableTrivialInit const&, I pos)
template <typename I, typename V>
inline
-void construct_dispatch(I pos, V const& v,
- boost::mpl::bool_<true> const& /*use_memcpy*/)
+void construct_copy_dispatch(I pos, V const& v,
+ boost::mpl::bool_<true> const& /*use_memcpy*/)
{
::memcpy(boost::addressof(*pos), boost::addressof(v), sizeof(V));
}
template <typename I, typename P>
inline
-void construct_dispatch(I pos, P const& p,
- boost::mpl::bool_<false> const& /*use_memcpy*/)
+void construct_copy_dispatch(I pos, P const& p,
+ boost::mpl::bool_<false> const& /*use_memcpy*/)
{
typedef typename boost::iterator_value<I>::type V;
new (static_cast<void*>(boost::addressof(*pos))) V(p); // may throw
@@ -559,11 +561,28 @@ void construct(DisableTrivialInit const&,
>::type
use_memcpy;
- construct_dispatch(pos, p, use_memcpy()); // may throw
+ construct_copy_dispatch(pos, p, use_memcpy()); // may throw
}
// Needed by push_back(V &&)
+template <typename I, typename V>
+inline
+void construct_move_dispatch(I pos, V const& v,
+ boost::mpl::bool_<true> const& /*use_memcpy*/)
+{
+ ::memcpy(boost::addressof(*pos), boost::addressof(v), sizeof(V));
+}
+
+template <typename I, typename P>
+inline
+void construct_move_dispatch(I pos, BOOST_RV_REF(P) p,
+ boost::mpl::bool_<false> const& /*use_memcpy*/)
+{
+ typedef typename boost::iterator_value<I>::type V;
+ new (static_cast<void*>(boost::addressof(*pos))) V(::boost::move(p)); // may throw
+}
+
template <typename DisableTrivialInit, typename I, typename P>
inline
void construct(DisableTrivialInit const&, I pos, BOOST_RV_REF(P) p)
@@ -571,18 +590,17 @@ void construct(DisableTrivialInit const&, I pos, BOOST_RV_REF(P) p)
typedef typename
::boost::mpl::and_<
is_corresponding_value<I, P>,
- ::boost::has_trivial_copy<P>
+ ::boost::has_trivial_move_constructor<P>
>::type
use_memcpy;
- typedef typename boost::iterator_value<I>::type V;
- new (static_cast<void*>(boost::addressof(*pos))) V(::boost::move(p)); // may throw
+ construct_move_dispatch(pos, ::boost::move(p), use_memcpy()); // may throw
}
// Needed by emplace_back() and emplace()
#if !defined(BOOST_CONTAINER_VARRAY_DISABLE_EMPLACE)
-#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <typename DisableTrivialInit, typename I, class ...Args>
inline
@@ -594,10 +612,10 @@ void construct(DisableTrivialInit const&,
new (static_cast<void*>(boost::addressof(*pos))) V(::boost::forward<Args>(args)...); // may throw
}
-#else // !BOOST_NO_VARIADIC_TEMPLATES
+#else // !BOOST_NO_CXX11_VARIADIC_TEMPLATES
-// BOOST_NO_RVALUE_REFERENCES -> P0 const& p0
-// !BOOST_NO_RVALUE_REFERENCES -> P0 && p0
+// BOOST_NO_CXX11_RVALUE_REFERENCES -> P0 const& p0
+// !BOOST_NO_CXX11_RVALUE_REFERENCES -> P0 && p0
// which means that version with one parameter may take V const& v
#define BOOST_PP_LOCAL_MACRO(n) \
@@ -617,23 +635,24 @@ void construct(DisableTrivialInit const&,
#define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
#include BOOST_PP_LOCAL_ITERATE()
-#endif // !BOOST_NO_VARIADIC_TEMPLATES
+#endif // !BOOST_NO_CXX11_VARIADIC_TEMPLATES
#endif // !BOOST_CONTAINER_VARRAY_DISABLE_EMPLACE
// assign(I, V)
template <typename I, typename V>
inline
-void assign_dispatch(I pos, V const& v,
- boost::mpl::bool_<true> const& /*use_memcpy*/)
+void assign_copy_dispatch(I pos, V const& v,
+ boost::mpl::bool_<true> const& /*use_memcpy*/)
{
+// TODO - use memmove here?
::memcpy(boost::addressof(*pos), boost::addressof(v), sizeof(V));
}
template <typename I, typename V>
inline
-void assign_dispatch(I pos, V const& v,
- boost::mpl::bool_<false> const& /*use_memcpy*/)
+void assign_copy_dispatch(I pos, V const& v,
+ boost::mpl::bool_<false> const& /*use_memcpy*/)
{
*pos = v; // may throw
}
@@ -649,16 +668,39 @@ void assign(I pos, V const& v)
>::type
use_memcpy;
- assign_dispatch(pos, v, use_memcpy()); // may throw
+ assign_copy_dispatch(pos, v, use_memcpy()); // may throw
}
template <typename I, typename V>
inline
-void assign(I pos, BOOST_RV_REF(V) v)
+void assign_move_dispatch(I pos, V const& v,
+ boost::mpl::bool_<true> const& /*use_memcpy*/)
+{
+// TODO - use memmove here?
+ ::memcpy(boost::addressof(*pos), boost::addressof(v), sizeof(V));
+}
+
+template <typename I, typename V>
+inline
+void assign_move_dispatch(I pos, BOOST_RV_REF(V) v,
+ boost::mpl::bool_<false> const& /*use_memcpy*/)
{
*pos = boost::move(v); // may throw
}
+template <typename I, typename V>
+inline
+void assign(I pos, BOOST_RV_REF(V) v)
+{
+ typedef typename
+ ::boost::mpl::and_<
+ is_corresponding_value<I, V>,
+ ::boost::has_trivial_move_assign<V>
+ >::type
+ use_memcpy;
+
+ assign_move_dispatch(pos, ::boost::move(v), use_memcpy());
+}
// uninitialized_copy_s
diff --git a/3party/boost/boost/geometry/index/equal_to.hpp b/3party/boost/boost/geometry/index/equal_to.hpp
index 8ce5074c32..5fbaa8209f 100644
--- a/3party/boost/boost/geometry/index/equal_to.hpp
+++ b/3party/boost/boost/geometry/index/equal_to.hpp
@@ -1,6 +1,6 @@
// Boost.Geometry Index
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -10,15 +10,15 @@
#define BOOST_GEOMETRY_INDEX_EQUAL_TO_HPP
#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/index/indexable.hpp>
-namespace boost { namespace geometry { namespace index {
-
-namespace detail {
+namespace boost { namespace geometry { namespace index { namespace detail {
-template <typename Geometry, typename Tag>
+template <typename Geometry,
+ typename Tag = typename geometry::tag<Geometry>::type>
struct equals
{
- static bool apply(Geometry const& g1, Geometry const& g2)
+ inline static bool apply(Geometry const& g1, Geometry const& g2)
{
return geometry::equals(g1, g2);
}
@@ -27,7 +27,7 @@ struct equals
template <typename T>
struct equals<T, void>
{
- static bool apply(T const& v1, T const& v2)
+ inline static bool apply(T const& v1, T const& v2)
{
return v1 == v2;
}
@@ -39,12 +39,9 @@ struct tuple_equals
inline static bool apply(Tuple const& t1, Tuple const& t2)
{
typedef typename boost::tuples::element<I, Tuple>::type T;
- return
- equals<
- T, typename geometry::traits::tag<T>::type
- >::apply(boost::get<I>(t1), boost::get<I>(t2))
- &&
- tuple_equals<Tuple, I+1, N>::apply(t1, t2);
+
+ return equals<T>::apply(boost::get<I>(t1), boost::get<I>(t2))
+ && tuple_equals<Tuple, I+1, N>::apply(t1, t2);
}
};
@@ -57,7 +54,11 @@ struct tuple_equals<Tuple, I, I>
}
};
-} // namespace detail
+// TODO: Consider this: Since equal_to<> is using geometry::equals() it's possible that
+// two compared Indexables are not exactly the same! They will be spatially equal
+// but not strictly equal. Consider 2 Segments with reversed order of points.
+// Therefore it's possible that during the Value removal different value will be
+// removed than the one that was passed.
/*!
\brief The function object comparing Values.
@@ -67,8 +68,10 @@ The default version handles Values which are Indexables.
This template is also specialized for std::pair<T1, T2> and boost::tuple<...>.
\tparam Value The type of objects which are compared by this function object.
+\tparam IsIndexable If true, Values are compared using boost::geometry::equals() functions.
*/
-template <typename Value>
+template <typename Value,
+ bool IsIndexable = is_indexable<Value>::value>
struct equal_to
{
/*! \brief The type of result returned by function object. */
@@ -81,9 +84,9 @@ struct equal_to
\param r Second value.
\return true if values are equal.
*/
- bool operator()(Value const& l, Value const& r) const
+ inline bool operator()(Value const& l, Value const& r) const
{
- return detail::equals<Value, typename geometry::traits::tag<Value>::type>::apply(l ,r);
+ return detail::equals<Value>::apply(l ,r);
}
};
@@ -97,7 +100,7 @@ It compares pairs' first values, then second values.
\tparam T2 The second type.
*/
template <typename T1, typename T2>
-struct equal_to< std::pair<T1, T2> >
+struct equal_to<std::pair<T1, T2>, false>
{
/*! \brief The type of result returned by function object. */
typedef bool result_type;
@@ -109,12 +112,10 @@ struct equal_to< std::pair<T1, T2> >
\param r Second value.
\return true if values are equal.
*/
- bool operator()(std::pair<T1, T2> const& l, std::pair<T1, T2> const& r) const
+ inline bool operator()(std::pair<T1, T2> const& l, std::pair<T1, T2> const& r) const
{
- typedef detail::equals<T1, typename geometry::traits::tag<T1>::type> equals1;
- typedef detail::equals<T2, typename geometry::traits::tag<T2>::type> equals2;
-
- return equals1::apply(l.first, r.first) && equals2::apply(l.second, r.second);
+ return detail::equals<T1>::apply(l.first, r.first)
+ && detail::equals<T2>::apply(l.second, r.second);
}
};
@@ -126,7 +127,7 @@ It compares all members of the tuple from the first one to the last one.
*/
template <typename T0, typename T1, typename T2, typename T3, typename T4,
typename T5, typename T6, typename T7, typename T8, typename T9>
-struct equal_to< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
+struct equal_to<boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>, false>
{
typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> value_type;
@@ -140,7 +141,7 @@ struct equal_to< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
\param r Second value.
\return true if values are equal.
*/
- bool operator()(value_type const& l, value_type const& r) const
+ inline bool operator()(value_type const& l, value_type const& r) const
{
return detail::tuple_equals<
value_type, 0, boost::tuples::length<value_type>::value
@@ -148,15 +149,13 @@ struct equal_to< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
}
};
-}}} // namespace boost::geometry::index
+}}}} // namespace boost::geometry::index::detail
#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <tuple>
-namespace boost { namespace geometry { namespace index {
-
-namespace detail {
+namespace boost { namespace geometry { namespace index { namespace detail {
template <typename Tuple, size_t I, size_t N>
struct std_tuple_equals
@@ -164,12 +163,9 @@ struct std_tuple_equals
inline static bool apply(Tuple const& t1, Tuple const& t2)
{
typedef typename std::tuple_element<I, Tuple>::type T;
- return
- equals<
- T, typename geometry::traits::tag<T>::type
- >::apply(std::get<I>(t1), std::get<I>(t2))
- &&
- std_tuple_equals<Tuple, I+1, N>::apply(t1, t2);
+
+ return equals<T>::apply(std::get<I>(t1), std::get<I>(t2))
+ && std_tuple_equals<Tuple, I+1, N>::apply(t1, t2);
}
};
@@ -182,8 +178,6 @@ struct std_tuple_equals<Tuple, I, I>
}
};
-} // namespace detail
-
/*!
\brief The function object comparing Values.
@@ -192,7 +186,7 @@ It's defined if the compiler supports tuples and variadic templates.
It compares all members of the tuple from the first one to the last one.
*/
template <typename ...Args>
-struct equal_to< std::tuple<Args...> >
+struct equal_to<std::tuple<Args...>, false>
{
typedef std::tuple<Args...> value_type;
@@ -214,8 +208,42 @@ struct equal_to< std::tuple<Args...> >
}
};
-}}} // namespace boost::geometry::index
+}}}} // namespace boost::geometry::index::detail
#endif // !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+namespace boost { namespace geometry { namespace index {
+
+/*!
+\brief The function object comparing Values.
+
+The default version handles Values which are Indexables, std::pair<T1, T2>, boost::tuple<...>
+and std::tuple<...> if STD tuples and variadic templates are supported.
+All members are compared from left to right, Geometries using boost::geometry::equals() function,
+other types using operator==.
+
+\tparam Value The type of objects which are compared by this function object.
+*/
+template <typename Value>
+struct equal_to
+ : detail::equal_to<Value>
+{
+ /*! \brief The type of result returned by function object. */
+ typedef typename detail::equal_to<Value>::result_type result_type;
+
+ /*!
+ \brief Compare Values.
+
+ \param l First value.
+ \param r Second value.
+ \return true if Values are equal.
+ */
+ inline bool operator()(Value const& l, Value const& r) const
+ {
+ return detail::equal_to<Value>::operator()(l ,r);
+ }
+};
+
+}}} // namespace boost::geometry::index
+
#endif // BOOST_GEOMETRY_INDEX_EQUAL_TO_HPP
diff --git a/3party/boost/boost/geometry/index/indexable.hpp b/3party/boost/boost/geometry/index/indexable.hpp
index 9533fcf9e2..5270ca22e8 100644
--- a/3party/boost/boost/geometry/index/indexable.hpp
+++ b/3party/boost/boost/geometry/index/indexable.hpp
@@ -1,6 +1,6 @@
// Boost.Geometry Index
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -11,9 +11,7 @@
#include <boost/mpl/assert.hpp>
-namespace boost { namespace geometry { namespace index {
-
-namespace detail {
+namespace boost { namespace geometry { namespace index { namespace detail {
template <typename Geometry, typename GeometryTag>
struct is_indexable_impl { static const bool value = false; };
@@ -24,6 +22,9 @@ struct is_indexable_impl<Point, geometry::point_tag> { static const bool value =
template <typename Box>
struct is_indexable_impl<Box, geometry::box_tag> { static const bool value = true; };
+template <typename Segment>
+struct is_indexable_impl<Segment, geometry::segment_tag> { static const bool value = true; };
+
template <typename Indexable>
struct is_indexable
{
@@ -31,17 +32,17 @@ struct is_indexable
is_indexable_impl<Indexable, typename geometry::traits::tag<Indexable>::type>::value;
};
-} // namespace detail
-
/*!
\brief The function object extracting Indexable from Value.
It translates Value object to Indexable object. The default version handles Values which are Indexables.
-This template is also specialized for std::pair<Indexable, T2> and boost::tuple<Indexable, ...>.
+This template is also specialized for std::pair<Indexable, T2>, boost::tuple<Indexable, ...>
+and std::tuple<Indexable, ...>.
\tparam Value The Value type which may be translated directly to the Indexable.
+\tparam IsIndexable If true, the const reference to Value is returned.
*/
-template <typename Value>
+template <typename Value, bool IsIndexable = is_indexable<Value>::value>
struct indexable
{
BOOST_MPL_ASSERT_MSG(
@@ -49,6 +50,7 @@ struct indexable
NOT_VALID_INDEXABLE_TYPE,
(Value)
);
+
/*! \brief The type of result returned by function object. */
typedef Value const& result_type;
@@ -58,7 +60,7 @@ struct indexable
\param v The value.
\return The indexable.
*/
- result_type operator()(Value const& v) const
+ inline result_type operator()(Value const& v) const
{
return v;
}
@@ -73,7 +75,7 @@ This specialization translates from std::pair<Indexable, T2>.
\tparam T2 The second type.
*/
template <typename Indexable, typename T2>
-struct indexable< std::pair<Indexable, T2> >
+struct indexable<std::pair<Indexable, T2>, false>
{
BOOST_MPL_ASSERT_MSG(
(detail::is_indexable<Indexable>::value),
@@ -90,7 +92,7 @@ struct indexable< std::pair<Indexable, T2> >
\param v The value.
\return The indexable.
*/
- result_type operator()(std::pair<Indexable, T2> const& v) const
+ inline result_type operator()(std::pair<Indexable, T2> const& v) const
{
return v.first;
}
@@ -105,7 +107,7 @@ This specialization translates from boost::tuple<Indexable, ...>.
*/
template <typename Indexable, typename T1, typename T2, typename T3, typename T4,
typename T5, typename T6, typename T7, typename T8, typename T9>
-struct indexable< boost::tuple<Indexable, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
+struct indexable<boost::tuple<Indexable, T1, T2, T3, T4, T5, T6, T7, T8, T9>, false>
{
typedef boost::tuple<Indexable, T1, T2, T3, T4, T5, T6, T7, T8, T9> value_type;
@@ -124,19 +126,19 @@ struct indexable< boost::tuple<Indexable, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
\param v The value.
\return The indexable.
*/
- result_type operator()(value_type const& v) const
+ inline result_type operator()(value_type const& v) const
{
return boost::get<0>(v);
}
};
-}}} // namespace boost::geometry::index
+}}}} // namespace boost::geometry::index::detail
#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <tuple>
-namespace boost { namespace geometry { namespace index {
+namespace boost { namespace geometry { namespace index { namespace detail {
/*!
\brief The function object extracting Indexable from Value.
@@ -147,7 +149,7 @@ It's defined if the compiler supports tuples and variadic templates.
\tparam Indexable The Indexable type.
*/
template <typename Indexable, typename ...Args>
-struct indexable< std::tuple<Indexable, Args...> >
+struct indexable<std::tuple<Indexable, Args...>, false>
{
typedef std::tuple<Indexable, Args...> value_type;
@@ -172,8 +174,40 @@ struct indexable< std::tuple<Indexable, Args...> >
}
};
-}}} // namespace boost::geometry::index
+}}}} // namespace boost::geometry::index::detail
#endif // !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+namespace boost { namespace geometry { namespace index {
+
+/*!
+\brief The function object extracting Indexable from Value.
+
+It translates Value object to Indexable object. By default, it can handle Values which are Indexables,
+std::pair<Indexable, T2>, boost::tuple<Indexable, ...> and std::tuple<Indexable, ...> if STD tuples
+and variadic templates are supported.
+
+\tparam Value The Value type which may be translated directly to the Indexable.
+*/
+template <typename Value>
+struct indexable
+ : detail::indexable<Value>
+{
+ /*! \brief The type of result returned by function object. It should be const Indexable reference. */
+ typedef typename detail::indexable<Value>::result_type result_type;
+
+ /*!
+ \brief Return indexable extracted from the value.
+
+ \param v The value.
+ \return The indexable.
+ */
+ inline result_type operator()(Value const& v) const
+ {
+ return detail::indexable<Value>::operator()(v);
+ }
+};
+
+}}} // namespace boost::geometry::index
+
#endif // BOOST_GEOMETRY_INDEX_INDEXABLE_HPP
diff --git a/3party/boost/boost/geometry/index/predicates.hpp b/3party/boost/boost/geometry/index/predicates.hpp
index 5bf88df050..10033abff8 100644
--- a/3party/boost/boost/geometry/index/predicates.hpp
+++ b/3party/boost/boost/geometry/index/predicates.hpp
@@ -2,7 +2,7 @@
//
// Spatial query predicates
//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -24,8 +24,6 @@
namespace boost { namespace geometry { namespace index {
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
/*!
\brief Generate \c contains() predicate.
@@ -51,8 +49,6 @@ contains(Geometry const& g)
return detail::spatial_predicate<Geometry, detail::contains_tag, false>(g);
}
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
/*!
\brief Generate \c covered_by() predicate.
@@ -78,8 +74,6 @@ covered_by(Geometry const& g)
return detail::spatial_predicate<Geometry, detail::covered_by_tag, false>(g);
}
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
/*!
\brief Generate \c covers() predicate.
@@ -105,8 +99,6 @@ covers(Geometry const& g)
return detail::spatial_predicate<Geometry, detail::covers_tag, false>(g);
}
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
/*!
\brief Generate \c disjoint() predicate.
@@ -277,13 +269,15 @@ satisfies(UnaryPredicate const& pred)
\brief Generate nearest() predicate.
When nearest predicate is passed to the query, k-nearest neighbour search will be performed.
-\c nearest() predicate takes a \c Point from which distance to \c Values is calculated
-and the maximum number of \c Values that should be returned.
+\c nearest() predicate takes a \c Geometry from which distances to \c Values are calculated
+and the maximum number of \c Values that should be returned. Internally
+boost::geometry::comparable_distance() is used to perform the calculation.
\par Example
\verbatim
bgi::query(spatial_index, bgi::nearest(pt, 5), std::back_inserter(result));
bgi::query(spatial_index, bgi::nearest(pt, 5) && bgi::intersects(box), std::back_inserter(result));
+bgi::query(spatial_index, bgi::nearest(box, 5), std::back_inserter(result));
\endverbatim
\warning
@@ -291,14 +285,14 @@ Only one \c nearest() predicate may be used in a query.
\ingroup predicates
-\param point The point from which distance is calculated.
+\param geometry The geometry from which distance is calculated.
\param k The maximum number of values to return.
*/
-template <typename Point> inline
-detail::nearest<Point>
-nearest(Point const& point, unsigned k)
+template <typename Geometry> inline
+detail::nearest<Geometry>
+nearest(Geometry const& geometry, unsigned k)
{
- return detail::nearest<Point>(point, k);
+ return detail::nearest<Geometry>(geometry, k);
}
#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
@@ -370,11 +364,8 @@ operator&&(Pred1 const& p1, Pred2 const& p2)
}
template <typename Head, typename Tail, typename Pred> inline
-typename tuples::push_back_impl<
- boost::tuples::cons<Head, Tail>,
- Pred,
- 0,
- boost::tuples::length<boost::tuples::cons<Head, Tail> >::value
+typename tuples::push_back<
+ boost::tuples::cons<Head, Tail>, Pred
>::type
operator&&(boost::tuples::cons<Head, Tail> const& t, Pred const& p)
{
@@ -382,8 +373,8 @@ operator&&(boost::tuples::cons<Head, Tail> const& t, Pred const& p)
namespace bt = boost::tuples;
return
- tuples::push_back_impl<
- bt::cons<Head, Tail>, Pred, 0, bt::length< bt::cons<Head, Tail> >::value
+ tuples::push_back<
+ bt::cons<Head, Tail>, Pred
>::apply(t, p);
}
diff --git a/3party/boost/boost/geometry/index/rtree.hpp b/3party/boost/boost/geometry/index/rtree.hpp
index 018d508f6d..09f07ffe77 100644
--- a/3party/boost/boost/geometry/index/rtree.hpp
+++ b/3party/boost/boost/geometry/index/rtree.hpp
@@ -3,7 +3,7 @@
// R-tree implementation
//
// Copyright (c) 2008 Federico J. Fernandez.
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -12,13 +12,30 @@
#ifndef BOOST_GEOMETRY_INDEX_RTREE_HPP
#define BOOST_GEOMETRY_INDEX_RTREE_HPP
+// STD
#include <algorithm>
+// Boost
#include <boost/tuple/tuple.hpp>
#include <boost/move/move.hpp>
-#include <boost/geometry/geometry.hpp>
+// Boost.Geometry
+#include <boost/geometry/algorithms/detail/comparable_distance/interface.hpp>
+#include <boost/geometry/algorithms/centroid.hpp>
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/disjoint.hpp>
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+#include <boost/geometry/algorithms/overlaps.hpp>
+#include <boost/geometry/algorithms/touches.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+// Boost.Geometry.Index
#include <boost/geometry/index/detail/config_begin.hpp>
#include <boost/geometry/index/detail/assert.hpp>
@@ -61,11 +78,11 @@
#include <boost/geometry/index/detail/rtree/utilities/view.hpp>
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
#include <boost/geometry/index/detail/rtree/query_iterators.hpp>
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_TYPE_ERASED_ITERATORS
-#include <boost/geometry/index/detail/type_erased_iterators.hpp>
-#endif
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+// serialization
+#include <boost/geometry/index/detail/serialization.hpp>
#endif
// TODO change the name to bounding_tree
@@ -98,13 +115,18 @@ Predefined algorithms with run-time parameters are:
\li \c boost::geometry::index::dynamic_quadratic,
\li \c boost::geometry::index::dynamic_rstar.
-\par Translator
-The Translator translates from Value to Indexable each time r-tree requires it. Which means that this
-operation is done for each Value access. Therefore the Translator should return the Indexable by
-const reference instead of a value. Default translator can translate all types adapted to Point
-or Box concepts (called Indexables). It also handles <tt>std::pair<Indexable, T></tt> and
+\par IndexableGetter
+The object of IndexableGetter type translates from Value to Indexable each time r-tree requires it. Which means that this
+operation is done for each Value access. Therefore the IndexableGetter should return the Indexable by
+const reference instead of a value. Default one can translate all types adapted to Point, Box or Segment
+concepts (called Indexables). It also handles <tt>std::pair<Indexable, T></tt> and
<tt>boost::tuple<Indexable, ...></tt>. For example, if <tt>std::pair<Box, int></tt> is stored in the
-container, the default translator translates from <tt>std::pair<Box, int> const&</tt> to <tt>Box const&</tt>.
+container, the default IndexableGetter translates from <tt>std::pair<Box, int> const&</tt> to <tt>Box const&</tt>.
+
+\par EqualTo
+The object of EqualTo type compares Values and returns <tt>true</tt> if they're equal. It's similar to <tt>std::equal_to<></tt>.
+The default EqualTo returns the result of <tt>boost::geometry::equals()</tt> for types adapted to some Geometry concept
+defined in Boost.Geometry and the result of operator= for other types. Components of Pairs and Tuples are compared left-to-right.
\tparam Value The type of objects stored in the container.
\tparam Parameters Compile-time parameters.
@@ -166,8 +188,13 @@ private:
typedef typename allocators_type::node_pointer node_pointer;
typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
+ typedef detail::rtree::node_auto_ptr<value_type, options_type, translator_type, box_type, allocators_type> node_auto_ptr;
friend class detail::rtree::utilities::view<rtree>;
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+ friend class detail::rtree::private_view<rtree>;
+ friend class detail::rtree::const_private_view<rtree>;
+#endif
public:
@@ -184,6 +211,9 @@ public:
/*! \brief Unsigned integral type used by the container. */
typedef typename allocators_type::size_type size_type;
+ /*! \brief Type of const query iterator. */
+ typedef index::detail::rtree::iterators::query_iterator<value_type, allocators_type> const_query_iterator;
+
public:
/*!
@@ -223,6 +253,8 @@ public:
/*!
\brief The constructor.
+ The tree is created using packing algorithm.
+
\param first The beginning of the range of Values.
\param last The end of the range of Values.
\param parameters The parameters object.
@@ -254,6 +286,8 @@ public:
/*!
\brief The constructor.
+ The tree is created using packing algorithm.
+
\param rng The range of Values.
\param parameters The parameters object.
\param getter The function object extracting Indexable from Value.
@@ -682,14 +716,18 @@ public:
<b>Spatial predicates</b>
Spatial predicates may be generated by one of the functions listed below:
+ \li \c boost::geometry::index::contains(),
\li \c boost::geometry::index::covered_by(),
+ \li \c boost::geometry::index::covers(),
\li \c boost::geometry::index::disjoint(),
\li \c boost::geometry::index::intersects(),
\li \c boost::geometry::index::overlaps(),
\li \c boost::geometry::index::within(),
It is possible to negate spatial predicates:
+ \li <tt>! boost::geometry::index::contains()</tt>,
\li <tt>! boost::geometry::index::covered_by()</tt>,
+ \li <tt>! boost::geometry::index::covers()</tt>,
\li <tt>! boost::geometry::index::disjoint()</tt>,
\li <tt>! boost::geometry::index::intersects()</tt>,
\li <tt>! boost::geometry::index::overlaps()</tt>,
@@ -726,6 +764,7 @@ public:
\par Throws
If Value copy constructor or copy assignment throws.
+ If predicates copy throws.
\warning
Only one \c nearest() perdicate may be passed to the query. Passing more of them results in compile-time error.
@@ -748,44 +787,123 @@ public:
return query_dispatch(predicates, out_it, boost::mpl::bool_<is_distance_predicate>());
}
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+ /*!
+ \brief Returns the query iterator pointing at the begin of the query range.
+
+ This method returns the iterator which may be used to perform iterative queries. For the information
+ about the predicates which may be passed to this method see query().
+
+ \par Example
+ \verbatim
+ for ( Rtree::const_query_iterator it = tree.qbegin(bgi::nearest(pt, 10000)) ;
+ it != tree.qend() ; ++it )
+ {
+ // do something with value
+ if ( has_enough_nearest_values() )
+ break;
+ }
+ \endverbatim
+
+ \par Throws
+ If predicates copy throws.
+ If allocation throws.
+
+ \param predicates Predicates.
+
+ \return The iterator pointing at the begin of the query range.
+ */
+ template <typename Predicates>
+ const_query_iterator qbegin(Predicates const& predicates) const
+ {
+ return const_query_iterator(qbegin_(predicates));
+ }
+
+ /*!
+ \brief Returns the query iterator pointing at the end of the query range.
+
+ This method returns the iterator which may be used to check if the query has ended.
+
+ \par Example
+ \verbatim
+ for ( Rtree::const_query_iterator it = tree.qbegin(bgi::nearest(pt, 10000)) ;
+ it != tree.qend() ; ++it )
+ {
+ // do something with value
+ if ( has_enough_nearest_values() )
+ break;
+ }
+ \endverbatim
+
+ \par Throws
+ Nothing
+
+ \return The iterator pointing at the end of the query range.
+ */
+ const_query_iterator qend() const
+ {
+ return const_query_iterator();
+ }
+
+#ifndef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+private:
+#endif
+ /*!
+ \brief Returns the query iterator pointing at the begin of the query range.
+
+ This method returns the iterator which may be used to perform iterative queries. For the information
+ about the predicates which may be passed to this method see query().
+
+ The type of the returned iterator depends on the type of passed Predicates but the iterator of this type
+ may be assigned to the variable of const_query_iterator type. If you'd like to use the type of the iterator
+ returned by this method you may get the type e.g. by using C++11 decltype or Boost.Typeof library.
+ This iterator may be compared with iterators returned by both versions of qend() method.
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_TYPE_ERASED_ITERATORS
+ \par Example
+ \verbatim
+ // Store the result in the container using std::copy() - it requires both iterators of the same type
+ std::copy(tree.qbegin(bgi::intersects(box)), tree.qend(bgi::intersects(box)), std::back_inserter(result));
- // BEWARE!
- // Don't use this type-erased iterator after assigning values returned by qbegin(Pred) and qend()
- // e.g. don't pass them into the std::copy() or compare them like this:
- // const_query_iterator i1 = qbegin(...);
- // const_query_iterator i2 = qend();
- // i1 == i2; // BAM!
- // now this will cause undefined behaviour.
- // using native types is ok:
- // qbegin(...) == qend();
+ // Store the result in the container using std::copy() and type-erased iterators
+ Rtree::const_query_iterator first = tree.qbegin(bgi::intersects(box));
+ Rtree::const_query_iterator last = tree.qend();
+ std::copy(first, last, std::back_inserter(result));
- typedef typename index::detail::single_pass_iterator_type<
- value_type, const_reference, const_pointer, difference_type
- >::type const_query_iterator;
+ // Boost.Typeof
+ typedef BOOST_TYPEOF(tree.qbegin(bgi::nearest(pt, 10000))) Iter;
+ for ( Iter it = tree.qbegin(bgi::nearest(pt, 10000)) ; it != tree.qend() ; ++it )
+ {
+ // do something with value
+ if ( has_enough_nearest_values() )
+ break;
+ }
+ \endverbatim
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_TYPE_ERASED_ITERATORS
+ \par Throws
+ If predicates copy throws.
+ If allocation throws.
+ \param predicates Predicates.
+
+ \return The iterator pointing at the begin of the query range.
+ */
template <typename Predicates>
typename boost::mpl::if_c<
detail::predicates_count_distance<Predicates>::value == 0,
- detail::rtree::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
- detail::rtree::distance_query_iterator<
+ detail::rtree::iterators::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
+ detail::rtree::iterators::distance_query_iterator<
value_type, options_type, translator_type, box_type, allocators_type, Predicates,
detail::predicates_find_distance<Predicates>::value
>
>::type
- qbegin(Predicates const& predicates) const
+ qbegin_(Predicates const& predicates) const
{
static const unsigned distance_predicates_count = detail::predicates_count_distance<Predicates>::value;
BOOST_MPL_ASSERT_MSG((distance_predicates_count <= 1), PASS_ONLY_ONE_DISTANCE_PREDICATE, (Predicates));
typedef typename boost::mpl::if_c<
detail::predicates_count_distance<Predicates>::value == 0,
- detail::rtree::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
- detail::rtree::distance_query_iterator<
+ detail::rtree::iterators::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
+ detail::rtree::iterators::distance_query_iterator<
value_type, options_type, translator_type, box_type, allocators_type, Predicates,
detail::predicates_find_distance<Predicates>::value
>
@@ -797,24 +915,50 @@ public:
return iterator_type(m_members.root, m_members.translator(), predicates);
}
+ /*!
+ \brief Returns the query iterator pointing at the end of the query range.
+
+ This method returns the iterator which may be used to perform iterative queries. For the information
+ about the predicates which may be passed to this method see query().
+
+ The type of the returned iterator depends on the type of passed Predicates but the iterator of this type
+ may be assigned to the variable of const_query_iterator type. If you'd like to use the type of the iterator
+ returned by this method you may get the type e.g. by using C++11 decltype or Boost.Typeof library.
+
+ The type of the iterator returned by this method is the same as the one returned by qbegin() to which
+ the same predicates were passed.
+
+ \par Example
+ \verbatim
+ // Store the result in the container using std::copy() - it requires both iterators of the same type
+ std::copy(tree.qbegin(bgi::intersects(box)), tree.qend(bgi::intersects(box)), std::back_inserter(result));
+ \endverbatim
+
+ \par Throws
+ If predicates copy throws.
+
+ \param predicates Predicates.
+
+ \return The iterator pointing at the end of the query range.
+ */
template <typename Predicates>
typename boost::mpl::if_c<
detail::predicates_count_distance<Predicates>::value == 0,
- detail::rtree::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
- detail::rtree::distance_query_iterator<
+ detail::rtree::iterators::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
+ detail::rtree::iterators::distance_query_iterator<
value_type, options_type, translator_type, box_type, allocators_type, Predicates,
detail::predicates_find_distance<Predicates>::value
>
>::type
- qend(Predicates const& predicates) const
+ qend_(Predicates const& predicates) const
{
static const unsigned distance_predicates_count = detail::predicates_count_distance<Predicates>::value;
BOOST_MPL_ASSERT_MSG((distance_predicates_count <= 1), PASS_ONLY_ONE_DISTANCE_PREDICATE, (Predicates));
typedef typename boost::mpl::if_c<
detail::predicates_count_distance<Predicates>::value == 0,
- detail::rtree::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
- detail::rtree::distance_query_iterator<
+ detail::rtree::iterators::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
+ detail::rtree::iterators::distance_query_iterator<
value_type, options_type, translator_type, box_type, allocators_type, Predicates,
detail::predicates_find_distance<Predicates>::value
>
@@ -823,13 +967,48 @@ public:
return iterator_type(m_members.translator(), predicates);
}
- detail::rtree::end_query_iterator<value_type, allocators_type>
- qend() const
+ /*!
+ \brief Returns the query iterator pointing at the end of the query range.
+
+ This method returns the iterator which may be compared with the iterator returned by qbegin() in order to
+ check if the query has ended.
+
+ The type of the returned iterator is different than the type returned by qbegin() but the iterator of this type
+ may be assigned to the variable of const_query_iterator type. If you'd like to use the type of the iterator returned by this
+ method, which most certainly will be faster than the type-erased iterator, you may get the type
+ e.g. by using C++11 decltype or Boost.Typeof library.
+
+ The type of the iterator returned by this method is dfferent than the type returned by qbegin().
+
+ \par Example
+ \verbatim
+ // Store the result in the container using std::copy() and type-erased iterators
+ Rtree::const_query_iterator first = tree.qbegin(bgi::intersects(box));
+ Rtree::const_query_iterator last = tree.qend();
+ std::copy(first, last, std::back_inserter(result));
+
+ // Boost.Typeof
+ typedef BOOST_TYPEOF(tree.qbegin(bgi::nearest(pt, 10000))) Iter;
+ for ( Iter it = tree.qbegin(bgi::nearest(pt, 10000)) ; it != tree.qend() ; ++it )
+ {
+ // do something with value
+ if ( has_enough_nearest_values() )
+ break;
+ }
+ \endverbatim
+
+ \par Throws
+ Nothing
+
+ \return The iterator pointing at the end of the query range.
+ */
+ detail::rtree::iterators::end_query_iterator<value_type, allocators_type>
+ qend_() const
{
- return detail::rtree::end_query_iterator<value_type, allocators_type>();
+ return detail::rtree::iterators::end_query_iterator<value_type, allocators_type>();
}
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+public:
/*!
\brief Returns the number of stored values.
@@ -1155,6 +1334,7 @@ private:
dst.m_members.parameters() = src.m_members.parameters();
}
+ // TODO use node_auto_ptr
if ( dst.m_members.root )
{
detail::rtree::visitors::destroy<value_type, options_type, translator_type, box_type, allocators_type>
@@ -1393,14 +1573,18 @@ Values will be returned only if all predicates are met.
<b>Spatial predicates</b>
Spatial predicates may be generated by one of the functions listed below:
+\li \c boost::geometry::index::contains(),
\li \c boost::geometry::index::covered_by(),
+\li \c boost::geometry::index::covers(),
\li \c boost::geometry::index::disjoint(),
\li \c boost::geometry::index::intersects(),
\li \c boost::geometry::index::overlaps(),
\li \c boost::geometry::index::within(),
It is possible to negate spatial predicates:
+\li <tt>! boost::geometry::index::contains()</tt>,
\li <tt>! boost::geometry::index::covered_by()</tt>,
+\li <tt>! boost::geometry::index::covers()</tt>,
\li <tt>! boost::geometry::index::disjoint()</tt>,
\li <tt>! boost::geometry::index::intersects()</tt>,
\li <tt>! boost::geometry::index::overlaps()</tt>,
@@ -1460,6 +1644,75 @@ query(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree,
}
/*!
+\brief Returns the query iterator pointing at the begin of the query range.
+
+This method returns the iterator which may be used to perform iterative queries. For the information
+about the predicates which may be passed to this method see query().
+
+\par Example
+\verbatim
+
+for ( Rtree::const_query_iterator it = qbegin(tree, bgi::nearest(pt, 10000)) ;
+ it != qend(tree) ; ++it )
+{
+ // do something with value
+ if ( has_enough_nearest_values() )
+ break;
+}
+\endverbatim
+
+\par Throws
+If predicates copy throws.
+If allocation throws.
+
+\ingroup rtree_functions
+
+\param tree The rtree.
+\param predicates Predicates.
+
+\return The iterator pointing at the begin of the query range.
+*/
+template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator,
+ typename Predicates> inline
+typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::const_query_iterator
+qbegin(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree,
+ Predicates const& predicates)
+{
+ return tree.qbegin(predicates);
+}
+
+/*!
+\brief Returns the query iterator pointing at the end of the query range.
+
+This method returns the iterator which may be used to check if the query has ended.
+
+\par Example
+\verbatim
+
+for ( Rtree::const_query_iterator it = qbegin(tree, bgi::nearest(pt, 10000)) ;
+ it != qend(tree) ; ++it )
+{
+ // do something with value
+ if ( has_enough_nearest_values() )
+ break;
+}
+\endverbatim
+
+\par Throws
+Nothing
+
+\ingroup rtree_functions
+
+\return The iterator pointing at the end of the query range.
+*/
+template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator> inline
+typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::const_query_iterator
+qend(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree)
+{
+ return tree.qend();
+}
+
+/*!
\brief Remove all values from the index.
It calls \c rtree::clear().
@@ -1545,6 +1798,9 @@ inline void swap(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> &
}}} // namespace boost::geometry::index
+// TODO: don't include the implementation at the end of the file
+#include <boost/geometry/algorithms/detail/comparable_distance/implementation.hpp>
+
#include <boost/geometry/index/detail/config_end.hpp>
#endif // BOOST_GEOMETRY_INDEX_RTREE_HPP
diff --git a/3party/boost/boost/geometry/io/dsv/write.hpp b/3party/boost/boost/geometry/io/dsv/write.hpp
index 62929f8073..f39a2489ad 100644
--- a/3party/boost/boost/geometry/io/dsv/write.hpp
+++ b/3party/boost/boost/geometry/io/dsv/write.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -20,12 +21,14 @@
#include <boost/concept_check.hpp>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/tag_cast.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
@@ -209,9 +212,10 @@ struct dsv_poly
dsv_range<ring>::apply(os, exterior_ring(poly), settings);
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(poly);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(poly);
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
os << settings.list_separator;
dsv_range<ring>::apply(os, *it, settings);
@@ -339,9 +343,61 @@ private:
dsv_settings m_settings;
};
+
+template <typename MultiGeometry>
+struct dsv_multi
+{
+ typedef dispatch::dsv
+ <
+ typename single_tag_of
+ <
+ typename tag<MultiGeometry>::type
+ >::type,
+ typename boost::range_value<MultiGeometry>::type
+ > dispatch_one;
+
+ typedef typename boost::range_iterator
+ <
+ MultiGeometry const
+ >::type iterator;
+
+
+ template <typename Char, typename Traits>
+ static inline void apply(std::basic_ostream<Char, Traits>& os,
+ MultiGeometry const& multi,
+ dsv_settings const& settings)
+ {
+ os << settings.list_open;
+
+ bool first = true;
+ for(iterator it = boost::begin(multi);
+ it != boost::end(multi);
+ ++it, first = false)
+ {
+ os << (first ? "" : settings.list_separator);
+ dispatch_one::apply(os, *it, settings);
+ }
+ os << settings.list_close;
+ }
+};
+
}} // namespace detail::dsv
#endif // DOXYGEN_NO_DETAIL
+// TODO: The alternative to this could be a forward declaration of dispatch::dsv<>
+// or braking the code into the interface and implementation part
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+template <typename Geometry>
+struct dsv<multi_tag, Geometry>
+ : detail::dsv::dsv_multi<Geometry>
+{};
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
/*!
\brief Main DSV-streaming function
\details DSV stands for Delimiter Separated Values. Geometries can be streamed
diff --git a/3party/boost/boost/geometry/io/svg/svg_mapper.hpp b/3party/boost/boost/geometry/io/svg/svg_mapper.hpp
index 1252cc8062..b53fef2ceb 100644
--- a/3party/boost/boost/geometry/io/svg/svg_mapper.hpp
+++ b/3party/boost/boost/geometry/io/svg/svg_mapper.hpp
@@ -37,7 +37,6 @@
#include <boost/geometry/strategies/transform/map_transformer.hpp>
#include <boost/geometry/views/segment_view.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
#include <boost/geometry/multi/algorithms/envelope.hpp>
#include <boost/geometry/multi/algorithms/num_points.hpp>
@@ -226,10 +225,17 @@ inline void svg_map(std::ostream& stream,
template <typename Point, bool SameScale = true>
class svg_mapper : boost::noncopyable
{
+ typedef typename geometry::select_most_precise
+ <
+ typename coordinate_type<Point>::type,
+ double
+ >::type calculation_type;
+
typedef strategy::transform::map_transformer
<
- Point,
- detail::svg::svg_point_type,
+ calculation_type,
+ geometry::dimension<Point>::type::value,
+ geometry::dimension<Point>::type::value,
true,
SameScale
> transformer_type;
@@ -247,6 +253,7 @@ class svg_mapper : boost::noncopyable
m_matrix.reset(new transformer_type(m_bounding_box,
m_width, m_height));
+
m_stream << "<?xml version=\"1.0\" standalone=\"no\"?>"
<< std::endl
<< "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\""
@@ -255,7 +262,10 @@ class svg_mapper : boost::noncopyable
<< std::endl
<< "<svg " << m_width_height << " version=\"1.1\""
<< std::endl
- << "xmlns=\"http://www.w3.org/2000/svg\">"
+ << "xmlns=\"http://www.w3.org/2000/svg\""
+ << std::endl
+ << "xmlns:xlink=\"http://www.w3.org/1999/xlink\""
+ << ">"
<< std::endl;
}
}
@@ -319,18 +329,6 @@ public :
void map(Geometry const& geometry, std::string const& style,
int size = -1)
{
- BOOST_MPL_ASSERT_MSG
- (
- ( boost::is_same
- <
- Point,
- typename point_type<Geometry>::type
- >::value )
- , POINT_TYPES_ARE_NOT_SAME_FOR_MAPPER_AND_MAP
- , (types<Point, typename point_type<Geometry>::type>)
- );
-
-
init_matrix();
svg_map(m_stream, style, size, geometry, *m_matrix);
}
diff --git a/3party/boost/boost/geometry/io/svg/write_svg.hpp b/3party/boost/boost/geometry/io/svg/write_svg.hpp
index 15fa9c11c4..fba3cbebaf 100644
--- a/3party/boost/boost/geometry/io/svg/write_svg.hpp
+++ b/3party/boost/boost/geometry/io/svg/write_svg.hpp
@@ -1,6 +1,7 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -18,8 +19,8 @@
#include <boost/config.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
@@ -135,13 +136,14 @@ struct svg_poly
// Inner rings:
{
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(polygon);
- for (BOOST_AUTO_TPL(rit, boost::begin(rings));
- rit != boost::end(rings); ++rit)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(polygon);
+ for (typename detail::interior_iterator<Polygon const>::type
+ rit = boost::begin(rings); rit != boost::end(rings); ++rit)
{
first = true;
- for (BOOST_AUTO_TPL(it, boost::begin(*rit)); it != boost::end(*rit);
+ for (typename detail::interior_ring_iterator<Polygon const>::type
+ it = boost::begin(*rit); it != boost::end(*rit);
++it, first = false)
{
os << (first ? "M" : " L") << " "
diff --git a/3party/boost/boost/geometry/io/wkt/detail/prefix.hpp b/3party/boost/boost/geometry/io/wkt/detail/prefix.hpp
index 45e43b88d4..b566e02aa6 100644
--- a/3party/boost/boost/geometry/io/wkt/detail/prefix.hpp
+++ b/3party/boost/boost/geometry/io/wkt/detail/prefix.hpp
@@ -17,10 +17,16 @@
namespace boost { namespace geometry
{
+
#ifndef DOXYGEN_NO_DETAIL
namespace detail { namespace wkt
{
+struct prefix_null
+{
+ static inline const char* apply() { return ""; }
+};
+
struct prefix_point
{
static inline const char* apply() { return "POINT"; }
@@ -36,6 +42,21 @@ struct prefix_linestring
static inline const char* apply() { return "LINESTRING"; }
};
+struct prefix_multipoint
+{
+ static inline const char* apply() { return "MULTIPOINT"; }
+};
+
+struct prefix_multilinestring
+{
+ static inline const char* apply() { return "MULTILINESTRING"; }
+};
+
+struct prefix_multipolygon
+{
+ static inline const char* apply() { return "MULTIPOLYGON"; }
+};
+
}} // namespace wkt::impl
#endif
diff --git a/3party/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp b/3party/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp
index 0e5abbca81..2b2d1946ad 100644
--- a/3party/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp
+++ b/3party/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp
@@ -14,9 +14,8 @@
#ifndef BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_MULTI_HPP
#define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_MULTI_HPP
-
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/domains/gis/io/wkt/write.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
namespace boost { namespace geometry
diff --git a/3party/boost/boost/geometry/io/wkt/read.hpp b/3party/boost/boost/geometry/io/wkt/read.hpp
index 24e93a02f7..748eecdbe6 100644
--- a/3party/boost/boost/geometry/io/wkt/read.hpp
+++ b/3party/boost/boost/geometry/io/wkt/read.hpp
@@ -14,6 +14,7 @@
#ifndef BOOST_GEOMETRY_IO_WKT_READ_HPP
#define BOOST_GEOMETRY_IO_WKT_READ_HPP
+#include <cstddef>
#include <string>
#include <boost/lexical_cast.hpp>
@@ -36,6 +37,8 @@
#include <boost/geometry/core/geometry_id.hpp>
#include <boost/geometry/core/interior_rings.hpp>
#include <boost/geometry/core/mutable_range.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
@@ -306,8 +309,6 @@ struct ring_parser
};
-
-
/*!
\brief Internal, parses a polygon from a string like this "((x y,x y),(x y,x y))"
\note used for parsing polygons and multi-polygons
@@ -358,6 +359,7 @@ struct polygon_parser
}
};
+
inline bool one_of(tokenizer::iterator const& it, std::string const& value,
bool& is_present)
{
@@ -469,7 +471,101 @@ struct geometry_parser
};
+template <typename MultiGeometry, template<typename> class Parser, typename PrefixPolicy>
+struct multi_parser
+{
+ static inline void apply(std::string const& wkt, MultiGeometry& geometry)
+ {
+ traits::clear<MultiGeometry>::apply(geometry);
+
+ tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
+ tokenizer::iterator it;
+ if (initialize<MultiGeometry>(tokens, PrefixPolicy::apply(), wkt, it))
+ {
+ handle_open_parenthesis(it, tokens.end(), wkt);
+
+ // Parse sub-geometries
+ while(it != tokens.end() && *it != ")")
+ {
+ traits::resize<MultiGeometry>::apply(geometry, boost::size(geometry) + 1);
+ Parser
+ <
+ typename boost::range_value<MultiGeometry>::type
+ >::apply(it, tokens.end(), wkt, *(boost::end(geometry) - 1));
+ if (it != tokens.end() && *it == ",")
+ {
+ // Skip "," after multi-element is parsed
+ ++it;
+ }
+ }
+
+ handle_close_parenthesis(it, tokens.end(), wkt);
+ }
+
+ check_end(it, tokens.end(), wkt);
+ }
+};
+template <typename P>
+struct noparenthesis_point_parser
+{
+ static inline void apply(tokenizer::iterator& it, tokenizer::iterator end,
+ std::string const& wkt, P& point)
+ {
+ parsing_assigner<P, 0, dimension<P>::value>::apply(it, end, point, wkt);
+ }
+};
+
+template <typename MultiGeometry, typename PrefixPolicy>
+struct multi_point_parser
+{
+ static inline void apply(std::string const& wkt, MultiGeometry& geometry)
+ {
+ traits::clear<MultiGeometry>::apply(geometry);
+
+ tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
+ tokenizer::iterator it;
+
+ if (initialize<MultiGeometry>(tokens, PrefixPolicy::apply(), wkt, it))
+ {
+ handle_open_parenthesis(it, tokens.end(), wkt);
+
+ // If first point definition starts with "(" then parse points as (x y)
+ // otherwise as "x y"
+ bool using_brackets = (it != tokens.end() && *it == "(");
+
+ while(it != tokens.end() && *it != ")")
+ {
+ traits::resize<MultiGeometry>::apply(geometry, boost::size(geometry) + 1);
+
+ if (using_brackets)
+ {
+ point_parser
+ <
+ typename boost::range_value<MultiGeometry>::type
+ >::apply(it, tokens.end(), wkt, *(boost::end(geometry) - 1));
+ }
+ else
+ {
+ noparenthesis_point_parser
+ <
+ typename boost::range_value<MultiGeometry>::type
+ >::apply(it, tokens.end(), wkt, *(boost::end(geometry) - 1));
+ }
+
+ if (it != tokens.end() && *it == ",")
+ {
+ // Skip "," after point is parsed
+ ++it;
+ }
+ }
+
+ handle_close_parenthesis(it, tokens.end(), wkt);
+ }
+
+ check_end(it, tokens.end(), wkt);
+ }
+};
/*!
@@ -522,7 +618,7 @@ struct box_parser
check_end(it, end, wkt);
int index = 0;
- int n = boost::size(points);
+ std::size_t n = boost::size(points);
if (n == 2)
{
index = 1;
@@ -589,7 +685,6 @@ struct segment_parser
};
-
}} // namespace detail::wkt
#endif // DOXYGEN_NO_DETAIL
@@ -643,6 +738,36 @@ struct read_wkt<polygon_tag, Geometry>
{};
+template <typename MultiGeometry>
+struct read_wkt<multi_point_tag, MultiGeometry>
+ : detail::wkt::multi_point_parser
+ <
+ MultiGeometry,
+ detail::wkt::prefix_multipoint
+ >
+{};
+
+template <typename MultiGeometry>
+struct read_wkt<multi_linestring_tag, MultiGeometry>
+ : detail::wkt::multi_parser
+ <
+ MultiGeometry,
+ detail::wkt::linestring_parser,
+ detail::wkt::prefix_multilinestring
+ >
+{};
+
+template <typename MultiGeometry>
+struct read_wkt<multi_polygon_tag, MultiGeometry>
+ : detail::wkt::multi_parser
+ <
+ MultiGeometry,
+ detail::wkt::polygon_parser,
+ detail::wkt::prefix_multipolygon
+ >
+{};
+
+
// Box (Non-OGC)
template <typename Box>
struct read_wkt<box_tag, Box>
@@ -662,28 +787,11 @@ struct read_wkt<segment_tag, Segment>
/*!
\brief Parses OGC Well-Known Text (\ref WKT) into a geometry (any geometry)
\ingroup wkt
+\tparam Geometry \tparam_geometry
\param wkt string containing \ref WKT
-\param geometry output geometry
-\par Example:
-\note It is case insensitive and can have the WKT forms "point", "point m", "point z", "point zm", "point mz"
-\note Empty sequences can have forms as "LINESTRING ()" or "POLYGON(())"
-Small example showing how to use read_wkt to build a point
-\dontinclude doxygen_1.cpp
-\skip example_from_wkt_point
-\line {
-\until }
-\par Example:
-Small example showing how to use read_wkt to build a linestring
-\dontinclude doxygen_1.cpp
-\skip example_from_wkt_linestring
-\line {
-\until }
-\par Example:
-Small example showing how to use read_wkt to build a polygon
-\dontinclude doxygen_1.cpp
-\skip example_from_wkt_polygon
-\line {
-\until }
+\param geometry \param_geometry output geometry
+\ingroup wkt
+\qbk{[include reference/io/read_wkt.qbk]}
*/
template <typename Geometry>
inline void read_wkt(std::string const& wkt, Geometry& geometry)
diff --git a/3party/boost/boost/geometry/io/wkt/stream.hpp b/3party/boost/boost/geometry/io/wkt/stream.hpp
index 86e49fdaf1..3849dda594 100644
--- a/3party/boost/boost/geometry/io/wkt/stream.hpp
+++ b/3party/boost/boost/geometry/io/wkt/stream.hpp
@@ -22,10 +22,8 @@
// Don't use namespace boost::geometry, to enable the library to stream custom
// geometries which are living outside the namespace boost::geometry
-/*!
-\brief Streams a geometry as Well-Known Text
-\ingroup wkt
-*/
+// This is currently not documented on purpose: the Doxygen 2 QBK generator
+// should be updated w.r.t. << which in the end ruins the DocBook XML
template<typename Char, typename Traits, typename Geometry>
inline std::basic_ostream<Char, Traits>& operator<<
(
diff --git a/3party/boost/boost/geometry/io/wkt/write.hpp b/3party/boost/boost/geometry/io/wkt/write.hpp
index 4ed02e0f8b..6c1a2e153e 100644
--- a/3party/boost/boost/geometry/io/wkt/write.hpp
+++ b/3party/boost/boost/geometry/io/wkt/write.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -19,23 +20,25 @@
#include <boost/array.hpp>
#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
#include <boost/geometry/algorithms/assign.hpp>
#include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/algorithms/disjoint.hpp>
#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/geometries/ring.hpp>
#include <boost/geometry/io/wkt/detail/prefix.hpp>
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
namespace boost { namespace geometry
{
@@ -119,31 +122,49 @@ struct wkt_range
{
template <typename Char, typename Traits>
static inline void apply(std::basic_ostream<Char, Traits>& os,
- Range const& range)
+ Range const& range, bool force_closed)
{
typedef typename boost::range_iterator<Range const>::type iterator_type;
+ typedef stream_coordinate
+ <
+ point_type, 0, dimension<point_type>::type::value
+ > stream_type;
+
bool first = true;
os << PrefixPolicy::apply();
// TODO: check EMPTY here
- for (iterator_type it = boost::begin(range);
- it != boost::end(range);
- ++it)
+ iterator_type begin = boost::begin(range);
+ iterator_type end = boost::end(range);
+ for (iterator_type it = begin; it != end; ++it)
{
os << (first ? "" : ",");
- stream_coordinate
- <
- point_type, 0, dimension<point_type>::type::value
- >::apply(os, *it);
+ stream_type::apply(os, *it);
first = false;
}
+ // optionally, close range to ring by repeating the first point
+ if (force_closed
+ && boost::size(range) > 1
+ && geometry::disjoint(*begin, *(end - 1)))
+ {
+ os << ",";
+ stream_type::apply(os, *begin);
+ }
+
os << SuffixPolicy::apply();
}
+ template <typename Char, typename Traits>
+ static inline void apply(std::basic_ostream<Char, Traits>& os,
+ Range const& range)
+ {
+ apply(os, range, false);
+ }
+
private:
typedef typename boost::range_value<Range>::type point_type;
};
@@ -170,23 +191,52 @@ struct wkt_poly
Polygon const& poly)
{
typedef typename ring_type<Polygon const>::type ring;
+ bool const force_closed = true;
os << PrefixPolicy::apply();
// TODO: check EMPTY here
os << "(";
- wkt_sequence<ring>::apply(os, exterior_ring(poly));
+ wkt_sequence<ring>::apply(os, exterior_ring(poly), force_closed);
- typename interior_return_type<Polygon const>::type rings
- = interior_rings(poly);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
+ typename interior_return_type<Polygon const>::type
+ rings = interior_rings(poly);
+ for (typename detail::interior_iterator<Polygon const>::type
+ it = boost::begin(rings); it != boost::end(rings); ++it)
{
os << ",";
- wkt_sequence<ring>::apply(os, *it);
+ wkt_sequence<ring>::apply(os, *it, force_closed);
}
os << ")";
}
};
+template <typename Multi, typename StreamPolicy, typename PrefixPolicy>
+struct wkt_multi
+{
+ template <typename Char, typename Traits>
+ static inline void apply(std::basic_ostream<Char, Traits>& os,
+ Multi const& geometry)
+ {
+ os << PrefixPolicy::apply();
+ // TODO: check EMPTY here
+ os << "(";
+
+ for (typename boost::range_iterator<Multi const>::type
+ it = boost::begin(geometry);
+ it != boost::end(geometry);
+ ++it)
+ {
+ if (it != boost::begin(geometry))
+ {
+ os << ",";
+ }
+ StreamPolicy::apply(os, *it);
+ }
+
+ os << ")";
+ }
+};
+
template <typename Box>
struct wkt_box
{
@@ -316,6 +366,47 @@ struct wkt<Polygon, polygon_tag>
>
{};
+template <typename Multi>
+struct wkt<Multi, multi_point_tag>
+ : detail::wkt::wkt_multi
+ <
+ Multi,
+ detail::wkt::wkt_point
+ <
+ typename boost::range_value<Multi>::type,
+ detail::wkt::prefix_null
+ >,
+ detail::wkt::prefix_multipoint
+ >
+{};
+
+template <typename Multi>
+struct wkt<Multi, multi_linestring_tag>
+ : detail::wkt::wkt_multi
+ <
+ Multi,
+ detail::wkt::wkt_sequence
+ <
+ typename boost::range_value<Multi>::type
+ >,
+ detail::wkt::prefix_multilinestring
+ >
+{};
+
+template <typename Multi>
+struct wkt<Multi, multi_polygon_tag>
+ : detail::wkt::wkt_multi
+ <
+ Multi,
+ detail::wkt::wkt_poly
+ <
+ typename boost::range_value<Multi>::type,
+ detail::wkt::prefix_null
+ >,
+ detail::wkt::prefix_multipolygon
+ >
+{};
+
template <typename Geometry>
struct devarianted_wkt
@@ -396,13 +487,10 @@ private:
/*!
\brief Main WKT-streaming function
+\tparam Geometry \tparam_geometry
+\param geometry \param_geometry
\ingroup wkt
-\par Example:
-Small example showing how to use the wkt helper function
-\dontinclude doxygen_1.cpp
-\skip example_as_wkt_vector
-\line {
-\until }
+\qbk{[include reference/io/wkt.qbk]}
*/
template <typename Geometry>
inline wkt_manipulator<Geometry> wkt(Geometry const& geometry)
diff --git a/3party/boost/boost/geometry/iterators/concatenate_iterator.hpp b/3party/boost/boost/geometry/iterators/concatenate_iterator.hpp
new file mode 100644
index 0000000000..e97061e1a1
--- /dev/null
+++ b/3party/boost/boost/geometry/iterators/concatenate_iterator.hpp
@@ -0,0 +1,148 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ITERATORS_CONCATENATE_ITERATOR_HPP
+#define BOOST_GEOMETRY_ITERATORS_CONCATENATE_ITERATOR_HPP
+
+#include <boost/assert.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/iterator.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+
+template <typename Iterator1, typename Iterator2, typename Value>
+class concatenate_iterator
+ : public boost::iterator_facade
+ <
+ concatenate_iterator<Iterator1, Iterator2, Value>,
+ Value,
+ boost::bidirectional_traversal_tag
+ >
+{
+private:
+ Iterator1 m_it1, m_end1;
+ Iterator2 m_begin2, m_it2;
+
+public:
+ typedef Iterator1 first_iterator_type;
+ typedef Iterator2 second_iterator_type;
+
+ // default constructor
+ concatenate_iterator() {}
+
+ // for begin
+ concatenate_iterator(Iterator1 it1, Iterator1 end1,
+ Iterator2 begin2, Iterator2 it2)
+ : m_it1(it1), m_end1(end1), m_begin2(begin2), m_it2(it2)
+ {}
+
+ // for end
+ concatenate_iterator(Iterator1 end1, Iterator2 begin2, Iterator2 end2)
+ : m_it1(end1), m_end1(end1), m_begin2(begin2), m_it2(end2)
+ {}
+
+ template <typename OtherIt1, typename OtherIt2, typename OtherValue>
+ concatenate_iterator
+ (concatenate_iterator<OtherIt1, OtherIt2, OtherValue> const& other)
+ : m_it1(other.m_it1)
+ , m_end1(other.m_end1)
+ , m_begin2(other.m_begin2)
+ , m_it2(other.m_it2)
+ {
+ static const bool are_conv
+ = boost::is_convertible<OtherIt1, Iterator1>::value
+ && boost::is_convertible<OtherIt2, Iterator2>::value;
+
+ BOOST_MPL_ASSERT_MSG((are_conv),
+ NOT_CONVERTIBLE,
+ (types<OtherIt1, OtherIt2>));
+ }
+
+ template <typename OtherIt1, typename OtherIt2, typename OtherValue>
+ concatenate_iterator
+ operator=(concatenate_iterator<OtherIt1, OtherIt2, OtherValue> const& other)
+ {
+ static const bool are_conv
+ = boost::is_convertible<OtherIt1, Iterator1>::value
+ && boost::is_convertible<OtherIt2, Iterator2>::value;
+
+ BOOST_MPL_ASSERT_MSG((are_conv),
+ NOT_CONVERTIBLE,
+ (types<OtherIt1, OtherIt2>));
+
+ m_it1 = other.m_it1;
+ m_end1 = other.m_end1;
+ m_begin2 = other.m_begin2;
+ m_it2 = other.m_it2;
+ return *this;
+ }
+
+private:
+ friend class boost::iterator_core_access;
+
+ template <typename It1, typename It2, typename V>
+ friend class concatenate_iterator;
+
+ inline Value& dereference() const
+ {
+ if ( m_it1 == m_end1 )
+ {
+ return *m_it2;
+ }
+ return *m_it1;
+ }
+
+ template <typename OtherIt1, typename OtherIt2, typename OtherValue>
+ inline bool equal(concatenate_iterator
+ <
+ OtherIt1,
+ OtherIt2,
+ OtherValue
+ > const& other) const
+ {
+ return m_it1 == other.m_it1 && m_it2 == other.m_it2;
+ }
+
+ inline void increment()
+ {
+ if ( m_it1 == m_end1 )
+ {
+ ++m_it2;
+ }
+ else
+ {
+ ++m_it1;
+ }
+ }
+
+ inline void decrement()
+ {
+ if ( m_it2 == m_begin2 )
+ {
+ --m_it1;
+ }
+ else
+ {
+ --m_it2;
+ }
+ }
+};
+
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ITERATORS_CONCATENATE_ITERATOR_HPP
diff --git a/3party/boost/boost/geometry/iterators/dispatch/point_iterator.hpp b/3party/boost/boost/geometry/iterators/dispatch/point_iterator.hpp
new file mode 100644
index 0000000000..938dfd8ebc
--- /dev/null
+++ b/3party/boost/boost/geometry/iterators/dispatch/point_iterator.hpp
@@ -0,0 +1,47 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ITERATORS_DISPATCH_POINT_ITERATOR_HPP
+#define BOOST_GEOMETRY_ITERATORS_DISPATCH_POINT_ITERATOR_HPP
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// dispatch for points_begin
+template <typename Geometry, typename Tag = typename tag<Geometry>::type>
+struct points_begin
+ : not_implemented<Geometry>
+{};
+
+
+
+// dispatch for points_end
+template <typename Geometry, typename Tag = typename tag<Geometry>::type>
+struct points_end
+ : not_implemented<Geometry>
+{};
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ITERATORS_DISPATCH_POINT_ITERATOR_HPP
diff --git a/3party/boost/boost/geometry/iterators/dispatch/point_iterator_type.hpp b/3party/boost/boost/geometry/iterators/dispatch/point_iterator_type.hpp
new file mode 100644
index 0000000000..02c40acae0
--- /dev/null
+++ b/3party/boost/boost/geometry/iterators/dispatch/point_iterator_type.hpp
@@ -0,0 +1,37 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ITERATORS_DISPATCH_POINT_ITERATOR_TYPE_HPP
+#define BOOST_GEOMETRY_ITERATORS_DISPATCH_POINT_ITERATOR_TYPE_HPP
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+template <typename Geometry, typename Tag = typename tag<Geometry>::type>
+struct point_iterator_type
+ : not_implemented<Geometry>
+{};
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ITERATORS_DISPATCH_POINT_ITERATOR_TYPE_HPP
diff --git a/3party/boost/boost/geometry/iterators/ever_circling_iterator.hpp b/3party/boost/boost/geometry/iterators/ever_circling_iterator.hpp
index 8119a73b5b..50b20480cd 100644
--- a/3party/boost/boost/geometry/iterators/ever_circling_iterator.hpp
+++ b/3party/boost/boost/geometry/iterators/ever_circling_iterator.hpp
@@ -177,7 +177,7 @@ private:
inline void advance(difference_type n)
{
- if (m_index >= 0 && m_index < m_size
+ if (m_index >= 0 && m_index < m_size
&& m_index + n >= 0 && m_index + n < m_size)
{
m_index += n;
diff --git a/3party/boost/boost/geometry/iterators/flatten_iterator.hpp b/3party/boost/boost/geometry/iterators/flatten_iterator.hpp
new file mode 100644
index 0000000000..42f7555527
--- /dev/null
+++ b/3party/boost/boost/geometry/iterators/flatten_iterator.hpp
@@ -0,0 +1,248 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ITERATORS_FLATTEN_ITERATOR_HPP
+#define BOOST_GEOMETRY_ITERATORS_FLATTEN_ITERATOR_HPP
+
+#include <boost/assert.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/iterator.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+
+template
+<
+ typename OuterIterator,
+ typename InnerIterator,
+ typename Value,
+ typename AccessInnerBegin,
+ typename AccessInnerEnd
+>
+class flatten_iterator
+ : public boost::iterator_facade
+ <
+ flatten_iterator
+ <
+ OuterIterator,
+ InnerIterator,
+ Value,
+ AccessInnerBegin,
+ AccessInnerEnd>,
+ Value,
+ boost::bidirectional_traversal_tag
+ >
+{
+private:
+ OuterIterator m_outer_it, m_outer_end;
+ InnerIterator m_inner_it;
+
+public:
+ typedef OuterIterator outer_iterator_type;
+ typedef InnerIterator inner_iterator_type;
+
+ // default constructor
+ flatten_iterator() {}
+
+ // for begin
+ flatten_iterator(OuterIterator outer_it, OuterIterator outer_end)
+ : m_outer_it(outer_it), m_outer_end(outer_end)
+ {
+ advance_through_empty();
+ }
+
+ // for end
+ flatten_iterator(OuterIterator outer_end)
+ : m_outer_it(outer_end), m_outer_end(outer_end)
+ {}
+
+ template
+ <
+ typename OtherOuterIterator, typename OtherInnerIterator,
+ typename OtherValue,
+ typename OtherAccessInnerBegin, typename OtherAccessInnerEnd
+ >
+ flatten_iterator(flatten_iterator
+ <
+ OtherOuterIterator,
+ OtherInnerIterator,
+ OtherValue,
+ OtherAccessInnerBegin,
+ OtherAccessInnerEnd
+ > const& other)
+ : m_outer_it(other.m_outer_it),
+ m_outer_end(other.m_outer_end),
+ m_inner_it(other.m_inner_it)
+ {
+ static const bool are_conv
+ = boost::is_convertible
+ <
+ OtherOuterIterator, OuterIterator
+ >::value
+ && boost::is_convertible
+ <
+ OtherInnerIterator, InnerIterator
+ >::value;
+
+ BOOST_MPL_ASSERT_MSG((are_conv),
+ NOT_CONVERTIBLE,
+ (types<OtherOuterIterator, OtherInnerIterator>));
+ }
+
+ template
+ <
+ typename OtherOuterIterator,
+ typename OtherInnerIterator,
+ typename OtherValue,
+ typename OtherAccessInnerBegin,
+ typename OtherAccessInnerEnd
+ >
+ flatten_iterator operator=(flatten_iterator
+ <
+ OtherOuterIterator,
+ OtherInnerIterator,
+ OtherValue,
+ OtherAccessInnerBegin,
+ OtherAccessInnerEnd
+ > const& other)
+ {
+ static const bool are_conv
+ = boost::is_convertible
+ <
+ OtherOuterIterator, OuterIterator
+ >::value
+ && boost::is_convertible
+ <
+ OtherInnerIterator, InnerIterator
+ >::value;
+
+ BOOST_MPL_ASSERT_MSG((are_conv),
+ NOT_CONVERTIBLE,
+ (types<OtherOuterIterator, OtherInnerIterator>));
+
+ m_outer_it = other.m_outer_it;
+ m_outer_end = other.m_outer_end;
+ m_inner_it = other.m_inner_it;
+ return *this;
+ }
+
+private:
+ friend class boost::iterator_core_access;
+
+ template
+ <
+ typename Outer,
+ typename Inner,
+ typename V,
+ typename InnerBegin,
+ typename InnerEnd
+ >
+ friend class flatten_iterator;
+
+ static inline bool empty(OuterIterator outer_it)
+ {
+ return
+ AccessInnerBegin::apply(*outer_it) == AccessInnerEnd::apply(*outer_it);
+ }
+
+ inline void advance_through_empty()
+ {
+ while ( m_outer_it != m_outer_end && empty(m_outer_it) )
+ {
+ ++m_outer_it;
+ }
+
+ if ( m_outer_it != m_outer_end )
+ {
+ m_inner_it = AccessInnerBegin::apply(*m_outer_it);
+ }
+ }
+
+ inline Value& dereference() const
+ {
+ BOOST_ASSERT( m_outer_it != m_outer_end );
+ BOOST_ASSERT( m_inner_it != AccessInnerEnd::apply(*m_outer_it) );
+ return *m_inner_it;
+ }
+
+
+ template
+ <
+ typename OtherOuterIterator,
+ typename OtherInnerIterator,
+ typename OtherValue,
+ typename OtherAccessInnerBegin,
+ typename OtherAccessInnerEnd
+ >
+ inline bool equal(flatten_iterator
+ <
+ OtherOuterIterator,
+ OtherInnerIterator,
+ OtherValue,
+ OtherAccessInnerBegin,
+ OtherAccessInnerEnd
+ > const& other) const
+ {
+ if ( m_outer_it != other.m_outer_it )
+ {
+ return false;
+ }
+
+ if ( m_outer_it == m_outer_end )
+ {
+ return true;
+ }
+
+ return m_inner_it == other.m_inner_it;
+ }
+
+ inline void increment()
+ {
+ BOOST_ASSERT( m_outer_it != m_outer_end );
+ BOOST_ASSERT( m_inner_it != AccessInnerEnd::apply(*m_outer_it) );
+
+ ++m_inner_it;
+ if ( m_inner_it == AccessInnerEnd::apply(*m_outer_it) )
+ {
+ ++m_outer_it;
+ advance_through_empty();
+ }
+ }
+
+ inline void decrement()
+ {
+ if ( m_outer_it == m_outer_end
+ || m_inner_it == AccessInnerBegin::apply(*m_outer_it) )
+ {
+ do
+ {
+ --m_outer_it;
+ }
+ while ( empty(m_outer_it) );
+ m_inner_it = --AccessInnerEnd::apply(*m_outer_it);
+ }
+ else
+ {
+ --m_inner_it;
+ }
+ }
+};
+
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ITERATORS_FLATTEN_ITERATOR_HPP
diff --git a/3party/boost/boost/geometry/iterators/has_one_element.hpp b/3party/boost/boost/geometry/iterators/has_one_element.hpp
new file mode 100644
index 0000000000..2f9acefc1e
--- /dev/null
+++ b/3party/boost/boost/geometry/iterators/has_one_element.hpp
@@ -0,0 +1,29 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ITERATORS_HAS_ONE_ELEMENT_HPP
+#define BOOST_GEOMETRY_ITERATORS_HAS_ONE_ELEMENT_HPP
+
+
+namespace boost { namespace geometry
+{
+
+
+// free function to test if an iterator range has a single element
+template <typename Iterator>
+inline bool has_one_element(Iterator first, Iterator beyond)
+{
+ return first != beyond && ++first == beyond;
+}
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ITERATORS_HAS_ONE_ELEMENT_HPP
diff --git a/3party/boost/boost/geometry/iterators/point_iterator.hpp b/3party/boost/boost/geometry/iterators/point_iterator.hpp
new file mode 100644
index 0000000000..bfe0065d4a
--- /dev/null
+++ b/3party/boost/boost/geometry/iterators/point_iterator.hpp
@@ -0,0 +1,285 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_HPP
+#define BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_HPP
+
+#include <boost/assert.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/iterators/dispatch/point_iterator.hpp>
+#include <boost/geometry/iterators/point_iterator_type.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// specializations for points_begin
+
+
+template <typename Linestring>
+struct points_begin<Linestring, linestring_tag>
+{
+ static inline typename point_iterator_type<Linestring>::type
+ apply(Linestring& linestring)
+ {
+ return boost::begin(linestring);
+ }
+};
+
+
+template <typename Ring>
+struct points_begin<Ring, ring_tag>
+{
+ static inline typename point_iterator_type<Ring>::type
+ apply(Ring& ring)
+ {
+ return boost::begin(ring);
+ }
+};
+
+
+template <typename Polygon>
+struct points_begin<Polygon, polygon_tag>
+{
+ typedef typename point_iterator_type<Polygon>::type return_type;
+
+ static inline return_type apply(Polygon& polygon)
+ {
+ typedef typename return_type::second_iterator_type flatten_iterator;
+
+ return return_type
+ (boost::begin(geometry::exterior_ring(polygon)),
+ boost::end(geometry::exterior_ring(polygon)),
+ flatten_iterator(boost::begin(geometry::interior_rings(polygon)),
+ boost::end(geometry::interior_rings(polygon))
+ ),
+ flatten_iterator(boost::begin(geometry::interior_rings(polygon)),
+ boost::end(geometry::interior_rings(polygon))
+ )
+ );
+ }
+};
+
+
+template <typename MultiPoint>
+struct points_begin<MultiPoint, multi_point_tag>
+{
+ static inline typename point_iterator_type<MultiPoint>::type
+ apply(MultiPoint& multipoint)
+ {
+ return boost::begin(multipoint);
+ }
+};
+
+
+template <typename MultiLinestring>
+struct points_begin<MultiLinestring, multi_linestring_tag>
+{
+ static inline typename point_iterator_type<MultiLinestring>::type
+ apply(MultiLinestring& multilinestring)
+ {
+ return typename point_iterator_type
+ <
+ MultiLinestring
+ >::type(boost::begin(multilinestring), boost::end(multilinestring));
+ }
+};
+
+
+template <typename MultiPolygon>
+struct points_begin<MultiPolygon, multi_polygon_tag>
+{
+ static inline typename point_iterator_type<MultiPolygon>::type
+ apply(MultiPolygon& multipolygon)
+ {
+ return typename point_iterator_type
+ <
+ MultiPolygon
+ >::type(boost::begin(multipolygon), boost::end(multipolygon));
+ }
+};
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+// specializations for points_end
+
+
+template <typename Linestring>
+struct points_end<Linestring, linestring_tag>
+{
+ static inline typename point_iterator_type<Linestring>::type
+ apply(Linestring& linestring)
+ {
+ return boost::end(linestring);
+ }
+};
+
+
+template <typename Ring>
+struct points_end<Ring, ring_tag>
+{
+ static inline typename point_iterator_type<Ring>::type
+ apply(Ring& ring)
+ {
+ return boost::end(ring);
+ }
+};
+
+
+template <typename Polygon>
+struct points_end<Polygon, polygon_tag>
+{
+ typedef typename point_iterator_type<Polygon>::type return_type;
+
+ static inline return_type apply(Polygon& polygon)
+ {
+ typedef typename return_type::second_iterator_type flatten_iterator;
+
+ return return_type
+ (boost::end(geometry::exterior_ring(polygon)),
+ flatten_iterator(boost::begin(geometry::interior_rings(polygon)),
+ boost::end(geometry::interior_rings(polygon))
+ ),
+ flatten_iterator( boost::end(geometry::interior_rings(polygon)) )
+ );
+ }
+};
+
+
+template <typename MultiPoint>
+struct points_end<MultiPoint, multi_point_tag>
+{
+ static inline typename point_iterator_type<MultiPoint>::type
+ apply(MultiPoint& multipoint)
+ {
+ return boost::end(multipoint);
+ }
+};
+
+
+template <typename MultiLinestring>
+struct points_end<MultiLinestring, multi_linestring_tag>
+{
+ static inline typename point_iterator_type<MultiLinestring>::type
+ apply(MultiLinestring& multilinestring)
+ {
+ return typename point_iterator_type
+ <
+ MultiLinestring
+ >::type(boost::end(multilinestring));
+ }
+};
+
+
+template <typename MultiPolygon>
+struct points_end<MultiPolygon, multi_polygon_tag>
+{
+ static inline typename point_iterator_type<MultiPolygon>::type
+ apply(MultiPolygon& multipolygon)
+ {
+ return typename point_iterator_type
+ <
+ MultiPolygon
+ >::type(boost::end(multipolygon));
+ }
+};
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+// MK:: need to add doc here
+template <typename Geometry>
+class point_iterator
+ : public dispatch::point_iterator_type<Geometry>::type
+{
+private:
+ typedef typename dispatch::point_iterator_type<Geometry>::type base;
+
+ base* base_ptr()
+ {
+ return this;
+ }
+
+ base const* base_ptr() const
+ {
+ return this;
+ }
+
+ template <typename OtherGeometry> friend class point_iterator;
+ template <typename G> friend inline point_iterator<G> points_begin(G&);
+ template <typename G> friend inline point_iterator<G> points_end(G&);
+
+ point_iterator(base const& base_it) : base(base_it) {}
+
+public:
+ point_iterator() {}
+
+ template <typename OtherGeometry>
+ point_iterator(point_iterator<OtherGeometry> const& other)
+ : base(*other.base_ptr())
+ {
+ static const bool is_conv
+ = boost::is_convertible<
+ typename dispatch::point_iterator_type<OtherGeometry>::type,
+ typename dispatch::point_iterator_type<Geometry>::type
+ >::value;
+
+ BOOST_MPL_ASSERT_MSG((is_conv),
+ NOT_CONVERTIBLE,
+ (point_iterator<OtherGeometry>));
+ }
+};
+
+
+// MK:: need to add doc here
+template <typename Geometry>
+inline point_iterator<Geometry>
+points_begin(Geometry& geometry)
+{
+ return dispatch::points_begin<Geometry>::apply(geometry);
+}
+
+
+// MK:: need to add doc here
+template <typename Geometry>
+inline point_iterator<Geometry>
+points_end(Geometry& geometry)
+{
+ return dispatch::points_end<Geometry>::apply(geometry);
+}
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_HPP
diff --git a/3party/boost/boost/geometry/iterators/point_iterator_type.hpp b/3party/boost/boost/geometry/iterators/point_iterator_type.hpp
new file mode 100644
index 0000000000..4991b27187
--- /dev/null
+++ b/3party/boost/boost/geometry/iterators/point_iterator_type.hpp
@@ -0,0 +1,207 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_TYPE_HPP
+#define BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_TYPE_HPP
+
+#include <boost/geometry/iterators/dispatch/point_iterator_type.hpp>
+#include <boost/geometry/iterators/dispatch/point_iterator.hpp>
+
+#include <boost/range.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/if.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/iterators/flatten_iterator.hpp>
+#include <boost/geometry/iterators/concatenate_iterator.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail_dispatch
+{
+
+
+template <typename Geometry>
+struct point_iterator_value_type
+{
+ typedef typename boost::mpl::if_c
+ <
+ !boost::is_const<Geometry>::type::value,
+ typename geometry::point_type<Geometry>::type,
+ typename geometry::point_type<Geometry>::type const
+ >::type type;
+};
+
+
+
+
+template
+<
+ typename Geometry,
+ typename Tag = typename tag<Geometry>::type
+>
+struct point_iterator_inner_range_type
+{
+ typedef typename boost::mpl::if_c
+ <
+ !boost::is_const<Geometry>::type::value,
+ typename boost::range_value<Geometry>::type,
+ typename boost::range_value<Geometry>::type const
+ >::type type;
+};
+
+
+template <typename Polygon>
+struct point_iterator_inner_range_type<Polygon, polygon_tag>
+{
+ typedef typename boost::mpl::if_c
+ <
+ !boost::is_const<Polygon>::type::value,
+ typename geometry::ring_type<Polygon>::type,
+ typename geometry::ring_type<Polygon>::type const
+ >::type type;
+};
+
+
+
+} // namespace detail_dispatch
+#endif // DOXYGEN_NO_DETAIL
+
+
+
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+
+template <typename Linestring>
+struct point_iterator_type<Linestring, linestring_tag>
+{
+ typedef typename boost::range_iterator<Linestring>::type type;
+};
+
+
+template <typename Ring>
+struct point_iterator_type<Ring, ring_tag>
+{
+ typedef typename boost::range_iterator<Ring>::type type;
+};
+
+
+template <typename Polygon>
+class point_iterator_type<Polygon, polygon_tag>
+{
+private:
+ typedef typename detail_dispatch::point_iterator_inner_range_type
+ <
+ Polygon
+ >::type inner_range;
+
+public:
+ typedef concatenate_iterator
+ <
+ typename boost::range_iterator<inner_range>::type,
+ flatten_iterator
+ <
+ typename boost::range_iterator
+ <
+ typename geometry::interior_type<Polygon>::type
+ >::type,
+ typename dispatch::point_iterator_type
+ <
+ inner_range
+ >::type,
+ typename detail_dispatch::point_iterator_value_type
+ <
+ Polygon
+ >::type,
+ dispatch::points_begin<inner_range>,
+ dispatch::points_end<inner_range>
+ >,
+ typename detail_dispatch::point_iterator_value_type<Polygon>::type
+ > type;
+};
+
+
+template <typename MultiPoint>
+struct point_iterator_type<MultiPoint, multi_point_tag>
+{
+ typedef typename boost::range_iterator<MultiPoint>::type type;
+};
+
+
+template <typename MultiLinestring>
+class point_iterator_type<MultiLinestring, multi_linestring_tag>
+{
+private:
+ typedef typename detail_dispatch::point_iterator_inner_range_type
+ <
+ MultiLinestring
+ >::type inner_range;
+
+public:
+ typedef flatten_iterator
+ <
+ typename boost::range_iterator<MultiLinestring>::type,
+ typename dispatch::point_iterator_type<inner_range>::type,
+ typename detail_dispatch::point_iterator_value_type
+ <
+ MultiLinestring
+ >::type,
+ dispatch::points_begin<inner_range>,
+ dispatch::points_end<inner_range>
+ > type;
+};
+
+
+template <typename MultiPolygon>
+class point_iterator_type<MultiPolygon, multi_polygon_tag>
+{
+private:
+ typedef typename detail_dispatch::point_iterator_inner_range_type
+ <
+ MultiPolygon
+ >::type inner_range;
+
+public:
+ typedef flatten_iterator
+ <
+ typename boost::range_iterator<MultiPolygon>::type,
+ typename dispatch::point_iterator_type<inner_range>::type,
+ typename detail_dispatch::point_iterator_value_type
+ <
+ MultiPolygon
+ >::type,
+ dispatch::points_begin<inner_range>,
+ dispatch::points_end<inner_range>
+ > type;
+};
+
+
+
+
+
+} // namespace dispatch
+#endif // DOXYGEN_NO_DISPATCH
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_TYPE_HPP
diff --git a/3party/boost/boost/geometry/iterators/point_reverse_iterator.hpp b/3party/boost/boost/geometry/iterators/point_reverse_iterator.hpp
new file mode 100644
index 0000000000..5cce66795a
--- /dev/null
+++ b/3party/boost/boost/geometry/iterators/point_reverse_iterator.hpp
@@ -0,0 +1,97 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ITERATORS_POINT_REVERSE_ITERATOR_HPP
+#define BOOST_GEOMETRY_ITERATORS_POINT_REVERSE_ITERATOR_HPP
+
+#include <iterator>
+
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#include <boost/geometry/iterators/point_iterator.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+// MK:: need to add doc here
+template <typename Geometry>
+class point_reverse_iterator
+ : public std::reverse_iterator<point_iterator<Geometry> >
+{
+private:
+ typedef std::reverse_iterator<point_iterator<Geometry> > base;
+
+ base* base_ptr()
+ {
+ return this;
+ }
+
+ base const* base_ptr() const
+ {
+ return this;
+ }
+
+ template <typename OtherGeometry> friend class point_reverse_iterator;
+ template <typename G>
+ friend inline point_reverse_iterator<G> points_rbegin(G&);
+
+ template <typename G>
+ friend inline point_reverse_iterator<G> points_rend(G&);
+
+ point_reverse_iterator(base const& base_it) : base(base_it) {}
+
+public:
+ point_reverse_iterator() {}
+
+ template <typename OtherGeometry>
+ point_reverse_iterator(point_reverse_iterator<OtherGeometry> const& other)
+ : base(*other.base_ptr())
+ {
+ static const bool is_conv = boost::is_convertible
+ <
+ std::reverse_iterator<point_iterator<Geometry> >,
+ std::reverse_iterator<point_iterator<OtherGeometry> >
+ >::value;
+
+ BOOST_MPL_ASSERT_MSG((is_conv),
+ NOT_CONVERTIBLE,
+ (point_reverse_iterator<OtherGeometry>));
+ }
+};
+
+
+// MK:: need to add doc here
+template <typename Geometry>
+inline point_reverse_iterator<Geometry>
+points_rbegin(Geometry& geometry)
+{
+ return std::reverse_iterator
+ <
+ point_iterator<Geometry>
+ >(points_end(geometry));
+}
+
+
+// MK:: need to add doc here
+template <typename Geometry>
+inline point_reverse_iterator<Geometry>
+points_rend(Geometry& geometry)
+{
+ return std::reverse_iterator
+ <
+ point_iterator<Geometry>
+ >(points_begin(geometry));
+}
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_ITERATORS_POINT_REVERSE_ITERATOR_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/append.hpp b/3party/boost/boost/geometry/multi/algorithms/append.hpp
index bb97af1aa9..2a2596c548 100644
--- a/3party/boost/boost/geometry/multi/algorithms/append.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/append.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -16,13 +21,41 @@
#include <boost/geometry/algorithms/append.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
namespace boost { namespace geometry
{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace append
+{
+
+
+template <typename MultiGeometry, typename RangeOrPoint>
+struct append_to_multigeometry
+{
+ static inline void apply(MultiGeometry& multigeometry,
+ RangeOrPoint const& range_or_point,
+ int ring_index, int multi_index)
+ {
+
+ dispatch::append
+ <
+ typename boost::range_value<MultiGeometry>::type,
+ RangeOrPoint
+ >::apply(multigeometry[multi_index], range_or_point, ring_index);
+ }
+};
+
+
+}} // namespace detail::append
+#endif // DOXYGEN_NO_DETAIL
+
+
+
#ifndef DOXYGEN_NO_DISPATCH
namespace dispatch
{
@@ -40,6 +73,26 @@ struct append_range<multi_point_tag, Geometry, Range>
: detail::append::append_range<Geometry, Range>
{};
+template <typename MultiGeometry, typename RangeOrPoint>
+struct append_point<multi_linestring_tag, MultiGeometry, RangeOrPoint>
+ : detail::append::append_to_multigeometry<MultiGeometry, RangeOrPoint>
+{};
+
+template <typename MultiGeometry, typename RangeOrPoint>
+struct append_range<multi_linestring_tag, MultiGeometry, RangeOrPoint>
+ : detail::append::append_to_multigeometry<MultiGeometry, RangeOrPoint>
+{};
+
+template <typename MultiGeometry, typename RangeOrPoint>
+struct append_point<multi_polygon_tag, MultiGeometry, RangeOrPoint>
+ : detail::append::append_to_multigeometry<MultiGeometry, RangeOrPoint>
+{};
+
+template <typename MultiGeometry, typename RangeOrPoint>
+struct append_range<multi_polygon_tag, MultiGeometry, RangeOrPoint>
+ : detail::append::append_to_multigeometry<MultiGeometry, RangeOrPoint>
+{};
+
}
diff --git a/3party/boost/boost/geometry/multi/algorithms/area.hpp b/3party/boost/boost/geometry/multi/algorithms/area.hpp
index 3334997480..0e25ffc64e 100644
--- a/3party/boost/boost/geometry/multi/algorithms/area.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/area.hpp
@@ -15,44 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_AREA_HPP
-#include <boost/range/metafunctions.hpp>
-
#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/core/point_type.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/algorithms/detail/multi_sum.hpp>
-#include <boost/geometry/multi/algorithms/num_points.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-template <typename MultiGeometry>
-struct area<MultiGeometry, multi_polygon_tag> : detail::multi_sum
-{
- template <typename Strategy>
- static inline typename Strategy::return_type
- apply(MultiGeometry const& multi, Strategy const& strategy)
- {
- return multi_sum::apply
- <
- typename Strategy::return_type,
- area<typename boost::range_value<MultiGeometry>::type>
- >(multi, strategy);
- }
-};
-
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_AREA_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/centroid.hpp b/3party/boost/boost/geometry/multi/algorithms/centroid.hpp
index 82e6a8af8f..1c9902f2bf 100644
--- a/3party/boost/boost/geometry/multi/algorithms/centroid.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/centroid.hpp
@@ -15,119 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_CENTROID_HPP
-#include <boost/range.hpp>
-
#include <boost/geometry/algorithms/centroid.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/core/point_type.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/algorithms/num_points.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace centroid
-{
-
-
-/*!
- \brief Building block of a multi-point, to be used as Policy in the
- more generec centroid_multi
-*/
-struct centroid_multi_point_state
-{
- template <typename Point, typename Strategy>
- static inline void apply(Point const& point,
- Strategy const& strategy, typename Strategy::state_type& state)
- {
- strategy.apply(point, state);
- }
-};
-
-
-
-/*!
- \brief Generic implementation which calls a policy to calculate the
- centroid of the total of its single-geometries
- \details The Policy is, in general, the single-version, with state. So
- detail::centroid::centroid_polygon_state is used as a policy for this
- detail::centroid::centroid_multi
-
-*/
-template <typename Policy>
-struct centroid_multi
-{
- template <typename Multi, typename Point, typename Strategy>
- static inline void apply(Multi const& multi, Point& centroid,
- Strategy const& strategy)
- {
-#if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW)
- // If there is nothing in any of the ranges, it is not possible
- // to calculate the centroid
- if (geometry::num_points(multi) == 0)
- {
- throw centroid_exception();
- }
-#endif
-
- typename Strategy::state_type state;
-
- for (typename boost::range_iterator<Multi const>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it, strategy, state);
- }
- Strategy::result(state, centroid);
- }
-};
-
-
-
-}} // namespace detail::centroid
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename MultiLinestring>
-struct centroid<MultiLinestring, multi_linestring_tag>
- : detail::centroid::centroid_multi
- <
- detail::centroid::centroid_range_state<closed>
- >
-{};
-
-template <typename MultiPolygon>
-struct centroid<MultiPolygon, multi_polygon_tag>
- : detail::centroid::centroid_multi
- <
- detail::centroid::centroid_polygon_state
- >
-{};
-
-
-template <typename MultiPoint>
-struct centroid<MultiPoint, multi_point_tag>
- : detail::centroid::centroid_multi
- <
- detail::centroid::centroid_multi_point_state
- >
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CENTROID_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/clear.hpp b/3party/boost/boost/geometry/multi/algorithms/clear.hpp
index ea32ee8b43..6d9e284d0a 100644
--- a/3party/boost/boost/geometry/multi/algorithms/clear.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/clear.hpp
@@ -15,30 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_CLEAR_HPP
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/clear.hpp>
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Geometry>
-struct clear<Geometry, multi_tag>
- : detail::clear::collection_clear<Geometry>
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
-
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CLEAR_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/convert.hpp b/3party/boost/boost/geometry/multi/algorithms/convert.hpp
index 1712964d47..0e7b2946d4 100644
--- a/3party/boost/boost/geometry/multi/algorithms/convert.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/convert.hpp
@@ -15,115 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP
-#include <boost/range/metafunctions.hpp>
-
#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace conversion
-{
-
-template <typename Single, typename Multi, typename Policy>
-struct single_to_multi: private Policy
-{
- static inline void apply(Single const& single, Multi& multi)
- {
- traits::resize<Multi>::apply(multi, 1);
- Policy::apply(single, *boost::begin(multi));
- }
-};
-
-
-
-template <typename Multi1, typename Multi2, typename Policy>
-struct multi_to_multi: private Policy
-{
- static inline void apply(Multi1 const& multi1, Multi2& multi2)
- {
- traits::resize<Multi2>::apply(multi2, boost::size(multi1));
-
- typename boost::range_iterator<Multi1 const>::type it1
- = boost::begin(multi1);
- typename boost::range_iterator<Multi2>::type it2
- = boost::begin(multi2);
-
- for (; it1 != boost::end(multi1); ++it1, ++it2)
- {
- Policy::apply(*it1, *it2);
- }
- }
-};
-
-
-}} // namespace detail::convert
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// Dispatch for multi <-> multi, specifying their single-version as policy.
-// Note that, even if the multi-types are mutually different, their single
-// version types might be the same and therefore we call boost::is_same again
-
-template <typename Multi1, typename Multi2, std::size_t DimensionCount>
-struct convert<Multi1, Multi2, multi_tag, multi_tag, DimensionCount, false>
- : detail::conversion::multi_to_multi
- <
- Multi1,
- Multi2,
- convert
- <
- typename boost::range_value<Multi1>::type,
- typename boost::range_value<Multi2>::type,
- typename single_tag_of
- <
- typename tag<Multi1>::type
- >::type,
- typename single_tag_of
- <
- typename tag<Multi2>::type
- >::type,
- DimensionCount
- >
- >
-{};
-
-template <typename Single, typename Multi, typename SingleTag, std::size_t DimensionCount>
-struct convert<Single, Multi, SingleTag, multi_tag, DimensionCount, false>
- : detail::conversion::single_to_multi
- <
- Single,
- Multi,
- convert
- <
- Single,
- typename boost::range_value<Multi>::type,
- typename tag<Single>::type,
- typename single_tag_of
- <
- typename tag<Multi>::type
- >::type,
- DimensionCount,
- false
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/correct.hpp b/3party/boost/boost/geometry/multi/algorithms/correct.hpp
index d28d1e78e2..83d26ca60c 100644
--- a/3party/boost/boost/geometry/multi/algorithms/correct.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/correct.hpp
@@ -15,53 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_CORRECT_HPP
-#include <boost/range/metafunctions.hpp>
-
#include <boost/geometry/algorithms/correct.hpp>
-#include <boost/geometry/multi/algorithms/detail/modify.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename MultiPoint>
-struct correct<MultiPoint, multi_point_tag>
- : detail::correct::correct_nop<MultiPoint>
-{};
-
-
-template <typename MultiLineString>
-struct correct<MultiLineString, multi_linestring_tag>
- : detail::correct::correct_nop<MultiLineString>
-{};
-
-
-template <typename Geometry>
-struct correct<Geometry, multi_polygon_tag>
- : detail::multi_modify
- <
- Geometry,
- detail::correct::correct_polygon
- <
- typename boost::range_value<Geometry>::type
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CORRECT_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/covered_by.hpp b/3party/boost/boost/geometry/multi/algorithms/covered_by.hpp
index c957c485b4..706bc78475 100644
--- a/3party/boost/boost/geometry/multi/algorithms/covered_by.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/covered_by.hpp
@@ -3,6 +3,10 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -11,61 +15,13 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP
#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/multi/core/closure.hpp>
-#include <boost/geometry/multi/core/point_order.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/algorithms/within.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Point, typename MultiPolygon>
-struct covered_by<Point, MultiPolygon, point_tag, multi_polygon_tag>
-{
- template <typename Strategy>
- static inline bool apply(Point const& point,
- MultiPolygon const& multi_polygon, Strategy const& strategy)
- {
- return detail::within::geometry_multi_within_code
- <
- Point,
- MultiPolygon,
- Strategy,
- detail::within::point_in_polygon
- <
- Point,
- typename boost::range_value<MultiPolygon>::type,
- order_as_direction
- <
- geometry::point_order<MultiPolygon>::value
- >::value,
- geometry::closure<MultiPolygon>::value,
- Strategy
- >
- >::apply(point, multi_polygon, strategy) >= 0;
- }
-};
-
-
-} // namespace dispatch
-
-
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/extreme_points.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/extreme_points.hpp
new file mode 100644
index 0000000000..da2ac5e9fa
--- /dev/null
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/extreme_points.hpp
@@ -0,0 +1,19 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
+#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
+
+
+#include <boost/geometry/algorithms/detail/extreme_points.hpp>
+
+
+#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp
index 0938d6a2e4..2fe475ed58 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp
@@ -15,73 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP
-#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
-
#include <boost/geometry/algorithms/detail/for_each_range.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace for_each
-{
-
-
-template <typename Multi, typename Actor, bool IsConst>
-struct fe_range_multi
-{
- static inline void apply(
- typename add_const_if_c<IsConst, Multi>::type& multi,
- Actor& actor)
- {
- for(BOOST_AUTO_TPL(it, boost::begin(multi)); it != boost::end(multi); ++it)
- {
- geometry::detail::for_each_range(*it, actor);
- }
- }
-};
-
-
-
-}} // namespace detail::for_each
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename MultiPoint, typename Actor, bool IsConst>
-struct for_each_range<multi_point_tag, MultiPoint, Actor, IsConst>
- : detail::for_each::fe_range_range<MultiPoint, Actor, IsConst>
-{};
-
-template <typename Geometry, typename Actor, bool IsConst>
-struct for_each_range<multi_linestring_tag, Geometry, Actor, IsConst>
- :
- detail::for_each::fe_range_multi<Geometry, Actor, IsConst>
-{};
-
-template <typename Geometry, typename Actor, bool IsConst>
-struct for_each_range<multi_polygon_tag, Geometry, Actor, IsConst>
- :
- detail::for_each::fe_range_multi<Geometry, Actor, IsConst>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/modify.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/modify.hpp
index b52efd2512..ae52e002f0 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/modify.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/modify.hpp
@@ -15,39 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_HPP
-#include <boost/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template <typename MultiGeometry, typename Policy>
-struct multi_modify
-{
- static inline void apply(MultiGeometry& multi)
- {
- typedef typename boost::range_iterator<MultiGeometry>::type iterator_type;
- for (iterator_type it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it);
- }
- }
-};
-
-
-} // namespace detail
-#endif
-
-
-}} // namespace boost::geometry
+#include <boost/geometry/algorithms/detail/multi_modify.hpp>
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp
index 4ae79058da..1a82a67142 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp
@@ -15,38 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP
-#include <boost/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename MultiGeometry, typename Predicate, typename Policy>
-struct multi_modify_with_predicate
-{
- static inline void apply(MultiGeometry& multi, Predicate const& predicate)
- {
- typedef typename boost::range_iterator<MultiGeometry>::type iterator_type;
- for (iterator_type it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it, predicate);
- }
- }
-};
-
-
-} // namespace detail
-#endif
-
-
-}} // namespace boost::geometry
+#include <boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp>
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp
index 704c3e6a96..b91970a164 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp
@@ -11,42 +11,11 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#ifndef BOOST_GEOMETRY_MULTI_SUM_HPP
-#define BOOST_GEOMETRY_MULTI_SUM_HPP
+#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MULTI_SUM_HPP
+#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MULTI_SUM_HPP
-#include <boost/range.hpp>
+#include <boost/geometry/algorithms/detail/multi_sum.hpp>
-namespace boost { namespace geometry
-{
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-struct multi_sum
-{
- template <typename ReturnType, typename Policy, typename MultiGeometry, typename Strategy>
- static inline ReturnType apply(MultiGeometry const& geometry, Strategy const& strategy)
- {
- ReturnType sum = ReturnType();
- for (typename boost::range_iterator
- <
- MultiGeometry const
- >::type it = boost::begin(geometry);
- it != boost::end(geometry);
- ++it)
- {
- sum += Policy::apply(*it, strategy);
- }
- return sum;
- }
-};
-
-
-} // namespace detail
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_MULTI_SUM_HPP
+#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MULTI_SUM_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp
index 940480b3ce..5e23cf4bad 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp
@@ -2,6 +2,9 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// This file was modified by Oracle on 2013.
+// Modifications copyright (c) 2013, Oracle and/or its affiliates.
+
// 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)
@@ -10,93 +13,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP
-#include <boost/range.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace copy_segments
-{
-
-
-template
-<
- typename MultiGeometry,
- typename SegmentIdentifier,
- typename PointOut,
- typename Policy
->
-struct copy_segment_point_multi
-{
- static inline bool apply(MultiGeometry const& multi,
- SegmentIdentifier const& seg_id, bool second,
- PointOut& point)
- {
-
- BOOST_ASSERT
- (
- seg_id.multi_index >= 0
- && seg_id.multi_index < int(boost::size(multi))
- );
-
- // Call the single-version
- return Policy::apply(multi[seg_id.multi_index], seg_id, second, point);
- }
-};
-
-
-}} // namespace detail::copy_segments
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename MultiGeometry,
- bool Reverse,
- typename SegmentIdentifier,
- typename PointOut
->
-struct copy_segment_point
- <
- multi_polygon_tag,
- MultiGeometry,
- Reverse,
- SegmentIdentifier,
- PointOut
- >
- : detail::copy_segments::copy_segment_point_multi
- <
- MultiGeometry,
- SegmentIdentifier,
- PointOut,
- detail::copy_segments::copy_segment_point_polygon
- <
- typename boost::range_value<MultiGeometry>::type,
- Reverse,
- SegmentIdentifier,
- PointOut
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp
index f3a0532ac7..54114bfae4 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp
@@ -10,96 +10,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP
-#include <boost/assert.hpp>
-#include <boost/range.hpp>
-
#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
-#include <boost/geometry/multi/core/ring_type.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace copy_segments
-{
-
-
-template
-<
- typename MultiGeometry,
- typename SegmentIdentifier,
- typename RangeOut,
- typename Policy
->
-struct copy_segments_multi
-{
- static inline void apply(MultiGeometry const& multi_geometry,
- SegmentIdentifier const& seg_id, int to_index,
- RangeOut& current_output)
- {
-
- BOOST_ASSERT
- (
- seg_id.multi_index >= 0
- && seg_id.multi_index < int(boost::size(multi_geometry))
- );
-
- // Call the single-version
- Policy::apply(multi_geometry[seg_id.multi_index],
- seg_id, to_index, current_output);
- }
-};
-
-
-}} // namespace detail::copy_segments
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename MultiPolygon,
- bool Reverse,
- typename SegmentIdentifier,
- typename RangeOut
->
-struct copy_segments
- <
- multi_polygon_tag,
- MultiPolygon,
- Reverse,
- SegmentIdentifier,
- RangeOut
- >
- : detail::copy_segments::copy_segments_multi
- <
- MultiPolygon,
- SegmentIdentifier,
- RangeOut,
- detail::copy_segments::copy_segments_polygon
- <
- typename boost::range_value<MultiPolygon>::type,
- Reverse,
- SegmentIdentifier,
- RangeOut
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp
index 2d04f7ccd3..65e00d064b 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp
@@ -10,47 +10,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP
-#include <boost/assert.hpp>
-#include <boost/range.hpp>
-
#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
-#include <boost/geometry/multi/core/ring_type.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template<>
-struct get_ring<multi_polygon_tag>
-{
- template<typename MultiPolygon>
- static inline typename ring_type<MultiPolygon>::type const& apply(
- ring_identifier const& id,
- MultiPolygon const& multi_polygon)
- {
- BOOST_ASSERT
- (
- id.multi_index >= 0
- && id.multi_index < int(boost::size(multi_polygon))
- );
- return get_ring<polygon_tag>::apply(id,
- multi_polygon[id.multi_index]);
- }
-};
-
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp
index 6bc0aae25f..a83fb77393 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp
@@ -10,104 +10,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
-#include <boost/geometry/multi/core/ring_type.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/multi/algorithms/distance.hpp>
-#include <boost/geometry/multi/views/detail/range_type.hpp>
-
-#include <boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp>
-#include <boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace get_turns
-{
-
-template
-<
- typename Multi, typename Box,
- bool Reverse, bool ReverseBox,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
->
-struct get_turns_multi_polygon_cs
-{
- static inline void apply(
- int source_id1, Multi const& multi,
- int source_id2, Box const& box,
- Turns& turns, InterruptPolicy& interrupt_policy)
- {
- typedef typename boost::range_iterator
- <
- Multi const
- >::type iterator_type;
-
- int i = 0;
- for (iterator_type it = boost::begin(multi);
- it != boost::end(multi);
- ++it, ++i)
- {
- // Call its single version
- get_turns_polygon_cs
- <
- typename boost::range_value<Multi>::type, Box,
- Reverse, ReverseBox,
- Turns, TurnPolicy, InterruptPolicy
- >::apply(source_id1, *it, source_id2, box,
- turns, interrupt_policy, i);
- }
- }
-};
-
-}} // namespace detail::get_turns
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename MultiPolygon,
- typename Box,
- bool ReverseMultiPolygon, bool ReverseBox,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
->
-struct get_turns
- <
- multi_polygon_tag, box_tag,
- MultiPolygon, Box,
- ReverseMultiPolygon, ReverseBox,
- Turns,
- TurnPolicy, InterruptPolicy
- >
- : detail::get_turns::get_turns_multi_polygon_cs
- <
- MultiPolygon, Box,
- ReverseMultiPolygon, ReverseBox,
- Turns,
- TurnPolicy, InterruptPolicy
- >
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp
index acb91f7dd4..c780c4cd9a 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp
@@ -10,56 +10,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP
-#include <boost/range.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
#include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-namespace dispatch
-{
-
- template <typename Multi>
- struct select_rings<multi_polygon_tag, Multi>
- {
- template <typename Geometry, typename Map>
- static inline void apply(Multi const& multi, Geometry const& geometry,
- ring_identifier id, Map& map, bool midpoint)
- {
- typedef typename boost::range_iterator
- <
- Multi const
- >::type iterator_type;
-
- typedef select_rings<polygon_tag, typename boost::range_value<Multi>::type> per_polygon;
-
- id.multi_index = 0;
- for (iterator_type it = boost::begin(multi); it != boost::end(multi); ++it)
- {
- id.ring_index = -1;
- per_polygon::apply(*it, geometry, id, map, midpoint);
- id.multi_index++;
- }
- }
- };
-}
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp
index d9820837be..39bfea2fb3 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp
@@ -10,48 +10,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename MultiPolygon,
- typename Turns,
- typename TurnPolicy,
- typename InterruptPolicy
->
-struct self_get_turn_points
- <
- multi_polygon_tag, MultiPolygon,
- Turns,
- TurnPolicy, InterruptPolicy
- >
- : detail::self_get_turn_points::get_turns
- <
- MultiPolygon,
- Turns,
- TurnPolicy,
- InterruptPolicy
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp
index dd3bcd5d1b..2ee789c5da 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp
@@ -4,6 +4,9 @@
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// This file was modified by Oracle on 2013.
+// Modifications copyright (c) 2013, Oracle and/or its affiliates.
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,83 +17,8 @@
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP
-#include <boost/range.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace point_on_border
-{
-
-
-template
-<
- typename Point,
- typename MultiGeometry,
- typename Policy
->
-struct point_on_multi
-{
- static inline bool apply(Point& point, MultiGeometry const& multi, bool midpoint)
- {
- // Take a point on the first multi-geometry
- // (i.e. the first that is not empty)
- for (typename boost::range_iterator
- <
- MultiGeometry const
- >::type it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- if (Policy::apply(point, *it, midpoint))
- {
- return true;
- }
- }
- return false;
- }
-};
-
-
-
-
-}} // namespace detail::point_on_border
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template<typename Point, typename Multi>
-struct point_on_border<multi_polygon_tag, Point, Multi>
- : detail::point_on_border::point_on_multi
- <
- Point,
- Multi,
- detail::point_on_border::point_on_polygon
- <
- Point,
- typename boost::range_value<Multi>::type
- >
- >
-{};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp
index 47bc8a863a..5604d9d74f 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp
@@ -4,6 +4,9 @@
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// This file was modified by Oracle on 2013.
+// Modifications copyright (c) 2013, Oracle and/or its affiliates.
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -11,81 +14,13 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
-#include <boost/assert.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/core/ring_type.hpp>
#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace section
-{
-
-
-template
-<
- typename MultiGeometry,
- typename Section,
- typename Policy
->
-struct full_section_multi
-{
- static inline typename ring_return_type<MultiGeometry const>::type apply(
- MultiGeometry const& multi, Section const& section)
- {
- BOOST_ASSERT
- (
- section.ring_id.multi_index >= 0
- && section.ring_id.multi_index < int(boost::size(multi))
- );
-
- return Policy::apply(multi[section.ring_id.multi_index], section);
- }
-};
-
-
-}} // namespace detail::section
-#endif
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename MultiPolygon, typename Section>
-struct range_by_section<multi_polygon_tag, MultiPolygon, Section>
- : detail::section::full_section_multi
- <
- MultiPolygon,
- Section,
- detail::section::full_section_polygon
- <
- typename boost::range_value<MultiPolygon>::type,
- Section
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp
index 1e1056f373..ef98021237 100644
--- a/3party/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp
@@ -4,6 +4,9 @@
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// This file was modified by Oracle on 2013.
+// Modifications copyright (c) 2013, Oracle and/or its affiliates.
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,84 +17,8 @@
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
-#include <cstddef>
-#include <vector>
-
-#include <boost/concept/requires.hpp>
-#include <boost/range.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace sectionalize
-{
-
-
-template <typename MultiGeometry, typename Sections, std::size_t DimensionCount, typename Policy>
-struct sectionalize_multi
-{
- static inline void apply(MultiGeometry const& multi, Sections& sections, ring_identifier ring_id)
- {
- ring_id.multi_index = 0;
- for (typename boost::range_iterator<MultiGeometry const>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it, ++ring_id.multi_index)
- {
- Policy::apply(*it, sections, ring_id);
- }
- }
-};
-
-
-}} // namespace detail::sectionalize
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename MultiPolygon,
- bool Reverse,
- typename Sections,
- std::size_t DimensionCount,
- std::size_t MaxCount
->
-struct sectionalize<multi_polygon_tag, MultiPolygon, Reverse, Sections, DimensionCount, MaxCount>
- : detail::sectionalize::sectionalize_multi
- <
- MultiPolygon,
- Sections,
- DimensionCount,
- detail::sectionalize::sectionalize_polygon
- <
- typename boost::range_value<MultiPolygon>::type,
- Reverse,
- Sections,
- DimensionCount,
- MaxCount
- >
- >
-
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
-
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/disjoint.hpp b/3party/boost/boost/geometry/multi/algorithms/disjoint.hpp
index c01e520f56..55f0f01cd6 100644
--- a/3party/boost/boost/geometry/multi/algorithms/disjoint.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/disjoint.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2012-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -11,34 +16,6 @@
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DISJOINT_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DISJOINT_HPP
-
#include <boost/geometry/algorithms/disjoint.hpp>
-#include <boost/geometry/multi/algorithms/covered_by.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Point, typename MultiPolygon>
-struct disjoint<Point, MultiPolygon, 2, point_tag, multi_polygon_tag, false>
- : detail::disjoint::reverse_covered_by<Point, MultiPolygon>
-{};
-
-} // namespace dispatch
-
-
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DISJOINT_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/distance.hpp b/3party/boost/boost/geometry/multi/algorithms/distance.hpp
index 32b41fcefd..4946b6f3e1 100644
--- a/3party/boost/boost/geometry/multi/algorithms/distance.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/distance.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,145 +19,9 @@
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_HPP
-
-#include <boost/numeric/conversion/bounds.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/core/geometry_id.hpp>
-#include <boost/geometry/multi/core/point_type.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
+// this file is intentionally empty (with the exception of the #include below)
+// it is used for backward compatinility and may be removed in the future
#include <boost/geometry/algorithms/distance.hpp>
-#include <boost/geometry/multi/algorithms/num_points.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-template<typename Geometry, typename MultiGeometry, typename Strategy>
-struct distance_single_to_multi
- : private dispatch::distance
- <
- Geometry,
- typename range_value<MultiGeometry>::type,
- Strategy
- >
-{
- typedef typename strategy::distance::services::return_type<Strategy>::type return_type;
-
- static inline return_type apply(Geometry const& geometry,
- MultiGeometry const& multi,
- Strategy const& strategy)
- {
- return_type mindist = return_type();
- bool first = true;
-
- for(typename range_iterator<MultiGeometry const>::type it = boost::begin(multi);
- it != boost::end(multi);
- ++it, first = false)
- {
- return_type dist = dispatch::distance
- <
- Geometry,
- typename range_value<MultiGeometry>::type,
- Strategy
- >::apply(geometry, *it, strategy);
-
- if (first || dist < mindist)
- {
- mindist = dist;
- }
- }
-
- return mindist;
- }
-};
-
-template<typename Multi1, typename Multi2, typename Strategy>
-struct distance_multi_to_multi
- : private distance_single_to_multi
- <
- typename range_value<Multi1>::type,
- Multi2,
- Strategy
- >
-{
- typedef typename strategy::distance::services::return_type<Strategy>::type return_type;
-
- static inline return_type apply(Multi1 const& multi1,
- Multi2 const& multi2, Strategy const& strategy)
- {
- return_type mindist = return_type();
- bool first = true;
-
- for(typename range_iterator<Multi1 const>::type it = boost::begin(multi1);
- it != boost::end(multi1);
- ++it, first = false)
- {
- return_type dist = distance_single_to_multi
- <
- typename range_value<Multi1>::type,
- Multi2,
- Strategy
- >::apply(*it, multi2, strategy);
- if (first || dist < mindist)
- {
- mindist = dist;
- }
- }
-
- return mindist;
- }
-};
-
-
-}} // namespace detail::distance
-#endif
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename G1,
- typename G2,
- typename Strategy,
- typename SingleGeometryTag
->
-struct distance
-<
- G1, G2, Strategy,
- SingleGeometryTag, multi_tag, strategy_tag_distance_point_point,
- false
->
- : detail::distance::distance_single_to_multi<G1, G2, Strategy>
-{};
-
-template <typename G1, typename G2, typename Strategy>
-struct distance
-<
- G1, G2, Strategy,
- multi_tag, multi_tag, strategy_tag_distance_point_point,
- false
->
- : detail::distance::distance_multi_to_multi<G1, G2, Strategy>
-{};
-
-} // namespace dispatch
-#endif
-
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/envelope.hpp b/3party/boost/boost/geometry/multi/algorithms/envelope.hpp
index b70aab41e2..457dfaf3bc 100644
--- a/3party/boost/boost/geometry/multi/algorithms/envelope.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/envelope.hpp
@@ -14,94 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_ENVELOPE_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_ENVELOPE_HPP
-#include <vector>
-#include <boost/range/metafunctions.hpp>
-
-
-#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/core/point_type.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-
-namespace detail { namespace envelope
-{
-
-
-struct envelope_multi_linestring
-{
- template<typename MultiLinestring, typename Box>
- static inline void apply(MultiLinestring const& mp, Box& mbr)
- {
- assign_inverse(mbr);
- for (typename boost::range_iterator<MultiLinestring const>::type
- it = mp.begin();
- it != mp.end();
- ++it)
- {
- envelope_range_additional(*it, mbr);
- }
- }
-};
-
-
-// version for multi_polygon: outer ring's of all polygons
-struct envelope_multi_polygon
-{
- template<typename MultiPolygon, typename Box>
- static inline void apply(MultiPolygon const& mp, Box& mbr)
- {
- assign_inverse(mbr);
- for (typename boost::range_const_iterator<MultiPolygon>::type
- it = mp.begin();
- it != mp.end();
- ++it)
- {
- envelope_range_additional(exterior_ring(*it), mbr);
- }
- }
-};
-
-
-}} // namespace detail::envelope
-
-#endif
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Multi>
-struct envelope<Multi, multi_point_tag>
- : detail::envelope::envelope_range
-{};
-
-template <typename Multi>
-struct envelope<Multi, multi_linestring_tag>
- : detail::envelope::envelope_multi_linestring
-{};
-
-
-template <typename Multi>
-struct envelope<Multi, multi_polygon_tag>
- : detail::envelope::envelope_multi_polygon
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_ENVELOPE_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/equals.hpp b/3party/boost/boost/geometry/multi/algorithms/equals.hpp
index 54cd075048..0f045fff90 100644
--- a/3party/boost/boost/geometry/multi/algorithms/equals.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/equals.hpp
@@ -15,51 +15,8 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_EQUALS_HPP
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/core/geometry_id.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
#include <boost/geometry/algorithms/equals.hpp>
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename MultiPolygon1, typename MultiPolygon2, bool Reverse>
-struct equals
- <
- MultiPolygon1, MultiPolygon2,
- multi_polygon_tag, multi_polygon_tag,
- 2,
- Reverse
- >
- : detail::equals::equals_by_collection<detail::equals::area_check>
-{};
-
-
-template <typename Polygon, typename MultiPolygon, bool Reverse>
-struct equals
- <
- Polygon, MultiPolygon,
- polygon_tag, multi_polygon_tag,
- 2,
- Reverse
- >
- : detail::equals::equals_by_collection<detail::equals::area_check>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_EQUALS_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/for_each.hpp b/3party/boost/boost/geometry/multi/algorithms/for_each.hpp
index 9712b9c459..d8b3af1ff2 100644
--- a/3party/boost/boost/geometry/multi/algorithms/for_each.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/for_each.hpp
@@ -15,87 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_FOR_EACH_HPP
-#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/core/point_type.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
#include <boost/geometry/algorithms/for_each.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace for_each
-{
-
-// Implementation of multi, for both point and segment,
-// just calling the single version.
-template <typename Policy>
-struct for_each_multi
-{
- template <typename MultiGeometry, typename Functor>
- static inline void apply(MultiGeometry& multi, Functor& f)
- {
- for(BOOST_AUTO_TPL(it, boost::begin(multi)); it != boost::end(multi); ++it)
- {
- Policy::apply(*it, f);
- }
- }
-};
-
-
-}} // namespace detail::for_each
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename MultiGeometry>
-struct for_each_point<MultiGeometry, multi_tag>
- : detail::for_each::for_each_multi
- <
- // Specify the dispatch of the single-version as policy
- for_each_point
- <
- typename add_const_if_c
- <
- is_const<MultiGeometry>::value,
- typename boost::range_value<MultiGeometry>::type
- >::type
- >
- >
-{};
-
-
-template <typename MultiGeometry>
-struct for_each_segment<MultiGeometry, multi_tag>
- : detail::for_each::for_each_multi
- <
- // Specify the dispatch of the single-version as policy
- for_each_segment
- <
- typename add_const_if_c
- <
- is_const<MultiGeometry>::value,
- typename boost::range_value<MultiGeometry>::type
- >::type
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_FOR_EACH_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/intersection.hpp b/3party/boost/boost/geometry/multi/algorithms/intersection.hpp
index ddb9aed812..e0f3592e8f 100644
--- a/3party/boost/boost/geometry/multi/algorithms/intersection.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/intersection.hpp
@@ -9,27 +9,27 @@
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_INTERSECTION_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_INTERSECTION_HPP
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/geometry_id.hpp>
+#include <boost/geometry/core/is_areal.hpp>
+#include <boost/geometry/core/point_order.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+// TODO: those headers probably may be removed
+#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
+#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
+#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
+#include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
+#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
+#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
-#include <boost/geometry/multi/core/closure.hpp>
-#include <boost/geometry/multi/core/geometry_id.hpp>
-#include <boost/geometry/multi/core/is_areal.hpp>
-#include <boost/geometry/multi/core/point_order.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
+#include <boost/geometry/algorithms/intersection.hpp>
#include <boost/geometry/multi/algorithms/covered_by.hpp>
#include <boost/geometry/multi/algorithms/envelope.hpp>
#include <boost/geometry/multi/algorithms/num_points.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp>
-#include <boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp>
-#include <boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp>
-
-#include <boost/geometry/algorithms/intersection.hpp>
-
namespace boost { namespace geometry
{
@@ -45,10 +45,13 @@ struct intersection_multi_linestring_multi_linestring_point
template
<
typename MultiLinestring1, typename MultiLinestring2,
+ typename RobustPolicy,
typename OutputIterator, typename Strategy
>
static inline OutputIterator apply(MultiLinestring1 const& ml1,
- MultiLinestring2 const& ml2, OutputIterator out,
+ MultiLinestring2 const& ml2,
+ RobustPolicy const& robust_policy,
+ OutputIterator out,
Strategy const& strategy)
{
// Note, this loop is quadratic w.r.t. number of linestrings per input.
@@ -68,7 +71,7 @@ struct intersection_multi_linestring_multi_linestring_point
++it2)
{
out = intersection_linestring_linestring_point<PointOut>
- ::apply(*it1, *it2, out, strategy);
+ ::apply(*it1, *it2, robust_policy, out, strategy);
}
}
@@ -83,10 +86,13 @@ struct intersection_linestring_multi_linestring_point
template
<
typename Linestring, typename MultiLinestring,
+ typename RobustPolicy,
typename OutputIterator, typename Strategy
>
static inline OutputIterator apply(Linestring const& linestring,
- MultiLinestring const& ml, OutputIterator out,
+ MultiLinestring const& ml,
+ RobustPolicy const& robust_policy,
+ OutputIterator out,
Strategy const& strategy)
{
for (typename boost::range_iterator
@@ -97,7 +103,7 @@ struct intersection_linestring_multi_linestring_point
++it)
{
out = intersection_linestring_linestring_point<PointOut>
- ::apply(linestring, *it, out, strategy);
+ ::apply(linestring, *it, robust_policy, out, strategy);
}
return out;
@@ -118,9 +124,11 @@ struct intersection_of_multi_linestring_with_areal
template
<
typename MultiLinestring, typename Areal,
+ typename RobustPolicy,
typename OutputIterator, typename Strategy
>
static inline OutputIterator apply(MultiLinestring const& ml, Areal const& areal,
+ RobustPolicy const& robust_policy,
OutputIterator out,
Strategy const& strategy)
{
@@ -134,7 +142,7 @@ struct intersection_of_multi_linestring_with_areal
out = intersection_of_linestring_with_areal
<
ReverseAreal, LineStringOut, OverlayType
- >::apply(*it, areal, out, strategy);
+ >::apply(*it, areal, robust_policy, out, strategy);
}
return out;
@@ -154,16 +162,18 @@ struct intersection_of_areal_with_multi_linestring
template
<
typename Areal, typename MultiLinestring,
+ typename RobustPolicy,
typename OutputIterator, typename Strategy
>
static inline OutputIterator apply(Areal const& areal, MultiLinestring const& ml,
+ RobustPolicy const& robust_policy,
OutputIterator out,
Strategy const& strategy)
{
return intersection_of_multi_linestring_with_areal
<
ReverseAreal, LineStringOut, OverlayType
- >::apply(ml, areal, out, strategy);
+ >::apply(ml, areal, robust_policy, out, strategy);
}
};
@@ -175,10 +185,13 @@ struct clip_multi_linestring
template
<
typename MultiLinestring, typename Box,
+ typename RobustPolicy,
typename OutputIterator, typename Strategy
>
static inline OutputIterator apply(MultiLinestring const& multi_linestring,
- Box const& box, OutputIterator out, Strategy const& )
+ Box const& box,
+ RobustPolicy const& robust_policy,
+ OutputIterator out, Strategy const& )
{
typedef typename point_type<LinestringOut>::type point_type;
strategy::intersection::liang_barsky<Box, point_type> lb_strategy;
@@ -187,7 +200,7 @@ struct clip_multi_linestring
it != boost::end(multi_linestring); ++it)
{
out = detail::intersection::clip_range_with_box
- <LinestringOut>(box, *it, out, lb_strategy);
+ <LinestringOut>(box, *it, robust_policy, out, lb_strategy);
}
return out;
}
diff --git a/3party/boost/boost/geometry/multi/algorithms/length.hpp b/3party/boost/boost/geometry/multi/algorithms/length.hpp
index e18cbe3d9a..168e6a732f 100644
--- a/3party/boost/boost/geometry/multi/algorithms/length.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/length.hpp
@@ -15,48 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_LENGTH_HPP
-#include <boost/range/metafunctions.hpp>
-
#include <boost/geometry/algorithms/length.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/algorithms/detail/multi_sum.hpp>
-#include <boost/geometry/multi/algorithms/num_points.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename MultiLinestring>
-struct length<MultiLinestring, multi_linestring_tag> : detail::multi_sum
-{
- template <typename Strategy>
- static inline typename default_length_result<MultiLinestring>::type
- apply(MultiLinestring const& multi, Strategy const& strategy)
- {
- return multi_sum::apply
- <
- typename default_length_result<MultiLinestring>::type,
- detail::length::range_length
- <
- typename boost::range_value<MultiLinestring>::type,
- closed // no need to close it explicitly
- >
- >(multi, strategy);
-
- }
-};
-
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_LENGTH_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/num_geometries.hpp b/3party/boost/boost/geometry/multi/algorithms/num_geometries.hpp
index a102d08f2c..3a85f4e4bf 100644
--- a/3party/boost/boost/geometry/multi/algorithms/num_geometries.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/num_geometries.hpp
@@ -16,38 +16,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_GEOMETRIES_HPP
-#include <cstddef>
-
-#include <boost/range.hpp>
-
#include <boost/geometry/algorithms/num_geometries.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename MultiGeometry>
-struct num_geometries<MultiGeometry, multi_tag>
-{
- static inline std::size_t apply(MultiGeometry const& multi_geometry)
- {
- return boost::size(multi_geometry);
- }
-};
-
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_GEOMETRIES_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp b/3party/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp
index e43b31d16f..5b52508b7e 100644
--- a/3party/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp
@@ -20,8 +20,7 @@
#include <boost/geometry/core/tag.hpp>
#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/num_interior_rings.hpp>
diff --git a/3party/boost/boost/geometry/multi/algorithms/num_points.hpp b/3party/boost/boost/geometry/multi/algorithms/num_points.hpp
index 294c08603b..ac10ddff41 100644
--- a/3party/boost/boost/geometry/multi/algorithms/num_points.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/num_points.hpp
@@ -15,11 +15,12 @@
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_POINTS_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_POINTS_HPP
+#include <cstddef>
#include <boost/range.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/num_points.hpp>
@@ -34,7 +35,8 @@ namespace detail { namespace num_points
struct multi_count
{
template <typename MultiGeometry>
- static inline size_t apply(MultiGeometry const& geometry, bool add_for_open)
+ static inline
+ std::size_t apply(MultiGeometry const& geometry, bool add_for_open)
{
typedef typename boost::range_value<MultiGeometry>::type geometry_type;
typedef typename boost::range_iterator
diff --git a/3party/boost/boost/geometry/multi/algorithms/perimeter.hpp b/3party/boost/boost/geometry/multi/algorithms/perimeter.hpp
index 5b37525b8b..4820111f1f 100644
--- a/3party/boost/boost/geometry/multi/algorithms/perimeter.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/perimeter.hpp
@@ -15,42 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_PERIMETER_HPP
-#include <boost/range/metafunctions.hpp>
-
#include <boost/geometry/algorithms/perimeter.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-#include <boost/geometry/multi/algorithms/detail/multi_sum.hpp>
-#include <boost/geometry/multi/algorithms/num_points.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-template <typename MultiPolygon>
-struct perimeter<MultiPolygon, multi_polygon_tag> : detail::multi_sum
-{
- template <typename Strategy>
- static inline typename default_length_result<MultiPolygon>::type
- apply(MultiPolygon const& multi, Strategy const& strategy)
- {
- return multi_sum::apply
- <
- typename default_length_result<MultiPolygon>::type,
- perimeter<typename boost::range_value<MultiPolygon>::type>
- >(multi, strategy);
- }
-};
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_PERIMETER_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/remove_spikes.hpp b/3party/boost/boost/geometry/multi/algorithms/remove_spikes.hpp
new file mode 100644
index 0000000000..af224ec478
--- /dev/null
+++ b/3party/boost/boost/geometry/multi/algorithms/remove_spikes.hpp
@@ -0,0 +1,19 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_REMOVE_SPIKES_HPP
+#define BOOST_GEOMETRY_MULTI_ALGORITHMS_REMOVE_SPIKES_HPP
+
+
+#include <boost/geometry/algorithms/remove_spikes.hpp>
+
+
+#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_REMOVE_SPIKES_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/reverse.hpp b/3party/boost/boost/geometry/multi/algorithms/reverse.hpp
index 7a4938ef80..a7872bdd2a 100644
--- a/3party/boost/boost/geometry/multi/algorithms/reverse.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/reverse.hpp
@@ -15,49 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_REVERSE_HPP
-#include <boost/range/metafunctions.hpp>
-
#include <boost/geometry/algorithms/reverse.hpp>
-#include <boost/geometry/multi/algorithms/detail/modify.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Geometry>
-struct reverse<Geometry, multi_linestring_tag>
- : detail::multi_modify
- <
- Geometry,
- detail::reverse::range_reverse
- >
-{};
-
-
-template <typename Geometry>
-struct reverse<Geometry, multi_polygon_tag>
- : detail::multi_modify
- <
- Geometry,
- detail::reverse::polygon_reverse
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_REVERSE_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/simplify.hpp b/3party/boost/boost/geometry/multi/algorithms/simplify.hpp
index 2c7461b666..8648d366d1 100644
--- a/3party/boost/boost/geometry/multi/algorithms/simplify.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/simplify.hpp
@@ -14,79 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_SIMPLIFY_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_SIMPLIFY_HPP
-#include <boost/range.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-#include <boost/geometry/multi/algorithms/clear.hpp>
#include <boost/geometry/algorithms/simplify.hpp>
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace simplify
-{
-
-template<typename Policy>
-struct simplify_multi
-{
- template <typename MultiGeometry, typename Strategy>
- static inline void apply(MultiGeometry const& multi, MultiGeometry& out,
- double max_distance, Strategy const& strategy)
- {
- traits::resize<MultiGeometry>::apply(out, boost::size(multi));
-
- typename boost::range_iterator<MultiGeometry>::type it_out
- = boost::begin(out);
- for (typename boost::range_iterator<MultiGeometry const>::type it_in
- = boost::begin(multi);
- it_in != boost::end(multi);
- ++it_in, ++it_out)
- {
- Policy::apply(*it_in, *it_out, max_distance, strategy);
- }
- }
-};
-
-
-
-}} // namespace detail::simplify
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename MultiPoint>
-struct simplify<MultiPoint, multi_point_tag>
- : detail::simplify::simplify_copy
-{};
-
-
-template <typename MultiLinestring>
-struct simplify<MultiLinestring, multi_linestring_tag>
- : detail::simplify::simplify_multi<detail::simplify::simplify_range<2> >
-{};
-
-
-template <typename MultiPolygon>
-struct simplify<MultiPolygon, multi_polygon_tag>
- : detail::simplify::simplify_multi<detail::simplify::simplify_polygon>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_SIMPLIFY_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/transform.hpp b/3party/boost/boost/geometry/multi/algorithms/transform.hpp
index 13c53e615b..7aa691ec4a 100644
--- a/3party/boost/boost/geometry/multi/algorithms/transform.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/transform.hpp
@@ -14,78 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_TRANSFORM_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_TRANSFORM_HPP
-#include <boost/range.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
#include <boost/geometry/algorithms/transform.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace transform
-{
-
-/*!
- \brief Is able to transform any multi-geometry, calling the single-version as policy
-*/
-template <typename Policy>
-struct transform_multi
-{
- template <typename Multi1, typename Multi2, typename S>
- static inline bool apply(Multi1 const& multi1, Multi2& multi2, S const& strategy)
- {
- traits::resize<Multi2>::apply(multi2, boost::size(multi1));
-
- typename boost::range_iterator<Multi1 const>::type it1
- = boost::begin(multi1);
- typename boost::range_iterator<Multi2>::type it2
- = boost::begin(multi2);
-
- for (; it1 != boost::end(multi1); ++it1, ++it2)
- {
- if (! Policy::apply(*it1, *it2, strategy))
- {
- return false;
- }
- }
-
- return true;
- }
-};
-
-
-}} // namespace detail::transform
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Multi1, typename Multi2>
-struct transform
- <
- Multi1, Multi2,
- multi_tag, multi_tag
- >
- : detail::transform::transform_multi
- <
- transform
- <
- typename boost::range_value<Multi1>::type,
- typename boost::range_value<Multi2>::type
- >
- >
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_TRANSFORM_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/unique.hpp b/3party/boost/boost/geometry/multi/algorithms/unique.hpp
index 64c56aafbb..fa063a312d 100644
--- a/3party/boost/boost/geometry/multi/algorithms/unique.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/unique.hpp
@@ -15,72 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_UNIQUE_HPP
-#include <boost/range.hpp>
-
#include <boost/geometry/algorithms/unique.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace unique
-{
-
-
-template <typename Policy>
-struct multi_unique
-{
- template <typename MultiGeometry, typename ComparePolicy>
- static inline void apply(MultiGeometry& multi, ComparePolicy const& compare)
- {
- for (typename boost::range_iterator<MultiGeometry>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it, compare);
- }
- }
-};
-
-
-}} // namespace detail::unique
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// For points, unique is not applicable and does nothing
-// (Note that it is not "spatially unique" but that it removes duplicate coordinates,
-// like std::unique does). Spatially unique is "dissolve" which can (or will be)
-// possible for multi-points as well, removing points at the same location.
-
-
-template <typename MultiLineString>
-struct unique<MultiLineString, multi_linestring_tag>
- : detail::unique::multi_unique<detail::unique::range_unique>
-{};
-
-
-template <typename MultiPolygon>
-struct unique<MultiPolygon, multi_polygon_tag>
- : detail::unique::multi_unique<detail::unique::polygon_unique>
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_UNIQUE_HPP
diff --git a/3party/boost/boost/geometry/multi/algorithms/within.hpp b/3party/boost/boost/geometry/multi/algorithms/within.hpp
index 4094dcc2dc..9fdc5dd39a 100644
--- a/3party/boost/boost/geometry/multi/algorithms/within.hpp
+++ b/3party/boost/boost/geometry/multi/algorithms/within.hpp
@@ -3,6 +3,10 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -11,95 +15,11 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_WITHIN_HPP
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_WITHIN_HPP
-
-#include <boost/range.hpp>
-
#include <boost/geometry/algorithms/within.hpp>
-#include <boost/geometry/multi/core/closure.hpp>
-#include <boost/geometry/multi/core/point_order.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace within
-{
-
-
-template
-<
- typename Geometry,
- typename MultiGeometry,
- typename Strategy,
- typename Policy
->
-struct geometry_multi_within_code
-{
- static inline int apply(Geometry const& geometry,
- MultiGeometry const& multi,
- Strategy const& strategy)
- {
- for (typename boost::range_iterator<MultiGeometry const>::type it
- = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- // Geometry coding on multi: 1 (within) if within one of them;
- // 0 (touch) if on border of one of them
- int const code = Policy::apply(geometry, *it, strategy);
- if (code != -1)
- {
- return code;
- }
- }
- return -1;
- }
-};
-
-
-}} // namespace detail::within
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Point, typename MultiPolygon>
-struct within<Point, MultiPolygon, point_tag, multi_polygon_tag>
-{
- template <typename Strategy>
- static inline bool apply(Point const& point,
- MultiPolygon const& multi_polygon, Strategy const& strategy)
- {
- return detail::within::geometry_multi_within_code
- <
- Point,
- MultiPolygon,
- Strategy,
- detail::within::point_in_polygon
- <
- Point,
- typename boost::range_value<MultiPolygon>::type,
- order_as_direction
- <
- geometry::point_order<MultiPolygon>::value
- >::value,
- geometry::closure<MultiPolygon>::value,
- Strategy
- >
- >::apply(point, multi_polygon, strategy) == 1;
- }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_WITHIN_HPP
diff --git a/3party/boost/boost/geometry/multi/core/closure.hpp b/3party/boost/boost/geometry/multi/core/closure.hpp
index 3964db256c..9e7cf3c248 100644
--- a/3party/boost/boost/geometry/multi/core/closure.hpp
+++ b/3party/boost/boost/geometry/multi/core/closure.hpp
@@ -14,45 +14,6 @@
#ifndef BOOST_GEOMETRY_MULTI_CORE_CLOSURE_HPP
#define BOOST_GEOMETRY_MULTI_CORE_CLOSURE_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename Multi>
-struct closure<multi_point_tag, Multi> : public core_detail::closure::closed {};
-
-template <typename Multi>
-struct closure<multi_linestring_tag, Multi> : public core_detail::closure::closed {};
-
-// Specialization for polygon: the closure is the closure of its rings
-template <typename MultiPolygon>
-struct closure<multi_polygon_tag, MultiPolygon>
-{
- static const closure_selector value = core_dispatch::closure
- <
- polygon_tag,
- typename boost::range_value<MultiPolygon>::type
- >::value ;
-};
-
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_CORE_CLOSURE_HPP
diff --git a/3party/boost/boost/geometry/multi/core/geometry_id.hpp b/3party/boost/boost/geometry/multi/core/geometry_id.hpp
index 9d69cb20d9..7d5e888bab 100644
--- a/3party/boost/boost/geometry/multi/core/geometry_id.hpp
+++ b/3party/boost/boost/geometry/multi/core/geometry_id.hpp
@@ -15,42 +15,6 @@
#ifndef BOOST_GEOMETRY_MULTI_CORE_GEOMETRY_ID_HPP
#define BOOST_GEOMETRY_MULTI_CORE_GEOMETRY_ID_HPP
-
-#include <boost/mpl/int.hpp>
-#include <boost/type_traits.hpp>
-
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
#include <boost/geometry/core/geometry_id.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <>
-struct geometry_id<multi_point_tag> : boost::mpl::int_<4> {};
-
-
-template <>
-struct geometry_id<multi_linestring_tag> : boost::mpl::int_<5> {};
-
-
-template <>
-struct geometry_id<multi_polygon_tag> : boost::mpl::int_<6> {};
-
-
-} // namespace core_dispatch
-#endif
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_CORE_GEOMETRY_ID_HPP
diff --git a/3party/boost/boost/geometry/multi/core/interior_rings.hpp b/3party/boost/boost/geometry/multi/core/interior_rings.hpp
index 5a200d486c..deeeff81d0 100644
--- a/3party/boost/boost/geometry/multi/core/interior_rings.hpp
+++ b/3party/boost/boost/geometry/multi/core/interior_rings.hpp
@@ -16,40 +16,7 @@
#define BOOST_GEOMETRY_MULTI_CORE_INTERIOR_RINGS_HPP
-#include <cstddef>
-
-#include <boost/range.hpp>
-
#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-
-template <typename MultiPolygon>
-struct interior_type<multi_polygon_tag, MultiPolygon>
-{
- typedef typename core_dispatch::interior_type
- <
- polygon_tag,
- typename boost::range_value<MultiPolygon>::type
- >::type type;
-};
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_CORE_INTERIOR_RINGS_HPP
diff --git a/3party/boost/boost/geometry/multi/core/is_areal.hpp b/3party/boost/boost/geometry/multi/core/is_areal.hpp
index ad8daeb497..30f98527ab 100644
--- a/3party/boost/boost/geometry/multi/core/is_areal.hpp
+++ b/3party/boost/boost/geometry/multi/core/is_areal.hpp
@@ -16,28 +16,7 @@
#define BOOST_GEOMETRY_MULTI_CORE_IS_AREAL_HPP
-#include <boost/type_traits.hpp>
-
-
#include <boost/geometry/core/is_areal.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <> struct is_areal<multi_polygon_tag> : boost::true_type {};
-
-} // namespace core_dispatch
-#endif
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_CORE_IS_AREAL_HPP
diff --git a/3party/boost/boost/geometry/multi/core/point_order.hpp b/3party/boost/boost/geometry/multi/core/point_order.hpp
index 6b08468e8c..119e55c3ba 100644
--- a/3party/boost/boost/geometry/multi/core/point_order.hpp
+++ b/3party/boost/boost/geometry/multi/core/point_order.hpp
@@ -15,43 +15,7 @@
#define BOOST_GEOMETRY_MULTI_CORE_POINT_ORDER_HPP
-#include <boost/range.hpp>
-
#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename Multi>
-struct point_order<multi_point_tag, Multi>
- : public detail::point_order::clockwise {};
-
-template <typename Multi>
-struct point_order<multi_linestring_tag, Multi>
- : public detail::point_order::clockwise {};
-
-
-// Specialization for multi_polygon: the order is the order of its polygons
-template <typename MultiPolygon>
-struct point_order<multi_polygon_tag, MultiPolygon>
-{
- static const order_selector value = core_dispatch::point_order
- <
- polygon_tag,
- typename boost::range_value<MultiPolygon>::type
- >::value ;
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_CORE_POINT_ORDER_HPP
diff --git a/3party/boost/boost/geometry/multi/core/point_type.hpp b/3party/boost/boost/geometry/multi/core/point_type.hpp
index 3c77e973b8..a7277d09a9 100644
--- a/3party/boost/boost/geometry/multi/core/point_type.hpp
+++ b/3party/boost/boost/geometry/multi/core/point_type.hpp
@@ -16,49 +16,7 @@
#define BOOST_GEOMETRY_MULTI_CORE_POINT_TYPE_HPP
-#include <boost/range/metafunctions.hpp>
-
#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename MultiPoint>
-struct point_type<multi_point_tag, MultiPoint>
-{
- typedef typename boost::range_value<MultiPoint>::type type;
-};
-
-
-template <typename MultiLinestring>
-struct point_type<multi_linestring_tag, MultiLinestring>
-{
- typedef typename point_type<linestring_tag,
- typename boost::range_value<MultiLinestring>::type>::type type;
-};
-
-
-
-template <typename MultiPolygon>
-struct point_type<multi_polygon_tag, MultiPolygon>
-{
- typedef typename point_type<polygon_tag,
- typename boost::range_value<MultiPolygon>::type>::type type;
-};
-
-
-}
-#endif
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_CORE_POINT_TYPE_HPP
diff --git a/3party/boost/boost/geometry/multi/core/ring_type.hpp b/3party/boost/boost/geometry/multi/core/ring_type.hpp
index faafaed021..b27b5527c2 100644
--- a/3party/boost/boost/geometry/multi/core/ring_type.hpp
+++ b/3party/boost/boost/geometry/multi/core/ring_type.hpp
@@ -4,6 +4,9 @@
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// This file was modified by Oracle on 2013.
+// Modifications copyright (c) 2013, Oracle and/or its affiliates.
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -16,51 +19,7 @@
#define BOOST_GEOMETRY_MULTI_CORE_RING_TYPE_HPP
-#include <boost/range/metafunctions.hpp>
-
#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename MultiPolygon>
-struct ring_return_type<multi_polygon_tag, MultiPolygon>
-{
- typedef typename ring_return_type
- <
- polygon_tag,
- typename mpl::if_
- <
- boost::is_const<MultiPolygon>,
- typename boost::range_value<MultiPolygon>::type const,
- typename boost::range_value<MultiPolygon>::type
- >::type
- >::type type;
-};
-
-
-template <typename MultiPolygon>
-struct ring_type<multi_polygon_tag, MultiPolygon>
-{
- typedef typename boost::remove_reference
- <
- typename ring_return_type<multi_polygon_tag, MultiPolygon>::type
- >::type type;
-};
-
-
-} // namespace core_dispatch
-#endif
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_CORE_RING_TYPE_HPP
diff --git a/3party/boost/boost/geometry/multi/core/tags.hpp b/3party/boost/boost/geometry/multi/core/tags.hpp
index dcfca65b2f..fb0758d95f 100644
--- a/3party/boost/boost/geometry/multi/core/tags.hpp
+++ b/3party/boost/boost/geometry/multi/core/tags.hpp
@@ -15,57 +15,8 @@
#ifndef BOOST_GEOMETRY_MULTI_CORE_TAGS_HPP
#define BOOST_GEOMETRY_MULTI_CORE_TAGS_HPP
-#include <boost/geometry/core/tags.hpp>
-
-namespace boost { namespace geometry
-{
-
-/// OGC Multi point identifying tag
-struct multi_point_tag : multi_tag, pointlike_tag {};
-
-/// OGC Multi linestring identifying tag
-struct multi_linestring_tag : multi_tag, linear_tag {};
-
-/// OGC Multi polygon identifying tag
-struct multi_polygon_tag : multi_tag, polygonal_tag {};
-
-/// OGC Geometry Collection identifying tag
-struct geometry_collection_tag : multi_tag {};
-
-
-
-
-/*!
-\brief Meta-function to get for a tag of a multi-geometry
- the tag of the corresponding single-geometry
-*/
-template <typename Tag>
-struct single_tag_of
-{};
-
-#ifndef DOXYGEN_NO_DETAIL
-
-template <>
-struct single_tag_of<multi_point_tag>
-{
- typedef point_tag type;
-};
-
-template <>
-struct single_tag_of<multi_linestring_tag>
-{
- typedef linestring_tag type;
-};
-
-template <>
-struct single_tag_of<multi_polygon_tag>
-{
- typedef polygon_tag type;
-};
-
-#endif
+#include <boost/geometry/core/tags.hpp>
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_CORE_TAGS_HPP
diff --git a/3party/boost/boost/geometry/multi/core/topological_dimension.hpp b/3party/boost/boost/geometry/multi/core/topological_dimension.hpp
index 55118f1c73..b4f1e89ae8 100644
--- a/3party/boost/boost/geometry/multi/core/topological_dimension.hpp
+++ b/3party/boost/boost/geometry/multi/core/topological_dimension.hpp
@@ -16,37 +16,7 @@
#define BOOST_GEOMETRY_MULTI_TOPOLOGICAL_DIMENSION_HPP
-#include <boost/mpl/int.hpp>
-
-
#include <boost/geometry/core/topological_dimension.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <>
-struct top_dim<multi_point_tag> : boost::mpl::int_<0> {};
-
-
-template <>
-struct top_dim<multi_linestring_tag> : boost::mpl::int_<1> {};
-
-
-template <>
-struct top_dim<multi_polygon_tag> : boost::mpl::int_<2> {};
-
-
-} // namespace core_dispatch
-#endif
-
-
-}} // namespace boost::geometry
#endif
diff --git a/3party/boost/boost/geometry/multi/geometries/concepts/check.hpp b/3party/boost/boost/geometry/multi/geometries/concepts/check.hpp
index 61afc913c6..c741afd794 100644
--- a/3party/boost/boost/geometry/multi/geometries/concepts/check.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/concepts/check.hpp
@@ -16,68 +16,7 @@
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP
-
-#include <boost/type_traits/is_const.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-
#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/geometries/concepts/multi_point_concept.hpp>
-#include <boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp>
-#include <boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Geometry>
-struct check<Geometry, multi_point_tag, true>
- : detail::concept_check::check<concept::ConstMultiPoint<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_point_tag, false>
- : detail::concept_check::check<concept::MultiPoint<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_linestring_tag, true>
- : detail::concept_check::check<concept::ConstMultiLinestring<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_linestring_tag, false>
- : detail::concept_check::check<concept::MultiLinestring<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_polygon_tag, true>
- : detail::concept_check::check<concept::ConstMultiPolygon<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_polygon_tag, false>
- : detail::concept_check::check<concept::MultiPolygon<Geometry> >
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp b/3party/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp
index b0519f07ee..9a9438efcc 100644
--- a/3party/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp
@@ -16,71 +16,7 @@
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
-
-
-namespace boost { namespace geometry { namespace concept
-{
-
-
-/*!
-\brief multi-linestring concept
-\ingroup concepts
-\par Formal definition:
-The multi linestring concept is defined as following:
-- there must be a specialization of traits::tag defining multi_linestring_tag as
- type
-- it must behave like a Boost.Range
-- its range value must fulfil the Linestring concept
-
-*/
-template <typename Geometry>
-class MultiLinestring
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type linestring_type;
-
- BOOST_CONCEPT_ASSERT( (concept::Linestring<linestring_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(MultiLinestring)
- {
- }
-#endif
-};
-
-
-/*!
-\brief concept for multi-linestring (const version)
-\ingroup const_concepts
-*/
-template <typename Geometry>
-class ConstMultiLinestring
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type linestring_type;
-
- BOOST_CONCEPT_ASSERT( (concept::ConstLinestring<linestring_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(ConstMultiLinestring)
- {
- }
-#endif
-};
-
-}}} // namespace boost::geometry::concept
+#include <boost/geometry/geometries/concepts/multi_linestring_concept.hpp>
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp b/3party/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp
index f5942df070..14c1d25e57 100644
--- a/3party/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp
@@ -16,70 +16,7 @@
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-
-namespace boost { namespace geometry { namespace concept
-{
-
-
-/*!
-\brief MultiPoint concept
-\ingroup concepts
-\par Formal definition:
-The multi point concept is defined as following:
-- there must be a specialization of traits::tag defining multi_point_tag as type
-- it must behave like a Boost.Range
-- its range value must fulfil the Point concept
-
-*/
-template <typename Geometry>
-class MultiPoint
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type point_type;
-
- BOOST_CONCEPT_ASSERT( (concept::Point<point_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(MultiPoint)
- {
- }
-#endif
-};
-
-
-/*!
-\brief concept for multi-point (const version)
-\ingroup const_concepts
-*/
-template <typename Geometry>
-class ConstMultiPoint
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type point_type;
-
- BOOST_CONCEPT_ASSERT( (concept::ConstPoint<point_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(ConstMultiPoint)
- {
- }
-#endif
-};
-
-}}} // namespace boost::geometry::concept
+#include <boost/geometry/geometries/concepts/multi_point_concept.hpp>
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp b/3party/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp
index ca730d4f6b..5e46fb7539 100644
--- a/3party/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp
@@ -16,71 +16,7 @@
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/geometry/geometries/concepts/polygon_concept.hpp>
-
-
-namespace boost { namespace geometry { namespace concept
-{
-
-
-/*!
-\brief multi-polygon concept
-\ingroup concepts
-\par Formal definition:
-The multi polygon concept is defined as following:
-- there must be a specialization of traits::tag defining multi_polygon_tag
- as type
-- it must behave like a Boost.Range
-- its range value must fulfil the Polygon concept
-
-*/
-template <typename Geometry>
-class MultiPolygon
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type polygon_type;
-
- BOOST_CONCEPT_ASSERT( (concept::Polygon<polygon_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(MultiPolygon)
- {
- }
-#endif
-};
-
-
-/*!
-\brief concept for multi-polygon (const version)
-\ingroup const_concepts
-*/
-template <typename Geometry>
-class ConstMultiPolygon
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type polygon_type;
-
- BOOST_CONCEPT_ASSERT( (concept::ConstPolygon<polygon_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(ConstMultiPolygon)
- {
- }
-#endif
-};
-
-
-}}} // namespace boost::geometry::concept
+#include <boost/geometry/geometries/concepts/multi_polygon_concept.hpp>
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/multi_geometries.hpp b/3party/boost/boost/geometry/multi/geometries/multi_geometries.hpp
index 90cf85a0f6..53042091bd 100644
--- a/3party/boost/boost/geometry/multi/geometries/multi_geometries.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/multi_geometries.hpp
@@ -14,8 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP
-#include <boost/geometry/multi/geometries/multi_point.hpp>
-#include <boost/geometry/multi/geometries/multi_linestring.hpp>
-#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/geometries/multi_point.hpp>
+#include <boost/geometry/geometries/multi_linestring.hpp>
+#include <boost/geometry/geometries/multi_polygon.hpp>
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/multi_linestring.hpp b/3party/boost/boost/geometry/multi/geometries/multi_linestring.hpp
index 67d4da06b7..696d907dcc 100644
--- a/3party/boost/boost/geometry/multi/geometries/multi_linestring.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/multi_linestring.hpp
@@ -11,70 +11,11 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_LINESTRING_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_LINESTRING_HPP
+#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_LINESTRING_HPP
+#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_LINESTRING_HPP
-#include <memory>
-#include <vector>
-#include <boost/concept/requires.hpp>
+#include <boost/geometry/geometries/multi_linestring.hpp>
-#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-namespace model
-{
-
-/*!
-\brief multi_line, a collection of linestring
-\details Multi-linestring can be used to group lines belonging to each other,
- e.g. a highway (with interruptions)
-\ingroup geometries
-
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_multi_linestring MultiLineString Concept]
-}
-*/
-template
-<
- typename LineString,
- template<typename, typename> class Container = std::vector,
- template<typename> class Allocator = std::allocator
->
-class multi_linestring : public Container<LineString, Allocator<LineString> >
-{
- BOOST_CONCEPT_ASSERT( (concept::Linestring<LineString>) );
-};
-
-
-} // namespace model
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
- typename LineString,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct tag< model::multi_linestring<LineString, Container, Allocator> >
-{
- typedef multi_linestring_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_LINESTRING_HPP
+#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_LINESTRING_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/multi_point.hpp b/3party/boost/boost/geometry/multi/geometries/multi_point.hpp
index 002d8f8a4b..750ad7802a 100644
--- a/3party/boost/boost/geometry/multi/geometries/multi_point.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/multi_point.hpp
@@ -14,81 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP
-#include <memory>
-#include <vector>
-#include <boost/concept/requires.hpp>
+#include <boost/geometry/geometries/multi_point.hpp>
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-
-
-/*!
-\brief multi_point, a collection of points
-\ingroup geometries
-\tparam Point \tparam_point
-\tparam Container \tparam_container
-\tparam Allocator \tparam_allocator
-\details Multipoint can be used to group points belonging to each other,
- e.g. a constellation, or the result set of an intersection
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_multi_point MultiPoint Concept]
-}
-*/
-template
-<
- typename Point,
- template<typename, typename> class Container = std::vector,
- template<typename> class Allocator = std::allocator
->
-class multi_point : public Container<Point, Allocator<Point> >
-{
- BOOST_CONCEPT_ASSERT( (concept::Point<Point>) );
-
- typedef Container<Point, Allocator<Point> > base_type;
-
-public :
- /// \constructor_default{multi_point}
- inline multi_point()
- : base_type()
- {}
-
- /// \constructor_begin_end{multi_point}
- template <typename Iterator>
- inline multi_point(Iterator begin, Iterator end)
- : base_type(begin, end)
- {}
-};
-
-} // namespace model
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
- typename Point,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct tag< model::multi_point<Point, Container, Allocator> >
-{
- typedef multi_point_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/multi_polygon.hpp b/3party/boost/boost/geometry/multi/geometries/multi_polygon.hpp
index af8d042873..06fefc7856 100644
--- a/3party/boost/boost/geometry/multi/geometries/multi_polygon.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/multi_polygon.hpp
@@ -14,65 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP
-#include <memory>
-#include <vector>
-#include <boost/concept/requires.hpp>
+#include <boost/geometry/geometries/multi_polygon.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/polygon_concept.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-
-/*!
-\brief multi_polygon, a collection of polygons
-\details Multi-polygon can be used to group polygons belonging to each other,
- e.g. Hawaii
-\ingroup geometries
-
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_multi_polygon MultiPolygon Concept]
-}
-*/
-template
-<
- typename Polygon,
- template<typename, typename> class Container = std::vector,
- template<typename> class Allocator = std::allocator
->
-class multi_polygon : public Container<Polygon, Allocator<Polygon> >
-{
- BOOST_CONCEPT_ASSERT( (concept::Polygon<Polygon>) );
-};
-
-
-} // namespace model
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
- typename Polygon,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct tag< model::multi_polygon<Polygon, Container, Allocator> >
-{
- typedef multi_polygon_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp b/3party/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp
index 5ececdb8e8..2783a8455b 100644
--- a/3party/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp
@@ -15,45 +15,8 @@
#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-/*!
-\brief \brief_macro{multi_linestring}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING, multi_linestring} The
- multi_linestring may contain template parameters, which must be specified then.
-\param MultiLineString \param_macro_type{multi_linestring}
-
-\qbk{
-[heading Example]
-[register_multi_linestring]
-[register_multi_linestring_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING(MultiLineString) \
-namespace boost { namespace geometry { namespace traits { \
- template<> struct tag<MultiLineString> { typedef multi_linestring_tag type; }; \
-}}}
-
-
-/*!
-\brief \brief_macro{templated multi_linestring}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED, templated multi_linestring}
- \details_macro_templated{multi_linestring, linestring}
-\param MultiLineString \param_macro_type{multi_linestring (without template parameters)}
-
-\qbk{
-[heading Example]
-[register_multi_linestring_templated]
-[register_multi_linestring_templated_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED(MultiLineString) \
-namespace boost { namespace geometry { namespace traits { \
- template<typename LineString> struct tag< MultiLineString<LineString> > { typedef multi_linestring_tag type; }; \
-}}}
+
+#include <boost/geometry/geometries/register/multi_linestring.hpp>
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/register/multi_point.hpp b/3party/boost/boost/geometry/multi/geometries/register/multi_point.hpp
index 813f54733d..6063492c2b 100644
--- a/3party/boost/boost/geometry/multi/geometries/register/multi_point.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/register/multi_point.hpp
@@ -15,45 +15,8 @@
#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-/*!
-\brief \brief_macro{multi_point}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT, multi_point} The
- multi_point may contain template parameters, which must be specified then.
-\param MultiPoint \param_macro_type{multi_point}
-
-\qbk{
-[heading Example]
-[register_multi_point]
-[register_multi_point_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_POINT(MultiPoint) \
-namespace boost { namespace geometry { namespace traits { \
- template<> struct tag<MultiPoint> { typedef multi_point_tag type; }; \
-}}}
-
-
-/*!
-\brief \brief_macro{templated multi_point}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED, templated multi_point}
- \details_macro_templated{multi_point, point}
-\param MultiPoint \param_macro_type{multi_point (without template parameters)}
-
-\qbk{
-[heading Example]
-[register_multi_point_templated]
-[register_multi_point_templated_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED(MultiPoint) \
-namespace boost { namespace geometry { namespace traits { \
- template<typename Point> struct tag< MultiPoint<Point> > { typedef multi_point_tag type; }; \
-}}}
+
+#include <boost/geometry/geometries/register/multi_point.hpp>
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP
diff --git a/3party/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp b/3party/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp
index 801b98cf24..6a3e47e3da 100644
--- a/3party/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp
+++ b/3party/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp
@@ -15,45 +15,8 @@
#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
#define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-
-/*!
-\brief \brief_macro{multi_polygon}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON, multi_polygon} The
- multi_polygon may contain template parameters, which must be specified then.
-\param MultiPolygon \param_macro_type{multi_polygon}
-
-\qbk{
-[heading Example]
-[register_multi_polygon]
-[register_multi_polygon_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON(MultiPolygon) \
-namespace boost { namespace geometry { namespace traits { \
- template<> struct tag<MultiPolygon> { typedef multi_polygon_tag type; }; \
-}}}
-
-
-/*!
-\brief \brief_macro{templated multi_polygon}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED, templated multi_polygon}
- \details_macro_templated{multi_polygon, polygon}
-\param MultiPolygon \param_macro_type{multi_polygon (without template parameters)}
-
-\qbk{
-[heading Example]
-[register_multi_polygon_templated]
-[register_multi_polygon_templated_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED(MultiPolygon) \
-namespace boost { namespace geometry { namespace traits { \
- template<typename Polygon> struct tag< MultiPolygon<Polygon> > { typedef multi_polygon_tag type; }; \
-}}}
+
+#include <boost/geometry/geometries/register/multi_polygon.hpp>
#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
diff --git a/3party/boost/boost/geometry/multi/io/dsv/write.hpp b/3party/boost/boost/geometry/multi/io/dsv/write.hpp
index 1a054659a6..092869f56c 100644
--- a/3party/boost/boost/geometry/multi/io/dsv/write.hpp
+++ b/3party/boost/boost/geometry/multi/io/dsv/write.hpp
@@ -14,73 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP
#define BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP
-#include <boost/range.hpp>
-
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
#include <boost/geometry/io/dsv/write.hpp>
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace dsv
-{
-
-template <typename MultiGeometry>
-struct dsv_multi
-{
- typedef dispatch::dsv
- <
- typename single_tag_of
- <
- typename tag<MultiGeometry>::type
- >::type,
- typename boost::range_value<MultiGeometry>::type
- > dispatch_one;
-
- typedef typename boost::range_iterator
- <
- MultiGeometry const
- >::type iterator;
-
-
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- MultiGeometry const& multi,
- dsv_settings const& settings)
- {
- os << settings.list_open;
-
- bool first = true;
- for(iterator it = boost::begin(multi);
- it != boost::end(multi);
- ++it, first = false)
- {
- os << (first ? "" : settings.list_separator);
- dispatch_one::apply(os, *it, settings);
- }
- os << settings.list_close;
- }
-};
-
-}} // namespace detail::dsv
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Geometry>
-struct dsv<multi_tag, Geometry>
- : detail::dsv::dsv_multi<Geometry>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP
diff --git a/3party/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp b/3party/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp
index 37b07979ba..34e2b241d0 100644
--- a/3party/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp
+++ b/3party/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp
@@ -14,38 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP
#define BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP
-#include <boost/geometry/multi/core/tags.hpp>
-namespace boost { namespace geometry
-{
+#include <boost/geometry/io/wkt/detail/prefix.hpp>
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace wkt
-{
-
-struct prefix_null
-{
- static inline const char* apply() { return ""; }
-};
-
-struct prefix_multipoint
-{
- static inline const char* apply() { return "MULTIPOINT"; }
-};
-
-struct prefix_multilinestring
-{
- static inline const char* apply() { return "MULTILINESTRING"; }
-};
-
-struct prefix_multipolygon
-{
- static inline const char* apply() { return "MULTIPOLYGON"; }
-};
-
-}} // namespace wkt::impl
-#endif
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP
diff --git a/3party/boost/boost/geometry/multi/io/wkt/read.hpp b/3party/boost/boost/geometry/multi/io/wkt/read.hpp
index 2bfa830cf4..37e5f9e72e 100644
--- a/3party/boost/boost/geometry/multi/io/wkt/read.hpp
+++ b/3party/boost/boost/geometry/multi/io/wkt/read.hpp
@@ -14,155 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP
#define BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP
-#include <string>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/core/point_type.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/io/wkt/detail/prefix.hpp>
#include <boost/geometry/io/wkt/read.hpp>
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace wkt
-{
-
-template <typename MultiGeometry, template<typename> class Parser, typename PrefixPolicy>
-struct multi_parser
-{
- static inline void apply(std::string const& wkt, MultiGeometry& geometry)
- {
- traits::clear<MultiGeometry>::apply(geometry);
-
- tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
- tokenizer::iterator it;
- if (initialize<MultiGeometry>(tokens, PrefixPolicy::apply(), wkt, it))
- {
- handle_open_parenthesis(it, tokens.end(), wkt);
-
- // Parse sub-geometries
- while(it != tokens.end() && *it != ")")
- {
- traits::resize<MultiGeometry>::apply(geometry, boost::size(geometry) + 1);
- Parser
- <
- typename boost::range_value<MultiGeometry>::type
- >::apply(it, tokens.end(), wkt, geometry.back());
- if (it != tokens.end() && *it == ",")
- {
- // Skip "," after multi-element is parsed
- ++it;
- }
- }
-
- handle_close_parenthesis(it, tokens.end(), wkt);
- }
-
- check_end(it, tokens.end(), wkt);
- }
-};
-
-template <typename P>
-struct noparenthesis_point_parser
-{
- static inline void apply(tokenizer::iterator& it, tokenizer::iterator end,
- std::string const& wkt, P& point)
- {
- parsing_assigner<P, 0, dimension<P>::value>::apply(it, end, point, wkt);
- }
-};
-
-template <typename MultiGeometry, typename PrefixPolicy>
-struct multi_point_parser
-{
- static inline void apply(std::string const& wkt, MultiGeometry& geometry)
- {
- traits::clear<MultiGeometry>::apply(geometry);
-
- tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
- tokenizer::iterator it;
-
- if (initialize<MultiGeometry>(tokens, PrefixPolicy::apply(), wkt, it))
- {
- handle_open_parenthesis(it, tokens.end(), wkt);
-
- // If first point definition starts with "(" then parse points as (x y)
- // otherwise as "x y"
- bool using_brackets = (it != tokens.end() && *it == "(");
-
- while(it != tokens.end() && *it != ")")
- {
- traits::resize<MultiGeometry>::apply(geometry, boost::size(geometry) + 1);
-
- if (using_brackets)
- {
- point_parser
- <
- typename boost::range_value<MultiGeometry>::type
- >::apply(it, tokens.end(), wkt, geometry.back());
- }
- else
- {
- noparenthesis_point_parser
- <
- typename boost::range_value<MultiGeometry>::type
- >::apply(it, tokens.end(), wkt, geometry.back());
- }
-
- if (it != tokens.end() && *it == ",")
- {
- // Skip "," after point is parsed
- ++it;
- }
- }
-
- handle_close_parenthesis(it, tokens.end(), wkt);
- }
-
- check_end(it, tokens.end(), wkt);
- }
-};
-
-}} // namespace detail::wkt
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename MultiGeometry>
-struct read_wkt<multi_point_tag, MultiGeometry>
- : detail::wkt::multi_point_parser
- <
- MultiGeometry,
- detail::wkt::prefix_multipoint
- >
-{};
-
-template <typename MultiGeometry>
-struct read_wkt<multi_linestring_tag, MultiGeometry>
- : detail::wkt::multi_parser
- <
- MultiGeometry,
- detail::wkt::linestring_parser,
- detail::wkt::prefix_multilinestring
- >
-{};
-
-template <typename MultiGeometry>
-struct read_wkt<multi_polygon_tag, MultiGeometry>
- : detail::wkt::multi_parser
- <
- MultiGeometry,
- detail::wkt::polygon_parser,
- detail::wkt::prefix_multipolygon
- >
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP
diff --git a/3party/boost/boost/geometry/multi/io/wkt/wkt.hpp b/3party/boost/boost/geometry/multi/io/wkt/wkt.hpp
index 55f1713d4d..a6159e1409 100644
--- a/3party/boost/boost/geometry/multi/io/wkt/wkt.hpp
+++ b/3party/boost/boost/geometry/multi/io/wkt/wkt.hpp
@@ -14,7 +14,7 @@
#ifndef BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP
#define BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP
-#include <boost/geometry/multi/io/wkt/read.hpp>
-#include <boost/geometry/multi/io/wkt/write.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
#endif // BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP
diff --git a/3party/boost/boost/geometry/multi/io/wkt/write.hpp b/3party/boost/boost/geometry/multi/io/wkt/write.hpp
index 47087e944a..2c26d3d2e4 100644
--- a/3party/boost/boost/geometry/multi/io/wkt/write.hpp
+++ b/3party/boost/boost/geometry/multi/io/wkt/write.hpp
@@ -14,96 +14,8 @@
#ifndef BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP
#define BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/io/wkt/detail/prefix.hpp>
-#include <boost/geometry/io/wkt/write.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace wkt
-{
-
-template <typename Multi, typename StreamPolicy, typename PrefixPolicy>
-struct wkt_multi
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Multi const& geometry)
- {
- os << PrefixPolicy::apply();
- // TODO: check EMPTY here
- os << "(";
-
- for (typename boost::range_iterator<Multi const>::type
- it = boost::begin(geometry);
- it != boost::end(geometry);
- ++it)
- {
- if (it != boost::begin(geometry))
- {
- os << ",";
- }
- StreamPolicy::apply(os, *it);
- }
-
- os << ")";
- }
-};
-}} // namespace wkt::impl
-#endif
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Multi>
-struct wkt<Multi, multi_point_tag>
- : detail::wkt::wkt_multi
- <
- Multi,
- detail::wkt::wkt_point
- <
- typename boost::range_value<Multi>::type,
- detail::wkt::prefix_null
- >,
- detail::wkt::prefix_multipoint
- >
-{};
-
-template <typename Multi>
-struct wkt<Multi, multi_linestring_tag>
- : detail::wkt::wkt_multi
- <
- Multi,
- detail::wkt::wkt_sequence
- <
- typename boost::range_value<Multi>::type
- >,
- detail::wkt::prefix_multilinestring
- >
-{};
-
-template <typename Multi>
-struct wkt<Multi, multi_polygon_tag>
- : detail::wkt::wkt_multi
- <
- Multi,
- detail::wkt::wkt_poly
- <
- typename boost::range_value<Multi>::type,
- detail::wkt::prefix_null
- >,
- detail::wkt::prefix_multipolygon
- >
-{};
-
-} // namespace dispatch
-#endif
+#include <boost/geometry/io/wkt/write.hpp>
-}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP
diff --git a/3party/boost/boost/geometry/multi/multi.hpp b/3party/boost/boost/geometry/multi/multi.hpp
index df10392cb8..24e39c3c7c 100644
--- a/3party/boost/boost/geometry/multi/multi.hpp
+++ b/3party/boost/boost/geometry/multi/multi.hpp
@@ -4,6 +4,9 @@
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// This file was modified by Oracle on 2013.
+// Modifications copyright (c) 2013, Oracle and/or its affiliates.
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -15,64 +18,65 @@
#define BOOST_GEOMETRY_MULTI_HPP
-#include <boost/geometry/multi/core/closure.hpp>
-#include <boost/geometry/multi/core/geometry_id.hpp>
-#include <boost/geometry/multi/core/interior_rings.hpp>
-#include <boost/geometry/multi/core/is_areal.hpp>
-#include <boost/geometry/multi/core/point_order.hpp>
-#include <boost/geometry/multi/core/point_type.hpp>
-#include <boost/geometry/multi/core/ring_type.hpp>
-#include <boost/geometry/multi/core/tags.hpp>
-#include <boost/geometry/multi/core/topological_dimension.hpp>
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/geometry_id.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+#include <boost/geometry/core/is_areal.hpp>
+#include <boost/geometry/core/point_order.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/core/topological_dimension.hpp>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/centroid.hpp>
+#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/disjoint.hpp>
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/algorithms/envelope.hpp>
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/for_each.hpp>
+#include <boost/geometry/algorithms/length.hpp>
+#include <boost/geometry/algorithms/num_geometries.hpp>
+#include <boost/geometry/algorithms/perimeter.hpp>
+#include <boost/geometry/algorithms/remove_spikes.hpp>
+#include <boost/geometry/algorithms/reverse.hpp>
+#include <boost/geometry/algorithms/simplify.hpp>
+#include <boost/geometry/algorithms/transform.hpp>
+#include <boost/geometry/algorithms/unique.hpp>
+#include <boost/geometry/algorithms/within.hpp>
#include <boost/geometry/multi/algorithms/append.hpp>
-#include <boost/geometry/multi/algorithms/area.hpp>
-#include <boost/geometry/multi/algorithms/centroid.hpp>
-#include <boost/geometry/multi/algorithms/clear.hpp>
-#include <boost/geometry/multi/algorithms/convert.hpp>
-#include <boost/geometry/multi/algorithms/correct.hpp>
-#include <boost/geometry/multi/algorithms/covered_by.hpp>
-#include <boost/geometry/multi/algorithms/disjoint.hpp>
-#include <boost/geometry/multi/algorithms/distance.hpp>
-#include <boost/geometry/multi/algorithms/envelope.hpp>
-#include <boost/geometry/multi/algorithms/equals.hpp>
-#include <boost/geometry/multi/algorithms/for_each.hpp>
#include <boost/geometry/multi/algorithms/intersection.hpp>
-#include <boost/geometry/multi/algorithms/length.hpp>
-#include <boost/geometry/multi/algorithms/num_geometries.hpp>
#include <boost/geometry/multi/algorithms/num_interior_rings.hpp>
#include <boost/geometry/multi/algorithms/num_points.hpp>
-#include <boost/geometry/multi/algorithms/perimeter.hpp>
-#include <boost/geometry/multi/algorithms/reverse.hpp>
-#include <boost/geometry/multi/algorithms/simplify.hpp>
-#include <boost/geometry/multi/algorithms/transform.hpp>
-#include <boost/geometry/multi/algorithms/unique.hpp>
-#include <boost/geometry/multi/algorithms/within.hpp>
-
-#include <boost/geometry/multi/algorithms/detail/for_each_range.hpp>
-#include <boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp>
-#include <boost/geometry/multi/algorithms/detail/multi_sum.hpp>
-
-#include <boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp>
-#include <boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp>
-
-#include <boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp>
-#include <boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp>
-
-#include <boost/geometry/multi/geometries/concepts/check.hpp>
-#include <boost/geometry/multi/geometries/concepts/multi_point_concept.hpp>
-#include <boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp>
-#include <boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp>
-
-#include <boost/geometry/multi/views/detail/range_type.hpp>
-#include <boost/geometry/multi/strategies/cartesian/centroid_average.hpp>
-
-#include <boost/geometry/multi/io/dsv/write.hpp>
-#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/algorithms/detail/point_on_border.hpp>
+
+#include <boost/geometry/algorithms/detail/for_each_range.hpp>
+#include <boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp>
+#include <boost/geometry/algorithms/detail/multi_sum.hpp>
+
+#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
+#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
+#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
+#include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
+#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
+
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+#include <boost/geometry/views/detail/range_type.hpp>
+#include <boost/geometry/strategies/cartesian/centroid_average.hpp>
+
+#include <boost/geometry/io/dsv/write.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
#endif // BOOST_GEOMETRY_MULTI_HPP
diff --git a/3party/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp b/3party/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp
index f28daf20bb..ce614e2e76 100644
--- a/3party/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp
+++ b/3party/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp
@@ -15,102 +15,7 @@
#define BOOST_GEOMETRY_MULTI_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/type_traits.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/strategies/centroid.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace centroid
-{
-
-
-/*!
-\brief Centroid calculation taking average of points
-\ingroup strategies
-*/
-template
-<
- typename PointCentroid,
- typename Point = PointCentroid
->
-class average
-{
-private :
-
- /*! subclass to keep state */
- class sum
- {
- friend class average;
- int count;
- PointCentroid centroid;
-
- public :
- inline sum()
- : count(0)
- {
- assign_zero(centroid);
- }
- };
-
-public :
- typedef sum state_type;
- typedef PointCentroid centroid_point_type;
- typedef Point point_type;
-
- static inline void apply(Point const& p, sum& state)
- {
- add_point(state.centroid, p);
- state.count++;
- }
-
- static inline void result(sum const& state, PointCentroid& centroid)
- {
- centroid = state.centroid;
- divide_value(centroid, state.count);
- }
-
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-namespace services
-{
-
-template <typename Point, std::size_t DimensionCount, typename Geometry>
-struct default_strategy
-<
- cartesian_tag,
- pointlike_tag,
- DimensionCount,
- Point,
- Geometry
->
-{
- typedef average
- <
- Point,
- typename point_type<Geometry>::type
- > type;
-};
-
-} // namespace services
-
-#endif
-
-
-}} // namespace strategy::centroid
-
-
-}} // namespace boost::geometry
+#include <boost/geometry/strategies/cartesian/centroid_average.hpp>
#endif // BOOST_GEOMETRY_MULTI_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
diff --git a/3party/boost/boost/geometry/multi/views/detail/range_type.hpp b/3party/boost/boost/geometry/multi/views/detail/range_type.hpp
index 172feb251f..f8cb0e6e53 100644
--- a/3party/boost/boost/geometry/multi/views/detail/range_type.hpp
+++ b/3party/boost/boost/geometry/multi/views/detail/range_type.hpp
@@ -15,48 +15,7 @@
#define BOOST_GEOMETRY_MULTI_VIEWS_DETAIL_RANGE_TYPE_HPP
-#include <boost/range.hpp>
-
#include <boost/geometry/views/detail/range_type.hpp>
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// multi-point acts itself as a range
-template <typename Geometry>
-struct range_type<multi_point_tag, Geometry>
-{
- typedef Geometry type;
-};
-
-
-template <typename Geometry>
-struct range_type<multi_linestring_tag, Geometry>
-{
- typedef typename boost::range_value<Geometry>::type type;
-};
-
-
-template <typename Geometry>
-struct range_type<multi_polygon_tag, Geometry>
-{
- // Call its single-version
- typedef typename geometry::detail::range_type
- <
- typename boost::range_value<Geometry>::type
- >::type type;
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
#endif // BOOST_GEOMETRY_MULTI_VIEWS_DETAIL_RANGE_TYPE_HPP
diff --git a/3party/boost/boost/geometry/policies/disjoint_interrupt_policy.hpp b/3party/boost/boost/geometry/policies/disjoint_interrupt_policy.hpp
new file mode 100644
index 0000000000..2a6e54b079
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/disjoint_interrupt_policy.hpp
@@ -0,0 +1,67 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_POLICIES_DISJOINT_INTERRUPT_POLICY_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_POLICIES_DISJOINT_INTERRUPT_POLICY_HPP
+
+#include <boost/range.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace disjoint
+{
+
+
+struct disjoint_interrupt_policy
+{
+ static bool const enabled = true;
+ bool has_intersections;
+
+ inline disjoint_interrupt_policy()
+ : has_intersections(false)
+ {}
+
+ template <typename Range>
+ inline bool apply(Range const& range)
+ {
+ // If there is any IP in the range, it is NOT disjoint
+ if (boost::size(range) > 0)
+ {
+ has_intersections = true;
+ return true;
+ }
+ return false;
+ }
+};
+
+
+
+}} // namespace detail::disjoint
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_POLICIES_DISJOINT_INTERRUPT_POLICY_HPP
diff --git a/3party/boost/boost/geometry/policies/predicate_based_interrupt_policy.hpp b/3party/boost/boost/geometry/policies/predicate_based_interrupt_policy.hpp
new file mode 100644
index 0000000000..0021b12dc6
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/predicate_based_interrupt_policy.hpp
@@ -0,0 +1,101 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_ALGORITHMS_POLICIES_PREDICATE_BASED_INTERRUPT_POLICY_HPP
+#define BOOST_GEOMETRY_ALGORITHMS_POLICIES_PREDICATE_BASED_INTERRUPT_POLICY_HPP
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace overlay
+{
+
+
+template
+<
+ typename IsAcceptableTurnPredicate,
+ bool AllowEmptyTurnRange = true // by default, allow an empty turn range
+>
+struct stateless_predicate_based_interrupt_policy
+{
+ static bool const enabled = true;
+ bool has_intersections; // set to true if there is at least one
+ // unacceptable turn
+
+ inline stateless_predicate_based_interrupt_policy()
+ : has_intersections(false)
+ {}
+
+ template <typename Range>
+ inline bool apply(Range const& range)
+ {
+ // if there is at least one unacceptable turn in the range, return false
+ has_intersections = !detail::check_iterator_range
+ <
+ IsAcceptableTurnPredicate,
+ AllowEmptyTurnRange
+ >::apply(boost::begin(range), boost::end(range));
+
+ return has_intersections;
+ }
+};
+
+
+
+
+template
+<
+ typename IsAcceptableTurnPredicate,
+ bool AllowEmptyTurnRange = true // by default, allow an empty turn range
+>
+struct predicate_based_interrupt_policy
+{
+ static bool const enabled = true;
+ bool has_intersections; // set to true if there is at least one
+ // unacceptable turn
+ IsAcceptableTurnPredicate const& m_predicate;
+
+ inline
+ predicate_based_interrupt_policy(IsAcceptableTurnPredicate const& predicate)
+ : has_intersections(false)
+ , m_predicate(predicate)
+ {}
+
+ template <typename Range>
+ inline bool apply(Range const& range)
+ {
+ // if there is at least one unacceptable turn in the range, return false
+ has_intersections = !detail::check_iterator_range
+ <
+ IsAcceptableTurnPredicate,
+ AllowEmptyTurnRange
+ >::apply(boost::begin(range), boost::end(range), m_predicate);
+
+ return has_intersections;
+ }
+};
+
+
+
+
+}} // namespace detail::overlay
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_ALGORITHMS_POLICIES_PREDICATE_BASED_INTERRUPT_POLICY_HPP
diff --git a/3party/boost/boost/geometry/policies/relate/de9im.hpp b/3party/boost/boost/geometry/policies/relate/de9im.hpp
index 766d80b220..e2d6b5111c 100644
--- a/3party/boost/boost/geometry/policies/relate/de9im.hpp
+++ b/3party/boost/boost/geometry/policies/relate/de9im.hpp
@@ -158,15 +158,6 @@ struct segments_de9im
false, false, false, true);
}
- static inline return_type collinear_disjoint()
- {
- return de9im_segment(0,0,
- -1, -1, 1,
- -1, -1, 0,
- 1, 0, 2,
- true);
- }
-
};
diff --git a/3party/boost/boost/geometry/policies/relate/direction.hpp b/3party/boost/boost/geometry/policies/relate/direction.hpp
index 62859f33be..02fed94b10 100644
--- a/3party/boost/boost/geometry/policies/relate/direction.hpp
+++ b/3party/boost/boost/geometry/policies/relate/direction.hpp
@@ -88,7 +88,8 @@ struct direction_type
// New information
side_info sides;
- int arrival[2]; // 1=arrival, -1departure, 0=neutral; == how_a//how_b
+ // THIS IS EQUAL TO arrival_a, arrival_b - they probably can go now we have robust fractions
+ int arrival[2]; // 1=arrival, -1=departure, 0=neutral; == how_a//how_b
// About arrival[0] (== arrival of a2 w.r.t. b) for COLLINEAR cases
@@ -110,28 +111,19 @@ struct direction_type
};
-
-template <typename S1, typename S2, typename CalculationType = void>
struct segments_direction
{
typedef direction_type return_type;
- typedef S1 segment_type1;
- typedef S2 segment_type2;
- typedef typename select_calculation_type
- <
- S1, S2, CalculationType
- >::type coordinate_type;
-
- // Get the same type, but at least a double
- typedef typename select_most_precise<coordinate_type, double>::type rtype;
-
-
- template <typename R>
- static inline return_type segments_intersect(side_info const& sides,
- R const&,
- coordinate_type const& dx1, coordinate_type const& dy1,
- coordinate_type const& dx2, coordinate_type const& dy2,
- S1 const& s1, S2 const& s2)
+
+ template
+ <
+ typename Segment1,
+ typename Segment2,
+ typename SegmentIntersectionInfo
+ >
+ static inline return_type segments_crosses(side_info const& sides,
+ SegmentIntersectionInfo const& ,
+ Segment1 const& , Segment2 const& )
{
bool const ra0 = sides.get<0,0>() == 0;
bool const ra1 = sides.get<0,1>() == 0;
@@ -140,95 +132,153 @@ struct segments_direction
return
// opposite and same starting point (FROM)
- ra0 && rb0 ? calculate_side<1>(sides, dx1, dy1, s1, s2, 'f', -1, -1)
+ ra0 && rb0 ? calculate_side<1>(sides, 'f', -1, -1)
// opposite and point to each other (TO)
- : ra1 && rb1 ? calculate_side<0>(sides, dx1, dy1, s1, s2, 't', 1, 1)
+ : ra1 && rb1 ? calculate_side<0>(sides, 't', 1, 1)
// not opposite, forming an angle, first a then b,
// directed either both left, or both right
// Check side of B2 from A. This is not calculated before
- : ra1 && rb0 ? angle<1>(sides, dx1, dy1, s1, s2, 'a', 1, -1)
+ : ra1 && rb0 ? angle<1>(sides, 'a', 1, -1)
// not opposite, forming a angle, first b then a,
// directed either both left, or both right
- : ra0 && rb1 ? angle<0>(sides, dx1, dy1, s1, s2, 'a', -1, 1)
+ : ra0 && rb1 ? angle<0>(sides, 'a', -1, 1)
// b starts from interior of a
- : rb0 ? starts_from_middle(sides, dx1, dy1, s1, s2, 'B', 0, -1)
+ : rb0 ? starts_from_middle(sides, 'B', 0, -1)
// a starts from interior of b (#39)
- : ra0 ? starts_from_middle(sides, dx1, dy1, s1, s2, 'A', -1, 0)
+ : ra0 ? starts_from_middle(sides, 'A', -1, 0)
// b ends at interior of a, calculate direction of A from IP
- : rb1 ? b_ends_at_middle(sides, dx2, dy2, s1, s2)
+ : rb1 ? b_ends_at_middle(sides)
// a ends at interior of b
- : ra1 ? a_ends_at_middle(sides, dx1, dy1, s1, s2)
+ : ra1 ? a_ends_at_middle(sides)
// normal intersection
- : calculate_side<1>(sides, dx1, dy1, s1, s2, 'i', -1, -1)
+ : calculate_side<1>(sides, 'i', -1, -1)
;
}
- static inline return_type collinear_touch(
- coordinate_type const& ,
- coordinate_type const& , int arrival_a, int arrival_b)
+ template <typename Ratio>
+ static inline int arrival_value(Ratio const& r_from, Ratio const& r_to)
{
- // Though this is 'collinear', we handle it as To/From/Angle because it is the same.
- // It only does NOT have a direction.
- side_info sides;
- //int const arrive = how == 'T' ? 1 : -1;
- bool opposite = arrival_a == arrival_b;
- return
- ! opposite
- ? return_type(sides, 'a', arrival_a, arrival_b)
- : return_type(sides, arrival_a == 0 ? 't' : 'f', arrival_a, arrival_b, 0, 0, true);
+ // a1--------->a2
+ // b1----->b2
+ // a departs: -1
+
+ // a1--------->a2
+ // b1----->b2
+ // a arrives: 1
+
+ // a1--------->a2
+ // b1----->b2
+ // both arrive there -> r-to = 1/1, or 0/1 (on_segment)
+
+ // First check the TO (for arrival), then FROM (for departure)
+ return r_to.in_segment() ? 1
+ : r_to.on_segment() ? 0
+ : r_from.on_segment() ? -1
+ : -1
+ ;
}
- template <typename S>
- static inline return_type collinear_interior_boundary_intersect(S const& , bool,
- int arrival_a, int arrival_b, bool opposite)
+ template <typename Ratio>
+ static inline void analyze(Ratio const& r,
+ int& in_segment_count,
+ int& on_end_count,
+ int& outside_segment_count)
{
- return_type r('c', opposite);
- r.arrival[0] = arrival_a;
- r.arrival[1] = arrival_b;
- return r;
+ if (r.on_end())
+ {
+ on_end_count++;
+ }
+ else if (r.in_segment())
+ {
+ in_segment_count++;
+ }
+ else
+ {
+ outside_segment_count++;
+ }
}
- static inline return_type collinear_a_in_b(S1 const& , bool opposite)
- {
- return_type r('c', opposite);
- r.arrival[0] = 1;
- r.arrival[1] = -1;
- return r;
- }
- static inline return_type collinear_b_in_a(S2 const& , bool opposite)
+ template <typename Segment1, typename Segment2, typename Ratio>
+ static inline return_type segments_collinear(
+ Segment1 const& , Segment2 const&,
+ Ratio const& ra_from_wrt_b, Ratio const& ra_to_wrt_b,
+ Ratio const& rb_from_wrt_a, Ratio const& rb_to_wrt_a)
{
- return_type r('c', opposite);
- r.arrival[0] = -1;
- r.arrival[1] = 1;
- return r;
- }
+ // If segments are opposite, the ratio of the FROM w.r.t. the other
+ // is larger than the ratio of the TO w.r.t. the other
+ bool const opposite = ra_to_wrt_b < ra_from_wrt_b;
- static inline return_type collinear_overlaps(
- coordinate_type const& , coordinate_type const& ,
- coordinate_type const& , coordinate_type const& ,
- int arrival_a, int arrival_b, bool opposite)
- {
return_type r('c', opposite);
- r.arrival[0] = arrival_a;
- r.arrival[1] = arrival_b;
+
+ // IMPORTANT: the order of conditions is different as in intersection_points.hpp
+ // We assign A in 0 and B in 1
+ r.arrival[0] = arrival_value(ra_from_wrt_b, ra_to_wrt_b);
+ r.arrival[1] = arrival_value(rb_from_wrt_a, rb_to_wrt_a);
+
+ // Analyse them
+ int a_in_segment_count = 0;
+ int a_on_end_count = 0;
+ int a_outside_segment_count = 0;
+ int b_in_segment_count = 0;
+ int b_on_end_count = 0;
+ int b_outside_segment_count = 0;
+ analyze(ra_from_wrt_b,
+ a_in_segment_count, a_on_end_count, a_outside_segment_count);
+ analyze(ra_to_wrt_b,
+ a_in_segment_count, a_on_end_count, a_outside_segment_count);
+ analyze(rb_from_wrt_a,
+ b_in_segment_count, b_on_end_count, b_outside_segment_count);
+ analyze(rb_to_wrt_a,
+ b_in_segment_count, b_on_end_count, b_outside_segment_count);
+
+ if (a_on_end_count == 1
+ && b_on_end_count == 1
+ && a_outside_segment_count == 1
+ && b_outside_segment_count == 1)
+ {
+ // This is a collinear touch
+ // --------> A (or B)
+ // <---------- B (or A)
+ // We adapt the "how"
+ // TODO: how was to be refactored anyway,
+ if (! opposite)
+ {
+ r.how = 'a';
+ }
+ else
+ {
+ r.how = r.arrival[0] == 0 ? 't' : 'f';
+ }
+ }
+ else if (a_on_end_count == 2
+ && b_on_end_count == 2)
+ {
+ r.how = 'e';
+ }
+
return r;
}
- static inline return_type segment_equal(S1 const& , bool opposite)
+ template <typename Segment>
+ static inline return_type degenerate(Segment const& , bool)
{
- return return_type('e', opposite);
+ return return_type('0', false);
}
- static inline return_type degenerate(S1 const& , bool)
+ template <typename Segment, typename Ratio>
+ static inline return_type one_degenerate(Segment const& ,
+ Ratio const& ,
+ bool)
{
+ // To be decided
return return_type('0', false);
}
@@ -237,11 +287,6 @@ struct segments_direction
return return_type('d', false);
}
- static inline return_type collinear_disjoint()
- {
- return return_type('d', false);
- }
-
static inline return_type error(std::string const&)
{
// Return "E" to denote error
@@ -252,62 +297,29 @@ struct segments_direction
private :
- static inline bool is_left
- (
- coordinate_type const& ux,
- coordinate_type const& uy,
- coordinate_type const& vx,
- coordinate_type const& vy
- )
- {
- // This is a "side calculation" as in the strategies, but here terms are precalculated
- // We might merge this with side, offering a pre-calculated term (in fact already done using cross-product)
- // Waiting for implementing spherical...
-
- rtype const zero = rtype();
- return geometry::detail::determinant<rtype>(ux, uy, vx, vy) > zero;
- }
-
template <std::size_t I>
static inline return_type calculate_side(side_info const& sides,
- coordinate_type const& dx1, coordinate_type const& dy1,
- S1 const& s1, S2 const& s2,
char how, int how_a, int how_b)
{
- coordinate_type dpx = get<I, 0>(s2) - get<0, 0>(s1);
- coordinate_type dpy = get<I, 1>(s2) - get<0, 1>(s1);
-
- return is_left(dx1, dy1, dpx, dpy)
- ? return_type(sides, how, how_a, how_b, -1, 1)
- : return_type(sides, how, how_a, how_b, 1, -1);
+ int const dir = sides.get<1, I>() == 1 ? 1 : -1;
+ return return_type(sides, how, how_a, how_b, -dir, dir);
}
template <std::size_t I>
static inline return_type angle(side_info const& sides,
- coordinate_type const& dx1, coordinate_type const& dy1,
- S1 const& s1, S2 const& s2,
char how, int how_a, int how_b)
{
- coordinate_type dpx = get<I, 0>(s2) - get<0, 0>(s1);
- coordinate_type dpy = get<I, 1>(s2) - get<0, 1>(s1);
-
- return is_left(dx1, dy1, dpx, dpy)
- ? return_type(sides, how, how_a, how_b, 1, 1)
- : return_type(sides, how, how_a, how_b, -1, -1);
+ int const dir = sides.get<1, I>() == 1 ? 1 : -1;
+ return return_type(sides, how, how_a, how_b, dir, dir);
}
static inline return_type starts_from_middle(side_info const& sides,
- coordinate_type const& dx1, coordinate_type const& dy1,
- S1 const& s1, S2 const& s2,
char which,
int how_a, int how_b)
{
// Calculate ARROW of b segment w.r.t. s1
- coordinate_type dpx = get<1, 0>(s2) - get<0, 0>(s1);
- coordinate_type dpy = get<1, 1>(s2) - get<0, 1>(s1);
-
- int dir = is_left(dx1, dy1, dpx, dpy) ? 1 : -1;
+ int dir = sides.get<1, 1>() == 1 ? 1 : -1;
// From other perspective, then reverse
bool const is_a = which == 'A';
@@ -326,31 +338,19 @@ private :
// To be harmonized
- static inline return_type a_ends_at_middle(side_info const& sides,
- coordinate_type const& dx, coordinate_type const& dy,
- S1 const& s1, S2 const& s2)
+ static inline return_type a_ends_at_middle(side_info const& sides)
{
- coordinate_type dpx = get<1, 0>(s2) - get<0, 0>(s1);
- coordinate_type dpy = get<1, 1>(s2) - get<0, 1>(s1);
-
// Ending at the middle, one ARRIVES, the other one is NEUTRAL
- // (because it both "arrives" and "departs" there
- return is_left(dx, dy, dpx, dpy)
- ? return_type(sides, 'm', 1, 0, 1, 1)
- : return_type(sides, 'm', 1, 0, -1, -1);
+ // (because it both "arrives" and "departs" there)
+ int const dir = sides.get<1, 1>() == 1 ? 1 : -1;
+ return return_type(sides, 'm', 1, 0, dir, dir);
}
- static inline return_type b_ends_at_middle(side_info const& sides,
- coordinate_type const& dx, coordinate_type const& dy,
- S1 const& s1, S2 const& s2)
+ static inline return_type b_ends_at_middle(side_info const& sides)
{
- coordinate_type dpx = get<1, 0>(s1) - get<0, 0>(s2);
- coordinate_type dpy = get<1, 1>(s1) - get<0, 1>(s2);
-
- return is_left(dx, dy, dpx, dpy)
- ? return_type(sides, 'm', 0, 1, 1, 1)
- : return_type(sides, 'm', 0, 1, -1, -1);
+ int const dir = sides.get<0, 1>() == 1 ? 1 : -1;
+ return return_type(sides, 'm', 0, 1, dir, dir);
}
};
diff --git a/3party/boost/boost/geometry/policies/relate/intersection_points.hpp b/3party/boost/boost/geometry/policies/relate/intersection_points.hpp
index ff8ec19499..aa2f697a2a 100644
--- a/3party/boost/boost/geometry/policies/relate/intersection_points.hpp
+++ b/3party/boost/boost/geometry/policies/relate/intersection_points.hpp
@@ -16,12 +16,12 @@
#include <boost/concept_check.hpp>
#include <boost/numeric/conversion/cast.hpp>
-#include <boost/geometry/arithmetic/determinant.hpp>
+#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/strategies/side_info.hpp>
#include <boost/geometry/util/select_calculation_type.hpp>
#include <boost/geometry/util/select_most_precise.hpp>
-
+#include <boost/geometry/util/math.hpp>
namespace boost { namespace geometry
{
@@ -30,106 +30,153 @@ namespace policies { namespace relate
{
-template <typename S1, typename S2, typename ReturnType, typename CalculationType = void>
+/*!
+\brief Policy calculating the intersection points themselves
+ */
+template
+<
+ typename ReturnType
+>
struct segments_intersection_points
{
typedef ReturnType return_type;
- typedef S1 segment_type1;
- typedef S2 segment_type2;
-
- typedef typename select_calculation_type
- <
- S1, S2, CalculationType
- >::type coordinate_type;
-
- template <typename R>
- static inline return_type segments_intersect(side_info const&,
- R const& r,
- coordinate_type const& dx1, coordinate_type const& dy1,
- coordinate_type const& , coordinate_type const& ,
- S1 const& s1, S2 const& )
- {
- typedef typename geometry::coordinate_type
- <
- typename return_type::point_type
- >::type return_coordinate_type;
-
- coordinate_type const s1x = get<0, 0>(s1);
- coordinate_type const s1y = get<0, 1>(s1);
-
- return_type result;
- result.count = 1;
- set<0>(result.intersections[0],
- boost::numeric_cast<return_coordinate_type>(R(s1x) + r * R(dx1)));
- set<1>(result.intersections[0],
- boost::numeric_cast<return_coordinate_type>(R(s1y) + r * R(dy1)));
- return result;
- }
-
- static inline return_type collinear_touch(coordinate_type const& x,
- coordinate_type const& y, int, int)
+ template
+ <
+ typename Point,
+ typename Segment,
+ typename SegmentRatio,
+ typename T
+ >
+ static inline void assign(Point& point,
+ Segment const& segment,
+ SegmentRatio const& ratio,
+ T const& dx, T const& dy)
{
- return_type result;
- result.count = 1;
- set<0>(result.intersections[0], x);
- set<1>(result.intersections[0], y);
- return result;
+ typedef typename geometry::coordinate_type<Point>::type coordinate_type;
+
+ // Calculate the intersection point based on segment_ratio
+ // Up to now, division was postponed. Here we divide using numerator/
+ // denominator. In case of integer this results in an integer
+ // division.
+ BOOST_ASSERT(ratio.denominator() != 0);
+ set<0>(point, boost::numeric_cast<coordinate_type>(
+ get<0, 0>(segment)
+ + ratio.numerator() * dx / ratio.denominator()));
+ set<1>(point, boost::numeric_cast<coordinate_type>(
+ get<0, 1>(segment)
+ + ratio.numerator() * dy / ratio.denominator()));
}
- template <typename S>
- static inline return_type collinear_inside(S const& s, int index1 = 0, int index2 = 1)
+
+ template
+ <
+ typename Segment1,
+ typename Segment2,
+ typename SegmentIntersectionInfo
+ >
+ static inline return_type segments_crosses(side_info const&,
+ SegmentIntersectionInfo const& sinfo,
+ Segment1 const& s1, Segment2 const& s2)
{
return_type result;
- result.count = 2;
- set<0>(result.intersections[index1], get<0, 0>(s));
- set<1>(result.intersections[index1], get<0, 1>(s));
- set<0>(result.intersections[index2], get<1, 0>(s));
- set<1>(result.intersections[index2], get<1, 1>(s));
- return result;
- }
+ result.count = 1;
- template <typename S>
- static inline return_type collinear_interior_boundary_intersect(S const& s, bool a_in_b,
- int, int, bool opposite)
- {
- int index1 = opposite && ! a_in_b ? 1 : 0;
- return collinear_inside(s, index1, 1 - index1);
- }
+ if (sinfo.robust_ra < sinfo.robust_rb)
+ {
+ assign(result.intersections[0], s1, sinfo.robust_ra,
+ sinfo.dx_a, sinfo.dy_a);
+ }
+ else
+ {
+ assign(result.intersections[0], s2, sinfo.robust_rb,
+ sinfo.dx_b, sinfo.dy_b);
+ }
- static inline return_type collinear_a_in_b(S1 const& s, bool)
- {
- return collinear_inside(s);
- }
- static inline return_type collinear_b_in_a(S2 const& s, bool opposite)
- {
- int index1 = opposite ? 1 : 0;
- return collinear_inside(s, index1, 1 - index1);
- }
+ result.fractions[0].assign(sinfo);
- static inline return_type collinear_overlaps(
- coordinate_type const& x1, coordinate_type const& y1,
- coordinate_type const& x2, coordinate_type const& y2,
- int, int, bool)
- {
- return_type result;
- result.count = 2;
- set<0>(result.intersections[0], x1);
- set<1>(result.intersections[0], y1);
- set<0>(result.intersections[1], x2);
- set<1>(result.intersections[1], y2);
return result;
}
- static inline return_type segment_equal(S1 const& s, bool)
+ template <typename Segment1, typename Segment2, typename Ratio>
+ static inline return_type segments_collinear(
+ Segment1 const& a, Segment2 const& b,
+ Ratio const& ra_from_wrt_b, Ratio const& ra_to_wrt_b,
+ Ratio const& rb_from_wrt_a, Ratio const& rb_to_wrt_a)
{
return_type result;
- result.count = 2;
- // TODO: order of IP's
- set<0>(result.intersections[0], get<0, 0>(s));
- set<1>(result.intersections[0], get<0, 1>(s));
- set<0>(result.intersections[1], get<1, 0>(s));
- set<1>(result.intersections[1], get<1, 1>(s));
+ int index = 0, count_a = 0, count_b = 0;
+ Ratio on_a[2];
+
+ // The conditions "index < 2" are necessary for non-robust handling,
+ // if index would be 2 this indicate an (currently uncatched) error
+
+ // IMPORTANT: the order of conditions is different as in direction.hpp
+ if (ra_from_wrt_b.on_segment()
+ && index < 2)
+ {
+ // a1--------->a2
+ // b1----->b2
+ //
+ // ra1 (relative to b) is between 0/1:
+ // -> First point of A is intersection point
+ detail::assign_point_from_index<0>(a, result.intersections[index]);
+ result.fractions[index].assign(Ratio::zero(), ra_from_wrt_b);
+ on_a[index] = Ratio::zero();
+ index++;
+ count_a++;
+ }
+ if (rb_from_wrt_a.in_segment()
+ && index < 2)
+ {
+ // We take the first intersection point of B
+ // a1--------->a2
+ // b1----->b2
+ // But only if it is not located on A
+ // a1--------->a2
+ // b1----->b2 rb_from_wrt_a == 0/1 -> a already taken
+
+ detail::assign_point_from_index<0>(b, result.intersections[index]);
+ result.fractions[index].assign(rb_from_wrt_a, Ratio::zero());
+ on_a[index] = rb_from_wrt_a;
+ index++;
+ count_b++;
+ }
+
+ if (ra_to_wrt_b.on_segment()
+ && index < 2)
+ {
+ // Similarly, second IP (here a2)
+ // a1--------->a2
+ // b1----->b2
+ detail::assign_point_from_index<1>(a, result.intersections[index]);
+ result.fractions[index].assign(Ratio::one(), ra_to_wrt_b);
+ on_a[index] = Ratio::one();
+ index++;
+ count_a++;
+ }
+ if (rb_to_wrt_a.in_segment()
+ && index < 2)
+ {
+ detail::assign_point_from_index<1>(b, result.intersections[index]);
+ result.fractions[index].assign(rb_to_wrt_a, Ratio::one());
+ on_a[index] = rb_to_wrt_a;
+ index++;
+ count_b++;
+ }
+
+ // TEMPORARY
+ // If both are from b, and b is reversed w.r.t. a, we swap IP's
+ // to align them w.r.t. a
+ // get_turn_info still relies on some order (in some collinear cases)
+ if (index == 2 && on_a[1] < on_a[0])
+ {
+ std::swap(result.fractions[0], result.fractions[1]);
+ std::swap(result.intersections[0], result.intersections[1]);
+ }
+
+ result.count = index;
+
return result;
}
@@ -142,17 +189,35 @@ struct segments_intersection_points
return return_type();
}
- static inline return_type collinear_disjoint()
+ // Both degenerate
+ template <typename Segment>
+ static inline return_type degenerate(Segment const& segment, bool)
{
- return return_type();
+ return_type result;
+ result.count = 1;
+ set<0>(result.intersections[0], get<0, 0>(segment));
+ set<1>(result.intersections[0], get<0, 1>(segment));
+ return result;
}
- static inline return_type degenerate(S1 const& s, bool)
+ // One degenerate
+ template <typename Segment, typename Ratio>
+ static inline return_type one_degenerate(Segment const& degenerate_segment,
+ Ratio const& ratio, bool a_degenerate)
{
return_type result;
result.count = 1;
- set<0>(result.intersections[0], get<0, 0>(s));
- set<1>(result.intersections[0], get<0, 1>(s));
+ set<0>(result.intersections[0], get<0, 0>(degenerate_segment));
+ set<1>(result.intersections[0], get<0, 1>(degenerate_segment));
+ if (a_degenerate)
+ {
+ // IP lies on ratio w.r.t. segment b
+ result.fractions[0].assign(Ratio::zero(), ratio);
+ }
+ else
+ {
+ result.fractions[0].assign(ratio, Ratio::zero());
+ }
return result;
}
};
diff --git a/3party/boost/boost/geometry/policies/relate/intersection_ratios.hpp b/3party/boost/boost/geometry/policies/relate/intersection_ratios.hpp
new file mode 100644
index 0000000000..81ecba0b54
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/relate/intersection_ratios.hpp
@@ -0,0 +1,127 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_RATIOS_HPP
+#define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_RATIOS_HPP
+
+
+#include <algorithm>
+#include <string>
+
+#include <boost/concept_check.hpp>
+#include <boost/numeric/conversion/cast.hpp>
+
+#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/strategies/side_info.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace policies { namespace relate
+{
+
+
+/*!
+\brief Policy returning segment ratios
+\note Template argument FractionType should be a fraction_type<SegmentRatio>
+ */
+template
+<
+ typename FractionType
+>
+struct segments_intersection_ratios
+{
+ typedef FractionType return_type;
+
+ template
+ <
+ typename Segment1,
+ typename Segment2,
+ typename SegmentIntersectionInfo
+ >
+ static inline return_type segments_crosses(side_info const&,
+ SegmentIntersectionInfo const& sinfo,
+ Segment1 const& , Segment2 const& )
+ {
+ return_type result;
+ result.assign(sinfo);
+ return result;
+ }
+
+ template <typename Segment1, typename Segment2, typename Ratio>
+ static inline return_type segments_collinear(
+ Segment1 const& , Segment2 const& ,
+ Ratio const& ra_from_wrt_b, Ratio const& ra_to_wrt_b,
+ Ratio const& rb_from_wrt_a, Ratio const& rb_to_wrt_a)
+ {
+ // We have only one result, for (potentially) two IP's,
+ // so we take a first one
+ return_type result;
+
+ if (ra_from_wrt_b.on_segment())
+ {
+ result.assign(Ratio::zero(), ra_from_wrt_b);
+ }
+ else if (rb_from_wrt_a.in_segment())
+ {
+ result.assign(rb_from_wrt_a, Ratio::zero());
+ }
+ else if (ra_to_wrt_b.on_segment())
+ {
+ result.assign(Ratio::one(), ra_to_wrt_b);
+ }
+ else if (rb_to_wrt_a.in_segment())
+ {
+ result.assign(rb_to_wrt_a, Ratio::one());
+ }
+
+ return result;
+ }
+
+ static inline return_type disjoint()
+ {
+ return return_type();
+ }
+ static inline return_type error(std::string const&)
+ {
+ return return_type();
+ }
+
+ template <typename Segment>
+ static inline return_type degenerate(Segment const& segment, bool)
+ {
+ return return_type();
+ }
+
+ template <typename Segment, typename Ratio>
+ static inline return_type one_degenerate(Segment const& ,
+ Ratio const& ratio, bool a_degenerate)
+ {
+ return_type result;
+ if (a_degenerate)
+ {
+ // IP lies on ratio w.r.t. segment b
+ result.assign(Ratio::zero(), ratio);
+ }
+ else
+ {
+ result.assign(ratio, Ratio::zero());
+ }
+ return result;
+ }
+
+};
+
+
+}} // namespace policies::relate
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_RATIOS_HPP
diff --git a/3party/boost/boost/geometry/policies/relate/tupled.hpp b/3party/boost/boost/geometry/policies/relate/tupled.hpp
index e78ccfbc1c..6da9095c4e 100644
--- a/3party/boost/boost/geometry/policies/relate/tupled.hpp
+++ b/3party/boost/boost/geometry/policies/relate/tupled.hpp
@@ -14,8 +14,6 @@
#include <boost/tuple/tuple.hpp>
#include <boost/geometry/strategies/side_info.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
namespace boost { namespace geometry
{
@@ -26,7 +24,7 @@ namespace policies { namespace relate
// "tupled" to return intersection results together.
// Now with two, with some meta-programming and derivations it can also be three (or more)
-template <typename Policy1, typename Policy2, typename CalculationType = void>
+template <typename Policy1, typename Policy2>
struct segments_tupled
{
typedef boost::tuple
@@ -35,107 +33,50 @@ struct segments_tupled
typename Policy2::return_type
> return_type;
- // Take segments of first policy, they should be equal
- typedef typename Policy1::segment_type1 segment_type1;
- typedef typename Policy1::segment_type2 segment_type2;
-
- typedef typename select_calculation_type
- <
- segment_type1,
- segment_type2,
- CalculationType
- >::type coordinate_type;
-
- // Get the same type, but at least a double
- typedef typename select_most_precise<coordinate_type, double>::type rtype;
-
- template <typename R>
- static inline return_type segments_intersect(side_info const& sides,
- R const& r,
- coordinate_type const& dx1, coordinate_type const& dy1,
- coordinate_type const& dx2, coordinate_type const& dy2,
- segment_type1 const& s1, segment_type2 const& s2)
- {
- return boost::make_tuple
- (
- Policy1::segments_intersect(sides, r,
- dx1, dy1, dx2, dy2, s1, s2),
- Policy2::segments_intersect(sides, r,
- dx1, dy1, dx2, dy2, s1, s2)
- );
- }
-
- static inline return_type collinear_touch(coordinate_type const& x,
- coordinate_type const& y, int arrival_a, int arrival_b)
- {
- return boost::make_tuple
- (
- Policy1::collinear_touch(x, y, arrival_a, arrival_b),
- Policy2::collinear_touch(x, y, arrival_a, arrival_b)
- );
- }
-
- template <typename S>
- static inline return_type collinear_interior_boundary_intersect(S const& segment,
- bool a_within_b,
- int arrival_a, int arrival_b, bool opposite)
- {
- return boost::make_tuple
- (
- Policy1::collinear_interior_boundary_intersect(segment, a_within_b, arrival_a, arrival_b, opposite),
- Policy2::collinear_interior_boundary_intersect(segment, a_within_b, arrival_a, arrival_b, opposite)
- );
- }
-
- static inline return_type collinear_a_in_b(segment_type1 const& segment,
- bool opposite)
- {
- return boost::make_tuple
- (
- Policy1::collinear_a_in_b(segment, opposite),
- Policy2::collinear_a_in_b(segment, opposite)
- );
- }
- static inline return_type collinear_b_in_a(segment_type2 const& segment,
- bool opposite)
+ template <typename Segment1, typename Segment2, typename SegmentIntersectionInfo>
+ static inline return_type segments_crosses(side_info const& sides,
+ SegmentIntersectionInfo const& sinfo,
+ Segment1 const& s1, Segment2 const& s2)
{
return boost::make_tuple
(
- Policy1::collinear_b_in_a(segment, opposite),
- Policy2::collinear_b_in_a(segment, opposite)
+ Policy1::segments_crosses(sides, sinfo, s1, s2),
+ Policy2::segments_crosses(sides, sinfo, s1, s2)
);
}
-
- static inline return_type collinear_overlaps(
- coordinate_type const& x1, coordinate_type const& y1,
- coordinate_type const& x2, coordinate_type const& y2,
- int arrival_a, int arrival_b, bool opposite)
+ template <typename Segment1, typename Segment2, typename Ratio>
+ static inline return_type segments_collinear(
+ Segment1 const& segment1, Segment2 const& segment2,
+ Ratio const& ra1, Ratio const& ra2, Ratio const& rb1, Ratio const& rb2)
{
return boost::make_tuple
(
- Policy1::collinear_overlaps(x1, y1, x2, y2, arrival_a, arrival_b, opposite),
- Policy2::collinear_overlaps(x1, y1, x2, y2, arrival_a, arrival_b, opposite)
+ Policy1::segments_collinear(segment1, segment2, ra1, ra2, rb1, rb2),
+ Policy2::segments_collinear(segment1, segment2, ra1, ra2, rb1, rb2)
);
}
- static inline return_type segment_equal(segment_type1 const& s,
- bool opposite)
+ template <typename Segment>
+ static inline return_type degenerate(Segment const& segment,
+ bool a_degenerate)
{
return boost::make_tuple
(
- Policy1::segment_equal(s, opposite),
- Policy2::segment_equal(s, opposite)
+ Policy1::degenerate(segment, a_degenerate),
+ Policy2::degenerate(segment, a_degenerate)
);
}
- static inline return_type degenerate(segment_type1 const& segment,
- bool a_degenerate)
+ template <typename Segment, typename Ratio>
+ static inline return_type one_degenerate(Segment const& segment,
+ Ratio const& ratio,
+ bool a_degenerate)
{
return boost::make_tuple
(
- Policy1::degenerate(segment, a_degenerate),
- Policy2::degenerate(segment, a_degenerate)
+ Policy1::one_degenerate(segment, ratio, a_degenerate),
+ Policy2::one_degenerate(segment, ratio, a_degenerate)
);
}
@@ -157,15 +98,6 @@ struct segments_tupled
);
}
- static inline return_type collinear_disjoint()
- {
- return boost::make_tuple
- (
- Policy1::collinear_disjoint(),
- Policy2::collinear_disjoint()
- );
- }
-
};
}} // namespace policies::relate
diff --git a/3party/boost/boost/geometry/policies/robustness/get_rescale_policy.hpp b/3party/boost/boost/geometry/policies/robustness/get_rescale_policy.hpp
new file mode 100644
index 0000000000..ed7c1eb94c
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/robustness/get_rescale_policy.hpp
@@ -0,0 +1,290 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_GET_RESCALE_POLICY_HPP
+#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_GET_RESCALE_POLICY_HPP
+
+
+#include <cstddef>
+
+#include <boost/type_traits.hpp>
+#include <boost/mpl/assert.hpp>
+
+#include <boost/geometry/core/tag_cast.hpp>
+
+#include <boost/geometry/algorithms/envelope.hpp>
+#include <boost/geometry/algorithms/expand.hpp>
+#include <boost/geometry/algorithms/detail/recalculate.hpp>
+#include <boost/geometry/algorithms/detail/get_max_size.hpp>
+#include <boost/geometry/policies/robustness/robust_type.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
+#include <boost/geometry/policies/robustness/rescale_policy.hpp>
+
+#include <boost/geometry/util/promote_floating_point.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace get_rescale_policy
+{
+
+template <typename Point, typename RobustPoint, typename Geometry, typename Factor>
+static inline void init_rescale_policy(Geometry const& geometry,
+ Point& min_point,
+ RobustPoint& min_robust_point,
+ Factor& factor)
+{
+ // Get bounding boxes
+ model::box<Point> env = geometry::return_envelope<model::box<Point> >(geometry);
+
+ // Scale this to integer-range
+ typedef typename promote_floating_point
+ <
+ typename geometry::coordinate_type<Point>::type
+ >::type num_type;
+ num_type const diff = boost::numeric_cast<num_type>(detail::get_max_size(env));
+ num_type const range = 10000000.0; // Define a large range to get precise integer coordinates
+ num_type const half = 0.5;
+ factor = math::equals(diff, num_type()) ? 1
+ : boost::numeric_cast<num_type>(
+ boost::numeric_cast<boost::long_long_type>(half + range / diff));
+
+ // Assign input/output minimal points
+ detail::assign_point_from_index<0>(env, min_point);
+ num_type const two = 2;
+ boost::long_long_type const min_coordinate
+ = boost::numeric_cast<boost::long_long_type>(-range / two);
+ assign_values(min_robust_point, min_coordinate, min_coordinate);
+}
+
+template <typename Point, typename RobustPoint, typename Geometry1, typename Geometry2, typename Factor>
+static inline void init_rescale_policy(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ Point& min_point,
+ RobustPoint& min_robust_point,
+ Factor& factor)
+{
+ // Get bounding boxes
+ model::box<Point> env = geometry::return_envelope<model::box<Point> >(geometry1);
+ model::box<Point> env2 = geometry::return_envelope<model::box<Point> >(geometry2);
+ geometry::expand(env, env2);
+
+ // TODO: merge this with implementation above
+ // Scale this to integer-range
+ typedef typename promote_floating_point
+ <
+ typename geometry::coordinate_type<Point>::type
+ >::type num_type;
+ num_type const diff = boost::numeric_cast<num_type>(detail::get_max_size(env));
+ num_type const range = 10000000.0; // Define a large range to get precise integer coordinates
+ num_type const half = 0.5;
+ factor = math::equals(diff, num_type()) ? 1
+ : boost::numeric_cast<num_type>(
+ boost::numeric_cast<boost::long_long_type>(half + range / diff));
+
+ // Assign input/output minimal points
+ detail::assign_point_from_index<0>(env, min_point);
+ num_type const two = 2;
+ boost::long_long_type const min_coordinate
+ = boost::numeric_cast<boost::long_long_type>(-range / two);
+ assign_values(min_robust_point, min_coordinate, min_coordinate);
+}
+
+
+template
+<
+ typename Point,
+ bool IsFloatingPoint
+>
+struct rescale_policy_type
+{
+ typedef no_rescale_policy type;
+};
+
+// We rescale only all FP types
+template
+<
+ typename Point
+>
+struct rescale_policy_type<Point, true>
+{
+ typedef typename geometry::coordinate_type<Point>::type coordinate_type;
+ typedef model::point
+ <
+ typename detail::robust_type<coordinate_type>::type,
+ geometry::dimension<Point>::value,
+ typename geometry::coordinate_system<Point>::type
+ > robust_point_type;
+ typedef typename promote_floating_point<coordinate_type>::type factor_type;
+ typedef detail::robust_policy<Point, robust_point_type, factor_type> type;
+};
+
+template <typename Policy>
+struct get_rescale_policy
+{
+ template <typename Geometry>
+ static inline Policy apply(Geometry const& geometry)
+ {
+ typedef typename point_type<Geometry>::type point_type;
+ typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
+ typedef typename promote_floating_point<coordinate_type>::type factor_type;
+ typedef model::point
+ <
+ typename detail::robust_type<coordinate_type>::type,
+ geometry::dimension<point_type>::value,
+ typename geometry::coordinate_system<point_type>::type
+ > robust_point_type;
+
+ point_type min_point;
+ robust_point_type min_robust_point;
+ factor_type factor;
+ init_rescale_policy(geometry, min_point, min_robust_point, factor);
+
+ return Policy(min_point, min_robust_point, factor);
+ }
+
+ template <typename Geometry1, typename Geometry2>
+ static inline Policy apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
+ {
+ typedef typename point_type<Geometry1>::type point_type;
+ typedef typename geometry::coordinate_type<Geometry1>::type coordinate_type;
+ typedef typename promote_floating_point<coordinate_type>::type factor_type;
+ typedef model::point
+ <
+ typename detail::robust_type<coordinate_type>::type,
+ geometry::dimension<point_type>::value,
+ typename geometry::coordinate_system<point_type>::type
+ > robust_point_type;
+
+ point_type min_point;
+ robust_point_type min_robust_point;
+ factor_type factor;
+ init_rescale_policy(geometry1, geometry2, min_point, min_robust_point, factor);
+
+ return Policy(min_point, min_robust_point, factor);
+ }
+};
+
+// Specialization for no-rescaling
+template <>
+struct get_rescale_policy<no_rescale_policy>
+{
+ template <typename Geometry>
+ static inline no_rescale_policy apply(Geometry const& )
+ {
+ return no_rescale_policy();
+ }
+
+ template <typename Geometry1, typename Geometry2>
+ static inline no_rescale_policy apply(Geometry1 const& , Geometry2 const& )
+ {
+ return no_rescale_policy();
+ }
+};
+
+
+}} // namespace detail::get_rescale_policy
+#endif // DOXYGEN_NO_DETAIL
+
+template<typename Point>
+struct rescale_policy_type
+ : public detail::get_rescale_policy::rescale_policy_type
+ <
+ Point,
+#if defined(BOOST_GEOMETRY_NO_ROBUSTNESS)
+ false
+#else
+ boost::is_floating_point
+ <
+ typename geometry::coordinate_type<Point>::type
+ >::type::value
+#endif
+ >
+{
+ static const bool is_point
+ = boost::is_same
+ <
+ typename geometry::tag<Point>::type,
+ geometry::point_tag
+ >::type::value;
+
+ BOOST_MPL_ASSERT_MSG((is_point),
+ INVALID_INPUT_GEOMETRY,
+ (typename geometry::tag<Point>::type));
+};
+
+
+template
+<
+ typename Geometry1,
+ typename Geometry2,
+ typename Tag1 = typename tag_cast
+ <
+ typename tag<Geometry1>::type,
+ box_tag,
+ pointlike_tag,
+ linear_tag,
+ areal_tag
+ >::type,
+ typename Tag2 = typename tag_cast
+ <
+ typename tag<Geometry2>::type,
+ box_tag,
+ pointlike_tag,
+ linear_tag,
+ areal_tag
+ >::type
+>
+struct rescale_overlay_policy_type
+ // Default: no rescaling
+ : public detail::get_rescale_policy::rescale_policy_type
+ <
+ typename geometry::point_type<Geometry1>::type,
+ false
+ >
+{};
+
+// Areal/areal: get rescale policy based on coordinate type
+template
+<
+ typename Geometry1,
+ typename Geometry2
+>
+struct rescale_overlay_policy_type<Geometry1, Geometry2, areal_tag, areal_tag>
+ : public rescale_policy_type
+ <
+ typename geometry::point_type<Geometry1>::type
+ >
+{};
+
+
+template <typename Policy, typename Geometry>
+inline Policy get_rescale_policy(Geometry const& geometry)
+{
+ return detail::get_rescale_policy::get_rescale_policy<Policy>::apply(geometry);
+}
+
+template <typename Policy, typename Geometry1, typename Geometry2>
+inline Policy get_rescale_policy(Geometry1 const& geometry1, Geometry2 const& geometry2)
+{
+ return detail::get_rescale_policy::get_rescale_policy<Policy>::apply(geometry1, geometry2);
+}
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_GET_RESCALE_POLICY_HPP
diff --git a/3party/boost/boost/geometry/policies/robustness/no_rescale_policy.hpp b/3party/boost/boost/geometry/policies/robustness/no_rescale_policy.hpp
new file mode 100644
index 0000000000..a7899842c1
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/robustness/no_rescale_policy.hpp
@@ -0,0 +1,66 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_NO_RESCALE_POLICY_HPP
+#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_NO_RESCALE_POLICY_HPP
+
+#include <stddef.h>
+
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+// Probably this will be moved out of namespace detail
+struct no_rescale_policy
+{
+ static bool const enabled = false;
+
+ // We don't rescale but return the reference of the input
+ template <std::size_t Dimension, typename Value>
+ inline Value const& apply(Value const& value) const
+ {
+ return value;
+ }
+};
+
+} // namespace detail
+#endif
+
+
+// Implement meta-functions for this policy
+template <typename Point>
+struct robust_point_type<Point, detail::no_rescale_policy>
+{
+ // The point itself
+ typedef Point type;
+};
+
+template <typename Point>
+struct segment_ratio_type<Point, detail::no_rescale_policy>
+{
+ // Define a segment_ratio defined on coordinate type, e.g.
+ // int/int or float/float
+ typedef typename geometry::coordinate_type<Point>::type coordinate_type;
+ typedef segment_ratio<coordinate_type> type;
+};
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_NO_RESCALE_POLICY_HPP
diff --git a/3party/boost/boost/geometry/policies/robustness/rescale_policy.hpp b/3party/boost/boost/geometry/policies/robustness/rescale_policy.hpp
new file mode 100644
index 0000000000..5b3b566976
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/robustness/rescale_policy.hpp
@@ -0,0 +1,83 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_HPP
+#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_HPP
+
+#include <cstddef>
+
+#include <boost/type_traits.hpp>
+
+#include <boost/geometry/policies/robustness/segment_ratio.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+template <typename FpPoint, typename IntPoint, typename CalculationType>
+struct robust_policy
+{
+ static bool const enabled = true;
+
+ typedef typename geometry::coordinate_type<IntPoint>::type output_ct;
+
+ robust_policy(FpPoint const& fp_min, IntPoint const& int_min, CalculationType const& the_factor)
+ : m_fp_min(fp_min)
+ , m_int_min(int_min)
+ , m_multiplier(the_factor)
+ {
+ }
+
+ template <std::size_t Dimension, typename Value>
+ inline output_ct apply(Value const& value) const
+ {
+ // a + (v-b)*f
+ CalculationType const a = static_cast<CalculationType>(get<Dimension>(m_int_min));
+ CalculationType const b = static_cast<CalculationType>(get<Dimension>(m_fp_min));
+ CalculationType const result = a + (value - b) * m_multiplier;
+ return static_cast<output_ct>(result);
+ }
+
+ FpPoint m_fp_min;
+ IntPoint m_int_min;
+ CalculationType m_multiplier;
+};
+
+} // namespace detail
+#endif
+
+
+// Implement meta-functions for this policy
+
+// Define the IntPoint as a robust-point type
+template <typename Point, typename FpPoint, typename IntPoint, typename CalculationType>
+struct robust_point_type<Point, detail::robust_policy<FpPoint, IntPoint, CalculationType> >
+{
+ typedef IntPoint type;
+};
+
+// Meta function for rescaling, if rescaling is done segment_ratio is based on long long
+template <typename Point, typename FpPoint, typename IntPoint, typename CalculationType>
+struct segment_ratio_type<Point, detail::robust_policy<FpPoint, IntPoint, CalculationType> >
+{
+ typedef segment_ratio<boost::long_long_type> type;
+};
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_HPP
diff --git a/3party/boost/boost/geometry/policies/robustness/robust_point_type.hpp b/3party/boost/boost/geometry/policies/robustness/robust_point_type.hpp
new file mode 100644
index 0000000000..25639227f0
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/robustness/robust_point_type.hpp
@@ -0,0 +1,30 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_POINT_TYPE_HPP
+#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_POINT_TYPE_HPP
+
+namespace boost { namespace geometry
+{
+
+// Meta-function to typedef a robust point type for a policy
+template <typename Point, typename Policy>
+struct robust_point_type
+{
+ // By default, the point itself is the robust type
+ typedef Point type;
+};
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_POINT_TYPE_HPP
diff --git a/3party/boost/boost/geometry/policies/robustness/robust_type.hpp b/3party/boost/boost/geometry/policies/robustness/robust_type.hpp
new file mode 100644
index 0000000000..4cfb2c4d91
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/robustness/robust_type.hpp
@@ -0,0 +1,67 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_TYPE_HPP
+#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_TYPE_HPP
+
+
+#include <boost/type_traits.hpp>
+#include <boost/config.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+
+namespace detail_dispatch
+{
+
+template <typename CoordinateType, typename IsFloatingPoint>
+struct robust_type
+{
+};
+
+template <typename CoordinateType>
+struct robust_type<CoordinateType, boost::false_type>
+{
+ typedef CoordinateType type;
+};
+
+template <typename CoordinateType>
+struct robust_type<CoordinateType, boost::true_type>
+{
+ typedef boost::long_long_type type;
+};
+
+} // namespace detail_dispatch
+
+namespace detail
+{
+
+template <typename CoordinateType>
+struct robust_type
+{
+ typedef typename detail_dispatch::robust_type
+ <
+ CoordinateType,
+ typename boost::is_floating_point<CoordinateType>::type
+ >::type type;
+};
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_TYPE_HPP
diff --git a/3party/boost/boost/geometry/policies/robustness/segment_ratio.hpp b/3party/boost/boost/geometry/policies/robustness/segment_ratio.hpp
new file mode 100644
index 0000000000..41068c0eb4
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/robustness/segment_ratio.hpp
@@ -0,0 +1,236 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_HPP
+#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_HPP
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/rational.hpp>
+
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/promote_floating_point.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+namespace detail { namespace segment_ratio
+{
+
+template
+<
+ typename Type,
+ bool IsIntegral = boost::is_integral<Type>::type::value
+>
+struct less {};
+
+template <typename Type>
+struct less<Type, true>
+{
+ template <typename Ratio>
+ static inline bool apply(Ratio const& lhs, Ratio const& rhs)
+ {
+ return boost::rational<Type>(lhs.numerator(), lhs.denominator())
+ < boost::rational<Type>(rhs.numerator(), rhs.denominator());
+ }
+};
+
+template <typename Type>
+struct less<Type, false>
+{
+ template <typename Ratio>
+ static inline bool apply(Ratio const& lhs, Ratio const& rhs)
+ {
+ BOOST_ASSERT(lhs.denominator() != 0);
+ BOOST_ASSERT(rhs.denominator() != 0);
+ return lhs.numerator() * rhs.denominator()
+ < rhs.numerator() * lhs.denominator();
+ }
+};
+
+template
+<
+ typename Type,
+ bool IsIntegral = boost::is_integral<Type>::type::value
+>
+struct equal {};
+
+template <typename Type>
+struct equal<Type, true>
+{
+ template <typename Ratio>
+ static inline bool apply(Ratio const& lhs, Ratio const& rhs)
+ {
+ return boost::rational<Type>(lhs.numerator(), lhs.denominator())
+ == boost::rational<Type>(rhs.numerator(), rhs.denominator());
+ }
+};
+
+template <typename Type>
+struct equal<Type, false>
+{
+ template <typename Ratio>
+ static inline bool apply(Ratio const& lhs, Ratio const& rhs)
+ {
+ BOOST_ASSERT(lhs.denominator() != 0);
+ BOOST_ASSERT(rhs.denominator() != 0);
+ return geometry::math::equals
+ (
+ lhs.numerator() * rhs.denominator(),
+ rhs.numerator() * lhs.denominator()
+ );
+ }
+};
+
+}}
+
+//! Small class to keep a ratio (e.g. 1/4)
+//! Main purpose is intersections and checking on 0, 1, and smaller/larger
+//! The prototype used Boost.Rational. However, we also want to store FP ratios,
+//! (so numerator/denominator both in float)
+//! and Boost.Rational starts with GCD which we prefer to avoid if not necessary
+//! On a segment means: this ratio is between 0 and 1 (both inclusive)
+//!
+template <typename Type>
+class segment_ratio
+{
+public :
+ typedef Type numeric_type;
+
+ // Type-alias for the type itself
+ typedef segment_ratio<Type> thistype;
+
+ inline segment_ratio()
+ : m_numerator(0)
+ , m_denominator(1)
+ , m_approximation(0)
+ {}
+
+ inline segment_ratio(const Type& nominator, const Type& denominator)
+ : m_numerator(nominator)
+ , m_denominator(denominator)
+ {
+ initialize();
+ }
+
+ inline Type const& numerator() const { return m_numerator; }
+ inline Type const& denominator() const { return m_denominator; }
+
+ inline void assign(const Type& nominator, const Type& denominator)
+ {
+ m_numerator = nominator;
+ m_denominator = denominator;
+ initialize();
+ }
+
+ inline void initialize()
+ {
+ // Minimal normalization
+ // 1/-4 => -1/4, -1/-4 => 1/4
+ if (m_denominator < 0)
+ {
+ m_numerator = -m_numerator;
+ m_denominator = -m_denominator;
+ }
+
+ typedef typename promote_floating_point<Type>::type num_type;
+ static const num_type scale = 1000000.0;
+ m_approximation =
+ m_denominator == 0 ? 0
+ : boost::numeric_cast<double>
+ (
+ boost::numeric_cast<num_type>(m_numerator) * scale
+ / boost::numeric_cast<num_type>(m_denominator)
+ );
+ }
+
+ inline bool is_zero() const { return math::equals(m_numerator, 0); }
+ inline bool is_one() const { return math::equals(m_numerator, m_denominator); }
+ inline bool on_segment() const
+ {
+ // e.g. 0/4 or 4/4 or 2/4
+ return m_numerator >= 0 && m_numerator <= m_denominator;
+ }
+ inline bool in_segment() const
+ {
+ // e.g. 1/4
+ return m_numerator > 0 && m_numerator < m_denominator;
+ }
+ inline bool on_end() const
+ {
+ // e.g. 0/4 or 4/4
+ return is_zero() || is_one();
+ }
+ inline bool left() const
+ {
+ // e.g. -1/4
+ return m_numerator < 0;
+ }
+ inline bool right() const
+ {
+ // e.g. 5/4
+ return m_numerator > m_denominator;
+ }
+
+ inline bool close_to(thistype const& other) const
+ {
+ return geometry::math::abs(m_approximation - other.m_approximation) < 2;
+ }
+
+ inline bool operator< (thistype const& other) const
+ {
+ return close_to(other)
+ ? detail::segment_ratio::less<Type>::apply(*this, other)
+ : m_approximation < other.m_approximation;
+ }
+
+ inline bool operator== (thistype const& other) const
+ {
+ return close_to(other)
+ && detail::segment_ratio::equal<Type>::apply(*this, other);
+ }
+
+ static inline thistype zero()
+ {
+ static thistype result(0, 1);
+ return result;
+ }
+
+ static inline thistype one()
+ {
+ static thistype result(1, 1);
+ return result;
+ }
+
+#if defined(BOOST_GEOMETRY_DEFINE_STREAM_OPERATOR_SEGMENT_RATIO)
+ friend std::ostream& operator<<(std::ostream &os, segment_ratio const& ratio)
+ {
+ os << ratio.m_numerator << "/" << ratio.m_denominator;
+ return os;
+ }
+#endif
+
+
+
+private :
+ Type m_numerator;
+ Type m_denominator;
+
+ // Contains ratio on scale 0..1000000 (for 0..1)
+ // This is an approximation for fast and rough comparisons
+ // Boost.Rational is used if the approximations are close.
+ // Reason: performance, Boost.Rational does a GCD by default and also the
+ // comparisons contain while-loops.
+ double m_approximation;
+};
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_HPP
diff --git a/3party/boost/boost/geometry/policies/robustness/segment_ratio_type.hpp b/3party/boost/boost/geometry/policies/robustness/segment_ratio_type.hpp
new file mode 100644
index 0000000000..19e935bbb9
--- /dev/null
+++ b/3party/boost/boost/geometry/policies/robustness/segment_ratio_type.hpp
@@ -0,0 +1,28 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP
+#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP
+
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+namespace boost { namespace geometry
+{
+
+// Meta-function to access segment-ratio for a policy
+template <typename Point, typename Policy>
+struct segment_ratio_type {}; // : not_implemented<> {};
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP
diff --git a/3party/boost/boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp b/3party/boost/boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp
new file mode 100644
index 0000000000..c03a1a1d82
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp
@@ -0,0 +1,110 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_ASYMMETRIC_HPP
+#define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_ASYMMETRIC_HPP
+
+#include <boost/geometry/strategies/buffer.hpp>
+#include <boost/geometry/util/math.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace buffer
+{
+
+
+/*!
+\brief Let the buffer for linestrings be asymmetric
+\ingroup strategies
+\tparam NumericType \tparam_numeric
+\details This strategy can be used as DistanceStrategy for the buffer algorithm.
+ It can be applied for (multi)linestrings. It uses a (potentially) different
+ distances for left and for right. This means the (multi)linestrings are
+ interpreted having a direction.
+
+\qbk{
+[heading Example]
+[buffer_distance_asymmetric]
+[heading Output]
+[$img/strategies/buffer_distance_asymmetric.png]
+[heading See also]
+\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
+\* [link geometry.reference.strategies.strategy_buffer_distance_symmetric distance_symmetric]
+}
+ */
+template<typename NumericType>
+class distance_asymmetric
+{
+public :
+ //! \brief Constructs the strategy, two distances must be specified
+ //! \param left The distance (or radius) of the buffer on the left side
+ //! \param right The distance on the right side
+ distance_asymmetric(NumericType const& left,
+ NumericType const& right)
+ : m_left(left)
+ , m_right(right)
+ {}
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+ //! Returns the distance-value for the specified side
+ template <typename Point>
+ inline NumericType apply(Point const& , Point const& ,
+ buffer_side_selector side) const
+ {
+ NumericType result = side == buffer_side_left ? m_left : m_right;
+ return negative() ? math::abs(result) : result;
+ }
+
+ //! Returns 1 (used internally)
+ inline int factor() const
+ {
+ return m_left < 0 ? -1 : 1;
+ }
+
+ //! Returns true if both distances are negative
+ inline bool negative() const
+ {
+ return m_left < 0 && m_right < 0;
+ }
+
+ //! Returns the max distance distance up to the buffer will reach
+ template <typename JoinStrategy, typename EndStrategy>
+ inline NumericType max_distance(JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy) const
+ {
+ NumericType const left = geometry::math::abs(m_left);
+ NumericType const right = geometry::math::abs(m_right);
+ NumericType const dist = (std::max)(left, right);
+ return (std::max)(join_strategy.max_distance(dist),
+ end_strategy.max_distance(dist));
+ }
+
+ //! Returns the distance at which the input is simplified before the buffer process
+ inline NumericType simplify_distance() const
+ {
+ NumericType const left = geometry::math::abs(m_left);
+ NumericType const right = geometry::math::abs(m_right);
+ return (std::min)(left, right) / 1000.0;
+ }
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+private :
+ NumericType m_left;
+ NumericType m_right;
+};
+
+
+}} // namespace strategy::buffer
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_ASYMMETRIC_HPP
diff --git a/3party/boost/boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp b/3party/boost/boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp
new file mode 100644
index 0000000000..a8815173bc
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp
@@ -0,0 +1,102 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_SYMMETRIC_HPP
+#define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_SYMMETRIC_HPP
+
+#include <boost/geometry/strategies/buffer.hpp>
+#include <boost/geometry/util/math.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace buffer
+{
+
+
+/*!
+\brief Let the buffer algorithm create buffers with same distances
+\ingroup strategies
+\tparam NumericType \tparam_numeric
+\details This strategy can be used as DistanceStrategy for the buffer algorithm.
+ It can be applied for all geometries. It uses one distance for left and
+ for right.
+ If the distance is negative and used with a (multi)polygon or ring, the
+ geometry will shrink (deflate) instead of expand (inflate).
+
+\qbk{
+[heading Example]
+[buffer_distance_symmetric]
+[heading Output]
+[$img/strategies/buffer_distance_symmetric.png]
+[heading See also]
+\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
+\* [link geometry.reference.strategies.strategy_buffer_distance_asymmetric distance_asymmetric]
+}
+ */
+template<typename NumericType>
+class distance_symmetric
+{
+public :
+ //! \brief Constructs the strategy, a distance must be specified
+ //! \param distance The distance (or radius) of the buffer
+ explicit inline distance_symmetric(NumericType const& distance)
+ : m_distance(distance)
+ {}
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+ //! Returns the distance-value
+ template <typename Point>
+ inline NumericType apply(Point const& , Point const& ,
+ buffer_side_selector ) const
+ {
+ return m_distance;
+ }
+
+ //! Returns 1 (used internally)
+ inline int factor() const
+ {
+ return 1;
+ }
+
+ //! Returns true if distance is negative
+ inline bool negative() const
+ {
+ return m_distance < 0;
+ }
+
+ //! Returns the max distance distance up to the buffer will reach
+ template <typename JoinStrategy, typename EndStrategy>
+ inline NumericType max_distance(JoinStrategy const& join_strategy,
+ EndStrategy const& end_strategy) const
+ {
+ NumericType const dist = geometry::math::abs(m_distance);
+ return (std::max)(join_strategy.max_distance(dist),
+ end_strategy.max_distance(dist));
+ }
+
+
+ //! Returns the distance at which the input is simplified before the buffer process
+ inline NumericType simplify_distance() const
+ {
+ return geometry::math::abs(m_distance) / 1000.0;
+ }
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+private :
+ NumericType m_distance;
+};
+
+
+}} // namespace strategy::buffer
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_SYMMETRIC_HPP
diff --git a/3party/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp b/3party/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp
index 747c140754..ce3142d892 100644
--- a/3party/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp
+++ b/3party/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp
@@ -230,7 +230,7 @@ public:
// For the left boundary it is important that multiple points
// are sorted from bottom to top. Therefore the less predicate
// does not take the x-only template parameter (this fixes ticket #6019.
- // For the right boundary it is not necessary (though also not harmful),
+ // For the right boundary it is not necessary (though also not harmful),
// because points are sorted from bottom to top in a later stage.
// For symmetry and to get often more balanced lower/upper halves
// we keep it.
@@ -319,11 +319,11 @@ private:
typedef typename strategy::side::services::default_strategy<cs_tag>::type side;
output.push_back(p);
- register std::size_t output_size = output.size();
+ std::size_t output_size = output.size();
while (output_size >= 3)
{
rev_iterator rit = output.rbegin();
- point_type const& last = *rit++;
+ point_type const last = *rit++;
point_type const& last2 = *rit++;
if (Factor * side::apply(*rit, last, last2) <= 0)
diff --git a/3party/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp b/3party/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp
index 1398ddb687..968f9fecb9 100644
--- a/3party/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp
+++ b/3party/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp
@@ -22,9 +22,9 @@
#include <boost/geometry/strategies/within.hpp>
-namespace boost { namespace geometry { namespace strategy
+namespace boost { namespace geometry { namespace strategy
{
-
+
namespace within
{
@@ -71,11 +71,11 @@ struct point_in_box_by_side
boost::array<typename point_type<Box>::type, 5> bp;
geometry::detail::assign_box_corners_oriented<true>(box, bp);
bp[4] = bp[0];
-
+
bool result = true;
side_strategy_type strategy;
boost::ignore_unused_variable_warning(strategy);
-
+
for (int i = 1; i < 5; i++)
{
int const side = strategy.apply(point, bp[i - 1], bp[i]);
@@ -84,7 +84,7 @@ struct point_in_box_by_side
return result;
}
}
-
+
return result;
}
};
@@ -102,9 +102,9 @@ namespace within { namespace services
template <typename Point, typename Box>
struct default_strategy
<
- point_tag, box_tag,
- point_tag, areal_tag,
- spherical_tag, spherical_tag,
+ point_tag, box_tag,
+ point_tag, areal_tag,
+ spherical_tag, spherical_tag,
Point, Box
>
{
@@ -126,9 +126,9 @@ namespace covered_by { namespace services
template <typename Point, typename Box>
struct default_strategy
<
- point_tag, box_tag,
- point_tag, areal_tag,
- spherical_tag, spherical_tag,
+ point_tag, box_tag,
+ point_tag, areal_tag,
+ spherical_tag, spherical_tag,
Point, Box
>
{
diff --git a/3party/boost/boost/geometry/strategies/agnostic/point_in_point.hpp b/3party/boost/boost/geometry/strategies/agnostic/point_in_point.hpp
new file mode 100644
index 0000000000..e4f9bec4c6
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/agnostic/point_in_point.hpp
@@ -0,0 +1,136 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POINT_HPP
+#define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POINT_HPP
+
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
+
+#include <boost/geometry/strategies/covered_by.hpp>
+#include <boost/geometry/strategies/within.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace within
+{
+
+template
+<
+ typename Point1, typename Point2
+>
+struct point_in_point
+{
+ static inline bool apply(Point1 const& point1, Point2 const& point2)
+ {
+ return detail::equals::equals_point_point(point1, point2);
+ }
+};
+
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+
+namespace services
+{
+
+template <typename Point1, typename Point2>
+struct default_strategy<point_tag, point_tag, point_tag, point_tag, cartesian_tag, cartesian_tag, Point1, Point2>
+{
+ typedef strategy::within::point_in_point<Point1, Point2> type;
+};
+
+template <typename Point1, typename Point2>
+struct default_strategy<point_tag, point_tag, point_tag, point_tag, spherical_tag, spherical_tag, Point1, Point2>
+{
+ typedef strategy::within::point_in_point<Point1, Point2> type;
+};
+
+template <typename Point1, typename Point2, typename AnyCS1, typename AnyCS2>
+struct default_strategy<point_tag, point_tag, point_tag, point_tag, AnyCS1, AnyCS2, Point1, Point2>
+{
+ typedef strategy::within::point_in_point<Point1, Point2> type;
+};
+
+template <typename Point, typename MultiPoint>
+struct default_strategy<point_tag, multi_point_tag, point_tag, multi_point_tag, cartesian_tag, cartesian_tag, Point, MultiPoint>
+{
+ typedef strategy::within::point_in_point<Point, typename point_type<MultiPoint>::type> type;
+};
+
+template <typename Point, typename MultiPoint>
+struct default_strategy<point_tag, multi_point_tag, point_tag, multi_point_tag, spherical_tag, spherical_tag, Point, MultiPoint>
+{
+ typedef strategy::within::point_in_point<Point, typename point_type<MultiPoint>::type> type;
+};
+
+template <typename Point, typename MultiPoint, typename AnyCS1, typename AnyCS2>
+struct default_strategy<point_tag, multi_point_tag, point_tag, multi_point_tag, AnyCS1, AnyCS2, Point, MultiPoint>
+{
+ typedef strategy::within::point_in_point<Point, typename point_type<MultiPoint>::type> type;
+};
+
+} // namespace services
+
+#endif
+
+
+}} // namespace strategy::within
+
+
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+namespace strategy { namespace covered_by { namespace services
+{
+
+template <typename Point1, typename Point2>
+struct default_strategy<point_tag, point_tag, point_tag, point_tag, cartesian_tag, cartesian_tag, Point1, Point2>
+{
+ typedef strategy::within::point_in_point<Point1, Point2> type;
+};
+
+template <typename Point1, typename Point2>
+struct default_strategy<point_tag, point_tag, point_tag, point_tag, spherical_tag, spherical_tag, Point1, Point2>
+{
+ typedef strategy::within::point_in_point<Point1, Point2> type;
+};
+
+template <typename Point1, typename Point2, typename AnyCS1, typename AnyCS2>
+struct default_strategy<point_tag, point_tag, point_tag, point_tag, AnyCS1, AnyCS2, Point1, Point2>
+{
+ typedef strategy::within::point_in_point<Point1, Point2> type;
+};
+
+template <typename Point, typename MultiPoint>
+struct default_strategy<point_tag, multi_point_tag, point_tag, multi_point_tag, cartesian_tag, cartesian_tag, Point, MultiPoint>
+{
+ typedef strategy::within::point_in_point<Point, typename point_type<MultiPoint>::type> type;
+};
+
+template <typename Point, typename MultiPoint>
+struct default_strategy<point_tag, multi_point_tag, point_tag, multi_point_tag, spherical_tag, spherical_tag, Point, MultiPoint>
+{
+ typedef strategy::within::point_in_point<Point, typename point_type<MultiPoint>::type> type;
+};
+
+template <typename Point, typename MultiPoint, typename AnyCS1, typename AnyCS2>
+struct default_strategy<point_tag, multi_point_tag, point_tag, multi_point_tag, AnyCS1, AnyCS2, Point, MultiPoint>
+{
+ typedef strategy::within::point_in_point<Point, typename point_type<MultiPoint>::type> type;
+};
+
+}}} // namespace strategy::covered_by::services
+#endif
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POINT_HPP
diff --git a/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp b/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp
index 69188650d8..e6161b677d 100644
--- a/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp
+++ b/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp
@@ -1,6 +1,10 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -9,6 +13,8 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_WINDING_HPP
#define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_WINDING_HPP
@@ -27,6 +33,78 @@ namespace boost { namespace geometry
namespace strategy { namespace within
{
+
+// Fix for https://svn.boost.org/trac/boost/ticket/9628
+// For floating point coordinates, the <1> coordinate of a point is compared
+// with the segment's points using some EPS. If the coordinates are "equal"
+// the sides are calculated. Therefore we can treat a segment as a long areal
+// geometry having some width. There is a small ~triangular area somewhere
+// between the segment's effective area and a segment's line used in sides
+// calculation where the segment is on the one side of the line but on the
+// other side of a segment (due to the width).
+// For the s1 of a segment going NE the real side is RIGHT but the point may
+// be detected as LEFT, like this:
+// RIGHT
+// ___----->
+// ^ O Pt __ __
+// EPS __ __
+// v__ __ BUT DETECTED AS LEFT OF THIS LINE
+// _____7
+// _____/
+// _____/
+template <typename CSTag>
+struct winding_side_equal
+{
+ typedef typename strategy::side::services::default_strategy
+ <
+ CSTag
+ >::type strategy_side_type;
+
+ template <size_t D, typename Point, typename PointOfSegment>
+ static inline int apply(Point const& point,
+ PointOfSegment const& se,
+ int count)
+ {
+ // Create a vertical segment intersecting the original segment's endpoint
+ // equal to the point, with the derived direction (UP/DOWN).
+ // Set only the 2 first coordinates, the other ones are ignored
+ PointOfSegment ss1, ss2;
+ set<1-D>(ss1, get<1-D>(se));
+ set<1-D>(ss2, get<1-D>(se));
+ if ( count > 0 ) // UP
+ {
+ set<D>(ss1, 0);
+ set<D>(ss2, 1);
+ }
+ else // DOWN
+ {
+ set<D>(ss1, 1);
+ set<D>(ss2, 0);
+ }
+ // Check the side using this vertical segment
+ return strategy_side_type::apply(ss1, ss2, point);
+ }
+};
+
+// The optimization for cartesian
+template <>
+struct winding_side_equal<cartesian_tag>
+{
+ template <size_t D, typename Point, typename PointOfSegment>
+ static inline int apply(Point const& point,
+ PointOfSegment const& se,
+ int count)
+ {
+ return math::equals(get<1-D>(point), get<1-D>(se)) ?
+ 0 :
+ get<1-D>(point) < get<1-D>(se) ?
+ // assuming count is equal to 1 or -1
+ count : // ( count > 0 ? 1 : -1) :
+ -count; // ( count > 0 ? -1 : 1) ;
+ }
+};
+
+
/*!
\brief Within detection using winding rule
\ingroup strategies
@@ -106,21 +184,21 @@ class winding
template <size_t D>
static inline int check_segment(Point const& point,
PointOfSegment const& seg1, PointOfSegment const& seg2,
- counter& state)
+ counter& state, bool& eq1, bool& eq2)
{
calculation_type const p = get<D>(point);
calculation_type const s1 = get<D>(seg1);
calculation_type const s2 = get<D>(seg2);
// Check if one of segment endpoints is at same level of point
- bool eq1 = math::equals(s1, p);
- bool eq2 = math::equals(s2, p);
+ eq1 = math::equals(s1, p);
+ eq2 = math::equals(s2, p);
if (eq1 && eq2)
{
// Both equal p -> segment is horizontal (or vertical for D=0)
// The only thing which has to be done is check if point is ON segment
- return check_touch<1 - D>(point, seg1, seg2,state);
+ return check_touch<1 - D>(point, seg1, seg2, state);
}
return
@@ -132,8 +210,6 @@ class winding
}
-
-
public :
// Typedefs and static methods to fulfill the concept
@@ -145,10 +221,24 @@ public :
PointOfSegment const& s1, PointOfSegment const& s2,
counter& state)
{
- int count = check_segment<1>(point, s1, s2, state);
+ bool eq1 = false;
+ bool eq2 = false;
+ boost::ignore_unused(eq2);
+
+ int count = check_segment<1>(point, s1, s2, state, eq1, eq2);
if (count != 0)
{
- int side = strategy_side_type::apply(s1, s2, point);
+ int side = 0;
+ if ( count == 1 || count == -1 )
+ {
+ side = winding_side_equal<typename cs_tag<Point>::type>
+ ::template apply<1>(point, eq1 ? s1 : s2, count);
+ }
+ else
+ {
+ side = strategy_side_type::apply(s1, s2, point);
+ }
+
if (side == 0)
{
// Point is lying on segment
@@ -194,6 +284,19 @@ struct default_strategy<point_tag, AnyTag, point_tag, areal_tag, spherical_tag,
typedef winding<Point, typename geometry::point_type<Geometry>::type> type;
};
+// TODO: use linear_tag and pointlike_tag the same way how areal_tag is used
+
+template <typename Point, typename Geometry, typename AnyTag>
+struct default_strategy<point_tag, AnyTag, point_tag, AnyTag, cartesian_tag, cartesian_tag, Point, Geometry>
+{
+ typedef winding<Point, typename geometry::point_type<Geometry>::type> type;
+};
+
+template <typename Point, typename Geometry, typename AnyTag>
+struct default_strategy<point_tag, AnyTag, point_tag, AnyTag, spherical_tag, spherical_tag, Point, Geometry>
+{
+ typedef winding<Point, typename geometry::point_type<Geometry>::type> type;
+};
} // namespace services
@@ -221,6 +324,19 @@ struct default_strategy<point_tag, AnyTag, point_tag, areal_tag, spherical_tag,
typedef strategy::within::winding<Point, typename geometry::point_type<Geometry>::type> type;
};
+// TODO: use linear_tag and pointlike_tag the same way how areal_tag is used
+
+template <typename Point, typename Geometry, typename AnyTag>
+struct default_strategy<point_tag, AnyTag, point_tag, AnyTag, cartesian_tag, cartesian_tag, Point, Geometry>
+{
+ typedef strategy::within::winding<Point, typename geometry::point_type<Geometry>::type> type;
+};
+
+template <typename Point, typename Geometry, typename AnyTag>
+struct default_strategy<point_tag, AnyTag, point_tag, AnyTag, spherical_tag, spherical_tag, Point, Geometry>
+{
+ typedef strategy::within::winding<Point, typename geometry::point_type<Geometry>::type> type;
+};
}}} // namespace strategy::covered_by::services
#endif
diff --git a/3party/boost/boost/geometry/strategies/agnostic/relate.hpp b/3party/boost/boost/geometry/strategies/agnostic/relate.hpp
new file mode 100644
index 0000000000..318047fadb
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/agnostic/relate.hpp
@@ -0,0 +1,91 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_STRATEGY_AGNOSTIC_RELATE_HPP
+#define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_RELATE_HPP
+
+#include <boost/geometry/algorithms/detail/relate/relate.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace relate
+{
+
+template <typename StaticMask>
+struct relate
+{
+ template <typename Geometry1, typename Geometry2>
+ static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
+ {
+ return detail::relate::relate<StaticMask>(geometry1, geometry2);
+ }
+};
+
+} // namespace relate
+
+namespace within
+{
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+
+namespace services
+{
+
+
+template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2, typename AnyCS>
+struct default_strategy<AnyTag1, AnyTag2, AnyTag1, AnyTag2, AnyCS, AnyCS, Geometry1, Geometry2>
+{
+ typedef strategy::relate::relate<detail::relate::static_mask_within> type;
+};
+
+template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2, typename AnyCS>
+struct default_strategy<AnyTag1, AnyTag2, AnyTag1, areal_tag, AnyCS, AnyCS, Geometry1, Geometry2>
+{
+ typedef strategy::relate::relate<detail::relate::static_mask_within> type;
+};
+
+
+} // namespace services
+
+#endif
+
+
+}} // namespace strategy::within
+
+
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+namespace strategy { namespace covered_by { namespace services
+{
+
+
+template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2, typename AnyCS>
+struct default_strategy<AnyTag1, AnyTag2, AnyTag1, AnyTag2, AnyCS, AnyCS, Geometry1, Geometry2>
+{
+ typedef strategy::relate::relate<detail::relate::static_mask_covered_by> type;
+};
+
+template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2, typename AnyCS>
+struct default_strategy<AnyTag1, AnyTag2, AnyTag1, areal_tag, AnyCS, AnyCS, Geometry1, Geometry2>
+{
+ typedef strategy::relate::relate<detail::relate::static_mask_covered_by> type;
+};
+
+
+}}} // namespace strategy::covered_by::services
+#endif
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_STRATEGY_AGNOSTIC_RELATE_HPP
diff --git a/3party/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp b/3party/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp
index 8825791dbe..8ad3bbc50d 100644
--- a/3party/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp
+++ b/3party/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp
@@ -65,163 +65,238 @@ namespace detail
return douglas_peucker_point<Point>(*this);
}
};
-}
-#endif // DOXYGEN_NO_DETAIL
+ template
+ <
+ typename Point,
+ typename PointDistanceStrategy,
+ typename LessCompare
+ = std::less
+ <
+ typename strategy::distance::services::return_type
+ <
+ PointDistanceStrategy,
+ Point, Point
+ >::type
+ >
+ >
+ class douglas_peucker
+ : LessCompare // for empty base optimization
+ {
+ public :
-/*!
-\brief Implements the simplify algorithm.
-\ingroup strategies
-\details The douglas_peucker strategy simplifies a linestring, ring or
- vector of points using the well-known Douglas-Peucker algorithm.
- For the algorithm, see for example:
-\see http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
-\see http://www2.dcs.hull.ac.uk/CISRG/projects/Royal-Inst/demos/dp.html
-\tparam Point the point type
-\tparam PointDistanceStrategy point-segment distance strategy to be used
-\note This strategy uses itself a point-segment-distance strategy which
- can be specified
-\author Barend and Maarten, 1995/1996
-\author Barend, revised for Generic Geometry Library, 2008
-*/
-template
-<
- typename Point,
- typename PointDistanceStrategy
->
-class douglas_peucker
-{
-public :
+ // See also ticket 5954 https://svn.boost.org/trac/boost/ticket/5954
+ // Comparable is currently not possible here because it has to be compared to the squared of max_distance, and more.
+ // For now we have to take the real distance.
+ typedef PointDistanceStrategy distance_strategy_type;
+ // typedef typename strategy::distance::services::comparable_type<PointDistanceStrategy>::type distance_strategy_type;
- // See also ticket 5954 https://svn.boost.org/trac/boost/ticket/5954
- // Comparable is currently not possible here because it has to be compared to the squared of max_distance, and more.
- // For now we have to take the real distance.
- typedef PointDistanceStrategy distance_strategy_type;
- // typedef typename strategy::distance::services::comparable_type<PointDistanceStrategy>::type distance_strategy_type;
+ typedef typename strategy::distance::services::return_type
+ <
+ distance_strategy_type,
+ Point, Point
+ >::type distance_type;
- typedef typename strategy::distance::services::return_type<distance_strategy_type>::type return_type;
+ douglas_peucker()
+ {}
-private :
- typedef detail::douglas_peucker_point<Point> dp_point_type;
- typedef typename std::vector<dp_point_type>::iterator iterator_type;
+ douglas_peucker(LessCompare const& less_compare)
+ : LessCompare(less_compare)
+ {}
+ private :
+ typedef detail::douglas_peucker_point<Point> dp_point_type;
+ typedef typename std::vector<dp_point_type>::iterator iterator_type;
- static inline void consider(iterator_type begin,
- iterator_type end,
- return_type const& max_dist, int& n,
- distance_strategy_type const& ps_distance_strategy)
- {
- std::size_t size = end - begin;
- // size must be at least 3
- // because we want to consider a candidate point in between
- if (size <= 2)
+ LessCompare const& less() const
{
-#ifdef GL_DEBUG_DOUGLAS_PEUCKER
- if (begin != end)
+ return *this;
+ }
+
+ inline void consider(iterator_type begin,
+ iterator_type end,
+ distance_type const& max_dist,
+ int& n,
+ distance_strategy_type const& ps_distance_strategy) const
+ {
+ std::size_t size = end - begin;
+
+ // size must be at least 3
+ // because we want to consider a candidate point in between
+ if (size <= 2)
{
- std::cout << "ignore between " << dsv(begin->p)
- << " and " << dsv((end - 1)->p)
- << " size=" << size << std::endl;
- }
- std::cout << "return because size=" << size << std::endl;
+#ifdef GL_DEBUG_DOUGLAS_PEUCKER
+ if (begin != end)
+ {
+ std::cout << "ignore between " << dsv(begin->p)
+ << " and " << dsv((end - 1)->p)
+ << " size=" << size << std::endl;
+ }
+ std::cout << "return because size=" << size << std::endl;
#endif
- return;
- }
+ return;
+ }
- iterator_type last = end - 1;
+ iterator_type last = end - 1;
#ifdef GL_DEBUG_DOUGLAS_PEUCKER
- std::cout << "find between " << dsv(begin->p)
- << " and " << dsv(last->p)
- << " size=" << size << std::endl;
+ std::cout << "find between " << dsv(begin->p)
+ << " and " << dsv(last->p)
+ << " size=" << size << std::endl;
#endif
- // Find most far point, compare to the current segment
- //geometry::segment<Point const> s(begin->p, last->p);
- return_type md(-1.0); // any value < 0
- iterator_type candidate;
- for(iterator_type it = begin + 1; it != last; ++it)
- {
- return_type dist = ps_distance_strategy.apply(it->p, begin->p, last->p);
+ // Find most far point, compare to the current segment
+ //geometry::segment<Point const> s(begin->p, last->p);
+ distance_type md(-1.0); // any value < 0
+ iterator_type candidate;
+ for(iterator_type it = begin + 1; it != last; ++it)
+ {
+ distance_type dist = ps_distance_strategy.apply(it->p, begin->p, last->p);
#ifdef GL_DEBUG_DOUGLAS_PEUCKER
- std::cout << "consider " << dsv(it->p)
- << " at " << double(dist)
- << ((dist > max_dist) ? " maybe" : " no")
- << std::endl;
+ std::cout << "consider " << dsv(it->p)
+ << " at " << double(dist)
+ << ((dist > max_dist) ? " maybe" : " no")
+ << std::endl;
#endif
- if (dist > md)
- {
- md = dist;
- candidate = it;
+ if ( less()(md, dist) )
+ {
+ md = dist;
+ candidate = it;
+ }
}
- }
- // If a point is found, set the include flag
- // and handle segments in between recursively
- if (md > max_dist)
- {
+ // If a point is found, set the include flag
+ // and handle segments in between recursively
+ if ( less()(max_dist, md) )
+ {
#ifdef GL_DEBUG_DOUGLAS_PEUCKER
- std::cout << "use " << dsv(candidate->p) << std::endl;
+ std::cout << "use " << dsv(candidate->p) << std::endl;
#endif
- candidate->included = true;
- n++;
+ candidate->included = true;
+ n++;
- consider(begin, candidate + 1, max_dist, n, ps_distance_strategy);
- consider(candidate, end, max_dist, n, ps_distance_strategy);
+ consider(begin, candidate + 1, max_dist, n, ps_distance_strategy);
+ consider(candidate, end, max_dist, n, ps_distance_strategy);
+ }
}
- }
+ public :
+
+ template <typename Range, typename OutputIterator>
+ inline OutputIterator apply(Range const& range,
+ OutputIterator out,
+ distance_type max_distance) const
+ {
+ distance_strategy_type strategy;
+
+ // Copy coordinates, a vector of references to all points
+ std::vector<dp_point_type> ref_candidates(boost::begin(range),
+ boost::end(range));
+
+ // Include first and last point of line,
+ // they are always part of the line
+ int n = 2;
+ ref_candidates.front().included = true;
+ ref_candidates.back().included = true;
+
+ // Get points, recursively, including them if they are further away
+ // than the specified distance
+ consider(boost::begin(ref_candidates), boost::end(ref_candidates), max_distance, n, strategy);
+
+ // Copy included elements to the output
+ for(typename std::vector<dp_point_type>::const_iterator it
+ = boost::begin(ref_candidates);
+ it != boost::end(ref_candidates);
+ ++it)
+ {
+ if (it->included)
+ {
+ // copy-coordinates does not work because OutputIterator
+ // does not model Point (??)
+ //geometry::convert(it->p, *out);
+ *out = it->p;
+ out++;
+ }
+ }
+ return out;
+ }
+
+ };
+
+
+}
+#endif // DOXYGEN_NO_DETAIL
+
+
+/*!
+\brief Implements the simplify algorithm.
+\ingroup strategies
+\details The douglas_peucker strategy simplifies a linestring, ring or
+ vector of points using the well-known Douglas-Peucker algorithm.
+\tparam Point the point type
+\tparam PointDistanceStrategy point-segment distance strategy to be used
+\note This strategy uses itself a point-segment-distance strategy which
+ can be specified
+\author Barend and Maarten, 1995/1996
+\author Barend, revised for Generic Geometry Library, 2008
+*/
+
+/*
+For the algorithm, see for example:
+ - http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
+ - http://www2.dcs.hull.ac.uk/CISRG/projects/Royal-Inst/demos/dp.html
+*/
+template
+<
+ typename Point,
+ typename PointDistanceStrategy
+>
+class douglas_peucker
+{
public :
+ typedef PointDistanceStrategy distance_strategy_type;
+
+ typedef typename detail::douglas_peucker
+ <
+ Point,
+ PointDistanceStrategy
+ >::distance_type distance_type;
+
+ typedef distance_type return_type;
+
template <typename Range, typename OutputIterator>
static inline OutputIterator apply(Range const& range,
- OutputIterator out, double max_distance)
+ OutputIterator out,
+ distance_type max_distance)
{
- distance_strategy_type strategy;
+ return detail::douglas_peucker
+ <
+ Point,
+ PointDistanceStrategy
+ >().apply(range, out, max_distance);
+ }
- // Copy coordinates, a vector of references to all points
- std::vector<dp_point_type> ref_candidates(boost::begin(range),
- boost::end(range));
+};
- // Include first and last point of line,
- // they are always part of the line
- int n = 2;
- ref_candidates.front().included = true;
- ref_candidates.back().included = true;
+}} // namespace strategy::simplify
- // Get points, recursively, including them if they are further away
- // than the specified distance
- typedef typename strategy::distance::services::return_type<distance_strategy_type>::type return_type;
- consider(boost::begin(ref_candidates), boost::end(ref_candidates), max_distance, n, strategy);
-
- // Copy included elements to the output
- for(typename std::vector<dp_point_type>::const_iterator it
- = boost::begin(ref_candidates);
- it != boost::end(ref_candidates);
- ++it)
- {
- if (it->included)
- {
- // copy-coordinates does not work because OutputIterator
- // does not model Point (??)
- //geometry::convert(it->p, *out);
- *out = it->p;
- out++;
- }
- }
- return out;
- }
+namespace traits {
+template <typename P>
+struct point_type<strategy::simplify::detail::douglas_peucker_point<P> >
+{
+ typedef P type;
};
-}} // namespace strategy::simplify
+} // namespace traits
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/strategies/buffer.hpp b/3party/boost/boost/geometry/strategies/buffer.hpp
new file mode 100644
index 0000000000..7dbe03b4a9
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/buffer.hpp
@@ -0,0 +1,91 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace buffer
+{
+
+/*
+
+ A Buffer-join strategy gets 4 input points.
+ On the two consecutive segments s1 and s2 (joining at vertex v):
+
+ The lines from parallel at s1, s2 (at buffer-distance) end/start
+ in two points perpendicular to the segments: p1 and p2.
+ These parallel lines interesct in point ip
+
+ (s2)
+ |
+ |
+ ^
+ |
+ (p2) |(v)
+ * +----<--- (s1)
+
+ x(ip) *(p1)
+
+
+ So, in clockwise order:
+ v : vertex point
+ p1: perpendicular on left side of segment1<1> (perp1)
+ ip: intersection point
+ p2: perpendicular on left side of segment2<0> (perp2)
+*/
+
+
+
+/*!
+\brief Enumerates options for side of buffer (left/right w.r.t. directed
+ segment)
+\ingroup enum
+\details Around a linestring, a buffer can be defined left or right.
+ Around a polygon, assumed clockwise internally,
+ a buffer is either on the left side (inflates the polygon), or on the
+ right side (deflates the polygon)
+*/
+enum buffer_side_selector { buffer_side_left, buffer_side_right };
+
+/*!
+\brief Enumerates types of pieces (parts of buffer) around geometries
+\ingroup enum
+*/
+enum piece_type
+{
+ buffered_segment,
+ buffered_join,
+ buffered_round_end,
+ buffered_flat_end,
+ buffered_point,
+ buffered_concave // always on the inside
+};
+
+
+/*!
+\brief Enumerates types of joins
+\ingroup enum
+*/
+enum join_selector
+{
+ join_convex,
+ join_concave,
+ join_continue, // collinear, next segment touches previous segment
+ join_spike // collinear, with overlap, next segment goes back
+};
+
+
+}} // namespace strategy::buffer
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/box_in_box.hpp b/3party/boost/boost/geometry/strategies/cartesian/box_in_box.hpp
index 7680b8362c..9889658a13 100644
--- a/3party/boost/boost/geometry/strategies/cartesian/box_in_box.hpp
+++ b/3party/boost/boost/geometry/strategies/cartesian/box_in_box.hpp
@@ -3,6 +3,7 @@
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -21,10 +22,10 @@
#include <boost/geometry/strategies/within.hpp>
-namespace boost { namespace geometry { namespace strategy
+namespace boost { namespace geometry { namespace strategy
{
-
-
+
+
namespace within
{
@@ -36,7 +37,8 @@ struct box_within_range
, BoxContainingValue const& bing_min
, BoxContainingValue const& bing_max)
{
- return bed_min > bing_min && bed_max < bing_max;
+ return bing_min <= bed_min && bed_max <= bing_max // contained in containing
+ && bed_min < bed_max; // interiors overlap
}
};
@@ -69,9 +71,9 @@ struct relate_box_box_loop
assert_dimension_equal<Box1, Box2>();
if (! SubStrategy::apply(
- get<min_corner, Dimension>(b_contained),
- get<max_corner, Dimension>(b_contained),
- get<min_corner, Dimension>(b_containing),
+ get<min_corner, Dimension>(b_contained),
+ get<max_corner, Dimension>(b_contained),
+ get<min_corner, Dimension>(b_containing),
get<max_corner, Dimension>(b_containing)
)
)
@@ -115,7 +117,7 @@ struct box_in_box
{
return relate_box_box_loop
<
- SubStrategy,
+ SubStrategy,
Box1, Box2, 0, dimension<Box1>::type::value
>::apply(box1, box2);
}
@@ -134,9 +136,9 @@ namespace within { namespace services
template <typename BoxContained, typename BoxContaining>
struct default_strategy
<
- box_tag, box_tag,
- box_tag, areal_tag,
- cartesian_tag, cartesian_tag,
+ box_tag, box_tag,
+ box_tag, areal_tag,
+ cartesian_tag, cartesian_tag,
BoxContained, BoxContaining
>
{
@@ -152,9 +154,9 @@ namespace covered_by { namespace services
template <typename BoxContained, typename BoxContaining>
struct default_strategy
<
- box_tag, box_tag,
- box_tag, areal_tag,
- cartesian_tag, cartesian_tag,
+ box_tag, box_tag,
+ box_tag, areal_tag,
+ cartesian_tag, cartesian_tag,
BoxContained, BoxContaining
>
{
diff --git a/3party/boost/boost/geometry/strategies/cartesian/buffer_end_flat.hpp b/3party/boost/boost/geometry/strategies/cartesian/buffer_end_flat.hpp
new file mode 100644
index 0000000000..c01cf4df85
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/buffer_end_flat.hpp
@@ -0,0 +1,112 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_FLAT_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_FLAT_HPP
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+#include <boost/geometry/strategies/side.hpp>
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/select_most_precise.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+
+
+
+namespace boost { namespace geometry
+{
+
+
+namespace strategy { namespace buffer
+{
+
+
+/*!
+\brief Let the buffer create flat ends
+\ingroup strategies
+\details This strategy can be used as EndStrategy for the buffer algorithm.
+ It creates a flat end for each linestring-end. It can be applied
+ for (multi)linestrings. Also it is applicable for spikes in (multi)polygons.
+ This strategy is only applicable for Cartesian coordinate systems.
+
+\qbk{
+[heading Example]
+[buffer_end_flat]
+[heading Output]
+[$img/strategies/buffer_end_flat.png]
+[heading See also]
+\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
+\* [link geometry.reference.strategies.strategy_buffer_end_round end_round]
+}
+ */
+class end_flat
+{
+
+public :
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+ //! Fills output_range with a flat end
+ template <typename Point, typename RangeOut, typename DistanceStrategy>
+ inline void apply(Point const& penultimate_point,
+ Point const& perp_left_point,
+ Point const& ultimate_point,
+ Point const& perp_right_point,
+ buffer_side_selector side,
+ DistanceStrategy const& distance,
+ RangeOut& range_out) const
+ {
+ typedef typename coordinate_type<Point>::type coordinate_type;
+
+ typedef typename geometry::select_most_precise
+ <
+ coordinate_type,
+ double
+ >::type promoted_type;
+
+ promoted_type const dist_left = distance.apply(penultimate_point, ultimate_point, buffer_side_left);
+ promoted_type const dist_right = distance.apply(penultimate_point, ultimate_point, buffer_side_right);
+
+ bool reversed = (side == buffer_side_left && dist_right < 0 && -dist_right > dist_left)
+ || (side == buffer_side_right && dist_left < 0 && -dist_left > dist_right)
+ ;
+ if (reversed)
+ {
+ range_out.push_back(perp_right_point);
+ range_out.push_back(perp_left_point);
+ }
+ else
+ {
+ range_out.push_back(perp_left_point);
+ range_out.push_back(perp_right_point);
+ }
+ // Don't add the ultimate_point (endpoint of the linestring).
+ // The buffer might be generated completely at one side.
+ // In other cases it does no harm but is further useless
+ }
+
+ template <typename NumericType>
+ static inline NumericType max_distance(NumericType const& distance)
+ {
+ return distance;
+ }
+
+ //! Returns the piece_type (flat end)
+ static inline piece_type get_piece_type()
+ {
+ return buffered_flat_end;
+ }
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+};
+
+
+}} // namespace strategy::buffer
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_FLAT_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/buffer_end_round.hpp b/3party/boost/boost/geometry/strategies/cartesian/buffer_end_round.hpp
new file mode 100644
index 0000000000..74780d6165
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/buffer_end_round.hpp
@@ -0,0 +1,166 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_ROUND_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_ROUND_HPP
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/strategies/tags.hpp>
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/select_most_precise.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+namespace boost { namespace geometry
+{
+
+
+namespace strategy { namespace buffer
+{
+
+
+/*!
+\brief Let the buffer create rounded ends
+\ingroup strategies
+\details This strategy can be used as EndStrategy for the buffer algorithm.
+ It creates a rounded end for each linestring-end. It can be applied
+ for (multi)linestrings. Also it is applicable for spikes in (multi)polygons.
+ This strategy is only applicable for Cartesian coordinate systems.
+
+\qbk{
+[heading Example]
+[buffer_end_round]
+[heading Output]
+[$img/strategies/buffer_end_round.png]
+[heading See also]
+\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
+\* [link geometry.reference.strategies.strategy_buffer_end_flat end_flat]
+}
+ */
+class end_round
+{
+private :
+ std::size_t m_points_per_circle;
+
+ template
+ <
+ typename Point,
+ typename PromotedType,
+ typename DistanceType,
+ typename RangeOut
+ >
+ inline void generate_points(Point const& point,
+ PromotedType alpha, // by value
+ DistanceType const& buffer_distance,
+ RangeOut& range_out) const
+ {
+ PromotedType const two = 2.0;
+ PromotedType const two_pi = two * geometry::math::pi<PromotedType>();
+
+ std::size_t point_buffer_count = m_points_per_circle;
+
+ PromotedType const diff = two_pi / PromotedType(point_buffer_count);
+
+ // For half circle:
+ point_buffer_count /= 2;
+ point_buffer_count++;
+
+ for (std::size_t i = 0; i < point_buffer_count; i++, alpha -= diff)
+ {
+ typename boost::range_value<RangeOut>::type p;
+ set<0>(p, get<0>(point) + buffer_distance * cos(alpha));
+ set<1>(p, get<1>(point) + buffer_distance * sin(alpha));
+ range_out.push_back(p);
+ }
+ }
+
+ template <typename T, typename P1, typename P2>
+ static inline T calculate_angle(P1 const& from_point, P2 const& to_point)
+ {
+ typedef P1 vector_type;
+ vector_type v = from_point;
+ geometry::subtract_point(v, to_point);
+ return atan2(geometry::get<1>(v), geometry::get<0>(v));
+ }
+
+public :
+
+ //! \brief Constructs the strategy
+ //! \param points_per_circle points which would be used for a full circle
+ explicit inline end_round(std::size_t points_per_circle = 90)
+ : m_points_per_circle(points_per_circle)
+ {}
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+ //! Fills output_range with a flat end
+ template <typename Point, typename RangeOut, typename DistanceStrategy>
+ inline void apply(Point const& penultimate_point,
+ Point const& perp_left_point,
+ Point const& ultimate_point,
+ Point const& ,
+ buffer_side_selector side,
+ DistanceStrategy const& distance,
+ RangeOut& range_out) const
+ {
+ typedef typename coordinate_type<Point>::type coordinate_type;
+
+ typedef typename geometry::select_most_precise
+ <
+ coordinate_type,
+ double
+ >::type promoted_type;
+
+ promoted_type const alpha = calculate_angle<promoted_type>(perp_left_point, ultimate_point);
+
+ promoted_type const dist_left = distance.apply(penultimate_point, ultimate_point, buffer_side_left);
+ promoted_type const dist_right = distance.apply(penultimate_point, ultimate_point, buffer_side_right);
+ if (geometry::math::equals(dist_left, dist_right))
+ {
+ generate_points(ultimate_point, alpha, dist_left, range_out);
+ }
+ else
+ {
+ promoted_type const two = 2.0;
+ promoted_type dist_half_diff = (dist_left - dist_right) / two;
+
+ if (side == buffer_side_right)
+ {
+ dist_half_diff = -dist_half_diff;
+ }
+
+ Point shifted_point;
+ set<0>(shifted_point, get<0>(ultimate_point) + dist_half_diff * cos(alpha));
+ set<1>(shifted_point, get<1>(ultimate_point) + dist_half_diff * sin(alpha));
+ generate_points(shifted_point, alpha, (dist_left + dist_right) / two, range_out);
+ }
+ }
+
+ template <typename NumericType>
+ static inline NumericType max_distance(NumericType const& distance)
+ {
+ return distance;
+ }
+
+ //! Returns the piece_type (flat end)
+ static inline piece_type get_piece_type()
+ {
+ return buffered_round_end;
+ }
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+};
+
+
+}} // namespace strategy::buffer
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_ROUND_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/buffer_join_miter.hpp b/3party/boost/boost/geometry/strategies/cartesian/buffer_join_miter.hpp
new file mode 100644
index 0000000000..8fcf3b996c
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/buffer_join_miter.hpp
@@ -0,0 +1,140 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_MITER_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_MITER_HPP
+
+#include <boost/assert.hpp>
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/policies/compare.hpp>
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/select_most_precise.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace buffer
+{
+
+/*!
+\brief Let the buffer create sharp corners
+\ingroup strategies
+\details This strategy can be used as JoinStrategy for the buffer algorithm.
+ It creates a sharp corners around each convex vertex. It can be applied
+ for (multi)linestrings and (multi)polygons.
+ If corners are sharp by themselves, the miters might become very long. Therefore
+ there is a limit (miter_limit), in terms of the used distance, which limits
+ their length. The miter is not changed to a bevel form (as done in some
+ other software), it is just adapted to the specified miter_limit but keeps
+ its miter form.
+ This strategy is only applicable for Cartesian coordinate systems.
+
+\qbk{
+[heading Example]
+[buffer_join_miter]
+[heading Output]
+[$img/strategies/buffer_join_miter.png]
+[heading See also]
+\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
+\* [link geometry.reference.strategies.strategy_buffer_join_round join_round]
+}
+ */
+class join_miter
+{
+public:
+
+ //! \brief Constructs the strategy
+ //! \param miter_limit The miter limit, to avoid excessively long miters around sharp corners
+ explicit inline join_miter(double miter_limit = 5.0)
+ : m_miter_limit(valid_limit(miter_limit))
+ {}
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+ //! Fills output_range with a sharp shape around a vertex
+ template <typename Point, typename DistanceType, typename RangeOut>
+ inline bool apply(Point const& ip, Point const& vertex,
+ Point const& perp1, Point const& perp2,
+ DistanceType const& buffer_distance,
+ RangeOut& range_out) const
+ {
+ geometry::equal_to<Point> equals;
+ if (equals(ip, vertex))
+ {
+ return false;
+ }
+ if (equals(perp1, perp2))
+ {
+ return false;
+ }
+
+ typedef typename coordinate_type<Point>::type coordinate_type;
+ typedef typename geometry::select_most_precise
+ <
+ coordinate_type,
+ double
+ >::type promoted_type;
+
+ Point p = ip;
+
+ // Check the distance ip-vertex (= miter distance)
+ // (We calculate it manually (not using Pythagoras strategy) to reuse
+ // dx and dy)
+ coordinate_type const dx = get<0>(p) - get<0>(vertex);
+ coordinate_type const dy = get<1>(p) - get<1>(vertex);
+
+ promoted_type const distance = geometry::math::sqrt(dx * dx + dy * dy);
+
+ promoted_type const max_distance
+ = m_miter_limit * geometry::math::abs(buffer_distance);
+
+ if (distance > max_distance)
+ {
+ BOOST_ASSERT(distance != 0.0);
+
+ promoted_type const proportion = max_distance / distance;
+ set<0>(p, get<0>(vertex) + dx * proportion);
+ set<1>(p, get<1>(vertex) + dy * proportion);
+ }
+
+ range_out.push_back(perp1);
+ range_out.push_back(p);
+ range_out.push_back(perp2);
+ return true;
+ }
+
+ template <typename NumericType>
+ inline NumericType max_distance(NumericType const& distance) const
+ {
+ return distance * m_miter_limit;
+ }
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+private :
+ double valid_limit(double miter_limit) const
+ {
+ if (miter_limit < 1.0)
+ {
+ // It should always exceed the buffer distance
+ miter_limit = 1.0;
+ }
+ return miter_limit;
+ }
+
+ double m_miter_limit;
+};
+
+}} // namespace strategy::buffer
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_MITER_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/buffer_join_round.hpp b/3party/boost/boost/geometry/strategies/cartesian/buffer_join_round.hpp
new file mode 100644
index 0000000000..9e467c85a0
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/buffer_join_round.hpp
@@ -0,0 +1,177 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_HPP
+
+#include <boost/assert.hpp>
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/policies/compare.hpp>
+#include <boost/geometry/strategies/buffer.hpp>
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/select_most_precise.hpp>
+
+#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
+#include <boost/geometry/io/wkt/wkt.hpp>
+#endif
+
+
+namespace boost { namespace geometry
+{
+
+
+namespace strategy { namespace buffer
+{
+
+/*!
+\brief Let the buffer create rounded corners
+\ingroup strategies
+\details This strategy can be used as JoinStrategy for the buffer algorithm.
+ It creates a rounded corners around each convex vertex. It can be applied
+ for (multi)linestrings and (multi)polygons.
+ This strategy is only applicable for Cartesian coordinate systems.
+
+\qbk{
+[heading Example]
+[buffer_join_round]
+[heading Output]
+[$img/strategies/buffer_join_round.png]
+[heading See also]
+\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
+\* [link geometry.reference.strategies.strategy_buffer_join_miter join_miter]
+}
+ */
+class join_round
+{
+public :
+
+ //! \brief Constructs the strategy
+ //! \param points_per_circle points which would be used for a full circle
+ explicit inline join_round(std::size_t points_per_circle = 90)
+ : m_points_per_circle(points_per_circle)
+ {}
+
+private :
+ template
+ <
+ typename PromotedType,
+ typename Point,
+ typename DistanceType,
+ typename RangeOut
+ >
+ inline void generate_points(Point const& vertex,
+ Point const& perp1, Point const& perp2,
+ DistanceType const& buffer_distance,
+ RangeOut& range_out) const
+ {
+ PromotedType dx1 = get<0>(perp1) - get<0>(vertex);
+ PromotedType dy1 = get<1>(perp1) - get<1>(vertex);
+ PromotedType dx2 = get<0>(perp2) - get<0>(vertex);
+ PromotedType dy2 = get<1>(perp2) - get<1>(vertex);
+
+ BOOST_ASSERT(buffer_distance != 0);
+
+ dx1 /= buffer_distance;
+ dy1 /= buffer_distance;
+ dx2 /= buffer_distance;
+ dy2 /= buffer_distance;
+
+ PromotedType angle_diff = acos(dx1 * dx2 + dy1 * dy2);
+
+ PromotedType two = 2.0;
+ PromotedType steps = m_points_per_circle;
+ int n = boost::numeric_cast<int>(steps * angle_diff
+ / (two * geometry::math::pi<PromotedType>()));
+
+ if (n <= 1)
+ {
+ return;
+ }
+
+ PromotedType const angle1 = atan2(dy1, dx1);
+ PromotedType diff = angle_diff / PromotedType(n);
+ PromotedType a = angle1 - diff;
+
+ for (int i = 0; i < n - 1; i++, a -= diff)
+ {
+ Point p;
+ set<0>(p, get<0>(vertex) + buffer_distance * cos(a));
+ set<1>(p, get<1>(vertex) + buffer_distance * sin(a));
+ range_out.push_back(p);
+ }
+ }
+
+public :
+
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+ //! Fills output_range with a rounded shape around a vertex
+ template <typename Point, typename DistanceType, typename RangeOut>
+ inline bool apply(Point const& ip, Point const& vertex,
+ Point const& perp1, Point const& perp2,
+ DistanceType const& buffer_distance,
+ RangeOut& range_out) const
+ {
+ typedef typename coordinate_type<Point>::type coordinate_type;
+ typedef typename boost::range_value<RangeOut>::type output_point_type;
+
+ typedef typename geometry::select_most_precise
+ <
+ typename geometry::select_most_precise
+ <
+ coordinate_type,
+ typename geometry::coordinate_type<output_point_type>::type
+ >::type,
+ double
+ >::type promoted_type;
+
+ geometry::equal_to<Point> equals;
+ if (equals(perp1, perp2))
+ {
+#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
+ std::cout << "Corner for equal points " << geometry::wkt(ip) << " " << geometry::wkt(perp1) << std::endl;
+#endif
+ return false;
+ }
+
+ // Generate 'vectors'
+ coordinate_type vix = (get<0>(ip) - get<0>(vertex));
+ coordinate_type viy = (get<1>(ip) - get<1>(vertex));
+
+ promoted_type length_i = geometry::math::sqrt(vix * vix + viy * viy);
+ DistanceType const bd = geometry::math::abs(buffer_distance);
+ promoted_type prop = bd / length_i;
+
+ Point bp;
+ set<0>(bp, get<0>(vertex) + vix * prop);
+ set<1>(bp, get<1>(vertex) + viy * prop);
+
+ range_out.push_back(perp1);
+ generate_points<promoted_type>(vertex, perp1, perp2, bd, range_out);
+ range_out.push_back(perp2);
+ return true;
+ }
+
+ template <typename NumericType>
+ static inline NumericType max_distance(NumericType const& distance)
+ {
+ return distance;
+ }
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+private :
+ std::size_t m_points_per_circle;
+};
+
+
+}} // namespace strategy::buffer
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp b/3party/boost/boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp
new file mode 100644
index 0000000000..1444c795af
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp
@@ -0,0 +1,155 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_BY_DIVIDE_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_BY_DIVIDE_HPP
+
+#include <boost/assert.hpp>
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/policies/compare.hpp>
+#include <boost/geometry/strategies/buffer.hpp>
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/select_most_precise.hpp>
+
+#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
+#include <boost/geometry/io/wkt/wkt.hpp>
+#endif
+
+namespace boost { namespace geometry
+{
+
+
+namespace strategy { namespace buffer
+{
+
+
+class join_round_by_divide
+{
+public :
+
+ inline join_round_by_divide(std::size_t max_level = 4)
+ : m_max_level(max_level)
+ {}
+
+ template
+ <
+ typename PromotedType,
+ typename Point,
+ typename DistanceType,
+ typename RangeOut
+ >
+ inline void mid_points(Point const& vertex,
+ Point const& p1, Point const& p2,
+ DistanceType const& buffer_distance,
+ RangeOut& range_out,
+ std::size_t level = 1) const
+ {
+ typedef typename coordinate_type<Point>::type coordinate_type;
+
+ // Generate 'vectors'
+ coordinate_type const vp1_x = get<0>(p1) - get<0>(vertex);
+ coordinate_type const vp1_y = get<1>(p1) - get<1>(vertex);
+
+ coordinate_type const vp2_x = (get<0>(p2) - get<0>(vertex));
+ coordinate_type const vp2_y = (get<1>(p2) - get<1>(vertex));
+
+ // Average them to generate vector in between
+ coordinate_type const two = 2;
+ coordinate_type const v_x = (vp1_x + vp2_x) / two;
+ coordinate_type const v_y = (vp1_y + vp2_y) / two;
+
+ PromotedType const length2 = geometry::math::sqrt(v_x * v_x + v_y * v_y);
+
+ PromotedType prop = buffer_distance / length2;
+
+ Point mid_point;
+ set<0>(mid_point, get<0>(vertex) + v_x * prop);
+ set<1>(mid_point, get<1>(vertex) + v_y * prop);
+
+ if (level < m_max_level)
+ {
+ mid_points<PromotedType>(vertex, p1, mid_point, buffer_distance, range_out, level + 1);
+ }
+ range_out.push_back(mid_point);
+ if (level < m_max_level)
+ {
+ mid_points<PromotedType>(vertex, mid_point, p2, buffer_distance, range_out, level + 1);
+ }
+ }
+
+ template <typename Point, typename DistanceType, typename RangeOut>
+ inline bool apply(Point const& ip, Point const& vertex,
+ Point const& perp1, Point const& perp2,
+ DistanceType const& buffer_distance,
+ RangeOut& range_out) const
+ {
+ typedef typename coordinate_type<Point>::type coordinate_type;
+
+ typedef typename geometry::select_most_precise
+ <
+ coordinate_type,
+ double
+ >::type promoted_type;
+
+ geometry::equal_to<Point> equals;
+
+ if (equals(perp1, perp2))
+ {
+#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
+ std::cout << "Corner for equal points " << geometry::wkt(ip) << " " << geometry::wkt(perp1) << std::endl;
+#endif
+ return false;
+ }
+
+ // Generate 'vectors'
+ coordinate_type const vix = (get<0>(ip) - get<0>(vertex));
+ coordinate_type const viy = (get<1>(ip) - get<1>(vertex));
+
+ promoted_type const length_i = geometry::math::sqrt(vix * vix + viy * viy);
+
+ promoted_type const bd = geometry::math::abs(buffer_distance);
+ promoted_type prop = bd / length_i;
+
+ Point bp;
+ set<0>(bp, get<0>(vertex) + vix * prop);
+ set<1>(bp, get<1>(vertex) + viy * prop);
+
+ range_out.push_back(perp1);
+
+ if (m_max_level > 1)
+ {
+ mid_points<promoted_type>(vertex, perp1, bp, bd, range_out);
+ range_out.push_back(bp);
+ mid_points<promoted_type>(vertex, bp, perp2, bd, range_out);
+ }
+ else if (m_max_level == 1)
+ {
+ range_out.push_back(bp);
+ }
+
+ range_out.push_back(perp2);
+ return true;
+ }
+
+ template <typename NumericType>
+ static inline NumericType max_distance(NumericType const& distance)
+ {
+ return distance;
+ }
+
+private :
+ std::size_t m_max_level;
+};
+
+
+}} // namespace strategy::buffer
+
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_BY_DIVIDE_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/buffer_point_circle.hpp b/3party/boost/boost/geometry/strategies/cartesian/buffer_point_circle.hpp
new file mode 100644
index 0000000000..f64a82d8fc
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/buffer_point_circle.hpp
@@ -0,0 +1,108 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_CIRCLE_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_CIRCLE_HPP
+
+#include <cstddef>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/util/math.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace buffer
+{
+
+/*!
+\brief Create a circular buffer around a point
+\ingroup strategies
+\details This strategy can be used as PointStrategy for the buffer algorithm.
+ It creates a circular buffer around a point. It can be applied
+ for points and multi_points, but also for a linestring (if it is degenerate,
+ so consisting of only one point) and for polygons (if it is degenerate).
+ This strategy is only applicable for Cartesian coordinate systems.
+
+\qbk{
+[heading Example]
+[buffer_point_circle]
+[heading Output]
+[$img/strategies/buffer_point_circle.png]
+[heading See also]
+\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
+\* [link geometry.reference.strategies.strategy_buffer_point_square point_square]
+}
+ */
+class point_circle
+{
+public :
+ //! \brief Constructs the strategy
+ //! \param count number of points for the created circle
+ explicit point_circle(std::size_t count = 90)
+ : m_count(count)
+ {}
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+ //! Fills output_range with a circle around point using distance_strategy
+ template
+ <
+ typename Point,
+ typename OutputRange,
+ typename DistanceStrategy
+ >
+ inline void apply(Point const& point,
+ DistanceStrategy const& distance_strategy,
+ OutputRange& output_range) const
+ {
+ typedef typename boost::range_value<OutputRange>::type output_point_type;
+
+ typedef typename geometry::select_most_precise
+ <
+ typename geometry::select_most_precise
+ <
+ typename geometry::coordinate_type<Point>::type,
+ typename geometry::coordinate_type<output_point_type>::type
+ >::type,
+ double
+ >::type promoted_type;
+
+ promoted_type const buffer_distance = distance_strategy.apply(point, point,
+ strategy::buffer::buffer_side_left);
+
+ promoted_type const two = 2.0;
+ promoted_type const two_pi = two * geometry::math::pi<promoted_type>();
+
+ promoted_type const diff = two_pi / promoted_type(m_count);
+ promoted_type a = 0;
+
+ for (std::size_t i = 0; i < m_count; i++, a -= diff)
+ {
+ output_point_type p;
+ set<0>(p, get<0>(point) + buffer_distance * cos(a));
+ set<1>(p, get<1>(point) + buffer_distance * sin(a));
+ output_range.push_back(p);
+ }
+
+ // Close it:
+ output_range.push_back(output_range.front());
+ }
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+private :
+ std::size_t m_count;
+};
+
+
+}} // namespace strategy::buffer
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_CIRCLE_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/buffer_point_square.hpp b/3party/boost/boost/geometry/strategies/cartesian/buffer_point_square.hpp
new file mode 100644
index 0000000000..37a90c013f
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/buffer_point_square.hpp
@@ -0,0 +1,109 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_SQUARE_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_SQUARE_HPP
+
+#include <cstddef>
+
+#include <boost/range.hpp>
+
+#include <boost/geometry/util/math.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace buffer
+{
+
+/*!
+\brief Create a squared form buffer around a point
+\ingroup strategies
+\details This strategy can be used as PointStrategy for the buffer algorithm.
+ It creates a square from each point, where the point lies in the center.
+ It can be applied for points and multi_points, but also for a linestring (if it is degenerate,
+ so consisting of only one point) and for polygons (if it is degenerate).
+ This strategy is only applicable for Cartesian coordinate systems.
+
+\qbk{
+[heading Example]
+[buffer_point_square]
+[heading Output]
+[$img/strategies/buffer_point_square.png]
+[heading See also]
+\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
+\* [link geometry.reference.strategies.strategy_buffer_point_circle point_circle]
+}
+ */
+class point_square
+{
+ template
+ <
+ typename Point,
+ typename DistanceType,
+ typename OutputRange
+ >
+ inline void add_point(Point const& point,
+ DistanceType const& distance,
+ DistanceType const& x,
+ DistanceType const& y,
+ OutputRange& output_range) const
+ {
+ typename boost::range_value<OutputRange>::type p;
+ set<0>(p, get<0>(point) + x * distance);
+ set<1>(p, get<1>(point) + y * distance);
+ output_range.push_back(p);
+ }
+
+ template
+ <
+ typename Point,
+ typename DistanceType,
+ typename OutputRange
+ >
+ inline void add_points(Point const& point,
+ DistanceType const& distance,
+ OutputRange& output_range) const
+ {
+ add_point(point, distance, -1.0, -1.0, output_range);
+ add_point(point, distance, -1.0, +1.0, output_range);
+ add_point(point, distance, +1.0, +1.0, output_range);
+ add_point(point, distance, +1.0, -1.0, output_range);
+
+ // Close it:
+ output_range.push_back(output_range.front());
+ }
+
+public :
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+ //! Fills output_range with a square around point using distance_strategy
+ template
+ <
+ typename Point,
+ typename DistanceStrategy,
+ typename OutputRange
+ >
+ inline void apply(Point const& point,
+ DistanceStrategy const& distance_strategy,
+ OutputRange& output_range) const
+ {
+ add_points(point, distance_strategy.apply(point, point,
+ strategy::buffer::buffer_side_left), output_range);
+ }
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+};
+
+
+}} // namespace strategy::buffer
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_SQUARE_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/buffer_side_straight.hpp b/3party/boost/boost/geometry/strategies/cartesian/buffer_side_straight.hpp
new file mode 100644
index 0000000000..b5d28e2577
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/buffer_side_straight.hpp
@@ -0,0 +1,102 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_SIDE_STRAIGHT_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_SIDE_STRAIGHT_HPP
+
+#include <cstddef>
+
+#include <boost/assert.hpp>
+
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/select_most_precise.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+#include <boost/geometry/strategies/side.hpp>
+
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace buffer
+{
+
+
+
+/*!
+\brief Let the buffer use straight sides along segments (the default)
+\ingroup strategies
+\details This strategy can be used as SideStrategy for the buffer algorithm.
+ It is currently the only provided strategy for this purpose
+
+\qbk{
+[heading Example]
+See the examples for other buffer strategies\, for example
+[link geometry.reference.strategies.strategy_buffer_join_round join_round]
+[heading See also]
+\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
+}
+ */
+class side_straight
+{
+public :
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+ template
+ <
+ typename Point,
+ typename OutputRange,
+ typename DistanceStrategy
+ >
+ static inline void apply(
+ Point const& input_p1, Point const& input_p2,
+ strategy::buffer::buffer_side_selector side,
+ DistanceStrategy const& distance,
+ OutputRange& output_range)
+ {
+ typedef typename coordinate_type<Point>::type coordinate_type;
+ typedef typename geometry::select_most_precise
+ <
+ coordinate_type,
+ double
+ >::type promoted_type;
+
+ // Generate a block along (left or right of) the segment
+
+ // Simulate a vector d (dx,dy)
+ coordinate_type dx = get<0>(input_p2) - get<0>(input_p1);
+ coordinate_type dy = get<1>(input_p2) - get<1>(input_p1);
+
+ // For normalization [0,1] (=dot product d.d, sqrt)
+ promoted_type const length = geometry::math::sqrt(dx * dx + dy * dy);
+
+ // Because coordinates are not equal, length should not be zero
+ BOOST_ASSERT((! geometry::math::equals(length, 0)));
+
+ // Generate the normalized perpendicular p, to the left (ccw)
+ promoted_type const px = -dy / length;
+ promoted_type const py = dx / length;
+
+ promoted_type const d = distance.apply(input_p1, input_p2, side);
+
+ output_range.resize(2);
+
+ set<0>(output_range.front(), get<0>(input_p1) + px * d);
+ set<1>(output_range.front(), get<1>(input_p1) + py * d);
+ set<0>(output_range.back(), get<0>(input_p2) + px * d);
+ set<1>(output_range.back(), get<1>(input_p2) + py * d);
+ }
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+};
+
+
+}} // namespace strategy::buffer
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_SIDE_STRAIGHT_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/cart_intersect.hpp b/3party/boost/boost/geometry/strategies/cartesian/cart_intersect.hpp
index 678e9d7c26..66af2d2e9c 100644
--- a/3party/boost/boost/geometry/strategies/cartesian/cart_intersect.hpp
+++ b/3party/boost/boost/geometry/strategies/cartesian/cart_intersect.hpp
@@ -1,6 +1,7 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -18,6 +19,9 @@
#include <boost/geometry/arithmetic/determinant.hpp>
#include <boost/geometry/algorithms/detail/assign_values.hpp>
+#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
+#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
+#include <boost/geometry/algorithms/detail/recalculate.hpp>
#include <boost/geometry/util/math.hpp>
#include <boost/geometry/util/select_calculation_type.hpp>
@@ -27,59 +31,24 @@
#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
#include <boost/geometry/strategies/side_info.hpp>
+#include <boost/geometry/strategies/intersection_result.hpp>
-
-namespace boost { namespace geometry
-{
+#include <boost/geometry/policies/robustness/robust_point_type.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-namespace strategy { namespace intersection
-{
+#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
+# include <boost/geometry/io/wkt/write.hpp>
+#endif
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
+namespace boost { namespace geometry
{
-template <std::size_t Dimension, typename Segment, typename T>
-static inline void segment_arrange(Segment const& s, T& s_1, T& s_2, bool& swapped)
-{
- s_1 = get<0, Dimension>(s);
- s_2 = get<1, Dimension>(s);
- if (s_1 > s_2)
- {
- std::swap(s_1, s_2);
- swapped = true;
- }
-}
-template <std::size_t Index, typename Segment>
-inline typename geometry::point_type<Segment>::type get_from_index(
- Segment const& segment)
+namespace strategy { namespace intersection
{
- typedef typename geometry::point_type<Segment>::type point_type;
- point_type point;
- geometry::detail::assign::assign_point_from_index
- <
- Segment, point_type, Index, 0, dimension<Segment>::type::value
- >::apply(segment, point);
- return point;
-}
-}
-#endif
-
-/***
-template <typename T>
-inline std::string rdebug(T const& value)
-{
- if (math::equals(value, 0)) return "'0'";
- if (math::equals(value, 1)) return "'1'";
- if (value < 0) return "<0";
- if (value > 1) return ">1";
- return "<0..1>";
-}
-***/
/*!
\see http://mathworld.wolfram.com/Line-LineIntersection.html
@@ -88,97 +57,91 @@ template <typename Policy, typename CalculationType = void>
struct relate_cartesian_segments
{
typedef typename Policy::return_type return_type;
- typedef typename Policy::segment_type1 segment_type1;
- typedef typename Policy::segment_type2 segment_type2;
- //typedef typename point_type<segment_type1>::type point_type;
- //BOOST_CONCEPT_ASSERT( (concept::Point<point_type>) );
-
- BOOST_CONCEPT_ASSERT( (concept::ConstSegment<segment_type1>) );
- BOOST_CONCEPT_ASSERT( (concept::ConstSegment<segment_type2>) );
+ template <typename D, typename W, typename ResultType>
+ static inline void cramers_rule(D const& dx_a, D const& dy_a,
+ D const& dx_b, D const& dy_b, W const& wx, W const& wy,
+ // out:
+ ResultType& d, ResultType& da)
+ {
+ // Cramers rule
+ d = geometry::detail::determinant<ResultType>(dx_a, dy_a, dx_b, dy_b);
+ da = geometry::detail::determinant<ResultType>(dx_b, dy_b, wx, wy);
+ // Ratio is da/d , collinear if d == 0, intersecting if 0 <= r <= 1
+ // IntersectionPoint = (x1 + r * dx_a, y1 + r * dy_a)
+ }
- typedef typename select_calculation_type
- <segment_type1, segment_type2, CalculationType>::type coordinate_type;
- /// Relate segments a and b
- static inline return_type apply(segment_type1 const& a, segment_type2 const& b)
+ // Relate segments a and b
+ template <typename Segment1, typename Segment2, typename RobustPolicy>
+ static inline return_type apply(Segment1 const& a, Segment2 const& b,
+ RobustPolicy const& robust_policy)
{
- coordinate_type const dx_a = get<1, 0>(a) - get<0, 0>(a); // distance in x-dir
- coordinate_type const dx_b = get<1, 0>(b) - get<0, 0>(b);
- coordinate_type const dy_a = get<1, 1>(a) - get<0, 1>(a); // distance in y-dir
- coordinate_type const dy_b = get<1, 1>(b) - get<0, 1>(b);
- return apply(a, b, dx_a, dy_a, dx_b, dy_b);
- }
+ // type them all as in Segment1 - TODO reconsider this, most precise?
+ typedef typename geometry::point_type<Segment1>::type point_type;
+
+ typedef typename geometry::robust_point_type
+ <
+ point_type, RobustPolicy
+ >::type robust_point_type;
+
+ point_type a0, a1, b0, b1;
+ robust_point_type a0_rob, a1_rob, b0_rob, b1_rob;
+
+ detail::assign_point_from_index<0>(a, a0);
+ detail::assign_point_from_index<1>(a, a1);
+ detail::assign_point_from_index<0>(b, b0);
+ detail::assign_point_from_index<1>(b, b1);
+
+ geometry::recalculate(a0_rob, a0, robust_policy);
+ geometry::recalculate(a1_rob, a1, robust_policy);
+ geometry::recalculate(b0_rob, b0, robust_policy);
+ geometry::recalculate(b1_rob, b1, robust_policy);
+ return apply(a, b, robust_policy, a0_rob, a1_rob, b0_rob, b1_rob);
+ }
- // Relate segments a and b using precalculated differences.
- // This can save two or four subtractions in many cases
- static inline return_type apply(segment_type1 const& a, segment_type2 const& b,
- coordinate_type const& dx_a, coordinate_type const& dy_a,
- coordinate_type const& dx_b, coordinate_type const& dy_b)
+ // The main entry-routine, calculating intersections of segments a / b
+ template <typename Segment1, typename Segment2, typename RobustPolicy, typename RobustPoint>
+ static inline return_type apply(Segment1 const& a, Segment2 const& b,
+ RobustPolicy const& robust_policy,
+ RobustPoint const& robust_a1, RobustPoint const& robust_a2,
+ RobustPoint const& robust_b1, RobustPoint const& robust_b2)
{
- typedef side::side_by_triangle<coordinate_type> side;
- side_info sides;
+ BOOST_CONCEPT_ASSERT( (concept::ConstSegment<Segment1>) );
+ BOOST_CONCEPT_ASSERT( (concept::ConstSegment<Segment2>) );
+
+ boost::ignore_unused_variable_warning(robust_policy);
+
+ typedef typename select_calculation_type
+ <Segment1, Segment2, CalculationType>::type coordinate_type;
+
+ using geometry::detail::equals::equals_point_point;
+ bool const a_is_point = equals_point_point(robust_a1, robust_a2);
+ bool const b_is_point = equals_point_point(robust_b1, robust_b2);
- coordinate_type const zero = 0;
- bool const a_is_point = math::equals(dx_a, zero) && math::equals(dy_a, zero);
- bool const b_is_point = math::equals(dx_b, zero) && math::equals(dy_b, zero);
+ typedef side::side_by_triangle<coordinate_type> side;
if(a_is_point && b_is_point)
{
- if(math::equals(get<1,0>(a), get<1,0>(b)) && math::equals(get<1,1>(a), get<1,1>(b)))
- {
- Policy::degenerate(a, true);
- }
- else
- {
- return Policy::disjoint();
- }
+ return equals_point_point(robust_a1, robust_b2)
+ ? Policy::degenerate(a, true)
+ : Policy::disjoint()
+ ;
}
- bool collinear_use_first = math::abs(dx_a) + math::abs(dx_b) >= math::abs(dy_a) + math::abs(dy_b);
-
- sides.set<0>
- (
- side::apply(detail::get_from_index<0>(b)
- , detail::get_from_index<1>(b)
- , detail::get_from_index<0>(a)),
- side::apply(detail::get_from_index<0>(b)
- , detail::get_from_index<1>(b)
- , detail::get_from_index<1>(a))
- );
- sides.set<1>
- (
- side::apply(detail::get_from_index<0>(a)
- , detail::get_from_index<1>(a)
- , detail::get_from_index<0>(b)),
- side::apply(detail::get_from_index<0>(a)
- , detail::get_from_index<1>(a)
- , detail::get_from_index<1>(b))
- );
+ side_info sides;
+ sides.set<0>(side::apply(robust_b1, robust_b2, robust_a1),
+ side::apply(robust_b1, robust_b2, robust_a2));
+ sides.set<1>(side::apply(robust_a1, robust_a2, robust_b1),
+ side::apply(robust_a1, robust_a2, robust_b2));
bool collinear = sides.collinear();
- robustness_verify_collinear(a, b, a_is_point, b_is_point, sides, collinear);
- robustness_verify_meeting(a, b, sides, collinear, collinear_use_first);
-
if (sides.same<0>() || sides.same<1>())
{
// Both points are at same side of other segment, we can leave
- if (robustness_verify_same_side(a, b, sides))
- {
- return Policy::disjoint();
- }
- }
-
- // Degenerate cases: segments of single point, lying on other segment, non disjoint
- if (a_is_point)
- {
- return Policy::degenerate(a, true);
- }
- if (b_is_point)
- {
- return Policy::degenerate(b, false);
+ return Policy::disjoint();
}
typedef typename select_most_precise
@@ -186,568 +149,215 @@ struct relate_cartesian_segments
coordinate_type, double
>::type promoted_type;
- // r: ratio 0-1 where intersection divides A/B
- // (only calculated for non-collinear segments)
- promoted_type r;
- if (! collinear)
- {
- // Calculate determinants - Cramers rule
- coordinate_type const wx = get<0, 0>(a) - get<0, 0>(b);
- coordinate_type const wy = get<0, 1>(a) - get<0, 1>(b);
- coordinate_type const d = geometry::detail::determinant<coordinate_type>(dx_a, dy_a, dx_b, dy_b);
- coordinate_type const da = geometry::detail::determinant<coordinate_type>(dx_b, dy_b, wx, wy);
-
- coordinate_type const zero = coordinate_type();
- if (math::equals(d, zero))
- {
- // This is still a collinear case (because of FP imprecision this can occur here)
- // sides.debug();
- sides.set<0>(0,0);
- sides.set<1>(0,0);
- collinear = true;
- }
- else
- {
- r = promoted_type(da) / promoted_type(d);
-
- if (! robustness_verify_r(a, b, r))
- {
- return Policy::disjoint();
- }
-
- //robustness_handle_meeting(a, b, sides, dx_a, dy_a, wx, wy, d, r);
-
- if (robustness_verify_disjoint_at_one_collinear(a, b, sides))
- {
- return Policy::disjoint();
- }
-
- }
- }
+ typedef typename geometry::coordinate_type
+ <
+ RobustPoint
+ >::type robust_coordinate_type;
- if(collinear)
- {
- if (collinear_use_first)
- {
- return relate_collinear<0>(a, b);
- }
- else
- {
- // Y direction contains larger segments (maybe dx is zero)
- return relate_collinear<1>(a, b);
- }
- }
+ typedef typename segment_ratio_type
+ <
+ typename geometry::point_type<Segment1>::type, // TODO: most precise point?
+ RobustPolicy
+ >::type ratio_type;
- return Policy::segments_intersect(sides, r,
- dx_a, dy_a, dx_b, dy_b,
- a, b);
- }
+ segment_intersection_info
+ <
+ coordinate_type,
+ promoted_type,
+ ratio_type
+ > sinfo;
-private :
+ sinfo.dx_a = get<1, 0>(a) - get<0, 0>(a); // distance in x-dir
+ sinfo.dx_b = get<1, 0>(b) - get<0, 0>(b);
+ sinfo.dy_a = get<1, 1>(a) - get<0, 1>(a); // distance in y-dir
+ sinfo.dy_b = get<1, 1>(b) - get<0, 1>(b);
+ robust_coordinate_type const robust_dx_a = get<0>(robust_a2) - get<0>(robust_a1);
+ robust_coordinate_type const robust_dx_b = get<0>(robust_b2) - get<0>(robust_b1);
+ robust_coordinate_type const robust_dy_a = get<1>(robust_a2) - get<1>(robust_a1);
+ robust_coordinate_type const robust_dy_b = get<1>(robust_b2) - get<1>(robust_b1);
- // Ratio should lie between 0 and 1
- // Also these three conditions might be of FP imprecision, the segments were actually (nearly) collinear
- template <typename T>
- static inline bool robustness_verify_r(
- segment_type1 const& a, segment_type2 const& b,
- T& r)
- {
- T const zero = 0;
- T const one = 1;
- if (r < zero || r > one)
+ // r: ratio 0-1 where intersection divides A/B
+ // (only calculated for non-collinear segments)
+ if (! collinear)
{
- if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b))
- {
- // Can still be disjoint (even if not one is left or right from another)
- // This is e.g. in case #snake4 of buffer test.
- return false;
- }
-
- //std::cout << "ROBUSTNESS: correction of r " << r << std::endl;
- // sides.debug();
-
- // ROBUSTNESS: the r value can in epsilon-cases much larger than 1, while (with perfect arithmetic)
- // it should be one. It can be 1.14 or even 1.98049 or 2 (while still intersecting)
+ robust_coordinate_type robust_da0, robust_da;
+ robust_coordinate_type robust_db0, robust_db;
- // If segments are crossing (we can see that with the sides)
- // and one is inside the other, there must be an intersection point.
- // We correct for that.
- // This is (only) in case #ggl_list_20110820_christophe in unit tests
+ cramers_rule(robust_dx_a, robust_dy_a, robust_dx_b, robust_dy_b,
+ get<0>(robust_a1) - get<0>(robust_b1),
+ get<1>(robust_a1) - get<1>(robust_b1),
+ robust_da0, robust_da);
- // If segments are touching (two sides zero), of course they should intersect
- // This is (only) in case #buffer_rt_i in the unit tests)
+ cramers_rule(robust_dx_b, robust_dy_b, robust_dx_a, robust_dy_a,
+ get<0>(robust_b1) - get<0>(robust_a1),
+ get<1>(robust_b1) - get<1>(robust_a1),
+ robust_db0, robust_db);
- // If one touches in the middle, they also should intersect (#buffer_rt_j)
-
- // Note that even for ttmath r is occasionally > 1, e.g. 1.0000000000000000000000036191231203575
-
- if (r > one)
- {
- r = one;
- }
- else if (r < zero)
- {
- r = zero;
- }
- }
- return true;
- }
-
- static inline void robustness_verify_collinear(
- segment_type1 const& , segment_type2 const& ,
- bool a_is_point, bool b_is_point,
- side_info& sides,
- bool& collinear)
- {
- if ((sides.zero<0>() && ! b_is_point && ! sides.zero<1>()) || (sides.zero<1>() && ! a_is_point && ! sides.zero<0>()))
- {
- // If one of the segments is collinear, the other must be as well.
- // So handle it as collinear.
- // (In float/double epsilon margins it can easily occur that one or two of them are -1/1)
- // sides.debug();
- sides.set<0>(0,0);
- sides.set<1>(0,0);
- collinear = true;
- }
- }
-
- static inline void robustness_verify_meeting(
- segment_type1 const& a, segment_type2 const& b,
- side_info& sides,
- bool& collinear, bool& collinear_use_first)
- {
- if (sides.meeting())
- {
- // If two segments meet each other at their segment-points, two sides are zero,
- // the other two are not (unless collinear but we don't mean those here).
- // However, in near-epsilon ranges it can happen that two sides are zero
- // but they do not meet at their segment-points.
- // In that case they are nearly collinear and handled as such.
- if (! point_equals
- (
- select(sides.zero_index<0>(), a),
- select(sides.zero_index<1>(), b)
- )
- )
+ if (robust_da0 == 0)
{
+ // If this is the case, no rescaling is done for FP precision.
+ // We set it to collinear, but it indicates a robustness issue.
sides.set<0>(0,0);
sides.set<1>(0,0);
collinear = true;
-
- if (collinear_use_first && analyse_equal<0>(a, b))
- {
- collinear_use_first = false;
- }
- else if (! collinear_use_first && analyse_equal<1>(a, b))
- {
- collinear_use_first = true;
- }
-
- }
- }
- }
-
- // Verifies and if necessary correct missed touch because of robustness
- // This is the case at multi_polygon_buffer unittest #rt_m
- static inline bool robustness_verify_same_side(
- segment_type1 const& a, segment_type2 const& b,
- side_info& sides)
- {
- int corrected = 0;
- if (sides.one_touching<0>())
- {
- if (point_equals(
- select(sides.zero_index<0>(), a),
- select(0, b)
- ))
- {
- sides.correct_to_zero<1, 0>();
- corrected = 1;
}
- if (point_equals
- (
- select(sides.zero_index<0>(), a),
- select(1, b)
- ))
+ else
{
- sides.correct_to_zero<1, 1>();
- corrected = 2;
+ sinfo.robust_ra.assign(robust_da, robust_da0);
+ sinfo.robust_rb.assign(robust_db, robust_db0);
}
}
- else if (sides.one_touching<1>())
+
+ if (collinear)
{
- if (point_equals(
- select(sides.zero_index<1>(), b),
- select(0, a)
- ))
+ bool const collinear_use_first
+ = geometry::math::abs(robust_dx_a) + geometry::math::abs(robust_dx_b)
+ >= geometry::math::abs(robust_dy_a) + geometry::math::abs(robust_dy_b);
+
+ // Degenerate cases: segments of single point, lying on other segment, are not disjoint
+ // This situation is collinear too
+
+ if (collinear_use_first)
{
- sides.correct_to_zero<0, 0>();
- corrected = 3;
+ return relate_collinear<0, ratio_type>(a, b,
+ robust_a1, robust_a2, robust_b1, robust_b2,
+ a_is_point, b_is_point);
}
- if (point_equals
- (
- select(sides.zero_index<1>(), b),
- select(1, a)
- ))
+ else
{
- sides.correct_to_zero<0, 1>();
- corrected = 4;
+ // Y direction contains larger segments (maybe dx is zero)
+ return relate_collinear<1, ratio_type>(a, b,
+ robust_a1, robust_a2, robust_b1, robust_b2,
+ a_is_point, b_is_point);
}
}
- return corrected == 0;
+ return Policy::segments_crosses(sides, sinfo, a, b);
}
- static inline bool robustness_verify_disjoint_at_one_collinear(
- segment_type1 const& a, segment_type2 const& b,
- side_info const& sides)
+private:
+ template
+ <
+ std::size_t Dimension,
+ typename RatioType,
+ typename Segment1,
+ typename Segment2,
+ typename RobustPoint
+ >
+ static inline return_type relate_collinear(Segment1 const& a,
+ Segment2 const& b,
+ RobustPoint const& robust_a1, RobustPoint const& robust_a2,
+ RobustPoint const& robust_b1, RobustPoint const& robust_b2,
+ bool a_is_point, bool b_is_point)
{
- if (sides.one_of_all_zero())
+ if (a_is_point)
{
- if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b))
- {
- return true;
- }
+ return relate_one_degenerate<RatioType>(a,
+ get<Dimension>(robust_a1),
+ get<Dimension>(robust_b1), get<Dimension>(robust_b2),
+ true);
}
- return false;
- }
-
-/*
- // If r is one, or zero, segments should meet and their endpoints.
- // Robustness issue: check if this is really the case.
- // It turns out to be no problem, see buffer test #rt_s1 (and there are many cases generated)
- // It generates an "ends in the middle" situation which is correct.
- template <typename T, typename R>
- static inline void robustness_handle_meeting(segment_type1 const& a, segment_type2 const& b,
- side_info& sides,
- T const& dx_a, T const& dy_a, T const& wx, T const& wy,
- T const& d, R const& r)
- {
- return;
-
- T const db = geometry::detail::determinant<T>(dx_a, dy_a, wx, wy);
-
- R const zero = 0;
- R const one = 1;
- if (math::equals(r, zero) || math::equals(r, one))
+ if (b_is_point)
{
- R rb = db / d;
- if (rb <= 0 || rb >= 1 || math::equals(rb, 0) || math::equals(rb, 1))
- {
- if (sides.one_zero<0>() && ! sides.one_zero<1>()) // or vice versa
- {
-#if defined(BOOST_GEOMETRY_COUNT_INTERSECTION_EQUAL)
- extern int g_count_intersection_equal;
- g_count_intersection_equal++;
-#endif
- sides.debug();
- std::cout << "E r=" << r << " r.b=" << rb << " ";
- }
- }
+ return relate_one_degenerate<RatioType>(b,
+ get<Dimension>(robust_b1),
+ get<Dimension>(robust_a1), get<Dimension>(robust_a2),
+ false);
}
- }
-*/
- template <std::size_t Dimension>
- static inline bool verify_disjoint(segment_type1 const& a,
- segment_type2 const& b)
- {
- coordinate_type a_1, a_2, b_1, b_2;
- bool a_swapped = false, b_swapped = false;
- detail::segment_arrange<Dimension>(a, a_1, a_2, a_swapped);
- detail::segment_arrange<Dimension>(b, b_1, b_2, b_swapped);
- return math::smaller(a_2, b_1) || math::larger(a_1, b_2);
- }
-
- template <typename Segment>
- static inline typename point_type<Segment>::type select(int index, Segment const& segment)
- {
- return index == 0
- ? detail::get_from_index<0>(segment)
- : detail::get_from_index<1>(segment)
- ;
- }
-
- // We cannot use geometry::equals here. Besides that this will be changed
- // to compare segment-coordinate-values directly (not necessary to retrieve point first)
- template <typename Point1, typename Point2>
- static inline bool point_equals(Point1 const& point1, Point2 const& point2)
- {
- return math::equals(get<0>(point1), get<0>(point2))
- && math::equals(get<1>(point1), get<1>(point2))
- ;
- }
-
- // We cannot use geometry::equals here. Besides that this will be changed
- // to compare segment-coordinate-values directly (not necessary to retrieve point first)
- template <typename Point1, typename Point2>
- static inline bool point_equality(Point1 const& point1, Point2 const& point2,
- bool& equals_0, bool& equals_1)
- {
- equals_0 = math::equals(get<0>(point1), get<0>(point2));
- equals_1 = math::equals(get<1>(point1), get<1>(point2));
- return equals_0 && equals_1;
+ return relate_collinear<RatioType>(a, b,
+ get<Dimension>(robust_a1),
+ get<Dimension>(robust_a2),
+ get<Dimension>(robust_b1),
+ get<Dimension>(robust_b2));
}
- template <std::size_t Dimension>
- static inline bool analyse_equal(segment_type1 const& a, segment_type2 const& b)
- {
- coordinate_type const a_1 = geometry::get<0, Dimension>(a);
- coordinate_type const a_2 = geometry::get<1, Dimension>(a);
- coordinate_type const b_1 = geometry::get<0, Dimension>(b);
- coordinate_type const b_2 = geometry::get<1, Dimension>(b);
- return math::equals(a_1, b_1)
- || math::equals(a_2, b_1)
- || math::equals(a_1, b_2)
- || math::equals(a_2, b_2)
- ;
- }
-
- template <std::size_t Dimension>
- static inline return_type relate_collinear(segment_type1 const& a,
- segment_type2 const& b)
+ /// Relate segments known collinear
+ template
+ <
+ typename RatioType,
+ typename Segment1,
+ typename Segment2,
+ typename RobustType
+ >
+ static inline return_type relate_collinear(Segment1 const& a
+ , Segment2 const& b
+ , RobustType oa_1, RobustType oa_2
+ , RobustType ob_1, RobustType ob_2
+ )
{
- coordinate_type a_1, a_2, b_1, b_2;
- bool a_swapped = false, b_swapped = false;
- detail::segment_arrange<Dimension>(a, a_1, a_2, a_swapped);
- detail::segment_arrange<Dimension>(b, b_1, b_2, b_swapped);
- if (math::smaller(a_2, b_1) || math::larger(a_1, b_2))
- //if (a_2 < b_1 || a_1 > b_2)
+ // Calculate the ratios where a starts in b, b starts in a
+ // a1--------->a2 (2..7)
+ // b1----->b2 (5..8)
+ // length_a: 7-2=5
+ // length_b: 8-5=3
+ // b1 is located w.r.t. a at ratio: (5-2)/5=3/5 (on a)
+ // b2 is located w.r.t. a at ratio: (8-2)/5=6/5 (right of a)
+ // a1 is located w.r.t. b at ratio: (2-5)/3=-3/3 (left of b)
+ // a2 is located w.r.t. b at ratio: (7-5)/3=2/3 (on b)
+ // A arrives (a2 on b), B departs (b1 on a)
+
+ // If both are reversed:
+ // a2<---------a1 (7..2)
+ // b2<-----b1 (8..5)
+ // length_a: 2-7=-5
+ // length_b: 5-8=-3
+ // b1 is located w.r.t. a at ratio: (8-7)/-5=-1/5 (before a starts)
+ // b2 is located w.r.t. a at ratio: (5-7)/-5=2/5 (on a)
+ // a1 is located w.r.t. b at ratio: (7-8)/-3=1/3 (on b)
+ // a2 is located w.r.t. b at ratio: (2-8)/-3=6/3 (after b ends)
+
+ // If both one is reversed:
+ // a1--------->a2 (2..7)
+ // b2<-----b1 (8..5)
+ // length_a: 7-2=+5
+ // length_b: 5-8=-3
+ // b1 is located w.r.t. a at ratio: (8-2)/5=6/5 (after a ends)
+ // b2 is located w.r.t. a at ratio: (5-2)/5=3/5 (on a)
+ // a1 is located w.r.t. b at ratio: (2-8)/-3=6/3 (after b ends)
+ // a2 is located w.r.t. b at ratio: (7-8)/-3=1/3 (on b)
+ RobustType const length_a = oa_2 - oa_1; // no abs, see above
+ RobustType const length_b = ob_2 - ob_1;
+
+ RatioType const ra_from(oa_1 - ob_1, length_b);
+ RatioType const ra_to(oa_2 - ob_1, length_b);
+ RatioType const rb_from(ob_1 - oa_1, length_a);
+ RatioType const rb_to(ob_2 - oa_1, length_a);
+
+ if ((ra_from.left() && ra_to.left()) || (ra_from.right() && ra_to.right()))
{
return Policy::disjoint();
}
- return relate_collinear(a, b, a_1, a_2, b_1, b_2, a_swapped, b_swapped);
+
+ return Policy::segments_collinear(a, b, ra_from, ra_to, rb_from, rb_to);
}
- /// Relate segments known collinear
- static inline return_type relate_collinear(segment_type1 const& a
- , segment_type2 const& b
- , coordinate_type a_1, coordinate_type a_2
- , coordinate_type b_1, coordinate_type b_2
- , bool a_swapped, bool b_swapped)
+ /// Relate segments where one is degenerate
+ template
+ <
+ typename RatioType,
+ typename DegenerateSegment,
+ typename RobustType
+ >
+ static inline return_type relate_one_degenerate(
+ DegenerateSegment const& degenerate_segment
+ , RobustType d
+ , RobustType s1, RobustType s2
+ , bool a_degenerate
+ )
{
- // All ca. 150 lines are about collinear rays
- // The intersections, if any, are always boundary points of the segments. No need to calculate anything.
- // However we want to find out HOW they intersect, there are many cases.
- // Most sources only provide the intersection (above) or that there is a collinearity (but not the points)
- // or some spare sources give the intersection points (calculated) but not how they align.
- // This source tries to give everything and still be efficient.
- // It is therefore (and because of the extensive clarification comments) rather long...
-
- // \see http://mpa.itc.it/radim/g50history/CMP/4.2.1-CERL-beta-libes/file475.txt
- // \see http://docs.codehaus.org/display/GEOTDOC/Point+Set+Theory+and+the+DE-9IM+Matrix
- // \see http://mathworld.wolfram.com/Line-LineIntersection.html
-
- // Because of collinearity the case is now one-dimensional and can be checked using intervals
- // This function is called either horizontally or vertically
- // We get then two intervals:
- // a_1-------------a_2 where a_1 < a_2
- // b_1-------------b_2 where b_1 < b_2
- // In all figures below a_1/a_2 denotes arranged intervals, a1-a2 or a2-a1 are still unarranged
-
- // Handle "equal", in polygon neighbourhood comparisons a common case
-
- bool const opposite = a_swapped ^ b_swapped;
- bool const both_swapped = a_swapped && b_swapped;
-
- // Check if segments are equal or opposite equal...
- bool const swapped_a1_eq_b1 = math::equals(a_1, b_1);
- bool const swapped_a2_eq_b2 = math::equals(a_2, b_2);
-
- if (swapped_a1_eq_b1 && swapped_a2_eq_b2)
- {
- return Policy::segment_equal(a, opposite);
- }
-
- bool const swapped_a2_eq_b1 = math::equals(a_2, b_1);
- bool const swapped_a1_eq_b2 = math::equals(a_1, b_2);
-
- bool const a1_eq_b1 = both_swapped ? swapped_a2_eq_b2 : a_swapped ? swapped_a2_eq_b1 : b_swapped ? swapped_a1_eq_b2 : swapped_a1_eq_b1;
- bool const a2_eq_b2 = both_swapped ? swapped_a1_eq_b1 : a_swapped ? swapped_a1_eq_b2 : b_swapped ? swapped_a2_eq_b1 : swapped_a2_eq_b2;
-
- bool const a1_eq_b2 = both_swapped ? swapped_a2_eq_b1 : a_swapped ? swapped_a2_eq_b2 : b_swapped ? swapped_a1_eq_b1 : swapped_a1_eq_b2;
- bool const a2_eq_b1 = both_swapped ? swapped_a1_eq_b2 : a_swapped ? swapped_a1_eq_b1 : b_swapped ? swapped_a2_eq_b2 : swapped_a2_eq_b1;
-
-
-
-
- // The rest below will return one or two intersections.
- // The delegated class can decide which is the intersection point, or two, build the Intersection Matrix (IM)
- // For IM it is important to know which relates to which. So this information is given,
- // without performance penalties to intersection calculation
-
- bool const has_common_points = swapped_a1_eq_b1 || swapped_a1_eq_b2 || swapped_a2_eq_b1 || swapped_a2_eq_b2;
-
-
- // "Touch" -> one intersection point -> one but not two common points
- // --------> A (or B)
- // <---------- B (or A)
- // a_2==b_1 (b_2==a_1 or a_2==b1)
-
- // The check a_2/b_1 is necessary because it excludes cases like
- // ------->
- // --->
- // ... which are handled lateron
-
- // Corresponds to 4 cases, of which the equal points are determined above
- // #1: a1---->a2 b1--->b2 (a arrives at b's border)
- // #2: a2<----a1 b2<---b1 (b arrives at a's border)
- // #3: a1---->a2 b2<---b1 (both arrive at each others border)
- // #4: a2<----a1 b1--->b2 (no arrival at all)
- // Where the arranged forms have two forms:
- // a_1-----a_2/b_1-------b_2 or reverse (B left of A)
- if ((swapped_a2_eq_b1 || swapped_a1_eq_b2) && ! swapped_a1_eq_b1 && ! swapped_a2_eq_b2)
- {
- if (a2_eq_b1) return Policy::collinear_touch(get<1, 0>(a), get<1, 1>(a), 0, -1);
- if (a1_eq_b2) return Policy::collinear_touch(get<0, 0>(a), get<0, 1>(a), -1, 0);
- if (a2_eq_b2) return Policy::collinear_touch(get<1, 0>(a), get<1, 1>(a), 0, 0);
- if (a1_eq_b1) return Policy::collinear_touch(get<0, 0>(a), get<0, 1>(a), -1, -1);
- }
-
-
- // "Touch/within" -> there are common points and also an intersection of interiors:
- // Corresponds to many cases:
- // #1a: a1------->a2 #1b: a1-->a2
- // b1--->b2 b1------->b2
- // #2a: a2<-------a1 #2b: a2<--a1
- // b1--->b2 b1------->b2
- // #3a: a1------->a2 #3b: a1-->a2
- // b2<---b1 b2<-------b1
- // #4a: a2<-------a1 #4b: a2<--a1
- // b2<---b1 b2<-------b1
-
- // Note: next cases are similar and handled by the code
- // #4c: a1--->a2
- // b1-------->b2
- // #4d: a1-------->a2
- // b1-->b2
-
- // For case 1-4: a_1 < (b_1 or b_2) < a_2, two intersections are equal to segment B
- // For case 5-8: b_1 < (a_1 or a_2) < b_2, two intersections are equal to segment A
- if (has_common_points)
- {
- // Either A is in B, or B is in A, or (in case of robustness/equals)
- // both are true, see below
- bool a_in_b = (b_1 < a_1 && a_1 < b_2) || (b_1 < a_2 && a_2 < b_2);
- bool b_in_a = (a_1 < b_1 && b_1 < a_2) || (a_1 < b_2 && b_2 < a_2);
-
- if (a_in_b && b_in_a)
- {
- // testcase "ggl_list_20110306_javier"
- // In robustness it can occur that a point of A is inside B AND a point of B is inside A,
- // still while has_common_points is true (so one point equals the other).
- // If that is the case we select on length.
- coordinate_type const length_a = geometry::math::abs(a_1 - a_2);
- coordinate_type const length_b = geometry::math::abs(b_1 - b_2);
- if (length_a > length_b)
- {
- a_in_b = false;
- }
- else
- {
- b_in_a = false;
- }
- }
-
- int const arrival_a = a_in_b ? 1 : -1;
- if (a2_eq_b2) return Policy::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, 0, 0, false);
- if (a1_eq_b2) return Policy::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, arrival_a, 0, true);
- if (a2_eq_b1) return Policy::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, 0, -arrival_a, true);
- if (a1_eq_b1) return Policy::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, arrival_a, -arrival_a, false);
- }
-
-
-
- // "Inside", a completely within b or b completely within a
- // 2 cases:
- // case 1:
- // a_1---a_2 -> take A's points as intersection points
- // b_1------------b_2
- // case 2:
- // a_1------------a_2
- // b_1---b_2 -> take B's points
- if (a_1 > b_1 && a_2 < b_2)
- {
- // A within B
- return Policy::collinear_a_in_b(a, opposite);
- }
- if (b_1 > a_1 && b_2 < a_2)
- {
- // B within A
- return Policy::collinear_b_in_a(b, opposite);
- }
-
-
- /*
-
- Now that all cases with equal,touch,inside,disjoint,
- degenerate are handled the only thing left is an overlap
-
- Either a1 is between b1,b2
- or a2 is between b1,b2 (a2 arrives)
-
- Next table gives an overview.
- The IP's are ordered following the line A1->A2
-
- | |
- | a_2 in between | a_1 in between
- | |
- -----+---------------------------------+--------------------------
- | a1--------->a2 | a1--------->a2
- | b1----->b2 | b1----->b2
- | (b1,a2), a arrives | (a1,b2), b arrives
- | |
- -----+---------------------------------+--------------------------
- a sw.| a2<---------a1* | a2<---------a1*
- | b1----->b2 | b1----->b2
- | (a1,b1), no arrival | (b2,a2), a and b arrive
- | |
- -----+---------------------------------+--------------------------
- | a1--------->a2 | a1--------->a2
- b sw.| b2<-----b1 | b2<-----b1
- | (b2,a2), a and b arrive | (a1,b1), no arrival
- | |
- -----+---------------------------------+--------------------------
- a sw.| a2<---------a1* | a2<---------a1*
- b sw.| b2<-----b1 | b2<-----b1
- | (a1,b2), b arrives | (b1,a2), a arrives
- | |
- -----+---------------------------------+--------------------------
- * Note that a_1 < a_2, and a1 <> a_1; if a is swapped,
- the picture might seem wrong but it (supposed to be) is right.
- */
-
- if (b_1 < a_2 && a_2 < b_2)
- {
- // Left column, from bottom to top
- return
- both_swapped ? Policy::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<1, 0>(b), get<1, 1>(b), -1, 1, opposite)
- : b_swapped ? Policy::collinear_overlaps(get<1, 0>(b), get<1, 1>(b), get<1, 0>(a), get<1, 1>(a), 1, 1, opposite)
- : a_swapped ? Policy::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<0, 0>(b), get<0, 1>(b), -1, -1, opposite)
- : Policy::collinear_overlaps(get<0, 0>(b), get<0, 1>(b), get<1, 0>(a), get<1, 1>(a), 1, -1, opposite)
- ;
- }
- if (b_1 < a_1 && a_1 < b_2)
- {
- // Right column, from bottom to top
- return
- both_swapped ? Policy::collinear_overlaps(get<0, 0>(b), get<0, 1>(b), get<1, 0>(a), get<1, 1>(a), 1, -1, opposite)
- : b_swapped ? Policy::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<0, 0>(b), get<0, 1>(b), -1, -1, opposite)
- : a_swapped ? Policy::collinear_overlaps(get<1, 0>(b), get<1, 1>(b), get<1, 0>(a), get<1, 1>(a), 1, 1, opposite)
- : Policy::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<1, 0>(b), get<1, 1>(b), -1, 1, opposite)
- ;
- }
- // Nothing should goes through. If any we have made an error
- // std::cout << "Robustness issue, non-logical behaviour" << std::endl;
- return Policy::error("Robustness issue, non-logical behaviour");
+ // Calculate the ratios where ds starts in s
+ // a1--------->a2 (2..6)
+ // b1/b2 (4..4)
+ // Ratio: (4-2)/(6-2)
+ RatioType const ratio(d - s1, s2 - s1);
+ return Policy::one_degenerate(degenerate_segment, ratio, a_degenerate);
}
};
}} // namespace strategy::intersection
-
-
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/strategies/cartesian/centroid_average.hpp b/3party/boost/boost/geometry/strategies/cartesian/centroid_average.hpp
new file mode 100644
index 0000000000..76e2f7144c
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/centroid_average.hpp
@@ -0,0 +1,114 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
+
+
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/arithmetic/arithmetic.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/strategies/centroid.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace centroid
+{
+
+
+/*!
+\brief Centroid calculation taking average of points
+\ingroup strategies
+*/
+template
+<
+ typename PointCentroid,
+ typename Point = PointCentroid
+>
+class average
+{
+private :
+
+ /*! subclass to keep state */
+ class sum
+ {
+ friend class average;
+ int count;
+ PointCentroid centroid;
+
+ public :
+ inline sum()
+ : count(0)
+ {
+ assign_zero(centroid);
+ }
+ };
+
+public :
+ typedef sum state_type;
+ typedef PointCentroid centroid_point_type;
+ typedef Point point_type;
+
+ static inline void apply(Point const& p, sum& state)
+ {
+ add_point(state.centroid, p);
+ state.count++;
+ }
+
+ static inline void result(sum const& state, PointCentroid& centroid)
+ {
+ centroid = state.centroid;
+ divide_value(centroid, state.count);
+ }
+
+};
+
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+
+
+namespace services
+{
+
+template <typename Point, std::size_t DimensionCount, typename Geometry>
+struct default_strategy
+<
+ cartesian_tag,
+ pointlike_tag,
+ DimensionCount,
+ Point,
+ Geometry
+>
+{
+ typedef average
+ <
+ Point,
+ typename point_type<Geometry>::type
+ > type;
+};
+
+} // namespace services
+
+#endif
+
+
+}} // namespace strategy::centroid
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp b/3party/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp
index 8b42715e0b..f199fb80e5 100644
--- a/3party/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp
+++ b/3party/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp
@@ -38,17 +38,26 @@ namespace strategy { namespace centroid
/*!
-\brief Centroid calculation using algorith Bashein / Detmer
+\brief Centroid calculation using algorithm Bashein / Detmer
\ingroup strategies
\details Calculates centroid using triangulation method published by
Bashein / Detmer
\tparam Point point type of centroid to calculate
\tparam PointOfSegment point type of segments, defaults to Point
-\par Concepts for Point and PointOfSegment:
-- specialized point_traits class
+\tparam CalculationType \tparam_calculation
+
\author Adapted from "Centroid of a Polygon" by
Gerard Bashein and Paul R. Detmer<em>,
in "Graphics Gems IV", Academic Press, 1994</em>
+
+
+\qbk{
+[heading See also]
+[link geometry.reference.algorithms.centroid.centroid_3_with_strategy centroid (with strategy)]
+}
+*/
+
+/*
\par Research notes
The algorithm gives the same results as Oracle and PostGIS but
differs from MySQL
@@ -100,12 +109,6 @@ Statements:
, mdsys.sdo_dim_array(mdsys.sdo_dim_element('x',0,10,.00000005)
,mdsys.sdo_dim_element('y',0,10,.00000005)))
from dual
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.centroid.centroid_3_with_strategy centroid (with strategy)]
-}
-
*/
template
<
@@ -151,9 +154,7 @@ private :
, sum_a2(calculation_type())
, sum_x(calculation_type())
, sum_y(calculation_type())
- {
- typedef calculation_type ct;
- }
+ {}
};
public :
diff --git a/3party/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp b/3party/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp
index 48feae51df..b788738d15 100644
--- a/3party/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp
+++ b/3party/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp
@@ -13,7 +13,8 @@
#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_WEIGHTED_LENGTH_HPP
#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_WEIGHTED_LENGTH_HPP
-#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/algorithms/detail/distance/interface.hpp>
+#include <boost/geometry/algorithms/detail/distance/point_to_geometry.hpp>
#include <boost/geometry/arithmetic/arithmetic.hpp>
#include <boost/geometry/util/select_most_precise.hpp>
#include <boost/geometry/strategies/centroid.hpp>
diff --git a/3party/boost/boost/geometry/strategies/cartesian/distance_comparable_to_regular.hpp b/3party/boost/boost/geometry/strategies/cartesian/distance_comparable_to_regular.hpp
new file mode 100644
index 0000000000..cf432ee82a
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/distance_comparable_to_regular.hpp
@@ -0,0 +1,107 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_COMPARABLE_TO_REGULAR_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_COMPARABLE_TO_REGULAR_HPP
+
+
+#include <cmath>
+#include <boost/geometry/strategies/distance_comparable_to_regular.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/util/math.hpp>
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace distance
+{
+
+
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+namespace services
+{
+
+
+template
+<
+ typename ComparableStrategy,
+ typename Strategy,
+ typename Geometry1,
+ typename Geometry2
+>
+struct comparable_to_regular
+ <
+ ComparableStrategy, Strategy,
+ Geometry1, Geometry2,
+ cartesian_tag, cartesian_tag
+ >
+{
+ typedef typename return_type
+ <
+ Strategy,
+ typename point_type<Geometry1>::type,
+ typename point_type<Geometry2>::type
+ >::type calculation_type;
+
+ typedef typename return_type
+ <
+ ComparableStrategy,
+ typename point_type<Geometry1>::type,
+ typename point_type<Geometry2>::type
+ >::type comparable_calculation_type;
+
+ static inline calculation_type apply(comparable_calculation_type const& cd)
+ {
+ return math::sqrt( boost::numeric_cast<calculation_type>(cd) );
+ }
+};
+
+
+
+template <typename ComparableStrategy, typename Geometry1, typename Geometry2>
+struct comparable_to_regular
+ <
+ ComparableStrategy,
+ ComparableStrategy,
+ Geometry1,
+ Geometry2,
+ cartesian_tag,
+ cartesian_tag
+ >
+{
+ typedef typename return_type
+ <
+ ComparableStrategy,
+ typename point_type<Geometry1>::type,
+ typename point_type<Geometry2>::type
+ >::type comparable_calculation_type;
+
+ static inline comparable_calculation_type
+ apply(comparable_calculation_type const& cd)
+ {
+ return cd;
+ }
+};
+
+
+
+
+
+
+
+} // namespace services
+#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+
+
+}} // namespace strategy::distance
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_COMPARABLE_TO_REGULAR_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp b/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp
index 9cff4d8afb..dff4a77f6f 100644
--- a/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp
+++ b/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -44,14 +49,11 @@ namespace boost { namespace geometry
namespace strategy { namespace distance
{
-
/*!
\brief Strategy for distance point to segment
\ingroup strategies
\details Calculates distance using projected-point method, and (optionally) Pythagoras
\author Adapted from: http://geometryalgorithms.com/Archive/algorithm_0102/algorithm_0102.htm
-\tparam Point \tparam_point
-\tparam PointOfSegment \tparam_segment_point
\tparam CalculationType \tparam_calculation
\tparam Strategy underlying point-point distance strategy
\par Concepts for Strategy:
@@ -67,10 +69,8 @@ namespace strategy { namespace distance
*/
template
<
- typename Point,
- typename PointOfSegment = Point,
typename CalculationType = void,
- typename Strategy = pythagoras<Point, PointOfSegment, CalculationType>
+ typename Strategy = pythagoras<CalculationType>
>
class projected_point
{
@@ -81,47 +81,43 @@ public :
// Integer coordinates can still result in FP distances.
// There is a division, which must be represented in FP.
// So promote.
- typedef typename promote_floating_point
- <
- typename strategy::distance::services::return_type
- <
- Strategy
- >::type
- >::type calculation_type;
-
-private :
-
- // A projected point of points in Integer coordinates must be able to be
- // represented in FP.
- typedef model::point
- <
- calculation_type,
- dimension<PointOfSegment>::value,
- typename coordinate_system<PointOfSegment>::type
- > fp_point_type;
-
- // For convenience
- typedef fp_point_type fp_vector_type;
-
- // We have to use a strategy using FP coordinates (fp-type) which is
- // not always the same as Strategy (defined as point_strategy_type)
- // So we create a "similar" one
- typedef typename strategy::distance::services::similar_type
- <
- Strategy,
- Point,
- fp_point_type
- >::type fp_strategy_type;
+ template <typename Point, typename PointOfSegment>
+ struct calculation_type
+ : promote_floating_point
+ <
+ typename strategy::distance::services::return_type
+ <
+ Strategy,
+ Point,
+ PointOfSegment
+ >::type
+ >
+ {};
public :
- inline calculation_type apply(Point const& p,
- PointOfSegment const& p1, PointOfSegment const& p2) const
+ template <typename Point, typename PointOfSegment>
+ inline typename calculation_type<Point, PointOfSegment>::type
+ apply(Point const& p, PointOfSegment const& p1, PointOfSegment const& p2) const
{
assert_dimension_equal<Point, PointOfSegment>();
- /*
- Algorithm [p1: (x1,y1), p2: (x2,y2), p: (px,py)]
+ typedef typename calculation_type<Point, PointOfSegment>::type calculation_type;
+
+ // A projected point of points in Integer coordinates must be able to be
+ // represented in FP.
+ typedef model::point
+ <
+ calculation_type,
+ dimension<PointOfSegment>::value,
+ typename coordinate_system<PointOfSegment>::type
+ > fp_point_type;
+
+ // For convenience
+ typedef fp_point_type fp_vector_type;
+
+ /*
+ Algorithm [p: (px,py), p1: (x1,y1), p2: (x2,y2)]
VECTOR v(x2 - x1, y2 - y1)
VECTOR w(px - x1, py - y1)
c1 = w . v
@@ -132,12 +128,13 @@ public :
// v is multiplied below with a (possibly) FP-value, so should be in FP
// For consistency we define w also in FP
- fp_vector_type v, w;
+ fp_vector_type v, w, projected;
geometry::convert(p2, v);
geometry::convert(p, w);
- subtract_point(v, p1);
- subtract_point(w, p1);
+ geometry::convert(p1, projected);
+ subtract_point(v, projected);
+ subtract_point(w, projected);
Strategy strategy;
boost::ignore_unused_variable_warning(strategy);
@@ -157,21 +154,10 @@ public :
// See above, c1 > 0 AND c2 > c1 so: c2 != 0
calculation_type const b = c1 / c2;
- fp_strategy_type fp_strategy
- = strategy::distance::services::get_similar
- <
- Strategy, Point, fp_point_type
- >::apply(strategy);
- boost::ignore_unused_variable_warning(fp_strategy);
-
- fp_point_type projected;
- geometry::convert(p1, projected);
multiply_value(v, b);
add_point(projected, v);
- //std::cout << "distance " << dsv(p) << " .. " << dsv(projected) << std::endl;
-
- return fp_strategy.apply(p, projected);
+ return strategy.apply(p, projected);
}
};
@@ -179,103 +165,59 @@ public :
namespace services
{
-template <typename Point, typename PointOfSegment, typename CalculationType, typename Strategy>
-struct tag<projected_point<Point, PointOfSegment, CalculationType, Strategy> >
+template <typename CalculationType, typename Strategy>
+struct tag<projected_point<CalculationType, Strategy> >
{
typedef strategy_tag_distance_point_segment type;
};
-template <typename Point, typename PointOfSegment, typename CalculationType, typename Strategy>
-struct return_type<projected_point<Point, PointOfSegment, CalculationType, Strategy> >
-{
- typedef typename projected_point<Point, PointOfSegment, CalculationType, Strategy>::calculation_type type;
-};
-
-template <typename Point, typename PointOfSegment, typename CalculationType, typename Strategy>
-struct strategy_point_point<projected_point<Point, PointOfSegment, CalculationType, Strategy> >
-{
- typedef Strategy type;
-};
-
-
-template
-<
- typename Point,
- typename PointOfSegment,
- typename CalculationType,
- typename Strategy,
- typename P1,
- typename P2
->
-struct similar_type<projected_point<Point, PointOfSegment, CalculationType, Strategy>, P1, P2>
-{
- typedef projected_point<P1, P2, CalculationType, Strategy> type;
-};
-
+template <typename CalculationType, typename Strategy, typename P, typename PS>
+struct return_type<projected_point<CalculationType, Strategy>, P, PS>
+ : projected_point<CalculationType, Strategy>::template calculation_type<P, PS>
+{};
-template
-<
- typename Point,
- typename PointOfSegment,
- typename CalculationType,
- typename Strategy,
- typename P1,
- typename P2
->
-struct get_similar<projected_point<Point, PointOfSegment, CalculationType, Strategy>, P1, P2>
-{
- static inline typename similar_type
- <
- projected_point<Point, PointOfSegment, CalculationType, Strategy>, P1, P2
- >::type apply(projected_point<Point, PointOfSegment, CalculationType, Strategy> const& )
- {
- return projected_point<P1, P2, CalculationType, Strategy>();
- }
-};
-template <typename Point, typename PointOfSegment, typename CalculationType, typename Strategy>
-struct comparable_type<projected_point<Point, PointOfSegment, CalculationType, Strategy> >
+template <typename CalculationType, typename Strategy>
+struct comparable_type<projected_point<CalculationType, Strategy> >
{
// Define a projected_point strategy with its underlying point-point-strategy
// being comparable
typedef projected_point
<
- Point,
- PointOfSegment,
CalculationType,
typename comparable_type<Strategy>::type
> type;
};
-template <typename Point, typename PointOfSegment, typename CalculationType, typename Strategy>
-struct get_comparable<projected_point<Point, PointOfSegment, CalculationType, Strategy> >
+template <typename CalculationType, typename Strategy>
+struct get_comparable<projected_point<CalculationType, Strategy> >
{
typedef typename comparable_type
<
- projected_point<Point, PointOfSegment, CalculationType, Strategy>
+ projected_point<CalculationType, Strategy>
>::type comparable_type;
public :
- static inline comparable_type apply(projected_point<Point, PointOfSegment, CalculationType, Strategy> const& )
+ static inline comparable_type apply(projected_point<CalculationType, Strategy> const& )
{
return comparable_type();
}
};
-template <typename Point, typename PointOfSegment, typename CalculationType, typename Strategy>
-struct result_from_distance<projected_point<Point, PointOfSegment, CalculationType, Strategy> >
+template <typename CalculationType, typename Strategy, typename P, typename PS>
+struct result_from_distance<projected_point<CalculationType, Strategy>, P, PS>
{
private :
- typedef typename return_type<projected_point<Point, PointOfSegment, CalculationType, Strategy> >::type return_type;
+ typedef typename return_type<projected_point<CalculationType, Strategy>, P, PS>::type return_type;
public :
template <typename T>
- static inline return_type apply(projected_point<Point, PointOfSegment, CalculationType, Strategy> const& , T const& value)
+ static inline return_type apply(projected_point<CalculationType, Strategy> const& , T const& value)
{
Strategy s;
- return result_from_distance<Strategy>::apply(s, value);
+ return result_from_distance<Strategy, P, PS>::apply(s, value);
}
};
@@ -286,19 +228,21 @@ public :
// of point-to-segment or point-to-linestring.
// Convenient for geographic coordinate systems especially.
template <typename Point, typename PointOfSegment, typename Strategy>
-struct default_strategy<segment_tag, Point, PointOfSegment, cartesian_tag, cartesian_tag, Strategy>
+struct default_strategy
+ <
+ point_tag, segment_tag, Point, PointOfSegment,
+ cartesian_tag, cartesian_tag, Strategy
+ >
{
typedef strategy::distance::projected_point
<
- Point,
- PointOfSegment,
void,
typename boost::mpl::if_
<
boost::is_void<Strategy>,
typename default_strategy
<
- point_tag, Point, PointOfSegment,
+ point_tag, point_tag, Point, PointOfSegment,
cartesian_tag, cartesian_tag
>::type,
Strategy
@@ -306,6 +250,20 @@ struct default_strategy<segment_tag, Point, PointOfSegment, cartesian_tag, carte
> type;
};
+template <typename PointOfSegment, typename Point, typename Strategy>
+struct default_strategy
+ <
+ segment_tag, point_tag, PointOfSegment, Point,
+ cartesian_tag, cartesian_tag, Strategy
+ >
+{
+ typedef typename default_strategy
+ <
+ point_tag, segment_tag, Point, PointOfSegment,
+ cartesian_tag, cartesian_tag, Strategy
+ >::type type;
+};
+
} // namespace services
#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
diff --git a/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp b/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp
new file mode 100644
index 0000000000..c4090044f4
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp
@@ -0,0 +1,316 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_AX_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_AX_HPP
+
+
+#include <algorithm>
+
+#include <boost/concept_check.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits.hpp>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/arithmetic/arithmetic.hpp>
+#include <boost/geometry/arithmetic/dot_product.hpp>
+
+#include <boost/geometry/strategies/tags.hpp>
+#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/default_distance_result.hpp>
+#include <boost/geometry/strategies/cartesian/distance_pythagoras.hpp>
+#include <boost/geometry/strategies/cartesian/distance_projected_point.hpp>
+
+#include <boost/geometry/util/select_coordinate_type.hpp>
+
+// Helper geometry (projected point on line)
+#include <boost/geometry/geometries/point.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+namespace strategy { namespace distance
+{
+
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+template <typename T>
+struct projected_point_ax_result
+{
+ typedef T value_type;
+
+ projected_point_ax_result(T const& c = T(0))
+ : atd(c), xtd(c)
+ {}
+
+ projected_point_ax_result(T const& a, T const& x)
+ : atd(a), xtd(x)
+ {}
+
+ friend inline bool operator<(projected_point_ax_result const& left,
+ projected_point_ax_result const& right)
+ {
+ return left.xtd < right.xtd || left.atd < right.atd;
+ }
+
+ T atd, xtd;
+};
+
+// This less-comparator may be used as a parameter of detail::douglas_peucker.
+// In this simplify strategy distances are compared in 2 places
+// 1. to choose the furthest candidate (md < dist)
+// 2. to check if the candidate is further than max_distance (max_distance < md)
+template <typename Distance>
+class projected_point_ax_less
+{
+public:
+ projected_point_ax_less(Distance const& max_distance)
+ : m_max_distance(max_distance)
+ {}
+
+ inline bool operator()(Distance const& left, Distance const& right) const
+ {
+ //return left.xtd < right.xtd && right.atd < m_max_distance.atd;
+
+ typedef typename Distance::value_type value_type;
+
+ value_type const lx = left.xtd > m_max_distance.xtd ? left.xtd - m_max_distance.xtd : 0;
+ value_type const rx = right.xtd > m_max_distance.xtd ? right.xtd - m_max_distance.xtd : 0;
+ value_type const la = left.atd > m_max_distance.atd ? left.atd - m_max_distance.atd : 0;
+ value_type const ra = right.atd > m_max_distance.atd ? right.atd - m_max_distance.atd : 0;
+
+ value_type const l = (std::max)(lx, la);
+ value_type const r = (std::max)(rx, ra);
+
+ return l < r;
+ }
+private:
+ Distance const& m_max_distance;
+};
+
+// This strategy returns 2-component Point/Segment distance.
+// The ATD (along track distance) is parallel to the Segment
+// and is a distance between Point projected into a line defined by a Segment and the nearest Segment's endpoint.
+// If the projected Point intersects the Segment the ATD is equal to 0.
+// The XTD (cross track distance) is perpendicular to the Segment
+// and is a distance between input Point and its projection.
+// If the Segment has length equal to 0, ATD and XTD has value equal
+// to the distance between the input Point and one of the Segment's endpoints.
+//
+// p3 p4
+// ^ 7
+// | /
+// p1<-----e========e----->p2
+//
+// p1: atd=D, xtd=0
+// p2: atd=D, xtd=0
+// p3: atd=0, xtd=D
+// p4: atd=D/2, xtd=D
+template
+<
+ typename CalculationType = void,
+ typename Strategy = pythagoras<CalculationType>
+>
+class projected_point_ax
+{
+public :
+ template <typename Point, typename PointOfSegment>
+ struct calculation_type
+ : public projected_point<CalculationType, Strategy>
+ ::template calculation_type<Point, PointOfSegment>
+ {};
+
+ template <typename Point, typename PointOfSegment>
+ struct result_type
+ {
+ typedef projected_point_ax_result
+ <
+ typename calculation_type<Point, PointOfSegment>::type
+ > type;
+ };
+
+public :
+
+ template <typename Point, typename PointOfSegment>
+ inline typename result_type<Point, PointOfSegment>::type
+ apply(Point const& p, PointOfSegment const& p1, PointOfSegment const& p2) const
+ {
+ assert_dimension_equal<Point, PointOfSegment>();
+
+ typedef typename calculation_type<Point, PointOfSegment>::type calculation_type;
+
+ // A projected point of points in Integer coordinates must be able to be
+ // represented in FP.
+ typedef model::point
+ <
+ calculation_type,
+ dimension<PointOfSegment>::value,
+ typename coordinate_system<PointOfSegment>::type
+ > fp_point_type;
+
+ // For convenience
+ typedef fp_point_type fp_vector_type;
+
+ /*
+ Algorithm [p: (px,py), p1: (x1,y1), p2: (x2,y2)]
+ VECTOR v(x2 - x1, y2 - y1)
+ VECTOR w(px - x1, py - y1)
+ c1 = w . v
+ c2 = v . v
+ b = c1 / c2
+ RETURN POINT(x1 + b * vx, y1 + b * vy)
+ */
+
+ // v is multiplied below with a (possibly) FP-value, so should be in FP
+ // For consistency we define w also in FP
+ fp_vector_type v, w, projected;
+
+ geometry::convert(p2, v);
+ geometry::convert(p, w);
+ geometry::convert(p1, projected);
+ subtract_point(v, projected);
+ subtract_point(w, projected);
+
+ Strategy strategy;
+ boost::ignore_unused_variable_warning(strategy);
+
+ typename result_type<Point, PointOfSegment>::type result;
+
+ calculation_type const zero = calculation_type();
+ calculation_type const c2 = dot_product(v, v);
+ if ( math::equals(c2, zero) )
+ {
+ result.xtd = strategy.apply(p, projected);
+ // assume that the 0-length segment is perpendicular to the Pt->ProjPt vector
+ result.atd = 0;
+ return result;
+ }
+
+ calculation_type const c1 = dot_product(w, v);
+ calculation_type const b = c1 / c2;
+ multiply_value(v, b);
+ add_point(projected, v);
+
+ result.xtd = strategy.apply(p, projected);
+
+ if (c1 <= zero)
+ {
+ result.atd = strategy.apply(p1, projected);
+ }
+ else if (c2 <= c1)
+ {
+ result.atd = strategy.apply(p2, projected);
+ }
+ else
+ {
+ result.atd = 0;
+ }
+
+ return result;
+ }
+};
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+namespace services
+{
+
+
+template <typename CalculationType, typename Strategy>
+struct tag<detail::projected_point_ax<CalculationType, Strategy> >
+{
+ typedef strategy_tag_distance_point_segment type;
+};
+
+
+template <typename CalculationType, typename Strategy, typename P, typename PS>
+struct return_type<detail::projected_point_ax<CalculationType, Strategy>, P, PS>
+{
+ typedef typename detail::projected_point_ax<CalculationType, Strategy>
+ ::template result_type<P, PS>::type type;
+};
+
+
+template <typename CalculationType, typename Strategy>
+struct comparable_type<detail::projected_point_ax<CalculationType, Strategy> >
+{
+ // Define a projected_point strategy with its underlying point-point-strategy
+ // being comparable
+ typedef detail::projected_point_ax
+ <
+ CalculationType,
+ typename comparable_type<Strategy>::type
+ > type;
+};
+
+
+template <typename CalculationType, typename Strategy>
+struct get_comparable<detail::projected_point_ax<CalculationType, Strategy> >
+{
+ typedef typename comparable_type
+ <
+ detail::projected_point_ax<CalculationType, Strategy>
+ >::type comparable_type;
+public :
+ static inline comparable_type apply(detail::projected_point_ax<CalculationType, Strategy> const& )
+ {
+ return comparable_type();
+ }
+};
+
+
+template <typename CalculationType, typename Strategy, typename P, typename PS>
+struct result_from_distance<detail::projected_point_ax<CalculationType, Strategy>, P, PS>
+{
+private :
+ typedef typename return_type<detail::projected_point_ax<CalculationType, Strategy>, P, PS>::type return_type;
+public :
+ template <typename T>
+ static inline return_type apply(detail::projected_point_ax<CalculationType, Strategy> const& , T const& value)
+ {
+ Strategy s;
+ return_type ret;
+ ret.atd = result_from_distance<Strategy, P, PS>::apply(s, value.atd);
+ ret.xtd = result_from_distance<Strategy, P, PS>::apply(s, value.xtd);
+ return ret;
+ }
+};
+
+
+} // namespace services
+#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+
+
+}} // namespace strategy::distance
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_AX_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp b/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp
index c62cf749ee..77bdc966a6 100644
--- a/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp
+++ b/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp
@@ -22,6 +22,7 @@
#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/util/math.hpp>
#include <boost/geometry/util/calculation_type.hpp>
@@ -37,21 +38,23 @@ namespace strategy { namespace distance
namespace detail
{
-template <typename Point1, typename Point2, size_t I, typename T>
+template <size_t I, typename T>
struct compute_pythagoras
{
+ template <typename Point1, typename Point2>
static inline T apply(Point1 const& p1, Point2 const& p2)
{
T const c1 = boost::numeric_cast<T>(get<I-1>(p1));
T const c2 = boost::numeric_cast<T>(get<I-1>(p2));
T const d = c1 - c2;
- return d * d + compute_pythagoras<Point1, Point2, I-1, T>::apply(p1, p2);
+ return d * d + compute_pythagoras<I-1, T>::apply(p1, p2);
}
};
-template <typename Point1, typename Point2, typename T>
-struct compute_pythagoras<Point1, Point2, 0, T>
+template <typename T>
+struct compute_pythagoras<0, T>
{
+ template <typename Point1, typename Point2>
static inline T apply(Point1 const&, Point2 const&)
{
return boost::numeric_cast<T>(0);
@@ -72,24 +75,26 @@ namespace comparable
\tparam Point2 \tparam_second_point
\tparam CalculationType \tparam_calculation
*/
-template
-<
- typename Point1,
- typename Point2 = Point1,
- typename CalculationType = void
->
+template <typename CalculationType = void>
class pythagoras
{
public :
- typedef typename util::calculation_type::geometric::binary
- <
- Point1,
- Point2,
- CalculationType
- >::type calculation_type;
-
- static inline calculation_type apply(Point1 const& p1, Point2 const& p2)
+ template <typename Point1, typename Point2>
+ struct calculation_type
+ : util::calculation_type::geometric::binary
+ <
+ Point1,
+ Point2,
+ CalculationType,
+ double,
+ double
+ >
+ {};
+
+ template <typename Point1, typename Point2>
+ static inline typename calculation_type<Point1, Point2>::type
+ apply(Point1 const& p1, Point2 const& p2)
{
BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point1>) );
BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point2>) );
@@ -101,9 +106,8 @@ public :
return detail::compute_pythagoras
<
- Point1, Point2,
dimension<Point1>::value,
- calculation_type
+ typename calculation_type<Point1, Point2>::type
>::apply(p1, p2);
}
};
@@ -114,8 +118,6 @@ public :
/*!
\brief Strategy to calculate the distance between two points
\ingroup strategies
-\tparam Point1 \tparam_first_point
-\tparam Point2 \tparam_second_point
\tparam CalculationType \tparam_calculation
\qbk{
@@ -128,22 +130,23 @@ public :
*/
template
<
- typename Point1,
- typename Point2 = Point1,
typename CalculationType = void
>
class pythagoras
{
- typedef comparable::pythagoras<Point1, Point2, CalculationType> comparable_type;
public :
- typedef typename util::calculation_type::geometric::binary
- <
- Point1,
- Point2,
- CalculationType,
- double,
- double // promote integer to double
- >::type calculation_type;
+
+ template <typename P1, typename P2>
+ struct calculation_type
+ : util::calculation_type::geometric::binary
+ <
+ P1,
+ P2,
+ CalculationType,
+ double,
+ double // promote integer to double
+ >
+ {};
/*!
\brief applies the distance calculation using pythagoras
@@ -151,10 +154,18 @@ public :
\param p1 first point
\param p2 second point
*/
- static inline calculation_type apply(Point1 const& p1, Point2 const& p2)
+ template <typename P1, typename P2>
+ static inline typename calculation_type<P1, P2>::type
+ apply(P1 const& p1, P2 const& p2)
{
- calculation_type const t = comparable_type::apply(p1, p2);
- return sqrt(t);
+ // The cast is necessary for MSVC which considers sqrt __int64 as an ambiguous call
+ return math::sqrt
+ (
+ boost::numeric_cast<typename calculation_type<P1, P2>::type>
+ (
+ comparable::pythagoras<CalculationType>::apply(p1, p2)
+ )
+ );
}
};
@@ -163,81 +174,46 @@ public :
namespace services
{
-template <typename Point1, typename Point2, typename CalculationType>
-struct tag<pythagoras<Point1, Point2, CalculationType> >
+template <typename CalculationType>
+struct tag<pythagoras<CalculationType> >
{
typedef strategy_tag_distance_point_point type;
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct return_type<pythagoras<Point1, Point2, CalculationType> >
-{
- typedef typename pythagoras<Point1, Point2, CalculationType>::calculation_type type;
-};
-
-
-template
-<
- typename Point1,
- typename Point2,
- typename CalculationType,
- typename P1,
- typename P2
->
-struct similar_type<pythagoras<Point1, Point2, CalculationType>, P1, P2>
-{
- typedef pythagoras<P1, P2, CalculationType> type;
-};
-
-
-template
-<
- typename Point1,
- typename Point2,
- typename CalculationType,
- typename P1,
- typename P2
->
-struct get_similar<pythagoras<Point1, Point2, CalculationType>, P1, P2>
-{
- static inline typename similar_type
- <
- pythagoras<Point1, Point2, CalculationType>, P1, P2
- >::type apply(pythagoras<Point1, Point2, CalculationType> const& )
- {
- return pythagoras<P1, P2, CalculationType>();
- }
-};
+template <typename CalculationType, typename P1, typename P2>
+struct return_type<distance::pythagoras<CalculationType>, P1, P2>
+ : pythagoras<CalculationType>::template calculation_type<P1, P2>
+{};
-template <typename Point1, typename Point2, typename CalculationType>
-struct comparable_type<pythagoras<Point1, Point2, CalculationType> >
+template <typename CalculationType>
+struct comparable_type<pythagoras<CalculationType> >
{
- typedef comparable::pythagoras<Point1, Point2, CalculationType> type;
+ typedef comparable::pythagoras<CalculationType> type;
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct get_comparable<pythagoras<Point1, Point2, CalculationType> >
+template <typename CalculationType>
+struct get_comparable<pythagoras<CalculationType> >
{
- typedef comparable::pythagoras<Point1, Point2, CalculationType> comparable_type;
+ typedef comparable::pythagoras<CalculationType> comparable_type;
public :
- static inline comparable_type apply(pythagoras<Point1, Point2, CalculationType> const& )
+ static inline comparable_type apply(pythagoras<CalculationType> const& )
{
return comparable_type();
}
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct result_from_distance<pythagoras<Point1, Point2, CalculationType> >
+template <typename CalculationType, typename Point1, typename Point2>
+struct result_from_distance<pythagoras<CalculationType>, Point1, Point2>
{
private :
- typedef typename return_type<pythagoras<Point1, Point2, CalculationType> >::type return_type;
+ typedef typename return_type<pythagoras<CalculationType>, Point1, Point2>::type return_type;
public :
template <typename T>
- static inline return_type apply(pythagoras<Point1, Point2, CalculationType> const& , T const& value)
+ static inline return_type apply(pythagoras<CalculationType> const& , T const& value)
{
return return_type(value);
}
@@ -245,83 +221,48 @@ public :
// Specializations for comparable::pythagoras
-template <typename Point1, typename Point2, typename CalculationType>
-struct tag<comparable::pythagoras<Point1, Point2, CalculationType> >
+template <typename CalculationType>
+struct tag<comparable::pythagoras<CalculationType> >
{
typedef strategy_tag_distance_point_point type;
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct return_type<comparable::pythagoras<Point1, Point2, CalculationType> >
-{
- typedef typename comparable::pythagoras<Point1, Point2, CalculationType>::calculation_type type;
-};
-
-
+template <typename CalculationType, typename P1, typename P2>
+struct return_type<comparable::pythagoras<CalculationType>, P1, P2>
+ : comparable::pythagoras<CalculationType>::template calculation_type<P1, P2>
+{};
-template
-<
- typename Point1,
- typename Point2,
- typename CalculationType,
- typename P1,
- typename P2
->
-struct similar_type<comparable::pythagoras<Point1, Point2, CalculationType>, P1, P2>
-{
- typedef comparable::pythagoras<P1, P2, CalculationType> type;
-};
-
-
-template
-<
- typename Point1,
- typename Point2,
- typename CalculationType,
- typename P1,
- typename P2
->
-struct get_similar<comparable::pythagoras<Point1, Point2, CalculationType>, P1, P2>
-{
- static inline typename similar_type
- <
- comparable::pythagoras<Point1, Point2, CalculationType>, P1, P2
- >::type apply(comparable::pythagoras<Point1, Point2, CalculationType> const& )
- {
- return comparable::pythagoras<P1, P2, CalculationType>();
- }
-};
-template <typename Point1, typename Point2, typename CalculationType>
-struct comparable_type<comparable::pythagoras<Point1, Point2, CalculationType> >
+template <typename CalculationType>
+struct comparable_type<comparable::pythagoras<CalculationType> >
{
- typedef comparable::pythagoras<Point1, Point2, CalculationType> type;
+ typedef comparable::pythagoras<CalculationType> type;
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct get_comparable<comparable::pythagoras<Point1, Point2, CalculationType> >
+template <typename CalculationType>
+struct get_comparable<comparable::pythagoras<CalculationType> >
{
- typedef comparable::pythagoras<Point1, Point2, CalculationType> comparable_type;
+ typedef comparable::pythagoras<CalculationType> comparable_type;
public :
- static inline comparable_type apply(comparable::pythagoras<Point1, Point2, CalculationType> const& )
+ static inline comparable_type apply(comparable::pythagoras<CalculationType> const& )
{
return comparable_type();
}
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct result_from_distance<comparable::pythagoras<Point1, Point2, CalculationType> >
+template <typename CalculationType, typename Point1, typename Point2>
+struct result_from_distance<comparable::pythagoras<CalculationType>, Point1, Point2>
{
private :
- typedef typename return_type<comparable::pythagoras<Point1, Point2, CalculationType> >::type return_type;
+ typedef typename return_type<comparable::pythagoras<CalculationType>, Point1, Point2>::type return_type;
public :
template <typename T>
- static inline return_type apply(comparable::pythagoras<Point1, Point2, CalculationType> const& , T const& value)
+ static inline return_type apply(comparable::pythagoras<CalculationType> const& , T const& value)
{
return_type const v = value;
return v * v;
@@ -330,9 +271,12 @@ public :
template <typename Point1, typename Point2>
-struct default_strategy<point_tag, Point1, Point2, cartesian_tag, cartesian_tag, void>
+struct default_strategy
+ <
+ point_tag, point_tag, Point1, Point2, cartesian_tag, cartesian_tag
+ >
{
- typedef pythagoras<Point1, Point2> type;
+ typedef pythagoras<> type;
};
diff --git a/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp b/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp
new file mode 100644
index 0000000000..8a4234282e
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp
@@ -0,0 +1,338 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_BOX_BOX_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_BOX_BOX_HPP
+
+
+#include <boost/geometry/core/access.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/calculation_type.hpp>
+
+
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace distance
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+template <std::size_t I>
+struct compute_pythagoras_box_box
+{
+ template <typename Box1, typename Box2, typename T>
+ static inline void apply(Box1 const& box1, Box2 const& box2, T& result)
+ {
+ T const b1_min_coord =
+ boost::numeric_cast<T>(geometry::get<min_corner, I-1>(box1));
+ T const b1_max_coord =
+ boost::numeric_cast<T>(geometry::get<max_corner, I-1>(box1));
+
+ T const b2_min_coord =
+ boost::numeric_cast<T>(geometry::get<min_corner, I-1>(box2));
+ T const b2_max_coord =
+ boost::numeric_cast<T>(geometry::get<max_corner, I-1>(box2));
+
+ if ( b1_max_coord < b2_min_coord )
+ {
+ T diff = b2_min_coord - b1_max_coord;
+ result += diff * diff;
+ }
+ if ( b1_min_coord > b2_max_coord )
+ {
+ T diff = b1_min_coord - b2_max_coord;
+ result += diff * diff;
+ }
+
+ compute_pythagoras_box_box<I-1>::apply(box1, box2, result);
+ }
+};
+
+template <>
+struct compute_pythagoras_box_box<0>
+{
+ template <typename Box1, typename Box2, typename T>
+ static inline void apply(Box1 const&, Box2 const&, T&)
+ {
+ }
+};
+
+}
+#endif // DOXYGEN_NO_DETAIL
+
+
+namespace comparable
+{
+
+/*!
+\brief Strategy to calculate comparable distance between two boxes
+\ingroup strategies
+\tparam Box1 \tparam_first_box
+\tparam Box2 \tparam_second_box
+\tparam CalculationType \tparam_calculation
+*/
+template <typename CalculationType = void>
+class pythagoras_box_box
+{
+public :
+
+ template <typename Box1, typename Box2>
+ struct calculation_type
+ {
+ typedef typename util::calculation_type::geometric::binary
+ <
+ Box1,
+ Box2,
+ CalculationType
+ >::type type;
+ };
+
+ template <typename Box1, typename Box2>
+ static inline typename calculation_type<Box1, Box2>::type
+ apply(Box1 const& box1, Box2 const& box2)
+ {
+ BOOST_CONCEPT_ASSERT
+ ( (concept::ConstPoint<typename point_type<Box1>::type>) );
+ BOOST_CONCEPT_ASSERT
+ ( (concept::ConstPoint<typename point_type<Box2>::type>) );
+
+ // Calculate distance using Pythagoras
+ // (Leave comment above for Doxygen)
+
+ assert_dimension_equal<Box1, Box2>();
+
+ typename calculation_type<Box1, Box2>::type result(0);
+
+ detail::compute_pythagoras_box_box
+ <
+ dimension<Box1>::value
+ >::apply(box1, box2, result);
+
+ return result;
+ }
+};
+
+} // namespace comparable
+
+
+/*!
+\brief Strategy to calculate the distance between two boxes
+\ingroup strategies
+\tparam CalculationType \tparam_calculation
+
+\qbk{
+[heading Notes]
+[note Can be used for boxes with two\, three or more dimensions]
+[heading See also]
+[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
+}
+
+*/
+template
+<
+ typename CalculationType = void
+>
+class pythagoras_box_box
+{
+public :
+
+ template <typename Box1, typename Box2>
+ struct calculation_type
+ : util::calculation_type::geometric::binary
+ <
+ Box1,
+ Box2,
+ CalculationType,
+ double,
+ double // promote integer to double
+ >
+ {};
+
+ /*!
+ \brief applies the distance calculation using pythagoras_box_box
+ \return the calculated distance (including taking the square root)
+ \param box1 first box
+ \param box2 second box
+ */
+ template <typename Box1, typename Box2>
+ static inline typename calculation_type<Box1, Box2>::type
+ apply(Box1 const& box1, Box2 const& box2)
+ {
+ // The cast is necessary for MSVC which considers sqrt __int64 as an ambiguous call
+ return math::sqrt
+ (
+ boost::numeric_cast<typename calculation_type
+ <
+ Box1, Box2
+ >::type>
+ (
+ comparable::pythagoras_box_box
+ <
+ CalculationType
+ >::apply(box1, box2)
+ )
+ );
+ }
+};
+
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+namespace services
+{
+
+template <typename CalculationType>
+struct tag<pythagoras_box_box<CalculationType> >
+{
+ typedef strategy_tag_distance_box_box type;
+};
+
+
+template <typename CalculationType, typename Box1, typename Box2>
+struct return_type<distance::pythagoras_box_box<CalculationType>, Box1, Box2>
+ : pythagoras_box_box<CalculationType>::template calculation_type<Box1, Box2>
+{};
+
+
+template <typename CalculationType>
+struct comparable_type<pythagoras_box_box<CalculationType> >
+{
+ typedef comparable::pythagoras_box_box<CalculationType> type;
+};
+
+
+template <typename CalculationType>
+struct get_comparable<pythagoras_box_box<CalculationType> >
+{
+ typedef comparable::pythagoras_box_box<CalculationType> comparable_type;
+public :
+ static inline comparable_type
+ apply(pythagoras_box_box<CalculationType> const& )
+ {
+ return comparable_type();
+ }
+};
+
+
+template <typename CalculationType, typename Box1, typename Box2>
+struct result_from_distance<pythagoras_box_box<CalculationType>, Box1, Box2>
+{
+private:
+ typedef typename return_type
+ <
+ pythagoras_box_box<CalculationType>, Box1, Box2
+ >::type return_type;
+public:
+ template <typename T>
+ static inline return_type
+ apply(pythagoras_box_box<CalculationType> const& , T const& value)
+ {
+ return return_type(value);
+ }
+};
+
+
+// Specializations for comparable::pythagoras_box_box
+template <typename CalculationType>
+struct tag<comparable::pythagoras_box_box<CalculationType> >
+{
+ typedef strategy_tag_distance_box_box type;
+};
+
+
+template <typename CalculationType, typename Box1, typename Box2>
+struct return_type<comparable::pythagoras_box_box<CalculationType>, Box1, Box2>
+ : comparable::pythagoras_box_box
+ <
+ CalculationType
+ >::template calculation_type<Box1, Box2>
+{};
+
+
+
+
+template <typename CalculationType>
+struct comparable_type<comparable::pythagoras_box_box<CalculationType> >
+{
+ typedef comparable::pythagoras_box_box<CalculationType> type;
+};
+
+
+template <typename CalculationType>
+struct get_comparable<comparable::pythagoras_box_box<CalculationType> >
+{
+ typedef comparable::pythagoras_box_box<CalculationType> comparable_type;
+public :
+ static inline comparable_type apply(comparable_type const& )
+ {
+ return comparable_type();
+ }
+};
+
+
+template <typename CalculationType, typename Box1, typename Box2>
+struct result_from_distance
+ <
+ comparable::pythagoras_box_box<CalculationType>, Box1, Box2
+ >
+{
+private :
+ typedef typename return_type
+ <
+ comparable::pythagoras_box_box<CalculationType>, Box1, Box2
+ >::type return_type;
+public :
+ template <typename T>
+ static inline return_type
+ apply(comparable::pythagoras_box_box<CalculationType> const&,
+ T const& value)
+ {
+ return_type const v = value;
+ return v * v;
+ }
+};
+
+
+template <typename BoxPoint1, typename BoxPoint2>
+struct default_strategy
+ <
+ box_tag, box_tag, BoxPoint1, BoxPoint2, cartesian_tag, cartesian_tag
+ >
+{
+ typedef pythagoras_box_box<> type;
+};
+
+
+} // namespace services
+#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+
+
+}} // namespace strategy::distance
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_BOX_BOX_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp b/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp
new file mode 100644
index 0000000000..0ce1d422ee
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp
@@ -0,0 +1,349 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_POINT_BOX_HPP
+#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_POINT_BOX_HPP
+
+
+#include <boost/geometry/core/access.hpp>
+
+#include <boost/geometry/strategies/distance.hpp>
+
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/calculation_type.hpp>
+
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace distance
+{
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+template <size_t I>
+struct compute_pythagoras_point_box
+{
+ template <typename Point, typename Box, typename T>
+ static inline void apply(Point const& point, Box const& box, T& result)
+ {
+ T const p_coord = boost::numeric_cast<T>(geometry::get<I-1>(point));
+ T const b_min_coord =
+ boost::numeric_cast<T>(geometry::get<min_corner, I-1>(box));
+ T const b_max_coord =
+ boost::numeric_cast<T>(geometry::get<max_corner, I-1>(box));
+
+ if ( p_coord < b_min_coord )
+ {
+ T diff = b_min_coord - p_coord;
+ result += diff * diff;
+ }
+ if ( p_coord > b_max_coord )
+ {
+ T diff = p_coord - b_max_coord;
+ result += diff * diff;
+ }
+
+ compute_pythagoras_point_box<I-1>::apply(point, box, result);
+ }
+};
+
+template <>
+struct compute_pythagoras_point_box<0>
+{
+ template <typename Point, typename Box, typename T>
+ static inline void apply(Point const&, Box const&, T&)
+ {
+ }
+};
+
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
+
+namespace comparable
+{
+
+/*!
+ \brief Strategy to calculate comparable distance between a point
+ and a box
+ \ingroup strategies
+ \tparam Point \tparam_first_point
+ \tparam Box \tparam_second_box
+ \tparam CalculationType \tparam_calculation
+*/
+template <typename CalculationType = void>
+class pythagoras_point_box
+{
+public :
+
+ template <typename Point, typename Box>
+ struct calculation_type
+ {
+ typedef typename util::calculation_type::geometric::binary
+ <
+ Point, Box, CalculationType
+ >::type type;
+ };
+
+ template <typename Point, typename Box>
+ static inline typename calculation_type<Point, Box>::type
+ apply(Point const& point, Box const& box)
+ {
+ BOOST_CONCEPT_ASSERT( (concept::ConstPoint<Point>) );
+ BOOST_CONCEPT_ASSERT
+ ( (concept::ConstPoint<typename point_type<Box>::type>) );
+
+ // Calculate distance using Pythagoras
+ // (Leave comment above for Doxygen)
+
+ assert_dimension_equal<Point, Box>();
+
+ typename calculation_type<Point, Box>::type result(0);
+
+ detail::compute_pythagoras_point_box
+ <
+ dimension<Point>::value
+ >::apply(point, box, result);
+
+ return result;
+ }
+};
+
+} // namespace comparable
+
+
+/*!
+\brief Strategy to calculate the distance between a point and a box
+\ingroup strategies
+\tparam CalculationType \tparam_calculation
+
+\qbk{
+[heading Notes]
+[note Can be used for points and boxes with two\, three or more dimensions]
+[heading See also]
+[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
+}
+
+*/
+template
+<
+ typename CalculationType = void
+>
+class pythagoras_point_box
+{
+public :
+
+ template <typename Point, typename Box>
+ struct calculation_type
+ : util::calculation_type::geometric::binary
+ <
+ Point,
+ Box,
+ CalculationType,
+ double,
+ double // promote integer to double
+ >
+ {};
+
+ /*!
+ \brief applies the distance calculation using pythagoras
+ \return the calculated distance (including taking the square root)
+ \param point point
+ \param box box
+ */
+ template <typename Point, typename Box>
+ static inline typename calculation_type<Point, Box>::type
+ apply(Point const& point, Box const& box)
+ {
+ // The cast is necessary for MSVC which considers sqrt __int64 as an ambiguous call
+ return math::sqrt
+ (
+ boost::numeric_cast<typename calculation_type
+ <
+ Point, Box
+ >::type>
+ (
+ comparable::pythagoras_point_box
+ <
+ CalculationType
+ >::apply(point, box)
+ )
+ );
+ }
+};
+
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+namespace services
+{
+
+template <typename CalculationType>
+struct tag<pythagoras_point_box<CalculationType> >
+{
+ typedef strategy_tag_distance_point_box type;
+};
+
+
+template <typename CalculationType, typename Point, typename Box>
+struct return_type<distance::pythagoras_point_box<CalculationType>, Point, Box>
+ : pythagoras_point_box
+ <
+ CalculationType
+ >::template calculation_type<Point, Box>
+{};
+
+
+template <typename CalculationType>
+struct comparable_type<pythagoras_point_box<CalculationType> >
+{
+ typedef comparable::pythagoras_point_box<CalculationType> type;
+};
+
+
+template <typename CalculationType>
+struct get_comparable<pythagoras_point_box<CalculationType> >
+{
+ typedef comparable::pythagoras_point_box<CalculationType> comparable_type;
+public :
+ static inline comparable_type
+ apply(pythagoras_point_box<CalculationType> const& )
+ {
+ return comparable_type();
+ }
+};
+
+
+template <typename CalculationType, typename Point, typename Box>
+struct result_from_distance<pythagoras_point_box<CalculationType>, Point, Box>
+{
+private :
+ typedef typename return_type
+ <
+ pythagoras_point_box<CalculationType>, Point, Box
+ >::type return_type;
+public :
+ template <typename T>
+ static inline return_type
+ apply(pythagoras_point_box<CalculationType> const& , T const& value)
+ {
+ return return_type(value);
+ }
+};
+
+
+// Specializations for comparable::pythagoras_point_box
+template <typename CalculationType>
+struct tag<comparable::pythagoras_point_box<CalculationType> >
+{
+ typedef strategy_tag_distance_point_box type;
+};
+
+
+template <typename CalculationType, typename Point, typename Box>
+struct return_type
+ <
+ comparable::pythagoras_point_box<CalculationType>, Point, Box
+ > : comparable::pythagoras_point_box
+ <
+ CalculationType
+ >::template calculation_type<Point, Box>
+{};
+
+
+
+
+template <typename CalculationType>
+struct comparable_type<comparable::pythagoras_point_box<CalculationType> >
+{
+ typedef comparable::pythagoras_point_box<CalculationType> type;
+};
+
+
+template <typename CalculationType>
+struct get_comparable<comparable::pythagoras_point_box<CalculationType> >
+{
+ typedef comparable::pythagoras_point_box<CalculationType> comparable_type;
+public :
+ static inline comparable_type apply(comparable_type const& )
+ {
+ return comparable_type();
+ }
+};
+
+
+template <typename CalculationType, typename Point, typename Box>
+struct result_from_distance
+ <
+ comparable::pythagoras_point_box<CalculationType>, Point, Box
+ >
+{
+private :
+ typedef typename return_type
+ <
+ comparable::pythagoras_point_box<CalculationType>, Point, Box
+ >::type return_type;
+public :
+ template <typename T>
+ static inline return_type
+ apply(comparable::pythagoras_point_box<CalculationType> const& ,
+ T const& value)
+ {
+ return_type const v = value;
+ return v * v;
+ }
+};
+
+
+template <typename Point, typename BoxPoint>
+struct default_strategy
+ <
+ point_tag, box_tag, Point, BoxPoint, cartesian_tag, cartesian_tag
+ >
+{
+ typedef pythagoras_point_box<> type;
+};
+
+template <typename BoxPoint, typename Point>
+struct default_strategy
+ <
+ box_tag, point_tag, BoxPoint, Point, cartesian_tag, cartesian_tag
+ >
+{
+ typedef typename default_strategy
+ <
+ point_tag, box_tag, Point, BoxPoint, cartesian_tag, cartesian_tag
+ >::type type;
+};
+
+
+} // namespace services
+#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+
+
+}} // namespace strategy::distance
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_POINT_BOX_HPP
diff --git a/3party/boost/boost/geometry/strategies/cartesian/point_in_box.hpp b/3party/boost/boost/geometry/strategies/cartesian/point_in_box.hpp
index 275f7550e4..79f094113d 100644
--- a/3party/boost/boost/geometry/strategies/cartesian/point_in_box.hpp
+++ b/3party/boost/boost/geometry/strategies/cartesian/point_in_box.hpp
@@ -21,9 +21,9 @@
#include <boost/geometry/strategies/within.hpp>
-namespace boost { namespace geometry { namespace strategy
+namespace boost { namespace geometry { namespace strategy
{
-
+
namespace within
{
@@ -60,14 +60,14 @@ struct relate_point_box_loop
{
static inline bool apply(Point const& point, Box const& box)
{
- if (! SubStrategy::apply(get<Dimension>(point),
- get<min_corner, Dimension>(box),
+ if (! SubStrategy::apply(get<Dimension>(point),
+ get<min_corner, Dimension>(box),
get<max_corner, Dimension>(box))
)
{
return false;
}
-
+
return relate_point_box_loop
<
SubStrategy,
@@ -102,12 +102,12 @@ template
>
struct point_in_box
{
- static inline bool apply(Point const& point, Box const& box)
+ static inline bool apply(Point const& point, Box const& box)
{
return relate_point_box_loop
<
SubStrategy,
- Point, Box,
+ Point, Box,
0, dimension<Point>::type::value
>::apply(point, box);
}
@@ -126,13 +126,13 @@ namespace within { namespace services
template <typename Point, typename Box>
struct default_strategy
<
- point_tag, box_tag,
- point_tag, areal_tag,
- cartesian_tag, cartesian_tag,
+ point_tag, box_tag,
+ point_tag, areal_tag,
+ cartesian_tag, cartesian_tag,
Point, Box
>
{
- typedef within::point_in_box<Point, Box> type;
+ typedef within::point_in_box<Point, Box> type;
};
@@ -146,9 +146,9 @@ namespace covered_by { namespace services
template <typename Point, typename Box>
struct default_strategy
<
- point_tag, box_tag,
- point_tag, areal_tag,
- cartesian_tag, cartesian_tag,
+ point_tag, box_tag,
+ point_tag, areal_tag,
+ cartesian_tag, cartesian_tag,
Point, Box
>
{
diff --git a/3party/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp b/3party/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp
index 967090c50a..5d589ffc86 100644
--- a/3party/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp
+++ b/3party/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp
@@ -47,6 +47,30 @@ public :
// Types can be all three different. Therefore it is
// not implemented (anymore) as "segment"
+ template <typename coordinate_type, typename promoted_type, typename P1, typename P2, typename P>
+ static inline promoted_type side_value(P1 const& p1, P2 const& p2, P const& p)
+ {
+ coordinate_type const x = get<0>(p);
+ coordinate_type const y = get<1>(p);
+
+ coordinate_type const sx1 = get<0>(p1);
+ coordinate_type const sy1 = get<1>(p1);
+ coordinate_type const sx2 = get<0>(p2);
+ coordinate_type const sy2 = get<1>(p2);
+
+ promoted_type const dx = sx2 - sx1;
+ promoted_type const dy = sy2 - sy1;
+ promoted_type const dpx = x - sx1;
+ promoted_type const dpy = y - sy1;
+
+ return geometry::detail::determinant<promoted_type>
+ (
+ dx, dy,
+ dpx, dpy
+ );
+
+ }
+
template <typename P1, typename P2, typename P>
static inline int apply(P1 const& p1, P2 const& p2, P const& p)
{
@@ -65,14 +89,6 @@ public :
CalculationType
>::type coordinate_type;
- coordinate_type const x = get<0>(p);
- coordinate_type const y = get<1>(p);
-
- coordinate_type const sx1 = get<0>(p1);
- coordinate_type const sy1 = get<1>(p1);
- coordinate_type const sx2 = get<0>(p2);
- coordinate_type const sy2 = get<1>(p2);
-
// Promote float->double, small int->int
typedef typename select_most_precise
<
@@ -80,23 +96,14 @@ public :
double
>::type promoted_type;
- promoted_type const dx = sx2 - sx1;
- promoted_type const dy = sy2 - sy1;
- promoted_type const dpx = x - sx1;
- promoted_type const dpy = y - sy1;
-
- promoted_type const s
- = geometry::detail::determinant<promoted_type>
- (
- dx, dy,
- dpx, dpy
- );
-
+ promoted_type const s = side_value<coordinate_type, promoted_type>(p1, p2, p);
promoted_type const zero = promoted_type();
- return math::equals(s, zero) ? 0
- : s > zero ? 1
+
+ return math::equals(s, zero) ? 0
+ : s > zero ? 1
: -1;
}
+
};
diff --git a/3party/boost/boost/geometry/strategies/comparable_distance_result.hpp b/3party/boost/boost/geometry/strategies/comparable_distance_result.hpp
new file mode 100644
index 0000000000..a258ddb9b4
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/comparable_distance_result.hpp
@@ -0,0 +1,196 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_COMPARABLE_DISTANCE_RESULT_HPP
+#define BOOST_GEOMETRY_STRATEGIES_COMPARABLE_DISTANCE_RESULT_HPP
+
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector.hpp>
+
+#include <boost/variant/variant_fwd.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/strategies/default_strategy.hpp>
+#include <boost/geometry/strategies/distance.hpp>
+
+#include <boost/geometry/util/compress_variant.hpp>
+#include <boost/geometry/util/transform_variant.hpp>
+#include <boost/geometry/util/combine_if.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace resolve_strategy
+{
+
+template <typename Geometry1, typename Geometry2, typename Strategy>
+struct comparable_distance_result
+ : strategy::distance::services::return_type
+ <
+ typename strategy::distance::services::comparable_type
+ <
+ Strategy
+ >::type,
+ typename point_type<Geometry1>::type,
+ typename point_type<Geometry2>::type
+ >
+{};
+
+template <typename Geometry1, typename Geometry2>
+struct comparable_distance_result<Geometry1, Geometry2, default_strategy>
+ : comparable_distance_result
+ <
+ Geometry1,
+ Geometry2,
+ typename detail::distance::default_strategy
+ <
+ Geometry1, Geometry2
+ >::type
+ >
+{};
+
+} // namespace resolve_strategy
+
+
+namespace resolve_variant
+{
+
+template <typename Geometry1, typename Geometry2, typename Strategy>
+struct comparable_distance_result
+ : resolve_strategy::comparable_distance_result
+ <
+ Geometry1,
+ Geometry2,
+ Strategy
+ >
+{};
+
+
+template
+<
+ typename Geometry1,
+ BOOST_VARIANT_ENUM_PARAMS(typename T),
+ typename Strategy
+>
+struct comparable_distance_result
+ <
+ Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Strategy
+ >
+{
+ // A set of all variant type combinations that are compatible and
+ // implemented
+ typedef typename util::combine_if<
+ typename mpl::vector1<Geometry1>,
+ typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
+ mpl::always<mpl::true_>
+ >::type possible_input_types;
+
+ // The (possibly variant) result type resulting from these combinations
+ typedef typename compress_variant<
+ typename transform_variant<
+ possible_input_types,
+ resolve_strategy::comparable_distance_result<
+ mpl::first<mpl::_>,
+ mpl::second<mpl::_>,
+ Strategy
+ >,
+ mpl::back_inserter<mpl::vector0<> >
+ >::type
+ >::type type;
+};
+
+
+// Distance arguments are commutative
+template
+<
+ BOOST_VARIANT_ENUM_PARAMS(typename T),
+ typename Geometry2,
+ typename Strategy
+>
+struct comparable_distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Geometry2,
+ Strategy
+ > : public comparable_distance_result
+ <
+ Geometry2, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Strategy
+ >
+{};
+
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Strategy>
+struct comparable_distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Strategy
+ >
+{
+ // A set of all variant type combinations that are compatible and
+ // implemented
+ typedef typename util::combine_if
+ <
+ typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
+ typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
+ mpl::always<mpl::true_>
+ >::type possible_input_types;
+
+ // The (possibly variant) result type resulting from these combinations
+ typedef typename compress_variant<
+ typename transform_variant<
+ possible_input_types,
+ resolve_strategy::comparable_distance_result<
+ mpl::first<mpl::_>,
+ mpl::second<mpl::_>,
+ Strategy
+ >,
+ mpl::back_inserter<mpl::vector0<> >
+ >::type
+ >::type type;
+};
+
+} // namespace resolve_variant
+
+
+
+
+
+/*!
+\brief Meta-function defining return type of comparable_distance function
+\ingroup distance
+*/
+template
+<
+ typename Geometry1,
+ typename Geometry2 = Geometry1,
+ typename Strategy = void
+>
+struct comparable_distance_result
+ : resolve_variant::comparable_distance_result
+ <
+ Geometry1, Geometry2, Strategy
+ >
+{};
+
+template <typename Geometry1, typename Geometry2>
+struct comparable_distance_result<Geometry1, Geometry2, void>
+ : comparable_distance_result<Geometry1, Geometry2, default_strategy>
+{};
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_STRATEGIES_COMPARABLE_DISTANCE_RESULT_HPP
diff --git a/3party/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp
index b31f0caa4e..80c21423ef 100644
--- a/3party/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp
+++ b/3party/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp
@@ -46,11 +46,11 @@ class ConvexHullStrategy
{
static void apply()
{
- Strategy const* str;
+ Strategy const* str = 0;
- state_type* st;
- geometry_type* sp;
- std::vector<point_type> *v;
+ state_type* st = 0;
+ geometry_type* sp = 0;
+ std::vector<point_type> *v = 0;
// 4) must implement a method apply, iterating over a range
str->apply(*sp, *st);
diff --git a/3party/boost/boost/geometry/strategies/concepts/distance_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/distance_concept.hpp
index ba347d015a..a0cbbd21ed 100644
--- a/3party/boost/boost/geometry/strategies/concepts/distance_concept.hpp
+++ b/3party/boost/boost/geometry/strategies/concepts/distance_concept.hpp
@@ -18,11 +18,13 @@
#include <iterator>
#include <boost/concept_check.hpp>
+#include <boost/core/ignore_unused.hpp>
#include <boost/geometry/util/parameter_type_of.hpp>
#include <boost/geometry/geometries/concepts/point_concept.hpp>
#include <boost/geometry/geometries/segment.hpp>
+#include <boost/geometry/geometries/point.hpp>
namespace boost { namespace geometry { namespace concept
@@ -33,7 +35,7 @@ namespace boost { namespace geometry { namespace concept
\brief Checks strategy for point-segment-distance
\ingroup distance
*/
-template <typename Strategy>
+template <typename Strategy, typename Point1, typename Point2>
struct PointDistanceStrategy
{
#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
@@ -42,7 +44,7 @@ private :
struct checker
{
template <typename ApplyMethod>
- static void apply(ApplyMethod const&)
+ static void apply(ApplyMethod)
{
// 1: inspect and define both arguments of apply
typedef typename parameter_type_of
@@ -55,68 +57,45 @@ private :
ApplyMethod, 1
>::type ptype2;
- // 2) check if apply-arguments fulfill point concept
- BOOST_CONCEPT_ASSERT
- (
- (concept::ConstPoint<ptype1>)
- );
-
- BOOST_CONCEPT_ASSERT
- (
- (concept::ConstPoint<ptype2>)
- );
-
-
- // 3) must define meta-function return_type
- typedef typename strategy::distance::services::return_type<Strategy>::type rtype;
-
- // 4) must define meta-function "similar_type"
- typedef typename strategy::distance::services::similar_type
+ // 2) must define meta-function return_type
+ typedef typename strategy::distance::services::return_type
<
- Strategy, ptype2, ptype1
- >::type stype;
+ Strategy, ptype1, ptype2
+ >::type rtype;
- // 5) must define meta-function "comparable_type"
+ // 3) must define meta-function "comparable_type"
typedef typename strategy::distance::services::comparable_type
<
Strategy
>::type ctype;
- // 6) must define meta-function "tag"
+ // 4) must define meta-function "tag"
typedef typename strategy::distance::services::tag
<
Strategy
>::type tag;
- // 7) must implement apply with arguments
+ // 5) must implement apply with arguments
Strategy* str = 0;
ptype1 *p1 = 0;
ptype2 *p2 = 0;
rtype r = str->apply(*p1, *p2);
- // 8) must define (meta)struct "get_similar" with apply
- stype s = strategy::distance::services::get_similar
- <
- Strategy,
- ptype2, ptype1
- >::apply(*str);
-
- // 9) must define (meta)struct "get_comparable" with apply
+ // 6) must define (meta)struct "get_comparable" with apply
ctype c = strategy::distance::services::get_comparable
<
Strategy
>::apply(*str);
- // 10) must define (meta)struct "result_from_distance" with apply
+ // 7) must define (meta)struct "result_from_distance" with apply
r = strategy::distance::services::result_from_distance
<
- Strategy
+ Strategy,
+ ptype1, ptype2
>::apply(*str, 1.0);
- boost::ignore_unused_variable_warning(str);
- boost::ignore_unused_variable_warning(s);
- boost::ignore_unused_variable_warning(c);
- boost::ignore_unused_variable_warning(r);
+ boost::ignore_unused<tag>();
+ boost::ignore_unused(str, c, r);
}
};
@@ -125,7 +104,7 @@ private :
public :
BOOST_CONCEPT_USAGE(PointDistanceStrategy)
{
- checker::apply(&Strategy::apply);
+ checker::apply(&Strategy::template apply<Point1, Point2>);
}
#endif
};
@@ -135,7 +114,7 @@ public :
\brief Checks strategy for point-segment-distance
\ingroup strategy_concepts
*/
-template <typename Strategy>
+template <typename Strategy, typename Point, typename PointOfSegment>
struct PointSegmentDistanceStrategy
{
#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
@@ -144,7 +123,7 @@ private :
struct checker
{
template <typename ApplyMethod>
- static void apply(ApplyMethod const&)
+ static void apply(ApplyMethod)
{
typedef typename parameter_type_of
<
@@ -156,27 +135,8 @@ private :
ApplyMethod, 1
>::type sptype;
- // 2) check if apply-arguments fulfill point concept
- BOOST_CONCEPT_ASSERT
- (
- (concept::ConstPoint<ptype>)
- );
-
- BOOST_CONCEPT_ASSERT
- (
- (concept::ConstPoint<sptype>)
- );
-
-
- // 3) must define meta-function return_type
- typedef typename strategy::distance::services::return_type<Strategy>::type rtype;
-
- // 4) must define underlying point-distance-strategy
- typedef typename strategy::distance::services::strategy_point_point<Strategy>::type stype;
- BOOST_CONCEPT_ASSERT
- (
- (concept::PointDistanceStrategy<stype>)
- );
+ // must define meta-function return_type
+ typedef typename strategy::distance::services::return_type<Strategy, ptype, sptype>::type rtype;
Strategy *str = 0;
@@ -194,7 +154,7 @@ private :
public :
BOOST_CONCEPT_USAGE(PointSegmentDistanceStrategy)
{
- checker::apply(&Strategy::apply);
+ checker::apply(&Strategy::template apply<Point, PointOfSegment>);
}
#endif
};
diff --git a/3party/boost/boost/geometry/strategies/concepts/simplify_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/simplify_concept.hpp
index 92e5156b5a..d7f596cfe7 100644
--- a/3party/boost/boost/geometry/strategies/concepts/simplify_concept.hpp
+++ b/3party/boost/boost/geometry/strategies/concepts/simplify_concept.hpp
@@ -18,7 +18,9 @@
#include <iterator>
#include <boost/concept_check.hpp>
+#include <boost/core/ignore_unused.hpp>
+#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/strategies/concepts/distance_concept.hpp>
@@ -30,7 +32,7 @@ namespace boost { namespace geometry { namespace concept
\brief Checks strategy for simplify
\ingroup simplify
*/
-template <typename Strategy>
+template <typename Strategy, typename Point>
struct SimplifyStrategy
{
#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
@@ -44,7 +46,7 @@ private :
struct checker
{
template <typename ApplyMethod>
- static void apply(ApplyMethod const&)
+ static void apply(ApplyMethod)
{
namespace ft = boost::function_types;
typedef typename ft::parameter_types
@@ -59,29 +61,14 @@ private :
boost::mpl::int_<0>
>::type base_index;
- // 1: inspect and define both arguments of apply
- typedef typename boost::remove_const
- <
- typename boost::remove_reference
- <
- typename boost::mpl::at
- <
- parameter_types,
- base_index
- >::type
- >::type
- >::type point_type;
-
-
-
BOOST_CONCEPT_ASSERT
(
- (concept::PointSegmentDistanceStrategy<ds_type>)
+ (concept::PointSegmentDistanceStrategy<ds_type, Point, Point>)
);
Strategy *str = 0;
- std::vector<point_type> const* v1 = 0;
- std::vector<point_type> * v2 = 0;
+ std::vector<Point> const* v1 = 0;
+ std::vector<Point> * v2 = 0;
// 2) must implement method apply with arguments
// - Range
@@ -89,15 +76,15 @@ private :
// - floating point value
str->apply(*v1, std::back_inserter(*v2), 1.0);
- boost::ignore_unused_variable_warning(str);
+ boost::ignore_unused<parameter_types, base_index>();
+ boost::ignore_unused(str);
}
};
public :
BOOST_CONCEPT_USAGE(SimplifyStrategy)
{
- checker::apply(&ds_type::apply);
-
+ checker::apply(&ds_type::template apply<Point, Point>);
}
#endif
};
diff --git a/3party/boost/boost/geometry/strategies/concepts/within_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/within_concept.hpp
index a9684b98e1..8786403712 100644
--- a/3party/boost/boost/geometry/strategies/concepts/within_concept.hpp
+++ b/3party/boost/boost/geometry/strategies/concepts/within_concept.hpp
@@ -143,7 +143,7 @@ class WithinStrategyPointBox
(
(boost::is_same
<
- bool,
+ bool,
typename boost::function_types::result_type<ApplyMethod>::type
>::type::value),
WRONG_RETURN_TYPE
@@ -207,7 +207,7 @@ class WithinStrategyBoxBox
(
(boost::is_same
<
- bool,
+ bool,
typename boost::function_types::result_type<ApplyMethod>::type
>::type::value),
WRONG_RETURN_TYPE
@@ -237,8 +237,8 @@ public :
};
// So now: boost::geometry::concept::within
-namespace within
-{
+namespace within
+{
#ifndef DOXYGEN_NO_DISPATCH
namespace dispatch
diff --git a/3party/boost/boost/geometry/strategies/default_comparable_distance_result.hpp b/3party/boost/boost/geometry/strategies/default_comparable_distance_result.hpp
new file mode 100644
index 0000000000..3b4229f106
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/default_comparable_distance_result.hpp
@@ -0,0 +1,43 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_DEFAULT_COMPARABLE_DISTANCE_RESULT_HPP
+#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_COMPARABLE_DISTANCE_RESULT_HPP
+
+#include <boost/geometry/strategies/comparable_distance_result.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+/*!
+\brief Meta-function defining return type of comparable_distance function
+\ingroup distance
+\note The strategy defines the return-type (so this situation is different
+ from length, where distance is sqr/sqrt, but length always squared)
+ */
+template <typename Geometry1, typename Geometry2 = Geometry1>
+struct default_comparable_distance_result
+ : comparable_distance_result<Geometry1, Geometry2, void>
+{};
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_COMPARABLE_DISTANCE_RESULT_HPP
diff --git a/3party/boost/boost/geometry/strategies/default_distance_result.hpp b/3party/boost/boost/geometry/strategies/default_distance_result.hpp
index ea5f3ff764..e34a947727 100644
--- a/3party/boost/boost/geometry/strategies/default_distance_result.hpp
+++ b/3party/boost/boost/geometry/strategies/default_distance_result.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,10 +19,7 @@
#ifndef BOOST_GEOMETRY_STRATEGIES_DEFAULT_DISTANCE_RESULT_HPP
#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_DISTANCE_RESULT_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/strategies/distance.hpp>
+#include <boost/geometry/strategies/distance_result.hpp>
namespace boost { namespace geometry
@@ -31,17 +33,8 @@ namespace boost { namespace geometry
*/
template <typename Geometry1, typename Geometry2 = Geometry1>
struct default_distance_result
-{
- typedef typename strategy::distance::services::return_type
- <
- typename strategy::distance::services::default_strategy
- <
- point_tag,
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type
- >::type
- >::type type;
-};
+ : distance_result<Geometry1, Geometry2, void>
+{};
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/strategies/default_length_result.hpp b/3party/boost/boost/geometry/strategies/default_length_result.hpp
index 706941b9e4..806e4284ce 100644
--- a/3party/boost/boost/geometry/strategies/default_length_result.hpp
+++ b/3party/boost/boost/geometry/strategies/default_length_result.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -14,22 +19,22 @@
#ifndef BOOST_GEOMETRY_STRATEGIES_DEFAULT_LENGTH_RESULT_HPP
#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_LENGTH_RESULT_HPP
+#include <boost/variant/variant_fwd.hpp>
#include <boost/geometry/core/coordinate_type.hpp>
+
+#include <boost/geometry/util/compress_variant.hpp>
#include <boost/geometry/util/select_most_precise.hpp>
+#include <boost/geometry/util/transform_variant.hpp>
namespace boost { namespace geometry
{
-/*!
- \brief Meta-function defining return type of length function
- \ingroup length
- \note Length of a line of integer coordinates can be double.
- So we take at least a double. If Big Number types are used,
- we take that type.
- */
+namespace resolve_strategy
+{
+
template <typename Geometry>
struct default_length_result
{
@@ -40,7 +45,45 @@ struct default_length_result
>::type type;
};
-}} // namespace boost::geometry
+} // namespace resolve_strategy
+
+
+namespace resolve_variant
+{
+
+template <typename Geometry>
+struct default_length_result
+ : resolve_strategy::default_length_result<Geometry>
+{};
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct default_length_result<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ typedef typename compress_variant<
+ typename transform_variant<
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ resolve_strategy::default_length_result<boost::mpl::placeholders::_>
+ >::type
+ >::type type;
+};
+
+} // namespace resolve_variant
+
+
+/*!
+ \brief Meta-function defining return type of length function
+ \ingroup length
+ \note Length of a line of integer coordinates can be double.
+ So we take at least a double. If Big Number types are used,
+ we take that type.
+
+ */
+template <typename Geometry>
+struct default_length_result
+ : resolve_variant::default_length_result<Geometry>
+{};
+
+
+}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_LENGTH_RESULT_HPP
diff --git a/3party/boost/boost/geometry/strategies/default_strategy.hpp b/3party/boost/boost/geometry/strategies/default_strategy.hpp
new file mode 100644
index 0000000000..6d05970b42
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/default_strategy.hpp
@@ -0,0 +1,34 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_DEFAULT_STRATEGY_HPP
+#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_STRATEGY_HPP
+
+
+namespace boost { namespace geometry
+{
+
+// This is a strategy placeholder type, which is passed by the algorithm free
+// functions to the multi-stage resolving process. It's resolved into an actual
+// strategy type during the resolve_strategy stage, possibly depending on the
+// input geometry type(s). This typically happens after the resolve_variant
+// stage, as it needs to be based on concrete geometry types - as opposed to
+// variant geometry types.
+
+struct default_strategy {};
+
+}} // namespace boost::geometry
+
+
+
+#endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_STRATEGY_HPP
diff --git a/3party/boost/boost/geometry/strategies/distance.hpp b/3party/boost/boost/geometry/strategies/distance.hpp
index ef9a7ee10d..98ccb8202b 100644
--- a/3party/boost/boost/geometry/strategies/distance.hpp
+++ b/3party/boost/boost/geometry/strategies/distance.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -30,47 +35,16 @@ namespace strategy { namespace distance { namespace services
template <typename Strategy> struct tag {};
-template <typename Strategy> struct return_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types<Strategy>)
- );
-};
-
-/*!
- \brief Metafunction delivering a similar strategy with other input point types
-*/
-template
-<
- typename Strategy,
- typename Point1,
- typename Point2
->
-struct similar_type
+template <typename Strategy, typename P1, typename P2>
+struct return_type
{
BOOST_MPL_ASSERT_MSG
(
- false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY
- , (types<Strategy, Point1, Point2>)
+ false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types<Strategy, P1, P2>)
);
};
-template
-<
- typename Strategy,
- typename Point1,
- typename Point2
->
-struct get_similar
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY
- , (types<Strategy, Point1, Point2>)
- );
-};
template <typename Strategy> struct comparable_type
{
@@ -88,11 +62,10 @@ template <typename Strategy> struct get_comparable
);
};
-template <typename Strategy> struct result_from_distance {};
+template <typename Strategy, typename P1, typename P2>
+struct result_from_distance {};
-// For point-segment only:
-template <typename Strategy> struct strategy_point_point {};
// Default strategy
@@ -102,7 +75,8 @@ template <typename Strategy> struct strategy_point_point {};
\brief Traits class binding a default strategy for distance
to one (or possibly two) coordinate system(s)
\ingroup distance
- \tparam GeometryTag tag (point/segment) for which this strategy is the default
+ \tparam GeometryTag1 tag (point/segment/box) for which this strategy is the default
+ \tparam GeometryTag2 tag (point/segment/box) for which this strategy is the default
\tparam Point1 first point-type
\tparam Point2 second point-type
\tparam CsTag1 tag of coordinate system of first point type
@@ -110,7 +84,8 @@ template <typename Strategy> struct strategy_point_point {};
*/
template
<
- typename GeometryTag,
+ typename GeometryTag1,
+ typename GeometryTag2,
typename Point1,
typename Point2 = Point1,
typename CsTag1 = typename cs_tag<Point1>::type,
diff --git a/3party/boost/boost/geometry/strategies/distance_comparable_to_regular.hpp b/3party/boost/boost/geometry/strategies/distance_comparable_to_regular.hpp
new file mode 100644
index 0000000000..88f51eb151
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/distance_comparable_to_regular.hpp
@@ -0,0 +1,53 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_DISTANCE_COMPARABLE_TO_REGULAR_HPP
+#define BOOST_GEOMETRY_STRATEGIES_DISTANCE_COMPARABLE_TO_REGULAR_HPP
+
+#include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace strategy { namespace distance
+{
+
+
+
+#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+namespace services
+{
+
+
+template
+<
+ typename ComparableStrategy,
+ typename Strategy,
+ typename Geometry1,
+ typename Geometry2,
+ typename CsTag1 = typename cs_tag<Geometry1>::type,
+ typename CsTag2 = typename cs_tag<Geometry2>::type
+>
+struct comparable_to_regular
+ : geometry::not_implemented<CsTag1, CsTag2>
+{};
+
+
+} // namespace services
+#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
+
+
+}} // namespace strategy::distance
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_STRATEGIES_DISTANCE_COMPARABLE_TO_REGULAR_HPP
diff --git a/3party/boost/boost/geometry/strategies/distance_result.hpp b/3party/boost/boost/geometry/strategies/distance_result.hpp
new file mode 100644
index 0000000000..185a511464
--- /dev/null
+++ b/3party/boost/boost/geometry/strategies/distance_result.hpp
@@ -0,0 +1,213 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_STRATEGIES_DISTANCE_RESULT_HPP
+#define BOOST_GEOMETRY_STRATEGIES_DISTANCE_RESULT_HPP
+
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector.hpp>
+
+#include <boost/variant/variant_fwd.hpp>
+
+#include <boost/geometry/core/point_type.hpp>
+
+#include <boost/geometry/strategies/default_strategy.hpp>
+#include <boost/geometry/strategies/distance.hpp>
+
+#include <boost/geometry/util/compress_variant.hpp>
+#include <boost/geometry/util/transform_variant.hpp>
+#include <boost/geometry/util/combine_if.hpp>
+
+#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+namespace resolve_strategy
+{
+
+template <typename Geometry1, typename Geometry2, typename Strategy>
+struct distance_result
+ : strategy::distance::services::return_type
+ <
+ Strategy,
+ typename point_type<Geometry1>::type,
+ typename point_type<Geometry2>::type
+ >
+{};
+
+template <typename Geometry1, typename Geometry2>
+struct distance_result<Geometry1, Geometry2, default_strategy>
+ : distance_result
+ <
+ Geometry1,
+ Geometry2,
+ typename detail::distance::default_strategy
+ <
+ Geometry1, Geometry2
+ >::type
+ >
+{};
+
+} // namespace resolve_strategy
+
+
+namespace resolve_variant
+{
+
+template <typename Geometry1, typename Geometry2, typename Strategy>
+struct distance_result
+ : resolve_strategy::distance_result
+ <
+ Geometry1,
+ Geometry2,
+ Strategy
+ >
+{};
+
+
+template
+<
+ typename Geometry1,
+ BOOST_VARIANT_ENUM_PARAMS(typename T),
+ typename Strategy
+>
+struct distance_result
+ <
+ Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Strategy
+ >
+{
+ // A set of all variant type combinations that are compatible and
+ // implemented
+ typedef typename util::combine_if<
+ typename mpl::vector1<Geometry1>,
+ typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
+ // Here we want should remove most of the combinations that
+ // are not valid, mostly to limit the size of the resulting MPL set.
+ // But is_implementedn is not ready for prime time
+ //
+ // util::is_implemented2<mpl::_1, mpl::_2, dispatch::distance<mpl::_1, mpl::_2> >
+ mpl::always<mpl::true_>
+ >::type possible_input_types;
+
+ // The (possibly variant) result type resulting from these combinations
+ typedef typename compress_variant<
+ typename transform_variant<
+ possible_input_types,
+ resolve_strategy::distance_result<
+ mpl::first<mpl::_>,
+ mpl::second<mpl::_>,
+ Strategy
+ >,
+ mpl::back_inserter<mpl::vector0<> >
+ >::type
+ >::type type;
+};
+
+
+// Distance arguments are commutative
+template
+<
+ BOOST_VARIANT_ENUM_PARAMS(typename T),
+ typename Geometry2,
+ typename Strategy
+>
+struct distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Geometry2,
+ Strategy
+ > : public distance_result
+ <
+ Geometry2, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Strategy
+ >
+{};
+
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Strategy>
+struct distance_result
+ <
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
+ Strategy
+ >
+{
+ // A set of all variant type combinations that are compatible and
+ // implemented
+ typedef typename util::combine_if
+ <
+ typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
+ typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
+ // Here we want to try to remove most of the combinations
+ // that are not valid, mostly to limit the size of the
+ // resulting MPL vector.
+ // But is_implemented is not ready for prime time
+ //
+ // util::is_implemented2<mpl::_1, mpl::_2, dispatch::distance<mpl::_1, mpl::_2> >
+ mpl::always<mpl::true_>
+ >::type possible_input_types;
+
+ // The (possibly variant) result type resulting from these combinations
+ typedef typename compress_variant<
+ typename transform_variant<
+ possible_input_types,
+ resolve_strategy::distance_result<
+ mpl::first<mpl::_>,
+ mpl::second<mpl::_>,
+ Strategy
+ >,
+ mpl::back_inserter<mpl::vector0<> >
+ >::type
+ >::type type;
+};
+
+} // namespace resolve_variant
+
+
+/*!
+\brief Meta-function defining return type of distance function
+\ingroup distance
+\note The strategy defines the return-type (so this situation is different
+ from length, where distance is sqr/sqrt, but length always squared)
+ */
+template
+<
+ typename Geometry1,
+ typename Geometry2 = Geometry1,
+ typename Strategy = void
+>
+struct distance_result
+ : resolve_variant::distance_result<Geometry1, Geometry2, Strategy>
+{};
+
+
+template <typename Geometry1, typename Geometry2>
+struct distance_result<Geometry1, Geometry2, void>
+ : distance_result<Geometry1, Geometry2, default_strategy>
+{};
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_STRATEGIES_DISTANCE_RESULT_HPP
diff --git a/3party/boost/boost/geometry/strategies/intersection.hpp b/3party/boost/boost/geometry/strategies/intersection.hpp
index fc628c0635..ef1b676fda 100644
--- a/3party/boost/boost/geometry/strategies/intersection.hpp
+++ b/3party/boost/boost/geometry/strategies/intersection.hpp
@@ -17,42 +17,47 @@
#include <boost/geometry/policies/relate/tupled.hpp>
#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/strategies/intersection.hpp>
#include <boost/geometry/strategies/intersection_result.hpp>
#include <boost/geometry/strategies/cartesian/cart_intersect.hpp>
+#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
namespace boost { namespace geometry
{
-// The intersection strategy is a "compound strategy",
-// it contains a segment-intersection-strategy
-// and a side-strategy
/*!
-\tparam CalculationType \tparam_calculation
-*/
+\brief "compound strategy", containing a segment-intersection-strategy
+ and a side-strategy
+ */
template
<
typename Tag,
typename Geometry1,
typename Geometry2,
typename IntersectionPoint,
+ typename RobustPolicy,
typename CalculationType = void
>
struct strategy_intersection
{
private :
+ // for development BOOST_STATIC_ASSERT((! boost::is_same<RobustPolicy, void>::type::value));
+
typedef typename geometry::point_type<Geometry1>::type point1_type;
typedef typename geometry::point_type<Geometry2>::type point2_type;
typedef typename model::referring_segment<point1_type const> segment1_type;
typedef typename model::referring_segment<point2_type const> segment2_type;
typedef segment_intersection_points
+ <
+ IntersectionPoint,
+ typename geometry::segment_ratio_type
<
- IntersectionPoint
- > ip_type;
+ IntersectionPoint, RobustPolicy
+ >::type
+ > ip_type;
public:
typedef strategy::intersection::relate_cartesian_segments
@@ -61,18 +66,9 @@ public:
<
policies::relate::segments_intersection_points
<
- segment1_type,
- segment2_type,
- ip_type,
- CalculationType
+ ip_type
> ,
policies::relate::segments_direction
- <
- segment1_type,
- segment2_type,
- CalculationType
- >,
- CalculationType
>,
CalculationType
> segment_intersection_strategy_type;
@@ -82,9 +78,12 @@ public:
Tag,
CalculationType
>::type side_strategy_type;
-};
+ typedef RobustPolicy rescale_policy_type;
+};
+// Version for box_box intersection or other detail calls not needing a strategy
+struct strategy_intersection_empty {};
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/strategies/intersection_result.hpp b/3party/boost/boost/geometry/strategies/intersection_result.hpp
index 15917a9eb5..695db79c9c 100644
--- a/3party/boost/boost/geometry/strategies/intersection_result.hpp
+++ b/3party/boost/boost/geometry/strategies/intersection_result.hpp
@@ -16,6 +16,7 @@
#include <cstddef>
+
namespace boost { namespace geometry
{
@@ -153,13 +154,47 @@ struct de9im_segment : public de9im
#endif
};
+template <typename SegmentRatio>
+struct fraction_type
+{
+ SegmentRatio robust_ra; // TODO this can be renamed now to "ra"
+ SegmentRatio robust_rb;
+
+ bool initialized;
+ inline fraction_type()
+ : initialized(false)
+ {}
+
+ template <typename Info>
+ inline void assign(Info const& info)
+ {
+ initialized = true;
+ robust_ra = info.robust_ra;
+ robust_rb = info.robust_rb;
+ }
+
+ inline void assign(SegmentRatio const& a, SegmentRatio const& b)
+ {
+ initialized = true;
+ robust_ra = a;
+ robust_rb = b;
+ }
+};
-template <typename Point>
+//
+/*!
+\brief return-type for segment-intersection
+\note Set in intersection_points.hpp, from segment_intersection_info
+*/
+template <typename Point, typename SegmentRatio>
struct segment_intersection_points
{
- std::size_t count;
+ std::size_t count; // The number of intersection points
+
+ // TODO: combine intersections and fractions in one struct
Point intersections[2];
+ fraction_type<SegmentRatio> fractions[2];
typedef Point point_type;
segment_intersection_points()
@@ -167,6 +202,18 @@ struct segment_intersection_points
{}
};
+// All assigned in cart_intersect, passed to intersection_points
+template <typename CoordinateType, typename PromotedType, typename SegmentRatio>
+struct segment_intersection_info
+{
+ typedef PromotedType promoted_type;
+
+ CoordinateType dx_a, dy_a;
+ CoordinateType dx_b, dy_b; // TODO b can be removed
+ SegmentRatio robust_ra;
+ SegmentRatio robust_rb;
+};
+
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/strategies/side_info.hpp b/3party/boost/boost/geometry/strategies/side_info.hpp
index 3c2c1798ad..d113eaa8ff 100644
--- a/3party/boost/boost/geometry/strategies/side_info.hpp
+++ b/3party/boost/boost/geometry/strategies/side_info.hpp
@@ -16,8 +16,9 @@
#include <cmath>
#include <utility>
-#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
-#include <iostream>
+
+#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
+# include <iostream>
#endif
namespace boost { namespace geometry
@@ -25,8 +26,8 @@ namespace boost { namespace geometry
// Silence warning C4127: conditional expression is constant
#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
+#pragma warning(push)
+#pragma warning(disable : 4127)
#endif
/*!
@@ -145,13 +146,13 @@ public :
return sides[Which].first == 0 ? 0 : 1;
}
-#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
inline void debug() const
{
std::cout << sides[0].first << " "
<< sides[0].second << " "
<< sides[1].first << " "
- << sides[1].second
+ << sides[1].second
<< std::endl;
}
#endif
@@ -167,7 +168,7 @@ public :
};
#if defined(_MSC_VER)
-#pragma warning(pop)
+#pragma warning(pop)
#endif
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/strategies/spherical/area_huiller.hpp b/3party/boost/boost/geometry/strategies/spherical/area_huiller.hpp
index 1bef9b5f2f..e55fdb2b0e 100644
--- a/3party/boost/boost/geometry/strategies/spherical/area_huiller.hpp
+++ b/3party/boost/boost/geometry/strategies/spherical/area_huiller.hpp
@@ -82,8 +82,7 @@ protected :
calculation_type sum;
// Distances are calculated on unit sphere here
- strategy::distance::haversine<PointOfSegment, PointOfSegment>
- distance_over_unit_sphere;
+ strategy::distance::haversine<calculation_type> distance_over_unit_sphere;
inline excess_sum()
@@ -129,7 +128,8 @@ public :
// E: spherical excess, using l'Huiller's formula
// [tg(e / 4)]2 = tg[s / 2] tg[(s-a) / 2] tg[(s-b) / 2] tg[(s-c) / 2]
- calculation_type E = four * atan(sqrt(geometry::math::abs(tan(s / two)
+ calculation_type E = four
+ * atan(geometry::math::sqrt(geometry::math::abs(tan(s / two)
* tan((s - a) / two)
* tan((s - b) / two)
* tan((s - c) / two))));
diff --git a/3party/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp b/3party/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp
index 7b353020eb..6ffa4ff7c8 100644
--- a/3party/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp
+++ b/3party/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp
@@ -10,6 +10,7 @@
#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_HPP
+#include <boost/config.hpp>
#include <boost/concept_check.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits.hpp>
@@ -21,6 +22,7 @@
#include <boost/geometry/strategies/distance.hpp>
#include <boost/geometry/strategies/concepts/distance_concept.hpp>
+#include <boost/geometry/strategies/spherical/distance_haversine.hpp>
#include <boost/geometry/util/promote_floating_point.hpp>
#include <boost/geometry/util/math.hpp>
@@ -40,10 +42,8 @@ namespace strategy { namespace distance
/*!
\brief Strategy functor for distance point to segment calculation
\ingroup strategies
-\details Class which calculates the distance of a point to a segment, using latlong points
+\details Class which calculates the distance of a point to a segment, for points on a sphere or globe
\see http://williams.best.vwh.net/avform.htm
-\tparam Point point type
-\tparam PointOfSegment \tparam_segment_point
\tparam CalculationType \tparam_calculation
\tparam Strategy underlying point-point distance strategy, defaults to haversine
@@ -55,40 +55,35 @@ namespace strategy { namespace distance
*/
template
<
- typename Point,
- typename PointOfSegment = Point,
typename CalculationType = void,
- typename Strategy = typename services::default_strategy<point_tag, Point>::type
+ typename Strategy = haversine<double, CalculationType>
>
class cross_track
{
public :
- typedef typename promote_floating_point
- <
- typename select_calculation_type
- <
- Point,
- PointOfSegment,
- CalculationType
- >::type
- >::type return_type;
+ template <typename Point, typename PointOfSegment>
+ struct return_type
+ : promote_floating_point
+ <
+ typename select_calculation_type
+ <
+ Point,
+ PointOfSegment,
+ CalculationType
+ >::type
+ >
+ {};
inline cross_track()
- {
- m_strategy = Strategy();
- m_radius = m_strategy.radius();
- }
+ {}
- inline cross_track(return_type const& r)
- : m_radius(r)
- , m_strategy(r)
+ explicit inline cross_track(typename Strategy::radius_type const& r)
+ : m_strategy(r)
{}
inline cross_track(Strategy const& s)
: m_strategy(s)
- {
- m_radius = m_strategy.radius();
- }
+ {}
// It might be useful in the future
@@ -96,9 +91,20 @@ public :
// crosstrack(...) {}
- inline return_type apply(Point const& p,
- PointOfSegment const& sp1, PointOfSegment const& sp2) const
+ template <typename Point, typename PointOfSegment>
+ inline typename return_type<Point, PointOfSegment>::type
+ apply(Point const& p, PointOfSegment const& sp1, PointOfSegment const& sp2) const
{
+
+#if !defined(BOOST_MSVC)
+ BOOST_CONCEPT_ASSERT
+ (
+ (concept::PointDistanceStrategy<Strategy, Point, PointOfSegment>)
+ );
+#endif
+
+ typedef typename return_type<Point, PointOfSegment>::type return_type;
+
// http://williams.best.vwh.net/avform.htm#XTE
return_type d1 = m_strategy.apply(sp1, p);
return_type d3 = m_strategy.apply(sp1, sp2);
@@ -132,7 +138,7 @@ public :
if(projection1 > 0.0 && projection2 > 0.0)
{
- return_type XTD = m_radius * geometry::math::abs( asin( sin( d1 / m_radius ) * sin( d_crs1 ) ));
+ return_type XTD = radius() * geometry::math::abs( asin( sin( d1 / radius() ) * sin( d_crs1 ) ));
#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK
std::cout << "Projection ON the segment" << std::endl;
@@ -153,23 +159,20 @@ public :
}
}
- inline return_type radius() const { return m_radius; }
+ inline typename Strategy::radius_type radius() const
+ { return m_strategy.radius(); }
private :
- BOOST_CONCEPT_ASSERT
- (
- (geometry::concept::PointDistanceStrategy<Strategy >)
- );
-
-
- return_type m_radius;
- // Point-point distances are calculated in radians, on the unit sphere
Strategy m_strategy;
/// Calculate course (bearing) between two points. Might be moved to a "course formula" ...
- inline return_type course(Point const& p1, Point const& p2) const
+ template <typename Point1, typename Point2>
+ inline typename return_type<Point1, Point2>::type
+ course(Point1 const& p1, Point2 const& p2) const
{
+ typedef typename return_type<Point1, Point2>::type return_type;
+
// http://williams.best.vwh.net/avform.htm#Crs
return_type dlon = get_as_radian<0>(p2) - get_as_radian<0>(p1);
return_type cos_p2lat = cos(get_as_radian<1>(p2));
@@ -188,120 +191,65 @@ private :
namespace services
{
-template <typename Point, typename PointOfSegment, typename CalculationType, typename Strategy>
-struct tag<cross_track<Point, PointOfSegment, CalculationType, Strategy> >
+template <typename CalculationType, typename Strategy>
+struct tag<cross_track<CalculationType, Strategy> >
{
typedef strategy_tag_distance_point_segment type;
};
-template <typename Point, typename PointOfSegment, typename CalculationType, typename Strategy>
-struct return_type<cross_track<Point, PointOfSegment, CalculationType, Strategy> >
-{
- typedef typename cross_track<Point, PointOfSegment, CalculationType, Strategy>::return_type type;
-};
+template <typename CalculationType, typename Strategy, typename P, typename PS>
+struct return_type<cross_track<CalculationType, Strategy>, P, PS>
+ : cross_track<CalculationType, Strategy>::template return_type<P, PS>
+{};
-template
-<
- typename Point,
- typename PointOfSegment,
- typename CalculationType,
- typename Strategy,
- typename P,
- typename PS
->
-struct similar_type<cross_track<Point, PointOfSegment, CalculationType, Strategy>, P, PS>
+template <typename CalculationType, typename Strategy>
+struct comparable_type<cross_track<CalculationType, Strategy> >
{
- typedef cross_track<Point, PointOfSegment, CalculationType, Strategy> type;
+ // There is no shortcut, so the strategy itself is its comparable type
+ typedef cross_track<CalculationType, Strategy> type;
};
template
<
- typename Point,
- typename PointOfSegment,
typename CalculationType,
- typename Strategy,
- typename P,
- typename PS
->
-struct get_similar<cross_track<Point, PointOfSegment, CalculationType, Strategy>, P, PS>
-{
- static inline typename similar_type
- <
- cross_track<Point, PointOfSegment, CalculationType, Strategy>, P, PS
- >::type apply(cross_track<Point, PointOfSegment, CalculationType, Strategy> const& strategy)
- {
- return cross_track<P, PS, CalculationType, Strategy>(strategy.radius());
- }
-};
-
-
-template <typename Point, typename PointOfSegment, typename CalculationType, typename Strategy>
-struct comparable_type<cross_track<Point, PointOfSegment, CalculationType, Strategy> >
-{
- // Comparable type is here just the strategy
- typedef typename similar_type
- <
- cross_track
- <
- Point, PointOfSegment, CalculationType, Strategy
- >, Point, PointOfSegment
- >::type type;
-};
-
-
-template
-<
- typename Point, typename PointOfSegment,
- typename CalculationType,
typename Strategy
>
-struct get_comparable<cross_track<Point, PointOfSegment, CalculationType, Strategy> >
+struct get_comparable<cross_track<CalculationType, Strategy> >
{
typedef typename comparable_type
<
- cross_track<Point, PointOfSegment, CalculationType, Strategy>
+ cross_track<CalculationType, Strategy>
>::type comparable_type;
public :
- static inline comparable_type apply(cross_track<Point, PointOfSegment, CalculationType, Strategy> const& strategy)
+ static inline comparable_type apply(cross_track<CalculationType, Strategy> const& strategy)
{
return comparable_type(strategy.radius());
}
};
-template
+template
<
- typename Point, typename PointOfSegment,
- typename CalculationType,
- typename Strategy
+ typename CalculationType,
+ typename Strategy,
+ typename P, typename PS
>
-struct result_from_distance<cross_track<Point, PointOfSegment, CalculationType, Strategy> >
+struct result_from_distance<cross_track<CalculationType, Strategy>, P, PS>
{
private :
- typedef typename cross_track<Point, PointOfSegment, CalculationType, Strategy>::return_type return_type;
+ typedef typename cross_track<CalculationType, Strategy>::template return_type<P, PS> return_type;
public :
template <typename T>
- static inline return_type apply(cross_track<Point, PointOfSegment, CalculationType, Strategy> const& , T const& distance)
+ static inline return_type apply(cross_track<CalculationType, Strategy> const& , T const& distance)
{
return distance;
}
};
-template
-<
- typename Point, typename PointOfSegment,
- typename CalculationType,
- typename Strategy
->
-struct strategy_point_point<cross_track<Point, PointOfSegment, CalculationType, Strategy> >
-{
- typedef Strategy type;
-};
-
/*
@@ -311,15 +259,13 @@ TODO: spherical polar coordinate system requires "get_as_radian_equatorial<>"
template <typename Point, typename PointOfSegment, typename Strategy>
struct default_strategy
<
- segment_tag, Point, PointOfSegment,
- spherical_polar_tag, spherical_polar_tag,
+ segment_tag, Point, PointOfSegment,
+ spherical_polar_tag, spherical_polar_tag,
Strategy
>
{
typedef cross_track
<
- Point,
- PointOfSegment,
void,
typename boost::mpl::if_
<
@@ -338,22 +284,20 @@ struct default_strategy
template <typename Point, typename PointOfSegment, typename Strategy>
struct default_strategy
<
- segment_tag, Point, PointOfSegment,
- spherical_equatorial_tag, spherical_equatorial_tag,
+ point_tag, segment_tag, Point, PointOfSegment,
+ spherical_equatorial_tag, spherical_equatorial_tag,
Strategy
>
{
typedef cross_track
<
- Point,
- PointOfSegment,
void,
typename boost::mpl::if_
<
boost::is_void<Strategy>,
typename default_strategy
<
- point_tag, Point, PointOfSegment,
+ point_tag, point_tag, Point, PointOfSegment,
spherical_equatorial_tag, spherical_equatorial_tag
>::type,
Strategy
@@ -362,6 +306,22 @@ struct default_strategy
};
+template <typename PointOfSegment, typename Point, typename Strategy>
+struct default_strategy
+ <
+ segment_tag, point_tag, PointOfSegment, Point,
+ spherical_equatorial_tag, spherical_equatorial_tag,
+ Strategy
+ >
+{
+ typedef typename default_strategy
+ <
+ point_tag, segment_tag, Point, PointOfSegment,
+ spherical_equatorial_tag, spherical_equatorial_tag,
+ Strategy
+ >::type type;
+};
+
} // namespace services
#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
diff --git a/3party/boost/boost/geometry/strategies/spherical/distance_haversine.hpp b/3party/boost/boost/geometry/strategies/spherical/distance_haversine.hpp
index 5a866c2eda..8db29c5157 100644
--- a/3party/boost/boost/geometry/strategies/spherical/distance_haversine.hpp
+++ b/3party/boost/boost/geometry/strategies/spherical/distance_haversine.hpp
@@ -14,6 +14,7 @@
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/core/radian_access.hpp>
+#include <boost/geometry/util/math.hpp>
#include <boost/geometry/util/select_calculation_type.hpp>
#include <boost/geometry/util/promote_floating_point.hpp>
@@ -39,52 +40,57 @@ namespace comparable
// - applying asin (which is strictly (monotone) increasing)
template
<
- typename Point1,
- typename Point2 = Point1,
+ typename RadiusType,
typename CalculationType = void
>
class haversine
{
public :
- typedef typename promote_floating_point
- <
- typename select_calculation_type
- <
- Point1,
- Point2,
- CalculationType
- >::type
- >::type calculation_type;
-
- inline haversine(calculation_type const& r = 1.0)
+ template <typename Point1, typename Point2>
+ struct calculation_type
+ : promote_floating_point
+ <
+ typename select_calculation_type
+ <
+ Point1,
+ Point2,
+ CalculationType
+ >::type
+ >
+ {};
+
+ typedef RadiusType radius_type;
+
+ explicit inline haversine(RadiusType const& r = 1.0)
: m_radius(r)
{}
-
- static inline calculation_type apply(Point1 const& p1, Point2 const& p2)
+ template <typename Point1, typename Point2>
+ static inline typename calculation_type<Point1, Point2>::type
+ apply(Point1 const& p1, Point2 const& p2)
{
- return calculate(get_as_radian<0>(p1), get_as_radian<1>(p1),
- get_as_radian<0>(p2), get_as_radian<1>(p2));
+ return calculate<typename calculation_type<Point1, Point2>::type>(
+ get_as_radian<0>(p1), get_as_radian<1>(p1),
+ get_as_radian<0>(p2), get_as_radian<1>(p2)
+ );
}
- inline calculation_type radius() const
+ inline RadiusType radius() const
{
return m_radius;
}
private :
-
- static inline calculation_type calculate(calculation_type const& lon1,
- calculation_type const& lat1,
- calculation_type const& lon2,
- calculation_type const& lat2)
+ template <typename R, typename T1, typename T2>
+ static inline R calculate(T1 const& lon1, T1 const& lat1,
+ T2 const& lon2, T2 const& lat2)
{
return math::hav(lat2 - lat1)
+ cos(lat1) * cos(lat2) * math::hav(lon2 - lon1);
}
- calculation_type m_radius;
+ RadiusType m_radius;
};
@@ -95,8 +101,7 @@ private :
\brief Distance calculation for spherical coordinates
on a perfect sphere using haversine
\ingroup strategies
-\tparam Point1 \tparam_first_point
-\tparam Point2 \tparam_second_point
+\tparam RadiusType \tparam_radius
\tparam CalculationType \tparam_calculation
\author Adapted from: http://williams.best.vwh.net/avform.htm
\see http://en.wikipedia.org/wiki/Great-circle_distance
@@ -107,7 +112,7 @@ A mathematically equivalent formula, which is less subject
to rounding error for short distances is:
d=2*asin(sqrt((sin((lat1-lat2) / 2))^2
+ cos(lat1)*cos(lat2)*(sin((lon1-lon2) / 2))^2))
-
+
\qbk{
[heading See also]
@@ -117,23 +122,26 @@ A mathematically equivalent formula, which is less subject
*/
template
<
- typename Point1,
- typename Point2 = Point1,
+ typename RadiusType,
typename CalculationType = void
>
class haversine
{
- typedef comparable::haversine<Point1, Point2, CalculationType> comparable_type;
+ typedef comparable::haversine<RadiusType, CalculationType> comparable_type;
public :
+ template <typename Point1, typename Point2>
+ struct calculation_type
+ : services::return_type<comparable_type, Point1, Point2>
+ {};
- typedef typename services::return_type<comparable_type>::type calculation_type;
+ typedef RadiusType radius_type;
/*!
\brief Constructor
\param radius radius of the sphere, defaults to 1.0 for the unit sphere
*/
- inline haversine(calculation_type const& radius = 1.0)
+ inline haversine(RadiusType const& radius = 1.0)
: m_radius(radius)
{}
@@ -143,10 +151,13 @@ public :
\param p1 first point
\param p2 second point
*/
- inline calculation_type apply(Point1 const& p1, Point2 const& p2) const
+ template <typename Point1, typename Point2>
+ inline typename calculation_type<Point1, Point2>::type
+ apply(Point1 const& p1, Point2 const& p2) const
{
+ typedef typename calculation_type<Point1, Point2>::type calculation_type;
calculation_type const a = comparable_type::apply(p1, p2);
- calculation_type const c = calculation_type(2.0) * asin(sqrt(a));
+ calculation_type const c = calculation_type(2.0) * asin(math::sqrt(a));
return m_radius * c;
}
@@ -154,13 +165,13 @@ public :
\brief access to radius value
\return the radius
*/
- inline calculation_type radius() const
+ inline RadiusType radius() const
{
return m_radius;
}
private :
- calculation_type m_radius;
+ RadiusType m_radius;
};
@@ -168,52 +179,32 @@ private :
namespace services
{
-template <typename Point1, typename Point2, typename CalculationType>
-struct tag<haversine<Point1, Point2, CalculationType> >
+template <typename RadiusType, typename CalculationType>
+struct tag<haversine<RadiusType, CalculationType> >
{
typedef strategy_tag_distance_point_point type;
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct return_type<haversine<Point1, Point2, CalculationType> >
-{
- typedef typename haversine<Point1, Point2, CalculationType>::calculation_type type;
-};
+template <typename RadiusType, typename CalculationType, typename P1, typename P2>
+struct return_type<haversine<RadiusType, CalculationType>, P1, P2>
+ : haversine<RadiusType, CalculationType>::template calculation_type<P1, P2>
+{};
-template <typename Point1, typename Point2, typename CalculationType, typename P1, typename P2>
-struct similar_type<haversine<Point1, Point2, CalculationType>, P1, P2>
+template <typename RadiusType, typename CalculationType>
+struct comparable_type<haversine<RadiusType, CalculationType> >
{
- typedef haversine<P1, P2, CalculationType> type;
+ typedef comparable::haversine<RadiusType, CalculationType> type;
};
-template <typename Point1, typename Point2, typename CalculationType, typename P1, typename P2>
-struct get_similar<haversine<Point1, Point2, CalculationType>, P1, P2>
+template <typename RadiusType, typename CalculationType>
+struct get_comparable<haversine<RadiusType, CalculationType> >
{
private :
- typedef haversine<Point1, Point2, CalculationType> this_type;
-public :
- static inline typename similar_type<this_type, P1, P2>::type apply(this_type const& input)
- {
- return haversine<P1, P2, CalculationType>(input.radius());
- }
-};
-
-template <typename Point1, typename Point2, typename CalculationType>
-struct comparable_type<haversine<Point1, Point2, CalculationType> >
-{
- typedef comparable::haversine<Point1, Point2, CalculationType> type;
-};
-
-
-template <typename Point1, typename Point2, typename CalculationType>
-struct get_comparable<haversine<Point1, Point2, CalculationType> >
-{
-private :
- typedef haversine<Point1, Point2, CalculationType> this_type;
- typedef comparable::haversine<Point1, Point2, CalculationType> comparable_type;
+ typedef haversine<RadiusType, CalculationType> this_type;
+ typedef comparable::haversine<RadiusType, CalculationType> comparable_type;
public :
static inline comparable_type apply(this_type const& input)
{
@@ -221,12 +212,12 @@ public :
}
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct result_from_distance<haversine<Point1, Point2, CalculationType> >
+template <typename RadiusType, typename CalculationType, typename P1, typename P2>
+struct result_from_distance<haversine<RadiusType, CalculationType>, P1, P2>
{
private :
- typedef haversine<Point1, Point2, CalculationType> this_type;
- typedef typename return_type<this_type>::type return_type;
+ typedef haversine<RadiusType, CalculationType> this_type;
+ typedef typename return_type<this_type, P1, P2>::type return_type;
public :
template <typename T>
static inline return_type apply(this_type const& , T const& value)
@@ -237,51 +228,31 @@ public :
// Specializations for comparable::haversine
-template <typename Point1, typename Point2, typename CalculationType>
-struct tag<comparable::haversine<Point1, Point2, CalculationType> >
+template <typename RadiusType, typename CalculationType>
+struct tag<comparable::haversine<RadiusType, CalculationType> >
{
typedef strategy_tag_distance_point_point type;
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct return_type<comparable::haversine<Point1, Point2, CalculationType> >
-{
- typedef typename comparable::haversine<Point1, Point2, CalculationType>::calculation_type type;
-};
-
-
-template <typename Point1, typename Point2, typename CalculationType, typename P1, typename P2>
-struct similar_type<comparable::haversine<Point1, Point2, CalculationType>, P1, P2>
-{
- typedef comparable::haversine<P1, P2, CalculationType> type;
-};
-
+template <typename RadiusType, typename CalculationType, typename P1, typename P2>
+struct return_type<comparable::haversine<RadiusType, CalculationType>, P1, P2>
+ : comparable::haversine<RadiusType, CalculationType>::template calculation_type<P1, P2>
+{};
-template <typename Point1, typename Point2, typename CalculationType, typename P1, typename P2>
-struct get_similar<comparable::haversine<Point1, Point2, CalculationType>, P1, P2>
-{
-private :
- typedef comparable::haversine<Point1, Point2, CalculationType> this_type;
-public :
- static inline typename similar_type<this_type, P1, P2>::type apply(this_type const& input)
- {
- return comparable::haversine<P1, P2, CalculationType>(input.radius());
- }
-};
-template <typename Point1, typename Point2, typename CalculationType>
-struct comparable_type<comparable::haversine<Point1, Point2, CalculationType> >
+template <typename RadiusType, typename CalculationType>
+struct comparable_type<comparable::haversine<RadiusType, CalculationType> >
{
- typedef comparable::haversine<Point1, Point2, CalculationType> type;
+ typedef comparable::haversine<RadiusType, CalculationType> type;
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct get_comparable<comparable::haversine<Point1, Point2, CalculationType> >
+template <typename RadiusType, typename CalculationType>
+struct get_comparable<comparable::haversine<RadiusType, CalculationType> >
{
private :
- typedef comparable::haversine<Point1, Point2, CalculationType> this_type;
+ typedef comparable::haversine<RadiusType, CalculationType> this_type;
public :
static inline this_type apply(this_type const& input)
{
@@ -290,12 +261,12 @@ public :
};
-template <typename Point1, typename Point2, typename CalculationType>
-struct result_from_distance<comparable::haversine<Point1, Point2, CalculationType> >
+template <typename RadiusType, typename CalculationType, typename P1, typename P2>
+struct result_from_distance<comparable::haversine<RadiusType, CalculationType>, P1, P2>
{
private :
- typedef comparable::haversine<Point1, Point2, CalculationType> strategy_type;
- typedef typename return_type<strategy_type>::type return_type;
+ typedef comparable::haversine<RadiusType, CalculationType> strategy_type;
+ typedef typename return_type<strategy_type, P1, P2>::type return_type;
public :
template <typename T>
static inline return_type apply(strategy_type const& strategy, T const& distance)
@@ -306,12 +277,16 @@ public :
};
-// Register it as the default for point-types
+// Register it as the default for point-types
// in a spherical equatorial coordinate system
template <typename Point1, typename Point2>
-struct default_strategy<point_tag, Point1, Point2, spherical_equatorial_tag, spherical_equatorial_tag>
+struct default_strategy
+ <
+ point_tag, point_tag, Point1, Point2,
+ spherical_equatorial_tag, spherical_equatorial_tag
+ >
{
- typedef strategy::distance::haversine<Point1, Point2> type;
+ typedef strategy::distance::haversine<typename select_coordinate_type<Point1, Point2>::type> type;
};
// Note: spherical polar coordinate system requires "get_as_radian_equatorial"
diff --git a/3party/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp b/3party/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp
index b7cf279d5b..818bd4c346 100644
--- a/3party/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp
+++ b/3party/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp
@@ -11,6 +11,7 @@
#include <boost/mpl/if.hpp>
#include <boost/type_traits.hpp>
+#include <boost/core/ignore_unused.hpp>
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/core/access.hpp>
@@ -82,6 +83,8 @@ public :
CalculationType
>::type coordinate_type;
+ boost::ignore_unused<coordinate_type>();
+
double d1 = 0.001; // m_strategy.apply(sp1, p);
double crs_AD = detail::course(p1, p);
double crs_AB = detail::course(p1, p2);
diff --git a/3party/boost/boost/geometry/strategies/spherical/ssf.hpp b/3party/boost/boost/geometry/strategies/spherical/ssf.hpp
index ab7c67559a..41562950fd 100644
--- a/3party/boost/boost/geometry/strategies/spherical/ssf.hpp
+++ b/3party/boost/boost/geometry/strategies/spherical/ssf.hpp
@@ -88,13 +88,13 @@ public :
// (Third point is converted directly)
ct const cos_delta = cos(delta);
-
+
// Apply the "Spherical Side Formula" as presented on my blog
- ct const dist
- = (c1y * c2z - c1z * c2y) * cos_delta * cos(lambda)
+ ct const dist
+ = (c1y * c2z - c1z * c2y) * cos_delta * cos(lambda)
+ (c1z * c2x - c1x * c2z) * cos_delta * sin(lambda)
+ (c1x * c2y - c1y * c2x) * sin(delta);
-
+
ct zero = ct();
return dist > zero ? 1
: dist < zero ? -1
diff --git a/3party/boost/boost/geometry/strategies/strategies.hpp b/3party/boost/boost/geometry/strategies/strategies.hpp
index 3aa9ab00f5..5e70e8a02c 100644
--- a/3party/boost/boost/geometry/strategies/strategies.hpp
+++ b/3party/boost/boost/geometry/strategies/strategies.hpp
@@ -4,6 +4,9 @@
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -11,6 +14,8 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
#ifndef BOOST_GEOMETRY_STRATEGIES_STRATEGIES_HPP
#define BOOST_GEOMETRY_STRATEGIES_STRATEGIES_HPP
@@ -18,6 +23,7 @@
#include <boost/geometry/strategies/tags.hpp>
#include <boost/geometry/strategies/area.hpp>
+#include <boost/geometry/strategies/buffer.hpp>
#include <boost/geometry/strategies/centroid.hpp>
#include <boost/geometry/strategies/compare.hpp>
#include <boost/geometry/strategies/convex_hull.hpp>
@@ -29,14 +35,27 @@
#include <boost/geometry/strategies/cartesian/area_surveyor.hpp>
#include <boost/geometry/strategies/cartesian/box_in_box.hpp>
+#include <boost/geometry/strategies/cartesian/buffer_end_flat.hpp>
+#include <boost/geometry/strategies/cartesian/buffer_end_round.hpp>
+#include <boost/geometry/strategies/cartesian/buffer_join_miter.hpp>
+#include <boost/geometry/strategies/cartesian/buffer_join_round.hpp>
+#include <boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp>
+#include <boost/geometry/strategies/cartesian/buffer_point_circle.hpp>
+#include <boost/geometry/strategies/cartesian/buffer_point_square.hpp>
+#include <boost/geometry/strategies/cartesian/buffer_side_straight.hpp>
+#include <boost/geometry/strategies/cartesian/centroid_average.hpp>
#include <boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp>
#include <boost/geometry/strategies/cartesian/centroid_weighted_length.hpp>
#include <boost/geometry/strategies/cartesian/distance_pythagoras.hpp>
+#include <boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp>
+#include <boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp>
#include <boost/geometry/strategies/cartesian/distance_projected_point.hpp>
+#include <boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp>
#include <boost/geometry/strategies/cartesian/point_in_box.hpp>
#include <boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp>
#include <boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp>
#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
+#include <boost/geometry/strategies/cartesian/distance_comparable_to_regular.hpp>
#include <boost/geometry/strategies/spherical/area_huiller.hpp>
#include <boost/geometry/strategies/spherical/distance_haversine.hpp>
@@ -44,11 +63,16 @@
#include <boost/geometry/strategies/spherical/compare_circular.hpp>
#include <boost/geometry/strategies/spherical/ssf.hpp>
+#include <boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp>
+#include <boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp>
#include <boost/geometry/strategies/agnostic/hull_graham_andrew.hpp>
#include <boost/geometry/strategies/agnostic/point_in_box_by_side.hpp>
+#include <boost/geometry/strategies/agnostic/point_in_point.hpp>
#include <boost/geometry/strategies/agnostic/point_in_poly_winding.hpp>
#include <boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp>
+#include <boost/geometry/strategies/agnostic/relate.hpp>
+
#include <boost/geometry/strategies/strategy_transform.hpp>
#include <boost/geometry/strategies/transform/matrix_transformers.hpp>
diff --git a/3party/boost/boost/geometry/strategies/strategy_transform.hpp b/3party/boost/boost/geometry/strategies/strategy_transform.hpp
index 2b75d202e4..9d3b1d910c 100644
--- a/3party/boost/boost/geometry/strategies/strategy_transform.hpp
+++ b/3party/boost/boost/geometry/strategies/strategy_transform.hpp
@@ -165,7 +165,7 @@ namespace detail
// http://www.vias.org/comp_geometry/math_coord_convert_3d.htm
// https://moodle.polymtl.ca/file.php/1183/Autres_Documents/Derivation_for_Spherical_Co-ordinates.pdf
// http://en.citizendium.org/wiki/Spherical_polar_coordinates
-
+
// Phi = first, theta is second, r is third, see documentation on cs::spherical
// (calculations are splitted to implement ttmath)
@@ -179,7 +179,7 @@ namespace detail
set<1>(p, r_sin_theta * sin(phi));
set<2>(p, r_cos_theta);
}
-
+
/// Helper function for conversion, lambda/delta (lon lat) are in radians
template <typename P, typename T, typename R>
inline void spherical_equatorial_to_cartesian(T lambda, T delta, R r, P& p)
@@ -188,7 +188,7 @@ namespace detail
// http://mathworld.wolfram.com/GreatCircle.html
// http://www.spenvis.oma.be/help/background/coortran/coortran.html WRONG
-
+
T r_cos_delta = r;
T r_sin_delta = r;
r_cos_delta *= cos(delta);
@@ -198,7 +198,7 @@ namespace detail
set<1>(p, r_cos_delta * sin(lambda));
set<2>(p, r_sin_delta);
}
-
+
/// Helper function for conversion
template <typename P, typename T>
@@ -224,7 +224,7 @@ namespace detail
set_from_radian<1>(p, acos(z));
return true;
}
-
+
template <typename P, typename T>
inline bool cartesian_to_spherical_equatorial2(T x, T y, T z, P& p)
{
@@ -234,7 +234,7 @@ namespace detail
set_from_radian<1>(p, asin(z));
return true;
}
-
+
template <typename P, typename T>
inline bool cartesian_to_spherical3(T x, T y, T z, P& p)
@@ -242,7 +242,7 @@ namespace detail
assert_dimension<P, 3>();
// http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates
- T const r = sqrt(x * x + y * y + z * z);
+ T const r = math::sqrt(x * x + y * y + z * z);
set<2>(p, r);
set_from_radian<0>(p, atan2(y, x));
if (r > 0.0)
@@ -259,7 +259,7 @@ namespace detail
assert_dimension<P, 3>();
// http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates
- T const r = sqrt(x * x + y * y + z * z);
+ T const r = math::sqrt(x * x + y * y + z * z);
set<2>(p, r);
set_from_radian<0>(p, atan2(y, x));
if (r > 0.0)
diff --git a/3party/boost/boost/geometry/strategies/tags.hpp b/3party/boost/boost/geometry/strategies/tags.hpp
index 39f2f23036..7589c21071 100644
--- a/3party/boost/boost/geometry/strategies/tags.hpp
+++ b/3party/boost/boost/geometry/strategies/tags.hpp
@@ -34,6 +34,8 @@ namespace strategy
struct strategy_tag_distance_point_point {};
struct strategy_tag_distance_point_segment {};
+struct strategy_tag_distance_point_box {};
+struct strategy_tag_distance_box_box {};
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/strategies/transform/inverse_transformer.hpp b/3party/boost/boost/geometry/strategies/transform/inverse_transformer.hpp
index 845a71ded3..685cf874b8 100644
--- a/3party/boost/boost/geometry/strategies/transform/inverse_transformer.hpp
+++ b/3party/boost/boost/geometry/strategies/transform/inverse_transformer.hpp
@@ -31,22 +31,23 @@ namespace strategy { namespace transform
{
/*!
-\brief Transformation strategy to do an inverse ransformation in Cartesian system
+\brief Transformation strategy to do an inverse transformation in a Cartesian coordinate system
\ingroup strategies
-\tparam P1 first point type
-\tparam P2 second point type
*/
-template <typename P1, typename P2>
+template
+<
+ typename CalculationType,
+ std::size_t Dimension1,
+ std::size_t Dimension2
+>
class inverse_transformer
- : public ublas_transformer<P1, P2, dimension<P1>::type::value, dimension<P2>::type::value>
+ : public ublas_transformer<CalculationType, Dimension1, Dimension2>
{
- typedef typename select_coordinate_type<P1, P2>::type T;
-
public :
template <typename Transformer>
inline inverse_transformer(Transformer const& input)
{
- typedef boost::numeric::ublas::matrix<T> matrix_type;
+ typedef boost::numeric::ublas::matrix<CalculationType> matrix_type;
// create a working copy of the input
matrix_type copy(input.matrix());
@@ -60,7 +61,7 @@ public :
if( res == 0 )
{
// create identity matrix
- this->m_matrix.assign(boost::numeric::ublas::identity_matrix<T>(copy.size1()));
+ this->m_matrix.assign(boost::numeric::ublas::identity_matrix<CalculationType>(copy.size1()));
// backsubstitute to get the inverse
boost::numeric::ublas::lu_substitute(copy, pm, this->m_matrix);
diff --git a/3party/boost/boost/geometry/strategies/transform/map_transformer.hpp b/3party/boost/boost/geometry/strategies/transform/map_transformer.hpp
index 2755d53536..1109e814b9 100644
--- a/3party/boost/boost/geometry/strategies/transform/map_transformer.hpp
+++ b/3party/boost/boost/geometry/strategies/transform/map_transformer.hpp
@@ -24,33 +24,31 @@ namespace boost { namespace geometry
// Silence warning C4127: conditional expression is constant
#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
+#pragma warning(push)
+#pragma warning(disable : 4127)
#endif
namespace strategy { namespace transform
{
/*!
-\brief Transformation strategy to do map from one to another Cartesian system
+\brief Transformation strategy to map from one to another Cartesian coordinate system
\ingroup strategies
-\tparam P1 first point type
-\tparam P2 second point type
\tparam Mirror if true map is mirrored upside-down (in most cases pixels
are from top to bottom, while map is from bottom to top)
*/
template
<
- typename P1, typename P2,
- bool Mirror = false, bool SameScale = true,
- std::size_t Dimension1 = dimension<P1>::type::value,
- std::size_t Dimension2 = dimension<P2>::type::value
+ typename CalculationType,
+ std::size_t Dimension1,
+ std::size_t Dimension2,
+ bool Mirror = false,
+ bool SameScale = true
>
class map_transformer
- : public ublas_transformer<P1, P2, Dimension1, Dimension2>
+ : public ublas_transformer<CalculationType, Dimension1, Dimension2>
{
- typedef typename select_coordinate_type<P1, P2>::type T;
- typedef boost::numeric::ublas::matrix<T> M;
+ typedef boost::numeric::ublas::matrix<CalculationType> M;
public :
template <typename B, typename D>
@@ -164,7 +162,7 @@ private :
}} // namespace strategy::transform
#if defined(_MSC_VER)
-#pragma warning(pop)
+#pragma warning(pop)
#endif
}} // namespace boost::geometry
diff --git a/3party/boost/boost/geometry/strategies/transform/matrix_transformers.hpp b/3party/boost/boost/geometry/strategies/transform/matrix_transformers.hpp
index b37a3712e5..27a3a2ae80 100644
--- a/3party/boost/boost/geometry/strategies/transform/matrix_transformers.hpp
+++ b/3party/boost/boost/geometry/strategies/transform/matrix_transformers.hpp
@@ -22,9 +22,20 @@
#define BOOST_UBLAS_TYPE_CHECK 0
#include <boost/numeric/conversion/cast.hpp>
+
+#if defined(__clang__)
+// Avoid warning about unused UBLAS function: boost_numeric_ublas_abs
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/core/coordinate_dimension.hpp>
#include <boost/geometry/core/cs.hpp>
@@ -46,14 +57,12 @@ namespace strategy { namespace transform
\see http://en.wikipedia.org/wiki/Affine_transformation
and http://www.devmaster.net/wiki/Transformation_matrices
\ingroup strategies
-\tparam P1 first point type (source)
-\tparam P2 second point type (target)
-\tparam Dimension1 number of dimensions to transform from first point
-\tparam Dimension1 number of dimensions to transform to second point
+\tparam Dimension1 number of dimensions to transform from
+\tparam Dimension2 number of dimensions to transform to
*/
template
<
- typename P1, typename P2,
+ typename CalculationType,
std::size_t Dimension1,
std::size_t Dimension2
>
@@ -62,13 +71,12 @@ class ublas_transformer
};
-template <typename P1, typename P2>
-class ublas_transformer<P1, P2, 2, 2>
+template <typename CalculationType>
+class ublas_transformer<CalculationType, 2, 2>
{
protected :
- typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
- typedef coordinate_type ct; // Abbreviation
- typedef boost::numeric::ublas::matrix<coordinate_type> matrix_type;
+ typedef CalculationType ct;
+ typedef boost::numeric::ublas::matrix<ct> matrix_type;
matrix_type m_matrix;
public :
@@ -91,17 +99,17 @@ public :
inline ublas_transformer() : m_matrix(3, 3) {}
+ template <typename P1, typename P2>
inline bool apply(P1 const& p1, P2& p2) const
{
assert_dimension_greater_equal<P1, 2>();
assert_dimension_greater_equal<P2, 2>();
- coordinate_type const& c1 = get<0>(p1);
- coordinate_type const& c2 = get<1>(p1);
+ ct const& c1 = get<0>(p1);
+ ct const& c2 = get<1>(p1);
-
- coordinate_type p2x = c1 * m_matrix(0,0) + c2 * m_matrix(0,1) + m_matrix(0,2);
- coordinate_type p2y = c1 * m_matrix(1,0) + c2 * m_matrix(1,1) + m_matrix(1,2);
+ ct p2x = c1 * m_matrix(0,0) + c2 * m_matrix(0,1) + m_matrix(0,2);
+ ct p2y = c1 * m_matrix(1,0) + c2 * m_matrix(1,1) + m_matrix(1,2);
typedef typename geometry::coordinate_type<P2>::type ct2;
set<0>(p2, boost::numeric_cast<ct2>(p2x));
@@ -115,36 +123,34 @@ public :
// It IS possible to go from 3 to 2 coordinates
-template <typename P1, typename P2>
-class ublas_transformer<P1, P2, 3, 2> : public ublas_transformer<P1, P2, 2, 2>
+template <typename CalculationType>
+class ublas_transformer<CalculationType, 3, 2> : public ublas_transformer<CalculationType, 2, 2>
{
- typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
- typedef coordinate_type ct; // Abbreviation
+ typedef CalculationType ct;
public :
inline ublas_transformer(
ct const& m_0_0, ct const& m_0_1, ct const& m_0_2,
ct const& m_1_0, ct const& m_1_1, ct const& m_1_2,
ct const& m_2_0, ct const& m_2_1, ct const& m_2_2)
- : ublas_transformer<P1, P2, 2, 2>(
+ : ublas_transformer<CalculationType, 2, 2>(
m_0_0, m_0_1, m_0_2,
m_1_0, m_1_1, m_1_2,
m_2_0, m_2_1, m_2_2)
{}
inline ublas_transformer()
- : ublas_transformer<P1, P2, 2, 2>()
+ : ublas_transformer<CalculationType, 2, 2>()
{}
};
-template <typename P1, typename P2>
-class ublas_transformer<P1, P2, 3, 3>
+template <typename CalculationType>
+class ublas_transformer<CalculationType, 3, 3>
{
protected :
- typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
- typedef coordinate_type ct; // Abbreviation
- typedef boost::numeric::ublas::matrix<coordinate_type> matrix_type;
+ typedef CalculationType ct;
+ typedef boost::numeric::ublas::matrix<ct> matrix_type;
matrix_type m_matrix;
public :
@@ -164,11 +170,12 @@ public :
inline ublas_transformer() : m_matrix(4, 4) {}
+ template <typename P1, typename P2>
inline bool apply(P1 const& p1, P2& p2) const
{
- coordinate_type const& c1 = get<0>(p1);
- coordinate_type const& c2 = get<1>(p1);
- coordinate_type const& c3 = get<2>(p1);
+ ct const& c1 = get<0>(p1);
+ ct const& c2 = get<1>(p1);
+ ct const& c3 = get<2>(p1);
typedef typename geometry::coordinate_type<P2>::type ct2;
@@ -191,34 +198,30 @@ public :
\details Translate moves a geometry a fixed distance in 2 or 3 dimensions.
\see http://en.wikipedia.org/wiki/Translation_%28geometry%29
\ingroup strategies
-\tparam P1 first point type
-\tparam P2 second point type
-\tparam Dimension1 number of dimensions to transform from first point
-\tparam Dimension1 number of dimensions to transform to second point
+\tparam Dimension1 number of dimensions to transform from
+\tparam Dimension2 number of dimensions to transform to
*/
template
<
- typename P1, typename P2,
- std::size_t Dimension1 = geometry::dimension<P1>::type::value,
- std::size_t Dimension2 = geometry::dimension<P2>::type::value
+ typename CalculationType,
+ std::size_t Dimension1,
+ std::size_t Dimension2
>
class translate_transformer
{
};
-template <typename P1, typename P2>
-class translate_transformer<P1, P2, 2, 2> : public ublas_transformer<P1, P2, 2, 2>
+template<typename CalculationType>
+class translate_transformer<CalculationType, 2, 2> : public ublas_transformer<CalculationType, 2, 2>
{
- typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
public :
// To have translate transformers compatible for 2/3 dimensions, the
// constructor takes an optional third argument doing nothing.
- inline translate_transformer(coordinate_type const& translate_x,
- coordinate_type const& translate_y,
- coordinate_type const& = 0)
- : ublas_transformer<P1, P2, 2, 2>(
+ inline translate_transformer(CalculationType const& translate_x,
+ CalculationType const& translate_y,
+ CalculationType const& = 0)
+ : ublas_transformer<CalculationType, 2, 2>(
1, 0, translate_x,
0, 1, translate_y,
0, 0, 1)
@@ -226,16 +229,14 @@ public :
};
-template <typename P1, typename P2>
-class translate_transformer<P1, P2, 3, 3> : public ublas_transformer<P1, P2, 3, 3>
+template <typename CalculationType>
+class translate_transformer<CalculationType, 3, 3> : public ublas_transformer<CalculationType, 3, 3>
{
- typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
public :
- inline translate_transformer(coordinate_type const& translate_x,
- coordinate_type const& translate_y,
- coordinate_type const& translate_z)
- : ublas_transformer<P1, P2, 3, 3>(
+ inline translate_transformer(CalculationType const& translate_x,
+ CalculationType const& translate_y,
+ CalculationType const& translate_z)
+ : ublas_transformer<CalculationType, 3, 3>(
1, 0, 0, translate_x,
0, 1, 0, translate_y,
0, 0, 1, translate_z,
@@ -250,40 +251,37 @@ public :
\details Scale scales a geometry up or down in all its dimensions.
\see http://en.wikipedia.org/wiki/Scaling_%28geometry%29
\ingroup strategies
-\tparam P1 first point type
-\tparam P2 second point type
-\tparam Dimension1 number of dimensions to transform from first point
-\tparam Dimension1 number of dimensions to transform to second point
+\tparam Dimension1 number of dimensions to transform from
+\tparam Dimension2 number of dimensions to transform to
*/
template
<
- typename P1, typename P2 = P1,
- std::size_t Dimension1 = geometry::dimension<P1>::type::value,
- std::size_t Dimension2 = geometry::dimension<P2>::type::value
+ typename CalculationType,
+ std::size_t Dimension1,
+ std::size_t Dimension2
>
class scale_transformer
{
};
-template <typename P1, typename P2>
-class scale_transformer<P1, P2, 2, 2> : public ublas_transformer<P1, P2, 2, 2>
+template <typename CalculationType>
+class scale_transformer<CalculationType, 2, 2> : public ublas_transformer<CalculationType, 2, 2>
{
- typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
public :
- inline scale_transformer(coordinate_type const& scale_x,
- coordinate_type const& scale_y,
- coordinate_type const& = 0)
- : ublas_transformer<P1, P2, 2, 2>(
+ inline scale_transformer(CalculationType const& scale_x,
+ CalculationType const& scale_y,
+ CalculationType const& = 0)
+ : ublas_transformer<CalculationType, 2, 2>(
scale_x, 0, 0,
0, scale_y, 0,
0, 0, 1)
{}
- inline scale_transformer(coordinate_type const& scale)
- : ublas_transformer<P1, P2, 2, 2>(
+ inline scale_transformer(CalculationType const& scale)
+ : ublas_transformer<CalculationType, 2, 2>(
scale, 0, 0,
0, scale, 0,
0, 0, 1)
@@ -291,16 +289,14 @@ public :
};
-template <typename P1, typename P2>
-class scale_transformer<P1, P2, 3, 3> : public ublas_transformer<P1, P2, 3, 3>
+template <typename CalculationType>
+class scale_transformer<CalculationType, 3, 3> : public ublas_transformer<CalculationType, 3, 3>
{
- typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
public :
- inline scale_transformer(coordinate_type const& scale_x,
- coordinate_type const& scale_y,
- coordinate_type const& scale_z)
- : ublas_transformer<P1, P2, 3, 3>(
+ inline scale_transformer(CalculationType const& scale_x,
+ CalculationType const& scale_y,
+ CalculationType const& scale_z)
+ : ublas_transformer<CalculationType, 3, 3>(
scale_x, 0, 0, 0,
0, scale_y, 0, 0,
0, 0, scale_z, 0,
@@ -308,8 +304,8 @@ public :
{}
- inline scale_transformer(coordinate_type const& scale)
- : ublas_transformer<P1, P2, 3, 3>(
+ inline scale_transformer(CalculationType const& scale)
+ : ublas_transformer<CalculationType, 3, 3>(
scale, 0, 0, 0,
0, scale, 0, 0,
0, 0, scale, 0,
@@ -352,23 +348,16 @@ struct as_radian<degree>
template
<
- typename P1, typename P2,
- std::size_t Dimension1 = geometry::dimension<P1>::type::value,
- std::size_t Dimension2 = geometry::dimension<P2>::type::value
+ typename CalculationType,
+ std::size_t Dimension1,
+ std::size_t Dimension2
>
class rad_rotate_transformer
- : public ublas_transformer<P1, P2, Dimension1, Dimension2>
+ : public ublas_transformer<CalculationType, Dimension1, Dimension2>
{
- // Angle has type of coordinate type, but at least a double
- typedef typename select_most_precise
- <
- typename select_coordinate_type<P1, P2>::type,
- double
- >::type angle_type;
-
public :
- inline rad_rotate_transformer(angle_type const& angle)
- : ublas_transformer<P1, P2, Dimension1, Dimension2>(
+ inline rad_rotate_transformer(CalculationType const& angle)
+ : ublas_transformer<CalculationType, Dimension1, Dimension2>(
cos(angle), sin(angle), 0,
-sin(angle), cos(angle), 0,
0, 0, 1)
@@ -381,33 +370,31 @@ public :
/*!
-\brief Strategy of rotate transformation in Cartesian system.
+\brief Strategy for rotate transformation in Cartesian coordinate system.
\details Rotate rotates a geometry of specified angle about a fixed point (e.g. origin).
\see http://en.wikipedia.org/wiki/Rotation_%28mathematics%29
\ingroup strategies
-\tparam P1 first point type
-\tparam P2 second point type
\tparam DegreeOrRadian degree/or/radian, type of rotation angle specification
\note A single angle is needed to specify a rotation in 2D.
Not yet in 3D, the 3D version requires special things to allow
for rotation around X, Y, Z or arbitrary axis.
\todo The 3D version will not compile.
*/
-template <typename P1, typename P2, typename DegreeOrRadian>
-class rotate_transformer : public detail::rad_rotate_transformer<P1, P2>
+template
+<
+ typename DegreeOrRadian,
+ typename CalculationType,
+ std::size_t Dimension1,
+ std::size_t Dimension2
+>
+class rotate_transformer : public detail::rad_rotate_transformer<CalculationType, Dimension1, Dimension2>
{
- // Angle has type of coordinate type, but at least a double
- typedef typename select_most_precise
- <
- typename select_coordinate_type<P1, P2>::type,
- double
- >::type angle_type;
public :
- inline rotate_transformer(angle_type const& angle)
+ inline rotate_transformer(CalculationType const& angle)
: detail::rad_rotate_transformer
<
- P1, P2
+ CalculationType, Dimension1, Dimension2
>(detail::as_radian<DegreeOrRadian>::get(angle))
{}
};
diff --git a/3party/boost/boost/geometry/util/calculation_type.hpp b/3party/boost/boost/geometry/util/calculation_type.hpp
index aef58909e7..2ac0de87d9 100644
--- a/3party/boost/boost/geometry/util/calculation_type.hpp
+++ b/3party/boost/boost/geometry/util/calculation_type.hpp
@@ -34,7 +34,7 @@ struct default_integral
typedef boost::long_long_type type;
#else
typedef int type;
-#endif
+#endif
};
/*!
@@ -65,7 +65,7 @@ struct calculation_type
DefaultIntegralCalculationType
>::type::value
));
-
+
typedef typename boost::mpl::if_
<
@@ -153,12 +153,12 @@ struct ternary
<
typename select_most_precise
<
- typename coordinate_type<Geometry1>::type,
+ typename coordinate_type<Geometry1>::type,
typename select_coordinate_type
<
Geometry2,
Geometry3
- >::type
+ >::type
>::type,
CalculationType,
DefaultFloatingPointCalculationType,
diff --git a/3party/boost/boost/geometry/util/combine_if.hpp b/3party/boost/boost/geometry/util/combine_if.hpp
new file mode 100644
index 0000000000..6d8d932a1c
--- /dev/null
+++ b/3party/boost/boost/geometry/util/combine_if.hpp
@@ -0,0 +1,78 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_UTIL_COMBINE_IF_HPP
+#define BOOST_GEOMETRY_UTIL_COMBINE_IF_HPP
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/set.hpp>
+#include <boost/mpl/insert.hpp>
+#include <boost/mpl/placeholders.hpp>
+
+#include <boost/type_traits.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+namespace util
+{
+
+
+/*!
+ \brief Meta-function to generate all the combination of pairs of types
+ from a given sequence Sequence except those that does not satisfy the
+ predicate Pred
+ \ingroup utility
+ \par Example
+ \code
+ typedef mpl::vector<mpl::int_<0>, mpl::int_<1> > types;
+ typedef combine_if<types, types, always<true_> >::type combinations;
+ typedef mpl::vector<
+ pair<mpl::int_<1>, mpl::int_<1> >,
+ pair<mpl::int_<1>, mpl::int_<0> >,
+ pair<mpl::int_<0>, mpl::int_<1> >,
+ pair<mpl::int_<0>, mpl::int_<0> >
+ > result_types;
+
+ BOOST_MPL_ASSERT(( mpl::equal<combinations, result_types> ));
+ \endcode
+*/
+template <typename Sequence1, typename Sequence2, typename Pred>
+struct combine_if
+{
+ struct combine
+ {
+ template <typename Result, typename T>
+ struct apply
+ {
+ typedef typename mpl::fold<Sequence2, Result,
+ mpl::if_
+ <
+ mpl::bind<typename mpl::lambda<Pred>::type, T, mpl::_2>,
+ mpl::insert<mpl::_1, mpl::pair<T, mpl::_2> >,
+ mpl::_1
+ >
+ >::type type;
+ };
+ };
+
+ typedef typename mpl::fold<Sequence1, mpl::set0<>, combine>::type type;
+};
+
+
+} // namespace util
+
+}} // namespace boost::geometry
+
+#endif // BOOST_GEOMETRY_UTIL_COMBINE_IF_HPP
diff --git a/3party/boost/boost/geometry/util/compress_variant.hpp b/3party/boost/boost/geometry/util/compress_variant.hpp
new file mode 100644
index 0000000000..a94cf28894
--- /dev/null
+++ b/3party/boost/boost/geometry/util/compress_variant.hpp
@@ -0,0 +1,98 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_UTIL_COMPRESS_VARIANT_HPP
+#define BOOST_GEOMETRY_UTIL_COMPRESS_VARIANT_HPP
+
+
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/front.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/insert.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/set.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+namespace detail
+{
+
+template <typename Variant>
+struct unique_types:
+ mpl::fold<
+ typename mpl::reverse_fold<
+ typename Variant::types,
+ mpl::set<>,
+ mpl::insert<
+ mpl::placeholders::_1,
+ mpl::placeholders::_2
+ >
+ >::type,
+ mpl::vector<>,
+ mpl::push_back<mpl::placeholders::_1, mpl::placeholders::_2>
+ >
+{};
+
+template <typename Types>
+struct variant_or_single:
+ mpl::if_<
+ mpl::equal_to<
+ mpl::size<Types>,
+ mpl::int_<1>
+ >,
+ typename mpl::front<Types>::type,
+ typename make_variant_over<Types>::type
+ >
+{};
+
+} // namespace detail
+
+
+/*!
+ \brief Meta-function that takes a boost::variant type and tries to minimize
+ it by doing the following:
+ - if there's any duplicate types, remove them
+ - if the result is a variant of one type, turn it into just that type
+ \ingroup utility
+ \par Example
+ \code
+ typedef variant<int, float, int, long> variant_type;
+ typedef compress_variant<variant_type>::type compressed;
+ typedef mpl::vector<int, float, long> result_types;
+ BOOST_MPL_ASSERT(( mpl::equal<compressed::types, result_types> ));
+
+ typedef variant<int, int, int> one_type_variant_type;
+ typedef compress_variant<one_type_variant_type>::type single_type;
+ BOOST_MPL_ASSERT(( boost::equals<single_type, int> ));
+ \endcode
+*/
+
+template <typename Variant>
+struct compress_variant:
+ detail::variant_or_single<
+ typename detail::unique_types<Variant>::type
+ >
+{};
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_UTIL_COMPRESS_VARIANT_HPP
diff --git a/3party/boost/boost/geometry/util/math.hpp b/3party/boost/boost/geometry/util/math.hpp
index 8c152edd24..89f4578c07 100644
--- a/3party/boost/boost/geometry/util/math.hpp
+++ b/3party/boost/boost/geometry/util/math.hpp
@@ -1,8 +1,13 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
@@ -17,7 +22,10 @@
#include <cmath>
#include <limits>
+#include <boost/type_traits/is_fundamental.hpp>
+
#include <boost/math/constants/constants.hpp>
+#include <boost/numeric/conversion/cast.hpp>
#include <boost/geometry/util/select_most_precise.hpp>
@@ -85,9 +93,72 @@ struct smaller<Type, true>
};
-template <typename Type, bool IsFloatingPoint>
+template <typename Type, bool IsFloatingPoint>
struct equals_with_epsilon : public equals<Type, IsFloatingPoint> {};
+template
+<
+ typename T,
+ bool IsFundemantal = boost::is_fundamental<T>::value /* false */
+>
+struct square_root
+{
+ typedef T return_type;
+
+ static inline T apply(T const& value)
+ {
+ // for non-fundamental number types assume that sqrt is
+ // defined either:
+ // 1) at T's scope, or
+ // 2) at global scope, or
+ // 3) in namespace std
+ using ::sqrt;
+ using std::sqrt;
+
+ return sqrt(value);
+ }
+};
+
+template <>
+struct square_root<float, true>
+{
+ typedef float return_type;
+
+ static inline float apply(float const& value)
+ {
+ // for float use std::sqrt
+ return std::sqrt(value);
+ }
+};
+
+template <>
+struct square_root<long double, true>
+{
+ typedef long double return_type;
+
+ static inline long double apply(long double const& value)
+ {
+ // for long double use std::sqrt
+ return std::sqrt(value);
+ }
+};
+
+template <typename T>
+struct square_root<T, true>
+{
+ typedef double return_type;
+
+ static inline double apply(T const& value)
+ {
+ // for all other fundamental number types use also std::sqrt
+ //
+ // Note: in C++98 the only other possibility is double;
+ // in C++11 there are also overloads for integral types;
+ // this specialization works for those as well.
+ return std::sqrt(boost::numeric_cast<double>(value));
+ }
+};
+
/*!
\brief Short construct to enable partial specialization for PI, currently not possible in Math.
@@ -111,6 +182,29 @@ struct relaxed_epsilon
}
};
+// ItoF ItoI FtoF
+template <typename Result, typename Source,
+ bool ResultIsInteger = std::numeric_limits<Result>::is_integer,
+ bool SourceIsInteger = std::numeric_limits<Source>::is_integer>
+struct round
+{
+ static inline Result apply(Source const& v)
+ {
+ return boost::numeric_cast<Result>(v);
+ }
+};
+
+// FtoI
+template <typename Result, typename Source>
+struct round<Result, Source, true, false>
+{
+ static inline Result apply(Source const& v)
+ {
+ return v < 0
+ ? boost::numeric_cast<Result>(ceil(v - 0.5f))
+ : boost::numeric_cast<Result>(floor(v + 0.5f));
+ }
+};
} // namespace detail
#endif
@@ -158,7 +252,7 @@ inline bool equals_with_epsilon(T1 const& a, T2 const& b)
typedef typename select_most_precise<T1, T2>::type select_type;
return detail::equals_with_epsilon
<
- select_type,
+ select_type,
boost::is_floating_point<select_type>::type::value
>::apply(a, b);
}
@@ -216,18 +310,58 @@ inline T sqr(T const& value)
return value * value;
}
+/*!
+\brief Short utility to return the square root
+\ingroup utility
+\param value Value to calculate the square root from
+\return The square root value
+*/
+template <typename T>
+inline typename detail::square_root<T>::return_type
+sqrt(T const& value)
+{
+ return detail::square_root
+ <
+ T, boost::is_fundamental<T>::value
+ >::apply(value);
+}
/*!
\brief Short utility to workaround gcc/clang problem that abs is converting to integer
+ and that older versions of MSVC does not support abs of long long...
\ingroup utility
*/
template<typename T>
-inline T abs(const T& t)
+inline T abs(T const& value)
+{
+ T const zero = T();
+ return value < zero ? -value : value;
+}
+
+/*!
+\brief Short utility to calculate the sign of a number: -1 (negative), 0 (zero), 1 (positive)
+\ingroup utility
+*/
+template <typename T>
+static inline int sign(T const& value)
{
- using std::abs;
- return abs(t);
+ T const zero = T();
+ return value > zero ? 1 : value < zero ? -1 : 0;
}
+/*!
+\brief Short utility to calculate the rounded value of a number.
+\ingroup utility
+\note If the source T is NOT an integral type and Result is an integral type
+ the value is rounded towards the closest integral value. Otherwise it's
+ just casted.
+*/
+template <typename Result, typename T>
+inline Result round(T const& v)
+{
+ // NOTE: boost::round() could be used instead but it throws in some situations
+ return detail::round<Result, T>::apply(v);
+}
} // namespace math
diff --git a/3party/boost/boost/geometry/util/parameter_type_of.hpp b/3party/boost/boost/geometry/util/parameter_type_of.hpp
index b8872d52bf..3ed09ab9bb 100644
--- a/3party/boost/boost/geometry/util/parameter_type_of.hpp
+++ b/3party/boost/boost/geometry/util/parameter_type_of.hpp
@@ -25,7 +25,7 @@
namespace boost { namespace geometry
-{
+{
/*!
@@ -46,7 +46,7 @@ struct parameter_type_of
boost::mpl::int_<1>,
boost::mpl::int_<0>
>::type base_index_type;
-
+
typedef typename boost::mpl::if_c
<
Index == 0,
diff --git a/3party/boost/boost/geometry/util/range.hpp b/3party/boost/boost/geometry/util/range.hpp
new file mode 100644
index 0000000000..fe3502f978
--- /dev/null
+++ b/3party/boost/boost/geometry/util/range.hpp
@@ -0,0 +1,325 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+// 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)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_UTIL_RANGE_HPP
+#define BOOST_GEOMETRY_UTIL_RANGE_HPP
+
+#include <algorithm>
+
+#include <boost/assert.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/config.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/empty.hpp>
+#include <boost/range/size.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#include <boost/geometry/core/mutable_range.hpp>
+
+namespace boost { namespace geometry { namespace range {
+
+// NOTE: For SinglePassRanges at could iterate over all elements until the i-th element is met.
+
+/*!
+\brief Short utility to conveniently return an element of a RandomAccessRange.
+\ingroup utility
+*/
+template <typename RandomAccessRange>
+inline typename boost::range_value<RandomAccessRange const>::type const&
+at(RandomAccessRange const& rng,
+ typename boost::range_size<RandomAccessRange const>::type i)
+{
+ BOOST_RANGE_CONCEPT_ASSERT(( boost::RandomAccessRangeConcept<RandomAccessRange const> ));
+ BOOST_ASSERT(i < boost::size(rng));
+ return *(boost::begin(rng) + i);
+}
+
+/*!
+\brief Short utility to conveniently return an element of a RandomAccessRange.
+\ingroup utility
+*/
+template <typename RandomAccessRange>
+inline typename boost::range_value<RandomAccessRange>::type &
+at(RandomAccessRange & rng,
+ typename boost::range_size<RandomAccessRange>::type i)
+{
+ BOOST_RANGE_CONCEPT_ASSERT(( boost::RandomAccessRangeConcept<RandomAccessRange> ));
+ BOOST_ASSERT(i < boost::size(rng));
+ return *(boost::begin(rng) + i);
+}
+
+/*!
+\brief Short utility to conveniently return the front element of a Range.
+\ingroup utility
+*/
+template <typename Range>
+inline typename boost::range_value<Range>::type const&
+front(Range const& rng)
+{
+ BOOST_ASSERT(!boost::empty(rng));
+ return *boost::begin(rng);
+}
+
+/*!
+\brief Short utility to conveniently return the front element of a Range.
+\ingroup utility
+*/
+template <typename Range>
+inline typename boost::range_value<Range>::type &
+front(Range & rng)
+{
+ BOOST_ASSERT(!boost::empty(rng));
+ return *boost::begin(rng);
+}
+
+// NOTE: For SinglePassRanges back() could iterate over all elements until the last element is met.
+
+/*!
+\brief Short utility to conveniently return the back element of a BidirectionalRange.
+\ingroup utility
+*/
+template <typename BidirectionalRange>
+inline typename boost::range_value<BidirectionalRange>::type const&
+back(BidirectionalRange const& rng)
+{
+ BOOST_RANGE_CONCEPT_ASSERT(( boost::BidirectionalRangeConcept<BidirectionalRange const> ));
+ BOOST_ASSERT(!boost::empty(rng));
+ return *(--boost::end(rng));
+}
+
+/*!
+\brief Short utility to conveniently return the back element of a BidirectionalRange.
+\ingroup utility
+*/
+template <typename BidirectionalRange>
+inline typename boost::range_value<BidirectionalRange>::type &
+back(BidirectionalRange & rng)
+{
+ BOOST_RANGE_CONCEPT_ASSERT(( boost::BidirectionalRangeConcept<BidirectionalRange> ));
+ BOOST_ASSERT(!boost::empty(rng));
+ return *(--boost::end(rng));
+}
+
+
+/*!
+\brief Short utility to conveniently clear a mutable range.
+ It uses traits::clear<>.
+\ingroup utility
+*/
+template <typename Range>
+inline void clear(Range & rng)
+{
+ // NOTE: this trait is probably not needed since it could be implemented using resize()
+ geometry::traits::clear<Range>::apply(rng);
+}
+
+/*!
+\brief Short utility to conveniently insert a new element at the end of a mutable range.
+ It uses boost::geometry::traits::push_back<>.
+\ingroup utility
+*/
+template <typename Range>
+inline void push_back(Range & rng,
+ typename boost::range_value<Range>::type const& value)
+{
+ geometry::traits::push_back<Range>::apply(rng, value);
+}
+
+/*!
+\brief Short utility to conveniently resize a mutable range.
+ It uses boost::geometry::traits::resize<>.
+\ingroup utility
+*/
+template <typename Range>
+inline void resize(Range & rng,
+ typename boost::range_size<Range>::type new_size)
+{
+ geometry::traits::resize<Range>::apply(rng, new_size);
+}
+
+
+/*!
+\brief Short utility to conveniently remove an element from the back of a mutable range.
+ It uses resize().
+\ingroup utility
+*/
+template <typename Range>
+inline void pop_back(Range & rng)
+{
+ BOOST_ASSERT(!boost::empty(rng));
+ range::resize(rng, boost::size(rng) - 1);
+}
+
+namespace detail {
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template <typename It,
+ typename OutIt,
+ bool UseMove = boost::is_convertible
+ <
+ typename std::iterator_traits<It>::value_type &&,
+ typename std::iterator_traits<OutIt>::value_type
+ >::value>
+struct copy_or_move_impl
+{
+ static inline OutIt apply(It first, It last, OutIt out)
+ {
+ return std::move(first, last, out);
+ }
+};
+
+template <typename It, typename OutIt>
+struct copy_or_move_impl<It, OutIt, false>
+{
+ static inline OutIt apply(It first, It last, OutIt out)
+ {
+ return std::copy(first, last, out);
+ }
+};
+
+template <typename It, typename OutIt>
+inline OutIt copy_or_move(It first, It last, OutIt out)
+{
+ return copy_or_move_impl<It, OutIt>::apply(first, last, out);
+}
+
+#else
+
+template <typename It, typename OutIt>
+inline OutIt copy_or_move(It first, It last, OutIt out)
+{
+ return std::copy(first, last, out);
+}
+
+#endif
+
+} // namespace detail
+
+/*!
+\brief Short utility to conveniently remove an element from a mutable range.
+ It uses std::copy() and resize(). Version taking mutable iterators.
+\ingroup utility
+*/
+template <typename Range>
+inline typename boost::range_iterator<Range>::type
+erase(Range & rng,
+ typename boost::range_iterator<Range>::type it)
+{
+ BOOST_ASSERT(!boost::empty(rng));
+ BOOST_ASSERT(it != boost::end(rng));
+
+ typename boost::range_difference<Range>::type const
+ d = std::distance(boost::begin(rng), it);
+
+ typename boost::range_iterator<Range>::type
+ next = it;
+ ++next;
+
+ detail::copy_or_move(next, boost::end(rng), it);
+ range::resize(rng, boost::size(rng) - 1);
+
+ // NOTE: In general this should be sufficient:
+ // return it;
+ // But in MSVC using the returned iterator causes
+ // assertion failures when iterator debugging is enabled
+ // Furthermore the code below should work in the case if resize()
+ // invalidates iterators when the container is resized down.
+ return boost::begin(rng) + d;
+}
+
+/*!
+\brief Short utility to conveniently remove an element from a mutable range.
+ It uses std::copy() and resize(). Version taking non-mutable iterators.
+\ingroup utility
+*/
+template <typename Range>
+inline typename boost::range_iterator<Range>::type
+erase(Range & rng,
+ typename boost::range_iterator<Range const>::type cit)
+{
+ BOOST_RANGE_CONCEPT_ASSERT(( boost::RandomAccessRangeConcept<Range> ));
+
+ typename boost::range_iterator<Range>::type
+ it = boost::begin(rng)
+ + std::distance(boost::const_begin(rng), cit);
+
+ return erase(rng, it);
+}
+
+/*!
+\brief Short utility to conveniently remove a range of elements from a mutable range.
+ It uses std::copy() and resize(). Version taking mutable iterators.
+\ingroup utility
+*/
+template <typename Range>
+inline typename boost::range_iterator<Range>::type
+erase(Range & rng,
+ typename boost::range_iterator<Range>::type first,
+ typename boost::range_iterator<Range>::type last)
+{
+ typename boost::range_difference<Range>::type const
+ diff = std::distance(first, last);
+ BOOST_ASSERT(diff >= 0);
+
+ std::size_t const count = static_cast<std::size_t>(diff);
+ BOOST_ASSERT(count <= boost::size(rng));
+
+ if ( count > 0 )
+ {
+ typename boost::range_difference<Range>::type const
+ d = std::distance(boost::begin(rng), first);
+
+ detail::copy_or_move(last, boost::end(rng), first);
+ range::resize(rng, boost::size(rng) - count);
+
+ // NOTE: In general this should be sufficient:
+ // return first;
+ // But in MSVC using the returned iterator causes
+ // assertion failures when iterator debugging is enabled
+ // Furthermore the code below should work in the case if resize()
+ // invalidates iterators when the container is resized down.
+ return boost::begin(rng) + d;
+ }
+
+ return first;
+}
+
+/*!
+\brief Short utility to conveniently remove a range of elements from a mutable range.
+ It uses std::copy() and resize(). Version taking non-mutable iterators.
+\ingroup utility
+*/
+template <typename Range>
+inline typename boost::range_iterator<Range>::type
+erase(Range & rng,
+ typename boost::range_iterator<Range const>::type cfirst,
+ typename boost::range_iterator<Range const>::type clast)
+{
+ BOOST_RANGE_CONCEPT_ASSERT(( boost::RandomAccessRangeConcept<Range> ));
+
+ typename boost::range_iterator<Range>::type
+ first = boost::begin(rng)
+ + std::distance(boost::const_begin(rng), cfirst);
+ typename boost::range_iterator<Range>::type
+ last = boost::begin(rng)
+ + std::distance(boost::const_begin(rng), clast);
+
+ return erase(rng, first, last);
+}
+
+}}} // namespace boost::geometry::range
+
+#endif // BOOST_GEOMETRY_UTIL_RANGE_HPP
diff --git a/3party/boost/boost/geometry/util/rational.hpp b/3party/boost/boost/geometry/util/rational.hpp
index b397532bca..805c85eb46 100644
--- a/3party/boost/boost/geometry/util/rational.hpp
+++ b/3party/boost/boost/geometry/util/rational.hpp
@@ -21,11 +21,11 @@
#include <boost/geometry/util/select_most_precise.hpp>
-namespace boost{ namespace geometry
-{
+namespace boost{ namespace geometry
+{
-// Specialize for Boost.Geometry's coordinate cast
+// Specialize for Boost.Geometry's coordinate cast
// (from string to coordinate type)
namespace detail
{
@@ -70,7 +70,7 @@ struct coordinate_cast<rational<T> >
}
split_parts(source, p, before, after, negate, len);
- return negate
+ return negate
? -rational<T>(before, after)
: rational<T>(before, after)
;
@@ -85,7 +85,7 @@ struct coordinate_cast<rational<T> >
den *= 10;
}
- return negate
+ return negate
? -rational<T>(before) - rational<T>(after, den)
: rational<T>(before) + rational<T>(after, den)
;
@@ -115,19 +115,19 @@ struct select_most_precise<boost::rational<T>, double>
// Specializes boost::rational to boost::numeric::bounds
-namespace boost { namespace numeric
+namespace boost { namespace numeric
{
template<class T>
struct bounds<rational<T> >
{
- static inline rational<T> lowest()
- {
- return rational<T>(bounds<T>::lowest(), 1);
+ static inline rational<T> lowest()
+ {
+ return rational<T>(bounds<T>::lowest(), 1);
}
- static inline rational<T> highest()
- {
- return rational<T>(bounds<T>::highest(), 1);
+ static inline rational<T> highest()
+ {
+ return rational<T>(bounds<T>::highest(), 1);
}
};
diff --git a/3party/boost/boost/geometry/util/transform_variant.hpp b/3party/boost/boost/geometry/util/transform_variant.hpp
new file mode 100644
index 0000000000..9e4a7aa152
--- /dev/null
+++ b/3party/boost/boost/geometry/util/transform_variant.hpp
@@ -0,0 +1,79 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_UTIL_TRANSFORM_VARIANT_HPP
+#define BOOST_GEOMETRY_UTIL_TRANSFORM_VARIANT_HPP
+
+
+#include <boost/mpl/transform.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
+
+namespace boost { namespace geometry
+{
+
+
+/*!
+ \brief Meta-function that takes a Sequence type, an MPL lambda
+ expression and an optional Inserter and returns a variant type over
+ the same types as the initial variant type, each transformed using
+ the lambda expression.
+ \ingroup utility
+ \par Example
+ \code
+ typedef mpl::vector<int, float, long> types;
+ typedef transform_variant<types, add_pointer<_> > transformed;
+ typedef variant<int*, float*, long*> result;
+ BOOST_MPL_ASSERT(( equal<result, transformed> ));
+ \endcode
+*/
+template <typename Sequence, typename Op, typename In = boost::mpl::na>
+struct transform_variant:
+ make_variant_over<
+ typename mpl::transform<
+ Sequence,
+ Op,
+ In
+ >::type
+ >
+{};
+
+
+/*!
+ \brief Meta-function that takes a boost::variant type and an MPL lambda
+ expression and returns a variant type over the same types as the
+ initial variant type, each transformed using the lambda expression.
+ \ingroup utility
+ \par Example
+ \code
+ typedef variant<int, float, long> variant_type;
+ typedef transform_variant<variant_type, add_pointer<_> > transformed;
+ typedef variant<int*, float*, long*> result;
+ BOOST_MPL_ASSERT(( equal<result, transformed> ));
+ \endcode
+*/
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Op>
+struct transform_variant<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Op, boost::mpl::na> :
+ make_variant_over<
+ typename mpl::transform<
+ typename variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
+ Op
+ >::type
+ >
+{};
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_UTIL_TRANSFORM_VARIANT_HPP
diff --git a/3party/boost/boost/geometry/views/box_view.hpp b/3party/boost/boost/geometry/views/box_view.hpp
index 26608b0860..3f448efe81 100644
--- a/3party/boost/boost/geometry/views/box_view.hpp
+++ b/3party/boost/boost/geometry/views/box_view.hpp
@@ -43,29 +43,29 @@ namespace boost { namespace geometry
\qbk{[include reference/views/box_view.qbk]}
*/
template <typename Box, bool Clockwise = true>
-struct box_view
+struct box_view
: public detail::points_view
<
- typename geometry::point_type<Box>::type,
+ typename geometry::point_type<Box>::type,
5
>
{
typedef typename geometry::point_type<Box>::type point_type;
-
+
/// Constructor accepting the box to adapt
explicit box_view(Box const& box)
: detail::points_view<point_type, 5>(copy_policy(box))
{}
-
-private :
-
+
+private :
+
class copy_policy
{
public :
inline copy_policy(Box const& box)
: m_box(box)
{}
-
+
inline void apply(point_type* points) const
{
detail::assign_box_corners_oriented<!Clockwise>(m_box, points);
diff --git a/3party/boost/boost/geometry/views/closeable_view.hpp b/3party/boost/boost/geometry/views/closeable_view.hpp
index 882de1ae6b..1f1eb2720b 100644
--- a/3party/boost/boost/geometry/views/closeable_view.hpp
+++ b/3party/boost/boost/geometry/views/closeable_view.hpp
@@ -30,7 +30,7 @@ namespace boost { namespace geometry
// Silence warning C4512: assignment operator could not be generated
#if defined(_MSC_VER)
-#pragma warning(push)
+#pragma warning(push)
#pragma warning(disable : 4512)
#endif
@@ -67,7 +67,7 @@ private :
/*!
\brief View on a range, either closing it or leaving it as it is
\details The closeable_view is used internally by the library to handle all rings,
- either closed or open, the same way. The default method is closed, all
+ either closed or open, the same way. The default method is closed, all
algorithms process rings as if they are closed. Therefore, if they are opened,
a view is created which closes them.
The closeable_view might be used by library users, but its main purpose is
diff --git a/3party/boost/boost/geometry/views/detail/indexed_point_view.hpp b/3party/boost/boost/geometry/views/detail/indexed_point_view.hpp
new file mode 100644
index 0000000000..88b13ec5c4
--- /dev/null
+++ b/3party/boost/boost/geometry/views/detail/indexed_point_view.hpp
@@ -0,0 +1,112 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_VIEWS_DETAIL_INDEXED_POINT_VIEW_HPP
+#define BOOST_GEOMETRY_VIEWS_DETAIL_INDEXED_POINT_VIEW_HPP
+
+#include <cstddef>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/coordinate_system.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/util/math.hpp>
+
+namespace boost { namespace geometry
+{
+
+namespace detail
+{
+
+template <typename Geometry, std::size_t Index>
+class indexed_point_view
+{
+ indexed_point_view & operator=(indexed_point_view const&);
+
+public:
+ typedef typename geometry::point_type<Geometry>::type point_type;
+ typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
+
+ indexed_point_view(Geometry & geometry)
+ : m_geometry(geometry)
+ {}
+
+ template <std::size_t Dimension>
+ inline coordinate_type get() const
+ {
+ return geometry::get<Index, Dimension>(m_geometry);
+ }
+
+ template <std::size_t Dimension>
+ inline void set(coordinate_type const& value)
+ {
+ geometry::set<Index, Dimension>(m_geometry, value);
+ }
+
+private:
+ Geometry & m_geometry;
+};
+
+}
+
+#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+namespace traits
+{
+
+template <typename Geometry, std::size_t Index>
+struct tag< detail::indexed_point_view<Geometry, Index> >
+{
+ typedef point_tag type;
+};
+
+template <typename Geometry, std::size_t Index>
+struct coordinate_type< detail::indexed_point_view<Geometry, Index> >
+{
+ typedef typename geometry::coordinate_type<Geometry>::type type;
+};
+
+template <typename Geometry, std::size_t Index>
+struct coordinate_system< detail::indexed_point_view<Geometry, Index> >
+{
+ typedef typename geometry::coordinate_system<Geometry>::type type;
+};
+
+template <typename Geometry, std::size_t Index>
+struct dimension< detail::indexed_point_view<Geometry, Index> >
+ : geometry::dimension<Geometry>
+{};
+
+template<typename Geometry, std::size_t Index, std::size_t Dimension>
+struct access< detail::indexed_point_view<Geometry, Index>, Dimension >
+{
+ typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
+
+ static inline coordinate_type get(
+ detail::indexed_point_view<Geometry, Index> const& p)
+ {
+ return p.template get<Dimension>();
+ }
+
+ static inline void set(
+ detail::indexed_point_view<Geometry, Index> & p,
+ coordinate_type const& value)
+ {
+ p.template set<Dimension>(value);
+ }
+};
+
+} // namespace traits
+#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_VIEWS_DETAIL_INDEXED_POINT_VIEW_HPP
diff --git a/3party/boost/boost/geometry/views/detail/normalized_view.hpp b/3party/boost/boost/geometry/views/detail/normalized_view.hpp
new file mode 100644
index 0000000000..d50ffe48c8
--- /dev/null
+++ b/3party/boost/boost/geometry/views/detail/normalized_view.hpp
@@ -0,0 +1,116 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+#ifndef BOOST_GEOMETRY_VIEWS_DETAIL_NORMALIZED_VIEW_HPP
+#define BOOST_GEOMETRY_VIEWS_DETAIL_NORMALIZED_VIEW_HPP
+
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/geometry/views/detail/range_type.hpp>
+#include <boost/geometry/views/reversible_view.hpp>
+#include <boost/geometry/views/closeable_view.hpp>
+
+namespace boost { namespace geometry {
+
+
+#ifndef DOXYGEN_NO_DETAIL
+
+namespace detail {
+
+template <typename Geometry>
+struct normalized_view
+{
+ static const bool is_const = boost::is_const<Geometry>::value;
+
+ //typedef typename ring_type<Geometry>::type ring_type;
+
+ typedef typename detail::range_type<Geometry>::type range_type;
+
+ typedef typename
+ boost::mpl::if_c
+ <
+ is_const,
+ range_type const,
+ range_type
+ >::type range;
+
+ typedef typename
+ reversible_view
+ <
+ range,
+ order_as_direction
+ <
+ geometry::point_order<Geometry>::value
+ >::value
+ >::type reversible_type;
+
+ typedef typename
+ boost::mpl::if_c
+ <
+ is_const,
+ reversible_type const,
+ reversible_type
+ >::type reversible;
+
+ typedef typename
+ closeable_view
+ <
+ reversible,
+ geometry::closure<Geometry>::value
+ >::type closeable_type;
+
+ typedef typename
+ boost::mpl::if_c
+ <
+ is_const,
+ closeable_type const,
+ closeable_type
+ >::type closeable;
+
+ explicit inline normalized_view(range & r)
+ : m_reversible(r)
+ , m_closeable(m_reversible)
+ {}
+
+ typedef typename boost::range_iterator<closeable>::type iterator;
+ typedef typename boost::range_const_iterator<closeable>::type const_iterator;
+
+ inline const_iterator begin() const { return boost::begin(m_closeable); }
+ inline const_iterator end() const { return boost::end(m_closeable); }
+
+ inline iterator begin() { return boost::begin(m_closeable); }
+ inline iterator end() { return boost::end(m_closeable); }
+
+private:
+ reversible_type m_reversible;
+ closeable_type m_closeable;
+};
+
+} // namespace detail
+
+#endif // DOXYGEN_NO_DETAIL
+
+
+}} // namespace boost::geometry
+
+
+#endif // BOOST_GEOMETRY_VIEWS_DETAIL_NORMALIZED_VIEW_HPP
diff --git a/3party/boost/boost/geometry/views/detail/points_view.hpp b/3party/boost/boost/geometry/views/detail/points_view.hpp
index 91fbc41c19..3f6fdc6093 100644
--- a/3party/boost/boost/geometry/views/detail/points_view.hpp
+++ b/3party/boost/boost/geometry/views/detail/points_view.hpp
@@ -47,21 +47,21 @@ class points_view
// Constructor: Begin iterator
inline points_iterator(Point const* p)
: m_points(p)
- , m_index(0)
+ , m_index(0)
{}
// Constructor: End iterator
inline points_iterator(Point const* p, bool)
: m_points(p)
- , m_index(MaxSize)
+ , m_index(MaxSize)
{}
// Constructor: default (for Range Concept checking).
inline points_iterator()
: m_points(NULL)
- , m_index(MaxSize)
+ , m_index(MaxSize)
{}
-
+
typedef std::ptrdiff_t difference_type;
private:
@@ -73,7 +73,7 @@ class points_view
{
return m_points[m_index];
}
-
+
// If it index larger (or smaller) return first point
// (assuming initialized)
return m_points[0];
@@ -98,7 +98,7 @@ class points_view
{
return other.m_index - this->m_index;
}
-
+
inline void advance(difference_type n)
{
m_index += n;
@@ -127,8 +127,8 @@ protected :
{
copy.apply(m_points);
}
-
-private :
+
+private :
// Copy points here - box might define them otherwise
Point m_points[MaxSize];
};
diff --git a/3party/boost/boost/geometry/views/detail/range_type.hpp b/3party/boost/boost/geometry/views/detail/range_type.hpp
index a40670cf99..fff634c379 100644
--- a/3party/boost/boost/geometry/views/detail/range_type.hpp
+++ b/3party/boost/boost/geometry/views/detail/range_type.hpp
@@ -16,7 +16,7 @@
#include <boost/mpl/assert.hpp>
-#include <boost/type_traits.hpp>
+#include <boost/range/value_type.hpp>
#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/tag.hpp>
@@ -33,7 +33,8 @@ namespace dispatch
{
-template <typename GeometryTag, typename Geometry>
+template <typename Geometry,
+ typename Tag = typename tag<Geometry>::type>
struct range_type
{
BOOST_MPL_ASSERT_MSG
@@ -45,31 +46,59 @@ struct range_type
template <typename Geometry>
-struct range_type<ring_tag, Geometry>
+struct range_type<Geometry, ring_tag>
{
typedef Geometry type;
};
+
template <typename Geometry>
-struct range_type<linestring_tag, Geometry>
+struct range_type<Geometry, linestring_tag>
{
typedef Geometry type;
};
template <typename Geometry>
-struct range_type<polygon_tag, Geometry>
+struct range_type<Geometry, polygon_tag>
{
typedef typename ring_type<Geometry>::type type;
};
+
template <typename Geometry>
-struct range_type<box_tag, Geometry>
+struct range_type<Geometry, box_tag>
{
typedef box_view<Geometry> type;
};
+// multi-point acts itself as a range
+template <typename Geometry>
+struct range_type<Geometry, multi_point_tag>
+{
+ typedef Geometry type;
+};
+
+
+template <typename Geometry>
+struct range_type<Geometry, multi_linestring_tag>
+{
+ typedef typename boost::range_value<Geometry>::type type;
+};
+
+
+template <typename Geometry>
+struct range_type<Geometry, multi_polygon_tag>
+{
+ // Call its single-version
+ typedef typename dispatch::range_type
+ <
+ typename boost::range_value<Geometry>::type
+ >::type type;
+};
+
+
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
@@ -93,7 +122,6 @@ struct range_type
{
typedef typename dispatch::range_type
<
- typename tag<Geometry>::type,
Geometry
>::type type;
};
diff --git a/3party/boost/boost/geometry/views/identity_view.hpp b/3party/boost/boost/geometry/views/identity_view.hpp
index 5cb9d91f76..8947ebf6fc 100644
--- a/3party/boost/boost/geometry/views/identity_view.hpp
+++ b/3party/boost/boost/geometry/views/identity_view.hpp
@@ -23,7 +23,7 @@ namespace boost { namespace geometry
// Silence warning C4512: assignment operator could not be generated
#if defined(_MSC_VER)
-#pragma warning(push)
+#pragma warning(push)
#pragma warning(disable : 4512)
#endif
diff --git a/3party/boost/boost/geometry/views/segment_view.hpp b/3party/boost/boost/geometry/views/segment_view.hpp
index 50ff617a8d..ce676fc4bf 100644
--- a/3party/boost/boost/geometry/views/segment_view.hpp
+++ b/3party/boost/boost/geometry/views/segment_view.hpp
@@ -28,7 +28,7 @@ namespace boost { namespace geometry
/*!
\brief Makes a segment behave like a linestring or a range
-\details Adapts a segment to the Boost.Range concept, enabling the user to
+\details Adapts a segment to the Boost.Range concept, enabling the user to
iterate the two segment points. The segment_view is registered as a LineString Concept
\tparam Segment \tparam_geometry{Segment}
\ingroup views
@@ -45,26 +45,26 @@ template <typename Segment>
struct segment_view
: public detail::points_view
<
- typename geometry::point_type<Segment>::type,
+ typename geometry::point_type<Segment>::type,
2
>
{
typedef typename geometry::point_type<Segment>::type point_type;
-
+
/// Constructor accepting the segment to adapt
explicit segment_view(Segment const& segment)
: detail::points_view<point_type, 2>(copy_policy(segment))
{}
-
-private :
-
+
+private :
+
class copy_policy
{
public :
inline copy_policy(Segment const& segment)
: m_segment(segment)
{}
-
+
inline void apply(point_type* points) const
{
geometry::detail::assign_point_from_index<0>(m_segment, points[0]);
diff --git a/3party/boost/boost/gil/channel_algorithm.hpp b/3party/boost/boost/gil/channel_algorithm.hpp
index 957dd52951..1361219a33 100644
--- a/3party/boost/boost/gil/channel_algorithm.hpp
+++ b/3party/boost/boost/gil/channel_algorithm.hpp
@@ -51,7 +51,7 @@ template <typename SrcChannelV, typename DstChannelV, bool SrcLessThanDst, bool
template <typename UnsignedIntegralChannel>
-struct unsigned_integral_max_value : public mpl::integral_c<UnsignedIntegralChannel,static_cast<UnsignedIntegralChannel>(-1)> {};
+struct unsigned_integral_max_value : public mpl::integral_c<UnsignedIntegralChannel,-1> {};
template <>
struct unsigned_integral_max_value<uint8_t> : public mpl::integral_c<uint32_t,0xFF> {};
diff --git a/3party/boost/boost/graph/adjacency_list.hpp b/3party/boost/boost/graph/adjacency_list.hpp
index 6738fa22ca..d7fbc06d87 100644
--- a/3party/boost/boost/graph/adjacency_list.hpp
+++ b/3party/boost/boost/graph/adjacency_list.hpp
@@ -329,7 +329,6 @@ namespace boost {
: Base(num_vertices), m_property(new graph_property_type(p))
{ }
-#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
// Required by Iterator Constructible Graph
template <class EdgeIterator>
adjacency_list(EdgeIterator first, EdgeIterator last,
@@ -347,7 +346,6 @@ namespace boost {
const GraphProperty& p = GraphProperty())
: Base(n, first, last, ep_iter), m_property(new graph_property_type(p))
{ }
-#endif
void swap(adjacency_list& x) {
// Is there a more efficient way to do this?
diff --git a/3party/boost/boost/graph/adjacency_matrix.hpp b/3party/boost/boost/graph/adjacency_matrix.hpp
index 65cf27a57d..b1078d977e 100644
--- a/3party/boost/boost/graph/adjacency_matrix.hpp
+++ b/3party/boost/boost/graph/adjacency_matrix.hpp
@@ -443,9 +443,7 @@ namespace boost {
// graph type. Instead, use directedS, which also provides the
// functionality required for a Bidirectional Graph (in_edges,
// in_degree, etc.).
-#if !defined(_MSC_VER) || _MSC_VER > 1300
BOOST_STATIC_ASSERT(type_traits::ice_not<(is_same<Directed, bidirectionalS>::value)>::value);
-#endif
typedef typename mpl::if_<is_directed,
bidirectional_tag, undirected_tag>::type
@@ -480,13 +478,11 @@ namespace boost {
typedef adjacency_matrix_traits<Directed> Traits;
public:
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
// The bidirectionalS tag is not allowed with the adjacency_matrix
// graph type. Instead, use directedS, which also provides the
// functionality required for a Bidirectional Graph (in_edges,
// in_degree, etc.).
BOOST_STATIC_ASSERT(!(is_same<Directed, bidirectionalS>::value));
-#endif
typedef GraphProperty graph_property_type;
typedef typename lookup_one_property<GraphProperty, graph_bundle_t>::type graph_bundled;
@@ -500,10 +496,9 @@ namespace boost {
public: // should be private
typedef typename mpl::if_<typename has_property<edge_property_type>::type,
std::pair<bool, edge_property_type>, char>::type StoredEdge;
-#if (defined(BOOST_MSVC) && BOOST_MSVC <= 1300) || defined(BOOST_NO_STD_ALLOCATOR)
+#if defined(BOOST_NO_STD_ALLOCATOR)
typedef std::vector<StoredEdge> Matrix;
#else
- // This causes internal compiler error for MSVC
typedef typename Allocator::template rebind<StoredEdge>::other Alloc;
typedef std::vector<StoredEdge, Alloc> Matrix;
#endif
diff --git a/3party/boost/boost/graph/bellman_ford_shortest_paths.hpp b/3party/boost/boost/graph/bellman_ford_shortest_paths.hpp
index e102d92209..7873067a15 100644
--- a/3party/boost/boost/graph/bellman_ford_shortest_paths.hpp
+++ b/3party/boost/boost/graph/bellman_ford_shortest_paths.hpp
@@ -102,8 +102,6 @@ namespace boost {
typedef typename GTraits::vertex_descriptor Vertex;
BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept<DistanceMap, Vertex> ));
BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<WeightMap, Edge> ));
- typedef typename property_traits<DistanceMap>::value_type D_value;
- typedef typename property_traits<WeightMap>::value_type W_value;
typename GTraits::edge_iterator i, end;
diff --git a/3party/boost/boost/graph/betweenness_centrality.hpp b/3party/boost/boost/graph/betweenness_centrality.hpp
index a4de175330..d596d5a284 100644
--- a/3party/boost/boost/graph/betweenness_centrality.hpp
+++ b/3party/boost/boost/graph/betweenness_centrality.hpp
@@ -296,7 +296,6 @@ namespace detail { namespace graph {
ShortestPaths shortest_paths)
{
typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
- typedef typename graph_traits<Graph>::edge_iterator edge_iterator;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
// Initialize centrality
@@ -421,7 +420,6 @@ namespace detail { namespace graph {
VertexIndexMap vertex_index)
{
typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
- typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename mpl::if_c<(is_same<CentralityMap,
dummy_property_map>::value),
@@ -457,7 +455,6 @@ namespace detail { namespace graph {
VertexIndexMap vertex_index)
{
typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
- typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename mpl::if_c<(is_same<CentralityMap,
dummy_property_map>::value),
diff --git a/3party/boost/boost/graph/bipartite.hpp b/3party/boost/boost/graph/bipartite.hpp
index b917c607e7..74316fd537 100644
--- a/3party/boost/boost/graph/bipartite.hpp
+++ b/3party/boost/boost/graph/bipartite.hpp
@@ -198,7 +198,6 @@ namespace boost {
/// General types and variables
typedef typename property_traits <PartitionMap>::value_type partition_color_t;
typedef typename graph_traits <Graph>::vertex_descriptor vertex_descriptor_t;
- typedef typename graph_traits <Graph>::vertex_iterator vertex_iterator_t;
/// Declare dfs visitor
// detail::empty_recorder recorder;
diff --git a/3party/boost/boost/graph/breadth_first_search.hpp b/3party/boost/boost/graph/breadth_first_search.hpp
index 18bc24f5cf..b0d10ad5f3 100644
--- a/3party/boost/boost/graph/breadth_first_search.hpp
+++ b/3party/boost/boost/graph/breadth_first_search.hpp
@@ -64,7 +64,6 @@ namespace boost {
BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<IncidenceGraph> ));
typedef graph_traits<IncidenceGraph> GTraits;
typedef typename GTraits::vertex_descriptor Vertex;
- typedef typename GTraits::edge_descriptor Edge;
BOOST_CONCEPT_ASSERT(( BFSVisitorConcept<BFSVisitor, IncidenceGraph> ));
BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept<ColorMap, Vertex> ));
typedef typename property_traits<ColorMap>::value_type ColorValue;
@@ -248,8 +247,7 @@ namespace boost {
ColorMap color,
BFSVisitor vis,
const bgl_named_params<P, T, R>& params,
- BOOST_GRAPH_ENABLE_IF_MODELS(VertexListGraph, vertex_list_graph_tag,
- void)* = 0)
+ boost::mpl::false_)
{
typedef graph_traits<VertexListGraph> Traits;
// Buffer default
@@ -271,8 +269,7 @@ namespace boost {
ColorMap color,
BFSVisitor vis,
const bgl_named_params<P, T, R>& params,
- BOOST_GRAPH_ENABLE_IF_MODELS(DistributedGraph, distributed_graph_tag,
- void)* = 0);
+ boost::mpl::true_);
#endif // BOOST_GRAPH_USE_MPI
//-------------------------------------------------------------------------
@@ -293,7 +290,11 @@ namespace boost {
(g, s, color,
choose_param(get_param(params, graph_visitor),
make_bfs_visitor(null_visitor())),
- params);
+ params,
+ boost::mpl::bool_<
+ boost::is_base_and_derived<
+ distributed_graph_tag,
+ typename graph_traits<VertexListGraph>::traversal_category>::value>());
}
};
@@ -316,7 +317,11 @@ namespace boost {
g, vertex_index)),
choose_param(get_param(params, graph_visitor),
make_bfs_visitor(null_vis)),
- params);
+ params,
+ boost::mpl::bool_<
+ boost::is_base_and_derived<
+ distributed_graph_tag,
+ typename graph_traits<VertexListGraph>::traversal_category>::value>());
}
};
diff --git a/3party/boost/boost/graph/chrobak_payne_drawing.hpp b/3party/boost/boost/graph/chrobak_payne_drawing.hpp
index 4d026986c2..0e1f052553 100644
--- a/3party/boost/boost/graph/chrobak_payne_drawing.hpp
+++ b/3party/boost/boost/graph/chrobak_payne_drawing.hpp
@@ -73,7 +73,6 @@ namespace boost
{
typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
- typedef typename graph_traits<Graph>::edge_descriptor edge_t;
typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator_t;
typedef typename PlanarEmbedding::value_type::const_iterator
edge_permutation_iterator_t;
diff --git a/3party/boost/boost/graph/closeness_centrality.hpp b/3party/boost/boost/graph/closeness_centrality.hpp
index 44d478ab2b..3ddf284b5b 100644
--- a/3party/boost/boost/graph/closeness_centrality.hpp
+++ b/3party/boost/boost/graph/closeness_centrality.hpp
@@ -123,7 +123,6 @@ all_closeness_centralities(const Graph& g,
typedef typename property_traits<DistanceMatrixMap>::value_type DistanceMap;
BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<DistanceMap,Vertex> ));
BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept<CentralityMap,Vertex> ));
- typedef typename property_traits<DistanceMap>::value_type Distance;
typedef typename property_traits<CentralityMap>::value_type Centrality;
typename graph_traits<Graph>::vertex_iterator i, end;
@@ -147,7 +146,6 @@ all_closeness_centralities(const Graph& g,
BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<DistanceMatrixMap,Vertex> ));
typedef typename property_traits<DistanceMatrixMap>::value_type DistanceMap;
BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<DistanceMap,Vertex> ));
- typedef typename property_traits<DistanceMap>::value_type Distance;
typedef typename property_traits<CentralityMap>::value_type Result;
all_closeness_centralities(g, dist, cent, measure_closeness<Result>(g, DistanceMap()));
diff --git a/3party/boost/boost/graph/compressed_sparse_row_graph.hpp b/3party/boost/boost/graph/compressed_sparse_row_graph.hpp
index de3234a049..7b91d4d6c0 100644
--- a/3party/boost/boost/graph/compressed_sparse_row_graph.hpp
+++ b/3party/boost/boost/graph/compressed_sparse_row_graph.hpp
@@ -192,6 +192,11 @@ class compressed_sparse_row_graph<directedS, VertexProperty, EdgeProperty, Graph
VertexProperty, Vertex, typed_identity_property_map<Vertex> >
inherited_vertex_properties;
+ // Some tests to prevent use of "void" is a property type (as was done in some test cases):
+ BOOST_STATIC_ASSERT((!is_same<VertexProperty, void>::value));
+ BOOST_STATIC_ASSERT((!is_same<EdgeProperty, void>::value));
+ BOOST_STATIC_ASSERT((!is_same<GraphProperty, void>::value));
+
public:
// For Property Graph
typedef GraphProperty graph_property_type;
diff --git a/3party/boost/boost/graph/connected_components.hpp b/3party/boost/boost/graph/connected_components.hpp
index 076b2a68e1..9279110f19 100644
--- a/3party/boost/boost/graph/connected_components.hpp
+++ b/3party/boost/boost/graph/connected_components.hpp
@@ -86,7 +86,7 @@ namespace boost {
typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept<ComponentMap, Vertex> ));
- typedef typename boost::graph_traits<Graph>::directed_category directed;
+ // typedef typename boost::graph_traits<Graph>::directed_category directed;
// BOOST_STATIC_ASSERT((boost::is_same<directed, undirected_tag>::value));
typedef typename property_traits<ComponentMap>::value_type comp_type;
diff --git a/3party/boost/boost/graph/core_numbers.hpp b/3party/boost/boost/graph/core_numbers.hpp
index 33764c4f40..9384f5d662 100644
--- a/3party/boost/boost/graph/core_numbers.hpp
+++ b/3party/boost/boost/graph/core_numbers.hpp
@@ -316,7 +316,6 @@ namespace boost {
core_numbers(Graph& g, CoreMap c, EdgeWeightMap wm, VertexIndexMap vim,
CoreNumVisitor vis)
{
- typedef typename graph_traits<Graph>::vertices_size_type size_type;
detail::compute_in_degree_map(g,c,wm);
return detail::core_numbers_dispatch(g,c,wm,vim,vis);
}
diff --git a/3party/boost/boost/graph/cuthill_mckee_ordering.hpp b/3party/boost/boost/graph/cuthill_mckee_ordering.hpp
index 52dc982a18..e16595c6ce 100644
--- a/3party/boost/boost/graph/cuthill_mckee_ordering.hpp
+++ b/3party/boost/boost/graph/cuthill_mckee_ordering.hpp
@@ -75,7 +75,6 @@ namespace boost {
{
//create queue, visitor...don't forget namespaces!
- typedef typename property_traits<DegreeMap>::value_type ds_type;
typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
typedef typename boost::sparse::sparse_ordering_queue<Vertex> queue;
typedef typename detail::bfs_rcm_visitor<OutputIterator, queue, DegreeMap> Visitor;
@@ -137,7 +136,6 @@ namespace boost {
return permutation;
typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
- typedef typename boost::graph_traits<Graph>::vertex_iterator VerIter;
typedef typename property_traits<ColorMap>::value_type ColorValue;
typedef color_traits<ColorValue> Color;
@@ -172,7 +170,6 @@ namespace boost {
if (boost::graph::has_no_vertices(G))
return permutation;
- typedef out_degree_property_map<Graph> DegreeMap;
std::vector<default_color_type> colors(num_vertices(G));
return cuthill_mckee_ordering(G, permutation,
make_iterator_property_map(&colors[0],
diff --git a/3party/boost/boost/graph/cycle_canceling.hpp b/3party/boost/boost/graph/cycle_canceling.hpp
new file mode 100644
index 0000000000..46a4b864c8
--- /dev/null
+++ b/3party/boost/boost/graph/cycle_canceling.hpp
@@ -0,0 +1,181 @@
+//=======================================================================
+// Copyright 2013 University of Warsaw.
+// Authors: Piotr Wygocki
+//
+// 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)
+//=======================================================================
+//
+//
+//This algorithm is described in "Network Flows: Theory, Algorithms, and Applications"
+// by Ahuja, Magnanti, Orlin.
+
+#ifndef BOOST_GRAPH_CYCLE_CANCELING_HPP
+#define BOOST_GRAPH_CYCLE_CANCELING_HPP
+
+#include <numeric>
+
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/pending/indirect_cmp.hpp>
+#include <boost/pending/relaxed_heap.hpp>
+#include <boost/graph/bellman_ford_shortest_paths.hpp>
+#include <boost/graph/iteration_macros.hpp>
+#include <boost/graph/detail/augment.hpp>
+#include <boost/graph/find_flow_cost.hpp>
+
+namespace boost {
+
+
+namespace detail {
+
+template <typename PredEdgeMap, typename Vertex>
+class RecordEdgeMapAndCycleVertex
+ : public bellman_visitor<edge_predecessor_recorder<PredEdgeMap, on_edge_relaxed> > {
+ typedef edge_predecessor_recorder<PredEdgeMap, on_edge_relaxed> PredRec;
+public:
+ RecordEdgeMapAndCycleVertex(PredEdgeMap pred, Vertex & v) :
+ bellman_visitor<PredRec>(PredRec(pred)), m_v(v), m_pred(pred) {}
+
+ template <typename Graph, typename Edge>
+ void edge_not_minimized(Edge e, const Graph & g) const {
+ typename graph_traits<Graph>::vertices_size_type n = num_vertices(g) + 1;
+
+ //edge e is not minimized but does not have to be on the negative weight cycle
+ //to find vertex on negative wieight cycle we move n+1 times backword in the PredEdgeMap graph.
+ while(n > 0) {
+ e = get(m_pred, source(e, g));
+ --n;
+ }
+ m_v = source(e, g);
+ }
+private:
+ Vertex & m_v;
+ PredEdgeMap m_pred;
+};
+
+} //detail
+
+
+template <class Graph, class Pred, class Distance, class Reversed, class ResidualCapacity, class Weight>
+void cycle_canceling(const Graph &g, Weight weight, Reversed rev, ResidualCapacity residual_capacity, Pred pred, Distance distance) {
+ typedef filtered_graph<const Graph, is_residual_edge<ResidualCapacity> > ResGraph;
+ ResGraph gres = detail::residual_graph(g, residual_capacity);
+
+ typedef graph_traits<ResGraph> ResGTraits;
+ typedef graph_traits<Graph> GTraits;
+ typedef typename ResGTraits::edge_descriptor edge_descriptor;
+ typedef typename ResGTraits::vertex_descriptor vertex_descriptor;
+
+ typename GTraits::vertices_size_type N = num_vertices(g);
+
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ put(pred, v, edge_descriptor());
+ put(distance, v, 0);
+ }
+
+ vertex_descriptor cycleStart;
+ while(!bellman_ford_shortest_paths(gres, N,
+ weight_map(weight).
+ distance_map(distance).
+ visitor(detail::RecordEdgeMapAndCycleVertex<Pred, vertex_descriptor>(pred, cycleStart)))) {
+
+ detail::augment(g, cycleStart, cycleStart, pred, residual_capacity, rev);
+
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ put(pred, v, edge_descriptor());
+ put(distance, v, 0);
+ }
+ }
+}
+
+
+//in this namespace argument dispatching takes place
+namespace detail {
+
+template <class Graph, class P, class T, class R, class ResidualCapacity, class Weight, class Reversed, class Pred, class Distance>
+void cycle_canceling_dispatch2(
+ const Graph &g,
+ Weight weight,
+ Reversed rev,
+ ResidualCapacity residual_capacity,
+ Pred pred,
+ Distance dist,
+ const bgl_named_params<P, T, R>& params) {
+ cycle_canceling(g, weight, rev, residual_capacity, pred, dist);
+}
+
+//setting default distance map
+template <class Graph, class P, class T, class R, class Pred, class ResidualCapacity, class Weight, class Reversed>
+void cycle_canceling_dispatch2(
+ Graph &g,
+ Weight weight,
+ Reversed rev,
+ ResidualCapacity residual_capacity,
+ Pred pred,
+ param_not_found,
+ const bgl_named_params<P, T, R>& params) {
+ typedef typename property_traits<Weight>::value_type D;
+
+ std::vector<D> d_map(num_vertices(g));
+
+ cycle_canceling(g, weight, rev, residual_capacity, pred,
+ make_iterator_property_map(d_map.begin(), choose_const_pmap(get_param(params, vertex_index), g, vertex_index)));
+}
+
+template <class Graph, class P, class T, class R, class ResidualCapacity, class Weight, class Reversed, class Pred>
+void cycle_canceling_dispatch1(
+ Graph &g,
+ Weight weight,
+ Reversed rev,
+ ResidualCapacity residual_capacity,
+ Pred pred,
+ const bgl_named_params<P, T, R>& params) {
+ cycle_canceling_dispatch2(g, weight, rev,residual_capacity, pred,
+ get_param(params, vertex_distance), params);
+}
+
+//setting default predecessors map
+template <class Graph, class P, class T, class R, class ResidualCapacity, class Weight, class Reversed>
+void cycle_canceling_dispatch1(
+ Graph &g,
+ Weight weight,
+ Reversed rev,
+ ResidualCapacity residual_capacity,
+ param_not_found,
+ const bgl_named_params<P, T, R>& params) {
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+ std::vector<edge_descriptor> p_map(num_vertices(g));
+
+ cycle_canceling_dispatch2(g, weight, rev, residual_capacity,
+ make_iterator_property_map(p_map.begin(), choose_const_pmap(get_param(params, vertex_index), g, vertex_index)),
+ get_param(params, vertex_distance), params);
+}
+
+}//detail
+
+template <class Graph, class P, class T, class R>
+void cycle_canceling(Graph &g,
+ const bgl_named_params<P, T, R>& params) {
+ cycle_canceling_dispatch1(g,
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ choose_const_pmap(get_param(params, edge_reverse), g, edge_reverse),
+ choose_pmap(get_param(params, edge_residual_capacity),
+ g, edge_residual_capacity),
+ get_param(params, vertex_predecessor),
+ params);
+}
+
+template <class Graph>
+void cycle_canceling(Graph &g) {
+ bgl_named_params<int, buffer_param_t> params(0);
+ cycle_canceling(g, params);
+}
+
+
+}
+
+#endif /* BOOST_GRAPH_CYCLE_CANCELING_HPP */
+
diff --git a/3party/boost/boost/graph/depth_first_search.hpp b/3party/boost/boost/graph/depth_first_search.hpp
index 34d73a2fdd..b002d3674a 100644
--- a/3party/boost/boost/graph/depth_first_search.hpp
+++ b/3party/boost/boost/graph/depth_first_search.hpp
@@ -21,8 +21,10 @@
#include <boost/graph/named_function_params.hpp>
#include <boost/ref.hpp>
#include <boost/implicit_cast.hpp>
+#include <boost/optional.hpp>
#include <boost/parameter.hpp>
#include <boost/concept/assert.hpp>
+#include <boost/tti/has_member_function.hpp>
#include <vector>
#include <utility>
@@ -41,6 +43,7 @@ namespace boost {
vis.tree_edge(e, g);
vis.back_edge(e, g);
vis.forward_or_cross_edge(e, g);
+ // vis.finish_edge(e, g); // Optional for user
vis.finish_vertex(u, g);
}
private:
@@ -57,6 +60,25 @@ namespace boost {
bool operator()(const T&, const T2&) const { return false; }
};
+ BOOST_TTI_HAS_MEMBER_FUNCTION(finish_edge)
+
+ template <bool IsCallable> struct do_call_finish_edge {
+ template <typename E, typename G, typename Vis>
+ static void call_finish_edge(Vis& vis, const E& e, const G& g) {
+ vis.finish_edge(e, g);
+ }
+ };
+
+ template <> struct do_call_finish_edge<false> {
+ template <typename E, typename G, typename Vis>
+ static void call_finish_edge(Vis&, const E&, const G&) {}
+ };
+
+ template <typename E, typename G, typename Vis>
+ void call_finish_edge(Vis& vis, const E& e, const G& g) { // Only call if method exists
+ do_call_finish_edge<has_member_function_finish_edge<Vis, void>::value>::call_finish_edge(vis, e, g);
+ }
+
// Define BOOST_RECURSIVE_DFS to use older, recursive version.
// It is retained for a while in order to perform performance
@@ -85,36 +107,35 @@ namespace boost {
BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<IncidenceGraph> ));
BOOST_CONCEPT_ASSERT(( DFSVisitorConcept<DFSVisitor, IncidenceGraph> ));
typedef typename graph_traits<IncidenceGraph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<IncidenceGraph>::edge_descriptor Edge;
BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept<ColorMap, Vertex> ));
typedef typename property_traits<ColorMap>::value_type ColorValue;
BOOST_CONCEPT_ASSERT(( ColorValueConcept<ColorValue> ));
typedef color_traits<ColorValue> Color;
typedef typename graph_traits<IncidenceGraph>::out_edge_iterator Iter;
- typedef std::pair<Vertex, std::pair<Iter, Iter> > VertexInfo;
+ typedef std::pair<Vertex, std::pair<boost::optional<Edge>, std::pair<Iter, Iter> > > VertexInfo;
+ boost::optional<Edge> src_e;
Iter ei, ei_end;
std::vector<VertexInfo> stack;
// Possible optimization for vector
//stack.reserve(num_vertices(g));
- typedef typename unwrap_reference<TerminatorFunc>::type TF;
-
put(color, u, Color::gray());
vis.discover_vertex(u, g);
boost::tie(ei, ei_end) = out_edges(u, g);
- // Variable is needed to workaround a borland bug.
- TF& fn = static_cast<TF&>(func);
- if (fn(u, g)) {
+ if (func(u, g)) {
// If this vertex terminates the search, we push empty range
- stack.push_back(std::make_pair(u, std::make_pair(ei_end, ei_end)));
+ stack.push_back(std::make_pair(u, std::make_pair(boost::optional<Edge>(), std::make_pair(ei_end, ei_end))));
} else {
- stack.push_back(std::make_pair(u, std::make_pair(ei, ei_end)));
+ stack.push_back(std::make_pair(u, std::make_pair(boost::optional<Edge>(), std::make_pair(ei, ei_end))));
}
while (!stack.empty()) {
VertexInfo& back = stack.back();
u = back.first;
- boost::tie(ei, ei_end) = back.second;
+ src_e = back.second.first;
+ boost::tie(ei, ei_end) = back.second.second;
stack.pop_back();
while (ei != ei_end) {
Vertex v = target(*ei, g);
@@ -122,24 +143,28 @@ namespace boost {
ColorValue v_color = get(color, v);
if (v_color == Color::white()) {
vis.tree_edge(*ei, g);
- stack.push_back(std::make_pair(u, std::make_pair(++ei, ei_end)));
+ src_e = *ei;
+ stack.push_back(std::make_pair(u, std::make_pair(src_e, std::make_pair(++ei, ei_end))));
u = v;
put(color, u, Color::gray());
vis.discover_vertex(u, g);
boost::tie(ei, ei_end) = out_edges(u, g);
- if (fn(u, g)) {
+ if (func(u, g)) {
ei = ei_end;
}
- } else if (v_color == Color::gray()) {
- vis.back_edge(*ei, g);
- ++ei;
} else {
- vis.forward_or_cross_edge(*ei, g);
+ if (v_color == Color::gray()) {
+ vis.back_edge(*ei, g);
+ } else {
+ vis.forward_or_cross_edge(*ei, g);
+ }
+ call_finish_edge(vis, *ei, g);
++ei;
}
}
put(color, u, Color::black());
vis.finish_vertex(u, g);
+ if (src_e) call_finish_edge(vis, src_e.get(), g);
}
}
@@ -164,10 +189,7 @@ namespace boost {
put(color, u, Color::gray()); vis.discover_vertex(u, g);
- typedef typename unwrap_reference<TerminatorFunc>::type TF;
- // Variable is needed to workaround a borland bug.
- TF& fn = static_cast<TF&>(func);
- if (!fn(u, g))
+ if (!func(u, g))
for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) {
Vertex v = target(*ei, g); vis.examine_edge(*ei, g);
ColorValue v_color = get(color, v);
@@ -175,6 +197,7 @@ namespace boost {
depth_first_visit_impl(g, v, vis, color, func);
} else if (v_color == Color::gray()) vis.back_edge(*ei, g);
else vis.forward_or_cross_edge(*ei, g);
+ call_finish_edge(vis, *ei, g);
}
put(color, u, Color::black()); vis.finish_vertex(u, g);
}
@@ -259,6 +282,10 @@ namespace boost {
void forward_or_cross_edge(Edge u, const Graph& g) {
invoke_visitors(m_vis, u, g, ::boost::on_forward_or_cross_edge());
}
+ template <class Edge, class Graph>
+ void finish_edge(Edge u, const Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_finish_edge());
+ }
template <class Vertex, class Graph>
void finish_vertex(Vertex u, const Graph& g) {
invoke_visitors(m_vis, u, g, ::boost::on_finish_vertex());
@@ -271,6 +298,7 @@ namespace boost {
BOOST_GRAPH_EVENT_STUB(on_tree_edge,dfs)
BOOST_GRAPH_EVENT_STUB(on_back_edge,dfs)
BOOST_GRAPH_EVENT_STUB(on_forward_or_cross_edge,dfs)
+ BOOST_GRAPH_EVENT_STUB(on_finish_edge,dfs)
BOOST_GRAPH_EVENT_STUB(on_finish_vertex,dfs)
protected:
diff --git a/3party/boost/boost/graph/detail/adjacency_list.hpp b/3party/boost/boost/graph/detail/adjacency_list.hpp
index dd27ecd4a5..1145d88d29 100644
--- a/3party/boost/boost/graph/detail/adjacency_list.hpp
+++ b/3party/boost/boost/graph/detail/adjacency_list.hpp
@@ -38,6 +38,13 @@
#include <boost/static_assert.hpp>
#include <boost/assert.hpp>
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_GRAPH_MOVE_IF_POSSIBLE(x) (x)
+#else
+#include <utility>
+#define BOOST_GRAPH_MOVE_IF_POSSIBLE(x) (std::move((x)))
+#endif
+
/*
Outline for this file:
@@ -251,6 +258,7 @@ namespace boost {
template <class Vertex>
no_property stored_edge<Vertex>::s_prop;
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
template <class Vertex, class Property>
class stored_edge_property : public stored_edge<Vertex> {
typedef stored_edge_property self;
@@ -277,6 +285,44 @@ namespace boost {
// a perfect fit for the job, but it is darn close.
std::auto_ptr<Property> m_property;
};
+#else
+ template <class Vertex, class Property>
+ class stored_edge_property : public stored_edge<Vertex> {
+ typedef stored_edge_property self;
+ typedef stored_edge<Vertex> Base;
+ public:
+ typedef Property property_type;
+ inline stored_edge_property() { }
+ inline stored_edge_property(Vertex target,
+ const Property& p = Property())
+ : stored_edge<Vertex>(target), m_property(new Property(p)) { }
+#if defined(BOOST_MSVC) || (defined(BOOST_GCC) && (BOOST_GCC / 100) < 406)
+ stored_edge_property(self&& x) : Base(static_cast< Base const& >(x)) {
+ m_property.swap(x.m_property);
+ }
+ stored_edge_property(self const& x) : Base(static_cast< Base const& >(x)) {
+ m_property.swap(const_cast<self&>(x).m_property);
+ }
+ self& operator=(self&& x) {
+ Base::operator=(static_cast< Base const& >(x));
+ m_property = std::move(x.m_property);
+ return *this;
+ }
+ self& operator=(self const& x) {
+ Base::operator=(static_cast< Base const& >(x));
+ m_property = std::move(const_cast<self&>(x).m_property);
+ return *this;
+ }
+#else
+ stored_edge_property(self&& x) = default;
+ self& operator=(self&& x) = default;
+#endif
+ inline Property& get_property() { return *m_property; }
+ inline const Property& get_property() const { return *m_property; }
+ protected:
+ std::unique_ptr<Property> m_property;
+ };
+#endif
template <class Vertex, class Iter, class Property>
@@ -384,7 +430,7 @@ namespace boost {
if (first != last)
for (++i; i != last; ++i)
if (!pred(*i)) {
- *first.base() = *i.base();
+ *first.base() = BOOST_GRAPH_MOVE_IF_POSSIBLE(*i.base());
++first;
}
el.erase(first.base(), el.end());
@@ -432,7 +478,7 @@ namespace boost {
self_loop_removed = false;
}
else if (!pred(*i)) {
- *first.base() = *i.base();
+ *first.base() = BOOST_GRAPH_MOVE_IF_POSSIBLE(*i.base());
++first;
} else {
if (source(*i, g) == target(*i, g)) self_loop_removed = true;
@@ -806,7 +852,6 @@ namespace boost {
typedef typename EdgeList::value_type StoredEdge;
typename EdgeList::iterator i = el.find(StoredEdge(v)), end = el.end();
- BOOST_ASSERT ((i != end));
if (i != end) {
g.m_edges.erase((*i).get_iter());
el.erase(i);
@@ -1611,8 +1656,7 @@ namespace boost {
typename Config::OutEdgeList::iterator first, last;
typename Config::EdgeContainer fake_edge_container;
boost::tie(first, last) = graph_detail::
- equal_range(el, StoredEdge(v, fake_edge_container.end(),
- &fake_edge_container));
+ equal_range(el, StoredEdge(v));
return std::make_pair(out_edge_iterator(first, u),
out_edge_iterator(last, u));
}
@@ -2723,7 +2767,6 @@ namespace boost {
} // namespace boost
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
namespace boost {
template <typename V>
@@ -2757,7 +2800,6 @@ namespace boost {
};
}
-#endif
#endif // BOOST_GRAPH_DETAIL_DETAIL_ADJACENCY_LIST_CCT
diff --git a/3party/boost/boost/graph/detail/augment.hpp b/3party/boost/boost/graph/detail/augment.hpp
new file mode 100644
index 0000000000..3b20dcc4a1
--- /dev/null
+++ b/3party/boost/boost/graph/detail/augment.hpp
@@ -0,0 +1,63 @@
+//=======================================================================
+// Copyright 2013 University of Warsaw.
+// Authors: Piotr Wygocki
+//
+// 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_GRAPH_AUGMENT_HPP
+#define BOOST_GRAPH_AUGMENT_HPP
+
+#include <boost/graph/filtered_graph.hpp>
+
+namespace boost {
+namespace detail {
+
+template <class Graph, class ResCapMap>
+filtered_graph<const Graph, is_residual_edge<ResCapMap> >
+residual_graph(const Graph& g, ResCapMap residual_capacity) {
+ return filtered_graph<const Graph, is_residual_edge<ResCapMap> >
+ (g, is_residual_edge<ResCapMap>(residual_capacity));
+}
+
+template <class Graph, class PredEdgeMap, class ResCapMap,
+ class RevEdgeMap>
+inline void
+augment(const Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ PredEdgeMap p,
+ ResCapMap residual_capacity,
+ RevEdgeMap reverse_edge)
+{
+ typename graph_traits<Graph>::edge_descriptor e;
+ typename graph_traits<Graph>::vertex_descriptor u;
+ typedef typename property_traits<ResCapMap>::value_type FlowValue;
+
+ // find minimum residual capacity along the augmenting path
+ FlowValue delta = (std::numeric_limits<FlowValue>::max)();
+ e = get(p, sink);
+ do {
+ BOOST_USING_STD_MIN();
+ delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(delta, get(residual_capacity, e));
+ u = source(e, g);
+ e = get(p, u);
+ } while (u != src);
+
+ // push delta units of flow along the augmenting path
+ e = get(p, sink);
+ do {
+ put(residual_capacity, e, get(residual_capacity, e) - delta);
+ put(residual_capacity, get(reverse_edge, e), get(residual_capacity, get(reverse_edge, e)) + delta);
+ u = source(e, g);
+ e = get(p, u);
+ } while (u != src);
+}
+
+} // namespace detail
+} //namespace boost
+
+#endif /* BOOST_GRAPH_AUGMENT_HPP */
+
diff --git a/3party/boost/boost/graph/detail/edge.hpp b/3party/boost/boost/graph/detail/edge.hpp
index da085973a7..badf28d4f2 100644
--- a/3party/boost/boost/graph/detail/edge.hpp
+++ b/3party/boost/boost/graph/detail/edge.hpp
@@ -11,11 +11,7 @@
#ifndef BOOST_GRAPH_DETAIL_EDGE_HPP
#define BOOST_GRAPH_DETAIL_EDGE_HPP
-#if __GNUC__ < 3
-#include <iostream>
-#else
#include <iosfwd>
-#endif
namespace boost {
@@ -100,15 +96,6 @@ namespace boost {
} // namespace boost
namespace std {
-
-#if __GNUC__ < 3
- template <class D, class V>
- std::ostream&
- operator<<(std::ostream& os, const boost::detail::edge_desc_impl<D,V>& e)
- {
- return os << "(" << e.m_source << "," << e.m_target << ")";
- }
-#else
template <class Char, class Traits, class D, class V>
std::basic_ostream<Char, Traits>&
operator<<(std::basic_ostream<Char, Traits>& os,
@@ -116,8 +103,16 @@ namespace std {
{
return os << "(" << e.m_source << "," << e.m_target << ")";
}
-#endif
+}
+// Boost's functional/hash
+namespace boost {
+ template<typename D, typename V>
+ struct hash<boost::detail::edge_desc_impl<D, V> >
+ {
+ std::size_t operator()(const boost::detail::edge_desc_impl<D, V> & x) const
+ { return hash_value(x.get_property()); }
+ };
}
diff --git a/3party/boost/boost/graph/dijkstra_shortest_paths.hpp b/3party/boost/boost/graph/dijkstra_shortest_paths.hpp
index 45bac7df32..10e40f828a 100644
--- a/3party/boost/boost/graph/dijkstra_shortest_paths.hpp
+++ b/3party/boost/boost/graph/dijkstra_shortest_paths.hpp
@@ -118,6 +118,7 @@ namespace boost {
struct dijkstra_bfs_visitor
{
typedef typename property_traits<DistanceMap>::value_type D;
+ typedef typename property_traits<WeightMap>::value_type W;
dijkstra_bfs_visitor(UniformCostVisitor vis, UpdatableQueue& Q,
WeightMap w, PredecessorMap p, DistanceMap d,
@@ -159,13 +160,39 @@ namespace boost {
void examine_vertex(Vertex u, Graph& g) { m_vis.examine_vertex(u, g); }
template <class Edge, class Graph>
void examine_edge(Edge e, Graph& g) {
- // Comparison needs to be more complicated because distance and weight
- // types may not be the same; see bug 8398
- // (https://svn.boost.org/trac/boost/ticket/8398)
- D source_dist = get(m_distance, source(e, g));
- if (m_compare(m_combine(source_dist, get(m_weight, e)), source_dist))
+ // Test for negative-weight edges:
+ //
+ // Reasons that other comparisons do not work:
+ //
+ // m_compare(e_weight, D(0)):
+ // m_compare only needs to work on distances, not weights, and those
+ // types do not need to be the same (bug 8398,
+ // https://svn.boost.org/trac/boost/ticket/8398).
+ // m_compare(m_combine(source_dist, e_weight), source_dist):
+ // if m_combine is project2nd (as in prim_minimum_spanning_tree),
+ // this test will claim that the edge weight is negative whenever
+ // the edge weight is less than source_dist, even if both of those
+ // are positive (bug 9012,
+ // https://svn.boost.org/trac/boost/ticket/9012).
+ // m_compare(m_combine(e_weight, source_dist), source_dist):
+ // would fix project2nd issue, but documentation only requires that
+ // m_combine be able to take a distance and a weight (in that order)
+ // and return a distance.
+
+ // W e_weight = get(m_weight, e);
+ // sd_plus_ew = source_dist + e_weight.
+ // D sd_plus_ew = m_combine(source_dist, e_weight);
+ // sd_plus_2ew = source_dist + 2 * e_weight.
+ // D sd_plus_2ew = m_combine(sd_plus_ew, e_weight);
+ // The test here is equivalent to e_weight < 0 if m_combine has a
+ // cancellation law, but always returns false when m_combine is a
+ // projection operator.
+ if (m_compare(m_combine(m_zero, get(m_weight, e)), m_zero))
boost::throw_exception(negative_edge());
+ // End of test for negative-weight edges.
+
m_vis.examine_edge(e, g);
+
}
template <class Edge, class Graph>
void black_target(Edge, Graph&) { }
@@ -256,14 +283,14 @@ namespace boost {
}
// Call breadth first search with default color map.
- template <class Graph, class DijkstraVisitor,
+ template <class Graph, class SourceInputIter, class DijkstraVisitor,
class PredecessorMap, class DistanceMap,
class WeightMap, class IndexMap, class Compare, class Combine,
class DistZero>
inline void
dijkstra_shortest_paths_no_init
(const Graph& g,
- typename graph_traits<Graph>::vertex_descriptor s,
+ SourceInputIter s_begin, SourceInputIter s_end,
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
IndexMap index_map,
Compare compare, Combine combine, DistZero zero,
@@ -275,16 +302,16 @@ namespace boost {
typedef typename ColorMapHelper::type ColorMap;
ColorMap color =
ColorMapHelper::build(g, index_map);
- dijkstra_shortest_paths_no_init( g, s, predecessor, distance, weight,
+ dijkstra_shortest_paths_no_init( g, s_begin, s_end, predecessor, distance, weight,
index_map, compare, combine, zero, vis,
color);
}
- // Call breadth first search
+ // Call breadth first search with default color map.
template <class Graph, class DijkstraVisitor,
class PredecessorMap, class DistanceMap,
class WeightMap, class IndexMap, class Compare, class Combine,
- class DistZero, class ColorMap>
+ class DistZero>
inline void
dijkstra_shortest_paths_no_init
(const Graph& g,
@@ -292,6 +319,25 @@ namespace boost {
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
IndexMap index_map,
Compare compare, Combine combine, DistZero zero,
+ DijkstraVisitor vis)
+ {
+ dijkstra_shortest_paths_no_init(g, &s, &s + 1, predecessor, distance,
+ weight, index_map, compare, combine, zero,
+ vis);
+ }
+
+ // Call breadth first search
+ template <class Graph, class SourceInputIter, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistZero, class ColorMap>
+ inline void
+ dijkstra_shortest_paths_no_init
+ (const Graph& g,
+ SourceInputIter s_begin, SourceInputIter s_end,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistZero zero,
DijkstraVisitor vis, ColorMap color)
{
typedef indirect_cmp<DistanceMap, Compare> IndirectCmp;
@@ -309,7 +355,7 @@ namespace boost {
PredecessorMap, DistanceMap, Combine, Compare>
bfs_vis(vis, Q, weight, predecessor, distance, combine, compare, zero);
- breadth_first_visit(g, s, Q, bfs_vis, color);
+ breadth_first_visit(g, s_begin, s_end, Q, bfs_vis, color);
return;
}
#endif // BOOST_GRAPH_DIJKSTRA_TESTING
@@ -334,11 +380,30 @@ namespace boost {
PredecessorMap, DistanceMap, Combine, Compare>
bfs_vis(vis, Q, weight, predecessor, distance, combine, compare, zero);
- breadth_first_visit(g, s, Q, bfs_vis, color);
+ breadth_first_visit(g, s_begin, s_end, Q, bfs_vis, color);
+ }
+
+ // Call breadth first search
+ template <class Graph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistZero, class ColorMap>
+ inline void
+ dijkstra_shortest_paths_no_init
+ (const Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistZero zero,
+ DijkstraVisitor vis, ColorMap color)
+ {
+ dijkstra_shortest_paths_no_init(g, &s, &s + 1, predecessor, distance,
+ weight, index_map, compare, combine,
+ zero, vis, color);
}
// Initialize distances and call breadth first search with default color map
- template <class VertexListGraph, class DijkstraVisitor,
+ template <class VertexListGraph, class SourceInputIter, class DijkstraVisitor,
class PredecessorMap, class DistanceMap,
class WeightMap, class IndexMap, class Compare, class Combine,
class DistInf, class DistZero, typename T, typename Tag,
@@ -346,7 +411,7 @@ namespace boost {
inline void
dijkstra_shortest_paths
(const VertexListGraph& g,
- typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ SourceInputIter s_begin, SourceInputIter s_end,
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
IndexMap index_map,
Compare compare, Combine combine, DistInf inf, DistZero zero,
@@ -355,16 +420,17 @@ namespace boost {
BOOST_GRAPH_ENABLE_IF_MODELS_PARM(VertexListGraph,vertex_list_graph_tag))
{
boost::two_bit_color_map<IndexMap> color(num_vertices(g), index_map);
- dijkstra_shortest_paths(g, s, predecessor, distance, weight, index_map,
- compare, combine, inf, zero, vis,
+ dijkstra_shortest_paths(g, s_begin, s_end, predecessor, distance, weight,
+ index_map, compare, combine, inf, zero, vis,
color);
}
- // Initialize distances and call breadth first search
+ // Initialize distances and call breadth first search with default color map
template <class VertexListGraph, class DijkstraVisitor,
class PredecessorMap, class DistanceMap,
class WeightMap, class IndexMap, class Compare, class Combine,
- class DistInf, class DistZero, class ColorMap>
+ class DistInf, class DistZero, typename T, typename Tag,
+ typename Base>
inline void
dijkstra_shortest_paths
(const VertexListGraph& g,
@@ -372,6 +438,26 @@ namespace boost {
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
IndexMap index_map,
Compare compare, Combine combine, DistInf inf, DistZero zero,
+ DijkstraVisitor vis,
+ const bgl_named_params<T, Tag, Base>&
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(VertexListGraph,vertex_list_graph_tag))
+ {
+ dijkstra_shortest_paths(g, &s, &s + 1, predecessor, distance, weight,
+ index_map, compare, combine, inf, zero, vis);
+ }
+
+ // Initialize distances and call breadth first search
+ template <class VertexListGraph, class SourceInputIter, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistInf, class DistZero, class ColorMap>
+ inline void
+ dijkstra_shortest_paths
+ (const VertexListGraph& g,
+ SourceInputIter s_begin, SourceInputIter s_end,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistInf inf, DistZero zero,
DijkstraVisitor vis, ColorMap color)
{
typedef typename property_traits<ColorMap>::value_type ColorValue;
@@ -383,17 +469,20 @@ namespace boost {
put(predecessor, *ui, *ui);
put(color, *ui, Color::white());
}
- put(distance, s, zero);
+ for (SourceInputIter it = s_begin; it != s_end; ++it) {
+ put(distance, *it, zero);
+ }
- dijkstra_shortest_paths_no_init(g, s, predecessor, distance, weight,
- index_map, compare, combine, zero, vis, color);
+ dijkstra_shortest_paths_no_init(g, s_begin, s_end, predecessor, distance,
+ weight, index_map, compare, combine, zero, vis,
+ color);
}
// Initialize distances and call breadth first search
template <class VertexListGraph, class DijkstraVisitor,
class PredecessorMap, class DistanceMap,
class WeightMap, class IndexMap, class Compare, class Combine,
- class DistInf, class DistZero>
+ class DistInf, class DistZero, class ColorMap>
inline void
dijkstra_shortest_paths
(const VertexListGraph& g,
@@ -401,13 +490,53 @@ namespace boost {
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
IndexMap index_map,
Compare compare, Combine combine, DistInf inf, DistZero zero,
+ DijkstraVisitor vis, ColorMap color)
+ {
+ dijkstra_shortest_paths(g, &s, &s + 1, predecessor, distance, weight,
+ index_map, compare, combine, inf, zero,
+ vis, color);
+ }
+
+ // Initialize distances and call breadth first search
+ template <class VertexListGraph, class SourceInputIter,
+ class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistInf, class DistZero>
+ inline void
+ dijkstra_shortest_paths
+ (const VertexListGraph& g,
+ SourceInputIter s_begin, SourceInputIter s_end,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistInf inf, DistZero zero,
DijkstraVisitor vis)
{
- dijkstra_shortest_paths(g, s, predecessor, distance, weight, index_map,
+ dijkstra_shortest_paths(g, s_begin, s_end, predecessor, distance,
+ weight, index_map,
compare, combine, inf, zero, vis,
no_named_parameters());
}
+ // Initialize distances and call breadth first search
+ template <class VertexListGraph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistInf, class DistZero>
+ inline void
+ dijkstra_shortest_paths
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistInf inf, DistZero zero,
+ DijkstraVisitor vis)
+ {
+ dijkstra_shortest_paths(g, &s, &s + 1, predecessor, distance,
+ weight, index_map,
+ compare, combine, inf, zero, vis);
+ }
+
namespace detail {
// Handle defaults for PredecessorMap and
diff --git a/3party/boost/boost/graph/dijkstra_shortest_paths_no_color_map.hpp b/3party/boost/boost/graph/dijkstra_shortest_paths_no_color_map.hpp
index c5ce6b6d47..b1a9ef5890 100644
--- a/3party/boost/boost/graph/dijkstra_shortest_paths_no_color_map.hpp
+++ b/3party/boost/boost/graph/dijkstra_shortest_paths_no_color_map.hpp
@@ -41,7 +41,6 @@ namespace boost {
{
typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
typedef typename property_traits<DistanceMap>::value_type Distance;
- typedef typename property_traits<WeightMap>::value_type Weight;
typedef indirect_cmp<DistanceMap, DistanceCompare> DistanceIndirectCompare;
DistanceIndirectCompare
@@ -92,7 +91,6 @@ namespace boost {
}
// Examine neighbors of min_vertex
- typedef typename graph_traits<Graph>::edge_descriptor Edge;
BGL_FORALL_OUTEDGES_T(min_vertex, current_edge, graph, Graph) {
visitor.examine_edge(current_edge, graph);
diff --git a/3party/boost/boost/graph/directed_graph.hpp b/3party/boost/boost/graph/directed_graph.hpp
index 585308d18c..2c56a4e0f8 100644
--- a/3party/boost/boost/graph/directed_graph.hpp
+++ b/3party/boost/boost/graph/directed_graph.hpp
@@ -307,7 +307,7 @@ public:
void swap(directed_graph& g)
{
- m_graph.swap(g);
+ m_graph.swap(g.m_graph);
std::swap(m_num_vertices, g.m_num_vertices);
std::swap(m_max_vertex_index, g.m_max_vertex_index);
std::swap(m_num_edges, g.m_num_edges);
diff --git a/3party/boost/boost/graph/distributed/adjacency_list.hpp b/3party/boost/boost/graph/distributed/adjacency_list.hpp
index 82fad07f72..2175356315 100644
--- a/3party/boost/boost/graph/distributed/adjacency_list.hpp
+++ b/3party/boost/boost/graph/distributed/adjacency_list.hpp
@@ -1490,7 +1490,7 @@ namespace boost {
adjacency_list(const ProcessGroup& pg = ProcessGroup())
: named_graph_mixin(pg, default_distribution_type(pg, 0)),
m_local_graph(GraphProperty()),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
}
@@ -1499,7 +1499,7 @@ namespace boost {
const base_distribution_type& distribution)
: named_graph_mixin(pg, distribution),
m_local_graph(GraphProperty()),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
}
@@ -1508,7 +1508,7 @@ namespace boost {
const ProcessGroup& pg = ProcessGroup())
: named_graph_mixin(pg, default_distribution_type(pg, 0)),
m_local_graph(g),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
}
@@ -1519,7 +1519,7 @@ namespace boost {
const base_distribution_type& distribution)
: named_graph_mixin(pg, distribution),
m_local_graph(distribution.block_size(process_id(pg), n), p),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
@@ -1532,7 +1532,7 @@ namespace boost {
const base_distribution_type& distribution)
: named_graph_mixin(pg, distribution),
m_local_graph(distribution.block_size(process_id(pg), n), GraphProperty()),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
@@ -1545,7 +1545,7 @@ namespace boost {
const ProcessGroup& pg = ProcessGroup())
: named_graph_mixin(pg, default_distribution_type(pg, n)),
m_local_graph(this->distribution().block_size(process_id(pg), n), p),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
@@ -1558,7 +1558,7 @@ namespace boost {
: named_graph_mixin(pg, default_distribution_type(pg, n)),
m_local_graph(this->distribution().block_size(process_id(pg), n),
GraphProperty()),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
@@ -1579,7 +1579,7 @@ namespace boost {
const GraphProperty& p = GraphProperty())
: named_graph_mixin(pg, default_distribution_type(pg, n)),
m_local_graph(this->distribution().block_size(process_id(pg), n), p),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
@@ -1598,7 +1598,7 @@ namespace boost {
const GraphProperty& p = GraphProperty())
: named_graph_mixin(pg, default_distribution_type(pg, n)),
m_local_graph(this->distribution().block_size(process_id(pg), n), p),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
@@ -1618,7 +1618,7 @@ namespace boost {
const GraphProperty& p = GraphProperty())
: named_graph_mixin(pg, distribution),
m_local_graph(distribution.block_size(process_id(pg), n), p),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
@@ -1638,7 +1638,7 @@ namespace boost {
const GraphProperty& p = GraphProperty())
: named_graph_mixin(pg, distribution),
m_local_graph(this->distribution().block_size(process_id(pg), n), p),
- process_group_(pg, graph::parallel::attach_distributed_object())
+ process_group_(pg, boost::parallel::attach_distributed_object())
{
setup_triggers();
@@ -2480,7 +2480,7 @@ namespace boost {
else {
// Edge is remote, so notify the target's owner that an edge
// has been added.
- if (self.process_group_.trigger_context() == graph::parallel::trc_out_of_band)
+ if (self.process_group_.trigger_context() == boost::parallel::trc_out_of_band)
send_oob(self.process_group_, target.owner, msg_nonlocal_edge,
msg_nonlocal_edge_data(result.first.local, property));
else
@@ -2501,9 +2501,6 @@ namespace boost {
std::pair<edge_descriptor, bool> result
= this->add_local_edge(property, directedS());
- typedef detail::parallel::stored_in_edge<local_edge_descriptor>
- stored_edge;
-
if (result.second) {
if (target.owner == self.processor()) {
// Edge is local, so add the new edge to the list
@@ -2522,7 +2519,7 @@ namespace boost {
else {
// Edge is remote, so notify the target's owner that an edge
// has been added.
- if (self.process_group_.trigger_context() == graph::parallel::trc_out_of_band)
+ if (self.process_group_.trigger_context() == boost::parallel::trc_out_of_band)
send_oob(self.process_group_, target.owner, msg_nonlocal_edge,
msg_nonlocal_edge_data(result.first.local, property));
else
@@ -3046,8 +3043,6 @@ namespace boost {
PBGL_DISTRIB_ADJLIST_TYPE& g)
{
typedef typename PBGL_DISTRIB_ADJLIST_TYPE
- ::vertex_descriptor vertex_descriptor;
- typedef typename PBGL_DISTRIB_ADJLIST_TYPE
::edge_descriptor edge_descriptor;
std::pair<edge_descriptor, bool> the_edge = edge(u, v, g);
if (the_edge.second) remove_edge(the_edge.first, g);
@@ -3777,7 +3772,6 @@ namespace boost {
template<PBGL_DISTRIB_ADJLIST_TEMPLATE_PARMS>
void synchronize(const PBGL_DISTRIB_ADJLIST_TYPE& g)
{
- typedef PBGL_DISTRIB_ADJLIST_TYPE graph_type;
synchronize(g.process_group());
}
diff --git a/3party/boost/boost/graph/distributed/adjlist/redistribute.hpp b/3party/boost/boost/graph/distributed/adjlist/redistribute.hpp
index 5401f1240a..c2ab02e709 100644
--- a/3party/boost/boost/graph/distributed/adjlist/redistribute.hpp
+++ b/3party/boost/boost/graph/distributed/adjlist/redistribute.hpp
@@ -179,7 +179,6 @@ PBGL_DISTRIB_ADJLIST_TYPE
typedef detail::parallel::redistributed_descriptor<edge_descriptor,
edge_property_type>
redistributed_edge;
- typedef std::pair<vertices_size_type, edges_size_type> num_relocated_pair;
vertex_iterator vi, vi_end;
edge_iterator ei, ei_end;
diff --git a/3party/boost/boost/graph/distributed/adjlist/serialization.hpp b/3party/boost/boost/graph/distributed/adjlist/serialization.hpp
index d904c5a903..ab75ef91ef 100644
--- a/3party/boost/boost/graph/distributed/adjlist/serialization.hpp
+++ b/3party/boost/boost/graph/distributed/adjlist/serialization.hpp
@@ -776,7 +776,6 @@ void save_in_edges(Archive& ar, Graph const& g, bidirectionalS)
process_id_type id = g.processor();
- typedef std::pair<local_vertex_descriptor, vertex_descriptor> in_edge;
std::vector<edge_descriptor> saved_in_edges;
BGL_FORALL_VERTICES_T(v, g, Graph)
@@ -830,8 +829,6 @@ void save_edges(Archive& ar, Graph const& g, DirectedS)
process_id_type;
typedef typename graph_traits<
Graph>::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits<
- Graph>::edge_descriptor edge_descriptor;
typedef typename Graph::edge_property_type edge_property_type;
@@ -880,8 +877,6 @@ template <PBGL_DISTRIB_ADJLIST_TEMPLATE_PARMS>
template <class IStreamConstructibleArchive>
void PBGL_DISTRIB_ADJLIST_TYPE::load(std::string const& filename)
{
- typedef typename config_type::VertexListS vertex_list_selector;
-
process_group_type pg = process_group();
process_id_type id = process_id(pg);
diff --git a/3party/boost/boost/graph/distributed/betweenness_centrality.hpp b/3party/boost/boost/graph/distributed/betweenness_centrality.hpp
index 04d249a5b8..b56367c0c4 100644
--- a/3party/boost/boost/graph/distributed/betweenness_centrality.hpp
+++ b/3party/boost/boost/graph/distributed/betweenness_centrality.hpp
@@ -197,21 +197,21 @@ namespace boost {
// have not yet been received.
void synchronize()
{
- using boost::graph::parallel::synchronize;
+ using boost::parallel::synchronize;
synchronize(pg);
}
// Setup triggers for msg_relax messages
void setup_triggers()
{
- using boost::graph::parallel::simple_trigger;
+ using boost::parallel::simple_trigger;
simple_trigger(pg, msg_relax, this,
&betweenness_centrality_delta_stepping_impl::handle_msg_relax);
}
void handle_msg_relax(int /*source*/, int /*tag*/,
const std::pair<Vertex, typename MessageValue::type>& data,
- trigger_receive_context)
+ boost::parallel::trigger_receive_context)
{ relax(data.second.second, data.first, data.second.first); }
const Graph& g;
@@ -281,7 +281,7 @@ namespace boost {
vertex_index(vertex_index),
#endif
delta(delta),
- pg(boost::graph::parallel::process_group_adl(g), attach_distributed_object()),
+ pg(boost::graph::parallel::process_group_adl(g), boost::parallel::attach_distributed_object()),
owner(get(vertex_owner, g)),
local(get(vertex_local, g))
@@ -621,12 +621,6 @@ namespace boost {
#endif
)
{
- typedef typename property_traits<DistanceMap>::value_type
- distance_type;
-
- typedef std::plus<distance_type> Combine;
- typedef std::less<distance_type> Compare;
-
// The "distance" map needs to act like one, retrieving the default
// value of infinity.
set_property_map_role(vertex_distance, distance);
@@ -717,7 +711,6 @@ namespace boost {
using boost::graph::parallel::process_group;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
typedef typename graph_traits<Graph>::edges_size_type edges_size_type;
typedef typename property_traits<IncomingMap>::value_type incoming_type;
@@ -974,10 +967,7 @@ namespace boost {
using boost::detail::graph::divide_centrality_by_two;
using boost::graph::parallel::process_group;
- typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
- typedef typename graph_traits<Graph>::edge_iterator edge_iterator;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits<Graph>::vertices_size_type vertices_size_type;
typedef typename property_traits<DistanceMap>::value_type distance_type;
typedef typename property_traits<DependencyMap>::value_type dependency_type;
@@ -1064,11 +1054,8 @@ namespace boost {
{
using boost::detail::graph::update_centrality;
- typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
- typedef typename property_traits<IncomingMap>::value_type incoming_type;
-
// Initialize for this iteration
BGL_FORALL_VERTICES_T(w, g, Graph) {
// put(path_count, w, 0);
@@ -1137,12 +1124,7 @@ namespace boost {
using boost::detail::graph::divide_centrality_by_two;
using boost::graph::parallel::process_group;
- typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
- typedef typename graph_traits<Graph>::edge_iterator edge_iterator;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits<Graph>::vertices_size_type vertices_size_type;
-
- typedef typename property_traits<DistanceMap>::value_type distance_type;
typedef ProcessGroup process_group_type;
@@ -1352,10 +1334,6 @@ namespace graph { namespace parallel { namespace detail {
typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
typedef typename graph_traits<Graph>::edges_size_type edges_size_type;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
- typedef typename mpl::if_c<(is_same<CentralityMap,
- dummy_property_map>::value),
- EdgeCentralityMap,
- CentralityMap>::type a_centrality_map;
typename graph_traits<Graph>::vertices_size_type V = num_vertices(g);
@@ -1472,9 +1450,6 @@ non_distributed_brandes_betweenness_centrality(const ProcessGroup& pg,
VertexIndexMap vertex_index,
Buffer sources)
{
- typedef typename property_traits<DistanceMap>::value_type distance_type;
- typedef static_property_map<distance_type> WeightMap;
-
detail::graph::brandes_unweighted_shortest_paths shortest_paths;
graph::parallel::detail::non_distributed_brandes_betweenness_centrality_impl(pg, g, centrality,
@@ -1528,7 +1503,6 @@ namespace detail { namespace graph {
Buffer sources)
{
typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
- typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename mpl::if_c<(is_same<CentralityMap,
dummy_property_map>::value),
@@ -1565,7 +1539,6 @@ namespace detail { namespace graph {
Buffer sources)
{
typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
- typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename mpl::if_c<(is_same<CentralityMap,
dummy_property_map>::value),
diff --git a/3party/boost/boost/graph/distributed/boman_et_al_graph_coloring.hpp b/3party/boost/boost/graph/distributed/boman_et_al_graph_coloring.hpp
index f079afe30f..4bdd9c2a32 100644
--- a/3party/boost/boost/graph/distributed/boman_et_al_graph_coloring.hpp
+++ b/3party/boost/boost/graph/distributed/boman_et_al_graph_coloring.hpp
@@ -123,7 +123,6 @@ boman_et_al_graph_coloring
process_group_type;
typedef typename process_group_type::process_id_type process_id_type;
typedef typename graph_traits<DistributedGraph>::vertex_descriptor Vertex;
- typedef typename graph_traits<DistributedGraph>::edge_descriptor Edge;
typedef typename graph_traits<DistributedGraph>::vertices_size_type
vertices_size_type;
typedef typename property_traits<ColorMap>::value_type color_type;
@@ -148,7 +147,7 @@ boman_et_al_graph_coloring
typedef typename process_group_type::communication_category
communication_category;
static const bool asynchronous =
- is_convertible<communication_category, immediate_process_group_tag>::value;
+ is_convertible<communication_category, boost::parallel::immediate_process_group_tag>::value;
process_group_type pg = process_group(g);
// U_i <- V_i
diff --git a/3party/boost/boost/graph/distributed/breadth_first_search.hpp b/3party/boost/boost/graph/distributed/breadth_first_search.hpp
index 36e2df8bb7..5bb99c6c75 100644
--- a/3party/boost/boost/graph/distributed/breadth_first_search.hpp
+++ b/3party/boost/boost/graph/distributed/breadth_first_search.hpp
@@ -151,8 +151,7 @@ namespace boost {
ColorMap color,
BFSVisitor vis,
const bgl_named_params<P, T, R>& params,
- BOOST_GRAPH_ENABLE_IF_MODELS(DistributedGraph, distributed_graph_tag,
- void)*)
+ boost::mpl::true_)
{
parallel_bfs_helper
(g, s, color, vis, get_param(params, buffer_param_t()),
diff --git a/3party/boost/boost/graph/distributed/compressed_sparse_row_graph.hpp b/3party/boost/boost/graph/distributed/compressed_sparse_row_graph.hpp
index 33861c47b4..6d7d839e4a 100644
--- a/3party/boost/boost/graph/distributed/compressed_sparse_row_graph.hpp
+++ b/3party/boost/boost/graph/distributed/compressed_sparse_row_graph.hpp
@@ -537,7 +537,6 @@ out_degree(typename BOOST_DISTRIB_CSR_GRAPH_TYPE::vertex_descriptor u,
template<BOOST_DISTRIB_CSR_GRAPH_TEMPLATE_PARMS>
void synchronize(const BOOST_DISTRIB_CSR_GRAPH_TYPE& g)
{
- typedef BOOST_DISTRIB_CSR_GRAPH_TYPE graph_type;
synchronize(g.process_group());
}
diff --git a/3party/boost/boost/graph/distributed/concepts.hpp b/3party/boost/boost/graph/distributed/concepts.hpp
index 1c85b4476f..9d6e2672d7 100644
--- a/3party/boost/boost/graph/distributed/concepts.hpp
+++ b/3party/boost/boost/graph/distributed/concepts.hpp
@@ -29,10 +29,6 @@
namespace boost {
-class distributed_graph_tag { };
-class distributed_vertex_list_graph_tag { };
-class distributed_edge_list_graph_tag { };
-
#if BOOST_VERSION >= 103500
namespace concepts {
#endif
diff --git a/3party/boost/boost/graph/distributed/connected_components.hpp b/3party/boost/boost/graph/distributed/connected_components.hpp
index 42892909ff..3650efb451 100644
--- a/3party/boost/boost/graph/distributed/connected_components.hpp
+++ b/3party/boost/boost/graph/distributed/connected_components.hpp
@@ -296,14 +296,8 @@ namespace boost { namespace graph { namespace distributed {
typedef typename graph_traits<DistributedGraph>::adjacency_iterator
adjacency_iterator;
- typedef typename graph_traits<DistributedGraph>::out_edge_iterator
- out_edge_iterator;
- typedef typename graph_traits<DistributedGraph>::edge_iterator
- edge_iterator;
typedef typename graph_traits<DistributedGraph>::vertex_descriptor
vertex_descriptor;
- typedef typename graph_traits<DistributedGraph>::edge_descriptor
- edge_descriptor;
typedef typename boost::graph::parallel::process_group_type<DistributedGraph>
::type process_group_type;
diff --git a/3party/boost/boost/graph/distributed/connected_components_parallel_search.hpp b/3party/boost/boost/graph/distributed/connected_components_parallel_search.hpp
index e8b31f8445..f3ebf05688 100644
--- a/3party/boost/boost/graph/distributed/connected_components_parallel_search.hpp
+++ b/3party/boost/boost/graph/distributed/connected_components_parallel_search.hpp
@@ -290,8 +290,6 @@ namespace boost { namespace graph { namespace distributed {
typedef typename boost::graph::parallel::process_group_type<Graph>
::type process_group_type;
typedef typename process_group_type::process_id_type process_id_type;
- typedef typename property_map<Graph, vertex_owner_t>
- ::const_type vertex_owner_map;
typedef std::queue<vertex_descriptor> work_queue;
static const component_value_type max_component =
diff --git a/3party/boost/boost/graph/distributed/crauser_et_al_shortest_paths.hpp b/3party/boost/boost/graph/distributed/crauser_et_al_shortest_paths.hpp
index e718501b12..060cbf9cab 100644
--- a/3party/boost/boost/graph/distributed/crauser_et_al_shortest_paths.hpp
+++ b/3party/boost/boost/graph/distributed/crauser_et_al_shortest_paths.hpp
@@ -540,13 +540,6 @@ crauser_et_al_shortest_paths
Compare compare, Combine combine, DistInf inf, DistZero zero,
DijkstraVisitor vis)
{
- typedef typename boost::graph::parallel::process_group_type<DistributedGraph>::type
- process_group_type;
- typedef typename process_group_type::process_id_type process_id_type;
- typedef typename graph_traits<DistributedGraph>::vertex_descriptor
- Vertex;
- typedef typename graph_traits<DistributedGraph>::vertices_size_type
- vertices_size_type;
#ifdef PBGL_ACCOUNTING
crauser_et_al_shortest_paths_stats.deleted_vertices.clear();
diff --git a/3party/boost/boost/graph/distributed/dehne_gotz_min_spanning_tree.hpp b/3party/boost/boost/graph/distributed/dehne_gotz_min_spanning_tree.hpp
index 4554dbbaf5..0e7c1cf23b 100644
--- a/3party/boost/boost/graph/distributed/dehne_gotz_min_spanning_tree.hpp
+++ b/3party/boost/boost/graph/distributed/dehne_gotz_min_spanning_tree.hpp
@@ -642,7 +642,6 @@ merge_local_minimum_spanning_trees(const Graph& g, WeightMap weight,
BOOST_STATIC_ASSERT((is_convertible<traversal_category*,
vertex_list_graph_tag*>::value));
- typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
// Don't throw away cached edge weights
diff --git a/3party/boost/boost/graph/distributed/delta_stepping_shortest_paths.hpp b/3party/boost/boost/graph/distributed/delta_stepping_shortest_paths.hpp
index ab1655b474..97a04e6916 100644
--- a/3party/boost/boost/graph/distributed/delta_stepping_shortest_paths.hpp
+++ b/3party/boost/boost/graph/distributed/delta_stepping_shortest_paths.hpp
@@ -433,7 +433,7 @@ void
delta_stepping_impl<Graph, PredecessorMap, DistanceMap, EdgeWeightMap>::
synchronize()
{
- using boost::graph::parallel::synchronize;
+ using boost::parallel::synchronize;
// Synchronize at the process group level.
synchronize(pg);
diff --git a/3party/boost/boost/graph/distributed/detail/remote_update_set.hpp b/3party/boost/boost/graph/distributed/detail/remote_update_set.hpp
index ef0e9775ca..471b2a219f 100644
--- a/3party/boost/boost/graph/distributed/detail/remote_update_set.hpp
+++ b/3party/boost/boost/graph/distributed/detail/remote_update_set.hpp
@@ -39,7 +39,7 @@ class remote_set_semantics
(bool,
queued = (is_convertible<
typename ProcessGroup::communication_category,
- parallel::bsp_process_group_tag>::value));
+ boost::parallel::bsp_process_group_tag>::value));
public:
typedef typename mpl::if_c<queued,
diff --git a/3party/boost/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp b/3party/boost/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp
index 8a2098ffcf..8b78d633e3 100644
--- a/3party/boost/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp
+++ b/3party/boost/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp
@@ -349,13 +349,6 @@ eager_dijkstra_shortest_paths
Compare compare, Combine combine, DistInf inf, DistZero zero,
DijkstraVisitor vis)
{
- typedef typename boost::graph::parallel::process_group_type<DistributedGraph>::type
- process_group_type;
- typedef typename graph_traits<DistributedGraph>::vertex_descriptor
- Vertex;
- typedef typename graph_traits<DistributedGraph>::vertices_size_type
- vertices_size_type;
-
#ifdef PBGL_ACCOUNTING
eager_dijkstra_shortest_paths_stats.deleted_vertices.clear();
eager_dijkstra_shortest_paths_stats.lookahead = lookahead;
diff --git a/3party/boost/boost/graph/distributed/graphviz.hpp b/3party/boost/boost/graph/distributed/graphviz.hpp
index 5fb9580ca8..fa843fd70c 100644
--- a/3party/boost/boost/graph/distributed/graphviz.hpp
+++ b/3party/boost/boost/graph/distributed/graphviz.hpp
@@ -106,10 +106,8 @@ write_graphviz(std::ostream& out,
BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag))
{
typedef typename graph_traits<Graph>::directed_category directed_category;
- typedef typename graph_traits<Graph>::vertices_size_type vertices_size_type;
typedef typename boost::graph::parallel::process_group_type<Graph>::type
process_group_type;
- typedef typename process_group_type::process_id_type process_id_type;
typedef typename property_map<Graph, vertex_index_t>::const_type
VertexIndexMap;
typedef typename property_map<Graph, vertex_global_t>::const_type
diff --git a/3party/boost/boost/graph/distributed/hohberg_biconnected_components.hpp b/3party/boost/boost/graph/distributed/hohberg_biconnected_components.hpp
index 9282dfe7c8..9422aa04f0 100644
--- a/3party/boost/boost/graph/distributed/hohberg_biconnected_components.hpp
+++ b/3party/boost/boost/graph/distributed/hohberg_biconnected_components.hpp
@@ -912,7 +912,6 @@ hohberg_biconnected_components
BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
typedef typename graph_traits<Graph>::edges_size_type edges_size_type;
- typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
@@ -942,7 +941,6 @@ hohberg_biconnected_components
std::size_t path_length = 1;
typedef std::vector<vertex_descriptor> path_t;
- typedef typename path_t::iterator path_iterator;
unsigned char minimum_phase = 5;
do {
diff --git a/3party/boost/boost/graph/distributed/mpi_process_group.hpp b/3party/boost/boost/graph/distributed/mpi_process_group.hpp
index a5b5b28494..c770aa0f83 100644
--- a/3party/boost/boost/graph/distributed/mpi_process_group.hpp
+++ b/3party/boost/boost/graph/distributed/mpi_process_group.hpp
@@ -28,13 +28,13 @@
#include <boost/function/function2.hpp>
#include <boost/function/function0.hpp>
#include <boost/mpi.hpp>
-#include <boost/graph/parallel/process_group.hpp>
+#include <boost/property_map/parallel/process_group.hpp>
#include <boost/utility/enable_if.hpp>
namespace boost { namespace graph { namespace distributed {
// Process group tags
-struct mpi_process_group_tag : virtual parallel::linear_process_group_tag { };
+struct mpi_process_group_tag : virtual boost::parallel::linear_process_group_tag { };
class mpi_process_group
{
@@ -75,7 +75,7 @@ class mpi_process_group
/// Classification of the capabilities of this process group
struct communication_category
- : virtual parallel::bsp_process_group_tag,
+ : virtual boost::parallel::bsp_process_group_tag,
virtual mpi_process_group_tag { };
// TBD: We can eliminate the "source" field and possibly the
diff --git a/3party/boost/boost/graph/distributed/named_graph.hpp b/3party/boost/boost/graph/distributed/named_graph.hpp
index 48697cf926..f444abd636 100644
--- a/3party/boost/boost/graph/distributed/named_graph.hpp
+++ b/3party/boost/boost/graph/distributed/named_graph.hpp
@@ -344,7 +344,7 @@ struct BGL_NAMED_GRAPH::lazy_add_vertex
/// Transfer responsibility for adding the vertex from the source of
/// the copy to the newly-constructed opbject.
lazy_add_vertex(const lazy_add_vertex& other)
- : self(self), name(other.name), committed(other.committed)
+ : self(other.self), name(other.name), committed(other.committed)
{
other.committed = true;
}
@@ -481,8 +481,6 @@ private:
template<BGL_NAMED_GRAPH_PARAMS>
BGL_NAMED_GRAPH::lazy_add_edge::~lazy_add_edge()
{
- typedef typename BGL_NAMED_GRAPH::process_id_type process_id_type;
-
using boost::parallel::detail::make_untracked_pair;
/// If this edge has already been created or will be created by
@@ -679,7 +677,6 @@ private:
template<BGL_NAMED_GRAPH_PARAMS>
BGL_NAMED_GRAPH::lazy_add_edge_with_property::~lazy_add_edge_with_property()
{
- typedef typename BGL_NAMED_GRAPH::process_id_type process_id_type;
using boost::detail::parallel::make_pair_with_property;
/// If this edge has already been created or will be created by
@@ -807,7 +804,7 @@ BGL_NAMED_GRAPH::lazy_add_edge_with_property::commit() const
/// Construct the named_graph with a particular process group
template<BGL_NAMED_GRAPH_PARAMS>
BGL_NAMED_GRAPH::named_graph(const process_group_type& pg)
- : process_group_(pg, parallel::attach_distributed_object()),
+ : process_group_(pg, boost::parallel::attach_distributed_object()),
distribution_(pg)
{
setup_triggers();
@@ -818,7 +815,7 @@ BGL_NAMED_GRAPH::named_graph(const process_group_type& pg)
template<BGL_NAMED_GRAPH_PARAMS>
BGL_NAMED_GRAPH::named_graph(const process_group_type& pg,
const base_distribution_type& distribution)
- : process_group_(pg, parallel::attach_distributed_object()),
+ : process_group_(pg, boost::parallel::attach_distributed_object()),
distribution_(pg, distribution)
{
setup_triggers();
diff --git a/3party/boost/boost/graph/distributed/page_rank.hpp b/3party/boost/boost/graph/distributed/page_rank.hpp
index 1fc43ed683..1db3b8af67 100644
--- a/3party/boost/boost/graph/distributed/page_rank.hpp
+++ b/3party/boost/boost/graph/distributed/page_rank.hpp
@@ -89,8 +89,6 @@ page_rank_impl(const Graph& g, RankMap rank_map, Done done,
int me;
MPI_Comm_rank(MPI_COMM_WORLD, &me);
- typedef typename property_map<Graph, vertex_owner_t>
- ::const_type vertex_owner_map;
typename property_map<Graph, vertex_owner_t>::const_type
owner = get(vertex_owner, g);
(void)owner;
diff --git a/3party/boost/boost/graph/distributed/strong_components.hpp b/3party/boost/boost/graph/distributed/strong_components.hpp
index 16d61afdb0..5c9307f0ce 100644
--- a/3party/boost/boost/graph/distributed/strong_components.hpp
+++ b/3party/boost/boost/graph/distributed/strong_components.hpp
@@ -70,8 +70,6 @@ void
marshal_set( std::vector<std::vector<typename graph_traits<Graph>::vertex_descriptor> > in,
std::vector<typename graph_traits<Graph>::vertex_descriptor>& out )
{
- typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
-
for( std::size_t i = 0; i < in.size(); ++i ) {
out.insert( out.end(), graph_traits<Graph>::null_vertex() );
out.insert( out.end(), in[i].begin(), in[i].end() );
@@ -85,7 +83,6 @@ unmarshal_set( std::vector<typename graph_traits<Graph>::vertex_descriptor> in,
std::vector<std::vector<typename graph_traits<Graph>::vertex_descriptor> >& out )
{
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
while( !in.empty() ) {
typename std::vector<vertex_descriptor>::iterator end
@@ -732,8 +729,6 @@ namespace boost { namespace graph { namespace distributed {
typedef typename process_group_type::process_id_type process_id_type;
typedef std::vector<std::pair<vertex_descriptor, vertex_descriptor> > VertexPairVec;
- typedef typename graph_traits<Graph>::directed_category directed_category;
-
typename property_map<Graph, vertex_owner_t>::const_type
owner = get(vertex_owner, g);
@@ -862,7 +857,6 @@ namespace boost { namespace graph { namespace distributed {
VertexIndexMap vertex_index_map,
incidence_graph_tag)
{
- typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef iterator_property_map<typename std::vector<vertex_descriptor>::iterator,
VertexIndexMap> IsoMap;
diff --git a/3party/boost/boost/graph/distributed/unsafe_serialize.hpp b/3party/boost/boost/graph/distributed/unsafe_serialize.hpp
index 38ad8a6795..ca6d19436d 100644
--- a/3party/boost/boost/graph/distributed/unsafe_serialize.hpp
+++ b/3party/boost/boost/graph/distributed/unsafe_serialize.hpp
@@ -7,79 +7,5 @@
// Authors: Douglas Gregor
// Andrew Lumsdaine
-// This file contains the "unsafe_serialize" routine, which transforms
-// types they may not be serializable (such as void*) into
-// serializable equivalents.
-#ifndef PBGL_UNSAFE_SERIALIZE_HPP
-#define PBGL_UNSAFE_SERIALIZE_HPP
-
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
-
-#include <boost/mpi/datatype.hpp>
-#include <boost/serialization/is_bitwise_serializable.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits.hpp>
-#include <utility>
-
-BOOST_IS_BITWISE_SERIALIZABLE(void*)
-namespace boost { namespace mpi {
- template<> struct is_mpi_datatype<void*> : mpl::true_ { };
-} } // end namespace boost::mpi
-
-namespace boost {
- typedef mpl::if_c<(sizeof(int) == sizeof(void*)),
- int,
- mpl::if_c<(sizeof(long) == sizeof(void*)),
- long,
- mpl::if_c<(sizeof(void*) <= sizeof(boost::intmax_t)),
- boost::intmax_t,
- void>::type
- >::type
- >::type ptr_serialize_type;
-
- BOOST_STATIC_ASSERT ((!boost::is_void<ptr_serialize_type>::value));
-
- template<typename T> inline T& unsafe_serialize(T& x) { return x; }
-
- inline ptr_serialize_type& unsafe_serialize(void*& x)
- { return reinterpret_cast<ptr_serialize_type&>(x); }
-
- // Force Boost.MPI to serialize a void* like a ptr_serialize_type
- namespace mpi {
- template<> inline MPI_Datatype get_mpi_datatype<void*>(void* const& x)
- {
- return get_mpi_datatype<ptr_serialize_type>();
- }
- }
-
- template<typename T, typename U>
- struct unsafe_pair
- {
- unsafe_pair() { }
- unsafe_pair(const T& t, const U& u) : first(t), second(u) { }
- unsafe_pair(const std::pair<T, U>& p) : first(p.first), second(p.second) { }
- T first;
- U second;
-
- template<typename Archiver>
- void serialize(Archiver& ar, const unsigned /*version*/)
- {
- ar & unsafe_serialize(first) & unsafe_serialize(second);
- }
- };
-
- template<typename T, typename U>
- bool operator<(unsafe_pair<T,U> const& x, unsafe_pair<T,U> const& y)
- {
- return std::make_pair(x.first, x.second) <
- std::make_pair(y.first, y.second);
- }
-
-} // end namespace boost
-
-#endif // PBGL_UNSAFE_SERIALIZE_HPP
+// File moved
+#include <boost/property_map/parallel/unsafe_serialize.hpp>
diff --git a/3party/boost/boost/graph/edge_coloring.hpp b/3party/boost/boost/graph/edge_coloring.hpp
new file mode 100644
index 0000000000..8eb79ad43b
--- /dev/null
+++ b/3party/boost/boost/graph/edge_coloring.hpp
@@ -0,0 +1,196 @@
+//=======================================================================
+// Copyright 2013 Maciej Piechotka
+// Authors: Maciej Piechotka
+//
+// 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_GRAPH_EDGE_COLORING_HPP
+#define BOOST_GRAPH_EDGE_COLORING_HPP
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/iteration_macros.hpp>
+#include <boost/graph/properties.hpp>
+#include <algorithm>
+#include <limits>
+#include <vector>
+
+/* This algorithm is to find coloring of an edges
+
+ Reference:
+
+ Misra, J., & Gries, D. (1992). A constructive proof of Vizing's
+ theorem. In Information Processing Letters.
+*/
+
+namespace boost {
+ namespace detail {
+ template<typename Graph, typename ColorMap>
+ bool
+ is_free(const Graph &g,
+ ColorMap color,
+ typename boost::graph_traits<Graph>::vertex_descriptor u,
+ typename boost::property_traits<ColorMap>::value_type free_color)
+ {
+ typedef typename boost::property_traits<ColorMap>::value_type color_t;
+ if (free_color == (std::numeric_limits<color_t>::max)())
+ return false;
+ BGL_FORALL_OUTEDGES_T(u, e, g, Graph) {
+ if (get(color, e) == free_color) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ template<typename Graph, typename ColorMap>
+ std::vector<typename boost::graph_traits<Graph>::vertex_descriptor>
+ maximal_fan(const Graph &g,
+ ColorMap color,
+ typename boost::graph_traits<Graph>::vertex_descriptor x,
+ typename boost::graph_traits<Graph>::vertex_descriptor y)
+ {
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_t;
+ std::vector<vertex_t> fan;
+ fan.push_back(y);
+ bool extended;
+ do {
+ extended = false;
+ BGL_FORALL_OUTEDGES_T(x, e, g, Graph) {
+ vertex_t v = target(e, g);
+ if (is_free(g, color, fan.back(), get(color, e)) &&
+ std::find(fan.begin(), fan.end(), v) == fan.end()) {
+ fan.push_back(v);
+ extended = true;
+ }
+ }
+ } while(extended);
+ return fan;
+ }
+ template<typename Graph, typename ColorMap>
+ typename boost::property_traits<ColorMap>::value_type
+ find_free_color(const Graph &g,
+ ColorMap color,
+ typename boost::graph_traits<Graph>::vertex_descriptor u)
+ {
+ typename boost::property_traits<ColorMap>::value_type c = 0;
+ while (!is_free(g, color, u, c)) c++;
+ return c;
+ }
+
+ template<typename Graph, typename ColorMap>
+ void
+ invert_cd_path(const Graph &g,
+ ColorMap color,
+ typename boost::graph_traits<Graph>::vertex_descriptor x,
+ typename boost::graph_traits<Graph>::edge_descriptor eold,
+ typename boost::property_traits<ColorMap>::value_type c,
+ typename boost::property_traits<ColorMap>::value_type d)
+ {
+ put(color, eold, d);
+ BGL_FORALL_OUTEDGES_T(x, e, g, Graph) {
+ if (get(color, e) == d && e != eold) {
+ invert_cd_path(g, color, target(e, g), e, d, c);
+ return;
+ }
+ }
+ }
+
+ template<typename Graph, typename ColorMap>
+ void
+ invert_cd_path(const Graph &g,
+ ColorMap color,
+ typename boost::graph_traits<Graph>::vertex_descriptor x,
+ typename boost::property_traits<ColorMap>::value_type c,
+ typename boost::property_traits<ColorMap>::value_type d)
+ {
+ BGL_FORALL_OUTEDGES_T(x, e, g, Graph) {
+ if (get(color, e) == d) {
+ invert_cd_path(g, color, target(e, g), e, d, c);
+ return;
+ }
+ }
+ }
+
+ template<typename Graph, typename ColorMap, typename ForwardIterator>
+ void
+ rotate_fan(const Graph &g,
+ ColorMap color,
+ typename boost::graph_traits<Graph>::vertex_descriptor x,
+ ForwardIterator begin,
+ ForwardIterator end)
+ {
+ typedef typename boost::graph_traits<Graph>::edge_descriptor edge_t;
+ if (begin == end) {
+ return;
+ }
+ edge_t previous = edge(x, *begin, g).first;
+ for (begin++; begin != end; begin++) {
+ edge_t current = edge(x, *begin, g).first;
+ put(color, previous, get(color, current));
+ previous = current;
+ }
+ }
+
+ template<typename Graph, typename ColorMap>
+ class find_free_in_fan
+ {
+ public:
+ find_free_in_fan(const Graph &graph,
+ const ColorMap color,
+ typename boost::property_traits<ColorMap>::value_type d)
+ : graph(graph),
+ color(color),
+ d(d) {}
+ bool operator()(const typename boost::graph_traits<Graph>::vertex_descriptor u) const {
+ return is_free(graph, color, u, d);
+ }
+ private:
+ const Graph &graph;
+ const ColorMap color;
+ const typename boost::property_traits<ColorMap>::value_type d;
+ };
+ }
+
+ template<typename Graph, typename ColorMap>
+ typename boost::property_traits<ColorMap>::value_type
+ color_edge(const Graph &g,
+ ColorMap color,
+ typename boost::graph_traits<Graph>::edge_descriptor e)
+ {
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_t;
+ typedef typename boost::property_traits<ColorMap>::value_type color_t;
+ typedef typename std::vector<vertex_t>::iterator fan_iterator;
+ using namespace detail;
+ vertex_t x = source(e, g), y = target(e, g);
+ std::vector<vertex_t> fan = maximal_fan(g, color, x, y);
+ color_t c = find_free_color(g, color, x);
+ color_t d = find_free_color(g, color, fan.back());
+ invert_cd_path(g, color, x, c, d);
+ fan_iterator w = std::find_if(fan.begin(),
+ fan.end(),
+ find_free_in_fan<Graph, ColorMap>(g, color, d));
+ rotate_fan(g, color, x, fan.begin(), w + 1);
+ put(color, edge(x, *w, g).first, d);
+ return (std::max)(c, d);
+ }
+
+ template<typename Graph, typename ColorMap>
+ typename boost::property_traits<ColorMap>::value_type
+ edge_coloring(const Graph &g,
+ ColorMap color)
+ {
+ typedef typename boost::property_traits<ColorMap>::value_type color_t;
+ BGL_FORALL_EDGES_T(e, g, Graph) {
+ put(color, e, (std::numeric_limits<color_t>::max)());
+ }
+ color_t colors = 0;
+ BGL_FORALL_EDGES_T(e, g, Graph) {
+ colors = (std::max)(colors, color_edge(g, color, e) + 1);
+ }
+ return colors;
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/graph/edmonds_karp_max_flow.hpp b/3party/boost/boost/graph/edmonds_karp_max_flow.hpp
index 8f86fb2026..377e6f14d9 100644
--- a/3party/boost/boost/graph/edmonds_karp_max_flow.hpp
+++ b/3party/boost/boost/graph/edmonds_karp_max_flow.hpp
@@ -151,7 +151,6 @@ namespace boost {
const bgl_named_params<P, T, R>& params,
param_not_found)
{
- typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename graph_traits<Graph>::vertices_size_type size_type;
size_type n = is_default_param(get_param(params, vertex_color)) ?
num_vertices(g) : 1;
diff --git a/3party/boost/boost/graph/find_flow_cost.hpp b/3party/boost/boost/graph/find_flow_cost.hpp
new file mode 100644
index 0000000000..e4d6f404e9
--- /dev/null
+++ b/3party/boost/boost/graph/find_flow_cost.hpp
@@ -0,0 +1,52 @@
+//=======================================================================
+// Copyright 2013 University of Warsaw.
+// Authors: Piotr Wygocki
+//
+// 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_GRAPH_FIND_FLOW_COST_HPP
+#define BOOST_GRAPH_FIND_FLOW_COST_HPP
+
+#include <boost/graph/iteration_macros.hpp>
+
+namespace boost {
+
+template<class Graph, class Capacity, class ResidualCapacity, class Weight>
+typename property_traits<typename property_map < Graph, edge_capacity_t >::type>::value_type
+find_flow_cost(const Graph & g, Capacity capacity, ResidualCapacity residual_capacity, Weight weight) {
+ typedef typename property_traits<typename property_map<Graph, edge_weight_t>::const_type>::value_type Cost;
+
+ Cost cost = 0;
+ BGL_FORALL_EDGES_T(e, g, Graph) {
+ if(get(capacity, e) > Cost(0)) {
+ cost += (get(capacity, e) - get(residual_capacity, e)) * get(weight, e);
+ }
+ }
+ return cost;
+}
+
+template <class Graph, class P, class T, class R>
+typename property_traits<typename property_map < Graph, edge_capacity_t >::type>::value_type
+find_flow_cost(const Graph & g,
+ const bgl_named_params<P, T, R>& params) {
+ return find_flow_cost(g,
+ choose_const_pmap(get_param(params, edge_capacity), g, edge_capacity),
+ choose_const_pmap(get_param(params, edge_residual_capacity),
+ g, edge_residual_capacity),
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight));
+}
+
+template <class Graph>
+typename property_traits<typename property_map < Graph, edge_capacity_t >::type>::value_type
+find_flow_cost(const Graph &g) {
+ bgl_named_params<int, buffer_param_t> params(0);
+ return find_flow_cost(g, params);
+}
+
+
+} //boost
+
+#endif /* BOOST_GRAPH_FIND_FLOW_COST_HPP */
+
diff --git a/3party/boost/boost/graph/fruchterman_reingold.hpp b/3party/boost/boost/graph/fruchterman_reingold.hpp
index bab353f334..01d080a418 100644
--- a/3party/boost/boost/graph/fruchterman_reingold.hpp
+++ b/3party/boost/boost/graph/fruchterman_reingold.hpp
@@ -282,7 +282,6 @@ fruchterman_reingold_force_directed_layout
Cooling cool,
DisplacementMap displacement)
{
- typedef typename Topology::point_type Point;
typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_iterator edge_iterator;
diff --git a/3party/boost/boost/graph/graph_as_tree.hpp b/3party/boost/boost/graph/graph_as_tree.hpp
index 3758c3f009..721e503e88 100644
--- a/3party/boost/boost/graph/graph_as_tree.hpp
+++ b/3party/boost/boost/graph/graph_as_tree.hpp
@@ -50,13 +50,9 @@ namespace boost {
template <class Graph, class ParentMap
, class Node
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
= typename graph_traits<Graph>::vertex_descriptor
-#endif
, class ChIt
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
= typename graph_traits<Graph>::adjacency_iterator
-#endif
>
class graph_as_tree
: public graph_as_tree_base<Graph, Node, ChIt,
diff --git a/3party/boost/boost/graph/graph_concepts.hpp b/3party/boost/boost/graph/graph_concepts.hpp
index f03afeea3f..875f81848b 100644
--- a/3party/boost/boost/graph/graph_concepts.hpp
+++ b/3party/boost/boost/graph/graph_concepts.hpp
@@ -38,7 +38,6 @@ namespace boost
// It is needed in order to allow us to write using boost::vertices as
// needed for ADL when using vector_as_graph below.
#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) \
- && !BOOST_WORKAROUND(__GNUC__, <= 2) \
&& !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
# define BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
#endif
@@ -470,10 +469,10 @@ typename T::ThereReallyIsNoMemberByThisNameInT vertices(T const&);
const_constraints(g);
}
- void const_constraints(const Graph& g)
+ void const_constraints(const Graph& g_)
{
typedef typename property_map<Graph, vertex_index_t>::const_type Map;
- Map m = get(vertex_index, g);
+ Map m = get(vertex_index, g_);
ignore_unused_variable_warning(m);
}
private:
@@ -497,10 +496,10 @@ typename T::ThereReallyIsNoMemberByThisNameInT vertices(T const&);
const_constraints(g);
}
- void const_constraints(const Graph& g)
+ void const_constraints(const Graph& g_)
{
typedef typename property_map<Graph, edge_index_t>::const_type Map;
- Map m = get(edge_index, g);
+ Map m = get(edge_index, g_);
ignore_unused_variable_warning(m);
}
private:
diff --git a/3party/boost/boost/graph/graph_traits.hpp b/3party/boost/boost/graph/graph_traits.hpp
index ceb0c2ac5d..a1c27483a1 100644
--- a/3party/boost/boost/graph/graph_traits.hpp
+++ b/3party/boost/boost/graph/graph_traits.hpp
@@ -166,7 +166,13 @@ namespace boost {
struct edge_list_graph_tag { };
struct adjacency_matrix_tag { };
- /** @name Taversal Category Traits
+ // Parallel traversal_category tags
+ struct distributed_graph_tag { };
+ struct distributed_vertex_list_graph_tag { };
+ struct distributed_edge_list_graph_tag { };
+#define BOOST_GRAPH_SEQUENTIAL_TRAITS_DEFINES_DISTRIBUTED_TAGS // Disable these from external versions of PBGL
+
+ /** @name Traversal Category Traits
* These traits classify graph types by their supported methods of
* vertex and edge traversal.
*/
diff --git a/3party/boost/boost/graph/graph_utility.hpp b/3party/boost/boost/graph/graph_utility.hpp
index ba1fe3d833..f1f120e304 100644
--- a/3party/boost/boost/graph/graph_utility.hpp
+++ b/3party/boost/boost/graph/graph_utility.hpp
@@ -237,8 +237,6 @@ namespace boost {
template <class Graph, class Vertex>
bool is_adj_dispatch(Graph& g, Vertex a, Vertex b, bidirectional_tag)
{
- typedef typename graph_traits<Graph>::edge_descriptor
- edge_descriptor;
typename graph_traits<Graph>::adjacency_iterator vi, viend,
adj_found;
boost::tie(vi, viend) = adjacent_vertices(a, g);
@@ -265,21 +263,9 @@ namespace boost {
template <class Graph, class Vertex>
bool is_adj_dispatch(Graph& g, Vertex a, Vertex b, directed_tag)
{
- typedef typename graph_traits<Graph>::edge_descriptor
- edge_descriptor;
typename graph_traits<Graph>::adjacency_iterator vi, viend, found;
boost::tie(vi, viend) = adjacent_vertices(a, g);
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 && defined(__SGI_STL_PORT)
- // Getting internal compiler error with std::find()
- found = viend;
- for (; vi != viend; ++vi)
- if (*vi == b) {
- found = vi;
- break;
- }
-#else
found = std::find(vi, viend, b);
-#endif
if ( found == viend )
return false;
@@ -287,17 +273,7 @@ namespace boost {
out_found;
boost::tie(oi, oiend) = out_edges(a, g);
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 && defined(__SGI_STL_PORT)
- // Getting internal compiler error with std::find()
- out_found = oiend;
- for (; oi != oiend; ++oi)
- if (target(*oi, g) == b) {
- out_found = oi;
- break;
- }
-#else
out_found = std::find_if(oi, oiend, incident_to(b, g));
-#endif
if (out_found == oiend)
return false;
return true;
diff --git a/3party/boost/boost/graph/graphviz.hpp b/3party/boost/boost/graph/graphviz.hpp
index aedce5553c..1c8cb194ac 100644
--- a/3party/boost/boost/graph/graphviz.hpp
+++ b/3party/boost/boost/graph/graphviz.hpp
@@ -289,8 +289,6 @@ namespace boost {
BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{ write_graphviz(out, g, vpw, epw, gpw, get(vertex_index, g)); }
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
- // ambiguous overload problem with VC++
template <typename Graph>
inline void
write_graphviz(std::ostream& out, const Graph& g
@@ -300,7 +298,6 @@ namespace boost {
default_writer gw;
write_graphviz(out, g, dw, dw, gw);
}
-#endif
template <typename Graph, typename VertexWriter>
inline void
@@ -349,21 +346,7 @@ namespace boost {
typename Graph::const_children_iterator i_child, j_child;
//print graph/node/edge attributes
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
- typedef typename graph_property<Graph, graph_graph_attribute_t>::type
- GAttrMap;
- typedef typename graph_property<Graph, graph_vertex_attribute_t>::type
- NAttrMap;
- typedef typename graph_property<Graph, graph_edge_attribute_t>::type
- EAttrMap;
- GAttrMap gam = get_property(g, graph_graph_attribute);
- NAttrMap nam = get_property(g, graph_vertex_attribute);
- EAttrMap eam = get_property(g, graph_edge_attribute);
- graph_attributes_writer<GAttrMap, NAttrMap, EAttrMap> writer(gam, nam, eam);
- writer(out);
-#else
make_graph_attributes_writer(g)(out);
-#endif
//print subgraph
for ( boost::tie(i_child,j_child) = g.children();
@@ -382,15 +365,7 @@ namespace boost {
if ( vertex_marker[pos] ) {
vertex_marker[pos] = false;
out << escape_dot_string(pos);
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
- typedef typename property_map<Graph, vertex_attribute_t>::const_type
- VertexAttributeMap;
- attributes_writer<VertexAttributeMap> vawriter(get(vertex_attribute,
- g.root()));
- vawriter(out, v);
-#else
make_vertex_attributes_writer(g.root())(out, v);
-#endif
out << ";" << std::endl;
}
}
@@ -403,14 +378,7 @@ namespace boost {
edge_marker[pos] = false;
out << escape_dot_string(get(vertex_id, u)) << " " << Traits::delimiter()
<< " " << escape_dot_string(get(vertex_id, v));
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
- typedef typename property_map<Graph, edge_attribute_t>::const_type
- EdgeAttributeMap;
- attributes_writer<EdgeAttributeMap> eawriter(get(edge_attribute, g));
- eawriter(out, *ei);
-#else
make_edge_attributes_writer(g)(out, *ei); //print edge properties
-#endif
out << ";" << std::endl;
}
}
@@ -568,6 +536,28 @@ namespace boost {
const std::string* node_id;
};
+ template <typename Graph>
+ class dynamic_graph_properties_writer
+ {
+ public:
+ dynamic_graph_properties_writer(const dynamic_properties& dp, const Graph& g) : g(&g), dp(&dp) { }
+
+ void operator()(std::ostream& out) const
+ {
+ for (dynamic_properties::const_iterator i = dp->begin();
+ i != dp->end(); ++i) {
+ if (typeid(Graph*) == i->second->key()) {
+ // const_cast here is to match interface used in read_graphviz
+ out << i->first << "=" << escape_dot_string(i->second->get_string(const_cast<Graph*>(g))) << ";\n";
+ }
+ }
+ }
+
+ private:
+ const Graph* g;
+ const dynamic_properties* dp;
+ };
+
namespace graph { namespace detail {
template<typename Vertex>
@@ -619,7 +609,7 @@ namespace boost {
(out, g,
/*vertex_writer=*/dynamic_vertex_properties_writer(dp, node_id),
/*edge_writer=*/dynamic_properties_writer(dp),
- /*graph_writer=*/default_writer(),
+ /*graph_writer=*/dynamic_graph_properties_writer<Graph>(dp, g),
id);
}
diff --git a/3party/boost/boost/graph/gursoy_atun_layout.hpp b/3party/boost/boost/graph/gursoy_atun_layout.hpp
index 9269c4b06f..9f050e1b3c 100644
--- a/3party/boost/boost/graph/gursoy_atun_layout.hpp
+++ b/3party/boost/boost/graph/gursoy_atun_layout.hpp
@@ -208,9 +208,6 @@ void gursoy_atun_refine(const VertexListAndIncidenceGraph& graph,
typedef typename graph_traits<VertexListAndIncidenceGraph>::vertex_iterator
vertex_iterator;
- typedef typename graph_traits<VertexListAndIncidenceGraph>::vertex_descriptor
- vertex_descriptor;
- typedef typename Topology::point_type point_type;
vertex_iterator i, iend;
double diameter_ratio = (double)diameter_final / diameter_initial;
double learning_constant_ratio =
@@ -230,6 +227,7 @@ void gursoy_atun_refine(const VertexListAndIncidenceGraph& graph,
vertex_index_map);
for (int round = 0; round < nsteps; ++round) {
double part_done = (double)round / (nsteps - 1);
+ // fprintf(stderr, "%2d%% done\n", int(rint(part_done * 100.)));
int diameter = (int)(diameter_initial * pow(diameter_ratio, part_done));
double learning_constant =
learning_constant_initial * pow(learning_constant_ratio, part_done);
diff --git a/3party/boost/boost/graph/hawick_circuits.hpp b/3party/boost/boost/graph/hawick_circuits.hpp
new file mode 100644
index 0000000000..93c12b5c78
--- /dev/null
+++ b/3party/boost/boost/graph/hawick_circuits.hpp
@@ -0,0 +1,381 @@
+// Copyright Louis Dionne 2013
+
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+// at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_HAWICK_CIRCUITS_HPP
+#define BOOST_GRAPH_HAWICK_CIRCUITS_HPP
+
+#include <algorithm>
+#include <boost/assert.hpp>
+#include <boost/foreach.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/one_bit_color_map.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/move/utility.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/tuple/tuple.hpp> // for boost::tie
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/result_of.hpp>
+#include <set>
+#include <utility> // for std::pair
+#include <vector>
+
+
+namespace boost {
+namespace hawick_circuits_detail {
+//! @internal Functor returning all the vertices adjacent to a vertex.
+struct get_all_adjacent_vertices {
+ template <typename Sig>
+ struct result;
+
+ template <typename This, typename Vertex, typename Graph>
+ struct result<This(Vertex, Graph)> {
+ private:
+ typedef typename remove_reference<Graph>::type RawGraph;
+ typedef graph_traits<RawGraph> Traits;
+ typedef typename Traits::adjacency_iterator AdjacencyIterator;
+
+ public:
+ typedef std::pair<AdjacencyIterator, AdjacencyIterator> type;
+ };
+
+ template <typename Vertex, typename Graph>
+ typename result<
+ get_all_adjacent_vertices(BOOST_FWD_REF(Vertex), BOOST_FWD_REF(Graph))
+ >::type
+ operator()(BOOST_FWD_REF(Vertex) v, BOOST_FWD_REF(Graph) g) const {
+ return adjacent_vertices(boost::forward<Vertex>(v),
+ boost::forward<Graph>(g));
+ }
+};
+
+//! @internal Functor returning a set of the vertices adjacent to a vertex.
+struct get_unique_adjacent_vertices {
+ template <typename Sig>
+ struct result;
+
+ template <typename This, typename Vertex, typename Graph>
+ struct result<This(Vertex, Graph)> {
+ typedef std::set<typename remove_reference<Vertex>::type> type;
+ };
+
+ template <typename Vertex, typename Graph>
+ typename result<get_unique_adjacent_vertices(Vertex, Graph const&)>::type
+ operator()(Vertex v, Graph const& g) const {
+ typedef typename result<
+ get_unique_adjacent_vertices(Vertex, Graph const&)
+ >::type Set;
+ return Set(adjacent_vertices(v, g).first,
+ adjacent_vertices(v, g).second);
+ }
+};
+
+//! @internal
+//! Return whether a container contains a given value.
+//! This is not meant as a general purpose membership testing function; it
+//! would have to be more clever about possible optimizations.
+template <typename Container, typename Value>
+bool contains(Container const& c, Value const& v) {
+ return std::find(boost::begin(c), boost::end(c), v) != boost::end(c);
+}
+
+/*!
+ * @internal
+ * Algorithm finding all the cycles starting from a given vertex.
+ *
+ * The search is only done in the subgraph induced by the starting vertex
+ * and the vertices with an index higher than the starting vertex.
+ */
+template <
+ typename Graph,
+ typename Visitor,
+ typename VertexIndexMap,
+ typename Stack,
+ typename ClosedMatrix,
+ typename GetAdjacentVertices
+>
+struct hawick_circuits_from {
+private:
+ typedef graph_traits<Graph> Traits;
+ typedef typename Traits::vertex_descriptor Vertex;
+ typedef typename Traits::edge_descriptor Edge;
+ typedef typename Traits::vertices_size_type VerticesSize;
+ typedef typename property_traits<VertexIndexMap>::value_type VertexIndex;
+
+ typedef typename result_of<
+ GetAdjacentVertices(Vertex, Graph const&)
+ >::type AdjacentVertices;
+ typedef typename range_iterator<AdjacentVertices const>::type AdjacencyIterator;
+
+ // The one_bit_color_map starts all white, i.e. not blocked.
+ // Since we make that assumption (I looked at the implementation, but
+ // I can't find anything that documents this behavior), we're gonna
+ // assert it in the constructor.
+ typedef one_bit_color_map<VertexIndexMap> BlockedMap;
+ typedef typename property_traits<BlockedMap>::value_type BlockedColor;
+
+ static BlockedColor blocked_false_color()
+ { return color_traits<BlockedColor>::white(); }
+
+ static BlockedColor blocked_true_color()
+ { return color_traits<BlockedColor>::black(); }
+
+ // This is used by the constructor to secure the assumption
+ // documented above.
+ bool blocked_map_starts_all_unblocked() const {
+ BOOST_FOREACH(Vertex v, vertices(graph_))
+ if (is_blocked(v))
+ return false;
+ return true;
+ }
+
+ // This is only used in the constructor to make sure the optimization of
+ // sharing data structures between iterations does not break the code.
+ bool all_closed_rows_are_empty() const {
+ BOOST_FOREACH(typename ClosedMatrix::reference row, closed_)
+ if (!row.empty())
+ return false;
+ return true;
+ }
+
+public:
+ hawick_circuits_from(Graph const& graph, Visitor& visitor,
+ VertexIndexMap const& vim,
+ Stack& stack, ClosedMatrix& closed,
+ VerticesSize n_vertices)
+ : graph_(graph), visitor_(visitor), vim_(vim), stack_(stack),
+ closed_(closed), blocked_(n_vertices, vim_)
+ {
+ BOOST_ASSERT(blocked_map_starts_all_unblocked());
+
+ // Since sharing the data structures between iterations is
+ // just an optimization, it must always be equivalent to
+ // constructing new ones in this constructor.
+ BOOST_ASSERT(stack_.empty());
+ BOOST_ASSERT(closed_.size() == n_vertices);
+ BOOST_ASSERT(all_closed_rows_are_empty());
+ }
+
+private:
+ //! @internal Return the index of a given vertex.
+ VertexIndex index_of(Vertex v) const {
+ return get(vim_, v);
+ }
+
+
+ //! @internal Return whether a vertex `v` is closed to a vertex `u`.
+ bool is_closed_to(Vertex u, Vertex v) const {
+ typedef typename ClosedMatrix::const_reference VertexList;
+ VertexList closed_to_u = closed_[index_of(u)];
+ return contains(closed_to_u, v);
+ }
+
+ //! @internal Close a vertex `v` to a vertex `u`.
+ void close_to(Vertex u, Vertex v) {
+ BOOST_ASSERT(!is_closed_to(u, v));
+ closed_[index_of(u)].push_back(v);
+ }
+
+
+ //! @internal Return whether a given vertex is blocked.
+ bool is_blocked(Vertex v) const {
+ return get(blocked_, v) == blocked_true_color();
+ }
+
+ //! @internal Block a given vertex.
+ void block(Vertex v) {
+ put(blocked_, v, blocked_true_color());
+ }
+
+ //! @internal Unblock a given vertex.
+ void unblock(Vertex u) {
+ typedef typename ClosedMatrix::reference VertexList;
+
+ put(blocked_, u, blocked_false_color());
+ VertexList closed_to_u = closed_[index_of(u)];
+
+ while (!closed_to_u.empty()) {
+ Vertex const w = closed_to_u.back();
+ closed_to_u.pop_back();
+ if (is_blocked(w))
+ unblock(w);
+ }
+ BOOST_ASSERT(closed_to_u.empty());
+ }
+
+ //! @internal Main procedure as described in the paper.
+ bool circuit(Vertex start, Vertex v) {
+ bool found_circuit = false;
+ stack_.push_back(v);
+ block(v);
+
+ // Cache some values that are used more than once in the function.
+ VertexIndex const index_of_start = index_of(start);
+ AdjacentVertices const adj_vertices = GetAdjacentVertices()(v, graph_);
+ AdjacencyIterator const w_end = boost::end(adj_vertices);
+
+ for (AdjacencyIterator w_it = boost::begin(adj_vertices);
+ w_it != w_end;
+ ++w_it)
+ {
+ Vertex const w = *w_it;
+ // Since we're only looking in the subgraph induced by `start`
+ // and the vertices with an index higher than `start`, we skip
+ // any vertex that does not satisfy that.
+ if (index_of(w) < index_of_start)
+ continue;
+
+ // If the last vertex is equal to `start`, we have a circuit.
+ else if (w == start) {
+ // const_cast to ensure the visitor does not modify the stack
+ visitor_.cycle(const_cast<Stack const&>(stack_), graph_);
+ found_circuit = true;
+ }
+
+ // If `w` is not blocked, we continue searching further down the
+ // same path for a cycle with `w` in it.
+ else if (!is_blocked(w) && circuit(start, w))
+ found_circuit = true;
+ }
+
+ if (found_circuit)
+ unblock(v);
+ else
+ for (AdjacencyIterator w_it = boost::begin(adj_vertices);
+ w_it != w_end;
+ ++w_it)
+ {
+ Vertex const w = *w_it;
+ // Like above, we skip vertices that are not in the subgraph
+ // we're considering.
+ if (index_of(w) < index_of_start)
+ continue;
+
+ // If `v` is not closed to `w`, we make it so.
+ if (!is_closed_to(w, v))
+ close_to(w, v);
+ }
+
+ BOOST_ASSERT(v == stack_.back());
+ stack_.pop_back();
+ return found_circuit;
+ }
+
+public:
+ void operator()(Vertex start) {
+ circuit(start, start);
+ }
+
+private:
+ Graph const& graph_;
+ Visitor& visitor_;
+ VertexIndexMap const& vim_;
+ Stack& stack_;
+ ClosedMatrix& closed_;
+ BlockedMap blocked_;
+};
+
+template <
+ typename GetAdjacentVertices,
+ typename Graph, typename Visitor, typename VertexIndexMap
+>
+void call_hawick_circuits(Graph const& graph,
+ Visitor /* by value */ visitor,
+ VertexIndexMap const& vertex_index_map) {
+ typedef graph_traits<Graph> Traits;
+ typedef typename Traits::vertex_descriptor Vertex;
+ typedef typename Traits::vertices_size_type VerticesSize;
+ typedef typename Traits::vertex_iterator VertexIterator;
+
+ typedef std::vector<Vertex> Stack;
+ typedef std::vector<std::vector<Vertex> > ClosedMatrix;
+
+ typedef hawick_circuits_from<
+ Graph, Visitor, VertexIndexMap, Stack, ClosedMatrix,
+ GetAdjacentVertices
+ > SubAlgorithm;
+
+ VerticesSize const n_vertices = num_vertices(graph);
+ Stack stack; stack.reserve(n_vertices);
+ ClosedMatrix closed(n_vertices);
+
+ VertexIterator start, last;
+ for (boost::tie(start, last) = vertices(graph); start != last; ++start) {
+ // Note1: The sub algorithm may NOT be reused once it has been called.
+
+ // Note2: We reuse the Stack and the ClosedMatrix (after clearing them)
+ // in each iteration to avoid redundant destruction and construction.
+ // It would be strictly equivalent to have these as member variables
+ // of the sub algorithm.
+ SubAlgorithm sub_algo(graph, visitor, vertex_index_map,
+ stack, closed, n_vertices);
+ sub_algo(*start);
+ stack.clear();
+ typename ClosedMatrix::iterator row, last_row = closed.end();
+ for (row = closed.begin(); row != last_row; ++row)
+ row->clear();
+ }
+}
+
+template <typename GetAdjacentVertices, typename Graph, typename Visitor>
+void call_hawick_circuits(Graph const& graph, BOOST_FWD_REF(Visitor) visitor) {
+ call_hawick_circuits<GetAdjacentVertices>(
+ graph, boost::forward<Visitor>(visitor), get(vertex_index, graph)
+ );
+}
+} // end namespace hawick_circuits_detail
+
+//! Enumerate all the elementary circuits in a directed multigraph.
+template <typename Graph, typename Visitor, typename VertexIndexMap>
+void hawick_circuits(BOOST_FWD_REF(Graph) graph,
+ BOOST_FWD_REF(Visitor) visitor,
+ BOOST_FWD_REF(VertexIndexMap) vertex_index_map) {
+ hawick_circuits_detail::call_hawick_circuits<
+ hawick_circuits_detail::get_all_adjacent_vertices
+ >(
+ boost::forward<Graph>(graph),
+ boost::forward<Visitor>(visitor),
+ boost::forward<VertexIndexMap>(vertex_index_map)
+ );
+}
+
+template <typename Graph, typename Visitor>
+void hawick_circuits(BOOST_FWD_REF(Graph) graph,
+ BOOST_FWD_REF(Visitor) visitor) {
+ hawick_circuits_detail::call_hawick_circuits<
+ hawick_circuits_detail::get_all_adjacent_vertices
+ >(boost::forward<Graph>(graph), boost::forward<Visitor>(visitor));
+}
+
+/*!
+ * Same as `boost::hawick_circuits`, but duplicate circuits caused by parallel
+ * edges will not be considered. Each circuit will be considered only once.
+ */
+template <typename Graph, typename Visitor, typename VertexIndexMap>
+void hawick_unique_circuits(BOOST_FWD_REF(Graph) graph,
+ BOOST_FWD_REF(Visitor) visitor,
+ BOOST_FWD_REF(VertexIndexMap) vertex_index_map) {
+ hawick_circuits_detail::call_hawick_circuits<
+ hawick_circuits_detail::get_unique_adjacent_vertices
+ >(
+ boost::forward<Graph>(graph),
+ boost::forward<Visitor>(visitor),
+ boost::forward<VertexIndexMap>(vertex_index_map)
+ );
+}
+
+template <typename Graph, typename Visitor>
+void hawick_unique_circuits(BOOST_FWD_REF(Graph) graph,
+ BOOST_FWD_REF(Visitor) visitor) {
+ hawick_circuits_detail::call_hawick_circuits<
+ hawick_circuits_detail::get_unique_adjacent_vertices
+ >(boost::forward<Graph>(graph), boost::forward<Visitor>(visitor));
+}
+} // end namespace boost
+
+#endif // !BOOST_GRAPH_HAWICK_CIRCUITS_HPP
diff --git a/3party/boost/boost/graph/is_straight_line_drawing.hpp b/3party/boost/boost/graph/is_straight_line_drawing.hpp
index c471cde8be..a4bd8ff5fd 100644
--- a/3party/boost/boost/graph/is_straight_line_drawing.hpp
+++ b/3party/boost/boost/graph/is_straight_line_drawing.hpp
@@ -106,11 +106,8 @@ namespace boost
{
typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
- typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator_t;
typedef typename graph_traits<Graph>::edge_descriptor edge_t;
typedef typename graph_traits<Graph>::edge_iterator edge_iterator_t;
- typedef typename graph_traits<Graph>::edges_size_type e_size_t;
- typedef typename graph_traits<Graph>::vertices_size_type v_size_t;
typedef std::size_t x_coord_t;
typedef std::size_t y_coord_t;
diff --git a/3party/boost/boost/graph/king_ordering.hpp b/3party/boost/boost/graph/king_ordering.hpp
index 9d9a438f3b..29e7ac970f 100644
--- a/3party/boost/boost/graph/king_ordering.hpp
+++ b/3party/boost/boost/graph/king_ordering.hpp
@@ -37,7 +37,6 @@ namespace boost {
typename graph_traits<Graph>::out_edge_iterator ei, ei_end;
Vertex v, w;
- typedef typename std::deque<Vertex>::iterator iterator;
typedef typename std::deque<Vertex>::reverse_iterator reverse_iterator;
reverse_iterator rend = Qptr->rend()-index_begin;
@@ -86,8 +85,6 @@ namespace boost {
//this function replaces pop_heap, and tracks state information
template <typename Vertex>
void percolate_down(int offset){
- typedef typename std::deque<Vertex>::reverse_iterator reverse_iterator;
-
int heap_last = index_begin + offset;
int heap_first = Qptr->size() - 1;
@@ -267,7 +264,6 @@ namespace boost {
return permutation;
typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
- typedef typename boost::graph_traits<Graph>::vertex_iterator VerIter;
typedef typename property_traits<ColorMap>::value_type ColorValue;
typedef color_traits<ColorValue> Color;
@@ -302,7 +298,6 @@ namespace boost {
if (has_no_vertices(G))
return permutation;
- typedef out_degree_property_map<Graph> DegreeMap;
std::vector<default_color_type> colors(num_vertices(G));
return king_ordering(G, permutation,
make_iterator_property_map(&colors[0], index_map,
diff --git a/3party/boost/boost/graph/kruskal_min_spanning_tree.hpp b/3party/boost/boost/graph/kruskal_min_spanning_tree.hpp
index 4d0c7efcdc..b7e8157707 100644
--- a/3party/boost/boost/graph/kruskal_min_spanning_tree.hpp
+++ b/3party/boost/boost/graph/kruskal_min_spanning_tree.hpp
@@ -102,7 +102,6 @@ namespace boost {
{
typedef typename graph_traits<Graph>::vertices_size_type size_type;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
- typedef typename property_map<Graph, vertex_index_t>::type index_map_t;
if (num_vertices(g) == 0) return; // Nothing to do in this case
typename graph_traits<Graph>::vertices_size_type
n = num_vertices(g);
diff --git a/3party/boost/boost/graph/leda_graph.hpp b/3party/boost/boost/graph/leda_graph.hpp
index af95692a89..a6ab5152bb 100644
--- a/3party/boost/boost/graph/leda_graph.hpp
+++ b/3party/boost/boost/graph/leda_graph.hpp
@@ -30,7 +30,6 @@
// Warning: this implementation is in alpha and has not been tested
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace boost {
struct leda_graph_traversal_category :
@@ -336,7 +335,6 @@ namespace boost {
};
} // namespace boost
-#endif
namespace boost {
diff --git a/3party/boost/boost/graph/maximum_adjacency_search.hpp b/3party/boost/boost/graph/maximum_adjacency_search.hpp
index 58dc8695e8..e27a7a048e 100644
--- a/3party/boost/boost/graph/maximum_adjacency_search.hpp
+++ b/3party/boost/boost/graph/maximum_adjacency_search.hpp
@@ -118,8 +118,6 @@ namespace boost {
void
maximum_adjacency_search(const Graph& g, WeightMap weights, MASVisitor vis, const typename boost::graph_traits<Graph>::vertex_descriptor start, VertexAssignmentMap assignments, KeyedUpdatablePriorityQueue pq) {
typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_descriptor;
- typedef typename boost::graph_traits<Graph>::vertices_size_type vertices_size_type;
- typedef typename boost::graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename boost::property_traits<WeightMap>::value_type weight_type;
std::set<vertex_descriptor> assignedVertices;
@@ -197,7 +195,7 @@ maximum_adjacency_search(const Graph& g, WeightMap weights, MASVisitor vis, cons
typedef typename boost::graph_traits<Graph>::edge_descriptor edge_descriptor;
BOOST_CONCEPT_ASSERT((boost::Convertible<typename boost::graph_traits<Graph>::directed_category, boost::undirected_tag>));
BOOST_CONCEPT_ASSERT((boost::ReadablePropertyMapConcept<WeightMap, edge_descriptor>));
- typedef typename boost::property_traits<WeightMap>::value_type weight_type;
+ // typedef typename boost::property_traits<WeightMap>::value_type weight_type;
boost::function_requires< MASVisitorConcept<MASVisitor, Graph> >();
BOOST_CONCEPT_ASSERT((boost::ReadWritePropertyMapConcept<VertexAssignmentMap, vertex_descriptor>));
BOOST_CONCEPT_ASSERT((boost::Convertible<vertex_descriptor, typename boost::property_traits<VertexAssignmentMap>::value_type>));
diff --git a/3party/boost/boost/graph/mcgregor_common_subgraphs.hpp b/3party/boost/boost/graph/mcgregor_common_subgraphs.hpp
index c46f721567..9fd544dd04 100644
--- a/3party/boost/boost/graph/mcgregor_common_subgraphs.hpp
+++ b/3party/boost/boost/graph/mcgregor_common_subgraphs.hpp
@@ -121,7 +121,6 @@ namespace boost {
VertexEquivalencePredicate vertices_equivalent,
bool only_connected_subgraphs)
{
- typedef typename graph_traits<GraphFirst>::vertex_descriptor VertexFirst;
typedef typename graph_traits<GraphSecond>::vertex_descriptor VertexSecond;
typedef typename graph_traits<GraphFirst>::edge_descriptor EdgeFirst;
@@ -328,15 +327,11 @@ namespace boost {
put(correspondence_map_2_to_1, new_vertex2, new_vertex1);
vertex_stack1.push(new_vertex1);
- // Only output sub-graphs larger than a single vertex
- if (new_graph_size > 1) {
-
- // Returning false from the callback will cancel iteration
- if (!subgraph_callback(correspondence_map_1_to_2,
- correspondence_map_2_to_1,
- new_graph_size)) {
- return (false);
- }
+ // Returning false from the callback will cancel iteration
+ if (!subgraph_callback(correspondence_map_1_to_2,
+ correspondence_map_2_to_1,
+ new_graph_size)) {
+ return (false);
}
// Depth-first search into the state space of possible sub-graphs
diff --git a/3party/boost/boost/graph/metric_tsp_approx.hpp b/3party/boost/boost/graph/metric_tsp_approx.hpp
index dd0ff1d675..c8e7dba595 100644
--- a/3party/boost/boost/graph/metric_tsp_approx.hpp
+++ b/3party/boost/boost/graph/metric_tsp_approx.hpp
@@ -173,7 +173,6 @@ namespace boost
// We build a custom graph in this algorithm.
typedef adjacency_list <vecS, vecS, directedS, no_property, no_property > MSTImpl;
- typedef graph_traits<MSTImpl>::edge_descriptor Edge;
typedef graph_traits<MSTImpl>::vertex_descriptor Vertex;
typedef graph_traits<MSTImpl>::vertex_iterator VItr;
diff --git a/3party/boost/boost/graph/named_function_params.hpp b/3party/boost/boost/graph/named_function_params.hpp
index 4ab24f63c6..26d3d5e40e 100644
--- a/3party/boost/boost/graph/named_function_params.hpp
+++ b/3party/boost/boost/graph/named_function_params.hpp
@@ -64,6 +64,7 @@ namespace boost {
BOOST_BGL_ONE_PARAM_CREF(weight_map, edge_weight) \
BOOST_BGL_ONE_PARAM_CREF(weight_map2, edge_weight2) \
BOOST_BGL_ONE_PARAM_CREF(distance_map, vertex_distance) \
+ BOOST_BGL_ONE_PARAM_CREF(distance_map2, vertex_distance2) \
BOOST_BGL_ONE_PARAM_CREF(predecessor_map, vertex_predecessor) \
BOOST_BGL_ONE_PARAM_CREF(rank_map, vertex_rank) \
BOOST_BGL_ONE_PARAM_CREF(root_map, vertex_root) \
diff --git a/3party/boost/boost/graph/named_graph.hpp b/3party/boost/boost/graph/named_graph.hpp
index d82807f321..e4d3314a20 100644
--- a/3party/boost/boost/graph/named_graph.hpp
+++ b/3party/boost/boost/graph/named_graph.hpp
@@ -62,7 +62,6 @@ struct internal_vertex_name
typedef void type;
};
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
/**
* Extract the internal vertex name from a @c property structure by
* looking at its base.
@@ -70,7 +69,6 @@ struct internal_vertex_name
template<typename Tag, typename T, typename Base>
struct internal_vertex_name<property<Tag, T, Base> >
: internal_vertex_name<Base> { };
-#endif
/**
* Construct an instance of @c VertexProperty directly from its
@@ -157,7 +155,6 @@ struct internal_vertex_constructor
typedef cannot_add_vertex<VertexProperty> type;
};
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
/**
* Extract the internal vertex constructor from a @c property structure by
* looking at its base.
@@ -165,7 +162,6 @@ struct internal_vertex_constructor
template<typename Tag, typename T, typename Base>
struct internal_vertex_constructor<property<Tag, T, Base> >
: internal_vertex_constructor<Base> { };
-#endif
/*******************************************************************
* Named graph mixin *
@@ -459,7 +455,6 @@ add_edge(typename BGL_NAMED_GRAPH::vertex_name_type const& u_name,
* Maybe named graph mixin *
*******************************************************************/
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
/**
* A graph mixin that can provide a mapping from names to vertices,
* and use that mapping to simplify creation and manipulation of
@@ -507,40 +502,6 @@ struct maybe_named_graph<Graph, Vertex, VertexProperty, void>
return optional<Vertex>();
}
};
-#else
-template<typename Graph, typename Vertex, typename VertexProperty,
- typename ExtractName
- = typename internal_vertex_name<VertexProperty>::type>
-struct maybe_named_graph
-{
- /// The type of the "bundled" property, from which the name can be
- /// extracted.
- typedef typename detail::extract_bundled_vertex<VertexProperty>::type
- bundled_vertex_property_type;
-
- /// Notify the named_graph that we have added the given vertex. This
- /// is a no-op.
- void added_vertex(Vertex) { }
-
- /// Notify the named_graph that we are removing the given
- /// vertex. This is a no-op.
- template <typename VertexIterStability>
- void removing_vertex(Vertex, VertexIterStability) { }
-
- /// Notify the named_graph that we are clearing the graph. This is a
- /// no-op.
- void clearing_graph() { }
-
- /// Search for a vertex that has the given property (based on its
- /// name). This always returns an empty optional<>
- template<typename Property>
- optional<Vertex>
- vertex_by_property(const bundled_vertex_property_type&)
- {
- return optional<Vertex>();
- }
-};
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} } // end namespace boost::graph
diff --git a/3party/boost/boost/graph/parallel/basic_reduce.hpp b/3party/boost/boost/graph/parallel/basic_reduce.hpp
index ee23b3a940..7d1a076fa1 100644
--- a/3party/boost/boost/graph/parallel/basic_reduce.hpp
+++ b/3party/boost/boost/graph/parallel/basic_reduce.hpp
@@ -7,36 +7,5 @@
// Authors: Douglas Gregor
// Andrew Lumsdaine
-#ifndef BOOST_PARALLEL_BASIC_REDUCE_HPP
-#define BOOST_PARALLEL_BASIC_REDUCE_HPP
-
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
-
-namespace boost { namespace parallel {
-
-/** Reduction operation used to reconcile differences between local
- * and remote values for a particular key in a property map. The
- * type @c T is typically the @c value_type of the property
- * map. This basic reduction returns a default-constructed @c T as
- * the default value and always resolves to the remote value.
- */
-template<typename T>
-struct basic_reduce
-{
- BOOST_STATIC_CONSTANT(bool, non_default_resolver = false);
-
- /// Returns a default-constructed T object
- template<typename Key>
- T operator()(const Key&) const { return T(); }
-
- /// Returns the remote value
- template<typename Key>
- const T& operator()(const Key&, const T&, const T& remote) const
- { return remote; }
-};
-
-} } // end namespace boost::parallel
-
-#endif // BOOST_PARALLEL_BASIC_REDUCE_HPP
+// File moved
+#include <boost/property_map/parallel/basic_reduce.hpp>
diff --git a/3party/boost/boost/graph/parallel/detail/untracked_pair.hpp b/3party/boost/boost/graph/parallel/detail/untracked_pair.hpp
index 3554910f07..7c3ca9aa27 100644
--- a/3party/boost/boost/graph/parallel/detail/untracked_pair.hpp
+++ b/3party/boost/boost/graph/parallel/detail/untracked_pair.hpp
@@ -6,80 +6,6 @@
// This file contains helper data structures for use in transmitting
// properties. The basic idea is to optimize away any storage for the
// properties when no properties are specified.
-#ifndef BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP
-#define BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
-
-#include <boost/mpi/datatype.hpp>
-#include <utility> // for std::pair
-#include <boost/serialization/utility.hpp>
-
-namespace boost { namespace parallel { namespace detail {
-
-/**
- * This structure is like std::pair, with the only difference
- * that tracking in the serialization library is turned off.
- */
-
-template<typename T, typename U>
-struct untracked_pair : public std::pair<T,U>
-{
- untracked_pair() {}
-
- untracked_pair(const T& t, const U& u)
- : std::pair<T,U>(t,u) {}
-
- template<class T1, class U1>
- untracked_pair(std::pair<T1,U1> const& p)
- : std::pair<T,U>(p) {}
-};
-
-template<typename T, typename U>
-inline untracked_pair<T, U>
-make_untracked_pair(const T& t, const U& u)
-{
- return untracked_pair<T,U>(t,u);
-}
-
-} } } // end namespace boost::parallel::detail
-
-namespace boost { namespace mpi {
-
-template<typename T, typename U>
-struct is_mpi_datatype<boost::parallel::detail::untracked_pair<T, U> >
- : is_mpi_datatype<std::pair<T,U> > {};
-
-} } // end namespace boost::mpi
-
-namespace boost { namespace serialization {
-
-// pair
-template<class Archive, class F, class S>
-inline void serialize(
- Archive & ar,
- boost::parallel::detail::untracked_pair<F, S> & p,
- const unsigned int /* file_version */
-){
- ar & boost::serialization::make_nvp("first", p.first);
- ar & boost::serialization::make_nvp("second", p.second);
-}
-
-template<typename T, typename U>
-struct is_bitwise_serializable<
- boost::parallel::detail::untracked_pair<T, U> >
- : is_bitwise_serializable<std::pair<T, U> > {};
-
-template<typename T, typename U>
-struct implementation_level<boost::parallel::detail::untracked_pair<T, U> >
- : mpl::int_<object_serializable> {} ;
-
-template<typename T, typename U>
-struct tracking_level<boost::parallel::detail::untracked_pair<T, U> >
- : mpl::int_<track_never> {} ;
-
-} } // end namespace boost::serialization
-
-#endif // BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP
+// File moved
+#include <boost/property_map/parallel/detail/untracked_pair.hpp>
diff --git a/3party/boost/boost/graph/parallel/process_group.hpp b/3party/boost/boost/graph/parallel/process_group.hpp
index 280ee4db54..92f11e5945 100644
--- a/3party/boost/boost/graph/parallel/process_group.hpp
+++ b/3party/boost/boost/graph/parallel/process_group.hpp
@@ -6,96 +6,6 @@
// Authors: Douglas Gregor
// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_PARALLEL_PROCESS_GROUP_HPP
-#define BOOST_GRAPH_PARALLEL_PROCESS_GROUP_HPP
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
-
-#include <cstdlib>
-#include <utility>
-
-namespace boost { namespace graph { namespace parallel {
-
-/**
- * A special type used as a flag to a process group constructor that
- * indicates that the copy of a process group will represent a new
- * distributed data structure.
- */
-struct attach_distributed_object { };
-
-/**
- * Describes the context in which a trigger is being invoked to
- * receive a message.
- */
-enum trigger_receive_context {
- /// No trigger is active at this time.
- trc_none,
- /// The trigger is being invoked during synchronization, at the end
- /// of a superstep.
- trc_in_synchronization,
- /// The trigger is being invoked as an "early" receive of a message
- /// that was sent through the normal "send" operations to be
- /// received by the end of the superstep, but the process group sent
- /// the message earlier to clear its buffers.
- trc_early_receive,
- /// The trigger is being invoked for an out-of-band message, which
- /// must be handled immediately.
- trc_out_of_band,
- /// The trigger is being invoked for an out-of-band message, which
- /// must be handled immediately and has alredy been received by
- /// an MPI_IRecv call.
- trc_irecv_out_of_band
-};
-
-// Process group tags
-struct process_group_tag {};
-struct linear_process_group_tag : virtual process_group_tag {};
-struct messaging_process_group_tag : virtual process_group_tag {};
-struct immediate_process_group_tag : virtual messaging_process_group_tag {};
-struct bsp_process_group_tag : virtual messaging_process_group_tag {};
-struct batch_process_group_tag : virtual messaging_process_group_tag {};
-struct locking_process_group_tag : virtual process_group_tag {};
-struct spawning_process_group_tag : virtual process_group_tag {};
-
-struct process_group_archetype
-{
- typedef int process_id_type;
-};
-
-void wait(process_group_archetype&);
-void synchronize(process_group_archetype&);
-int process_id(const process_group_archetype&);
-int num_processes(const process_group_archetype&);
-
-template<typename T> void send(process_group_archetype&, int, int, const T&);
-
-template<typename T>
-process_group_archetype::process_id_type
-receive(const process_group_archetype& pg,
- process_group_archetype::process_id_type source, int tag, T& value);
-
-template<typename T>
-std::pair<process_group_archetype::process_id_type, std::size_t>
-receive(const process_group_archetype& pg, int tag, T values[], std::size_t n);
-
-template<typename T>
-std::pair<process_group_archetype::process_id_type, std::size_t>
-receive(const process_group_archetype& pg,
- process_group_archetype::process_id_type source, int tag, T values[],
- std::size_t n);
-
-} } } // end namespace boost::graph::parallel
-
-namespace boost { namespace graph { namespace distributed {
- using parallel::trigger_receive_context;
- using parallel::trc_early_receive;
- using parallel::trc_out_of_band;
- using parallel::trc_irecv_out_of_band;
- using parallel::trc_in_synchronization;
- using parallel::trc_none;
- using parallel::attach_distributed_object;
-} } } // end namespace boost::graph::distributed
-
-#endif // BOOST_GRAPH_PARALLEL_PROCESS_GROUP_HPP
+// File moved
+#include <boost/property_map/parallel/process_group.hpp>
diff --git a/3party/boost/boost/graph/parallel/simple_trigger.hpp b/3party/boost/boost/graph/parallel/simple_trigger.hpp
index b1639bf21d..bcd3b46490 100644
--- a/3party/boost/boost/graph/parallel/simple_trigger.hpp
+++ b/3party/boost/boost/graph/parallel/simple_trigger.hpp
@@ -9,100 +9,5 @@
// the handler associated with a trigger is a member function bound to
// a particular pointer.
-#ifndef BOOST_GRAPH_PARALLEL_SIMPLE_TRIGGER_HPP
-#define BOOST_GRAPH_PARALLEL_SIMPLE_TRIGGER_HPP
-
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
-
-#include <boost/graph/parallel/process_group.hpp>
-
-namespace boost { namespace graph { namespace parallel {
-
-namespace detail {
-
-/**
- * INTERNAL ONLY
- *
- * The actual function object that bridges from the normal trigger
- * interface to the simplified interface. This is the equivalent of
- * bind(pmf, self, _1, _2, _3, _4), but without the compile-time
- * overhead of bind.
- */
-template<typename Class, typename T, typename Result>
-class simple_trigger_t
-{
-public:
- simple_trigger_t(Class* self,
- Result (Class::*pmf)(int, int, const T&,
- trigger_receive_context))
- : self(self), pmf(pmf) { }
-
- Result
- operator()(int source, int tag, const T& data,
- trigger_receive_context context) const
- {
- return (self->*pmf)(source, tag, data, context);
- }
-
-private:
- Class* self;
- Result (Class::*pmf)(int, int, const T&, trigger_receive_context);
-};
-
-} // end namespace detail
-
-/**
- * Simplified trigger interface that reduces the amount of code
- * required to connect a process group trigger to a handler that is
- * just a bound member function.
- *
- * INTERNAL ONLY
- */
-template<typename ProcessGroup, typename Class, typename T>
-inline void
-simple_trigger(ProcessGroup& pg, int tag, Class* self,
- void (Class::*pmf)(int source, int tag, const T& data,
- trigger_receive_context context), int)
-{
- pg.template trigger<T>(tag,
- detail::simple_trigger_t<Class, T, void>(self, pmf));
-}
-
-/**
- * Simplified trigger interface that reduces the amount of code
- * required to connect a process group trigger with a reply to a
- * handler that is just a bound member function.
- *
- * INTERNAL ONLY
- */
-template<typename ProcessGroup, typename Class, typename T, typename Result>
-inline void
-simple_trigger(ProcessGroup& pg, int tag, Class* self,
- Result (Class::*pmf)(int source, int tag, const T& data,
- trigger_receive_context context), long)
-{
- pg.template trigger_with_reply<T>
- (tag, detail::simple_trigger_t<Class, T, Result>(self, pmf));
-}
-
-/**
- * Simplified trigger interface that reduces the amount of code
- * required to connect a process group trigger to a handler that is
- * just a bound member function.
- */
-template<typename ProcessGroup, typename Class, typename T, typename Result>
-inline void
-simple_trigger(ProcessGroup& pg, int tag, Class* self,
- Result (Class::*pmf)(int source, int tag, const T& data,
- trigger_receive_context context))
-{
- // We pass 0 (an int) to help VC++ disambiguate calls to simple_trigger
- // with Result=void.
- simple_trigger(pg, tag, self, pmf, 0);
-}
-
-} } } // end namespace boost::graph::parallel
-
-#endif // BOOST_GRAPH_PARALLEL_SIMPLE_TRIGGER_HPP
+// File moved
+#include <boost/property_map/parallel/simple_trigger.hpp>
diff --git a/3party/boost/boost/graph/planar_canonical_ordering.hpp b/3party/boost/boost/graph/planar_canonical_ordering.hpp
index 86203aaf38..d470ee591e 100644
--- a/3party/boost/boost/graph/planar_canonical_ordering.hpp
+++ b/3party/boost/boost/graph/planar_canonical_ordering.hpp
@@ -41,10 +41,8 @@ namespace boost
typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
typedef typename graph_traits<Graph>::edge_descriptor edge_t;
- typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator_t;
typedef typename graph_traits<Graph>::adjacency_iterator
adjacency_iterator_t;
- typedef typename std::pair<vertex_t, vertex_t> vertex_pair_t;
typedef typename property_traits<PlanarEmbedding>::value_type
embedding_value_t;
typedef typename embedding_value_t::const_iterator embedding_iterator_t;
diff --git a/3party/boost/boost/graph/properties.hpp b/3party/boost/boost/graph/properties.hpp
index d540439ef8..ca6a4e9b12 100644
--- a/3party/boost/boost/graph/properties.hpp
+++ b/3party/boost/boost/graph/properties.hpp
@@ -27,12 +27,6 @@
#include <boost/mpl/not.hpp>
#include <boost/mpl/if.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-// Stay out of the way of the concept checking class
-# define Graph Graph_
-# define RandomAccessContainer RandomAccessContainer_
-#endif
-
namespace boost {
enum default_color_type { white_color, gray_color, green_color, red_color, black_color };
@@ -53,16 +47,6 @@ namespace boost {
inline default_color_type red(default_color_type) { return red_color; }
inline default_color_type black(default_color_type) { return black_color; }
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <>
- struct property_traits<default_color_type*> {
- typedef default_color_type value_type;
- typedef std::ptrdiff_t key_type;
- typedef default_color_type& reference;
- typedef lvalue_property_map_tag category;
- };
- // get/put already defined for T*
-#endif
struct graph_property_tag { };
struct vertex_property_tag { };
@@ -339,9 +323,6 @@ namespace boost {
return make_iterator_vertex_map(c.begin());
}
-#if defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-# define BOOST_GRAPH_NO_BUNDLED_PROPERTIES
-#endif
#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590)) && !defined (BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
// This compiler cannot define a partial specialization based on a
diff --git a/3party/boost/boost/graph/r_c_shortest_paths.hpp b/3party/boost/boost/graph/r_c_shortest_paths.hpp
index 28755d8724..afa50cf084 100644
--- a/3party/boost/boost/graph/r_c_shortest_paths.hpp
+++ b/3party/boost/boost/graph/r_c_shortest_paths.hpp
@@ -13,6 +13,8 @@
#include <vector>
#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/iteration_macros.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost {
@@ -34,7 +36,8 @@ struct r_c_shortest_paths_label
pred_edge( ed ),
resident_vertex( vd ),
b_is_dominated( false ),
- b_is_processed( false )
+ b_is_processed( false ),
+ b_is_valid( true )
{}
r_c_shortest_paths_label& operator=( const r_c_shortest_paths_label& other )
{
@@ -51,6 +54,7 @@ struct r_c_shortest_paths_label
const typename graph_traits<Graph>::vertex_descriptor resident_vertex;
bool b_is_dominated;
bool b_is_processed;
+ bool b_is_valid;
}; // r_c_shortest_paths_label
template<class Graph, class Resource_Container>
@@ -58,6 +62,7 @@ inline bool operator==
( const r_c_shortest_paths_label<Graph, Resource_Container>& l1,
const r_c_shortest_paths_label<Graph, Resource_Container>& l2 )
{
+ assert (l1.b_is_valid && l2.b_is_valid);
return
l1.cumulated_resource_consumption == l2.cumulated_resource_consumption;
}
@@ -67,6 +72,7 @@ inline bool operator!=
( const r_c_shortest_paths_label<Graph, Resource_Container>& l1,
const r_c_shortest_paths_label<Graph, Resource_Container>& l2 )
{
+ assert (l1.b_is_valid && l2.b_is_valid);
return
!( l1 == l2 );
}
@@ -76,6 +82,7 @@ inline bool operator<
( const r_c_shortest_paths_label<Graph, Resource_Container>& l1,
const r_c_shortest_paths_label<Graph, Resource_Container>& l2 )
{
+ assert (l1.b_is_valid && l2.b_is_valid);
return
l1.cumulated_resource_consumption < l2.cumulated_resource_consumption;
}
@@ -85,6 +92,7 @@ inline bool operator>
( const r_c_shortest_paths_label<Graph, Resource_Container>& l1,
const r_c_shortest_paths_label<Graph, Resource_Container>& l2 )
{
+ assert (l1.b_is_valid && l2.b_is_valid);
return
l2.cumulated_resource_consumption < l1.cumulated_resource_consumption;
}
@@ -94,6 +102,7 @@ inline bool operator<=
( const r_c_shortest_paths_label<Graph, Resource_Container>& l1,
const r_c_shortest_paths_label<Graph, Resource_Container>& l2 )
{
+ assert (l1.b_is_valid && l2.b_is_valid);
return
l1 < l2 || l1 == l2;
}
@@ -103,6 +112,7 @@ inline bool operator>=
( const r_c_shortest_paths_label<Graph, Resource_Container>& l1,
const r_c_shortest_paths_label<Graph, Resource_Container>& l2 )
{
+ assert (l1.b_is_valid && l2.b_is_valid);
return l2 < l1 || l1 == l2;
}
@@ -185,7 +195,7 @@ void r_c_shortest_paths_dispatch
pareto_optimal_resource_containers.clear();
pareto_optimal_solutions.clear();
- unsigned long i_label_num = 0;
+ size_t i_label_num = 0;
typedef
typename
Label_Allocator::template rebind
@@ -213,18 +223,40 @@ void r_c_shortest_paths_dispatch
Splabel splabel_first_label = Splabel( first_label );
unprocessed_labels.push( splabel_first_label );
- std::vector<std::list<Splabel> > vec_vertex_labels( num_vertices( g ) );
- vec_vertex_labels[vertex_index_map[s]].push_back( splabel_first_label );
- std::vector<typename std::list<Splabel>::iterator>
- vec_last_valid_positions_for_dominance( num_vertices( g ) );
- for( int i = 0; i < static_cast<int>( num_vertices( g ) ); ++i )
- vec_last_valid_positions_for_dominance[i] = vec_vertex_labels[i].begin();
- std::vector<int> vec_last_valid_index_for_dominance( num_vertices( g ), 0 );
+ std::vector<std::list<Splabel> > vec_vertex_labels_data( num_vertices( g ) );
+ iterator_property_map<typename std::vector<std::list<Splabel> >::iterator,
+ VertexIndexMap>
+ vec_vertex_labels(vec_vertex_labels_data.begin(), vertex_index_map);
+ vec_vertex_labels[s].push_back( splabel_first_label );
+ typedef
+ std::vector<typename std::list<Splabel>::iterator>
+ vec_last_valid_positions_for_dominance_data_type;
+ vec_last_valid_positions_for_dominance_data_type
+ vec_last_valid_positions_for_dominance_data( num_vertices( g ) );
+ iterator_property_map<
+ typename vec_last_valid_positions_for_dominance_data_type::iterator,
+ VertexIndexMap>
+ vec_last_valid_positions_for_dominance
+ (vec_last_valid_positions_for_dominance_data.begin(),
+ vertex_index_map);
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ put(vec_last_valid_positions_for_dominance, v, vec_vertex_labels[v].begin());
+ }
+ std::vector<size_t> vec_last_valid_index_for_dominance_data( num_vertices( g ), 0 );
+ iterator_property_map<std::vector<size_t>::iterator, VertexIndexMap>
+ vec_last_valid_index_for_dominance
+ (vec_last_valid_index_for_dominance_data.begin(), vertex_index_map);
std::vector<bool>
- b_vec_vertex_already_checked_for_dominance( num_vertices( g ), false );
+ b_vec_vertex_already_checked_for_dominance_data( num_vertices( g ), false );
+ iterator_property_map<std::vector<bool>::iterator, VertexIndexMap>
+ b_vec_vertex_already_checked_for_dominance
+ (b_vec_vertex_already_checked_for_dominance_data.begin(),
+ vertex_index_map);
+
while( !unprocessed_labels.empty() && vis.on_enter_loop(unprocessed_labels, g) )
{
Splabel cur_label = unprocessed_labels.top();
+ assert (cur_label->b_is_valid);
unprocessed_labels.pop();
vis.on_label_popped( *cur_label, g );
// an Splabel object in unprocessed_labels and the respective Splabel
@@ -239,14 +271,16 @@ void r_c_shortest_paths_dispatch
// if there is a chance that extending the
// label leads to new undominated labels, which in turn is possible only
// if the label to be extended is undominated
+ assert (cur_label->b_is_valid);
if( !cur_label->b_is_dominated )
{
- int i_cur_resident_vertex_num = cur_label->resident_vertex;
+ typename boost::graph_traits<Graph>::vertex_descriptor
+ i_cur_resident_vertex = cur_label->resident_vertex;
std::list<Splabel>& list_labels_cur_vertex =
- vec_vertex_labels[i_cur_resident_vertex_num];
- if( static_cast<int>( list_labels_cur_vertex.size() ) >= 2
- && vec_last_valid_index_for_dominance[i_cur_resident_vertex_num]
- < static_cast<int>( list_labels_cur_vertex.size() ) )
+ get(vec_vertex_labels, i_cur_resident_vertex);
+ if( list_labels_cur_vertex.size() >= 2
+ && vec_last_valid_index_for_dominance[i_cur_resident_vertex]
+ < list_labels_cur_vertex.size() )
{
typename std::list<Splabel>::iterator outer_iter =
list_labels_cur_vertex.begin();
@@ -254,14 +288,14 @@ void r_c_shortest_paths_dispatch
while( outer_iter != list_labels_cur_vertex.end() )
{
Splabel cur_outer_splabel = *outer_iter;
+ assert (cur_outer_splabel->b_is_valid);
typename std::list<Splabel>::iterator inner_iter = outer_iter;
if( !b_outer_iter_at_or_beyond_last_valid_pos_for_dominance
&& outer_iter ==
- vec_last_valid_positions_for_dominance
- [i_cur_resident_vertex_num] )
+ get(vec_last_valid_positions_for_dominance,
+ i_cur_resident_vertex) )
b_outer_iter_at_or_beyond_last_valid_pos_for_dominance = true;
- if( !b_vec_vertex_already_checked_for_dominance
- [i_cur_resident_vertex_num]
+ if( !get(b_vec_vertex_already_checked_for_dominance, i_cur_resident_vertex)
|| b_outer_iter_at_or_beyond_last_valid_pos_for_dominance )
{
++inner_iter;
@@ -269,14 +303,15 @@ void r_c_shortest_paths_dispatch
else
{
inner_iter =
- vec_last_valid_positions_for_dominance
- [i_cur_resident_vertex_num];
+ get(vec_last_valid_positions_for_dominance,
+ i_cur_resident_vertex);
++inner_iter;
}
bool b_outer_iter_erased = false;
while( inner_iter != list_labels_cur_vertex.end() )
{
Splabel cur_inner_splabel = *inner_iter;
+ assert (cur_inner_splabel->b_is_valid);
if( dominance( cur_outer_splabel->
cumulated_resource_consumption,
cur_inner_splabel->
@@ -287,6 +322,7 @@ void r_c_shortest_paths_dispatch
list_labels_cur_vertex.erase( buf );
if( cur_inner_splabel->b_is_processed )
{
+ cur_inner_splabel->b_is_valid = false;
l_alloc.destroy( cur_inner_splabel.get() );
l_alloc.deallocate( cur_inner_splabel.get(), 1 );
}
@@ -305,8 +341,10 @@ void r_c_shortest_paths_dispatch
++outer_iter;
list_labels_cur_vertex.erase( buf );
b_outer_iter_erased = true;
+ assert (cur_outer_splabel->b_is_valid);
if( cur_outer_splabel->b_is_processed )
{
+ cur_outer_splabel->b_is_valid = false;
l_alloc.destroy( cur_outer_splabel.get() );
l_alloc.deallocate( cur_outer_splabel.get(), 1 );
}
@@ -318,34 +356,38 @@ void r_c_shortest_paths_dispatch
if( !b_outer_iter_erased )
++outer_iter;
}
- if( static_cast<int>( list_labels_cur_vertex.size() ) > 1 )
- vec_last_valid_positions_for_dominance[i_cur_resident_vertex_num] =
- (--(list_labels_cur_vertex.end()));
+ if( list_labels_cur_vertex.size() > 1 )
+ put(vec_last_valid_positions_for_dominance, i_cur_resident_vertex,
+ (--(list_labels_cur_vertex.end())));
else
- vec_last_valid_positions_for_dominance[i_cur_resident_vertex_num] =
- list_labels_cur_vertex.begin();
- b_vec_vertex_already_checked_for_dominance
- [i_cur_resident_vertex_num] = true;
- vec_last_valid_index_for_dominance[i_cur_resident_vertex_num] =
- static_cast<int>( list_labels_cur_vertex.size() ) - 1;
+ put(vec_last_valid_positions_for_dominance, i_cur_resident_vertex,
+ list_labels_cur_vertex.begin());
+ put(b_vec_vertex_already_checked_for_dominance,
+ i_cur_resident_vertex, true);
+ put(vec_last_valid_index_for_dominance, i_cur_resident_vertex,
+ list_labels_cur_vertex.size() - 1);
}
}
+ assert (b_all_pareto_optimal_solutions || cur_label->b_is_valid);
if( !b_all_pareto_optimal_solutions && cur_label->resident_vertex == t )
{
// the devil don't sleep
if( cur_label->b_is_dominated )
{
+ cur_label->b_is_valid = false;
l_alloc.destroy( cur_label.get() );
l_alloc.deallocate( cur_label.get(), 1 );
}
while( unprocessed_labels.size() )
{
Splabel l = unprocessed_labels.top();
+ assert (l->b_is_valid);
unprocessed_labels.pop();
// delete only dominated labels, because nondominated labels are
// deleted at the end of the function
if( l->b_is_dominated )
{
+ l->b_is_valid = false;
l_alloc.destroy( l.get() );
l_alloc.deallocate( l.get(), 1 );
}
@@ -383,6 +425,7 @@ void r_c_shortest_paths_dispatch
if( !b_feasible )
{
vis.on_label_not_feasible( *new_label, g );
+ new_label->b_is_valid = false;
l_alloc.destroy( new_label );
l_alloc.deallocate( new_label, 1 );
}
@@ -392,7 +435,7 @@ void r_c_shortest_paths_dispatch
ref_new_label = *new_label;
vis.on_label_feasible( ref_new_label, g );
Splabel new_sp_label( new_label );
- vec_vertex_labels[vertex_index_map[new_sp_label->resident_vertex]].
+ vec_vertex_labels[new_sp_label->resident_vertex].
push_back( new_sp_label );
unprocessed_labels.push( new_sp_label );
}
@@ -400,12 +443,14 @@ void r_c_shortest_paths_dispatch
}
else
{
+ assert (cur_label->b_is_valid);
vis.on_label_dominated( *cur_label, g );
+ cur_label->b_is_valid = false;
l_alloc.destroy( cur_label.get() );
l_alloc.deallocate( cur_label.get(), 1 );
}
}
- std::list<Splabel> dsplabels = vec_vertex_labels[vertex_index_map[t]];
+ std::list<Splabel> dsplabels = get(vec_vertex_labels, t);
typename std::list<Splabel>::const_iterator csi = dsplabels.begin();
typename std::list<Splabel>::const_iterator csi_end = dsplabels.end();
// if d could be reached from o
@@ -417,12 +462,14 @@ void r_c_shortest_paths_dispatch
cur_pareto_optimal_path;
const r_c_shortest_paths_label<Graph, Resource_Container>* p_cur_label =
(*csi).get();
+ assert (p_cur_label->b_is_valid);
pareto_optimal_resource_containers.
push_back( p_cur_label->cumulated_resource_consumption );
while( p_cur_label->num != 0 )
{
cur_pareto_optimal_path.push_back( p_cur_label->pred_edge );
p_cur_label = p_cur_label->p_pred_label;
+ assert (p_cur_label->b_is_valid);
}
pareto_optimal_solutions.push_back( cur_pareto_optimal_path );
if( !b_all_pareto_optimal_solutions )
@@ -430,13 +477,13 @@ void r_c_shortest_paths_dispatch
}
}
- int i_size = static_cast<int>( vec_vertex_labels.size() );
- for( int i = 0; i < i_size; ++i )
- {
+ BGL_FORALL_VERTICES_T(i, g, Graph) {
const std::list<Splabel>& list_labels_cur_vertex = vec_vertex_labels[i];
csi_end = list_labels_cur_vertex.end();
for( csi = list_labels_cur_vertex.begin(); csi != csi_end; ++csi )
{
+ assert ((*csi)->b_is_valid);
+ (*csi)->b_is_valid = false;
l_alloc.destroy( (*csi).get() );
l_alloc.deallocate( (*csi).get(), 1 );
}
@@ -679,7 +726,7 @@ void check_r_c_path( const Graph& g,
typename graph_traits<Graph>::edge_descriptor&
ed_last_extended_arc )
{
- int i_size_ed_vec_path = static_cast<int>( ed_vec_path.size() );
+ size_t i_size_ed_vec_path = ed_vec_path.size();
std::vector<typename graph_traits<Graph>::edge_descriptor> buf_path;
if( i_size_ed_vec_path == 0 )
b_feasible = true;
@@ -689,9 +736,9 @@ void check_r_c_path( const Graph& g,
|| target( ed_vec_path[0], g ) == source( ed_vec_path[1], g ) )
buf_path = ed_vec_path;
else
- for( int i = i_size_ed_vec_path - 1; i >= 0; --i )
- buf_path.push_back( ed_vec_path[i] );
- for( int i = 0; i < i_size_ed_vec_path - 1; ++i )
+ for( size_t i = i_size_ed_vec_path ; i > 0; --i )
+ buf_path.push_back( ed_vec_path[i - 1] );
+ for( size_t i = 0; i < i_size_ed_vec_path - 1; ++i )
{
if( target( buf_path[i], g ) != source( buf_path[i + 1], g ) )
{
@@ -707,7 +754,7 @@ void check_r_c_path( const Graph& g,
b_correctly_extended = false;
Resource_Container current_resource_levels = initial_resource_levels;
actual_final_resource_levels = current_resource_levels;
- for( int i = 0; i < i_size_ed_vec_path; ++i )
+ for( size_t i = 0; i < i_size_ed_vec_path; ++i )
{
ed_last_extended_arc = buf_path[i];
b_feasible = ref( g,
diff --git a/3party/boost/boost/graph/random.hpp b/3party/boost/boost/graph/random.hpp
index f4001337a1..f0153b2c42 100644
--- a/3party/boost/boost/graph/random.hpp
+++ b/3party/boost/boost/graph/random.hpp
@@ -86,8 +86,6 @@ namespace boost {
template <typename Graph, typename WeightMap, typename RandomNumGen>
typename graph_traits<Graph>::edge_descriptor
weighted_random_out_edge(Graph& g, typename graph_traits<Graph>::vertex_descriptor src, WeightMap weight, RandomNumGen& gen) {
- typedef graph_traits<Graph> gt;
- typedef typename gt::vertex_descriptor vertex_descriptor;
typedef typename property_traits<WeightMap>::value_type weight_type;
weight_type weight_sum(0);
BGL_FORALL_OUTEDGES_T(src, e, g, Graph) {weight_sum += get(weight, e);}
diff --git a/3party/boost/boost/graph/random_spanning_tree.hpp b/3party/boost/boost/graph/random_spanning_tree.hpp
index 5ecd4f17d9..76dc7f2b9a 100644
--- a/3party/boost/boost/graph/random_spanning_tree.hpp
+++ b/3party/boost/boost/graph/random_spanning_tree.hpp
@@ -33,7 +33,6 @@ namespace boost {
template <typename Graph, typename PredMap, typename ColorMap, typename NextEdge>
void random_spanning_tree_internal(const Graph& g, typename graph_traits<Graph>::vertex_descriptor s, PredMap pred, ColorMap color, NextEdge next_edge) {
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
BOOST_ASSERT (num_vertices(g) >= 1); // g must also be undirected (or symmetric) and connected
diff --git a/3party/boost/boost/graph/read_dimacs.hpp b/3party/boost/boost/graph/read_dimacs.hpp
index 06f1a335f5..0297744c8d 100644
--- a/3party/boost/boost/graph/read_dimacs.hpp
+++ b/3party/boost/boost/graph/read_dimacs.hpp
@@ -45,7 +45,6 @@ int read_dimacs_max_flow_internal(Graph& g,
const int NODE_FIELDS = 2; /* no of fields in node line */
const int P_FIELDS = 3; /* no of fields in problem line */
- typedef typename graph_traits<Graph>::vertices_size_type vertices_size_type;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
diff --git a/3party/boost/boost/graph/reverse_graph.hpp b/3party/boost/boost/graph/reverse_graph.hpp
index e9027e3cf2..24eb1c7c03 100644
--- a/3party/boost/boost/graph/reverse_graph.hpp
+++ b/3party/boost/boost/graph/reverse_graph.hpp
@@ -13,11 +13,6 @@
#include <boost/type_traits.hpp>
#include <boost/mpl/if.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-// Stay out of the way of the concept checking class
-# define BidirectionalGraph BidirectionalGraph_
-#endif
-
namespace boost {
struct reverse_graph_tag { };
diff --git a/3party/boost/boost/graph/stanford_graph.hpp b/3party/boost/boost/graph/stanford_graph.hpp
index 89f5e34b29..b2d3987d7e 100644
--- a/3party/boost/boost/graph/stanford_graph.hpp
+++ b/3party/boost/boost/graph/stanford_graph.hpp
@@ -347,7 +347,6 @@ namespace boost {
}
};
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class Tag>
inline sgb_vertex_util_map<Tag, const typename Tag::type&>
@@ -371,7 +370,6 @@ namespace boost {
return sgb_edge_util_map<Tag, typename Tag::type&>();
}
-#endif // ! BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// Edge Length Access
template <class Ref>
@@ -444,7 +442,6 @@ namespace boost {
typedef sgb_vertex_name_map const_type;
};
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
namespace detail {
template <class Kind, class PropertyTag>
@@ -510,49 +507,6 @@ namespace boost {
sgb_##KIND##_util_map< X##_property<T>, T&>()[key] = value; \
}
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-#define SGB_UTIL_ACCESSOR_TYPE(KIND,TAG,TYPE) \
- inline sgb_##KIND##_util_map< TAG<TYPE>, TYPE& > \
- get(TAG<TYPE>, sgb_graph_ptr&) { \
- return sgb_##KIND##_util_map< TAG<TYPE>, TYPE& >(); \
- } \
- inline sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& > \
- get(TAG<TYPE>, const sgb_graph_ptr&) { \
- return sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >(); \
- } \
- inline sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& > \
- get(TAG<TYPE>, const sgb_const_graph_ptr&) { \
- return sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >(); \
- } \
- template <class Key> \
- inline typename sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >::value_type \
- get(TAG<TYPE>, const sgb_graph_ptr&, const Key& key) { \
- return sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >()[key]; \
- } \
- template <class Key> \
- inline typename sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >::value_type \
- get(TAG<TYPE>, const sgb_const_graph_ptr&, const Key& key) { \
- return sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >()[key]; \
- } \
- template <class Key, class Value> \
- inline void \
- put(TAG<TYPE>, sgb_graph_ptr&, const Key& key, const Value& value) { \
- sgb_##KIND##_util_map< TAG<TYPE>, TYPE& >()[key] = value; \
- } \
- template <> struct property_map<sgb_graph_ptr, TAG<TYPE> > { \
- typedef sgb_##KIND##_util_map< TAG<TYPE>, TYPE&> type; \
- typedef sgb_##KIND##_util_map< TAG<TYPE>, const TYPE&> const_type; \
- }
-
-#define SGB_UTIL_ACCESSOR(KIND,TAG) \
- SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, Vertex*); \
- SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, Arc*); \
- SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, sgb_graph_ptr); \
- SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, long); \
- SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, char*);
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
SGB_UTIL_ACCESSOR(vertex, u)
SGB_UTIL_ACCESSOR(vertex, v)
diff --git a/3party/boost/boost/graph/stoer_wagner_min_cut.hpp b/3party/boost/boost/graph/stoer_wagner_min_cut.hpp
index a777f0311e..eb5998c710 100644
--- a/3party/boost/boost/graph/stoer_wagner_min_cut.hpp
+++ b/3party/boost/boost/graph/stoer_wagner_min_cut.hpp
@@ -76,7 +76,6 @@ namespace boost {
template < typename Vertex, typename Graph >
void finish_vertex(Vertex u, const Graph & g)
{
- typedef typename boost::property_traits<ParityMap>::value_type parity_type;
typedef typename boost::property_traits<InternalParityMap>::value_type internal_parity_type;
++m_visited;
@@ -131,10 +130,7 @@ namespace boost {
typename boost::property_traits<WeightMap>::value_type
stoer_wagner_min_cut(const UndirectedGraph& g, WeightMap weights, ParityMap parities, VertexAssignmentMap assignments, KeyedUpdatablePriorityQueue& pq, IndexMap index_map) {
typedef typename boost::graph_traits<UndirectedGraph>::vertex_descriptor vertex_descriptor;
- typedef typename boost::graph_traits<UndirectedGraph>::vertices_size_type vertices_size_type;
- typedef typename boost::graph_traits<UndirectedGraph>::edge_descriptor edge_descriptor;
typedef typename boost::property_traits<WeightMap>::value_type weight_type;
- typedef typename boost::property_traits<ParityMap>::value_type parity_type;
typename graph_traits<UndirectedGraph>::vertex_iterator u_iter, u_end;
@@ -185,9 +181,9 @@ namespace boost {
typedef typename boost::graph_traits<UndirectedGraph>::edge_descriptor edge_descriptor;
BOOST_CONCEPT_ASSERT((boost::Convertible<typename boost::graph_traits<UndirectedGraph>::directed_category, boost::undirected_tag>));
BOOST_CONCEPT_ASSERT((boost::ReadablePropertyMapConcept<WeightMap, edge_descriptor>));
- typedef typename boost::property_traits<WeightMap>::value_type weight_type;
+ // typedef typename boost::property_traits<WeightMap>::value_type weight_type;
BOOST_CONCEPT_ASSERT((boost::WritablePropertyMapConcept<ParityMap, vertex_descriptor>));
- typedef typename boost::property_traits<ParityMap>::value_type parity_type;
+ // typedef typename boost::property_traits<ParityMap>::value_type parity_type;
BOOST_CONCEPT_ASSERT((boost::ReadWritePropertyMapConcept<VertexAssignmentMap, vertex_descriptor>));
BOOST_CONCEPT_ASSERT((boost::Convertible<vertex_descriptor, typename boost::property_traits<VertexAssignmentMap>::value_type>));
BOOST_CONCEPT_ASSERT((boost::KeyedUpdatableQueueConcept<KeyedUpdatablePriorityQueue>));
diff --git a/3party/boost/boost/graph/successive_shortest_path_nonnegative_weights.hpp b/3party/boost/boost/graph/successive_shortest_path_nonnegative_weights.hpp
new file mode 100644
index 0000000000..72b1512c16
--- /dev/null
+++ b/3party/boost/boost/graph/successive_shortest_path_nonnegative_weights.hpp
@@ -0,0 +1,261 @@
+//=======================================================================
+// Copyright 2013 University of Warsaw.
+// Authors: Piotr Wygocki
+//
+// 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)
+//=======================================================================
+//
+//This algorithm is described in "Network Flows: Theory, Algorithms, and Applications"
+// by Ahuja, Magnanti, Orlin.
+
+#ifndef BOOST_GRAPH_SUCCESSIVE_SHORTEST_PATH_HPP
+#define BOOST_GRAPH_SUCCESSIVE_SHORTEST_PATH_HPP
+
+#include <numeric>
+
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/pending/indirect_cmp.hpp>
+#include <boost/pending/relaxed_heap.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/iteration_macros.hpp>
+#include <boost/graph/detail/augment.hpp>
+
+namespace boost {
+
+
+namespace detail {
+
+template <class Graph, class Weight, class Distance, class Reversed>
+class MapReducedWeight :
+ public put_get_helper<typename property_traits<Weight>::value_type, MapReducedWeight<Graph, Weight, Distance, Reversed> > {
+ typedef graph_traits<Graph> gtraits;
+public:
+ typedef boost::readable_property_map_tag category;
+ typedef typename property_traits<Weight>::value_type value_type;
+ typedef value_type reference;
+ typedef typename gtraits::edge_descriptor key_type;
+ MapReducedWeight(const Graph & g, Weight w, Distance d, Reversed r) :
+ g_(g), weight_(w), distance_(d), rev_(r) {}
+
+ reference operator[](key_type v) const {
+ return get(distance_, source(v, g_)) - get(distance_,target(v, g_)) + get(weight_, v);
+ }
+private:
+ const Graph & g_;
+ Weight weight_;
+ Distance distance_;
+ Reversed rev_;
+};
+
+template <class Graph, class Weight, class Distance, class Reversed>
+MapReducedWeight<Graph, Weight, Distance, Reversed>
+make_mapReducedWeight(const Graph & g, Weight w, Distance d, Reversed r) {
+ return MapReducedWeight<Graph, Weight, Distance, Reversed>(g, w, d, r);
+}
+
+}//detail
+
+
+template <class Graph, class Capacity, class ResidualCapacity, class Reversed, class Pred, class Weight, class Distance, class Distance2, class VertexIndex>
+void successive_shortest_path_nonnegative_weights(
+ const Graph &g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor t,
+ Capacity capacity,
+ ResidualCapacity residual_capacity,
+ Weight weight,
+ Reversed rev,
+ VertexIndex index,
+ Pred pred,
+ Distance distance,
+ Distance2 distance_prev) {
+ filtered_graph<const Graph, is_residual_edge<ResidualCapacity> >
+ gres = detail::residual_graph(g, residual_capacity);
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+
+ BGL_FORALL_EDGES_T(e, g, Graph) {
+ put(residual_capacity, e, get(capacity, e));
+ }
+
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ put(distance_prev, v, 0);
+ }
+
+ while(true) {
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ put(pred, v, edge_descriptor());
+ }
+ dijkstra_shortest_paths(gres, s,
+ weight_map(detail::make_mapReducedWeight(gres, weight, distance_prev, rev)).
+ distance_map(distance).
+ vertex_index_map(index).
+ visitor(make_dijkstra_visitor(record_edge_predecessors(pred, on_edge_relaxed()))));
+
+ if(get(pred, t) == edge_descriptor()) {
+ break;
+ }
+
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ put(distance_prev, v, get(distance_prev, v) + get(distance, v));
+ }
+
+ detail::augment(g, s, t, pred, residual_capacity, rev);
+ }
+}
+
+//in this namespace argument dispatching tak place
+namespace detail {
+
+template <class Graph, class Capacity, class ResidualCapacity, class Weight, class Reversed, class Pred, class Distance, class Distance2, class VertexIndex>
+void successive_shortest_path_nonnegative_weights_dispatch3(
+ const Graph &g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor t,
+ Capacity capacity,
+ ResidualCapacity residual_capacity,
+ Weight weight,
+ Reversed rev,
+ VertexIndex index,
+ Pred pred,
+ Distance dist,
+ Distance2 dist_pred) {
+ successive_shortest_path_nonnegative_weights(g, s, t, capacity, residual_capacity, weight, rev, index, pred, dist, dist_pred);
+}
+
+//setting default distance map
+template <class Graph, class Capacity, class ResidualCapacity, class Weight, class Reversed, class Pred, class Distance, class VertexIndex>
+void successive_shortest_path_nonnegative_weights_dispatch3(
+ Graph &g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor t,
+ Capacity capacity,
+ ResidualCapacity residual_capacity,
+ Weight weight,
+ Reversed rev,
+ VertexIndex index,
+ Pred pred,
+ Distance dist,
+ param_not_found) {
+ typedef typename property_traits<Weight>::value_type D;
+
+ std::vector<D> d_map(num_vertices(g));
+
+ successive_shortest_path_nonnegative_weights(g, s, t, capacity, residual_capacity, weight, rev, index, pred, dist,
+ make_iterator_property_map(d_map.begin(), index));
+}
+
+template <class Graph, class P, class T, class R, class Capacity, class ResidualCapacity, class Weight, class Reversed, class Pred, class Distance, class VertexIndex>
+void successive_shortest_path_nonnegative_weights_dispatch2(
+ Graph &g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor t,
+ Capacity capacity,
+ ResidualCapacity residual_capacity,
+ Weight weight,
+ Reversed rev,
+ VertexIndex index,
+ Pred pred,
+ Distance dist,
+ const bgl_named_params<P, T, R>& params) {
+ successive_shortest_path_nonnegative_weights_dispatch3(g, s, t, capacity, residual_capacity, weight, rev, index, pred, dist, get_param(params, vertex_distance2));
+}
+
+//setting default distance map
+template <class Graph, class P, class T, class R, class Capacity, class ResidualCapacity, class Weight, class Reversed, class Pred, class VertexIndex>
+void successive_shortest_path_nonnegative_weights_dispatch2(
+ Graph &g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor t,
+ Capacity capacity,
+ ResidualCapacity residual_capacity,
+ Weight weight,
+ Reversed rev,
+ VertexIndex index,
+ Pred pred,
+ param_not_found,
+ const bgl_named_params<P, T, R>& params) {
+ typedef typename property_traits<Weight>::value_type D;
+
+ std::vector<D> d_map(num_vertices(g));
+
+ successive_shortest_path_nonnegative_weights_dispatch3(g, s, t, capacity, residual_capacity, weight, rev, index, pred,
+ make_iterator_property_map(d_map.begin(), index),
+ get_param(params, vertex_distance2));
+}
+
+template <class Graph, class P, class T, class R, class Capacity, class ResidualCapacity, class Weight, class Reversed, class Pred, class VertexIndex>
+void successive_shortest_path_nonnegative_weights_dispatch1(
+ Graph &g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor t,
+ Capacity capacity,
+ ResidualCapacity residual_capacity,
+ Weight weight,
+ Reversed rev,
+ VertexIndex index,
+ Pred pred,
+ const bgl_named_params<P, T, R>& params) {
+ successive_shortest_path_nonnegative_weights_dispatch2(g, s, t, capacity, residual_capacity, weight, rev, index, pred,
+ get_param(params, vertex_distance), params);
+}
+
+//setting default predecessors map
+template <class Graph, class P, class T, class R, class Capacity, class ResidualCapacity, class Weight, class Reversed, class VertexIndex>
+void successive_shortest_path_nonnegative_weights_dispatch1(
+ Graph &g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor t,
+ Capacity capacity,
+ ResidualCapacity residual_capacity,
+ Weight weight,
+ Reversed rev,
+ VertexIndex index,
+ param_not_found,
+ const bgl_named_params<P, T, R>& params) {
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+ std::vector<edge_descriptor> pred_vec(num_vertices(g));
+
+ successive_shortest_path_nonnegative_weights_dispatch2(g, s, t, capacity, residual_capacity, weight, rev, index,
+ make_iterator_property_map(pred_vec.begin(), index),
+ get_param(params, vertex_distance), params);
+}
+
+}//detail
+
+
+template <class Graph, class P, class T, class R>
+void successive_shortest_path_nonnegative_weights(
+ Graph &g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor t,
+ const bgl_named_params<P, T, R>& params) {
+
+ return detail::successive_shortest_path_nonnegative_weights_dispatch1(g, s, t,
+ choose_const_pmap(get_param(params, edge_capacity), g, edge_capacity),
+ choose_pmap(get_param(params, edge_residual_capacity),
+ g, edge_residual_capacity),
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ choose_const_pmap(get_param(params, edge_reverse), g, edge_reverse),
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
+ get_param(params, vertex_predecessor),
+ params);
+}
+
+template <class Graph>
+void successive_shortest_path_nonnegative_weights(
+ Graph &g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor t) {
+ bgl_named_params<int, buffer_param_t> params(0);
+ successive_shortest_path_nonnegative_weights(g, s, t, params);
+}
+
+
+}//boost
+#endif /* BOOST_GRAPH_SUCCESSIVE_SHORTEST_PATH_HPP */
+
diff --git a/3party/boost/boost/graph/tiernan_all_cycles.hpp b/3party/boost/boost/graph/tiernan_all_cycles.hpp
index 97ee89c446..d4527d5523 100644
--- a/3party/boost/boost/graph/tiernan_all_cycles.hpp
+++ b/3party/boost/boost/graph/tiernan_all_cycles.hpp
@@ -212,7 +212,6 @@ namespace detail
{
BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
- typedef typename graph_traits<Graph>::edge_descriptor Edge;
typedef typename graph_traits<Graph>::out_edge_iterator OutIterator;
// get the current vertex
diff --git a/3party/boost/boost/graph/transitive_closure.hpp b/3party/boost/boost/graph/transitive_closure.hpp
index 5ba0cab7f0..4f81349bf2 100644
--- a/3party/boost/boost/graph/transitive_closure.hpp
+++ b/3party/boost/boost/graph/transitive_closure.hpp
@@ -14,11 +14,11 @@
#include <functional>
#include <boost/config.hpp>
#include <boost/bind.hpp>
-#include <boost/graph/vector_as_graph.hpp>
#include <boost/graph/strong_components.hpp>
#include <boost/graph/topological_sort.hpp>
#include <boost/graph/graph_concepts.hpp>
#include <boost/graph/named_function_params.hpp>
+#include <boost/graph/adjacency_list.hpp>
#include <boost/concept/assert.hpp>
namespace boost
@@ -71,7 +71,6 @@ namespace boost
if (num_vertices(g) == 0)
return;
typedef typename graph_traits < Graph >::vertex_descriptor vertex;
- typedef typename graph_traits < Graph >::edge_descriptor edge;
typedef typename graph_traits < Graph >::vertex_iterator vertex_iterator;
typedef typename property_traits < VertexIndexMap >::value_type size_type;
typedef typename graph_traits <
@@ -95,7 +94,7 @@ namespace boost
std::vector < std::vector < vertex > >components;
build_component_lists(g, num_scc, component_number, components);
- typedef std::vector<std::vector<cg_vertex> > CG_t;
+ typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS> CG_t;
CG_t CG(num_scc);
for (cg_vertex s = 0; s < components.size(); ++s) {
std::vector < cg_vertex > adj;
@@ -113,7 +112,10 @@ namespace boost
std::unique(adj.begin(), adj.end());
if (di != adj.end())
adj.erase(di, adj.end());
- CG[s] = adj;
+ for (typename std::vector<cg_vertex>::const_iterator i = adj.begin();
+ i != adj.end(); ++i) {
+ add_edge(s, *i, CG);
+ }
}
std::vector<cg_vertex> topo_order;
@@ -126,15 +128,20 @@ namespace boost
iter != topo_order.end(); ++iter)
topo_number[*iter] = n++;
- for (size_type i = 0; i < num_vertices(CG); ++i)
- std::sort(CG[i].begin(), CG[i].end(),
+ std::vector<std::vector<cg_vertex> > CG_vec(num_vertices(CG));
+ for (size_type i = 0; i < num_vertices(CG); ++i) {
+ typedef typename boost::graph_traits<CG_t>::adjacency_iterator cg_adj_iter;
+ std::pair<cg_adj_iter, cg_adj_iter> pr = adjacent_vertices(i, CG);
+ CG_vec[i].assign(pr.first, pr.second);
+ std::sort(CG_vec[i].begin(), CG_vec[i].end(),
boost::bind(std::less<cg_vertex>(),
boost::bind(detail::subscript(topo_number), _1),
boost::bind(detail::subscript(topo_number), _2)));
+ }
std::vector<std::vector<cg_vertex> > chains;
{
- std::vector<cg_vertex> in_a_chain(num_vertices(CG));
+ std::vector<cg_vertex> in_a_chain(CG_vec.size());
for (typename std::vector<cg_vertex>::iterator i = topo_order.begin();
i != topo_order.end(); ++i) {
cg_vertex v = *i;
@@ -144,12 +151,10 @@ namespace boost
for (;;) {
chain.push_back(v);
in_a_chain[v] = true;
- typename graph_traits<CG_t>::adjacency_iterator adj_first, adj_last;
- boost::tie(adj_first, adj_last) = adjacent_vertices(v, CG);
- typename graph_traits<CG_t>::adjacency_iterator next
- = std::find_if(adj_first, adj_last,
+ typename std::vector<cg_vertex>::const_iterator next
+ = std::find_if(CG_vec[v].begin(), CG_vec[v].end(),
std::not1(detail::subscript(in_a_chain)));
- if (next != adj_last)
+ if (next != CG_vec[v].end())
v = *next;
else
break; // end of chain, dead-end
@@ -158,8 +163,8 @@ namespace boost
}
}
}
- std::vector<size_type> chain_number(num_vertices(CG));
- std::vector<size_type> pos_in_chain(num_vertices(CG));
+ std::vector<size_type> chain_number(CG_vec.size());
+ std::vector<size_type> pos_in_chain(CG_vec.size());
for (size_type i = 0; i < chains.size(); ++i)
for (size_type j = 0; j < chains[i].size(); ++j) {
cg_vertex v = chains[i][j];
@@ -168,14 +173,14 @@ namespace boost
}
cg_vertex inf = (std::numeric_limits< cg_vertex >::max)();
- std::vector<std::vector<cg_vertex> > successors(num_vertices(CG),
+ std::vector<std::vector<cg_vertex> > successors(CG_vec.size(),
std::vector<cg_vertex>
(chains.size(), inf));
for (typename std::vector<cg_vertex>::reverse_iterator
i = topo_order.rbegin(); i != topo_order.rend(); ++i) {
cg_vertex u = *i;
- typename graph_traits<CG_t>::adjacency_iterator adj, adj_last;
- for (boost::tie(adj, adj_last) = adjacent_vertices(u, CG);
+ typename std::vector<cg_vertex>::const_iterator adj, adj_last;
+ for (adj = CG_vec[u].begin(), adj_last = CG_vec[u].end();
adj != adj_last; ++adj) {
cg_vertex v = *adj;
if (topo_number[v] < successors[u][chain_number[v]]) {
@@ -188,32 +193,31 @@ namespace boost
}
}
- for (size_type i = 0; i < CG.size(); ++i)
- CG[i].clear();
- for (size_type i = 0; i < CG.size(); ++i)
+ for (size_type i = 0; i < CG_vec.size(); ++i)
+ CG_vec[i].clear();
+ for (size_type i = 0; i < CG_vec.size(); ++i)
for (size_type j = 0; j < chains.size(); ++j) {
size_type topo_num = successors[i][j];
if (topo_num < inf) {
cg_vertex v = topo_order[topo_num];
for (size_type k = pos_in_chain[v]; k < chains[j].size(); ++k)
- CG[i].push_back(chains[j][k]);
+ CG_vec[i].push_back(chains[j][k]);
}
}
// Add vertices to the transitive closure graph
- typedef typename graph_traits < GraphTC >::vertex_descriptor tc_vertex;
{
vertex_iterator i, i_end;
for (boost::tie(i, i_end) = vertices(g); i != i_end; ++i)
g_to_tc_map[*i] = add_vertex(tc);
}
// Add edges between all the vertices in two adjacent SCCs
- typename graph_traits<CG_t>::vertex_iterator si, si_end;
- for (boost::tie(si, si_end) = vertices(CG); si != si_end; ++si) {
- cg_vertex s = *si;
- typename graph_traits<CG_t>::adjacency_iterator i, i_end;
- for (boost::tie(i, i_end) = adjacent_vertices(s, CG); i != i_end; ++i) {
+ typename std::vector<std::vector<cg_vertex> >::const_iterator si, si_end;
+ for (si = CG_vec.begin(), si_end = CG_vec.end(); si != si_end; ++si) {
+ cg_vertex s = si - CG_vec.begin();
+ typename std::vector<cg_vertex>::const_iterator i, i_end;
+ for (i = CG_vec[s].begin(), i_end = CG_vec[s].end(); i != i_end; ++i) {
cg_vertex t = *i;
for (size_type k = 0; k < components[s].size(); ++k)
for (size_type l = 0; l < components[t].size(); ++l)
@@ -300,7 +304,6 @@ namespace boost
template < typename G > void warshall_transitive_closure(G & g)
{
- typedef typename graph_traits < G >::vertex_descriptor vertex;
typedef typename graph_traits < G >::vertex_iterator vertex_iterator;
BOOST_CONCEPT_ASSERT(( AdjacencyMatrixConcept < G > ));
@@ -326,7 +329,6 @@ namespace boost
template < typename G > void warren_transitive_closure(G & g)
{
using namespace boost;
- typedef typename graph_traits < G >::vertex_descriptor vertex;
typedef typename graph_traits < G >::vertex_iterator vertex_iterator;
BOOST_CONCEPT_ASSERT(( AdjacencyMatrixConcept < G > ));
diff --git a/3party/boost/boost/graph/two_graphs_common_spanning_trees.hpp b/3party/boost/boost/graph/two_graphs_common_spanning_trees.hpp
index 86d57ece07..48f80df174 100644
--- a/3party/boost/boost/graph/two_graphs_common_spanning_trees.hpp
+++ b/3party/boost/boost/graph/two_graphs_common_spanning_trees.hpp
@@ -591,17 +591,11 @@ two_graphs_common_spanning_trees
typedef typename GraphTraits::edges_size_type edges_size_type;
typedef typename GraphTraits::edge_iterator edge_iterator;
- typedef typename Seq::const_iterator seq_const_iterator;
- typedef typename Seq::difference_type seq_diff_type;
typedef typename Seq::value_type seq_value_type;
typedef typename Seq::size_type seq_size_type;
- typedef typename Seq::iterator seq_iterator;
- typedef typename Order::const_iterator order_const_iterator;
- typedef typename Order::difference_type order_diff_type;
typedef typename Order::value_type order_value_type;
typedef typename Order::size_type order_size_type;
- typedef typename Order::iterator order_iterator;
BOOST_STATIC_ASSERT((is_same<order_value_type, edge_descriptor>::value));
BOOST_CONCEPT_ASSERT((Convertible<order_size_type, edges_size_type>));
@@ -846,7 +840,6 @@ two_graphs_common_spanning_trees
typedef graph_traits<Graph> GraphTraits;
typedef typename GraphTraits::edge_descriptor edge_descriptor;
- typedef typename GraphTraits::edges_size_type edges_size_type;
typedef typename GraphTraits::edge_iterator edge_iterator;
std::vector<edge_descriptor> iGO, vGO;
diff --git a/3party/boost/boost/graph/undirected_dfs.hpp b/3party/boost/boost/graph/undirected_dfs.hpp
index a3e1c038fd..89cb10f280 100644
--- a/3party/boost/boost/graph/undirected_dfs.hpp
+++ b/3party/boost/boost/graph/undirected_dfs.hpp
@@ -46,18 +46,18 @@ namespace boost {
typedef color_traits<ColorValue> Color;
typedef color_traits<EColorValue> EColor;
typedef typename graph_traits<IncidenceGraph>::out_edge_iterator Iter;
- typedef std::pair<Vertex, std::pair<Iter, Iter> > VertexInfo;
+ typedef std::pair<Vertex, std::pair<boost::optional<Edge>, std::pair<Iter, Iter> > > VertexInfo;
std::vector<VertexInfo> stack;
put(vertex_color, u, Color::gray());
vis.discover_vertex(u, g);
- stack.push_back(std::make_pair(u, out_edges(u, g)));
+ stack.push_back(std::make_pair(u, std::make_pair(boost::optional<Edge>(), out_edges(u, g))));
while (!stack.empty()) {
VertexInfo& back = stack.back();
u = back.first;
- Iter ei, ei_end;
- boost::tie(ei, ei_end) = back.second;
+ boost::optional<Edge> src_e = back.second.first;
+ Iter ei = back.second.second.first, ei_end = back.second.second.second;
stack.pop_back();
while (ei != ei_end) {
Vertex v = target(*ei, g);
@@ -67,20 +67,24 @@ namespace boost {
put(edge_color, *ei, EColor::black());
if (v_color == Color::white()) {
vis.tree_edge(*ei, g);
- stack.push_back(std::make_pair(u, std::make_pair(++ei, ei_end)));
+ src_e = *ei;
+ stack.push_back(std::make_pair(u, std::make_pair(src_e, std::make_pair(++ei, ei_end))));
u = v;
put(vertex_color, u, Color::gray());
vis.discover_vertex(u, g);
boost::tie(ei, ei_end) = out_edges(u, g);
} else if (v_color == Color::gray()) {
if (uv_color == EColor::white()) vis.back_edge(*ei, g);
+ call_finish_edge(vis, *ei, g);
++ei;
} else { // if (v_color == Color::black())
+ call_finish_edge(vis, *ei, g);
++ei;
}
}
put(vertex_color, u, Color::black());
vis.finish_vertex(u, g);
+ if (src_e) call_finish_edge(vis, src_e.get(), g);
}
}
@@ -119,6 +123,7 @@ namespace boost {
undir_dfv_impl(g, v, vis, vertex_color, edge_color);
} else if (v_color == Color::gray() && uv_color == EColor::white())
vis.back_edge(*ei, g);
+ call_finish_edge(vis, *ei, g);
}
put(vertex_color, u, Color::black()); vis.finish_vertex(u, g);
}
diff --git a/3party/boost/boost/graph/undirected_graph.hpp b/3party/boost/boost/graph/undirected_graph.hpp
index 5c000dc2a2..1db21a64a1 100644
--- a/3party/boost/boost/graph/undirected_graph.hpp
+++ b/3party/boost/boost/graph/undirected_graph.hpp
@@ -294,7 +294,7 @@ public:
}
void swap(undirected_graph& g) {
- m_graph.swap(g);
+ m_graph.swap(g.m_graph);
std::swap(m_num_vertices, g.m_num_vertices);
std::swap(m_max_vertex_index, g.m_max_vertex_index);
std::swap(m_num_edges, g.m_num_edges);
diff --git a/3party/boost/boost/graph/vector_as_graph.hpp b/3party/boost/boost/graph/vector_as_graph.hpp
index 7bc8ac3802..b771eaf7fd 100644
--- a/3party/boost/boost/graph/vector_as_graph.hpp
+++ b/3party/boost/boost/graph/vector_as_graph.hpp
@@ -40,9 +40,6 @@
*/
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#error The vector-as-graph module requires a compiler that supports partial specialization
-#endif
namespace boost {
@@ -53,7 +50,6 @@ namespace boost {
}
}
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace boost {
struct vector_as_graph_traversal_tag
@@ -97,7 +93,6 @@ namespace boost {
typedef void type;
};
}
-#endif
namespace boost {
diff --git a/3party/boost/boost/graph/vf2_sub_graph_iso.hpp b/3party/boost/boost/graph/vf2_sub_graph_iso.hpp
index a316f78139..f86b6ee2a0 100755..100644
--- a/3party/boost/boost/graph/vf2_sub_graph_iso.hpp
+++ b/3party/boost/boost/graph/vf2_sub_graph_iso.hpp
@@ -690,11 +690,13 @@ namespace boost {
typedef vf2_match_continuation<Graph1, Graph2, VertexOrder1> match_continuation_type;
std::vector<match_continuation_type> k;
+ bool found_match = false;
recur:
if (s.success()) {
if (!s.call_back(user_callback))
- return false;
+ return true;
+ found_match = true;
goto back_track;
}
@@ -726,7 +728,7 @@ namespace boost {
back_track:
if (k.empty())
- return true;
+ return found_match;
const match_continuation_type kk = k.back();
graph1_verts_iter = kk.graph1_verts_iter;
@@ -887,9 +889,6 @@ namespace boost {
if (num_edges_small > num_edges_large)
return false;
- if ((num_vertices(graph_small) == 0) && (num_vertices(graph_large) == 0))
- return true;
-
detail::state<GraphSmall, GraphLarge, IndexMapSmall, IndexMapLarge,
EdgeEquivalencePredicate, VertexEquivalencePredicate,
SubGraphIsoMapCallback, problem_selection>
@@ -1014,8 +1013,6 @@ namespace boost {
bool vf2_subgraph_iso(const GraphSmall& graph_small, const GraphLarge& graph_large,
SubGraphIsoMapCallback user_callback) {
- typedef typename graph_traits<GraphSmall>::vertex_descriptor vertex_small_type;
-
return vf2_subgraph_iso(graph_small, graph_large, user_callback,
get(vertex_index, graph_small), get(vertex_index, graph_large),
vertex_order_by_mult(graph_small),
@@ -1125,9 +1122,6 @@ namespace boost {
if (num_edges1 != num_edges2)
return false;
- if ((num_vertices(graph1) == 0) && (num_vertices(graph2) == 0))
- return true;
-
detail::state<Graph1, Graph2, IndexMap1, IndexMap2,
EdgeEquivalencePredicate, VertexEquivalencePredicate,
GraphIsoMapCallback, detail::isomorphism>
@@ -1144,8 +1138,6 @@ namespace boost {
bool vf2_graph_iso(const Graph1& graph1, const Graph2& graph2,
GraphIsoMapCallback user_callback) {
- typedef typename graph_traits<Graph1>::vertex_descriptor vertex1_type;
-
return vf2_graph_iso(graph1, graph2, user_callback,
get(vertex_index, graph1), get(vertex_index, graph2),
vertex_order_by_mult(graph1),
diff --git a/3party/boost/boost/graph/visitors.hpp b/3party/boost/boost/graph/visitors.hpp
index d10e140c7c..120314f902 100644
--- a/3party/boost/boost/graph/visitors.hpp
+++ b/3party/boost/boost/graph/visitors.hpp
@@ -21,11 +21,6 @@
#include <boost/graph/graph_traits.hpp>
#include <boost/limits.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-// Stay out of the way of the concept checking class
-# define Graph Graph_
-#endif
-
namespace boost {
// This is a bit more convenient than std::numeric_limits because
@@ -44,7 +39,7 @@ namespace boost {
on_discover_vertex_num, on_finish_vertex_num, on_examine_vertex_num,
on_examine_edge_num, on_tree_edge_num, on_non_tree_edge_num,
on_gray_target_num, on_black_target_num,
- on_forward_or_cross_edge_num, on_back_edge_num,
+ on_forward_or_cross_edge_num, on_back_edge_num, on_finish_edge_num,
on_edge_relaxed_num, on_edge_not_relaxed_num,
on_edge_minimized_num, on_edge_not_minimized_num
};
@@ -75,6 +70,7 @@ namespace boost {
struct on_forward_or_cross_edge {
enum { num = detail::on_forward_or_cross_edge_num }; };
struct on_back_edge { enum { num = detail::on_back_edge_num }; };
+ struct on_finish_edge { enum { num = detail::on_finish_edge_num }; };
struct on_edge_relaxed { enum { num = detail::on_edge_relaxed_num }; };
struct on_edge_not_relaxed {
@@ -122,16 +118,6 @@ namespace boost {
detail::invoke_dispatch(vlist.first, x, g, IsSameTag());
invoke_visitors(vlist.second, x, g, tag);
}
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
- template <class Visitor, class T, class Graph, class Tag>
- inline void
- invoke_visitors(base_visitor<Visitor>& vis, T x, Graph& g, Tag) {
- typedef typename Visitor::event_filter Category;
- typedef typename is_same<Category, Tag>::type IsSameTag;
- Visitor& v = static_cast<Visitor&>(vis);
- detail::invoke_dispatch(v, x, g, IsSameTag());
- }
-#else
template <class Visitor, class T, class Graph, class Tag>
inline void
invoke_visitors(Visitor& v, T x, Graph& g, Tag) {
@@ -139,7 +125,6 @@ namespace boost {
typedef typename is_same<Category, Tag>::type IsSameTag;
detail::invoke_dispatch(v, x, g, IsSameTag());
}
-#endif
//========================================================================
// predecessor_recorder
@@ -312,9 +297,4 @@ namespace boost {
} /* namespace boost */
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-// Stay out of the way of the concept checking class
-# undef Graph
-#endif
-
#endif
diff --git a/3party/boost/boost/graph/write_dimacs.hpp b/3party/boost/boost/graph/write_dimacs.hpp
index a9a8904655..a4a5777368 100644
--- a/3party/boost/boost/graph/write_dimacs.hpp
+++ b/3party/boost/boost/graph/write_dimacs.hpp
@@ -51,10 +51,6 @@ void write_dimacs_max_flow(const Graph& g,
typename graph_traits<Graph>::vertex_descriptor sink,
std::ostream& out)
{
- typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits<Graph>::vertices_size_type vertices_size_type;
- typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
- typedef typename graph_traits<Graph>::edges_size_type edges_size_type;
typedef typename graph_traits<Graph>::edge_iterator edge_iterator;
out << "c DIMACS max-flow file generated from boost::write_dimacs_max_flow" << std::endl;
diff --git a/3party/boost/boost/heap/binomial_heap.hpp b/3party/boost/boost/heap/binomial_heap.hpp
index 4ffe89dfdb..7e0760f4a2 100644
--- a/3party/boost/boost/heap/binomial_heap.hpp
+++ b/3party/boost/boost/heap/binomial_heap.hpp
@@ -20,6 +20,10 @@
#include <boost/heap/detail/stable_heap.hpp>
#include <boost/heap/detail/tree_iterator.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
#ifndef BOOST_DOXYGEN_INVOKED
#ifdef BOOST_HEAP_SANITYCHECKS
#define BOOST_HEAP_ASSERT BOOST_ASSERT
@@ -127,6 +131,7 @@ class binomial_heap:
typedef typename super_t::internal_type internal_type;
typedef typename super_t::size_holder_type size_holder;
+ typedef typename super_t::stability_counter_type stability_counter_type;
typedef typename base_maker::allocator_argument allocator_argument;
template <typename Heap1, typename Heap2>
@@ -395,11 +400,15 @@ public:
if (element->child_count()) {
size_type sz = (1 << element->child_count()) - 1;
+
binomial_heap children(value_comp(), element->children, sz);
- if (trees.empty())
+ if (trees.empty()) {
+ stability_counter_type stability_count = super_t::get_stability_count();
swap(children);
- else
+ super_t::set_stability_count(stability_count);
+ } else
merge_and_clear_nodes(children);
+
}
if (trees.empty())
diff --git a/3party/boost/boost/heap/d_ary_heap.hpp b/3party/boost/boost/heap/d_ary_heap.hpp
index f84fdd7831..b3194be8a7 100644
--- a/3party/boost/boost/heap/d_ary_heap.hpp
+++ b/3party/boost/boost/heap/d_ary_heap.hpp
@@ -21,6 +21,11 @@
#include <boost/heap/detail/stable_heap.hpp>
#include <boost/heap/detail/mutable_heap.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+
#ifndef BOOST_DOXYGEN_INVOKED
#ifdef BOOST_HEAP_SANITYCHECKS
#define BOOST_HEAP_ASSERT BOOST_ASSERT
@@ -348,9 +353,7 @@ private:
size_type last_child_index(size_type index) const
{
- typedef typename container_type::const_iterator container_iterator;
const size_t first_index = first_child_index(index);
-
const size_type last_index = (std::min)(first_index + D - 1, size() - 1);
return last_index;
diff --git a/3party/boost/boost/heap/detail/heap_node.hpp b/3party/boost/boost/heap/detail/heap_node.hpp
index 5888917440..c2eb011da8 100644
--- a/3party/boost/boost/heap/detail/heap_node.hpp
+++ b/3party/boost/boost/heap/detail/heap_node.hpp
@@ -142,6 +142,7 @@ struct node_disposer
{
node_pointer n = static_cast<node_pointer>(base);
n->clear_subtree(alloc_);
+ alloc_.destroy(n);
alloc_.deallocate(n, 1);
}
diff --git a/3party/boost/boost/heap/detail/mutable_heap.hpp b/3party/boost/boost/heap/detail/mutable_heap.hpp
index 533549e0ce..ba2c43c5ed 100644
--- a/3party/boost/boost/heap/detail/mutable_heap.hpp
+++ b/3party/boost/boost/heap/detail/mutable_heap.hpp
@@ -368,20 +368,6 @@ public:
}
/**
- * \b Effects: Merge with priority queue rhs.
- *
- * \b Complexity: N log(N)
- *
- * */
- void merge(priority_queue_mutable_wrapper const & rhs)
- {
- q_.reserve(q_.size() + rhs.q_.size());
-
- for (typename object_list::const_iterator it = rhs.objects.begin(); it != rhs.objects.end(); ++it)
- push(it->first);
- }
-
- /**
* \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue.
*
* \b Complexity: Logarithmic.
diff --git a/3party/boost/boost/heap/fibonacci_heap.hpp b/3party/boost/boost/heap/fibonacci_heap.hpp
index eb68834085..493828f086 100644
--- a/3party/boost/boost/heap/fibonacci_heap.hpp
+++ b/3party/boost/boost/heap/fibonacci_heap.hpp
@@ -21,6 +21,11 @@
#include <boost/heap/detail/stable_heap.hpp>
#include <boost/heap/detail/tree_iterator.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+
#ifndef BOOST_DOXYGEN_INVOKED
#ifdef BOOST_HEAP_SANITYCHECKS
#define BOOST_HEAP_ASSERT BOOST_ASSERT
diff --git a/3party/boost/boost/heap/heap_merge.hpp b/3party/boost/boost/heap/heap_merge.hpp
index eabae3196f..615b492ed5 100644
--- a/3party/boost/boost/heap/heap_merge.hpp
+++ b/3party/boost/boost/heap/heap_merge.hpp
@@ -13,6 +13,11 @@
#include <boost/heap/heap_concepts.hpp>
#include <boost/type_traits/is_same.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+
namespace boost {
namespace heap {
namespace detail {
diff --git a/3party/boost/boost/heap/pairing_heap.hpp b/3party/boost/boost/heap/pairing_heap.hpp
index 2fd740d99f..d42d3af900 100644
--- a/3party/boost/boost/heap/pairing_heap.hpp
+++ b/3party/boost/boost/heap/pairing_heap.hpp
@@ -21,6 +21,11 @@
#include <boost/heap/detail/stable_heap.hpp>
#include <boost/heap/detail/tree_iterator.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+
#ifndef BOOST_DOXYGEN_INVOKED
#ifdef BOOST_HEAP_SANITYCHECKS
#define BOOST_HEAP_ASSERT BOOST_ASSERT
diff --git a/3party/boost/boost/heap/policies.hpp b/3party/boost/boost/heap/policies.hpp
index 60266054da..5a44dafd10 100644
--- a/3party/boost/boost/heap/policies.hpp
+++ b/3party/boost/boost/heap/policies.hpp
@@ -15,6 +15,9 @@
#include <boost/mpl/void.hpp>
#include <boost/concept_check.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
namespace boost {
namespace heap {
diff --git a/3party/boost/boost/heap/priority_queue.hpp b/3party/boost/boost/heap/priority_queue.hpp
index 7f2fa13fb0..45f2151739 100644
--- a/3party/boost/boost/heap/priority_queue.hpp
+++ b/3party/boost/boost/heap/priority_queue.hpp
@@ -19,6 +19,11 @@
#include <boost/heap/detail/heap_comparison.hpp>
#include <boost/heap/detail/stable_heap.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+
namespace boost {
namespace heap {
namespace detail {
diff --git a/3party/boost/boost/heap/skew_heap.hpp b/3party/boost/boost/heap/skew_heap.hpp
index 17c3d1d958..e68e4e46ab 100644
--- a/3party/boost/boost/heap/skew_heap.hpp
+++ b/3party/boost/boost/heap/skew_heap.hpp
@@ -21,6 +21,9 @@
#include <boost/heap/detail/stable_heap.hpp>
#include <boost/heap/detail/tree_iterator.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
#ifndef BOOST_DOXYGEN_INVOKED
#ifdef BOOST_HEAP_SANITYCHECKS
diff --git a/3party/boost/boost/icl/closed_interval.hpp b/3party/boost/boost/icl/closed_interval.hpp
index 238be12ac8..a0278e8250 100644
--- a/3party/boost/boost/icl/closed_interval.hpp
+++ b/3party/boost/boost/icl/closed_interval.hpp
@@ -8,6 +8,7 @@ Copyright (c) 2010-2010: Joachim Faulhaber
#ifndef BOOST_ICL_CLOSED_INTERVAL_HPP_JOFA_100324
#define BOOST_ICL_CLOSED_INTERVAL_HPP_JOFA_100324
+#include <boost/icl/detail/concept_check.hpp>
#include <boost/icl/concept/interval.hpp>
#include <boost/icl/type_traits/value_size.hpp>
#include <boost/icl/type_traits/type_to_string.hpp>
diff --git a/3party/boost/boost/icl/impl_config.hpp b/3party/boost/boost/icl/impl_config.hpp
index d21d132d4d..02782a5b40 100644
--- a/3party/boost/boost/icl/impl_config.hpp
+++ b/3party/boost/boost/icl/impl_config.hpp
@@ -48,10 +48,10 @@ Copyright (c) 2009-2011: Joachim Faulhaber
+-----------------------------------------------------------------------------*/
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
# define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
-#elif defined(__clang__)
-# define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
-#elif (defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
-# define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
+//#elif defined(__clang__)
+//# define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
+//#elif (defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
+//# define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
#endif
#include <boost/move/move.hpp>
diff --git a/3party/boost/boost/icl/interval_base_map.hpp b/3party/boost/boost/icl/interval_base_map.hpp
index 7ecbb4d4ef..4de6962bcc 100644
--- a/3party/boost/boost/icl/interval_base_map.hpp
+++ b/3party/boost/boost/icl/interval_base_map.hpp
@@ -215,13 +215,6 @@ public:
BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
}
- /** Copy assignment operator */
- interval_base_map& operator = (const interval_base_map& src)
- {
- this->_map = src._map;
- return *this;
- }
-
# ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
//==========================================================================
//= Move semantics
@@ -237,13 +230,22 @@ public:
}
/** Move assignment operator */
- interval_base_map& operator = (interval_base_map&& src)
- {
+ interval_base_map& operator = (interval_base_map src)
+ { //call by value sice 'src' is a "sink value"
this->_map = boost::move(src._map);
return *this;
}
//==========================================================================
+# else
+
+ /** Copy assignment operator */
+ interval_base_map& operator = (const interval_base_map& src)
+ {
+ this->_map = src._map;
+ return *this;
+ }
+
# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
/** swap the content of containers */
@@ -845,7 +847,7 @@ inline void interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,S
{
// [lead_gap--- . . .
// [-- it_ ...
- iterator prior_ = prior(it_);
+ iterator prior_ = it_==this->_map.begin()? it_ : prior(it_);
iterator inserted_ = this->template gap_insert<Combiner>(prior_, lead_gap, co_val);
that()->handle_inserted(prior_, inserted_);
}
@@ -957,7 +959,7 @@ inline typename interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combi
{
// Detect the first and the end iterator of the collision sequence
iterator first_ = this->_map.lower_bound(inter_val),
- last_ = insertion.first;
+ last_ = prior(this->_map.upper_bound(inter_val));
//assert(end_ == this->_map.upper_bound(inter_val));
iterator it_ = first_;
interval_type rest_interval = inter_val;
@@ -1096,9 +1098,7 @@ inline void interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,S
iterator& it_, const iterator& last_)
{
iterator end_ = boost::next(last_);
- iterator prior_ = it_, inserted_;
- if(prior_ != this->_map.end())
- --prior_;
+ iterator prior_ = cyclic_prior(*this,it_), inserted_;
interval_type rest_interval = inter_val, left_gap, cur_itv;
interval_type last_interval = last_ ->first;
@@ -1152,7 +1152,7 @@ inline typename interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combi
{
// Detect the first and the end iterator of the collision sequence
iterator first_ = this->_map.lower_bound(inter_val),
- last_ = insertion.first;
+ last_ = prior(this->_map.upper_bound(inter_val));
//assert((++last_) == this->_map.upper_bound(inter_val));
iterator it_ = first_;
insert_main(inter_val, co_val, it_, last_);
diff --git a/3party/boost/boost/icl/interval_base_set.hpp b/3party/boost/boost/icl/interval_base_set.hpp
index 722db64d1f..045b23c825 100644
--- a/3party/boost/boost/icl/interval_base_set.hpp
+++ b/3party/boost/boost/icl/interval_base_set.hpp
@@ -168,13 +168,6 @@ public:
BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
}
- /** Assignment operator */
- interval_base_set& operator = (const interval_base_set& src)
- {
- this->_set = src._set;
- return *this;
- }
-
# ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
//==========================================================================
//= Move semantics
@@ -188,13 +181,22 @@ public:
}
/** Move assignment operator */
- interval_base_set& operator = (interval_base_set&& src)
- {
+ interval_base_set& operator = (interval_base_set src)
+ { //call by value sice 'src' is a "sink value"
this->_set = boost::move(src._set);
return *this;
}
//==========================================================================
+# else
+
+ /** Copy assignment operator */
+ interval_base_set& operator = (const interval_base_set& src)
+ {
+ this->_set = src._set;
+ return *this;
+ }
+
# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
/** swap the content of containers */
@@ -497,6 +499,7 @@ inline typename interval_base_set<SubType,DomainT,Compare,Interval,Alloc>::itera
interval_base_set<SubType,DomainT,Compare,Interval,Alloc>
::_add(const segment_type& addend)
{
+ typedef typename interval_base_set<SubType,DomainT,Compare,Interval,Alloc>::iterator iterator;
if(icl::is_empty(addend))
return this->_set.end();
@@ -505,7 +508,10 @@ inline typename interval_base_set<SubType,DomainT,Compare,Interval,Alloc>::itera
if(insertion.second)
return that()->handle_inserted(insertion.first);
else
- return that()->add_over(addend, insertion.first);
+ {
+ iterator last_ = prior(this->_set.upper_bound(addend));
+ return that()->add_over(addend, last_);
+ }
}
template <class SubType, class DomainT, ICL_COMPARE Compare, ICL_INTERVAL(ICL_COMPARE) Interval, ICL_ALLOC Alloc>
@@ -513,7 +519,8 @@ inline typename interval_base_set<SubType,DomainT,Compare,Interval,Alloc>::itera
interval_base_set<SubType,DomainT,Compare,Interval,Alloc>
::_add(iterator prior_, const segment_type& addend)
{
- if(icl::is_empty(addend))
+ typedef typename interval_base_set<SubType,DomainT,Compare,Interval,Alloc>::iterator iterator;
+ if(icl::is_empty(addend))
return prior_;
iterator insertion = this->_set.insert(prior_, addend);
@@ -521,7 +528,10 @@ inline typename interval_base_set<SubType,DomainT,Compare,Interval,Alloc>::itera
if(*insertion == addend)
return that()->handle_inserted(insertion);
else
- return that()->add_over(addend);
+ {
+ iterator last_ = prior(this->_set.upper_bound(addend));
+ return that()->add_over(addend, last_);
+ }
}
//==============================================================================
diff --git a/3party/boost/boost/icl/interval_map.hpp b/3party/boost/boost/icl/interval_map.hpp
index 8b47044d8d..ffddc3ed36 100644
--- a/3party/boost/boost/icl/interval_map.hpp
+++ b/3party/boost/boost/icl/interval_map.hpp
@@ -93,20 +93,6 @@ public:
{ this->add(value_pair); }
- /// Assignment operator
- interval_map& operator = (const interval_map& src)
- {
- base_type::operator=(src);
- return *this;
- }
-
- /// Assignment operator for base type
- template<class SubType>
- interval_map& operator =
- (const interval_base_map<SubType,DomainT,CodomainT,
- Traits,Compare,Combine,Section,Interval,Alloc>& src)
- { this->assign(src); return *this; }
-
/// Assignment from a base interval_map.
template<class SubType>
void assign(const interval_base_map<SubType,DomainT,CodomainT,
@@ -120,6 +106,16 @@ public:
prior_ = this->add(prior_, *it_);
}
+ /// Assignment operator for base type
+ template<class SubType>
+ interval_map& operator =
+ (const interval_base_map<SubType,DomainT,CodomainT,
+ Traits,Compare,Combine,Section,Interval,Alloc>& src)
+ {
+ this->assign(src);
+ return *this;
+ }
+
# ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
//==========================================================================
//= Move semantics
@@ -131,13 +127,22 @@ public:
{}
/// Move assignment operator
- interval_map& operator = (interval_map&& src)
+ interval_map& operator = (interval_map src)
{
base_type::operator=(boost::move(src));
return *this;
}
//==========================================================================
+# else
+
+ /// Assignment operator
+ interval_map& operator = (const interval_map& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+
# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
private:
diff --git a/3party/boost/boost/icl/interval_set.hpp b/3party/boost/boost/icl/interval_set.hpp
index 7dce8a4807..22f97a4c27 100644
--- a/3party/boost/boost/icl/interval_set.hpp
+++ b/3party/boost/boost/icl/interval_set.hpp
@@ -115,23 +115,6 @@ public:
this->add(itv);
}
- /// Assignment operator
- interval_set& operator = (const interval_set& src)
- {
- base_type::operator=(src);
- return *this;
- }
-
- /// Assignment operator for base type
- template<class SubType>
- interval_set& operator =
- (const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
- {
- this->assign(src);
- return *this;
- }
-
-
/// Assignment from a base interval_set.
template<class SubType>
void assign(const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
@@ -144,6 +127,15 @@ public:
prior_ = this->add(prior_, *it_);
}
+ /// Assignment operator for base type
+ template<class SubType>
+ interval_set& operator =
+ (const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
+ {
+ this->assign(src);
+ return *this;
+ }
+
# ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
//==========================================================================
//= Move semantics
@@ -155,12 +147,21 @@ public:
{}
/// Move assignment operator
- interval_set& operator = (interval_set&& src)
+ interval_set& operator = (interval_set src)
{
base_type::operator=(boost::move(src));
return *this;
}
+
//==========================================================================
+# else
+ /// Assignment operator
+ interval_set& operator = (const interval_set& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+
# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
private:
diff --git a/3party/boost/boost/icl/map.hpp b/3party/boost/boost/icl/map.hpp
index 0081dcfffa..af021da735 100644
--- a/3party/boost/boost/icl/map.hpp
+++ b/3party/boost/boost/icl/map.hpp
@@ -192,12 +192,6 @@ public:
insert(key_value_pair);
}
- map& operator = (const map& src)
- {
- base_type::operator=(src);
- return *this;
- }
-
# ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
//==========================================================================
//= Move semantics
@@ -212,12 +206,20 @@ public:
BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
}
- map& operator = (map&& src)
+ map& operator = (map src)
{
- base_type::operator=(src);
+ base_type::operator=(boost::move(src));
return *this;
}
//==========================================================================
+# else
+
+ map& operator = (const map& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+
# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
void swap(map& src) { base_type::swap(src); }
diff --git a/3party/boost/boost/icl/open_interval.hpp b/3party/boost/boost/icl/open_interval.hpp
index 0d729a510c..95e464ce2c 100644
--- a/3party/boost/boost/icl/open_interval.hpp
+++ b/3party/boost/boost/icl/open_interval.hpp
@@ -10,6 +10,7 @@ Copyright (c) 2010-2010: Joachim Faulhaber
#include <functional>
#include <boost/concept/assert.hpp>
+#include <boost/icl/detail/concept_check.hpp>
#include <boost/icl/concept/interval.hpp>
#include <boost/icl/type_traits/value_size.hpp>
#include <boost/icl/type_traits/type_to_string.hpp>
diff --git a/3party/boost/boost/icl/separate_interval_set.hpp b/3party/boost/boost/icl/separate_interval_set.hpp
index 4d06a29412..14bb7f016b 100644
--- a/3party/boost/boost/icl/separate_interval_set.hpp
+++ b/3party/boost/boost/icl/separate_interval_set.hpp
@@ -106,11 +106,12 @@ public:
/// Constructor for a single interval
explicit separate_interval_set(const interval_type& itv): base_type() { this->add(itv); }
- /// Assignment operator
- separate_interval_set& operator = (const separate_interval_set& src)
- {
- base_type::operator=(src);
- return *this;
+ /// Assignment from a base interval_set.
+ template<class SubType>
+ void assign(const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
+ {
+ this->clear();
+ this->_set.insert(src.begin(), src.end());
}
/// Assignment operator for base type
@@ -122,14 +123,6 @@ public:
return *this;
}
- /// Assignment from a base interval_set.
- template<class SubType>
- void assign(const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
- {
- this->clear();
- this->_set.insert(src.begin(), src.end());
- }
-
# ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
//==========================================================================
//= Move semantics
@@ -141,12 +134,21 @@ public:
{}
/// Move assignment operator
- separate_interval_set& operator = (separate_interval_set&& src)
+ separate_interval_set& operator = (separate_interval_set src)
{
base_type::operator=(boost::move(src));
return *this;
}
//==========================================================================
+# else
+
+ /// Assignment operator
+ separate_interval_set& operator = (const separate_interval_set& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+
# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
private:
diff --git a/3party/boost/boost/icl/split_interval_map.hpp b/3party/boost/boost/icl/split_interval_map.hpp
index 487b0d22b4..aae2e8ae3b 100644
--- a/3party/boost/boost/icl/split_interval_map.hpp
+++ b/3party/boost/boost/icl/split_interval_map.hpp
@@ -78,20 +78,6 @@ public:
explicit split_interval_map(const value_type& value_pair): base_type()
{ this->add(value_pair); }
- /// Assignment operator
- split_interval_map& operator = (const split_interval_map& src)
- {
- base_type::operator=(src);
- return *this;
- }
-
- /// Assignment operator for base type
- template<class SubType>
- split_interval_map& operator =
- (const interval_base_map<SubType,DomainT,CodomainT,
- Traits,Compare,Combine,Section,Interval,Alloc>& src)
- { this->assign(src); return *this; }
-
/// Assignment from a base interval_map.
template<class SubType>
void assign(const interval_base_map<SubType,DomainT,CodomainT,
@@ -101,6 +87,16 @@ public:
this->_map.insert(src.begin(), src.end());
}
+ /// Assignment operator for base type
+ template<class SubType>
+ split_interval_map& operator =
+ (const interval_base_map<SubType,DomainT,CodomainT,
+ Traits,Compare,Combine,Section,Interval,Alloc>& src)
+ {
+ this->assign(src);
+ return *this;
+ }
+
# ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
//==========================================================================
//= Move semantics
@@ -112,13 +108,22 @@ public:
{}
/// Move assignment operator
- split_interval_map& operator = (split_interval_map&& src)
+ split_interval_map& operator = (split_interval_map src)
{
base_type::operator=(boost::move(src));
return *this;
}
//==========================================================================
+# else
+
+ /// Assignment operator
+ split_interval_map& operator = (const split_interval_map& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+
# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
private:
diff --git a/3party/boost/boost/icl/split_interval_set.hpp b/3party/boost/boost/icl/split_interval_set.hpp
index 5b6235f656..ca0d0222e7 100644
--- a/3party/boost/boost/icl/split_interval_set.hpp
+++ b/3party/boost/boost/icl/split_interval_set.hpp
@@ -104,19 +104,6 @@ public:
/// Constructor for a single interval
explicit split_interval_set(const domain_type& itv): base_type() { this->add(itv); }
- /// Assignment operator
- split_interval_set& operator = (const split_interval_set& src)
- {
- base_type::operator=(src);
- return *this;
- }
-
- /// Assignment operator for base type
- template<class SubType>
- split_interval_set& operator =
- (const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
- { this->assign(src); return *this; }
-
/// Assignment from a base interval_set.
template<class SubType>
void assign(const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
@@ -125,6 +112,15 @@ public:
this->_set.insert(src.begin(), src.end());
}
+ /// Assignment operator for base type
+ template<class SubType>
+ split_interval_set& operator =
+ (const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
+ {
+ this->assign(src);
+ return *this;
+ }
+
# ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
//==========================================================================
//= Move semantics
@@ -136,14 +132,22 @@ public:
{}
/// Move assignment operator
- split_interval_set& operator = (split_interval_set&& src)
+ split_interval_set& operator = (split_interval_set src)
{
base_type::operator=(boost::move(src));
return *this;
}
//==========================================================================
-# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
+# else
+
+ /// Assignment operator
+ split_interval_set& operator = (const split_interval_set& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
private:
// Private functions that shall be accessible by the baseclass:
diff --git a/3party/boost/boost/icl/type_traits/identity_element.hpp b/3party/boost/boost/icl/type_traits/identity_element.hpp
index 13bb1f6146..f0cc2ae580 100644
--- a/3party/boost/boost/icl/type_traits/identity_element.hpp
+++ b/3party/boost/boost/icl/type_traits/identity_element.hpp
@@ -20,8 +20,9 @@ namespace boost{ namespace icl
template <class Type>
inline Type identity_element<Type>::value()
- {
- return Type();
+ {
+ static Type _value;
+ return _value;
}
template<>
diff --git a/3party/boost/boost/implicit_cast.hpp b/3party/boost/boost/implicit_cast.hpp
index 5b1cd92b9b..d82db7628e 100644
--- a/3party/boost/boost/implicit_cast.hpp
+++ b/3party/boost/boost/implicit_cast.hpp
@@ -5,17 +5,24 @@
#ifndef IMPLICIT_CAST_DWA200356_HPP
# define IMPLICIT_CAST_DWA200356_HPP
-# include <boost/mpl/identity.hpp>
-
namespace boost {
+namespace detail {
+
+template<class T> struct icast_identity
+{
+ typedef T type;
+};
+
+} // namespace detail
+
// implementation originally suggested by C. Green in
// http://lists.boost.org/MailArchives/boost/msg00886.php
// The use of identity creates a non-deduced form, so that the
// explicit template argument must be supplied
template <typename T>
-inline T implicit_cast (typename mpl::identity<T>::type x) {
+inline T implicit_cast (typename boost::detail::icast_identity<T>::type x) {
return x;
}
diff --git a/3party/boost/boost/integer/integer_log2.hpp b/3party/boost/boost/integer/integer_log2.hpp
new file mode 100644
index 0000000000..8b34ce7440
--- /dev/null
+++ b/3party/boost/boost/integer/integer_log2.hpp
@@ -0,0 +1,112 @@
+// -----------------------------------------------------------
+// integer_log2.hpp
+//
+// Gives the integer part of the logarithm, in base 2, of a
+// given number. Behavior is undefined if the argument is <= 0.
+//
+// Copyright (c) 2003-2004, 2008 Gennaro Prota
+//
+// 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_INTEGER_INTEGER_LOG2_HPP
+#define BOOST_INTEGER_INTEGER_LOG2_HPP
+
+#include <assert.h>
+#ifdef __BORLANDC__
+#include <climits>
+#endif
+#include <boost/limits.hpp>
+#include <boost/config.hpp>
+
+
+namespace boost {
+ namespace detail {
+
+ template <typename T>
+ int integer_log2_impl(T x, int n) {
+
+ int result = 0;
+
+ while (x != 1) {
+
+ const T t = static_cast<T>(x >> n);
+ if (t) {
+ result += n;
+ x = t;
+ }
+ n /= 2;
+
+ }
+
+ return result;
+ }
+
+
+
+ // helper to find the maximum power of two
+ // less than p (more involved than necessary,
+ // to avoid PTS)
+ //
+ template <int p, int n>
+ struct max_pow2_less {
+
+ enum { c = 2*n < p };
+
+ BOOST_STATIC_CONSTANT(int, value =
+ c ? (max_pow2_less< c*p, 2*c*n>::value) : n);
+
+ };
+
+ template <>
+ struct max_pow2_less<0, 0> {
+
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+
+ // this template is here just for Borland :(
+ // we could simply rely on numeric_limits but sometimes
+ // Borland tries to use numeric_limits<const T>, because
+ // of its usual const-related problems in argument deduction
+ // - gps
+ template <typename T>
+ struct width {
+
+#ifdef __BORLANDC__
+ BOOST_STATIC_CONSTANT(int, value = sizeof(T) * CHAR_BIT);
+#else
+ BOOST_STATIC_CONSTANT(int, value = (std::numeric_limits<T>::digits));
+#endif
+
+ };
+
+ } // detail
+
+
+ // ---------
+ // integer_log2
+ // ---------------
+ //
+ template <typename T>
+ int integer_log2(T x) {
+
+ assert(x > 0);
+
+ const int n = detail::max_pow2_less<
+ detail::width<T> :: value, 4
+ > :: value;
+
+ return detail::integer_log2_impl(x, n);
+
+ }
+
+
+
+}
+
+
+
+#endif // include guard
diff --git a/3party/boost/boost/integer_traits.hpp b/3party/boost/boost/integer_traits.hpp
index f6272a48c8..94eb00d31e 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 83381 2013-03-09 22:55:05Z eric_niebler $
+ * $Id$
*
* Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers
*/
@@ -119,11 +119,6 @@ class integer_traits<wchar_t>
// - Mac OS X with native library
// - gcc on FreeBSD, OpenBSD and NetBSD
public detail::integer_traits_base<wchar_t, INT_MIN, INT_MAX>
-#elif defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 2) && !defined(__SGI_STL_PORT)
- // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as unsigned int.
- // - gcc 2.95.x on HP-UX
- // (also, std::numeric_limits<wchar_t> appears to return the wrong values).
- public detail::integer_traits_base<wchar_t, 0, UINT_MAX>
#else
#error No WCHAR_MIN and WCHAR_MAX present, please adjust integer_traits<> for your compiler.
#endif
diff --git a/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp b/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp
index 8a2d61ecc8..ca54802486 100644
--- a/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp
+++ b/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_ADAPTIVE_POOL_HPP
#define BOOST_INTERPROCESS_ADAPTIVE_POOL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/allocators/allocator.hpp b/3party/boost/boost/interprocess/allocators/allocator.hpp
index 497cbd4478..5901a0fe98 100644
--- a/3party/boost/boost/interprocess/allocators/allocator.hpp
+++ b/3party/boost/boost/interprocess/allocators/allocator.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_ALLOCATOR_HPP
#define BOOST_INTERPROCESS_ALLOCATOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp b/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp
index 2a2d7b8a4b..c616673898 100644
--- a/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp
+++ b/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CACHED_ADAPTIVE_POOL_HPP
#define BOOST_INTERPROCESS_CACHED_ADAPTIVE_POOL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp b/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp
index ed1bee2f14..2b3903ecfb 100644
--- a/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp
+++ b/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CACHED_NODE_ALLOCATOR_HPP
#define BOOST_INTERPROCESS_CACHED_NODE_ALLOCATOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
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 a3afa8ee4b..dd697902c4 100644
--- a/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp
+++ b/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_ADAPTIVE_NODE_POOL_HPP
#define BOOST_INTERPROCESS_DETAIL_ADAPTIVE_NODE_POOL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp b/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp
index e67d3217b5..cee9cdafc8 100644
--- a/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp
+++ b/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_NODE_POOL_HPP
#define BOOST_INTERPROCESS_DETAIL_NODE_POOL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -19,8 +19,6 @@
#include <boost/interprocess/detail/workaround.hpp>
#include <boost/intrusive/slist.hpp>
-#include <boost/math/common_factor_ct.hpp>
-
#include <boost/interprocess/detail/utilities.hpp>
#include <boost/interprocess/allocators/detail/allocator_common.hpp>
#include <boost/container/detail/node_pool_impl.hpp>
diff --git a/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp b/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp
index e9fec385e3..e7115ece4e 100644
--- a/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp
+++ b/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_NODE_TOOLS_HPP
#define BOOST_INTERPROCESS_DETAIL_NODE_TOOLS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/allocators/node_allocator.hpp b/3party/boost/boost/interprocess/allocators/node_allocator.hpp
index 3b2ec2901a..df382b48af 100644
--- a/3party/boost/boost/interprocess/allocators/node_allocator.hpp
+++ b/3party/boost/boost/interprocess/allocators/node_allocator.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NODE_ALLOCATOR_HPP
#define BOOST_INTERPROCESS_NODE_ALLOCATOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -232,7 +232,7 @@ class node_allocator_v1
//!This node allocator shares a segregated storage between all instances
//!of node_allocator with equal sizeof(T) placed in the same segment
//!group. NodesPerBlock is the number of nodes allocated at once when the allocator
-//!needs runs out of nodes
+//!runs out of nodes
template < class T
, class SegmentManager
, std::size_t NodesPerBlock
diff --git a/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp b/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp
index fd7ad7c7d8..b9d03e6179 100644
--- a/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp
+++ b/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_PRIVATE_ADAPTIVE_POOL_HPP
#define BOOST_INTERPROCESS_PRIVATE_ADAPTIVE_POOL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp b/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp
index 93a4750b8b..4be2c2042c 100644
--- a/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp
+++ b/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_PRIVATE_NODE_ALLOCATOR_HPP
#define BOOST_INTERPROCESS_PRIVATE_NODE_ALLOCATOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/allocation_type.hpp b/3party/boost/boost/interprocess/containers/allocation_type.hpp
index eea431b0d9..c871d57512 100644
--- a/3party/boost/boost/interprocess/containers/allocation_type.hpp
+++ b/3party/boost/boost/interprocess/containers/allocation_type.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_ALLOCATION_TYPE_HPP
#define BOOST_INTERPROCESS_CONTAINERS_ALLOCATION_TYPE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/containers_fwd.hpp b/3party/boost/boost/interprocess/containers/containers_fwd.hpp
index 28cd0f126d..2f1dfd510d 100644
--- a/3party/boost/boost/interprocess/containers/containers_fwd.hpp
+++ b/3party/boost/boost/interprocess/containers/containers_fwd.hpp
@@ -13,7 +13,7 @@
/// @cond
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/deque.hpp b/3party/boost/boost/interprocess/containers/deque.hpp
index 66122e2479..a40db80a19 100644
--- a/3party/boost/boost/interprocess/containers/deque.hpp
+++ b/3party/boost/boost/interprocess/containers/deque.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_DEQUE_HPP
#define BOOST_INTERPROCESS_CONTAINERS_DEQUE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/flat_map.hpp b/3party/boost/boost/interprocess/containers/flat_map.hpp
index 38b04ac9ac..744d6e972e 100644
--- a/3party/boost/boost/interprocess/containers/flat_map.hpp
+++ b/3party/boost/boost/interprocess/containers/flat_map.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_FLAT_MAP_HPP
#define BOOST_INTERPROCESS_CONTAINERS_FLAT_MAP_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/flat_set.hpp b/3party/boost/boost/interprocess/containers/flat_set.hpp
index 45b42fd1ee..51c49925c0 100644
--- a/3party/boost/boost/interprocess/containers/flat_set.hpp
+++ b/3party/boost/boost/interprocess/containers/flat_set.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_FLAT_SET_HPP
#define BOOST_INTERPROCESS_CONTAINERS_FLAT_SET_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/list.hpp b/3party/boost/boost/interprocess/containers/list.hpp
index 50f0ff0d04..0e855efaaf 100644
--- a/3party/boost/boost/interprocess/containers/list.hpp
+++ b/3party/boost/boost/interprocess/containers/list.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_LIST_HPP
#define BOOST_INTERPROCESS_CONTAINERS_LIST_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/map.hpp b/3party/boost/boost/interprocess/containers/map.hpp
index ca00b2049c..4efed89c10 100644
--- a/3party/boost/boost/interprocess/containers/map.hpp
+++ b/3party/boost/boost/interprocess/containers/map.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_MAP_HPP
#define BOOST_INTERPROCESS_CONTAINERS_MAP_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/pair.hpp b/3party/boost/boost/interprocess/containers/pair.hpp
index 65526ab934..2ca631db4a 100644
--- a/3party/boost/boost/interprocess/containers/pair.hpp
+++ b/3party/boost/boost/interprocess/containers/pair.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_PAIR_HPP
#define BOOST_INTERPROCESS_CONTAINERS_PAIR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/set.hpp b/3party/boost/boost/interprocess/containers/set.hpp
index 6979204530..09ea6c116d 100644
--- a/3party/boost/boost/interprocess/containers/set.hpp
+++ b/3party/boost/boost/interprocess/containers/set.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_SET_HPP
#define BOOST_INTERPROCESS_CONTAINERS_SET_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/slist.hpp b/3party/boost/boost/interprocess/containers/slist.hpp
index b511d060ff..c3e1744ea3 100644
--- a/3party/boost/boost/interprocess/containers/slist.hpp
+++ b/3party/boost/boost/interprocess/containers/slist.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_SLIST_HPP
#define BOOST_INTERPROCESS_CONTAINERS_SLIST_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/stable_vector.hpp b/3party/boost/boost/interprocess/containers/stable_vector.hpp
index 4a59b81edc..530056dd6e 100644
--- a/3party/boost/boost/interprocess/containers/stable_vector.hpp
+++ b/3party/boost/boost/interprocess/containers/stable_vector.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_STABLE_VECTOR_HPP
#define BOOST_INTERPROCESS_CONTAINERS_STABLE_VECTOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/string.hpp b/3party/boost/boost/interprocess/containers/string.hpp
index e7af2fa36a..805bfe4f14 100644
--- a/3party/boost/boost/interprocess/containers/string.hpp
+++ b/3party/boost/boost/interprocess/containers/string.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_STRING_HPP
#define BOOST_INTERPROCESS_CONTAINERS_STRING_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/vector.hpp b/3party/boost/boost/interprocess/containers/vector.hpp
index 3f10e01534..bfae4f833f 100644
--- a/3party/boost/boost/interprocess/containers/vector.hpp
+++ b/3party/boost/boost/interprocess/containers/vector.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_VECTOR_HPP
#define BOOST_INTERPROCESS_CONTAINERS_VECTOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/containers/version_type.hpp b/3party/boost/boost/interprocess/containers/version_type.hpp
index 4516e8c9b5..92ef49f31d 100644
--- a/3party/boost/boost/interprocess/containers/version_type.hpp
+++ b/3party/boost/boost/interprocess/containers/version_type.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONTAINERS_VERSION_TYPE_HPP
#define BOOST_INTERPROCESS_CONTAINERS_VERSION_TYPE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/atomic.hpp b/3party/boost/boost/interprocess/detail/atomic.hpp
index 08481a4308..11992d1d15 100644
--- a/3party/boost/boost/interprocess/detail/atomic.hpp
+++ b/3party/boost/boost/interprocess/detail/atomic.hpp
@@ -49,7 +49,7 @@ inline boost::uint32_t atomic_cas32
} //namespace interprocess{
} //namespace boost{
-#if (defined BOOST_INTERPROCESS_WINDOWS)
+#if defined (BOOST_INTERPROCESS_WINDOWS)
#include <boost/interprocess/detail/win32_api.hpp>
@@ -93,7 +93,7 @@ inline boost::uint32_t atomic_cas32
} //namespace interprocess{
} //namespace boost{
-#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(_CRAYC)
namespace boost {
namespace interprocess {
@@ -213,7 +213,7 @@ inline boost::uint32_t atomic_cas32
"bne- 1b\n\t"
"2:"
: "=&r"(prev)
- : "b" (mem), "r"(cmp), "r" (with)
+ : "b" (mem), "r" (with), "r" (cmp)
: "cc", "memory");
return prev;
}
diff --git a/3party/boost/boost/interprocess/detail/file_locking_helpers.hpp b/3party/boost/boost/interprocess/detail/file_locking_helpers.hpp
index 2b96e2b6d5..6a7ce8ef3b 100644
--- a/3party/boost/boost/interprocess/detail/file_locking_helpers.hpp
+++ b/3party/boost/boost/interprocess/detail/file_locking_helpers.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_FILE_LOCKING_HELPERS_HPP
#define BOOST_INTERPROCESS_FILE_LOCKING_HELPERS_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -26,7 +26,7 @@
#include <cstddef>
#include <boost/interprocess/detail/os_file_functions.hpp>
-#include <boost/interprocess/detail/tmp_dir_helpers.hpp>
+#include <boost/interprocess/detail/shared_dir_helpers.hpp>
#if defined(BOOST_INTERPROCESS_WINDOWS)
@@ -287,7 +287,7 @@ inline bool compare_file_serial(int fd, const locking_file_serial_id &id)
id.st_ino == info.st_ino;
}
-#endif
+#endif
} //namespace ipcdetail{
} //namespace interprocess{
diff --git a/3party/boost/boost/interprocess/detail/file_wrapper.hpp b/3party/boost/boost/interprocess/detail/file_wrapper.hpp
index e139df26a9..06031a6dea 100644
--- a/3party/boost/boost/interprocess/detail/file_wrapper.hpp
+++ b/3party/boost/boost/interprocess/detail/file_wrapper.hpp
@@ -167,7 +167,8 @@ inline bool file_wrapper::priv_open_or_create
//Check for error
if(m_handle == invalid_file()){
- throw interprocess_exception(error_info(system_error_code()));
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
}
m_mode = mode;
diff --git a/3party/boost/boost/interprocess/detail/in_place_interface.hpp b/3party/boost/boost/interprocess/detail/in_place_interface.hpp
index 7c0966c103..1315a11eed 100644
--- a/3party/boost/boost/interprocess/detail/in_place_interface.hpp
+++ b/3party/boost/boost/interprocess/detail/in_place_interface.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_IN_PLACE_INTERFACE_HPP
#define BOOST_INTERPROCESS_IN_PLACE_INTERFACE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp b/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp
index 9f41ba63f8..a99934893d 100644
--- a/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp
+++ b/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_INTERMODULE_SINGLETON_HPP
#define BOOST_INTERPROCESS_INTERMODULE_SINGLETON_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -20,8 +20,9 @@
#ifdef BOOST_INTERPROCESS_WINDOWS
#include <boost/interprocess/detail/windows_intermodule_singleton.hpp>
+#else
+ #include <boost/interprocess/detail/portable_intermodule_singleton.hpp>
#endif
-#include <boost/interprocess/detail/portable_intermodule_singleton.hpp>
namespace boost{
namespace interprocess{
@@ -30,7 +31,7 @@ namespace ipcdetail{
//Now this class is a singleton, initializing the singleton in
//the first get() function call if LazyInit is false. If true
//then the singleton will be initialized when loading the module.
-template<typename C, bool LazyInit = true, bool Phoenix = true>
+template<typename C, bool LazyInit = true, bool Phoenix = false>
class intermodule_singleton
#ifdef BOOST_INTERPROCESS_WINDOWS
: public windows_intermodule_singleton<C, LazyInit, Phoenix>
diff --git a/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp b/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp
index d03c566527..10c9eceabb 100644
--- a/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp
+++ b/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_INTERMODULE_SINGLETON_COMMON_HPP
#define BOOST_INTERPROCESS_INTERMODULE_SINGLETON_COMMON_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -23,6 +23,7 @@
#include <boost/interprocess/exceptions.hpp>
#include <boost/type_traits/type_with_alignment.hpp>
#include <boost/interprocess/detail/mpl.hpp>
+#include <boost/interprocess/sync/spin/wait.hpp>
#include <boost/assert.hpp>
#include <cstddef>
#include <cstdio>
@@ -122,7 +123,8 @@ class intermodule_singleton_common
//Now try to create the singleton in global map.
//This function solves concurrency issues
//between threads of several modules
- void *tmp = constructor(get_map());
+ ThreadSafeGlobalMap *const pmap = get_map_ptr();
+ void *tmp = constructor(*pmap);
//Increment the module reference count that reflects how many
//singletons this module holds, so that we can safely destroy
//module global map object when no singleton is left
@@ -145,6 +147,7 @@ class intermodule_singleton_common
//If previous state was initializing, this means that another winner thread is
//trying to initialize the singleton. Just wait until completes its work.
else if(previous_module_singleton_initialized == Initializing){
+ spin_wait swait;
while(1){
previous_module_singleton_initialized = atomic_read32(&this_module_singleton_initialized);
if(previous_module_singleton_initialized >= Initialized){
@@ -152,7 +155,7 @@ class intermodule_singleton_common
break;
}
else if(previous_module_singleton_initialized == Initializing){
- thread_yield();
+ swait.yield();
}
else{
//This can't be happening!
@@ -179,7 +182,8 @@ class intermodule_singleton_common
//Note: this destructor might provoke a Phoenix singleton
//resurrection. This means that this_module_singleton_count
//might change after this call.
- destructor(ptr, get_map());
+ ThreadSafeGlobalMap * const pmap = get_map_ptr();
+ destructor(ptr, *pmap);
ptr = 0;
//Memory barrier to make sure pointer is nulled.
@@ -198,14 +202,15 @@ class intermodule_singleton_common
}
private:
- static ThreadSafeGlobalMap &get_map()
+ static ThreadSafeGlobalMap *get_map_ptr()
{
- return *static_cast<ThreadSafeGlobalMap *>(static_cast<void *>(&mem_holder.map_mem[0]));
+ return static_cast<ThreadSafeGlobalMap *>(static_cast<void*>(mem_holder.map_mem));
}
static void initialize_global_map_handle()
{
//Obtain unique map name and size
+ spin_wait swait;
while(1){
//Try to pass map state to initializing
::boost::uint32_t tmp = atomic_cas32(&this_module_map_initialized, Initializing, Uninitialized);
@@ -218,7 +223,7 @@ class intermodule_singleton_common
}
//If some other thread is doing the work wait
else if(tmp == Initializing){
- thread_yield();
+ swait.yield();
}
else{ //(tmp == Uninitialized)
//If not initialized try it again?
@@ -226,16 +231,17 @@ class intermodule_singleton_common
//Remove old global map from the system
intermodule_singleton_helpers::thread_safe_global_map_dependant<ThreadSafeGlobalMap>::remove_old_gmem();
//in-place construction of the global map class
+ ThreadSafeGlobalMap * const pmap = get_map_ptr();
intermodule_singleton_helpers::thread_safe_global_map_dependant
- <ThreadSafeGlobalMap>::construct_map(static_cast<void*>(&get_map()));
+ <ThreadSafeGlobalMap>::construct_map(static_cast<void*>(pmap));
//Use global map's internal lock to initialize the lock file
//that will mark this gmem as "in use".
typename intermodule_singleton_helpers::thread_safe_global_map_dependant<ThreadSafeGlobalMap>::
- lock_file_logic f(get_map());
+ lock_file_logic f(*pmap);
//If function failed (maybe a competing process has erased the shared
//memory between creation and file locking), retry with a new instance.
if(f.retry()){
- get_map().~ThreadSafeGlobalMap();
+ pmap->~ThreadSafeGlobalMap();
atomic_write32(&this_module_map_initialized, Destroyed);
}
else{
@@ -258,9 +264,10 @@ class intermodule_singleton_common
//This module is being unloaded, so destroy
//the global map object of this module
//and unlink the global map if it's the last
+ ThreadSafeGlobalMap * const pmap = get_map_ptr();
typename intermodule_singleton_helpers::thread_safe_global_map_dependant<ThreadSafeGlobalMap>::
- unlink_map_logic f(get_map());
- (get_map()).~ThreadSafeGlobalMap();
+ unlink_map_logic f(*pmap);
+ pmap->~ThreadSafeGlobalMap();
atomic_write32(&this_module_map_initialized, Destroyed);
//Do some cleanup for other processes old gmem instances
intermodule_singleton_helpers::thread_safe_global_map_dependant<ThreadSafeGlobalMap>::remove_old_gmem();
@@ -276,10 +283,10 @@ class intermodule_singleton_common
static volatile boost::uint32_t this_module_map_initialized;
//Raw memory to construct the global map manager
- static struct mem_holder_t
+ static union mem_holder_t
{
+ unsigned char map_mem [sizeof(ThreadSafeGlobalMap)];
::boost::detail::max_align aligner;
- char map_mem [sizeof(ThreadSafeGlobalMap)];
} mem_holder;
};
@@ -309,7 +316,7 @@ struct ref_count_ptr
//Now this class is a singleton, initializing the singleton in
-//the first get() function call if LazyInit is false. If true
+//the first get() function call if LazyInit is true. If false
//then the singleton will be initialized when loading the module.
template<typename C, bool LazyInit, bool Phoenix, class ThreadSafeGlobalMap>
class intermodule_singleton_impl
@@ -357,9 +364,9 @@ class intermodule_singleton_impl
~lifetime_type_lazy()
{
- if(!Phoenix){
- atexit_work();
- }
+ //if(!Phoenix){
+ //atexit_work();
+ //}
}
//Dummy volatile so that the compiler can't resolve its value at compile-time
@@ -385,7 +392,7 @@ class intermodule_singleton_impl
struct init_atomic_func
{
init_atomic_func(ThreadSafeGlobalMap &m)
- : m_map(m)
+ : m_map(m), ret_ptr()
{}
void operator()()
@@ -406,9 +413,9 @@ class intermodule_singleton_impl
throw;
}
}
- if(Phoenix){
+ //if(Phoenix){
std::atexit(&atexit_work);
- }
+ //}
atomic_inc32(&rcount->singleton_ref_count);
ret_ptr = rcount->ptr;
}
@@ -447,12 +454,9 @@ class intermodule_singleton_impl
delete pc;
}
}
- void *data() const
- { return ret_ptr; }
private:
ThreadSafeGlobalMap &m_map;
- void *ret_ptr;
};
//A wrapper to execute init_atomic_func
diff --git a/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp b/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp
index ca2ff4acfa..fa1b277ef4 100644
--- a/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp
+++ b/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_INTERSEGMENT_PTR_HPP
#define BOOST_INTERPROCESS_INTERSEGMENT_PTR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/managed_global_memory.hpp b/3party/boost/boost/interprocess/detail/managed_global_memory.hpp
index 548e17d9e5..b1fcc0f8b6 100644
--- a/3party/boost/boost/interprocess/detail/managed_global_memory.hpp
+++ b/3party/boost/boost/interprocess/detail/managed_global_memory.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_BASIC_GLOBAL_MEMORY_HPP
#define BOOST_INTERPROCESS_BASIC_GLOBAL_MEMORY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp b/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp
index 2f97935d4e..919e5353b8 100644
--- a/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp
+++ b/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_MANAGED_MEMORY_IMPL_HPP
#define BOOST_INTERPROCESS_DETAIL_MANAGED_MEMORY_IMPL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -307,7 +307,7 @@ class basic_managed_memory_impl
//Experimental. Don't use.
- //!Allocates n_elements of elem_bytes bytes.
+ //!Allocates n_elements of elem_bytes bytes.
//!Throws bad_alloc on failure. chain.size() is not increased on failure.
void allocate_many(size_type elem_bytes, size_type n_elements, multiallocation_chain &chain)
{ mp_header->allocate_many(elem_bytes, n_elements, chain); }
@@ -317,7 +317,7 @@ class basic_managed_memory_impl
void allocate_many(const size_type *element_lengths, size_type n_elements, size_type sizeof_element, multiallocation_chain &chain)
{ mp_header->allocate_many(element_lengths, n_elements, sizeof_element, chain); }
- //!Allocates n_elements of elem_bytes bytes.
+ //!Allocates n_elements of elem_bytes bytes.
//!Non-throwing version. chain.size() is not increased on failure.
void allocate_many(std::nothrow_t, size_type elem_bytes, size_type n_elements, multiallocation_chain &chain)
{ mp_header->allocate_many(std::nothrow_t(), elem_bytes, n_elements, chain); }
@@ -609,7 +609,7 @@ class basic_managed_memory_impl
{ mp_header->template destroy_ptr<T>(ptr); }
//!Returns the name of an object created with construct/find_or_construct
- //!functions. Does not throw
+ //!functions. If ptr points to an unique instance typeid(T).name() is returned.
template<class T>
static const char_type *get_instance_name(const T *ptr)
{ return segment_manager::get_instance_name(ptr); }
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 b1b2725147..4c2ef14dcc 100644
--- a/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp
+++ b/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MANAGED_MULTI_SHARED_MEMORY_HPP
#define BOOST_INTERPROCESS_MANAGED_MULTI_SHARED_MEMORY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
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 f8154d0614..f12d6c6044 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
@@ -25,6 +25,7 @@
#include <boost/interprocess/permissions.hpp>
#include <boost/type_traits/alignment_of.hpp>
#include <boost/type_traits/type_with_alignment.hpp>
+#include <boost/interprocess/sync/spin/wait.hpp>
#include <boost/move/move.hpp>
#include <boost/cstdint.hpp>
@@ -309,7 +310,6 @@ class managed_open_or_create_impl
{
typedef bool_<FileBased> file_like_t;
(void)mode;
- error_info err;
bool created = false;
bool ronly = false;
bool cow = false;
@@ -354,6 +354,7 @@ class managed_open_or_create_impl
//file and know if we have really created it or just open it
//drop me a e-mail!
bool completed = false;
+ spin_wait swait;
while(!completed){
try{
create_device<FileBased>(dev, id, size, perm, file_like_t());
@@ -384,7 +385,7 @@ class managed_open_or_create_impl
catch(...){
throw;
}
- thread_yield();
+ swait.yield();
}
}
@@ -431,11 +432,13 @@ class managed_open_or_create_impl
else{
if(FileBased){
offset_t filesize = 0;
+ spin_wait swait;
while(filesize == 0){
if(!get_file_size(file_handle_from_mapping_handle(dev.get_mapping_handle()), filesize)){
- throw interprocess_exception(error_info(system_error_code()));
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
}
- thread_yield();
+ swait.yield();
}
if(filesize == 1){
throw interprocess_exception(error_info(corrupted_error));
@@ -447,8 +450,9 @@ class managed_open_or_create_impl
boost::uint32_t *patomic_word = static_cast<boost::uint32_t*>(region.get_address());
boost::uint32_t value = atomic_read32(patomic_word);
+ spin_wait swait;
while(value == InitializingSegment || value == UninitializedSegment){
- thread_yield();
+ swait.yield();
value = atomic_read32(patomic_word);
}
diff --git a/3party/boost/boost/interprocess/detail/min_max.hpp b/3party/boost/boost/interprocess/detail/min_max.hpp
index 63ce7efd90..a5d01f404b 100644
--- a/3party/boost/boost/interprocess/detail/min_max.hpp
+++ b/3party/boost/boost/interprocess/detail/min_max.hpp
@@ -13,7 +13,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_MIN_MAX_HPP
#define BOOST_INTERPROCESS_DETAIL_MIN_MAX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/mpl.hpp b/3party/boost/boost/interprocess/detail/mpl.hpp
index 4c5e1f1b9e..29f3893038 100644
--- a/3party/boost/boost/interprocess/detail/mpl.hpp
+++ b/3party/boost/boost/interprocess/detail/mpl.hpp
@@ -13,7 +13,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_MPL_HPP
#define BOOST_INTERPROCESS_DETAIL_MPL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/multi_segment_services.hpp b/3party/boost/boost/interprocess/detail/multi_segment_services.hpp
index f625a9bc38..dd9d5f82fd 100644
--- a/3party/boost/boost/interprocess/detail/multi_segment_services.hpp
+++ b/3party/boost/boost/interprocess/detail/multi_segment_services.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MULTI_SEGMENT_SERVICES_HPP
#define BOOST_INTERPROCESS_MULTI_SEGMENT_SERVICES_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/named_proxy.hpp b/3party/boost/boost/interprocess/detail/named_proxy.hpp
index 14a9aa0a78..0c26188908 100644
--- a/3party/boost/boost/interprocess/detail/named_proxy.hpp
+++ b/3party/boost/boost/interprocess/detail/named_proxy.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NAMED_PROXY_HPP
#define BOOST_INTERPROCESS_NAMED_PROXY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/os_file_functions.hpp b/3party/boost/boost/interprocess/detail/os_file_functions.hpp
index 0bc9744466..edd42adf5b 100644
--- a/3party/boost/boost/interprocess/detail/os_file_functions.hpp
+++ b/3party/boost/boost/interprocess/detail/os_file_functions.hpp
@@ -21,7 +21,7 @@
#include <climits>
#include <boost/type_traits/make_unsigned.hpp>
-#if (defined BOOST_INTERPROCESS_WINDOWS)
+#if defined (BOOST_INTERPROCESS_WINDOWS)
# include <boost/interprocess/detail/win32_api.hpp>
#else
# ifdef BOOST_HAS_UNISTD_H
@@ -46,7 +46,7 @@
namespace boost {
namespace interprocess {
-#if (defined BOOST_INTERPROCESS_WINDOWS)
+#if defined (BOOST_INTERPROCESS_WINDOWS)
typedef void * file_handle_t;
typedef long long offset_t;
@@ -94,9 +94,22 @@ inline file_handle_t file_handle_from_mapping_handle(mapping_handle_t hnd)
inline bool create_directory(const char *path)
{ return winapi::create_directory(path); }
-inline const char *get_temporary_path()
-{ return std::getenv("TMP"); }
-
+inline bool get_temporary_path(char *buffer, std::size_t buf_len, std::size_t &required_len)
+{
+ required_len = 0;
+ //std::size_t is always bigger or equal than unsigned long in Windows systems
+ //In case std::size_t is bigger than unsigned long
+ unsigned long buf = buf_len;
+ if(buf_len != buf){ //maybe overflowed
+ return false;
+ }
+ required_len = winapi::get_temp_path(buf_len, buffer);
+ const bool ret = !(buf_len < required_len);
+ if(ret && buffer[required_len-1] == '\\'){
+ buffer[required_len-1] = 0;
+ }
+ return ret;
+}
inline file_handle_t create_new_file
(const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false)
@@ -136,7 +149,7 @@ inline bool truncate_file (file_handle_t hnd, std::size_t size)
typedef boost::make_unsigned<offset_t>::type uoffset_t;
const uoffset_t max_filesize = uoffset_t((std::numeric_limits<offset_t>::max)());
//Avoid unused variable warnings in 32 bit systems
- if(size > max_filesize){
+ if(uoffset_t(size) > max_filesize){
winapi::set_last_error(winapi::error_file_too_large);
return false;
}
@@ -257,7 +270,7 @@ inline bool delete_subdirectories_recursive
void * hFile; // Handle to directory
std::string strFilePath; // Filepath
std::string strPattern; // Pattern
- winapi::win32_find_data_t FileInformation; // File information
+ winapi::win32_find_data FileInformation; // File information
//Find all files and directories
strPattern = refcstrRootDirectory + "\\*.*";
@@ -273,8 +286,10 @@ inline bool delete_subdirectories_recursive
//If it's a directory, go recursive
if(FileInformation.dwFileAttributes & winapi::file_attribute_directory){
// Delete subdirectory
- if(!delete_subdirectories_recursive(strFilePath, dont_delete_this, count+1))
+ if(!delete_subdirectories_recursive(strFilePath, dont_delete_this, count+1)){
+ winapi::find_close(hFile);
return false;
+ }
}
//If it's a file, just delete it
else{
@@ -323,7 +338,7 @@ template<class Function>
inline bool for_each_file_in_dir(const char *dir, Function f)
{
void * hFile; // Handle to directory
- winapi::win32_find_data_t FileInformation; // File information
+ winapi::win32_find_data FileInformation; // File information
//Get base directory
std::string str(dir);
@@ -356,7 +371,7 @@ inline bool for_each_file_in_dir(const char *dir, Function f)
}
-#else //#if (defined BOOST_INTERPROCESS_WINDOWS)
+#else //#if defined (BOOST_INTERPROCESS_WINDOWS)
typedef int file_handle_t;
typedef off_t offset_t;
@@ -398,17 +413,15 @@ inline file_handle_t file_handle_from_mapping_handle(mapping_handle_t hnd)
inline bool create_directory(const char *path)
{ return ::mkdir(path, 0777) == 0 && ::chmod(path, 0777) == 0; }
-inline const char *get_temporary_path()
+inline bool get_temporary_path(char *buffer, std::size_t buf_len, std::size_t &required_len)
{
- const char *names[] = {"/tmp", "TMPDIR", "TMP", "TEMP" };
- const int names_size = sizeof(names)/sizeof(names[0]);
- struct stat data;
- for(int i = 0; i != names_size; ++i){
- if(::stat(names[i], &data) == 0){
- return names[i];
- }
+ required_len = 5u;
+ if(buf_len < required_len)
+ return false;
+ else{
+ std::strcpy(buffer, "/tmp");
}
- return "/tmp";
+ return true;
}
inline file_handle_t create_new_file
@@ -678,7 +691,7 @@ inline bool delete_subdirectories(const std::string &refcstrRootDirectory, const
return delete_subdirectories_recursive(refcstrRootDirectory, dont_delete_this );
}
-#endif //#if (defined BOOST_INTERPROCESS_WINDOWS)
+#endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
inline bool open_or_create_directory(const char *dir_name)
{
@@ -692,6 +705,18 @@ inline bool open_or_create_directory(const char *dir_name)
return true;
}
+inline std::string get_temporary_path()
+{
+ std::size_t required_len = 0;
+ get_temporary_path(0, 0, required_len);
+ std::string ret_str(required_len, char(0));
+ get_temporary_path(&ret_str[0], ret_str.size(), required_len);
+ while(!ret_str.empty() && !ret_str[ret_str.size()-1]){
+ ret_str.erase(ret_str.size()-1);
+ }
+
+ return ret_str;
+}
} //namespace ipcdetail{
} //namespace interprocess {
diff --git a/3party/boost/boost/interprocess/detail/os_thread_functions.hpp b/3party/boost/boost/interprocess/detail/os_thread_functions.hpp
index f881a1f462..934e608de2 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-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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,6 +8,17 @@
//
//////////////////////////////////////////////////////////////////////////////
+//Thread launching functions are adapted from boost/detail/lightweight_thread.hpp
+//
+// boost/detail/lightweight_thread.hpp
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2008 Peter Dimov
+//
+// 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_INTERPROCESS_DETAIL_OS_THREAD_FUNCTIONS_HPP
#define BOOST_INTERPROCESS_DETAIL_OS_THREAD_FUNCTIONS_HPP
@@ -15,17 +26,38 @@
#include <boost/interprocess/detail/workaround.hpp>
#include <boost/interprocess/streams/bufferstream.hpp>
#include <boost/interprocess/detail/posix_time_types_wrk.hpp>
+#include <cstddef>
+#include <memory>
-#if (defined BOOST_INTERPROCESS_WINDOWS)
+#if defined(BOOST_INTERPROCESS_WINDOWS)
# include <boost/interprocess/detail/win32_api.hpp>
+# include <process.h>
#else
-# ifdef BOOST_HAS_UNISTD_H
-# include <pthread.h>
-# include <unistd.h>
-# include <sched.h>
-# include <time.h>
+# include <pthread.h>
+# include <unistd.h>
+# include <sched.h>
+# include <time.h>
+# ifdef BOOST_INTERPROCESS_BSD_DERIVATIVE
+ //Some *BSD systems (OpenBSD & NetBSD) need sys/param.h before sys/sysctl.h, whereas
+ //others (FreeBSD & Darwin) need sys/types.h
+# include <sys/types.h>
+# include <sys/param.h>
+# include <sys/sysctl.h>
+# endif
+//According to the article "C/C++ tip: How to measure elapsed real time for benchmarking"
+# if defined(CLOCK_MONOTONIC_PRECISE) //BSD
+# define BOOST_INTERPROCESS_CLOCK_MONOTONIC CLOCK_MONOTONIC_PRECISE
+# elif defined(CLOCK_MONOTONIC_RAW) //Linux
+# define BOOST_INTERPROCESS_CLOCK_MONOTONIC CLOCK_MONOTONIC_RAW
+# elif defined(CLOCK_HIGHRES) //Solaris
+# define BOOST_INTERPROCESS_CLOCK_MONOTONIC CLOCK_HIGHRES
+# elif defined(CLOCK_MONOTONIC) //POSIX (AIX, BSD, Linux, Solaris)
+# define BOOST_INTERPROCESS_CLOCK_MONOTONIC CLOCK_MONOTONIC
+# elif !defined(CLOCK_MONOTONIC) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
+# include <mach/mach_time.h> // mach_absolute_time, mach_timebase_info_data_t
+# define BOOST_INTERPROCESS_MATCH_ABSOLUTE_TIME
# else
-# error Unknown platform
+# error "No high resolution steady clock in your system, please provide a patch"
# endif
#endif
@@ -33,10 +65,11 @@ namespace boost {
namespace interprocess {
namespace ipcdetail{
-#if (defined BOOST_INTERPROCESS_WINDOWS)
+#if defined (BOOST_INTERPROCESS_WINDOWS)
typedef unsigned long OS_process_id_t;
typedef unsigned long OS_thread_id_t;
+typedef void* OS_thread_t;
typedef OS_thread_id_t OS_systemwide_thread_id_t;
//process
@@ -56,11 +89,83 @@ inline OS_thread_id_t get_invalid_thread_id()
inline bool equal_thread_id(OS_thread_id_t id1, OS_thread_id_t id2)
{ return id1 == id2; }
+//return the system tick in ns
+inline unsigned long get_system_tick_ns()
+{
+ unsigned long curres;
+ winapi::set_timer_resolution(10000, 0, &curres);
+ //Windows API returns the value in hundreds of ns
+ return (curres - 1ul)*100ul;
+}
+
+//return the system tick in us
+inline unsigned long get_system_tick_us()
+{
+ unsigned long curres;
+ winapi::set_timer_resolution(10000, 0, &curres);
+ //Windows API returns the value in hundreds of ns
+ return (curres - 1ul)/10ul + 1ul;
+}
+
+typedef unsigned __int64 OS_highres_count_t;
+
+inline unsigned long get_system_tick_in_highres_counts()
+{
+ __int64 freq;
+ unsigned long curres;
+ winapi::set_timer_resolution(10000, 0, &curres);
+ //Frequency in counts per second
+ if(!winapi::query_performance_frequency(&freq)){
+ //Tick resolution in ms
+ return (curres-1ul)/10000ul + 1ul;
+ }
+ else{
+ //In femtoseconds
+ __int64 count_fs = (1000000000000000LL - 1LL)/freq + 1LL;
+ __int64 tick_counts = (static_cast<__int64>(curres)*100000000LL - 1LL)/count_fs + 1LL;
+ return static_cast<unsigned long>(tick_counts);
+ }
+}
+
+inline OS_highres_count_t get_current_system_highres_count()
+{
+ __int64 count;
+ if(!winapi::query_performance_counter(&count)){
+ count = winapi::get_tick_count();
+ }
+ return count;
+}
+
+inline void zero_highres_count(OS_highres_count_t &count)
+{ count = 0; }
+
+inline bool is_highres_count_zero(const OS_highres_count_t &count)
+{ return count == 0; }
+
+template <class Ostream>
+inline Ostream &ostream_highres_count(Ostream &ostream, const OS_highres_count_t &count)
+{
+ ostream << count;
+ return ostream;
+}
+
+inline OS_highres_count_t system_highres_count_subtract(const OS_highres_count_t &l, const OS_highres_count_t &r)
+{ return l - r; }
+
+inline bool system_highres_count_less(const OS_highres_count_t &l, const OS_highres_count_t &r)
+{ return l < r; }
+
+inline bool system_highres_count_less_ul(const OS_highres_count_t &l, unsigned long r)
+{ return l < static_cast<OS_highres_count_t>(r); }
+
+inline void thread_sleep_tick()
+{ winapi::sleep_tick(); }
+
inline void thread_yield()
{ winapi::sched_yield(); }
inline void thread_sleep(unsigned int ms)
-{ winapi::Sleep(ms); }
+{ winapi::sleep(ms); }
//systemwide thread
inline OS_systemwide_thread_id_t get_current_systemwide_thread_id()
@@ -97,9 +202,17 @@ inline long double get_current_process_creation_time()
CreationTime.dwLowDateTime*resolution;
}
+inline unsigned int get_num_cores()
+{
+ winapi::system_info sysinfo;
+ winapi::get_system_info( &sysinfo );
+ //in Windows dw is long which is equal in bits to int
+ return static_cast<unsigned>(sysinfo.dwNumberOfProcessors);
+}
-#else //#if (defined BOOST_INTERPROCESS_WINDOWS)
+#else //#if defined (BOOST_INTERPROCESS_WINDOWS)
+typedef pthread_t OS_thread_t;
typedef pthread_t OS_thread_id_t;
typedef pid_t OS_process_id_t;
@@ -164,9 +277,135 @@ inline bool equal_thread_id(OS_thread_id_t id1, OS_thread_id_t id2)
inline void thread_yield()
{ ::sched_yield(); }
+#ifndef BOOST_INTERPROCESS_MATCH_ABSOLUTE_TIME
+typedef struct timespec OS_highres_count_t;
+#else
+typedef unsigned long long OS_highres_count_t;
+#endif
+
+inline unsigned long get_system_tick_ns()
+{
+ #ifdef _SC_CLK_TCK
+ long hz =::sysconf(_SC_CLK_TCK); // ticks per sec
+ if(hz <= 0){ //Try a typical value on error
+ hz = 100;
+ }
+ return 999999999ul/static_cast<unsigned long>(hz)+1ul;
+ #else
+ #error "Can't obtain system tick value for your system, please provide a patch"
+ #endif
+}
+
+inline unsigned long get_system_tick_in_highres_counts()
+{
+ #ifndef BOOST_INTERPROCESS_MATCH_ABSOLUTE_TIME
+ return get_system_tick_ns();
+ #else
+ mach_timebase_info_data_t info;
+ mach_timebase_info(&info);
+ //ns
+ return static_cast<unsigned long>
+ (
+ static_cast<double>(get_system_tick_ns())
+ / (static_cast<double>(info.numer) / info.denom)
+ );
+ #endif
+}
+
+//return system ticks in us
+inline unsigned long get_system_tick_us()
+{
+ return (get_system_tick_ns()-1)/1000ul + 1ul;
+}
+
+inline OS_highres_count_t get_current_system_highres_count()
+{
+ #if defined(BOOST_INTERPROCESS_CLOCK_MONOTONIC)
+ struct timespec count;
+ ::clock_gettime(BOOST_INTERPROCESS_CLOCK_MONOTONIC, &count);
+ return count;
+ #elif defined(BOOST_INTERPROCESS_MATCH_ABSOLUTE_TIME)
+ return ::mach_absolute_time();
+ #endif
+}
+
+#ifndef BOOST_INTERPROCESS_MATCH_ABSOLUTE_TIME
+
+inline void zero_highres_count(OS_highres_count_t &count)
+{ count.tv_sec = 0; count.tv_nsec = 0; }
+
+inline bool is_highres_count_zero(const OS_highres_count_t &count)
+{ return count.tv_sec == 0 && count.tv_nsec == 0; }
+
+template <class Ostream>
+inline Ostream &ostream_highres_count(Ostream &ostream, const OS_highres_count_t &count)
+{
+ ostream << count.tv_sec << "s:" << count.tv_nsec << "ns";
+ return ostream;
+}
+
+inline OS_highres_count_t system_highres_count_subtract(const OS_highres_count_t &l, const OS_highres_count_t &r)
+{
+ OS_highres_count_t res;
+
+ if (l.tv_nsec < r.tv_nsec){
+ res.tv_nsec = 1000000000 + l.tv_nsec - r.tv_nsec;
+ res.tv_sec = l.tv_sec - 1 - r.tv_sec;
+ }
+ else{
+ res.tv_nsec = l.tv_nsec - r.tv_nsec;
+ res.tv_sec = l.tv_sec - r.tv_sec;
+ }
+
+ return res;
+}
+
+inline bool system_highres_count_less(const OS_highres_count_t &l, const OS_highres_count_t &r)
+{ return l.tv_sec < r.tv_sec || (l.tv_sec == r.tv_sec && l.tv_nsec < r.tv_nsec); }
+
+inline bool system_highres_count_less_ul(const OS_highres_count_t &l, unsigned long r)
+{ return !l.tv_sec && (static_cast<unsigned long>(l.tv_nsec) < r); }
+
+#else
+
+inline void zero_highres_count(OS_highres_count_t &count)
+{ count = 0; }
+
+inline bool is_highres_count_zero(const OS_highres_count_t &count)
+{ return count == 0; }
+
+template <class Ostream>
+inline Ostream &ostream_highres_count(Ostream &ostream, const OS_highres_count_t &count)
+{
+ ostream << count ;
+ return ostream;
+}
+
+inline OS_highres_count_t system_highres_count_subtract(const OS_highres_count_t &l, const OS_highres_count_t &r)
+{ return l - r; }
+
+inline bool system_highres_count_less(const OS_highres_count_t &l, const OS_highres_count_t &r)
+{ return l < r; }
+
+inline bool system_highres_count_less_ul(const OS_highres_count_t &l, unsigned long r)
+{ return l < static_cast<OS_highres_count_t>(r); }
+
+#endif
+
+inline void thread_sleep_tick()
+{
+ struct timespec rqt;
+ //Sleep for the half of the tick time
+ rqt.tv_sec = 0;
+ rqt.tv_nsec = get_system_tick_ns()/2;
+ ::nanosleep(&rqt, 0);
+}
+
inline void thread_sleep(unsigned int ms)
{
- const struct timespec rqt = { ms/1000u, (ms%1000u)*1000000u };
+ struct timespec rqt;
+ rqt.tv_sec = ms/1000u;
+ rqt.tv_nsec = (ms%1000u)*1000000u;
::nanosleep(&rqt, 0);
}
@@ -189,7 +428,46 @@ inline OS_systemwide_thread_id_t get_invalid_systemwide_thread_id()
inline long double get_current_process_creation_time()
{ return 0.0L; }
-#endif //#if (defined BOOST_INTERPROCESS_WINDOWS)
+inline unsigned int get_num_cores()
+{
+ #ifdef _SC_NPROCESSORS_ONLN
+ long cores = ::sysconf(_SC_NPROCESSORS_ONLN);
+ // sysconf returns -1 if the name is invalid, the option does not exist or
+ // does not have a definite limit.
+ // if sysconf returns some other negative number, we have no idea
+ // what is going on. Default to something safe.
+ if(cores <= 0){
+ return 1;
+ }
+ //Check for overflow (unlikely)
+ else if(static_cast<unsigned long>(cores) >=
+ static_cast<unsigned long>(static_cast<unsigned int>(-1))){
+ return static_cast<unsigned int>(-1);
+ }
+ else{
+ return static_cast<unsigned int>(cores);
+ }
+ #elif defined(BOOST_INTERPROCESS_BSD_DERIVATIVE) && defined(HW_NCPU)
+ int request[2] = { CTL_HW, HW_NCPU };
+ int num_cores;
+ std::size_t result_len = sizeof(num_cores);
+ if ( (::sysctl (request, 2, &num_cores, &result_len, 0, 0) < 0) || (num_cores <= 0) ){
+ //Return a safe value
+ return 1;
+ }
+ else{
+ return static_cast<unsigned int>(num_cores);
+ }
+ #endif
+}
+
+inline int thread_create(OS_thread_t * thread, void *(*start_routine)(void*), void* arg)
+{ return pthread_create(thread, 0, start_routine, arg); }
+
+inline void thread_join(OS_thread_t thread)
+{ (void)pthread_join(thread, 0); }
+
+#endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
typedef char pid_str_t[sizeof(OS_process_id_t)*3+1];
@@ -202,6 +480,111 @@ inline void get_pid_str(pid_str_t &pid_str, OS_process_id_t pid)
inline void get_pid_str(pid_str_t &pid_str)
{ get_pid_str(pid_str, get_current_process_id()); }
+#if defined(BOOST_INTERPROCESS_WINDOWS)
+
+inline int thread_create( OS_thread_t * thread, unsigned (__stdcall * start_routine) (void*), void* arg )
+{
+ void* h = (void*)_beginthreadex( 0, 0, start_routine, arg, 0, 0 );
+
+ if( h != 0 ){
+ *thread = h;
+ return 0;
+ }
+ else{
+ return 1;
+ }
+}
+
+inline void thread_join( OS_thread_t thread)
+{
+ winapi::wait_for_single_object( thread, winapi::infinite_time );
+ winapi::close_handle( thread );
+}
+
+#endif
+
+class abstract_thread
+{
+ public:
+ virtual ~abstract_thread() {}
+ virtual void run() = 0;
+};
+
+template<class T>
+class os_thread_func_ptr_deleter
+{
+ public:
+ explicit os_thread_func_ptr_deleter(T* p)
+ : m_p(p)
+ {}
+
+ T *release()
+ { T *p = m_p; m_p = 0; return p; }
+
+ T *get() const
+ { return m_p; }
+
+ T *operator ->() const
+ { return m_p; }
+
+ ~os_thread_func_ptr_deleter()
+ { delete m_p; }
+
+ private:
+ T *m_p;
+};
+
+#if defined(BOOST_INTERPROCESS_WINDOWS)
+
+inline unsigned __stdcall launch_thread_routine( void * pv )
+{
+ os_thread_func_ptr_deleter<abstract_thread> pt( static_cast<abstract_thread *>( pv ) );
+ pt->run();
+ return 0;
+}
+
+#else
+
+extern "C" void * launch_thread_routine( void * pv );
+
+inline void * launch_thread_routine( void * pv )
+{
+ os_thread_func_ptr_deleter<abstract_thread> pt( static_cast<abstract_thread *>( pv ) );
+ pt->run();
+ return 0;
+}
+
+#endif
+
+template<class F>
+class launch_thread_impl
+ : public abstract_thread
+{
+ public:
+ explicit launch_thread_impl( F f )
+ : f_( f )
+ {}
+
+ void run()
+ { f_(); }
+
+ private:
+ F f_;
+};
+
+template<class F>
+inline int thread_launch( OS_thread_t & pt, F f )
+{
+ os_thread_func_ptr_deleter<abstract_thread> p( new launch_thread_impl<F>( f ) );
+
+ int r = thread_create(&pt, launch_thread_routine, p.get());
+ if( r == 0 ){
+ p.release();
+ }
+
+ return r;
+}
+
} //namespace ipcdetail{
} //namespace interprocess {
} //namespace boost {
diff --git a/3party/boost/boost/interprocess/detail/pointer_type.hpp b/3party/boost/boost/interprocess/detail/pointer_type.hpp
index aa8da550c0..28b053c2ae 100644
--- a/3party/boost/boost/interprocess/detail/pointer_type.hpp
+++ b/3party/boost/boost/interprocess/detail/pointer_type.hpp
@@ -14,7 +14,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_POINTER_TYPE_HPP
#define BOOST_INTERPROCESS_DETAIL_POINTER_TYPE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp b/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp
index 2d0190687c..80897f2721 100644
--- a/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp
+++ b/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_PORTABLE_INTERMODULE_SINGLETON_HPP
#define BOOST_INTERPROCESS_PORTABLE_INTERMODULE_SINGLETON_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -23,7 +23,7 @@
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/detail/atomic.hpp>
#include <boost/interprocess/detail/os_thread_functions.hpp>
-#include <boost/interprocess/detail/tmp_dir_helpers.hpp>
+#include <boost/interprocess/detail/shared_dir_helpers.hpp>
#include <boost/interprocess/detail/os_file_functions.hpp>
#include <boost/interprocess/detail/file_locking_helpers.hpp>
#include <boost/assert.hpp>
@@ -45,11 +45,12 @@ static void create_tmp_subdir_and_get_pid_based_filepath
{
//Let's create a lock file for each process gmem that will mark if
//the process is alive or not
- create_tmp_and_clean_old(s);
+ create_shared_dir_and_clean_old(s);
s += "/";
s += subdir_name;
if(!open_or_create_directory(s.c_str())){
- throw interprocess_exception(error_info(system_error_code()));
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
}
s += "/";
s += file_prefix;
@@ -187,7 +188,7 @@ struct thread_safe_global_map_dependant<managed_global_memory>
static bool remove_old_gmem()
{
std::string refcstrRootDirectory;
- tmp_folder(refcstrRootDirectory);
+ get_shared_dir(refcstrRootDirectory);
refcstrRootDirectory += "/";
refcstrRootDirectory += get_lock_file_subdir_name();
return for_each_file_in_dir(refcstrRootDirectory.c_str(), apply_gmem_erase_logic);
@@ -342,7 +343,7 @@ struct thread_safe_global_map_dependant<managed_global_memory>
} //namespace intermodule_singleton_helpers {
-template<typename C, bool LazyInit = true, bool Phoenix = true>
+template<typename C, bool LazyInit = true, bool Phoenix = false>
class portable_intermodule_singleton
: public intermodule_singleton_impl<C, LazyInit, Phoenix, managed_global_memory>
{};
diff --git a/3party/boost/boost/interprocess/detail/preprocessor.hpp b/3party/boost/boost/interprocess/detail/preprocessor.hpp
index 0eb419d620..06d1354ee1 100644
--- a/3party/boost/boost/interprocess/detail/preprocessor.hpp
+++ b/3party/boost/boost/interprocess/detail/preprocessor.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_PREPROCESSOR_HPP
#define BOOST_INTERPROCESS_DETAIL_PREPROCESSOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/robust_emulation.hpp b/3party/boost/boost/interprocess/detail/robust_emulation.hpp
index cac6595491..89f49875ea 100644
--- a/3party/boost/boost/interprocess/detail/robust_emulation.hpp
+++ b/3party/boost/boost/interprocess/detail/robust_emulation.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_ROBUST_EMULATION_HPP
#define BOOST_INTERPROCESS_ROBUST_EMULATION_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -21,9 +21,12 @@
#include <boost/interprocess/sync/interprocess_recursive_mutex.hpp>
#include <boost/interprocess/detail/atomic.hpp>
#include <boost/interprocess/detail/os_file_functions.hpp>
-#include <boost/interprocess/detail/tmp_dir_helpers.hpp>
+#include <boost/interprocess/detail/shared_dir_helpers.hpp>
#include <boost/interprocess/detail/intermodule_singleton.hpp>
+#include <boost/interprocess/detail/portable_intermodule_singleton.hpp>
#include <boost/interprocess/exceptions.hpp>
+#include <boost/interprocess/sync/spin/wait.hpp>
+#include <boost/interprocess/sync/detail/common_algorithms.hpp>
#include <string>
namespace boost{
@@ -61,7 +64,7 @@ inline const char *robust_lock_prefix()
inline void robust_lock_path(std::string &s)
{
- tmp_folder(s);
+ get_shared_dir(s);
s += "/";
s += robust_lock_subdir_path();
}
@@ -214,42 +217,7 @@ inline robust_spin_mutex<Mutex>::robust_spin_mutex()
template<class Mutex>
inline void robust_spin_mutex<Mutex>::lock()
-{
- //If the mutex is broken (recovery didn't call consistent()),
- //then throw an exception
- if(atomic_read32(&this->state) == broken_state){
- throw interprocess_exception(lock_error, "Broken id");
- }
-
- //This function provokes intermodule_singleton instantiation
- if(!this->lock_own_unique_file()){
- throw interprocess_exception(lock_error, "Broken id");
- }
-
- //Now the logic. Try to lock, if successful mark the owner
- //if it fails, start recovery logic
- unsigned int spin_count = 0;
- while(1){
- if (mtx.try_lock()){
- atomic_write32(&this->owner, get_current_process_id());
- break;
- }
- else{
- //Do the dead owner checking each spin_threshold lock tries
- ipcdetail::thread_yield();
- ++spin_count;
- if(spin_count > spin_threshold){
- //Check if owner dead and take ownership if possible
- if(!this->robust_check()){
- spin_count = 0;
- }
- else{
- break;
- }
- }
- }
- }
-}
+{ try_based_lock(*this); }
template<class Mutex>
inline bool robust_spin_mutex<Mutex>::try_lock()
@@ -280,33 +248,7 @@ inline bool robust_spin_mutex<Mutex>::try_lock()
template<class Mutex>
inline bool robust_spin_mutex<Mutex>::timed_lock
(const boost::posix_time::ptime &abs_time)
-{
- //Same as lock() but with an additional timeout
- if(abs_time == boost::posix_time::pos_infin){
- this->lock();
- return true;
- }
- //Obtain current count and target time
- boost::posix_time::ptime now = microsec_clock::universal_time();
-
- if(now >= abs_time)
- return this->try_lock();
-
- do{
- if(this->try_lock()){
- break;
- }
- now = microsec_clock::universal_time();
-
- if(now >= abs_time){
- return this->try_lock();
- }
- // relinquish current time slice
- ipcdetail::thread_yield();
- }while (true);
-
- return true;
-}
+{ return try_based_timed_lock(*this, abs_time); }
template<class Mutex>
inline void robust_spin_mutex<Mutex>::owner_to_filename(boost::uint32_t own, std::string &s)
diff --git a/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp b/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp
index 83e5a05eb3..47edbd68d8 100644
--- a/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp
+++ b/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_SEGMENT_MANAGER_BASE_HPP
#define BOOST_INTERPROCESS_SEGMENT_MANAGER_BASE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -32,6 +32,7 @@
#include <string> //char_traits
#include <new> //std::nothrow
#include <utility> //std::pair
+#include <iterator> //std::iterator_traits
#include <boost/assert.hpp> //BOOST_ASSERT
#include <functional> //unary_function
#ifndef BOOST_NO_EXCEPTIONS
@@ -323,6 +324,15 @@ class char_ptr_holder
operator const CharType *()
{ return m_name; }
+ const CharType *get() const
+ { return m_name; }
+
+ bool is_unique() const
+ { return m_name == reinterpret_cast<CharType*>(-1); }
+
+ bool is_anonymous() const
+ { return m_name == static_cast<CharType*>(0); }
+
private:
const CharType *m_name;
};
@@ -472,12 +482,12 @@ class segment_manager_iterator_value_adaptor<Iterator, false>
template<class Iterator, bool intrusive>
struct segment_manager_iterator_transform
- : std::unary_function< typename Iterator::value_type
+ : std::unary_function< typename std::iterator_traits<Iterator>::value_type
, segment_manager_iterator_value_adaptor<Iterator, intrusive> >
{
typedef segment_manager_iterator_value_adaptor<Iterator, intrusive> result_type;
- result_type operator()(const typename Iterator::value_type &arg) const
+ result_type operator()(const typename std::iterator_traits<Iterator>::value_type &arg) const
{ return result_type(arg); }
};
diff --git a/3party/boost/boost/interprocess/detail/shared_dir_helpers.hpp b/3party/boost/boost/interprocess/detail/shared_dir_helpers.hpp
new file mode 100644
index 0000000000..e3a4065f4d
--- /dev/null
+++ b/3party/boost/boost/interprocess/detail/shared_dir_helpers.hpp
@@ -0,0 +1,191 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2007-2014. 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_SHARED_DIR_HELPERS_HPP
+#define BOOST_INTERPROCESS_DETAIL_SHARED_DIR_HELPERS_HPP
+
+#include <boost/interprocess/detail/config_begin.hpp>
+#include <boost/interprocess/detail/workaround.hpp>
+#include <boost/interprocess/detail/os_file_functions.hpp>
+#include <boost/interprocess/errors.hpp>
+#include <boost/interprocess/exceptions.hpp>
+#include <string>
+
+#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME) && defined(BOOST_INTERPROCESS_WINDOWS)
+ #include <boost/interprocess/detail/windows_intermodule_singleton.hpp>
+#endif
+
+namespace boost {
+namespace interprocess {
+namespace ipcdetail {
+
+#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME)
+ #if defined(BOOST_INTERPROCESS_WINDOWS)
+ //This type will initialize the stamp
+ struct windows_bootstamp
+ {
+ windows_bootstamp()
+ {
+ //Throw if bootstamp not available
+ if(!winapi::get_last_bootup_time(stamp)){
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
+ }
+ }
+ //Use std::string. Even if this will be constructed in shared memory, all
+ //modules/dlls are from this process so internal raw pointers to heap are always valid
+ std::string stamp;
+ };
+
+ inline void get_bootstamp(std::string &s, bool add = false)
+ {
+ const windows_bootstamp &bootstamp = windows_intermodule_singleton<windows_bootstamp>::get();
+ if(add){
+ s += bootstamp.stamp;
+ }
+ else{
+ s = bootstamp.stamp;
+ }
+ }
+ #elif defined(BOOST_INTERPROCESS_HAS_BSD_KERNEL_BOOTTIME)
+ inline void get_bootstamp(std::string &s, bool add = false)
+ {
+ // FreeBSD specific: sysctl "kern.boottime"
+ int request[2] = { CTL_KERN, KERN_BOOTTIME };
+ struct ::timeval result;
+ std::size_t result_len = sizeof result;
+
+ if (::sysctl (request, 2, &result, &result_len, 0, 0) < 0)
+ return;
+
+ char bootstamp_str[256];
+
+ const char Characters [] =
+ { '0', '1', '2', '3', '4', '5', '6', '7'
+ , '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
+ std::size_t char_counter = 0;
+ //32 bit values to allow 32 and 64 bit process IPC
+ boost::uint32_t fields[2] = { boost::uint32_t(result.tv_sec), boost::uint32_t(result.tv_usec) };
+ for(std::size_t field = 0; field != 2; ++field){
+ for(std::size_t i = 0; i != sizeof(fields[0]); ++i){
+ const char *ptr = (const char *)&fields[field];
+ bootstamp_str[char_counter++] = Characters[(ptr[i]&0xF0)>>4];
+ bootstamp_str[char_counter++] = Characters[(ptr[i]&0x0F)];
+ }
+ }
+ bootstamp_str[char_counter] = 0;
+ if(add){
+ s += bootstamp_str;
+ }
+ else{
+ s = bootstamp_str;
+ }
+ }
+ #else
+ #error "BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME defined with no known implementation"
+ #endif
+#endif //#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME)
+
+inline void get_shared_dir_root(std::string &dir_path)
+{
+ #if defined (BOOST_INTERPROCESS_WINDOWS)
+ winapi::get_shared_documents_folder(dir_path);
+ #else
+ dir_path = "/tmp";
+ #endif
+ //We always need this path, so throw on error
+ if(dir_path.empty()){
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
+ }
+ //Remove final null.
+ dir_path += "/boost_interprocess";
+}
+
+inline void get_shared_dir(std::string &shared_dir)
+{
+ #if defined(BOOST_INTERPROCESS_SHARED_DIR_PATH)
+ shared_dir = BOOST_INTERPROCESS_SHARED_DIR_PATH;
+ #else
+ get_shared_dir_root(shared_dir);
+ #if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME)
+ shared_dir += "/";
+ get_bootstamp(shared_dir, true);
+ #endif
+ #endif
+}
+
+inline void shared_filepath(const char *filename, std::string &filepath)
+{
+ get_shared_dir(filepath);
+ filepath += "/";
+ filepath += filename;
+}
+
+inline void create_shared_dir_and_clean_old(std::string &shared_dir)
+{
+ #if defined(BOOST_INTERPROCESS_SHARED_DIR_PATH)
+ shared_dir = BOOST_INTERPROCESS_SHARED_DIR_PATH;
+ #else
+ //First get the temp directory
+ std::string root_shared_dir;
+ get_shared_dir_root(root_shared_dir);
+
+ //If fails, check that it's because already exists
+ if(!create_directory(root_shared_dir.c_str())){
+ error_info info(system_error_code());
+ if(info.get_error_code() != already_exists_error){
+ throw interprocess_exception(info);
+ }
+ }
+
+ #if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME)
+ get_shared_dir(shared_dir);
+
+ //If fails, check that it's because already exists
+ if(!create_directory(shared_dir.c_str())){
+ error_info info(system_error_code());
+ if(info.get_error_code() != already_exists_error){
+ throw interprocess_exception(info);
+ }
+ }
+ //Now erase all old directories created in the previous boot sessions
+ std::string subdir = shared_dir;
+ subdir.erase(0, root_shared_dir.size()+1);
+ delete_subdirectories(root_shared_dir, subdir.c_str());
+ #else
+ shared_dir = root_shared_dir;
+ #endif
+ #endif
+}
+
+inline void create_shared_dir_cleaning_old_and_get_filepath(const char *filename, std::string &shared_dir)
+{
+ create_shared_dir_and_clean_old(shared_dir);
+ shared_dir += "/";
+ shared_dir += filename;
+}
+
+inline void add_leading_slash(const char *name, std::string &new_name)
+{
+ if(name[0] != '/'){
+ new_name = '/';
+ }
+ new_name += name;
+}
+
+} //namespace boost{
+} //namespace interprocess {
+} //namespace ipcdetail {
+
+#include <boost/interprocess/detail/config_end.hpp>
+
+#endif //ifndef BOOST_INTERPROCESS_DETAIL_SHARED_DIR_HELPERS_HPP
diff --git a/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp b/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp
deleted file mode 100644
index e4e867e3f8..0000000000
--- a/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp
+++ /dev/null
@@ -1,181 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////
-//
-// (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)
-//
-// See http://www.boost.org/libs/interprocess for documentation.
-//
-//////////////////////////////////////////////////////////////////////////////
-
-#ifndef BOOST_INTERPROCESS_DETAIL_TMP_DIR_HELPERS_HPP
-#define BOOST_INTERPROCESS_DETAIL_TMP_DIR_HELPERS_HPP
-
-#include <boost/interprocess/detail/config_begin.hpp>
-#include <boost/interprocess/detail/workaround.hpp>
-#include <boost/interprocess/detail/os_file_functions.hpp>
-#include <boost/interprocess/errors.hpp>
-#include <boost/interprocess/exceptions.hpp>
-#include <string>
-
-#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME) && defined(BOOST_INTERPROCESS_WINDOWS)
- #include <boost/interprocess/detail/windows_intermodule_singleton.hpp>
-#endif
-
-namespace boost {
-namespace interprocess {
-namespace ipcdetail {
-
-#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME)
- #if defined(BOOST_INTERPROCESS_WINDOWS)
- //This type will initialize the stamp
- struct windows_bootstamp
- {
- windows_bootstamp()
- {
- winapi::get_last_bootup_time(stamp);
- }
- //Use std::string. Even if this will be constructed in shared memory, all
- //modules/dlls are from this process so internal raw pointers to heap are always valid
- std::string stamp;
- };
-
- inline void get_bootstamp(std::string &s, bool add = false)
- {
- const windows_bootstamp &bootstamp = windows_intermodule_singleton<windows_bootstamp>::get();
- if(add){
- s += bootstamp.stamp;
- }
- else{
- s = bootstamp.stamp;
- }
- }
- #elif defined(BOOST_INTERPROCESS_HAS_BSD_KERNEL_BOOTTIME)
- inline void get_bootstamp(std::string &s, bool add = false)
- {
- // FreeBSD specific: sysctl "kern.boottime"
- int request[2] = { CTL_KERN, KERN_BOOTTIME };
- struct ::timeval result;
- std::size_t result_len = sizeof result;
-
- if (::sysctl (request, 2, &result, &result_len, NULL, 0) < 0)
- return;
-
- char bootstamp_str[256];
-
- const char Characters [] =
- { '0', '1', '2', '3', '4', '5', '6', '7'
- , '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
-
- std::size_t char_counter = 0;
- //32 bit values to allow 32 and 64 bit process IPC
- boost::uint32_t fields[2] = { boost::uint32_t(result.tv_sec), boost::uint32_t(result.tv_usec) };
- for(std::size_t field = 0; field != 2; ++field){
- for(std::size_t i = 0; i != sizeof(fields[0]); ++i){
- const char *ptr = (const char *)&fields[field];
- bootstamp_str[char_counter++] = Characters[(ptr[i]&0xF0)>>4];
- bootstamp_str[char_counter++] = Characters[(ptr[i]&0x0F)];
- }
- }
- bootstamp_str[char_counter] = 0;
- if(add){
- s += bootstamp_str;
- }
- else{
- s = bootstamp_str;
- }
- }
- #else
- #error "BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME defined with no known implementation"
- #endif
-#endif //#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME)
-
-inline void get_tmp_base_dir(std::string &tmp_name)
-{
- #if defined (BOOST_INTERPROCESS_WINDOWS)
- winapi::get_shared_documents_folder(tmp_name);
- if(tmp_name.empty() || !winapi::is_directory(tmp_name.c_str())){
- tmp_name = get_temporary_path();
- }
- #else
- tmp_name = get_temporary_path();
- #endif
- if(tmp_name.empty()){
- error_info err = system_error_code();
- throw interprocess_exception(err);
- }
- //Remove final null.
- tmp_name += "/boost_interprocess";
-}
-
-inline void tmp_folder(std::string &tmp_name)
-{
- get_tmp_base_dir(tmp_name);
- #if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME)
- tmp_name += "/";
- get_bootstamp(tmp_name, true);
- #endif
-}
-
-inline void tmp_filename(const char *filename, std::string &tmp_name)
-{
- tmp_folder(tmp_name);
- tmp_name += "/";
- tmp_name += filename;
-}
-
-inline void create_tmp_and_clean_old(std::string &tmp_name)
-{
- //First get the temp directory
- std::string root_tmp_name;
- get_tmp_base_dir(root_tmp_name);
-
- //If fails, check that it's because already exists
- if(!create_directory(root_tmp_name.c_str())){
- error_info info(system_error_code());
- if(info.get_error_code() != already_exists_error){
- throw interprocess_exception(info);
- }
- }
-
- #if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME)
- tmp_folder(tmp_name);
-
- //If fails, check that it's because already exists
- if(!create_directory(tmp_name.c_str())){
- error_info info(system_error_code());
- if(info.get_error_code() != already_exists_error){
- throw interprocess_exception(info);
- }
- }
- //Now erase all old directories created in the previous boot sessions
- std::string subdir = tmp_name;
- subdir.erase(0, root_tmp_name.size()+1);
- delete_subdirectories(root_tmp_name, subdir.c_str());
- #else
- tmp_name = root_tmp_name;
- #endif
-}
-
-inline void create_tmp_and_clean_old_and_get_filename(const char *filename, std::string &tmp_name)
-{
- create_tmp_and_clean_old(tmp_name);
- tmp_name += "/";
- tmp_name += filename;
-}
-
-inline void add_leading_slash(const char *name, std::string &new_name)
-{
- if(name[0] != '/'){
- new_name = '/';
- }
- new_name += name;
-}
-
-} //namespace boost{
-} //namespace interprocess {
-} //namespace ipcdetail {
-
-#include <boost/interprocess/detail/config_end.hpp>
-
-#endif //ifndef BOOST_INTERPROCESS_DETAIL_TMP_DIR_HELPERS_HPP
diff --git a/3party/boost/boost/interprocess/detail/transform_iterator.hpp b/3party/boost/boost/interprocess/detail/transform_iterator.hpp
index 56bd0e56c9..5496d19568 100644
--- a/3party/boost/boost/interprocess/detail/transform_iterator.hpp
+++ b/3party/boost/boost/interprocess/detail/transform_iterator.hpp
@@ -14,7 +14,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_TRANSFORM_ITERATORS_HPP
#define BOOST_INTERPROCESS_DETAIL_TRANSFORM_ITERATORS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -61,9 +61,9 @@ template <class Iterator, class UnaryFunction>
class transform_iterator
: public UnaryFunction
, public std::iterator
- < typename Iterator::iterator_category
+ < typename std::iterator_traits<Iterator>::iterator_category
, typename ipcdetail::remove_reference<typename UnaryFunction::result_type>::type
- , typename Iterator::difference_type
+ , typename std::iterator_traits<Iterator>::difference_type
, operator_arrow_proxy<typename UnaryFunction::result_type>
, typename UnaryFunction::result_type>
{
@@ -115,33 +115,33 @@ class transform_iterator
friend bool operator>= (const transform_iterator& i, const transform_iterator& i2)
{ return !(i < i2); }
- friend typename Iterator::difference_type operator- (const transform_iterator& i, const transform_iterator& i2)
+ friend typename std::iterator_traits<Iterator>::difference_type operator- (const transform_iterator& i, const transform_iterator& i2)
{ return i2.distance_to(i); }
//Arithmetic
- transform_iterator& operator+=(typename Iterator::difference_type off)
+ transform_iterator& operator+=(typename std::iterator_traits<Iterator>::difference_type off)
{ this->advance(off); return *this; }
- transform_iterator operator+(typename Iterator::difference_type off) const
+ transform_iterator operator+(typename std::iterator_traits<Iterator>::difference_type off) const
{
transform_iterator other(*this);
other.advance(off);
return other;
}
- friend transform_iterator operator+(typename Iterator::difference_type off, const transform_iterator& right)
+ friend transform_iterator operator+(typename std::iterator_traits<Iterator>::difference_type off, const transform_iterator& right)
{ return right + off; }
- transform_iterator& operator-=(typename Iterator::difference_type off)
+ transform_iterator& operator-=(typename std::iterator_traits<Iterator>::difference_type off)
{ this->advance(-off); return *this; }
- transform_iterator operator-(typename Iterator::difference_type off) const
+ transform_iterator operator-(typename std::iterator_traits<Iterator>::difference_type off) const
{ return *this + (-off); }
typename UnaryFunction::result_type operator*() const
{ return dereference(); }
- typename UnaryFunction::result_type operator[](typename Iterator::difference_type off) const
+ typename UnaryFunction::result_type operator[](typename std::iterator_traits<Iterator>::difference_type off) const
{ return UnaryFunction::operator()(m_it[off]); }
operator_arrow_proxy<typename UnaryFunction::result_type>
@@ -172,10 +172,10 @@ class transform_iterator
typename UnaryFunction::result_type dereference() const
{ return UnaryFunction::operator()(*m_it); }
- void advance(typename Iterator::difference_type n)
+ void advance(typename std::iterator_traits<Iterator>::difference_type n)
{ std::advance(m_it, n); }
- typename Iterator::difference_type distance_to(const transform_iterator &other)const
+ typename std::iterator_traits<Iterator>::difference_type distance_to(const transform_iterator &other)const
{ return std::distance(other.m_it, m_it); }
};
diff --git a/3party/boost/boost/interprocess/detail/type_traits.hpp b/3party/boost/boost/interprocess/detail/type_traits.hpp
index ade623f1e6..e56a495754 100644
--- a/3party/boost/boost/interprocess/detail/type_traits.hpp
+++ b/3party/boost/boost/interprocess/detail/type_traits.hpp
@@ -13,7 +13,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP
#define BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/utilities.hpp b/3party/boost/boost/interprocess/detail/utilities.hpp
index 3b486ddcf8..e09f48c1a3 100644
--- a/3party/boost/boost/interprocess/detail/utilities.hpp
+++ b/3party/boost/boost/interprocess/detail/utilities.hpp
@@ -14,7 +14,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_UTILITIES_HPP
#define BOOST_INTERPROCESS_DETAIL_UTILITIES_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -148,9 +148,9 @@ template<class SizeType>
inline bool multiplication_overflows(SizeType a, SizeType b)
{
const SizeType sqrt_size_max = sqrt_size_type_max<SizeType>::value;
- return //Fast runtime check
+ return //Fast runtime check
( (a | b) > sqrt_size_max &&
- //Slow division check
+ //Slow division check
b && a > SizeType(-1)/b
);
}
@@ -168,6 +168,8 @@ template<class RawPointer>
class pointer_size_t_caster
{
public:
+ BOOST_STATIC_ASSERT(sizeof(std::size_t) == sizeof(void*));
+
explicit pointer_size_t_caster(std::size_t sz)
: m_ptr(reinterpret_cast<RawPointer>(sz))
{}
diff --git a/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp b/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp
index 5f2a94a31b..80154e05d2 100644
--- a/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp
+++ b/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP
#define BOOST_INTERPROCESS_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/detail/win32_api.hpp b/3party/boost/boost/interprocess/detail/win32_api.hpp
index 4bffb51c7a..3b4bfb8079 100644
--- a/3party/boost/boost/interprocess/detail/win32_api.hpp
+++ b/3party/boost/boost/interprocess/detail/win32_api.hpp
@@ -24,230 +24,123 @@
#include <vector>
#include <memory>
+#ifdef BOOST_USE_WINDOWS_H
+#include <windows.h>
+#include <Wbemidl.h>
+#include <Objbase.h>
+#include <Shlobj.h>
+#endif
-#if defined (_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
# pragma comment( lib, "Advapi32.lib" )
# pragma comment( lib, "oleaut32.lib" )
# pragma comment( lib, "Ole32.lib" )
# pragma comment( lib, "Psapi.lib" )
+# pragma comment( lib, "Shell32.lib" ) //SHGetSpecialFolderPathA
#endif
-#if (defined BOOST_INTERPROCESS_WINDOWS)
+#if defined (BOOST_INTERPROCESS_WINDOWS)
# include <cstdarg>
# include <boost/detail/interlocked.hpp>
#else
# error "This file can only be included in Windows OS"
#endif
+//////////////////////////////////////////////////////////////////////////////
+//
+// Declaration of Windows structures or typedefs if BOOST_USE_WINDOWS_H is used
+//
+//////////////////////////////////////////////////////////////////////////////
-//The structures used in Interprocess with the
-//same binary interface as windows ones
-namespace boost {
-namespace interprocess {
+namespace boost {
+namespace interprocess {
namespace winapi {
-//Some used constants
-static const unsigned long infinite_time = 0xFFFFFFFF;
-static const unsigned long error_already_exists = 183L;
-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 long error_sharing_violation_tries = 3L;
-static const unsigned long error_sharing_violation_sleep_ms = 250L;
-static const unsigned long error_file_too_large = 223L;
-static const unsigned long error_insufficient_buffer = 122L;
-static const unsigned long error_handle_eof = 38L;
-static const unsigned long semaphore_all_access = (0x000F0000L)|(0x00100000L)|0x3;
-static const unsigned long mutex_all_access = (0x000F0000L)|(0x00100000L)|0x0001;
+//Own defines
+static const unsigned long MaxPath = 260;
-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;
+#ifndef BOOST_USE_WINDOWS_H
-static const unsigned long standard_rights_required = 0x000F0000L;
-static const unsigned long section_query = 0x0001;
-static const unsigned long section_map_write = 0x0002;
-static const unsigned long section_map_read = 0x0004;
-static const unsigned long section_map_execute = 0x0008;
-static const unsigned long section_extend_size = 0x0010;
-static const unsigned long section_all_access = standard_rights_required |
- section_query |
- section_map_write |
- section_map_read |
- section_map_execute |
- section_extend_size;
+struct GUID_BIPC
+{
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[8];
+};
-static const unsigned long file_map_copy = section_query;
-static const unsigned long file_map_write = section_map_write;
-static const unsigned long file_map_read = section_map_read;
-static const unsigned long file_map_all_access = section_all_access;
-static const unsigned long delete_access = 0x00010000L;
-static const unsigned long file_flag_backup_semantics = 0x02000000;
-static const long file_flag_delete_on_close = 0x04000000;
+#if defined(_MSC_VER)
+#pragma warning (push)
+#pragma warning (disable : 4201) // nonstandard extension used
+#endif
-//Native API constants
-static const unsigned long file_open_for_backup_intent = 0x00004000;
-static const int file_share_valid_flags = 0x00000007;
-static const long file_delete_on_close = 0x00001000L;
-static const long obj_case_insensitive = 0x00000040L;
-static const long delete_flag = 0x00010000L;
+struct decimal
+{
+ unsigned short wReserved;
+ union {
+ struct {
+ unsigned char scale;
+ unsigned char sign;
+ };
+ unsigned short signscale;
+ };
+ unsigned long Hi32;
+ union {
+ struct {
+ unsigned long Lo32;
+ unsigned long Mid32;
+ };
+ unsigned __int64 Lo64;
+ };
+};
-static const unsigned long movefile_copy_allowed = 0x02;
-static const unsigned long movefile_delay_until_reboot = 0x04;
-static const unsigned long movefile_replace_existing = 0x01;
-static const unsigned long movefile_write_through = 0x08;
-static const unsigned long movefile_create_hardlink = 0x10;
-static const unsigned long movefile_fail_if_not_trackable = 0x20;
+typedef unsigned short *bstr;
-static const unsigned long file_share_read = 0x00000001;
-static const unsigned long file_share_write = 0x00000002;
-static const unsigned long file_share_delete = 0x00000004;
-static const unsigned long file_attribute_readonly = 0x00000001;
-static const unsigned long file_attribute_hidden = 0x00000002;
-static const unsigned long file_attribute_system = 0x00000004;
-static const unsigned long file_attribute_directory = 0x00000010;
-static const unsigned long file_attribute_archive = 0x00000020;
-static const unsigned long file_attribute_device = 0x00000040;
-static const unsigned long file_attribute_normal = 0x00000080;
-static const unsigned long file_attribute_temporary = 0x00000100;
+struct wchar_variant
+{
+ union
+ {
+ struct
+ {
+ unsigned short vt;
+ unsigned short wReserved1;
+ unsigned short wReserved2;
+ unsigned short wReserved3;
+ union
+ {
+ bstr bstrVal;
+ struct
+ {
+ void* pvRecord;
+ void* pRecInfo;
+ };
+ };
+ };
+ decimal decVal;
+ };
+};
-static const unsigned long generic_read = 0x80000000L;
-static const unsigned long generic_write = 0x40000000L;
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
-static const unsigned long wait_object_0 = 0;
-static const unsigned long wait_abandoned = 0x00000080L;
-static const unsigned long wait_timeout = 258L;
-static const unsigned long wait_failed = (unsigned long)0xFFFFFFFF;
-static const unsigned long duplicate_close_source = (unsigned long)0x00000001;
-static const unsigned long duplicate_same_access = (unsigned long)0x00000002;
-static const unsigned long format_message_allocate_buffer
- = (unsigned long)0x00000100;
-static const unsigned long format_message_ignore_inserts
- = (unsigned long)0x00000200;
-static const unsigned long format_message_from_string
- = (unsigned long)0x00000400;
-static const unsigned long format_message_from_hmodule
- = (unsigned long)0x00000800;
-static const unsigned long format_message_from_system
- = (unsigned long)0x00001000;
-static const unsigned long format_message_argument_array
- = (unsigned long)0x00002000;
-static const unsigned long format_message_max_width_mask
- = (unsigned long)0x000000FF;
-static const unsigned long lang_neutral = (unsigned long)0x00;
-static const unsigned long sublang_default = (unsigned long)0x01;
-static const unsigned long invalid_file_size = (unsigned long)0xFFFFFFFF;
-static const unsigned long invalid_file_attributes = ((unsigned long)-1);
-static void * const invalid_handle_value = ((void*)(long)(-1));
-static const unsigned long file_type_char = 0x0002L;
-static const unsigned long file_type_disk = 0x0001L;
-static const unsigned long file_type_pipe = 0x0003L;
-static const unsigned long file_type_remote = 0x8000L;
-static const unsigned long file_type_unknown = 0x0000L;
-static const unsigned long create_new = 1;
-static const unsigned long create_always = 2;
-static const unsigned long open_existing = 3;
-static const unsigned long open_always = 4;
-static const unsigned long truncate_existing = 5;
-static const unsigned long file_begin = 0;
-static const unsigned long file_current = 1;
-static const unsigned long file_end = 2;
-static const unsigned long lockfile_fail_immediately = 1;
-static const unsigned long lockfile_exclusive_lock = 2;
-static const unsigned long error_lock_violation = 33;
-static const unsigned long security_descriptor_revision = 1;
-const unsigned long max_record_buffer_size = 0x10000L; // 64K
-//Own defines
-static const long SystemTimeOfDayInfoLength = 48;
-static const long BootAndSystemstampLength = 16;
-static const long BootstampLength = 8;
-static const unsigned long MaxPath = 260;
-//Keys
-static void * const hkey_local_machine = (void*)(unsigned long*)(long)(0x80000002);
-static unsigned long key_query_value = 0x0001;
-//COM API
-const unsigned long RPC_C_AUTHN_LEVEL_PKT_BIPC = 4;
-const unsigned long RPC_C_AUTHN_DEFAULT_BIPC = 0xffffffffL;
-const unsigned long RPC_C_AUTHZ_DEFAULT_BIPC = 0xffffffffL;
-const unsigned long RPC_C_IMP_LEVEL_IMPERSONATE_BIPC = 3;
-const signed long EOAC_NONE_BIPC = 0;
-const signed long CLSCTX_INPROC_SERVER_BIPC = 0x1;
-const signed long CLSCTX_LOCAL_SERVER_BIPC = 0x4;
-const signed long WBEM_FLAG_RETURN_IMMEDIATELY_BIPC = 0x10;
-const signed long WBEM_FLAG_RETURN_WHEN_COMPLETE_BIPC = 0x0;
-const signed long WBEM_FLAG_FORWARD_ONLY_BIPC = 0x20;
-const signed long WBEM_INFINITE_BIPC = 0xffffffffL;
-const signed long RPC_E_TOO_LATE_BIPC = 0x80010119L;
-const signed long S_OK_BIPC = 0L;
-const signed long S_FALSE_BIPC = 1;
-const signed long RPC_E_CHANGED_MODE_BIPC = 0x80010106L;
-const unsigned long COINIT_APARTMENTTHREADED_BIPC = 0x2;
-const unsigned long COINIT_MULTITHREADED_BIPC = 0x0;
-const unsigned long COINIT_DISABLE_OLE1DDE_BIPC = 0x4;
-const unsigned long COINIT_SPEED_OVER_MEMORY_BIPC = 0x4;
-//If the user needs to change default COM initialization model,
-//it can define BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL to one of these:
-//
-// COINIT_APARTMENTTHREADED_BIPC
-// COINIT_MULTITHREADED_BIPC
-// COINIT_DISABLE_OLE1DDE_BIPC
-// COINIT_SPEED_OVER_MEMORY_BIPC
-#if !defined(BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL)
- #define BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL COINIT_APARTMENTTHREADED_BIPC
-#elif (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_APARTMENTTHREADED_BIPC) &&\
- (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_MULTITHREADED_BIPC) &&\
- (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_DISABLE_OLE1DDE_BIPC) &&\
- (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_SPEED_OVER_MEMORY_BIPC)
- #error "Wrong value for BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL macro"
-#endif
-} //namespace winapi {
-} //namespace interprocess {
-} //namespace boost {
-namespace boost {
-namespace interprocess {
-namespace winapi {
-struct GUID_BIPC
-{
- unsigned long Data1;
- unsigned short Data2;
- unsigned short Data3;
- unsigned char Data4[8];
-};
-
-const GUID_BIPC CLSID_WbemAdministrativeLocator =
- { 0xcb8555cc, 0x9128, 0x11d1, {0xad, 0x9b, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}};
-
-const GUID_BIPC IID_IUnknown = { 0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
-
-struct wchar_variant
-{
- unsigned long long dummy;
- union value_t{
- wchar_t *pbstrVal;
- unsigned long long dummy;
- } value;
-};
struct IUnknown_BIPC
{
@@ -267,23 +160,23 @@ struct IWbemClassObject_BIPC : public IUnknown_BIPC
/* [out] */ void **ppQualSet) = 0;
virtual long __stdcall Get(
- /* [string][in] */ const wchar_t * wszName,
+ /* [string][in] */ const bstr wszName,
/* [in] */ long lFlags,
/* [unique][in][out] */ wchar_variant *pVal,
/* [unique][in][out] */ long *pType,
/* [unique][in][out] */ long *plFlavor) = 0;
virtual long __stdcall Put(
- /* [string][in] */ const wchar_t * wszName,
+ /* [string][in] */ const bstr wszName,
/* [in] */ long lFlags,
/* [in] */ wchar_variant *pVal,
/* [in] */ long Type) = 0;
virtual long __stdcall Delete(
- /* [string][in] */ const wchar_t * wszName) = 0;
+ /* [string][in] */ const bstr wszName) = 0;
virtual long __stdcall GetNames(
- /* [string][in] */ const wchar_t * wszQualifierName,
+ /* [string][in] */ const bstr wszQualifierName,
/* [in] */ long lFlags,
/* [in] */ wchar_variant *pQualifierVal,
/* [out] */ void * *pNames) = 0;
@@ -293,7 +186,7 @@ struct IWbemClassObject_BIPC : public IUnknown_BIPC
virtual long __stdcall Next(
/* [in] */ long lFlags,
- /* [unique][in][out] */ wchar_t * *strName,
+ /* [unique][in][out] */ bstr *strName,
/* [unique][in][out] */ wchar_variant *pVal,
/* [unique][in][out] */ long *pType,
/* [unique][in][out] */ long *plFlavor) = 0;
@@ -301,7 +194,7 @@ struct IWbemClassObject_BIPC : public IUnknown_BIPC
virtual long __stdcall EndEnumeration( void) = 0;
virtual long __stdcall GetPropertyQualifierSet(
- /* [string][in] */ const wchar_t * wszProperty,
+ /* [string][in] */ const bstr wszProperty,
/* [out] */ void **ppQualSet) = 0;
virtual long __stdcall Clone(
@@ -309,7 +202,7 @@ struct IWbemClassObject_BIPC : public IUnknown_BIPC
virtual long __stdcall GetObjectText(
/* [in] */ long lFlags,
- /* [out] */ wchar_t * *pstrObjectText) = 0;
+ /* [out] */ bstr *pstrObjectText) = 0;
virtual long __stdcall SpawnDerivedClass(
/* [in] */ long lFlags,
@@ -324,45 +217,45 @@ struct IWbemClassObject_BIPC : public IUnknown_BIPC
/* [in] */ IWbemClassObject_BIPC *pCompareTo) = 0;
virtual long __stdcall GetPropertyOrigin(
- /* [string][in] */ const wchar_t * wszName,
- /* [out] */ wchar_t * *pstrClassName) = 0;
+ /* [string][in] */ const bstr wszName,
+ /* [out] */ bstr *pstrClassName) = 0;
virtual long __stdcall InheritsFrom(
- /* [in] */ const wchar_t * strAncestor) = 0;
+ /* [in] */ const bstr strAncestor) = 0;
virtual long __stdcall GetMethod(
- /* [string][in] */ const wchar_t * wszName,
+ /* [string][in] */ const bstr wszName,
/* [in] */ long lFlags,
/* [out] */ IWbemClassObject_BIPC **ppInSignature,
/* [out] */ IWbemClassObject_BIPC **ppOutSignature) = 0;
virtual long __stdcall PutMethod(
- /* [string][in] */ const wchar_t * wszName,
+ /* [string][in] */ const bstr wszName,
/* [in] */ long lFlags,
/* [in] */ IWbemClassObject_BIPC *pInSignature,
/* [in] */ IWbemClassObject_BIPC *pOutSignature) = 0;
virtual long __stdcall DeleteMethod(
- /* [string][in] */ const wchar_t * wszName) = 0;
+ /* [string][in] */ const bstr wszName) = 0;
virtual long __stdcall BeginMethodEnumeration(
/* [in] */ long lEnumFlags) = 0;
virtual long __stdcall NextMethod(
/* [in] */ long lFlags,
- /* [unique][in][out] */ wchar_t * *pstrName,
+ /* [unique][in][out] */ bstr *pstrName,
/* [unique][in][out] */ IWbemClassObject_BIPC **ppInSignature,
/* [unique][in][out] */ IWbemClassObject_BIPC **ppOutSignature) = 0;
virtual long __stdcall EndMethodEnumeration( void) = 0;
virtual long __stdcall GetMethodQualifierSet(
- /* [string][in] */ const wchar_t * wszMethod,
+ /* [string][in] */ const bstr wszMethod,
/* [out] */ void **ppQualSet) = 0;
virtual long __stdcall GetMethodOrigin(
- /* [string][in] */ const wchar_t * wszMethodName,
- /* [out] */ wchar_t * *pstrClassName) = 0;
+ /* [string][in] */ const bstr wszMethodName,
+ /* [out] */ bstr *pstrClassName) = 0;
};
@@ -381,23 +274,23 @@ public:
virtual long __stdcall Next(
/* [in] */ long lFlags,
- /* [out] */ wchar_t * *pstrName,
+ /* [out] */ bstr *pstrName,
/* [out] */ wchar_variant *pValue) = 0;
virtual long __stdcall EndEnumeration( void) = 0;
virtual long __stdcall SetValue(
- /* [string][in] */ const wchar_t * wszName,
+ /* [string][in] */ const bstr wszName,
/* [in] */ long lFlags,
/* [in] */ wchar_variant *pValue) = 0;
virtual long __stdcall GetValue(
- /* [string][in] */ const wchar_t * wszName,
+ /* [string][in] */ const bstr wszName,
/* [in] */ long lFlags,
/* [out] */ wchar_variant *pValue) = 0;
virtual long __stdcall DeleteValue(
- /* [string][in] */ const wchar_t * wszName,
+ /* [string][in] */ const bstr wszName,
/* [in] */ long lFlags) = 0;
virtual long __stdcall DeleteAll( void) = 0;
@@ -433,7 +326,7 @@ struct IWbemServices_BIPC : public IUnknown_BIPC
{
public:
virtual long __stdcall OpenNamespace(
- /* [in] */ const wchar_t * strNamespace,
+ /* [in] */ const bstr strNamespace,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [unique][in][out] */ void **ppWorkingNamespace,
@@ -447,14 +340,14 @@ public:
/* [out] */ void **ppResponseHandler) = 0;
virtual long __stdcall GetObject(
- /* [in] */ const wchar_t * strObjectPath,
+ /* [in] */ const bstr strObjectPath,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [unique][in][out] */ void **ppObject,
/* [unique][in][out] */ void **ppCallResult) = 0;
virtual long __stdcall GetObjectAsync(
- /* [in] */ const wchar_t * strObjectPath,
+ /* [in] */ const bstr strObjectPath,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [in] */ void *pResponseHandler) = 0;
@@ -472,25 +365,25 @@ public:
/* [in] */ void *pResponseHandler) = 0;
virtual long __stdcall DeleteClass(
- /* [in] */ const wchar_t * strClass,
+ /* [in] */ const bstr strClass,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [unique][in][out] */ void **ppCallResult) = 0;
virtual long __stdcall DeleteClassAsync(
- /* [in] */ const wchar_t * strClass,
+ /* [in] */ const bstr strClass,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [in] */ void *pResponseHandler) = 0;
virtual long __stdcall CreateClassEnum(
- /* [in] */ const wchar_t * strSuperclass,
+ /* [in] */ const bstr strSuperclass,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [out] */ void **ppEnum) = 0;
virtual long __stdcall CreateClassEnumAsync(
- /* [in] */ const wchar_t * strSuperclass,
+ /* [in] */ const bstr strSuperclass,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [in] */ void *pResponseHandler) = 0;
@@ -508,60 +401,60 @@ public:
/* [in] */ void *pResponseHandler) = 0;
virtual long __stdcall DeleteInstance(
- /* [in] */ const wchar_t * strObjectPath,
+ /* [in] */ const bstr strObjectPath,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [unique][in][out] */ void **ppCallResult) = 0;
virtual long __stdcall DeleteInstanceAsync(
- /* [in] */ const wchar_t * strObjectPath,
+ /* [in] */ const bstr strObjectPath,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [in] */ void *pResponseHandler) = 0;
virtual long __stdcall CreateInstanceEnum(
- /* [in] */ const wchar_t * strFilter,
+ /* [in] */ const bstr strFilter,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [out] */ void **ppEnum) = 0;
virtual long __stdcall CreateInstanceEnumAsync(
- /* [in] */ const wchar_t * strFilter,
+ /* [in] */ const bstr strFilter,
/* [in] */ long lFlags,
/* [in] */ void *pCtx,
/* [in] */ void *pResponseHandler) = 0;
virtual long __stdcall ExecQuery(
- /* [in] */ const wchar_t * strQueryLanguage,
- /* [in] */ const wchar_t * strQuery,
+ /* [in] */ const bstr strQueryLanguage,
+ /* [in] */ const bstr strQuery,
/* [in] */ long lFlags,
/* [in] */ IWbemContext_BIPC *pCtx,
/* [out] */ IEnumWbemClassObject_BIPC **ppEnum) = 0;
virtual long __stdcall ExecQueryAsync(
- /* [in] */ const wchar_t * strQueryLanguage,
- /* [in] */ const wchar_t * strQuery,
+ /* [in] */ const bstr strQueryLanguage,
+ /* [in] */ const bstr strQuery,
/* [in] */ long lFlags,
/* [in] */ IWbemContext_BIPC *pCtx,
/* [in] */ void *pResponseHandler) = 0;
virtual long __stdcall ExecNotificationQuery(
- /* [in] */ const wchar_t * strQueryLanguage,
- /* [in] */ const wchar_t * strQuery,
+ /* [in] */ const bstr strQueryLanguage,
+ /* [in] */ const bstr strQuery,
/* [in] */ long lFlags,
/* [in] */ IWbemContext_BIPC *pCtx,
/* [out] */ void **ppEnum) = 0;
virtual long __stdcall ExecNotificationQueryAsync(
- /* [in] */ const wchar_t * strQueryLanguage,
- /* [in] */ const wchar_t * strQuery,
+ /* [in] */ const bstr strQueryLanguage,
+ /* [in] */ const bstr strQuery,
/* [in] */ long lFlags,
/* [in] */ IWbemContext_BIPC *pCtx,
/* [in] */ void *pResponseHandler) = 0;
virtual long __stdcall ExecMethod(
- /* [in] */ const wchar_t * strObjectPath,
- /* [in] */ const wchar_t * strMethodName,
+ /* [in] */ const bstr strObjectPath,
+ /* [in] */ const bstr strMethodName,
/* [in] */ long lFlags,
/* [in] */ IWbemContext_BIPC *pCtx,
/* [in] */ IWbemClassObject_BIPC *pInParams,
@@ -569,8 +462,8 @@ public:
/* [unique][in][out] */ void **ppCallResult) = 0;
virtual long __stdcall ExecMethodAsync(
- /* [in] */ const wchar_t * strObjectPath,
- /* [in] */ const wchar_t * strMethodName,
+ /* [in] */ const bstr strObjectPath,
+ /* [in] */ const bstr strMethodName,
/* [in] */ long lFlags,
/* [in] */ IWbemContext_BIPC *pCtx,
/* [in] */ IWbemClassObject_BIPC *pInParams,
@@ -582,12 +475,12 @@ struct IWbemLocator_BIPC : public IUnknown_BIPC
{
public:
virtual long __stdcall ConnectServer(
- /* [in] */ const wchar_t * strNetworkResource,
- /* [in] */ const wchar_t * strUser,
- /* [in] */ const wchar_t * strPassword,
- /* [in] */ const wchar_t * strLocale,
+ /* [in] */ const bstr strNetworkResource,
+ /* [in] */ const bstr strUser,
+ /* [in] */ const bstr strPassword,
+ /* [in] */ const bstr strLocale,
/* [in] */ long lSecurityFlags,
- /* [in] */ const wchar_t * strAuthority,
+ /* [in] */ const bstr strAuthority,
/* [in] */ void *pCtx,
/* [out] */ IWbemServices_BIPC **ppNamespace) = 0;
@@ -608,18 +501,6 @@ struct interprocess_overlapped
void *h_event;
};
-struct interprocess_semaphore_basic_information
-{
- unsigned int count; // current semaphore count
- unsigned int limit; // max semaphore count
-};
-
-struct interprocess_section_basic_information
-{
- void * base_address;
- unsigned long section_attributes;
- __int64 section_size;
-};
struct interprocess_filetime
{
@@ -627,7 +508,7 @@ struct interprocess_filetime
unsigned long dwHighDateTime;
};
-struct win32_find_data_t
+struct win32_find_data
{
unsigned long dwFileAttributes;
interprocess_filetime ftCreationTime;
@@ -667,17 +548,6 @@ struct system_info {
unsigned short wProcessorRevision;
};
-struct interprocess_memory_basic_information
-{
- void * BaseAddress;
- void * AllocationBase;
- unsigned long AllocationProtect;
- unsigned long RegionSize;
- unsigned long State;
- unsigned long Protect;
- unsigned long Type;
-};
-
struct interprocess_acl
{
unsigned char AclRevision;
@@ -687,7 +557,7 @@ struct interprocess_acl
unsigned short Sbz2;
};
-typedef struct _interprocess_security_descriptor
+struct interprocess_security_descriptor
{
unsigned char Revision;
unsigned char Sbz1;
@@ -696,59 +566,134 @@ typedef struct _interprocess_security_descriptor
void *Group;
interprocess_acl *Sacl;
interprocess_acl *Dacl;
-} interprocess_security_descriptor;
+};
-enum file_information_class_t {
- file_directory_information = 1,
- file_full_directory_information,
- file_both_directory_information,
- file_basic_information,
- file_standard_information,
- file_internal_information,
- file_ea_information,
- file_access_information,
- file_name_information,
- file_rename_information,
- file_link_information,
- file_names_information,
- file_disposition_information,
- file_position_information,
- file_full_ea_information,
- file_mode_information,
- file_alignment_information,
- file_all_information,
- file_allocation_information,
- file_end_of_file_information,
- file_alternate_name_information,
- file_stream_information,
- file_pipe_information,
- file_pipe_local_information,
- file_pipe_remote_information,
- file_mailslot_query_information,
- file_mailslot_set_information,
- file_compression_information,
- file_copy_on_write_information,
- file_completion_information,
- file_move_cluster_information,
- file_quota_information,
- file_reparse_point_information,
- file_network_open_information,
- file_object_id_information,
- file_tracking_information,
- file_ole_directory_information,
- file_content_index_information,
- file_inherit_content_index_information,
- file_ole_information,
- file_maximum_information
+struct interprocess_by_handle_file_information
+{
+ unsigned long dwFileAttributes;
+ interprocess_filetime ftCreationTime;
+ interprocess_filetime ftLastAccessTime;
+ interprocess_filetime ftLastWriteTime;
+ unsigned long dwVolumeSerialNumber;
+ unsigned long nFileSizeHigh;
+ unsigned long nFileSizeLow;
+ unsigned long nNumberOfLinks;
+ unsigned long nFileIndexHigh;
+ unsigned long nFileIndexLow;
};
-enum semaphore_information_class {
- semaphore_basic_information = 0
+struct interprocess_eventlogrecord
+{
+ unsigned long Length; // Length of full record
+ unsigned long Reserved; // Used by the service
+ unsigned long RecordNumber; // Absolute record number
+ unsigned long TimeGenerated; // Seconds since 1-1-1970
+ unsigned long TimeWritten; // Seconds since 1-1-1970
+ unsigned long EventID;
+ unsigned short EventType;
+ unsigned short NumStrings;
+ unsigned short EventCategory;
+ unsigned short ReservedFlags; // For use with paired events (auditing)
+ unsigned long ClosingRecordNumber; // For use with paired events (auditing)
+ unsigned long StringOffset; // Offset from beginning of record
+ unsigned long UserSidLength;
+ unsigned long UserSidOffset;
+ unsigned long DataLength;
+ unsigned long DataOffset; // Offset from beginning of record
+ //
+ // Then follow:
+ //
+ // wchar_t SourceName[]
+ // wchar_t Computername[]
+ // SID UserSid
+ // wchar_t Strings[]
+ // BYTE Data[]
+ // CHAR Pad[]
+ // unsigned long Length;
+ //
};
-struct file_name_information_t {
- unsigned long FileNameLength;
- wchar_t FileName[1];
+union large_integer
+{
+ __int64 QuadPart;
+};
+
+struct hinstance_struct { int unused; };
+typedef hinstance_struct *hmodule;
+
+struct hkey_struct;
+typedef hkey_struct *hkey;
+
+#ifdef _WIN64
+typedef __int64 (__stdcall *farproc_t)();
+#else
+typedef int (__stdcall *farproc_t)();
+#endif // _WIN64
+
+#else //#ifndef BOOST_USE_WINDOWS_H
+
+typedef GUID GUID_BIPC;
+typedef VARIANT wchar_variant;
+
+typedef IUnknown IUnknown_BIPC;
+
+typedef IWbemClassObject IWbemClassObject_BIPC;
+
+typedef IWbemContext IWbemContext_BIPC;
+
+typedef IEnumWbemClassObject IEnumWbemClassObject_BIPC;
+
+typedef IWbemServices IWbemServices_BIPC;
+
+typedef IWbemLocator IWbemLocator_BIPC;
+
+typedef OVERLAPPED interprocess_overlapped;
+
+typedef FILETIME interprocess_filetime;
+
+typedef WIN32_FIND_DATA win32_find_data;
+
+typedef SECURITY_ATTRIBUTES interprocess_security_attributes;
+
+typedef SYSTEM_INFO system_info;
+
+typedef ACL interprocess_acl;
+
+typedef SECURITY_DESCRIPTOR interprocess_security_descriptor;
+
+typedef BY_HANDLE_FILE_INFORMATION interprocess_by_handle_file_information;
+
+typedef EVENTLOGRECORD interprocess_eventlogrecord;
+
+typedef LARGE_INTEGER large_integer;
+
+typedef HMODULE hmodule;
+
+typedef HKEY hkey;
+
+typedef BSTR bstr;
+
+typedef FARPROC farproc_t;
+
+#endif //#ifndef BOOST_USE_WINDOWS_H
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Nt native structures
+//
+//////////////////////////////////////////////////////////////////////////////
+
+struct interprocess_semaphore_basic_information
+{
+ unsigned int count; // current semaphore count
+ unsigned int limit; // max semaphore count
+};
+
+struct interprocess_section_basic_information
+{
+ void * base_address;
+ unsigned long section_attributes;
+ __int64 section_size;
};
struct file_rename_information_t {
@@ -791,24 +736,71 @@ union system_timeofday_information
__int64 liExpTimeZoneBias;
unsigned long uCurrentTimeZoneId;
unsigned long dwReserved;
+ unsigned __int64 ullBootTimeBias;
+ unsigned __int64 ullSleepTimeBias;
} data;
- unsigned char Reserved1[SystemTimeOfDayInfoLength];
+ unsigned char Reserved1[sizeof(data_t)];
};
-struct interprocess_by_handle_file_information
+static const long BootstampLength = sizeof(__int64);
+static const long BootAndSystemstampLength = sizeof(__int64)*2;
+static const long SystemTimeOfDayInfoLength = sizeof(system_timeofday_information::data_t);
+
+struct object_name_information_t
{
- unsigned long dwFileAttributes;
- interprocess_filetime ftCreationTime;
- interprocess_filetime ftLastAccessTime;
- interprocess_filetime ftLastWriteTime;
- unsigned long dwVolumeSerialNumber;
- unsigned long nFileSizeHigh;
- unsigned long nFileSizeLow;
- unsigned long nNumberOfLinks;
- unsigned long nFileIndexHigh;
- unsigned long nFileIndexLow;
+ unicode_string_t Name;
+ wchar_t NameBuffer[1];
+};
+
+enum file_information_class_t {
+ file_directory_information = 1,
+ file_full_directory_information,
+ file_both_directory_information,
+ file_basic_information,
+ file_standard_information,
+ file_internal_information,
+ file_ea_information,
+ file_access_information,
+ file_name_information,
+ file_rename_information,
+ file_link_information,
+ file_names_information,
+ file_disposition_information,
+ file_position_information,
+ file_full_ea_information,
+ file_mode_information,
+ file_alignment_information,
+ file_all_information,
+ file_allocation_information,
+ file_end_of_file_information,
+ file_alternate_name_information,
+ file_stream_information,
+ file_pipe_information,
+ file_pipe_local_information,
+ file_pipe_remote_information,
+ file_mailslot_query_information,
+ file_mailslot_set_information,
+ file_compression_information,
+ file_copy_on_write_information,
+ file_completion_information,
+ file_move_cluster_information,
+ file_quota_information,
+ file_reparse_point_information,
+ file_network_open_information,
+ file_object_id_information,
+ file_tracking_information,
+ file_ole_directory_information,
+ file_content_index_information,
+ file_inherit_content_index_information,
+ file_ole_information,
+ file_maximum_information
+};
+
+enum semaphore_information_class {
+ semaphore_basic_information = 0
};
+
enum system_information_class {
system_basic_information = 0,
system_performance_information = 2,
@@ -836,42 +828,13 @@ enum section_information_class
section_image_information
};
-struct object_name_information_t
-{
- unicode_string_t Name;
- wchar_t NameBuffer[1];
-};
+//////////////////////////////////////////////////////////////////////////////
+//
+// Forward declaration of winapi
+//
+//////////////////////////////////////////////////////////////////////////////
-struct interprocess_eventlogrecord
-{
- unsigned long Length; // Length of full record
- unsigned long Reserved; // Used by the service
- unsigned long RecordNumber; // Absolute record number
- unsigned long TimeGenerated; // Seconds since 1-1-1970
- unsigned long TimeWritten; // Seconds since 1-1-1970
- unsigned long EventID;
- unsigned short EventType;
- unsigned short NumStrings;
- unsigned short EventCategory;
- unsigned short ReservedFlags; // For use with paired events (auditing)
- unsigned long ClosingRecordNumber; // For use with paired events (auditing)
- unsigned long StringOffset; // Offset from beginning of record
- unsigned long UserSidLength;
- unsigned long UserSidOffset;
- unsigned long DataLength;
- unsigned long DataOffset; // Offset from beginning of record
- //
- // Then follow:
- //
- // wchar_t SourceName[]
- // wchar_t Computername[]
- // SID UserSid
- // wchar_t Strings[]
- // BYTE Data[]
- // CHAR Pad[]
- // unsigned long Length;
- //
-};
+#ifndef BOOST_USE_WINDOWS_H
//Kernel32.dll
@@ -883,6 +846,7 @@ extern "C" __declspec(dllimport) int __stdcall GetProcessTimes
, interprocess_filetime *lpExitTime,interprocess_filetime *lpKernelTime
, interprocess_filetime *lpUserTime );
extern "C" __declspec(dllimport) void __stdcall Sleep(unsigned long);
+extern "C" __declspec(dllimport) unsigned long __stdcall GetTickCount(void);
extern "C" __declspec(dllimport) int __stdcall SwitchToThread();
extern "C" __declspec(dllimport) unsigned long __stdcall GetLastError();
extern "C" __declspec(dllimport) void __stdcall SetLastError(unsigned long);
@@ -894,8 +858,8 @@ extern "C" __declspec(dllimport) int __stdcall DuplicateHandle
, unsigned long dwDesiredAccess, int bInheritHandle
, unsigned long dwOptions);
extern "C" __declspec(dllimport) long __stdcall GetFileType(void *hFile);
-extern "C" __declspec(dllimport) void *__stdcall FindFirstFileA(const char *lpFileName, win32_find_data_t *lpFindFileData);
-extern "C" __declspec(dllimport) int __stdcall FindNextFileA(void *hFindFile, win32_find_data_t *lpFindFileData);
+extern "C" __declspec(dllimport) void *__stdcall FindFirstFileA(const char *lpFileName, win32_find_data *lpFindFileData);
+extern "C" __declspec(dllimport) int __stdcall FindNextFileA(void *hFindFile, win32_find_data *lpFindFileData);
extern "C" __declspec(dllimport) int __stdcall FindClose(void *hFindFile);
//extern "C" __declspec(dllimport) void __stdcall GetSystemTimeAsFileTime(interprocess_filetime*);
//extern "C" __declspec(dllimport) int __stdcall FileTimeToLocalFileTime(const interprocess_filetime *in, const interprocess_filetime *out);
@@ -916,7 +880,7 @@ extern "C" __declspec(dllimport) int __stdcall FlushViewOfFile (void *, std::siz
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) int __stdcall GetFileSizeEx (void *, large_integer *size);
extern "C" __declspec(dllimport) unsigned long __stdcall FormatMessageA
(unsigned long dwFlags, const void *lpSource, unsigned long dwMessageId,
unsigned long dwLanguageId, char *lpBuffer, unsigned long nSize,
@@ -929,7 +893,7 @@ extern "C" __declspec(dllimport) int __stdcall GetTempPathA(unsigned long length
extern "C" __declspec(dllimport) int __stdcall CreateDirectory(const char *, interprocess_security_attributes*);
extern "C" __declspec(dllimport) int __stdcall SetFileValidData(void *, __int64 size);
extern "C" __declspec(dllimport) int __stdcall SetEndOfFile(void *);
-extern "C" __declspec(dllimport) int __stdcall SetFilePointerEx(void *, __int64 distance, __int64 *new_file_pointer, unsigned long move_method);
+extern "C" __declspec(dllimport) int __stdcall SetFilePointerEx(void *, large_integer distance, large_integer *new_file_pointer, unsigned long move_method);
extern "C" __declspec(dllimport) int __stdcall LockFile (void *hnd, unsigned long offset_low, unsigned long offset_high, unsigned long size_low, unsigned long size_high);
extern "C" __declspec(dllimport) int __stdcall UnlockFile(void *hnd, unsigned long offset_low, unsigned long offset_high, unsigned long size_low, unsigned long size_high);
extern "C" __declspec(dllimport) int __stdcall LockFileEx(void *hnd, unsigned long flags, unsigned long reserved, unsigned long size_low, unsigned long size_high, interprocess_overlapped* overlapped);
@@ -938,17 +902,16 @@ extern "C" __declspec(dllimport) int __stdcall WriteFile(void *hnd, const void *
extern "C" __declspec(dllimport) int __stdcall ReadFile(void *hnd, void *buffer, unsigned long bytes_to_read, unsigned long *bytes_read, interprocess_overlapped* overlapped);
extern "C" __declspec(dllimport) int __stdcall InitializeSecurityDescriptor(interprocess_security_descriptor *pSecurityDescriptor, unsigned long dwRevision);
extern "C" __declspec(dllimport) int __stdcall SetSecurityDescriptorDacl(interprocess_security_descriptor *pSecurityDescriptor, int bDaclPresent, interprocess_acl *pDacl, int bDaclDefaulted);
-extern "C" __declspec(dllimport) void *__stdcall LoadLibraryA(const char *);
-extern "C" __declspec(dllimport) int __stdcall FreeLibrary(void *);
-extern "C" __declspec(dllimport) void *__stdcall GetProcAddress(void *, const char*);
-extern "C" __declspec(dllimport) void *__stdcall GetModuleHandleA(const char*);
+extern "C" __declspec(dllimport) hmodule __stdcall LoadLibraryA(const char *);
+extern "C" __declspec(dllimport) int __stdcall FreeLibrary(hmodule);
+extern "C" __declspec(dllimport) farproc_t __stdcall GetProcAddress(void *, const char*);
+extern "C" __declspec(dllimport) hmodule __stdcall GetModuleHandleA(const char*);
extern "C" __declspec(dllimport) void *__stdcall GetFileInformationByHandle(void *, interprocess_by_handle_file_information*);
-extern "C" __declspec(dllimport) int __stdcall QueryPerformanceCounter(__int64 *lpPerformanceCount);
//Advapi32.dll
-extern "C" __declspec(dllimport) long __stdcall RegOpenKeyExA(void *, const char *, unsigned long, unsigned long, void **);
-extern "C" __declspec(dllimport) long __stdcall RegQueryValueExA(void *, const char *, unsigned long*, unsigned long*, unsigned char *, unsigned long*);
-extern "C" __declspec(dllimport) long __stdcall RegCloseKey(void *);
+extern "C" __declspec(dllimport) long __stdcall RegOpenKeyExA(hkey, const char *, unsigned long, unsigned long, hkey*);
+extern "C" __declspec(dllimport) long __stdcall RegQueryValueExA(hkey, const char *, unsigned long*, unsigned long*, unsigned char *, unsigned long*);
+extern "C" __declspec(dllimport) long __stdcall RegCloseKey(hkey);
//Ole32.dll
extern "C" __declspec(dllimport) long __stdcall CoInitializeEx(void *pvReserved, unsigned long dwCoInit);
@@ -979,11 +942,13 @@ extern "C" __declspec(dllimport) void __stdcall CoUninitialize(void);
//OleAut32.dll
extern "C" __declspec(dllimport) long __stdcall VariantClear(wchar_variant * pvarg);
+//Shell32.dll
+extern "C" __declspec(dllimport) int __stdcall SHGetSpecialFolderPathA
+ (void* hwnd, const char *pszPath, int csidl, int fCreate);
-//EventLog access functions
+extern "C" __declspec(dllimport) int __stdcall SHGetFolderPathA(void *hwnd, int csidl, void *hToken, unsigned long dwFlags, const char *pszPath);
-static const unsigned long eventlog_sequential_read = 0x0001;
-static const unsigned long eventlog_backwards_read = 0x0008;
+//EventLog access functions
extern "C" __declspec(dllimport) void* __stdcall OpenEventLogA
(const char* lpUNCServerName, const char* lpSourceName);
@@ -1000,6 +965,11 @@ extern "C" __declspec(dllimport) int __stdcall ReadEventLogA
unsigned long *pnMinNumberOfBytesNeeded
);
+#endif //#ifndef BOOST_USE_WINDOWS_H
+
+//kernel32.dll
+typedef int (__stdcall *QueryPerformanceCounter_t) (__int64 *lpPerformanceCount);
+typedef int (__stdcall *QueryPerformanceFrequency_t)(__int64 *lpFrequency);
//ntdll.dll
typedef long (__stdcall *NtDeleteFile_t)(object_attributes_t *ObjectAttributes);
@@ -1013,11 +983,203 @@ typedef long (__stdcall *NtQuerySection_t)(void*, section_information_class, int
typedef long (__stdcall *NtQueryInformationFile_t)(void *,io_status_block_t *,void *, long, int);
typedef long (__stdcall *NtOpenFile_t)(void*,unsigned long ,object_attributes_t*,io_status_block_t*,unsigned long,unsigned long);
typedef long (__stdcall *NtClose_t) (void*);
+typedef long (__stdcall *NtQueryTimerResolution_t) (unsigned long* LowestResolution, unsigned long* HighestResolution, unsigned long* CurrentResolution);
+typedef long (__stdcall *NtSetTimerResolution_t) (unsigned long RequestedResolution, int Set, unsigned long* ActualResolution);
+
+} //namespace winapi {
+} //namespace interprocess {
+} //namespace boost {
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Forward declaration of constants
+//
+//////////////////////////////////////////////////////////////////////////////
+
+namespace boost {
+namespace interprocess {
+namespace winapi {
+
+//Some used constants
+static const unsigned long infinite_time = 0xFFFFFFFF;
+static const unsigned long error_already_exists = 183L;
+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 long error_sharing_violation_tries = 3L;
+static const unsigned long error_sharing_violation_sleep_ms = 250L;
+static const unsigned long error_file_too_large = 223L;
+static const unsigned long error_insufficient_buffer = 122L;
+static const unsigned long error_handle_eof = 38L;
+static const unsigned long semaphore_all_access = (0x000F0000L)|(0x00100000L)|0x3;
+static const unsigned long mutex_all_access = (0x000F0000L)|(0x00100000L)|0x0001;
+
+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;
+static const unsigned long section_map_write = 0x0002;
+static const unsigned long section_map_read = 0x0004;
+static const unsigned long section_map_execute = 0x0008;
+static const unsigned long section_extend_size = 0x0010;
+static const unsigned long section_all_access = standard_rights_required |
+ section_query |
+ section_map_write |
+ section_map_read |
+ section_map_execute |
+ section_extend_size;
+
+static const unsigned long file_map_copy = section_query;
+static const unsigned long file_map_write = section_map_write;
+static const unsigned long file_map_read = section_map_read;
+static const unsigned long file_map_all_access = section_all_access;
+static const unsigned long delete_access = 0x00010000L;
+static const unsigned long file_flag_backup_semantics = 0x02000000;
+static const long file_flag_delete_on_close = 0x04000000;
+
+//Native API constants
+static const unsigned long file_open_for_backup_intent = 0x00004000;
+static const int file_share_valid_flags = 0x00000007;
+static const long file_delete_on_close = 0x00001000L;
+static const long obj_case_insensitive = 0x00000040L;
+static const long delete_flag = 0x00010000L;
+
+static const unsigned long movefile_copy_allowed = 0x02;
+static const unsigned long movefile_delay_until_reboot = 0x04;
+static const unsigned long movefile_replace_existing = 0x01;
+static const unsigned long movefile_write_through = 0x08;
+static const unsigned long movefile_create_hardlink = 0x10;
+static const unsigned long movefile_fail_if_not_trackable = 0x20;
+
+static const unsigned long file_share_read = 0x00000001;
+static const unsigned long file_share_write = 0x00000002;
+static const unsigned long file_share_delete = 0x00000004;
+
+static const unsigned long file_attribute_readonly = 0x00000001;
+static const unsigned long file_attribute_hidden = 0x00000002;
+static const unsigned long file_attribute_system = 0x00000004;
+static const unsigned long file_attribute_directory = 0x00000010;
+static const unsigned long file_attribute_archive = 0x00000020;
+static const unsigned long file_attribute_device = 0x00000040;
+static const unsigned long file_attribute_normal = 0x00000080;
+static const unsigned long file_attribute_temporary = 0x00000100;
+
+static const unsigned long generic_read = 0x80000000L;
+static const unsigned long generic_write = 0x40000000L;
+
+static const unsigned long wait_object_0 = 0;
+static const unsigned long wait_abandoned = 0x00000080L;
+static const unsigned long wait_timeout = 258L;
+static const unsigned long wait_failed = (unsigned long)0xFFFFFFFF;
+
+static const unsigned long duplicate_close_source = (unsigned long)0x00000001;
+static const unsigned long duplicate_same_access = (unsigned long)0x00000002;
+
+static const unsigned long format_message_allocate_buffer
+ = (unsigned long)0x00000100;
+static const unsigned long format_message_ignore_inserts
+ = (unsigned long)0x00000200;
+static const unsigned long format_message_from_string
+ = (unsigned long)0x00000400;
+static const unsigned long format_message_from_hmodule
+ = (unsigned long)0x00000800;
+static const unsigned long format_message_from_system
+ = (unsigned long)0x00001000;
+static const unsigned long format_message_argument_array
+ = (unsigned long)0x00002000;
+static const unsigned long format_message_max_width_mask
+ = (unsigned long)0x000000FF;
+static const unsigned long lang_neutral = (unsigned long)0x00;
+static const unsigned long sublang_default = (unsigned long)0x01;
+static const unsigned long invalid_file_size = (unsigned long)0xFFFFFFFF;
+static const unsigned long invalid_file_attributes = ((unsigned long)-1);
+static void * const invalid_handle_value = ((void*)(long)(-1));
+
+static const unsigned long file_type_char = 0x0002L;
+static const unsigned long file_type_disk = 0x0001L;
+static const unsigned long file_type_pipe = 0x0003L;
+static const unsigned long file_type_remote = 0x8000L;
+static const unsigned long file_type_unknown = 0x0000L;
+
+static const unsigned long create_new = 1;
+static const unsigned long create_always = 2;
+static const unsigned long open_existing = 3;
+static const unsigned long open_always = 4;
+static const unsigned long truncate_existing = 5;
+
+static const unsigned long file_begin = 0;
+static const unsigned long file_current = 1;
+static const unsigned long file_end = 2;
+
+static const unsigned long lockfile_fail_immediately = 1;
+static const unsigned long lockfile_exclusive_lock = 2;
+static const unsigned long error_lock_violation = 33;
+static const unsigned long security_descriptor_revision = 1;
+
+const unsigned long max_record_buffer_size = 0x10000L; // 64K
+const unsigned long max_path = 260;
+
+//Keys
+static const hkey hkey_local_machine = (hkey)(unsigned long*)(long)(0x80000002);
+static unsigned long key_query_value = 0x0001;
+
+//COM API
+const unsigned long RPC_C_AUTHN_LEVEL_PKT_BIPC = 4;
+const unsigned long RPC_C_AUTHN_DEFAULT_BIPC = 0xffffffffL;
+const unsigned long RPC_C_AUTHZ_DEFAULT_BIPC = 0xffffffffL;
+const unsigned long RPC_C_IMP_LEVEL_IMPERSONATE_BIPC = 3;
+const signed long EOAC_NONE_BIPC = 0;
+const signed long CLSCTX_INPROC_SERVER_BIPC = 0x1;
+const signed long CLSCTX_LOCAL_SERVER_BIPC = 0x4;
+const signed long WBEM_FLAG_RETURN_IMMEDIATELY_BIPC = 0x10;
+const signed long WBEM_FLAG_RETURN_WHEN_COMPLETE_BIPC = 0x0;
+const signed long WBEM_FLAG_FORWARD_ONLY_BIPC = 0x20;
+const signed long WBEM_INFINITE_BIPC = 0xffffffffL;
+const signed long RPC_E_TOO_LATE_BIPC = 0x80010119L;
+const signed long S_OK_BIPC = 0L;
+const signed long S_FALSE_BIPC = 1;
+const signed long RPC_E_CHANGED_MODE_BIPC = 0x80010106L;
+const unsigned long COINIT_APARTMENTTHREADED_BIPC = 0x2;
+const unsigned long COINIT_MULTITHREADED_BIPC = 0x0;
+const unsigned long COINIT_DISABLE_OLE1DDE_BIPC = 0x4;
+const unsigned long COINIT_SPEED_OVER_MEMORY_BIPC = 0x4;
+
+
+//If the user needs to change default COM initialization model,
+//it can define BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL to one of these:
+//
+// COINIT_APARTMENTTHREADED_BIPC
+// COINIT_MULTITHREADED_BIPC
+// COINIT_DISABLE_OLE1DDE_BIPC
+// COINIT_SPEED_OVER_MEMORY_BIPC
+#if !defined(BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL)
+ #define BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL COINIT_APARTMENTTHREADED_BIPC
+#elif (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_APARTMENTTHREADED_BIPC) &&\
+ (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_MULTITHREADED_BIPC) &&\
+ (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_DISABLE_OLE1DDE_BIPC) &&\
+ (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_SPEED_OVER_MEMORY_BIPC)
+ #error "Wrong value for BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL macro"
+#endif
+
+const GUID_BIPC CLSID_WbemAdministrativeLocator =
+ { 0xcb8555cc, 0x9128, 0x11d1, {0xad, 0x9b, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}};
+
+const GUID_BIPC IID_IUnknown = { 0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+
+static const unsigned long eventlog_sequential_read = 0x0001;
+static const unsigned long eventlog_backwards_read = 0x0008;
} //namespace winapi {
} //namespace interprocess {
} //namespace boost {
+
namespace boost {
namespace interprocess {
namespace winapi {
@@ -1047,10 +1209,13 @@ inline unsigned long make_lang_id(unsigned long p, unsigned long s)
inline void sched_yield()
{
if(!SwitchToThread()){
- Sleep(1);
+ Sleep(0);
}
}
+inline void sleep_tick()
+{ Sleep(1); }
+
inline void sleep(unsigned long ms)
{ Sleep(ms); }
@@ -1069,10 +1234,10 @@ inline unsigned long get_current_process_id()
inline unsigned int close_handle(void* handle)
{ return CloseHandle(handle); }
-inline void * find_first_file(const char *lpFileName, win32_find_data_t *lpFindFileData)
+inline void * find_first_file(const char *lpFileName, win32_find_data *lpFindFileData)
{ return FindFirstFileA(lpFileName, lpFindFileData); }
-inline bool find_next_file(void *hFindFile, win32_find_data_t *lpFindFileData)
+inline bool find_next_file(void *hFindFile, win32_find_data *lpFindFileData)
{ return FindNextFileA(hFindFile, lpFindFileData) != 0; }
inline bool find_close(void *handle)
@@ -1195,7 +1360,7 @@ inline bool flush_file_buffers(void *handle)
{ return 0 != FlushFileBuffers(handle); }
inline bool get_file_size(void *handle, __int64 &size)
-{ return 0 != GetFileSizeEx(handle, &size); }
+{ return 0 != GetFileSizeEx(handle, (large_integer*)&size); }
inline bool create_directory(const char *name)
{
@@ -1213,7 +1378,10 @@ inline int set_end_of_file(void *handle)
{ return 0 != SetEndOfFile(handle); }
inline bool set_file_pointer_ex(void *handle, __int64 distance, __int64 *new_file_pointer, unsigned long move_method)
-{ return 0 != SetFilePointerEx(handle, distance, new_file_pointer, move_method); }
+{
+ large_integer d; d.QuadPart = distance;
+ return 0 != SetFilePointerEx(handle, d, (large_integer*)new_file_pointer, move_method);
+}
inline bool lock_file_ex(void *hnd, unsigned long flags, unsigned long reserved, unsigned long size_low, unsigned long size_high, interprocess_overlapped *overlapped)
{ return 0 != LockFileEx(hnd, flags, reserved, size_low, size_high, overlapped); }
@@ -1246,35 +1414,30 @@ inline long interlocked_exchange(long volatile* addend, long value)
{ return BOOST_INTERLOCKED_EXCHANGE(const_cast<long*>(addend), value); }
//Forward functions
-inline void *load_library(const char *name)
+inline hmodule load_library(const char *name)
{ return LoadLibraryA(name); }
-inline bool free_library(void *module)
+inline bool free_library(hmodule module)
{ return 0 != FreeLibrary(module); }
-inline void *get_proc_address(void *module, const char *name)
+inline farproc_t get_proc_address(hmodule module, const char *name)
{ return GetProcAddress(module, name); }
inline void *get_current_process()
{ return GetCurrentProcess(); }
-inline void *get_module_handle(const char *name)
+inline hmodule get_module_handle(const char *name)
{ return GetModuleHandleA(name); }
-inline long reg_open_key_ex(void *hKey, const char *lpSubKey, unsigned long ulOptions, unsigned long samDesired, void **phkResult)
+inline long reg_open_key_ex(hkey hKey, const char *lpSubKey, unsigned long ulOptions, unsigned long samDesired, hkey *phkResult)
{ return RegOpenKeyExA(hKey, lpSubKey, ulOptions, samDesired, phkResult); }
-inline long reg_query_value_ex(void *hKey, const char *lpValueName, unsigned long*lpReserved, unsigned long*lpType, unsigned char *lpData, unsigned long*lpcbData)
+inline long reg_query_value_ex(hkey hKey, const char *lpValueName, unsigned long*lpReserved, unsigned long*lpType, unsigned char *lpData, unsigned long*lpcbData)
{ return RegQueryValueExA(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData); }
-inline long reg_close_key(void *hKey)
+inline long reg_close_key(hkey hKey)
{ return RegCloseKey(hKey); }
-inline bool query_performance_counter(__int64 *lpPerformanceCount)
-{
- return 0 != QueryPerformanceCounter(lpPerformanceCount);
-}
-
inline void initialize_object_attributes
( object_attributes_t *pobject_attr, unicode_string_t *name
, unsigned long attr, void *rootdir, void *security_descr)
@@ -1299,59 +1462,81 @@ inline void rtl_init_empty_unicode_string(unicode_string_t *ucStr, wchar_t *buf,
template<int Dummy>
struct function_address_holder
{
- enum { NtSetInformationFile, NtQuerySystemInformation, NtQueryObject, NtQuerySemaphore, NtQuerySection, NtOpenFile, NtClose, NumFunction };
- enum { NtDll_dll, NumModule };
+ enum { NtSetInformationFile
+ , NtQuerySystemInformation
+ , NtQueryObject
+ , NtQuerySemaphore
+ , NtQuerySection
+ , NtOpenFile
+ , NtClose
+ , NtQueryTimerResolution
+ , NtSetTimerResolution
+ , QueryPerformanceCounter
+ , QueryPerformanceFrequency
+ , NumFunction
+ };
+ enum { NtDll_dll, Kernel32_dll, NumModule };
private:
static const char *FunctionNames[NumFunction];
static const char *ModuleNames[NumModule];
- static void *FunctionAddresses[NumFunction];
+ static farproc_t FunctionAddresses[NumFunction];
static unsigned int FunctionModules[NumFunction];
static volatile long FunctionStates[NumFunction];
- static void *ModuleAddresses[NumModule];
+ static hmodule ModuleAddresses[NumModule];
static volatile long ModuleStates[NumModule];
- static void *get_module_from_id(unsigned int id)
+ static hmodule get_module_from_id(unsigned int id)
{
BOOST_ASSERT(id < (unsigned int)NumModule);
- return get_module_handle(ModuleNames[id]);
+ hmodule addr = get_module_handle(ModuleNames[id]);
+ BOOST_ASSERT(addr);
+ return addr;
}
- static void *get_module(const unsigned int id)
+ static hmodule get_module(const unsigned int id)
{
BOOST_ASSERT(id < (unsigned int)NumModule);
- while(ModuleStates[id] < 2){
+ for(unsigned i = 0; ModuleStates[id] < 2; ++i){
if(interlocked_compare_exchange(&ModuleStates[id], 1, 0) == 0){
ModuleAddresses[id] = get_module_from_id(id);
interlocked_increment(&ModuleStates[id]);
break;
}
- else{
+ else if(i & 1){
sched_yield();
}
+ else{
+ sleep_tick();
+ }
}
return ModuleAddresses[id];
}
- static void *get_address_from_dll(const unsigned int id)
+ static farproc_t get_address_from_dll(const unsigned int id)
{
BOOST_ASSERT(id < (unsigned int)NumFunction);
- return get_proc_address(get_module(FunctionModules[id]), FunctionNames[id]);
+ farproc_t addr = get_proc_address(get_module(FunctionModules[id]), FunctionNames[id]);
+ BOOST_ASSERT(addr);
+ return addr;
}
public:
static void *get(const unsigned int id)
{
BOOST_ASSERT(id < (unsigned int)NumFunction);
- while(FunctionStates[id] < 2){
+ for(unsigned i = 0; FunctionStates[id] < 2; ++i){
if(interlocked_compare_exchange(&FunctionStates[id], 1, 0) == 0){
FunctionAddresses[id] = get_address_from_dll(id);
interlocked_increment(&FunctionStates[id]);
break;
}
- else{
+ else if(i & 1){
sched_yield();
}
+ else{
+ sleep_tick();
+ }
}
return FunctionAddresses[id];
}
@@ -1366,11 +1551,15 @@ const char *function_address_holder<Dummy>::FunctionNames[function_address_holde
"NtQuerySemaphore",
"NtQuerySection",
"NtOpenFile",
- "NtClose"
+ "NtClose",
+ "NtQueryTimerResolution",
+ "NtSetTimerResolution",
+ "QueryPerformanceCounter",
+ "QueryPerformanceFrequency"
};
template<int Dummy>
-unsigned int function_address_holder<Dummy>::FunctionModules[function_address_holder<Dummy>::NumFunction] =
+unsigned int function_address_holder<Dummy>::FunctionModules[function_address_holder<Dummy>::NumFunction] =
{
NtDll_dll,
NtDll_dll,
@@ -1378,24 +1567,29 @@ unsigned int function_address_holder<Dummy>::FunctionModules[function_address_ho
NtDll_dll,
NtDll_dll,
NtDll_dll,
- NtDll_dll
+ NtDll_dll,
+ NtDll_dll,
+ NtDll_dll,
+ Kernel32_dll,
+ Kernel32_dll
};
template<int Dummy>
-const char *function_address_holder<Dummy>::ModuleNames[function_address_holder<Dummy>::NumModule] =
+const char *function_address_holder<Dummy>::ModuleNames[function_address_holder<Dummy>::NumModule] =
{
- "ntdll.dll"
+ "ntdll.dll",
+ "kernel32.dll"
};
template<int Dummy>
-void *function_address_holder<Dummy>::FunctionAddresses[function_address_holder<Dummy>::NumFunction];
+farproc_t function_address_holder<Dummy>::FunctionAddresses[function_address_holder<Dummy>::NumFunction];
template<int Dummy>
volatile long function_address_holder<Dummy>::FunctionStates[function_address_holder<Dummy>::NumFunction];
template<int Dummy>
-void *function_address_holder<Dummy>::ModuleAddresses[function_address_holder<Dummy>::NumModule];
+hmodule function_address_holder<Dummy>::ModuleAddresses[function_address_holder<Dummy>::NumModule];
template<int Dummy>
volatile long function_address_holder<Dummy>::ModuleStates[function_address_holder<Dummy>::NumModule];
@@ -1408,8 +1602,8 @@ struct dll_func
//Complex winapi based functions...
struct library_unloader
{
- void *lib_;
- library_unloader(void *module) : lib_(module){}
+ hmodule lib_;
+ library_unloader(hmodule module) : lib_(module){}
~library_unloader(){ free_library(lib_); }
};
@@ -1448,7 +1642,8 @@ inline bool get_boot_and_system_time(unsigned char (&bootsystemstamp) [BootAndSy
return true;
}
-inline bool get_boot_time_str(char *bootstamp_str, std::size_t &s) //will write BootstampLength chars
+inline bool get_boot_time_str(char *bootstamp_str, std::size_t &s)
+ //will write BootstampLength chars
{
if(s < (BootstampLength*2))
return false;
@@ -1484,7 +1679,8 @@ inline void buffer_to_wide_str(const void *buf, std::size_t length, wchar_t *str
}
}
-inline bool get_boot_and_system_time_wstr(wchar_t *bootsystemstamp, std::size_t &s) //will write BootAndSystemstampLength chars
+inline bool get_boot_and_system_time_wstr(wchar_t *bootsystemstamp, std::size_t &s)
+ //will write BootAndSystemstampLength chars
{
if(s < (BootAndSystemstampLength*2))
return false;
@@ -1536,7 +1732,8 @@ class nt_query_mem_deleter
static const std::size_t rename_offset = offsetof(ntquery_mem_t, ren.info.FileName) -
offsetof(ntquery_mem_t, name.Name.Buffer);
// Timestamp process id atomic count
- static const std::size_t rename_suffix = (SystemTimeOfDayInfoLength + sizeof(unsigned long) + sizeof(boost::uint32_t))*2;
+ static const std::size_t rename_suffix =
+ (SystemTimeOfDayInfoLength + sizeof(unsigned long) + sizeof(boost::uint32_t))*2;
public:
nt_query_mem_deleter(std::size_t object_name_information_size)
@@ -1549,7 +1746,7 @@ class nt_query_mem_deleter
delete[]m_buf;
}
- void realloc(std::size_t num_bytes)
+ void realloc_mem(std::size_t num_bytes)
{
num_bytes += rename_suffix + rename_offset;
char *buf = m_buf;
@@ -1559,10 +1756,12 @@ class nt_query_mem_deleter
}
ntquery_mem_t *query_mem() const
- { return static_cast<ntquery_mem_t *>(static_cast<void*>(m_buf)); }
+ { return static_cast<ntquery_mem_t *>(static_cast<void*>(m_buf)); }
unsigned long object_name_information_size() const
- { return static_cast<unsigned long>(m_size - rename_offset - SystemTimeOfDayInfoLength*2); }
+ {
+ return static_cast<unsigned long>(m_size - rename_offset - SystemTimeOfDayInfoLength*2);
+ }
std::size_t file_rename_information_size() const
{ return static_cast<unsigned long>(m_size); }
@@ -1584,7 +1783,7 @@ class c_heap_deleter
if(m_buf) ::free(m_buf);
}
- void realloc(std::size_t num_bytes)
+ void realloc_mem(std::size_t num_bytes)
{
void *buf = ::realloc(m_buf, num_bytes);
if(!buf){
@@ -1639,7 +1838,7 @@ inline bool unlink_file(const char *filename)
//Obtain file name with guessed length
if(pNtQueryObject(fh, object_name_information, nt_query_mem.query_mem(), nt_query_mem.object_name_information_size(), &size)){
//Obtain file name with exact length buffer
- nt_query_mem.realloc(size);
+ nt_query_mem.realloc_mem(size);
if(pNtQueryObject(fh, object_name_information, nt_query_mem.query_mem(), nt_query_mem.object_name_information_size(), &size)){
return false;
}
@@ -1719,15 +1918,16 @@ inline bool unlink_file(const char *filename)
struct reg_closer
{
- void *key_;
- reg_closer(void *key) : key_(key){}
+ hkey key_;
+ reg_closer(hkey key) : key_(key){}
~reg_closer(){ reg_close_key(key_); }
};
inline void get_shared_documents_folder(std::string &s)
{
+ #if 1 //Original registry search code
s.clear();
- void *key;
+ hkey key;
if (reg_open_key_ex( hkey_local_machine
, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
, 0
@@ -1751,12 +1951,24 @@ inline void get_shared_documents_folder(std::string &s)
(void)err;
}
}
+ #else //registry alternative: SHGetSpecialFolderPathA
+ const int BIPC_CSIDL_COMMON_APPDATA = 0x0023; // All Users\Application Data
+ const int BIPC_CSIDL_FLAG_CREATE = 0x8000; // new for Win2K, or this in to force creation of folder
+ const int BIPC_SHGFP_TYPE_CURRENT = 0; // current value for user, verify it exists
+
+ s.clear();
+ char szPath[max_path];
+ if(0 == SHGetFolderPathA(0, BIPC_CSIDL_COMMON_APPDATA | BIPC_CSIDL_FLAG_CREATE, 0, BIPC_SHGFP_TYPE_CURRENT, szPath)){
+ s = szPath;
+ }
+
+ #endif
}
inline void get_registry_value(const char *folder, const char *value_key, std::vector<unsigned char> &s)
{
s.clear();
- void *key;
+ hkey key;
if (reg_open_key_ex( hkey_local_machine
, folder
, 0
@@ -1849,7 +2061,7 @@ inline bool get_wmi_class_attribute( std::wstring& strValue, const wchar_t *wmi_
IWbemServices_BIPC *pWbemServices = 0;
if( 0 != pIWbemLocator->ConnectServer(
- bstrNamespace, // Namespace
+ (bstr)bstrNamespace, // Namespace
0, // Userid
0, // PW
0, // Locale
@@ -1887,8 +2099,8 @@ inline bool get_wmi_class_attribute( std::wstring& strValue, const wchar_t *wmi_
IEnumWbemClassObject_BIPC * pEnumObject = 0;
if ( 0 != pWbemServices->ExecQuery(
- L"WQL",
- strValue.c_str(),
+ (bstr)L"WQL",
+ (bstr)strValue.c_str(),
//WBEM_FLAG_RETURN_IMMEDIATELY_BIPC,
WBEM_FLAG_RETURN_WHEN_COMPLETE_BIPC | WBEM_FLAG_FORWARD_ONLY_BIPC,
0,
@@ -1911,9 +2123,9 @@ inline bool get_wmi_class_attribute( std::wstring& strValue, const wchar_t *wmi_
while( 0 == pEnumObject->Next( WBEM_INFINITE_BIPC, uCount, &pClassObject, &uReturned ) )
{
com_releaser<IWbemClassObject_BIPC> IWbemClassObject_releaser(pClassObject);
- if ( 0 == pClassObject->Get( L"LastBootUpTime", 0, &vwchar, 0, 0 ) ){
+ if ( 0 == pClassObject->Get( (bstr)L"LastBootUpTime", 0, &vwchar, 0, 0 ) ){
bRet = true;
- strValue = vwchar.value.pbstrVal;
+ strValue = (wchar_t*)vwchar.bstrVal;
VariantClear(&vwchar );
break;
}
@@ -1997,22 +2209,22 @@ inline bool get_last_bootup_time(std::string &stamp)
void *hEventLog = OpenEventLogA(0, source_name);
if (hEventLog){
eventlog_handle_closer hnd_closer(hEventLog); (void)hnd_closer;
- // Allocate an initial block of memory used to read event records. The number
+ // Allocate an initial block of memory used to read event records. The number
// of records read into the buffer will vary depending on the size of each event.
// The size of each event will vary based on the size of the user-defined
- // data included with each event, the number and length of insertion
+ // data included with each event, the number and length of insertion
// strings, and other data appended to the end of the event record.
dwBytesToRead = max_record_buffer_size;
c_heap_deleter heap_deleter(dwBytesToRead);
- // Read blocks of records until you reach the end of the log or an
+ // Read blocks of records until you reach the end of the log or an
// error occurs. The records are read from newest to oldest. If the buffer
// is not big enough to hold a complete event record, reallocate the buffer.
if (heap_deleter.get() != 0){
while (0 == status){
- if (!ReadEventLogA(hEventLog,
+ if (!ReadEventLogA(hEventLog,
eventlog_sequential_read | eventlog_backwards_read,
- 0,
+ 0,
heap_deleter.get(),
dwBytesToRead,
&dwBytesRead,
@@ -2021,7 +2233,7 @@ inline bool get_last_bootup_time(std::string &stamp)
if (error_insufficient_buffer == status) {
status = 0;
dwBytesToRead = dwMinimumBytesToRead;
- heap_deleter.realloc(dwMinimumBytesToRead);
+ heap_deleter.realloc_mem(dwMinimumBytesToRead);
if (!heap_deleter.get()){
return false;
}
@@ -2065,11 +2277,8 @@ inline bool get_file_mapping_size(void *file_mapping_hnd, __int64 &size)
interprocess_section_basic_information info;
unsigned long ntstatus =
pNtQuerySection(file_mapping_hnd, section_basic_information, &info, sizeof(info), 0);
- if(ntstatus){
- return false;
- }
size = info.section_size;
- return true;
+ return !ntstatus;
}
inline bool get_semaphore_info(void *handle, long &count, long &limit)
@@ -2079,14 +2288,41 @@ inline bool get_semaphore_info(void *handle, long &count, long &limit)
(winapi::NtQuerySemaphore_t)dll_func::get(winapi::dll_func::NtQuerySemaphore);
unsigned int ret_len;
long status = pNtQuerySemaphore(handle, winapi::semaphore_basic_information, &info, sizeof(info), &ret_len);
- if(status){
- return false;
- }
count = info.count;
limit = info.limit;
- return true;
+ return !status;
+}
+
+inline bool query_timer_resolution(unsigned long *lowres, unsigned long *highres, unsigned long *curres)
+{
+ winapi::NtQueryTimerResolution_t pNtQueryTimerResolution =
+ (winapi::NtQueryTimerResolution_t)dll_func::get(winapi::dll_func::NtQueryTimerResolution);
+ return !pNtQueryTimerResolution(lowres, highres, curres);
+}
+
+inline bool set_timer_resolution(unsigned long RequestedResolution, int Set, unsigned long* ActualResolution)
+{
+ winapi::NtSetTimerResolution_t pNtSetTimerResolution =
+ (winapi::NtSetTimerResolution_t)dll_func::get(winapi::dll_func::NtSetTimerResolution);
+ return !pNtSetTimerResolution(RequestedResolution, Set, ActualResolution);
+}
+
+inline bool query_performance_counter(__int64 *lpPerformanceCount)
+{
+ QueryPerformanceCounter_t pQueryPerformanceCounter = (QueryPerformanceCounter_t)
+ dll_func::get(dll_func::QueryPerformanceCounter);
+ return 0 != pQueryPerformanceCounter(lpPerformanceCount);
+}
+
+inline bool query_performance_frequency(__int64 *lpFrequency)
+{
+ QueryPerformanceCounter_t pQueryPerformanceFrequency = (QueryPerformanceFrequency_t)
+ dll_func::get(dll_func::QueryPerformanceFrequency);
+ return 0 != pQueryPerformanceFrequency(lpFrequency);
}
+inline unsigned long get_tick_count()
+{ return GetTickCount(); }
} //namespace winapi
} //namespace interprocess
diff --git a/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp b/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp
index 194e566aae..58102689da 100644
--- a/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp
+++ b/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp
@@ -11,12 +11,13 @@
#ifndef BOOST_INTERPROCESS_WINDOWS_INTERMODULE_SINGLETON_HPP
#define BOOST_INTERPROCESS_WINDOWS_INTERMODULE_SINGLETON_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/interprocess/detail/config_begin.hpp>
#include <boost/interprocess/detail/workaround.hpp>
+#include <boost/container/string.hpp>
#if !defined(BOOST_INTERPROCESS_WINDOWS)
#error "This header can't be included from non-windows operating systems"
@@ -29,7 +30,7 @@
#include <boost/interprocess/sync/scoped_lock.hpp>
#include <boost/cstdint.hpp>
#include <string>
-#include <map>
+#include <boost/container/map.hpp>
namespace boost{
namespace interprocess{
@@ -49,7 +50,7 @@ namespace intermodule_singleton_helpers {
// max and current semaphore count.
class windows_semaphore_based_map
{
- typedef std::map<std::string, ref_count_ptr> map_type;
+ typedef boost::container::map<boost::container::string, ref_count_ptr> map_type;
public:
windows_semaphore_based_map()
@@ -135,6 +136,7 @@ class windows_semaphore_based_map
success = success && m_sem_map.open_or_create
(name.c_str(), initial_count, max_count, perm, created);
if(!success){
+ delete m;
//winapi_xxx wrappers do the cleanup...
throw int(0);
}
@@ -181,7 +183,7 @@ class windows_semaphore_based_map
{
scoped_lock<winapi_mutex_wrapper> lck(m_mtx_lock);
map_type &map = this->get_map_unlocked();
- map_type::iterator it = map.find(std::string(name));
+ map_type::iterator it = map.find(boost::container::string(name));
if(it != map.end()){
return &it->second;
}
@@ -194,7 +196,7 @@ class windows_semaphore_based_map
{
scoped_lock<winapi_mutex_wrapper> lck(m_mtx_lock);
map_type &map = this->get_map_unlocked();
- map_type::iterator it = map.insert(map_type::value_type(std::string(name), ref)).first;
+ map_type::iterator it = map.insert(map_type::value_type(boost::container::string(name), ref)).first;
return &it->second;
}
@@ -202,7 +204,7 @@ class windows_semaphore_based_map
{
scoped_lock<winapi_mutex_wrapper> lck(m_mtx_lock);
map_type &map = this->get_map_unlocked();
- return map.erase(std::string(name)) != 0;
+ return map.erase(boost::container::string(name)) != 0;
}
template<class F>
@@ -217,7 +219,9 @@ class windows_semaphore_based_map
scoped_lock<winapi_mutex_wrapper> lck(m_mtx_lock);
m_sem_count.wait();
if(0 == m_sem_count.value()){
- delete &this->get_map_unlocked();
+ map_type &map = this->get_map_unlocked();
+ BOOST_ASSERT(map.empty());
+ delete &map;
}
//First close sems to protect this with the external mutex
m_sem_map.close();
@@ -287,7 +291,7 @@ struct thread_safe_global_map_dependant<windows_semaphore_based_map>
} //namespace intermodule_singleton_helpers {
-template<typename C, bool LazyInit = true, bool Phoenix = true>
+template<typename C, bool LazyInit = true, bool Phoenix = false>
class windows_intermodule_singleton
: public intermodule_singleton_impl
< C
diff --git a/3party/boost/boost/interprocess/detail/workaround.hpp b/3party/boost/boost/interprocess/detail/workaround.hpp
index 2ffe812860..cb9561179e 100644
--- a/3party/boost/boost/interprocess/detail/workaround.hpp
+++ b/3party/boost/boost/interprocess/detail/workaround.hpp
@@ -24,8 +24,25 @@
#if defined(_POSIX_THREAD_PROCESS_SHARED) && ((_POSIX_THREAD_PROCESS_SHARED - 0) > 0)
//Cygwin defines _POSIX_THREAD_PROCESS_SHARED but does not implement it.
- //Mac Os X >= Leopard defines _POSIX_THREAD_PROCESS_SHARED but does not seem to work.
- #if !defined(__CYGWIN__) && !defined(__APPLE__)
+ #if defined(__CYGWIN__)
+ #define BOOST_INTERPROCESS_BUGGY_POSIX_PROCESS_SHARED
+ //Mac Os X < Lion (10.7) might define _POSIX_THREAD_PROCESS_SHARED but there is no real support.
+ #elif defined(__APPLE__)
+ #include "TargetConditionals.h"
+ //Check we're on Mac OS target
+ #if defined(TARGET_OS_MAC)
+ #include "AvailabilityMacros.h"
+ //If minimum target for this compilation is older than Mac Os Lion, then we are out of luck
+ #if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
+ #define BOOST_INTERPROCESS_BUGGY_POSIX_PROCESS_SHARED
+ #endif
+ #endif
+ #endif
+
+ //If buggy _POSIX_THREAD_PROCESS_SHARED is detected avoid using it
+ #if defined(BOOST_INTERPROCESS_BUGGY_POSIX_PROCESS_SHARED)
+ #undef BOOST_INTERPROCESS_BUGGY_POSIX_PROCESS_SHARED
+ #else
#define BOOST_INTERPROCESS_POSIX_PROCESS_SHARED
#endif
#endif
@@ -44,19 +61,19 @@
#define BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES
#endif
- #if ((defined _V6_ILP32_OFFBIG) &&(_V6_ILP32_OFFBIG - 0 > 0)) ||\
- ((defined _V6_LP64_OFF64) &&(_V6_LP64_OFF64 - 0 > 0)) ||\
- ((defined _V6_LPBIG_OFFBIG) &&(_V6_LPBIG_OFFBIG - 0 > 0)) ||\
- ((defined _XBS5_ILP32_OFFBIG)&&(_XBS5_ILP32_OFFBIG - 0 > 0)) ||\
- ((defined _XBS5_LP64_OFF64) &&(_XBS5_LP64_OFF64 - 0 > 0)) ||\
- ((defined _XBS5_LPBIG_OFFBIG)&&(_XBS5_LPBIG_OFFBIG - 0 > 0)) ||\
- ((defined _FILE_OFFSET_BITS) &&(_FILE_OFFSET_BITS - 0 >= 64))||\
- ((defined _FILE_OFFSET_BITS) &&(_FILE_OFFSET_BITS - 0 >= 64))
+ #if (defined (_V6_ILP32_OFFBIG) &&(_V6_ILP32_OFFBIG - 0 > 0)) ||\
+ (defined (_V6_LP64_OFF64) &&(_V6_LP64_OFF64 - 0 > 0)) ||\
+ (defined (_V6_LPBIG_OFFBIG) &&(_V6_LPBIG_OFFBIG - 0 > 0)) ||\
+ (defined (_XBS5_ILP32_OFFBIG)&&(_XBS5_ILP32_OFFBIG - 0 > 0)) ||\
+ (defined (_XBS5_LP64_OFF64) &&(_XBS5_LP64_OFF64 - 0 > 0)) ||\
+ (defined (_XBS5_LPBIG_OFFBIG)&&(_XBS5_LPBIG_OFFBIG - 0 > 0)) ||\
+ (defined (_FILE_OFFSET_BITS) &&(_FILE_OFFSET_BITS - 0 >= 64))||\
+ (defined (_FILE_OFFSET_BITS) &&(_FILE_OFFSET_BITS - 0 >= 64))
#define BOOST_INTERPROCESS_UNIX_64_BIT_OR_BIGGER_OFF_T
#endif
//Check for XSI shared memory objects. They are available in nearly all UNIX platforms
- #if !defined(__QNXNTO__)
+ #if !defined(__QNXNTO__) && !defined(__ANDROID__)
#define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS
#endif
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 b2a27501d7..47785b822a 100644
--- a/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp
+++ b/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp
@@ -23,7 +23,7 @@
#include <boost/interprocess/exceptions.hpp>
#include <boost/interprocess/detail/utilities.hpp>
#include <boost/interprocess/detail/os_file_functions.hpp>
-#include <boost/interprocess/detail/tmp_dir_helpers.hpp>
+#include <boost/interprocess/detail/shared_dir_helpers.hpp>
#include <boost/interprocess/interprocess_fwd.hpp>
#include <boost/interprocess/exceptions.hpp>
@@ -197,7 +197,7 @@ inline void xsi_shared_memory_device::priv_obtain_index
permissions p;
p.set_unrestricted();
std::string xsi_shm_emulation_file_path;
- ipcdetail::create_tmp_and_clean_old_and_get_filename(filename, xsi_shm_emulation_file_path);
+ ipcdetail::create_shared_dir_cleaning_old_and_get_filepath(filename, xsi_shm_emulation_file_path);
ipcdetail::create_or_open_file(xsi_shm_emulation_file_path.c_str(), read_write, p);
const std::size_t MemSize = sizeof(info_t);
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 51af830fbd..24e159c15b 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
@@ -23,7 +23,7 @@
#include <boost/interprocess/exceptions.hpp>
#include <boost/interprocess/detail/utilities.hpp>
#include <boost/interprocess/detail/os_file_functions.hpp>
-#include <boost/interprocess/detail/tmp_dir_helpers.hpp>
+#include <boost/interprocess/detail/shared_dir_helpers.hpp>
#include <boost/interprocess/interprocess_fwd.hpp>
#include <boost/interprocess/exceptions.hpp>
diff --git a/3party/boost/boost/interprocess/errors.hpp b/3party/boost/boost/interprocess/errors.hpp
index 345ca311f0..d829c81b54 100644
--- a/3party/boost/boost/interprocess/errors.hpp
+++ b/3party/boost/boost/interprocess/errors.hpp
@@ -24,7 +24,7 @@
#ifndef BOOST_INTERPROCESS_ERRORS_HPP
#define BOOST_INTERPROCESS_ERRORS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -33,7 +33,7 @@
#include <stdarg.h>
#include <string>
-#if (defined BOOST_INTERPROCESS_WINDOWS)
+#if defined (BOOST_INTERPROCESS_WINDOWS)
# include <boost/interprocess/detail/win32_api.hpp>
#else
# ifdef BOOST_HAS_UNISTD_H
@@ -42,7 +42,7 @@
# else //ifdef BOOST_HAS_UNISTD_H
# error Unknown platform
# endif //ifdef BOOST_HAS_UNISTD_H
-#endif //#if (defined BOOST_INTERPROCESS_WINDOWS)
+#endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
//!\file
//!Describes the error numbering of interprocess classes
@@ -52,7 +52,7 @@ namespace interprocess {
/// @cond
inline int system_error_code() // artifact of POSIX and WINDOWS error reporting
{
- #if (defined BOOST_INTERPROCESS_WINDOWS)
+ #if defined (BOOST_INTERPROCESS_WINDOWS)
return winapi::get_last_error();
#else
return errno; // GCC 3.1 won't accept ::errno
@@ -60,7 +60,7 @@ inline int system_error_code() // artifact of POSIX and WINDOWS error reporting
}
-#if (defined BOOST_INTERPROCESS_WINDOWS)
+#if defined (BOOST_INTERPROCESS_WINDOWS)
inline void fill_system_message(int sys_err_code, std::string &str)
{
void *lpMsgBuf;
@@ -115,6 +115,7 @@ enum error_code_t
invalid_argument,
timeout_when_locking_error,
timeout_when_waiting_error,
+ owner_dead_error
};
typedef int native_error_t;
@@ -128,7 +129,7 @@ struct ec_xlate
static const ec_xlate ec_table[] =
{
- #if (defined BOOST_INTERPROCESS_WINDOWS)
+ #if defined (BOOST_INTERPROCESS_WINDOWS)
{ /*ERROR_ACCESS_DENIED*/5L, security_error },
{ /*ERROR_INVALID_ACCESS*/12L, security_error },
{ /*ERROR_SHARING_VIOLATION*/32L, security_error },
@@ -161,7 +162,7 @@ static const ec_xlate ec_table[] =
{ /*ERROR_NOT_ENOUGH_MEMORY*/8L, out_of_memory_error },
{ /*ERROR_TOO_MANY_OPEN_FILES*/4L, out_of_resource_error },
{ /*ERROR_INVALID_ADDRESS*/487L, busy_error }
- #else //#if (defined BOOST_INTERPROCESS_WINDOWS)
+ #else //#if defined (BOOST_INTERPROCESS_WINDOWS)
{ EACCES, security_error },
{ EROFS, read_only_error },
{ EIO, io_error },
@@ -179,7 +180,7 @@ static const ec_xlate ec_table[] =
{ EMFILE, out_of_resource_error },
{ ENOENT, not_such_file_or_directory },
{ EINVAL, invalid_argument }
- #endif //#if (defined BOOST_INTERPROCESS_WINDOWS)
+ #endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
};
inline error_code_t lookup_error(native_error_t err)
diff --git a/3party/boost/boost/interprocess/exceptions.hpp b/3party/boost/boost/interprocess/exceptions.hpp
index b9ab45bec8..cf9d5b4dad 100644
--- a/3party/boost/boost/interprocess/exceptions.hpp
+++ b/3party/boost/boost/interprocess/exceptions.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_EXCEPTIONS_HPP
#define BOOST_INTERPROCESS_EXCEPTIONS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/indexes/null_index.hpp b/3party/boost/boost/interprocess/indexes/null_index.hpp
index 1e1d670d71..20fa536bb2 100644
--- a/3party/boost/boost/interprocess/indexes/null_index.hpp
+++ b/3party/boost/boost/interprocess/indexes/null_index.hpp
@@ -34,8 +34,8 @@ class null_index
/// @endcond
public:
- typedef void * iterator;
- typedef const void * const_iterator;
+ typedef int * iterator;
+ typedef const int * const_iterator;
//!begin() is equal
//!to end()
diff --git a/3party/boost/boost/interprocess/interprocess_fwd.hpp b/3party/boost/boost/interprocess/interprocess_fwd.hpp
index 42f170a659..b5865d68f7 100644
--- a/3party/boost/boost/interprocess/interprocess_fwd.hpp
+++ b/3party/boost/boost/interprocess/interprocess_fwd.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_FWD_HPP
#define BOOST_INTERPROCESS_FWD_HPP
-#if defined (_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/ipc/message_queue.hpp b/3party/boost/boost/interprocess/ipc/message_queue.hpp
index 9e5e8ff03c..100d7b0a89 100644
--- a/3party/boost/boost/interprocess/ipc/message_queue.hpp
+++ b/3party/boost/boost/interprocess/ipc/message_queue.hpp
@@ -250,7 +250,7 @@ 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_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] 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
@@ -306,6 +306,8 @@ class mq_hdr_t
m_cur_num_msg(0)
#if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
,m_cur_first_msg(0u)
+ ,m_blocked_senders(0u)
+ ,m_blocked_receivers(0u)
#endif
{ this->initialize_memory(); }
@@ -354,7 +356,7 @@ class mq_hdr_t
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);
+ 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);
@@ -376,17 +378,17 @@ class mq_hdr_t
{
iterator it_inserted_ptr_end = this->inserted_ptr_end();
iterator it_inserted_ptr_beg = this->inserted_ptr_begin();
- if(where == it_inserted_ptr_end){
- ++m_cur_num_msg;
- return **it_inserted_ptr_end;
- }
- else if(where == it_inserted_ptr_beg){
+ if(where == it_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 if(where == it_inserted_ptr_end){
+ ++m_cur_num_msg;
+ return **it_inserted_ptr_end;
+ }
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);
@@ -452,7 +454,7 @@ class mq_hdr_t
}
}
- #else
+ #else //BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
typedef msg_hdr_ptr_t *iterator;
@@ -482,7 +484,7 @@ class mq_hdr_t
return **pos;
}
- #endif
+ #endif //BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
//!Inserts the first free message in the priority queue
msg_header & queue_free_msg(unsigned int priority)
@@ -507,7 +509,6 @@ class mq_hdr_t
//Check where the free message should be placed
it = this->lower_bound(dummy_ptr, static_cast<priority_functor<VoidPointer>&>(*this));
}
-
}
//Insert the free message in the correct position
return this->insert_at(it);
@@ -577,6 +578,8 @@ class mq_hdr_t
#if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
//Current start offset in the circular index
size_type m_cur_first_msg;
+ size_type m_blocked_senders;
+ size_type m_blocked_receivers;
#endif
};
@@ -714,41 +717,67 @@ inline bool message_queue_t<VoidPointer>::do_send(block_t block,
throw interprocess_exception(size_error);
}
- bool was_empty = false;
+ #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
+ bool notify_blocked_receivers = false;
+ #endif
//---------------------------------------------
scoped_lock<interprocess_mutex> 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;
- break;
-
- case blocking :
- do{
- p_hdr->m_cond_send.wait(lock);
- }
- while (p_hdr->is_full());
- break;
-
- case timed :
- do{
- if(!p_hdr->m_cond_send.timed_wait(lock, abs_time)){
- if(p_hdr->is_full())
- return false;
- break;
+ BOOST_TRY{
+ #ifdef BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
+ ++p_hdr->m_blocked_senders;
+ #endif
+ switch(block){
+ case non_blocking :
+ #ifdef BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
+ --p_hdr->m_blocked_senders;
+ #endif
+ return false;
+ break;
+
+ case blocking :
+ do{
+ p_hdr->m_cond_send.wait(lock);
+ }
+ while (p_hdr->is_full());
+ break;
+
+ case timed :
+ do{
+ if(!p_hdr->m_cond_send.timed_wait(lock, abs_time)){
+ if(p_hdr->is_full()){
+ #ifdef BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
+ --p_hdr->m_blocked_senders;
+ #endif
+ return false;
+ }
+ break;
+ }
}
- }
- while (p_hdr->is_full());
- break;
- default:
- break;
+ while (p_hdr->is_full());
+ break;
+ default:
+ break;
+ }
+ #ifdef BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
+ --p_hdr->m_blocked_senders;
+ #endif
+ }
+ BOOST_CATCH(...){
+ #ifdef BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
+ --p_hdr->m_blocked_senders;
+ #endif
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
}
- was_empty = p_hdr->is_empty();
+ #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
+ notify_blocked_receivers = 0 != p_hdr->m_blocked_receivers;
+ #endif
//Insert the first free message in the priority queue
ipcdetail::msg_hdr_t<VoidPointer> &free_msg_hdr = p_hdr->queue_free_msg(priority);
@@ -767,9 +796,13 @@ inline bool message_queue_t<VoidPointer>::do_send(block_t block,
//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){
+ #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
+ if (notify_blocked_receivers){
p_hdr->m_cond_recv.notify_one();
}
+ #else
+ p_hdr->m_cond_recv.notify_one();
+ #endif
return true;
}
@@ -811,42 +844,70 @@ inline bool
throw interprocess_exception(size_error);
}
- bool was_full = false;
+ #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
+ bool notify_blocked_senders = false;
+ #endif
//---------------------------------------------
scoped_lock<interprocess_mutex> lock(p_hdr->m_mutex);
//---------------------------------------------
{
//If there are no messages execute blocking logic
if (p_hdr->is_empty()) {
- switch(block){
- case non_blocking :
- return false;
- break;
-
- case blocking :
- do{
- p_hdr->m_cond_recv.wait(lock);
- }
- while (p_hdr->is_empty());
- break;
-
- case timed :
- do{
- if(!p_hdr->m_cond_recv.timed_wait(lock, abs_time)){
- if(p_hdr->is_empty())
- return false;
- break;
+ BOOST_TRY{
+ #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
+ ++p_hdr->m_blocked_receivers;
+ #endif
+ switch(block){
+ case non_blocking :
+ #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
+ --p_hdr->m_blocked_receivers;
+ #endif
+ return false;
+ break;
+
+ case blocking :
+ do{
+ p_hdr->m_cond_recv.wait(lock);
}
- }
- while (p_hdr->is_empty());
- break;
+ while (p_hdr->is_empty());
+ break;
+
+ case timed :
+ do{
+ if(!p_hdr->m_cond_recv.timed_wait(lock, abs_time)){
+ if(p_hdr->is_empty()){
+ #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
+ --p_hdr->m_blocked_receivers;
+ #endif
+ return false;
+ }
+ break;
+ }
+ }
+ while (p_hdr->is_empty());
+ break;
- //Paranoia check
- default:
- break;
+ //Paranoia check
+ default:
+ break;
+ }
+ #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
+ --p_hdr->m_blocked_receivers;
+ #endif
}
+ BOOST_CATCH(...){
+ #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX)
+ --p_hdr->m_blocked_receivers;
+ #endif
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
}
+ #ifdef BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
+ notify_blocked_senders = 0 != p_hdr->m_blocked_senders;
+ #endif
+
//There is at least one message ready to pick, get the top one
ipcdetail::msg_hdr_t<VoidPointer> &top_msg = p_hdr->top_msg();
@@ -861,8 +922,6 @@ inline bool
//Copy data to receiver's bufers
std::memcpy(buffer, top_msg.data(), recvd_size);
- was_full = p_hdr->is_full();
-
//Free top message and put it in the free message list
p_hdr->free_top_msg();
} //Lock end
@@ -870,9 +929,13 @@ inline bool
//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){
+ #ifdef BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
+ if (notify_blocked_senders){
p_hdr->m_cond_send.notify_one();
}
+ #else
+ p_hdr->m_cond_send.notify_one();
+ #endif
return true;
}
diff --git a/3party/boost/boost/interprocess/managed_external_buffer.hpp b/3party/boost/boost/interprocess/managed_external_buffer.hpp
index 1f4a1995f5..e21a804075 100644
--- a/3party/boost/boost/interprocess/managed_external_buffer.hpp
+++ b/3party/boost/boost/interprocess/managed_external_buffer.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MANAGED_EXTERNAL_BUFFER_HPP
#define BOOST_INTERPROCESS_MANAGED_EXTERNAL_BUFFER_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/managed_heap_memory.hpp b/3party/boost/boost/interprocess/managed_heap_memory.hpp
index 868fdc5566..c073d0ee59 100644
--- a/3party/boost/boost/interprocess/managed_heap_memory.hpp
+++ b/3party/boost/boost/interprocess/managed_heap_memory.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MANAGED_HEAP_MEMORY_HPP
#define BOOST_INTERPROCESS_MANAGED_HEAP_MEMORY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/managed_mapped_file.hpp b/3party/boost/boost/interprocess/managed_mapped_file.hpp
index a802119a60..fd325c3f26 100644
--- a/3party/boost/boost/interprocess/managed_mapped_file.hpp
+++ b/3party/boost/boost/interprocess/managed_mapped_file.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MANAGED_MAPPED_FILE_HPP
#define BOOST_INTERPROCESS_MANAGED_MAPPED_FILE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/managed_shared_memory.hpp b/3party/boost/boost/interprocess/managed_shared_memory.hpp
index c20f39ca3e..348fe9148a 100644
--- a/3party/boost/boost/interprocess/managed_shared_memory.hpp
+++ b/3party/boost/boost/interprocess/managed_shared_memory.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MANAGED_SHARED_MEMORY_HPP
#define BOOST_INTERPROCESS_MANAGED_SHARED_MEMORY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp b/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp
index e553a707c8..76c332f0d7 100644
--- a/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp
+++ b/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MANAGED_WINDOWS_SHARED_MEMORY_HPP
#define BOOST_INTERPROCESS_MANAGED_WINDOWS_SHARED_MEMORY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp b/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp
index 4ec7eba8d8..b9dc619936 100644
--- a/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp
+++ b/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MANAGED_XSI_SHARED_MEMORY_HPP
#define BOOST_INTERPROCESS_MANAGED_XSI_SHARED_MEMORY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/mapped_region.hpp b/3party/boost/boost/interprocess/mapped_region.hpp
index f8260d6ce3..4513bd6149 100644
--- a/3party/boost/boost/interprocess/mapped_region.hpp
+++ b/3party/boost/boost/interprocess/mapped_region.hpp
@@ -53,7 +53,7 @@
# error Unknown platform
# endif
-#endif //#if (defined BOOST_INTERPROCESS_WINDOWS)
+#endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
//!\file
//!Describes mapped region class
@@ -186,7 +186,7 @@ class mapped_region
//!This enum specifies region usage behaviors that an application can specify
//!to the mapped region implementation.
- enum advice_types{
+ 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,
@@ -520,7 +520,7 @@ inline bool mapped_region::shrink_by(std::size_t bytes, bool from_back)
}
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.
+ //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)
@@ -561,7 +561,7 @@ inline void mapped_region::priv_close()
inline void mapped_region::dont_close_on_destruction()
{}
-#else //#if (defined BOOST_INTERPROCESS_WINDOWS)
+#else //#if defined (BOOST_INTERPROCESS_WINDOWS)
inline mapped_region::mapped_region()
: m_base(0), m_size(0), m_page_offset(0), m_mode(read_only), m_is_xsi(false)
@@ -741,6 +741,9 @@ inline bool mapped_region::advise(advice_types advice)
const unsigned int mode_none = 0;
const unsigned int mode_padv = 1;
const unsigned int mode_madv = 2;
+ // Suppress "unused variable" warnings
+ (void)mode_padv;
+ (void)mode_madv;
unsigned int mode = mode_none;
//Choose advice either from POSIX (preferred) or native Unix
switch(advice){
@@ -830,7 +833,7 @@ inline void mapped_region::priv_close()
inline void mapped_region::dont_close_on_destruction()
{ m_base = 0; }
-#endif //##if (defined BOOST_INTERPROCESS_WINDOWS)
+#endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
template<int dummy>
const std::size_t mapped_region::page_size_holder<dummy>::PageSize
@@ -850,7 +853,7 @@ inline void mapped_region::swap(mapped_region &other)
ipcdetail::do_swap(this->m_size, other.m_size);
ipcdetail::do_swap(this->m_page_offset, other.m_page_offset);
ipcdetail::do_swap(this->m_mode, other.m_mode);
- #if (defined BOOST_INTERPROCESS_WINDOWS)
+ #if defined (BOOST_INTERPROCESS_WINDOWS)
ipcdetail::do_swap(this->m_file_or_mapping_hnd, other.m_file_or_mapping_hnd);
#else
ipcdetail::do_swap(this->m_is_xsi, other.m_is_xsi);
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 a6936ec3d9..6200b373e3 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
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_MEM_ALGO_COMMON_HPP
#define BOOST_INTERPROCESS_DETAIL_MEM_ALGO_COMMON_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp b/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp
index e8b678d9f3..dd11bdbb50 100644
--- a/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp
+++ b/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MULTI_SIMPLE_SEQ_FIT_HPP
#define BOOST_INTERPROCESS_MULTI_SIMPLE_SEQ_FIT_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -33,12 +33,12 @@ namespace interprocess {
/*!This class implements the simple sequential fit algorithm with a simply
linked list of free buffers.*/
template<class MutexFamily, class VoidPtr>
-class multi_simple_seq_fit
+class multi_simple_seq_fit
: public ipcdetail::simple_seq_fit_impl<MutexFamily, VoidPtr>
{
typedef ipcdetail::simple_seq_fit_impl<MutexFamily, VoidPtr> base_t;
public:
- /*!Constructor. "size" is the total size of the managed memory segment,
+ /*!Constructor. "size" is the total size of the managed memory segment,
"extra_hdr_bytes" indicates the extra bytes beginning in the sizeof(multi_simple_seq_fit)
offset that the allocator should not use at all.*/
multi_simple_seq_fit (size_type size, size_type extra_hdr_bytes)
diff --git a/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp b/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp
index 7a2c7a83c1..c84d4e6fb7 100644
--- a/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp
+++ b/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MEM_ALGO_DETAIL_SIMPLE_SEQ_FIT_IMPL_HPP
#define BOOST_INTERPROCESS_MEM_ALGO_DETAIL_SIMPLE_SEQ_FIT_IMPL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -84,10 +84,10 @@ class simple_seq_fit_impl
{
/*!Offset pointer to the next block.*/
block_ctrl_ptr m_next;
- /*!This block's memory size (including block_ctrl
+ /*!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; }
@@ -124,7 +124,7 @@ class simple_seq_fit_impl
} m_header;
public:
- /*!Constructor. "size" is the total size of the managed memory segment,
+ /*!Constructor. "size" is the total size of the managed memory segment,
"extra_hdr_bytes" indicates the extra bytes beginning in the sizeof(simple_seq_fit_impl)
offset that the allocator should not use at all.*/
simple_seq_fit_impl (size_type size, size_type extra_hdr_bytes);
@@ -159,7 +159,7 @@ class simple_seq_fit_impl
std::pair<void *, bool>
allocation_command (boost::interprocess::allocation_type command, size_type limit_size,
- size_type preferred_size,size_type &received_size,
+ size_type preferred_size,size_type &received_size,
void *reuse_ptr = 0, size_type backwards_multiple = 1);
/*!Returns the size of the buffer previously allocated pointed by ptr*/
@@ -170,8 +170,8 @@ class simple_seq_fit_impl
void* allocate_aligned (size_type nbytes, size_type alignment);
/*!Allocates bytes, if there is no more memory, it executes functor
- f(size_type) to allocate a new segment to manage. The functor returns
- std::pair<void*, size_type> indicating the base address and size of
+ f(size_type) to allocate a new segment to manage. The functor returns
+ std::pair<void*, size_type> indicating the base address and size of
the new segment. If the new segment can't be allocated, allocate
it will return 0.*/
void* multi_allocate(size_type nbytes);
@@ -259,7 +259,7 @@ inline simple_seq_fit_impl<MutexFamily, VoidPointer>::~simple_seq_fit_impl()
template<class MutexFamily, class VoidPointer>
inline void simple_seq_fit_impl<MutexFamily, VoidPointer>::grow(size_type extra_size)
-{
+{
//Old highest address block's end offset
size_type old_end = m_header.m_size/Alignment*Alignment;
@@ -283,7 +283,7 @@ inline void simple_seq_fit_impl<MutexFamily, VoidPointer>::grow(size_type extra_
template<class MutexFamily, class VoidPointer>
inline void simple_seq_fit_impl<MutexFamily, VoidPointer>::priv_add_segment(void *addr, size_type size)
-{
+{
//Check size
BOOST_ASSERT(!(size < MinBlockSize));
if(size < MinBlockSize)
@@ -293,7 +293,7 @@ inline void simple_seq_fit_impl<MutexFamily, VoidPointer>::priv_add_segment(void
new_block->m_size = size/Alignment;
new_block->m_next = 0;
//Simulate this block was previously allocated
- m_header.m_allocated += new_block->m_size*Alignment;
+ m_header.m_allocated += new_block->m_size*Alignment;
//Return block and insert it in the free block list
this->priv_deallocate(reinterpret_cast<char*>(new_block) + BlockCtrlBytes);
}
@@ -334,7 +334,7 @@ inline void simple_seq_fit_impl<MutexFamily, VoidPointer>::clear_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( reinterpret_cast<char*>(block) + BlockCtrlBytes
, 0
, block->m_size*Alignment - BlockCtrlBytes);
@@ -381,7 +381,7 @@ inline bool simple_seq_fit_impl<MutexFamily, VoidPointer>::
template<class MutexFamily, class VoidPointer>
inline void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
allocate(size_type nbytes)
-{
+{
//-----------------------
boost::interprocess::scoped_lock<interprocess_mutex> guard(m_header);
//-----------------------
@@ -392,7 +392,7 @@ inline void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
template<class MutexFamily, class VoidPointer>
inline void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
allocate_aligned(size_type nbytes, size_type alignment)
-{
+{
//-----------------------
boost::interprocess::scoped_lock<interprocess_mutex> guard(m_header);
//-----------------------
@@ -402,7 +402,7 @@ inline void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
template<class MutexFamily, class VoidPointer>
inline std::pair<void *, bool> simple_seq_fit_impl<MutexFamily, VoidPointer>::
allocation_command (boost::interprocess::allocation_type command, size_type min_size,
- size_type preferred_size,size_type &received_size,
+ size_type preferred_size,size_type &received_size,
void *reuse_ptr, size_type backwards_multiple)
{
//-----------------------
@@ -451,11 +451,11 @@ inline void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
}
//Now obtain the polymorphic functor that creates
//new segments and try to allocate again.
- boost::interprocess::multi_segment_services *p_services =
+ boost::interprocess::multi_segment_services *p_services =
static_cast<boost::interprocess::multi_segment_services*>
(void_pointer::find_group_data(group));
BOOST_ASSERT(p_services);
- std::pair<void *, std::size_t> ret =
+ std::pair<void *, std::size_t> ret =
p_services->create_new_segment(MinBlockSize > nbytes ? MinBlockSize : nbytes);
if(ret.first){
priv_add_segment(ret.first, ret.second);
@@ -498,11 +498,11 @@ void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
return 0;
}
- size_type needs_backwards =
+ size_type needs_backwards =
ipcdetail::get_rounded_size(preferred_size - extra_forward, Alignment);
-
+
if(!only_preferred_backwards){
- needs_backwards =
+ needs_backwards =
max_value(ipcdetail::get_rounded_size(min_size - extra_forward, Alignment)
,min_value(prev->get_user_bytes(), needs_backwards));
}
@@ -513,15 +513,15 @@ void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
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<block_ctrl *>
(reinterpret_cast<char*>(reuse) - needs_backwards - BlockCtrlBytes);
new_block->m_next = 0;
- new_block->m_size =
+ new_block->m_size =
BlockCtrlSize + (needs_backwards + extra_forward)/Alignment;
- prev->m_size =
+ prev->m_size =
(prev->get_total_bytes() - needs_backwards)/Alignment - BlockCtrlSize;
received_size = needs_backwards + extra_forward;
m_header.m_allocated += needs_backwards + BlockCtrlBytes;
@@ -553,7 +553,7 @@ std::pair<void *, bool> simple_seq_fit_impl<MutexFamily, VoidPointer>::
,void *reuse_ptr)
{
if(command & boost::interprocess::shrink_in_place){
- bool success =
+ bool success =
this->priv_shrink(reuse_ptr, limit_size, preferred_size, received_size);
return std::pair<void *, bool> ((success ? reuse_ptr : 0), true);
}
@@ -643,7 +643,7 @@ inline typename simple_seq_fit_impl<MutexFamily, VoidPointer>::block_ctrl *
}
template<class MutexFamily, class VoidPointer>
-inline
+inline
std::pair<typename simple_seq_fit_impl<MutexFamily, VoidPointer>::block_ctrl *
,typename simple_seq_fit_impl<MutexFamily, VoidPointer>::block_ctrl *>
simple_seq_fit_impl<MutexFamily, VoidPointer>::
@@ -724,7 +724,7 @@ inline bool simple_seq_fit_impl<MutexFamily, VoidPointer>::
//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){
@@ -733,7 +733,7 @@ inline bool simple_seq_fit_impl<MutexFamily, VoidPointer>::
//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
@@ -747,7 +747,7 @@ inline bool simple_seq_fit_impl<MutexFamily, VoidPointer>::
BOOST_ASSERT(0);
return false;
}
- return true;
+ return true;
}
template<class MutexFamily, class VoidPointer>
@@ -805,13 +805,13 @@ inline bool simple_seq_fit_impl<MutexFamily, VoidPointer>::
//Now deallocate the new block to insert it in the free list
this->priv_deallocate(reinterpret_cast<char*>(block)+BlockCtrlBytes);
- return true;
+ return true;
}
template<class MutexFamily, class VoidPointer>
inline void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
priv_allocate_aligned(size_type nbytes, size_type alignment)
-{
+{
//Ensure power of 2
if ((alignment & (alignment - size_type(1u))) != 0){
//Alignment is not power of two
@@ -823,8 +823,8 @@ inline void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
if(alignment <= Alignment){
return priv_allocate(boost::interprocess::allocate_new, nbytes, nbytes, ignore).first;
}
-
- size_type request =
+
+ size_type request =
nbytes + alignment + MinBlockSize*Alignment - BlockCtrlBytes;
void *buffer = priv_allocate(boost::interprocess::allocate_new, request, request, ignore).first;
if(!buffer)
@@ -835,7 +835,7 @@ inline void* simple_seq_fit_impl<MutexFamily, VoidPointer>::
char *aligned_portion = reinterpret_cast<char*>
(reinterpret_cast<size_type>(static_cast<char*>(buffer) + alignment - 1) & -alignment);
- char *pos = ((aligned_portion - reinterpret_cast<char*>(buffer)) >= (MinBlockSize*Alignment)) ?
+ char *pos = ((aligned_portion - reinterpret_cast<char*>(buffer)) >= (MinBlockSize*Alignment)) ?
aligned_portion : (aligned_portion + alignment);
block_ctrl *first = reinterpret_cast<block_ctrl*>
@@ -867,7 +867,7 @@ void* simple_seq_fit_impl<MutexFamily, VoidPointer>::priv_check_and_allocate
bool found = false;
if (block->m_size > upper_nunits){
- //This block is bigger than needed, split it in
+ //This block is bigger than needed, split it in
//two blocks, the first's size will be (block->m_size-units)
//the second's size (units)
size_type total_size = block->m_size;
@@ -918,7 +918,7 @@ void simple_seq_fit_impl<MutexFamily, VoidPointer>::priv_deallocate(void* addr)
//Let's get free block list. List is always sorted
//by memory address to allow block merging.
- //Pointer next always points to the first
+ //Pointer next always points to the first
//(lower address) block
block_ctrl_ptr prev = &m_header.m_root;
block_ctrl_ptr pos = m_header.m_root.m_next;
@@ -934,9 +934,9 @@ void simple_seq_fit_impl<MutexFamily, VoidPointer>::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
@@ -949,7 +949,7 @@ void simple_seq_fit_impl<MutexFamily, VoidPointer>::priv_deallocate(void* addr)
//Try to combine with upper block
if ((reinterpret_cast<char*>(ipcdetail::to_raw_pointer(block))
- + Alignment*block->m_size) ==
+ + Alignment*block->m_size) ==
reinterpret_cast<char*>(ipcdetail::to_raw_pointer(pos))){
block->m_size += pos->m_size;
@@ -961,7 +961,7 @@ void simple_seq_fit_impl<MutexFamily, VoidPointer>::priv_deallocate(void* addr)
//Try to combine with lower block
if ((reinterpret_cast<char*>(ipcdetail::to_raw_pointer(prev))
- + Alignment*prev->m_size) ==
+ + Alignment*prev->m_size) ==
reinterpret_cast<char*>(ipcdetail::to_raw_pointer(block))){
prev->m_size += block->m_size;
prev->m_next = block->m_next;
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 1fb95a5bd5..7f486a71ff 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
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MEM_ALGO_DETAIL_SIMPLE_SEQ_FIT_IMPL_HPP
#define BOOST_INTERPROCESS_MEM_ALGO_DETAIL_SIMPLE_SEQ_FIT_IMPL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -80,13 +80,12 @@ class simple_seq_fit_impl
private:
class block_ctrl;
+ friend class block_ctrl;
+
typedef typename boost::intrusive::
pointer_traits<VoidPointer>::template
rebind_pointer<block_ctrl>::type block_ctrl_ptr;
- class block_ctrl;
- friend class block_ctrl;
-
//!Block control structure
class block_ctrl
{
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 0f42f7ed64..6ed18ab703 100644
--- a/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp
+++ b/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MEM_ALGO_RBTREE_BEST_FIT_HPP
#define BOOST_INTERPROCESS_MEM_ALGO_RBTREE_BEST_FIT_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -31,11 +31,12 @@
#include <boost/interprocess/detail/math_functions.hpp>
#include <boost/interprocess/detail/type_traits.hpp>
#include <boost/interprocess/sync/scoped_lock.hpp>
+#include <boost/type_traits/alignment_of.hpp>
#include <boost/type_traits/type_with_alignment.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/assert.hpp>
#include <boost/static_assert.hpp>
-#include <boost/type_traits.hpp>
#include <algorithm>
#include <utility>
#include <climits>
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 ba50c166ec..a8ca25c9a5 100644
--- a/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp
+++ b/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_SIMPLE_SEQ_FIT_HPP
#define BOOST_INTERPROCESS_SIMPLE_SEQ_FIT_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/offset_ptr.hpp b/3party/boost/boost/interprocess/offset_ptr.hpp
index 508946f394..bed7ffe8e0 100644
--- a/3party/boost/boost/interprocess/offset_ptr.hpp
+++ b/3party/boost/boost/interprocess/offset_ptr.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_OFFSET_PTR_HPP
#define BOOST_INTERPROCESS_OFFSET_PTR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -26,6 +26,7 @@
#include <ostream>
#include <istream>
#include <iterator>
+#include <iostream>
#include <boost/aligned_storage.hpp>
#include <boost/type_traits/alignment_of.hpp>
@@ -74,8 +75,11 @@ namespace ipcdetail {
//
////////////////////////////////////////////////////////////////////////
#define BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_PTR
- #define BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_PTR
-
+ #if defined(_MSC_VER) && (_MSC_VER >= 1800) && (defined(_M_AMD64) || defined(_M_X64))
+ //Visual 2013 x64 optimizes more than we desire, so disable branchless option
+ #else
+ #define BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_PTR
+ #endif
template<int Dummy>
#ifndef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_PTR
BOOST_INTERPROCESS_NEVER_INLINE
@@ -95,7 +99,10 @@ namespace ipcdetail {
}
#else
const caster_t caster((void*)this_ptr);
- return caster_t((caster.size() + offset) & -std::size_t(offset != 1)).pointer();
+ std::size_t target_offset = caster.size() + offset;
+ std::size_t mask = -std::size_t(offset != 1);
+ target_offset &= mask;
+ return caster_t(target_offset).pointer();
#endif
}
@@ -277,7 +284,7 @@ class offset_ptr
template<class T2>
offset_ptr( const offset_ptr<T2, DifferenceType, OffsetType, OffsetAlignment> &ptr
#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
- , typename ipcdetail::enable_if_c< ipcdetail::is_convertible<T2*, PointedType*>::value
+ , typename ipcdetail::enable_if_c< ipcdetail::is_convertible<T2*, PointedType*>::value
&& ipcdetail::offset_ptr_maintains_address<T2, PointedType>::value
>::type * = 0
#endif
@@ -397,7 +404,7 @@ class offset_ptr
#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
template<class T2>
- typename ipcdetail::enable_if_c<ipcdetail::is_convertible<T2*, PointedType*>::value
+ typename ipcdetail::enable_if_c<ipcdetail::is_convertible<T2*, PointedType*>::value
&& !ipcdetail::offset_ptr_maintains_address<T2, PointedType>::value
, offset_ptr&>::type
operator= (const offset_ptr<T2, DifferenceType, OffsetType, OffsetAlignment> &ptr)
diff --git a/3party/boost/boost/interprocess/permissions.hpp b/3party/boost/boost/interprocess/permissions.hpp
index 4266b24af1..7403f3bcb1 100644
--- a/3party/boost/boost/interprocess/permissions.hpp
+++ b/3party/boost/boost/interprocess/permissions.hpp
@@ -13,7 +13,7 @@
/// @cond
-#if defined (_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/segment_manager.hpp b/3party/boost/boost/interprocess/segment_manager.hpp
index a0f948f6c8..381edaf3c6 100644
--- a/3party/boost/boost/interprocess/segment_manager.hpp
+++ b/3party/boost/boost/interprocess/segment_manager.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_SEGMENT_MANAGER_HPP
#define BOOST_INTERPROCESS_SEGMENT_MANAGER_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -123,7 +123,7 @@ class segment_manager_base
/// @cond
//Experimental. Dont' use.
- //!Allocates n_elements of elem_bytes bytes.
+ //!Allocates n_elements of elem_bytes bytes.
//!Throws bad_alloc on failure. chain.size() is not increased on failure.
void allocate_many(size_type elem_bytes, size_type n_elements, multiallocation_chain &chain)
{
@@ -145,7 +145,7 @@ class segment_manager_base
}
}
- //!Allocates n_elements of elem_bytes bytes.
+ //!Allocates n_elements of elem_bytes bytes.
//!Non-throwing version. chain.size() is not increased on failure.
void allocate_many(std::nothrow_t, size_type elem_bytes, size_type n_elements, multiallocation_chain &chain)
{ MemoryAlgorithm::allocate_many(elem_bytes, n_elements, chain); }
@@ -188,6 +188,8 @@ class segment_manager_base
return ret;
}
+ /// @cond
+
template<class T>
std::pair<T *, bool>
allocation_command (boost::interprocess::allocation_type command, size_type limit_size,
@@ -215,6 +217,8 @@ class segment_manager_base
return ret;
}
+ /// @endcond
+
//!Deallocates the bytes allocated with allocate/allocate_many()
//!pointed by addr
void deallocate (void *addr)
@@ -343,19 +347,19 @@ class segment_manager
segment_manager();
segment_manager(const segment_manager &);
segment_manager &operator=(const segment_manager &);
- typedef segment_manager_base<MemoryAlgorithm> Base;
+ typedef segment_manager_base<MemoryAlgorithm> segment_manager_base_t;
/// @endcond
public:
- typedef MemoryAlgorithm memory_algorithm;
- typedef typename Base::void_pointer void_pointer;
- typedef typename Base::size_type size_type;
- typedef typename Base::difference_type difference_type;
- typedef CharType char_type;
+ typedef MemoryAlgorithm memory_algorithm;
+ typedef typename segment_manager_base_t::void_pointer void_pointer;
+ typedef typename segment_manager_base_t::size_type size_type;
+ typedef typename segment_manager_base_t::difference_type difference_type;
+ typedef CharType char_type;
typedef segment_manager_base<MemoryAlgorithm> segment_manager_base_type;
- static const size_type PayloadPerAllocation = Base::PayloadPerAllocation;
+ static const size_type PayloadPerAllocation = segment_manager_base_t::PayloadPerAllocation;
/// @cond
private:
@@ -379,7 +383,7 @@ class segment_manager
,is_intrusive_index<index_type>::value> unique_transform;
/// @endcond
- typedef typename Base::mutex_family mutex_family;
+ typedef typename segment_manager_base_t::mutex_family mutex_family;
typedef transform_iterator
<typename named_index_t::const_iterator, named_transform> const_named_iterator;
@@ -409,39 +413,31 @@ class segment_manager
//!the segment manager is being constructed.
//!Can throw
explicit segment_manager(size_type segment_size)
- : Base(segment_size, priv_get_reserved_bytes())
- , m_header(static_cast<Base*>(get_this_pointer()))
+ : segment_manager_base_t(segment_size, priv_get_reserved_bytes())
+ , m_header(static_cast<segment_manager_base_t*>(get_this_pointer()))
{
(void) anonymous_instance; (void) unique_instance;
- BOOST_ASSERT(static_cast<const void*>(this) == static_cast<const void*>(static_cast<Base*>(this)));
+ //Check EBO is applied, it's required
+ const void * const this_addr = this;
+ const void *const segm_addr = static_cast<segment_manager_base_t*>(this);
+ (void)this_addr; (void)segm_addr;
+ BOOST_ASSERT( this_addr == segm_addr);
}
- //!Tries to find a previous named allocation. Returns the address
- //!and the object count. On failure the first member of the
- //!returned pair is 0.
- template <class T>
- std::pair<T*, size_type> find (const CharType* name)
- { return this->priv_find_impl<T>(name, true); }
-
- //!Tries to find a previous unique allocation. Returns the address
+ //!Tries to find a previous named/unique allocation. Returns the address
//!and the object count. On failure the first member of the
//!returned pair is 0.
template <class T>
- std::pair<T*, size_type> find (const ipcdetail::unique_instance_t* name)
+ std::pair<T*, size_type> find (char_ptr_holder_t name)
{ return this->priv_find_impl<T>(name, true); }
- //!Tries to find a previous named allocation. Returns the address
- //!and the object count. On failure the first member of the
- //!returned pair is 0. This search is not mutex-protected!
- template <class T>
- std::pair<T*, size_type> find_no_lock (const CharType* name)
- { return this->priv_find_impl<T>(name, false); }
-
- //!Tries to find a previous unique allocation. Returns the address
+ //!Tries to find a previous named/unique allocation. Returns the address
//!and the object count. On failure the first member of the
//!returned pair is 0. This search is not mutex-protected!
+ //!Use it only inside atomic_func() calls, where the internal mutex
+ //!is guaranteed to be locked.
template <class T>
- std::pair<T*, size_type> find_no_lock (const ipcdetail::unique_instance_t* name)
+ std::pair<T*, size_type> find_no_lock (char_ptr_holder_t name)
{ return this->priv_find_impl<T>(name, false); }
//!Returns throwing "construct" proxy
@@ -500,7 +496,7 @@ class segment_manager
//!Calls object function blocking recursive interprocess_mutex and guarantees that
//!no new named_alloc or destroy will be executed by any process while
- //!executing the object function call*/
+ //!executing the object function call
template <class Func>
void atomic_func(Func &f)
{ scoped_lock<rmutex> guard(m_header); f(); }
@@ -523,28 +519,26 @@ class segment_manager
}
}
- //!Destroys a previously created unique instance.
+ //!Destroys a previously created named/unique instance.
//!Returns false if the object was not present.
template <class T>
- bool destroy(const ipcdetail::unique_instance_t *)
+ bool destroy(char_ptr_holder_t name)
{
+ BOOST_ASSERT(!name.is_anonymous());
ipcdetail::placement_destroy<T> dtor;
- return this->priv_generic_named_destroy<char>
- (typeid(T).name(), m_header.m_unique_index, dtor, is_intrusive_t());
- }
- //!Destroys the named object with
- //!the given name. Returns false if that object can't be found.
- template <class T>
- bool destroy(const CharType *name)
- {
- ipcdetail::placement_destroy<T> dtor;
- return this->priv_generic_named_destroy<CharType>
- (name, m_header.m_named_index, dtor, is_intrusive_t());
+ if(name.is_unique()){
+ return this->priv_generic_named_destroy<char>
+ ( typeid(T).name(), m_header.m_unique_index , dtor, is_intrusive_t());
+ }
+ else{
+ return this->priv_generic_named_destroy<CharType>
+ ( name.get(), m_header.m_named_index, dtor, is_intrusive_t());
+ }
}
//!Destroys an anonymous, unique or named object
- //!using it's address
+ //!using its address
template <class T>
void destroy_ptr(const T *p)
{
@@ -628,7 +622,7 @@ class segment_manager
//!Obtains the minimum size needed by the
//!segment manager
static size_type get_min_size()
- { return Base::get_min_size(priv_get_reserved_bytes()); }
+ { return segment_manager_base_t::get_min_size(priv_get_reserved_bytes()); }
//!Returns a constant iterator to the beginning of the information about
//!the named allocations performed in this segment manager
@@ -685,8 +679,8 @@ class segment_manager
typedef boost::interprocess::deleter<T, segment_manager> type;
};
- //!Returns an instance of the default allocator for type T
- //!initialized that allocates memory from this segment manager.
+ //!Returns an instance of the default deleter for type T
+ //!that will delete an object constructed in this segment manager.
template<class T>
typename deleter<T>::type
get_deleter()
@@ -742,11 +736,8 @@ class segment_manager
return std::pair<T*, size_type>(static_cast<T*>(ret), size);
}
- void *priv_generic_construct(const CharType *name,
- size_type num,
- bool try2find,
- bool dothrow,
- ipcdetail::in_place_interface &table)
+ void *priv_generic_construct
+ (const CharType *name, size_type num, bool try2find, bool dothrow, ipcdetail::in_place_interface &table)
{
void *ret;
//Security overflow check
@@ -800,7 +791,7 @@ class segment_manager
static const CharType *priv_get_instance_name(block_header_t *ctrl_data)
{
boost::interprocess::allocation_type type = ctrl_data->alloc_type();
- if(type != named_type){
+ if(type == anonymous_type){
BOOST_ASSERT((type == anonymous_type && ctrl_data->m_num_char == 0) ||
(type == unique_type && ctrl_data->m_num_char != 0) );
return 0;
@@ -832,8 +823,8 @@ class segment_manager
static size_type priv_get_reserved_bytes()
{
//Get the number of bytes until the end of (*this)
- //beginning in the end of the Base base.
- return sizeof(segment_manager) - sizeof(Base);
+ //beginning in the end of the segment_manager_base_t base.
+ return sizeof(segment_manager) - sizeof(segment_manager_base_t);
}
template <class CharT>
@@ -841,13 +832,10 @@ class segment_manager
(const CharT* name,
IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > &index,
ipcdetail::in_place_interface &table,
- size_type &length,
- ipcdetail::true_ is_intrusive,
- bool use_lock)
+ size_type &length, ipcdetail::true_ is_intrusive, bool use_lock)
{
(void)is_intrusive;
typedef IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > index_type;
- typedef ipcdetail::index_key<CharT, void_pointer> index_key_t;
typedef typename index_type::iterator index_it;
//-------------------------------
@@ -881,9 +869,7 @@ class segment_manager
(const CharT* name,
IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > &index,
ipcdetail::in_place_interface &table,
- size_type &length,
- ipcdetail::false_ is_intrusive,
- bool use_lock)
+ size_type &length, ipcdetail::false_ is_intrusive, bool use_lock)
{
(void)is_intrusive;
typedef IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > index_type;
@@ -919,8 +905,7 @@ class segment_manager
bool priv_generic_named_destroy
(block_header_t *block_header,
IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > &index,
- ipcdetail::in_place_interface &table,
- ipcdetail::true_ is_node_index)
+ ipcdetail::in_place_interface &table, ipcdetail::true_ is_node_index)
{
(void)is_node_index;
typedef typename IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> >::iterator index_it;
@@ -944,12 +929,10 @@ class segment_manager
template <class CharT>
bool priv_generic_named_destroy(const CharT *name,
IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > &index,
- ipcdetail::in_place_interface &table,
- ipcdetail::true_ is_intrusive_index)
+ ipcdetail::in_place_interface &table, ipcdetail::true_ is_intrusive_index)
{
(void)is_intrusive_index;
typedef IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > index_type;
- typedef ipcdetail::index_key<CharT, void_pointer> index_key_t;
typedef typename index_type::iterator index_it;
typedef typename index_type::value_type intrusive_value_type;
@@ -1062,21 +1045,17 @@ class segment_manager
}
//Call destructors and free memory
- std::size_t destroyed;
+ std::size_t destroyed;
table.destroy_n(values, num, destroyed);
this->deallocate(memory);
return true;
}
template<class CharT>
- void * priv_generic_named_construct(unsigned char type,
- const CharT *name,
- size_type num,
- bool try2find,
- bool dothrow,
- ipcdetail::in_place_interface &table,
- IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > &index,
- ipcdetail::true_ is_intrusive)
+ void * priv_generic_named_construct
+ (unsigned char type, const CharT *name, size_type num, bool try2find,
+ bool dothrow, ipcdetail::in_place_interface &table,
+ IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > &index, ipcdetail::true_ is_intrusive)
{
(void)is_intrusive;
std::size_t namelen = std::char_traits<CharT>::length(name);
@@ -1198,14 +1177,10 @@ class segment_manager
//!Generic named new function for
//!named functions
template<class CharT>
- void * priv_generic_named_construct(unsigned char type,
- const CharT *name,
- size_type num,
- bool try2find,
- bool dothrow,
- ipcdetail::in_place_interface &table,
- IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > &index,
- ipcdetail::false_ is_intrusive)
+ void * priv_generic_named_construct
+ (unsigned char type, const CharT *name, size_type num, bool try2find, bool dothrow,
+ ipcdetail::in_place_interface &table,
+ IndexType<ipcdetail::index_config<CharT, MemoryAlgorithm> > &index, ipcdetail::false_ is_intrusive)
{
(void)is_intrusive;
std::size_t namelen = std::char_traits<CharT>::length(name);
@@ -1348,9 +1323,9 @@ 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)
+ header_t(segment_manager_base_t *segment_mngr_base)
+ : m_named_index (segment_mngr_base)
+ , m_unique_index(segment_mngr_base)
{}
} m_header;
diff --git a/3party/boost/boost/interprocess/shared_memory_object.hpp b/3party/boost/boost/interprocess/shared_memory_object.hpp
index 54563f5c7a..9442dd969b 100644
--- a/3party/boost/boost/interprocess/shared_memory_object.hpp
+++ b/3party/boost/boost/interprocess/shared_memory_object.hpp
@@ -19,7 +19,7 @@
#include <boost/interprocess/interprocess_fwd.hpp>
#include <boost/interprocess/exceptions.hpp>
#include <boost/interprocess/detail/os_file_functions.hpp>
-#include <boost/interprocess/detail/tmp_dir_helpers.hpp>
+#include <boost/interprocess/detail/shared_dir_helpers.hpp>
#include <boost/interprocess/permissions.hpp>
#include <cstddef>
#include <string>
@@ -180,7 +180,7 @@ inline bool shared_memory_object::priv_open_or_create
{
m_filename = filename;
std::string shmfile;
- ipcdetail::create_tmp_and_clean_old_and_get_filename(filename, shmfile);
+ ipcdetail::create_shared_dir_cleaning_old_and_get_filepath(filename, shmfile);
//Set accesses
if (mode != read_write && mode != read_only){
@@ -221,7 +221,7 @@ inline bool shared_memory_object::remove(const char *filename)
try{
//Make sure a temporary path is created for shared memory
std::string shmfile;
- ipcdetail::tmp_filename(filename, shmfile);
+ ipcdetail::shared_filepath(filename, shmfile);
return ipcdetail::delete_file(shmfile.c_str());
}
catch(...){
@@ -285,7 +285,7 @@ inline bool shared_memory_object::priv_open_or_create
ipcdetail::add_leading_slash(filename, m_filename);
}
else{
- ipcdetail::create_tmp_and_clean_old_and_get_filename(filename, m_filename);
+ ipcdetail::create_shared_dir_cleaning_old_and_get_filepath(filename, m_filename);
}
//Create new mapping
@@ -365,7 +365,7 @@ inline bool shared_memory_object::priv_open_or_create
inline bool shared_memory_object::remove(const char *filename)
{
try{
- std::string file_str;
+ std::string filepath;
#if defined(BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SHARED_MEMORY)
const bool add_leading_slash = false;
#elif defined(BOOST_INTERPROCESS_RUNTIME_FILESYSTEM_BASED_POSIX_SHARED_MEMORY)
@@ -374,12 +374,12 @@ inline bool shared_memory_object::remove(const char *filename)
const bool add_leading_slash = true;
#endif
if(add_leading_slash){
- ipcdetail::add_leading_slash(filename, file_str);
+ ipcdetail::add_leading_slash(filename, filepath);
}
else{
- ipcdetail::tmp_filename(filename, file_str);
+ ipcdetail::shared_filepath(filename, filepath);
}
- return 0 == shm_unlink(file_str.c_str());
+ return 0 == shm_unlink(filepath.c_str());
}
catch(...){
return false;
diff --git a/3party/boost/boost/interprocess/smart_ptr/deleter.hpp b/3party/boost/boost/interprocess/smart_ptr/deleter.hpp
index 8447bf1b34..1a9e390018 100644
--- a/3party/boost/boost/interprocess/smart_ptr/deleter.hpp
+++ b/3party/boost/boost/interprocess/smart_ptr/deleter.hpp
@@ -13,7 +13,7 @@
#ifndef BOOST_INTERPROCESS_DELETER_HPP
#define BOOST_INTERPROCESS_DELETER_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp
index 9429613492..77ceda0c58 100644
--- a/3party/boost/boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp
+++ b/3party/boost/boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp
@@ -13,7 +13,7 @@
#ifndef BOOST_INTERPROCESS_BAD_WEAK_PTR_HPP_INCLUDED
#define BOOST_INTERPROCESS_BAD_WEAK_PTR_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -36,7 +36,7 @@ class bad_weak_ptr
{ return "boost::interprocess::bad_weak_ptr"; }
};
-} // namespace interprocess
+} // namespace interprocess
} // namespace boost
#include <boost/interprocess/detail/config_end.hpp>
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 2a86a3558b..aed83eb2ab 100644
--- a/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp
+++ b/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp
@@ -16,7 +16,7 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
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 74f65f1814..6ec1d56e59 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
@@ -3,7 +3,7 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp
index 2d29ae62ba..3e01be5531 100644
--- a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp
+++ b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp
@@ -3,7 +3,7 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -83,6 +83,8 @@ class sp_counted_impl_pd
portable_rebind_alloc
< const this_type >::type const_this_allocator;
typedef typename this_allocator::pointer this_pointer;
+ typedef typename boost::intrusive::
+ pointer_traits<this_pointer> this_pointer_traits;
sp_counted_impl_pd( sp_counted_impl_pd const & );
sp_counted_impl_pd & operator= ( sp_counted_impl_pd const & );
@@ -115,11 +117,10 @@ class sp_counted_impl_pd
void destroy() // nothrow
{
- //Self destruction, so get a copy of the allocator
- //(in the future we could move it)
- this_allocator a_copy(*this);
+ //Self destruction, so move the allocator
+ this_allocator a_copy(::boost::move(static_cast<this_allocator&>(*this)));
BOOST_ASSERT(a_copy == *this);
- this_pointer this_ptr (this);
+ this_pointer this_ptr(this_pointer_traits::pointer_to(*this));
//Do it now!
scoped_ptr< this_type, scoped_ptr_dealloc_functor<this_allocator> >
deleter_ptr(this_ptr, a_copy);
diff --git a/3party/boost/boost/interprocess/streams/bufferstream.hpp b/3party/boost/boost/interprocess/streams/bufferstream.hpp
index 9a2681abfa..404880d24e 100644
--- a/3party/boost/boost/interprocess/streams/bufferstream.hpp
+++ b/3party/boost/boost/interprocess/streams/bufferstream.hpp
@@ -251,8 +251,11 @@ class basic_bufferbuf
//!A basic_istream class that uses a fixed size character buffer
//!as its formatting buffer.
template <class CharT, class CharTraits>
-class basic_ibufferstream
- : public std::basic_istream<CharT, CharTraits>
+class basic_ibufferstream :
+ /// @cond
+ private basic_bufferbuf<CharT, CharTraits>,
+ /// @endcond
+ public std::basic_istream<CharT, CharTraits>
{
public: // Typedefs
typedef typename std::basic_ios
@@ -262,24 +265,40 @@ class basic_ibufferstream
typedef typename std::basic_ios<char_type, CharTraits>::off_type off_type;
typedef typename std::basic_ios<char_type, CharTraits>::traits_type traits_type;
+ /// @cond
private:
- typedef std::basic_ios<char_type, CharTraits> basic_ios_t;
- typedef std::basic_istream<char_type, CharTraits> base_t;
+ typedef basic_bufferbuf<CharT, CharTraits> bufferbuf_t;
+ typedef std::basic_ios<char_type, CharTraits> basic_ios_t;
+ typedef std::basic_istream<char_type, CharTraits> base_t;
+ bufferbuf_t & get_buf() { return *this; }
+ const bufferbuf_t & get_buf() const{ return *this; }
+ /// @endcond
public:
//!Constructor.
//!Does not throw.
basic_ibufferstream(std::ios_base::openmode mode = std::ios_base::in)
- : basic_ios_t(), base_t(0), m_buf(mode | std::ios_base::in)
- { basic_ios_t::init(&m_buf); }
+ : //basic_ios_t() is called first (lefting it uninitialized) as it's a
+ //virtual base of basic_istream. The class will be initialized when
+ //basic_istream is constructed calling basic_ios_t::init().
+ //As bufferbuf_t's constructor does not throw there is no risk of
+ //calling the basic_ios_t's destructor without calling basic_ios_t::init()
+ bufferbuf_t(mode | std::ios_base::in)
+ , base_t(&get_buf())
+ {}
//!Constructor. Assigns formatting buffer.
//!Does not throw.
basic_ibufferstream(const CharT *buf, std::size_t length,
std::ios_base::openmode mode = std::ios_base::in)
- : basic_ios_t(), base_t(0),
- m_buf(const_cast<CharT*>(buf), length, mode | std::ios_base::in)
- { basic_ios_t::init(&m_buf); }
+ : //basic_ios_t() is called first (lefting it uninitialized) as it's a
+ //virtual base of basic_istream. The class will be initialized when
+ //basic_istream is constructed calling basic_ios_t::init().
+ //As bufferbuf_t's constructor does not throw there is no risk of
+ //calling the basic_ios_t's destructor without calling basic_ios_t::init()
+ bufferbuf_t(const_cast<CharT*>(buf), length, mode | std::ios_base::in)
+ , base_t(&get_buf())
+ {}
~basic_ibufferstream(){};
@@ -287,29 +306,27 @@ class basic_ibufferstream
//!Returns the address of the stored
//!stream buffer.
basic_bufferbuf<CharT, CharTraits>* rdbuf() const
- { return const_cast<basic_bufferbuf<CharT, CharTraits>*>(&m_buf); }
+ { return const_cast<basic_bufferbuf<CharT, CharTraits>*>(&get_buf()); }
//!Returns the pointer and size of the internal buffer.
//!Does not throw.
std::pair<const CharT *, std::size_t> buffer() const
- { return m_buf.buffer(); }
+ { return get_buf().buffer(); }
//!Sets the underlying buffer to a new value. Resets
//!stream position. Does not throw.
void buffer(const CharT *buf, std::size_t length)
- { m_buf.buffer(const_cast<CharT*>(buf), length); }
-
- /// @cond
- private:
- basic_bufferbuf<CharT, CharTraits> m_buf;
- /// @endcond
+ { get_buf().buffer(const_cast<CharT*>(buf), length); }
};
//!A basic_ostream class that uses a fixed size character buffer
//!as its formatting buffer.
template <class CharT, class CharTraits>
-class basic_obufferstream
- : public std::basic_ostream<CharT, CharTraits>
+class basic_obufferstream :
+ /// @cond
+ private basic_bufferbuf<CharT, CharTraits>,
+ /// @endcond
+ public std::basic_ostream<CharT, CharTraits>
{
public:
typedef typename std::basic_ios
@@ -321,23 +338,38 @@ class basic_obufferstream
/// @cond
private:
+ typedef basic_bufferbuf<CharT, CharTraits> bufferbuf_t;
typedef std::basic_ios<char_type, CharTraits> basic_ios_t;
typedef std::basic_ostream<char_type, CharTraits> base_t;
+ bufferbuf_t & get_buf() { return *this; }
+ const bufferbuf_t & get_buf() const{ return *this; }
/// @endcond
+
public:
//!Constructor.
//!Does not throw.
basic_obufferstream(std::ios_base::openmode mode = std::ios_base::out)
- : basic_ios_t(), base_t(0), m_buf(mode | std::ios_base::out)
- { basic_ios_t::init(&m_buf); }
+ : //basic_ios_t() is called first (lefting it uninitialized) as it's a
+ //virtual base of basic_istream. The class will be initialized when
+ //basic_istream is constructed calling basic_ios_t::init().
+ //As bufferbuf_t's constructor does not throw there is no risk of
+ //calling the basic_ios_t's destructor without calling basic_ios_t::init()
+ bufferbuf_t(mode | std::ios_base::out)
+ , base_t(&get_buf())
+ {}
//!Constructor. Assigns formatting buffer.
//!Does not throw.
basic_obufferstream(CharT *buf, std::size_t length,
std::ios_base::openmode mode = std::ios_base::out)
- : basic_ios_t(), base_t(0),
- m_buf(buf, length, mode | std::ios_base::out)
- { basic_ios_t::init(&m_buf); }
+ : //basic_ios_t() is called first (lefting it uninitialized) as it's a
+ //virtual base of basic_istream. The class will be initialized when
+ //basic_istream is constructed calling basic_ios_t::init().
+ //As bufferbuf_t's constructor does not throw there is no risk of
+ //calling the basic_ios_t's destructor without calling basic_ios_t::init()
+ bufferbuf_t(buf, length, mode | std::ios_base::out)
+ , base_t(&get_buf())
+ {}
~basic_obufferstream(){}
@@ -345,31 +377,28 @@ class basic_obufferstream
//!Returns the address of the stored
//!stream buffer.
basic_bufferbuf<CharT, CharTraits>* rdbuf() const
- { return const_cast<basic_bufferbuf<CharT, CharTraits>*>(&m_buf); }
+ { return const_cast<basic_bufferbuf<CharT, CharTraits>*>(&get_buf()); }
//!Returns the pointer and size of the internal buffer.
//!Does not throw.
std::pair<CharT *, std::size_t> buffer() const
- { return m_buf.buffer(); }
+ { return get_buf().buffer(); }
//!Sets the underlying buffer to a new value. Resets
//!stream position. Does not throw.
void buffer(CharT *buf, std::size_t length)
- { m_buf.buffer(buf, length); }
-
- /// @cond
- private:
- basic_bufferbuf<CharT, CharTraits> m_buf;
- /// @endcond
+ { get_buf().buffer(buf, length); }
};
//!A basic_iostream class that uses a fixed size character buffer
//!as its formatting buffer.
template <class CharT, class CharTraits>
-class basic_bufferstream
- : public std::basic_iostream<CharT, CharTraits>
-
+class basic_bufferstream :
+ /// @cond
+ private basic_bufferbuf<CharT, CharTraits>,
+ /// @endcond
+ public std::basic_iostream<CharT, CharTraits>
{
public: // Typedefs
typedef typename std::basic_ios
@@ -381,8 +410,11 @@ class basic_bufferstream
/// @cond
private:
- typedef std::basic_ios<char_type, CharTraits> basic_ios_t;
- typedef std::basic_iostream<char_type, CharTraits> base_t;
+ typedef basic_bufferbuf<CharT, CharTraits> bufferbuf_t;
+ typedef std::basic_ios<char_type, CharTraits> basic_ios_t;
+ typedef std::basic_iostream<char_type, CharTraits> base_t;
+ bufferbuf_t & get_buf() { return *this; }
+ const bufferbuf_t & get_buf() const{ return *this; }
/// @endcond
public:
@@ -390,16 +422,28 @@ class basic_bufferstream
//!Does not throw.
basic_bufferstream(std::ios_base::openmode mode
= std::ios_base::in | std::ios_base::out)
- : basic_ios_t(), base_t(0), m_buf(mode)
- { basic_ios_t::init(&m_buf); }
+ : //basic_ios_t() is called first (lefting it uninitialized) as it's a
+ //virtual base of basic_istream. The class will be initialized when
+ //basic_istream is constructed calling basic_ios_t::init().
+ //As bufferbuf_t's constructor does not throw there is no risk of
+ //calling the basic_ios_t's destructor without calling basic_ios_t::init()
+ bufferbuf_t(mode)
+ , base_t(&get_buf())
+ {}
//!Constructor. Assigns formatting buffer.
//!Does not throw.
basic_bufferstream(CharT *buf, std::size_t length,
std::ios_base::openmode mode
= std::ios_base::in | std::ios_base::out)
- : basic_ios_t(), base_t(0), m_buf(buf, length, mode)
- { basic_ios_t::init(&m_buf); }
+ : //basic_ios_t() is called first (lefting it uninitialized) as it's a
+ //virtual base of basic_istream. The class will be initialized when
+ //basic_istream is constructed calling basic_ios_t::init().
+ //As bufferbuf_t's constructor does not throw there is no risk of
+ //calling the basic_ios_t's destructor without calling basic_ios_t::init()
+ bufferbuf_t(buf, length, mode)
+ , base_t(&get_buf())
+ {}
~basic_bufferstream(){}
@@ -407,22 +451,17 @@ class basic_bufferstream
//!Returns the address of the stored
//!stream buffer.
basic_bufferbuf<CharT, CharTraits>* rdbuf() const
- { return const_cast<basic_bufferbuf<CharT, CharTraits>*>(&m_buf); }
+ { return const_cast<basic_bufferbuf<CharT, CharTraits>*>(&get_buf()); }
//!Returns the pointer and size of the internal buffer.
//!Does not throw.
std::pair<CharT *, std::size_t> buffer() const
- { return m_buf.buffer(); }
+ { return get_buf().buffer(); }
//!Sets the underlying buffer to a new value. Resets
//!stream position. Does not throw.
void buffer(CharT *buf, std::size_t length)
- { m_buf.buffer(buf, length); }
-
- /// @cond
- private:
- basic_bufferbuf<CharT, CharTraits> m_buf;
- /// @endcond
+ { get_buf().buffer(buf, length); }
};
//Some typedefs to simplify usage
diff --git a/3party/boost/boost/interprocess/streams/vectorstream.hpp b/3party/boost/boost/interprocess/streams/vectorstream.hpp
index 0c9f540e33..25dc5db586 100644
--- a/3party/boost/boost/interprocess/streams/vectorstream.hpp
+++ b/3party/boost/boost/interprocess/streams/vectorstream.hpp
@@ -92,8 +92,6 @@ class basic_vectorbuf
: base_t(), m_mode(mode), m_vect(param)
{ this->initialize_pointers(); }
- virtual ~basic_vectorbuf(){}
-
public:
//!Swaps the underlying vector with the passed vector.
@@ -367,10 +365,10 @@ class basic_vectorbuf
//!boost::interprocess::basic_string
template <class CharVector, class CharTraits>
class basic_ivectorstream
+ : public std::basic_istream<typename CharVector::value_type, CharTraits>
/// @cond
- : private basic_vectorbuf<CharVector, CharTraits>
+ , private basic_vectorbuf<CharVector, CharTraits>
/// @endcond
- , public std::basic_istream<typename CharVector::value_type, CharTraits>
{
public:
typedef CharVector vector_type;
@@ -384,56 +382,62 @@ class basic_ivectorstream
/// @cond
private:
typedef basic_vectorbuf<CharVector, CharTraits> vectorbuf_t;
+ typedef std::basic_ios<char_type, CharTraits> basic_ios_t;
typedef std::basic_istream<char_type, CharTraits> base_t;
- vectorbuf_t & m_buf() { return *this; }
- const vectorbuf_t & m_buf() const{ return *this; }
+ vectorbuf_t & get_buf() { return *this; }
+ const vectorbuf_t & get_buf() const{ return *this; }
/// @endcond
public:
+
//!Constructor. Throws if vector_type default
//!constructor throws.
basic_ivectorstream(std::ios_base::openmode mode = std::ios_base::in)
- : vectorbuf_t(mode | std::ios_base::in), base_t(&m_buf())
- {}
+ : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+ //(via basic_ios::init() call in base_t's constructor) without the risk of a
+ //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+ , vectorbuf_t(mode | std::ios_base::in)
+ { this->base_t::rdbuf(&get_buf()); }
//!Constructor. Throws if vector_type(const VectorParameter &param)
//!throws.
template<class VectorParameter>
basic_ivectorstream(const VectorParameter &param,
std::ios_base::openmode mode = std::ios_base::in)
- : vectorbuf_t(param, mode | std::ios_base::in), base_t(&m_buf())
+ : vectorbuf_t(param, mode | std::ios_base::in)
+ //basic_ios_t() is constructed uninitialized as virtual base
+ //and initialized inside base_t calling basic_ios::init()
+ , base_t(&get_buf())
{}
- ~basic_ivectorstream(){};
-
public:
//!Returns the address of the stored
//!stream buffer.
basic_vectorbuf<CharVector, CharTraits>* rdbuf() const
- { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&m_buf()); }
+ { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&get_buf()); }
//!Swaps the underlying vector with the passed vector.
//!This function resets the read position in the stream.
//!Does not throw.
void swap_vector(vector_type &vect)
- { m_buf().swap_vector(vect); }
+ { get_buf().swap_vector(vect); }
//!Returns a const reference to the internal vector.
//!Does not throw.
const vector_type &vector() const
- { return m_buf().vector(); }
+ { return get_buf().vector(); }
//!Calls reserve() method of the internal vector.
//!Resets the stream to the first position.
//!Throws if the internals vector's reserve throws.
void reserve(typename vector_type::size_type size)
- { m_buf().reserve(size); }
+ { get_buf().reserve(size); }
//!Calls clear() method of the internal vector.
//!Resets the stream to the first position.
void clear()
- { m_buf().clear(); }
+ { get_buf().clear(); }
};
//!A basic_ostream class that holds a character vector specified by CharVector
@@ -442,10 +446,10 @@ class basic_ivectorstream
//!boost::interprocess::basic_string
template <class CharVector, class CharTraits>
class basic_ovectorstream
+ : public std::basic_ostream<typename CharVector::value_type, CharTraits>
/// @cond
- : private basic_vectorbuf<CharVector, CharTraits>
+ , private basic_vectorbuf<CharVector, CharTraits>
/// @endcond
- , public std::basic_ostream<typename CharVector::value_type, CharTraits>
{
public:
typedef CharVector vector_type;
@@ -459,54 +463,58 @@ class basic_ovectorstream
/// @cond
private:
typedef basic_vectorbuf<CharVector, CharTraits> vectorbuf_t;
+ typedef std::basic_ios<char_type, CharTraits> basic_ios_t;
typedef std::basic_ostream<char_type, CharTraits> base_t;
- vectorbuf_t & m_buf() { return *this; }
- const vectorbuf_t & m_buf()const { return *this; }
+ vectorbuf_t & get_buf() { return *this; }
+ const vectorbuf_t & get_buf()const { return *this; }
/// @endcond
public:
//!Constructor. Throws if vector_type default
//!constructor throws.
basic_ovectorstream(std::ios_base::openmode mode = std::ios_base::out)
- : vectorbuf_t(mode | std::ios_base::out), base_t(&m_buf())
- {}
+ : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+ //(via basic_ios::init() call in base_t's constructor) without the risk of a
+ //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+ , vectorbuf_t(mode | std::ios_base::out)
+ { this->base_t::rdbuf(&get_buf()); }
//!Constructor. Throws if vector_type(const VectorParameter &param)
//!throws.
template<class VectorParameter>
basic_ovectorstream(const VectorParameter &param,
std::ios_base::openmode mode = std::ios_base::out)
- : vectorbuf_t(param, mode | std::ios_base::out), base_t(&m_buf())
- {}
-
- ~basic_ovectorstream(){}
+ : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+ //(via basic_ios::init() call in base_t's constructor) without the risk of a
+ //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+ , vectorbuf_t(param, mode | std::ios_base::out)
+ { this->base_t::rdbuf(&get_buf()); }
public:
//!Returns the address of the stored
//!stream buffer.
basic_vectorbuf<CharVector, CharTraits>* rdbuf() const
- { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&m_buf()); }
+ { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&get_buf()); }
//!Swaps the underlying vector with the passed vector.
//!This function resets the write position in the stream.
//!Does not throw.
void swap_vector(vector_type &vect)
- { m_buf().swap_vector(vect); }
+ { get_buf().swap_vector(vect); }
//!Returns a const reference to the internal vector.
//!Does not throw.
const vector_type &vector() const
- { return m_buf().vector(); }
+ { return get_buf().vector(); }
//!Calls reserve() method of the internal vector.
//!Resets the stream to the first position.
//!Throws if the internals vector's reserve throws.
void reserve(typename vector_type::size_type size)
- { m_buf().reserve(size); }
+ { get_buf().reserve(size); }
};
-
//!A basic_iostream class that holds a character vector specified by CharVector
//!template parameter as its formatting buffer. The vector must have
//!contiguous storage, like std::vector, boost::interprocess::vector or
@@ -514,7 +522,9 @@ class basic_ovectorstream
template <class CharVector, class CharTraits>
class basic_vectorstream
: public std::basic_iostream<typename CharVector::value_type, CharTraits>
-
+ /// @cond
+ , private basic_vectorbuf<CharVector, CharTraits>
+ /// @endcond
{
public:
typedef CharVector vector_type;
@@ -527,8 +537,12 @@ class basic_vectorstream
/// @cond
private:
- typedef std::basic_ios<char_type, CharTraits> basic_ios_t;
- typedef std::basic_iostream<char_type, CharTraits> base_t;
+ typedef basic_vectorbuf<CharVector, CharTraits> vectorbuf_t;
+ typedef std::basic_ios<char_type, CharTraits> basic_ios_t;
+ typedef std::basic_iostream<char_type, CharTraits> base_t;
+
+ vectorbuf_t & get_buf() { return *this; }
+ const vectorbuf_t & get_buf() const{ return *this; }
/// @endcond
public:
@@ -536,50 +550,49 @@ class basic_vectorstream
//!constructor throws.
basic_vectorstream(std::ios_base::openmode mode
= std::ios_base::in | std::ios_base::out)
- : basic_ios_t(), base_t(0), m_buf(mode)
- { basic_ios_t::init(&m_buf); }
+ : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+ //(via basic_ios::init() call in base_t's constructor) without the risk of a
+ //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+ , vectorbuf_t(mode)
+ { this->base_t::rdbuf(&get_buf()); }
//!Constructor. Throws if vector_type(const VectorParameter &param)
//!throws.
template<class VectorParameter>
basic_vectorstream(const VectorParameter &param, std::ios_base::openmode mode
= std::ios_base::in | std::ios_base::out)
- : basic_ios_t(), base_t(0), m_buf(param, mode)
- { basic_ios_t::init(&m_buf); }
-
- ~basic_vectorstream(){}
+ : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+ //(via basic_ios::init() call in base_t's constructor) without the risk of a
+ //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+ , vectorbuf_t(param, mode)
+ { this->base_t::rdbuf(&get_buf()); }
public:
//Returns the address of the stored stream buffer.
basic_vectorbuf<CharVector, CharTraits>* rdbuf() const
- { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&m_buf); }
+ { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&get_buf()); }
//!Swaps the underlying vector with the passed vector.
//!This function resets the read/write position in the stream.
//!Does not throw.
void swap_vector(vector_type &vect)
- { m_buf.swap_vector(vect); }
+ { get_buf().swap_vector(vect); }
//!Returns a const reference to the internal vector.
//!Does not throw.
const vector_type &vector() const
- { return m_buf.vector(); }
+ { return get_buf().vector(); }
//!Calls reserve() method of the internal vector.
//!Resets the stream to the first position.
//!Throws if the internals vector's reserve throws.
void reserve(typename vector_type::size_type size)
- { m_buf.reserve(size); }
+ { get_buf().reserve(size); }
//!Calls clear() method of the internal vector.
//!Resets the stream to the first position.
void clear()
- { m_buf.clear(); }
-
- /// @cond
- private:
- basic_vectorbuf<CharVector, CharTraits> m_buf;
- /// @endcond
+ { get_buf().clear(); }
};
//Some typedefs to simplify usage
diff --git a/3party/boost/boost/interprocess/sync/detail/common_algorithms.hpp b/3party/boost/boost/interprocess/sync/detail/common_algorithms.hpp
new file mode 100644
index 0000000000..6d26db82d4
--- /dev/null
+++ b/3party/boost/boost/interprocess/sync/detail/common_algorithms.hpp
@@ -0,0 +1,73 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2013. 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_SYNC_DETAIL_COMMON_ALGORITHMS_HPP
+#define BOOST_INTERPROCESS_SYNC_DETAIL_COMMON_ALGORITHMS_HPP
+
+#include <boost/interprocess/detail/config_begin.hpp>
+#include <boost/interprocess/detail/workaround.hpp>
+
+#include <boost/interprocess/sync/spin/wait.hpp>
+
+namespace boost {
+namespace interprocess {
+namespace ipcdetail {
+
+template<class MutexType>
+bool try_based_timed_lock(MutexType &m, const boost::posix_time::ptime &abs_time)
+{
+ //Same as lock()
+ if(abs_time == boost::posix_time::pos_infin){
+ m.lock();
+ return true;
+ }
+ //Always try to lock to achieve POSIX guarantees:
+ // "Under no circumstance shall the function fail with a timeout if the mutex
+ // can be locked immediately. The validity of the abs_timeout parameter need not
+ // be checked if the mutex can be locked immediately."
+ else if(m.try_lock()){
+ return true;
+ }
+ else{
+ spin_wait swait;
+ while(microsec_clock::universal_time() < abs_time){
+ if(m.try_lock()){
+ return true;
+ }
+ swait.yield();
+ }
+ return false;
+ }
+}
+
+template<class MutexType>
+void try_based_lock(MutexType &m)
+{
+ if(!m.try_lock()){
+ spin_wait swait;
+ do{
+ if(m.try_lock()){
+ break;
+ }
+ else{
+ swait.yield();
+ }
+ }
+ while(1);
+ }
+}
+
+} //namespace ipcdetail
+} //namespace interprocess
+} //namespace boost
+
+#include <boost/interprocess/detail/config_end.hpp>
+
+#endif //BOOST_INTERPROCESS_SYNC_DETAIL_COMMON_ALGORITHMS_HPP
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 09643b408e..5d7e7fdeff 100644
--- a/3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp
+++ b/3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp
@@ -324,7 +324,8 @@ class condition_8a_wrapper
condition_8a_wrapper(){}
- ~condition_8a_wrapper(){}
+ //Compiler-generated destructor is OK
+ //~condition_8a_wrapper(){}
ConditionMembers & get_members()
{ return m_data; }
@@ -359,10 +360,6 @@ class condition_8a_wrapper
template <typename L>
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);
@@ -371,10 +368,6 @@ class condition_8a_wrapper
template <typename L, typename Pr>
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()){
diff --git a/3party/boost/boost/interprocess/sync/detail/condition_any_algorithm.hpp b/3party/boost/boost/interprocess/sync/detail/condition_any_algorithm.hpp
index a276f826b0..b0371b8b35 100644
--- a/3party/boost/boost/interprocess/sync/detail/condition_any_algorithm.hpp
+++ b/3party/boost/boost/interprocess/sync/detail/condition_any_algorithm.hpp
@@ -189,10 +189,6 @@ class condition_any_wrapper
template <typename L>
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);
@@ -201,10 +197,6 @@ class condition_any_wrapper
template <typename L, typename Pr>
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()){
diff --git a/3party/boost/boost/interprocess/sync/detail/locks.hpp b/3party/boost/boost/interprocess/sync/detail/locks.hpp
index fbb003aa0d..ddca850853 100644
--- a/3party/boost/boost/interprocess/sync/detail/locks.hpp
+++ b/3party/boost/boost/interprocess/sync/detail/locks.hpp
@@ -25,7 +25,7 @@ class internal_mutex_lock
public:
typedef typename Lock::mutex_type::internal_mutex_type mutex_type;
-
+
internal_mutex_lock(Lock &l)
: l_(l)
@@ -57,6 +57,33 @@ class lock_inverter
void unlock() { l_.lock(); }
};
+template <class Lock>
+class lock_to_sharable
+{
+ Lock &l_;
+
+ public:
+ explicit lock_to_sharable(Lock &l)
+ : l_(l)
+ {}
+ void lock() { l_.lock_sharable(); }
+ bool try_lock(){ return l_.try_lock_sharable(); }
+ void unlock() { l_.unlock_sharable(); }
+};
+
+template <class Lock>
+class lock_to_wait
+{
+ Lock &l_;
+
+ public:
+ explicit lock_to_wait(Lock &l)
+ : l_(l)
+ {}
+ void lock() { l_.wait(); }
+ bool try_lock(){ return l_.try_wait(); }
+};
+
} //namespace ipcdetail
} //namespace interprocess
} //namespace boost
diff --git a/3party/boost/boost/interprocess/sync/file_lock.hpp b/3party/boost/boost/interprocess/sync/file_lock.hpp
index ef1c68a449..d551573d3b 100644
--- a/3party/boost/boost/interprocess/sync/file_lock.hpp
+++ b/3party/boost/boost/interprocess/sync/file_lock.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_FILE_LOCK_HPP
#define BOOST_INTERPROCESS_FILE_LOCK_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -21,6 +21,8 @@
#include <boost/interprocess/detail/os_file_functions.hpp>
#include <boost/interprocess/detail/os_thread_functions.hpp>
#include <boost/interprocess/detail/posix_time_types_wrk.hpp>
+#include <boost/interprocess/sync/detail/common_algorithms.hpp>
+#include <boost/interprocess/sync/detail/locks.hpp>
#include <boost/move/move.hpp>
//!\file
@@ -141,61 +143,6 @@ class file_lock
private:
file_handle_t m_file_hnd;
- bool timed_acquire_file_lock
- (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;
-
- if(now >= abs_time) return false;
-
- do{
- if(!ipcdetail::try_acquire_file_lock(hnd, acquired))
- return false;
-
- if(acquired)
- return true;
- else{
- now = microsec_clock::universal_time();
-
- if(now >= abs_time){
- acquired = false;
- return true;
- }
- // relinquish current time slice
- ipcdetail::thread_yield();
- }
- }while (true);
- }
-
- 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;
-
- if(now >= abs_time) return false;
-
- do{
- if(!ipcdetail::try_acquire_file_lock_sharable(hnd, acquired))
- return false;
-
- if(acquired)
- return true;
- else{
- now = microsec_clock::universal_time();
-
- if(now >= abs_time){
- acquired = false;
- return true;
- }
- // relinquish current time slice
- ipcdetail::thread_yield();
- }
- }while (true);
- }
/// @endcond
};
@@ -236,18 +183,7 @@ inline bool file_lock::try_lock()
}
inline bool file_lock::timed_lock(const boost::posix_time::ptime &abs_time)
-{
- if(abs_time == boost::posix_time::pos_infin){
- this->lock();
- return true;
- }
- bool result;
- if(!this->timed_acquire_file_lock(m_file_hnd, result, abs_time)){
- error_info err(system_error_code());
- throw interprocess_exception(err);
- }
- return result;
-}
+{ return ipcdetail::try_based_timed_lock(*this, abs_time); }
inline void file_lock::unlock()
{
@@ -277,16 +213,8 @@ inline bool file_lock::try_lock_sharable()
inline bool file_lock::timed_lock_sharable(const boost::posix_time::ptime &abs_time)
{
- if(abs_time == boost::posix_time::pos_infin){
- this->lock_sharable();
- return true;
- }
- bool result;
- if(!this->timed_acquire_file_lock_sharable(m_file_hnd, result, abs_time)){
- error_info err(system_error_code());
- throw interprocess_exception(err);
- }
- return result;
+ ipcdetail::lock_to_sharable<file_lock> lsh(*this);
+ return ipcdetail::try_based_timed_lock(lsh, abs_time);
}
inline void file_lock::unlock_sharable()
diff --git a/3party/boost/boost/interprocess/sync/interprocess_condition.hpp b/3party/boost/boost/interprocess/sync/interprocess_condition.hpp
index c30e870d77..b1b05aa63b 100644
--- a/3party/boost/boost/interprocess/sync/interprocess_condition.hpp
+++ b/3party/boost/boost/interprocess/sync/interprocess_condition.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONDITION_HPP
#define BOOST_INTERPROCESS_CONDITION_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -59,7 +59,7 @@ class named_condition;
//!
//!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.
+//!functions.
class interprocess_condition
{
/// @cond
@@ -94,7 +94,7 @@ class interprocess_condition
//!this->notify_one() or this->notify_all(), and then reacquires the lock.
template <typename L>
void wait(L& lock)
- {
+ {
ipcdetail::internal_mutex_lock<L> internal_lock(lock);
m_condition.wait(internal_lock);
}
diff --git a/3party/boost/boost/interprocess/sync/interprocess_condition_any.hpp b/3party/boost/boost/interprocess/sync/interprocess_condition_any.hpp
index dd20794675..26347aa04d 100644
--- a/3party/boost/boost/interprocess/sync/interprocess_condition_any.hpp
+++ b/3party/boost/boost/interprocess/sync/interprocess_condition_any.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_CONDITION_ANY_HPP
#define BOOST_INTERPROCESS_CONDITION_ANY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -48,7 +48,7 @@ namespace interprocess {
//!
//!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.
+//!functions.
class interprocess_condition_any
{
/// @cond
@@ -61,7 +61,7 @@ class interprocess_condition_any
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; }
diff --git a/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp
index 5615e8b9aa..6dbcedf4f5 100644
--- a/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp
@@ -17,7 +17,7 @@
/// @cond
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp
index 1c5dad370a..43d4125655 100644
--- a/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp
@@ -29,7 +29,7 @@
/// @cond
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp b/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp
index 2fe058183b..c7a19d66b3 100644
--- a/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp
+++ b/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp
@@ -13,7 +13,7 @@
/// @cond
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/interprocess_sharable_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_sharable_mutex.hpp
index 98eeea4157..00816adda1 100644
--- a/3party/boost/boost/interprocess/sync/interprocess_sharable_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/interprocess_sharable_mutex.hpp
@@ -15,7 +15,7 @@
#ifndef BOOST_INTERPROCESS_SHARABLE_MUTEX_HPP
#define BOOST_INTERPROCESS_SHARABLE_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -213,16 +213,14 @@ inline bool interprocess_sharable_mutex::try_lock()
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 lck(m_mut, abs_time);
if(!lck.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){
+ //Mutexes and condvars handle just fine infinite abs_times
+ //so avoid checking it here
if(!this->m_first_gate.timed_wait(lck, abs_time)){
if(this->m_ctrl.exclusive_in){
return false;
@@ -239,6 +237,8 @@ inline bool interprocess_sharable_mutex::timed_lock
//Now wait until all readers are gone
while (this->m_ctrl.num_shared){
+ //Mutexes and condvars handle just fine infinite abs_times
+ //so avoid checking it here
if(!this->m_second_gate.timed_wait(lck, abs_time)){
if(this->m_ctrl.num_shared){
return false;
@@ -296,10 +296,6 @@ inline bool interprocess_sharable_mutex::try_lock_sharable()
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 lck(m_mut, abs_time);
if(!lck.owns()) return false;
@@ -308,6 +304,8 @@ inline bool interprocess_sharable_mutex::timed_lock_sharable
//or there are too many sharable locks
while (this->m_ctrl.exclusive_in
|| this->m_ctrl.num_shared == constants::max_readers){
+ //Mutexes and condvars handle just fine infinite abs_times
+ //so avoid checking it here
if(!this->m_first_gate.timed_wait(lck, abs_time)){
if(this->m_ctrl.exclusive_in
|| this->m_ctrl.num_shared == constants::max_readers){
diff --git a/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp
index 0ba6b4a9bf..4f188826b1 100644
--- a/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp
@@ -13,7 +13,7 @@
#ifndef BOOST_INTERPROCESS_UPGRADABLE_MUTEX_HPP
#define BOOST_INTERPROCESS_UPGRADABLE_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -325,10 +325,8 @@ inline bool interprocess_upgradable_mutex::try_lock()
inline bool interprocess_upgradable_mutex::timed_lock
(const boost::posix_time::ptime &abs_time)
{
- if(abs_time == boost::posix_time::pos_infin){
- this->lock();
- return true;
- }
+ //Mutexes and condvars handle just fine infinite abs_times
+ //so avoid checking it here
scoped_lock_t lck(m_mut, abs_time);
if(!lck.owns()) return false;
@@ -413,10 +411,8 @@ inline bool interprocess_upgradable_mutex::try_lock_upgradable()
inline bool interprocess_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;
- }
+ //Mutexes and condvars handle just fine infinite abs_times
+ //so avoid checking it here
scoped_lock_t lck(m_mut, abs_time);
if(!lck.owns()) return false;
@@ -492,10 +488,8 @@ inline bool interprocess_upgradable_mutex::try_lock_sharable()
inline bool interprocess_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;
- }
+ //Mutexes and condvars handle just fine infinite abs_times
+ //so avoid checking it here
scoped_lock_t lck(m_mut, abs_time);
if(!lck.owns()) return false;
@@ -504,7 +498,7 @@ 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(lck, abs_time)){
+ if(!this->m_first_gate.timed_wait(lck, abs_time)){
if(this->m_ctrl.exclusive_in
|| this->m_ctrl.num_upr_shar == constants::max_readers){
return false;
@@ -607,10 +601,8 @@ 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;
- }
+ //Mutexes and condvars handle just fine infinite abs_times
+ //so avoid checking it here
scoped_lock_t lck(m_mut, abs_time);
if(!lck.owns()) return false;
diff --git a/3party/boost/boost/interprocess/sync/lock_options.hpp b/3party/boost/boost/interprocess/sync/lock_options.hpp
index 1139d83a19..49589e295d 100644
--- a/3party/boost/boost/interprocess/sync/lock_options.hpp
+++ b/3party/boost/boost/interprocess/sync/lock_options.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_LOCK_OPTIONS_HPP
#define BOOST_INTERPROCESS_LOCK_OPTIONS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/mutex_family.hpp b/3party/boost/boost/interprocess/sync/mutex_family.hpp
index 0636de0d44..f19805f1b2 100644
--- a/3party/boost/boost/interprocess/sync/mutex_family.hpp
+++ b/3party/boost/boost/interprocess/sync/mutex_family.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_MUTEX_FAMILY_HPP
#define BOOST_INTERPROCESS_MUTEX_FAMILY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/named_condition.hpp b/3party/boost/boost/interprocess/sync/named_condition.hpp
index 7c570f4baa..93b6e5be8c 100644
--- a/3party/boost/boost/interprocess/sync/named_condition.hpp
+++ b/3party/boost/boost/interprocess/sync/named_condition.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NAMED_CONDITION_HPP
#define BOOST_INTERPROCESS_NAMED_CONDITION_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -177,7 +177,7 @@ inline bool named_condition::timed_wait
template <typename L, typename Pr>
inline bool named_condition::timed_wait
(L& lock, const boost::posix_time::ptime &abs_time, Pr pred)
-{
+{
ipcdetail::internal_mutex_lock<L> internal_lock(lock);
return m_cond.timed_wait(internal_lock, abs_time, pred);
}
diff --git a/3party/boost/boost/interprocess/sync/named_condition_any.hpp b/3party/boost/boost/interprocess/sync/named_condition_any.hpp
index f8f204bc19..59426c9fb0 100644
--- a/3party/boost/boost/interprocess/sync/named_condition_any.hpp
+++ b/3party/boost/boost/interprocess/sync/named_condition_any.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NAMED_CONDITION_ANY_HPP
#define BOOST_INTERPROCESS_NAMED_CONDITION_ANY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/named_mutex.hpp b/3party/boost/boost/interprocess/sync/named_mutex.hpp
index 7deb400ab1..96bccf060d 100644
--- a/3party/boost/boost/interprocess/sync/named_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/named_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NAMED_MUTEX_HPP
#define BOOST_INTERPROCESS_NAMED_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -56,7 +56,7 @@ class named_mutex
/// @endcond
public:
- //!Creates a global interprocess_mutex with a name.
+ //!Creates a global mutex with a name.
//!Throws interprocess_exception on error.
named_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions());
@@ -82,19 +82,19 @@ class named_mutex
~named_mutex();
//!Unlocks a previously locked
- //!interprocess_mutex.
+ //!mutex.
void unlock();
- //!Locks interprocess_mutex, sleeps when interprocess_mutex is already locked.
+ //!Locks the mutex, sleeps when the mutex is already locked.
//!Throws interprocess_exception if a severe error is found
void lock();
- //!Tries to lock the interprocess_mutex, returns false when interprocess_mutex
+ //!Tries to lock the mutex, returns false when the mutex
//!is already locked, returns true when success.
//!Throws interprocess_exception if a severe error is found
bool try_lock();
- //!Tries to lock the interprocess_mutex until time abs_time,
+ //!Tries to lock the the mutex until time abs_time,
//!Returns false when timeout expires, returns true when locks.
//!Throws interprocess_exception if a severe error is found
bool timed_lock(const boost::posix_time::ptime &abs_time);
diff --git a/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp
index 5849a92d65..1e0d0d4c27 100644
--- a/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NAMED_RECURSIVE_MUTEX_HPP
#define BOOST_INTERPROCESS_NAMED_RECURSIVE_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -143,13 +143,7 @@ inline bool named_recursive_mutex::try_lock()
{ return m_mut.try_lock(); }
inline bool named_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
-{
- if(abs_time == boost::posix_time::pos_infin){
- this->lock();
- return true;
- }
- return m_mut.timed_lock(abs_time);
-}
+{ return m_mut.timed_lock(abs_time); }
inline bool named_recursive_mutex::remove(const char *name)
{ return impl_t::remove(name); }
diff --git a/3party/boost/boost/interprocess/sync/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/named_semaphore.hpp
index 147724588b..05469a0b17 100644
--- a/3party/boost/boost/interprocess/sync/named_semaphore.hpp
+++ b/3party/boost/boost/interprocess/sync/named_semaphore.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NAMED_SEMAPHORE_HPP
#define BOOST_INTERPROCESS_NAMED_SEMAPHORE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -153,13 +153,7 @@ inline bool named_semaphore::try_wait()
{ return m_sem.try_wait(); }
inline bool named_semaphore::timed_wait(const boost::posix_time::ptime &abs_time)
-{
- if(abs_time == boost::posix_time::pos_infin){
- this->wait();
- return true;
- }
- return m_sem.timed_wait(abs_time);
-}
+{ return m_sem.timed_wait(abs_time); }
inline bool named_semaphore::remove(const char *name)
{ return impl_t::remove(name); }
diff --git a/3party/boost/boost/interprocess/sync/named_sharable_mutex.hpp b/3party/boost/boost/interprocess/sync/named_sharable_mutex.hpp
index 6ebcebfd2c..981386198b 100644
--- a/3party/boost/boost/interprocess/sync/named_sharable_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/named_sharable_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NAMED_SHARABLE_MUTEX_HPP
#define BOOST_INTERPROCESS_NAMED_SHARABLE_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp b/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp
index 95e0ed5096..175102661f 100644
--- a/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_named_upgradable_mutex_HPP
#define BOOST_INTERPROCESS_named_upgradable_mutex_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/null_mutex.hpp b/3party/boost/boost/interprocess/sync/null_mutex.hpp
index d9f69a6959..66cb3caf5d 100644
--- a/3party/boost/boost/interprocess/sync/null_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/null_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NULL_MUTEX_HPP
#define BOOST_INTERPROCESS_NULL_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/posix/condition.hpp b/3party/boost/boost/interprocess/sync/posix/condition.hpp
index 2deea0f71d..e09fe4a109 100644
--- a/3party/boost/boost/interprocess/sync/posix/condition.hpp
+++ b/3party/boost/boost/interprocess/sync/posix/condition.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_POSIX_CONDITION_HPP
#define BOOST_INTERPROCESS_POSIX_CONDITION_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -83,12 +83,13 @@ class posix_condition
template <typename L>
bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time)
{
+ if (!lock)
+ throw lock_exception();
+ //Posix does not support infinity absolute time so handle it here
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());
}
@@ -98,17 +99,17 @@ class posix_condition
template <typename L, typename Pr>
bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred)
{
+ if (!lock)
+ throw lock_exception();
+ //Posix does not support infinity absolute time so handle it here
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;
}
diff --git a/3party/boost/boost/interprocess/sync/posix/mutex.hpp b/3party/boost/boost/interprocess/sync/posix/mutex.hpp
index 344c5e90af..4cd4207061 100644
--- a/3party/boost/boost/interprocess/sync/posix/mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/posix/mutex.hpp
@@ -27,7 +27,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_POSIX_MUTEX_HPP
#define BOOST_INTERPROCESS_DETAIL_POSIX_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -44,6 +44,7 @@
#ifndef BOOST_INTERPROCESS_POSIX_TIMEOUTS
# include <boost/interprocess/detail/os_thread_functions.hpp>
+# include <boost/interprocess/sync/detail/common_algorithms.hpp>
#endif
#include <boost/assert.hpp>
@@ -102,12 +103,12 @@ inline bool posix_mutex::try_lock()
inline bool posix_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
{
+ #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS
+ //Posix does not support infinity absolute time so handle it here
if(abs_time == boost::posix_time::pos_infin){
this->lock();
return true;
}
- #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS
-
timespec ts = ptime_to_timespec(abs_time);
int res = pthread_mutex_timedlock(&m_mut, &ts);
if (res != 0 && res != ETIMEDOUT)
@@ -116,22 +117,7 @@ inline bool posix_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
#else //BOOST_INTERPROCESS_POSIX_TIMEOUTS
- //Obtain current count and target time
- boost::posix_time::ptime now = microsec_clock::universal_time();
-
- do{
- if(this->try_lock()){
- break;
- }
- now = microsec_clock::universal_time();
-
- if(now >= abs_time){
- return false;
- }
- // relinquish current time slice
- thread_yield();
- }while (true);
- return true;
+ return ipcdetail::try_based_timed_lock(*this, abs_time);
#endif //BOOST_INTERPROCESS_POSIX_TIMEOUTS
}
diff --git a/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp b/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp
index 1b03b7def8..b2880b9925 100644
--- a/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_POSIX_NAMED_MUTEX_HPP
#define BOOST_INTERPROCESS_POSIX_NAMED_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -94,13 +94,7 @@ inline bool posix_named_mutex::try_lock()
{ return m_sem.try_wait(); }
inline bool posix_named_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
-{
- if(abs_time == boost::posix_time::pos_infin){
- this->lock();
- return true;
- }
- return m_sem.timed_wait(abs_time);
-}
+{ return m_sem.timed_wait(abs_time); }
inline bool posix_named_mutex::remove(const char *name)
{ return posix_named_semaphore::remove(name); }
diff --git a/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp
index 0b7ca8bba1..113f5f1236 100644
--- a/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp
+++ b/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_POSIX_NAMED_CONDITION_HPP
#define BOOST_INTERPROCESS_POSIX_NAMED_CONDITION_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp b/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp
index 9e989d58b9..ce859d7918 100644
--- a/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp
+++ b/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_PTHREAD_HELPERS_HPP
#define BOOST_INTERPROCESS_PTHREAD_HELPERS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
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 3e20dc7076..79eb7dca22 100644
--- a/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp
+++ b/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp
@@ -22,7 +22,9 @@ namespace ipcdetail {
inline timespec ptime_to_timespec (const boost::posix_time::ptime &tm)
{
const boost::posix_time::ptime epoch(boost::gregorian::date(1970,1,1));
- boost::posix_time::time_duration duration (tm - epoch);
+ //Avoid negative absolute times
+ boost::posix_time::time_duration duration = (tm <= epoch) ? boost::posix_time::time_duration(epoch - epoch)
+ : boost::posix_time::time_duration(tm - epoch);
timespec ts;
ts.tv_sec = duration.total_seconds();
ts.tv_nsec = duration.total_nanoseconds() % 1000000000;
diff --git a/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp
index 385d714fb1..d5bda341fc 100644
--- a/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp
@@ -38,6 +38,7 @@
#include <boost/interprocess/exceptions.hpp>
#ifndef BOOST_INTERPROCESS_POSIX_TIMEOUTS
# include <boost/interprocess/detail/os_thread_functions.hpp>
+# include <boost/interprocess/sync/detail/common_algorithms.hpp>
#endif
#include <boost/assert.hpp>
@@ -92,11 +93,12 @@ inline bool posix_recursive_mutex::try_lock()
inline bool posix_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
{
+ #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS
+ //Posix does not support infinity absolute time so handle it here
if(abs_time == boost::posix_time::pos_infin){
this->lock();
return true;
}
- #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS
timespec ts = ptime_to_timespec(abs_time);
int res = pthread_mutex_timedlock(&m_mut, &ts);
@@ -106,22 +108,7 @@ inline bool posix_recursive_mutex::timed_lock(const boost::posix_time::ptime &ab
#else //BOOST_INTERPROCESS_POSIX_TIMEOUTS
- //Obtain current count and target time
- boost::posix_time::ptime now = microsec_clock::universal_time();
-
- do{
- if(this->try_lock()){
- break;
- }
- now = microsec_clock::universal_time();
-
- if(now >= abs_time){
- return false;
- }
- // relinquish current time slice
- thread_yield();
- }while (true);
- return true;
+ return ipcdetail::try_based_timed_lock(*this, abs_time);
#endif //BOOST_INTERPROCESS_POSIX_TIMEOUTS
}
diff --git a/3party/boost/boost/interprocess/sync/posix/semaphore.hpp b/3party/boost/boost/interprocess/sync/posix/semaphore.hpp
index 5d7dfa8d6a..ba6a6f0eba 100644
--- a/3party/boost/boost/interprocess/sync/posix/semaphore.hpp
+++ b/3party/boost/boost/interprocess/sync/posix/semaphore.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_POSIX_SEMAPHORE_HPP
#define BOOST_INTERPROCESS_POSIX_SEMAPHORE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp b/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp
index f6aef56ea2..b4fd79ccc1 100644
--- a/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp
+++ b/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp
@@ -15,7 +15,7 @@
#include <boost/interprocess/exceptions.hpp>
#include <boost/interprocess/creation_tags.hpp>
#include <boost/interprocess/detail/os_file_functions.hpp>
-#include <boost/interprocess/detail/tmp_dir_helpers.hpp>
+#include <boost/interprocess/detail/shared_dir_helpers.hpp>
#include <boost/interprocess/permissions.hpp>
#include <fcntl.h> //O_CREAT, O_*...
@@ -35,6 +35,8 @@
#include <boost/interprocess/sync/posix/ptime_to_timespec.hpp>
#else
#include <boost/interprocess/detail/os_thread_functions.hpp>
+#include <boost/interprocess/sync/detail/locks.hpp>
+#include <boost/interprocess/sync/detail/common_algorithms.hpp>
#endif
namespace boost {
@@ -49,7 +51,7 @@ inline bool semaphore_open
#ifndef BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SEMAPHORES
add_leading_slash(origname, name);
#else
- create_tmp_and_clean_old_and_get_filename(origname, name);
+ create_shared_dir_cleaning_old_and_get_filepath(origname, name);
#endif
//Create new mapping
@@ -115,7 +117,7 @@ inline bool semaphore_unlink(const char *semname)
#ifndef BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SEMAPHORES
add_leading_slash(semname, sem_str);
#else
- tmp_filename(semname, sem_str);
+ shared_filepath(semname, sem_str);
#endif
return 0 == sem_unlink(sem_str.c_str());
}
@@ -131,7 +133,8 @@ inline void semaphore_init(sem_t *handle, unsigned int initialCount)
//sem_init call is not defined, but -1 is returned on failure.
//In the future, a successful call might be required to return 0.
if(ret == -1){
- throw interprocess_exception(system_error_code());
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
}
}
@@ -147,7 +150,8 @@ inline void semaphore_post(sem_t *handle)
{
int ret = sem_post(handle);
if(ret != 0){
- throw interprocess_exception(system_error_code());
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
}
}
@@ -155,7 +159,8 @@ inline void semaphore_wait(sem_t *handle)
{
int ret = sem_wait(handle);
if(ret != 0){
- throw interprocess_exception(system_error_code());
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
}
}
@@ -167,17 +172,39 @@ inline bool semaphore_try_wait(sem_t *handle)
if(system_error_code() == EAGAIN){
return false;
}
- throw interprocess_exception(system_error_code());
- return false;
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
}
+#ifndef BOOST_INTERPROCESS_POSIX_TIMEOUTS
+
+struct semaphore_wrapper_try_wrapper
+{
+ explicit semaphore_wrapper_try_wrapper(sem_t *handle)
+ : m_handle(handle)
+ {}
+
+ void wait()
+ { semaphore_wait(m_handle); }
+
+ bool try_wait()
+ { return semaphore_try_wait(m_handle); }
+
+ private:
+ sem_t *m_handle;
+};
+
+#endif
+
inline bool semaphore_timed_wait(sem_t *handle, const boost::posix_time::ptime &abs_time)
{
+ #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS
+ //Posix does not support infinity absolute time so handle it here
if(abs_time == boost::posix_time::pos_infin){
semaphore_wait(handle);
return true;
}
- #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS
+
timespec tspec = ptime_to_timespec(abs_time);
for (;;){
int res = sem_timedwait(handle, &tspec);
@@ -190,17 +217,16 @@ inline bool semaphore_timed_wait(sem_t *handle, const boost::posix_time::ptime &
if(system_error_code() == ETIMEDOUT){
return false;
}
- throw interprocess_exception(system_error_code());
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
}
return false;
#else //#ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS
- boost::posix_time::ptime now;
- do{
- if(semaphore_try_wait(handle))
- return true;
- thread_yield();
- }while((now = microsec_clock::universal_time()) < abs_time);
- return false;
+
+ semaphore_wrapper_try_wrapper swtw(handle);
+ ipcdetail::lock_to_wait<semaphore_wrapper_try_wrapper> lw(swtw);
+ return ipcdetail::try_based_timed_lock(lw, abs_time);
+
#endif //#ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS
}
diff --git a/3party/boost/boost/interprocess/sync/scoped_lock.hpp b/3party/boost/boost/interprocess/sync/scoped_lock.hpp
index 5709f6ff61..87248579bc 100644
--- a/3party/boost/boost/interprocess/sync/scoped_lock.hpp
+++ b/3party/boost/boost/interprocess/sync/scoped_lock.hpp
@@ -16,7 +16,7 @@
#ifndef BOOST_INTERPROCESS_SCOPED_LOCK_HPP
#define BOOST_INTERPROCESS_SCOPED_LOCK_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/sharable_lock.hpp b/3party/boost/boost/interprocess/sync/sharable_lock.hpp
index 113019572c..6164432d81 100644
--- a/3party/boost/boost/interprocess/sync/sharable_lock.hpp
+++ b/3party/boost/boost/interprocess/sync/sharable_lock.hpp
@@ -16,7 +16,7 @@
#ifndef BOOST_INTERPROCESS_SHARABLE_LOCK_HPP
#define BOOST_INTERPROCESS_SHARABLE_LOCK_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/shm/named_condition.hpp b/3party/boost/boost/interprocess/sync/shm/named_condition.hpp
index be7a69feb6..8809f71978 100644
--- a/3party/boost/boost/interprocess/sync/shm/named_condition.hpp
+++ b/3party/boost/boost/interprocess/sync/shm/named_condition.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_SHM_NAMED_CONDITION_HPP
#define BOOST_INTERPROCESS_SHM_NAMED_CONDITION_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -131,7 +131,7 @@ class shm_named_condition
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; }
diff --git a/3party/boost/boost/interprocess/sync/shm/named_condition_any.hpp b/3party/boost/boost/interprocess/sync/shm/named_condition_any.hpp
index 7bac854c93..63013a858e 100644
--- a/3party/boost/boost/interprocess/sync/shm/named_condition_any.hpp
+++ b/3party/boost/boost/interprocess/sync/shm/named_condition_any.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_SHM_NAMED_CONDITION_ANY_HPP
#define BOOST_INTERPROCESS_SHM_NAMED_CONDITION_ANY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -157,7 +157,7 @@ class shm_named_condition_any
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; }
diff --git a/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp b/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp
index 9532f8d8d5..11becee388 100644
--- a/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_SHM_NAMED_MUTEX_HPP
#define BOOST_INTERPROCESS_SHM_NAMED_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -161,13 +161,7 @@ inline bool shm_named_mutex::try_lock()
{ return this->internal_mutex().try_lock(); }
inline bool shm_named_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
-{
- if(abs_time == boost::posix_time::pos_infin){
- this->lock();
- return true;
- }
- return this->internal_mutex().timed_lock(abs_time);
-}
+{ return this->internal_mutex().timed_lock(abs_time); }
inline bool shm_named_mutex::remove(const char *name)
{ return shared_memory_object::remove(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 0250e3108e..9e101952e9 100644
--- a/3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_SHM_NAMED_RECURSIVE_MUTEX_HPP
#define BOOST_INTERPROCESS_SHM_NAMED_RECURSIVE_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -153,13 +153,7 @@ inline bool shm_named_recursive_mutex::try_lock()
{ return this->mutex()->try_lock(); }
inline bool shm_named_recursive_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 bool shm_named_recursive_mutex::remove(const char *name)
{ return shared_memory_object::remove(name); }
diff --git a/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp
index ebd7e09824..95e7a7f859 100644
--- a/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp
+++ b/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_SHM_NAMED_SEMAPHORE_HPP
#define BOOST_INTERPROCESS_SHM_NAMED_SEMAPHORE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -120,13 +120,7 @@ inline bool shm_named_semaphore::try_wait()
{ return semaphore()->try_wait(); }
inline bool shm_named_semaphore::timed_wait(const boost::posix_time::ptime &abs_time)
-{
- if(abs_time == boost::posix_time::pos_infin){
- this->wait();
- return true;
- }
- return semaphore()->timed_wait(abs_time);
-}
+{ return semaphore()->timed_wait(abs_time); }
inline bool shm_named_semaphore::remove(const char *name)
{ return shared_memory_object::remove(name); }
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 26a0747e61..74a358e187 100644
--- a/3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_NAMED_UPGRADABLE_MUTEX_HPP
#define BOOST_INTERPROCESS_NAMED_UPGRADABLE_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -287,13 +287,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(); }
@@ -306,13 +300,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(); }
@@ -325,13 +313,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/spin/condition.hpp b/3party/boost/boost/interprocess/sync/spin/condition.hpp
index 7c3306d09f..0d75a942fa 100644
--- a/3party/boost/boost/interprocess/sync/spin/condition.hpp
+++ b/3party/boost/boost/interprocess/sync/spin/condition.hpp
@@ -19,6 +19,7 @@
#include <boost/interprocess/sync/scoped_lock.hpp>
#include <boost/interprocess/exceptions.hpp>
#include <boost/interprocess/detail/os_thread_functions.hpp>
+#include <boost/interprocess/sync/spin/wait.hpp>
#include <boost/move/move.hpp>
#include <boost/cstdint.hpp>
@@ -40,24 +41,26 @@ class spin_condition
template <typename L>
bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time)
{
+ if (!lock)
+ throw lock_exception();
+ //Handle infinity absolute time here to avoid complications in do_timed_wait
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 <typename L, typename Pr>
bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred)
{
+ if (!lock)
+ throw lock_exception();
+ //Handle infinity absolute time here to avoid complications in do_timed_wait
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();
@@ -111,7 +114,9 @@ inline spin_condition::spin_condition()
inline spin_condition::~spin_condition()
{
- //Trivial destructor
+ //Notify all waiting threads
+ //to allow POSIX semantics on condition destruction
+ this->notify_all();
}
inline void spin_condition::notify_one()
@@ -140,15 +145,10 @@ inline void spin_condition::notify(boost::uint32_t command)
}
//Notify that all threads should execute wait logic
+ spin_wait swait;
while(SLEEP != atomic_cas32(const_cast<boost::uint32_t*>(&m_command), command, SLEEP)){
- thread_yield();
- }
-/*
- //Wait until the threads are woken
- while(SLEEP != atomic_cas32(const_cast<boost::uint32_t*>(&m_command), 0)){
- thread_yield();
+ swait.yield();
}
-*/
//The enter mutex will rest locked until the last waiting thread unlocks it
}
@@ -211,8 +211,9 @@ inline bool spin_condition::do_timed_wait(bool tout_enabled,
while(1){
//The thread sleeps/spins until a spin_condition commands a notification
//Notification occurred, we will lock the checking mutex so that
+ spin_wait swait;
while(atomic_read32(&m_command) == SLEEP){
- thread_yield();
+ swait.yield();
//Check for timeout
if(tout_enabled){
diff --git a/3party/boost/boost/interprocess/sync/spin/mutex.hpp b/3party/boost/boost/interprocess/sync/spin/mutex.hpp
index 94c26a16ad..154dc6d916 100644
--- a/3party/boost/boost/interprocess/sync/spin/mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/spin/mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_SPIN_MUTEX_HPP
#define BOOST_INTERPROCESS_DETAIL_SPIN_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -22,6 +22,7 @@
#include <boost/interprocess/detail/atomic.hpp>
#include <boost/cstdint.hpp>
#include <boost/interprocess/detail/os_thread_functions.hpp>
+#include <boost/interprocess/sync/detail/common_algorithms.hpp>
namespace boost {
namespace interprocess {
@@ -59,17 +60,7 @@ inline spin_mutex::~spin_mutex()
}
inline void spin_mutex::lock(void)
-{
- do{
- boost::uint32_t prev_s = ipcdetail::atomic_cas32(const_cast<boost::uint32_t*>(&m_s), 1, 0);
-
- if (m_s == 1 && prev_s == 0){
- break;
- }
- // relinquish current timeslice
- ipcdetail::thread_yield();
- }while (true);
-}
+{ return ipcdetail::try_based_lock(*this); }
inline bool spin_mutex::try_lock(void)
{
@@ -78,29 +69,7 @@ inline bool spin_mutex::try_lock(void)
}
inline bool spin_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
-{
- if(abs_time == boost::posix_time::pos_infin){
- this->lock();
- return true;
- }
- //Obtain current count and target time
- boost::posix_time::ptime now = microsec_clock::universal_time();
-
- do{
- if(this->try_lock()){
- break;
- }
- now = microsec_clock::universal_time();
-
- if(now >= abs_time){
- return false;
- }
- // relinquish current time slice
- ipcdetail::thread_yield();
- }while (true);
-
- return true;
-}
+{ return ipcdetail::try_based_timed_lock(*this, abs_time); }
inline void spin_mutex::unlock(void)
{ ipcdetail::atomic_cas32(const_cast<boost::uint32_t*>(&m_s), 0, 1); }
diff --git a/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp
index 38e9dcaa10..ce6b0d18ac 100644
--- a/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp
@@ -27,7 +27,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_SPIN_RECURSIVE_MUTEX_HPP
#define BOOST_INTERPROCESS_DETAIL_SPIN_RECURSIVE_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -118,10 +118,6 @@ inline bool spin_recursive_mutex::try_lock()
inline bool spin_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
{
typedef ipcdetail::OS_systemwide_thread_id_t handle_t;
- if(abs_time == boost::posix_time::pos_infin){
- this->lock();
- return true;
- }
const handle_t thr_id(ipcdetail::get_current_systemwide_thread_id());
handle_t old_id;
ipcdetail::systemwide_thread_id_copy(m_nOwner, old_id);
@@ -133,6 +129,7 @@ inline bool spin_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs
++m_nLockCount;
return true;
}
+ //m_mutex supports abs_time so no need to check it
if(m_mutex.timed_lock(abs_time)){
ipcdetail::systemwide_thread_id_copy(thr_id, m_nOwner);
m_nLockCount = 1;
diff --git a/3party/boost/boost/interprocess/sync/spin/semaphore.hpp b/3party/boost/boost/interprocess/sync/spin/semaphore.hpp
index a5ba3b1b13..94922afe43 100644
--- a/3party/boost/boost/interprocess/sync/spin/semaphore.hpp
+++ b/3party/boost/boost/interprocess/sync/spin/semaphore.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_SPIN_SEMAPHORE_HPP
#define BOOST_INTERPROCESS_DETAIL_SPIN_SEMAPHORE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -20,6 +20,8 @@
#include <boost/interprocess/detail/atomic.hpp>
#include <boost/interprocess/detail/os_thread_functions.hpp>
#include <boost/interprocess/detail/posix_time_types_wrk.hpp>
+#include <boost/interprocess/sync/detail/common_algorithms.hpp>
+#include <boost/interprocess/sync/detail/locks.hpp>
#include <boost/cstdint.hpp>
namespace boost {
@@ -59,11 +61,8 @@ inline void spin_semaphore::post()
inline void spin_semaphore::wait()
{
- while(!ipcdetail::atomic_add_unless32(&m_count, boost::uint32_t(-1), boost::uint32_t(0))){
- while(ipcdetail::atomic_read32(&m_count) == 0){
- ipcdetail::thread_yield();
- }
- }
+ ipcdetail::lock_to_wait<spin_semaphore> lw(*this);
+ return ipcdetail::try_based_lock(lw);
}
inline bool spin_semaphore::try_wait()
@@ -73,29 +72,10 @@ inline bool spin_semaphore::try_wait()
inline bool spin_semaphore::timed_wait(const boost::posix_time::ptime &abs_time)
{
- if(abs_time == boost::posix_time::pos_infin){
- this->wait();
- return true;
- }
- //Obtain current count and target time
- boost::posix_time::ptime now(microsec_clock::universal_time());
-
- do{
- if(this->try_wait()){
- break;
- }
- now = microsec_clock::universal_time();
-
- if(now >= abs_time){
- return this->try_wait();
- }
- // relinquish current time slice
- ipcdetail::thread_yield();
- }while (true);
- return true;
+ ipcdetail::lock_to_wait<spin_semaphore> lw(*this);
+ return ipcdetail::try_based_timed_lock(lw, abs_time);
}
-
//inline int spin_semaphore::get_count() const
//{
//return (int)ipcdetail::atomic_read32(&m_count);
diff --git a/3party/boost/boost/interprocess/sync/spin/wait.hpp b/3party/boost/boost/interprocess/sync/spin/wait.hpp
new file mode 100644
index 0000000000..220699bae1
--- /dev/null
+++ b/3party/boost/boost/interprocess/sync/spin/wait.hpp
@@ -0,0 +1,181 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Peter Dimov 2008.
+// (C) Copyright Ion Gaztanaga 2013-2013. 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.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//Parts of this file come from boost/smart_ptr/detail/yield_k.hpp
+//Many thanks to Peter Dimov.
+
+#ifndef BOOST_INTERPROCESS_SYNC_WAIT_HPP_INCLUDED
+#define BOOST_INTERPROCESS_SYNC_WAIT_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/interprocess/detail/config_begin.hpp>
+#include <boost/interprocess/detail/workaround.hpp>
+#include <boost/interprocess/detail/os_thread_functions.hpp>
+
+//#define BOOST_INTERPROCESS_SPIN_WAIT_DEBUG
+#ifdef BOOST_INTERPROCESS_SPIN_WAIT_DEBUG
+#include <iostream>
+#endif
+
+// BOOST_INTERPROCESS_SMT_PAUSE
+
+#if defined(_MSC_VER) && ( defined(_M_IX86) || defined(_M_X64) )
+
+extern "C" void _mm_pause();
+#pragma intrinsic( _mm_pause )
+
+#define BOOST_INTERPROCESS_SMT_PAUSE _mm_pause();
+
+#elif defined(__GNUC__) && ( defined(__i386__) || defined(__x86_64__) ) && !defined(_CRAYC)
+
+#define BOOST_INTERPROCESS_SMT_PAUSE __asm__ __volatile__( "rep; nop" : : : "memory" );
+
+#endif
+
+namespace boost{
+namespace interprocess{
+namespace ipcdetail {
+
+template<int Dummy = 0>
+class num_core_holder
+{
+ public:
+ static unsigned int get()
+ {
+ if(!num_cores){
+ return ipcdetail::get_num_cores();
+ }
+ else{
+ return num_cores;
+ }
+ }
+
+ private:
+ static unsigned int num_cores;
+};
+
+template<int Dummy>
+unsigned int num_core_holder<Dummy>::num_cores = ipcdetail::get_num_cores();
+
+} //namespace ipcdetail {
+
+class spin_wait
+{
+ public:
+
+ static const unsigned int nop_pause_limit = 32u;
+ spin_wait()
+ : m_count_start(), m_ul_yield_only_counts(), m_k()
+ {}
+
+ #ifdef BOOST_INTERPROCESS_SPIN_WAIT_DEBUG
+ ~spin_wait()
+ {
+ if(m_k){
+ std::cout << "final m_k: " << m_k
+ << " system tick(us): " << ipcdetail::get_system_tick_us() << std::endl;
+ }
+ }
+ #endif
+
+ unsigned int count() const
+ { return m_k; }
+
+ void yield()
+ {
+ //Lazy initialization of limits
+ if( !m_k){
+ this->init_limits();
+ }
+ //Nop tries
+ if( m_k < (nop_pause_limit >> 2) ){
+
+ }
+ //Pause tries if the processor supports it
+ #if defined(BOOST_INTERPROCESS_SMT_PAUSE)
+ else if( m_k < nop_pause_limit ){
+ BOOST_INTERPROCESS_SMT_PAUSE
+ }
+ #endif
+ //Yield/Sleep strategy
+ else{
+ //Lazy initialization of tick information
+ if(m_k == nop_pause_limit){
+ this->init_tick_info();
+ }
+ else if( this->yield_or_sleep() ){
+ ipcdetail::thread_yield();
+ }
+ else{
+ ipcdetail::thread_sleep_tick();
+ }
+ }
+ ++m_k;
+ }
+
+ void reset()
+ {
+ m_k = 0u;
+ }
+
+ private:
+
+ void init_limits()
+ {
+ unsigned int num_cores = ipcdetail::num_core_holder<0>::get();
+ m_k = num_cores > 1u ? 0u : nop_pause_limit;
+ }
+
+ void init_tick_info()
+ {
+ m_ul_yield_only_counts = ipcdetail::get_system_tick_in_highres_counts();
+ m_count_start = ipcdetail::get_current_system_highres_count();
+ }
+
+ //Returns true if yield must be called, false is sleep must be called
+ bool yield_or_sleep()
+ {
+ if(!m_ul_yield_only_counts){ //If yield-only limit was reached then yield one in every two tries
+ return (m_k & 1u) != 0;
+ }
+ else{ //Try to see if we've reched yield-only time limit
+ const ipcdetail::OS_highres_count_t now = ipcdetail::get_current_system_highres_count();
+ const ipcdetail::OS_highres_count_t elapsed = ipcdetail::system_highres_count_subtract(now, m_count_start);
+ if(!ipcdetail::system_highres_count_less_ul(elapsed, m_ul_yield_only_counts)){
+ #ifdef BOOST_INTERPROCESS_SPIN_WAIT_DEBUG
+ std::cout << "elapsed!\n"
+ << " m_ul_yield_only_counts: " << m_ul_yield_only_counts
+ << " system tick(us): " << ipcdetail::get_system_tick_us() << '\n'
+ << " m_k: " << m_k << " elapsed counts: ";
+ ipcdetail::ostream_highres_count(std::cout, elapsed) << std::endl;
+ #endif
+ //Yield-only time reached, now it's time to sleep
+ m_ul_yield_only_counts = 0ul;
+ return false;
+ }
+ }
+ return true; //Otherwise yield
+ }
+
+ ipcdetail::OS_highres_count_t m_count_start;
+ unsigned long m_ul_yield_only_counts;
+ unsigned int m_k;
+};
+
+} // namespace interprocess
+} // namespace boost
+
+#include <boost/interprocess/detail/config_end.hpp>
+
+#endif // #ifndef BOOST_INTERPROCESS_SYNC_WAIT_HPP_INCLUDED
diff --git a/3party/boost/boost/interprocess/sync/upgradable_lock.hpp b/3party/boost/boost/interprocess/sync/upgradable_lock.hpp
index 6b766fd679..d86a6ce979 100644
--- a/3party/boost/boost/interprocess/sync/upgradable_lock.hpp
+++ b/3party/boost/boost/interprocess/sync/upgradable_lock.hpp
@@ -16,7 +16,7 @@
#ifndef BOOST_INTERPROCESS_UPGRADABLE_LOCK_HPP
#define BOOST_INTERPROCESS_UPGRADABLE_LOCK_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/windows/condition.hpp b/3party/boost/boost/interprocess/sync/windows/condition.hpp
index 6277951720..f880e4f0cd 100644
--- a/3party/boost/boost/interprocess/sync/windows/condition.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/condition.hpp
@@ -38,7 +38,11 @@ class windows_condition
{}
~windows_condition()
- {}
+ {
+ //Notify all waiting threads
+ //to allow POSIX semantics on condition destruction
+ this->notify_all();
+ }
void notify_one()
{ m_condition_data.notify_one(); }
diff --git a/3party/boost/boost/interprocess/sync/windows/mutex.hpp b/3party/boost/boost/interprocess/sync/windows/mutex.hpp
index c8a64b3b39..0b1958cfb7 100644
--- a/3party/boost/boost/interprocess/sync/windows/mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_WINDOWS_MUTEX_HPP
#define BOOST_INTERPROCESS_DETAIL_WINDOWS_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/windows/named_condition.hpp b/3party/boost/boost/interprocess/sync/windows/named_condition.hpp
index 4724482341..ba220fdc5b 100644
--- a/3party/boost/boost/interprocess/sync/windows/named_condition.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/named_condition.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_HPP
#define BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/windows/named_condition_any.hpp b/3party/boost/boost/interprocess/sync/windows/named_condition_any.hpp
index 0d3b915b38..e5481d1b40 100644
--- a/3party/boost/boost/interprocess/sync/windows/named_condition_any.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/named_condition_any.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_ANY_HPP
#define BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_ANY_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -97,7 +97,7 @@ class windows_named_condition_any
/// @cond
private:
- void windows_named_condition_any::dont_close_on_destruction()
+ void dont_close_on_destruction()
{}
friend class interprocess_tester;
@@ -134,8 +134,6 @@ class windows_named_condition_any
winapi_mutex_wrapper m_mtx_unblock_lock;
};
- ipcdetail::condition_8a_wrapper<condition_data> m_condition_data;
-
class named_cond_callbacks : public windows_named_sync_interface
{
typedef __int64 sem_count_t;
@@ -229,6 +227,7 @@ class windows_named_condition_any
};
windows_named_sync m_named_sync;
+ ipcdetail::condition_8a_wrapper<condition_data> m_condition_data;
/// @endcond
};
diff --git a/3party/boost/boost/interprocess/sync/windows/named_mutex.hpp b/3party/boost/boost/interprocess/sync/windows/named_mutex.hpp
index 8ea6b3e1e4..9329935876 100644
--- a/3party/boost/boost/interprocess/sync/windows/named_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/named_mutex.hpp
@@ -10,7 +10,7 @@
#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_MUTEX_HPP
#define BOOST_INTERPROCESS_WINDOWS_NAMED_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/windows/named_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/windows/named_recursive_mutex.hpp
index cb2ef79ac1..547926aec9 100644
--- a/3party/boost/boost/interprocess/sync/windows/named_recursive_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/named_recursive_mutex.hpp
@@ -10,7 +10,7 @@
#ifndef BOOST_INTERPROCESS_WINDOWS_RECURSIVE_NAMED_MUTEX_HPP
#define BOOST_INTERPROCESS_WINDOWS_RECURSIVE_NAMED_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/windows/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/windows/named_semaphore.hpp
index 8f48d4df96..f868f3da65 100644
--- a/3party/boost/boost/interprocess/sync/windows/named_semaphore.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/named_semaphore.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_SEMAPHORE_HPP
#define BOOST_INTERPROCESS_WINDOWS_NAMED_SEMAPHORE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/windows/named_sync.hpp b/3party/boost/boost/interprocess/sync/windows/named_sync.hpp
index 298c2e2e81..4046413f86 100644
--- a/3party/boost/boost/interprocess/sync/windows/named_sync.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/named_sync.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_SYNC_HPP
#define BOOST_INTERPROCESS_WINDOWS_NAMED_SYNC_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -19,7 +19,7 @@
#include <boost/interprocess/detail/workaround.hpp>
#include <boost/interprocess/creation_tags.hpp>
#include <boost/interprocess/permissions.hpp>
-#include <boost/interprocess/detail/tmp_dir_helpers.hpp>
+#include <boost/interprocess/detail/shared_dir_helpers.hpp>
#include <boost/interprocess/sync/windows/sync_utils.hpp>
#include <boost/interprocess/errors.hpp>
#include <boost/interprocess/exceptions.hpp>
@@ -106,7 +106,7 @@ inline void windows_named_sync::open_or_create
//Use a file to emulate POSIX lifetime semantics. After this logic
//we'll obtain the ID of the native handle to open in aux_str
{
- create_tmp_and_clean_old_and_get_filename(name, aux_str);
+ create_shared_dir_cleaning_old_and_get_filepath(name, aux_str);
//Create a file with required permissions.
m_file_hnd = winapi::create_file
( aux_str.c_str()
@@ -198,7 +198,7 @@ inline bool windows_named_sync::remove(const char *name)
try{
//Make sure a temporary path is created for shared memory
std::string semfile;
- ipcdetail::tmp_filename(name, semfile);
+ ipcdetail::shared_filepath(name, semfile);
return winapi::unlink_file(semfile.c_str());
}
catch(...){
diff --git a/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp
index 2b4797e175..55a838583b 100644
--- a/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_WINDOWS_RECURSIVE_MUTEX_HPP
#define BOOST_INTERPROCESS_DETAIL_WINDOWS_RECURSIVE_MUTEX_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/windows/semaphore.hpp b/3party/boost/boost/interprocess/sync/windows/semaphore.hpp
index a8166ce5cd..7fdbc41b3d 100644
--- a/3party/boost/boost/interprocess/sync/windows/semaphore.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/semaphore.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_WINDOWS_SEMAPHORE_HPP
#define BOOST_INTERPROCESS_DETAIL_WINDOWS_SEMAPHORE_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp b/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp
index 92d8e55a15..7e54cc36b2 100644
--- a/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_SYNC_UTILS_HPP
#define BOOST_INTERPROCESS_DETAIL_SYNC_UTILS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp b/3party/boost/boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp
index 0be96011cf..5a4469bfa0 100644
--- a/3party/boost/boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_WINAPI_MUTEX_WRAPPER_HPP
#define BOOST_INTERPROCESS_DETAIL_WINAPI_MUTEX_WRAPPER_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -21,6 +21,7 @@
#include <boost/interprocess/permissions.hpp>
#include <boost/interprocess/detail/win32_api.hpp>
#include <boost/interprocess/detail/posix_time_types_wrk.hpp>
+#include <boost/interprocess/sync/windows/winapi_wrapper_common.hpp>
#include <boost/interprocess/errors.hpp>
#include <boost/interprocess/exceptions.hpp>
#include <limits>
@@ -44,53 +45,16 @@ class winapi_mutex_functions
{}
void unlock()
- {
- winapi::release_mutex(m_mtx_hnd);
- }
+ { winapi::release_mutex(m_mtx_hnd); }
void lock()
- {
- if(winapi::wait_for_single_object(m_mtx_hnd, winapi::infinite_time) != winapi::wait_object_0){
- error_info err = system_error_code();
- throw interprocess_exception(err);
- }
- }
+ { return winapi_wrapper_wait_for_single_object(m_mtx_hnd); }
bool try_lock()
- {
- unsigned long ret = winapi::wait_for_single_object(m_mtx_hnd, 0);
- if(ret == winapi::wait_object_0){
- return true;
- }
- else if(ret == winapi::wait_timeout){
- return false;
- }
- else{
- error_info err = system_error_code();
- throw interprocess_exception(err);
- }
- }
+ { return winapi_wrapper_try_wait_for_single_object(m_mtx_hnd); }
bool timed_lock(const boost::posix_time::ptime &abs_time)
- {
- if(abs_time == boost::posix_time::pos_infin){
- this->lock();
- return true;
- }
-
- unsigned long ret = winapi::wait_for_single_object
- (m_mtx_hnd, (abs_time - microsec_clock::universal_time()).total_milliseconds());
- if(ret == winapi::wait_object_0){
- return true;
- }
- else if(ret == winapi::wait_timeout){
- return false;
- }
- else{
- error_info err = system_error_code();
- throw interprocess_exception(err);
- }
- }
+ { return winapi_wrapper_timed_wait_for_single_object(m_mtx_hnd, abs_time); }
/// @cond
protected:
@@ -109,8 +73,11 @@ class winapi_mutex_wrapper
winapi_mutex_wrapper &operator=(const winapi_mutex_wrapper &);
/// @endcond
+ //Note that Windows API does not return winapi::invalid_handle_value
+ //when failing to create/open a mutex, but a nullptr
+
public:
- winapi_mutex_wrapper(void *mtx_hnd = winapi::invalid_handle_value)
+ winapi_mutex_wrapper(void *mtx_hnd = 0)
: winapi_mutex_functions(mtx_hnd)
{}
@@ -120,7 +87,7 @@ class winapi_mutex_wrapper
void *release()
{
void *hnd = m_mtx_hnd;
- m_mtx_hnd = winapi::invalid_handle_value;
+ m_mtx_hnd = 0;
return hnd;
}
@@ -129,24 +96,24 @@ class winapi_mutex_wrapper
bool open_or_create(const char *name, const permissions &perm)
{
- if(m_mtx_hnd == winapi::invalid_handle_value){
+ if(m_mtx_hnd == 0){
m_mtx_hnd = winapi::open_or_create_mutex
( name
, false
, (winapi::interprocess_security_attributes*)perm.get_permissions()
);
- return m_mtx_hnd != winapi::invalid_handle_value;
+ return m_mtx_hnd != 0;
}
else{
return false;
}
- }
+ }
void close()
{
- if(m_mtx_hnd != winapi::invalid_handle_value){
+ if(m_mtx_hnd != 0){
winapi::close_handle(m_mtx_hnd);
- m_mtx_hnd = winapi::invalid_handle_value;
+ m_mtx_hnd = 0;
}
}
diff --git a/3party/boost/boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp b/3party/boost/boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp
index de5185ac94..721acf91e5 100644
--- a/3party/boost/boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp
+++ b/3party/boost/boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_INTERPROCESS_DETAIL_WINAPI_SEMAPHORE_WRAPPER_HPP
#define BOOST_INTERPROCESS_DETAIL_WINAPI_SEMAPHORE_WRAPPER_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -21,6 +21,7 @@
#include <boost/interprocess/permissions.hpp>
#include <boost/interprocess/detail/win32_api.hpp>
#include <boost/interprocess/detail/posix_time_types_wrk.hpp>
+#include <boost/interprocess/sync/windows/winapi_wrapper_common.hpp>
#include <boost/interprocess/errors.hpp>
#include <boost/interprocess/exceptions.hpp>
#include <limits>
@@ -50,48 +51,13 @@ class winapi_semaphore_functions
}
void wait()
- {
- if(winapi::wait_for_single_object(m_sem_hnd, winapi::infinite_time) != winapi::wait_object_0){
- error_info err = system_error_code();
- throw interprocess_exception(err);
- }
- }
+ { return winapi_wrapper_wait_for_single_object(m_sem_hnd); }
bool try_wait()
- {
- unsigned long ret = winapi::wait_for_single_object(m_sem_hnd, 0);
- if(ret == winapi::wait_object_0){
- return true;
- }
- else if(ret == winapi::wait_timeout){
- return false;
- }
- else{
- error_info err = system_error_code();
- throw interprocess_exception(err);
- }
- }
+ { return winapi_wrapper_try_wait_for_single_object(m_sem_hnd); }
bool timed_wait(const boost::posix_time::ptime &abs_time)
- {
- if(abs_time == boost::posix_time::pos_infin){
- this->wait();
- return true;
- }
-
- unsigned long ret = winapi::wait_for_single_object
- (m_sem_hnd, (abs_time - microsec_clock::universal_time()).total_milliseconds());
- if(ret == winapi::wait_object_0){
- return true;
- }
- else if(ret == winapi::wait_timeout){
- return false;
- }
- else{
- error_info err = system_error_code();
- throw interprocess_exception(err);
- }
- }
+ { return winapi_wrapper_timed_wait_for_single_object(m_sem_hnd, abs_time); }
long value() const
{
diff --git a/3party/boost/boost/interprocess/sync/windows/winapi_wrapper_common.hpp b/3party/boost/boost/interprocess/sync/windows/winapi_wrapper_common.hpp
new file mode 100644
index 0000000000..ccf2d65cb6
--- /dev/null
+++ b/3party/boost/boost/interprocess/sync/windows/winapi_wrapper_common.hpp
@@ -0,0 +1,93 @@
+ //////////////////////////////////////////////////////////////////////////////
+//
+// (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_DETAIL_WINAPI_WRAPPER_COMMON_HPP
+#define BOOST_INTERPROCESS_DETAIL_WINAPI_WRAPPER_COMMON_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/interprocess/detail/config_begin.hpp>
+#include <boost/interprocess/detail/workaround.hpp>
+#include <boost/interprocess/detail/win32_api.hpp>
+#include <boost/interprocess/detail/posix_time_types_wrk.hpp>
+#include <boost/interprocess/errors.hpp>
+#include <boost/interprocess/exceptions.hpp>
+#include <limits>
+
+namespace boost {
+namespace interprocess {
+namespace ipcdetail {
+
+inline void winapi_wrapper_wait_for_single_object(void *handle)
+{
+ unsigned long ret = winapi::wait_for_single_object(handle, winapi::infinite_time);
+ if(ret != winapi::wait_object_0){
+ if(ret != winapi::wait_abandoned){
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
+ }
+ else{ //Special case for orphaned mutexes
+ winapi::release_mutex(handle);
+ throw interprocess_exception(owner_dead_error);
+ }
+ }
+}
+
+inline bool winapi_wrapper_try_wait_for_single_object(void *handle)
+{
+ unsigned long ret = winapi::wait_for_single_object(handle, 0);
+ if(ret == winapi::wait_object_0){
+ return true;
+ }
+ else if(ret == winapi::wait_timeout){
+ return false;
+ }
+ else{
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
+ }
+}
+
+inline bool winapi_wrapper_timed_wait_for_single_object(void *handle, const boost::posix_time::ptime &abs_time)
+{
+ //Windows does not support infinity abs_time so check it
+ if(abs_time == boost::posix_time::pos_infin){
+ winapi_wrapper_wait_for_single_object(handle);
+ return true;
+ }
+ const boost::posix_time::ptime cur_time = microsec_clock::universal_time();
+ //Windows uses relative wait times so check for negative waits
+ //and implement as 0 wait to allow try-semantics as POSIX mandates.
+ unsigned long ret = winapi::wait_for_single_object
+ ( handle
+ , (abs_time <= cur_time) ? 0u
+ : (abs_time - cur_time).total_milliseconds()
+ );
+ if(ret == winapi::wait_object_0){
+ return true;
+ }
+ else if(ret == winapi::wait_timeout){
+ return false;
+ }
+ else{
+ error_info err = system_error_code();
+ throw interprocess_exception(err);
+ }
+}
+
+} //namespace ipcdetail {
+} //namespace interprocess {
+} //namespace boost {
+
+#include <boost/interprocess/detail/config_end.hpp>
+
+#endif //BOOST_INTERPROCESS_DETAIL_WINAPI_MUTEX_WRAPPER_HPP
diff --git a/3party/boost/boost/interprocess/windows_shared_memory.hpp b/3party/boost/boost/interprocess/windows_shared_memory.hpp
index f2195ac2f3..73c1d013f2 100644
--- a/3party/boost/boost/interprocess/windows_shared_memory.hpp
+++ b/3party/boost/boost/interprocess/windows_shared_memory.hpp
@@ -60,13 +60,13 @@ class windows_shared_memory
//!Represents an empty windows_shared_memory.
windows_shared_memory();
- //!Creates a new native shared memory with name "name" and mode "mode",
+ //!Creates a new native shared memory with name "name" and at least size "size",
//!with the access mode "mode".
//!If the file previously exists, throws an error.
windows_shared_memory(create_only_t, const char *name, mode_t mode, std::size_t size, const permissions& perm = permissions())
{ this->priv_open_or_create(ipcdetail::DoCreate, name, mode, size, perm); }
- //!Tries to create a shared memory object with name "name" and mode "mode", with the
+ //!Tries to create a shared memory object with name "name" and at least size "size", with the
//!access mode "mode". If the file previously exists, it tries to open it with mode "mode".
//!Otherwise throws an error.
windows_shared_memory(open_or_create_t, const char *name, mode_t mode, std::size_t size, const permissions& perm = permissions())
@@ -112,6 +112,10 @@ class windows_shared_memory
//!Returns the mapping handle. Never throws
mapping_handle_t get_mapping_handle() const;
+ //!Returns the size of the windows shared memory. It will be a 4K rounded
+ //!size of the "size" passed in the constructor.
+ offset_t get_size() const;
+
/// @cond
private:
@@ -152,6 +156,12 @@ inline mapping_handle_t windows_shared_memory::get_mapping_handle() const
inline mode_t windows_shared_memory::get_mode() const
{ return m_mode; }
+inline offset_t windows_shared_memory::get_size() const
+{
+ offset_t size; //This shall never fail
+ return (m_handle && winapi::get_file_mapping_size(m_handle, size)) ? size : 0;
+}
+
inline bool windows_shared_memory::priv_open_or_create
(ipcdetail::create_enum_t type, const char *filename, mode_t mode, std::size_t size, const permissions& perm)
{
diff --git a/3party/boost/boost/interprocess/xsi_key.hpp b/3party/boost/boost/interprocess/xsi_key.hpp
index ffd4c498df..e772ce8a9e 100644
--- a/3party/boost/boost/interprocess/xsi_key.hpp
+++ b/3party/boost/boost/interprocess/xsi_key.hpp
@@ -55,7 +55,7 @@ class xsi_key
//!If the shared memory previously exists, throws an error.
xsi_key(const char *path, boost::uint8_t id)
{
- key_t key;
+ key_t key;
if(path){
key = ::ftok(path, id);
if(((key_t)-1) == key){
diff --git a/3party/boost/boost/intrusive/any_hook.hpp b/3party/boost/boost/intrusive/any_hook.hpp
index 7d60de001a..b53df9ff93 100644
--- a/3party/boost/boost/intrusive/any_hook.hpp
+++ b/3party/boost/boost/intrusive/any_hook.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -37,7 +37,7 @@ struct get_any_node_algo
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none>
+template<class O1 = void, class O2 = void, class O3 = void>
#endif
struct make_any_base_hook
{
@@ -51,11 +51,11 @@ struct make_any_base_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_any_node_algo<typename packed_options::void_pointer>
, typename packed_options::tag
, packed_options::link_mode
- , detail::AnyBaseHook
+ , AnyBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -75,7 +75,7 @@ struct make_any_base_hook
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link, \c safe_link).
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
@@ -142,7 +142,7 @@ class any_base_hook
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none>
+template<class O1 = void, class O2 = void, class O3 = void>
#endif
struct make_any_member_hook
{
@@ -156,11 +156,11 @@ struct make_any_member_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_any_node_algo<typename packed_options::void_pointer>
, member_tag
, packed_options::link_mode
- , detail::NoBaseHook
+ , NoBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -175,7 +175,7 @@ struct make_any_member_hook
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link or \c safe_link).
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
@@ -244,7 +244,7 @@ namespace detail{
template<class ValueTraits>
struct any_to_get_base_pointer_type
{
- typedef typename pointer_traits<typename ValueTraits::boost_intrusive_tags::node_traits::node_ptr>::template
+ typedef typename pointer_traits<typename ValueTraits::hooktags::node_traits::node_ptr>::template
rebind_pointer<void>::type type;
};
@@ -260,17 +260,18 @@ struct any_to_get_member_pointer_type
template<class BaseHook, template <class> class NodeTraits>
struct any_to_some_hook
{
- typedef typename BaseHook::template pack<none>::value_traits old_value_traits;
+ typedef typename BaseHook::template pack<empty>::proto_value_traits old_proto_value_traits;
+
template<class Base>
struct pack : public Base
{
- struct value_traits : public old_value_traits
+ struct proto_value_traits : public old_proto_value_traits
{
static const bool is_any_hook = true;
typedef typename detail::eval_if_c
- < detail::internal_base_hook_bool_is_true<old_value_traits>::value
- , any_to_get_base_pointer_type<old_value_traits>
- , any_to_get_member_pointer_type<old_value_traits>
+ < detail::internal_base_hook_bool_is_true<old_proto_value_traits>::value
+ , any_to_get_base_pointer_type<old_proto_value_traits>
+ , any_to_get_member_pointer_type<old_proto_value_traits>
>::type void_pointer;
typedef NodeTraits<void_pointer> node_traits;
};
diff --git a/3party/boost/boost/intrusive/avl_set.hpp b/3party/boost/boost/intrusive/avl_set.hpp
index 9e17aa7e4b..2d78b4ded8 100644
--- a/3party/boost/boost/intrusive/avl_set.hpp
+++ b/3party/boost/boost/intrusive/avl_set.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -36,14 +36,15 @@ namespace intrusive {
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class avl_set_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder>
+#endif
{
/// @cond
- typedef avltree_impl<Config> tree_type;
- //! This class is
- //! movable
+ typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> tree_type;
BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_set_impl)
typedef tree_type implementation_defined;
@@ -71,1208 +72,385 @@ class avl_set_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- static const bool constant_time_size = Config::constant_time_size;
-
- /// @cond
- private:
- tree_type tree_;
- /// @endcond
+ static const bool constant_time_size = tree_type::constant_time_size;
public:
- //! <b>Effects</b>: Constructs an empty avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor of the value_compare object throws.
+
+ //! @copydoc ::boost::intrusive::avltree::avltree(const value_compare &,const value_traits &)
explicit avl_set_impl( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : tree_(cmp, v_traits)
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
{}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty avl_set and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is std::distance(last, first).
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::avltree::avltree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
avl_set_impl( Iterator b, Iterator e
, const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(true, b, e, cmp, v_traits)
+ : tree_type(true, b, e, cmp, v_traits)
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::avltree::avltree(avltree &&)
avl_set_impl(BOOST_RV_REF(avl_set_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::avltree::operator=(avltree &&)
avl_set_impl& operator=(BOOST_RV_REF(avl_set_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the avl_set
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~avl_set_impl()
- {}
+ { return static_cast<avl_set_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::avltree::~avltree()
+ ~avl_set_impl();
+
+ //! @copydoc ::boost::intrusive::avltree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::avltree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::avltree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::avltree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::avltree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::avltree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::avltree::begin()
+ reverse_iterator avlegin();
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of avl_set.
- //!
- //! <b>Effects</b>: Returns a const reference to the avl_set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static avl_set_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<avl_set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &avl_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of avl_set.
- //!
- //! <b>Effects</b>: Returns a const reference to the set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const avl_set_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<avl_set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &avl_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of set.
- //!
- //! <b>Effects</b>: Returns a reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static avl_set_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<avl_set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &avl_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of set.
- //!
- //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const avl_set_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<avl_set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &avl_set_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the avl_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns true is the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the avl_set.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
-
- //! <b>Effects</b>: Swaps the contents of two sets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(avl_set_impl& other)
- { tree_.swap(other.tree_); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::avltree::begin()const
+ const_reverse_iterator avlegin() const;
+
+ //! @copydoc ::boost::intrusive::avltree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::avltree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::avltree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::avltree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::avltree::container_from_end_iterator(iterator)
+ static avl_set_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::avltree::container_from_end_iterator(const_iterator)
+ static const avl_set_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::avltree::container_from_iterator(iterator)
+ static avl_set_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::avltree::container_from_iterator(const_iterator)
+ static const avl_set_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::avltree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::avltree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::avltree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::avltree::size()const
+ size_type size() const;
+
+ //! @copydoc ::boost::intrusive::avltree::swap
+ void swap(avl_set_impl& other);
+
+ //! @copydoc ::boost::intrusive::avltree::clone_from
template <class Cloner, class Disposer>
- void clone_from(const avl_set_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Treaps to inserts value into the avl_set.
- //!
- //! <b>Returns</b>: If the value
- //! is not already present inserts it and returns a pair containing the
- //! iterator to the new value and true. If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ void clone_from(const avl_set_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::avltree::insert_unique(reference)
std::pair<iterator, bool> insert(reference value)
- { return tree_.insert_unique(value); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Treaps to to insert x into the avl_set, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the
- //! new element was inserted into the avl_set.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_unique(value); }
+
+ //! @copydoc ::boost::intrusive::avltree::insert_unique(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_unique(hint, value); }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the avl_set, using
- //! a user provided key instead of the value itself.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that
- //! part to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the avl_set.
+ { return tree_type::insert_unique(hint, value); }
+
+ //! @copydoc ::boost::intrusive::avltree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_check
(const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(key, key_value_comp, commit_data); }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the avl_set, using
- //! a user provided key instead of the value itself, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! constructing that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that key
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This can give a total
- //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the avl_set.
+ { return tree_type::insert_unique_check(key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::avltree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_check
(const_iterator hint, const KeyType &key
,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(hint, key, key_value_comp, commit_data); }
-
- //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
- //! must have been obtained from a previous call to "insert_check".
- //! No objects should have been inserted or erased from the avl_set between
- //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
- //!
- //! <b>Effects</b>: Inserts the value in the avl_set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Returns</b>: An iterator to the newly inserted object.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- iterator insert_commit(reference value, const insert_commit_data &commit_data)
- { return tree_.insert_unique_commit(value, commit_data); }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the avl_set.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_unique_check(hint, key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::avltree::insert_unique(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_unique(b, e); }
-
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate. "value" must not be equal to any
- //! inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" or "value" is not unique tree ordering and uniqueness
- //! invariants will be broken respectively.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- { return tree_.insert_before(pos, value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be greater than
- //! any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than or equal to the greatest inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- { tree_.push_back(value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be less
- //! than any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than or equal to the the mimum inserted key tree ordering or uniqueness
- //! invariants will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- { tree_.push_front(value); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { return tree_.erase(b, e); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size()) + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
-
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If the comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ { tree_type::insert_unique(b, e); }
+
+ //! @copydoc ::boost::intrusive::avltree::insert_unique_commit
+ iterator insert_commit(reference value, const insert_commit_data &commit_data)
+ { return tree_type::insert_unique_commit(value, commit_data); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::avltree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::avltree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::avltree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)). Basic guarantee.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::avltree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::avltree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ void clear_and_dispose(Disposer disposer);
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::avltree::count(const_reference)const
size_type count(const_reference value) const
- { return tree_.find(value) != end(); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ { return static_cast<size_type>(this->tree_type::find(value) != this->tree_type::cend()); }
+
+ //! @copydoc ::boost::intrusive::avltree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
size_type count(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp) != end(); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return static_cast<size_type>(this->tree_type::find(key, comp) != this->tree_type::cend()); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::avltree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound(const_reference value) const
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::avltree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::avltree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound(const_reference value) const
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::avltree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::avltree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find(const_reference value) const
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::avltree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)
std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
equal_range(const_reference value) const
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
equal_range(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range(key, comp); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::avltree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::avltree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::avltree::bounded_range(const_reference,const_reference,bool,bool)const
std::pair<const_iterator, const_iterator>
- bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::avltree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a avl_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the avl_set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a avl_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! avl_set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a avl_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the avl_set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a avl_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! avl_set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value shall not be in a avl_set/avl_multiset.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
- friend bool operator==(const avl_set_impl &x, const avl_set_impl &y)
- { return x.tree_ == y.tree_; }
+ //! @copydoc ::boost::intrusive::avltree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- friend bool operator<(const avl_set_impl &x, const avl_set_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ //! @copydoc ::boost::intrusive::avltree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::avltree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::avltree::remove_node
+ void remove_node(reference value);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y)
-#else
-(const avl_set_impl<Config> &x, const avl_set_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y)
-#else
-(const avl_set_impl<Config> &x, const avl_set_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y)
-#else
-(const avl_set_impl<Config> &x, const avl_set_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y)
-#else
-(const avl_set_impl<Config> &x, const avl_set_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(avl_set_impl<T, Options...> &x, avl_set_impl<T, Options...> &y)
-#else
-(avl_set_impl<Config> &x, avl_set_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(avl_set_impl<T, Options...> &x, avl_set_impl<T, Options...> &y);
-//! Helper metafunction to define a \c avl_set that yields to the same type when the
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+//! Helper metafunction to define a \c set that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_avl_set
{
/// @cond
- typedef avl_set_impl
- < typename make_avltree_opt
+ typedef typename pack_options
+ < avltree_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- <T, O1, O2, O3, O4>
+ O1, O2, O3, O4, O5
#else
- <T, Options...>
+ Options...
#endif
- ::type
- > implementation_defined;
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
+ typedef avl_set_impl
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
-
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class avl_set
- : public make_avl_set
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- <T, O1, O2, O3, O4>
- #else
- <T, Options...>
- #endif
- ::type
+ : public make_avl_set<T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type
{
typedef typename make_avl_set
+ <T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- <T, O1, O2, O3, O4>
+ O1, O2, O3, O4, O5
#else
- <T, Options...>
+ Options...
#endif
- ::type Base;
+ >::type Base;
BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_set)
public:
@@ -1284,8 +462,8 @@ class avl_set
//Assert if passed value traits are compatible with the type
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- avl_set( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit avl_set( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
@@ -1301,7 +479,7 @@ class avl_set
{}
avl_set& operator=(BOOST_RV_REF(avl_set) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<avl_set &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static avl_set &container_from_end_iterator(iterator end_iterator)
{ return static_cast<avl_set &>(Base::container_from_end_iterator(end_iterator)); }
@@ -1309,17 +487,17 @@ class avl_set
static const avl_set &container_from_end_iterator(const_iterator end_iterator)
{ return static_cast<const avl_set &>(Base::container_from_end_iterator(end_iterator)); }
- static avl_set &container_from_iterator(iterator end_iterator)
- { return static_cast<avl_set &>(Base::container_from_iterator(end_iterator)); }
+ static avl_set &container_from_iterator(iterator it)
+ { return static_cast<avl_set &>(Base::container_from_iterator(it)); }
- static const avl_set &container_from_iterator(const_iterator end_iterator)
- { return static_cast<const avl_set &>(Base::container_from_iterator(end_iterator)); }
+ static const avl_set &container_from_iterator(const_iterator it)
+ { return static_cast<const avl_set &>(Base::container_from_iterator(it)); }
};
#endif
//! The class template avl_multiset is an intrusive container, that mimics most of
-//! the interface of std::avl_multiset as described in the C++ standard.
+//! the interface of std::_multiset as described in the C++ standard.
//!
//! The template parameter \c T is the type to be managed by the container.
//! The user can specify additional options and if no options are provided
@@ -1332,14 +510,16 @@ class avl_set
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class avl_multiset_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder>
+#endif
{
/// @cond
- typedef avltree_impl<Config> tree_type;
+ typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> tree_type;
- //Movable
BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_multiset_impl)
typedef tree_type implementation_defined;
/// @endcond
@@ -1366,1088 +546,325 @@ class avl_multiset_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- static const bool constant_time_size = Config::constant_time_size;
-
- /// @cond
- private:
- tree_type tree_;
- /// @endcond
+ static const bool constant_time_size = tree_type::constant_time_size;
public:
- //! <b>Effects</b>: Constructs an empty avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::avltree::avltree(const value_compare &,const value_traits &)
explicit avl_multiset_impl( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : tree_(cmp, v_traits)
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
{}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty avl_multiset and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is the distance between first and last
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::avltree::avltree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
avl_multiset_impl( Iterator b, Iterator e
, const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(false, b, e, cmp, v_traits)
+ : tree_type(false, b, e, cmp, v_traits)
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::avltree::avltree(avltree &&)
avl_multiset_impl(BOOST_RV_REF(avl_multiset_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::avltree::operator=(avltree &&)
avl_multiset_impl& operator=(BOOST_RV_REF(avl_multiset_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the avl_multiset
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~avl_multiset_impl()
- {}
+ { return static_cast<avl_multiset_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::avltree::~avltree()
+ ~avl_multiset_impl();
+
+ //! @copydoc ::boost::intrusive::avltree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::avltree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::avltree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::avltree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::avltree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::avltree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::avltree::rbegin()
+ reverse_iterator rbegin();
+
+ //! @copydoc ::boost::intrusive::avltree::rbegin()const
+ const_reverse_iterator rbegin() const;
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of avl_multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the avl_multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static avl_multiset_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<avl_multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &avl_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of avl_multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the avl_multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const avl_multiset_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<avl_multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &avl_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static avl_multiset_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<avl_multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &avl_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const avl_multiset_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<avl_multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &avl_multiset_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the avl_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns true is the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the avl_multiset.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
-
- //! <b>Effects</b>: Swaps the contents of two avl_multisets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(avl_multiset_impl& other)
- { tree_.swap(other.tree_); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::avltree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::avltree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::avltree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::avltree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::avltree::container_from_end_iterator(iterator)
+ static avl_multiset_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::avltree::container_from_end_iterator(const_iterator)
+ static const avl_multiset_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::avltree::container_from_iterator(iterator)
+ static avl_multiset_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::avltree::container_from_iterator(const_iterator)
+ static const avl_multiset_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::avltree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::avltree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::avltree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::avltree::size()const
+ size_type size() const;
+
+ //! @copydoc ::boost::intrusive::avltree::swap
+ void swap(avl_multiset_impl& other);
+
+ //! @copydoc ::boost::intrusive::avltree::clone_from
template <class Cloner, class Disposer>
- void clone_from(const avl_multiset_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the avl_multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ void clone_from(const avl_multiset_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::avltree::insert_equal(reference)
iterator insert(reference value)
- { return tree_.insert_equal(value); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts x into the avl_multiset, using pos as a hint to
- //! where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_equal(value); }
+
+ //! @copydoc ::boost::intrusive::avltree::insert_equal(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_equal(hint, value); }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the avl_multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_equal(hint, value); }
+
+ //! @copydoc ::boost::intrusive::avltree::insert_equal(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_equal(b, e); }
-
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate. "value" must not be equal to any
- //! inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" or "value" is not unique tree ordering and uniqueness
- //! invariants will be broken respectively.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- { return tree_.insert_before(pos, value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be greater than
- //! any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than or equal to the greatest inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- { tree_.push_back(value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be less
- //! than any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than or equal to the the mimum inserted key tree ordering or uniqueness
- //! invariants will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- { tree_.push_front(value); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { return tree_.erase(b, e); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
-
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ { tree_type::insert_equal(b, e); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::avltree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::avltree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::avltree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::avltree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::avltree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- size_type count(const_reference value) const
- { return tree_.count(value); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ void clear_and_dispose(Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::avltree::count(const_reference)const
+ size_type count(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType& key, KeyValueCompare comp) const
- { return tree_.count(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::avltree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound(const_reference value) const
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::avltree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::avltree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound(const_reference value) const
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::avltree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::avltree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find(const_reference value) const
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::avltree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::avltree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::avltree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range(const_reference value) const
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ equal_range(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range(key, comp); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::avltree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::avltree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::avltree::bounded_range(const_reference,const_reference,bool,bool)const
std::pair<const_iterator, const_iterator>
- bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::avltree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a avl_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the avl_multiset
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a avl_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! avl_multiset that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a avl_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the avl_multiset
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a avl_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! avl_multiset that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value shall not be in a avl_multiset/avl_multiset.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
- friend bool operator==(const avl_multiset_impl &x, const avl_multiset_impl &y)
- { return x.tree_ == y.tree_; }
+ //! @copydoc ::boost::intrusive::avltree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- friend bool operator<(const avl_multiset_impl &x, const avl_multiset_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ //! @copydoc ::boost::intrusive::avltree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::avltree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::avltree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::avltree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::avltree::remove_node
+ void remove_node(reference value);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y)
-#else
-(const avl_multiset_impl<Config> &x, const avl_multiset_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y)
-#else
-(const avl_multiset_impl<Config> &x, const avl_multiset_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y)
-#else
-(const avl_multiset_impl<Config> &x, const avl_multiset_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y)
-#else
-(const avl_multiset_impl<Config> &x, const avl_multiset_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(avl_multiset_impl<T, Options...> &x, avl_multiset_impl<T, Options...> &y)
-#else
-(avl_multiset_impl<Config> &x, avl_multiset_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(avl_multiset_impl<T, Options...> &x, avl_multiset_impl<T, Options...> &y);
+
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
//! Helper metafunction to define a \c avl_multiset that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_avl_multiset
{
/// @cond
+ typedef typename pack_options
+ < avltree_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
typedef avl_multiset_impl
- < typename make_avltree_opt
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- <T, O1, O2, O3, O4>
- #else
- <T, Options...>
- #endif
- ::type
- > implementation_defined;
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
@@ -2455,28 +872,29 @@ struct make_avl_multiset
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class avl_multiset
: public make_avl_multiset<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type
{
- typedef typename make_avl_multiset
+ typedef typename make_avl_multiset<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- <T, O1, O2, O3, O4>
+ O1, O2, O3, O4, O5
#else
- <T, Options...>
+ Options...
#endif
- ::type Base;
+ >::type Base;
BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_multiset)
+
public:
typedef typename Base::value_compare value_compare;
typedef typename Base::value_traits value_traits;
@@ -2486,8 +904,8 @@ class avl_multiset
//Assert if passed value traits are compatible with the type
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- avl_multiset( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit avl_multiset( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
@@ -2503,7 +921,7 @@ class avl_multiset
{}
avl_multiset& operator=(BOOST_RV_REF(avl_multiset) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<avl_multiset &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static avl_multiset &container_from_end_iterator(iterator end_iterator)
{ return static_cast<avl_multiset &>(Base::container_from_end_iterator(end_iterator)); }
@@ -2511,11 +929,11 @@ class avl_multiset
static const avl_multiset &container_from_end_iterator(const_iterator end_iterator)
{ return static_cast<const avl_multiset &>(Base::container_from_end_iterator(end_iterator)); }
- static avl_multiset &container_from_iterator(iterator end_iterator)
- { return static_cast<avl_multiset &>(Base::container_from_iterator(end_iterator)); }
+ static avl_multiset &container_from_iterator(iterator it)
+ { return static_cast<avl_multiset &>(Base::container_from_iterator(it)); }
- static const avl_multiset &container_from_iterator(const_iterator end_iterator)
- { return static_cast<const avl_multiset &>(Base::container_from_iterator(end_iterator)); }
+ static const avl_multiset &container_from_iterator(const_iterator it)
+ { return static_cast<const avl_multiset &>(Base::container_from_iterator(it)); }
};
#endif
diff --git a/3party/boost/boost/intrusive/avl_set_hook.hpp b/3party/boost/boost/intrusive/avl_set_hook.hpp
index 825921f509..7cb3e3d2e3 100644
--- a/3party/boost/boost/intrusive/avl_set_hook.hpp
+++ b/3party/boost/boost/intrusive/avl_set_hook.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -37,7 +37,7 @@ struct get_avl_set_node_algo
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none, class O4 = none>
+template<class O1 = void, class O2 = void, class O3 = void, class O4 = void>
#endif
struct make_avl_set_base_hook
{
@@ -50,12 +50,12 @@ struct make_avl_set_base_hook
#endif
::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_avl_set_node_algo<typename packed_options::void_pointer
,packed_options::optimize_size>
, typename packed_options::tag
, packed_options::link_mode
- , detail::AvlSetBaseHook
+ , AvlTreeBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -74,7 +74,7 @@ struct make_avl_set_base_hook
//! unique tag.
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
//!
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
//! \c auto_unlink or \c safe_link).
@@ -168,7 +168,7 @@ class avl_set_base_hook
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none, class O4 = none>
+template<class O1 = void, class O2 = void, class O3 = void, class O4 = void>
#endif
struct make_avl_set_member_hook
{
@@ -181,12 +181,12 @@ struct make_avl_set_member_hook
#endif
::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_avl_set_node_algo<typename packed_options::void_pointer
,packed_options::optimize_size>
, member_tag
, packed_options::link_mode
- , detail::NoBaseHook
+ , NoBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -200,7 +200,7 @@ struct make_avl_set_member_hook
//! \c link_mode<> and \c optimize_size<>.
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
//!
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
//! \c auto_unlink or \c safe_link).
diff --git a/3party/boost/boost/intrusive/avltree.hpp b/3party/boost/boost/intrusive/avltree.hpp
index b6311c4039..ddc24f9e27 100644
--- a/3party/boost/boost/intrusive/avltree.hpp
+++ b/3party/boost/boost/intrusive/avltree.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +13,7 @@
#define BOOST_INTRUSIVE_AVLTREE_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <algorithm>
#include <cstddef>
#include <functional>
@@ -21,15 +22,14 @@
#include <boost/intrusive/detail/assert.hpp>
#include <boost/static_assert.hpp>
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/avl_set_hook.hpp>
#include <boost/intrusive/detail/avltree_node.hpp>
+#include <boost/intrusive/bstree.hpp>
#include <boost/intrusive/detail/tree_node.hpp>
#include <boost/intrusive/detail/ebo_functor_holder.hpp>
#include <boost/intrusive/detail/mpl.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/pointer_traits.hpp>
-#include <boost/intrusive/detail/clear_on_destructor_base.hpp>
#include <boost/intrusive/options.hpp>
#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/avltree_algorithms.hpp>
@@ -41,26 +41,15 @@ namespace intrusive {
/// @cond
-template <class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize>
-struct avl_setopt
+struct avltree_defaults
{
- typedef ValueTraits value_traits;
- typedef Compare compare;
- typedef SizeType size_type;
- static const bool constant_time_size = ConstantTimeSize;
+ typedef detail::default_avltree_hook proto_value_traits;
+ static const bool constant_time_size = true;
+ typedef std::size_t size_type;
+ typedef void compare;
+ typedef void header_holder_type;
};
-template <class T>
-struct avl_set_defaults
- : pack_options
- < none
- , base_hook<detail::default_avl_set_hook>
- , constant_time_size<true>
- , size_type<std::size_t>
- , compare<std::less<T> >
- >::type
-{};
-
/// @endcond
//! The class template avltree is an intrusive AVL tree container, that
@@ -79,1672 +68,441 @@ struct avl_set_defaults
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class VoidOrKeyComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class avltree_impl
- : private detail::clear_on_destructor_base<avltree_impl<Config> >
+ /// @cond
+ : public bstree_impl<ValueTraits, VoidOrKeyComp, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder>
+ /// @endcond
{
- template<class C> friend class detail::clear_on_destructor_base;
public:
- typedef typename Config::value_traits value_traits;
+ typedef ValueTraits value_traits;
/// @cond
- static const bool external_value_traits =
- detail::external_value_traits_bool_is_true<value_traits>::value;
- typedef typename detail::eval_if_c
- < external_value_traits
- , detail::eval_value_traits<value_traits>
- , detail::identity<value_traits>
- >::type real_value_traits;
+ typedef bstree_impl< ValueTraits, VoidOrKeyComp, SizeType
+ , ConstantTimeSize, AvlTreeAlgorithms
+ , HeaderHolder> tree_type;
+ typedef tree_type implementation_defined;
/// @endcond
- typedef typename real_value_traits::pointer pointer;
- typedef typename real_value_traits::const_pointer const_pointer;
- typedef typename boost::intrusive::
- pointer_traits<pointer>::element_type value_type;
- typedef value_type key_type;
- typedef typename boost::intrusive::
- pointer_traits<pointer>::reference reference;
- typedef typename boost::intrusive::
- pointer_traits<const_pointer>::reference const_reference;
- typedef typename boost::intrusive::
- pointer_traits<pointer>::difference_type difference_type;
- typedef typename Config::size_type size_type;
- typedef typename Config::compare value_compare;
- typedef value_compare key_compare;
- typedef tree_iterator<avltree_impl, false> iterator;
- typedef tree_iterator<avltree_impl, true> const_iterator;
- typedef boost::intrusive::detail::reverse_iterator<iterator> reverse_iterator;
- typedef boost::intrusive::detail::reverse_iterator<const_iterator>const_reverse_iterator;
- typedef typename real_value_traits::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename pointer_traits
- <pointer>::template rebind_pointer
- <node>::type node_ptr;
- typedef typename pointer_traits
- <pointer>::template rebind_pointer
- <const node>::type const_node_ptr;
- typedef avltree_algorithms<node_traits> node_algorithms;
-
- static const bool constant_time_size = Config::constant_time_size;
- static const bool stateful_value_traits = detail::store_cont_ptr_on_it<avltree_impl>::value;
+ typedef typename implementation_defined::pointer pointer;
+ typedef typename implementation_defined::const_pointer const_pointer;
+ typedef typename implementation_defined::value_type value_type;
+ typedef typename implementation_defined::key_type key_type;
+ typedef typename implementation_defined::reference reference;
+ typedef typename implementation_defined::const_reference const_reference;
+ typedef typename implementation_defined::difference_type difference_type;
+ typedef typename implementation_defined::size_type size_type;
+ typedef typename implementation_defined::value_compare value_compare;
+ typedef typename implementation_defined::key_compare key_compare;
+ typedef typename implementation_defined::iterator iterator;
+ typedef typename implementation_defined::const_iterator const_iterator;
+ typedef typename implementation_defined::reverse_iterator reverse_iterator;
+ typedef typename implementation_defined::const_reverse_iterator const_reverse_iterator;
+ typedef typename implementation_defined::node_traits node_traits;
+ typedef typename implementation_defined::node node;
+ typedef typename implementation_defined::node_ptr node_ptr;
+ typedef typename implementation_defined::const_node_ptr const_node_ptr;
+ typedef typename implementation_defined::node_algorithms node_algorithms;
+
+ static const bool constant_time_size = implementation_defined::constant_time_size;
/// @cond
private:
- typedef detail::size_holder<constant_time_size, size_type> size_traits;
- //noncopyable, movable
+ //noncopyable
BOOST_MOVABLE_BUT_NOT_COPYABLE(avltree_impl)
- enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
+ /// @endcond
- //Constant-time size is incompatible with auto-unlink hooks!
- BOOST_STATIC_ASSERT(!(constant_time_size && ((int)real_value_traits::link_mode == (int)auto_unlink)));
+ public:
- struct header_plus_size : public size_traits
- { node header_; };
+ typedef typename implementation_defined::insert_commit_data insert_commit_data;
- struct node_plus_pred_t : public detail::ebo_functor_holder<value_compare>
- {
- node_plus_pred_t(const value_compare &comp)
- : detail::ebo_functor_holder<value_compare>(comp)
- {}
- header_plus_size header_plus_size_;
- };
- struct data_t : public avltree_impl::value_traits
- {
- typedef typename avltree_impl::value_traits value_traits;
- data_t(const value_compare & comp, const value_traits &val_traits)
- : value_traits(val_traits), node_plus_pred_(comp)
- {}
- node_plus_pred_t node_plus_pred_;
- } data_;
+ //! @copydoc ::boost::intrusive::bstree::bstree(const value_compare &,const value_traits &)
+ explicit avltree_impl( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
+ {}
- const value_compare &priv_comp() const
- { return data_.node_plus_pred_.get(); }
+ //! @copydoc ::boost::intrusive::bstree::bstree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
+ template<class Iterator>
+ avltree_impl( bool unique, Iterator b, Iterator e
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(unique, b, e, cmp, v_traits)
+ {}
- value_compare &priv_comp()
- { return data_.node_plus_pred_.get(); }
+ //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&)
+ avltree_impl(BOOST_RV_REF(avltree_impl) x)
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
+ {}
- const value_traits &priv_value_traits() const
- { return data_; }
+ //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&)
+ avltree_impl& operator=(BOOST_RV_REF(avltree_impl) x)
+ { return static_cast<avltree_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
- value_traits &priv_value_traits()
- { return data_; }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
- node_ptr priv_header_ptr()
- { return pointer_traits<node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_size_.header_); }
+ //! @copydoc ::boost::intrusive::bstree::~bstree()
+ ~avltree_impl();
- const_node_ptr priv_header_ptr() const
- { return pointer_traits<const_node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_size_.header_); }
+ //! @copydoc ::boost::intrusive::bstree::begin()
+ iterator begin();
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
+ //! @copydoc ::boost::intrusive::bstree::begin()const
+ const_iterator begin() const;
- size_traits &priv_size_traits()
- { return data_.node_plus_pred_.header_plus_size_; }
+ //! @copydoc ::boost::intrusive::bstree::cbegin()const
+ const_iterator cbegin() const;
- const size_traits &priv_size_traits() const
- { return data_.node_plus_pred_.header_plus_size_; }
+ //! @copydoc ::boost::intrusive::bstree::end()
+ iterator end();
- const real_value_traits &get_real_value_traits(detail::bool_<false>) const
- { return data_; }
+ //! @copydoc ::boost::intrusive::bstree::end()const
+ const_iterator end() const;
- const real_value_traits &get_real_value_traits(detail::bool_<true>) const
- { return data_.get_value_traits(*this); }
+ //! @copydoc ::boost::intrusive::bstree::cend()const
+ const_iterator cend() const;
- real_value_traits &get_real_value_traits(detail::bool_<false>)
- { return data_; }
+ //! @copydoc ::boost::intrusive::bstree::rbegin()
+ reverse_iterator rbegin();
- real_value_traits &get_real_value_traits(detail::bool_<true>)
- { return data_.get_value_traits(*this); }
+ //! @copydoc ::boost::intrusive::bstree::rbegin()const
+ const_reverse_iterator rbegin() const;
- /// @endcond
+ //! @copydoc ::boost::intrusive::bstree::crbegin()const
+ const_reverse_iterator crbegin() const;
- public:
+ //! @copydoc ::boost::intrusive::bstree::rend()
+ reverse_iterator rend();
- const real_value_traits &get_real_value_traits() const
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
+ //! @copydoc ::boost::intrusive::bstree::rend()const
+ const_reverse_iterator rend() const;
- real_value_traits &get_real_value_traits()
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
+ //! @copydoc ::boost::intrusive::bstree::crend()const
+ const_reverse_iterator crend() const;
- typedef typename node_algorithms::insert_commit_data insert_commit_data;
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(iterator)
+ static avltree_impl &container_from_end_iterator(iterator end_iterator);
- //! <b>Effects</b>: Constructs an empty tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor of the value_compare object throws. Basic guarantee.
- explicit avltree_impl( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : data_(cmp, v_traits)
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty tree and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is the distance between first and last.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws. Basic guarantee.
- template<class Iterator>
- avltree_impl( bool unique, Iterator b, Iterator e
- , const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : data_(cmp, v_traits)
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- if(unique)
- this->insert_unique(b, e);
- else
- this->insert_equal(b, e);
- }
-
- //! <b>Effects</b>: to-do
- //!
- avltree_impl(BOOST_RV_REF(avltree_impl) x)
- : data_(::boost::move(x.priv_comp()), ::boost::move(x.priv_value_traits()))
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- this->swap(x);
- }
-
- //! <b>Effects</b>: to-do
- //!
- avltree_impl& operator=(BOOST_RV_REF(avltree_impl) x)
- { this->swap(x); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the set
- //! are not deleted (i.e. no destructors are called), but the nodes according to
- //! the value_traits template parameter are reinitialized and thus can be reused.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this.
- //!
- //! <b>Throws</b>: Nothing.
- ~avltree_impl()
- {}
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(const_iterator)
+ static const avltree_impl &container_from_end_iterator(const_iterator end_iterator);
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return iterator (node_traits::get_left(this->priv_header_ptr()), this); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return cbegin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return const_iterator (node_traits::get_left(this->priv_header_ptr()), this); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return iterator (this->priv_header_ptr(), this); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return cend(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return const_iterator (uncast(this->priv_header_ptr()), this); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return reverse_iterator(end()); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator(end()); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return const_reverse_iterator(end()); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return reverse_iterator(begin()); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return const_reverse_iterator(begin()); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return const_reverse_iterator(begin()); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of avltree.
- //!
- //! <b>Effects</b>: Returns a const reference to the avltree associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static avltree_impl &container_from_end_iterator(iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of avltree.
- //!
- //! <b>Effects</b>: Returns a const reference to the avltree associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const avltree_impl &container_from_end_iterator(const_iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
-
- //! <b>Precondition</b>: it must be a valid iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static avltree_impl &container_from_iterator(iterator it)
- { return priv_container_from_iterator(it); }
-
- //! <b>Precondition</b>: it must be a valid end const_iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const avltree_impl &container_from_iterator(const_iterator it)
- { return priv_container_from_iterator(it); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return priv_comp(); }
-
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return node_algorithms::unique(this->priv_header_ptr()); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the tree.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this
- //! if constant-time size option is disabled. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- {
- if(constant_time_size)
- return this->priv_size_traits().get_size();
- else{
- return (size_type)node_algorithms::size(this->priv_header_ptr());
- }
- }
-
- //! <b>Effects</b>: Swaps the contents of two avltrees.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the comparison functor's swap call throws.
- void swap(avltree_impl& other)
- {
- //This can throw
- using std::swap;
- swap(priv_comp(), priv_comp());
- //These can't throw
- node_algorithms::swap_tree(this->priv_header_ptr(), other.priv_header_ptr());
- 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());
- other.priv_size_traits().set_size(backup);
- }
- }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the tree before the upper bound.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- iterator insert_equal(reference value)
- {
- detail::key_nodeptr_comp<value_compare, avltree_impl>
- key_node_comp(priv_comp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- iterator ret(node_algorithms::insert_equal_upper_bound
- (this->priv_header_ptr(), to_insert, key_node_comp), this);
- this->priv_size_traits().increment();
- return ret;
- }
-
- //! <b>Requires</b>: value must be an lvalue, and "hint" must be
- //! a valid iterator.
- //!
- //! <b>Effects</b>: Inserts x into the tree, using "hint" as a hint to
- //! where it will be inserted. If "hint" is the upper_bound
- //! the insertion takes constant time (two comparisons in the worst case)
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- iterator insert_equal(const_iterator hint, reference value)
- {
- detail::key_nodeptr_comp<value_compare, avltree_impl>
- key_node_comp(priv_comp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- iterator ret(node_algorithms::insert_equal
- (this->priv_header_ptr(), hint.pointed_node(), to_insert, key_node_comp), this);
- this->priv_size_traits().increment();
- return ret;
- }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a each element of a range into the tree
- //! before the upper bound of the key of each element.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- template<class Iterator>
- void insert_equal(Iterator b, Iterator e)
- {
- iterator iend(this->end());
- for (; b != e; ++b)
- this->insert_equal(iend, *b);
- }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the tree if the value
- //! is not already present.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- std::pair<iterator, bool> insert_unique(reference value)
- {
- insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(value, priv_comp(), commit_data);
- if(!ret.second)
- return ret;
- return std::pair<iterator, bool> (insert_unique_commit(value, commit_data), true);
- }
-
- //! <b>Requires</b>: value must be an lvalue, and "hint" must be
- //! a valid iterator
- //!
- //! <b>Effects</b>: Tries to insert x into the tree, using "hint" as a hint
- //! to where it will be inserted.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time (two comparisons in the worst case)
- //! if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- iterator insert_unique(const_iterator hint, reference value)
- {
- insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(hint, value, priv_comp(), commit_data);
- if(!ret.second)
- return ret.first;
- return insert_unique_commit(value, commit_data);
- }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Tries to insert each element of a range into the tree.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(iterator)
+ static avltree_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(const_iterator)
+ static const avltree_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::bstree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::bstree::size()const
+ size_type size() const;
+
+ //! @copydoc ::boost::intrusive::bstree::swap
+ void swap(avltree_impl& other);
+
+ //! @copydoc ::boost::intrusive::bstree::clone_from
+ template <class Cloner, class Disposer>
+ void clone_from(const avltree_impl &src, Cloner cloner, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(reference)
+ iterator insert_equal(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(const_iterator,reference)
+ iterator insert_equal(const_iterator hint, reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(Iterator,Iterator)
template<class Iterator>
- void insert_unique(Iterator b, Iterator e)
- {
- if(this->empty()){
- iterator iend(this->end());
- for (; b != e; ++b)
- this->insert_unique(iend, *b);
- }
- else{
- for (; b != e; ++b)
- this->insert_unique(*b);
- }
- }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the container, using
- //! a user provided key instead of the value itself.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that
- //! part to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the container.
+ void insert_equal(Iterator b, Iterator e);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(reference)
+ std::pair<iterator, bool> insert_unique(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(const_iterator,reference)
+ iterator insert_unique(const_iterator hint, reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_unique_check
- (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- comp(key_value_comp, this);
- std::pair<node_ptr, bool> ret =
- (node_algorithms::insert_unique_check
- (this->priv_header_ptr(), key, comp, commit_data));
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
- }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the container, using
- //! a user provided key instead of the value itself, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! constructing that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that key
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This can give a total
- //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the container.
+ (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_unique_check
(const_iterator hint, const KeyType &key
- ,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- comp(key_value_comp, this);
- std::pair<node_ptr, bool> ret =
- (node_algorithms::insert_unique_check
- (this->priv_header_ptr(), hint.pointed_node(), key, comp, commit_data));
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
- }
-
- //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
- //! must have been obtained from a previous call to "insert_check".
- //! No objects should have been inserted or erased from the container between
- //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
- //!
- //! <b>Effects</b>: Inserts the value in the avl_set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Returns</b>: An iterator to the newly inserted object.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- iterator insert_unique_commit(reference value, const insert_commit_data &commit_data)
- {
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- node_algorithms::insert_unique_commit
- (this->priv_header_ptr(), to_insert, commit_data);
- this->priv_size_traits().increment();
- return iterator(to_insert, this);
- }
-
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate
- //!
- //! <b>Effects</b>: Inserts x into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" tree ordering invariant will be broken.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- {
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- iterator ret(node_algorithms::insert_before
- (this->priv_header_ptr(), pos.pointed_node(), to_insert), this);
- this->priv_size_traits().increment();
- return ret;
- }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no less
- //! than the greatest inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than the greatest inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- {
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- node_algorithms::push_back(this->priv_header_ptr(), to_insert);
- this->priv_size_traits().increment();
- }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no greater
- //! than the minimum inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than the minimum inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- {
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- node_algorithms::push_front(this->priv_header_ptr(), to_insert);
- this->priv_size_traits().increment();
- }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- {
- const_iterator ret(i);
- ++ret;
- node_ptr to_erase(i.pointed_node());
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!node_algorithms::unique(to_erase));
- node_algorithms::erase(this->priv_header_ptr(), to_erase);
- this->priv_size_traits().decrement();
- if(safemode_or_autounlink)
- node_algorithms::init(to_erase);
- return ret.unconst();
- }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { size_type n; return private_erase(b, e, n); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return this->erase(value, priv_comp()); }
-
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ ,KeyValueCompare key_value_comp, insert_commit_data &commit_data);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_commit
+ iterator insert_unique_commit(reference value, const insert_commit_data &commit_data);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(Iterator,Iterator)
+ template<class Iterator>
+ void insert_unique(Iterator b, Iterator e);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- {
- std::pair<iterator,iterator> p = this->equal_range(key, comp);
- size_type n;
- private_erase(p.first, p.second, n);
- return n;
- }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- {
- node_ptr to_erase(i.pointed_node());
- iterator ret(this->erase(i));
- disposer(get_real_value_traits().to_value_ptr(to_erase));
- return ret;
- }
-
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ size_type erase(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { size_type n; return private_erase(b, e, n, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- {
- std::pair<iterator,iterator> p = this->equal_range(value);
- size_type n;
- private_erase(p.first, p.second, n, disposer);
- return n;
- }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- {
- std::pair<iterator,iterator> p = this->equal_range(key, comp);
- size_type n;
- private_erase(p.first, p.second, n, disposer);
- return n;
- }
-
- //! <b>Effects</b>: Erases all of the elements.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- {
- if(safemode_or_autounlink){
- this->clear_and_dispose(detail::null_disposer());
- }
- else{
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(0);
- }
- }
-
- //! <b>Effects</b>: Erases all of the elements calling disposer(p) for
- //! each node to be erased.
- //! <b>Complexity</b>: Average complexity for is at most O(log(size() + N)),
- //! where N is the number of elements in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. Calls N times to disposer functor.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::bstree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- {
- node_algorithms::clear_and_dispose(this->priv_header_ptr()
- , detail::node_disposer<Disposer, avltree_impl>(disposer, this));
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(0);
- }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given value
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given value.
- //!
- //! <b>Throws</b>: Nothing.
- size_type count(const_reference value) const
- { return this->count(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: Nothing.
+ void clear_and_dispose(Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::count(const_reference)const
+ size_type count(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType &key, KeyValueCompare comp) const
- {
- std::pair<const_iterator, const_iterator> ret = this->equal_range(key, comp);
- return std::distance(ret.first, ret.second);
- }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator lower_bound(const_reference value)
- { return this->lower_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator lower_bound(const_reference value) const
- { return this->lower_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator upper_bound(const_reference value)
- { return this->upper_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::upper_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator upper_bound(const_reference value) const
- { return this->upper_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::upper_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator find(const_reference value)
- { return this->find(value, priv_comp()); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- return iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator find(const_reference value) const
- { return this->find(value, priv_comp()); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- return const_iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return this->equal_range(value, priv_comp()); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range(const_reference value) const
- { return this->equal_range(value, priv_comp()); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ equal_range(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
- std::pair<const_iterator,const_iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)const
+ std::pair<const_iterator, const_iterator>
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator,const_iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, avltree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
- template <class Cloner, class Disposer>
- void clone_from(const avltree_impl &src, Cloner cloner, Disposer disposer)
- {
- this->clear_and_dispose(disposer);
- if(!src.empty()){
- detail::exception_disposer<avltree_impl, Disposer>
- rollback(*this, disposer);
- node_algorithms::clone
- (src.priv_header_ptr()
- ,this->priv_header_ptr()
- ,detail::node_cloner<Cloner, avltree_impl>(cloner, this)
- ,detail::node_disposer<Disposer, avltree_impl>(disposer, this));
- this->priv_size_traits().set_size(src.priv_size_traits().get_size());
- this->priv_comp() = src.priv_comp();
- rollback.release();
- }
- }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- {
- node_ptr to_be_disposed(node_algorithms::unlink_leftmost_without_rebalance
- (this->priv_header_ptr()));
- if(!to_be_disposed)
- return 0;
- this->priv_size_traits().decrement();
- if(safemode_or_autounlink)//If this is commented does not work with normal_link
- node_algorithms::init(to_be_disposed);
- return get_real_value_traits().to_value_ptr(to_be_disposed);
- }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- {
- node_algorithms::replace_node( get_real_value_traits().to_node_ptr(*replace_this)
- , this->priv_header_ptr()
- , get_real_value_traits().to_node_ptr(with_this));
- if(safemode_or_autounlink)
- node_algorithms::init(replace_this.pointed_node());
- }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return iterator (value_traits::to_node_ptr(value), 0);
- }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), 0);
- }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return iterator (value_traits::to_node_ptr(value), this); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), this); }
-
- //! <b>Requires</b>: value shall not be in a tree.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { node_algorithms::init(value_traits::to_node_ptr(value)); }
-
-/*
- //! <b>Effects</b>: removes x from a tree of the appropriate type. It has no effect,
- //! if x is not in such a tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This static function is only usable with the "safe mode"
- //! hook and non-constant time size lists. Otherwise, the user must use
- //! the non-static "erase(reference )" member. If the user calls
- //! this function with a non "safe mode" or constant time size list
- //! a compilation error will be issued.
- template<class T>
- static void remove_node(T& value)
- {
- //This function is only usable for safe mode hooks and non-constant
- //time lists.
- //BOOST_STATIC_ASSERT((!(safemode_or_autounlink && constant_time_size)));
- BOOST_STATIC_ASSERT((!constant_time_size));
- BOOST_STATIC_ASSERT((boost::is_convertible<T, value_type>::value));
- node_ptr to_remove(value_traits::to_node_ptr(value));
- node_algorithms::unlink_and_rebalance(to_remove);
- if(safemode_or_autounlink)
- node_algorithms::init(to_remove);
- }
-*/
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- private:
- template<class Disposer>
- iterator private_erase(const_iterator b, const_iterator e, size_type &n, Disposer disposer)
- {
- for(n = 0; b != e; ++n)
- this->erase_and_dispose(b++, disposer);
- return b.unconst();
- }
-
- iterator private_erase(const_iterator b, const_iterator e, size_type &n)
- {
- for(n = 0; b != e; ++n)
- this->erase(b++);
- return b.unconst();
- }
- /// @endcond
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
- private:
- static avltree_impl &priv_container_from_end_iterator(const const_iterator &end_iterator)
- {
- header_plus_size *r = detail::parent_from_member<header_plus_size, node>
- ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), &header_plus_size::header_);
- node_plus_pred_t *n = detail::parent_from_member
- <node_plus_pred_t, header_plus_size>(r, &node_plus_pred_t::header_plus_size_);
- data_t *d = detail::parent_from_member<data_t, node_plus_pred_t>(n, &data_t::node_plus_pred_);
- avltree_impl *avl = detail::parent_from_member<avltree_impl, data_t>(d, &avltree_impl::data_);
- return *avl;
- }
-
- static avltree_impl &priv_container_from_iterator(const const_iterator &it)
- { return priv_container_from_end_iterator(it.end_iterator_from_it()); }
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::bstree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::bstree::remove_node
+ void remove_node(reference value);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y)
-#else
-(const avltree_impl<Config> &x, const avltree_impl<Config> &y)
-#endif
-{ return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
+bool operator< (const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-bool operator==
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y)
-#else
-(const avltree_impl<Config> &x, const avltree_impl<Config> &y)
-#endif
-{
- typedef avltree_impl<Config> tree_type;
- typedef typename tree_type::const_iterator const_iterator;
-
- if(tree_type::constant_time_size && x.size() != y.size()){
- return false;
- }
- const_iterator end1 = x.end();
- const_iterator i1 = x.begin();
- const_iterator i2 = y.begin();
- if(tree_type::constant_time_size){
- while (i1 != end1 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1;
- }
- else{
- const_iterator end2 = y.end();
- while (i1 != end1 && i2 != end2 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1 && i2 == end2;
- }
-}
+bool operator==(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y)
-#else
-(const avltree_impl<Config> &x, const avltree_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y)
-#else
-(const avltree_impl<Config> &x, const avltree_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y)
-#else
-(const avltree_impl<Config> &x, const avltree_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y)
-#else
-(const avltree_impl<Config> &x, const avltree_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const avltree_impl<T, Options...> &x, const avltree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(avltree_impl<T, Options...> &x, avltree_impl<T, Options...> &y)
-#else
-(avltree_impl<Config> &x, avltree_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(avltree_impl<T, Options...> &x, avltree_impl<T, Options...> &y);
-/// @cond
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none
- >
-#else
+//! Helper metafunction to define a \c avltree that yields to the same type when the
+//! same options (either explicitly or implicitly) are used.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
+#else
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
-struct make_avltree_opt
+struct make_avltree
{
+ /// @cond
typedef typename pack_options
+ < avltree_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- < avl_set_defaults<T>, O1, O2, O3, O4>
+ O1, O2, O3, O4, O5
#else
- < avl_set_defaults<T>, Options...>
+ Options...
#endif
- ::type packed_options;
+ >::type packed_options;
typedef typename detail::get_value_traits
- <T, typename packed_options::value_traits>::type value_traits;
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
- typedef avl_setopt
+ typedef avltree_impl
< value_traits
, typename packed_options::compare
, typename packed_options::size_type
, packed_options::constant_time_size
- > type;
-};
-/// @endcond
-
-//! Helper metafunction to define a \c avltree that yields to the same type when the
-//! same options (either explicitly or implicitly) are used.
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class ...Options>
-#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
-#endif
-struct make_avltree
-{
- /// @cond
- typedef avltree_impl
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- < typename make_avltree_opt<T, O1, O2, O3, O4>::type
- #else
- < typename make_avltree_opt<T, Options...>::type
- #endif
- > implementation_defined;
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class avltree
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- : public make_avltree<T, O1, O2, O3, O4>::type
- #else
- : public make_avltree<T, Options...>::type
- #endif
+ : public make_avltree<T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type
{
typedef typename make_avltree
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- <T, O1, O2, O3, O4>
- #else
- <T, Options...>
- #endif
- ::type Base;
-
+ <T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type Base;
BOOST_MOVABLE_BUT_NOT_COPYABLE(avltree)
public:
typedef typename Base::value_compare value_compare;
typedef typename Base::value_traits value_traits;
- typedef typename Base::real_value_traits real_value_traits;
typedef typename Base::iterator iterator;
typedef typename Base::const_iterator const_iterator;
+ typedef typename Base::reverse_iterator reverse_iterator;
+ typedef typename Base::const_reverse_iterator const_reverse_iterator;
//Assert if passed value traits are compatible with the type
- BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- avltree( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit avltree( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
@@ -1760,7 +518,7 @@ class avltree
{}
avltree& operator=(BOOST_RV_REF(avltree) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<avltree &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static avltree &container_from_end_iterator(iterator end_iterator)
{ return static_cast<avltree &>(Base::container_from_end_iterator(end_iterator)); }
@@ -1777,7 +535,6 @@ class avltree
#endif
-
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/avltree_algorithms.hpp b/3party/boost/boost/intrusive/avltree_algorithms.hpp
index 11463c71fb..e6127b8377 100644
--- a/3party/boost/boost/intrusive/avltree_algorithms.hpp
+++ b/3party/boost/boost/intrusive/avltree_algorithms.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Daniel K. O. 2005.
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,26 +15,49 @@
#define BOOST_INTRUSIVE_AVLTREE_ALGORITHMS_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <cstddef>
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/detail/utilities.hpp>
-#include <boost/intrusive/detail/tree_algorithms.hpp>
+#include <boost/intrusive/bstree_algorithms.hpp>
#include <boost/intrusive/pointer_traits.hpp>
namespace boost {
namespace intrusive {
+/// @cond
+
+template<class NodeTraits, class F>
+struct avltree_node_cloner
+ : private detail::ebo_functor_holder<F>
+{
+ typedef typename NodeTraits::node_ptr node_ptr;
+ typedef detail::ebo_functor_holder<F> base_t;
+
+ avltree_node_cloner(F f)
+ : base_t(f)
+ {}
+
+ node_ptr operator()(const node_ptr & p)
+ {
+ node_ptr n = base_t::get()(p);
+ NodeTraits::set_balance(n, NodeTraits::get_balance(p));
+ return n;
+ }
+};
+
+/// @endcond
+
//! avltree_algorithms is configured with a NodeTraits class, which encapsulates the
//! information about the node to be manipulated. NodeTraits must support the
//! following interface:
//!
//! <b>Typedefs</b>:
//!
-//! <tt>node</tt>: The type of the node that forms the circular list
+//! <tt>node</tt>: The type of the node that forms the binary search tree
//!
//! <tt>node_ptr</tt>: A pointer to a node
//!
@@ -67,6 +90,9 @@ namespace intrusive {
//! <tt>static balance positive();</tt>
template<class NodeTraits>
class avltree_algorithms
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_algorithms<NodeTraits>
+ #endif
{
public:
typedef typename NodeTraits::node node;
@@ -77,161 +103,69 @@ class avltree_algorithms
/// @cond
private:
- typedef detail::tree_algorithms<NodeTraits> tree_algorithms;
-
- template<class F>
- struct avltree_node_cloner
- : private detail::ebo_functor_holder<F>
- {
- typedef detail::ebo_functor_holder<F> base_t;
-
- avltree_node_cloner(F f)
- : base_t(f)
- {}
+ typedef bstree_algorithms<NodeTraits> bstree_algo;
- node_ptr operator()(const node_ptr &p)
- {
- node_ptr n = base_t::get()(p);
- NodeTraits::set_balance(n, NodeTraits::get_balance(p));
- return n;
- }
- };
-
- struct avltree_erase_fixup
- {
- void operator()(const node_ptr &to_erase, const node_ptr &successor)
- { NodeTraits::set_balance(successor, NodeTraits::get_balance(to_erase)); }
- };
-
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
/// @endcond
public:
- static node_ptr begin_node(const const_node_ptr & header)
- { return tree_algorithms::begin_node(header); }
-
- static node_ptr end_node(const const_node_ptr & header)
- { return tree_algorithms::end_node(header); }
-
//! This type is the information that will be
//! filled by insert_unique_check
- typedef typename tree_algorithms::insert_commit_data insert_commit_data;
+ typedef typename bstree_algo::insert_commit_data insert_commit_data;
- //! <b>Requires</b>: header1 and header2 must be the header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two trees. After the function header1 will contain
- //! links to the second tree and header2 will have links to the first tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static void swap_tree(const node_ptr & header1, const node_ptr & header2)
- { return tree_algorithms::swap_tree(header1, header2); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
+ //! @copydoc ::boost::intrusive::bstree_algorithms::get_header(const const_node_ptr&)
+ static node_ptr get_header(const const_node_ptr & n);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::begin_node
+ static node_ptr begin_node(const const_node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::end_node
+ static node_ptr end_node(const const_node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_tree
+ static void swap_tree(const node_ptr & header1, const node_ptr & header2);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&)
static void swap_nodes(const node_ptr & node1, const node_ptr & node2)
{
if(node1 == node2)
return;
- node_ptr header1(tree_algorithms::get_header(node1)), header2(tree_algorithms::get_header(node2));
+ node_ptr header1(bstree_algo::get_header(node1)), header2(bstree_algo::get_header(node2));
swap_nodes(node1, header1, node2, header2);
}
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees with header header1 and header2.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&,const node_ptr&,const node_ptr&)
static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2)
{
if(node1 == node2) return;
- tree_algorithms::swap_nodes(node1, header1, node2, header2);
+ bstree_algo::swap_nodes(node1, header1, node2, header2);
//Swap balance
balance c = NodeTraits::get_balance(node1);
NodeTraits::set_balance(node1, NodeTraits::get_balance(node2));
NodeTraits::set_balance(node2, c);
}
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing and comparison is needed.
- //!
- //!Experimental function
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&)
static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node)
{
if(node_to_be_replaced == new_node)
return;
- replace_node(node_to_be_replaced, tree_algorithms::get_header(node_to_be_replaced), new_node);
+ replace_node(node_to_be_replaced, bstree_algo::get_header(node_to_be_replaced), new_node);
}
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! with header "header" and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- //!
- //!Experimental function
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&,const node_ptr&)
static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node)
{
- tree_algorithms::replace_node(node_to_be_replaced, header, new_node);
+ bstree_algo::replace_node(node_to_be_replaced, header, new_node);
NodeTraits::set_balance(new_node, NodeTraits::get_balance(node_to_be_replaced));
}
- //! <b>Requires</b>: node is a tree node but not the header.
- //!
- //! <b>Effects</b>: Unlinks the node and rebalances the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unlink(const node_ptr&)
static void unlink(const node_ptr & node)
{
node_ptr x = NodeTraits::get_parent(node);
@@ -242,84 +176,25 @@ class avltree_algorithms
}
}
- //! <b>Requires</b>: header is the header of a tree.
- //!
- //! <b>Effects</b>: Unlinks the leftmost node from the tree, and
- //! updates the header link to the new leftmost node.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header)
- { return tree_algorithms::unlink_leftmost_without_rebalance(header); }
-
- //! <b>Requires</b>: node is a node of the tree or an node initialized
- //! by init(...).
- //!
- //! <b>Effects</b>: Returns true if the node is initialized by init().
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static bool unique(const const_node_ptr & node)
- { return tree_algorithms::unique(node); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unlink_leftmost_without_rebalance
+ static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header);
- //! <b>Requires</b>: node is a node of the tree but it's not the header.
- //!
- //! <b>Effects</b>: Returns the number of nodes of the subtree.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t count(const const_node_ptr & node)
- { return tree_algorithms::count(node); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unique(const const_node_ptr&)
+ static bool unique(const const_node_ptr & node);
- //! <b>Requires</b>: header is the header node of the tree.
- //!
- //! <b>Effects</b>: Returns the number of nodes above the header.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t size(const const_node_ptr & header)
- { return tree_algorithms::size(header); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::size(const const_node_ptr&)
+ static std::size_t size(const const_node_ptr & header);
- //! <b>Requires</b>: p is a node from the tree except the header.
- //!
- //! <b>Effects</b>: Returns the next node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr next_node(const node_ptr & p)
- { return tree_algorithms::next_node(p); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::next_node(const node_ptr&)
+ static node_ptr next_node(const node_ptr & node);
- //! <b>Requires</b>: p is a node from the tree except the leftmost node.
- //!
- //! <b>Effects</b>: Returns the previous node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr prev_node(const node_ptr & p)
- { return tree_algorithms::prev_node(p); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::prev_node(const node_ptr&)
+ static node_ptr prev_node(const node_ptr & node);
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: After the function unique(node) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init(const node_ptr & node)
- { tree_algorithms::init(node); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::init(const node_ptr&)
+ static void init(const node_ptr & node);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Requires</b>: node must not be part of any tree.
//!
@@ -333,451 +208,236 @@ class avltree_algorithms
//! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
static void init_header(const node_ptr & header)
{
- tree_algorithms::init_header(header);
+ bstree_algo::init_header(header);
NodeTraits::set_balance(header, NodeTraits::zero());
}
- //! <b>Requires</b>: header must be the header of a tree, z a node
- //! of that tree and z != header.
- //!
- //! <b>Effects</b>: Erases node "z" from the tree with header "header".
- //!
- //! <b>Complexity</b>: Amortized constant time.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::erase(const node_ptr&,const node_ptr&)
static node_ptr erase(const node_ptr & header, const node_ptr & z)
{
- typename tree_algorithms::data_for_rebalance info;
- tree_algorithms::erase(header, z, avltree_erase_fixup(), info);
- node_ptr x = info.x;
- node_ptr x_parent = info.x_parent;
-
+ typename bstree_algo::data_for_rebalance info;
+ bstree_algo::erase(header, z, info);
+ if(info.y != z){
+ NodeTraits::set_balance(info.y, NodeTraits::get_balance(z));
+ }
//Rebalance avltree
- rebalance_after_erasure(header, x, x_parent);
+ rebalance_after_erasure(header, info.x, info.x_parent);
return z;
}
- //! <b>Requires</b>: "cloner" must be a function
- //! object taking a node_ptr and returning a new cloned node of it. "disposer" must
- //! take a node_ptr and shouldn't throw.
- //!
- //! <b>Effects</b>: First empties target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! Then, duplicates the entire tree pointed by "source_header" cloning each
- //! source node with <tt>node_ptr Cloner::operator()(const node_ptr &)</tt> to obtain
- //! the nodes of the target tree. If "cloner" throws, the cloned target nodes
- //! are disposed using <tt>void disposer(const node_ptr &)</tt>.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clone(const const_node_ptr&,const node_ptr&,Cloner,Disposer)
template <class Cloner, class Disposer>
static void clone
(const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer)
{
- avltree_node_cloner<Cloner> new_cloner(cloner);
- tree_algorithms::clone(source_header, target_header, new_cloner, disposer);
+ avltree_node_cloner<NodeTraits, Cloner> new_cloner(cloner);
+ bstree_algo::clone(source_header, target_header, new_cloner, disposer);
}
- //! <b>Requires</b>: "disposer" must be an object function
- //! taking a node_ptr parameter and shouldn't throw.
- //!
- //! <b>Effects</b>: Empties the target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clear_and_dispose(const node_ptr&,Disposer)
template<class Disposer>
- static void clear_and_dispose(const node_ptr & header, Disposer disposer)
- { tree_algorithms::clear_and_dispose(header, disposer); }
+ static void clear_and_dispose(const node_ptr & header, Disposer disposer);
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is
- //! not less than "key" according to "comp" or "header" if that element does
- //! not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::lower_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr lower_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::lower_bound(header, key, comp); }
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is greater
- //! than "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::upper_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr upper_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::upper_bound(header, key, comp); }
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the element that is equivalent to
- //! "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::find(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr find
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::find(header, key, comp); }
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an a pair of node_ptr delimiting a range containing
- //! all elements that are equivalent to "key" according to "comp" or an
- //! empty range that indicates the position where those elements would be
- //! if they there are no equivalent elements.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::equal_range(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> equal_range
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::equal_range(header, key, comp); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
- //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::bounded_range(const const_node_ptr&,const KeyType&,const KeyType&,KeyNodePtrCompare,bool,bool)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> bounded_range
(const const_node_ptr & header, const KeyType &lower_key, const KeyType &upper_key, KeyNodePtrCompare comp
- , bool left_closed, bool right_closed)
- { return tree_algorithms::bounded_range(header, lower_key, upper_key, comp, left_closed, right_closed); }
+ , bool left_closed, bool right_closed);
- //! <b>Requires</b>: "h" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before the upper bound
- //! according to "comp".
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::count(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::size_t count(const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal_upper_bound(const node_ptr&,const node_ptr&,NodePtrCompare)
template<class NodePtrCompare>
static node_ptr insert_equal_upper_bound
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp)
{
- tree_algorithms::insert_equal_upper_bound(h, new_node, comp);
+ bstree_algo::insert_equal_upper_bound(h, new_node, comp);
rebalance_after_insertion(h, new_node);
return new_node;
}
- //! <b>Requires</b>: "h" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before the lower bound
- //! according to "comp".
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal_lower_bound(const node_ptr&,const node_ptr&,NodePtrCompare)
template<class NodePtrCompare>
static node_ptr insert_equal_lower_bound
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp)
{
- tree_algorithms::insert_equal_lower_bound(h, new_node, comp);
+ bstree_algo::insert_equal_lower_bound(h, new_node, comp);
rebalance_after_insertion(h, new_node);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs. "hint" is node from
- //! the "header"'s tree.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree, using "hint" as a hint to
- //! where it will be inserted. If "hint" is the upper_bound
- //! the insertion takes constant time (two comparisons in the worst case).
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if new_node is inserted immediately before "hint".
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal(const node_ptr&,const node_ptr&,const node_ptr&,NodePtrCompare)
template<class NodePtrCompare>
static node_ptr insert_equal
(const node_ptr & header, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp)
{
- tree_algorithms::insert_equal(header, hint, new_node, comp);
+ bstree_algo::insert_equal(header, hint, new_node, comp);
rebalance_after_insertion(header, new_node);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "pos" must be a valid iterator or header (end) node.
- //! "pos" must be an iterator pointing to the successor to "new_node"
- //! once inserted according to the order of already inserted nodes. This function does not
- //! check "pos" and this precondition must be guaranteed by the caller.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "pos" is not the successor of the newly inserted "new_node"
- //! tree invariants might be broken.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_before(const node_ptr&,const node_ptr&,const node_ptr&)
static node_ptr insert_before
(const node_ptr & header, const node_ptr & pos, const node_ptr & new_node)
{
- tree_algorithms::insert_before(header, pos, new_node);
+ bstree_algo::insert_before(header, pos, new_node);
rebalance_after_insertion(header, new_node);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "new_node" must be, according to the used ordering no less than the
- //! greatest inserted key.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "new_node" is less than the greatest inserted key
- //! tree invariants are broken. This function is slightly faster than
- //! using "insert_before".
+ //! @copydoc ::boost::intrusive::bstree_algorithms::push_back(const node_ptr&,const node_ptr&)
static void push_back(const node_ptr & header, const node_ptr & new_node)
{
- tree_algorithms::push_back(header, new_node);
+ bstree_algo::push_back(header, new_node);
rebalance_after_insertion(header, new_node);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "new_node" must be, according to the used ordering, no greater than the
- //! lowest inserted key.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "new_node" is greater than the lowest inserted key
- //! tree invariants are broken. This function is slightly faster than
- //! using "insert_before".
+ //! @copydoc ::boost::intrusive::bstree_algorithms::push_front(const node_ptr&,const node_ptr&)
static void push_front(const node_ptr & header, const node_ptr & new_node)
{
- tree_algorithms::push_front(header, new_node);
+ bstree_algo::push_front(header, new_node);
rebalance_after_insertion(header, new_node);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares KeyType with a node_ptr.
- //!
- //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
- //! tree according to "comp" and obtains the needed information to realize
- //! a constant-time node insertion if there is no equivalent node.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing a node_ptr to the already present node
- //! and false. If there is not equivalent key can be inserted returns true
- //! in the returned pair's boolean and fills "commit_data" that is meant to
- //! be used with the "insert_commit" function to achieve a constant-time
- //! insertion function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a node is expensive and the user does not want to have two equivalent nodes
- //! in the tree: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the node and this function offers the possibility to use that part
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the node and use
- //! "insert_commit" to insert the node in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
- //! if no more objects are inserted or erased from the set.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_check(const const_node_ptr&,const KeyType&,KeyNodePtrCompare,insert_commit_data&)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, bool> insert_unique_check
(const const_node_ptr & header, const KeyType &key
- ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
- { return tree_algorithms::insert_unique_check(header, key, comp, commit_data); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares KeyType with a node_ptr.
- //! "hint" is node from the "header"'s tree.
- //!
- //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
- //! tree according to "comp" using "hint" as a hint to where it should be
- //! inserted and obtains the needed information to realize
- //! a constant-time node insertion if there is no equivalent node.
- //! If "hint" is the upper_bound the function has constant time
- //! complexity (two comparisons in the worst case).
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing a node_ptr to the already present node
- //! and false. If there is not equivalent key can be inserted returns true
- //! in the returned pair's boolean and fills "commit_data" that is meant to
- //! be used with the "insert_commit" function to achieve a constant-time
- //! insertion function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic, but it is
- //! amortized constant time if new_node should be inserted immediately before "hint".
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a node is expensive and the user does not want to have two equivalent nodes
- //! in the tree: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the node and this function offers the possibility to use that part
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the node and use
- //! "insert_commit" to insert the node in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
- //! if no more objects are inserted or erased from the set.
+ ,KeyNodePtrCompare comp, insert_commit_data &commit_data);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_check(const const_node_ptr&,const node_ptr&,const KeyType&,KeyNodePtrCompare,insert_commit_data&)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, bool> insert_unique_check
(const const_node_ptr & header, const node_ptr &hint, const KeyType &key
- ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
- { return tree_algorithms::insert_unique_check(header, hint, key, comp, commit_data); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "commit_data" must have been obtained from a previous call to
- //! "insert_unique_check". No objects should have been inserted or erased
- //! from the set between the "insert_unique_check" that filled "commit_data"
- //! and the call to "insert_commit".
- //!
- //!
- //! <b>Effects</b>: Inserts new_node in the set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_unique_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
+ ,KeyNodePtrCompare comp, insert_commit_data &commit_data);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_commit(const node_ptr&,const node_ptr&,const insert_commit_data &)
static void insert_unique_commit
(const node_ptr & header, const node_ptr & new_value, const insert_commit_data &commit_data)
{
- tree_algorithms::insert_unique_commit(header, new_value, commit_data);
+ bstree_algo::insert_unique_commit(header, new_value, commit_data);
rebalance_after_insertion(header, new_value);
}
- //! <b>Requires</b>: "n" must be a node inserted in a tree.
- //!
- //! <b>Effects</b>: Returns a pointer to the header node of the tree.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr get_header(const node_ptr & n)
- { return tree_algorithms::get_header(n); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::is_header
+ static bool is_header(const const_node_ptr & p)
+ { return NodeTraits::get_balance(p) == NodeTraits::zero() && bstree_algo::is_header(p); }
+
/// @cond
+ static bool verify(const node_ptr &header)
+ {
+ std::size_t height;
+ std::size_t count;
+ return verify_recursion(NodeTraits::get_parent(header), count, height);
+ }
+
private:
- //! <b>Requires</b>: p is a node of a tree.
- //!
- //! <b>Effects</b>: Returns true if p is the header of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static bool is_header(const const_node_ptr & p)
- { return NodeTraits::get_balance(p) == NodeTraits::zero() && tree_algorithms::is_header(p); }
+ static bool verify_recursion(node_ptr n, std::size_t &count, std::size_t &height)
+ {
+ if (!n){
+ count = 0;
+ height = 0;
+ return true;
+ }
+ std::size_t leftcount, rightcount;
+ std::size_t leftheight, rightheight;
+ if(!verify_recursion(NodeTraits::get_left (n), leftcount, leftheight) ||
+ !verify_recursion(NodeTraits::get_right(n), rightcount, rightheight) ){
+ return false;
+ }
+ count = 1u + leftcount + rightcount;
+ height = 1u + (leftheight > rightheight ? leftheight : rightheight);
+
+ //If equal height, balance must be zero
+ if(rightheight == leftheight){
+ if(NodeTraits::get_balance(n) != NodeTraits::zero()){
+ BOOST_ASSERT(0);
+ return false;
+ }
+ }
+ //If right is taller than left, then the difference must be at least 1 and the balance positive
+ else if(rightheight > leftheight){
+ if(rightheight - leftheight > 1 ){
+ BOOST_ASSERT(0);
+ return false;
+ }
+ else if(NodeTraits::get_balance(n) != NodeTraits::positive()){
+ BOOST_ASSERT(0);
+ return false;
+ }
+ }
+ //If left is taller than right, then the difference must be at least 1 and the balance negative
+ else{
+ if(leftheight - rightheight > 1 ){
+ BOOST_ASSERT(0);
+ return false;
+ }
+ else if(NodeTraits::get_balance(n) != NodeTraits::negative()){
+ BOOST_ASSERT(0);
+ return false;
+ }
+ }
+ return true;
+ }
- 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);
for (node_ptr root = NodeTraits::get_parent(header); x != root; root = NodeTraits::get_parent(header)) {
const balance x_parent_balance = NodeTraits::get_balance(x_parent);
+ //Don't cache x_is_leftchild or similar because x can be null and
+ //equal to both x_parent_left and x_parent_right
+ const node_ptr x_parent_left (NodeTraits::get_left(x_parent));
+ const node_ptr x_parent_right(NodeTraits::get_right(x_parent));
+
if(x_parent_balance == NodeTraits::zero()){
- NodeTraits::set_balance(x_parent,
- (x == NodeTraits::get_right(x_parent) ? NodeTraits::negative() : NodeTraits::positive()));
+ NodeTraits::set_balance( x_parent, x == x_parent_right ? NodeTraits::negative() : NodeTraits::positive() );
break; // the height didn't change, let's stop here
}
else if(x_parent_balance == NodeTraits::negative()){
- if (x == NodeTraits::get_left(x_parent)) {
+ if (x == x_parent_left) { ////x is left child or x and sibling are null
NodeTraits::set_balance(x_parent, NodeTraits::zero()); // balanced
x = x_parent;
- x_parent = NodeTraits::get_parent(x_parent);
}
else {
- // x is right child
- // a is left child
- node_ptr a = NodeTraits::get_left(x_parent);
- BOOST_INTRUSIVE_INVARIANT_ASSERT(a);
- if (NodeTraits::get_balance(a) == NodeTraits::positive()) {
- // a MUST have a right child
- BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_right(a));
- rotate_left_right(x_parent, header);
- x = NodeTraits::get_parent(x_parent);
- x_parent = NodeTraits::get_parent(x);
+ // x is right child (x_parent_left is the left child)
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(x_parent_left);
+ if (NodeTraits::get_balance(x_parent_left) == NodeTraits::positive()) {
+ // x_parent_left MUST have a right child
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_right(x_parent_left));
+ x = avl_rotate_left_right(x_parent, x_parent_left, header);
}
else {
- rotate_right(x_parent, header);
- x = NodeTraits::get_parent(x_parent);
- x_parent = NodeTraits::get_parent(x);
+ avl_rotate_right(x_parent, x_parent_left, header);
+ x = x_parent_left;
}
// if changed from negative to NodeTraits::positive(), no need to check above
@@ -787,28 +447,22 @@ class avltree_algorithms
}
}
else if(x_parent_balance == NodeTraits::positive()){
- if (x == NodeTraits::get_right(x_parent)) {
+ if (x == x_parent_right) { //x is right child or x and sibling are null
NodeTraits::set_balance(x_parent, NodeTraits::zero()); // balanced
x = x_parent;
- x_parent = NodeTraits::get_parent(x_parent);
}
else {
- // x is left child
- // a is right child
- node_ptr a = NodeTraits::get_right(x_parent);
- BOOST_INTRUSIVE_INVARIANT_ASSERT(a);
- if (NodeTraits::get_balance(a) == NodeTraits::negative()) {
- // a MUST have then a left child
- BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_left(a));
- rotate_right_left(x_parent, header);
-
- x = NodeTraits::get_parent(x_parent);
- x_parent = NodeTraits::get_parent(x);
+ // x is left child (x_parent_right is the right child)
+ const node_ptr x_parent_right(NodeTraits::get_right(x_parent));
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(x_parent_right);
+ if (NodeTraits::get_balance(x_parent_right) == NodeTraits::negative()) {
+ // x_parent_right MUST have then a left child
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_left(x_parent_right));
+ x = avl_rotate_right_left(x_parent, x_parent_right, header);
}
else {
- rotate_left(x_parent, header);
- x = NodeTraits::get_parent(x_parent);
- x_parent = NodeTraits::get_parent(x);
+ avl_rotate_left(x_parent, x_parent_right, header);
+ x = x_parent_right;
}
// if changed from NodeTraits::positive() to negative, no need to check above
if (NodeTraits::get_balance(x) == NodeTraits::negative()){
@@ -819,47 +473,47 @@ class avltree_algorithms
else{
BOOST_INTRUSIVE_INVARIANT_ASSERT(false); // never reached
}
+ x_parent = NodeTraits::get_parent(x);
}
}
- static void rebalance_after_insertion(const node_ptr & header, const node_ptr & xnode)
+ static void rebalance_after_insertion(const node_ptr & header, node_ptr x)
{
- node_ptr x(xnode);
NodeTraits::set_balance(x, NodeTraits::zero());
// Rebalance.
for(node_ptr root = NodeTraits::get_parent(header); x != root; root = NodeTraits::get_parent(header)){
- const balance x_parent_balance = NodeTraits::get_balance(NodeTraits::get_parent(x));
-
+ node_ptr const x_parent(NodeTraits::get_parent(x));
+ node_ptr const x_parent_left(NodeTraits::get_left(x_parent));
+ const balance x_parent_balance = NodeTraits::get_balance(x_parent);
+ const bool x_is_leftchild(x == x_parent_left);
if(x_parent_balance == NodeTraits::zero()){
// if x is left, parent will have parent->bal_factor = negative
// else, parent->bal_factor = NodeTraits::positive()
- NodeTraits::set_balance( NodeTraits::get_parent(x)
- , x == NodeTraits::get_left(NodeTraits::get_parent(x))
- ? NodeTraits::negative() : NodeTraits::positive() );
- x = NodeTraits::get_parent(x);
+ NodeTraits::set_balance( x_parent, x_is_leftchild ? NodeTraits::negative() : NodeTraits::positive() );
+ x = x_parent;
}
else if(x_parent_balance == NodeTraits::positive()){
// if x is a left child, parent->bal_factor = zero
- if (x == NodeTraits::get_left(NodeTraits::get_parent(x)))
- NodeTraits::set_balance(NodeTraits::get_parent(x), NodeTraits::zero());
+ if (x_is_leftchild)
+ NodeTraits::set_balance(x_parent, NodeTraits::zero());
else{ // x is a right child, needs rebalancing
if (NodeTraits::get_balance(x) == NodeTraits::negative())
- rotate_right_left(NodeTraits::get_parent(x), header);
+ avl_rotate_right_left(x_parent, x, header);
else
- rotate_left(NodeTraits::get_parent(x), header);
+ avl_rotate_left(x_parent, x, header);
}
break;
}
else if(x_parent_balance == NodeTraits::negative()){
// if x is a left child, needs rebalancing
- if (x == NodeTraits::get_left(NodeTraits::get_parent(x))) {
+ if (x_is_leftchild) {
if (NodeTraits::get_balance(x) == NodeTraits::positive())
- rotate_left_right(NodeTraits::get_parent(x), header);
+ avl_rotate_left_right(x_parent, x, header);
else
- rotate_right(NodeTraits::get_parent(x), header);
+ avl_rotate_right(x_parent, x, header);
}
else
- NodeTraits::set_balance(NodeTraits::get_parent(x), NodeTraits::zero());
+ NodeTraits::set_balance(x_parent, NodeTraits::zero());
break;
}
else{
@@ -873,26 +527,28 @@ class avltree_algorithms
// balancing...
const balance c_balance = NodeTraits::get_balance(c);
const balance zero_balance = NodeTraits::zero();
+ const balance posi_balance = NodeTraits::positive();
+ const balance nega_balance = NodeTraits::negative();
NodeTraits::set_balance(c, zero_balance);
- if(c_balance == NodeTraits::negative()){
- NodeTraits::set_balance(a, NodeTraits::positive());
+ if(c_balance == nega_balance){
+ NodeTraits::set_balance(a, posi_balance);
NodeTraits::set_balance(b, zero_balance);
}
else if(c_balance == zero_balance){
NodeTraits::set_balance(a, zero_balance);
NodeTraits::set_balance(b, zero_balance);
}
- else if(c_balance == NodeTraits::positive()){
+ else if(c_balance == posi_balance){
NodeTraits::set_balance(a, zero_balance);
- NodeTraits::set_balance(b, NodeTraits::negative());
+ NodeTraits::set_balance(b, nega_balance);
}
else{
BOOST_INTRUSIVE_INVARIANT_ASSERT(false); // never reached
}
}
- static void rotate_left_right(const node_ptr a, const node_ptr & hdr)
- {
+ static node_ptr avl_rotate_left_right(const node_ptr a, const node_ptr a_oldleft, const node_ptr & hdr)
+ { // [note: 'a_oldleft' is 'b']
// | | //
// a(-2) c //
// / \ / \ //
@@ -900,16 +556,19 @@ class avltree_algorithms
// (pos)b [g] b a //
// / \ / \ / \ //
// [d] c [d] e f [g] //
- // / \ //
- // e f //
- node_ptr b = NodeTraits::get_left(a), c = NodeTraits::get_right(b);
- tree_algorithms::rotate_left(b, hdr);
- tree_algorithms::rotate_right(a, hdr);
- left_right_balancing(a, b, c);
+ // / \ //
+ // e f //
+ const node_ptr c = NodeTraits::get_right(a_oldleft);
+ bstree_algo::rotate_left_no_parent_fix(a_oldleft, c);
+ //No need to link c with a [NodeTraits::set_parent(c, a) + NodeTraits::set_left(a, c)]
+ //as c is not root and another rotation is coming
+ bstree_algo::rotate_right(a, c, NodeTraits::get_parent(a), hdr);
+ left_right_balancing(a, a_oldleft, c);
+ return c;
}
- static void rotate_right_left(const node_ptr a, const node_ptr & hdr)
- {
+ static node_ptr avl_rotate_right_left(const node_ptr a, const node_ptr a_oldright, const node_ptr & hdr)
+ { // [note: 'a_oldright' is 'b']
// | | //
// a(pos) c //
// / \ / \ //
@@ -919,47 +578,58 @@ class avltree_algorithms
// c [g] [d] e f [g] //
// / \ //
// e f //
- node_ptr b = NodeTraits::get_right(a), c = NodeTraits::get_left(b);
- tree_algorithms::rotate_right(b, hdr);
- tree_algorithms::rotate_left(a, hdr);
- left_right_balancing(b, a, c);
+ const node_ptr c (NodeTraits::get_left(a_oldright));
+ bstree_algo::rotate_right_no_parent_fix(a_oldright, c);
+ //No need to link c with a [NodeTraits::set_parent(c, a) + NodeTraits::set_right(a, c)]
+ //as c is not root and another rotation is coming.
+ bstree_algo::rotate_left(a, c, NodeTraits::get_parent(a), hdr);
+ left_right_balancing(a_oldright, a, c);
+ return c;
}
- static void rotate_left(const node_ptr x, const node_ptr & hdr)
+ static void avl_rotate_left(const node_ptr &x, const node_ptr &x_oldright, const node_ptr & hdr)
{
- const node_ptr y = NodeTraits::get_right(x);
- tree_algorithms::rotate_left(x, hdr);
+ bstree_algo::rotate_left(x, x_oldright, NodeTraits::get_parent(x), hdr);
// reset the balancing factor
- if (NodeTraits::get_balance(y) == NodeTraits::positive()) {
+ if (NodeTraits::get_balance(x_oldright) == NodeTraits::positive()) {
NodeTraits::set_balance(x, NodeTraits::zero());
- NodeTraits::set_balance(y, NodeTraits::zero());
+ NodeTraits::set_balance(x_oldright, NodeTraits::zero());
}
else { // this doesn't happen during insertions
NodeTraits::set_balance(x, NodeTraits::positive());
- NodeTraits::set_balance(y, NodeTraits::negative());
+ NodeTraits::set_balance(x_oldright, NodeTraits::negative());
}
}
- static void rotate_right(const node_ptr x, const node_ptr & hdr)
+ static void avl_rotate_right(const node_ptr &x, const node_ptr &x_oldleft, const node_ptr & hdr)
{
- const node_ptr y = NodeTraits::get_left(x);
- tree_algorithms::rotate_right(x, hdr);
+ bstree_algo::rotate_right(x, x_oldleft, NodeTraits::get_parent(x), hdr);
// reset the balancing factor
- if (NodeTraits::get_balance(y) == NodeTraits::negative()) {
+ if (NodeTraits::get_balance(x_oldleft) == NodeTraits::negative()) {
NodeTraits::set_balance(x, NodeTraits::zero());
- NodeTraits::set_balance(y, NodeTraits::zero());
+ NodeTraits::set_balance(x_oldleft, NodeTraits::zero());
}
else { // this doesn't happen during insertions
NodeTraits::set_balance(x, NodeTraits::negative());
- NodeTraits::set_balance(y, NodeTraits::positive());
+ NodeTraits::set_balance(x_oldleft, NodeTraits::positive());
}
}
/// @endcond
};
+/// @cond
+
+template<class NodeTraits>
+struct get_algo<AvlTreeAlgorithms, NodeTraits>
+{
+ typedef avltree_algorithms<NodeTraits> type;
+};
+
+/// @endcond
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/bs_set.hpp b/3party/boost/boost/intrusive/bs_set.hpp
new file mode 100644
index 0000000000..f000f0e5ce
--- /dev/null
+++ b/3party/boost/boost/intrusive/bs_set.hpp
@@ -0,0 +1,944 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2013-2013
+//
+// 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/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_INTRUSIVE_BS_SET_HPP
+#define BOOST_INTRUSIVE_BS_SET_HPP
+
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
+#include <boost/intrusive/detail/mpl.hpp>
+#include <boost/intrusive/bstree.hpp>
+#include <iterator>
+#include <boost/move/move.hpp>
+
+namespace boost {
+namespace intrusive {
+
+//! The class template bs_set is an intrusive container, that mimics most of
+//! the interface of std::set as described in the C++ standard.
+//!
+//! The template parameter \c T is the type to be managed by the container.
+//! The user can specify additional options and if no options are provided
+//! default options are used.
+//!
+//! The container supports the following options:
+//! \c base_hook<>/member_hook<>/value_traits<>,
+//! \c constant_time_size<>, \c size_type<> and
+//! \c compare<>.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
+#endif
+class bs_set_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms, HeaderHolder>
+#endif
+{
+ /// @cond
+ typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms, HeaderHolder> tree_type;
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_set_impl)
+
+ typedef tree_type implementation_defined;
+ /// @endcond
+
+ public:
+ typedef typename implementation_defined::value_type value_type;
+ typedef typename implementation_defined::value_traits value_traits;
+ typedef typename implementation_defined::pointer pointer;
+ typedef typename implementation_defined::const_pointer const_pointer;
+ typedef typename implementation_defined::reference reference;
+ typedef typename implementation_defined::const_reference const_reference;
+ typedef typename implementation_defined::difference_type difference_type;
+ typedef typename implementation_defined::size_type size_type;
+ typedef typename implementation_defined::value_compare value_compare;
+ typedef typename implementation_defined::key_compare key_compare;
+ typedef typename implementation_defined::iterator iterator;
+ typedef typename implementation_defined::const_iterator const_iterator;
+ typedef typename implementation_defined::reverse_iterator reverse_iterator;
+ typedef typename implementation_defined::const_reverse_iterator const_reverse_iterator;
+ typedef typename implementation_defined::insert_commit_data insert_commit_data;
+ typedef typename implementation_defined::node_traits node_traits;
+ typedef typename implementation_defined::node node;
+ typedef typename implementation_defined::node_ptr node_ptr;
+ typedef typename implementation_defined::const_node_ptr const_node_ptr;
+ typedef typename implementation_defined::node_algorithms node_algorithms;
+
+ static const bool constant_time_size = tree_type::constant_time_size;
+
+ public:
+ //! @copydoc ::boost::intrusive::bstree::bstree(const value_compare &,const value_traits &)
+ explicit bs_set_impl( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
+ {}
+
+ //! @copydoc ::boost::intrusive::bstree::bstree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
+ template<class Iterator>
+ bs_set_impl( Iterator b, Iterator e
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(true, b, e, cmp, v_traits)
+ {}
+
+ //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&)
+ bs_set_impl(BOOST_RV_REF(bs_set_impl) x)
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
+ {}
+
+ //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&)
+ bs_set_impl& operator=(BOOST_RV_REF(bs_set_impl) x)
+ { return static_cast<bs_set_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::~bstree()
+ ~bs_set_impl();
+
+ //! @copydoc ::boost::intrusive::bstree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::bstree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::bstree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::bstree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::bstree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::bstree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::bstree::rbegin()
+ reverse_iterator rbegin();
+
+ //! @copydoc ::boost::intrusive::bstree::rbegin()const
+ const_reverse_iterator rbegin() const;
+
+ //! @copydoc ::boost::intrusive::bstree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::bstree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::bstree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::bstree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(iterator)
+ static bs_set_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(const_iterator)
+ static const bs_set_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(iterator)
+ static bs_set_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(const_iterator)
+ static const bs_set_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::bstree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::bstree::size()const
+ size_type size() const;
+
+ //! @copydoc ::boost::intrusive::bstree::swap
+ void swap(bs_set_impl& other);
+
+ //! @copydoc ::boost::intrusive::bstree::clone_from
+ template <class Cloner, class Disposer>
+ void clone_from(const bs_set_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(reference)
+ std::pair<iterator, bool> insert(reference value)
+ { return tree_type::insert_unique(value); }
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(const_iterator,reference)
+ iterator insert(const_iterator hint, reference value)
+ { return tree_type::insert_unique(hint, value); }
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&)
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator, bool> insert_check
+ (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
+ { return tree_type::insert_unique_check(key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&)
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator, bool> insert_check
+ (const_iterator hint, const KeyType &key
+ ,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
+ { return tree_type::insert_unique_check(hint, key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(Iterator,Iterator)
+ template<class Iterator>
+ void insert(Iterator b, Iterator e)
+ { tree_type::insert_unique(b, e); }
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_commit
+ iterator insert_commit(reference value, const insert_commit_data &commit_data)
+ { return tree_type::insert_unique_commit(value, commit_data); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ size_type erase(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,Disposer)
+ template<class Disposer>
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,const_iterator,Disposer)
+ template<class Disposer>
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_reference, Disposer)
+ template<class Disposer>
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
+ template<class KeyType, class KeyValueCompare, class Disposer>
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::bstree::clear_and_dispose
+ template<class Disposer>
+ void clear_and_dispose(Disposer disposer);
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree::count(const_reference)const
+ size_type count(const_reference value) const
+ { return static_cast<size_type>(this->tree_type::find(value) == this->tree_type::cend()); }
+
+ //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ size_type count(const KeyType& key, KeyValueCompare comp) const
+ { return static_cast<size_type>(this->tree_type::find(key, comp) == this->tree_type::cend()); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value)
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const
+ std::pair<const_iterator, const_iterator>
+ equal_range(const_reference value) const
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const KeyType& key, KeyValueCompare comp) const
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)
+ std::pair<iterator,iterator> bounded_range
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator,iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)const
+ std::pair<const_iterator, const_iterator>
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::bstree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::bstree::remove_node
+ void remove_node(reference value);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+};
+
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+template<class T, class ...Options>
+bool operator!= (const bs_set_impl<T, Options...> &x, const bs_set_impl<T, Options...> &y);
+
+template<class T, class ...Options>
+bool operator>(const bs_set_impl<T, Options...> &x, const bs_set_impl<T, Options...> &y);
+
+template<class T, class ...Options>
+bool operator<=(const bs_set_impl<T, Options...> &x, const bs_set_impl<T, Options...> &y);
+
+template<class T, class ...Options>
+bool operator>=(const bs_set_impl<T, Options...> &x, const bs_set_impl<T, Options...> &y);
+
+template<class T, class ...Options>
+void swap(bs_set_impl<T, Options...> &x, bs_set_impl<T, Options...> &y);
+
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+//! Helper metafunction to define a \c bs_set that yields to the same type when the
+//! same options (either explicitly or implicitly) are used.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+template<class T, class ...Options>
+#else
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
+#endif
+struct make_bs_set
+{
+ /// @cond
+ typedef typename pack_options
+ < bstree_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
+ typedef bs_set_impl
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
+ /// @endcond
+ typedef implementation_defined type;
+};
+
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+template<class T, class O1, class O2, class O3, class O4, class O5>
+#else
+template<class T, class ...Options>
+#endif
+class bs_set
+ : public make_bs_set<T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type
+{
+ typedef typename make_bs_set
+ <T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type Base;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_set)
+ public:
+ typedef typename Base::value_compare value_compare;
+ typedef typename Base::value_traits value_traits;
+ typedef typename Base::iterator iterator;
+ typedef typename Base::const_iterator const_iterator;
+
+ //Assert if passed value traits are compatible with the type
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
+
+ explicit bs_set( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : Base(cmp, v_traits)
+ {}
+
+ template<class Iterator>
+ bs_set( Iterator b, Iterator e
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : Base(b, e, cmp, v_traits)
+ {}
+
+ bs_set(BOOST_RV_REF(bs_set) x)
+ : Base(::boost::move(static_cast<Base&>(x)))
+ {}
+
+ bs_set& operator=(BOOST_RV_REF(bs_set) x)
+ { return static_cast<bs_set &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
+
+ static bs_set &container_from_end_iterator(iterator end_iterator)
+ { return static_cast<bs_set &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static const bs_set &container_from_end_iterator(const_iterator end_iterator)
+ { return static_cast<const bs_set &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static bs_set &container_from_iterator(iterator it)
+ { return static_cast<bs_set &>(Base::container_from_iterator(it)); }
+
+ static const bs_set &container_from_iterator(const_iterator it)
+ { return static_cast<const bs_set &>(Base::container_from_iterator(it)); }
+};
+
+#endif
+
+//! The class template bs_multiset is an intrusive container, that mimics most of
+//! the interface of std::multiset as described in the C++ standard.
+//!
+//! The template parameter \c T is the type to be managed by the container.
+//! The user can specify additional options and if no options are provided
+//! default options are used.
+//!
+//! The container supports the following options:
+//! \c base_hook<>/member_hook<>/value_traits<>,
+//! \c constant_time_size<>, \c size_type<> and
+//! \c compare<>.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
+#endif
+class bs_multiset_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder>
+#endif
+{
+ /// @cond
+ typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder> tree_type;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_multiset_impl)
+ typedef tree_type implementation_defined;
+ /// @endcond
+
+ public:
+ typedef typename implementation_defined::value_type value_type;
+ typedef typename implementation_defined::value_traits value_traits;
+ typedef typename implementation_defined::pointer pointer;
+ typedef typename implementation_defined::const_pointer const_pointer;
+ typedef typename implementation_defined::reference reference;
+ typedef typename implementation_defined::const_reference const_reference;
+ typedef typename implementation_defined::difference_type difference_type;
+ typedef typename implementation_defined::size_type size_type;
+ typedef typename implementation_defined::value_compare value_compare;
+ typedef typename implementation_defined::key_compare key_compare;
+ typedef typename implementation_defined::iterator iterator;
+ typedef typename implementation_defined::const_iterator const_iterator;
+ typedef typename implementation_defined::reverse_iterator reverse_iterator;
+ typedef typename implementation_defined::const_reverse_iterator const_reverse_iterator;
+ typedef typename implementation_defined::insert_commit_data insert_commit_data;
+ typedef typename implementation_defined::node_traits node_traits;
+ typedef typename implementation_defined::node node;
+ typedef typename implementation_defined::node_ptr node_ptr;
+ typedef typename implementation_defined::const_node_ptr const_node_ptr;
+ typedef typename implementation_defined::node_algorithms node_algorithms;
+
+ static const bool constant_time_size = tree_type::constant_time_size;
+
+ public:
+ //! @copydoc ::boost::intrusive::bstree::bstree(const value_compare &,const value_traits &)
+ explicit bs_multiset_impl( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
+ {}
+
+ //! @copydoc ::boost::intrusive::bstree::bstree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
+ template<class Iterator>
+ bs_multiset_impl( Iterator b, Iterator e
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(false, b, e, cmp, v_traits)
+ {}
+
+ //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&)
+ bs_multiset_impl(BOOST_RV_REF(bs_multiset_impl) x)
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
+ {}
+
+ //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&)
+ bs_multiset_impl& operator=(BOOST_RV_REF(bs_multiset_impl) x)
+ { return static_cast<bs_multiset_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::~bstree()
+ ~bs_multiset_impl();
+
+ //! @copydoc ::boost::intrusive::bstree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::bstree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::bstree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::bstree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::bstree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::bstree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::bstree::rbegin()
+ reverse_iterator rbegin();
+
+ //! @copydoc ::boost::intrusive::bstree::rbegin()const
+ const_reverse_iterator rbegin() const;
+
+ //! @copydoc ::boost::intrusive::bstree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::bstree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::bstree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::bstree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(iterator)
+ static bs_multiset_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(const_iterator)
+ static const bs_multiset_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(iterator)
+ static bs_multiset_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(const_iterator)
+ static const bs_multiset_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::bstree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::bstree::size()const
+ size_type size() const;
+
+ //! @copydoc ::boost::intrusive::bstree::swap
+ void swap(bs_multiset_impl& other);
+
+ //! @copydoc ::boost::intrusive::bstree::clone_from
+ template <class Cloner, class Disposer>
+ void clone_from(const bs_multiset_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(reference)
+ iterator insert(reference value)
+ { return tree_type::insert_equal(value); }
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(const_iterator,reference)
+ iterator insert(const_iterator hint, reference value)
+ { return tree_type::insert_equal(hint, value); }
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(Iterator,Iterator)
+ template<class Iterator>
+ void insert(Iterator b, Iterator e)
+ { tree_type::insert_equal(b, e); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ size_type erase(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,Disposer)
+ template<class Disposer>
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,const_iterator,Disposer)
+ template<class Disposer>
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_reference, Disposer)
+ template<class Disposer>
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
+ template<class KeyType, class KeyValueCompare, class Disposer>
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::bstree::clear_and_dispose
+ template<class Disposer>
+ void clear_and_dispose(Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::count(const_reference)const
+ size_type count(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)const
+ std::pair<const_iterator, const_iterator>
+ equal_range(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)const
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)
+ std::pair<iterator,iterator> bounded_range
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator,iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)const
+ std::pair<const_iterator, const_iterator>
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::bstree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::bstree::remove_node
+ void remove_node(reference value);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+};
+
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+template<class T, class ...Options>
+bool operator!= (const bs_multiset_impl<T, Options...> &x, const bs_multiset_impl<T, Options...> &y);
+
+template<class T, class ...Options>
+bool operator>(const bs_multiset_impl<T, Options...> &x, const bs_multiset_impl<T, Options...> &y);
+
+template<class T, class ...Options>
+bool operator<=(const bs_multiset_impl<T, Options...> &x, const bs_multiset_impl<T, Options...> &y);
+
+template<class T, class ...Options>
+bool operator>=(const bs_multiset_impl<T, Options...> &x, const bs_multiset_impl<T, Options...> &y);
+
+template<class T, class ...Options>
+void swap(bs_multiset_impl<T, Options...> &x, bs_multiset_impl<T, Options...> &y);
+
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+//! Helper metafunction to define a \c bs_multiset that yields to the same type when the
+//! same options (either explicitly or implicitly) are used.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+template<class T, class ...Options>
+#else
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
+#endif
+struct make_bs_multiset
+{
+ /// @cond
+ typedef typename pack_options
+ < bstree_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
+ typedef bs_multiset_impl
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
+ /// @endcond
+ typedef implementation_defined type;
+};
+
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+template<class T, class O1, class O2, class O3, class O4, class O5>
+#else
+template<class T, class ...Options>
+#endif
+class bs_multiset
+ : public make_bs_multiset<T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type
+{
+ typedef typename make_bs_multiset<T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type Base;
+
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_multiset)
+
+ public:
+ typedef typename Base::value_compare value_compare;
+ typedef typename Base::value_traits value_traits;
+ typedef typename Base::iterator iterator;
+ typedef typename Base::const_iterator const_iterator;
+
+ //Assert if passed value traits are compatible with the type
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
+
+ explicit bs_multiset( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : Base(cmp, v_traits)
+ {}
+
+ template<class Iterator>
+ bs_multiset( Iterator b, Iterator e
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : Base(b, e, cmp, v_traits)
+ {}
+
+ bs_multiset(BOOST_RV_REF(bs_multiset) x)
+ : Base(::boost::move(static_cast<Base&>(x)))
+ {}
+
+ bs_multiset& operator=(BOOST_RV_REF(bs_multiset) x)
+ { return static_cast<bs_multiset &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
+
+ static bs_multiset &container_from_end_iterator(iterator end_iterator)
+ { return static_cast<bs_multiset &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static const bs_multiset &container_from_end_iterator(const_iterator end_iterator)
+ { return static_cast<const bs_multiset &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static bs_multiset &container_from_iterator(iterator it)
+ { return static_cast<bs_multiset &>(Base::container_from_iterator(it)); }
+
+ static const bs_multiset &container_from_iterator(const_iterator it)
+ { return static_cast<const bs_multiset &>(Base::container_from_iterator(it)); }
+};
+
+#endif
+
+} //namespace intrusive
+} //namespace boost
+
+#include <boost/intrusive/detail/config_end.hpp>
+
+#endif //BOOST_INTRUSIVE_BS_SET_HPP
diff --git a/3party/boost/boost/intrusive/bs_set_hook.hpp b/3party/boost/boost/intrusive/bs_set_hook.hpp
index 682426a960..2ac050ee57 100644
--- a/3party/boost/boost/intrusive/bs_set_hook.hpp
+++ b/3party/boost/boost/intrusive/bs_set_hook.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -17,7 +17,7 @@
#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/detail/tree_node.hpp>
-#include <boost/intrusive/detail/tree_algorithms.hpp>
+#include <boost/intrusive/bstree_algorithms.hpp>
#include <boost/intrusive/options.hpp>
#include <boost/intrusive/detail/generic_hook.hpp>
@@ -28,7 +28,7 @@ namespace intrusive {
template<class VoidPointer>
struct get_bs_set_node_algo
{
- typedef detail::tree_algorithms<tree_node_traits<VoidPointer> > type;
+ typedef bstree_algorithms<tree_node_traits<VoidPointer> > type;
};
/// @endcond
@@ -37,7 +37,7 @@ struct get_bs_set_node_algo
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none>
+template<class O1 = void, class O2 = void, class O3 = void>
#endif
struct make_bs_set_base_hook
{
@@ -50,14 +50,11 @@ struct make_bs_set_base_hook
#endif
::type packed_options;
- //Scapegoat trees can't be auto unlink trees
- BOOST_STATIC_ASSERT(((int)packed_options::link_mode != (int)auto_unlink));
-
- typedef detail::generic_hook
+ typedef generic_hook
< get_bs_set_node_algo<typename packed_options::void_pointer>
, typename packed_options::tag
, packed_options::link_mode
- , detail::BsSetBaseHook
+ , BsTreeBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -76,7 +73,7 @@ struct make_bs_set_base_hook
//! unique tag.
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
//!
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
//! \c auto_unlink or \c safe_link).
@@ -168,7 +165,7 @@ class bs_set_base_hook
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none>
+template<class O1 = void, class O2 = void, class O3 = void>
#endif
struct make_bs_set_member_hook
{
@@ -182,14 +179,11 @@ struct make_bs_set_member_hook
::type packed_options;
- //Scapegoat trees can't be auto unlink trees
- BOOST_STATIC_ASSERT(((int)packed_options::link_mode != (int)auto_unlink));
-
- typedef detail::generic_hook
+ typedef generic_hook
< get_bs_set_node_algo<typename packed_options::void_pointer>
, member_tag
, packed_options::link_mode
- , detail::NoBaseHook
+ , NoBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -202,7 +196,7 @@ struct make_bs_set_member_hook
//! The hook admits the following options: \c void_pointer<>, \c link_mode<>.
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
//!
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
//! \c auto_unlink or \c safe_link).
diff --git a/3party/boost/boost/intrusive/bstree.hpp b/3party/boost/boost/intrusive/bstree.hpp
new file mode 100644
index 0000000000..2af42cc910
--- /dev/null
+++ b/3party/boost/boost/intrusive/bstree.hpp
@@ -0,0 +1,2110 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2013-2013
+//
+// 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/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_INTRUSIVE_BSTREE_HPP
+#define BOOST_INTRUSIVE_BSTREE_HPP
+
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
+#include <algorithm>
+#include <cstddef>
+#include <functional>
+#include <iterator>
+#include <utility>
+
+#include <boost/intrusive/detail/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
+#include <boost/intrusive/bs_set_hook.hpp>
+#include <boost/intrusive/detail/tree_node.hpp>
+#include <boost/intrusive/detail/ebo_functor_holder.hpp>
+#include <boost/intrusive/detail/mpl.hpp>
+#include <boost/intrusive/pointer_traits.hpp>
+#include <boost/intrusive/detail/function_detector.hpp>
+#include <boost/intrusive/detail/utilities.hpp>
+#include <boost/intrusive/options.hpp>
+#include <boost/intrusive/bstree_algorithms.hpp>
+#include <boost/intrusive/link_mode.hpp>
+#include <boost/intrusive/parent_from_member.hpp>
+#include <boost/move/move.hpp>
+
+namespace boost {
+namespace intrusive {
+
+/// @cond
+
+struct bstree_defaults
+{
+ typedef detail::default_bstree_hook proto_value_traits;
+ static const bool constant_time_size = true;
+ typedef std::size_t size_type;
+ typedef void compare;
+ static const bool floating_point = true; //For sgtree
+ typedef void priority; //For treap
+ typedef void header_holder_type;
+};
+
+template<class ValueTraits, algo_types AlgoType, typename HeaderHolder>
+struct bstbase3
+{
+ typedef ValueTraits value_traits;
+ typedef typename value_traits::node_traits node_traits;
+ typedef typename node_traits::node node_type;
+ typedef typename get_algo<AlgoType, node_traits>::type node_algorithms;
+ typedef typename node_traits::node_ptr node_ptr;
+ typedef typename node_traits::const_node_ptr const_node_ptr;
+ typedef tree_iterator<value_traits, false> iterator;
+ typedef tree_iterator<value_traits, true> const_iterator;
+ typedef boost::intrusive::detail::reverse_iterator<iterator> reverse_iterator;
+ typedef boost::intrusive::detail::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename value_traits::pointer) pointer;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename value_traits::const_pointer) const_pointer;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<pointer>::element_type) value_type;
+ typedef BOOST_INTRUSIVE_IMPDEF(value_type) key_type;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<pointer>::reference) reference;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<const_pointer>::reference) const_reference;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<const_pointer>::difference_type) difference_type;
+ typedef HeaderHolder header_holder_type;
+
+ static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
+ static const bool stateful_value_traits = detail::is_stateful_value_traits<value_traits>::value;
+ static const bool has_container_from_iterator =
+ boost::is_same< header_holder_type, detail::default_header_holder< node_traits > >::value;
+
+ struct holder_t : public ValueTraits
+ {
+ explicit holder_t(const ValueTraits &vtraits)
+ : ValueTraits(vtraits)
+ {}
+ header_holder_type root;
+ } holder;
+
+ static bstbase3 &get_tree_base_from_end_iterator(const const_iterator &end_iterator)
+ {
+ BOOST_STATIC_ASSERT(has_container_from_iterator);
+ node_ptr p = end_iterator.pointed_node();
+ header_holder_type* h = header_holder_type::get_holder(p);
+ holder_t *holder = get_parent_from_member<holder_t, header_holder_type>(h, &holder_t::root);
+ bstbase3 *base = get_parent_from_member<bstbase3, holder_t> (holder, &bstbase3::holder);
+ return *base;
+ }
+
+ bstbase3(const ValueTraits &vtraits)
+ : holder(vtraits)
+ {
+ node_algorithms::init_header(this->header_ptr());
+ }
+
+ node_ptr header_ptr()
+ { return holder.root.get_node(); }
+
+ const_node_ptr header_ptr() const
+ { return holder.root.get_node(); }
+
+ const value_traits &get_value_traits() const
+ { return this->holder; }
+
+ value_traits &get_value_traits()
+ { return this->holder; }
+
+ typedef typename boost::intrusive::value_traits_pointers
+ <ValueTraits>::const_value_traits_ptr const_value_traits_ptr;
+
+ const_value_traits_ptr priv_value_traits_ptr() const
+ { return pointer_traits<const_value_traits_ptr>::pointer_to(this->get_value_traits()); }
+
+ iterator begin()
+ { return iterator(node_algorithms::begin_node(this->header_ptr()), this->priv_value_traits_ptr()); }
+
+ const_iterator begin() const
+ { return cbegin(); }
+
+ const_iterator cbegin() const
+ { return const_iterator(node_algorithms::begin_node(this->header_ptr()), this->priv_value_traits_ptr()); }
+
+ iterator end()
+ { return iterator(node_algorithms::end_node(this->header_ptr()), this->priv_value_traits_ptr()); }
+
+ const_iterator end() const
+ { return cend(); }
+
+ const_iterator cend() const
+ { return const_iterator(node_algorithms::end_node(this->header_ptr()), this->priv_value_traits_ptr()); }
+
+ iterator root()
+ { return iterator(node_algorithms::root_node(this->header_ptr()), this->priv_value_traits_ptr()); }
+
+ const_iterator root() const
+ { return croot(); }
+
+ const_iterator croot() const
+ { return const_iterator(node_algorithms::root_node(this->header_ptr()), this->priv_value_traits_ptr()); }
+
+ reverse_iterator rbegin()
+ { return reverse_iterator(end()); }
+
+ const_reverse_iterator rbegin() const
+ { return const_reverse_iterator(end()); }
+
+ const_reverse_iterator crbegin() const
+ { return const_reverse_iterator(end()); }
+
+ reverse_iterator rend()
+ { return reverse_iterator(begin()); }
+
+ const_reverse_iterator rend() const
+ { return const_reverse_iterator(begin()); }
+
+ const_reverse_iterator crend() const
+ { return const_reverse_iterator(begin()); }
+
+ void replace_node(iterator replace_this, reference with_this)
+ {
+ node_algorithms::replace_node( get_value_traits().to_node_ptr(*replace_this)
+ , this->header_ptr()
+ , get_value_traits().to_node_ptr(with_this));
+ if(safemode_or_autounlink)
+ node_algorithms::init(replace_this.pointed_node());
+ }
+
+ void rebalance()
+ { node_algorithms::rebalance(this->header_ptr()); }
+
+ iterator rebalance_subtree(iterator root)
+ { return iterator(node_algorithms::rebalance_subtree(root.pointed_node()), this->priv_value_traits_ptr()); }
+
+ static iterator s_iterator_to(reference value)
+ {
+ BOOST_STATIC_ASSERT((!stateful_value_traits));
+ return iterator (value_traits::to_node_ptr(value), const_value_traits_ptr());
+ }
+
+ static const_iterator s_iterator_to(const_reference value)
+ {
+ BOOST_STATIC_ASSERT((!stateful_value_traits));
+ return const_iterator (value_traits::to_node_ptr(*pointer_traits<pointer>::const_cast_from(pointer_traits<const_pointer>::pointer_to(value))), const_value_traits_ptr());
+ }
+
+ iterator iterator_to(reference value)
+ { return iterator (this->get_value_traits().to_node_ptr(value), this->priv_value_traits_ptr()); }
+
+ const_iterator iterator_to(const_reference value) const
+ { return const_iterator (this->get_value_traits().to_node_ptr(*pointer_traits<pointer>::const_cast_from(pointer_traits<const_pointer>::pointer_to(value))), this->priv_value_traits_ptr()); }
+
+ static void init_node(reference value)
+ { node_algorithms::init(value_traits::to_node_ptr(value)); }
+
+};
+
+template<class ValueTraits, class VoidOrKeyComp, algo_types AlgoType, typename HeaderHolder>
+struct bstbase2
+ //Put the (possibly empty) functor in the first position to get EBO in MSVC
+ : public detail::ebo_functor_holder<typename get_less< VoidOrKeyComp
+ , typename ValueTraits::value_type
+ >::type>
+ , public bstbase3<ValueTraits, AlgoType, HeaderHolder>
+{
+ typedef bstbase3<ValueTraits, AlgoType, HeaderHolder> treeheader_t;
+ typedef typename treeheader_t::value_traits value_traits;
+ typedef typename treeheader_t::node_algorithms node_algorithms;
+ typedef typename get_less
+ < VoidOrKeyComp, typename value_traits::value_type>::type value_compare;
+ typedef BOOST_INTRUSIVE_IMPDEF(value_compare) key_compare;
+ typedef typename treeheader_t::iterator iterator;
+ typedef typename treeheader_t::const_iterator const_iterator;
+ typedef typename treeheader_t::node_ptr node_ptr;
+ typedef typename treeheader_t::const_node_ptr const_node_ptr;
+
+ bstbase2(const value_compare &comp, const ValueTraits &vtraits)
+ : detail::ebo_functor_holder<value_compare>(comp), treeheader_t(vtraits)
+ {}
+
+ const value_compare &comp() const
+ { return this->get(); }
+
+ value_compare &comp()
+ { return this->get(); }
+
+ typedef BOOST_INTRUSIVE_IMPDEF(typename value_traits::pointer) pointer;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename value_traits::const_pointer) const_pointer;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<pointer>::element_type) value_type;
+ typedef BOOST_INTRUSIVE_IMPDEF(value_type) key_type;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<pointer>::reference) reference;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<const_pointer>::reference) const_reference;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<const_pointer>::difference_type) difference_type;
+ typedef typename node_algorithms::insert_commit_data insert_commit_data;
+
+ value_compare value_comp() const
+ { return this->comp(); }
+
+ key_compare key_comp() const
+ { return this->comp(); }
+
+ //lower_bound
+ iterator lower_bound(const_reference value)
+ { return this->lower_bound(value, this->comp()); }
+
+ const_iterator lower_bound(const_reference value) const
+ { return this->lower_bound(value, this->comp()); }
+
+ template<class KeyType, class KeyValueCompare>
+ iterator lower_bound(const KeyType &key, KeyValueCompare comp)
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ return iterator(node_algorithms::lower_bound
+ (this->header_ptr(), key, key_node_comp), this->priv_value_traits_ptr());
+ }
+
+ template<class KeyType, class KeyValueCompare>
+ const_iterator lower_bound(const KeyType &key, KeyValueCompare comp) const
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ return const_iterator(node_algorithms::lower_bound
+ (this->header_ptr(), key, key_node_comp), this->priv_value_traits_ptr());
+ }
+
+ //upper_bound
+ iterator upper_bound(const_reference value)
+ { return this->upper_bound(value, this->comp()); }
+
+ template<class KeyType, class KeyValueCompare>
+ iterator upper_bound(const KeyType &key, KeyValueCompare comp)
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ return iterator(node_algorithms::upper_bound
+ (this->header_ptr(), key, key_node_comp), this->priv_value_traits_ptr());
+ }
+
+ const_iterator upper_bound(const_reference value) const
+ { return this->upper_bound(value, this->comp()); }
+
+ template<class KeyType, class KeyValueCompare>
+ const_iterator upper_bound(const KeyType &key, KeyValueCompare comp) const
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ return const_iterator(node_algorithms::upper_bound
+ (this->header_ptr(), key, key_node_comp), this->priv_value_traits_ptr());
+ }
+
+ //find
+ iterator find(const_reference value)
+ { return this->find(value, this->comp()); }
+
+ template<class KeyType, class KeyValueCompare>
+ iterator find(const KeyType &key, KeyValueCompare comp)
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ return iterator
+ (node_algorithms::find(this->header_ptr(), key, key_node_comp), this->priv_value_traits_ptr());
+ }
+
+ const_iterator find(const_reference value) const
+ { return this->find(value, this->comp()); }
+
+ template<class KeyType, class KeyValueCompare>
+ const_iterator find(const KeyType &key, KeyValueCompare comp) const
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ return const_iterator
+ (node_algorithms::find(this->header_ptr(), key, key_node_comp), this->priv_value_traits_ptr());
+ }
+
+ //equal_range
+ std::pair<iterator,iterator> equal_range(const_reference value)
+ { return this->equal_range(value, this->comp()); }
+
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator,iterator> equal_range(const KeyType &key, KeyValueCompare comp)
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ std::pair<node_ptr, node_ptr> ret
+ (node_algorithms::equal_range(this->header_ptr(), key, key_node_comp));
+ return std::pair<iterator, iterator>( iterator(ret.first, this->priv_value_traits_ptr())
+ , iterator(ret.second, this->priv_value_traits_ptr()));
+ }
+
+ std::pair<const_iterator, const_iterator>
+ equal_range(const_reference value) const
+ { return this->equal_range(value, this->comp()); }
+
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const KeyType &key, KeyValueCompare comp) const
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ std::pair<node_ptr, node_ptr> ret
+ (node_algorithms::equal_range(this->header_ptr(), key, key_node_comp));
+ return std::pair<const_iterator, const_iterator>( const_iterator(ret.first, this->priv_value_traits_ptr())
+ , const_iterator(ret.second, this->priv_value_traits_ptr()));
+ }
+
+ //lower_bound_range
+ std::pair<iterator,iterator> lower_bound_range(const_reference value)
+ { return this->lower_bound_range(value, this->comp()); }
+
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator,iterator> lower_bound_range(const KeyType &key, KeyValueCompare comp)
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ std::pair<node_ptr, node_ptr> ret
+ (node_algorithms::lower_bound_range(this->header_ptr(), key, key_node_comp));
+ return std::pair<iterator, iterator>( iterator(ret.first, this->priv_value_traits_ptr())
+ , iterator(ret.second, this->priv_value_traits_ptr()));
+ }
+
+ std::pair<const_iterator, const_iterator>
+ lower_bound_range(const_reference value) const
+ { return this->lower_bound_range(value, this->comp()); }
+
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator, const_iterator>
+ lower_bound_range(const KeyType &key, KeyValueCompare comp) const
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ std::pair<node_ptr, node_ptr> ret
+ (node_algorithms::lower_bound_range(this->header_ptr(), key, key_node_comp));
+ return std::pair<const_iterator, const_iterator>( const_iterator(ret.first, this->priv_value_traits_ptr())
+ , const_iterator(ret.second, this->priv_value_traits_ptr()));
+ }
+
+ //bounded_range
+ std::pair<iterator,iterator> bounded_range
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
+ { return this->bounded_range(lower_value, upper_value, this->comp(), left_closed, right_closed); }
+
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator,iterator> bounded_range
+ (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ std::pair<node_ptr, node_ptr> ret
+ (node_algorithms::bounded_range
+ (this->header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
+ return std::pair<iterator, iterator>( iterator(ret.first, this->priv_value_traits_ptr())
+ , iterator(ret.second, this->priv_value_traits_ptr()));
+ }
+
+ std::pair<const_iterator,const_iterator> bounded_range
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
+ { return this->bounded_range(lower_value, upper_value, this->comp(), left_closed, right_closed); }
+
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator,const_iterator> bounded_range
+ (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ std::pair<node_ptr, node_ptr> ret
+ (node_algorithms::bounded_range
+ (this->header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
+ return std::pair<const_iterator, const_iterator>( const_iterator(ret.first, this->priv_value_traits_ptr())
+ , const_iterator(ret.second, this->priv_value_traits_ptr()));
+ }
+
+ //insert_unique_check
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator, bool> insert_unique_check
+ (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ ocomp(key_value_comp, &this->get_value_traits());
+ std::pair<node_ptr, bool> ret =
+ (node_algorithms::insert_unique_check
+ (this->header_ptr(), key, ocomp, commit_data));
+ return std::pair<iterator, bool>(iterator(ret.first, this->priv_value_traits_ptr()), ret.second);
+ }
+
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator, bool> insert_unique_check
+ (const_iterator hint, const KeyType &key
+ ,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
+ {
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ ocomp(key_value_comp, &this->get_value_traits());
+ std::pair<node_ptr, bool> ret =
+ (node_algorithms::insert_unique_check
+ (this->header_ptr(), hint.pointed_node(), key, ocomp, commit_data));
+ return std::pair<iterator, bool>(iterator(ret.first, this->priv_value_traits_ptr()), ret.second);
+ }
+};
+
+//Due to MSVC's EBO implementation, to save space and maintain the ABI, we must put the non-empty size member
+//in the first position, but if size is not going to be stored then we'll use an specialization
+//that doesn't inherit from size_holder
+template<class ValueTraits, class VoidOrKeyComp, bool ConstantTimeSize, class SizeType, algo_types AlgoType, typename HeaderHolder>
+struct bstbase_hack
+ : public detail::size_holder<ConstantTimeSize, SizeType>
+ , public bstbase2 < ValueTraits, VoidOrKeyComp, AlgoType, HeaderHolder>
+{
+ typedef bstbase2< ValueTraits, VoidOrKeyComp, AlgoType, HeaderHolder> base_type;
+ typedef typename base_type::value_compare value_compare;
+ typedef SizeType size_type;
+ typedef typename base_type::node_traits node_traits;
+ typedef typename get_algo
+ <AlgoType, node_traits>::type algo_type;
+
+ bstbase_hack(const value_compare & comp, const ValueTraits &vtraits)
+ : base_type(comp, vtraits)
+ {
+ this->sz_traits().set_size(size_type(0));
+ }
+
+ typedef detail::size_holder<ConstantTimeSize, SizeType> size_traits;
+
+ size_traits &sz_traits()
+ { return static_cast<size_traits &>(*this); }
+
+ const size_traits &sz_traits() const
+ { return static_cast<const size_traits &>(*this); }
+};
+
+//Specialization for ConstantTimeSize == false
+template<class ValueTraits, class VoidOrKeyComp, class SizeType, algo_types AlgoType, typename HeaderHolder>
+struct bstbase_hack<ValueTraits, VoidOrKeyComp, false, SizeType, AlgoType, HeaderHolder>
+ : public bstbase2 < ValueTraits, VoidOrKeyComp, AlgoType, HeaderHolder>
+{
+ typedef bstbase2< ValueTraits, VoidOrKeyComp, AlgoType, HeaderHolder> base_type;
+ typedef typename base_type::value_compare value_compare;
+ bstbase_hack(const value_compare & comp, const ValueTraits &vtraits)
+ : base_type(comp, vtraits)
+ {}
+
+ typedef detail::size_holder<true, SizeType> size_traits;
+
+ size_traits &sz_traits()
+ { return s_size_traits; }
+
+ const size_traits &sz_traits() const
+ { return s_size_traits; }
+
+ static size_traits s_size_traits;
+};
+
+template<class ValueTraits, class VoidOrKeyComp, class SizeType, algo_types AlgoType, typename HeaderHolder>
+detail::size_holder<true, SizeType> bstbase_hack<ValueTraits, VoidOrKeyComp, false, SizeType, AlgoType, HeaderHolder>::s_size_traits;
+
+//This class will
+template<class ValueTraits, class VoidOrKeyComp, bool ConstantTimeSize, class SizeType, algo_types AlgoType, typename HeaderHolder>
+struct bstbase
+ : public bstbase_hack< ValueTraits, VoidOrKeyComp, ConstantTimeSize, SizeType, AlgoType, HeaderHolder>
+{
+ typedef bstbase_hack< ValueTraits, VoidOrKeyComp, ConstantTimeSize, SizeType, AlgoType, HeaderHolder> base_type;
+ typedef ValueTraits value_traits;
+ typedef typename base_type::value_compare value_compare;
+ typedef value_compare key_compare;
+ typedef typename base_type::const_reference const_reference;
+ typedef typename base_type::reference reference;
+ typedef typename base_type::iterator iterator;
+ typedef typename base_type::const_iterator const_iterator;
+ typedef typename base_type::node_traits node_traits;
+ typedef typename get_algo
+ <AlgoType, node_traits>::type node_algorithms;
+ typedef SizeType size_type;
+
+ bstbase(const value_compare & comp, const ValueTraits &vtraits)
+ : base_type(comp, vtraits)
+ {}
+
+ //Detach all inserted nodes. This will add exception safety to bstree_impl
+ //constructors inserting elements.
+ ~bstbase()
+ {
+ if(is_safe_autounlink<value_traits::link_mode>::value){
+ node_algorithms::clear_and_dispose
+ ( this->header_ptr()
+ , detail::node_disposer<detail::null_disposer, value_traits, AlgoType>
+ (detail::null_disposer(), &this->get_value_traits()));
+ node_algorithms::init(this->header_ptr());
+ }
+ }
+};
+
+
+/// @endcond
+
+//! The class template bstree is an unbalanced intrusive binary search tree
+//! container. The no-throw guarantee holds only, if the value_compare object
+//! doesn't throw.
+//!
+//! The complexity guarantees only hold if the tree is balanced, logarithmic
+//! complexity would increase to linear if the tree is totally unbalanced.
+//!
+//! The template parameter \c T is the type to be managed by the container.
+//! The user can specify additional options and if no options are provided
+//! default options are used.
+//!
+//! The container supports the following options:
+//! \c base_hook<>/member_hook<>/value_traits<>,
+//! \c constant_time_size<>, \c size_type<> and
+//! \c compare<>.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class VoidKeyComp, class SizeType, bool ConstantTimeSize, algo_types AlgoType, typename HeaderHolder>
+#endif
+class bstree_impl
+ : public bstbase<ValueTraits, VoidKeyComp, ConstantTimeSize, SizeType, AlgoType, HeaderHolder>
+{
+ public:
+ /// @cond
+ typedef bstbase<ValueTraits, VoidKeyComp, ConstantTimeSize, SizeType, AlgoType, HeaderHolder> data_type;
+ typedef tree_iterator<ValueTraits, false> iterator_type;
+ typedef tree_iterator<ValueTraits, true> const_iterator_type;
+ /// @endcond
+
+ typedef BOOST_INTRUSIVE_IMPDEF(ValueTraits) value_traits;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename value_traits::pointer) pointer;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename value_traits::const_pointer) const_pointer;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<pointer>::element_type) value_type;
+ typedef BOOST_INTRUSIVE_IMPDEF(value_type) key_type;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<pointer>::reference) reference;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<const_pointer>::reference) const_reference;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename pointer_traits<const_pointer>::difference_type) difference_type;
+ typedef BOOST_INTRUSIVE_IMPDEF(SizeType) size_type;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename data_type::value_compare) value_compare;
+ typedef BOOST_INTRUSIVE_IMPDEF(value_compare) key_compare;
+ typedef BOOST_INTRUSIVE_IMPDEF(iterator_type) iterator;
+ typedef BOOST_INTRUSIVE_IMPDEF(const_iterator_type) const_iterator;
+ typedef BOOST_INTRUSIVE_IMPDEF(boost::intrusive::detail::reverse_iterator<iterator>) reverse_iterator;
+ typedef BOOST_INTRUSIVE_IMPDEF(boost::intrusive::detail::reverse_iterator<const_iterator>) const_reverse_iterator;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename value_traits::node_traits) node_traits;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename node_traits::node) node;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename node_traits::node_ptr) node_ptr;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename node_traits::const_node_ptr) const_node_ptr;
+ /// @cond
+ typedef typename get_algo<AlgoType, node_traits>::type algo_type;
+ /// @endcond
+ typedef BOOST_INTRUSIVE_IMPDEF(algo_type) node_algorithms;
+
+ static const bool constant_time_size = ConstantTimeSize;
+ static const bool stateful_value_traits = detail::is_stateful_value_traits<value_traits>::value;
+ /// @cond
+ private:
+
+ //noncopyable
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bstree_impl)
+
+ static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
+
+ //Constant-time size is incompatible with auto-unlink hooks!
+ BOOST_STATIC_ASSERT(!(constant_time_size && ((int)value_traits::link_mode == (int)auto_unlink)));
+
+
+ protected:
+
+
+ /// @endcond
+
+ public:
+
+ typedef typename node_algorithms::insert_commit_data insert_commit_data;
+
+ //! <b>Effects</b>: Constructs an empty container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: If value_traits::node_traits::node
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
+ //! or the copy constructor of the value_compare object throws. Basic guarantee.
+ explicit bstree_impl( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : data_type(cmp, v_traits)
+ {}
+
+ //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
+ //! cmp must be a comparison function that induces a strict weak ordering.
+ //!
+ //! <b>Effects</b>: Constructs an empty container and inserts elements from
+ //! [b, e).
+ //!
+ //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
+ //! comp and otherwise N * log N, where N is the distance between first and last.
+ //!
+ //! <b>Throws</b>: If value_traits::node_traits::node
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
+ //! or the copy constructor/operator() of the value_compare object throws. Basic guarantee.
+ template<class Iterator>
+ bstree_impl( bool unique, Iterator b, Iterator e
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : data_type(cmp, v_traits)
+ {
+ //bstbase releases elements in case of exceptions
+ if(unique)
+ this->insert_unique(b, e);
+ else
+ this->insert_equal(b, e);
+ }
+
+ //! <b>Effects</b>: to-do
+ //!
+ bstree_impl(BOOST_RV_REF(bstree_impl) x)
+ : data_type(::boost::move(x.comp()), ::boost::move(x.get_value_traits()))
+ {
+ this->swap(x);
+ }
+
+ //! <b>Effects</b>: to-do
+ //!
+ bstree_impl& operator=(BOOST_RV_REF(bstree_impl) x)
+ { this->swap(x); return *this; }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! <b>Effects</b>: Detaches all elements from this. The objects in the set
+ //! are not deleted (i.e. no destructors are called), but the nodes according to
+ //! the value_traits template parameter are reinitialized and thus can be reused.
+ //!
+ //! <b>Complexity</b>: Linear to elements contained in *this.
+ //!
+ //! <b>Throws</b>: Nothing.
+ ~bstree_impl()
+ {}
+
+ //! <b>Effects</b>: Returns an iterator pointing to the beginning of the container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ iterator begin();
+
+ //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ const_iterator begin() const;
+
+ //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ const_iterator cbegin() const;
+
+ //! <b>Effects</b>: Returns an iterator pointing to the end of the container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ iterator end();
+
+ //! <b>Effects</b>: Returns a const_iterator pointing to the end of the container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ const_iterator end() const;
+
+ //! <b>Effects</b>: Returns a const_iterator pointing to the end of the container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ const_iterator cend() const;
+
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
+ //! reversed container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ reverse_iterator rbegin();
+
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
+ //! of the reversed container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ const_reverse_iterator rbegin() const;
+
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
+ //! of the reversed container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ const_reverse_iterator crbegin() const;
+
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
+ //! of the reversed container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ reverse_iterator rend();
+
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
+ //! of the reversed container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ const_reverse_iterator rend() const;
+
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
+ //! of the reversed container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ const_reverse_iterator crend() const;
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! <b>Precondition</b>: end_iterator must be a valid end iterator
+ //! of the container.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the container associated to the end iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Constant.
+ static bstree_impl &container_from_end_iterator(iterator end_iterator)
+ {
+ return static_cast<bstree_impl&>
+ (data_type::get_tree_base_from_end_iterator(end_iterator));
+ }
+
+ //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
+ //! of the container.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the container associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Constant.
+ static const bstree_impl &container_from_end_iterator(const_iterator end_iterator)
+ {
+ return static_cast<bstree_impl&>
+ (data_type::get_tree_base_from_end_iterator(end_iterator));
+ }
+
+ //! <b>Precondition</b>: it must be a valid iterator
+ //! of the container.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the container associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static bstree_impl &container_from_iterator(iterator it)
+ { return container_from_end_iterator(it.end_iterator_from_it()); }
+
+ //! <b>Precondition</b>: it must be a valid end const_iterator
+ //! of container.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the container associated to the end iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const bstree_impl &container_from_iterator(const_iterator it)
+ { return container_from_end_iterator(it.end_iterator_from_it()); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! <b>Effects</b>: Returns the key_compare object used by the container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: If value_compare copy-constructor throws.
+ key_compare key_comp() const;
+
+ //! <b>Effects</b>: Returns the value_compare object used by the container.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: If value_compare copy-constructor throws.
+ value_compare value_comp() const;
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! <b>Effects</b>: Returns true if the container is empty.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ bool empty() const
+ {
+ if(ConstantTimeSize){
+ return !this->data_type::sz_traits().get_size();
+ }
+ else{
+ return algo_type::unique(this->header_ptr());
+ }
+ }
+
+ //! <b>Effects</b>: Returns the number of elements stored in the container.
+ //!
+ //! <b>Complexity</b>: Linear to elements contained in *this
+ //! if constant-time size option is disabled. Constant time otherwise.
+ //!
+ //! <b>Throws</b>: Nothing.
+ size_type size() const
+ {
+ if(constant_time_size)
+ return this->sz_traits().get_size();
+ else{
+ return (size_type)node_algorithms::size(this->header_ptr());
+ }
+ }
+
+ //! <b>Effects</b>: Swaps the contents of two containers.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: If the comparison functor's swap call throws.
+ void swap(bstree_impl& other)
+ {
+ //This can throw
+ using std::swap;
+ swap(this->comp(), this->comp());
+ //These can't throw
+ node_algorithms::swap_tree(this->header_ptr(), node_ptr(other.header_ptr()));
+ if(constant_time_size){
+ size_type backup = this->sz_traits().get_size();
+ this->sz_traits().set_size(other.sz_traits().get_size());
+ other.sz_traits().set_size(backup);
+ }
+ }
+
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
+ //! Cloner should yield to nodes equivalent to the original nodes.
+ //!
+ //! <b>Effects</b>: Erases all the elements from *this
+ //! calling Disposer::operator()(pointer), clones all the
+ //! elements from src calling Cloner::operator()(const_reference )
+ //! and inserts them on *this. Copies the predicate from the source container.
+ //!
+ //! If cloner throws, all cloned elements are unlinked and disposed
+ //! calling Disposer::operator()(pointer).
+ //!
+ //! <b>Complexity</b>: Linear to erased plus inserted elements.
+ //!
+ //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ template <class Cloner, class Disposer>
+ void clone_from(const bstree_impl &src, Cloner cloner, Disposer disposer)
+ {
+ this->clear_and_dispose(disposer);
+ if(!src.empty()){
+ detail::exception_disposer<bstree_impl, Disposer>
+ rollback(*this, disposer);
+ node_algorithms::clone
+ (const_node_ptr(src.header_ptr())
+ ,node_ptr(this->header_ptr())
+ ,detail::node_cloner <Cloner, value_traits, AlgoType>(cloner, &this->get_value_traits())
+ ,detail::node_disposer<Disposer, value_traits, AlgoType>(disposer, &this->get_value_traits()));
+ this->sz_traits().set_size(src.sz_traits().get_size());
+ this->comp() = src.comp();
+ rollback.release();
+ }
+ }
+
+ //! <b>Requires</b>: value must be an lvalue
+ //!
+ //! <b>Effects</b>: Inserts value into the container before the upper bound.
+ //!
+ //! <b>Complexity</b>: Average complexity for insert element is at
+ //! most logarithmic.
+ //!
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
+ //!
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
+ //! No copy-constructors are called.
+ iterator insert_equal(reference value)
+ {
+ detail::key_nodeptr_comp<value_compare, value_traits>
+ key_node_comp(this->comp(), &this->get_value_traits());
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
+ if(safemode_or_autounlink)
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ iterator ret(node_algorithms::insert_equal_upper_bound
+ (this->header_ptr(), to_insert, key_node_comp), this->priv_value_traits_ptr());
+ this->sz_traits().increment();
+ return ret;
+ }
+
+ //! <b>Requires</b>: value must be an lvalue, and "hint" must be
+ //! a valid iterator.
+ //!
+ //! <b>Effects</b>: Inserts x into the container, using "hint" as a hint to
+ //! where it will be inserted. If "hint" is the upper_bound
+ //! the insertion takes constant time (two comparisons in the worst case)
+ //!
+ //! <b>Complexity</b>: Logarithmic in general, but it is amortized
+ //! constant time if t is inserted immediately before hint.
+ //!
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
+ //!
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
+ //! No copy-constructors are called.
+ iterator insert_equal(const_iterator hint, reference value)
+ {
+ detail::key_nodeptr_comp<value_compare, value_traits>
+ key_node_comp(this->comp(), &this->get_value_traits());
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
+ if(safemode_or_autounlink)
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ iterator ret(node_algorithms::insert_equal
+ (this->header_ptr(), hint.pointed_node(), to_insert, key_node_comp), this->priv_value_traits_ptr());
+ this->sz_traits().increment();
+ return ret;
+ }
+
+ //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
+ //! of type value_type.
+ //!
+ //! <b>Effects</b>: Inserts a each element of a range into the container
+ //! before the upper bound of the key of each element.
+ //!
+ //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
+ //! size of the range. However, it is linear in N if the range is already sorted
+ //! by value_comp().
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
+ //! No copy-constructors are called.
+ template<class Iterator>
+ void insert_equal(Iterator b, Iterator e)
+ {
+ iterator iend(this->end());
+ for (; b != e; ++b)
+ this->insert_equal(iend, *b);
+ }
+
+ //! <b>Requires</b>: value must be an lvalue
+ //!
+ //! <b>Effects</b>: Inserts value into the container if the value
+ //! is not already present.
+ //!
+ //! <b>Complexity</b>: Average complexity for insert element is at
+ //! most logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
+ //! No copy-constructors are called.
+ std::pair<iterator, bool> insert_unique(reference value)
+ {
+ insert_commit_data commit_data;
+ std::pair<iterator, bool> ret = this->insert_unique_check(value, this->comp(), commit_data);
+ if(!ret.second)
+ return ret;
+ return std::pair<iterator, bool> (this->insert_unique_commit(value, commit_data), true);
+ }
+
+ //! <b>Requires</b>: value must be an lvalue, and "hint" must be
+ //! a valid iterator
+ //!
+ //! <b>Effects</b>: Tries to insert x into the container, using "hint" as a hint
+ //! to where it will be inserted.
+ //!
+ //! <b>Complexity</b>: Logarithmic in general, but it is amortized
+ //! constant time (two comparisons in the worst case)
+ //! if t is inserted immediately before hint.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
+ //! No copy-constructors are called.
+ iterator insert_unique(const_iterator hint, reference value)
+ {
+ insert_commit_data commit_data;
+ std::pair<iterator, bool> ret = this->insert_unique_check(hint, value, this->comp(), commit_data);
+ if(!ret.second)
+ return ret.first;
+ return this->insert_unique_commit(value, commit_data);
+ }
+
+ //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
+ //! of type value_type.
+ //!
+ //! <b>Effects</b>: Tries to insert each element of a range into the container.
+ //!
+ //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
+ //! size of the range. However, it is linear in N if the range is already sorted
+ //! by value_comp().
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
+ //! No copy-constructors are called.
+ template<class Iterator>
+ void insert_unique(Iterator b, Iterator e)
+ {
+ if(this->empty()){
+ iterator iend(this->end());
+ for (; b != e; ++b)
+ this->insert_unique(iend, *b);
+ }
+ else{
+ for (; b != e; ++b)
+ this->insert_unique(*b);
+ }
+ }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! <b>Requires</b>: key_value_comp must be a comparison function that induces
+ //! the same strict weak ordering as value_compare. The difference is that
+ //! key_value_comp compares an arbitrary key with the contained values.
+ //!
+ //! <b>Effects</b>: Checks if a value can be inserted in the container, using
+ //! a user provided key instead of the value itself.
+ //!
+ //! <b>Returns</b>: If there is an equivalent value
+ //! returns a pair containing an iterator to the already present value
+ //! and false. If the value can be inserted returns true in the returned
+ //! pair boolean and fills "commit_data" that is meant to be used with
+ //! the "insert_commit" function.
+ //!
+ //! <b>Complexity</b>: Average complexity is at most logarithmic.
+ //!
+ //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
+ //!
+ //! <b>Notes</b>: This function is used to improve performance when constructing
+ //! a value_type is expensive: if there is an equivalent value
+ //! the constructed object must be discarded. Many times, the part of the
+ //! node that is used to impose the order is much cheaper to construct
+ //! than the value_type and this function offers the possibility to use that
+ //! part to check if the insertion will be successful.
+ //!
+ //! If the check is successful, the user can construct the value_type and use
+ //! "insert_commit" to insert the object in constant-time. This gives a total
+ //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
+ //!
+ //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
+ //! objects are inserted or erased from the container.
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator, bool> insert_unique_check
+ (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data);
+
+ //! <b>Requires</b>: key_value_comp must be a comparison function that induces
+ //! the same strict weak ordering as value_compare. The difference is that
+ //! key_value_comp compares an arbitrary key with the contained values.
+ //!
+ //! <b>Effects</b>: Checks if a value can be inserted in the container, using
+ //! a user provided key instead of the value itself, using "hint"
+ //! as a hint to where it will be inserted.
+ //!
+ //! <b>Returns</b>: If there is an equivalent value
+ //! returns a pair containing an iterator to the already present value
+ //! and false. If the value can be inserted returns true in the returned
+ //! pair boolean and fills "commit_data" that is meant to be used with
+ //! the "insert_commit" function.
+ //!
+ //! <b>Complexity</b>: Logarithmic in general, but it's amortized
+ //! constant time if t is inserted immediately before hint.
+ //!
+ //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
+ //!
+ //! <b>Notes</b>: This function is used to improve performance when constructing
+ //! a value_type is expensive: if there is an equivalent value
+ //! the constructed object must be discarded. Many times, the part of the
+ //! constructing that is used to impose the order is much cheaper to construct
+ //! than the value_type and this function offers the possibility to use that key
+ //! to check if the insertion will be successful.
+ //!
+ //! If the check is successful, the user can construct the value_type and use
+ //! "insert_commit" to insert the object in constant-time. This can give a total
+ //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
+ //!
+ //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
+ //! objects are inserted or erased from the container.
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator, bool> insert_unique_check
+ (const_iterator hint, const KeyType &key
+ ,KeyValueCompare key_value_comp, insert_commit_data &commit_data);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
+ //! must have been obtained from a previous call to "insert_check".
+ //! No objects should have been inserted or erased from the container between
+ //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
+ //!
+ //! <b>Effects</b>: Inserts the value in the container using the information obtained
+ //! from the "commit_data" that a previous "insert_check" filled.
+ //!
+ //! <b>Returns</b>: An iterator to the newly inserted object.
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Notes</b>: This function has only sense if a "insert_check" has been
+ //! previously executed to fill "commit_data". No value should be inserted or
+ //! erased between the "insert_check" and "insert_commit" calls.
+ iterator insert_unique_commit(reference value, const insert_commit_data &commit_data)
+ {
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
+ if(safemode_or_autounlink)
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ node_algorithms::insert_unique_commit
+ (this->header_ptr(), to_insert, commit_data);
+ this->sz_traits().increment();
+ return iterator(to_insert, this->priv_value_traits_ptr());
+ }
+
+ //! <b>Requires</b>: value must be an lvalue, "pos" must be
+ //! a valid iterator (or end) and must be the succesor of value
+ //! once inserted according to the predicate
+ //!
+ //! <b>Effects</b>: Inserts x into the container before "pos".
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This function does not check preconditions so if "pos" is not
+ //! the successor of "value" container ordering invariant will be broken.
+ //! This is a low-level function to be used only for performance reasons
+ //! by advanced users.
+ iterator insert_before(const_iterator pos, reference value)
+ {
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
+ if(safemode_or_autounlink)
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ this->sz_traits().increment();
+ return iterator(node_algorithms::insert_before
+ (this->header_ptr(), pos.pointed_node(), to_insert), this->priv_value_traits_ptr());
+ }
+
+ //! <b>Requires</b>: value must be an lvalue, and it must be no less
+ //! than the greatest inserted key
+ //!
+ //! <b>Effects</b>: Inserts x into the container in the last position.
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This function does not check preconditions so if value is
+ //! less than the greatest inserted key container ordering invariant will be broken.
+ //! This function is slightly more efficient than using "insert_before".
+ //! This is a low-level function to be used only for performance reasons
+ //! by advanced users.
+ void push_back(reference value)
+ {
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
+ if(safemode_or_autounlink)
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ this->sz_traits().increment();
+ node_algorithms::push_back(this->header_ptr(), to_insert);
+ }
+
+ //! <b>Requires</b>: value must be an lvalue, and it must be no greater
+ //! than the minimum inserted key
+ //!
+ //! <b>Effects</b>: Inserts x into the container in the first position.
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This function does not check preconditions so if value is
+ //! greater than the minimum inserted key container ordering invariant will be broken.
+ //! This function is slightly more efficient than using "insert_before".
+ //! This is a low-level function to be used only for performance reasons
+ //! by advanced users.
+ void push_front(reference value)
+ {
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
+ if(safemode_or_autounlink)
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ this->sz_traits().increment();
+ node_algorithms::push_front(this->header_ptr(), to_insert);
+ }
+
+ //! <b>Effects</b>: Erases the element pointed to by pos.
+ //!
+ //! <b>Complexity</b>: Average complexity for erase element is constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
+ //! to the erased elements. No destructors are called.
+ iterator erase(const_iterator i)
+ {
+ const_iterator ret(i);
+ ++ret;
+ node_ptr to_erase(i.pointed_node());
+ if(safemode_or_autounlink)
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!node_algorithms::unique(to_erase));
+ node_algorithms::erase(this->header_ptr(), to_erase);
+ this->sz_traits().decrement();
+ if(safemode_or_autounlink)
+ node_algorithms::init(to_erase);
+ return ret.unconst();
+ }
+
+ //! <b>Effects</b>: Erases the range pointed to by b end e.
+ //!
+ //! <b>Complexity</b>: Average complexity for erase range is at most
+ //! O(log(size() + N)), where N is the number of elements in the range.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
+ //! to the erased elements. No destructors are called.
+ iterator erase(const_iterator b, const_iterator e)
+ { size_type n; return this->private_erase(b, e, n); }
+
+ //! <b>Effects</b>: Erases all the elements with the given value.
+ //!
+ //! <b>Returns</b>: The number of erased elements.
+ //!
+ //! <b>Complexity</b>: O(log(size() + N).
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
+ //! to the erased elements. No destructors are called.
+ size_type erase(const_reference value)
+ { return this->erase(value, this->comp()); }
+
+ //! <b>Effects</b>: Erases all the elements with the given key.
+ //! according to the comparison functor "comp".
+ //!
+ //! <b>Returns</b>: The number of erased elements.
+ //!
+ //! <b>Complexity</b>: O(log(size() + N).
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
+ //! to the erased elements. No destructors are called.
+ template<class KeyType, class KeyValueCompare>
+ size_type erase(const KeyType& key, KeyValueCompare comp
+ /// @cond
+ , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
+ /// @endcond
+ )
+ {
+ std::pair<iterator,iterator> p = this->equal_range(key, comp);
+ size_type n;
+ this->private_erase(p.first, p.second, n);
+ return n;
+ }
+
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
+ //!
+ //! <b>Effects</b>: Erases the element pointed to by pos.
+ //! Disposer::operator()(pointer) is called for the removed element.
+ //!
+ //! <b>Complexity</b>: Average complexity for erase element is constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators
+ //! to the erased elements.
+ template<class Disposer>
+ iterator erase_and_dispose(const_iterator i, Disposer disposer)
+ {
+ node_ptr to_erase(i.pointed_node());
+ iterator ret(this->erase(i));
+ disposer(this->get_value_traits().to_value_ptr(to_erase));
+ return ret;
+ }
+
+ #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ template<class Disposer>
+ iterator erase_and_dispose(iterator i, Disposer disposer)
+ { return this->erase_and_dispose(const_iterator(i), disposer); }
+ #endif
+
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
+ //!
+ //! <b>Effects</b>: Erases all the elements with the given value.
+ //! Disposer::operator()(pointer) is called for the removed elements.
+ //!
+ //! <b>Returns</b>: The number of erased elements.
+ //!
+ //! <b>Complexity</b>: O(log(size() + N).
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
+ //! to the erased elements. No destructors are called.
+ template<class Disposer>
+ size_type erase_and_dispose(const_reference value, Disposer disposer)
+ {
+ std::pair<iterator,iterator> p = this->equal_range(value);
+ size_type n;
+ this->private_erase(p.first, p.second, n, disposer);
+ return n;
+ }
+
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
+ //!
+ //! <b>Effects</b>: Erases the range pointed to by b end e.
+ //! Disposer::operator()(pointer) is called for the removed elements.
+ //!
+ //! <b>Complexity</b>: Average complexity for erase range is at most
+ //! O(log(size() + N)), where N is the number of elements in the range.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators
+ //! to the erased elements.
+ template<class Disposer>
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
+ { size_type n; return this->private_erase(b, e, n, disposer); }
+
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
+ //!
+ //! <b>Effects</b>: Erases all the elements with the given key.
+ //! according to the comparison functor "comp".
+ //! Disposer::operator()(pointer) is called for the removed elements.
+ //!
+ //! <b>Returns</b>: The number of erased elements.
+ //!
+ //! <b>Complexity</b>: O(log(size() + N).
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators
+ //! to the erased elements.
+ template<class KeyType, class KeyValueCompare, class Disposer>
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
+ /// @cond
+ , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
+ /// @endcond
+ )
+ {
+ std::pair<iterator,iterator> p = this->equal_range(key, comp);
+ size_type n;
+ this->private_erase(p.first, p.second, n, disposer);
+ return n;
+ }
+
+ //! <b>Effects</b>: Erases all of the elements.
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements on the container.
+ //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
+ //! to the erased elements. No destructors are called.
+ void clear()
+ {
+ if(safemode_or_autounlink){
+ this->clear_and_dispose(detail::null_disposer());
+ }
+ else{
+ node_algorithms::init_header(this->header_ptr());
+ this->sz_traits().set_size(0);
+ }
+ }
+
+ //! <b>Effects</b>: Erases all of the elements calling disposer(p) for
+ //! each node to be erased.
+ //! <b>Complexity</b>: Average complexity for is at most O(log(size() + N)),
+ //! where N is the number of elements in the container.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
+ //! to the erased elements. Calls N times to disposer functor.
+ template<class Disposer>
+ void clear_and_dispose(Disposer disposer)
+ {
+ node_algorithms::clear_and_dispose(this->header_ptr()
+ , detail::node_disposer<Disposer, value_traits, AlgoType>(disposer, &this->get_value_traits()));
+ node_algorithms::init_header(this->header_ptr());
+ this->sz_traits().set_size(0);
+ }
+
+ //! <b>Effects</b>: Returns the number of contained elements with the given value
+ //!
+ //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
+ //! to number of objects with the given value.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ size_type count(const_reference value) const
+ { return size_type(this->count(value, this->comp())); }
+
+ //! <b>Effects</b>: Returns the number of contained elements with the given key
+ //!
+ //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
+ //! to number of objects with the given key.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ template<class KeyType, class KeyValueCompare>
+ size_type count(const KeyType &key, KeyValueCompare comp) const
+ {
+ std::pair<const_iterator, const_iterator> ret = this->equal_range(key, comp);
+ return size_type(std::distance(ret.first, ret.second));
+ }
+
+ #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+ //Add non-const overloads to theoretically const members
+ //as some algorithms have different behavior when non-const versions are used (like splay trees).
+ size_type count(const_reference value)
+ { return size_type(this->count(value, this->comp())); }
+
+ template<class KeyType, class KeyValueCompare>
+ size_type count(const KeyType &key, KeyValueCompare comp)
+ {
+ std::pair<const_iterator, const_iterator> ret = this->equal_range(key, comp);
+ return size_type(std::distance(ret.first, ret.second));
+ }
+
+ #else //defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+ //! <b>Effects</b>: Returns an iterator to the first element whose
+ //! key is not less than k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ iterator lower_bound(const_reference value);
+
+ //! <b>Effects</b>: Returns an iterator to the first element whose
+ //! key is not less than k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ const_iterator lower_bound(const_reference value) const;
+
+ //! <b>Effects</b>: Returns an iterator to the first element whose
+ //! key is not less than k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ template<class KeyType, class KeyValueCompare>
+ iterator lower_bound(const KeyType &key, KeyValueCompare comp);
+
+ //! <b>Effects</b>: Returns a const iterator to the first element whose
+ //! key is not less than k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ template<class KeyType, class KeyValueCompare>
+ const_iterator lower_bound(const KeyType &key, KeyValueCompare comp) const;
+
+ //! <b>Effects</b>: Returns an iterator to the first element whose
+ //! key is greater than k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ iterator upper_bound(const_reference value);
+
+ //! <b>Effects</b>: Returns an iterator to the first element whose
+ //! key is greater than k according to comp or end() if that element
+ //! does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ template<class KeyType, class KeyValueCompare>
+ iterator upper_bound(const KeyType &key, KeyValueCompare comp);
+
+ //! <b>Effects</b>: Returns an iterator to the first element whose
+ //! key is greater than k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ const_iterator upper_bound(const_reference value) const;
+
+ //! <b>Effects</b>: Returns an iterator to the first element whose
+ //! key is greater than k according to comp or end() if that element
+ //! does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ template<class KeyType, class KeyValueCompare>
+ const_iterator upper_bound(const KeyType &key, KeyValueCompare comp) const;
+
+ //! <b>Effects</b>: Finds an iterator to the first element whose key is
+ //! k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ iterator find(const_reference value);
+
+ //! <b>Effects</b>: Finds an iterator to the first element whose key is
+ //! k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ template<class KeyType, class KeyValueCompare>
+ iterator find(const KeyType &key, KeyValueCompare comp);
+
+ //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
+ //! k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ const_iterator find(const_reference value) const;
+
+ //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
+ //! k or end() if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ template<class KeyType, class KeyValueCompare>
+ const_iterator find(const KeyType &key, KeyValueCompare comp) const;
+
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k or
+ //! an empty range that indicates the position where those elements would be
+ //! if they there is no elements with key k.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ std::pair<iterator,iterator> equal_range(const_reference value);
+
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k or
+ //! an empty range that indicates the position where those elements would be
+ //! if they there is no elements with key k.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator,iterator> equal_range(const KeyType &key, KeyValueCompare comp);
+
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k or
+ //! an empty range that indicates the position where those elements would be
+ //! if they there is no elements with key k.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ std::pair<const_iterator, const_iterator>
+ equal_range(const_reference value) const;
+
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k or
+ //! an empty range that indicates the position where those elements would be
+ //! if they there is no elements with key k.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const KeyType &key, KeyValueCompare comp) const;
+
+ //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
+ //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
+ //!
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
+ //!
+ //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
+ //!
+ //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ //!
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
+ //! and lower_bound for lower_value and upper_value.
+ //!
+ //! <b>Note</b>: Experimental function, the interface might change in future releases.
+ std::pair<iterator,iterator> bounded_range
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the container.
+ //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
+ //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
+ //!
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
+ //!
+ //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
+ //!
+ //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ //!
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
+ //! and lower_bound for lower_key and upper_key.
+ //!
+ //! <b>Note</b>: Experimental function, the interface might change in future releases.
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator,iterator> bounded_range
+ (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
+ //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
+ //!
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
+ //!
+ //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
+ //!
+ //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `value_compare` throws.
+ //!
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
+ //! and lower_bound for lower_value and upper_value.
+ //!
+ //! <b>Note</b>: Experimental function, the interface might change in future releases.
+ std::pair<const_iterator,const_iterator> bounded_range
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the container.
+ //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
+ //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
+ //!
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
+ //!
+ //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
+ //!
+ //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If `comp` throws.
+ //!
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
+ //! and lower_bound for lower_key and upper_key.
+ //!
+ //! <b>Note</b>: Experimental function, the interface might change in future releases.
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator,const_iterator> bounded_range
+ (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
+
+ //! <b>Requires</b>: value must be an lvalue and shall be in a set of
+ //! appropriate type. Otherwise the behavior is undefined.
+ //!
+ //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
+ //! that points to the value
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This static function is available only if the <i>value traits</i>
+ //! is stateless.
+ static iterator s_iterator_to(reference value);
+
+ //! <b>Requires</b>: value must be an lvalue and shall be in a set of
+ //! appropriate type. Otherwise the behavior is undefined.
+ //!
+ //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
+ //! set that points to the value
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This static function is available only if the <i>value traits</i>
+ //! is stateless.
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! <b>Requires</b>: value must be an lvalue and shall be in a set of
+ //! appropriate type. Otherwise the behavior is undefined.
+ //!
+ //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
+ //! that points to the value
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ iterator iterator_to(reference value);
+
+ //! <b>Requires</b>: value must be an lvalue and shall be in a set of
+ //! appropriate type. Otherwise the behavior is undefined.
+ //!
+ //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
+ //! set that points to the value
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ const_iterator iterator_to(const_reference value) const;
+
+ //! <b>Requires</b>: value shall not be in a container.
+ //!
+ //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
+ //! state.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Note</b>: This function puts the hook in the well-known default state
+ //! used by auto_unlink and safe hooks.
+ static void init_node(reference value);
+
+ #endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+ //! <b>Effects</b>: Unlinks the leftmost node from the container.
+ //!
+ //! <b>Complexity</b>: Average complexity is constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Notes</b>: This function breaks the container and the container can
+ //! only be used for more unlink_leftmost_without_rebalance calls.
+ //! This function is normally used to achieve a step by step
+ //! controlled destruction of the container.
+ pointer unlink_leftmost_without_rebalance()
+ {
+ node_ptr to_be_disposed(node_algorithms::unlink_leftmost_without_rebalance
+ (this->header_ptr()));
+ if(!to_be_disposed)
+ return 0;
+ this->sz_traits().decrement();
+ if(safemode_or_autounlink)//If this is commented does not work with normal_link
+ node_algorithms::init(to_be_disposed);
+ return this->get_value_traits().to_value_ptr(to_be_disposed);
+ }
+
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+ //! <b>Requires</b>: replace_this must be a valid iterator of *this
+ //! and with_this must not be inserted in any container.
+ //!
+ //! <b>Effects</b>: Replaces replace_this in its position in the
+ //! container with with_this. The container does not need to be rebalanced.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This function will break container ordering invariants if
+ //! with_this is not equivalent to *replace_this according to the
+ //! ordering rules. This function is faster than erasing and inserting
+ //! the node, since no rebalancing or comparison is needed.
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! <b>Effects</b>: Rebalances the tree.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Linear.
+ void rebalance();
+
+ //! <b>Requires</b>: old_root is a node of a tree.
+ //!
+ //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
+ //!
+ //! <b>Returns</b>: The new root of the subtree.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Linear to the elements in the subtree.
+ iterator rebalance_subtree(iterator root);
+
+ #endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+ //! <b>Effects</b>: removes "value" from the container.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic time.
+ //!
+ //! <b>Note</b>: This static function is only usable with non-constant
+ //! time size containers that have stateless comparison functors.
+ //!
+ //! If the user calls
+ //! this function with a constant time size container or stateful comparison
+ //! functor a compilation error will be issued.
+ static void remove_node(reference value)
+ {
+ BOOST_STATIC_ASSERT((!constant_time_size));
+ node_ptr to_remove(value_traits::to_node_ptr(value));
+ node_algorithms::unlink(to_remove);
+ if(safemode_or_autounlink)
+ node_algorithms::init(to_remove);
+ }
+
+ /// @cond
+ private:
+ template<class Disposer>
+ iterator private_erase(const_iterator b, const_iterator e, size_type &n, Disposer disposer)
+ {
+ for(n = 0; b != e; ++n)
+ this->erase_and_dispose(b++, disposer);
+ return b.unconst();
+ }
+
+ iterator private_erase(const_iterator b, const_iterator e, size_type &n)
+ {
+ for(n = 0; b != e; ++n)
+ this->erase(b++);
+ return b.unconst();
+ }
+ /// @endcond
+};
+
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class VoidKeyComp, class SizeType, bool ConstantTimeSize, algo_types AlgoType, typename HeaderHolder>
+#endif
+inline bool operator<
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+(const bstree_impl<T, Options...> &x, const bstree_impl<T, Options...> &y)
+#else
+( const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &x
+, const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &y)
+#endif
+{ return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
+
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class VoidKeyComp, class SizeType, bool ConstantTimeSize, algo_types AlgoType, typename HeaderHolder>
+#endif
+bool operator==
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+(const bstree_impl<T, Options...> &x, const bstree_impl<T, Options...> &y)
+#else
+( const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &x
+, const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &y)
+#endif
+{
+ typedef bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> tree_type;
+ typedef typename tree_type::const_iterator const_iterator;
+
+ if(tree_type::constant_time_size && x.size() != y.size()){
+ return false;
+ }
+ const_iterator end1 = x.end();
+ const_iterator i1 = x.begin();
+ const_iterator i2 = y.begin();
+ if(tree_type::constant_time_size){
+ while (i1 != end1 && *i1 == *i2) {
+ ++i1;
+ ++i2;
+ }
+ return i1 == end1;
+ }
+ else{
+ const_iterator end2 = y.end();
+ while (i1 != end1 && i2 != end2 && *i1 == *i2) {
+ ++i1;
+ ++i2;
+ }
+ return i1 == end1 && i2 == end2;
+ }
+}
+
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class VoidKeyComp, class SizeType, bool ConstantTimeSize, algo_types AlgoType, typename HeaderHolder>
+#endif
+inline bool operator!=
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+(const bstree_impl<T, Options...> &x, const bstree_impl<T, Options...> &y)
+#else
+( const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &x
+, const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &y)
+#endif
+{ return !(x == y); }
+
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class VoidKeyComp, class SizeType, bool ConstantTimeSize, algo_types AlgoType, typename HeaderHolder>
+#endif
+inline bool operator>
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+(const bstree_impl<T, Options...> &x, const bstree_impl<T, Options...> &y)
+#else
+( const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &x
+, const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &y)
+#endif
+{ return y < x; }
+
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class VoidKeyComp, class SizeType, bool ConstantTimeSize, algo_types AlgoType, typename HeaderHolder>
+#endif
+inline bool operator<=
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+(const bstree_impl<T, Options...> &x, const bstree_impl<T, Options...> &y)
+#else
+( const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &x
+, const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &y)
+#endif
+{ return !(y < x); }
+
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class VoidKeyComp, class SizeType, bool ConstantTimeSize, algo_types AlgoType, typename HeaderHolder>
+#endif
+inline bool operator>=
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+(const bstree_impl<T, Options...> &x, const bstree_impl<T, Options...> &y)
+#else
+( const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &x
+, const bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &y)
+#endif
+{ return !(x < y); }
+
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+template<class T, class ...Options>
+#else
+template<class ValueTraits, class VoidKeyComp, class SizeType, bool ConstantTimeSize, algo_types AlgoType, typename HeaderHolder>
+#endif
+inline void swap
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+(bstree_impl<T, Options...> &x, bstree_impl<T, Options...> &y)
+#else
+( bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &x
+, bstree_impl<ValueTraits, VoidKeyComp, SizeType, ConstantTimeSize, AlgoType, HeaderHolder> &y)
+#endif
+{ x.swap(y); }
+
+//! Helper metafunction to define a \c bstree that yields to the same type when the
+//! same options (either explicitly or implicitly) are used.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+template<class T, class ...Options>
+#else
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
+#endif
+struct make_bstree
+{
+ /// @cond
+ typedef typename pack_options
+ < bstree_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
+ typedef bstree_impl
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , BsTreeAlgorithms
+ , header_holder_type
+ > implementation_defined;
+ /// @endcond
+ typedef implementation_defined type;
+};
+
+
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+template<class T, class O1, class O2, class O3, class O4, class O5>
+#else
+template<class T, class ...Options>
+#endif
+class bstree
+ : public make_bstree<T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type
+{
+ typedef typename make_bstree
+ <T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type Base;
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bstree)
+
+ public:
+ typedef typename Base::value_compare value_compare;
+ typedef typename Base::value_traits value_traits;
+ typedef typename Base::iterator iterator;
+ typedef typename Base::const_iterator const_iterator;
+
+ //Assert if passed value traits are compatible with the type
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
+
+ bstree( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : Base(cmp, v_traits)
+ {}
+
+ template<class Iterator>
+ bstree( bool unique, Iterator b, Iterator e
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : Base(unique, b, e, cmp, v_traits)
+ {}
+
+ bstree(BOOST_RV_REF(bstree) x)
+ : Base(::boost::move(static_cast<Base&>(x)))
+ {}
+
+ bstree& operator=(BOOST_RV_REF(bstree) x)
+ { return static_cast<bstree &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
+
+ static bstree &container_from_end_iterator(iterator end_iterator)
+ { return static_cast<bstree &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static const bstree &container_from_end_iterator(const_iterator end_iterator)
+ { return static_cast<const bstree &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static bstree &container_from_iterator(iterator it)
+ { return static_cast<bstree &>(Base::container_from_iterator(it)); }
+
+ static const bstree &container_from_iterator(const_iterator it)
+ { return static_cast<const bstree &>(Base::container_from_iterator(it)); }
+};
+
+#endif
+} //namespace intrusive
+} //namespace boost
+
+#include <boost/intrusive/detail/config_end.hpp>
+
+#endif //BOOST_INTRUSIVE_BSTREE_HPP
diff --git a/3party/boost/boost/intrusive/bstree_algorithms.hpp b/3party/boost/boost/intrusive/bstree_algorithms.hpp
new file mode 100644
index 0000000000..d155d6d9ac
--- /dev/null
+++ b/3party/boost/boost/intrusive/bstree_algorithms.hpp
@@ -0,0 +1,2017 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2007-2013
+//
+// 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/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_BSTREE_ALGORITHMS_HPP
+#define BOOST_INTRUSIVE_BSTREE_ALGORITHMS_HPP
+
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
+#include <boost/intrusive/detail/assert.hpp>
+#include <cstddef>
+#include <boost/intrusive/detail/utilities.hpp>
+#include <boost/intrusive/pointer_traits.hpp>
+
+namespace boost {
+namespace intrusive {
+
+/// @cond
+
+//! This type is the information that will be filled by insert_unique_check
+template <class NodePtr>
+struct insert_commit_data_t
+{
+ insert_commit_data_t()
+ : link_left(false)
+ , node()
+ {}
+ bool link_left;
+ NodePtr node;
+};
+
+template <class NodePtr>
+struct data_for_rebalance_t
+{
+ NodePtr x;
+ NodePtr x_parent;
+ NodePtr y;
+};
+
+/// @endcond
+
+
+
+//! This is an implementation of a binary search tree.
+//! A node in the search tree has references to its children and its parent. This
+//! is to allow traversal of the whole tree from a given node making the
+//! implementation of iterator a pointer to a node.
+//! At the top of the tree a node is used specially. This node's parent pointer
+//! is pointing to the root of the tree. Its left pointer points to the
+//! leftmost node in the tree and the right pointer to the rightmost one.
+//! This node is used to represent the end-iterator.
+//!
+//! +---------+
+//! header------------------------------>| |
+//! | |
+//! +----------(left)--------| |--------(right)---------+
+//! | +---------+ |
+//! | | |
+//! | | (parent) |
+//! | | |
+//! | | |
+//! | +---------+ |
+//! root of tree ..|......................> | | |
+//! | | D | |
+//! | | | |
+//! | +-------+---------+-------+ |
+//! | | | |
+//! | | | |
+//! | | | |
+//! | | | |
+//! | | | |
+//! | +---------+ +---------+ |
+//! | | | | | |
+//! | | B | | F | |
+//! | | | | | |
+//! | +--+---------+--+ +--+---------+--+ |
+//! | | | | | |
+//! | | | | | |
+//! | | | | | |
+//! | +---+-----+ +-----+---+ +---+-----+ +-----+---+ |
+//! +-->| | | | | | | |<--+
+//! | A | | C | | E | | G |
+//! | | | | | | | |
+//! +---------+ +---------+ +---------+ +---------+
+//!
+//! bstree_algorithms is configured with a NodeTraits class, which encapsulates the
+//! information about the node to be manipulated. NodeTraits must support the
+//! following interface:
+//!
+//! <b>Typedefs</b>:
+//!
+//! <tt>node</tt>: The type of the node that forms the binary search tree
+//!
+//! <tt>node_ptr</tt>: A pointer to a node
+//!
+//! <tt>const_node_ptr</tt>: A pointer to a const node
+//!
+//! <b>Static functions</b>:
+//!
+//! <tt>static node_ptr get_parent(const_node_ptr n);</tt>
+//!
+//! <tt>static void set_parent(node_ptr n, node_ptr parent);</tt>
+//!
+//! <tt>static node_ptr get_left(const_node_ptr n);</tt>
+//!
+//! <tt>static void set_left(node_ptr n, node_ptr left);</tt>
+//!
+//! <tt>static node_ptr get_right(const_node_ptr n);</tt>
+//!
+//! <tt>static void set_right(node_ptr n, node_ptr right);</tt>
+template<class NodeTraits>
+class bstree_algorithms
+{
+ public:
+ typedef typename NodeTraits::node node;
+ typedef NodeTraits node_traits;
+ typedef typename NodeTraits::node_ptr node_ptr;
+ typedef typename NodeTraits::const_node_ptr const_node_ptr;
+ typedef insert_commit_data_t<node_ptr> insert_commit_data;
+ typedef data_for_rebalance_t<node_ptr> data_for_rebalance;
+
+ /// @cond
+
+ private:
+ template<class Disposer>
+ struct dispose_subtree_disposer
+ {
+ dispose_subtree_disposer(Disposer &disp, const node_ptr & subtree)
+ : disposer_(&disp), subtree_(subtree)
+ {}
+
+ void release()
+ { disposer_ = 0; }
+
+ ~dispose_subtree_disposer()
+ {
+ if(disposer_){
+ dispose_subtree(subtree_, *disposer_);
+ }
+ }
+ Disposer *disposer_;
+ const node_ptr subtree_;
+ };
+
+ /// @endcond
+
+ public:
+ //! <b>Requires</b>: 'header' is the header node of a tree.
+ //!
+ //! <b>Effects</b>: Returns the first node of the tree, the header if the tree is empty.
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr begin_node(const const_node_ptr & header)
+ { return node_traits::get_left(header); }
+
+ //! <b>Requires</b>: 'header' is the header node of a tree.
+ //!
+ //! <b>Effects</b>: Returns the header of the tree.
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr end_node(const const_node_ptr & header)
+ { return detail::uncast(header); }
+
+ //! <b>Requires</b>: 'header' is the header node of a tree.
+ //!
+ //! <b>Effects</b>: Returns the root of the tree if any, header otherwise
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr root_node(const const_node_ptr & header)
+ {
+ node_ptr p = node_traits::get_parent(header);
+ return p ? p : detail::uncast(header);
+ }
+
+ //! <b>Requires</b>: 'node' is a node of the tree or a node initialized
+ //! by init(...) or init_node.
+ //!
+ //! <b>Effects</b>: Returns true if the node is initialized by init() or init_node().
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static bool unique(const const_node_ptr & node)
+ { return !NodeTraits::get_parent(node); }
+
+ //! <b>Requires</b>: 'node' is a node of the tree or a header node.
+ //!
+ //! <b>Effects</b>: Returns the header of the tree.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr get_header(const const_node_ptr & node)
+ {
+ node_ptr n(detail::uncast(node));
+ node_ptr p(NodeTraits::get_parent(node));
+ //If p is null, then n is the header of an empty tree
+ if(p){
+ //Non-empty tree, check if n is neither root nor header
+ node_ptr pp(NodeTraits::get_parent(p));
+ //If granparent is not equal to n, then n is neither root nor header,
+ //the try the fast path
+ if(n != pp){
+ do{
+ n = p;
+ p = pp;
+ pp = NodeTraits::get_parent(pp);
+ }while(n != pp);
+ n = p;
+ }
+ //Check if n is root or header when size() > 0
+ else if(!is_header(n)){
+ n = p;
+ }
+ }
+ return n;
+ /*
+ node_ptr h = detail::uncast(node);
+ node_ptr p = NodeTraits::get_parent(node);
+ if(p){
+ while(!is_header(p))
+ p = NodeTraits::get_parent(p);
+ return p;
+ }
+ else{
+ return h;
+ }*/
+ }
+
+ //! <b>Requires</b>: node1 and node2 can't be header nodes
+ //! of two trees.
+ //!
+ //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
+ //! in the position node2 before the function. node2 will be inserted in the
+ //! position node1 had before the function.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This function will break container ordering invariants if
+ //! node1 and node2 are not equivalent according to the ordering rules.
+ //!
+ //!Experimental function
+ static void swap_nodes(const node_ptr & node1, const node_ptr & node2)
+ {
+ if(node1 == node2)
+ return;
+
+ node_ptr header1(get_header(node1)), header2(get_header(node2));
+ swap_nodes(node1, header1, node2, header2);
+ }
+
+ //! <b>Requires</b>: node1 and node2 can't be header nodes
+ //! of two trees with header header1 and header2.
+ //!
+ //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
+ //! in the position node2 before the function. node2 will be inserted in the
+ //! position node1 had before the function.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This function will break container ordering invariants if
+ //! node1 and node2 are not equivalent according to the ordering rules.
+ //!
+ //!Experimental function
+ static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2)
+ {
+ if(node1 == node2)
+ return;
+
+ //node1 and node2 must not be header nodes
+ //BOOST_INTRUSIVE_INVARIANT_ASSERT((header1 != node1 && header2 != node2));
+ if(header1 != header2){
+ //Update header1 if necessary
+ if(node1 == NodeTraits::get_left(header1)){
+ NodeTraits::set_left(header1, node2);
+ }
+
+ if(node1 == NodeTraits::get_right(header1)){
+ NodeTraits::set_right(header1, node2);
+ }
+
+ if(node1 == NodeTraits::get_parent(header1)){
+ NodeTraits::set_parent(header1, node2);
+ }
+
+ //Update header2 if necessary
+ if(node2 == NodeTraits::get_left(header2)){
+ NodeTraits::set_left(header2, node1);
+ }
+
+ if(node2 == NodeTraits::get_right(header2)){
+ NodeTraits::set_right(header2, node1);
+ }
+
+ if(node2 == NodeTraits::get_parent(header2)){
+ NodeTraits::set_parent(header2, node1);
+ }
+ }
+ else{
+ //If both nodes are from the same tree
+ //Update header if necessary
+ if(node1 == NodeTraits::get_left(header1)){
+ NodeTraits::set_left(header1, node2);
+ }
+ else if(node2 == NodeTraits::get_left(header2)){
+ NodeTraits::set_left(header2, node1);
+ }
+
+ if(node1 == NodeTraits::get_right(header1)){
+ NodeTraits::set_right(header1, node2);
+ }
+ else if(node2 == NodeTraits::get_right(header2)){
+ NodeTraits::set_right(header2, node1);
+ }
+
+ if(node1 == NodeTraits::get_parent(header1)){
+ NodeTraits::set_parent(header1, node2);
+ }
+ else if(node2 == NodeTraits::get_parent(header2)){
+ NodeTraits::set_parent(header2, node1);
+ }
+
+ //Adjust data in nodes to be swapped
+ //so that final link swap works as expected
+ if(node1 == NodeTraits::get_parent(node2)){
+ NodeTraits::set_parent(node2, node2);
+
+ if(node2 == NodeTraits::get_right(node1)){
+ NodeTraits::set_right(node1, node1);
+ }
+ else{
+ NodeTraits::set_left(node1, node1);
+ }
+ }
+ else if(node2 == NodeTraits::get_parent(node1)){
+ NodeTraits::set_parent(node1, node1);
+
+ if(node1 == NodeTraits::get_right(node2)){
+ NodeTraits::set_right(node2, node2);
+ }
+ else{
+ NodeTraits::set_left(node2, node2);
+ }
+ }
+ }
+
+ //Now swap all the links
+ node_ptr temp;
+ //swap left link
+ temp = NodeTraits::get_left(node1);
+ NodeTraits::set_left(node1, NodeTraits::get_left(node2));
+ NodeTraits::set_left(node2, temp);
+ //swap right link
+ temp = NodeTraits::get_right(node1);
+ NodeTraits::set_right(node1, NodeTraits::get_right(node2));
+ NodeTraits::set_right(node2, temp);
+ //swap parent link
+ temp = NodeTraits::get_parent(node1);
+ NodeTraits::set_parent(node1, NodeTraits::get_parent(node2));
+ NodeTraits::set_parent(node2, temp);
+
+ //Now adjust adjacent nodes for newly inserted node 1
+ if((temp = NodeTraits::get_left(node1))){
+ NodeTraits::set_parent(temp, node1);
+ }
+ if((temp = NodeTraits::get_right(node1))){
+ NodeTraits::set_parent(temp, node1);
+ }
+ if((temp = NodeTraits::get_parent(node1)) &&
+ //The header has been already updated so avoid it
+ temp != header2){
+ if(NodeTraits::get_left(temp) == node2){
+ NodeTraits::set_left(temp, node1);
+ }
+ if(NodeTraits::get_right(temp) == node2){
+ NodeTraits::set_right(temp, node1);
+ }
+ }
+ //Now adjust adjacent nodes for newly inserted node 2
+ if((temp = NodeTraits::get_left(node2))){
+ NodeTraits::set_parent(temp, node2);
+ }
+ if((temp = NodeTraits::get_right(node2))){
+ NodeTraits::set_parent(temp, node2);
+ }
+ if((temp = NodeTraits::get_parent(node2)) &&
+ //The header has been already updated so avoid it
+ temp != header1){
+ if(NodeTraits::get_left(temp) == node1){
+ NodeTraits::set_left(temp, node2);
+ }
+ if(NodeTraits::get_right(temp) == node1){
+ NodeTraits::set_right(temp, node2);
+ }
+ }
+ }
+
+ //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
+ //! and new_node must not be inserted in a tree.
+ //!
+ //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
+ //! tree with new_node. The tree does not need to be rebalanced
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This function will break container ordering invariants if
+ //! new_node is not equivalent to node_to_be_replaced according to the
+ //! ordering rules. This function is faster than erasing and inserting
+ //! the node, since no rebalancing and comparison is needed. Experimental function
+ static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node)
+ {
+ if(node_to_be_replaced == new_node)
+ return;
+ replace_node(node_to_be_replaced, get_header(node_to_be_replaced), new_node);
+ }
+
+ //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
+ //! with header "header" and new_node must not be inserted in a tree.
+ //!
+ //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
+ //! tree with new_node. The tree does not need to be rebalanced
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: This function will break container ordering invariants if
+ //! new_node is not equivalent to node_to_be_replaced according to the
+ //! ordering rules. This function is faster than erasing and inserting
+ //! the node, since no rebalancing or comparison is needed. Experimental function
+ static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node)
+ {
+ if(node_to_be_replaced == new_node)
+ return;
+
+ //Update header if necessary
+ if(node_to_be_replaced == NodeTraits::get_left(header)){
+ NodeTraits::set_left(header, new_node);
+ }
+
+ if(node_to_be_replaced == NodeTraits::get_right(header)){
+ NodeTraits::set_right(header, new_node);
+ }
+
+ if(node_to_be_replaced == NodeTraits::get_parent(header)){
+ NodeTraits::set_parent(header, new_node);
+ }
+
+ //Now set data from the original node
+ node_ptr temp;
+ NodeTraits::set_left(new_node, NodeTraits::get_left(node_to_be_replaced));
+ NodeTraits::set_right(new_node, NodeTraits::get_right(node_to_be_replaced));
+ NodeTraits::set_parent(new_node, NodeTraits::get_parent(node_to_be_replaced));
+
+ //Now adjust adjacent nodes for newly inserted node
+ if((temp = NodeTraits::get_left(new_node))){
+ NodeTraits::set_parent(temp, new_node);
+ }
+ if((temp = NodeTraits::get_right(new_node))){
+ NodeTraits::set_parent(temp, new_node);
+ }
+ if((temp = NodeTraits::get_parent(new_node)) &&
+ //The header has been already updated so avoid it
+ temp != header){
+ if(NodeTraits::get_left(temp) == node_to_be_replaced){
+ NodeTraits::set_left(temp, new_node);
+ }
+ if(NodeTraits::get_right(temp) == node_to_be_replaced){
+ NodeTraits::set_right(temp, new_node);
+ }
+ }
+ }
+
+ //! <b>Requires</b>: 'node' is a node from the tree except the header.
+ //!
+ //! <b>Effects</b>: Returns the next node of the tree.
+ //!
+ //! <b>Complexity</b>: Average constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr next_node(const node_ptr & node)
+ {
+ node_ptr const n_right(NodeTraits::get_right(node));
+ if(n_right){
+ return minimum(n_right);
+ }
+ else {
+ node_ptr n(node);
+ node_ptr p(NodeTraits::get_parent(n));
+ while(n == NodeTraits::get_right(p)){
+ n = p;
+ p = NodeTraits::get_parent(p);
+ }
+ return NodeTraits::get_right(n) != p ? p : n;
+ }
+ }
+
+ //! <b>Requires</b>: 'node' is a node from the tree except the leftmost node.
+ //!
+ //! <b>Effects</b>: Returns the previous node of the tree.
+ //!
+ //! <b>Complexity</b>: Average constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr prev_node(const node_ptr & node)
+ {
+ if(is_header(node)){
+ return NodeTraits::get_right(node);
+ //return maximum(NodeTraits::get_parent(node));
+ }
+ else if(NodeTraits::get_left(node)){
+ return maximum(NodeTraits::get_left(node));
+ }
+ else {
+ node_ptr p(node);
+ node_ptr x = NodeTraits::get_parent(p);
+ while(p == NodeTraits::get_left(x)){
+ p = x;
+ x = NodeTraits::get_parent(x);
+ }
+ return x;
+ }
+ }
+
+ //! <b>Requires</b>: 'node' is a node of a tree but not the header.
+ //!
+ //! <b>Effects</b>: Returns the minimum node of the subtree starting at p.
+ //!
+ //! <b>Complexity</b>: Logarithmic to the size of the subtree.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr minimum(node_ptr node)
+ {
+ for(node_ptr p_left = NodeTraits::get_left(node)
+ ;p_left
+ ;p_left = NodeTraits::get_left(node)){
+ node = p_left;
+ }
+ return node;
+ }
+
+ //! <b>Requires</b>: 'node' is a node of a tree but not the header.
+ //!
+ //! <b>Effects</b>: Returns the maximum node of the subtree starting at p.
+ //!
+ //! <b>Complexity</b>: Logarithmic to the size of the subtree.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr maximum(node_ptr node)
+ {
+ for(node_ptr p_right = NodeTraits::get_right(node)
+ ;p_right
+ ;p_right = NodeTraits::get_right(node)){
+ node = p_right;
+ }
+ return node;
+ }
+
+ //! <b>Requires</b>: 'node' must not be part of any tree.
+ //!
+ //! <b>Effects</b>: After the function unique(node) == true.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
+ static void init(const node_ptr & node)
+ {
+ NodeTraits::set_parent(node, node_ptr());
+ NodeTraits::set_left(node, node_ptr());
+ NodeTraits::set_right(node, node_ptr());
+ };
+
+ //! <b>Effects</b>: Returns true if node is in the same state as if called init(node)
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static bool inited(const const_node_ptr & node)
+ {
+ return !NodeTraits::get_parent(node) &&
+ !NodeTraits::get_left(node) &&
+ !NodeTraits::get_right(node) ;
+ };
+
+ //! <b>Requires</b>: node must not be part of any tree.
+ //!
+ //! <b>Effects</b>: Initializes the header to represent an empty tree.
+ //! unique(header) == true.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
+ static void init_header(const node_ptr & header)
+ {
+ NodeTraits::set_parent(header, node_ptr());
+ NodeTraits::set_left(header, header);
+ NodeTraits::set_right(header, header);
+ }
+
+ //! <b>Requires</b>: "disposer" must be an object function
+ //! taking a node_ptr parameter and shouldn't throw.
+ //!
+ //! <b>Effects</b>: Empties the target tree calling
+ //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
+ //! except the header.
+ //!
+ //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
+ //! number of elements of tree target tree when calling this function.
+ //!
+ //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ template<class Disposer>
+ static void clear_and_dispose(const node_ptr & header, Disposer disposer)
+ {
+ node_ptr source_root = NodeTraits::get_parent(header);
+ if(!source_root)
+ return;
+ dispose_subtree(source_root, disposer);
+ init_header(header);
+ }
+
+ //! <b>Requires</b>: header is the header of a tree.
+ //!
+ //! <b>Effects</b>: Unlinks the leftmost node from the tree, and
+ //! updates the header link to the new leftmost node.
+ //!
+ //! <b>Complexity</b>: Average complexity is constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Notes</b>: This function breaks the tree and the tree can
+ //! only be used for more unlink_leftmost_without_rebalance calls.
+ //! This function is normally used to achieve a step by step
+ //! controlled destruction of the tree.
+ static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header)
+ {
+ node_ptr leftmost = NodeTraits::get_left(header);
+ if (leftmost == header)
+ return node_ptr();
+ node_ptr leftmost_parent(NodeTraits::get_parent(leftmost));
+ node_ptr leftmost_right (NodeTraits::get_right(leftmost));
+ bool is_root = leftmost_parent == header;
+
+ if (leftmost_right){
+ NodeTraits::set_parent(leftmost_right, leftmost_parent);
+ NodeTraits::set_left(header, bstree_algorithms::minimum(leftmost_right));
+
+ if (is_root)
+ NodeTraits::set_parent(header, leftmost_right);
+ else
+ NodeTraits::set_left(NodeTraits::get_parent(header), leftmost_right);
+ }
+ else if (is_root){
+ NodeTraits::set_parent(header, node_ptr());
+ NodeTraits::set_left(header, header);
+ NodeTraits::set_right(header, header);
+ }
+ else{
+ NodeTraits::set_left(leftmost_parent, node_ptr());
+ NodeTraits::set_left(header, leftmost_parent);
+ }
+ return leftmost;
+ }
+
+ //! <b>Requires</b>: node is a node of the tree but it's not the header.
+ //!
+ //! <b>Effects</b>: Returns the number of nodes of the subtree.
+ //!
+ //! <b>Complexity</b>: Linear time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static std::size_t size(const const_node_ptr & header)
+ {
+ node_ptr beg(begin_node(header));
+ node_ptr end(end_node(header));
+ std::size_t i = 0;
+ for(;beg != end; beg = next_node(beg)) ++i;
+ return i;
+ }
+
+ //! <b>Requires</b>: header1 and header2 must be the header nodes
+ //! of two trees.
+ //!
+ //! <b>Effects</b>: Swaps two trees. After the function header1 will contain
+ //! links to the second tree and header2 will have links to the first tree.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static void swap_tree(const node_ptr & header1, const node_ptr & header2)
+ {
+ if(header1 == header2)
+ return;
+
+ node_ptr tmp;
+
+ //Parent swap
+ tmp = NodeTraits::get_parent(header1);
+ NodeTraits::set_parent(header1, NodeTraits::get_parent(header2));
+ NodeTraits::set_parent(header2, tmp);
+ //Left swap
+ tmp = NodeTraits::get_left(header1);
+ NodeTraits::set_left(header1, NodeTraits::get_left(header2));
+ NodeTraits::set_left(header2, tmp);
+ //Right swap
+ tmp = NodeTraits::get_right(header1);
+ NodeTraits::set_right(header1, NodeTraits::get_right(header2));
+ NodeTraits::set_right(header2, tmp);
+
+ //Now test parent
+ node_ptr h1_parent(NodeTraits::get_parent(header1));
+ if(h1_parent){
+ NodeTraits::set_parent(h1_parent, header1);
+ }
+ else{
+ NodeTraits::set_left(header1, header1);
+ NodeTraits::set_right(header1, header1);
+ }
+
+ node_ptr h2_parent(NodeTraits::get_parent(header2));
+ if(h2_parent){
+ NodeTraits::set_parent(h2_parent, header2);
+ }
+ else{
+ NodeTraits::set_left(header2, header2);
+ NodeTraits::set_right(header2, header2);
+ }
+ }
+
+ //! <b>Requires</b>: p is a node of a tree.
+ //!
+ //! <b>Effects</b>: Returns true if p is the header of the tree.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static bool is_header(const const_node_ptr & p)
+ {
+ node_ptr p_left (NodeTraits::get_left(p));
+ node_ptr p_right(NodeTraits::get_right(p));
+ if(!NodeTraits::get_parent(p) || //Header condition when empty tree
+ (p_left && p_right && //Header always has leftmost and rightmost
+ (p_left == p_right || //Header condition when only node
+ (NodeTraits::get_parent(p_left) != p ||
+ NodeTraits::get_parent(p_right) != p ))
+ //When tree size > 1 headers can't be leftmost's
+ //and rightmost's parent
+ )){
+ return true;
+ }
+ return false;
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! KeyNodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
+ //!
+ //! <b>Effects</b>: Returns a node_ptr to the first element that is equivalent to
+ //! "key" according to "comp" or "header" if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr find
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ node_ptr end = detail::uncast(header);
+ node_ptr y = lower_bound(header, key, comp);
+ return (y == end || comp(key, y)) ? end : y;
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! KeyNodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
+ //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
+ //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
+ //!
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
+ //!
+ //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
+ //!
+ //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ //!
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
+ //! and lower_bound for lower_key and upper_key.
+ //!
+ //! <b>Note</b>: Experimental function, the interface might change.
+ template< class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, node_ptr> bounded_range
+ ( const const_node_ptr & header
+ , const KeyType &lower_key
+ , const KeyType &upper_key
+ , KeyNodePtrCompare comp
+ , bool left_closed
+ , bool right_closed)
+ {
+ node_ptr y = detail::uncast(header);
+ node_ptr x = NodeTraits::get_parent(header);
+
+ while(x){
+ //If x is less than lower_key the target
+ //range is on the right part
+ if(comp(x, lower_key)){
+ //Check for invalid input range
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(comp(x, upper_key));
+ x = NodeTraits::get_right(x);
+ }
+ //If the upper_key is less than x, the target
+ //range is on the left part
+ else if(comp(upper_key, x)){
+ y = x;
+ x = NodeTraits::get_left(x);
+ }
+ else{
+ //x is inside the bounded range( x >= lower_key && x <= upper_key),
+ //so we must split lower and upper searches
+ //
+ //Sanity check: if lower_key and upper_key are equal, then both left_closed and right_closed can't be false
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(left_closed || right_closed || comp(lower_key, x) || comp(x, upper_key));
+ return std::pair<node_ptr,node_ptr>(
+ left_closed
+ //If left_closed, then comp(x, lower_key) is already the lower_bound
+ //condition so we save one comparison and go to the next level
+ //following traditional lower_bound algo
+ ? lower_bound_loop(NodeTraits::get_left(x), x, lower_key, comp)
+ //If left-open, comp(x, lower_key) is not the upper_bound algo
+ //condition so we must recheck current 'x' node with upper_bound algo
+ : upper_bound_loop(x, y, lower_key, comp)
+ ,
+ right_closed
+ //If right_closed, then comp(upper_key, x) is already the upper_bound
+ //condition so we can save one comparison and go to the next level
+ //following lower_bound algo
+ ? upper_bound_loop(NodeTraits::get_right(x), y, upper_key, comp)
+ //If right-open, comp(upper_key, x) is not the lower_bound algo
+ //condition so we must recheck current 'x' node with lower_bound algo
+ : lower_bound_loop(x, y, upper_key, comp)
+ );
+ }
+ }
+ return std::pair<node_ptr,node_ptr> (y, y);
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! KeyNodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
+ //!
+ //! <b>Effects</b>: Returns the number of elements with a key equivalent to "key"
+ //! according to "comp".
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::size_t count
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ std::pair<node_ptr, node_ptr> ret = equal_range(header, key, comp);
+ std::size_t n = 0;
+ while(ret.first != ret.second){
+ ++n;
+ ret.first = next_node(ret.first);
+ }
+ return n;
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! KeyNodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
+ //!
+ //! <b>Effects</b>: Returns an a pair of node_ptr delimiting a range containing
+ //! all elements that are equivalent to "key" according to "comp" or an
+ //! empty range that indicates the position where those elements would be
+ //! if there are no equivalent elements.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, node_ptr> equal_range
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ return bounded_range(header, key, key, comp, true, true);
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! KeyNodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
+ //!
+ //! <b>Effects</b>: Returns an a pair of node_ptr delimiting a range containing
+ //! the first element that is equivalent to "key" according to "comp" or an
+ //! empty range that indicates the position where that element would be
+ //! if there are no equivalent elements.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, node_ptr> lower_bound_range
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ node_ptr const lb(lower_bound(header, key, comp));
+ std::pair<node_ptr, node_ptr> ret_ii(lb, lb);
+ if(lb != header && !comp(key, lb)){
+ ret_ii.second = next_node(ret_ii.second);
+ }
+ return ret_ii;
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! KeyNodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
+ //!
+ //! <b>Effects</b>: Returns a node_ptr to the first element that is
+ //! not less than "key" according to "comp" or "header" if that element does
+ //! not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr lower_bound
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ return lower_bound_loop(NodeTraits::get_parent(header), detail::uncast(header), key, comp);
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! KeyNodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
+ //!
+ //! <b>Effects</b>: Returns a node_ptr to the first element that is greater
+ //! than "key" according to "comp" or "header" if that element does not exist.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr upper_bound
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ return upper_bound_loop(NodeTraits::get_parent(header), detail::uncast(header), key, comp);
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! "commit_data" must have been obtained from a previous call to
+ //! "insert_unique_check". No objects should have been inserted or erased
+ //! from the set between the "insert_unique_check" that filled "commit_data"
+ //! and the call to "insert_commit".
+ //!
+ //!
+ //! <b>Effects</b>: Inserts new_node in the set using the information obtained
+ //! from the "commit_data" that a previous "insert_check" filled.
+ //!
+ //! <b>Complexity</b>: Constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Notes</b>: This function has only sense if a "insert_unique_check" has been
+ //! previously executed to fill "commit_data". No value should be inserted or
+ //! erased between the "insert_check" and "insert_commit" calls.
+ static void insert_unique_commit
+ (const node_ptr & header, const node_ptr & new_value, const insert_commit_data &commit_data)
+ { return insert_commit(header, new_value, commit_data); }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! KeyNodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. NodePtrCompare compares KeyType with a node_ptr.
+ //!
+ //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
+ //! tree according to "comp" and obtains the needed information to realize
+ //! a constant-time node insertion if there is no equivalent node.
+ //!
+ //! <b>Returns</b>: If there is an equivalent value
+ //! returns a pair containing a node_ptr to the already present node
+ //! and false. If there is not equivalent key can be inserted returns true
+ //! in the returned pair's boolean and fills "commit_data" that is meant to
+ //! be used with the "insert_commit" function to achieve a constant-time
+ //! insertion function.
+ //!
+ //! <b>Complexity</b>: Average complexity is at most logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ //!
+ //! <b>Notes</b>: This function is used to improve performance when constructing
+ //! a node is expensive and the user does not want to have two equivalent nodes
+ //! in the tree: if there is an equivalent value
+ //! the constructed object must be discarded. Many times, the part of the
+ //! node that is used to impose the order is much cheaper to construct
+ //! than the node and this function offers the possibility to use that part
+ //! to check if the insertion will be successful.
+ //!
+ //! If the check is successful, the user can construct the node and use
+ //! "insert_commit" to insert the node in constant-time. This gives a total
+ //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
+ //!
+ //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
+ //! if no more objects are inserted or erased from the set.
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, bool> insert_unique_check
+ (const const_node_ptr & header, const KeyType &key
+ ,KeyNodePtrCompare comp, insert_commit_data &commit_data
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ std::size_t depth = 0;
+ node_ptr h(detail::uncast(header));
+ node_ptr y(h);
+ node_ptr x(NodeTraits::get_parent(y));
+ node_ptr prev = node_ptr();
+
+ //Find the upper bound, cache the previous value and if we should
+ //store it in the left or right node
+ bool left_child = true;
+ while(x){
+ ++depth;
+ y = x;
+ x = (left_child = comp(key, x)) ?
+ NodeTraits::get_left(x) : (prev = y, NodeTraits::get_right(x));
+ }
+
+ if(pdepth) *pdepth = depth;
+
+ //Since we've found the upper bound there is no other value with the same key if:
+ // - There is no previous node
+ // - The previous node is less than the key
+ const bool not_present = !prev || comp(prev, key);
+ if(not_present){
+ commit_data.link_left = left_child;
+ commit_data.node = y;
+ }
+ return std::pair<node_ptr, bool>(prev, not_present);
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! KeyNodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. NodePtrCompare compares KeyType with a node_ptr.
+ //! "hint" is node from the "header"'s tree.
+ //!
+ //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
+ //! tree according to "comp" using "hint" as a hint to where it should be
+ //! inserted and obtains the needed information to realize
+ //! a constant-time node insertion if there is no equivalent node.
+ //! If "hint" is the upper_bound the function has constant time
+ //! complexity (two comparisons in the worst case).
+ //!
+ //! <b>Returns</b>: If there is an equivalent value
+ //! returns a pair containing a node_ptr to the already present node
+ //! and false. If there is not equivalent key can be inserted returns true
+ //! in the returned pair's boolean and fills "commit_data" that is meant to
+ //! be used with the "insert_commit" function to achieve a constant-time
+ //! insertion function.
+ //!
+ //! <b>Complexity</b>: Average complexity is at most logarithmic, but it is
+ //! amortized constant time if new_node should be inserted immediately before "hint".
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ //!
+ //! <b>Notes</b>: This function is used to improve performance when constructing
+ //! a node is expensive and the user does not want to have two equivalent nodes
+ //! in the tree: if there is an equivalent value
+ //! the constructed object must be discarded. Many times, the part of the
+ //! node that is used to impose the order is much cheaper to construct
+ //! than the node and this function offers the possibility to use that part
+ //! to check if the insertion will be successful.
+ //!
+ //! If the check is successful, the user can construct the node and use
+ //! "insert_commit" to insert the node in constant-time. This gives a total
+ //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
+ //!
+ //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
+ //! if no more objects are inserted or erased from the set.
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, bool> insert_unique_check
+ (const const_node_ptr & header, const node_ptr &hint, const KeyType &key
+ ,KeyNodePtrCompare comp, insert_commit_data &commit_data
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ //hint must be bigger than the key
+ if(hint == header || comp(key, hint)){
+ node_ptr prev(hint);
+ //Previous value should be less than the key
+ if(hint == begin_node(header) || comp((prev = prev_node(hint)), key)){
+ commit_data.link_left = unique(header) || !NodeTraits::get_left(hint);
+ commit_data.node = commit_data.link_left ? hint : prev;
+ if(pdepth){
+ *pdepth = commit_data.node == header ? 0 : depth(commit_data.node) + 1;
+ }
+ return std::pair<node_ptr, bool>(node_ptr(), true);
+ }
+ }
+ //Hint was wrong, use hintless insertion
+ return insert_unique_check(header, key, comp, commit_data, pdepth);
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! NodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. NodePtrCompare compares two node_ptrs. "hint" is node from
+ //! the "header"'s tree.
+ //!
+ //! <b>Effects</b>: Inserts new_node into the tree, using "hint" as a hint to
+ //! where it will be inserted. If "hint" is the upper_bound
+ //! the insertion takes constant time (two comparisons in the worst case).
+ //!
+ //! <b>Complexity</b>: Logarithmic in general, but it is amortized
+ //! constant time if new_node is inserted immediately before "hint".
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ template<class NodePtrCompare>
+ static node_ptr insert_equal
+ (const node_ptr & h, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ insert_commit_data commit_data;
+ insert_equal_check(h, hint, new_node, comp, commit_data, pdepth);
+ insert_commit(h, new_node, commit_data);
+ return new_node;
+ }
+
+ //! <b>Requires</b>: "h" must be the header node of a tree.
+ //! NodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. NodePtrCompare compares two node_ptrs.
+ //!
+ //! <b>Effects</b>: Inserts new_node into the tree before the upper bound
+ //! according to "comp".
+ //!
+ //! <b>Complexity</b>: Average complexity for insert element is at
+ //! most logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ template<class NodePtrCompare>
+ static node_ptr insert_equal_upper_bound
+ (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ insert_commit_data commit_data;
+ insert_equal_upper_bound_check(h, new_node, comp, commit_data, pdepth);
+ insert_commit(h, new_node, commit_data);
+ return new_node;
+ }
+
+ //! <b>Requires</b>: "h" must be the header node of a tree.
+ //! NodePtrCompare is a function object that induces a strict weak
+ //! ordering compatible with the strict weak ordering used to create the
+ //! the tree. NodePtrCompare compares two node_ptrs.
+ //!
+ //! <b>Effects</b>: Inserts new_node into the tree before the lower bound
+ //! according to "comp".
+ //!
+ //! <b>Complexity</b>: Average complexity for insert element is at
+ //! most logarithmic.
+ //!
+ //! <b>Throws</b>: If "comp" throws.
+ template<class NodePtrCompare>
+ static node_ptr insert_equal_lower_bound
+ (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ insert_commit_data commit_data;
+ insert_equal_lower_bound_check(h, new_node, comp, commit_data, pdepth);
+ insert_commit(h, new_node, commit_data);
+ return new_node;
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! "pos" must be a valid iterator or header (end) node.
+ //! "pos" must be an iterator pointing to the successor to "new_node"
+ //! once inserted according to the order of already inserted nodes. This function does not
+ //! check "pos" and this precondition must be guaranteed by the caller.
+ //!
+ //! <b>Effects</b>: Inserts new_node into the tree before "pos".
+ //!
+ //! <b>Complexity</b>: Constant-time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: If "pos" is not the successor of the newly inserted "new_node"
+ //! tree invariants might be broken.
+ static node_ptr insert_before
+ (const node_ptr & header, const node_ptr & pos, const node_ptr & new_node
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ insert_commit_data commit_data;
+ insert_before_check(header, pos, commit_data, pdepth);
+ insert_commit(header, new_node, commit_data);
+ return new_node;
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! "new_node" must be, according to the used ordering no less than the
+ //! greatest inserted key.
+ //!
+ //! <b>Effects</b>: Inserts new_node into the tree before "pos".
+ //!
+ //! <b>Complexity</b>: Constant-time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: If "new_node" is less than the greatest inserted key
+ //! tree invariants are broken. This function is slightly faster than
+ //! using "insert_before".
+ static void push_back
+ (const node_ptr & header, const node_ptr & new_node
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ insert_commit_data commit_data;
+ push_back_check(header, commit_data, pdepth);
+ insert_commit(header, new_node, commit_data);
+ }
+
+ //! <b>Requires</b>: "header" must be the header node of a tree.
+ //! "new_node" must be, according to the used ordering, no greater than the
+ //! lowest inserted key.
+ //!
+ //! <b>Effects</b>: Inserts new_node into the tree before "pos".
+ //!
+ //! <b>Complexity</b>: Constant-time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Note</b>: If "new_node" is greater than the lowest inserted key
+ //! tree invariants are broken. This function is slightly faster than
+ //! using "insert_before".
+ static void push_front
+ (const node_ptr & header, const node_ptr & new_node
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ insert_commit_data commit_data;
+ push_front_check(header, commit_data, pdepth);
+ insert_commit(header, new_node, commit_data);
+ }
+
+ //! <b>Requires</b>: 'node' can't be a header node.
+ //!
+ //! <b>Effects</b>: Calculates the depth of a node: the depth of a
+ //! node is the length (number of edges) of the path from the root
+ //! to that node. (The root node is at depth 0.)
+ //!
+ //! <b>Complexity</b>: Logarithmic to the number of nodes in the tree.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static std::size_t depth(const_node_ptr node)
+ {
+ std::size_t depth = 0;
+ node_ptr p_parent;
+ while(node != NodeTraits::get_parent(p_parent = NodeTraits::get_parent(node))){
+ ++depth;
+ node = p_parent;
+ }
+ return depth;
+ }
+
+ //! <b>Requires</b>: "cloner" must be a function
+ //! object taking a node_ptr and returning a new cloned node of it. "disposer" must
+ //! take a node_ptr and shouldn't throw.
+ //!
+ //! <b>Effects</b>: First empties target tree calling
+ //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
+ //! except the header.
+ //!
+ //! Then, duplicates the entire tree pointed by "source_header" cloning each
+ //! source node with <tt>node_ptr Cloner::operator()(const node_ptr &)</tt> to obtain
+ //! the nodes of the target tree. If "cloner" throws, the cloned target nodes
+ //! are disposed using <tt>void disposer(const node_ptr &)</tt>.
+ //!
+ //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
+ //! number of elements of tree target tree when calling this function.
+ //!
+ //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ template <class Cloner, class Disposer>
+ static void clone
+ (const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer)
+ {
+ if(!unique(target_header)){
+ clear_and_dispose(target_header, disposer);
+ }
+
+ node_ptr leftmost, rightmost;
+ node_ptr new_root = clone_subtree
+ (source_header, target_header, cloner, disposer, leftmost, rightmost);
+
+ //Now update header node
+ NodeTraits::set_parent(target_header, new_root);
+ NodeTraits::set_left (target_header, leftmost);
+ NodeTraits::set_right (target_header, rightmost);
+ }
+
+ //! <b>Requires</b>: header must be the header of a tree, z a node
+ //! of that tree and z != header.
+ //!
+ //! <b>Effects</b>: Erases node "z" from the tree with header "header".
+ //!
+ //! <b>Complexity</b>: Amortized constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static void erase(const node_ptr & header, const node_ptr & z)
+ {
+ data_for_rebalance ignored;
+ erase(header, z, ignored);
+ }
+
+ //! <b>Requires</b>: node is a tree node but not the header.
+ //!
+ //! <b>Effects</b>: Unlinks the node and rebalances the tree.
+ //!
+ //! <b>Complexity</b>: Average complexity is constant time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static void unlink(const node_ptr & node)
+ {
+ node_ptr x = NodeTraits::get_parent(node);
+ if(x){
+ while(!is_header(x))
+ x = NodeTraits::get_parent(x);
+ erase(x, node);
+ }
+ }
+
+ //! <b>Requires</b>: header must be the header of a tree.
+ //!
+ //! <b>Effects</b>: Rebalances the tree.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Linear.
+ static void rebalance(const node_ptr & header)
+ {
+ node_ptr root = NodeTraits::get_parent(header);
+ if(root){
+ rebalance_subtree(root);
+ }
+ }
+
+ //! <b>Requires</b>: old_root is a node of a tree. It shall not be null.
+ //!
+ //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
+ //!
+ //! <b>Returns</b>: The new root of the subtree.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Linear.
+ static node_ptr rebalance_subtree(const node_ptr & old_root)
+ {
+ //Taken from:
+ //"Tree rebalancing in optimal time and space"
+ //Quentin F. Stout and Bette L. Warren
+
+ //To avoid irregularities in the algorithm (old_root can be a
+ //left or right child or even the root of the tree) just put the
+ //root as the right child of its parent. Before doing this backup
+ //information to restore the original relationship after
+ //the algorithm is applied.
+ node_ptr super_root = NodeTraits::get_parent(old_root);
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(super_root);
+
+ //Get root info
+ node_ptr super_root_right_backup = NodeTraits::get_right(super_root);
+ bool super_root_is_header = NodeTraits::get_parent(super_root) == old_root;
+ bool old_root_is_right = is_right_child(old_root);
+ NodeTraits::set_right(super_root, old_root);
+
+ std::size_t size;
+ subtree_to_vine(super_root, size);
+ vine_to_subtree(super_root, size);
+ node_ptr new_root = NodeTraits::get_right(super_root);
+
+ //Recover root
+ if(super_root_is_header){
+ NodeTraits::set_right(super_root, super_root_right_backup);
+ NodeTraits::set_parent(super_root, new_root);
+ }
+ else if(old_root_is_right){
+ NodeTraits::set_right(super_root, new_root);
+ }
+ else{
+ NodeTraits::set_right(super_root, super_root_right_backup);
+ NodeTraits::set_left(super_root, new_root);
+ }
+ return new_root;
+ }
+
+ protected:
+ static void erase(const node_ptr & header, const node_ptr & z, data_for_rebalance &info)
+ {
+ node_ptr y(z);
+ node_ptr x;
+ const node_ptr z_left(NodeTraits::get_left(z));
+ const node_ptr z_right(NodeTraits::get_right(z));
+
+ if(!z_left){
+ x = z_right; // x might be null.
+ }
+ else if(!z_right){ // z has exactly one non-null child. y == z.
+ x = z_left; // x is not null.
+ BOOST_ASSERT(x);
+ }
+ else{ //make y != z
+ // y = find z's successor
+ y = bstree_algorithms::minimum(z_right);
+ x = NodeTraits::get_right(y); // x might be null.
+ }
+
+ node_ptr x_parent;
+ const node_ptr z_parent(NodeTraits::get_parent(z));
+ const bool z_is_leftchild(NodeTraits::get_left(z_parent) == z);
+
+ if(y != z){ //has two children and y is the minimum of z
+ //y is z's successor and it has a null left child.
+ //x is the right child of y (it can be null)
+ //Relink y in place of z and link x with y's old parent
+ NodeTraits::set_parent(z_left, y);
+ NodeTraits::set_left(y, z_left);
+ if(y != z_right){
+ //Link y with the right tree of z
+ NodeTraits::set_right(y, z_right);
+ NodeTraits::set_parent(z_right, y);
+ //Link x with y's old parent (y must be a left child)
+ x_parent = NodeTraits::get_parent(y);
+ BOOST_ASSERT(NodeTraits::get_left(x_parent) == y);
+ if(x)
+ NodeTraits::set_parent(x, x_parent);
+ //Since y was the successor and not the right child of z, it must be a left child
+ NodeTraits::set_left(x_parent, x);
+ }
+ else{ //y was the right child of y so no need to fix x's position
+ x_parent = y;
+ }
+ NodeTraits::set_parent(y, z_parent);
+ bstree_algorithms::set_child(header, y, z_parent, z_is_leftchild);
+ }
+ else { // z has zero or one child, x is one child (it can be null)
+ //Just link x to z's parent
+ x_parent = z_parent;
+ if(x)
+ NodeTraits::set_parent(x, z_parent);
+ bstree_algorithms::set_child(header, x, z_parent, z_is_leftchild);
+
+ //Now update leftmost/rightmost in case z was one of them
+ if(NodeTraits::get_left(header) == z){
+ //z_left must be null because z is the leftmost
+ BOOST_ASSERT(!z_left);
+ NodeTraits::set_left(header, !z_right ?
+ z_parent : // makes leftmost == header if z == root
+ bstree_algorithms::minimum(z_right));
+ }
+ if(NodeTraits::get_right(header) == z){
+ //z_right must be null because z is the rightmost
+ BOOST_ASSERT(!z_right);
+ NodeTraits::set_right(header, !z_left ?
+ z_parent : // makes rightmost == header if z == root
+ bstree_algorithms::maximum(z_left));
+ }
+ }
+
+ //If z had 0/1 child, y == z and one of its children (and maybe null)
+ //If z had 2 children, y is the successor of z and x is the right child of y
+ info.x = x;
+ info.y = y;
+ //If z had 0/1 child, x_parent is the new parent of the old right child of y (z's successor)
+ //If z had 2 children, x_parent is the new parent of y (z_parent)
+ BOOST_ASSERT(!x || NodeTraits::get_parent(x) == x_parent);
+ info.x_parent = x_parent;
+ }
+
+ //! <b>Requires</b>: node is a node of the tree but it's not the header.
+ //!
+ //! <b>Effects</b>: Returns the number of nodes of the subtree.
+ //!
+ //! <b>Complexity</b>: Linear time.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static std::size_t subtree_size(const const_node_ptr & subtree)
+ {
+ std::size_t count = 0;
+ if (subtree){
+ node_ptr n = detail::uncast(subtree);
+ node_ptr m = NodeTraits::get_left(n);
+ while(m){
+ n = m;
+ m = NodeTraits::get_left(n);
+ }
+
+ while(1){
+ ++count;
+ node_ptr n_right(NodeTraits::get_right(n));
+ if(n_right){
+ n = n_right;
+ m = NodeTraits::get_left(n);
+ while(m){
+ n = m;
+ m = NodeTraits::get_left(n);
+ }
+ }
+ else {
+ do{
+ if (n == subtree){
+ return count;
+ }
+ m = n;
+ n = NodeTraits::get_parent(n);
+ }while(NodeTraits::get_left(n) != m);
+ }
+ }
+ }
+ return count;
+ }
+
+ //! <b>Requires</b>: p is a node of a tree.
+ //!
+ //! <b>Effects</b>: Returns true if p is a left child.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static bool is_left_child(const node_ptr & p)
+ { return NodeTraits::get_left(NodeTraits::get_parent(p)) == p; }
+
+ //! <b>Requires</b>: p is a node of a tree.
+ //!
+ //! <b>Effects</b>: Returns true if p is a right child.
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static bool is_right_child(const node_ptr & p)
+ { return NodeTraits::get_right(NodeTraits::get_parent(p)) == p; }
+
+ static void insert_before_check
+ (const node_ptr &header, const node_ptr & pos
+ , insert_commit_data &commit_data
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ node_ptr prev(pos);
+ if(pos != NodeTraits::get_left(header))
+ prev = prev_node(pos);
+ bool link_left = unique(header) || !NodeTraits::get_left(pos);
+ commit_data.link_left = link_left;
+ commit_data.node = link_left ? pos : prev;
+ if(pdepth){
+ *pdepth = commit_data.node == header ? 0 : depth(commit_data.node) + 1;
+ }
+ }
+
+ static void push_back_check
+ (const node_ptr & header, insert_commit_data &commit_data
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ node_ptr prev(NodeTraits::get_right(header));
+ if(pdepth){
+ *pdepth = prev == header ? 0 : depth(prev) + 1;
+ }
+ commit_data.link_left = false;
+ commit_data.node = prev;
+ }
+
+ static void push_front_check
+ (const node_ptr & header, insert_commit_data &commit_data
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ , std::size_t *pdepth = 0
+ #endif
+ )
+ {
+ node_ptr pos(NodeTraits::get_left(header));
+ if(pdepth){
+ *pdepth = pos == header ? 0 : depth(pos) + 1;
+ }
+ commit_data.link_left = true;
+ commit_data.node = pos;
+ }
+
+ template<class NodePtrCompare>
+ static void insert_equal_check
+ (const node_ptr &header, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp
+ , insert_commit_data &commit_data
+ /// @cond
+ , std::size_t *pdepth = 0
+ /// @endcond
+ )
+ {
+ if(hint == header || !comp(hint, new_node)){
+ node_ptr prev(hint);
+ if(hint == NodeTraits::get_left(header) ||
+ !comp(new_node, (prev = prev_node(hint)))){
+ bool link_left = unique(header) || !NodeTraits::get_left(hint);
+ commit_data.link_left = link_left;
+ commit_data.node = link_left ? hint : prev;
+ if(pdepth){
+ *pdepth = commit_data.node == header ? 0 : depth(commit_data.node) + 1;
+ }
+ }
+ else{
+ insert_equal_upper_bound_check(header, new_node, comp, commit_data, pdepth);
+ }
+ }
+ else{
+ insert_equal_lower_bound_check(header, new_node, comp, commit_data, pdepth);
+ }
+ }
+
+ template<class NodePtrCompare>
+ static void insert_equal_upper_bound_check
+ (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
+ {
+ std::size_t depth = 0;
+ node_ptr y(h);
+ node_ptr x(NodeTraits::get_parent(y));
+
+ while(x){
+ ++depth;
+ y = x;
+ x = comp(new_node, x) ?
+ NodeTraits::get_left(x) : NodeTraits::get_right(x);
+ }
+ if(pdepth) *pdepth = depth;
+ commit_data.link_left = (y == h) || comp(new_node, y);
+ commit_data.node = y;
+ }
+
+ template<class NodePtrCompare>
+ static void insert_equal_lower_bound_check
+ (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
+ {
+ std::size_t depth = 0;
+ node_ptr y(h);
+ node_ptr x(NodeTraits::get_parent(y));
+
+ while(x){
+ ++depth;
+ y = x;
+ x = !comp(x, new_node) ?
+ NodeTraits::get_left(x) : NodeTraits::get_right(x);
+ }
+ if(pdepth) *pdepth = depth;
+ commit_data.link_left = (y == h) || !comp(y, new_node);
+ commit_data.node = y;
+ }
+
+ static void insert_commit
+ (const node_ptr & header, const node_ptr & new_node, const insert_commit_data &commit_data)
+ {
+ //Check if commit_data has not been initialized by a insert_unique_check call.
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(commit_data.node != node_ptr());
+ node_ptr parent_node(commit_data.node);
+ if(parent_node == header){
+ NodeTraits::set_parent(header, new_node);
+ NodeTraits::set_right(header, new_node);
+ NodeTraits::set_left(header, new_node);
+ }
+ else if(commit_data.link_left){
+ NodeTraits::set_left(parent_node, new_node);
+ if(parent_node == NodeTraits::get_left(header))
+ NodeTraits::set_left(header, new_node);
+ }
+ else{
+ NodeTraits::set_right(parent_node, new_node);
+ if(parent_node == NodeTraits::get_right(header))
+ NodeTraits::set_right(header, new_node);
+ }
+ NodeTraits::set_parent(new_node, parent_node);
+ NodeTraits::set_right(new_node, node_ptr());
+ NodeTraits::set_left(new_node, node_ptr());
+ }
+
+ //Fix header and own's parent data when replacing x with own, providing own's old data with parent
+ static void set_child(const node_ptr & header, const node_ptr & new_child, const node_ptr & new_parent, const bool link_left)
+ {
+ if(new_parent == header)
+ NodeTraits::set_parent(header, new_child);
+ else if(link_left)
+ NodeTraits::set_left(new_parent, new_child);
+ else
+ NodeTraits::set_right(new_parent, new_child);
+ }
+
+ // rotate p to left (no header and p's parent fixup)
+ static void rotate_left_no_parent_fix(const node_ptr & p, const node_ptr &p_right)
+ {
+ node_ptr p_right_left(NodeTraits::get_left(p_right));
+ NodeTraits::set_right(p, p_right_left);
+ if(p_right_left){
+ NodeTraits::set_parent(p_right_left, p);
+ }
+ NodeTraits::set_left(p_right, p);
+ NodeTraits::set_parent(p, p_right);
+ }
+
+ // rotate p to left (with header and p's parent fixup)
+ static void rotate_left(const node_ptr & p, const node_ptr & p_right, const node_ptr & p_parent, const node_ptr & header)
+ {
+ const bool p_was_left(NodeTraits::get_left(p_parent) == p);
+ rotate_left_no_parent_fix(p, p_right);
+ NodeTraits::set_parent(p_right, p_parent);
+ set_child(header, p_right, p_parent, p_was_left);
+ }
+
+ // rotate p to right (no header and p's parent fixup)
+ static void rotate_right_no_parent_fix(const node_ptr & p, const node_ptr &p_left)
+ {
+ node_ptr p_left_right(NodeTraits::get_right(p_left));
+ NodeTraits::set_left(p, p_left_right);
+ if(p_left_right){
+ NodeTraits::set_parent(p_left_right, p);
+ }
+ NodeTraits::set_right(p_left, p);
+ NodeTraits::set_parent(p, p_left);
+ }
+
+ // rotate p to right (with header and p's parent fixup)
+ static void rotate_right(const node_ptr & p, const node_ptr & p_left, const node_ptr & p_parent, const node_ptr & header)
+ {
+ const bool p_was_left(NodeTraits::get_left(p_parent) == p);
+ rotate_right_no_parent_fix(p, p_left);
+ NodeTraits::set_parent(p_left, p_parent);
+ set_child(header, p_left, p_parent, p_was_left);
+ }
+
+ private:
+
+ static void subtree_to_vine(node_ptr vine_tail, std::size_t &size)
+ {
+ //Inspired by LibAVL:
+ //It uses a clever optimization for trees with parent pointers.
+ //No parent pointer is updated when transforming a tree to a vine as
+ //most of them will be overriten during compression rotations.
+ //A final pass must be made after the rebalancing to updated those
+ //pointers not updated by tree_to_vine + compression calls
+ std::size_t len = 0;
+ node_ptr remainder = NodeTraits::get_right(vine_tail);
+ while(remainder){
+ node_ptr tempptr = NodeTraits::get_left(remainder);
+ if(!tempptr){ //move vine-tail down one
+ vine_tail = remainder;
+ remainder = NodeTraits::get_right(remainder);
+ ++len;
+ }
+ else{ //rotate
+ NodeTraits::set_left(remainder, NodeTraits::get_right(tempptr));
+ NodeTraits::set_right(tempptr, remainder);
+ remainder = tempptr;
+ NodeTraits::set_right(vine_tail, tempptr);
+ }
+ }
+ size = len;
+ }
+
+ static void compress_subtree(node_ptr scanner, std::size_t count)
+ {
+ while(count--){ //compress "count" spine nodes in the tree with pseudo-root scanner
+ node_ptr child = NodeTraits::get_right(scanner);
+ node_ptr child_right = NodeTraits::get_right(child);
+ NodeTraits::set_right(scanner, child_right);
+ //Avoid setting the parent of child_right
+ scanner = child_right;
+ node_ptr scanner_left = NodeTraits::get_left(scanner);
+ NodeTraits::set_right(child, scanner_left);
+ if(scanner_left)
+ NodeTraits::set_parent(scanner_left, child);
+ NodeTraits::set_left(scanner, child);
+ NodeTraits::set_parent(child, scanner);
+ }
+ }
+
+ static void vine_to_subtree(const node_ptr & super_root, std::size_t count)
+ {
+ const std::size_t one_szt = 1u;
+ std::size_t leaf_nodes = count + one_szt - std::size_t(one_szt << detail::floor_log2(count + one_szt));
+ compress_subtree(super_root, leaf_nodes); //create deepest leaves
+ std::size_t vine_nodes = count - leaf_nodes;
+ while(vine_nodes > 1){
+ vine_nodes /= 2;
+ compress_subtree(super_root, vine_nodes);
+ }
+
+ //Update parents of nodes still in the in the original vine line
+ //as those have not been updated by subtree_to_vine or compress_subtree
+ for ( node_ptr q = super_root, p = NodeTraits::get_right(super_root)
+ ; p
+ ; q = p, p = NodeTraits::get_right(p)){
+ NodeTraits::set_parent(p, q);
+ }
+ }
+
+ //! <b>Requires</b>: "n" must be a node inserted in a tree.
+ //!
+ //! <b>Effects</b>: Returns a pointer to the header node of the tree.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr get_root(const node_ptr & node)
+ {
+ BOOST_INTRUSIVE_INVARIANT_ASSERT((!inited(node)));
+ node_ptr x = NodeTraits::get_parent(node);
+ if(x){
+ while(!is_header(x)){
+ x = NodeTraits::get_parent(x);
+ }
+ return x;
+ }
+ else{
+ return node;
+ }
+ }
+
+ template <class Cloner, class Disposer>
+ static node_ptr clone_subtree
+ (const const_node_ptr &source_parent, const node_ptr &target_parent
+ , Cloner cloner, Disposer disposer
+ , node_ptr &leftmost_out, node_ptr &rightmost_out
+ )
+ {
+ node_ptr target_sub_root = target_parent;
+ node_ptr source_root = NodeTraits::get_parent(source_parent);
+ if(!source_root){
+ leftmost_out = rightmost_out = source_root;
+ }
+ else{
+ //We'll calculate leftmost and rightmost nodes while iterating
+ node_ptr current = source_root;
+ node_ptr insertion_point = target_sub_root = cloner(current);
+
+ //We'll calculate leftmost and rightmost nodes while iterating
+ node_ptr leftmost = target_sub_root;
+ node_ptr rightmost = target_sub_root;
+
+ //First set the subroot
+ NodeTraits::set_left(target_sub_root, node_ptr());
+ NodeTraits::set_right(target_sub_root, node_ptr());
+ NodeTraits::set_parent(target_sub_root, target_parent);
+
+ dispose_subtree_disposer<Disposer> rollback(disposer, target_sub_root);
+ while(true) {
+ //First clone left nodes
+ if( NodeTraits::get_left(current) &&
+ !NodeTraits::get_left(insertion_point)) {
+ current = NodeTraits::get_left(current);
+ node_ptr temp = insertion_point;
+ //Clone and mark as leaf
+ insertion_point = cloner(current);
+ NodeTraits::set_left (insertion_point, node_ptr());
+ NodeTraits::set_right (insertion_point, node_ptr());
+ //Insert left
+ NodeTraits::set_parent(insertion_point, temp);
+ NodeTraits::set_left (temp, insertion_point);
+ //Update leftmost
+ if(rightmost == target_sub_root)
+ leftmost = insertion_point;
+ }
+ //Then clone right nodes
+ else if( NodeTraits::get_right(current) &&
+ !NodeTraits::get_right(insertion_point)){
+ current = NodeTraits::get_right(current);
+ node_ptr temp = insertion_point;
+ //Clone and mark as leaf
+ insertion_point = cloner(current);
+ NodeTraits::set_left (insertion_point, node_ptr());
+ NodeTraits::set_right (insertion_point, node_ptr());
+ //Insert right
+ NodeTraits::set_parent(insertion_point, temp);
+ NodeTraits::set_right (temp, insertion_point);
+ //Update rightmost
+ rightmost = insertion_point;
+ }
+ //If not, go up
+ else if(current == source_root){
+ break;
+ }
+ else{
+ //Branch completed, go up searching more nodes to clone
+ current = NodeTraits::get_parent(current);
+ insertion_point = NodeTraits::get_parent(insertion_point);
+ }
+ }
+ rollback.release();
+ leftmost_out = leftmost;
+ rightmost_out = rightmost;
+ }
+ return target_sub_root;
+ }
+
+ template<class Disposer>
+ static void dispose_subtree(node_ptr x, Disposer disposer)
+ {
+ while (x){
+ node_ptr save(NodeTraits::get_left(x));
+ if (save) {
+ // Right rotation
+ NodeTraits::set_left(x, NodeTraits::get_right(save));
+ NodeTraits::set_right(save, x);
+ }
+ else {
+ save = NodeTraits::get_right(x);
+ init(x);
+ disposer(x);
+ }
+ x = save;
+ }
+ }
+
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr lower_bound_loop
+ (node_ptr x, node_ptr y, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ while(x){
+ if(comp(x, key)){
+ x = NodeTraits::get_right(x);
+ }
+ else{
+ y = x;
+ x = NodeTraits::get_left(x);
+ }
+ }
+ return y;
+ }
+
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr upper_bound_loop
+ (node_ptr x, node_ptr y, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ while(x){
+ if(comp(key, x)){
+ y = x;
+ x = NodeTraits::get_left(x);
+ }
+ else{
+ x = NodeTraits::get_right(x);
+ }
+ }
+ return y;
+ }
+};
+
+/// @cond
+
+template<class NodeTraits>
+struct get_algo<BsTreeAlgorithms, NodeTraits>
+{
+ typedef bstree_algorithms<NodeTraits> type;
+};
+
+/// @endcond
+
+} //namespace intrusive
+} //namespace boost
+
+#include <boost/intrusive/detail/config_end.hpp>
+
+#endif //BOOST_INTRUSIVE_BSTREE_ALGORITHMS_HPP
diff --git a/3party/boost/boost/intrusive/circular_list_algorithms.hpp b/3party/boost/boost/intrusive/circular_list_algorithms.hpp
index 5add320c81..9d6213a597 100644
--- a/3party/boost/boost/intrusive/circular_list_algorithms.hpp
+++ b/3party/boost/boost/intrusive/circular_list_algorithms.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -16,6 +16,7 @@
#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/intrusive/intrusive_fwd.hpp>
+#include <boost/intrusive/detail/utilities.hpp>
#include <cstddef>
namespace boost {
@@ -405,6 +406,16 @@ class circular_list_algorithms
}
};
+/// @cond
+
+template<class NodeTraits>
+struct get_algo<CircularListAlgorithms, NodeTraits>
+{
+ typedef circular_list_algorithms<NodeTraits> type;
+};
+
+/// @endcond
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/circular_slist_algorithms.hpp b/3party/boost/boost/intrusive/circular_slist_algorithms.hpp
index fc3848e83f..d41dac44a0 100644
--- a/3party/boost/boost/intrusive/circular_slist_algorithms.hpp
+++ b/3party/boost/boost/intrusive/circular_slist_algorithms.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -18,6 +18,7 @@
#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/common_slist_algorithms.hpp>
#include <boost/intrusive/detail/assert.hpp>
+#include <boost/intrusive/detail/utilities.hpp>
#include <cstddef>
namespace boost {
@@ -249,33 +250,21 @@ class circular_slist_algorithms
{
if (other_node == this_node)
return;
- bool this_inited = base_t::inited(this_node);
- bool other_inited = base_t::inited(other_node);
- if(this_inited){
- base_t::init_header(this_node);
+ const node_ptr this_next = NodeTraits::get_next(this_node);
+ const node_ptr other_next = NodeTraits::get_next(other_node);
+ const bool this_null = !this_next;
+ const bool other_null = !other_next;
+ const bool this_empty = this_next == this_node;
+ const bool other_empty = other_next == other_node;
+
+ if(!(other_null || other_empty)){
+ NodeTraits::set_next(this_next == other_node ? other_node : get_previous_node(other_node), this_node );
}
- if(other_inited){
- base_t::init_header(other_node);
- }
-
- bool empty1 = base_t::unique(this_node);
- bool empty2 = base_t::unique(other_node);
- node_ptr prev_this (get_previous_node(this_node));
- node_ptr prev_other(get_previous_node(other_node));
-
- node_ptr this_next (NodeTraits::get_next(this_node));
- node_ptr other_next(NodeTraits::get_next(other_node));
- NodeTraits::set_next(this_node, other_next);
- NodeTraits::set_next(other_node, this_next);
- NodeTraits::set_next(empty1 ? other_node : prev_this, other_node);
- NodeTraits::set_next(empty2 ? this_node : prev_other, this_node);
-
- if(this_inited){
- base_t::init(other_node);
- }
- if(other_inited){
- base_t::init(this_node);
+ if(!(this_null | this_empty)){
+ NodeTraits::set_next(other_next == this_node ? this_node : get_previous_node(this_node), other_node );
}
+ NodeTraits::set_next(this_node, other_empty ? this_node : (other_next == this_node ? other_node : other_next) );
+ NodeTraits::set_next(other_node, this_empty ? other_node : (this_next == other_node ? this_node : this_next ) );
}
//! <b>Effects</b>: Reverses the order of elements in the list.
@@ -396,6 +385,16 @@ class circular_slist_algorithms
}
};
+/// @cond
+
+template<class NodeTraits>
+struct get_algo<CircularSListAlgorithms, NodeTraits>
+{
+ typedef circular_slist_algorithms<NodeTraits> type;
+};
+
+/// @endcond
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/derivation_value_traits.hpp b/3party/boost/boost/intrusive/derivation_value_traits.hpp
index 0aae01b619..b55c968e31 100644
--- a/3party/boost/boost/intrusive/derivation_value_traits.hpp
+++ b/3party/boost/boost/intrusive/derivation_value_traits.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
#ifndef BOOST_INTRUSIVE_DERIVATION_VALUE_TRAITS_HPP
#define BOOST_INTRUSIVE_DERIVATION_VALUE_TRAITS_HPP
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/link_mode.hpp>
-#include <boost/pointer_cast.hpp>
-#include <boost/pointer_to_other.hpp>
-#include <iterator>
+#include <boost/intrusive/pointer_traits.hpp>
namespace boost {
namespace intrusive {
@@ -24,7 +24,12 @@ namespace intrusive {
//!This value traits template is used to create value traits
//!from user defined node traits where value_traits::value_type will
//!derive from node_traits::node
-template<class T, class NodeTraits, link_mode_type LinkMode = safe_link>
+
+template<class T, class NodeTraits, link_mode_type LinkMode
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ = safe_link
+ #endif
+>
struct derivation_value_traits
{
public:
@@ -33,8 +38,10 @@ struct derivation_value_traits
typedef typename node_traits::node node;
typedef typename node_traits::node_ptr node_ptr;
typedef typename node_traits::const_node_ptr const_node_ptr;
- typedef typename boost::pointer_to_other<node_ptr, T>::type pointer;
- typedef typename boost::pointer_to_other<node_ptr, const T>::type const_pointer;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<value_type>::type pointer;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<const value_type>::type const_pointer;
typedef typename boost::intrusive::
pointer_traits<pointer>::reference reference;
typedef typename boost::intrusive::
@@ -49,22 +56,18 @@ struct derivation_value_traits
static pointer to_value_ptr(const node_ptr &n)
{
-// This still fails in gcc < 4.4 so forget about it
-// using ::boost::static_pointer_cast;
-// return static_pointer_cast<value_type>(n));
- return pointer(&static_cast<value_type&>(*n));
+ return pointer_traits<pointer>::pointer_to(static_cast<reference>(*n));
}
static const_pointer to_value_ptr(const const_node_ptr &n)
{
-// This still fails in gcc < 4.4 so forget about it
-// using ::boost::static_pointer_cast;
-// return static_pointer_cast<const value_type>(n));
- return const_pointer(&static_cast<const value_type&>(*n));
+ return pointer_traits<pointer>::pointer_to(static_cast<const_reference>(*n));
}
};
} //namespace intrusive
} //namespace boost
+#include <boost/intrusive/detail/config_end.hpp>
+
#endif //BOOST_INTRUSIVE_DERIVATION_VALUE_TRAITS_HPP
diff --git a/3party/boost/boost/intrusive/detail/any_node_and_algorithms.hpp b/3party/boost/boost/intrusive/detail/any_node_and_algorithms.hpp
index b274135a90..8b51099afa 100644
--- a/3party/boost/boost/intrusive/detail/any_node_and_algorithms.hpp
+++ b/3party/boost/boost/intrusive/detail/any_node_and_algorithms.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -19,7 +19,6 @@
#include <boost/intrusive/pointer_traits.hpp>
#include <cstddef>
#include <boost/intrusive/detail/mpl.hpp>
-#include <boost/pointer_cast.hpp>
namespace boost {
namespace intrusive {
diff --git a/3party/boost/boost/intrusive/detail/assert.hpp b/3party/boost/boost/intrusive/detail/assert.hpp
index 33de97f701..d75d225ac4 100644
--- a/3party/boost/boost/intrusive/detail/assert.hpp
+++ b/3party/boost/boost/intrusive/detail/assert.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,7 +13,7 @@
#ifndef BOOST_INTRUSIVE_DETAIL_ASSERT_HPP
#define BOOST_INTRUSIVE_DETAIL_ASSERT_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/intrusive/detail/avltree_node.hpp b/3party/boost/boost/intrusive/detail/avltree_node.hpp
index f6aefcba0d..8031c7d7c3 100644
--- a/3party/boost/boost/intrusive/detail/avltree_node.hpp
+++ b/3party/boost/boost/intrusive/detail/avltree_node.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// 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/intrusive/detail/clear_on_destructor_base.hpp b/3party/boost/boost/intrusive/detail/clear_on_destructor_base.hpp
deleted file mode 100644
index 1b5c27fff4..0000000000
--- a/3party/boost/boost/intrusive/detail/clear_on_destructor_base.hpp
+++ /dev/null
@@ -1,36 +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/intrusive for documentation.
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef BOOST_INTRUSIVE_DETAIL_CLEAR_ON_DESTRUCTOR_HPP
-#define BOOST_INTRUSIVE_DETAIL_CLEAR_ON_DESTRUCTOR_HPP
-
-#include <boost/intrusive/detail/config_begin.hpp>
-
-namespace boost {
-namespace intrusive {
-namespace detail {
-
-template<class Derived>
-class clear_on_destructor_base
-{
- protected:
- ~clear_on_destructor_base()
- {
- static_cast<Derived*>(this)->clear();
- }
-};
-
-} // namespace detail {
-} // namespace intrusive {
-} // namespace boost {
-
-#include <boost/intrusive/detail/config_end.hpp>
-
-#endif //#ifndef BOOST_INTRUSIVE_DETAIL_CLEAR_ON_DESTRUCTOR_HPP
diff --git a/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp b/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp
index 166f78d438..0adbd5054a 100644
--- a/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp
+++ b/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -43,9 +43,6 @@ class common_slist_algorithms
return p;
}
- static void init_header(const node_ptr & this_node)
- { NodeTraits::set_next(this_node, this_node); }
-
static void init(const node_ptr & this_node)
{ NodeTraits::set_next(this_node, node_ptr()); }
diff --git a/3party/boost/boost/intrusive/detail/config_begin.hpp b/3party/boost/boost/intrusive/detail/config_begin.hpp
index 7d153368a5..109a59088b 100644
--- a/3party/boost/boost/intrusive/detail/config_begin.hpp
+++ b/3party/boost/boost/intrusive/detail/config_begin.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// 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/intrusive/detail/config_end.hpp b/3party/boost/boost/intrusive/detail/config_end.hpp
index d653030daa..a081443e69 100644
--- a/3party/boost/boost/intrusive/detail/config_end.hpp
+++ b/3party/boost/boost/intrusive/detail/config_end.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// 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/intrusive/detail/ebo_functor_holder.hpp b/3party/boost/boost/intrusive/detail/ebo_functor_holder.hpp
index 850d074326..3c2959b970 100644
--- a/3party/boost/boost/intrusive/detail/ebo_functor_holder.hpp
+++ b/3party/boost/boost/intrusive/detail/ebo_functor_holder.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Joaquin M Lopez Munoz 2006-2012
+// (C) Copyright Joaquin M Lopez Munoz 2006-2013
//
// 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/intrusive/detail/function_detector.hpp b/3party/boost/boost/intrusive/detail/function_detector.hpp
index 08cee2d561..f8eccf9e66 100644
--- a/3party/boost/boost/intrusive/detail/function_detector.hpp
+++ b/3party/boost/boost/intrusive/detail/function_detector.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2009-2012.
+// (C) Copyright Ion Gaztanaga 2009-2013.
//
// 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/intrusive/detail/generic_hook.hpp b/3party/boost/boost/intrusive/detail/generic_hook.hpp
index 5ddd52074e..835a8c7504 100644
--- a/3party/boost/boost/intrusive/detail/generic_hook.hpp
+++ b/3party/boost/boost/intrusive/detail/generic_hook.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -24,85 +24,67 @@
namespace boost {
namespace intrusive {
-namespace detail {
/// @cond
-enum
-{ NoBaseHook
-, ListBaseHook
-, SlistBaseHook
-, SetBaseHook
-, UsetBaseHook
-, SplaySetBaseHook
-, AvlSetBaseHook
-, BsSetBaseHook
-, AnyBaseHook
+enum base_hook_type
+{ NoBaseHookId
+, ListBaseHookId
+, SlistBaseHookId
+, RbTreeBaseHookId
+, HashBaseHookId
+, AvlTreeBaseHookId
+, BsTreeBaseHookId
+, TreapTreeBaseHookId
+, AnyBaseHookId
};
-struct no_default_definer{};
-template <class Hook, unsigned int>
-struct default_definer;
+template <class HookTags, unsigned int>
+struct hook_tags_definer{};
-template <class Hook>
-struct default_definer<Hook, ListBaseHook>
-{ typedef Hook default_list_hook; };
+template <class HookTags>
+struct hook_tags_definer<HookTags, ListBaseHookId>
+{ typedef HookTags default_list_hook; };
-template <class Hook>
-struct default_definer<Hook, SlistBaseHook>
-{ typedef Hook default_slist_hook; };
+template <class HookTags>
+struct hook_tags_definer<HookTags, SlistBaseHookId>
+{ typedef HookTags default_slist_hook; };
-template <class Hook>
-struct default_definer<Hook, SetBaseHook>
-{ typedef Hook default_set_hook; };
+template <class HookTags>
+struct hook_tags_definer<HookTags, RbTreeBaseHookId>
+{ typedef HookTags default_rbtree_hook; };
-template <class Hook>
-struct default_definer<Hook, UsetBaseHook>
-{ typedef Hook default_uset_hook; };
+template <class HookTags>
+struct hook_tags_definer<HookTags, HashBaseHookId>
+{ typedef HookTags default_hashtable_hook; };
-template <class Hook>
-struct default_definer<Hook, SplaySetBaseHook>
-{ typedef Hook default_splay_set_hook; };
+template <class HookTags>
+struct hook_tags_definer<HookTags, AvlTreeBaseHookId>
+{ typedef HookTags default_avltree_hook; };
-template <class Hook>
-struct default_definer<Hook, AvlSetBaseHook>
-{ typedef Hook default_avl_set_hook; };
+template <class HookTags>
+struct hook_tags_definer<HookTags, BsTreeBaseHookId>
+{ typedef HookTags default_bstree_hook; };
-template <class Hook>
-struct default_definer<Hook, BsSetBaseHook>
-{ typedef Hook default_bs_set_hook; };
-
-template <class Hook>
-struct default_definer<Hook, AnyBaseHook>
-{ typedef Hook default_any_hook; };
-
-template <class Hook, unsigned int BaseHookType>
-struct make_default_definer
-{
- typedef typename detail::if_c
- < BaseHookType != 0
- , default_definer<Hook, BaseHookType>
- , no_default_definer>::type type;
-};
+template <class HookTags>
+struct hook_tags_definer<HookTags, AnyBaseHookId>
+{ typedef HookTags default_any_hook; };
template
- < class GetNodeAlgorithms
+ < class NodeTraits
, class Tag
, link_mode_type LinkMode
- , int HookType
+ , base_hook_type BaseHookType
>
-struct make_node_holder
+struct hooktags_impl
{
- typedef typename detail::if_c
- <!detail::is_same<Tag, member_tag>::value
- , detail::node_holder
- < typename GetNodeAlgorithms::type::node
- , Tag
- , LinkMode
- , HookType>
- , typename GetNodeAlgorithms::type::node
- >::type type;
+ static const link_mode_type link_mode = LinkMode;
+ typedef Tag tag;
+ typedef NodeTraits node_traits;
+ static const bool is_base_hook = !detail::is_same<Tag, member_tag>::value;
+ static const bool safemode_or_autounlink = is_safe_autounlink<link_mode>::value;
+ static const unsigned int type = BaseHookType;
};
/// @endcond
@@ -111,22 +93,28 @@ template
< class GetNodeAlgorithms
, class Tag
, link_mode_type LinkMode
- , int HookType
+ , base_hook_type BaseHookType
>
class generic_hook
/// @cond
-
- //If the hook is a base hook, derive generic hook from detail::node_holder
+ //If the hook is a base hook, derive generic hook from node_holder
//so that a unique base class is created to convert from the node
- //to the type. This mechanism will be used by base_hook_traits.
+ //to the type. This mechanism will be used by bhtraits.
//
//If the hook is a member hook, generic hook will directly derive
//from the hook.
- : public make_default_definer
- < generic_hook<GetNodeAlgorithms, Tag, LinkMode, HookType>
- , detail::is_same<Tag, default_tag>::value*HookType
+ : public detail::if_c
+ < detail::is_same<Tag, member_tag>::value
+ , typename GetNodeAlgorithms::type::node
+ , node_holder<typename GetNodeAlgorithms::type::node, Tag, BaseHookType>
>::type
- , public make_node_holder<GetNodeAlgorithms, Tag, LinkMode, HookType>::type
+ //If this is the a default-tagged base hook derive from a class that
+ //will define an special internal typedef. Containers will be able to detect this
+ //special typedef and obtain generic_hook's internal types in order to deduce
+ //value_traits for this hook.
+ , public hook_tags_definer
+ < generic_hook<GetNodeAlgorithms, Tag, LinkMode, BaseHookType>
+ , detail::is_same<Tag, default_tag>::value*BaseHookType>
/// @endcond
{
/// @cond
@@ -136,16 +124,10 @@ class generic_hook
typedef typename node_algorithms::const_node_ptr const_node_ptr;
public:
- struct boost_intrusive_tags
- {
- static const int hook_type = HookType;
- static const link_mode_type link_mode = LinkMode;
- typedef Tag tag;
- typedef typename GetNodeAlgorithms::type::node_traits node_traits;
- static const bool is_base_hook = !detail::is_same<Tag, member_tag>::value;
- static const bool safemode_or_autounlink =
- (int)link_mode == (int)auto_unlink || (int)link_mode == (int)safe_link;
- };
+
+ typedef hooktags_impl
+ < typename GetNodeAlgorithms::type::node_traits
+ , Tag, LinkMode, BaseHookType> hooktags;
node_ptr this_ptr()
{ return pointer_traits<node_ptr>::pointer_to(static_cast<node&>(*this)); }
@@ -158,14 +140,14 @@ class generic_hook
generic_hook()
{
- if(boost_intrusive_tags::safemode_or_autounlink){
+ if(hooktags::safemode_or_autounlink){
node_algorithms::init(this->this_ptr());
}
}
generic_hook(const generic_hook& )
{
- if(boost_intrusive_tags::safemode_or_autounlink){
+ if(hooktags::safemode_or_autounlink){
node_algorithms::init(this->this_ptr());
}
}
@@ -176,7 +158,7 @@ class generic_hook
~generic_hook()
{
destructor_impl
- (*this, detail::link_dispatch<boost_intrusive_tags::link_mode>());
+ (*this, detail::link_dispatch<hooktags::link_mode>());
}
void swap_nodes(generic_hook &other)
@@ -188,19 +170,18 @@ class generic_hook
bool is_linked() const
{
//is_linked() can be only used in safe-mode or auto-unlink
- BOOST_STATIC_ASSERT(( boost_intrusive_tags::safemode_or_autounlink ));
+ BOOST_STATIC_ASSERT(( hooktags::safemode_or_autounlink ));
return !node_algorithms::unique(this->this_ptr());
}
void unlink()
{
- BOOST_STATIC_ASSERT(( (int)boost_intrusive_tags::link_mode == (int)auto_unlink ));
+ BOOST_STATIC_ASSERT(( (int)hooktags::link_mode == (int)auto_unlink ));
node_algorithms::unlink(this->this_ptr());
node_algorithms::init(this->this_ptr());
}
};
-} //namespace detail
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/detail/has_member_function_callable_with.hpp b/3party/boost/boost/intrusive/detail/has_member_function_callable_with.hpp
index 5651b4c17b..12eec96222 100644
--- a/3party/boost/boost/intrusive/detail/has_member_function_callable_with.hpp
+++ b/3party/boost/boost/intrusive/detail/has_member_function_callable_with.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2011-2013. 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,11 +70,11 @@
#error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END not defined!"
#endif
- #if BOOST_PP_ITERATION_START() != 0
- #error "BOOST_PP_ITERATION_START() must be zero (0)"
+ #if BOOST_PP_ITERATION_START() > BOOST_PP_ITERATION_FINISH()
+ #error "BOOST_PP_ITERATION_START() must be <= BOOST_PP_ITERATION_FINISH()"
#endif
- #if BOOST_PP_ITERATION() == 0
+ #if BOOST_PP_ITERATION() == BOOST_PP_ITERATION_START()
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN
@@ -114,76 +114,7 @@
};
//!
- #if !defined(_MSC_VER) || (_MSC_VER < 1600)
-
- #if defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
-
- template<typename Fun>
- struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
- <Fun, true BOOST_PP_ENUM_TRAILING(BOOST_PP_SUB(BOOST_PP_ITERATION_FINISH(), BOOST_PP_ITERATION()), BOOST_INTRUSIVE_PP_IDENTITY, void)>
- {
- //Mark that we don't support 0 arg calls due to compiler ICE in GCC 3.4/4.0/4.1 and
- //wrong SFINAE for GCC 4.2/4.3
- static const bool value = true;
- };
-
- #else //defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
-
- //Special case for 0 args
- template< class F
- , std::size_t N =
- sizeof((boost::move_detail::declval<F>().
- BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME (), 0))>
- struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
- {
- boost_intrusive_has_member_function_callable_with::yes_type dummy;
- BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
- };
-
- //For buggy compilers like MSVC 7.1+ ((F*)0)->func() does not
- //SFINAE-out the zeroarg_checker_ instantiation but sizeof yields to 0.
- template<class F>
- struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<F, 0>
- {
- boost_intrusive_has_member_function_callable_with::no_type dummy;
- BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
- };
-
- template<typename Fun>
- struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
- <Fun, true BOOST_PP_ENUM_TRAILING(BOOST_PP_SUB(BOOST_PP_ITERATION_FINISH(), BOOST_PP_ITERATION()), BOOST_INTRUSIVE_PP_IDENTITY, void)>
- {
- template<class U>
- static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>
- Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>*);
-
- template <class U>
- static boost_intrusive_has_member_function_callable_with::no_type Test(...);
-
- static const bool value = sizeof(Test< Fun >(0))
- == sizeof(boost_intrusive_has_member_function_callable_with::yes_type);
- };
- #endif //defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
-
- #else //#if !defined(_MSC_VER) || (_MSC_VER < 1600)
- template<typename Fun>
- struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
- <Fun, true BOOST_PP_ENUM_TRAILING(BOOST_PP_SUB(BOOST_PP_ITERATION_FINISH(), BOOST_PP_ITERATION()), BOOST_INTRUSIVE_PP_IDENTITY, void)>
- {
- template<class U>
- static decltype( boost::move_detail::declval<Fun>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()
- , boost_intrusive_has_member_function_callable_with::yes_type())
- Test(Fun*);
-
- template<class U>
- static boost_intrusive_has_member_function_callable_with::no_type Test(...);
-
- static const bool value = sizeof(Test<Fun>(0))
- == sizeof(boost_intrusive_has_member_function_callable_with::yes_type);
- };
- #endif //#if !defined(_MSC_VER) || (_MSC_VER < 1600)
-
- #else //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
+ #else //!defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
template<typename Fun, bool HasFunc, class ...Args>
struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl);
@@ -195,6 +126,8 @@
static const bool value = false;
};
+ #ifdef BOOST_NO_CXX11_DECLTYPE
+
//Special case for 0 args
template< class F
, std::size_t N =
@@ -215,14 +148,21 @@
BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
};
+ #endif //#ifdef BOOST_NO_CXX11_DECLTYPE
+
template<typename Fun>
struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
<Fun, true>
{
+ #ifndef BOOST_NO_CXX11_DECLTYPE
+ template<class U, class V = decltype(boost::move_detail::declval<U>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()) >
+ static boost_intrusive_has_member_function_callable_with::yes_type Test(U*);
+ #else
template<class U>
- static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
+ static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
<U> Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>*);
-
+ #endif
+
template <class U>
static boost_intrusive_has_member_function_callable_with::no_type Test(...);
@@ -275,6 +215,89 @@
, Args... >
{};
+ #endif //!defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
+
+ BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END
+
+ #endif //BOOST_PP_ITERATION() == BOOST_PP_ITERATION_START()
+
+ #if BOOST_PP_ITERATION() == 0
+
+ BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN
+
+ #if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
+
+ #if !defined(_MSC_VER) || (_MSC_VER < 1600)
+
+ #if defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
+
+ template<typename Fun>
+ struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
+ <Fun, true BOOST_PP_ENUM_TRAILING(BOOST_PP_SUB(BOOST_PP_ITERATION_FINISH(), BOOST_PP_ITERATION()), BOOST_INTRUSIVE_PP_IDENTITY, void)>
+ {
+ //Mark that we don't support 0 arg calls due to compiler ICE in GCC 3.4/4.0/4.1 and
+ //wrong SFINAE for GCC 4.2/4.3
+ static const bool value = true;
+ };
+
+ #else //defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
+
+ //Special case for 0 args
+ template< class F
+ , std::size_t N =
+ sizeof((boost::move_detail::declval<F>().
+ BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME (), 0))>
+ struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
+ {
+ boost_intrusive_has_member_function_callable_with::yes_type dummy;
+ BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
+ };
+
+ //For buggy compilers like MSVC 7.1+ ((F*)0)->func() does not
+ //SFINAE-out the zeroarg_checker_ instantiation but sizeof yields to 0.
+ template<class F>
+ struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<F, 0>
+ {
+ boost_intrusive_has_member_function_callable_with::no_type dummy;
+ BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
+ };
+
+ template<typename Fun>
+ struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
+ <Fun, true BOOST_PP_ENUM_TRAILING(BOOST_PP_SUB(BOOST_PP_ITERATION_FINISH(), BOOST_PP_ITERATION()), BOOST_INTRUSIVE_PP_IDENTITY, void)>
+ {
+ template<class U>
+ static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>
+ Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>*);
+
+ template <class U>
+ static boost_intrusive_has_member_function_callable_with::no_type Test(...);
+
+ static const bool value = sizeof(Test< Fun >(0))
+ == sizeof(boost_intrusive_has_member_function_callable_with::yes_type);
+ };
+ #endif //defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
+
+ #else //#if !defined(_MSC_VER) || (_MSC_VER < 1600)
+ template<typename Fun>
+ struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
+ <Fun, true BOOST_PP_ENUM_TRAILING(BOOST_PP_SUB(BOOST_PP_ITERATION_FINISH(), BOOST_PP_ITERATION()), BOOST_INTRUSIVE_PP_IDENTITY, void)>
+ {
+ template<class U>
+ static decltype( boost::move_detail::declval<U>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()
+ , boost_intrusive_has_member_function_callable_with::yes_type())
+ Test(U*);
+
+ template<class U>
+ static boost_intrusive_has_member_function_callable_with::no_type Test(...);
+
+ static const bool value = sizeof(Test<Fun>(0))
+ == sizeof(boost_intrusive_has_member_function_callable_with::yes_type);
+ };
+ #endif //#if !defined(_MSC_VER) || (_MSC_VER < 1600)
+
+ #else //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
+
#endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END
diff --git a/3party/boost/boost/intrusive/detail/hashtable_node.hpp b/3party/boost/boost/intrusive/detail/hashtable_node.hpp
index 86e607460c..f00b0bf88f 100644
--- a/3party/boost/boost/intrusive/detail/hashtable_node.hpp
+++ b/3party/boost/boost/intrusive/detail/hashtable_node.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -20,11 +20,11 @@
#include <boost/intrusive/circular_list_algorithms.hpp>
#include <boost/intrusive/detail/mpl.hpp>
#include <boost/intrusive/detail/utilities.hpp>
-//#include <boost/intrusive/detail/slist_node.hpp> //remove-me
-#include <boost/intrusive/pointer_traits.hpp>
+#include <boost/intrusive/slist.hpp> //make_slist
+#include <boost/intrusive/trivial_value_traits.hpp>
#include <cstddef>
-#include <boost/pointer_cast.hpp>
-#include <boost/move/move.hpp>
+#include <climits>
+#include <boost/move/core.hpp>
namespace boost {
@@ -38,15 +38,59 @@ struct prime_list_holder
static const std::size_t prime_list_size;
};
+//We only support LLP64(Win64) or LP64(most Unix) data models
+#ifdef _WIN64 //In 64 bit windows sizeof(size_t) == sizeof(unsigned long long)
+ #define BOOST_INTRUSIVE_PRIME_C(NUMBER) NUMBER##ULL
+ #define BOOST_INTRUSIVE_64_BIT_SIZE_T 1
+#else //In 32 bit windows and 32/64 bit unixes sizeof(size_t) == sizeof(unsigned long)
+ #define BOOST_INTRUSIVE_PRIME_C(NUMBER) NUMBER##UL
+ #define BOOST_INTRUSIVE_64_BIT_SIZE_T (((((ULONG_MAX>>16)>>16)>>16)>>15) != 0)
+#endif
+
template<int Dummy>
const std::size_t prime_list_holder<Dummy>::prime_list[] = {
- 3ul, 7ul, 11ul, 17ul, 29ul,
- 53ul, 97ul, 193ul, 389ul, 769ul,
- 1543ul, 3079ul, 6151ul, 12289ul, 24593ul,
- 49157ul, 98317ul, 196613ul, 393241ul, 786433ul,
- 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul,
- 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,
- 1610612741ul, 3221225473ul, 4294967291ul };
+ BOOST_INTRUSIVE_PRIME_C(3), BOOST_INTRUSIVE_PRIME_C(7),
+ BOOST_INTRUSIVE_PRIME_C(11), BOOST_INTRUSIVE_PRIME_C(17),
+ BOOST_INTRUSIVE_PRIME_C(29), BOOST_INTRUSIVE_PRIME_C(53),
+ BOOST_INTRUSIVE_PRIME_C(97), BOOST_INTRUSIVE_PRIME_C(193),
+ BOOST_INTRUSIVE_PRIME_C(389), BOOST_INTRUSIVE_PRIME_C(769),
+ BOOST_INTRUSIVE_PRIME_C(1543), BOOST_INTRUSIVE_PRIME_C(3079),
+ BOOST_INTRUSIVE_PRIME_C(6151), BOOST_INTRUSIVE_PRIME_C(12289),
+ BOOST_INTRUSIVE_PRIME_C(24593), BOOST_INTRUSIVE_PRIME_C(49157),
+ BOOST_INTRUSIVE_PRIME_C(98317), BOOST_INTRUSIVE_PRIME_C(196613),
+ BOOST_INTRUSIVE_PRIME_C(393241), BOOST_INTRUSIVE_PRIME_C(786433),
+ BOOST_INTRUSIVE_PRIME_C(1572869), BOOST_INTRUSIVE_PRIME_C(3145739),
+ BOOST_INTRUSIVE_PRIME_C(6291469), BOOST_INTRUSIVE_PRIME_C(12582917),
+ BOOST_INTRUSIVE_PRIME_C(25165843), BOOST_INTRUSIVE_PRIME_C(50331653),
+ BOOST_INTRUSIVE_PRIME_C(100663319), BOOST_INTRUSIVE_PRIME_C(201326611),
+ BOOST_INTRUSIVE_PRIME_C(402653189), BOOST_INTRUSIVE_PRIME_C(805306457),
+ BOOST_INTRUSIVE_PRIME_C(1610612741), BOOST_INTRUSIVE_PRIME_C(3221225473),
+#if BOOST_INTRUSIVE_64_BIT_SIZE_T
+ //Taken from Boost.MultiIndex code, thanks to Joaquin M Lopez Munoz.
+ BOOST_INTRUSIVE_PRIME_C(6442450939), BOOST_INTRUSIVE_PRIME_C(12884901893),
+ BOOST_INTRUSIVE_PRIME_C(25769803751), BOOST_INTRUSIVE_PRIME_C(51539607551),
+ BOOST_INTRUSIVE_PRIME_C(103079215111), BOOST_INTRUSIVE_PRIME_C(206158430209),
+ BOOST_INTRUSIVE_PRIME_C(412316860441), BOOST_INTRUSIVE_PRIME_C(824633720831),
+ BOOST_INTRUSIVE_PRIME_C(1649267441651), BOOST_INTRUSIVE_PRIME_C(3298534883309),
+ BOOST_INTRUSIVE_PRIME_C(6597069766657), BOOST_INTRUSIVE_PRIME_C(13194139533299),
+ BOOST_INTRUSIVE_PRIME_C(26388279066623), BOOST_INTRUSIVE_PRIME_C(52776558133303),
+ BOOST_INTRUSIVE_PRIME_C(105553116266489), BOOST_INTRUSIVE_PRIME_C(211106232532969),
+ BOOST_INTRUSIVE_PRIME_C(422212465066001), BOOST_INTRUSIVE_PRIME_C(844424930131963),
+ BOOST_INTRUSIVE_PRIME_C(1688849860263953), BOOST_INTRUSIVE_PRIME_C(3377699720527861),
+ BOOST_INTRUSIVE_PRIME_C(6755399441055731), BOOST_INTRUSIVE_PRIME_C(13510798882111483),
+ BOOST_INTRUSIVE_PRIME_C(27021597764222939), BOOST_INTRUSIVE_PRIME_C(54043195528445957),
+ BOOST_INTRUSIVE_PRIME_C(108086391056891903), BOOST_INTRUSIVE_PRIME_C(216172782113783843),
+ BOOST_INTRUSIVE_PRIME_C(432345564227567621), BOOST_INTRUSIVE_PRIME_C(864691128455135207),
+ BOOST_INTRUSIVE_PRIME_C(1729382256910270481), BOOST_INTRUSIVE_PRIME_C(3458764513820540933),
+ BOOST_INTRUSIVE_PRIME_C(6917529027641081903), BOOST_INTRUSIVE_PRIME_C(13835058055282163729),
+ BOOST_INTRUSIVE_PRIME_C(18446744073709551557)
+#else
+ BOOST_INTRUSIVE_PRIME_C(4294967291)
+#endif
+ };
+
+#undef BOOST_INTRUSIVE_PRIME_C
+#undef BOOST_INTRUSIVE_64_BIT_SIZE_T
template<int Dummy>
const std::size_t prime_list_holder<Dummy>::prime_list_size
@@ -89,6 +133,7 @@ struct bucket_traits_impl
typedef typename pointer_traits
<typename Slist::pointer>::template rebind_pointer
< bucket_impl<Slist> >::type bucket_ptr;
+ typedef Slist slist;
typedef typename Slist::size_type size_type;
/// @endcond
@@ -100,7 +145,6 @@ struct bucket_traits_impl
: buckets_(x.buckets_), buckets_len_(x.buckets_len_)
{}
-
bucket_traits_impl(BOOST_RV_REF(bucket_traits_impl) x)
: buckets_(x.buckets_), buckets_len_(x.buckets_len_)
{ x.buckets_ = bucket_ptr(); x.buckets_len_ = 0; }
@@ -127,57 +171,106 @@ struct bucket_traits_impl
size_type buckets_len_;
};
-template<class Container, bool IsConst>
+template <class NodeTraits>
+struct hash_reduced_slist_node_traits
+{
+ template <class U> static detail::one test(...);
+ template <class U> static detail::two test(typename U::reduced_slist_node_traits* = 0);
+ static const bool value = sizeof(test<NodeTraits>(0)) == sizeof(detail::two);
+};
+
+template <class NodeTraits>
+struct apply_reduced_slist_node_traits
+{
+ typedef typename NodeTraits::reduced_slist_node_traits type;
+};
+
+template <class NodeTraits>
+struct reduced_slist_node_traits
+{
+ typedef typename detail::eval_if_c
+ < hash_reduced_slist_node_traits<NodeTraits>::value
+ , apply_reduced_slist_node_traits<NodeTraits>
+ , detail::identity<NodeTraits>
+ >::type type;
+};
+
+template<class NodeTraits>
+struct get_slist_impl
+{
+ typedef trivial_value_traits<NodeTraits, normal_link> trivial_traits;
+
+ //Reducing symbol length
+ struct type : make_slist
+ < typename NodeTraits::node
+ , boost::intrusive::value_traits<trivial_traits>
+ , boost::intrusive::constant_time_size<false>
+ , boost::intrusive::size_type<std::size_t>
+ >::type
+ {};
+};
+
+} //namespace detail {
+
+template<class BucketValueTraits, bool IsConst>
class hashtable_iterator
- : public std::iterator
+{
+ typedef std::iterator
< std::forward_iterator_tag
- , typename Container::value_type
- , typename pointer_traits<typename Container::value_type*>::difference_type
+ , typename BucketValueTraits::value_traits::value_type
+ , typename pointer_traits<typename BucketValueTraits::value_traits::value_type*>::difference_type
, typename detail::add_const_if_c
- <typename Container::value_type, IsConst>::type *
+ <typename BucketValueTraits::value_traits::value_type, IsConst>::type *
, typename detail::add_const_if_c
- <typename Container::value_type, IsConst>::type &
- >
-{
- typedef typename Container::real_value_traits real_value_traits;
- typedef typename Container::siterator siterator;
- typedef typename Container::const_siterator const_siterator;
- typedef typename Container::bucket_type bucket_type;
+ <typename BucketValueTraits::value_traits::value_type, IsConst>::type &
+ > iterator_traits;
+
+ typedef typename BucketValueTraits::value_traits value_traits;
+ typedef typename BucketValueTraits::bucket_traits bucket_traits;
+ typedef typename value_traits::node_traits node_traits;
+ typedef typename detail::get_slist_impl
+ <typename detail::reduced_slist_node_traits
+ <typename value_traits::node_traits>::type
+ >::type slist_impl;
+ typedef typename slist_impl::iterator siterator;
+ typedef typename slist_impl::const_iterator const_siterator;
+ typedef detail::bucket_impl<slist_impl> bucket_type;
typedef typename pointer_traits
- <typename Container::pointer>::template rebind_pointer
- < const Container >::type const_cont_ptr;
- typedef typename Container::size_type size_type;
+ <typename value_traits::pointer>::template rebind_pointer
+ < const BucketValueTraits >::type const_bucketvaltraits_ptr;
+ typedef typename slist_impl::size_type size_type;
+
- static typename Container::node_ptr downcast_bucket(typename bucket_type::node_ptr p)
+ static typename node_traits::node_ptr downcast_bucket(typename bucket_type::node_ptr p)
{
- return pointer_traits<typename Container::node_ptr>::
- pointer_to(static_cast<typename Container::node&>(*p));
+ return pointer_traits<typename node_traits::node_ptr>::
+ pointer_to(static_cast<typename node_traits::node&>(*p));
}
public:
- typedef typename Container::value_type value_type;
- typedef typename detail::add_const_if_c
- <typename Container::value_type, IsConst>::type *pointer;
- typedef typename detail::add_const_if_c
- <typename Container::value_type, IsConst>::type &reference;
+ typedef typename iterator_traits::difference_type difference_type;
+ typedef typename iterator_traits::value_type value_type;
+ typedef typename iterator_traits::pointer pointer;
+ typedef typename iterator_traits::reference reference;
+ typedef typename iterator_traits::iterator_category iterator_category;
hashtable_iterator ()
{}
- explicit hashtable_iterator(siterator ptr, const Container *cont)
- : slist_it_ (ptr), cont_ (cont ? pointer_traits<const_cont_ptr>::pointer_to(*cont) : const_cont_ptr() )
+ explicit hashtable_iterator(siterator ptr, const BucketValueTraits *cont)
+ : slist_it_ (ptr), traitsptr_ (cont ? pointer_traits<const_bucketvaltraits_ptr>::pointer_to(*cont) : const_bucketvaltraits_ptr() )
{}
- hashtable_iterator(const hashtable_iterator<Container, false> &other)
- : slist_it_(other.slist_it()), cont_(other.get_container())
+ hashtable_iterator(const hashtable_iterator<BucketValueTraits, false> &other)
+ : slist_it_(other.slist_it()), traitsptr_(other.get_bucket_value_traits())
{}
const siterator &slist_it() const
{ return slist_it_; }
- hashtable_iterator<Container, false> unconst() const
- { return hashtable_iterator<Container, false>(this->slist_it(), this->get_container()); }
+ hashtable_iterator<BucketValueTraits, false> unconst() const
+ { return hashtable_iterator<BucketValueTraits, false>(this->slist_it(), this->get_bucket_value_traits()); }
public:
hashtable_iterator& operator++()
@@ -201,48 +294,57 @@ class hashtable_iterator
pointer operator->() const
{
- return boost::intrusive::detail::to_raw_pointer(this->get_real_value_traits()->to_value_ptr
+ return boost::intrusive::detail::to_raw_pointer(this->priv_value_traits().to_value_ptr
(downcast_bucket(slist_it_.pointed_node())));
}
- const const_cont_ptr &get_container() const
- { return cont_; }
+ const const_bucketvaltraits_ptr &get_bucket_value_traits() const
+ { return traitsptr_; }
+
+ const value_traits &priv_value_traits() const
+ { return traitsptr_->priv_value_traits(); }
- const real_value_traits *get_real_value_traits() const
- { return &this->get_container()->get_real_value_traits(); }
+ const bucket_traits &priv_bucket_traits() const
+ { return traitsptr_->priv_bucket_traits(); }
private:
void increment()
{
- const Container *cont = boost::intrusive::detail::to_raw_pointer(cont_);
- bucket_type* buckets = boost::intrusive::detail::to_raw_pointer(cont->bucket_pointer());
- size_type buckets_len = cont->bucket_count();
+ const bucket_traits &rbuck_traits = this->priv_bucket_traits();
+ bucket_type* const buckets = boost::intrusive::detail::to_raw_pointer(rbuck_traits.bucket_begin());
+ const size_type buckets_len = rbuck_traits.bucket_count();
++slist_it_;
- if(buckets[0].cend().pointed_node() <= slist_it_.pointed_node() &&
- slist_it_.pointed_node()<= buckets[buckets_len].cend().pointed_node() ){
- //Now get the bucket_impl from the iterator
+ const typename slist_impl::node_ptr n = slist_it_.pointed_node();
+ const siterator first_bucket_bbegin = buckets->end();
+ if(first_bucket_bbegin.pointed_node() <= n && n <= buckets[buckets_len-1].cend().pointed_node()){
+ //If one-past the node is inside the bucket then look for the next non-empty bucket
+ //1. get the bucket_impl from the iterator
const bucket_type &b = static_cast<const bucket_type&>
(bucket_type::slist_type::container_from_end_iterator(slist_it_));
- //Now just calculate the index b has in the bucket array
- size_type n_bucket = static_cast<size_type>(&b - &buckets[0]);
+ //2. Now just calculate the index b has in the bucket array
+ size_type n_bucket = static_cast<size_type>(&b - buckets);
+
+ //3. Iterate until a non-empty bucket is found
do{
- if (++n_bucket == buckets_len){
- slist_it_ = (&buckets[0] + buckets_len)->end();
- break;
+ if (++n_bucket >= buckets_len){ //bucket overflow, return end() iterator
+ slist_it_ = buckets->before_begin();
+ return;
}
- slist_it_ = buckets[n_bucket].begin();
}
- while (slist_it_ == buckets[n_bucket].end());
+ while (buckets[n_bucket].empty());
+ slist_it_ = buckets[n_bucket].begin();
+ }
+ else{
+ //++slist_it_ yield to a valid object
}
}
- siterator slist_it_;
- const_cont_ptr cont_;
+ siterator slist_it_;
+ const_bucketvaltraits_ptr traitsptr_;
};
-} //namespace detail {
} //namespace intrusive {
} //namespace boost {
diff --git a/3party/boost/boost/intrusive/detail/is_stateful_value_traits.hpp b/3party/boost/boost/intrusive/detail/is_stateful_value_traits.hpp
index 8677c666d4..c98f6c6b06 100644
--- a/3party/boost/boost/intrusive/detail/is_stateful_value_traits.hpp
+++ b/3party/boost/boost/intrusive/detail/is_stateful_value_traits.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2009-2012.
+// (C) Copyright Ion Gaztanaga 2009-2013.
//
// 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/intrusive/detail/list_node.hpp b/3party/boost/boost/intrusive/detail/list_node.hpp
index 32274e65a2..0967183fef 100644
--- a/3party/boost/boost/intrusive/detail/list_node.hpp
+++ b/3party/boost/boost/intrusive/detail/list_node.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -18,6 +18,7 @@
#include <iterator>
#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/pointer_traits.hpp>
+#include <boost/intrusive/detail/memory_util.hpp>
namespace boost {
namespace intrusive {
@@ -65,41 +66,38 @@ struct list_node_traits
// list_iterator provides some basic functions for a
// node oriented bidirectional iterator:
-template<class Container, bool IsConst>
+template<class ValueTraits, bool IsConst>
class list_iterator
- : public std::iterator
- < std::bidirectional_iterator_tag
- , typename Container::value_type
- , typename Container::difference_type
- , typename detail::if_c<IsConst,typename Container::const_pointer,typename Container::pointer>::type
- , typename detail::if_c<IsConst,typename Container::const_reference,typename Container::reference>::type
- >
{
protected:
- typedef typename Container::real_value_traits real_value_traits;
- typedef typename real_value_traits::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename node_traits::node_ptr node_ptr;
- typedef typename pointer_traits<node_ptr>::
- template rebind_pointer<void>::type void_pointer;
- static const bool store_container_ptr =
- detail::store_cont_ptr_on_it<Container>::value;
+ typedef iiterator
+ <ValueTraits, IsConst, std::bidirectional_iterator_tag> types_t;
+
+ static const bool stateful_value_traits = types_t::stateful_value_traits;
+
+ typedef ValueTraits value_traits;
+ typedef typename types_t::node_traits node_traits;
+
+ typedef typename types_t::node node;
+ typedef typename types_t::node_ptr node_ptr;
+ typedef typename types_t::const_value_traits_ptr const_value_traits_ptr;
public:
- typedef typename Container::value_type value_type;
- typedef typename detail::if_c<IsConst,typename Container::const_pointer,typename Container::pointer>::type pointer;
- typedef typename detail::if_c<IsConst,typename Container::const_reference,typename Container::reference>::type reference;
+ typedef typename types_t::iterator_traits::difference_type difference_type;
+ typedef typename types_t::iterator_traits::value_type value_type;
+ typedef typename types_t::iterator_traits::pointer pointer;
+ typedef typename types_t::iterator_traits::reference reference;
+ typedef typename types_t::iterator_traits::iterator_category iterator_category;
list_iterator()
- : members_ (node_ptr(), 0)
{}
- explicit list_iterator(const node_ptr & node, const Container *cont_ptr)
- : members_ (node, cont_ptr)
+ explicit list_iterator(const node_ptr & nodeptr, const const_value_traits_ptr &traits_ptr)
+ : members_(nodeptr, traits_ptr)
{}
- list_iterator(list_iterator<Container, false> const& other)
- : members_(other.pointed_node(), other.get_container())
+ list_iterator(list_iterator<ValueTraits, false> const& other)
+ : members_(other.pointed_node(), other.get_value_traits())
{}
const node_ptr &pointed_node() const
@@ -108,12 +106,14 @@ class list_iterator
list_iterator &operator=(const node_ptr &node)
{ members_.nodeptr_ = node; return static_cast<list_iterator&>(*this); }
+ const_value_traits_ptr get_value_traits() const
+ { return members_.get_ptr(); }
+
public:
list_iterator& operator++()
{
node_ptr p = node_traits::get_next(members_.nodeptr_);
members_.nodeptr_ = p;
- //members_.nodeptr_ = node_traits::get_next(members_.nodeptr_);
return static_cast<list_iterator&> (*this);
}
@@ -147,45 +147,19 @@ class list_iterator
{ return *operator->(); }
pointer operator->() const
- { return this->get_real_value_traits()->to_value_ptr(members_.nodeptr_); }
+ { return this->operator_arrow(detail::bool_<stateful_value_traits>()); }
- const Container *get_container() const
- {
- if(store_container_ptr){
- const Container* c = static_cast<const Container*>(members_.get_ptr());
- BOOST_INTRUSIVE_INVARIANT_ASSERT(c != 0);
- return c;
- }
- else{
- return 0;
- }
- }
-
- const real_value_traits *get_real_value_traits() const
- {
- if(store_container_ptr)
- return &this->get_container()->get_real_value_traits();
- else
- return 0;
- }
-
- list_iterator<Container, false> unconst() const
- { return list_iterator<Container, false>(this->pointed_node(), this->get_container()); }
+ list_iterator<ValueTraits, false> unconst() const
+ { return list_iterator<ValueTraits, false>(this->pointed_node(), this->get_value_traits()); }
private:
- struct members
- : public detail::select_constptr
- <void_pointer, store_container_ptr>::type
- {
- typedef typename detail::select_constptr
- <void_pointer, store_container_ptr>::type Base;
+ pointer operator_arrow(detail::false_) const
+ { return ValueTraits::to_value_ptr(members_.nodeptr_); }
- members(const node_ptr &n_ptr, const void *cont)
- : Base(cont), nodeptr_(n_ptr)
- {}
+ pointer operator_arrow(detail::true_) const
+ { return this->get_value_traits()->to_value_ptr(members_.nodeptr_); }
- node_ptr nodeptr_;
- } members_;
+ iiterator_members<node_ptr, const_value_traits_ptr, stateful_value_traits> members_;
};
} //namespace intrusive
diff --git a/3party/boost/boost/intrusive/detail/memory_util.hpp b/3party/boost/boost/intrusive/detail/memory_util.hpp
index 7f69f91a13..49b69cff63 100644
--- a/3party/boost/boost/intrusive/detail/memory_util.hpp
+++ b/3party/boost/boost/intrusive/detail/memory_util.hpp
@@ -6,7 +6,7 @@
//
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2011-2013. 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)
//
@@ -17,7 +17,7 @@
#ifndef BOOST_INTRUSIVE_ALLOCATOR_MEMORY_UTIL_HPP
#define BOOST_INTRUSIVE_ALLOCATOR_MEMORY_UTIL_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -45,6 +45,10 @@ template <typename T> struct unvoid { typedef T type; };
template <> struct unvoid<void> { struct type { }; };
template <> struct unvoid<const void> { struct type { }; };
+template <typename T> struct unvoid_ref { typedef T &type; };
+template <> struct unvoid_ref<void> { struct type_impl { }; typedef type_impl & type; };
+template <> struct unvoid_ref<const void> { struct type_impl { }; typedef type_impl & type; };
+
template <typename T>
struct LowPriorityConversion
{
@@ -61,8 +65,7 @@ struct LowPriorityConversion
static char test(int, typename X::TNAME*); \
\
template <typename X> \
- static int test(boost::intrusive::detail:: \
- LowPriorityConversion<int>, void*); \
+ static int test(...); \
\
struct DefaultWrap { typedef DefaultType TNAME; }; \
\
@@ -80,8 +83,7 @@ struct LowPriorityConversion
static char test(int, typename X::TNAME*); \
\
template <typename X> \
- static int test(boost::intrusive::detail:: \
- LowPriorityConversion<int>, void*); \
+ static int test(...); \
\
struct DefaultWrap \
{ typedef typename DefaultType::type TNAME; }; \
@@ -114,25 +116,25 @@ struct LowPriorityConversion
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME pointer_to
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
#include BOOST_PP_ITERATE()
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME static_cast_from
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
#include BOOST_PP_ITERATE()
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME const_cast_from
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
#include BOOST_PP_ITERATE()
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME dynamic_cast_from
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
-#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
+#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
#include BOOST_PP_ITERATE()
namespace boost {
@@ -141,6 +143,8 @@ namespace detail {
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(element_type)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(reference)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(value_traits_ptr)
//////////////////////
//struct first_param
@@ -182,11 +186,7 @@ template <typename Ptr, typename T>
struct type_has_rebind
{
template <typename X>
- #if !defined (__SUNPRO_CC)
static char test(int, typename X::template rebind<T>*);
- #else
- static char test(int, typename X::rebind<T>*);
- #endif
template <typename X>
static int test(boost::intrusive::detail::LowPriorityConversion<int>, void*);
@@ -198,11 +198,7 @@ template <typename Ptr, typename T>
struct type_has_rebind_other
{
template <typename X>
- #if !defined (__SUNPRO_CC)
static char test(int, typename X::template rebind<T>::other*);
- #else
- static char test(int, typename X::rebind<T>::other*);
- #endif
template <typename X>
static int test(boost::intrusive::detail::LowPriorityConversion<int>, void*);
diff --git a/3party/boost/boost/intrusive/detail/mpl.hpp b/3party/boost/boost/intrusive/detail/mpl.hpp
index a2d99734cc..9dc0d52c38 100644
--- a/3party/boost/boost/intrusive/detail/mpl.hpp
+++ b/3party/boost/boost/intrusive/detail/mpl.hpp
@@ -1,6 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2014
+// (C) Copyright Microsoft Corporation 2014
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -20,6 +21,59 @@ namespace boost {
namespace intrusive {
namespace detail {
+template <typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template <typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+template<typename T>
+struct add_const
+{ typedef const T type; };
+
+template<typename T>
+struct remove_const
+{ typedef T type; };
+
+template<typename T>
+struct remove_const<const T>
+{ typedef T type; };
+
+template<typename T>
+struct remove_cv
+{ typedef T type; };
+
+template<typename T>
+struct remove_cv<const T>
+{ typedef T type; };
+
+template<typename T>
+struct remove_cv<const volatile T>
+{ typedef T type; };
+
+template<typename T>
+struct remove_cv<volatile T>
+{ typedef T type; };
+
+template<class T>
+struct remove_reference
+{
+ typedef T type;
+};
+
+template<class T>
+struct remove_reference<T&>
+{
+ typedef T type;
+};
+
+
typedef char one;
struct two {one _[2];};
@@ -29,6 +83,12 @@ struct bool_
static const bool value = C_;
};
+template< class Integer, Integer Value >
+struct integer
+{
+ static const Integer value = Value;
+};
+
typedef bool_<true> true_;
typedef bool_<false> false_;
@@ -58,18 +118,32 @@ struct apply
typedef typename F::template apply<Param>::type type;
};
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+
+template <class T, class U>
+struct is_convertible
+{
+ static const bool value = __is_convertible_to(T, U);
+};
+
+#else
+
template <class T, class U>
class is_convertible
{
typedef char true_t;
class false_t { char dummy[2]; };
- static true_t dispatch(U);
+ //use any_conversion as first parameter since in MSVC
+ //overaligned types can't go through ellipsis
static false_t dispatch(...);
- static const T &trigger();
+ static true_t dispatch(U);
+ static typename remove_reference<T>::type &trigger();
public:
static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);
};
+#endif
+
template<
bool C
, typename T1
@@ -130,7 +204,7 @@ struct identity
#define BOOST_INTRUSIVE_TT_DECL
#endif
-#if defined(_MSC_EXTENSIONS) && !defined(__BORLAND__) && !defined(_WIN64) && !defined(UNDER_CE)
+#if defined(_MSC_EXTENSIONS) && !defined(__BORLAND__) && !defined(_WIN64) && !defined(_M_ARM) && !defined(UNDER_CE)
#define BOOST_INTRUSIVE_TT_TEST_MSC_FUNC_SIGS
#endif
@@ -280,65 +354,6 @@ struct alignment_of
>::value;
};
-template <typename T, typename U>
-struct is_same
-{
- typedef char yes_type;
- struct no_type
- {
- char padding[8];
- };
-
- template <typename V>
- static yes_type is_same_tester(V*, V*);
- static no_type is_same_tester(...);
-
- static T *t;
- static U *u;
-
- static const bool value = sizeof(yes_type) == sizeof(is_same_tester(t,u));
-};
-
-template<typename T>
-struct add_const
-{ typedef const T type; };
-
-template<typename T>
-struct remove_const
-{ typedef T type; };
-
-template<typename T>
-struct remove_const<const T>
-{ typedef T type; };
-
-template<typename T>
-struct remove_cv
-{ typedef T type; };
-
-template<typename T>
-struct remove_cv<const T>
-{ typedef T type; };
-
-template<typename T>
-struct remove_cv<const volatile T>
-{ typedef T type; };
-
-template<typename T>
-struct remove_cv<volatile T>
-{ typedef T type; };
-
-template<class T>
-struct remove_reference
-{
- typedef T type;
-};
-
-template<class T>
-struct remove_reference<T&>
-{
- typedef T type;
-};
-
template<class Class>
class is_empty_class
{
diff --git a/3party/boost/boost/intrusive/detail/parent_from_member.hpp b/3party/boost/boost/intrusive/detail/parent_from_member.hpp
index f86a0e720f..cf9f37947d 100644
--- a/3party/boost/boost/intrusive/detail/parent_from_member.hpp
+++ b/3party/boost/boost/intrusive/detail/parent_from_member.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -30,18 +30,38 @@ inline std::ptrdiff_t offset_from_pointer_to_member(const Member Parent::* ptr_t
{
//The implementation of a pointer to member is compiler dependent.
#if defined(BOOST_INTRUSIVE_MSVC_ABI_PTR_TO_MEMBER)
- //msvc compliant compilers use their the first 32 bits as offset (even in 64 bit mode)
+
+ //MSVC compliant compilers use their the first 32 bits as offset (even in 64 bit mode)
union caster_union
{
const Member Parent::* ptr_to_member;
boost::int32_t offset;
} caster;
- caster.ptr_to_member = ptr_to_member;
+
//MSVC ABI can use up to 3 int32 to represent pointer to member data
//with virtual base classes, in those cases there is no simple to
- //obtain the address of parent. So static assert to avoid runtime errors
+ //obtain the address of the parent. So static assert to avoid runtime errors
BOOST_STATIC_ASSERT( sizeof(caster) == sizeof(boost::int32_t) );
+
+ caster.ptr_to_member = ptr_to_member;
return std::ptrdiff_t(caster.offset);
+ //Additional info on MSVC behaviour for the future. For 2/3 int ptr-to-member
+ //types dereference seems to be:
+ //
+ // vboffset = [compile_time_offset if 2-int ptr2memb] /
+ // [ptr2memb.i32[2] if 3-int ptr2memb].
+ // vbtable = *(this + vboffset);
+ // adj = vbtable[ptr2memb.i32[1]];
+ // var = adj + (this + vboffset) + ptr2memb.i32[0];
+ //
+ //To reverse the operation we need to
+ // - obtain vboffset (in 2-int ptr2memb implementation only)
+ // - Go to Parent's vbtable and obtain adjustment at index ptr2memb.i32[1]
+ // - parent = member - adj - vboffset - ptr2memb.i32[0]
+ //
+ //Even accessing to RTTI we might not be able to obtain this information
+ //so anyone who thinks it's possible, please send a patch.
+
//This works with gcc, msvc, ac++, ibmcpp
#elif defined(__GNUC__) || defined(__HP_aCC) || defined(BOOST_INTEL) || \
defined(__IBMCPP__) || defined(__DECCXX)
diff --git a/3party/boost/boost/intrusive/detail/preprocessor.hpp b/3party/boost/boost/intrusive/detail/preprocessor.hpp
index 348b104bb0..b8143a4412 100644
--- a/3party/boost/boost/intrusive/detail/preprocessor.hpp
+++ b/3party/boost/boost/intrusive/detail/preprocessor.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2008-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2008-2013. 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)
//
@@ -11,7 +11,7 @@
#ifndef BOOST_INTRUSIVE_DETAIL_PREPROCESSOR_HPP
#define BOOST_INTRUSIVE_DETAIL_PREPROCESSOR_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/intrusive/detail/rbtree_node.hpp b/3party/boost/boost/intrusive/detail/rbtree_node.hpp
index 92d9417c75..793d47fa7f 100644
--- a/3party/boost/boost/intrusive/detail/rbtree_node.hpp
+++ b/3party/boost/boost/intrusive/detail/rbtree_node.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012.
+// (C) Copyright Ion Gaztanaga 2006-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -20,6 +20,8 @@
#include <boost/intrusive/rbtree_algorithms.hpp>
#include <boost/intrusive/pointer_plus_bits.hpp>
#include <boost/intrusive/detail/mpl.hpp>
+#include <boost/intrusive/detail/utilities.hpp>
+#include <boost/intrusive/detail/tree_node.hpp>
namespace boost {
namespace intrusive {
diff --git a/3party/boost/boost/intrusive/detail/slist_node.hpp b/3party/boost/boost/intrusive/detail/slist_node.hpp
index ee92919809..9f57d6761a 100644
--- a/3party/boost/boost/intrusive/detail/slist_node.hpp
+++ b/3party/boost/boost/intrusive/detail/slist_node.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,7 +15,7 @@
#define BOOST_INTRUSIVE_SLIST_NODE_HPP
#include <boost/intrusive/detail/config_begin.hpp>
-#include <iterator>
+#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/pointer_traits.hpp>
@@ -54,41 +54,38 @@ struct slist_node_traits
// slist_iterator provides some basic functions for a
// node oriented bidirectional iterator:
-template<class Container, bool IsConst>
+template<class ValueTraits, bool IsConst>
class slist_iterator
- : public std::iterator
- < std::forward_iterator_tag
- , typename Container::value_type
- , typename Container::difference_type
- , typename detail::if_c<IsConst,typename Container::const_pointer,typename Container::pointer>::type
- , typename detail::if_c<IsConst,typename Container::const_reference,typename Container::reference>::type
- >
{
protected:
- typedef typename Container::real_value_traits real_value_traits;
- typedef typename real_value_traits::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename node_traits::node_ptr node_ptr;
- typedef typename pointer_traits
- <node_ptr>::template rebind_pointer <void>::type void_pointer;
- static const bool store_container_ptr =
- detail::store_cont_ptr_on_it<Container>::value;
+ typedef iiterator
+ <ValueTraits, IsConst, std::forward_iterator_tag> types_t;
+
+ static const bool stateful_value_traits = types_t::stateful_value_traits;
+
+ typedef ValueTraits value_traits;
+ typedef typename types_t::node_traits node_traits;
+
+ typedef typename types_t::node node;
+ typedef typename types_t::node_ptr node_ptr;
+ typedef typename types_t::const_value_traits_ptr const_value_traits_ptr;
public:
- typedef typename Container::value_type value_type;
- typedef typename detail::if_c<IsConst,typename Container::const_pointer,typename Container::pointer>::type pointer;
- typedef typename detail::if_c<IsConst,typename Container::const_reference,typename Container::reference>::type reference;
+ typedef typename types_t::iterator_traits::difference_type difference_type;
+ typedef typename types_t::iterator_traits::value_type value_type;
+ typedef typename types_t::iterator_traits::pointer pointer;
+ typedef typename types_t::iterator_traits::reference reference;
+ typedef typename types_t::iterator_traits::iterator_category iterator_category;
slist_iterator()
- : members_ (node_ptr(), 0)
{}
- explicit slist_iterator(const node_ptr & node, const Container *cont_ptr)
- : members_ (node, cont_ptr)
+ explicit slist_iterator(const node_ptr & nodeptr, const const_value_traits_ptr &traits_ptr)
+ : members_(nodeptr, traits_ptr)
{}
- slist_iterator(slist_iterator<Container, false> const& other)
- : members_(other.pointed_node(), other.get_container())
+ slist_iterator(slist_iterator<ValueTraits, false> const& other)
+ : members_(other.pointed_node(), other.get_value_traits())
{}
const node_ptr &pointed_node() const
@@ -97,6 +94,9 @@ class slist_iterator
slist_iterator &operator=(const node_ptr &node)
{ members_.nodeptr_ = node; return static_cast<slist_iterator&>(*this); }
+ const_value_traits_ptr get_value_traits() const
+ { return members_.get_ptr(); }
+
public:
slist_iterator& operator++()
{
@@ -121,41 +121,20 @@ class slist_iterator
{ return *operator->(); }
pointer operator->() const
- { return this->get_real_value_traits()->to_value_ptr(members_.nodeptr_); }
+ { return this->operator_arrow(detail::bool_<stateful_value_traits>()); }
- const Container *get_container() const
- {
- if(store_container_ptr)
- return static_cast<const Container*>(members_.get_ptr());
- else
- return 0;
- }
-
- slist_iterator<Container, false> unconst() const
- { return slist_iterator<Container, false>(this->pointed_node(), this->get_container()); }
-
- const real_value_traits *get_real_value_traits() const
- {
- if(store_container_ptr)
- return &this->get_container()->get_real_value_traits();
- else
- return 0;
- }
+ slist_iterator<ValueTraits, false> unconst() const
+ { return slist_iterator<ValueTraits, false>(this->pointed_node(), this->get_value_traits()); }
private:
- struct members
- : public detail::select_constptr
- <void_pointer, store_container_ptr>::type
- {
- typedef typename detail::select_constptr
- <void_pointer, store_container_ptr>::type Base;
- members(const node_ptr &n_ptr, const void *cont)
- : Base(cont), nodeptr_(n_ptr)
- {}
+ pointer operator_arrow(detail::false_) const
+ { return ValueTraits::to_value_ptr(members_.nodeptr_); }
+
+ pointer operator_arrow(detail::true_) const
+ { return this->get_value_traits()->to_value_ptr(members_.nodeptr_); }
- node_ptr nodeptr_;
- } members_;
+ iiterator_members<node_ptr, const_value_traits_ptr, stateful_value_traits> members_;
};
} //namespace intrusive
diff --git a/3party/boost/boost/intrusive/detail/transform_iterator.hpp b/3party/boost/boost/intrusive/detail/transform_iterator.hpp
index 488db9ade8..808e81a42a 100644
--- a/3party/boost/boost/intrusive/detail/transform_iterator.hpp
+++ b/3party/boost/boost/intrusive/detail/transform_iterator.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// 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/intrusive/detail/tree_algorithms.hpp b/3party/boost/boost/intrusive/detail/tree_algorithms.hpp
deleted file mode 100644
index 27c8667307..0000000000
--- a/3party/boost/boost/intrusive/detail/tree_algorithms.hpp
+++ /dev/null
@@ -1,1742 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-//
-// (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)
-//
-// See http://www.boost.org/libs/intrusive for documentation.
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef BOOST_INTRUSIVE_TREE_ALGORITHMS_HPP
-#define BOOST_INTRUSIVE_TREE_ALGORITHMS_HPP
-
-#include <boost/intrusive/detail/config_begin.hpp>
-#include <boost/intrusive/detail/assert.hpp>
-#include <boost/intrusive/intrusive_fwd.hpp>
-#include <cstddef>
-#include <boost/intrusive/detail/utilities.hpp>
-#include <boost/intrusive/pointer_traits.hpp>
-
-namespace boost {
-namespace intrusive {
-namespace detail {
-
-//! This is an implementation of a binary search tree.
-//! A node in the search tree has references to its children and its parent. This
-//! is to allow traversal of the whole tree from a given node making the
-//! implementation of iterator a pointer to a node.
-//! At the top of the tree a node is used specially. This node's parent pointer
-//! is pointing to the root of the tree. Its left pointer points to the
-//! leftmost node in the tree and the right pointer to the rightmost one.
-//! This node is used to represent the end-iterator.
-//!
-//! +---------+
-//! header------------------------------>| |
-//! | |
-//! +----------(left)--------| |--------(right)---------+
-//! | +---------+ |
-//! | | |
-//! | | (parent) |
-//! | | |
-//! | | |
-//! | +---------+ |
-//! root of tree ..|......................> | | |
-//! | | D | |
-//! | | | |
-//! | +-------+---------+-------+ |
-//! | | | |
-//! | | | |
-//! | | | |
-//! | | | |
-//! | | | |
-//! | +---------+ +---------+ |
-//! | | | | | |
-//! | | B | | F | |
-//! | | | | | |
-//! | +--+---------+--+ +--+---------+--+ |
-//! | | | | | |
-//! | | | | | |
-//! | | | | | |
-//! | +---+-----+ +-----+---+ +---+-----+ +-----+---+ |
-//! +-->| | | | | | | |<--+
-//! | A | | C | | E | | G |
-//! | | | | | | | |
-//! +---------+ +---------+ +---------+ +---------+
-//!
-
-//! tree_algorithms is configured with a NodeTraits class, which encapsulates the
-//! information about the node to be manipulated. NodeTraits must support the
-//! following interface:
-//!
-//! <b>Typedefs</b>:
-//!
-//! <tt>node</tt>: The type of the node that forms the circular list
-//!
-//! <tt>node_ptr</tt>: A pointer to a node
-//!
-//! <tt>const_node_ptr</tt>: A pointer to a const node
-//!
-//! <b>Static functions</b>:
-//!
-//! <tt>static node_ptr get_parent(const_node_ptr n);</tt>
-//!
-//! <tt>static void set_parent(node_ptr n, node_ptr parent);</tt>
-//!
-//! <tt>static node_ptr get_left(const_node_ptr n);</tt>
-//!
-//! <tt>static void set_left(node_ptr n, node_ptr left);</tt>
-//!
-//! <tt>static node_ptr get_right(const_node_ptr n);</tt>
-//!
-//! <tt>static void set_right(node_ptr n, node_ptr right);</tt>
-template<class NodeTraits>
-class tree_algorithms
-{
- public:
- typedef typename NodeTraits::node node;
- typedef NodeTraits node_traits;
- typedef typename NodeTraits::node_ptr node_ptr;
- typedef typename NodeTraits::const_node_ptr const_node_ptr;
-
- //! This type is the information that will be filled by insert_unique_check
- struct insert_commit_data
- {
- insert_commit_data()
- : link_left(false)
- , node()
- {}
- bool link_left;
- node_ptr node;
- };
-
- struct nop_erase_fixup
- {
- void operator()(const node_ptr&, const node_ptr&){}
- };
-
- /// @cond
- private:
- template<class Disposer>
- struct dispose_subtree_disposer
- {
- dispose_subtree_disposer(Disposer &disp, const node_ptr & subtree)
- : disposer_(&disp), subtree_(subtree)
- {}
-
- void release()
- { disposer_ = 0; }
-
- ~dispose_subtree_disposer()
- {
- if(disposer_){
- dispose_subtree(subtree_, *disposer_);
- }
- }
- Disposer *disposer_;
- node_ptr subtree_;
- };
-
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
-
- /// @endcond
-
- public:
- static node_ptr begin_node(const const_node_ptr & header)
- { return node_traits::get_left(header); }
-
- static node_ptr end_node(const const_node_ptr & header)
- { return uncast(header); }
-
- //! <b>Requires</b>: 'node' is a node of the tree or an node initialized
- //! by init(...) or init_node.
- //!
- //! <b>Effects</b>: Returns true if the node is initialized by init() or init_node().
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static bool unique(const const_node_ptr & node)
- { return !NodeTraits::get_parent(node); }
-
- static node_ptr get_header(const const_node_ptr & node)
- {
- node_ptr h = uncast(node);
- if(NodeTraits::get_parent(node)){
- h = NodeTraits::get_parent(node);
- while(!is_header(h))
- h = NodeTraits::get_parent(h);
- }
- return h;
- }
-
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
- static void swap_nodes(const node_ptr & node1, const node_ptr & node2)
- {
- if(node1 == node2)
- return;
-
- node_ptr header1(get_header(node1)), header2(get_header(node2));
- swap_nodes(node1, header1, node2, header2);
- }
-
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees with header header1 and header2.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
- static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2)
- {
- if(node1 == node2)
- return;
-
- //node1 and node2 must not be header nodes
- //BOOST_INTRUSIVE_INVARIANT_ASSERT((header1 != node1 && header2 != node2));
- if(header1 != header2){
- //Update header1 if necessary
- if(node1 == NodeTraits::get_left(header1)){
- NodeTraits::set_left(header1, node2);
- }
-
- if(node1 == NodeTraits::get_right(header1)){
- NodeTraits::set_right(header1, node2);
- }
-
- if(node1 == NodeTraits::get_parent(header1)){
- NodeTraits::set_parent(header1, node2);
- }
-
- //Update header2 if necessary
- if(node2 == NodeTraits::get_left(header2)){
- NodeTraits::set_left(header2, node1);
- }
-
- if(node2 == NodeTraits::get_right(header2)){
- NodeTraits::set_right(header2, node1);
- }
-
- if(node2 == NodeTraits::get_parent(header2)){
- NodeTraits::set_parent(header2, node1);
- }
- }
- else{
- //If both nodes are from the same tree
- //Update header if necessary
- if(node1 == NodeTraits::get_left(header1)){
- NodeTraits::set_left(header1, node2);
- }
- else if(node2 == NodeTraits::get_left(header2)){
- NodeTraits::set_left(header2, node1);
- }
-
- if(node1 == NodeTraits::get_right(header1)){
- NodeTraits::set_right(header1, node2);
- }
- else if(node2 == NodeTraits::get_right(header2)){
- NodeTraits::set_right(header2, node1);
- }
-
- if(node1 == NodeTraits::get_parent(header1)){
- NodeTraits::set_parent(header1, node2);
- }
- else if(node2 == NodeTraits::get_parent(header2)){
- NodeTraits::set_parent(header2, node1);
- }
-
- //Adjust data in nodes to be swapped
- //so that final link swap works as expected
- if(node1 == NodeTraits::get_parent(node2)){
- NodeTraits::set_parent(node2, node2);
-
- if(node2 == NodeTraits::get_right(node1)){
- NodeTraits::set_right(node1, node1);
- }
- else{
- NodeTraits::set_left(node1, node1);
- }
- }
- else if(node2 == NodeTraits::get_parent(node1)){
- NodeTraits::set_parent(node1, node1);
-
- if(node1 == NodeTraits::get_right(node2)){
- NodeTraits::set_right(node2, node2);
- }
- else{
- NodeTraits::set_left(node2, node2);
- }
- }
- }
-
- //Now swap all the links
- node_ptr temp;
- //swap left link
- temp = NodeTraits::get_left(node1);
- NodeTraits::set_left(node1, NodeTraits::get_left(node2));
- NodeTraits::set_left(node2, temp);
- //swap right link
- temp = NodeTraits::get_right(node1);
- NodeTraits::set_right(node1, NodeTraits::get_right(node2));
- NodeTraits::set_right(node2, temp);
- //swap parent link
- temp = NodeTraits::get_parent(node1);
- NodeTraits::set_parent(node1, NodeTraits::get_parent(node2));
- NodeTraits::set_parent(node2, temp);
-
- //Now adjust adjacent nodes for newly inserted node 1
- if((temp = NodeTraits::get_left(node1))){
- NodeTraits::set_parent(temp, node1);
- }
- if((temp = NodeTraits::get_right(node1))){
- NodeTraits::set_parent(temp, node1);
- }
- if((temp = NodeTraits::get_parent(node1)) &&
- //The header has been already updated so avoid it
- temp != header2){
- if(NodeTraits::get_left(temp) == node2){
- NodeTraits::set_left(temp, node1);
- }
- if(NodeTraits::get_right(temp) == node2){
- NodeTraits::set_right(temp, node1);
- }
- }
- //Now adjust adjacent nodes for newly inserted node 2
- if((temp = NodeTraits::get_left(node2))){
- NodeTraits::set_parent(temp, node2);
- }
- if((temp = NodeTraits::get_right(node2))){
- NodeTraits::set_parent(temp, node2);
- }
- if((temp = NodeTraits::get_parent(node2)) &&
- //The header has been already updated so avoid it
- temp != header1){
- if(NodeTraits::get_left(temp) == node1){
- NodeTraits::set_left(temp, node2);
- }
- if(NodeTraits::get_right(temp) == node1){
- NodeTraits::set_right(temp, node2);
- }
- }
- }
-
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing and comparison is needed.
- //!
- //!Experimental function
- static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node)
- {
- if(node_to_be_replaced == new_node)
- return;
- replace_node(node_to_be_replaced, get_header(node_to_be_replaced), new_node);
- }
-
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! with header "header" and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- //!
- //!Experimental function
- static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node)
- {
- if(node_to_be_replaced == new_node)
- return;
-
- //Update header if necessary
- if(node_to_be_replaced == NodeTraits::get_left(header)){
- NodeTraits::set_left(header, new_node);
- }
-
- if(node_to_be_replaced == NodeTraits::get_right(header)){
- NodeTraits::set_right(header, new_node);
- }
-
- if(node_to_be_replaced == NodeTraits::get_parent(header)){
- NodeTraits::set_parent(header, new_node);
- }
-
- //Now set data from the original node
- node_ptr temp;
- NodeTraits::set_left(new_node, NodeTraits::get_left(node_to_be_replaced));
- NodeTraits::set_right(new_node, NodeTraits::get_right(node_to_be_replaced));
- NodeTraits::set_parent(new_node, NodeTraits::get_parent(node_to_be_replaced));
-
- //Now adjust adjacent nodes for newly inserted node
- if((temp = NodeTraits::get_left(new_node))){
- NodeTraits::set_parent(temp, new_node);
- }
- if((temp = NodeTraits::get_right(new_node))){
- NodeTraits::set_parent(temp, new_node);
- }
- if((temp = NodeTraits::get_parent(new_node)) &&
- //The header has been already updated so avoid it
- temp != header){
- if(NodeTraits::get_left(temp) == node_to_be_replaced){
- NodeTraits::set_left(temp, new_node);
- }
- if(NodeTraits::get_right(temp) == node_to_be_replaced){
- NodeTraits::set_right(temp, new_node);
- }
- }
- }
-
- //! <b>Requires</b>: 'node' is a node from the tree except the header.
- //!
- //! <b>Effects</b>: Returns the next node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr next_node(const node_ptr & node)
- {
- node_ptr p_right(NodeTraits::get_right(node));
- if(p_right){
- return minimum(p_right);
- }
- else {
- node_ptr p(node);
- node_ptr x = NodeTraits::get_parent(p);
- while(p == NodeTraits::get_right(x)){
- p = x;
- x = NodeTraits::get_parent(x);
- }
- return NodeTraits::get_right(p) != x ? x : uncast(p);
- }
- }
-
- //! <b>Requires</b>: 'node' is a node from the tree except the leftmost node.
- //!
- //! <b>Effects</b>: Returns the previous node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr prev_node(const node_ptr & node)
- {
- if(is_header(node)){
- return NodeTraits::get_right(node);
- //return maximum(NodeTraits::get_parent(node));
- }
- else if(NodeTraits::get_left(node)){
- return maximum(NodeTraits::get_left(node));
- }
- else {
- node_ptr p(node);
- node_ptr x = NodeTraits::get_parent(p);
- while(p == NodeTraits::get_left(x)){
- p = x;
- x = NodeTraits::get_parent(x);
- }
- return x;
- }
- }
-
- //! <b>Requires</b>: 'node' is a node of a tree but not the header.
- //!
- //! <b>Effects</b>: Returns the minimum node of the subtree starting at p.
- //!
- //! <b>Complexity</b>: Logarithmic to the size of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr minimum (node_ptr node)
- {
- for(node_ptr p_left = NodeTraits::get_left(node)
- ;p_left
- ;p_left = NodeTraits::get_left(node)){
- node = p_left;
- }
- return node;
- }
-
- //! <b>Requires</b>: 'node' is a node of a tree but not the header.
- //!
- //! <b>Effects</b>: Returns the maximum node of the subtree starting at p.
- //!
- //! <b>Complexity</b>: Logarithmic to the size of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr maximum(node_ptr node)
- {
- for(node_ptr p_right = NodeTraits::get_right(node)
- ;p_right
- ;p_right = NodeTraits::get_right(node)){
- node = p_right;
- }
- return node;
- }
-
- //! <b>Requires</b>: 'node' must not be part of any tree.
- //!
- //! <b>Effects</b>: After the function unique(node) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init(const node_ptr & node)
- {
- NodeTraits::set_parent(node, node_ptr());
- NodeTraits::set_left(node, node_ptr());
- NodeTraits::set_right(node, node_ptr());
- };
-
- //! <b>Effects</b>: Returns true if node is in the same state as if called init(node)
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static bool inited(const const_node_ptr & node)
- {
- return !NodeTraits::get_parent(node) &&
- !NodeTraits::get_left(node) &&
- !NodeTraits::get_right(node) ;
- };
-
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: Initializes the header to represent an empty tree.
- //! unique(header) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init_header(const node_ptr & header)
- {
- NodeTraits::set_parent(header, node_ptr());
- NodeTraits::set_left(header, header);
- NodeTraits::set_right(header, header);
- }
-
- //! <b>Requires</b>: "disposer" must be an object function
- //! taking a node_ptr parameter and shouldn't throw.
- //!
- //! <b>Effects</b>: Empties the target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
- template<class Disposer>
- static void clear_and_dispose(const node_ptr & header, Disposer disposer)
- {
- node_ptr source_root = NodeTraits::get_parent(header);
- if(!source_root)
- return;
- dispose_subtree(source_root, disposer);
- init_header(header);
- }
-
- //! <b>Requires</b>: header is the header of a tree.
- //!
- //! <b>Effects</b>: Unlinks the leftmost node from the tree, and
- //! updates the header link to the new leftmost node.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header)
- {
- node_ptr leftmost = NodeTraits::get_left(header);
- if (leftmost == header)
- return node_ptr();
- node_ptr leftmost_parent(NodeTraits::get_parent(leftmost));
- node_ptr leftmost_right (NodeTraits::get_right(leftmost));
- bool is_root = leftmost_parent == header;
-
- if (leftmost_right){
- NodeTraits::set_parent(leftmost_right, leftmost_parent);
- NodeTraits::set_left(header, tree_algorithms::minimum(leftmost_right));
-
- if (is_root)
- NodeTraits::set_parent(header, leftmost_right);
- else
- NodeTraits::set_left(NodeTraits::get_parent(header), leftmost_right);
- }
- else if (is_root){
- NodeTraits::set_parent(header, node_ptr());
- NodeTraits::set_left(header, header);
- NodeTraits::set_right(header, header);
- }
- else{
- NodeTraits::set_left(leftmost_parent, node_ptr());
- NodeTraits::set_left(header, leftmost_parent);
- }
- return leftmost;
- }
-
- //! <b>Requires</b>: node is a node of the tree but it's not the header.
- //!
- //! <b>Effects</b>: Returns the number of nodes of the subtree.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t count(const const_node_ptr & subtree)
- {
- if(!subtree) return 0;
- std::size_t count = 0;
- node_ptr p = minimum(uncast(subtree));
- bool continue_looping = true;
- while(continue_looping){
- ++count;
- node_ptr p_right(NodeTraits::get_right(p));
- if(p_right){
- p = minimum(p_right);
- }
- else {
- for(;;){
- node_ptr q;
- if (p == subtree){
- continue_looping = false;
- break;
- }
- q = p;
- p = NodeTraits::get_parent(p);
- if (NodeTraits::get_left(p) == q)
- break;
- }
- }
- }
- return count;
- }
-
- //! <b>Requires</b>: node is a node of the tree but it's not the header.
- //!
- //! <b>Effects</b>: Returns the number of nodes of the subtree.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t size(const const_node_ptr & header)
- {
- node_ptr beg(begin_node(header));
- node_ptr end(end_node(header));
- std::size_t i = 0;
- for(;beg != end; beg = next_node(beg)) ++i;
- return i;
- }
-
- //! <b>Requires</b>: header1 and header2 must be the header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two trees. After the function header1 will contain
- //! links to the second tree and header2 will have links to the first tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static void swap_tree(const node_ptr & header1, const node_ptr & header2)
- {
- if(header1 == header2)
- return;
-
- node_ptr tmp;
-
- //Parent swap
- tmp = NodeTraits::get_parent(header1);
- NodeTraits::set_parent(header1, NodeTraits::get_parent(header2));
- NodeTraits::set_parent(header2, tmp);
- //Left swap
- tmp = NodeTraits::get_left(header1);
- NodeTraits::set_left(header1, NodeTraits::get_left(header2));
- NodeTraits::set_left(header2, tmp);
- //Right swap
- tmp = NodeTraits::get_right(header1);
- NodeTraits::set_right(header1, NodeTraits::get_right(header2));
- NodeTraits::set_right(header2, tmp);
-
- //Now test parent
- node_ptr h1_parent(NodeTraits::get_parent(header1));
- if(h1_parent){
- NodeTraits::set_parent(h1_parent, header1);
- }
- else{
- NodeTraits::set_left(header1, header1);
- NodeTraits::set_right(header1, header1);
- }
-
- node_ptr h2_parent(NodeTraits::get_parent(header2));
- if(h2_parent){
- NodeTraits::set_parent(h2_parent, header2);
- }
- else{
- NodeTraits::set_left(header2, header2);
- NodeTraits::set_right(header2, header2);
- }
- }
-
- static bool is_header(const const_node_ptr & p)
- {
- node_ptr p_left (NodeTraits::get_left(p));
- node_ptr p_right(NodeTraits::get_right(p));
- if(!NodeTraits::get_parent(p) || //Header condition when empty tree
- (p_left && p_right && //Header always has leftmost and rightmost
- (p_left == p_right || //Header condition when only node
- (NodeTraits::get_parent(p_left) != p ||
- NodeTraits::get_parent(p_right) != p ))
- //When tree size > 1 headers can't be leftmost's
- //and rightmost's parent
- )){
- return true;
- }
- return false;
- }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the element that is equivalent to
- //! "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- template<class KeyType, class KeyNodePtrCompare>
- static node_ptr find
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- {
- node_ptr end = uncast(header);
- node_ptr y = lower_bound(header, key, comp);
- return (y == end || comp(key, y)) ? end : y;
- }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
- //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
- template< class KeyType, class KeyNodePtrCompare>
- static std::pair<node_ptr, node_ptr> bounded_range
- ( const const_node_ptr & header
- , const KeyType &lower_key
- , const KeyType &upper_key
- , KeyNodePtrCompare comp
- , bool left_closed
- , bool right_closed)
- {
- node_ptr y = uncast(header);
- node_ptr x = NodeTraits::get_parent(header);
-
- while(x){
- //If x is less than lower_key the target
- //range is on the right part
- if(comp(x, lower_key)){
- //Check for invalid input range
- BOOST_INTRUSIVE_INVARIANT_ASSERT(comp(x, upper_key));
- x = NodeTraits::get_right(x);
- }
- //If the upper_key is less than x, the target
- //range is on the left part
- else if(comp(upper_key, x)){
- //y > upper_key
- y = x;
- x = NodeTraits::get_left(x);
- }
- else{
- //x is inside the bounded range( x >= lower_key && x <= upper_key),
- //so we must split lower and upper searches
- //
- //Sanity check: if lower_key and upper_key are equal, then both left_closed and right_closed can't be false
- BOOST_INTRUSIVE_INVARIANT_ASSERT(left_closed || right_closed || comp(lower_key, x) || comp(x, upper_key));
- return std::pair<node_ptr,node_ptr>(
- left_closed
- //If left_closed, then comp(x, lower_key) is already the lower_bound
- //condition so we save one comparison and go to the next level
- //following traditional lower_bound algo
- ? lower_bound_loop(NodeTraits::get_left(x), x, lower_key, comp)
- //If left-open, comp(x, lower_key) is not the upper_bound algo
- //condition so we must recheck current 'x' node with upper_bound algo
- : upper_bound_loop(x, y, lower_key, comp)
- ,
- right_closed
- //If right_closed, then comp(upper_key, x) is already the upper_bound
- //condition so we can save one comparison and go to the next level
- //following lower_bound algo
- ? upper_bound_loop(NodeTraits::get_right(x), y, upper_key, comp)
- //If right-open, comp(upper_key, x) is not the lower_bound algo
- //condition so we must recheck current 'x' node with lower_bound algo
- : lower_bound_loop(x, y, upper_key, comp)
- );
- }
- }
- return std::pair<node_ptr,node_ptr> (y, y);
- }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an a pair of node_ptr delimiting a range containing
- //! all elements that are equivalent to "key" according to "comp" or an
- //! empty range that indicates the position where those elements would be
- //! if there are no equivalent elements.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- template<class KeyType, class KeyNodePtrCompare>
- static std::pair<node_ptr, node_ptr> equal_range
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- {
- return bounded_range(header, key, key, comp, true, true);
- }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is
- //! not less than "key" according to "comp" or "header" if that element does
- //! not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- template<class KeyType, class KeyNodePtrCompare>
- static node_ptr lower_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- {
- return lower_bound_loop(NodeTraits::get_parent(header), uncast(header), key, comp);
- }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is greater
- //! than "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- template<class KeyType, class KeyNodePtrCompare>
- static node_ptr upper_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- {
- return upper_bound_loop(NodeTraits::get_parent(header), uncast(header), key, comp);
- }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "commit_data" must have been obtained from a previous call to
- //! "insert_unique_check". No objects should have been inserted or erased
- //! from the set between the "insert_unique_check" that filled "commit_data"
- //! and the call to "insert_commit".
- //!
- //!
- //! <b>Effects</b>: Inserts new_node in the set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_unique_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- static void insert_unique_commit
- (const node_ptr & header, const node_ptr & new_value, const insert_commit_data &commit_data)
- { return insert_commit(header, new_value, commit_data); }
-
- static void insert_commit
- (const node_ptr & header, const node_ptr & new_node, const insert_commit_data &commit_data)
- {
- //Check if commit_data has not been initialized by a insert_unique_check call.
- BOOST_INTRUSIVE_INVARIANT_ASSERT(commit_data.node != node_ptr());
- node_ptr parent_node(commit_data.node);
- if(parent_node == header){
- NodeTraits::set_parent(header, new_node);
- NodeTraits::set_right(header, new_node);
- NodeTraits::set_left(header, new_node);
- }
- else if(commit_data.link_left){
- NodeTraits::set_left(parent_node, new_node);
- if(parent_node == NodeTraits::get_left(header))
- NodeTraits::set_left(header, new_node);
- }
- else{
- NodeTraits::set_right(parent_node, new_node);
- if(parent_node == NodeTraits::get_right(header))
- NodeTraits::set_right(header, new_node);
- }
- NodeTraits::set_parent(new_node, parent_node);
- NodeTraits::set_right(new_node, node_ptr());
- NodeTraits::set_left(new_node, node_ptr());
- }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares KeyType with a node_ptr.
- //!
- //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
- //! tree according to "comp" and obtains the needed information to realize
- //! a constant-time node insertion if there is no equivalent node.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing a node_ptr to the already present node
- //! and false. If there is not equivalent key can be inserted returns true
- //! in the returned pair's boolean and fills "commit_data" that is meant to
- //! be used with the "insert_commit" function to achieve a constant-time
- //! insertion function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a node is expensive and the user does not want to have two equivalent nodes
- //! in the tree: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the node and this function offers the possibility to use that part
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the node and use
- //! "insert_commit" to insert the node in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
- //! if no more objects are inserted or erased from the set.
- template<class KeyType, class KeyNodePtrCompare>
- static std::pair<node_ptr, bool> insert_unique_check
- (const const_node_ptr & header, const KeyType &key
- ,KeyNodePtrCompare comp, insert_commit_data &commit_data, std::size_t *pdepth = 0)
- {
- std::size_t depth = 0;
- node_ptr h(uncast(header));
- node_ptr y(h);
- node_ptr x(NodeTraits::get_parent(y));
- node_ptr prev = node_ptr();
-
- //Find the upper bound, cache the previous value and if we should
- //store it in the left or right node
- bool left_child = true;
- while(x){
- ++depth;
- y = x;
- x = (left_child = comp(key, x)) ?
- NodeTraits::get_left(x) : (prev = y, NodeTraits::get_right(x));
- }
-
- if(pdepth) *pdepth = depth;
-
- //Since we've found the upper bound there is no other value with the same key if:
- // - There is no previous node
- // - The previous node is less than the key
- if(!prev || comp(prev, key)){
- commit_data.link_left = left_child;
- commit_data.node = y;
- return std::pair<node_ptr, bool>(node_ptr(), true);
- }
- //If the previous value was not less than key, it means that it's equal
- //(because we've checked the upper bound)
- else{
- return std::pair<node_ptr, bool>(prev, false);
- }
- }
-
- template<class KeyType, class KeyNodePtrCompare>
- static std::pair<node_ptr, bool> insert_unique_check
- (const const_node_ptr & header, const node_ptr &hint, const KeyType &key
- ,KeyNodePtrCompare comp, insert_commit_data &commit_data, std::size_t *pdepth = 0)
- {
- //hint must be bigger than the key
- if(hint == header || comp(key, hint)){
- node_ptr prev(hint);
- //Previous value should be less than the key
- if(hint == begin_node(header) || comp((prev = prev_node(hint)), key)){
- commit_data.link_left = unique(header) || !NodeTraits::get_left(hint);
- commit_data.node = commit_data.link_left ? hint : prev;
- if(pdepth){
- *pdepth = commit_data.node == header ? 0 : depth(commit_data.node) + 1;
- }
- return std::pair<node_ptr, bool>(node_ptr(), true);
- }
- }
- //Hint was wrong, use hintless insertion
- return insert_unique_check(header, key, comp, commit_data, pdepth);
- }
-
- template<class NodePtrCompare>
- static void insert_equal_check
- (const node_ptr &header, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp
- , insert_commit_data &commit_data, std::size_t *pdepth = 0)
- {
- if(hint == header || !comp(hint, new_node)){
- node_ptr prev(hint);
- if(hint == NodeTraits::get_left(header) ||
- !comp(new_node, (prev = prev_node(hint)))){
- bool link_left = unique(header) || !NodeTraits::get_left(hint);
- commit_data.link_left = link_left;
- commit_data.node = link_left ? hint : prev;
- if(pdepth){
- *pdepth = commit_data.node == header ? 0 : depth(commit_data.node) + 1;
- }
- }
- else{
- insert_equal_upper_bound_check(header, new_node, comp, commit_data, pdepth);
- }
- }
- else{
- insert_equal_lower_bound_check(header, new_node, comp, commit_data, pdepth);
- }
- }
-
- template<class NodePtrCompare>
- static void insert_equal_upper_bound_check
- (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
- { insert_equal_check_impl(true, h, new_node, comp, commit_data, pdepth); }
-
- template<class NodePtrCompare>
- static void insert_equal_lower_bound_check
- (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
- { insert_equal_check_impl(false, h, new_node, comp, commit_data, pdepth); }
-
- template<class NodePtrCompare>
- static node_ptr insert_equal
- (const node_ptr & h, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp, std::size_t *pdepth = 0)
- {
- insert_commit_data commit_data;
- insert_equal_check(h, hint, new_node, comp, commit_data, pdepth);
- insert_commit(h, new_node, commit_data);
- return new_node;
- }
-
- template<class NodePtrCompare>
- static node_ptr insert_equal_upper_bound
- (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, std::size_t *pdepth = 0)
- {
- insert_commit_data commit_data;
- insert_equal_upper_bound_check(h, new_node, comp, commit_data, pdepth);
- insert_commit(h, new_node, commit_data);
- return new_node;
- }
-
- template<class NodePtrCompare>
- static node_ptr insert_equal_lower_bound
- (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, std::size_t *pdepth = 0)
- {
- insert_commit_data commit_data;
- insert_equal_lower_bound_check(h, new_node, comp, commit_data, pdepth);
- insert_commit(h, new_node, commit_data);
- return new_node;
- }
-
- static node_ptr insert_before
- (const node_ptr & header, const node_ptr & pos, const node_ptr & new_node, std::size_t *pdepth = 0)
- {
- insert_commit_data commit_data;
- insert_before_check(header, pos, commit_data, pdepth);
- insert_commit(header, new_node, commit_data);
- return new_node;
- }
-
- static void insert_before_check
- (const node_ptr &header, const node_ptr & pos
- , insert_commit_data &commit_data, std::size_t *pdepth = 0)
- {
- node_ptr prev(pos);
- if(pos != NodeTraits::get_left(header))
- prev = prev_node(pos);
- bool link_left = unique(header) || !NodeTraits::get_left(pos);
- commit_data.link_left = link_left;
- commit_data.node = link_left ? pos : prev;
- if(pdepth){
- *pdepth = commit_data.node == header ? 0 : depth(commit_data.node) + 1;
- }
- }
-
- static void push_back
- (const node_ptr & header, const node_ptr & new_node, std::size_t *pdepth = 0)
- {
- insert_commit_data commit_data;
- push_back_check(header, commit_data, pdepth);
- insert_commit(header, new_node, commit_data);
- }
-
- static void push_back_check
- (const node_ptr & header, insert_commit_data &commit_data, std::size_t *pdepth = 0)
- {
- node_ptr prev(NodeTraits::get_right(header));
- if(pdepth){
- *pdepth = prev == header ? 0 : depth(prev) + 1;
- }
- commit_data.link_left = false;
- commit_data.node = prev;
- }
-
- static void push_front
- (const node_ptr & header, const node_ptr & new_node, std::size_t *pdepth = 0)
- {
- insert_commit_data commit_data;
- push_front_check(header, commit_data, pdepth);
- insert_commit(header, new_node, commit_data);
- }
-
- static void push_front_check
- (const node_ptr & header, insert_commit_data &commit_data, std::size_t *pdepth = 0)
- {
- node_ptr pos(NodeTraits::get_left(header));
- if(pdepth){
- *pdepth = pos == header ? 0 : depth(pos) + 1;
- }
- commit_data.link_left = true;
- commit_data.node = pos;
- }
-
- //! <b>Requires</b>: 'node' can't be a header node.
- //!
- //! <b>Effects</b>: Calculates the depth of a node: the depth of a
- //! node is the length (number of edges) of the path from the root
- //! to that node. (The root node is at depth 0.)
- //!
- //! <b>Complexity</b>: Logarithmic to the number of nodes in the tree.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t depth(const_node_ptr node)
- {
- std::size_t depth = 0;
- node_ptr p_parent;
- while(node != NodeTraits::get_parent(p_parent = NodeTraits::get_parent(node))){
- ++depth;
- node = p_parent;
- }
- return depth;
- }
-
- //! <b>Requires</b>: "cloner" must be a function
- //! object taking a node_ptr and returning a new cloned node of it. "disposer" must
- //! take a node_ptr and shouldn't throw.
- //!
- //! <b>Effects</b>: First empties target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! Then, duplicates the entire tree pointed by "source_header" cloning each
- //! source node with <tt>node_ptr Cloner::operator()(const node_ptr &)</tt> to obtain
- //! the nodes of the target tree. If "cloner" throws, the cloned target nodes
- //! are disposed using <tt>void disposer(const node_ptr &)</tt>.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
- template <class Cloner, class Disposer>
- static void clone
- (const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer)
- {
- if(!unique(target_header)){
- clear_and_dispose(target_header, disposer);
- }
-
- node_ptr leftmost, rightmost;
- node_ptr new_root = clone_subtree
- (source_header, target_header, cloner, disposer, leftmost, rightmost);
-
- //Now update header node
- NodeTraits::set_parent(target_header, new_root);
- NodeTraits::set_left (target_header, leftmost);
- NodeTraits::set_right (target_header, rightmost);
- }
-
- template <class Cloner, class Disposer>
- static node_ptr clone_subtree
- (const const_node_ptr &source_parent, const node_ptr &target_parent
- , Cloner cloner, Disposer disposer
- , node_ptr &leftmost_out, node_ptr &rightmost_out
- )
- {
- node_ptr target_sub_root = target_parent;
- node_ptr source_root = NodeTraits::get_parent(source_parent);
- if(!source_root){
- leftmost_out = rightmost_out = source_root;
- }
- else{
- //We'll calculate leftmost and rightmost nodes while iterating
- node_ptr current = source_root;
- node_ptr insertion_point = target_sub_root = cloner(current);
-
- //We'll calculate leftmost and rightmost nodes while iterating
- node_ptr leftmost = target_sub_root;
- node_ptr rightmost = target_sub_root;
-
- //First set the subroot
- NodeTraits::set_left(target_sub_root, node_ptr());
- NodeTraits::set_right(target_sub_root, node_ptr());
- NodeTraits::set_parent(target_sub_root, target_parent);
-
- dispose_subtree_disposer<Disposer> rollback(disposer, target_sub_root);
- while(true) {
- //First clone left nodes
- if( NodeTraits::get_left(current) &&
- !NodeTraits::get_left(insertion_point)) {
- current = NodeTraits::get_left(current);
- node_ptr temp = insertion_point;
- //Clone and mark as leaf
- insertion_point = cloner(current);
- NodeTraits::set_left (insertion_point, node_ptr());
- NodeTraits::set_right (insertion_point, node_ptr());
- //Insert left
- NodeTraits::set_parent(insertion_point, temp);
- NodeTraits::set_left (temp, insertion_point);
- //Update leftmost
- if(rightmost == target_sub_root)
- leftmost = insertion_point;
- }
- //Then clone right nodes
- else if( NodeTraits::get_right(current) &&
- !NodeTraits::get_right(insertion_point)){
- current = NodeTraits::get_right(current);
- node_ptr temp = insertion_point;
- //Clone and mark as leaf
- insertion_point = cloner(current);
- NodeTraits::set_left (insertion_point, node_ptr());
- NodeTraits::set_right (insertion_point, node_ptr());
- //Insert right
- NodeTraits::set_parent(insertion_point, temp);
- NodeTraits::set_right (temp, insertion_point);
- //Update rightmost
- rightmost = insertion_point;
- }
- //If not, go up
- else if(current == source_root){
- break;
- }
- else{
- //Branch completed, go up searching more nodes to clone
- current = NodeTraits::get_parent(current);
- insertion_point = NodeTraits::get_parent(insertion_point);
- }
- }
- rollback.release();
- leftmost_out = leftmost;
- rightmost_out = rightmost;
- }
- return target_sub_root;
- }
-
- template<class Disposer>
- static void dispose_subtree(node_ptr x, Disposer disposer)
- {
- while (x){
- node_ptr save(NodeTraits::get_left(x));
- if (save) {
- // Right rotation
- NodeTraits::set_left(x, NodeTraits::get_right(save));
- NodeTraits::set_right(save, x);
- }
- else {
- save = NodeTraits::get_right(x);
- init(x);
- disposer(x);
- }
- x = save;
- }
- }
-
- //! <b>Requires</b>: p is a node of a tree.
- //!
- //! <b>Effects</b>: Returns true if p is a left child.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static bool is_left_child(const node_ptr & p)
- { return NodeTraits::get_left(NodeTraits::get_parent(p)) == p; }
-
- //! <b>Requires</b>: p is a node of a tree.
- //!
- //! <b>Effects</b>: Returns true if p is a right child.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static bool is_right_child(const node_ptr & p)
- { return NodeTraits::get_right(NodeTraits::get_parent(p)) == p; }
-
- //Fix header and own's parent data when replacing x with own, providing own's old data with parent
- static void replace_own_impl(const node_ptr & own, const node_ptr & x, const node_ptr & header, const node_ptr & own_parent, bool own_was_left)
- {
- if(NodeTraits::get_parent(header) == own)
- NodeTraits::set_parent(header, x);
- else if(own_was_left)
- NodeTraits::set_left(own_parent, x);
- else
- NodeTraits::set_right(own_parent, x);
- }
-
- //Fix header and own's parent data when replacing x with own, supposing own
- //links with its parent are still ok
- static void replace_own(const node_ptr & own, const node_ptr & x, const node_ptr & header)
- {
- node_ptr own_parent(NodeTraits::get_parent(own));
- bool own_is_left(NodeTraits::get_left(own_parent) == own);
- replace_own_impl(own, x, header, own_parent, own_is_left);
- }
-
- // rotate parent p to left (no header and p's parent fixup)
- static node_ptr rotate_left(const node_ptr & p)
- {
- node_ptr x(NodeTraits::get_right(p));
- node_ptr x_left(NodeTraits::get_left(x));
- NodeTraits::set_right(p, x_left);
- if(x_left){
- NodeTraits::set_parent(x_left, p);
- }
- NodeTraits::set_left(x, p);
- NodeTraits::set_parent(p, x);
- return x;
- }
-
- // rotate parent p to left (with header and p's parent fixup)
- static void rotate_left(const node_ptr & p, const node_ptr & header)
- {
- bool p_was_left(is_left_child(p));
- node_ptr p_old_parent(NodeTraits::get_parent(p));
- node_ptr x(rotate_left(p));
- NodeTraits::set_parent(x, p_old_parent);
- replace_own_impl(p, x, header, p_old_parent, p_was_left);
- }
-
- // rotate parent p to right (no header and p's parent fixup)
- static node_ptr rotate_right(const node_ptr & p)
- {
- node_ptr x(NodeTraits::get_left(p));
- node_ptr x_right(NodeTraits::get_right(x));
- NodeTraits::set_left(p, x_right);
- if(x_right){
- NodeTraits::set_parent(x_right, p);
- }
- NodeTraits::set_right(x, p);
- NodeTraits::set_parent(p, x);
- return x;
- }
-
- // rotate parent p to right (with header and p's parent fixup)
- static void rotate_right(const node_ptr & p, const node_ptr & header)
- {
- bool p_was_left(is_left_child(p));
- node_ptr p_old_parent(NodeTraits::get_parent(p));
- node_ptr x(rotate_right(p));
- NodeTraits::set_parent(x, p_old_parent);
- replace_own_impl(p, x, header, p_old_parent, p_was_left);
- }
-
- static void erase(const node_ptr & header, const node_ptr & z)
- {
- data_for_rebalance ignored;
- erase_impl(header, z, ignored);
- }
-
- struct data_for_rebalance
- {
- node_ptr x;
- node_ptr x_parent;
- node_ptr y;
- };
-
- template<class F>
- static void erase(const node_ptr & header, const node_ptr & z, F z_and_successor_fixup, data_for_rebalance &info)
- {
- erase_impl(header, z, info);
- if(info.y != z){
- z_and_successor_fixup(z, info.y);
- }
- }
-
- static void unlink(const node_ptr & node)
- {
- node_ptr x = NodeTraits::get_parent(node);
- if(x){
- while(!is_header(x))
- x = NodeTraits::get_parent(x);
- erase(x, node);
- }
- }
-
- static void tree_to_vine(const node_ptr & header)
- { subtree_to_vine(NodeTraits::get_parent(header)); }
-
- static void vine_to_tree(const node_ptr & header, std::size_t count)
- { vine_to_subtree(NodeTraits::get_parent(header), count); }
-
- static void rebalance(const node_ptr & header)
- {
- //Taken from:
- //"Tree rebalancing in optimal time and space"
- //Quentin F. Stout and Bette L. Warren
- std::size_t len = 0;
- subtree_to_vine(NodeTraits::get_parent(header), &len);
- vine_to_subtree(NodeTraits::get_parent(header), len);
- }
-
- static node_ptr rebalance_subtree(const node_ptr & old_root)
- {
- std::size_t len = 0;
- node_ptr new_root = subtree_to_vine(old_root, &len);
- return vine_to_subtree(new_root, len);
- }
-
- static node_ptr subtree_to_vine(const node_ptr & old_root, std::size_t *plen = 0)
- {
- std::size_t len;
- len = 0;
- if(!old_root) return node_ptr();
-
- //To avoid irregularities in the algorithm (old_root can be a
- //left or right child or even the root of the tree) just put the
- //root as the right child of its parent. Before doing this backup
- //information to restore the original relationship after
- //the algorithm is applied.
- node_ptr super_root = NodeTraits::get_parent(old_root);
- BOOST_INTRUSIVE_INVARIANT_ASSERT(super_root);
-
- //Get info
- node_ptr super_root_right_backup = NodeTraits::get_right(super_root);
- bool super_root_is_header = is_header(super_root);
- bool old_root_is_right = is_right_child(old_root);
-
- node_ptr x(old_root);
- node_ptr new_root(x);
- node_ptr save;
- bool moved_to_right = false;
- for( ; x; x = save){
- save = NodeTraits::get_left(x);
- if(save){
- // Right rotation
- node_ptr save_right = NodeTraits::get_right(save);
- node_ptr x_parent = NodeTraits::get_parent(x);
- NodeTraits::set_parent(save, x_parent);
- NodeTraits::set_right (x_parent, save);
- NodeTraits::set_parent(x, save);
- NodeTraits::set_right (save, x);
- NodeTraits::set_left(x, save_right);
- if(save_right)
- NodeTraits::set_parent(save_right, x);
- if(!moved_to_right)
- new_root = save;
- }
- else{
- moved_to_right = true;
- save = NodeTraits::get_right(x);
- ++len;
- }
- }
-
- if(super_root_is_header){
- NodeTraits::set_right(super_root, super_root_right_backup);
- NodeTraits::set_parent(super_root, new_root);
- }
- else if(old_root_is_right){
- NodeTraits::set_right(super_root, new_root);
- }
- else{
- NodeTraits::set_right(super_root, super_root_right_backup);
- NodeTraits::set_left(super_root, new_root);
- }
- if(plen) *plen = len;
- return new_root;
- }
-
- static node_ptr vine_to_subtree(const node_ptr & old_root, std::size_t count)
- {
- std::size_t leaf_nodes = count + 1 - ((std::size_t) 1 << floor_log2 (count + 1));
- std::size_t vine_nodes = count - leaf_nodes;
-
- node_ptr new_root = compress_subtree(old_root, leaf_nodes);
- while(vine_nodes > 1){
- vine_nodes /= 2;
- new_root = compress_subtree(new_root, vine_nodes);
- }
- return new_root;
- }
-
- static node_ptr compress_subtree(const node_ptr & old_root, std::size_t count)
- {
- if(!old_root) return old_root;
-
- //To avoid irregularities in the algorithm (old_root can be
- //left or right child or even the root of the tree) just put the
- //root as the right child of its parent. First obtain
- //information to restore the original relationship after
- //the algorithm is applied.
- node_ptr super_root = NodeTraits::get_parent(old_root);
- BOOST_INTRUSIVE_INVARIANT_ASSERT(super_root);
-
- //Get info
- node_ptr super_root_right_backup = NodeTraits::get_right(super_root);
- bool super_root_is_header = is_header(super_root);
- bool old_root_is_right = is_right_child(old_root);
-
- //Put old_root as right child
- NodeTraits::set_right(super_root, old_root);
-
- //Start the compression algorithm
- node_ptr even_parent = super_root;
- node_ptr new_root = old_root;
-
- while(count--){
- node_ptr even = NodeTraits::get_right(even_parent);
- node_ptr odd = NodeTraits::get_right(even);
-
- if(new_root == old_root)
- new_root = odd;
-
- node_ptr even_right = NodeTraits::get_left(odd);
- NodeTraits::set_right(even, even_right);
- if (even_right)
- NodeTraits::set_parent(even_right, even);
-
- NodeTraits::set_right(even_parent, odd);
- NodeTraits::set_parent(odd, even_parent);
- NodeTraits::set_left(odd, even);
- NodeTraits::set_parent(even, odd);
- even_parent = odd;
- }
-
- if(super_root_is_header){
- NodeTraits::set_parent(super_root, new_root);
- NodeTraits::set_right(super_root, super_root_right_backup);
- }
- else if(old_root_is_right){
- NodeTraits::set_right(super_root, new_root);
- }
- else{
- NodeTraits::set_left(super_root, new_root);
- NodeTraits::set_right(super_root, super_root_right_backup);
- }
- return new_root;
- }
-
- //! <b>Requires</b>: "n" must be a node inserted in a tree.
- //!
- //! <b>Effects</b>: Returns a pointer to the header node of the tree.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr get_root(const node_ptr & node)
- {
- BOOST_INTRUSIVE_INVARIANT_ASSERT((!inited(node)));
- node_ptr x = NodeTraits::get_parent(node);
- if(x){
- while(!is_header(x)){
- x = NodeTraits::get_parent(x);
- }
- return x;
- }
- else{
- return node;
- }
- }
-
- private:
-
- template<class KeyType, class KeyNodePtrCompare>
- static node_ptr lower_bound_loop
- (node_ptr x, node_ptr y, const KeyType &key, KeyNodePtrCompare comp)
- {
- while(x){
- if(comp(x, key)){
- x = NodeTraits::get_right(x);
- }
- else{
- y = x;
- x = NodeTraits::get_left(x);
- }
- }
- return y;
- }
-
- template<class KeyType, class KeyNodePtrCompare>
- static node_ptr upper_bound_loop
- (node_ptr x, node_ptr y, const KeyType &key, KeyNodePtrCompare comp)
- {
- while(x){
- if(comp(key, x)){
- y = x;
- x = NodeTraits::get_left(x);
- }
- else{
- x = NodeTraits::get_right(x);
- }
- }
- return y;
- }
-
-
- template<class NodePtrCompare>
- static void insert_equal_check_impl
- (bool upper, const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
- {
- std::size_t depth = 0;
- node_ptr y(h);
- node_ptr x(NodeTraits::get_parent(y));
- bool link_left;
-
- if(upper){
- while(x){
- ++depth;
- y = x;
- x = comp(new_node, x) ?
- NodeTraits::get_left(x) : NodeTraits::get_right(x);
- }
- link_left = (y == h) || comp(new_node, y);
- }
- else{
- while(x){
- ++depth;
- y = x;
- x = !comp(x, new_node) ?
- NodeTraits::get_left(x) : NodeTraits::get_right(x);
- }
- link_left = (y == h) || !comp(y, new_node);
- }
-
- commit_data.link_left = link_left;
- commit_data.node = y;
- if(pdepth) *pdepth = depth;
- }
-
- static void erase_impl(const node_ptr & header, const node_ptr & z, data_for_rebalance &info)
- {
- node_ptr y(z);
- node_ptr x;
- node_ptr x_parent = node_ptr();
- node_ptr z_left(NodeTraits::get_left(z));
- node_ptr z_right(NodeTraits::get_right(z));
- if(!z_left){
- x = z_right; // x might be null.
- }
- else if(!z_right){ // z has exactly one non-null child. y == z.
- x = z_left; // x is not null.
- }
- else{
- // find z's successor
- y = tree_algorithms::minimum (z_right);
- x = NodeTraits::get_right(y); // x might be null.
- }
-
- if(y != z){
- // relink y in place of z. y is z's successor
- NodeTraits::set_parent(NodeTraits::get_left(z), y);
- NodeTraits::set_left(y, NodeTraits::get_left(z));
- if(y != NodeTraits::get_right(z)){
- x_parent = NodeTraits::get_parent(y);
- if(x)
- NodeTraits::set_parent(x, x_parent);
- NodeTraits::set_left(x_parent, x); // y must be a child of left_
- NodeTraits::set_right(y, NodeTraits::get_right(z));
- NodeTraits::set_parent(NodeTraits::get_right(z), y);
- }
- else
- x_parent = y;
- tree_algorithms::replace_own (z, y, header);
- NodeTraits::set_parent(y, NodeTraits::get_parent(z));
- }
- else { // y == z --> z has only one child, or none
- x_parent = NodeTraits::get_parent(z);
- if(x)
- NodeTraits::set_parent(x, x_parent);
- tree_algorithms::replace_own (z, x, header);
- if(NodeTraits::get_left(header) == z){
- NodeTraits::set_left(header, !NodeTraits::get_right(z) ? // z->get_left() must be null also
- NodeTraits::get_parent(z) : // makes leftmost == header if z == root
- tree_algorithms::minimum (x));
- }
- if(NodeTraits::get_right(header) == z){
- NodeTraits::set_right(header, !NodeTraits::get_left(z) ? // z->get_right() must be null also
- NodeTraits::get_parent(z) : // makes rightmost == header if z == root
- tree_algorithms::maximum(x));
- }
- }
-
- info.x = x;
- info.x_parent = x_parent;
- info.y = y;
- }
-};
-
-} //namespace detail {
-} //namespace intrusive
-} //namespace boost
-
-#include <boost/intrusive/detail/config_end.hpp>
-
-#endif //BOOST_INTRUSIVE_TREE_ALGORITHMS_HPP
diff --git a/3party/boost/boost/intrusive/detail/tree_node.hpp b/3party/boost/boost/intrusive/detail/tree_node.hpp
index aa3374e947..f1497fb3a1 100644
--- a/3party/boost/boost/intrusive/detail/tree_node.hpp
+++ b/3party/boost/boost/intrusive/detail/tree_node.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,8 +15,11 @@
#include <boost/intrusive/detail/config_begin.hpp>
#include <iterator>
+#include <boost/intrusive/detail/utilities.hpp>
+#include <boost/intrusive/options.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/detail/mpl.hpp>
+#include <boost/intrusive/bstree_algorithms.hpp>
namespace boost {
namespace intrusive {
@@ -77,43 +80,38 @@ struct tree_node_traits
// tree_iterator provides some basic functions for a
// node oriented bidirectional iterator:
-template<class Container, bool IsConst>
+template<class ValueTraits, bool IsConst>
class tree_iterator
- : public std::iterator
- < std::bidirectional_iterator_tag
- , typename Container::value_type
- , typename Container::difference_type
- , typename detail::if_c<IsConst,typename Container::const_pointer,typename Container::pointer>::type
- , typename detail::if_c<IsConst,typename Container::const_reference,typename Container::reference>::type
- >
{
protected:
- typedef typename Container::real_value_traits real_value_traits;
- typedef typename Container::node_algorithms node_algorithms;
- typedef typename real_value_traits::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename node_traits::node_ptr node_ptr;
- typedef typename pointer_traits<node_ptr>::template
- rebind_pointer<void>::type void_pointer;
- static const bool store_container_ptr =
- detail::store_cont_ptr_on_it<Container>::value;
+ typedef iiterator< ValueTraits, IsConst
+ , std::bidirectional_iterator_tag> types_t;
- public:
- typedef typename Container::value_type value_type;
- typedef typename detail::if_c<IsConst,typename Container::const_pointer,typename Container::pointer>::type pointer;
- typedef typename detail::if_c<IsConst,typename Container::const_reference,typename Container::reference>::type reference;
+ typedef ValueTraits value_traits;
+ typedef typename types_t::node_traits node_traits;
+
+ typedef typename types_t::node node;
+ typedef typename types_t::node_ptr node_ptr;
+ typedef typename types_t::const_value_traits_ptr const_value_traits_ptr;
+ static const bool stateful_value_traits = types_t::stateful_value_traits;
+ typedef bstree_algorithms<node_traits> node_algorithms;
+ public:
+ typedef typename types_t::iterator_traits::difference_type difference_type;
+ typedef typename types_t::iterator_traits::value_type value_type;
+ typedef typename types_t::iterator_traits::pointer pointer;
+ typedef typename types_t::iterator_traits::reference reference;
+ typedef typename types_t::iterator_traits::iterator_category iterator_category;
tree_iterator()
- : members_ (node_ptr(), (const void *)0)
{}
- explicit tree_iterator(const node_ptr & nodeptr, const Container *cont_ptr)
- : members_ (nodeptr, cont_ptr)
+ explicit tree_iterator(const node_ptr & nodeptr, const const_value_traits_ptr &traits_ptr)
+ : members_(nodeptr, traits_ptr)
{}
- tree_iterator(tree_iterator<Container, false> const& other)
- : members_(other.pointed_node(), other.get_container())
+ tree_iterator(tree_iterator<value_traits, false> const& other)
+ : members_(other.pointed_node(), other.get_value_traits())
{}
const node_ptr &pointed_node() const
@@ -159,36 +157,27 @@ class tree_iterator
{ return *operator->(); }
pointer operator->() const
- { return this->get_real_value_traits()->to_value_ptr(members_.nodeptr_); }
+ { return this->operator_arrow(detail::bool_<stateful_value_traits>()); }
- const Container *get_container() const
- { return static_cast<const Container*>(members_.get_ptr()); }
-
- const real_value_traits *get_real_value_traits() const
- { return &this->get_container()->get_real_value_traits(); }
+ const_value_traits_ptr get_value_traits() const
+ { return members_.get_ptr(); }
tree_iterator end_iterator_from_it() const
{
- return tree_iterator(node_algorithms::get_header(this->pointed_node()), this->get_container());
+ return tree_iterator(node_algorithms::get_header(this->pointed_node()), this->get_value_traits());
}
- tree_iterator<Container, false> unconst() const
- { return tree_iterator<Container, false>(this->pointed_node(), this->get_container()); }
+ tree_iterator<value_traits, false> unconst() const
+ { return tree_iterator<value_traits, false>(this->pointed_node(), this->get_value_traits()); }
private:
- struct members
- : public detail::select_constptr
- <void_pointer, store_container_ptr>::type
- {
- typedef typename detail::select_constptr
- <void_pointer, store_container_ptr>::type Base;
+ pointer operator_arrow(detail::false_) const
+ { return ValueTraits::to_value_ptr(members_.nodeptr_); }
- members(const node_ptr &n_ptr, const void *cont)
- : Base(cont), nodeptr_(n_ptr)
- {}
+ pointer operator_arrow(detail::true_) const
+ { return this->get_value_traits()->to_value_ptr(members_.nodeptr_); }
- node_ptr nodeptr_;
- } members_;
+ iiterator_members<node_ptr, const_value_traits_ptr, stateful_value_traits> members_;
};
} //namespace intrusive
diff --git a/3party/boost/boost/intrusive/detail/utilities.hpp b/3party/boost/boost/intrusive/detail/utilities.hpp
index bb342204aa..b893d221f6 100644
--- a/3party/boost/boost/intrusive/detail/utilities.hpp
+++ b/3party/boost/boost/intrusive/detail/utilities.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -21,7 +21,7 @@
#include <boost/intrusive/detail/mpl.hpp>
#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/detail/is_stateful_value_traits.hpp>
-#include <boost/intrusive/pointer_traits.hpp>
+#include <boost/intrusive/detail/memory_util.hpp>
#include <boost/cstdint.hpp>
#include <cstddef>
#include <climits>
@@ -29,9 +29,37 @@
#include <boost/cstdint.hpp>
#include <boost/static_assert.hpp>
#include <boost/detail/no_exceptions_support.hpp>
+#include <functional>
+#include <boost/functional/hash.hpp>
+#include <boost/tti/tti.hpp>
namespace boost {
namespace intrusive {
+
+enum algo_types
+{
+ CircularListAlgorithms,
+ CircularSListAlgorithms,
+ LinearSListAlgorithms,
+ BsTreeAlgorithms,
+ RbTreeAlgorithms,
+ AvlTreeAlgorithms,
+ SgTreeAlgorithms,
+ SplayTreeAlgorithms,
+ TreapAlgorithms
+};
+
+template<algo_types AlgoType, class NodeTraits>
+struct get_algo;
+
+template <link_mode_type link_mode>
+struct is_safe_autounlink
+{
+ static const bool value =
+ (int)link_mode == (int)auto_unlink ||
+ (int)link_mode == (int)safe_link;
+};
+
namespace detail {
template <class T>
@@ -60,17 +88,10 @@ struct TRAITS_PREFIX##_bool_is_true\
};\
//
-BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(internal_base_hook, boost_intrusive_tags::is_base_hook)
+BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(internal_base_hook, hooktags::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<class Node, class Tag, link_mode_type LinkMode, int>
-struct node_holder
- : public Node
-{};
-
template <class T>
inline T* to_raw_pointer(T* p)
{ return p; }
@@ -114,7 +135,7 @@ class init_disposer
{ NodeAlgorithms::init(p); }
};
-template<bool ConstantSize, class SizeType>
+template<bool ConstantSize, class SizeType, class Tag = void>
struct size_holder
{
static const bool constant_time_size = ConstantSize;
@@ -141,8 +162,8 @@ struct size_holder
SizeType size_;
};
-template<class SizeType>
-struct size_holder<false, SizeType>
+template<class SizeType, class Tag>
+struct size_holder<false, SizeType, Tag>
{
static const bool constant_time_size = false;
typedef SizeType size_type;
@@ -166,17 +187,17 @@ struct size_holder<false, SizeType>
{}
};
-template<class KeyValueCompare, class Container>
+template<class KeyValueCompare, class ValueTraits>
struct key_nodeptr_comp
: private detail::ebo_functor_holder<KeyValueCompare>
{
- typedef typename Container::real_value_traits real_value_traits;
- typedef typename Container::value_type value_type;
- typedef typename real_value_traits::node_ptr node_ptr;
- typedef typename real_value_traits::const_node_ptr const_node_ptr;
+ typedef ValueTraits value_traits;
+ typedef typename value_traits::value_type value_type;
+ typedef typename value_traits::node_ptr node_ptr;
+ typedef typename value_traits::const_node_ptr const_node_ptr;
typedef detail::ebo_functor_holder<KeyValueCompare> base_t;
- key_nodeptr_comp(KeyValueCompare kcomp, const Container *cont)
- : base_t(kcomp), cont_(cont)
+ key_nodeptr_comp(KeyValueCompare kcomp, const ValueTraits *traits)
+ : base_t(kcomp), traits_(traits)
{}
template<class T>
@@ -188,7 +209,7 @@ struct key_nodeptr_comp
template<class T>
const value_type & key_forward
(const T &node, typename enable_if_c<is_node_ptr<T>::value>::type * = 0) const
- { return *cont_->get_real_value_traits().to_value_ptr(node); }
+ { return *traits_->to_value_ptr(node); }
template<class T>
const T & key_forward(const T &key, typename enable_if_c<!is_node_ptr<T>::value>::type* = 0) const
@@ -199,79 +220,99 @@ struct key_nodeptr_comp
bool operator()(const KeyType &key1, const KeyType2 &key2) const
{ return base_t::get()(this->key_forward(key1), this->key_forward(key2)); }
- const Container *cont_;
+ const ValueTraits *const traits_;
};
-template<class F, class Container>
+template<class F, class ValueTraits, algo_types AlgoType>
struct node_cloner
: private detail::ebo_functor_holder<F>
{
- typedef typename Container::real_value_traits real_value_traits;
- typedef typename Container::node_algorithms node_algorithms;
- typedef typename real_value_traits::value_type value_type;
- typedef typename real_value_traits::pointer pointer;
- typedef typename real_value_traits::node_traits::node node;
- typedef typename real_value_traits::node_ptr node_ptr;
- typedef typename real_value_traits::const_node_ptr const_node_ptr;
- typedef detail::ebo_functor_holder<F> base_t;
- enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
-
- node_cloner(F f, const Container *cont)
- : base_t(f), cont_(cont)
+ typedef ValueTraits value_traits;
+ typedef typename value_traits::node_traits node_traits;
+ typedef typename node_traits::node_ptr node_ptr;
+ typedef detail::ebo_functor_holder<F> base_t;
+ typedef typename get_algo< AlgoType
+ , node_traits>::type node_algorithms;
+ static const bool safemode_or_autounlink =
+ is_safe_autounlink<value_traits::link_mode>::value;
+ typedef typename value_traits::value_type value_type;
+ typedef typename value_traits::pointer pointer;
+ typedef typename node_traits::node node;
+ typedef typename value_traits::const_node_ptr const_node_ptr;
+ typedef typename value_traits::reference reference;
+ typedef typename value_traits::const_reference const_reference;
+
+ node_cloner(F f, const ValueTraits *traits)
+ : base_t(f), traits_(traits)
{}
+ // tree-based containers use this method, which is proxy-reference friendly
node_ptr operator()(const node_ptr & p)
- { return this->operator()(*p); }
+ {
+ const_reference v = *traits_->to_value_ptr(p);
+ node_ptr n = traits_->to_node_ptr(*base_t::get()(v));
+ //Cloned node must be in default mode if the linking mode requires it
+ if(safemode_or_autounlink)
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(n));
+ return n;
+ }
+ // hashtables use this method, which is proxy-reference unfriendly
node_ptr operator()(const node &to_clone)
{
const value_type &v =
- *cont_->get_real_value_traits().to_value_ptr
+ *traits_->to_value_ptr
(pointer_traits<const_node_ptr>::pointer_to(to_clone));
- node_ptr n = cont_->get_real_value_traits().to_node_ptr(*base_t::get()(v));
+ node_ptr n = traits_->to_node_ptr(*base_t::get()(v));
//Cloned node must be in default mode if the linking mode requires it
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(n));
return n;
}
- const Container *cont_;
+ const ValueTraits * const traits_;
};
-template<class F, class Container>
+template<class F, class ValueTraits, algo_types AlgoType>
struct node_disposer
: private detail::ebo_functor_holder<F>
{
- typedef typename Container::real_value_traits real_value_traits;
- typedef typename real_value_traits::node_ptr node_ptr;
+ typedef ValueTraits value_traits;
+ typedef typename value_traits::node_traits node_traits;
+ typedef typename node_traits::node_ptr node_ptr;
typedef detail::ebo_functor_holder<F> base_t;
- typedef typename Container::node_algorithms node_algorithms;
- enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
+ typedef typename get_algo< AlgoType
+ , node_traits>::type node_algorithms;
+ static const bool safemode_or_autounlink =
+ is_safe_autounlink<value_traits::link_mode>::value;
- node_disposer(F f, const Container *cont)
- : base_t(f), cont_(cont)
+ node_disposer(F f, const ValueTraits *cont)
+ : base_t(f), traits_(cont)
{}
void operator()(const node_ptr & p)
{
if(safemode_or_autounlink)
node_algorithms::init(p);
- base_t::get()(cont_->get_real_value_traits().to_value_ptr(p));
+ base_t::get()(traits_->to_value_ptr(p));
}
- const Container *cont_;
+ const ValueTraits * const traits_;
};
+template<class VoidPointer>
struct dummy_constptr
{
- dummy_constptr(const void *)
+ typedef typename boost::intrusive::pointer_traits<VoidPointer>::
+ template rebind_pointer<const void>::type ConstVoidPtr;
+
+ explicit dummy_constptr(ConstVoidPtr)
{}
- const void *get_ptr() const
- { return 0; }
+ dummy_constptr()
+ {}
+
+ ConstVoidPtr get_ptr() const
+ { return ConstVoidPtr(); }
};
template<class VoidPointer>
@@ -280,7 +321,10 @@ struct constptr
typedef typename boost::intrusive::pointer_traits<VoidPointer>::
template rebind_pointer<const void>::type ConstVoidPtr;
- constptr(const void *ptr)
+ constptr()
+ {}
+
+ explicit constptr(const ConstVoidPtr &ptr)
: const_void_ptr_(ptr)
{}
@@ -296,7 +340,7 @@ struct select_constptr
typedef typename detail::if_c
< store_ptr
, constptr<VoidPointer>
- , dummy_constptr
+ , dummy_constptr<VoidPointer>
>::type type;
};
@@ -330,168 +374,183 @@ template<class Hook>
void destructor_impl(Hook &, detail::link_dispatch<normal_link>)
{}
-template<class T, class NodeTraits, link_mode_type LinkMode, class Tag, int HookType>
-struct base_hook_traits
-{
- public:
- typedef detail::node_holder
- <typename NodeTraits::node, Tag, LinkMode, HookType> node_holder;
- typedef typename NodeTraits::node node;
- typedef NodeTraits node_traits;
- typedef T value_type;
- typedef typename node_traits::node_ptr node_ptr;
- typedef typename node_traits::const_node_ptr const_node_ptr;
- typedef typename pointer_traits<node_ptr>::
- template rebind_pointer<T>::type pointer;
- typedef typename pointer_traits<node_ptr>::
- template rebind_pointer<const T>::type const_pointer;
- //typedef typename pointer_traits<pointer>::reference reference;
- //typedef typename pointer_traits<const_pointer>::reference const_reference;
- typedef T & reference;
- typedef const T & const_reference;
- typedef node_holder & node_holder_reference;
- typedef const node_holder & const_node_holder_reference;
- typedef node& node_reference;
- typedef const node & const_node_reference;
+///////////////////////////
+// floor_log2 Dispatcher
+////////////////////////////
- static const link_mode_type link_mode = LinkMode;
+#if defined(_MSC_VER) && (_MSC_VER >= 1300)
- static pointer to_value_ptr(const node_ptr & n)
- {
- return pointer_traits<pointer>::pointer_to
- (static_cast<reference>(static_cast<node_holder_reference>(*n)));
- }
+ }}} //namespace boost::intrusive::detail
- static const_pointer to_value_ptr(const const_node_ptr & n)
- {
- return pointer_traits<const_pointer>::pointer_to
- (static_cast<const_reference>(static_cast<const_node_holder_reference>(*n)));
- }
+ //Use _BitScanReverseXX intrinsics
- static node_ptr to_node_ptr(reference value)
- {
- return pointer_traits<node_ptr>::pointer_to
- (static_cast<node_reference>(static_cast<node_holder_reference>(value)));
- }
+ #if defined(_M_X64) || defined(_M_AMD64) || defined(_M_IA64) //64 bit target
+ #define BOOST_INTRUSIVE_BSR_INTRINSIC_64_BIT
+ #endif
- static const_node_ptr to_node_ptr(const_reference value)
+ #ifndef __INTRIN_H_ // Avoid including any windows system header
+ #ifdef __cplusplus
+ extern "C" {
+ #endif // __cplusplus
+
+ #if defined(BOOST_INTRUSIVE_BSR_INTRINSIC_64_BIT) //64 bit target
+ unsigned char _BitScanReverse64(unsigned long *index, unsigned __int64 mask);
+ #pragma intrinsic(_BitScanReverse64)
+ #else //32 bit target
+ unsigned char _BitScanReverse(unsigned long *index, unsigned long mask);
+ #pragma intrinsic(_BitScanReverse)
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif // __cplusplus
+ #endif // __INTRIN_H_
+
+ #ifdef BOOST_INTRUSIVE_BSR_INTRINSIC_64_BIT
+ #define BOOST_INTRUSIVE_BSR_INTRINSIC _BitScanReverse64
+ #undef BOOST_INTRUSIVE_BSR_INTRINSIC_64_BIT
+ #else
+ #define BOOST_INTRUSIVE_BSR_INTRINSIC _BitScanReverse
+ #endif
+
+ namespace boost {
+ namespace intrusive {
+ namespace detail {
+
+ inline std::size_t floor_log2 (std::size_t x)
{
- return pointer_traits<const_node_ptr>::pointer_to
- (static_cast<const_node_reference>(static_cast<const_node_holder_reference>(value)));
+ unsigned long log2;
+ BOOST_INTRUSIVE_BSR_INTRINSIC( &log2, (unsigned long)x );
+ return log2;
}
-};
-template<class T, class Hook, Hook T::* P>
-struct member_hook_traits
-{
- public:
- typedef Hook hook_type;
- typedef typename hook_type::boost_intrusive_tags::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef T value_type;
- typedef typename node_traits::node_ptr node_ptr;
- typedef typename node_traits::const_node_ptr const_node_ptr;
- typedef typename pointer_traits<node_ptr>::
- template rebind_pointer<T>::type pointer;
- typedef typename pointer_traits<node_ptr>::
- template rebind_pointer<const T>::type const_pointer;
- typedef T & reference;
- typedef const T & const_reference;
- typedef node& node_reference;
- typedef const node & const_node_reference;
- typedef hook_type& hook_reference;
- typedef const hook_type & const_hook_reference;
+ #undef BOOST_INTRUSIVE_BSR_INTRINSIC
- static const link_mode_type link_mode = Hook::boost_intrusive_tags::link_mode;
+#elif defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) //GCC >=3.4
- static node_ptr to_node_ptr(reference value)
+ //Compile-time error in case of missing specialization
+ template<class Uint>
+ struct builtin_clz_dispatch;
+
+ #if defined(BOOST_HAS_LONG_LONG)
+ template<>
+ struct builtin_clz_dispatch<unsigned long long>
{
- return pointer_traits<node_ptr>::pointer_to
- (static_cast<node_reference>(static_cast<hook_reference>(value.*P)));
- }
+ static unsigned long long call(unsigned long long n)
+ { return __builtin_clzll(n); }
+ };
+ #endif
- static const_node_ptr to_node_ptr(const_reference value)
+ template<>
+ struct builtin_clz_dispatch<unsigned long>
{
- return pointer_traits<const_node_ptr>::pointer_to
- (static_cast<const_node_reference>(static_cast<const_hook_reference>(value.*P)));
- }
+ static unsigned long call(unsigned long n)
+ { return __builtin_clzl(n); }
+ };
- static pointer to_value_ptr(const node_ptr & n)
+ template<>
+ struct builtin_clz_dispatch<unsigned int>
{
- return pointer_traits<pointer>::pointer_to
- (*detail::parent_from_member<T, Hook>
- (static_cast<Hook*>(boost::intrusive::detail::to_raw_pointer(n)), P));
- }
+ static unsigned int call(unsigned int n)
+ { return __builtin_clz(n); }
+ };
- static const_pointer to_value_ptr(const const_node_ptr & n)
+ inline std::size_t floor_log2(std::size_t n)
{
- return pointer_traits<const_pointer>::pointer_to
- (*detail::parent_from_member<T, Hook>
- (static_cast<const Hook*>(boost::intrusive::detail::to_raw_pointer(n)), P));
+ return sizeof(std::size_t)*CHAR_BIT - std::size_t(1) - builtin_clz_dispatch<std::size_t>::call(n);
}
-};
-template<class Functor>
-struct function_hook_traits
-{
- public:
- typedef typename Functor::hook_type hook_type;
- typedef typename Functor::hook_ptr hook_ptr;
- typedef typename Functor::const_hook_ptr const_hook_ptr;
- typedef typename hook_type::boost_intrusive_tags::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename Functor::value_type value_type;
- typedef typename node_traits::node_ptr node_ptr;
- typedef typename node_traits::const_node_ptr const_node_ptr;
- typedef typename pointer_traits<node_ptr>::
- template rebind_pointer<value_type>::type pointer;
- typedef typename pointer_traits<node_ptr>::
- template rebind_pointer<const value_type>::type const_pointer;
- typedef value_type & reference;
- typedef const value_type & const_reference;
- static const link_mode_type link_mode = hook_type::boost_intrusive_tags::link_mode;
+#else //Portable methods
- static node_ptr to_node_ptr(reference value)
- { return static_cast<node*>(boost::intrusive::detail::to_raw_pointer(Functor::to_hook_ptr(value))); }
+////////////////////////////
+// Generic method
+////////////////////////////
- static const_node_ptr to_node_ptr(const_reference value)
- { return static_cast<const node*>(boost::intrusive::detail::to_raw_pointer(Functor::to_hook_ptr(value))); }
+ inline std::size_t floor_log2_get_shift(std::size_t n, true_ )//power of two size_t
+ { return n >> 1; }
- static pointer to_value_ptr(const node_ptr & n)
- { return Functor::to_value_ptr(to_hook_ptr(n)); }
+ inline std::size_t floor_log2_get_shift(std::size_t n, false_ )//non-power of two size_t
+ { return (n >> 1) + ((n & 1u) & (n != 1)); }
- static const_pointer to_value_ptr(const const_node_ptr & n)
- { return Functor::to_value_ptr(to_hook_ptr(n)); }
+ template<std::size_t N>
+ inline std::size_t floor_log2 (std::size_t x, integer<std::size_t, N>)
+ {
+ const std::size_t Bits = N;
+ const bool Size_t_Bits_Power_2= !(Bits & (Bits-1));
+
+ std::size_t n = x;
+ std::size_t log2 = 0;
+
+ std::size_t remaining_bits = Bits;
+ std::size_t shift = floor_log2_get_shift(remaining_bits, bool_<Size_t_Bits_Power_2>());
+ while(shift){
+ std::size_t tmp = n >> shift;
+ if (tmp){
+ log2 += shift, n = tmp;
+ }
+ shift = floor_log2_get_shift(shift, bool_<Size_t_Bits_Power_2>());
+ }
- private:
- static hook_ptr to_hook_ptr(const node_ptr & n)
- { return hook_ptr(&*static_cast<hook_type*>(&*n)); }
+ return log2;
+ }
- static const_hook_ptr to_hook_ptr(const const_node_ptr & n)
- { return const_hook_ptr(&*static_cast<const hook_type*>(&*n)); }
-};
+ ////////////////////////////
+ // DeBruijn method
+ ////////////////////////////
+ //Taken from:
+ //http://stackoverflow.com/questions/11376288/fast-computing-of-log2-for-64-bit-integers
+ //Thanks to Desmond Hume
-//This function uses binary search to discover the
-//highest set bit of the integer
-inline std::size_t floor_log2 (std::size_t x)
-{
- const std::size_t Bits = sizeof(std::size_t)*CHAR_BIT;
- const bool Size_t_Bits_Power_2= !(Bits & (Bits-1));
- BOOST_STATIC_ASSERT(Size_t_Bits_Power_2);
+ inline std::size_t floor_log2 (std::size_t v, integer<std::size_t, 32>)
+ {
+ static const int MultiplyDeBruijnBitPosition[32] =
+ {
+ 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30,
+ 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31
+ };
+
+ v |= v >> 1;
+ v |= v >> 2;
+ v |= v >> 4;
+ v |= v >> 8;
+ v |= v >> 16;
+
+ return MultiplyDeBruijnBitPosition[(std::size_t)(v * 0x07C4ACDDU) >> 27];
+ }
+
+ inline std::size_t floor_log2 (std::size_t v, integer<std::size_t, 64>)
+ {
+ static const std::size_t MultiplyDeBruijnBitPosition[64] = {
+ 63, 0, 58, 1, 59, 47, 53, 2,
+ 60, 39, 48, 27, 54, 33, 42, 3,
+ 61, 51, 37, 40, 49, 18, 28, 20,
+ 55, 30, 34, 11, 43, 14, 22, 4,
+ 62, 57, 46, 52, 38, 26, 32, 41,
+ 50, 36, 17, 19, 29, 10, 13, 21,
+ 56, 45, 25, 31, 35, 16, 9, 12,
+ 44, 24, 15, 8, 23, 7, 6, 5};
+
+ v |= v >> 1;
+ v |= v >> 2;
+ v |= v >> 4;
+ v |= v >> 8;
+ v |= v >> 16;
+ v |= v >> 32;
+ return MultiplyDeBruijnBitPosition[((std::size_t)((v - (v >> 1))*0x07EDD5E59A4E28C2ULL)) >> 58];
+ }
- 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)
- log2 += shift, n = tmp;
+ inline std::size_t floor_log2 (std::size_t x)
+ {
+ const std::size_t Bits = sizeof(std::size_t)*CHAR_BIT;
+ return floor_log2(x, integer<std::size_t, Bits>());
}
- return log2;
-}
+#endif
+//Thanks to Laurent de Soras in
+//http://www.flipcode.com/archives/Fast_log_Function.shtml
inline float fast_log2 (float val)
{
union caster_t
@@ -502,19 +561,21 @@ inline float fast_log2 (float val)
caster.val = val;
boost::uint32_t x = caster.x;
- const int log_2 = (int)(((x >> 23) & 255) - 128);
- x &= ~(255 << 23);
- x += 127 << 23;
+ const int log_2 = int((x >> 23) & 255) - 128;
+ x &= ~(boost::uint32_t(255u) << 23u);
+ x += boost::uint32_t(127) << 23u;
caster.x = x;
val = caster.val;
- val = ((-1.0f/3.f) * val + 2.f) * val - (2.0f/3.f);
-
+ //1+log2(m), m ranging from 1 to 2
+ //3rd degree polynomial keeping first derivate continuity.
+ //For less precision the line can be commented out
+ val = ((-1.f/3.f) * val + 2.f) * val - (2.f/3.f);
return (val + log_2);
}
inline std::size_t ceil_log2 (std::size_t x)
{
- return ((x & (x-1))!= 0) + floor_log2(x);
+ return static_cast<std::size_t>((x & (x-1)) != 0) + floor_log2(x);
}
template<class SizeType, std::size_t N>
@@ -533,6 +594,8 @@ struct sqrt2_pow_max<SizeType, typename enable_if< numbits_eq<SizeType, 32> >::t
static const std::size_t pow = 31;
};
+#ifndef BOOST_NO_INT64_T
+
template <class SizeType>
struct sqrt2_pow_max<SizeType, typename enable_if< numbits_eq<SizeType, 64> >::type>
{
@@ -540,6 +603,8 @@ struct sqrt2_pow_max<SizeType, typename enable_if< numbits_eq<SizeType, 64> >::t
static const std::size_t pow = 63;
};
+#endif //BOOST_NO_INT64_T
+
// Returns floor(pow(sqrt(2), x * 2 + 1)).
// Defined for X from 0 up to the number of bits in size_t minus 1.
inline std::size_t sqrt2_pow_2xplus1 (std::size_t x)
@@ -605,79 +670,52 @@ class exception_array_disposer
}
};
-template<class ValueTraits, bool ExternalValueTraits>
-struct store_cont_ptr_on_it_impl
-{
- static const bool value = is_stateful_value_traits<ValueTraits>::value;
-};
-
-template<class ValueTraits>
-struct store_cont_ptr_on_it_impl<ValueTraits, true>
-{
- static const bool value = true;
-};
-
-template <class Container>
-struct store_cont_ptr_on_it
-{
- typedef typename Container::value_traits value_traits;
- static const bool value = store_cont_ptr_on_it_impl
- <value_traits, external_value_traits_bool_is_true<value_traits>::value>::value;
-};
-
-template<class Container, bool IsConst>
+template<class ValueTraits, bool IsConst>
struct node_to_value
: public detail::select_constptr
< typename pointer_traits
- <typename Container::pointer>::template rebind_pointer<void>::type
- , detail::store_cont_ptr_on_it<Container>::value
+ <typename ValueTraits::pointer>::template rebind_pointer<void>::type
+ , is_stateful_value_traits<ValueTraits>::value
>::type
{
- static const bool store_container_ptr =
- detail::store_cont_ptr_on_it<Container>::value;
-
- typedef typename Container::real_value_traits real_value_traits;
- typedef typename real_value_traits::value_type value_type;
+ static const bool stateful_value_traits = is_stateful_value_traits<ValueTraits>::value;
typedef typename detail::select_constptr
< typename pointer_traits
- <typename Container::pointer>::template rebind_pointer<void>::type
- , store_container_ptr >::type Base;
- typedef typename real_value_traits::node_traits::node node;
+ <typename ValueTraits::pointer>::
+ template rebind_pointer<void>::type
+ , stateful_value_traits >::type Base;
+
+ typedef ValueTraits value_traits;
+ typedef typename value_traits::value_type value_type;
+ typedef typename value_traits::node_traits::node node;
typedef typename detail::add_const_if_c
- <value_type, IsConst>::type vtype;
+ <value_type, IsConst>::type vtype;
typedef typename detail::add_const_if_c
- <node, IsConst>::type ntype;
+ <node, IsConst>::type ntype;
typedef typename pointer_traits
- <typename Container::pointer>::template rebind_pointer<ntype>::type npointer;
+ <typename ValueTraits::pointer>::
+ template rebind_pointer<ntype>::type npointer;
+ typedef typename pointer_traits<npointer>::
+ template rebind_pointer<const ValueTraits>::type const_value_traits_ptr;
- node_to_value(const Container *cont)
- : Base(cont)
+ node_to_value(const const_value_traits_ptr &ptr)
+ : Base(ptr)
{}
typedef vtype & result_type;
typedef ntype & first_argument_type;
- const Container *get_container() const
- {
- if(store_container_ptr)
- return static_cast<const Container*>(Base::get_ptr());
- else
- return 0;
- }
+ const_value_traits_ptr get_value_traits() const
+ { return pointer_traits<const_value_traits_ptr>::static_cast_from(Base::get_ptr()); }
- const real_value_traits *get_real_value_traits() const
- {
- if(store_container_ptr)
- return &this->get_container()->get_real_value_traits();
- else
- return 0;
- }
+ result_type to_value(first_argument_type arg, false_) const
+ { return *(value_traits::to_value_ptr(pointer_traits<npointer>::pointer_to(arg))); }
+
+ result_type to_value(first_argument_type arg, true_) const
+ { return *(this->get_value_traits()->to_value_ptr(pointer_traits<npointer>::pointer_to(arg))); }
result_type operator()(first_argument_type arg) const
- {
- return *(this->get_real_value_traits()->to_value_ptr
- (pointer_traits<npointer>::pointer_to(arg)));
- }
+ { return this->to_value(arg, bool_<stateful_value_traits>()); }
};
//This is not standard, but should work with all compilers
@@ -849,7 +887,390 @@ class reverse_iterator
It m_current; // the wrapped iterator
};
+template<class ConstNodePtr>
+struct uncast_types
+{
+ typedef typename pointer_traits<ConstNodePtr>::element_type element_type;
+ typedef typename remove_const<element_type>::type non_const_type;
+ typedef typename pointer_traits<ConstNodePtr>::
+ template rebind_pointer<non_const_type>::type non_const_pointer;
+ typedef pointer_traits<non_const_pointer> non_const_traits;
+};
+
+template<class ConstNodePtr>
+static typename uncast_types<ConstNodePtr>::non_const_pointer
+ uncast(const ConstNodePtr & ptr)
+{
+ return uncast_types<ConstNodePtr>::non_const_traits::const_cast_from(ptr);
+}
+
+// trivial header node holder
+template < typename NodeTraits >
+struct default_header_holder : public NodeTraits::node
+{
+ typedef NodeTraits node_traits;
+ typedef typename node_traits::node node;
+ typedef typename node_traits::node_ptr node_ptr;
+ typedef typename node_traits::const_node_ptr const_node_ptr;
+
+ default_header_holder() : node() {}
+
+ const_node_ptr get_node() const
+ { return pointer_traits< const_node_ptr >::pointer_to(*static_cast< const node* >(this)); }
+
+ node_ptr get_node()
+ { return pointer_traits< node_ptr >::pointer_to(*static_cast< node* >(this)); }
+
+ // (unsafe) downcast used to implement container-from-iterator
+ static default_header_holder* get_holder(const node_ptr &p)
+ { return static_cast< default_header_holder* >(boost::intrusive::detail::to_raw_pointer(p)); }
+};
+
+// type function producing the header node holder
+template < typename Value_Traits, typename HeaderHolder >
+struct get_header_holder_type
+{
+ typedef HeaderHolder type;
+};
+template < typename Value_Traits >
+struct get_header_holder_type< Value_Traits, void >
+{
+ typedef default_header_holder< typename Value_Traits::node_traits > type;
+};
+
} //namespace detail
+
+template<class Node, class Tag, unsigned int>
+struct node_holder
+ : public Node
+{};
+
+template<class T, class NodePtr, class Tag, unsigned int Type>
+struct bhtraits_base
+{
+ public:
+ typedef NodePtr node_ptr;
+ typedef typename pointer_traits<node_ptr>::element_type node;
+ typedef node_holder<node, Tag, Type> node_holder_type;
+ typedef T value_type;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<const node>::type const_node_ptr;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<T>::type pointer;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<const T>::type const_pointer;
+ //typedef typename pointer_traits<pointer>::reference reference;
+ //typedef typename pointer_traits<const_pointer>::reference const_reference;
+ typedef T & reference;
+ typedef const T & const_reference;
+ typedef node_holder_type & node_holder_reference;
+ typedef const node_holder_type & const_node_holder_reference;
+ typedef node& node_reference;
+ typedef const node & const_node_reference;
+
+ static pointer to_value_ptr(const node_ptr & n)
+ {
+ return pointer_traits<pointer>::pointer_to
+ (static_cast<reference>(static_cast<node_holder_reference>(*n)));
+ }
+
+ static const_pointer to_value_ptr(const const_node_ptr & n)
+ {
+ return pointer_traits<const_pointer>::pointer_to
+ (static_cast<const_reference>(static_cast<const_node_holder_reference>(*n)));
+ }
+
+ static node_ptr to_node_ptr(reference value)
+ {
+ return pointer_traits<node_ptr>::pointer_to
+ (static_cast<node_reference>(static_cast<node_holder_reference>(value)));
+ }
+
+ static const_node_ptr to_node_ptr(const_reference value)
+ {
+ return pointer_traits<const_node_ptr>::pointer_to
+ (static_cast<const_node_reference>(static_cast<const_node_holder_reference>(value)));
+ }
+};
+
+template<class T, class NodeTraits, link_mode_type LinkMode, class Tag, unsigned int Type>
+struct bhtraits
+ : public bhtraits_base<T, typename NodeTraits::node_ptr, Tag, Type>
+{
+ static const link_mode_type link_mode = LinkMode;
+ typedef NodeTraits node_traits;
+};
+
+/*
+template<class T, class NodePtr, typename pointer_traits<NodePtr>::element_type T::* P>
+struct mhtraits_base
+{
+ public:
+ typedef typename pointer_traits<NodePtr>::element_type node;
+ typedef T value_type;
+ typedef NodePtr node_ptr;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<const node>::type const_node_ptr;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<T>::type pointer;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<const T>::type const_pointer;
+ typedef T & reference;
+ typedef const T & const_reference;
+ typedef node& node_reference;
+ typedef const node & const_node_reference;
+
+ static node_ptr to_node_ptr(reference value)
+ {
+ return pointer_traits<node_ptr>::pointer_to
+ (static_cast<node_reference>(value.*P));
+ }
+
+ static const_node_ptr to_node_ptr(const_reference value)
+ {
+ return pointer_traits<const_node_ptr>::pointer_to
+ (static_cast<const_node_reference>(value.*P));
+ }
+
+ static pointer to_value_ptr(const node_ptr & n)
+ {
+ return pointer_traits<pointer>::pointer_to
+ (*detail::parent_from_member<T, node>
+ (boost::intrusive::detail::to_raw_pointer(n), P));
+ }
+
+ static const_pointer to_value_ptr(const const_node_ptr & n)
+ {
+ return pointer_traits<const_pointer>::pointer_to
+ (*detail::parent_from_member<T, node>
+ (boost::intrusive::detail::to_raw_pointer(n), P));
+ }
+};
+
+
+template<class T, class NodeTraits, typename NodeTraits::node T::* P, link_mode_type LinkMode>
+struct mhtraits
+ : public mhtraits_base<T, typename NodeTraits::node_ptr, P>
+{
+ static const link_mode_type link_mode = LinkMode;
+ typedef NodeTraits node_traits;
+};
+*/
+
+
+template<class T, class Hook, Hook T::* P>
+struct mhtraits
+{
+ public:
+ typedef Hook hook_type;
+ typedef typename hook_type::hooktags::node_traits node_traits;
+ typedef typename node_traits::node node;
+ typedef T value_type;
+ typedef typename node_traits::node_ptr node_ptr;
+ typedef typename node_traits::const_node_ptr const_node_ptr;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<T>::type pointer;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<const T>::type const_pointer;
+ typedef T & reference;
+ typedef const T & const_reference;
+ typedef node& node_reference;
+ typedef const node & const_node_reference;
+ typedef hook_type& hook_reference;
+ typedef const hook_type & const_hook_reference;
+
+ static const link_mode_type link_mode = Hook::hooktags::link_mode;
+
+ static node_ptr to_node_ptr(reference value)
+ {
+ return pointer_traits<node_ptr>::pointer_to
+ (static_cast<node_reference>(static_cast<hook_reference>(value.*P)));
+ }
+
+ static const_node_ptr to_node_ptr(const_reference value)
+ {
+ return pointer_traits<const_node_ptr>::pointer_to
+ (static_cast<const_node_reference>(static_cast<const_hook_reference>(value.*P)));
+ }
+
+ static pointer to_value_ptr(const node_ptr & n)
+ {
+ return pointer_traits<pointer>::pointer_to
+ (*detail::parent_from_member<T, Hook>
+ (static_cast<Hook*>(boost::intrusive::detail::to_raw_pointer(n)), P));
+ }
+
+ static const_pointer to_value_ptr(const const_node_ptr & n)
+ {
+ return pointer_traits<const_pointer>::pointer_to
+ (*detail::parent_from_member<T, Hook>
+ (static_cast<const Hook*>(boost::intrusive::detail::to_raw_pointer(n)), P));
+ }
+};
+
+
+template<class Functor>
+struct fhtraits
+{
+ public:
+ typedef typename Functor::hook_type hook_type;
+ typedef typename Functor::hook_ptr hook_ptr;
+ typedef typename Functor::const_hook_ptr const_hook_ptr;
+ typedef typename hook_type::hooktags::node_traits node_traits;
+ typedef typename node_traits::node node;
+ typedef typename Functor::value_type value_type;
+ typedef typename node_traits::node_ptr node_ptr;
+ typedef typename node_traits::const_node_ptr const_node_ptr;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<value_type>::type pointer;
+ typedef typename pointer_traits<node_ptr>::
+ template rebind_pointer<const value_type>::type const_pointer;
+ typedef value_type & reference;
+ typedef const value_type & const_reference;
+ static const link_mode_type link_mode = hook_type::hooktags::link_mode;
+
+ static node_ptr to_node_ptr(reference value)
+ { return static_cast<node*>(boost::intrusive::detail::to_raw_pointer(Functor::to_hook_ptr(value))); }
+
+ static const_node_ptr to_node_ptr(const_reference value)
+ { return static_cast<const node*>(boost::intrusive::detail::to_raw_pointer(Functor::to_hook_ptr(value))); }
+
+ static pointer to_value_ptr(const node_ptr & n)
+ { return Functor::to_value_ptr(to_hook_ptr(n)); }
+
+ static const_pointer to_value_ptr(const const_node_ptr & n)
+ { return Functor::to_value_ptr(to_hook_ptr(n)); }
+
+ private:
+ static hook_ptr to_hook_ptr(const node_ptr & n)
+ { return hook_ptr(&*static_cast<hook_type*>(&*n)); }
+
+ static const_hook_ptr to_hook_ptr(const const_node_ptr & n)
+ { return const_hook_ptr(&*static_cast<const hook_type*>(&*n)); }
+};
+
+template<class ValueTraits>
+struct value_traits_pointers
+{
+ typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
+ (boost::intrusive::detail::
+ , ValueTraits, value_traits_ptr
+ , typename pointer_traits<typename ValueTraits::node_traits::node_ptr>::template
+ rebind_pointer<ValueTraits>::type) value_traits_ptr;
+
+ typedef typename pointer_traits<value_traits_ptr>::template
+ rebind_pointer<ValueTraits const>::type const_value_traits_ptr;
+};
+
+template<class ValueTraits, bool IsConst, class Category>
+struct iiterator
+{
+ typedef ValueTraits value_traits;
+ typedef typename value_traits::node_traits node_traits;
+ typedef typename node_traits::node node;
+ typedef typename node_traits::node_ptr node_ptr;
+ typedef ::boost::intrusive::pointer_traits<node_ptr> nodepointer_traits_t;
+ typedef typename nodepointer_traits_t::template
+ rebind_pointer<void>::type void_pointer;
+ typedef typename ValueTraits::value_type value_type;
+ typedef typename ValueTraits::pointer nonconst_pointer;
+ typedef typename ValueTraits::const_pointer yesconst_pointer;
+ typedef typename ::boost::intrusive::pointer_traits
+ <nonconst_pointer>::reference nonconst_reference;
+ typedef typename ::boost::intrusive::pointer_traits
+ <yesconst_pointer>::reference yesconst_reference;
+ typedef typename nodepointer_traits_t::difference_type difference_type;
+ typedef typename detail::if_c
+ <IsConst, yesconst_pointer, nonconst_pointer>::type pointer;
+ typedef typename detail::if_c
+ <IsConst, yesconst_reference, nonconst_reference>::type reference;
+ typedef std::iterator
+ < Category
+ , value_type
+ , difference_type
+ , pointer
+ , reference
+ > iterator_traits;
+ typedef typename value_traits_pointers
+ <ValueTraits>::value_traits_ptr value_traits_ptr;
+ typedef typename value_traits_pointers
+ <ValueTraits>::const_value_traits_ptr const_value_traits_ptr;
+ static const bool stateful_value_traits =
+ detail::is_stateful_value_traits<value_traits>::value;
+};
+
+template<class NodePtr, class StoredPointer, bool StatefulValueTraits = true>
+struct iiterator_members
+{
+
+ iiterator_members()
+ {}
+
+ iiterator_members(const NodePtr &n_ptr, const StoredPointer &data)
+ : nodeptr_(n_ptr), ptr_(data)
+ {}
+
+ StoredPointer get_ptr() const
+ { return ptr_; }
+
+ NodePtr nodeptr_;
+ StoredPointer ptr_;
+};
+
+template<class NodePtr, class StoredPointer>
+struct iiterator_members<NodePtr, StoredPointer, false>
+{
+ iiterator_members()
+ {}
+
+ iiterator_members(const NodePtr &n_ptr, const StoredPointer &)
+ : nodeptr_(n_ptr)
+ {}
+
+ StoredPointer get_ptr() const
+ { return StoredPointer(); }
+
+ NodePtr nodeptr_;
+};
+
+template<class Less, class T>
+struct get_less
+{
+ typedef Less type;
+};
+
+template<class T>
+struct get_less<void, T>
+{
+ typedef ::std::less<T> type;
+};
+
+template<class EqualTo, class T>
+struct get_equal_to
+{
+ typedef EqualTo type;
+};
+
+template<class T>
+struct get_equal_to<void, T>
+{
+ typedef ::std::equal_to<T> type;
+};
+
+template<class Hash, class T>
+struct get_hash
+{
+ typedef Hash type;
+};
+
+template<class T>
+struct get_hash<void, T>
+{
+ typedef ::boost::hash<T> type;
+};
+
+struct empty{};
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/detail/workaround.hpp b/3party/boost/boost/intrusive/detail/workaround.hpp
index 123fb9fbcf..71a50c8647 100644
--- a/3party/boost/boost/intrusive/detail/workaround.hpp
+++ b/3party/boost/boost/intrusive/detail/workaround.hpp
@@ -1,6 +1,6 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2013. 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)
//
@@ -17,6 +17,10 @@
#define BOOST_INTRUSIVE_PERFECT_FORWARDING
#endif
+//Macros for documentation purposes. For code, expands to the argument
+#define BOOST_INTRUSIVE_IMPDEF(TYPE) TYPE
+#define BOOST_INTRUSIVE_SEEDOC(TYPE) TYPE
+
#include <boost/intrusive/detail/config_end.hpp>
#endif //#ifndef BOOST_INTRUSIVE_DETAIL_WRKRND_HPP
diff --git a/3party/boost/boost/intrusive/hashtable.hpp b/3party/boost/boost/intrusive/hashtable.hpp
index eaf834c538..8ada6e79ca 100644
--- a/3party/boost/boost/intrusive/hashtable.hpp
+++ b/3party/boost/boost/intrusive/hashtable.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +13,7 @@
#define BOOST_INTRUSIVE_HASHTABLE_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
//std C++
#include <functional> //std::equal_to
#include <utility> //std::pair
@@ -22,22 +23,17 @@
#include <boost/intrusive/detail/assert.hpp>
#include <boost/static_assert.hpp>
#include <boost/functional/hash.hpp>
-#include <boost/pointer_cast.hpp>
//General intrusive utilities
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/hashtable_node.hpp>
#include <boost/intrusive/detail/transform_iterator.hpp>
#include <boost/intrusive/link_mode.hpp>
#include <boost/intrusive/detail/ebo_functor_holder.hpp>
-#include <boost/intrusive/detail/clear_on_destructor_base.hpp>
#include <boost/intrusive/detail/utilities.hpp>
//Implementation utilities
-#include <boost/intrusive/trivial_value_traits.hpp>
#include <boost/intrusive/unordered_set_hook.hpp>
#include <boost/intrusive/slist.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/detail/mpl.hpp>
-#include <boost/type_traits.hpp>
#include <boost/move/move.hpp>
namespace boost {
@@ -45,8 +41,6 @@ namespace intrusive {
/// @cond
-namespace detail {
-
struct hash_bool_flags
{
static const std::size_t unique_keys_pos = 1u;
@@ -57,101 +51,14 @@ struct hash_bool_flags
static const std::size_t incremental_pos = 32u;
};
-template
- < class ValueTraits
- , class Hash
- , class Equal
- , class SizeType
- , class BucketTraits
- , std::size_t BoolFlags
- >
-struct usetopt
-{
- typedef ValueTraits value_traits;
- typedef Hash hash;
- typedef Equal equal;
- typedef SizeType size_type;
- typedef BucketTraits bucket_traits;
- static const std::size_t bool_flags = BoolFlags;
-};
-
-template
- < class UsetOpt
- , std::size_t BoolMask
- >
-struct usetopt_mask
-{
- typedef usetopt
- <typename UsetOpt::value_traits
- ,typename UsetOpt::hash
- ,typename UsetOpt::equal
- ,typename UsetOpt::size_type
- ,typename UsetOpt::bucket_traits
- ,UsetOpt::bool_flags & BoolMask
- > type;
-};
-
-template <class NodeTraits>
-struct hash_reduced_slist_node_traits
-{
- template <class U> static detail::one test(...);
- template <class U> static detail::two test(typename U::reduced_slist_node_traits* = 0);
- static const bool value = sizeof(test<NodeTraits>(0)) == sizeof(detail::two);
-};
-
-template <class NodeTraits>
-struct apply_reduced_slist_node_traits
-{
- typedef typename NodeTraits::reduced_slist_node_traits type;
-};
-
-template <class NodeTraits>
-struct reduced_slist_node_traits
-{
- typedef typename detail::eval_if_c
- < hash_reduced_slist_node_traits<NodeTraits>::value
- , apply_reduced_slist_node_traits<NodeTraits>
- , detail::identity<NodeTraits>
- >::type type;
-};
-
-template<class NodeTraits>
-struct get_slist_impl
-{
- typedef trivial_value_traits<NodeTraits, normal_link> trivial_traits;
-
- //Reducing symbol length
- struct type : make_slist
- < typename NodeTraits::node
- , boost::intrusive::value_traits<trivial_traits>
- , boost::intrusive::constant_time_size<false>
- , boost::intrusive::size_type<typename boost::make_unsigned
- <typename pointer_traits<typename NodeTraits::node_ptr>::difference_type>::type >
- >::type
- {};
-};
-
-template<class SupposedValueTraits>
-struct real_from_supposed_value_traits
-{
- typedef typename detail::eval_if_c
- < detail::external_value_traits_bool_is_true
- <SupposedValueTraits>::value
- , detail::eval_value_traits
- <SupposedValueTraits>
- , detail::identity
- <SupposedValueTraits>
- >::type type;
-};
+namespace detail {
template<class SupposedValueTraits>
struct get_slist_impl_from_supposed_value_traits
{
- typedef typename
- real_from_supposed_value_traits
- < SupposedValueTraits>::type real_value_traits;
+ typedef SupposedValueTraits value_traits;
typedef typename detail::get_node_traits
- <real_value_traits>::type node_traits;
+ <value_traits>::type node_traits;
typedef typename get_slist_impl
<typename reduced_slist_node_traits
<node_traits>::type
@@ -214,135 +121,19 @@ struct optimize_multikey_is_true
static const bool value = optimize_multikey_bool<T>::value > sizeof(one)*2;
};
-template<class Config>
-struct bucket_plus_size
- : public detail::size_holder //size_traits
- < 0 != (Config::bool_flags & hash_bool_flags::constant_time_size_pos)
- , typename Config::size_type>
-{
- typedef detail::size_holder
- < 0 != (Config::bool_flags & hash_bool_flags::constant_time_size_pos)
- , typename Config::size_type> size_traits;
- typedef typename Config::bucket_traits bucket_traits;
-
- template<class BucketTraits>
- bucket_plus_size(BOOST_FWD_REF(BucketTraits) b_traits)
- : bucket_traits_(::boost::forward<BucketTraits>(b_traits))
- {}
-
- bucket_plus_size & operator =(const bucket_plus_size &x)
- {
- this->size_traits::operator=(x);
- bucket_traits_ = x.bucket_traits_;
- return *this;
- }
- bucket_traits bucket_traits_;
-};
-
-template<class Config>
-struct bucket_hash_t
- : public detail::ebo_functor_holder<typename Config::hash> //hash
-{
- typedef typename Config::hash hasher;
- typedef detail::size_holder
- < 0 != (Config::bool_flags & hash_bool_flags::constant_time_size_pos)
- , typename Config::size_type> size_traits;
- typedef typename Config::bucket_traits bucket_traits;
-
- template<class BucketTraits>
- bucket_hash_t(BOOST_FWD_REF(BucketTraits) b_traits, const hasher & h)
- : detail::ebo_functor_holder<hasher>(h), bucket_plus_size_(::boost::forward<BucketTraits>(b_traits))
- {}
-
- bucket_plus_size<Config> bucket_plus_size_;
-};
-
-template<class Config, bool>
-struct bucket_hash_equal_t
- : public detail::ebo_functor_holder<typename Config::equal>
-{
- typedef typename Config::equal equal;
- typedef typename Config::hash hasher;
- typedef typename Config::bucket_traits bucket_traits;
-
- template<class BucketTraits>
- bucket_hash_equal_t(BOOST_FWD_REF(BucketTraits) b_traits, const hasher & h, const equal &e)
- : detail::ebo_functor_holder<typename Config::equal>(e)//equal()
- , bucket_hash(::boost::forward<BucketTraits>(b_traits), h)
- {}
-
- template<class T>
- void set_cache(T)
- {}
-
- bucket_hash_t<Config> bucket_hash;
-};
-
-template<class Config> //cache_begin == true version
-struct bucket_hash_equal_t<Config, true>
- : public detail::ebo_functor_holder<typename Config::equal>
-{
- typedef typename Config::equal equal;
- typedef typename Config::hash hasher;
- typedef typename Config::bucket_traits bucket_traits;
- typedef typename unordered_bucket_ptr_impl
- <typename Config::value_traits>::type bucket_ptr;
-
- template<class BucketTraits>
- bucket_hash_equal_t(BOOST_FWD_REF(BucketTraits) b_traits, const hasher & h, const equal &e)
- : detail::ebo_functor_holder<typename Config::equal>(e) //equal()
- , bucket_hash(::boost::forward<BucketTraits>(b_traits), h)
- {}
-
- void set_cache(const bucket_ptr & c)
- { cached_begin_ = c; }
-
- bucket_hash_t<Config> bucket_hash;
- bucket_ptr cached_begin_;
-};
-
-template<class Config>
-struct hashtable_data_t : public Config::value_traits
-{
- static const std::size_t bool_flags = Config::bool_flags;
- typedef typename Config::value_traits value_traits;
- typedef typename Config::equal equal;
- typedef typename Config::hash hasher;
- typedef typename Config::bucket_traits bucket_traits;
-
- template<class BucketTraits>
- hashtable_data_t( BOOST_FWD_REF(BucketTraits) b_traits, const hasher & h
- , const equal &e, const value_traits &val_traits)
- : Config::value_traits(val_traits) //value_traits
- , internal_(::boost::forward<BucketTraits>(b_traits), h, e)
- {}
- typedef typename detail::usetopt_mask
- < Config
- , detail::hash_bool_flags::constant_time_size_pos
- | detail::hash_bool_flags::incremental_pos
- >::type masked_config_t;
- struct internal
- : public detail::size_holder //split_traits
- < 0 != (Config::bool_flags & hash_bool_flags::incremental_pos)
- , typename Config::size_type>
- {
- template<class BucketTraits>
- internal(BOOST_FWD_REF(BucketTraits) b_traits, const hasher & h, const equal &e)
- : bucket_hash_equal_(::boost::forward<BucketTraits>(b_traits), h, e)
- {}
-
- bucket_hash_equal_t
- < masked_config_t
- , 0 != (bool_flags & hash_bool_flags::cache_begin_pos)
- > bucket_hash_equal_;
- } internal_;
-};
-
struct insert_commit_data_impl
{
std::size_t hash;
};
+template<class Node, class SlistNodePtr>
+inline typename pointer_traits<SlistNodePtr>::template rebind_pointer<Node>::type
+ dcast_bucket_ptr(const SlistNodePtr &p)
+{
+ typedef typename pointer_traits<SlistNodePtr>::template rebind_pointer<Node>::type node_ptr;
+ return pointer_traits<node_ptr>::pointer_to(static_cast<Node&>(*p));
+}
+
template<class NodeTraits>
struct group_functions
{
@@ -356,9 +147,6 @@ struct group_functions
typedef typename reduced_node_traits::node slist_node;
typedef circular_slist_algorithms<group_traits> group_algorithms;
- static node_ptr dcast_bucket_ptr(const slist_node_ptr &p)
- { return pointer_traits<node_ptr>::pointer_to(static_cast<node&>(*p)); }
-
static slist_node_ptr get_bucket_before_begin
(const slist_node_ptr &bucket_beg, const slist_node_ptr &bucket_end, const node_ptr &p)
{
@@ -384,7 +172,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 = group_functions::dcast_bucket_ptr(possible_end);
+ first_node_of_group = detail::dcast_bucket_ptr<node>(possible_end);
last_node_group = group_traits::get_next(first_node_of_group);
possible_end = node_traits::get_next(last_node_group);
}
@@ -395,7 +183,7 @@ struct group_functions
{
//Just iterate using group links and obtain the node
//before "first_in_group)"
- node_ptr prev_node = group_functions::dcast_bucket_ptr(bucket_node);
+ node_ptr prev_node = detail::dcast_bucket_ptr<node>(bucket_node);
node_ptr nxt(node_traits::get_next(prev_node));
while(nxt != first_in_group){
prev_node = group_traits::get_next(nxt);
@@ -480,7 +268,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(group_functions::dcast_bucket_ptr(i));
+ node_ptr elem(detail::dcast_bucket_ptr<node>(i));
//It's the last in group if the next_node is a bucket
slist_node_ptr nxt(node_traits::get_next(elem));
@@ -575,6 +363,22 @@ struct node_functions
{}
};
+inline std::size_t hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, detail::false_)
+{ return hash_value % bucket_cnt; }
+
+inline std::size_t hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, detail::true_)
+{ return hash_value & (bucket_cnt - 1); }
+
+template<bool Power2Buckets, bool Incremental>
+inline std::size_t hash_to_bucket_split(std::size_t hash_value, std::size_t bucket_cnt, std::size_t split)
+{
+ std::size_t bucket_number = detail::hash_to_bucket(hash_value, bucket_cnt, detail::bool_<Power2Buckets>());
+ if(Incremental)
+ if(bucket_number >= split)
+ bucket_number -= bucket_cnt/2;
+ return bucket_number;
+}
+
} //namespace detail {
//!This metafunction will obtain the type of a bucket
@@ -584,7 +388,7 @@ template<class ValueTraitsOrHookOption>
struct unordered_bucket
: public detail::unordered_bucket_impl
<typename ValueTraitsOrHookOption::
- template pack<none>::value_traits
+ template pack<none>::proto_value_traits
>
{};
@@ -595,7 +399,7 @@ template<class ValueTraitsOrHookOption>
struct unordered_bucket_ptr
: public detail::unordered_bucket_ptr_impl
<typename ValueTraitsOrHookOption::
- template pack<none>::value_traits
+ template pack<none>::proto_value_traits
>
{};
@@ -607,7 +411,7 @@ template<class ValueTraitsOrHookOption>
struct unordered_default_bucket_traits
{
typedef typename ValueTraitsOrHookOption::
- template pack<none>::value_traits supposed_value_traits;
+ template pack<none>::proto_value_traits supposed_value_traits;
typedef typename detail::
get_slist_impl_from_supposed_value_traits
<supposed_value_traits>::type slist_impl;
@@ -618,28 +422,606 @@ struct unordered_default_bucket_traits
struct default_bucket_traits;
-template <class T>
-struct uset_defaults
- : pack_options
- < none
- , base_hook<detail::default_uset_hook>
- , constant_time_size<true>
- , size_type<std::size_t>
- , equal<std::equal_to<T> >
- , hash<boost::hash<T> >
- , bucket_traits<default_bucket_traits>
- , power_2_buckets<false>
- , cache_begin<false>
- , compare_hash<false>
- , incremental<false>
- >::type
-{};
+struct hashtable_defaults
+{
+ typedef detail::default_hashtable_hook proto_value_traits;
+ typedef std::size_t size_type;
+ typedef void equal;
+ typedef void hash;
+ typedef default_bucket_traits bucket_traits;
+ static const bool constant_time_size = true;
+ static const bool power_2_buckets = false;
+ static const bool cache_begin = false;
+ static const bool compare_hash = false;
+ static const bool incremental = false;
+};
+
+template<class ValueTraits, bool IsConst>
+struct downcast_node_to_value_t
+ : public detail::node_to_value<ValueTraits, IsConst>
+{
+ typedef detail::node_to_value<ValueTraits, IsConst> base_t;
+ typedef typename base_t::result_type result_type;
+ typedef ValueTraits value_traits;
+ typedef typename detail::get_slist_impl
+ <typename detail::reduced_slist_node_traits
+ <typename value_traits::node_traits>::type
+ >::type slist_impl;
+ typedef typename detail::add_const_if_c
+ <typename slist_impl::node, IsConst>::type & first_argument_type;
+ typedef typename detail::add_const_if_c
+ < typename ValueTraits::node_traits::node
+ , IsConst>::type & intermediate_argument_type;
+ typedef typename pointer_traits
+ <typename ValueTraits::pointer>::
+ template rebind_pointer
+ <const ValueTraits>::type const_value_traits_ptr;
+
+ downcast_node_to_value_t(const const_value_traits_ptr &ptr)
+ : base_t(ptr)
+ {}
+
+ result_type operator()(first_argument_type arg) const
+ { return this->base_t::operator()(static_cast<intermediate_argument_type>(arg)); }
+};
+
+template<class F, class SlistNodePtr, class NodePtr>
+struct node_cast_adaptor
+ : private detail::ebo_functor_holder<F>
+{
+ typedef detail::ebo_functor_holder<F> base_t;
+
+ typedef typename pointer_traits<SlistNodePtr>::element_type slist_node;
+ typedef typename pointer_traits<NodePtr>::element_type node;
+
+ template<class ConvertibleToF, class RealValuTraits>
+ node_cast_adaptor(const ConvertibleToF &c2f, const RealValuTraits *traits)
+ : base_t(base_t(c2f, traits))
+ {}
+
+ typename base_t::node_ptr operator()(const slist_node &to_clone)
+ { return base_t::operator()(static_cast<const node &>(to_clone)); }
+
+ void operator()(SlistNodePtr to_clone)
+ {
+ base_t::operator()(pointer_traits<NodePtr>::pointer_to(static_cast<node &>(*to_clone)));
+ }
+};
+
+static const std::size_t hashtable_data_bool_flags_mask =
+ ( hash_bool_flags::cache_begin_pos
+ | hash_bool_flags::constant_time_size_pos
+ | hash_bool_flags::incremental_pos
+ );
+
+//bucket_plus_vtraits stores ValueTraits + BucketTraits
+//this data is needed by iterators to obtain the
+//value from the iterator and detect the bucket
+template<class ValueTraits, class BucketTraits>
+struct bucket_plus_vtraits : public ValueTraits
+{
+ typedef BucketTraits bucket_traits;
+ typedef ValueTraits value_traits;
+
+ static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
+
+ typedef typename
+ detail::get_slist_impl_from_supposed_value_traits
+ <value_traits>::type slist_impl;
+ typedef typename value_traits::node_traits node_traits;
+ typedef unordered_group_adapter<node_traits> group_traits;
+ typedef typename slist_impl::iterator siterator;
+ typedef typename slist_impl::size_type size_type;
+ typedef detail::bucket_impl<slist_impl> bucket_type;
+ typedef detail::group_functions<node_traits> group_functions_t;
+ typedef typename slist_impl::node_algorithms node_algorithms;
+ typedef typename slist_impl::node_ptr slist_node_ptr;
+ typedef typename node_traits::node_ptr node_ptr;
+ typedef typename node_traits::node node;
+ typedef typename value_traits::value_type value_type;
+ typedef circular_slist_algorithms<group_traits> group_algorithms;
+ typedef typename pointer_traits
+ <typename value_traits::pointer>::
+ template rebind_pointer
+ <const value_traits>::type const_value_traits_ptr;
+ typedef typename pointer_traits
+ <typename value_traits::pointer>::
+ template rebind_pointer
+ <const bucket_plus_vtraits>::type const_bucket_value_traits_ptr;
+ typedef typename detail::unordered_bucket_ptr_impl
+ <value_traits>::type bucket_ptr;
+ typedef detail::bool_<detail::optimize_multikey_is_true
+ <node_traits>::value> optimize_multikey_t;
+
+ template<class BucketTraitsType>
+ bucket_plus_vtraits(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits)
+ : ValueTraits(val_traits), bucket_traits_(::boost::forward<BucketTraitsType>(b_traits))
+ {}
+
+ bucket_plus_vtraits & operator =(const bucket_plus_vtraits &x)
+ { bucket_traits_ = x.bucket_traits_; return *this; }
+
+ const_value_traits_ptr priv_value_traits_ptr() const
+ { return pointer_traits<const_value_traits_ptr>::pointer_to(this->priv_value_traits()); }
+
+ //bucket_value_traits
+ //
+ const bucket_plus_vtraits &get_bucket_value_traits() const
+ { return *this; }
+
+ bucket_plus_vtraits &get_bucket_value_traits()
+ { return *this; }
+
+ const_bucket_value_traits_ptr bucket_value_traits_ptr() const
+ { return pointer_traits<const_bucket_value_traits_ptr>::pointer_to(this->get_bucket_value_traits()); }
+
+ //value traits
+ //
+ const value_traits &priv_value_traits() const
+ { return *this; }
+
+ value_traits &priv_value_traits()
+ { return *this; }
+
+ //bucket_traits
+ //
+ const bucket_traits &priv_bucket_traits() const
+ { return this->bucket_traits_; }
+
+ bucket_traits &priv_bucket_traits()
+ { return this->bucket_traits_; }
+
+ //bucket operations
+ bucket_ptr priv_bucket_pointer() const
+ { return this->priv_bucket_traits().bucket_begin(); }
+
+ typename slist_impl::size_type priv_bucket_count() const
+ { return this->priv_bucket_traits().bucket_count(); }
+
+ bucket_ptr priv_invalid_bucket() const
+ {
+ const bucket_traits &rbt = this->priv_bucket_traits();
+ return rbt.bucket_begin() + rbt.bucket_count();
+ }
+ siterator priv_invalid_local_it() const
+ { return this->priv_bucket_traits().bucket_begin()->before_begin(); }
+
+ static siterator priv_get_last(bucket_type &b, detail::true_) //optimize multikey
+ {
+ //First find the last node of p's group.
+ //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( detail::dcast_bucket_ptr<node>(end_ptr)));
+ node_ptr last_node_group(possible_end);
+
+ while(end_ptr != possible_end){
+ last_node_group = group_traits::get_next(detail::dcast_bucket_ptr<node>(possible_end));
+ possible_end = node_traits::get_next(last_node_group);
+ }
+ return bucket_type::s_iterator_to(*last_node_group);
+ }
+
+ static siterator priv_get_last(bucket_type &b, detail::false_) //NOT optimize multikey
+ { return b.previous(b.end()); }
+
+ static siterator priv_get_previous(bucket_type &b, siterator i, detail::true_) //optimize multikey
+ {
+ node_ptr elem(detail::dcast_bucket_ptr<node>(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
+ ? *group_functions_t::get_prev_to_first_in_group(b.end().pointed_node(), elem)
+ : *group_traits::get_next(elem)
+ ;
+ return bucket_type::s_iterator_to(n);
+ }
+
+ static siterator priv_get_previous(bucket_type &b, siterator i, detail::false_) //NOT optimize multikey
+ { return b.previous(i); }
+
+ static void priv_clear_group_nodes(bucket_type &b, detail::true_) //optimize multikey
+ {
+ siterator it(b.begin()), itend(b.end());
+ while(it != itend){
+ node_ptr to_erase(detail::dcast_bucket_ptr<node>(it.pointed_node()));
+ ++it;
+ group_algorithms::init(to_erase);
+ }
+ }
+
+ static void priv_clear_group_nodes(bucket_type &, detail::false_) //NOT optimize multikey
+ {}
+
+ std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::true_) //optimize multikey
+ {
+ 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()
+ , detail::dcast_bucket_ptr<node>(it.pointed_node()));
+ //Now get the bucket_impl from the iterator
+ const bucket_type &b = static_cast<const bucket_type&>
+ (bucket_type::slist_type::container_from_end_iterator(bucket_type::s_iterator_to(*bb)));
+ //Now just calculate the index b has in the bucket array
+ return static_cast<size_type>(&b - &*f);
+ }
+
+ std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::false_) //NO optimize multikey
+ {
+ 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());
+
+ //The end node is embedded in the singly linked list:
+ //iterate until we reach it.
+ while(!(first_ptr <= it.pointed_node() && it.pointed_node() <= last_ptr)){
+ ++it;
+ }
+ //Now get the bucket_impl from the iterator
+ const bucket_type &b = static_cast<const bucket_type&>
+ (bucket_type::container_from_end_iterator(it));
+
+ //Now just calculate the index b has in the bucket array
+ return static_cast<std::size_t>(&b - &*f);
+ }
+
+ static std::size_t priv_stored_hash(slist_node_ptr n, detail::true_) //store_hash
+ { return node_traits::get_hash(detail::dcast_bucket_ptr<node>(n)); }
+
+ static std::size_t priv_stored_hash(slist_node_ptr, detail::false_) //NO store_hash (This should never be called)
+ { BOOST_INTRUSIVE_INVARIANT_ASSERT(0); return 0; }
+
+ node &priv_value_to_node(value_type &v)
+ { return *this->priv_value_traits().to_node_ptr(v); }
+
+ const node &priv_value_to_node(const value_type &v) const
+ { return *this->priv_value_traits().to_node_ptr(v); }
+
+ value_type &priv_value_from_slist_node(slist_node_ptr n)
+ { return *this->priv_value_traits().to_value_ptr(detail::dcast_bucket_ptr<node>(n)); }
+
+ const value_type &priv_value_from_slist_node(slist_node_ptr n) const
+ { return *this->priv_value_traits().to_value_ptr(detail::dcast_bucket_ptr<node>(n)); }
+
+ void priv_clear_buckets(const bucket_ptr buckets_ptr, const size_type bucket_cnt)
+ {
+ bucket_ptr buckets_it = buckets_ptr;
+ for(size_type bucket_i = 0; bucket_i != bucket_cnt; ++buckets_it, ++bucket_i){
+ if(safemode_or_autounlink){
+ bucket_plus_vtraits::priv_clear_group_nodes(*buckets_it, optimize_multikey_t());
+ buckets_it->clear_and_dispose(detail::init_disposer<node_algorithms>());
+ }
+ else{
+ buckets_it->clear();
+ }
+ }
+ }
+
+ bucket_traits bucket_traits_;
+};
+
+//bucket_hash_t
+//Stores bucket_plus_vtraits plust the hash function
+template<class VoidOrKeyHash, class ValueTraits, class BucketTraits>
+struct bucket_hash_t
+ : public detail::ebo_functor_holder
+ <typename get_hash< VoidOrKeyHash
+ , typename bucket_plus_vtraits<ValueTraits,BucketTraits>::value_traits::value_type
+ >::type
+ >
+{
+ typedef typename bucket_plus_vtraits<ValueTraits,BucketTraits>::value_traits value_traits;
+ typedef typename value_traits::value_type value_type;
+ typedef typename value_traits::node_traits node_traits;
+ typedef typename get_hash< VoidOrKeyHash, value_type>::type hasher;
+ typedef BucketTraits bucket_traits;
+ typedef bucket_plus_vtraits<ValueTraits, BucketTraits> bucket_plus_vtraits_t;
+
+ template<class BucketTraitsType>
+ bucket_hash_t(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits, const hasher & h)
+ : detail::ebo_functor_holder<hasher>(h), internal(val_traits, ::boost::forward<BucketTraitsType>(b_traits))
+ {}
+
+ const hasher &priv_hasher() const
+ { return this->detail::ebo_functor_holder<hasher>::get(); }
+
+ hasher &priv_hasher()
+ { return this->detail::ebo_functor_holder<hasher>::get(); }
+
+ std::size_t priv_stored_or_compute_hash(const value_type &v, detail::true_) const //For store_hash == true
+ { return node_traits::get_hash(this->internal.priv_value_traits().to_node_ptr(v)); }
+
+ std::size_t priv_stored_or_compute_hash(const value_type &v, detail::false_) const //For store_hash == false
+ { return this->priv_hasher()(v); }
+
+ bucket_plus_vtraits_t internal; //4
+};
+
+//bucket_hash_equal_t
+//Stores bucket_hash_t and the equality function when the first
+//non-empty bucket shall not be cached.
+template<class VoidOrKeyHash, class VoidOrKeyEqual, class ValueTraits, class BucketTraits, bool>
+struct bucket_hash_equal_t
+ : public detail::ebo_functor_holder //equal
+ <typename get_equal_to< VoidOrKeyEqual
+ , typename bucket_plus_vtraits<ValueTraits,BucketTraits>::value_traits::value_type
+ >::type
+ >
+{
+ typedef bucket_hash_t<VoidOrKeyHash, ValueTraits, BucketTraits> bucket_hash_type;
+ typedef bucket_plus_vtraits<ValueTraits,BucketTraits> bucket_plus_vtraits_t;
+ typedef typename bucket_plus_vtraits_t::value_traits value_traits;
+ typedef typename get_equal_to< VoidOrKeyEqual
+ , typename value_traits::value_type
+ >::type value_equal;
+ typedef typename bucket_hash_type::hasher hasher;
+ typedef BucketTraits bucket_traits;
+ typedef typename bucket_plus_vtraits_t::slist_impl slist_impl;
+ typedef typename slist_impl::size_type size_type;
+ typedef typename slist_impl::iterator siterator;
+ typedef detail::bucket_impl<slist_impl> bucket_type;
+ typedef typename detail::unordered_bucket_ptr_impl<value_traits>::type bucket_ptr;
+
+ template<class BucketTraitsType>
+ bucket_hash_equal_t(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits, const hasher & h, const value_equal &e)
+ : detail::ebo_functor_holder<value_equal>(e)
+ , internal(val_traits, ::boost::forward<BucketTraitsType>(b_traits), h)
+ {}
+
+ bucket_ptr priv_get_cache()
+ { return this->internal.internal.priv_bucket_pointer(); }
+
+ void priv_set_cache(const bucket_ptr &)
+ {}
+
+ size_type priv_get_cache_bucket_num()
+ { return 0u; }
+
+ void priv_initialize_cache()
+ {}
+
+ void priv_swap_cache(bucket_hash_equal_t &)
+ {}
+
+ siterator priv_begin() const
+ {
+ size_type n = 0;
+ size_type bucket_cnt = this->internal.internal.priv_bucket_count();
+ for (n = 0; n < bucket_cnt; ++n){
+ bucket_type &b = this->internal.internal.priv_bucket_pointer()[n];
+ if(!b.empty()){
+ return b.begin();
+ }
+ }
+ return this->internal.internal.priv_invalid_local_it();
+ }
+
+ void priv_insertion_update_cache(size_type)
+ {}
+
+ void priv_erasure_update_cache_range(size_type, size_type)
+ {}
+
+ void priv_erasure_update_cache()
+ {}
+
+ const value_equal &priv_equal() const
+ { return this->detail::ebo_functor_holder<value_equal>::get(); }
+
+ value_equal &priv_equal()
+ { return this->detail::ebo_functor_holder<value_equal>::get(); }
+
+ bucket_hash_t<VoidOrKeyHash, ValueTraits, BucketTraits> internal; //3
+};
+
+//bucket_hash_equal_t
+//Stores bucket_hash_t and the equality function when the first
+//non-empty bucket shall be cached.
+template<class VoidOrKeyHash, class VoidOrKeyEqual, class ValueTraits, class BucketTraits> //cache_begin == true version
+struct bucket_hash_equal_t<VoidOrKeyHash, VoidOrKeyEqual, ValueTraits, BucketTraits, true>
+ : public detail::ebo_functor_holder //equal
+ <typename get_equal_to< VoidOrKeyEqual
+ , typename bucket_plus_vtraits<ValueTraits,BucketTraits>::value_traits::value_type
+ >::type
+ >
+{
+ typedef bucket_plus_vtraits<ValueTraits, BucketTraits> bucket_plus_vtraits_t;
+ typedef bucket_hash_t<VoidOrKeyHash, ValueTraits, BucketTraits> bucket_hash_type;
+ typedef typename bucket_plus_vtraits
+ <ValueTraits,BucketTraits>::value_traits value_traits;
+ typedef typename get_equal_to
+ < VoidOrKeyEqual
+ , typename value_traits::value_type>::type value_equal;
+ typedef typename bucket_hash_type::hasher hasher;
+ typedef BucketTraits bucket_traits;
+ typedef typename bucket_plus_vtraits_t::slist_impl::size_type size_type;
+ typedef typename bucket_plus_vtraits_t::slist_impl::iterator siterator;
+
+ template<class BucketTraitsType>
+ bucket_hash_equal_t(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits, const hasher & h, const value_equal &e)
+ : detail::ebo_functor_holder<value_equal>(e)
+ , internal(val_traits, ::boost::forward<BucketTraitsType>(b_traits), h)
+ {}
+
+ typedef typename detail::unordered_bucket_ptr_impl
+ <typename bucket_hash_type::value_traits>::type bucket_ptr;
+
+ bucket_ptr &priv_get_cache()
+ { return cached_begin_; }
+
+ const bucket_ptr &priv_get_cache() const
+ { return cached_begin_; }
+
+ void priv_set_cache(const bucket_ptr &p)
+ { cached_begin_ = p; }
+
+ std::size_t priv_get_cache_bucket_num()
+ { return this->cached_begin_ - this->internal.internal.priv_bucket_pointer(); }
+
+ void priv_initialize_cache()
+ { this->cached_begin_ = this->internal.internal.priv_invalid_bucket(); }
+
+ void priv_swap_cache(bucket_hash_equal_t &other)
+ {
+ std::swap(this->cached_begin_, other.cached_begin_);
+ }
+
+ siterator priv_begin() const
+ {
+ if(this->cached_begin_ == this->internal.internal.priv_invalid_bucket()){
+ return this->internal.internal.priv_invalid_local_it();
+ }
+ else{
+ return this->cached_begin_->begin();
+ }
+ }
+
+ void priv_insertion_update_cache(size_type insertion_bucket)
+ {
+ bucket_ptr p = this->internal.internal.priv_bucket_pointer() + insertion_bucket;
+ if(p < this->cached_begin_){
+ this->cached_begin_ = p;
+ }
+ }
+
+ const value_equal &priv_equal() const
+ { return this->detail::ebo_functor_holder<value_equal>::get(); }
+
+ value_equal &priv_equal()
+ { return this->detail::ebo_functor_holder<value_equal>::get(); }
+
+ void priv_erasure_update_cache_range(size_type first_bucket_num, size_type last_bucket_num)
+ {
+ //If the last bucket is the end, the cache must be updated
+ //to the last position if all
+ if(this->priv_get_cache_bucket_num() == first_bucket_num &&
+ this->internal.internal.priv_bucket_pointer()[first_bucket_num].empty() ){
+ this->priv_set_cache(this->internal.internal.priv_bucket_pointer() + last_bucket_num);
+ this->priv_erasure_update_cache();
+ }
+ }
+
+ void priv_erasure_update_cache()
+ {
+ if(this->cached_begin_ != this->internal.internal.priv_invalid_bucket()){
+ size_type current_n = this->priv_get_cache() - this->internal.internal.priv_bucket_pointer();
+ for( const size_type num_buckets = this->internal.internal.priv_bucket_count()
+ ; current_n < num_buckets
+ ; ++current_n, ++this->priv_get_cache()){
+ if(!this->priv_get_cache()->empty()){
+ return;
+ }
+ }
+ this->priv_initialize_cache();
+ }
+ }
+
+ bucket_ptr cached_begin_;
+ bucket_hash_t<VoidOrKeyHash, ValueTraits, BucketTraits> internal; //2
+};
+
+//hashdata_internal
+//Stores bucket_hash_equal_t and split_traits
+template<class SizeType, std::size_t BoolFlags, class VoidOrKeyHash, class VoidOrKeyEqual, class ValueTraits, class BucketTraits>
+struct hashdata_internal
+ : public detail::size_holder< 0 != (BoolFlags & hash_bool_flags::incremental_pos), SizeType, int> //split_traits
+{
+ typedef bucket_hash_equal_t
+ < VoidOrKeyHash, VoidOrKeyEqual
+ , ValueTraits, BucketTraits
+ , 0 != (BoolFlags & hash_bool_flags::cache_begin_pos)
+ > internal_type;
+ typedef typename internal_type::value_equal value_equal;
+ typedef typename internal_type::hasher hasher;
+ typedef bucket_plus_vtraits<ValueTraits,BucketTraits> bucket_plus_vtraits_t;
+ typedef typename bucket_plus_vtraits_t::size_type size_type;
+ typedef typename bucket_plus_vtraits_t::bucket_ptr bucket_ptr;
+ typedef detail::size_holder
+ <0 != (BoolFlags & hash_bool_flags::incremental_pos)
+ , SizeType, int> split_traits;
+ typedef typename bucket_plus_vtraits_t::
+ value_traits::node_traits node_traits;
+ typedef detail::bool_<detail::optimize_multikey_is_true
+ <node_traits>::value> optimize_multikey_t;
+
+ template<class BucketTraitsType>
+ hashdata_internal( const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits
+ , const hasher & h, const value_equal &e)
+ : internal(val_traits, ::boost::forward<BucketTraitsType>(b_traits), h, e)
+ {}
+
+ split_traits &priv_split_traits()
+ { return *this; }
+
+ const split_traits &priv_split_traits() const
+ { return *this; }
+
+ ~hashdata_internal()
+ { this->priv_clear_buckets(); }
+
+ void priv_clear_buckets()
+ {
+ this->internal.internal.internal.priv_clear_buckets
+ ( this->internal.priv_get_cache()
+ , this->internal.internal.internal.priv_bucket_count()
+ - (this->internal.priv_get_cache()
+ - this->internal.internal.internal.priv_bucket_pointer()));
+ }
+
+ void priv_clear_buckets_and_cache()
+ {
+ this->priv_clear_buckets();
+ this->internal.priv_initialize_cache();
+ }
+
+ void priv_initialize_buckets_and_cache()
+ {
+ this->internal.internal.internal.priv_clear_buckets
+ ( this->internal.internal.internal.priv_bucket_pointer()
+ , this->internal.internal.internal.priv_bucket_count());
+ this->internal.priv_initialize_cache();
+ }
+
+ internal_type internal; //2
+};
+
+//hashtable_data_t
+//Stores hashdata_internal and size_traits
+template<class SizeType, std::size_t BoolFlags, class VoidOrKeyHash, class VoidOrKeyEqual, class ValueTraits, class BucketTraits>
+struct hashtable_data_t
+ : public detail::size_holder
+ < 0 != (BoolFlags & hash_bool_flags::constant_time_size_pos), SizeType> //size_traits
+{
+ typedef detail::size_holder
+ < 0 != (BoolFlags & hash_bool_flags::constant_time_size_pos)
+ , SizeType> size_traits;
+ typedef hashdata_internal
+ < SizeType
+ , BoolFlags & (hash_bool_flags::incremental_pos | hash_bool_flags::cache_begin_pos)
+ , VoidOrKeyHash, VoidOrKeyEqual
+ , ValueTraits, BucketTraits> internal_type;
+ typedef ValueTraits value_traits;
+ typedef typename internal_type::value_equal value_equal;
+ typedef typename internal_type::hasher hasher;
+ typedef BucketTraits bucket_traits;
+ typedef bucket_plus_vtraits
+ <ValueTraits,BucketTraits> bucket_plus_vtraits_t;
+
+ template<class BucketTraitsType>
+ hashtable_data_t( BOOST_FWD_REF(BucketTraitsType) b_traits, const hasher & h
+ , const value_equal &e, const value_traits &val_traits)
+ : internal(val_traits, ::boost::forward<BucketTraitsType>(b_traits), h, e)
+ {}
+
+ internal_type internal; //1
+};
/// @endcond
//! The class template hashtable is an intrusive hash table container, that
//! is used to construct intrusive unordered_set and unordered_multiset containers. The
-//! no-throw guarantee holds only, if the Equal object and Hasher don't throw.
+//! no-throw guarantee holds only, if the VoidOrKeyEqual object and Hasher don't throw.
//!
//! hashtable is a semi-intrusive container: each object to be stored in the
//! container must contain a proper hook, but the container also needs
@@ -676,56 +1058,62 @@ struct uset_defaults
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class VoidOrKeyHash, class VoidOrKeyEqual, class SizeType, class BucketTraits, std::size_t BoolFlags>
#endif
class hashtable_impl
- : private detail::clear_on_destructor_base<hashtable_impl<Config> >
+ : private hashtable_data_t
+ < SizeType
+ , BoolFlags & hashtable_data_bool_flags_mask
+ , VoidOrKeyHash, VoidOrKeyEqual, ValueTraits, BucketTraits>
{
- template<class C> friend class detail::clear_on_destructor_base;
+ typedef hashtable_data_t
+ < SizeType
+ , BoolFlags & hashtable_data_bool_flags_mask
+ , VoidOrKeyHash, VoidOrKeyEqual, ValueTraits, BucketTraits> data_type;
+
public:
- typedef typename Config::value_traits value_traits;
+ typedef ValueTraits value_traits;
/// @cond
- static const bool external_value_traits =
- detail::external_value_traits_bool_is_true<value_traits>::value;
- typedef typename detail::eval_if_c
- < external_value_traits
- , detail::eval_value_traits<value_traits>
- , detail::identity<value_traits>
- >::type real_value_traits;
- typedef typename Config::bucket_traits bucket_traits;
- static const bool external_bucket_traits =
- detail::external_bucket_traits_bool_is_true<bucket_traits>::value;
- typedef typename detail::eval_if_c
- < external_bucket_traits
- , detail::eval_bucket_traits<bucket_traits>
- , detail::identity<bucket_traits>
- >::type real_bucket_traits;
+ typedef BucketTraits bucket_traits;
+
typedef typename detail::get_slist_impl
<typename detail::reduced_slist_node_traits
- <typename real_value_traits::node_traits>::type
+ <typename value_traits::node_traits>::type
>::type slist_impl;
+ typedef bucket_plus_vtraits<ValueTraits, BucketTraits> bucket_plus_vtraits_t;
+ typedef typename bucket_plus_vtraits_t::const_value_traits_ptr const_value_traits_ptr;
+
+
/// @endcond
- typedef typename real_value_traits::pointer pointer;
- typedef typename real_value_traits::const_pointer const_pointer;
- typedef typename real_value_traits::value_type value_type;
+ typedef typename value_traits::pointer pointer;
+ typedef typename value_traits::const_pointer const_pointer;
+ typedef typename value_traits::value_type value_type;
typedef typename pointer_traits<pointer>::reference reference;
typedef typename pointer_traits<const_pointer>::reference const_reference;
typedef typename pointer_traits<pointer>::difference_type difference_type;
- typedef typename Config::size_type size_type;
+ typedef SizeType size_type;
typedef value_type key_type;
- typedef typename Config::equal key_equal;
- typedef typename Config::hash hasher;
+ typedef typename data_type::value_equal key_equal;
+ typedef typename data_type::value_equal value_equal;
+ typedef typename data_type::hasher hasher;
typedef detail::bucket_impl<slist_impl> bucket_type;
typedef typename pointer_traits
<pointer>::template rebind_pointer
< bucket_type >::type bucket_ptr;
+ typedef typename pointer_traits
+ <pointer>::template rebind_pointer
+ < const bucket_type >::type const_bucket_ptr;
+ typedef typename pointer_traits
+ <bucket_ptr>::reference bucket_reference;
+ typedef typename pointer_traits
+ <bucket_ptr>::reference const_bucket_reference;
typedef typename slist_impl::iterator siterator;
typedef typename slist_impl::const_iterator const_siterator;
- typedef detail::hashtable_iterator<hashtable_impl, false> iterator;
- typedef detail::hashtable_iterator<hashtable_impl, true> const_iterator;
- typedef typename real_value_traits::node_traits node_traits;
+ typedef hashtable_iterator<bucket_plus_vtraits_t, false> iterator;
+ typedef hashtable_iterator<bucket_plus_vtraits_t, true> const_iterator;
+ typedef typename value_traits::node_traits node_traits;
typedef typename node_traits::node node;
typedef typename pointer_traits
<pointer>::template rebind_pointer
@@ -733,17 +1121,21 @@ class hashtable_impl
typedef typename pointer_traits
<pointer>::template rebind_pointer
< const node >::type const_node_ptr;
+ typedef typename pointer_traits
+ <node_ptr>::reference node_reference;
+ typedef typename pointer_traits
+ <const_node_ptr>::reference const_node_reference;
typedef typename slist_impl::node_algorithms node_algorithms;
- static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
+ static const bool stateful_value_traits = detail::is_stateful_value_traits<value_traits>::value;
static const bool store_hash = detail::store_hash_is_true<node_traits>::value;
- static const bool unique_keys = 0 != (Config::bool_flags & detail::hash_bool_flags::unique_keys_pos);
- static const bool constant_time_size = 0 != (Config::bool_flags & detail::hash_bool_flags::constant_time_size_pos);
- static const bool cache_begin = 0 != (Config::bool_flags & detail::hash_bool_flags::cache_begin_pos);
- static const bool compare_hash = 0 != (Config::bool_flags & detail::hash_bool_flags::compare_hash_pos);
- static const bool incremental = 0 != (Config::bool_flags & detail::hash_bool_flags::incremental_pos);
- static const bool power_2_buckets = incremental || (0 != (Config::bool_flags & detail::hash_bool_flags::power_2_buckets_pos));
+ static const bool unique_keys = 0 != (BoolFlags & hash_bool_flags::unique_keys_pos);
+ static const bool constant_time_size = 0 != (BoolFlags & hash_bool_flags::constant_time_size_pos);
+ static const bool cache_begin = 0 != (BoolFlags & hash_bool_flags::cache_begin_pos);
+ static const bool compare_hash = 0 != (BoolFlags & hash_bool_flags::compare_hash_pos);
+ static const bool incremental = 0 != (BoolFlags & hash_bool_flags::incremental_pos);
+ static const bool power_2_buckets = incremental || (0 != (BoolFlags & hash_bool_flags::power_2_buckets_pos));
static const bool optimize_multikey
= detail::optimize_multikey_is_true<node_traits>::value && !unique_keys;
@@ -768,75 +1160,31 @@ class hashtable_impl
typedef detail::bool_<cache_begin> cache_begin_t;
typedef detail::bool_<power_2_buckets> power_2_buckets_t;
typedef detail::size_holder<constant_time_size, size_type> size_traits;
- typedef detail::size_holder<incremental, size_type> split_traits;
+ typedef detail::size_holder<incremental, size_type, int> split_traits;
typedef detail::group_functions<node_traits> group_functions_t;
typedef detail::node_functions<node_traits> node_functions_t;
- static const std::size_t hashtable_data_bool_flags_mask =
- ( detail::hash_bool_flags::cache_begin_pos
- | detail::hash_bool_flags::constant_time_size_pos
- | detail::hash_bool_flags::incremental_pos
- );
- typedef typename detail::usetopt_mask
- <Config, hashtable_data_bool_flags_mask>::type masked_config_t;
- detail::hashtable_data_t<masked_config_t> data_;
-
- template<bool IsConst>
- struct downcast_node_to_value
- : public detail::node_to_value<hashtable_impl, IsConst>
- {
- typedef detail::node_to_value<hashtable_impl, IsConst> base_t;
- typedef typename base_t::result_type result_type;
- typedef typename detail::add_const_if_c
- <typename slist_impl::node, IsConst>::type &first_argument_type;
- typedef typename detail::add_const_if_c
- <node, IsConst>::type &intermediate_argument_type;
-
- downcast_node_to_value(const hashtable_impl *cont)
- : base_t(cont)
- {}
-
- result_type operator()(first_argument_type arg) const
- { return this->base_t::operator()(static_cast<intermediate_argument_type>(arg)); }
- };
-
- template<class F>
- struct node_cast_adaptor
- : private detail::ebo_functor_holder<F>
- {
- typedef detail::ebo_functor_holder<F> base_t;
-
- template<class ConvertibleToF>
- node_cast_adaptor(const ConvertibleToF &c2f, const hashtable_impl *cont)
- : base_t(base_t(c2f, cont))
- {}
-
- typename base_t::node_ptr operator()(const typename slist_impl::node &to_clone)
- { return base_t::operator()(static_cast<const node &>(to_clone)); }
-
- void operator()(typename slist_impl::node_ptr to_clone)
- {
- base_t::operator()(pointer_traits<node_ptr>::pointer_to(static_cast<node &>(*to_clone)));
- }
- };
-
private:
//noncopyable, movable
BOOST_MOVABLE_BUT_NOT_COPYABLE(hashtable_impl)
- enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
+ static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
//Constant-time size is incompatible with auto-unlink hooks!
- BOOST_STATIC_ASSERT(!(constant_time_size && ((int)real_value_traits::link_mode == (int)auto_unlink)));
+ BOOST_STATIC_ASSERT(!(constant_time_size && ((int)value_traits::link_mode == (int)auto_unlink)));
//Cache begin is incompatible with auto-unlink hooks!
- BOOST_STATIC_ASSERT(!(cache_begin && ((int)real_value_traits::link_mode == (int)auto_unlink)));
+ BOOST_STATIC_ASSERT(!(cache_begin && ((int)value_traits::link_mode == (int)auto_unlink)));
template<class Disposer>
- node_cast_adaptor<detail::node_disposer<Disposer, hashtable_impl> >
+ node_cast_adaptor< detail::node_disposer<Disposer, value_traits, CircularSListAlgorithms>
+ , slist_node_ptr, node_ptr >
make_node_disposer(const Disposer &disposer) const
- { return node_cast_adaptor<detail::node_disposer<Disposer, hashtable_impl> >(disposer, this); }
+ {
+ return node_cast_adaptor
+ < detail::node_disposer<Disposer, value_traits, CircularSListAlgorithms>
+ , slist_node_ptr, node_ptr >
+ (disposer, &this->priv_value_traits());
+ }
/// @endcond
@@ -845,36 +1193,18 @@ class hashtable_impl
typedef detail::transform_iterator
< typename slist_impl::iterator
- , downcast_node_to_value<false> > local_iterator;
+ , downcast_node_to_value_t
+ < value_traits
+ , false> > local_iterator;
typedef detail::transform_iterator
< typename slist_impl::iterator
- , downcast_node_to_value<true> > const_local_iterator;
-
- /// @cond
-
- const real_value_traits &get_real_value_traits(detail::false_) const
- { return this->data_; }
-
- const real_value_traits &get_real_value_traits(detail::true_) const
- { return data_.get_value_traits(*this); }
-
- real_value_traits &get_real_value_traits(detail::false_)
- { return this->data_; }
-
- real_value_traits &get_real_value_traits(detail::true_)
- { return data_.get_value_traits(*this); }
-
- /// @endcond
+ , downcast_node_to_value_t
+ < value_traits
+ , true> > const_local_iterator;
public:
- const real_value_traits &get_real_value_traits() const
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
- real_value_traits &get_real_value_traits()
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
//! <b>Requires</b>: buckets must not be being used by any other resource.
//!
//! <b>Effects</b>: Constructs an empty unordered_set, storing a reference
@@ -892,9 +1222,9 @@ class hashtable_impl
, const hasher & hash_func = hasher()
, const key_equal &equal_func = key_equal()
, const value_traits &v_traits = value_traits())
- : data_(b_traits, hash_func, equal_func, v_traits)
+ : data_type(b_traits, hash_func, equal_func, v_traits)
{
- this->priv_initialize_buckets();
+ this->data_type::internal.priv_initialize_buckets_and_cache();
this->priv_size_traits().set_size(size_type(0));
size_type bucket_sz = this->priv_bucket_count();
BOOST_INTRUSIVE_INVARIANT_ASSERT(bucket_sz != 0);
@@ -907,13 +1237,13 @@ class hashtable_impl
//! <b>Effects</b>: to-do
//!
hashtable_impl(BOOST_RV_REF(hashtable_impl) x)
- : data_( ::boost::move(x.priv_bucket_traits())
+ : data_type( ::boost::move(x.priv_bucket_traits())
, ::boost::move(x.priv_hasher())
, ::boost::move(x.priv_equal())
, ::boost::move(x.priv_value_traits())
)
{
- this->priv_swap_cache(cache_begin_t(), x);
+ this->priv_swap_cache(x);
x.priv_initialize_cache();
if(constant_time_size){
this->priv_size_traits().set_size(size_type(0));
@@ -931,6 +1261,7 @@ class hashtable_impl
hashtable_impl& operator=(BOOST_RV_REF(hashtable_impl) x)
{ this->swap(x); return *this; }
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
//! <b>Effects</b>: Detaches all elements from this. The objects in the unordered_set
//! are not deleted (i.e. no destructors are called).
//!
@@ -938,8 +1269,8 @@ class hashtable_impl
//! it's a safe-mode or auto-unlink value. Otherwise constant.
//!
//! <b>Throws</b>: Nothing.
- ~hashtable_impl()
- {}
+ ~hashtable_impl();
+ #endif
//! <b>Effects</b>: Returns an iterator pointing to the beginning of the unordered_set.
//!
@@ -948,7 +1279,7 @@ class hashtable_impl
//!
//! <b>Throws</b>: Nothing.
iterator begin()
- { return iterator(this->priv_begin(), this); }
+ { return iterator(this->priv_begin(), &this->get_bucket_value_traits()); }
//! <b>Effects</b>: Returns a const_iterator pointing to the beginning
//! of the unordered_set.
@@ -968,7 +1299,7 @@ class hashtable_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator cbegin() const
- { return const_iterator(this->priv_begin(), this); }
+ { return const_iterator(this->priv_begin(), &this->get_bucket_value_traits()); }
//! <b>Effects</b>: Returns an iterator pointing to the end of the unordered_set.
//!
@@ -1072,12 +1403,12 @@ class hashtable_impl
{
using std::swap;
//These can throw
- swap(this->priv_equal(), other.priv_equal());
+ swap(this->priv_equal(), other.priv_equal());
swap(this->priv_hasher(), other.priv_hasher());
//These can't throw
swap(this->priv_bucket_traits(), other.priv_bucket_traits());
swap(this->priv_value_traits(), other.priv_value_traits());
- this->priv_swap_cache(cache_begin_t(), other);
+ this->priv_swap_cache(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());
@@ -1128,9 +1459,12 @@ class hashtable_impl
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<detail::node_disposer<Disposer, hashtable_impl> > NodeDisposer;
- typedef node_cast_adaptor<detail::node_cloner<Cloner, hashtable_impl> > NodeCloner;
- NodeDisposer node_disp(disposer, this);
+
+ typedef node_cast_adaptor< detail::node_disposer<Disposer, value_traits, CircularSListAlgorithms>
+ , slist_node_ptr, node_ptr > NodeDisposer;
+ typedef node_cast_adaptor< detail::node_cloner <Cloner, value_traits, CircularSListAlgorithms>
+ , slist_node_ptr, node_ptr > NodeCloner;
+ NodeDisposer node_disp(disposer, &this->priv_value_traits());
detail::exception_array_disposer<bucket_type, NodeDisposer, size_type>
rollback(dst_buckets[0], node_disp, constructed);
@@ -1139,7 +1473,7 @@ class hashtable_impl
; ++constructed){
dst_buckets[constructed].clone_from
( src_buckets[constructed]
- , NodeCloner(cloner, this), node_disp);
+ , NodeCloner(cloner, &this->priv_value_traits()), node_disp);
}
if(src_bucket_count != dst_bucket_count){
//Now insert the remaining ones using the modulo trick
@@ -1147,12 +1481,12 @@ class hashtable_impl
; constructed < src_bucket_count
; ++constructed){
bucket_type &dst_b =
- dst_buckets[this->priv_hash_to_bucket(constructed, dst_bucket_count, dst_bucket_count)];
+ dst_buckets[detail::hash_to_bucket_split<power_2_buckets, incremental>(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
; ++b){
- dst_b.push_front(*(NodeCloner(cloner, this)(*b.pointed_node())));
+ dst_b.push_front(*(NodeCloner(cloner, &this->priv_value_traits())(*b.pointed_node())));
}
}
}
@@ -1167,7 +1501,7 @@ class hashtable_impl
else if(store_hash){
//Unlike previous cloning algorithm, this can throw
//if cloner, hasher or comparison functor throw
- const_iterator b(src.begin()), e(src.end());
+ const_iterator b(src.cbegin()), e(src.cend());
detail::exception_disposer<hashtable_impl, Disposer>
rollback(*this, disposer);
for(; b != e; ++b){
@@ -1179,7 +1513,7 @@ class hashtable_impl
else{
//Unlike previous cloning algorithm, this can throw
//if cloner, hasher or comparison functor throw
- const_iterator b(src.begin()), e(src.end());
+ const_iterator b(src.cbegin()), e(src.cend());
detail::exception_disposer<hashtable_impl, Disposer>
rollback(*this, disposer);
for(; b != e; ++b){
@@ -1327,7 +1661,7 @@ class hashtable_impl
if(success){
prev_pos = prev;
}
- return std::pair<iterator, bool>(iterator(prev_pos, this),success);
+ return std::pair<iterator, bool>(iterator(prev_pos, &this->get_bucket_value_traits()),success);
}
//! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
@@ -1360,7 +1694,7 @@ class hashtable_impl
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(n));
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);
+ return iterator(b.insert_after(b.before_begin(), *n), &this->get_bucket_value_traits());
}
//! <b>Effects</b>: Erases the element pointed to by i.
@@ -1485,7 +1819,7 @@ class hashtable_impl
last_bucket_num = this->priv_get_bucket_num(last_local_it);
}
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);
+ this->priv_erasure_update_cache_range(first_bucket_num, last_bucket_num);
}
}
@@ -1530,8 +1864,7 @@ class hashtable_impl
size_type bucket_num;
std::size_t h;
siterator prev;
- siterator it =
- this->priv_find(key, hash_func, equal_func, bucket_num, h, prev);
+ siterator it = this->priv_find(key, hash_func, equal_func, bucket_num, h, prev);
bool success = it != this->priv_invalid_local_it();
size_type cnt(0);
if(!success){
@@ -1540,7 +1873,7 @@ class hashtable_impl
else if(optimize_multikey){
siterator last = 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())));
+ (detail::dcast_bucket_ptr<node>(it.pointed_node()), optimize_multikey_t())));
this->priv_erase_range_impl(bucket_num, prev, last, disposer, cnt);
}
else{
@@ -1577,7 +1910,7 @@ class hashtable_impl
//! to the erased elements. No destructors are called.
void clear()
{
- this->priv_clear_buckets();
+ this->data_type::internal.priv_clear_buckets_and_cache();
this->priv_size_traits().set_size(size_type(0));
}
@@ -1670,7 +2003,7 @@ class hashtable_impl
std::size_t hash;
siterator prev;
siterator local_it = this->priv_find(key, hash_func, equal_func, bucket_n, hash, prev);
- return iterator(local_it, this);
+ return iterator(local_it, &this->get_bucket_value_traits());
}
//! <b>Effects</b>: Finds a const_iterator to the first element whose key is
@@ -1709,7 +2042,7 @@ class hashtable_impl
std::size_t hash_value;
siterator prev;
siterator sit = this->priv_find(key, hash_func, equal_func, bucket_n, hash_value, prev);
- return const_iterator(sit, this);
+ return const_iterator(sit, &this->get_bucket_value_traits());
}
//! <b>Effects</b>: Returns a range containing all elements with values equivalent
@@ -1750,7 +2083,7 @@ class hashtable_impl
std::pair<siterator, siterator> ret = this->priv_equal_range
(key, hash_func, equal_func, bucket_n1, bucket_n2, cnt);
return std::pair<iterator, iterator>
- (iterator(ret.first, this), iterator(ret.second, this));
+ (iterator(ret.first, &this->get_bucket_value_traits()), iterator(ret.second, &this->get_bucket_value_traits()));
}
//! <b>Effects</b>: Returns a range containing all elements with values equivalent
@@ -1792,7 +2125,8 @@ class hashtable_impl
std::pair<siterator, siterator> ret =
this->priv_equal_range(key, hash_func, equal_func, bucket_n1, bucket_n2, cnt);
return std::pair<const_iterator, const_iterator>
- (const_iterator(ret.first, this), const_iterator(ret.second, this));
+ ( const_iterator(ret.first, &this->get_bucket_value_traits())
+ , const_iterator(ret.second, &this->get_bucket_value_traits()));
}
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
@@ -1806,7 +2140,8 @@ class hashtable_impl
//! <b>Throws</b>: If the internal hash function throws.
iterator iterator_to(reference value)
{
- return iterator(bucket_type::s_iterator_to(this->priv_value_to_node(value)), this);
+ return iterator(bucket_type::s_iterator_to
+ (this->priv_value_to_node(value)), &this->get_bucket_value_traits());
}
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
@@ -1820,8 +2155,10 @@ class hashtable_impl
//! <b>Throws</b>: If the internal hash function throws.
const_iterator iterator_to(const_reference value) const
{
- siterator sit = bucket_type::s_iterator_to(const_cast<node &>(this->priv_value_to_node(value)));
- return const_iterator(sit, this);
+ node_reference r = *pointer_traits<node_ptr>::const_cast_from
+ (pointer_traits<const_node_ptr>::pointer_to(this->priv_value_to_node(value)));
+ siterator sit = bucket_type::s_iterator_to(r);
+ return const_iterator(sit, &this->get_bucket_value_traits());
}
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
@@ -1839,8 +2176,8 @@ class hashtable_impl
static local_iterator s_local_iterator_to(reference value)
{
BOOST_STATIC_ASSERT((!stateful_value_traits));
- siterator sit = bucket_type::s_iterator_to(((hashtable_impl*)0)->priv_value_to_node(value));
- return local_iterator(sit, (hashtable_impl*)0);
+ siterator sit = bucket_type::s_iterator_to(*value_traits::to_node_ptr(value));
+ return local_iterator(sit, const_value_traits_ptr());
}
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
@@ -1858,8 +2195,10 @@ class hashtable_impl
static const_local_iterator s_local_iterator_to(const_reference value)
{
BOOST_STATIC_ASSERT((!stateful_value_traits));
- siterator sit = bucket_type::s_iterator_to(((hashtable_impl*)0)->priv_value_to_node(const_cast<value_type&>(value)));
- return const_local_iterator(sit, (hashtable_impl*)0);
+ node_reference r = *pointer_traits<node_ptr>::const_cast_from
+ (value_traits::to_node_ptr(value));
+ siterator sit = bucket_type::s_iterator_to(r);
+ return const_local_iterator(sit, const_value_traits_ptr());
}
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
@@ -1874,7 +2213,7 @@ class hashtable_impl
local_iterator local_iterator_to(reference value)
{
siterator sit = bucket_type::s_iterator_to(this->priv_value_to_node(value));
- return local_iterator(sit, this);
+ return local_iterator(sit, this->priv_value_traits_ptr());
}
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
@@ -1888,9 +2227,10 @@ class hashtable_impl
//! <b>Throws</b>: Nothing.
const_local_iterator local_iterator_to(const_reference value) const
{
- siterator sit = bucket_type::s_iterator_to
- (const_cast<node &>(this->priv_value_to_node(value)));
- return const_local_iterator(sit, this);
+ node_reference r = *pointer_traits<node_ptr>::const_cast_from
+ (pointer_traits<const_node_ptr>::pointer_to(this->priv_value_to_node(value)));
+ siterator sit = bucket_type::s_iterator_to(r);
+ return const_local_iterator(sit, this->priv_value_traits_ptr());
}
//! <b>Effects</b>: Returns the number of buckets passed in the constructor
@@ -1960,7 +2300,7 @@ class hashtable_impl
//! <b>Note</b>: [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_bucket_pointer()[n].begin(), this); }
+ { return local_iterator(this->priv_bucket_pointer()[n].begin(), this->priv_value_traits_ptr()); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -1989,8 +2329,8 @@ class hashtable_impl
//! containing all of the elements in the nth bucket.
const_local_iterator cbegin(size_type n) const
{
- siterator sit = const_cast<bucket_type&>(this->priv_bucket_pointer()[n]).begin();
- return const_local_iterator(sit, this);
+ bucket_reference br = pointer_traits<bucket_ptr>::const_cast_from(this->priv_bucket_pointer())[n];
+ return const_local_iterator(br.begin(), this->priv_value_traits_ptr());
}
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
@@ -2005,7 +2345,7 @@ class hashtable_impl
//! <b>Note</b>: [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_bucket_pointer()[n].end(), this); }
+ { return local_iterator(this->priv_bucket_pointer()[n].end(), this->priv_value_traits_ptr()); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -2033,7 +2373,10 @@ class hashtable_impl
//! <b>Note</b>: [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<bucket_type&>(this->priv_bucket_pointer()[n]).end(), this); }
+ {
+ bucket_reference br = pointer_traits<bucket_ptr>::const_cast_from(this->priv_bucket_pointer())[n];
+ return const_local_iterator ( br.end(), this->priv_value_traits_ptr());
+ }
//! <b>Requires</b>: 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
@@ -2107,12 +2450,12 @@ class hashtable_impl
for(;i != end_sit; ++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 = this->priv_hash_to_bucket(hash_value, new_bucket_count, new_bucket_count);
+ const size_type new_n = detail::hash_to_bucket_split<power_2_buckets, incremental>(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
- (hashtable_impl::dcast_bucket_ptr(i.pointed_node()), optimize_multikey_t()));
+ (detail::dcast_bucket_ptr<node>(i.pointed_node()), optimize_multikey_t()));
if(same_buffer && new_n == n){
before_i = last;
}
@@ -2124,7 +2467,7 @@ class hashtable_impl
}
}
else{
- const size_type new_n = this->priv_hash_to_bucket(n, new_bucket_count, new_bucket_count);
+ const size_type new_n = detail::hash_to_bucket_split<power_2_buckets, incremental>(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];
@@ -2139,7 +2482,7 @@ class hashtable_impl
this->priv_size_traits().set_size(size_backup);
this->priv_split_traits().set_size(new_bucket_count);
- this->priv_real_bucket_traits() = new_bucket_traits;
+ this->priv_bucket_traits() = new_bucket_traits;
this->priv_initialize_cache();
this->priv_insertion_update_cache(new_first_bucket_num);
rollback1.release();
@@ -2186,7 +2529,7 @@ class hashtable_impl
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
- (hashtable_impl::dcast_bucket_ptr(i.pointed_node()), optimize_multikey_t()));
+ (detail::dcast_bucket_ptr<node>(i.pointed_node()), optimize_multikey_t()));
if(new_n == bucket_to_rehash){
before_i = last;
}
@@ -2252,7 +2595,7 @@ class hashtable_impl
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;
+ this->priv_bucket_traits() = new_bucket_traits;
if(new_bucket_traits.bucket_begin() != old_buckets){
for(size_type n = ini_n; n < split_idx; ++n){
bucket_type &new_bucket = new_bucket_traits.bucket_begin()[n];
@@ -2294,8 +2637,7 @@ class hashtable_impl
const std::size_t *primes = &detail::prime_list_holder<0>::prime_list[0];
const std::size_t *primes_end = primes + detail::prime_list_holder<0>::prime_list_size;
std::size_t const* bound = std::lower_bound(primes, primes_end, n);
- if(bound == primes_end)
- --bound;
+ bound -= (bound == primes_end);
return size_type(*bound);
}
@@ -2313,103 +2655,116 @@ class hashtable_impl
const std::size_t *primes = &detail::prime_list_holder<0>::prime_list[0];
const std::size_t *primes_end = primes + detail::prime_list_holder<0>::prime_list_size;
size_type const* bound = std::upper_bound(primes, primes_end, n);
- if(bound != primes)
- --bound;
+ bound -= (bound != primes);
return size_type(*bound);
}
-
/// @cond
private:
+ size_traits &priv_size_traits()
+ { return static_cast<size_traits&>(static_cast<data_type&>(*this)); }
- std::size_t priv_hash_to_bucket(std::size_t hash_value) const
- { return this->priv_hash_to_bucket(hash_value, this->priv_real_bucket_traits().bucket_count(), this->priv_split_traits().get_size()); }
+ const size_traits &priv_size_traits() const
+ { return static_cast<const size_traits&>(static_cast<const data_type&>(*this)); }
- std::size_t priv_hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, std::size_t split) const
- {
- std::size_t bucket_number = hashtable_impl::priv_hash_to_bucket_impl(hash_value, bucket_cnt, power_2_buckets_t());
- if(incremental)
- if(bucket_number >= split)
- bucket_number -= bucket_cnt/2;
- return bucket_number;
- }
+ bucket_ptr priv_bucket_pointer() const
+ { return this->data_type::internal.internal.internal.internal.priv_bucket_pointer(); }
- static std::size_t priv_hash_to_bucket_impl(std::size_t hash_value, std::size_t bucket_cnt, detail::false_)
- { return hash_value % bucket_cnt; }
+ SizeType priv_bucket_count() const
+ { return this->data_type::internal.internal.internal.internal.priv_bucket_count(); }
- static std::size_t priv_hash_to_bucket_impl(std::size_t hash_value, std::size_t bucket_cnt, detail::true_)
- { return hash_value & (bucket_cnt - 1); }
+ const bucket_plus_vtraits<ValueTraits, BucketTraits> &get_bucket_value_traits() const
+ { return this->data_type::internal.internal.internal.internal.get_bucket_value_traits(); }
- const key_equal &priv_equal() const
- { return static_cast<const key_equal&>(this->data_.internal_.bucket_hash_equal_.get()); }
+ bucket_plus_vtraits<ValueTraits, BucketTraits> &get_bucket_value_traits()
+ { return this->data_type::internal.internal.internal.internal.get_bucket_value_traits(); }
- key_equal &priv_equal()
- { return static_cast<key_equal&>(this->data_.internal_.bucket_hash_equal_.get()); }
+ bucket_traits &priv_bucket_traits()
+ { return this->data_type::internal.internal.internal.internal.priv_bucket_traits(); }
- const value_traits &priv_value_traits() const
- { return data_; }
+ const bucket_traits &priv_bucket_traits() const
+ { return this->data_type::internal.internal.internal.internal.priv_bucket_traits(); }
value_traits &priv_value_traits()
- { return data_; }
-
- value_type &priv_value_from_slist_node(slist_node_ptr n)
- { return *this->get_real_value_traits().to_value_ptr(hashtable_impl::dcast_bucket_ptr(n)); }
+ { return this->data_type::internal.internal.internal.internal.priv_value_traits(); }
- const value_type &priv_value_from_slist_node(slist_node_ptr n) const
- { return *this->get_real_value_traits().to_value_ptr(hashtable_impl::dcast_bucket_ptr(n)); }
+ const value_traits &priv_value_traits() const
+ { return this->data_type::internal.internal.internal.internal.priv_value_traits(); }
- 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_; }
+ const_value_traits_ptr priv_value_traits_ptr() const
+ { return this->data_type::internal.internal.internal.internal.priv_value_traits_ptr(); }
- const real_bucket_traits &priv_real_bucket_traits(detail::true_) const
- { return this->data_.internal_.bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_.get_bucket_traits(*this); }
+ siterator priv_invalid_local_it() const
+ { return this->data_type::internal.internal.internal.internal.priv_invalid_local_it(); }
+
+ split_traits &priv_split_traits()
+ { return this->data_type::internal.priv_split_traits(); }
- real_bucket_traits &priv_real_bucket_traits(detail::false_)
- { return this->data_.internal_.bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_; }
+ const split_traits &priv_split_traits() const
+ { return this->data_type::internal.priv_split_traits(); }
- real_bucket_traits &priv_real_bucket_traits(detail::true_)
- { return this->data_.internal_.bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_.get_bucket_traits(*this); }
+ bucket_ptr priv_get_cache()
+ { return this->data_type::internal.internal.priv_get_cache(); }
- const real_bucket_traits &priv_real_bucket_traits() const
- { return this->priv_real_bucket_traits(detail::bool_<external_bucket_traits>()); }
+ void priv_initialize_cache()
+ { return this->data_type::internal.internal.priv_initialize_cache(); }
- real_bucket_traits &priv_real_bucket_traits()
- { return this->priv_real_bucket_traits(detail::bool_<external_bucket_traits>()); }
+ siterator priv_begin() const
+ { return this->data_type::internal.internal.priv_begin(); }
- const bucket_traits &priv_bucket_traits() const
- { return this->data_.internal_.bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_; }
+ const value_equal &priv_equal() const
+ { return this->data_type::internal.internal.priv_equal(); }
- bucket_traits &priv_bucket_traits()
- { return this->data_.internal_.bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_; }
+ value_equal &priv_equal()
+ { return this->data_type::internal.internal.priv_equal(); }
const hasher &priv_hasher() const
- { return static_cast<const hasher&>(this->data_.internal_.bucket_hash_equal_.bucket_hash.get()); }
+ { return this->data_type::internal.internal.internal.priv_hasher(); }
hasher &priv_hasher()
- { return static_cast<hasher&>(this->data_.internal_.bucket_hash_equal_.bucket_hash.get()); }
-
- bucket_ptr priv_bucket_pointer() const
- { return this->priv_real_bucket_traits().bucket_begin(); }
+ { return this->data_type::internal.internal.internal.priv_hasher(); }
- size_type priv_bucket_count() const
- { return this->priv_real_bucket_traits().bucket_count(); }
+ void priv_swap_cache(hashtable_impl &h)
+ { this->data_type::internal.internal.priv_swap_cache(h.data_type::internal.internal); }
node &priv_value_to_node(value_type &v)
- { return *this->get_real_value_traits().to_node_ptr(v); }
+ { return this->data_type::internal.internal.internal.internal.priv_value_to_node(v); }
const node &priv_value_to_node(const value_type &v) const
- { return *this->get_real_value_traits().to_node_ptr(v); }
+ { return this->data_type::internal.internal.internal.internal.priv_value_to_node(v); }
- size_traits &priv_size_traits()
- { return this->data_.internal_.bucket_hash_equal_.bucket_hash.bucket_plus_size_; }
+ SizeType priv_get_cache_bucket_num()
+ { return this->data_type::internal.internal.priv_get_cache_bucket_num(); }
- const size_traits &priv_size_traits() const
- { return this->data_.internal_.bucket_hash_equal_.bucket_hash.bucket_plus_size_; }
+ void priv_insertion_update_cache(SizeType n)
+ { return this->data_type::internal.internal.priv_insertion_update_cache(n); }
- split_traits &priv_split_traits()
- { return this->data_.internal_; }
+ template<bool Boolean>
+ std::size_t priv_stored_or_compute_hash(const value_type &v, detail::bool_<Boolean> b) const
+ { return this->data_type::internal.internal.internal.priv_stored_or_compute_hash(v, b); }
- const split_traits &priv_split_traits() const
- { return this->data_.internal_; }
+ value_type &priv_value_from_slist_node(slist_node_ptr n)
+ { return this->data_type::internal.internal.internal.internal.priv_value_from_slist_node(n); }
+
+ const value_type &priv_value_from_slist_node(slist_node_ptr n) const
+ { return this->data_type::internal.internal.internal.internal.priv_value_from_slist_node(n); }
+
+ void priv_erasure_update_cache_range(SizeType first_bucket_num, SizeType last_bucket_num)
+ { return this->data_type::internal.internal.priv_erasure_update_cache_range(first_bucket_num, last_bucket_num); }
+
+ void priv_erasure_update_cache()
+ { return this->data_type::internal.internal.priv_erasure_update_cache(); }
+
+ static std::size_t priv_stored_hash(slist_node_ptr n, detail::true_ true_value)
+ { return bucket_plus_vtraits<ValueTraits, BucketTraits>::priv_stored_hash(n, true_value); }
+
+ static std::size_t priv_stored_hash(slist_node_ptr n, detail::false_ false_value)
+ { return bucket_plus_vtraits<ValueTraits, BucketTraits>::priv_stored_hash(n, false_value); }
+
+ std::size_t priv_hash_to_bucket(std::size_t hash_value) const
+ {
+ return detail::hash_to_bucket_split<power_2_buckets, incremental>
+ (hash_value, this->priv_bucket_traits().bucket_count(), this->priv_split_traits().get_size());
+ }
template<class Disposer>
void priv_erase_range_impl
@@ -2427,7 +2782,7 @@ class hashtable_impl
++to_erase;
slist_node_ptr end_ptr = end_sit.pointed_node();
while(to_erase != end_sit){
- group_functions_t::erase_from_group(end_ptr, hashtable_impl::dcast_bucket_ptr(to_erase.pointed_node()), optimize_multikey_t());
+ group_functions_t::erase_from_group(end_ptr, detail::dcast_bucket_ptr<node>(to_erase.pointed_node()), optimize_multikey_t());
to_erase = b.erase_after_and_dispose(before_first_it, make_node_disposer(disposer));
++num_erased;
}
@@ -2449,7 +2804,7 @@ class hashtable_impl
++nxt;
siterator end_sit(b.end());
while(nxt != end_sit){
- group_functions_t::init_group(hashtable_impl::dcast_bucket_ptr(nxt.pointed_node()), optimize_multikey_t());
+ group_functions_t::init_group(detail::dcast_bucket_ptr<node>(nxt.pointed_node()), optimize_multikey_t());
nxt = b.erase_after_and_dispose
(b_begin, make_node_disposer(disposer));
this->priv_size_traits().decrement();
@@ -2476,125 +2831,23 @@ class hashtable_impl
}
}
- static node_ptr dcast_bucket_ptr(typename slist_impl::node_ptr p)
- { return pointer_traits<node_ptr>::pointer_to(static_cast<node&>(*p)); }
-
- std::size_t priv_stored_or_compute_hash(const value_type &v, detail::true_) const
- { 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 this->priv_hasher()(v); }
-
- std::size_t priv_stored_hash(slist_node_ptr n, detail::true_) const
- { return node_traits::get_hash(hashtable_impl::dcast_bucket_ptr(n)); }
-
- std::size_t priv_stored_hash(slist_node_ptr, detail::false_) const
- {
- //This code should never be reached!
- BOOST_INTRUSIVE_INVARIANT_ASSERT(0);
- return 0;
- }
-
- static void priv_clear_group_nodes(bucket_type &b, detail::true_)
- {
- siterator it(b.begin()), itend(b.end());
- while(it != itend){
- node_ptr to_erase(hashtable_impl::dcast_bucket_ptr(it.pointed_node()));
- ++it;
- group_algorithms::init(to_erase);
- }
- }
-
- static void priv_clear_group_nodes(bucket_type &, detail::false_)
- {}
-
std::size_t priv_get_bucket_num(siterator it)
{ 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_)
+ std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::true_) //store_hash
{
return this->priv_hash_to_bucket
(this->priv_stored_hash(it.pointed_node(), store_hash_t()));
}
- std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::false_)
- { 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_)
- {
- 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()
- , hashtable_impl::dcast_bucket_ptr(it.pointed_node()));
- //Now get the bucket_impl from the iterator
- const bucket_type &b = static_cast<const bucket_type&>
- (bucket_type::slist_type::container_from_end_iterator(bucket_type::s_iterator_to(*bb)));
- //Now just calculate the index b has in the bucket array
- return static_cast<size_type>(&b - &*f);
- }
-
- std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::false_)
- {
- 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());
-
- //The end node is embedded in the singly linked list:
- //iterate until we reach it.
- while(!(first_ptr <= it.pointed_node() && it.pointed_node() <= last_ptr)){
- ++it;
- }
- //Now get the bucket_impl from the iterator
- const bucket_type &b = static_cast<const bucket_type&>
- (bucket_type::container_from_end_iterator(it));
-
- //Now just calculate the index b has in the bucket array
- return static_cast<std::size_t>(&b - &*f);
- }
-
- siterator priv_get_previous
- (bucket_type &b, siterator i)
- { return this->priv_get_previous(b, i, optimize_multikey_t()); }
-
- siterator priv_get_previous
- (bucket_type &b, siterator i, detail::true_)
- {
- 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
- ? *group_functions_t::get_prev_to_first_in_group(b.end().pointed_node(), elem)
- : *group_traits::get_next(elem)
- ;
- return bucket_type::s_iterator_to(n);
- }
+ std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::false_) //NO store_hash
+ { return this->data_type::internal.internal.internal.internal.priv_get_bucket_num_no_hash_store(it, optimize_multikey_t()); }
- siterator priv_get_previous
- (bucket_type &b, siterator i, detail::false_)
- { return b.previous(i); }
+ static siterator priv_get_previous(bucket_type &b, siterator i)
+ { return bucket_plus_vtraits_t::priv_get_previous(b, i, optimize_multikey_t()); }
static siterator priv_get_last(bucket_type &b)
- { return hashtable_impl::priv_get_last(b, optimize_multikey_t()); }
-
- static siterator priv_get_last(bucket_type &b, detail::true_)
- {
- //First find the last node of p's group.
- //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( 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(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);
- }
-
- static siterator priv_get_last(bucket_type &b, detail::false_)
- { return b.previous(b.end()); }
+ { return bucket_plus_vtraits_t::priv_get_last(b, optimize_multikey_t()); }
template<class Disposer>
void priv_erase(const_iterator i, Disposer disposer, detail::true_)
@@ -2621,7 +2874,7 @@ class hashtable_impl
if(nxt_in_group)
group_algorithms::unlink_after(nxt_in_group);
if(safemode_or_autounlink)
- group_algorithms::init(hashtable_impl::dcast_bucket_ptr(elem));
+ group_algorithms::init(detail::dcast_bucket_ptr<node>(elem));
}
template <class Disposer>
@@ -2633,159 +2886,6 @@ class hashtable_impl
b.erase_after_and_dispose(prev, make_node_disposer(disposer));
}
- bucket_ptr priv_invalid_bucket() const
- {
- const real_bucket_traits &rbt = this->priv_real_bucket_traits();
- return rbt.bucket_begin() + rbt.bucket_count();
- }
-
- siterator priv_invalid_local_it() const
- { return this->priv_invalid_bucket()->end(); }
-
- siterator priv_begin() const
- { return this->priv_begin(cache_begin_t()); }
-
- siterator priv_begin(detail::false_) const
- {
- size_type n = 0;
- size_type bucket_cnt = this->priv_bucket_count();
- for (n = 0; n < bucket_cnt; ++n){
- bucket_type &b = this->priv_bucket_pointer()[n];
- if(!b.empty()){
- return b.begin();
- }
- }
- return this->priv_invalid_local_it();
- }
-
- siterator priv_begin(detail::true_) const
- {
- 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();
- }
- }
-
- void priv_initialize_cache()
- { this->priv_initialize_cache(cache_begin_t()); }
-
- void priv_initialize_cache(detail::true_)
- { 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)
- { this->priv_insertion_update_cache(insertion_bucket, cache_begin_t()); }
-
- void priv_insertion_update_cache(size_type insertion_bucket, detail::true_)
- {
- 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;
- }
- }
-
- void priv_insertion_update_cache(size_type, detail::false_)
- {}
-
- void priv_erasure_update_cache(size_type first_bucket, size_type last_bucket)
- { 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(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();
- }
- }
-
- void priv_erasure_update_cache(size_type, size_type, detail::false_)
- {}
-
- void priv_erasure_update_cache()
- { this->priv_erasure_update_cache(cache_begin_t()); }
-
- void priv_erasure_update_cache(detail::true_)
- {
- if(constant_time_size && !size()){
- this->priv_initialize_cache();
- }
- else{
- 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;
- }
- }
- this->priv_initialize_cache();
- }
- }
-
- void priv_erasure_update_cache(detail::false_)
- {}
-
- void priv_swap_cache(detail::true_, hashtable_impl &other)
- {
- std::swap( this->data_.internal_.bucket_hash_equal_.cached_begin_
- , other.data_.internal_.bucket_hash_equal_.cached_begin_);
- }
-
- void priv_swap_cache(detail::false_, hashtable_impl &)
- {}
-
- bucket_ptr priv_get_cache()
- { 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_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 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_bucket_pointer(); }
-
- size_type priv_get_cache_bucket_num(detail::false_)
- { return 0u; }
-
- void priv_clear_buckets()
- {
- this->priv_clear_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(this->priv_bucket_pointer(), this->priv_bucket_count()); }
-
- void priv_clear_buckets(bucket_ptr buckets_ptr, size_type bucket_cnt)
- {
- for(; bucket_cnt--; ++buckets_ptr){
- if(safemode_or_autounlink){
- hashtable_impl::priv_clear_group_nodes(*buckets_ptr, optimize_multikey_t());
- buckets_ptr->clear_and_dispose(detail::init_disposer<node_algorithms>());
- }
- else{
- buckets_ptr->clear();
- }
- }
- this->priv_initialize_cache();
- }
-
template<class KeyType, class KeyHasher, class KeyValueEqual>
siterator priv_find
( const KeyType &key, KeyHasher hash_func
@@ -2823,7 +2923,7 @@ class hashtable_impl
if(optimize_multikey){
previt = bucket_type::s_iterator_to
(*group_functions_t::get_last_in_group
- (hashtable_impl::dcast_bucket_ptr(it.pointed_node()), optimize_multikey_t()));
+ (detail::dcast_bucket_ptr<node>(it.pointed_node()), optimize_multikey_t()));
it = previt;
}
else{
@@ -2857,17 +2957,17 @@ class hashtable_impl
//Checks for some modes
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(n));
- //Shorcut for optimize_multikey cases
+ //Shortcut for optimize_multikey cases
if(optimize_multikey){
node_ptr first_in_group = found_equal ?
- hashtable_impl::dcast_bucket_ptr(it.pointed_node()) : node_ptr();
+ detail::dcast_bucket_ptr<node>(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
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);
+ return iterator(b.insert_after(it, *n), &this->get_bucket_value_traits());
}
template<class KeyType, class KeyHasher, class KeyValueEqual>
@@ -2898,7 +2998,7 @@ class hashtable_impl
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())));
+ (detail::dcast_bucket_ptr<node>(it.pointed_node()), optimize_multikey_t())));
cnt = std::distance(it, to_return.second);
if(to_return.second != b.end()){
bucket_number_second = bucket_number_first;
@@ -2951,44 +3051,23 @@ class hashtable_impl
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template < class T
, bool UniqueKeys
- , class O1 = none, class O2 = none
- , class O3 = none, class O4 = none
- , class O5 = none, class O6 = none
- , class O7 = none, class O8 = none
- , class O9 = none, class O10= none
+ , class PackedOptions
>
#else
template <class T, bool UniqueKeys, class ...Options>
#endif
-struct make_hashtable_opt
+struct make_bucket_traits
{
- typedef typename pack_options
- < uset_defaults<T>,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4, O5, O6, O7, O8, O9, O10
- #else
- Options...
- #endif
- >::type packed_options;
-
//Real value traits must be calculated from options
typedef typename detail::get_value_traits
- <T, typename packed_options::value_traits>::type value_traits;
- static const bool external_value_traits =
- detail::external_value_traits_bool_is_true<value_traits>::value;/*
- static const bool resizable_bucket_traits =
- detail::resizable_bool_is_true<bucket_traits_traits>::value;*/
- typedef typename detail::eval_if_c
- < external_value_traits
- , detail::eval_value_traits<value_traits>
- , detail::identity<value_traits>
- >::type real_value_traits;
- typedef typename packed_options::bucket_traits specified_bucket_traits;
+ <T, typename PackedOptions::proto_value_traits>::type value_traits;
+
+ typedef typename PackedOptions::bucket_traits specified_bucket_traits;
//Real bucket traits must be calculated from options and calculated value_traits
typedef typename detail::get_slist_impl
<typename detail::reduced_slist_node_traits
- <typename real_value_traits::node_traits>::type
+ <typename value_traits::node_traits>::type
>::type slist_impl;
typedef typename
@@ -2998,21 +3077,7 @@ struct make_hashtable_opt
>::value
, detail::bucket_traits_impl<slist_impl>
, specified_bucket_traits
- >::type real_bucket_traits;
-
- typedef detail::usetopt
- < value_traits
- , typename packed_options::hash
- , typename packed_options::equal
- , typename packed_options::size_type
- , real_bucket_traits
- , (std::size_t(UniqueKeys)*detail::hash_bool_flags::unique_keys_pos)
- | (std::size_t(packed_options::constant_time_size)*detail::hash_bool_flags::constant_time_size_pos)
- | (std::size_t(packed_options::power_2_buckets)*detail::hash_bool_flags::power_2_buckets_pos)
- | (std::size_t(packed_options::cache_begin)*detail::hash_bool_flags::cache_begin_pos)
- | (std::size_t(packed_options::compare_hash)*detail::hash_bool_flags::compare_hash_pos)
- | (std::size_t(packed_options::incremental)*detail::hash_bool_flags::incremental_pos)
- > type;
+ >::type type;
};
/// @endcond
@@ -3021,25 +3086,43 @@ struct make_hashtable_opt
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none
- , class O5 = none, class O6 = none
- , class O7 = none, class O8 = none
- , class O9 = none, class O10= none
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void, class O6 = void
+ , class O7 = void, class O8 = void
+ , class O9 = void, class O10= void
>
#endif
struct make_hashtable
{
/// @cond
+ typedef typename pack_options
+ < hashtable_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5, O6, O7, O8, O9, O10
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+
+ typedef typename make_bucket_traits
+ <T, false, packed_options>::type bucket_traits;
+
typedef hashtable_impl
- < typename make_hashtable_opt
- <T, false,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4, O5, O6, O7, O8, O9, O10
- #else
- Options...
- #endif
- >::type
+ < value_traits
+ , typename packed_options::hash
+ , typename packed_options::equal
+ , typename packed_options::size_type
+ , bucket_traits
+ , (std::size_t(false)*hash_bool_flags::unique_keys_pos)
+ | (std::size_t(packed_options::constant_time_size)*hash_bool_flags::constant_time_size_pos)
+ | (std::size_t(packed_options::power_2_buckets)*hash_bool_flags::power_2_buckets_pos)
+ | (std::size_t(packed_options::cache_begin)*hash_bool_flags::cache_begin_pos)
+ | (std::size_t(packed_options::compare_hash)*hash_bool_flags::compare_hash_pos)
+ | (std::size_t(packed_options::incremental)*hash_bool_flags::incremental_pos)
> implementation_defined;
/// @endcond
@@ -3073,7 +3156,6 @@ class hashtable
public:
typedef typename Base::value_traits value_traits;
- typedef typename Base::real_value_traits real_value_traits;
typedef typename Base::iterator iterator;
typedef typename Base::const_iterator const_iterator;
typedef typename Base::bucket_ptr bucket_ptr;
@@ -3083,9 +3165,9 @@ class hashtable
typedef typename Base::key_equal key_equal;
//Assert if passed value traits are compatible with the type
- BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- hashtable ( const bucket_traits &b_traits
+ explicit hashtable ( const bucket_traits &b_traits
, const hasher & hash_func = hasher()
, const key_equal &equal_func = key_equal()
, const value_traits &v_traits = value_traits())
@@ -3097,7 +3179,7 @@ class hashtable
{}
hashtable& operator=(BOOST_RV_REF(hashtable) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<hashtable&>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
};
#endif
diff --git a/3party/boost/boost/intrusive/intrusive_fwd.hpp b/3party/boost/boost/intrusive/intrusive_fwd.hpp
index c95767ef35..b988ae5819 100644
--- a/3party/boost/boost/intrusive/intrusive_fwd.hpp
+++ b/3party/boost/boost/intrusive/intrusive_fwd.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,21 +13,47 @@
#ifndef BOOST_INTRUSIVE_FWD_HPP
#define BOOST_INTRUSIVE_FWD_HPP
+//! \file
+//! This header file forward declares most Intrusive classes.
+//!
+//! It forward declares the following containers and hooks:
+//! - boost::intrusive::slist / boost::intrusive::slist_base_hook / boost::intrusive::slist_member_hook
+//! - boost::intrusive::list / boost::intrusive::list_base_hook / boost::intrusive::list_member_hook
+//! - boost::intrusive::bstree / boost::intrusive::bs_set / boost::intrusive::bs_multiset /
+//! boost::intrusive::bs_set_base_hook / boost::intrusive::bs_set_member_hook
+//! - boost::intrusive::rbtree / boost::intrusive::set / boost::intrusive::multiset /
+//! boost::intrusive::set_base_hook / boost::intrusive::set_member_hook
+//! - boost::intrusive::avltree / boost::intrusive::avl_set / boost::intrusive::avl_multiset /
+//! boost::intrusive::avl_set_base_hook / boost::intrusive::avl_set_member_hook
+//! - boost::intrusive::splaytree / boost::intrusive::splay_set / boost::intrusive::splay_multiset
+//! - boost::intrusive::sgtree / boost::intrusive::sg_set / boost::intrusive::sg_multiset
+//! - boost::intrusive::treap / boost::intrusive::treap_set / boost::intrusive::treap_multiset
+//! - boost::intrusive::hashtable / boost::intrusive::unordered_set / boost::intrusive::unordered_multiset /
+//! boost::intrusive::unordered_set_base_hook / boost::intrusive::unordered_set_member_hook /
+//! - boost::intrusive::any_base_hook / boost::intrusive::any_member_hook
+//!
+//! It forward declares the following container or hook options:
+//! - boost::intrusive::constant_time_size / boost::intrusive::size_type / boost::intrusive::compare / boost::intrusive::equal
+//! - boost::intrusive::floating_point / boost::intrusive::priority / boost::intrusive::hash
+//! - boost::intrusive::value_traits / boost::intrusive::member_hook / boost::intrusive::function_hook / boost::intrusive::base_hook
+//! - boost::intrusive::void_pointer / boost::intrusive::tag / boost::intrusive::link_mode
+//! - boost::intrusive::optimize_size / boost::intrusive::linear / boost::intrusive::cache_last
+//! - boost::intrusive::bucket_traits / boost::intrusive::store_hash / boost::intrusive::optimize_multikey
+//! - boost::intrusive::power_2_buckets / boost::intrusive::cache_begin / boost::intrusive::compare_hash / boost::intrusive::incremental
+//!
+//! It forward declares the following value traits utilities:
+//! - boost::intrusive::value_traits / boost::intrusive::derivation_value_traits /
+//! boost::intrusive::trivial_value_traits
+//!
+//! Finally it forward declares the following general purpose utilities:
+//! - boost::intrusive::pointer_plus_bits / boost::intrusive::priority_compare.
+
+#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
#include <cstddef>
#include <boost/intrusive/link_mode.hpp>
#include <boost/intrusive/detail/workaround.hpp>
-/// @cond
-
-namespace boost {
-
-namespace intrusive {
-
-struct none;
-
-} //namespace intrusive{
-} //namespace boost{
-
namespace boost {
namespace intrusive {
@@ -43,43 +69,62 @@ template<class NodeTraits>
class circular_slist_algorithms;
template<class NodeTraits>
+class linear_slist_algorithms;
+
+template<class NodeTraits>
+class bstree_algorithms;
+
+template<class NodeTraits>
class rbtree_algorithms;
+template<class NodeTraits>
+class avltree_algorithms;
+
+template<class NodeTraits>
+class sgtree_algorithms;
+
+template<class NodeTraits>
+class splaytree_algorithms;
+
+template<class NodeTraits>
+class treap_algorithms;
+
////////////////////////////
// Containers
////////////////////////////
//slist
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
- , class O5 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
+ , class O6 = void
>
#else
template<class T, class ...Options>
#endif
class slist;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
>
#else
template<class ...Options>
#endif
class slist_base_hook;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
>
#else
template<class ...Options>
@@ -87,109 +132,102 @@ template<class ...Options>
class slist_member_hook;
//list
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
>
#else
template<class T, class ...Options>
#endif
class list;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
>
#else
template<class ...Options>
#endif
class list_base_hook;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
>
#else
template<class ...Options>
#endif
class list_member_hook;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template
- < class O1 = none
- , class O2 = none
- , class O3 = none
- >
-#else
-template<class ...Options>
-#endif
-class list_hook;
-
//rbtree/set/multiset
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class rbtree;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class set;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class multiset;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
>
#else
template<class ...Options>
#endif
class set_base_hook;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
>
#else
template<class ...Options>
@@ -197,125 +235,109 @@ template<class ...Options>
class set_member_hook;
//splaytree/splay_set/splay_multiset
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class splaytree;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class splay_set;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class splay_multiset;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template
- < class O1 = none
- , class O2 = none
- , class O3 = none
- >
-#else
-template<class ...Options>
-#endif
-class splay_set_base_hook;
-
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template
- < class O1 = none
- , class O2 = none
- , class O3 = none
- >
-#else
-template<class ...Options>
-#endif
-class splay_set_member_hook;
-
//avltree/avl_set/avl_multiset
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class avltree;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class avl_set;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class avl_multiset;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
>
#else
template<class ...Options>
#endif
class avl_set_base_hook;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
>
#else
template<class ...Options>
@@ -324,105 +346,149 @@ class avl_set_member_hook;
//treap/treap_set/treap_multiset
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class treap;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class treap_set;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class treap_multiset;
-//Default priority comparison functor
-template <class T>
-struct priority_compare;
-
//sgtree/sg_set/sg_multiset
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class sgtree;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class sg_set;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
>
#else
template<class T, class ...Options>
#endif
class sg_multiset;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+template
+ < class T
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
+ >
+#else
+template<class T, class ...Options>
+#endif
+class bstree;
+
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
+ < class T
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
+ >
+#else
+template<class T, class ...Options>
+#endif
+class bs_set;
+
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+template
+ < class T
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
+ >
+#else
+template<class T, class ...Options>
+#endif
+class bs_multiset;
+
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+template
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
>
#else
template<class ...Options>
#endif
class bs_set_base_hook;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
>
#else
template<class ...Options>
@@ -431,112 +497,229 @@ class bs_set_member_hook;
//hashtable/unordered_set/unordered_multiset
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
- , class O5 = none
- , class O6 = none
- , class O7 = none
- , class O8 = none
- , class O9 = none
- , class O10 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
+ , class O6 = void
+ , class O7 = void
+ , class O8 = void
+ , class O9 = void
+ , class O10 = void
>
#else
template<class T, class ...Options>
#endif
class hashtable;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
- , class O5 = none
- , class O6 = none
- , class O7 = none
- , class O8 = none
- , class O9 = none
- , class O10 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
+ , class O6 = void
+ , class O7 = void
+ , class O8 = void
+ , class O9 = void
+ , class O10 = void
>
#else
template<class T, class ...Options>
#endif
class unordered_set;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
< class T
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
- , class O5 = none
- , class O6 = none
- , class O7 = none
- , class O8 = none
- , class O9 = none
- , class O10 = none
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
+ , class O6 = void
+ , class O7 = void
+ , class O8 = void
+ , class O9 = void
+ , class O10 = void
>
#else
template<class T, class ...Options>
#endif
class unordered_multiset;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
>
#else
template<class ...Options>
#endif
class unordered_set_base_hook;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
>
#else
template<class ...Options>
#endif
class unordered_set_member_hook;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
>
#else
template<class ...Options>
#endif
class any_base_hook;
-#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template
- < class O1 = none
- , class O2 = none
- , class O3 = none
+ < class O1 = void
+ , class O2 = void
+ , class O3 = void
>
#else
template<class ...Options>
#endif
class any_member_hook;
+//Options
+
+template<bool Enabled>
+struct constant_time_size;
+
+template<typename SizeType>
+struct size_type;
+
+template<typename Compare>
+struct compare;
+
+template<bool Enabled>
+struct floating_point;
+
+template<typename Equal>
+struct equal;
+
+template<typename Priority>
+struct priority;
+
+template<typename Hash>
+struct hash;
+
+template<typename ValueTraits> struct value_traits;
+
+template< typename Parent
+ , typename MemberHook
+ , MemberHook Parent::* PtrToMember>
+struct member_hook;
+
+template<typename Functor>
+struct function_hook;
+
+template<typename BaseHook>
+struct base_hook;
+
+template<typename VoidPointer>
+struct void_pointer;
+
+template<typename Tag>
+struct tag;
+
+template<link_mode_type LinkType>
+struct link_mode;
+
+template<bool Enabled> struct
+optimize_size;
+
+template<bool Enabled>
+struct linear;
+
+template<bool Enabled>
+struct cache_last;
+
+template<typename BucketTraits>
+struct bucket_traits;
+
+template<bool Enabled>
+struct store_hash;
+
+template<bool Enabled>
+struct optimize_multikey;
+
+template<bool Enabled>
+struct power_2_buckets;
+
+template<bool Enabled>
+struct cache_begin;
+
+template<bool Enabled>
+struct compare_hash;
+
+template<bool Enabled>
+struct incremental;
+
+//Value traits
+
+template<typename ValueTraits>
+struct value_traits;
+
+template< typename Parent
+ , typename MemberHook
+ , MemberHook Parent::* PtrToMember>
+struct member_hook;
+
+template< typename Functor>
+struct function_hook;
+
+template<typename BaseHook>
+struct base_hook;
+
+template<class T, class NodeTraits, link_mode_type LinkMode = safe_link>
+struct derivation_value_traits;
+
+template<class NodeTraits, link_mode_type LinkMode = normal_link>
+struct trivial_value_traits;
+
+//Additional utilities
+
+template<typename VoidPointer, std::size_t Alignment>
+struct max_pointer_plus_bits;
+
+template<std::size_t Alignment>
+struct max_pointer_plus_bits<void *, Alignment>;
+
+template<typename Pointer, std::size_t NumBits>
+struct pointer_plus_bits;
+
+template<typename T, std::size_t NumBits>
+struct pointer_plus_bits<T *, NumBits>;
+
+template<typename Ptr>
+struct pointer_traits;
+
+template<typename T>
+struct pointer_traits<T *>;
+
} //namespace intrusive {
} //namespace boost {
-/// @endcond
+#endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
#endif //#ifndef BOOST_INTRUSIVE_FWD_HPP
diff --git a/3party/boost/boost/intrusive/linear_slist_algorithms.hpp b/3party/boost/boost/intrusive/linear_slist_algorithms.hpp
index db4092d2c9..86f9bb322d 100644
--- a/3party/boost/boost/intrusive/linear_slist_algorithms.hpp
+++ b/3party/boost/boost/intrusive/linear_slist_algorithms.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -17,6 +17,7 @@
#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/common_slist_algorithms.hpp>
+#include <boost/intrusive/detail/utilities.hpp>
#include <cstddef>
#include <utility>
@@ -319,6 +320,16 @@ class linear_slist_algorithms
}
};
+/// @cond
+
+template<class NodeTraits>
+struct get_algo<LinearSListAlgorithms, NodeTraits>
+{
+ typedef linear_slist_algorithms<NodeTraits> type;
+};
+
+/// @endcond
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/link_mode.hpp b/3party/boost/boost/intrusive/link_mode.hpp
index c04f77526e..73d3044605 100644
--- a/3party/boost/boost/intrusive/link_mode.hpp
+++ b/3party/boost/boost/intrusive/link_mode.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// 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/intrusive/list.hpp b/3party/boost/boost/intrusive/list.hpp
index 59091522e5..c22e3af762 100644
--- a/3party/boost/boost/intrusive/list.hpp
+++ b/3party/boost/boost/intrusive/list.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,12 +15,11 @@
#define BOOST_INTRUSIVE_LIST_HPP
#include <boost/intrusive/detail/config_begin.hpp>
-#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/intrusive_fwd.hpp>
+#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/list_hook.hpp>
#include <boost/intrusive/circular_list_algorithms.hpp>
#include <boost/intrusive/pointer_traits.hpp>
-#include <boost/intrusive/detail/clear_on_destructor_base.hpp>
#include <boost/intrusive/detail/mpl.hpp>
#include <boost/intrusive/link_mode.hpp>
#include <boost/static_assert.hpp>
@@ -38,25 +37,14 @@ namespace intrusive {
/// @cond
-template <class ValueTraits, class SizeType, bool ConstantTimeSize>
-struct listopt
+struct list_defaults
{
- typedef ValueTraits value_traits;
- typedef SizeType size_type;
- static const bool constant_time_size = ConstantTimeSize;
+ typedef detail::default_list_hook proto_value_traits;
+ static const bool constant_time_size = true;
+ typedef std::size_t size_type;
+ typedef void header_holder_type;
};
-
-template <class T>
-struct list_defaults
- : pack_options
- < none
- , base_hook<detail::default_list_hook>
- , constant_time_size<true>
- , size_type<std::size_t>
- >::type
-{};
-
/// @endcond
//! The class template list is an intrusive container that mimics most of the
@@ -72,43 +60,35 @@ struct list_defaults
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template <class ValueTraits, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class list_impl
- : private detail::clear_on_destructor_base< list_impl<Config> >
{
- template<class C> friend class detail::clear_on_destructor_base;
//Public typedefs
public:
- typedef typename Config::value_traits value_traits;
- /// @cond
- static const bool external_value_traits =
- detail::external_value_traits_bool_is_true<value_traits>::value;
- typedef typename detail::eval_if_c
- < external_value_traits
- , detail::eval_value_traits<value_traits>
- , detail::identity<value_traits>
- >::type real_value_traits;
- /// @endcond
- typedef typename real_value_traits::pointer pointer;
- typedef typename real_value_traits::const_pointer const_pointer;
+ typedef ValueTraits value_traits;
+ typedef typename value_traits::pointer pointer;
+ typedef typename value_traits::const_pointer const_pointer;
typedef typename pointer_traits<pointer>::element_type value_type;
typedef typename pointer_traits<pointer>::reference reference;
typedef typename pointer_traits<const_pointer>::reference const_reference;
typedef typename pointer_traits<pointer>::difference_type difference_type;
- typedef typename Config::size_type size_type;
- typedef list_iterator<list_impl, false> iterator;
- typedef list_iterator<list_impl, true> const_iterator;
+ typedef SizeType size_type;
+ typedef list_iterator<value_traits, false> iterator;
+ typedef list_iterator<value_traits, true> const_iterator;
typedef boost::intrusive::detail::reverse_iterator<iterator> reverse_iterator;
typedef boost::intrusive::detail::reverse_iterator<const_iterator>const_reverse_iterator;
- typedef typename real_value_traits::node_traits node_traits;
+ typedef typename value_traits::node_traits node_traits;
typedef typename node_traits::node node;
typedef typename node_traits::node_ptr node_ptr;
typedef typename node_traits::const_node_ptr const_node_ptr;
typedef circular_list_algorithms<node_traits> node_algorithms;
+ typedef HeaderHolder header_holder_type;
- static const bool constant_time_size = Config::constant_time_size;
- static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
+ static const bool constant_time_size = ConstantTimeSize;
+ static const bool stateful_value_traits = detail::is_stateful_value_traits<value_traits>::value;
+ static const bool has_container_from_iterator =
+ boost::is_same< header_holder_type, detail::default_header_holder< node_traits > >::value;
/// @cond
@@ -118,34 +98,28 @@ class list_impl
//noncopyable
BOOST_MOVABLE_BUT_NOT_COPYABLE(list_impl)
- enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
+ static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
//Constant-time size is incompatible with auto-unlink hooks!
BOOST_STATIC_ASSERT(!(constant_time_size &&
- ((int)real_value_traits::link_mode == (int)auto_unlink)
+ ((int)value_traits::link_mode == (int)auto_unlink)
));
- //Const cast emulation for smart pointers
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
-
node_ptr get_root_node()
- { return pointer_traits<node_ptr>::pointer_to(data_.root_plus_size_.root_); }
+ { return data_.root_plus_size_.m_header.get_node(); }
const_node_ptr get_root_node() const
- { return pointer_traits<const_node_ptr>::pointer_to(data_.root_plus_size_.root_); }
+ { return data_.root_plus_size_.m_header.get_node(); }
struct root_plus_size : public size_traits
{
- node root_;
+ header_holder_type m_header;
};
struct data_t : public value_traits
{
typedef typename list_impl::value_traits value_traits;
- data_t(const value_traits &val_traits)
+ explicit data_t(const value_traits &val_traits)
: value_traits(val_traits)
{}
@@ -158,49 +132,27 @@ class list_impl
const size_traits &priv_size_traits() const
{ return data_.root_plus_size_; }
- const real_value_traits &get_real_value_traits(detail::bool_<false>) const
- { return data_; }
-
- const real_value_traits &get_real_value_traits(detail::bool_<true>) const
- { return data_.get_value_traits(*this); }
-
- real_value_traits &get_real_value_traits(detail::bool_<false>)
- { return data_; }
-
- real_value_traits &get_real_value_traits(detail::bool_<true>)
- { return data_.get_value_traits(*this); }
-
const value_traits &priv_value_traits() const
{ return data_; }
value_traits &priv_value_traits()
{ return data_; }
- protected:
- node &prot_root_node()
- { return data_.root_plus_size_.root_; }
-
- node const &prot_root_node() const
- { return data_.root_plus_size_.root_; }
+ typedef typename boost::intrusive::value_traits_pointers
+ <ValueTraits>::const_value_traits_ptr const_value_traits_ptr;
- void prot_set_size(size_type s)
- { data_.root_plus_size_.set_size(s); }
+ const_value_traits_ptr priv_value_traits_ptr() const
+ { return pointer_traits<const_value_traits_ptr>::pointer_to(this->priv_value_traits()); }
/// @endcond
public:
- const real_value_traits &get_real_value_traits() const
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
- real_value_traits &get_real_value_traits()
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
//! <b>Effects</b>: constructs an empty list.
//!
//! <b>Complexity</b>: Constant
//!
- //! <b>Throws</b>: If real_value_traits::node_traits::node
+ //! <b>Throws</b>: If value_traits::node_traits::node
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
explicit list_impl(const value_traits &v_traits = value_traits())
: data_(v_traits)
@@ -215,14 +167,16 @@ class list_impl
//!
//! <b>Complexity</b>: Linear in std::distance(b, e). No copy constructors are called.
//!
- //! <b>Throws</b>: If real_value_traits::node_traits::node
+ //! <b>Throws</b>: If value_traits::node_traits::node
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
template<class Iterator>
list_impl(Iterator b, Iterator e, const value_traits &v_traits = value_traits())
: data_(v_traits)
{
+ //nothrow, no need to rollback to release elements on exception
this->priv_size_traits().set_size(size_type(0));
node_algorithms::init_header(this->get_root_node());
+ //nothrow, no need to rollback to release elements on exception
this->insert(this->cend(), b, e);
}
@@ -233,6 +187,7 @@ class list_impl
{
this->priv_size_traits().set_size(size_type(0));
node_algorithms::init_header(this->get_root_node());
+ //nothrow, no need to rollback to release elements on exception
this->swap(x);
}
@@ -251,7 +206,12 @@ class list_impl
//! <b>Complexity</b>: Linear to the number of elements in the list, if
//! it's a safe-mode or auto-unlink value . Otherwise constant.
~list_impl()
- {}
+ {
+ if(is_safe_autounlink<ValueTraits::link_mode>::value){
+ this->clear();
+ node_algorithms::init(this->get_root_node());
+ }
+ }
//! <b>Requires</b>: value must be an lvalue.
//!
@@ -265,7 +225,7 @@ class list_impl
//! <b>Note</b>: Does not affect the validity of iterators and references.
void push_back(reference value)
{
- node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
+ node_ptr to_insert = priv_value_traits().to_node_ptr(value);
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
node_algorithms::link_before(this->get_root_node(), to_insert);
@@ -284,7 +244,7 @@ class list_impl
//! <b>Note</b>: Does not affect the validity of iterators and references.
void push_front(reference value)
{
- node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
+ node_ptr to_insert = priv_value_traits().to_node_ptr(value);
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
node_algorithms::link_before(node_traits::get_next(this->get_root_node()), to_insert);
@@ -321,7 +281,7 @@ class list_impl
this->priv_size_traits().decrement();
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(priv_value_traits().to_value_ptr(to_erase));
}
//! <b>Effects</b>: Erases the first element of the list.
@@ -354,7 +314,7 @@ class list_impl
this->priv_size_traits().decrement();
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(priv_value_traits().to_value_ptr(to_erase));
}
//! <b>Effects</b>: Returns a reference to the first element of the list.
@@ -363,7 +323,7 @@ class list_impl
//!
//! <b>Complexity</b>: Constant.
reference front()
- { return *get_real_value_traits().to_value_ptr(node_traits::get_next(this->get_root_node())); }
+ { return *priv_value_traits().to_value_ptr(node_traits::get_next(this->get_root_node())); }
//! <b>Effects</b>: Returns a const_reference to the first element of the list.
//!
@@ -371,7 +331,7 @@ class list_impl
//!
//! <b>Complexity</b>: Constant.
const_reference front() const
- { return *get_real_value_traits().to_value_ptr(uncast(node_traits::get_next(this->get_root_node()))); }
+ { return *priv_value_traits().to_value_ptr(detail::uncast(node_traits::get_next(this->get_root_node()))); }
//! <b>Effects</b>: Returns a reference to the last element of the list.
//!
@@ -379,7 +339,7 @@ class list_impl
//!
//! <b>Complexity</b>: Constant.
reference back()
- { return *get_real_value_traits().to_value_ptr(node_traits::get_previous(this->get_root_node())); }
+ { return *priv_value_traits().to_value_ptr(node_traits::get_previous(this->get_root_node())); }
//! <b>Effects</b>: Returns a const_reference to the last element of the list.
//!
@@ -387,7 +347,7 @@ class list_impl
//!
//! <b>Complexity</b>: Constant.
const_reference back() const
- { return *get_real_value_traits().to_value_ptr(uncast(node_traits::get_previous(this->get_root_node()))); }
+ { return *priv_value_traits().to_value_ptr(detail::uncast(node_traits::get_previous(this->get_root_node()))); }
//! <b>Effects</b>: Returns an iterator to the first element contained in the list.
//!
@@ -395,7 +355,7 @@ class list_impl
//!
//! <b>Complexity</b>: Constant.
iterator begin()
- { return iterator(node_traits::get_next(this->get_root_node()), this); }
+ { return iterator(node_traits::get_next(this->get_root_node()), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
//!
@@ -411,7 +371,7 @@ class list_impl
//!
//! <b>Complexity</b>: Constant.
const_iterator cbegin() const
- { return const_iterator(node_traits::get_next(this->get_root_node()), this); }
+ { return const_iterator(node_traits::get_next(this->get_root_node()), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns an iterator to the end of the list.
//!
@@ -419,7 +379,7 @@ class list_impl
//!
//! <b>Complexity</b>: Constant.
iterator end()
- { return iterator(this->get_root_node(), this); }
+ { return iterator(this->get_root_node(), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns a const_iterator to the end of the list.
//!
@@ -435,7 +395,7 @@ class list_impl
//!
//! <b>Complexity</b>: Constant.
const_iterator cend() const
- { return const_iterator(uncast(this->get_root_node()), this); }
+ { return const_iterator(detail::uncast(this->get_root_node()), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
//! of the reversed list.
@@ -675,7 +635,7 @@ class list_impl
this->priv_size_traits().decrement();
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(this->get_real_value_traits().to_value_ptr(to_erase));
+ disposer(this->priv_value_traits().to_value_ptr(to_erase));
return i.unconst();
}
@@ -709,7 +669,7 @@ class list_impl
bp = node_traits::get_next(bp);
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(priv_value_traits().to_value_ptr(to_erase));
this->priv_size_traits().decrement();
}
return e.unconst();
@@ -755,7 +715,7 @@ class list_impl
++it;
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(priv_value_traits().to_value_ptr(to_erase));
}
node_algorithms::init_header(this->get_root_node());
this->priv_size_traits().set_size(0);
@@ -801,12 +761,12 @@ class list_impl
//! <b>Note</b>: Does not affect the validity of iterators and references.
iterator insert(const_iterator p, reference value)
{
- node_ptr to_insert = this->get_real_value_traits().to_node_ptr(value);
+ node_ptr to_insert = this->priv_value_traits().to_node_ptr(value);
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
node_algorithms::link_before(p.pointed_node(), to_insert);
this->priv_size_traits().increment();
- return iterator(to_insert, this);
+ return iterator(to_insert, this->priv_value_traits_ptr());
}
//! <b>Requires</b>: Dereferencing iterator must yield
@@ -899,7 +859,7 @@ class list_impl
//! new_ele must point to an element contained in list x.
//!
//! <b>Effects</b>: Transfers the value pointed by new_ele, from list x to this list,
- //! before the the element pointed by p. No destructors or copy constructors are called.
+ //! before the element pointed by p. No destructors or copy constructors are called.
//! If p == new_ele or p == ++new_ele, this function is a null operation.
//!
//! <b>Throws</b>: Nothing.
@@ -919,7 +879,7 @@ class list_impl
//! f and e must point to elements contained in list x.
//!
//! <b>Effects</b>: Transfers the range pointed by f and e from list x to this list,
- //! before the the element pointed by p. No destructors or copy constructors are called.
+ //! before the element pointed by p. No destructors or copy constructors are called.
//!
//! <b>Throws</b>: Nothing.
//!
@@ -941,7 +901,7 @@ class list_impl
//! n == std::distance(f, e)
//!
//! <b>Effects</b>: Transfers the range pointed by f and e from list x to this list,
- //! before the the element pointed by p. No destructors or copy constructors are called.
+ //! before the element pointed by p. No destructors or copy constructors are called.
//!
//! <b>Throws</b>: Nothing.
//!
@@ -969,7 +929,7 @@ class list_impl
//! <b>Effects</b>: This function sorts the list *this according to std::less<value_type>.
//! The sort is stable, that is, the relative order of equivalent elements is preserved.
//!
- //! <b>Throws</b>: If real_value_traits::node_traits::node
+ //! <b>Throws</b>: If value_traits::node_traits::node
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
//! or std::less<value_type> throws. Basic guarantee.
//!
@@ -985,7 +945,7 @@ class list_impl
//! <b>Effects</b>: This function sorts the list *this according to p. The sort is
//! stable, that is, the relative order of equivalent elements is preserved.
//!
- //! <b>Throws</b>: If real_value_traits::node_traits::node
+ //! <b>Throws</b>: If value_traits::node_traits::node
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
//! or the predicate throws. Basic guarantee.
//!
@@ -1239,8 +1199,8 @@ class list_impl
static iterator s_iterator_to(reference value)
{
BOOST_STATIC_ASSERT((!stateful_value_traits));
- BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(value)));
- return iterator(real_value_traits::to_node_ptr(value), 0);
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(value_traits::to_node_ptr(value)));
+ return iterator(value_traits::to_node_ptr(value), const_value_traits_ptr());
}
//! <b>Requires</b>: value must be a const reference to a value inserted in a list.
@@ -1257,8 +1217,9 @@ class list_impl
static const_iterator s_iterator_to(const_reference value)
{
BOOST_STATIC_ASSERT((!stateful_value_traits));
- BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(const_cast<reference> (value))));
- return const_iterator(real_value_traits::to_node_ptr(const_cast<reference> (value)), 0);
+ reference r =*pointer_traits<pointer>::const_cast_from(pointer_traits<const_pointer>::pointer_to(value));
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(value_traits::to_node_ptr(r)));
+ return const_iterator(value_traits::to_node_ptr(r), const_value_traits_ptr());
}
//! <b>Requires</b>: value must be a reference to a value inserted in a list.
@@ -1272,8 +1233,8 @@ class list_impl
//! <b>Note</b>: Iterators and references are not invalidated.
iterator iterator_to(reference value)
{
- BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(value)));
- return iterator(real_value_traits::to_node_ptr(value), this);
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(this->priv_value_traits().to_node_ptr(value)));
+ return iterator(this->priv_value_traits().to_node_ptr(value), this->priv_value_traits_ptr());
}
//! <b>Requires</b>: value must be a const reference to a value inserted in a list.
@@ -1287,8 +1248,9 @@ class list_impl
//! <b>Note</b>: Iterators and references are not invalidated.
const_iterator iterator_to(const_reference value) const
{
- BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(const_cast<reference> (value))));
- return const_iterator(real_value_traits::to_node_ptr(const_cast<reference> (value)), this);
+ reference r = *pointer_traits<pointer>::const_cast_from(pointer_traits<const_pointer>::pointer_to(value));
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(this->priv_value_traits().to_node_ptr(r)));
+ return const_iterator(this->priv_value_traits().to_node_ptr(r), this->priv_value_traits_ptr());
}
/// @cond
@@ -1296,8 +1258,11 @@ class list_impl
private:
static list_impl &priv_container_from_end_iterator(const const_iterator &end_iterator)
{
- root_plus_size *r = detail::parent_from_member<root_plus_size, node>
- ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), &root_plus_size::root_);
+ BOOST_STATIC_ASSERT((has_container_from_iterator));
+ node_ptr p = end_iterator.pointed_node();
+ header_holder_type* h = header_holder_type::get_holder(p);
+ root_plus_size* r = detail::parent_from_member
+ < root_plus_size, header_holder_type>(h, &root_plus_size::m_header);
data_t *d = detail::parent_from_member<data_t, root_plus_size>
( r, &data_t::root_plus_size_);
list_impl *s = detail::parent_from_member<list_impl, data_t>(d, &list_impl::data_);
@@ -1309,29 +1274,29 @@ class list_impl
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template <class ValueTraits, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
inline bool operator<
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
#else
-(const list_impl<Config> &x, const list_impl<Config> &y)
+(const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &x, const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &y)
#endif
{ return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template <class ValueTraits, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
bool operator==
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
#else
-(const list_impl<Config> &x, const list_impl<Config> &y)
+(const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &x, const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &y)
#endif
{
- typedef list_impl<Config> list_type;
+ typedef list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> list_type;
typedef typename list_type::const_iterator const_iterator;
const bool C = list_type::constant_time_size;
if(C && x.size() != y.size()){
@@ -1361,65 +1326,65 @@ bool operator==
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template <class ValueTraits, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
inline bool operator!=
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
#else
-(const list_impl<Config> &x, const list_impl<Config> &y)
+(const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &x, const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &y)
#endif
{ return !(x == y); }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template <class ValueTraits, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
inline bool operator>
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
#else
-(const list_impl<Config> &x, const list_impl<Config> &y)
+(const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &x, const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &y)
#endif
{ return y < x; }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template <class ValueTraits, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
inline bool operator<=
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
#else
-(const list_impl<Config> &x, const list_impl<Config> &y)
+(const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &x, const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &y)
#endif
{ return !(y < x); }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template <class ValueTraits, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
inline bool operator>=
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
#else
-(const list_impl<Config> &x, const list_impl<Config> &y)
+(const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &x, const list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &y)
#endif
{ return !(x < y); }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template <class ValueTraits, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
inline void swap
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(list_impl<T, Options...> &x, list_impl<T, Options...> &y)
#else
-(list_impl<Config> &x, list_impl<Config> &y)
+(list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &x, list_impl<ValueTraits, SizeType, ConstantTimeSize, HeaderHolder> &y)
#endif
{ x.swap(y); }
@@ -1428,30 +1393,31 @@ inline void swap
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none, class O3 = none>
+template<class T, class O1 = void, class O2 = void, class O3 = void, class O4 = void>
#endif
struct make_list
{
/// @cond
typedef typename pack_options
- < list_defaults<T>,
+ < list_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3
+ O1, O2, O3, O4
#else
Options...
#endif
>::type packed_options;
typedef typename detail::get_value_traits
- <T, typename packed_options::value_traits>::type value_traits;
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
typedef list_impl
<
- listopt
- < value_traits
- , typename packed_options::size_type
- , packed_options::constant_time_size
- >
+ value_traits,
+ typename packed_options::size_type,
+ packed_options::constant_time_size,
+ header_holder_type
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -1461,14 +1427,14 @@ struct make_list
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3>
+template<class T, class O1, class O2, class O3, class O4>
#else
template<class T, class ...Options>
#endif
class list
: public make_list<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3
+ O1, O2, O3, O4
#else
Options...
#endif
@@ -1477,14 +1443,13 @@ class list
typedef typename make_list
<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3
+ O1, O2, O3, O4
#else
Options...
#endif
>::type Base;
- typedef typename Base::real_value_traits real_value_traits;
//Assert if passed value traits are compatible with the type
- BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
+ BOOST_STATIC_ASSERT((detail::is_same<typename Base::value_traits::value_type, T>::value));
BOOST_MOVABLE_BUT_NOT_COPYABLE(list)
public:
@@ -1492,7 +1457,7 @@ class list
typedef typename Base::iterator iterator;
typedef typename Base::const_iterator const_iterator;
- list(const value_traits &v_traits = value_traits())
+ explicit list(const value_traits &v_traits = value_traits())
: Base(v_traits)
{}
@@ -1506,7 +1471,7 @@ class list
{}
list& operator=(BOOST_RV_REF(list) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<list &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static list &container_from_end_iterator(iterator end_iterator)
{ return static_cast<list &>(Base::container_from_end_iterator(end_iterator)); }
diff --git a/3party/boost/boost/intrusive/list_hook.hpp b/3party/boost/boost/intrusive/list_hook.hpp
index b674868242..0d9bb323b1 100644
--- a/3party/boost/boost/intrusive/list_hook.hpp
+++ b/3party/boost/boost/intrusive/list_hook.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -38,7 +38,7 @@ struct get_list_node_algo
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none>
+template<class O1 = void, class O2 = void, class O3 = void>
#endif
struct make_list_base_hook
{
@@ -52,11 +52,11 @@ struct make_list_base_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_list_node_algo<typename packed_options::void_pointer>
, typename packed_options::tag
, packed_options::link_mode
- , detail::ListBaseHook
+ , ListBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -77,7 +77,7 @@ struct make_list_base_hook
//! \c auto_unlink or \c safe_link).
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
@@ -165,7 +165,7 @@ class list_base_hook
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none>
+template<class O1 = void, class O2 = void, class O3 = void>
#endif
struct make_list_member_hook
{
@@ -179,11 +179,11 @@ struct make_list_member_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_list_node_algo<typename packed_options::void_pointer>
, member_tag
, packed_options::link_mode
- , detail::NoBaseHook
+ , NoBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -199,7 +199,7 @@ struct make_list_member_hook
//! \c auto_unlink or \c safe_link).
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
diff --git a/3party/boost/boost/intrusive/member_value_traits.hpp b/3party/boost/boost/intrusive/member_value_traits.hpp
index 0462dbd65d..bd5f1fbbaa 100644
--- a/3party/boost/boost/intrusive/member_value_traits.hpp
+++ b/3party/boost/boost/intrusive/member_value_traits.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +13,9 @@
#ifndef BOOST_INTRUSIVE_MEMBER_VALUE_TRAITS_HPP
#define BOOST_INTRUSIVE_MEMBER_VALUE_TRAITS_HPP
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
+
#include <boost/intrusive/link_mode.hpp>
#include <iterator>
#include <boost/intrusive/detail/parent_from_member.hpp>
@@ -26,7 +29,11 @@ namespace intrusive {
//!store a node_traits::node
template< class T, class NodeTraits
, typename NodeTraits::node T::* PtrToMember
- , link_mode_type LinkMode = safe_link>
+ , link_mode_type LinkMode
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ = safe_link
+ #endif
+>
struct member_value_traits
{
public:
@@ -67,4 +74,6 @@ struct member_value_traits
} //namespace intrusive
} //namespace boost
+#include <boost/intrusive/detail/config_end.hpp>
+
#endif //BOOST_INTRUSIVE_MEMBER_VALUE_TRAITS_HPP
diff --git a/3party/boost/boost/intrusive/options.hpp b/3party/boost/boost/intrusive/options.hpp
index 5449a44c5c..83eff0982d 100644
--- a/3party/boost/boost/intrusive/options.hpp
+++ b/3party/boost/boost/intrusive/options.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -16,16 +16,17 @@
#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/link_mode.hpp>
+#include <boost/intrusive/pack_options.hpp>
#include <boost/intrusive/detail/mpl.hpp>
#include <boost/intrusive/detail/utilities.hpp>
#include <boost/static_assert.hpp>
-
namespace boost {
namespace intrusive {
-/// @cond
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+//typedef void default_tag;
struct default_tag;
struct member_tag;
@@ -33,8 +34,6 @@ namespace detail{
struct default_hook_tag{};
-#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
-
#define BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER) \
struct BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER : public default_hook_tag\
{\
@@ -45,54 +44,46 @@ struct BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER : public default_hook_tag\
BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_list_hook);
BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_slist_hook);
-BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_set_hook);
-BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_uset_hook);
-BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_avl_set_hook);
-BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_splay_set_hook);
-BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_bs_set_hook);
+BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_rbtree_hook);
+BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_hashtable_hook);
+BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_avltree_hook);
+BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION(default_bstree_hook);
#undef BOOST_INTRUSIVE_DEFAULT_HOOK_MARKER_DEFINITION
-#endif //BOOST_INTRUSIVE_DOXYGEN_INVOKED
-
-template <class ValueTraits>
-struct eval_value_traits
-{
- typedef typename ValueTraits::value_traits type;
-};
-
-template <class BucketTraits>
-struct eval_bucket_traits
-{
- typedef typename BucketTraits::bucket_traits type;
-};
-
template <class T, class BaseHook>
struct concrete_hook_base_value_traits
{
- typedef typename BaseHook::boost_intrusive_tags tags;
- typedef detail::base_hook_traits
+ typedef typename BaseHook::hooktags tags;
+ typedef bhtraits
< T
, typename tags::node_traits
, tags::link_mode
, typename tags::tag
- , tags::hook_type> type;
+ , tags::type> type;
};
template <class BaseHook>
struct concrete_hook_base_node_traits
-{ typedef typename BaseHook::boost_intrusive_tags::node_traits type; };
+{ typedef typename BaseHook::hooktags::node_traits type; };
-template <class T, class BaseHook>
+template <class T, class AnyToSomeHook_ProtoValueTraits>
struct any_hook_base_value_traits
{
- typedef typename BaseHook::boost_intrusive_tags tags;
- typedef detail::base_hook_traits
+ //AnyToSomeHook value_traits derive from a generic_hook
+ //The generic_hook is configured with any_node_traits
+ //and AnyToSomeHook::value_traits with the correct
+ //node traits for the container, so use node_traits
+ //from AnyToSomeHook_ProtoValueTraits and the rest of
+ //elements from the hooktags member of the generic_hook
+ typedef AnyToSomeHook_ProtoValueTraits proto_value_traits;
+ typedef bhtraits
< T
- , typename BaseHook::node_traits
- , tags::link_mode
- , typename tags::tag
- , tags::hook_type> type;
+ , typename proto_value_traits::node_traits
+ , proto_value_traits::hooktags::link_mode
+ , typename proto_value_traits::hooktags::tag
+ , proto_value_traits::hooktags::type
+ > type;
};
template <class BaseHook>
@@ -139,13 +130,14 @@ struct get_value_traits
,detail::apply<SupposedValueTraits, T>
,detail::identity<SupposedValueTraits>
>::type supposed_value_traits;
+
//...if it's a default hook
typedef typename detail::eval_if_c
< internal_base_hook_bool_is_true<supposed_value_traits>::value
//...get it's internal value traits using
//the provided T value type.
, get_base_value_traits<T, supposed_value_traits>
- //...else use it's internal value traits tag
+ //...else use its internal value traits tag
//(member hooks and custom value traits are in this group)
, detail::eval_if_c
< internal_member_value_traits<supposed_value_traits>::value
@@ -171,7 +163,7 @@ struct get_node_traits
//...get it's internal value traits using
//the provided T value type.
, get_base_node_traits<supposed_value_traits>
- //...else use it's internal value traits tag
+ //...else use its internal value traits tag
//(member hooks and custom value traits are in this group)
, detail::eval_if_c
< internal_member_value_traits<supposed_value_traits>::value
@@ -183,60 +175,23 @@ struct get_node_traits
} //namespace detail{
-
-//!This type indicates that no option is being used
-//!and that the default options should be used
-struct none
-{
- template<class Base>
- struct pack : Base
- { };
-};
-
-/// @endcond
+#endif //BOOST_INTRUSIVE_DOXYGEN_INVOKED
//!This option setter specifies if the intrusive
//!container stores its size as a member to
//!obtain constant-time size() member.
-template<bool Enabled>
-struct constant_time_size
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool constant_time_size = Enabled;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(constant_time_size, bool, Enabled, constant_time_size)
+
+//!This option setter specifies a container header holder type
+BOOST_INTRUSIVE_OPTION_TYPE(header_holder_type, HeaderHolder, HeaderHolder, header_holder_type)
//!This option setter specifies the type that
//!the container will use to store its size.
-template<class SizeType>
-struct size_type
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef SizeType size_type;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(size_type, SizeType, SizeType, size_type)
//!This option setter specifies the strict weak ordering
//!comparison functor for the value type
-template<class Compare>
-struct compare
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef Compare compare;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(compare, Compare, Compare, compare)
//!This option setter for scapegoat containers specifies if
//!the intrusive scapegoat container should use a non-variable
@@ -250,74 +205,39 @@ struct compare
//!If the user only needs an alpha value near 1/sqrt(2), this
//!option also improves performance since avoids logarithm
//!and division operations when rebalancing the tree.
-template<bool Enabled>
-struct floating_point
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool floating_point = Enabled;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(floating_point, bool, Enabled, floating_point)
//!This option setter specifies the equality
//!functor for the value type
-template<class Equal>
-struct equal
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef Equal equal;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(equal, Equal, Equal, equal)
//!This option setter specifies the equality
//!functor for the value type
-template<class Priority>
-struct priority
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef Priority priority;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(priority, Priority, Priority, priority)
//!This option setter specifies the hash
//!functor for the value type
-template<class Hash>
-struct hash
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef Hash hash;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(hash, Hash, Hash, hash)
//!This option setter specifies the relationship between the type
//!to be managed by the container (the value type) and the node to be
//!used in the node algorithms. It also specifies the linking policy.
-template<typename ValueTraits>
-struct value_traits
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef ValueTraits value_traits;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(value_traits, ValueTraits, ValueTraits, proto_value_traits)
+
+//#define BOOST_INTRUSIVE_COMMA ,
+//#define BOOST_INTRUSIVE_LESS <
+//#define BOOST_INTRUSIVE_MORE >
+//BOOST_INTRUSIVE_OPTION_TYPE (member_hook, Parent BOOST_INTRUSIVE_COMMA class MemberHook BOOST_INTRUSIVE_COMMA MemberHook Parent::* PtrToMember , mhtraits BOOST_INTRUSIVE_LESS Parent BOOST_INTRUSIVE_COMMA MemberHook BOOST_INTRUSIVE_COMMA PtrToMember BOOST_INTRUSIVE_MORE , proto_value_traits)
+//template< class Parent , class MemberHook , MemberHook Parent::* PtrToMember>
+//struct member_hook {
+// template<class Base> struct pack : Base {
+// typedef mhtraits < Parent , MemberHook , PtrToMember > proto_value_traits;
+// };
+//};
+//
+//#undef BOOST_INTRUSIVE_COMMA
+//#undef BOOST_INTRUSIVE_LESS
+//#undef BOOST_INTRUSIVE_MORE
//!This option setter specifies the member hook the
//!container must use.
@@ -326,172 +246,78 @@ template< typename Parent
, MemberHook Parent::* PtrToMember>
struct member_hook
{
-/// @cond
- typedef detail::member_hook_traits
- < Parent
- , MemberHook
- , PtrToMember
- > member_value_traits;
+// @cond
+// typedef typename MemberHook::hooktags::node_traits node_traits;
+// typedef typename node_traits::node node_type;
+// typedef node_type Parent::* Ptr2MemNode;
+// typedef mhtraits
+// < Parent
+// , node_traits
+// //This cast is really ugly but necessary to reduce template bloat.
+// //Since we control the layout between the hook and the node, and there is
+// //always single inheritance, the offset of the node is exactly the offset of
+// //the hook. Since the node type is shared between all member hooks, this saves
+// //quite a lot of symbol stuff.
+// , (Ptr2MemNode)PtrToMember
+// , MemberHook::hooktags::link_mode> member_value_traits;
+ typedef mhtraits <Parent, MemberHook, PtrToMember> member_value_traits;
template<class Base>
struct pack : Base
{
- typedef member_value_traits value_traits;
+ typedef member_value_traits proto_value_traits;
};
/// @endcond
};
-
//!This option setter specifies the function object that will
//!be used to convert between values to be inserted in a container
//!and the hook to be used for that purpose.
-template< typename Functor>
-struct function_hook
-{
-/// @cond
- typedef detail::function_hook_traits
- <Functor> function_value_traits;
- template<class Base>
- struct pack : Base
- {
- typedef function_value_traits value_traits;
- };
-/// @endcond
-};
-
+BOOST_INTRUSIVE_OPTION_TYPE(function_hook, Functor, fhtraits<Functor>, proto_value_traits)
//!This option setter specifies that the container
//!must use the specified base hook
-template<typename BaseHook>
-struct base_hook
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef BaseHook value_traits;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(base_hook, BaseHook, BaseHook, proto_value_traits)
//!This option setter specifies the type of
//!a void pointer. This will instruct the hook
//!to use this type of pointer instead of the
//!default one
-template<class VoidPointer>
-struct void_pointer
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef VoidPointer void_pointer;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(void_pointer, VoidPointer, VoidPointer, void_pointer)
//!This option setter specifies the type of
//!the tag of a base hook. A type cannot have two
//!base hooks of the same type, so a tag can be used
//!to differentiate two base hooks with otherwise same type
-template<class Tag>
-struct tag
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef Tag tag;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(tag, Tag, Tag, tag)
//!This option setter specifies the link mode
//!(normal_link, safe_link or auto_unlink)
-template<link_mode_type LinkType>
-struct link_mode
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const link_mode_type link_mode = LinkType;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(link_mode, link_mode_type, LinkType, link_mode)
//!This option setter specifies if the hook
//!should be optimized for size instead of for speed.
-template<bool Enabled>
-struct optimize_size
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool optimize_size = Enabled;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(optimize_size, bool, Enabled, optimize_size)
-//!This option setter specifies if the list container should
+//!This option setter specifies if the slist container should
//!use a linear implementation instead of a circular one.
-template<bool Enabled>
-struct linear
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool linear = Enabled;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(linear, bool, Enabled, linear)
-//!This option setter specifies if the list container should
-//!use a linear implementation instead of a circular one.
-template<bool Enabled>
-struct cache_last
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool cache_last = Enabled;
- };
-/// @endcond
-};
+//!If true, slist also stores a pointer to the last element of the singly linked list.
+//!This allows O(1) swap and splice_after(iterator, slist &) for circular slists and makes
+//!possible new functions like push_back(reference) and back().
+BOOST_INTRUSIVE_OPTION_CONSTANT(cache_last, bool, Enabled, cache_last)
//!This option setter specifies the bucket traits
//!class for unordered associative containers. When this option is specified,
//!instead of using the default bucket traits, a user defined holder will be defined
-template<class BucketTraits>
-struct bucket_traits
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- typedef BucketTraits bucket_traits;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_TYPE(bucket_traits, BucketTraits, BucketTraits, bucket_traits)
//!This option setter specifies if the unordered hook
//!should offer room to store the hash value.
//!Storing the hash in the hook will speed up rehashing
//!processes in applications where rehashing is frequent,
//!rehashing might throw or the value is heavy to hash.
-template<bool Enabled>
-struct store_hash
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool store_hash = Enabled;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(store_hash, bool, Enabled, store_hash)
//!This option setter specifies if the unordered hook
//!should offer room to store another link to another node
@@ -499,51 +325,20 @@ struct store_hash
//!Storing this link will speed up lookups and insertions on
//!unordered_multiset containers with a great number of elements
//!with the same key.
-template<bool Enabled>
-struct optimize_multikey
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool optimize_multikey = Enabled;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(optimize_multikey, bool, Enabled, optimize_multikey)
//!This option setter specifies if the bucket array will be always power of two.
//!This allows using masks instead of the default modulo operation to determine
//!the bucket number from the hash value, leading to better performance.
//!In debug mode, if power of two buckets mode is activated, the bucket length
//!will be checked to through assertions to assure the bucket length is power of two.
-template<bool Enabled>
-struct power_2_buckets
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool power_2_buckets = Enabled;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(power_2_buckets, bool, Enabled, power_2_buckets)
//!This option setter specifies if the container will cache a pointer to the first
//!non-empty bucket so that begin() is always constant-time.
//!This is specially helpful when we can have containers with a few elements
//!but with big bucket arrays (that is, hashtables with low load factors).
-template<bool Enabled>
-struct cache_begin
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool cache_begin = Enabled;
- };
-/// @endcond
-};
-
+BOOST_INTRUSIVE_OPTION_CONSTANT(cache_begin, bool, Enabled, cache_begin)
//!This option setter specifies if the container will compare the hash value
//!before comparing objects. This option can't be specified if store_hash<>
@@ -551,17 +346,7 @@ struct cache_begin
//!This is specially helpful when we have containers with a high load factor.
//!and the comparison function is much more expensive that comparing already
//!stored hash values.
-template<bool Enabled>
-struct compare_hash
-{
-/// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool compare_hash = Enabled;
- };
-/// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(compare_hash, bool, Enabled, compare_hash)
//!This option setter specifies if the hash container will use incremental
//!hashing. With incremental hashing the cost of hash table expansion is spread
@@ -569,237 +354,28 @@ struct compare_hash
//!Therefore linear hashing is well suited for interactive applications or real-time
//!appplications where the worst-case insertion time of non-incremental hash containers
//!(rehashing the whole bucket array) is not admisible.
-template<bool Enabled>
-struct incremental
-{
- /// @cond
- template<class Base>
- struct pack : Base
- {
- static const bool incremental = Enabled;
- };
- /// @endcond
-};
+BOOST_INTRUSIVE_OPTION_CONSTANT(incremental, bool, Enabled, incremental)
/// @cond
-//To-do: pass to variadic templates
-#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-
-template<class Prev, class Next>
-struct do_pack
-{
- //Use "pack" member template to pack options
- typedef typename Next::template pack<Prev> type;
-};
-
-template<class Prev>
-struct do_pack<Prev, none>
-{
- //Avoid packing "none" to shorten template names
- typedef Prev type;
-};
-
-template
- < class DefaultOptions
- , class O1 = none
- , class O2 = none
- , class O3 = none
- , class O4 = none
- , class O5 = none
- , class O6 = none
- , class O7 = none
- , class O8 = none
- , class O9 = none
- , class O10 = none
- , class O11 = none
- >
-struct pack_options
-{
- // join options
- typedef
- typename do_pack
- < typename do_pack
- < typename do_pack
- < typename do_pack
- < typename do_pack
- < typename do_pack
- < typename do_pack
- < typename do_pack
- < typename do_pack
- < typename do_pack
- < typename do_pack
- < DefaultOptions
- , O1
- >::type
- , O2
- >::type
- , O3
- >::type
- , O4
- >::type
- , O5
- >::type
- , O6
- >::type
- , O7
- >::type
- , O8
- >::type
- , O9
- >::type
- , O10
- >::type
- , O11
- >::type
- type;
-};
-#else
-
-//index_tuple
-template<int... Indexes>
-struct index_tuple{};
-
-//build_number_seq
-template<std::size_t Num, typename Tuple = index_tuple<> >
-struct build_number_seq;
-
-template<std::size_t Num, int... Indexes>
-struct build_number_seq<Num, index_tuple<Indexes...> >
- : build_number_seq<Num - 1, index_tuple<Indexes..., sizeof...(Indexes)> >
-{};
-
-template<int... Indexes>
-struct build_number_seq<0, index_tuple<Indexes...> >
-{ typedef index_tuple<Indexes...> type; };
-
-template<class ...Types>
-struct typelist
-{};
-
-//invert_typelist
-template<class T>
-struct invert_typelist;
-
-template<int I, typename Tuple>
-struct typelist_element;
-
-template<int I, typename Head, typename... Tail>
-struct typelist_element<I, typelist<Head, Tail...> >
-{
- typedef typename typelist_element<I-1, typelist<Tail...> >::type type;
-};
-
-template<typename Head, typename... Tail>
-struct typelist_element<0, typelist<Head, Tail...> >
-{
- typedef Head type;
-};
-
-template<int ...Ints, class ...Types>
-typelist<typename typelist_element<(sizeof...(Types) - 1) - Ints, typelist<Types...> >::type...>
- inverted_typelist(index_tuple<Ints...>, typelist<Types...>)
-{
- return typelist<typename typelist_element<(sizeof...(Types) - 1) - Ints, typelist<Types...> >::type...>();
-}
-
-//sizeof_typelist
-template<class Typelist>
-struct sizeof_typelist;
-
-template<class ...Types>
-struct sizeof_typelist< typelist<Types...> >
-{
- static const std::size_t value = sizeof...(Types);
-};
-
-//invert_typelist_impl
-template<class Typelist, class Indexes>
-struct invert_typelist_impl;
-
-
-template<class Typelist, int ...Ints>
-struct invert_typelist_impl< Typelist, index_tuple<Ints...> >
-{
- static const std::size_t last_idx = sizeof_typelist<Typelist>::value - 1;
- typedef typelist
- <typename typelist_element<last_idx - Ints, Typelist>::type...> type;
-};
-
-template<class Typelist, int Int>
-struct invert_typelist_impl< Typelist, index_tuple<Int> >
-{
- typedef Typelist type;
-};
-
-template<class Typelist>
-struct invert_typelist_impl< Typelist, index_tuple<> >
-{
- typedef Typelist type;
-};
-
-//invert_typelist
-template<class Typelist>
-struct invert_typelist;
-
-template<class ...Types>
-struct invert_typelist< typelist<Types...> >
-{
- typedef typelist<Types...> typelist_t;
- typedef typename build_number_seq<sizeof...(Types)>::type indexes_t;
- typedef typename invert_typelist_impl<typelist_t, indexes_t>::type type;
-};
-
-//Do pack
-template<class Typelist>
-struct do_pack;
-
-template<>
-struct do_pack<typelist<> >;
-
-template<class Prev>
-struct do_pack<typelist<Prev> >
-{
- typedef Prev type;
-};
-
-template<class Prev, class Last>
-struct do_pack<typelist<Prev, Last> >
-{
- typedef typename Prev::template pack<Last> type;
-};
-
-template<class Prev, class ...Others>
-struct do_pack<typelist<Prev, Others...> >
+struct none
{
- typedef typename Prev::template pack
- <typename do_pack<typelist<Others...> >::type> type;
+ template<class Base>
+ struct pack : Base
+ {};
};
-
-template<class ...Options>
-struct pack_options
+struct hook_defaults
{
- typedef typelist<Options...> typelist_t;
- typedef typename invert_typelist<typelist_t>::type inverted_typelist;
- typedef typename do_pack<inverted_typelist>::type type;
+ typedef void* void_pointer;
+ static const link_mode_type link_mode = safe_link;
+ typedef default_tag tag;
+ static const bool optimize_size = false;
+ static const bool store_hash = false;
+ static const bool linear = false;
+ static const bool optimize_multikey = false;
};
-#endif
-
-struct hook_defaults
- : public pack_options
- < none
- , void_pointer<void*>
- , link_mode<safe_link>
- , tag<default_tag>
- , optimize_size<false>
- , store_hash<false>
- , linear<false>
- , optimize_multikey<false>
- >::type
-{};
-
/// @endcond
} //namespace intrusive {
diff --git a/3party/boost/boost/intrusive/pack_options.hpp b/3party/boost/boost/intrusive/pack_options.hpp
new file mode 100644
index 0000000000..7d282dd560
--- /dev/null
+++ b/3party/boost/boost/intrusive/pack_options.hpp
@@ -0,0 +1,370 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2013-2013
+//
+// 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/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_PACK_OPTIONS_HPP
+#define BOOST_INTRUSIVE_PACK_OPTIONS_HPP
+
+#include <boost/intrusive/detail/config_begin.hpp>
+
+namespace boost {
+namespace intrusive {
+
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+
+template<class Prev, class Next>
+struct do_pack
+{
+ //Use "pack" member template to pack options
+ typedef typename Next::template pack<Prev> type;
+};
+
+template<class Prev>
+struct do_pack<Prev, void>
+{
+ //Avoid packing "void" to shorten template names
+ typedef Prev type;
+};
+
+template
+ < class DefaultOptions
+ , class O1 = void
+ , class O2 = void
+ , class O3 = void
+ , class O4 = void
+ , class O5 = void
+ , class O6 = void
+ , class O7 = void
+ , class O8 = void
+ , class O9 = void
+ , class O10 = void
+ , class O11 = void
+ >
+struct pack_options
+{
+ // join options
+ typedef
+ typename do_pack
+ < typename do_pack
+ < typename do_pack
+ < typename do_pack
+ < typename do_pack
+ < typename do_pack
+ < typename do_pack
+ < typename do_pack
+ < typename do_pack
+ < typename do_pack
+ < typename do_pack
+ < DefaultOptions
+ , O1
+ >::type
+ , O2
+ >::type
+ , O3
+ >::type
+ , O4
+ >::type
+ , O5
+ >::type
+ , O6
+ >::type
+ , O7
+ >::type
+ , O8
+ >::type
+ , O9
+ >::type
+ , O10
+ >::type
+ , O11
+ >::type
+ type;
+};
+#else
+
+//index_tuple
+template<int... Indexes>
+struct index_tuple{};
+
+//build_number_seq
+template<std::size_t Num, typename Tuple = index_tuple<> >
+struct build_number_seq;
+
+template<std::size_t Num, int... Indexes>
+struct build_number_seq<Num, index_tuple<Indexes...> >
+ : build_number_seq<Num - 1, index_tuple<Indexes..., sizeof...(Indexes)> >
+{};
+
+template<int... Indexes>
+struct build_number_seq<0, index_tuple<Indexes...> >
+{ typedef index_tuple<Indexes...> type; };
+
+template<class ...Types>
+struct typelist
+{};
+
+//invert_typelist
+template<class T>
+struct invert_typelist;
+
+template<int I, typename Tuple>
+struct typelist_element;
+
+template<int I, typename Head, typename... Tail>
+struct typelist_element<I, typelist<Head, Tail...> >
+{
+ typedef typename typelist_element<I-1, typelist<Tail...> >::type type;
+};
+
+template<typename Head, typename... Tail>
+struct typelist_element<0, typelist<Head, Tail...> >
+{
+ typedef Head type;
+};
+
+template<int ...Ints, class ...Types>
+typelist<typename typelist_element<(sizeof...(Types) - 1) - Ints, typelist<Types...> >::type...>
+ inverted_typelist(index_tuple<Ints...>, typelist<Types...>)
+{
+ return typelist<typename typelist_element<(sizeof...(Types) - 1) - Ints, typelist<Types...> >::type...>();
+}
+
+//sizeof_typelist
+template<class Typelist>
+struct sizeof_typelist;
+
+template<class ...Types>
+struct sizeof_typelist< typelist<Types...> >
+{
+ static const std::size_t value = sizeof...(Types);
+};
+
+//invert_typelist_impl
+template<class Typelist, class Indexes>
+struct invert_typelist_impl;
+
+
+template<class Typelist, int ...Ints>
+struct invert_typelist_impl< Typelist, index_tuple<Ints...> >
+{
+ static const std::size_t last_idx = sizeof_typelist<Typelist>::value - 1;
+ typedef typelist
+ <typename typelist_element<last_idx - Ints, Typelist>::type...> type;
+};
+
+template<class Typelist, int Int>
+struct invert_typelist_impl< Typelist, index_tuple<Int> >
+{
+ typedef Typelist type;
+};
+
+template<class Typelist>
+struct invert_typelist_impl< Typelist, index_tuple<> >
+{
+ typedef Typelist type;
+};
+
+//invert_typelist
+template<class Typelist>
+struct invert_typelist;
+
+template<class ...Types>
+struct invert_typelist< typelist<Types...> >
+{
+ typedef typelist<Types...> typelist_t;
+ typedef typename build_number_seq<sizeof...(Types)>::type indexes_t;
+ typedef typename invert_typelist_impl<typelist_t, indexes_t>::type type;
+};
+
+//Do pack
+template<class Typelist>
+struct do_pack;
+
+template<>
+struct do_pack<typelist<> >;
+
+template<class Prev>
+struct do_pack<typelist<Prev> >
+{
+ typedef Prev type;
+};
+
+template<class Prev, class Last>
+struct do_pack<typelist<Prev, Last> >
+{
+ typedef typename Prev::template pack<Last> type;
+};
+
+template<class Prev, class ...Others>
+struct do_pack<typelist<Prev, Others...> >
+{
+ typedef typename Prev::template pack
+ <typename do_pack<typelist<Others...> >::type> type;
+};
+
+
+template<class DefaultOptions, class ...Options>
+struct pack_options
+{
+ typedef typelist<DefaultOptions, Options...> typelist_t;
+ typedef typename invert_typelist<typelist_t>::type inverted_typelist;
+ typedef typename do_pack<inverted_typelist>::type type;
+};
+
+#endif //!defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+
+#define BOOST_INTRUSIVE_OPTION_TYPE(OPTION_NAME, TYPE, TYPEDEF_EXPR, TYPEDEF_NAME) \
+template< class TYPE> \
+struct OPTION_NAME \
+{ \
+ template<class Base> \
+ struct pack : Base \
+ { \
+ typedef TYPEDEF_EXPR TYPEDEF_NAME; \
+ }; \
+}; \
+//
+
+#define BOOST_INTRUSIVE_OPTION_CONSTANT(OPTION_NAME, TYPE, VALUE, CONSTANT_NAME) \
+template< TYPE VALUE> \
+struct OPTION_NAME \
+{ \
+ template<class Base> \
+ struct pack : Base \
+ { \
+ static const TYPE CONSTANT_NAME = VALUE; \
+ }; \
+}; \
+//
+
+#else //#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+//! This class is a utility that takes:
+//! - a default options class defining initial static constant
+//! and typedefs
+//! - several options defined with BOOST_INTRUSIVE_OPTION_CONSTANT and
+//! BOOST_INTRUSIVE_OPTION_TYPE
+//!
+//! and packs them together in a new type that defines all options as
+//! member typedefs or static constant values. Given options of form:
+//!
+//! \code
+//! BOOST_INTRUSIVE_OPTION_TYPE(my_pointer, VoidPointer, VoidPointer, my_pointer_type)
+//! BOOST_INTRUSIVE_OPTION_CONSTANT(incremental, bool, Enabled, is_incremental)
+//! \endcode
+//!
+//! the following expression
+//!
+//! \code
+//!
+//! struct default_options
+//! {
+//! typedef long int_type;
+//! static const int int_constant = -1;
+//! };
+//!
+//! pack_options< default_options, my_pointer<void*>, incremental<true> >::type
+//! \endcode
+//!
+//! will create a type that will contain the following typedefs/constants
+//!
+//! \code
+//! struct unspecified_type
+//! {
+//! //Default options
+//! typedef long int_type;
+//! static const int int_constant = -1;
+//!
+//! //Packed options (will ovewrite any default option)
+//! typedef void* my_pointer_type;
+//! static const bool is_incremental = true;
+//! };
+//! \endcode
+//!
+//! If an option is specified in the default options argument and later
+//! redefined as an option, the last definition will prevail.
+template<class DefaultOptions, class ...Options>
+struct pack_options
+{
+ typedef unspecified_type type;
+};
+
+//! Defines an option class of name OPTION_NAME that can be used to specify a type
+//! of type TYPE...
+//!
+//! \code
+//! struct OPTION_NAME<class TYPE>
+//! { /*unspecified_content*/ };
+//! \endcode
+//!
+//! ...that after being combined with
+//! <code>boost::intrusive::pack_options</code>,
+//! will typedef TYPE as a typedef of name TYPEDEF_NAME. Example:
+//!
+//! \code
+//! //[includes and namespaces omitted for brevity]
+//!
+//! //This macro will create the following class:
+//! // template<class VoidPointer>
+//! // struct my_pointer
+//! // { unspecified_content };
+//! BOOST_INTRUSIVE_OPTION_TYPE(my_pointer, VoidPointer, boost::remove_pointer<VoidPointer>::type, my_pointer_type)
+//!
+//! struct empty_default{};
+//!
+//! typedef pack_options< empty_default, typename my_pointer<void*> >::type::my_pointer_type type;
+//!
+//! BOOST_STATIC_ASSERT(( boost::is_same<type, void>::value ));
+//!
+//! \endcode
+#define BOOST_INTRUSIVE_OPTION_TYPE(OPTION_NAME, TYPE, TYPEDEF_EXPR, TYPEDEF_NAME)
+
+//! Defines an option class of name OPTION_NAME that can be used to specify a constant
+//! of type TYPE with value VALUE...
+//!
+//! \code
+//! struct OPTION_NAME<TYPE VALUE>
+//! { /*unspecified_content*/ };
+//! \endcode
+//!
+//! ...that after being combined with
+//! <code>boost::intrusive::pack_options</code>,
+//! will contain a CONSTANT_NAME static constant of value VALUE. Example:
+//!
+//! \code
+//! //[includes and namespaces omitted for brevity]
+//!
+//! //This macro will create the following class:
+//! // template<bool Enabled>
+//! // struct incremental
+//! // { unspecified_content };
+//! BOOST_INTRUSIVE_OPTION_CONSTANT(incremental, bool, Enabled, is_incremental)
+//!
+//! struct empty_default{};
+//!
+//! const bool is_incremental = pack_options< empty_default, incremental<true> >::type::is_incremental;
+//!
+//! BOOST_STATIC_ASSERT(( is_incremental == true ));
+//!
+//! \endcode
+#define BOOST_INTRUSIVE_OPTION_CONSTANT(OPTION_NAME, TYPE, VALUE, CONSTANT_NAME)
+
+#endif //#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+
+} //namespace intrusive {
+} //namespace boost {
+
+#include <boost/intrusive/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_INTRUSIVE_PACK_OPTIONS_HPP
diff --git a/3party/boost/boost/intrusive/parent_from_member.hpp b/3party/boost/boost/intrusive/parent_from_member.hpp
index f4658e5c5c..0f3eb5c761 100644
--- a/3party/boost/boost/intrusive/parent_from_member.hpp
+++ b/3party/boost/boost/intrusive/parent_from_member.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2010-2012
+// (C) Copyright Ion Gaztanaga 2010-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +13,8 @@
#define BOOST_INTRUSIVE_GET_PARENT_FROM_MEMBER_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
+
#include <boost/intrusive/detail/parent_from_member.hpp>
namespace boost {
diff --git a/3party/boost/boost/intrusive/pointer_plus_bits.hpp b/3party/boost/boost/intrusive/pointer_plus_bits.hpp
index 273452c7e5..3893d66b6e 100644
--- a/3party/boost/boost/intrusive/pointer_plus_bits.hpp
+++ b/3party/boost/boost/intrusive/pointer_plus_bits.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +13,8 @@
#ifndef BOOST_INTRUSIVE_POINTER_PLUS_BITS_HPP
#define BOOST_INTRUSIVE_POINTER_PLUS_BITS_HPP
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/mpl.hpp> //ls_zeros
#include <boost/intrusive/detail/assert.hpp> //BOOST_INTRUSIVE_INVARIANT_ASSERT
@@ -83,4 +85,6 @@ struct pointer_plus_bits<T*, NumBits>
} //namespace intrusive
} //namespace boost
+#include <boost/intrusive/detail/config_end.hpp>
+
#endif //BOOST_INTRUSIVE_POINTER_PLUS_BITS_HPP
diff --git a/3party/boost/boost/intrusive/pointer_traits.hpp b/3party/boost/boost/intrusive/pointer_traits.hpp
index a19ee6d97d..fe898f6165 100644
--- a/3party/boost/boost/intrusive/pointer_traits.hpp
+++ b/3party/boost/boost/intrusive/pointer_traits.hpp
@@ -6,7 +6,7 @@
//
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2011-2013. 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)
//
@@ -17,14 +17,15 @@
#ifndef BOOST_INTRUSIVE_POINTER_TRAITS_HPP
#define BOOST_INTRUSIVE_POINTER_TRAITS_HPP
-#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/workaround.hpp>
#include <boost/intrusive/detail/memory_util.hpp>
-#include <boost/type_traits/integral_constant.hpp>
+#include <boost/intrusive/detail/mpl.hpp>
#include <cstddef>
namespace boost {
@@ -59,9 +60,7 @@ struct pointer_traits
//!shall be used instead of rebind<U> to obtain a pointer to U.
template <class U> using rebind = unspecified;
- //!Ptr::rebind<U> if such a type exists; otherwise, SomePointer<U, Args> if Ptr is
- //!a class template instantiation of the form SomePointer<T, Args>, where Args is zero or
- //!more type arguments ; otherwise, the instantiation of rebind is ill-formed.
+ //!Ptr::reference if such a type exists (non-standard extension); otherwise, element_type &
//!
typedef element_type &reference;
#else
@@ -73,8 +72,9 @@ struct pointer_traits
//
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
(boost::intrusive::detail::, Ptr, difference_type, std::ptrdiff_t) difference_type;
- //
- typedef typename boost::intrusive::detail::unvoid<element_type>::type& reference;
+
+ typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
+ (boost::intrusive::detail::, Ptr, reference, typename boost::intrusive::detail::unvoid_ref<element_type>::type) reference;
//
template <class U> struct rebind_pointer
{
@@ -97,8 +97,8 @@ struct pointer_traits
//tries to converts &r to pointer.
const bool value = boost::intrusive::detail::
has_member_function_callable_with_pointer_to
- <Ptr, typename boost::intrusive::detail::unvoid<element_type &>::type>::value;
- ::boost::integral_constant<bool, value> flag;
+ <Ptr, reference>::value;
+ boost::intrusive::detail::bool_<value> flag;
return pointer_traits::priv_pointer_to(flag, r);
}
@@ -112,7 +112,7 @@ struct pointer_traits
const bool value = boost::intrusive::detail::
has_member_function_callable_with_static_cast_from
<Ptr, const UPtr>::value;
- ::boost::integral_constant<bool, value> flag;
+ boost::intrusive::detail::bool_<value> flag;
return pointer_traits::priv_static_cast_from(flag, uptr);
}
@@ -126,7 +126,7 @@ struct pointer_traits
const bool value = boost::intrusive::detail::
has_member_function_callable_with_const_cast_from
<Ptr, const UPtr>::value;
- ::boost::integral_constant<bool, value> flag;
+ boost::intrusive::detail::bool_<value> flag;
return pointer_traits::priv_const_cast_from(flag, uptr);
}
@@ -140,7 +140,7 @@ struct pointer_traits
const bool value = boost::intrusive::detail::
has_member_function_callable_with_dynamic_cast_from
<Ptr, const UPtr>::value;
- ::boost::integral_constant<bool, value> flag;
+ boost::intrusive::detail::bool_<value> flag;
return pointer_traits::priv_dynamic_cast_from(flag, uptr);
}
@@ -157,38 +157,46 @@ struct pointer_traits
{ return pointer_traits::to_raw_pointer(p.operator->()); }
//priv_pointer_to
- static pointer priv_pointer_to(boost::true_type, typename boost::intrusive::detail::unvoid<element_type>::type& r)
- { return Ptr::pointer_to(r); }
+ static pointer priv_pointer_to(boost::intrusive::detail::true_, reference r)
+ { return Ptr::pointer_to(r); }
- static pointer priv_pointer_to(boost::false_type, typename boost::intrusive::detail::unvoid<element_type>::type& r)
- { return pointer(boost::intrusive::detail::addressof(r)); }
+ static pointer priv_pointer_to(boost::intrusive::detail::false_, reference r)
+ { return pointer(boost::intrusive::detail::addressof(r)); }
//priv_static_cast_from
template<class UPtr>
- static pointer priv_static_cast_from(boost::true_type, const UPtr &uptr)
+ static pointer priv_static_cast_from(boost::intrusive::detail::true_, const UPtr &uptr)
{ return Ptr::static_cast_from(uptr); }
template<class UPtr>
- static pointer priv_static_cast_from(boost::false_type, const UPtr &uptr)
+ static pointer priv_static_cast_from(boost::intrusive::detail::false_, const UPtr &uptr)
{ return pointer_to(*static_cast<element_type*>(to_raw_pointer(uptr))); }
//priv_const_cast_from
template<class UPtr>
- static pointer priv_const_cast_from(boost::true_type, const UPtr &uptr)
+ static pointer priv_const_cast_from(boost::intrusive::detail::true_, const UPtr &uptr)
{ return Ptr::const_cast_from(uptr); }
template<class UPtr>
- static pointer priv_const_cast_from(boost::false_type, const UPtr &uptr)
+ static pointer priv_const_cast_from(boost::intrusive::detail::false_, const UPtr &uptr)
{ return pointer_to(const_cast<element_type&>(*uptr)); }
//priv_dynamic_cast_from
template<class UPtr>
- static pointer priv_dynamic_cast_from(boost::true_type, const UPtr &uptr)
+ static pointer priv_dynamic_cast_from(boost::intrusive::detail::true_, const UPtr &uptr)
{ return Ptr::dynamic_cast_from(uptr); }
template<class UPtr>
- static pointer priv_dynamic_cast_from(boost::false_type, const UPtr &uptr)
- { return pointer_to(*dynamic_cast<element_type*>(&*uptr)); }
+ static pointer priv_dynamic_cast_from(boost::intrusive::detail::false_, const UPtr &uptr)
+ {
+ element_type *p = dynamic_cast<element_type*>(&*uptr);
+ if(!p){
+ return pointer();
+ }
+ else{
+ return pointer_to(*p);
+ }
+ }
///@endcond
};
@@ -224,7 +232,7 @@ struct pointer_traits<T*>
//!shall be used instead of rebind<U> to obtain a pointer to U.
template <class U> using rebind = U*;
#else
- typedef typename boost::intrusive::detail::unvoid<element_type>::type& reference;
+ typedef typename boost::intrusive::detail::unvoid_ref<element_type>::type reference;
#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
template <class U> using rebind = U*;
#endif
diff --git a/3party/boost/boost/intrusive/priority_compare.hpp b/3party/boost/boost/intrusive/priority_compare.hpp
index abde27ac0d..f6beee1ca9 100644
--- a/3party/boost/boost/intrusive/priority_compare.hpp
+++ b/3party/boost/boost/intrusive/priority_compare.hpp
@@ -23,14 +23,35 @@ namespace intrusive {
template <class T>
struct priority_compare
- : public std::binary_function<T, T, bool>
{
+ //Compatibility with std::binary_function
+ typedef T first_argument_type;
+ typedef T second_argument_type;
+ typedef bool result_type;
+
bool operator()(const T &val, const T &val2) const
{
return priority_order(val, val2);
}
};
+/// @cond
+
+template<class Less, class T>
+struct get_prio
+{
+ typedef Less type;
+};
+
+
+template<class T>
+struct get_prio<void, T>
+{
+ typedef ::boost::intrusive::priority_compare<T> type;
+};
+
+/// @endcond
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/rbtree.hpp b/3party/boost/boost/intrusive/rbtree.hpp
index 32e6b9e168..20f719ce68 100644
--- a/3party/boost/boost/intrusive/rbtree.hpp
+++ b/3party/boost/boost/intrusive/rbtree.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,22 +13,20 @@
#define BOOST_INTRUSIVE_RBTREE_HPP
#include <boost/intrusive/detail/config_begin.hpp>
-#include <algorithm>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <cstddef>
#include <functional>
-#include <iterator>
#include <utility>
#include <boost/intrusive/detail/assert.hpp>
#include <boost/static_assert.hpp>
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/set_hook.hpp>
#include <boost/intrusive/detail/rbtree_node.hpp>
+#include <boost/intrusive/bstree.hpp>
#include <boost/intrusive/detail/tree_node.hpp>
#include <boost/intrusive/detail/ebo_functor_holder.hpp>
#include <boost/intrusive/detail/mpl.hpp>
#include <boost/intrusive/pointer_traits.hpp>
-#include <boost/intrusive/detail/clear_on_destructor_base.hpp>
#include <boost/intrusive/detail/function_detector.hpp>
#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/options.hpp>
@@ -41,26 +39,15 @@ namespace intrusive {
/// @cond
-template <class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize>
-struct setopt
+struct rbtree_defaults
{
- typedef ValueTraits value_traits;
- typedef Compare compare;
- typedef SizeType size_type;
- static const bool constant_time_size = ConstantTimeSize;
+ typedef detail::default_rbtree_hook proto_value_traits;
+ static const bool constant_time_size = true;
+ typedef std::size_t size_type;
+ typedef void compare;
+ typedef void header_holder_type;
};
-template <class T>
-struct set_defaults
- : pack_options
- < none
- , base_hook<detail::default_set_hook>
- , constant_time_size<true>
- , size_type<std::size_t>
- , compare<std::less<T> >
- >::type
-{};
-
/// @endcond
//! The class template rbtree is an intrusive red-black tree container, that
@@ -79,1644 +66,411 @@ struct set_defaults
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class VoidOrKeyComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class rbtree_impl
- : private detail::clear_on_destructor_base<rbtree_impl<Config> >
+ /// @cond
+ : public bstree_impl<ValueTraits, VoidOrKeyComp, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder>
+ /// @endcond
{
- template<class C> friend class detail::clear_on_destructor_base;
public:
- typedef typename Config::value_traits value_traits;
+ typedef ValueTraits value_traits;
/// @cond
- static const bool external_value_traits =
- detail::external_value_traits_bool_is_true<value_traits>::value;
- typedef typename detail::eval_if_c
- < external_value_traits
- , detail::eval_value_traits<value_traits>
- , detail::identity<value_traits>
- >::type real_value_traits;
+ typedef bstree_impl< ValueTraits, VoidOrKeyComp, SizeType
+ , ConstantTimeSize, RbTreeAlgorithms
+ , HeaderHolder> tree_type;
+ typedef tree_type implementation_defined;
/// @endcond
- typedef typename real_value_traits::pointer pointer;
- typedef typename real_value_traits::const_pointer const_pointer;
-
- typedef typename pointer_traits<pointer>::element_type value_type;
- typedef value_type key_type;
- typedef typename pointer_traits<pointer>::reference reference;
- typedef typename pointer_traits<const_pointer>::reference const_reference;
- typedef typename pointer_traits<const_pointer>::difference_type difference_type;
- typedef typename Config::size_type size_type;
- typedef typename Config::compare value_compare;
- typedef value_compare key_compare;
- typedef tree_iterator<rbtree_impl, false> iterator;
- typedef tree_iterator<rbtree_impl, true> const_iterator;
- typedef boost::intrusive::detail::reverse_iterator<iterator> reverse_iterator;
- typedef boost::intrusive::detail::reverse_iterator<const_iterator>const_reverse_iterator;
- typedef typename real_value_traits::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename node_traits::node_ptr node_ptr;
- typedef typename node_traits::const_node_ptr const_node_ptr;
- typedef rbtree_algorithms<node_traits> node_algorithms;
-
- static const bool constant_time_size = Config::constant_time_size;
- static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
+
+ typedef typename implementation_defined::pointer pointer;
+ typedef typename implementation_defined::const_pointer const_pointer;
+ typedef typename implementation_defined::value_type value_type;
+ typedef typename implementation_defined::key_type key_type;
+ typedef typename implementation_defined::reference reference;
+ typedef typename implementation_defined::const_reference const_reference;
+ typedef typename implementation_defined::difference_type difference_type;
+ typedef typename implementation_defined::size_type size_type;
+ typedef typename implementation_defined::value_compare value_compare;
+ typedef typename implementation_defined::key_compare key_compare;
+ typedef typename implementation_defined::iterator iterator;
+ typedef typename implementation_defined::const_iterator const_iterator;
+ typedef typename implementation_defined::reverse_iterator reverse_iterator;
+ typedef typename implementation_defined::const_reverse_iterator const_reverse_iterator;
+ typedef typename implementation_defined::node_traits node_traits;
+ typedef typename implementation_defined::node node;
+ typedef typename implementation_defined::node_ptr node_ptr;
+ typedef typename implementation_defined::const_node_ptr const_node_ptr;
+ typedef typename implementation_defined::node_algorithms node_algorithms;
+
+ static const bool constant_time_size = implementation_defined::constant_time_size;
/// @cond
private:
- typedef detail::size_holder<constant_time_size, size_type> size_traits;
//noncopyable
BOOST_MOVABLE_BUT_NOT_COPYABLE(rbtree_impl)
- enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
+ /// @endcond
- //Constant-time size is incompatible with auto-unlink hooks!
- BOOST_STATIC_ASSERT(!(constant_time_size && ((int)real_value_traits::link_mode == (int)auto_unlink)));
+ public:
- struct header_plus_size : public size_traits
- { node header_; };
+ typedef typename implementation_defined::insert_commit_data insert_commit_data;
- struct node_plus_pred_t : public detail::ebo_functor_holder<value_compare>
- {
- node_plus_pred_t(const value_compare &comp)
- : detail::ebo_functor_holder<value_compare>(comp)
- {}
- header_plus_size header_plus_size_;
- };
+ //! @copydoc ::boost::intrusive::bstree::bstree(const value_compare &,const value_traits &)
+ explicit rbtree_impl( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
+ {}
- struct data_t : public rbtree_impl::value_traits
- {
- typedef typename rbtree_impl::value_traits value_traits;
- data_t(const value_compare & comp, const value_traits &val_traits)
- : value_traits(val_traits), node_plus_pred_(comp)
- {}
- node_plus_pred_t node_plus_pred_;
- } data_;
+ //! @copydoc ::boost::intrusive::bstree::bstree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
+ template<class Iterator>
+ rbtree_impl( bool unique, Iterator b, Iterator e
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(unique, b, e, cmp, v_traits)
+ {}
- const value_compare &priv_comp() const
- { return data_.node_plus_pred_.get(); }
+ //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&)
+ rbtree_impl(BOOST_RV_REF(rbtree_impl) x)
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
+ {}
- value_compare &priv_comp()
- { return data_.node_plus_pred_.get(); }
+ //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&)
+ rbtree_impl& operator=(BOOST_RV_REF(rbtree_impl) x)
+ { return static_cast<rbtree_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
- const value_traits &priv_value_traits() const
- { return data_; }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::~bstree()
+ ~rbtree_impl();
- value_traits &priv_value_traits()
- { return data_; }
+ //! @copydoc ::boost::intrusive::bstree::begin()
+ iterator begin();
- node_ptr priv_header_ptr()
- { return pointer_traits<node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_size_.header_); }
+ //! @copydoc ::boost::intrusive::bstree::begin()const
+ const_iterator begin() const;
- const_node_ptr priv_header_ptr() const
- { return pointer_traits<const_node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_size_.header_); }
+ //! @copydoc ::boost::intrusive::bstree::cbegin()const
+ const_iterator cbegin() const;
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
+ //! @copydoc ::boost::intrusive::bstree::end()
+ iterator end();
- size_traits &priv_size_traits()
- { return data_.node_plus_pred_.header_plus_size_; }
+ //! @copydoc ::boost::intrusive::bstree::end()const
+ const_iterator end() const;
- const size_traits &priv_size_traits() const
- { return data_.node_plus_pred_.header_plus_size_; }
+ //! @copydoc ::boost::intrusive::bstree::cend()const
+ const_iterator cend() const;
- const real_value_traits &get_real_value_traits(detail::bool_<false>) const
- { return data_; }
+ //! @copydoc ::boost::intrusive::bstree::rbegin()
+ reverse_iterator rbegin();
- const real_value_traits &get_real_value_traits(detail::bool_<true>) const
- { return data_.get_value_traits(*this); }
+ //! @copydoc ::boost::intrusive::bstree::rbegin()const
+ const_reverse_iterator rbegin() const;
- real_value_traits &get_real_value_traits(detail::bool_<false>)
- { return data_; }
+ //! @copydoc ::boost::intrusive::bstree::crbegin()const
+ const_reverse_iterator crbegin() const;
- real_value_traits &get_real_value_traits(detail::bool_<true>)
- { return data_.get_value_traits(*this); }
+ //! @copydoc ::boost::intrusive::bstree::rend()
+ reverse_iterator rend();
- protected:
- value_compare &prot_comp()
- { return priv_comp(); }
+ //! @copydoc ::boost::intrusive::bstree::rend()const
+ const_reverse_iterator rend() const;
- const node &prot_header_node() const
- { return data_.node_plus_pred_.header_plus_size_.header_; }
+ //! @copydoc ::boost::intrusive::bstree::crend()const
+ const_reverse_iterator crend() const;
- node &prot_header_node()
- { return data_.node_plus_pred_.header_plus_size_.header_; }
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(iterator)
+ static rbtree_impl &container_from_end_iterator(iterator end_iterator);
- void prot_set_size(size_type s)
- { this->priv_size_traits().set_size(s); }
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(const_iterator)
+ static const rbtree_impl &container_from_end_iterator(const_iterator end_iterator);
- /// @endcond
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(iterator)
+ static rbtree_impl &container_from_iterator(iterator it);
- public:
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(const_iterator)
+ static const rbtree_impl &container_from_iterator(const_iterator it);
- const real_value_traits &get_real_value_traits() const
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
+ //! @copydoc ::boost::intrusive::bstree::key_comp()const
+ key_compare key_comp() const;
- real_value_traits &get_real_value_traits()
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
+ //! @copydoc ::boost::intrusive::bstree::value_comp()const
+ value_compare value_comp() const;
- typedef typename node_algorithms::insert_commit_data insert_commit_data;
+ //! @copydoc ::boost::intrusive::bstree::empty()const
+ bool empty() const;
- //! <b>Effects</b>: Constructs an empty tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructorof the value_compare object throws. Basic guarantee.
- explicit rbtree_impl( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : data_(cmp, v_traits)
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty tree and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is the distance between first and last.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws. Basic guarantee.
- template<class Iterator>
- rbtree_impl( bool unique, Iterator b, Iterator e
- , const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : data_(cmp, v_traits)
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- if(unique)
- this->insert_unique(b, e);
- else
- this->insert_equal(b, e);
- }
-
- //! <b>Effects</b>: to-do
- //!
- rbtree_impl(BOOST_RV_REF(rbtree_impl) x)
- : data_(::boost::move(x.priv_comp()), ::boost::move(x.priv_value_traits()))
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- this->swap(x);
- }
-
- //! <b>Effects</b>: to-do
- //!
- rbtree_impl& operator=(BOOST_RV_REF(rbtree_impl) x)
- { this->swap(x); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the set
- //! are not deleted (i.e. no destructors are called), but the nodes according to
- //! the value_traits template parameter are reinitialized and thus can be reused.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this.
- //!
- //! <b>Throws</b>: Nothing.
- ~rbtree_impl()
- {}
+ //! @copydoc ::boost::intrusive::bstree::size()const
+ size_type size() const;
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return iterator (node_traits::get_left(this->priv_header_ptr()), this); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return cbegin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return const_iterator (node_traits::get_left(this->priv_header_ptr()), this); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return iterator (this->priv_header_ptr(), this); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return cend(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return const_iterator (uncast(this->priv_header_ptr()), this); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return reverse_iterator(end()); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator(end()); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return const_reverse_iterator(end()); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return reverse_iterator(begin()); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return const_reverse_iterator(begin()); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return const_reverse_iterator(begin()); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the rbtree associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static rbtree_impl &container_from_end_iterator(iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the rbtree associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const rbtree_impl &container_from_end_iterator(const_iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
-
- //! <b>Precondition</b>: it must be a valid iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static rbtree_impl &container_from_iterator(iterator it)
- { return priv_container_from_iterator(it); }
-
- //! <b>Precondition</b>: it must be a valid end const_iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the tree associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const rbtree_impl &container_from_iterator(const_iterator it)
- { return priv_container_from_iterator(it); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return priv_comp(); }
-
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return node_algorithms::unique(this->priv_header_ptr()); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the tree.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this
- //! if constant-time size option is disabled. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- {
- if(constant_time_size)
- return this->priv_size_traits().get_size();
- else{
- return (size_type)node_algorithms::size(this->priv_header_ptr());
- }
- }
-
- //! <b>Effects</b>: Swaps the contents of two rbtrees.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the comparison functor's swap call throws.
- void swap(rbtree_impl& other)
- {
- //This can throw
- using std::swap;
- swap(priv_comp(), priv_comp());
- //These can't throw
- node_algorithms::swap_tree(this->priv_header_ptr(), node_ptr(other.priv_header_ptr()));
- 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());
- other.priv_size_traits().set_size(backup);
- }
- }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the tree before the upper bound.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- iterator insert_equal(reference value)
- {
- detail::key_nodeptr_comp<value_compare, rbtree_impl>
- key_node_comp(priv_comp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- iterator ret(node_algorithms::insert_equal_upper_bound
- (this->priv_header_ptr(), to_insert, key_node_comp), this);
- this->priv_size_traits().increment();
- return ret;
- }
-
- //! <b>Requires</b>: value must be an lvalue, and "hint" must be
- //! a valid iterator.
- //!
- //! <b>Effects</b>: Inserts x into the tree, using "hint" as a hint to
- //! where it will be inserted. If "hint" is the upper_bound
- //! the insertion takes constant time (two comparisons in the worst case)
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- iterator insert_equal(const_iterator hint, reference value)
- {
- detail::key_nodeptr_comp<value_compare, rbtree_impl>
- key_node_comp(priv_comp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- iterator ret(node_algorithms::insert_equal
- (this->priv_header_ptr(), hint.pointed_node(), to_insert, key_node_comp), this);
- this->priv_size_traits().increment();
- return ret;
- }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a each element of a range into the tree
- //! before the upper bound of the key of each element.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- template<class Iterator>
- void insert_equal(Iterator b, Iterator e)
- {
- iterator iend(this->end());
- for (; b != e; ++b)
- this->insert_equal(iend, *b);
- }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the tree if the value
- //! is not already present.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- std::pair<iterator, bool> insert_unique(reference value)
- {
- insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(value, priv_comp(), commit_data);
- if(!ret.second)
- return ret;
- return std::pair<iterator, bool> (insert_unique_commit(value, commit_data), true);
- }
-
- //! <b>Requires</b>: value must be an lvalue, and "hint" must be
- //! a valid iterator
- //!
- //! <b>Effects</b>: Tries to insert x into the tree, using "hint" as a hint
- //! to where it will be inserted.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time (two comparisons in the worst case)
- //! if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- iterator insert_unique(const_iterator hint, reference value)
- {
- insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(hint, value, priv_comp(), commit_data);
- if(!ret.second)
- return ret.first;
- return insert_unique_commit(value, commit_data);
- }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Tries to insert each element of a range into the tree.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::bstree::swap
+ void swap(rbtree_impl& other);
+
+ //! @copydoc ::boost::intrusive::bstree::clone_from
+ template <class Cloner, class Disposer>
+ void clone_from(const rbtree_impl &src, Cloner cloner, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(reference)
+ iterator insert_equal(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(const_iterator,reference)
+ iterator insert_equal(const_iterator hint, reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(Iterator,Iterator)
template<class Iterator>
- void insert_unique(Iterator b, Iterator e)
- {
- if(this->empty()){
- iterator iend(this->end());
- for (; b != e; ++b)
- this->insert_unique(iend, *b);
- }
- else{
- for (; b != e; ++b)
- this->insert_unique(*b);
- }
- }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the container, using
- //! a user provided key instead of the value itself.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that
- //! part to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the container.
+ void insert_equal(Iterator b, Iterator e);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(reference)
+ std::pair<iterator, bool> insert_unique(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(const_iterator,reference)
+ iterator insert_unique(const_iterator hint, reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_unique_check
- (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- comp(key_value_comp, this);
- std::pair<node_ptr, bool> ret =
- (node_algorithms::insert_unique_check
- (this->priv_header_ptr(), key, comp, commit_data));
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
- }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the container, using
- //! a user provided key instead of the value itself, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! constructing that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that key
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This can give a total
- //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the container.
+ (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_unique_check
(const_iterator hint, const KeyType &key
- ,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- comp(key_value_comp, this);
- std::pair<node_ptr, bool> ret =
- (node_algorithms::insert_unique_check
- (this->priv_header_ptr(), hint.pointed_node(), key, comp, commit_data));
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
- }
-
- //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
- //! must have been obtained from a previous call to "insert_check".
- //! No objects should have been inserted or erased from the container between
- //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
- //!
- //! <b>Effects</b>: Inserts the value in the avl_set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Returns</b>: An iterator to the newly inserted object.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- iterator insert_unique_commit(reference value, const insert_commit_data &commit_data)
- {
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- node_algorithms::insert_unique_commit
- (this->priv_header_ptr(), to_insert, commit_data);
- this->priv_size_traits().increment();
- return iterator(to_insert, this);
- }
-
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate
- //!
- //! <b>Effects</b>: Inserts x into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" tree ordering invariant will be broken.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- {
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- this->priv_size_traits().increment();
- return iterator(node_algorithms::insert_before
- (this->priv_header_ptr(), pos.pointed_node(), to_insert), this);
- }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no less
- //! than the greatest inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than the greatest inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- {
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- this->priv_size_traits().increment();
- node_algorithms::push_back(this->priv_header_ptr(), to_insert);
- }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no greater
- //! than the minimum inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than the minimum inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- {
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- this->priv_size_traits().increment();
- node_algorithms::push_front(this->priv_header_ptr(), to_insert);
- }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- {
- const_iterator ret(i);
- ++ret;
- node_ptr to_erase(i.pointed_node());
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!node_algorithms::unique(to_erase));
- node_algorithms::erase(this->priv_header_ptr(), to_erase);
- this->priv_size_traits().decrement();
- if(safemode_or_autounlink)
- node_algorithms::init(to_erase);
- return ret.unconst();
- }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { size_type n; return private_erase(b, e, n); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return this->erase(value, priv_comp()); }
-
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ ,KeyValueCompare key_value_comp, insert_commit_data &commit_data);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_commit
+ iterator insert_unique_commit(reference value, const insert_commit_data &commit_data);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(Iterator,Iterator)
+ template<class Iterator>
+ void insert_unique(Iterator b, Iterator e);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- {
- std::pair<iterator,iterator> p = this->equal_range(key, comp);
- size_type n;
- private_erase(p.first, p.second, n);
- return n;
- }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- {
- node_ptr to_erase(i.pointed_node());
- iterator ret(this->erase(i));
- disposer(get_real_value_traits().to_value_ptr(to_erase));
- return ret;
- }
-
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ size_type erase(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- {
- std::pair<iterator,iterator> p = this->equal_range(value);
- size_type n;
- private_erase(p.first, p.second, n, disposer);
- return n;
- }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { size_type n; return private_erase(b, e, n, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- {
- std::pair<iterator,iterator> p = this->equal_range(key, comp);
- size_type n;
- private_erase(p.first, p.second, n, disposer);
- return n;
- }
-
- //! <b>Effects</b>: Erases all of the elements.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- {
- if(safemode_or_autounlink){
- this->clear_and_dispose(detail::null_disposer());
- }
- else{
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(0);
- }
- }
-
- //! <b>Effects</b>: Erases all of the elements calling disposer(p) for
- //! each node to be erased.
- //! <b>Complexity</b>: Average complexity for is at most O(log(size() + N)),
- //! where N is the number of elements in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. Calls N times to disposer functor.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::bstree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- {
- node_algorithms::clear_and_dispose(this->priv_header_ptr()
- , detail::node_disposer<Disposer, rbtree_impl>(disposer, this));
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(0);
- }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given value
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given value.
- //!
- //! <b>Throws</b>: Nothing.
- size_type count(const_reference value) const
- { return this->count(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: Nothing.
+ void clear_and_dispose(Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree::count(const_reference)const
+ size_type count(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType &key, KeyValueCompare comp) const
- {
- std::pair<const_iterator, const_iterator> ret = this->equal_range(key, comp);
- return std::distance(ret.first, ret.second);
- }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator lower_bound(const_reference value)
- { return this->lower_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator lower_bound(const_reference value) const
- { return this->lower_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator upper_bound(const_reference value)
- { return this->upper_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::upper_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator upper_bound(const_reference value) const
- { return this->upper_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::upper_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator find(const_reference value)
- { return this->find(value, priv_comp()); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- return iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator find(const_reference value) const
- { return this->find(value, priv_comp()); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- return const_iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this);
- }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return this->equal_range(value, priv_comp()); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range(const_reference value) const
- { return this->equal_range(value, priv_comp()); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ equal_range(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
- std::pair<const_iterator,const_iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)const
+ std::pair<const_iterator, const_iterator>
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator,const_iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, rbtree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
- template <class Cloner, class Disposer>
- void clone_from(const rbtree_impl &src, Cloner cloner, Disposer disposer)
- {
- this->clear_and_dispose(disposer);
- if(!src.empty()){
- detail::exception_disposer<rbtree_impl, Disposer>
- rollback(*this, disposer);
- node_algorithms::clone
- (const_node_ptr(src.priv_header_ptr())
- ,node_ptr(this->priv_header_ptr())
- ,detail::node_cloner<Cloner, rbtree_impl>(cloner, this)
- ,detail::node_disposer<Disposer, rbtree_impl>(disposer, this));
- this->priv_size_traits().set_size(src.priv_size_traits().get_size());
- this->priv_comp() = src.priv_comp();
- rollback.release();
- }
- }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- {
- node_ptr to_be_disposed(node_algorithms::unlink_leftmost_without_rebalance
- (this->priv_header_ptr()));
- if(!to_be_disposed)
- return 0;
- this->priv_size_traits().decrement();
- if(safemode_or_autounlink)//If this is commented does not work with normal_link
- node_algorithms::init(to_be_disposed);
- return get_real_value_traits().to_value_ptr(to_be_disposed);
- }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- {
- node_algorithms::replace_node( get_real_value_traits().to_node_ptr(*replace_this)
- , this->priv_header_ptr()
- , get_real_value_traits().to_node_ptr(with_this));
- if(safemode_or_autounlink)
- node_algorithms::init(replace_this.pointed_node());
- }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return iterator (value_traits::to_node_ptr(value), 0);
- }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), 0);
- }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return iterator (value_traits::to_node_ptr(value), this); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), this); }
-
- //! <b>Requires</b>: value shall not be in a tree.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { node_algorithms::init(value_traits::to_node_ptr(value)); }
-
- //! <b>Effects</b>: removes "value" from the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic time.
- //!
- //! <b>Note</b>: This static function is only usable with non-constant
- //! time size containers that have stateless comparison functors.
- //!
- //! If the user calls
- //! this function with a constant time size container or stateful comparison
- //! functor a compilation error will be issued.
- static void remove_node(reference value)
- {
- BOOST_STATIC_ASSERT((!constant_time_size));
- node_ptr to_remove(value_traits::to_node_ptr(value));
- node_algorithms::unlink(to_remove);
- if(safemode_or_autounlink)
- node_algorithms::init(to_remove);
- }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
- private:
- template<class Disposer>
- iterator private_erase(const_iterator b, const_iterator e, size_type &n, Disposer disposer)
- {
- for(n = 0; b != e; ++n)
- this->erase_and_dispose(b++, disposer);
- return b.unconst();
- }
-
- iterator private_erase(const_iterator b, const_iterator e, size_type &n)
- {
- for(n = 0; b != e; ++n)
- this->erase(b++);
- return b.unconst();
- }
- /// @endcond
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- private:
- static rbtree_impl &priv_container_from_end_iterator(const const_iterator &end_iterator)
- {
- header_plus_size *r = detail::parent_from_member<header_plus_size, node>
- ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), &header_plus_size::header_);
- node_plus_pred_t *n = detail::parent_from_member
- <node_plus_pred_t, header_plus_size>(r, &node_plus_pred_t::header_plus_size_);
- data_t *d = detail::parent_from_member<data_t, node_plus_pred_t>(n, &data_t::node_plus_pred_);
- rbtree_impl *rb = detail::parent_from_member<rbtree_impl, data_t>(d, &rbtree_impl::data_);
- return *rb;
- }
-
- static rbtree_impl &priv_container_from_iterator(const const_iterator &it)
- { return priv_container_from_end_iterator(it.end_iterator_from_it()); }
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::bstree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::bstree::remove_node
+ void remove_node(reference value);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y)
-#else
-(const rbtree_impl<Config> &x, const rbtree_impl<Config> &y)
-#endif
-{ return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
+bool operator< (const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-bool operator==
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y)
-#else
-(const rbtree_impl<Config> &x, const rbtree_impl<Config> &y)
-#endif
-{
- typedef rbtree_impl<Config> tree_type;
- typedef typename tree_type::const_iterator const_iterator;
-
- if(tree_type::constant_time_size && x.size() != y.size()){
- return false;
- }
- const_iterator end1 = x.end();
- const_iterator i1 = x.begin();
- const_iterator i2 = y.begin();
- if(tree_type::constant_time_size){
- while (i1 != end1 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1;
- }
- else{
- const_iterator end2 = y.end();
- while (i1 != end1 && i2 != end2 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1 && i2 == end2;
- }
-}
+bool operator==(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y)
-#else
-(const rbtree_impl<Config> &x, const rbtree_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y)
-#else
-(const rbtree_impl<Config> &x, const rbtree_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y)
-#else
-(const rbtree_impl<Config> &x, const rbtree_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y)
-#else
-(const rbtree_impl<Config> &x, const rbtree_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const rbtree_impl<T, Options...> &x, const rbtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(rbtree_impl<T, Options...> &x, rbtree_impl<T, Options...> &y)
-#else
-(rbtree_impl<Config> &x, rbtree_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(rbtree_impl<T, Options...> &x, rbtree_impl<T, Options...> &y);
-/// @cond
-#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none
- >
-#else
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+//! Helper metafunction to define a \c rbtree that yields to the same type when the
+//! same options (either explicitly or implicitly) are used.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
+#else
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
-struct make_rbtree_opt
+struct make_rbtree
{
+ /// @cond
typedef typename pack_options
- < set_defaults<T>,
+ < rbtree_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
>::type packed_options;
+
typedef typename detail::get_value_traits
- <T, typename packed_options::value_traits>::type value_traits;
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
- typedef setopt
+ typedef rbtree_impl
< value_traits
, typename packed_options::compare
, typename packed_options::size_type
, packed_options::constant_time_size
- > type;
-};
-/// @endcond
-
-//! Helper metafunction to define a \c rbtree that yields to the same type when the
-//! same options (either explicitly or implicitly) are used.
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class ...Options>
-#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
-#endif
-struct make_rbtree
-{
- /// @cond
- typedef rbtree_impl
- < typename make_rbtree_opt<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
- > implementation_defined;
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class rbtree
: public make_rbtree<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -1725,7 +479,7 @@ class rbtree
typedef typename make_rbtree
<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -1735,15 +489,16 @@ class rbtree
public:
typedef typename Base::value_compare value_compare;
typedef typename Base::value_traits value_traits;
- typedef typename Base::real_value_traits real_value_traits;
typedef typename Base::iterator iterator;
typedef typename Base::const_iterator const_iterator;
+ typedef typename Base::reverse_iterator reverse_iterator;
+ typedef typename Base::const_reverse_iterator const_reverse_iterator;
//Assert if passed value traits are compatible with the type
- BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- rbtree( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit rbtree( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
@@ -1759,7 +514,7 @@ class rbtree
{}
rbtree& operator=(BOOST_RV_REF(rbtree) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<rbtree &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static rbtree &container_from_end_iterator(iterator end_iterator)
{ return static_cast<rbtree &>(Base::container_from_end_iterator(end_iterator)); }
@@ -1767,16 +522,15 @@ class rbtree
static const rbtree &container_from_end_iterator(const_iterator end_iterator)
{ return static_cast<const rbtree &>(Base::container_from_end_iterator(end_iterator)); }
- static rbtree &container_from_it(iterator it)
+ static rbtree &container_from_iterator(iterator it)
{ return static_cast<rbtree &>(Base::container_from_iterator(it)); }
- static const rbtree &container_from_it(const_iterator it)
+ static const rbtree &container_from_iterator(const_iterator it)
{ return static_cast<const rbtree &>(Base::container_from_iterator(it)); }
};
#endif
-
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/rbtree_algorithms.hpp b/3party/boost/boost/intrusive/rbtree_algorithms.hpp
index fc28630da3..0c1225e3f8 100644
--- a/3party/boost/boost/intrusive/rbtree_algorithms.hpp
+++ b/3party/boost/boost/intrusive/rbtree_algorithms.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012.
+// (C) Copyright Ion Gaztanaga 2006-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -10,31 +10,6 @@
// See http://www.boost.org/libs/intrusive for documentation.
//
/////////////////////////////////////////////////////////////////////////////
-// The internal implementation of red-black trees is based on that of SGI STL
-// stl_tree.h file:
-//
-// Copyright (c) 1996,1997
-// Silicon Graphics Computer Systems, Inc.
-//
-// Permission to use, copy, modify, distribute and sell this software
-// and its documentation for any purpose is hereby granted without fee,
-// provided that the above copyright notice appear in all copies and
-// that both that copyright notice and this permission notice appear
-// in supporting documentation. Silicon Graphics makes no
-// representations about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied warranty.
-//
-//
-// Copyright (c) 1994
-// Hewlett-Packard Company
-//
-// Permission to use, copy, modify, distribute and sell this software
-// and its documentation for any purpose is hereby granted without fee,
-// provided that the above copyright notice appear in all copies and
-// that both that copyright notice and this permission notice appear
-// in supporting documentation. Hewlett-Packard Company makes no
-// representations about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied warranty.
//
// The tree destruction algorithm is based on Julienne Walker and The EC Team code:
//
@@ -49,18 +24,41 @@
#define BOOST_INTRUSIVE_RBTREE_ALGORITHMS_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <cstddef>
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/detail/utilities.hpp>
-#include <boost/intrusive/detail/tree_algorithms.hpp>
+#include <boost/intrusive/bstree_algorithms.hpp>
#include <boost/intrusive/pointer_traits.hpp>
namespace boost {
namespace intrusive {
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+template<class NodeTraits, class F>
+struct rbtree_node_cloner
+ : private detail::ebo_functor_holder<F>
+{
+ typedef typename NodeTraits::node_ptr node_ptr;
+ typedef detail::ebo_functor_holder<F> base_t;
+
+ rbtree_node_cloner(F f)
+ : base_t(f)
+ {}
+
+ node_ptr operator()(const node_ptr & p)
+ {
+ node_ptr n = base_t::get()(p);
+ NodeTraits::set_color(n, NodeTraits::get_color(p));
+ return n;
+ }
+};
+
+#endif //#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
//! rbtree_algorithms provides basic algorithms to manipulate
//! nodes forming a red-black tree. The insertion and deletion algorithms are
//! based on those in Cormen, Leiserson, and Rivest, Introduction to Algorithms
@@ -82,7 +80,7 @@ namespace intrusive {
//!
//! <b>Typedefs</b>:
//!
-//! <tt>node</tt>: The type of the node that forms the circular list
+//! <tt>node</tt>: The type of the node that forms the binary search tree
//!
//! <tt>node_ptr</tt>: A pointer to a node
//!
@@ -113,6 +111,9 @@ namespace intrusive {
//! <tt>static color red();</tt>
template<class NodeTraits>
class rbtree_algorithms
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_algorithms<NodeTraits>
+ #endif
{
public:
typedef NodeTraits node_traits;
@@ -124,167 +125,71 @@ class rbtree_algorithms
/// @cond
private:
- typedef detail::tree_algorithms<NodeTraits> tree_algorithms;
+ typedef bstree_algorithms<NodeTraits> bstree_algo;
- template<class F>
- struct rbtree_node_cloner
- : private detail::ebo_functor_holder<F>
- {
- typedef detail::ebo_functor_holder<F> base_t;
+ /// @endcond
- rbtree_node_cloner(F f)
- : base_t(f)
- {}
+ public:
- node_ptr operator()(const node_ptr & p)
- {
- node_ptr n = base_t::get()(p);
- NodeTraits::set_color(n, NodeTraits::get_color(p));
- return n;
- }
- };
+ //! This type is the information that will be
+ //! filled by insert_unique_check
+ typedef typename bstree_algo::insert_commit_data insert_commit_data;
- struct rbtree_erase_fixup
- {
- void operator()(const node_ptr & to_erase, const node_ptr & successor)
- {
- //Swap color of y and z
- color tmp(NodeTraits::get_color(successor));
- NodeTraits::set_color(successor, NodeTraits::get_color(to_erase));
- NodeTraits::set_color(to_erase, tmp);
- }
- };
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
- /// @endcond
+ //! @copydoc ::boost::intrusive::bstree_algorithms::get_header(const const_node_ptr&)
+ static node_ptr get_header(const const_node_ptr & n);
- public:
- static node_ptr begin_node(const const_node_ptr & header)
- { return tree_algorithms::begin_node(header); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::begin_node
+ static node_ptr begin_node(const const_node_ptr & header);
- static node_ptr end_node(const const_node_ptr & header)
- { return tree_algorithms::end_node(header); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::end_node
+ static node_ptr end_node(const const_node_ptr & header);
- //! This type is the information that will be
- //! filled by insert_unique_check
- typedef typename tree_algorithms::insert_commit_data insert_commit_data;
-
- //! <b>Requires</b>: header1 and header2 must be the header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two trees. After the function header1 will contain
- //! links to the second tree and header2 will have links to the first tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static void swap_tree(const node_ptr & header1, const node_ptr & header2)
- { return tree_algorithms::swap_tree(header1, header2); }
-
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_tree
+ static void swap_tree(const node_ptr & header1, const node_ptr & header2);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&)
static void swap_nodes(const node_ptr & node1, const node_ptr & node2)
{
if(node1 == node2)
return;
- node_ptr header1(tree_algorithms::get_header(node1)), header2(tree_algorithms::get_header(node2));
+ node_ptr header1(bstree_algo::get_header(node1)), header2(bstree_algo::get_header(node2));
swap_nodes(node1, header1, node2, header2);
}
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees with header header1 and header2.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&,const node_ptr&,const node_ptr&)
static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2)
{
if(node1 == node2) return;
- tree_algorithms::swap_nodes(node1, header1, node2, header2);
+ bstree_algo::swap_nodes(node1, header1, node2, header2);
//Swap color
color c = NodeTraits::get_color(node1);
NodeTraits::set_color(node1, NodeTraits::get_color(node2));
NodeTraits::set_color(node2, c);
}
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing and comparison is needed.
- //!
- //!Experimental function
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&)
static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node)
{
if(node_to_be_replaced == new_node)
return;
- replace_node(node_to_be_replaced, tree_algorithms::get_header(node_to_be_replaced), new_node);
+ replace_node(node_to_be_replaced, bstree_algo::get_header(node_to_be_replaced), new_node);
}
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! with header "header" and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- //!
- //!Experimental function
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&,const node_ptr&)
static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node)
{
- tree_algorithms::replace_node(node_to_be_replaced, header, new_node);
+ bstree_algo::replace_node(node_to_be_replaced, header, new_node);
NodeTraits::set_color(new_node, NodeTraits::get_color(node_to_be_replaced));
}
- //! <b>Requires</b>: node is a tree node but not the header.
- //!
- //! <b>Effects</b>: Unlinks the node and rebalances the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static void unlink(const node_ptr & node)
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unlink(const node_ptr&)
+ static void unlink(const node_ptr& node)
{
node_ptr x = NodeTraits::get_parent(node);
if(x){
@@ -294,577 +199,257 @@ class rbtree_algorithms
}
}
- //! <b>Requires</b>: header is the header of a tree.
- //!
- //! <b>Effects</b>: Unlinks the leftmost node from the tree, and
- //! updates the header link to the new leftmost node.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header)
- { return tree_algorithms::unlink_leftmost_without_rebalance(header); }
-
- //! <b>Requires</b>: node is a node of the tree or an node initialized
- //! by init(...).
- //!
- //! <b>Effects</b>: Returns true if the node is initialized by init().
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static bool unique(const const_node_ptr & node)
- { return tree_algorithms::unique(node); }
-
- //! <b>Requires</b>: node is a node of the tree but it's not the header.
- //!
- //! <b>Effects</b>: Returns the number of nodes of the subtree.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t count(const const_node_ptr & node)
- { return tree_algorithms::count(node); }
-
- //! <b>Requires</b>: header is the header node of the tree.
- //!
- //! <b>Effects</b>: Returns the number of nodes above the header.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t size(const const_node_ptr & header)
- { return tree_algorithms::size(header); }
-
- //! <b>Requires</b>: p is a node from the tree except the header.
- //!
- //! <b>Effects</b>: Returns the next node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr next_node(const node_ptr & p)
- { return tree_algorithms::next_node(p); }
-
- //! <b>Requires</b>: p is a node from the tree except the leftmost node.
- //!
- //! <b>Effects</b>: Returns the previous node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr prev_node(const node_ptr & p)
- { return tree_algorithms::prev_node(p); }
-
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: After the function unique(node) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init(const node_ptr & node)
- { tree_algorithms::init(node); }
-
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: Initializes the header to represent an empty tree.
- //! unique(header) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unlink_leftmost_without_rebalance
+ static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unique(const const_node_ptr&)
+ static bool unique(const const_node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::size(const const_node_ptr&)
+ static std::size_t size(const const_node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::next_node(const node_ptr&)
+ static node_ptr next_node(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::prev_node(const node_ptr&)
+ static node_ptr prev_node(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::init(const node_ptr&)
+ static void init(const node_ptr & node);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::init_header(const node_ptr&)
static void init_header(const node_ptr & header)
{
- tree_algorithms::init_header(header);
+ bstree_algo::init_header(header);
NodeTraits::set_color(header, NodeTraits::red());
}
- //! <b>Requires</b>: header must be the header of a tree, z a node
- //! of that tree and z != header.
- //!
- //! <b>Effects</b>: Erases node "z" from the tree with header "header".
- //!
- //! <b>Complexity</b>: Amortized constant time.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::erase(const node_ptr&,const node_ptr&)
static node_ptr erase(const node_ptr & header, const node_ptr & z)
{
- typename tree_algorithms::data_for_rebalance info;
- tree_algorithms::erase(header, z, rbtree_erase_fixup(), info);
- node_ptr x = info.x;
- node_ptr x_parent = info.x_parent;
-
- //Rebalance rbtree
- if(NodeTraits::get_color(z) != NodeTraits::red()){
- rebalance_after_erasure(header, x, x_parent);
+ typename bstree_algo::data_for_rebalance info;
+ bstree_algo::erase(header, z, info);
+
+ color new_z_color;
+ if(info.y != z){
+ new_z_color = NodeTraits::get_color(info.y);
+ NodeTraits::set_color(info.y, NodeTraits::get_color(z));
+ }
+ else{
+ new_z_color = NodeTraits::get_color(z);
+ }
+ //Rebalance rbtree if needed
+ if(new_z_color != NodeTraits::red()){
+ rebalance_after_erasure(header, info.x, info.x_parent);
}
return z;
}
- //! <b>Requires</b>: "cloner" must be a function
- //! object taking a node_ptr and returning a new cloned node of it. "disposer" must
- //! take a node_ptr and shouldn't throw.
- //!
- //! <b>Effects</b>: First empties target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! Then, duplicates the entire tree pointed by "source_header" cloning each
- //! source node with <tt>node_ptr Cloner::operator()(const node_ptr &)</tt> to obtain
- //! the nodes of the target tree. If "cloner" throws, the cloned target nodes
- //! are disposed using <tt>void disposer(const node_ptr &)</tt>.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clone(const const_node_ptr&,const node_ptr&,Cloner,Disposer)
template <class Cloner, class Disposer>
static void clone
(const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer)
{
- rbtree_node_cloner<Cloner> new_cloner(cloner);
- tree_algorithms::clone(source_header, target_header, new_cloner, disposer);
+ rbtree_node_cloner<NodeTraits, Cloner> new_cloner(cloner);
+ bstree_algo::clone(source_header, target_header, new_cloner, disposer);
}
- //! <b>Requires</b>: "disposer" must be an object function
- //! taking a node_ptr parameter and shouldn't throw.
- //!
- //! <b>Effects</b>: Empties the target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clear_and_dispose(const node_ptr&,Disposer)
template<class Disposer>
- static void clear_and_dispose(const node_ptr & header, Disposer disposer)
- { tree_algorithms::clear_and_dispose(header, disposer); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is
- //! not less than "key" according to "comp" or "header" if that element does
- //! not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ static void clear_and_dispose(const node_ptr & header, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::lower_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr lower_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::lower_bound(header, key, comp); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is greater
- //! than "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::upper_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr upper_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::upper_bound(header, key, comp); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the element that is equivalent to
- //! "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::find(const const_node_ptr&, const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr find
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::find(header, key, comp); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an a pair of node_ptr delimiting a range containing
- //! all elements that are equivalent to "key" according to "comp" or an
- //! empty range that indicates the position where those elements would be
- //! if they there are no equivalent elements.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::equal_range(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> equal_range
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::equal_range(header, key, comp); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
- //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::bounded_range(const const_node_ptr&,const KeyType&,const KeyType&,KeyNodePtrCompare,bool,bool)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> bounded_range
(const const_node_ptr & header, const KeyType &lower_key, const KeyType &upper_key, KeyNodePtrCompare comp
- , bool left_closed, bool right_closed)
- { return tree_algorithms::bounded_range(header, lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: "h" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before the upper bound
- //! according to "comp".
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ , bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::count(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::size_t count(const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal_upper_bound(const node_ptr&,const node_ptr&,NodePtrCompare)
template<class NodePtrCompare>
static node_ptr insert_equal_upper_bound
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp)
{
- tree_algorithms::insert_equal_upper_bound(h, new_node, comp);
+ bstree_algo::insert_equal_upper_bound(h, new_node, comp);
rebalance_after_insertion(h, new_node);
return new_node;
}
- //! <b>Requires</b>: "h" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before the lower bound
- //! according to "comp".
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal_lower_bound(const node_ptr&,const node_ptr&,NodePtrCompare)
template<class NodePtrCompare>
static node_ptr insert_equal_lower_bound
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp)
{
- tree_algorithms::insert_equal_lower_bound(h, new_node, comp);
+ bstree_algo::insert_equal_lower_bound(h, new_node, comp);
rebalance_after_insertion(h, new_node);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs. "hint" is node from
- //! the "header"'s tree.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree, using "hint" as a hint to
- //! where it will be inserted. If "hint" is the upper_bound
- //! the insertion takes constant time (two comparisons in the worst case).
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if new_node is inserted immediately before "hint".
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal(const node_ptr&,const node_ptr&,const node_ptr&,NodePtrCompare)
template<class NodePtrCompare>
static node_ptr insert_equal
(const node_ptr & header, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp)
{
- tree_algorithms::insert_equal(header, hint, new_node, comp);
+ bstree_algo::insert_equal(header, hint, new_node, comp);
rebalance_after_insertion(header, new_node);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "pos" must be a valid iterator or header (end) node.
- //! "pos" must be an iterator pointing to the successor to "new_node"
- //! once inserted according to the order of already inserted nodes. This function does not
- //! check "pos" and this precondition must be guaranteed by the caller.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "pos" is not the successor of the newly inserted "new_node"
- //! tree invariants might be broken.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_before(const node_ptr&,const node_ptr&,const node_ptr&)
static node_ptr insert_before
(const node_ptr & header, const node_ptr & pos, const node_ptr & new_node)
{
- tree_algorithms::insert_before(header, pos, new_node);
+ bstree_algo::insert_before(header, pos, new_node);
rebalance_after_insertion(header, new_node);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "new_node" must be, according to the used ordering no less than the
- //! greatest inserted key.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "new_node" is less than the greatest inserted key
- //! tree invariants are broken. This function is slightly faster than
- //! using "insert_before".
+ //! @copydoc ::boost::intrusive::bstree_algorithms::push_back(const node_ptr&,const node_ptr&)
static void push_back(const node_ptr & header, const node_ptr & new_node)
{
- tree_algorithms::push_back(header, new_node);
+ bstree_algo::push_back(header, new_node);
rebalance_after_insertion(header, new_node);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "new_node" must be, according to the used ordering, no greater than the
- //! lowest inserted key.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "new_node" is greater than the lowest inserted key
- //! tree invariants are broken. This function is slightly faster than
- //! using "insert_before".
+ //! @copydoc ::boost::intrusive::bstree_algorithms::push_front(const node_ptr&,const node_ptr&)
static void push_front(const node_ptr & header, const node_ptr & new_node)
{
- tree_algorithms::push_front(header, new_node);
+ bstree_algo::push_front(header, new_node);
rebalance_after_insertion(header, new_node);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares KeyType with a node_ptr.
- //!
- //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
- //! tree according to "comp" and obtains the needed information to realize
- //! a constant-time node insertion if there is no equivalent node.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing a node_ptr to the already present node
- //! and false. If there is not equivalent key can be inserted returns true
- //! in the returned pair's boolean and fills "commit_data" that is meant to
- //! be used with the "insert_commit" function to achieve a constant-time
- //! insertion function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a node is expensive and the user does not want to have two equivalent nodes
- //! in the tree: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the node and this function offers the possibility to use that part
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the node and use
- //! "insert_commit" to insert the node in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
- //! if no more objects are inserted or erased from the set.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_check(const const_node_ptr&,const KeyType&,KeyNodePtrCompare,insert_commit_data&)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, bool> insert_unique_check
(const const_node_ptr & header, const KeyType &key
- ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
- { return tree_algorithms::insert_unique_check(header, key, comp, commit_data); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares KeyType with a node_ptr.
- //! "hint" is node from the "header"'s tree.
- //!
- //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
- //! tree according to "comp" using "hint" as a hint to where it should be
- //! inserted and obtains the needed information to realize
- //! a constant-time node insertion if there is no equivalent node.
- //! If "hint" is the upper_bound the function has constant time
- //! complexity (two comparisons in the worst case).
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing a node_ptr to the already present node
- //! and false. If there is not equivalent key can be inserted returns true
- //! in the returned pair's boolean and fills "commit_data" that is meant to
- //! be used with the "insert_commit" function to achieve a constant-time
- //! insertion function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic, but it is
- //! amortized constant time if new_node should be inserted immediately before "hint".
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a node is expensive and the user does not want to have two equivalent nodes
- //! in the tree: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the node and this function offers the possibility to use that part
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the node and use
- //! "insert_commit" to insert the node in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
- //! if no more objects are inserted or erased from the set.
+ ,KeyNodePtrCompare comp, insert_commit_data &commit_data);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_check(const const_node_ptr&,const node_ptr&,const KeyType&,KeyNodePtrCompare,insert_commit_data&)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, bool> insert_unique_check
(const const_node_ptr & header, const node_ptr &hint, const KeyType &key
- ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
- { return tree_algorithms::insert_unique_check(header, hint, key, comp, commit_data); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "commit_data" must have been obtained from a previous call to
- //! "insert_unique_check". No objects should have been inserted or erased
- //! from the set between the "insert_unique_check" that filled "commit_data"
- //! and the call to "insert_commit".
- //!
- //!
- //! <b>Effects</b>: Inserts new_node in the set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_unique_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
+ ,KeyNodePtrCompare comp, insert_commit_data &commit_data);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_commit(const node_ptr&,const node_ptr&,const insert_commit_data&)
static void insert_unique_commit
(const node_ptr & header, const node_ptr & new_value, const insert_commit_data &commit_data)
{
- tree_algorithms::insert_unique_commit(header, new_value, commit_data);
+ bstree_algo::insert_unique_commit(header, new_value, commit_data);
rebalance_after_insertion(header, new_value);
}
- //! <b>Requires</b>: "n" must be a node inserted in a tree.
- //!
- //! <b>Effects</b>: Returns a pointer to the header node of the tree.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr get_header(const node_ptr & n)
- { return tree_algorithms::get_header(n); }
-
- /// @cond
- private:
-
- //! <b>Requires</b>: p is a node of a tree.
- //!
- //! <b>Effects</b>: Returns true if p is the header of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::is_header
static bool is_header(const const_node_ptr & p)
{
return NodeTraits::get_color(p) == NodeTraits::red() &&
- tree_algorithms::is_header(p);
- //return NodeTraits::get_color(p) == NodeTraits::red() &&
- // NodeTraits::get_parent(NodeTraits::get_parent(p)) == p;
+ bstree_algo::is_header(p);
}
+ /// @cond
+ private:
+
static void rebalance_after_erasure(const node_ptr & header, node_ptr x, node_ptr x_parent)
{
- while(x != NodeTraits::get_parent(header) && (!x || NodeTraits::get_color(x) == NodeTraits::black())){
- if(x == NodeTraits::get_left(x_parent)){
+ while(1){
+ if(x_parent == header || (x && NodeTraits::get_color(x) != NodeTraits::black())){
+ break;
+ }
+ //Don't cache x_is_leftchild or similar because x can be null and
+ //equal to both x_parent_left and x_parent_right
+ const node_ptr x_parent_left(NodeTraits::get_left(x_parent));
+ if(x == x_parent_left){ //x is left child
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);
+ bstree_algo::rotate_left(x_parent, w, NodeTraits::get_parent(x_parent), header);
w = NodeTraits::get_right(x_parent);
}
- 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())){
+ node_ptr const w_left (NodeTraits::get_left(w));
+ node_ptr const w_right(NodeTraits::get_right(w));
+ if((!w_left || NodeTraits::get_color(w_left) == NodeTraits::black()) &&
+ (!w_right || NodeTraits::get_color(w_right) == NodeTraits::black())){
NodeTraits::set_color(w, NodeTraits::red());
x = x_parent;
x_parent = NodeTraits::get_parent(x_parent);
}
else {
- if(!NodeTraits::get_right(w) || NodeTraits::get_color(NodeTraits::get_right(w)) == NodeTraits::black()){
- NodeTraits::set_color(NodeTraits::get_left(w), NodeTraits::black());
+ if(!w_right || NodeTraits::get_color(w_right) == NodeTraits::black()){
+ NodeTraits::set_color(w_left, NodeTraits::black());
NodeTraits::set_color(w, NodeTraits::red());
- tree_algorithms::rotate_right(w, header);
+ bstree_algo::rotate_right(w, w_left, NodeTraits::get_parent(w), header);
w = NodeTraits::get_right(x_parent);
}
NodeTraits::set_color(w, NodeTraits::get_color(x_parent));
NodeTraits::set_color(x_parent, NodeTraits::black());
- if(NodeTraits::get_right(w))
- NodeTraits::set_color(NodeTraits::get_right(w), NodeTraits::black());
- tree_algorithms::rotate_left(x_parent, header);
+ const node_ptr new_wright(NodeTraits::get_right(w));
+ if(new_wright)
+ NodeTraits::set_color(new_wright, NodeTraits::black());
+ bstree_algo::rotate_left(x_parent, NodeTraits::get_right(x_parent), NodeTraits::get_parent(x_parent), header);
break;
}
}
else {
// same as above, with right_ <-> left_.
- node_ptr w = NodeTraits::get_left(x_parent);
+ node_ptr w = x_parent_left;
if(NodeTraits::get_color(w) == NodeTraits::red()){
NodeTraits::set_color(w, NodeTraits::black());
NodeTraits::set_color(x_parent, NodeTraits::red());
- tree_algorithms::rotate_right(x_parent, header);
+ bstree_algo::rotate_right(x_parent, w, NodeTraits::get_parent(x_parent), header);
w = NodeTraits::get_left(x_parent);
}
- 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())){
+ node_ptr const w_left (NodeTraits::get_left(w));
+ node_ptr const w_right(NodeTraits::get_right(w));
+ if((!w_right || NodeTraits::get_color(w_right) == NodeTraits::black()) &&
+ (!w_left || NodeTraits::get_color(w_left) == NodeTraits::black())){
NodeTraits::set_color(w, NodeTraits::red());
x = x_parent;
x_parent = NodeTraits::get_parent(x_parent);
}
else {
- if(!NodeTraits::get_left(w) || NodeTraits::get_color(NodeTraits::get_left(w)) == NodeTraits::black()){
- NodeTraits::set_color(NodeTraits::get_right(w), NodeTraits::black());
+ if(!w_left || NodeTraits::get_color(w_left) == NodeTraits::black()){
+ NodeTraits::set_color(w_right, NodeTraits::black());
NodeTraits::set_color(w, NodeTraits::red());
- tree_algorithms::rotate_left(w, header);
+ bstree_algo::rotate_left(w, w_right, NodeTraits::get_parent(w), header);
w = NodeTraits::get_left(x_parent);
}
NodeTraits::set_color(w, NodeTraits::get_color(x_parent));
NodeTraits::set_color(x_parent, NodeTraits::black());
- if(NodeTraits::get_left(w))
- NodeTraits::set_color(NodeTraits::get_left(w), NodeTraits::black());
- tree_algorithms::rotate_right(x_parent, header);
+ const node_ptr new_wleft(NodeTraits::get_left(w));
+ if(new_wleft)
+ NodeTraits::set_color(new_wleft, NodeTraits::black());
+ bstree_algo::rotate_right(x_parent, NodeTraits::get_left(x_parent), NodeTraits::get_parent(x_parent), header);
break;
}
}
@@ -873,52 +458,52 @@ class rbtree_algorithms
NodeTraits::set_color(x, NodeTraits::black());
}
-
static void rebalance_after_insertion(const node_ptr & header, node_ptr p)
{
NodeTraits::set_color(p, NodeTraits::red());
- while(p != NodeTraits::get_parent(header) && NodeTraits::get_color(NodeTraits::get_parent(p)) == NodeTraits::red()){
+ while(1){
node_ptr p_parent(NodeTraits::get_parent(p));
- node_ptr p_parent_parent(NodeTraits::get_parent(p_parent));
- if(tree_algorithms::is_left_child(p_parent)){
- node_ptr x = NodeTraits::get_right(p_parent_parent);
- if(x && NodeTraits::get_color(x) == NodeTraits::red()){
- NodeTraits::set_color(p_parent, NodeTraits::black());
- NodeTraits::set_color(p_parent_parent, NodeTraits::red());
- NodeTraits::set_color(x, NodeTraits::black());
- p = p_parent_parent;
- }
- else {
- if(!tree_algorithms::is_left_child(p)){
- p = p_parent;
- tree_algorithms::rotate_left(p, header);
- }
- node_ptr new_p_parent(NodeTraits::get_parent(p));
- node_ptr new_p_parent_parent(NodeTraits::get_parent(new_p_parent));
- NodeTraits::set_color(new_p_parent, NodeTraits::black());
- NodeTraits::set_color(new_p_parent_parent, NodeTraits::red());
- tree_algorithms::rotate_right(new_p_parent_parent, header);
- }
+ const node_ptr p_grandparent(NodeTraits::get_parent(p_parent));
+ if(p_parent == header || NodeTraits::get_color(p_parent) == NodeTraits::black() || p_grandparent == header){
+ break;
+ }
+
+ NodeTraits::set_color(p_grandparent, NodeTraits::red());
+ node_ptr const p_grandparent_left (NodeTraits::get_left (p_grandparent));
+ bool const p_parent_is_left_child = p_parent == p_grandparent_left;
+ node_ptr const x(p_parent_is_left_child ? NodeTraits::get_right(p_grandparent) : p_grandparent_left);
+
+ if(x && NodeTraits::get_color(x) == NodeTraits::red()){
+ NodeTraits::set_color(x, NodeTraits::black());
+ NodeTraits::set_color(p_parent, NodeTraits::black());
+ p = p_grandparent;
}
- else{
- node_ptr x = NodeTraits::get_left(p_parent_parent);
- if(x && NodeTraits::get_color(x) == NodeTraits::red()){
- NodeTraits::set_color(p_parent, NodeTraits::black());
- NodeTraits::set_color(p_parent_parent, NodeTraits::red());
- NodeTraits::set_color(x, NodeTraits::black());
- p = p_parent_parent;
+ else{ //Final step
+ const bool p_is_left_child(NodeTraits::get_left(p_parent) == p);
+ if(p_parent_is_left_child){ //p_parent is left child
+ if(!p_is_left_child){ //p is right child
+ bstree_algo::rotate_left_no_parent_fix(p_parent, p);
+ //No need to link p and p_grandparent:
+ // [NodeTraits::set_parent(p, p_grandparent) + NodeTraits::set_left(p_grandparent, p)]
+ //as p_grandparent is not the header, another rotation is coming and p_parent
+ //will be the left child of p_grandparent
+ p_parent = p;
+ }
+ bstree_algo::rotate_right(p_grandparent, p_parent, NodeTraits::get_parent(p_grandparent), header);
}
- else{
- if(tree_algorithms::is_left_child(p)){
- p = p_parent;
- tree_algorithms::rotate_right(p, header);
+ else{ //p_parent is right child
+ if(p_is_left_child){ //p is left child
+ bstree_algo::rotate_right_no_parent_fix(p_parent, p);
+ //No need to link p and p_grandparent:
+ // [NodeTraits::set_parent(p, p_grandparent) + NodeTraits::set_right(p_grandparent, p)]
+ //as p_grandparent is not the header, another rotation is coming and p_parent
+ //will be the right child of p_grandparent
+ p_parent = p;
}
- node_ptr new_p_parent(NodeTraits::get_parent(p));
- node_ptr new_p_parent_parent(NodeTraits::get_parent(new_p_parent));
- NodeTraits::set_color(new_p_parent, NodeTraits::black());
- NodeTraits::set_color(new_p_parent_parent, NodeTraits::red());
- tree_algorithms::rotate_left(new_p_parent_parent, header);
+ bstree_algo::rotate_left(p_grandparent, p_parent, NodeTraits::get_parent(p_grandparent), header);
}
+ NodeTraits::set_color(p_parent, NodeTraits::black());
+ break;
}
}
NodeTraits::set_color(NodeTraits::get_parent(header), NodeTraits::black());
@@ -926,6 +511,16 @@ class rbtree_algorithms
/// @endcond
};
+/// @cond
+
+template<class NodeTraits>
+struct get_algo<RbTreeAlgorithms, NodeTraits>
+{
+ typedef rbtree_algorithms<NodeTraits> type;
+};
+
+/// @endcond
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/set.hpp b/3party/boost/boost/intrusive/set.hpp
index f753a2c535..9619e98c56 100644
--- a/3party/boost/boost/intrusive/set.hpp
+++ b/3party/boost/boost/intrusive/set.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,6 +15,7 @@
#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/intrusive/intrusive_fwd.hpp>
+
#include <boost/intrusive/detail/mpl.hpp>
#include <boost/intrusive/rbtree.hpp>
#include <iterator>
@@ -37,12 +38,15 @@ namespace intrusive {
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class set_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder>
+#endif
{
/// @cond
- typedef rbtree_impl<Config> tree_type;
+ typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder> tree_type;
BOOST_MOVABLE_BUT_NOT_COPYABLE(set_impl)
typedef tree_type implementation_defined;
@@ -70,1203 +74,370 @@ class set_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- static const bool constant_time_size = Config::constant_time_size;
- //static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
-
- /// @cond
- private:
- tree_type tree_;
-
- protected:
- node &prot_header_node(){ return tree_.prot_header_node(); }
- node const &prot_header_node() const{ return tree_.prot_header_node(); }
- void prot_set_size(size_type s){ tree_.prot_set_size(s); }
- value_compare &prot_comp(){ return tree_.prot_comp(); }
-
- /// @endcond
+ static const bool constant_time_size = tree_type::constant_time_size;
public:
- //! <b>Effects</b>: Constructs an empty set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::rbtree::rbtree(const value_compare &,const value_traits &)
explicit set_impl( const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(cmp, v_traits)
+ : tree_type(cmp, v_traits)
{}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty set and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is std::distance(last, first).
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::rbtree::rbtree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
set_impl( Iterator b, Iterator e
, const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(true, b, e, cmp, v_traits)
+ : tree_type(true, b, e, cmp, v_traits)
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::rbtree::rbtree(rbtree &&)
set_impl(BOOST_RV_REF(set_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::rbtree::operator=(rbtree &&)
set_impl& operator=(BOOST_RV_REF(set_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the set
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~set_impl()
- {}
+ { return static_cast<set_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::rbtree::~rbtree()
+ ~set_impl();
+
+ //! @copydoc ::boost::intrusive::rbtree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::rbtree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::rbtree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::rbegin()
+ reverse_iterator rbegin();
+
+ //! @copydoc ::boost::intrusive::rbtree::rbegin()const
+ const_reverse_iterator rbegin() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::rbtree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::container_from_end_iterator(iterator)
+ static set_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::rbtree::container_from_end_iterator(const_iterator)
+ static const set_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::rbtree::container_from_iterator(iterator)
+ static set_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::rbtree::container_from_iterator(const_iterator)
+ static const set_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::rbtree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::size()const
+ size_type size() const;
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of set.
- //!
- //! <b>Effects</b>: Returns a reference to the set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static set_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &set_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of set.
- //!
- //! <b>Effects</b>: Returns a const reference to the set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const set_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of set.
- //!
- //! <b>Effects</b>: Returns a reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static set_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of set.
- //!
- //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const set_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &set_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the set.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
-
- //! <b>Effects</b>: Swaps the contents of two sets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(set_impl& other)
- { tree_.swap(other.tree_); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::rbtree::swap
+ void swap(set_impl& other);
+
+ //! @copydoc ::boost::intrusive::rbtree::clone_from
template <class Cloner, class Disposer>
- void clone_from(const set_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Tries to inserts value into the set.
- //!
- //! <b>Returns</b>: If the value
- //! is not already present inserts it and returns a pair containing the
- //! iterator to the new value and true. If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ void clone_from(const set_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::insert_unique(reference)
std::pair<iterator, bool> insert(reference value)
- { return tree_.insert_unique(value); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Tries to to insert x into the set, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the
- //! new element was inserted into the set.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_unique(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::insert_unique(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_unique(hint, value); }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the set, using
- //! a user provided key instead of the value itself.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that
- //! part to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the set.
+ { return tree_type::insert_unique(hint, value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_check
(const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(key, key_value_comp, commit_data); }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the set, using
- //! a user provided key instead of the value itself, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! constructing that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that key
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This can give a total
- //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the set.
+ { return tree_type::insert_unique_check(key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::rbtree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_check
(const_iterator hint, const KeyType &key
,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(hint, key, key_value_comp, commit_data); }
-
- //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
- //! must have been obtained from a previous call to "insert_check".
- //! No objects should have been inserted or erased from the set between
- //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
- //!
- //! <b>Effects</b>: Inserts the value in the set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Returns</b>: An iterator to the newly inserted object.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- iterator insert_commit(reference value, const insert_commit_data &commit_data)
- { return tree_.insert_unique_commit(value, commit_data); }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the set.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_unique_check(hint, key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::rbtree::insert_unique(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_unique(b, e); }
-
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate. "value" must not be equal to any
- //! inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" or "value" is not unique tree ordering and uniqueness
- //! invariants will be broken respectively.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- { return tree_.insert_before(pos, value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be greater than
- //! any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than or equal to the greatest inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- { tree_.push_back(value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be less
- //! than any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than or equal to the the mimum inserted key tree ordering or uniqueness
- //! invariants will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- { tree_.push_front(value); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { return tree_.erase(b, e); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size()) + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
-
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If the comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ { tree_type::insert_unique(b, e); }
+
+ //! @copydoc ::boost::intrusive::rbtree::insert_unique_commit
+ iterator insert_commit(reference value, const insert_commit_data &commit_data)
+ { return tree_type::insert_unique_commit(value, commit_data); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::rbtree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::rbtree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::rbtree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)). Basic guarantee.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::rbtree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::rbtree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ void clear_and_dispose(Disposer disposer);
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::count(const_reference)const
size_type count(const_reference value) const
- { return tree_.find(value) != end(); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ { return static_cast<size_type>(this->tree_type::find(value) != this->tree_type::cend()); }
+
+ //! @copydoc ::boost::intrusive::rbtree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
size_type count(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp) != end(); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return static_cast<size_type>(this->tree_type::find(key, comp) != this->tree_type::cend()); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound(const_reference value) const
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::rbtree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound(const_reference value) const
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::rbtree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find(const_reference value) const
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::rbtree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)
std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
equal_range(const_reference value) const
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
equal_range(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range(key, comp); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::rbtree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::rbtree::bounded_range(const_reference,const_reference,bool,bool)const
std::pair<const_iterator, const_iterator>
- bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value shall not be in a set/multiset.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
- friend bool operator==(const set_impl &x, const set_impl &y)
- { return x.tree_ == y.tree_; }
+ //! @copydoc ::boost::intrusive::rbtree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- friend bool operator<(const set_impl &x, const set_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ //! @copydoc ::boost::intrusive::rbtree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::rbtree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::rbtree::remove_node
+ void remove_node(reference value);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const set_impl<T, Options...> &x, const set_impl<T, Options...> &y)
-#else
-(const set_impl<Config> &x, const set_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const set_impl<T, Options...> &x, const set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const set_impl<T, Options...> &x, const set_impl<T, Options...> &y)
-#else
-(const set_impl<Config> &x, const set_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const set_impl<T, Options...> &x, const set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const set_impl<T, Options...> &x, const set_impl<T, Options...> &y)
-#else
-(const set_impl<Config> &x, const set_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const set_impl<T, Options...> &x, const set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const set_impl<T, Options...> &x, const set_impl<T, Options...> &y)
-#else
-(const set_impl<Config> &x, const set_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const set_impl<T, Options...> &x, const set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(set_impl<T, Options...> &x, set_impl<T, Options...> &y)
-#else
-(set_impl<Config> &x, set_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(set_impl<T, Options...> &x, set_impl<T, Options...> &y);
+
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
//! Helper metafunction to define a \c set that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_set
{
/// @cond
- typedef set_impl
- < typename make_rbtree_opt<T,
+ typedef typename pack_options
+ < rbtree_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
- >::type
- > implementation_defined;
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
+ typedef set_impl
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class set
: public make_set<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -1275,7 +446,7 @@ class set
typedef typename make_set
<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -1291,8 +462,8 @@ class set
//Assert if passed value traits are compatible with the type
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- set( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit set( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
@@ -1308,7 +479,7 @@ class set
{}
set& operator=(BOOST_RV_REF(set) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<set &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static set &container_from_end_iterator(iterator end_iterator)
{ return static_cast<set &>(Base::container_from_end_iterator(end_iterator)); }
@@ -1339,12 +510,15 @@ class set
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class multiset_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder>
+#endif
{
/// @cond
- typedef rbtree_impl<Config> tree_type;
+ typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder> tree_type;
BOOST_MOVABLE_BUT_NOT_COPYABLE(multiset_impl)
typedef tree_type implementation_defined;
@@ -1372,1107 +546,325 @@ class multiset_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- static const bool constant_time_size = Config::constant_time_size;
- //static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
-
- /// @cond
- private:
- tree_type tree_;
-
- protected:
- node &prot_header_node(){ return tree_.prot_header_node(); }
- node const &prot_header_node() const{ return tree_.prot_header_node(); }
- void prot_set_size(size_type s){ tree_.prot_set_size(s); }
- value_compare &prot_comp(){ return tree_.prot_comp(); }
- /// @endcond
+ static const bool constant_time_size = tree_type::constant_time_size;
public:
- //! <b>Effects</b>: Constructs an empty multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::rbtree::rbtree(const value_compare &,const value_traits &)
explicit multiset_impl( const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(cmp, v_traits)
+ : tree_type(cmp, v_traits)
{}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty multiset and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is the distance between first and last
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::rbtree::rbtree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
multiset_impl( Iterator b, Iterator e
, const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(false, b, e, cmp, v_traits)
+ : tree_type(false, b, e, cmp, v_traits)
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::rbtree::rbtree(rbtree &&)
multiset_impl(BOOST_RV_REF(multiset_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::rbtree::operator=(rbtree &&)
multiset_impl& operator=(BOOST_RV_REF(multiset_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the set
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~multiset_impl()
- {}
+ { return static_cast<multiset_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::rbtree::~rbtree()
+ ~multiset_impl();
+
+ //! @copydoc ::boost::intrusive::rbtree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::rbtree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::rbtree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::rbegin()
+ reverse_iterator rbegin();
+
+ //! @copydoc ::boost::intrusive::rbtree::rbegin()const
+ const_reverse_iterator rbegin() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::rbtree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::container_from_end_iterator(iterator)
+ static multiset_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::rbtree::container_from_end_iterator(const_iterator)
+ static const multiset_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::rbtree::container_from_iterator(iterator)
+ static multiset_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::rbtree::container_from_iterator(const_iterator)
+ static const multiset_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::rbtree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::size()const
+ size_type size() const;
+
+ //! @copydoc ::boost::intrusive::rbtree::swap
+ void swap(multiset_impl& other);
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static multiset_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const multiset_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static multiset_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const multiset_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &multiset_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the multiset.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
-
- //! <b>Effects</b>: Swaps the contents of two multisets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(multiset_impl& other)
- { tree_.swap(other.tree_); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::rbtree::clone_from
template <class Cloner, class Disposer>
- void clone_from(const multiset_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ void clone_from(const multiset_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::insert_equal(reference)
iterator insert(reference value)
- { return tree_.insert_equal(value); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts x into the multiset, using pos as a hint to
- //! where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_equal(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::insert_equal(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_equal(hint, value); }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_equal(hint, value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::insert_equal(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_equal(b, e); }
-
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate
- //!
- //! <b>Effects</b>: Inserts x into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" tree ordering invariant will be broken.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- { return tree_.insert_before(pos, value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no less
- //! than the greatest inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than the greatest inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- { tree_.push_back(value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no greater
- //! than the minimum inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than the minimum inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- { tree_.push_front(value); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, iterator e)
- { return tree_.erase(b, e); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
-
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ { tree_type::insert_equal(b, e); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::rbtree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::rbtree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::rbtree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::rbtree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::rbtree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::rbtree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- size_type count(const_reference value) const
- { return tree_.count(value); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ void clear_and_dispose(Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::rbtree::count(const_reference)const
+ size_type count(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType& key, KeyValueCompare comp) const
- { return tree_.count(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound(const_reference value) const
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::rbtree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound(const_reference value) const
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::rbtree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find(const_reference value) const
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::rbtree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range(const_reference value) const
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ equal_range(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range(key, comp); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::rbtree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::rbtree::bounded_range(const_reference,const_reference,bool,bool)const
std::pair<const_iterator, const_iterator>
- bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value shall not be in a set/multiset.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
-
- //! <b>Effects</b>: removes "value" from the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic time.
- //!
- //! <b>Note</b>: This static function is only usable with non-constant
- //! time size containers that have stateless comparison functors.
- //!
- //! If the user calls
- //! this function with a constant time size container or stateful comparison
- //! functor a compilation error will be issued.
- static void remove_node(reference value)
- { tree_type::remove_node(value); }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
- friend bool operator==(const multiset_impl &x, const multiset_impl &y)
- { return x.tree_ == y.tree_; }
+ //! @copydoc ::boost::intrusive::rbtree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- friend bool operator<(const multiset_impl &x, const multiset_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ //! @copydoc ::boost::intrusive::rbtree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::rbtree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::rbtree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::rbtree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::rbtree::remove_node
+ void remove_node(reference value);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const multiset_impl<T, Options...> &x, const multiset_impl<T, Options...> &y)
-#else
-(const multiset_impl<Config> &x, const multiset_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const multiset_impl<T, Options...> &x, const multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const multiset_impl<T, Options...> &x, const multiset_impl<T, Options...> &y)
-#else
-(const multiset_impl<Config> &x, const multiset_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const multiset_impl<T, Options...> &x, const multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const multiset_impl<T, Options...> &x, const multiset_impl<T, Options...> &y)
-#else
-(const multiset_impl<Config> &x, const multiset_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const multiset_impl<T, Options...> &x, const multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const multiset_impl<T, Options...> &x, const multiset_impl<T, Options...> &y)
-#else
-(const multiset_impl<Config> &x, const multiset_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const multiset_impl<T, Options...> &x, const multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(multiset_impl<T, Options...> &x, multiset_impl<T, Options...> &y)
-#else
-(multiset_impl<Config> &x, multiset_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(multiset_impl<T, Options...> &x, multiset_impl<T, Options...> &y);
+
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
//! Helper metafunction to define a \c multiset that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_multiset
{
/// @cond
- typedef multiset_impl
- < typename make_rbtree_opt<T,
+ typedef typename pack_options
+ < rbtree_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
- >::type
- > implementation_defined;
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
+ typedef multiset_impl
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
@@ -2480,14 +872,14 @@ struct make_multiset
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class multiset
: public make_multiset<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -2495,7 +887,7 @@ class multiset
{
typedef typename make_multiset<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -2529,7 +921,7 @@ class multiset
{}
multiset& operator=(BOOST_RV_REF(multiset) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<multiset &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static multiset &container_from_end_iterator(iterator end_iterator)
{ return static_cast<multiset &>(Base::container_from_end_iterator(end_iterator)); }
diff --git a/3party/boost/boost/intrusive/set_hook.hpp b/3party/boost/boost/intrusive/set_hook.hpp
index 2634b42eef..e6bb3bdd9d 100644
--- a/3party/boost/boost/intrusive/set_hook.hpp
+++ b/3party/boost/boost/intrusive/set_hook.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -16,6 +16,7 @@
#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/intrusive/intrusive_fwd.hpp>
+
#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/detail/rbtree_node.hpp>
#include <boost/intrusive/rbtree_algorithms.hpp>
@@ -38,7 +39,7 @@ struct get_set_node_algo
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none, class O4 = none>
+template<class O1 = void, class O2 = void, class O3 = void, class O4 = void>
#endif
struct make_set_base_hook
{
@@ -52,12 +53,12 @@ struct make_set_base_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_set_node_algo<typename packed_options::void_pointer
,packed_options::optimize_size>
, typename packed_options::tag
, packed_options::link_mode
- , detail::SetBaseHook
+ , RbTreeBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -76,7 +77,7 @@ struct make_set_base_hook
//! unique tag.
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
//!
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
//! \c auto_unlink or \c safe_link).
@@ -170,7 +171,7 @@ class set_base_hook
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none, class O4 = none>
+template<class O1 = void, class O2 = void, class O3 = void, class O4 = void>
#endif
struct make_set_member_hook
{
@@ -184,12 +185,12 @@ struct make_set_member_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_set_node_algo<typename packed_options::void_pointer
,packed_options::optimize_size>
, member_tag
, packed_options::link_mode
- , detail::NoBaseHook
+ , NoBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -203,7 +204,7 @@ struct make_set_member_hook
//! \c link_mode<> and \c optimize_size<>.
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
//!
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
//! \c auto_unlink or \c safe_link).
diff --git a/3party/boost/boost/intrusive/sg_set.hpp b/3party/boost/boost/intrusive/sg_set.hpp
index e18b02157b..0ed2e02f83 100644
--- a/3party/boost/boost/intrusive/sg_set.hpp
+++ b/3party/boost/boost/intrusive/sg_set.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -14,16 +14,16 @@
#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/intrusive/intrusive_fwd.hpp>
-#include <boost/intrusive/sgtree.hpp>
#include <boost/intrusive/detail/mpl.hpp>
-#include <boost/move/move.hpp>
+#include <boost/intrusive/sgtree.hpp>
#include <iterator>
+#include <boost/move/move.hpp>
namespace boost {
namespace intrusive {
//! The class template sg_set is an intrusive container, that mimics most of
-//! the interface of std::set as described in the C++ standard.
+//! the interface of std::sg_set as described in the C++ standard.
//!
//! The template parameter \c T is the type to be managed by the container.
//! The user can specify additional options and if no options are provided
@@ -31,19 +31,20 @@ namespace intrusive {
//!
//! The container supports the following options:
//! \c base_hook<>/member_hook<>/value_traits<>,
-//! \c constant_time_size<>, \c size_type<> and
+//! \c floating_point<>, \c size_type<> and
//! \c compare<>.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Compare, class SizeType, bool FloatingPoint, typename HeaderHolder>
#endif
class sg_set_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public sgtree_impl<ValueTraits, Compare, SizeType, FloatingPoint, HeaderHolder>
+#endif
{
/// @cond
- typedef sgtree_impl<Config> tree_type;
- //! This class is
- //! movable
+ typedef sgtree_impl<ValueTraits, Compare, SizeType, FloatingPoint, HeaderHolder> tree_type;
BOOST_MOVABLE_BUT_NOT_COPYABLE(sg_set_impl)
typedef tree_type implementation_defined;
@@ -71,1248 +72,398 @@ class sg_set_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- /// @cond
- private:
- tree_type tree_;
- /// @endcond
+ static const bool constant_time_size = tree_type::constant_time_size;
public:
- //! <b>Effects</b>: Constructs an empty sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::sgtree::sgtree(const value_compare &,const value_traits &)
explicit sg_set_impl( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : tree_(cmp, v_traits)
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
{}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty sg_set and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is std::distance(last, first).
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::sgtree::sgtree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
sg_set_impl( Iterator b, Iterator e
, const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(true, b, e, cmp, v_traits)
+ : tree_type(true, b, e, cmp, v_traits)
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::sgtree::sgtree(sgtree &&)
sg_set_impl(BOOST_RV_REF(sg_set_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::sgtree::operator=(sgtree &&)
sg_set_impl& operator=(BOOST_RV_REF(sg_set_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the sg_set
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~sg_set_impl()
- {}
+ { return static_cast<sg_set_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::sgtree::~sgtree()
+ ~sg_set_impl();
+
+ //! @copydoc ::boost::intrusive::sgtree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::sgtree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::sgtree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::rbegin()
+ reverse_iterator rbegin();
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of sg_set.
- //!
- //! <b>Effects</b>: Returns a const reference to the sg_set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static sg_set_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<sg_set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &sg_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of sg_set.
- //!
- //! <b>Effects</b>: Returns a const reference to the sg_set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const sg_set_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<sg_set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &sg_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of set.
- //!
- //! <b>Effects</b>: Returns a reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static sg_set_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<sg_set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &sg_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of set.
- //!
- //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const sg_set_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<sg_set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &sg_set_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the sg_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the sg_set.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
-
- //! <b>Effects</b>: Swaps the contents of two sets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(sg_set_impl& other)
- { tree_.swap(other.tree_); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::sgtree::rbegin()const
+ const_reverse_iterator rbegin() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::sgtree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::container_from_end_iterator(iterator)
+ static sg_set_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::sgtree::container_from_end_iterator(const_iterator)
+ static const sg_set_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::sgtree::container_from_iterator(iterator)
+ static sg_set_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::sgtree::container_from_iterator(const_iterator)
+ static const sg_set_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::sgtree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::size()const
+ size_type size() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::swap
+ void swap(sg_set_impl& other);
+
+ //! @copydoc ::boost::intrusive::sgtree::clone_from
template <class Cloner, class Disposer>
- void clone_from(const sg_set_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Tries to inserts value into the sg_set.
- //!
- //! <b>Returns</b>: If the value
- //! is not already present inserts it and returns a pair containing the
- //! iterator to the new value and true. If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ void clone_from(const sg_set_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::sgtree::insert_unique(reference)
std::pair<iterator, bool> insert(reference value)
- { return tree_.insert_unique(value); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Tries to to insert x into the sg_set, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the
- //! new element was inserted into the sg_set.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_unique(value); }
+
+ //! @copydoc ::boost::intrusive::sgtree::insert_unique(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_unique(hint, value); }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the sg_set, using
- //! a user provided key instead of the value itself.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that
- //! part to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the sg_set.
+ { return tree_type::insert_unique(hint, value); }
+
+ //! @copydoc ::boost::intrusive::sgtree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_check
(const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(key, key_value_comp, commit_data); }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the sg_set, using
- //! a user provided key instead of the value itself, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! constructing that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that key
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This can give a total
- //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the sg_set.
+ { return tree_type::insert_unique_check(key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::sgtree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_check
(const_iterator hint, const KeyType &key
,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(hint, key, key_value_comp, commit_data); }
-
- //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
- //! must have been obtained from a previous call to "insert_check".
- //! No objects should have been inserted or erased from the sg_set between
- //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
- //!
- //! <b>Effects</b>: Inserts the value in the sg_set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Returns</b>: An iterator to the newly inserted object.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- iterator insert_commit(reference value, const insert_commit_data &commit_data)
- { return tree_.insert_unique_commit(value, commit_data); }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the sg_set.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_unique_check(hint, key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::sgtree::insert_unique(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_unique(b, e); }
-
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate. "value" must not be equal to any
- //! inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" or "value" is not unique tree ordering and uniqueness
- //! invariants will be broken respectively.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- { return tree_.insert_before(pos, value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be greater than
- //! any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than or equal to the greatest inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- { tree_.push_back(value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be less
- //! than any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the tree in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than or equal to the the mimum inserted key tree ordering or uniqueness
- //! invariants will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- { tree_.push_front(value); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { return tree_.erase(b, e); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size()) + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
-
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If the comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ { tree_type::insert_unique(b, e); }
+
+ //! @copydoc ::boost::intrusive::sgtree::insert_unique_commit
+ iterator insert_commit(reference value, const insert_commit_data &commit_data)
+ { return tree_type::insert_unique_commit(value, commit_data); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::sgtree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::sgtree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::sgtree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)). Basic guarantee.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::sgtree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::sgtree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ void clear_and_dispose(Disposer disposer);
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::sgtree::count(const_reference)const
size_type count(const_reference value) const
- { return tree_.find(value) != end(); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ { return static_cast<size_type>(this->tree_type::find(value) != this->tree_type::cend()); }
+
+ //! @copydoc ::boost::intrusive::sgtree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
size_type count(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp) != end(); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return static_cast<size_type>(this->tree_type::find(key, comp) != this->tree_type::cend()); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::sgtree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound(const_reference value) const
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::sgtree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound(const_reference value) const
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::sgtree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find(const_reference value) const
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::sgtree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)
std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
equal_range(const_reference value) const
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
equal_range(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range(key, comp); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::sgtree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::sgtree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::sgtree::bounded_range(const_reference,const_reference,bool,bool)const
std::pair<const_iterator, const_iterator>
- bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a sg_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the sg_set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a sg_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! sg_set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a sg_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the sg_set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a sg_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! sg_set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value shall not be in a sg_set/sg_multiset.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
-
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- void rebalance()
- { tree_.rebalance(); }
-
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- iterator rebalance_subtree(iterator root)
- { return tree_.rebalance_subtree(root); }
-
- //! <b>Returns</b>: The balance factor (alpha) used in this tree
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- float balance_factor() const
- { return tree_.balance_factor(); }
-
- //! <b>Requires</b>: new_alpha must be a value between 0.5 and 1.0
- //!
- //! <b>Effects</b>: Establishes a new balance factor (alpha) and rebalances
- //! the tree if the new balance factor is stricter (less) than the old factor.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- void balance_factor(float new_alpha)
- { tree_.balance_factor(new_alpha); }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
- friend bool operator==(const sg_set_impl &x, const sg_set_impl &y)
- { return x.tree_ == y.tree_; }
+ //! @copydoc ::boost::intrusive::sgtree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- friend bool operator<(const sg_set_impl &x, const sg_set_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ //! @copydoc ::boost::intrusive::sgtree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::sgtree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::sgtree::remove_node
+ void remove_node(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::rebalance
+ void rebalance();
+
+ //! @copydoc ::boost::intrusive::sgtree::rebalance_subtree
+ iterator rebalance_subtree(iterator root);
+
+ //! @copydoc ::boost::intrusive::sgtree::balance_factor()
+ float balance_factor() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::balance_factor(float)
+ void balance_factor(float new_alpha);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sg_set_impl<T, Options...> &x, const sg_set_impl<T, Options...> &y)
-#else
-(const sg_set_impl<Config> &x, const sg_set_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const sg_set_impl<T, Options...> &x, const sg_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sg_set_impl<T, Options...> &x, const sg_set_impl<T, Options...> &y)
-#else
-(const sg_set_impl<Config> &x, const sg_set_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const sg_set_impl<T, Options...> &x, const sg_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sg_set_impl<T, Options...> &x, const sg_set_impl<T, Options...> &y)
-#else
-(const sg_set_impl<Config> &x, const sg_set_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const sg_set_impl<T, Options...> &x, const sg_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sg_set_impl<T, Options...> &x, const sg_set_impl<T, Options...> &y)
-#else
-(const sg_set_impl<Config> &x, const sg_set_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const sg_set_impl<T, Options...> &x, const sg_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(sg_set_impl<T, Options...> &x, sg_set_impl<T, Options...> &y)
-#else
-(sg_set_impl<Config> &x, sg_set_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(sg_set_impl<T, Options...> &x, sg_set_impl<T, Options...> &y);
+
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
//! Helper metafunction to define a \c sg_set that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_sg_set
{
/// @cond
- typedef sg_set_impl
- < typename make_sgtree_opt<T,
+ typedef typename pack_options
+ < sgtree_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
- >::type
- > implementation_defined;
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
+ typedef sg_set_impl
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::floating_point
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
-
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class sg_set
: public make_sg_set<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type
{
typedef typename make_sg_set
<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
>::type Base;
- BOOST_MOVABLE_BUT_NOT_COPYABLE(sg_set)
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(sg_set)
public:
typedef typename Base::value_compare value_compare;
typedef typename Base::value_traits value_traits;
@@ -1322,8 +473,8 @@ class sg_set
//Assert if passed value traits are compatible with the type
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- sg_set( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit sg_set( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
@@ -1339,7 +490,7 @@ class sg_set
{}
sg_set& operator=(BOOST_RV_REF(sg_set) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<sg_set &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static sg_set &container_from_end_iterator(iterator end_iterator)
{ return static_cast<sg_set &>(Base::container_from_end_iterator(end_iterator)); }
@@ -1365,19 +516,21 @@ class sg_set
//!
//! The container supports the following options:
//! \c base_hook<>/member_hook<>/value_traits<>,
-//! \c constant_time_size<>, \c size_type<> and
+//! \c floating_point<>, \c size_type<> and
//! \c compare<>.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Compare, class SizeType, bool FloatingPoint, typename HeaderHolder>
#endif
class sg_multiset_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public sgtree_impl<ValueTraits, Compare, SizeType, FloatingPoint, HeaderHolder>
+#endif
{
/// @cond
- typedef sgtree_impl<Config> tree_type;
+ typedef sgtree_impl<ValueTraits, Compare, SizeType, FloatingPoint, HeaderHolder> tree_type;
- //Non-copyable and non-assignable
BOOST_MOVABLE_BUT_NOT_COPYABLE(sg_multiset_impl)
typedef tree_type implementation_defined;
/// @endcond
@@ -1404,1122 +557,338 @@ class sg_multiset_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- /// @cond
- private:
- tree_type tree_;
- /// @endcond
+ static const bool constant_time_size = tree_type::constant_time_size;
public:
- //! <b>Effects</b>: Constructs an empty sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::sgtree::sgtree(const value_compare &,const value_traits &)
explicit sg_multiset_impl( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : tree_(cmp, v_traits)
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
{}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty sg_multiset and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is the distance between first and last
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::sgtree::sgtree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
sg_multiset_impl( Iterator b, Iterator e
, const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(false, b, e, cmp, v_traits)
+ : tree_type(false, b, e, cmp, v_traits)
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::sgtree::sgtree(sgtree &&)
sg_multiset_impl(BOOST_RV_REF(sg_multiset_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::sgtree::operator=(sgtree &&)
sg_multiset_impl& operator=(BOOST_RV_REF(sg_multiset_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the sg_multiset
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~sg_multiset_impl()
- {}
+ { return static_cast<sg_multiset_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::sgtree::~sgtree()
+ ~sg_multiset_impl();
+
+ //! @copydoc ::boost::intrusive::sgtree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::sgtree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::sgtree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::rbegin()
+ reverse_iterator rbegin();
+
+ //! @copydoc ::boost::intrusive::sgtree::rbegin()const
+ const_reverse_iterator rbegin() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::sgtree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::container_from_end_iterator(iterator)
+ static sg_multiset_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::sgtree::container_from_end_iterator(const_iterator)
+ static const sg_multiset_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::sgtree::container_from_iterator(iterator)
+ static sg_multiset_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::sgtree::container_from_iterator(const_iterator)
+ static const sg_multiset_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::sgtree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::size()const
+ size_type size() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::swap
+ void swap(sg_multiset_impl& other);
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of sg_multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the sg_multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static sg_multiset_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<sg_multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &sg_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of sg_multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the sg_multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const sg_multiset_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<sg_multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &sg_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static sg_multiset_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<sg_multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &sg_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const sg_multiset_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<sg_multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &sg_multiset_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the sg_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the sg_multiset.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
-
- //! <b>Effects</b>: Swaps the contents of two sg_multisets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(sg_multiset_impl& other)
- { tree_.swap(other.tree_); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::sgtree::clone_from
template <class Cloner, class Disposer>
- void clone_from(const sg_multiset_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the sg_multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ void clone_from(const sg_multiset_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::sgtree::insert_equal(reference)
iterator insert(reference value)
- { return tree_.insert_equal(value); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts x into the sg_multiset, using pos as a hint to
- //! where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_equal(value); }
+
+ //! @copydoc ::boost::intrusive::sgtree::insert_equal(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_equal(hint, value); }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the sg_multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_equal(hint, value); }
+
+ //! @copydoc ::boost::intrusive::sgtree::insert_equal(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_equal(b, e); }
-
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate
- //!
- //! <b>Effects</b>: Inserts x into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" tree ordering invariant will be broken.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- { return tree_.insert_before(pos, value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no less
- //! than the greatest inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than the greatest inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- { tree_.push_back(value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no greater
- //! than the minimum inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than the minimum inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- { tree_.push_front(value); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { return tree_.erase(b, e); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
-
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ { tree_type::insert_equal(b, e); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::sgtree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::sgtree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::sgtree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::sgtree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::sgtree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::sgtree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- size_type count(const_reference value) const
- { return tree_.count(value); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ void clear_and_dispose(Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::sgtree::count(const_reference)const
+ size_type count(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType& key, KeyValueCompare comp) const
- { return tree_.count(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound(const_reference value) const
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::sgtree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound(const_reference value) const
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::sgtree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find(const_reference value) const
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::sgtree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::sgtree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range(const_reference value) const
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ equal_range(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range(key, comp); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::sgtree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::sgtree::bounded_range(const_reference,const_reference,bool,bool)const
std::pair<const_iterator, const_iterator>
- bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a sg_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the sg_multiset
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a sg_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! sg_multiset that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a sg_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the sg_multiset
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a sg_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! sg_multiset that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value shall not be in a sg_multiset/sg_multiset.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
-
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- void rebalance()
- { tree_.rebalance(); }
-
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- iterator rebalance_subtree(iterator root)
- { return tree_.rebalance_subtree(root); }
-
- //! <b>Returns</b>: The balance factor (alpha) used in this tree
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- float balance_factor() const
- { return tree_.balance_factor(); }
-
- //! <b>Requires</b>: new_alpha must be a value between 0.5 and 1.0
- //!
- //! <b>Effects</b>: Establishes a new balance factor (alpha) and rebalances
- //! the tree if the new balance factor is stricter (less) than the old factor.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- void balance_factor(float new_alpha)
- { tree_.balance_factor(new_alpha); }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
- friend bool operator==(const sg_multiset_impl &x, const sg_multiset_impl &y)
- { return x.tree_ == y.tree_; }
+ //! @copydoc ::boost::intrusive::sgtree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- friend bool operator<(const sg_multiset_impl &x, const sg_multiset_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ //! @copydoc ::boost::intrusive::sgtree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::sgtree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::sgtree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::sgtree::remove_node
+ void remove_node(reference value);
+
+ //! @copydoc ::boost::intrusive::sgtree::rebalance
+ void rebalance();
+
+ //! @copydoc ::boost::intrusive::sgtree::rebalance_subtree
+ iterator rebalance_subtree(iterator root);
+
+ //! @copydoc ::boost::intrusive::sgtree::balance_factor()
+ float balance_factor() const;
+
+ //! @copydoc ::boost::intrusive::sgtree::balance_factor(float)
+ void balance_factor(float new_alpha);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sg_multiset_impl<T, Options...> &x, const sg_multiset_impl<T, Options...> &y)
-#else
-(const sg_multiset_impl<Config> &x, const sg_multiset_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const sg_multiset_impl<T, Options...> &x, const sg_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sg_multiset_impl<T, Options...> &x, const sg_multiset_impl<T, Options...> &y)
-#else
-(const sg_multiset_impl<Config> &x, const sg_multiset_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const sg_multiset_impl<T, Options...> &x, const sg_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sg_multiset_impl<T, Options...> &x, const sg_multiset_impl<T, Options...> &y)
-#else
-(const sg_multiset_impl<Config> &x, const sg_multiset_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const sg_multiset_impl<T, Options...> &x, const sg_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sg_multiset_impl<T, Options...> &x, const sg_multiset_impl<T, Options...> &y)
-#else
-(const sg_multiset_impl<Config> &x, const sg_multiset_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const sg_multiset_impl<T, Options...> &x, const sg_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(sg_multiset_impl<T, Options...> &x, sg_multiset_impl<T, Options...> &y)
-#else
-(sg_multiset_impl<Config> &x, sg_multiset_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(sg_multiset_impl<T, Options...> &x, sg_multiset_impl<T, Options...> &y);
+
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
//! Helper metafunction to define a \c sg_multiset that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_sg_multiset
{
/// @cond
+ typedef typename pack_options
+ < sgtree_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
typedef sg_multiset_impl
- < typename make_sgtree_opt<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
- > implementation_defined;
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::floating_point
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
@@ -2527,27 +896,27 @@ struct make_sg_multiset
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class sg_multiset
: public make_sg_multiset<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
>::type
{
- typedef typename make_sg_multiset
- <T,
+ typedef typename make_sg_multiset<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
>::type Base;
+
BOOST_MOVABLE_BUT_NOT_COPYABLE(sg_multiset)
public:
@@ -2576,7 +945,7 @@ class sg_multiset
{}
sg_multiset& operator=(BOOST_RV_REF(sg_multiset) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<sg_multiset &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static sg_multiset &container_from_end_iterator(iterator end_iterator)
{ return static_cast<sg_multiset &>(Base::container_from_end_iterator(end_iterator)); }
diff --git a/3party/boost/boost/intrusive/sgtree.hpp b/3party/boost/boost/intrusive/sgtree.hpp
index 91f276fa0c..cd4d8bc94e 100644
--- a/3party/boost/boost/intrusive/sgtree.hpp
+++ b/3party/boost/boost/intrusive/sgtree.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -19,6 +19,7 @@
#define BOOST_INTRUSIVE_SGTREE_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <algorithm>
#include <cstddef>
#include <functional>
@@ -28,12 +29,11 @@
#include <cstddef>
#include <boost/intrusive/detail/assert.hpp>
#include <boost/static_assert.hpp>
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/bs_set_hook.hpp>
+#include <boost/intrusive/bstree.hpp>
#include <boost/intrusive/detail/tree_node.hpp>
#include <boost/intrusive/detail/ebo_functor_holder.hpp>
#include <boost/intrusive/pointer_traits.hpp>
-#include <boost/intrusive/detail/clear_on_destructor_base.hpp>
#include <boost/intrusive/detail/mpl.hpp>
#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/options.hpp>
@@ -48,6 +48,12 @@ namespace intrusive {
namespace detail{
+/////////////////////////////////////////////////////////////
+//
+// Halpha for fixed floating_point<false> option
+//
+/////////////////////////////////////////////////////////////
+
//! Returns floor(log2(n)/log2(sqrt(2))) -> floor(2*log2(n))
//! Undefined if N is 0.
//!
@@ -55,7 +61,7 @@ namespace detail{
inline std::size_t calculate_h_sqrt2 (std::size_t n)
{
std::size_t f_log2 = detail::floor_log2(n);
- return (2*f_log2) + (n >= detail::sqrt2_pow_2xplus1 (f_log2));
+ return (2*f_log2) + static_cast<std::size_t>(n >= detail::sqrt2_pow_2xplus1(f_log2));
}
struct h_alpha_sqrt2_t
@@ -68,6 +74,7 @@ struct h_alpha_sqrt2_t
struct alpha_0_75_by_max_size_t
{
alpha_0_75_by_max_size_t(void){}
+
std::size_t operator()(std::size_t max_tree_size) const
{
const std::size_t max_tree_size_limit = ((~std::size_t(0))/std::size_t(3));
@@ -75,17 +82,26 @@ struct alpha_0_75_by_max_size_t
}
};
+/////////////////////////////////////////////////////////////
+//
+// Halpha for fixed floating_point<true> option
+//
+/////////////////////////////////////////////////////////////
+
struct h_alpha_t
{
- h_alpha_t(float inv_minus_logalpha)
+ explicit h_alpha_t(float inv_minus_logalpha)
: inv_minus_logalpha_(inv_minus_logalpha)
{}
std::size_t operator()(std::size_t n) const
{
- //Returns floor(log2(1/alpha(n))) ->
- // floor(log2(n)/log(1/alpha)) ->
- // floor(log2(n)/(-log2(alpha)))
+ ////////////////////////////////////////////////////////////
+ // This function must return "floor(log2(1/alpha(n)))" ->
+ // floor(log2(n)/log(1/alpha)) ->
+ // floor(log2(n)/-log2(alpha))
+ // floor(log2(n)*(1/-log2(alpha)))
+ ////////////////////////////////////////////////////////////
//return static_cast<std::size_t>(std::log(float(n))*inv_minus_logalpha_);
return static_cast<std::size_t>(detail::fast_log2(float(n))*inv_minus_logalpha_);
}
@@ -94,13 +110,13 @@ struct h_alpha_t
//Since the function will be repeatedly called
//precalculate constant data to avoid repeated
//calls to log and division.
- //This will store 1/(-std::log(alpha_))
+ //This will store 1/(-std::log2(alpha_))
float inv_minus_logalpha_;
};
struct alpha_by_max_size_t
{
- alpha_by_max_size_t(float alpha)
+ explicit alpha_by_max_size_t(float alpha)
: alpha_(alpha)
{}
@@ -109,17 +125,17 @@ struct alpha_by_max_size_t
private:
float alpha_;
- float inv_minus_logalpha_;
};
-template<bool Activate>
+template<bool Activate, class SizeType>
struct alpha_holder
{
typedef boost::intrusive::detail::h_alpha_t h_alpha_t;
typedef boost::intrusive::detail::alpha_by_max_size_t multiply_by_alpha_t;
alpha_holder()
- { set_alpha(0.7f); }
+ : max_tree_size_()
+ { set_alpha(0.70711f); } // ~1/sqrt(2)
float get_alpha() const
{ return alpha_; }
@@ -131,18 +147,19 @@ struct alpha_holder
}
h_alpha_t get_h_alpha_t() const
- { return h_alpha_t(inv_minus_logalpha_); }
+ { return h_alpha_t(/*alpha_, */inv_minus_logalpha_); }
multiply_by_alpha_t get_multiply_by_alpha_t() const
{ return multiply_by_alpha_t(alpha_); }
- private:
+ protected:
float alpha_;
float inv_minus_logalpha_;
+ SizeType max_tree_size_;
};
-template<>
-struct alpha_holder<false>
+template<class SizeType>
+struct alpha_holder<false, SizeType>
{
//This specialization uses alpha = 1/sqrt(2)
//without using floating point operations
@@ -150,6 +167,10 @@ struct alpha_holder<false>
typedef boost::intrusive::detail::h_alpha_sqrt2_t h_alpha_t;
typedef boost::intrusive::detail::alpha_0_75_by_max_size_t multiply_by_alpha_t;
+ alpha_holder()
+ : max_tree_size_()
+ {}
+
float get_alpha() const
{ return 0.70710677f; }
@@ -163,30 +184,22 @@ struct alpha_holder<false>
multiply_by_alpha_t get_multiply_by_alpha_t() const
{ return multiply_by_alpha_t(); }
+
+ SizeType max_tree_size_;
};
} //namespace detail{
-template <class ValueTraits, class Compare, class SizeType, bool FloatingPoint>
-struct sg_setopt
+struct sgtree_defaults
{
- typedef ValueTraits value_traits;
- typedef Compare compare;
- typedef SizeType size_type;
- static const bool floating_point = FloatingPoint;
+ typedef detail::default_bstree_hook proto_value_traits;
+ static const bool constant_time_size = true;
+ typedef std::size_t size_type;
+ typedef void compare;
+ static const bool floating_point = true;
+ typedef void header_holder_type;
};
-template <class T>
-struct sg_set_defaults
- : pack_options
- < none
- , base_hook<detail::default_bs_set_hook>
- , floating_point<true>
- , size_type<std::size_t>
- , compare<std::less<T> >
- >::type
-{};
-
/// @endcond
//! The class template sgtree is an intrusive scapegoat tree container, that
@@ -205,499 +218,237 @@ struct sg_set_defaults
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class VoidOrKeyComp, class SizeType, bool FloatingPoint, typename HeaderHolder>
#endif
class sgtree_impl
- : private detail::clear_on_destructor_base<sgtree_impl<Config> >
+ /// @cond
+ : public bstree_impl<ValueTraits, VoidOrKeyComp, SizeType, true, SgTreeAlgorithms, HeaderHolder>
+ , public detail::alpha_holder<FloatingPoint, SizeType>
+ /// @endcond
{
- template<class C> friend class detail::clear_on_destructor_base;
public:
- typedef typename Config::value_traits value_traits;
+ typedef ValueTraits value_traits;
/// @cond
- static const bool external_value_traits =
- detail::external_value_traits_bool_is_true<value_traits>::value;
- typedef typename detail::eval_if_c
- < external_value_traits
- , detail::eval_value_traits<value_traits>
- , detail::identity<value_traits>
- >::type real_value_traits;
+ typedef bstree_impl< ValueTraits, VoidOrKeyComp, SizeType
+ , true, SgTreeAlgorithms, HeaderHolder> tree_type;
+ typedef tree_type implementation_defined;
+
/// @endcond
- typedef typename real_value_traits::pointer pointer;
- typedef typename real_value_traits::const_pointer const_pointer;
- typedef typename pointer_traits<pointer>::element_type value_type;
- typedef value_type key_type;
- typedef typename pointer_traits<pointer>::reference reference;
- typedef typename pointer_traits<const_pointer>::reference const_reference;
- typedef typename pointer_traits<const_pointer>::difference_type difference_type;
- typedef typename Config::size_type size_type;
- typedef typename Config::compare value_compare;
- typedef value_compare key_compare;
- typedef tree_iterator<sgtree_impl, false> iterator;
- typedef tree_iterator<sgtree_impl, true> const_iterator;
- typedef boost::intrusive::detail::reverse_iterator<iterator> reverse_iterator;
- typedef boost::intrusive::detail::reverse_iterator<const_iterator>const_reverse_iterator;
- typedef typename real_value_traits::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename pointer_traits
- <pointer>::template rebind_pointer
- <node>::type node_ptr;
- typedef typename pointer_traits
- <pointer>::template rebind_pointer
- <const node>::type const_node_ptr;
- typedef sgtree_algorithms<node_traits> node_algorithms;
-
- static const bool floating_point = Config::floating_point;
- static const bool constant_time_size = true;
- static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
+
+ typedef typename implementation_defined::pointer pointer;
+ typedef typename implementation_defined::const_pointer const_pointer;
+ typedef typename implementation_defined::value_type value_type;
+ typedef typename implementation_defined::key_type key_type;
+ typedef typename implementation_defined::reference reference;
+ typedef typename implementation_defined::const_reference const_reference;
+ typedef typename implementation_defined::difference_type difference_type;
+ typedef typename implementation_defined::size_type size_type;
+ typedef typename implementation_defined::value_compare value_compare;
+ typedef typename implementation_defined::key_compare key_compare;
+ typedef typename implementation_defined::iterator iterator;
+ typedef typename implementation_defined::const_iterator const_iterator;
+ typedef typename implementation_defined::reverse_iterator reverse_iterator;
+ typedef typename implementation_defined::const_reverse_iterator const_reverse_iterator;
+ typedef typename implementation_defined::node_traits node_traits;
+ typedef typename implementation_defined::node node;
+ typedef typename implementation_defined::node_ptr node_ptr;
+ typedef typename implementation_defined::const_node_ptr const_node_ptr;
+ typedef BOOST_INTRUSIVE_IMPDEF(sgtree_algorithms<node_traits>) node_algorithms;
+
+ static const bool constant_time_size = implementation_defined::constant_time_size;
+ static const bool floating_point = FloatingPoint;
+ static const bool stateful_value_traits = implementation_defined::stateful_value_traits;
/// @cond
private:
- typedef detail::size_holder<true, size_type> size_traits;
- typedef detail::alpha_holder<floating_point> alpha_traits;
- typedef typename alpha_traits::h_alpha_t h_alpha_t;
- typedef typename alpha_traits::multiply_by_alpha_t multiply_by_alpha_t;
//noncopyable
+ typedef detail::alpha_holder<FloatingPoint, SizeType> alpha_traits;
+ typedef typename alpha_traits::h_alpha_t h_alpha_t;
+ typedef typename alpha_traits::multiply_by_alpha_t multiply_by_alpha_t;
+
BOOST_MOVABLE_BUT_NOT_COPYABLE(sgtree_impl)
+ BOOST_STATIC_ASSERT(((int)value_traits::link_mode != (int)auto_unlink));
enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
-
- BOOST_STATIC_ASSERT(((int)real_value_traits::link_mode != (int)auto_unlink));
-
- //BOOST_STATIC_ASSERT((
- // (int)real_value_traits::link_mode != (int)auto_unlink ||
- // !floating_point
- // ));
-
- struct header_plus_alpha : public alpha_traits
- { node header_; };
-
- struct node_plus_pred_t : public detail::ebo_functor_holder<value_compare>
- {
- node_plus_pred_t(const value_compare &comp)
- : detail::ebo_functor_holder<value_compare>(comp)
- {}
- header_plus_alpha header_plus_alpha_;
- size_traits size_traits_;
- };
-
- struct data_t : public sgtree_impl::value_traits
- {
- typedef typename sgtree_impl::value_traits value_traits;
- data_t(const value_compare & comp, const value_traits &val_traits)
- : value_traits(val_traits), node_plus_pred_(comp)
- , max_tree_size_(0)
- {}
- node_plus_pred_t node_plus_pred_;
- size_type max_tree_size_;
- } data_;
-
- float priv_alpha() const
- { return this->priv_alpha_traits().get_alpha(); }
-
- void priv_alpha(float alpha)
- { return this->priv_alpha_traits().set_alpha(alpha); }
-
- const value_compare &priv_comp() const
- { return data_.node_plus_pred_.get(); }
-
- value_compare &priv_comp()
- { return data_.node_plus_pred_.get(); }
-
- const value_traits &priv_value_traits() const
- { return data_; }
-
- value_traits &priv_value_traits()
- { return data_; }
-
- node_ptr priv_header_ptr()
- { return pointer_traits<node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_alpha_.header_); }
-
- const_node_ptr priv_header_ptr() const
- { return pointer_traits<const_node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_alpha_.header_); }
-
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
-
- size_traits &priv_size_traits()
- { return data_.node_plus_pred_.size_traits_; }
-
- const size_traits &priv_size_traits() const
- { return data_.node_plus_pred_.size_traits_; }
-
- alpha_traits &priv_alpha_traits()
- { return data_.node_plus_pred_.header_plus_alpha_; }
-
- const alpha_traits &priv_alpha_traits() const
- { return data_.node_plus_pred_.header_plus_alpha_; }
-
- const real_value_traits &get_real_value_traits(detail::bool_<false>) const
- { return data_; }
-
- const real_value_traits &get_real_value_traits(detail::bool_<true>) const
- { return data_.get_value_traits(*this); }
-
- real_value_traits &get_real_value_traits(detail::bool_<false>)
- { return data_; }
-
- real_value_traits &get_real_value_traits(detail::bool_<true>)
- { return data_.get_value_traits(*this); }
-
- h_alpha_t get_h_alpha_func() const
- { return priv_alpha_traits().get_h_alpha_t(); }
-
- multiply_by_alpha_t get_alpha_by_max_size_func() const
- { return priv_alpha_traits().get_multiply_by_alpha_t(); }
+ (int)value_traits::link_mode == (int)auto_unlink ||
+ (int)value_traits::link_mode == (int)safe_link };
/// @endcond
public:
- const real_value_traits &get_real_value_traits() const
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
- real_value_traits &get_real_value_traits()
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
+ typedef BOOST_INTRUSIVE_IMPDEF(typename node_algorithms::insert_commit_data) insert_commit_data;
- typedef typename node_algorithms::insert_commit_data insert_commit_data;
-
- //! <b>Effects</b>: Constructs an empty tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructorof the value_compare object throws. Basic guarantee.
- explicit sgtree_impl( const value_compare &cmp = value_compare()
+ //! @copydoc ::boost::intrusive::bstree::bstree(const value_compare &,const value_traits &)
+ explicit sgtree_impl( const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : data_(cmp, v_traits)
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- }
+ : tree_type(cmp, v_traits)
+ {}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty tree and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is the distance between first and last.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::bstree::bstree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
sgtree_impl( bool unique, Iterator b, Iterator e
, const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : data_(cmp, v_traits)
+ : tree_type(cmp, v_traits)
{
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
if(unique)
this->insert_unique(b, e);
else
this->insert_equal(b, e);
}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&)
sgtree_impl(BOOST_RV_REF(sgtree_impl) x)
- : data_(::boost::move(x.priv_comp()), ::boost::move(x.priv_value_traits()))
+ : tree_type(::boost::move(static_cast<tree_type&>(x))), alpha_traits(x.get_alpha_traits())
+ { std::swap(this->get_alpha_traits(), x.get_alpha_traits()); }
+
+ //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&)
+ sgtree_impl& operator=(BOOST_RV_REF(sgtree_impl) x)
{
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- this->swap(x);
+ this->get_alpha_traits() = x.get_alpha_traits();
+ return static_cast<sgtree_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x))));
}
- //! <b>Effects</b>: to-do
- //!
- sgtree_impl& operator=(BOOST_RV_REF(sgtree_impl) x)
- { this->swap(x); return *this; }
+ /// @cond
+ private:
- //! <b>Effects</b>: Detaches all elements from this. The objects in the set
- //! are not deleted (i.e. no destructors are called), but the nodes according to
- //! the value_traits template parameter are reinitialized and thus can be reused.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this.
- //!
- //! <b>Throws</b>: Nothing.
- ~sgtree_impl()
- {}
+ const alpha_traits &get_alpha_traits() const
+ { return *this; }
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return iterator (node_traits::get_left(this->priv_header_ptr()), this); }
+ alpha_traits &get_alpha_traits()
+ { return *this; }
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return cbegin(); }
+ h_alpha_t get_h_alpha_func() const
+ { return this->get_alpha_traits().get_h_alpha_t(); }
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return const_iterator (node_traits::get_left(this->priv_header_ptr()), this); }
+ multiply_by_alpha_t get_alpha_by_max_size_func() const
+ { return this->get_alpha_traits().get_multiply_by_alpha_t(); }
- //! <b>Effects</b>: Returns an iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return iterator (this->priv_header_ptr(), this); }
+ /// @endcond
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return cend(); }
+ public:
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return const_iterator (uncast(this->priv_header_ptr()), this); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::~bstree()
+ ~sgtree_impl();
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return reverse_iterator(end()); }
+ //! @copydoc ::boost::intrusive::bstree::begin()
+ iterator begin();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator(end()); }
+ //! @copydoc ::boost::intrusive::bstree::begin()const
+ const_iterator begin() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return const_reverse_iterator(end()); }
+ //! @copydoc ::boost::intrusive::bstree::cbegin()const
+ const_iterator cbegin() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return reverse_iterator(begin()); }
+ //! @copydoc ::boost::intrusive::bstree::end()
+ iterator end();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return const_reverse_iterator(begin()); }
+ //! @copydoc ::boost::intrusive::bstree::end()const
+ const_iterator end() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return const_reverse_iterator(begin()); }
+ //! @copydoc ::boost::intrusive::bstree::cend()const
+ const_iterator cend() const;
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of sgtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the sgtree associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static sgtree_impl &container_from_end_iterator(iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
+ //! @copydoc ::boost::intrusive::bstree::rbegin()
+ reverse_iterator rbegin();
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of sgtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the sgtree associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const sgtree_impl &container_from_end_iterator(const_iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
+ //! @copydoc ::boost::intrusive::bstree::rbegin()const
+ const_reverse_iterator rbegin() const;
- //! <b>Precondition</b>: it must be a valid iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static sgtree_impl &container_from_iterator(iterator it)
- { return priv_container_from_iterator(it); }
+ //! @copydoc ::boost::intrusive::bstree::crbegin()const
+ const_reverse_iterator crbegin() const;
- //! <b>Precondition</b>: it must be a valid end const_iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const sgtree_impl &container_from_iterator(const_iterator it)
- { return priv_container_from_iterator(it); }
+ //! @copydoc ::boost::intrusive::bstree::rend()
+ reverse_iterator rend();
- //! <b>Effects</b>: Returns the value_compare object used by the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return priv_comp(); }
+ //! @copydoc ::boost::intrusive::bstree::rend()const
+ const_reverse_iterator rend() const;
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return node_algorithms::unique(this->priv_header_ptr()); }
+ //! @copydoc ::boost::intrusive::bstree::crend()const
+ const_reverse_iterator crend() const;
- //! <b>Effects</b>: Returns the number of elements stored in the tree.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this
- //! if constant-time size option is disabled. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- {
- if(constant_time_size)
- return this->priv_size_traits().get_size();
- else{
- return (size_type)node_algorithms::size(this->priv_header_ptr());
- }
- }
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(iterator)
+ static sgtree_impl &container_from_end_iterator(iterator end_iterator);
- //! <b>Effects</b>: Swaps the contents of two sgtrees.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the comparison functor's swap call throws.
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(const_iterator)
+ static const sgtree_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(iterator)
+ static sgtree_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(const_iterator)
+ static const sgtree_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::bstree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::bstree::size()const
+ size_type size() const;
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree::swap
void swap(sgtree_impl& other)
{
//This can throw
using std::swap;
- swap(priv_comp(), priv_comp());
- swap(priv_alpha_traits(), priv_alpha_traits());
- swap(data_.max_tree_size_, other.data_.max_tree_size_);
- //These can't throw
- node_algorithms::swap_tree(this->priv_header_ptr(), other.priv_header_ptr());
- 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());
- other.priv_size_traits().set_size(backup);
- }
+ this->tree_type::swap(static_cast<tree_type&>(other));
+ swap(this->get_alpha_traits(), other.get_alpha_traits());
}
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the tree before the upper bound.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::bstree::clone_from
+ //! Additional notes: it also copies the alpha factor from the source container.
+ template <class Cloner, class Disposer>
+ void clone_from(const sgtree_impl &src, Cloner cloner, Disposer disposer)
+ {
+ this->tree_type::clone_from(src, cloner, disposer);
+ this->get_alpha_traits() = src.get_alpha_traits();
+ }
+
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(reference)
iterator insert_equal(reference value)
{
- detail::key_nodeptr_comp<value_compare, sgtree_impl>
- key_node_comp(priv_comp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ detail::key_nodeptr_comp<value_compare, value_traits>
+ key_node_comp(this->value_comp(), &this->get_value_traits());
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- std::size_t max_tree_size = (std::size_t)data_.max_tree_size_;
+ std::size_t max_tree_size = (std::size_t)this->max_tree_size_;
node_ptr p = node_algorithms::insert_equal_upper_bound
- (this->priv_header_ptr(), to_insert, key_node_comp
+ (this->tree_type::header_ptr(), to_insert, key_node_comp
, (size_type)this->size(), this->get_h_alpha_func(), max_tree_size);
- this->priv_size_traits().increment();
- data_.max_tree_size_ = (size_type)max_tree_size;
- return iterator(p, this);
+ this->tree_type::sz_traits().increment();
+ this->max_tree_size_ = (size_type)max_tree_size;
+ return iterator(p, this->priv_value_traits_ptr());
}
- //! <b>Requires</b>: value must be an lvalue, and "hint" must be
- //! a valid iterator.
- //!
- //! <b>Effects</b>: Inserts x into the tree, using "hint" as a hint to
- //! where it will be inserted. If "hint" is the upper_bound
- //! the insertion takes constant time (two comparisons in the worst case)
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(const_iterator,reference)
iterator insert_equal(const_iterator hint, reference value)
{
- detail::key_nodeptr_comp<value_compare, sgtree_impl>
- key_node_comp(priv_comp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ detail::key_nodeptr_comp<value_compare, value_traits>
+ key_node_comp(this->value_comp(), &this->get_value_traits());
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- std::size_t max_tree_size = (std::size_t)data_.max_tree_size_;
+ std::size_t max_tree_size = (std::size_t)this->max_tree_size_;
node_ptr p = node_algorithms::insert_equal
- (this->priv_header_ptr(), hint.pointed_node(), to_insert, key_node_comp
+ (this->tree_type::header_ptr(), hint.pointed_node(), to_insert, key_node_comp
, (std::size_t)this->size(), this->get_h_alpha_func(), max_tree_size);
- this->priv_size_traits().increment();
- data_.max_tree_size_ = (size_type)max_tree_size;
- return iterator(p, this);
+ this->tree_type::sz_traits().increment();
+ this->max_tree_size_ = (size_type)max_tree_size;
+ return iterator(p, this->priv_value_traits_ptr());
}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a each element of a range into the tree
- //! before the upper bound of the key of each element.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(Iterator,Iterator)
template<class Iterator>
void insert_equal(Iterator b, Iterator e)
{
@@ -706,285 +457,128 @@ class sgtree_impl
this->insert_equal(iend, *b);
}
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the tree if the value
- //! is not already present.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(reference)
std::pair<iterator, bool> insert_unique(reference value)
{
insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(value, priv_comp(), commit_data);
+ std::pair<iterator, bool> ret = insert_unique_check(value, this->value_comp(), commit_data);
if(!ret.second)
return ret;
return std::pair<iterator, bool> (insert_unique_commit(value, commit_data), true);
}
- //! <b>Requires</b>: value must be an lvalue, and "hint" must be
- //! a valid iterator
- //!
- //! <b>Effects</b>: Tries to insert x into the tree, using "hint" as a hint
- //! to where it will be inserted.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time (two comparisons in the worst case)
- //! if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(const_iterator,reference)
iterator insert_unique(const_iterator hint, reference value)
{
insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(hint, value, priv_comp(), commit_data);
+ std::pair<iterator, bool> ret = insert_unique_check(hint, value, this->value_comp(), commit_data);
if(!ret.second)
return ret.first;
return insert_unique_commit(value, commit_data);
}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Tries to insert each element of a range into the tree.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- template<class Iterator>
- void insert_unique(Iterator b, Iterator e)
- {
- if(this->empty()){
- iterator iend(this->end());
- for (; b != e; ++b)
- this->insert_unique(iend, *b);
- }
- else{
- for (; b != e; ++b)
- this->insert_unique(*b);
- }
- }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the container, using
- //! a user provided key instead of the value itself.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that
- //! part to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the container.
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_unique_check
(const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
{
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- comp(key_value_comp, this);
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ comp(key_value_comp, &this->get_value_traits());
std::pair<node_ptr, bool> ret =
(node_algorithms::insert_unique_check
- (this->priv_header_ptr(), key, comp, commit_data));
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
+ (this->tree_type::header_ptr(), key, comp, commit_data));
+ return std::pair<iterator, bool>(iterator(ret.first, this->priv_value_traits_ptr()), ret.second);
}
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the container, using
- //! a user provided key instead of the value itself, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! constructing that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that key
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This can give a total
- //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the container.
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_unique_check
(const_iterator hint, const KeyType &key
,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
{
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- comp(key_value_comp, this);
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ comp(key_value_comp, &this->get_value_traits());
std::pair<node_ptr, bool> ret =
(node_algorithms::insert_unique_check
- (this->priv_header_ptr(), hint.pointed_node(), key, comp, commit_data));
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
+ (this->tree_type::header_ptr(), hint.pointed_node(), key, comp, commit_data));
+ return std::pair<iterator, bool>(iterator(ret.first, this->priv_value_traits_ptr()), ret.second);
}
- //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
- //! must have been obtained from a previous call to "insert_check".
- //! No objects should have been inserted or erased from the container between
- //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
- //!
- //! <b>Effects</b>: Inserts the value in the avl_set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Returns</b>: An iterator to the newly inserted object.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_commit
iterator insert_unique_commit(reference value, const insert_commit_data &commit_data)
{
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- std::size_t max_tree_size = (std::size_t)data_.max_tree_size_;
+ std::size_t max_tree_size = (std::size_t)this->max_tree_size_;
node_algorithms::insert_unique_commit
- ( this->priv_header_ptr(), to_insert, commit_data
+ ( this->tree_type::header_ptr(), to_insert, commit_data
, (std::size_t)this->size(), this->get_h_alpha_func(), max_tree_size);
- this->priv_size_traits().increment();
- data_.max_tree_size_ = (size_type)max_tree_size;
- return iterator(to_insert, this);
+ this->tree_type::sz_traits().increment();
+ this->max_tree_size_ = (size_type)max_tree_size;
+ return iterator(to_insert, this->priv_value_traits_ptr());
}
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate
- //!
- //! <b>Effects</b>: Inserts x into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" tree ordering invariant will be broken.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(Iterator,Iterator)
+ template<class Iterator>
+ void insert_unique(Iterator b, Iterator e)
+ {
+ if(this->empty()){
+ iterator iend(this->end());
+ for (; b != e; ++b)
+ this->insert_unique(iend, *b);
+ }
+ else{
+ for (; b != e; ++b)
+ this->insert_unique(*b);
+ }
+ }
+
+ //! @copydoc ::boost::intrusive::bstree::insert_before
iterator insert_before(const_iterator pos, reference value)
{
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- std::size_t max_tree_size = (std::size_t)data_.max_tree_size_;
+ std::size_t max_tree_size = (std::size_t)this->max_tree_size_;
node_ptr p = node_algorithms::insert_before
- ( this->priv_header_ptr(), pos.pointed_node(), to_insert
+ ( this->tree_type::header_ptr(), pos.pointed_node(), to_insert
, (size_type)this->size(), this->get_h_alpha_func(), max_tree_size);
- this->priv_size_traits().increment();
- data_.max_tree_size_ = (size_type)max_tree_size;
- return iterator(p, this);
+ this->tree_type::sz_traits().increment();
+ this->max_tree_size_ = (size_type)max_tree_size;
+ return iterator(p, this->priv_value_traits_ptr());
}
- //! <b>Requires</b>: value must be an lvalue, and it must be no less
- //! than the greatest inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than the greatest inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
+ //! @copydoc ::boost::intrusive::bstree::push_back
void push_back(reference value)
{
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- std::size_t max_tree_size = (std::size_t)data_.max_tree_size_;
+ std::size_t max_tree_size = (std::size_t)this->max_tree_size_;
node_algorithms::push_back
- ( this->priv_header_ptr(), to_insert
+ ( this->tree_type::header_ptr(), to_insert
, (size_type)this->size(), this->get_h_alpha_func(), max_tree_size);
- this->priv_size_traits().increment();
- data_.max_tree_size_ = (size_type)max_tree_size;
+ this->tree_type::sz_traits().increment();
+ this->max_tree_size_ = (size_type)max_tree_size;
}
- //! <b>Requires</b>: value must be an lvalue, and it must be no greater
- //! than the minimum inserted key
- //!
- //! <b>Effects</b>: Inserts x into the tree in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than the minimum inserted key tree ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
+ //! @copydoc ::boost::intrusive::bstree::push_front
void push_front(reference value)
{
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- std::size_t max_tree_size = (std::size_t)data_.max_tree_size_;
+ std::size_t max_tree_size = (std::size_t)this->max_tree_size_;
node_algorithms::push_front
- ( this->priv_header_ptr(), to_insert
+ ( this->tree_type::header_ptr(), to_insert
, (size_type)this->size(), this->get_h_alpha_func(), max_tree_size);
- this->priv_size_traits().increment();
- data_.max_tree_size_ = (size_type)max_tree_size;
+ this->tree_type::sz_traits().increment();
+ this->max_tree_size_ = (size_type)max_tree_size;
}
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator)
iterator erase(const_iterator i)
{
const_iterator ret(i);
@@ -992,53 +586,26 @@ class sgtree_impl
node_ptr to_erase(i.pointed_node());
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!node_algorithms::unique(to_erase));
- std::size_t max_tree_size = data_.max_tree_size_;
+ std::size_t max_tree_size = this->max_tree_size_;
node_algorithms::erase
- ( this->priv_header_ptr(), to_erase, (std::size_t)this->size()
+ ( this->tree_type::header_ptr(), to_erase, (std::size_t)this->size()
, max_tree_size, this->get_alpha_by_max_size_func());
- data_.max_tree_size_ = (size_type)max_tree_size;
- this->priv_size_traits().decrement();
+ this->max_tree_size_ = (size_type)max_tree_size;
+ this->tree_type::sz_traits().decrement();
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
return ret.unconst();
}
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator,const_iterator)
iterator erase(const_iterator b, const_iterator e)
{ size_type n; return private_erase(b, e, n); }
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::bstree::erase(const_reference)
size_type erase(const_reference value)
- { return this->erase(value, priv_comp()); }
+ { return this->erase(value, this->value_comp()); }
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::bstree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
size_type erase(const KeyType& key, KeyValueCompare comp
/// @cond
@@ -1052,23 +619,13 @@ class sgtree_impl
return n;
}
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
iterator erase_and_dispose(const_iterator i, Disposer disposer)
{
node_ptr to_erase(i.pointed_node());
iterator ret(this->erase(i));
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(this->get_value_traits().to_value_ptr(to_erase));
return ret;
}
@@ -1078,35 +635,12 @@ class sgtree_impl
{ return this->erase_and_dispose(const_iterator(i), disposer); }
#endif
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
{ size_type n; return private_erase(b, e, n, disposer); }
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
size_type erase_and_dispose(const_reference value, Disposer disposer)
{
@@ -1116,20 +650,7 @@ class sgtree_impl
return n;
}
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
/// @cond
@@ -1143,535 +664,136 @@ class sgtree_impl
return n;
}
- //! <b>Effects</b>: Erases all of the elements.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::bstree::clear
void clear()
{
- if(safemode_or_autounlink){
- this->clear_and_dispose(detail::null_disposer());
- }
- else{
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(0);
- }
+ tree_type::clear();
+ this->max_tree_size_ = 0;
}
- //! <b>Effects</b>: Erases all of the elements calling disposer(p) for
- //! each node to be erased.
- //! <b>Complexity</b>: Average complexity for is at most O(log(size() + N)),
- //! where N is the number of elements in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. Calls N times to disposer functor.
+ //! @copydoc ::boost::intrusive::bstree::clear_and_dispose
template<class Disposer>
void clear_and_dispose(Disposer disposer)
{
- node_algorithms::clear_and_dispose(this->priv_header_ptr()
- , detail::node_disposer<Disposer, sgtree_impl>(disposer, this));
- this->priv_size_traits().set_size(0);
+ tree_type::clear_and_dispose(disposer);
+ this->max_tree_size_ = 0;
}
- //! <b>Effects</b>: Returns the number of contained elements with the given value
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given value.
- //!
- //! <b>Throws</b>: Nothing.
- size_type count(const_reference value) const
- { return this->count(value, priv_comp()); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::count(const_reference)const
+ size_type count(const_reference value) const;
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType &key, KeyValueCompare comp) const
- {
- std::pair<const_iterator, const_iterator> ret = this->equal_range(key, comp);
- return std::distance(ret.first, ret.second);
- }
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator lower_bound(const_reference value)
- { return this->lower_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator lower_bound(const_reference value) const
- { return this->lower_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator upper_bound(const_reference value)
- { return this->upper_bound(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::upper_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator upper_bound(const_reference value) const
- { return this->upper_bound(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::upper_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator find(const_reference value)
- { return this->find(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)
+ iterator find(const_reference value);
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- return iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this);
- }
+ iterator find(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator find(const_reference value) const
- { return this->find(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)const
+ const_iterator find(const_reference value) const;
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- return const_iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this);
- }
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return this->equal_range(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range(const_reference value) const
- { return this->equal_range(value, priv_comp()); }
+ equal_range(const_reference value) const;
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
- std::pair<const_iterator,const_iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)const
+ std::pair<const_iterator, const_iterator>
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator,const_iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, sgtree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
- template <class Cloner, class Disposer>
- void clone_from(const sgtree_impl &src, Cloner cloner, Disposer disposer)
- {
- this->clear_and_dispose(disposer);
- if(!src.empty()){
- detail::exception_disposer<sgtree_impl, Disposer>
- rollback(*this, disposer);
- node_algorithms::clone
- (src.priv_header_ptr()
- ,this->priv_header_ptr()
- ,detail::node_cloner<Cloner, sgtree_impl>(cloner, this)
- ,detail::node_disposer<Disposer, sgtree_impl>(disposer, this));
- this->priv_size_traits().set_size(src.priv_size_traits().get_size());
- this->priv_comp() = src.priv_comp();
- rollback.release();
- }
- }
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- {
- node_ptr to_be_disposed(node_algorithms::unlink_leftmost_without_rebalance
- (this->priv_header_ptr()));
- if(!to_be_disposed)
- return 0;
- this->priv_size_traits().decrement();
- if(safemode_or_autounlink)//If this is commented does not work with normal_link
- node_algorithms::init(to_be_disposed);
- return get_real_value_traits().to_value_ptr(to_be_disposed);
- }
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- {
- node_algorithms::replace_node( get_real_value_traits().to_node_ptr(*replace_this)
- , this->priv_header_ptr()
- , get_real_value_traits().to_node_ptr(with_this));
- if(safemode_or_autounlink)
- node_algorithms::init(replace_this.pointed_node());
- }
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(reference)
+ iterator iterator_to(reference value);
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return iterator (value_traits::to_node_ptr(value), 0);
- }
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), 0);
- }
+ //! @copydoc ::boost::intrusive::bstree::init_node(reference)
+ static void init_node(reference value);
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return iterator (value_traits::to_node_ptr(value), this); }
+ //! @copydoc ::boost::intrusive::bstree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), this); }
+ //! @copydoc ::boost::intrusive::bstree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
- //! <b>Requires</b>: value shall not be in a tree.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { node_algorithms::init(value_traits::to_node_ptr(value)); }
+ //! @copydoc ::boost::intrusive::bstree::remove_node
+ void remove_node(reference value);
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- void rebalance()
- { node_algorithms::rebalance(this->priv_header_ptr()); }
+ //! @copydoc ::boost::intrusive::bstree::rebalance
+ void rebalance();
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- iterator rebalance_subtree(iterator root)
- { return iterator(node_algorithms::rebalance_subtree(root.pointed_node()), this); }
+ //! @copydoc ::boost::intrusive::bstree::rebalance_subtree
+ iterator rebalance_subtree(iterator root);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Returns</b>: The balance factor (alpha) used in this tree
//!
@@ -1679,7 +801,7 @@ class sgtree_impl
//!
//! <b>Complexity</b>: Constant.
float balance_factor() const
- { return this->priv_alpha(); }
+ { return this->get_alpha_traits().get_alpha(); }
//! <b>Requires</b>: new_alpha must be a value between 0.5 and 1.0
//!
@@ -1697,41 +819,14 @@ class sgtree_impl
//The alpha factor CAN't be changed if the fixed, floating operation-less
//1/sqrt(2) alpha factor option is activated
BOOST_STATIC_ASSERT((floating_point));
- float old_alpha = this->priv_alpha();
- this->priv_alpha(new_alpha);
+ float old_alpha = this->get_alpha_traits().get_alpha();
+ this->get_alpha_traits().set_alpha(new_alpha);
if(new_alpha < old_alpha){
- data_.max_tree_size_ = this->size();
+ this->max_tree_size_ = this->size();
this->rebalance();
}
}
-/*
- //! <b>Effects</b>: removes x from a tree of the appropriate type. It has no effect,
- //! if x is not in such a tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This static function is only usable with the "safe mode"
- //! hook and non-constant time size lists. Otherwise, the user must use
- //! the non-static "erase(reference )" member. If the user calls
- //! this function with a non "safe mode" or constant time size list
- //! a compilation error will be issued.
- template<class T>
- static void remove_node(T& value)
- {
- //This function is only usable for safe mode hooks and non-constant
- //time lists.
- //BOOST_STATIC_ASSERT((!(safemode_or_autounlink && constant_time_size)));
- BOOST_STATIC_ASSERT((!constant_time_size));
- BOOST_STATIC_ASSERT((boost::is_convertible<T, value_type>::value));
- node_ptr to_remove(value_traits::to_node_ptr(value));
- node_algorithms::unlink_and_rebalance(to_remove);
- if(safemode_or_autounlink)
- node_algorithms::init(to_remove);
- }
-*/
/// @cond
private:
@@ -1750,230 +845,110 @@ class sgtree_impl
return b.unconst();
}
/// @endcond
-
- private:
- static sgtree_impl &priv_container_from_end_iterator(const const_iterator &end_iterator)
- {
- header_plus_alpha *r = detail::parent_from_member<header_plus_alpha, node>
- ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), &header_plus_alpha::header_);
- node_plus_pred_t *n = detail::parent_from_member
- <node_plus_pred_t, header_plus_alpha>(r, &node_plus_pred_t::header_plus_alpha_);
- data_t *d = detail::parent_from_member<data_t, node_plus_pred_t>(n, &data_t::node_plus_pred_);
- sgtree_impl *scapegoat = detail::parent_from_member<sgtree_impl, data_t>(d, &sgtree_impl::data_);
- return *scapegoat;
- }
-
- static sgtree_impl &priv_container_from_iterator(const const_iterator &it)
- { return priv_container_from_end_iterator(it.end_iterator_from_it()); }
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y)
-#else
-(const sgtree_impl<Config> &x, const sgtree_impl<Config> &y)
-#endif
-{ return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-bool operator==
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y)
-#else
-(const sgtree_impl<Config> &x, const sgtree_impl<Config> &y)
-#endif
-{
- typedef sgtree_impl<Config> tree_type;
- typedef typename tree_type::const_iterator const_iterator;
+bool operator< (const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y);
- if(tree_type::constant_time_size && x.size() != y.size()){
- return false;
- }
- const_iterator end1 = x.end();
- const_iterator i1 = x.begin();
- const_iterator i2 = y.begin();
- if(tree_type::constant_time_size){
- while (i1 != end1 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1;
- }
- else{
- const_iterator end2 = y.end();
- while (i1 != end1 && i2 != end2 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1 && i2 == end2;
- }
-}
+template<class T, class ...Options>
+bool operator==(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y)
-#else
-(const sgtree_impl<Config> &x, const sgtree_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y)
-#else
-(const sgtree_impl<Config> &x, const sgtree_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y)
-#else
-(const sgtree_impl<Config> &x, const sgtree_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y)
-#else
-(const sgtree_impl<Config> &x, const sgtree_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const sgtree_impl<T, Options...> &x, const sgtree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(sgtree_impl<T, Options...> &x, sgtree_impl<T, Options...> &y)
-#else
-(sgtree_impl<Config> &x, sgtree_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(sgtree_impl<T, Options...> &x, sgtree_impl<T, Options...> &y);
-/// @cond
-#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
-#else
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+//! Helper metafunction to define a \c sgtree that yields to the same type when the
+//! same options (either explicitly or implicitly) are used.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
+#else
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
-struct make_sgtree_opt
+struct make_sgtree
{
+ /// @cond
typedef typename pack_options
- < sg_set_defaults<T>,
+ < sgtree_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
>::type packed_options;
+
typedef typename detail::get_value_traits
- <T, typename packed_options::value_traits>::type value_traits;
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
- typedef sg_setopt
+ typedef sgtree_impl
< value_traits
, typename packed_options::compare
, typename packed_options::size_type
, packed_options::floating_point
- > type;
-};
-/// @endcond
-
-//! Helper metafunction to define a \c sgtree that yields to the same type when the
-//! same options (either explicitly or implicitly) are used.
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class ...Options>
-#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
-#endif
-struct make_sgtree
-{
- /// @cond
- typedef sgtree_impl
- < typename make_sgtree_opt<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
- > implementation_defined;
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class sgtree
: public make_sgtree<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
>::type
{
typedef typename make_sgtree
<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
>::type Base;
-
BOOST_MOVABLE_BUT_NOT_COPYABLE(sgtree)
public:
typedef typename Base::value_compare value_compare;
typedef typename Base::value_traits value_traits;
- typedef typename Base::real_value_traits real_value_traits;
typedef typename Base::iterator iterator;
typedef typename Base::const_iterator const_iterator;
+ typedef typename Base::reverse_iterator reverse_iterator;
+ typedef typename Base::const_reverse_iterator const_reverse_iterator;
//Assert if passed value traits are compatible with the type
- BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- sgtree( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit sgtree( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
@@ -1989,18 +964,23 @@ class sgtree
{}
sgtree& operator=(BOOST_RV_REF(sgtree) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<sgtree &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static sgtree &container_from_end_iterator(iterator end_iterator)
{ return static_cast<sgtree &>(Base::container_from_end_iterator(end_iterator)); }
static const sgtree &container_from_end_iterator(const_iterator end_iterator)
{ return static_cast<const sgtree &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static sgtree &container_from_iterator(iterator it)
+ { return static_cast<sgtree &>(Base::container_from_iterator(it)); }
+
+ static const sgtree &container_from_iterator(const_iterator it)
+ { return static_cast<const sgtree &>(Base::container_from_iterator(it)); }
};
#endif
-
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/sgtree_algorithms.hpp b/3party/boost/boost/intrusive/sgtree_algorithms.hpp
index bad1c325a0..2e4ce28278 100644
--- a/3party/boost/boost/intrusive/sgtree_algorithms.hpp
+++ b/3party/boost/boost/intrusive/sgtree_algorithms.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -18,12 +18,12 @@
#define BOOST_INTRUSIVE_SGTREE_ALGORITHMS_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <cstddef>
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/detail/utilities.hpp>
-#include <boost/intrusive/detail/tree_algorithms.hpp>
+#include <boost/intrusive/bstree_algorithms.hpp>
#include <boost/intrusive/pointer_traits.hpp>
@@ -36,7 +36,7 @@ namespace intrusive {
//!
//! <b>Typedefs</b>:
//!
-//! <tt>node</tt>: The type of the node that forms the circular list
+//! <tt>node</tt>: The type of the node that forms the binary search tree
//!
//! <tt>node_ptr</tt>: A pointer to a node
//!
@@ -57,6 +57,9 @@ namespace intrusive {
//! <tt>static void set_right(node_ptr n, node_ptr right);</tt>
template<class NodeTraits>
class sgtree_algorithms
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_algorithms<NodeTraits>
+ #endif
{
public:
typedef typename NodeTraits::node node;
@@ -67,611 +70,208 @@ class sgtree_algorithms
/// @cond
private:
- typedef detail::tree_algorithms<NodeTraits> tree_algorithms;
+ typedef bstree_algorithms<NodeTraits> bstree_algo;
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
/// @endcond
public:
- static node_ptr begin_node(const const_node_ptr & header)
- { return tree_algorithms::begin_node(header); }
-
- static node_ptr end_node(const const_node_ptr & header)
- { return tree_algorithms::end_node(header); }
-
//! This type is the information that will be
//! filled by insert_unique_check
struct insert_commit_data
- : tree_algorithms::insert_commit_data
+ : bstree_algo::insert_commit_data
{
std::size_t depth;
};
- //! <b>Requires</b>: header1 and header2 must be the header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two trees. After the function header1 will contain
- //! links to the second tree and header2 will have links to the first tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static void swap_tree(const node_ptr & header1, const node_ptr & header2)
- { return tree_algorithms::swap_tree(header1, header2); }
-
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
- static void swap_nodes(const node_ptr & node1, const node_ptr & node2)
- {
- if(node1 == node2)
- return;
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::get_header(const const_node_ptr&)
+ static node_ptr get_header(const const_node_ptr & n);
- node_ptr header1(tree_algorithms::get_header(node1)), header2(tree_algorithms::get_header(node2));
- swap_nodes(node1, header1, node2, header2);
- }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::begin_node
+ static node_ptr begin_node(const const_node_ptr & header);
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees with header header1 and header2.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
- static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2)
- { tree_algorithms::swap_nodes(node1, header1, node2, header2); }
-
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing and comparison is needed.
- //!
- //!Experimental function
- static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node)
- {
- if(node_to_be_replaced == new_node)
- return;
- replace_node(node_to_be_replaced, tree_algorithms::get_header(node_to_be_replaced), new_node);
- }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::end_node
+ static node_ptr end_node(const const_node_ptr & header);
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! with header "header" and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- //!
- //!Experimental function
- static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node)
- { tree_algorithms::replace_node(node_to_be_replaced, header, new_node); }
-
- //! <b>Requires</b>: node is a tree node but not the header.
- //!
- //! <b>Effects</b>: Unlinks the node and rebalances the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static void unlink(const node_ptr & node)
- {
- node_ptr x = NodeTraits::get_parent(node);
- if(x){
- while(!is_header(x))
- x = NodeTraits::get_parent(x);
- tree_algorithms::erase(x, node);
- }
- }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_tree
+ static void swap_tree(const node_ptr & header1, const node_ptr & header2);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&)
+ static void swap_nodes(const node_ptr & node1, const node_ptr & node2);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&,const node_ptr&,const node_ptr&)
+ static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&)
+ static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&,const node_ptr&)
+ static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node);
+
+ //Unlink is not possible since tree metadata is needed to update the tree
+ //!static void unlink(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unlink_leftmost_without_rebalance
+ static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unique(const const_node_ptr&)
+ static bool unique(const const_node_ptr & node);
- //! <b>Requires</b>: header is the header of a tree.
- //!
- //! <b>Effects</b>: Unlinks the leftmost node from the tree, and
- //! updates the header link to the new leftmost node.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header)
- { return tree_algorithms::unlink_leftmost_without_rebalance(header); }
-
- //! <b>Requires</b>: node is a node of the tree or an node initialized
- //! by init(...).
- //!
- //! <b>Effects</b>: Returns true if the node is initialized by init().
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static bool unique(const const_node_ptr & node)
- { return tree_algorithms::unique(node); }
-
- //! <b>Requires</b>: node is a node of the tree but it's not the header.
- //!
- //! <b>Effects</b>: Returns the number of nodes of the subtree.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t count(const const_node_ptr & node)
- { return tree_algorithms::count(node); }
-
- //! <b>Requires</b>: header is the header node of the tree.
- //!
- //! <b>Effects</b>: Returns the number of nodes above the header.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t size(const const_node_ptr & header)
- { return tree_algorithms::size(header); }
-
- //! <b>Requires</b>: p is a node from the tree except the header.
- //!
- //! <b>Effects</b>: Returns the next node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr next_node(const node_ptr & p)
- { return tree_algorithms::next_node(p); }
-
- //! <b>Requires</b>: p is a node from the tree except the leftmost node.
- //!
- //! <b>Effects</b>: Returns the previous node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr prev_node(const node_ptr & p)
- { return tree_algorithms::prev_node(p); }
-
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: After the function unique(node) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init(const node_ptr & node)
- { tree_algorithms::init(node); }
-
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: Initializes the header to represent an empty tree.
- //! unique(header) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init_header(const node_ptr & header)
- { tree_algorithms::init_header(header); }
-
- //! <b>Requires</b>: header must be the header of a tree, z a node
- //! of that tree and z != header.
- //!
- //! <b>Effects</b>: Erases node "z" from the tree with header "header".
- //!
- //! <b>Complexity</b>: Amortized constant time.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::size(const const_node_ptr&)
+ static std::size_t size(const const_node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::next_node(const node_ptr&)
+ static node_ptr next_node(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::prev_node(const node_ptr&)
+ static node_ptr prev_node(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::init(const node_ptr&)
+ static void init(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::init_header(const node_ptr&)
+ static void init_header(const node_ptr & header);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::erase(const node_ptr&,const node_ptr&)
template<class AlphaByMaxSize>
static node_ptr erase(const node_ptr & header, const node_ptr & z, std::size_t tree_size, std::size_t &max_tree_size, AlphaByMaxSize alpha_by_maxsize)
{
- //typename tree_algorithms::data_for_rebalance info;
- tree_algorithms::erase(header, z);
+ //typename bstree_algo::data_for_rebalance info;
+ bstree_algo::erase(header, z);
--tree_size;
if (tree_size > 0 &&
tree_size < alpha_by_maxsize(max_tree_size)){
- tree_algorithms::rebalance(header);
+ bstree_algo::rebalance(header);
max_tree_size = tree_size;
}
return z;
}
- //! <b>Requires</b>: "cloner" must be a function
- //! object taking a node_ptr and returning a new cloned node of it. "disposer" must
- //! take a node_ptr and shouldn't throw.
- //!
- //! <b>Effects</b>: First empties target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! Then, duplicates the entire tree pointed by "source_header" cloning each
- //! source node with <tt>node_ptr Cloner::operator()(const node_ptr &)</tt> to obtain
- //! the nodes of the target tree. If "cloner" throws, the cloned target nodes
- //! are disposed using <tt>void disposer(const node_ptr &)</tt>.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clone(const const_node_ptr&,const node_ptr&,Cloner,Disposer)
template <class Cloner, class Disposer>
static void clone
- (const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer)
- {
- tree_algorithms::clone(source_header, target_header, cloner, disposer);
- }
+ (const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer);
- //! <b>Requires</b>: "disposer" must be an object function
- //! taking a node_ptr parameter and shouldn't throw.
- //!
- //! <b>Effects</b>: Empties the target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clear_and_dispose(const node_ptr&,Disposer)
template<class Disposer>
- static void clear_and_dispose(const node_ptr & header, Disposer disposer)
- { tree_algorithms::clear_and_dispose(header, disposer); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is
- //! not less than "key" according to "comp" or "header" if that element does
- //! not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ static void clear_and_dispose(const node_ptr & header, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::lower_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr lower_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::lower_bound(header, key, comp); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is greater
- //! than "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::upper_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr upper_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::upper_bound(header, key, comp); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the element that is equivalent to
- //! "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::find(const const_node_ptr&, const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr find
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::find(header, key, comp); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an a pair of node_ptr delimiting a range containing
- //! all elements that are equivalent to "key" according to "comp" or an
- //! empty range that indicates the position where those elements would be
- //! if they there are no equivalent elements.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::equal_range(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> equal_range
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::equal_range(header, key, comp); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
- //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::bounded_range(const const_node_ptr&,const KeyType&,const KeyType&,KeyNodePtrCompare,bool,bool)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> bounded_range
(const const_node_ptr & header, const KeyType &lower_key, const KeyType &upper_key, KeyNodePtrCompare comp
- , bool left_closed, bool right_closed)
- { return tree_algorithms::bounded_range(header, lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: "h" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before the upper bound
- //! according to "comp".
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ , bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::count(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::size_t count(const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal_upper_bound(const node_ptr&,const node_ptr&,NodePtrCompare)
template<class NodePtrCompare, class H_Alpha>
static node_ptr insert_equal_upper_bound
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp
,std::size_t tree_size, H_Alpha h_alpha, std::size_t &max_tree_size)
{
std::size_t depth;
- tree_algorithms::insert_equal_upper_bound(h, new_node, comp, &depth);
+ bstree_algo::insert_equal_upper_bound(h, new_node, comp, &depth);
rebalance_after_insertion(new_node, depth, tree_size+1, h_alpha, max_tree_size);
return new_node;
}
- //! <b>Requires</b>: "h" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before the lower bound
- //! according to "comp".
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal_lower_bound(const node_ptr&,const node_ptr&,NodePtrCompare)
template<class NodePtrCompare, class H_Alpha>
static node_ptr insert_equal_lower_bound
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp
,std::size_t tree_size, H_Alpha h_alpha, std::size_t &max_tree_size)
{
std::size_t depth;
- tree_algorithms::insert_equal_lower_bound(h, new_node, comp, &depth);
+ bstree_algo::insert_equal_lower_bound(h, new_node, comp, &depth);
rebalance_after_insertion(new_node, depth, tree_size+1, h_alpha, max_tree_size);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs. "hint" is node from
- //! the "header"'s tree.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree, using "hint" as a hint to
- //! where it will be inserted. If "hint" is the upper_bound
- //! the insertion takes constant time (two comparisons in the worst case).
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if new_node is inserted immediately before "hint".
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal(const node_ptr&,const node_ptr&,const node_ptr&,NodePtrCompare)
template<class NodePtrCompare, class H_Alpha>
static node_ptr insert_equal
(const node_ptr & header, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp
,std::size_t tree_size, H_Alpha h_alpha, std::size_t &max_tree_size)
{
std::size_t depth;
- tree_algorithms::insert_equal(header, hint, new_node, comp, &depth);
+ bstree_algo::insert_equal(header, hint, new_node, comp, &depth);
rebalance_after_insertion(new_node, depth, tree_size+1, h_alpha, max_tree_size);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares KeyType with a node_ptr.
- //!
- //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
- //! tree according to "comp" and obtains the needed information to realize
- //! a constant-time node insertion if there is no equivalent node.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing a node_ptr to the already present node
- //! and false. If there is not equivalent key can be inserted returns true
- //! in the returned pair's boolean and fills "commit_data" that is meant to
- //! be used with the "insert_commit" function to achieve a constant-time
- //! insertion function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a node is expensive and the user does not want to have two equivalent nodes
- //! in the tree: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the node and this function offers the possibility to use that part
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the node and use
- //! "insert_commit" to insert the node in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
- //! if no more objects are inserted or erased from the set.
- template<class KeyType, class KeyNodePtrCompare>
- static std::pair<node_ptr, bool> insert_unique_check
- (const const_node_ptr & header, const KeyType &key
- ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
- {
- std::size_t depth;
- std::pair<node_ptr, bool> ret =
- tree_algorithms::insert_unique_check(header, key, comp, commit_data, &depth);
- commit_data.depth = depth;
- return ret;
- }
-
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "pos" must be a valid iterator or header (end) node.
- //! "pos" must be an iterator pointing to the successor to "new_node"
- //! once inserted according to the order of already inserted nodes. This function does not
- //! check "pos" and this precondition must be guaranteed by the caller.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "pos" is not the successor of the newly inserted "new_node"
- //! tree invariants might be broken.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_before(const node_ptr&,const node_ptr&,const node_ptr&)
template<class H_Alpha>
static node_ptr insert_before
(const node_ptr & header, const node_ptr & pos, const node_ptr & new_node
,std::size_t tree_size, H_Alpha h_alpha, std::size_t &max_tree_size)
{
std::size_t depth;
- tree_algorithms::insert_before(header, pos, new_node, &depth);
+ bstree_algo::insert_before(header, pos, new_node, &depth);
rebalance_after_insertion(new_node, depth, tree_size+1, h_alpha, max_tree_size);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "new_node" must be, according to the used ordering no less than the
- //! greatest inserted key.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "new_node" is less than the greatest inserted key
- //! tree invariants are broken. This function is slightly faster than
- //! using "insert_before".
+ //! @copydoc ::boost::intrusive::bstree_algorithms::push_back(const node_ptr&,const node_ptr&)
template<class H_Alpha>
static void push_back(const node_ptr & header, const node_ptr & new_node
,std::size_t tree_size, H_Alpha h_alpha, std::size_t &max_tree_size)
{
std::size_t depth;
- tree_algorithms::push_back(header, new_node, &depth);
+ bstree_algo::push_back(header, new_node, &depth);
rebalance_after_insertion(new_node, depth, tree_size+1, h_alpha, max_tree_size);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "new_node" must be, according to the used ordering, no greater than the
- //! lowest inserted key.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "new_node" is greater than the lowest inserted key
- //! tree invariants are broken. This function is slightly faster than
- //! using "insert_before".
+ //! @copydoc ::boost::intrusive::bstree_algorithms::push_front(const node_ptr&,const node_ptr&)
template<class H_Alpha>
static void push_front(const node_ptr & header, const node_ptr & new_node
,std::size_t tree_size, H_Alpha h_alpha, std::size_t &max_tree_size)
{
std::size_t depth;
- tree_algorithms::push_front(header, new_node, &depth);
+ bstree_algo::push_front(header, new_node, &depth);
rebalance_after_insertion(new_node, depth, tree_size+1, h_alpha, max_tree_size);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares KeyType with a node_ptr.
- //! "hint" is node from the "header"'s tree.
- //!
- //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
- //! tree according to "comp" using "hint" as a hint to where it should be
- //! inserted and obtains the needed information to realize
- //! a constant-time node insertion if there is no equivalent node.
- //! If "hint" is the upper_bound the function has constant time
- //! complexity (two comparisons in the worst case).
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing a node_ptr to the already present node
- //! and false. If there is not equivalent key can be inserted returns true
- //! in the returned pair's boolean and fills "commit_data" that is meant to
- //! be used with the "insert_commit" function to achieve a constant-time
- //! insertion function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic, but it is
- //! amortized constant time if new_node should be inserted immediately before "hint".
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a node is expensive and the user does not want to have two equivalent nodes
- //! in the tree: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the node and this function offers the possibility to use that part
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the node and use
- //! "insert_commit" to insert the node in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
- //! if no more objects are inserted or erased from the set.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_check(const const_node_ptr&,const KeyType&,KeyNodePtrCompare,insert_commit_data&)
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, bool> insert_unique_check
+ (const const_node_ptr & header, const KeyType &key
+ ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
+ {
+ std::size_t depth;
+ std::pair<node_ptr, bool> ret =
+ bstree_algo::insert_unique_check(header, key, comp, commit_data, &depth);
+ commit_data.depth = depth;
+ return ret;
+ }
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_check(const const_node_ptr&,const node_ptr&,const KeyType&,KeyNodePtrCompare,insert_commit_data&)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, bool> insert_unique_check
(const const_node_ptr & header, const node_ptr &hint, const KeyType &key
@@ -679,83 +279,36 @@ class sgtree_algorithms
{
std::size_t depth;
std::pair<node_ptr, bool> ret =
- tree_algorithms::insert_unique_check
+ bstree_algo::insert_unique_check
(header, hint, key, comp, commit_data, &depth);
commit_data.depth = depth;
return ret;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "commit_data" must have been obtained from a previous call to
- //! "insert_unique_check". No objects should have been inserted or erased
- //! from the set between the "insert_unique_check" that filled "commit_data"
- //! and the call to "insert_commit".
- //!
- //!
- //! <b>Effects</b>: Inserts new_node in the set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_unique_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_commit(const node_ptr&,const node_ptr&,const insert_commit_data&)
template<class H_Alpha>
static void insert_unique_commit
(const node_ptr & header, const node_ptr & new_value, const insert_commit_data &commit_data
,std::size_t tree_size, H_Alpha h_alpha, std::size_t &max_tree_size)
{
- tree_algorithms::insert_unique_commit(header, new_value, commit_data);
+ bstree_algo::insert_unique_commit(header, new_value, commit_data);
rebalance_after_insertion(new_value, commit_data.depth, tree_size+1, h_alpha, max_tree_size);
}
- //! <b>Requires</b>: header must be the header of a tree.
- //!
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- static void rebalance(const node_ptr & header)
- { tree_algorithms::rebalance(header); }
-
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::is_header
+ static bool is_header(const const_node_ptr & p);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::is_header
+ static void rebalance(const node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::rebalance_subtree
static node_ptr rebalance_subtree(const node_ptr & old_root)
- { return tree_algorithms::rebalance_subtree(old_root); }
-
- //! <b>Requires</b>: "n" must be a node inserted in a tree.
- //!
- //! <b>Effects</b>: Returns a pointer to the header node of the tree.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr get_header(const node_ptr & n)
- { return tree_algorithms::get_header(n); }
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
/// @cond
private:
- //! <b>Requires</b>: p is a node of a tree.
- //!
- //! <b>Effects</b>: Returns true if p is the header of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static bool is_header(const const_node_ptr & p)
- { return tree_algorithms::is_header(p); }
-
template<class H_Alpha>
static void rebalance_after_insertion
(const node_ptr &x, std::size_t depth
@@ -764,7 +317,12 @@ class sgtree_algorithms
if(tree_size > max_tree_size)
max_tree_size = tree_size;
- if(tree_size != 1 && depth > h_alpha(tree_size)){
+ if(tree_size > 2 && //Nothing to do with only the root
+ //Check if the root node is unbalanced
+ //Scapegoat paper depth counts root depth as zero and "depth" counts root as 1,
+ //but since "depth" is the depth of the ancestor of x, i == depth
+ depth > h_alpha(tree_size)){
+
//Find the first non height-balanced node
//as described in the section 4.2 of the paper.
//This method is the alternative method described
@@ -773,32 +331,36 @@ class sgtree_algorithms
//than the weight balanced method.
node_ptr s = x;
std::size_t size = 1;
-
- for(std::size_t i = 1; true; ++i){
- bool rebalance = false;
- if(i == depth){
- BOOST_INTRUSIVE_INVARIANT_ASSERT(tree_size == count(s));
- rebalance = true;
- }
- else if(i > h_alpha(size)){
- node_ptr s_parent = NodeTraits::get_parent(s);
- node_ptr s_parent_left = NodeTraits::get_left(s_parent);
- size += 1 + tree_algorithms::count
- ( s_parent_left == s ? NodeTraits::get_right(s_parent) : s_parent_left );
- s = s_parent;
- rebalance = true;
- }
- if(rebalance){
- rebalance_subtree(s);
- break;
+ for(std::size_t ancestor = 1; ancestor != depth; ++ancestor){
+ const node_ptr s_parent = NodeTraits::get_parent(s);
+ const node_ptr s_parent_left = NodeTraits::get_left(s_parent);
+ //Obtain parent's size (previous size + parent + sibling tree)
+ const node_ptr s_sibling = s_parent_left == s ? NodeTraits::get_right(s_parent) : s_parent_left;
+ size += 1 + bstree_algo::subtree_size(s_sibling);
+ s = s_parent;
+ if(ancestor > h_alpha(size)){ //is 's' scapegoat?
+ bstree_algo::rebalance_subtree(s);
+ return;
}
}
+ //The whole tree must be rebuilt
+ max_tree_size = tree_size;
+ bstree_algo::rebalance_subtree(NodeTraits::get_parent(s));
}
}
-
/// @endcond
};
+/// @cond
+
+template<class NodeTraits>
+struct get_algo<SgTreeAlgorithms, NodeTraits>
+{
+ typedef sgtree_algorithms<NodeTraits> type;
+};
+
+/// @endcond
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/slist.hpp b/3party/boost/boost/intrusive/slist.hpp
index bee6ac7031..74d14c1b5a 100644
--- a/3party/boost/boost/intrusive/slist.hpp
+++ b/3party/boost/boost/intrusive/slist.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,14 +15,13 @@
#define BOOST_INTRUSIVE_SLIST_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/static_assert.hpp>
#include <boost/intrusive/detail/assert.hpp>
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/slist_hook.hpp>
#include <boost/intrusive/circular_slist_algorithms.hpp>
#include <boost/intrusive/linear_slist_algorithms.hpp>
#include <boost/intrusive/pointer_traits.hpp>
-#include <boost/intrusive/detail/clear_on_destructor_base.hpp>
#include <boost/intrusive/link_mode.hpp>
#include <boost/intrusive/options.hpp>
#include <boost/intrusive/detail/utilities.hpp>
@@ -38,40 +37,36 @@ namespace intrusive {
/// @cond
-template <class ValueTraits, class SizeType, bool ConstantTimeSize, bool Linear, bool CacheLast>
-struct slistopt
+template<class HeaderHolder, class NodePtr, bool>
+struct header_holder_plus_last
{
- typedef ValueTraits value_traits;
- typedef SizeType size_type;
- static const bool constant_time_size = ConstantTimeSize;
- static const bool linear = Linear;
- static const bool cache_last = CacheLast;
+ HeaderHolder header_holder_;
+ NodePtr last_;
};
-template<class Node, class NodePtr, bool>
-struct root_plus_last
+template<class HeaderHolder, class NodePtr>
+struct header_holder_plus_last<HeaderHolder, NodePtr, false>
{
- Node root_;
- NodePtr last_;
+ HeaderHolder header_holder_;
};
-template<class Node, class NodePtr>
-struct root_plus_last<Node, NodePtr, false>
+struct slist_defaults
{
- Node root_;
+ typedef detail::default_slist_hook proto_value_traits;
+ static const bool constant_time_size = true;
+ static const bool linear = false;
+ typedef std::size_t size_type;
+ static const bool cache_last = false;
+ typedef void header_holder_type;
+};
+
+struct slist_bool_flags
+{
+ static const std::size_t linear_pos = 1u;
+ static const std::size_t constant_time_size_pos = 2u;
+ static const std::size_t cache_last_pos = 4u;
};
-template <class T>
-struct slist_defaults
- : pack_options
- < none
- , base_hook<detail::default_slist_hook>
- , constant_time_size<true>
- , linear<false>
- , size_type<std::size_t>
- , cache_last<false>
- >::type
-{};
/// @endcond
@@ -101,49 +96,41 @@ struct slist_defaults
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class SizeType, std::size_t BoolFlags, typename HeaderHolder>
#endif
class slist_impl
- : private detail::clear_on_destructor_base<slist_impl<Config> >
{
- template<class C> friend class detail::clear_on_destructor_base;
//Public typedefs
public:
- typedef typename Config::value_traits value_traits;
- /// @cond
- static const bool external_value_traits =
- detail::external_value_traits_bool_is_true<value_traits>::value;
- typedef typename detail::eval_if_c
- < external_value_traits
- , detail::eval_value_traits<value_traits>
- , detail::identity<value_traits>
- >::type real_value_traits;
- /// @endcond
- typedef typename real_value_traits::pointer pointer;
- typedef typename real_value_traits::const_pointer const_pointer;
+ typedef ValueTraits value_traits;
+ typedef typename value_traits::pointer pointer;
+ typedef typename value_traits::const_pointer const_pointer;
typedef typename pointer_traits<pointer>::element_type value_type;
typedef typename pointer_traits<pointer>::reference reference;
typedef typename pointer_traits<const_pointer>::reference const_reference;
typedef typename pointer_traits<pointer>::difference_type difference_type;
- typedef typename Config::size_type size_type;
- typedef slist_iterator<slist_impl, false> iterator;
- typedef slist_iterator<slist_impl, true> const_iterator;
- typedef typename real_value_traits::node_traits node_traits;
+ typedef SizeType size_type;
+ typedef slist_iterator<value_traits, false> iterator;
+ typedef slist_iterator<value_traits, true> const_iterator;
+ typedef typename value_traits::node_traits node_traits;
typedef typename node_traits::node node;
typedef typename node_traits::node_ptr node_ptr;
typedef typename node_traits::const_node_ptr const_node_ptr;
+ typedef HeaderHolder header_holder_type;
+
+ static const bool constant_time_size = 0 != (BoolFlags & slist_bool_flags::constant_time_size_pos);
+ static const bool stateful_value_traits = detail::is_stateful_value_traits<value_traits>::value;
+ static const bool linear = 0 != (BoolFlags & slist_bool_flags::linear_pos);
+ static const bool cache_last = 0 != (BoolFlags & slist_bool_flags::cache_last_pos);
+ static const bool has_container_from_iterator =
+ boost::is_same< header_holder_type, detail::default_header_holder< node_traits > >::value;
typedef typename detail::if_c
- < Config::linear
+ < linear
, linear_slist_algorithms<node_traits>
, circular_slist_algorithms<node_traits>
>::type node_algorithms;
- static const bool constant_time_size = Config::constant_time_size;
- static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
- static const bool linear = Config::linear;
- static const bool cache_last = Config::cache_last;
-
/// @cond
private:
typedef detail::size_holder<constant_time_size, size_type> size_traits;
@@ -151,16 +138,14 @@ class slist_impl
//noncopyable
BOOST_MOVABLE_BUT_NOT_COPYABLE(slist_impl)
- enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
+ static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
//Constant-time size is incompatible with auto-unlink hooks!
- BOOST_STATIC_ASSERT(!(constant_time_size && ((int)real_value_traits::link_mode == (int)auto_unlink)));
+ BOOST_STATIC_ASSERT(!(constant_time_size && ((int)value_traits::link_mode == (int)auto_unlink)));
//Linear singly linked lists are incompatible with auto-unlink hooks!
- BOOST_STATIC_ASSERT(!(linear && ((int)real_value_traits::link_mode == (int)auto_unlink)));
+ BOOST_STATIC_ASSERT(!(linear && ((int)value_traits::link_mode == (int)auto_unlink)));
//A list with cached last node is incompatible with auto-unlink hooks!
- BOOST_STATIC_ASSERT(!(cache_last && ((int)real_value_traits::link_mode == (int)auto_unlink)));
+ BOOST_STATIC_ASSERT(!(cache_last && ((int)value_traits::link_mode == (int)auto_unlink)));
node_ptr get_end_node()
{ return node_ptr(linear ? node_ptr() : this->get_root_node()); }
@@ -171,10 +156,10 @@ class slist_impl
(linear ? const_node_ptr() : this->get_root_node()); }
node_ptr get_root_node()
- { return pointer_traits<node_ptr>::pointer_to(data_.root_plus_size_.root_); }
+ { return data_.root_plus_size_.header_holder_.get_node(); }
const_node_ptr get_root_node() const
- { return pointer_traits<const_node_ptr>::pointer_to(data_.root_plus_size_.root_); }
+ { return data_.root_plus_size_.header_holder_.get_node(); }
node_ptr get_last_node()
{ return this->get_last_node(detail::bool_<cache_last>()); }
@@ -207,9 +192,6 @@ class slist_impl
void set_last_node(const node_ptr & n, detail::bool_<true>)
{ data_.root_plus_size_.last_ = n; }
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
-
void set_default_constructed_state()
{
node_algorithms::init_header(this->get_root_node());
@@ -219,16 +201,17 @@ class slist_impl
}
}
+ typedef header_holder_plus_last<header_holder_type, node_ptr, cache_last> header_holder_plus_last_t;
struct root_plus_size
: public size_traits
- , public root_plus_last<node, node_ptr, cache_last>
+ , public header_holder_plus_last_t
{};
struct data_t
: public slist_impl::value_traits
{
typedef typename slist_impl::value_traits value_traits;
- data_t(const value_traits &val_traits)
+ explicit data_t(const value_traits &val_traits)
: value_traits(val_traits)
{}
@@ -241,46 +224,22 @@ class slist_impl
const size_traits &priv_size_traits() const
{ return data_.root_plus_size_; }
- const real_value_traits &get_real_value_traits(detail::bool_<false>) const
- { return data_; }
-
- const real_value_traits &get_real_value_traits(detail::bool_<true>) const
- { return data_.get_value_traits(*this); }
-
- real_value_traits &get_real_value_traits(detail::bool_<false>)
- { return data_; }
-
- real_value_traits &get_real_value_traits(detail::bool_<true>)
- { return data_.get_value_traits(*this); }
-
const value_traits &priv_value_traits() const
{ return data_; }
value_traits &priv_value_traits()
{ return data_; }
- protected:
- node &prot_root_node()
- { return data_.root_plus_size_.root_; }
+ typedef typename boost::intrusive::value_traits_pointers
+ <ValueTraits>::const_value_traits_ptr const_value_traits_ptr;
- node const &prot_root_node() const
- { return data_.root_plus_size_.root_; }
-
- void prot_set_size(size_type s)
- { data_.root_plus_size_.set_size(s); }
+ const_value_traits_ptr priv_value_traits_ptr() const
+ { return pointer_traits<const_value_traits_ptr>::pointer_to(this->priv_value_traits()); }
/// @endcond
public:
- const real_value_traits &get_real_value_traits() const
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
- real_value_traits &get_real_value_traits()
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
- public:
-
///@cond
//! <b>Requires</b>: f and before_l belong to another slist.
@@ -340,6 +299,7 @@ class slist_impl
: data_(v_traits)
{
this->set_default_constructed_state();
+ //nothrow, no need to rollback to release elements on exception
this->insert_after(this->cbefore_begin(), b, e);
}
@@ -350,6 +310,7 @@ class slist_impl
{
this->priv_size_traits().set_size(size_type(0));
node_algorithms::init_header(this->get_root_node());
+ //nothrow, no need to rollback to release elements on exception
this->swap(x);
}
@@ -368,7 +329,12 @@ class slist_impl
//! <b>Complexity</b>: Linear to the number of elements in the list, if
//! it's a safe-mode or auto-unlink value. Otherwise constant.
~slist_impl()
- {}
+ {
+ if(is_safe_autounlink<ValueTraits::link_mode>::value){
+ this->clear();
+ node_algorithms::init(this->get_root_node());
+ }
+ }
//! <b>Effects</b>: Erases all the elements of the container.
//!
@@ -407,7 +373,7 @@ class slist_impl
++it;
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(priv_value_traits().to_value_ptr(to_erase));
}
this->set_default_constructed_state();
}
@@ -424,7 +390,7 @@ class slist_impl
//! <b>Note</b>: Does not affect the validity of iterators and references.
void push_front(reference value)
{
- node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
+ node_ptr to_insert = priv_value_traits().to_node_ptr(value);
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
if(cache_last){
@@ -450,7 +416,7 @@ class slist_impl
void push_back(reference value)
{
BOOST_STATIC_ASSERT((cache_last));
- node_ptr n = get_real_value_traits().to_node_ptr(value);
+ node_ptr n = priv_value_traits().to_node_ptr(value);
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(n));
node_algorithms::link_after(this->get_last_node(), n);
@@ -489,7 +455,7 @@ class slist_impl
this->priv_size_traits().decrement();
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(priv_value_traits().to_value_ptr(to_erase));
if(cache_last){
if(this->empty()){
this->set_last_node(this->get_root_node());
@@ -503,7 +469,7 @@ class slist_impl
//!
//! <b>Complexity</b>: Constant.
reference front()
- { return *this->get_real_value_traits().to_value_ptr(node_traits::get_next(this->get_root_node())); }
+ { return *this->priv_value_traits().to_value_ptr(node_traits::get_next(this->get_root_node())); }
//! <b>Effects</b>: Returns a const_reference to the first element of the list.
//!
@@ -511,7 +477,7 @@ class slist_impl
//!
//! <b>Complexity</b>: Constant.
const_reference front() const
- { return *this->get_real_value_traits().to_value_ptr(uncast(node_traits::get_next(this->get_root_node()))); }
+ { return *this->priv_value_traits().to_value_ptr(detail::uncast(node_traits::get_next(this->get_root_node()))); }
//! <b>Effects</b>: Returns a reference to the last element of the list.
//!
@@ -524,7 +490,7 @@ class slist_impl
reference back()
{
BOOST_STATIC_ASSERT((cache_last));
- return *this->get_real_value_traits().to_value_ptr(this->get_last_node());
+ return *this->priv_value_traits().to_value_ptr(this->get_last_node());
}
//! <b>Effects</b>: Returns a const_reference to the last element of the list.
@@ -538,7 +504,7 @@ class slist_impl
const_reference back() const
{
BOOST_STATIC_ASSERT((cache_last));
- return *this->get_real_value_traits().to_value_ptr(this->get_last_node());
+ return *this->priv_value_traits().to_value_ptr(this->get_last_node());
}
//! <b>Effects</b>: Returns an iterator to the first element contained in the list.
@@ -547,7 +513,7 @@ class slist_impl
//!
//! <b>Complexity</b>: Constant.
iterator begin()
- { return iterator (node_traits::get_next(this->get_root_node()), this); }
+ { return iterator (node_traits::get_next(this->get_root_node()), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
//!
@@ -555,7 +521,7 @@ class slist_impl
//!
//! <b>Complexity</b>: Constant.
const_iterator begin() const
- { return const_iterator (node_traits::get_next(this->get_root_node()), this); }
+ { return const_iterator (node_traits::get_next(this->get_root_node()), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
//!
@@ -563,7 +529,7 @@ class slist_impl
//!
//! <b>Complexity</b>: Constant.
const_iterator cbegin() const
- { return const_iterator(node_traits::get_next(this->get_root_node()), this); }
+ { return const_iterator(node_traits::get_next(this->get_root_node()), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns an iterator to the end of the list.
//!
@@ -571,7 +537,7 @@ class slist_impl
//!
//! <b>Complexity</b>: Constant.
iterator end()
- { return iterator(this->get_end_node(), this); }
+ { return iterator(this->get_end_node(), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns a const_iterator to the end of the list.
//!
@@ -579,7 +545,7 @@ class slist_impl
//!
//! <b>Complexity</b>: Constant.
const_iterator end() const
- { return const_iterator(uncast(this->get_end_node()), this); }
+ { return const_iterator(detail::uncast(this->get_end_node()), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns a const_iterator to the end of the list.
//!
@@ -596,7 +562,7 @@ class slist_impl
//!
//! <b>Complexity</b>: Constant.
iterator before_begin()
- { return iterator(this->get_root_node(), this); }
+ { return iterator(this->get_root_node(), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns an iterator that points to a position
//! before the first element. Equivalent to "end()"
@@ -605,7 +571,7 @@ class slist_impl
//!
//! <b>Complexity</b>: Constant.
const_iterator before_begin() const
- { return const_iterator(uncast(this->get_root_node()), this); }
+ { return const_iterator(detail::uncast(this->get_root_node()), this->priv_value_traits_ptr()); }
//! <b>Effects</b>: Returns an iterator that points to a position
//! before the first element. Equivalent to "end()"
@@ -627,7 +593,7 @@ class slist_impl
{
//This function shall not be used if cache_last is not true
BOOST_INTRUSIVE_INVARIANT_ASSERT(cache_last);
- return iterator (this->get_last_node(), this);
+ return iterator (this->get_last_node(), this->priv_value_traits_ptr());
}
//! <b>Effects</b>: Returns a const_iterator to the last element contained in the list.
@@ -641,7 +607,7 @@ class slist_impl
{
//This function shall not be used if cache_last is not true
BOOST_INTRUSIVE_INVARIANT_ASSERT(cache_last);
- return const_iterator (this->get_last_node(), this);
+ return const_iterator (this->get_last_node(), this->priv_value_traits_ptr());
}
//! <b>Effects</b>: Returns a const_iterator to the last element contained in the list.
@@ -652,7 +618,7 @@ class slist_impl
//!
//! <b>Note</b>: This function is present only if cached_last<> option is true.
const_iterator clast() const
- { return const_iterator(this->get_last_node(), this); }
+ { return const_iterator(this->get_last_node(), this->priv_value_traits_ptr()); }
//! <b>Precondition</b>: end_iterator must be a valid end iterator
//! of slist.
@@ -792,7 +758,7 @@ class slist_impl
//! <b>Note</b>: Does not affect the validity of iterators and references.
iterator insert_after(const_iterator prev_p, reference value)
{
- node_ptr n = get_real_value_traits().to_node_ptr(value);
+ node_ptr n = priv_value_traits().to_node_ptr(value);
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(n));
node_ptr prev_n(prev_p.pointed_node());
@@ -801,7 +767,7 @@ class slist_impl
this->set_last_node(n);
}
this->priv_size_traits().increment();
- return iterator (n, this);
+ return iterator (n, this->priv_value_traits_ptr());
}
//! <b>Requires</b>: Dereferencing iterator must yield
@@ -823,7 +789,7 @@ class slist_impl
size_type count = 0;
node_ptr prev_n(prev_p.pointed_node());
for (; f != l; ++f, ++count){
- const node_ptr n = get_real_value_traits().to_node_ptr(*f);
+ const node_ptr n = priv_value_traits().to_node_ptr(*f);
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(n));
node_algorithms::link_after(prev_n, n);
@@ -1030,7 +996,7 @@ class slist_impl
}
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(priv_value_traits().to_value_ptr(to_erase));
this->priv_size_traits().decrement();
return it.unconst();
}
@@ -1049,7 +1015,7 @@ class slist_impl
node_algorithms::unlink_after(prev_n);
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(real_value_traits::to_value_ptr(to_erase));
+ disposer(value_traits::to_value_ptr(to_erase));
return it.unconst();
}
@@ -1083,7 +1049,7 @@ class slist_impl
fp = node_traits::get_next(fp);
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(priv_value_traits().to_value_ptr(to_erase));
this->priv_size_traits().decrement();
}
if(cache_last && (node_traits::get_next(bfp) == this->get_end_node())){
@@ -1695,8 +1661,7 @@ class slist_impl
static iterator s_iterator_to(reference value)
{
BOOST_STATIC_ASSERT((!stateful_value_traits));
- //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(value)));
- return iterator (value_traits::to_node_ptr(value), 0);
+ return iterator (value_traits::to_node_ptr(value), const_value_traits_ptr());
}
//! <b>Requires</b>: value must be a const reference to a value inserted in a list.
@@ -1713,8 +1678,8 @@ class slist_impl
static const_iterator s_iterator_to(const_reference value)
{
BOOST_STATIC_ASSERT((!stateful_value_traits));
- //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(const_cast<reference> (value))));
- return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), 0);
+ reference r =*pointer_traits<pointer>::const_cast_from(pointer_traits<const_pointer>::pointer_to(value));
+ return const_iterator(value_traits::to_node_ptr(r), const_value_traits_ptr());
}
//! <b>Requires</b>: value must be a reference to a value inserted in a list.
@@ -1728,8 +1693,8 @@ class slist_impl
//! <b>Note</b>: Iterators and references are not invalidated.
iterator iterator_to(reference value)
{
- //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(value)));
- return iterator (value_traits::to_node_ptr(value), this);
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(linear || !node_algorithms::inited(this->priv_value_traits().to_node_ptr(value)));
+ return iterator (this->priv_value_traits().to_node_ptr(value), this->priv_value_traits_ptr());
}
//! <b>Requires</b>: value must be a const reference to a value inserted in a list.
@@ -1743,8 +1708,9 @@ class slist_impl
//! <b>Note</b>: Iterators and references are not invalidated.
const_iterator iterator_to(const_reference value) const
{
- //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(const_cast<reference> (value))));
- return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), this);
+ reference r =*pointer_traits<pointer>::const_cast_from(pointer_traits<const_pointer>::pointer_to(value));
+ BOOST_INTRUSIVE_INVARIANT_ASSERT (linear || !node_algorithms::inited(this->priv_value_traits().to_node_ptr(r)));
+ return const_iterator(this->priv_value_traits().to_node_ptr(r), this->priv_value_traits_ptr());
}
//! <b>Returns</b>: The iterator to the element before i in the list.
@@ -1793,11 +1759,11 @@ class slist_impl
const_iterator previous(const_iterator prev_from, const_iterator i) const
{
if(cache_last && (i.pointed_node() == this->get_end_node())){
- return const_iterator(uncast(this->get_last_node()), this);
+ return const_iterator(detail::uncast(this->get_last_node()), this->priv_value_traits_ptr());
}
return const_iterator
(node_algorithms::get_previous_node
- (prev_from.pointed_node(), i.pointed_node()), this);
+ (prev_from.pointed_node(), i.pointed_node()), this->priv_value_traits_ptr());
}
///@cond
@@ -1846,7 +1812,11 @@ class slist_impl
{
if(n){
BOOST_INTRUSIVE_INVARIANT_ASSERT(n > 0);
- BOOST_INTRUSIVE_INVARIANT_ASSERT(size_type(std::distance(iterator(f, this), iterator(before_l, this)))+1 == n);
+ BOOST_INTRUSIVE_INVARIANT_ASSERT
+ (size_type(std::distance
+ ( iterator(f, this->priv_value_traits_ptr())
+ , iterator(before_l, this->priv_value_traits_ptr())))
+ +1 == n);
this->priv_incorporate_after(prev_pos.pointed_node(), f, before_l);
if(constant_time_size){
this->priv_size_traits().increase(n);
@@ -1982,8 +1952,12 @@ class slist_impl
//Obtaining the container from the end iterator is not possible with linear
//singly linked lists (because "end" is represented by the null pointer)
BOOST_STATIC_ASSERT(!linear);
- root_plus_size *r = detail::parent_from_member<root_plus_size, node>
- ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), (&root_plus_size::root_));
+ BOOST_STATIC_ASSERT((has_container_from_iterator));
+ node_ptr p = end_iterator.pointed_node();
+ header_holder_type* h = header_holder_type::get_holder(p);
+ header_holder_plus_last_t* hpl = detail::parent_from_member< header_holder_plus_last_t, header_holder_type>
+ (h, &header_holder_plus_last_t::header_holder_);
+ root_plus_size* r = static_cast< root_plus_size* >(hpl);
data_t *d = detail::parent_from_member<data_t, root_plus_size>
( r, &data_t::root_plus_size_);
slist_impl *s = detail::parent_from_member<slist_impl, data_t>(d, &slist_impl::data_);
@@ -1994,29 +1968,31 @@ class slist_impl
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class SizeType, std::size_t BoolFlags, typename HeaderHolder>
#endif
inline bool operator<
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
#else
-(const slist_impl<Config> &x, const slist_impl<Config> &y)
+( const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &x
+, const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &y)
#endif
{ return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class SizeType, std::size_t BoolFlags, typename HeaderHolder>
#endif
bool operator==
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
#else
-(const slist_impl<Config> &x, const slist_impl<Config> &y)
+( const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &x
+, const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &y)
#endif
{
- typedef slist_impl<Config> slist_type;
+ typedef slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> slist_type;
typedef typename slist_type::const_iterator const_iterator;
const bool C = slist_type::constant_time_size;
if(C && x.size() != y.size()){
@@ -2046,65 +2022,70 @@ bool operator==
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class SizeType, std::size_t BoolFlags, typename HeaderHolder>
#endif
inline bool operator!=
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
#else
-(const slist_impl<Config> &x, const slist_impl<Config> &y)
+( const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &x
+, const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &y)
#endif
{ return !(x == y); }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class SizeType, std::size_t BoolFlags, typename HeaderHolder>
#endif
inline bool operator>
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
#else
-(const slist_impl<Config> &x, const slist_impl<Config> &y)
+( const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &x
+, const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &y)
#endif
{ return y < x; }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class SizeType, std::size_t BoolFlags, typename HeaderHolder>
#endif
inline bool operator<=
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
#else
-(const slist_impl<Config> &x, const slist_impl<Config> &y)
+( const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &x
+, const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &y)
#endif
{ return !(y < x); }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class SizeType, std::size_t BoolFlags, typename HeaderHolder>
#endif
inline bool operator>=
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
#else
-(const slist_impl<Config> &x, const slist_impl<Config> &y)
+( const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &x
+, const slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &y)
#endif
{ return !(x < y); }
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class SizeType, std::size_t BoolFlags, typename HeaderHolder>
#endif
inline void swap
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
(slist_impl<T, Options...> &x, slist_impl<T, Options...> &y)
#else
-(slist_impl<Config> &x, slist_impl<Config> &y)
+( slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &x
+, slist_impl<ValueTraits, SizeType, BoolFlags, HeaderHolder> &y)
#endif
{ x.swap(y); }
@@ -2113,30 +2094,30 @@ inline void swap
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none, class O3 = none, class O4 = none, class O5 = none>
+template<class T, class O1 = void, class O2 = void, class O3 = void, class O4 = void, class O5 = void, class O6 = void>
#endif
struct make_slist
{
/// @cond
typedef typename pack_options
- < slist_defaults<T>,
+ < slist_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4, O5
+ O1, O2, O3, O4, O5, O6
#else
Options...
#endif
>::type packed_options;
typedef typename detail::get_value_traits
- <T, typename packed_options::value_traits>::type value_traits;
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
typedef slist_impl
- <
- slistopt
- < value_traits
- , typename packed_options::size_type
- , packed_options::constant_time_size
- , packed_options::linear
- , packed_options::cache_last
- >
+ < value_traits
+ , typename packed_options::size_type
+ , (std::size_t(packed_options::linear)*slist_bool_flags::linear_pos)
+ |(std::size_t(packed_options::constant_time_size)*slist_bool_flags::constant_time_size_pos)
+ |(std::size_t(packed_options::cache_last)*slist_bool_flags::cache_last_pos)
+ , header_holder_type
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -2146,14 +2127,14 @@ struct make_slist
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4, class O5>
+template<class T, class O1, class O2, class O3, class O4, class O5, class O6>
#else
template<class T, class ...Options>
#endif
class slist
: public make_slist<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4, O5
+ O1, O2, O3, O4, O5, O6
#else
Options...
#endif
@@ -2162,14 +2143,13 @@ class slist
typedef typename make_slist
<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4, O5
+ O1, O2, O3, O4, O5, O6
#else
Options...
#endif
>::type Base;
- typedef typename Base::real_value_traits real_value_traits;
//Assert if passed value traits are compatible with the type
- BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
+ BOOST_STATIC_ASSERT((detail::is_same<typename Base::value_traits::value_type, T>::value));
BOOST_MOVABLE_BUT_NOT_COPYABLE(slist)
public:
@@ -2200,7 +2180,7 @@ class slist
{}
slist& operator=(BOOST_RV_REF(slist) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<slist &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static slist &container_from_end_iterator(iterator end_iterator)
{ return static_cast<slist &>(Base::container_from_end_iterator(end_iterator)); }
diff --git a/3party/boost/boost/intrusive/slist_hook.hpp b/3party/boost/boost/intrusive/slist_hook.hpp
index cd94a7e7aa..a9d5be64fa 100644
--- a/3party/boost/boost/intrusive/slist_hook.hpp
+++ b/3party/boost/boost/intrusive/slist_hook.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -40,7 +40,7 @@ struct get_slist_node_algo
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none>
+template<class O1 = void, class O2 = void, class O3 = void>
#endif
struct make_slist_base_hook
{
@@ -54,11 +54,11 @@ struct make_slist_base_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_slist_node_algo<typename packed_options::void_pointer>
, typename packed_options::tag
, packed_options::link_mode
- , detail::SlistBaseHook
+ , SlistBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -80,7 +80,7 @@ struct make_slist_base_hook
//! \c auto_unlink or \c safe_link).
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
@@ -168,7 +168,7 @@ class slist_base_hook
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none>
+template<class O1 = void, class O2 = void, class O3 = void>
#endif
struct make_slist_member_hook
{
@@ -182,11 +182,11 @@ struct make_slist_member_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_slist_node_algo<typename packed_options::void_pointer>
, member_tag
, packed_options::link_mode
- , detail::NoBaseHook
+ , NoBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -203,7 +203,7 @@ struct make_slist_member_hook
//! \c auto_unlink or \c safe_link).
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
diff --git a/3party/boost/boost/intrusive/splay_set.hpp b/3party/boost/boost/intrusive/splay_set.hpp
index 7cb4978650..ee916796fd 100644
--- a/3party/boost/boost/intrusive/splay_set.hpp
+++ b/3party/boost/boost/intrusive/splay_set.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -36,14 +36,15 @@ namespace intrusive {
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class splay_set_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public splaytree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, HeaderHolder>
+#endif
{
/// @cond
- typedef splaytree_impl<Config> tree_type;
- //! This class is
- //! movable
+ typedef splaytree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, HeaderHolder> tree_type;
BOOST_MOVABLE_BUT_NOT_COPYABLE(splay_set_impl)
typedef tree_type implementation_defined;
@@ -71,1233 +72,408 @@ class splay_set_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- static const bool constant_time_size = Config::constant_time_size;
-
- /// @cond
- private:
- tree_type tree_;
- /// @endcond
+ static const bool constant_time_size = tree_type::constant_time_size;
public:
- //! <b>Effects</b>: Constructs an empty splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::splaytree::splaytree(const value_compare &,const value_traits &)
explicit splay_set_impl( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : tree_(cmp, v_traits)
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
{}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty splay_set and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise amortized N * log N, where N is std::distance(last, first).
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::splaytree::splaytree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
splay_set_impl( Iterator b, Iterator e
, const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(true, b, e, cmp, v_traits)
+ : tree_type(true, b, e, cmp, v_traits)
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::splaytree::splaytree(splaytree &&)
splay_set_impl(BOOST_RV_REF(splay_set_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::splaytree::operator=(splaytree &&)
splay_set_impl& operator=(BOOST_RV_REF(splay_set_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the splay_set
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~splay_set_impl()
- {}
+ { return static_cast<splay_set_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::splaytree::~splaytree()
+ ~splay_set_impl();
+
+ //! @copydoc ::boost::intrusive::splaytree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::splaytree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::splaytree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::rbegin()
+ reverse_iterator rbegin();
+
+ //! @copydoc ::boost::intrusive::splaytree::rbegin()const
+ const_reverse_iterator rbegin() const;
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of splay_set.
- //!
- //! <b>Effects</b>: Returns a const reference to the splay_set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static splay_set_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<splay_set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &splay_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of splay_set.
- //!
- //! <b>Effects</b>: Returns a const reference to the splay_set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const splay_set_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<splay_set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &splay_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of set.
- //!
- //! <b>Effects</b>: Returns a reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static splay_set_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<splay_set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &splay_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of set.
- //!
- //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const splay_set_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<splay_set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &splay_set_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the splay_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the splay_set.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
-
- //! <b>Effects</b>: Swaps the contents of two splay_sets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(splay_set_impl& other)
- { tree_.swap(other.tree_); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::splaytree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::splaytree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::container_from_end_iterator(iterator)
+ static splay_set_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::splaytree::container_from_end_iterator(const_iterator)
+ static const splay_set_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::splaytree::container_from_iterator(iterator)
+ static splay_set_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::splaytree::container_from_iterator(const_iterator)
+ static const splay_set_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::splaytree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::size()const
+ size_type size() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::swap
+ void swap(splay_set_impl& other);
+
+ //! @copydoc ::boost::intrusive::splaytree::clone_from
template <class Cloner, class Disposer>
- void clone_from(const splay_set_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Tries to inserts value into the splay_set.
- //!
- //! <b>Returns</b>: If the value
- //! is not already present inserts it and returns a pair containing the
- //! iterator to the new value and true. If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ void clone_from(const splay_set_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::splaytree::insert_unique(reference)
std::pair<iterator, bool> insert(reference value)
- { return tree_.insert_unique(value); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Tries to to insert x into the splay_set, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the
- //! new element was inserted into the splay_set.
- //!
- //! <b>Complexity</b>: Amortized logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_unique(value); }
+
+ //! @copydoc ::boost::intrusive::splaytree::insert_unique(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_unique(hint, value); }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the splay_set, using
- //! a user provided key instead of the value itself.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that
- //! part to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the splay_set.
+ { return tree_type::insert_unique(hint, value); }
+
+ //! @copydoc ::boost::intrusive::splaytree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_check
(const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(key, key_value_comp, commit_data); }
-
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the splay_set, using
- //! a user provided key instead of the value itself, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Amortized logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! constructing that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that key
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This can give a total
- //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the splay_set.
+ { return tree_type::insert_unique_check(key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::splaytree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_check
(const_iterator hint, const KeyType &key
,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(hint, key, key_value_comp, commit_data); }
-
- //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
- //! must have been obtained from a previous call to "insert_check".
- //! No objects should have been inserted or erased from the splay_set between
- //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
- //!
- //! <b>Effects</b>: Inserts the value in the splay_set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Returns</b>: An iterator to the newly inserted object.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- iterator insert_commit(reference value, const insert_commit_data &commit_data)
- { return tree_.insert_unique_commit(value, commit_data); }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the splay_set.
- //!
- //! <b>Complexity</b>: Insert range is amortized O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_unique_check(hint, key, key_value_comp, commit_data); }
+
+ //! @copydoc ::boost::intrusive::splaytree::insert_unique(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_unique(b, e); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is amortized
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { return tree_.erase(b, e); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size()) + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
-
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If the comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ { tree_type::insert_unique(b, e); }
+
+ //! @copydoc ::boost::intrusive::splaytree::insert_unique_commit
+ iterator insert_commit(reference value, const insert_commit_data &commit_data)
+ { return tree_type::insert_unique_commit(value, commit_data); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::splaytree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::splaytree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::splaytree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + this->count(value)). Basic guarantee.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::splaytree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::splaytree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Amortized logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- size_type count(const_reference value)
- { return tree_.find(value) != end(); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Amortized logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ void clear_and_dispose(Disposer disposer);
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::splaytree::count(const_reference)const
+ size_type count(const_reference value) const
+ { return static_cast<size_type>(this->tree_type::find(value) != this->tree_type::cend()); }
+
+ //! @copydoc ::boost::intrusive::splaytree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp) != end(); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- size_type count_dont_splay(const_reference value)const
- { return tree_.find_dont_splay(value) != end(); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ size_type count(const KeyType& key, KeyValueCompare comp) const
+ { return static_cast<size_type>(this->tree_type::find(key, comp) != this->tree_type::cend()); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::splaytree::count(const_reference)const
+ size_type count(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count_dont_splay(const KeyType& key, KeyValueCompare comp)const
- { return tree_.find_dont_splay(key, comp) != end(); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound_dont_splay(const_reference value) const
- { return tree_.lower_bound_dont_splay(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound_dont_splay(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound_dont_splay(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound_dont_splay(const_reference value) const
- { return tree_.upper_bound_dont_splay(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound_dont_splay(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound_dont_splay(key, comp); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find_dont_splay(const_reference value) const
- { return tree_.find_dont_splay(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find_dont_splay(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find_dont_splay(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)
std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range_dont_splay(const_reference value) const
- { return tree_.equal_range_dont_splay(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ equal_range(const_reference value) const
+ { return this->tree_type::lower_bound_range(value); }
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range_dont_splay(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range_dont_splay(key, comp); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ equal_range(const KeyType& key, KeyValueCompare comp) const
+ { return this->tree_type::lower_bound_range(key, comp); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::splaytree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::splaytree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
- std::pair<const_iterator, const_iterator>
- bounded_range_dont_splay_dont_splay
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range_dont_splay(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::splaytree::bounded_range(const_reference,const_reference,bool,bool)const
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range_dont_splay
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range_dont_splay(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a splay_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the splay_set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a splay_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! splay_set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a splay_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the splay_set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a splay_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! splay_set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value shall not be in a splay_set/multisplay_set.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
-
- //! <b>Requires</b>: i must be a valid iterator of *this.
- //!
- //! <b>Effects</b>: Rearranges the splay set so that the element pointed by i
- //! is placed as the root of the tree, improving future searches of this value.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- void splay_up(iterator i)
- { tree_.splay_up(i); }
-
- //! <b>Effects</b>: Rearranges the splay set so that if *this stores an element
- //! with a key equivalent to value the element is placed as the root of the
- //! tree. If the element is not present returns the last node compared with the key.
- //! If the tree is empty, end() is returned.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Returns</b>: An iterator to the new root of the tree, end() if the tree is empty.
- //!
- //! <b>Throws</b>: If the comparison functor throws.
- template<class KeyType, class KeyNodePtrCompare>
- iterator splay_down(const KeyType &key, KeyNodePtrCompare comp)
- { return tree_.splay_down(key, comp); }
-
- //! <b>Effects</b>: Rearranges the splay set so that if *this stores an element
- //! with a key equivalent to value the element is placed as the root of the
- //! tree.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Returns</b>: An iterator to the new root of the tree, end() if the tree is empty.
- //!
- //! <b>Throws</b>: If the predicate throws.
- iterator splay_down(const value_type &value)
- { return tree_.splay_down(value); }
-
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- void rebalance()
- { tree_.rebalance(); }
-
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- iterator rebalance_subtree(iterator root)
- { return tree_.rebalance_subtree(root); }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
- friend bool operator==(const splay_set_impl &x, const splay_set_impl &y)
- { return x.tree_ == y.tree_; }
+ //! @copydoc ::boost::intrusive::splaytree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- friend bool operator<(const splay_set_impl &x, const splay_set_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ //! @copydoc ::boost::intrusive::splaytree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::splaytree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::splaytree::remove_node
+ void remove_node(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::splay_up(iterator)
+ void splay_up(iterator i);
+
+ //! @copydoc ::boost::intrusive::splaytree::splay_down(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ iterator splay_down(const KeyType &key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::splay_down(const_reference)
+ iterator splay_down(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::rebalance
+ void rebalance();
+
+ //! @copydoc ::boost::intrusive::splaytree::rebalance_subtree
+ iterator rebalance_subtree(iterator root);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splay_set_impl<T, Options...> &x, const splay_set_impl<T, Options...> &y)
-#else
-(const splay_set_impl<Config> &x, const splay_set_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const splay_set_impl<T, Options...> &x, const splay_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splay_set_impl<T, Options...> &x, const splay_set_impl<T, Options...> &y)
-#else
-(const splay_set_impl<Config> &x, const splay_set_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const splay_set_impl<T, Options...> &x, const splay_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splay_set_impl<T, Options...> &x, const splay_set_impl<T, Options...> &y)
-#else
-(const splay_set_impl<Config> &x, const splay_set_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const splay_set_impl<T, Options...> &x, const splay_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splay_set_impl<T, Options...> &x, const splay_set_impl<T, Options...> &y)
-#else
-(const splay_set_impl<Config> &x, const splay_set_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const splay_set_impl<T, Options...> &x, const splay_set_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(splay_set_impl<T, Options...> &x, splay_set_impl<T, Options...> &y)
-#else
-(splay_set_impl<Config> &x, splay_set_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(splay_set_impl<T, Options...> &x, splay_set_impl<T, Options...> &y);
+
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
//! Helper metafunction to define a \c splay_set that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_splay_set
{
/// @cond
+ typedef typename pack_options
+ < splaytree_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
typedef splay_set_impl
- < typename make_splaytree_opt<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
- > implementation_defined;
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class splay_set
: public make_splay_set<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type
{
typedef typename make_splay_set
<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
>::type Base;
- BOOST_MOVABLE_BUT_NOT_COPYABLE(splay_set)
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(splay_set)
public:
typedef typename Base::value_compare value_compare;
typedef typename Base::value_traits value_traits;
@@ -1307,8 +483,8 @@ class splay_set
//Assert if passed value traits are compatible with the type
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- splay_set( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit splay_set( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
@@ -1324,7 +500,7 @@ class splay_set
{}
splay_set& operator=(BOOST_RV_REF(splay_set) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<splay_set &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static splay_set &container_from_end_iterator(iterator end_iterator)
{ return static_cast<splay_set &>(Base::container_from_end_iterator(end_iterator)); }
@@ -1355,14 +531,16 @@ class splay_set
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class splay_multiset_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public splaytree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, HeaderHolder>
+#endif
{
/// @cond
- typedef splaytree_impl<Config> tree_type;
+ typedef splaytree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, HeaderHolder> tree_type;
- //Movable
BOOST_MOVABLE_BUT_NOT_COPYABLE(splay_multiset_impl)
typedef tree_type implementation_defined;
/// @endcond
@@ -1389,1111 +567,341 @@ class splay_multiset_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- static const bool constant_time_size = Config::constant_time_size;
-
- /// @cond
- private:
- tree_type tree_;
- /// @endcond
+ static const bool constant_time_size = tree_type::constant_time_size;
public:
- //! <b>Effects</b>: Constructs an empty splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::splaytree::splaytree(const value_compare &,const value_traits &)
explicit splay_multiset_impl( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : tree_(cmp, v_traits)
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
{}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty splay_multiset and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise amortized N * log N, where N is the distance between first and last.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws.
+ //! @copydoc ::boost::intrusive::splaytree::splaytree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
splay_multiset_impl( Iterator b, Iterator e
, const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : tree_(false, b, e, cmp, v_traits)
+ : tree_type(false, b, e, cmp, v_traits)
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::splaytree::splaytree(splaytree &&)
splay_multiset_impl(BOOST_RV_REF(splay_multiset_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::splaytree::operator=(splaytree &&)
splay_multiset_impl& operator=(BOOST_RV_REF(splay_multiset_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the set
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~splay_multiset_impl()
- {}
+ { return static_cast<splay_multiset_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::splaytree::~splaytree()
+ ~splay_multiset_impl();
+
+ //! @copydoc ::boost::intrusive::splaytree::begin()
+ iterator begin();
+
+ //! @copydoc ::boost::intrusive::splaytree::begin()const
+ const_iterator begin() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::cbegin()const
+ const_iterator cbegin() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::end()
+ iterator end();
+
+ //! @copydoc ::boost::intrusive::splaytree::end()const
+ const_iterator end() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::cend()const
+ const_iterator cend() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::rbegin()
+ reverse_iterator rbegin();
+
+ //! @copydoc ::boost::intrusive::splaytree::rbegin()const
+ const_reverse_iterator rbegin() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::crbegin()const
+ const_reverse_iterator crbegin() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::rend()
+ reverse_iterator rend();
+
+ //! @copydoc ::boost::intrusive::splaytree::rend()const
+ const_reverse_iterator rend() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::crend()const
+ const_reverse_iterator crend() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::container_from_end_iterator(iterator)
+ static splay_multiset_impl &container_from_end_iterator(iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::splaytree::container_from_end_iterator(const_iterator)
+ static const splay_multiset_impl &container_from_end_iterator(const_iterator end_iterator);
+
+ //! @copydoc ::boost::intrusive::splaytree::container_from_iterator(iterator)
+ static splay_multiset_impl &container_from_iterator(iterator it);
+
+ //! @copydoc ::boost::intrusive::splaytree::container_from_iterator(const_iterator)
+ static const splay_multiset_impl &container_from_iterator(const_iterator it);
+
+ //! @copydoc ::boost::intrusive::splaytree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::splaytree::size()const
+ size_type size() const;
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
-
- //! <b>Effects</b>: Returns an iterator pointing to the end of the splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
-
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
-
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
-
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of splay_multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the splay_multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static splay_multiset_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<splay_multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &splay_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of splay_multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the splay_multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const splay_multiset_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<splay_multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &splay_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static splay_multiset_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<splay_multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &splay_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const splay_multiset_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<splay_multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &splay_multiset_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns the value_compare object used by the splay_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
-
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the splay_multiset.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
-
- //! <b>Effects</b>: Swaps the contents of two splay_multisets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(splay_multiset_impl& other)
- { tree_.swap(other.tree_); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::splaytree::swap
+ void swap(splay_multiset_impl& other);
+
+ //! @copydoc ::boost::intrusive::splaytree::clone_from
template <class Cloner, class Disposer>
- void clone_from(const splay_multiset_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the splay_multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ void clone_from(const splay_multiset_impl &src, Cloner cloner, Disposer disposer);
+
+ #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::splaytree::insert_equal(reference)
iterator insert(reference value)
- { return tree_.insert_equal(this->end(), value); }
-
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts x into the splay_multiset, using pos as a hint to
- //! where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Amortized logarithmic in general, but it is amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_equal(value); }
+
+ //! @copydoc ::boost::intrusive::splaytree::insert_equal(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_equal(hint, value); }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the splay_multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Insert range is amortized O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ { return tree_type::insert_equal(hint, value); }
+
+ //! @copydoc ::boost::intrusive::splaytree::insert_equal(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_equal(b, e); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
-
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is amortized
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { return tree_.erase(b, e); }
-
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
-
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ { tree_type::insert_equal(b, e); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::splaytree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::push_back
+ void push_back(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::splaytree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is amortized
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::splaytree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::splaytree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::splaytree::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::splaytree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Amortized logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- size_type count(const_reference value)
- { return tree_.count(value); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Amortized logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType& key, KeyValueCompare comp)
- { return tree_.count(key, comp); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- size_type count_dont_splay(const_reference value) const
- { return tree_.count_dont_splay(value); }
-
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ void clear_and_dispose(Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::splaytree::count(const_reference)
+ size_type count(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count_dont_splay(const KeyType& key, KeyValueCompare comp) const
- { return tree_.count_dont_splay(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ size_type count(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
-
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound_dont_splay(const_reference value) const
- { return tree_.lower_bound_dont_splay(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound_dont_splay(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound_dont_splay(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound_dont_splay(const_reference value) const
- { return tree_.upper_bound_dont_splay(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound_dont_splay(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound_dont_splay(key, comp); }
-
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::find(const_reference)
+ iterator find(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
-
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find_dont_splay(const_reference value) const
- { return tree_.find_dont_splay(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ iterator find(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::find(const_reference)const
+ const_iterator find(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find_dont_splay(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find_dont_splay(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
-
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range_dont_splay(const_reference value) const
- { return tree_.equal_range_dont_splay(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ equal_range(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range_dont_splay(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range_dont_splay(key, comp); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::splaytree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
- std::pair<const_iterator, const_iterator>
- bounded_range_dont_splay
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range_dont_splay(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::splaytree::bounded_range(const_reference,const_reference,bool,bool)const
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range_dont_splay
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range_dont_splay(lower_key, upper_key, comp, left_closed, right_closed); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
-
- //! <b>Requires</b>: value shall not be in a set/splay_multiset.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
-
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
-
- //! <b>Requires</b>: i must be a valid iterator of *this.
- //!
- //! <b>Effects</b>: Rearranges the splay set so that the element pointed by i
- //! is placed as the root of the tree, improving future searches of this value.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- void splay_up(iterator i)
- { tree_.splay_up(i); }
-
- //! <b>Effects</b>: Rearranges the splay set so that if *this stores an element
- //! with a key equivalent to value the element is placed as the root of the
- //! tree. If the element is not present returns the last node compared with the key.
- //! If the tree is empty, end() is returned.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Returns</b>: An iterator to the new root of the tree, end() if the tree is empty.
- //!
- //! <b>Throws</b>: If the comparison functor throws.
- template<class KeyType, class KeyNodePtrCompare>
- iterator splay_down(const KeyType &key, KeyNodePtrCompare comp)
- { return tree_.splay_down(key, comp); }
-
- //! <b>Effects</b>: Rearranges the splay set so that if *this stores an element
- //! with a key equivalent to value the element is placed as the root of the
- //! tree.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Returns</b>: An iterator to the new root of the tree, end() if the tree is empty.
- //!
- //! <b>Throws</b>: If the predicate throws.
- iterator splay_down(const value_type &value)
- { return tree_.splay_down(value); }
-
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- void rebalance()
- { tree_.rebalance(); }
-
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- iterator rebalance_subtree(iterator root)
- { return tree_.rebalance_subtree(root); }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- /// @cond
- friend bool operator==(const splay_multiset_impl &x, const splay_multiset_impl &y)
- { return x.tree_ == y.tree_; }
+ //! @copydoc ::boost::intrusive::splaytree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- friend bool operator<(const splay_multiset_impl &x, const splay_multiset_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ //! @copydoc ::boost::intrusive::splaytree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::splaytree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::splaytree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::splaytree::remove_node
+ void remove_node(reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::splay_up(iterator)
+ void splay_up(iterator i);
+
+ //! @copydoc ::boost::intrusive::splaytree::splay_down(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ iterator splay_down(const KeyType &key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::splaytree::splay_down(const_reference)
+ iterator splay_down(const_reference value);
+
+ //! @copydoc ::boost::intrusive::splaytree::rebalance
+ void rebalance();
+
+ //! @copydoc ::boost::intrusive::splaytree::rebalance_subtree
+ iterator rebalance_subtree(iterator root);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splay_multiset_impl<T, Options...> &x, const splay_multiset_impl<T, Options...> &y)
-#else
-(const splay_multiset_impl<Config> &x, const splay_multiset_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const splay_multiset_impl<T, Options...> &x, const splay_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splay_multiset_impl<T, Options...> &x, const splay_multiset_impl<T, Options...> &y)
-#else
-(const splay_multiset_impl<Config> &x, const splay_multiset_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const splay_multiset_impl<T, Options...> &x, const splay_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splay_multiset_impl<T, Options...> &x, const splay_multiset_impl<T, Options...> &y)
-#else
-(const splay_multiset_impl<Config> &x, const splay_multiset_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const splay_multiset_impl<T, Options...> &x, const splay_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splay_multiset_impl<T, Options...> &x, const splay_multiset_impl<T, Options...> &y)
-#else
-(const splay_multiset_impl<Config> &x, const splay_multiset_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const splay_multiset_impl<T, Options...> &x, const splay_multiset_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(splay_multiset_impl<T, Options...> &x, splay_multiset_impl<T, Options...> &y)
-#else
-(splay_multiset_impl<Config> &x, splay_multiset_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(splay_multiset_impl<T, Options...> &x, splay_multiset_impl<T, Options...> &y);
+
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
//! Helper metafunction to define a \c splay_multiset that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_splay_multiset
{
/// @cond
+ typedef typename pack_options
+ < splaytree_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
typedef splay_multiset_impl
- < typename make_splaytree_opt<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
- > implementation_defined;
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
@@ -2501,27 +909,27 @@ struct make_splay_multiset
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class splay_multiset
: public make_splay_multiset<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
>::type
{
- typedef typename make_splay_multiset
- <T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
+ typedef typename make_splay_multiset<T,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
>::type Base;
+
BOOST_MOVABLE_BUT_NOT_COPYABLE(splay_multiset)
public:
@@ -2533,8 +941,8 @@ class splay_multiset
//Assert if passed value traits are compatible with the type
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- splay_multiset( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit splay_multiset( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
@@ -2550,7 +958,7 @@ class splay_multiset
{}
splay_multiset& operator=(BOOST_RV_REF(splay_multiset) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<splay_multiset &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static splay_multiset &container_from_end_iterator(iterator end_iterator)
{ return static_cast<splay_multiset &>(Base::container_from_end_iterator(end_iterator)); }
diff --git a/3party/boost/boost/intrusive/splay_set_hook.hpp b/3party/boost/boost/intrusive/splay_set_hook.hpp
deleted file mode 100644
index c8698c65b0..0000000000
--- a/3party/boost/boost/intrusive/splay_set_hook.hpp
+++ /dev/null
@@ -1,292 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Olaf Krzikalla 2004-2006.
-// (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)
-//
-// See http://www.boost.org/libs/intrusive for documentation.
-//
-/////////////////////////////////////////////////////////////////////////////
-#ifndef BOOST_INTRUSIVE_SPLAY_SET_HOOK_HPP
-#define BOOST_INTRUSIVE_SPLAY_SET_HOOK_HPP
-
-#include <boost/intrusive/detail/config_begin.hpp>
-#include <boost/intrusive/intrusive_fwd.hpp>
-#include <boost/intrusive/detail/utilities.hpp>
-#include <boost/intrusive/detail/tree_node.hpp>
-#include <boost/intrusive/splaytree_algorithms.hpp>
-#include <boost/intrusive/options.hpp>
-#include <boost/intrusive/detail/generic_hook.hpp>
-
-namespace boost {
-namespace intrusive {
-
-/// @cond
-template<class VoidPointer>
-struct get_splay_set_node_algo
-{
- typedef splaytree_algorithms<tree_node_traits<VoidPointer> > type;
-};
-/// @endcond
-
-//! Helper metafunction to define a \c splay_set_base_hook that yields to the same
-//! type when the same options (either explicitly or implicitly) are used.
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class ...Options>
-#else
-template<class O1 = none, class O2 = none, class O3 = none>
-#endif
-struct make_splay_set_base_hook
-{
- /// @cond
- typedef typename pack_options
- < hook_defaults,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3
- #else
- Options...
- #endif
- >::type packed_options;
-
- typedef detail::generic_hook
- < get_splay_set_node_algo<typename packed_options::void_pointer>
- , typename packed_options::tag
- , packed_options::link_mode
- , detail::SplaySetBaseHook
- > implementation_defined;
- /// @endcond
- typedef implementation_defined type;
-};
-
-//! Derive a class from splay_set_base_hook in order to store objects in
-//! in a splay_set/splay_multiset. splay_set_base_hook holds the data necessary to maintain
-//! the splay_set/splay_multiset and provides an appropriate value_traits class for splay_set/splay_multiset.
-//!
-//! The hook admits the following options: \c tag<>, \c void_pointer<>,
-//! \c link_mode<> and \c optimize_size<>.
-//!
-//! \c tag<> defines a tag to identify the node.
-//! The same tag value can be used in different classes, but if a class is
-//! derived from more than one \c list_base_hook, then each \c list_base_hook needs its
-//! unique tag.
-//!
-//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
-//!
-//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
-//! \c auto_unlink or \c safe_link).
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class ...Options>
-#else
-template<class O1, class O2, class O3>
-#endif
-class splay_set_base_hook
- : public make_splay_set_base_hook<
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3
- #else
- Options...
- #endif
- >::type
-{
- #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
- public:
- //! <b>Effects</b>: If link_mode is \c auto_unlink or \c safe_link
- //! initializes the node to an unlinked state.
- //!
- //! <b>Throws</b>: Nothing.
- splay_set_base_hook();
-
- //! <b>Effects</b>: If link_mode is \c auto_unlink or \c safe_link
- //! initializes the node to an unlinked state. The argument is ignored.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Rationale</b>: Providing a copy-constructor
- //! makes classes using the hook STL-compliant without forcing the
- //! user to do some additional work. \c swap can be used to emulate
- //! move-semantics.
- splay_set_base_hook(const splay_set_base_hook& );
-
- //! <b>Effects</b>: Empty function. The argument is ignored.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Rationale</b>: Providing an assignment operator
- //! makes classes using the hook STL-compliant without forcing the
- //! user to do some additional work. \c swap can be used to emulate
- //! move-semantics.
- splay_set_base_hook& operator=(const splay_set_base_hook& );
-
- //! <b>Effects</b>: If link_mode is \c normal_link, the destructor does
- //! nothing (ie. no code is generated). If link_mode is \c safe_link and the
- //! object is stored in a set an assertion is raised. If link_mode is
- //! \c auto_unlink and \c is_linked() is true, the node is unlinked.
- //!
- //! <b>Throws</b>: Nothing.
- ~splay_set_base_hook();
-
- //! <b>Effects</b>: Swapping two nodes swaps the position of the elements
- //! related to those nodes in one or two containers. That is, if the node
- //! this is part of the element e1, the node x is part of the element e2
- //! and both elements are included in the containers s1 and s2, then after
- //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1
- //! at the position of e1. If one element is not in a container, then
- //! after the swap-operation the other element is not in a container.
- //! Iterators to e1 and e2 related to those nodes are invalidated.
- //!
- //! <b>Complexity</b>: Constant
- //!
- //! <b>Throws</b>: Nothing.
- void swap_nodes(splay_set_base_hook &other);
-
- //! <b>Precondition</b>: link_mode must be \c safe_link or \c auto_unlink.
- //!
- //! <b>Returns</b>: true, if the node belongs to a container, false
- //! otherwise. This function can be used to test whether \c set::iterator_to
- //! will return a valid iterator.
- //!
- //! <b>Complexity</b>: Constant
- bool is_linked() const;
-
- //! <b>Effects</b>: Removes the node if it's inserted in a container.
- //! This function is only allowed if link_mode is \c auto_unlink.
- //!
- //! <b>Throws</b>: Nothing.
- void unlink();
- #endif
-};
-
-//! Helper metafunction to define a \c splay_set_member_hook that yields to the same
-//! type when the same options (either explicitly or implicitly) are used.
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class ...Options>
-#else
-template<class O1 = none, class O2 = none, class O3 = none>
-#endif
-struct make_splay_set_member_hook
-{
- /// @cond
- typedef typename pack_options
- < hook_defaults,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3
- #else
- Options...
- #endif
- >::type packed_options;
-
- typedef detail::generic_hook
- < get_splay_set_node_algo<typename packed_options::void_pointer>
- , member_tag
- , packed_options::link_mode
- , detail::NoBaseHook
- > implementation_defined;
- /// @endcond
- typedef implementation_defined type;
-};
-
-//! Put a public data member splay_set_member_hook in order to store objects of this
-//! class in a splay_set/splay_multiset. splay_set_member_hook holds the data
-//! necessary for maintaining the splay_set/splay_multiset and provides an appropriate
-//! value_traits class for splay_set/splay_multiset.
-//!
-//! The hook admits the following options: \c void_pointer<>,
-//! \c link_mode<> and \c optimize_size<>.
-//!
-//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
-//!
-//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
-//! \c auto_unlink or \c safe_link).
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class ...Options>
-#else
-template<class O1, class O2, class O3>
-#endif
-class splay_set_member_hook
- : public make_splay_set_member_hook<
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3
- #else
- Options...
- #endif
- >::type
-{
- #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
- public:
- //! <b>Effects</b>: If link_mode is \c auto_unlink or \c safe_link
- //! initializes the node to an unlinked state.
- //!
- //! <b>Throws</b>: Nothing.
- splay_set_member_hook();
-
- //! <b>Effects</b>: If link_mode is \c auto_unlink or \c safe_link
- //! initializes the node to an unlinked state. The argument is ignored.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Rationale</b>: Providing a copy-constructor
- //! makes classes using the hook STL-compliant without forcing the
- //! user to do some additional work. \c swap can be used to emulate
- //! move-semantics.
- splay_set_member_hook(const splay_set_member_hook& );
-
- //! <b>Effects</b>: Empty function. The argument is ignored.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Rationale</b>: Providing an assignment operator
- //! makes classes using the hook STL-compliant without forcing the
- //! user to do some additional work. \c swap can be used to emulate
- //! move-semantics.
- splay_set_member_hook& operator=(const splay_set_member_hook& );
-
- //! <b>Effects</b>: If link_mode is \c normal_link, the destructor does
- //! nothing (ie. no code is generated). If link_mode is \c safe_link and the
- //! object is stored in a set an assertion is raised. If link_mode is
- //! \c auto_unlink and \c is_linked() is true, the node is unlinked.
- //!
- //! <b>Throws</b>: Nothing.
- ~splay_set_member_hook();
-
- //! <b>Effects</b>: Swapping two nodes swaps the position of the elements
- //! related to those nodes in one or two containers. That is, if the node
- //! this is part of the element e1, the node x is part of the element e2
- //! and both elements are included in the containers s1 and s2, then after
- //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1
- //! at the position of e1. If one element is not in a container, then
- //! after the swap-operation the other element is not in a container.
- //! Iterators to e1 and e2 related to those nodes are invalidated.
- //!
- //! <b>Complexity</b>: Constant
- //!
- //! <b>Throws</b>: Nothing.
- void swap_nodes(splay_set_member_hook &other);
-
- //! <b>Precondition</b>: link_mode must be \c safe_link or \c auto_unlink.
- //!
- //! <b>Returns</b>: true, if the node belongs to a container, false
- //! otherwise. This function can be used to test whether \c set::iterator_to
- //! will return a valid iterator.
- //!
- //! <b>Complexity</b>: Constant
- bool is_linked() const;
-
- //! <b>Effects</b>: Removes the node if it's inserted in a container.
- //! This function is only allowed if link_mode is \c auto_unlink.
- //!
- //! <b>Throws</b>: Nothing.
- void unlink();
- #endif
-};
-
-} //namespace intrusive
-} //namespace boost
-
-#include <boost/intrusive/detail/config_end.hpp>
-
-#endif //BOOST_INTRUSIVE_SPLAY_SET_HOOK_HPP
diff --git a/3party/boost/boost/intrusive/splaytree.hpp b/3party/boost/boost/intrusive/splaytree.hpp
index 7c599b74be..a925b68239 100644
--- a/3party/boost/boost/intrusive/splaytree.hpp
+++ b/3party/boost/boost/intrusive/splaytree.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,53 +13,40 @@
#define BOOST_INTRUSIVE_SPLAYTREE_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
+#include <cstddef>
#include <functional>
#include <iterator>
#include <utility>
-#include <cstddef>
-#include <algorithm>
+
#include <boost/intrusive/detail/assert.hpp>
#include <boost/static_assert.hpp>
-#include <boost/intrusive/intrusive_fwd.hpp>
-#include <boost/intrusive/pointer_traits.hpp>
-#include <boost/intrusive/splay_set_hook.hpp>
+#include <boost/intrusive/bstree.hpp>
#include <boost/intrusive/detail/tree_node.hpp>
#include <boost/intrusive/detail/ebo_functor_holder.hpp>
-#include <boost/intrusive/detail/clear_on_destructor_base.hpp>
#include <boost/intrusive/detail/mpl.hpp>
-#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/pointer_traits.hpp>
+#include <boost/intrusive/detail/function_detector.hpp>
+#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/options.hpp>
#include <boost/intrusive/splaytree_algorithms.hpp>
#include <boost/intrusive/link_mode.hpp>
#include <boost/move/move.hpp>
-
namespace boost {
namespace intrusive {
/// @cond
-template <class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize>
-struct splaysetopt
+struct splaytree_defaults
{
- typedef ValueTraits value_traits;
- typedef Compare compare;
- typedef SizeType size_type;
- static const bool constant_time_size = ConstantTimeSize;
+ typedef detail::default_bstree_hook proto_value_traits;
+ static const bool constant_time_size = true;
+ typedef std::size_t size_type;
+ typedef void compare;
+ typedef void header_holder_type;
};
-template <class T>
-struct splay_set_defaults
- : pack_options
- < none
- , base_hook<detail::default_splay_set_hook>
- , constant_time_size<true>
- , size_type<std::size_t>
- , compare<std::less<T> >
- >::type
-{};
-
/// @endcond
//! The class template splaytree is an intrusive splay tree container that
@@ -78,1261 +65,386 @@ struct splay_set_defaults
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class VoidOrKeyComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class splaytree_impl
- : private detail::clear_on_destructor_base<splaytree_impl<Config> >
+ /// @cond
+ : public bstree_impl<ValueTraits, VoidOrKeyComp, SizeType, ConstantTimeSize, SplayTreeAlgorithms, HeaderHolder>
+ /// @endcond
{
- template<class C> friend class detail::clear_on_destructor_base;
public:
- typedef typename Config::value_traits value_traits;
+ typedef ValueTraits value_traits;
/// @cond
- static const bool external_value_traits =
- detail::external_value_traits_bool_is_true<value_traits>::value;
- typedef typename detail::eval_if_c
- < external_value_traits
- , detail::eval_value_traits<value_traits>
- , detail::identity<value_traits>
- >::type real_value_traits;
+ typedef bstree_impl< ValueTraits, VoidOrKeyComp, SizeType
+ , ConstantTimeSize, SplayTreeAlgorithms
+ , HeaderHolder> tree_type;
+ typedef tree_type implementation_defined;
/// @endcond
- typedef typename real_value_traits::pointer pointer;
- typedef typename real_value_traits::const_pointer const_pointer;
- typedef typename pointer_traits<pointer>::element_type value_type;
- typedef typename pointer_traits<pointer>::reference reference;
- typedef typename pointer_traits<const_pointer>::reference const_reference;
- typedef typename pointer_traits<pointer>::difference_type difference_type;
- typedef typename Config::size_type size_type;
- typedef value_type key_type;
- typedef typename Config::compare value_compare;
- typedef value_compare key_compare;
- typedef tree_iterator<splaytree_impl, false> iterator;
- typedef tree_iterator<splaytree_impl, true> const_iterator;
- typedef boost::intrusive::detail::reverse_iterator<iterator> reverse_iterator;
- typedef boost::intrusive::detail::reverse_iterator<const_iterator>const_reverse_iterator;
- typedef typename real_value_traits::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename pointer_traits
- <pointer>::template rebind_pointer
- <node>::type node_ptr;
- typedef typename pointer_traits
- <pointer>::template rebind_pointer
- <const node>::type const_node_ptr;
- typedef splaytree_algorithms<node_traits> node_algorithms;
-
- static const bool constant_time_size = Config::constant_time_size;
- static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
+ typedef typename implementation_defined::pointer pointer;
+ typedef typename implementation_defined::const_pointer const_pointer;
+ typedef typename implementation_defined::value_type value_type;
+ typedef typename implementation_defined::key_type key_type;
+ typedef typename implementation_defined::reference reference;
+ typedef typename implementation_defined::const_reference const_reference;
+ typedef typename implementation_defined::difference_type difference_type;
+ typedef typename implementation_defined::size_type size_type;
+ typedef typename implementation_defined::value_compare value_compare;
+ typedef typename implementation_defined::key_compare key_compare;
+ typedef typename implementation_defined::iterator iterator;
+ typedef typename implementation_defined::const_iterator const_iterator;
+ typedef typename implementation_defined::reverse_iterator reverse_iterator;
+ typedef typename implementation_defined::const_reverse_iterator const_reverse_iterator;
+ typedef typename implementation_defined::node_traits node_traits;
+ typedef typename implementation_defined::node node;
+ typedef typename implementation_defined::node_ptr node_ptr;
+ typedef typename implementation_defined::const_node_ptr const_node_ptr;
+ typedef typename implementation_defined::node_algorithms node_algorithms;
+
+ static const bool constant_time_size = implementation_defined::constant_time_size;
/// @cond
private:
- typedef detail::size_holder<constant_time_size, size_type> size_traits;
//noncopyable
BOOST_MOVABLE_BUT_NOT_COPYABLE(splaytree_impl)
- enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
-
- //Constant-time size is incompatible with auto-unlink hooks!
- BOOST_STATIC_ASSERT(!(constant_time_size && ((int)real_value_traits::link_mode == (int)auto_unlink)));
-
- struct header_plus_size : public size_traits
- { node header_; };
-
- struct node_plus_pred_t : public detail::ebo_functor_holder<value_compare>
- {
- node_plus_pred_t(const value_compare &comp)
- : detail::ebo_functor_holder<value_compare>(comp)
- {}
- header_plus_size header_plus_size_;
- };
-
- struct data_t : public splaytree_impl::value_traits
- {
- typedef typename splaytree_impl::value_traits value_traits;
- data_t(const value_compare & comp, const value_traits &val_traits)
- : value_traits(val_traits), node_plus_pred_(comp)
- {}
- node_plus_pred_t node_plus_pred_;
- } data_;
-
- const value_compare &priv_comp() const
- { return data_.node_plus_pred_.get(); }
-
- value_compare &priv_comp()
- { return data_.node_plus_pred_.get(); }
-
- const value_traits &priv_value_traits() const
- { return data_; }
-
- value_traits &priv_value_traits()
- { return data_; }
-
- node_ptr priv_header_ptr()
- { return pointer_traits<node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_size_.header_); }
-
- const_node_ptr priv_header_ptr() const
- { return pointer_traits<const_node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_size_.header_); }
-
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
-
- size_traits &priv_size_traits()
- { return data_.node_plus_pred_.header_plus_size_; }
-
- const size_traits &priv_size_traits() const
- { return data_.node_plus_pred_.header_plus_size_; }
-
- const real_value_traits &get_real_value_traits(detail::bool_<false>) const
- { return data_; }
-
- const real_value_traits &get_real_value_traits(detail::bool_<true>) const
- { return data_.get_value_traits(*this); }
-
- real_value_traits &get_real_value_traits(detail::bool_<false>)
- { return data_; }
-
- real_value_traits &get_real_value_traits(detail::bool_<true>)
- { return data_.get_value_traits(*this); }
-
/// @endcond
public:
- const real_value_traits &get_real_value_traits() const
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
- real_value_traits &get_real_value_traits()
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
- typedef typename node_algorithms::insert_commit_data insert_commit_data;
+ typedef typename implementation_defined::insert_commit_data insert_commit_data;
- //! <b>Effects</b>: Constructs an empty tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructorof the value_compare object throws. Basic guarantee.
- explicit splaytree_impl( const value_compare &cmp = value_compare()
+ //! @copydoc ::boost::intrusive::bstree::bstree(const value_compare &,const value_traits &)
+ explicit splaytree_impl( const value_compare &cmp = value_compare()
, const value_traits &v_traits = value_traits())
- : data_(cmp, v_traits)
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- }
+ : tree_type(cmp, v_traits)
+ {}
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
- //! cmp must be a comparison function that induces a strict weak ordering.
- //!
- //! <b>Effects</b>: Constructs an empty tree and inserts elements from
- //! [b, e).
- //!
- //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise amortized N * log N, where N is the distance between first and last.
- //!
- //! <b>Throws</b>: If value_traits::node_traits::node
- //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare object throws. Basic guarantee.
+ //! @copydoc ::boost::intrusive::bstree::bstree(bool,Iterator,Iterator,const value_compare &,const value_traits &)
template<class Iterator>
- splaytree_impl ( bool unique, Iterator b, Iterator e
- , const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
- : data_(cmp, v_traits)
+ splaytree_impl( bool unique, Iterator b, Iterator e
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, v_traits)
{
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
if(unique)
this->insert_unique(b, e);
else
this->insert_equal(b, e);
}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&)
splaytree_impl(BOOST_RV_REF(splaytree_impl) x)
- : data_(::boost::move(x.priv_comp()), ::boost::move(x.priv_value_traits()))
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- this->swap(x);
- }
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
+ {}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&)
splaytree_impl& operator=(BOOST_RV_REF(splaytree_impl) x)
- { this->swap(x); return *this; }
-
- //! <b>Effects</b>: Detaches all elements from this. The objects in the set
- //! are not deleted (i.e. no destructors are called), but the nodes according to
- //! the value_traits template parameter are reinitialized and thus can be reused.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~splaytree_impl()
- {}
+ { return static_cast<splaytree_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return iterator(node_algorithms::begin_node(this->priv_header_ptr()), this); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::~bstree()
+ ~splaytree_impl();
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return cbegin(); }
+ //! @copydoc ::boost::intrusive::bstree::begin()
+ iterator begin();
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return const_iterator(node_algorithms::begin_node(this->priv_header_ptr()), this); }
+ //! @copydoc ::boost::intrusive::bstree::begin()const
+ const_iterator begin() const;
- //! <b>Effects</b>: Returns an iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return iterator (this->priv_header_ptr(), this); }
+ //! @copydoc ::boost::intrusive::bstree::cbegin()const
+ const_iterator cbegin() const;
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return cend(); }
+ //! @copydoc ::boost::intrusive::bstree::end()
+ iterator end();
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return const_iterator (uncast(this->priv_header_ptr()), this); }
+ //! @copydoc ::boost::intrusive::bstree::end()const
+ const_iterator end() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return reverse_iterator(end()); }
+ //! @copydoc ::boost::intrusive::bstree::cend()const
+ const_iterator cend() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator(end()); }
+ //! @copydoc ::boost::intrusive::bstree::rbegin()
+ reverse_iterator rbegin();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return const_reverse_iterator(end()); }
+ //! @copydoc ::boost::intrusive::bstree::rbegin()const
+ const_reverse_iterator rbegin() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return reverse_iterator(begin()); }
+ //! @copydoc ::boost::intrusive::bstree::crbegin()const
+ const_reverse_iterator crbegin() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return const_reverse_iterator(begin()); }
+ //! @copydoc ::boost::intrusive::bstree::rend()
+ reverse_iterator rend();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return const_reverse_iterator(begin()); }
+ //! @copydoc ::boost::intrusive::bstree::rend()const
+ const_reverse_iterator rend() const;
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of splaytree.
- //!
- //! <b>Effects</b>: Returns a const reference to the splaytree associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static splaytree_impl &container_from_end_iterator(iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
+ //! @copydoc ::boost::intrusive::bstree::crend()const
+ const_reverse_iterator crend() const;
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of splaytree.
- //!
- //! <b>Effects</b>: Returns a const reference to the splaytree associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const splaytree_impl &container_from_end_iterator(const_iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(iterator)
+ static splaytree_impl &container_from_end_iterator(iterator end_iterator);
- //! <b>Precondition</b>: it must be a valid iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static splaytree_impl &container_from_iterator(iterator it)
- { return priv_container_from_iterator(it); }
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(const_iterator)
+ static const splaytree_impl &container_from_end_iterator(const_iterator end_iterator);
- //! <b>Precondition</b>: it must be a valid end const_iterator
- //! of rbtree.
- //!
- //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const splaytree_impl &container_from_iterator(const_iterator it)
- { return priv_container_from_iterator(it); }
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(iterator)
+ static splaytree_impl &container_from_iterator(iterator it);
- //! <b>Effects</b>: Returns the value_compare object used by the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return priv_comp(); }
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(const_iterator)
+ static const splaytree_impl &container_from_iterator(const_iterator it);
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return this->cbegin() == this->cend(); }
+ //! @copydoc ::boost::intrusive::bstree::key_comp()const
+ key_compare key_comp() const;
- //! <b>Effects</b>: Returns the number of elements stored in the tree.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this
- //! if constant-time size option is disabled. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- {
- if(constant_time_size){
- return this->priv_size_traits().get_size();
- }
- else{
- return (size_type)node_algorithms::size(this->priv_header_ptr());
- }
- }
+ //! @copydoc ::boost::intrusive::bstree::value_comp()const
+ value_compare value_comp() const;
- //! <b>Effects</b>: Swaps the contents of two splaytrees.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the comparison functor's swap call throws.
- void swap(splaytree_impl& other)
- {
- //This can throw
- using std::swap;
- swap(priv_comp(), priv_comp());
- //These can't throw
- node_algorithms::swap_tree(this->priv_header_ptr(), other.priv_header_ptr());
- 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());
- other.priv_size_traits().set_size(backup);
- }
- }
+ //! @copydoc ::boost::intrusive::bstree::empty()const
+ bool empty() const;
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the tree before the lower bound.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is amortized
- //! logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- iterator insert_equal(reference value)
- {
- detail::key_nodeptr_comp<value_compare, splaytree_impl>
- key_node_comp(priv_comp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- iterator ret (node_algorithms::insert_equal_lower_bound
- (this->priv_header_ptr(), to_insert, key_node_comp), this);
- this->priv_size_traits().increment();
- return ret;
- }
+ //! @copydoc ::boost::intrusive::bstree::size()const
+ size_type size() const;
- //! <b>Requires</b>: value must be an lvalue, and "hint" must be
- //! a valid iterator.
- //!
- //! <b>Effects</b>: Inserts x into the tree, using "hint" as a hint to
- //! where it will be inserted. If "hint" is the upper_bound
- //! the insertion takes constant time (two comparisons in the worst case)
- //!
- //! <b>Complexity</b>: Amortized logarithmic in general, but it is amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- iterator insert_equal(const_iterator hint, reference value)
- {
- detail::key_nodeptr_comp<value_compare, splaytree_impl>
- key_node_comp(priv_comp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- iterator ret(node_algorithms::insert_equal
- (this->priv_header_ptr(), hint.pointed_node(), to_insert, key_node_comp), this);
- this->priv_size_traits().increment();
- return ret;
- }
+ //! @copydoc ::boost::intrusive::bstree::swap
+ void swap(splaytree_impl& other);
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a each element of a range into the tree
- //! before the upper bound of the key of each element.
- //!
- //! <b>Complexity</b>: Insert range is in general amortized O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- template<class Iterator>
- void insert_equal(Iterator b, Iterator e)
- {
- if(this->empty()){
- iterator iend(this->end());
- for (; b != e; ++b)
- this->insert_equal(iend, *b);
- }
- }
+ //! @copydoc ::boost::intrusive::bstree::clone_from
+ template <class Cloner, class Disposer>
+ void clone_from(const splaytree_impl &src, Cloner cloner, Disposer disposer);
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the tree if the value
- //! is not already present.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- std::pair<iterator, bool> insert_unique(reference value)
- {
- insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(value, priv_comp(), commit_data);
- if(!ret.second)
- return ret;
- return std::pair<iterator, bool> (insert_unique_commit(value, commit_data), true);
- }
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(reference)
+ iterator insert_equal(reference value);
- //! <b>Requires</b>: value must be an lvalue, and "hint" must be
- //! a valid iterator
- //!
- //! <b>Effects</b>: Tries to insert x into the tree, using "hint" as a hint
- //! to where it will be inserted.
- //!
- //! <b>Complexity</b>: Amortized logarithmic in general, but it is amortized
- //! constant time (two comparisons in the worst case)
- //! if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
- iterator insert_unique(const_iterator hint, reference value)
- {
- insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(hint, value, priv_comp(), commit_data);
- if(!ret.second)
- return ret.first;
- return insert_unique_commit(value, commit_data);
- }
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(const_iterator,reference)
+ iterator insert_equal(const_iterator hint, reference value);
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Tries to insert each element of a range into the tree.
- //!
- //! <b>Complexity</b>: Insert range is in general amortized O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::bstree::insert_equal(Iterator,Iterator)
template<class Iterator>
- void insert_unique(Iterator b, Iterator e)
- {
- for (; b != e; ++b)
- this->insert_unique(*b);
- }
+ void insert_equal(Iterator b, Iterator e);
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the container, using
- //! a user provided key instead of the value itself.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that
- //! part to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the container.
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(reference)
+ std::pair<iterator, bool> insert_unique(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(const_iterator,reference)
+ iterator insert_unique(const_iterator hint, reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_unique_check
- (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- comp(key_value_comp, this);
- std::pair<node_ptr, bool> ret =
- (node_algorithms::insert_unique_check
- (this->priv_header_ptr(), key, comp, commit_data));
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
- }
+ (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data);
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare. The difference is that
- //! key_value_comp compares an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the container, using
- //! a user provided key instead of the value itself, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! constructing that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that key
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This can give a total
- //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the container.
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&)
template<class KeyType, class KeyValueCompare>
std::pair<iterator, bool> insert_unique_check
(const_iterator hint, const KeyType &key
- ,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- comp(key_value_comp, this);
- std::pair<node_ptr, bool> ret =
- node_algorithms::insert_unique_check
- (this->priv_header_ptr(), hint.pointed_node(), key, comp, commit_data);
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
- }
+ ,KeyValueCompare key_value_comp, insert_commit_data &commit_data);
- //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
- //! must have been obtained from a previous call to "insert_check".
- //! No objects should have been inserted or erased from the container between
- //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
- //!
- //! <b>Effects</b>: Inserts the value in the avl_set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Returns</b>: An iterator to the newly inserted object.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- iterator insert_unique_commit(reference value, const insert_commit_data &commit_data)
- {
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- node_algorithms::insert_unique_commit
- (this->priv_header_ptr(), to_insert, commit_data);
- this->priv_size_traits().increment();
- return iterator(to_insert, this);
- }
+ //! @copydoc ::boost::intrusive::bstree::insert_unique_commit
+ iterator insert_unique_commit(reference value, const insert_commit_data &commit_data);
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- {
- const_iterator ret(i);
- ++ret;
- node_ptr to_erase(i.pointed_node());
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!node_algorithms::unique(to_erase));
- node_algorithms::erase(this->priv_header_ptr(), to_erase);
- this->priv_size_traits().decrement();
- if(safemode_or_autounlink)
- node_algorithms::init(to_erase);
- return ret.unconst();
- }
+ //! @copydoc ::boost::intrusive::bstree::insert_unique(Iterator,Iterator)
+ template<class Iterator>
+ void insert_unique(Iterator b, Iterator e);
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is amortized
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { size_type n; return private_erase(b, e, n); }
+ //! @copydoc ::boost::intrusive::bstree::insert_before
+ iterator insert_before(const_iterator pos, reference value);
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return this->erase(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::push_back
+ void push_back(reference value);
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- {
- std::pair<iterator,iterator> p = this->equal_range(key, comp);
- size_type n;
- private_erase(p.first, p.second, n);
- return n;
- }
+ //! @copydoc ::boost::intrusive::bstree::push_front
+ void push_front(reference value);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- {
- node_ptr to_erase(i.pointed_node());
- iterator ret(this->erase(i));
- disposer(get_real_value_traits().to_value_ptr(to_erase));
- return ret;
- }
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::bstree::erase(const_reference)
+ size_type erase(const_reference value);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::bstree::erase(const KeyType&,KeyValueCompare)
+ template<class KeyType, class KeyValueCompare>
+ size_type erase(const KeyType& key, KeyValueCompare comp);
+
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is amortized
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { size_type n; return private_erase(b, e, n, disposer); }
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- {
- std::pair<iterator,iterator> p = this->equal_range(value);
- size_type n;
- private_erase(p.first, p.second, n, disposer);
- return n;
- }
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: Amortized O(log(size() + N).
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::bstree::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- {
- std::pair<iterator,iterator> p = this->equal_range(key, comp);
- size_type n;
- private_erase(p.first, p.second, n, disposer);
- return n;
- }
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
- //! <b>Effects</b>: Erases all of the elements.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- {
- if(safemode_or_autounlink){
- this->clear_and_dispose(detail::null_disposer());
- }
- else{
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(0);
- }
- }
+ //! @copydoc ::boost::intrusive::bstree::clear
+ void clear();
- //! <b>Effects</b>: Erases all of the elements calling disposer(p) for
- //! each node to be erased.
- //! <b>Complexity</b>: Amortized O(log(size() + N)),
- //! where N is the number of elements in the container.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. Calls N times to disposer functor.
+ //! @copydoc ::boost::intrusive::bstree::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- {
- node_algorithms::clear_and_dispose(this->priv_header_ptr()
- , detail::node_disposer<Disposer, splaytree_impl>(disposer, this));
- this->priv_size_traits().set_size(0);
- }
+ void clear_and_dispose(Disposer disposer);
- //! <b>Effects</b>: Returns the number of contained elements with the given value
- //!
- //! <b>Complexity</b>: Amortized logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given value.
- //!
- //! <b>Throws</b>: Nothing.
- size_type count(const_reference value)
- { return this->count(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::count(const_reference)const
+ //! Additional note: non-const function, splaying is performed.
+ size_type count(const_reference value);
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Amortized logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
+ //! Additional note: non-const function, splaying is performed.
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType &key, KeyValueCompare comp)
- {
- std::pair<const_iterator, const_iterator> ret = this->equal_range(key, comp);
- return std::distance(ret.first, ret.second);
- }
+ size_type count(const KeyType &key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns the number of contained elements with the given value
- //!
- //! <b>Complexity</b>: Amortized logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given value.
- //!
- //! <b>Throws</b>: Nothing.
- size_type count_dont_splay(const_reference value) const
- { return this->count_dont_splay(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::count(const_reference)const
+ //! Additional note: const function, no splaying is performed
+ size_type count(const_reference value) const;
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Amortized logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
+ //! Additional note: const function, no splaying is performed
template<class KeyType, class KeyValueCompare>
- size_type count_dont_splay(const KeyType &key, KeyValueCompare comp) const
- {
- std::pair<const_iterator, const_iterator> ret = this->equal_range_dont_splay(key, comp);
- return std::distance(ret.first, ret.second);
- }
+ size_type count(const KeyType &key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator lower_bound(const_reference value)
- { return this->lower_bound(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)
+ //! Additional note: non-const function, splaying is performed.
+ iterator lower_bound(const_reference value);
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator lower_bound_dont_splay(const_reference value) const
- { return this->lower_bound_dont_splay(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const
+ //! Additional note: const function, no splaying is performed
+ const_iterator lower_bound(const_reference value) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)
+ //! Additional note: non-const function, splaying is performed for the first
+ //! element of the equal range of "key"
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ iterator lower_bound(const KeyType &key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)const
+ //! Additional note: const function, no splaying is performed
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound_dont_splay(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp, false), this);
- }
+ const_iterator lower_bound(const KeyType &key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator upper_bound(const_reference value)
- { return this->upper_bound(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)
+ //! Additional note: non-const function, splaying is performed for the first
+ //! element of the equal range of "value"
+ iterator upper_bound(const_reference value);
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::upper_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)const
+ //! Additional note: const function, no splaying is performed
+ const_iterator upper_bound(const_reference value) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator upper_bound_dont_splay(const_reference value) const
- { return this->upper_bound_dont_splay(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)
+ //! Additional note: non-const function, splaying is performed for the first
+ //! element of the equal range of "key"
+ template<class KeyType, class KeyValueCompare>
+ iterator upper_bound(const KeyType &key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)const
+ //! Additional note: const function, no splaying is performed
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound_dont_splay(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::upper_bound_dont_splay
- (this->priv_header_ptr(), key, key_node_comp, false), this);
- }
+ const_iterator upper_bound(const KeyType &key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator find(const_reference value)
- { return this->find(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)
+ //! Additional note: non-const function, splaying is performed for the first
+ //! element of the equal range of "value"
+ iterator find(const_reference value);
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- return iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this);
- }
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)const
+ //! Additional note: const function, no splaying is performed
+ const_iterator find(const_reference value) const;
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator find_dont_splay(const_reference value) const
- { return this->find_dont_splay(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)
+ //! Additional note: non-const function, splaying is performed for the first
+ //! element of the equal range of "key"
+ template<class KeyType, class KeyValueCompare>
+ iterator find(const KeyType &key, KeyValueCompare comp);
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const
+ //! Additional note: const function, no splaying is performed
template<class KeyType, class KeyValueCompare>
- const_iterator find_dont_splay(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- return const_iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp, false), this);
- }
+ const_iterator find(const KeyType &key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return this->equal_range(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)
+ //! Additional note: non-const function, splaying is performed for the first
+ //! element of the equal range of "value"
+ std::pair<iterator, iterator> equal_range(const_reference value);
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Amortized logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)const
+ //! Additional note: const function, no splaying is performed
+ std::pair<const_iterator, const_iterator> equal_range(const_reference value) const;
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- std::pair<const_iterator, const_iterator>
- equal_range_dont_splay(const_reference value) const
- { return this->equal_range_dont_splay(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)
+ //! Additional note: non-const function, splaying is performed for the first
+ //! element of the equal range of "key"
+ template<class KeyType, class KeyValueCompare>
+ std::pair<iterator, iterator> equal_range(const KeyType &key, KeyValueCompare comp);
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)const
+ //! Additional note: const function, no splaying is performed
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- equal_range_dont_splay(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp, false));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
+ std::pair<const_iterator, const_iterator> equal_range(const KeyType &key, KeyValueCompare comp) const;
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
- std::pair<const_iterator,const_iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return this->bounded_range_dont_splay(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)const
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
+
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator,const_iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed, false));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
- template <class Cloner, class Disposer>
- void clone_from(const splaytree_impl &src, Cloner cloner, Disposer disposer)
- {
- this->clear_and_dispose(disposer);
- if(!src.empty()){
- detail::exception_disposer<splaytree_impl, Disposer>
- rollback(*this, disposer);
- node_algorithms::clone
- (src.priv_header_ptr()
- ,this->priv_header_ptr()
- ,detail::node_cloner<Cloner, splaytree_impl>(cloner, this)
- ,detail::node_disposer<Disposer, splaytree_impl>(disposer, this));
- this->priv_size_traits().set_size(src.priv_size_traits().get_size());
- this->priv_comp() = src.priv_comp();
- rollback.release();
- }
- }
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- {
- node_ptr to_be_disposed(node_algorithms::unlink_leftmost_without_rebalance
- (this->priv_header_ptr()));
- if(!to_be_disposed)
- return 0;
- this->priv_size_traits().decrement();
- if(safemode_or_autounlink)//If this is commented does not work with normal_link
- node_algorithms::init(to_be_disposed);
- return get_real_value_traits().to_value_ptr(to_be_disposed);
- }
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(reference)
+ iterator iterator_to(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::init_node(reference)
+ static void init_node(reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
+
+ //! @copydoc ::boost::intrusive::bstree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
+
+ //! @copydoc ::boost::intrusive::bstree::remove_node
+ void remove_node(reference value);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Requires</b>: i must be a valid iterator of *this.
//!
- //! <b>Effects</b>: Rearranges the splay set so that the element pointed by i
+ //! <b>Effects</b>: Rearranges the container so that the element pointed by i
//! is placed as the root of the tree, improving future searches of this value.
//!
//! <b>Complexity</b>: Amortized logarithmic.
//!
//! <b>Throws</b>: Nothing.
void splay_up(iterator i)
- { return node_algorithms::splay_up(i.pointed_node(), this->priv_header_ptr()); }
+ { return node_algorithms::splay_up(i.pointed_node(), tree_type::header_ptr()); }
- //! <b>Effects</b>: Rearranges the splay set so that if *this stores an element
+ //! <b>Effects</b>: Rearranges the container so that if *this stores an element
//! with a key equivalent to value the element is placed as the root of the
//! tree. If the element is not present returns the last node compared with the key.
//! If the tree is empty, end() is returned.
@@ -1345,13 +457,13 @@ class splaytree_impl
template<class KeyType, class KeyValueCompare>
iterator splay_down(const KeyType &key, KeyValueCompare comp)
{
- detail::key_nodeptr_comp<KeyValueCompare, splaytree_impl>
- key_node_comp(comp, this);
- node_ptr r = node_algorithms::splay_down(this->priv_header_ptr(), key, key_node_comp);
- return iterator(r, this);
+ detail::key_nodeptr_comp<value_compare, value_traits>
+ key_node_comp(comp, &this->get_value_traits());
+ node_ptr r = node_algorithms::splay_down(tree_type::header_ptr(), key, key_node_comp);
+ return iterator(r, this->priv_value_traits_ptr());
}
- //! <b>Effects</b>: Rearranges the splay set so that if *this stores an element
+ //! <b>Effects</b>: Rearranges the container so that if *this stores an element
//! with a key equivalent to value the element is placed as the root of the
//! tree.
//!
@@ -1360,402 +472,127 @@ class splaytree_impl
//! <b>Returns</b>: An iterator to the new root of the tree, end() if the tree is empty.
//!
//! <b>Throws</b>: If the predicate throws.
- iterator splay_down(const value_type &value)
- { return this->splay_down(value, priv_comp()); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- {
- node_algorithms::replace_node( get_real_value_traits().to_node_ptr(*replace_this)
- , this->priv_header_ptr()
- , get_real_value_traits().to_node_ptr(with_this));
- if(safemode_or_autounlink)
- node_algorithms::init(replace_this.pointed_node());
- }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return iterator (value_traits::to_node_ptr(value), 0);
- }
+ iterator splay_down(const_reference value)
+ { return this->splay_down(value, this->value_comp()); }
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), 0);
- }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::rebalance
+ void rebalance();
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return iterator (value_traits::to_node_ptr(value), this); }
-
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), this); }
-
- //! <b>Requires</b>: value shall not be in a tree.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { node_algorithms::init(value_traits::to_node_ptr(value)); }
-
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- void rebalance()
- { node_algorithms::rebalance(this->priv_header_ptr()); }
-
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- iterator rebalance_subtree(iterator root)
- { return iterator(node_algorithms::rebalance_subtree(root.pointed_node()), this); }
-
-/*
- //! <b>Effects</b>: removes x from a tree of the appropriate type. It has no effect,
- //! if x is not in such a tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This static function is only usable with the "safe mode"
- //! hook and non-constant time size lists. Otherwise, the user must use
- //! the non-static "erase(reference )" member. If the user calls
- //! this function with a non "safe mode" or constant time size list
- //! a compilation error will be issued.
- template<class T>
- static void remove_node(T& value)
- {
- //This function is only usable for safe mode hooks and non-constant
- //time lists.
- //BOOST_STATIC_ASSERT((!(safemode_or_autounlink && constant_time_size)));
- BOOST_STATIC_ASSERT((!constant_time_size));
- BOOST_STATIC_ASSERT((boost::is_convertible<T, value_type>::value));
- node_ptr to_remove(value_traits::to_node_ptr(value));
- node_algorithms::unlink_and_rebalance(to_remove);
- if(safemode_or_autounlink)
- node_algorithms::init(to_remove);
- }
-*/
-
- /// @cond
- private:
- template<class Disposer>
- iterator private_erase(const_iterator b, const_iterator e, size_type &n, Disposer disposer)
- {
- for(n = 0; b != e; ++n)
- this->erase_and_dispose(b++, disposer);
- return b.unconst();
- }
-
- iterator private_erase(const_iterator b, const_iterator e, size_type &n)
- {
- for(n = 0; b != e; ++n)
- this->erase(b++);
- return b.unconst();
- }
- /// @endcond
-
- private:
- static splaytree_impl &priv_container_from_end_iterator(const const_iterator &end_iterator)
- {
- header_plus_size *r = detail::parent_from_member<header_plus_size, node>
- ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), &header_plus_size::header_);
- node_plus_pred_t *n = detail::parent_from_member
- <node_plus_pred_t, header_plus_size>(r, &node_plus_pred_t::header_plus_size_);
- data_t *d = detail::parent_from_member<data_t, node_plus_pred_t>(n, &data_t::node_plus_pred_);
- splaytree_impl *rb = detail::parent_from_member<splaytree_impl, data_t>(d, &splaytree_impl::data_);
- return *rb;
- }
-
- static splaytree_impl &priv_container_from_iterator(const const_iterator &it)
- { return priv_container_from_end_iterator(it.end_iterator_from_it()); }
+ //! @copydoc ::boost::intrusive::bstree::rebalance_subtree
+ iterator rebalance_subtree(iterator root);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y)
-#else
-(const splaytree_impl<Config> &x, const splaytree_impl<Config> &y)
-#endif
-{ return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-bool operator==
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y)
-#else
-(const splaytree_impl<Config> &x, const splaytree_impl<Config> &y)
-#endif
-{
- typedef splaytree_impl<Config> tree_type;
- typedef typename tree_type::const_iterator const_iterator;
-
- if(tree_type::constant_time_size && x.size() != y.size()){
- return false;
- }
- const_iterator end1 = x.end();
- const_iterator i1 = x.begin();
- const_iterator i2 = y.begin();
- if(tree_type::constant_time_size){
- while (i1 != end1 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1;
- }
- else{
- const_iterator end2 = y.end();
- while (i1 != end1 && i2 != end2 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1 && i2 == end2;
- }
-}
+bool operator< (const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y)
-#else
-(const splaytree_impl<Config> &x, const splaytree_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator==(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y)
-#else
-(const splaytree_impl<Config> &x, const splaytree_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator!= (const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y)
-#else
-(const splaytree_impl<Config> &x, const splaytree_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator>(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y)
-#else
-(const splaytree_impl<Config> &x, const splaytree_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator<=(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(splaytree_impl<T, Options...> &x, splaytree_impl<T, Options...> &y)
-#else
-(splaytree_impl<Config> &x, splaytree_impl<Config> &y)
-#endif
-{ x.swap(y); }
+bool operator>=(const splaytree_impl<T, Options...> &x, const splaytree_impl<T, Options...> &y);
-/// @cond
-
-#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
-#else
template<class T, class ...Options>
-#endif
-struct make_splaytree_opt
-{
- typedef typename pack_options
- < splay_set_defaults<T>,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type packed_options;
- typedef typename detail::get_value_traits
- <T, typename packed_options::value_traits>::type value_traits;
+void swap(splaytree_impl<T, Options...> &x, splaytree_impl<T, Options...> &y);
- typedef splaysetopt
- < value_traits
- , typename packed_options::compare
- , typename packed_options::size_type
- , packed_options::constant_time_size
- > type;
-};
-/// @endcond
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
//! Helper metafunction to define a \c splaytree that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_splaytree
{
/// @cond
+ typedef typename pack_options
+ < splaytree_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
typedef splaytree_impl
- < typename make_splaytree_opt<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
- > implementation_defined;
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class splaytree
: public make_splaytree<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
>::type
{
typedef typename make_splaytree
<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
>::type Base;
BOOST_MOVABLE_BUT_NOT_COPYABLE(splaytree)
public:
typedef typename Base::value_compare value_compare;
typedef typename Base::value_traits value_traits;
- typedef typename Base::real_value_traits real_value_traits;
typedef typename Base::iterator iterator;
typedef typename Base::const_iterator const_iterator;
+ typedef typename Base::reverse_iterator reverse_iterator;
+ typedef typename Base::const_reverse_iterator const_reverse_iterator;
//Assert if passed value traits are compatible with the type
- BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- splaytree( const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ explicit splaytree( const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, v_traits)
{}
template<class Iterator>
splaytree( bool unique, Iterator b, Iterator e
- , const value_compare &cmp = value_compare()
- , const value_traits &v_traits = value_traits())
+ , const value_compare &cmp = value_compare()
+ , const value_traits &v_traits = value_traits())
: Base(unique, b, e, cmp, v_traits)
{}
@@ -1764,18 +601,23 @@ class splaytree
{}
splaytree& operator=(BOOST_RV_REF(splaytree) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<splaytree &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static splaytree &container_from_end_iterator(iterator end_iterator)
{ return static_cast<splaytree &>(Base::container_from_end_iterator(end_iterator)); }
static const splaytree &container_from_end_iterator(const_iterator end_iterator)
{ return static_cast<const splaytree &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static splaytree &container_from_iterator(iterator it)
+ { return static_cast<splaytree &>(Base::container_from_iterator(it)); }
+
+ static const splaytree &container_from_iterator(const_iterator it)
+ { return static_cast<const splaytree &>(Base::container_from_iterator(it)); }
};
#endif
-
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/splaytree_algorithms.hpp b/3party/boost/boost/intrusive/splaytree_algorithms.hpp
index 8155648983..b70bd8693e 100644
--- a/3party/boost/boost/intrusive/splaytree_algorithms.hpp
+++ b/3party/boost/boost/intrusive/splaytree_algorithms.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -12,8 +12,9 @@
// The implementation of splay trees is based on the article and code published
// in C++ Users Journal "Implementing Splay Trees in C++" (September 1, 2005).
//
-// The code has been modified and (supposely) improved by Ion Gaztanaga.
-// Here is the header of the file used as base code:
+// The splay code has been modified and (supposedly) improved by Ion Gaztanaga.
+//
+// Here is the copyright notice of the original file containing the splay code:
//
// splay_tree.h -- implementation of a STL compatible splay tree.
//
@@ -24,35 +25,18 @@
// This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
//
-// Please send questions, comments, complaints, performance data, etc to
-// ralf.mattethat@teknologisk.dk
-//
-// Requirements for element type
-// * must be copy-constructible
-// * destructor must not throw exception
-//
-// Methods marked with note A only throws an exception if the evaluation of the
-// predicate throws an exception. If an exception is thrown the call has no
-// effect on the containers state
-//
-// Methods marked with note B only throws an exception if the coppy constructor
-// or assignment operator of the predicate throws an exception. If an exception
-// is thrown the call has no effect on the containers state
-//
-// iterators are only invalidated, if the element pointed to by the iterator
-// is deleted. The same goes for element references
-//
+/////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_INTRUSIVE_SPLAYTREE_ALGORITHMS_HPP
#define BOOST_INTRUSIVE_SPLAYTREE_ALGORITHMS_HPP
#include <boost/intrusive/detail/config_begin.hpp>
-#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/intrusive_fwd.hpp>
+#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <cstddef>
#include <boost/intrusive/detail/utilities.hpp>
-#include <boost/intrusive/detail/tree_algorithms.hpp>
+#include <boost/intrusive/bstree_algorithms.hpp>
namespace boost {
namespace intrusive {
@@ -61,33 +45,70 @@ namespace intrusive {
namespace detail {
template<class NodeTraits>
-struct splaydown_rollback
+struct splaydown_assemble_and_fix_header
{
typedef typename NodeTraits::node_ptr node_ptr;
- splaydown_rollback( const node_ptr *pcur_subtree, const node_ptr & header
- , const node_ptr & leftmost , const node_ptr & rightmost)
- : pcur_subtree_(pcur_subtree) , header_(header)
- , leftmost_(leftmost) , rightmost_(rightmost)
+
+ splaydown_assemble_and_fix_header(const node_ptr & t, const node_ptr & header, const node_ptr &leftmost, const node_ptr &rightmost)
+ : t_(t)
+ , null_node_(header)
+ , l_(null_node_)
+ , r_(null_node_)
+ , leftmost_(leftmost)
+ , rightmost_(rightmost)
{}
- void release()
- { pcur_subtree_ = 0; }
+ ~splaydown_assemble_and_fix_header()
+ {
+ this->assemble();
- ~splaydown_rollback()
+ //Now recover the original header except for the
+ //splayed root node.
+ //"t_" is the current root and "null_node_" is the header node
+ NodeTraits::set_parent(null_node_, t_);
+ NodeTraits::set_parent(t_, null_node_);
+ //Recover leftmost/rightmost pointers
+ NodeTraits::set_left (null_node_, leftmost_);
+ NodeTraits::set_right(null_node_, rightmost_);
+ }
+
+ private:
+
+ void assemble()
{
- if(pcur_subtree_){
- //Exception can only be thrown by comp, but
- //tree invariants still hold. *pcur_subtree is the current root
- //so link it to the header.
- NodeTraits::set_parent(*pcur_subtree_, header_);
- NodeTraits::set_parent(header_, *pcur_subtree_);
- //Recover leftmost/rightmost pointers
- NodeTraits::set_left (header_, leftmost_);
- NodeTraits::set_right(header_, rightmost_);
+ //procedure assemble;
+ // left(r), right(l) := right(t), left(t);
+ // left(t), right(t) := right(null), left(null);
+ //end assemble;
+ { // left(r), right(l) := right(t), left(t);
+
+ node_ptr const old_t_left = NodeTraits::get_left(t_);
+ node_ptr const old_t_right = NodeTraits::get_right(t_);
+ NodeTraits::set_right(l_, old_t_left);
+ NodeTraits::set_left (r_, old_t_right);
+ if(old_t_left){
+ NodeTraits::set_parent(old_t_left, l_);
+ }
+ if(old_t_right){
+ NodeTraits::set_parent(old_t_right, r_);
+ }
+ }
+ { // left(t), right(t) := right(null), left(null);
+ node_ptr const null_right = NodeTraits::get_right(null_node_);
+ node_ptr const null_left = NodeTraits::get_left(null_node_);
+ NodeTraits::set_left (t_, null_right);
+ NodeTraits::set_right(t_, null_left);
+ if(null_right){
+ NodeTraits::set_parent(null_right, t_);
+ }
+ if(null_left){
+ NodeTraits::set_parent(null_left, t_);
+ }
}
}
- const node_ptr *pcur_subtree_;
- node_ptr header_, leftmost_, rightmost_;
+
+ public:
+ node_ptr t_, null_node_, l_, r_, leftmost_, rightmost_;
};
} //namespace detail {
@@ -100,14 +121,14 @@ struct splaydown_rollback
//! by Daniel Dominic Sleator and Robert Endre Tarjan
//! AT&T Bell Laboratories, Murray Hill, NJ
//! Journal of the ACM, Vol 32, no 3, July 1985, pp 652-686
-
+//!
//! splaytree_algorithms is configured with a NodeTraits class, which encapsulates the
//! information about the node to be manipulated. NodeTraits must support the
//! following interface:
//!
//! <b>Typedefs</b>:
//!
-//! <tt>node</tt>: The type of the node that forms the circular list
+//! <tt>node</tt>: The type of the node that forms the binary search tree
//!
//! <tt>node_ptr</tt>: A pointer to a node
//!
@@ -128,10 +149,13 @@ struct splaydown_rollback
//! <tt>static void set_right(node_ptr n, node_ptr right);</tt>
template<class NodeTraits>
class splaytree_algorithms
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_algorithms<NodeTraits>
+ #endif
{
/// @cond
private:
- typedef detail::tree_algorithms<NodeTraits> tree_algorithms;
+ typedef bstree_algorithms<NodeTraits> bstree_algo;
/// @endcond
public:
@@ -142,611 +166,344 @@ class splaytree_algorithms
//! This type is the information that will be
//! filled by insert_unique_check
- typedef typename tree_algorithms::insert_commit_data insert_commit_data;
-
- /// @cond
- private:
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
- /// @endcond
+ typedef typename bstree_algo::insert_commit_data insert_commit_data;
public:
- static node_ptr begin_node(const const_node_ptr & header)
- { return tree_algorithms::begin_node(header); }
-
- static node_ptr end_node(const const_node_ptr & header)
- { return tree_algorithms::end_node(header); }
-
- //! <b>Requires</b>: node is a node of the tree or an node initialized
- //! by init(...).
- //!
- //! <b>Effects</b>: Returns true if the node is initialized by init().
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static bool unique(const const_node_ptr & node)
- { return tree_algorithms::unique(node); }
-
- static void unlink(const node_ptr & node)
- { tree_algorithms::unlink(node); }
-
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
- static void swap_nodes(const node_ptr & node1, const node_ptr & node2)
- {
- if(node1 == node2)
- return;
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::get_header(const const_node_ptr&)
+ static node_ptr get_header(const const_node_ptr & n);
- node_ptr header1(tree_algorithms::get_header(node1)), header2(tree_algorithms::get_header(node2));
- swap_nodes(node1, header1, node2, header2);
- }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::begin_node
+ static node_ptr begin_node(const const_node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::end_node
+ static node_ptr end_node(const const_node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_tree
+ static void swap_tree(const node_ptr & header1, const node_ptr & header2);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&)
+ static void swap_nodes(const node_ptr & node1, const node_ptr & node2);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&,const node_ptr&,const node_ptr&)
+ static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&)
+ static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&,const node_ptr&)
+ static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unlink(const node_ptr&)
+ static void unlink(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unlink_leftmost_without_rebalance
+ static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header);
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees with header header1 and header2.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
- static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2)
- { tree_algorithms::swap_nodes(node1, header1, node2, header2); }
-
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing and comparison is needed.
- //!
- //!Experimental function
- static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node)
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unique(const const_node_ptr&)
+ static bool unique(const const_node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::size(const const_node_ptr&)
+ static std::size_t size(const const_node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::next_node(const node_ptr&)
+ static node_ptr next_node(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::prev_node(const node_ptr&)
+ static node_ptr prev_node(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::init(const node_ptr&)
+ static void init(const node_ptr & node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::init_header(const node_ptr&)
+ static void init_header(const node_ptr & header);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::erase(const node_ptr&,const node_ptr&)
+ //! Additional notes: the previous node of z is splayed to speed up range deletions.
+ static void erase(const node_ptr & header, const node_ptr & z)
{
- if(node_to_be_replaced == new_node)
- return;
- replace_node(node_to_be_replaced, tree_algorithms::get_header(node_to_be_replaced), new_node);
+ //posibility 1
+ if(NodeTraits::get_left(z)){
+ splay_up(bstree_algo::prev_node(z), header);
+ }
+ /*
+ //possibility 2
+ if(NodeTraits::get_left(z)){
+ node_ptr l = NodeTraits::get_left(z);
+ splay_up(l, header);
+ }*/
+ /*
+ if(NodeTraits::get_left(z)){
+ node_ptr l = bstree_algo::prev_node(z);
+ splay_up_impl(l, z);
+ }*/
+ /*
+ //possibility 4
+ splay_up(z, header);
+ */
+ bstree_algo::erase(header, z);
}
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! with header "header" and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- //!
- //!Experimental function
- static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node)
- { tree_algorithms::replace_node(node_to_be_replaced, header, new_node); }
-
- //! <b>Requires</b>: p is a node from the tree except the header.
- //!
- //! <b>Effects</b>: Returns the next node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr next_node(const node_ptr & p)
- { return tree_algorithms::next_node(p); }
-
- //! <b>Requires</b>: p is a node from the tree except the leftmost node.
- //!
- //! <b>Effects</b>: Returns the previous node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr prev_node(const node_ptr & p)
- { return tree_algorithms::prev_node(p); }
-
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: After the function unique(node) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init(const node_ptr & node)
- { tree_algorithms::init(node); }
-
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: Initializes the header to represent an empty tree.
- //! unique(header) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init_header(const node_ptr & header)
- { tree_algorithms::init_header(header); }
-
- //! <b>Requires</b>: "disposer" must be an object function
- //! taking a node_ptr parameter and shouldn't throw.
- //!
- //! <b>Effects</b>: Empties the target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clone(const const_node_ptr&,const node_ptr&,Cloner,Disposer)
+ template <class Cloner, class Disposer>
+ static void clone
+ (const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clear_and_dispose(const node_ptr&,Disposer)
template<class Disposer>
- static void clear_and_dispose(const node_ptr & header, Disposer disposer)
- { tree_algorithms::clear_and_dispose(header, disposer); }
-
- //! <b>Requires</b>: node is a node of the tree but it's not the header.
- //!
- //! <b>Effects</b>: Returns the number of nodes of the subtree.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t count(const const_node_ptr & node)
- { return tree_algorithms::count(node); }
-
- //! <b>Requires</b>: header is the header node of the tree.
- //!
- //! <b>Effects</b>: Returns the number of nodes above the header.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t size(const const_node_ptr & header)
- { return tree_algorithms::size(header); }
-
- //! <b>Requires</b>: header1 and header2 must be the header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two trees. After the function header1 will contain
- //! links to the second tree and header2 will have links to the first tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static void swap_tree(const node_ptr & header1, const node_ptr & header2)
- { return tree_algorithms::swap_tree(header1, header2); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "commit_data" must have been obtained from a previous call to
- //! "insert_unique_check". No objects should have been inserted or erased
- //! from the set between the "insert_unique_check" that filled "commit_data"
- //! and the call to "insert_commit".
- //!
- //!
- //! <b>Effects</b>: Inserts new_node in the set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_unique_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- static void insert_unique_commit
- (const node_ptr & header, const node_ptr & new_value, const insert_commit_data &commit_data)
- { tree_algorithms::insert_unique_commit(header, new_value, commit_data); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares KeyType with a node_ptr.
- //!
- //! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
- //! tree according to "comp" and obtains the needed information to realize
- //! a constant-time node insertion if there is no equivalent node.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing a node_ptr to the already present node
- //! and false. If there is not equivalent key can be inserted returns true
- //! in the returned pair's boolean and fills "commit_data" that is meant to
- //! be used with the "insert_commit" function to achieve a constant-time
- //! insertion function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a node is expensive and the user does not want to have two equivalent nodes
- //! in the tree: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the node and this function offers the possibility to use that part
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the node and use
- //! "insert_commit" to insert the node in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_unique_commit" only
- //! if no more objects are inserted or erased from the set.
+ static void clear_and_dispose(const node_ptr & header, Disposer disposer);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::count(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional notes: an element with key `key` is splayed.
template<class KeyType, class KeyNodePtrCompare>
- static std::pair<node_ptr, bool> insert_unique_check
- (const node_ptr & header, const KeyType &key
- ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
+ static std::size_t count
+ (const node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
{
- splay_down(header, key, comp);
- return tree_algorithms::insert_unique_check(header, key, comp, commit_data);
+ std::pair<node_ptr, node_ptr> ret = equal_range(header, key, comp);
+ std::size_t n = 0;
+ while(ret.first != ret.second){
+ ++n;
+ ret.first = next_node(ret.first);
+ }
+ return n;
}
+ //! @copydoc ::boost::intrusive::bstree_algorithms::count(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional note: no splaying is performed
template<class KeyType, class KeyNodePtrCompare>
- static std::pair<node_ptr, bool> insert_unique_check
- (const node_ptr & header, const node_ptr &hint, const KeyType &key
- ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
+ static std::size_t count
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ { return bstree_algo::count(header, key, comp); }
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::lower_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional notes: the first node of the range is splayed.
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr lower_bound
+ (const node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
{
- splay_down(header, key, comp);
- return tree_algorithms::insert_unique_check(header, hint, key, comp, commit_data);
+ splay_down(detail::uncast(header), key, comp);
+ node_ptr y = bstree_algo::lower_bound(header, key, comp);
+ //splay_up(y, detail::uncast(header));
+ return y;
+ }
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::lower_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional note: no splaying is performed
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr lower_bound
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ { return bstree_algo::lower_bound(header, key, comp); }
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::upper_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional notes: the first node of the range is splayed.
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr upper_bound
+ (const node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ splay_down(detail::uncast(header), key, comp);
+ node_ptr y = bstree_algo::upper_bound(header, key, comp);
+ //splay_up(y, detail::uncast(header));
+ return y;
}
- static bool is_header(const const_node_ptr & p)
- { return tree_algorithms::is_header(p); }
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the element that is equivalent to
- //! "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::upper_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional note: no splaying is performed
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr upper_bound
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ { return bstree_algo::upper_bound(header, key, comp); }
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::find(const const_node_ptr&, const KeyType&,KeyNodePtrCompare)
+ //! Additional notes: the found node of the lower bound is splayed.
template<class KeyType, class KeyNodePtrCompare>
static node_ptr find
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp, bool splay = true)
+ (const node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
{
- if(splay)
- splay_down(uncast(header), key, comp);
- node_ptr end = uncast(header);
- node_ptr y = lower_bound(header, key, comp, false);
- node_ptr r = (y == end || comp(key, y)) ? end : y;
- return r;
+ splay_down(detail::uncast(header), key, comp);
+ return bstree_algo::find(header, key, comp);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an a pair of node_ptr delimiting a range containing
- //! all elements that are equivalent to "key" according to "comp" or an
- //! empty range that indicates the position where those elements would be
- //! if they there are no equivalent elements.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::find(const const_node_ptr&, const KeyType&,KeyNodePtrCompare)
+ //! Additional note: no splaying is performed
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr find
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ { return bstree_algo::find(header, key, comp); }
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::equal_range(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional notes: the first node of the range is splayed.
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> equal_range
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp, bool splay = true)
+ (const node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
{
- //if(splay)
- //splay_down(uncast(header), key, comp);
- std::pair<node_ptr, node_ptr> ret =
- tree_algorithms::equal_range(header, key, comp);
+ splay_down(detail::uncast(header), key, comp);
+ std::pair<node_ptr, node_ptr> ret = bstree_algo::equal_range(header, key, comp);
+ //splay_up(ret.first, detail::uncast(header));
+ return ret;
+ }
- if(splay)
- splay_up(ret.first, uncast(header));
+ //! @copydoc ::boost::intrusive::bstree_algorithms::equal_range(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional note: no splaying is performed
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, node_ptr> equal_range
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ { return bstree_algo::equal_range(header, key, comp); }
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::lower_bound_range(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional notes: the first node of the range is splayed.
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, node_ptr> lower_bound_range
+ (const node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ {
+ splay_down(detail::uncast(header), key, comp);
+ std::pair<node_ptr, node_ptr> ret = bstree_algo::lower_bound_range(header, key, comp);
+ //splay_up(ret.first, detail::uncast(header));
return ret;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
- //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::lower_bound_range(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ //! Additional note: no splaying is performed
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, node_ptr> lower_bound_range
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ { return bstree_algo::lower_bound_range(header, key, comp); }
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::bounded_range(const const_node_ptr&,const KeyType&,const KeyType&,KeyNodePtrCompare,bool,bool)
+ //! Additional notes: the first node of the range is splayed.
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> bounded_range
- (const const_node_ptr & header, const KeyType &lower_key, const KeyType &upper_key, KeyNodePtrCompare comp
- , bool left_closed, bool right_closed, bool splay = true)
+ (const node_ptr & header, const KeyType &lower_key, const KeyType &upper_key, KeyNodePtrCompare comp
+ , bool left_closed, bool right_closed)
{
+ splay_down(detail::uncast(header), lower_key, comp);
std::pair<node_ptr, node_ptr> ret =
- tree_algorithms::bounded_range(header, lower_key, upper_key, comp, left_closed, right_closed);
-
- if(splay)
- splay_up(ret.first, uncast(header));
+ bstree_algo::bounded_range(header, lower_key, upper_key, comp, left_closed, right_closed);
+ //splay_up(ret.first, detail::uncast(header));
return ret;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is
- //! not less than "key" according to "comp" or "header" if that element does
- //! not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::bounded_range(const const_node_ptr&,const KeyType&,const KeyType&,KeyNodePtrCompare,bool,bool)
+ //! Additional note: no splaying is performed
template<class KeyType, class KeyNodePtrCompare>
- static node_ptr lower_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp, bool splay = true)
+ static std::pair<node_ptr, node_ptr> bounded_range
+ (const const_node_ptr & header, const KeyType &lower_key, const KeyType &upper_key, KeyNodePtrCompare comp
+ , bool left_closed, bool right_closed)
+ { return bstree_algo::bounded_range(header, lower_key, upper_key, comp, left_closed, right_closed); }
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal_upper_bound(const node_ptr&,const node_ptr&,NodePtrCompare)
+ //! Additional note: the inserted node is splayed
+ template<class NodePtrCompare>
+ static node_ptr insert_equal_upper_bound
+ (const node_ptr & header, const node_ptr & new_node, NodePtrCompare comp)
{
- //if(splay)
- //splay_down(uncast(header), key, comp);
- node_ptr y = tree_algorithms::lower_bound(header, key, comp);
- if(splay)
- splay_up(y, uncast(header));
- return y;
+ splay_down(header, new_node, comp);
+ return bstree_algo::insert_equal_upper_bound(header, new_node, comp);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is greater
- //! than "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- template<class KeyType, class KeyNodePtrCompare>
- static node_ptr upper_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp, bool splay = true)
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal_lower_bound(const node_ptr&,const node_ptr&,NodePtrCompare)
+ //! Additional note: the inserted node is splayed
+ template<class NodePtrCompare>
+ static node_ptr insert_equal_lower_bound
+ (const node_ptr & header, const node_ptr & new_node, NodePtrCompare comp)
{
- //if(splay)
- //splay_down(uncast(header), key, comp);
- node_ptr y = tree_algorithms::upper_bound(header, key, comp);
- if(splay)
- splay_up(y, uncast(header));
- return y;
+ splay_down(header, new_node, comp);
+ return bstree_algo::insert_equal_lower_bound(header, new_node, comp);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs. "hint" is node from
- //! the "header"'s tree.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree, using "hint" as a hint to
- //! where it will be inserted. If "hint" is the upper_bound
- //! the insertion takes constant time (two comparisons in the worst case).
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if new_node is inserted immediately before "hint".
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_equal(const node_ptr&,const node_ptr&,const node_ptr&,NodePtrCompare)
+ //! Additional note: the inserted node is splayed
template<class NodePtrCompare>
static node_ptr insert_equal
(const node_ptr & header, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp)
{
splay_down(header, new_node, comp);
- return tree_algorithms::insert_equal(header, hint, new_node, comp);
+ return bstree_algo::insert_equal(header, hint, new_node, comp);
}
-
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "pos" must be a valid iterator or header (end) node.
- //! "pos" must be an iterator pointing to the successor to "new_node"
- //! once inserted according to the order of already inserted nodes. This function does not
- //! check "pos" and this precondition must be guaranteed by the caller.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "pos" is not the successor of the newly inserted "new_node"
- //! tree invariants might be broken.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_before(const node_ptr&,const node_ptr&,const node_ptr&)
+ //! Additional note: the inserted node is splayed
static node_ptr insert_before
(const node_ptr & header, const node_ptr & pos, const node_ptr & new_node)
{
- tree_algorithms::insert_before(header, pos, new_node);
+ bstree_algo::insert_before(header, pos, new_node);
splay_up(new_node, header);
return new_node;
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "new_node" must be, according to the used ordering no less than the
- //! greatest inserted key.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "new_node" is less than the greatest inserted key
- //! tree invariants are broken. This function is slightly faster than
- //! using "insert_before".
+ //! @copydoc ::boost::intrusive::bstree_algorithms::push_back(const node_ptr&,const node_ptr&)
+ //! Additional note: the inserted node is splayed
static void push_back(const node_ptr & header, const node_ptr & new_node)
{
- tree_algorithms::push_back(header, new_node);
+ bstree_algo::push_back(header, new_node);
splay_up(new_node, header);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! "new_node" must be, according to the used ordering, no greater than the
- //! lowest inserted key.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before "pos".
- //!
- //! <b>Complexity</b>: Constant-time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: If "new_node" is greater than the lowest inserted key
- //! tree invariants are broken. This function is slightly faster than
- //! using "insert_before".
+ //! @copydoc ::boost::intrusive::bstree_algorithms::push_front(const node_ptr&,const node_ptr&)
+ //! Additional note: the inserted node is splayed
static void push_front(const node_ptr & header, const node_ptr & new_node)
{
- tree_algorithms::push_front(header, new_node);
+ bstree_algo::push_front(header, new_node);
splay_up(new_node, header);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before the upper bound
- //! according to "comp".
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- template<class NodePtrCompare>
- static node_ptr insert_equal_upper_bound
- (const node_ptr & header, const node_ptr & new_node, NodePtrCompare comp)
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_check(const const_node_ptr&,const KeyType&,KeyNodePtrCompare,insert_commit_data&)
+ //! Additional note: nodes with the given key are splayed
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, bool> insert_unique_check
+ (const node_ptr & header, const KeyType &key
+ ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
{
- splay_down(header, new_node, comp);
- return tree_algorithms::insert_equal_upper_bound(header, new_node, comp);
+ splay_down(header, key, comp);
+ return bstree_algo::insert_unique_check(header, key, comp, commit_data);
}
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! NodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. NodePtrCompare compares two node_ptrs.
- //!
- //! <b>Effects</b>: Inserts new_node into the tree before the lower bound
- //! according to "comp".
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- template<class NodePtrCompare>
- static node_ptr insert_equal_lower_bound
- (const node_ptr & header, const node_ptr & new_node, NodePtrCompare comp)
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_check(const const_node_ptr&,const node_ptr&,const KeyType&,KeyNodePtrCompare,insert_commit_data&)
+ //! Additional note: nodes with the given key are splayed
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::pair<node_ptr, bool> insert_unique_check
+ (const node_ptr & header, const node_ptr &hint, const KeyType &key
+ ,KeyNodePtrCompare comp, insert_commit_data &commit_data)
{
- splay_down(header, new_node, comp);
- return tree_algorithms::insert_equal_lower_bound(header, new_node, comp);
+ splay_down(header, key, comp);
+ return bstree_algo::insert_unique_check(header, hint, key, comp, commit_data);
}
- //! <b>Requires</b>: "cloner" must be a function
- //! object taking a node_ptr and returning a new cloned node of it. "disposer" must
- //! take a node_ptr and shouldn't throw.
- //!
- //! <b>Effects</b>: First empties target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! Then, duplicates the entire tree pointed by "source_header" cloning each
- //! source node with <tt>node_ptr Cloner::operator()(const node_ptr &)</tt> to obtain
- //! the nodes of the target tree. If "cloner" throws, the cloned target nodes
- //! are disposed using <tt>void disposer(const node_ptr &)</tt>.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
- template <class Cloner, class Disposer>
- static void clone
- (const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer)
- { tree_algorithms::clone(source_header, target_header, cloner, disposer); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::insert_unique_commit(const node_ptr&,const node_ptr&,const insert_commit_data&)
+ static void insert_unique_commit
+ (const node_ptr & header, const node_ptr & new_value, const insert_commit_data &commit_data);
- // delete node | complexity : constant | exception : nothrow
- static void erase(const node_ptr & header, const node_ptr & z, bool splay = true)
- {
-// node_base* n = t->right;
-// if( t->left != node_ptr() ){
-// node_base* l = t->previous();
-// splay_up( l , t );
-// n = t->left;
-// n->right = t->right;
-// if( n->right != node_ptr() )
-// n->right->parent = n;
-// }
-//
-// if( n != node_ptr() )
-// n->parent = t->parent;
-//
-// if( t->parent->left == t )
-// t->parent->left = n;
-// else // must be ( t->parent->right == t )
-// t->parent->right = n;
-//
-// if( data_->parent == t )
-// data_->parent = find_leftmost();
- //posibility 1
- if(splay && NodeTraits::get_left(z)){
- splay_up(prev_node(z), header);
- }
- /*
- //possibility 2
- if(splay && NodeTraits::get_left(z) != node_ptr() ){
- node_ptr l = NodeTraits::get_left(z);
- splay_up(l, header);
- }*//*
- if(splay && NodeTraits::get_left(z) != node_ptr() ){
- node_ptr l = prev_node(z);
- splay_up_impl(l, z);
- }*/
- /*
- //possibility 4
- if(splay){
- splay_up(z, header);
- }*/
+ //! @copydoc ::boost::intrusive::bstree_algorithms::is_header
+ static bool is_header(const const_node_ptr & p);
- //if(splay)
- //splay_up(z, header);
- tree_algorithms::erase(header, z);
- }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::rebalance
+ static void rebalance(const node_ptr & header);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::rebalance_subtree
+ static node_ptr rebalance_subtree(const node_ptr & old_root);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
// bottom-up splay, use data_ as parent for n | complexity : logarithmic | exception : nothrow
static void splay_up(const node_ptr & node, const node_ptr & header)
+ { priv_splay_up<true>(node, header); }
+
+ // top-down splay | complexity : logarithmic | exception : strong, note A
+ template<class KeyType, class KeyNodePtrCompare>
+ static node_ptr splay_down(const node_ptr & header, const KeyType &key, KeyNodePtrCompare comp, bool *pfound = 0)
+ { return priv_splay_down<true>(header, key, comp, pfound); }
+
+ private:
+
+ /// @cond
+
+ // bottom-up splay, use data_ as parent for n | complexity : logarithmic | exception : nothrow
+ template<bool SimpleSplay>
+ static void priv_splay_up(const node_ptr & node, const node_ptr & header)
{
// If (node == header) do a splay for the right most node instead
// this is to boost performance of equal_range/count on equivalent containers in the case
@@ -772,20 +529,19 @@ class splaytree_algorithms
rotate(p);
rotate(n);
}
- else{
+ else {
// zig-zag
rotate(n);
- rotate(n);
+ if(!SimpleSplay){
+ rotate(n);
+ }
}
}
}
- // top-down splay | complexity : logarithmic | exception : strong, note A
- template<class KeyType, class KeyNodePtrCompare>
- static node_ptr splay_down(const node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
+ template<bool SimpleSplay, class KeyType, class KeyNodePtrCompare>
+ static node_ptr priv_splay_down(const node_ptr & header, const KeyType &key, KeyNodePtrCompare comp, bool *pfound = 0)
{
- if(!NodeTraits::get_parent(header))
- return header;
//Most splay tree implementations use a dummy/null node to implement.
//this function. This has some problems for a generic library like Intrusive:
//
@@ -796,151 +552,87 @@ class splaytree_algorithms
//are not changed when splaying (because the invariants of the tree don't
//change) We can back up them, use the header as the null node and
//reassign old values after the function has been completed.
- node_ptr t = NodeTraits::get_parent(header);
- //Check if tree has a single node
- if(!NodeTraits::get_left(t) && !NodeTraits::get_right(t))
- return t;
- //Backup leftmost/rightmost
- node_ptr leftmost (NodeTraits::get_left(header));
- node_ptr rightmost(NodeTraits::get_right(header));
- {
- //Anti-exception rollback, recovers the original header node if an exception is thrown.
- detail::splaydown_rollback<NodeTraits> rollback(&t, header, leftmost, rightmost);
- node_ptr null_node = header;
- node_ptr l = null_node;
- node_ptr r = null_node;
+ node_ptr const old_root = NodeTraits::get_parent(header);
+ node_ptr const leftmost = NodeTraits::get_left(header);
+ node_ptr const rightmost = NodeTraits::get_right(header);
+ if(leftmost == rightmost){ //Empty or unique node
+ if(pfound){
+ *pfound = old_root && !comp(key, old_root) && !comp(old_root, key);
+ }
+ return old_root ? old_root : header;
+ }
+ else{
+ //Initialize "null node" (the header in our case)
+ NodeTraits::set_left (header, node_ptr());
+ NodeTraits::set_right(header, node_ptr());
+ //Class that will backup leftmost/rightmost from header, commit the assemble(),
+ //and will restore leftmost/rightmost to header even if "comp" throws
+ detail::splaydown_assemble_and_fix_header<NodeTraits> commit(old_root, header, leftmost, rightmost);
+ bool found = false;
for( ;; ){
- if(comp(key, t)){
- if(NodeTraits::get_left(t) == node_ptr() )
+ if(comp(key, commit.t_)){
+ node_ptr const t_left = NodeTraits::get_left(commit.t_);
+ if(!t_left)
break;
- if(comp(key, NodeTraits::get_left(t))){
- t = tree_algorithms::rotate_right(t);
-
- if(NodeTraits::get_left(t) == node_ptr())
+ if(comp(key, t_left)){
+ bstree_algo::rotate_right_no_parent_fix(commit.t_, t_left);
+ commit.t_ = t_left;
+ if( !NodeTraits::get_left(commit.t_) )
break;
- link_right(t, r);
- }
- else if(comp(NodeTraits::get_left(t), key)){
- link_right(t, r);
-
- if(NodeTraits::get_right(t) == node_ptr() )
- break;
- link_left(t, l);
+ link_right(commit.t_, commit.r_);
}
else{
- link_right(t, r);
+ link_right(commit.t_, commit.r_);
+ if(!SimpleSplay && comp(t_left, key)){
+ if( !NodeTraits::get_right(commit.t_) )
+ break;
+ link_left(commit.t_, commit.l_);
+ }
}
}
- else if(comp(t, key)){
- if(NodeTraits::get_right(t) == node_ptr() )
+ else if(comp(commit.t_, key)){
+ node_ptr const t_right = NodeTraits::get_right(commit.t_);
+ if(!t_right)
break;
- if(comp(NodeTraits::get_right(t), key)){
- t = tree_algorithms::rotate_left( t );
-
- if(NodeTraits::get_right(t) == node_ptr() )
+ if(comp(t_right, key)){
+ bstree_algo::rotate_left_no_parent_fix(commit.t_, t_right);
+ commit.t_ = t_right;
+ if( !NodeTraits::get_right(commit.t_) )
break;
- link_left(t, l);
- }
- else if(comp(key, NodeTraits::get_right(t))){
- link_left(t, l);
-
- if(NodeTraits::get_left(t) == node_ptr())
- break;
-
- link_right(t, r);
+ link_left(commit.t_, commit.l_);
}
else{
- link_left(t, l);
+ link_left(commit.t_, commit.l_);
+ if(!SimpleSplay && comp(key, t_right)){
+ if( !NodeTraits::get_left(commit.t_) )
+ break;
+ link_right(commit.t_, commit.r_);
+ }
}
}
else{
+ found = true;
break;
}
}
- assemble(t, l, r, null_node);
- rollback.release();
- }
-
- //Now recover the original header except for the
- //splayed root node.
- //t is the current root
- NodeTraits::set_parent(header, t);
- NodeTraits::set_parent(t, header);
- //Recover leftmost/rightmost pointers
- NodeTraits::set_left (header, leftmost);
- NodeTraits::set_right(header, rightmost);
- return t;
- }
-
- //! <b>Requires</b>: header must be the header of a tree.
- //!
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- static void rebalance(const node_ptr & header)
- { tree_algorithms::rebalance(header); }
-
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- static node_ptr rebalance_subtree(const node_ptr & old_root)
- { return tree_algorithms::rebalance_subtree(old_root); }
-
-
- //! <b>Requires</b>: "n" must be a node inserted in a tree.
- //!
- //! <b>Effects</b>: Returns a pointer to the header node of the tree.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr get_header(const node_ptr & n)
- { return tree_algorithms::get_header(n); }
-
- private:
-
- /// @cond
-
- // assemble the three sub-trees into new tree pointed to by t | complexity : constant | exception : nothrow
- static void assemble(const node_ptr &t, const node_ptr & l, const node_ptr & r, const const_node_ptr & null_node )
- {
- NodeTraits::set_right(l, NodeTraits::get_left(t));
- NodeTraits::set_left(r, NodeTraits::get_right(t));
-
- if(NodeTraits::get_right(l) != node_ptr()){
- NodeTraits::set_parent(NodeTraits::get_right(l), l);
- }
-
- if(NodeTraits::get_left(r) != node_ptr()){
- NodeTraits::set_parent(NodeTraits::get_left(r), r);
- }
-
- NodeTraits::set_left (t, NodeTraits::get_right(null_node));
- NodeTraits::set_right(t, NodeTraits::get_left(null_node));
-
- if( NodeTraits::get_left(t) != node_ptr() ){
- NodeTraits::set_parent(NodeTraits::get_left(t), t);
- }
-
- if( NodeTraits::get_right(t) ){
- NodeTraits::set_parent(NodeTraits::get_right(t), t);
+ //commit.~splaydown_assemble_and_fix_header<NodeTraits>() will first
+ //"assemble()" + link the new root & recover header's leftmost & rightmost
+ if(pfound){
+ *pfound = found;
+ }
+ return commit.t_;
}
}
// break link to left child node and attach it to left tree pointed to by l | complexity : constant | exception : nothrow
static void link_left(node_ptr & t, node_ptr & l)
{
+ //procedure link_left;
+ // t, l, right(l) := right(t), t, t
+ //end link_left
NodeTraits::set_right(l, t);
NodeTraits::set_parent(t, l);
l = t;
@@ -950,6 +642,9 @@ class splaytree_algorithms
// break link to right child node and attach it to right tree pointed to by r | complexity : constant | exception : nothrow
static void link_right(node_ptr & t, node_ptr & r)
{
+ //procedure link_right;
+ // t, r, left(r) := left(t), t, t
+ //end link_right;
NodeTraits::set_left(r, t);
NodeTraits::set_parent(t, r);
r = t;
@@ -959,21 +654,24 @@ class splaytree_algorithms
// rotate n with its parent | complexity : constant | exception : nothrow
static void rotate(const node_ptr & n)
{
+ //procedure rotate_left;
+ // t, right(t), left(right(t)) := right(t), left(right(t)), t
+ //end rotate_left;
node_ptr p = NodeTraits::get_parent(n);
node_ptr g = NodeTraits::get_parent(p);
//Test if g is header before breaking tree
//invariants that would make is_header invalid
- bool g_is_header = is_header(g);
+ bool g_is_header = bstree_algo::is_header(g);
if(NodeTraits::get_left(p) == n){
NodeTraits::set_left(p, NodeTraits::get_right(n));
- if(NodeTraits::get_left(p) != node_ptr())
+ if(NodeTraits::get_left(p))
NodeTraits::set_parent(NodeTraits::get_left(p), p);
NodeTraits::set_right(n, p);
}
else{ // must be ( p->right == n )
NodeTraits::set_right(p, NodeTraits::get_left(n));
- if(NodeTraits::get_right(p) != node_ptr())
+ if(NodeTraits::get_right(p))
NodeTraits::set_parent(NodeTraits::get_right(p), p);
NodeTraits::set_left(n, p);
}
@@ -1000,6 +698,16 @@ class splaytree_algorithms
/// @endcond
};
+/// @cond
+
+template<class NodeTraits>
+struct get_algo<SplayTreeAlgorithms, NodeTraits>
+{
+ typedef splaytree_algorithms<NodeTraits> type;
+};
+
+/// @endcond
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/treap.hpp b/3party/boost/boost/intrusive/treap.hpp
index 53eb2f345a..f414cf7203 100644
--- a/3party/boost/boost/intrusive/treap.hpp
+++ b/3party/boost/boost/intrusive/treap.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2008-2012
+// (C) Copyright Ion Gaztanaga 2008-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +13,7 @@
#define BOOST_INTRUSIVE_TREAP_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <algorithm>
#include <cstddef>
#include <functional>
@@ -21,12 +22,11 @@
#include <boost/intrusive/detail/assert.hpp>
#include <boost/static_assert.hpp>
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/bs_set_hook.hpp>
+#include <boost/intrusive/bstree.hpp>
#include <boost/intrusive/detail/tree_node.hpp>
#include <boost/intrusive/detail/ebo_functor_holder.hpp>
#include <boost/intrusive/pointer_traits.hpp>
-#include <boost/intrusive/detail/clear_on_destructor_base.hpp>
#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/options.hpp>
@@ -41,28 +41,16 @@ namespace intrusive {
/// @cond
-template <class ValueTraits, class Compare, class PrioCompare, class SizeType, bool ConstantTimeSize>
-struct treap_setopt
+struct treap_defaults
{
- typedef ValueTraits value_traits;
- typedef Compare compare;
- typedef PrioCompare priority_compare;
- typedef SizeType size_type;
- static const bool constant_time_size = ConstantTimeSize;
+ typedef detail::default_bstree_hook proto_value_traits;
+ static const bool constant_time_size = true;
+ typedef std::size_t size_type;
+ typedef void compare;
+ typedef void priority;
+ typedef void header_holder_type;
};
-template <class T>
-struct treap_set_defaults
- : pack_options
- < none
- , base_hook<detail::default_bs_set_hook>
- , constant_time_size<true>
- , size_type<std::size_t>
- , compare<std::less<T> >
- , priority<boost::intrusive::priority_compare<T> >
- >::type
-{};
-
/// @endcond
//! The class template treap is an intrusive treap container that
@@ -81,151 +69,78 @@ struct treap_set_defaults
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class VoidOrKeyComp, class VoidOrPrioComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class treap_impl
- : private detail::clear_on_destructor_base<treap_impl<Config> >
+ /// @cond
+ : public bstree_impl<ValueTraits, VoidOrKeyComp, SizeType, ConstantTimeSize, BsTreeAlgorithms, HeaderHolder>
+ , public detail::ebo_functor_holder
+ < typename get_prio
+ < VoidOrPrioComp
+ , typename bstree_impl
+ <ValueTraits, VoidOrKeyComp, SizeType, ConstantTimeSize, BsTreeAlgorithms, HeaderHolder>::value_type>::type
+ >
+ /// @endcond
{
- template<class C> friend class detail::clear_on_destructor_base;
public:
- typedef typename Config::value_traits value_traits;
+ typedef ValueTraits value_traits;
/// @cond
- static const bool external_value_traits =
- detail::external_value_traits_bool_is_true<value_traits>::value;
- typedef typename detail::eval_if_c
- < external_value_traits
- , detail::eval_value_traits<value_traits>
- , detail::identity<value_traits>
- >::type real_value_traits;
+ typedef bstree_impl< ValueTraits, VoidOrKeyComp, SizeType
+ , ConstantTimeSize, BsTreeAlgorithms
+ , HeaderHolder> tree_type;
+ typedef tree_type implementation_defined;
+ typedef get_prio
+ < VoidOrPrioComp
+ , typename tree_type::value_type> get_prio_type;
+
+ typedef detail::ebo_functor_holder
+ <typename get_prio_type::type> prio_base;
+
/// @endcond
- typedef typename real_value_traits::pointer pointer;
- typedef typename real_value_traits::const_pointer const_pointer;
- typedef typename pointer_traits<pointer>::element_type value_type;
- typedef typename pointer_traits<pointer>::reference reference;
- typedef typename pointer_traits<const_pointer>::reference const_reference;
- typedef typename pointer_traits<pointer>::difference_type difference_type;
- typedef value_type key_type;
- typedef typename Config::size_type size_type;
- typedef typename Config::compare value_compare;
- typedef typename Config::priority_compare priority_compare;
- typedef value_compare key_compare;
- typedef tree_iterator<treap_impl, false> iterator;
- typedef tree_iterator<treap_impl, true> const_iterator;
- typedef boost::intrusive::detail::reverse_iterator<iterator> reverse_iterator;
- typedef boost::intrusive::detail::reverse_iterator<const_iterator>const_reverse_iterator;
- typedef typename real_value_traits::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename pointer_traits
- <pointer>::template rebind_pointer
- <node>::type node_ptr;
- typedef typename pointer_traits
- <pointer>::template rebind_pointer
- <const node>::type const_node_ptr;
- typedef treap_algorithms<node_traits> node_algorithms;
-
- static const bool constant_time_size = Config::constant_time_size;
- static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
+
+ typedef typename implementation_defined::pointer pointer;
+ typedef typename implementation_defined::const_pointer const_pointer;
+ typedef typename implementation_defined::value_type value_type;
+ typedef typename implementation_defined::key_type key_type;
+ typedef typename implementation_defined::reference reference;
+ typedef typename implementation_defined::const_reference const_reference;
+ typedef typename implementation_defined::difference_type difference_type;
+ typedef typename implementation_defined::size_type size_type;
+ typedef typename implementation_defined::value_compare value_compare;
+ typedef typename implementation_defined::key_compare key_compare;
+ typedef typename implementation_defined::iterator iterator;
+ typedef typename implementation_defined::const_iterator const_iterator;
+ typedef typename implementation_defined::reverse_iterator reverse_iterator;
+ typedef typename implementation_defined::const_reverse_iterator const_reverse_iterator;
+ typedef typename implementation_defined::node_traits node_traits;
+ typedef typename implementation_defined::node node;
+ typedef typename implementation_defined::node_ptr node_ptr;
+ typedef typename implementation_defined::const_node_ptr const_node_ptr;
+ typedef BOOST_INTRUSIVE_IMPDEF(treap_algorithms<node_traits>) node_algorithms;
+ typedef BOOST_INTRUSIVE_IMPDEF(typename get_prio_type::type) priority_compare;
+
+ static const bool constant_time_size = implementation_defined::constant_time_size;
+ static const bool stateful_value_traits = implementation_defined::stateful_value_traits;
+ static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
/// @cond
private:
- typedef detail::size_holder<constant_time_size, size_type> size_traits;
//noncopyable
BOOST_MOVABLE_BUT_NOT_COPYABLE(treap_impl)
- enum { safemode_or_autounlink =
- (int)real_value_traits::link_mode == (int)auto_unlink ||
- (int)real_value_traits::link_mode == (int)safe_link };
-
- //Constant-time size is incompatible with auto-unlink hooks!
- BOOST_STATIC_ASSERT(!(constant_time_size && ((int)real_value_traits::link_mode == (int)auto_unlink)));
-
- struct header_plus_size : public size_traits
- { node header_; };
-
- struct node_plus_pred_t : public detail::ebo_functor_holder<value_compare>
- {
- node_plus_pred_t(const value_compare &comp, const priority_compare &p_comp)
- : detail::ebo_functor_holder<value_compare>(comp)
- , header_plus_priority_size_(p_comp)
- {}
- struct header_plus_priority_size
- : public detail::ebo_functor_holder<priority_compare>
- {
- header_plus_priority_size(const priority_compare &p_comp)
- : detail::ebo_functor_holder<priority_compare>(p_comp)
- {}
- header_plus_size header_plus_size_;
- } header_plus_priority_size_;
- };
-
- struct data_t : public treap_impl::value_traits
- {
- typedef typename treap_impl::value_traits value_traits;
- data_t(const value_compare & comp, const priority_compare &pcomp, const value_traits &val_traits)
- : value_traits(val_traits), node_plus_pred_(comp, pcomp)
- {}
- node_plus_pred_t node_plus_pred_;
- } data_;
-
- const value_compare &priv_comp() const
- { return data_.node_plus_pred_.get(); }
-
- value_compare &priv_comp()
- { return data_.node_plus_pred_.get(); }
-
const priority_compare &priv_pcomp() const
- { return data_.node_plus_pred_.header_plus_priority_size_.get(); }
+ { return static_cast<const prio_base&>(*this).get(); }
priority_compare &priv_pcomp()
- { return data_.node_plus_pred_.header_plus_priority_size_.get(); }
-
- const value_traits &priv_value_traits() const
- { return data_; }
-
- value_traits &priv_value_traits()
- { return data_; }
-
- node_ptr priv_header_ptr()
- { return pointer_traits<node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_priority_size_.header_plus_size_.header_); }
-
- const_node_ptr priv_header_ptr() const
- { return pointer_traits<const_node_ptr>::pointer_to(data_.node_plus_pred_.header_plus_priority_size_.header_plus_size_.header_); }
-
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
-
- size_traits &priv_size_traits()
- { return data_.node_plus_pred_.header_plus_priority_size_.header_plus_size_; }
-
- const size_traits &priv_size_traits() const
- { return data_.node_plus_pred_.header_plus_priority_size_.header_plus_size_; }
-
- const real_value_traits &get_real_value_traits(detail::bool_<false>) const
- { return data_; }
-
- const real_value_traits &get_real_value_traits(detail::bool_<true>) const
- { return data_.get_value_traits(*this); }
-
- real_value_traits &get_real_value_traits(detail::bool_<false>)
- { return data_; }
-
- real_value_traits &get_real_value_traits(detail::bool_<true>)
- { return data_.get_value_traits(*this); }
+ { return static_cast<prio_base&>(*this).get(); }
/// @endcond
public:
-
- const real_value_traits &get_real_value_traits() const
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
- real_value_traits &get_real_value_traits()
- { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
-
typedef typename node_algorithms::insert_commit_data insert_commit_data;
- //! <b>Effects</b>: Constructs an empty treap.
+ //! <b>Effects</b>: Constructs an empty container.
//!
//! <b>Complexity</b>: Constant.
//!
@@ -235,16 +150,13 @@ class treap_impl
explicit treap_impl( const value_compare &cmp = value_compare()
, const priority_compare &pcmp = priority_compare()
, const value_traits &v_traits = value_traits())
- : data_(cmp, pcmp, v_traits)
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- }
+ : tree_type(cmp, v_traits), prio_base(pcmp)
+ {}
//! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
//! cmp must be a comparison function that induces a strict weak ordering.
//!
- //! <b>Effects</b>: Constructs an empty treap and inserts elements from
+ //! <b>Effects</b>: Constructs an empty container and inserts elements from
//! [b, e).
//!
//! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
@@ -259,92 +171,46 @@ class treap_impl
, const value_compare &cmp = value_compare()
, const priority_compare &pcmp = priority_compare()
, const value_traits &v_traits = value_traits())
- : data_(cmp, pcmp, v_traits)
+ : tree_type(cmp, v_traits), prio_base(pcmp)
{
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
if(unique)
this->insert_unique(b, e);
else
this->insert_equal(b, e);
}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&)
treap_impl(BOOST_RV_REF(treap_impl) x)
- : data_( ::boost::move(x.priv_comp())
- , ::boost::move(x.priv_pcomp())
- , ::boost::move(x.priv_value_traits()))
- {
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(size_type(0));
- this->swap(x);
- }
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
+ , prio_base(::boost::move(x.priv_pcomp()))
+ {}
- //! <b>Effects</b>: to-do
- //!
+ //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&)
treap_impl& operator=(BOOST_RV_REF(treap_impl) x)
{ this->swap(x); return *this; }
- //! <b>Effects</b>: Detaches all elements from this. The objects in the set
- //! are not deleted (i.e. no destructors are called), but the nodes according to
- //! the value_traits template parameter are reinitialized and thus can be reused.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this
- //! if constant-time size option is disabled. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~treap_impl()
- {}
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::~bstree()
+ ~treap_impl();
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return iterator (node_traits::get_left(this->priv_header_ptr()), this); }
+ //! @copydoc ::boost::intrusive::bstree::begin()
+ iterator begin();
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return this->cbegin(); }
+ //! @copydoc ::boost::intrusive::bstree::begin()const
+ const_iterator begin() const;
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return const_iterator (node_traits::get_left(this->priv_header_ptr()), this); }
+ //! @copydoc ::boost::intrusive::bstree::cbegin()const
+ const_iterator cbegin() const;
- //! <b>Effects</b>: Returns an iterator pointing to the end of the treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return iterator (this->priv_header_ptr(), this); }
+ //! @copydoc ::boost::intrusive::bstree::end()
+ iterator end();
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return this->cend(); }
-
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return const_iterator (uncast(this->priv_header_ptr()), this); }
+ //! @copydoc ::boost::intrusive::bstree::end()const
+ const_iterator end() const;
+ //! @copydoc ::boost::intrusive::bstree::cend()const
+ const_iterator cend() const;
+ #endif
//! <b>Effects</b>: Returns an iterator pointing to the highest priority object of the treap.
//!
@@ -352,7 +218,7 @@ class treap_impl
//!
//! <b>Throws</b>: Nothing.
iterator top()
- { return this->empty() ? this->end() : iterator (node_traits::get_parent(this->priv_header_ptr()), this); }
+ { return this->tree_type::root(); }
//! <b>Effects</b>: Returns a const_iterator pointing to the highest priority object of the treap..
//!
@@ -368,61 +234,27 @@ class treap_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator ctop() const
- { return this->empty() ? this->cend() : const_iterator (node_traits::get_parent(this->priv_header_ptr()), this); }
+ { return this->tree_type::root(); }
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return reverse_iterator(this->end()); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::rbegin()
+ reverse_iterator rbegin();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator(this->end()); }
+ //! @copydoc ::boost::intrusive::bstree::rbegin()const
+ const_reverse_iterator rbegin() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return const_reverse_iterator(this->end()); }
+ //! @copydoc ::boost::intrusive::bstree::crbegin()const
+ const_reverse_iterator crbegin() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return reverse_iterator(this->begin()); }
+ //! @copydoc ::boost::intrusive::bstree::rend()
+ reverse_iterator rend();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return const_reverse_iterator(this->begin()); }
+ //! @copydoc ::boost::intrusive::bstree::rend()const
+ const_reverse_iterator rend() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return const_reverse_iterator(this->begin()); }
+ //! @copydoc ::boost::intrusive::bstree::crend()const
+ const_reverse_iterator crend() const;
+ #endif
//! <b>Effects</b>: Returns a reverse_iterator pointing to the highest priority object of the
//! reversed treap.
@@ -451,59 +283,33 @@ class treap_impl
const_reverse_iterator crtop() const
{ return const_reverse_iterator(this->top()); }
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of treap.
- //!
- //! <b>Effects</b>: Returns a const reference to the treap associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static treap_impl &container_from_end_iterator(iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(iterator)
+ static treap_impl &container_from_end_iterator(iterator end_iterator);
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of treap.
- //!
- //! <b>Effects</b>: Returns a const reference to the treap associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const treap_impl &container_from_end_iterator(const_iterator end_iterator)
- { return priv_container_from_end_iterator(end_iterator); }
+ //! @copydoc ::boost::intrusive::bstree::container_from_end_iterator(const_iterator)
+ static const treap_impl &container_from_end_iterator(const_iterator end_iterator);
- //! <b>Precondition</b>: it must be a valid iterator
- //! of treap.
- //!
- //! <b>Effects</b>: Returns a const reference to the treap associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static treap_impl &container_from_iterator(iterator it)
- { return priv_container_from_iterator(it); }
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(iterator)
+ static treap_impl &container_from_iterator(iterator it);
- //! <b>Precondition</b>: it must be a valid end const_iterator
- //! of treap.
- //!
- //! <b>Effects</b>: Returns a const reference to the treap associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const treap_impl &container_from_iterator(const_iterator it)
- { return priv_container_from_iterator(it); }
+ //! @copydoc ::boost::intrusive::bstree::container_from_iterator(const_iterator)
+ static const treap_impl &container_from_iterator(const_iterator it);
- //! <b>Effects</b>: Returns the value_compare object used by the treap.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return this->priv_comp(); }
+ //! @copydoc ::boost::intrusive::bstree::key_comp()const
+ key_compare key_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::value_comp()const
+ value_compare value_comp() const;
+
+ //! @copydoc ::boost::intrusive::bstree::empty()const
+ bool empty() const;
+
+ //! @copydoc ::boost::intrusive::bstree::size()const
+ size_type size() const;
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
- //! <b>Effects</b>: Returns the priority_compare object used by the treap.
+ //! <b>Effects</b>: Returns the priority_compare object used by the container.
//!
//! <b>Complexity</b>: Constant.
//!
@@ -511,29 +317,6 @@ class treap_impl
priority_compare priority_comp() const
{ return this->priv_pcomp(); }
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return node_algorithms::unique(this->priv_header_ptr()); }
-
- //! <b>Effects</b>: Returns the number of elements stored in the treap.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this
- //! if constant-time size option is disabled. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- {
- if(constant_time_size)
- return this->priv_size_traits().get_size();
- else{
- return (size_type)node_algorithms::size(this->priv_header_ptr());
- }
- }
-
//! <b>Effects</b>: Swaps the contents of two treaps.
//!
//! <b>Complexity</b>: Constant.
@@ -541,22 +324,36 @@ class treap_impl
//! <b>Throws</b>: If the comparison functor's swap call throws.
void swap(treap_impl& other)
{
+ tree_type::swap(other);
//This can throw
using std::swap;
- swap(priv_comp(), priv_comp());
- swap(priv_pcomp(), priv_pcomp());
- //These can't throw
- node_algorithms::swap_tree(this->priv_header_ptr(), other.priv_header_ptr());
- 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());
- other.priv_size_traits().set_size(backup);
- }
+ swap(this->priv_pcomp(), other.priv_pcomp());
+ }
+
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
+ //! Cloner should yield to nodes equivalent to the original nodes.
+ //!
+ //! <b>Effects</b>: Erases all the elements from *this
+ //! calling Disposer::operator()(pointer), clones all the
+ //! elements from src calling Cloner::operator()(const_reference )
+ //! and inserts them on *this. Copies the predicate from the source container.
+ //!
+ //! If cloner throws, all cloned elements are unlinked and disposed
+ //! calling Disposer::operator()(pointer).
+ //!
+ //! <b>Complexity</b>: Linear to erased plus inserted elements.
+ //!
+ //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
+ template <class Cloner, class Disposer>
+ void clone_from(const treap_impl &src, Cloner cloner, Disposer disposer)
+ {
+ tree_type::clone_from(src, cloner, disposer);
+ this->priv_pcomp() = src.priv_pcomp();
}
//! <b>Requires</b>: value must be an lvalue
//!
- //! <b>Effects</b>: Inserts value into the treap before the upper bound.
+ //! <b>Effects</b>: Inserts value into the container before the upper bound.
//!
//! <b>Complexity</b>: Average complexity for insert element is at
//! most logarithmic.
@@ -567,23 +364,23 @@ class treap_impl
//! No copy-constructors are called.
iterator insert_equal(reference value)
{
- detail::key_nodeptr_comp<value_compare, treap_impl>
- key_node_comp(priv_comp(), this);
- detail::key_nodeptr_comp<priority_compare, treap_impl>
- key_node_pcomp(priv_pcomp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ detail::key_nodeptr_comp<value_compare, value_traits>
+ key_node_comp(this->value_comp(), &this->get_value_traits());
+ detail::key_nodeptr_comp<priority_compare, value_traits>
+ key_node_pcomp(this->priv_pcomp(), &this->get_value_traits());
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
iterator ret(node_algorithms::insert_equal_upper_bound
- (this->priv_header_ptr(), to_insert, key_node_comp, key_node_pcomp), this);
- this->priv_size_traits().increment();
+ (this->tree_type::header_ptr(), to_insert, key_node_comp, key_node_pcomp), this->priv_value_traits_ptr());
+ this->tree_type::sz_traits().increment();
return ret;
}
//! <b>Requires</b>: value must be an lvalue, and "hint" must be
//! a valid iterator.
//!
- //! <b>Effects</b>: Inserts x into the treap, using "hint" as a hint to
+ //! <b>Effects</b>: Inserts x into the container, using "hint" as a hint to
//! where it will be inserted. If "hint" is the upper_bound
//! the insertion takes constant time (two comparisons in the worst case)
//!
@@ -596,23 +393,23 @@ class treap_impl
//! No copy-constructors are called.
iterator insert_equal(const_iterator hint, reference value)
{
- detail::key_nodeptr_comp<value_compare, treap_impl>
- key_node_comp(priv_comp(), this);
- detail::key_nodeptr_comp<priority_compare, treap_impl>
- key_node_pcomp(priv_pcomp(), this);
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ detail::key_nodeptr_comp<value_compare, value_traits>
+ key_node_comp(this->value_comp(), &this->get_value_traits());
+ detail::key_nodeptr_comp<priority_compare, value_traits>
+ key_node_pcomp(this->priv_pcomp(), &this->get_value_traits());
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
iterator ret (node_algorithms::insert_equal
- (this->priv_header_ptr(), hint.pointed_node(), to_insert, key_node_comp, key_node_pcomp), this);
- this->priv_size_traits().increment();
+ (this->tree_type::header_ptr(), hint.pointed_node(), to_insert, key_node_comp, key_node_pcomp), this->priv_value_traits_ptr());
+ this->tree_type::sz_traits().increment();
return ret;
}
//! <b>Requires</b>: Dereferencing iterator must yield an lvalue
//! of type value_type.
//!
- //! <b>Effects</b>: Inserts a each element of a range into the treap
+ //! <b>Effects</b>: Inserts a each element of a range into the container
//! before the upper bound of the key of each element.
//!
//! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
@@ -634,7 +431,7 @@ class treap_impl
//! <b>Requires</b>: value must be an lvalue
//!
- //! <b>Effects</b>: Inserts value into the treap if the value
+ //! <b>Effects</b>: Inserts value into the container if the value
//! is not already present.
//!
//! <b>Complexity</b>: Average complexity for insert element is at
@@ -648,7 +445,7 @@ class treap_impl
std::pair<iterator, bool> insert_unique(reference value)
{
insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(value, priv_comp(), priv_pcomp(), commit_data);
+ std::pair<iterator, bool> ret = insert_unique_check(value, this->value_comp(), this->priv_pcomp(), commit_data);
if(!ret.second)
return ret;
return std::pair<iterator, bool> (insert_unique_commit(value, commit_data), true);
@@ -657,7 +454,7 @@ class treap_impl
//! <b>Requires</b>: value must be an lvalue, and "hint" must be
//! a valid iterator
//!
- //! <b>Effects</b>: Tries to insert x into the treap, using "hint" as a hint
+ //! <b>Effects</b>: Tries to insert x into the container, using "hint" as a hint
//! to where it will be inserted.
//!
//! <b>Complexity</b>: Logarithmic in general, but it is amortized
@@ -672,7 +469,7 @@ class treap_impl
iterator insert_unique(const_iterator hint, reference value)
{
insert_commit_data commit_data;
- std::pair<iterator, bool> ret = insert_unique_check(hint, value, priv_comp(), priv_pcomp(), commit_data);
+ std::pair<iterator, bool> ret = insert_unique_check(hint, value, this->value_comp(), this->priv_pcomp(), commit_data);
if(!ret.second)
return ret.first;
return insert_unique_commit(value, commit_data);
@@ -681,7 +478,7 @@ class treap_impl
//! <b>Requires</b>: Dereferencing iterator must yield an lvalue
//! of type value_type.
//!
- //! <b>Effects</b>: Tries to insert each element of a range into the treap.
+ //! <b>Effects</b>: Tries to insert each element of a range into the container.
//!
//! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
//! size of the range. However, it is linear in N if the range is already sorted
@@ -744,14 +541,14 @@ class treap_impl
( const KeyType &key, KeyValueCompare key_value_comp
, KeyValuePrioCompare key_value_pcomp, insert_commit_data &commit_data)
{
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- comp(key_value_comp, this);
- detail::key_nodeptr_comp<KeyValuePrioCompare, treap_impl>
- pcomp(key_value_pcomp, this);
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ ocomp(key_value_comp, &this->get_value_traits());
+ detail::key_nodeptr_comp<KeyValuePrioCompare, value_traits>
+ pcomp(key_value_pcomp, &this->get_value_traits());
std::pair<node_ptr, bool> ret =
(node_algorithms::insert_unique_check
- (this->priv_header_ptr(), key, comp, pcomp, commit_data));
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
+ (this->tree_type::header_ptr(), key, ocomp, pcomp, commit_data));
+ return std::pair<iterator, bool>(iterator(ret.first, this->priv_value_traits_ptr()), ret.second);
}
//! <b>Requires</b>: key_value_comp must be a comparison function that induces
@@ -796,14 +593,14 @@ class treap_impl
, KeyValuePrioCompare key_value_pcomp
, insert_commit_data &commit_data)
{
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- comp(key_value_comp, this);
- detail::key_nodeptr_comp<KeyValuePrioCompare, treap_impl>
- pcomp(key_value_pcomp, this);
+ detail::key_nodeptr_comp<KeyValueCompare, value_traits>
+ ocomp(key_value_comp, &this->get_value_traits());
+ detail::key_nodeptr_comp<KeyValuePrioCompare, value_traits>
+ pcomp(key_value_pcomp, &this->get_value_traits());
std::pair<node_ptr, bool> ret =
(node_algorithms::insert_unique_check
- (this->priv_header_ptr(), hint.pointed_node(), key, comp, pcomp, commit_data));
- return std::pair<iterator, bool>(iterator(ret.first, this), ret.second);
+ (this->tree_type::header_ptr(), hint.pointed_node(), key, ocomp, pcomp, commit_data));
+ return std::pair<iterator, bool>(iterator(ret.first, this->priv_value_traits_ptr()), ret.second);
}
//! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
@@ -825,89 +622,89 @@ class treap_impl
//! erased between the "insert_check" and "insert_commit" calls.
iterator insert_unique_commit(reference value, const insert_commit_data &commit_data)
{
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- node_algorithms::insert_unique_commit(this->priv_header_ptr(), to_insert, commit_data);
- this->priv_size_traits().increment();
- return iterator(to_insert, this);
+ node_algorithms::insert_unique_commit(this->tree_type::header_ptr(), to_insert, commit_data);
+ this->tree_type::sz_traits().increment();
+ return iterator(to_insert, this->priv_value_traits_ptr());
}
//! <b>Requires</b>: value must be an lvalue, "pos" must be
//! a valid iterator (or end) and must be the succesor of value
//! once inserted according to the predicate
//!
- //! <b>Effects</b>: Inserts x into the treap before "pos".
+ //! <b>Effects</b>: Inserts x into the container before "pos".
//!
//! <b>Complexity</b>: Constant time.
//!
//! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
//!
//! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" treap ordering invariant will be broken.
+ //! the successor of "value" container ordering invariant will be broken.
//! This is a low-level function to be used only for performance reasons
//! by advanced users.
iterator insert_before(const_iterator pos, reference value)
{
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- detail::key_nodeptr_comp<priority_compare, treap_impl>
- pcomp(priv_pcomp(), this);
+ detail::key_nodeptr_comp<priority_compare, value_traits>
+ pcomp(this->priv_pcomp(), &this->get_value_traits());
iterator ret (node_algorithms::insert_before
- (this->priv_header_ptr(), pos.pointed_node(), to_insert, pcomp), this);
- this->priv_size_traits().increment();
+ (this->tree_type::header_ptr(), pos.pointed_node(), to_insert, pcomp), this->priv_value_traits_ptr());
+ this->tree_type::sz_traits().increment();
return ret;
}
//! <b>Requires</b>: value must be an lvalue, and it must be no less
//! than the greatest inserted key
//!
- //! <b>Effects</b>: Inserts x into the treap in the last position.
+ //! <b>Effects</b>: Inserts x into the container in the last position.
//!
//! <b>Complexity</b>: Constant time.
//!
//! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
//!
//! <b>Note</b>: This function does not check preconditions so if value is
- //! less than the greatest inserted key treap ordering invariant will be broken.
+ //! less than the greatest inserted key container ordering invariant will be broken.
//! This function is slightly more efficient than using "insert_before".
//! This is a low-level function to be used only for performance reasons
//! by advanced users.
void push_back(reference value)
{
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- detail::key_nodeptr_comp<priority_compare, treap_impl>
- pcomp(priv_pcomp(), this);
- node_algorithms::push_back(this->priv_header_ptr(), to_insert, pcomp);
- this->priv_size_traits().increment();
+ detail::key_nodeptr_comp<priority_compare, value_traits>
+ pcomp(this->priv_pcomp(), &this->get_value_traits());
+ node_algorithms::push_back(this->tree_type::header_ptr(), to_insert, pcomp);
+ this->tree_type::sz_traits().increment();
}
//! <b>Requires</b>: value must be an lvalue, and it must be no greater
//! than the minimum inserted key
//!
- //! <b>Effects</b>: Inserts x into the treap in the first position.
+ //! <b>Effects</b>: Inserts x into the container in the first position.
//!
//! <b>Complexity</b>: Constant time.
//!
//! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
//!
//! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than the minimum inserted key treap ordering invariant will be broken.
+ //! greater than the minimum inserted key container ordering invariant will be broken.
//! This function is slightly more efficient than using "insert_before".
//! This is a low-level function to be used only for performance reasons
//! by advanced users.
void push_front(reference value)
{
- node_ptr to_insert(get_real_value_traits().to_node_ptr(value));
+ node_ptr to_insert(this->get_value_traits().to_node_ptr(value));
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
- detail::key_nodeptr_comp<priority_compare, treap_impl>
- pcomp(priv_pcomp(), this);
- node_algorithms::push_front(this->priv_header_ptr(), to_insert, pcomp);
- this->priv_size_traits().increment();
+ detail::key_nodeptr_comp<priority_compare, value_traits>
+ pcomp(this->priv_pcomp(), &this->get_value_traits());
+ node_algorithms::push_front(this->tree_type::header_ptr(), to_insert, pcomp);
+ this->tree_type::sz_traits().increment();
}
//! <b>Effects</b>: Erases the element pointed to by pos.
@@ -925,10 +722,10 @@ class treap_impl
node_ptr to_erase(i.pointed_node());
if(safemode_or_autounlink)
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!node_algorithms::unique(to_erase));
- detail::key_nodeptr_comp<priority_compare, treap_impl>
- key_node_pcomp(priv_pcomp(), this);
- node_algorithms::erase(this->priv_header_ptr(), to_erase, key_node_pcomp);
- this->priv_size_traits().decrement();
+ detail::key_nodeptr_comp<priority_compare, value_traits>
+ key_node_pcomp(this->priv_pcomp(), &this->get_value_traits());
+ node_algorithms::erase(this->tree_type::header_ptr(), to_erase, key_node_pcomp);
+ this->tree_type::sz_traits().decrement();
if(safemode_or_autounlink)
node_algorithms::init(to_erase);
return ret.unconst();
@@ -957,7 +754,7 @@ class treap_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased elements. No destructors are called.
size_type erase(const_reference value)
- { return this->erase(value, priv_comp()); }
+ { return this->erase(value, this->value_comp()); }
//! <b>Effects</b>: Erases all the elements with the given key.
//! according to the comparison functor "comp".
@@ -1000,7 +797,7 @@ class treap_impl
{
node_ptr to_erase(i.pointed_node());
iterator ret(this->erase(i));
- disposer(get_real_value_traits().to_value_ptr(to_erase));
+ disposer(this->get_value_traits().to_value_ptr(to_erase));
return ret;
}
@@ -1087,15 +884,7 @@ class treap_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased elements. No destructors are called.
void clear()
- {
- if(safemode_or_autounlink){
- this->clear_and_dispose(detail::null_disposer());
- }
- else{
- node_algorithms::init_header(priv_header_ptr());
- this->priv_size_traits().set_size(0);
- }
- }
+ { tree_type::clear(); }
//! <b>Effects</b>: Erases all of the elements calling disposer(p) for
//! each node to be erased.
@@ -1109,484 +898,121 @@ class treap_impl
template<class Disposer>
void clear_and_dispose(Disposer disposer)
{
- node_algorithms::clear_and_dispose(this->priv_header_ptr()
- , detail::node_disposer<Disposer, treap_impl>(disposer, this));
- node_algorithms::init_header(this->priv_header_ptr());
- this->priv_size_traits().set_size(0);
+ node_algorithms::clear_and_dispose(this->tree_type::header_ptr()
+ , detail::node_disposer<Disposer, value_traits, TreapAlgorithms>(disposer, &this->get_value_traits()));
+ node_algorithms::init_header(this->tree_type::header_ptr());
+ this->tree_type::sz_traits().set_size(0);
}
- //! <b>Effects</b>: Returns the number of contained elements with the given value
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given value.
- //!
- //! <b>Throws</b>: Nothing.
- size_type count(const_reference value) const
- { return this->count(value, priv_comp()); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree::count(const_reference)const
+ size_type count(const_reference value) const;
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType &key, KeyValueCompare comp) const
- {
- std::pair<const_iterator, const_iterator> ret = this->equal_range(key, comp);
- return std::distance(ret.first, ret.second);
- }
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator lower_bound(const_reference value)
- { return this->lower_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator lower_bound(const_reference value) const
- { return this->lower_bound(value, priv_comp()); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
+
+ //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::lower_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator upper_bound(const_reference value)
- { return this->upper_bound(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- return iterator(node_algorithms::upper_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator upper_bound(const_reference value) const
- { return this->upper_bound(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k according to comp or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- return const_iterator(node_algorithms::upper_bound
- (this->priv_header_ptr(), key, key_node_comp), this);
- }
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- iterator find(const_reference value)
- { return this->find(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)
+ iterator find(const_reference value);
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- return iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this);
- }
+ iterator find(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator find(const_reference value) const
- { return this->find(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::find(const_reference)const
+ const_iterator find(const_reference value) const;
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- return const_iterator
- (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this);
- }
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return this->equal_range(value, priv_comp()); }
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType &key, KeyValueCompare comp)
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range(const_reference value) const
- { return this->equal_range(value, priv_comp()); }
+ equal_range(const_reference value) const;
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
+ //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range(const KeyType &key, KeyValueCompare comp) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
- return std::pair<iterator, iterator>(iterator(ret.first, this), iterator(ret.second, this));
- }
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
- std::pair<const_iterator,const_iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); }
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)const
+ std::pair<const_iterator, const_iterator>
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ //! @copydoc ::boost::intrusive::bstree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator,const_iterator> bounded_range
- (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- {
- detail::key_nodeptr_comp<KeyValueCompare, treap_impl>
- key_node_comp(comp, this);
- std::pair<node_ptr, node_ptr> ret
- (node_algorithms::bounded_range
- (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed));
- return std::pair<const_iterator, const_iterator>(const_iterator(ret.first, this), const_iterator(ret.second, this));
- }
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
- template <class Cloner, class Disposer>
- void clone_from(const treap_impl &src, Cloner cloner, Disposer disposer)
- {
- this->clear_and_dispose(disposer);
- if(!src.empty()){
- detail::exception_disposer<treap_impl, Disposer>
- rollback(*this, disposer);
- node_algorithms::clone
- (src.priv_header_ptr()
- ,this->priv_header_ptr()
- ,detail::node_cloner<Cloner, treap_impl>(cloner, this)
- ,detail::node_disposer<Disposer, treap_impl>(disposer, this));
- this->priv_size_traits().set_size(src.priv_size_traits().get_size());
- this->priv_comp() = src.priv_comp();
- rollback.release();
- }
- }
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- //! <b>Effects</b>: Unlinks the leftmost node from the treap.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the treap and the treap can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the treap.
- pointer unlink_leftmost_without_rebalance()
- {
- node_ptr to_be_disposed(node_algorithms::unlink_leftmost_without_rebalance
- (this->priv_header_ptr()));
- if(!to_be_disposed)
- return 0;
- this->priv_size_traits().decrement();
- if(safemode_or_autounlink)//If this is commented does not work with normal_link
- node_algorithms::init(to_be_disposed);
- return get_real_value_traits().to_value_ptr(to_be_disposed);
- }
+ //! @copydoc ::boost::intrusive::bstree::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any treap.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! treap with with_this. The treap does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering and priority rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- {
- node_algorithms::replace_node( get_real_value_traits().to_node_ptr(*replace_this)
- , this->priv_header_ptr()
- , get_real_value_traits().to_node_ptr(with_this));
- if(safemode_or_autounlink)
- node_algorithms::init(replace_this.pointed_node());
- }
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(reference)
+ iterator iterator_to(reference value);
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return iterator (value_traits::to_node_ptr(value), 0);
- }
+ //! @copydoc ::boost::intrusive::bstree::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- {
- BOOST_STATIC_ASSERT((!stateful_value_traits));
- return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), 0);
- }
+ //! @copydoc ::boost::intrusive::bstree::init_node(reference)
+ static void init_node(reference value);
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return iterator (value_traits::to_node_ptr(value), this); }
+ //! @copydoc ::boost::intrusive::bstree::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
- //! <b>Requires</b>: value must be an lvalue and shall be in a set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), this); }
+ //! @copydoc ::boost::intrusive::bstree::replace_node
+ void replace_node(iterator replace_this, reference with_this);
- //! <b>Requires</b>: value shall not be in a treap.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { node_algorithms::init(value_traits::to_node_ptr(value)); }
+ //! @copydoc ::boost::intrusive::bstree::remove_node
+ void remove_node(reference value);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
/// @cond
private:
@@ -1605,197 +1031,66 @@ class treap_impl
return b.unconst();
}
/// @endcond
-
- private:
- static treap_impl &priv_container_from_end_iterator(const const_iterator &end_iterator)
- {
- header_plus_size *r = detail::parent_from_member<header_plus_size, node>
- ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), &header_plus_size::header_);
- typename node_plus_pred_t::header_plus_priority_size *n =
- detail::parent_from_member
- < typename node_plus_pred_t::header_plus_priority_size
- , header_plus_size>
- (r, &node_plus_pred_t::header_plus_priority_size::header_plus_size_);
- node_plus_pred_t *pn = detail::parent_from_member
- < node_plus_pred_t
- , typename node_plus_pred_t::header_plus_priority_size>
- (n, &node_plus_pred_t::header_plus_priority_size_);
- data_t *d = detail::parent_from_member<data_t, node_plus_pred_t>(pn, &data_t::node_plus_pred_);
- treap_impl *tr = detail::parent_from_member<treap_impl, data_t>(d, &treap_impl::data_);
- return *tr;
- }
-
- static treap_impl &priv_container_from_iterator(const const_iterator &it)
- { return priv_container_from_end_iterator(it.end_iterator_from_it()); }
};
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y)
-#else
-(const treap_impl<Config> &x, const treap_impl<Config> &y)
-#endif
-{ return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-bool operator==
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y)
-#else
-(const treap_impl<Config> &x, const treap_impl<Config> &y)
-#endif
-{
- typedef treap_impl<Config> tree_type;
- typedef typename tree_type::const_iterator const_iterator;
+bool operator< (const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y);
- if(tree_type::constant_time_size && x.size() != y.size()){
- return false;
- }
- const_iterator end1 = x.end();
- const_iterator i1 = x.begin();
- const_iterator i2 = y.begin();
- if(tree_type::constant_time_size){
- while (i1 != end1 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1;
- }
- else{
- const_iterator end2 = y.end();
- while (i1 != end1 && i2 != end2 && *i1 == *i2) {
- ++i1;
- ++i2;
- }
- return i1 == end1 && i2 == end2;
- }
-}
+template<class T, class ...Options>
+bool operator==(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y)
-#else
-(const treap_impl<Config> &x, const treap_impl<Config> &y)
-#endif
-{ return !(x == y); }
+bool operator!= (const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y)
-#else
-(const treap_impl<Config> &x, const treap_impl<Config> &y)
-#endif
-{ return y < x; }
+bool operator>(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y)
-#else
-(const treap_impl<Config> &x, const treap_impl<Config> &y)
-#endif
-{ return !(y < x); }
+bool operator<=(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y)
-#else
-(const treap_impl<Config> &x, const treap_impl<Config> &y)
-#endif
-{ return !(x < y); }
+bool operator>=(const treap_impl<T, Options...> &x, const treap_impl<T, Options...> &y);
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(treap_impl<T, Options...> &x, treap_impl<T, Options...> &y)
-#else
-(treap_impl<Config> &x, treap_impl<Config> &y)
-#endif
-{ x.swap(y); }
+void swap(treap_impl<T, Options...> &x, treap_impl<T, Options...> &y);
-/// @cond
-#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none
- >
-#else
+#endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+
+//! Helper metafunction to define a \c treap that yields to the same type when the
+//! same options (either explicitly or implicitly) are used.
+#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
+#else
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
-struct make_treap_opt
+struct make_treap
{
typedef typename pack_options
- < treap_set_defaults<T>,
+ < treap_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
>::type packed_options;
+
typedef typename detail::get_value_traits
- <T, typename packed_options::value_traits>::type value_traits;
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
- typedef treap_setopt
+ typedef treap_impl
< value_traits
, typename packed_options::compare
, typename packed_options::priority
, typename packed_options::size_type
, packed_options::constant_time_size
- > type;
-};
-/// @endcond
-
-//! Helper metafunction to define a \c treap that yields to the same type when the
-//! same options (either explicitly or implicitly) are used.
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class ...Options>
-#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
-#endif
-struct make_trie
-{
- /// @cond
- typedef treap_impl
- < typename make_treap_opt<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
- > implementation_defined;
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
@@ -1803,23 +1098,23 @@ struct make_trie
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class treap
- : public make_trie<T,
+ : public make_treap<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
>::type
{
- typedef typename make_trie
+ typedef typename make_treap
<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -1830,16 +1125,17 @@ class treap
typedef typename Base::value_compare value_compare;
typedef typename Base::priority_compare priority_compare;
typedef typename Base::value_traits value_traits;
- typedef typename Base::real_value_traits real_value_traits;
typedef typename Base::iterator iterator;
typedef typename Base::const_iterator const_iterator;
+ typedef typename Base::reverse_iterator reverse_iterator;
+ typedef typename Base::const_reverse_iterator const_reverse_iterator;
//Assert if passed value traits are compatible with the type
- BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- treap( const value_compare &cmp = value_compare()
- , const priority_compare &pcmp = priority_compare()
- , const value_traits &v_traits = value_traits())
+ explicit treap( const value_compare &cmp = value_compare()
+ , const priority_compare &pcmp = priority_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, pcmp, v_traits)
{}
@@ -1856,7 +1152,7 @@ class treap
{}
treap& operator=(BOOST_RV_REF(treap) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<treap&>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static treap &container_from_end_iterator(iterator end_iterator)
{ return static_cast<treap &>(Base::container_from_end_iterator(end_iterator)); }
@@ -1864,16 +1160,15 @@ class treap
static const treap &container_from_end_iterator(const_iterator end_iterator)
{ return static_cast<const treap &>(Base::container_from_end_iterator(end_iterator)); }
- static treap &container_from_it(iterator it)
+ static treap &container_from_iterator(iterator it)
{ return static_cast<treap &>(Base::container_from_iterator(it)); }
- static const treap &container_from_it(const_iterator it)
+ static const treap &container_from_iterator(const_iterator it)
{ return static_cast<const treap &>(Base::container_from_iterator(it)); }
};
#endif
-
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/treap_algorithms.hpp b/3party/boost/boost/intrusive/treap_algorithms.hpp
index e891ef9013..2b0704b377 100644
--- a/3party/boost/boost/intrusive/treap_algorithms.hpp
+++ b/3party/boost/boost/intrusive/treap_algorithms.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012.
+// (C) Copyright Ion Gaztanaga 2006-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -14,14 +14,14 @@
#define BOOST_INTRUSIVE_TREAP_ALGORITHMS_HPP
#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <cstddef>
-#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/detail/utilities.hpp>
-#include <boost/intrusive/detail/tree_algorithms.hpp>
+#include <boost/intrusive/bstree_algorithms.hpp>
#include <algorithm>
@@ -47,7 +47,7 @@ namespace intrusive {
//!
//! <b>Typedefs</b>:
//!
-//! <tt>node</tt>: The type of the node that forms the circular list
+//! <tt>node</tt>: The type of the node that forms the treap
//!
//! <tt>node_ptr</tt>: A pointer to a node
//!
@@ -68,6 +68,9 @@ namespace intrusive {
//! <tt>static void set_right(node_ptr n, node_ptr right);</tt>
template<class NodeTraits>
class treap_algorithms
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public bstree_algorithms<NodeTraits>
+ #endif
{
public:
typedef NodeTraits node_traits;
@@ -78,32 +81,10 @@ class treap_algorithms
/// @cond
private:
- class remove_on_destroy
- {
- remove_on_destroy(const remove_on_destroy&);
- remove_on_destroy& operator=(const remove_on_destroy&);
- public:
- remove_on_destroy(const node_ptr & header, const node_ptr & z)
- : header_(header), z_(z), remove_it_(true)
- {}
- ~remove_on_destroy()
- {
- if(remove_it_){
- tree_algorithms::erase(header_, z_);
- }
- }
-
- void release()
- { remove_it_ = false; }
-
- const node_ptr header_;
- const node_ptr z_;
- bool remove_it_;
- };
+ typedef bstree_algorithms<NodeTraits> bstree_algo;
class rerotate_on_destroy
{
- rerotate_on_destroy(const remove_on_destroy&);
rerotate_on_destroy& operator=(const rerotate_on_destroy&);
public:
@@ -129,38 +110,28 @@ class treap_algorithms
static void rotate_up_n(const node_ptr header, const node_ptr p, std::size_t n)
{
- for( node_ptr p_parent = NodeTraits::get_parent(p)
- ; n--
- ; p_parent = NodeTraits::get_parent(p)){
- //Check if left child
- if(p == NodeTraits::get_left(p_parent)){
- tree_algorithms::rotate_right(p_parent, header);
+ node_ptr p_parent(NodeTraits::get_parent(p));
+ node_ptr p_grandparent(NodeTraits::get_parent(p_parent));
+ while(n--){
+ if(p == NodeTraits::get_left(p_parent)){ //p is left child
+ bstree_algo::rotate_right(p_parent, p, p_grandparent, header);
}
- else{ //Right child
- tree_algorithms::rotate_left(p_parent, header);
+ else{ //p is right child
+ bstree_algo::rotate_left(p_parent, p, p_grandparent, header);
}
+ p_parent = p_grandparent;
+ p_grandparent = NodeTraits::get_parent(p_parent);
}
}
- typedef detail::tree_algorithms<NodeTraits> tree_algorithms;
-
- static node_ptr uncast(const const_node_ptr & ptr)
- { return pointer_traits<node_ptr>::const_cast_from(ptr); }
-
/// @endcond
public:
- static node_ptr begin_node(const const_node_ptr & header)
- { return tree_algorithms::begin_node(header); }
-
- static node_ptr end_node(const const_node_ptr & header)
- { return tree_algorithms::end_node(header); }
-
//! This type is the information that will be
//! filled by insert_unique_check
struct insert_commit_data
/// @cond
- : public tree_algorithms::insert_commit_data
+ : public bstree_algo::insert_commit_data
/// @endcond
{
/// @cond
@@ -168,360 +139,118 @@ class treap_algorithms
/// @endcond
};
- //! <b>Requires</b>: header1 and header2 must be the header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two trees. After the function header1 will contain
- //! links to the second tree and header2 will have links to the first tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static void swap_tree(const node_ptr & header1, const node_ptr & header2)
- { return tree_algorithms::swap_tree(header1, header2); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
- static void swap_nodes(const node_ptr & node1, const node_ptr & node2)
- {
- if(node1 == node2)
- return;
+ //! @copydoc ::boost::intrusive::bstree_algorithms::get_header(const const_node_ptr&)
+ static node_ptr get_header(const const_node_ptr & n);
- node_ptr header1(tree_algorithms::get_header(node1)), header2(tree_algorithms::get_header(node2));
- swap_nodes(node1, header1, node2, header2);
- }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::begin_node
+ static node_ptr begin_node(const const_node_ptr & header);
- //! <b>Requires</b>: node1 and node2 can't be header nodes
- //! of two trees with header header1 and header2.
- //!
- //! <b>Effects</b>: Swaps two nodes. After the function node1 will be inserted
- //! in the position node2 before the function. node2 will be inserted in the
- //! position node1 had before the function.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! node1 and node2 are not equivalent according to the ordering rules.
- //!
- //!Experimental function
- static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2)
- { tree_algorithms::swap_nodes(node1, header1, node2, header2); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::end_node
+ static node_ptr end_node(const const_node_ptr & header);
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing and comparison is needed.
- //!
- //!Experimental function
- static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node)
- {
- if(node_to_be_replaced == new_node)
- return;
- replace_node(node_to_be_replaced, tree_algorithms::get_header(node_to_be_replaced), new_node);
- }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_tree
+ static void swap_tree(const node_ptr & header1, const node_ptr & header2);
- //! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
- //! with header "header" and new_node must not be inserted in a tree.
- //!
- //! <b>Effects</b>: Replaces node_to_be_replaced in its position in the
- //! tree with new_node. The tree does not need to be rebalanced
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! new_node is not equivalent to node_to_be_replaced according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- //!
- //!Experimental function
- static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node)
- { tree_algorithms::replace_node(node_to_be_replaced, header, new_node); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&)
+ static void swap_nodes(const node_ptr & node1, const node_ptr & node2);
- //! <b>Requires</b>: node is a tree node but not the header.
- //!
- //! <b>Effects</b>: Unlinks the node and rebalances the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: If "pcomp" throws, strong guarantee
+ //! @copydoc ::boost::intrusive::bstree_algorithms::swap_nodes(const node_ptr&,const node_ptr&,const node_ptr&,const node_ptr&)
+ static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&)
+ static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::replace_node(const node_ptr&,const node_ptr&,const node_ptr&)
+ static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unlink(const node_ptr&)
template<class NodePtrPriorityCompare>
static void unlink(const node_ptr & node, NodePtrPriorityCompare pcomp)
{
node_ptr x = NodeTraits::get_parent(node);
if(x){
- while(!is_header(x))
+ while(!bstree_algo::is_header(x))
x = NodeTraits::get_parent(x);
erase(x, node, pcomp);
}
}
- //! <b>Requires</b>: header is the header of a tree.
- //!
- //! <b>Effects</b>: Unlinks the leftmost node from the tree, and
- //! updates the header link to the new leftmost node.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header)
- { return tree_algorithms::unlink_leftmost_without_rebalance(header); }
-
- //! <b>Requires</b>: node is a node of the tree or an node initialized
- //! by init(...).
- //!
- //! <b>Effects</b>: Returns true if the node is initialized by init().
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static bool unique(const const_node_ptr & node)
- { return tree_algorithms::unique(node); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unlink_leftmost_without_rebalance
+ static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header);
- //! <b>Requires</b>: node is a node of the tree but it's not the header.
- //!
- //! <b>Effects</b>: Returns the number of nodes of the subtree.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t count(const const_node_ptr & node)
- { return tree_algorithms::count(node); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::unique(const const_node_ptr&)
+ static bool unique(const const_node_ptr & node);
- //! <b>Requires</b>: header is the header node of the tree.
- //!
- //! <b>Effects</b>: Returns the number of nodes above the header.
- //!
- //! <b>Complexity</b>: Linear time.
- //!
- //! <b>Throws</b>: Nothing.
- static std::size_t size(const const_node_ptr & header)
- { return tree_algorithms::size(header); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::size(const const_node_ptr&)
+ static std::size_t size(const const_node_ptr & header);
- //! <b>Requires</b>: p is a node from the tree except the header.
- //!
- //! <b>Effects</b>: Returns the next node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr next_node(const node_ptr & p)
- { return tree_algorithms::next_node(p); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::next_node(const node_ptr&)
+ static node_ptr next_node(const node_ptr & node);
- //! <b>Requires</b>: p is a node from the tree except the leftmost node.
- //!
- //! <b>Effects</b>: Returns the previous node of the tree.
- //!
- //! <b>Complexity</b>: Average constant time.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr prev_node(const node_ptr & p)
- { return tree_algorithms::prev_node(p); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::prev_node(const node_ptr&)
+ static node_ptr prev_node(const node_ptr & node);
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: After the function unique(node) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init(const node_ptr & node)
- { tree_algorithms::init(node); }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::init(const node_ptr&)
+ static void init(const node_ptr & node);
- //! <b>Requires</b>: node must not be part of any tree.
- //!
- //! <b>Effects</b>: Initializes the header to represent an empty tree.
- //! unique(header) == true.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
- static void init_header(const node_ptr & header)
- {
- tree_algorithms::init_header(header);
- }
+ //! @copydoc ::boost::intrusive::bstree_algorithms::init_header(const node_ptr&)
+ static void init_header(const node_ptr & header);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
- //! <b>Requires</b>: header must be the header of a tree, z a node
- //! of that tree and z != header.
- //!
- //! <b>Effects</b>: Erases node "z" from the tree with header "header".
- //!
- //! <b>Complexity</b>: Amortized constant time.
- //!
- //! <b>Throws</b>: If "pcomp" throws, strong guarantee.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::erase(const node_ptr&,const node_ptr&)
template<class NodePtrPriorityCompare>
static node_ptr erase(const node_ptr & header, const node_ptr & z, NodePtrPriorityCompare pcomp)
{
rebalance_for_erasure(header, z, pcomp);
- tree_algorithms::erase(header, z);
+ bstree_algo::erase(header, z);
return z;
}
- //! <b>Requires</b>: "cloner" must be a function
- //! object taking a node_ptr and returning a new cloned node of it. "disposer" must
- //! take a node_ptr and shouldn't throw.
- //!
- //! <b>Effects</b>: First empties target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! Then, duplicates the entire tree pointed by "source_header" cloning each
- //! source node with <tt>node_ptr Cloner::operator()(const node_ptr &)</tt> to obtain
- //! the nodes of the target tree. If "cloner" throws, the cloned target nodes
- //! are disposed using <tt>void disposer(const node_ptr &)</tt>.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clone(const const_node_ptr&,const node_ptr&,Cloner,Disposer)
template <class Cloner, class Disposer>
static void clone
- (const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer)
- {
- tree_algorithms::clone(source_header, target_header, cloner, disposer);
- }
+ (const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer);
- //! <b>Requires</b>: "disposer" must be an object function
- //! taking a node_ptr parameter and shouldn't throw.
- //!
- //! <b>Effects</b>: Empties the target tree calling
- //! <tt>void disposer::operator()(const node_ptr &)</tt> for every node of the tree
- //! except the header.
- //!
- //! <b>Complexity</b>: Linear to the number of element of the source tree plus the.
- //! number of elements of tree target tree when calling this function.
- //!
- //! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::clear_and_dispose(const node_ptr&,Disposer)
template<class Disposer>
- static void clear_and_dispose(const node_ptr & header, Disposer disposer)
- { tree_algorithms::clear_and_dispose(header, disposer); }
+ static void clear_and_dispose(const node_ptr & header, Disposer disposer);
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is
- //! not less than "key" according to "comp" or "header" if that element does
- //! not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::lower_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr lower_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::lower_bound(header, key, comp); }
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the first element that is greater
- //! than "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::upper_bound(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr upper_bound
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::upper_bound(header, key, comp); }
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an node_ptr to the element that is equivalent to
- //! "key" according to "comp" or "header" if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::find(const const_node_ptr&, const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static node_ptr find
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::find(header, key, comp); }
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //!
- //! <b>Effects</b>: Returns an a pair of node_ptr delimiting a range containing
- //! all elements that are equivalent to "key" according to "comp" or an
- //! empty range that indicates the position where those elements would be
- //! if they there are no equivalent elements.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::equal_range(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> equal_range
- (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
- { return tree_algorithms::equal_range(header, key, comp); }
+ (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
- //! <b>Requires</b>: "header" must be the header node of a tree.
- //! KeyNodePtrCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
- //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
- //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ //! @copydoc ::boost::intrusive::bstree_algorithms::bounded_range(const const_node_ptr&,const KeyType&,const KeyType&,KeyNodePtrCompare,bool,bool)
template<class KeyType, class KeyNodePtrCompare>
static std::pair<node_ptr, node_ptr> bounded_range
(const const_node_ptr & header, const KeyType &lower_key, const KeyType &upper_key, KeyNodePtrCompare comp
- , bool left_closed, bool right_closed)
- { return tree_algorithms::bounded_range(header, lower_key, upper_key, comp, left_closed, right_closed); }
+ , bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::count(const const_node_ptr&,const KeyType&,KeyNodePtrCompare)
+ template<class KeyType, class KeyNodePtrCompare>
+ static std::size_t count(const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp);
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Requires</b>: "h" must be the header node of a tree.
//! NodePtrCompare is a function object that induces a strict weak
@@ -543,7 +272,7 @@ class treap_algorithms
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, NodePtrPriorityCompare pcomp)
{
insert_commit_data commit_data;
- tree_algorithms::insert_equal_upper_bound_check(h, new_node, comp, commit_data);
+ bstree_algo::insert_equal_upper_bound_check(h, new_node, comp, commit_data);
rebalance_check_and_commit(h, new_node, pcomp, commit_data);
return new_node;
}
@@ -568,7 +297,7 @@ class treap_algorithms
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, NodePtrPriorityCompare pcomp)
{
insert_commit_data commit_data;
- tree_algorithms::insert_equal_lower_bound_check(h, new_node, comp, commit_data);
+ bstree_algo::insert_equal_lower_bound_check(h, new_node, comp, commit_data);
rebalance_check_and_commit(h, new_node, pcomp, commit_data);
return new_node;
}
@@ -596,7 +325,7 @@ class treap_algorithms
(const node_ptr & h, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp, NodePtrPriorityCompare pcomp)
{
insert_commit_data commit_data;
- tree_algorithms::insert_equal_check(h, hint, new_node, comp, commit_data);
+ bstree_algo::insert_equal_check(h, hint, new_node, comp, commit_data);
rebalance_check_and_commit(h, new_node, pcomp, commit_data);
return new_node;
}
@@ -624,7 +353,7 @@ class treap_algorithms
(const node_ptr & header, const node_ptr & pos, const node_ptr & new_node, NodePtrPriorityCompare pcomp)
{
insert_commit_data commit_data;
- tree_algorithms::insert_before_check(header, pos, commit_data);
+ bstree_algo::insert_before_check(header, pos, commit_data);
rebalance_check_and_commit(header, new_node, pcomp, commit_data);
return new_node;
}
@@ -650,7 +379,7 @@ class treap_algorithms
static void push_back(const node_ptr & header, const node_ptr & new_node, NodePtrPriorityCompare pcomp)
{
insert_commit_data commit_data;
- tree_algorithms::push_back_check(header, commit_data);
+ bstree_algo::push_back_check(header, commit_data);
rebalance_check_and_commit(header, new_node, pcomp, commit_data);
}
@@ -675,7 +404,7 @@ class treap_algorithms
static void push_front(const node_ptr & header, const node_ptr & new_node, NodePtrPriorityCompare pcomp)
{
insert_commit_data commit_data;
- tree_algorithms::push_front_check(header, commit_data);
+ bstree_algo::push_front_check(header, commit_data);
rebalance_check_and_commit(header, new_node, pcomp, commit_data);
}
@@ -720,7 +449,7 @@ class treap_algorithms
,insert_commit_data &commit_data)
{
std::pair<node_ptr, bool> ret =
- tree_algorithms::insert_unique_check(header, key, comp, commit_data);
+ bstree_algo::insert_unique_check(header, key, comp, commit_data);
if(ret.second)
rebalance_after_insertion_check(header, commit_data.node, key, pcomp, commit_data.rotations);
return ret;
@@ -771,7 +500,7 @@ class treap_algorithms
,KeyNodePtrCompare comp, KeyNodePtrPrioCompare pcomp, insert_commit_data &commit_data)
{
std::pair<node_ptr, bool> ret =
- tree_algorithms::insert_unique_check(header, hint, key, comp, commit_data);
+ bstree_algo::insert_unique_check(header, hint, key, comp, commit_data);
if(ret.second)
rebalance_after_insertion_check(header, commit_data.node, key, pcomp, commit_data.rotations);
return ret;
@@ -797,35 +526,19 @@ class treap_algorithms
static void insert_unique_commit
(const node_ptr & header, const node_ptr & new_node, const insert_commit_data &commit_data)
{
- tree_algorithms::insert_unique_commit(header, new_node, commit_data);
- rebalance_after_insertion_commit(header, new_node, commit_data.rotations);
+ bstree_algo::insert_unique_commit(header, new_node, commit_data);
+ rotate_up_n(header, new_node, commit_data.rotations);
}
- //! <b>Requires</b>: "n" must be a node inserted in a tree.
- //!
- //! <b>Effects</b>: Returns a pointer to the header node of the tree.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: Nothing.
- static node_ptr get_header(const node_ptr & n)
- { return tree_algorithms::get_header(n); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::bstree_algorithms::is_header
+ static bool is_header(const const_node_ptr & p);
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
/// @cond
private:
- //! <b>Requires</b>: p is a node of a tree.
- //!
- //! <b>Effects</b>: Returns true if p is the header of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- static bool is_header(const const_node_ptr & p)
- {
- return tree_algorithms::is_header(p);
- }
-
template<class NodePtrPriorityCompare>
static void rebalance_for_erasure(const node_ptr & header, const node_ptr & z, NodePtrPriorityCompare pcomp)
{
@@ -835,11 +548,12 @@ class treap_algorithms
node_ptr z_left = NodeTraits::get_left(z);
node_ptr z_right = NodeTraits::get_right(z);
while(z_left || z_right){
+ const node_ptr z_parent(NodeTraits::get_parent(z));
if(!z_right || (z_left && pcomp(z_left, z_right))){
- tree_algorithms::rotate_right(z, header);
+ bstree_algo::rotate_right(z, z_left, z_parent, header);
}
else{
- tree_algorithms::rotate_left(z, header);
+ bstree_algo::rotate_left(z, z_right, z_parent, header);
}
++n;
z_left = NodeTraits::get_left(z);
@@ -854,11 +568,10 @@ class treap_algorithms
{
rebalance_after_insertion_check(h, commit_data.node, new_node, pcomp, commit_data.rotations);
//No-throw
- tree_algorithms::insert_unique_commit(h, new_node, commit_data);
- rebalance_after_insertion_commit(h, new_node, commit_data.rotations);
+ bstree_algo::insert_unique_commit(h, new_node, commit_data);
+ rotate_up_n(h, new_node, commit_data.rotations);
}
-
template<class Key, class KeyNodePriorityCompare>
static void rebalance_after_insertion_check
(const const_node_ptr &header, const const_node_ptr & up, const Key &k
@@ -875,22 +588,6 @@ class treap_algorithms
num_rotations = n;
}
- static void rebalance_after_insertion_commit(const node_ptr & header, const node_ptr & p, std::size_t n)
- {
- // Now execute n rotations
- for( node_ptr p_parent = NodeTraits::get_parent(p)
- ; n--
- ; p_parent = NodeTraits::get_parent(p)){
- //Check if left child
- if(p == NodeTraits::get_left(p_parent)){
- tree_algorithms::rotate_right(p_parent, header);
- }
- else{ //Right child
- tree_algorithms::rotate_left(p_parent, header);
- }
- }
- }
-
template<class NodePtrPriorityCompare>
static bool check_invariant(const const_node_ptr & header, NodePtrPriorityCompare pcomp)
{
@@ -911,6 +608,16 @@ class treap_algorithms
/// @endcond
};
+/// @cond
+
+template<class NodeTraits>
+struct get_algo<TreapAlgorithms, NodeTraits>
+{
+ typedef treap_algorithms<NodeTraits> type;
+};
+
+/// @endcond
+
} //namespace intrusive
} //namespace boost
diff --git a/3party/boost/boost/intrusive/treap_set.hpp b/3party/boost/boost/intrusive/treap_set.hpp
index cd1300a1a5..6d75578ab3 100644
--- a/3party/boost/boost/intrusive/treap_set.hpp
+++ b/3party/boost/boost/intrusive/treap_set.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2007-2012
+// (C) Copyright Ion Gaztanaga 2007-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -36,14 +36,16 @@ namespace intrusive {
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class VoidOrKeyComp, class VoidOrPrioComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class treap_set_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public treap_impl<ValueTraits, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder>
+#endif
{
/// @cond
- typedef treap_impl<Config> tree_type;
- //! This class is
- //! movable
+ public:
+ typedef treap_impl<ValueTraits, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> tree_type;
BOOST_MOVABLE_BUT_NOT_COPYABLE(treap_set_impl)
typedef tree_type implementation_defined;
@@ -72,12 +74,7 @@ class treap_set_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- static const bool constant_time_size = Config::constant_time_size;
-
- /// @cond
- private:
- tree_type tree_;
- /// @endcond
+ static const bool constant_time_size = implementation_defined::constant_time_size;
public:
//! <b>Effects</b>: Constructs an empty treap_set.
@@ -90,7 +87,7 @@ class treap_set_impl
explicit treap_set_impl( const value_compare &cmp = value_compare()
, const priority_compare &pcmp = priority_compare()
, const value_traits &v_traits = value_traits())
- : tree_(cmp, pcmp, v_traits)
+ : tree_type(cmp, pcmp, v_traits)
{}
//! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
@@ -110,1255 +107,349 @@ class treap_set_impl
, const value_compare &cmp = value_compare()
, const priority_compare &pcmp = priority_compare()
, const value_traits &v_traits = value_traits())
- : tree_(true, b, e, cmp, pcmp, v_traits)
+ : tree_type(true, b, e, cmp, pcmp, v_traits)
{}
//! <b>Effects</b>: to-do
//!
treap_set_impl(BOOST_RV_REF(treap_set_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
//! <b>Effects</b>: to-do
//!
treap_set_impl& operator=(BOOST_RV_REF(treap_set_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
+ { return static_cast<treap_set_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
- //! <b>Effects</b>: Detaches all elements from this. The objects in the treap_set
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~treap_set_impl()
- {}
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::treap::~treap()
+ ~treap_set_impl();
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
+ //! @copydoc ::boost::intrusive::treap::begin()
+ iterator begin();
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
+ //! @copydoc ::boost::intrusive::treap::begin()const
+ const_iterator begin() const;
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
+ //! @copydoc ::boost::intrusive::treap::cbegin()const
+ const_iterator cbegin() const;
- //! <b>Effects</b>: Returns an iterator pointing to the end of the treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
+ //! @copydoc ::boost::intrusive::treap::end()
+ iterator end();
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
+ //! @copydoc ::boost::intrusive::treap::end()const
+ const_iterator end() const;
- //! <b>Effects</b>: Returns an iterator pointing to the highest priority object of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator top()
- { return tree_.top(); }
+ //! @copydoc ::boost::intrusive::treap::cend()const
+ const_iterator cend() const;
- //! <b>Effects</b>: Returns a const_iterator pointing to the highest priority object of the tree..
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator top() const
- { return this->ctop(); }
+ //! @copydoc ::boost::intrusive::treap::rbegin()
+ reverse_iterator rbegin();
- //! <b>Effects</b>: Returns a const_iterator pointing to the highest priority object of the tree..
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator ctop() const
- { return tree_.ctop(); }
+ //! @copydoc ::boost::intrusive::treap::rbegin()const
+ const_reverse_iterator rbegin() const;
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
+ //! @copydoc ::boost::intrusive::treap::crbegin()const
+ const_reverse_iterator crbegin() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
+ //! @copydoc ::boost::intrusive::treap::rend()
+ reverse_iterator rend();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
+ //! @copydoc ::boost::intrusive::treap::rend()const
+ const_reverse_iterator rend() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
+ //! @copydoc ::boost::intrusive::treap::crend()const
+ const_reverse_iterator crend() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
+ //! @copydoc ::boost::intrusive::treap::container_from_end_iterator(iterator)
+ static treap_set_impl &container_from_end_iterator(iterator end_iterator);
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
+ //! @copydoc ::boost::intrusive::treap::container_from_end_iterator(const_iterator)
+ static const treap_set_impl &container_from_end_iterator(const_iterator end_iterator);
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
+ //! @copydoc ::boost::intrusive::treap::container_from_iterator(iterator)
+ static treap_set_impl &container_from_iterator(iterator it);
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the highest priority object of the
- //! reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rtop()
- { return tree_.rtop(); }
+ //! @copydoc ::boost::intrusive::treap::container_from_iterator(const_iterator)
+ static const treap_set_impl &container_from_iterator(const_iterator it);
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the highest priority objec
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rtop() const
- { return tree_.crtop(); }
+ //! @copydoc ::boost::intrusive::treap::key_comp()const
+ key_compare key_comp() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the highest priority object
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crtop() const
- { return tree_.crtop(); }
+ //! @copydoc ::boost::intrusive::treap::value_comp()const
+ value_compare value_comp() const;
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of treap_set.
- //!
- //! <b>Effects</b>: Returns a const reference to the treap_set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static treap_set_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<treap_set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &treap_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of treap_set.
- //!
- //! <b>Effects</b>: Returns a const reference to the treap_set associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const treap_set_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<treap_set_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &treap_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of set.
- //!
- //! <b>Effects</b>: Returns a reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static treap_set_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<treap_set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &treap_set_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of set.
- //!
- //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Logarithmic.
- static const treap_set_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<treap_set_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &treap_set_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
+ //! @copydoc ::boost::intrusive::treap::empty()const
+ bool empty() const;
- //! <b>Effects</b>: Returns the value_compare object used by the treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
+ //! @copydoc ::boost::intrusive::treap::size()const
+ size_type size() const;
- //! <b>Effects</b>: Returns the priority_compare object used by the treap_set.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If priority_compare copy-constructor throws.
- priority_compare priority_comp() const
- { return tree_.priority_comp(); }
+ //! @copydoc ::boost::intrusive::treap::swap
+ void swap(treap_set_impl& other);
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
+ //! @copydoc ::boost::intrusive::treap::clone_from
+ template <class Cloner, class Disposer>
+ void clone_from(const treap_set_impl &src, Cloner cloner, Disposer disposer);
- //! <b>Effects</b>: Returns the number of elements stored in the treap_set.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
+ //! @copydoc ::boost::intrusive::treap::top()
+ iterator top();
- //! <b>Effects</b>: Swaps the contents of two sets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(treap_set_impl& other)
- { tree_.swap(other.tree_); }
+ //! @copydoc ::boost::intrusive::treap::top()const
+ const_iterator top() const;
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
- template <class Cloner, class Disposer>
- void clone_from(const treap_set_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
+ //! @copydoc ::boost::intrusive::treap::ctop()const
+ const_iterator ctop() const;
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Tries to inserts value into the treap_set.
- //!
- //! <b>Returns</b>: If the value
- //! is not already present inserts it and returns a pair containing the
- //! iterator to the new value and true. If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare or priority_compare ordering function throw.
- //! Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::treap::rtop()
+ reverse_iterator rtop();
+
+ //! @copydoc ::boost::intrusive::treap::rtop()const
+ const_reverse_iterator rtop() const;
+
+ //! @copydoc ::boost::intrusive::treap::crtop()const
+ const_reverse_iterator crtop() const;
+
+ //! @copydoc ::boost::intrusive::treap::crtop() const
+ priority_compare priority_comp() const;
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::treap::insert_unique(reference)
std::pair<iterator, bool> insert(reference value)
- { return tree_.insert_unique(value); }
+ { return tree_type::insert_unique(value); }
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Tries to to insert x into the treap_set, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the
- //! new element was inserted into the treap_set.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If the internal value_compare or priority_compare ordering
- //! functions throw. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::treap::insert_unique(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_unique(hint, value); }
+ { return tree_type::insert_unique(hint, value); }
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare.
- //! key_value_pcomp must be a comparison function that induces
- //! the same strict weak ordering as priority_compare. The difference is that
- //! key_value_pcomp and key_value_comp compare an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the treap_set, using
- //! a user provided key instead of the value itself.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Average complexity is at most logarithmic.
- //!
- //! <b>Throws</b>: If key_value_comp or key_value_pcomp ordering function throw.
- //! Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! node that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that
- //! part to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This gives a total
- //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the treap_set.
- template<class KeyType, class KeyValueCompare, class KeyValuePriorityCompare>
+ //! @copydoc ::boost::intrusive::treap::insert_unique_check(const KeyType&,KeyValueCompare,KeyValuePrioCompare,insert_commit_data&)
+ template<class KeyType, class KeyValueCompare, class KeyValuePrioCompare>
std::pair<iterator, bool> insert_check
- ( const KeyType &key, KeyValueCompare key_value_comp, KeyValuePriorityCompare key_value_pcomp
+ ( const KeyType &key, KeyValueCompare key_value_comp, KeyValuePrioCompare key_value_pcomp
, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(key, key_value_comp, key_value_pcomp, commit_data); }
+ { return tree_type::insert_unique_check(key, key_value_comp, key_value_pcomp, commit_data); }
- //! <b>Requires</b>: key_value_comp must be a comparison function that induces
- //! the same strict weak ordering as value_compare.
- //! key_value_pcomp must be a comparison function that induces
- //! the same strict weak ordering as priority_compare. The difference is that
- //! key_value_pcomp and key_value_comp compare an arbitrary key with the contained values.
- //!
- //! <b>Effects</b>: Checks if a value can be inserted in the treap_set, using
- //! a user provided key instead of the value itself, using "hint"
- //! as a hint to where it will be inserted.
- //!
- //! <b>Returns</b>: If there is an equivalent value
- //! returns a pair containing an iterator to the already present value
- //! and false. If the value can be inserted returns true in the returned
- //! pair boolean and fills "commit_data" that is meant to be used with
- //! the "insert_commit" function.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it's amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If key_value_comp or key_value_pcomp ordering function throw.
- //! Strong guarantee.
- //!
- //! <b>Notes</b>: This function is used to improve performance when constructing
- //! a value_type is expensive: if there is an equivalent value
- //! the constructed object must be discarded. Many times, the part of the
- //! constructing that is used to impose the order is much cheaper to construct
- //! than the value_type and this function offers the possibility to use that key
- //! to check if the insertion will be successful.
- //!
- //! If the check is successful, the user can construct the value_type and use
- //! "insert_commit" to insert the object in constant-time. This can give a total
- //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
- //!
- //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
- //! objects are inserted or erased from the treap_set.
- template<class KeyType, class KeyValueCompare, class KeyValuePriorityCompare>
+ //! @copydoc ::boost::intrusive::treap::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,KeyValuePrioCompare,insert_commit_data&)
+ template<class KeyType, class KeyValueCompare, class KeyValuePrioCompare>
std::pair<iterator, bool> insert_check
( const_iterator hint, const KeyType &key
- , KeyValueCompare key_value_comp, KeyValuePriorityCompare key_value_pcomp
+ , KeyValueCompare key_value_comp, KeyValuePrioCompare key_value_pcomp
, insert_commit_data &commit_data)
- { return tree_.insert_unique_check(hint, key, key_value_comp, key_value_pcomp, commit_data); }
+ { return tree_type::insert_unique_check(hint, key, key_value_comp, key_value_pcomp, commit_data); }
- //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
- //! must have been obtained from a previous call to "insert_check".
- //! No objects should have been inserted or erased from the treap_set between
- //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
- //!
- //! <b>Effects</b>: Inserts the value in the treap_set using the information obtained
- //! from the "commit_data" that a previous "insert_check" filled.
- //!
- //! <b>Returns</b>: An iterator to the newly inserted object.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function has only sense if a "insert_check" has been
- //! previously executed to fill "commit_data". No value should be inserted or
- //! erased between the "insert_check" and "insert_commit" calls.
- iterator insert_commit(reference value, const insert_commit_data &commit_data)
- { return tree_.insert_unique_commit(value, commit_data); }
-
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the treap_set.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If the internal value_compare or priority_compare ordering function
- //! throw. Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::treap::insert_unique(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_unique(b, e); }
+ { tree_type::insert_unique(b, e); }
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate. "value" must not be equal to any
- //! inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the treap before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" treap ordering invariant will be broken.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- { return tree_.insert_before(pos, value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be greater than
- //! any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the treap in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than the greatest inserted key treap ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- { tree_.push_back(value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be less
- //! than any inserted key according to the predicate.
- //!
- //! <b>Effects</b>: Inserts x into the treap in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than the minimum inserted key treap ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- { tree_.push_front(value); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
+ //! @copydoc ::boost::intrusive::treap::insert_unique_commit
+ iterator insert_commit(reference value, const insert_commit_data &commit_data)
+ { return tree_type::insert_unique_commit(value, commit_data); }
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { return tree_.erase(b, e); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::treap::insert_before
+ iterator insert_before(const_iterator pos, reference value);
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size()) + this->count(value)).
- //!
- //! <b>Throws</b>: If internal value_compare or priority_compare
- //! ordering functions throw. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
+ //! @copydoc ::boost::intrusive::treap::push_back
+ void push_back(reference value);
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp or internal priority_compare
- //! ordering functions throw. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::treap::push_front
+ void push_front(reference value);
+
+ //! @copydoc ::boost::intrusive::treap::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::treap::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::treap::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::treap::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)). Basic guarantee.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp or internal priority_compare ordering functions throw.
- //! Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::treap::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::treap::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
+ void clear_and_dispose(Disposer disposer);
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::treap::count(const_reference)const
size_type count(const_reference value) const
- { return tree_.find(value) != end(); }
+ { return static_cast<size_type>(this->tree_type::find(value) != this->tree_type::cend()); }
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ //! @copydoc ::boost::intrusive::treap::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
size_type count(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp) != end(); }
+ { return static_cast<size_type>(this->tree_type::find(key, comp) != this->tree_type::cend()); }
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound(const_reference value) const
- { return tree_.lower_bound(value); }
+ //! @copydoc ::boost::intrusive::treap::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound(key, comp); }
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
+ //! @copydoc ::boost::intrusive::treap::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound(const_reference value) const
- { return tree_.upper_bound(value); }
+ //! @copydoc ::boost::intrusive::treap::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound(key, comp); }
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
+ //! @copydoc ::boost::intrusive::treap::find(const_reference)
+ iterator find(const_reference value);
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
+ iterator find(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find(const_reference value) const
- { return tree_.find(value); }
+ //! @copydoc ::boost::intrusive::treap::find(const_reference)const
+ const_iterator find(const_reference value) const;
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp); }
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)
std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
+ { return this->tree_type::lower_bound_range(value); }
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
+ { return this->tree_type::lower_bound_range(key, comp); }
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
equal_range(const_reference value) const
- { return tree_.equal_range(value); }
+ { return this->tree_type::lower_bound_range(value); }
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
equal_range(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range(key, comp); }
+ { return this->tree_type::lower_bound_range(key, comp); }
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::treap::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ //! @copydoc ::boost::intrusive::treap::bounded_range(const_reference,const_reference,bool,bool)const
std::pair<const_iterator, const_iterator>
- bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
- template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
- //! <b>Requires</b>: value must be an lvalue and shall be in a treap_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the treap_set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
+ //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- //! <b>Requires</b>: value must be an lvalue and shall be in a treap_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! treap_set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
+ //! @copydoc ::boost::intrusive::treap::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- //! <b>Requires</b>: value must be an lvalue and shall be in a treap_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the treap_set
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
+ //! @copydoc ::boost::intrusive::treap::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
- //! <b>Requires</b>: value must be an lvalue and shall be in a treap_set of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! treap_set that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
+ //! @copydoc ::boost::intrusive::treap::iterator_to(reference)
+ iterator iterator_to(reference value);
- //! <b>Requires</b>: value shall not be in a treap_set/treap_multiset.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
+ //! @copydoc ::boost::intrusive::treap::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
-
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- void rebalance()
- { tree_.rebalance(); }
+ //! @copydoc ::boost::intrusive::treap::init_node(reference)
+ static void init_node(reference value);
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- iterator rebalance_subtree(iterator root)
- { return tree_.rebalance_subtree(root); }
+ //! @copydoc ::boost::intrusive::treap::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
- //! <b>Returns</b>: The balance factor (alpha) used in this tree
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- float balance_factor() const
- { return tree_.balance_factor(); }
+ //! @copydoc ::boost::intrusive::treap::replace_node
+ void replace_node(iterator replace_this, reference with_this);
- //! <b>Requires</b>: new_alpha must be a value between 0.5 and 1.0
- //!
- //! <b>Effects</b>: Establishes a new balance factor (alpha) and rebalances
- //! the tree if the new balance factor is stricter (less) than the old factor.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- void balance_factor(float new_alpha)
- { tree_.balance_factor(new_alpha); }
+ //! @copydoc ::boost::intrusive::treap::remove_node
+ void remove_node(reference value);
- /// @cond
- friend bool operator==(const treap_set_impl &x, const treap_set_impl &y)
- { return x.tree_ == y.tree_; }
-
- friend bool operator<(const treap_set_impl &x, const treap_set_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_set_impl<T, Options...> &x, const treap_set_impl<T, Options...> &y)
-#else
-(const treap_set_impl<Config> &x, const treap_set_impl<Config> &y)
-#endif
-{ return !(x == y); }
-
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_set_impl<T, Options...> &x, const treap_set_impl<T, Options...> &y)
-#else
-(const treap_set_impl<Config> &x, const treap_set_impl<Config> &y)
-#endif
-{ return y < x; }
-
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_set_impl<T, Options...> &x, const treap_set_impl<T, Options...> &y)
-#else
-(const treap_set_impl<Config> &x, const treap_set_impl<Config> &y)
-#endif
-{ return !(y < x); }
-
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_set_impl<T, Options...> &x, const treap_set_impl<T, Options...> &y)
-#else
-(const treap_set_impl<Config> &x, const treap_set_impl<Config> &y)
-#endif
-{ return !(x < y); }
-
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(treap_set_impl<T, Options...> &x, treap_set_impl<T, Options...> &y)
-#else
-(treap_set_impl<Config> &x, treap_set_impl<Config> &y)
-#endif
-{ x.swap(y); }
//! Helper metafunction to define a \c treap_set that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_treap_set
{
- /// @cond
- typedef treap_set_impl
- < typename make_treap_opt<T,
+ typedef typename pack_options
+ < treap_defaults,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
- >::type
- > implementation_defined;
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
+ typedef treap_set_impl
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::priority
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
@@ -1366,14 +457,14 @@ struct make_treap_set
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class treap_set
: public make_treap_set<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -1382,7 +473,7 @@ class treap_set
typedef typename make_treap_set
<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -1399,9 +490,9 @@ class treap_set
//Assert if passed value traits are compatible with the type
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- treap_set( const value_compare &cmp = value_compare()
- , const priority_compare &pcmp = priority_compare()
- , const value_traits &v_traits = value_traits())
+ explicit treap_set( const value_compare &cmp = value_compare()
+ , const priority_compare &pcmp = priority_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, pcmp, v_traits)
{}
@@ -1418,7 +509,7 @@ class treap_set
{}
treap_set& operator=(BOOST_RV_REF(treap_set) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<treap_set &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static treap_set &container_from_end_iterator(iterator end_iterator)
{ return static_cast<treap_set &>(Base::container_from_end_iterator(end_iterator)); }
@@ -1449,14 +540,17 @@ class treap_set
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class VoidOrKeyComp, class VoidOrPrioComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
#endif
class treap_multiset_impl
+#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ : public treap_impl<ValueTraits, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder>
+#endif
{
/// @cond
- typedef treap_impl<Config> tree_type;
-
+ typedef treap_impl<ValueTraits, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> tree_type;
BOOST_MOVABLE_BUT_NOT_COPYABLE(treap_multiset_impl)
+
typedef tree_type implementation_defined;
/// @endcond
@@ -1483,12 +577,7 @@ class treap_multiset_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- static const bool constant_time_size = Config::constant_time_size;
-
- /// @cond
- private:
- tree_type tree_;
- /// @endcond
+ static const bool constant_time_size = implementation_defined::constant_time_size;
public:
//! <b>Effects</b>: Constructs an empty treap_multiset.
@@ -1497,11 +586,11 @@ class treap_multiset_impl
//!
//! <b>Throws</b>: If value_traits::node_traits::node
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor of the value_compare/priority_compare objects throw.
- explicit treap_multiset_impl( const value_compare &cmp = value_compare()
- , const priority_compare &pcmp = priority_compare()
- , const value_traits &v_traits = value_traits())
- : tree_(cmp, pcmp, v_traits)
+ //! or the copy constructor of the value_compare object throws.
+ explicit treap_multiset_impl( const value_compare &cmp = value_compare()
+ , const priority_compare &pcmp = priority_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(cmp, pcmp, v_traits)
{}
//! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
@@ -1511,1161 +600,326 @@ class treap_multiset_impl
//! [b, e).
//!
//! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
- //! comp and otherwise N * log N, where N is the distance between first and last
+ //! comp and otherwise N * log N, where N is std::distance(last, first).
//!
//! <b>Throws</b>: If value_traits::node_traits::node
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
- //! or the copy constructor/operator() of the value_compare/priority_compare objects throw.
+ //! or the copy constructor/operator() of the value_compare object throws.
template<class Iterator>
treap_multiset_impl( Iterator b, Iterator e
- , const value_compare &cmp = value_compare()
- , const priority_compare &pcmp = priority_compare()
- , const value_traits &v_traits = value_traits())
- : tree_(false, b, e, cmp, pcmp, v_traits)
+ , const value_compare &cmp = value_compare()
+ , const priority_compare &pcmp = priority_compare()
+ , const value_traits &v_traits = value_traits())
+ : tree_type(false, b, e, cmp, pcmp, v_traits)
{}
//! <b>Effects</b>: to-do
//!
treap_multiset_impl(BOOST_RV_REF(treap_multiset_impl) x)
- : tree_(::boost::move(x.tree_))
+ : tree_type(::boost::move(static_cast<tree_type&>(x)))
{}
//! <b>Effects</b>: to-do
//!
treap_multiset_impl& operator=(BOOST_RV_REF(treap_multiset_impl) x)
- { tree_ = ::boost::move(x.tree_); return *this; }
+ { return static_cast<treap_multiset_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); }
- //! <b>Effects</b>: Detaches all elements from this. The objects in the treap_multiset
- //! are not deleted (i.e. no destructors are called).
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- ~treap_multiset_impl()
- {}
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::treap::~treap()
+ ~treap_multiset_impl();
- //! <b>Effects</b>: Returns an iterator pointing to the beginning of the treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator begin()
- { return tree_.begin(); }
+ //! @copydoc ::boost::intrusive::treap::begin()
+ iterator begin();
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator begin() const
- { return tree_.begin(); }
+ //! @copydoc ::boost::intrusive::treap::begin()const
+ const_iterator begin() const;
- //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cbegin() const
- { return tree_.cbegin(); }
+ //! @copydoc ::boost::intrusive::treap::cbegin()const
+ const_iterator cbegin() const;
- //! <b>Effects</b>: Returns an iterator pointing to the end of the treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator end()
- { return tree_.end(); }
+ //! @copydoc ::boost::intrusive::treap::end()
+ iterator end();
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator end() const
- { return tree_.end(); }
+ //! @copydoc ::boost::intrusive::treap::end()const
+ const_iterator end() const;
- //! <b>Effects</b>: Returns a const_iterator pointing to the end of the treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator cend() const
- { return tree_.cend(); }
+ //! @copydoc ::boost::intrusive::treap::cend()const
+ const_iterator cend() const;
- //! <b>Effects</b>: Returns an iterator pointing to the highest priority object of the tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator top()
- { return tree_.top(); }
+ //! @copydoc ::boost::intrusive::treap::rbegin()
+ reverse_iterator rbegin();
- //! <b>Effects</b>: Returns a const_iterator pointing to the highest priority object of the tree..
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator top() const
- { return this->ctop(); }
+ //! @copydoc ::boost::intrusive::treap::rbegin()const
+ const_reverse_iterator rbegin() const;
- //! <b>Effects</b>: Returns a const_iterator pointing to the highest priority object of the tree..
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator ctop() const
- { return tree_.ctop(); }
+ //! @copydoc ::boost::intrusive::treap::crbegin()const
+ const_reverse_iterator crbegin() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
- //! reversed treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rbegin()
- { return tree_.rbegin(); }
+ //! @copydoc ::boost::intrusive::treap::rend()
+ reverse_iterator rend();
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rbegin() const
- { return tree_.rbegin(); }
+ //! @copydoc ::boost::intrusive::treap::rend()const
+ const_reverse_iterator rend() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
- //! of the reversed treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crbegin() const
- { return tree_.crbegin(); }
+ //! @copydoc ::boost::intrusive::treap::crend()const
+ const_reverse_iterator crend() const;
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
- //! of the reversed treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rend()
- { return tree_.rend(); }
+ //! @copydoc ::boost::intrusive::treap::container_from_end_iterator(iterator)
+ static treap_multiset_impl &container_from_end_iterator(iterator end_iterator);
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rend() const
- { return tree_.rend(); }
+ //! @copydoc ::boost::intrusive::treap::container_from_end_iterator(const_iterator)
+ static const treap_multiset_impl &container_from_end_iterator(const_iterator end_iterator);
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
- //! of the reversed treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crend() const
- { return tree_.crend(); }
+ //! @copydoc ::boost::intrusive::treap::container_from_iterator(iterator)
+ static treap_multiset_impl &container_from_iterator(iterator it);
- //! <b>Effects</b>: Returns a reverse_iterator pointing to the highest priority object of the
- //! reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- reverse_iterator rtop()
- { return tree_.rtop(); }
+ //! @copydoc ::boost::intrusive::treap::container_from_iterator(const_iterator)
+ static const treap_multiset_impl &container_from_iterator(const_iterator it);
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the highest priority objec
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator rtop() const
- { return tree_.crtop(); }
+ //! @copydoc ::boost::intrusive::treap::key_comp()const
+ key_compare key_comp() const;
- //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the highest priority object
- //! of the reversed tree.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_reverse_iterator crtop() const
- { return tree_.crtop(); }
+ //! @copydoc ::boost::intrusive::treap::value_comp()const
+ value_compare value_comp() const;
- //! <b>Precondition</b>: end_iterator must be a valid end iterator
- //! of treap_multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the treap_multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static treap_multiset_impl &container_from_end_iterator(iterator end_iterator)
- {
- return *detail::parent_from_member<treap_multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &treap_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
- //! of treap_multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the treap_multiset associated to the end iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const treap_multiset_impl &container_from_end_iterator(const_iterator end_iterator)
- {
- return *detail::parent_from_member<treap_multiset_impl, tree_type>
- ( &tree_type::container_from_end_iterator(end_iterator)
- , &treap_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static treap_multiset_impl &container_from_iterator(iterator it)
- {
- return *detail::parent_from_member<treap_multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &treap_multiset_impl::tree_);
- }
-
- //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
- //!
- //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- static const treap_multiset_impl &container_from_iterator(const_iterator it)
- {
- return *detail::parent_from_member<treap_multiset_impl, tree_type>
- ( &tree_type::container_from_iterator(it)
- , &treap_multiset_impl::tree_);
- }
-
- //! <b>Effects</b>: Returns the key_compare object used by the treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If key_compare copy-constructor throws.
- key_compare key_comp() const
- { return tree_.value_comp(); }
+ //! @copydoc ::boost::intrusive::treap::empty()const
+ bool empty() const;
- //! <b>Effects</b>: Returns the value_compare object used by the treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If value_compare copy-constructor throws.
- value_compare value_comp() const
- { return tree_.value_comp(); }
+ //! @copydoc ::boost::intrusive::treap::size()const
+ size_type size() const;
- //! <b>Effects</b>: Returns the priority_compare object used by the treap_multiset.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If priority_compare copy-constructor throws.
- priority_compare priority_comp() const
- { return tree_.priority_comp(); }
+ //! @copydoc ::boost::intrusive::treap::swap
+ void swap(treap_multiset_impl& other);
- //! <b>Effects</b>: Returns true if the container is empty.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- bool empty() const
- { return tree_.empty(); }
+ //! @copydoc ::boost::intrusive::treap::clone_from
+ template <class Cloner, class Disposer>
+ void clone_from(const treap_multiset_impl &src, Cloner cloner, Disposer disposer);
- //! <b>Effects</b>: Returns the number of elements stored in the treap_multiset.
- //!
- //! <b>Complexity</b>: Linear to elements contained in *this if,
- //! constant-time size option is enabled. Constant-time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- size_type size() const
- { return tree_.size(); }
+ //! @copydoc ::boost::intrusive::treap::top()
+ iterator top();
- //! <b>Effects</b>: Swaps the contents of two treap_multisets.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: If the swap() call for the comparison functor
- //! found using ADL throws. Strong guarantee.
- void swap(treap_multiset_impl& other)
- { tree_.swap(other.tree_); }
+ //! @copydoc ::boost::intrusive::treap::top()const
+ const_iterator top() const;
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //! Cloner should yield to nodes equivalent to the original nodes.
- //!
- //! <b>Effects</b>: Erases all the elements from *this
- //! calling Disposer::operator()(pointer), clones all the
- //! elements from src calling Cloner::operator()(const_reference )
- //! and inserts them on *this. Copies the predicate from the source container.
- //!
- //! If cloner throws, all cloned elements are unlinked and disposed
- //! calling Disposer::operator()(pointer).
- //!
- //! <b>Complexity</b>: Linear to erased plus inserted elements.
- //!
- //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
- template <class Cloner, class Disposer>
- void clone_from(const treap_multiset_impl &src, Cloner cloner, Disposer disposer)
- { tree_.clone_from(src.tree_, cloner, disposer); }
+ //! @copydoc ::boost::intrusive::treap::ctop()const
+ const_iterator ctop() const;
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts value into the treap_multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Average complexity for insert element is at
- //! most logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare or priority_compare ordering
- //! function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::treap::rtop()
+ reverse_iterator rtop();
+
+ //! @copydoc ::boost::intrusive::treap::rtop()const
+ const_reverse_iterator rtop() const;
+
+ //! @copydoc ::boost::intrusive::treap::crtop()const
+ const_reverse_iterator crtop() const;
+
+ //! @copydoc ::boost::intrusive::treap::crtop() const
+ priority_compare priority_comp() const;
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+
+ //! @copydoc ::boost::intrusive::treap::insert_equal(reference)
iterator insert(reference value)
- { return tree_.insert_equal(value); }
+ { return tree_type::insert_equal(value); }
- //! <b>Requires</b>: value must be an lvalue
- //!
- //! <b>Effects</b>: Inserts x into the treap_multiset, using pos as a hint to
- //! where it will be inserted.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Logarithmic in general, but it is amortized
- //! constant time if t is inserted immediately before hint.
- //!
- //! <b>Throws</b>: If internal value_compare or priority_compare ordering functions throw.
- //! Strong guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::treap::insert_equal(const_iterator,reference)
iterator insert(const_iterator hint, reference value)
- { return tree_.insert_equal(hint, value); }
+ { return tree_type::insert_equal(hint, value); }
- //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
- //! of type value_type.
- //!
- //! <b>Effects</b>: Inserts a range into the treap_multiset.
- //!
- //! <b>Returns</b>: An iterator that points to the position where the new
- //! element was inserted.
- //!
- //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
- //! size of the range. However, it is linear in N if the range is already sorted
- //! by value_comp().
- //!
- //! <b>Throws</b>: If internal value_compare or priority_compare ordering functions throw.
- //! Basic guarantee.
- //!
- //! <b>Note</b>: Does not affect the validity of iterators and references.
- //! No copy-constructors are called.
+ //! @copydoc ::boost::intrusive::treap::insert_equal(Iterator,Iterator)
template<class Iterator>
void insert(Iterator b, Iterator e)
- { tree_.insert_equal(b, e); }
+ { tree_type::insert_equal(b, e); }
- //! <b>Requires</b>: value must be an lvalue, "pos" must be
- //! a valid iterator (or end) and must be the succesor of value
- //! once inserted according to the predicate
- //!
- //! <b>Effects</b>: Inserts x into the treap before "pos".
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: This function does not check preconditions so if "pos" is not
- //! the successor of "value" treap ordering invariant will be broken.
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- iterator insert_before(const_iterator pos, reference value)
- { return tree_.insert_before(pos, value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no less
- //! than the greatest inserted key.
- //!
- //! <b>Effects</b>: Inserts x into the treap in the last position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! less than the greatest inserted key treap ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_back(reference value)
- { tree_.push_back(value); }
-
- //! <b>Requires</b>: value must be an lvalue, and it must be no greater
- //! than the minimum inserted key
- //!
- //! <b>Effects</b>: Inserts x into the treap in the first position.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: This function does not check preconditions so if value is
- //! greater than the minimum inserted key treap ordering invariant will be broken.
- //! This function is slightly more efficient than using "insert_before".
- //! This is a low-level function to be used only for performance reasons
- //! by advanced users.
- void push_front(reference value)
- { tree_.push_front(value); }
-
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator i)
- { return tree_.erase(i); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ //! @copydoc ::boost::intrusive::treap::insert_before
+ iterator insert_before(const_iterator pos, reference value);
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- iterator erase(const_iterator b, const_iterator e)
- { return tree_.erase(b, e); }
+ //! @copydoc ::boost::intrusive::treap::push_back
+ void push_back(reference value);
- //! <b>Effects</b>: Erases all the elements with the given value.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare or priority_compare ordering
- //! functiona throw. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- size_type erase(const_reference value)
- { return tree_.erase(value); }
+ //! @copydoc ::boost::intrusive::treap::push_front
+ void push_front(reference value);
- //! <b>Effects</b>: Erases all the elements that compare equal with
- //! the given key and the given comparison functor.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp or internal priority_compare ordering functions throw. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::treap::erase(const_iterator)
+ iterator erase(const_iterator i);
+
+ //! @copydoc ::boost::intrusive::treap::erase(const_iterator,const_iterator)
+ iterator erase(const_iterator b, const_iterator e);
+
+ //! @copydoc ::boost::intrusive::treap::erase(const_reference)
+ size_type erase(const_reference value);
+
+ //! @copydoc ::boost::intrusive::treap::erase(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- size_type erase(const KeyType& key, KeyValueCompare comp
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase(key, comp); }
-
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased element.
- //!
- //! <b>Effects</b>: Erases the element pointed to by pos.
- //! Disposer::operator()(pointer) is called for the removed element.
- //!
- //! <b>Complexity</b>: Average complexity for erase element is constant time.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Strong guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
- template<class Disposer>
- iterator erase_and_dispose(const_iterator i, Disposer disposer)
- { return tree_.erase_and_dispose(i, disposer); }
+ size_type erase(const KeyType& key, KeyValueCompare comp);
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
+ //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(iterator i, Disposer disposer)
- { return this->erase_and_dispose(const_iterator(i), disposer); }
- #endif
+ iterator erase_and_dispose(const_iterator i, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Returns</b>: An iterator to the element after the erased elements.
- //!
- //! <b>Effects</b>: Erases the range pointed to by b end e.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Complexity</b>: Average complexity for erase range is at most
- //! O(log(size() + N)), where N is the number of elements in the range.
- //!
- //! <b>Throws</b>: If the internal priority_compare function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_iterator,const_iterator,Disposer)
template<class Disposer>
- iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { return tree_.erase_and_dispose(b, e, disposer); }
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given value.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(value)).
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_reference, Disposer)
template<class Disposer>
- size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return tree_.erase_and_dispose(value, disposer); }
+ size_type erase_and_dispose(const_reference value, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements with the given key.
- //! according to the comparison functor "comp".
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Returns</b>: The number of erased elements.
- //!
- //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
- //!
- //! <b>Throws</b>: If comp or internal priority_compare ordering functions throw. Basic guarantee.
- //!
- //! <b>Note</b>: Invalidates the iterators
- //! to the erased elements.
+ //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer)
template<class KeyType, class KeyValueCompare, class Disposer>
- size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
- /// @cond
- , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
- /// @endcond
- )
- { return tree_.erase_and_dispose(key, comp, disposer); }
-
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
- void clear()
- { return tree_.clear(); }
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer);
- //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
- //!
- //! <b>Effects</b>: Erases all the elements of the container.
- //!
- //! <b>Complexity</b>: Linear to the number of elements on the container.
- //! Disposer::operator()(pointer) is called for the removed elements.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: Invalidates the iterators (but not the references)
- //! to the erased elements. No destructors are called.
+ //! @copydoc ::boost::intrusive::treap::clear
+ void clear();
+
+ //! @copydoc ::boost::intrusive::treap::clear_and_dispose
template<class Disposer>
- void clear_and_dispose(Disposer disposer)
- { return tree_.clear_and_dispose(disposer); }
+ void clear_and_dispose(Disposer disposer);
- //! <b>Effects</b>: Returns the number of contained elements with the given key
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- size_type count(const_reference value) const
- { return tree_.count(value); }
+ //! @copydoc ::boost::intrusive::treap::count(const_reference)const
+ size_type count(const_reference value) const;
- //! <b>Effects</b>: Returns the number of contained elements with the same key
- //! compared with the given comparison functor.
- //!
- //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
- //! to number of objects with the given key.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
+ //! @copydoc ::boost::intrusive::treap::count(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- size_type count(const KeyType& key, KeyValueCompare comp) const
- { return tree_.count(key, comp); }
-
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator lower_bound(const_reference value)
- { return tree_.lower_bound(value); }
-
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ size_type count(const KeyType& key, KeyValueCompare comp) const;
+
+ //! @copydoc ::boost::intrusive::treap::lower_bound(const_reference)
+ iterator lower_bound(const_reference value);
+
+ //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator lower_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.lower_bound(key, comp); }
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns a const iterator to the first element whose
- //! key is not less than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator lower_bound(const_reference value) const
- { return tree_.lower_bound(value); }
+ //! @copydoc ::boost::intrusive::treap::lower_bound(const_reference)const
+ const_iterator lower_bound(const_reference value) const;
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is not less than k or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.lower_bound(key, comp); }
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator upper_bound(const_reference value)
- { return tree_.upper_bound(value); }
+ //! @copydoc ::boost::intrusive::treap::upper_bound(const_reference)
+ iterator upper_bound(const_reference value);
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator upper_bound(const KeyType& key, KeyValueCompare comp)
- { return tree_.upper_bound(key, comp); }
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Returns an iterator to the first element whose
- //! key is greater than k or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator upper_bound(const_reference value) const
- { return tree_.upper_bound(value); }
+ //! @copydoc ::boost::intrusive::treap::upper_bound(const_reference)const
+ const_iterator upper_bound(const_reference value) const;
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Returns a const_iterator to the first element whose
- //! key according to the comparison functor is greater than key or
- //! end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
- { return tree_.upper_bound(key, comp); }
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds an iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- iterator find(const_reference value)
- { return tree_.find(value); }
+ //! @copydoc ::boost::intrusive::treap::find(const_reference)
+ iterator find(const_reference value);
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds an iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- iterator find(const KeyType& key, KeyValueCompare comp)
- { return tree_.find(key, comp); }
+ iterator find(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
- //! "value" or end() if that element does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- const_iterator find(const_reference value) const
- { return tree_.find(value); }
+ //! @copydoc ::boost::intrusive::treap::find(const_reference)const
+ const_iterator find(const_reference value) const;
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
- //! "key" according to the comparison functor or end() if that element
- //! does not exist.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
- const_iterator find(const KeyType& key, KeyValueCompare comp) const
- { return tree_.find(key, comp); }
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
- std::pair<iterator,iterator> equal_range(const_reference value)
- { return tree_.equal_range(value); }
+ //! @copydoc ::boost::intrusive::treap::equal_range(const_reference)
+ std::pair<iterator,iterator> equal_range(const_reference value);
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::equal_range(const KeyType&,KeyValueCompare)
template<class KeyType, class KeyValueCompare>
- std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
- { return tree_.equal_range(key, comp); }
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp);
- //! <b>Effects</b>: Finds a range containing all elements whose key is k or
- //! an empty range that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the internal value_compare ordering function throws.
+ //! @copydoc ::boost::intrusive::treap::equal_range(const_reference)const
std::pair<const_iterator, const_iterator>
- equal_range(const_reference value) const
- { return tree_.equal_range(value); }
+ equal_range(const_reference value) const;
- //! <b>Requires</b>: comp must imply the same element order as
- //! value_compare. Usually key is the part of the value_type
- //! that is used in the ordering functor.
- //!
- //! <b>Effects</b>: Finds a range containing all elements whose key is k
- //! according to the comparison functor or an empty range
- //! that indicates the position where those elements would be
- //! if they there is no elements with key k.
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If comp ordering function throws.
- //!
- //! <b>Note</b>: This function is used when constructing a value_type
- //! is expensive and the value_type can be compared with a cheaper
- //! key type. Usually this key is part of the value_type.
+ //! @copydoc ::boost::intrusive::treap::equal_range(const KeyType&,KeyValueCompare)const
template<class KeyType, class KeyValueCompare>
std::pair<const_iterator, const_iterator>
- equal_range(const KeyType& key, KeyValueCompare comp) const
- { return tree_.equal_range(key, comp); }
+ equal_range(const KeyType& key, KeyValueCompare comp) const;
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ //! @copydoc ::boost::intrusive::treap::bounded_range(const_reference,const_reference,bool,bool)
std::pair<iterator,iterator> bounded_range
- (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
+
+ //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)
template<class KeyType, class KeyValueCompare>
std::pair<iterator,iterator> bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed);
- //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
- //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
- //!
- //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If the predicate throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_value and upper_value.
+ //! @copydoc ::boost::intrusive::treap::bounded_range(const_reference,const_reference,bool,bool)const
std::pair<const_iterator, const_iterator>
- bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
-
- //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
- //! ordering compatible with the strict weak ordering used to create the
- //! 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.
- //!
- //! <b>Effects</b>: Returns an a pair with the following criteria:
- //!
- //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
- //!
- //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
- //!
- //! <b>Complexity</b>: Logarithmic.
- //!
- //! <b>Throws</b>: If "comp" throws.
- //!
- //! <b>Note</b>: This function can be more efficient than calling upper_bound
- //! and lower_bound for lower_key and upper_key.
- template<class KeyType, class KeyValueCompare>
- std::pair<const_iterator, const_iterator>
- bounded_range
- (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
- { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const;
- //! <b>Requires</b>: value must be an lvalue and shall be in a treap_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the treap_multiset
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static iterator s_iterator_to(reference value)
- { return tree_type::s_iterator_to(value); }
+ //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const
+ template<class KeyType, class KeyValueCompare>
+ std::pair<const_iterator, const_iterator> bounded_range
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const;
- //! <b>Requires</b>: value must be an lvalue and shall be in a treap_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! treap_multiset that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This static function is available only if the <i>value traits</i>
- //! is stateless.
- static const_iterator s_iterator_to(const_reference value)
- { return tree_type::s_iterator_to(value); }
+ //! @copydoc ::boost::intrusive::treap::s_iterator_to(reference)
+ static iterator s_iterator_to(reference value);
- //! <b>Requires</b>: value must be an lvalue and shall be in a treap_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid iterator i belonging to the treap_multiset
- //! that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- iterator iterator_to(reference value)
- { return tree_.iterator_to(value); }
+ //! @copydoc ::boost::intrusive::treap::s_iterator_to(const_reference)
+ static const_iterator s_iterator_to(const_reference value);
- //! <b>Requires</b>: value must be an lvalue and shall be in a treap_multiset of
- //! appropriate type. Otherwise the behavior is undefined.
- //!
- //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
- //! treap_multiset that points to the value
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- const_iterator iterator_to(const_reference value) const
- { return tree_.iterator_to(value); }
+ //! @copydoc ::boost::intrusive::treap::iterator_to(reference)
+ iterator iterator_to(reference value);
- //! <b>Requires</b>: value shall not be in a treap_multiset/treap_multiset.
- //!
- //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
- //! state.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant time.
- //!
- //! <b>Note</b>: This function puts the hook in the well-known default state
- //! used by auto_unlink and safe hooks.
- static void init_node(reference value)
- { tree_type::init_node(value); }
+ //! @copydoc ::boost::intrusive::treap::iterator_to(const_reference)const
+ const_iterator iterator_to(const_reference value) const;
- //! <b>Effects</b>: Unlinks the leftmost node from the tree.
- //!
- //! <b>Complexity</b>: Average complexity is constant time.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Notes</b>: This function breaks the tree and the tree can
- //! only be used for more unlink_leftmost_without_rebalance calls.
- //! This function is normally used to achieve a step by step
- //! controlled destruction of the tree.
- pointer unlink_leftmost_without_rebalance()
- { return tree_.unlink_leftmost_without_rebalance(); }
-
- //! <b>Requires</b>: replace_this must be a valid iterator of *this
- //! and with_this must not be inserted in any tree.
- //!
- //! <b>Effects</b>: Replaces replace_this in its position in the
- //! tree with with_this. The tree does not need to be rebalanced.
- //!
- //! <b>Complexity</b>: Constant.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Note</b>: This function will break container ordering invariants if
- //! with_this is not equivalent to *replace_this according to the
- //! ordering rules. This function is faster than erasing and inserting
- //! the node, since no rebalancing or comparison is needed.
- void replace_node(iterator replace_this, reference with_this)
- { tree_.replace_node(replace_this, with_this); }
-
- //! <b>Effects</b>: Rebalances the tree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear.
- void rebalance()
- { tree_.rebalance(); }
+ //! @copydoc ::boost::intrusive::treap::init_node(reference)
+ static void init_node(reference value);
- //! <b>Requires</b>: old_root is a node of a tree.
- //!
- //! <b>Effects</b>: Rebalances the subtree rooted at old_root.
- //!
- //! <b>Returns</b>: The new root of the subtree.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- iterator rebalance_subtree(iterator root)
- { return tree_.rebalance_subtree(root); }
+ //! @copydoc ::boost::intrusive::treap::unlink_leftmost_without_rebalance
+ pointer unlink_leftmost_without_rebalance();
- //! <b>Returns</b>: The balance factor (alpha) used in this tree
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Constant.
- float balance_factor() const
- { return tree_.balance_factor(); }
+ //! @copydoc ::boost::intrusive::treap::replace_node
+ void replace_node(iterator replace_this, reference with_this);
- //! <b>Requires</b>: new_alpha must be a value between 0.5 and 1.0
- //!
- //! <b>Effects</b>: Establishes a new balance factor (alpha) and rebalances
- //! the tree if the new balance factor is stricter (less) than the old factor.
- //!
- //! <b>Throws</b>: Nothing.
- //!
- //! <b>Complexity</b>: Linear to the elements in the subtree.
- void balance_factor(float new_alpha)
- { tree_.balance_factor(new_alpha); }
+ //! @copydoc ::boost::intrusive::treap::remove_node
+ void remove_node(reference value);
- /// @cond
- friend bool operator==(const treap_multiset_impl &x, const treap_multiset_impl &y)
- { return x.tree_ == y.tree_; }
-
- friend bool operator<(const treap_multiset_impl &x, const treap_multiset_impl &y)
- { return x.tree_ < y.tree_; }
- /// @endcond
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator!=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_multiset_impl<T, Options...> &x, const treap_multiset_impl<T, Options...> &y)
-#else
-(const treap_multiset_impl<Config> &x, const treap_multiset_impl<Config> &y)
-#endif
-{ return !(x == y); }
-
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_multiset_impl<T, Options...> &x, const treap_multiset_impl<T, Options...> &y)
-#else
-(const treap_multiset_impl<Config> &x, const treap_multiset_impl<Config> &y)
-#endif
-{ return y < x; }
-
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator<=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_multiset_impl<T, Options...> &x, const treap_multiset_impl<T, Options...> &y)
-#else
-(const treap_multiset_impl<Config> &x, const treap_multiset_impl<Config> &y)
-#endif
-{ return !(y < x); }
-
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline bool operator>=
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(const treap_multiset_impl<T, Options...> &x, const treap_multiset_impl<T, Options...> &y)
-#else
-(const treap_multiset_impl<Config> &x, const treap_multiset_impl<Config> &y)
-#endif
-{ return !(x < y); }
-
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-template<class T, class ...Options>
-#else
-template<class Config>
-#endif
-inline void swap
-#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
-(treap_multiset_impl<T, Options...> &x, treap_multiset_impl<T, Options...> &y)
-#else
-(treap_multiset_impl<Config> &x, treap_multiset_impl<Config> &y)
-#endif
-{ x.swap(y); }
//! Helper metafunction to define a \c treap_multiset that yields to the same type when the
//! same options (either explicitly or implicitly) are used.
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none>
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void>
#endif
struct make_treap_multiset
{
- /// @cond
+ typedef typename pack_options
+ < treap_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+ typedef typename detail::get_header_holder_type
+ < value_traits, typename packed_options::header_holder_type >::type header_holder_type;
+
typedef treap_multiset_impl
- < typename make_treap_opt<T,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
- #else
- Options...
- #endif
- >::type
- > implementation_defined;
+ < value_traits
+ , typename packed_options::compare
+ , typename packed_options::priority
+ , typename packed_options::size_type
+ , packed_options::constant_time_size
+ , header_holder_type
+ > implementation_defined;
/// @endcond
typedef implementation_defined type;
};
@@ -2673,14 +927,14 @@ struct make_treap_multiset
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
-template<class T, class O1, class O2, class O3, class O4>
+template<class T, class O1, class O2, class O3, class O4, class O5>
#else
template<class T, class ...Options>
#endif
class treap_multiset
: public make_treap_multiset<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
@@ -2689,12 +943,11 @@ class treap_multiset
typedef typename make_treap_multiset
<T,
#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4
+ O1, O2, O3, O4, O5
#else
Options...
#endif
>::type Base;
- //Movable
BOOST_MOVABLE_BUT_NOT_COPYABLE(treap_multiset)
public:
@@ -2707,17 +960,17 @@ class treap_multiset
//Assert if passed value traits are compatible with the type
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
- treap_multiset( const value_compare &cmp = value_compare()
- , const priority_compare &pcmp = priority_compare()
- , const value_traits &v_traits = value_traits())
+ explicit treap_multiset( const value_compare &cmp = value_compare()
+ , const priority_compare &pcmp = priority_compare()
+ , const value_traits &v_traits = value_traits())
: Base(cmp, pcmp, v_traits)
{}
template<class Iterator>
treap_multiset( Iterator b, Iterator e
- , const value_compare &cmp = value_compare()
- , const priority_compare &pcmp = priority_compare()
- , const value_traits &v_traits = value_traits())
+ , const value_compare &cmp = value_compare()
+ , const priority_compare &pcmp = priority_compare()
+ , const value_traits &v_traits = value_traits())
: Base(b, e, cmp, pcmp, v_traits)
{}
@@ -2726,7 +979,7 @@ class treap_multiset
{}
treap_multiset& operator=(BOOST_RV_REF(treap_multiset) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<treap_multiset &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
static treap_multiset &container_from_end_iterator(iterator end_iterator)
{ return static_cast<treap_multiset &>(Base::container_from_end_iterator(end_iterator)); }
diff --git a/3party/boost/boost/intrusive/trivial_value_traits.hpp b/3party/boost/boost/intrusive/trivial_value_traits.hpp
index 5c166fdaa1..7615f167c5 100644
--- a/3party/boost/boost/intrusive/trivial_value_traits.hpp
+++ b/3party/boost/boost/intrusive/trivial_value_traits.hpp
@@ -1,6 +1,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +13,8 @@
#ifndef BOOST_INTRUSIVE_TRIVIAL_VALUE_TRAITS_HPP
#define BOOST_INTRUSIVE_TRIVIAL_VALUE_TRAITS_HPP
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/intrusive_fwd.hpp>
#include <boost/intrusive/link_mode.hpp>
#include <boost/intrusive/pointer_traits.hpp>
@@ -22,7 +24,11 @@ namespace intrusive {
//!This value traits template is used to create value traits
//!from user defined node traits where value_traits::value_type and
//!node_traits::node should be equal
-template<class NodeTraits, link_mode_type LinkMode = normal_link>
+template<class NodeTraits, link_mode_type LinkMode
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+ = safe_link
+ #endif
+>
struct trivial_value_traits
{
typedef NodeTraits node_traits;
@@ -43,4 +49,6 @@ struct trivial_value_traits
} //namespace intrusive
} //namespace boost
+#include <boost/intrusive/detail/config_end.hpp>
+
#endif //BOOST_INTRUSIVE_TRIVIAL_VALUE_TRAITS_HPP
diff --git a/3party/boost/boost/intrusive/unordered_set.hpp b/3party/boost/boost/intrusive/unordered_set.hpp
index d957f4a3bd..f91fc765f5 100644
--- a/3party/boost/boost/intrusive/unordered_set.hpp
+++ b/3party/boost/boost/intrusive/unordered_set.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -61,13 +61,14 @@ namespace intrusive {
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Hash, class Equal, class SizeType, class BucketTraits, std::size_t BoolFlags>
#endif
class unordered_set_impl
+ : public hashtable_impl<ValueTraits, Hash, Equal, SizeType, BucketTraits, BoolFlags>
{
/// @cond
private:
- typedef hashtable_impl<Config> table_type;
+ typedef hashtable_impl<ValueTraits, Hash, Equal, SizeType, BucketTraits, BoolFlags> table_type;
//! This class is
//! movable
@@ -102,11 +103,6 @@ class unordered_set_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- /// @cond
- private:
- table_type table_;
- /// @endcond
-
public:
//! <b>Requires</b>: buckets must not be being used by any other resource.
@@ -126,7 +122,7 @@ class unordered_set_impl
, const hasher & hash_func = hasher()
, const key_equal &equal_func = key_equal()
, const value_traits &v_traits = value_traits())
- : table_(b_traits, hash_func, equal_func, v_traits)
+ : table_type(b_traits, hash_func, equal_func, v_traits)
{}
//! <b>Requires</b>: buckets must not be being used by any other resource
@@ -151,20 +147,21 @@ class unordered_set_impl
, const hasher & hash_func = hasher()
, const key_equal &equal_func = key_equal()
, const value_traits &v_traits = value_traits())
- : table_(b_traits, hash_func, equal_func, v_traits)
- { table_.insert_unique(b, e); }
+ : table_type(b_traits, hash_func, equal_func, v_traits)
+ { table_type::insert_unique(b, e); }
//! <b>Effects</b>: to-do
//!
unordered_set_impl(BOOST_RV_REF(unordered_set_impl) x)
- : table_(::boost::move(x.table_))
+ : table_type(::boost::move(static_cast<table_type&>(x)))
{}
//! <b>Effects</b>: to-do
//!
unordered_set_impl& operator=(BOOST_RV_REF(unordered_set_impl) x)
- { table_ = ::boost::move(x.table_); return *this; }
+ { return static_cast<unordered_set_impl&>(table_type::operator=(::boost::move(static_cast<table_type&>(x)))); }
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Effects</b>: Detaches all elements from this. The objects in the unordered_set
//! are not deleted (i.e. no destructors are called).
//!
@@ -182,7 +179,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
iterator begin()
- { return table_.begin(); }
+ { return table_type::begin(); }
//! <b>Effects</b>: Returns a const_iterator pointing to the beginning
//! of the unordered_set.
@@ -192,7 +189,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator begin() const
- { return table_.begin(); }
+ { return table_type::begin(); }
//! <b>Effects</b>: Returns a const_iterator pointing to the beginning
//! of the unordered_set.
@@ -202,7 +199,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator cbegin() const
- { return table_.cbegin(); }
+ { return table_type::cbegin(); }
//! <b>Effects</b>: Returns an iterator pointing to the end of the unordered_set.
//!
@@ -210,7 +207,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
iterator end()
- { return table_.end(); }
+ { return table_type::end(); }
//! <b>Effects</b>: Returns a const_iterator pointing to the end of the unordered_set.
//!
@@ -218,7 +215,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator end() const
- { return table_.end(); }
+ { return table_type::end(); }
//! <b>Effects</b>: Returns a const_iterator pointing to the end of the unordered_set.
//!
@@ -226,7 +223,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator cend() const
- { return table_.cend(); }
+ { return table_type::cend(); }
//! <b>Effects</b>: Returns the hasher object used by the unordered_set.
//!
@@ -234,7 +231,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: If hasher copy-constructor throws.
hasher hash_function() const
- { return table_.hash_function(); }
+ { return table_type::hash_function(); }
//! <b>Effects</b>: Returns the key_equal object used by the unordered_set.
//!
@@ -242,7 +239,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: If key_equal copy-constructor throws.
key_equal key_eq() const
- { return table_.key_eq(); }
+ { return table_type::key_eq(); }
//! <b>Effects</b>: Returns true if the container is empty.
//!
@@ -252,7 +249,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
bool empty() const
- { return table_.empty(); }
+ { return table_type::empty(); }
//! <b>Effects</b>: Returns the number of elements stored in the unordered_set.
//!
@@ -261,7 +258,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
size_type size() const
- { return table_.size(); }
+ { return table_type::size(); }
//! <b>Requires</b>: the hasher and the equality function unqualified swap
//! call should not throw.
@@ -274,7 +271,7 @@ class unordered_set_impl
//! <b>Throws</b>: If the swap() call for the comparison or hash functors
//! found using ADL throw. Basic guarantee.
void swap(unordered_set_impl& other)
- { table_.swap(other.table_); }
+ { table_type::swap(other.table_); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//! Cloner should yield to nodes that compare equal and produce the same
@@ -297,7 +294,9 @@ class unordered_set_impl
//! throws. Basic guarantee.
template <class Cloner, class Disposer>
void clone_from(const unordered_set_impl &src, Cloner cloner, Disposer disposer)
- { table_.clone_from(src.table_, cloner, disposer); }
+ { table_type::clone_from(src.table_, cloner, disposer); }
+
+ #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Requires</b>: value must be an lvalue
//!
@@ -316,7 +315,7 @@ class unordered_set_impl
//! <b>Note</b>: Does not affect the validity of iterators and references.
//! No copy-constructors are called.
std::pair<iterator, bool> insert(reference value)
- { return table_.insert_unique(value); }
+ { return table_type::insert_unique(value); }
//! <b>Requires</b>: Dereferencing iterator must yield an lvalue
//! of type value_type.
@@ -332,7 +331,7 @@ class unordered_set_impl
//! No copy-constructors are called.
template<class Iterator>
void insert(Iterator b, Iterator e)
- { table_.insert_unique(b, e); }
+ { table_type::insert_unique(b, e); }
//! <b>Requires</b>: "hasher" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -372,7 +371,7 @@ class unordered_set_impl
template<class KeyType, class KeyHasher, class KeyValueEqual>
std::pair<iterator, bool> insert_check
(const KeyType &key, KeyHasher hasher, KeyValueEqual key_value_equal, insert_commit_data &commit_data)
- { return table_.insert_unique_check(key, hasher, key_value_equal, commit_data); }
+ { return table_type::insert_unique_check(key, hasher, key_value_equal, commit_data); }
//! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
//! must have been obtained from a previous call to "insert_check".
@@ -394,7 +393,9 @@ class unordered_set_impl
//!
//! After a successful rehashing insert_commit_data remains valid.
iterator insert_commit(reference value, const insert_commit_data &commit_data)
- { return table_.insert_unique_commit(value, commit_data); }
+ { return table_type::insert_unique_commit(value, commit_data); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Effects</b>: Erases the element pointed to by i.
//!
@@ -405,7 +406,7 @@ class unordered_set_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased element. No destructors are called.
void erase(const_iterator i)
- { table_.erase(i); }
+ { table_type::erase(i); }
//! <b>Effects</b>: Erases the range pointed to by b end e.
//!
@@ -417,7 +418,7 @@ class unordered_set_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased elements. No destructors are called.
void erase(const_iterator b, const_iterator e)
- { table_.erase(b, e); }
+ { table_type::erase(b, e); }
//! <b>Effects</b>: Erases all the elements with the given value.
//!
@@ -431,7 +432,7 @@ class unordered_set_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased elements. No destructors are called.
size_type erase(const_reference value)
- { return table_.erase(value); }
+ { return table_type::erase(value); }
//! <b>Requires</b>: "hasher" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -455,7 +456,7 @@ class unordered_set_impl
//! to the erased elements. No destructors are called.
template<class KeyType, class KeyHasher, class KeyValueEqual>
size_type erase(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func)
- { return table_.erase(key, hash_func, equal_func); }
+ { return table_type::erase(key, hash_func, equal_func); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//!
@@ -474,7 +475,7 @@ class unordered_set_impl
, typename detail::enable_if_c<!detail::is_convertible<Disposer, const_iterator>::value >::type * = 0
/// @endcond
)
- { table_.erase_and_dispose(i, disposer); }
+ { table_type::erase_and_dispose(i, disposer); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//!
@@ -490,7 +491,7 @@ class unordered_set_impl
//! to the erased elements.
template<class Disposer>
void erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { table_.erase_and_dispose(b, e, disposer); }
+ { table_type::erase_and_dispose(b, e, disposer); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//!
@@ -508,7 +509,7 @@ class unordered_set_impl
//! to the erased elements. No destructors are called.
template<class Disposer>
size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return table_.erase_and_dispose(value, disposer); }
+ { return table_type::erase_and_dispose(value, disposer); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//!
@@ -527,7 +528,7 @@ class unordered_set_impl
//! to the erased elements.
template<class KeyType, class KeyHasher, class KeyValueEqual, class Disposer>
size_type erase_and_dispose(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func, Disposer disposer)
- { return table_.erase_and_dispose(key, hash_func, equal_func, disposer); }
+ { return table_type::erase_and_dispose(key, hash_func, equal_func, disposer); }
//! <b>Effects</b>: Erases all of the elements.
//!
@@ -539,7 +540,7 @@ class unordered_set_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased elements. No destructors are called.
void clear()
- { return table_.clear(); }
+ { return table_type::clear(); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//!
@@ -554,7 +555,7 @@ class unordered_set_impl
//! to the erased elements. No destructors are called.
template<class Disposer>
void clear_and_dispose(Disposer disposer)
- { return table_.clear_and_dispose(disposer); }
+ { return table_type::clear_and_dispose(disposer); }
//! <b>Effects</b>: Returns the number of contained elements with the given value
//!
@@ -562,7 +563,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
size_type count(const_reference value) const
- { return table_.find(value) != end(); }
+ { return table_type::find(value) != end(); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -579,7 +580,7 @@ class unordered_set_impl
//! <b>Throws</b>: If hash_func or equal_func throw.
template<class KeyType, class KeyHasher, class KeyValueEqual>
size_type count(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func) const
- { return table_.find(key, hash_func, equal_func) != end(); }
+ { return table_type::find(key, hash_func, equal_func) != end(); }
//! <b>Effects</b>: Finds an iterator to the first element is equal to
//! "value" or end() if that element does not exist.
@@ -588,7 +589,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
iterator find(const_reference value)
- { return table_.find(value); }
+ { return table_type::find(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -611,7 +612,7 @@ class unordered_set_impl
//! key type. Usually this key is part of the value_type.
template<class KeyType, class KeyHasher, class KeyValueEqual>
iterator find(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func)
- { return table_.find(key, hash_func, equal_func); }
+ { return table_type::find(key, hash_func, equal_func); }
//! <b>Effects</b>: Finds a const_iterator to the first element whose key is
//! "key" or end() if that element does not exist.
@@ -620,7 +621,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
const_iterator find(const_reference value) const
- { return table_.find(value); }
+ { return table_type::find(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -643,7 +644,7 @@ class unordered_set_impl
//! key type. Usually this key is part of the value_type.
template<class KeyType, class KeyHasher, class KeyValueEqual>
const_iterator find(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func) const
- { return table_.find(key, hash_func, equal_func); }
+ { return table_type::find(key, hash_func, equal_func); }
//! <b>Effects</b>: Returns a range containing all elements with values equivalent
//! to value. Returns std::make_pair(this->end(), this->end()) if no such
@@ -653,7 +654,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
std::pair<iterator,iterator> equal_range(const_reference value)
- { return table_.equal_range(value); }
+ { return table_type::equal_range(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -677,7 +678,7 @@ class unordered_set_impl
//! key type. Usually this key is part of the value_type.
template<class KeyType, class KeyHasher, class KeyValueEqual>
std::pair<iterator,iterator> equal_range(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func)
- { return table_.equal_range(key, hash_func, equal_func); }
+ { return table_type::equal_range(key, hash_func, equal_func); }
//! <b>Effects</b>: Returns a range containing all elements with values equivalent
//! to value. Returns std::make_pair(this->end(), this->end()) if no such
@@ -688,7 +689,7 @@ class unordered_set_impl
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
std::pair<const_iterator, const_iterator>
equal_range(const_reference value) const
- { return table_.equal_range(value); }
+ { return table_type::equal_range(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -713,7 +714,7 @@ class unordered_set_impl
template<class KeyType, class KeyHasher, class KeyValueEqual>
std::pair<const_iterator, const_iterator>
equal_range(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func) const
- { return table_.equal_range(key, hash_func, equal_func); }
+ { return table_type::equal_range(key, hash_func, equal_func); }
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
//! appropriate type. Otherwise the behavior is undefined.
@@ -725,7 +726,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: If the internal hash function throws.
iterator iterator_to(reference value)
- { return table_.iterator_to(value); }
+ { return table_type::iterator_to(value); }
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
//! appropriate type. Otherwise the behavior is undefined.
@@ -737,7 +738,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: If the internal hash function throws.
const_iterator iterator_to(const_reference value) const
- { return table_.iterator_to(value); }
+ { return table_type::iterator_to(value); }
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
//! appropriate type. Otherwise the behavior is undefined.
@@ -779,7 +780,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
local_iterator local_iterator_to(reference value)
- { return table_.local_iterator_to(value); }
+ { return table_type::local_iterator_to(value); }
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
//! appropriate type. Otherwise the behavior is undefined.
@@ -791,7 +792,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
const_local_iterator local_iterator_to(const_reference value) const
- { return table_.local_iterator_to(value); }
+ { return table_type::local_iterator_to(value); }
//! <b>Effects</b>: Returns the number of buckets passed in the constructor
//! or the last rehash function.
@@ -800,7 +801,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
size_type bucket_count() const
- { return table_.bucket_count(); }
+ { return table_type::bucket_count(); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -810,7 +811,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
size_type bucket_size(size_type n) const
- { return table_.bucket_size(n); }
+ { return table_type::bucket_size(n); }
//! <b>Effects</b>: Returns the index of the bucket in which elements
//! with keys equivalent to k would be found, if any such element existed.
@@ -821,7 +822,7 @@ class unordered_set_impl
//!
//! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
size_type bucket(const value_type& k) const
- { return table_.bucket(k); }
+ { return table_type::bucket(k); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -837,7 +838,7 @@ class unordered_set_impl
//! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
template<class KeyType, class KeyHasher>
size_type bucket(const KeyType& k, KeyHasher hash_func) const
- { return table_.bucket(k, hash_func); }
+ { return table_type::bucket(k, hash_func); }
//! <b>Effects</b>: Returns the bucket array pointer passed in the constructor
//! or the last rehash function.
@@ -846,7 +847,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: Nothing.
bucket_ptr bucket_pointer() const
- { return table_.bucket_pointer(); }
+ { return table_type::bucket_pointer(); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -860,7 +861,7 @@ class unordered_set_impl
//! <b>Note</b>: [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 table_.begin(n); }
+ { return table_type::begin(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -874,7 +875,7 @@ class unordered_set_impl
//! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
//! containing all of the elements in the nth bucket.
const_local_iterator begin(size_type n) const
- { return table_.begin(n); }
+ { return table_type::begin(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -888,7 +889,7 @@ class unordered_set_impl
//! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
//! containing all of the elements in the nth bucket.
const_local_iterator cbegin(size_type n) const
- { return table_.cbegin(n); }
+ { return table_type::cbegin(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -902,7 +903,7 @@ class unordered_set_impl
//! <b>Note</b>: [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 table_.end(n); }
+ { return table_type::end(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -916,7 +917,7 @@ class unordered_set_impl
//! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
//! containing all of the elements in the nth bucket.
const_local_iterator end(size_type n) const
- { return table_.end(n); }
+ { return table_type::end(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -930,7 +931,7 @@ class unordered_set_impl
//! <b>Note</b>: [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 table_.cend(n); }
+ { return table_type::cend(n); }
//! <b>Requires</b>: 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
@@ -946,7 +947,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>: If the hasher functor throws. Basic guarantee.
void rehash(const bucket_traits &new_bucket_traits)
- { table_.rehash(new_bucket_traits); }
+ { table_type::rehash(new_bucket_traits); }
//! <b>Requires</b>:
//!
@@ -958,11 +959,11 @@ class unordered_set_impl
//!
//! <b>Note</b>: this method is only available if incremental<true> option is activated.
bool incremental_rehash(bool grow = true)
- { return table_.incremental_rehash(grow); }
+ { return table_type::incremental_rehash(grow); }
//! <b>Note</b>: this method is only available if incremental<true> option is activated.
bool incremental_rehash(const bucket_traits &new_bucket_traits)
- { return table_.incremental_rehash(new_bucket_traits); }
+ { return table_type::incremental_rehash(new_bucket_traits); }
//! <b>Requires</b>:
//!
@@ -972,7 +973,7 @@ class unordered_set_impl
//!
//! <b>Throws</b>:
size_type split_count() const
- { return table_.split_count(); }
+ { return table_type::split_count(); }
//! <b>Effects</b>: Returns the nearest new bucket count optimized for
//! the container that is bigger than n. This suggestion can be used
@@ -997,6 +998,8 @@ class unordered_set_impl
//! <b>Throws</b>: Nothing.
static size_type suggested_lower_bucket_count(size_type n)
{ return table_type::suggested_lower_bucket_count(n); }
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
//! Helper metafunction to define an \c unordered_set that yields to the same type when the
@@ -1004,26 +1007,45 @@ class unordered_set_impl
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none
- , class O5 = none, class O6 = none
- , class O7 = none, class O8 = none
- , class O9 = none, class O10= none
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void, class O6 = void
+ , class O7 = void, class O8 = void
+ , class O9 = void, class O10= void
>
#endif
struct make_unordered_set
{
/// @cond
+ typedef typename pack_options
+ < hashtable_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5, O6, O7, O8, O9, O10
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+
+ typedef typename make_bucket_traits
+ <T, true, packed_options>::type bucket_traits;
+
typedef unordered_set_impl
- < typename make_hashtable_opt
- <T, true,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4, O5, O6, O7, O8, O9, O10
- #else
- Options...
- #endif
- >::type
+ < value_traits
+ , typename packed_options::hash
+ , typename packed_options::equal
+ , typename packed_options::size_type
+ , bucket_traits
+ , (std::size_t(true)*hash_bool_flags::unique_keys_pos)
+ | (std::size_t(packed_options::constant_time_size)*hash_bool_flags::constant_time_size_pos)
+ | (std::size_t(packed_options::power_2_buckets)*hash_bool_flags::power_2_buckets_pos)
+ | (std::size_t(packed_options::cache_begin)*hash_bool_flags::cache_begin_pos)
+ | (std::size_t(packed_options::compare_hash)*hash_bool_flags::compare_hash_pos)
+ | (std::size_t(packed_options::incremental)*hash_bool_flags::incremental_pos)
> implementation_defined;
+
/// @endcond
typedef implementation_defined type;
};
@@ -1067,10 +1089,10 @@ class unordered_set
typedef typename Base::hasher hasher;
typedef typename Base::key_equal key_equal;
- unordered_set ( const bucket_traits &b_traits
- , const hasher & hash_func = hasher()
- , const key_equal &equal_func = key_equal()
- , const value_traits &v_traits = value_traits())
+ explicit unordered_set ( const bucket_traits &b_traits
+ , const hasher & hash_func = hasher()
+ , const key_equal &equal_func = key_equal()
+ , const value_traits &v_traits = value_traits())
: Base(b_traits, hash_func, equal_func, v_traits)
{}
@@ -1089,7 +1111,7 @@ class unordered_set
{}
unordered_set& operator=(BOOST_RV_REF(unordered_set) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<unordered_set&>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
};
#endif
@@ -1133,13 +1155,14 @@ class unordered_set
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class T, class ...Options>
#else
-template<class Config>
+template<class ValueTraits, class Hash, class Equal, class SizeType, class BucketTraits, std::size_t BoolFlags>
#endif
class unordered_multiset_impl
+ : public hashtable_impl<ValueTraits, Hash, Equal, SizeType, BucketTraits, BoolFlags>
{
/// @cond
private:
- typedef hashtable_impl<Config> table_type;
+ typedef hashtable_impl<ValueTraits, Hash, Equal, SizeType, BucketTraits, BoolFlags> table_type;
/// @endcond
//Movable
@@ -1173,11 +1196,6 @@ class unordered_multiset_impl
typedef typename implementation_defined::const_node_ptr const_node_ptr;
typedef typename implementation_defined::node_algorithms node_algorithms;
- /// @cond
- private:
- table_type table_;
- /// @endcond
-
public:
//! <b>Requires</b>: buckets must not be being used by any other resource.
@@ -1197,7 +1215,7 @@ class unordered_multiset_impl
, const hasher & hash_func = hasher()
, const key_equal &equal_func = key_equal()
, const value_traits &v_traits = value_traits())
- : table_(b_traits, hash_func, equal_func, v_traits)
+ : table_type(b_traits, hash_func, equal_func, v_traits)
{}
//! <b>Requires</b>: buckets must not be being used by any other resource
@@ -1222,19 +1240,21 @@ class unordered_multiset_impl
, const hasher & hash_func = hasher()
, const key_equal &equal_func = key_equal()
, const value_traits &v_traits = value_traits())
- : table_(b_traits, hash_func, equal_func, v_traits)
- { table_.insert_equal(b, e); }
+ : table_type(b_traits, hash_func, equal_func, v_traits)
+ { table_type::insert_equal(b, e); }
//! <b>Effects</b>: to-do
//!
unordered_multiset_impl(BOOST_RV_REF(unordered_multiset_impl) x)
- : table_(::boost::move(x.table_))
+ : table_type(::boost::move(static_cast<table_type&>(x)))
{}
//! <b>Effects</b>: to-do
//!
unordered_multiset_impl& operator=(BOOST_RV_REF(unordered_multiset_impl) x)
- { table_ = ::boost::move(x.table_); return *this; }
+ { return static_cast<unordered_multiset_impl&>(table_type::operator=(::boost::move(static_cast<table_type&>(x)))); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Effects</b>: Detaches all elements from this. The objects in the unordered_multiset
//! are not deleted (i.e. no destructors are called).
@@ -1253,7 +1273,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
iterator begin()
- { return table_.begin(); }
+ { return table_type::begin(); }
//! <b>Effects</b>: Returns a const_iterator pointing to the beginning
//! of the unordered_multiset.
@@ -1263,7 +1283,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator begin() const
- { return table_.begin(); }
+ { return table_type::begin(); }
//! <b>Effects</b>: Returns a const_iterator pointing to the beginning
//! of the unordered_multiset.
@@ -1273,7 +1293,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator cbegin() const
- { return table_.cbegin(); }
+ { return table_type::cbegin(); }
//! <b>Effects</b>: Returns an iterator pointing to the end of the unordered_multiset.
//!
@@ -1281,7 +1301,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
iterator end()
- { return table_.end(); }
+ { return table_type::end(); }
//! <b>Effects</b>: Returns a const_iterator pointing to the end of the unordered_multiset.
//!
@@ -1289,7 +1309,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator end() const
- { return table_.end(); }
+ { return table_type::end(); }
//! <b>Effects</b>: Returns a const_iterator pointing to the end of the unordered_multiset.
//!
@@ -1297,7 +1317,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
const_iterator cend() const
- { return table_.cend(); }
+ { return table_type::cend(); }
//! <b>Effects</b>: Returns the hasher object used by the unordered_set.
//!
@@ -1305,7 +1325,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: If hasher copy-constructor throws.
hasher hash_function() const
- { return table_.hash_function(); }
+ { return table_type::hash_function(); }
//! <b>Effects</b>: Returns the key_equal object used by the unordered_multiset.
//!
@@ -1313,7 +1333,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: If key_equal copy-constructor throws.
key_equal key_eq() const
- { return table_.key_eq(); }
+ { return table_type::key_eq(); }
//! <b>Effects</b>: Returns true if the container is empty.
//!
@@ -1323,7 +1343,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
bool empty() const
- { return table_.empty(); }
+ { return table_type::empty(); }
//! <b>Effects</b>: Returns the number of elements stored in the unordered_multiset.
//!
@@ -1332,7 +1352,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
size_type size() const
- { return table_.size(); }
+ { return table_type::size(); }
//! <b>Requires</b>: the hasher and the equality function unqualified swap
//! call should not throw.
@@ -1346,7 +1366,7 @@ class unordered_multiset_impl
//! <b>Throws</b>: If the swap() call for the comparison or hash functors
//! found using ADL throw. Basic guarantee.
void swap(unordered_multiset_impl& other)
- { table_.swap(other.table_); }
+ { table_type::swap(other.table_); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//! Cloner should yield to nodes that compare equal and produce the same
@@ -1369,7 +1389,9 @@ class unordered_multiset_impl
//! throws. Basic guarantee.
template <class Cloner, class Disposer>
void clone_from(const unordered_multiset_impl &src, Cloner cloner, Disposer disposer)
- { table_.clone_from(src.table_, cloner, disposer); }
+ { table_type::clone_from(src.table_, cloner, disposer); }
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Requires</b>: value must be an lvalue
//!
@@ -1384,7 +1406,7 @@ class unordered_multiset_impl
//! <b>Note</b>: Does not affect the validity of iterators and references.
//! No copy-constructors are called.
iterator insert(reference value)
- { return table_.insert_equal(value); }
+ { return table_type::insert_equal(value); }
//! <b>Requires</b>: Dereferencing iterator must yield an lvalue
//! of type value_type.
@@ -1400,7 +1422,9 @@ class unordered_multiset_impl
//! No copy-constructors are called.
template<class Iterator>
void insert(Iterator b, Iterator e)
- { table_.insert_equal(b, e); }
+ { table_type::insert_equal(b, e); }
+
+ #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
//! <b>Effects</b>: Erases the element pointed to by i.
//!
@@ -1411,7 +1435,7 @@ class unordered_multiset_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased element. No destructors are called.
void erase(const_iterator i)
- { table_.erase(i); }
+ { table_type::erase(i); }
//! <b>Effects</b>: Erases the range pointed to by b end e.
//!
@@ -1423,7 +1447,7 @@ class unordered_multiset_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased elements. No destructors are called.
void erase(const_iterator b, const_iterator e)
- { table_.erase(b, e); }
+ { table_type::erase(b, e); }
//! <b>Effects</b>: Erases all the elements with the given value.
//!
@@ -1437,7 +1461,7 @@ class unordered_multiset_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased elements. No destructors are called.
size_type erase(const_reference value)
- { return table_.erase(value); }
+ { return table_type::erase(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -1462,7 +1486,7 @@ class unordered_multiset_impl
//! to the erased elements. No destructors are called.
template<class KeyType, class KeyHasher, class KeyValueEqual>
size_type erase(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func)
- { return table_.erase(key, hash_func, equal_func); }
+ { return table_type::erase(key, hash_func, equal_func); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//!
@@ -1481,7 +1505,7 @@ class unordered_multiset_impl
, typename detail::enable_if_c<!detail::is_convertible<Disposer, const_iterator>::value >::type * = 0
/// @endcond
)
- { table_.erase_and_dispose(i, disposer); }
+ { table_type::erase_and_dispose(i, disposer); }
#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
template<class Disposer>
@@ -1503,7 +1527,7 @@ class unordered_multiset_impl
//! to the erased elements.
template<class Disposer>
void erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
- { table_.erase_and_dispose(b, e, disposer); }
+ { table_type::erase_and_dispose(b, e, disposer); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//!
@@ -1521,7 +1545,7 @@ class unordered_multiset_impl
//! to the erased elements. No destructors are called.
template<class Disposer>
size_type erase_and_dispose(const_reference value, Disposer disposer)
- { return table_.erase_and_dispose(value, disposer); }
+ { return table_type::erase_and_dispose(value, disposer); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//!
@@ -1540,7 +1564,7 @@ class unordered_multiset_impl
//! to the erased elements.
template<class KeyType, class KeyHasher, class KeyValueEqual, class Disposer>
size_type erase_and_dispose(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func, Disposer disposer)
- { return table_.erase_and_dispose(key, hash_func, equal_func, disposer); }
+ { return table_type::erase_and_dispose(key, hash_func, equal_func, disposer); }
//! <b>Effects</b>: Erases all the elements of the container.
//!
@@ -1552,7 +1576,7 @@ class unordered_multiset_impl
//! <b>Note</b>: Invalidates the iterators (but not the references)
//! to the erased elements. No destructors are called.
void clear()
- { return table_.clear(); }
+ { return table_type::clear(); }
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
//!
@@ -1567,7 +1591,7 @@ class unordered_multiset_impl
//! to the erased elements. No destructors are called.
template<class Disposer>
void clear_and_dispose(Disposer disposer)
- { return table_.clear_and_dispose(disposer); }
+ { return table_type::clear_and_dispose(disposer); }
//! <b>Effects</b>: Returns the number of contained elements with the given key
//!
@@ -1575,7 +1599,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
size_type count(const_reference value) const
- { return table_.count(value); }
+ { return table_type::count(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -1592,7 +1616,7 @@ class unordered_multiset_impl
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
template<class KeyType, class KeyHasher, class KeyValueEqual>
size_type count(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func) const
- { return table_.count(key, hash_func, equal_func); }
+ { return table_type::count(key, hash_func, equal_func); }
//! <b>Effects</b>: Finds an iterator to the first element whose value is
//! "value" or end() if that element does not exist.
@@ -1601,7 +1625,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
iterator find(const_reference value)
- { return table_.find(value); }
+ { return table_type::find(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -1624,7 +1648,7 @@ class unordered_multiset_impl
//! key type. Usually this key is part of the value_type.
template<class KeyType, class KeyHasher, class KeyValueEqual>
iterator find(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func)
- { return table_.find(key, hash_func, equal_func); }
+ { return table_type::find(key, hash_func, equal_func); }
//! <b>Effects</b>: Finds a const_iterator to the first element whose key is
//! "key" or end() if that element does not exist.
@@ -1633,7 +1657,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
const_iterator find(const_reference value) const
- { return table_.find(value); }
+ { return table_type::find(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -1656,7 +1680,7 @@ class unordered_multiset_impl
//! key type. Usually this key is part of the value_type.
template<class KeyType, class KeyHasher, class KeyValueEqual>
const_iterator find(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func) const
- { return table_.find(key, hash_func, equal_func); }
+ { return table_type::find(key, hash_func, equal_func); }
//! <b>Effects</b>: Returns a range containing all elements with values equivalent
//! to value. Returns std::make_pair(this->end(), this->end()) if no such
@@ -1666,7 +1690,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
std::pair<iterator,iterator> equal_range(const_reference value)
- { return table_.equal_range(value); }
+ { return table_type::equal_range(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -1691,7 +1715,7 @@ class unordered_multiset_impl
template<class KeyType, class KeyHasher, class KeyValueEqual>
std::pair<iterator,iterator> equal_range
(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func)
- { return table_.equal_range(key, hash_func, equal_func); }
+ { return table_type::equal_range(key, hash_func, equal_func); }
//! <b>Effects</b>: Returns a range containing all elements with values equivalent
//! to value. Returns std::make_pair(this->end(), this->end()) if no such
@@ -1702,7 +1726,7 @@ class unordered_multiset_impl
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
std::pair<const_iterator, const_iterator>
equal_range(const_reference value) const
- { return table_.equal_range(value); }
+ { return table_type::equal_range(value); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -1727,7 +1751,7 @@ class unordered_multiset_impl
template<class KeyType, class KeyHasher, class KeyValueEqual>
std::pair<const_iterator, const_iterator>
equal_range(const KeyType& key, KeyHasher hash_func, KeyValueEqual equal_func) const
- { return table_.equal_range(key, hash_func, equal_func); }
+ { return table_type::equal_range(key, hash_func, equal_func); }
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_multiset of
//! appropriate type. Otherwise the behavior is undefined.
@@ -1739,7 +1763,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: If the hash function throws.
iterator iterator_to(reference value)
- { return table_.iterator_to(value); }
+ { return table_type::iterator_to(value); }
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_multiset of
//! appropriate type. Otherwise the behavior is undefined.
@@ -1751,7 +1775,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: If the hash function throws.
const_iterator iterator_to(const_reference value) const
- { return table_.iterator_to(value); }
+ { return table_type::iterator_to(value); }
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
//! appropriate type. Otherwise the behavior is undefined.
@@ -1793,7 +1817,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
local_iterator local_iterator_to(reference value)
- { return table_.local_iterator_to(value); }
+ { return table_type::local_iterator_to(value); }
//! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
//! appropriate type. Otherwise the behavior is undefined.
@@ -1805,7 +1829,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
const_local_iterator local_iterator_to(const_reference value) const
- { return table_.local_iterator_to(value); }
+ { return table_type::local_iterator_to(value); }
//! <b>Effects</b>: Returns the number of buckets passed in the constructor
//! or the last rehash function.
@@ -1814,7 +1838,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
size_type bucket_count() const
- { return table_.bucket_count(); }
+ { return table_type::bucket_count(); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -1824,7 +1848,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
size_type bucket_size(size_type n) const
- { return table_.bucket_size(n); }
+ { return table_type::bucket_size(n); }
//! <b>Effects</b>: Returns the index of the bucket in which elements
//! with keys equivalent to k would be found, if any such element existed.
@@ -1835,7 +1859,7 @@ class unordered_multiset_impl
//!
//! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
size_type bucket(const value_type& k) const
- { return table_.bucket(k); }
+ { return table_type::bucket(k); }
//! <b>Requires</b>: "hash_func" must be a hash function that induces
//! the same hash values as the stored hasher. The difference is that
@@ -1851,7 +1875,7 @@ class unordered_multiset_impl
//! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
template<class KeyType, class KeyHasher>
size_type bucket(const KeyType& k, const KeyHasher &hash_func) const
- { return table_.bucket(k, hash_func); }
+ { return table_type::bucket(k, hash_func); }
//! <b>Effects</b>: Returns the bucket array pointer passed in the constructor
//! or the last rehash function.
@@ -1860,7 +1884,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: Nothing.
bucket_ptr bucket_pointer() const
- { return table_.bucket_pointer(); }
+ { return table_type::bucket_pointer(); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -1874,7 +1898,7 @@ class unordered_multiset_impl
//! <b>Note</b>: [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 table_.begin(n); }
+ { return table_type::begin(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -1888,7 +1912,7 @@ class unordered_multiset_impl
//! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
//! containing all of the elements in the nth bucket.
const_local_iterator begin(size_type n) const
- { return table_.begin(n); }
+ { return table_type::begin(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -1902,7 +1926,7 @@ class unordered_multiset_impl
//! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
//! containing all of the elements in the nth bucket.
const_local_iterator cbegin(size_type n) const
- { return table_.cbegin(n); }
+ { return table_type::cbegin(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -1916,7 +1940,7 @@ class unordered_multiset_impl
//! <b>Note</b>: [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 table_.end(n); }
+ { return table_type::end(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -1930,7 +1954,7 @@ class unordered_multiset_impl
//! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
//! containing all of the elements in the nth bucket.
const_local_iterator end(size_type n) const
- { return table_.end(n); }
+ { return table_type::end(n); }
//! <b>Requires</b>: n is in the range [0, this->bucket_count()).
//!
@@ -1944,7 +1968,7 @@ class unordered_multiset_impl
//! <b>Note</b>: [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 table_.cend(n); }
+ { return table_type::cend(n); }
//! <b>Requires</b>: 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
@@ -1960,7 +1984,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>: If the hasher functor throws.
void rehash(const bucket_traits &new_bucket_traits)
- { table_.rehash(new_bucket_traits); }
+ { table_type::rehash(new_bucket_traits); }
//! <b>Requires</b>:
//!
@@ -1972,11 +1996,11 @@ class unordered_multiset_impl
//!
//! <b>Note</b>: this method is only available if incremental<true> option is activated.
bool incremental_rehash(bool grow = true)
- { return table_.incremental_rehash(grow); }
+ { return table_type::incremental_rehash(grow); }
//! <b>Note</b>: this method is only available if incremental<true> option is activated.
bool incremental_rehash(const bucket_traits &new_bucket_traits)
- { return table_.incremental_rehash(new_bucket_traits); }
+ { return table_type::incremental_rehash(new_bucket_traits); }
//! <b>Requires</b>:
//!
@@ -1986,7 +2010,7 @@ class unordered_multiset_impl
//!
//! <b>Throws</b>:
size_type split_count() const
- { return table_.split_count(); }
+ { return table_type::split_count(); }
//! <b>Effects</b>: Returns the nearest new bucket count optimized for
//! the container that is bigger than n. This suggestion can be used
@@ -2011,6 +2035,8 @@ class unordered_multiset_impl
//! <b>Throws</b>: Nothing.
static size_type suggested_lower_bucket_count(size_type n)
{ return table_type::suggested_lower_bucket_count(n); }
+
+ #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
};
//! Helper metafunction to define an \c unordered_multiset that yields to the same type when the
@@ -2018,26 +2044,45 @@ class unordered_multiset_impl
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class T, class ...Options>
#else
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none
- , class O5 = none, class O6 = none
- , class O7 = none, class O8 = none
- , class O9 = none, class O10= none
+template<class T, class O1 = void, class O2 = void
+ , class O3 = void, class O4 = void
+ , class O5 = void, class O6 = void
+ , class O7 = void, class O8 = void
+ , class O9 = void, class O10= void
>
#endif
struct make_unordered_multiset
{
/// @cond
+ typedef typename pack_options
+ < hashtable_defaults,
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
+ O1, O2, O3, O4, O5, O6, O7, O8, O9, O10
+ #else
+ Options...
+ #endif
+ >::type packed_options;
+
+ typedef typename detail::get_value_traits
+ <T, typename packed_options::proto_value_traits>::type value_traits;
+
+ typedef typename make_bucket_traits
+ <T, true, packed_options>::type bucket_traits;
+
typedef unordered_multiset_impl
- < typename make_hashtable_opt
- <T, false,
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
- O1, O2, O3, O4, O5, O6, O7, O8, O9, O10
- #else
- Options...
- #endif
- >::type
+ < value_traits
+ , typename packed_options::hash
+ , typename packed_options::equal
+ , typename packed_options::size_type
+ , bucket_traits
+ , (std::size_t(false)*hash_bool_flags::unique_keys_pos)
+ | (std::size_t(packed_options::constant_time_size)*hash_bool_flags::constant_time_size_pos)
+ | (std::size_t(packed_options::power_2_buckets)*hash_bool_flags::power_2_buckets_pos)
+ | (std::size_t(packed_options::cache_begin)*hash_bool_flags::cache_begin_pos)
+ | (std::size_t(packed_options::compare_hash)*hash_bool_flags::compare_hash_pos)
+ | (std::size_t(packed_options::incremental)*hash_bool_flags::incremental_pos)
> implementation_defined;
+
/// @endcond
typedef implementation_defined type;
};
@@ -2080,10 +2125,10 @@ class unordered_multiset
typedef typename Base::hasher hasher;
typedef typename Base::key_equal key_equal;
- unordered_multiset( const bucket_traits &b_traits
- , const hasher & hash_func = hasher()
- , const key_equal &equal_func = key_equal()
- , const value_traits &v_traits = value_traits())
+ explicit unordered_multiset( const bucket_traits &b_traits
+ , const hasher & hash_func = hasher()
+ , const key_equal &equal_func = key_equal()
+ , const value_traits &v_traits = value_traits())
: Base(b_traits, hash_func, equal_func, v_traits)
{}
@@ -2102,7 +2147,7 @@ class unordered_multiset
{}
unordered_multiset& operator=(BOOST_RV_REF(unordered_multiset) x)
- { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
+ { return static_cast<unordered_multiset&>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); }
};
#endif
diff --git a/3party/boost/boost/intrusive/unordered_set_hook.hpp b/3party/boost/boost/intrusive/unordered_set_hook.hpp
index c7e95b222c..a7ef283319 100644
--- a/3party/boost/boost/intrusive/unordered_set_hook.hpp
+++ b/3party/boost/boost/intrusive/unordered_set_hook.hpp
@@ -1,7 +1,7 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Olaf Krzikalla 2004-2006.
-// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Ion Gaztanaga 2006-2013
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -16,12 +16,10 @@
#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/intrusive/intrusive_fwd.hpp>
-#include <boost/pointer_cast.hpp>
#include <boost/intrusive/detail/utilities.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/slist_hook.hpp>
#include <boost/intrusive/options.hpp>
-#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/detail/generic_hook.hpp>
namespace boost {
@@ -81,9 +79,7 @@ struct unordered_node_traits
static const bool optimize_multikey = OptimizeMultiKey;
static node_ptr get_next(const const_node_ptr & n)
- {
- return pointer_traits<node_ptr>::pointer_to(static_cast<node&>(*n->next_));
- }
+ { return pointer_traits<node_ptr>::static_cast_from(n->next_); }
static void set_next(const node_ptr & n, const node_ptr & next)
{ n->next_ = next; }
@@ -120,8 +116,12 @@ struct unordered_algorithms
: public circular_slist_algorithms<NodeTraits>
{
typedef circular_slist_algorithms<NodeTraits> base_type;
- typedef unordered_group_adapter<NodeTraits> group_traits;
+ typedef unordered_group_adapter<NodeTraits> group_traits;
typedef circular_slist_algorithms<group_traits> group_algorithms;
+ typedef NodeTraits node_traits;
+ typedef typename NodeTraits::node node;
+ typedef typename NodeTraits::node_ptr node_ptr;
+ typedef typename NodeTraits::const_node_ptr const_node_ptr;
static void init(typename base_type::node_ptr n)
{
@@ -163,7 +163,7 @@ struct get_uset_node_algo
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none, class O4 = none>
+template<class O1 = void, class O2 = void, class O3 = void, class O4 = void>
#endif
struct make_unordered_set_base_hook
{
@@ -177,14 +177,14 @@ struct make_unordered_set_base_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_uset_node_algo<typename packed_options::void_pointer
, packed_options::store_hash
, packed_options::optimize_multikey
>
, typename packed_options::tag
, packed_options::link_mode
- , detail::UsetBaseHook
+ , HashBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -203,7 +203,7 @@ struct make_unordered_set_base_hook
//! unique tag.
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
//!
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
//! \c auto_unlink or \c safe_link).
@@ -302,7 +302,7 @@ class unordered_set_base_hook
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
template<class ...Options>
#else
-template<class O1 = none, class O2 = none, class O3 = none, class O4 = none>
+template<class O1 = void, class O2 = void, class O3 = void, class O4 = void>
#endif
struct make_unordered_set_member_hook
{
@@ -316,14 +316,14 @@ struct make_unordered_set_member_hook
#endif
>::type packed_options;
- typedef detail::generic_hook
+ typedef generic_hook
< get_uset_node_algo< typename packed_options::void_pointer
, packed_options::store_hash
, packed_options::optimize_multikey
>
, member_tag
, packed_options::link_mode
- , detail::NoBaseHook
+ , NoBaseHookId
> implementation_defined;
/// @endcond
typedef implementation_defined type;
@@ -337,7 +337,7 @@ struct make_unordered_set_member_hook
//! \c link_mode<> and \c store_hash<>.
//!
//! \c void_pointer<> is the pointer type that will be used internally in the hook
-//! and the the container configured to use this hook.
+//! and the container configured to use this hook.
//!
//! \c link_mode<> will specify the linking mode of the hook (\c normal_link,
//! \c auto_unlink or \c safe_link).
diff --git a/3party/boost/boost/iostreams/char_traits.hpp b/3party/boost/boost/iostreams/char_traits.hpp
index 4234907e47..4234907e47 100644..100755
--- a/3party/boost/boost/iostreams/char_traits.hpp
+++ b/3party/boost/boost/iostreams/char_traits.hpp
diff --git a/3party/boost/boost/iostreams/concepts.hpp b/3party/boost/boost/iostreams/concepts.hpp
index 1ea104e1c6..1ea104e1c6 100644..100755
--- a/3party/boost/boost/iostreams/concepts.hpp
+++ b/3party/boost/boost/iostreams/concepts.hpp
diff --git a/3party/boost/boost/iostreams/constants.hpp b/3party/boost/boost/iostreams/constants.hpp
index 85eb7e7cc8..85eb7e7cc8 100644..100755
--- a/3party/boost/boost/iostreams/constants.hpp
+++ b/3party/boost/boost/iostreams/constants.hpp
diff --git a/3party/boost/boost/iostreams/copy.hpp b/3party/boost/boost/iostreams/copy.hpp
index b9f748a461..b9f748a461 100644..100755
--- a/3party/boost/boost/iostreams/copy.hpp
+++ b/3party/boost/boost/iostreams/copy.hpp
diff --git a/3party/boost/boost/iostreams/detail/absolute_path.hpp b/3party/boost/boost/iostreams/detail/absolute_path.hpp
index 090958a95e..090958a95e 100644..100755
--- a/3party/boost/boost/iostreams/detail/absolute_path.hpp
+++ b/3party/boost/boost/iostreams/detail/absolute_path.hpp
diff --git a/3party/boost/boost/iostreams/detail/access_control.hpp b/3party/boost/boost/iostreams/detail/access_control.hpp
index 2dce6ca8c2..2dce6ca8c2 100644..100755
--- a/3party/boost/boost/iostreams/detail/access_control.hpp
+++ b/3party/boost/boost/iostreams/detail/access_control.hpp
diff --git a/3party/boost/boost/iostreams/detail/adapter/device_adapter.hpp b/3party/boost/boost/iostreams/detail/adapter/device_adapter.hpp
index 9dd723a0fd..9dd723a0fd 100644..100755
--- a/3party/boost/boost/iostreams/detail/adapter/device_adapter.hpp
+++ b/3party/boost/boost/iostreams/detail/adapter/device_adapter.hpp
diff --git a/3party/boost/boost/iostreams/detail/adapter/filter_adapter.hpp b/3party/boost/boost/iostreams/detail/adapter/filter_adapter.hpp
index a2ab49250b..a2ab49250b 100644..100755
--- a/3party/boost/boost/iostreams/detail/adapter/filter_adapter.hpp
+++ b/3party/boost/boost/iostreams/detail/adapter/filter_adapter.hpp
diff --git a/3party/boost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp b/3party/boost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp
index 1457032c71..1457032c71 100644..100755
--- a/3party/boost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp
+++ b/3party/boost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp
diff --git a/3party/boost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp b/3party/boost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp
index 2944f25d75..2944f25d75 100644..100755
--- a/3party/boost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp
+++ b/3party/boost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp
diff --git a/3party/boost/boost/iostreams/detail/add_facet.hpp b/3party/boost/boost/iostreams/detail/add_facet.hpp
index 65a8951444..65a8951444 100644..100755
--- a/3party/boost/boost/iostreams/detail/add_facet.hpp
+++ b/3party/boost/boost/iostreams/detail/add_facet.hpp
diff --git a/3party/boost/boost/iostreams/detail/bool_trait_def.hpp b/3party/boost/boost/iostreams/detail/bool_trait_def.hpp
index c3fb9d587b..c3fb9d587b 100644..100755
--- a/3party/boost/boost/iostreams/detail/bool_trait_def.hpp
+++ b/3party/boost/boost/iostreams/detail/bool_trait_def.hpp
diff --git a/3party/boost/boost/iostreams/detail/broken_overload_resolution/forward.hpp b/3party/boost/boost/iostreams/detail/broken_overload_resolution/forward.hpp
index 4444916c3a..4444916c3a 100644..100755
--- a/3party/boost/boost/iostreams/detail/broken_overload_resolution/forward.hpp
+++ b/3party/boost/boost/iostreams/detail/broken_overload_resolution/forward.hpp
diff --git a/3party/boost/boost/iostreams/detail/call_traits.hpp b/3party/boost/boost/iostreams/detail/call_traits.hpp
index 6b04c7a656..6b04c7a656 100644..100755
--- a/3party/boost/boost/iostreams/detail/call_traits.hpp
+++ b/3party/boost/boost/iostreams/detail/call_traits.hpp
diff --git a/3party/boost/boost/iostreams/detail/char_traits.hpp b/3party/boost/boost/iostreams/detail/char_traits.hpp
index 2ee2fd0d4f..2ee2fd0d4f 100644..100755
--- a/3party/boost/boost/iostreams/detail/char_traits.hpp
+++ b/3party/boost/boost/iostreams/detail/char_traits.hpp
diff --git a/3party/boost/boost/iostreams/detail/codecvt_holder.hpp b/3party/boost/boost/iostreams/detail/codecvt_holder.hpp
index 6d6e1cf179..6d6e1cf179 100644..100755
--- a/3party/boost/boost/iostreams/detail/codecvt_holder.hpp
+++ b/3party/boost/boost/iostreams/detail/codecvt_holder.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/auto_link.hpp b/3party/boost/boost/iostreams/detail/config/auto_link.hpp
index 55f954b64f..55f954b64f 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/auto_link.hpp
+++ b/3party/boost/boost/iostreams/detail/config/auto_link.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/bzip2.hpp b/3party/boost/boost/iostreams/detail/config/bzip2.hpp
index d716fd169c..d716fd169c 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/bzip2.hpp
+++ b/3party/boost/boost/iostreams/detail/config/bzip2.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/codecvt.hpp b/3party/boost/boost/iostreams/detail/config/codecvt.hpp
index 7c6cb1f385..7c6cb1f385 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/codecvt.hpp
+++ b/3party/boost/boost/iostreams/detail/config/codecvt.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/dyn_link.hpp b/3party/boost/boost/iostreams/detail/config/dyn_link.hpp
index 518e0b03ce..518e0b03ce 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/dyn_link.hpp
+++ b/3party/boost/boost/iostreams/detail/config/dyn_link.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/enable_warnings.hpp b/3party/boost/boost/iostreams/detail/config/enable_warnings.hpp
index 5712f36442..5712f36442 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/enable_warnings.hpp
+++ b/3party/boost/boost/iostreams/detail/config/enable_warnings.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/limits.hpp b/3party/boost/boost/iostreams/detail/config/limits.hpp
index 155d6b0a69..155d6b0a69 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/limits.hpp
+++ b/3party/boost/boost/iostreams/detail/config/limits.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/overload_resolution.hpp b/3party/boost/boost/iostreams/detail/config/overload_resolution.hpp
index bbdd442788..bbdd442788 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/overload_resolution.hpp
+++ b/3party/boost/boost/iostreams/detail/config/overload_resolution.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/wide_streams.hpp b/3party/boost/boost/iostreams/detail/config/wide_streams.hpp
index 425875e1f8..425875e1f8 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/wide_streams.hpp
+++ b/3party/boost/boost/iostreams/detail/config/wide_streams.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/windows_posix.hpp b/3party/boost/boost/iostreams/detail/config/windows_posix.hpp
index 4e73c50d0d..4e73c50d0d 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/windows_posix.hpp
+++ b/3party/boost/boost/iostreams/detail/config/windows_posix.hpp
diff --git a/3party/boost/boost/iostreams/detail/config/zlib.hpp b/3party/boost/boost/iostreams/detail/config/zlib.hpp
index 9283e4caa9..9283e4caa9 100644..100755
--- a/3party/boost/boost/iostreams/detail/config/zlib.hpp
+++ b/3party/boost/boost/iostreams/detail/config/zlib.hpp
diff --git a/3party/boost/boost/iostreams/detail/counted_array.hpp b/3party/boost/boost/iostreams/detail/counted_array.hpp
index d37193e7ab..d37193e7ab 100644..100755
--- a/3party/boost/boost/iostreams/detail/counted_array.hpp
+++ b/3party/boost/boost/iostreams/detail/counted_array.hpp
diff --git a/3party/boost/boost/iostreams/detail/default_arg.hpp b/3party/boost/boost/iostreams/detail/default_arg.hpp
index 9364ca27fa..9364ca27fa 100644..100755
--- a/3party/boost/boost/iostreams/detail/default_arg.hpp
+++ b/3party/boost/boost/iostreams/detail/default_arg.hpp
diff --git a/3party/boost/boost/iostreams/detail/dispatch.hpp b/3party/boost/boost/iostreams/detail/dispatch.hpp
index b482e04319..b482e04319 100644..100755
--- a/3party/boost/boost/iostreams/detail/dispatch.hpp
+++ b/3party/boost/boost/iostreams/detail/dispatch.hpp
diff --git a/3party/boost/boost/iostreams/detail/double_object.hpp b/3party/boost/boost/iostreams/detail/double_object.hpp
index 69f6587753..69f6587753 100644..100755
--- a/3party/boost/boost/iostreams/detail/double_object.hpp
+++ b/3party/boost/boost/iostreams/detail/double_object.hpp
diff --git a/3party/boost/boost/iostreams/detail/enable_if_stream.hpp b/3party/boost/boost/iostreams/detail/enable_if_stream.hpp
index 2cdd7068cb..2cdd7068cb 100644..100755
--- a/3party/boost/boost/iostreams/detail/enable_if_stream.hpp
+++ b/3party/boost/boost/iostreams/detail/enable_if_stream.hpp
diff --git a/3party/boost/boost/iostreams/detail/error.hpp b/3party/boost/boost/iostreams/detail/error.hpp
index 57999d4ef5..57999d4ef5 100644..100755
--- a/3party/boost/boost/iostreams/detail/error.hpp
+++ b/3party/boost/boost/iostreams/detail/error.hpp
diff --git a/3party/boost/boost/iostreams/detail/execute.hpp b/3party/boost/boost/iostreams/detail/execute.hpp
index 14d1a48f80..14d1a48f80 100644..100755
--- a/3party/boost/boost/iostreams/detail/execute.hpp
+++ b/3party/boost/boost/iostreams/detail/execute.hpp
diff --git a/3party/boost/boost/iostreams/detail/fstream.hpp b/3party/boost/boost/iostreams/detail/fstream.hpp
index b8070a7291..b8070a7291 100644..100755
--- a/3party/boost/boost/iostreams/detail/fstream.hpp
+++ b/3party/boost/boost/iostreams/detail/fstream.hpp
diff --git a/3party/boost/boost/iostreams/detail/functional.hpp b/3party/boost/boost/iostreams/detail/functional.hpp
index a7b9b6bbb1..a7b9b6bbb1 100644..100755
--- a/3party/boost/boost/iostreams/detail/functional.hpp
+++ b/3party/boost/boost/iostreams/detail/functional.hpp
diff --git a/3party/boost/boost/iostreams/detail/ios.hpp b/3party/boost/boost/iostreams/detail/ios.hpp
index 4d34f8fdb0..4d34f8fdb0 100644..100755
--- a/3party/boost/boost/iostreams/detail/ios.hpp
+++ b/3party/boost/boost/iostreams/detail/ios.hpp
diff --git a/3party/boost/boost/iostreams/detail/iostream.hpp b/3party/boost/boost/iostreams/detail/iostream.hpp
index 45692b35a0..45692b35a0 100644..100755
--- a/3party/boost/boost/iostreams/detail/iostream.hpp
+++ b/3party/boost/boost/iostreams/detail/iostream.hpp
diff --git a/3party/boost/boost/iostreams/detail/newline.hpp b/3party/boost/boost/iostreams/detail/newline.hpp
index 41b5b5268d..41b5b5268d 100644..100755
--- a/3party/boost/boost/iostreams/detail/newline.hpp
+++ b/3party/boost/boost/iostreams/detail/newline.hpp
diff --git a/3party/boost/boost/iostreams/detail/param_type.hpp b/3party/boost/boost/iostreams/detail/param_type.hpp
index c10f1d8bb2..c10f1d8bb2 100644..100755
--- a/3party/boost/boost/iostreams/detail/param_type.hpp
+++ b/3party/boost/boost/iostreams/detail/param_type.hpp
diff --git a/3party/boost/boost/iostreams/detail/push.hpp b/3party/boost/boost/iostreams/detail/push.hpp
index c1e7d9aa5e..c1e7d9aa5e 100644..100755
--- a/3party/boost/boost/iostreams/detail/push.hpp
+++ b/3party/boost/boost/iostreams/detail/push.hpp
diff --git a/3party/boost/boost/iostreams/detail/select.hpp b/3party/boost/boost/iostreams/detail/select.hpp
index bfe1d09dea..bfe1d09dea 100644..100755
--- a/3party/boost/boost/iostreams/detail/select.hpp
+++ b/3party/boost/boost/iostreams/detail/select.hpp
diff --git a/3party/boost/boost/iostreams/detail/streambuf.hpp b/3party/boost/boost/iostreams/detail/streambuf.hpp
index 49a48ce38f..49a48ce38f 100644..100755
--- a/3party/boost/boost/iostreams/detail/streambuf.hpp
+++ b/3party/boost/boost/iostreams/detail/streambuf.hpp
diff --git a/3party/boost/boost/iostreams/detail/streambuf/linked_streambuf.hpp b/3party/boost/boost/iostreams/detail/streambuf/linked_streambuf.hpp
index 10aedb89df..10aedb89df 100644..100755
--- a/3party/boost/boost/iostreams/detail/streambuf/linked_streambuf.hpp
+++ b/3party/boost/boost/iostreams/detail/streambuf/linked_streambuf.hpp
diff --git a/3party/boost/boost/iostreams/detail/template_params.hpp b/3party/boost/boost/iostreams/detail/template_params.hpp
index b07012fb82..b07012fb82 100644..100755
--- a/3party/boost/boost/iostreams/detail/template_params.hpp
+++ b/3party/boost/boost/iostreams/detail/template_params.hpp
diff --git a/3party/boost/boost/iostreams/detail/translate_int_type.hpp b/3party/boost/boost/iostreams/detail/translate_int_type.hpp
index 88b9341f74..88b9341f74 100644..100755
--- a/3party/boost/boost/iostreams/detail/translate_int_type.hpp
+++ b/3party/boost/boost/iostreams/detail/translate_int_type.hpp
diff --git a/3party/boost/boost/iostreams/detail/vc6/close.hpp b/3party/boost/boost/iostreams/detail/vc6/close.hpp
index f8936742b7..f8936742b7 100644..100755
--- a/3party/boost/boost/iostreams/detail/vc6/close.hpp
+++ b/3party/boost/boost/iostreams/detail/vc6/close.hpp
diff --git a/3party/boost/boost/iostreams/detail/vc6/read.hpp b/3party/boost/boost/iostreams/detail/vc6/read.hpp
index 1e01f665b9..1e01f665b9 100644..100755
--- a/3party/boost/boost/iostreams/detail/vc6/read.hpp
+++ b/3party/boost/boost/iostreams/detail/vc6/read.hpp
diff --git a/3party/boost/boost/iostreams/detail/vc6/write.hpp b/3party/boost/boost/iostreams/detail/vc6/write.hpp
index ee8b9488ff..ee8b9488ff 100644..100755
--- a/3party/boost/boost/iostreams/detail/vc6/write.hpp
+++ b/3party/boost/boost/iostreams/detail/vc6/write.hpp
diff --git a/3party/boost/boost/iostreams/detail/wrap_unwrap.hpp b/3party/boost/boost/iostreams/detail/wrap_unwrap.hpp
index 6e3d231422..6e3d231422 100644..100755
--- a/3party/boost/boost/iostreams/detail/wrap_unwrap.hpp
+++ b/3party/boost/boost/iostreams/detail/wrap_unwrap.hpp
diff --git a/3party/boost/boost/iostreams/device/array.hpp b/3party/boost/boost/iostreams/device/array.hpp
index 3e08f04470..3e08f04470 100644..100755
--- a/3party/boost/boost/iostreams/device/array.hpp
+++ b/3party/boost/boost/iostreams/device/array.hpp
diff --git a/3party/boost/boost/iostreams/device/back_inserter.hpp b/3party/boost/boost/iostreams/device/back_inserter.hpp
index 563e397918..563e397918 100644..100755
--- a/3party/boost/boost/iostreams/device/back_inserter.hpp
+++ b/3party/boost/boost/iostreams/device/back_inserter.hpp
diff --git a/3party/boost/boost/iostreams/device/null.hpp b/3party/boost/boost/iostreams/device/null.hpp
index 6a723218e6..6a723218e6 100644..100755
--- a/3party/boost/boost/iostreams/device/null.hpp
+++ b/3party/boost/boost/iostreams/device/null.hpp
diff --git a/3party/boost/boost/iostreams/filter/regex.hpp b/3party/boost/boost/iostreams/filter/regex.hpp
index e6efd6d8ae..e6efd6d8ae 100644..100755
--- a/3party/boost/boost/iostreams/filter/regex.hpp
+++ b/3party/boost/boost/iostreams/filter/regex.hpp
diff --git a/3party/boost/boost/iostreams/filter/stdio.hpp b/3party/boost/boost/iostreams/filter/stdio.hpp
index e2addf569c..e2addf569c 100644..100755
--- a/3party/boost/boost/iostreams/filter/stdio.hpp
+++ b/3party/boost/boost/iostreams/filter/stdio.hpp
diff --git a/3party/boost/boost/iostreams/filtering_stream.hpp b/3party/boost/boost/iostreams/filtering_stream.hpp
index 548ef0c60a..548ef0c60a 100644..100755
--- a/3party/boost/boost/iostreams/filtering_stream.hpp
+++ b/3party/boost/boost/iostreams/filtering_stream.hpp
diff --git a/3party/boost/boost/iostreams/filtering_streambuf.hpp b/3party/boost/boost/iostreams/filtering_streambuf.hpp
index e49bf612ee..e49bf612ee 100644..100755
--- a/3party/boost/boost/iostreams/filtering_streambuf.hpp
+++ b/3party/boost/boost/iostreams/filtering_streambuf.hpp
diff --git a/3party/boost/boost/iostreams/flush.hpp b/3party/boost/boost/iostreams/flush.hpp
index 73d160051c..73d160051c 100644..100755
--- a/3party/boost/boost/iostreams/flush.hpp
+++ b/3party/boost/boost/iostreams/flush.hpp
diff --git a/3party/boost/boost/iostreams/get.hpp b/3party/boost/boost/iostreams/get.hpp
index bb82204b79..bb82204b79 100644..100755
--- a/3party/boost/boost/iostreams/get.hpp
+++ b/3party/boost/boost/iostreams/get.hpp
diff --git a/3party/boost/boost/iostreams/imbue.hpp b/3party/boost/boost/iostreams/imbue.hpp
index 608481a505..608481a505 100644..100755
--- a/3party/boost/boost/iostreams/imbue.hpp
+++ b/3party/boost/boost/iostreams/imbue.hpp
diff --git a/3party/boost/boost/iostreams/input_sequence.hpp b/3party/boost/boost/iostreams/input_sequence.hpp
index 8e0e77b4f6..8e0e77b4f6 100644..100755
--- a/3party/boost/boost/iostreams/input_sequence.hpp
+++ b/3party/boost/boost/iostreams/input_sequence.hpp
diff --git a/3party/boost/boost/iostreams/operations.hpp b/3party/boost/boost/iostreams/operations.hpp
index 5da1610816..5da1610816 100644..100755
--- a/3party/boost/boost/iostreams/operations.hpp
+++ b/3party/boost/boost/iostreams/operations.hpp
diff --git a/3party/boost/boost/iostreams/operations_fwd.hpp b/3party/boost/boost/iostreams/operations_fwd.hpp
index e2380b12f9..e2380b12f9 100644..100755
--- a/3party/boost/boost/iostreams/operations_fwd.hpp
+++ b/3party/boost/boost/iostreams/operations_fwd.hpp
diff --git a/3party/boost/boost/iostreams/optimal_buffer_size.hpp b/3party/boost/boost/iostreams/optimal_buffer_size.hpp
index 79715b2cb8..79715b2cb8 100644..100755
--- a/3party/boost/boost/iostreams/optimal_buffer_size.hpp
+++ b/3party/boost/boost/iostreams/optimal_buffer_size.hpp
diff --git a/3party/boost/boost/iostreams/output_sequence.hpp b/3party/boost/boost/iostreams/output_sequence.hpp
index 36bd7e523b..36bd7e523b 100644..100755
--- a/3party/boost/boost/iostreams/output_sequence.hpp
+++ b/3party/boost/boost/iostreams/output_sequence.hpp
diff --git a/3party/boost/boost/iostreams/pipeline.hpp b/3party/boost/boost/iostreams/pipeline.hpp
index 1573e160c2..1573e160c2 100644..100755
--- a/3party/boost/boost/iostreams/pipeline.hpp
+++ b/3party/boost/boost/iostreams/pipeline.hpp
diff --git a/3party/boost/boost/iostreams/put.hpp b/3party/boost/boost/iostreams/put.hpp
index 5ad96ce629..5ad96ce629 100644..100755
--- a/3party/boost/boost/iostreams/put.hpp
+++ b/3party/boost/boost/iostreams/put.hpp
diff --git a/3party/boost/boost/iostreams/putback.hpp b/3party/boost/boost/iostreams/putback.hpp
index d0fabb311c..d0fabb311c 100644..100755
--- a/3party/boost/boost/iostreams/putback.hpp
+++ b/3party/boost/boost/iostreams/putback.hpp
diff --git a/3party/boost/boost/iostreams/read.hpp b/3party/boost/boost/iostreams/read.hpp
index 4443b62804..4443b62804 100644..100755
--- a/3party/boost/boost/iostreams/read.hpp
+++ b/3party/boost/boost/iostreams/read.hpp
diff --git a/3party/boost/boost/iostreams/restrict.hpp b/3party/boost/boost/iostreams/restrict.hpp
index e17eb8c965..e17eb8c965 100644..100755
--- a/3party/boost/boost/iostreams/restrict.hpp
+++ b/3party/boost/boost/iostreams/restrict.hpp
diff --git a/3party/boost/boost/iostreams/seek.hpp b/3party/boost/boost/iostreams/seek.hpp
index efa3c7daf0..efa3c7daf0 100644..100755
--- a/3party/boost/boost/iostreams/seek.hpp
+++ b/3party/boost/boost/iostreams/seek.hpp
diff --git a/3party/boost/boost/iostreams/traits_fwd.hpp b/3party/boost/boost/iostreams/traits_fwd.hpp
index 7114f89b36..7114f89b36 100644..100755
--- a/3party/boost/boost/iostreams/traits_fwd.hpp
+++ b/3party/boost/boost/iostreams/traits_fwd.hpp
diff --git a/3party/boost/boost/iterator.hpp b/3party/boost/boost/iterator.hpp
index 6adab0e695..c9c6197950 100644
--- a/3party/boost/boost/iterator.hpp
+++ b/3party/boost/boost/iterator.hpp
@@ -1,59 +1,20 @@
-// iterator.hpp workarounds for non-conforming standard libraries ---------//
-
// (C) Copyright Beman Dawes 2000. 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/utility for documentation.
-
-// Revision History
-// 12 Jan 01 added <cstddef> for std::ptrdiff_t (Jens Maurer)
-// 28 Jun 00 Workarounds to deal with known MSVC bugs (David Abrahams)
-// 26 Jun 00 Initial version (Jeremy Siek)
-
#ifndef BOOST_ITERATOR_HPP
#define BOOST_ITERATOR_HPP
+// This header is obsolete and will be deprecated.
+
#include <iterator>
#include <cstddef> // std::ptrdiff_t
-#include <boost/config.hpp>
namespace boost
{
-# if defined(BOOST_NO_STD_ITERATOR) && !defined(BOOST_MSVC_STD_ITERATOR)
- template <class Category, class T,
- class Distance = std::ptrdiff_t,
- class Pointer = T*, class Reference = T&>
- struct iterator
- {
- typedef T value_type;
- typedef Distance difference_type;
- typedef Pointer pointer;
- typedef Reference reference;
- typedef Category iterator_category;
- };
-# else
- // declare iterator_base in namespace detail to work around MSVC bugs which
- // prevent derivation from an identically-named class in a different namespace.
- namespace detail {
- template <class Category, class T, class Distance, class Pointer, class Reference>
-# if !defined(BOOST_MSVC_STD_ITERATOR)
- struct iterator_base : std::iterator<Category, T, Distance, Pointer, Reference> {};
-# else
- struct iterator_base : std::iterator<Category, T, Distance>
- {
- typedef Reference reference;
- typedef Pointer pointer;
- typedef Distance difference_type;
- };
-# endif
- }
+using std::iterator;
- template <class Category, class T, class Distance = std::ptrdiff_t,
- class Pointer = T*, class Reference = T&>
- struct iterator : boost::detail::iterator_base<Category, T, Distance, Pointer, Reference> {};
-# endif
} // namespace boost
#endif // BOOST_ITERATOR_HPP
diff --git a/3party/boost/boost/iterator/detail/any_conversion_eater.hpp b/3party/boost/boost/iterator/detail/any_conversion_eater.hpp
index 25fa644889..25fa644889 100644..100755
--- a/3party/boost/boost/iterator/detail/any_conversion_eater.hpp
+++ b/3party/boost/boost/iterator/detail/any_conversion_eater.hpp
diff --git a/3party/boost/boost/iterator/detail/facade_iterator_category.hpp b/3party/boost/boost/iterator/detail/facade_iterator_category.hpp
index 2c4771d5aa..04b393acf9 100644
--- a/3party/boost/boost/iterator/detail/facade_iterator_category.hpp
+++ b/3party/boost/boost/iterator/detail/facade_iterator_category.hpp
@@ -73,16 +73,10 @@ struct iterator_writability_disabled
// Convert an iterator_facade's traversal category, Value parameter,
// and ::reference type to an appropriate old-style category.
//
-// If writability has been disabled per the above metafunction, the
-// result will not be convertible to output_iterator_tag.
-//
-// Otherwise, if Traversal == single_pass_traversal_tag, the following
-// conditions will result in a tag that is convertible both to
-// input_iterator_tag and output_iterator_tag:
-//
-// 1. Reference is a reference to non-const
-// 2. Reference is not a reference and is convertible to Value
+// Due to changeset 21683, this now never results in a category convertible
+// to output_iterator_tag.
//
+// Change at: https://svn.boost.org/trac/boost/changeset/21683
template <class Traversal, class ValueParam, class Reference>
struct iterator_facade_default_category
: mpl::eval_if<
diff --git a/3party/boost/boost/iterator/detail/minimum_category.hpp b/3party/boost/boost/iterator/detail/minimum_category.hpp
index 96501ddd46..96501ddd46 100644..100755
--- a/3party/boost/boost/iterator/detail/minimum_category.hpp
+++ b/3party/boost/boost/iterator/detail/minimum_category.hpp
diff --git a/3party/boost/boost/iterator/detail/operator_brackets_dispatch.hpp b/3party/boost/boost/iterator/detail/operator_brackets_dispatch.hpp
new file mode 100644
index 0000000000..fdbd929549
--- /dev/null
+++ b/3party/boost/boost/iterator/detail/operator_brackets_dispatch.hpp
@@ -0,0 +1,88 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 2002.
+// (C) Copyright Jeffrey Lee Hellrung, Jr. 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)
+#ifndef BOOST_OPERATOR_BRACKETS_DISPATCH_07102012JLH_HPP
+#define BOOST_OPERATOR_BRACKETS_DISPATCH_07102012JLH_HPP
+
+#include <boost/iterator/detail/facade_iterator_category.hpp>
+
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace detail {
+
+// operator[] must return a proxy in case iterator destruction invalidates
+// referents.
+// To see why, consider the following implementation of operator[]:
+// reference operator[](difference_type n) const
+// { return *(*this + n); }
+// The problem here is that operator[] would return a reference created from
+// a temporary iterator.
+
+template <class Value>
+struct operator_brackets_value
+{
+ typedef Value result_type;
+ template <class Iterator>
+ static result_type apply(Iterator const & i)
+ { return *i; }
+};
+
+template <class Iterator, class Reference>
+struct operator_brackets_const_proxy
+{
+ class result_type
+ {
+ Iterator const m_i;
+ explicit result_type(Iterator const & i) : m_i(i) { }
+ friend struct operator_brackets_const_proxy;
+ void operator=(result_type&);
+ public:
+ operator Reference() const { return *m_i; }
+ };
+ static result_type apply(Iterator const & i)
+ { return result_type(i); }
+};
+
+template <class Iterator, class Reference>
+struct operator_brackets_proxy
+{
+ class result_type
+ {
+ Iterator const m_i;
+ explicit result_type(Iterator const & i) : m_i(i) { }
+ friend struct operator_brackets_proxy;
+ void operator=(result_type&);
+ public:
+ operator Reference() const { return *m_i; }
+ operator_brackets_proxy const & operator=(
+ typename Iterator::value_type const & x) const
+ { *m_i = x; return *this; }
+ };
+ static result_type apply(Iterator const & i)
+ { return result_type(i); }
+};
+
+template <class Iterator, class ValueType, class Reference>
+struct operator_brackets_dispatch
+{
+ typedef typename mpl::if_c<
+ iterator_writability_disabled<ValueType,Reference>::value,
+ typename mpl::if_c<
+ boost::is_POD<ValueType>::value,
+ operator_brackets_value<typename boost::remove_const<ValueType>::type>,
+ operator_brackets_const_proxy<Iterator,Reference>
+ >::type,
+ operator_brackets_proxy<Iterator,Reference>
+ >::type type;
+};
+
+} } // namespace detail / namespace boost
+
+#endif // #ifndef BOOST_OPERATOR_BRACKETS_DISPATCH_07102012JLH_HPP
diff --git a/3party/boost/boost/iterator/is_lvalue_iterator.hpp b/3party/boost/boost/iterator/is_lvalue_iterator.hpp
index 3beb90df6d..3beb90df6d 100644..100755
--- a/3party/boost/boost/iterator/is_lvalue_iterator.hpp
+++ b/3party/boost/boost/iterator/is_lvalue_iterator.hpp
diff --git a/3party/boost/boost/iterator/is_readable_iterator.hpp b/3party/boost/boost/iterator/is_readable_iterator.hpp
index 60d6ff07f5..60d6ff07f5 100644..100755
--- a/3party/boost/boost/iterator/is_readable_iterator.hpp
+++ b/3party/boost/boost/iterator/is_readable_iterator.hpp
diff --git a/3party/boost/boost/lexical_cast.hpp b/3party/boost/boost/lexical_cast.hpp
index 66e53700d4..814b69e43a 100644
--- a/3party/boost/boost/lexical_cast.hpp
+++ b/3party/boost/boost/lexical_cast.hpp
@@ -3,7 +3,7 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -19,7 +19,7 @@
// Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
// Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
// Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
-// when: November 2000, March 2003, June 2005, June 2006, March 2011 - 2013
+// when: November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
#include <boost/config.hpp>
#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING)
@@ -69,11 +69,6 @@
throw_exception(bad_lexical_cast(typeid(Source), typeid(Target)))
#endif
-#if (defined(BOOST_LCAST_HAS_INT128) && !defined(__GNUC__)) || GCC_VERSION > 40700
-#define BOOST_LCAST_HAS_INT128
-#endif
-
-
namespace boost
{
// exception used to indicate runtime lexical_cast failure
@@ -92,50 +87,39 @@ namespace boost
{
public:
- bad_lexical_cast() BOOST_NOEXCEPT :
+ bad_lexical_cast() BOOST_NOEXCEPT
#ifndef BOOST_NO_TYPEID
- source(&typeid(void)), target(&typeid(void))
-#else
- source(0), target(0) // this breaks getters
+ : source(&typeid(void)), target(&typeid(void))
#endif
- {
+ {}
+
+ virtual const char *what() const BOOST_NOEXCEPT_OR_NOTHROW {
+ return "bad lexical cast: "
+ "source type value could not be interpreted as target";
}
+ virtual ~bad_lexical_cast() BOOST_NOEXCEPT_OR_NOTHROW
+ {}
+
+#ifndef BOOST_NO_TYPEID
bad_lexical_cast(
- const std::type_info &source_type_arg,
- const std::type_info &target_type_arg) BOOST_NOEXCEPT :
- source(&source_type_arg), target(&target_type_arg)
- {
- }
+ const std::type_info &source_type_arg,
+ const std::type_info &target_type_arg) BOOST_NOEXCEPT
+ : source(&source_type_arg), target(&target_type_arg)
+ {}
- const std::type_info &source_type() const
- {
+ const std::type_info &source_type() const BOOST_NOEXCEPT {
return *source;
}
- const std::type_info &target_type() const
- {
- return *target;
- }
-#ifndef BOOST_NO_CXX11_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";
+ const std::type_info &target_type() const BOOST_NOEXCEPT {
+ return *target;
}
-#ifndef BOOST_NO_CXX11_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;
+#endif
};
namespace detail // widest_char
@@ -151,7 +135,7 @@ namespace boost
}
} // namespace boost
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(__SUNPRO_CC) && !defined(__PGIC__)
+#if !defined(__SUNPRO_CC) && !defined(__PGIC__)
#include <cmath>
#include <istream>
@@ -174,17 +158,19 @@ namespace boost
#include <boost/range/iterator_range_core.hpp>
#include <boost/container/container_fwd.hpp>
#include <boost/integer.hpp>
+#include <boost/detail/basic_pointerbuf.hpp>
+#include <boost/noncopyable.hpp>
#ifndef BOOST_NO_CWCHAR
# include <cwchar>
#endif
namespace boost {
- namespace detail // is_char_or_wchar<...>
+ namespace detail // is_character<...>
{
// returns true, if T is one of the character types
template < typename T >
- struct is_char_or_wchar
+ struct is_character
{
typedef boost::type_traits::ice_or<
boost::is_same< T, char >::value,
@@ -241,35 +227,35 @@ namespace boost {
// Executed on Stage 1 (See deduce_source_char<T> and deduce_target_char<T>)
template < typename Type >
struct stream_char_common: public boost::mpl::if_c<
- boost::detail::is_char_or_wchar< Type >::value,
+ boost::detail::is_character< Type >::value,
Type,
boost::detail::deduce_character_type_later< Type >
> {};
template < typename Char >
struct stream_char_common< Char* >: public boost::mpl::if_c<
- boost::detail::is_char_or_wchar< Char >::value,
+ boost::detail::is_character< Char >::value,
Char,
boost::detail::deduce_character_type_later< Char* >
> {};
template < typename Char >
struct stream_char_common< const Char* >: public boost::mpl::if_c<
- boost::detail::is_char_or_wchar< Char >::value,
+ boost::detail::is_character< Char >::value,
Char,
boost::detail::deduce_character_type_later< const Char* >
> {};
template < typename Char >
struct stream_char_common< boost::iterator_range< Char* > >: public boost::mpl::if_c<
- boost::detail::is_char_or_wchar< Char >::value,
+ boost::detail::is_character< Char >::value,
Char,
boost::detail::deduce_character_type_later< boost::iterator_range< Char* > >
> {};
template < typename Char >
struct stream_char_common< boost::iterator_range< const Char* > >: public boost::mpl::if_c<
- boost::detail::is_char_or_wchar< Char >::value,
+ boost::detail::is_character< Char >::value,
Char,
boost::detail::deduce_character_type_later< boost::iterator_range< const Char* > >
> {};
@@ -288,14 +274,14 @@ namespace boost {
template < typename Char, std::size_t N >
struct stream_char_common< boost::array< Char, N > >: public boost::mpl::if_c<
- boost::detail::is_char_or_wchar< Char >::value,
+ boost::detail::is_character< Char >::value,
Char,
boost::detail::deduce_character_type_later< boost::array< Char, N > >
> {};
template < typename Char, std::size_t N >
struct stream_char_common< boost::array< const Char, N > >: public boost::mpl::if_c<
- boost::detail::is_char_or_wchar< Char >::value,
+ boost::detail::is_character< Char >::value,
Char,
boost::detail::deduce_character_type_later< boost::array< const Char, N > >
> {};
@@ -303,20 +289,20 @@ namespace boost {
#ifndef BOOST_NO_CXX11_HDR_ARRAY
template < typename Char, std::size_t N >
struct stream_char_common< std::array<Char, N > >: public boost::mpl::if_c<
- boost::detail::is_char_or_wchar< Char >::value,
+ boost::detail::is_character< Char >::value,
Char,
boost::detail::deduce_character_type_later< std::array< Char, N > >
> {};
template < typename Char, std::size_t N >
struct stream_char_common< std::array< const Char, N > >: public boost::mpl::if_c<
- boost::detail::is_char_or_wchar< Char >::value,
+ boost::detail::is_character< Char >::value,
Char,
boost::detail::deduce_character_type_later< std::array< const Char, N > >
> {};
#endif
-#ifdef BOOST_LCAST_HAS_INT128
+#ifdef BOOST_HAS_INT128
template <> struct stream_char_common< boost::int128_type >: public boost::mpl::identity< char > {};
template <> struct stream_char_common< boost::uint128_type >: public boost::mpl::identity< char > {};
#endif
@@ -432,86 +418,29 @@ namespace boost {
};
}
- namespace detail // deduce_char_traits template
+ namespace detail // extract_char_traits template
{
- // We are attempting to get char_traits<> from Source or Tagret
+ // We are attempting to get char_traits<> from T
// template parameter. Otherwise we'll be using std::char_traits<Char>
- template < class Char, class Target, class Source >
- struct deduce_char_traits
- {
- typedef std::char_traits< Char > type;
- };
-
- template < class Char, class Traits, class Alloc, class Source >
- struct deduce_char_traits< Char
- , std::basic_string< Char, Traits, Alloc >
- , Source
- >
- {
- typedef Traits type;
- };
-
- template < class Char, class Target, class Traits, class Alloc >
- struct deduce_char_traits< Char
- , Target
- , std::basic_string< Char, Traits, Alloc >
- >
- {
- typedef Traits type;
- };
-
- template < class Char, class Traits, class Alloc, class Source >
- struct deduce_char_traits< Char
- , boost::container::basic_string< Char, Traits, Alloc >
- , Source
- >
+ template < class Char, class T >
+ struct extract_char_traits
+ : boost::false_type
{
- typedef Traits type;
+ typedef std::char_traits< Char > trait_t;
};
- template < class Char, class Target, class Traits, class Alloc >
- struct deduce_char_traits< Char
- , Target
- , boost::container::basic_string< Char, Traits, Alloc >
- >
- {
- typedef Traits type;
- };
-
- template < class Char, class Traits, class Alloc1, class Alloc2 >
- struct deduce_char_traits< Char
- , std::basic_string< Char, Traits, Alloc1 >
- , std::basic_string< Char, Traits, Alloc2 >
- >
- {
- typedef Traits type;
- };
-
- template<class Char, class Traits, class Alloc1, class Alloc2>
- struct deduce_char_traits< Char
- , boost::container::basic_string< Char, Traits, Alloc1 >
- , boost::container::basic_string< Char, Traits, Alloc2 >
- >
- {
- typedef Traits type;
- };
-
- template < class Char, class Traits, class Alloc1, class Alloc2 >
- struct deduce_char_traits< Char
- , boost::container::basic_string< Char, Traits, Alloc1 >
- , std::basic_string< Char, Traits, Alloc2 >
- >
+ template < class Char, class Traits, class Alloc >
+ struct extract_char_traits< Char, std::basic_string< Char, Traits, Alloc > >
+ : boost::true_type
{
- typedef Traits type;
+ typedef Traits trait_t;
};
- template < class Char, class Traits, class Alloc1, class Alloc2 >
- struct deduce_char_traits< Char
- , std::basic_string< Char, Traits, Alloc1 >
- , boost::container::basic_string< Char, Traits, Alloc2 >
- >
+ template < class Char, class Traits, class Alloc>
+ struct extract_char_traits< Char, boost::container::basic_string< Char, Traits, Alloc > >
+ : boost::true_type
{
- typedef Traits type;
+ typedef Traits trait_t;
};
}
@@ -557,14 +486,12 @@ namespace boost {
namespace detail // lcast_src_length
{
// Return max. length of string representation of Source;
- template< class Source // Source type of lexical_cast.
+ template< class Source, // Source type of lexical_cast.
+ class Enable = void // helper type
>
struct lcast_src_length
{
BOOST_STATIC_CONSTANT(std::size_t, value = 1);
- // To check coverage, build the test with
- // bjam --v2 profile optimization=off
- static void check_coverage() {}
};
// Helper for integral types.
@@ -580,8 +507,10 @@ namespace boost {
// <boost/limits.hpp> doesn't add missing specialization for
// numeric_limits<T> for some integral type T.
// When is_specialized is false, the whole expression is 0.
- template<class Source>
- struct lcast_src_length_integral
+ template <class Source>
+ struct lcast_src_length<
+ Source, BOOST_DEDUCED_TYPENAME boost::enable_if<boost::is_integral<Source> >::type
+ >
{
#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
BOOST_STATIC_CONSTANT(std::size_t, value =
@@ -595,31 +524,6 @@ namespace boost {
#endif
};
-#define BOOST_LCAST_DEF(T) \
- template<> struct lcast_src_length<T> \
- : lcast_src_length_integral<T> \
- { static void check_coverage() {} };
-
- BOOST_LCAST_DEF(short)
- BOOST_LCAST_DEF(unsigned short)
- BOOST_LCAST_DEF(int)
- BOOST_LCAST_DEF(unsigned int)
- BOOST_LCAST_DEF(long)
- BOOST_LCAST_DEF(unsigned long)
-#if defined(BOOST_HAS_LONG_LONG)
- BOOST_LCAST_DEF(boost::ulong_long_type)
- BOOST_LCAST_DEF(boost::long_long_type )
-#elif defined(BOOST_HAS_MS_INT64)
- BOOST_LCAST_DEF(unsigned __int64)
- BOOST_LCAST_DEF( __int64)
-#endif
-#ifdef BOOST_LCAST_HAS_INT128
- BOOST_LCAST_DEF(boost::int128_type)
- BOOST_LCAST_DEF(boost::uint128_type)
-#endif
-
-#undef BOOST_LCAST_DEF
-
#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
// Helper for floating point types.
// -1.23456789e-123456
@@ -632,38 +536,19 @@ namespace boost {
// ^^^^^^ exponent (assumed 6 or less digits)
// sign + leading digit + decimal point + "e" + exponent sign == 5
template<class Source>
- struct lcast_src_length_floating
+ struct lcast_src_length<
+ Source, BOOST_DEDUCED_TYPENAME boost::enable_if<boost::is_float<Source> >::type
+ >
{
BOOST_STATIC_ASSERT(
std::numeric_limits<Source>::max_exponent10 <= 999999L &&
std::numeric_limits<Source>::min_exponent10 >= -999999L
);
+
BOOST_STATIC_CONSTANT(std::size_t, value =
5 + lcast_precision<Source>::value + 6
);
};
-
- template<>
- struct lcast_src_length<float>
- : lcast_src_length_floating<float>
- {
- static void check_coverage() {}
- };
-
- template<>
- struct lcast_src_length<double>
- : lcast_src_length_floating<double>
- {
- static void check_coverage() {}
- };
-
- template<>
- struct lcast_src_length<long double>
- : lcast_src_length_floating<long double>
- {
- static void check_coverage() {}
- };
-
#endif // #ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
}
@@ -693,22 +578,24 @@ namespace boost {
"Your compiler does not have full support for char32_t" );
#endif
- typedef BOOST_DEDUCED_TYPENAME boost::detail::deduce_char_traits<
- char_type, Target, no_cv_src
- >::type traits;
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
+ boost::detail::extract_char_traits<char_type, Target>::value,
+ BOOST_DEDUCED_TYPENAME boost::detail::extract_char_traits<char_type, Target>,
+ BOOST_DEDUCED_TYPENAME boost::detail::extract_char_traits<char_type, no_cv_src>
+ >::type::trait_t traits;
typedef boost::type_traits::ice_and<
boost::is_same<char, src_char_t>::value, // source is not a wide character based type
boost::type_traits::ice_ne<sizeof(char), sizeof(target_char_t) >::value, // target type is based on wide character
boost::type_traits::ice_not<
- boost::detail::is_char_or_wchar<no_cv_src>::value // single character widening is optimized
+ boost::detail::is_character<no_cv_src>::value // single character widening is optimized
>::value // and does not requires stringbuffer
> is_string_widening_required_t;
typedef boost::type_traits::ice_not< boost::type_traits::ice_or<
boost::is_integral<no_cv_src>::value,
boost::detail::is_this_float_conversion_optimized<no_cv_src, char_type >::value,
- boost::detail::is_char_or_wchar<
+ boost::detail::is_character<
BOOST_DEDUCED_TYPENAME deduce_src_char_metafunc::stage1_type // if we did not get character type at stage1
>::value // then we have no optimization for that type
>::value > is_source_input_not_optimized_t;
@@ -725,175 +612,166 @@ namespace boost {
};
}
- namespace detail // '0', '+' and '-' constants
+ namespace detail // '0', '-', '+', 'e', 'E' and '.' constants
{
- template < typename Char > struct lcast_char_constants;
-
- template<>
- struct lcast_char_constants<char>
- {
- BOOST_STATIC_CONSTANT(char, zero = '0');
- BOOST_STATIC_CONSTANT(char, minus = '-');
- BOOST_STATIC_CONSTANT(char, plus = '+');
- BOOST_STATIC_CONSTANT(char, lowercase_e = 'e');
- BOOST_STATIC_CONSTANT(char, capital_e = 'E');
- BOOST_STATIC_CONSTANT(char, c_decimal_separator = '.');
- };
-
-#ifndef BOOST_LCAST_NO_WCHAR_T
- template<>
- struct lcast_char_constants<wchar_t>
- {
- BOOST_STATIC_CONSTANT(wchar_t, zero = L'0');
- BOOST_STATIC_CONSTANT(wchar_t, minus = L'-');
- BOOST_STATIC_CONSTANT(wchar_t, plus = L'+');
- BOOST_STATIC_CONSTANT(wchar_t, lowercase_e = L'e');
- BOOST_STATIC_CONSTANT(wchar_t, capital_e = L'E');
- BOOST_STATIC_CONSTANT(wchar_t, c_decimal_separator = L'.');
- };
-#endif
-
-#if !defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
- template<>
- struct lcast_char_constants<char16_t>
- {
- BOOST_STATIC_CONSTANT(char16_t, zero = u'0');
- BOOST_STATIC_CONSTANT(char16_t, minus = u'-');
- BOOST_STATIC_CONSTANT(char16_t, plus = u'+');
- BOOST_STATIC_CONSTANT(char16_t, lowercase_e = u'e');
- BOOST_STATIC_CONSTANT(char16_t, capital_e = u'E');
- BOOST_STATIC_CONSTANT(char16_t, c_decimal_separator = u'.');
- };
-#endif
-
-#if !defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
- template<>
- struct lcast_char_constants<char32_t>
- {
- BOOST_STATIC_CONSTANT(char32_t, zero = U'0');
- BOOST_STATIC_CONSTANT(char32_t, minus = U'-');
- BOOST_STATIC_CONSTANT(char32_t, plus = U'+');
- BOOST_STATIC_CONSTANT(char32_t, lowercase_e = U'e');
- BOOST_STATIC_CONSTANT(char32_t, capital_e = U'E');
- BOOST_STATIC_CONSTANT(char32_t, c_decimal_separator = U'.');
+ template < typename Char >
+ struct lcast_char_constants {
+ // We check in tests assumption that static casted character is
+ // equal to correctly written C++ literal: U'0' == static_cast<char32_t>('0')
+ BOOST_STATIC_CONSTANT(Char, zero = static_cast<Char>('0'));
+ BOOST_STATIC_CONSTANT(Char, minus = static_cast<Char>('-'));
+ BOOST_STATIC_CONSTANT(Char, plus = static_cast<Char>('+'));
+ BOOST_STATIC_CONSTANT(Char, lowercase_e = static_cast<Char>('e'));
+ BOOST_STATIC_CONSTANT(Char, capital_e = static_cast<Char>('E'));
+ BOOST_STATIC_CONSTANT(Char, c_decimal_separator = static_cast<Char>('.'));
};
-#endif
}
namespace detail // lcast_to_unsigned
{
template<class T>
inline
- BOOST_DEDUCED_TYPENAME make_unsigned<T>::type lcast_to_unsigned(T value) BOOST_NOEXCEPT
- {
+ BOOST_DEDUCED_TYPENAME boost::make_unsigned<T>::type lcast_to_unsigned(const T value) BOOST_NOEXCEPT {
typedef BOOST_DEDUCED_TYPENAME boost::make_unsigned<T>::type result_type;
- return static_cast<result_type>(
- value < 0 ? 0u - static_cast<result_type>(value) : value
- );
+ return value < 0
+ ? static_cast<result_type>(0u - static_cast<result_type>(value))
+ : static_cast<result_type>(value);
}
}
namespace detail // lcast_put_unsigned
{
- template<class Traits, class T, class CharT>
- CharT* lcast_put_unsigned(const T n_param, CharT* finish)
- {
-#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
- BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);
-#endif
-
- typedef typename Traits::int_type int_type;
- CharT const czero = lcast_char_constants<CharT>::zero;
- int_type const zero = Traits::to_int_type(czero);
+ template <class Traits, class T, class CharT>
+ class lcast_put_unsigned: boost::noncopyable {
+ typedef BOOST_DEDUCED_TYPENAME Traits::int_type int_type;
BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
(sizeof(int_type) > sizeof(T))
, int_type
, T
- >::type n = n_param;
+ >::type m_value;
+ CharT* m_finish;
+ CharT const m_czero;
+ int_type const m_zero;
+ public:
+ lcast_put_unsigned(const T n_param, CharT* finish) BOOST_NOEXCEPT
+ : m_value(n_param), m_finish(finish)
+ , m_czero(lcast_char_constants<CharT>::zero), m_zero(Traits::to_int_type(m_czero))
+ {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);
+#endif
+ }
+
+ CharT* convert() {
#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
- std::locale loc;
- if (loc != std::locale::classic()) {
+ std::locale loc;
+ if (loc == std::locale::classic()) {
+ return main_convert_loop();
+ }
+
typedef std::numpunct<CharT> numpunct;
numpunct const& np = BOOST_USE_FACET(numpunct, loc);
std::string const grouping = np.grouping();
std::string::size_type const grouping_size = grouping.size();
- if ( grouping_size && grouping[0] > 0 )
- {
+ if (!grouping_size || grouping[0] <= 0) {
+ return main_convert_loop();
+ }
#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
// Check that ulimited group is unreachable:
BOOST_STATIC_ASSERT(std::numeric_limits<T>::digits10 < CHAR_MAX);
#endif
- CharT thousands_sep = np.thousands_sep();
- std::string::size_type group = 0; // current group number
- char last_grp_size = grouping[0];
- char left = last_grp_size;
-
- do
- {
- if(left == 0)
- {
- ++group;
- if(group < grouping_size)
- {
- char const grp_size = grouping[group];
- last_grp_size = grp_size <= 0 ? static_cast<char>(CHAR_MAX) : grp_size;
- }
-
- left = last_grp_size;
- --finish;
- Traits::assign(*finish, thousands_sep);
+ CharT const thousands_sep = np.thousands_sep();
+ std::string::size_type group = 0; // current group number
+ char last_grp_size = grouping[0];
+ char left = last_grp_size;
+
+ do {
+ if (left == 0) {
+ ++group;
+ if (group < grouping_size) {
+ char const grp_size = grouping[group];
+ last_grp_size = (grp_size <= 0 ? static_cast<char>(CHAR_MAX) : grp_size);
}
- --left;
+ left = last_grp_size;
+ --m_finish;
+ Traits::assign(*m_finish, thousands_sep);
+ }
- --finish;
- int_type const digit = static_cast<int_type>(n % 10U);
- Traits::assign(*finish, Traits::to_char_type(zero + digit));
- n /= 10;
- } while(n);
- return finish;
- }
- }
+ --left;
+ } while (main_convert_itaration());
+
+ return m_finish;
+#else
+ return main_convert_loop();
#endif
- {
- do
- {
- --finish;
- int_type const digit = static_cast<int_type>(n % 10U);
- Traits::assign(*finish, Traits::to_char_type(zero + digit));
- n /= 10;
- } while(n);
}
- return finish;
- }
+ private:
+ inline bool main_convert_itaration() BOOST_NOEXCEPT {
+ --m_finish;
+ int_type const digit = static_cast<int_type>(m_value % 10U);
+ Traits::assign(*m_finish, Traits::to_char_type(m_zero + digit));
+ m_value /= 10;
+ return !!m_value; // supressing warnings
+ }
+
+ inline CharT* main_convert_loop() BOOST_NOEXCEPT {
+ while (main_convert_itaration());
+ return m_finish;
+ }
+ };
}
namespace detail // lcast_ret_unsigned
{
- template<class Traits, class T, class CharT>
- inline bool lcast_ret_unsigned(T& value, const CharT* const begin, const CharT* end)
- {
+ template <class Traits, class T, class CharT>
+ class lcast_ret_unsigned: boost::noncopyable {
+ bool m_multiplier_overflowed;
+ T m_multiplier;
+ T& m_value;
+ const CharT* const m_begin;
+ const CharT* m_end;
+
+ public:
+ lcast_ret_unsigned(T& value, const CharT* const begin, const CharT* end) BOOST_NOEXCEPT
+ : m_multiplier_overflowed(false), m_multiplier(1), m_value(value), m_begin(begin), m_end(end)
+ {
#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
- BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);
+ BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);
+
+ // GCC when used with flag -std=c++0x may not have std::numeric_limits
+ // specializations for __int128 and unsigned __int128 types.
+ // Try compilation with -std=gnu++0x or -std=gnu++11.
+ //
+ // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40856
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<T>::is_specialized,
+ "std::numeric_limits are not specialized for integral type passed to boost::lexical_cast"
+ );
#endif
- CharT const czero = lcast_char_constants<CharT>::zero;
- --end;
- value = 0;
+ }
- if (begin > end || *end < czero || *end >= czero + 10)
- return false;
- value = static_cast<T>(*end - czero);
- --end;
- T multiplier = 1;
- bool multiplier_overflowed = false;
+ inline bool convert() {
+ CharT const czero = lcast_char_constants<CharT>::zero;
+ --m_end;
+ m_value = static_cast<T>(0);
+
+ if (m_begin > m_end || *m_end < czero || *m_end >= czero + 10)
+ return false;
+ m_value = static_cast<T>(*m_end - czero);
+ --m_end;
+
+#ifdef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
+ return main_convert_loop();
+#else
+ std::locale loc;
+ if (loc == std::locale::classic()) {
+ return main_convert_loop();
+ }
-#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
- std::locale loc;
- if (loc != std::locale::classic()) {
typedef std::numpunct<CharT> numpunct;
numpunct const& np = BOOST_USE_FACET(numpunct, loc);
std::string const& grouping = np.grouping();
@@ -902,85 +780,86 @@ namespace boost {
/* According to Programming languages - C++
* we MUST check for correct grouping
*/
- if (grouping_size && grouping[0] > 0)
+ if (!grouping_size || grouping[0] <= 0) {
+ return main_convert_loop();
+ }
+
+ unsigned char current_grouping = 0;
+ CharT const thousands_sep = np.thousands_sep();
+ char remained = static_cast<char>(grouping[current_grouping] - 1);
+
+ for (;m_end >= m_begin; --m_end)
{
- unsigned char current_grouping = 0;
- CharT const thousands_sep = np.thousands_sep();
- char remained = static_cast<char>(grouping[current_grouping] - 1);
- bool shall_we_return = true;
-
- for(;end>=begin; --end)
- {
- if (remained) {
- T const multiplier_10 = static_cast<T>(multiplier * 10);
- if (multiplier_10 / 10 != multiplier) multiplier_overflowed = true;
-
- T const dig_value = static_cast<T>(*end - czero);
- T const new_sub_value = static_cast<T>(multiplier_10 * dig_value);
-
- if (*end < czero || *end >= czero + 10
- /* detecting overflow */
- || (dig_value && new_sub_value / dig_value != multiplier_10)
- || static_cast<T>((std::numeric_limits<T>::max)()-new_sub_value) < value
- || (multiplier_overflowed && dig_value)
- )
- return false;
-
- value = static_cast<T>(value + new_sub_value);
- multiplier = static_cast<T>(multiplier * 10);
- --remained;
+ if (remained) {
+ if (!main_convert_itaration()) {
+ return false;
+ }
+ --remained;
+ } else {
+ if ( !Traits::eq(*m_end, thousands_sep) ) //|| begin == end ) return false;
+ {
+ /*
+ * According to Programming languages - C++
+ * Digit grouping is checked. That is, the positions of discarded
+ * separators is examined for consistency with
+ * use_facet<numpunct<charT> >(loc ).grouping()
+ *
+ * BUT what if there is no separators at all and grouping()
+ * is not empty? Well, we have no extraced separators, so we
+ * won`t check them for consistency. This will allow us to
+ * work with "C" locale from other locales
+ */
+ return main_convert_loop();
} else {
- if ( !Traits::eq(*end, thousands_sep) ) //|| begin == end ) return false;
- {
- /*
- * According to Programming languages - C++
- * Digit grouping is checked. That is, the positions of discarded
- * separators is examined for consistency with
- * use_facet<numpunct<charT> >(loc ).grouping()
- *
- * BUT what if there is no separators at all and grouping()
- * is not empty? Well, we have no extraced separators, so we
- * won`t check them for consistency. This will allow us to
- * work with "C" locale from other locales
- */
- shall_we_return = false;
- break;
- } else {
- if ( begin == end ) return false;
- if (current_grouping < grouping_size-1 ) ++current_grouping;
- remained = grouping[current_grouping];
- }
+ if (m_begin == m_end) return false;
+ if (current_grouping < grouping_size - 1) ++current_grouping;
+ remained = grouping[current_grouping];
}
}
+ } /*for*/
- if (shall_we_return) return true;
- }
- }
+ return true;
#endif
- {
- while ( begin <= end )
- {
- T const multiplier_10 = static_cast<T>(multiplier * 10);
- if (multiplier_10 / 10 != multiplier) multiplier_overflowed = true;
+ }
- T const dig_value = static_cast<T>(*end - czero);
- T const new_sub_value = static_cast<T>(multiplier_10 * dig_value);
+ private:
+ // Iteration that does not care about grouping/separators and assumes that all
+ // input characters are digits
+ inline bool main_convert_itaration() BOOST_NOEXCEPT {
+ CharT const czero = lcast_char_constants<CharT>::zero;
+ T const maxv = (std::numeric_limits<T>::max)();
+
+ m_multiplier_overflowed = m_multiplier_overflowed || (maxv/10 < m_multiplier);
+ m_multiplier = static_cast<T>(m_multiplier * 10);
+
+ T const dig_value = static_cast<T>(*m_end - czero);
+ T const new_sub_value = static_cast<T>(m_multiplier * dig_value);
+
+ // We must correctly handle situations like `000000000000000000000000000001`.
+ // So we take care of overflow only if `dig_value` is not '0'.
+ if (*m_end < czero || *m_end >= czero + 10 // checking for correct digit
+ || (dig_value && ( // checking for overflow of ...
+ m_multiplier_overflowed // ... multiplier
+ || static_cast<T>(maxv / dig_value) < m_multiplier // ... subvalue
+ || static_cast<T>(maxv - new_sub_value) < m_value // ... whole expression
+ ))
+ ) return false;
- if (*end < czero || *end >= czero + 10
- /* detecting overflow */
- || (dig_value && new_sub_value / dig_value != multiplier_10)
- || static_cast<T>((std::numeric_limits<T>::max)()-new_sub_value) < value
- || (multiplier_overflowed && dig_value)
- )
- return false;
+ m_value = static_cast<T>(m_value + new_sub_value);
+
+ return true;
+ }
- value = static_cast<T>(value + new_sub_value);
- multiplier = static_cast<T>(multiplier * 10);
- --end;
+ bool main_convert_loop() BOOST_NOEXCEPT {
+ for ( ; m_end >= m_begin; --m_end) {
+ if (!main_convert_itaration()) {
+ return false;
+ }
}
+
+ return true;
}
- return true;
- }
+ };
}
namespace detail
@@ -1005,42 +884,37 @@ namespace boost {
if (begin == end) return false;
const CharT minus = lcast_char_constants<CharT>::minus;
const CharT plus = lcast_char_constants<CharT>::plus;
- const int inifinity_size = 8;
+ const int inifinity_size = 8; // == sizeof("infinity") - 1
- bool has_minus = false;
/* Parsing +/- */
- if( *begin == minus)
- {
+ bool const has_minus = (*begin == minus);
+ if (has_minus || *begin == plus) {
++ begin;
- has_minus = true;
}
- else if( *begin == plus ) ++begin;
- if( end-begin < 3 ) return false;
- if( lc_iequal(begin, lc_nan, lc_NAN, 3) )
- {
+ if (end - begin < 3) return false;
+ if (lc_iequal(begin, lc_nan, lc_NAN, 3)) {
begin += 3;
- if (end != begin) /* It is 'nan(...)' or some bad input*/
- {
- if(end-begin<2) return false; // bad input
+ if (end != begin) {
+ /* It is 'nan(...)' or some bad input*/
+
+ if (end - begin < 2) return false; // bad input
-- end;
- if( *begin != opening_brace || *end != closing_brace) return false; // bad input
+ if (*begin != opening_brace || *end != closing_brace) return false; // bad input
}
if( !has_minus ) value = std::numeric_limits<T>::quiet_NaN();
else value = (boost::math::changesign) (std::numeric_limits<T>::quiet_NaN());
return true;
- } else
- if (( /* 'INF' or 'inf' */
- end-begin==3
- &&
- lc_iequal(begin, lc_infinity, lc_INFINITY, 3)
+ } else if (
+ ( /* 'INF' or 'inf' */
+ end - begin == 3 // 3 == sizeof('inf') - 1
+ && lc_iequal(begin, lc_infinity, lc_INFINITY, 3)
)
||
( /* 'INFINITY' or 'infinity' */
- end-begin==inifinity_size
- &&
- lc_iequal(begin, lc_infinity, lc_INFINITY, inifinity_size)
+ end - begin == inifinity_size
+ && lc_iequal(begin, lc_infinity, lc_INFINITY, inifinity_size)
)
)
{
@@ -1059,10 +933,8 @@ namespace boost {
{
using namespace std;
const CharT minus = lcast_char_constants<CharT>::minus;
- if ( (boost::math::isnan)(value) )
- {
- if ( (boost::math::signbit)(value) )
- {
+ if ((boost::math::isnan)(value)) {
+ if ((boost::math::signbit)(value)) {
*begin = minus;
++ begin;
}
@@ -1070,10 +942,8 @@ namespace boost {
memcpy(begin, lc_nan, 3 * sizeof(CharT));
end = begin + 3;
return true;
- } else if ( (boost::math::isinf)(value) )
- {
- if ( (boost::math::signbit)(value) )
- {
+ } else if ((boost::math::isinf)(value)) {
+ if ((boost::math::signbit)(value)) {
*begin = minus;
++ begin;
}
@@ -1089,8 +959,7 @@ namespace boost {
#ifndef BOOST_LCAST_NO_WCHAR_T
template <class T>
- bool parse_inf_nan(const wchar_t* begin, const wchar_t* end, T& value) BOOST_NOEXCEPT
- {
+ 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"
, L"INFINITY", L"infinity"
@@ -1098,16 +967,14 @@ namespace boost {
}
template <class T>
- bool put_inf_nan(wchar_t* begin, wchar_t*& end, const T& value) BOOST_NOEXCEPT
- {
+ 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");
}
#endif
#if !defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
template <class T>
- bool parse_inf_nan(const char16_t* begin, const char16_t* end, T& value) BOOST_NOEXCEPT
- {
+ 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"
, u"INFINITY", u"infinity"
@@ -1115,15 +982,13 @@ namespace boost {
}
template <class T>
- bool put_inf_nan(char16_t* begin, char16_t*& end, const T& value) BOOST_NOEXCEPT
- {
+ 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_CXX11_CHAR32_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
template <class T>
- bool parse_inf_nan(const char32_t* begin, const char32_t* end, T& value) BOOST_NOEXCEPT
- {
+ 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"
, U"INFINITY", U"infinity"
@@ -1131,15 +996,13 @@ namespace boost {
}
template <class T>
- bool put_inf_nan(char32_t* begin, char32_t*& end, const T& value) BOOST_NOEXCEPT
- {
+ 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 <class CharT, class T>
- bool parse_inf_nan(const CharT* begin, const CharT* end, T& value) BOOST_NOEXCEPT
- {
+ bool parse_inf_nan(const CharT* begin, const CharT* end, T& value) BOOST_NOEXCEPT {
return parse_inf_nan_impl(begin, end, value
, "NAN", "nan"
, "INFINITY", "infinity"
@@ -1147,8 +1010,7 @@ namespace boost {
}
template <class CharT, class T>
- bool put_inf_nan(CharT* begin, CharT*& end, const T& value) BOOST_NOEXCEPT
- {
+ bool put_inf_nan(CharT* begin, CharT*& end, const T& value) BOOST_NOEXCEPT {
return put_inf_nan_impl(begin, end, value, "nan", "infinity");
}
}
@@ -1189,8 +1051,24 @@ namespace boost {
};
template<class Traits, class T, class CharT>
- inline bool lcast_ret_float(T& value, const CharT* begin, const CharT* end)
+ inline bool lcast_ret_float(T& value, const CharT* begin, const CharT* const end)
{
+ value = static_cast<T>(0);
+ if (begin == end) return false;
+ if (parse_inf_nan(begin, end, value)) return true;
+
+ CharT const czero = lcast_char_constants<CharT>::zero;
+ CharT const minus = lcast_char_constants<CharT>::minus;
+ CharT const plus = lcast_char_constants<CharT>::plus;
+ CharT const capital_e = lcast_char_constants<CharT>::capital_e;
+ CharT const lowercase_e = lcast_char_constants<CharT>::lowercase_e;
+
+ /* Getting the plus/minus sign */
+ bool const has_minus = Traits::eq(*begin, minus);
+ if (has_minus || Traits::eq(*begin, plus)) {
+ ++ begin;
+ if (begin == end) return false;
+ }
#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
std::locale loc;
@@ -1210,52 +1088,25 @@ namespace boost {
CharT const decimal_point = lcast_char_constants<CharT>::c_decimal_separator;
#endif
- CharT const czero = lcast_char_constants<CharT>::zero;
- CharT const minus = lcast_char_constants<CharT>::minus;
- CharT const plus = lcast_char_constants<CharT>::plus;
- CharT const capital_e = lcast_char_constants<CharT>::capital_e;
- CharT const lowercase_e = lcast_char_constants<CharT>::lowercase_e;
-
- value = static_cast<T>(0);
-
- if (parse_inf_nan(begin, end, value)) return true;
-
- typedef typename Traits::int_type int_type;
- typedef BOOST_DEDUCED_TYPENAME mantissa_holder_type<T>::type mantissa_type;
- typedef BOOST_DEDUCED_TYPENAME mantissa_holder_type<T>::wide_result_t wide_result_t;
- int_type const zero = Traits::to_int_type(czero);
- if (begin == end) return false;
-
- /* Getting the plus/minus sign */
- bool has_minus = false;
- if (Traits::eq(*begin, minus) ) {
- ++ begin;
- has_minus = true;
- if (begin == end) return false;
- } else if (Traits::eq(*begin, plus) ) {
- ++begin;
- if (begin == end) return false;
- }
-
bool found_decimal = false;
bool found_number_before_exp = false;
- int pow_of_10 = 0;
+ typedef int pow_of_10_t;
+ pow_of_10_t pow_of_10 = 0;
+
+ typedef BOOST_DEDUCED_TYPENAME mantissa_holder_type<T>::type mantissa_type;
mantissa_type mantissa=0;
bool is_mantissa_full = false;
-
char length_since_last_delim = 0;
- while ( begin != end )
- {
+ while (begin != end) {
if (found_decimal) {
/* We allow no thousand_separators after decimal point */
- mantissa_type tmp_mantissa = mantissa * 10u;
+ const mantissa_type tmp_sub_value = static_cast<mantissa_type>(*begin - czero);
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
- || (std::numeric_limits<mantissa_type>::max)()-(*begin - zero) < tmp_mantissa
+ || ((std::numeric_limits<mantissa_type>::max)() - tmp_sub_value) / 10u < mantissa
) {
is_mantissa_full = true;
++ begin;
@@ -1263,8 +1114,7 @@ namespace boost {
}
-- pow_of_10;
- mantissa = tmp_mantissa;
- mantissa += *begin - zero;
+ mantissa = static_cast<mantissa_type>(mantissa * 10 + tmp_sub_value);
found_number_before_exp = true;
} else {
@@ -1274,18 +1124,15 @@ namespace boost {
/* Checking for mantissa overflow. If overflow will
* occur, them we only increase multiplyer
*/
- mantissa_type tmp_mantissa = mantissa * 10u;
- if( !is_mantissa_full
- && tmp_mantissa / 10u == mantissa
- && (std::numeric_limits<mantissa_type>::max)()-(*begin - zero) >= tmp_mantissa
+ const mantissa_type tmp_sub_value = static_cast<mantissa_type>(*begin - czero);
+ if( is_mantissa_full
+ || ((std::numeric_limits<mantissa_type>::max)() - tmp_sub_value) / 10u < mantissa
)
{
- mantissa = tmp_mantissa;
- mantissa += *begin - zero;
- } else
- {
is_mantissa_full = true;
++ pow_of_10;
+ } else {
+ mantissa = static_cast<mantissa_type>(mantissa * 10 + tmp_sub_value);
}
found_number_before_exp = true;
@@ -1308,12 +1155,12 @@ namespace boost {
) return false;
#endif
- if(Traits::eq(*begin, decimal_point)) {
+ if (Traits::eq(*begin, decimal_point)) {
++ begin;
found_decimal = true;
if (!found_number_before_exp && begin==end) return false;
continue;
- }else {
+ } else {
if (!found_number_before_exp) return false;
break;
}
@@ -1361,52 +1208,48 @@ namespace boost {
}
// Exponent found
- if ( begin != end && (Traits::eq(*begin, lowercase_e) || Traits::eq(*begin, capital_e)) ) {
+ if (begin != end && (Traits::eq(*begin, lowercase_e) || Traits::eq(*begin, capital_e))) {
++ begin;
- if ( begin == end ) return false;
+ if (begin == end) return false;
- bool exp_has_minus = false;
- if(Traits::eq(*begin, minus)) {
- exp_has_minus = true;
- ++ begin;
- if ( begin == end ) return false;
- } else if (Traits::eq(*begin, plus)) {
+ bool const exp_has_minus = Traits::eq(*begin, minus);
+ if (exp_has_minus || Traits::eq(*begin, plus)) {
++ begin;
- if ( begin == end ) return false;
+ if (begin == end) return false;
}
- int exp_pow_of_10 = 0;
- while ( begin != end )
- {
- if ( *begin < czero
- || *begin >= czero + 10
- || exp_pow_of_10 * 10 < exp_pow_of_10) /* Overflows are checked lower more precisely*/
+ pow_of_10_t exp_pow_of_10 = 0;
+ while (begin != end) {
+ pow_of_10_t const sub_value = *begin - czero;
+
+ if ( *begin < czero || *begin >= czero + 10
+ || ((std::numeric_limits<pow_of_10_t>::max)() - sub_value) / 10 < exp_pow_of_10)
return false;
exp_pow_of_10 *= 10;
- exp_pow_of_10 += *begin - zero;
+ exp_pow_of_10 += sub_value;
++ begin;
};
- if ( exp_pow_of_10 ) {
- /* Overflows are checked lower */
- if ( exp_has_minus ) {
- pow_of_10 -= exp_pow_of_10;
- } else {
- pow_of_10 += exp_pow_of_10;
- }
+ if (exp_has_minus) {
+ if ((std::numeric_limits<pow_of_10_t>::min)() + exp_pow_of_10 > pow_of_10)
+ return false; // failed overflow check
+ pow_of_10 -= exp_pow_of_10;
+ } else {
+ if ((std::numeric_limits<pow_of_10_t>::max)() - exp_pow_of_10 < pow_of_10)
+ return false; // failed overflow check
+ pow_of_10 += exp_pow_of_10;
}
}
/* We need a more accurate algorithm... We can not use current algorithm
* with long doubles (and with doubles if sizeof(double)==sizeof(long double)).
*/
+ typedef BOOST_DEDUCED_TYPENAME mantissa_holder_type<T>::wide_result_t wide_result_t;
const wide_result_t result = std::pow(static_cast<wide_result_t>(10.0), pow_of_10) * mantissa;
value = static_cast<T>( has_minus ? (boost::math::changesign)(result) : result);
- if ( (boost::math::isinf)(value) || (boost::math::isnan)(value) ) return false;
-
- return true;
+ return !((boost::math::isinf)(value) || (boost::math::isnan)(value));
}
// Unsilence buggy MS warnings like C4244: '+=' : conversion from 'int' to 'unsigned short', possible loss of data
#if defined(_MSC_VER) && (_MSC_VER == 1400)
@@ -1414,158 +1257,107 @@ namespace boost {
#endif
}
- namespace detail // parser_buf
+ namespace detail // basic_unlockedbuf
{
- //
- // class parser_buf:
// acts as a stream buffer which wraps around a pair of pointers
- //
- // This class is copied (and slightly changed) from
- // boost/regex/v4/cpp_regex_traits.hpp
- // Thanks John Maddock for it! (previous version had some
- // problems with libc++ and some other STL implementations)
- template <class BufferType, class charT>
- class parser_buf : public BufferType {
- typedef BufferType base_type;
- typedef typename base_type::int_type int_type;
- typedef typename base_type::char_type char_type;
- typedef typename base_type::pos_type pos_type;
- typedef ::std::streamsize streamsize;
- typedef typename base_type::off_type off_type;
-
+ // and gives acces to internals
+ template <class BufferType, class CharT>
+ class basic_unlockedbuf : public basic_pointerbuf<CharT, BufferType> {
public:
- parser_buf() : base_type() { setbuf(0, 0); }
- const charT* getnext() { return this->gptr(); }
+ typedef basic_pointerbuf<CharT, BufferType> base_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::streamsize streamsize;
+
#ifndef BOOST_NO_USING_TEMPLATE
using base_type::pptr;
using base_type::pbase;
+ using base_type::setbuf;
#else
charT* pptr() const { return base_type::pptr(); }
charT* pbase() const { return base_type::pbase(); }
+ BufferType* setbuf(char_type* s, streamsize n) { return base_type::setbuf(s, n); }
#endif
- base_type* setbuf(char_type* s, streamsize n) {
- this->setg(s, s, s + n);
- return this;
- }
-
- pos_type seekpos(pos_type sp, ::std::ios_base::openmode which) {
- if(which & ::std::ios_base::out)
- return pos_type(off_type(-1));
- off_type size = static_cast<off_type>(this->egptr() - this->eback());
- charT* g = this->eback();
- if(off_type(sp) <= size)
- {
- this->setg(g, g + off_type(sp), g + size);
- }
- return pos_type(off_type(-1));
- }
-
- pos_type seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which) {
- typedef typename boost::int_t<sizeof(way) * CHAR_BIT>::least cast_type;
-
- if(which & ::std::ios_base::out)
- return pos_type(off_type(-1));
- std::ptrdiff_t size = this->egptr() - this->eback();
- std::ptrdiff_t pos = this->gptr() - this->eback();
- charT* g = this->eback();
- switch(static_cast<cast_type>(way))
- {
- case ::std::ios_base::beg:
- if((off < 0) || (off > size))
- return pos_type(off_type(-1));
- else
- this->setg(g, g + off, g + size);
- break;
- case ::std::ios_base::end:
- if((off < 0) || (off > size))
- return pos_type(off_type(-1));
- else
- this->setg(g, g + size - off, g + size);
- break;
- case ::std::ios_base::cur:
- {
- std::ptrdiff_t newpos = static_cast<std::ptrdiff_t>(pos + off);
- if((newpos < 0) || (newpos > size))
- return pos_type(off_type(-1));
- else
- this->setg(g, g + newpos, g + size);
- break;
- }
- default: ;
- }
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4244)
-#endif
- return static_cast<pos_type>(this->gptr() - this->eback());
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
- }
- private:
- parser_buf& operator=(const parser_buf&);
- parser_buf(const parser_buf&);
};
}
namespace detail
{
struct do_not_construct_out_stream_t{};
+
+ template <class CharT, class Traits>
+ struct out_stream_helper_trait {
+#if defined(BOOST_NO_STRINGSTREAM)
+ typedef std::ostrstream out_stream_t;
+ typedef void buffer_t;
+#elif defined(BOOST_NO_STD_LOCALE)
+ typedef std::ostringstream out_stream_t;
+ typedef basic_unlockedbuf<std::streambuf, char> buffer_t;
+#else
+ typedef std::basic_ostringstream<CharT, Traits>
+ out_stream_t;
+ typedef basic_unlockedbuf<std::basic_streambuf<CharT, Traits>, CharT>
+ buffer_t;
+#endif
+ };
}
- namespace detail // optimized stream wrapper
+ namespace detail // optimized stream wrappers
{
- // String representation of Source has an upper limit.
template< class CharT // a result of widest_char transformation
- , class Traits // usually char_traits<CharT>
+ , class Traits
, bool RequiresStringbuffer
+ , std::size_t CharacterBufferSize
>
- class lexical_stream_limited_src
- {
+ class lexical_istream_limited_src: boost::noncopyable {
+ typedef BOOST_DEDUCED_TYPENAME out_stream_helper_trait<CharT, Traits>::buffer_t
+ buffer_t;
-#if defined(BOOST_NO_STRINGSTREAM)
- typedef std::ostrstream out_stream_t;
-#elif defined(BOOST_NO_STD_LOCALE)
- typedef std::ostringstream out_stream_t;
- typedef parser_buf<std::streambuf, char> buffer_t;
-#else
- typedef std::basic_ostringstream<CharT, Traits> out_stream_t;
- typedef parser_buf<std::basic_streambuf<CharT, Traits>, CharT> buffer_t;
-#endif
+ typedef BOOST_DEDUCED_TYPENAME out_stream_helper_trait<CharT, Traits>::out_stream_t
+ out_stream_t;
+
typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
RequiresStringbuffer,
out_stream_t,
do_not_construct_out_stream_t
>::type deduced_out_stream_t;
- // A string representation of Source is written to [start, finish).
- CharT* start;
- CharT* finish;
+ // A string representation of Source is written to `buffer`.
deduced_out_stream_t out_stream;
+ CharT buffer[CharacterBufferSize];
+
+ // After the `operator <<` finishes, `[start, finish)` is
+ // the range to output by `operator >>`
+ const CharT* start;
+ const CharT* finish;
public:
- lexical_stream_limited_src(CharT* sta, CharT* fin) BOOST_NOEXCEPT
- : start(sta)
- , finish(fin)
+ lexical_istream_limited_src() BOOST_NOEXCEPT
+ : start(buffer)
+ , finish(buffer + CharacterBufferSize)
{}
+
+ const CharT* cbegin() const BOOST_NOEXCEPT {
+ return start;
+ }
+
+ const CharT* cend() const BOOST_NOEXCEPT {
+ return finish;
+ }
private:
// Undefined:
- lexical_stream_limited_src(lexical_stream_limited_src const&);
- void operator=(lexical_stream_limited_src const&);
+ lexical_istream_limited_src(lexical_istream_limited_src const&);
+ void operator=(lexical_istream_limited_src const&);
/************************************ HELPER FUNCTIONS FOR OPERATORS << ( ... ) ********************************/
- bool shl_char(CharT ch) BOOST_NOEXCEPT
- {
- Traits::assign(*start, ch);
+ bool shl_char(CharT ch) BOOST_NOEXCEPT {
+ Traits::assign(buffer[0], ch);
finish = start + 1;
return true;
}
#ifndef BOOST_LCAST_NO_WCHAR_T
template <class T>
- bool shl_char(T ch)
- {
+ bool shl_char(T ch) {
BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)) ,
"boost::lexical_cast does not support narrowing of char types."
"Use boost::locale instead" );
@@ -1575,43 +1367,44 @@ namespace boost {
#else
CharT const w = static_cast<CharT>(ch);
#endif
- Traits::assign(*start, w);
+ Traits::assign(buffer[0], w);
finish = start + 1;
return true;
}
#endif
- bool shl_char_array(CharT const* str) BOOST_NOEXCEPT
- {
- start = const_cast<CharT*>(str);
+ bool shl_char_array(CharT const* str) BOOST_NOEXCEPT {
+ start = str;
finish = start + Traits::length(str);
return true;
}
template <class T>
- bool shl_char_array(T const* str)
- {
+ bool shl_char_array(T const* str) {
BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)),
"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) BOOST_NOEXCEPT
- {
- start = const_cast<CharT*>(str);
+ bool shl_char_array_limited(CharT const* str, std::size_t max_size) BOOST_NOEXCEPT {
+ start = str;
finish = std::find(start, start + max_size, Traits::to_char_type(0));
return true;
}
template<typename InputStreamable>
- bool shl_input_streamable(InputStreamable& input)
- {
+ bool shl_input_streamable(InputStreamable& input) {
#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE)
// If you have compilation error at this point, than your STL library
// does not support such conversions. Try updating it.
BOOST_STATIC_ASSERT((boost::is_same<char, CharT>::value));
#endif
+
+#ifndef BOOST_NO_EXCEPTIONS
+ out_stream.exceptions(std::ios::badbit);
+ try {
+#endif
bool const result = !(out_stream << input).fail();
const buffer_t* const p = static_cast<buffer_t*>(
static_cast<std::basic_streambuf<CharT, Traits>*>(out_stream.rdbuf())
@@ -1619,170 +1412,164 @@ namespace boost {
start = p->pbase();
finish = p->pptr();
return result;
+#ifndef BOOST_NO_EXCEPTIONS
+ } catch (const ::std::ios_base::failure& /*f*/) {
+ return false;
+ }
+#endif
}
template <class T>
- inline bool shl_signed(T n)
- {
- start = lcast_put_unsigned<Traits>(lcast_to_unsigned(n), finish);
- if(n < 0)
- {
- --start;
+ inline bool shl_unsigned(const T n) {
+ CharT* tmp_finish = buffer + CharacterBufferSize;
+ start = lcast_put_unsigned<Traits, T, CharT>(n, tmp_finish).convert();
+ finish = tmp_finish;
+ return true;
+ }
+
+ template <class T>
+ inline bool shl_signed(const T n) {
+ CharT* tmp_finish = buffer + CharacterBufferSize;
+ typedef BOOST_DEDUCED_TYPENAME boost::make_unsigned<T>::type utype;
+ CharT* tmp_start = lcast_put_unsigned<Traits, utype, CharT>(lcast_to_unsigned(n), tmp_finish).convert();
+ if (n < 0) {
+ --tmp_start;
CharT const minus = lcast_char_constants<CharT>::minus;
- Traits::assign(*start, minus);
+ Traits::assign(*tmp_start, minus);
}
+ start = tmp_start;
+ finish = tmp_finish;
return true;
}
template <class T, class SomeCharT>
- bool shl_real_type(const T& val, SomeCharT* begin, SomeCharT*& end)
- {
- if (put_inf_nan(begin, end, val)) return true;
+ bool shl_real_type(const T& val, SomeCharT* /*begin*/) {
lcast_set_precision(out_stream, &val);
return shl_input_streamable(val);
}
- static bool shl_real_type(float val, char* begin, char*& end)
- { using namespace std;
- if (put_inf_nan(begin, end, val)) return true;
+ bool shl_real_type(float val, char* begin) {
+ using namespace std;
const double val_as_double = val;
- end = begin +
+ finish = start +
#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
- sprintf_s(begin, end-begin,
+ sprintf_s(begin, CharacterBufferSize,
#else
sprintf(begin,
#endif
"%.*g", static_cast<int>(boost::detail::lcast_get_precision<float>()), val_as_double);
- return end > begin;
+ return finish > start;
}
- static bool shl_real_type(double val, char* begin, char*& end)
- { using namespace std;
- if (put_inf_nan(begin, end, val)) return true;
- end = begin +
+ bool shl_real_type(double val, char* begin) {
+ using namespace std;
+ finish = start +
#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
- sprintf_s(begin, end-begin,
+ sprintf_s(begin, CharacterBufferSize,
#else
sprintf(begin,
#endif
"%.*g", static_cast<int>(boost::detail::lcast_get_precision<double>()), val);
- return end > begin;
+ return finish > start;
}
#ifndef __MINGW32__
- static bool shl_real_type(long double val, char* begin, char*& end)
- { using namespace std;
- if (put_inf_nan(begin, end, val)) return true;
- end = begin +
+ bool shl_real_type(long double val, char* begin) {
+ using namespace std;
+ finish = start +
#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
- sprintf_s(begin, end-begin,
+ sprintf_s(begin, CharacterBufferSize,
#else
sprintf(begin,
#endif
"%.*Lg", static_cast<int>(boost::detail::lcast_get_precision<long double>()), val );
- return end > begin;
+ return finish > start;
}
#endif
#if !defined(BOOST_LCAST_NO_WCHAR_T) && !defined(BOOST_NO_SWPRINTF) && !defined(__MINGW32__)
- static bool shl_real_type(float val, wchar_t* begin, wchar_t*& end)
- { using namespace std;
- if (put_inf_nan(begin, end, val)) return true;
+ bool shl_real_type(float val, wchar_t* begin) {
+ using namespace std;
const double val_as_double = val;
- end = begin + swprintf(begin, end-begin,
+ finish = start + swprintf(begin, CharacterBufferSize,
L"%.*g",
static_cast<int>(boost::detail::lcast_get_precision<float >()),
val_as_double );
- return end > begin;
+ return finish > start;
}
- static bool shl_real_type(double val, wchar_t* begin, wchar_t*& end)
- { using namespace std;
- if (put_inf_nan(begin, end, val)) return true;
- end = begin + swprintf(begin, end-begin,
+ bool shl_real_type(double val, wchar_t* begin) {
+ using namespace std;
+ finish = start + swprintf(begin, CharacterBufferSize,
L"%.*g", static_cast<int>(boost::detail::lcast_get_precision<double >()), val );
- return end > begin;
+ return finish > start;
}
- static bool shl_real_type(long double val, wchar_t* begin, wchar_t*& end)
- { using namespace std;
- if (put_inf_nan(begin, end, val)) return true;
- end = begin + swprintf(begin, end-begin,
+ bool shl_real_type(long double val, wchar_t* begin) {
+ using namespace std;
+ finish = start + swprintf(begin, CharacterBufferSize,
L"%.*Lg", static_cast<int>(boost::detail::lcast_get_precision<long double >()), val );
- return end > begin;
+ return finish > start;
}
#endif
+ template <class T>
+ bool shl_real(T val) {
+ CharT* tmp_finish = buffer + CharacterBufferSize;
+ if (put_inf_nan(buffer, tmp_finish, val)) {
+ finish = tmp_finish;
+ return true;
+ }
+
+ return shl_real_type(val, static_cast<CharT*>(buffer));
+ }
/************************************ OPERATORS << ( ... ) ********************************/
public:
template<class Alloc>
- bool operator<<(std::basic_string<CharT,Traits,Alloc> const& str) BOOST_NOEXCEPT
- {
- start = const_cast<CharT*>(str.data());
+ bool operator<<(std::basic_string<CharT,Traits,Alloc> const& str) BOOST_NOEXCEPT {
+ start = str.data();
finish = start + str.length();
return true;
}
template<class Alloc>
- bool operator<<(boost::container::basic_string<CharT,Traits,Alloc> const& str) BOOST_NOEXCEPT
- {
- start = const_cast<CharT*>(str.data());
+ bool operator<<(boost::container::basic_string<CharT,Traits,Alloc> const& str) BOOST_NOEXCEPT {
+ start = str.data();
finish = start + str.length();
return true;
}
- bool operator<<(bool value) BOOST_NOEXCEPT
- {
+ bool operator<<(bool value) BOOST_NOEXCEPT {
CharT const czero = lcast_char_constants<CharT>::zero;
- Traits::assign(*start, Traits::to_char_type(czero + value));
+ Traits::assign(buffer[0], Traits::to_char_type(czero + value));
finish = start + 1;
return true;
}
- bool operator<<(const iterator_range<CharT*>& rng) BOOST_NOEXCEPT
- {
- start = rng.begin();
- finish = rng.end();
- return true;
+ template <class C>
+ BOOST_DEDUCED_TYPENAME boost::disable_if<boost::is_const<C>, bool>::type
+ operator<<(const iterator_range<C*>& rng) BOOST_NOEXCEPT {
+ return (*this) << iterator_range<const C*>(rng.begin(), rng.end());
}
- bool operator<<(const iterator_range<const CharT*>& rng) BOOST_NOEXCEPT
- {
- start = const_cast<CharT*>(rng.begin());
- finish = const_cast<CharT*>(rng.end());
+ bool operator<<(const iterator_range<const CharT*>& rng) BOOST_NOEXCEPT {
+ start = rng.begin();
+ finish = rng.end();
return true;
}
- bool operator<<(const iterator_range<const signed char*>& rng) BOOST_NOEXCEPT
- {
- return (*this) << iterator_range<char*>(
- const_cast<char*>(reinterpret_cast<const char*>(rng.begin())),
- const_cast<char*>(reinterpret_cast<const char*>(rng.end()))
+ bool operator<<(const iterator_range<const signed char*>& rng) BOOST_NOEXCEPT {
+ return (*this) << iterator_range<const char*>(
+ reinterpret_cast<const char*>(rng.begin()),
+ reinterpret_cast<const char*>(rng.end())
);
}
- bool operator<<(const iterator_range<const unsigned char*>& rng) BOOST_NOEXCEPT
- {
- return (*this) << iterator_range<char*>(
- const_cast<char*>(reinterpret_cast<const char*>(rng.begin())),
- const_cast<char*>(reinterpret_cast<const char*>(rng.end()))
- );
- }
-
- bool operator<<(const iterator_range<signed char*>& rng) BOOST_NOEXCEPT
- {
- return (*this) << iterator_range<char*>(
- reinterpret_cast<char*>(rng.begin()),
- reinterpret_cast<char*>(rng.end())
- );
- }
-
- bool operator<<(const iterator_range<unsigned char*>& rng) BOOST_NOEXCEPT
- {
- return (*this) << iterator_range<char*>(
- reinterpret_cast<char*>(rng.begin()),
- reinterpret_cast<char*>(rng.end())
+ bool operator<<(const iterator_range<const unsigned char*>& rng) BOOST_NOEXCEPT {
+ return (*this) << iterator_range<const char*>(
+ reinterpret_cast<const char*>(rng.begin()),
+ reinterpret_cast<const char*>(rng.end())
);
}
@@ -1815,114 +1602,102 @@ namespace boost {
bool operator<<(short n) { return shl_signed(n); }
bool operator<<(int n) { return shl_signed(n); }
bool operator<<(long n) { return shl_signed(n); }
- bool operator<<(unsigned short n) { start = lcast_put_unsigned<Traits>(n, finish); return true; }
- bool operator<<(unsigned int n) { start = lcast_put_unsigned<Traits>(n, finish); return true; }
- bool operator<<(unsigned long n) { start = lcast_put_unsigned<Traits>(n, finish); return true; }
+ bool operator<<(unsigned short n) { return shl_unsigned(n); }
+ bool operator<<(unsigned int n) { return shl_unsigned(n); }
+ bool operator<<(unsigned long n) { return shl_unsigned(n); }
#if defined(BOOST_HAS_LONG_LONG)
- bool operator<<(boost::ulong_long_type n) { start = lcast_put_unsigned<Traits>(n, finish); return true; }
+ bool operator<<(boost::ulong_long_type n) { return shl_unsigned(n); }
bool operator<<(boost::long_long_type n) { return shl_signed(n); }
#elif defined(BOOST_HAS_MS_INT64)
- bool operator<<(unsigned __int64 n) { start = lcast_put_unsigned<Traits>(n, finish); return true; }
+ bool operator<<(unsigned __int64 n) { return shl_unsigned(n); }
bool operator<<( __int64 n) { return shl_signed(n); }
#endif
-#ifdef BOOST_LCAST_HAS_INT128
- bool operator<<(const boost::uint128_type& n) { start = lcast_put_unsigned<Traits>(n, finish); return true; }
- bool operator<<(const boost::int128_type& n) { return shl_signed(n); }
+#ifdef BOOST_HAS_INT128
+ bool operator<<(const boost::uint128_type& n) { return shl_unsigned(n); }
+ bool operator<<(const boost::int128_type& n) { return shl_signed(n); }
#endif
-
- bool operator<<(float val) { return shl_real_type(val, start, finish); }
- bool operator<<(double val) { return shl_real_type(val, start, finish); }
+ bool operator<<(float val) { return shl_real(val); }
+ bool operator<<(double val) { return shl_real(val); }
bool operator<<(long double val) {
#ifndef __MINGW32__
- return shl_real_type(val, start, finish);
+ return shl_real(val);
#else
- return shl_real_type(static_cast<double>(val), start, finish);
+ return shl_real(static_cast<double>(val));
#endif
}
- template <std::size_t N>
- bool operator<<(boost::array<CharT, N> const& input) BOOST_NOEXCEPT
- { return shl_char_array_limited(input.begin(), N); }
-
- template <std::size_t N>
- bool operator<<(boost::array<unsigned char, N> const& input) BOOST_NOEXCEPT
- { return ((*this) << reinterpret_cast<boost::array<char, N> const& >(input)); }
-
- template <std::size_t N>
- bool operator<<(boost::array<signed char, N> const& input) BOOST_NOEXCEPT
- { return ((*this) << reinterpret_cast<boost::array<char, N> const& >(input)); }
+ // Adding constness to characters. Constness does not change layout
+ template <class C, std::size_t N>
+ BOOST_DEDUCED_TYPENAME boost::disable_if<boost::is_const<C>, bool>::type
+ operator<<(boost::array<C, N> const& input) BOOST_NOEXCEPT {
+ BOOST_STATIC_ASSERT_MSG(
+ (sizeof(boost::array<const C, N>) == sizeof(boost::array<C, N>)),
+ "boost::array<C, N> and boost::array<const C, N> must have exactly the same layout."
+ );
+ return ((*this) << reinterpret_cast<boost::array<const C, N> const& >(input));
+ }
template <std::size_t N>
- bool operator<<(boost::array<const CharT, N> const& input) BOOST_NOEXCEPT
- { return shl_char_array_limited(input.begin(), N); }
+ bool operator<<(boost::array<const CharT, N> const& input) BOOST_NOEXCEPT {
+ return shl_char_array_limited(input.begin(), N);
+ }
template <std::size_t N>
- bool operator<<(boost::array<const unsigned char, N> const& input) BOOST_NOEXCEPT
- { return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input)); }
+ bool operator<<(boost::array<const unsigned char, N> const& input) BOOST_NOEXCEPT {
+ return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input));
+ }
template <std::size_t N>
- bool operator<<(boost::array<const signed char, N> const& input) BOOST_NOEXCEPT
- { return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input)); }
+ bool operator<<(boost::array<const signed char, N> const& input) BOOST_NOEXCEPT {
+ return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input));
+ }
#ifndef BOOST_NO_CXX11_HDR_ARRAY
- template <std::size_t N>
- bool operator<<(std::array<CharT, N> const& input) BOOST_NOEXCEPT
- {
- if (input.size()) return shl_char_array_limited(&input[0], N);
- else return true;
- }
-
- template <std::size_t N>
- bool operator<<(std::array<unsigned char, N> const& input) BOOST_NOEXCEPT
- { return ((*this) << reinterpret_cast<boost::array<char, N> const& >(input)); }
-
- template <std::size_t N>
- bool operator<<(std::array<signed char, N> const& input) BOOST_NOEXCEPT
- { return ((*this) << reinterpret_cast<boost::array<char, N> const& >(input)); }
-
- template <std::size_t N>
- bool operator<<(std::array<const CharT, N> const& input) BOOST_NOEXCEPT
- {
- if (input.size()) return shl_char_array_limited(&input[0], N);
- else return true;
+ // Making a Boost.Array from std::array
+ template <class C, std::size_t N>
+ bool operator<<(std::array<C, N> const& input) BOOST_NOEXCEPT {
+ BOOST_STATIC_ASSERT_MSG(
+ (sizeof(std::array<C, N>) == sizeof(boost::array<C, N>)),
+ "std::array and boost::array must have exactly the same layout. "
+ "Bug in implementation of std::array or boost::array."
+ );
+ return ((*this) << reinterpret_cast<boost::array<C, N> const& >(input));
}
-
- template <std::size_t N>
- bool operator<<(std::array<const unsigned char, N> const& input) BOOST_NOEXCEPT
- { return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input)); }
-
- template <std::size_t N>
- bool operator<<(std::array<const signed char, N> const& input) BOOST_NOEXCEPT
- { return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input)); }
#endif
-
template <class InStreamable>
bool operator<<(const InStreamable& input) { return shl_input_streamable(input); }
+ };
+
+
+ template <class CharT, class Traits>
+ class lexical_ostream_limited_src: boost::noncopyable {
+ //`[start, finish)` is the range to output by `operator >>`
+ const CharT* start;
+ const CharT* const finish;
+
+ public:
+ lexical_ostream_limited_src(const CharT* begin, const CharT* end) BOOST_NOEXCEPT
+ : start(begin)
+ , finish(end)
+ {}
/************************************ HELPER FUNCTIONS FOR OPERATORS >> ( ... ) ********************************/
private:
-
template <typename Type>
- bool shr_unsigned(Type& output)
- {
+ bool shr_unsigned(Type& output) {
if (start == finish) return false;
CharT const minus = lcast_char_constants<CharT>::minus;
CharT const plus = lcast_char_constants<CharT>::plus;
- bool has_minus = false;
+ bool const has_minus = Traits::eq(minus, *start);
/* We won`t use `start' any more, so no need in decrementing it after */
- if ( Traits::eq(minus,*start) )
- {
- ++start;
- has_minus = true;
- } else if ( Traits::eq( plus, *start ) )
- {
+ if (has_minus || Traits::eq(plus, *start)) {
++start;
}
- bool const succeed = lcast_ret_unsigned<Traits>(output, start, finish);
+ bool const succeed = lcast_ret_unsigned<Traits, Type, CharT>(output, start, finish).convert();
if (has_minus) {
output = static_cast<Type>(0u - output);
@@ -1932,26 +1707,20 @@ namespace boost {
}
template <typename Type>
- bool shr_signed(Type& output)
- {
+ bool shr_signed(Type& output) {
if (start == finish) return false;
CharT const minus = lcast_char_constants<CharT>::minus;
CharT const plus = lcast_char_constants<CharT>::plus;
typedef BOOST_DEDUCED_TYPENAME make_unsigned<Type>::type utype;
- utype out_tmp =0;
- bool has_minus = false;
+ utype out_tmp = 0;
+ bool const has_minus = Traits::eq(minus, *start);
/* We won`t use `start' any more, so no need in decrementing it after */
- if ( Traits::eq(minus,*start) )
- {
- ++start;
- has_minus = true;
- } else if ( Traits::eq(plus, *start) )
- {
+ if (has_minus || Traits::eq(plus, *start)) {
++start;
}
- bool succeed = lcast_ret_unsigned<Traits>(out_tmp, start, finish);
+ bool succeed = lcast_ret_unsigned<Traits, utype, CharT>(out_tmp, start, finish).convert();
if (has_minus) {
utype const comp_val = (static_cast<utype>(1) << std::numeric_limits<Type>::digits);
succeed = succeed && out_tmp<=comp_val;
@@ -1959,7 +1728,7 @@ namespace boost {
} else {
utype const comp_val = static_cast<utype>((std::numeric_limits<Type>::max)());
succeed = succeed && out_tmp<=comp_val;
- output = out_tmp;
+ output = static_cast<Type>(out_tmp);
}
return succeed;
}
@@ -1978,13 +1747,17 @@ namespace boost {
"support such conversions. Try updating it."
);
#endif
+ typedef BOOST_DEDUCED_TYPENAME out_stream_helper_trait<CharT, Traits>::buffer_t
+ buffer_t;
#if defined(BOOST_NO_STRINGSTREAM)
std::istrstream stream(start, finish - start);
#else
buffer_t buf;
- buf.setbuf(start, finish - start);
+ // Usually `istream` and `basic_istream` do not modify
+ // content of buffer; `buffer_t` assures that this is true
+ buf.setbuf(const_cast<CharT*>(start), finish - start);
#if defined(BOOST_NO_STD_LOCALE)
std::istream stream(&buf);
#else
@@ -1992,25 +1765,25 @@ namespace boost {
#endif // BOOST_NO_STD_LOCALE
#endif // BOOST_NO_STRINGSTREAM
+#ifndef BOOST_NO_EXCEPTIONS
+ stream.exceptions(std::ios::badbit);
+ try {
+#endif
stream.unsetf(std::ios::skipws);
lcast_set_precision(stream, static_cast<InputStreamable*>(0));
- return stream >> output &&
- stream.get() ==
-#if defined(__GNUC__) && (__GNUC__<3) && defined(BOOST_NO_STD_WSTRING)
- // GCC 2.9x lacks std::char_traits<>::eof().
- // We use BOOST_NO_STD_WSTRING to filter out STLport and libstdc++-v3
- // configurations, which do provide std::char_traits<>::eof().
+ return (stream >> output)
+ && (stream.get() == Traits::eof());
- EOF;
-#else
- Traits::eof();
+#ifndef BOOST_NO_EXCEPTIONS
+ } catch (const ::std::ios_base::failure& /*f*/) {
+ return false;
+ }
#endif
}
template<class T>
- inline bool shr_xchar(T& output)
- {
+ inline bool shr_xchar(T& output) BOOST_NOEXCEPT {
BOOST_STATIC_ASSERT_MSG(( sizeof(CharT) == sizeof(T) ),
"boost::lexical_cast does not support narrowing of character types."
"Use boost::locale instead" );
@@ -2023,6 +1796,19 @@ namespace boost {
return ok;
}
+ template <std::size_t N, class ArrayT>
+ bool shr_std_array(ArrayT& output) BOOST_NOEXCEPT {
+ using namespace std;
+ const std::size_t size = static_cast<std::size_t>(finish - start);
+ if (size > N - 1) { // `-1` because we need to store \0 at the end
+ return false;
+ }
+
+ memcpy(&output[0], start, size * sizeof(CharT));
+ output[size] = Traits::to_char_type(0);
+ return true;
+ }
+
/************************************ OPERATORS >> ( ... ) ********************************/
public:
bool operator>>(unsigned short& output) { return shr_unsigned(output); }
@@ -2039,7 +1825,7 @@ namespace boost {
bool operator>>(__int64& output) { return shr_signed(output); }
#endif
-#ifdef BOOST_LCAST_HAS_INT128
+#ifdef BOOST_HAS_INT128
bool operator>>(boost::uint128_type& output) { return shr_unsigned(output); }
bool operator>>(boost::int128_type& output) { return shr_signed(output); }
#endif
@@ -2057,100 +1843,72 @@ namespace boost {
bool operator>>(char32_t& output) { return shr_xchar(output); }
#endif
template<class Alloc>
- bool operator>>(std::basic_string<CharT,Traits,Alloc>& str) { str.assign(start, finish); return true; }
+ bool operator>>(std::basic_string<CharT,Traits,Alloc>& str) {
+ str.assign(start, finish); return true;
+ }
template<class Alloc>
- bool operator>>(boost::container::basic_string<CharT,Traits,Alloc>& str) { str.assign(start, finish); return true; }
-
-
- private:
- template <std::size_t N, class ArrayT>
- bool shr_std_array(ArrayT& output) BOOST_NOEXCEPT
- {
- using namespace std;
- const std::size_t size = finish - start;
- if (size > N - 1) { // `-1` because we need to store \0 at the end
- return false;
- }
-
- memcpy(&output[0], start, size * sizeof(CharT));
- output[size] = Traits::to_char_type(0);
- return true;
+ bool operator>>(boost::container::basic_string<CharT,Traits,Alloc>& str) {
+ str.assign(start, finish); return true;
}
- public:
-
template <std::size_t N>
- bool operator>>(boost::array<CharT, N>& output) BOOST_NOEXCEPT
- {
+ bool operator>>(boost::array<CharT, N>& output) BOOST_NOEXCEPT {
return shr_std_array<N>(output);
}
template <std::size_t N>
- bool operator>>(boost::array<unsigned char, N>& output)
- {
+ bool operator>>(boost::array<unsigned char, N>& output) BOOST_NOEXCEPT {
return ((*this) >> reinterpret_cast<boost::array<char, N>& >(output));
}
template <std::size_t N>
- bool operator>>(boost::array<signed char, N>& output)
- {
+ bool operator>>(boost::array<signed char, N>& output) BOOST_NOEXCEPT {
return ((*this) >> reinterpret_cast<boost::array<char, N>& >(output));
}
#ifndef BOOST_NO_CXX11_HDR_ARRAY
- template <std::size_t N>
- bool operator>>(std::array<CharT, N>& output) BOOST_NOEXCEPT
- {
- return shr_std_array<N>(output);
- }
-
- template <std::size_t N>
- bool operator>>(std::array<unsigned char, N>& output)
- {
- return ((*this) >> reinterpret_cast<std::array<char, N>& >(output));
- }
-
- template <std::size_t N>
- bool operator>>(std::array<signed char, N>& output)
- {
- return ((*this) >> reinterpret_cast<std::array<char, N>& >(output));
+ template <class C, std::size_t N>
+ bool operator>>(std::array<C, N>& output) BOOST_NOEXCEPT {
+ BOOST_STATIC_ASSERT_MSG(
+ (sizeof(boost::array<C, N>) == sizeof(boost::array<C, N>)),
+ "std::array<C, N> and boost::array<C, N> must have exactly the same layout."
+ );
+ return ((*this) >> reinterpret_cast<boost::array<C, N>& >(output));
}
#endif
+ bool operator>>(bool& output) BOOST_NOEXCEPT {
+ output = false; // Suppress warning about uninitalized variable
- /*
- * case "-0" || "0" || "+0" : output = false; return true;
- * case "1" || "+1": output = true; return true;
- * default: return false;
- */
- bool operator>>(bool& output) BOOST_NOEXCEPT
- {
+ if (start == finish) return false;
CharT const zero = lcast_char_constants<CharT>::zero;
CharT const plus = lcast_char_constants<CharT>::plus;
CharT const minus = lcast_char_constants<CharT>::minus;
- switch(finish-start)
- {
- case 1:
- output = Traits::eq(start[0], zero+1);
- return output || Traits::eq(start[0], zero );
- case 2:
- if ( Traits::eq( plus, *start) )
- {
- ++start;
- output = Traits::eq(start[0], zero +1);
- return output || Traits::eq(start[0], zero );
- } else
- {
- output = false;
- return Traits::eq( minus, *start)
- && Traits::eq( zero, start[1]);
- }
- default:
- output = false; // Suppress warning about uninitalized variable
- return false;
+ const CharT* const dec_finish = finish - 1;
+ output = Traits::eq(*dec_finish, zero + 1);
+ if (!output && !Traits::eq(*dec_finish, zero)) {
+ return false; // Does not ends on '0' or '1'
}
+
+ if (start == dec_finish) return true;
+
+ // We may have sign at the beginning
+ if (Traits::eq(plus, *start) || (Traits::eq(minus, *start) && !output)) {
+ ++ start;
+ }
+
+ // Skipping zeros
+ while (start != dec_finish) {
+ if (!Traits::eq(zero, *start)) {
+ return false; // Not a zero => error
+ }
+
+ ++ start;
+ }
+
+ return true;
}
bool operator>>(float& output) { return lcast_ret_float<Traits>(output,start,finish); }
@@ -2160,7 +1918,7 @@ namespace boost {
template <class T>
bool float_types_converter_internal(T& output, int /*tag*/) {
if (parse_inf_nan(start, finish, output)) return true;
- bool return_value = shr_using_base_class(output);
+ bool const return_value = shr_using_base_class(output);
/* Some compilers and libraries successfully
* parse 'inf', 'INFINITY', '1.0E', '1.0E-'...
@@ -2185,13 +1943,12 @@ namespace boost {
}
// Optimised converter
- bool float_types_converter_internal(double& output,char /*tag*/) {
- return lcast_ret_float<Traits>(output,start,finish);
+ bool float_types_converter_internal(double& output, char /*tag*/) {
+ return lcast_ret_float<Traits>(output, start, finish);
}
public:
- bool operator>>(double& output)
- {
+ bool operator>>(double& output) {
/*
* Some compilers implement long double as double. In that case these types have
* same size, same precision, same max and min values... And it means,
@@ -2211,16 +1968,17 @@ namespace boost {
return float_types_converter_internal(output, tag);
}
- bool operator>>(long double& output)
- {
+ bool operator>>(long double& output) {
int tag = 0;
return float_types_converter_internal(output, tag);
}
// Generic istream-based algorithm.
// lcast_streambuf_for_target<InputStreamable>::value is true.
- template<typename InputStreamable>
- bool operator>>(InputStreamable& output) { return shr_using_base_class(output); }
+ template <typename InputStreamable>
+ bool operator>>(InputStreamable& output) {
+ return shr_using_base_class(output);
+ }
};
}
@@ -2228,218 +1986,221 @@ namespace boost {
{
template<typename T>
struct is_stdstring
- {
- BOOST_STATIC_CONSTANT(bool, value = false );
- };
+ : boost::false_type
+ {};
template<typename CharT, typename Traits, typename Alloc>
struct is_stdstring< std::basic_string<CharT, Traits, Alloc> >
- {
- BOOST_STATIC_CONSTANT(bool, value = true );
- };
+ : boost::true_type
+ {};
template<typename CharT, typename Traits, typename Alloc>
struct is_stdstring< boost::container::basic_string<CharT, Traits, Alloc> >
- {
- BOOST_STATIC_CONSTANT(bool, value = true );
- };
+ : boost::true_type
+ {};
template<typename Target, typename Source>
struct is_arithmetic_and_not_xchars
{
- BOOST_STATIC_CONSTANT(bool, value =
- (
- boost::type_traits::ice_and<
- boost::is_arithmetic<Source>::value,
- boost::is_arithmetic<Target>::value,
- boost::type_traits::ice_not<
- detail::is_char_or_wchar<Target>::value
- >::value,
- boost::type_traits::ice_not<
- detail::is_char_or_wchar<Source>::value
- >::value
- >::value
- )
- );
+ BOOST_STATIC_CONSTANT(bool, value = (
+ boost::type_traits::ice_and<
+ boost::type_traits::ice_not<
+ boost::detail::is_character<Target>::value
+ >::value,
+ boost::type_traits::ice_not<
+ boost::detail::is_character<Source>::value
+ >::value,
+ boost::is_arithmetic<Source>::value,
+ boost::is_arithmetic<Target>::value
+ >::value
+ ));
};
/*
- * is_xchar_to_xchar<Target, Source>::value is true, when
- * Target and Souce are the same char types, or when
- * Target and Souce are char types of the same size.
+ * is_xchar_to_xchar<Target, Source>::value is true,
+ * Target and Souce are char types of the same size 1 (char, signed char, unsigned char).
*/
template<typename Target, typename Source>
- struct is_xchar_to_xchar
+ struct is_xchar_to_xchar
{
- BOOST_STATIC_CONSTANT(bool, value =
- (
- boost::type_traits::ice_or<
- boost::type_traits::ice_and<
- is_same<Source,Target>::value,
- is_char_or_wchar<Target>::value
- >::value,
- boost::type_traits::ice_and<
- boost::type_traits::ice_eq< sizeof(char),sizeof(Target)>::value,
- boost::type_traits::ice_eq< sizeof(char),sizeof(Source)>::value,
- is_char_or_wchar<Target>::value,
- is_char_or_wchar<Source>::value
- >::value
- >::value
- )
- );
+ BOOST_STATIC_CONSTANT(bool, value = (
+ boost::type_traits::ice_and<
+ boost::type_traits::ice_eq<sizeof(Source), sizeof(Target)>::value,
+ boost::type_traits::ice_eq<sizeof(Source), sizeof(char)>::value,
+ boost::detail::is_character<Target>::value,
+ boost::detail::is_character<Source>::value
+ >::value
+ ));
};
template<typename Target, typename Source>
struct is_char_array_to_stdstring
- {
- BOOST_STATIC_CONSTANT(bool, value = false );
- };
+ : boost::false_type
+ {};
template<typename CharT, typename Traits, typename Alloc>
struct is_char_array_to_stdstring< std::basic_string<CharT, Traits, Alloc>, CharT* >
- {
- BOOST_STATIC_CONSTANT(bool, value = true );
- };
+ : boost::true_type
+ {};
template<typename CharT, typename Traits, typename Alloc>
struct is_char_array_to_stdstring< std::basic_string<CharT, Traits, Alloc>, const CharT* >
- {
- BOOST_STATIC_CONSTANT(bool, value = true );
- };
+ : boost::true_type
+ {};
template<typename CharT, typename Traits, typename Alloc>
struct is_char_array_to_stdstring< boost::container::basic_string<CharT, Traits, Alloc>, CharT* >
- {
- BOOST_STATIC_CONSTANT(bool, value = true );
- };
+ : boost::true_type
+ {};
template<typename CharT, typename Traits, typename Alloc>
struct is_char_array_to_stdstring< boost::container::basic_string<CharT, Traits, Alloc>, const CharT* >
- {
- BOOST_STATIC_CONSTANT(bool, value = true );
- };
+ : boost::true_type
+ {};
-#if (defined _MSC_VER)
-# pragma warning( push )
-# pragma warning( disable : 4701 ) // possible use of ... before initialization
-# pragma warning( disable : 4702 ) // unreachable code
-# pragma warning( disable : 4267 ) // conversion from 'size_t' to 'unsigned int'
-#endif
template<typename Target, typename Source>
- struct lexical_cast_do_cast
+ struct lexical_converter_impl
{
- static inline Target lexical_cast_impl(const Source& arg)
- {
- typedef lexical_cast_stream_traits<Source, Target> stream_trait;
-
- typedef detail::lexical_stream_limited_src<
- BOOST_DEDUCED_TYPENAME stream_trait::char_type,
- BOOST_DEDUCED_TYPENAME stream_trait::traits,
- stream_trait::requires_stringbuf
- > interpreter_type;
+ typedef lexical_cast_stream_traits<Source, Target> stream_trait;
- // Target type must be default constructible
- Target result;
+ typedef detail::lexical_istream_limited_src<
+ BOOST_DEDUCED_TYPENAME stream_trait::char_type,
+ BOOST_DEDUCED_TYPENAME stream_trait::traits,
+ stream_trait::requires_stringbuf,
+ stream_trait::len_t::value + 1
+ > i_interpreter_type;
- BOOST_DEDUCED_TYPENAME stream_trait::char_type buf[stream_trait::len_t::value + 1];
- stream_trait::len_t::check_coverage();
+ typedef detail::lexical_ostream_limited_src<
+ BOOST_DEDUCED_TYPENAME stream_trait::char_type,
+ BOOST_DEDUCED_TYPENAME stream_trait::traits
+ > o_interpreter_type;
- interpreter_type interpreter(buf, buf + stream_trait::len_t::value + 1);
+ static inline bool try_convert(const Source& arg, Target& result) {
+ i_interpreter_type i_interpreter;
// Disabling ADL, by directly specifying operators.
- if(!(interpreter.operator <<(arg) && interpreter.operator >>(result)))
- BOOST_LCAST_THROW_BAD_CAST(Source, Target);
+ if (!(i_interpreter.operator <<(arg)))
+ return false;
- return result;
+ o_interpreter_type out(i_interpreter.cbegin(), i_interpreter.cend());
+
+ // Disabling ADL, by directly specifying operators.
+ if(!(out.operator >>(result)))
+ return false;
+
+ return true;
}
};
-#if (defined _MSC_VER)
-# pragma warning( pop )
-#endif
- template <typename Source>
- struct lexical_cast_copy
+ template <typename Target, typename Source>
+ struct copy_converter_impl
{
- static inline const Source& lexical_cast_impl(const Source &arg) BOOST_NOEXCEPT
- {
- return arg;
+// MSVC fail to forward an array (DevDiv#555157 "SILENT BAD CODEGEN triggered by perfect forwarding",
+// fixed in 2013 RTM).
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && (!defined(BOOST_MSVC) || BOOST_MSVC >= 1800)
+ template <class T>
+ static inline bool try_convert(T&& arg, Target& result) {
+ result = static_cast<T&&>(arg); // eqaul to `result = std::forward<T>(arg);`
+ return true;
}
+#else
+ static inline bool try_convert(const Source& arg, Target& result) {
+ result = arg;
+ return true;
+ }
+#endif
};
- template <class Source, class Target >
+ template <class Source >
struct detect_precision_loss
{
- typedef boost::numeric::Trunc<Source> Rounder;
- typedef Source source_type ;
+ typedef Source source_type;
+ typedef boost::numeric::Trunc<Source> Rounder;
+ typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+ boost::is_arithmetic<Source>, Source, Source const&
+ >::type argument_type ;
- typedef BOOST_DEDUCED_TYPENAME mpl::if_<
- boost::is_arithmetic<Source>, Source, Source const&
- >::type argument_type ;
+ static inline source_type nearbyint(argument_type s, bool& is_ok) BOOST_NOEXCEPT {
+ const source_type near_int = Rounder::nearbyint(s);
+ if (near_int && is_ok) {
+ const source_type orig_div_round = s / near_int;
+ const source_type eps = std::numeric_limits<source_type>::epsilon();
- static source_type nearbyint ( argument_type s )
- {
- const source_type near_int = Rounder::nearbyint(s);
- if (near_int) {
- const source_type orig_div_round = s / near_int;
- const source_type eps = std::numeric_limits<source_type>::epsilon();
+ is_ok = !((orig_div_round > 1 ? orig_div_round - 1 : 1 - orig_div_round) > eps);
+ }
- if ((orig_div_round > 1 ? orig_div_round - 1 : 1 - orig_div_round) > eps)
- BOOST_LCAST_THROW_BAD_CAST(Source, Target);
+ return s;
}
- return s ;
- }
+ typedef typename Rounder::round_style round_style;
+ };
- typedef typename Rounder::round_style round_style;
- } ;
+ template <typename Base, class Source>
+ struct fake_precision_loss: public Base
+ {
+ typedef Source source_type ;
+ typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+ boost::is_arithmetic<Source>, Source, Source const&
+ >::type argument_type ;
+
+ static inline source_type nearbyint(argument_type s, bool& /*is_ok*/) BOOST_NOEXCEPT {
+ return s;
+ }
+ };
- template <class Source, class Target >
struct nothrow_overflow_handler
{
- void operator() ( boost::numeric::range_check_result r )
- {
- if (r != boost::numeric::cInRange)
- BOOST_LCAST_THROW_BAD_CAST(Source, Target);
- }
- } ;
+ inline bool operator() ( boost::numeric::range_check_result r ) const BOOST_NOEXCEPT {
+ return (r == boost::numeric::cInRange);
+ }
+ };
+
+ template <typename Target, typename Source>
+ inline bool noexcept_numeric_convert(const Source& arg, Target& result) BOOST_NOEXCEPT {
+ typedef boost::numeric::converter<
+ Target,
+ Source,
+ boost::numeric::conversion_traits<Target, Source >,
+ nothrow_overflow_handler,
+ detect_precision_loss<Source >
+ > converter_orig_t;
+
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
+ boost::is_base_of< detect_precision_loss<Source >, converter_orig_t >::value,
+ converter_orig_t,
+ fake_precision_loss<converter_orig_t, Source>
+ >::type converter_t;
+
+ bool res = nothrow_overflow_handler()(converter_t::out_of_range(arg));
+ result = converter_t::low_level_convert(converter_t::nearbyint(arg, res));
+ return res;
+ }
template <typename Target, typename Source>
struct lexical_cast_dynamic_num_not_ignoring_minus
{
- static inline Target lexical_cast_impl(const Source &arg)
- {
- return boost::numeric::converter<
- Target,
- Source,
- boost::numeric::conversion_traits<Target,Source>,
- nothrow_overflow_handler<Source, Target>,
- detect_precision_loss<Source, Target>
- >::convert(arg);
+ static inline bool try_convert(const Source &arg, Target& result) BOOST_NOEXCEPT {
+ return noexcept_numeric_convert<Target, Source >(arg, result);
}
};
template <typename Target, typename Source>
struct lexical_cast_dynamic_num_ignoring_minus
{
- static inline Target lexical_cast_impl(const Source &arg)
- {
+ static inline bool try_convert(const Source &arg, Target& result) BOOST_NOEXCEPT {
typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_if_c<
boost::is_float<Source>::value,
boost::mpl::identity<Source>,
boost::make_unsigned<Source>
>::type usource_t;
-
- typedef boost::numeric::converter<
- Target,
- usource_t,
- boost::numeric::conversion_traits<Target,usource_t>,
- nothrow_overflow_handler<usource_t, Target>,
- detect_precision_loss<usource_t, Target>
- > converter_t;
-
- return (
- arg < 0 ? static_cast<Target>(0u - converter_t::convert(0u - arg)) : converter_t::convert(arg)
- );
+
+ if (arg < 0) {
+ const bool res = noexcept_numeric_convert<Target, usource_t>(0u - arg, result);
+ result = static_cast<Target>(0u - result);
+ return res;
+ } else {
+ return noexcept_numeric_convert<Target, usource_t>(arg, result);
+ }
}
};
@@ -2462,12 +2223,12 @@ namespace boost {
* and the result will be the two's complement.
*/
template <typename Target, typename Source>
- struct lexical_cast_dynamic_num
+ struct dynamic_num_converter_impl
{
- static inline Target lexical_cast_impl(const Source &arg)
- {
+ static inline bool try_convert(const Source &arg, Target& result) BOOST_NOEXCEPT {
typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
boost::type_traits::ice_and<
+ boost::is_unsigned<Target>::value,
boost::type_traits::ice_or<
boost::is_signed<Source>::value,
boost::is_float<Source>::value
@@ -2477,64 +2238,102 @@ namespace boost {
>::value,
boost::type_traits::ice_not<
boost::is_same<Target, bool>::value
- >::value,
- boost::is_unsigned<Target>::value
+ >::value
>::value,
lexical_cast_dynamic_num_ignoring_minus<Target, Source>,
lexical_cast_dynamic_num_not_ignoring_minus<Target, Source>
>::type caster_type;
- return caster_type::lexical_cast_impl(arg);
+ return caster_type::try_convert(arg, result);
}
};
}
- template <typename Target, typename Source>
- inline Target lexical_cast(const Source &arg)
- {
- typedef BOOST_DEDUCED_TYPENAME boost::detail::array_to_pointer_decay<Source>::type src;
+ namespace conversion { namespace detail {
+
+ template <typename Target, typename Source>
+ inline bool try_lexical_convert(const Source& arg, Target& result)
+ {
+ typedef BOOST_DEDUCED_TYPENAME boost::detail::array_to_pointer_decay<Source>::type src;
- typedef BOOST_DEDUCED_TYPENAME boost::type_traits::ice_or<
+ typedef BOOST_DEDUCED_TYPENAME boost::type_traits::ice_or<
boost::detail::is_xchar_to_xchar<Target, src >::value,
boost::detail::is_char_array_to_stdstring<Target, src >::value,
boost::type_traits::ice_and<
boost::is_same<Target, src >::value,
boost::detail::is_stdstring<Target >::value
+ >::value,
+ boost::type_traits::ice_and<
+ boost::is_same<Target, src >::value,
+ boost::detail::is_character<Target >::value
>::value
- > shall_we_copy_t;
+ > shall_we_copy_t;
- typedef BOOST_DEDUCED_TYPENAME
- boost::detail::is_arithmetic_and_not_xchars<Target, src > shall_we_copy_with_dynamic_check_t;
+ typedef boost::detail::is_arithmetic_and_not_xchars<Target, src >
+ shall_we_copy_with_dynamic_check_t;
- typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
- shall_we_copy_t::value,
- boost::detail::lexical_cast_copy<src >,
- BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
- shall_we_copy_with_dynamic_check_t::value,
- boost::detail::lexical_cast_dynamic_num<Target, src >,
- boost::detail::lexical_cast_do_cast<Target, src >
- >::type
- >::type caster_type;
+ // We do evaluate second `if_` lazily to avoid unnecessary instantiations
+ // of `shall_we_copy_with_dynamic_check_t` and improve compilation times.
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
+ shall_we_copy_t::value,
+ boost::mpl::identity<boost::detail::copy_converter_impl<Target, src > >,
+ boost::mpl::if_<
+ shall_we_copy_with_dynamic_check_t,
+ boost::detail::dynamic_num_converter_impl<Target, src >,
+ boost::detail::lexical_converter_impl<Target, src >
+ >
+ >::type caster_type_lazy;
+
+ typedef BOOST_DEDUCED_TYPENAME caster_type_lazy::type caster_type;
+
+ return caster_type::try_convert(arg, result);
+ }
+
+ template <typename Target, typename CharacterT>
+ inline bool try_lexical_convert(const CharacterT* chars, std::size_t count, Target& result)
+ {
+ BOOST_STATIC_ASSERT_MSG(
+ boost::detail::is_character<CharacterT>::value,
+ "This overload of try_lexical_convert is meant to be used only with arrays of characters."
+ );
+ return ::boost::conversion::detail::try_lexical_convert(
+ ::boost::iterator_range<const CharacterT*>(chars, chars + count), result
+ );
+ }
+
+ }} // namespace conversion::detail
+
+ namespace conversion {
+ // ADL barrier
+ using ::boost::conversion::detail::try_lexical_convert;
+ }
- return caster_type::lexical_cast_impl(arg);
+ template <typename Target, typename Source>
+ inline Target lexical_cast(const Source &arg)
+ {
+ Target result;
+
+ if (!boost::conversion::detail::try_lexical_convert(arg, result))
+ BOOST_LCAST_THROW_BAD_CAST(Source, Target);
+
+ return result;
}
template <typename Target>
inline Target lexical_cast(const char* chars, std::size_t count)
- {
+ {
return ::boost::lexical_cast<Target>(
::boost::iterator_range<const char*>(chars, chars + count)
);
}
-
template <typename Target>
inline Target lexical_cast(const unsigned char* chars, std::size_t count)
{
- return ::boost::lexical_cast<Target>(
+ return ::boost::lexical_cast<Target>(
::boost::iterator_range<const unsigned char*>(chars, chars + count)
- );
- }
+ );
+ }
template <typename Target>
inline Target lexical_cast(const signed char* chars, std::size_t count)
@@ -2553,7 +2352,7 @@ namespace boost {
);
}
#endif
-#ifndef BOOST_NO_CHAR16_T
+#ifndef BOOST_NO_CXX11_CHAR16_T
template <typename Target>
inline Target lexical_cast(const char16_t* chars, std::size_t count)
{
@@ -2562,7 +2361,7 @@ namespace boost {
);
}
#endif
-#ifndef BOOST_NO_CHAR32_T
+#ifndef BOOST_NO_CXX11_CHAR32_T
template <typename Target>
inline Target lexical_cast(const char32_t* chars, std::size_t count)
{
@@ -2574,7 +2373,7 @@ namespace boost {
} // namespace boost
-#else // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#else
namespace boost {
namespace detail
@@ -2647,16 +2446,7 @@ namespace boost {
{
return !is_pointer<InputStreamable>::value &&
stream >> output &&
- stream.get() ==
-#if defined(__GNUC__) && (__GNUC__<3) && defined(BOOST_NO_STD_WSTRING)
-// GCC 2.9x lacks std::char_traits<>::eof().
-// We use BOOST_NO_STD_WSTRING to filter out STLport and libstdc++-v3
-// configurations, which do provide std::char_traits<>::eof().
-
- EOF;
-#else
- traits_type::eof();
-#endif
+ stream.get() == traits_type::eof();
}
bool operator>>(std::string &output)
@@ -2711,7 +2501,7 @@ namespace boost {
// Copyright Kevlin Henney, 2000-2005.
// Copyright Alexander Nasonov, 2006-2010.
-// Copyright Antony Polukhin, 2011-2013.
+// Copyright Antony Polukhin, 2011-2014.
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -2719,7 +2509,6 @@ namespace boost {
#undef BOOST_LCAST_THROW_BAD_CAST
#undef BOOST_LCAST_NO_WCHAR_T
-#undef BOOST_LCAST_HAS_INT128
#endif // BOOST_LEXICAL_CAST_INCLUDED
diff --git a/3party/boost/boost/lockfree/detail/atomic.hpp b/3party/boost/boost/lockfree/detail/atomic.hpp
index 303eca2438..f36ad4b6d5 100644
--- a/3party/boost/boost/lockfree/detail/atomic.hpp
+++ b/3party/boost/boost/lockfree/detail/atomic.hpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2011 Tim Blechmann
+// Copyright (C) 2011-2013 Tim Blechmann
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -9,7 +9,8 @@
#include <boost/config.hpp>
-// at this time, few compiles completely implement atomic<>
+#ifndef BOOST_LOCKFREE_FORCE_STD_ATOMIC
+
#define BOOST_LOCKFREE_NO_HDR_ATOMIC
// MSVC supports atomic<> from version 2012 onwards.
@@ -18,22 +19,12 @@
#endif
// GCC supports atomic<> from version 4.8 onwards.
-#if defined(__GNUC__)
-# if defined(__GNUC_PATCHLEVEL__)
-# define BOOST_ATOMIC_GNUC_VERSION (__GNUC__ * 10000 \
- + __GNUC_MINOR__ * 100 \
- + __GNUC_PATCHLEVEL__)
-# else
-# define BOOST_LOCKFREE_GNUC_VERSION (__GNUC__ * 10000 \
- + __GNUC_MINOR__ * 100)
-# endif
-#endif
-
-#if (BOOST_LOCKFREE_GNUC_VERSION >= 40800) && (__cplusplus >= 201103L)
+#if (BOOST_GCC >= 40800) && (__cplusplus >= 201103L)
#undef BOOST_LOCKFREE_NO_HDR_ATOMIC
#endif
-#undef BOOST_LOCKFREE_GNUC_VERSION
+#endif // BOOST_LOCKFREE_FORCE_STD_ATOMIC
+
#if defined(BOOST_LOCKFREE_NO_HDR_ATOMIC)
#include <boost/atomic.hpp>
diff --git a/3party/boost/boost/lockfree/detail/copy_payload.hpp b/3party/boost/boost/lockfree/detail/copy_payload.hpp
index 1e83eb295d..8968b95295 100644
--- a/3party/boost/boost/lockfree/detail/copy_payload.hpp
+++ b/3party/boost/boost/lockfree/detail/copy_payload.hpp
@@ -44,6 +44,23 @@ void copy_payload(T & t, U & u)
copy_type::copy(t, u);
}
+template <typename T>
+struct consume_via_copy
+{
+ consume_via_copy(T & out):
+ out_(out)
+ {}
+
+ template <typename U>
+ void operator()(U & element)
+ {
+ copy_payload(element, out_);
+ }
+
+ T & out_;
+};
+
+
}}}
#endif /* BOOST_LOCKFREE_DETAIL_COPY_PAYLOAD_HPP_INCLUDED */
diff --git a/3party/boost/boost/lockfree/detail/freelist.hpp b/3party/boost/boost/lockfree/detail/freelist.hpp
index 87a2bb1469..739df08ee5 100644
--- a/3party/boost/boost/lockfree/detail/freelist.hpp
+++ b/3party/boost/boost/lockfree/detail/freelist.hpp
@@ -1,6 +1,6 @@
// lock-free freelist
//
-// Copyright (C) 2008, 2009, 2011 Tim Blechmann
+// Copyright (C) 2008-2013 Tim Blechmann
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -22,6 +22,12 @@
#include <boost/lockfree/detail/parameter.hpp>
#include <boost/lockfree/detail/tagged_ptr.hpp>
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable: 4100) // unreferenced formal parameter
+#pragma warning(disable: 4127) // conditional expression is constant
+#endif
+
namespace boost {
namespace lockfree {
namespace detail {
@@ -110,7 +116,7 @@ public:
~freelist_stack(void)
{
- tagged_node_ptr current (pool_);
+ tagged_node_ptr current = pool_.load();
while (current) {
freelist_node * current_ptr = current.get_ptr();
@@ -634,4 +640,9 @@ struct select_tagged_handle
} /* namespace lockfree */
} /* namespace boost */
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+
#endif /* BOOST_LOCKFREE_FREELIST_HPP_INCLUDED */
diff --git a/3party/boost/boost/lockfree/queue.hpp b/3party/boost/boost/lockfree/queue.hpp
index 7752600631..9028dec834 100644
--- a/3party/boost/boost/lockfree/queue.hpp
+++ b/3party/boost/boost/lockfree/queue.hpp
@@ -12,9 +12,6 @@
#define BOOST_LOCKFREE_FIFO_HPP_INCLUDED
#include <boost/assert.hpp>
-#ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
-#include <boost/noncopyable.hpp>
-#endif
#include <boost/static_assert.hpp>
#include <boost/type_traits/has_trivial_assign.hpp>
#include <boost/type_traits/has_trivial_destructor.hpp>
@@ -25,6 +22,17 @@
#include <boost/lockfree/detail/parameter.hpp>
#include <boost/lockfree/detail/tagged_ptr.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable: 4324) // structure was padded due to __declspec(align())
+#endif
+
+
namespace boost {
namespace lockfree {
namespace detail {
@@ -70,9 +78,6 @@ template <typename T,
template <typename T, ...Options>
#endif
class queue
-#ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
- : boost::noncopyable
-#endif
{
private:
#ifndef BOOST_DOXYGEN_INVOKED
@@ -139,11 +144,8 @@ private:
#endif
-#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS
- queue(queue const &) = delete;
- queue(queue &&) = delete;
- const queue& operator=( const queue& ) = delete;
-#endif
+ BOOST_DELETED_FUNCTION(queue(queue const&))
+ BOOST_DELETED_FUNCTION(queue& operator= (queue const&))
public:
typedef T value_type;
@@ -541,4 +543,8 @@ private:
} /* namespace lockfree */
} /* namespace boost */
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
#endif /* BOOST_LOCKFREE_FIFO_HPP_INCLUDED */
diff --git a/3party/boost/boost/lockfree/spsc_queue.hpp b/3party/boost/boost/lockfree/spsc_queue.hpp
index 11031088fd..8beaf18b69 100644
--- a/3party/boost/boost/lockfree/spsc_queue.hpp
+++ b/3party/boost/boost/lockfree/spsc_queue.hpp
@@ -1,7 +1,7 @@
// lock-free single-producer/single-consumer ringbuffer
// this algorithm is implemented in various projects (linux kernel)
//
-// Copyright (C) 2009, 2011 Tim Blechmann
+// Copyright (C) 2009-2013 Tim Blechmann
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -11,19 +11,26 @@
#define BOOST_LOCKFREE_SPSC_QUEUE_HPP_INCLUDED
#include <algorithm>
+#include <memory>
-#include <boost/array.hpp>
+#include <boost/aligned_storage.hpp>
#include <boost/assert.hpp>
-#ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
-#include <boost/noncopyable.hpp>
-#endif
#include <boost/static_assert.hpp>
+#include <boost/utility.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/type_traits/has_trivial_destructor.hpp>
+#include <boost/type_traits/is_convertible.hpp>
#include <boost/lockfree/detail/atomic.hpp>
#include <boost/lockfree/detail/branch_hints.hpp>
+#include <boost/lockfree/detail/copy_payload.hpp>
#include <boost/lockfree/detail/parameter.hpp>
#include <boost/lockfree/detail/prefix.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
namespace boost {
namespace lockfree {
@@ -35,9 +42,6 @@ typedef parameter::parameters<boost::parameter::optional<tag::capacity>,
template <typename T>
class ringbuffer_base
-#ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
- : boost::noncopyable
-#endif
{
#ifndef BOOST_DOXYGEN_INVOKED
typedef std::size_t size_t;
@@ -46,11 +50,8 @@ class ringbuffer_base
char padding1[padding_size]; /* force read_index and write_index to different cache lines */
atomic<size_t> read_index_;
-#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS
- ringbuffer_base(ringbuffer_base const &) = delete;
- ringbuffer_base(ringbuffer_base &&) = delete;
- const ringbuffer_base& operator=( const ringbuffer_base& ) = delete;
-#endif
+ BOOST_DELETED_FUNCTION(ringbuffer_base(ringbuffer_base const&))
+ BOOST_DELETED_FUNCTION(ringbuffer_base& operator= (ringbuffer_base const&))
protected:
ringbuffer_base(void):
@@ -70,7 +71,7 @@ protected:
if (write_index >= read_index)
return write_index - read_index;
- size_t ret = write_index + max_size - read_index;
+ const size_t ret = write_index + max_size - read_index;
return ret;
}
@@ -82,15 +83,29 @@ protected:
return ret;
}
+ size_t read_available(size_t max_size) const
+ {
+ size_t write_index = write_index_.load(memory_order_relaxed);
+ const size_t read_index = read_index_.load(memory_order_relaxed);
+ return read_available(write_index, read_index, max_size);
+ }
+
+ size_t write_available(size_t max_size) const
+ {
+ size_t write_index = write_index_.load(memory_order_relaxed);
+ const size_t read_index = read_index_.load(memory_order_relaxed);
+ return write_available(write_index, read_index, max_size);
+ }
+
bool push(T const & t, T * buffer, size_t max_size)
{
- size_t write_index = write_index_.load(memory_order_relaxed); // only written from push thread
- size_t next = next_index(write_index, max_size);
+ const size_t write_index = write_index_.load(memory_order_relaxed); // only written from push thread
+ const size_t next = next_index(write_index, max_size);
if (next == read_index_.load(memory_order_acquire))
return false; /* ringbuffer is full */
- buffer[write_index] = t;
+ new (buffer + write_index) T(t); // copy-construct
write_index_.store(next, memory_order_release);
@@ -99,92 +114,155 @@ protected:
size_t push(const T * input_buffer, size_t input_count, T * internal_buffer, size_t max_size)
{
- size_t write_index = write_index_.load(memory_order_relaxed); // only written from push thread
+ return push(input_buffer, input_buffer + input_count, internal_buffer, max_size) - input_buffer;
+ }
+
+ template <typename ConstIterator>
+ ConstIterator push(ConstIterator begin, ConstIterator end, T * internal_buffer, size_t max_size)
+ {
+ // FIXME: avoid std::distance
+
+ const size_t write_index = write_index_.load(memory_order_relaxed); // only written from push thread
const size_t read_index = read_index_.load(memory_order_acquire);
const size_t avail = write_available(write_index, read_index, max_size);
if (avail == 0)
- return 0;
+ return begin;
+ size_t input_count = std::distance(begin, end);
input_count = (std::min)(input_count, avail);
size_t new_write_index = write_index + input_count;
+ const ConstIterator last = boost::next(begin, input_count);
+
if (write_index + input_count > max_size) {
/* copy data in two sections */
- size_t count0 = max_size - write_index;
+ const size_t count0 = max_size - write_index;
+ const ConstIterator midpoint = boost::next(begin, count0);
- std::copy(input_buffer, input_buffer + count0, internal_buffer + write_index);
- std::copy(input_buffer + count0, input_buffer + input_count, internal_buffer);
+ std::uninitialized_copy(begin, midpoint, internal_buffer + write_index);
+ std::uninitialized_copy(midpoint, last, internal_buffer);
new_write_index -= max_size;
} else {
- std::copy(input_buffer, input_buffer + input_count, internal_buffer + write_index);
+ std::uninitialized_copy(begin, last, internal_buffer + write_index);
if (new_write_index == max_size)
new_write_index = 0;
}
write_index_.store(new_write_index, memory_order_release);
- return input_count;
+ return last;
}
- template <typename ConstIterator>
- ConstIterator push(ConstIterator begin, ConstIterator end, T * internal_buffer, size_t max_size)
+ template <typename Functor>
+ bool consume_one(Functor & functor, T * buffer, size_t max_size)
{
- // FIXME: avoid std::distance and std::advance
+ const size_t write_index = write_index_.load(memory_order_acquire);
+ const size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread
+ if ( empty(write_index, read_index) )
+ return false;
- size_t write_index = write_index_.load(memory_order_relaxed); // only written from push thread
- const size_t read_index = read_index_.load(memory_order_acquire);
- const size_t avail = write_available(write_index, read_index, max_size);
+ T & object_to_consume = buffer[read_index];
+ functor( object_to_consume );
+ object_to_consume.~T();
- if (avail == 0)
- return begin;
+ size_t next = next_index(read_index, max_size);
+ read_index_.store(next, memory_order_release);
+ return true;
+ }
- size_t input_count = std::distance(begin, end);
- input_count = (std::min)(input_count, avail);
+ template <typename Functor>
+ bool consume_one(Functor const & functor, T * buffer, size_t max_size)
+ {
+ const size_t write_index = write_index_.load(memory_order_acquire);
+ const size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread
+ if ( empty(write_index, read_index) )
+ return false;
- size_t new_write_index = write_index + input_count;
+ T & object_to_consume = buffer[read_index];
+ functor( object_to_consume );
+ object_to_consume.~T();
- ConstIterator last = begin;
- std::advance(last, input_count);
+ size_t next = next_index(read_index, max_size);
+ read_index_.store(next, memory_order_release);
+ return true;
+ }
- if (write_index + input_count > max_size) {
+ template <typename Functor>
+ size_t consume_all (Functor const & functor, T * internal_buffer, size_t max_size)
+ {
+ const size_t write_index = write_index_.load(memory_order_acquire);
+ const size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread
+
+ const size_t avail = read_available(write_index, read_index, max_size);
+
+ if (avail == 0)
+ return 0;
+
+ const size_t output_count = avail;
+
+ size_t new_read_index = read_index + output_count;
+
+ if (read_index + output_count > max_size) {
/* copy data in two sections */
- size_t count0 = max_size - write_index;
- ConstIterator midpoint = begin;
- std::advance(midpoint, count0);
+ const size_t count0 = max_size - read_index;
+ const size_t count1 = output_count - count0;
- std::copy(begin, midpoint, internal_buffer + write_index);
- std::copy(midpoint, last, internal_buffer);
- new_write_index -= max_size;
+ run_functor_and_delete(internal_buffer + read_index, internal_buffer + max_size, functor);
+ run_functor_and_delete(internal_buffer, internal_buffer + count1, functor);
+
+ new_read_index -= max_size;
} else {
- std::copy(begin, last, internal_buffer + write_index);
+ run_functor_and_delete(internal_buffer + read_index, internal_buffer + read_index + output_count, functor);
- if (new_write_index == max_size)
- new_write_index = 0;
+ if (new_read_index == max_size)
+ new_read_index = 0;
}
- write_index_.store(new_write_index, memory_order_release);
- return last;
+ read_index_.store(new_read_index, memory_order_release);
+ return output_count;
}
- bool pop (T & ret, T * buffer, size_t max_size)
+ template <typename Functor>
+ size_t consume_all (Functor & functor, T * internal_buffer, size_t max_size)
{
- size_t write_index = write_index_.load(memory_order_acquire);
- size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread
- if (empty(write_index, read_index))
- return false;
+ const size_t write_index = write_index_.load(memory_order_acquire);
+ const size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread
- ret = buffer[read_index];
- size_t next = next_index(read_index, max_size);
- read_index_.store(next, memory_order_release);
- return true;
+ const size_t avail = read_available(write_index, read_index, max_size);
+
+ if (avail == 0)
+ return 0;
+
+ const size_t output_count = avail;
+
+ size_t new_read_index = read_index + output_count;
+
+ if (read_index + output_count > max_size) {
+ /* copy data in two sections */
+ const size_t count0 = max_size - read_index;
+ const size_t count1 = output_count - count0;
+
+ run_functor_and_delete(internal_buffer + read_index, internal_buffer + max_size, functor);
+ run_functor_and_delete(internal_buffer, internal_buffer + count1, functor);
+
+ new_read_index -= max_size;
+ } else {
+ run_functor_and_delete(internal_buffer + read_index, internal_buffer + read_index + output_count, functor);
+
+ if (new_read_index == max_size)
+ new_read_index = 0;
+ }
+
+ read_index_.store(new_read_index, memory_order_release);
+ return output_count;
}
- size_t pop (T * output_buffer, size_t output_count, const T * internal_buffer, size_t max_size)
+ size_t pop (T * output_buffer, size_t output_count, T * internal_buffer, size_t max_size)
{
const size_t write_index = write_index_.load(memory_order_acquire);
- size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread
+ const size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread
const size_t avail = read_available(write_index, read_index, max_size);
@@ -197,15 +275,15 @@ protected:
if (read_index + output_count > max_size) {
/* copy data in two sections */
- size_t count0 = max_size - read_index;
- size_t count1 = output_count - count0;
+ const size_t count0 = max_size - read_index;
+ const size_t count1 = output_count - count0;
- std::copy(internal_buffer + read_index, internal_buffer + max_size, output_buffer);
- std::copy(internal_buffer, internal_buffer + count1, output_buffer + count0);
+ copy_and_delete(internal_buffer + read_index, internal_buffer + max_size, output_buffer);
+ copy_and_delete(internal_buffer, internal_buffer + count1, output_buffer + count0);
new_read_index -= max_size;
} else {
- std::copy(internal_buffer + read_index, internal_buffer + read_index + output_count, output_buffer);
+ copy_and_delete(internal_buffer + read_index, internal_buffer + read_index + output_count, output_buffer);
if (new_read_index == max_size)
new_read_index = 0;
}
@@ -215,10 +293,10 @@ protected:
}
template <typename OutputIterator>
- size_t pop (OutputIterator it, const T * internal_buffer, size_t max_size)
+ size_t pop_to_output_iterator (OutputIterator it, T * internal_buffer, size_t max_size)
{
const size_t write_index = write_index_.load(memory_order_acquire);
- size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread
+ const size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread
const size_t avail = read_available(write_index, read_index, max_size);
if (avail == 0)
@@ -228,15 +306,15 @@ protected:
if (read_index + avail > max_size) {
/* copy data in two sections */
- size_t count0 = max_size - read_index;
- size_t count1 = avail - count0;
+ const size_t count0 = max_size - read_index;
+ const size_t count1 = avail - count0;
- it = std::copy(internal_buffer + read_index, internal_buffer + max_size, it);
- std::copy(internal_buffer, internal_buffer + count1, it);
+ it = copy_and_delete(internal_buffer + read_index, internal_buffer + max_size, it);
+ copy_and_delete(internal_buffer, internal_buffer + count1, it);
new_read_index -= max_size;
} else {
- std::copy(internal_buffer + read_index, internal_buffer + read_index + avail, it);
+ copy_and_delete(internal_buffer + read_index, internal_buffer + read_index + avail, it);
if (new_read_index == max_size)
new_read_index = 0;
}
@@ -254,8 +332,16 @@ public:
* */
void reset(void)
{
- write_index_.store(0, memory_order_relaxed);
- read_index_.store(0, memory_order_release);
+ if ( !boost::has_trivial_destructor<T>::value ) {
+ // make sure to call all destructors!
+
+ T dummy_element;
+ while (pop(dummy_element))
+ {}
+ } else {
+ write_index_.store(0, memory_order_relaxed);
+ read_index_.store(0, memory_order_release);
+ }
}
/** Check if the ringbuffer is empty
@@ -282,59 +368,120 @@ private:
{
return write_index == read_index;
}
+
+ template< class OutputIterator >
+ OutputIterator copy_and_delete( T * first, T * last, OutputIterator out )
+ {
+ if (boost::has_trivial_destructor<T>::value) {
+ return std::copy(first, last, out); // will use memcpy if possible
+ } else {
+ for (; first != last; ++first, ++out) {
+ *out = *first;
+ first->~T();
+ }
+ return out;
+ }
+ }
+
+ template< class Functor >
+ void run_functor_and_delete( T * first, T * last, Functor & functor )
+ {
+ for (; first != last; ++first) {
+ functor(*first);
+ first->~T();
+ }
+ }
+
+ template< class Functor >
+ void run_functor_and_delete( T * first, T * last, Functor const & functor )
+ {
+ for (; first != last; ++first) {
+ functor(*first);
+ first->~T();
+ }
+ }
};
template <typename T, std::size_t MaxSize>
class compile_time_sized_ringbuffer:
public ringbuffer_base<T>
{
- typedef std::size_t size_t;
+ typedef std::size_t size_type;
static const std::size_t max_size = MaxSize + 1;
- boost::array<T, max_size> array_;
+
+ typedef typename boost::aligned_storage<max_size * sizeof(T),
+ boost::alignment_of<T>::value
+ >::type storage_type;
+
+ storage_type storage_;
+
+ T * data()
+ {
+ return static_cast<T*>(storage_.address());
+ }
+
+protected:
+ size_type max_number_of_elements() const
+ {
+ return max_size;
+ }
public:
bool push(T const & t)
{
- return ringbuffer_base<T>::push(t, array_.c_array(), max_size);
+ return ringbuffer_base<T>::push(t, data(), max_size);
}
- bool pop(T & ret)
+ template <typename Functor>
+ bool consume_one(Functor & f)
{
- return ringbuffer_base<T>::pop(ret, array_.c_array(), max_size);
+ return ringbuffer_base<T>::consume_one(f, data(), max_size);
}
- size_t push(T const * t, size_t size)
+ template <typename Functor>
+ bool consume_one(Functor const & f)
{
- return ringbuffer_base<T>::push(t, size, array_.c_array(), max_size);
+ return ringbuffer_base<T>::consume_one(f, data(), max_size);
}
- template <size_t size>
- size_t push(T const (&t)[size])
+ template <typename Functor>
+ bool consume_all(Functor & f)
{
- return push(t, size);
+ return ringbuffer_base<T>::consume_all(f, data(), max_size);
}
- template <typename ConstIterator>
- ConstIterator push(ConstIterator begin, ConstIterator end)
+ template <typename Functor>
+ bool consume_all(Functor const & f)
{
- return ringbuffer_base<T>::push(begin, end, array_.c_array(), max_size);
+ return ringbuffer_base<T>::consume_all(f, data(), max_size);
}
- size_t pop(T * ret, size_t size)
+ size_type push(T const * t, size_type size)
{
- return ringbuffer_base<T>::pop(ret, size, array_.c_array(), max_size);
+ return ringbuffer_base<T>::push(t, size, data(), max_size);
}
- template <size_t size>
- size_t pop(T (&ret)[size])
+ template <size_type size>
+ size_type push(T const (&t)[size])
{
- return pop(ret, size);
+ return push(t, size);
+ }
+
+ template <typename ConstIterator>
+ ConstIterator push(ConstIterator begin, ConstIterator end)
+ {
+ return ringbuffer_base<T>::push(begin, end, data(), max_size);
+ }
+
+ size_type pop(T * ret, size_type size)
+ {
+ return ringbuffer_base<T>::pop(ret, size, data(), max_size);
}
template <typename OutputIterator>
- size_t pop(OutputIterator it)
+ size_type pop_to_output_iterator(OutputIterator it)
{
- return ringbuffer_base<T>::pop(it, array_.c_array(), max_size);
+ return ringbuffer_base<T>::pop_to_output_iterator(it, data(), max_size);
}
};
@@ -343,44 +490,43 @@ class runtime_sized_ringbuffer:
public ringbuffer_base<T>,
private Alloc
{
- typedef std::size_t size_t;
- size_t max_elements_;
+ typedef std::size_t size_type;
+ size_type max_elements_;
typedef typename Alloc::pointer pointer;
pointer array_;
+protected:
+ size_type max_number_of_elements() const
+ {
+ return max_elements_;
+ }
+
public:
- explicit runtime_sized_ringbuffer(size_t max_elements):
+ explicit runtime_sized_ringbuffer(size_type max_elements):
max_elements_(max_elements + 1)
{
- // TODO: we don't necessarily need to construct all elements
array_ = Alloc::allocate(max_elements_);
- for (size_t i = 0; i != max_elements_; ++i)
- Alloc::construct(array_ + i, T());
}
template <typename U>
- runtime_sized_ringbuffer(typename Alloc::template rebind<U>::other const & alloc, size_t max_elements):
+ runtime_sized_ringbuffer(typename Alloc::template rebind<U>::other const & alloc, size_type max_elements):
Alloc(alloc), max_elements_(max_elements + 1)
{
- // TODO: we don't necessarily need to construct all elements
array_ = Alloc::allocate(max_elements_);
- for (size_t i = 0; i != max_elements_; ++i)
- Alloc::construct(array_ + i, T());
}
- runtime_sized_ringbuffer(Alloc const & alloc, size_t max_elements):
+ runtime_sized_ringbuffer(Alloc const & alloc, size_type max_elements):
Alloc(alloc), max_elements_(max_elements + 1)
{
- // TODO: we don't necessarily need to construct all elements
array_ = Alloc::allocate(max_elements_);
- for (size_t i = 0; i != max_elements_; ++i)
- Alloc::construct(array_ + i, T());
}
~runtime_sized_ringbuffer(void)
{
- for (size_t i = 0; i != max_elements_; ++i)
- Alloc::destroy(array_ + i);
+ // destroy all remaining items
+ T out;
+ while (pop(&out, 1)) {}
+
Alloc::deallocate(array_, max_elements_);
}
@@ -389,18 +535,37 @@ public:
return ringbuffer_base<T>::push(t, &*array_, max_elements_);
}
- bool pop(T & ret)
+ template <typename Functor>
+ bool consume_one(Functor & f)
+ {
+ return ringbuffer_base<T>::consume_one(f, &*array_, max_elements_);
+ }
+
+ template <typename Functor>
+ bool consume_one(Functor const & f)
+ {
+ return ringbuffer_base<T>::consume_one(f, &*array_, max_elements_);
+ }
+
+ template <typename Functor>
+ size_type consume_all(Functor & f)
+ {
+ return ringbuffer_base<T>::consume_all(f, &*array_, max_elements_);
+ }
+
+ template <typename Functor>
+ size_type consume_all(Functor const & f)
{
- return ringbuffer_base<T>::pop(ret, &*array_, max_elements_);
+ return ringbuffer_base<T>::consume_all(f, &*array_, max_elements_);
}
- size_t push(T const * t, size_t size)
+ size_type push(T const * t, size_type size)
{
return ringbuffer_base<T>::push(t, size, &*array_, max_elements_);
}
- template <size_t size>
- size_t push(T const (&t)[size])
+ template <size_type size>
+ size_type push(T const (&t)[size])
{
return push(t, size);
}
@@ -411,21 +576,15 @@ public:
return ringbuffer_base<T>::push(begin, end, array_, max_elements_);
}
- size_t pop(T * ret, size_t size)
+ size_type pop(T * ret, size_type size)
{
return ringbuffer_base<T>::pop(ret, size, array_, max_elements_);
}
- template <size_t size>
- size_t pop(T (&ret)[size])
- {
- return pop(ret, size);
- }
-
template <typename OutputIterator>
- size_t pop(OutputIterator it)
+ size_type pop_to_output_iterator(OutputIterator it)
{
- return ringbuffer_base<T>::pop(it, array_, max_elements_);
+ return ringbuffer_base<T>::pop_to_output_iterator(it, array_, max_elements_);
}
};
@@ -572,9 +731,12 @@ public:
*
* \note Thread-safe and wait-free
*/
- bool pop(T & ret)
+ template <typename U>
+ typename boost::enable_if<typename is_convertible<T, U>::type, bool>::type
+ pop (U & ret)
{
- return base_type::pop(ret);
+ detail::consume_via_copy<U> consume_functor(ret);
+ return consume_one( consume_functor );
}
/** Pushes as many objects from the array t as there is space.
@@ -648,9 +810,10 @@ public:
* \note Thread-safe and wait-free
* */
template <typename OutputIterator>
- size_type pop(OutputIterator it)
+ typename boost::disable_if<typename is_convertible<T, OutputIterator>::type, size_type>::type
+ pop(OutputIterator it)
{
- return base_type::pop(it);
+ return base_type::pop_to_output_iterator(it);
}
/** consumes one element via a functor
@@ -664,24 +827,14 @@ public:
template <typename Functor>
bool consume_one(Functor & f)
{
- T element;
- bool success = pop(element);
- if (success)
- f(element);
-
- return success;
+ return base_type::consume_one(f);
}
/// \copydoc boost::lockfree::spsc_queue::consume_one(Functor & rhs)
template <typename Functor>
bool consume_one(Functor const & f)
{
- T element;
- bool success = pop(element);
- if (success)
- f(element);
-
- return success;
+ return base_type::consume_one(f);
}
/** consumes all elements via a functor
@@ -695,22 +848,36 @@ public:
template <typename Functor>
size_type consume_all(Functor & f)
{
- size_type element_count = 0;
- while (consume_one(f))
- element_count += 1;
-
- return element_count;
+ return base_type::consume_all(f);
}
/// \copydoc boost::lockfree::spsc_queue::consume_all(Functor & rhs)
template <typename Functor>
size_type consume_all(Functor const & f)
{
- size_type element_count = 0;
- while (consume_one(f))
- element_count += 1;
+ return base_type::consume_all(f);
+ }
+
+ /** get number of elements that are available for read
+ *
+ * \return number of available elements that can be popped from the spsc_queue
+ *
+ * \note Thread-safe and wait-free, should only be called from the producer thread
+ * */
+ size_type read_available() const
+ {
+ return base_type::read_available(base_type::max_number_of_elements());
+ }
- return element_count;
+ /** get write space to write elements
+ *
+ * \return number of elements that can be pushed to the spsc_queue
+ *
+ * \note Thread-safe and wait-free, should only be called from the consumer thread
+ * */
+ size_type write_available() const
+ {
+ return base_type::write_available(base_type::max_number_of_elements());
}
};
diff --git a/3party/boost/boost/lockfree/stack.hpp b/3party/boost/boost/lockfree/stack.hpp
index efa9524716..6db986c87b 100644
--- a/3party/boost/boost/lockfree/stack.hpp
+++ b/3party/boost/boost/lockfree/stack.hpp
@@ -10,9 +10,6 @@
#include <boost/assert.hpp>
#include <boost/checked_delete.hpp>
#include <boost/integer_traits.hpp>
-#ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
-#include <boost/noncopyable.hpp>
-#endif
#include <boost/static_assert.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/type_traits/has_trivial_assign.hpp>
@@ -24,6 +21,10 @@
#include <boost/lockfree/detail/parameter.hpp>
#include <boost/lockfree/detail/tagged_ptr.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
namespace boost {
namespace lockfree {
namespace detail {
@@ -66,9 +67,6 @@ template <typename T,
template <typename T, ...Options>
#endif
class stack
-#ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
- : boost::noncopyable
-#endif
{
private:
#ifndef BOOST_DOXYGEN_INVOKED
@@ -112,11 +110,8 @@ private:
#endif
-#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS
- stack(stack const &) = delete;
- stack(stack &&) = delete;
- const stack& operator=( const stack& ) = delete;
-#endif
+ BOOST_DELETED_FUNCTION(stack(stack const&))
+ BOOST_DELETED_FUNCTION(stack& operator= (stack const&))
public:
typedef T value_type;
@@ -435,21 +430,9 @@ public:
bool pop(U & ret)
{
BOOST_STATIC_ASSERT((boost::is_convertible<T, U>::value));
- tagged_node_handle old_tos = tos.load(detail::memory_order_consume);
-
- for (;;) {
- node * old_tos_pointer = pool.get_pointer(old_tos);
- if (!old_tos_pointer)
- return false;
+ detail::consume_via_copy<U> consumer(ret);
- tagged_node_handle new_tos(old_tos_pointer->next, old_tos.get_next_tag());
-
- if (tos.compare_exchange_weak(old_tos, new_tos)) {
- detail::copy_payload(old_tos_pointer->v, ret);
- pool.template destruct<true>(old_tos);
- return true;
- }
- }
+ return consume_one(consumer);
}
@@ -505,24 +488,42 @@ public:
template <typename Functor>
bool consume_one(Functor & f)
{
- T element;
- bool success = pop(element);
- if (success)
- f(element);
+ tagged_node_handle old_tos = tos.load(detail::memory_order_consume);
+
+ for (;;) {
+ node * old_tos_pointer = pool.get_pointer(old_tos);
+ if (!old_tos_pointer)
+ return false;
+
+ tagged_node_handle new_tos(old_tos_pointer->next, old_tos.get_next_tag());
- return success;
+ if (tos.compare_exchange_weak(old_tos, new_tos)) {
+ f(old_tos_pointer->v);
+ pool.template destruct<true>(old_tos);
+ return true;
+ }
+ }
}
/// \copydoc boost::lockfree::stack::consume_one(Functor & rhs)
template <typename Functor>
bool consume_one(Functor const & f)
{
- T element;
- bool success = pop(element);
- if (success)
- f(element);
+ tagged_node_handle old_tos = tos.load(detail::memory_order_consume);
+
+ for (;;) {
+ node * old_tos_pointer = pool.get_pointer(old_tos);
+ if (!old_tos_pointer)
+ return false;
+
+ tagged_node_handle new_tos(old_tos_pointer->next, old_tos.get_next_tag());
- return success;
+ if (tos.compare_exchange_weak(old_tos, new_tos)) {
+ f(old_tos_pointer->v);
+ pool.template destruct<true>(old_tos);
+ return true;
+ }
+ }
}
/** consumes all elements via a functor
diff --git a/3party/boost/boost/log/attributes.hpp b/3party/boost/boost/log/attributes.hpp
index 1e3c028441..92b9c259cc 100644
--- a/3party/boost/boost/log/attributes.hpp
+++ b/3party/boost/boost/log/attributes.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/current_thread_id.hpp>
#endif
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/attributes/attribute.hpp b/3party/boost/boost/log/attributes/attribute.hpp
index 44ac98ea1a..0d6ba64a17 100644
--- a/3party/boost/boost/log/attributes/attribute.hpp
+++ b/3party/boost/boost/log/attributes/attribute.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -16,14 +16,14 @@
#define BOOST_LOG_ATTRIBUTES_ATTRIBUTE_HPP_INCLUDED_
#include <new>
-#include <boost/intrusive_ptr.hpp>
#include <boost/move/core.hpp>
+#include <boost/smart_ptr/intrusive_ptr.hpp>
+#include <boost/smart_ptr/intrusive_ref_counter.hpp>
#include <boost/log/detail/config.hpp>
-#include <boost/log/utility/intrusive_ref_counter.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -66,10 +66,15 @@ public:
*
* All attributes must derive their implementation from this class.
*/
- struct BOOST_LOG_NO_VTABLE BOOST_LOG_VISIBLE impl :
- public intrusive_ref_counter
+ struct BOOST_LOG_NO_VTABLE BOOST_SYMBOL_VISIBLE impl :
+ public boost::intrusive_ref_counter< impl >
{
/*!
+ * \brief Virtual destructor
+ */
+ virtual ~impl() {}
+
+ /*!
* \return The actual attribute value. It shall not return empty values (exceptions
* shall be used to indicate errors).
*/
@@ -88,7 +93,7 @@ public:
* Default constructor. Creates an empty attribute value factory, which is not usable until
* \c set_impl is called.
*/
- BOOST_LOG_DEFAULTED_FUNCTION(attribute(), {})
+ BOOST_DEFAULTED_FUNCTION(attribute(), {})
/*!
* Copy constructor
@@ -132,7 +137,7 @@ public:
/*!
* Verifies that the factory is not in empty state
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* Verifies that the factory is in empty state
diff --git a/3party/boost/boost/log/attributes/attribute_cast.hpp b/3party/boost/boost/log/attributes/attribute_cast.hpp
index 26e0cfd18f..7ae1c92cf4 100644
--- a/3party/boost/boost/log/attributes/attribute_cast.hpp
+++ b/3party/boost/boost/log/attributes/attribute_cast.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/attribute.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/attributes/attribute_name.hpp b/3party/boost/boost/log/attributes/attribute_name.hpp
index ee4b9a5b3c..4e283e6a28 100644
--- a/3party/boost/boost/log/attributes/attribute_name.hpp
+++ b/3party/boost/boost/log/attributes/attribute_name.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,10 +20,10 @@
#include <boost/assert.hpp>
#include <boost/cstdint.hpp>
#include <boost/log/detail/config.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -140,7 +140,7 @@ public:
*
* \return \c true if <tt>*this</tt> was constructed with an attribute name, \c false otherwise
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* Checks if the object was default-constructed
*
diff --git a/3party/boost/boost/log/attributes/attribute_set.hpp b/3party/boost/boost/log/attributes/attribute_set.hpp
index 819269ae32..5481c095f4 100644
--- a/3party/boost/boost/log/attributes/attribute_set.hpp
+++ b/3party/boost/boost/log/attributes/attribute_set.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/attribute.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -120,8 +120,8 @@ private:
node_base();
- BOOST_LOG_DELETED_FUNCTION(node_base(node_base const&))
- BOOST_LOG_DELETED_FUNCTION(node_base& operator= (node_base const&))
+ BOOST_DELETED_FUNCTION(node_base(node_base const&))
+ BOOST_DELETED_FUNCTION(node_base& operator= (node_base const&))
};
//! Container elements
@@ -285,7 +285,7 @@ public:
*/
void swap(attribute_set& that) BOOST_NOEXCEPT
{
- register implementation* const p = m_pImpl;
+ implementation* const p = m_pImpl;
m_pImpl = that.m_pImpl;
that.m_pImpl = p;
}
diff --git a/3party/boost/boost/log/attributes/attribute_value.hpp b/3party/boost/boost/log/attributes/attribute_value.hpp
index 031028cfbf..972093d9b7 100644
--- a/3party/boost/boost/log/attributes/attribute_value.hpp
+++ b/3party/boost/boost/log/attributes/attribute_value.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,11 +15,10 @@
#ifndef BOOST_LOG_ATTRIBUTE_VALUE_HPP_INCLUDED_
#define BOOST_LOG_ATTRIBUTE_VALUE_HPP_INCLUDED_
-#include <boost/intrusive_ptr.hpp>
#include <boost/move/core.hpp>
+#include <boost/smart_ptr/intrusive_ptr.hpp>
#include <boost/log/detail/config.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
-#include <boost/log/utility/intrusive_ref_counter.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/utility/type_info_wrapper.hpp>
#include <boost/log/utility/type_dispatch/type_dispatcher.hpp>
#include <boost/log/attributes/attribute.hpp>
@@ -27,7 +26,7 @@
#include <boost/log/attributes/value_visitation_fwd.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -115,7 +114,7 @@ public:
/*!
* Default constructor. Creates an empty (absent) attribute value.
*/
- BOOST_LOG_DEFAULTED_FUNCTION(attribute_value(), {})
+ BOOST_DEFAULTED_FUNCTION(attribute_value(), {})
/*!
* Copy constructor
@@ -155,7 +154,7 @@ public:
/*!
* The operator checks if the attribute value is empty
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* The operator checks if the attribute value is empty
*/
diff --git a/3party/boost/boost/log/attributes/attribute_value_impl.hpp b/3party/boost/boost/log/attributes/attribute_value_impl.hpp
index 6ea41611e1..405c346861 100644
--- a/3party/boost/boost/log/attributes/attribute_value_impl.hpp
+++ b/3party/boost/boost/log/attributes/attribute_value_impl.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#endif
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/attributes/attribute_value_set.hpp b/3party/boost/boost/log/attributes/attribute_value_set.hpp
index 87dccc3851..0ca635909c 100644
--- a/3party/boost/boost/log/attributes/attribute_value_set.hpp
+++ b/3party/boost/boost/log/attributes/attribute_value_set.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +29,7 @@
#include <boost/log/expressions/keyword_fwd.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -95,6 +95,7 @@ public:
private:
struct implementation;
+ friend struct implementation;
//! A base class for the container nodes
struct node_base
@@ -104,8 +105,8 @@ private:
node_base();
- BOOST_LOG_DELETED_FUNCTION(node_base(node_base const&))
- BOOST_LOG_DELETED_FUNCTION(node_base& operator= (node_base const&))
+ BOOST_DELETED_FUNCTION(node_base(node_base const&))
+ BOOST_DELETED_FUNCTION(node_base& operator= (node_base const&))
};
//! Container elements
@@ -310,7 +311,7 @@ public:
*/
void swap(attribute_value_set& that) BOOST_NOEXCEPT
{
- register implementation* const p = m_pImpl;
+ implementation* const p = m_pImpl;
m_pImpl = that.m_pImpl;
that.m_pImpl = p;
}
diff --git a/3party/boost/boost/log/attributes/clock.hpp b/3party/boost/boost/log/attributes/clock.hpp
index 9e39b24e81..c28da5a877 100644
--- a/3party/boost/boost/log/attributes/clock.hpp
+++ b/3party/boost/boost/log/attributes/clock.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/time_traits.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -54,7 +54,7 @@ public:
protected:
//! Attribute factory implementation
- struct BOOST_LOG_VISIBLE impl :
+ struct BOOST_SYMBOL_VISIBLE impl :
public attribute::impl
{
attribute_value get_value()
diff --git a/3party/boost/boost/log/attributes/constant.hpp b/3party/boost/boost/log/attributes/constant.hpp
index 6156f09156..f2ae0a7847 100644
--- a/3party/boost/boost/log/attributes/constant.hpp
+++ b/3party/boost/boost/log/attributes/constant.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/attribute_value_impl.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -52,7 +52,7 @@ public:
protected:
//! Factory implementation
- class BOOST_LOG_VISIBLE impl :
+ class BOOST_SYMBOL_VISIBLE impl :
public attribute_value_impl< value_type >
{
//! Base type
diff --git a/3party/boost/boost/log/attributes/counter.hpp b/3party/boost/boost/log/attributes/counter.hpp
index ea22c1d65f..a4722714c9 100644
--- a/3party/boost/boost/log/attributes/counter.hpp
+++ b/3party/boost/boost/log/attributes/counter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#endif // BOOST_LOG_NO_THREADS
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -57,7 +57,7 @@ public:
protected:
//! Base class for factory implementation
- class BOOST_LOG_NO_VTABLE BOOST_LOG_VISIBLE impl :
+ class BOOST_LOG_NO_VTABLE BOOST_SYMBOL_VISIBLE impl :
public attribute::impl
{
};
@@ -128,8 +128,8 @@ public:
attribute_value get_value()
{
- register unsigned long next_counter = static_cast< unsigned long >(++m_Counter);
- register value_type next = static_cast< value_type >(m_Initial + (next_counter * m_Step));
+ const unsigned long next_counter = static_cast< unsigned long >(++m_Counter);
+ value_type next = static_cast< value_type >(m_Initial + (next_counter * m_Step));
return make_attribute_value(next);
}
};
diff --git a/3party/boost/boost/log/attributes/current_process_id.hpp b/3party/boost/boost/log/attributes/current_process_id.hpp
index dba6b9473f..d528b7d8f4 100644
--- a/3party/boost/boost/log/attributes/current_process_id.hpp
+++ b/3party/boost/boost/log/attributes/current_process_id.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +21,7 @@
#include <boost/log/attributes/attribute_cast.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/attributes/current_process_name.hpp b/3party/boost/boost/log/attributes/current_process_name.hpp
index 4611095ab4..92e78592ba 100644
--- a/3party/boost/boost/log/attributes/current_process_name.hpp
+++ b/3party/boost/boost/log/attributes/current_process_name.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +21,7 @@
#include <boost/log/attributes/attribute_cast.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/attributes/current_thread_id.hpp b/3party/boost/boost/log/attributes/current_thread_id.hpp
index 231cb1ad07..6b8488f5f5 100644
--- a/3party/boost/boost/log/attributes/current_thread_id.hpp
+++ b/3party/boost/boost/log/attributes/current_thread_id.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,7 +17,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -25,7 +25,7 @@
#error Boost.Log: The current_thread_id attribute is only available in multithreaded builds
#endif
-#include <boost/intrusive_ptr.hpp>
+#include <boost/smart_ptr/intrusive_ptr.hpp>
#include <boost/log/detail/thread_id.hpp>
#include <boost/log/attributes/attribute.hpp>
#include <boost/log/attributes/attribute_cast.hpp>
@@ -56,7 +56,7 @@ public:
protected:
//! Factory implementation
- class BOOST_LOG_VISIBLE impl :
+ class BOOST_SYMBOL_VISIBLE impl :
public attribute_value::impl
{
public:
diff --git a/3party/boost/boost/log/attributes/fallback_policy.hpp b/3party/boost/boost/log/attributes/fallback_policy.hpp
index 00f52a2ee0..8a3c648001 100644
--- a/3party/boost/boost/log/attributes/fallback_policy.hpp
+++ b/3party/boost/boost/log/attributes/fallback_policy.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/fallback_policy_fwd.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/attributes/fallback_policy_fwd.hpp b/3party/boost/boost/log/attributes/fallback_policy_fwd.hpp
index 76f8620446..b6b01e3f4f 100644
--- a/3party/boost/boost/log/attributes/fallback_policy_fwd.hpp
+++ b/3party/boost/boost/log/attributes/fallback_policy_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,7 +17,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/attributes/function.hpp b/3party/boost/boost/log/attributes/function.hpp
index 648c450753..4333e321ce 100644
--- a/3party/boost/boost/log/attributes/function.hpp
+++ b/3party/boost/boost/log/attributes/function.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/attribute_value_impl.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -57,7 +57,7 @@ public:
protected:
//! Base class for factory implementation
- class BOOST_LOG_NO_VTABLE BOOST_LOG_VISIBLE impl :
+ class BOOST_LOG_NO_VTABLE BOOST_SYMBOL_VISIBLE impl :
public attribute::impl
{
};
diff --git a/3party/boost/boost/log/attributes/mutable_constant.hpp b/3party/boost/boost/log/attributes/mutable_constant.hpp
index 8dbb8cb4f6..a668256f6a 100644
--- a/3party/boost/boost/log/attributes/mutable_constant.hpp
+++ b/3party/boost/boost/log/attributes/mutable_constant.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,9 +15,8 @@
#ifndef BOOST_LOG_ATTRIBUTES_MUTABLE_CONSTANT_HPP_INCLUDED_
#define BOOST_LOG_ATTRIBUTES_MUTABLE_CONSTANT_HPP_INCLUDED_
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
#include <boost/static_assert.hpp>
+#include <boost/smart_ptr/intrusive_ptr.hpp>
#include <boost/mpl/if.hpp>
#include <boost/move/core.hpp>
#include <boost/move/utility.hpp>
@@ -29,7 +28,7 @@
#include <boost/log/attributes/attribute_value_impl.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -90,7 +89,7 @@ public:
protected:
//! Factory implementation
- class BOOST_LOG_VISIBLE impl :
+ class BOOST_SYMBOL_VISIBLE impl :
public attribute::impl
{
private:
@@ -223,7 +222,7 @@ public:
protected:
//! Factory implementation
- class BOOST_LOG_VISIBLE impl :
+ class BOOST_SYMBOL_VISIBLE impl :
public attribute::impl
{
private:
diff --git a/3party/boost/boost/log/attributes/named_scope.hpp b/3party/boost/boost/log/attributes/named_scope.hpp
index aa0bbd2a0e..7b75c3d73c 100644
--- a/3party/boost/boost/log/attributes/named_scope.hpp
+++ b/3party/boost/boost/log/attributes/named_scope.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -30,7 +30,7 @@
#include <boost/log/attributes/attribute_cast.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -66,6 +66,17 @@ struct named_scope_entry
//! \endcond
{
/*!
+ * \brief Scope entry type
+ *
+ * Describes scope name specifics
+ */
+ enum scope_name_type
+ {
+ general, //!< The scope name contains some unstructured string that should not be interpreted by the library
+ function //!< The scope name contains a function signature
+ };
+
+ /*!
* The scope name (e.g. a function signature)
*/
string_literal scope_name;
@@ -77,6 +88,10 @@ struct named_scope_entry
* The line number in the source file
*/
unsigned int line;
+ /*!
+ * The scope name type
+ */
+ scope_name_type type;
/*!
* Initializing constructor
@@ -85,10 +100,11 @@ struct named_scope_entry
*
* \b Throws: Nothing.
*/
- named_scope_entry(string_literal const& sn, string_literal const& fn, unsigned int ln) BOOST_NOEXCEPT :
+ named_scope_entry(string_literal const& sn, string_literal const& fn, unsigned int ln, scope_name_type t = general) BOOST_NOEXCEPT :
scope_name(sn),
file_name(fn),
- line(ln)
+ line(ln),
+ type(t)
{
}
};
@@ -354,8 +370,8 @@ public:
* \param fn File name, in which the scope is located.
* \param ln Line number in the file.
*/
- sentry(string_literal const& sn, string_literal const& fn, unsigned int ln) BOOST_NOEXCEPT :
- m_Entry(sn, fn, ln)
+ sentry(string_literal const& sn, string_literal const& fn, unsigned int ln, scope_entry::scope_name_type t = scope_entry::general) BOOST_NOEXCEPT :
+ m_Entry(sn, fn, ln, t)
{
named_scope::push_scope(m_Entry);
}
@@ -368,8 +384,8 @@ public:
named_scope::pop_scope();
}
- BOOST_LOG_DELETED_FUNCTION(sentry(sentry const&))
- BOOST_LOG_DELETED_FUNCTION(sentry& operator= (sentry const&))
+ BOOST_DELETED_FUNCTION(sentry(sentry const&))
+ BOOST_DELETED_FUNCTION(sentry& operator= (sentry const&))
private:
scope_entry m_Entry;
@@ -377,7 +393,7 @@ public:
private:
//! Attribute implementation class
- struct BOOST_LOG_VISIBLE impl;
+ struct BOOST_SYMBOL_VISIBLE impl;
public:
/*!
@@ -421,8 +437,8 @@ BOOST_LOG_CLOSE_NAMESPACE // namespace log
#ifndef BOOST_LOG_DOXYGEN_PASS
-#define BOOST_LOG_NAMED_SCOPE_INTERNAL(var, name, file, line)\
- BOOST_LOG_UNUSED_VARIABLE(::boost::log::attributes::named_scope::sentry, var, (name, file, line));
+#define BOOST_LOG_NAMED_SCOPE_INTERNAL(var, name, file, line, type)\
+ BOOST_LOG_UNUSED_VARIABLE(::boost::log::attributes::named_scope::sentry, var, (name, file, line, type));
#endif // BOOST_LOG_DOXYGEN_PASS
@@ -430,15 +446,28 @@ BOOST_LOG_CLOSE_NAMESPACE // namespace log
* Macro for scope markup. The specified scope name is pushed to the end of the current thread scope list.
*/
#define BOOST_LOG_NAMED_SCOPE(name)\
- BOOST_LOG_NAMED_SCOPE_INTERNAL(BOOST_LOG_UNIQUE_IDENTIFIER_NAME(_boost_log_named_scope_sentry_), name, __FILE__, __LINE__)
+ BOOST_LOG_NAMED_SCOPE_INTERNAL(BOOST_LOG_UNIQUE_IDENTIFIER_NAME(_boost_log_named_scope_sentry_), name, __FILE__, __LINE__, ::boost::log::attributes::named_scope_entry::general)
/*!
- * Macro for function scope markup. The scope name is constructed with help of compiler and contains current function name.
+ * Macro for function scope markup. The scope name is constructed with help of compiler and contains the current function signature.
* The scope name is pushed to the end of the current thread scope list.
*
* Not all compilers have support for this macro. The exact form of the scope name may vary from one compiler to another.
*/
-#define BOOST_LOG_FUNCTION() BOOST_LOG_NAMED_SCOPE(BOOST_CURRENT_FUNCTION)
+#define BOOST_LOG_FUNCTION()\
+ BOOST_LOG_NAMED_SCOPE_INTERNAL(BOOST_LOG_UNIQUE_IDENTIFIER_NAME(_boost_log_named_scope_sentry_), BOOST_CURRENT_FUNCTION, __FILE__, __LINE__, ::boost::log::attributes::named_scope_entry::function)
+
+/*!
+ * Macro for function scope markup. The scope name is constructed with help of compiler and contains the current function name. It may be shorter than what \c BOOST_LOG_FUNCTION macro produces.
+ * The scope name is pushed to the end of the current thread scope list.
+ *
+ * Not all compilers have support for this macro. The exact form of the scope name may vary from one compiler to another.
+ */
+#if defined(_MSC_VER) || defined(__GNUC__)
+#define BOOST_LOG_FUNC() BOOST_LOG_NAMED_SCOPE(__FUNCTION__)
+#else
+#define BOOST_LOG_FUNC() BOOST_LOG_FUNCTION()
+#endif
#include <boost/log/detail/footer.hpp>
diff --git a/3party/boost/boost/log/attributes/scoped_attribute.hpp b/3party/boost/boost/log/attributes/scoped_attribute.hpp
index 55f72660bb..33b1c395fe 100644
--- a/3party/boost/boost/log/attributes/scoped_attribute.hpp
+++ b/3party/boost/boost/log/attributes/scoped_attribute.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -30,7 +30,7 @@
#include <boost/log/utility/unique_identifier_name.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -99,7 +99,7 @@ public:
}
#ifndef BOOST_LOG_BROKEN_REFERENCE_FROM_RVALUE_INIT
- BOOST_LOG_DELETED_FUNCTION(scoped_logger_attribute(scoped_logger_attribute const&))
+ BOOST_DELETED_FUNCTION(scoped_logger_attribute(scoped_logger_attribute const&))
#else // BOOST_LOG_BROKEN_REFERENCE_FROM_RVALUE_INIT
scoped_logger_attribute(scoped_logger_attribute const& that) : m_pLogger(that.m_pLogger), m_itAttribute(that.m_itAttribute)
{
@@ -107,7 +107,7 @@ public:
}
#endif // BOOST_LOG_BROKEN_REFERENCE_FROM_RVALUE_INIT
- BOOST_LOG_DELETED_FUNCTION(scoped_logger_attribute& operator= (scoped_logger_attribute const&))
+ BOOST_DELETED_FUNCTION(scoped_logger_attribute& operator= (scoped_logger_attribute const&))
};
} // namespace aux
@@ -122,7 +122,7 @@ public:
* \return An unspecified guard object which may be used to initialize a \c scoped_attribute variable.
*/
template< typename LoggerT >
-BOOST_LOG_FORCEINLINE aux::scoped_logger_attribute< LoggerT > add_scoped_logger_attribute(LoggerT& l, attribute_name const& name, attribute const& attr)
+BOOST_FORCEINLINE aux::scoped_logger_attribute< LoggerT > add_scoped_logger_attribute(LoggerT& l, attribute_name const& name, attribute const& attr)
{
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
return aux::scoped_logger_attribute< LoggerT >(l, name, attr);
@@ -194,7 +194,7 @@ public:
}
#ifndef BOOST_LOG_BROKEN_REFERENCE_FROM_RVALUE_INIT
- BOOST_LOG_DELETED_FUNCTION(scoped_thread_attribute(scoped_thread_attribute const&))
+ BOOST_DELETED_FUNCTION(scoped_thread_attribute(scoped_thread_attribute const&))
#else // BOOST_LOG_BROKEN_REFERENCE_FROM_RVALUE_INIT
scoped_thread_attribute(scoped_thread_attribute const& that) : m_itAttribute(that.m_itAttribute)
{
@@ -202,7 +202,7 @@ public:
}
#endif // BOOST_LOG_BROKEN_REFERENCE_FROM_RVALUE_INIT
- BOOST_LOG_DELETED_FUNCTION(scoped_thread_attribute& operator= (scoped_thread_attribute const&))
+ BOOST_DELETED_FUNCTION(scoped_thread_attribute& operator= (scoped_thread_attribute const&))
};
} // namespace aux
@@ -215,7 +215,7 @@ public:
* \param attr The attribute. Must not be NULL.
* \return An unspecified guard object which may be used to initialize a \c scoped_attribute variable.
*/
-BOOST_LOG_FORCEINLINE aux::scoped_thread_attribute add_scoped_thread_attribute(attribute_name const& name, attribute const& attr)
+BOOST_FORCEINLINE aux::scoped_thread_attribute add_scoped_thread_attribute(attribute_name const& name, attribute const& attr)
{
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
return aux::scoped_thread_attribute(name, attr);
diff --git a/3party/boost/boost/log/attributes/time_traits.hpp b/3party/boost/boost/log/attributes/time_traits.hpp
index 2e8dfc0f6d..9a967f8cb8 100644
--- a/3party/boost/boost/log/attributes/time_traits.hpp
+++ b/3party/boost/boost/log/attributes/time_traits.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/attributes/timer.hpp b/3party/boost/boost/log/attributes/timer.hpp
index 0da5b9d79e..ae7d65ebfd 100644
--- a/3party/boost/boost/log/attributes/timer.hpp
+++ b/3party/boost/boost/log/attributes/timer.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +21,7 @@
#include <boost/log/attributes/time_traits.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -59,7 +59,7 @@ public:
private:
//! Factory implementation
- class BOOST_LOG_VISIBLE impl;
+ class BOOST_SYMBOL_VISIBLE impl;
public:
/*!
diff --git a/3party/boost/boost/log/attributes/value_extraction.hpp b/3party/boost/boost/log/attributes/value_extraction.hpp
index 9f89f9b1e7..84ee3ddf8d 100644
--- a/3party/boost/boost/log/attributes/value_extraction.hpp
+++ b/3party/boost/boost/log/attributes/value_extraction.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/utility/type_dispatch/static_type_dispatcher.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -137,14 +137,14 @@ private:
//! The function unwraps \c value_ref, if possible
template< typename T, typename TagT >
-BOOST_LOG_FORCEINLINE typename enable_if< mpl::is_sequence< T >, value_ref< T, TagT > >::type
+BOOST_FORCEINLINE typename enable_if< mpl::is_sequence< T >, value_ref< T, TagT > >::type
unwrap_value_ref(value_ref< T, TagT > const& r)
{
return r;
}
template< typename T, typename TagT >
-BOOST_LOG_FORCEINLINE typename disable_if< mpl::is_sequence< T >, T const& >::type
+BOOST_FORCEINLINE typename disable_if< mpl::is_sequence< T >, T const& >::type
unwrap_value_ref(value_ref< T, TagT > const& r)
{
return r.get();
@@ -175,7 +175,7 @@ public:
/*!
* Default constructor
*/
- BOOST_LOG_DEFAULTED_FUNCTION(value_extractor(), {})
+ BOOST_DEFAULTED_FUNCTION(value_extractor(), {})
/*!
* Copy constructor
diff --git a/3party/boost/boost/log/attributes/value_extraction_fwd.hpp b/3party/boost/boost/log/attributes/value_extraction_fwd.hpp
index 8ff618063d..2cc5583019 100644
--- a/3party/boost/boost/log/attributes/value_extraction_fwd.hpp
+++ b/3party/boost/boost/log/attributes/value_extraction_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/attributes/fallback_policy_fwd.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/attributes/value_visitation.hpp b/3party/boost/boost/log/attributes/value_visitation.hpp
index 7e5000fd64..6a8205fcf3 100644
--- a/3party/boost/boost/log/attributes/value_visitation.hpp
+++ b/3party/boost/boost/log/attributes/value_visitation.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,11 +26,11 @@
#include <boost/log/attributes/value_visitation_fwd.hpp>
#include <boost/log/attributes/fallback_policy.hpp>
#include <boost/log/expressions/keyword_fwd.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/utility/type_dispatch/static_type_dispatcher.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -71,7 +71,7 @@ public:
*
* \return \c true if the value was visited successfully, \c false otherwise.
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* Checks if the visitation was unsuccessful.
*
@@ -115,7 +115,7 @@ public:
/*!
* Default constructor
*/
- BOOST_LOG_DEFAULTED_FUNCTION(value_visitor_invoker(), {})
+ BOOST_DEFAULTED_FUNCTION(value_visitor_invoker(), {})
/*!
* Copy constructor
diff --git a/3party/boost/boost/log/attributes/value_visitation_fwd.hpp b/3party/boost/boost/log/attributes/value_visitation_fwd.hpp
index 6313b88013..5917c22a95 100644
--- a/3party/boost/boost/log/attributes/value_visitation_fwd.hpp
+++ b/3party/boost/boost/log/attributes/value_visitation_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/attributes/fallback_policy_fwd.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/common.hpp b/3party/boost/boost/log/common.hpp
index 8c4f728a0c..bc62893d8b 100644
--- a/3party/boost/boost/log/common.hpp
+++ b/3party/boost/boost/log/common.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -34,7 +34,7 @@
#include <boost/log/attributes/named_scope.hpp>
#include <boost/log/attributes/scoped_attribute.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/core.hpp b/3party/boost/boost/log/core.hpp
index 3473c2cab9..159e5b9177 100644
--- a/3party/boost/boost/log/core.hpp
+++ b/3party/boost/boost/log/core.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +21,7 @@
#include <boost/log/core/record.hpp>
#include <boost/log/core/record_view.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/core/core.hpp b/3party/boost/boost/log/core/core.hpp
index ee927d56e1..e3475299c4 100644
--- a/3party/boost/boost/log/core/core.hpp
+++ b/3party/boost/boost/log/core/core.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -16,7 +16,7 @@
#define BOOST_LOG_CORE_CORE_HPP_INCLUDED_
#include <utility>
-#include <boost/shared_ptr.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
#include <boost/move/core.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/light_function.hpp>
@@ -28,7 +28,7 @@
#include <boost/log/expressions/filter.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -288,7 +288,7 @@ public:
* \b Throws: If an exception handler is installed, only throws if the handler throws. Otherwise may
* throw if one of the sinks throws, or some system resource limitation is reached.
*/
- BOOST_LOG_FORCEINLINE record open_record(BOOST_RV_REF(attribute_value_set) source_attributes)
+ BOOST_FORCEINLINE record open_record(BOOST_RV_REF(attribute_value_set) source_attributes)
{
return open_record_move(static_cast< attribute_value_set& >(source_attributes));
}
@@ -303,13 +303,13 @@ public:
* \b Throws: If an exception handler is installed, only throws if the handler throws. Otherwise may
* throw if one of the sinks throws.
*/
- BOOST_LOG_FORCEINLINE void push_record(BOOST_RV_REF(record) rec)
+ BOOST_FORCEINLINE void push_record(BOOST_RV_REF(record) rec)
{
push_record_move(static_cast< record& >(rec));
}
- BOOST_LOG_DELETED_FUNCTION(core(core const&))
- BOOST_LOG_DELETED_FUNCTION(core& operator= (core const&))
+ BOOST_DELETED_FUNCTION(core(core const&))
+ BOOST_DELETED_FUNCTION(core& operator= (core const&))
#ifndef BOOST_LOG_DOXYGEN_PASS
private:
diff --git a/3party/boost/boost/log/core/record.hpp b/3party/boost/boost/log/core/record.hpp
index 17ab8a9d56..758e44aadb 100644
--- a/3party/boost/boost/log/core/record.hpp
+++ b/3party/boost/boost/log/core/record.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,13 +17,13 @@
#include <boost/move/core.hpp>
#include <boost/log/detail/config.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/attributes/attribute_value_set.hpp>
#include <boost/log/expressions/keyword_fwd.hpp>
#include <boost/log/core/record_view.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -115,7 +115,7 @@ public:
*
* \return \c true, if the <tt>*this</tt> identifies a log record, \c false, if the <tt>*this</tt> is not valid
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* Inverted conversion to an unspecified boolean type
@@ -158,6 +158,17 @@ public:
/*!
* Attribute value lookup.
*
+ * \param name Attribute name.
+ * \return An \c attribute_value, non-empty if it is found, empty otherwise.
+ */
+ attribute_value_set::mapped_type operator[] (attribute_value_set::key_type name) const
+ {
+ return m_impl->m_attribute_values[name];
+ }
+
+ /*!
+ * Attribute value lookup.
+ *
* \param keyword Attribute keyword.
* \return A \c value_ref with extracted attribute value if it is found, empty \c value_ref otherwise.
*/
diff --git a/3party/boost/boost/log/core/record_view.hpp b/3party/boost/boost/log/core/record_view.hpp
index 717faa43c0..58f2a1b778 100644
--- a/3party/boost/boost/log/core/record_view.hpp
+++ b/3party/boost/boost/log/core/record_view.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,10 +15,10 @@
#ifndef BOOST_LOG_CORE_RECORD_VIEW_HPP_INCLUDED_
#define BOOST_LOG_CORE_RECORD_VIEW_HPP_INCLUDED_
-#include <boost/intrusive_ptr.hpp>
+#include <boost/smart_ptr/intrusive_ptr.hpp>
#include <boost/move/core.hpp>
#include <boost/log/detail/config.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/attributes/attribute_value_set.hpp>
#include <boost/log/expressions/keyword_fwd.hpp>
#ifndef BOOST_LOG_NO_THREADS
@@ -26,7 +26,7 @@
#endif // BOOST_LOG_NO_THREADS
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -85,8 +85,8 @@ private:
protected:
~public_data() {}
- BOOST_LOG_DELETED_FUNCTION(public_data(public_data const&))
- BOOST_LOG_DELETED_FUNCTION(public_data& operator= (public_data const&))
+ BOOST_DELETED_FUNCTION(public_data(public_data const&))
+ BOOST_DELETED_FUNCTION(public_data& operator= (public_data const&))
friend void intrusive_ptr_add_ref(const public_data* p) { ++p->m_ref_counter; }
friend void intrusive_ptr_release(const public_data* p) { if (--p->m_ref_counter == 0) public_data::destroy(p); }
@@ -108,7 +108,7 @@ public:
*
* \post <tt>!*this == true</tt>
*/
- BOOST_LOG_DEFAULTED_FUNCTION(record_view(), {})
+ BOOST_DEFAULTED_FUNCTION(record_view(), {})
/*!
* Copy constructor
@@ -184,7 +184,7 @@ public:
*
* \return \c true, if the <tt>*this</tt> identifies a log record, \c false, if the <tt>*this</tt> is not valid
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* Inverted conversion to an unspecified boolean type
@@ -221,6 +221,17 @@ public:
/*!
* Attribute value lookup.
*
+ * \param name Attribute name.
+ * \return An \c attribute_value, non-empty if it is found, empty otherwise.
+ */
+ attribute_value_set::mapped_type operator[] (attribute_value_set::key_type name) const
+ {
+ return m_impl->m_attribute_values[name];
+ }
+
+ /*!
+ * Attribute value lookup.
+ *
* \param keyword Attribute keyword.
* \return A \c value_ref with extracted attribute value if it is found, empty \c value_ref otherwise.
*/
diff --git a/3party/boost/boost/log/detail/alignas.hpp b/3party/boost/boost/log/detail/alignas.hpp
deleted file mode 100644
index f150c1e697..0000000000
--- a/3party/boost/boost/log/detail/alignas.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright Andrey Semashev 2007 - 2013.
- * Distributed under the Boost Software License, Version 1.0.
- * (See accompanying file LICENSE_1_0.txt or copy at
- * http://www.boost.org/LICENSE_1_0.txt)
- */
-/*!
- * \file alignas.hpp
- * \author Andrey Semashev
- * \date 06.07.2012
- *
- * \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
- */
-
-#ifndef BOOST_LOG_DETAIL_ALIGNAS_HPP_INCLUDED_
-#define BOOST_LOG_DETAIL_ALIGNAS_HPP_INCLUDED_
-
-#include <boost/log/detail/config.hpp>
-
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-// The macro allows to specify type or variable alignment
-#if defined(_MSC_VER)
-#define BOOST_LOG_ALIGNAS(x) __declspec(align(x))
-#elif defined(BOOST_CLANG)
-#if __has_feature(cxx_alignas) || __has_extension(cxx_alignas)
-#define BOOST_LOG_ALIGNAS(x) alignas(x)
-#endif
-#elif defined(__GNUC__)
-#if defined(__GXX_EXPERIMENTAL_CXX0X__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))
-#define BOOST_LOG_ALIGNAS(x) alignas(x)
-#else
-#define BOOST_LOG_ALIGNAS(x) __attribute__((__aligned__(x)))
-#endif
-#endif
-
-#if !defined(BOOST_LOG_ALIGNAS)
-#define BOOST_LOG_NO_ALIGNAS 1
-#define BOOST_LOG_ALIGNAS(x)
-#endif
-
-#endif // BOOST_LOG_DETAIL_ALIGNAS_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/detail/asio_fwd.hpp b/3party/boost/boost/log/detail/asio_fwd.hpp
index 4b27d99737..e284c24eed 100644
--- a/3party/boost/boost/log/detail/asio_fwd.hpp
+++ b/3party/boost/boost/log/detail/asio_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 20.04.2008
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*
* The header provides forward declarations of Boost.ASIO that are required for the user's
* code to compile with Boost.Log. The forward declarations allow to avoid including the major
@@ -22,7 +22,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/attachable_sstream_buf.hpp b/3party/boost/boost/log/detail/attachable_sstream_buf.hpp
index acc439fdb2..9b0a05316d 100644
--- a/3party/boost/boost/log/detail/attachable_sstream_buf.hpp
+++ b/3party/boost/boost/log/detail/attachable_sstream_buf.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 29.07.2007
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_ATTACHABLE_SSTREAM_BUF_HPP_INCLUDED_
@@ -24,7 +24,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -82,8 +82,8 @@ public:
//! Clears the buffer to the initial state
void clear()
{
- register char_type* pBase = this->pbase();
- register char_type* pPtr = this->pptr();
+ char_type* pBase = this->pbase();
+ char_type* pPtr = this->pptr();
if (pBase != pPtr)
this->pbump(static_cast< int >(pBase - pPtr));
}
@@ -113,8 +113,8 @@ protected:
int sync()
{
BOOST_ASSERT(m_Storage != 0);
- register char_type* pBase = this->pbase();
- register char_type* pPtr = this->pptr();
+ char_type* pBase = this->pbase();
+ char_type* pPtr = this->pptr();
if (pBase != pPtr)
{
m_Storage->append(pBase, pPtr);
@@ -141,7 +141,7 @@ protected:
BOOST_ASSERT(m_Storage != 0);
basic_ostringstreambuf::sync();
typedef typename string_type::size_type string_size_type;
- register const string_size_type max_storage_left =
+ const string_size_type max_storage_left =
m_Storage->max_size() - m_Storage->size();
if (static_cast< string_size_type >(n) < max_storage_left)
{
@@ -156,9 +156,9 @@ protected:
}
//! Copy constructor (closed)
- BOOST_LOG_DELETED_FUNCTION(basic_ostringstreambuf(basic_ostringstreambuf const& that))
+ BOOST_DELETED_FUNCTION(basic_ostringstreambuf(basic_ostringstreambuf const& that))
//! Assignment (closed)
- BOOST_LOG_DELETED_FUNCTION(basic_ostringstreambuf& operator= (basic_ostringstreambuf const& that))
+ BOOST_DELETED_FUNCTION(basic_ostringstreambuf& operator= (basic_ostringstreambuf const& that))
};
} // namespace aux
diff --git a/3party/boost/boost/log/detail/attr_output_impl.hpp b/3party/boost/boost/log/detail/attr_output_impl.hpp
index 751d07975b..8f00736c5f 100644
--- a/3party/boost/boost/log/detail/attr_output_impl.hpp
+++ b/3party/boost/boost/log/detail/attr_output_impl.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 12.08.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_ATTR_OUTPUT_IMPL_HPP_INCLUDED_
@@ -24,7 +24,7 @@
#include <boost/log/detail/attr_output_terminal.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -44,7 +44,7 @@ struct make_output_expression
//! Creates the output expression
template< typename RightT >
- static BOOST_LOG_FORCEINLINE type make(LeftT const& left, RightT const& right)
+ static BOOST_FORCEINLINE type make(LeftT const& left, RightT const& right)
{
return type(left, right.get_name(), to_log_fun< TagT >(), right.get_fallback_policy());
}
@@ -65,7 +65,7 @@ struct make_output_actor< ActorT< LeftExprT >, RightT, ValueT, false >
typedef ActorT< typename make_expression::type > type;
- static BOOST_LOG_FORCEINLINE type make(ActorT< LeftExprT > const& left, RightT const& right)
+ static BOOST_FORCEINLINE type make(ActorT< LeftExprT > const& left, RightT const& right)
{
type res = {{ make_expression::make(left, right) }};
return res;
@@ -79,7 +79,7 @@ struct make_output_actor< ActorT< LeftExprT >, RightT, ValueT, true >
typedef ActorT< expression_type > type;
- static BOOST_LOG_FORCEINLINE type make(ActorT< LeftExprT > const& left, RightT const& right)
+ static BOOST_FORCEINLINE type make(ActorT< LeftExprT > const& left, RightT const& right)
{
type res = {{ expression_type(left, right.get_name(), to_log_fun< typename RightT::tag_type >(), right.get_fallback_policy()) }};
return res;
@@ -90,7 +90,7 @@ struct make_output_actor< ActorT< LeftExprT >, RightT, ValueT, true >
#define BOOST_LOG_AUX_OVERLOAD(left_ref, right_ref)\
template< typename LeftExprT, typename T, typename FallbackPolicyT, typename TagT >\
- BOOST_LOG_FORCEINLINE typename aux::make_output_actor< phoenix::actor< LeftExprT >, attribute_actor< T, FallbackPolicyT, TagT, phoenix::actor > >::type\
+ BOOST_FORCEINLINE typename aux::make_output_actor< phoenix::actor< LeftExprT >, attribute_actor< T, FallbackPolicyT, TagT, phoenix::actor > >::type\
operator<< (phoenix::actor< LeftExprT > left_ref left, attribute_actor< T, FallbackPolicyT, TagT, phoenix::actor > right_ref right)\
{\
return aux::make_output_actor< phoenix::actor< LeftExprT >, attribute_actor< T, FallbackPolicyT, TagT, phoenix::actor > >::make(left, right);\
diff --git a/3party/boost/boost/log/detail/attr_output_terminal.hpp b/3party/boost/boost/log/detail/attr_output_terminal.hpp
index a87162ee24..574993aace 100644
--- a/3party/boost/boost/log/detail/attr_output_terminal.hpp
+++ b/3party/boost/boost/log/detail/attr_output_terminal.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/functional/bind.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -63,8 +63,8 @@ public:
template< typename >
struct result;
- template< typename ContextT >
- struct result< this_type(ContextT) >
+ template< typename ThisT, typename ContextT >
+ struct result< ThisT(ContextT) >
{
typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
typedef typename phoenix::evaluator::impl<
@@ -74,17 +74,6 @@ public:
>::result_type type;
};
- template< typename ContextT >
- struct result< const this_type(ContextT) >
- {
- typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
- typedef typename phoenix::evaluator::impl<
- typename LeftT::proto_base_expr const&,
- context_type,
- phoenix::unused
- >::result_type type;
- };
-
private:
//! Left argument actor
LeftT m_left;
@@ -139,7 +128,7 @@ public:
return strm;
}
- BOOST_LOG_DELETED_FUNCTION(attribute_output_terminal())
+ BOOST_DELETED_FUNCTION(attribute_output_terminal())
};
} // namespace aux
diff --git a/3party/boost/boost/log/detail/attribute_get_value_impl.hpp b/3party/boost/boost/log/detail/attribute_get_value_impl.hpp
index 40ca678d92..2058d65242 100644
--- a/3party/boost/boost/log/detail/attribute_get_value_impl.hpp
+++ b/3party/boost/boost/log/detail/attribute_get_value_impl.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 04.08.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_ATTRIBUTE_GET_VALUE_IMPL_HPP_INCLUDED_
@@ -21,7 +21,7 @@
#include <boost/log/attributes/attribute_value.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/attribute_predicate.hpp b/3party/boost/boost/log/detail/attribute_predicate.hpp
index 420138cc7a..a0978632a2 100644
--- a/3party/boost/boost/log/detail/attribute_predicate.hpp
+++ b/3party/boost/boost/log/detail/attribute_predicate.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/functional/save_result.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/cleanup_scope_guard.hpp b/3party/boost/boost/log/detail/cleanup_scope_guard.hpp
index 695300e091..dd2c0e170a 100644
--- a/3party/boost/boost/log/detail/cleanup_scope_guard.hpp
+++ b/3party/boost/boost/log/detail/cleanup_scope_guard.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 11.03.2008
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_CLEANUP_SCOPE_GUARD_HPP_INCLUDED_
@@ -19,7 +19,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -37,8 +37,8 @@ struct cleanup_guard
~cleanup_guard() { m_Obj.clear(); }
// Copying prohibited
- BOOST_LOG_DELETED_FUNCTION(cleanup_guard(cleanup_guard const&))
- BOOST_LOG_DELETED_FUNCTION(cleanup_guard& operator= (cleanup_guard const&))
+ BOOST_DELETED_FUNCTION(cleanup_guard(cleanup_guard const&))
+ BOOST_DELETED_FUNCTION(cleanup_guard& operator= (cleanup_guard const&))
private:
T& m_Obj;
diff --git a/3party/boost/boost/log/detail/code_conversion.hpp b/3party/boost/boost/log/detail/code_conversion.hpp
index 1c65f4e3e3..d49988bc21 100644
--- a/3party/boost/boost/log/detail/code_conversion.hpp
+++ b/3party/boost/boost/log/detail/code_conversion.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 08.11.2008
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_CODE_CONVERSION_HPP_INCLUDED_
@@ -21,7 +21,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/config.hpp b/3party/boost/boost/log/detail/config.hpp
index 342087a8b1..4d1e66b73c 100644
--- a/3party/boost/boost/log/detail/config.hpp
+++ b/3party/boost/boost/log/detail/config.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 08.03.2007
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html. In this file
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html. In this file
* internal configuration macros are defined.
*/
@@ -30,6 +30,14 @@
# error Boost.Log: RTTI is required by the library
#endif
+#if defined(_MSC_VER) && _MSC_VER >= 1600
+# define BOOST_LOG_HAS_PRAGMA_DETECT_MISMATCH
+#endif
+
+#if defined(BOOST_LOG_HAS_PRAGMA_DETECT_MISMATCH)
+#include <boost/preprocessor/stringize.hpp>
+#endif
+
#if !defined(BOOST_WINDOWS)
# ifndef BOOST_LOG_WITHOUT_DEBUG_OUTPUT
# define BOOST_LOG_WITHOUT_DEBUG_OUTPUT
@@ -39,11 +47,7 @@
# endif
#endif
-#if (defined(_MSC_VER) && (_MSC_VER >= 1020)) || defined(__GNUC__) || defined(BOOST_CLANG) || defined(BOOST_INTEL) || defined(__COMO__) || defined(__DMC__)
-# define BOOST_LOG_HAS_PRAGMA_ONCE
-#endif
-
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -57,8 +61,8 @@
# define BOOST_LOG_BROKEN_TEMPLATE_DEFINITION_MATCHING
# endif
# if _MSC_VER <= 1400
- // Older MSVC versions reject friend declarations for class template instantiations
-# define BOOST_LOG_BROKEN_FRIEND_TEMPLATE_INSTANTIATIONS
+ // Older MSVC versions reject friend declarations for class template specializations
+# define BOOST_LOG_BROKEN_FRIEND_TEMPLATE_SPECIALIZATIONS
# endif
# if _MSC_VER <= 1600
// MSVC up to 10.0 attempts to invoke copy constructor when initializing a const reference from rvalue returned from a function.
@@ -82,8 +86,8 @@
# endif
#endif
-#if defined(BOOST_INTEL)
- // Intel compiler has problems with friend declarations for member classes
+#if defined(BOOST_INTEL) || defined(__SUNPRO_CC)
+ // Intel compiler and Sun Studio 12.3 have problems with friend declarations for nested class templates
# define BOOST_LOG_NO_MEMBER_TEMPLATE_FRIENDS
#endif
@@ -103,16 +107,6 @@
# endif
#endif
-#if (defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) && !defined(BOOST_NO_COMPILER_CONFIG)
- // Sun C++ 5.3 can't handle the safe_bool idiom, so don't use it
-# define BOOST_LOG_NO_UNSPECIFIED_BOOL
-#endif // (defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) && !defined(BOOST_NO_COMPILER_CONFIG)
-
-#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1))
- // GCC 4.0.0 (and probably older) can't cope with some optimizations regarding string literals
-# define BOOST_LOG_BROKEN_STRING_LITERALS
-#endif
-
#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 2)
// GCC 4.1 and 4.2 have buggy anonymous namespaces support, which interferes with symbol linkage
# define BOOST_LOG_ANONYMOUS_NAMESPACE namespace anonymous {} using namespace anonymous; namespace anonymous
@@ -120,39 +114,11 @@
# define BOOST_LOG_ANONYMOUS_NAMESPACE namespace
#endif
-#define BOOST_LOG_NO_TRAILING_RESULT_TYPE
-#define BOOST_LOG_NO_INLINE_NAMESPACES
-
-#if defined(BOOST_CLANG)
-# if __has_feature(cxx_trailing_return)
-# undef BOOST_LOG_NO_TRAILING_RESULT_TYPE
-# endif
-# if __has_feature(cxx_inline_namespaces)
-# undef BOOST_LOG_NO_INLINE_NAMESPACES
-# endif
-#elif defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__)
-# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-# undef BOOST_LOG_NO_TRAILING_RESULT_TYPE
-# undef BOOST_LOG_NO_INLINE_NAMESPACES
-# endif
-#endif
-
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || (defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 6))
// GCC up to 4.6 (inclusively) did not support expanding template argument packs into non-variadic template arguments
#define BOOST_LOG_NO_CXX11_ARG_PACKS_TO_NON_VARIADIC_ARGS_EXPANSION
#endif
-// Extended declaration macros. Used to implement compiler-specific optimizations.
-#if defined(BOOST_FORCEINLINE)
-# define BOOST_LOG_FORCEINLINE BOOST_FORCEINLINE
-#elif defined(_MSC_VER)
-# define BOOST_LOG_FORCEINLINE __forceinline
-#elif defined(__GNUC__) && (__GNUC__ > 3)
-# define BOOST_LOG_FORCEINLINE inline __attribute__((always_inline))
-#else
-# define BOOST_LOG_FORCEINLINE inline
-#endif
-
#if defined(_MSC_VER)
# define BOOST_LOG_NO_VTABLE __declspec(novtable)
#elif defined(__GNUC__)
@@ -182,11 +148,14 @@
#endif
#if !defined(BOOST_LOG_UNREACHABLE)
# define BOOST_LOG_UNREACHABLE()
+# define BOOST_LOG_UNREACHABLE_RETURN(r) return r
+#else
+# define BOOST_LOG_UNREACHABLE_RETURN(r) BOOST_LOG_UNREACHABLE()
#endif
// Some compilers support a special attribute that shows that a function won't return
#if defined(__GNUC__) || (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x590)
- // GCC and (supposedly) Sun Studio 12 support attribute syntax
+ // GCC and Sun Studio 12 support attribute syntax
# define BOOST_LOG_NORETURN __attribute__((noreturn))
#elif defined (_MSC_VER)
// Microsoft-compatible compilers go here
@@ -197,23 +166,6 @@
# define BOOST_LOG_NORETURN
#endif
-// cxxabi.h availability macro
-#if defined(BOOST_CLANG)
-# if defined(__has_include) && __has_include(<cxxabi.h>)
-# define BOOST_LOG_HAS_CXXABI_H
-# endif
-#elif defined(__GNUC__) && !defined(__QNX__)
-# define BOOST_LOG_HAS_CXXABI_H
-#endif
-
-#if defined(BOOST_SYMBOL_VISIBLE)
-# define BOOST_LOG_VISIBLE BOOST_SYMBOL_VISIBLE
-#elif defined(__GNUC__) && (__GNUC__ >= 4)
-# define BOOST_LOG_VISIBLE __attribute__((visibility("default")))
-#else
-# define BOOST_LOG_VISIBLE
-#endif
-
#if !defined(BOOST_LOG_BUILDING_THE_LIB)
// Detect if we're dealing with dll
@@ -269,7 +221,7 @@
# endif
# endif
# ifndef BOOST_LOG_API
-# define BOOST_LOG_API BOOST_LOG_VISIBLE
+# define BOOST_LOG_API BOOST_SYMBOL_VISIBLE
# endif
#endif // !defined(BOOST_LOG_BUILDING_THE_LIB)
@@ -312,21 +264,9 @@
# endif
#endif // defined(BOOST_LOG_USE_COMPILER_TLS)
-#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 5)
- // GCC 4.5 forbids declaration of defaulted functions in private or protected sections
-# define BOOST_LOG_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS
-#endif
-
-#if defined(BOOST_LOG_DOXYGEN_PASS) || !(defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_LOG_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS))
-# define BOOST_LOG_DEFAULTED_FUNCTION(fun, body) fun = default;
-#else
-# define BOOST_LOG_DEFAULTED_FUNCTION(fun, body) fun body
-#endif
-
-#if defined(BOOST_LOG_DOXYGEN_PASS) || !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
-# define BOOST_LOG_DELETED_FUNCTION(fun) fun = delete;
-#else
-# define BOOST_LOG_DELETED_FUNCTION(fun) private: fun;
+#ifndef BOOST_LOG_CPU_CACHE_LINE_SIZE
+//! The macro defines the CPU cache line size for the target architecture. This is mostly used for optimization.
+#define BOOST_LOG_CPU_CACHE_LINE_SIZE 64
#endif
namespace boost {
@@ -370,7 +310,7 @@ namespace boost {
namespace log {
-# if !defined(BOOST_LOG_NO_INLINE_NAMESPACES)
+# if !defined(BOOST_NO_CXX11_INLINE_NAMESPACES)
inline namespace BOOST_LOG_VERSION_NAMESPACE {}
}
@@ -383,7 +323,7 @@ inline namespace BOOST_LOG_VERSION_NAMESPACE {}
namespace BOOST_LOG_VERSION_NAMESPACE {}
using namespace BOOST_LOG_VERSION_NAMESPACE
-# if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && !defined(__clang__)
__attribute__((__strong__))
# endif
;
@@ -402,6 +342,10 @@ namespace log {}
#endif // !defined(BOOST_LOG_DOXYGEN_PASS)
+#if defined(BOOST_LOG_HAS_PRAGMA_DETECT_MISMATCH)
+#pragma detect_mismatch("boost_log_abi", BOOST_PP_STRINGIZE(BOOST_LOG_VERSION_NAMESPACE))
+#endif
+
} // namespace boost
#endif // BOOST_LOG_DETAIL_CONFIG_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/detail/copy_cv.hpp b/3party/boost/boost/log/detail/copy_cv.hpp
new file mode 100644
index 0000000000..a6a4ebae04
--- /dev/null
+++ b/3party/boost/boost/log/detail/copy_cv.hpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2014.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file copy_cv.hpp
+ * \author Andrey Semashev
+ * \date 16.03.2014
+ *
+ * The header defines \c copy_cv type trait which copies const/volatile qualifiers from one type to another
+ */
+
+#ifndef BOOST_LOG_DETAIL_COPY_CV_HPP_INCLUDED_
+#define BOOST_LOG_DETAIL_COPY_CV_HPP_INCLUDED_
+
+#include <boost/log/detail/config.hpp>
+#include <boost/log/detail/header.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace aux {
+
+//! The type trait copies top level const/volatile qualifiers from \c FromT to \c ToT
+template< typename FromT, typename ToT >
+struct copy_cv
+{
+ typedef ToT type;
+};
+
+template< typename FromT, typename ToT >
+struct copy_cv< const FromT, ToT >
+{
+ typedef const ToT type;
+};
+
+template< typename FromT, typename ToT >
+struct copy_cv< volatile FromT, ToT >
+{
+ typedef volatile ToT type;
+};
+
+template< typename FromT, typename ToT >
+struct copy_cv< const volatile FromT, ToT >
+{
+ typedef const volatile ToT type;
+};
+
+} // namespace aux
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // BOOST_LOG_DETAIL_COPY_CV_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/detail/custom_terminal_spec.hpp b/3party/boost/boost/log/detail/custom_terminal_spec.hpp
index 6d4d7bb997..fb43357b00 100644
--- a/3party/boost/boost/log/detail/custom_terminal_spec.hpp
+++ b/3party/boost/boost/log/detail/custom_terminal_spec.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/date_time_fmt_gen_traits_fwd.hpp b/3party/boost/boost/log/detail/date_time_fmt_gen_traits_fwd.hpp
index 0dca8ba13e..a80930b2ae 100644
--- a/3party/boost/boost/log/detail/date_time_fmt_gen_traits_fwd.hpp
+++ b/3party/boost/boost/log/detail/date_time_fmt_gen_traits_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 07.11.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_DATE_TIME_FMT_GEN_TRAITS_FWD_HPP_INCLUDED_
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/date_time_format_parser.hpp b/3party/boost/boost/log/detail/date_time_format_parser.hpp
index 3aaac6243d..7b82d5556a 100644
--- a/3party/boost/boost/log/detail/date_time_format_parser.hpp
+++ b/3party/boost/boost/log/detail/date_time_format_parser.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +21,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/decomposed_time.hpp b/3party/boost/boost/log/detail/decomposed_time.hpp
index fe30cab7e6..24f7546533 100644
--- a/3party/boost/boost/log/detail/decomposed_time.hpp
+++ b/3party/boost/boost/log/detail/decomposed_time.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 07.11.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_DECOMPOSED_TIME_HPP_INCLUDED_
@@ -28,7 +28,7 @@
#include <boost/log/utility/formatting_ostream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -100,7 +100,7 @@ struct decomposed_time_wrapper :
typedef T value_type;
value_type m_time;
- BOOST_LOG_DEFAULTED_FUNCTION(decomposed_time_wrapper(), {})
+ BOOST_DEFAULTED_FUNCTION(decomposed_time_wrapper(), {})
explicit decomposed_time_wrapper(value_type const& time) : m_time(time)
{
@@ -144,8 +144,8 @@ public:
{
}
- BOOST_LOG_DELETED_FUNCTION(context(context const&))
- BOOST_LOG_DELETED_FUNCTION(context& operator=(context const&))
+ BOOST_DELETED_FUNCTION(context(context const&))
+ BOOST_DELETED_FUNCTION(context& operator=(context const&))
};
private:
@@ -159,7 +159,7 @@ protected:
string_type m_literal_chars;
public:
- BOOST_LOG_DEFAULTED_FUNCTION(date_time_formatter(), {})
+ BOOST_DEFAULTED_FUNCTION(date_time_formatter(), {})
date_time_formatter(date_time_formatter const& that) :
m_formatters(that.m_formatters),
m_literal_lens(that.m_literal_lens),
@@ -203,7 +203,7 @@ public:
void swap(date_time_formatter& that)
{
m_formatters.swap(that.m_formatters);
- m_literal_lens.swap(that.m_literals);
+ m_literal_lens.swap(that.m_literal_lens);
m_literal_chars.swap(that.m_literal_chars);
}
diff --git a/3party/boost/boost/log/detail/deduce_char_type.hpp b/3party/boost/boost/log/detail/deduce_char_type.hpp
index 098809c71b..cb024609e9 100644
--- a/3party/boost/boost/log/detail/deduce_char_type.hpp
+++ b/3party/boost/boost/log/detail/deduce_char_type.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 17.11.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_DEDUCE_CHAR_TYPE_HPP_INCLUDED_
@@ -19,7 +19,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/default_attribute_names.hpp b/3party/boost/boost/log/detail/default_attribute_names.hpp
index 3aeeb21d99..c1fddd36e3 100644
--- a/3party/boost/boost/log/detail/default_attribute_names.hpp
+++ b/3party/boost/boost/log/detail/default_attribute_names.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 15.01.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_DEFAULT_ATTRIBUTE_NAMES_HPP_INCLUDED_
@@ -20,7 +20,7 @@
#include <boost/log/attributes/attribute_name.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/embedded_string_type.hpp b/3party/boost/boost/log/detail/embedded_string_type.hpp
index 4fb58a83ba..091dce205b 100644
--- a/3party/boost/boost/log/detail/embedded_string_type.hpp
+++ b/3party/boost/boost/log/detail/embedded_string_type.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 16.08.2009
*
* This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_EMBEDDED_STRING_TYPE_HPP_INCLUDED_
@@ -21,7 +21,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/enqueued_record.hpp b/3party/boost/boost/log/detail/enqueued_record.hpp
new file mode 100644
index 0000000000..11aaf186f5
--- /dev/null
+++ b/3party/boost/boost/log/detail/enqueued_record.hpp
@@ -0,0 +1,103 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2014.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file enqueued_record.hpp
+ * \author Andrey Semashev
+ * \date 01.04.2014
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html. In this file
+ * internal configuration macros are defined.
+ */
+
+#ifndef BOOST_LOG_DETAIL_ENQUEUED_RECORD_HPP_INCLUDED_
+#define BOOST_LOG_DETAIL_ENQUEUED_RECORD_HPP_INCLUDED_
+
+#include <boost/move/core.hpp>
+#include <boost/move/utility.hpp>
+#include <boost/log/detail/config.hpp>
+#include <boost/log/detail/timestamp.hpp>
+#include <boost/log/core/record_view.hpp>
+#include <boost/log/detail/header.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace sinks {
+
+namespace aux {
+
+//! Log record with enqueueing timestamp
+class enqueued_record
+{
+ BOOST_COPYABLE_AND_MOVABLE(enqueued_record)
+
+public:
+ //! Ordering predicate
+ template< typename OrderT >
+ struct order :
+ public OrderT
+ {
+ typedef typename OrderT::result_type result_type;
+
+ order() {}
+ order(order const& that) : OrderT(static_cast< OrderT const& >(that)) {}
+ order(OrderT const& that) : OrderT(that) {}
+
+ result_type operator() (enqueued_record const& left, enqueued_record const& right) const
+ {
+ // std::priority_queue requires ordering with semantics of std::greater, so we swap arguments
+ return OrderT::operator() (right.m_record, left.m_record);
+ }
+ };
+
+ boost::log::aux::timestamp m_timestamp;
+ record_view m_record;
+
+ enqueued_record(enqueued_record const& that) : m_timestamp(that.m_timestamp), m_record(that.m_record)
+ {
+ }
+ enqueued_record(BOOST_RV_REF(enqueued_record) that) :
+ m_timestamp(that.m_timestamp),
+ m_record(boost::move(that.m_record))
+ {
+ }
+ explicit enqueued_record(record_view const& rec) :
+ m_timestamp(boost::log::aux::get_timestamp()),
+ m_record(rec)
+ {
+ }
+ enqueued_record& operator= (BOOST_COPY_ASSIGN_REF(enqueued_record) that)
+ {
+ m_timestamp = that.m_timestamp;
+ m_record = that.m_record;
+ return *this;
+ }
+ enqueued_record& operator= (BOOST_RV_REF(enqueued_record) that)
+ {
+ m_timestamp = that.m_timestamp;
+ m_record = boost::move(that.m_record);
+ return *this;
+ }
+};
+
+} // namespace aux
+
+} // namespace sinks
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // BOOST_LOG_DETAIL_ENQUEUED_RECORD_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/detail/event.hpp b/3party/boost/boost/log/detail/event.hpp
index 7ee9131b1e..741ab3c9bd 100644
--- a/3party/boost/boost/log/detail/event.hpp
+++ b/3party/boost/boost/log/detail/event.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,7 +15,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -67,10 +67,9 @@ public:
//! Sets the object to a signalled state
BOOST_LOG_API void set_signalled();
-private:
// Copying prohibited
- sem_based_event(sem_based_event const&);
- sem_based_event& operator= (sem_based_event const&);
+ BOOST_DELETED_FUNCTION(sem_based_event(sem_based_event const&))
+ BOOST_DELETED_FUNCTION(sem_based_event& operator= (sem_based_event const&))
};
typedef sem_based_event event;
@@ -94,10 +93,9 @@ public:
//! Sets the object to a signalled state
BOOST_LOG_API void set_signalled();
-private:
// Copying prohibited
- winapi_based_event(winapi_based_event const&);
- winapi_based_event& operator= (winapi_based_event const&);
+ BOOST_DELETED_FUNCTION(winapi_based_event(winapi_based_event const&))
+ BOOST_DELETED_FUNCTION(winapi_based_event& operator= (winapi_based_event const&))
};
typedef winapi_based_event event;
@@ -122,10 +120,9 @@ public:
//! Sets the object to a signalled state
BOOST_LOG_API void set_signalled();
-private:
// Copying prohibited
- generic_event(generic_event const&);
- generic_event& operator= (generic_event const&);
+ BOOST_DELETED_FUNCTION(generic_event(generic_event const&))
+ BOOST_DELETED_FUNCTION(generic_event& operator= (generic_event const&))
};
typedef generic_event event;
diff --git a/3party/boost/boost/log/detail/fake_mutex.hpp b/3party/boost/boost/log/detail/fake_mutex.hpp
index dd70effd17..f21f961538 100644
--- a/3party/boost/boost/log/detail/fake_mutex.hpp
+++ b/3party/boost/boost/log/detail/fake_mutex.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 31.07.2011
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_FAKE_MUTEX_HPP_INCLUDED_
@@ -19,7 +19,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -33,7 +33,7 @@ namespace aux {
class fake_mutex
{
public:
- BOOST_LOG_DEFAULTED_FUNCTION(fake_mutex(), {})
+ BOOST_DEFAULTED_FUNCTION(fake_mutex(), {})
void lock() {}
bool try_lock() { return true; }
template< typename T >
@@ -41,8 +41,8 @@ public:
void unlock() {}
// Copying prohibited
- BOOST_LOG_DELETED_FUNCTION(fake_mutex(fake_mutex const&))
- BOOST_LOG_DELETED_FUNCTION(fake_mutex& operator=(fake_mutex const&))
+ BOOST_DELETED_FUNCTION(fake_mutex(fake_mutex const&))
+ BOOST_DELETED_FUNCTION(fake_mutex& operator=(fake_mutex const&))
};
} // namespace aux
diff --git a/3party/boost/boost/log/detail/footer.hpp b/3party/boost/boost/log/detail/footer.hpp
index fce774692e..8208ebd33a 100644
--- a/3party/boost/boost/log/detail/footer.hpp
+++ b/3party/boost/boost/log/detail/footer.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,13 @@
#if !defined(BOOST_LOG_ENABLE_WARNINGS)
#if defined(_MSC_VER)
+
#pragma warning(pop)
+
+#elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 406
+
+#pragma GCC diagnostic pop
+
#endif
#endif // !defined(BOOST_LOG_ENABLE_WARNINGS)
diff --git a/3party/boost/boost/log/detail/format.hpp b/3party/boost/boost/log/detail/format.hpp
index 879d47b282..c8a02f2c76 100644
--- a/3party/boost/boost/log/detail/format.hpp
+++ b/3party/boost/boost/log/detail/format.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 15.11.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_FORMAT_HPP_INCLUDED_
@@ -28,7 +28,7 @@
#include <boost/log/utility/formatting_ostream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -87,7 +87,7 @@ public:
//! Format element descriptors
format_element_list format_elements;
- BOOST_LOG_DEFAULTED_FUNCTION(format_description(), {})
+ BOOST_DEFAULTED_FUNCTION(format_description(), {})
format_description(format_description const& that) : literal_chars(that.literal_chars), format_elements(that.format_elements)
{
@@ -113,14 +113,14 @@ BOOST_LOG_API format_description< CharT > parse_format(const CharT* begin, const
//! Parses format string
template< typename CharT >
-BOOST_LOG_FORCEINLINE format_description< CharT > parse_format(const CharT* begin)
+BOOST_FORCEINLINE format_description< CharT > parse_format(const CharT* begin)
{
return parse_format(begin, begin + std::char_traits< CharT >::length(begin));
}
//! Parses format string
template< typename CharT, typename TraitsT, typename AllocatorT >
-BOOST_LOG_FORCEINLINE format_description< CharT > parse_format(std::basic_string< CharT, TraitsT, AllocatorT > const& fmt)
+BOOST_FORCEINLINE format_description< CharT > parse_format(std::basic_string< CharT, TraitsT, AllocatorT > const& fmt)
{
const CharT* begin = fmt.c_str();
return parse_format(begin, begin + fmt.size());
diff --git a/3party/boost/boost/log/detail/function_traits.hpp b/3party/boost/boost/log/detail/function_traits.hpp
index 78cdda688f..bd298fca30 100644
--- a/3party/boost/boost/log/detail/function_traits.hpp
+++ b/3party/boost/boost/log/detail/function_traits.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 30.08.2009
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_FUNCTION_TRAITS_HPP_INCLUDED_
@@ -35,7 +35,7 @@
#include <boost/function_types/is_nonmember_callable_builtin.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/generate_overloads.hpp b/3party/boost/boost/log/detail/generate_overloads.hpp
index 186a6eb087..63b9edf081 100644
--- a/3party/boost/boost/log/detail/generate_overloads.hpp
+++ b/3party/boost/boost/log/detail/generate_overloads.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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/log/detail/header.hpp b/3party/boost/boost/log/detail/header.hpp
index a4b902198d..f7cf75d557 100644
--- a/3party/boost/boost/log/detail/header.hpp
+++ b/3party/boost/boost/log/detail/header.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,6 +10,7 @@
#if !defined(BOOST_LOG_ENABLE_WARNINGS)
#if defined(_MSC_VER)
+
#pragma warning(push, 3)
// 'm_A' : class 'A' needs to have dll-interface to be used by clients of class 'B'
#pragma warning(disable: 4251)
@@ -35,6 +36,29 @@
#pragma warning(disable: 4610)
// function marked as __forceinline not inlined
#pragma warning(disable: 4714)
+// decorated name length exceeded, name was truncated
+#pragma warning(disable: 4503)
+// declaration of 'A' hides previous local declaration
+#pragma warning(disable: 4456)
+// declaration of 'A' hides global declaration
+#pragma warning(disable: 4459)
+
+#elif defined(__GNUC__) && !(defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)) \
+ && (__GNUC__ * 100 + __GNUC_MINOR__) >= 406
+
+#pragma GCC diagnostic push
+// 'var' defined but not used
+#pragma GCC diagnostic ignored "-Wunused-variable"
+// unused parameter 'arg'
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+// missing initializer for member var
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407
+// typedef 'foo' locally defined but not used
+#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
+#endif
+
#endif
#endif // !defined(BOOST_LOG_ENABLE_WARNINGS)
diff --git a/3party/boost/boost/log/detail/id.hpp b/3party/boost/boost/log/detail/id.hpp
index db4afe10e0..2ca1e1e30d 100644
--- a/3party/boost/boost/log/detail/id.hpp
+++ b/3party/boost/boost/log/detail/id.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 08.01.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_ID_HPP_INCLUDED_
@@ -19,7 +19,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/intptr_t.hpp b/3party/boost/boost/log/detail/intptr_t.hpp
deleted file mode 100644
index f5151c8d1f..0000000000
--- a/3party/boost/boost/log/detail/intptr_t.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright Andrey Semashev 2007 - 2013.
- * Distributed under the Boost Software License, Version 1.0.
- * (See accompanying file LICENSE_1_0.txt or copy at
- * http://www.boost.org/LICENSE_1_0.txt)
- */
-/*!
- * \file intptr_t.hpp
- * \author Andrey Semashev
- * \date 06.05.2013
- *
- * \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
- */
-
-#ifndef BOOST_LOG_DETAIL_INTPTR_T_HPP_INCLUDED_
-#define BOOST_LOG_DETAIL_INTPTR_T_HPP_INCLUDED_
-
-#include <boost/cstdint.hpp>
-#include <boost/log/detail/config.hpp>
-#include <boost/log/detail/header.hpp>
-
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-
-BOOST_LOG_OPEN_NAMESPACE
-
-namespace aux {
-
-// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.
-#if !defined(__PGIC__)
-
-#if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
- || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
- || defined(__CYGWIN__) \
- || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
- || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
-
-typedef ::intptr_t intptr_t;
-typedef ::uintptr_t uintptr_t;
-#define BOOST_LOG_HAS_INTPTR_T
-
-#elif (defined(__GNUC__) || defined(__clang__)) && defined(__INTPTR_TYPE__) && defined(__UINTPTR_TYPE__)
-
-typedef __INTPTR_TYPE__ intptr_t;
-typedef __UINTPTR_TYPE__ uintptr_t;
-#define BOOST_LOG_HAS_INTPTR_T
-
-#endif
-
-#endif
-
-} // namespace aux
-
-BOOST_LOG_CLOSE_NAMESPACE // namespace log
-
-} // namespace boost
-
-#include <boost/log/detail/footer.hpp>
-
-#endif // BOOST_LOG_DETAIL_INTPTR_T_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/detail/light_function.hpp b/3party/boost/boost/log/detail/light_function.hpp
index e870615a85..325a5281d4 100644
--- a/3party/boost/boost/log/detail/light_function.hpp
+++ b/3party/boost/boost/log/detail/light_function.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 20.06.2010
*
* \brief This header is the Boost.Log library impl, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*
* The file contains a lightweight alternative of Boost.Function. It does not provide all
* features of Boost.Function but doesn't introduce dependency on Boost.Bind.
@@ -23,7 +23,7 @@
#include <boost/move/core.hpp>
#include <boost/move/utility.hpp>
#include <boost/log/detail/config.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/type_traits/remove_cv.hpp>
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/preprocessor/iteration/iterate.hpp>
@@ -44,7 +44,7 @@
#endif
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -75,18 +75,21 @@ public:
private:
struct impl_base
{
- typedef result_type (*invoke_type)(impl_base*, ArgsT...);
+ typedef result_type (*invoke_type)(void*, ArgsT...);
const invoke_type invoke;
- typedef impl_base* (*clone_type)(const impl_base*);
+ typedef impl_base* (*clone_type)(const void*);
const clone_type clone;
- typedef void (*destroy_type)(impl_base*);
+ typedef void (*destroy_type)(void*);
const destroy_type destroy;
impl_base(invoke_type inv, clone_type cl, destroy_type dstr) : invoke(inv), clone(cl), destroy(dstr)
{
}
+
+ BOOST_DELETED_FUNCTION(impl_base(impl_base const&))
+ BOOST_DELETED_FUNCTION(impl_base& operator= (impl_base const&))
};
#if !defined(BOOST_LOG_NO_MEMBER_TEMPLATE_FRIENDS)
@@ -114,23 +117,26 @@ private:
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
explicit impl(FunT&& fun) :
impl_base(&this_type::invoke_impl, &this_type::clone_impl, &this_type::destroy_impl),
- m_Function(fun)
+ m_Function(boost::forward< FunT >(fun))
{
}
#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- static void destroy_impl(impl_base* self)
+ static void destroy_impl(void* self)
{
- delete static_cast< impl* >(self);
+ delete static_cast< impl* >(static_cast< impl_base* >(self));
}
- static impl_base* clone_impl(const impl_base* self)
+ static impl_base* clone_impl(const void* self)
{
- return new impl(static_cast< const impl* >(self)->m_Function);
+ return new impl(static_cast< const impl* >(static_cast< const impl_base* >(self))->m_Function);
}
- static result_type invoke_impl(impl_base* self, ArgsT... args)
+ static result_type invoke_impl(void* self, ArgsT... args)
{
- return static_cast< impl* >(self)->m_Function(args...);
+ return static_cast< impl* >(static_cast< impl_base* >(self))->m_Function(args...);
}
+
+ BOOST_DELETED_FUNCTION(impl(impl const&))
+ BOOST_DELETED_FUNCTION(impl& operator= (impl const&))
};
private:
@@ -244,7 +250,7 @@ public:
return m_pImpl->invoke(m_pImpl, args...);
}
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
bool operator! () const BOOST_NOEXCEPT { return (m_pImpl == NULL); }
bool empty() const BOOST_NOEXCEPT { return (m_pImpl == NULL); }
void clear() BOOST_NOEXCEPT
@@ -258,7 +264,7 @@ public:
void swap(this_type& that) BOOST_NOEXCEPT
{
- register impl_base* p = m_pImpl;
+ impl_base* p = m_pImpl;
m_pImpl = that.m_pImpl;
that.m_pImpl = p;
}
@@ -276,18 +282,21 @@ public:
private:
struct impl_base
{
- typedef void (*invoke_type)(impl_base*, ArgsT...);
+ typedef void (*invoke_type)(void*, ArgsT...);
const invoke_type invoke;
- typedef impl_base* (*clone_type)(const impl_base*);
+ typedef impl_base* (*clone_type)(const void*);
const clone_type clone;
- typedef void (*destroy_type)(impl_base*);
+ typedef void (*destroy_type)(void*);
const destroy_type destroy;
impl_base(invoke_type inv, clone_type cl, destroy_type dstr) : invoke(inv), clone(cl), destroy(dstr)
{
}
+
+ BOOST_DELETED_FUNCTION(impl_base(impl_base const&))
+ BOOST_DELETED_FUNCTION(impl_base& operator= (impl_base const&))
};
#if !defined(BOOST_LOG_NO_MEMBER_TEMPLATE_FRIENDS)
@@ -315,23 +324,26 @@ private:
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
explicit impl(FunT&& fun) :
impl_base(&this_type::invoke_impl, &this_type::clone_impl, &this_type::destroy_impl),
- m_Function(fun)
+ m_Function(boost::forward< FunT >(fun))
{
}
#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- static void destroy_impl(impl_base* self)
+ static void destroy_impl(void* self)
{
- delete static_cast< impl* >(self);
+ delete static_cast< impl* >(static_cast< impl_base* >(self));
}
- static impl_base* clone_impl(const impl_base* self)
+ static impl_base* clone_impl(const void* self)
{
- return new impl(static_cast< const impl* >(self)->m_Function);
+ return new impl(static_cast< const impl* >(static_cast< const impl_base* >(self))->m_Function);
}
- static result_type invoke_impl(impl_base* self, ArgsT... args)
+ static result_type invoke_impl(void* self, ArgsT... args)
{
- static_cast< impl* >(self)->m_Function(args...);
+ static_cast< impl* >(static_cast< impl_base* >(self))->m_Function(args...);
}
+
+ BOOST_DELETED_FUNCTION(impl(impl const&))
+ BOOST_DELETED_FUNCTION(impl& operator= (impl const&))
};
private:
@@ -444,7 +456,7 @@ public:
m_pImpl->invoke(m_pImpl, args...);
}
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
bool operator! () const BOOST_NOEXCEPT { return (m_pImpl == NULL); }
bool empty() const BOOST_NOEXCEPT { return (m_pImpl == NULL); }
void clear() BOOST_NOEXCEPT
@@ -458,7 +470,7 @@ public:
void swap(this_type& that) BOOST_NOEXCEPT
{
- register impl_base* p = m_pImpl;
+ impl_base* p = m_pImpl;
m_pImpl = that.m_pImpl;
that.m_pImpl = p;
}
diff --git a/3party/boost/boost/log/detail/light_function_pp.hpp b/3party/boost/boost/log/detail/light_function_pp.hpp
index d6aa2d4903..df7d29214d 100644
--- a/3party/boost/boost/log/detail/light_function_pp.hpp
+++ b/3party/boost/boost/log/detail/light_function_pp.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,18 +20,21 @@ public:
private:
struct impl_base
{
- typedef result_type (*invoke_type)(impl_base* BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), ArgT));
+ typedef result_type (*invoke_type)(void* BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), ArgT));
const invoke_type invoke;
- typedef impl_base* (*clone_type)(const impl_base*);
+ typedef impl_base* (*clone_type)(const void*);
const clone_type clone;
- typedef void (*destroy_type)(impl_base*);
+ typedef void (*destroy_type)(void*);
const destroy_type destroy;
impl_base(invoke_type inv, clone_type cl, destroy_type dstr) : invoke(inv), clone(cl), destroy(dstr)
{
}
+
+ BOOST_DELETED_FUNCTION(impl_base(impl_base const&))
+ BOOST_DELETED_FUNCTION(impl_base& operator= (impl_base const&))
};
#if !defined(BOOST_LOG_NO_MEMBER_TEMPLATE_FRIENDS)
@@ -59,23 +62,26 @@ private:
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
explicit impl(FunT&& fun) :
impl_base(&this_type::invoke_impl, &this_type::clone_impl, &this_type::destroy_impl),
- m_Function(fun)
+ m_Function(boost::forward< FunT >(fun))
{
}
#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- static void destroy_impl(impl_base* self)
+ static void destroy_impl(void* self)
{
- delete static_cast< impl* >(self);
+ delete static_cast< impl* >(static_cast< impl_base* >(self));
}
- static impl_base* clone_impl(const impl_base* self)
+ static impl_base* clone_impl(const void* self)
{
- return new impl(static_cast< const impl* >(self)->m_Function);
+ return new impl(static_cast< const impl* >(static_cast< const impl_base* >(self))->m_Function);
}
- static result_type invoke_impl(impl_base* self BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), ArgT, arg))
+ static result_type invoke_impl(void* self BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), ArgT, arg))
{
- return static_cast< impl* >(self)->m_Function(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), arg));
+ return static_cast< impl* >(static_cast< impl_base* >(self))->m_Function(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), arg));
}
+
+ BOOST_DELETED_FUNCTION(impl(impl const&))
+ BOOST_DELETED_FUNCTION(impl& operator= (impl const&))
};
private:
@@ -189,7 +195,7 @@ public:
return m_pImpl->invoke(m_pImpl BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), arg));
}
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
bool operator! () const BOOST_NOEXCEPT { return (m_pImpl == NULL); }
bool empty() const BOOST_NOEXCEPT { return (m_pImpl == NULL); }
void clear() BOOST_NOEXCEPT
@@ -203,7 +209,7 @@ public:
void swap(this_type& that) BOOST_NOEXCEPT
{
- register impl_base* p = m_pImpl;
+ impl_base* p = m_pImpl;
m_pImpl = that.m_pImpl;
that.m_pImpl = p;
}
@@ -223,18 +229,21 @@ public:
private:
struct impl_base
{
- typedef void (*invoke_type)(impl_base* BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), ArgT));
+ typedef void (*invoke_type)(void* BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), ArgT));
const invoke_type invoke;
- typedef impl_base* (*clone_type)(const impl_base*);
+ typedef impl_base* (*clone_type)(const void*);
const clone_type clone;
- typedef void (*destroy_type)(impl_base*);
+ typedef void (*destroy_type)(void*);
const destroy_type destroy;
impl_base(invoke_type inv, clone_type cl, destroy_type dstr) : invoke(inv), clone(cl), destroy(dstr)
{
}
+
+ BOOST_DELETED_FUNCTION(impl_base(impl_base const&))
+ BOOST_DELETED_FUNCTION(impl_base& operator= (impl_base const&))
};
#if !defined(BOOST_LOG_NO_MEMBER_TEMPLATE_FRIENDS)
@@ -262,23 +271,26 @@ private:
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
explicit impl(FunT&& fun) :
impl_base(&this_type::invoke_impl, &this_type::clone_impl, &this_type::destroy_impl),
- m_Function(fun)
+ m_Function(boost::forward< FunT >(fun))
{
}
#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- static void destroy_impl(impl_base* self)
+ static void destroy_impl(void* self)
{
- delete static_cast< impl* >(self);
+ delete static_cast< impl* >(static_cast< impl_base* >(self));
}
- static impl_base* clone_impl(const impl_base* self)
+ static impl_base* clone_impl(const void* self)
{
- return new impl(static_cast< const impl* >(self)->m_Function);
+ return new impl(static_cast< const impl* >(static_cast< const impl_base* >(self))->m_Function);
}
- static result_type invoke_impl(impl_base* self BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), ArgT, arg))
+ static result_type invoke_impl(void* self BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), ArgT, arg))
{
- static_cast< impl* >(self)->m_Function(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), arg));
+ static_cast< impl* >(static_cast< impl_base* >(self))->m_Function(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), arg));
}
+
+ BOOST_DELETED_FUNCTION(impl(impl const&))
+ BOOST_DELETED_FUNCTION(impl& operator= (impl const&))
};
private:
@@ -391,7 +403,7 @@ public:
m_pImpl->invoke(m_pImpl BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), arg));
}
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
bool operator! () const BOOST_NOEXCEPT { return (m_pImpl == NULL); }
bool empty() const BOOST_NOEXCEPT { return (m_pImpl == NULL); }
void clear() BOOST_NOEXCEPT
@@ -405,7 +417,7 @@ public:
void swap(this_type& that) BOOST_NOEXCEPT
{
- register impl_base* p = m_pImpl;
+ impl_base* p = m_pImpl;
m_pImpl = that.m_pImpl;
that.m_pImpl = p;
}
diff --git a/3party/boost/boost/log/detail/light_rw_mutex.hpp b/3party/boost/boost/log/detail/light_rw_mutex.hpp
index a6bad5af7d..abfef13972 100644
--- a/3party/boost/boost/log/detail/light_rw_mutex.hpp
+++ b/3party/boost/boost/log/detail/light_rw_mutex.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 24.03.2009
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_LIGHT_RW_MUTEX_HPP_INCLUDED_
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -105,8 +105,8 @@ public:
}
// Noncopyable
- BOOST_LOG_DELETED_FUNCTION(light_rw_mutex(light_rw_mutex const&))
- BOOST_LOG_DELETED_FUNCTION(light_rw_mutex& operator= (light_rw_mutex const&))
+ BOOST_DELETED_FUNCTION(light_rw_mutex(light_rw_mutex const&))
+ BOOST_DELETED_FUNCTION(light_rw_mutex& operator= (light_rw_mutex const&))
};
} // namespace aux
@@ -157,8 +157,8 @@ public:
}
// Noncopyable
- BOOST_LOG_DELETED_FUNCTION(light_rw_mutex(light_rw_mutex const&))
- BOOST_LOG_DELETED_FUNCTION(light_rw_mutex& operator= (light_rw_mutex const&))
+ BOOST_DELETED_FUNCTION(light_rw_mutex(light_rw_mutex const&))
+ BOOST_DELETED_FUNCTION(light_rw_mutex& operator= (light_rw_mutex const&))
};
} // namespace aux
@@ -189,8 +189,8 @@ public:
BOOST_LOG_API void unlock();
// Noncopyable
- BOOST_LOG_DELETED_FUNCTION(light_rw_mutex(light_rw_mutex const&))
- BOOST_LOG_DELETED_FUNCTION(light_rw_mutex& operator= (light_rw_mutex const&))
+ BOOST_DELETED_FUNCTION(light_rw_mutex(light_rw_mutex const&))
+ BOOST_DELETED_FUNCTION(light_rw_mutex& operator= (light_rw_mutex const&))
};
} // namespace aux
diff --git a/3party/boost/boost/log/detail/locking_ptr.hpp b/3party/boost/boost/log/detail/locking_ptr.hpp
index 672189e7da..913780e98e 100644
--- a/3party/boost/boost/log/detail/locking_ptr.hpp
+++ b/3party/boost/boost/log/detail/locking_ptr.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,18 +10,21 @@
* \date 15.07.2009
*
* This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_LOCKING_PTR_HPP_INCLUDED_
#define BOOST_LOG_DETAIL_LOCKING_PTR_HPP_INCLUDED_
-#include <boost/shared_ptr.hpp>
+#include <cstddef>
+#include <boost/move/core.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/thread/lock_options.hpp>
#include <boost/log/detail/config.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -31,120 +34,108 @@ BOOST_LOG_OPEN_NAMESPACE
namespace aux {
- //! Shared lock object to support locking_ptr
- struct BOOST_LOG_NO_VTABLE locking_ptr_counter_base
+//! A pointer type that locks the backend until it's destroyed
+template< typename T, typename LockableT >
+class locking_ptr
+{
+ typedef locking_ptr this_type;
+ BOOST_COPYABLE_AND_MOVABLE_ALT(this_type)
+
+public:
+ //! Pointed type
+ typedef T element_type;
+
+private:
+ //! Lockable type
+ typedef LockableT lockable_type;
+
+private:
+ //! The pointer to the backend
+ shared_ptr< element_type > m_pElement;
+ //! Reference to the shared lock control object
+ lockable_type* m_pLock;
+
+public:
+ //! Default constructor
+ locking_ptr() BOOST_NOEXCEPT : m_pLock(NULL)
{
- unsigned int m_RefCounter;
-
- locking_ptr_counter_base() : m_RefCounter(0)
- {
- }
-
- virtual ~locking_ptr_counter_base() {}
- virtual void lock() = 0;
- virtual bool try_lock() = 0;
- virtual void unlock() = 0;
-
- private:
- locking_ptr_counter_base(locking_ptr_counter_base const&);
- locking_ptr_counter_base& operator= (locking_ptr_counter_base const&);
- };
-
- struct try_lock_tag {};
- const try_lock_tag try_lock = {};
-
- //! A pointer type that locks the backend until it's destroyed
- template< typename T >
- class locking_ptr
+ }
+ //! Constructor
+ locking_ptr(shared_ptr< element_type > const& p, lockable_type& l) : m_pElement(p), m_pLock(&l)
{
- public:
- //! Pointed type
- typedef T element_type;
-
- private:
- //! The pointer to the backend
- shared_ptr< element_type > m_pElement;
- //! Reference to the shared lock control object
- locking_ptr_counter_base* m_pLock;
-
- public:
- //! Constructor
- locking_ptr(shared_ptr< element_type > const& p, locking_ptr_counter_base& l)
- : m_pElement(p), m_pLock(&l)
- {
- if (m_pLock->m_RefCounter == 0)
- m_pLock->lock();
- ++m_pLock->m_RefCounter;
- }
- //! Constructor
- locking_ptr(shared_ptr< element_type > const& p, locking_ptr_counter_base& l, try_lock_tag const&)
- : m_pElement(p), m_pLock(&l)
- {
- if (m_pLock->m_RefCounter > 0 || m_pLock->try_lock())
- {
- ++m_pLock->m_RefCounter;
- }
- else
- {
- m_pElement.reset();
- m_pLock = NULL;
- }
- }
- //! Copy constructor
- locking_ptr(locking_ptr const& that) : m_pElement(that.m_pElement), m_pLock(that.m_pLock)
- {
- if (m_pLock)
- ++m_pLock->m_RefCounter;
- }
- //! Destructor
- ~locking_ptr()
+ m_pLock->lock();
+ }
+ //! Constructor
+ locking_ptr(shared_ptr< element_type > const& p, lockable_type& l, try_to_lock_t const&) : m_pElement(p), m_pLock(&l)
+ {
+ if (!m_pLock->try_lock())
{
- if (m_pLock && --m_pLock->m_RefCounter == 0)
- m_pLock->unlock();
+ m_pElement.reset();
+ m_pLock = NULL;
}
+ }
+ //! Copy constructor
+ locking_ptr(locking_ptr const& that) : m_pElement(that.m_pElement), m_pLock(that.m_pLock)
+ {
+ if (m_pLock)
+ m_pLock->lock();
+ }
+ //! Move constructor
+ locking_ptr(BOOST_RV_REF(this_type) that) BOOST_NOEXCEPT : m_pLock(that.m_pLock)
+ {
+ m_pElement.swap(that.m_pElement);
+ that.m_pLock = NULL;
+ }
- //! Assignment
- locking_ptr& operator= (locking_ptr that)
- {
- this->swap(that);
- return *this;
- }
+ //! Destructor
+ ~locking_ptr()
+ {
+ if (m_pLock)
+ m_pLock->unlock();
+ }
- //! Indirection
- element_type* operator-> () const { return m_pElement.get(); }
- //! Dereferencing
- element_type& operator* () const { return *m_pElement; }
+ //! Assignment
+ locking_ptr& operator= (locking_ptr that) BOOST_NOEXCEPT
+ {
+ this->swap(that);
+ return *this;
+ }
- //! Accessor to the raw pointer
- element_type* get() const { return m_pElement.get(); }
+ //! Indirection
+ element_type* operator-> () const BOOST_NOEXCEPT { return m_pElement.get(); }
+ //! Dereferencing
+ element_type& operator* () const BOOST_NOEXCEPT { return *m_pElement; }
- //! Checks for null pointer
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
- //! Checks for null pointer
- bool operator! () const { return !m_pElement; }
+ //! Accessor to the raw pointer
+ element_type* get() const BOOST_NOEXCEPT { return m_pElement.get(); }
- //! Swaps two pointers
- void swap(locking_ptr& that)
- {
- m_pElement.swap(that.m_pElement);
- register locking_ptr_counter_base* p = m_pLock;
- m_pLock = that.m_pLock;
- that.m_pLock = p;
- }
- };
+ //! Checks for null pointer
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
+ //! Checks for null pointer
+ bool operator! () const BOOST_NOEXCEPT { return !m_pElement; }
- //! Free raw pointer getter to assist generic programming
- template< typename T >
- inline T* get_pointer(locking_ptr< T > const& p)
- {
- return p.get();
- }
- //! Free swap operation
- template< typename T >
- inline void swap(locking_ptr< T >& left, locking_ptr< T >& right)
+ //! Swaps two pointers
+ void swap(locking_ptr& that) BOOST_NOEXCEPT
{
- left.swap(right);
+ m_pElement.swap(that.m_pElement);
+ lockable_type* p = m_pLock;
+ m_pLock = that.m_pLock;
+ that.m_pLock = p;
}
+};
+
+//! Free raw pointer getter to assist generic programming
+template< typename T, typename LockableT >
+inline T* get_pointer(locking_ptr< T, LockableT > const& p) BOOST_NOEXCEPT
+{
+ return p.get();
+}
+//! Free swap operation
+template< typename T, typename LockableT >
+inline void swap(locking_ptr< T, LockableT >& left, locking_ptr< T, LockableT >& right) BOOST_NOEXCEPT
+{
+ left.swap(right);
+}
} // namespace aux
diff --git a/3party/boost/boost/log/detail/locks.hpp b/3party/boost/boost/log/detail/locks.hpp
index 5d46e650d4..72b8945b26 100644
--- a/3party/boost/boost/log/detail/locks.hpp
+++ b/3party/boost/boost/log/detail/locks.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 30.05.2010
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_LOCKS_HPP_INCLUDED_
@@ -19,7 +19,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/named_scope_fmt_pp.hpp b/3party/boost/boost/log/detail/named_scope_fmt_pp.hpp
index 00d743ad31..d9f0027f86 100644
--- a/3party/boost/boost/log/detail/named_scope_fmt_pp.hpp
+++ b/3party/boost/boost/log/detail/named_scope_fmt_pp.hpp
@@ -1,12 +1,12 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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< BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename ArgT) >
-BOOST_LOG_FORCEINLINE format_named_scope_actor<
+BOOST_FORCEINLINE format_named_scope_actor<
fallback_to_none,
typename boost::log::aux::deduce_char_type<
typename parameter::binding<
@@ -28,7 +28,7 @@ BOOST_LOG_FORCEINLINE format_named_scope_actor<
}
template< typename DescriptorT, template< typename > class ActorT, BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename ArgT) >
-BOOST_LOG_FORCEINLINE format_named_scope_actor<
+BOOST_FORCEINLINE format_named_scope_actor<
fallback_to_none,
typename boost::log::aux::deduce_char_type<
typename parameter::binding<
@@ -55,7 +55,7 @@ format_named_scope(attribute_keyword< DescriptorT, ActorT > const& keyword, BOOS
}
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename ArgT) >
-BOOST_LOG_FORCEINLINE format_named_scope_actor<
+BOOST_FORCEINLINE format_named_scope_actor<
FallbackPolicyT,
typename boost::log::aux::deduce_char_type<
typename parameter::binding<
diff --git a/3party/boost/boost/log/detail/native_typeof.hpp b/3party/boost/boost/log/detail/native_typeof.hpp
index 98c8bf9d4d..276b2942e8 100644
--- a/3party/boost/boost/log/detail/native_typeof.hpp
+++ b/3party/boost/boost/log/detail/native_typeof.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 08.03.2009
*
* This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_NATIVE_TYPEOF_HPP_INCLUDED_
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/parameter_tools.hpp b/3party/boost/boost/log/detail/parameter_tools.hpp
index a8df786e59..692a3377d3 100644
--- a/3party/boost/boost/log/detail/parameter_tools.hpp
+++ b/3party/boost/boost/log/detail/parameter_tools.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 28.06.2009
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_PARAMETER_TOOLS_HPP_INCLUDED_
@@ -26,7 +26,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/pp_identity.hpp b/3party/boost/boost/log/detail/pp_identity.hpp
index ed73c97854..8daaf951b8 100644
--- a/3party/boost/boost/log/detail/pp_identity.hpp
+++ b/3party/boost/boost/log/detail/pp_identity.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 12.02.2011
*
* This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_PP_IDENTITY_HPP_INCLUDED_
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/process_id.hpp b/3party/boost/boost/log/detail/process_id.hpp
index 634b4e468a..3532506c2a 100644
--- a/3party/boost/boost/log/detail/process_id.hpp
+++ b/3party/boost/boost/log/detail/process_id.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 12.09.2009
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_PROCESS_ID_HPP_INCLUDED_
@@ -21,7 +21,7 @@
#include <boost/log/detail/id.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/setup_config.hpp b/3party/boost/boost/log/detail/setup_config.hpp
index 5cb2b5c412..11239592af 100644
--- a/3party/boost/boost/log/detail/setup_config.hpp
+++ b/3party/boost/boost/log/detail/setup_config.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 14.09.2009
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html. In this file
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html. In this file
* internal configuration macros are defined.
*/
@@ -19,7 +19,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/singleton.hpp b/3party/boost/boost/log/detail/singleton.hpp
index a5e9dde1b0..ac1ac1afe0 100644
--- a/3party/boost/boost/log/detail/singleton.hpp
+++ b/3party/boost/boost/log/detail/singleton.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 20.04.2008
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_SINGLETON_HPP_INCLUDED_
@@ -20,7 +20,7 @@
#include <boost/log/utility/once_block.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -35,7 +35,7 @@ template< typename DerivedT, typename StorageT = DerivedT >
class lazy_singleton
{
public:
- BOOST_LOG_DEFAULTED_FUNCTION(lazy_singleton(), {})
+ BOOST_DEFAULTED_FUNCTION(lazy_singleton(), {})
//! Returns the singleton instance
static StorageT& get()
@@ -53,8 +53,8 @@ public:
get_instance();
}
- BOOST_LOG_DELETED_FUNCTION(lazy_singleton(lazy_singleton const&))
- BOOST_LOG_DELETED_FUNCTION(lazy_singleton& operator= (lazy_singleton const&))
+ BOOST_DELETED_FUNCTION(lazy_singleton(lazy_singleton const&))
+ BOOST_DELETED_FUNCTION(lazy_singleton& operator= (lazy_singleton const&))
protected:
//! Returns the singleton instance (not thread-safe)
diff --git a/3party/boost/boost/log/detail/sink_init_helpers.hpp b/3party/boost/boost/log/detail/sink_init_helpers.hpp
index 1724f0b4b7..060aab7fc8 100644
--- a/3party/boost/boost/log/detail/sink_init_helpers.hpp
+++ b/3party/boost/boost/log/detail/sink_init_helpers.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 14.03.2009
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_SINK_INIT_HELPERS_HPP_INCLUDED_
@@ -32,7 +32,7 @@
#include <boost/log/keywords/format.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/snprintf.hpp b/3party/boost/boost/log/detail/snprintf.hpp
index 759ff25cc8..29cc7d0e4c 100644
--- a/3party/boost/boost/log/detail/snprintf.hpp
+++ b/3party/boost/boost/log/detail/snprintf.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,21 +10,22 @@
* \date 20.02.2009
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_SNPRINTF_HPP_INCLUDED_
#define BOOST_LOG_DETAIL_SNPRINTF_HPP_INCLUDED_
-#include <cstdio>
+#include <stdio.h>
+#include <cstddef>
#include <cstdarg>
#include <boost/log/detail/config.hpp>
#ifdef BOOST_LOG_USE_WCHAR_T
-#include <cwchar>
+#include <wchar.h>
#endif // BOOST_LOG_USE_WCHAR_T
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -67,7 +68,7 @@ inline int vswprintf(wchar_t* buf, std::size_t size, const wchar_t* format, std:
// MSVC prior to 2005 had a non-conforming extension _vsnprintf, that sometimes did not put a terminating '\0'
inline int vsnprintf(char* buf, std::size_t size, const char* format, std::va_list args)
{
- register int n = _vsnprintf(buf, size - 1, format, args);
+ int n = _vsnprintf(buf, size - 1, format, args);
buf[size - 1] = '\0';
return n;
}
@@ -75,7 +76,7 @@ inline int vsnprintf(char* buf, std::size_t size, const char* format, std::va_li
# ifdef BOOST_LOG_USE_WCHAR_T
inline int vswprintf(wchar_t* buf, std::size_t size, const wchar_t* format, std::va_list args)
{
- register int n = _vsnwprintf(buf, size - 1, format, args);
+ int n = _vsnwprintf(buf, size - 1, format, args);
buf[size - 1] = L'\0';
return n;
}
@@ -87,7 +88,7 @@ inline int snprintf(char* buf, std::size_t size, const char* format, ...)
{
std::va_list args;
va_start(args, format);
- register int n = vsnprintf(buf, size, format, args);
+ int n = vsnprintf(buf, size, format, args);
va_end(args);
return n;
}
@@ -97,7 +98,7 @@ inline int swprintf(wchar_t* buf, std::size_t size, const wchar_t* format, ...)
{
std::va_list args;
va_start(args, format);
- register int n = vswprintf(buf, size, format, args);
+ int n = vswprintf(buf, size, format, args);
va_end(args);
return n;
}
diff --git a/3party/boost/boost/log/detail/spin_mutex.hpp b/3party/boost/boost/log/detail/spin_mutex.hpp
index 79722d10b2..727d6d1ade 100644
--- a/3party/boost/boost/log/detail/spin_mutex.hpp
+++ b/3party/boost/boost/log/detail/spin_mutex.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 01.08.2010
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_SPIN_MUTEX_HPP_INCLUDED_
@@ -18,12 +18,15 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
#ifndef BOOST_LOG_NO_THREADS
+#include <boost/throw_exception.hpp>
+#include <boost/thread/exceptions.hpp>
+
#if defined(BOOST_THREAD_POSIX) // This one can be defined by users, so it should go first
#define BOOST_LOG_SPIN_MUTEX_USE_PTHREAD
#elif defined(BOOST_WINDOWS)
@@ -75,8 +78,8 @@ extern "C" void _mm_pause(void);
# define BOOST_LOG_PAUSE_OP _mm_pause()
# endif
# if defined(__INTEL_COMPILER)
-# define BOOST_LOG_COMPILER_BARRIER __asm { nop }
-# elif _MSC_VER >= 1310
+# define BOOST_LOG_COMPILER_BARRIER __memory_barrier()
+# else
extern "C" void _ReadWriteBarrier(void);
#pragma intrinsic(_ReadWriteBarrier)
# define BOOST_LOG_COMPILER_BARRIER _ReadWriteBarrier()
@@ -117,14 +120,14 @@ public:
void lock()
{
#if defined(BOOST_LOG_PAUSE_OP)
- register unsigned int pause_count = initial_pause;
+ unsigned int pause_count = initial_pause;
#endif
while (!try_lock())
{
#if defined(BOOST_LOG_PAUSE_OP)
if (pause_count < max_pause)
{
- for (register unsigned int i = 0; i < pause_count; ++i)
+ for (unsigned int i = 0; i < pause_count; ++i)
{
BOOST_LOG_PAUSE_OP;
}
@@ -154,8 +157,8 @@ public:
}
// Non-copyable
- BOOST_LOG_DELETED_FUNCTION(spin_mutex(spin_mutex const&))
- BOOST_LOG_DELETED_FUNCTION(spin_mutex& operator= (spin_mutex const&))
+ BOOST_DELETED_FUNCTION(spin_mutex(spin_mutex const&))
+ BOOST_DELETED_FUNCTION(spin_mutex& operator= (spin_mutex const&))
};
#undef BOOST_LOG_PAUSE_OP
@@ -192,28 +195,52 @@ private:
public:
spin_mutex()
{
- BOOST_VERIFY(pthread_spin_init(&m_State, PTHREAD_PROCESS_PRIVATE) == 0);
+ const int err = pthread_spin_init(&m_State, PTHREAD_PROCESS_PRIVATE);
+ if (err != 0)
+ throw_exception< thread_resource_error >(err, "failed to initialize a spin mutex", "spin_mutex::spin_mutex()", __FILE__, __LINE__);
}
+
~spin_mutex()
{
- pthread_spin_destroy(&m_State);
+ BOOST_VERIFY(pthread_spin_destroy(&m_State) == 0);
}
+
bool try_lock()
{
- return (pthread_spin_trylock(&m_State) == 0);
+ const int err = pthread_spin_trylock(&m_State);
+ if (err == 0)
+ return true;
+ if (err != EBUSY)
+ throw_exception< lock_error >(err, "failed to lock a spin mutex", "spin_mutex::try_lock()", __FILE__, __LINE__);
+ return false;
}
+
void lock()
{
- BOOST_VERIFY(pthread_spin_lock(&m_State) == 0);
+ const int err = pthread_spin_lock(&m_State);
+ if (err != 0)
+ throw_exception< lock_error >(err, "failed to lock a spin mutex", "spin_mutex::lock()", __FILE__, __LINE__);
}
+
void unlock()
{
- pthread_spin_unlock(&m_State);
+ BOOST_VERIFY(pthread_spin_unlock(&m_State) == 0);
}
// Non-copyable
- BOOST_LOG_DELETED_FUNCTION(spin_mutex(spin_mutex const&))
- BOOST_LOG_DELETED_FUNCTION(spin_mutex& operator= (spin_mutex const&))
+ BOOST_DELETED_FUNCTION(spin_mutex(spin_mutex const&))
+ BOOST_DELETED_FUNCTION(spin_mutex& operator= (spin_mutex const&))
+
+private:
+ template< typename ExceptionT >
+ static BOOST_NOINLINE BOOST_LOG_NORETURN void throw_exception(int err, const char* descr, const char* func, const char* file, int line)
+ {
+#if !defined(BOOST_EXCEPTION_DISABLE)
+ boost::exception_detail::throw_exception_(ExceptionT(err, descr), func, file, line);
+#else
+ boost::throw_exception(ExceptionT(err, descr));
+#endif
+ }
};
#else // defined(_POSIX_SPIN_LOCKS)
@@ -227,28 +254,52 @@ private:
public:
spin_mutex()
{
- BOOST_VERIFY(pthread_mutex_init(&m_State, NULL) == 0);
+ const int err = pthread_mutex_init(&m_State, NULL);
+ if (err != 0)
+ throw_exception< thread_resource_error >(err, "failed to initialize a spin mutex", "spin_mutex::spin_mutex()", __FILE__, __LINE__);
}
+
~spin_mutex()
{
- pthread_mutex_destroy(&m_State);
+ BOOST_VERIFY(pthread_mutex_destroy(&m_State) == 0);
}
+
bool try_lock()
{
- return (pthread_mutex_trylock(&m_State) == 0);
+ const int err = pthread_mutex_trylock(&m_State);
+ if (err == 0)
+ return true;
+ if (err != EBUSY)
+ throw_exception< lock_error >(err, "failed to lock a spin mutex", "spin_mutex::try_lock()", __FILE__, __LINE__);
+ return false;
}
+
void lock()
{
- BOOST_VERIFY(pthread_mutex_lock(&m_State) == 0);
+ const int err = pthread_mutex_lock(&m_State);
+ if (err != 0)
+ throw_exception< lock_error >(err, "failed to lock a spin mutex", "spin_mutex::lock()", __FILE__, __LINE__);
}
+
void unlock()
{
- pthread_mutex_unlock(&m_State);
+ BOOST_VERIFY(pthread_mutex_unlock(&m_State) == 0);
}
// Non-copyable
- BOOST_LOG_DELETED_FUNCTION(spin_mutex(spin_mutex const&))
- BOOST_LOG_DELETED_FUNCTION(spin_mutex& operator= (spin_mutex const&))
+ BOOST_DELETED_FUNCTION(spin_mutex(spin_mutex const&))
+ BOOST_DELETED_FUNCTION(spin_mutex& operator= (spin_mutex const&))
+
+private:
+ template< typename ExceptionT >
+ static BOOST_NOINLINE BOOST_LOG_NORETURN void throw_exception(int err, const char* descr, const char* func, const char* file, int line)
+ {
+#if !defined(BOOST_EXCEPTION_DISABLE)
+ boost::exception_detail::throw_exception_(ExceptionT(err, descr), func, file, line);
+#else
+ boost::throw_exception(ExceptionT(err, descr));
+#endif
+ }
};
#endif // defined(_POSIX_SPIN_LOCKS)
diff --git a/3party/boost/boost/log/detail/tagged_integer.hpp b/3party/boost/boost/log/detail/tagged_integer.hpp
index 9cecc437f6..5aef5bbfcc 100644
--- a/3party/boost/boost/log/detail/tagged_integer.hpp
+++ b/3party/boost/boost/log/detail/tagged_integer.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 11.01.2008
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_TAGGED_INTEGER_HPP_INCLUDED_
@@ -19,7 +19,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/thread_id.hpp b/3party/boost/boost/log/detail/thread_id.hpp
index c92230853b..3b592c2c25 100644
--- a/3party/boost/boost/log/detail/thread_id.hpp
+++ b/3party/boost/boost/log/detail/thread_id.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 08.01.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_THREAD_ID_HPP_INCLUDED_
@@ -22,7 +22,7 @@
#include <boost/log/detail/id.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -48,7 +48,7 @@ namespace this_thread {
//! The function returns current thread identifier
BOOST_LOG_API thread::id const& get_id();
-} // namespace this_process
+} // namespace this_thread
template< typename CharT, typename TraitsT >
BOOST_LOG_API std::basic_ostream< CharT, TraitsT >&
diff --git a/3party/boost/boost/log/detail/thread_specific.hpp b/3party/boost/boost/log/detail/thread_specific.hpp
index 8164d25f46..72d2a3b22e 100644
--- a/3party/boost/boost/log/detail/thread_specific.hpp
+++ b/3party/boost/boost/log/detail/thread_specific.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 01.03.2008
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_THREAD_SPECIFIC_HPP_INCLUDED_
@@ -20,7 +20,7 @@
#include <boost/type_traits/is_pod.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -53,8 +53,8 @@ protected:
BOOST_LOG_API void set_content(void* value) const;
// Copying prohibited
- BOOST_LOG_DELETED_FUNCTION(thread_specific_base(thread_specific_base const&))
- BOOST_LOG_DELETED_FUNCTION(thread_specific_base& operator= (thread_specific_base const&))
+ BOOST_DELETED_FUNCTION(thread_specific_base(thread_specific_base const&))
+ BOOST_DELETED_FUNCTION(thread_specific_base& operator= (thread_specific_base const&))
};
//! A TLS wrapper for small POD types with least possible overhead
@@ -73,7 +73,7 @@ class thread_specific :
public:
//! Default constructor
- BOOST_LOG_DEFAULTED_FUNCTION(thread_specific(), {})
+ BOOST_DEFAULTED_FUNCTION(thread_specific(), {})
//! Initializing constructor
thread_specific(T const& value)
{
diff --git a/3party/boost/boost/log/detail/threadsafe_queue.hpp b/3party/boost/boost/log/detail/threadsafe_queue.hpp
index 025eaf95ed..a1e78249f0 100644
--- a/3party/boost/boost/log/detail/threadsafe_queue.hpp
+++ b/3party/boost/boost/log/detail/threadsafe_queue.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 05.11.2010
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_THREADSAFE_QUEUE_HPP_INCLUDED_
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -246,7 +246,7 @@ public:
threadsafe_queue_impl::node_base *dealloc, *destr;
if (m_pImpl->try_pop(dealloc, destr))
{
- register node* p = static_cast< node* >(destr);
+ node* p = static_cast< node* >(destr);
auto_deallocate guard(static_cast< base_type* >(this), static_cast< node* >(dealloc), p);
value = boost::move(p->value());
return true;
@@ -255,10 +255,9 @@ public:
return false;
}
-private:
// Copying and assignment is prohibited
- threadsafe_queue(threadsafe_queue const&);
- threadsafe_queue& operator= (threadsafe_queue const&);
+ BOOST_DELETED_FUNCTION(threadsafe_queue(threadsafe_queue const&))
+ BOOST_DELETED_FUNCTION(threadsafe_queue& operator= (threadsafe_queue const&))
private:
//! Pointer to the implementation
diff --git a/3party/boost/boost/log/detail/timestamp.hpp b/3party/boost/boost/log/detail/timestamp.hpp
index 1341d7d969..719061fb01 100644
--- a/3party/boost/boost/log/detail/timestamp.hpp
+++ b/3party/boost/boost/log/detail/timestamp.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 31.07.2011
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_TIMESTAMP_HPP_INCLUDED_
@@ -20,7 +20,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/trivial_keyword.hpp b/3party/boost/boost/log/detail/trivial_keyword.hpp
index 5b38746578..d0e4f60713 100644
--- a/3party/boost/boost/log/detail/trivial_keyword.hpp
+++ b/3party/boost/boost/log/detail/trivial_keyword.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 02.12.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_TRIVIAL_KEYWORD_HPP_INCLUDED_
@@ -19,7 +19,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/unary_function_terminal.hpp b/3party/boost/boost/log/detail/unary_function_terminal.hpp
index 2bb6a1fc83..f9a3412acf 100644
--- a/3party/boost/boost/log/detail/unary_function_terminal.hpp
+++ b/3party/boost/boost/log/detail/unary_function_terminal.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,10 +23,11 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/log/detail/config.hpp>
+#include <boost/log/detail/copy_cv.hpp>
#include <boost/log/detail/custom_terminal_spec.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -62,26 +63,16 @@ public:
template< typename >
struct result;
- template< typename ContextT >
- struct result< this_type(ContextT) >
- {
- typedef typename remove_cv<
- typename remove_reference< typename phoenix::result_of::env< ContextT >::type >::type
- >::type env_type;
- typedef typename env_type::args_type args_type;
-
- typedef typename boost::result_of< function_type(typename fusion::result_of::at_c< args_type, 0 >::type) >::type type;
- };
-
- template< typename ContextT >
- struct result< const this_type(ContextT) >
+ template< typename ThisT, typename ContextT >
+ struct result< ThisT(ContextT) >
{
typedef typename remove_cv<
typename remove_reference< typename phoenix::result_of::env< ContextT >::type >::type
>::type env_type;
typedef typename env_type::args_type args_type;
+ typedef typename boost::log::aux::copy_cv< ThisT, function_type >::type cv_function_type;
- typedef typename boost::result_of< const function_type(typename fusion::result_of::at_c< args_type, 0 >::type) >::type type;
+ typedef typename boost::result_of< cv_function_type(typename fusion::result_of::at_c< args_type, 0 >::type) >::type type;
};
private:
@@ -90,7 +81,7 @@ private:
public:
//! Default constructor
- BOOST_LOG_DEFAULTED_FUNCTION(unary_function_terminal(), {})
+ BOOST_DEFAULTED_FUNCTION(unary_function_terminal(), {})
//! Copy constructor
unary_function_terminal(unary_function_terminal const& that) : m_fun(that.m_fun) {}
//! Initializing constructor
diff --git a/3party/boost/boost/log/detail/unhandled_exception_count.hpp b/3party/boost/boost/log/detail/unhandled_exception_count.hpp
index 90245abdd1..17866c3b36 100644
--- a/3party/boost/boost/log/detail/unhandled_exception_count.hpp
+++ b/3party/boost/boost/log/detail/unhandled_exception_count.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 05.11.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
*/
#ifndef BOOST_LOG_DETAIL_UNHANDLED_EXCEPTION_COUNT_HPP_INCLUDED_
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/detail/value_ref_visitation.hpp b/3party/boost/boost/log/detail/value_ref_visitation.hpp
index c7744a2a84..795069d150 100644
--- a/3party/boost/boost/log/detail/value_ref_visitation.hpp
+++ b/3party/boost/boost/log/detail/value_ref_visitation.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 28.07.2012
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html. In this file
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html. In this file
* internal configuration macros are defined.
*/
@@ -44,7 +44,7 @@ struct apply_visitor_dispatch
{
typedef typename VisitorT::result_type result_type;
- static BOOST_LOG_FORCEINLINE result_type call(const void* p, unsigned int type_index, VisitorT& visitor)
+ static BOOST_FORCEINLINE result_type call(const void* p, unsigned int type_index, VisitorT& visitor)
{
typedef typename mpl::begin< SequenceT >::type begin_type;
typedef typename mpl::advance_c< begin_type, SizeV / 2u >::type middle_type;
@@ -91,7 +91,7 @@ struct apply_visitor_dispatch< SequenceT, VisitorT, BOOST_LOG_AUX_SWITCH_SIZE >
{
typedef typename VisitorT::result_type result_type;
- static BOOST_LOG_FORCEINLINE result_type call(const void* p, unsigned int type_index, VisitorT& visitor)
+ static BOOST_FORCEINLINE result_type call(const void* p, unsigned int type_index, VisitorT& visitor)
{
switch (type_index)
{
diff --git a/3party/boost/boost/log/detail/visible_type.hpp b/3party/boost/boost/log/detail/visible_type.hpp
index 0e03e19cd6..2086278d42 100644
--- a/3party/boost/boost/log/detail/visible_type.hpp
+++ b/3party/boost/boost/log/detail/visible_type.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -10,7 +10,7 @@
* \date 08.03.2007
*
* \brief This header is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html. In this file
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html. In this file
* internal configuration macros are defined.
*/
@@ -20,7 +20,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -32,7 +32,7 @@ namespace aux {
//! The wrapper type whose type_info is always visible
template< typename T >
-struct BOOST_LOG_VISIBLE visible_type
+struct BOOST_SYMBOL_VISIBLE visible_type
{
typedef T wrapped_type;
};
diff --git a/3party/boost/boost/log/exceptions.hpp b/3party/boost/boost/log/exceptions.hpp
index 71c51d3601..8171d0a3f0 100644
--- a/3party/boost/boost/log/exceptions.hpp
+++ b/3party/boost/boost/log/exceptions.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/type_info_wrapper.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -45,7 +45,7 @@ class exception;
# endif
#else
-class BOOST_LOG_VISIBLE exception;
+class BOOST_SYMBOL_VISIBLE exception;
#endif
diff --git a/3party/boost/boost/log/expressions.hpp b/3party/boost/boost/log/expressions.hpp
index ae1c0f6a23..990981a233 100644
--- a/3party/boost/boost/log/expressions.hpp
+++ b/3party/boost/boost/log/expressions.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
// Boost.Phoenix operators are likely to be used with Boost.Log expression nodes anyway
#include <boost/phoenix/operator.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/attr.hpp b/3party/boost/boost/log/expressions/attr.hpp
index 2483e90e81..31deefc0a9 100644
--- a/3party/boost/boost/log/expressions/attr.hpp
+++ b/3party/boost/boost/log/expressions/attr.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,6 +25,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/log/detail/config.hpp>
+#include <boost/log/detail/copy_cv.hpp>
#include <boost/log/detail/custom_terminal_spec.hpp>
#include <boost/log/attributes/attribute_name.hpp>
#include <boost/log/attributes/value_extraction.hpp>
@@ -32,7 +33,7 @@
#include <boost/log/expressions/attr_fwd.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -69,26 +70,16 @@ public:
template< typename >
struct result;
- template< typename ContextT >
- struct result< this_type(ContextT) >
- {
- typedef typename remove_cv<
- typename remove_reference< typename phoenix::result_of::env< ContextT >::type >::type
- >::type env_type;
- typedef typename env_type::args_type args_type;
-
- typedef typename boost::result_of< value_extractor_type(attribute_name const&, typename fusion::result_of::at_c< args_type, 0 >::type) >::type type;
- };
-
- template< typename ContextT >
- struct result< const this_type(ContextT) >
+ template< typename ThisT, typename ContextT >
+ struct result< ThisT(ContextT) >
{
typedef typename remove_cv<
typename remove_reference< typename phoenix::result_of::env< ContextT >::type >::type
>::type env_type;
typedef typename env_type::args_type args_type;
+ typedef typename boost::log::aux::copy_cv< ThisT, value_extractor_type >::type cv_value_extractor_type;
- typedef typename boost::result_of< const value_extractor_type(attribute_name const&, typename fusion::result_of::at_c< args_type, 0 >::type) >::type type;
+ typedef typename boost::result_of< cv_value_extractor_type(attribute_name const&, typename fusion::result_of::at_c< args_type, 0 >::type) >::type type;
};
private:
@@ -149,7 +140,7 @@ public:
return m_value_extractor(m_name, fusion::at_c< 0 >(phoenix::env(ctx).args()));
}
- BOOST_LOG_DELETED_FUNCTION(attribute_terminal())
+ BOOST_DELETED_FUNCTION(attribute_terminal())
};
/*!
@@ -232,7 +223,7 @@ public:
* with the specified name and type.
*/
template< typename AttributeValueT >
-BOOST_LOG_FORCEINLINE attribute_actor< AttributeValueT > attr(attribute_name const& name)
+BOOST_FORCEINLINE attribute_actor< AttributeValueT > attr(attribute_name const& name)
{
typedef attribute_actor< AttributeValueT > result_type;
typedef typename result_type::terminal_type result_terminal;
@@ -245,7 +236,7 @@ BOOST_LOG_FORCEINLINE attribute_actor< AttributeValueT > attr(attribute_name con
* with the specified name and type.
*/
template< typename AttributeValueT, typename TagT >
-BOOST_LOG_FORCEINLINE attribute_actor< AttributeValueT, fallback_to_none, TagT > attr(attribute_name const& name)
+BOOST_FORCEINLINE attribute_actor< AttributeValueT, fallback_to_none, TagT > attr(attribute_name const& name)
{
typedef attribute_actor< AttributeValueT, fallback_to_none, TagT > result_type;
typedef typename result_type::terminal_type result_terminal;
diff --git a/3party/boost/boost/log/expressions/attr_fwd.hpp b/3party/boost/boost/log/expressions/attr_fwd.hpp
index a858bc6efe..a8e7b92a81 100644
--- a/3party/boost/boost/log/expressions/attr_fwd.hpp
+++ b/3party/boost/boost/log/expressions/attr_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/attributes/fallback_policy_fwd.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/filter.hpp b/3party/boost/boost/log/expressions/filter.hpp
index 95a0a9f19f..af985634ec 100644
--- a/3party/boost/boost/log/expressions/filter.hpp
+++ b/3party/boost/boost/log/expressions/filter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/light_function.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -71,7 +71,7 @@ public:
{
}
/*!
- * Move constructor
+ * Move constructor. The moved-from filter is left in an unspecified state.
*/
filter(BOOST_RV_REF(filter) that) BOOST_NOEXCEPT : m_Filter(boost::move(that.m_Filter))
{
@@ -92,7 +92,7 @@ public:
}
/*!
- * Move assignment.
+ * Move assignment. The moved-from filter is left in an unspecified state.
*/
filter& operator= (BOOST_RV_REF(filter) that) BOOST_NOEXCEPT
{
diff --git a/3party/boost/boost/log/expressions/formatter.hpp b/3party/boost/boost/log/expressions/formatter.hpp
index ebe5f68b48..31f526b9d5 100644
--- a/3party/boost/boost/log/expressions/formatter.hpp
+++ b/3party/boost/boost/log/expressions/formatter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,6 +15,7 @@
#ifndef BOOST_LOG_EXPRESSIONS_FORMATTER_HPP_INCLUDED_
#define BOOST_LOG_EXPRESSIONS_FORMATTER_HPP_INCLUDED_
+#include <boost/ref.hpp>
#include <boost/move/core.hpp>
#include <boost/move/utility.hpp>
#include <boost/utility/enable_if.hpp>
@@ -28,7 +29,7 @@
#include <boost/log/expressions/message.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -36,6 +37,62 @@ namespace boost {
BOOST_LOG_OPEN_NAMESPACE
+namespace expressions {
+
+namespace aux {
+
+// This reference class is a workaround for a Boost.Phoenix bug: https://svn.boost.org/trac/boost/ticket/9363
+// It is needed to pass output streams by non-const reference to function objects wrapped in phoenix::bind and phoenix::function.
+// It's an implementation detail and will be removed when Boost.Phoenix is fixed.
+template< typename StreamT >
+class stream_ref :
+ public reference_wrapper< StreamT >
+{
+public:
+ BOOST_FORCEINLINE explicit stream_ref(StreamT& strm) : reference_wrapper< StreamT >(strm)
+ {
+ }
+
+ template< typename T >
+ BOOST_FORCEINLINE StreamT& operator<< (T& val) const
+ {
+ StreamT& strm = this->get();
+ strm << val;
+ return strm;
+ }
+
+ template< typename T >
+ BOOST_FORCEINLINE StreamT& operator<< (T const& val) const
+ {
+ StreamT& strm = this->get();
+ strm << val;
+ return strm;
+ }
+};
+
+//! Default log record message formatter
+struct message_formatter
+{
+ typedef void result_type;
+
+ message_formatter() : m_MessageName(expressions::tag::message::get_name())
+ {
+ }
+
+ template< typename StreamT >
+ result_type operator() (record_view const& rec, StreamT& strm) const
+ {
+ boost::log::visit< expressions::tag::message::value_type >(m_MessageName, rec, boost::log::bind_output(strm));
+ }
+
+private:
+ const attribute_name m_MessageName;
+};
+
+} // namespace aux
+
+} // namespace expressions
+
/*!
* Log record formatter function wrapper.
*/
@@ -56,25 +113,7 @@ public:
private:
//! Filter function type
- typedef boost::log::aux::light_function< void (record_view const&, stream_type&) > formatter_type;
-
- //! Default formatter, always returns \c true
- struct default_formatter
- {
- typedef void result_type;
-
- default_formatter() : m_MessageName(expressions::tag::message::get_name())
- {
- }
-
- result_type operator() (record_view const& rec, stream_type& strm) const
- {
- boost::log::visit< expressions::tag::message::value_type >(m_MessageName, rec, boost::log::bind_output(strm));
- }
-
- private:
- const attribute_name m_MessageName;
- };
+ typedef boost::log::aux::light_function< void (record_view const&, expressions::aux::stream_ref< stream_type >) > formatter_type;
private:
//! Formatter function
@@ -84,7 +123,7 @@ public:
/*!
* Default constructor. Creates a formatter that only outputs log message.
*/
- basic_formatter() : m_Formatter(default_formatter())
+ basic_formatter() : m_Formatter(expressions::aux::message_formatter())
{
}
/*!
@@ -94,7 +133,7 @@ public:
{
}
/*!
- * Move constructor
+ * Move constructor. The moved-from formatter is left in an unspecified state.
*/
basic_formatter(BOOST_RV_REF(this_type) that) BOOST_NOEXCEPT : m_Formatter(boost::move(that.m_Formatter))
{
@@ -115,7 +154,7 @@ public:
}
/*!
- * Move assignment.
+ * Move assignment. The moved-from formatter is left in an unspecified state.
*/
basic_formatter& operator= (BOOST_RV_REF(this_type) that) BOOST_NOEXCEPT
{
@@ -154,7 +193,7 @@ public:
*/
result_type operator() (record_view const& rec, stream_type& strm) const
{
- m_Formatter(rec, strm);
+ m_Formatter(rec, expressions::aux::stream_ref< stream_type >(strm));
}
/*!
@@ -162,7 +201,7 @@ public:
*/
void reset()
{
- m_Formatter = default_formatter();
+ m_Formatter = expressions::aux::message_formatter();
}
/*!
diff --git a/3party/boost/boost/log/expressions/formatters.hpp b/3party/boost/boost/log/expressions/formatters.hpp
index 79ea0d71b9..47f84a516f 100644
--- a/3party/boost/boost/log/expressions/formatters.hpp
+++ b/3party/boost/boost/log/expressions/formatters.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/expressions/formatters/if.hpp>
#include <boost/log/expressions/formatters/wrap_formatter.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/formatters/c_decorator.hpp b/3party/boost/boost/log/expressions/formatters/c_decorator.hpp
index d9ceb23a54..eea835fd34 100644
--- a/3party/boost/boost/log/expressions/formatters/c_decorator.hpp
+++ b/3party/boost/boost/log/expressions/formatters/c_decorator.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +22,7 @@
#include <boost/log/expressions/formatters/char_decorator.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -90,7 +90,7 @@ struct c_decorator_traits< wchar_t >
static std::size_t print_escaped(wchar_t (&buf)[N], wchar_t c)
{
const wchar_t* format;
- register unsigned int val;
+ unsigned int val;
if (sizeof(wchar_t) == 1)
{
format = L"\\x%0.2X";
@@ -118,7 +118,7 @@ struct c_decorator_gen
typedef CharT char_type;
template< typename SubactorT >
- BOOST_LOG_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
+ BOOST_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
{
typedef c_decorator_traits< char_type > traits_type;
typedef pattern_replacer< char_type > replacer_type;
@@ -153,7 +153,7 @@ const aux::c_decorator_gen< wchar_t > wc_decor = {};
* The function creates a C-style decorator generator for arbitrary character type.
*/
template< typename CharT >
-BOOST_LOG_FORCEINLINE aux::c_decorator_gen< CharT > make_c_decor()
+BOOST_FORCEINLINE aux::c_decorator_gen< CharT > make_c_decor()
{
return aux::c_decorator_gen< CharT >();
}
@@ -218,7 +218,7 @@ struct c_ascii_decorator_gen
typedef CharT char_type;
template< typename SubactorT >
- BOOST_LOG_FORCEINLINE char_decorator_actor< SubactorT, c_ascii_pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
+ BOOST_FORCEINLINE char_decorator_actor< SubactorT, c_ascii_pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
{
typedef c_decorator_traits< char_type > traits_type;
typedef c_ascii_pattern_replacer< char_type > replacer_type;
@@ -254,7 +254,7 @@ const aux::c_ascii_decorator_gen< wchar_t > wc_ascii_decor = {};
* The function creates a C-style decorator generator for arbitrary character type.
*/
template< typename CharT >
-BOOST_LOG_FORCEINLINE aux::c_ascii_decorator_gen< CharT > make_c_ascii_decor()
+BOOST_FORCEINLINE aux::c_ascii_decorator_gen< CharT > make_c_ascii_decor()
{
return aux::c_ascii_decorator_gen< CharT >();
}
diff --git a/3party/boost/boost/log/expressions/formatters/char_decorator.hpp b/3party/boost/boost/log/expressions/formatters/char_decorator.hpp
index e59378e2a4..ca24c0d486 100644
--- a/3party/boost/boost/log/expressions/formatters/char_decorator.hpp
+++ b/3party/boost/boost/log/expressions/formatters/char_decorator.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -45,7 +45,7 @@
#include <boost/log/utility/formatting_ostream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -250,8 +250,8 @@ public:
template< typename >
struct result;
- template< typename ContextT >
- struct result< this_type(ContextT) >
+ template< typename ThisT, typename ContextT >
+ struct result< ThisT(ContextT) >
{
typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
typedef typename phoenix::evaluator::impl<
@@ -261,17 +261,6 @@ public:
>::result_type type;
};
- template< typename ContextT >
- struct result< const this_type(ContextT) >
- {
- typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
- typedef typename phoenix::evaluator::impl<
- typename LeftT::proto_base_expr const&,
- context_type,
- phoenix::unused
- >::result_type type;
- };
-
private:
//! Left argument actor
LeftT m_left;
@@ -342,7 +331,7 @@ public:
return strm;
}
- BOOST_LOG_DELETED_FUNCTION(char_decorator_output_terminal())
+ BOOST_DELETED_FUNCTION(char_decorator_output_terminal())
};
} // namespace aux
@@ -483,7 +472,7 @@ public:
return boost::move(str);
}
- BOOST_LOG_DELETED_FUNCTION(char_decorator_terminal())
+ BOOST_DELETED_FUNCTION(char_decorator_terminal())
};
/*!
@@ -519,7 +508,7 @@ public:
#define BOOST_LOG_AUX_OVERLOAD(left_ref, right_ref)\
template< typename LeftExprT, typename SubactorT, typename ImplT, template< typename > class ActorT >\
- BOOST_LOG_FORCEINLINE phoenix::actor< aux::char_decorator_output_terminal< phoenix::actor< LeftExprT >, SubactorT, ImplT > >\
+ BOOST_FORCEINLINE phoenix::actor< aux::char_decorator_output_terminal< phoenix::actor< LeftExprT >, SubactorT, ImplT > >\
operator<< (phoenix::actor< LeftExprT > left_ref left, char_decorator_actor< SubactorT, ImplT, ActorT > right_ref right)\
{\
typedef aux::char_decorator_output_terminal< phoenix::actor< LeftExprT >, SubactorT, ImplT > terminal_type;\
@@ -548,7 +537,7 @@ public:
}
template< typename SubactorT >
- BOOST_LOG_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
+ BOOST_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
{
typedef pattern_replacer< char_type > replacer_type;
typedef char_decorator_actor< SubactorT, replacer_type > result_type;
@@ -574,7 +563,7 @@ public:
}
template< typename SubactorT >
- BOOST_LOG_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< from_char_type > > operator[] (SubactorT const& subactor) const
+ BOOST_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< from_char_type > > operator[] (SubactorT const& subactor) const
{
typedef pattern_replacer< from_char_type > replacer_type;
typedef char_decorator_actor< SubactorT, replacer_type > result_type;
@@ -594,7 +583,7 @@ public:
* substring occurrence in the output will be replaced with <tt>decorations[i].second</tt>.
*/
template< typename RangeT >
-BOOST_LOG_FORCEINLINE aux::char_decorator_gen1< RangeT > char_decor(RangeT const& decorations)
+BOOST_FORCEINLINE aux::char_decorator_gen1< RangeT > char_decor(RangeT const& decorations)
{
return aux::char_decorator_gen1< RangeT >(decorations);
}
@@ -610,7 +599,7 @@ BOOST_LOG_FORCEINLINE aux::char_decorator_gen1< RangeT > char_decor(RangeT const
* substring occurrence in the output will be replaced with <tt>to[i]</tt>.
*/
template< typename FromRangeT, typename ToRangeT >
-BOOST_LOG_FORCEINLINE aux::char_decorator_gen2< FromRangeT, ToRangeT > char_decor(FromRangeT const& from, ToRangeT const& to)
+BOOST_FORCEINLINE aux::char_decorator_gen2< FromRangeT, ToRangeT > char_decor(FromRangeT const& from, ToRangeT const& to)
{
return aux::char_decorator_gen2< FromRangeT, ToRangeT >(from, to);
}
diff --git a/3party/boost/boost/log/expressions/formatters/csv_decorator.hpp b/3party/boost/boost/log/expressions/formatters/csv_decorator.hpp
index 4a0e0ddc39..8c964a0d13 100644
--- a/3party/boost/boost/log/expressions/formatters/csv_decorator.hpp
+++ b/3party/boost/boost/log/expressions/formatters/csv_decorator.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +21,7 @@
#include <boost/log/expressions/formatters/char_decorator.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -88,7 +88,7 @@ struct csv_decorator_gen
typedef CharT char_type;
template< typename SubactorT >
- BOOST_LOG_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
+ BOOST_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
{
typedef csv_decorator_traits< char_type > traits_type;
typedef pattern_replacer< char_type > replacer_type;
@@ -124,7 +124,7 @@ const aux::csv_decorator_gen< wchar_t > wcsv_decor = {};
* The function creates an CSV-style decorator generator for arbitrary character type.
*/
template< typename CharT >
-BOOST_LOG_FORCEINLINE aux::csv_decorator_gen< CharT > make_csv_decor()
+BOOST_FORCEINLINE aux::csv_decorator_gen< CharT > make_csv_decor()
{
return aux::csv_decorator_gen< CharT >();
}
diff --git a/3party/boost/boost/log/expressions/formatters/date_time.hpp b/3party/boost/boost/log/expressions/formatters/date_time.hpp
index 39a82b9d3e..0ff6b680e6 100644
--- a/3party/boost/boost/log/expressions/formatters/date_time.hpp
+++ b/3party/boost/boost/log/expressions/formatters/date_time.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/utility/functional/bind.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -140,7 +140,7 @@ public:
return boost::move(str);
}
- BOOST_LOG_DELETED_FUNCTION(format_date_time_terminal())
+ BOOST_DELETED_FUNCTION(format_date_time_terminal())
};
/*!
@@ -200,7 +200,7 @@ public:
#define BOOST_LOG_AUX_OVERLOAD(left_ref, right_ref)\
template< typename LeftExprT, typename T, typename FallbackPolicyT, typename CharT >\
- BOOST_LOG_FORCEINLINE phoenix::actor< aux::attribute_output_terminal< phoenix::actor< LeftExprT >, T, FallbackPolicyT, typename format_date_time_actor< T, FallbackPolicyT, CharT >::formatter_function_type > >\
+ BOOST_FORCEINLINE phoenix::actor< aux::attribute_output_terminal< phoenix::actor< LeftExprT >, T, FallbackPolicyT, typename format_date_time_actor< T, FallbackPolicyT, CharT >::formatter_function_type > >\
operator<< (phoenix::actor< LeftExprT > left_ref left, format_date_time_actor< T, FallbackPolicyT, CharT > right_ref right)\
{\
typedef aux::attribute_output_terminal< phoenix::actor< LeftExprT >, T, FallbackPolicyT, typename format_date_time_actor< T, FallbackPolicyT, CharT >::formatter_function_type > terminal_type;\
@@ -222,7 +222,7 @@ public:
* \param format Format string
*/
template< typename AttributeValueT, typename CharT >
-BOOST_LOG_FORCEINLINE format_date_time_actor< AttributeValueT, fallback_to_none, CharT > format_date_time(attribute_name const& name, const CharT* format)
+BOOST_FORCEINLINE format_date_time_actor< AttributeValueT, fallback_to_none, CharT > format_date_time(attribute_name const& name, const CharT* format)
{
typedef format_date_time_actor< AttributeValueT, fallback_to_none, CharT > actor_type;
typedef typename actor_type::terminal_type terminal_type;
@@ -238,7 +238,7 @@ BOOST_LOG_FORCEINLINE format_date_time_actor< AttributeValueT, fallback_to_none,
* \param format Format string
*/
template< typename AttributeValueT, typename CharT >
-BOOST_LOG_FORCEINLINE format_date_time_actor< AttributeValueT, fallback_to_none, CharT > format_date_time(attribute_name const& name, std::basic_string< CharT > const& format)
+BOOST_FORCEINLINE format_date_time_actor< AttributeValueT, fallback_to_none, CharT > format_date_time(attribute_name const& name, std::basic_string< CharT > const& format)
{
typedef format_date_time_actor< AttributeValueT, fallback_to_none, CharT > actor_type;
typedef typename actor_type::terminal_type terminal_type;
@@ -254,7 +254,7 @@ BOOST_LOG_FORCEINLINE format_date_time_actor< AttributeValueT, fallback_to_none,
* \param format Format string
*/
template< typename DescriptorT, template< typename > class ActorT, typename CharT >
-BOOST_LOG_FORCEINLINE format_date_time_actor< typename DescriptorT::value_type, fallback_to_none, CharT, ActorT >
+BOOST_FORCEINLINE format_date_time_actor< typename DescriptorT::value_type, fallback_to_none, CharT, ActorT >
format_date_time(attribute_keyword< DescriptorT, ActorT > const& keyword, const CharT* format)
{
typedef format_date_time_actor< typename DescriptorT::value_type, fallback_to_none, CharT, ActorT > actor_type;
@@ -271,7 +271,7 @@ format_date_time(attribute_keyword< DescriptorT, ActorT > const& keyword, const
* \param format Format string
*/
template< typename DescriptorT, template< typename > class ActorT, typename CharT >
-BOOST_LOG_FORCEINLINE format_date_time_actor< typename DescriptorT::value_type, fallback_to_none, CharT, ActorT >
+BOOST_FORCEINLINE format_date_time_actor< typename DescriptorT::value_type, fallback_to_none, CharT, ActorT >
format_date_time(attribute_keyword< DescriptorT, ActorT > const& keyword, std::basic_string< CharT > const& format)
{
typedef format_date_time_actor< typename DescriptorT::value_type, fallback_to_none, CharT, ActorT > actor_type;
@@ -288,7 +288,7 @@ format_date_time(attribute_keyword< DescriptorT, ActorT > const& keyword, std::b
* \param format Format string
*/
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, typename CharT >
-BOOST_LOG_FORCEINLINE format_date_time_actor< T, FallbackPolicyT, CharT, ActorT >
+BOOST_FORCEINLINE format_date_time_actor< T, FallbackPolicyT, CharT, ActorT >
format_date_time(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& placeholder, const CharT* format)
{
typedef format_date_time_actor< T, FallbackPolicyT, CharT, ActorT > actor_type;
@@ -305,7 +305,7 @@ format_date_time(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& plac
* \param format Format string
*/
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, typename CharT >
-BOOST_LOG_FORCEINLINE format_date_time_actor< T, FallbackPolicyT, CharT, ActorT >
+BOOST_FORCEINLINE format_date_time_actor< T, FallbackPolicyT, CharT, ActorT >
format_date_time(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& placeholder, std::basic_string< CharT > const& format)
{
typedef format_date_time_actor< T, FallbackPolicyT, CharT, ActorT > actor_type;
@@ -318,6 +318,24 @@ format_date_time(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& plac
BOOST_LOG_CLOSE_NAMESPACE // namespace log
+#ifndef BOOST_LOG_DOXYGEN_PASS
+
+namespace phoenix {
+
+namespace result_of {
+
+template< typename T, typename FallbackPolicyT, typename CharT >
+struct is_nullary< custom_terminal< boost::log::expressions::format_date_time_terminal< T, FallbackPolicyT, CharT > > > :
+ public mpl::false_
+{
+};
+
+} // namespace result_of
+
+} // namespace phoenix
+
+#endif // BOOST_LOG_DOXYGEN_PASS
+
} // namespace boost
#include <boost/log/detail/footer.hpp>
diff --git a/3party/boost/boost/log/expressions/formatters/format.hpp b/3party/boost/boost/log/expressions/formatters/format.hpp
index c8c71ad92a..c5d7917453 100644
--- a/3party/boost/boost/log/expressions/formatters/format.hpp
+++ b/3party/boost/boost/log/expressions/formatters/format.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/detail/custom_terminal_spec.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -72,7 +72,7 @@ public:
return m_format.make_pump(fusion::at_c< 1 >(phoenix::env(ctx).args()));
}
- BOOST_LOG_DELETED_FUNCTION(format_terminal())
+ BOOST_DELETED_FUNCTION(format_terminal())
};
/*!
@@ -80,7 +80,7 @@ public:
* according to the provided format string.
*/
template< typename CharT >
-BOOST_LOG_FORCEINLINE phoenix::actor< format_terminal< CharT > > format(const CharT* fmt)
+BOOST_FORCEINLINE phoenix::actor< format_terminal< CharT > > format(const CharT* fmt)
{
typedef format_terminal< CharT > terminal_type;
phoenix::actor< terminal_type > act = {{ terminal_type(fmt) }};
@@ -92,7 +92,7 @@ BOOST_LOG_FORCEINLINE phoenix::actor< format_terminal< CharT > > format(const Ch
* according to the provided format string.
*/
template< typename CharT, typename TraitsT, typename AllocatorT >
-BOOST_LOG_FORCEINLINE phoenix::actor< format_terminal< CharT > > format(std::basic_string< CharT, TraitsT, AllocatorT > const& fmt)
+BOOST_FORCEINLINE phoenix::actor< format_terminal< CharT > > format(std::basic_string< CharT, TraitsT, AllocatorT > const& fmt)
{
typedef format_terminal< CharT > terminal_type;
phoenix::actor< terminal_type > act = {{ terminal_type(fmt.c_str()) }};
diff --git a/3party/boost/boost/log/expressions/formatters/if.hpp b/3party/boost/boost/log/expressions/formatters/if.hpp
index c992982aa8..0985439761 100644
--- a/3party/boost/boost/log/expressions/formatters/if.hpp
+++ b/3party/boost/boost/log/expressions/formatters/if.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/custom_terminal_spec.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -55,8 +55,8 @@ public:
template< typename >
struct result;
- template< typename ContextT >
- struct result< this_type(ContextT) >
+ template< typename ThisT, typename ContextT >
+ struct result< ThisT(ContextT) >
{
typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
typedef typename phoenix::evaluator::impl<
@@ -66,17 +66,6 @@ public:
>::result_type type;
};
- template< typename ContextT >
- struct result< const this_type(ContextT) >
- {
- typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
- typedef typename phoenix::evaluator::impl<
- typename LeftT::proto_base_expr const&,
- context_type,
- phoenix::unused
- >::result_type type;
- };
-
private:
//! Left argument actor
LeftT m_left;
@@ -113,7 +102,7 @@ public:
return strm;
}
- BOOST_LOG_DELETED_FUNCTION(if_output_terminal())
+ BOOST_DELETED_FUNCTION(if_output_terminal())
};
template< typename LeftT, typename CondT, typename ThenT, typename ElseT >
@@ -131,8 +120,8 @@ public:
template< typename >
struct result;
- template< typename ContextT >
- struct result< this_type(ContextT) >
+ template< typename ThisT, typename ContextT >
+ struct result< ThisT(ContextT) >
{
typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
typedef typename phoenix::evaluator::impl<
@@ -142,17 +131,6 @@ public:
>::result_type type;
};
- template< typename ContextT >
- struct result< const this_type(ContextT) >
- {
- typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
- typedef typename phoenix::evaluator::impl<
- typename LeftT::proto_base_expr const&,
- context_type,
- phoenix::unused
- >::result_type type;
- };
-
private:
//! Left argument actor
LeftT m_left;
@@ -195,7 +173,7 @@ public:
return strm;
}
- BOOST_LOG_DELETED_FUNCTION(if_else_output_terminal())
+ BOOST_DELETED_FUNCTION(if_else_output_terminal())
};
@@ -215,7 +193,7 @@ struct if_then_else_gen
#define BOOST_LOG_AUX_OVERLOAD(left_ref, right_ref)\
template< typename LeftExprT, typename CondT, typename ThenT, typename ElseT >\
- BOOST_LOG_FORCEINLINE phoenix::actor< if_else_output_terminal< phoenix::actor< LeftExprT >, CondT, ThenT, ElseT > >\
+ BOOST_FORCEINLINE phoenix::actor< if_else_output_terminal< phoenix::actor< LeftExprT >, CondT, ThenT, ElseT > >\
operator<< (phoenix::actor< LeftExprT > left_ref left, if_then_else_gen< CondT, ThenT, ElseT > right_ref right)\
{\
typedef if_else_output_terminal< phoenix::actor< LeftExprT >, CondT, ThenT, ElseT > terminal_type;\
@@ -242,7 +220,7 @@ struct if_then_gen
}
template< typename ElseT >
- BOOST_LOG_FORCEINLINE if_then_else_gen< CondT, ThenT, ElseT > operator[] (ElseT const& el)
+ BOOST_FORCEINLINE if_then_else_gen< CondT, ThenT, ElseT > operator[] (ElseT const& el)
{
return if_then_else_gen< CondT, ThenT, ElseT >(m_cond, m_then, el);
}
@@ -256,7 +234,7 @@ struct if_then_gen
#define BOOST_LOG_AUX_OVERLOAD(left_ref, right_ref)\
template< typename LeftExprT, typename CondT, typename ThenT >\
- BOOST_LOG_FORCEINLINE phoenix::actor< if_output_terminal< phoenix::actor< LeftExprT >, CondT, ThenT > >\
+ BOOST_FORCEINLINE phoenix::actor< if_output_terminal< phoenix::actor< LeftExprT >, CondT, ThenT > >\
operator<< (phoenix::actor< LeftExprT > left_ref left, if_then_gen< CondT, ThenT > right_ref right)\
{\
typedef if_output_terminal< phoenix::actor< LeftExprT >, CondT, ThenT > terminal_type;\
@@ -282,7 +260,7 @@ public:
}
template< typename ThenT >
- BOOST_LOG_FORCEINLINE if_then_gen< CondT, ThenT > operator[] (ThenT const& then_) const
+ BOOST_FORCEINLINE if_then_gen< CondT, ThenT > operator[] (ThenT const& then_) const
{
return if_then_gen< CondT, ThenT >(m_cond, then_);
}
@@ -297,7 +275,7 @@ public:
* \param cond A filter expression that will be used as the condition
*/
template< typename CondT >
-BOOST_LOG_FORCEINLINE aux::if_gen< CondT > if_(CondT const& cond)
+BOOST_FORCEINLINE aux::if_gen< CondT > if_(CondT const& cond)
{
return aux::if_gen< CondT >(cond);
}
diff --git a/3party/boost/boost/log/expressions/formatters/named_scope.hpp b/3party/boost/boost/log/expressions/formatters/named_scope.hpp
index 86952af632..2225e00ec9 100644
--- a/3party/boost/boost/log/expressions/formatters/named_scope.hpp
+++ b/3party/boost/boost/log/expressions/formatters/named_scope.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,9 +50,11 @@
#include <boost/log/keywords/delimiter.hpp>
#include <boost/log/keywords/depth.hpp>
#include <boost/log/keywords/iteration.hpp>
+#include <boost/log/keywords/empty_marker.hpp>
+#include <boost/log/keywords/incomplete_marker.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -71,10 +73,17 @@ enum scope_iteration_direction
namespace aux {
+#ifdef BOOST_LOG_USE_CHAR
//! Parses the named scope format string and constructs the formatter function
-template< typename CharT >
-BOOST_LOG_API boost::log::aux::light_function< void (basic_formatting_ostream< CharT >&, attributes::named_scope::value_type::value_type const&) >
-parse_named_scope_format(const CharT* begin, const CharT* end);
+BOOST_LOG_API boost::log::aux::light_function< void (basic_formatting_ostream< char >&, attributes::named_scope::value_type::value_type const&) >
+parse_named_scope_format(const char* begin, const char* end);
+#endif
+
+#ifdef BOOST_LOG_USE_WCHAR_T
+//! Parses the named scope format string and constructs the formatter function
+BOOST_LOG_API boost::log::aux::light_function< void (basic_formatting_ostream< wchar_t >&, attributes::named_scope::value_type::value_type const&) >
+parse_named_scope_format(const wchar_t* begin, const wchar_t* end);
+#endif
//! Parses the named scope format string and constructs the formatter function
template< typename CharT >
@@ -125,6 +134,10 @@ private:
element_formatter_type m_element_formatter;
//! Element delimiter
string_type m_delimiter;
+ //! Incomplete list marker
+ string_type m_incomplete_marker;
+ //! Empty list marker
+ string_type m_empty_marker;
//! Maximum number of elements to output
value_type::size_type m_depth;
//! Iteration direction
@@ -132,9 +145,19 @@ private:
public:
//! Initializing constructor
- format_named_scope_impl(element_formatter_type const& element_formatter, string_type const& delimiter, value_type::size_type depth, scope_iteration_direction direction) :
+ format_named_scope_impl
+ (
+ element_formatter_type const& element_formatter,
+ string_type const& delimiter,
+ string_type const& incomplete_marker,
+ string_type const& empty_marker,
+ value_type::size_type depth,
+ scope_iteration_direction direction
+ ) :
m_element_formatter(element_formatter),
m_delimiter(delimiter),
+ m_incomplete_marker(incomplete_marker),
+ m_empty_marker(empty_marker),
m_depth(depth),
m_direction(direction)
{
@@ -143,6 +166,8 @@ public:
format_named_scope_impl(format_named_scope_impl const& that) :
m_element_formatter(that.m_element_formatter),
m_delimiter(that.m_delimiter),
+ m_incomplete_marker(that.m_incomplete_marker),
+ m_empty_marker(that.m_empty_marker),
m_depth(that.m_depth),
m_direction(that.m_direction)
{
@@ -151,10 +176,17 @@ public:
//! Formatting operator
result_type operator() (stream_type& strm, value_type const& scopes) const
{
- if (m_direction == expressions::forward)
- format_forward(strm, scopes);
+ if (!scopes.empty())
+ {
+ if (m_direction == expressions::forward)
+ format_forward(strm, scopes);
+ else
+ format_reverse(strm, scopes);
+ }
else
- format_reverse(strm, scopes);
+ {
+ strm << m_empty_marker;
+ }
}
private:
@@ -176,7 +208,7 @@ private:
if (it != end)
{
if (it != scopes.begin())
- strm << "..." << m_delimiter;
+ strm << m_incomplete_marker;
m_element_formatter(strm, *it);
for (++it; it != end; ++it)
@@ -211,7 +243,7 @@ private:
}
if (it != scopes.rend())
- strm << m_delimiter << "...";
+ strm << m_incomplete_marker;
}
}
};
@@ -259,8 +291,18 @@ private:
public:
//! Initializing constructor
template< typename FormatT >
- format_named_scope_terminal(attribute_name const& name, fallback_policy const& fallback, FormatT const& element_format, string_type const& delimiter, value_type::size_type depth, scope_iteration_direction direction) :
- m_name(name), m_formatter(aux::parse_named_scope_format(element_format), delimiter, depth, direction), m_visitor_invoker(fallback)
+ format_named_scope_terminal
+ (
+ attribute_name const& name,
+ fallback_policy const& fallback,
+ FormatT const& element_format,
+ string_type const& delimiter,
+ string_type const& incomplete_marker,
+ string_type const& empty_marker,
+ value_type::size_type depth,
+ scope_iteration_direction direction
+ ) :
+ m_name(name), m_formatter(aux::parse_named_scope_format(element_format), delimiter, incomplete_marker, empty_marker, depth, direction), m_visitor_invoker(fallback)
{
}
//! Copy constructor
@@ -309,7 +351,7 @@ public:
return boost::move(str);
}
- BOOST_LOG_DELETED_FUNCTION(format_named_scope_terminal())
+ BOOST_DELETED_FUNCTION(format_named_scope_terminal())
};
/*!
@@ -369,7 +411,7 @@ public:
#define BOOST_LOG_AUX_OVERLOAD(left_ref, right_ref)\
template< typename LeftExprT, typename FallbackPolicyT, typename CharT >\
- BOOST_LOG_FORCEINLINE phoenix::actor< aux::attribute_output_terminal< phoenix::actor< LeftExprT >, attributes::named_scope::value_type, FallbackPolicyT, typename format_named_scope_actor< FallbackPolicyT, CharT >::formatter_function_type > >\
+ BOOST_FORCEINLINE phoenix::actor< aux::attribute_output_terminal< phoenix::actor< LeftExprT >, attributes::named_scope::value_type, FallbackPolicyT, typename format_named_scope_actor< FallbackPolicyT, CharT >::formatter_function_type > >\
operator<< (phoenix::actor< LeftExprT > left_ref left, format_named_scope_actor< FallbackPolicyT, CharT > right_ref right)\
{\
typedef aux::attribute_output_terminal< phoenix::actor< LeftExprT >, attributes::named_scope::value_type, FallbackPolicyT, typename format_named_scope_actor< FallbackPolicyT, CharT >::formatter_function_type > terminal_type;\
@@ -385,34 +427,39 @@ public:
namespace aux {
-//! Auxiliary traits to acquire correct default delimiter depending on the character type
+//! Auxiliary traits to acquire default formatter parameters depending on the character type
template< typename CharT >
-struct default_scope_delimiter;
+struct default_named_scope_params;
#ifdef BOOST_LOG_USE_CHAR
template< >
-struct default_scope_delimiter< char >
+struct default_named_scope_params< char >
{
- static const char* forward() { return "->"; }
- static const char* reverse() { return "<-"; }
+ static const char* forward_delimiter() { return "->"; }
+ static const char* reverse_delimiter() { return "<-"; }
+ static const char* incomplete_marker() { return "..."; }
+ static const char* empty_marker() { return ""; }
};
#endif
#ifdef BOOST_LOG_USE_WCHAR_T
template< >
-struct default_scope_delimiter< wchar_t >
+struct default_named_scope_params< wchar_t >
{
- static const wchar_t* forward() { return L"->"; }
- static const wchar_t* reverse() { return L"<-"; }
+ static const wchar_t* forward_delimiter() { return L"->"; }
+ static const wchar_t* reverse_delimiter() { return L"<-"; }
+ static const wchar_t* incomplete_marker() { return L"..."; }
+ static const wchar_t* empty_marker() { return L""; }
};
#endif
template< typename CharT, template< typename > class ActorT, typename FallbackPolicyT, typename ArgsT >
-BOOST_LOG_FORCEINLINE format_named_scope_actor< FallbackPolicyT, CharT, ActorT > format_named_scope(attribute_name const& name, FallbackPolicyT const& fallback, ArgsT const& args)
+BOOST_FORCEINLINE format_named_scope_actor< FallbackPolicyT, CharT, ActorT > format_named_scope(attribute_name const& name, FallbackPolicyT const& fallback, ArgsT const& args)
{
typedef format_named_scope_actor< FallbackPolicyT, CharT, ActorT > actor_type;
typedef typename actor_type::terminal_type terminal_type;
+ typedef default_named_scope_params< CharT > default_params;
scope_iteration_direction dir = args[keywords::iteration | expressions::forward];
- const CharT* default_delimiter = (dir == expressions::forward ? default_scope_delimiter< CharT >::forward() : default_scope_delimiter< CharT >::reverse());
+ const CharT* default_delimiter = (dir == expressions::forward ? default_params::forward_delimiter() : default_params::reverse_delimiter());
typename actor_type::base_type act =
{{
terminal_type
@@ -421,6 +468,8 @@ BOOST_LOG_FORCEINLINE format_named_scope_actor< FallbackPolicyT, CharT, ActorT >
fallback,
args[keywords::format],
args[keywords::delimiter | default_delimiter],
+ args[keywords::incomplete_marker | default_params::incomplete_marker()],
+ args[keywords::empty_marker | default_params::empty_marker()],
args[keywords::depth | static_cast< attributes::named_scope::value_type::size_type >(0)],
dir
)
@@ -438,7 +487,7 @@ BOOST_LOG_FORCEINLINE format_named_scope_actor< FallbackPolicyT, CharT, ActorT >
* \param element_format Format string for a single named scope
*/
template< typename CharT >
-BOOST_LOG_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT > format_named_scope(attribute_name const& name, const CharT* element_format)
+BOOST_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT > format_named_scope(attribute_name const& name, const CharT* element_format)
{
typedef format_named_scope_actor< fallback_to_none, CharT > actor_type;
typedef typename actor_type::terminal_type terminal_type;
@@ -454,7 +503,7 @@ BOOST_LOG_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT > format
* \param element_format Format string for a single named scope
*/
template< typename CharT >
-BOOST_LOG_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT > format_named_scope(attribute_name const& name, std::basic_string< CharT > const& element_format)
+BOOST_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT > format_named_scope(attribute_name const& name, std::basic_string< CharT > const& element_format)
{
typedef format_named_scope_actor< fallback_to_none, CharT > actor_type;
typedef typename actor_type::terminal_type terminal_type;
@@ -470,7 +519,7 @@ BOOST_LOG_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT > format
* \param element_format Format string for a single named scope
*/
template< typename DescriptorT, template< typename > class ActorT, typename CharT >
-BOOST_LOG_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT, ActorT >
+BOOST_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT, ActorT >
format_named_scope(attribute_keyword< DescriptorT, ActorT > const& keyword, const CharT* element_format)
{
BOOST_STATIC_ASSERT_MSG((is_same< typename DescriptorT::value_type, attributes::named_scope::value_type >::value),\
@@ -490,7 +539,7 @@ format_named_scope(attribute_keyword< DescriptorT, ActorT > const& keyword, cons
* \param element_format Format string for a single named scope
*/
template< typename DescriptorT, template< typename > class ActorT, typename CharT >
-BOOST_LOG_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT, ActorT >
+BOOST_FORCEINLINE format_named_scope_actor< fallback_to_none, CharT, ActorT >
format_named_scope(attribute_keyword< DescriptorT, ActorT > const& keyword, std::basic_string< CharT > const& element_format)
{
BOOST_STATIC_ASSERT_MSG((is_same< typename DescriptorT::value_type, attributes::named_scope::value_type >::value),\
@@ -510,7 +559,7 @@ format_named_scope(attribute_keyword< DescriptorT, ActorT > const& keyword, std:
* \param element_format Format string for a single named scope
*/
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, typename CharT >
-BOOST_LOG_FORCEINLINE format_named_scope_actor< FallbackPolicyT, CharT, ActorT >
+BOOST_FORCEINLINE format_named_scope_actor< FallbackPolicyT, CharT, ActorT >
format_named_scope(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& placeholder, const CharT* element_format)
{
BOOST_STATIC_ASSERT_MSG((is_same< T, attributes::named_scope::value_type >::value),\
@@ -530,7 +579,7 @@ format_named_scope(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& pl
* \param element_format Format string for a single named scope
*/
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, typename CharT >
-BOOST_LOG_FORCEINLINE format_named_scope_actor< FallbackPolicyT, CharT, ActorT >
+BOOST_FORCEINLINE format_named_scope_actor< FallbackPolicyT, CharT, ActorT >
format_named_scope(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& placeholder, std::basic_string< CharT > const& element_format)
{
BOOST_STATIC_ASSERT_MSG((is_same< T, attributes::named_scope::value_type >::value),\
@@ -545,7 +594,7 @@ format_named_scope(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& pl
#if !defined(BOOST_LOG_DOXYGEN_PASS)
# define BOOST_PP_FILENAME_1 <boost/log/detail/named_scope_fmt_pp.hpp>
-# define BOOST_PP_ITERATION_LIMITS (1, 4)
+# define BOOST_PP_ITERATION_LIMITS (1, 6)
# include BOOST_PP_ITERATE()
#else // BOOST_LOG_DOXYGEN_PASS
@@ -557,6 +606,8 @@ format_named_scope(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& pl
* \param args An set of named parameters. Supported parameters:
* \li \c format - A format string for named scopes. The string can contain "%n", "%f" and "%l" placeholders for the scope name, file and line number, respectively. This parameter is mandatory.
* \li \c delimiter - A string that is used to delimit the formatted scope names. Default: "->" or "<-", depending on the iteration direction.
+ * \li \c incomplete_marker - A string that is used to indicate that the list was printed incomplete because of depth limitation. Default: "...".
+ * \li \c empty_marker - A string that is output in case if the scope list is empty. Default: "", i.e. nothing is output.
* \li \c iteration - Iteration direction, see \c scope_iteration_direction enumeration. Default: forward.
* \li \c depth - Iteration depth. Default: unlimited.
*/
diff --git a/3party/boost/boost/log/expressions/formatters/stream.hpp b/3party/boost/boost/log/expressions/formatters/stream.hpp
index 39449ce692..cd5f1d36c3 100644
--- a/3party/boost/boost/log/expressions/formatters/stream.hpp
+++ b/3party/boost/boost/log/expressions/formatters/stream.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/formatters/wrap_formatter.hpp b/3party/boost/boost/log/expressions/formatters/wrap_formatter.hpp
index 52064a53c8..7d8a22c4fc 100644
--- a/3party/boost/boost/log/expressions/formatters/wrap_formatter.hpp
+++ b/3party/boost/boost/log/expressions/formatters/wrap_formatter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -32,7 +32,7 @@
#include <boost/log/utility/formatting_ostream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -63,8 +63,8 @@ public:
template< typename >
struct result;
- template< typename ContextT >
- struct result< this_type(ContextT) >
+ template< typename ThisT, typename ContextT >
+ struct result< ThisT(ContextT) >
{
typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
typedef typename phoenix::evaluator::impl<
@@ -74,17 +74,6 @@ public:
>::result_type type;
};
- template< typename ContextT >
- struct result< const this_type(ContextT) >
- {
- typedef typename remove_cv< typename remove_reference< ContextT >::type >::type context_type;
- typedef typename phoenix::evaluator::impl<
- typename LeftT::proto_base_expr const&,
- context_type,
- phoenix::unused
- >::result_type type;
- };
-
private:
//! Left argument actor
LeftT m_left;
@@ -121,7 +110,7 @@ public:
return strm;
}
- BOOST_LOG_DELETED_FUNCTION(wrapped_formatter_output_terminal())
+ BOOST_DELETED_FUNCTION(wrapped_formatter_output_terminal())
};
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_char_type, char_type, false)
@@ -262,7 +251,7 @@ public:
#define BOOST_LOG_AUX_OVERLOAD(left_ref, right_ref)\
template< typename LeftExprT, typename FunT, typename CharT >\
- BOOST_LOG_FORCEINLINE phoenix::actor< aux::wrapped_formatter_output_terminal< phoenix::actor< LeftExprT >, FunT > >\
+ BOOST_FORCEINLINE phoenix::actor< aux::wrapped_formatter_output_terminal< phoenix::actor< LeftExprT >, FunT > >\
operator<< (phoenix::actor< LeftExprT > left_ref left, wrapped_formatter_actor< FunT, CharT > right_ref right)\
{\
typedef aux::wrapped_formatter_output_terminal< phoenix::actor< LeftExprT >, FunT > terminal_type;\
@@ -287,7 +276,7 @@ public:
* where \c CharT is the character type of the formatting expression.
*/
template< typename FunT >
-BOOST_LOG_FORCEINLINE wrapped_formatter_actor< FunT, typename aux::default_char_type< FunT >::type > wrap_formatter(FunT const& fun)
+BOOST_FORCEINLINE wrapped_formatter_actor< FunT, typename aux::default_char_type< FunT >::type > wrap_formatter(FunT const& fun)
{
typedef wrapped_formatter_actor< FunT, typename aux::default_char_type< FunT >::type > actor_type;
typedef typename actor_type::terminal_type terminal_type;
@@ -306,7 +295,7 @@ BOOST_LOG_FORCEINLINE wrapped_formatter_actor< FunT, typename aux::default_char_
* where \c CharT is the character type of the formatting expression.
*/
template< typename CharT, typename FunT >
-BOOST_LOG_FORCEINLINE wrapped_formatter_actor< FunT, CharT > wrap_formatter(FunT const& fun)
+BOOST_FORCEINLINE wrapped_formatter_actor< FunT, CharT > wrap_formatter(FunT const& fun)
{
typedef wrapped_formatter_actor< FunT, CharT > actor_type;
typedef typename actor_type::terminal_type terminal_type;
diff --git a/3party/boost/boost/log/expressions/formatters/xml_decorator.hpp b/3party/boost/boost/log/expressions/formatters/xml_decorator.hpp
index 72c0b1f574..68ae596d49 100644
--- a/3party/boost/boost/log/expressions/formatters/xml_decorator.hpp
+++ b/3party/boost/boost/log/expressions/formatters/xml_decorator.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/expressions/formatters/char_decorator.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -87,7 +87,7 @@ struct xml_decorator_gen
typedef CharT char_type;
template< typename SubactorT >
- BOOST_LOG_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
+ BOOST_FORCEINLINE char_decorator_actor< SubactorT, pattern_replacer< char_type > > operator[] (SubactorT const& subactor) const
{
typedef xml_decorator_traits< char_type > traits_type;
typedef pattern_replacer< char_type > replacer_type;
@@ -122,7 +122,7 @@ const aux::xml_decorator_gen< wchar_t > wxml_decor = {};
* The function creates an XML-style decorator generator for arbitrary character type.
*/
template< typename CharT >
-BOOST_LOG_FORCEINLINE aux::xml_decorator_gen< CharT > make_xml_decor()
+BOOST_FORCEINLINE aux::xml_decorator_gen< CharT > make_xml_decor()
{
return aux::xml_decorator_gen< CharT >();
}
diff --git a/3party/boost/boost/log/expressions/is_keyword_descriptor.hpp b/3party/boost/boost/log/expressions/is_keyword_descriptor.hpp
index 67e194a660..9899e228e7 100644
--- a/3party/boost/boost/log/expressions/is_keyword_descriptor.hpp
+++ b/3party/boost/boost/log/expressions/is_keyword_descriptor.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/keyword.hpp b/3party/boost/boost/log/expressions/keyword.hpp
index b1169df034..434247be91 100644
--- a/3party/boost/boost/log/expressions/keyword.hpp
+++ b/3party/boost/boost/log/expressions/keyword.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +33,7 @@
#include <boost/log/attributes/fallback_policy.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/keyword_fwd.hpp b/3party/boost/boost/log/expressions/keyword_fwd.hpp
index 5506721b39..a2671e9f61 100644
--- a/3party/boost/boost/log/expressions/keyword_fwd.hpp
+++ b/3party/boost/boost/log/expressions/keyword_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,7 +17,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/message.hpp b/3party/boost/boost/log/expressions/message.hpp
index 2f1a761050..79d826a992 100644
--- a/3party/boost/boost/log/expressions/message.hpp
+++ b/3party/boost/boost/log/expressions/message.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/attribute_name.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/predicates.hpp b/3party/boost/boost/log/expressions/predicates.hpp
index 87d8a02b2c..297b51b9d2 100644
--- a/3party/boost/boost/log/expressions/predicates.hpp
+++ b/3party/boost/boost/log/expressions/predicates.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/expressions/predicates/is_debugger_present.hpp>
#include <boost/log/expressions/predicates/channel_severity_filter.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/predicates/begins_with.hpp b/3party/boost/boost/log/expressions/predicates/begins_with.hpp
index 8d7ce17920..e837a4ac7e 100644
--- a/3party/boost/boost/log/expressions/predicates/begins_with.hpp
+++ b/3party/boost/boost/log/expressions/predicates/begins_with.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/utility/functional/begins_with.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -84,7 +84,7 @@ public:
* which is assumed to be a string, begins with the specified substring.
*/
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, typename SubstringT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_begins_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type, FallbackPolicyT > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_begins_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type, FallbackPolicyT > > >
begins_with(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, SubstringT const& substring)
{
typedef aux::unary_function_terminal< attribute_begins_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type, FallbackPolicyT > > terminal_type;
@@ -97,7 +97,7 @@ begins_with(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, Sub
* which is assumed to be a string, begins with the specified substring.
*/
template< typename DescriptorT, template< typename > class ActorT, typename SubstringT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_begins_with< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_begins_with< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
begins_with(attribute_keyword< DescriptorT, ActorT > const&, SubstringT const& substring)
{
typedef aux::unary_function_terminal< attribute_begins_with< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > terminal_type;
@@ -110,7 +110,7 @@ begins_with(attribute_keyword< DescriptorT, ActorT > const&, SubstringT const& s
* which is assumed to be a string, begins with the specified substring.
*/
template< typename T, typename SubstringT >
-BOOST_LOG_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_begins_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
+BOOST_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_begins_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
begins_with(attribute_name const& name, SubstringT const& substring)
{
typedef aux::unary_function_terminal< attribute_begins_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > terminal_type;
diff --git a/3party/boost/boost/log/expressions/predicates/channel_severity_filter.hpp b/3party/boost/boost/log/expressions/predicates/channel_severity_filter.hpp
index 5dd3917a94..f0ddfb564c 100644
--- a/3party/boost/boost/log/expressions/predicates/channel_severity_filter.hpp
+++ b/3party/boost/boost/log/expressions/predicates/channel_severity_filter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/expressions/keyword_fwd.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -304,7 +304,7 @@ public:
* if the record severity level is not less than the threshold for the channel the record belongs to.
*/
template< typename ChannelT, typename SeverityT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT >
channel_severity_filter(attribute_name const& channel_name, attribute_name const& severity_name)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT > result_type;
@@ -315,7 +315,7 @@ channel_severity_filter(attribute_name const& channel_name, attribute_name const
//! \overload
template< typename SeverityT, typename ChannelDescriptorT, template< typename > class ActorT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, SeverityT, fallback_to_none, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, SeverityT, fallback_to_none, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT >
channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& channel_keyword, attribute_name const& severity_name)
{
typedef channel_severity_filter_actor< typename ChannelDescriptorT::value_type, SeverityT, fallback_to_none, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT > result_type;
@@ -326,7 +326,7 @@ channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& c
//! \overload
template< typename ChannelT, typename SeverityDescriptorT, template< typename > class ActorT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT >
channel_severity_filter(attribute_name const& channel_name, attribute_keyword< SeverityDescriptorT, ActorT > const& severity_keyword)
{
typedef channel_severity_filter_actor< ChannelT, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT > result_type;
@@ -337,7 +337,7 @@ channel_severity_filter(attribute_name const& channel_name, attribute_keyword< S
//! \overload
template< typename ChannelDescriptorT, typename SeverityDescriptorT, template< typename > class ActorT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT >
channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& channel_keyword, attribute_keyword< SeverityDescriptorT, ActorT > const& severity_keyword)
{
typedef channel_severity_filter_actor< typename ChannelDescriptorT::value_type, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT > result_type;
@@ -348,7 +348,7 @@ channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& c
//! \overload
template< typename SeverityT, typename ChannelT, typename ChannelFallbackT, typename ChannelTagT, template< typename > class ActorT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT >
channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT, ActorT > const& channel_placeholder, attribute_name const& severity_name)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, fallback_to_none, less, greater_equal, std::allocator< void >, ActorT > result_type;
@@ -359,7 +359,7 @@ channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT
//! \overload
template< typename ChannelT, typename SeverityT, typename SeverityFallbackT, typename SeverityTagT, template< typename > class ActorT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, SeverityFallbackT, less, greater_equal, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, SeverityFallbackT, less, greater_equal, std::allocator< void >, ActorT >
channel_severity_filter(attribute_name const& channel_name, attribute_actor< SeverityT, SeverityFallbackT, SeverityTagT, ActorT > const& severity_placeholder)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, SeverityFallbackT, less, greater_equal, std::allocator< void >, ActorT > result_type;
@@ -370,7 +370,7 @@ channel_severity_filter(attribute_name const& channel_name, attribute_actor< Sev
//! \overload
template< typename ChannelT, typename ChannelFallbackT, typename ChannelTagT, typename SeverityT, typename SeverityFallbackT, typename SeverityTagT, template< typename > class ActorT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, SeverityFallbackT, less, greater_equal, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, SeverityFallbackT, less, greater_equal, std::allocator< void >, ActorT >
channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT, ActorT > const& channel_placeholder, attribute_actor< SeverityT, SeverityFallbackT, SeverityTagT, ActorT > const& severity_placeholder)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, SeverityFallbackT, less, greater_equal, std::allocator< void >, ActorT > result_type;
@@ -382,7 +382,7 @@ channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT
//! \overload
template< typename ChannelT, typename SeverityT, typename SeverityCompareT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, fallback_to_none, less, SeverityCompareT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, fallback_to_none, less, SeverityCompareT >
channel_severity_filter(attribute_name const& channel_name, attribute_name const& severity_name, SeverityCompareT const& severity_compare)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, fallback_to_none, less, SeverityCompareT > result_type;
@@ -393,7 +393,7 @@ channel_severity_filter(attribute_name const& channel_name, attribute_name const
//! \overload
template< typename SeverityT, typename ChannelDescriptorT, template< typename > class ActorT, typename SeverityCompareT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, SeverityT, fallback_to_none, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, SeverityT, fallback_to_none, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& channel_keyword, attribute_name const& severity_name, SeverityCompareT const& severity_compare)
{
typedef channel_severity_filter_actor< typename ChannelDescriptorT::value_type, SeverityT, fallback_to_none, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -404,7 +404,7 @@ channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& c
//! \overload
template< typename ChannelT, typename SeverityDescriptorT, template< typename > class ActorT, typename SeverityCompareT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_name const& channel_name, attribute_keyword< SeverityDescriptorT, ActorT > const& severity_keyword, SeverityCompareT const& severity_compare)
{
typedef channel_severity_filter_actor< ChannelT, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -415,7 +415,7 @@ channel_severity_filter(attribute_name const& channel_name, attribute_keyword< S
//! \overload
template< typename ChannelDescriptorT, typename SeverityDescriptorT, template< typename > class ActorT, typename SeverityCompareT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& channel_keyword, attribute_keyword< SeverityDescriptorT, ActorT > const& severity_keyword, SeverityCompareT const& severity_compare)
{
typedef channel_severity_filter_actor< typename ChannelDescriptorT::value_type, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -426,7 +426,7 @@ channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& c
//! \overload
template< typename SeverityT, typename ChannelT, typename ChannelFallbackT, typename ChannelTagT, template< typename > class ActorT, typename SeverityCompareT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT, ActorT > const& channel_placeholder, attribute_name const& severity_name, SeverityCompareT const& severity_compare)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, fallback_to_none, less, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -437,7 +437,7 @@ channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT
//! \overload
template< typename ChannelT, typename SeverityT, typename SeverityFallbackT, typename SeverityTagT, template< typename > class ActorT, typename SeverityCompareT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, SeverityFallbackT, less, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, SeverityFallbackT, less, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_name const& channel_name, attribute_actor< SeverityT, SeverityFallbackT, SeverityTagT, ActorT > const& severity_placeholder, SeverityCompareT const& severity_compare)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, SeverityFallbackT, less, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -448,7 +448,7 @@ channel_severity_filter(attribute_name const& channel_name, attribute_actor< Sev
//! \overload
template< typename ChannelT, typename ChannelFallbackT, typename ChannelTagT, typename SeverityT, typename SeverityFallbackT, typename SeverityTagT, template< typename > class ActorT, typename SeverityCompareT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, SeverityFallbackT, less, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, SeverityFallbackT, less, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT, ActorT > const& channel_placeholder, attribute_actor< SeverityT, SeverityFallbackT, SeverityTagT, ActorT > const& severity_placeholder, SeverityCompareT const& severity_compare)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, SeverityFallbackT, less, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -460,7 +460,7 @@ channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT
//! \overload
template< typename ChannelT, typename SeverityT, typename SeverityCompareT, typename ChannelOrderT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT >
channel_severity_filter(attribute_name const& channel_name, attribute_name const& severity_name, SeverityCompareT const& severity_compare, ChannelOrderT const& channel_order)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT > result_type;
@@ -471,7 +471,7 @@ channel_severity_filter(attribute_name const& channel_name, attribute_name const
//! \overload
template< typename SeverityT, typename ChannelDescriptorT, template< typename > class ActorT, typename SeverityCompareT, typename ChannelOrderT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, SeverityT, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, SeverityT, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& channel_keyword, attribute_name const& severity_name, SeverityCompareT const& severity_compare, ChannelOrderT const& channel_order)
{
typedef channel_severity_filter_actor< typename ChannelDescriptorT::value_type, SeverityT, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -482,7 +482,7 @@ channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& c
//! \overload
template< typename ChannelT, typename SeverityDescriptorT, template< typename > class ActorT, typename SeverityCompareT, typename ChannelOrderT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_name const& channel_name, attribute_keyword< SeverityDescriptorT, ActorT > const& severity_keyword, SeverityCompareT const& severity_compare, ChannelOrderT const& channel_order)
{
typedef channel_severity_filter_actor< ChannelT, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -493,7 +493,7 @@ channel_severity_filter(attribute_name const& channel_name, attribute_keyword< S
//! \overload
template< typename ChannelDescriptorT, typename SeverityDescriptorT, template< typename > class ActorT, typename SeverityCompareT, typename ChannelOrderT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< typename ChannelDescriptorT::value_type, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& channel_keyword, attribute_keyword< SeverityDescriptorT, ActorT > const& severity_keyword, SeverityCompareT const& severity_compare, ChannelOrderT const& channel_order)
{
typedef channel_severity_filter_actor< typename ChannelDescriptorT::value_type, typename SeverityDescriptorT::value_type, fallback_to_none, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -504,7 +504,7 @@ channel_severity_filter(attribute_keyword< ChannelDescriptorT, ActorT > const& c
//! \overload
template< typename SeverityT, typename ChannelT, typename ChannelFallbackT, typename ChannelTagT, template< typename > class ActorT, typename SeverityCompareT, typename ChannelOrderT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT, ActorT > const& channel_placeholder, attribute_name const& severity_name, SeverityCompareT const& severity_compare, ChannelOrderT const& channel_order)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, fallback_to_none, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -515,7 +515,7 @@ channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT
//! \overload
template< typename ChannelT, typename SeverityT, typename SeverityFallbackT, typename SeverityTagT, template< typename > class ActorT, typename SeverityCompareT, typename ChannelOrderT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, SeverityFallbackT, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, SeverityFallbackT, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_name const& channel_name, attribute_actor< SeverityT, SeverityFallbackT, SeverityTagT, ActorT > const& severity_placeholder, SeverityCompareT const& severity_compare, ChannelOrderT const& channel_order)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, fallback_to_none, SeverityFallbackT, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT > result_type;
@@ -526,7 +526,7 @@ channel_severity_filter(attribute_name const& channel_name, attribute_actor< Sev
//! \overload
template< typename ChannelT, typename ChannelFallbackT, typename ChannelTagT, typename SeverityT, typename SeverityFallbackT, typename SeverityTagT, template< typename > class ActorT, typename SeverityCompareT, typename ChannelOrderT >
-BOOST_LOG_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, SeverityFallbackT, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
+BOOST_FORCEINLINE channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, SeverityFallbackT, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT >
channel_severity_filter(attribute_actor< ChannelT, ChannelFallbackT, ChannelTagT, ActorT > const& channel_placeholder, attribute_actor< SeverityT, SeverityFallbackT, SeverityTagT, ActorT > const& severity_placeholder, SeverityCompareT const& severity_compare, ChannelOrderT const& channel_order)
{
typedef channel_severity_filter_actor< ChannelT, SeverityT, ChannelFallbackT, SeverityFallbackT, ChannelOrderT, SeverityCompareT, std::allocator< void >, ActorT > result_type;
diff --git a/3party/boost/boost/log/expressions/predicates/contains.hpp b/3party/boost/boost/log/expressions/predicates/contains.hpp
index fd7f845690..633ba65e8e 100644
--- a/3party/boost/boost/log/expressions/predicates/contains.hpp
+++ b/3party/boost/boost/log/expressions/predicates/contains.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/utility/functional/contains.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -84,7 +84,7 @@ public:
* which is assumed to be a string, contains the specified substring.
*/
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, typename SubstringT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_contains< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type, FallbackPolicyT > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_contains< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type, FallbackPolicyT > > >
contains(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, SubstringT const& substring)
{
typedef aux::unary_function_terminal< attribute_contains< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type, FallbackPolicyT > > terminal_type;
@@ -97,7 +97,7 @@ contains(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, Substr
* which is assumed to be a string, contains the specified substring.
*/
template< typename DescriptorT, template< typename > class ActorT, typename SubstringT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_contains< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_contains< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
contains(attribute_keyword< DescriptorT, ActorT > const&, SubstringT const& substring)
{
typedef aux::unary_function_terminal< attribute_contains< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > terminal_type;
@@ -110,7 +110,7 @@ contains(attribute_keyword< DescriptorT, ActorT > const&, SubstringT const& subs
* which is assumed to be a string, contains the specified substring.
*/
template< typename T, typename SubstringT >
-BOOST_LOG_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_contains< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
+BOOST_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_contains< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
contains(attribute_name const& name, SubstringT const& substring)
{
typedef aux::unary_function_terminal< attribute_contains< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > terminal_type;
diff --git a/3party/boost/boost/log/expressions/predicates/ends_with.hpp b/3party/boost/boost/log/expressions/predicates/ends_with.hpp
index 83ef04350a..1e8785dad0 100644
--- a/3party/boost/boost/log/expressions/predicates/ends_with.hpp
+++ b/3party/boost/boost/log/expressions/predicates/ends_with.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/utility/functional/ends_with.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -84,7 +84,7 @@ public:
* which is assumed to be a string, ends with the specified substring.
*/
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, typename SubstringT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_ends_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type, FallbackPolicyT > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_ends_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type, FallbackPolicyT > > >
ends_with(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, SubstringT const& substring)
{
typedef aux::unary_function_terminal< attribute_ends_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type, FallbackPolicyT > > terminal_type;
@@ -97,7 +97,7 @@ ends_with(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, Subst
* which is assumed to be a string, ends with the specified substring.
*/
template< typename DescriptorT, template< typename > class ActorT, typename SubstringT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_ends_with< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_ends_with< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
ends_with(attribute_keyword< DescriptorT, ActorT > const&, SubstringT const& substring)
{
typedef aux::unary_function_terminal< attribute_ends_with< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > terminal_type;
@@ -110,7 +110,7 @@ ends_with(attribute_keyword< DescriptorT, ActorT > const&, SubstringT const& sub
* which is assumed to be a string, ends with the specified substring.
*/
template< typename T, typename SubstringT >
-BOOST_LOG_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_ends_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
+BOOST_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_ends_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > >
ends_with(attribute_name const& name, SubstringT const& substring)
{
typedef aux::unary_function_terminal< attribute_ends_with< T, typename boost::log::aux::make_embedded_string_type< SubstringT >::type > > terminal_type;
diff --git a/3party/boost/boost/log/expressions/predicates/has_attr.hpp b/3party/boost/boost/log/expressions/predicates/has_attr.hpp
index 605d550f76..e4eb72e683 100644
--- a/3party/boost/boost/log/expressions/predicates/has_attr.hpp
+++ b/3party/boost/boost/log/expressions/predicates/has_attr.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/functional/nop.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -131,7 +131,7 @@ public:
* presence in a log record. The node will also check that the attribute value has the specified type, if present.
*/
template< typename AttributeValueT >
-BOOST_LOG_FORCEINLINE phoenix::actor< aux::unary_function_terminal< has_attribute< AttributeValueT > > > has_attr(attribute_name const& name)
+BOOST_FORCEINLINE phoenix::actor< aux::unary_function_terminal< has_attribute< AttributeValueT > > > has_attr(attribute_name const& name)
{
typedef aux::unary_function_terminal< has_attribute< AttributeValueT > > terminal_type;
phoenix::actor< terminal_type > act = {{ terminal_type(name) }};
@@ -142,7 +142,7 @@ BOOST_LOG_FORCEINLINE phoenix::actor< aux::unary_function_terminal< has_attribut
* The function generates a terminal node in a template expression. The node will check for the attribute value
* presence in a log record.
*/
-BOOST_LOG_FORCEINLINE phoenix::actor< aux::unary_function_terminal< has_attribute< void > > > has_attr(attribute_name const& name)
+BOOST_FORCEINLINE phoenix::actor< aux::unary_function_terminal< has_attribute< void > > > has_attr(attribute_name const& name)
{
typedef aux::unary_function_terminal< has_attribute< void > > terminal_type;
phoenix::actor< terminal_type > act = {{ terminal_type(name) }};
@@ -154,7 +154,7 @@ BOOST_LOG_FORCEINLINE phoenix::actor< aux::unary_function_terminal< has_attribut
* presence in a log record. The node will also check that the attribute value has the specified type, if present.
*/
template< typename DescriptorT, template< typename > class ActorT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< has_attribute< typename DescriptorT::value_type > > > has_attr(attribute_keyword< DescriptorT, ActorT > const&)
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< has_attribute< typename DescriptorT::value_type > > > has_attr(attribute_keyword< DescriptorT, ActorT > const&)
{
typedef aux::unary_function_terminal< has_attribute< typename DescriptorT::value_type > > terminal_type;
ActorT< terminal_type > act = {{ terminal_type(DescriptorT::get_name()) }};
diff --git a/3party/boost/boost/log/expressions/predicates/is_debugger_present.hpp b/3party/boost/boost/log/expressions/predicates/is_debugger_present.hpp
index cde74b0502..f7427c8a90 100644
--- a/3party/boost/boost/log/expressions/predicates/is_debugger_present.hpp
+++ b/3party/boost/boost/log/expressions/predicates/is_debugger_present.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,7 +17,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/expressions/predicates/is_in_range.hpp b/3party/boost/boost/log/expressions/predicates/is_in_range.hpp
index 672bcfa025..e819d2bfe2 100644
--- a/3party/boost/boost/log/expressions/predicates/is_in_range.hpp
+++ b/3party/boost/boost/log/expressions/predicates/is_in_range.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/functional/in_range.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -85,7 +85,7 @@ public:
* is in the specified range. The range must be half-open, that is the predicate will be equivalent to <tt>least <= attr < most</tt>.
*/
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, typename BoundaryT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_is_in_range< T, typename boost::log::aux::make_embedded_string_type< BoundaryT >::type, FallbackPolicyT > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_is_in_range< T, typename boost::log::aux::make_embedded_string_type< BoundaryT >::type, FallbackPolicyT > > >
is_in_range(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, BoundaryT const& least, BoundaryT const& most)
{
typedef typename boost::log::aux::make_embedded_string_type< BoundaryT >::type boundary_type;
@@ -99,7 +99,7 @@ is_in_range(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, Bou
* is in the specified range. The range must be half-open, that is the predicate will be equivalent to <tt>least <= attr < most</tt>.
*/
template< typename DescriptorT, template< typename > class ActorT, typename BoundaryT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_is_in_range< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< BoundaryT >::type > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_is_in_range< typename DescriptorT::value_type, typename boost::log::aux::make_embedded_string_type< BoundaryT >::type > > >
is_in_range(attribute_keyword< DescriptorT, ActorT > const&, BoundaryT const& least, BoundaryT const& most)
{
typedef typename boost::log::aux::make_embedded_string_type< BoundaryT >::type boundary_type;
@@ -113,7 +113,7 @@ is_in_range(attribute_keyword< DescriptorT, ActorT > const&, BoundaryT const& le
* is in the specified range. The range must be half-open, that is the predicate will be equivalent to <tt>least <= attr < most</tt>.
*/
template< typename T, typename BoundaryT >
-BOOST_LOG_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_is_in_range< T, typename boost::log::aux::make_embedded_string_type< BoundaryT >::type > > >
+BOOST_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_is_in_range< T, typename boost::log::aux::make_embedded_string_type< BoundaryT >::type > > >
is_in_range(attribute_name const& name, BoundaryT const& least, BoundaryT const& most)
{
typedef typename boost::log::aux::make_embedded_string_type< BoundaryT >::type boundary_type;
diff --git a/3party/boost/boost/log/expressions/predicates/matches.hpp b/3party/boost/boost/log/expressions/predicates/matches.hpp
index fed3ef7805..798f2e7e4f 100644
--- a/3party/boost/boost/log/expressions/predicates/matches.hpp
+++ b/3party/boost/boost/log/expressions/predicates/matches.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/functional/matches.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -39,18 +39,11 @@ namespace expressions {
/*!
* The predicate checks if the attribute value matches a regular expression. The attribute value is assumed to be of a string type.
*/
-#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
-
-template< typename T, typename RegexT, typename FallbackPolicyT = fallback_to_none >
-using attribute_matches = aux::attribute_predicate< T, RegexT, matches_fun, FallbackPolicyT >;
-
-#else // !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
-
template< typename T, typename RegexT, typename FallbackPolicyT = fallback_to_none >
class attribute_matches :
- public aux::attribute_predicate< T, RegexT, matches_fun, FallbackPolicyT >
+ public aux::attribute_predicate< T, typename boost::log::aux::match_traits< RegexT >::compiled_type, matches_fun, FallbackPolicyT >
{
- typedef aux::attribute_predicate< T, RegexT, matches_fun, FallbackPolicyT > base_type;
+ typedef aux::attribute_predicate< T, typename boost::log::aux::match_traits< RegexT >::compiled_type, matches_fun, FallbackPolicyT > base_type;
public:
/*!
@@ -59,7 +52,7 @@ public:
* \param name Attribute name
* \param rex The regular expression to match the attribute value against
*/
- attribute_matches(attribute_name const& name, RegexT const& rex) : base_type(name, rex)
+ attribute_matches(attribute_name const& name, RegexT const& rex) : base_type(name, boost::log::aux::match_traits< RegexT >::compile(rex))
{
}
@@ -71,19 +64,17 @@ public:
* \param arg Additional parameter for the fallback policy
*/
template< typename U >
- attribute_matches(attribute_name const& name, RegexT const& rex, U const& arg) : base_type(name, rex, arg)
+ attribute_matches(attribute_name const& name, RegexT const& rex, U const& arg) : base_type(name, boost::log::aux::match_traits< RegexT >::compile(rex), arg)
{
}
};
-#endif // !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
-
/*!
* The function generates a terminal node in a template expression. The node will check if the attribute value,
* which is assumed to be a string, matches the specified regular expression.
*/
template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, typename RegexT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_matches< T, RegexT, FallbackPolicyT > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_matches< T, RegexT, FallbackPolicyT > > >
matches(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, RegexT const& rex)
{
typedef aux::unary_function_terminal< attribute_matches< T, RegexT, FallbackPolicyT > > terminal_type;
@@ -96,7 +87,7 @@ matches(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& attr, RegexT
* which is assumed to be a string, matches the specified regular expression.
*/
template< typename DescriptorT, template< typename > class ActorT, typename RegexT >
-BOOST_LOG_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_matches< typename DescriptorT::value_type, RegexT > > >
+BOOST_FORCEINLINE ActorT< aux::unary_function_terminal< attribute_matches< typename DescriptorT::value_type, RegexT > > >
matches(attribute_keyword< DescriptorT, ActorT > const&, RegexT const& rex)
{
typedef aux::unary_function_terminal< attribute_matches< typename DescriptorT::value_type, RegexT > > terminal_type;
@@ -109,7 +100,7 @@ matches(attribute_keyword< DescriptorT, ActorT > const&, RegexT const& rex)
* which is assumed to be a string, matches the specified regular expression.
*/
template< typename T, typename RegexT >
-BOOST_LOG_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_matches< T, RegexT > > >
+BOOST_FORCEINLINE phoenix::actor< aux::unary_function_terminal< attribute_matches< T, RegexT > > >
matches(attribute_name const& name, RegexT const& rex)
{
typedef aux::unary_function_terminal< attribute_matches< T, RegexT > > terminal_type;
diff --git a/3party/boost/boost/log/expressions/record.hpp b/3party/boost/boost/log/expressions/record.hpp
index cf436b6a52..d695c2aa65 100644
--- a/3party/boost/boost/log/expressions/record.hpp
+++ b/3party/boost/boost/log/expressions/record.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/auto_flush.hpp b/3party/boost/boost/log/keywords/auto_flush.hpp
index 98dfb10054..0c3b53a6a3 100644
--- a/3party/boost/boost/log/keywords/auto_flush.hpp
+++ b/3party/boost/boost/log/keywords/auto_flush.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/channel.hpp b/3party/boost/boost/log/keywords/channel.hpp
index a6521f20c2..b4bbb17a8f 100644
--- a/3party/boost/boost/log/keywords/channel.hpp
+++ b/3party/boost/boost/log/keywords/channel.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/delimiter.hpp b/3party/boost/boost/log/keywords/delimiter.hpp
index b6722e0625..80a2e70366 100644
--- a/3party/boost/boost/log/keywords/delimiter.hpp
+++ b/3party/boost/boost/log/keywords/delimiter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/depth.hpp b/3party/boost/boost/log/keywords/depth.hpp
index c1acfa21df..87ffcc98d4 100644
--- a/3party/boost/boost/log/keywords/depth.hpp
+++ b/3party/boost/boost/log/keywords/depth.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/empty_marker.hpp b/3party/boost/boost/log/keywords/empty_marker.hpp
new file mode 100644
index 0000000000..6108315be7
--- /dev/null
+++ b/3party/boost/boost/log/keywords/empty_marker.hpp
@@ -0,0 +1,40 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2014.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file keywords/empty_marker.hpp
+ * \author Andrey Semashev
+ * \date 15.03.2014
+ *
+ * The header contains the \c empty_marker keyword declaration.
+ */
+
+#ifndef BOOST_LOG_KEYWORDS_EMPTY_MARKER_HPP_INCLUDED_
+#define BOOST_LOG_KEYWORDS_EMPTY_MARKER_HPP_INCLUDED_
+
+#include <boost/parameter/keyword.hpp>
+#include <boost/log/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace keywords {
+
+//! The keyword for passing the marker for the empty list of scopes to the \c named_scope formatter
+BOOST_PARAMETER_KEYWORD(tag, empty_marker)
+
+} // namespace keywords
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#endif // BOOST_LOG_KEYWORDS_EMPTY_MARKER_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/keywords/facility.hpp b/3party/boost/boost/log/keywords/facility.hpp
index 8fab71ddb0..04d9b91b7b 100644
--- a/3party/boost/boost/log/keywords/facility.hpp
+++ b/3party/boost/boost/log/keywords/facility.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/file_name.hpp b/3party/boost/boost/log/keywords/file_name.hpp
index 153c61db95..ce70a54ccd 100644
--- a/3party/boost/boost/log/keywords/file_name.hpp
+++ b/3party/boost/boost/log/keywords/file_name.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/filter.hpp b/3party/boost/boost/log/keywords/filter.hpp
index bc1a080f0e..7b5ab06b5f 100644
--- a/3party/boost/boost/log/keywords/filter.hpp
+++ b/3party/boost/boost/log/keywords/filter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/format.hpp b/3party/boost/boost/log/keywords/format.hpp
index f02e72b13c..1e5c450203 100644
--- a/3party/boost/boost/log/keywords/format.hpp
+++ b/3party/boost/boost/log/keywords/format.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/ident.hpp b/3party/boost/boost/log/keywords/ident.hpp
index dafda8cd73..4847cc1f4f 100644
--- a/3party/boost/boost/log/keywords/ident.hpp
+++ b/3party/boost/boost/log/keywords/ident.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/incomplete_marker.hpp b/3party/boost/boost/log/keywords/incomplete_marker.hpp
new file mode 100644
index 0000000000..1e6d3ab18e
--- /dev/null
+++ b/3party/boost/boost/log/keywords/incomplete_marker.hpp
@@ -0,0 +1,40 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2014.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file keywords/incomplete_marker.hpp
+ * \author Andrey Semashev
+ * \date 15.03.2014
+ *
+ * The header contains the \c incomplete_marker keyword declaration.
+ */
+
+#ifndef BOOST_LOG_KEYWORDS_INCOMPLETE_MARKER_HPP_INCLUDED_
+#define BOOST_LOG_KEYWORDS_INCOMPLETE_MARKER_HPP_INCLUDED_
+
+#include <boost/parameter/keyword.hpp>
+#include <boost/log/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace keywords {
+
+//! The keyword for passing incomplete marker for the list of scopes to the \c named_scope formatter
+BOOST_PARAMETER_KEYWORD(tag, incomplete_marker)
+
+} // namespace keywords
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#endif // BOOST_LOG_KEYWORDS_INCOMPLETE_MARKER_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/keywords/ip_version.hpp b/3party/boost/boost/log/keywords/ip_version.hpp
index 6e8f79ba76..c788e191e5 100644
--- a/3party/boost/boost/log/keywords/ip_version.hpp
+++ b/3party/boost/boost/log/keywords/ip_version.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/iteration.hpp b/3party/boost/boost/log/keywords/iteration.hpp
index ae4fd51e01..6fee81ee95 100644
--- a/3party/boost/boost/log/keywords/iteration.hpp
+++ b/3party/boost/boost/log/keywords/iteration.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/log_name.hpp b/3party/boost/boost/log/keywords/log_name.hpp
index 8fc3e6ade0..e252d29722 100644
--- a/3party/boost/boost/log/keywords/log_name.hpp
+++ b/3party/boost/boost/log/keywords/log_name.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/log_source.hpp b/3party/boost/boost/log/keywords/log_source.hpp
index 622413c3bc..94f51efb12 100644
--- a/3party/boost/boost/log/keywords/log_source.hpp
+++ b/3party/boost/boost/log/keywords/log_source.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/max_size.hpp b/3party/boost/boost/log/keywords/max_size.hpp
index b996810b11..5a91797fa9 100644
--- a/3party/boost/boost/log/keywords/max_size.hpp
+++ b/3party/boost/boost/log/keywords/max_size.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/message_file.hpp b/3party/boost/boost/log/keywords/message_file.hpp
index af8c762354..2f9c8f7f3c 100644
--- a/3party/boost/boost/log/keywords/message_file.hpp
+++ b/3party/boost/boost/log/keywords/message_file.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/min_free_space.hpp b/3party/boost/boost/log/keywords/min_free_space.hpp
index 958f29d957..dc6958c2b8 100644
--- a/3party/boost/boost/log/keywords/min_free_space.hpp
+++ b/3party/boost/boost/log/keywords/min_free_space.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/open_mode.hpp b/3party/boost/boost/log/keywords/open_mode.hpp
index 0e3ae0d17c..6456b42037 100644
--- a/3party/boost/boost/log/keywords/open_mode.hpp
+++ b/3party/boost/boost/log/keywords/open_mode.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/order.hpp b/3party/boost/boost/log/keywords/order.hpp
index 634ed17ee1..7e2cc10708 100644
--- a/3party/boost/boost/log/keywords/order.hpp
+++ b/3party/boost/boost/log/keywords/order.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/ordering_window.hpp b/3party/boost/boost/log/keywords/ordering_window.hpp
index 5b06ec1bcc..6458aba343 100644
--- a/3party/boost/boost/log/keywords/ordering_window.hpp
+++ b/3party/boost/boost/log/keywords/ordering_window.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/registration.hpp b/3party/boost/boost/log/keywords/registration.hpp
index 884e0ca280..41db2d1972 100644
--- a/3party/boost/boost/log/keywords/registration.hpp
+++ b/3party/boost/boost/log/keywords/registration.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/rotation_size.hpp b/3party/boost/boost/log/keywords/rotation_size.hpp
index be15c70b09..f87841edbc 100644
--- a/3party/boost/boost/log/keywords/rotation_size.hpp
+++ b/3party/boost/boost/log/keywords/rotation_size.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/scan_method.hpp b/3party/boost/boost/log/keywords/scan_method.hpp
index 6dee866087..8a203de53e 100644
--- a/3party/boost/boost/log/keywords/scan_method.hpp
+++ b/3party/boost/boost/log/keywords/scan_method.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/severity.hpp b/3party/boost/boost/log/keywords/severity.hpp
index a8636b8589..cc40735b6b 100644
--- a/3party/boost/boost/log/keywords/severity.hpp
+++ b/3party/boost/boost/log/keywords/severity.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/start_thread.hpp b/3party/boost/boost/log/keywords/start_thread.hpp
index 9e90716828..bfe9d7cc19 100644
--- a/3party/boost/boost/log/keywords/start_thread.hpp
+++ b/3party/boost/boost/log/keywords/start_thread.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/target.hpp b/3party/boost/boost/log/keywords/target.hpp
index e8301edb51..00e36fb1e5 100644
--- a/3party/boost/boost/log/keywords/target.hpp
+++ b/3party/boost/boost/log/keywords/target.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/time_based_rotation.hpp b/3party/boost/boost/log/keywords/time_based_rotation.hpp
index 6cddbe256f..7e613dda11 100644
--- a/3party/boost/boost/log/keywords/time_based_rotation.hpp
+++ b/3party/boost/boost/log/keywords/time_based_rotation.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/keywords/use_impl.hpp b/3party/boost/boost/log/keywords/use_impl.hpp
index b104098cf9..422e4b36ea 100644
--- a/3party/boost/boost/log/keywords/use_impl.hpp
+++ b/3party/boost/boost/log/keywords/use_impl.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/parameter/keyword.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks.hpp b/3party/boost/boost/log/sinks.hpp
index ed6abef84a..95a4131401 100644
--- a/3party/boost/boost/log/sinks.hpp
+++ b/3party/boost/boost/log/sinks.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/sinks/event_log_backend.hpp>
#endif // BOOST_WINDOWS
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/async_frontend.hpp b/3party/boost/boost/log/sinks/async_frontend.hpp
index 1430695c01..d85421e8a1 100644
--- a/3party/boost/boost/log/sinks/async_frontend.hpp
+++ b/3party/boost/boost/log/sinks/async_frontend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,12 +15,9 @@
#ifndef BOOST_LOG_SINKS_ASYNC_FRONTEND_HPP_INCLUDED_
#define BOOST_LOG_SINKS_ASYNC_FRONTEND_HPP_INCLUDED_
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/static_assert.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -29,8 +26,11 @@
#endif
#include <boost/bind.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared_object.hpp>
#include <boost/thread/locks.hpp>
-#include <boost/thread/mutex.hpp>
+#include <boost/thread/recursive_mutex.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/condition_variable.hpp>
#include <boost/log/exceptions.hpp>
@@ -86,7 +86,6 @@ namespace sinks {
template< typename SinkBackendT, typename QueueingStrategyT = unbounded_fifo_queue >
class asynchronous_sink :
public aux::make_sink_frontend_base< SinkBackendT >::type,
- private boost::log::aux::locking_ptr_counter_base,
public QueueingStrategyT
{
typedef typename aux::make_sink_frontend_base< SinkBackendT >::type base_type;
@@ -94,7 +93,7 @@ class asynchronous_sink :
private:
//! Backend synchronization mutex type
- typedef boost::mutex backend_mutex_type;
+ typedef boost::recursive_mutex backend_mutex_type;
//! Frontend synchronization mutex type
typedef typename base_type::mutex_type frontend_mutex_type;
@@ -187,7 +186,7 @@ public:
#ifndef BOOST_LOG_DOXYGEN_PASS
//! A pointer type that locks the backend until it's destroyed
- typedef boost::log::aux::locking_ptr< sink_backend_type > locked_backend_ptr;
+ typedef boost::log::aux::locking_ptr< sink_backend_type, backend_mutex_type > locked_backend_ptr;
#else // BOOST_LOG_DOXYGEN_PASS
@@ -271,9 +270,7 @@ public:
*/
locked_backend_ptr locked_backend()
{
- return locked_backend_ptr(
- m_pBackend,
- static_cast< boost::log::aux::locking_ptr_counter_base& >(*this));
+ return locked_backend_ptr(m_pBackend, m_BackendMutex);
}
/*!
@@ -425,18 +422,13 @@ private:
boost::thread(boost::bind(&asynchronous_sink::run, this)).swap(m_DedicatedFeedingThread);
}
- // locking_ptr_counter_base methods
- void lock() { m_BackendMutex.lock(); }
- bool try_lock() { return m_BackendMutex.try_lock(); }
- void unlock() { m_BackendMutex.unlock(); }
-
//! The record feeding loop
void do_feed_records()
{
while (!m_StopRequested)
{
record_view rec;
- register bool dequeued = false;
+ bool dequeued = false;
if (!m_FlushRequested)
dequeued = queue_base_type::try_dequeue_ready(rec);
else
diff --git a/3party/boost/boost/log/sinks/attribute_mapping.hpp b/3party/boost/boost/log/sinks/attribute_mapping.hpp
index 1f1bc5c931..a336265ff4 100644
--- a/3party/boost/boost/log/sinks/attribute_mapping.hpp
+++ b/3party/boost/boost/log/sinks/attribute_mapping.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/attributes/value_visitation.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/basic_sink_backend.hpp b/3party/boost/boost/log/sinks/basic_sink_backend.hpp
index 06c79d8f4d..9517bd2803 100644
--- a/3party/boost/boost/log/sinks/basic_sink_backend.hpp
+++ b/3party/boost/boost/log/sinks/basic_sink_backend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/attribute_value_set.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -45,10 +45,10 @@ struct basic_sink_backend
//! Frontend requirements tag
typedef FrontendRequirementsT frontend_requirements;
- BOOST_LOG_DEFAULTED_FUNCTION(basic_sink_backend(), {})
+ BOOST_DEFAULTED_FUNCTION(basic_sink_backend(), {})
- BOOST_LOG_DELETED_FUNCTION(basic_sink_backend(basic_sink_backend const&))
- BOOST_LOG_DELETED_FUNCTION(basic_sink_backend& operator= (basic_sink_backend const&))
+ BOOST_DELETED_FUNCTION(basic_sink_backend(basic_sink_backend const&))
+ BOOST_DELETED_FUNCTION(basic_sink_backend& operator= (basic_sink_backend const&))
};
/*!
diff --git a/3party/boost/boost/log/sinks/basic_sink_frontend.hpp b/3party/boost/boost/log/sinks/basic_sink_frontend.hpp
index 1d687f6955..bd3f6a08f6 100644
--- a/3party/boost/boost/log/sinks/basic_sink_frontend.hpp
+++ b/3party/boost/boost/log/sinks/basic_sink_frontend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -32,11 +32,10 @@
#include <boost/thread/locks.hpp>
#include <boost/log/detail/locks.hpp>
#include <boost/log/detail/light_rw_mutex.hpp>
-#include <boost/concept_check.hpp>
#endif // !defined(BOOST_LOG_NO_THREADS)
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/block_on_overflow.hpp b/3party/boost/boost/log/sinks/block_on_overflow.hpp
index 4dd3420989..a23b5ff875 100644
--- a/3party/boost/boost/log/sinks/block_on_overflow.hpp
+++ b/3party/boost/boost/log/sinks/block_on_overflow.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -74,16 +74,11 @@ private:
//! Blocked threads
thread_contexts m_thread_contexts;
-private:
- // Copying prohibited
- block_on_overflow(block_on_overflow const&);
- block_on_overflow& operator= (block_on_overflow const&);
-
public:
/*!
* Default constructor.
*/
- block_on_overflow() {}
+ BOOST_DEFAULTED_FUNCTION(block_on_overflow(), {})
/*!
* This method is called by the queue when overflow is detected.
@@ -134,6 +129,10 @@ public:
m_thread_contexts.pop_front();
}
}
+
+ // Copying prohibited
+ BOOST_DELETED_FUNCTION(block_on_overflow(block_on_overflow const&))
+ BOOST_DELETED_FUNCTION(block_on_overflow& operator= (block_on_overflow const&))
#endif // BOOST_LOG_DOXYGEN_PASS
};
diff --git a/3party/boost/boost/log/sinks/bounded_fifo_queue.hpp b/3party/boost/boost/log/sinks/bounded_fifo_queue.hpp
index 82ec3c79a3..59b157e259 100644
--- a/3party/boost/boost/log/sinks/bounded_fifo_queue.hpp
+++ b/3party/boost/boost/log/sinks/bounded_fifo_queue.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -139,8 +139,7 @@ protected:
{
rec.swap(m_queue.front());
m_queue.pop();
- if (size == MaxQueueSizeV)
- overflow_strategy::on_queue_space_available();
+ overflow_strategy::on_queue_space_available();
return true;
}
@@ -159,8 +158,7 @@ protected:
{
rec.swap(m_queue.front());
m_queue.pop();
- if (size == MaxQueueSizeV)
- overflow_strategy::on_queue_space_available();
+ overflow_strategy::on_queue_space_available();
return true;
}
else
diff --git a/3party/boost/boost/log/sinks/bounded_ordering_queue.hpp b/3party/boost/boost/log/sinks/bounded_ordering_queue.hpp
index 3a0057f8fb..76fe8d6044 100644
--- a/3party/boost/boost/log/sinks/bounded_ordering_queue.hpp
+++ b/3party/boost/boost/log/sinks/bounded_ordering_queue.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -30,14 +30,13 @@
#include <queue>
#include <vector>
#include <boost/cstdint.hpp>
-#include <boost/move/core.hpp>
-#include <boost/move/utility.hpp>
#include <boost/thread/locks.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
#include <boost/thread/thread_time.hpp>
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <boost/log/detail/timestamp.hpp>
+#include <boost/log/detail/enqueued_record.hpp>
#include <boost/log/keywords/order.hpp>
#include <boost/log/keywords/ordering_window.hpp>
#include <boost/log/core/record_view.hpp>
@@ -75,64 +74,12 @@ class bounded_ordering_queue :
private:
typedef OverflowStrategyT overflow_strategy;
typedef boost::mutex mutex_type;
-
- //! Log record with enqueueing timestamp
- class enqueued_record
- {
- BOOST_COPYABLE_AND_MOVABLE(enqueued_record)
-
- public:
- //! Ordering predicate
- struct order :
- public OrderT
- {
- typedef typename OrderT::result_type result_type;
-
- order() {}
- order(order const& that) : OrderT(static_cast< OrderT const& >(that)) {}
- order(OrderT const& that) : OrderT(that) {}
-
- result_type operator() (enqueued_record const& left, enqueued_record const& right) const
- {
- // std::priority_queue requires ordering with semantics of std::greater, so we swap arguments
- return OrderT::operator() (right.m_record, left.m_record);
- }
- };
-
- boost::log::aux::timestamp m_timestamp;
- record_view m_record;
-
- enqueued_record(enqueued_record const& that) : m_timestamp(that.m_timestamp), m_record(that.m_record)
- {
- }
- enqueued_record(BOOST_RV_REF(enqueued_record) that) :
- m_timestamp(that.m_timestamp),
- m_record(boost::move(that.m_record))
- {
- }
- explicit enqueued_record(record_view const& rec) :
- m_timestamp(boost::log::aux::get_timestamp()),
- m_record(rec)
- {
- }
- enqueued_record& operator= (BOOST_COPY_ASSIGN_REF(enqueued_record) that)
- {
- m_timestamp = that.m_timestamp;
- m_record = that.m_record;
- return *this;
- }
- enqueued_record& operator= (BOOST_RV_REF(enqueued_record) that)
- {
- m_timestamp = that.m_timestamp;
- m_record = boost::move(that.m_record);
- return *this;
- }
- };
+ typedef sinks::aux::enqueued_record enqueued_record;
typedef std::priority_queue<
enqueued_record,
std::vector< enqueued_record >,
- typename enqueued_record::order
+ enqueued_record::order< OrderT >
> queue_type;
private:
@@ -233,8 +180,7 @@ protected:
// We got a new element
rec = elem.m_record;
m_queue.pop();
- if (size == MaxQueueSizeV)
- overflow_strategy::on_queue_space_available();
+ overflow_strategy::on_queue_space_available();
return true;
}
}
@@ -252,8 +198,7 @@ protected:
enqueued_record const& elem = m_queue.top();
rec = elem.m_record;
m_queue.pop();
- if (size == MaxQueueSizeV)
- overflow_strategy::on_queue_space_available();
+ overflow_strategy::on_queue_space_available();
return true;
}
@@ -277,8 +222,7 @@ protected:
{
rec = elem.m_record;
m_queue.pop();
- if (size == MaxQueueSizeV)
- overflow_strategy::on_queue_space_available();
+ overflow_strategy::on_queue_space_available();
return true;
}
else
diff --git a/3party/boost/boost/log/sinks/debug_output_backend.hpp b/3party/boost/boost/log/sinks/debug_output_backend.hpp
index b3cb5f1c6c..034390595a 100644
--- a/3party/boost/boost/log/sinks/debug_output_backend.hpp
+++ b/3party/boost/boost/log/sinks/debug_output_backend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <string>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/drop_on_overflow.hpp b/3party/boost/boost/log/sinks/drop_on_overflow.hpp
index 0857f9048c..cbc2d6370c 100644
--- a/3party/boost/boost/log/sinks/drop_on_overflow.hpp
+++ b/3party/boost/boost/log/sinks/drop_on_overflow.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/core/record_view.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/event_log_backend.hpp b/3party/boost/boost/log/sinks/event_log_backend.hpp
index 286fcfac75..5e539e57a9 100644
--- a/3party/boost/boost/log/sinks/event_log_backend.hpp
+++ b/3party/boost/boost/log/sinks/event_log_backend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/event_log_constants.hpp b/3party/boost/boost/log/sinks/event_log_constants.hpp
index 148008ba7e..e6c361a420 100644
--- a/3party/boost/boost/log/sinks/event_log_constants.hpp
+++ b/3party/boost/boost/log/sinks/event_log_constants.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/frontend_requirements.hpp b/3party/boost/boost/log/sinks/frontend_requirements.hpp
index 79b9dad443..086b023b29 100644
--- a/3party/boost/boost/log/sinks/frontend_requirements.hpp
+++ b/3party/boost/boost/log/sinks/frontend_requirements.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/sink.hpp b/3party/boost/boost/log/sinks/sink.hpp
index e96ac2b50e..516957d44b 100644
--- a/3party/boost/boost/log/sinks/sink.hpp
+++ b/3party/boost/boost/log/sinks/sink.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/attributes/attribute_value_set.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -100,8 +100,8 @@ public:
*/
bool is_cross_thread() const BOOST_NOEXCEPT { return m_cross_thread; }
- BOOST_LOG_DELETED_FUNCTION(sink(sink const&))
- BOOST_LOG_DELETED_FUNCTION(sink& operator= (sink const&))
+ BOOST_DELETED_FUNCTION(sink(sink const&))
+ BOOST_DELETED_FUNCTION(sink& operator= (sink const&))
};
} // namespace sinks
diff --git a/3party/boost/boost/log/sinks/sync_frontend.hpp b/3party/boost/boost/log/sinks/sync_frontend.hpp
index 22def8537c..146cc9dc44 100644
--- a/3party/boost/boost/log/sinks/sync_frontend.hpp
+++ b/3party/boost/boost/log/sinks/sync_frontend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,7 +17,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -25,10 +25,10 @@
#error Boost.Log: Synchronous sink frontend is only supported in multithreaded environment
#endif
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
#include <boost/static_assert.hpp>
-#include <boost/thread/mutex.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared_object.hpp>
+#include <boost/thread/recursive_mutex.hpp>
#include <boost/log/detail/locking_ptr.hpp>
#include <boost/log/detail/parameter_tools.hpp>
#include <boost/log/core/record_view.hpp>
@@ -59,14 +59,13 @@ namespace sinks {
*/
template< typename SinkBackendT >
class synchronous_sink :
- public aux::make_sink_frontend_base< SinkBackendT >::type,
- private boost::log::aux::locking_ptr_counter_base
+ public aux::make_sink_frontend_base< SinkBackendT >::type
{
typedef typename aux::make_sink_frontend_base< SinkBackendT >::type base_type;
private:
//! Synchronization mutex type
- typedef boost::mutex backend_mutex_type;
+ typedef boost::recursive_mutex backend_mutex_type;
public:
//! Sink implementation type
@@ -78,7 +77,7 @@ public:
#ifndef BOOST_LOG_DOXYGEN_PASS
//! A pointer type that locks the backend until it's destroyed
- typedef boost::log::aux::locking_ptr< sink_backend_type > locked_backend_ptr;
+ typedef boost::log::aux::locking_ptr< sink_backend_type, backend_mutex_type > locked_backend_ptr;
#else // BOOST_LOG_DOXYGEN_PASS
@@ -124,9 +123,7 @@ public:
*/
locked_backend_ptr locked_backend()
{
- return locked_backend_ptr(
- m_pBackend,
- static_cast< boost::log::aux::locking_ptr_counter_base& >(*this));
+ return locked_backend_ptr(m_pBackend, m_BackendMutex);
}
/*!
@@ -154,14 +151,6 @@ public:
{
base_type::flush_backend(m_BackendMutex, *m_pBackend);
}
-
-private:
-#ifndef BOOST_LOG_DOXYGEN_PASS
- // locking_ptr_counter_base methods
- void lock() { m_BackendMutex.lock(); }
- bool try_lock() { return m_BackendMutex.try_lock(); }
- void unlock() { m_BackendMutex.unlock(); }
-#endif // BOOST_LOG_DOXYGEN_PASS
};
#undef BOOST_LOG_SINK_CTOR_FORWARD_INTERNAL
diff --git a/3party/boost/boost/log/sinks/syslog_backend.hpp b/3party/boost/boost/log/sinks/syslog_backend.hpp
index de57f68463..35cfb540ab 100644
--- a/3party/boost/boost/log/sinks/syslog_backend.hpp
+++ b/3party/boost/boost/log/sinks/syslog_backend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,14 +17,13 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
#ifndef BOOST_LOG_WITHOUT_SYSLOG
#include <string>
-#include <boost/shared_ptr.hpp>
#include <boost/log/detail/asio_fwd.hpp>
#include <boost/log/detail/light_function.hpp>
#include <boost/log/detail/parameter_tools.hpp>
diff --git a/3party/boost/boost/log/sinks/syslog_constants.hpp b/3party/boost/boost/log/sinks/syslog_constants.hpp
index 5fe7aae94d..d320ebbbac 100644
--- a/3party/boost/boost/log/sinks/syslog_constants.hpp
+++ b/3party/boost/boost/log/sinks/syslog_constants.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/text_file_backend.hpp b/3party/boost/boost/log/sinks/text_file_backend.hpp
index 57dab240b8..1d39a633c0 100644
--- a/3party/boost/boost/log/sinks/text_file_backend.hpp
+++ b/3party/boost/boost/log/sinks/text_file_backend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <ostream>
#include <boost/limits.hpp>
#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
#include <boost/date_time/date_defs.hpp>
#include <boost/date_time/special_defs.hpp>
#include <boost/date_time/gregorian/greg_day.hpp>
@@ -41,7 +41,7 @@
#include <boost/log/sinks/frontend_requirements.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -71,7 +71,7 @@ struct BOOST_LOG_NO_VTABLE collector
/*!
* Default constructor
*/
- BOOST_LOG_DEFAULTED_FUNCTION(collector(), {})
+ BOOST_DEFAULTED_FUNCTION(collector(), {})
/*!
* Virtual destructor
@@ -119,8 +119,8 @@ struct BOOST_LOG_NO_VTABLE collector
virtual uintmax_t scan_for_files(
scan_method method, filesystem::path const& pattern = filesystem::path(), unsigned int* counter = 0) = 0;
- BOOST_LOG_DELETED_FUNCTION(collector(collector const&))
- BOOST_LOG_DELETED_FUNCTION(collector& operator= (collector const&))
+ BOOST_DELETED_FUNCTION(collector(collector const&))
+ BOOST_DELETED_FUNCTION(collector& operator= (collector const&))
};
namespace aux {
diff --git a/3party/boost/boost/log/sinks/text_multifile_backend.hpp b/3party/boost/boost/log/sinks/text_multifile_backend.hpp
index 914c91cf8c..d2f897892e 100644
--- a/3party/boost/boost/log/sinks/text_multifile_backend.hpp
+++ b/3party/boost/boost/log/sinks/text_multifile_backend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -30,7 +30,7 @@
#include <boost/log/utility/formatting_ostream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/text_ostream_backend.hpp b/3party/boost/boost/log/sinks/text_ostream_backend.hpp
index 4681de7304..4c93d31357 100644
--- a/3party/boost/boost/log/sinks/text_ostream_backend.hpp
+++ b/3party/boost/boost/log/sinks/text_ostream_backend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -16,13 +16,13 @@
#define BOOST_LOG_SINKS_TEXT_OSTREAM_BACKEND_HPP_INCLUDED_
#include <ostream>
-#include <boost/shared_ptr.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/sinks/basic_sink_backend.hpp>
#include <boost/log/sinks/frontend_requirements.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/unbounded_fifo_queue.hpp b/3party/boost/boost/log/sinks/unbounded_fifo_queue.hpp
index 4e48513594..2782c5476c 100644
--- a/3party/boost/boost/log/sinks/unbounded_fifo_queue.hpp
+++ b/3party/boost/boost/log/sinks/unbounded_fifo_queue.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sinks/unbounded_ordering_queue.hpp b/3party/boost/boost/log/sinks/unbounded_ordering_queue.hpp
index ffd46babe3..f67e629a3e 100644
--- a/3party/boost/boost/log/sinks/unbounded_ordering_queue.hpp
+++ b/3party/boost/boost/log/sinks/unbounded_ordering_queue.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -29,14 +29,13 @@
#include <queue>
#include <vector>
#include <boost/cstdint.hpp>
-#include <boost/move/core.hpp>
-#include <boost/move/utility.hpp>
#include <boost/thread/locks.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
#include <boost/thread/thread_time.hpp>
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <boost/log/detail/timestamp.hpp>
+#include <boost/log/detail/enqueued_record.hpp>
#include <boost/log/keywords/order.hpp>
#include <boost/log/keywords/ordering_window.hpp>
#include <boost/log/core/record_view.hpp>
@@ -71,64 +70,12 @@ class unbounded_ordering_queue
{
private:
typedef boost::mutex mutex_type;
-
- //! Log record with enqueueing timestamp
- class enqueued_record
- {
- BOOST_COPYABLE_AND_MOVABLE(enqueued_record)
-
- public:
- //! Ordering predicate
- struct order :
- public OrderT
- {
- typedef typename OrderT::result_type result_type;
-
- order() {}
- order(order const& that) : OrderT(static_cast< OrderT const& >(that)) {}
- order(OrderT const& that) : OrderT(that) {}
-
- result_type operator() (enqueued_record const& left, enqueued_record const& right) const
- {
- // std::priority_queue requires ordering with semantics of std::greater, so we swap arguments
- return OrderT::operator() (right.m_record, left.m_record);
- }
- };
-
- boost::log::aux::timestamp m_timestamp;
- record_view m_record;
-
- enqueued_record(enqueued_record const& that) : m_timestamp(that.m_timestamp), m_record(that.m_record)
- {
- }
- enqueued_record(BOOST_RV_REF(enqueued_record) that) :
- m_timestamp(that.m_timestamp),
- m_record(boost::move(that.m_record))
- {
- }
- explicit enqueued_record(record_view const& rec) :
- m_timestamp(boost::log::aux::get_timestamp()),
- m_record(rec)
- {
- }
- enqueued_record& operator= (BOOST_COPY_ASSIGN_REF(enqueued_record) that)
- {
- m_timestamp = that.m_timestamp;
- m_record = that.m_record;
- return *this;
- }
- enqueued_record& operator= (BOOST_RV_REF(enqueued_record) that)
- {
- m_timestamp = that.m_timestamp;
- m_record = boost::move(that.m_record);
- return *this;
- }
- };
+ typedef sinks::aux::enqueued_record enqueued_record;
typedef std::priority_queue<
enqueued_record,
std::vector< enqueued_record >,
- typename enqueued_record::order
+ enqueued_record::order< OrderT >
> queue_type;
private:
diff --git a/3party/boost/boost/log/sinks/unlocked_frontend.hpp b/3party/boost/boost/log/sinks/unlocked_frontend.hpp
index ca89a73a19..ab144d57b8 100644
--- a/3party/boost/boost/log/sinks/unlocked_frontend.hpp
+++ b/3party/boost/boost/log/sinks/unlocked_frontend.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,9 +15,9 @@
#ifndef BOOST_LOG_SINKS_UNLOCKED_FRONTEND_HPP_INCLUDED_
#define BOOST_LOG_SINKS_UNLOCKED_FRONTEND_HPP_INCLUDED_
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
#include <boost/static_assert.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared_object.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/parameter_tools.hpp>
#include <boost/log/detail/fake_mutex.hpp>
@@ -25,7 +25,7 @@
#include <boost/log/sinks/frontend_requirements.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sources/basic_logger.hpp b/3party/boost/boost/log/sources/basic_logger.hpp
index 5adac6e155..0f0842934b 100644
--- a/3party/boost/boost/log/sources/basic_logger.hpp
+++ b/3party/boost/boost/log/sources/basic_logger.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,6 @@
#include <utility>
#include <ostream>
#include <boost/assert.hpp>
-#include <boost/shared_ptr.hpp>
#include <boost/move/core.hpp>
#include <boost/move/utility.hpp>
#include <boost/utility/addressof.hpp>
@@ -41,7 +40,7 @@
#include <boost/log/sources/threading_models.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -101,7 +100,7 @@ public:
//! Lock requirement for the remove_all_attributes_unlocked method
typedef boost::log::aux::exclusive_lock_guard< threading_model > remove_all_attributes_lock;
//! Lock requirement for the get_attributes method
- typedef boost::log::aux::shared_lock_guard< threading_model > get_attributes_lock;
+ typedef boost::log::aux::shared_lock_guard< const threading_model > get_attributes_lock;
//! Lock requirement for the open_record_unlocked method
typedef boost::log::aux::shared_lock_guard< threading_model > open_record_lock;
//! Lock requirement for the set_attributes method
@@ -111,7 +110,7 @@ public:
typedef no_lock< threading_model > add_attribute_lock;
typedef no_lock< threading_model > remove_attribute_lock;
typedef no_lock< threading_model > remove_all_attributes_lock;
- typedef no_lock< threading_model > get_attributes_lock;
+ typedef no_lock< const threading_model > get_attributes_lock;
typedef no_lock< threading_model > open_record_lock;
typedef no_lock< threading_model > set_attributes_lock;
#endif
@@ -285,7 +284,7 @@ protected:
}
//! Assignment is closed (should be implemented through copy and swap in the final class)
- BOOST_LOG_DELETED_FUNCTION(basic_logger& operator= (basic_logger const&))
+ BOOST_DELETED_FUNCTION(basic_logger& operator= (basic_logger const&))
};
/*!
@@ -599,7 +598,7 @@ protected:
#define BOOST_LOG_FORWARD_LOGGER_CONSTRUCTORS_IMPL(class_type, typename_keyword)\
public:\
- BOOST_LOG_DEFAULTED_FUNCTION(class_type(), {})\
+ BOOST_DEFAULTED_FUNCTION(class_type(), {})\
class_type(class_type const& that) : class_type::logger_base(\
static_cast< typename_keyword() class_type::logger_base const& >(that)) {}\
class_type(BOOST_RV_REF(class_type) that) : class_type::logger_base(\
diff --git a/3party/boost/boost/log/sources/channel_feature.hpp b/3party/boost/boost/log/sources/channel_feature.hpp
index 8e6079d66d..c93ee6fa2d 100644
--- a/3party/boost/boost/log/sources/channel_feature.hpp
+++ b/3party/boost/boost/log/sources/channel_feature.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/core/record.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sources/channel_logger.hpp b/3party/boost/boost/log/sources/channel_logger.hpp
index e3414de199..737faa1f17 100644
--- a/3party/boost/boost/log/sources/channel_logger.hpp
+++ b/3party/boost/boost/log/sources/channel_logger.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/keywords/channel.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sources/exception_handler_feature.hpp b/3party/boost/boost/log/sources/exception_handler_feature.hpp
index 21b516cfd0..d665d0d84b 100644
--- a/3party/boost/boost/log/sources/exception_handler_feature.hpp
+++ b/3party/boost/boost/log/sources/exception_handler_feature.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/detail/light_function.hpp>
#include <boost/log/detail/locks.hpp>
+#include <boost/log/core/record.hpp>
#include <boost/log/sources/threading_models.hpp>
#include <boost/log/utility/strictest_lock.hpp>
#if !defined(BOOST_LOG_NO_THREADS)
@@ -29,7 +30,7 @@
#endif
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sources/features.hpp b/3party/boost/boost/log/sources/features.hpp
index ca19d0b4cf..295cc0bb4f 100644
--- a/3party/boost/boost/log/sources/features.hpp
+++ b/3party/boost/boost/log/sources/features.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,15 +18,15 @@
#include <boost/mpl/lambda.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
-#include <boost/preprocessor/repetition/enum_shifted_binary_params.hpp>
#include <boost/preprocessor/facilities/intercept.hpp>
//! The macro defines the maximum number of features that can be specified for a logger
diff --git a/3party/boost/boost/log/sources/global_logger_storage.hpp b/3party/boost/boost/log/sources/global_logger_storage.hpp
index 37acdb7ce0..65811edd2e 100644
--- a/3party/boost/boost/log/sources/global_logger_storage.hpp
+++ b/3party/boost/boost/log/sources/global_logger_storage.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,15 +17,15 @@
#include <typeinfo>
#include <stdexcept>
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared_object.hpp>
#include <boost/preprocessor/seq/enum.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/singleton.hpp>
#include <boost/log/detail/visible_type.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -38,7 +38,7 @@ namespace sources {
namespace aux {
//! The base class for logger holders
-struct BOOST_LOG_NO_VTABLE BOOST_LOG_VISIBLE logger_holder_base
+struct BOOST_LOG_NO_VTABLE BOOST_SYMBOL_VISIBLE logger_holder_base
{
//! The source file name where the logger was registered
const char* m_RegistrationFile;
@@ -56,7 +56,7 @@ struct BOOST_LOG_NO_VTABLE BOOST_LOG_VISIBLE logger_holder_base
//! The actual logger holder class
template< typename LoggerT >
-struct BOOST_LOG_VISIBLE logger_holder :
+struct BOOST_SYMBOL_VISIBLE logger_holder :
public logger_holder_base
{
//! The logger instance
@@ -79,9 +79,9 @@ struct global_storage
BOOST_LOG_API static shared_ptr< logger_holder_base > get_or_init(std::type_info const& key, initializer_t initializer);
// Non-constructible, non-copyable, non-assignable
- BOOST_LOG_DELETED_FUNCTION(global_storage())
- BOOST_LOG_DELETED_FUNCTION(global_storage(global_storage const&))
- BOOST_LOG_DELETED_FUNCTION(global_storage& operator= (global_storage const&))
+ BOOST_DELETED_FUNCTION(global_storage())
+ BOOST_DELETED_FUNCTION(global_storage(global_storage const&))
+ BOOST_DELETED_FUNCTION(global_storage& operator= (global_storage const&))
};
//! Throws the \c odr_violation exception
diff --git a/3party/boost/boost/log/sources/logger.hpp b/3party/boost/boost/log/sources/logger.hpp
index 022e1ce35f..4f5fbf1ff6 100644
--- a/3party/boost/boost/log/sources/logger.hpp
+++ b/3party/boost/boost/log/sources/logger.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#endif // !defined(BOOST_LOG_NO_THREADS)
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sources/record_ostream.hpp b/3party/boost/boost/log/sources/record_ostream.hpp
index e640b32696..239f3c9f6a 100644
--- a/3party/boost/boost/log/sources/record_ostream.hpp
+++ b/3party/boost/boost/log/sources/record_ostream.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,11 +27,11 @@
#include <boost/log/detail/unhandled_exception_count.hpp>
#include <boost/log/core/record.hpp>
#include <boost/log/utility/unique_identifier_name.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/utility/formatting_ostream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -103,7 +103,7 @@ public:
* \return \c true, if stream is valid and ready for formatting, \c false, if the stream is not valid. The latter also applies to
* the case when the stream is not attached to a log record.
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* Inverted conversion to an unspecified boolean type
@@ -162,8 +162,8 @@ private:
BOOST_LOG_API void init_stream();
// Copy and assignment are closed
- BOOST_LOG_DELETED_FUNCTION(basic_record_ostream(basic_record_ostream const&))
- BOOST_LOG_DELETED_FUNCTION(basic_record_ostream& operator= (basic_record_ostream const&))
+ BOOST_DELETED_FUNCTION(basic_record_ostream(basic_record_ostream const&))
+ BOOST_DELETED_FUNCTION(basic_record_ostream& operator= (basic_record_ostream const&))
};
@@ -201,9 +201,9 @@ struct stream_provider
BOOST_LOG_API static void release_compound(stream_compound* compound) BOOST_NOEXCEPT;
// Non-constructible, non-copyable, non-assignable
- BOOST_LOG_DELETED_FUNCTION(stream_provider())
- BOOST_LOG_DELETED_FUNCTION(stream_provider(stream_provider const&))
- BOOST_LOG_DELETED_FUNCTION(stream_provider& operator= (stream_provider const&))
+ BOOST_DELETED_FUNCTION(stream_provider())
+ BOOST_DELETED_FUNCTION(stream_provider(stream_provider const&))
+ BOOST_DELETED_FUNCTION(stream_provider& operator= (stream_provider const&))
};
@@ -289,7 +289,7 @@ public:
};
template< typename LoggerT >
-BOOST_LOG_FORCEINLINE record_pump< LoggerT > make_record_pump(LoggerT& lg, record& rec)
+BOOST_FORCEINLINE record_pump< LoggerT > make_record_pump(LoggerT& lg, record& rec)
{
return record_pump< LoggerT >(lg, rec);
}
diff --git a/3party/boost/boost/log/sources/severity_channel_logger.hpp b/3party/boost/boost/log/sources/severity_channel_logger.hpp
index 84c6929cb3..aa567e82f6 100644
--- a/3party/boost/boost/log/sources/severity_channel_logger.hpp
+++ b/3party/boost/boost/log/sources/severity_channel_logger.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/sources/channel_feature.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sources/severity_feature.hpp b/3party/boost/boost/log/sources/severity_feature.hpp
index 80fc07b329..ae34c4c587 100644
--- a/3party/boost/boost/log/sources/severity_feature.hpp
+++ b/3party/boost/boost/log/sources/severity_feature.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -16,8 +16,8 @@
#define BOOST_LOG_SOURCES_SEVERITY_FEATURE_HPP_INCLUDED_
#include <boost/cstdint.hpp>
-#include <boost/intrusive_ptr.hpp>
#include <boost/static_assert.hpp>
+#include <boost/smart_ptr/intrusive_ptr.hpp>
#include <boost/move/core.hpp>
#include <boost/move/utility.hpp>
#include <boost/log/detail/config.hpp>
@@ -32,7 +32,7 @@
#include <boost/log/core/record.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -62,7 +62,7 @@ namespace aux {
protected:
//! Factory implementation
- class BOOST_LOG_VISIBLE impl :
+ class BOOST_SYMBOL_VISIBLE impl :
public attribute_value::impl
{
public:
diff --git a/3party/boost/boost/log/sources/severity_logger.hpp b/3party/boost/boost/log/sources/severity_logger.hpp
index 5b0c5b8027..4e9fa580c0 100644
--- a/3party/boost/boost/log/sources/severity_logger.hpp
+++ b/3party/boost/boost/log/sources/severity_logger.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/keywords/severity.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/sources/threading_models.hpp b/3party/boost/boost/log/sources/threading_models.hpp
index 9ca68c7a85..0cfaf80034 100644
--- a/3party/boost/boost/log/sources/threading_models.hpp
+++ b/3party/boost/boost/log/sources/threading_models.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#endif
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/support/date_time.hpp b/3party/boost/boost/log/support/date_time.hpp
index 18c9996bcf..97924ec401 100644
--- a/3party/boost/boost/log/support/date_time.hpp
+++ b/3party/boost/boost/log/support/date_time.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/formatting_ostream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -142,7 +142,7 @@ struct date_time_formatter_generator_traits_impl
typedef typename date_time_formatter_generator_traits_impl< TimeT, CharT >::value_type value_type;
public:
- BOOST_LOG_DEFAULTED_FUNCTION(formatter(), {})
+ BOOST_DEFAULTED_FUNCTION(formatter(), {})
formatter(formatter const& that) : base_type(static_cast< base_type const& >(that)) {}
formatter(BOOST_RV_REF(formatter) that) { this->swap(that); }
@@ -217,7 +217,7 @@ struct date_time_formatter_generator_traits< local_time::local_date_time_base< T
typedef typename date_time_formatter_generator_traits< local_time::local_date_time_base< TimeT, TimeZoneT >, CharT, VoidT >::value_type value_type;
public:
- BOOST_LOG_DEFAULTED_FUNCTION(formatter(), {})
+ BOOST_DEFAULTED_FUNCTION(formatter(), {})
formatter(formatter const& that) : base_type(static_cast< base_type const& >(that)) {}
formatter(BOOST_RV_REF(formatter) that) { this->swap(that); }
@@ -320,7 +320,7 @@ struct date_formatter_generator_traits_impl
typedef typename date_formatter_generator_traits_impl< DateT, CharT >::value_type value_type;
public:
- BOOST_LOG_DEFAULTED_FUNCTION(formatter(), {})
+ BOOST_DEFAULTED_FUNCTION(formatter(), {})
formatter(formatter const& that) : base_type(static_cast< base_type const& >(that)) {}
formatter(BOOST_RV_REF(formatter) that) { this->swap(that); }
@@ -394,7 +394,7 @@ struct time_duration_formatter_generator_traits_impl
typedef typename time_duration_formatter_generator_traits_impl< TimeDurationT, CharT >::value_type value_type;
public:
- BOOST_LOG_DEFAULTED_FUNCTION(formatter(), {})
+ BOOST_DEFAULTED_FUNCTION(formatter(), {})
formatter(formatter const& that) : base_type(static_cast< base_type const& >(that)) {}
formatter(BOOST_RV_REF(formatter) that) { this->swap(that); }
@@ -492,7 +492,7 @@ struct date_duration_formatter_generator_traits_impl
typedef typename date_duration_formatter_generator_traits_impl< DateDurationT, CharT >::value_type value_type;
public:
- BOOST_LOG_DEFAULTED_FUNCTION(formatter(), {})
+ BOOST_DEFAULTED_FUNCTION(formatter(), {})
formatter(formatter const& that) : base_type(static_cast< base_type const& >(that)) {}
formatter(BOOST_RV_REF(formatter) that) { this->swap(that); }
diff --git a/3party/boost/boost/log/support/exception.hpp b/3party/boost/boost/log/support/exception.hpp
index ae06719a3b..3b0ff9767b 100644
--- a/3party/boost/boost/log/support/exception.hpp
+++ b/3party/boost/boost/log/support/exception.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +22,7 @@
#include <boost/log/utility/type_info_wrapper.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/support/regex.hpp b/3party/boost/boost/log/support/regex.hpp
index 4844603089..cecb106ad6 100644
--- a/3party/boost/boost/log/support/regex.hpp
+++ b/3party/boost/boost/log/support/regex.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,13 +15,13 @@
#ifndef BOOST_LOG_SUPPORT_REGEX_HPP_INCLUDED_
#define BOOST_LOG_SUPPORT_REGEX_HPP_INCLUDED_
+#include <string>
#include <boost/regex.hpp>
-#include <boost/mpl/bool.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/utility/functional/matches.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -31,36 +31,38 @@ BOOST_LOG_OPEN_NAMESPACE
namespace aux {
-//! The trait verifies if the type can be converted to a Boost.Regex expression
-template< typename T >
-struct is_regex< T, true >
+//! This tag type is used if an expression is recognized as a Boost.Regex expression
+struct boost_regex_expression_tag;
+
+//! The metafunction detects the matching expression kind and returns a tag that is used to specialize \c match_traits
+template< typename CharT, typename TraitsT >
+struct matching_expression_kind< boost::basic_regex< CharT, TraitsT > >
{
-private:
- typedef char yes_type;
- struct no_type { char dummy[2]; };
-
- template< typename CharT, typename TraitsT >
- static yes_type check_regex(basic_regex< CharT, TraitsT > const&);
- static no_type check_regex(...);
- static T& get_T();
-
-public:
- enum { value = sizeof(check_regex(get_T())) == sizeof(yes_type) };
- typedef mpl::bool_< value > type;
+ typedef boost_regex_expression_tag type;
};
-//! The regex matching functor implementation
-template< >
-struct matches_fun_impl< boost_regex_expression_tag >
+//! The matching function implementation
+template< typename ExpressionT >
+struct match_traits< ExpressionT, boost_regex_expression_tag >
{
+ typedef ExpressionT compiled_type;
+ static compiled_type compile(ExpressionT const& expr) { return expr; }
+
template< typename StringT, typename CharT, typename TraitsT >
- static bool matches(
- StringT const& str,
- basic_regex< CharT, TraitsT > const& expr,
- match_flag_type flags = match_default)
+ static bool matches(StringT const& str, boost::basic_regex< CharT, TraitsT > const& expr, boost::regex_constants::match_flag_type flags = boost::regex_constants::match_default)
{
return boost::regex_match(str.begin(), str.end(), expr, flags);
}
+
+ template< typename CharT, typename StringTraitsT, typename AllocatorT, typename ReTraitsT >
+ static bool matches(
+ std::basic_string< CharT, StringTraitsT, AllocatorT > const& str,
+ boost::basic_regex< CharT, ReTraitsT > const& expr,
+ boost::regex_constants::match_flag_type flags = boost::regex_constants::match_default)
+ {
+ const CharT* p = str.c_str();
+ return boost::regex_match(p, p + str.size(), expr, flags);
+ }
};
} // namespace aux
diff --git a/3party/boost/boost/log/support/spirit_classic.hpp b/3party/boost/boost/log/support/spirit_classic.hpp
index a3bea64b05..fb8a6f047d 100644
--- a/3party/boost/boost/log/support/spirit_classic.hpp
+++ b/3party/boost/boost/log/support/spirit_classic.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -16,10 +16,11 @@
#define BOOST_LOG_SUPPORT_SPIRIT_CLASSIC_HPP_INCLUDED_
#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/utility/functional/matches.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -37,7 +38,11 @@
* in other translation units. The only reliable way to settle this problem is to
* define the macro for the whole project (i.e. all translation units).
*/
-#warning Boost.Log: Boost.Spirit requires BOOST_SPIRIT_THREADSAFE macro to be defined if parsers are used in a multithreaded context. It is strongly recommended to define this macro project-wide.
+#if defined(__GNUC__)
+#pragma message "Boost.Log: Boost.Spirit requires BOOST_SPIRIT_THREADSAFE macro to be defined if parsers are used in a multithreaded context. It is strongly recommended to define this macro project-wide."
+#elif defined(_MSC_VER)
+#pragma message("Boost.Log: Boost.Spirit requires BOOST_SPIRIT_THREADSAFE macro to be defined if parsers are used in a multithreaded context. It is strongly recommended to define this macro project-wide.")
+#endif
#define BOOST_SPIRIT_THREADSAFE 1
#endif // !defined(BOOST_LOG_NO_THREADS) && !defined(BOOST_SPIRIT_THREADSAFE)
@@ -51,9 +56,12 @@ BOOST_LOG_OPEN_NAMESPACE
namespace aux {
+//! This tag type is used if an expression is recognized as a Boost.Spirit.Classic expression
+struct boost_spirit_classic_expression_tag;
+
//! The trait verifies if the type can be converted to a Boost.Spirit (classic) parser
template< typename T >
-struct is_spirit_classic_parser< T, true >
+struct is_spirit_classic_parser
{
private:
typedef char yes_type;
@@ -69,14 +77,22 @@ public:
typedef mpl::bool_< value > type;
};
-//! The matching functor implementation
-template< >
-struct matches_fun_impl< boost_spirit_classic_expression_tag >
+//! The metafunction detects the matching expression kind and returns a tag that is used to specialize \c match_traits
+template< typename ExpressionT >
+struct matching_expression_kind< ExpressionT, typename boost::enable_if_c< is_spirit_classic_parser< ExpressionT >::value >::type >
+{
+ typedef boost_spirit_classic_expression_tag type;
+};
+
+//! The matching function implementation
+template< typename ExpressionT >
+struct match_traits< ExpressionT, boost_spirit_classic_expression_tag >
{
- template< typename StringT, typename ParserT >
- static bool matches(
- StringT const& str,
- ParserT const& expr)
+ typedef ExpressionT compiled_type;
+ static compiled_type compile(ExpressionT const& expr) { return expr; }
+
+ template< typename StringT >
+ static bool matches(StringT const& str, ExpressionT const& expr)
{
typedef typename StringT::const_iterator const_iterator;
spirit::classic::parse_info< const_iterator > info =
diff --git a/3party/boost/boost/log/support/spirit_qi.hpp b/3party/boost/boost/log/support/spirit_qi.hpp
index b18a938cb6..48c0059a44 100644
--- a/3party/boost/boost/log/support/spirit_qi.hpp
+++ b/3party/boost/boost/log/support/spirit_qi.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,14 +15,17 @@
#ifndef BOOST_LOG_SUPPORT_SPIRIT_QI_HPP_INCLUDED_
#define BOOST_LOG_SUPPORT_SPIRIT_QI_HPP_INCLUDED_
-#include <boost/log/detail/config.hpp>
-#include <boost/log/utility/functional/matches.hpp>
+#include <boost/utility/enable_if.hpp>
#include <boost/spirit/include/qi_parse.hpp>
#include <boost/spirit/include/qi_domain.hpp>
-#include <boost/spirit/include/support_component.hpp>
+#include <boost/spirit/include/support_unused.hpp>
+#include <boost/spirit/home/support/meta_compiler.hpp> // spirit::compile()
+#include <boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp> // rule forward declaration
+#include <boost/log/detail/config.hpp>
+#include <boost/log/utility/functional/matches.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -32,21 +35,45 @@ BOOST_LOG_OPEN_NAMESPACE
namespace aux {
-//! The trait verifies if the type can be converted to a Boost.Spirit.Qi parser
-template< typename T >
-struct is_spirit_qi_parser< T, true > :
- public spirit::traits::is_component< spirit::qi::domain, T >
+//! This tag type is used if an expression is recognized as a Boost.Spirit.Qi expression
+struct boost_spirit_qi_expression_tag;
+
+//! The metafunction detects the matching expression kind and returns a tag that is used to specialize \c match_traits
+template< typename ExpressionT >
+struct matching_expression_kind< ExpressionT, typename boost::enable_if< spirit::traits::matches< spirit::qi::domain, ExpressionT > >::type >
{
+ typedef boost_spirit_qi_expression_tag type;
+};
+
+//! The matching function implementation
+template< typename ExpressionT >
+struct match_traits< ExpressionT, boost_spirit_qi_expression_tag >
+{
+ typedef typename spirit::result_of::compile< spirit::qi::domain, ExpressionT, spirit::unused_type >::type compiled_type;
+
+ static compiled_type compile(ExpressionT const& expr)
+ {
+ return spirit::compile< spirit::qi::domain >(expr);
+ }
+
+ template< typename StringT >
+ static bool matches(StringT const& str, ExpressionT const& expr)
+ {
+ typedef typename StringT::const_iterator const_iterator;
+ const_iterator it = str.begin(), end = str.end();
+ return (spirit::qi::parse(it, end, expr) && it == end);
+ }
};
-//! The matching functor implementation
-template< >
-struct matches_fun_impl< boost_spirit_qi_expression_tag >
+//! The matching function implementation
+template< typename IteratorT, typename T1, typename T2, typename T3, typename T4 >
+struct match_traits< spirit::qi::rule< IteratorT, T1, T2, T3, T4 >, boost_spirit_qi_expression_tag >
{
- template< typename StringT, typename ParserT >
- static bool matches(
- StringT const& str,
- ParserT const& expr)
+ typedef spirit::qi::rule< IteratorT, T1, T2, T3, T4 > compiled_type;
+ static compiled_type compile(compiled_type const& expr) { return expr; }
+
+ template< typename StringT >
+ static bool matches(StringT const& str, compiled_type const& expr)
{
typedef typename StringT::const_iterator const_iterator;
const_iterator it = str.begin(), end = str.end();
diff --git a/3party/boost/boost/log/support/std_regex.hpp b/3party/boost/boost/log/support/std_regex.hpp
new file mode 100644
index 0000000000..92395352ac
--- /dev/null
+++ b/3party/boost/boost/log/support/std_regex.hpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2014.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file support/std_regex.hpp
+ * \author Andrey Semashev
+ * \date 19.03.2014
+ *
+ * This header enables \c std::regex support for Boost.Log.
+ */
+
+#ifndef BOOST_LOG_SUPPORT_STD_REGEX_HPP_INCLUDED_
+#define BOOST_LOG_SUPPORT_STD_REGEX_HPP_INCLUDED_
+
+#include <boost/log/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(BOOST_NO_CXX11_HDR_REGEX)
+
+#if defined(__GNUC__)
+#pragma message "Boost.Log: This header requires support for std::regex in the standard library."
+#elif defined(_MSC_VER)
+#pragma message("Boost.Log: This header requires support for std::regex in the standard library.")
+#endif
+
+#else // defined(BOOST_NO_CXX11_HDR_REGEX)
+
+#include <regex>
+#include <string>
+#include <boost/log/utility/functional/matches.hpp>
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace aux {
+
+//! This tag type is used if an expression is recognized as \c std::regex
+struct std_regex_expression_tag;
+
+//! The metafunction detects the matching expression kind and returns a tag that is used to specialize \c match_traits
+template< typename CharT, typename ReTraitsT >
+struct matching_expression_kind< std::basic_regex< CharT, ReTraitsT > >
+{
+ typedef std_regex_expression_tag type;
+};
+
+//! The matching function implementation
+template< typename ExpressionT >
+struct match_traits< ExpressionT, std_regex_expression_tag >
+{
+ typedef ExpressionT compiled_type;
+ static compiled_type compile(ExpressionT const& expr) { return expr; }
+
+ template< typename StringT, typename CharT, typename ReTraitsT >
+ static bool matches(StringT const& str, std::basic_regex< CharT, ReTraitsT > const& expr, std::regex_constants::match_flag_type flags = std::regex_constants::match_default)
+ {
+ return std::regex_match(str.begin(), str.end(), expr, flags);
+ }
+
+ template< typename CharT, typename StringTraitsT, typename AllocatorT, typename ReTraitsT >
+ static bool matches(std::basic_string< CharT, StringTraitsT, AllocatorT > const& str, std::basic_regex< CharT, ReTraitsT > const& expr, std::regex_constants::match_flag_type flags = std::regex_constants::match_default)
+ {
+ const CharT* p = str.c_str();
+ return std::regex_match(p, p + str.size(), expr, flags);
+ }
+};
+
+} // namespace aux
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // defined(BOOST_NO_CXX11_HDR_REGEX)
+
+#endif // BOOST_LOG_SUPPORT_STD_REGEX_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/support/xpressive.hpp b/3party/boost/boost/log/support/xpressive.hpp
index 902c6d32b4..5959716e57 100644
--- a/3party/boost/boost/log/support/xpressive.hpp
+++ b/3party/boost/boost/log/support/xpressive.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,7 +15,7 @@
#ifndef BOOST_LOG_SUPPORT_XPRESSIVE_HPP_INCLUDED_
#define BOOST_LOG_SUPPORT_XPRESSIVE_HPP_INCLUDED_
-#include <boost/mpl/bool.hpp>
+#include <string>
#include <boost/xpressive/basic_regex.hpp>
#include <boost/xpressive/regex_constants.hpp>
#include <boost/xpressive/regex_algorithms.hpp>
@@ -23,7 +23,7 @@
#include <boost/log/utility/functional/matches.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -33,53 +33,34 @@ BOOST_LOG_OPEN_NAMESPACE
namespace aux {
-//! The trait verifies if the type can be converted to a Boost.Xpressive regex
+//! This tag type is used if an expression is recognized as a Boost.Xpressive expression
+struct boost_xpressive_expression_tag;
+
+//! The metafunction detects the matching expression kind and returns a tag that is used to specialize \c match_traits
template< typename T >
-struct is_xpressive_regex< T, true >
+struct matching_expression_kind< xpressive::basic_regex< T > >
{
-private:
- typedef char yes_type;
- struct no_type { char dummy[2]; };
-
- template< typename U >
- static yes_type check_xpressive_regex(xpressive::basic_regex< U > const&);
- static no_type check_xpressive_regex(...);
- static T& get_T();
-
-public:
- enum { value = sizeof(check_xpressive_regex(get_T())) == sizeof(yes_type) };
- typedef mpl::bool_< value > type;
+ typedef boost_xpressive_expression_tag type;
};
-//! The regex matching functor implementation
-template< >
-struct matches_fun_impl< boost_xpressive_expression_tag >
+//! The matching function implementation
+template< typename ExpressionT >
+struct match_traits< ExpressionT, boost_xpressive_expression_tag >
{
+ typedef ExpressionT compiled_type;
+ static compiled_type compile(ExpressionT const& expr) { return expr; }
+
template< typename StringT, typename T >
- static bool matches(
- StringT const& str,
- xpressive::basic_regex< T > const& expr,
- xpressive::regex_constants::match_flag_type flags = xpressive::regex_constants::match_default)
+ static bool matches(StringT const& str, xpressive::basic_regex< T > const& expr, xpressive::regex_constants::match_flag_type flags = xpressive::regex_constants::match_default)
{
return xpressive::regex_match(str, expr, flags);
}
- template< typename StringT >
- static bool matches(
- StringT const& str,
- xpressive::basic_regex< typename StringT::value_type* > const& expr,
- xpressive::regex_constants::match_flag_type flags = xpressive::regex_constants::match_default)
- {
- return xpressive::regex_match(str.c_str(), expr, flags);
- }
-
- template< typename StringT >
- static bool matches(
- StringT const& str,
- xpressive::basic_regex< typename StringT::value_type const* > const& expr,
- xpressive::regex_constants::match_flag_type flags = xpressive::regex_constants::match_default)
+ template< typename CharT, typename TraitsT, typename AllocatorT >
+ static bool matches(std::basic_string< CharT, TraitsT, AllocatorT > const& str, xpressive::basic_regex< const CharT* > const& expr, xpressive::regex_constants::match_flag_type flags = xpressive::regex_constants::match_default)
{
- return xpressive::regex_match(str.c_str(), expr, flags);
+ const CharT* p = str.c_str();
+ return xpressive::regex_match(p, p + str.size(), expr, flags);
}
};
diff --git a/3party/boost/boost/log/trivial.hpp b/3party/boost/boost/log/trivial.hpp
index 937be201ac..90de113b68 100644
--- a/3party/boost/boost/log/trivial.hpp
+++ b/3party/boost/boost/log/trivial.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/sources/record_ostream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -51,6 +51,7 @@ enum severity_level
//! Returns stringized enumeration value or \c NULL, if the value is not valid
BOOST_LOG_API const char* to_string(severity_level lvl);
+//! Outputs stringized representation of the severity level to the stream
template< typename CharT, typename TraitsT >
inline std::basic_ostream< CharT, TraitsT >& operator<< (
std::basic_ostream< CharT, TraitsT >& strm, severity_level lvl)
@@ -63,6 +64,7 @@ inline std::basic_ostream< CharT, TraitsT >& operator<< (
return strm;
}
+//! Reads stringized representation of the severity level from the stream
template< typename CharT, typename TraitsT >
BOOST_LOG_API std::basic_istream< CharT, TraitsT >& operator>> (
std::basic_istream< CharT, TraitsT >& strm, severity_level& lvl);
@@ -74,7 +76,12 @@ typedef sources::severity_logger_mt< severity_level > logger_type;
typedef sources::severity_logger< severity_level > logger_type;
#endif
-//! Trivial logger tag
+/*!
+ * \brief Trivial logger tag
+ *
+ * This tag can be used to acquire the logger that is used with lrivial logging macros.
+ * This may be useful when the logger is used with other macros which require a logger.
+ */
struct logger
{
//! Logger type
@@ -93,7 +100,15 @@ struct logger
#endif
};
-//! The macro is used to initiate logging
+/*!
+ * The macro is used to initiate logging. The \c lvl argument of the macro specifies one of the following
+ * severity levels: \c trace, \c debug, \c info, \c warning, \c error or \c fatal (see \c severity_level enum).
+ * Following the macro, there may be a streaming expression that composes the record message string. For example:
+ *
+ * \code
+ * BOOST_LOG_TRIVIAL(info) << "Hello, world!";
+ * \endcode
+ */
#define BOOST_LOG_TRIVIAL(lvl)\
BOOST_LOG_STREAM_WITH_PARAMS(::boost::log::trivial::logger::get(),\
(::boost::log::keywords::severity = ::boost::log::trivial::lvl))
diff --git a/3party/boost/boost/log/utility/empty_deleter.hpp b/3party/boost/boost/log/utility/empty_deleter.hpp
index e1ae5682ba..67e5abc97b 100644
--- a/3party/boost/boost/log/utility/empty_deleter.hpp
+++ b/3party/boost/boost/log/utility/empty_deleter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -9,36 +9,31 @@
* \author Andrey Semashev
* \date 22.04.2007
*
- * This header contains an \c empty_deleter implementation. This is an empty
- * function object that receives a pointer and does nothing with it.
- * Such empty deletion strategy may be convenient, for example, when
- * constructing <tt>shared_ptr</tt>s that point to some object that should not be
- * deleted (i.e. a variable on the stack or some global singleton, like <tt>std::cout</tt>).
+ * This header is deprecated, use boost/utility/empty_deleter.hpp instead. The header is left for
+ * backward compatibility and will be removed in future versions.
*/
#ifndef BOOST_LOG_UTILITY_EMPTY_DELETER_HPP_INCLUDED_
#define BOOST_LOG_UTILITY_EMPTY_DELETER_HPP_INCLUDED_
+#include <boost/core/null_deleter.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
+#if defined(__GNUC__)
+#pragma message "Boost.Log: This header is deprecated, use boost/core/null_deleter.hpp instead."
+#elif defined(_MSC_VER)
+#pragma message("Boost.Log: This header is deprecated, use boost/core/null_deleter.hpp instead.")
+#endif
+
namespace boost {
BOOST_LOG_OPEN_NAMESPACE
-//! A function object that does nothing and can be used as an empty deleter for \c shared_ptr
-struct empty_deleter
-{
- //! Function object result type
- typedef void result_type;
- /*!
- * Does nothing
- */
- void operator() (const volatile void*) const {}
-};
+typedef boost::null_deleter empty_deleter;
BOOST_LOG_CLOSE_NAMESPACE // namespace log
diff --git a/3party/boost/boost/log/utility/exception_handler.hpp b/3party/boost/boost/log/utility/exception_handler.hpp
index 6384f4edce..c5392be687 100644
--- a/3party/boost/boost/log/utility/exception_handler.hpp
+++ b/3party/boost/boost/log/utility/exception_handler.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,7 +15,7 @@
#ifndef BOOST_LOG_UTILITY_EXCEPTION_HANDLER_HPP_INCLUDED_
#define BOOST_LOG_UTILITY_EXCEPTION_HANDLER_HPP_INCLUDED_
-#include <exception>
+#include <new> // std::nothrow_t
#include <boost/mpl/bind.hpp>
#include <boost/mpl/quote.hpp>
#include <boost/mpl/fold.hpp>
@@ -30,7 +30,7 @@
#include <boost/log/utility/functional/nop.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/explicit_operator_bool.hpp b/3party/boost/boost/log/utility/explicit_operator_bool.hpp
index 375a753578..0d708288dc 100644
--- a/3party/boost/boost/log/utility/explicit_operator_bool.hpp
+++ b/3party/boost/boost/log/utility/explicit_operator_bool.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -9,22 +9,25 @@
* \author Andrey Semashev
* \date 08.03.2009
*
- * This header defines a compatibility macro that implements an unspecified
- * \c bool operator idiom, which is superseded with explicit conversion operators in
- * C++0x.
+ * This header is deprecated, use boost/utility/explicit_operator_bool.hpp instead. The header is left for
+ * backward compatibility and will be removed in future versions.
*/
#ifndef BOOST_LOG_UTILITY_EXPLICIT_OPERATOR_BOOL_HPP_INCLUDED_
#define BOOST_LOG_UTILITY_EXPLICIT_OPERATOR_BOOL_HPP_INCLUDED_
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/detail/config.hpp>
-#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
-#if defined(BOOST_LOG_DOXYGEN_PASS) || !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
+#if defined(__GNUC__)
+#pragma message "Boost.Log: This header is deprecated, use boost/utility/explicit_operator_bool.hpp instead."
+#elif defined(_MSC_VER)
+#pragma message("Boost.Log: This header is deprecated, use boost/utility/explicit_operator_bool.hpp instead.")
+#endif
/*!
* \brief The macro defines an explicit operator of conversion to \c bool
@@ -34,71 +37,6 @@
* in terms of which the conversion operator will be implemented.
*/
#define BOOST_LOG_EXPLICIT_OPERATOR_BOOL()\
- BOOST_LOG_FORCEINLINE explicit operator bool () const\
- {\
- return !this->operator! ();\
- }
-
-#elif !defined(BOOST_LOG_NO_UNSPECIFIED_BOOL)
-
-namespace boost {
-
-BOOST_LOG_OPEN_NAMESPACE
-
-namespace aux {
-
-#if !defined(_MSC_VER)
-
- struct unspecified_bool
- {
- // NOTE TO THE USER: If you see this in error messages then you tried
- // to apply an unsupported operator on the object that supports
- // explicit conversion to bool.
- struct OPERATORS_NOT_ALLOWED;
- static void true_value(OPERATORS_NOT_ALLOWED*) {}
- };
- typedef void (*unspecified_bool_type)(unspecified_bool::OPERATORS_NOT_ALLOWED*);
-
-#else
-
- // MSVC is too eager to convert pointer to function to void* even though it shouldn't
- struct unspecified_bool
- {
- // NOTE TO THE USER: If you see this in error messages then you tried
- // to apply an unsupported operator on the object that supports
- // explicit conversion to bool.
- struct OPERATORS_NOT_ALLOWED;
- void true_value(OPERATORS_NOT_ALLOWED*) {}
- };
- typedef void (unspecified_bool::*unspecified_bool_type)(unspecified_bool::OPERATORS_NOT_ALLOWED*);
-
-#endif
-
-} // namespace aux
-
-BOOST_LOG_CLOSE_NAMESPACE // namespace log
-
-} // namespace boost
-
-#define BOOST_LOG_EXPLICIT_OPERATOR_BOOL()\
- BOOST_LOG_FORCEINLINE operator boost::log::aux::unspecified_bool_type () const\
- {\
- if (!this->operator!())\
- return &boost::log::aux::unspecified_bool::true_value;\
- else\
- return 0;\
- }
-
-#else
-
-#define BOOST_LOG_EXPLICIT_OPERATOR_BOOL()\
- BOOST_LOG_FORCEINLINE operator bool () const\
- {\
- return !this->operator! ();\
- }
-
-#endif
-
-#include <boost/log/detail/footer.hpp>
+ BOOST_EXPLICIT_OPERATOR_BOOL()
#endif // BOOST_LOG_UTILITY_EXPLICIT_OPERATOR_BOOL_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/utility/formatting_ostream.hpp b/3party/boost/boost/log/utility/formatting_ostream.hpp
index 00049845d6..a32df35c83 100644
--- a/3party/boost/boost/log/utility/formatting_ostream.hpp
+++ b/3party/boost/boost/log/utility/formatting_ostream.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,10 +26,10 @@
#include <boost/log/detail/code_conversion.hpp>
#include <boost/log/utility/string_literal_fwd.hpp>
#include <boost/log/utility/formatting_ostream_fwd.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -121,8 +121,8 @@ public:
{
}
- BOOST_LOG_DELETED_FUNCTION(sentry(sentry const&))
- BOOST_LOG_DELETED_FUNCTION(sentry& operator= (sentry const&))
+ BOOST_DELETED_FUNCTION(sentry(sentry const&))
+ BOOST_DELETED_FUNCTION(sentry& operator= (sentry const&))
};
private:
@@ -276,7 +276,7 @@ public:
static bool sync_with_stdio(bool sync = true) { return ostream_type::sync_with_stdio(sync); }
// std::basic_ios method forwarders
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL()
bool operator! () const { return !m_stream; }
iostate rdstate() const { return m_stream.rdstate(); }
@@ -545,33 +545,36 @@ private:
m_stream.fill(static_cast< char_type >(' '));
}
- template< typename OtherCharT >
- basic_formatting_ostream& formatted_write(const OtherCharT* p, std::streamsize size)
+ basic_formatting_ostream& formatted_write(const char_type* p, std::streamsize size)
{
sentry guard(*this);
if (guard)
{
m_stream.flush();
- string_type* const storage = m_streambuf.storage();
- const std::streamsize w = m_stream.width();
- if (w <= size)
- {
- aux::code_convert(p, static_cast< std::size_t >(size), *storage, m_stream.getloc());
- }
+ if (m_stream.width() <= size)
+ m_streambuf.storage()->append(p, static_cast< std::size_t >(size));
else
- {
- const bool align_left = (m_stream.flags() & ostream_type::adjustfield) == ostream_type::left;
- typename string_type::size_type const alignment_size =
- static_cast< typename string_type::size_type >(w - size);
- if (!align_left)
- storage->append(alignment_size, m_stream.fill());
+ this->aligned_write(p, size);
+
+ m_stream.width(0);
+ }
+
+ return *this;
+ }
- aux::code_convert(p, static_cast< std::size_t >(size), *storage, m_stream.getloc());
+ template< typename OtherCharT >
+ basic_formatting_ostream& formatted_write(const OtherCharT* p, std::streamsize size)
+ {
+ sentry guard(*this);
+ if (guard)
+ {
+ m_stream.flush();
- if (align_left)
- storage->append(alignment_size, m_stream.fill());
- }
+ if (m_stream.width() <= size)
+ aux::code_convert(p, static_cast< std::size_t >(size), *m_streambuf.storage(), m_stream.getloc());
+ else
+ this->aligned_write(p, size);
m_stream.width(0);
}
@@ -579,10 +582,15 @@ private:
return *this;
}
+ void aligned_write(const char_type* p, std::streamsize size);
+
+ template< typename OtherCharT >
+ void aligned_write(const OtherCharT* p, std::streamsize size);
+
//! Copy constructor (closed)
- BOOST_LOG_DELETED_FUNCTION(basic_formatting_ostream(basic_formatting_ostream const& that))
+ BOOST_DELETED_FUNCTION(basic_formatting_ostream(basic_formatting_ostream const& that))
//! Assignment (closed)
- BOOST_LOG_DELETED_FUNCTION(basic_formatting_ostream& operator= (basic_formatting_ostream const& that))
+ BOOST_DELETED_FUNCTION(basic_formatting_ostream& operator= (basic_formatting_ostream const& that))
};
template< typename CharT, typename TraitsT, typename AllocatorT >
@@ -656,6 +664,44 @@ BOOST_CONSTEXPR_OR_CONST typename basic_formatting_ostream< CharT, TraitsT, Allo
template< typename CharT, typename TraitsT, typename AllocatorT >
BOOST_CONSTEXPR_OR_CONST typename basic_formatting_ostream< CharT, TraitsT, AllocatorT >::event basic_formatting_ostream< CharT, TraitsT, AllocatorT >::copyfmt_event;
+template< typename CharT, typename TraitsT, typename AllocatorT >
+void basic_formatting_ostream< CharT, TraitsT, AllocatorT >::aligned_write(const char_type* p, std::streamsize size)
+{
+ string_type* const storage = m_streambuf.storage();
+ typename string_type::size_type const alignment_size =
+ static_cast< typename string_type::size_type >(m_stream.width() - size);
+ const bool align_left = (m_stream.flags() & ostream_type::adjustfield) == ostream_type::left;
+ if (align_left)
+ {
+ storage->append(p, static_cast< std::size_t >(size));
+ storage->append(alignment_size, m_stream.fill());
+ }
+ else
+ {
+ storage->append(alignment_size, m_stream.fill());
+ storage->append(p, static_cast< std::size_t >(size));
+ }
+}
+
+template< typename CharT, typename TraitsT, typename AllocatorT >
+template< typename OtherCharT >
+void basic_formatting_ostream< CharT, TraitsT, AllocatorT >::aligned_write(const OtherCharT* p, std::streamsize size)
+{
+ string_type* const storage = m_streambuf.storage();
+ typename string_type::size_type const alignment_size =
+ static_cast< typename string_type::size_type >(m_stream.width() - size);
+ const bool align_left = (m_stream.flags() & ostream_type::adjustfield) == ostream_type::left;
+ if (align_left)
+ {
+ aux::code_convert(p, static_cast< std::size_t >(size), *storage, m_stream.getloc());
+ storage->append(alignment_size, m_stream.fill());
+ }
+ else
+ {
+ storage->append(alignment_size, m_stream.fill());
+ aux::code_convert(p, static_cast< std::size_t >(size), *storage, m_stream.getloc());
+ }
+}
template< typename CharT, typename TraitsT, typename AllocatorT, typename T >
inline basic_formatting_ostream< CharT, TraitsT, AllocatorT >&
@@ -665,6 +711,34 @@ operator<< (basic_formatting_ostream< CharT, TraitsT, AllocatorT >& strm, T cons
return strm;
}
+template< typename CharT, typename TraitsT, typename AllocatorT, typename T >
+inline basic_formatting_ostream< CharT, TraitsT, AllocatorT >&
+operator<< (basic_formatting_ostream< CharT, TraitsT, AllocatorT >& strm, T& value)
+{
+ strm.stream() << value;
+ return strm;
+}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+template< typename CharT, typename TraitsT, typename AllocatorT, typename T >
+inline basic_formatting_ostream< CharT, TraitsT, AllocatorT >&
+operator<< (basic_formatting_ostream< CharT, TraitsT, AllocatorT >&& strm, T const& value)
+{
+ static_cast< basic_formatting_ostream< CharT, TraitsT, AllocatorT >& >(strm) << value;
+ return strm;
+}
+
+template< typename CharT, typename TraitsT, typename AllocatorT, typename T >
+inline basic_formatting_ostream< CharT, TraitsT, AllocatorT >&
+operator<< (basic_formatting_ostream< CharT, TraitsT, AllocatorT >&& strm, T& value)
+{
+ static_cast< basic_formatting_ostream< CharT, TraitsT, AllocatorT >& >(strm) << value;
+ return strm;
+}
+
+#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
BOOST_LOG_CLOSE_NAMESPACE // namespace log
} // namespace boost
diff --git a/3party/boost/boost/log/utility/formatting_ostream_fwd.hpp b/3party/boost/boost/log/utility/formatting_ostream_fwd.hpp
index f0a97f83ea..ba9b6e18d5 100644
--- a/3party/boost/boost/log/utility/formatting_ostream_fwd.hpp
+++ b/3party/boost/boost/log/utility/formatting_ostream_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <memory>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/functional.hpp b/3party/boost/boost/log/utility/functional.hpp
index 1cfd0a8c88..bc48619a01 100644
--- a/3party/boost/boost/log/utility/functional.hpp
+++ b/3party/boost/boost/log/utility/functional.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +33,7 @@
#include <boost/log/utility/functional/as_action.hpp>
#include <boost/log/utility/functional/save_result.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/functional/as_action.hpp b/3party/boost/boost/log/utility/functional/as_action.hpp
index 1814e11da0..a12cee250a 100644
--- a/3party/boost/boost/log/utility/functional/as_action.hpp
+++ b/3party/boost/boost/log/utility/functional/as_action.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -32,7 +32,7 @@ struct as_action_adapter
{
typedef typename FunT::result_type result_type;
- BOOST_LOG_DEFAULTED_FUNCTION(as_action_adapter(), {})
+ BOOST_DEFAULTED_FUNCTION(as_action_adapter(), {})
explicit as_action_adapter(FunT const& fun) : m_fun(fun) {}
template< typename AttributeT, typename ContextT >
@@ -46,7 +46,7 @@ private:
};
template< typename FunT >
-BOOST_LOG_FORCEINLINE as_action_adapter< FunT > as_action(FunT const& fun)
+BOOST_FORCEINLINE as_action_adapter< FunT > as_action(FunT const& fun)
{
return as_action_adapter< FunT >(fun);
}
diff --git a/3party/boost/boost/log/utility/functional/begins_with.hpp b/3party/boost/boost/log/utility/functional/begins_with.hpp
index 25f0fbb7d1..b8e91baa7e 100644
--- a/3party/boost/boost/log/utility/functional/begins_with.hpp
+++ b/3party/boost/boost/log/utility/functional/begins_with.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/functional/bind.hpp b/3party/boost/boost/log/utility/functional/bind.hpp
index bbd78c010c..cdc79cba57 100644
--- a/3party/boost/boost/log/utility/functional/bind.hpp
+++ b/3party/boost/boost/log/utility/functional/bind.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -105,13 +105,13 @@ private:
};
template< typename FunT, typename FirstArgT >
-BOOST_LOG_FORCEINLINE binder1st< FunT, FirstArgT > bind1st(FunT fun, FirstArgT const& arg)
+BOOST_FORCEINLINE binder1st< FunT, FirstArgT > bind1st(FunT fun, FirstArgT const& arg)
{
return binder1st< FunT, FirstArgT >(fun, arg);
}
template< typename FunT, typename FirstArgT >
-BOOST_LOG_FORCEINLINE binder1st< FunT, FirstArgT > bind1st(FunT fun, FirstArgT& arg)
+BOOST_FORCEINLINE binder1st< FunT, FirstArgT > bind1st(FunT fun, FirstArgT& arg)
{
return binder1st< FunT, FirstArgT >(fun, arg);
}
@@ -167,13 +167,13 @@ private:
};
template< typename FunT, typename SecondArgT >
-BOOST_LOG_FORCEINLINE binder2nd< FunT, SecondArgT > bind2nd(FunT fun, SecondArgT const& arg)
+BOOST_FORCEINLINE binder2nd< FunT, SecondArgT > bind2nd(FunT fun, SecondArgT const& arg)
{
return binder2nd< FunT, SecondArgT >(fun, arg);
}
template< typename FunT, typename SecondArgT >
-BOOST_LOG_FORCEINLINE binder2nd< FunT, SecondArgT > bind2nd(FunT fun, SecondArgT& arg)
+BOOST_FORCEINLINE binder2nd< FunT, SecondArgT > bind2nd(FunT fun, SecondArgT& arg)
{
return binder2nd< FunT, SecondArgT >(fun, arg);
}
@@ -217,13 +217,13 @@ private:
};
template< typename FunT, typename ThirdArgT >
-BOOST_LOG_FORCEINLINE binder3rd< FunT, ThirdArgT > bind3rd(FunT fun, ThirdArgT const& arg)
+BOOST_FORCEINLINE binder3rd< FunT, ThirdArgT > bind3rd(FunT fun, ThirdArgT const& arg)
{
return binder3rd< FunT, ThirdArgT >(fun, arg);
}
template< typename FunT, typename ThirdArgT >
-BOOST_LOG_FORCEINLINE binder3rd< FunT, ThirdArgT > bind3rd(FunT fun, ThirdArgT& arg)
+BOOST_FORCEINLINE binder3rd< FunT, ThirdArgT > bind3rd(FunT fun, ThirdArgT& arg)
{
return binder3rd< FunT, ThirdArgT >(fun, arg);
}
diff --git a/3party/boost/boost/log/utility/functional/bind_assign.hpp b/3party/boost/boost/log/utility/functional/bind_assign.hpp
index f4de02d466..acfad9426e 100644
--- a/3party/boost/boost/log/utility/functional/bind_assign.hpp
+++ b/3party/boost/boost/log/utility/functional/bind_assign.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/utility/functional/bind.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -41,7 +41,7 @@ struct assign_fun
};
template< typename AssigneeT >
-BOOST_LOG_FORCEINLINE binder1st< assign_fun, AssigneeT& > bind_assign(AssigneeT& assignee)
+BOOST_FORCEINLINE binder1st< assign_fun, AssigneeT& > bind_assign(AssigneeT& assignee)
{
return binder1st< assign_fun, AssigneeT& >(assign_fun(), assignee);
}
diff --git a/3party/boost/boost/log/utility/functional/bind_output.hpp b/3party/boost/boost/log/utility/functional/bind_output.hpp
index 955c9bbc6d..19cd88b947 100644
--- a/3party/boost/boost/log/utility/functional/bind_output.hpp
+++ b/3party/boost/boost/log/utility/functional/bind_output.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/utility/functional/bind.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -41,7 +41,7 @@ struct output_fun
};
template< typename StreamT >
-BOOST_LOG_FORCEINLINE binder1st< output_fun, StreamT& > bind_output(StreamT& strm)
+BOOST_FORCEINLINE binder1st< output_fun, StreamT& > bind_output(StreamT& strm)
{
return binder1st< output_fun, StreamT& >(output_fun(), strm);
}
diff --git a/3party/boost/boost/log/utility/functional/bind_to_log.hpp b/3party/boost/boost/log/utility/functional/bind_to_log.hpp
index 65fdb5e1b0..9131d6658f 100644
--- a/3party/boost/boost/log/utility/functional/bind_to_log.hpp
+++ b/3party/boost/boost/log/utility/functional/bind_to_log.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +21,7 @@
#include <boost/log/utility/manipulators/to_log.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -56,13 +56,13 @@ struct to_log_fun< void >
};
template< typename StreamT >
-BOOST_LOG_FORCEINLINE binder1st< to_log_fun< >, StreamT& > bind_to_log(StreamT& strm)
+BOOST_FORCEINLINE binder1st< to_log_fun< >, StreamT& > bind_to_log(StreamT& strm)
{
return binder1st< to_log_fun< >, StreamT& >(to_log_fun< >(), strm);
}
template< typename TagT, typename StreamT >
-BOOST_LOG_FORCEINLINE binder1st< to_log_fun< TagT >, StreamT& > bind_to_log(StreamT& strm)
+BOOST_FORCEINLINE binder1st< to_log_fun< TagT >, StreamT& > bind_to_log(StreamT& strm)
{
return binder1st< to_log_fun< TagT >, StreamT& >(to_log_fun< TagT >(), strm);
}
diff --git a/3party/boost/boost/log/utility/functional/contains.hpp b/3party/boost/boost/log/utility/functional/contains.hpp
index 0433ca7316..84b6cd3d53 100644
--- a/3party/boost/boost/log/utility/functional/contains.hpp
+++ b/3party/boost/boost/log/utility/functional/contains.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/functional/ends_with.hpp b/3party/boost/boost/log/utility/functional/ends_with.hpp
index b5a75bdbc8..ddf6578a2e 100644
--- a/3party/boost/boost/log/utility/functional/ends_with.hpp
+++ b/3party/boost/boost/log/utility/functional/ends_with.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/functional/fun_ref.hpp b/3party/boost/boost/log/utility/functional/fun_ref.hpp
index 90ef2bdbbe..08e3c6ac95 100644
--- a/3party/boost/boost/log/utility/functional/fun_ref.hpp
+++ b/3party/boost/boost/log/utility/functional/fun_ref.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -65,7 +65,7 @@ private:
};
template< typename FunT >
-BOOST_LOG_FORCEINLINE function_reference_wrapper< FunT > fun_ref(FunT& fun)
+BOOST_FORCEINLINE function_reference_wrapper< FunT > fun_ref(FunT& fun)
{
return function_reference_wrapper< FunT >(fun);
}
diff --git a/3party/boost/boost/log/utility/functional/in_range.hpp b/3party/boost/boost/log/utility/functional/in_range.hpp
index fdec067d40..3fe808a74a 100644
--- a/3party/boost/boost/log/utility/functional/in_range.hpp
+++ b/3party/boost/boost/log/utility/functional/in_range.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/utility/functional/logical.hpp> // make_common_integral_type
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/functional/logical.hpp b/3party/boost/boost/log/utility/functional/logical.hpp
index a5c9d3ca47..92bd79705b 100644
--- a/3party/boost/boost/log/utility/functional/logical.hpp
+++ b/3party/boost/boost/log/utility/functional/logical.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +29,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/functional/matches.hpp b/3party/boost/boost/log/utility/functional/matches.hpp
index 943a021ad7..b530f1e964 100644
--- a/3party/boost/boost/log/utility/functional/matches.hpp
+++ b/3party/boost/boost/log/utility/functional/matches.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,14 +15,10 @@
#ifndef BOOST_LOG_UTILITY_FUNCTIONAL_MATCHES_HPP_INCLUDED_
#define BOOST_LOG_UTILITY_FUNCTIONAL_MATCHES_HPP_INCLUDED_
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/eval_if.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -32,45 +28,13 @@ BOOST_LOG_OPEN_NAMESPACE
namespace aux {
-//! This tag type is used if an expression is not supported for matching against strings
-struct unsupported_match_expression_tag;
-//! This tag type is used if an expression is recognized as a Boost.Regex expression
-struct boost_regex_expression_tag;
-//! This tag type is used if an expression is recognized as a Boost.Xpressive expression
-struct boost_xpressive_expression_tag;
-//! This tag type is used if an expression is recognized as a Boost.Spirit (classic) expression
-struct boost_spirit_classic_expression_tag;
-//! This tag type is used if an expression is recognized as a Boost.Spirit.Qi expression
-struct boost_spirit_qi_expression_tag;
+//! The metafunction detects the matching expression kind and returns a tag that is used to specialize \c match_traits
+template< typename ExpressionT, typename = void >
+struct matching_expression_kind;
-//! Preliminary declaration of a trait that detects if an expression is a Boost.Regex expression
-template< typename, bool = true >
-struct is_regex :
- public mpl::false_
-{
-};
-//! Preliminary declaration of a trait that detects if an expression is a Boost.Xpressive expression
-template< typename, bool = true >
-struct is_xpressive_regex :
- public mpl::false_
-{
-};
-//! Preliminary declaration of a trait that detects if an expression is a Boost.Spirit (classic) expression
-template< typename, bool = true >
-struct is_spirit_classic_parser :
- public mpl::false_
-{
-};
-//! Preliminary declaration of a trait that detects if an expression is a Boost.Spirit.Qi expression
-template< typename, bool = true >
-struct is_spirit_qi_parser :
- public mpl::false_
-{
-};
-
-//! The regex matching functor implementation
-template< typename TagT >
-struct matches_fun_impl;
+//! The matching function implementation
+template< typename ExpressionT, typename TagT = typename matching_expression_kind< ExpressionT >::type >
+struct match_traits;
} // namespace aux
@@ -79,43 +43,16 @@ struct matches_fun
{
typedef bool result_type;
-private:
- //! A traits to obtain the tag of the expression
- template< typename ExpressionT >
- struct match_traits
- {
- typedef typename mpl::eval_if<
- aux::is_regex< ExpressionT >,
- mpl::identity< aux::boost_regex_expression_tag >,
- mpl::eval_if<
- aux::is_xpressive_regex< ExpressionT >,
- mpl::identity< aux::boost_xpressive_expression_tag >,
- mpl::eval_if<
- aux::is_spirit_classic_parser< ExpressionT >,
- mpl::identity< aux::boost_spirit_classic_expression_tag >,
- mpl::if_<
- aux::is_spirit_qi_parser< ExpressionT >,
- aux::boost_spirit_qi_expression_tag,
- aux::unsupported_match_expression_tag
- >
- >
- >
- >::type tag_type;
- };
-
-public:
template< typename StringT, typename ExpressionT >
bool operator() (StringT const& str, ExpressionT const& expr) const
{
- typedef typename match_traits< ExpressionT >::tag_type tag_type;
- typedef aux::matches_fun_impl< tag_type > impl;
+ typedef aux::match_traits< ExpressionT > impl;
return impl::matches(str, expr);
}
template< typename StringT, typename ExpressionT, typename ArgT >
bool operator() (StringT const& str, ExpressionT const& expr, ArgT const& arg) const
{
- typedef typename match_traits< ExpressionT >::tag_type tag_type;
- typedef aux::matches_fun_impl< tag_type > impl;
+ typedef aux::match_traits< ExpressionT > impl;
return impl::matches(str, expr, arg);
}
};
diff --git a/3party/boost/boost/log/utility/functional/nop.hpp b/3party/boost/boost/log/utility/functional/nop.hpp
index d4f4edf0ff..0a6e310337 100644
--- a/3party/boost/boost/log/utility/functional/nop.hpp
+++ b/3party/boost/boost/log/utility/functional/nop.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -31,18 +31,18 @@ struct nop
{
typedef void result_type;
- void operator() () const {}
+ void operator() () const BOOST_NOEXCEPT {}
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template< typename... ArgsT >
- void operator() (ArgsT const&...) const {}
+ void operator() (ArgsT const&...) const BOOST_NOEXCEPT {}
#else
template< typename T >
- void operator() (T const&) const {}
+ void operator() (T const&) const BOOST_NOEXCEPT {}
template< typename T1, typename T2 >
- void operator() (T1 const&, T2 const&) const {}
+ void operator() (T1 const&, T2 const&) const BOOST_NOEXCEPT {}
template< typename T1, typename T2, typename T3 >
- void operator() (T1 const&, T2 const&, T3 const&) const {}
+ void operator() (T1 const&, T2 const&, T3 const&) const BOOST_NOEXCEPT {}
#endif
};
diff --git a/3party/boost/boost/log/utility/functional/save_result.hpp b/3party/boost/boost/log/utility/functional/save_result.hpp
index ce72adb40a..d0b22fdff2 100644
--- a/3party/boost/boost/log/utility/functional/save_result.hpp
+++ b/3party/boost/boost/log/utility/functional/save_result.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -46,7 +46,7 @@ private:
};
template< typename FunT, typename AssigneeT >
-BOOST_LOG_FORCEINLINE save_result_wrapper< FunT, AssigneeT > save_result(FunT const& fun, AssigneeT& assignee)
+BOOST_FORCEINLINE save_result_wrapper< FunT, AssigneeT > save_result(FunT const& fun, AssigneeT& assignee)
{
return save_result_wrapper< FunT, AssigneeT >(fun, assignee);
}
diff --git a/3party/boost/boost/log/utility/intrusive_ref_counter.hpp b/3party/boost/boost/log/utility/intrusive_ref_counter.hpp
index 6a694d108d..025c21ac81 100644
--- a/3party/boost/boost/log/utility/intrusive_ref_counter.hpp
+++ b/3party/boost/boost/log/utility/intrusive_ref_counter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -9,109 +9,42 @@
* \author Andrey Semashev
* \date 12.03.2009
*
- * This header contains a reference counter class for \c intrusive_ptr.
+ * This header is deprecated, use boost/smart_ptr/intrusive_ref_counter.hpp instead. The header is left for
+ * backward compatibility and will be removed in future versions.
*/
#ifndef BOOST_LOG_UTILITY_INTRUSIVE_REF_COUNTER_HPP_INCLUDED_
#define BOOST_LOG_UTILITY_INTRUSIVE_REF_COUNTER_HPP_INCLUDED_
-#include <boost/intrusive_ptr.hpp>
+#include <boost/smart_ptr/intrusive_ptr.hpp>
+#include <boost/smart_ptr/intrusive_ref_counter.hpp>
#include <boost/log/detail/config.hpp>
-#ifndef BOOST_LOG_NO_THREADS
-#include <boost/detail/atomic_count.hpp>
-#endif // BOOST_LOG_NO_THREADS
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
+#if defined(__GNUC__)
+#pragma message "Boost.Log: This header is deprecated, use boost/smart_ptr/intrusive_ref_counter.hpp instead."
+#elif defined(_MSC_VER)
+#pragma message("Boost.Log: This header is deprecated, use boost/smart_ptr/intrusive_ref_counter.hpp instead.")
+#endif
+
namespace boost {
BOOST_LOG_OPEN_NAMESPACE
-class intrusive_ref_counter;
+namespace aux {
-#ifndef BOOST_LOG_DOXYGEN_PASS
-void intrusive_ptr_add_ref(const intrusive_ref_counter* p);
-void intrusive_ptr_release(const intrusive_ref_counter* p);
-#endif // BOOST_LOG_DOXYGEN_PASS
-
-/*!
- * \brief A reference counter base class
- *
- * This base class can be used with user-defined classes to add support
- * for \c intrusive_ptr. The class contains a thread-safe reference counter
- * and a virtual destructor, which makes the derived class polymorphic.
- * Upon releasing the last \c intrusive_ptr referencing the object
- * derived from the \c intrusive_ref_counter class, operator \c delete
- * is automatically called on the pointer to the object.
- */
-class intrusive_ref_counter
+struct legacy_intrusive_ref_counter_root
{
-private:
- //! Reference counter
-#ifndef BOOST_LOG_NO_THREADS
- mutable boost::detail::atomic_count m_RefCounter;
-#else
- mutable unsigned long m_RefCounter;
-#endif // BOOST_LOG_NO_THREADS
-
-public:
- /*!
- * Default constructor
- *
- * \post <tt>use_count() == 0</tt>
- */
- intrusive_ref_counter() : m_RefCounter(0)
- {
- }
- /*!
- * Copy constructor
- *
- * \post <tt>use_count() == 0</tt>
- */
- intrusive_ref_counter(intrusive_ref_counter const&) : m_RefCounter(0)
- {
- }
-
- /*!
- * Virtual destructor
- */
- virtual ~intrusive_ref_counter() {}
-
- /*!
- * Assignment
- *
- * \post The reference counter is not modified after assignment
- */
- intrusive_ref_counter& operator= (intrusive_ref_counter const&) { return *this; }
-
- /*!
- * \return The reference counter
- */
- unsigned long use_count() const
- {
- return static_cast< unsigned long >(static_cast< long >(m_RefCounter));
- }
-
-#ifndef BOOST_LOG_DOXYGEN_PASS
- friend void intrusive_ptr_add_ref(const intrusive_ref_counter* p);
- friend void intrusive_ptr_release(const intrusive_ref_counter* p);
-#endif // BOOST_LOG_DOXYGEN_PASS
+ virtual ~legacy_intrusive_ref_counter_root() {}
};
-#ifndef BOOST_LOG_DOXYGEN_PASS
-inline void intrusive_ptr_add_ref(const intrusive_ref_counter* p)
-{
- ++p->m_RefCounter;
-}
-inline void intrusive_ptr_release(const intrusive_ref_counter* p)
-{
- if (--p->m_RefCounter == 0)
- delete p;
-}
-#endif // BOOST_LOG_DOXYGEN_PASS
+} // namespace aux
+
+typedef boost::intrusive_ref_counter< aux::legacy_intrusive_ref_counter_root > intrusive_ref_counter;
BOOST_LOG_CLOSE_NAMESPACE // namespace log
diff --git a/3party/boost/boost/log/utility/manipulators.hpp b/3party/boost/boost/log/utility/manipulators.hpp
index 2081d4e6ab..cee1affd2a 100644
--- a/3party/boost/boost/log/utility/manipulators.hpp
+++ b/3party/boost/boost/log/utility/manipulators.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +21,7 @@
#include <boost/log/utility/manipulators/to_log.hpp>
#include <boost/log/utility/manipulators/dump.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/manipulators/add_value.hpp b/3party/boost/boost/log/utility/manipulators/add_value.hpp
index 69bd8a8328..8d4a7c610f 100644
--- a/3party/boost/boost/log/utility/manipulators/add_value.hpp
+++ b/3party/boost/boost/log/utility/manipulators/add_value.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,6 +15,8 @@
#ifndef BOOST_LOG_UTILITY_MANIPULATORS_ADD_VALUE_HPP_INCLUDED_
#define BOOST_LOG_UTILITY_MANIPULATORS_ADD_VALUE_HPP_INCLUDED_
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_scalar.hpp>
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/log/detail/config.hpp>
@@ -25,7 +27,7 @@
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -54,25 +56,39 @@ public:
typedef typename remove_cv< typename remove_reference< reference_type >::type >::type value_type;
private:
- // The stored reference type is always an lvalue reference since apparently different compilers (GCC and MSVC) have different quirks when rvalue references are stored as members
- typedef typename remove_reference< reference_type >::type& stored_reference_type;
+ // The stored reference type is an lvalue reference since apparently different compilers (GCC and MSVC) have different quirks when rvalue references are stored as members.
+ // Additionally, MSVC (at least 11.0) has a bug which causes a dangling reference to be stored in the manipulator, if a scalar rvalue is passed to the add_value generator.
+ // To work around this problem we save the value inside the manipulator in this case.
+ typedef typename remove_reference< reference_type >::type& lvalue_reference_type;
+
+ typedef typename mpl::if_<
+ is_scalar< value_type >,
+ value_type,
+ lvalue_reference_type
+ >::type stored_type;
+
+ typedef typename mpl::if_<
+ is_scalar< value_type >,
+ value_type,
+ reference_type
+ >::type get_value_result_type;
private:
//! Attribute value
- stored_reference_type m_value;
+ stored_type m_value;
//! Attribute name
attribute_name m_name;
public:
//! Initializing constructor
- add_value_manip(attribute_name const& name, reference_type value) : m_value(static_cast< stored_reference_type >(value)), m_name(name)
+ add_value_manip(attribute_name const& name, reference_type value) : m_value(static_cast< lvalue_reference_type >(value)), m_name(name)
{
}
//! Returns attribute name
attribute_name get_name() const { return m_name; }
//! Returns attribute value
- reference_type get_value() const { return static_cast< reference_type >(m_value); }
+ get_value_result_type get_value() const { return static_cast< get_value_result_type >(m_value); }
};
//! The operator attaches an attribute value to the log record
@@ -86,7 +102,7 @@ inline basic_record_ostream< CharT >& operator<< (basic_record_ostream< CharT >&
}
//! The function creates a manipulator that attaches an attribute value to a log record
-#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1600)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template< typename T >
inline add_value_manip< T&& > add_value(attribute_name const& name, T&& value)
@@ -111,7 +127,15 @@ add_value(expressions::attribute_keyword< DescriptorT, ActorT > const&, typename
return add_value_manip< typename DescriptorT::value_type& >(DescriptorT::get_name(), value);
}
-#else // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1600)
+//! \overload
+template< typename DescriptorT, template< typename > class ActorT >
+inline add_value_manip< typename DescriptorT::value_type const& >
+add_value(expressions::attribute_keyword< DescriptorT, ActorT > const&, typename DescriptorT::value_type const& value)
+{
+ return add_value_manip< typename DescriptorT::value_type const& >(DescriptorT::get_name(), value);
+}
+
+#else // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template< typename T >
inline add_value_manip< T const& > add_value(attribute_name const& name, T const& value)
@@ -126,7 +150,7 @@ add_value(expressions::attribute_keyword< DescriptorT, ActorT > const&, typename
return add_value_manip< typename DescriptorT::value_type const& >(DescriptorT::get_name(), value);
}
-#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1600)
+#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
BOOST_LOG_CLOSE_NAMESPACE // namespace log
diff --git a/3party/boost/boost/log/utility/manipulators/dump.hpp b/3party/boost/boost/log/utility/manipulators/dump.hpp
index 7dcaf74061..99b2fad749 100644
--- a/3party/boost/boost/log/utility/manipulators/dump.hpp
+++ b/3party/boost/boost/log/utility/manipulators/dump.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -32,14 +32,14 @@ namespace aux {
typedef void dump_data_char_t(const void* data, std::size_t size, std::basic_ostream< char >& strm);
extern BOOST_LOG_API dump_data_char_t* dump_data_char;
-BOOST_LOG_FORCEINLINE void dump_data(const void* data, std::size_t size, std::basic_ostream< char >& strm)
+BOOST_FORCEINLINE void dump_data(const void* data, std::size_t size, std::basic_ostream< char >& strm)
{
(dump_data_char)(data, size, strm);
}
typedef void dump_data_wchar_t(const void* data, std::size_t size, std::basic_ostream< wchar_t >& strm);
extern BOOST_LOG_API dump_data_wchar_t* dump_data_wchar;
-BOOST_LOG_FORCEINLINE void dump_data(const void* data, std::size_t size, std::basic_ostream< wchar_t >& strm)
+BOOST_FORCEINLINE void dump_data(const void* data, std::size_t size, std::basic_ostream< wchar_t >& strm)
{
(dump_data_wchar)(data, size, strm);
}
@@ -47,7 +47,7 @@ BOOST_LOG_FORCEINLINE void dump_data(const void* data, std::size_t size, std::ba
#if !defined(BOOST_NO_CXX11_CHAR16_T)
typedef void dump_data_char16_t(const void* data, std::size_t size, std::basic_ostream< char16_t >& strm);
extern BOOST_LOG_API dump_data_char16_t* dump_data_char16;
-BOOST_LOG_FORCEINLINE void dump_data(const void* data, std::size_t size, std::basic_ostream< char16_t >& strm)
+BOOST_FORCEINLINE void dump_data(const void* data, std::size_t size, std::basic_ostream< char16_t >& strm)
{
(dump_data_char16)(data, size, strm);
}
@@ -56,7 +56,7 @@ BOOST_LOG_FORCEINLINE void dump_data(const void* data, std::size_t size, std::ba
#if !defined(BOOST_NO_CXX11_CHAR32_T)
typedef void dump_data_char32_t(const void* data, std::size_t size, std::basic_ostream< char32_t >& strm);
extern BOOST_LOG_API dump_data_char32_t* dump_data_char32;
-BOOST_LOG_FORCEINLINE void dump_data(const void* data, std::size_t size, std::basic_ostream< char32_t >& strm)
+BOOST_FORCEINLINE void dump_data(const void* data, std::size_t size, std::basic_ostream< char32_t >& strm)
{
(dump_data_char32)(data, size, strm);
}
diff --git a/3party/boost/boost/log/utility/manipulators/to_log.hpp b/3party/boost/boost/log/utility/manipulators/to_log.hpp
index 5bde6dd63e..51e96f5bc1 100644
--- a/3party/boost/boost/log/utility/manipulators/to_log.hpp
+++ b/3party/boost/boost/log/utility/manipulators/to_log.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +21,7 @@
#include <boost/log/utility/formatting_ostream_fwd.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/once_block.hpp b/3party/boost/boost/log/utility/once_block.hpp
index 614215c265..e52f3d1738 100644
--- a/3party/boost/boost/log/utility/once_block.hpp
+++ b/3party/boost/boost/log/utility/once_block.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/unique_identifier_name.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -36,9 +36,10 @@ BOOST_LOG_OPEN_NAMESPACE
* macro. Usage example:
*
* <code>
+ * once_block_flag flag = BOOST_LOG_ONCE_BLOCK_INIT;
+ *
* void foo()
* {
- * static once_block_flag flag = BOOST_LOG_ONCE_BLOCK_INIT;
* BOOST_LOG_ONCE_BLOCK_FLAG(flag)
* {
* puts("Hello, world once!");
@@ -52,11 +53,11 @@ struct once_block_flag
// Do not use, implementation detail
enum
{
- uninitialized = 0,
+ uninitialized = 0, // this must be zero, so that zero-initialized once_block_flag is equivalent to the one initialized with uninitialized
being_initialized,
initialized
- }
- status;
+ };
+ unsigned char status;
#endif // BOOST_LOG_DOXYGEN_PASS
};
@@ -72,33 +73,33 @@ namespace aux {
class once_block_sentry
{
private:
- once_block_flag& m_Flag;
+ once_block_flag& m_flag;
public:
- explicit once_block_sentry(once_block_flag& f) : m_Flag(f)
+ explicit once_block_sentry(once_block_flag& f) BOOST_NOEXCEPT : m_flag(f)
{
}
- ~once_block_sentry()
+ ~once_block_sentry() BOOST_NOEXCEPT
{
- if (m_Flag.status != once_block_flag::initialized)
+ if (m_flag.status != once_block_flag::initialized)
rollback();
}
- bool executed() const
+ bool executed() const BOOST_NOEXCEPT
{
- return (m_Flag.status == once_block_flag::initialized || enter_once_block());
+ return (m_flag.status == once_block_flag::initialized || enter_once_block());
}
- BOOST_LOG_API void commit();
+ BOOST_LOG_API void commit() BOOST_NOEXCEPT;
private:
- // Non-copyable, non-assignable
- once_block_sentry(once_block_sentry const&);
- once_block_sentry& operator= (once_block_sentry const&);
+ BOOST_LOG_API bool enter_once_block() const BOOST_NOEXCEPT;
+ BOOST_LOG_API void rollback() BOOST_NOEXCEPT;
- BOOST_LOG_API bool enter_once_block() const;
- BOOST_LOG_API void rollback();
+ // Non-copyable, non-assignable
+ BOOST_DELETED_FUNCTION(once_block_sentry(once_block_sentry const&))
+ BOOST_DELETED_FUNCTION(once_block_sentry& operator= (once_block_sentry const&))
};
} // namespace aux
@@ -125,27 +126,26 @@ namespace aux {
class once_block_sentry
{
private:
- once_block_flag& m_Flag;
+ once_block_flag& m_flag;
public:
- explicit once_block_sentry(once_block_flag& f) : m_Flag(f)
+ explicit once_block_sentry(once_block_flag& f) BOOST_NOEXCEPT : m_flag(f)
{
}
- bool executed() const
+ bool executed() const BOOST_NOEXCEPT
{
- return m_Flag.status;
+ return m_flag.status;
}
- void commit()
+ void commit() BOOST_NOEXCEPT
{
- m_Flag.status = true;
+ m_flag.status = true;
}
-private:
// Non-copyable, non-assignable
- once_block_sentry(once_block_sentry const&);
- once_block_sentry& operator= (once_block_sentry const&);
+ BOOST_DELETED_FUNCTION(once_block_sentry(once_block_sentry const&))
+ BOOST_DELETED_FUNCTION(once_block_sentry& operator= (once_block_sentry const&))
};
} // namespace aux
@@ -160,10 +160,11 @@ BOOST_LOG_CLOSE_NAMESPACE // namespace log
#define BOOST_LOG_ONCE_BLOCK_FLAG_INTERNAL(flag_var, sentry_var)\
for (boost::log::aux::once_block_sentry sentry_var((flag_var));\
- !sentry_var.executed(); sentry_var.commit())
+ BOOST_UNLIKELY(!sentry_var.executed()); sentry_var.commit())
+// NOTE: flag_var deliberately doesn't have an initializer so that it is zero-initialized at the static initialization stage
#define BOOST_LOG_ONCE_BLOCK_INTERNAL(flag_var, sentry_var)\
- static boost::log::once_block_flag flag_var = BOOST_LOG_ONCE_BLOCK_INIT;\
+ static boost::log::once_block_flag flag_var;\
BOOST_LOG_ONCE_BLOCK_FLAG_INTERNAL(flag_var, sentry_var)
#endif // BOOST_LOG_DOXYGEN_PASS
@@ -176,7 +177,7 @@ BOOST_LOG_CLOSE_NAMESPACE // namespace log
* been executed.
*/
#define BOOST_LOG_ONCE_BLOCK_FLAG(flag_var)\
- BOOST_LOG_ONCE_BLOCK_INTERNAL(\
+ BOOST_LOG_ONCE_BLOCK_FLAG_INTERNAL(\
flag_var,\
BOOST_LOG_UNIQUE_IDENTIFIER_NAME(_boost_log_once_block_sentry_))
diff --git a/3party/boost/boost/log/utility/record_ordering.hpp b/3party/boost/boost/log/utility/record_ordering.hpp
index 4950d13a99..bed3b80280 100644
--- a/3party/boost/boost/log/utility/record_ordering.hpp
+++ b/3party/boost/boost/log/utility/record_ordering.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/utility/functional/nop.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/setup.hpp b/3party/boost/boost/log/utility/setup.hpp
index 68428e276b..135d7dc33c 100644
--- a/3party/boost/boost/log/utility/setup.hpp
+++ b/3party/boost/boost/log/utility/setup.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -30,7 +30,7 @@
#include <boost/log/utility/setup/filter_parser.hpp>
#include <boost/log/utility/setup/formatter_parser.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/setup/common_attributes.hpp b/3party/boost/boost/log/utility/setup/common_attributes.hpp
index a9315b8daa..f2545e963c 100644
--- a/3party/boost/boost/log/utility/setup/common_attributes.hpp
+++ b/3party/boost/boost/log/utility/setup/common_attributes.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/detail/default_attribute_names.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/setup/console.hpp b/3party/boost/boost/log/utility/setup/console.hpp
index 25a9d42c29..fadde4e9b6 100644
--- a/3party/boost/boost/log/utility/setup/console.hpp
+++ b/3party/boost/boost/log/utility/setup/console.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -16,8 +16,9 @@
#define BOOST_LOG_UTILITY_SETUP_CONSOLE_HPP_INCLUDED_
#include <iostream>
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared_object.hpp>
+#include <boost/core/null_deleter.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/sink_init_helpers.hpp>
#ifndef BOOST_LOG_NO_THREADS
@@ -26,13 +27,12 @@
#include <boost/log/sinks/unlocked_frontend.hpp>
#endif
#include <boost/log/sinks/text_ostream_backend.hpp>
-#include <boost/log/utility/empty_deleter.hpp>
#include <boost/log/keywords/format.hpp>
#include <boost/log/keywords/filter.hpp>
#include <boost/log/keywords/auto_flush.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -59,7 +59,7 @@ shared_ptr<
>
> add_console_log(std::basic_ostream< CharT >& strm, ArgsT const& args)
{
- shared_ptr< std::basic_ostream< CharT > > pStream(&strm, empty_deleter());
+ shared_ptr< std::basic_ostream< CharT > > pStream(&strm, boost::null_deleter());
typedef sinks::basic_text_ostream_backend< CharT > backend_t;
shared_ptr< backend_t > pBackend = boost::make_shared< backend_t >();
diff --git a/3party/boost/boost/log/utility/setup/file.hpp b/3party/boost/boost/log/utility/setup/file.hpp
index 0391096184..12e9f0bc30 100644
--- a/3party/boost/boost/log/utility/setup/file.hpp
+++ b/3party/boost/boost/log/utility/setup/file.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -15,8 +15,8 @@
#ifndef BOOST_LOG_UTILITY_SETUP_FILE_HPP_INCLUDED_
#define BOOST_LOG_UTILITY_SETUP_FILE_HPP_INCLUDED_
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared_object.hpp>
#include <boost/parameter/parameters.hpp> // for is_named_argument
#include <boost/preprocessor/comparison/greater.hpp>
#include <boost/preprocessor/punctuation/comma_if.hpp>
@@ -37,7 +37,7 @@
#include <boost/log/keywords/scan_method.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/setup/filter_parser.hpp b/3party/boost/boost/log/utility/setup/filter_parser.hpp
index 29035635ac..cdc0634fd1 100644
--- a/3party/boost/boost/log/utility/setup/filter_parser.hpp
+++ b/3party/boost/boost/log/utility/setup/filter_parser.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -16,9 +16,9 @@
#define BOOST_LOG_UTILITY_SETUP_FILTER_PARSER_HPP_INCLUDED_
#include <string>
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
#include <boost/lexical_cast.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared_object.hpp>
#include <boost/phoenix/operator/comparison.hpp>
#include <boost/type_traits/is_base_and_derived.hpp>
#include <boost/utility/enable_if.hpp>
@@ -34,7 +34,7 @@
#include <boost/log/core/core.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -56,7 +56,7 @@ struct filter_factory
/*!
* Default constructor
*/
- BOOST_LOG_DEFAULTED_FUNCTION(filter_factory(), {})
+ BOOST_DEFAULTED_FUNCTION(filter_factory(), {})
/*!
* Virtual destructor
@@ -77,7 +77,7 @@ struct filter_factory
virtual filter on_equality_relation(attribute_name const& name, string_type const& arg)
{
BOOST_LOG_THROW_DESCR_PARAMS(parse_error, "The equality attribute value relation is not supported", (name));
- BOOST_LOG_UNREACHABLE();
+ BOOST_LOG_UNREACHABLE_RETURN(filter());
}
/*!
* The callback for inequality relation filter
@@ -85,7 +85,7 @@ struct filter_factory
virtual filter on_inequality_relation(attribute_name const& name, string_type const& arg)
{
BOOST_LOG_THROW_DESCR_PARAMS(parse_error, "The inequality attribute value relation is not supported", (name));
- BOOST_LOG_UNREACHABLE();
+ BOOST_LOG_UNREACHABLE_RETURN(filter());
}
/*!
* The callback for less relation filter
@@ -93,7 +93,7 @@ struct filter_factory
virtual filter on_less_relation(attribute_name const& name, string_type const& arg)
{
BOOST_LOG_THROW_DESCR_PARAMS(parse_error, "The less attribute value relation is not supported", (name));
- BOOST_LOG_UNREACHABLE();
+ BOOST_LOG_UNREACHABLE_RETURN(filter());
}
/*!
* The callback for greater relation filter
@@ -101,7 +101,7 @@ struct filter_factory
virtual filter on_greater_relation(attribute_name const& name, string_type const& arg)
{
BOOST_LOG_THROW_DESCR_PARAMS(parse_error, "The greater attribute value relation is not supported", (name));
- BOOST_LOG_UNREACHABLE();
+ BOOST_LOG_UNREACHABLE_RETURN(filter());
}
/*!
* The callback for less or equal relation filter
@@ -109,7 +109,7 @@ struct filter_factory
virtual filter on_less_or_equal_relation(attribute_name const& name, string_type const& arg)
{
BOOST_LOG_THROW_DESCR_PARAMS(parse_error, "The less-or-equal attribute value relation is not supported", (name));
- BOOST_LOG_UNREACHABLE();
+ BOOST_LOG_UNREACHABLE_RETURN(filter());
}
/*!
* The callback for greater or equal relation filter
@@ -117,7 +117,7 @@ struct filter_factory
virtual filter on_greater_or_equal_relation(attribute_name const& name, string_type const& arg)
{
BOOST_LOG_THROW_DESCR_PARAMS(parse_error, "The greater-or-equal attribute value relation is not supported", (name));
- BOOST_LOG_UNREACHABLE();
+ BOOST_LOG_UNREACHABLE_RETURN(filter());
}
/*!
@@ -126,11 +126,11 @@ struct filter_factory
virtual filter on_custom_relation(attribute_name const& name, string_type const& rel, string_type const& arg)
{
BOOST_LOG_THROW_DESCR_PARAMS(parse_error, "The custom attribute value relation \"" + boost::log::aux::to_narrow(arg) + "\" is not supported", (name));
- BOOST_LOG_UNREACHABLE();
+ BOOST_LOG_UNREACHABLE_RETURN(filter());
}
- BOOST_LOG_DELETED_FUNCTION(filter_factory(filter_factory const&))
- BOOST_LOG_DELETED_FUNCTION(filter_factory& operator= (filter_factory const&))
+ BOOST_DELETED_FUNCTION(filter_factory(filter_factory const&))
+ BOOST_DELETED_FUNCTION(filter_factory& operator= (filter_factory const&))
};
/*!
@@ -209,7 +209,7 @@ public:
virtual filter on_custom_relation(attribute_name const& name, string_type const& rel, string_type const& arg)
{
BOOST_LOG_THROW_DESCR_PARAMS(parse_error, "The custom attribute value relation \"" + boost::log::aux::to_narrow(arg) + "\" is not supported", (name));
- BOOST_LOG_UNREACHABLE();
+ BOOST_LOG_UNREACHABLE_RETURN(filter());
}
/*!
diff --git a/3party/boost/boost/log/utility/setup/formatter_parser.hpp b/3party/boost/boost/log/utility/setup/formatter_parser.hpp
index 429321452d..df78d2ae7e 100644
--- a/3party/boost/boost/log/utility/setup/formatter_parser.hpp
+++ b/3party/boost/boost/log/utility/setup/formatter_parser.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <iosfwd>
#include <map>
#include <string>
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared_object.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_base_and_derived.hpp>
#include <boost/log/detail/setup_config.hpp>
@@ -31,7 +31,7 @@
#include <boost/log/expressions/formatters/stream.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -60,7 +60,7 @@ struct formatter_factory
/*!
* Default constructor
*/
- BOOST_LOG_DEFAULTED_FUNCTION(formatter_factory(), {})
+ BOOST_DEFAULTED_FUNCTION(formatter_factory(), {})
/*!
* Virtual destructor
@@ -75,8 +75,8 @@ struct formatter_factory
*/
virtual formatter_type create_formatter(attribute_name const& name, args_map const& args) = 0;
- BOOST_LOG_DELETED_FUNCTION(formatter_factory(formatter_factory const&))
- BOOST_LOG_DELETED_FUNCTION(formatter_factory& operator= (formatter_factory const&))
+ BOOST_DELETED_FUNCTION(formatter_factory(formatter_factory const&))
+ BOOST_DELETED_FUNCTION(formatter_factory& operator= (formatter_factory const&))
};
/*!
diff --git a/3party/boost/boost/log/utility/setup/from_settings.hpp b/3party/boost/boost/log/utility/setup/from_settings.hpp
index 6de6f257fd..50c36f524c 100644
--- a/3party/boost/boost/log/utility/setup/from_settings.hpp
+++ b/3party/boost/boost/log/utility/setup/from_settings.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,7 +17,7 @@
#define BOOST_LOG_UTILITY_SETUP_FROM_SETTINGS_HPP_INCLUDED_
#include <string>
-#include <boost/shared_ptr.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_base_and_derived.hpp>
#include <boost/log/detail/setup_config.hpp>
@@ -25,7 +25,7 @@
#include <boost/log/utility/setup/settings.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -60,7 +60,7 @@ struct sink_factory
/*!
* Default constructor
*/
- BOOST_LOG_DEFAULTED_FUNCTION(sink_factory(), {})
+ BOOST_DEFAULTED_FUNCTION(sink_factory(), {})
/*!
* Virtual destructor
@@ -74,8 +74,8 @@ struct sink_factory
*/
virtual shared_ptr< sinks::sink > create_sink(settings_section const& settings) = 0;
- BOOST_LOG_DELETED_FUNCTION(sink_factory(sink_factory const&))
- BOOST_LOG_DELETED_FUNCTION(sink_factory& operator= (sink_factory const&))
+ BOOST_DELETED_FUNCTION(sink_factory(sink_factory const&))
+ BOOST_DELETED_FUNCTION(sink_factory& operator= (sink_factory const&))
};
/*!
diff --git a/3party/boost/boost/log/utility/setup/from_stream.hpp b/3party/boost/boost/log/utility/setup/from_stream.hpp
index 68aa9d3bd9..0b87459e7c 100644
--- a/3party/boost/boost/log/utility/setup/from_stream.hpp
+++ b/3party/boost/boost/log/utility/setup/from_stream.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/detail/setup_config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/setup/settings.hpp b/3party/boost/boost/log/utility/setup/settings.hpp
index 379e544aba..bf8a608dea 100644
--- a/3party/boost/boost/log/utility/setup/settings.hpp
+++ b/3party/boost/boost/log/utility/setup/settings.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,16 +26,16 @@
#include <boost/property_tree/ptree.hpp>
#include <boost/log/detail/setup_config.hpp>
#include <boost/log/detail/native_typeof.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#if !defined(BOOST_LOG_TYPEOF)
#include <boost/utility/enable_if.hpp>
#endif
-#if defined(BOOST_LOG_TYPEOF) && defined(BOOST_LOG_NO_TRAILING_RESULT_TYPE)
+#if defined(BOOST_LOG_TYPEOF) && defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES)
#include <boost/utility/declval.hpp>
#endif
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -175,7 +175,7 @@ private:
return *this;
}
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL()
bool operator! () const
{
@@ -223,7 +223,7 @@ private:
}
#if defined(BOOST_LOG_TYPEOF) && !(defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__) && !defined(__PATHSCALE__) && !defined(__GXX_EXPERIMENTAL_CXX0X__) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 5))
-#if !defined(BOOST_LOG_NO_TRAILING_RESULT_TYPE)
+#if !defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES)
template< typename T >
auto or_default(T const& def_value) const -> BOOST_LOG_TYPEOF(property_tree_type().get(typename property_tree_type::path_type(), def_value))
{
@@ -297,7 +297,7 @@ private:
typedef typename iterator_adaptor_::reference reference;
public:
- BOOST_LOG_DEFAULTED_FUNCTION(iter(), {})
+ BOOST_DEFAULTED_FUNCTION(iter(), {})
template< bool OtherIsConstV >
iter(iter< OtherIsConstV > const& that) : iterator_adaptor_(that.base()) {}
explicit iter(base_iterator_type const& it) : iterator_adaptor_(it) {}
@@ -368,12 +368,12 @@ public:
/*!
* Checks if the section refers to the container.
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* Checks if the section refers to the container.
*/
- bool operator! () const { return !m_ptree; }
+ bool operator! () const BOOST_NOEXCEPT { return !m_ptree; }
/*!
* Returns an iterator over the nested subsections and parameters.
@@ -506,7 +506,7 @@ public:
{
if (m_ptree)
{
- optional< property_tree_type const& > section = m_ptree->get_child_optional(section_name);
+ optional< property_tree_type& > section = m_ptree->get_child_optional(section_name);
if (!!section)
return (section->find(param_name) != section->not_found());
}
diff --git a/3party/boost/boost/log/utility/setup/settings_parser.hpp b/3party/boost/boost/log/utility/setup/settings_parser.hpp
index 8e4b38b336..cf1ea8ea1a 100644
--- a/3party/boost/boost/log/utility/setup/settings_parser.hpp
+++ b/3party/boost/boost/log/utility/setup/settings_parser.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -20,7 +20,7 @@
#include <boost/log/utility/setup/settings.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/strictest_lock.hpp b/3party/boost/boost/log/utility/strictest_lock.hpp
index ae2282aa53..44733167a6 100644
--- a/3party/boost/boost/log/utility/strictest_lock.hpp
+++ b/3party/boost/boost/log/utility/strictest_lock.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,7 +33,7 @@
#endif
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/string_literal.hpp b/3party/boost/boost/log/utility/string_literal.hpp
index e28be9ded6..cb437fbc33 100644
--- a/3party/boost/boost/log/utility/string_literal.hpp
+++ b/3party/boost/boost/log/utility/string_literal.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,6 +18,7 @@
#include <cstddef>
#include <stdexcept>
#include <iosfwd>
+#include <ios> // std::streamsize
#include <string>
#include <iterator>
#include <boost/operators.hpp>
@@ -28,7 +29,7 @@
#include <boost/log/utility/string_literal_fwd.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -92,7 +93,7 @@ public:
*
* \post <tt>empty() == true</tt>
*/
- basic_string_literal() { clear(); }
+ basic_string_literal() BOOST_NOEXCEPT { clear(); }
/*!
* Constructor from a string literal
@@ -105,7 +106,7 @@ public:
//! \cond
, typename enable_if< is_same< T, const value_type >, int >::type = 0
//! \endcond
- )
+ ) BOOST_NOEXCEPT
: m_pStart(p), m_Len(LenV - 1)
{
}
@@ -116,7 +117,7 @@ public:
* \post <tt>*this == that</tt>
* \param that Source literal to copy string from
*/
- basic_string_literal(basic_string_literal const& that) : m_pStart(that.m_pStart), m_Len(that.m_Len) {}
+ basic_string_literal(basic_string_literal const& that) BOOST_NOEXCEPT : m_pStart(that.m_pStart), m_Len(that.m_Len) {}
/*!
* Assignment operator
@@ -124,7 +125,7 @@ public:
* \post <tt>*this == that</tt>
* \param that Source literal to copy string from
*/
- this_type& operator= (this_type const& that)
+ this_type& operator= (this_type const& that) BOOST_NOEXCEPT
{
return assign(that);
}
@@ -143,7 +144,7 @@ public:
#else
this_type&
#endif // BOOST_LOG_DOXYGEN_PASS
- operator= (T(&p)[LenV])
+ operator= (T(&p)[LenV]) BOOST_NOEXCEPT
{
return assign(p);
}
@@ -154,7 +155,7 @@ public:
* \param that Comparand
* \return \c true if the comparand string equals to this string, \c false otherwise
*/
- bool operator== (this_type const& that) const
+ bool operator== (this_type const& that) const BOOST_NOEXCEPT
{
return (compare_internal(m_pStart, m_Len, that.m_pStart, that.m_Len) == 0);
}
@@ -164,7 +165,7 @@ public:
* \param str Comparand. Must point to a zero-terminated sequence of characters, must not be NULL.
* \return \c true if the comparand string equals to this string, \c false otherwise
*/
- bool operator== (const_pointer str) const
+ bool operator== (const_pointer str) const BOOST_NOEXCEPT
{
return (compare_internal(m_pStart, m_Len, str, traits_type::length(str)) == 0);
}
@@ -185,7 +186,7 @@ public:
* \param that Comparand
* \return \c true if this string is less than the comparand, \c false otherwise
*/
- bool operator< (this_type const& that) const
+ bool operator< (this_type const& that) const BOOST_NOEXCEPT
{
return (compare_internal(m_pStart, m_Len, that.m_pStart, that.m_Len) < 0);
}
@@ -195,7 +196,7 @@ public:
* \param str Comparand. Must point to a zero-terminated sequence of characters, must not be NULL.
* \return \c true if this string is less than the comparand, \c false otherwise
*/
- bool operator< (const_pointer str) const
+ bool operator< (const_pointer str) const BOOST_NOEXCEPT
{
return (compare_internal(m_pStart, m_Len, str, traits_type::length(str)) < 0);
}
@@ -216,7 +217,7 @@ public:
* \param that Comparand
* \return \c true if this string is greater than the comparand, \c false otherwise
*/
- bool operator> (this_type const& that) const
+ bool operator> (this_type const& that) const BOOST_NOEXCEPT
{
return (compare_internal(m_pStart, m_Len, that.m_pStart, that.m_Len) > 0);
}
@@ -226,7 +227,7 @@ public:
* \param str Comparand. Must point to a zero-terminated sequence of characters, must not be NULL.
* \return \c true if this string is greater than the comparand, \c false otherwise
*/
- bool operator> (const_pointer str) const
+ bool operator> (const_pointer str) const BOOST_NOEXCEPT
{
return (compare_internal(m_pStart, m_Len, str, traits_type::length(str)) > 0);
}
@@ -248,7 +249,7 @@ public:
* \param i Requested character index
* \return Constant reference to the requested character
*/
- const_reference operator[] (size_type i) const
+ const_reference operator[] (size_type i) const BOOST_NOEXCEPT
{
return m_pStart[i];
}
@@ -270,24 +271,24 @@ public:
/*!
* \return Pointer to the beginning of the literal
*/
- const_pointer c_str() const { return m_pStart; }
+ const_pointer c_str() const BOOST_NOEXCEPT { return m_pStart; }
/*!
* \return Pointer to the beginning of the literal
*/
- const_pointer data() const { return m_pStart; }
+ const_pointer data() const BOOST_NOEXCEPT { return m_pStart; }
/*!
* \return Length of the literal
*/
- size_type size() const { return m_Len; }
+ size_type size() const BOOST_NOEXCEPT { return m_Len; }
/*!
* \return Length of the literal
*/
- size_type length() const { return m_Len; }
+ size_type length() const BOOST_NOEXCEPT { return m_Len; }
/*!
* \return \c true if the literal is an empty string, \c false otherwise
*/
- bool empty() const
+ bool empty() const BOOST_NOEXCEPT
{
return (m_Len == 0);
}
@@ -295,19 +296,19 @@ public:
/*!
* \return Iterator that points to the first character of the literal
*/
- const_iterator begin() const { return m_pStart; }
+ const_iterator begin() const BOOST_NOEXCEPT { return m_pStart; }
/*!
* \return Iterator that points after the last character of the literal
*/
- const_iterator end() const { return m_pStart + m_Len; }
+ const_iterator end() const BOOST_NOEXCEPT { return m_pStart + m_Len; }
/*!
* \return Reverse iterator that points to the last character of the literal
*/
- const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
+ const_reverse_iterator rbegin() const BOOST_NOEXCEPT { return const_reverse_iterator(end()); }
/*!
* \return Reverse iterator that points before the first character of the literal
*/
- const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
+ const_reverse_iterator rend() const BOOST_NOEXCEPT { return const_reverse_iterator(begin()); }
/*!
* \return STL string constructed from the literal
@@ -322,7 +323,7 @@ public:
*
* \post <tt>empty() == true</tt>
*/
- void clear()
+ void clear() BOOST_NOEXCEPT
{
m_pStart = g_EmptyString;
m_Len = 0;
@@ -330,13 +331,13 @@ public:
/*!
* The method swaps two literals
*/
- void swap(this_type& that)
+ void swap(this_type& that) BOOST_NOEXCEPT
{
- register const_pointer p = m_pStart;
+ const_pointer p = m_pStart;
m_pStart = that.m_pStart;
that.m_pStart = p;
- register size_type l = m_Len;
+ size_type l = m_Len;
m_Len = that.m_Len;
that.m_Len = l;
}
@@ -347,7 +348,7 @@ public:
* \post <tt>*this == that</tt>
* \param that Source literal to copy string from
*/
- this_type& assign(this_type const& that)
+ this_type& assign(this_type const& that) BOOST_NOEXCEPT
{
m_pStart = that.m_pStart;
m_Len = that.m_Len;
@@ -368,7 +369,7 @@ public:
#else
this_type&
#endif // BOOST_LOG_DOXYGEN_PASS
- assign(T(&p)[LenV])
+ assign(T(&p)[LenV]) BOOST_NOEXCEPT
{
m_pStart = p;
m_Len = LenV - 1;
@@ -392,7 +393,7 @@ public:
if (pos > m_Len)
BOOST_THROW_EXCEPTION(std::out_of_range("basic_string_literal::copy: the position is out of range"));
- register size_type len = m_Len - pos;
+ size_type len = m_Len - pos;
if (len > n)
len = n;
traits_type::copy(str, m_pStart + pos, len);
@@ -417,7 +418,7 @@ public:
if (pos > m_Len)
BOOST_THROW_EXCEPTION(std::out_of_range("basic_string_literal::compare: the position is out of range"));
- register size_type compare_size = m_Len - pos;
+ size_type compare_size = m_Len - pos;
if (compare_size > len)
compare_size = len;
if (compare_size > n)
@@ -436,7 +437,7 @@ public:
*
* \b Throws: An <tt>std::exception</tt>-based exception if \a pos is out of range.
*/
- int compare(size_type pos, size_type n, const_pointer str) const
+ int compare(size_type pos, size_type n, const_pointer str) const BOOST_NOEXCEPT
{
return compare(pos, n, str, traits_type::length(str));
}
@@ -452,7 +453,7 @@ public:
*
* \b Throws: An <tt>std::exception</tt>-based exception if \a pos is out of range.
*/
- int compare(size_type pos, size_type n, this_type const& that) const
+ int compare(size_type pos, size_type n, this_type const& that) const BOOST_NOEXCEPT
{
return compare(pos, n, that.c_str(), that.size());
}
@@ -464,7 +465,7 @@ public:
* \return Zero if the comparand equals this string, a negative value if this string is less than the comparand,
* a positive value if this string is greater than the comparand.
*/
- int compare(const_pointer str, size_type len) const
+ int compare(const_pointer str, size_type len) const BOOST_NOEXCEPT
{
return compare(0, m_Len, str, len);
}
@@ -475,7 +476,7 @@ public:
* \return Zero if the comparand equals this string, a negative value if this string is less than the comparand,
* a positive value if this string is greater than the comparand.
*/
- int compare(const_pointer str) const
+ int compare(const_pointer str) const BOOST_NOEXCEPT
{
return compare(0, m_Len, str, traits_type::length(str));
}
@@ -486,7 +487,7 @@ public:
* \return Zero if the comparand equals this string, a negative value if this string is less than the comparand,
* a positive value if this string is greater than the comparand.
*/
- int compare(this_type const& that) const
+ int compare(this_type const& that) const BOOST_NOEXCEPT
{
return compare(0, m_Len, that.c_str(), that.size());
}
@@ -494,16 +495,15 @@ public:
private:
#ifndef BOOST_LOG_DOXYGEN_PASS
//! Internal comparison implementation
- static int compare_internal(const_pointer pLeft, size_type LeftLen, const_pointer pRight, size_type RightLen)
+ static int compare_internal(const_pointer pLeft, size_type LeftLen, const_pointer pRight, size_type RightLen) BOOST_NOEXCEPT
{
if (pLeft != pRight)
{
- register const int result = traits_type::compare(
- pLeft, pRight, (LeftLen < RightLen ? LeftLen : RightLen));
+ const int result = traits_type::compare(pLeft, pRight, (LeftLen < RightLen ? LeftLen : RightLen));
if (result != 0)
return result;
}
- return static_cast< int >(LeftLen - RightLen);
+ return LeftLen < RightLen ? -1 : (LeftLen > RightLen ? 1 : 0);
}
#endif // BOOST_LOG_DOXYGEN_PASS
};
@@ -512,20 +512,64 @@ template< typename CharT, typename TraitsT >
typename basic_string_literal< CharT, TraitsT >::value_type const
basic_string_literal< CharT, TraitsT >::g_EmptyString[1] = { 0 };
+namespace aux {
+
+template< typename CharT, typename TraitsT >
+inline void insert_fill_chars(std::basic_ostream< CharT, TraitsT >& strm, std::size_t n)
+{
+ enum { chunk_size = 8 };
+ CharT fill_chars[chunk_size];
+ const CharT filler = strm.fill();
+ for (unsigned int i = 0; i < chunk_size; ++i)
+ fill_chars[i] = filler;
+ for (; n >= chunk_size && strm.good(); n -= chunk_size)
+ strm.write(fill_chars, static_cast< std::size_t >(chunk_size));
+ if (n > 0 && strm.good())
+ strm.write(fill_chars, n);
+}
+
+template< typename CharT, typename TraitsT >
+void insert_aligned(std::basic_ostream< CharT, TraitsT >& strm, const CharT* p, std::size_t size)
+{
+ const std::size_t alignment_size = static_cast< std::size_t >(strm.width()) - size;
+ const bool align_left = (strm.flags() & std::basic_ostream< CharT, TraitsT >::adjustfield) == std::basic_ostream< CharT, TraitsT >::left;
+ if (align_left)
+ {
+ strm.write(p, size);
+ if (strm.good())
+ aux::insert_fill_chars(strm, alignment_size);
+ }
+ else
+ {
+ aux::insert_fill_chars(strm, alignment_size);
+ if (strm.good())
+ strm.write(p, size);
+ }
+}
+
+} // namespace aux
+
//! Output operator
template< typename CharT, typename StrmTraitsT, typename LitTraitsT >
inline std::basic_ostream< CharT, StrmTraitsT >& operator<< (
std::basic_ostream< CharT, StrmTraitsT >& strm, basic_string_literal< CharT, LitTraitsT > const& lit)
{
- strm.write(lit.c_str(), static_cast< std::streamsize >(lit.size()));
+ if (strm.good())
+ {
+ const std::size_t size = lit.size();
+ const std::size_t w = static_cast< std::size_t >(strm.width());
+ if (w <= size)
+ strm.write(lit.c_str(), static_cast< std::streamsize >(size));
+ else
+ aux::insert_aligned(strm, lit.c_str(), lit.size());
+ strm.width(0);
+ }
return strm;
}
//! External swap
template< typename CharT, typename TraitsT >
-inline void swap(
- basic_string_literal< CharT, TraitsT >& left,
- basic_string_literal< CharT, TraitsT >& right)
+inline void swap(basic_string_literal< CharT, TraitsT >& left, basic_string_literal< CharT, TraitsT >& right) BOOST_NOEXCEPT
{
left.swap(right);
}
diff --git a/3party/boost/boost/log/utility/string_literal_fwd.hpp b/3party/boost/boost/log/utility/string_literal_fwd.hpp
index 33aa7d9467..69f48986f3 100644
--- a/3party/boost/boost/log/utility/string_literal_fwd.hpp
+++ b/3party/boost/boost/log/utility/string_literal_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -18,7 +18,7 @@
#include <string>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/type_dispatch/date_time_types.hpp b/3party/boost/boost/log/utility/type_dispatch/date_time_types.hpp
index fefdfc5e4b..5d91ab40c0 100644
--- a/3party/boost/boost/log/utility/type_dispatch/date_time_types.hpp
+++ b/3party/boost/boost/log/utility/type_dispatch/date_time_types.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/detail/config.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/type_dispatch/dynamic_type_dispatcher.hpp b/3party/boost/boost/log/utility/type_dispatch/dynamic_type_dispatcher.hpp
index 27356d4e42..8fa3c82d33 100644
--- a/3party/boost/boost/log/utility/type_dispatch/dynamic_type_dispatcher.hpp
+++ b/3party/boost/boost/log/utility/type_dispatch/dynamic_type_dispatcher.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,15 +19,15 @@
#include <memory>
#include <map>
#include <boost/ref.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared_object.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/visible_type.hpp>
#include <boost/log/utility/type_info_wrapper.hpp>
#include <boost/log/utility/type_dispatch/type_dispatcher.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/type_dispatch/standard_types.hpp b/3party/boost/boost/log/utility/type_dispatch/standard_types.hpp
index 2cfa5de624..0bf6a1db24 100644
--- a/3party/boost/boost/log/utility/type_dispatch/standard_types.hpp
+++ b/3party/boost/boost/log/utility/type_dispatch/standard_types.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/string_literal_fwd.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/log/utility/type_dispatch/static_type_dispatcher.hpp b/3party/boost/boost/log/utility/type_dispatch/static_type_dispatcher.hpp
index 6f08c1932a..73cf21b243 100644
--- a/3party/boost/boost/log/utility/type_dispatch/static_type_dispatcher.hpp
+++ b/3party/boost/boost/log/utility/type_dispatch/static_type_dispatcher.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 <boost/log/utility/type_dispatch/type_dispatcher.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -62,12 +62,12 @@ template< typename VisitorT >
struct dispatching_map_initializer
{
template< typename IteratorT >
- static BOOST_LOG_FORCEINLINE void init(IteratorT*, IteratorT*, std::pair< type_info_wrapper, void* >*)
+ static BOOST_FORCEINLINE void init(IteratorT*, IteratorT*, std::pair< type_info_wrapper, void* >*)
{
}
template< typename BeginIteratorT, typename EndIteratorT >
- static BOOST_LOG_FORCEINLINE void init(BeginIteratorT*, EndIteratorT* end, std::pair< type_info_wrapper, void* >* p)
+ static BOOST_FORCEINLINE void init(BeginIteratorT*, EndIteratorT* end, std::pair< type_info_wrapper, void* >* p)
{
typedef typename mpl::deref< BeginIteratorT >::type type;
do_init(static_cast< visible_type< type >* >(0), p);
@@ -78,7 +78,7 @@ struct dispatching_map_initializer
private:
template< typename T >
- static BOOST_LOG_FORCEINLINE void do_init(visible_type< T >*, std::pair< type_info_wrapper, void* >* p)
+ static BOOST_FORCEINLINE void do_init(visible_type< T >*, std::pair< type_info_wrapper, void* >* p)
{
p->first = typeid(visible_type< T >);
@@ -95,10 +95,63 @@ private:
}
};
+//! A base class for a dispatcher that supports a sequence of types
+class type_sequence_dispatcher_base :
+ public type_dispatcher
+{
+private:
+ //! Dispatching map element type
+ typedef std::pair< type_info_wrapper, void* > dispatching_map_element_type;
+
+private:
+ //! Dispatching map
+ const dispatching_map_element_type* m_dispatching_map_begin;
+ //! Dispatching map size
+ std::size_t m_dispatching_map_size;
+ //! Pointer to the receiver function
+ void* m_visitor;
+
+protected:
+ //! Initializing constructor
+ type_sequence_dispatcher_base(const dispatching_map_element_type* disp_map, std::size_t disp_map_size, void* visitor) BOOST_NOEXCEPT :
+ type_dispatcher(&type_sequence_dispatcher_base::get_callback),
+ m_dispatching_map_begin(disp_map),
+ m_dispatching_map_size(disp_map_size),
+ m_visitor(visitor)
+ {
+ }
+
+private:
+ //! The get_callback method implementation
+ static callback_base get_callback(type_dispatcher* p, std::type_info const& type)
+ {
+ type_sequence_dispatcher_base* const self = static_cast< type_sequence_dispatcher_base* >(p);
+ type_info_wrapper wrapper(type);
+ const dispatching_map_element_type* begin = self->m_dispatching_map_begin;
+ const dispatching_map_element_type* end = begin + self->m_dispatching_map_size;
+ const dispatching_map_element_type* it = std::lower_bound
+ (
+ begin,
+ end,
+ dispatching_map_element_type(wrapper, (void*)0),
+ dispatching_map_order()
+ );
+
+ if (it != end && it->first == wrapper)
+ return callback_base(self->m_visitor, it->second);
+ else
+ return callback_base();
+ }
+
+ // Copying and assignment closed
+ BOOST_DELETED_FUNCTION(type_sequence_dispatcher_base(type_sequence_dispatcher_base const&))
+ BOOST_DELETED_FUNCTION(type_sequence_dispatcher_base& operator= (type_sequence_dispatcher_base const&))
+};
+
//! A dispatcher that supports a sequence of types
template< typename TypeSequenceT >
class type_sequence_dispatcher :
- public type_dispatcher
+ public type_sequence_dispatcher_base
{
public:
//! Type sequence of the supported types
@@ -111,46 +164,17 @@ private:
mpl::size< supported_types >::value
> dispatching_map;
-private:
- //! Pointer to the receiver function
- void* m_pVisitor;
- //! Pointer to the dispatching map
- dispatching_map const& m_DispatchingMap;
-
public:
/*!
* Constructor. Initializes the dispatcher internals.
*/
template< typename VisitorT >
explicit type_sequence_dispatcher(VisitorT& visitor) :
- type_dispatcher(&type_sequence_dispatcher< supported_types >::get_callback),
- m_pVisitor((void*)boost::addressof(visitor)),
- m_DispatchingMap(get_dispatching_map< VisitorT >())
+ type_sequence_dispatcher_base(get_dispatching_map< VisitorT >().data(), dispatching_map::static_size, (void*)boost::addressof(visitor))
{
}
private:
- //! The get_callback method implementation
- static callback_base get_callback(type_dispatcher* p, std::type_info const& type)
- {
- type_sequence_dispatcher* const self = static_cast< type_sequence_dispatcher* >(p);
- type_info_wrapper wrapper(type);
- typename dispatching_map::value_type const* begin = &*self->m_DispatchingMap.begin();
- typename dispatching_map::value_type const* end = begin + dispatching_map::static_size;
- typename dispatching_map::value_type const* it =
- std::lower_bound(
- begin,
- end,
- std::make_pair(wrapper, (void*)0),
- dispatching_map_order()
- );
-
- if (it != end && it->first == wrapper)
- return callback_base(self->m_pVisitor, it->second);
- else
- return callback_base();
- }
-
//! The method returns the dispatching map instance
template< typename VisitorT >
static dispatching_map const& get_dispatching_map()
@@ -176,45 +200,61 @@ private:
}
// Copying and assignment closed
- BOOST_LOG_DELETED_FUNCTION(type_sequence_dispatcher(type_sequence_dispatcher const&))
- BOOST_LOG_DELETED_FUNCTION(type_sequence_dispatcher& operator= (type_sequence_dispatcher const&))
+ BOOST_DELETED_FUNCTION(type_sequence_dispatcher(type_sequence_dispatcher const&))
+ BOOST_DELETED_FUNCTION(type_sequence_dispatcher& operator= (type_sequence_dispatcher const&))
};
-//! A simple dispatcher that only supports one type
-template< typename T >
-class single_type_dispatcher :
+//! A base class for a single-type dispatcher
+class single_type_dispatcher_base :
public type_dispatcher
{
private:
+ //! The type to match against
+ std::type_info const& m_type;
//! A callback for the supported type
- callback_base m_Callback;
-
-public:
- //! Constructor
- template< typename VisitorT >
- explicit single_type_dispatcher(VisitorT& visitor) :
- type_dispatcher(&single_type_dispatcher< T >::get_callback),
- m_Callback(
- (void*)boost::addressof(visitor),
- &callback_base::trampoline< VisitorT, T >
- )
+ callback_base m_callback;
+
+protected:
+ //! Initializing constructor
+ single_type_dispatcher_base(std::type_info const& type, callback_base const& callback) BOOST_NOEXCEPT :
+ type_dispatcher(&single_type_dispatcher_base::get_callback),
+ m_type(type),
+ m_callback(callback)
{
}
+
+private:
//! The get_callback method implementation
static callback_base get_callback(type_dispatcher* p, std::type_info const& type)
{
- if (type == typeid(visible_type< T >))
- {
- single_type_dispatcher* const self = static_cast< single_type_dispatcher* >(p);
- return self->m_Callback;
- }
+ single_type_dispatcher_base* const self = static_cast< single_type_dispatcher_base* >(p);
+ if (type == self->m_type)
+ return self->m_callback;
else
return callback_base();
}
// Copying and assignment closed
- BOOST_LOG_DELETED_FUNCTION(single_type_dispatcher(single_type_dispatcher const&))
- BOOST_LOG_DELETED_FUNCTION(single_type_dispatcher& operator= (single_type_dispatcher const&))
+ BOOST_DELETED_FUNCTION(single_type_dispatcher_base(single_type_dispatcher_base const&))
+ BOOST_DELETED_FUNCTION(single_type_dispatcher_base& operator= (single_type_dispatcher_base const&))
+};
+
+//! A simple dispatcher that only supports one type
+template< typename T >
+class single_type_dispatcher :
+ public single_type_dispatcher_base
+{
+public:
+ //! Constructor
+ template< typename VisitorT >
+ explicit single_type_dispatcher(VisitorT& visitor) BOOST_NOEXCEPT :
+ single_type_dispatcher_base(typeid(visible_type< T >), callback_base((void*)boost::addressof(visitor), &callback_base::trampoline< VisitorT, T >))
+ {
+ }
+
+ // Copying and assignment closed
+ BOOST_DELETED_FUNCTION(single_type_dispatcher(single_type_dispatcher const&))
+ BOOST_DELETED_FUNCTION(single_type_dispatcher& operator= (single_type_dispatcher const&))
};
} // namespace aux
@@ -251,6 +291,13 @@ private:
public:
/*!
* Constructor. Initializes the dispatcher internals.
+ *
+ * The \a receiver object is not copied inside the dispatcher, but references to
+ * it may be kept by the dispatcher after construction. The receiver object must remain
+ * valid until the dispatcher is destroyed.
+ *
+ * \param receiver Unary function object that will be called on a dispatched value. The receiver
+ * must be callable with an argument of any of the supported types of the dispatcher.
*/
template< typename ReceiverT >
explicit static_type_dispatcher(ReceiverT& receiver) :
@@ -259,8 +306,8 @@ public:
}
// Copying and assignment prohibited
- BOOST_LOG_DELETED_FUNCTION(static_type_dispatcher(static_type_dispatcher const&))
- BOOST_LOG_DELETED_FUNCTION(static_type_dispatcher& operator= (static_type_dispatcher const&))
+ BOOST_DELETED_FUNCTION(static_type_dispatcher(static_type_dispatcher const&))
+ BOOST_DELETED_FUNCTION(static_type_dispatcher& operator= (static_type_dispatcher const&))
};
BOOST_LOG_CLOSE_NAMESPACE // namespace log
diff --git a/3party/boost/boost/log/utility/type_dispatch/type_dispatcher.hpp b/3party/boost/boost/log/utility/type_dispatch/type_dispatcher.hpp
index 14a95273e2..36e1ce8b05 100644
--- a/3party/boost/boost/log/utility/type_dispatch/type_dispatcher.hpp
+++ b/3party/boost/boost/log/utility/type_dispatch/type_dispatcher.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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,10 +19,10 @@
#include <boost/static_assert.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/visible_type.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -50,13 +50,13 @@ public:
void* m_pTrampoline;
public:
- explicit callback_base(void* visitor = 0, void* tramp = 0) :
+ explicit callback_base(void* visitor = 0, void* tramp = 0) BOOST_NOEXCEPT :
m_pVisitor(visitor),
m_pTrampoline(tramp)
{
}
template< typename ValueT >
- explicit callback_base(void* visitor, void (*tramp)(void*, ValueT const&)) :
+ explicit callback_base(void* visitor, void (*tramp)(void*, ValueT const&)) BOOST_NOEXCEPT :
m_pVisitor(visitor)
{
typedef void (*trampoline_t)(void*, ValueT const&);
@@ -92,10 +92,10 @@ public:
typedef T supported_type;
public:
- callback() : callback_base()
+ callback() BOOST_NOEXCEPT : callback_base()
{
}
- explicit callback(callback_base const& base) : callback_base(base)
+ explicit callback(callback_base const& base) BOOST_NOEXCEPT : callback_base(base)
{
}
@@ -112,9 +112,9 @@ public:
(caster.as_trampoline)(this->m_pVisitor, value);
}
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
- bool operator! () const { return (this->m_pVisitor == 0); }
+ bool operator! () const BOOST_NOEXCEPT { return (this->m_pVisitor == 0); }
};
#else // BOOST_LOG_DOXYGEN_PASS
@@ -136,12 +136,12 @@ public:
/*!
* The operator checks if the visitor is attached to a receiver
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* The operator checks if the visitor is not attached to a receiver
*/
- bool operator! () const;
+ bool operator! () const BOOST_NOEXCEPT;
};
#endif // BOOST_LOG_DOXYGEN_PASS
@@ -158,13 +158,14 @@ protected:
/*!
* Initializing constructor
*/
- explicit type_dispatcher(get_callback_impl_type get_callback_impl) : m_get_callback_impl(get_callback_impl)
+ explicit type_dispatcher(get_callback_impl_type get_callback_impl) BOOST_NOEXCEPT : m_get_callback_impl(get_callback_impl)
{
}
+
// Destructor and copying can only be called from the derived classes
- BOOST_LOG_DEFAULTED_FUNCTION(~type_dispatcher(), {})
- BOOST_LOG_DEFAULTED_FUNCTION(type_dispatcher(type_dispatcher const& that), : m_get_callback_impl(that.m_get_callback_impl) {})
- BOOST_LOG_DEFAULTED_FUNCTION(type_dispatcher& operator= (type_dispatcher const& that), { m_get_callback_impl = that.m_get_callback_impl; return *this; })
+ BOOST_DEFAULTED_FUNCTION(~type_dispatcher(), {})
+ BOOST_DEFAULTED_FUNCTION(type_dispatcher(type_dispatcher const& that), : m_get_callback_impl(that.m_get_callback_impl) {})
+ BOOST_DEFAULTED_FUNCTION(type_dispatcher& operator= (type_dispatcher const& that), { m_get_callback_impl = that.m_get_callback_impl; return *this; })
public:
/*!
diff --git a/3party/boost/boost/log/utility/type_info_wrapper.hpp b/3party/boost/boost/log/utility/type_info_wrapper.hpp
index a59ac2fea7..8ce4ea2414 100644
--- a/3party/boost/boost/log/utility/type_info_wrapper.hpp
+++ b/3party/boost/boost/log/utility/type_info_wrapper.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,17 +17,12 @@
#include <typeinfo>
#include <string>
+#include <boost/core/demangle.hpp>
+#include <boost/core/explicit_operator_bool.hpp>
#include <boost/log/detail/config.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
-
-#ifdef BOOST_LOG_HAS_CXXABI_H
-#include <cxxabi.h>
-#include <stdlib.h>
-#endif // BOOST_LOG_HAS_CXXABI_H
-
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -46,21 +41,8 @@ class type_info_wrapper
{
private:
#ifndef BOOST_LOG_DOXYGEN_PASS
-
//! An inaccessible type to indicate an uninitialized state of the wrapper
- struct BOOST_LOG_VISIBLE uninitialized {};
-
-#ifdef BOOST_LOG_HAS_CXXABI_H
- //! A simple scope guard for automatic memory free
- struct auto_free
- {
- explicit auto_free(void* p) : p_(p) {}
- ~auto_free() { free(p_); }
- private:
- void* p_;
- };
-#endif // BOOST_LOG_HAS_CXXABI_H
-
+ struct BOOST_SYMBOL_VISIBLE uninitialized {};
#endif // BOOST_LOG_DOXYGEN_PASS
private:
@@ -73,27 +55,27 @@ public:
*
* \post <tt>!*this == true</tt>
*/
- type_info_wrapper() : info(&typeid(uninitialized)) {}
+ type_info_wrapper() BOOST_NOEXCEPT : info(&typeid(uninitialized)) {}
/*!
* Copy constructor
*
* \post <tt>*this == that</tt>
* \param that Source type info wrapper to copy from
*/
- type_info_wrapper(type_info_wrapper const& that) : info(that.info) {}
+ type_info_wrapper(type_info_wrapper const& that) BOOST_NOEXCEPT : info(that.info) {}
/*!
* Conversion constructor
*
* \post <tt>*this == that && !!*this</tt>
* \param that Type info object to be wrapped
*/
- type_info_wrapper(std::type_info const& that) : info(&that) {}
+ type_info_wrapper(std::type_info const& that) BOOST_NOEXCEPT : info(&that) {}
/*!
* \return \c true if the type info wrapper was initialized with a particular type,
* \c false if the wrapper was default-constructed and not yet initialized
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* Stored type info getter
@@ -101,14 +83,14 @@ public:
* \pre <tt>!!*this</tt>
* \return Constant reference to the wrapped type info object
*/
- std::type_info const& get() const { return *info; }
+ std::type_info const& get() const BOOST_NOEXCEPT { return *info; }
/*!
* Swaps two instances of the wrapper
*/
- void swap(type_info_wrapper& that)
+ void swap(type_info_wrapper& that) BOOST_NOEXCEPT
{
- register std::type_info const* temp = info;
+ std::type_info const* temp = info;
info = that.info;
that.info = temp;
}
@@ -122,23 +104,7 @@ public:
std::string pretty_name() const
{
if (!this->operator!())
- {
-#ifdef BOOST_LOG_HAS_CXXABI_H
- // GCC returns decorated type name, will need to demangle it using ABI
- int status = 0;
- size_t size = 0;
- const char* name = info->name();
- char* undecorated = abi::__cxa_demangle(name, NULL, &size, &status);
- auto_free cleanup(undecorated);
-
- if (undecorated)
- return undecorated;
- else
- return name;
-#else
- return info->name();
-#endif
- }
+ return boost::core::demangle(info->name());
else
return "[uninitialized]";
}
@@ -147,7 +113,7 @@ public:
* \return \c false if the type info wrapper was initialized with a particular type,
* \c true if the wrapper was default-constructed and not yet initialized
*/
- bool operator! () const { return (info == &typeid(uninitialized) || *info == typeid(uninitialized)); }
+ bool operator! () const BOOST_NOEXCEPT { return (info == &typeid(uninitialized) || *info == typeid(uninitialized)); }
/*!
* Equality comparison
@@ -157,7 +123,7 @@ public:
* If both arguments are empty, the result is \c true. If both arguments are not empty, the result
* is \c true if this object wraps the same type as the comparand and \c false otherwise.
*/
- bool operator== (type_info_wrapper const& that) const
+ bool operator== (type_info_wrapper const& that) const BOOST_NOEXCEPT
{
return (info == that.info || *info == *that.info);
}
@@ -171,43 +137,43 @@ public:
* \note The results of this operator are only consistent within a single run of application.
* The result may change for the same types after rebuilding or even restarting the application.
*/
- bool operator< (type_info_wrapper const& that) const
+ bool operator< (type_info_wrapper const& that) const BOOST_NOEXCEPT
{
return static_cast< bool >(info->before(*that.info));
}
};
//! Inequality operator
-inline bool operator!= (type_info_wrapper const& left, type_info_wrapper const& right)
+inline bool operator!= (type_info_wrapper const& left, type_info_wrapper const& right) BOOST_NOEXCEPT
{
return !left.operator==(right);
}
//! Ordering operator
-inline bool operator<= (type_info_wrapper const& left, type_info_wrapper const& right)
+inline bool operator<= (type_info_wrapper const& left, type_info_wrapper const& right) BOOST_NOEXCEPT
{
return (left.operator==(right) || left.operator<(right));
}
//! Ordering operator
-inline bool operator> (type_info_wrapper const& left, type_info_wrapper const& right)
+inline bool operator> (type_info_wrapper const& left, type_info_wrapper const& right) BOOST_NOEXCEPT
{
return !(left.operator==(right) || left.operator<(right));
}
//! Ordering operator
-inline bool operator>= (type_info_wrapper const& left, type_info_wrapper const& right)
+inline bool operator>= (type_info_wrapper const& left, type_info_wrapper const& right) BOOST_NOEXCEPT
{
return !left.operator<(right);
}
//! Free swap for type info wrapper
-inline void swap(type_info_wrapper& left, type_info_wrapper& right)
+inline void swap(type_info_wrapper& left, type_info_wrapper& right) BOOST_NOEXCEPT
{
left.swap(right);
}
-//! A The function for support of exception serialization to string
+//! The function for exception serialization to string
inline std::string to_string(type_info_wrapper const& ti)
{
return ti.pretty_name();
diff --git a/3party/boost/boost/log/utility/unique_identifier_name.hpp b/3party/boost/boost/log/utility/unique_identifier_name.hpp
index c1fd70f794..ad25296e55 100644
--- a/3party/boost/boost/log/utility/unique_identifier_name.hpp
+++ b/3party/boost/boost/log/utility/unique_identifier_name.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -9,17 +9,16 @@
* \author Andrey Semashev
* \date 30.04.2008
*
- * The header contains BOOST_LOG_UNIQUE_IDENTIFIER_NAME macro definition.
+ * The header contains \c BOOST_LOG_UNIQUE_IDENTIFIER_NAME macro definition.
*/
#ifndef BOOST_LOG_UTILITY_UNIQUE_IDENTIFIER_NAME_HPP_INCLUDED_
#define BOOST_LOG_UTILITY_UNIQUE_IDENTIFIER_NAME_HPP_INCLUDED_
-#include <boost/detail/workaround.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -37,16 +36,16 @@
*
* Constructs a unique (in the current file scope) token that can be used as a variable name.
* The name will contain a prefix passed in the \a prefix argument. This allows to use the
- * macro multiple times in another macro.
+ * macro multiple times on a single line.
*/
// In VC 7.0 and later when compiling with /ZI option __LINE__ macro is corrupted
-#if BOOST_WORKAROUND(BOOST_MSVC, >=1300)
+#ifdef BOOST_MSVC
# define BOOST_LOG_UNIQUE_IDENTIFIER_NAME(prefix)\
BOOST_LOG_UNIQUE_IDENTIFIER_NAME_INTERNAL(prefix, __COUNTER__)
#else
# define BOOST_LOG_UNIQUE_IDENTIFIER_NAME(prefix)\
BOOST_LOG_UNIQUE_IDENTIFIER_NAME_INTERNAL(prefix, __LINE__)
-#endif // BOOST_WORKAROUND(BOOST_MSVC, >= 1300)
+#endif // BOOST_MSVC
#endif // BOOST_LOG_UTILITY_UNIQUE_IDENTIFIER_NAME_HPP_INCLUDED_
diff --git a/3party/boost/boost/log/utility/unused_variable.hpp b/3party/boost/boost/log/utility/unused_variable.hpp
index bc057ee4ef..816e102533 100644
--- a/3party/boost/boost/log/utility/unused_variable.hpp
+++ b/3party/boost/boost/log/utility/unused_variable.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,7 +17,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -35,7 +35,7 @@ BOOST_LOG_OPEN_NAMESPACE
namespace aux {
template< typename T >
-BOOST_LOG_FORCEINLINE void no_unused_warnings(T const&) {}
+BOOST_FORCEINLINE void no_unused_warnings(T const&) BOOST_NOEXCEPT {}
} // namespace aux
diff --git a/3party/boost/boost/log/utility/value_ref.hpp b/3party/boost/boost/log/utility/value_ref.hpp
index 55cb2b43c2..08fda4c553 100644
--- a/3party/boost/boost/log/utility/value_ref.hpp
+++ b/3party/boost/boost/log/utility/value_ref.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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 @@
#include <boost/log/detail/config.hpp>
#include <boost/log/detail/parameter_tools.hpp>
#include <boost/log/detail/value_ref_visitation.hpp>
-#include <boost/log/utility/explicit_operator_bool.hpp>
+#include <boost/utility/explicit_operator_bool.hpp>
#include <boost/log/utility/formatting_ostream_fwd.hpp>
#include <boost/log/utility/functional/logical.hpp>
#include <boost/log/utility/functional/bind.hpp>
@@ -47,7 +47,7 @@
#include <boost/log/utility/value_ref_fwd.hpp>
#include <boost/log/detail/header.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
@@ -428,12 +428,12 @@ public:
/*!
* Default constructor. Creates a reference wrapper that does not refer to a value.
*/
- BOOST_LOG_DEFAULTED_FUNCTION(value_ref(), BOOST_NOEXCEPT {})
+ BOOST_DEFAULTED_FUNCTION(value_ref(), BOOST_NOEXCEPT {})
/*!
* Copy constructor.
*/
- BOOST_LOG_DEFAULTED_FUNCTION(value_ref(value_ref const& that), BOOST_NOEXCEPT : base_type(static_cast< base_type const& >(that)) {})
+ BOOST_DEFAULTED_FUNCTION(value_ref(value_ref const& that), BOOST_NOEXCEPT : base_type(static_cast< base_type const& >(that)) {})
/*!
* Initializing constructor. Creates a reference wrapper that refers to the specified value.
@@ -447,7 +447,7 @@ public:
/*!
* The operator verifies if the wrapper refers to a value.
*/
- BOOST_LOG_EXPLICIT_OPERATOR_BOOL()
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
/*!
* The operator verifies if the wrapper does not refer to a value.
diff --git a/3party/boost/boost/log/utility/value_ref_fwd.hpp b/3party/boost/boost/log/utility/value_ref_fwd.hpp
index e7ffb3f704..aa4fa20225 100644
--- a/3party/boost/boost/log/utility/value_ref_fwd.hpp
+++ b/3party/boost/boost/log/utility/value_ref_fwd.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright Andrey Semashev 2007 - 2013.
+ * Copyright Andrey Semashev 2007 - 2014.
* 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)
@@ -17,7 +17,7 @@
#include <boost/log/detail/config.hpp>
-#ifdef BOOST_LOG_HAS_PRAGMA_ONCE
+#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
diff --git a/3party/boost/boost/logic/tribool.hpp b/3party/boost/boost/logic/tribool.hpp
index 90cba3ed98..167a72ade0 100644
--- a/3party/boost/boost/logic/tribool.hpp
+++ b/3party/boost/boost/logic/tribool.hpp
@@ -14,7 +14,7 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-#if BOOST_WORKAROUND(_MSC_VER, >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/logic/tribool_io.hpp b/3party/boost/boost/logic/tribool_io.hpp
index 9ee34d4b75..3ea52f303d 100644
--- a/3party/boost/boost/logic/tribool_io.hpp
+++ b/3party/boost/boost/logic/tribool_io.hpp
@@ -11,7 +11,7 @@
#include <boost/detail/workaround.hpp>
#include <boost/noncopyable.hpp>
-#if BOOST_WORKAROUND(_MSC_VER, >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -104,17 +104,11 @@ template<>
inline std::basic_string<char> get_default_indeterminate_name<char>()
{ return "indeterminate"; }
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-// VC++ 6.0 chokes on the specialization below, so we're stuck without
-// wchar_t support. What a pain. TODO: it might just need a the template
-// parameter as function parameter...
-#else
-# ifndef BOOST_NO_WCHAR_T
+#ifndef BOOST_NO_WCHAR_T
/// Returns the wide character string L"indeterminate".
template<>
inline std::basic_string<wchar_t> get_default_indeterminate_name<wchar_t>()
{ return L"indeterminate"; }
-# endif
#endif
// http://www.cantrip.org/locale.html
diff --git a/3party/boost/boost/make_unique.hpp b/3party/boost/boost/make_unique.hpp
new file mode 100644
index 0000000000..c163673c6d
--- /dev/null
+++ b/3party/boost/boost/make_unique.hpp
@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) 2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_MAKE_UNIQUE_HPP_INCLUDED
+#define BOOST_MAKE_UNIQUE_HPP_INCLUDED
+
+#include <boost/smart_ptr/make_unique.hpp>
+
+#endif
diff --git a/3party/boost/boost/math/bindings/detail/big_lanczos.hpp b/3party/boost/boost/math/bindings/detail/big_lanczos.hpp
index 797b8979a8..573f9ec1af 100644
--- a/3party/boost/boost/math/bindings/detail/big_lanczos.hpp
+++ b/3party/boost/boost/math/bindings/detail/big_lanczos.hpp
@@ -57,7 +57,7 @@ struct lanczos22UDT : public mpl::int_<120>
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 2.50662827463100050241576528481104525333))
};
static const T denom[22] = {
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 0.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 2432902008176640000.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 8752948036761600000.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 13803759753640704000.0)),
@@ -74,11 +74,11 @@ struct lanczos22UDT : public mpl::int_<120>
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 756111184500.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 40171771630.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 1672280820.0)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 53327946)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 1256850)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 20615)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 210)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 1))
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 53327946.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 1256850.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 20615.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 210.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 1.0))
};
return boost::math::tools::evaluate_rational(num, denom, z);
}
@@ -112,7 +112,7 @@ struct lanczos22UDT : public mpl::int_<120>
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 0.3765495513732730583386223384116545391759e-9))
};
static const T denom[22] = {
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 0.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 2432902008176640000.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 8752948036761600000.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 13803759753640704000.0)),
@@ -131,9 +131,9 @@ struct lanczos22UDT : public mpl::int_<120>
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 1672280820.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 53327946.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 1256850.0)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 20615)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 210)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 1))
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 20615.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 210.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 120, 1.0))
};
return boost::math::tools::evaluate_rational(num, denom, z);
}
diff --git a/3party/boost/boost/math/bindings/mpfr.hpp b/3party/boost/boost/math/bindings/mpfr.hpp
index 5eaebc9d2b..5edc0ae44c 100644
--- a/3party/boost/boost/math/bindings/mpfr.hpp
+++ b/3party/boost/boost/math/bindings/mpfr.hpp
@@ -36,6 +36,7 @@
#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/bindings/detail/big_digamma.hpp>
#include <boost/math/bindings/detail/big_lanczos.hpp>
+#include <boost/math/tools/big_constant.hpp>
inline mpfr_class fabs(const mpfr_class& v)
{
@@ -115,9 +116,9 @@ inline mpfr_class modf(const __gmp_expr<T,U>& v, long long* ipart, const Policy&
}
template <class Policy>
-inline int iround(mpfr_class const& x, const Policy& pol)
+inline int iround(mpfr_class const& x, const Policy&)
{
- return boost::math::tools::real_cast<int>(boost::math::round(x, pol));
+ return boost::math::tools::real_cast<int>(boost::math::round(x, typename boost::math::policies::normalise<Policy, boost::math::policies::rounding_error< boost::math::policies::throw_on_error> >::type()));
}
template <class T, class U, class Policy>
inline int iround(__gmp_expr<T,U> const& x, const Policy& pol)
@@ -126,9 +127,9 @@ inline int iround(__gmp_expr<T,U> const& x, const Policy& pol)
}
template <class Policy>
-inline long lround(mpfr_class const& x, const Policy& pol)
+inline long lround(mpfr_class const& x, const Policy&)
{
- return boost::math::tools::real_cast<long>(boost::math::round(x, pol));
+ return boost::math::tools::real_cast<long>(boost::math::round(x, typename boost::math::policies::normalise<Policy, boost::math::policies::rounding_error< boost::math::policies::throw_on_error> >::type()));
}
template <class T, class U, class Policy>
inline long lround(__gmp_expr<T,U> const& x, const Policy& pol)
@@ -137,9 +138,9 @@ inline long lround(__gmp_expr<T,U> const& x, const Policy& pol)
}
template <class Policy>
-inline long long llround(mpfr_class const& x, const Policy& pol)
+inline long long llround(mpfr_class const& x, const Policy&)
{
- return boost::math::tools::real_cast<long long>(boost::math::round(x, pol));
+ return boost::math::tools::real_cast<long long>(boost::math::round(x, typename boost::math::policies::normalise<Policy, boost::math::policies::rounding_error< boost::math::policies::throw_on_error> >::type()));
}
template <class T, class U, class Policy>
inline long long llround(__gmp_expr<T,U> const& x, const Policy& pol)
@@ -148,9 +149,9 @@ inline long long llround(__gmp_expr<T,U> const& x, const Policy& pol)
}
template <class Policy>
-inline int itrunc(mpfr_class const& x, const Policy& pol)
+inline int itrunc(mpfr_class const& x, const Policy&)
{
- return boost::math::tools::real_cast<int>(boost::math::trunc(x, pol));
+ return boost::math::tools::real_cast<int>(boost::math::trunc(x, typename boost::math::policies::normalise<Policy, boost::math::policies::rounding_error< boost::math::policies::throw_on_error> >::type()));
}
template <class T, class U, class Policy>
inline int itrunc(__gmp_expr<T,U> const& x, const Policy& pol)
@@ -159,9 +160,9 @@ inline int itrunc(__gmp_expr<T,U> const& x, const Policy& pol)
}
template <class Policy>
-inline long ltrunc(mpfr_class const& x, const Policy& pol)
+inline long ltrunc(mpfr_class const& x, const Policy&)
{
- return boost::math::tools::real_cast<long>(boost::math::trunc(x, pol));
+ return boost::math::tools::real_cast<long>(boost::math::trunc(x, typename boost::math::policies::normalise<Policy, boost::math::policies::rounding_error< boost::math::policies::throw_on_error> >::type()));
}
template <class T, class U, class Policy>
inline long ltrunc(__gmp_expr<T,U> const& x, const Policy& pol)
@@ -170,9 +171,9 @@ inline long ltrunc(__gmp_expr<T,U> const& x, const Policy& pol)
}
template <class Policy>
-inline long long lltrunc(mpfr_class const& x, const Policy& pol)
+inline long long lltrunc(mpfr_class const& x, const Policy&)
{
- return boost::math::tools::real_cast<long long>(boost::math::trunc(x, pol));
+ return boost::math::tools::real_cast<long long>(boost::math::trunc(x, typename boost::math::policies::normalise<Policy, boost::math::policies::rounding_error< boost::math::policies::throw_on_error> >::type()));
}
template <class T, class U, class Policy>
inline long long lltrunc(__gmp_expr<T,U> const& x, const Policy& pol)
@@ -180,7 +181,14 @@ inline long long lltrunc(__gmp_expr<T,U> const& x, const Policy& pol)
return lltrunc(static_cast<mpfr_class>(x), pol);
}
-namespace boost{ namespace math{
+namespace boost{
+
+#ifdef BOOST_MATH_USE_FLOAT128
+ template<> struct is_convertible<BOOST_MATH_FLOAT128_TYPE, mpfr_class> : public boost::integral_constant<bool, false>{};
+#endif
+ template<> struct is_convertible<long long, mpfr_class> : public boost::integral_constant<bool, false>{};
+
+namespace math{
#if defined(__GNUC__) && (__GNUC__ < 4)
using ::iround;
diff --git a/3party/boost/boost/math/common_factor_ct.hpp b/3party/boost/boost/math/common_factor_ct.hpp
index 848c925290..bf58b94eb2 100644
--- a/3party/boost/boost/math/common_factor_ct.hpp
+++ b/3party/boost/boost/math/common_factor_ct.hpp
@@ -23,7 +23,6 @@ namespace math
namespace detail
{
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// Build GCD with Euclid's recursive algorithm
template < static_gcd_type Value1, static_gcd_type Value2 >
struct static_gcd_helper_t
@@ -54,48 +53,7 @@ namespace detail
{
BOOST_STATIC_CONSTANT( static_gcd_type, value = Value1 );
};
-#else
- // Use inner class template workaround from Peter Dimov
- template < static_gcd_type Value1 >
- struct static_gcd_helper2_t
- {
- template < static_gcd_type Value2 >
- struct helper
- {
- BOOST_STATIC_CONSTANT( static_gcd_type, value
- = static_gcd_helper2_t<Value2>::BOOST_NESTED_TEMPLATE
- helper<Value1 % Value2>::value );
- };
-
- template < >
- struct helper< 0UL >
- {
- BOOST_STATIC_CONSTANT( static_gcd_type, value = Value1 );
- };
- };
-
- // Special case
- template < >
- struct static_gcd_helper2_t< 0UL >
- {
- template < static_gcd_type Value2 >
- struct helper
- {
- BOOST_STATIC_CONSTANT( static_gcd_type, value = Value2 );
- };
- };
-
- // Build the GCD from the above template(s)
- template < static_gcd_type Value1, static_gcd_type Value2 >
- struct static_gcd_helper_t
- {
- BOOST_STATIC_CONSTANT( static_gcd_type, value
- = static_gcd_helper2_t<Value1>::BOOST_NESTED_TEMPLATE
- helper<Value2>::value );
- };
-#endif
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// Build the LCM from the GCD
template < static_gcd_type Value1, static_gcd_type Value2 >
struct static_lcm_helper_t
@@ -112,47 +70,6 @@ namespace detail
{
BOOST_STATIC_CONSTANT( static_gcd_type, value = 0UL );
};
-#else
- // Adapt GCD's inner class template workaround for LCM
- template < static_gcd_type Value1 >
- struct static_lcm_helper2_t
- {
- template < static_gcd_type Value2 >
- struct helper
- {
- typedef static_gcd_helper_t<Value1, Value2> gcd_type;
-
- BOOST_STATIC_CONSTANT( static_gcd_type, value = Value1
- / gcd_type::value * Value2 );
- };
-
- template < >
- struct helper< 0UL >
- {
- BOOST_STATIC_CONSTANT( static_gcd_type, value = 0UL );
- };
- };
-
- // Special case
- template < >
- struct static_lcm_helper2_t< 0UL >
- {
- template < static_gcd_type Value2 >
- struct helper
- {
- BOOST_STATIC_CONSTANT( static_gcd_type, value = 0UL );
- };
- };
-
- // Build the LCM from the above template(s)
- template < static_gcd_type Value1, static_gcd_type Value2 >
- struct static_lcm_helper_t
- {
- BOOST_STATIC_CONSTANT( static_gcd_type, value
- = static_lcm_helper2_t<Value1>::BOOST_NESTED_TEMPLATE
- helper<Value2>::value );
- };
-#endif
} // namespace detail
diff --git a/3party/boost/boost/math/common_factor_rt.hpp b/3party/boost/boost/math/common_factor_rt.hpp
index 4582a96c7b..10a92ebf56 100644
--- a/3party/boost/boost/math/common_factor_rt.hpp
+++ b/3party/boost/boost/math/common_factor_rt.hpp
@@ -222,7 +222,6 @@ namespace detail
// Function objects to find the best way of computing GCD or LCM
#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template < typename T, bool IsSpecialized, bool IsSigned >
struct gcd_optimal_evaluator_helper_t
{
@@ -240,40 +239,6 @@ namespace detail
return gcd_integer( a, b );
}
};
-#else
- template < bool IsSpecialized, bool IsSigned >
- struct gcd_optimal_evaluator_helper2_t
- {
- template < typename T >
- struct helper
- {
- T operator ()( T const &a, T const &b )
- {
- return gcd_euclidean( a, b );
- }
- };
- };
-
- template < >
- struct gcd_optimal_evaluator_helper2_t< true, true >
- {
- template < typename T >
- struct helper
- {
- T operator ()( T const &a, T const &b )
- {
- return gcd_integer( a, b );
- }
- };
- };
-
- template < typename T, bool IsSpecialized, bool IsSigned >
- struct gcd_optimal_evaluator_helper_t
- : gcd_optimal_evaluator_helper2_t<IsSpecialized, IsSigned>
- ::BOOST_NESTED_TEMPLATE helper<T>
- {
- };
-#endif
template < typename T >
struct gcd_optimal_evaluator
@@ -348,7 +313,6 @@ namespace detail
#undef BOOST_PRIVATE_GCD_SF
#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template < typename T, bool IsSpecialized, bool IsSigned >
struct lcm_optimal_evaluator_helper_t
{
@@ -366,40 +330,6 @@ namespace detail
return lcm_integer( a, b );
}
};
-#else
- template < bool IsSpecialized, bool IsSigned >
- struct lcm_optimal_evaluator_helper2_t
- {
- template < typename T >
- struct helper
- {
- T operator ()( T const &a, T const &b )
- {
- return lcm_euclidean( a, b );
- }
- };
- };
-
- template < >
- struct lcm_optimal_evaluator_helper2_t< true, true >
- {
- template < typename T >
- struct helper
- {
- T operator ()( T const &a, T const &b )
- {
- return lcm_integer( a, b );
- }
- };
- };
-
- template < typename T, bool IsSpecialized, bool IsSigned >
- struct lcm_optimal_evaluator_helper_t
- : lcm_optimal_evaluator_helper2_t<IsSpecialized, IsSigned>
- ::BOOST_NESTED_TEMPLATE helper<T>
- {
- };
-#endif
template < typename T >
struct lcm_optimal_evaluator
diff --git a/3party/boost/boost/math/concepts/real_concept.hpp b/3party/boost/boost/math/concepts/real_concept.hpp
index 08a30076bb..2267271a00 100644
--- a/3party/boost/boost/math/concepts/real_concept.hpp
+++ b/3party/boost/boost/math/concepts/real_concept.hpp
@@ -85,7 +85,7 @@ public:
real_concept(double c) : m_value(c){}
real_concept(long double c) : m_value(c){}
#ifdef BOOST_MATH_USE_FLOAT128
- real_concept(__float128 c) : m_value(c){}
+ real_concept(BOOST_MATH_FLOAT128_TYPE c) : m_value(c){}
#endif
// Assignment:
@@ -307,7 +307,7 @@ inline std::basic_istream<charT, traits>& operator>>(std::basic_istream<charT, t
is >> v;
a = v;
return is;
-#elif defined(__SGI_STL_PORT) || defined(_RWSTD_VER) || defined(__LIBCOMO__)
+#elif defined(__SGI_STL_PORT) || defined(_RWSTD_VER) || defined(__LIBCOMO__) || defined(_LIBCPP_VERSION)
std::string s;
real_concept_base_type d;
is >> s;
@@ -328,7 +328,7 @@ namespace tools
{
template <>
-inline concepts::real_concept make_big_value<concepts::real_concept>(long double val, const char* , mpl::false_ const&, mpl::false_ const&)
+inline concepts::real_concept make_big_value<concepts::real_concept>(boost::floatmax_t val, const char* , mpl::false_ const&, mpl::false_ const&)
{
return val; // Can't use lexical_cast here, sometimes it fails....
}
diff --git a/3party/boost/boost/math/concepts/std_real_concept.hpp b/3party/boost/boost/math/concepts/std_real_concept.hpp
index 3c926f413c..b4f75bcadb 100644
--- a/3party/boost/boost/math/concepts/std_real_concept.hpp
+++ b/3party/boost/boost/math/concepts/std_real_concept.hpp
@@ -68,7 +68,7 @@ public:
std_real_concept(double c) : m_value(c){}
std_real_concept(long double c) : m_value(c){}
#ifdef BOOST_MATH_USE_FLOAT128
- std_real_concept(__float128 c) : m_value(c){}
+ std_real_concept(BOOST_MATH_FLOAT128_TYPE c) : m_value(c){}
#endif
// Assignment:
@@ -316,10 +316,19 @@ inline std::basic_ostream<charT, traits>& operator<<(std::basic_ostream<charT, t
template <class charT, class traits>
inline std::basic_istream<charT, traits>& operator>>(std::basic_istream<charT, traits>& is, std_real_concept& a)
{
+#if defined(__SGI_STL_PORT) || defined(_RWSTD_VER) || defined(__LIBCOMO__) || defined(_LIBCPP_VERSION)
+ std::string s;
+ std_real_concept_base_type d;
+ is >> s;
+ std::sscanf(s.c_str(), "%Lf", &d);
+ a = d;
+ return is;
+#else
std_real_concept_base_type v;
is >> v;
a = v;
return is;
+#endif
}
} // namespace concepts
@@ -333,7 +342,7 @@ namespace tools
{
template <>
-inline concepts::std_real_concept make_big_value<concepts::std_real_concept>(long double val, const char* , mpl::false_ const&, mpl::false_ const&)
+inline concepts::std_real_concept make_big_value<concepts::std_real_concept>(boost::floatmax_t val, const char*, mpl::false_ const&, mpl::false_ const&)
{
return val; // Can't use lexical_cast here, sometimes it fails....
}
diff --git a/3party/boost/boost/math/constants/calculate_constants.hpp b/3party/boost/boost/math/constants/calculate_constants.hpp
index 297e0b9dc3..2dcdb9a02b 100644
--- a/3party/boost/boost/math/constants/calculate_constants.hpp
+++ b/3party/boost/boost/math/constants/calculate_constants.hpp
@@ -310,13 +310,13 @@ inline T constant_four_minus_pi<T>::compute(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SP
return static_cast<T>(4) - pi<T, policies::policy<policies::digits2<N> > >();
}
-template <class T>
-template<int N>
-inline T constant_pow23_four_minus_pi<T>::compute(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(mpl::int_<N>))
-{
- BOOST_MATH_STD_USING
- return pow(four_minus_pi<T, policies::policy<policies::digits2<N> > >(), static_cast<T>(1.5));
-}
+//template <class T>
+//template<int N>
+//inline T constant_pow23_four_minus_pi<T>::compute(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(mpl::int_<N>))
+//{
+// BOOST_MATH_STD_USING
+// return pow(four_minus_pi<T, policies::policy<policies::digits2<N> > >(), static_cast<T>(1.5));
+//}
template <class T>
template<int N>
diff --git a/3party/boost/boost/math/constants/constants.hpp b/3party/boost/boost/math/constants/constants.hpp
index 6ba59eed48..e9381adeb6 100644
--- a/3party/boost/boost/math/constants/constants.hpp
+++ b/3party/boost/boost/math/constants/constants.hpp
@@ -24,6 +24,7 @@
#include <boost/mpl/and.hpp>
#include <boost/mpl/int.hpp>
#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/declval.hpp>
namespace boost{ namespace math
@@ -56,6 +57,29 @@ namespace boost{ namespace math
};
//
+ // Traits class determines how to convert from string based on whether T has a constructor
+ // from const char* or not:
+ //
+ template <int N>
+ struct dummy_size{};
+
+ template <class T>
+ struct is_explicitly_convertible_from_string
+ {
+#ifndef BOOST_NO_SFINAE_EXPR
+ template<typename S1, typename T1>
+ static type_traits::yes_type selector(dummy_size<sizeof(static_cast<T1>(declval<S1>()))>*);
+
+ template<typename S1, typename T1>
+ static type_traits::no_type selector(...);
+
+ static const bool value = sizeof(selector<const char*, T>(0)) == sizeof(type_traits::yes_type);
+#else
+ static const bool value = false;
+#endif
+ };
+
+ //
// Max number of binary digits in the string representations
// of our constants:
//
@@ -84,7 +108,7 @@ namespace boost{ namespace math
mpl::int_<construct_from_long_double>,
#ifdef BOOST_MATH_USE_FLOAT128
typename mpl::if_<
- mpl::and_<boost::is_convertible<__float128, Real>, mpl::bool_< t1::value <= t5::value>, mpl::bool_<0 != t1::value> >,
+ mpl::and_<boost::is_convertible<BOOST_MATH_FLOAT128_TYPE, Real>, mpl::bool_< t1::value <= t5::value>, mpl::bool_<0 != t1::value> >,
mpl::int_<construct_from_float128>,
typename mpl::if_<
mpl::and_<mpl::bool_< t1::value <= max_string_digits>, mpl::bool_<0 != t1::value> >,
@@ -139,7 +163,7 @@ namespace boost{ namespace math
return p;
}
- template <class T, const T& (*F)(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(T))>
+ template <class T, const T& (*F)()>
struct constant_initializer
{
static void force_instantiate()
@@ -151,18 +175,14 @@ namespace boost{ namespace math
{
initializer()
{
- F(
- #ifdef BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
- 0
- #endif
- );
+ F();
}
void force_instantiate()const{}
};
static const initializer init;
};
- template <class T, const T& (*F)(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(T))>
+ template <class T, const T& (*F)()>
typename constant_initializer<T, F>::initializer const constant_initializer<T, F>::init;
template <class T, int N, const T& (*F)(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(mpl::int_<N>) BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(T))>
@@ -177,11 +197,7 @@ namespace boost{ namespace math
{
initializer()
{
- F(
- #ifdef BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
- mpl::int_<N>() , 0
- #endif
- );
+ F();
}
void force_instantiate()const{}
};
@@ -201,14 +217,15 @@ namespace boost{ namespace math
# define BOOST_MATH_FLOAT128_CONSTANT_OVERLOAD(x)
#endif
- #define BOOST_DEFINE_MATH_CONSTANT(name, x, y)\
+#define BOOST_DEFINE_MATH_CONSTANT(name, x, y)\
namespace detail{\
template <class T> struct BOOST_JOIN(constant_, name){\
private:\
/* The default implementations come next: */ \
static inline const T& get_from_string()\
{\
- static const T result = convert_from_string<T>(y, boost::is_convertible<const char*, T>());\
+ typedef mpl::bool_<boost::is_convertible<const char*, T>::value || boost::math::constants::is_explicitly_convertible_from_string<T>::value> tag_type;\
+ static const T result(convert_from_string<T>(y, tag_type()));\
return result;\
}\
/* This one is for very high precision that is none the less known at compile time: */ \
@@ -287,7 +304,7 @@ namespace boost{ namespace math
BOOST_DEFINE_MATH_CONSTANT(root_one_div_pi, 5.641895835477562869480794515607725858e-01, "5.64189583547756286948079451560772585844050629328998856844085721710642468441493414486743660202107363443028347906e-01")
BOOST_DEFINE_MATH_CONSTANT(pi_minus_three, 1.415926535897932384626433832795028841e-01, "1.41592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513e-01")
BOOST_DEFINE_MATH_CONSTANT(four_minus_pi, 8.584073464102067615373566167204971158e-01, "8.58407346410206761537356616720497115802830600624894179025055407692183593713791001371965174657882932017851913487e-01")
- BOOST_DEFINE_MATH_CONSTANT(pow23_four_minus_pi, 7.953167673715975443483953350568065807e-01, "7.95316767371597544348395335056806580727639173327713205445302234388856268267518187590758006888600828436839800178e-01")
+ //BOOST_DEFINE_MATH_CONSTANT(pow23_four_minus_pi, 7.953167673715975443483953350568065807e-01, "7.95316767371597544348395335056806580727639173327713205445302234388856268267518187590758006888600828436839800178e-01")
BOOST_DEFINE_MATH_CONSTANT(pi_pow_e, 2.245915771836104547342715220454373502e+01, "2.24591577183610454734271522045437350275893151339966922492030025540669260403991179123185197527271430315314500731e+01")
BOOST_DEFINE_MATH_CONSTANT(pi_sqr, 9.869604401089358618834490999876151135e+00, "9.86960440108935861883449099987615113531369940724079062641334937622004482241920524300177340371855223182402591377e+00")
BOOST_DEFINE_MATH_CONSTANT(pi_sqr_div_six, 1.644934066848226436472415166646025189e+00, "1.64493406684822643647241516664602518921894990120679843773555822937000747040320087383362890061975870530400431896e+00")
@@ -322,7 +339,7 @@ namespace boost{ namespace math
BOOST_DEFINE_MATH_CONSTANT(rayleigh_skewness, 6.311106578189371381918993515442277798e-01, "6.31110657818937138191899351544227779844042203134719497658094585692926819617473725459905027032537306794400047264e-01")
BOOST_DEFINE_MATH_CONSTANT(rayleigh_kurtosis, 3.245089300687638062848660410619754415e+00, "3.24508930068763806284866041061975441541706673178920936177133764493367904540874159051490619368679348977426462633e+00")
BOOST_DEFINE_MATH_CONSTANT(rayleigh_kurtosis_excess, 2.450893006876380628486604106197544154e-01, "2.45089300687638062848660410619754415417066731789209361771337644933679045408741590514906193686793489774264626328e-01")
-
+
BOOST_DEFINE_MATH_CONSTANT(two_div_pi, 6.366197723675813430755350534900574481e-01, "6.36619772367581343075535053490057448137838582961825794990669376235587190536906140360455211065012343824291370907e-01")
BOOST_DEFINE_MATH_CONSTANT(root_two_div_pi, 7.978845608028653558798921198687637369e-01, "7.97884560802865355879892119868763736951717262329869315331851659341315851798603677002504667814613872860605117725e-01")
diff --git a/3party/boost/boost/math/constants/generate.hpp b/3party/boost/boost/math/constants/generate.hpp
deleted file mode 100644
index 2c29be71dd..0000000000
--- a/3party/boost/boost/math/constants/generate.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright John Maddock 2010.
-// 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_CONSTANTS_GENERATE_INCLUDED
-#define BOOST_MATH_CONSTANTS_GENERATE_INCLUDED
-
-#include <boost/math/constants/constants.hpp>
-#include <boost/regex.hpp>
-#include <iostream>
-#include <iomanip>
-#include <sstream>
-
-#ifdef USE_MPFR
-#include <boost/math/bindings/mpfr.hpp>
-#elif defined(USE_MPREAL)
-#include <boost/math/bindings/mpreal.hpp>
-#elif defined(USE_CPP_FLOAT)
-#include <boost/multiprecision/cpp_dec_float.hpp>
-#else
-#include <boost/math/bindings/rr.hpp>
-#endif
-
-namespace boost{ namespace math{ namespace constants{
-
-#ifdef USE_MPFR
-typedef mpfr_class generator_type;
-#elif defined(USE_MPREAL)
-typedef mpfr::mpreal generator_type;
-#elif defined(USE_CPP_FLOAT)
-typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<500> > generator_type;
-#else
-typedef ntl::RR generator_type;
-#endif
-
-inline void print_constant(const char* name, generator_type(*f)(const mpl::int_<0>&))
-{
-#ifdef USE_MPFR
- mpfr_class::set_dprec(((200 + 1) * 1000L) / 301L);
-#elif defined(USE_MPREAL)
- mpfr::mpreal::set_default_prec(((200 + 1) * 1000L) / 301L);
-#elif defined(USE_CPP_FLOAT)
- // Nothing to do, precision is already set.
-#else
- ntl::RR::SetPrecision(((200 + 1) * 1000L) / 301L);
- ntl::RR::SetOutputPrecision(102);
-#endif
- generator_type value = f(boost::mpl::int_<0>());
- std::stringstream os;
- os << std::setprecision(110) << std::scientific;
- os << value;
- std::string s = os.str();
- static const regex e("([+-]?\\d+(?:\\.\\d{0,36})?)(\\d*)(?:e([+-]?\\d+))?");
- smatch what;
- if(regex_match(s, what, e))
- {
- std::cout <<
- "BOOST_DEFINE_MATH_CONSTANT(" << name << ", "
- << what[1] << "e" << (what[3].length() ? what[3].str() : std::string("0")) << ", "
- << "\"" << what[1] << what[2] << "e" << (what[3].length() ? what[3].str() : std::string("0"))
- << "\");" << std::endl;
- }
- else
- {
- std::cout << "Format of numeric constant was not recognised!!" << std::endl;
- }
-}
-
-#define BOOST_CONSTANTS_GENERATE(name) \
- boost::math::constants::print_constant(#name, \
- & boost::math::constants::detail::BOOST_JOIN(constant_, name)<boost::math::constants::generator_type>::get)
-
-}}} // namespaces
-
-#endif // BOOST_MATH_CONSTANTS_GENERATE_INCLUDED
diff --git a/3party/boost/boost/math/cstdfloat/cstdfloat_cmath.hpp b/3party/boost/boost/math/cstdfloat/cstdfloat_cmath.hpp
new file mode 100644
index 0000000000..3043d90567
--- /dev/null
+++ b/3party/boost/boost/math/cstdfloat/cstdfloat_cmath.hpp
@@ -0,0 +1,600 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2014.
+// Copyright John Maddock 2014.
+// Copyright Paul Bristow 2014.
+// 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)
+//
+
+// Implement quadruple-precision <cmath> support.
+
+#ifndef _BOOST_CSTDFLOAT_CMATH_2014_02_15_HPP_
+ #define _BOOST_CSTDFLOAT_CMATH_2014_02_15_HPP_
+
+ #include <boost/math/cstdfloat/cstdfloat_types.hpp>
+ #include <boost/math/cstdfloat/cstdfloat_limits.hpp>
+
+ #if defined(BOOST_CSTDFLOAT_HAS_INTERNAL_FLOAT128_T) && defined(BOOST_MATH_USE_FLOAT128) && !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT)
+
+ #include <cmath>
+ #include <stdexcept>
+ #include <boost/cstdint.hpp>
+ #include <boost/static_assert.hpp>
+ #include <boost/throw_exception.hpp>
+
+ #if defined(_WIN32) && defined(__GNUC__)
+ // Several versions of Mingw and probably cygwin too have broken
+ // libquadmath implementations that segfault as soon as you call
+ // expq or any function that depends on it.
+ #define BOOST_CSTDFLOAT_BROKEN_FLOAT128_MATH_FUNCTIONS
+ #endif
+
+ // Here is a helper function used for raising the value of a given
+ // floating-point type to the power of n, where n has integral type.
+ namespace boost { namespace math { namespace cstdfloat { namespace detail {
+
+ template<class float_type, class integer_type>
+ inline float_type pown(const float_type& x, const integer_type p)
+ {
+ const bool isneg = (x < 0);
+ const bool isnan = (x != x);
+ const bool isinf = ((!isneg) ? bool(+x > (std::numeric_limits<float_type>::max)())
+ : bool(-x > (std::numeric_limits<float_type>::max)()));
+
+ if(isnan) { return x; }
+
+ if(isinf) { return std::numeric_limits<float_type>::quiet_NaN(); }
+
+ const bool x_is_neg = (x < 0);
+ const float_type abs_x = (x_is_neg ? -x : x);
+
+ if(p < static_cast<integer_type>(0))
+ {
+ if(abs_x < (std::numeric_limits<float_type>::min)())
+ {
+ return (x_is_neg ? -std::numeric_limits<float_type>::infinity()
+ : +std::numeric_limits<float_type>::infinity());
+ }
+ else
+ {
+ return float_type(1) / pown(x, static_cast<integer_type>(-p));
+ }
+ }
+
+ if(p == static_cast<integer_type>(0))
+ {
+ return float_type(1);
+ }
+ else
+ {
+ if(p == static_cast<integer_type>(1)) { return x; }
+
+ if(abs_x > (std::numeric_limits<float_type>::max)())
+ {
+ return (x_is_neg ? -std::numeric_limits<float_type>::infinity()
+ : +std::numeric_limits<float_type>::infinity());
+ }
+
+ if (p == static_cast<integer_type>(2)) { return (x * x); }
+ else if(p == static_cast<integer_type>(3)) { return ((x * x) * x); }
+ else if(p == static_cast<integer_type>(4)) { const float_type x2 = (x * x); return (x2 * x2); }
+ else
+ {
+ // The variable xn stores the binary powers of x.
+ float_type result(((p % integer_type(2)) != integer_type(0)) ? x : float_type(1));
+ float_type xn (x);
+
+ integer_type p2 = p;
+
+ while(integer_type(p2 /= 2) != integer_type(0))
+ {
+ // Square xn for each binary power.
+ xn *= xn;
+
+ const bool has_binary_power = (integer_type(p2 % integer_type(2)) != integer_type(0));
+
+ if(has_binary_power)
+ {
+ // Multiply the result with each binary power contained in the exponent.
+ result *= xn;
+ }
+ }
+
+ return result;
+ }
+ }
+ }
+
+ } } } } // boost::math::cstdfloat::detail
+
+ // We will now define preprocessor symbols representing quadruple-precision <cmath> functions.
+ #if defined(BOOST_INTEL)
+ #define BOOST_CSTDFLOAT_FLOAT128_LDEXP __ldexpq
+ #define BOOST_CSTDFLOAT_FLOAT128_FREXP __frexpq
+ #define BOOST_CSTDFLOAT_FLOAT128_FABS __fabsq
+ #define BOOST_CSTDFLOAT_FLOAT128_FLOOR __floorq
+ #define BOOST_CSTDFLOAT_FLOAT128_CEIL __ceilq
+ #if !defined(BOOST_CSTDFLOAT_FLOAT128_SQRT)
+ #define BOOST_CSTDFLOAT_FLOAT128_SQRT __sqrtq
+ #endif
+ #define BOOST_CSTDFLOAT_FLOAT128_TRUNC __truncq
+ #define BOOST_CSTDFLOAT_FLOAT128_EXP __expq
+ #define BOOST_CSTDFLOAT_FLOAT128_EXPM1 __expm1q
+ #define BOOST_CSTDFLOAT_FLOAT128_POW __powq
+ #define BOOST_CSTDFLOAT_FLOAT128_LOG __logq
+ #define BOOST_CSTDFLOAT_FLOAT128_LOG10 __log10q
+ #define BOOST_CSTDFLOAT_FLOAT128_SIN __sinq
+ #define BOOST_CSTDFLOAT_FLOAT128_COS __cosq
+ #define BOOST_CSTDFLOAT_FLOAT128_TAN __tanq
+ #define BOOST_CSTDFLOAT_FLOAT128_ASIN __asinq
+ #define BOOST_CSTDFLOAT_FLOAT128_ACOS __acosq
+ #define BOOST_CSTDFLOAT_FLOAT128_ATAN __atanq
+ #define BOOST_CSTDFLOAT_FLOAT128_SINH __sinhq
+ #define BOOST_CSTDFLOAT_FLOAT128_COSH __coshq
+ #define BOOST_CSTDFLOAT_FLOAT128_TANH __tanhq
+ #define BOOST_CSTDFLOAT_FLOAT128_ASINH __asinhq
+ #define BOOST_CSTDFLOAT_FLOAT128_ACOSH __acoshq
+ #define BOOST_CSTDFLOAT_FLOAT128_ATANH __atanhq
+ #define BOOST_CSTDFLOAT_FLOAT128_FMOD __fmodq
+ #define BOOST_CSTDFLOAT_FLOAT128_ATAN2 __atan2q
+ #define BOOST_CSTDFLOAT_FLOAT128_LGAMMA __lgammaq
+ #define BOOST_CSTDFLOAT_FLOAT128_TGAMMA __tgammaq
+ #elif defined(__GNUC__)
+ #define BOOST_CSTDFLOAT_FLOAT128_LDEXP ldexpq
+ #define BOOST_CSTDFLOAT_FLOAT128_FREXP frexpq
+ #define BOOST_CSTDFLOAT_FLOAT128_FABS fabsq
+ #define BOOST_CSTDFLOAT_FLOAT128_FLOOR floorq
+ #define BOOST_CSTDFLOAT_FLOAT128_CEIL ceilq
+ #if !defined(BOOST_CSTDFLOAT_FLOAT128_SQRT)
+ #define BOOST_CSTDFLOAT_FLOAT128_SQRT sqrtq
+ #endif
+ #define BOOST_CSTDFLOAT_FLOAT128_TRUNC truncq
+ #define BOOST_CSTDFLOAT_FLOAT128_POW powq
+ #define BOOST_CSTDFLOAT_FLOAT128_LOG logq
+ #define BOOST_CSTDFLOAT_FLOAT128_LOG10 log10q
+ #define BOOST_CSTDFLOAT_FLOAT128_SIN sinq
+ #define BOOST_CSTDFLOAT_FLOAT128_COS cosq
+ #define BOOST_CSTDFLOAT_FLOAT128_TAN tanq
+ #define BOOST_CSTDFLOAT_FLOAT128_ASIN asinq
+ #define BOOST_CSTDFLOAT_FLOAT128_ACOS acosq
+ #define BOOST_CSTDFLOAT_FLOAT128_ATAN atanq
+ #define BOOST_CSTDFLOAT_FLOAT128_FMOD fmodq
+ #define BOOST_CSTDFLOAT_FLOAT128_ATAN2 atan2q
+ #define BOOST_CSTDFLOAT_FLOAT128_LGAMMA lgammaq
+ #if !defined(BOOST_CSTDFLOAT_BROKEN_FLOAT128_MATH_FUNCTIONS)
+ #define BOOST_CSTDFLOAT_FLOAT128_EXP expq
+ #define BOOST_CSTDFLOAT_FLOAT128_EXPM1 expm1q_internal
+ #define BOOST_CSTDFLOAT_FLOAT128_SINH sinhq
+ #define BOOST_CSTDFLOAT_FLOAT128_COSH coshq
+ #define BOOST_CSTDFLOAT_FLOAT128_TANH tanhq
+ #define BOOST_CSTDFLOAT_FLOAT128_ASINH asinhq
+ #define BOOST_CSTDFLOAT_FLOAT128_ACOSH acoshq
+ #define BOOST_CSTDFLOAT_FLOAT128_ATANH atanhq
+ #define BOOST_CSTDFLOAT_FLOAT128_TGAMMA tgammaq
+ #else // BOOST_CSTDFLOAT_BROKEN_FLOAT128_MATH_FUNCTIONS
+ #define BOOST_CSTDFLOAT_FLOAT128_EXP expq_patch
+ #define BOOST_CSTDFLOAT_FLOAT128_SINH sinhq_patch
+ #define BOOST_CSTDFLOAT_FLOAT128_COSH coshq_patch
+ #define BOOST_CSTDFLOAT_FLOAT128_TANH tanhq_patch
+ #define BOOST_CSTDFLOAT_FLOAT128_ASINH asinhq_patch
+ #define BOOST_CSTDFLOAT_FLOAT128_ACOSH acoshq_patch
+ #define BOOST_CSTDFLOAT_FLOAT128_ATANH atanhq_patch
+ #define BOOST_CSTDFLOAT_FLOAT128_TGAMMA tgammaq_patch
+ #endif // BOOST_CSTDFLOAT_BROKEN_FLOAT128_MATH_FUNCTIONS
+ #endif
+
+ // Implement quadruple-precision <cmath> functions in the namespace
+ // boost::math::cstdfloat::detail. Subsequently inject these into the
+ // std namespace via *using* directive.
+
+ // Begin with some forward function declarations. Also implement patches
+ // for compilers that have broken float128 exponential functions.
+
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_LDEXP (boost::math::cstdfloat::detail::float_internal128_t, int) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_FREXP (boost::math::cstdfloat::detail::float_internal128_t, int*) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_FABS (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_FLOOR (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_CEIL (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_SQRT (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_TRUNC (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_POW (boost::math::cstdfloat::detail::float_internal128_t, boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_LOG (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_LOG10 (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_SIN (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_COS (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_TAN (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ASIN (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ACOS (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ATAN (boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_FMOD (boost::math::cstdfloat::detail::float_internal128_t, boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ATAN2 (boost::math::cstdfloat::detail::float_internal128_t, boost::math::cstdfloat::detail::float_internal128_t) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_LGAMMA(boost::math::cstdfloat::detail::float_internal128_t) throw();
+
+ #if !defined(BOOST_CSTDFLOAT_BROKEN_FLOAT128_MATH_FUNCTIONS)
+
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_EXP (boost::math::cstdfloat::detail::float_internal128_t x) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_SINH (boost::math::cstdfloat::detail::float_internal128_t x) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_COSH (boost::math::cstdfloat::detail::float_internal128_t x) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_TANH (boost::math::cstdfloat::detail::float_internal128_t x) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ASINH (boost::math::cstdfloat::detail::float_internal128_t x) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ACOSH (boost::math::cstdfloat::detail::float_internal128_t x) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ATANH (boost::math::cstdfloat::detail::float_internal128_t x) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_TGAMMA(boost::math::cstdfloat::detail::float_internal128_t x) throw();
+
+ #else // BOOST_CSTDFLOAT_BROKEN_FLOAT128_MATH_FUNCTIONS
+
+ // Forward declaration of the patched exponent function, exp(x).
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_EXP (boost::math::cstdfloat::detail::float_internal128_t x);
+
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_EXPM1 (boost::math::cstdfloat::detail::float_internal128_t x)
+ {
+ // Compute exp(x) - 1 for x small.
+
+ // Use an order-36 polynomial approximation of the exponential function
+ // in the range of (-ln2 < x < ln2). Scale the argument to this range
+ // and subsequently multiply the result by 2^n accordingly.
+
+ // Derive the polynomial coefficients with Mathematica(R) by generating
+ // a table of high-precision values of exp(x) in the range (-ln2 < x < ln2)
+ // and subsequently applying the built-in *Fit* function.
+
+ // Table[{x, Exp[x] - 1}, {x, -Log[2], Log[2], 1/180}]
+ // N[%, 120]
+ // Fit[%, {x, x^2, x^3, x^4, x^5, x^6, x^7, x^8, x^9, x^10, x^11, x^12,
+ // x^13, x^14, x^15, x^16, x^17, x^18, x^19, x^20, x^21, x^22,
+ // x^23, x^24, x^25, x^26, x^27, x^28, x^29, x^30, x^31, x^32,
+ // x^33, x^34, x^35, x^36}, x]
+
+ typedef boost::math::cstdfloat::detail::float_internal128_t float_type;
+
+ float_type sum;
+
+ if(x > BOOST_FLOAT128_C(0.693147180559945309417232121458176568075500134360255))
+ {
+ sum = ::BOOST_CSTDFLOAT_FLOAT128_EXP(x) - float_type(1);
+ }
+ else
+ {
+ // Compute the polynomial approximation of exp(alpha).
+ sum = (((((((((((((((((((((((((((((((((((( float_type(BOOST_FLOAT128_C(2.69291698127774166063293705964720493864630783729857438187365E-42)) * x
+ + float_type(BOOST_FLOAT128_C(9.70937085471487654794114679403710456028986572118859594614033E-41))) * x
+ + float_type(BOOST_FLOAT128_C(3.38715585158055097155585505318085512156885389014410753080500E-39))) * x
+ + float_type(BOOST_FLOAT128_C(1.15162718532861050809222658798662695267019717760563645440433E-37))) * x
+ + float_type(BOOST_FLOAT128_C(3.80039074689434663295873584133017767349635602413675471702393E-36))) * x
+ + float_type(BOOST_FLOAT128_C(1.21612504934087520075905434734158045947460467096773246215239E-34))) * x
+ + float_type(BOOST_FLOAT128_C(3.76998762883139753126119821241037824830069851253295480396224E-33))) * x
+ + float_type(BOOST_FLOAT128_C(1.13099628863830344684998293828608215735777107850991029729440E-31))) * x
+ + float_type(BOOST_FLOAT128_C(3.27988923706982293204067897468714277771890104022419696770352E-30))) * x
+ + float_type(BOOST_FLOAT128_C(9.18368986379558482800593745627556950089950023355628325088207E-29))) * x
+ + float_type(BOOST_FLOAT128_C(2.47959626322479746949155352659617642905315302382639380521497E-27))) * x
+ + float_type(BOOST_FLOAT128_C(6.44695028438447337900255966737803112935639344283098705091949E-26))) * x
+ + float_type(BOOST_FLOAT128_C(1.61173757109611834904452725462599961406036904573072897122957E-24))) * x
+ + float_type(BOOST_FLOAT128_C(3.86817017063068403772269360016918092488847584660382953555804E-23))) * x
+ + float_type(BOOST_FLOAT128_C(8.89679139245057328674891109315654704307721758924206107351744E-22))) * x
+ + float_type(BOOST_FLOAT128_C(1.95729410633912612308475595397946731738088422488032228717097E-20))) * x
+ + float_type(BOOST_FLOAT128_C(4.11031762331216485847799061511674191805055663711439605760231E-19))) * x
+ + float_type(BOOST_FLOAT128_C(8.22063524662432971695598123977873600603370758794431071426640E-18))) * x
+ + float_type(BOOST_FLOAT128_C(1.56192069685862264622163643500633782667263448653185159383285E-16))) * x
+ + float_type(BOOST_FLOAT128_C(2.81145725434552076319894558300988749849555291507956994126835E-15))) * x
+ + float_type(BOOST_FLOAT128_C(4.77947733238738529743820749111754320727153728139716409114011E-14))) * x
+ + float_type(BOOST_FLOAT128_C(7.64716373181981647590113198578807092707697416852226691068627E-13))) * x
+ + float_type(BOOST_FLOAT128_C(1.14707455977297247138516979786821056670509688396295740818677E-11))) * x
+ + float_type(BOOST_FLOAT128_C(1.60590438368216145993923771701549479323291461578567184216302E-10))) * x
+ + float_type(BOOST_FLOAT128_C(2.08767569878680989792100903212014323125428376052986408239620E-09))) * x
+ + float_type(BOOST_FLOAT128_C(2.50521083854417187750521083854417187750523408006206780016659E-08))) * x
+ + float_type(BOOST_FLOAT128_C(2.75573192239858906525573192239858906525573195144226062684604E-07))) * x
+ + float_type(BOOST_FLOAT128_C(2.75573192239858906525573192239858906525573191310049321957902E-06))) * x
+ + float_type(BOOST_FLOAT128_C(0.00002480158730158730158730158730158730158730158730149317774))) * x
+ + float_type(BOOST_FLOAT128_C(0.00019841269841269841269841269841269841269841269841293575920))) * x
+ + float_type(BOOST_FLOAT128_C(0.00138888888888888888888888888888888888888888888888889071045))) * x
+ + float_type(BOOST_FLOAT128_C(0.00833333333333333333333333333333333333333333333333332986595))) * x
+ + float_type(BOOST_FLOAT128_C(0.04166666666666666666666666666666666666666666666666666664876))) * x
+ + float_type(BOOST_FLOAT128_C(0.16666666666666666666666666666666666666666666666666666669048))) * x
+ + float_type(BOOST_FLOAT128_C(0.50000000000000000000000000000000000000000000000000000000006))) * x
+ + float_type(BOOST_FLOAT128_C(0.99999999999999999999999999999999999999999999999999999999995))) * x);
+ }
+
+ return sum;
+ }
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_EXP (boost::math::cstdfloat::detail::float_internal128_t x)
+ {
+ // Patch the expq() function for a subset of broken GCC compilers
+ // like GCC 4.7, 4.8 on MinGW.
+
+ // Use an order-36 polynomial approximation of the exponential function
+ // in the range of (-ln2 < x < ln2). Scale the argument to this range
+ // and subsequently multiply the result by 2^n accordingly.
+
+ // Derive the polynomial coefficients with Mathematica(R) by generating
+ // a table of high-precision values of exp(x) in the range (-ln2 < x < ln2)
+ // and subsequently applying the built-in *Fit* function.
+
+ // Table[{x, Exp[x] - 1}, {x, -Log[2], Log[2], 1/180}]
+ // N[%, 120]
+ // Fit[%, {x, x^2, x^3, x^4, x^5, x^6, x^7, x^8, x^9, x^10, x^11, x^12,
+ // x^13, x^14, x^15, x^16, x^17, x^18, x^19, x^20, x^21, x^22,
+ // x^23, x^24, x^25, x^26, x^27, x^28, x^29, x^30, x^31, x^32,
+ // x^33, x^34, x^35, x^36}, x]
+
+ typedef boost::math::cstdfloat::detail::float_internal128_t float_type;
+
+ // Scale the argument x to the range (-ln2 < x < ln2).
+ BOOST_CONSTEXPR_OR_CONST float_type one_over_ln2 = float_type(BOOST_FLOAT128_C(1.44269504088896340735992468100189213742664595415299));
+ const float_type x_over_ln2 = x * one_over_ln2;
+
+ boost::int_fast32_t n;
+
+ if(x != x)
+ {
+ // The argument is NaN.
+ return std::numeric_limits<float_type>::quiet_NaN();
+ }
+ else if(::BOOST_CSTDFLOAT_FLOAT128_FABS(x) > BOOST_FLOAT128_C(+0.693147180559945309417232121458176568075500134360255))
+ {
+ // The absolute value of the argument exceeds ln2.
+ n = static_cast<boost::int_fast32_t>(::BOOST_CSTDFLOAT_FLOAT128_FLOOR(x_over_ln2));
+ }
+ else if(::BOOST_CSTDFLOAT_FLOAT128_FABS(x) < BOOST_FLOAT128_C(+0.693147180559945309417232121458176568075500134360255))
+ {
+ // The absolute value of the argument is less than ln2.
+ n = static_cast<boost::int_fast32_t>(0);
+ }
+ else
+ {
+ // The absolute value of the argument is exactly equal to ln2 (in the sense of floating-point equality).
+ return float_type(2);
+ }
+
+ // Check if the argument is very near an integer.
+ const float_type floor_of_x = ::BOOST_CSTDFLOAT_FLOAT128_FLOOR(x);
+
+ if(::BOOST_CSTDFLOAT_FLOAT128_FABS(x - floor_of_x) < float_type(BOOST_CSTDFLOAT_FLOAT128_EPS))
+ {
+ // Return e^n for arguments very near an integer.
+ return boost::math::cstdfloat::detail::pown(BOOST_FLOAT128_C(2.71828182845904523536028747135266249775724709369996), static_cast<boost::int_fast32_t>(floor_of_x));
+ }
+
+ // Compute the scaled argument alpha.
+ const float_type alpha = x - (n * BOOST_FLOAT128_C(0.693147180559945309417232121458176568075500134360255));
+
+ // Compute the polynomial approximation of expm1(alpha) and add to it
+ // in order to obtain the scaled result.
+ const float_type scaled_result = ::BOOST_CSTDFLOAT_FLOAT128_EXPM1(alpha) + float_type(1);
+
+ // Rescale the result and return it.
+ return scaled_result * boost::math::cstdfloat::detail::pown(float_type(2), n);
+ }
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_SINH (boost::math::cstdfloat::detail::float_internal128_t x)
+ {
+ // Patch the sinhq() function for a subset of broken GCC compilers
+ // like GCC 4.7, 4.8 on MinGW.
+ typedef boost::math::cstdfloat::detail::float_internal128_t float_type;
+
+ // Here, we use the following:
+ // Set: ex = exp(x)
+ // Set: em1 = expm1(x)
+ // Then
+ // sinh(x) = (ex - 1/ex) / 2 ; for |x| >= 1
+ // sinh(x) = (2em1 + em1^2) / (2ex) ; for |x| < 1
+
+ const float_type ex = ::BOOST_CSTDFLOAT_FLOAT128_EXP(x);
+
+ if(::BOOST_CSTDFLOAT_FLOAT128_FABS(x) < float_type(+1))
+ {
+ const float_type em1 = ::BOOST_CSTDFLOAT_FLOAT128_EXPM1(x);
+
+ return ((em1 * 2) + (em1 * em1)) / (ex * 2);
+ }
+ else
+ {
+ return (ex - (float_type(1) / ex)) / 2;
+ }
+ }
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_COSH (boost::math::cstdfloat::detail::float_internal128_t x)
+ {
+ // Patch the coshq() function for a subset of broken GCC compilers
+ // like GCC 4.7, 4.8 on MinGW.
+ typedef boost::math::cstdfloat::detail::float_internal128_t float_type;
+ const float_type ex = ::BOOST_CSTDFLOAT_FLOAT128_EXP(x);
+ return (ex + (float_type(1) / ex)) / 2;
+ }
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_TANH (boost::math::cstdfloat::detail::float_internal128_t x)
+ {
+ // Patch the tanhq() function for a subset of broken GCC compilers
+ // like GCC 4.7, 4.8 on MinGW.
+ typedef boost::math::cstdfloat::detail::float_internal128_t float_type;
+ const float_type ex_plus = ::BOOST_CSTDFLOAT_FLOAT128_EXP(x);
+ const float_type ex_minus = (float_type(1) / ex_plus);
+ return (ex_plus - ex_minus) / (ex_plus + ex_minus);
+ }
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ASINH(boost::math::cstdfloat::detail::float_internal128_t x) throw()
+ {
+ // Patch the asinh() function since quadmath does not have it.
+ typedef boost::math::cstdfloat::detail::float_internal128_t float_type;
+ return ::BOOST_CSTDFLOAT_FLOAT128_LOG(x + ::BOOST_CSTDFLOAT_FLOAT128_SQRT((x * x) + float_type(1)));
+ }
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ACOSH(boost::math::cstdfloat::detail::float_internal128_t x) throw()
+ {
+ // Patch the acosh() function since quadmath does not have it.
+ typedef boost::math::cstdfloat::detail::float_internal128_t float_type;
+ const float_type zp(x + float_type(1));
+ const float_type zm(x - float_type(1));
+
+ return ::BOOST_CSTDFLOAT_FLOAT128_LOG(x + (zp * ::BOOST_CSTDFLOAT_FLOAT128_SQRT(zm / zp)));
+ }
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_ATANH(boost::math::cstdfloat::detail::float_internal128_t x) throw()
+ {
+ // Patch the atanh() function since quadmath does not have it.
+ typedef boost::math::cstdfloat::detail::float_internal128_t float_type;
+ return ( ::BOOST_CSTDFLOAT_FLOAT128_LOG(float_type(1) + x)
+ - ::BOOST_CSTDFLOAT_FLOAT128_LOG(float_type(1) - x)) / 2;
+ }
+ inline boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_TGAMMA(boost::math::cstdfloat::detail::float_internal128_t x) throw()
+ {
+ // Patch the tgammaq() function for a subset of broken GCC compilers
+ // like GCC 4.7, 4.8 on MinGW.
+ typedef boost::math::cstdfloat::detail::float_internal128_t float_type;
+
+ if(x > float_type(0))
+ {
+ return ::BOOST_CSTDFLOAT_FLOAT128_EXP(::BOOST_CSTDFLOAT_FLOAT128_LGAMMA(x));
+ }
+ else if(x < float_type(0))
+ {
+ // For x < 0, compute tgamma(-x) and use the reflection formula.
+ const float_type positive_x = -x;
+ float_type gamma_value = ::BOOST_CSTDFLOAT_FLOAT128_TGAMMA(positive_x);
+ const float_type floor_of_positive_x = ::BOOST_CSTDFLOAT_FLOAT128_FLOOR (positive_x);
+
+ // Take the reflection checks (slightly adapted) from <boost/math/gamma.hpp>.
+ const bool floor_of_z_is_equal_to_z = (positive_x == ::BOOST_CSTDFLOAT_FLOAT128_FLOOR(positive_x));
+
+ BOOST_CONSTEXPR_OR_CONST float_type my_pi = BOOST_FLOAT128_C(3.14159265358979323846264338327950288419716939937511);
+
+ if(floor_of_z_is_equal_to_z)
+ {
+ const bool is_odd = ((boost::int32_t(floor_of_positive_x) % boost::int32_t(2)) != boost::int32_t(0));
+
+ return (is_odd ? -std::numeric_limits<float_type>::infinity()
+ : +std::numeric_limits<float_type>::infinity());
+ }
+
+ const float_type sinpx_value = x * ::BOOST_CSTDFLOAT_FLOAT128_SIN(my_pi * x);
+
+ gamma_value *= sinpx_value;
+
+ const bool result_is_too_large_to_represent = ( (::BOOST_CSTDFLOAT_FLOAT128_FABS(gamma_value) < float_type(1))
+ && (((std::numeric_limits<float_type>::max)() * ::BOOST_CSTDFLOAT_FLOAT128_FABS(gamma_value)) < my_pi));
+
+ if(result_is_too_large_to_represent)
+ {
+ const bool is_odd = ((boost::int32_t(floor_of_positive_x) % boost::int32_t(2)) != boost::int32_t(0));
+
+ return (is_odd ? -std::numeric_limits<float_type>::infinity()
+ : +std::numeric_limits<float_type>::infinity());
+ }
+
+ gamma_value = -my_pi / gamma_value;
+
+ if((gamma_value > float_type(0)) || (gamma_value < float_type(0)))
+ {
+ return gamma_value;
+ }
+ else
+ {
+ // The value of gamma is too small to represent. Return 0.0 here.
+ return float_type(0);
+ }
+ }
+ else
+ {
+ // Gamma of zero is complex infinity. Return NaN here.
+ return std::numeric_limits<float_type>::quiet_NaN();
+ }
+ }
+ #endif // BOOST_CSTDFLOAT_BROKEN_FLOAT128_MATH_FUNCTIONS
+
+ // Define the quadruple-precision <cmath> functions in the namespace boost::math::cstdfloat::detail.
+
+ namespace boost { namespace math { namespace cstdfloat { namespace detail {
+ inline boost::math::cstdfloat::detail::float_internal128_t ldexp (boost::math::cstdfloat::detail::float_internal128_t x, int n) { return ::BOOST_CSTDFLOAT_FLOAT128_LDEXP (x, n); }
+ inline boost::math::cstdfloat::detail::float_internal128_t frexp (boost::math::cstdfloat::detail::float_internal128_t x, int* pn) { return ::BOOST_CSTDFLOAT_FLOAT128_FREXP (x, pn); }
+ inline boost::math::cstdfloat::detail::float_internal128_t fabs (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_FABS (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t abs (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_FABS (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t floor (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_FLOOR (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t ceil (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_CEIL (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t sqrt (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_SQRT (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t trunc (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_TRUNC (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t exp (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_EXP (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t pow (boost::math::cstdfloat::detail::float_internal128_t x, boost::math::cstdfloat::detail::float_internal128_t a) { return ::BOOST_CSTDFLOAT_FLOAT128_POW (x, a); }
+ inline boost::math::cstdfloat::detail::float_internal128_t pow (boost::math::cstdfloat::detail::float_internal128_t x, int a) { return ::BOOST_CSTDFLOAT_FLOAT128_POW (x, boost::math::cstdfloat::detail::float_internal128_t(a)); }
+ inline boost::math::cstdfloat::detail::float_internal128_t log (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_LOG (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t log10 (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_LOG10 (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t sin (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_SIN (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t cos (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_COS (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t tan (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_TAN (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t asin (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_ASIN (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t acos (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_ACOS (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t atan (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_ATAN (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t sinh (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_SINH (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t cosh (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_COSH (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t tanh (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_TANH (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t asinh (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_ASINH (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t acosh (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_ACOSH (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t atanh (boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_ATANH (x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t fmod (boost::math::cstdfloat::detail::float_internal128_t a, boost::math::cstdfloat::detail::float_internal128_t b) { return ::BOOST_CSTDFLOAT_FLOAT128_FMOD (a, b); }
+ inline boost::math::cstdfloat::detail::float_internal128_t atan2 (boost::math::cstdfloat::detail::float_internal128_t y, boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_ATAN2 (y, x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t lgamma(boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_LGAMMA(x); }
+ inline boost::math::cstdfloat::detail::float_internal128_t tgamma(boost::math::cstdfloat::detail::float_internal128_t x) { return ::BOOST_CSTDFLOAT_FLOAT128_TGAMMA(x); }
+ } } } } // boost::math::cstdfloat::detail
+
+ // We will now inject the quadruple-precision <cmath> functions
+ // into the std namespace. This is done via *using* directive.
+ namespace std
+ {
+ using boost::math::cstdfloat::detail::ldexp;
+ using boost::math::cstdfloat::detail::frexp;
+ using boost::math::cstdfloat::detail::fabs;
+ using boost::math::cstdfloat::detail::abs;
+ using boost::math::cstdfloat::detail::floor;
+ using boost::math::cstdfloat::detail::ceil;
+ using boost::math::cstdfloat::detail::sqrt;
+ using boost::math::cstdfloat::detail::trunc;
+ using boost::math::cstdfloat::detail::exp;
+ using boost::math::cstdfloat::detail::pow;
+ using boost::math::cstdfloat::detail::log;
+ using boost::math::cstdfloat::detail::log10;
+ using boost::math::cstdfloat::detail::sin;
+ using boost::math::cstdfloat::detail::cos;
+ using boost::math::cstdfloat::detail::tan;
+ using boost::math::cstdfloat::detail::asin;
+ using boost::math::cstdfloat::detail::acos;
+ using boost::math::cstdfloat::detail::atan;
+ using boost::math::cstdfloat::detail::sinh;
+ using boost::math::cstdfloat::detail::cosh;
+ using boost::math::cstdfloat::detail::tanh;
+ using boost::math::cstdfloat::detail::asinh;
+ using boost::math::cstdfloat::detail::acosh;
+ using boost::math::cstdfloat::detail::atanh;
+ using boost::math::cstdfloat::detail::fmod;
+ using boost::math::cstdfloat::detail::atan2;
+ using boost::math::cstdfloat::detail::lgamma;
+ using boost::math::cstdfloat::detail::tgamma;
+ } // namespace std
+
+ // We will now remove the preprocessor symbols representing quadruple-precision <cmath>
+ // functions from the preprocessor.
+
+ #undef BOOST_CSTDFLOAT_FLOAT128_LDEXP
+ #undef BOOST_CSTDFLOAT_FLOAT128_FREXP
+ #undef BOOST_CSTDFLOAT_FLOAT128_FABS
+ #undef BOOST_CSTDFLOAT_FLOAT128_FLOOR
+ #undef BOOST_CSTDFLOAT_FLOAT128_CEIL
+ #undef BOOST_CSTDFLOAT_FLOAT128_SQRT
+ #undef BOOST_CSTDFLOAT_FLOAT128_TRUNC
+ #undef BOOST_CSTDFLOAT_FLOAT128_EXP
+ #undef BOOST_CSTDFLOAT_FLOAT128_EXPM1
+ #undef BOOST_CSTDFLOAT_FLOAT128_POW
+ #undef BOOST_CSTDFLOAT_FLOAT128_LOG
+ #undef BOOST_CSTDFLOAT_FLOAT128_LOG10
+ #undef BOOST_CSTDFLOAT_FLOAT128_SIN
+ #undef BOOST_CSTDFLOAT_FLOAT128_COS
+ #undef BOOST_CSTDFLOAT_FLOAT128_TAN
+ #undef BOOST_CSTDFLOAT_FLOAT128_ASIN
+ #undef BOOST_CSTDFLOAT_FLOAT128_ACOS
+ #undef BOOST_CSTDFLOAT_FLOAT128_ATAN
+ #undef BOOST_CSTDFLOAT_FLOAT128_SINH
+ #undef BOOST_CSTDFLOAT_FLOAT128_COSH
+ #undef BOOST_CSTDFLOAT_FLOAT128_TANH
+ #undef BOOST_CSTDFLOAT_FLOAT128_ASINH
+ #undef BOOST_CSTDFLOAT_FLOAT128_ACOSH
+ #undef BOOST_CSTDFLOAT_FLOAT128_ATANH
+ #undef BOOST_CSTDFLOAT_FLOAT128_FMOD
+ #undef BOOST_CSTDFLOAT_FLOAT128_ATAN2
+ #undef BOOST_CSTDFLOAT_FLOAT128_LGAMMA
+ #undef BOOST_CSTDFLOAT_FLOAT128_TGAMMA
+
+ #endif // Not BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT (i.e., the user would like to have libquadmath support)
+
+#endif // _BOOST_CSTDFLOAT_CMATH_2014_02_15_HPP_
diff --git a/3party/boost/boost/math/cstdfloat/cstdfloat_complex.hpp b/3party/boost/boost/math/cstdfloat/cstdfloat_complex.hpp
new file mode 100644
index 0000000000..b3f4314280
--- /dev/null
+++ b/3party/boost/boost/math/cstdfloat/cstdfloat_complex.hpp
@@ -0,0 +1,38 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2014.
+// Copyright John Maddock 2014.
+// Copyright Paul Bristow 2014.
+// 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)
+//
+
+// Implement quadruple-precision (and extended) support for <complex>.
+
+#ifndef _BOOST_CSTDFLOAT_COMPLEX_2014_02_15_HPP_
+ #define _BOOST_CSTDFLOAT_COMPLEX_2014_02_15_HPP_
+
+ #include <boost/math/cstdfloat/cstdfloat_types.hpp>
+ #include <boost/math/cstdfloat/cstdfloat_limits.hpp>
+ #include <boost/math/cstdfloat/cstdfloat_cmath.hpp>
+ #include <boost/math/cstdfloat/cstdfloat_iostream.hpp>
+
+ #if defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_LIMITS)
+ #error You can not use <boost/math/cstdfloat/cstdfloat_complex.hpp> with BOOST_CSTDFLOAT_NO_LIBQUADMATH_LIMITS defined.
+ #endif
+ #if defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_CMATH)
+ #error You can not use <boost/math/cstdfloat/cstdfloat_complex.hpp> with BOOST_CSTDFLOAT_NO_LIBQUADMATH_CMATH defined.
+ #endif
+ #if defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_IOSTREAM)
+ #error You can not use <boost/math/cstdfloat/cstdfloat_complex.hpp> with BOOST_CSTDFLOAT_NO_LIBQUADMATH_IOSTREAM defined.
+ #endif
+
+ #if defined(BOOST_CSTDFLOAT_HAS_INTERNAL_FLOAT128_T) && defined(BOOST_MATH_USE_FLOAT128) && !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT)
+
+ #define BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE boost::math::cstdfloat::detail::float_internal128_t
+ #include <boost/math/cstdfloat/cstdfloat_complex_std.hpp>
+ #undef BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE
+
+ #endif // Not BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT (i.e., the user would like to have libquadmath support)
+
+#endif // _BOOST_CSTDFLOAT_COMPLEX_2014_02_15_HPP_
diff --git a/3party/boost/boost/math/cstdfloat/cstdfloat_complex_std.hpp b/3party/boost/boost/math/cstdfloat/cstdfloat_complex_std.hpp
new file mode 100644
index 0000000000..f949a9aa46
--- /dev/null
+++ b/3party/boost/boost/math/cstdfloat/cstdfloat_complex_std.hpp
@@ -0,0 +1,641 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2014.
+// Copyright John Maddock 2014.
+// Copyright Paul Bristow 2014.
+// 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)
+//
+
+// Implement a specialization of std::complex<> for *anything* that
+// is defined as BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE.
+
+#ifndef _BOOST_CSTDFLOAT_COMPLEX_STD_2014_02_15_HPP_
+ #define _BOOST_CSTDFLOAT_COMPLEX_STD_2014_02_15_HPP_
+
+ #if defined(__GNUC__)
+ #pragma GCC system_header
+ #endif
+
+ #include <complex>
+ #include <boost/math/constants/constants.hpp>
+
+ namespace std
+ {
+ // Forward declarations.
+ template<class float_type>
+ class complex;
+
+ template<>
+ class complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>;
+
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE real(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE imag(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE abs (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE arg (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE norm(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> conj (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> proj (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> polar(const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE&,
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& = 0);
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> sqrt (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> sin (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> cos (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> tan (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> asin (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> acos (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> atan (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> exp (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> log (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> log10(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> pow (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&,
+ int);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> pow (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&,
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> pow (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&,
+ const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> pow (const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE&,
+ const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> sinh (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> cosh (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> tanh (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> asinh(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> acosh(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> atanh(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ template<class char_type, class traits_type>
+ inline std::basic_ostream<char_type, traits_type>& operator<<(std::basic_ostream<char_type, traits_type>&, const std::complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ template<class char_type, class traits_type>
+ inline std::basic_istream<char_type, traits_type>& operator>>(std::basic_istream<char_type, traits_type>&, std::complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>&);
+
+ // Template specialization of the complex class.
+ template<>
+ class complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>
+ {
+ public:
+ typedef BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE value_type;
+
+ explicit complex(const complex<float>&);
+ explicit complex(const complex<double>&);
+ explicit complex(const complex<long double>&);
+
+ #if defined(BOOST_NO_CXX11_CONSTEXPR)
+ complex(const value_type& r = value_type(),
+ const value_type& i = value_type()) : re(r),
+ im(i) { }
+
+ template<typename X>
+ complex(const complex<X>& x) : re(x.real()),
+ im(x.imag()) { }
+
+ const value_type& real() const { return re; }
+ const value_type& imag() const { return im; }
+
+ value_type& real() { return re; }
+ value_type& imag() { return im; }
+ #else
+ BOOST_CONSTEXPR complex(const value_type& r = value_type(),
+ const value_type& i = value_type()) : re(r),
+ im(i) { }
+
+ template<typename X>
+ BOOST_CONSTEXPR complex(const complex<X>& x) : re(x.real()),
+ im(x.imag()) { }
+
+ value_type real() const { return re; }
+ value_type imag() const { return im; }
+ #endif
+
+ void real(value_type r) { re = r; }
+ void imag(value_type i) { im = i; }
+
+ complex<value_type>& operator=(const value_type& v)
+ {
+ re = v;
+ im = value_type(0);
+ return *this;
+ }
+
+ complex<value_type>& operator+=(const value_type& v)
+ {
+ re += v;
+ return *this;
+ }
+
+ complex<value_type>& operator-=(const value_type& v)
+ {
+ re -= v;
+ return *this;
+ }
+
+ complex<value_type>& operator*=(const value_type& v)
+ {
+ re *= v;
+ im *= v;
+ return *this;
+ }
+
+ complex<value_type>& operator/=(const value_type& v)
+ {
+ re /= v;
+ im /= v;
+ return *this;
+ }
+
+ template<typename X>
+ complex<value_type>& operator=(const complex<X>& x)
+ {
+ re = x.real();
+ im = x.imag();
+ return *this;
+ }
+
+ template<typename X>
+ complex<value_type>& operator+=(const complex<X>& x)
+ {
+ re += x.real();
+ im += x.imag();
+ return *this;
+ }
+
+ template<typename X>
+ complex<value_type>& operator-=(const complex<X>& x)
+ {
+ re -= x.real();
+ im -= x.imag();
+ return *this;
+ }
+
+ template<typename X>
+ complex<value_type>& operator*=(const complex<X>& x)
+ {
+ const value_type tmp_real = (re * x.real()) - (im * x.imag());
+ im = (re * x.imag()) + (im * x.real());
+ re = tmp_real;
+ return *this;
+ }
+
+ template<typename X>
+ complex<value_type>& operator/=(const complex<X>& x)
+ {
+ const value_type tmp_real = (re * x.real()) + (im * x.imag());
+ const value_type the_norm = std::norm(x);
+ im = ((im * x.real()) - (re * x.imag())) / the_norm;
+ re = tmp_real / the_norm;
+ return *this;
+ }
+
+ private:
+ value_type re;
+ value_type im;
+ };
+
+ // Constructors from built-in complex representation of floating-point types.
+ complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::complex(const complex<float>& f) : re(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE( f.real())), im(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE( f.imag())) { }
+ complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::complex(const complex<double>& d) : re(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE( d.real())), im(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE( d.imag())) { }
+ complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::complex(const complex<long double>& ld) : re(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(ld.real())), im(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(ld.imag())) { }
+ } // namespace std
+
+ namespace boost { namespace math { namespace cstdfloat { namespace detail {
+ template<class float_type> std::complex<float_type> multiply_by_i(const std::complex<float_type>& x)
+ {
+ // Multiply x (in C) by I (the imaginary component), and return the result.
+ return std::complex<float_type>(-x.imag(), x.real());
+ }
+ } } } } // boost::math::cstdfloat::detail
+
+ namespace std
+ {
+ // ISO/IEC 14882:2011, Section 26.4.7, specific values.
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE real(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x) { return x.real(); }
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE imag(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x) { return x.imag(); }
+
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE abs (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x) { using std::sqrt; return sqrt ((real(x) * real(x)) + (imag(x) * imag(x))); }
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE arg (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x) { using std::atan2; return atan2(x.imag(), x.real()); }
+ inline BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE norm(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x) { return (real(x) * real(x)) + (imag(x) * imag(x)); }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> conj (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(x.real(), -x.imag()); }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> proj (const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE m = (std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::max)();
+ if ((x.real() > m)
+ || (x.real() < -m)
+ || (x.imag() > m)
+ || (x.imag() < -m))
+ {
+ // We have an infinity, return a normalized infinity, respecting the sign of the imaginary part:
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::infinity(), x.imag() < 0 ? -0 : 0);
+ }
+ return x;
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> polar(const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& rho,
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& theta)
+ {
+ using std::sin;
+ using std::cos;
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(rho * cos(theta), rho * sin(theta));
+ }
+
+ // Global add, sub, mul, div.
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator+(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& v) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(u.real() + v.real(), u.imag() + v.imag()); }
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator-(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& v) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(u.real() - v.real(), u.imag() - v.imag()); }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator*(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& v)
+ {
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>((u.real() * v.real()) - (u.imag() * v.imag()),
+ (u.real() * v.imag()) + (u.imag() * v.real()));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator/(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& v)
+ {
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE the_norm = std::norm(v);
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(((u.real() * v.real()) + (u.imag() * v.imag())) / the_norm,
+ ((u.imag() * v.real()) - (u.real() * v.imag())) / the_norm);
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator+(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u, const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& v) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(u.real() + v, u.imag()); }
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator-(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u, const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& v) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(u.real() - v, u.imag()); }
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator*(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u, const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& v) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(u.real() * v, u.imag() * v); }
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator/(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u, const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& v) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(u.real() / v, u.imag() / v); }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator+(const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& u, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& v) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(u + v.real(), v.imag()); }
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator-(const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& u, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& v) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(u - v.real(), -v.imag()); }
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator*(const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& u, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& v) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(u * v.real(), u * v.imag()); }
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator/(const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& u, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& v) { const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE v_norm = norm(v); return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>((u * v.real()) / v_norm, (-u * v.imag()) / v_norm); }
+
+ // Unary plus / minus.
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator+(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u) { return u; }
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> operator-(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& u) { return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(-u.real(), -u.imag()); }
+
+ // Equality and inequality.
+ inline bool operator==(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& y) { return ((x.real() == y.real()) && (x.imag() == y.imag())); }
+ inline bool operator==(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x, const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& y) { return ((x.real() == y) && (x.imag() == BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(0))); }
+ inline bool operator==(const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& x, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& y) { return ((x == y.real()) && (y.imag() == BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(0))); }
+ inline bool operator!=(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& y) { return ((x.real() != y.real()) || (x.imag() != y.imag())); }
+ inline bool operator!=(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x, const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& y) { return ((x.real() != y) || (x.imag() != BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(0))); }
+ inline bool operator!=(const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& x, const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& y) { return ((x != y.real()) || (y.imag() != BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(0))); }
+
+ // ISO/IEC 14882:2011, Section 26.4.8, transcendentals.
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> sqrt(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ using std::fabs;
+ using std::sqrt;
+
+ // Compute sqrt(x) for x in C:
+ // sqrt(x) = (s , xi / 2s) : for xr > 0,
+ // (|xi| / 2s, +-s) : for xr < 0,
+ // (sqrt(xi), sqrt(xi) : for xr = 0,
+ // where s = sqrt{ [ |xr| + sqrt(xr^2 + xi^2) ] / 2 },
+ // and the +- sign is the same as the sign of xi.
+
+ if(x.real() > 0)
+ {
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE s = sqrt((fabs(x.real()) + std::abs(x)) / 2);
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(s, x.imag() / (s * 2));
+ }
+ else if(x.real() < 0)
+ {
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE s = sqrt((fabs(x.real()) + std::abs(x)) / 2);
+
+ const bool imag_is_neg = (x.imag() < 0);
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(fabs(x.imag()) / (s * 2), (imag_is_neg ? -s : s));
+ }
+ else
+ {
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sqrt_xi_half = sqrt(x.imag() / 2);
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(sqrt_xi_half, sqrt_xi_half);
+ }
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> sin(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ using std::sin;
+ using std::cos;
+ using std::exp;
+
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sin_x = sin (x.real());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cos_x = cos (x.real());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_yp = exp (x.imag());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_ym = BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) / exp_yp;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sinh_y = (exp_yp - exp_ym) / 2;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cosh_y = (exp_yp + exp_ym) / 2;
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(sin_x * cosh_y, cos_x * sinh_y);
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> cos(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ using std::sin;
+ using std::cos;
+ using std::exp;
+
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sin_x = sin (x.real());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cos_x = cos (x.real());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_yp = exp (x.imag());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_ym = BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) / exp_yp;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sinh_y = (exp_yp - exp_ym) / 2;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cosh_y = (exp_yp + exp_ym) / 2;
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(cos_x * cosh_y, -(sin_x * sinh_y));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> tan(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ using std::sin;
+ using std::cos;
+ using std::exp;
+
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sin_x = sin (x.real());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cos_x = cos (x.real());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_yp = exp (x.imag());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_ym = BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) / exp_yp;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sinh_y = (exp_yp - exp_ym) / 2;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cosh_y = (exp_yp + exp_ym) / 2;
+
+ return ( complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(sin_x * cosh_y, cos_x * sinh_y)
+ / complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(cos_x * cosh_y, -sin_x * sinh_y));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> asin(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ return -boost::math::cstdfloat::detail::multiply_by_i(std::log(boost::math::cstdfloat::detail::multiply_by_i(x) + std::sqrt(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) - (x * x))));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> acos(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ return boost::math::constants::half_pi<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>() - std::asin(x);
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> atan(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> izz = boost::math::cstdfloat::detail::multiply_by_i(x);
+
+ return boost::math::cstdfloat::detail::multiply_by_i(std::log(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) - izz) - std::log(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) + izz)) / 2;
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> exp(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ using std::exp;
+
+ return std::polar(exp(x.real()), x.imag());
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> log(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ using std::atan2;
+ using std::log;
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(log(std::norm(x)) / 2, atan2(x.imag(), x.real()));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> log10(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ return std::log(x) / boost::math::constants::ln_ten<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>();
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> pow(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x,
+ int p)
+ {
+ const bool re_isneg = (x.real() < 0);
+ const bool re_isnan = (x.real() != x.real());
+ const bool re_isinf = ((!re_isneg) ? bool(+x.real() > (std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::max)())
+ : bool(-x.real() > (std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::max)()));
+
+ const bool im_isneg = (x.imag() < 0);
+ const bool im_isnan = (x.imag() != x.imag());
+ const bool im_isinf = ((!im_isneg) ? bool(+x.imag() > (std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::max)())
+ : bool(-x.imag() > (std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::max)()));
+
+ if(re_isnan || im_isnan) { return x; }
+
+ if(re_isinf || im_isinf)
+ {
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::quiet_NaN(),
+ std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::quiet_NaN());
+ }
+
+ if(p < 0)
+ {
+ if(std::abs(x) < (std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::min)())
+ {
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::infinity(),
+ std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::infinity());
+ }
+ else
+ {
+ return BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) / std::pow(x, -p);
+ }
+ }
+
+ if(p == 0)
+ {
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1));
+ }
+ else
+ {
+ if(p == 1) { return x; }
+
+ if(std::abs(x) > (std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::max)())
+ {
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE re = (re_isneg ? -std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::infinity()
+ : +std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::infinity());
+
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE im = (im_isneg ? -std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::infinity()
+ : +std::numeric_limits<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>::infinity());
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(re, im);
+ }
+
+ if (p == 2) { return (x * x); }
+ else if(p == 3) { return ((x * x) * x); }
+ else if(p == 4) { const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> x2 = (x * x); return (x2 * x2); }
+ else
+ {
+ // The variable xn stores the binary powers of x.
+ complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> result(((p % 2) != 0) ? x : complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1)));
+ complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> xn (x);
+
+ int p2 = p;
+
+ while((p2 /= 2) != 0)
+ {
+ // Square xn for each binary power.
+ xn *= xn;
+
+ const bool has_binary_power = ((p2 % 2) != 0);
+
+ if(has_binary_power)
+ {
+ // Multiply the result with each binary power contained in the exponent.
+ result *= xn;
+ }
+ }
+
+ return result;
+ }
+ }
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> pow(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x,
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& a)
+ {
+ return std::exp(a * std::log(x));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> pow(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x,
+ const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& a)
+ {
+ return std::exp(a * std::log(x));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> pow(const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE& x,
+ const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& a)
+ {
+ return std::exp(a * std::log(x));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> sinh(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ using std::sin;
+ using std::cos;
+ using std::exp;
+
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sin_y = sin (x.imag());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cos_y = cos (x.imag());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_xp = exp (x.real());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_xm = BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) / exp_xp;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sinh_x = (exp_xp - exp_xm) / 2;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cosh_x = (exp_xp + exp_xm) / 2;
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(cos_y * sinh_x, cosh_x * sin_y);
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> cosh(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ using std::sin;
+ using std::cos;
+ using std::exp;
+
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sin_y = sin (x.imag());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cos_y = cos (x.imag());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_xp = exp (x.real());
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE exp_xm = BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) / exp_xp;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE sinh_x = (exp_xp - exp_xm) / 2;
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE cosh_x = (exp_xp + exp_xm) / 2;
+
+ return complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(cos_y * cosh_x, sin_y * sinh_x);
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> tanh(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> ex_plus = std::exp(x);
+ const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> ex_minus = BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) / ex_plus;
+
+ return (ex_plus - ex_minus) / (ex_plus + ex_minus);
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> asinh(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ return std::log(x + std::sqrt((x * x) + BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1)));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> acosh(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ const BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE my_one(1);
+
+ const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> zp(x.real() + my_one, x.imag());
+ const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> zm(x.real() - my_one, x.imag());
+
+ return std::log(x + (zp * std::sqrt(zm / zp)));
+ }
+
+ inline complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE> atanh(const complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ return (std::log(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) + x) - std::log(BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE(1) - x)) / 2.0;
+ }
+
+ template<class char_type, class traits_type>
+ inline std::basic_ostream<char_type, traits_type>& operator<<(std::basic_ostream<char_type, traits_type>& os, const std::complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ std::basic_ostringstream<char_type, traits_type> ostr;
+
+ ostr.flags(os.flags());
+ ostr.imbue(os.getloc());
+ ostr.precision(os.precision());
+
+ ostr << char_type('(')
+ << x.real()
+ << char_type(',')
+ << x.imag()
+ << char_type(')');
+
+ return (os << ostr.str());
+ }
+
+ template<class char_type, class traits_type>
+ inline std::basic_istream<char_type, traits_type>& operator>>(std::basic_istream<char_type, traits_type>& is, std::complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>& x)
+ {
+ BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE rx;
+ BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE ix;
+
+ char_type the_char;
+
+ static_cast<void>(is >> the_char);
+
+ if(the_char == static_cast<char_type>('('))
+ {
+ static_cast<void>(is >> rx >> the_char);
+
+ if(the_char == static_cast<char_type>(','))
+ {
+ static_cast<void>(is >> ix >> the_char);
+
+ if(the_char == static_cast<char_type>(')'))
+ {
+ x = complex<BOOST_CSTDFLOAT_EXTENDED_COMPLEX_FLOAT_TYPE>(rx, ix);
+ }
+ else
+ {
+ is.setstate(ios_base::failbit);
+ }
+ }
+ else if(the_char == static_cast<char_type>(')'))
+ {
+ x = rx;
+ }
+ else
+ {
+ is.setstate(ios_base::failbit);
+ }
+ }
+ else
+ {
+ static_cast<void>(is.putback(the_char));
+
+ static_cast<void>(is >> rx);
+
+ x = rx;
+ }
+
+ return is;
+ }
+ } // namespace std
+
+#endif // _BOOST_CSTDFLOAT_COMPLEX_STD_2014_02_15_HPP_
diff --git a/3party/boost/boost/math/cstdfloat/cstdfloat_iostream.hpp b/3party/boost/boost/math/cstdfloat/cstdfloat_iostream.hpp
new file mode 100644
index 0000000000..ac94fd35f9
--- /dev/null
+++ b/3party/boost/boost/math/cstdfloat/cstdfloat_iostream.hpp
@@ -0,0 +1,771 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2014.
+// Copyright John Maddock 2014.
+// Copyright Paul Bristow 2014.
+// 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)
+//
+
+// Implement quadruple-precision I/O stream operations.
+
+#ifndef _BOOST_CSTDFLOAT_IOSTREAM_2014_02_15_HPP_
+ #define _BOOST_CSTDFLOAT_IOSTREAM_2014_02_15_HPP_
+
+ #include <boost/math/cstdfloat/cstdfloat_types.hpp>
+ #include <boost/math/cstdfloat/cstdfloat_limits.hpp>
+ #include <boost/math/cstdfloat/cstdfloat_cmath.hpp>
+
+ #if defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_CMATH)
+ #error You can not use <boost/math/cstdfloat/cstdfloat_iostream.hpp> with BOOST_CSTDFLOAT_NO_LIBQUADMATH_CMATH defined.
+ #endif
+
+ #if defined(BOOST_CSTDFLOAT_HAS_INTERNAL_FLOAT128_T) && defined(BOOST_MATH_USE_FLOAT128) && !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT)
+
+ #include <cstddef>
+ #include <istream>
+ #include <ostream>
+ #include <sstream>
+ #include <stdexcept>
+ #include <string>
+ #include <boost/static_assert.hpp>
+ #include <boost/throw_exception.hpp>
+
+// #if (0)
+ #if defined(__GNUC__)
+
+ // Forward declarations of quadruple-precision string functions.
+ extern "C" int quadmath_snprintf(char *str, size_t size, const char *format, ...) throw();
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t strtoflt128(const char*, char **) throw();
+
+ namespace std
+ {
+ template<typename char_type, class traits_type>
+ inline std::basic_ostream<char_type, traits_type>& operator<<(std::basic_ostream<char_type, traits_type>& os, const boost::math::cstdfloat::detail::float_internal128_t& x)
+ {
+ std::basic_ostringstream<char_type, traits_type> ostr;
+ ostr.flags(os.flags());
+ ostr.imbue(os.getloc());
+ ostr.precision(os.precision());
+
+ char my_buffer[64U];
+
+ const int my_prec = static_cast<int>(os.precision());
+ const int my_digits = ((my_prec == 0) ? 36 : my_prec);
+
+ const std::ios_base::fmtflags my_flags = os.flags();
+
+ char my_format_string[8U];
+
+ std::size_t my_format_string_index = 0U;
+
+ my_format_string[my_format_string_index] = '%';
+ ++my_format_string_index;
+
+ if(my_flags & std::ios_base::showpos) { my_format_string[my_format_string_index] = '+'; ++my_format_string_index; }
+ if(my_flags & std::ios_base::showpoint) { my_format_string[my_format_string_index] = '#'; ++my_format_string_index; }
+
+ my_format_string[my_format_string_index + 0U] = '.';
+ my_format_string[my_format_string_index + 1U] = '*';
+ my_format_string[my_format_string_index + 2U] = 'Q';
+
+ my_format_string_index += 3U;
+
+ char the_notation_char;
+
+ if (my_flags & std::ios_base::scientific) { the_notation_char = 'e'; }
+ else if(my_flags & std::ios_base::fixed) { the_notation_char = 'f'; }
+ else { the_notation_char = 'g'; }
+
+ my_format_string[my_format_string_index + 0U] = the_notation_char;
+ my_format_string[my_format_string_index + 1U] = 0;
+
+ const int v = ::quadmath_snprintf(my_buffer,
+ static_cast<int>(sizeof(my_buffer)),
+ my_format_string,
+ my_digits,
+ x);
+
+ if(v < 0) { BOOST_THROW_EXCEPTION(std::runtime_error("Formatting of boost::float128_t failed internally in quadmath_snprintf().")); }
+
+ if(v >= static_cast<int>(sizeof(my_buffer) - 1U))
+ {
+ // Evidently there is a really long floating-point string here,
+ // such as a small decimal representation in non-scientific notation.
+ // So we have to use dynamic memory allocation for the output
+ // string buffer.
+
+ char* my_buffer2 = static_cast<char*>(0U);
+
+ try
+ {
+ my_buffer2 = new char[v + 3];
+ }
+ catch(const std::bad_alloc&)
+ {
+ BOOST_THROW_EXCEPTION(std::runtime_error("Formatting of boost::float128_t failed while allocating memory."));
+ }
+
+ const int v2 = ::quadmath_snprintf(my_buffer2,
+ v + 3,
+ my_format_string,
+ my_digits,
+ x);
+
+ if(v2 >= v + 3)
+ {
+ BOOST_THROW_EXCEPTION(std::runtime_error("Formatting of boost::float128_t failed."));
+ }
+
+ static_cast<void>(ostr << my_buffer2);
+
+ delete [] my_buffer2;
+ }
+ else
+ {
+ static_cast<void>(ostr << my_buffer);
+ }
+
+ return (os << ostr.str());
+ }
+
+ template<typename char_type, class traits_type>
+ inline std::basic_istream<char_type, traits_type>& operator>>(std::basic_istream<char_type, traits_type>& is, boost::math::cstdfloat::detail::float_internal128_t& x)
+ {
+ std::string str;
+
+ static_cast<void>(is >> str);
+
+ char* p_end;
+
+ x = strtoflt128(str.c_str(), &p_end);
+
+ if(static_cast<std::ptrdiff_t>(p_end - str.c_str()) != static_cast<std::ptrdiff_t>(str.length()))
+ {
+ for(std::string::const_reverse_iterator it = str.rbegin(); it != str.rend(); ++it)
+ {
+ static_cast<void>(is.putback(*it));
+ }
+
+ is.setstate(ios_base::failbit);
+
+ BOOST_THROW_EXCEPTION(std::runtime_error("Unable to interpret input string as a boost::float128_t"));
+ }
+
+ return is;
+ }
+ }
+
+// #elif defined(__GNUC__)
+ #elif defined(BOOST_INTEL)
+
+ // The section for I/O stream support for the ICC compiler is particularly
+ // long, because these functions must be painstakingly synthesized from
+ // manually-written routines (ICC does not support I/O stream operations
+ // for its _Quad type).
+
+ // The following string-extraction routines are based on the methodology
+ // used in Boost.Multiprecision by John Maddock and Christopher Kormanyos.
+ // This methodology has been slightly modified here for boost::float128_t.
+
+ #include <cstring>
+ #include <cctype>
+ #include <boost/lexical_cast.hpp>
+
+ namespace boost { namespace math { namespace cstdfloat { namespace detail {
+
+ template<class string_type>
+ void format_float_string(string_type& str,
+ int my_exp,
+ int digits,
+ const std::ios_base::fmtflags f,
+ const bool iszero)
+ {
+ typedef typename string_type::size_type size_type;
+
+ const bool scientific = ((f & std::ios_base::scientific) == std::ios_base::scientific);
+ const bool fixed = ((f & std::ios_base::fixed) == std::ios_base::fixed);
+ const bool showpoint = ((f & std::ios_base::showpoint) == std::ios_base::showpoint);
+ const bool showpos = ((f & std::ios_base::showpos) == std::ios_base::showpos);
+
+ const bool b_neg = ((str.size() != 0U) && (str[0] == '-'));
+
+ if(b_neg)
+ {
+ str.erase(0, 1);
+ }
+
+ if(digits == 0)
+ {
+ digits = static_cast<int>((std::max)(str.size(), size_type(16)));
+ }
+
+ if(iszero || str.empty() || (str.find_first_not_of('0') == string_type::npos))
+ {
+ // We will be printing zero, even though the value might not
+ // actually be zero (it just may have been rounded to zero).
+ str = "0";
+
+ if(scientific || fixed)
+ {
+ str.append(1, '.');
+ str.append(size_type(digits), '0');
+
+ if(scientific)
+ {
+ str.append("e+00");
+ }
+ }
+ else
+ {
+ if(showpoint)
+ {
+ str.append(1, '.');
+ if(digits > 1)
+ {
+ str.append(size_type(digits - 1), '0');
+ }
+ }
+ }
+
+ if(b_neg)
+ {
+ str.insert(0U, 1U, '-');
+ }
+ else if(showpos)
+ {
+ str.insert(0U, 1U, '+');
+ }
+
+ return;
+ }
+
+ if(!fixed && !scientific && !showpoint)
+ {
+ // Suppress trailing zeros.
+ typename string_type::iterator pos = str.end();
+
+ while(pos != str.begin() && *--pos == '0') { ; }
+
+ if(pos != str.end())
+ {
+ ++pos;
+ }
+
+ str.erase(pos, str.end());
+
+ if(str.empty())
+ {
+ str = '0';
+ }
+ }
+ else if(!fixed || (my_exp >= 0))
+ {
+ // Pad out the end with zero's if we need to.
+
+ int chars = static_cast<int>(str.size());
+ chars = digits - chars;
+
+ if(scientific)
+ {
+ ++chars;
+ }
+
+ if(chars > 0)
+ {
+ str.append(static_cast<size_type>(chars), '0');
+ }
+ }
+
+ if(fixed || (!scientific && (my_exp >= -4) && (my_exp < digits)))
+ {
+ if((1 + my_exp) > static_cast<int>(str.size()))
+ {
+ // Just pad out the end with zeros.
+ str.append(static_cast<size_type>((1 + my_exp) - static_cast<int>(str.size())), '0');
+
+ if(showpoint || fixed)
+ {
+ str.append(".");
+ }
+ }
+ else if(my_exp + 1 < static_cast<int>(str.size()))
+ {
+ if(my_exp < 0)
+ {
+ str.insert(0U, static_cast<size_type>(-1 - my_exp), '0');
+ str.insert(0U, "0.");
+ }
+ else
+ {
+ // Insert the decimal point:
+ str.insert(static_cast<size_type>(my_exp + 1), 1, '.');
+ }
+ }
+ else if(showpoint || fixed) // we have exactly the digits we require to left of the point
+ {
+ str += ".";
+ }
+
+ if(fixed)
+ {
+ // We may need to add trailing zeros.
+ int l = static_cast<int>(str.find('.') + 1U);
+ l = digits - (static_cast<int>(str.size()) - l);
+
+ if(l > 0)
+ {
+ str.append(size_type(l), '0');
+ }
+ }
+ }
+ else
+ {
+ // Scientific format:
+ if(showpoint || (str.size() > 1))
+ {
+ str.insert(1U, 1U, '.');
+ }
+
+ str.append(1U, 'e');
+ string_type e = boost::lexical_cast<string_type>(std::abs(my_exp));
+
+ if(e.size() < 2U)
+ {
+ e.insert(0U, 2U - e.size(), '0');
+ }
+
+ if(my_exp < 0)
+ {
+ e.insert(0U, 1U, '-');
+ }
+ else
+ {
+ e.insert(0U, 1U, '+');
+ }
+
+ str.append(e);
+ }
+
+ if(b_neg)
+ {
+ str.insert(0U, 1U, '-');
+ }
+ else if(showpos)
+ {
+ str.insert(0U, 1U, '+');
+ }
+ }
+
+ template<class float_type, class type_a> inline void eval_convert_to(type_a* pa, const float_type& cb) { *pa = static_cast<type_a>(cb); }
+ template<class float_type, class type_a> inline void eval_add (float_type& b, const type_a& a) { b += a; }
+ template<class float_type, class type_a> inline void eval_subtract (float_type& b, const type_a& a) { b -= a; }
+ template<class float_type, class type_a> inline void eval_multiply (float_type& b, const type_a& a) { b *= a; }
+ template<class float_type> inline void eval_multiply (float_type& b, const float_type& cb, const float_type& cb2) { b = (cb * cb2); }
+ template<class float_type, class type_a> inline void eval_divide (float_type& b, const type_a& a) { b /= a; }
+ template<class float_type> inline void eval_log10 (float_type& b, const float_type& cb) { b = std::log10(cb); }
+ template<class float_type> inline void eval_floor (float_type& b, const float_type& cb) { b = std::floor(cb); }
+
+ inline void round_string_up_at(std::string& s, int pos, int& expon)
+ {
+ // This subroutine rounds up a string representation of a
+ // number at the given position pos.
+
+ if(pos < 0)
+ {
+ s.insert(0U, 1U, '1');
+ s.erase(s.size() - 1U);
+ ++expon;
+ }
+ else if(s[pos] == '9')
+ {
+ s[pos] = '0';
+ round_string_up_at(s, pos - 1, expon);
+ }
+ else
+ {
+ if((pos == 0) && (s[pos] == '0') && (s.size() == 1))
+ {
+ ++expon;
+ }
+
+ ++s[pos];
+ }
+ }
+
+ template<class float_type>
+ std::string convert_to_string(float_type& x,
+ std::streamsize digits,
+ const std::ios_base::fmtflags f)
+ {
+ const bool isneg = (x < 0);
+ const bool iszero = ((!isneg) ? bool(+x < (std::numeric_limits<float_type>::min)())
+ : bool(-x < (std::numeric_limits<float_type>::min)()));
+ const bool isnan = (x != x);
+ const bool isinf = ((!isneg) ? bool(+x > (std::numeric_limits<float_type>::max)())
+ : bool(-x > (std::numeric_limits<float_type>::max)()));
+
+ int expon = 0;
+
+ if(digits <= 0) { digits = std::numeric_limits<float_type>::max_digits10; }
+
+ const int org_digits = static_cast<int>(digits);
+
+ std::string result;
+
+ if(iszero)
+ {
+ result = "0";
+ }
+ else if(isinf)
+ {
+ if(x < 0)
+ {
+ return "-inf";
+ }
+ else
+ {
+ return ((f & std::ios_base::showpos) == std::ios_base::showpos) ? "+inf" : "inf";
+ }
+ }
+ else if(isnan)
+ {
+ return "nan";
+ }
+ else
+ {
+ // Start by figuring out the base-10 exponent.
+ if(isneg) { x = -x; }
+
+ float_type t;
+ float_type ten = 10;
+
+ eval_log10(t, x);
+ eval_floor(t, t);
+ eval_convert_to(&expon, t);
+
+ if(-expon > std::numeric_limits<float_type>::max_exponent10 - 3)
+ {
+ int e = -expon / 2;
+
+ const float_type t2 = boost::math::cstdfloat::detail::pown(ten, e);
+
+ eval_multiply(t, t2, x);
+ eval_multiply(t, t2);
+
+ if((expon & 1) != 0)
+ {
+ eval_multiply(t, ten);
+ }
+ }
+ else
+ {
+ t = boost::math::cstdfloat::detail::pown(ten, -expon);
+ eval_multiply(t, x);
+ }
+
+ // Make sure that the value lies between [1, 10), and adjust if not.
+ if(t < 1)
+ {
+ eval_multiply(t, 10);
+
+ --expon;
+ }
+ else if(t >= 10)
+ {
+ eval_divide(t, 10);
+
+ ++expon;
+ }
+
+ float_type digit;
+ int cdigit;
+
+ // Adjust the number of digits required based on formatting options.
+ if(((f & std::ios_base::fixed) == std::ios_base::fixed) && (expon != -1))
+ {
+ digits += (expon + 1);
+ }
+
+ if((f & std::ios_base::scientific) == std::ios_base::scientific)
+ {
+ ++digits;
+ }
+
+ // Extract the base-10 digits one at a time.
+ for(int i = 0; i < digits; ++i)
+ {
+ eval_floor(digit, t);
+ eval_convert_to(&cdigit, digit);
+
+ result += static_cast<char>('0' + cdigit);
+
+ eval_subtract(t, digit);
+ eval_multiply(t, ten);
+ }
+
+ // Possibly round the result.
+ if(digits >= 0)
+ {
+ eval_floor(digit, t);
+ eval_convert_to(&cdigit, digit);
+ eval_subtract(t, digit);
+
+ if((cdigit == 5) && (t == 0))
+ {
+ // Use simple bankers rounding.
+
+ if((static_cast<int>(*result.rbegin() - '0') & 1) != 0)
+ {
+ round_string_up_at(result, static_cast<int>(result.size() - 1U), expon);
+ }
+ }
+ else if(cdigit >= 5)
+ {
+ round_string_up_at(result, static_cast<int>(result.size() - 1), expon);
+ }
+ }
+ }
+
+ while((result.size() > static_cast<std::string::size_type>(digits)) && result.size())
+ {
+ // We may get here as a result of rounding.
+
+ if(result.size() > 1U)
+ {
+ result.erase(result.size() - 1U);
+ }
+ else
+ {
+ if(expon > 0)
+ {
+ --expon; // so we put less padding in the result.
+ }
+ else
+ {
+ ++expon;
+ }
+
+ ++digits;
+ }
+ }
+
+ if(isneg)
+ {
+ result.insert(0U, 1U, '-');
+ }
+
+ format_float_string(result, expon, org_digits, f, iszero);
+
+ return result;
+ }
+
+ template <class float_type>
+ bool convert_from_string(float_type& value, const char* p)
+ {
+ value = 0;
+
+ if((p == static_cast<const char*>(0U)) || (*p == static_cast<char>(0)))
+ {
+ return;
+ }
+
+ bool is_neg = false;
+ bool is_neg_expon = false;
+
+ BOOST_CONSTEXPR_OR_CONST int ten = 10;
+
+ int expon = 0;
+ int digits_seen = 0;
+
+ BOOST_CONSTEXPR_OR_CONST int max_digits = std::numeric_limits<float_type>::max_digits10 + 1;
+
+ if(*p == static_cast<char>('+'))
+ {
+ ++p;
+ }
+ else if(*p == static_cast<char>('-'))
+ {
+ is_neg = true;
+ ++p;
+ }
+
+ const bool isnan = ((std::strcmp(p, "nan") == 0) || (std::strcmp(p, "NaN") == 0) || (std::strcmp(p, "NAN") == 0));
+
+ if(isnan)
+ {
+ eval_divide(value, 0);
+
+ if(is_neg)
+ {
+ value = -value;
+ }
+
+ return true;
+ }
+
+ const bool isinf = ((std::strcmp(p, "inf") == 0) || (std::strcmp(p, "Inf") == 0) || (std::strcmp(p, "INF") == 0));
+
+ if(isinf)
+ {
+ value = 1;
+ eval_divide(value, 0);
+
+ if(is_neg)
+ {
+ value = -value;
+ }
+
+ return true;
+ }
+
+ // Grab all the leading digits before the decimal point.
+ while(std::isdigit(*p))
+ {
+ eval_multiply(value, ten);
+ eval_add(value, static_cast<int>(*p - '0'));
+ ++p;
+ ++digits_seen;
+ }
+
+ if(*p == static_cast<char>('.'))
+ {
+ // Grab everything after the point, stop when we've seen
+ // enough digits, even if there are actually more available.
+
+ ++p;
+
+ while(std::isdigit(*p))
+ {
+ eval_multiply(value, ten);
+ eval_add(value, static_cast<int>(*p - '0'));
+ ++p;
+ --expon;
+
+ if(++digits_seen > max_digits)
+ {
+ break;
+ }
+ }
+
+ while(std::isdigit(*p))
+ {
+ ++p;
+ }
+ }
+
+ // Parse the exponent.
+ if((*p == static_cast<char>('e')) || (*p == static_cast<char>('E')))
+ {
+ ++p;
+
+ if(*p == static_cast<char>('+'))
+ {
+ ++p;
+ }
+ else if(*p == static_cast<char>('-'))
+ {
+ is_neg_expon = true;
+ ++p;
+ }
+
+ int e2 = 0;
+
+ while(std::isdigit(*p))
+ {
+ e2 *= 10;
+ e2 += (*p - '0');
+ ++p;
+ }
+
+ if(is_neg_expon)
+ {
+ e2 = -e2;
+ }
+
+ expon += e2;
+ }
+
+ if(expon)
+ {
+ // Scale by 10^expon. Note that 10^expon can be outside the range
+ // of our number type, even though the result is within range.
+ // If that looks likely, then split the calculation in two parts.
+ float_type t;
+ t = ten;
+
+ if(expon > (std::numeric_limits<float_type>::min_exponent10 + 2))
+ {
+ t = boost::math::cstdfloat::detail::pown(t, expon);
+ eval_multiply(value, t);
+ }
+ else
+ {
+ t = boost::math::cstdfloat::detail::pown(t, (expon + digits_seen + 1));
+ eval_multiply(value, t);
+ t = ten;
+ t = boost::math::cstdfloat::detail::pown(t, (-digits_seen - 1));
+ eval_multiply(value, t);
+ }
+ }
+
+ if(is_neg)
+ {
+ value = -value;
+ }
+
+ return (*p == static_cast<char>(0));
+ }
+ } } } } // boost::math::cstdfloat::detail
+
+ namespace std
+ {
+ template<typename char_type, class traits_type>
+ inline std::basic_ostream<char_type, traits_type>& operator<<(std::basic_ostream<char_type, traits_type>& os, const boost::math::cstdfloat::detail::float_internal128_t& x)
+ {
+ boost::math::cstdfloat::detail::float_internal128_t non_const_x = x;
+
+ const std::string str = boost::math::cstdfloat::detail::convert_to_string(non_const_x,
+ os.precision(),
+ os.flags());
+
+ std::basic_ostringstream<char_type, traits_type> ostr;
+ ostr.flags(os.flags());
+ ostr.imbue(os.getloc());
+ ostr.precision(os.precision());
+
+ static_cast<void>(ostr << str);
+
+ return (os << ostr.str());
+ }
+
+ template<typename char_type, class traits_type>
+ inline std::basic_istream<char_type, traits_type>& operator>>(std::basic_istream<char_type, traits_type>& is, boost::math::cstdfloat::detail::float_internal128_t& x)
+ {
+ std::string str;
+
+ static_cast<void>(is >> str);
+
+ const bool conversion_is_ok = boost::math::cstdfloat::detail::convert_from_string(x, str.c_str());
+
+ if(false == conversion_is_ok)
+ {
+ for(std::string::const_reverse_iterator it = str.rbegin(); it != str.rend(); ++it)
+ {
+ static_cast<void>(is.putback(*it));
+ }
+
+ is.setstate(ios_base::failbit);
+
+ BOOST_THROW_EXCEPTION(std::runtime_error("Unable to interpret input string as a boost::float128_t"));
+ }
+
+ return is;
+ }
+ }
+
+ #endif // Use __GNUC__ or BOOST_INTEL libquadmath
+
+ #endif // Not BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT (i.e., the user would like to have libquadmath support)
+
+#endif // _BOOST_CSTDFLOAT_IOSTREAM_2014_02_15_HPP_
diff --git a/3party/boost/boost/math/cstdfloat/cstdfloat_limits.hpp b/3party/boost/boost/math/cstdfloat/cstdfloat_limits.hpp
new file mode 100644
index 0000000000..c04062639a
--- /dev/null
+++ b/3party/boost/boost/math/cstdfloat/cstdfloat_limits.hpp
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2014.
+// Copyright John Maddock 2014.
+// Copyright Paul Bristow 2014.
+// 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)
+//
+
+// Implement quadruple-precision std::numeric_limits<> support.
+
+#ifndef _BOOST_CSTDFLOAT_LIMITS_2014_01_09_HPP_
+ #define _BOOST_CSTDFLOAT_LIMITS_2014_01_09_HPP_
+
+ #include <boost/math/cstdfloat/cstdfloat_types.hpp>
+
+ #if defined(BOOST_CSTDFLOAT_HAS_INTERNAL_FLOAT128_T) && defined(BOOST_MATH_USE_FLOAT128) && !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT)
+
+ #include <limits>
+
+ // Define the name of the global quadruple-precision function to be used for
+ // calculating quiet_NaN() in the specialization of std::numeric_limits<>.
+ #if defined(BOOST_INTEL)
+ #define BOOST_CSTDFLOAT_FLOAT128_SQRT __sqrtq
+ #elif defined(__GNUC__)
+ #define BOOST_CSTDFLOAT_FLOAT128_SQRT sqrtq
+ #endif
+
+ // Forward declaration of the quadruple-precision square root function.
+ extern "C" boost::math::cstdfloat::detail::float_internal128_t BOOST_CSTDFLOAT_FLOAT128_SQRT(boost::math::cstdfloat::detail::float_internal128_t) throw();
+
+ namespace std
+ {
+ template<>
+ class numeric_limits<boost::math::cstdfloat::detail::float_internal128_t>
+ {
+ public:
+ BOOST_STATIC_CONSTEXPR bool is_specialized = true;
+ static boost::math::cstdfloat::detail::float_internal128_t (min) () BOOST_NOEXCEPT { return BOOST_CSTDFLOAT_FLOAT128_MIN; }
+ static boost::math::cstdfloat::detail::float_internal128_t (max) () BOOST_NOEXCEPT { return BOOST_CSTDFLOAT_FLOAT128_MAX; }
+ static boost::math::cstdfloat::detail::float_internal128_t lowest() BOOST_NOEXCEPT { return -(max)(); }
+ BOOST_STATIC_CONSTEXPR int digits = 113;
+ BOOST_STATIC_CONSTEXPR int digits10 = 34;
+ BOOST_STATIC_CONSTEXPR int max_digits10 = 36;
+ BOOST_STATIC_CONSTEXPR bool is_signed = true;
+ BOOST_STATIC_CONSTEXPR bool is_integer = false;
+ BOOST_STATIC_CONSTEXPR bool is_exact = false;
+ BOOST_STATIC_CONSTEXPR int radix = 2;
+ static boost::math::cstdfloat::detail::float_internal128_t epsilon () { return BOOST_CSTDFLOAT_FLOAT128_EPS; }
+ static boost::math::cstdfloat::detail::float_internal128_t round_error() { return BOOST_FLOAT128_C(0.5); }
+ BOOST_STATIC_CONSTEXPR int min_exponent = -16381;
+ BOOST_STATIC_CONSTEXPR int min_exponent10 = static_cast<int>((min_exponent * 301L) / 1000L);
+ BOOST_STATIC_CONSTEXPR int max_exponent = +16384;
+ BOOST_STATIC_CONSTEXPR int max_exponent10 = static_cast<int>((max_exponent * 301L) / 1000L);
+ BOOST_STATIC_CONSTEXPR bool has_infinity = true;
+ BOOST_STATIC_CONSTEXPR bool has_quiet_NaN = true;
+ BOOST_STATIC_CONSTEXPR bool has_signaling_NaN = false;
+ BOOST_STATIC_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
+ BOOST_STATIC_CONSTEXPR bool has_denorm_loss = false;
+ static boost::math::cstdfloat::detail::float_internal128_t infinity () { return BOOST_FLOAT128_C(1.0) / BOOST_FLOAT128_C(0.0); }
+ static boost::math::cstdfloat::detail::float_internal128_t quiet_NaN () { return ::BOOST_CSTDFLOAT_FLOAT128_SQRT(BOOST_FLOAT128_C(-1.0)); }
+ static boost::math::cstdfloat::detail::float_internal128_t signaling_NaN() { return BOOST_FLOAT128_C(0.0); }
+ static boost::math::cstdfloat::detail::float_internal128_t denorm_min () { return BOOST_FLOAT128_C(0.0); }
+ BOOST_STATIC_CONSTEXPR bool is_iec559 = true;
+ BOOST_STATIC_CONSTEXPR bool is_bounded = false;
+ BOOST_STATIC_CONSTEXPR bool is_modulo = false;
+ BOOST_STATIC_CONSTEXPR bool traps = false;
+ BOOST_STATIC_CONSTEXPR bool tinyness_before = false;
+ BOOST_STATIC_CONSTEXPR float_round_style round_style = round_to_nearest;
+ };
+ } // namespace std
+
+ #endif // Not BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT (i.e., the user would like to have libquadmath support)
+
+#endif // _BOOST_CSTDFLOAT_LIMITS_2014_01_09_HPP_
diff --git a/3party/boost/boost/math/cstdfloat/cstdfloat_types.hpp b/3party/boost/boost/math/cstdfloat/cstdfloat_types.hpp
new file mode 100644
index 0000000000..6dae07faae
--- /dev/null
+++ b/3party/boost/boost/math/cstdfloat/cstdfloat_types.hpp
@@ -0,0 +1,427 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2014.
+// Copyright John Maddock 2014.
+// Copyright Paul Bristow 2014.
+// 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)
+//
+
+// Implement the types for floating-point typedefs having specified widths.
+
+#ifndef _BOOST_CSTDFLOAT_TYPES_2014_01_09_HPP_
+ #define _BOOST_CSTDFLOAT_TYPES_2014_01_09_HPP_
+
+ #include <float.h>
+ #include <limits>
+ #include <boost/static_assert.hpp>
+ #include <boost/math/tools/config.hpp>
+
+ // This is the beginning of the preamble.
+
+ // In this preamble, the preprocessor is used to query certain
+ // preprocessor definitions from <float.h>. Based on the results
+ // of these queries, an attempt is made to automatically detect
+ // the presence of built-in floating-point types having specified
+ // widths. These are *thought* to be conformant with IEEE-754,
+ // whereby an unequivocal test based on std::numeric_limits<>
+ // follows below.
+
+ // In addition, various macros that are used for initializing
+ // floating-point literal values having specified widths and
+ // some basic min/max values are defined.
+
+ // First, we will pre-load certain preprocessor definitions
+ // with a dummy value.
+
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 0
+
+ #define BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE 0
+ #define BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE 0
+ #define BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE 0
+ #define BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE 0
+ #define BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE 0
+
+ // Ensure that the compiler has a radix-2 floating-point representation.
+ #if (!defined(FLT_RADIX) || ((defined(FLT_RADIX) && (FLT_RADIX != 2))))
+ #error The compiler does not support any radix-2 floating-point types required for <boost/cstdfloat.hpp>.
+ #endif
+
+ // Check if built-in float is equivalent to float16_t, float32_t, float64_t, float80_t, or float128_t.
+ #if(defined(FLT_MANT_DIG) && defined(FLT_MAX_EXP))
+ #if ((FLT_MANT_DIG == 11) && (FLT_MAX_EXP == 16) && (BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT16_NATIVE_TYPE float
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 16
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE 1
+ #define BOOST_FLOAT16_C(x) (x ## F)
+ #define BOOST_CSTDFLOAT_FLOAT_16_MIN FLT_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_16_MAX FLT_MAX
+ #elif((FLT_MANT_DIG == 24) && (FLT_MAX_EXP == 128) && (BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT32_NATIVE_TYPE float
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 32
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE 1
+ #define BOOST_FLOAT32_C(x) (x ## F)
+ #define BOOST_CSTDFLOAT_FLOAT_32_MIN FLT_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_32_MAX FLT_MAX
+ #elif((FLT_MANT_DIG == 53) && (FLT_MAX_EXP == 1024) && (BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT64_NATIVE_TYPE float
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 64
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE 1
+ #define BOOST_FLOAT64_C(x) (x ## F)
+ #define BOOST_CSTDFLOAT_FLOAT_64_MIN FLT_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_64_MAX FLT_MAX
+ #elif((FLT_MANT_DIG == 64) && (FLT_MAX_EXP == 16384) && (BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT80_NATIVE_TYPE float
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 80
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE 1
+ #define BOOST_FLOAT80_C(x) (x ## F)
+ #define BOOST_CSTDFLOAT_FLOAT_80_MIN FLT_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_80_MAX FLT_MAX
+ #elif((FLT_MANT_DIG == 113) && (FLT_MAX_EXP == 16384) && (BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT128_NATIVE_TYPE float
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 128
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE 1
+ #define BOOST_FLOAT128_C(x) (x ## F)
+ #define BOOST_CSTDFLOAT_FLOAT_128_MIN FLT_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_128_MAX FLT_MAX
+ #endif
+ #endif
+
+ // Check if built-in double is equivalent to float16_t, float32_t, float64_t, float80_t, or float128_t.
+ #if(defined(DBL_MANT_DIG) && defined(DBL_MAX_EXP))
+ #if ((DBL_MANT_DIG == 11) && (DBL_MAX_EXP == 16) && (BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT16_NATIVE_TYPE double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 16
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE 1
+ #define BOOST_FLOAT16_C(x) (x)
+ #define BOOST_CSTDFLOAT_FLOAT_16_MIN DBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_16_MAX DBL_MAX
+ #elif((DBL_MANT_DIG == 24) && (DBL_MAX_EXP == 128) && (BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT32_NATIVE_TYPE double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 32
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE 1
+ #define BOOST_FLOAT32_C(x) (x)
+ #define BOOST_CSTDFLOAT_FLOAT_32_MIN DBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_32_MAX DBL_MAX
+ #elif((DBL_MANT_DIG == 53) && (DBL_MAX_EXP == 1024) && (BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT64_NATIVE_TYPE double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 64
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE 1
+ #define BOOST_FLOAT64_C(x) (x)
+ #define BOOST_CSTDFLOAT_FLOAT_64_MIN DBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_64_MAX DBL_MAX
+ #elif((DBL_MANT_DIG == 64) && (DBL_MAX_EXP == 16384) && (BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT80_NATIVE_TYPE double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 80
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE 1
+ #define BOOST_FLOAT80_C(x) (x)
+ #define BOOST_CSTDFLOAT_FLOAT_80_MIN DBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_80_MAX DBL_MAX
+ #elif((DBL_MANT_DIG == 113) && (DBL_MAX_EXP == 16384) && (BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT128_NATIVE_TYPE double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 128
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE 1
+ #define BOOST_FLOAT128_C(x) (x)
+ #define BOOST_CSTDFLOAT_FLOAT_128_MIN DBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_128_MAX DBL_MAX
+ #endif
+ #endif
+
+ // Check if built-in long double is equivalent to float16_t, float32_t, float64_t, float80_t, or float128_t.
+ #if(defined(LDBL_MANT_DIG) && defined(LDBL_MAX_EXP))
+ #if ((LDBL_MANT_DIG == 11) && (LDBL_MAX_EXP == 16) && (BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT16_NATIVE_TYPE long double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 16
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE 1
+ #define BOOST_FLOAT16_C(x) (x ## L)
+ #define BOOST_CSTDFLOAT_FLOAT_16_MIN LDBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_16_MAX LDBL_MAX
+ #elif((LDBL_MANT_DIG == 24) && (LDBL_MAX_EXP == 128) && (BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT32_NATIVE_TYPE long double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 32
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE 1
+ #define BOOST_FLOAT32_C(x) (x ## L)
+ #define BOOST_CSTDFLOAT_FLOAT_32_MIN LDBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_32_MAX LDBL_MAX
+ #elif((LDBL_MANT_DIG == 53) && (LDBL_MAX_EXP == 1024) && (BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT64_NATIVE_TYPE long double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 64
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE 1
+ #define BOOST_FLOAT64_C(x) (x ## L)
+ #define BOOST_CSTDFLOAT_FLOAT_64_MIN LDBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_64_MAX LDBL_MAX
+ #elif((LDBL_MANT_DIG == 64) && (LDBL_MAX_EXP == 16384) && (BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT80_NATIVE_TYPE long double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 80
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE 1
+ #define BOOST_FLOAT80_C(x) (x ## L)
+ #define BOOST_CSTDFLOAT_FLOAT_80_MIN LDBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_80_MAX LDBL_MAX
+ #elif((LDBL_MANT_DIG == 113) && (LDBL_MAX_EXP == 16384) && (BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE == 0))
+ #define BOOST_CSTDFLOAT_FLOAT128_NATIVE_TYPE long double
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 128
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE 1
+ #define BOOST_FLOAT128_C(x) (x ## L)
+ #define BOOST_CSTDFLOAT_FLOAT_128_MIN LDBL_MIN
+ #define BOOST_CSTDFLOAT_FLOAT_128_MAX LDBL_MAX
+ #endif
+ #endif
+
+ // Check if quadruple-precision is supported. Here, we are checking
+ // for the presence of __float128 from GCC's quadmath.h or _Quad
+ // from ICC's /Qlong-double flag). To query these, we use the
+ // BOOST_MATH_USE_FLOAT128 pre-processor definition from
+ // <boost/math/tools/config.hpp>.
+
+ #if (BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE == 0) && defined(BOOST_MATH_USE_FLOAT128) && !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT)
+
+ // Specify the underlying name of the internal 128-bit floating-point type definition.
+ namespace boost { namespace math { namespace cstdfloat { namespace detail {
+ #if defined(BOOST_INTEL)
+ typedef _Quad float_internal128_t;
+ #elif defined(__GNUC__)
+ typedef __float128 float_internal128_t;
+ #else
+ #error "Sorry, the compiler is neither GCC, nor Intel, I don't know how to configure <boost/cstdfloat.hpp>."
+ #endif
+ } } } } // boost::math::cstdfloat::detail
+
+ #define BOOST_CSTDFLOAT_FLOAT128_NATIVE_TYPE boost::math::cstdfloat::detail::float_internal128_t
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ #define BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH 128
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE
+ #define BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE 1
+ #define BOOST_FLOAT128_C(x) (x ## Q)
+ #define BOOST_CSTDFLOAT_FLOAT128_MIN 3.36210314311209350626267781732175260e-4932Q
+ #define BOOST_CSTDFLOAT_FLOAT128_MAX 1.18973149535723176508575932662800702e+4932Q
+ #define BOOST_CSTDFLOAT_FLOAT128_EPS 1.92592994438723585305597794258492732e-0034Q
+
+ #endif // Not BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT (i.e., the user would like to have libquadmath support)
+
+ // This is the end of the preamble, and also the end of the
+ // sections providing support for the C++ standard library
+ // for quadruple-precision.
+
+ // Now we use the results of the queries that have been obtained
+ // in the preamble (far above) for the final type definitions in
+ // the namespace boost.
+
+ // Make sure that the compiler has any floating-point type(s) whatsoever.
+ #if ( (BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE == 0) \
+ && (BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE == 0) \
+ && (BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE == 0) \
+ && (BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE == 0) \
+ && (BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE == 0))
+ #error The compiler does not support any of the floating-point types required for <boost/cstdfloat.hpp>.
+ #endif
+
+ // The following section contains the various min/max macros
+ // for the *leastN and *fastN types.
+
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE == 1)
+ #define BOOST_FLOAT_FAST16_MIN BOOST_CSTDFLOAT_FLOAT_16_MIN
+ #define BOOST_FLOAT_LEAST16_MIN BOOST_CSTDFLOAT_FLOAT_16_MIN
+ #define BOOST_FLOAT_FAST16_MAX BOOST_CSTDFLOAT_FLOAT_16_MAX
+ #define BOOST_FLOAT_LEAST16_MAX BOOST_CSTDFLOAT_FLOAT_16_MAX
+ #endif
+
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE == 1)
+ #define BOOST_FLOAT_FAST32_MIN BOOST_CSTDFLOAT_FLOAT_32_MIN
+ #define BOOST_FLOAT_LEAST32_MIN BOOST_CSTDFLOAT_FLOAT_32_MIN
+ #define BOOST_FLOAT_FAST32_MAX BOOST_CSTDFLOAT_FLOAT_32_MAX
+ #define BOOST_FLOAT_LEAST32_MAX BOOST_CSTDFLOAT_FLOAT_32_MAX
+ #endif
+
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE == 1)
+ #define BOOST_FLOAT_FAST64_MIN BOOST_CSTDFLOAT_FLOAT_64_MIN
+ #define BOOST_FLOAT_LEAST64_MIN BOOST_CSTDFLOAT_FLOAT_64_MIN
+ #define BOOST_FLOAT_FAST64_MAX BOOST_CSTDFLOAT_FLOAT_64_MAX
+ #define BOOST_FLOAT_LEAST64_MAX BOOST_CSTDFLOAT_FLOAT_64_MAX
+ #endif
+
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE == 1)
+ #define BOOST_FLOAT_FAST80_MIN BOOST_CSTDFLOAT_FLOAT_80_MIN
+ #define BOOST_FLOAT_LEAST80_MIN BOOST_CSTDFLOAT_FLOAT_80_MIN
+ #define BOOST_FLOAT_FAST80_MAX BOOST_CSTDFLOAT_FLOAT_80_MAX
+ #define BOOST_FLOAT_LEAST80_MAX BOOST_CSTDFLOAT_FLOAT_80_MAX
+ #endif
+
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE == 1)
+ #define BOOST_CSTDFLOAT_HAS_INTERNAL_FLOAT128_T
+
+ #define BOOST_FLOAT_FAST128_MIN BOOST_CSTDFLOAT_FLOAT_128_MIN
+ #define BOOST_FLOAT_LEAST128_MIN BOOST_CSTDFLOAT_FLOAT_128_MIN
+ #define BOOST_FLOAT_FAST128_MAX BOOST_CSTDFLOAT_FLOAT_128_MAX
+ #define BOOST_FLOAT_LEAST128_MAX BOOST_CSTDFLOAT_FLOAT_128_MAX
+ #endif
+
+ // The following section contains the various min/max macros
+ // for the *floatmax types.
+
+ #if (BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 16)
+ #define BOOST_FLOATMAX_C(x) BOOST_FLOAT16_C(x)
+ #define BOOST_FLOATMAX_MIN BOOST_CSTDFLOAT_FLOAT_16_MIN
+ #define BOOST_FLOATMAX_MAX BOOST_CSTDFLOAT_FLOAT_16_MAX
+ #elif(BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 32)
+ #define BOOST_FLOATMAX_C(x) BOOST_FLOAT32_C(x)
+ #define BOOST_FLOATMAX_MIN BOOST_CSTDFLOAT_FLOAT_32_MIN
+ #define BOOST_FLOATMAX_MAX BOOST_CSTDFLOAT_FLOAT_32_MAX
+ #elif(BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 64)
+ #define BOOST_FLOATMAX_C(x) BOOST_FLOAT64_C(x)
+ #define BOOST_FLOATMAX_MIN BOOST_CSTDFLOAT_FLOAT_64_MIN
+ #define BOOST_FLOATMAX_MAX BOOST_CSTDFLOAT_FLOAT_64_MAX
+ #elif(BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 80)
+ #define BOOST_FLOATMAX_C(x) BOOST_FLOAT80_C(x)
+ #define BOOST_FLOATMAX_MIN BOOST_CSTDFLOAT_FLOAT_80_MIN
+ #define BOOST_FLOATMAX_MAX BOOST_CSTDFLOAT_FLOAT_80_MAX
+ #elif(BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 128)
+ #define BOOST_FLOATMAX_C(x) BOOST_FLOAT128_C(x)
+ #define BOOST_FLOATMAX_MIN BOOST_CSTDFLOAT_FLOAT_128_MIN
+ #define BOOST_FLOATMAX_MAX BOOST_CSTDFLOAT_FLOAT_128_MAX
+ #else
+ #error The maximum available floating-point width for <boost/cstdfloat.hpp> is undefined.
+ #endif
+
+ // And finally..., we define the floating-point typedefs having
+ // specified widths. The types are defined in the namespace boost.
+
+ // For simplicity, the least and fast types are type defined identically
+ // as the corresponding fixed-width type. This behavior may, however,
+ // be modified when being optimized for a given compiler implementation.
+
+ // In addition, a clear assessment of IEEE-754 comformance is carried out
+ // using compile-time assertion.
+
+ namespace boost
+ {
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE == 1)
+ typedef BOOST_CSTDFLOAT_FLOAT16_NATIVE_TYPE float16_t;
+ typedef boost::float16_t float_fast16_t;
+ typedef boost::float16_t float_least16_t;
+
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float16_t>::is_iec559 == true, "boost::float16_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float16_t>::radix == 2, "boost::float16_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float16_t>::digits == 11, "boost::float16_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float16_t>::max_exponent == 16, "boost::float16_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+
+ #undef BOOST_CSTDFLOAT_FLOAT_16_MIN
+ #undef BOOST_CSTDFLOAT_FLOAT_16_MAX
+ #endif
+
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE == 1)
+ typedef BOOST_CSTDFLOAT_FLOAT32_NATIVE_TYPE float32_t;
+ typedef boost::float32_t float_fast32_t;
+ typedef boost::float32_t float_least32_t;
+
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::is_iec559 == true, "boost::float32_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::radix == 2, "boost::float32_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::digits == 24, "boost::float32_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::max_exponent == 128, "boost::float32_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+
+ #undef BOOST_CSTDFLOAT_FLOAT_32_MIN
+ #undef BOOST_CSTDFLOAT_FLOAT_32_MAX
+ #endif
+
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE == 1)
+ typedef BOOST_CSTDFLOAT_FLOAT64_NATIVE_TYPE float64_t;
+ typedef boost::float64_t float_fast64_t;
+ typedef boost::float64_t float_least64_t;
+
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::is_iec559 == true, "boost::float64_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::radix == 2, "boost::float64_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::digits == 53, "boost::float64_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::max_exponent == 1024, "boost::float64_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+
+ #undef BOOST_CSTDFLOAT_FLOAT_64_MIN
+ #undef BOOST_CSTDFLOAT_FLOAT_64_MAX
+ #endif
+
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE == 1)
+ typedef BOOST_CSTDFLOAT_FLOAT80_NATIVE_TYPE float80_t;
+ typedef boost::float80_t float_fast80_t;
+ typedef boost::float80_t float_least80_t;
+
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float80_t>::is_iec559 == true, "boost::float80_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float80_t>::radix == 2, "boost::float80_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float80_t>::digits == 64, "boost::float80_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float80_t>::max_exponent == 16384, "boost::float80_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+
+ #undef BOOST_CSTDFLOAT_FLOAT_80_MIN
+ #undef BOOST_CSTDFLOAT_FLOAT_80_MAX
+ #endif
+
+ #if(BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE == 1)
+ typedef BOOST_CSTDFLOAT_FLOAT128_NATIVE_TYPE float128_t;
+ typedef boost::float128_t float_fast128_t;
+ typedef boost::float128_t float_least128_t;
+
+ #if defined(BOOST_CSTDFLOAT_HAS_INTERNAL_FLOAT128_T) && defined(BOOST_MATH_USE_FLOAT128) && !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT)
+ // This configuration does not *yet* support std::numeric_limits<boost::float128_t>.
+ // Support for std::numeric_limits<boost::float128_t> is added in the detail
+ // file <boost/math/cstdfloat/cstdfloat_limits.hpp>.
+ #else
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float128_t>::is_iec559 == true, "boost::float128_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float128_t>::radix == 2, "boost::float128_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float128_t>::digits == 113, "boost::float128_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float128_t>::max_exponent == 16384, "boost::float128_t has been detected in <boost/cstdfloat>, but verification with std::numeric_limits fails");
+ #endif
+
+ #undef BOOST_CSTDFLOAT_FLOAT_128_MIN
+ #undef BOOST_CSTDFLOAT_FLOAT_128_MAX
+ #endif
+
+ #if (BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 16)
+ typedef boost::float16_t floatmax_t;
+ #elif(BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 32)
+ typedef boost::float32_t floatmax_t;
+ #elif(BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 64)
+ typedef boost::float64_t floatmax_t;
+ #elif(BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 80)
+ typedef boost::float80_t floatmax_t;
+ #elif(BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH == 128)
+ typedef boost::float128_t floatmax_t;
+ #else
+ #error The maximum available floating-point width for <boost/cstdfloat.hpp> is undefined.
+ #endif
+
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT16_NATIVE_TYPE
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT32_NATIVE_TYPE
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT64_NATIVE_TYPE
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT80_NATIVE_TYPE
+ #undef BOOST_CSTDFLOAT_HAS_FLOAT128_NATIVE_TYPE
+
+ #undef BOOST_CSTDFLOAT_MAXIMUM_AVAILABLE_WIDTH
+ }
+ // namespace boost
+
+#endif // _BOOST_CSTDFLOAT_BASE_TYPES_2014_01_09_HPP_
diff --git a/3party/boost/boost/math/distributions/beta.hpp b/3party/boost/boost/math/distributions/beta.hpp
index d525ace23a..5ecf902d99 100644
--- a/3party/boost/boost/math/distributions/beta.hpp
+++ b/3party/boost/boost/math/distributions/beta.hpp
@@ -156,7 +156,7 @@ namespace boost
typedef RealType value_type;
typedef Policy policy_type;
- beta_distribution(RealType alpha = 1, RealType beta = 1) : m_alpha(alpha), m_beta(beta)
+ beta_distribution(RealType l_alpha = 1, RealType l_beta = 1) : m_alpha(l_alpha), m_beta(l_beta)
{
RealType result;
beta_detail::check_dist(
diff --git a/3party/boost/boost/math/distributions/binomial.hpp b/3party/boost/boost/math/distributions/binomial.hpp
index 5ab3928949..a48c89c5b9 100644
--- a/3party/boost/boost/math/distributions/binomial.hpp
+++ b/3party/boost/boost/math/distributions/binomial.hpp
@@ -196,7 +196,7 @@ namespace boost
}
template <class RealType, class Policy>
- RealType quantile_imp(const binomial_distribution<RealType, Policy>& dist, const RealType& p, const RealType& q)
+ RealType quantile_imp(const binomial_distribution<RealType, Policy>& dist, const RealType& p, const RealType& q, bool comp)
{ // Quantile or Percent Point Binomial function.
// Return the number of expected successes k,
// for a given probability p.
@@ -264,8 +264,8 @@ namespace boost
boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
return detail::inverse_discrete_quantile(
dist,
- p,
- q,
+ comp ? q : p,
+ comp,
guess,
factor,
RealType(1),
@@ -653,13 +653,13 @@ namespace boost
template <class RealType, class Policy>
inline RealType quantile(const binomial_distribution<RealType, Policy>& dist, const RealType& p)
{
- return binomial_detail::quantile_imp(dist, p, RealType(1-p));
+ return binomial_detail::quantile_imp(dist, p, RealType(1-p), false);
} // quantile
template <class RealType, class Policy>
RealType quantile(const complemented2_type<binomial_distribution<RealType, Policy>, RealType>& c)
{
- return binomial_detail::quantile_imp(c.dist, RealType(1-c.param), c.param);
+ return binomial_detail::quantile_imp(c.dist, RealType(1-c.param), c.param, true);
} // quantile
template <class RealType, class Policy>
diff --git a/3party/boost/boost/math/distributions/cauchy.hpp b/3party/boost/boost/math/distributions/cauchy.hpp
index 0e8c1deeda..5a3a64f0f2 100644
--- a/3party/boost/boost/math/distributions/cauchy.hpp
+++ b/3party/boost/boost/math/distributions/cauchy.hpp
@@ -152,13 +152,13 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- cauchy_distribution(RealType location = 0, RealType scale = 1)
- : m_a(location), m_hg(scale)
+ cauchy_distribution(RealType l_location = 0, RealType l_scale = 1)
+ : m_a(l_location), m_hg(l_scale)
{
static const char* function = "boost::math::cauchy_distribution<%1%>::cauchy_distribution";
RealType result;
- detail::check_location(function, location, &result, Policy());
- detail::check_scale(function, scale, &result, Policy());
+ detail::check_location(function, l_location, &result, Policy());
+ detail::check_scale(function, l_scale, &result, Policy());
} // cauchy_distribution
RealType location()const
diff --git a/3party/boost/boost/math/distributions/chi_squared.hpp b/3party/boost/boost/math/distributions/chi_squared.hpp
index 51b80de529..071c7756f4 100644
--- a/3party/boost/boost/math/distributions/chi_squared.hpp
+++ b/3party/boost/boost/math/distributions/chi_squared.hpp
@@ -55,6 +55,11 @@ private:
typedef chi_squared_distribution<double> chi_squared;
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+
template <class RealType, class Policy>
inline const std::pair<RealType, RealType> range(const chi_squared_distribution<RealType, Policy>& /*dist*/)
{ // Range of permissible values for random variable x.
@@ -69,6 +74,10 @@ inline const std::pair<RealType, RealType> range(const chi_squared_distribution<
}
}
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
template <class RealType, class Policy>
inline const std::pair<RealType, RealType> support(const chi_squared_distribution<RealType, Policy>& /*dist*/)
{ // Range of supported values for random variable x.
diff --git a/3party/boost/boost/math/distributions/detail/common_error_handling.hpp b/3party/boost/boost/math/distributions/detail/common_error_handling.hpp
index 0a2ad888f6..71a771e5a1 100644
--- a/3party/boost/boost/math/distributions/detail/common_error_handling.hpp
+++ b/3party/boost/boost/math/distributions/detail/common_error_handling.hpp
@@ -98,6 +98,10 @@ inline bool check_x(
RealType* result,
const Policy& pol)
{
+ // Note that this test catches both infinity and NaN.
+ // Some distributions permit x to be infinite, so these must be tested 1st and return,
+ // leaving this test to catch any NaNs.
+ // See Normal, Logistic, Laplace and Cauchy for example.
if(!(boost::math::isfinite)(x))
{
*result = policies::raise_domain_error<RealType>(
@@ -106,9 +110,6 @@ inline bool check_x(
return false;
}
return true;
- // Note that this test catches both infinity and NaN.
- // Some special cases permit x to be infinite, so these must be tested 1st,
- // leaving this test to catch any NaNs. see Normal and cauchy for example.
} // bool check_x
template <class RealType, class Policy>
diff --git a/3party/boost/boost/math/distributions/detail/generic_mode.hpp b/3party/boost/boost/math/distributions/detail/generic_mode.hpp
index 085dc691cd..3857c9f2ec 100644
--- a/3party/boost/boost/math/distributions/detail/generic_mode.hpp
+++ b/3party/boost/boost/math/distributions/detail/generic_mode.hpp
@@ -47,7 +47,7 @@ typename Dist::value_type generic_find_mode(const Dist& dist, typename Dist::val
// Oops we don't know how to handle this, or even in which
// direction we should move in, treat as an evaluation error:
//
- policies::raise_evaluation_error(
+ return policies::raise_evaluation_error(
function,
"Could not locate a starting location for the search for the mode, original guess was %1%", guess, policy_type());
}
diff --git a/3party/boost/boost/math/distributions/detail/generic_quantile.hpp b/3party/boost/boost/math/distributions/detail/generic_quantile.hpp
index b36f31c8b9..afde2cacb7 100644
--- a/3party/boost/boost/math/distributions/detail/generic_quantile.hpp
+++ b/3party/boost/boost/math/distributions/detail/generic_quantile.hpp
@@ -78,7 +78,7 @@ typename Dist::value_type generic_quantile(const Dist& dist, const typename Dist
value_type result = ir.first + (ir.second - ir.first) / 2;
if(max_iter >= policies::get_max_root_iterations<forwarding_policy>())
{
- policies::raise_evaluation_error<value_type>(function, "Unable to locate solution in a reasonable time:"
+ return policies::raise_evaluation_error<value_type>(function, "Unable to locate solution in a reasonable time:"
" either there is no answer to quantile"
" or the answer is infinite. Current best guess is %1%", result, forwarding_policy());
}
diff --git a/3party/boost/boost/math/distributions/detail/hypergeometric_pdf.hpp b/3party/boost/boost/math/distributions/detail/hypergeometric_pdf.hpp
index 3012a914ef..1e6a5ca20d 100644
--- a/3party/boost/boost/math/distributions/detail/hypergeometric_pdf.hpp
+++ b/3party/boost/boost/math/distributions/detail/hypergeometric_pdf.hpp
@@ -61,15 +61,15 @@ T hypergeometric_pdf_lanczos_imp(T /*dummy*/, unsigned x, unsigned r, unsigned n
BOOST_MATH_INSTRUMENT_VARIABLE(typeid(Lanczos).name());
T bases[9] = {
- T(n) + Lanczos::g() + 0.5f,
- T(r) + Lanczos::g() + 0.5f,
- T(N - n) + Lanczos::g() + 0.5f,
- T(N - r) + Lanczos::g() + 0.5f,
- 1 / (T(N) + Lanczos::g() + 0.5f),
- 1 / (T(x) + Lanczos::g() + 0.5f),
- 1 / (T(n - x) + Lanczos::g() + 0.5f),
- 1 / (T(r - x) + Lanczos::g() + 0.5f),
- 1 / (T(N - n - r + x) + Lanczos::g() + 0.5f)
+ T(n) + static_cast<T>(Lanczos::g()) + 0.5f,
+ T(r) + static_cast<T>(Lanczos::g()) + 0.5f,
+ T(N - n) + static_cast<T>(Lanczos::g()) + 0.5f,
+ T(N - r) + static_cast<T>(Lanczos::g()) + 0.5f,
+ 1 / (T(N) + static_cast<T>(Lanczos::g()) + 0.5f),
+ 1 / (T(x) + static_cast<T>(Lanczos::g()) + 0.5f),
+ 1 / (T(n - x) + static_cast<T>(Lanczos::g()) + 0.5f),
+ 1 / (T(r - x) + static_cast<T>(Lanczos::g()) + 0.5f),
+ 1 / (T(N - n - r + x) + static_cast<T>(Lanczos::g()) + 0.5f)
};
T exponents[9] = {
n + T(0.5f),
diff --git a/3party/boost/boost/math/distributions/detail/inv_discrete_quantile.hpp b/3party/boost/boost/math/distributions/detail/inv_discrete_quantile.hpp
index 9397e7c7c2..44b0a29d15 100644
--- a/3party/boost/boost/math/distributions/detail/inv_discrete_quantile.hpp
+++ b/3party/boost/boost/math/distributions/detail/inv_discrete_quantile.hpp
@@ -19,8 +19,8 @@ struct distribution_quantile_finder
typedef typename Dist::value_type value_type;
typedef typename Dist::policy_type policy_type;
- distribution_quantile_finder(const Dist d, value_type p, value_type q)
- : dist(d), target(p < q ? p : q), comp(p < q ? false : true) {}
+ distribution_quantile_finder(const Dist d, value_type p, bool c)
+ : dist(d), target(p), comp(c) {}
value_type operator()(value_type const& x)
{
@@ -73,7 +73,7 @@ typename Dist::value_type
do_inverse_discrete_quantile(
const Dist& dist,
const typename Dist::value_type& p,
- const typename Dist::value_type& q,
+ bool comp,
typename Dist::value_type guess,
const typename Dist::value_type& multiplier,
typename Dist::value_type adder,
@@ -87,7 +87,7 @@ typename Dist::value_type
BOOST_MATH_STD_USING
- distribution_quantile_finder<Dist> f(dist, p, q);
+ distribution_quantile_finder<Dist> f(dist, p, comp);
//
// Max bounds of the distribution:
//
@@ -215,7 +215,7 @@ typename Dist::value_type
while(((boost::math::sign)(fb) == (boost::math::sign)(fa)) && (a != b))
{
if(count == 0)
- policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", b, policy_type());
+ return policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", b, policy_type());
a = b;
fa = fb;
b *= multiplier;
@@ -242,7 +242,7 @@ typename Dist::value_type
return 0;
}
if(count == 0)
- policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", a, policy_type());
+ return policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", a, policy_type());
b = a;
fb = fa;
a /= multiplier;
@@ -280,6 +280,80 @@ typename Dist::value_type
return (r.first + r.second) / 2;
}
//
+// Some special routine for rounding up and down:
+// We want to check and see if we are very close to an integer, and if so test to see if
+// that integer is an exact root of the cdf. We do this because our root finder only
+// guarantees to find *a root*, and there can sometimes be many consecutive floating
+// point values which are all roots. This is especially true if the target probability
+// is very close 1.
+//
+template <class Dist>
+inline typename Dist::value_type round_to_floor(const Dist& d, typename Dist::value_type result, typename Dist::value_type p, bool c)
+{
+ BOOST_MATH_STD_USING
+ typename Dist::value_type cc = ceil(result);
+ typename Dist::value_type pp = cc <= support(d).second ? c ? cdf(complement(d, cc)) : cdf(d, cc) : 1;
+ if(pp == p)
+ result = cc;
+ else
+ result = floor(result);
+ //
+ // Now find the smallest integer <= result for which we get an exact root:
+ //
+ while(result != 0)
+ {
+ cc = result - 1;
+ if(cc < support(d).first)
+ break;
+ typename Dist::value_type pp = c ? cdf(complement(d, cc)) : cdf(d, cc);
+ if(pp == p)
+ result = cc;
+ else if(c ? pp > p : pp < p)
+ break;
+ result -= 1;
+ }
+
+ return result;
+}
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+
+template <class Dist>
+inline typename Dist::value_type round_to_ceil(const Dist& d, typename Dist::value_type result, typename Dist::value_type p, bool c)
+{
+ BOOST_MATH_STD_USING
+ typename Dist::value_type cc = floor(result);
+ typename Dist::value_type pp = cc >= support(d).first ? c ? cdf(complement(d, cc)) : cdf(d, cc) : 0;
+ if(pp == p)
+ result = cc;
+ else
+ result = ceil(result);
+ //
+ // Now find the largest integer >= result for which we get an exact root:
+ //
+ while(true)
+ {
+ cc = result + 1;
+ if(cc > support(d).second)
+ break;
+ typename Dist::value_type pp = c ? cdf(complement(d, cc)) : cdf(d, cc);
+ if(pp == p)
+ result = cc;
+ else if(c ? pp < p : pp > p)
+ break;
+ result += 1;
+ }
+
+ return result;
+}
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+//
// Now finally are the public API functions.
// There is one overload for each policy,
// each one is responsible for selecting the correct
@@ -290,20 +364,26 @@ template <class Dist>
inline typename Dist::value_type
inverse_discrete_quantile(
const Dist& dist,
- const typename Dist::value_type& p,
- const typename Dist::value_type& q,
+ typename Dist::value_type p,
+ bool c,
const typename Dist::value_type& guess,
const typename Dist::value_type& multiplier,
const typename Dist::value_type& adder,
const policies::discrete_quantile<policies::real>&,
boost::uintmax_t& max_iter)
{
- if(p <= pdf(dist, 0))
+ if(p > 0.5)
+ {
+ p = 1 - p;
+ c = !c;
+ }
+ typename Dist::value_type pp = c ? 1 - p : p;
+ if(pp <= pdf(dist, 0))
return 0;
return do_inverse_discrete_quantile(
dist,
p,
- q,
+ c,
guess,
multiplier,
adder,
@@ -316,7 +396,7 @@ inline typename Dist::value_type
inverse_discrete_quantile(
const Dist& dist,
const typename Dist::value_type& p,
- const typename Dist::value_type& q,
+ bool c,
const typename Dist::value_type& guess,
const typename Dist::value_type& multiplier,
const typename Dist::value_type& adder,
@@ -325,32 +405,33 @@ inline typename Dist::value_type
{
typedef typename Dist::value_type value_type;
BOOST_MATH_STD_USING
- if(p <= pdf(dist, 0))
+ typename Dist::value_type pp = c ? 1 - p : p;
+ if(pp <= pdf(dist, 0))
return 0;
//
// What happens next depends on whether we're looking for an
// upper or lower quantile:
//
- if(p < 0.5f)
- return floor(do_inverse_discrete_quantile(
+ if(pp < 0.5f)
+ return round_to_floor(dist, do_inverse_discrete_quantile(
dist,
p,
- q,
+ c,
(guess < 1 ? value_type(1) : (value_type)floor(guess)),
multiplier,
adder,
tools::equal_floor(),
- max_iter));
+ max_iter), p, c);
// else:
- return ceil(do_inverse_discrete_quantile(
+ return round_to_ceil(dist, do_inverse_discrete_quantile(
dist,
p,
- q,
+ c,
(value_type)ceil(guess),
multiplier,
adder,
tools::equal_ceil(),
- max_iter));
+ max_iter), p, c);
}
template <class Dist>
@@ -358,7 +439,7 @@ inline typename Dist::value_type
inverse_discrete_quantile(
const Dist& dist,
const typename Dist::value_type& p,
- const typename Dist::value_type& q,
+ bool c,
const typename Dist::value_type& guess,
const typename Dist::value_type& multiplier,
const typename Dist::value_type& adder,
@@ -367,32 +448,33 @@ inline typename Dist::value_type
{
typedef typename Dist::value_type value_type;
BOOST_MATH_STD_USING
- if(p <= pdf(dist, 0))
+ typename Dist::value_type pp = c ? 1 - p : p;
+ if(pp <= pdf(dist, 0))
return 0;
//
// What happens next depends on whether we're looking for an
// upper or lower quantile:
//
- if(p < 0.5f)
- return ceil(do_inverse_discrete_quantile(
+ if(pp < 0.5f)
+ return round_to_ceil(dist, do_inverse_discrete_quantile(
dist,
p,
- q,
+ c,
ceil(guess),
multiplier,
adder,
tools::equal_ceil(),
- max_iter));
+ max_iter), p, c);
// else:
- return floor(do_inverse_discrete_quantile(
+ return round_to_floor(dist, do_inverse_discrete_quantile(
dist,
p,
- q,
+ c,
(guess < 1 ? value_type(1) : floor(guess)),
multiplier,
adder,
tools::equal_floor(),
- max_iter));
+ max_iter), p, c);
}
template <class Dist>
@@ -400,7 +482,7 @@ inline typename Dist::value_type
inverse_discrete_quantile(
const Dist& dist,
const typename Dist::value_type& p,
- const typename Dist::value_type& q,
+ bool c,
const typename Dist::value_type& guess,
const typename Dist::value_type& multiplier,
const typename Dist::value_type& adder,
@@ -409,17 +491,18 @@ inline typename Dist::value_type
{
typedef typename Dist::value_type value_type;
BOOST_MATH_STD_USING
- if(p <= pdf(dist, 0))
+ typename Dist::value_type pp = c ? 1 - p : p;
+ if(pp <= pdf(dist, 0))
return 0;
- return floor(do_inverse_discrete_quantile(
+ return round_to_floor(dist, do_inverse_discrete_quantile(
dist,
p,
- q,
+ c,
(guess < 1 ? value_type(1) : floor(guess)),
multiplier,
adder,
tools::equal_floor(),
- max_iter));
+ max_iter), p, c);
}
template <class Dist>
@@ -427,7 +510,7 @@ inline typename Dist::value_type
inverse_discrete_quantile(
const Dist& dist,
const typename Dist::value_type& p,
- const typename Dist::value_type& q,
+ bool c,
const typename Dist::value_type& guess,
const typename Dist::value_type& multiplier,
const typename Dist::value_type& adder,
@@ -435,17 +518,18 @@ inline typename Dist::value_type
boost::uintmax_t& max_iter)
{
BOOST_MATH_STD_USING
- if(p <= pdf(dist, 0))
+ typename Dist::value_type pp = c ? 1 - p : p;
+ if(pp <= pdf(dist, 0))
return 0;
- return ceil(do_inverse_discrete_quantile(
+ return round_to_ceil(dist, do_inverse_discrete_quantile(
dist,
p,
- q,
+ c,
ceil(guess),
multiplier,
adder,
tools::equal_ceil(),
- max_iter));
+ max_iter), p, c);
}
template <class Dist>
@@ -453,7 +537,7 @@ inline typename Dist::value_type
inverse_discrete_quantile(
const Dist& dist,
const typename Dist::value_type& p,
- const typename Dist::value_type& q,
+ bool c,
const typename Dist::value_type& guess,
const typename Dist::value_type& multiplier,
const typename Dist::value_type& adder,
@@ -462,26 +546,26 @@ inline typename Dist::value_type
{
typedef typename Dist::value_type value_type;
BOOST_MATH_STD_USING
- if(p <= pdf(dist, 0))
+ typename Dist::value_type pp = c ? 1 - p : p;
+ if(pp <= pdf(dist, 0))
return 0;
//
// Note that we adjust the guess to the nearest half-integer:
// this increase the chances that we will bracket the root
// with two results that both round to the same integer quickly.
//
- return floor(do_inverse_discrete_quantile(
+ return round_to_floor(dist, do_inverse_discrete_quantile(
dist,
p,
- q,
+ c,
(guess < 0.5f ? value_type(1.5f) : floor(guess + 0.5f) + 0.5f),
multiplier,
adder,
tools::equal_nearest_integer(),
- max_iter) + 0.5f);
+ max_iter) + 0.5f, p, c);
}
}}} // namespaces
#endif // BOOST_MATH_DISTRIBUTIONS_DETAIL_INV_DISCRETE_QUANTILE
-
diff --git a/3party/boost/boost/math/distributions/exponential.hpp b/3party/boost/boost/math/distributions/exponential.hpp
index 47e419847f..bfe7e6b4ac 100644
--- a/3party/boost/boost/math/distributions/exponential.hpp
+++ b/3party/boost/boost/math/distributions/exponential.hpp
@@ -63,11 +63,11 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- exponential_distribution(RealType lambda = 1)
- : m_lambda(lambda)
+ exponential_distribution(RealType l_lambda = 1)
+ : m_lambda(l_lambda)
{
RealType err;
- detail::verify_lambda("boost::math::exponential_distribution<%1%>::exponential_distribution", lambda, &err, Policy());
+ detail::verify_lambda("boost::math::exponential_distribution<%1%>::exponential_distribution", l_lambda, &err, Policy());
} // exponential_distribution
RealType lambda()const { return m_lambda; }
@@ -115,6 +115,9 @@ inline RealType pdf(const exponential_distribution<RealType, Policy>& dist, cons
return result;
if(0 == detail::verify_exp_x(function, x, &result, Policy()))
return result;
+ // Workaround for VC11/12 bug:
+ if ((boost::math::isinf)(x))
+ return 0;
result = lambda * exp(-lambda * x);
return result;
} // pdf
@@ -173,6 +176,9 @@ inline RealType cdf(const complemented2_type<exponential_distribution<RealType,
return result;
if(0 == detail::verify_exp_x(function, c.param, &result, Policy()))
return result;
+ // Workaround for VC11/12 bug:
+ if (c.param >= tools::max_value<RealType>())
+ return 0;
result = exp(-c.param * lambda);
return result;
diff --git a/3party/boost/boost/math/distributions/gamma.hpp b/3party/boost/boost/math/distributions/gamma.hpp
index c15973bac0..9a9e2a4f52 100644
--- a/3party/boost/boost/math/distributions/gamma.hpp
+++ b/3party/boost/boost/math/distributions/gamma.hpp
@@ -73,11 +73,11 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- gamma_distribution(RealType shape, RealType scale = 1)
- : m_shape(shape), m_scale(scale)
+ gamma_distribution(RealType l_shape, RealType l_scale = 1)
+ : m_shape(l_shape), m_scale(l_scale)
{
RealType result;
- detail::check_gamma("boost::math::gamma_distribution<%1%>::gamma_distribution", scale, shape, &result, Policy());
+ detail::check_gamma("boost::math::gamma_distribution<%1%>::gamma_distribution", l_scale, l_shape, &result, Policy());
}
RealType shape()const
diff --git a/3party/boost/boost/math/distributions/geometric.hpp b/3party/boost/boost/math/distributions/geometric.hpp
index 51e55e69fa..88947d6c57 100644
--- a/3party/boost/boost/math/distributions/geometric.hpp
+++ b/3party/boost/boost/math/distributions/geometric.hpp
@@ -372,8 +372,8 @@ namespace boost
//RealType q = 1 - p; // Bad for small p
//RealType probability = 1 - std::pow(q, k+1);
- RealType z = boost::math::log1p(-p) * (k+1);
- RealType probability = -boost::math::expm1(z);
+ RealType z = boost::math::log1p(-p, Policy()) * (k + 1);
+ RealType probability = -boost::math::expm1(z, Policy());
return probability;
} // cdf Cumulative Distribution Function geometric.
@@ -398,7 +398,7 @@ namespace boost
{
return result;
}
- RealType z = boost::math::log1p(-p) * (k+1);
+ RealType z = boost::math::log1p(-p, Policy()) * (k+1);
RealType probability = exp(z);
return probability;
} // cdf Complemented Cumulative Distribution Function geometric.
@@ -448,7 +448,7 @@ namespace boost
}
// log(1-x) /log(1-success_fraction) -1; but use log1p in case success_fraction is small
- result = boost::math::log1p(-x) / boost::math::log1p(-success_fraction) -1;
+ result = boost::math::log1p(-x, Policy()) / boost::math::log1p(-success_fraction, Policy()) - 1;
// Subtract a few epsilons here too?
// to make sure it doesn't slip over, so ceil would be one too many.
return result;
@@ -496,7 +496,7 @@ namespace boost
// unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
}
// log(x) /log(1-success_fraction) -1; but use log1p in case success_fraction is small
- result = log(x) / boost::math::log1p(-success_fraction) -1;
+ result = log(x) / boost::math::log1p(-success_fraction, Policy()) - 1;
return result;
} // quantile complement
diff --git a/3party/boost/boost/math/distributions/hypergeometric.hpp b/3party/boost/boost/math/distributions/hypergeometric.hpp
index e30d438f31..5d1ebc7388 100644
--- a/3party/boost/boost/math/distributions/hypergeometric.hpp
+++ b/3party/boost/boost/math/distributions/hypergeometric.hpp
@@ -136,7 +136,7 @@ namespace boost { namespace math {
BOOST_MATH_STD_USING
static const char* function = "boost::math::pdf(const hypergeometric_distribution<%1%>&, const %1%&)";
RealType r = static_cast<RealType>(x);
- unsigned u = itrunc(r);
+ unsigned u = itrunc(r, typename policies::normalise<Policy, policies::rounding_error<policies::ignore_error> >::type());
if(u != r)
{
return boost::math::policies::raise_domain_error<RealType>(
@@ -165,7 +165,7 @@ namespace boost { namespace math {
BOOST_MATH_STD_USING
static const char* function = "boost::math::cdf(const hypergeometric_distribution<%1%>&, const %1%&)";
RealType r = static_cast<RealType>(x);
- unsigned u = itrunc(r);
+ unsigned u = itrunc(r, typename policies::normalise<Policy, policies::rounding_error<policies::ignore_error> >::type());
if(u != r)
{
return boost::math::policies::raise_domain_error<RealType>(
@@ -194,7 +194,7 @@ namespace boost { namespace math {
BOOST_MATH_STD_USING
static const char* function = "boost::math::cdf(const hypergeometric_distribution<%1%>&, const %1%&)";
RealType r = static_cast<RealType>(c.param);
- unsigned u = itrunc(r);
+ unsigned u = itrunc(r, typename policies::normalise<Policy, policies::rounding_error<policies::ignore_error> >::type());
if(u != r)
{
return boost::math::policies::raise_domain_error<RealType>(
diff --git a/3party/boost/boost/math/distributions/inverse_chi_squared.hpp b/3party/boost/boost/math/distributions/inverse_chi_squared.hpp
index 8fc13e39e7..c1e54905da 100644
--- a/3party/boost/boost/math/distributions/inverse_chi_squared.hpp
+++ b/3party/boost/boost/math/distributions/inverse_chi_squared.hpp
@@ -51,7 +51,7 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- inverse_chi_squared_distribution(RealType df, RealType scale) : m_df(df), m_scale (scale)
+ inverse_chi_squared_distribution(RealType df, RealType l_scale) : m_df(df), m_scale (l_scale)
{
RealType result;
detail::check_df(
diff --git a/3party/boost/boost/math/distributions/inverse_gamma.hpp b/3party/boost/boost/math/distributions/inverse_gamma.hpp
index 2e0be947d6..fa5d357ac7 100644
--- a/3party/boost/boost/math/distributions/inverse_gamma.hpp
+++ b/3party/boost/boost/math/distributions/inverse_gamma.hpp
@@ -91,13 +91,13 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- inverse_gamma_distribution(RealType shape = 1, RealType scale = 1)
- : m_shape(shape), m_scale(scale)
+ inverse_gamma_distribution(RealType l_shape = 1, RealType l_scale = 1)
+ : m_shape(l_shape), m_scale(l_scale)
{
RealType result;
detail::check_inverse_gamma(
"boost::math::inverse_gamma_distribution<%1%>::inverse_gamma_distribution",
- scale, shape, &result, Policy());
+ l_scale, l_shape, &result, Policy());
}
RealType shape()const
diff --git a/3party/boost/boost/math/distributions/inverse_gaussian.hpp b/3party/boost/boost/math/distributions/inverse_gaussian.hpp
index ba85077312..eeca12ad48 100644
--- a/3party/boost/boost/math/distributions/inverse_gaussian.hpp
+++ b/3party/boost/boost/math/distributions/inverse_gaussian.hpp
@@ -74,14 +74,14 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- inverse_gaussian_distribution(RealType mean = 1, RealType scale = 1)
- : m_mean(mean), m_scale(scale)
+ inverse_gaussian_distribution(RealType l_mean = 1, RealType l_scale = 1)
+ : m_mean(l_mean), m_scale(l_scale)
{ // Default is a 1,1 inverse_gaussian distribution.
static const char* function = "boost::math::inverse_gaussian_distribution<%1%>::inverse_gaussian_distribution";
RealType result;
- detail::check_scale(function, scale, &result, Policy());
- detail::check_location(function, mean, &result, Policy());
+ detail::check_scale(function, l_scale, &result, Policy());
+ detail::check_location(function, l_mean, &result, Policy());
}
RealType mean()const
@@ -286,7 +286,7 @@ namespace detail
// Define the distribution, using gamma_nooverflow:
typedef gamma_distribution<RealType, no_overthrow_policy> gamma_nooverflow;
- gamma_distribution<RealType, no_overthrow_policy> g(static_cast<RealType>(0.5), static_cast<RealType>(1.));
+ gamma_nooverflow g(static_cast<RealType>(0.5), static_cast<RealType>(1.));
// gamma_nooverflow g(static_cast<RealType>(0.5), static_cast<RealType>(1.));
// R qgamma(0.2, 0.5, 1) 0.0320923
diff --git a/3party/boost/boost/math/distributions/laplace.hpp b/3party/boost/boost/math/distributions/laplace.hpp
index a872b16839..09b24c868b 100644
--- a/3party/boost/boost/math/distributions/laplace.hpp
+++ b/3party/boost/boost/math/distributions/laplace.hpp
@@ -1,6 +1,6 @@
// Copyright Thijs van den Berg, 2008.
// Copyright John Maddock 2008.
-// Copyright Paul A. Bristow 2008.
+// Copyright Paul A. Bristow 2008, 2014.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
@@ -24,6 +24,11 @@
namespace boost{ namespace math{
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4127) // conditional expression is constant
+#endif
+
template <class RealType = double, class Policy = policies::policy<> >
class laplace_distribution
{
@@ -37,8 +42,8 @@ public:
// ----------------------------------
// Constructor(s)
// ----------------------------------
- laplace_distribution(RealType location = 0, RealType scale = 1)
- : m_location(location), m_scale(scale)
+ laplace_distribution(RealType l_location = 0, RealType l_scale = 1)
+ : m_location(l_location), m_scale(l_scale)
{
RealType result;
check_parameters("boost::math::laplace_distribution<%1%>::laplace_distribution()", &result);
@@ -72,23 +77,38 @@ private:
}; // class laplace_distribution
//
-// Convenient type synonym for double
+// Convenient type synonym for double.
typedef laplace_distribution<double> laplace;
//
-// Non member functions
+// Non-member functions.
template <class RealType, class Policy>
inline const std::pair<RealType, RealType> range(const laplace_distribution<RealType, Policy>&)
{
- using boost::math::tools::max_value;
- return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
+ if (std::numeric_limits<RealType>::has_infinity)
+ { // Can use infinity.
+ return std::pair<RealType, RealType>(-std::numeric_limits<RealType>::infinity(), std::numeric_limits<RealType>::infinity()); // - to + infinity.
+ }
+ else
+ { // Can only use max_value.
+ using boost::math::tools::max_value;
+ return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + max value.
+ }
+
}
template <class RealType, class Policy>
inline const std::pair<RealType, RealType> support(const laplace_distribution<RealType, Policy>&)
{
- using boost::math::tools::max_value;
- return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
+ if (std::numeric_limits<RealType>::has_infinity)
+ { // Can Use infinity.
+ return std::pair<RealType, RealType>(-std::numeric_limits<RealType>::infinity(), std::numeric_limits<RealType>::infinity()); // - to + infinity.
+ }
+ else
+ { // Can only use max_value.
+ using boost::math::tools::max_value;
+ return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + max value.
+ }
}
template <class RealType, class Policy>
@@ -99,12 +119,15 @@ inline RealType pdf(const laplace_distribution<RealType, Policy>& dist, const Re
// Checking function argument
RealType result = 0;
const char* function = "boost::math::pdf(const laplace_distribution<%1%>&, %1%))";
- if (false == dist.check_parameters(function, &result)) return result;
- if (false == detail::check_x(function, x, &result, Policy())) return result;
- // Special pdf values
+ // Check scale and location.
+ if (false == dist.check_parameters(function, &result)) return result;
+ // Special pdf values.
if((boost::math::isinf)(x))
+ {
return 0; // pdf + and - infinity is zero.
+ }
+ if (false == detail::check_x(function, x, &result, Policy())) return result;
// General case
RealType scale( dist.scale() );
@@ -123,20 +146,21 @@ inline RealType pdf(const laplace_distribution<RealType, Policy>& dist, const Re
template <class RealType, class Policy>
inline RealType cdf(const laplace_distribution<RealType, Policy>& dist, const RealType& x)
{
- BOOST_MATH_STD_USING // for ADL of std functions
+ BOOST_MATH_STD_USING // For ADL of std functions.
- // Checking function argument
RealType result = 0;
+ // Checking function argument.
const char* function = "boost::math::cdf(const laplace_distribution<%1%>&, %1%)";
+ // Check scale and location.
if (false == dist.check_parameters(function, &result)) return result;
- if (false == detail::check_x(function, x, &result, Policy())) return result;
// Special cdf values:
if((boost::math::isinf)(x))
{
- if(x < 0) return 0; // -infinity
- return 1; // + infinity
+ if(x < 0) return 0; // -infinity.
+ return 1; // + infinity.
}
+ if (false == detail::check_x(function, x, &result, Policy())) return result;
// General cdf values
RealType scale( dist.scale() );
@@ -195,25 +219,29 @@ inline RealType quantile(const laplace_distribution<RealType, Policy>& dist, con
template <class RealType, class Policy>
inline RealType cdf(const complemented2_type<laplace_distribution<RealType, Policy>, RealType>& c)
{
+ // Calculate complement of cdf.
BOOST_MATH_STD_USING // for ADL of std functions
RealType scale = c.dist.scale();
RealType location = c.dist.location();
RealType x = c.param;
-
- // Checking function argument
RealType result = 0;
+
+ // Checking function argument.
const char* function = "boost::math::cdf(const complemented2_type<laplace_distribution<%1%>, %1%>&)";
- if(false == detail::check_x(function, x, &result, Policy()))return result;
- // Calculate complement of cdf.
+ // Check scale and location.
+ //if(false == detail::check_scale(function, scale, result, Policy())) return false;
+ //if(false == detail::check_location(function, location, result, Policy())) return false;
+ if (false == c.dist.check_parameters(function, &result)) return result;
- // Special cdf value
+ // Special cdf values.
if((boost::math::isinf)(x))
{
if(x < 0) return 1; // cdf complement -infinity is unity.
return 0; // cdf complement +infinity is zero.
}
+ if(false == detail::check_x(function, x, &result, Policy()))return result;
// Cdf interval value.
if (-x < -location)
@@ -237,17 +265,23 @@ inline RealType quantile(const complemented2_type<laplace_distribution<RealType,
RealType scale = c.dist.scale();
RealType location = c.dist.location();
RealType q = c.param;
+ RealType result = 0;
// Checking function argument.
- RealType result = 0;
const char* function = "quantile(const complemented2_type<laplace_distribution<%1%>, %1%>&)";
+ if (false == c.dist.check_parameters(function, &result)) return result;
+
+ // Extreme values.
+ if(q == 0)
+ {
+ return std::numeric_limits<RealType>::infinity();
+ }
+ if(q == 1)
+ {
+ return -std::numeric_limits<RealType>::infinity();
+ }
if(false == detail::check_probability(function, q, &result, Policy())) return result;
-
- // extreme values
- if(q == 0) return std::numeric_limits<RealType>::infinity();
- if(q == 1) return -std::numeric_limits<RealType>::infinity();
-
if (0.5 - q < 0.0)
result = location + scale*log( static_cast<RealType>(-q*2 + 2) );
else
@@ -299,6 +333,10 @@ inline RealType kurtosis_excess(const laplace_distribution<RealType, Policy>& /*
return 3;
}
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
} // namespace math
} // namespace boost
diff --git a/3party/boost/boost/math/distributions/logistic.hpp b/3party/boost/boost/math/distributions/logistic.hpp
index f372faf6e9..b3d16b7197 100644
--- a/3party/boost/boost/math/distributions/logistic.hpp
+++ b/3party/boost/boost/math/distributions/logistic.hpp
@@ -24,14 +24,14 @@ namespace boost { namespace math {
typedef RealType value_type;
typedef Policy policy_type;
- logistic_distribution(RealType location=0, RealType scale=1) // Constructor.
- : m_location(location), m_scale(scale)
+ logistic_distribution(RealType l_location=0, RealType l_scale=1) // Constructor.
+ : m_location(l_location), m_scale(l_scale)
{
static const char* function = "boost::math::logistic_distribution<%1%>::logistic_distribution";
RealType result;
- detail::check_scale(function, scale, &result, Policy());
- detail::check_location(function, location, &result, Policy());
+ detail::check_scale(function, l_scale, &result, Policy());
+ detail::check_location(function, l_location, &result, Policy());
}
// Accessor functions.
RealType scale()const
@@ -68,21 +68,15 @@ namespace boost { namespace math {
using boost::math::tools::max_value;
return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + infinity
}
-
-
+
template <class RealType, class Policy>
inline RealType pdf(const logistic_distribution<RealType, Policy>& dist, const RealType& x)
{
+ static const char* function = "boost::math::pdf(const logistic_distribution<%1%>&, %1%)";
RealType scale = dist.scale();
RealType location = dist.location();
-
- static const char* function = "boost::math::pdf(const logistic_distribution<%1%>&, %1%)";
- if((boost::math::isinf)(x))
- {
- return 0; // pdf + and - infinity is zero.
- }
-
RealType result = 0;
+
if(false == detail::check_scale(function, scale , &result, Policy()))
{
return result;
@@ -91,6 +85,12 @@ namespace boost { namespace math {
{
return result;
}
+
+ if((boost::math::isinf)(x))
+ {
+ return 0; // pdf + and - infinity is zero.
+ }
+
if(false == detail::check_x(function, x, &result, Policy()))
{
return result;
@@ -186,18 +186,24 @@ namespace boost { namespace math {
RealType x = c.param;
static const char* function = "boost::math::cdf(const complement(logistic_distribution<%1%>&), %1%)";
- if((boost::math::isinf)(x))
- {
- if(x < 0) return 1; // cdf complement -infinity is unity.
- return 0; // cdf complement +infinity is zero
- }
RealType result = 0;
if(false == detail::check_scale(function, scale, &result, Policy()))
+ {
return result;
+ }
if(false == detail::check_location(function, location, &result, Policy()))
+ {
return result;
+ }
+ if((boost::math::isinf)(x))
+ {
+ if(x < 0) return 1; // cdf complement -infinity is unity.
+ return 0; // cdf complement +infinity is zero.
+ }
if(false == detail::check_x(function, x, &result, Policy()))
+ {
return result;
+ }
RealType power = (x - location) / scale;
if(power > tools::log_max_value<RealType>())
return 0;
diff --git a/3party/boost/boost/math/distributions/lognormal.hpp b/3party/boost/boost/math/distributions/lognormal.hpp
index 55e80962a0..4e6c0610d4 100644
--- a/3party/boost/boost/math/distributions/lognormal.hpp
+++ b/3party/boost/boost/math/distributions/lognormal.hpp
@@ -48,12 +48,12 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- lognormal_distribution(RealType location = 0, RealType scale = 1)
- : m_location(location), m_scale(scale)
+ lognormal_distribution(RealType l_location = 0, RealType l_scale = 1)
+ : m_location(l_location), m_scale(l_scale)
{
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());
+ detail::check_scale("boost::math::lognormal_distribution<%1%>::lognormal_distribution", l_scale, &result, Policy());
+ detail::check_location("boost::math::lognormal_distribution<%1%>::lognormal_distribution", l_location, &result, Policy());
}
RealType location()const
diff --git a/3party/boost/boost/math/distributions/negative_binomial.hpp b/3party/boost/boost/math/distributions/negative_binomial.hpp
index 28ce4b996c..ca5723fa7d 100644
--- a/3party/boost/boost/math/distributions/negative_binomial.hpp
+++ b/3party/boost/boost/math/distributions/negative_binomial.hpp
@@ -460,6 +460,15 @@ namespace boost
{ // p <= pdf(dist, 0) == cdf(dist, 0)
return 0;
}
+ if(p == 0)
+ { // Would need +infinity failures for total confidence.
+ result = policies::raise_overflow_error<RealType>(
+ function,
+ "Success fraction is 0, which implies infinite failures !", Policy());
+ return result;
+ // usually means return +std::numeric_limits<RealType>::infinity();
+ // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
+ }
/*
// Calculate quantile of negative_binomial using the inverse incomplete beta function.
using boost::math::ibeta_invb;
@@ -488,7 +497,7 @@ namespace boost
return detail::inverse_discrete_quantile(
dist,
P,
- 1-P,
+ false,
guess,
factor,
RealType(1),
@@ -527,16 +536,26 @@ namespace boost
// since the probability of zero failures may be non-zero,
return 0; // but zero is the best we can do:
}
+ if(Q == 0)
+ { // Probability 1 - Q == 1 so infinite failures to achieve certainty.
+ // Would need +infinity failures for total confidence.
+ result = policies::raise_overflow_error<RealType>(
+ function,
+ "Probability argument complement is 0, which implies infinite failures !", Policy());
+ return result;
+ // usually means return +std::numeric_limits<RealType>::infinity();
+ // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
+ }
if (-Q <= boost::math::powm1(dist.success_fraction(), dist.successes(), Policy()))
{ // q <= cdf(complement(dist, 0)) == pdf(dist, 0)
return 0; //
}
- if(Q == 0)
- { // Probability 1 - Q == 1 so infinite failures to achieve certainty.
+ if(p == 0)
+ { // Success fraction is 0 so infinite failures to achieve certainty.
// Would need +infinity failures for total confidence.
result = policies::raise_overflow_error<RealType>(
function,
- "Probability argument complement is 0, which implies infinite failures !", Policy());
+ "Success fraction is 0, which implies infinite failures !", Policy());
return result;
// usually means return +std::numeric_limits<RealType>::infinity();
// unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
@@ -564,8 +583,8 @@ namespace boost
typedef typename Policy::discrete_quantile_type discrete_type;
return detail::inverse_discrete_quantile(
dist,
- 1-Q,
Q,
+ true,
guess,
factor,
RealType(1),
diff --git a/3party/boost/boost/math/distributions/non_central_chi_squared.hpp b/3party/boost/boost/math/distributions/non_central_chi_squared.hpp
index a3f98982b9..88933c1956 100644
--- a/3party/boost/boost/math/distributions/non_central_chi_squared.hpp
+++ b/3party/boost/boost/math/distributions/non_central_chi_squared.hpp
@@ -101,7 +101,7 @@ namespace boost
}
//Error check:
if(static_cast<boost::uintmax_t>(i-k) >= max_iter)
- policies::raise_evaluation_error(
+ return policies::raise_evaluation_error(
"cdf(non_central_chi_squared_distribution<%1%>, %1%)",
"Series did not converge, closest value was %1%", sum, pol);
//
@@ -175,7 +175,7 @@ namespace boost
}
//Error check:
if(static_cast<boost::uintmax_t>(i) >= max_iter)
- policies::raise_evaluation_error(
+ return policies::raise_evaluation_error(
"cdf(non_central_chi_squared_distribution<%1%>, %1%)",
"Series did not converge, closest value was %1%", sum, pol);
return sum;
@@ -274,7 +274,7 @@ namespace boost
//Error check:
if(static_cast<boost::uintmax_t>(i) >= max_iter)
- policies::raise_evaluation_error(
+ return policies::raise_evaluation_error(
"cdf(non_central_chi_squared_distribution<%1%>, %1%)",
"Series did not converge, closest value was %1%", sum, pol);
@@ -400,6 +400,7 @@ namespace boost
template <class RealType, class Policy>
RealType nccs_quantile(const non_central_chi_squared_distribution<RealType, Policy>& dist, const RealType& p, bool comp)
{
+ BOOST_MATH_STD_USING
static const char* function = "quantile(non_central_chi_squared_distribution<%1%>, %1%)";
typedef typename policies::evaluation<RealType, Policy>::type value_type;
typedef typename policies::normalise<
@@ -428,25 +429,57 @@ namespace boost
&r,
Policy()))
return (RealType)r;
-
- value_type b = (l * l) / (k + 3 * l);
+ //
+ // Special cases get short-circuited first:
+ //
+ if(p == 0)
+ return comp ? policies::raise_overflow_error<RealType>(function, 0, Policy()) : 0;
+ if(p == 1)
+ return comp ? 0 : policies::raise_overflow_error<RealType>(function, 0, Policy());
+ //
+ // This is Pearson's approximation to the quantile, see
+ // Pearson, E. S. (1959) "Note on an approximation to the distribution of
+ // noncentral chi squared", Biometrika 46: 364.
+ // See also:
+ // "A comparison of approximations to percentiles of the noncentral chi2-distribution",
+ // Hardeo Sahai and Mario Miguel Ojeda, Revista de Matematica: Teoria y Aplicaciones 2003 10(1–2) : 57–76.
+ // Note that the latter reference refers to an approximation of the CDF, when they really mean the quantile.
+ //
+ value_type b = -(l * l) / (k + 3 * l);
value_type c = (k + 3 * l) / (k + 2 * l);
value_type ff = (k + 2 * l) / (c * c);
value_type guess;
if(comp)
+ {
guess = b + c * quantile(complement(chi_squared_distribution<value_type, forwarding_policy>(ff), p));
+ }
else
+ {
guess = b + c * quantile(chi_squared_distribution<value_type, forwarding_policy>(ff), p);
-
- if(guess < 0)
- guess = tools::min_value<value_type>();
-
+ }
+ //
+ // Sometimes guess goes very small or negative, in that case we have
+ // to do something else for the initial guess, this approximation
+ // was provided in a private communication from Thomas Luu, PhD candidate,
+ // University College London. It's an asymptotic expansion for the
+ // quantile which usually gets us within an order of magnitude of the
+ // correct answer.
+ //
+ if(guess < 0.005)
+ {
+ value_type pp = comp ? 1 - p : p;
+ //guess = pow(pow(value_type(2), (k / 2 - 1)) * exp(l / 2) * pp * k, 2 / k);
+ guess = pow(pow(value_type(2), (k / 2 - 1)) * exp(l / 2) * pp * k * boost::math::tgamma(k / 2, forwarding_policy()), (2 / k));
+ if(guess == 0)
+ guess = tools::min_value<value_type>();
+ }
value_type result = detail::generic_quantile(
non_central_chi_squared_distribution<value_type, forwarding_policy>(k, l),
p,
guess,
comp,
function);
+
return policies::checked_narrowing_cast<RealType, forwarding_policy>(
result,
function);
@@ -564,7 +597,7 @@ namespace boost
RealType result = ir.first + (ir.second - ir.first) / 2;
if(max_iter >= policies::get_max_root_iterations<Policy>())
{
- policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
+ return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
" or there is no answer to problem. Current best guess is %1%", result, Policy());
}
return result;
@@ -620,7 +653,7 @@ namespace boost
RealType result = ir.first + (ir.second - ir.first) / 2;
if(max_iter >= policies::get_max_root_iterations<Policy>())
{
- policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
+ return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
" or there is no answer to problem. Current best guess is %1%", result, Policy());
}
return result;
diff --git a/3party/boost/boost/math/distributions/non_central_t.hpp b/3party/boost/boost/math/distributions/non_central_t.hpp
index eed604c3e0..df7a58e575 100644
--- a/3party/boost/boost/math/distributions/non_central_t.hpp
+++ b/3party/boost/boost/math/distributions/non_central_t.hpp
@@ -206,7 +206,7 @@ namespace boost
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))
+ if ((boost::math::isinf)(v))
{ // Infinite degrees of freedom, so use normal distribution located at delta.
normal_distribution<T, Policy> n(delta, 1);
return cdf(n, t);
@@ -320,7 +320,7 @@ namespace boost
value_type guess = 0;
- if ( (boost::math::isinf(v)) || (v > 1 / boost::math::tools::epsilon<T>()) )
+ if ( ((boost::math::isinf)(v)) || (v > 1 / boost::math::tools::epsilon<T>()) )
{ // Infinite or very large degrees of freedom, so use normal distribution located at delta.
normal_distribution<T, Policy> n(delta, 1);
if (p < q)
@@ -447,10 +447,10 @@ 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))
+ if ((boost::math::isinf)(n))
{ // Infinite degrees of freedom, so use normal distribution located at delta.
- normal_distribution<T, Policy> n(delta, 1);
- return pdf(n, t);
+ normal_distribution<T, Policy> norm(delta, 1);
+ return pdf(norm, t);
}
//
// Otherwise, for t < 0 we have to use the reflection formula:
@@ -515,7 +515,7 @@ namespace boost
template <class T, class Policy>
T mean(T v, T delta, const Policy& pol)
{
- if (boost::math::isinf(v))
+ if ((boost::math::isinf)(v))
{
return delta;
}
@@ -536,7 +536,7 @@ namespace boost
template <class T, class Policy>
T variance(T v, T delta, const Policy& pol)
{
- if (boost::math::isinf(v))
+ if ((boost::math::isinf)(v))
{
return 1;
}
@@ -554,7 +554,7 @@ namespace boost
T skewness(T v, T delta, const Policy& pol)
{
BOOST_MATH_STD_USING
- if (boost::math::isinf(v))
+ if ((boost::math::isinf)(v))
{
return 0;
}
@@ -576,7 +576,7 @@ namespace boost
T kurtosis_excess(T v, T delta, const Policy& pol)
{
BOOST_MATH_STD_USING
- if (boost::math::isinf(v))
+ if ((boost::math::isinf)(v))
{
return 3;
}
@@ -647,7 +647,7 @@ namespace boost
RealType result = ir.first + (ir.second - ir.first) / 2;
if(max_iter >= policies::get_max_root_iterations<Policy>())
{
- policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
+ return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
" or there is no answer to problem. Current best guess is %1%", result, Policy());
}
return result;
@@ -705,7 +705,7 @@ namespace boost
RealType result = ir.first + (ir.second - ir.first) / 2;
if(max_iter >= policies::get_max_root_iterations<Policy>())
{
- policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
+ return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
" or there is no answer to problem. Current best guess is %1%", result, Policy());
}
return result;
@@ -1097,7 +1097,7 @@ namespace boost
&r,
Policy()))
return (RealType)r;
- if (boost::math::isinf(v))
+ if ((boost::math::isinf)(v))
{ // Infinite degrees of freedom, so use normal distribution located at delta.
normal_distribution<RealType, Policy> n(l, 1);
cdf(n, x);
@@ -1152,7 +1152,7 @@ namespace boost
Policy()))
return (RealType)r;
- if (boost::math::isinf(v))
+ if ((boost::math::isinf)(v))
{ // Infinite degrees of freedom, so use normal distribution located at delta.
normal_distribution<RealType, Policy> n(l, 1);
return cdf(complement(n, x));
diff --git a/3party/boost/boost/math/distributions/normal.hpp b/3party/boost/boost/math/distributions/normal.hpp
index 6cca20a57f..32cf66e3ef 100644
--- a/3party/boost/boost/math/distributions/normal.hpp
+++ b/3party/boost/boost/math/distributions/normal.hpp
@@ -31,14 +31,14 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- normal_distribution(RealType mean = 0, RealType sd = 1)
- : m_mean(mean), m_sd(sd)
+ normal_distribution(RealType l_mean = 0, RealType sd = 1)
+ : m_mean(l_mean), m_sd(sd)
{ // Default is a 'standard' normal distribution N01.
static const char* function = "boost::math::normal_distribution<%1%>::normal_distribution";
RealType result;
detail::check_scale(function, sd, &result, Policy());
- detail::check_location(function, mean, &result, Policy());
+ detail::check_location(function, l_mean, &result, Policy());
}
RealType mean()const
@@ -71,6 +71,11 @@ private:
typedef normal_distribution<double> normal;
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+
template <class RealType, class Policy>
inline const std::pair<RealType, RealType> range(const normal_distribution<RealType, Policy>& /*dist*/)
{ // Range of permissible values for random variable x.
@@ -87,8 +92,7 @@ inline const std::pair<RealType, RealType> range(const normal_distribution<RealT
template <class RealType, class Policy>
inline const std::pair<RealType, RealType> support(const normal_distribution<RealType, Policy>& /*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.
+{ // This is range values for random variable x where cdf rises from 0 to 1, and outside it, the pdf is zero.
if (std::numeric_limits<RealType>::has_infinity)
{
return std::pair<RealType, RealType>(-std::numeric_limits<RealType>::infinity(), std::numeric_limits<RealType>::infinity()); // - to + infinity.
@@ -100,6 +104,10 @@ inline const std::pair<RealType, RealType> support(const normal_distribution<Rea
}
}
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
template <class RealType, class Policy>
inline RealType pdf(const normal_distribution<RealType, Policy>& dist, const RealType& x)
{
@@ -109,15 +117,6 @@ inline RealType pdf(const normal_distribution<RealType, Policy>& dist, const Rea
RealType mean = dist.mean();
static const char* function = "boost::math::pdf(const normal_distribution<%1%>&, %1%)";
- if((boost::math::isinf)(x))
- {
- return 0; // pdf + and - infinity is zero.
- }
- // Below produces MSVC 4127 warnings, so the above used instead.
- //if(std::numeric_limits<RealType>::has_infinity && abs(x) == std::numeric_limits<RealType>::infinity())
- //{ // pdf + and - infinity is zero.
- // return 0;
- //}
RealType result = 0;
if(false == detail::check_scale(function, sd, &result, Policy()))
@@ -128,6 +127,15 @@ inline RealType pdf(const normal_distribution<RealType, Policy>& dist, const Rea
{
return result;
}
+ if((boost::math::isinf)(x))
+ {
+ return 0; // pdf + and - infinity is zero.
+ }
+ // Below produces MSVC 4127 warnings, so the above used instead.
+ //if(std::numeric_limits<RealType>::has_infinity && abs(x) == std::numeric_limits<RealType>::infinity())
+ //{ // pdf + and - infinity is zero.
+ // return 0;
+ //}
if(false == detail::check_x(function, x, &result, Policy()))
{
return result;
@@ -217,6 +225,11 @@ inline RealType cdf(const complemented2_type<normal_distribution<RealType, Polic
RealType x = c.param;
static const char* function = "boost::math::cdf(const complement(normal_distribution<%1%>&), %1%)";
+ RealType result = 0;
+ if(false == detail::check_scale(function, sd, &result, Policy()))
+ return result;
+ if(false == detail::check_location(function, mean, &result, Policy()))
+ return result;
if((boost::math::isinf)(x))
{
if(x < 0) return 1; // cdf complement -infinity is unity.
@@ -231,11 +244,6 @@ inline RealType cdf(const complemented2_type<normal_distribution<RealType, Polic
//{ // cdf complement -infinity is unity.
// return 1;
//}
- RealType result = 0;
- if(false == detail::check_scale(function, sd, &result, Policy()))
- return result;
- if(false == detail::check_location(function, mean, &result, Policy()))
- return result;
if(false == detail::check_x(function, x, &result, Policy()))
return result;
diff --git a/3party/boost/boost/math/distributions/pareto.hpp b/3party/boost/boost/math/distributions/pareto.hpp
index ff7082e2de..1c6cf350f8 100644
--- a/3party/boost/boost/math/distributions/pareto.hpp
+++ b/3party/boost/boost/math/distributions/pareto.hpp
@@ -136,11 +136,11 @@ namespace boost
typedef RealType value_type;
typedef Policy policy_type;
- pareto_distribution(RealType scale = 1, RealType shape = 1)
- : m_scale(scale), m_shape(shape)
+ pareto_distribution(RealType l_scale = 1, RealType l_shape = 1)
+ : m_scale(l_scale), m_shape(l_shape)
{ // Constructor.
RealType result = 0;
- detail::check_pareto("boost::math::pareto_distribution<%1%>::pareto_distribution", scale, shape, &result, Policy());
+ detail::check_pareto("boost::math::pareto_distribution<%1%>::pareto_distribution", l_scale, l_shape, &result, Policy());
}
RealType scale()const
@@ -236,7 +236,7 @@ namespace boost
}
if (p == 1)
{
- return tools::max_value<RealType>(); // x = + infinity.
+ return policies::raise_overflow_error<RealType>(function, 0, Policy()); // x = + infinity.
}
result = scale /
(pow((1 - p), 1 / shape));
@@ -286,7 +286,7 @@ namespace boost
}
if (q == 0)
{
- return tools::max_value<RealType>(); // x = + infinity.
+ return policies::raise_overflow_error<RealType>(function, 0, Policy()); // x = + infinity.
}
result = scale / (pow(q, 1 / shape));
// K. Krishnamoorthy, ISBN 1-58488-635-8 eq 23.1.3
diff --git a/3party/boost/boost/math/distributions/poisson.hpp b/3party/boost/boost/math/distributions/poisson.hpp
index c5c58a86f8..e4665bff69 100644
--- a/3party/boost/boost/math/distributions/poisson.hpp
+++ b/3party/boost/boost/math/distributions/poisson.hpp
@@ -52,68 +52,6 @@ namespace boost
{
namespace math
{
- namespace detail{
- template <class Dist>
- inline typename Dist::value_type
- inverse_discrete_quantile(
- const Dist& dist,
- const typename Dist::value_type& p,
- const typename Dist::value_type& guess,
- const typename Dist::value_type& multiplier,
- const typename Dist::value_type& adder,
- const policies::discrete_quantile<policies::integer_round_nearest>&,
- boost::uintmax_t& max_iter);
- template <class Dist>
- inline typename Dist::value_type
- inverse_discrete_quantile(
- const Dist& dist,
- const typename Dist::value_type& p,
- const typename Dist::value_type& guess,
- const typename Dist::value_type& multiplier,
- const typename Dist::value_type& adder,
- const policies::discrete_quantile<policies::integer_round_up>&,
- boost::uintmax_t& max_iter);
- template <class Dist>
- inline typename Dist::value_type
- inverse_discrete_quantile(
- const Dist& dist,
- const typename Dist::value_type& p,
- const typename Dist::value_type& guess,
- const typename Dist::value_type& multiplier,
- const typename Dist::value_type& adder,
- const policies::discrete_quantile<policies::integer_round_down>&,
- boost::uintmax_t& max_iter);
- template <class Dist>
- inline typename Dist::value_type
- inverse_discrete_quantile(
- const Dist& dist,
- const typename Dist::value_type& p,
- const typename Dist::value_type& guess,
- const typename Dist::value_type& multiplier,
- const typename Dist::value_type& adder,
- const policies::discrete_quantile<policies::integer_round_outwards>&,
- boost::uintmax_t& max_iter);
- template <class Dist>
- inline typename Dist::value_type
- inverse_discrete_quantile(
- const Dist& dist,
- const typename Dist::value_type& p,
- const typename Dist::value_type& guess,
- const typename Dist::value_type& multiplier,
- const typename Dist::value_type& adder,
- const policies::discrete_quantile<policies::integer_round_inwards>&,
- boost::uintmax_t& max_iter);
- template <class Dist>
- inline typename Dist::value_type
- inverse_discrete_quantile(
- const Dist& dist,
- const typename Dist::value_type& p,
- const typename Dist::value_type& guess,
- const typename Dist::value_type& multiplier,
- const typename Dist::value_type& adder,
- const policies::discrete_quantile<policies::real>&,
- boost::uintmax_t& max_iter);
- }
namespace poisson_detail
{
// Common error checking routines for Poisson distribution functions.
@@ -209,7 +147,7 @@ namespace boost
typedef RealType value_type;
typedef Policy policy_type;
- poisson_distribution(RealType mean = 1) : m_l(mean) // mean (lambda).
+ poisson_distribution(RealType l_mean = 1) : m_l(l_mean) // mean (lambda).
{ // Expected mean number of events that occur during the given interval.
RealType r;
poisson_detail::check_dist(
@@ -496,7 +434,7 @@ namespace boost
return detail::inverse_discrete_quantile(
dist,
p,
- 1-p,
+ false,
guess,
factor,
RealType(1),
@@ -565,8 +503,8 @@ namespace boost
return detail::inverse_discrete_quantile(
dist,
- 1-q,
q,
+ true,
guess,
factor,
RealType(1),
diff --git a/3party/boost/boost/math/distributions/rayleigh.hpp b/3party/boost/boost/math/distributions/rayleigh.hpp
index 8421434411..01f38c0b01 100644
--- a/3party/boost/boost/math/distributions/rayleigh.hpp
+++ b/3party/boost/boost/math/distributions/rayleigh.hpp
@@ -59,11 +59,11 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- rayleigh_distribution(RealType sigma = 1)
- : m_sigma(sigma)
+ rayleigh_distribution(RealType l_sigma = 1)
+ : m_sigma(l_sigma)
{
RealType err;
- detail::verify_sigma("boost::math::rayleigh_distribution<%1%>::rayleigh_distribution", sigma, &err, Policy());
+ detail::verify_sigma("boost::math::rayleigh_distribution<%1%>::rayleigh_distribution", l_sigma, &err, Policy());
} // rayleigh_distribution
RealType sigma()const
@@ -179,7 +179,11 @@ inline RealType cdf(const complemented2_type<rayleigh_distribution<RealType, Pol
{
return result;
}
- result = exp(-x * x / ( 2 * sigma * sigma));
+ RealType ea = x * x / (2 * sigma * sigma);
+ // Fix for VC11/12 x64 bug in exp(float):
+ if (ea >= tools::max_value<RealType>())
+ return 0;
+ result = exp(-ea);
return result;
} // cdf complement
diff --git a/3party/boost/boost/math/distributions/skew_normal.hpp b/3party/boost/boost/math/distributions/skew_normal.hpp
index 8ef9b5669a..98348e59bb 100644
--- a/3party/boost/boost/math/distributions/skew_normal.hpp
+++ b/3party/boost/boost/math/distributions/skew_normal.hpp
@@ -58,15 +58,15 @@ namespace boost{ namespace math{
typedef RealType value_type;
typedef Policy policy_type;
- skew_normal_distribution(RealType location = 0, RealType scale = 1, RealType shape = 0)
- : location_(location), scale_(scale), shape_(shape)
+ skew_normal_distribution(RealType l_location = 0, RealType l_scale = 1, RealType l_shape = 0)
+ : location_(l_location), scale_(l_scale), shape_(l_shape)
{ // Default is a 'standard' normal distribution N01. (shape=0 results in the normal distribution with no skew)
static const char* function = "boost::math::skew_normal_distribution<%1%>::skew_normal_distribution";
RealType result;
- detail::check_scale(function, scale, &result, Policy());
- detail::check_location(function, location, &result, Policy());
- detail::check_skew_normal_shape(function, shape, &result, Policy());
+ detail::check_scale(function, l_scale, &result, Policy());
+ detail::check_location(function, l_location, &result, Policy());
+ detail::check_skew_normal_shape(function, l_shape, &result, Policy());
}
RealType location()const
diff --git a/3party/boost/boost/math/distributions/students_t.hpp b/3party/boost/boost/math/distributions/students_t.hpp
index fef021ecb2..0d6a646691 100644
--- a/3party/boost/boost/math/distributions/students_t.hpp
+++ b/3party/boost/boost/math/distributions/students_t.hpp
@@ -93,10 +93,10 @@ inline RealType pdf(const students_t_distribution<RealType, Policy>& dist, const
return error_result;
RealType result;
- if (boost::math::isinf(x))
+ if ((boost::math::isinf)(x))
{ // +infinity.
normal_distribution<RealType, Policy> n(0, 1);
- RealType result = pdf(n, x);
+ result = pdf(n, x);
return result;
}
RealType limit = policies::get_epsilon<RealType, Policy>();
@@ -144,7 +144,7 @@ inline RealType cdf(const students_t_distribution<RealType, Policy>& dist, const
{ // Special case with exact result.
return static_cast<RealType>(0.5);
}
- if (boost::math::isinf(x))
+ if ((boost::math::isinf)(x))
{ // +infinity.
normal_distribution<RealType, Policy> n(0, 1);
RealType result = cdf(n, x);
@@ -326,7 +326,7 @@ RealType students_t_distribution<RealType, Policy>::find_degrees_of_freedom(
RealType result = r.first + (r.second - r.first) / 2;
if(max_iter >= policies::get_max_root_iterations<Policy>())
{
- policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
+ return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
" either there is no answer to how many degrees of freedom are required"
" or the answer is infinite. Current best guess is %1%", result, Policy());
}
@@ -355,7 +355,7 @@ inline RealType mean(const students_t_distribution<RealType, Policy>& dist)
RealType df = dist.degrees_of_freedom();
if(((boost::math::isnan)(df)) || (df <= 1) )
{ // mean is undefined for moment <= 1!
- policies::raise_domain_error<RealType>(
+ return policies::raise_domain_error<RealType>(
"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<RealType>::quiet_NaN();
@@ -370,13 +370,13 @@ inline RealType variance(const students_t_distribution<RealType, Policy>& dist)
RealType df = dist.degrees_of_freedom();
if ((boost::math::isnan)(df) || (df <= 2))
{ // NaN or undefined for <= 2.
- policies::raise_domain_error<RealType>(
+ return policies::raise_domain_error<RealType>(
"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<RealType>::quiet_NaN(); // Undefined.
}
- if (boost::math::isinf(df))
+ if ((boost::math::isinf)(df))
{ // +infinity.
return 1;
}
@@ -401,7 +401,7 @@ inline RealType skewness(const students_t_distribution<RealType, Policy>& dist)
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<RealType>(
+ return policies::raise_domain_error<RealType>(
"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());
@@ -416,13 +416,13 @@ inline RealType kurtosis(const students_t_distribution<RealType, Policy>& dist)
RealType df = dist.degrees_of_freedom();
if(((boost::math::isnan)(df)) || (df <= 4))
{ // Undefined or infinity for moment k = 4.
- policies::raise_domain_error<RealType>(
+ return policies::raise_domain_error<RealType>(
"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<RealType>::quiet_NaN(); // Undefined.
}
- if (boost::math::isinf(df))
+ if ((boost::math::isinf)(df))
{ // +infinity.
return 3;
}
@@ -450,13 +450,13 @@ inline RealType kurtosis_excess(const students_t_distribution<RealType, Policy>&
RealType df = dist.degrees_of_freedom();
if(((boost::math::isnan)(df)) || (df <= 4))
{ // Undefined or infinity for moment k = 4.
- policies::raise_domain_error<RealType>(
+ return policies::raise_domain_error<RealType>(
"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<RealType>::quiet_NaN(); // Undefined.
}
- if (boost::math::isinf(df))
+ if ((boost::math::isinf)(df))
{ // +infinity.
return 0;
}
diff --git a/3party/boost/boost/math/distributions/triangular.hpp b/3party/boost/boost/math/distributions/triangular.hpp
index 735d20235c..78ef0df744 100644
--- a/3party/boost/boost/math/distributions/triangular.hpp
+++ b/3party/boost/boost/math/distributions/triangular.hpp
@@ -147,14 +147,14 @@ namespace boost{ namespace math
typedef RealType value_type;
typedef Policy policy_type;
- triangular_distribution(RealType lower = -1, RealType mode = 0, RealType upper = 1)
- : m_lower(lower), m_mode(mode), m_upper(upper) // Constructor.
+ triangular_distribution(RealType l_lower = -1, RealType l_mode = 0, RealType l_upper = 1)
+ : m_lower(l_lower), m_mode(l_mode), m_upper(l_upper) // Constructor.
{ // Evans says 'standard triangular' is lower 0, mode 1/2, upper 1,
// has median sqrt(c/2) for c <=1/2 and 1 - sqrt(1-c)/2 for c >= 1/2
// But this -1, 0, 1 is more useful in most applications to approximate normal distribution,
// where the central value is the most likely and deviations either side equally likely.
RealType result;
- detail::check_triangular("boost::math::triangular_distribution<%1%>::triangular_distribution",lower, mode, upper, &result, Policy());
+ detail::check_triangular("boost::math::triangular_distribution<%1%>::triangular_distribution",l_lower, l_mode, l_upper, &result, Policy());
}
// Accessor functions.
RealType lower()const
diff --git a/3party/boost/boost/math/distributions/uniform.hpp b/3party/boost/boost/math/distributions/uniform.hpp
index 3645b2039b..a20597a66a 100644
--- a/3party/boost/boost/math/distributions/uniform.hpp
+++ b/3party/boost/boost/math/distributions/uniform.hpp
@@ -116,11 +116,11 @@ namespace boost{ namespace math
typedef RealType value_type;
typedef Policy policy_type;
- uniform_distribution(RealType lower = 0, RealType upper = 1) // Constructor.
- : m_lower(lower), m_upper(upper) // Default is standard uniform distribution.
+ uniform_distribution(RealType l_lower = 0, RealType l_upper = 1) // Constructor.
+ : m_lower(l_lower), m_upper(l_upper) // Default is standard uniform distribution.
{
RealType result;
- detail::check_uniform("boost::math::uniform_distribution<%1%>::uniform_distribution", lower, upper, &result, Policy());
+ detail::check_uniform("boost::math::uniform_distribution<%1%>::uniform_distribution", l_lower, l_upper, &result, Policy());
}
// Accessor functions.
RealType lower()const
diff --git a/3party/boost/boost/math/distributions/weibull.hpp b/3party/boost/boost/math/distributions/weibull.hpp
index 133b7e04c3..da1189090c 100644
--- a/3party/boost/boost/math/distributions/weibull.hpp
+++ b/3party/boost/boost/math/distributions/weibull.hpp
@@ -73,11 +73,11 @@ public:
typedef RealType value_type;
typedef Policy policy_type;
- weibull_distribution(RealType shape, RealType scale = 1)
- : m_shape(shape), m_scale(scale)
+ weibull_distribution(RealType l_shape, RealType l_scale = 1)
+ : m_shape(l_shape), m_scale(l_scale)
{
RealType result;
- detail::check_weibull("boost::math::weibull_distribution<%1%>::weibull_distribution", scale, shape, &result, Policy());
+ detail::check_weibull("boost::math::weibull_distribution<%1%>::weibull_distribution", l_scale, l_shape, &result, Policy());
}
RealType shape()const
diff --git a/3party/boost/boost/math/octonion.hpp b/3party/boost/boost/math/octonion.hpp
index ce1b66f1da..fba9aff273 100644
--- a/3party/boost/boost/math/octonion.hpp
+++ b/3party/boost/boost/math/octonion.hpp
@@ -18,23 +18,6 @@ namespace boost
{
namespace math
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- // gcc 2.95.x uses expression templates for valarray calculations, but
- // the result is not conforming. We need BOOST_GET_VALARRAY to get an
- // actual valarray result when we need to call a member function
- #define BOOST_GET_VALARRAY(T,x) ::std::valarray<T>(x)
- // gcc 2.95.x has an "std::ios" class that is similar to
- // "std::ios_base", so we just use a #define
- #define BOOST_IOS_BASE ::std::ios
- // gcc 2.x ignores function scope using declarations,
- // put them in the scope of the enclosing namespace instead:
- using ::std::valarray;
- using ::std::sqrt;
- using ::std::cos;
- using ::std::sin;
- using ::std::exp;
- using ::std::cosh;
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
#define BOOST_OCTONION_ACCESSOR_GENERATOR(type) \
type real() const \
@@ -958,48 +941,7 @@ namespace boost
return(*this); \
}
-#if defined(__GNUC__) && (__GNUC__ < 3)
- #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \
- octonion<type> & operator /= (::std::complex<type> const & rhs) \
- { \
- using ::std::valarray; \
- \
- valarray<type> tr(2); \
- \
- tr[0] = rhs.real(); \
- tr[1] = rhs.imag(); \
- \
- type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)(); \
- \
- tr *= mixam; \
- \
- valarray<type> tt(8); \
- \
- tt[0] = +a*tr[0]-b*tr[1]; \
- tt[1] = -a*tr[1]+b*tr[0]; \
- tt[2] = +c*tr[0]-d*tr[1]; \
- tt[3] = +c*tr[1]+d*tr[0]; \
- tt[4] = +e*tr[0]-f*tr[1]; \
- tt[5] = +e*tr[1]+f*tr[0]; \
- tt[6] = +g*tr[0]+h*tr[1]; \
- tt[7] = +g*tr[1]+h*tr[0]; \
- \
- tr *= tr; \
- \
- tt *= (mixam/tr.sum()); \
- \
- a = tt[0]; \
- b = tt[1]; \
- c = tt[2]; \
- d = tt[3]; \
- e = tt[4]; \
- f = tt[5]; \
- g = tt[6]; \
- h = tt[7]; \
- \
- return(*this); \
- }
-#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
#define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \
octonion<type> & operator /= (::std::complex<type> const & rhs) \
{ \
@@ -1082,52 +1024,9 @@ namespace boost
\
return(*this); \
}
-#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
-#if defined(__GNUC__) && (__GNUC__ < 3)
- #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \
- octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \
- { \
- using ::std::valarray; \
- \
- valarray<type> tr(4); \
- \
- tr[0] = static_cast<type>(rhs.R_component_1()); \
- tr[1] = static_cast<type>(rhs.R_component_2()); \
- tr[2] = static_cast<type>(rhs.R_component_3()); \
- tr[3] = static_cast<type>(rhs.R_component_4()); \
- \
- type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)();\
- \
- tr *= mixam; \
- \
- valarray<type> tt(8); \
- \
- tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
- tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
- tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
- tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
- tt[4] = +e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
- tt[5] = +e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
- tt[6] = +e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
- tt[7] = +e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
- \
- tr *= tr; \
- \
- tt *= (mixam/tr.sum()); \
- \
- a = tt[0]; \
- b = tt[1]; \
- c = tt[2]; \
- d = tt[3]; \
- e = tt[4]; \
- f = tt[5]; \
- g = tt[6]; \
- h = tt[7]; \
- \
- return(*this); \
- }
-#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
#define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \
octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \
{ \
@@ -1214,57 +1113,9 @@ namespace boost
\
return(*this); \
}
-#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
-#if defined(__GNUC__) && (__GNUC__ < 3)
- #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \
- template<typename X> \
- octonion<type> & operator /= (octonion<X> const & rhs) \
- { \
- using ::std::valarray; \
- \
- valarray<type> tr(8); \
- \
- tr[0] = static_cast<type>(rhs.R_component_1()); \
- tr[1] = static_cast<type>(rhs.R_component_2()); \
- tr[2] = static_cast<type>(rhs.R_component_3()); \
- tr[3] = static_cast<type>(rhs.R_component_4()); \
- tr[4] = static_cast<type>(rhs.R_component_5()); \
- tr[5] = static_cast<type>(rhs.R_component_6()); \
- tr[6] = static_cast<type>(rhs.R_component_7()); \
- tr[7] = static_cast<type>(rhs.R_component_8()); \
- \
- type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)();\
- \
- tr *= mixam; \
- \
- valarray<type> tt(8); \
- \
- tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]+e*tr[4]+f*tr[5]+g*tr[6]+h*tr[7]; \
- tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]-e*tr[5]+f*tr[4]+g*tr[7]-h*tr[6]; \
- tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]-e*tr[6]-f*tr[7]+g*tr[4]+h*tr[5]; \
- tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]-e*tr[7]+f*tr[6]-g*tr[5]+h*tr[4]; \
- tt[4] = -a*tr[4]+b*tr[5]+c*tr[6]+d*tr[7]+e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
- tt[5] = -a*tr[5]-b*tr[4]+c*tr[7]-d*tr[6]+e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
- tt[6] = -a*tr[6]-b*tr[7]-c*tr[4]+d*tr[5]+e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
- tt[7] = -a*tr[7]+b*tr[6]-c*tr[5]-d*tr[4]+e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
- \
- tr *= tr; \
- \
- tt *= (mixam/tr.sum()); \
- \
- a = tt[0]; \
- b = tt[1]; \
- c = tt[2]; \
- d = tt[3]; \
- e = tt[4]; \
- f = tt[5]; \
- g = tt[6]; \
- h = tt[7]; \
- \
- return(*this); \
- }
-#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
#define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \
template<typename X> \
octonion<type> & operator /= (octonion<X> const & rhs) \
@@ -1361,7 +1212,7 @@ namespace boost
\
return(*this); \
}
-#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
#define BOOST_OCTONION_MEMBER_ADD_GENERATOR(type) \
@@ -1856,21 +1707,10 @@ namespace boost
// Note: the default values in the constructors of the complex and quaternions make for
// a very complex and ambiguous situation; we have made choices to disambiguate.
-
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- template<typename T>
- ::std::istream & operator >> ( ::std::istream & is,
- octonion<T>& o)
-#else
template<typename T, typename charT, class traits>
::std::basic_istream<charT,traits> & operator >> ( ::std::basic_istream<charT,traits> & is,
octonion<T> & o)
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- typedef char charT;
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
-
#ifdef BOOST_NO_STD_LOCALE
#else
const ::std::ctype<charT> & ct = ::std::use_facet< ::std::ctype<charT> >(is.getloc());
@@ -1988,20 +1828,12 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc ==',') // read "((u,"
@@ -2060,38 +1892,22 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "((a"
@@ -2180,11 +1996,7 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "((a),(c" or "((a),(e"
@@ -2267,29 +2079,17 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "((a),(c," or "((a),(e,"
@@ -2342,20 +2142,12 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "((a),(c,d" or "((a),(e,f"
@@ -2438,29 +2230,17 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "((a),(e,f," (ambiguity resolution)
@@ -2501,11 +2281,7 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "((a),(e,f,g,"
@@ -2544,48 +2320,28 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
@@ -2651,39 +2407,23 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc ==',') // read "((a,"
@@ -2758,29 +2498,17 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else
@@ -2869,11 +2597,7 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "((a,b),(c" or "((a,b),(e"
@@ -2956,29 +2680,17 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "((a,b),(c," or "((a,b),(e,"
@@ -3033,20 +2745,12 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "((a,b),(c,d" or "((a,b),(e,f"
@@ -3129,29 +2833,17 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "((a,b),(e,f," (ambiguity resolution)
@@ -3192,11 +2884,7 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "((a,b),(e,f,g,"
@@ -3235,67 +2923,39 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "((a,b,"
@@ -3354,20 +3014,12 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "((a,b,c,"
@@ -3426,57 +3078,33 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
@@ -3554,11 +3182,7 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "(a,(c" or "(a,(e"
@@ -3641,29 +3265,17 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "(a,(c," or "(a,(e,"
@@ -3718,20 +3330,12 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "(a,(c,d" or "(a,(e,f"
@@ -3814,29 +3418,17 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "(a,(e,f," (ambiguity resolution)
@@ -3877,11 +3469,7 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else if (cc == ',') // read "(a,(e,f,g,"
@@ -3920,48 +3508,28 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
@@ -4047,20 +3615,12 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "(a,b,c" or "(a,c,e"
@@ -4127,11 +3687,7 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "(a,b,c,d" (ambiguity resolution)
@@ -4238,77 +3794,45 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
@@ -4328,21 +3852,11 @@ namespace boost
}
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- template<typename T>
- ::std::ostream & operator << ( ::std::ostream & os,
- octonion<T> const & o)
-#else
template<typename T, typename charT, class traits>
::std::basic_ostream<charT,traits> & operator << ( ::std::basic_ostream<charT,traits> & os,
octonion<T> const & o)
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- ::std::ostringstream s;
-#else
::std::basic_ostringstream<charT,traits> s;
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
s.flags(os.flags());
#ifdef BOOST_NO_STD_LOCALE
@@ -4404,11 +3918,7 @@ namespace boost
BOOST_OCTONION_VALARRAY_LOADER
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- return((BOOST_GET_VALARRAY(T, abs(temp)).max)());
-#else
return((abs(temp).max)());
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
@@ -4421,11 +3931,7 @@ namespace boost
BOOST_OCTONION_VALARRAY_LOADER
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- return(BOOST_GET_VALARRAY(T, abs(temp)).sum());
-#else
return(abs(temp).sum());
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
@@ -4440,11 +3946,7 @@ namespace boost
BOOST_OCTONION_VALARRAY_LOADER
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- T maxim = (BOOST_GET_VALARRAY(T,abs(temp)).max)(); // overflow protection
-#else
T maxim = (abs(temp).max)(); // overflow protection
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
if (maxim == static_cast<T>(0))
{
@@ -4745,10 +4247,4 @@ namespace boost
}
}
-
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- #undef BOOST_GET_VALARRAY
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
-
-
#endif /* BOOST_OCTONION_HPP */
diff --git a/3party/boost/boost/math/policies/error_handling.hpp b/3party/boost/boost/math/policies/error_handling.hpp
index d0b56ffa4d..674759006e 100644
--- a/3party/boost/boost/math/policies/error_handling.hpp
+++ b/3party/boost/boost/math/policies/error_handling.hpp
@@ -24,7 +24,7 @@
# pragma warning(disable: 4996) // _SCL_SECURE_NO_DEPRECATE
# pragma warning(disable: 4512) // assignment operator could not be generated.
// And warnings in error handling:
-# pragma warning(disable: 4702) // unreachable code
+# pragma warning(disable: 4702) // unreachable code.
// Note that this only occurs when the compiler can deduce code is unreachable,
// for example when policy macros are used to ignore errors rather than throw.
#endif
@@ -70,7 +70,7 @@ namespace detail
{
//
// Helper function to avoid binding rvalue to non-const-reference,
-// in other words a warning suppression mechansim:
+// in other words a warning suppression mechanism:
//
template <class Formatter, class Group>
inline std::string do_format(Formatter f, const Group& g)
@@ -78,6 +78,27 @@ inline std::string do_format(Formatter f, const Group& g)
return (f % g).str();
}
+template <class T>
+inline const char* name_of()
+{
+#ifndef BOOST_NO_RTTI
+ return typeid(T).name();
+#else
+ return "unknown";
+#endif
+}
+template <> inline const char* name_of<float>(){ return "float"; }
+template <> inline const char* name_of<double>(){ return "double"; }
+template <> inline const char* name_of<long double>(){ return "long double"; }
+
+#ifdef BOOST_MATH_USE_FLOAT128
+template <>
+inline const char* name_of<BOOST_MATH_FLOAT128_TYPE>()
+{
+ return "__float128";
+}
+#endif
+
template <class E, class T>
void raise_error(const char* function, const char* message)
{
@@ -87,7 +108,11 @@ void raise_error(const char* function, const char* message)
message = "Cause unknown";
std::string msg("Error in function ");
- msg += (boost::format(function) % typeid(T).name()).str();
+#ifndef BOOST_NO_RTTI
+ msg += (boost::format(function) % boost::math::policies::detail::name_of<T>()).str();
+#else
+ msg += function;
+#endif
msg += ": ";
msg += message;
@@ -104,7 +129,11 @@ void raise_error(const char* function, const char* message, const T& val)
message = "Cause unknown: error caused by bad argument with value %1%";
std::string msg("Error in function ");
- msg += (boost::format(function) % typeid(T).name()).str();
+#ifndef BOOST_NO_RTTI
+ msg += (boost::format(function) % boost::math::policies::detail::name_of<T>()).str();
+#else
+ msg += function;
+#endif
msg += ": ";
msg += message;
@@ -202,6 +231,7 @@ inline T raise_pole_error(
return user_pole_error(function, message, val);
}
+
template <class T>
inline T raise_overflow_error(
const char* function,
@@ -209,7 +239,30 @@ inline T raise_overflow_error(
const ::boost::math::policies::overflow_error< ::boost::math::policies::throw_on_error>&)
{
raise_error<std::overflow_error, T>(function, message ? message : "numeric overflow");
- // we never get here:
+ // We should never get here:
+ return std::numeric_limits<T>::has_infinity ? std::numeric_limits<T>::infinity() : boost::math::tools::max_value<T>();
+}
+
+template <class T>
+inline T raise_overflow_error(
+ const char* function,
+ const char* message,
+ const T& val,
+ const ::boost::math::policies::overflow_error< ::boost::math::policies::throw_on_error>&)
+{
+ raise_error<std::overflow_error, T>(function, message ? message : "numeric overflow", val);
+ // We should never get here:
+ return std::numeric_limits<T>::has_infinity ? std::numeric_limits<T>::infinity() : boost::math::tools::max_value<T>();
+}
+
+template <class T>
+inline T raise_overflow_error(
+ const char* ,
+ const char* ,
+ const ::boost::math::policies::overflow_error< ::boost::math::policies::ignore_error>&)
+{
+ // This may or may not do the right thing, but the user asked for the error
+ // to be ignored so here we go anyway:
return std::numeric_limits<T>::has_infinity ? std::numeric_limits<T>::infinity() : boost::math::tools::max_value<T>();
}
@@ -217,6 +270,7 @@ template <class T>
inline T raise_overflow_error(
const char* ,
const char* ,
+ const T&,
const ::boost::math::policies::overflow_error< ::boost::math::policies::ignore_error>&)
{
// This may or may not do the right thing, but the user asked for the error
@@ -238,6 +292,19 @@ inline T raise_overflow_error(
template <class T>
inline T raise_overflow_error(
+ const char* ,
+ const char* ,
+ const T&,
+ const ::boost::math::policies::overflow_error< ::boost::math::policies::errno_on_error>&)
+{
+ errno = ERANGE;
+ // This may or may not do the right thing, but the user asked for the error
+ // to be silent so here we go anyway:
+ return std::numeric_limits<T>::has_infinity ? std::numeric_limits<T>::infinity() : boost::math::tools::max_value<T>();
+}
+
+template <class T>
+inline T raise_overflow_error(
const char* function,
const char* message,
const ::boost::math::policies::overflow_error< ::boost::math::policies::user_error>&)
@@ -246,13 +313,31 @@ inline T raise_overflow_error(
}
template <class T>
+inline T raise_overflow_error(
+ const char* function,
+ const char* message,
+ const T& val,
+ const ::boost::math::policies::overflow_error< ::boost::math::policies::user_error>&)
+{
+ std::string fmsg("Error in function ");
+#ifndef BOOST_NO_RTTI
+ fmsg += (boost::format(function) % boost::math::policies::detail::name_of<T>()).str();
+#else
+ fmsg += function;
+#endif
+ int prec = 2 + (boost::math::policies::digits<T, boost::math::policies::policy<> >() * 30103UL) / 100000UL;
+ std::string msg = do_format(boost::format(message), boost::io::group(std::setprecision(prec), val));
+ return user_overflow_error(fmsg.c_str(), msg.c_str(), std::numeric_limits<T>::infinity());
+}
+
+template <class T>
inline T raise_underflow_error(
const char* function,
const char* message,
const ::boost::math::policies::underflow_error< ::boost::math::policies::throw_on_error>&)
{
raise_error<std::underflow_error, T>(function, message ? message : "numeric underflow");
- // we never get here:
+ // We should never get here:
return 0;
}
@@ -516,6 +601,15 @@ inline T raise_overflow_error(const char* function, const char* message, const P
}
template <class T, class Policy>
+inline T raise_overflow_error(const char* function, const char* message, const T& val, const Policy&)
+{
+ typedef typename Policy::overflow_error_type policy_type;
+ return detail::raise_overflow_error(
+ function, message ? message : "Overflow evaluating function at %1%",
+ val, policy_type());
+}
+
+template <class T, class Policy>
inline T raise_underflow_error(const char* function, const char* message, const Policy&)
{
typedef typename Policy::underflow_error_type policy_type;
@@ -573,7 +667,8 @@ inline bool check_overflow(T val, R* result, const char* function, const Policy&
BOOST_MATH_STD_USING
if(fabs(val) > tools::max_value<R>())
{
- *result = static_cast<R>(boost::math::policies::detail::raise_overflow_error<R>(function, 0, pol));
+ boost::math::policies::detail::raise_overflow_error<R>(function, 0, pol);
+ *result = static_cast<R>(val);
return true;
}
return false;
@@ -686,6 +781,20 @@ inline void check_root_iterations(const char* function, boost::uintmax_t max_ite
} //namespace policies
+namespace detail{
+
+//
+// Simple helper function to assist in returning a pair from a single value,
+// that value usually comes from one of the error handlers above:
+//
+template <class T>
+std::pair<T, T> pair_from_single(const T& val)
+{
+ return std::make_pair(val, val);
+}
+
+}
+
#ifdef BOOST_MSVC
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/math/policies/policy.hpp b/3party/boost/boost/math/policies/policy.hpp
index 24334c7d04..49068a6ed5 100644
--- a/3party/boost/boost/math/policies/policy.hpp
+++ b/3party/boost/boost/math/policies/policy.hpp
@@ -94,8 +94,7 @@ namespace policies{
#define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 200
#endif
-#if !defined(__BORLANDC__) \
- && !(defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 2))
+#if !defined(__BORLANDC__)
#define BOOST_MATH_META_INT(type, name, Default)\
template <type N = Default> struct name : public boost::mpl::int_<N>{};\
namespace detail{\
@@ -816,7 +815,7 @@ struct precision
#ifdef BOOST_MATH_USE_FLOAT128
template <class Policy>
-struct precision<__float128, Policy>
+struct precision<BOOST_MATH_FLOAT128_TYPE, Policy>
{
typedef mpl::int_<113> type;
};
diff --git a/3party/boost/boost/math/quaternion.hpp b/3party/boost/boost/math/quaternion.hpp
index bbe767d22b..d816a767cb 100644
--- a/3party/boost/boost/math/quaternion.hpp
+++ b/3party/boost/boost/math/quaternion.hpp
@@ -33,23 +33,6 @@ namespace boost
{
namespace math
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- // gcc 2.95.x uses expression templates for valarray calculations, but
- // the result is not conforming. We need BOOST_GET_VALARRAY to get an
- // actual valarray result when we need to call a member function
- #define BOOST_GET_VALARRAY(T,x) ::std::valarray<T>(x)
- // gcc 2.95.x has an "std::ios" class that is similar to
- // "std::ios_base", so we just use a #define
- #define BOOST_IOS_BASE ::std::ios
- // gcc 2.x ignores function scope using declarations,
- // put them in the scope of the enclosing namespace instead:
- using ::std::valarray;
- using ::std::sqrt;
- using ::std::cos;
- using ::std::sin;
- using ::std::exp;
- using ::std::cosh;
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
#define BOOST_QUATERNION_ACCESSOR_GENERATOR(type) \
type real() const \
@@ -601,40 +584,7 @@ namespace boost
return(*this); \
}
-#if defined(__GNUC__) && (__GNUC__ < 3)
- #define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_2(type) \
- quaternion<type> & operator /= (::std::complex<type> const & rhs) \
- { \
- using ::std::valarray; \
- \
- valarray<type> tr(2); \
- \
- tr[0] = rhs.real(); \
- tr[1] = rhs.imag(); \
- \
- type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)(); \
- \
- tr *= mixam; \
- \
- valarray<type> tt(4); \
- \
- tt[0] = +a*tr[0]+b*tr[1]; \
- tt[1] = -a*tr[1]+b*tr[0]; \
- tt[2] = +c*tr[0]-d*tr[1]; \
- tt[3] = +c*tr[1]+d*tr[0]; \
- \
- tr *= tr; \
- \
- tt *= (mixam/tr.sum()); \
- \
- a = tt[0]; \
- b = tt[1]; \
- c = tt[2]; \
- d = tt[3]; \
- \
- return(*this); \
- }
-#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
#define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_2(type) \
quaternion<type> & operator /= (::std::complex<type> const & rhs) \
{ \
@@ -701,45 +651,9 @@ namespace boost
\
return(*this); \
}
-#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
-#if defined(__GNUC__) && (__GNUC__ < 3)
- #define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_3(type) \
- template<typename X> \
- quaternion<type> & operator /= (quaternion<X> const & rhs) \
- { \
- using ::std::valarray; \
- \
- valarray<type> tr(4); \
- \
- tr[0] = static_cast<type>(rhs.R_component_1()); \
- tr[1] = static_cast<type>(rhs.R_component_2()); \
- tr[2] = static_cast<type>(rhs.R_component_3()); \
- tr[3] = static_cast<type>(rhs.R_component_4()); \
- \
- type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)(); \
- \
- tr *= mixam; \
- \
- valarray<type> tt(4); \
- \
- tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
- tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
- tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
- tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
- \
- tr *= tr; \
- \
- tt *= (mixam/tr.sum()); \
- \
- a = tt[0]; \
- b = tt[1]; \
- c = tt[2]; \
- d = tt[3]; \
- \
- return(*this); \
- }
-#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
#define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_3(type) \
template<typename X> \
quaternion<type> & operator /= (quaternion<X> const & rhs) \
@@ -812,7 +726,7 @@ namespace boost
\
return(*this); \
}
-#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
#define BOOST_QUATERNION_MEMBER_ADD_GENERATOR(type) \
BOOST_QUATERNION_MEMBER_ADD_GENERATOR_1(type) \
@@ -1219,19 +1133,10 @@ namespace boost
// a
// (a), (a,b), (a,b,c), (a,b,c,d)
// (a,(c)), (a,(c,d)), ((a)), ((a),c), ((a),(c)), ((a),(c,d)), ((a,b)), ((a,b),c), ((a,b),(c)), ((a,b),(c,d))
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- template<typename T>
- std::istream & operator >> ( ::std::istream & is,
- quaternion<T> & q)
-#else
template<typename T, typename charT, class traits>
::std::basic_istream<charT,traits> & operator >> ( ::std::basic_istream<charT,traits> & is,
quaternion<T> & q)
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- typedef char charT;
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
#ifdef BOOST_NO_STD_LOCALE
#else
@@ -1319,20 +1224,12 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "(a", possible: (a), (a,b), (a,b,c), (a,b,c,d), (a,(c)), (a,(c,d))
@@ -1396,11 +1293,7 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // read "(a,b", possible: (a,b), (a,b,c), (a,b,c,d)
@@ -1467,39 +1360,23 @@ namespace boost
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
else // error
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- is.setstate(::std::ios::failbit);
-#else
is.setstate(::std::ios_base::failbit);
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
}
}
@@ -1519,22 +1396,12 @@ namespace boost
}
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- template<typename T>
- ::std::ostream & operator << ( ::std::ostream & os,
- quaternion<T> const & q)
-#else
template<typename T, typename charT, class traits>
::std::basic_ostream<charT,traits> & operator << ( ::std::basic_ostream<charT,traits> & os,
quaternion<T> const & q)
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- ::std::ostringstream s;
-#else
::std::basic_ostringstream<charT,traits> s;
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
-
+
s.flags(os.flags());
#ifdef BOOST_NO_STD_LOCALE
#else
@@ -1587,11 +1454,7 @@ namespace boost
BOOST_QUATERNION_VALARRAY_LOADER
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- return((BOOST_GET_VALARRAY(T, abs(temp)).max)());
-#else
return((abs(temp).max)());
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
@@ -1604,11 +1467,7 @@ namespace boost
BOOST_QUATERNION_VALARRAY_LOADER
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- return(BOOST_GET_VALARRAY(T, abs(temp)).sum());
-#else
return(abs(temp).sum());
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
}
@@ -1623,11 +1482,7 @@ namespace boost
BOOST_QUATERNION_VALARRAY_LOADER
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- T maxim = (BOOST_GET_VALARRAY(T, abs(temp)).max)(); // overflow protection
-#else
T maxim = (abs(temp).max)(); // overflow protection
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
if (maxim == static_cast<T>(0))
{
@@ -1915,10 +1770,4 @@ namespace boost
}
}
-
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- #undef BOOST_GET_VALARRAY
-#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
-
-
#endif /* BOOST_QUATERNION_HPP */
diff --git a/3party/boost/boost/math/special_functions.hpp b/3party/boost/boost/math/special_functions.hpp
index 24f406481c..aa7019a1eb 100644
--- a/3party/boost/boost/math/special_functions.hpp
+++ b/3party/boost/boost/math/special_functions.hpp
@@ -16,7 +16,9 @@
#include <boost/math/special_functions/acosh.hpp>
#include <boost/math/special_functions/asinh.hpp>
#include <boost/math/special_functions/atanh.hpp>
+#include <boost/math/special_functions/bernoulli.hpp>
#include <boost/math/special_functions/bessel.hpp>
+#include <boost/math/special_functions/bessel_prime.hpp>
#include <boost/math/special_functions/beta.hpp>
#include <boost/math/special_functions/binomial.hpp>
#include <boost/math/special_functions/cbrt.hpp>
diff --git a/3party/boost/boost/math/special_functions/acosh.hpp b/3party/boost/boost/math/special_functions/acosh.hpp
index 5a43ae57d8..0af5c94c14 100644
--- a/3party/boost/boost/math/special_functions/acosh.hpp
+++ b/3party/boost/boost/math/special_functions/acosh.hpp
@@ -31,17 +31,6 @@ namespace boost
{
namespace detail
{
-#if defined(__GNUC__) && (__GNUC__ < 3)
- // gcc 2.x ignores function scope using declarations,
- // put them in the scope of the enclosing namespace instead:
-
- using ::std::abs;
- using ::std::sqrt;
- using ::std::log;
-
- using ::std::numeric_limits;
-#endif
-
template<typename T, typename Policy>
inline T acosh_imp(const T x, const Policy& pol)
{
diff --git a/3party/boost/boost/math/special_functions/airy.hpp b/3party/boost/boost/math/special_functions/airy.hpp
index 08f6aeec45..82167dc5f0 100644
--- a/3party/boost/boost/math/special_functions/airy.hpp
+++ b/3party/boost/boost/math/special_functions/airy.hpp
@@ -7,6 +7,8 @@
#ifndef BOOST_MATH_AIRY_HPP
#define BOOST_MATH_AIRY_HPP
+#include <limits>
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/bessel.hpp>
#include <boost/math/special_functions/cbrt.hpp>
#include <boost/math/special_functions/detail/airy_ai_bi_zero.hpp>
@@ -154,10 +156,17 @@ T airy_bi_prime_imp(T x, const Policy& pol)
}
template <class T, class Policy>
-T airy_ai_zero_imp(unsigned m, const Policy& pol)
+T airy_ai_zero_imp(int m, const Policy& pol)
{
BOOST_MATH_STD_USING // ADL of std names, needed for log, sqrt.
+ // Handle cases when a negative zero (negative rank) is requested.
+ if(m < 0)
+ {
+ return policies::raise_domain_error<T>("boost::math::airy_ai_zero<%1%>(%1%, int)",
+ "Requested the %1%'th zero, but the rank must be 1 or more !", m, pol);
+ }
+
// Handle case when the zero'th zero is requested.
if(m == 0U)
{
@@ -168,22 +177,21 @@ T airy_ai_zero_imp(unsigned m, const Policy& pol)
// Set up the initial guess for the upcoming root-finding.
const T guess_root = boost::math::detail::airy_zero::airy_ai_zero_detail::initial_guess<T>(m);
- // Select the maximum allowed iterations, being at least 24.
- boost::uintmax_t number_of_iterations = (std::max)(24, int(std::numeric_limits<T>::digits10));
+ // Select the maximum allowed iterations based on the number
+ // of decimal digits in the numeric type T, being at least 12.
+ const int my_digits10 = static_cast<int>(static_cast<float>(policies::digits<T, Policy>() * 0.301F));
+
+ const boost::uintmax_t iterations_allowed = static_cast<boost::uintmax_t>((std::max)(12, my_digits10 * 2));
- // Select the desired number of binary digits of precision.
- // Account for the radix of number representations having non-two radix!
- const int my_digits2 = int(float(std::numeric_limits<T>::digits)
- * ( log(float(std::numeric_limits<T>::radix))
- / log(2.0F)));
+ boost::uintmax_t iterations_used = iterations_allowed;
// Use a dynamic tolerance because the roots get closer the higher m gets.
T tolerance;
- if (m <= 10U) { tolerance = T(0.3F); }
- else if(m <= 100U) { tolerance = T(0.1F); }
- else if(m <= 1000U) { tolerance = T(0.05F); }
- else { tolerance = T(1) / sqrt(T(m)); }
+ if (m <= 10) { tolerance = T(0.3F); }
+ else if(m <= 100) { tolerance = T(0.1F); }
+ else if(m <= 1000) { tolerance = T(0.05F); }
+ else { tolerance = T(1) / sqrt(T(m)); }
// Perform the root-finding using Newton-Raphson iteration from Boost.Math.
const T am =
@@ -192,19 +200,26 @@ T airy_ai_zero_imp(unsigned m, const Policy& pol)
guess_root,
T(guess_root - tolerance),
T(guess_root + tolerance),
- my_digits2,
- number_of_iterations);
+ policies::digits<T, Policy>(),
+ iterations_used);
- static_cast<void>(number_of_iterations);
+ static_cast<void>(iterations_used);
return am;
}
template <class T, class Policy>
-T airy_bi_zero_imp(unsigned m, const Policy& pol)
+T airy_bi_zero_imp(int m, const Policy& pol)
{
BOOST_MATH_STD_USING // ADL of std names, needed for log, sqrt.
+ // Handle cases when a negative zero (negative rank) is requested.
+ if(m < 0)
+ {
+ return policies::raise_domain_error<T>("boost::math::airy_bi_zero<%1%>(%1%, int)",
+ "Requested the %1%'th zero, but the rank must 1 or more !", m, pol);
+ }
+
// Handle case when the zero'th zero is requested.
if(m == 0U)
{
@@ -214,22 +229,21 @@ T airy_bi_zero_imp(unsigned m, const Policy& pol)
// Set up the initial guess for the upcoming root-finding.
const T guess_root = boost::math::detail::airy_zero::airy_bi_zero_detail::initial_guess<T>(m);
- // Select the maximum allowed iterations, being at least 24.
- boost::uintmax_t number_of_iterations = (std::max)(24, int(std::numeric_limits<T>::digits10));
+ // Select the maximum allowed iterations based on the number
+ // of decimal digits in the numeric type T, being at least 12.
+ const int my_digits10 = static_cast<int>(static_cast<float>(policies::digits<T, Policy>() * 0.301F));
- // Select the desired number of binary digits of precision.
- // Account for the radix of number representations having non-two radix!
- const int my_digits2 = int(float(std::numeric_limits<T>::digits)
- * ( log(float(std::numeric_limits<T>::radix))
- / log(2.0F)));
+ const boost::uintmax_t iterations_allowed = static_cast<boost::uintmax_t>((std::max)(12, my_digits10 * 2));
+
+ boost::uintmax_t iterations_used = iterations_allowed;
// Use a dynamic tolerance because the roots get closer the higher m gets.
T tolerance;
- if (m <= 10U) { tolerance = T(0.3F); }
- else if(m <= 100U) { tolerance = T(0.1F); }
- else if(m <= 1000U) { tolerance = T(0.05F); }
- else { tolerance = T(1) / sqrt(T(m)); }
+ if (m <= 10) { tolerance = T(0.3F); }
+ else if(m <= 100) { tolerance = T(0.1F); }
+ else if(m <= 1000) { tolerance = T(0.05F); }
+ else { tolerance = T(1) / sqrt(T(m)); }
// Perform the root-finding using Newton-Raphson iteration from Boost.Math.
const T bm =
@@ -238,10 +252,10 @@ T airy_bi_zero_imp(unsigned m, const Policy& pol)
guess_root,
T(guess_root - tolerance),
T(guess_root + tolerance),
- my_digits2,
- number_of_iterations);
+ policies::digits<T, Policy>(),
+ iterations_used);
- static_cast<void>(number_of_iterations);
+ static_cast<void>(iterations_used);
return bm;
}
@@ -337,7 +351,7 @@ inline typename tools::promote_args<T>::type airy_bi_prime(T x)
}
template <class T, class Policy>
-inline T airy_ai_zero(unsigned m, const Policy& pol)
+inline T airy_ai_zero(int m, const Policy& /*pol*/)
{
BOOST_FPU_EXCEPTION_GUARD
typedef typename policies::evaluation<T, Policy>::type value_type;
@@ -347,25 +361,34 @@ inline T airy_ai_zero(unsigned m, const Policy& pol)
policies::promote_double<false>,
policies::discrete_quantile<>,
policies::assert_undefined<> >::type forwarding_policy;
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<T>::is_integer, "Airy return type must be a floating-point type.");
- return policies::checked_narrowing_cast<T, Policy>(detail::airy_ai_zero_imp<T>(m, pol), "boost::math::airy_ai_zero<%1%>(unsigned)");
+
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Airy value type must be a floating-point type.");
+
+ return policies::checked_narrowing_cast<T, Policy>(detail::airy_ai_zero_imp<value_type>(m, forwarding_policy()), "boost::math::airy_ai_zero<%1%>(unsigned)");
}
template <class T>
-inline T airy_ai_zero(unsigned m)
+inline T airy_ai_zero(int m)
{
return airy_ai_zero<T>(m, policies::policy<>());
}
template <class T, class OutputIterator, class Policy>
inline OutputIterator airy_ai_zero(
- unsigned start_index,
+ int start_index,
unsigned number_of_zeros,
OutputIterator out_it,
const Policy& pol)
{
typedef T result_type;
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<result_type>::is_integer, "Airy return type must be a floating-point type.");
+
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Airy value type must be a floating-point type.");
for(unsigned i = 0; i < number_of_zeros; ++i)
{
@@ -377,7 +400,7 @@ inline OutputIterator airy_ai_zero(
template <class T, class OutputIterator>
inline OutputIterator airy_ai_zero(
- unsigned start_index,
+ int start_index,
unsigned number_of_zeros,
OutputIterator out_it)
{
@@ -385,7 +408,7 @@ inline OutputIterator airy_ai_zero(
}
template <class T, class Policy>
-inline T airy_bi_zero(unsigned m, const Policy& pol)
+inline T airy_bi_zero(int m, const Policy& /*pol*/)
{
BOOST_FPU_EXCEPTION_GUARD
typedef typename policies::evaluation<T, Policy>::type value_type;
@@ -395,25 +418,34 @@ inline T airy_bi_zero(unsigned m, const Policy& pol)
policies::promote_double<false>,
policies::discrete_quantile<>,
policies::assert_undefined<> >::type forwarding_policy;
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<T>::is_integer, "Airy return type must be a floating-point type.");
- return policies::checked_narrowing_cast<T, Policy>(detail::airy_bi_zero_imp<T>(m, pol), "boost::math::airy_bi_zero<%1%>(unsigned)");
+
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Airy value type must be a floating-point type.");
+
+ return policies::checked_narrowing_cast<T, Policy>(detail::airy_bi_zero_imp<value_type>(m, forwarding_policy()), "boost::math::airy_bi_zero<%1%>(unsigned)");
}
template <typename T>
-inline T airy_bi_zero(unsigned m)
+inline T airy_bi_zero(int m)
{
return airy_bi_zero<T>(m, policies::policy<>());
}
template <class T, class OutputIterator, class Policy>
inline OutputIterator airy_bi_zero(
- unsigned start_index,
+ int start_index,
unsigned number_of_zeros,
OutputIterator out_it,
const Policy& pol)
{
typedef T result_type;
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<result_type>::is_integer, "Airy return type must be a floating-point type.");
+
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Airy value type must be a floating-point type.");
for(unsigned i = 0; i < number_of_zeros; ++i)
{
@@ -425,7 +457,7 @@ inline OutputIterator airy_bi_zero(
template <class T, class OutputIterator>
inline OutputIterator airy_bi_zero(
- unsigned start_index,
+ int start_index,
unsigned number_of_zeros,
OutputIterator out_it)
{
diff --git a/3party/boost/boost/math/special_functions/asinh.hpp b/3party/boost/boost/math/special_functions/asinh.hpp
index 0534f550d4..a863e68854 100644
--- a/3party/boost/boost/math/special_functions/asinh.hpp
+++ b/3party/boost/boost/math/special_functions/asinh.hpp
@@ -31,17 +31,6 @@ namespace boost
namespace math
{
namespace detail{
-#if defined(__GNUC__) && (__GNUC__ < 3)
- // gcc 2.x ignores function scope using declarations,
- // put them in the scope of the enclosing namespace instead:
-
- using ::std::abs;
- using ::std::sqrt;
- using ::std::log;
-
- using ::std::numeric_limits;
-#endif
-
template<typename T, class Policy>
inline T asinh_imp(const T x, const Policy& pol)
{
diff --git a/3party/boost/boost/math/special_functions/atanh.hpp b/3party/boost/boost/math/special_functions/atanh.hpp
index b06f2ae5ce..2c5e3f4b78 100644
--- a/3party/boost/boost/math/special_functions/atanh.hpp
+++ b/3party/boost/boost/math/special_functions/atanh.hpp
@@ -31,17 +31,6 @@ namespace boost
{
namespace detail
{
-#if defined(__GNUC__) && (__GNUC__ < 3)
- // gcc 2.x ignores function scope using declarations,
- // put them in the scope of the enclosing namespace instead:
-
- using ::std::abs;
- using ::std::sqrt;
- using ::std::log;
-
- using ::std::numeric_limits;
-#endif
-
// This is the main fare
template<typename T, typename Policy>
diff --git a/3party/boost/boost/math/special_functions/bernoulli.hpp b/3party/boost/boost/math/special_functions/bernoulli.hpp
new file mode 100644
index 0000000000..2c2ccd5236
--- /dev/null
+++ b/3party/boost/boost/math/special_functions/bernoulli.hpp
@@ -0,0 +1,143 @@
+
+///////////////////////////////////////////////////////////////////////////////
+// Copyright 2013 Nikhar Agrawal
+// Copyright 2013 Christopher Kormanyos
+// Copyright 2013 John Maddock
+// Copyright 2013 Paul Bristow
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef _BOOST_BERNOULLI_B2N_2013_05_30_HPP_
+#define _BOOST_BERNOULLI_B2N_2013_05_30_HPP_
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include <boost/math/special_functions/detail/unchecked_bernoulli.hpp>
+#include <boost/math/special_functions/detail/bernoulli_details.hpp>
+
+namespace boost { namespace math {
+
+namespace detail {
+
+template <class T, class OutputIterator, class Policy, int N>
+OutputIterator bernoulli_number_imp(OutputIterator out, std::size_t start, std::size_t n, const Policy& pol, const mpl::int_<N>& tag)
+{
+ for(std::size_t i = start; (i <= max_bernoulli_b2n<T>::value) && (i < start + n); ++i)
+ {
+ *out = unchecked_bernoulli_imp<T>(i, tag);
+ ++out;
+ }
+
+ for(std::size_t i = (std::max)(static_cast<std::size_t>(max_bernoulli_b2n<T>::value + 1), start); i < start + n; ++i)
+ {
+ // We must overflow:
+ *out = (i & 1 ? 1 : -1) * policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(n)", 0, T(i), pol);
+ ++out;
+ }
+ return out;
+}
+
+template <class T, class OutputIterator, class Policy>
+OutputIterator bernoulli_number_imp(OutputIterator out, std::size_t start, std::size_t n, const Policy& pol, const mpl::int_<0>& tag)
+{
+ for(std::size_t i = start; (i <= max_bernoulli_b2n<T>::value) && (i < start + n); ++i)
+ {
+ *out = unchecked_bernoulli_imp<T>(i, tag);
+ ++out;
+ }
+ //
+ // Short circuit return so we don't grab the mutex below unless we have to:
+ //
+ if(start + n <= max_bernoulli_b2n<T>::value)
+ return out;
+
+ return get_bernoulli_numbers_cache<T, Policy>().copy_bernoulli_numbers(out, start, n, pol);
+}
+
+} // namespace detail
+
+template <class T, class Policy>
+inline T bernoulli_b2n(const int i, const Policy &pol)
+{
+ typedef mpl::int_<detail::bernoulli_imp_variant<T>::value> tag_type;
+ if(i < 0)
+ return policies::raise_domain_error<T>("boost::math::bernoulli_b2n<%1%>", "Index should be >= 0 but got %1%", T(i), pol);
+
+ T result;
+ boost::math::detail::bernoulli_number_imp<T>(&result, static_cast<std::size_t>(i), 1u, pol, tag_type());
+ return result;
+}
+
+template <class T>
+inline T bernoulli_b2n(const int i)
+{
+ return boost::math::bernoulli_b2n<T>(i, policies::policy<>());
+}
+
+template <class T, class OutputIterator, class Policy>
+inline OutputIterator bernoulli_b2n(const int start_index,
+ const unsigned number_of_bernoullis_b2n,
+ OutputIterator out_it,
+ const Policy& pol)
+{
+ typedef mpl::int_<detail::bernoulli_imp_variant<T>::value> tag_type;
+ if(start_index < 0)
+ {
+ *out_it = policies::raise_domain_error<T>("boost::math::bernoulli_b2n<%1%>", "Index should be >= 0 but got %1%", T(start_index), pol);
+ return ++out_it;
+ }
+
+ return boost::math::detail::bernoulli_number_imp<T>(out_it, start_index, number_of_bernoullis_b2n, pol, tag_type());
+}
+
+template <class T, class OutputIterator>
+inline OutputIterator bernoulli_b2n(const int start_index,
+ const unsigned number_of_bernoullis_b2n,
+ OutputIterator out_it)
+{
+ return boost::math::bernoulli_b2n<T, OutputIterator>(start_index, number_of_bernoullis_b2n, out_it, policies::policy<>());
+}
+
+template <class T, class Policy>
+inline T tangent_t2n(const int i, const Policy &pol)
+{
+ if(i < 0)
+ return policies::raise_domain_error<T>("boost::math::tangent_t2n<%1%>", "Index should be >= 0 but got %1%", T(i), pol);
+
+ T result;
+ boost::math::detail::get_bernoulli_numbers_cache<T, Policy>().copy_tangent_numbers(&result, i, 1, pol);
+ return result;
+}
+
+template <class T>
+inline T tangent_t2n(const int i)
+{
+ return boost::math::tangent_t2n<T>(i, policies::policy<>());
+}
+
+template <class T, class OutputIterator, class Policy>
+inline OutputIterator tangent_t2n(const int start_index,
+ const unsigned number_of_tangent_t2n,
+ OutputIterator out_it,
+ const Policy& pol)
+{
+ if(start_index < 0)
+ {
+ *out_it = policies::raise_domain_error<T>("boost::math::tangent_t2n<%1%>", "Index should be >= 0 but got %1%", T(start_index), pol);
+ return ++out_it;
+ }
+
+ return boost::math::detail::get_bernoulli_numbers_cache<T, Policy>().copy_tangent_numbers(out_it, start_index, number_of_tangent_t2n, pol);
+}
+
+template <class T, class OutputIterator>
+inline OutputIterator tangent_t2n(const int start_index,
+ const unsigned number_of_tangent_t2n,
+ OutputIterator out_it)
+{
+ return boost::math::tangent_t2n<T, OutputIterator>(start_index, number_of_tangent_t2n, out_it, policies::policy<>());
+}
+
+} } // namespace boost::math
+
+#endif // _BOOST_BERNOULLI_B2N_2013_05_30_HPP_
diff --git a/3party/boost/boost/math/special_functions/bessel.hpp b/3party/boost/boost/math/special_functions/bessel.hpp
index b1e03bfbed..438b763ab7 100644
--- a/3party/boost/boost/math/special_functions/bessel.hpp
+++ b/3party/boost/boost/math/special_functions/bessel.hpp
@@ -15,6 +15,8 @@
# pragma once
#endif
+#include <limits>
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/detail/bessel_jy.hpp>
#include <boost/math/special_functions/detail/bessel_jn.hpp>
#include <boost/math/special_functions/detail/bessel_yn.hpp>
@@ -48,7 +50,13 @@ struct sph_bessel_j_small_z_series_term
{
BOOST_MATH_STD_USING
mult = x / 2;
- term = pow(mult, T(v)) / boost::math::tgamma(v+1+T(0.5f), Policy());
+ if(v + 3 > max_factorial<T>::value)
+ {
+ term = v * log(mult) - boost::math::lgamma(v+1+T(0.5f), Policy());
+ term = exp(term);
+ }
+ else
+ term = pow(mult, T(v)) / boost::math::tgamma(v+1+T(0.5f), Policy());
mult *= -mult;
}
T operator()()
@@ -142,6 +150,11 @@ inline T sph_bessel_j_imp(unsigned n, T x, const Policy& pol)
if(n == 0)
return boost::math::sinc_pi(x, pol);
//
+ // Special case for x == 0:
+ //
+ if(x == 0)
+ return 0;
+ //
// When x is small we may end up with 0/0, use series evaluation
// instead, especially as it converges rapidly:
//
@@ -412,10 +425,6 @@ inline T cyl_bessel_j_zero_imp(T v, int m, const Policy& pol)
// Select the maximum allowed iterations from the policy.
boost::uintmax_t number_of_iterations = policies::get_max_root_iterations<Policy>();
- // Select the desired number of binary digits of precision.
- // Account for the radix of number representations having non-two radix!
- const int my_digits2 = policies::digits<T, Policy>();
-
const T delta_lo = ((guess_root > 0.2F) ? T(0.2) : T(guess_root / 2U));
// Perform the root-finding using Newton-Raphson iteration from Boost.Math.
@@ -425,12 +434,12 @@ inline T cyl_bessel_j_zero_imp(T v, int m, const Policy& pol)
guess_root,
T(guess_root - delta_lo),
T(guess_root + 0.2F),
- my_digits2,
+ policies::digits<T, Policy>(),
number_of_iterations);
if(number_of_iterations >= policies::get_max_root_iterations<Policy>())
{
- policies::raise_evaluation_error<T>(function, "Unable to locate root in a reasonable time:"
+ return policies::raise_evaluation_error<T>(function, "Unable to locate root in a reasonable time:"
" Current best guess is %1%", jvm, Policy());
}
@@ -495,10 +504,6 @@ inline T cyl_neumann_zero_imp(T v, int m, const Policy& pol)
// Select the maximum allowed iterations from the policy.
boost::uintmax_t number_of_iterations = policies::get_max_root_iterations<Policy>();
- // Select the desired number of binary digits of precision.
- // Account for the radix of number representations having non-two radix!
- const int my_digits2 = policies::digits<T, Policy>();
-
const T delta_lo = ((guess_root > 0.2F) ? T(0.2) : T(guess_root / 2U));
// Perform the root-finding using Newton-Raphson iteration from Boost.Math.
@@ -508,12 +513,12 @@ inline T cyl_neumann_zero_imp(T v, int m, const Policy& pol)
guess_root,
T(guess_root - delta_lo),
T(guess_root + 0.2F),
- my_digits2,
+ policies::digits<T, Policy>(),
number_of_iterations);
if(number_of_iterations >= policies::get_max_root_iterations<Policy>())
{
- policies::raise_evaluation_error<T>(function, "Unable to locate root in a reasonable time:"
+ return policies::raise_evaluation_error<T>(function, "Unable to locate root in a reasonable time:"
" Current best guess is %1%", yvm, Policy());
}
@@ -663,14 +668,23 @@ inline typename detail::bessel_traits<T, T, Policy>::result_type cyl_bessel_j_ze
policies::promote_double<false>,
policies::discrete_quantile<>,
policies::assert_undefined<> >::type forwarding_policy;
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<value_type>::is_integer, "Order must be a floating-point type.");
+
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Order must be a floating-point type.");
+
return policies::checked_narrowing_cast<result_type, Policy>(detail::cyl_bessel_j_zero_imp<value_type>(v, m, forwarding_policy()), "boost::math::cyl_bessel_j_zero<%1%>(%1%,%1%)");
}
template <class T>
inline typename detail::bessel_traits<T, T, policies::policy<> >::result_type cyl_bessel_j_zero(T v, int m)
{
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<T>::is_integer, "Order must be a floating-point type.");
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Order must be a floating-point type.");
+
return cyl_bessel_j_zero<T, policies::policy<> >(v, m, policies::policy<>());
}
@@ -681,8 +695,12 @@ inline OutputIterator cyl_bessel_j_zero(T v,
OutputIterator out_it,
const Policy& pol)
{
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<T>::is_integer, "Order must be a floating-point type.");
- for(unsigned i = 0; i < number_of_zeros; ++i)
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Order must be a floating-point type.");
+
+ for(int i = 0; i < static_cast<int>(number_of_zeros); ++i)
{
*out_it = boost::math::cyl_bessel_j_zero(v, start_index + i, pol);
++out_it;
@@ -711,14 +729,23 @@ inline typename detail::bessel_traits<T, T, Policy>::result_type cyl_neumann_zer
policies::promote_double<false>,
policies::discrete_quantile<>,
policies::assert_undefined<> >::type forwarding_policy;
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<value_type>::is_integer, "Order must be a floating-point type.");
+
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Order must be a floating-point type.");
+
return policies::checked_narrowing_cast<result_type, Policy>(detail::cyl_neumann_zero_imp<value_type>(v, m, forwarding_policy()), "boost::math::cyl_neumann_zero<%1%>(%1%,%1%)");
}
template <class T>
inline typename detail::bessel_traits<T, T, policies::policy<> >::result_type cyl_neumann_zero(T v, int m)
{
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<T>::is_integer, "Order must be a floating-point type.");
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Order must be a floating-point type.");
+
return cyl_neumann_zero<T, policies::policy<> >(v, m, policies::policy<>());
}
@@ -729,8 +756,12 @@ inline OutputIterator cyl_neumann_zero(T v,
OutputIterator out_it,
const Policy& pol)
{
- BOOST_STATIC_ASSERT_MSG(false == std::numeric_limits<T>::is_integer, "Order must be a floating-point type.");
- for(unsigned i = 0; i < number_of_zeros; ++i)
+ BOOST_STATIC_ASSERT_MSG( false == std::numeric_limits<T>::is_specialized
+ || ( true == std::numeric_limits<T>::is_specialized
+ && false == std::numeric_limits<T>::is_integer),
+ "Order must be a floating-point type.");
+
+ for(int i = 0; i < static_cast<int>(number_of_zeros); ++i)
{
*out_it = boost::math::cyl_neumann_zero(v, start_index + i, pol);
++out_it;
@@ -752,3 +783,4 @@ inline OutputIterator cyl_neumann_zero(T v,
#endif // BOOST_MATH_BESSEL_HPP
+
diff --git a/3party/boost/boost/math/special_functions/bessel_prime.hpp b/3party/boost/boost/math/special_functions/bessel_prime.hpp
new file mode 100644
index 0000000000..c5f2d58c2b
--- /dev/null
+++ b/3party/boost/boost/math/special_functions/bessel_prime.hpp
@@ -0,0 +1,359 @@
+// Copyright (c) 2013 Anton Bikineev
+// 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_BESSEL_DERIVATIVES_HPP
+#define BOOST_MATH_BESSEL_DERIVATIVES_HPP
+
+#ifdef _MSC_VER
+# pragma once
+#endif
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include <boost/math/special_functions/bessel.hpp>
+#include <boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp>
+#include <boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp>
+#include <boost/math/special_functions/detail/bessel_derivatives_linear.hpp>
+
+namespace boost{ namespace math{
+
+namespace detail{
+
+template <class Tag, class T, class Policy>
+inline T cyl_bessel_j_prime_imp(T v, T x, const Policy& pol)
+{
+ static const char* const function = "boost::math::cyl_bessel_j_prime<%1%>(%1%,%1%)";
+ BOOST_MATH_STD_USING
+ //
+ // Prevent complex result:
+ //
+ if (x < 0 && floor(v) != v)
+ return boost::math::policies::raise_domain_error<T>(
+ function,
+ "Got x = %1%, but function requires x >= 0", x, pol);
+ //
+ // Special cases for x == 0:
+ //
+ if (x == 0)
+ {
+ if (v == 1)
+ return 0.5;
+ else if (v == -1)
+ return -0.5;
+ else if (floor(v) == v || v > 1)
+ return 0;
+ else return boost::math::policies::raise_domain_error<T>(
+ function,
+ "Got x = %1%, but function is indeterminate for this order", x, pol);
+ }
+ //
+ // Special case for large x: use asymptotic expansion:
+ //
+ if (boost::math::detail::asymptotic_bessel_derivative_large_x_limit(v, x))
+ return boost::math::detail::asymptotic_bessel_j_derivative_large_x_2(v, x);
+ //
+ // Special case for small x: use Taylor series:
+ //
+ if ((abs(x) < 5) || (abs(v) > x * x / 4))
+ {
+ bool inversed = false;
+ if (floor(v) == v && v < 0)
+ {
+ v = -v;
+ if (itrunc(v, pol) & 1)
+ inversed = true;
+ }
+ T r = boost::math::detail::bessel_j_derivative_small_z_series(v, x, pol);
+ return inversed ? T(-r) : r;
+ }
+ //
+ // Special case for v == 0:
+ //
+ if (v == 0)
+ return -boost::math::detail::cyl_bessel_j_imp<T>(1, x, Tag(), pol);
+ //
+ // Default case:
+ //
+ return boost::math::detail::bessel_j_derivative_linear(v, x, Tag(), pol);
+}
+
+template <class T, class Policy>
+inline T sph_bessel_j_prime_imp(unsigned v, T x, const Policy& pol)
+{
+ static const char* const function = "boost::math::sph_bessel_prime<%1%>(%1%,%1%)";
+ //
+ // Prevent complex result:
+ //
+ if (x < 0)
+ return boost::math::policies::raise_domain_error<T>(
+ function,
+ "Got x = %1%, but function requires x >= 0.", x, pol);
+ //
+ // Special case for v == 0:
+ //
+ if (v == 0)
+ return (x == 0) ? boost::math::policies::raise_overflow_error<T>(function, 0, pol)
+ : static_cast<T>(-boost::math::detail::sph_bessel_j_imp<T>(1, x, pol));
+ //
+ // Special case for x == 0 and v > 0:
+ //
+ if (x == 0)
+ return boost::math::policies::raise_domain_error<T>(
+ function,
+ "Got x = %1%, but function is indeterminate for this order", x, pol);
+ //
+ // Default case:
+ //
+ return boost::math::detail::sph_bessel_j_derivative_linear(v, x, pol);
+}
+
+template <class T, class Policy>
+inline T cyl_bessel_i_prime_imp(T v, T x, const Policy& pol)
+{
+ static const char* const function = "boost::math::cyl_bessel_i_prime<%1%>(%1%,%1%)";
+ BOOST_MATH_STD_USING
+ //
+ // Prevent complex result:
+ //
+ if (x < 0 && floor(v) != v)
+ return boost::math::policies::raise_domain_error<T>(
+ function,
+ "Got x = %1%, but function requires x >= 0", x, pol);
+ //
+ // Special cases for x == 0:
+ //
+ if (x == 0)
+ {
+ if (v == 1 || v == -1)
+ return 0.5;
+ else if (floor(v) == v || v > 1)
+ return 0;
+ else return boost::math::policies::raise_domain_error<T>(
+ function,
+ "Got x = %1%, but function is indeterminate for this order", x, pol);
+ }
+ //
+ // Special case for v == 0:
+ //
+ if (v == 0)
+ return boost::math::detail::cyl_bessel_i_imp<T>(1, x, pol);
+ //
+ // Default case:
+ //
+ return boost::math::detail::bessel_i_derivative_linear(v, x, pol);
+}
+
+template <class Tag, class T, class Policy>
+inline T cyl_bessel_k_prime_imp(T v, T x, const Policy& pol)
+{
+ //
+ // Prevent complex and indeterminate results:
+ //
+ if (x <= 0)
+ return boost::math::policies::raise_domain_error<T>(
+ "boost::math::cyl_bessel_k_prime<%1%>(%1%,%1%)",
+ "Got x = %1%, but function requires x > 0", x, pol);
+ //
+ // Special case for v == 0:
+ //
+ if (v == 0)
+ return -boost::math::detail::cyl_bessel_k_imp<T>(1, x, Tag(), pol);
+ //
+ // Default case:
+ //
+ return boost::math::detail::bessel_k_derivative_linear(v, x, Tag(), pol);
+}
+
+template <class Tag, class T, class Policy>
+inline T cyl_neumann_prime_imp(T v, T x, const Policy& pol)
+{
+ BOOST_MATH_STD_USING
+ //
+ // Prevent complex and indeterminate results:
+ //
+ if (x <= 0)
+ return boost::math::policies::raise_domain_error<T>(
+ "boost::math::cyl_neumann_prime<%1%>(%1%,%1%)",
+ "Got x = %1%, but function requires x > 0", x, pol);
+ //
+ // Special case for large x: use asymptotic expansion:
+ //
+ if (boost::math::detail::asymptotic_bessel_derivative_large_x_limit(v, x))
+ return boost::math::detail::asymptotic_bessel_y_derivative_large_x_2(v, x);
+ //
+ // Special case for small x: use Taylor series:
+ //
+ if (v > 0 && floor(v) != v)
+ {
+ const T eps = boost::math::policies::get_epsilon<T, Policy>();
+ if (log(eps / 2) > v * log((x * x) / (v * 4)))
+ return boost::math::detail::bessel_y_derivative_small_z_series(v, x, pol);
+ }
+ //
+ // Special case for v == 0:
+ //
+ if (v == 0)
+ return -boost::math::detail::cyl_neumann_imp<T>(1, x, Tag(), pol);
+ //
+ // Default case:
+ //
+ return boost::math::detail::bessel_y_derivative_linear(v, x, Tag(), pol);
+}
+
+template <class T, class Policy>
+inline T sph_neumann_prime_imp(unsigned v, T x, const Policy& pol)
+{
+ //
+ // Prevent complex and indeterminate result:
+ //
+ if (x <= 0)
+ return boost::math::policies::raise_domain_error<T>(
+ "boost::math::sph_neumann_prime<%1%>(%1%,%1%)",
+ "Got x = %1%, but function requires x > 0.", x, pol);
+ //
+ // Special case for v == 0:
+ //
+ if (v == 0)
+ return -boost::math::detail::sph_neumann_imp<T>(1, x, pol);
+ //
+ // Default case:
+ //
+ return boost::math::detail::sph_neumann_derivative_linear(v, x, pol);
+}
+
+} // namespace detail
+
+template <class T1, class T2, class Policy>
+inline typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j_prime(T1 v, T2 x, const Policy& /* pol */)
+{
+ BOOST_FPU_EXCEPTION_GUARD
+ typedef typename detail::bessel_traits<T1, T2, Policy>::result_type result_type;
+ typedef typename detail::bessel_traits<T1, T2, Policy>::optimisation_tag tag_type;
+ typedef typename policies::evaluation<result_type, Policy>::type value_type;
+ typedef typename policies::normalise<
+ Policy,
+ policies::promote_float<false>,
+ policies::promote_double<false>,
+ policies::discrete_quantile<>,
+ policies::assert_undefined<> >::type forwarding_policy;
+ return policies::checked_narrowing_cast<result_type, Policy>(detail::cyl_bessel_j_prime_imp<tag_type, value_type>(v, static_cast<value_type>(x), forwarding_policy()), "boost::math::cyl_bessel_j_prime<%1%,%1%>(%1%,%1%)");
+}
+
+template <class T1, class T2>
+inline typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j_prime(T1 v, T2 x)
+{
+ return cyl_bessel_j_prime(v, x, policies::policy<>());
+}
+
+template <class T, class Policy>
+inline typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel_prime(unsigned v, T x, const Policy& /* pol */)
+{
+ BOOST_FPU_EXCEPTION_GUARD
+ typedef typename detail::bessel_traits<T, T, Policy>::result_type result_type;
+ typedef typename policies::evaluation<result_type, Policy>::type value_type;
+ typedef typename policies::normalise<
+ Policy,
+ policies::promote_float<false>,
+ policies::promote_double<false>,
+ policies::discrete_quantile<>,
+ policies::assert_undefined<> >::type forwarding_policy;
+ return policies::checked_narrowing_cast<result_type, Policy>(detail::sph_bessel_j_prime_imp<value_type>(v, static_cast<value_type>(x), forwarding_policy()), "boost::math::sph_bessel_j_prime<%1%>(%1%,%1%)");
+}
+
+template <class T>
+inline typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel_prime(unsigned v, T x)
+{
+ return sph_bessel_prime(v, x, policies::policy<>());
+}
+
+template <class T1, class T2, class Policy>
+inline typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i_prime(T1 v, T2 x, const Policy& /* pol */)
+{
+ BOOST_FPU_EXCEPTION_GUARD
+ typedef typename detail::bessel_traits<T1, T2, Policy>::result_type result_type;
+ typedef typename policies::evaluation<result_type, Policy>::type value_type;
+ typedef typename policies::normalise<
+ Policy,
+ policies::promote_float<false>,
+ policies::promote_double<false>,
+ policies::discrete_quantile<>,
+ policies::assert_undefined<> >::type forwarding_policy;
+ return policies::checked_narrowing_cast<result_type, Policy>(detail::cyl_bessel_i_prime_imp<value_type>(v, static_cast<value_type>(x), forwarding_policy()), "boost::math::cyl_bessel_i_prime<%1%>(%1%,%1%)");
+}
+
+template <class T1, class T2>
+inline typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i_prime(T1 v, T2 x)
+{
+ return cyl_bessel_i_prime(v, x, policies::policy<>());
+}
+
+template <class T1, class T2, class Policy>
+inline typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k_prime(T1 v, T2 x, const Policy& /* pol */)
+{
+ BOOST_FPU_EXCEPTION_GUARD
+ typedef typename detail::bessel_traits<T1, T2, Policy>::result_type result_type;
+ typedef typename detail::bessel_traits<T1, T2, Policy>::optimisation_tag tag_type;
+ typedef typename policies::evaluation<result_type, Policy>::type value_type;
+ typedef typename policies::normalise<
+ Policy,
+ policies::promote_float<false>,
+ policies::promote_double<false>,
+ policies::discrete_quantile<>,
+ policies::assert_undefined<> >::type forwarding_policy;
+ return policies::checked_narrowing_cast<result_type, Policy>(detail::cyl_bessel_k_prime_imp<tag_type, value_type>(v, static_cast<value_type>(x), forwarding_policy()), "boost::math::cyl_bessel_k_prime<%1%,%1%>(%1%,%1%)");
+}
+
+template <class T1, class T2>
+inline typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k_prime(T1 v, T2 x)
+{
+ return cyl_bessel_k_prime(v, x, policies::policy<>());
+}
+
+template <class T1, class T2, class Policy>
+inline typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann_prime(T1 v, T2 x, const Policy& /* pol */)
+{
+ BOOST_FPU_EXCEPTION_GUARD
+ typedef typename detail::bessel_traits<T1, T2, Policy>::result_type result_type;
+ typedef typename detail::bessel_traits<T1, T2, Policy>::optimisation_tag tag_type;
+ typedef typename policies::evaluation<result_type, Policy>::type value_type;
+ typedef typename policies::normalise<
+ Policy,
+ policies::promote_float<false>,
+ policies::promote_double<false>,
+ policies::discrete_quantile<>,
+ policies::assert_undefined<> >::type forwarding_policy;
+ return policies::checked_narrowing_cast<result_type, Policy>(detail::cyl_neumann_prime_imp<tag_type, value_type>(v, static_cast<value_type>(x), forwarding_policy()), "boost::math::cyl_neumann_prime<%1%,%1%>(%1%,%1%)");
+}
+
+template <class T1, class T2>
+inline typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann_prime(T1 v, T2 x)
+{
+ return cyl_neumann_prime(v, x, policies::policy<>());
+}
+
+template <class T, class Policy>
+inline typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann_prime(unsigned v, T x, const Policy& /* pol */)
+{
+ BOOST_FPU_EXCEPTION_GUARD
+ typedef typename detail::bessel_traits<T, T, Policy>::result_type result_type;
+ typedef typename policies::evaluation<result_type, Policy>::type value_type;
+ typedef typename policies::normalise<
+ Policy,
+ policies::promote_float<false>,
+ policies::promote_double<false>,
+ policies::discrete_quantile<>,
+ policies::assert_undefined<> >::type forwarding_policy;
+ return policies::checked_narrowing_cast<result_type, Policy>(detail::sph_neumann_prime_imp<value_type>(v, static_cast<value_type>(x), forwarding_policy()), "boost::math::sph_neumann_prime<%1%>(%1%,%1%)");
+}
+
+template <class T>
+inline typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann_prime(unsigned v, T x)
+{
+ return sph_neumann_prime(v, x, policies::policy<>());
+}
+
+} // namespace math
+} // namespace boost
+
+#endif // BOOST_MATH_BESSEL_DERIVATIVES_HPP
diff --git a/3party/boost/boost/math/special_functions/beta.hpp b/3party/boost/boost/math/special_functions/beta.hpp
index 40cc9efa4e..e48d713e3b 100644
--- a/3party/boost/boost/math/special_functions/beta.hpp
+++ b/3party/boost/boost/math/special_functions/beta.hpp
@@ -35,9 +35,9 @@ T beta_imp(T a, T b, const Lanczos&, const Policy& pol)
BOOST_MATH_STD_USING // for ADL of std names
if(a <= 0)
- policies::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got a=%1%).", a, pol);
+ return policies::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got a=%1%).", a, pol);
if(b <= 0)
- policies::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got b=%1%).", b, pol);
+ return policies::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got b=%1%).", b, pol);
T result;
@@ -119,9 +119,9 @@ T beta_imp(T a, T b, const lanczos::undefined_lanczos& /* l */, const Policy& po
BOOST_MATH_STD_USING
if(a <= 0)
- policies::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got a=%1%).", a, pol);
+ return policies::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got a=%1%).", a, pol);
if(b <= 0)
- policies::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got b=%1%).", b, pol);
+ return policies::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got b=%1%).", b, pol);
T result;
@@ -889,19 +889,19 @@ T ibeta_imp(T a, T b, T x, const Policy& pol, bool inv, bool normalised, T* p_de
*p_derivative = -1; // value not set.
if((x < 0) || (x > 1))
- policies::raise_domain_error<T>(function, "Parameter x outside the range [0,1] in the incomplete beta function (got x=%1%).", x, pol);
+ return policies::raise_domain_error<T>(function, "Parameter x outside the range [0,1] in the incomplete beta function (got x=%1%).", x, pol);
if(normalised)
{
if(a < 0)
- policies::raise_domain_error<T>(function, "The argument a to the incomplete beta function must be >= zero (got a=%1%).", a, pol);
+ return policies::raise_domain_error<T>(function, "The argument a to the incomplete beta function must be >= zero (got a=%1%).", a, pol);
if(b < 0)
- policies::raise_domain_error<T>(function, "The argument b to the incomplete beta function must be >= zero (got b=%1%).", b, pol);
+ return policies::raise_domain_error<T>(function, "The argument b to the incomplete beta function must be >= zero (got b=%1%).", b, pol);
// extend to a few very special cases:
if(a == 0)
{
if(b == 0)
- policies::raise_domain_error<T>(function, "The arguments a and b to the incomplete beta function cannot both be zero, with x=%1%.", x, pol);
+ return policies::raise_domain_error<T>(function, "The arguments a and b to the incomplete beta function cannot both be zero, with x=%1%.", x, pol);
if(b > 0)
return inv ? 0 : 1;
}
@@ -914,9 +914,9 @@ T ibeta_imp(T a, T b, T x, const Policy& pol, bool inv, bool normalised, T* p_de
else
{
if(a <= 0)
- policies::raise_domain_error<T>(function, "The argument a to the incomplete beta function must be greater than zero (got a=%1%).", a, pol);
+ return policies::raise_domain_error<T>(function, "The argument a to the incomplete beta function must be greater than zero (got a=%1%).", a, pol);
if(b <= 0)
- policies::raise_domain_error<T>(function, "The argument b to the incomplete beta function must be greater than zero (got b=%1%).", b, pol);
+ return policies::raise_domain_error<T>(function, "The argument b to the incomplete beta function must be greater than zero (got b=%1%).", b, pol);
}
if(x == 0)
@@ -935,6 +935,49 @@ T ibeta_imp(T a, T b, T x, const Policy& pol, bool inv, bool normalised, T* p_de
}
return (invert == 0 ? (normalised ? 1 : boost::math::beta(a, b, pol)) : 0);
}
+ if((a == 0.5f) && (b == 0.5f))
+ {
+ // We have an arcsine distribution:
+ if(p_derivative)
+ {
+ *p_derivative = (invert ? -1 : 1) / constants::pi<T>() * sqrt(y * x);
+ }
+ T p = invert ? asin(sqrt(y)) / constants::half_pi<T>() : asin(sqrt(x)) / constants::half_pi<T>();
+ if(!normalised)
+ p *= constants::pi<T>();
+ return p;
+ }
+ if(a == 1)
+ {
+ std::swap(a, b);
+ std::swap(x, y);
+ invert = !invert;
+ }
+ if(b == 1)
+ {
+ //
+ // Special case see: http://functions.wolfram.com/GammaBetaErf/BetaRegularized/03/01/01/
+ //
+ if(a == 1)
+ {
+ if(p_derivative)
+ *p_derivative = invert ? -1 : 1;
+ return invert ? y : x;
+ }
+
+ if(p_derivative)
+ {
+ *p_derivative = (invert ? -1 : 1) * a * pow(x, a - 1);
+ }
+ T p;
+ if(y < 0.5)
+ p = invert ? T(-boost::math::expm1(a * boost::math::log1p(-y, pol), pol)) : T(exp(a * boost::math::log1p(-y, pol)));
+ else
+ p = invert ? T(-boost::math::powm1(x, a, pol)) : T(pow(x, a));
+ if(!normalised)
+ p /= a;
+ return p;
+ }
if((std::min)(a, b) <= 1)
{
@@ -1238,11 +1281,11 @@ T ibeta_derivative_imp(T a, T b, T x, const Policy& pol)
// start with the usual error checks:
//
if(a <= 0)
- policies::raise_domain_error<T>(function, "The argument a to the incomplete beta function must be greater than zero (got a=%1%).", a, pol);
+ return policies::raise_domain_error<T>(function, "The argument a to the incomplete beta function must be greater than zero (got a=%1%).", a, pol);
if(b <= 0)
- policies::raise_domain_error<T>(function, "The argument b to the incomplete beta function must be greater than zero (got b=%1%).", b, pol);
+ return policies::raise_domain_error<T>(function, "The argument b to the incomplete beta function must be greater than zero (got b=%1%).", b, pol);
if((x < 0) || (x > 1))
- policies::raise_domain_error<T>(function, "Parameter x outside the range [0,1] in the incomplete beta function (got x=%1%).", x, pol);
+ return policies::raise_domain_error<T>(function, "Parameter x outside the range [0,1] in the incomplete beta function (got x=%1%).", x, pol);
//
// Now the corner cases:
//
@@ -1331,7 +1374,6 @@ inline typename tools::promote_args<RT1, RT2, RT3>::type
BOOST_FPU_EXCEPTION_GUARD
typedef typename tools::promote_args<RT1, RT2, RT3>::type result_type;
typedef typename policies::evaluation<result_type, Policy>::type value_type;
- typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
typedef typename policies::normalise<
Policy,
policies::promote_float<false>,
@@ -1349,7 +1391,6 @@ inline typename tools::promote_args<RT1, RT2, RT3>::type
BOOST_FPU_EXCEPTION_GUARD
typedef typename tools::promote_args<RT1, RT2, RT3>::type result_type;
typedef typename policies::evaluation<result_type, Policy>::type value_type;
- typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
typedef typename policies::normalise<
Policy,
policies::promote_float<false>,
diff --git a/3party/boost/boost/math/special_functions/binomial.hpp b/3party/boost/boost/math/special_functions/binomial.hpp
index 16b4f3305d..8fa2e26d84 100644
--- a/3party/boost/boost/math/special_functions/binomial.hpp
+++ b/3party/boost/boost/math/special_functions/binomial.hpp
@@ -10,6 +10,7 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/factorials.hpp>
#include <boost/math/special_functions/beta.hpp>
#include <boost/math/policies/error_handling.hpp>
diff --git a/3party/boost/boost/math/special_functions/cos_pi.hpp b/3party/boost/boost/math/special_functions/cos_pi.hpp
index 93102c1cb3..18d06c00df 100644
--- a/3party/boost/boost/math/special_functions/cos_pi.hpp
+++ b/3party/boost/boost/math/special_functions/cos_pi.hpp
@@ -10,6 +10,7 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/config/no_tr1/cmath.hpp>
#include <boost/math/tools/config.hpp>
#include <boost/math/special_functions/trunc.hpp>
diff --git a/3party/boost/boost/math/special_functions/detail/airy_ai_bi_zero.hpp b/3party/boost/boost/math/special_functions/detail/airy_ai_bi_zero.hpp
index d502f83dd7..dbb7388dda 100644
--- a/3party/boost/boost/math/special_functions/detail/airy_ai_bi_zero.hpp
+++ b/3party/boost/boost/math/special_functions/detail/airy_ai_bi_zero.hpp
@@ -54,26 +54,26 @@
namespace airy_ai_zero_detail
{
template<class T>
- T initial_guess(const unsigned m)
+ T initial_guess(const int m)
{
T guess;
switch(m)
{
- case 0U: { guess = T(0); break; }
- case 1U: { guess = T(-2.33810741045976703849); break; }
- case 2U: { guess = T(-4.08794944413097061664); break; }
- case 3U: { guess = T(-5.52055982809555105913); break; }
- case 4U: { guess = T(-6.78670809007175899878); break; }
- case 5U: { guess = T(-7.94413358712085312314); break; }
- case 6U: { guess = T(-9.02265085334098038016); break; }
- case 7U: { guess = T(-10.0401743415580859306); break; }
- case 8U: { guess = T(-11.0085243037332628932); break; }
- case 9U: { guess = T(-11.9360155632362625170); break; }
- case 10U:{ guess = T(-12.8287767528657572004); break; }
+ case 0: { guess = T(0); break; }
+ case 1: { guess = T(-2.33810741045976703849); break; }
+ case 2: { guess = T(-4.08794944413097061664); break; }
+ case 3: { guess = T(-5.52055982809555105913); break; }
+ case 4: { guess = T(-6.78670809007175899878); break; }
+ case 5: { guess = T(-7.94413358712085312314); break; }
+ case 6: { guess = T(-9.02265085334098038016); break; }
+ case 7: { guess = T(-10.0401743415580859306); break; }
+ case 8: { guess = T(-11.0085243037332628932); break; }
+ case 9: { guess = T(-11.9360155632362625170); break; }
+ case 10:{ guess = T(-12.8287767528657572004); break; }
default:
{
- const T t(((boost::math::constants::pi<T>() * 3U) * ((T(m) * 4U) - 1)) / 8U);
+ const T t(((boost::math::constants::pi<T>() * 3) * ((T(m) * 4) - 1)) / 8);
guess = -boost::math::detail::airy_zero::equation_as_10_4_105(t);
break;
}
@@ -105,26 +105,26 @@
namespace airy_bi_zero_detail
{
template<class T>
- T initial_guess(const unsigned m)
+ T initial_guess(const int m)
{
T guess;
switch(m)
{
- case 0U: { guess = T(0); break; }
- case 1U: { guess = T(-1.17371322270912792492); break; }
- case 2U: { guess = T(-3.27109330283635271568); break; }
- case 3U: { guess = T(-4.83073784166201593267); break; }
- case 4U: { guess = T(-6.16985212831025125983); break; }
- case 5U: { guess = T(-7.37676207936776371360); break; }
- case 6U: { guess = T(-8.49194884650938801345); break; }
- case 7U: { guess = T(-9.53819437934623888663); break; }
- case 8U: { guess = T(-10.5299135067053579244); break; }
- case 9U: { guess = T(-11.4769535512787794379); break; }
- case 10U:{ guess = T(-12.3864171385827387456); break; }
+ case 0: { guess = T(0); break; }
+ case 1: { guess = T(-1.17371322270912792492); break; }
+ case 2: { guess = T(-3.27109330283635271568); break; }
+ case 3: { guess = T(-4.83073784166201593267); break; }
+ case 4: { guess = T(-6.16985212831025125983); break; }
+ case 5: { guess = T(-7.37676207936776371360); break; }
+ case 6: { guess = T(-8.49194884650938801345); break; }
+ case 7: { guess = T(-9.53819437934623888663); break; }
+ case 8: { guess = T(-10.5299135067053579244); break; }
+ case 9: { guess = T(-11.4769535512787794379); break; }
+ case 10: { guess = T(-12.3864171385827387456); break; }
default:
{
- const T t(((boost::math::constants::pi<T>() * 3U) * ((T(m) * 4U) - 3)) / 8U);
+ const T t(((boost::math::constants::pi<T>() * 3) * ((T(m) * 4) - 3)) / 8);
guess = -boost::math::detail::airy_zero::equation_as_10_4_105(t);
break;
}
diff --git a/3party/boost/boost/math/special_functions/detail/bernoulli_details.hpp b/3party/boost/boost/math/special_functions/detail/bernoulli_details.hpp
new file mode 100644
index 0000000000..4114a0bd74
--- /dev/null
+++ b/3party/boost/boost/math/special_functions/detail/bernoulli_details.hpp
@@ -0,0 +1,652 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock
+// 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_MATH_BERNOULLI_DETAIL_HPP
+#define BOOST_MATH_BERNOULLI_DETAIL_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/lightweight_mutex.hpp>
+#include <boost/math/tools/toms748_solve.hpp>
+
+#ifdef BOOST_HAS_THREADS
+
+#ifndef BOOST_NO_CXX11_HDR_ATOMIC
+# include <atomic>
+# define BOOST_MATH_ATOMIC_NS std
+#if ATOMIC_INT_LOCK_FREE == 2
+typedef std::atomic<int> atomic_counter_type;
+typedef int atomic_integer_type;
+#elif ATOMIC_SHORT_LOCK_FREE == 2
+typedef std::atomic<short> atomic_counter_type;
+typedef short atomic_integer_type;
+#elif ATOMIC_LONG_LOCK_FREE == 2
+typedef std::atomic<long> atomic_counter_type;
+typedef long atomic_integer_type;
+#elif ATOMIC_LLONG_LOCK_FREE == 2
+typedef std::atomic<long long> atomic_counter_type;
+typedef long long atomic_integer_type;
+#else
+# define BOOST_MATH_NO_ATOMIC_INT
+#endif
+
+#else // BOOST_NO_CXX11_HDR_ATOMIC
+//
+// We need Boost.Atomic, but on any platform that supports auto-linking we do
+// not need to link against a separate library:
+//
+#define BOOST_ATOMIC_NO_LIB
+#include <boost/atomic.hpp>
+# define BOOST_MATH_ATOMIC_NS boost
+
+namespace boost{ namespace math{ namespace detail{
+
+//
+// We need a type to use as an atomic counter:
+//
+#if BOOST_ATOMIC_INT_LOCK_FREE == 2
+typedef boost::atomic<int> atomic_counter_type;
+typedef int atomic_integer_type;
+#elif BOOST_ATOMIC_SHORT_LOCK_FREE == 2
+typedef boost::atomic<short> atomic_counter_type;
+typedef short atomic_integer_type;
+#elif BOOST_ATOMIC_LONG_LOCK_FREE == 2
+typedef boost::atomic<long> atomic_counter_type;
+typedef long atomic_integer_type;
+#elif BOOST_ATOMIC_LLONG_LOCK_FREE == 2
+typedef boost::atomic<long long> atomic_counter_type;
+typedef long long atomic_integer_type;
+#else
+# define BOOST_MATH_NO_ATOMIC_INT
+#endif
+
+}}} // namespaces
+
+#endif // BOOST_NO_CXX11_HDR_ATOMIC
+
+#endif // BOOST_HAS_THREADS
+
+namespace boost{ namespace math{ namespace detail{
+//
+// Asymptotic expansion for B2n due to
+// Luschny LogB3 formula (http://www.luschny.de/math/primes/bernincl.html)
+//
+template <class T, class Policy>
+T b2n_asymptotic(int n)
+{
+ BOOST_MATH_STD_USING
+ const T nx = static_cast<T>(n);
+ const T nx2(nx * nx);
+
+ const T approximate_log_of_bernoulli_bn =
+ ((boost::math::constants::half<T>() + nx) * log(nx))
+ + ((boost::math::constants::half<T>() - nx) * log(boost::math::constants::pi<T>()))
+ + (((T(3) / 2) - nx) * boost::math::constants::ln_two<T>())
+ + ((nx * (T(2) - (nx2 * 7) * (1 + ((nx2 * 30) * ((nx2 * 12) - 1))))) / (((nx2 * nx2) * nx2) * 2520));
+ return ((n / 2) & 1 ? 1 : -1) * (approximate_log_of_bernoulli_bn > tools::log_max_value<T>()
+ ? policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, nx, Policy())
+ : static_cast<T>(exp(approximate_log_of_bernoulli_bn)));
+}
+
+template <class T, class Policy>
+T t2n_asymptotic(int n)
+{
+ BOOST_MATH_STD_USING
+ // Just get B2n and convert to a Tangent number:
+ T t2n = fabs(b2n_asymptotic<T, Policy>(2 * n)) / (2 * n);
+ T p2 = ldexp(T(1), n);
+ if(tools::max_value<T>() / p2 < t2n)
+ return policies::raise_overflow_error<T>("boost::math::tangent_t2n<%1%>(std::size_t)", 0, T(n), Policy());
+ t2n *= p2;
+ p2 -= 1;
+ if(tools::max_value<T>() / p2 < t2n)
+ return policies::raise_overflow_error<T>("boost::math::tangent_t2n<%1%>(std::size_t)", 0, Policy());
+ t2n *= p2;
+ return t2n;
+}
+//
+// We need to know the approximate value of /n/ which will
+// cause bernoulli_b2n<T>(n) to return infinity - this allows
+// us to elude a great deal of runtime checking for values below
+// n, and only perform the full overflow checks when we know that we're
+// getting close to the point where our calculations will overflow.
+// We use Luschny's LogB3 formula (http://www.luschny.de/math/primes/bernincl.html)
+// to find the limit, and since we're dealing with the log of the Bernoulli numbers
+// we need only perform the calculation at double precision and not with T
+// (which may be a multiprecision type). The limit returned is within 1 of the true
+// limit for all the types tested. Note that although the code below is basically
+// the same as b2n_asymptotic above, it has been recast as a continuous real-valued
+// function as this makes the root finding go smoother/faster. It also omits the
+// sign of the Bernoulli number.
+//
+struct max_bernoulli_root_functor
+{
+ max_bernoulli_root_functor(long long t) : target(static_cast<double>(t)) {}
+ double operator()(double n)
+ {
+ BOOST_MATH_STD_USING
+
+ // Luschny LogB3(n) formula.
+
+ const double nx2(n * n);
+
+ const double approximate_log_of_bernoulli_bn
+ = ((boost::math::constants::half<double>() + n) * log(n))
+ + ((boost::math::constants::half<double>() - n) * log(boost::math::constants::pi<double>()))
+ + (((double(3) / 2) - n) * boost::math::constants::ln_two<double>())
+ + ((n * (2 - (nx2 * 7) * (1 + ((nx2 * 30) * ((nx2 * 12) - 1))))) / (((nx2 * nx2) * nx2) * 2520));
+
+ return approximate_log_of_bernoulli_bn - target;
+ }
+private:
+ double target;
+};
+
+template <class T, class Policy>
+inline std::size_t find_bernoulli_overflow_limit(const mpl::false_&)
+{
+ long long t = lltrunc(boost::math::tools::log_max_value<T>());
+ max_bernoulli_root_functor fun(t);
+ boost::math::tools::equal_floor tol;
+ boost::uintmax_t max_iter = boost::math::policies::get_max_root_iterations<Policy>();
+ return static_cast<std::size_t>(boost::math::tools::toms748_solve(fun, sqrt(double(t)), double(t), tol, max_iter).first) / 2;
+}
+
+template <class T, class Policy>
+inline std::size_t find_bernoulli_overflow_limit(const mpl::true_&)
+{
+ return max_bernoulli_index<bernoulli_imp_variant<T>::value>::value;
+}
+
+template <class T, class Policy>
+std::size_t b2n_overflow_limit()
+{
+ // This routine is called at program startup if it's called at all:
+ // that guarantees safe initialization of the static variable.
+ typedef mpl::bool_<(bernoulli_imp_variant<T>::value >= 1) && (bernoulli_imp_variant<T>::value <= 3)> tag_type;
+ static const std::size_t lim = find_bernoulli_overflow_limit<T, Policy>(tag_type());
+ return lim;
+}
+
+//
+// The tangent numbers grow larger much more rapidly than the Bernoulli numbers do....
+// so to compute the Bernoulli numbers from the tangent numbers, we need to avoid spurious
+// overflow in the calculation, we can do this by scaling all the tangent number by some scale factor:
+//
+template <class T>
+inline typename enable_if_c<std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::radix == 2), T>::type tangent_scale_factor()
+{
+ BOOST_MATH_STD_USING
+ return ldexp(T(1), std::numeric_limits<T>::min_exponent + 5);
+}
+template <class T>
+inline typename disable_if_c<std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::radix == 2), T>::type tangent_scale_factor()
+{
+ return tools::min_value<T>() * 16;
+}
+//
+// Initializer: ensure all our constants are initialized prior to the first call of main:
+//
+template <class T, class Policy>
+struct bernoulli_initializer
+{
+ struct init
+ {
+ init()
+ {
+ //
+ // We call twice, once to initialize our static table, and once to
+ // initialize our dymanic table:
+ //
+ boost::math::bernoulli_b2n<T>(2, Policy());
+ try{
+ boost::math::bernoulli_b2n<T>(max_bernoulli_b2n<T>::value + 1, Policy());
+ } catch(const std::overflow_error&){}
+ boost::math::tangent_t2n<T>(2, Policy());
+ }
+ void force_instantiate()const{}
+ };
+ static const init initializer;
+ static void force_instantiate()
+ {
+ initializer.force_instantiate();
+ }
+};
+
+template <class T, class Policy>
+const typename bernoulli_initializer<T, Policy>::init bernoulli_initializer<T, Policy>::initializer;
+
+//
+// We need something to act as a cache for our calculated Bernoulli numbers. In order to
+// ensure both fast access and thread safety, we need a stable table which may be extended
+// in size, but which never reallocates: that way values already calculated may be accessed
+// concurrently with another thread extending the table with new values.
+//
+// Very very simple vector class that will never allocate more than once, we could use
+// boost::container::static_vector here, but that allocates on the stack, which may well
+// cause issues for the amount of memory we want in the extreme case...
+//
+template <class T>
+struct fixed_vector : private std::allocator<T>
+{
+ typedef unsigned size_type;
+ typedef T* iterator;
+ typedef const T* const_iterator;
+ fixed_vector() : m_used(0)
+ {
+ std::size_t overflow_limit = 5 + b2n_overflow_limit<T, policies::policy<> >();
+ m_capacity = static_cast<unsigned>((std::min)(overflow_limit, static_cast<std::size_t>(100000u)));
+ m_data = this->allocate(m_capacity);
+ }
+ ~fixed_vector()
+ {
+ for(unsigned i = 0; i < m_used; ++i)
+ this->destroy(&m_data[i]);
+ this->deallocate(m_data, m_capacity);
+ }
+ T& operator[](unsigned n) { BOOST_ASSERT(n < m_used); return m_data[n]; }
+ const T& operator[](unsigned n)const { BOOST_ASSERT(n < m_used); return m_data[n]; }
+ unsigned size()const { return m_used; }
+ unsigned size() { return m_used; }
+ void resize(unsigned n, const T& val)
+ {
+ if(n > m_capacity)
+ throw std::runtime_error("Exhausted storage for Bernoulli numbers.");
+ for(unsigned i = m_used; i < n; ++i)
+ new (m_data + i) T(val);
+ m_used = n;
+ }
+ void resize(unsigned n) { resize(n, T()); }
+ T* begin() { return m_data; }
+ T* end() { return m_data + m_used; }
+ T* begin()const { return m_data; }
+ T* end()const { return m_data + m_used; }
+ unsigned capacity()const { return m_capacity; }
+private:
+ T* m_data;
+ unsigned m_used, m_capacity;
+};
+
+template <class T, class Policy>
+class bernoulli_numbers_cache
+{
+public:
+ bernoulli_numbers_cache() : m_overflow_limit((std::numeric_limits<std::size_t>::max)())
+#if defined(BOOST_HAS_THREADS) && !defined(BOOST_MATH_NO_ATOMIC_INT)
+ , m_counter(0)
+#endif
+ {}
+
+ typedef fixed_vector<T> container_type;
+
+ void tangent(std::size_t m)
+ {
+ static const std::size_t min_overflow_index = b2n_overflow_limit<T, Policy>() - 1;
+ tn.resize(static_cast<typename container_type::size_type>(m), T(0U));
+
+ BOOST_MATH_INSTRUMENT_VARIABLE(min_overflow_index);
+
+ std::size_t prev_size = m_intermediates.size();
+ m_intermediates.resize(m, T(0U));
+
+ if(prev_size == 0)
+ {
+ m_intermediates[1] = tangent_scale_factor<T>() /*T(1U)*/;
+ tn[0U] = T(0U);
+ tn[1U] = tangent_scale_factor<T>()/* T(1U)*/;
+ BOOST_MATH_INSTRUMENT_VARIABLE(tn[0]);
+ BOOST_MATH_INSTRUMENT_VARIABLE(tn[1]);
+ }
+
+ for(std::size_t i = std::max<size_t>(2, prev_size); i < m; i++)
+ {
+ bool overflow_check = false;
+ if(i >= min_overflow_index && (boost::math::tools::max_value<T>() / (i-1) < m_intermediates[1]) )
+ {
+ std::fill(tn.begin() + i, tn.end(), boost::math::tools::max_value<T>());
+ break;
+ }
+ m_intermediates[1] = m_intermediates[1] * (i-1);
+ for(std::size_t j = 2; j <= i; j++)
+ {
+ overflow_check =
+ (i >= min_overflow_index) && (
+ (boost::math::tools::max_value<T>() / (i - j) < m_intermediates[j])
+ || (boost::math::tools::max_value<T>() / (i - j + 2) < m_intermediates[j-1])
+ || (boost::math::tools::max_value<T>() - m_intermediates[j] * (i - j) < m_intermediates[j-1] * (i - j + 2))
+ || ((boost::math::isinf)(m_intermediates[j]))
+ );
+
+ if(overflow_check)
+ {
+ std::fill(tn.begin() + i, tn.end(), boost::math::tools::max_value<T>());
+ break;
+ }
+ m_intermediates[j] = m_intermediates[j] * (i - j) + m_intermediates[j-1] * (i - j + 2);
+ }
+ if(overflow_check)
+ break; // already filled the tn...
+ tn[static_cast<typename container_type::size_type>(i)] = m_intermediates[i];
+ BOOST_MATH_INSTRUMENT_VARIABLE(i);
+ BOOST_MATH_INSTRUMENT_VARIABLE(tn[static_cast<typename container_type::size_type>(i)]);
+ }
+ }
+
+ void tangent_numbers_series(const std::size_t m)
+ {
+ BOOST_MATH_STD_USING
+ static const std::size_t min_overflow_index = b2n_overflow_limit<T, Policy>() - 1;
+
+ typename container_type::size_type old_size = bn.size();
+
+ tangent(m);
+ bn.resize(static_cast<typename container_type::size_type>(m));
+
+ if(!old_size)
+ {
+ bn[0] = 1;
+ old_size = 1;
+ }
+
+ T power_two(ldexp(T(1), static_cast<int>(2 * old_size)));
+
+ for(std::size_t i = old_size; i < m; i++)
+ {
+ T b(static_cast<T>(i * 2));
+ //
+ // Not only do we need to take care to avoid spurious over/under flow in
+ // the calculation, but we also need to avoid overflow altogether in case
+ // we're calculating with a type where "bad things" happen in that case:
+ //
+ b = b / (power_two * tangent_scale_factor<T>());
+ b /= (power_two - 1);
+ bool overflow_check = (i >= min_overflow_index) && (tools::max_value<T>() / tn[static_cast<typename container_type::size_type>(i)] < b);
+ if(overflow_check)
+ {
+ m_overflow_limit = i;
+ while(i < m)
+ {
+ b = std::numeric_limits<T>::has_infinity ? std::numeric_limits<T>::infinity() : tools::max_value<T>();
+ bn[static_cast<typename container_type::size_type>(i)] = ((i % 2U) ? b : T(-b));
+ ++i;
+ }
+ break;
+ }
+ else
+ {
+ b *= tn[static_cast<typename container_type::size_type>(i)];
+ }
+
+ power_two = ldexp(power_two, 2);
+
+ const bool b_neg = i % 2 == 0;
+
+ bn[static_cast<typename container_type::size_type>(i)] = ((!b_neg) ? b : T(-b));
+ }
+ }
+
+ template <class OutputIterator>
+ OutputIterator copy_bernoulli_numbers(OutputIterator out, std::size_t start, std::size_t n, const Policy& pol)
+ {
+ //
+ // There are basically 3 thread safety options:
+ //
+ // 1) There are no threads (BOOST_HAS_THREADS is not defined).
+ // 2) There are threads, but we do not have a true atomic integer type,
+ // in this case we just use a mutex to guard against race conditions.
+ // 3) There are threads, and we have an atomic integer: in this case we can
+ // use the double-checked locking pattern to avoid thread synchronisation
+ // when accessing values already in the cache.
+ //
+ // First off handle the common case for overflow and/or asymptotic expansion:
+ //
+ if(start + n > bn.capacity())
+ {
+ if(start < bn.capacity())
+ {
+ out = copy_bernoulli_numbers(out, start, bn.capacity() - start, pol);
+ n -= bn.capacity() - start;
+ start = static_cast<std::size_t>(bn.capacity());
+ }
+ if(start < b2n_overflow_limit<T, Policy>() + 2u)
+ {
+ for(; n; ++start, --n)
+ {
+ *out = b2n_asymptotic<T, Policy>(static_cast<typename container_type::size_type>(start * 2U));
+ ++out;
+ }
+ }
+ for(; n; ++start, --n)
+ {
+ *out = policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(start), pol);
+ ++out;
+ }
+ return out;
+ }
+ #if !defined(BOOST_HAS_THREADS)
+ //
+ // Single threaded code, very simple:
+ //
+ if(start + n >= bn.size())
+ {
+ std::size_t new_size = (std::min)((std::max)((std::max)(start + n, std::size_t(bn.size() + 20)), std::size_t(50)), std::size_t(bn.capacity()));
+ tangent_numbers_series(new_size);
+ }
+
+ for(std::size_t i = (std::max)(max_bernoulli_b2n<T>::value + 1, start); i < start + n; ++i)
+ {
+ *out = (i >= m_overflow_limit) ? policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol) : bn[i];
+ ++out;
+ }
+ #elif defined(BOOST_MATH_NO_ATOMIC_INT)
+ //
+ // We need to grab a mutex every time we get here, for both readers and writers:
+ //
+ boost::detail::lightweight_mutex::scoped_lock l(m_mutex);
+ if(start + n >= bn.size())
+ {
+ std::size_t new_size = (std::min)((std::max)((std::max)(start + n, std::size_t(bn.size() + 20)), std::size_t(50)), std::size_t(bn.capacity()));
+ tangent_numbers_series(new_size);
+ }
+
+ for(std::size_t i = (std::max)(max_bernoulli_b2n<T>::value + 1, start); i < start + n; ++i)
+ {
+ *out = (i >= m_overflow_limit) ? policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol) : bn[i];
+ ++out;
+ }
+
+ #else
+ //
+ // Double-checked locking pattern, lets us access cached already cached values
+ // without locking:
+ //
+ // Get the counter and see if we need to calculate more constants:
+ //
+ if(static_cast<std::size_t>(m_counter.load(BOOST_MATH_ATOMIC_NS::memory_order_consume)) < start + n)
+ {
+ boost::detail::lightweight_mutex::scoped_lock l(m_mutex);
+
+ if(static_cast<std::size_t>(m_counter.load(BOOST_MATH_ATOMIC_NS::memory_order_consume)) < start + n)
+ {
+ if(start + n >= bn.size())
+ {
+ std::size_t new_size = (std::min)((std::max)((std::max)(start + n, std::size_t(bn.size() + 20)), std::size_t(50)), std::size_t(bn.capacity()));
+ tangent_numbers_series(new_size);
+ }
+ m_counter.store(static_cast<atomic_integer_type>(bn.size()), BOOST_MATH_ATOMIC_NS::memory_order_release);
+ }
+ }
+
+ for(std::size_t i = (std::max)(static_cast<std::size_t>(max_bernoulli_b2n<T>::value + 1), start); i < start + n; ++i)
+ {
+ *out = (i >= m_overflow_limit) ? policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol) : bn[static_cast<typename container_type::size_type>(i)];
+ ++out;
+ }
+
+ #endif
+ return out;
+ }
+
+ template <class OutputIterator>
+ OutputIterator copy_tangent_numbers(OutputIterator out, std::size_t start, std::size_t n, const Policy& pol)
+ {
+ //
+ // There are basically 3 thread safety options:
+ //
+ // 1) There are no threads (BOOST_HAS_THREADS is not defined).
+ // 2) There are threads, but we do not have a true atomic integer type,
+ // in this case we just use a mutex to guard against race conditions.
+ // 3) There are threads, and we have an atomic integer: in this case we can
+ // use the double-checked locking pattern to avoid thread synchronisation
+ // when accessing values already in the cache.
+ //
+ //
+ // First off handle the common case for overflow and/or asymptotic expansion:
+ //
+ if(start + n > bn.capacity())
+ {
+ if(start < bn.capacity())
+ {
+ out = copy_tangent_numbers(out, start, bn.capacity() - start, pol);
+ n -= bn.capacity() - start;
+ start = static_cast<std::size_t>(bn.capacity());
+ }
+ if(start < b2n_overflow_limit<T, Policy>() + 2u)
+ {
+ for(; n; ++start, --n)
+ {
+ *out = t2n_asymptotic<T, Policy>(static_cast<typename container_type::size_type>(start));
+ ++out;
+ }
+ }
+ for(; n; ++start, --n)
+ {
+ *out = policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(start), pol);
+ ++out;
+ }
+ return out;
+ }
+ #if !defined(BOOST_HAS_THREADS)
+ //
+ // Single threaded code, very simple:
+ //
+ if(start + n >= bn.size())
+ {
+ std::size_t new_size = (std::min)((std::max)((std::max)(start + n, std::size_t(bn.size() + 20)), std::size_t(50)), std::size_t(bn.capacity()));
+ tangent_numbers_series(new_size);
+ }
+
+ for(std::size_t i = start; i < start + n; ++i)
+ {
+ if(i >= m_overflow_limit)
+ *out = policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol);
+ else
+ {
+ if(tools::max_value<T>() * tangent_scale_factor<T>() < tn[static_cast<typename container_type::size_type>(i)])
+ *out = policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol);
+ else
+ *out = tn[static_cast<typename container_type::size_type>(i)] / tangent_scale_factor<T>();
+ }
+ ++out;
+ }
+ #elif defined(BOOST_MATH_NO_ATOMIC_INT)
+ //
+ // We need to grab a mutex every time we get here, for both readers and writers:
+ //
+ boost::detail::lightweight_mutex::scoped_lock l(m_mutex);
+ if(start + n >= bn.size())
+ {
+ std::size_t new_size = (std::min)((std::max)((std::max)(start + n, std::size_t(bn.size() + 20)), std::size_t(50)), std::size_t(bn.capacity()));
+ tangent_numbers_series(new_size);
+ }
+
+ for(std::size_t i = start; i < start + n; ++i)
+ {
+ if(i >= m_overflow_limit)
+ *out = policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol);
+ else
+ {
+ if(tools::max_value<T>() * tangent_scale_factor<T>() < tn[static_cast<typename container_type::size_type>(i)])
+ *out = policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol);
+ else
+ *out = tn[static_cast<typename container_type::size_type>(i)] / tangent_scale_factor<T>();
+ }
+ ++out;
+ }
+
+ #else
+ //
+ // Double-checked locking pattern, lets us access cached already cached values
+ // without locking:
+ //
+ // Get the counter and see if we need to calculate more constants:
+ //
+ if(static_cast<std::size_t>(m_counter.load(BOOST_MATH_ATOMIC_NS::memory_order_consume)) < start + n)
+ {
+ boost::detail::lightweight_mutex::scoped_lock l(m_mutex);
+
+ if(static_cast<std::size_t>(m_counter.load(BOOST_MATH_ATOMIC_NS::memory_order_consume)) < start + n)
+ {
+ if(start + n >= bn.size())
+ {
+ std::size_t new_size = (std::min)((std::max)((std::max)(start + n, std::size_t(bn.size() + 20)), std::size_t(50)), std::size_t(bn.capacity()));
+ tangent_numbers_series(new_size);
+ }
+ m_counter.store(static_cast<atomic_integer_type>(bn.size()), BOOST_MATH_ATOMIC_NS::memory_order_release);
+ }
+ }
+
+ for(std::size_t i = start; i < start + n; ++i)
+ {
+ if(i >= m_overflow_limit)
+ *out = policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol);
+ else
+ {
+ if(tools::max_value<T>() * tangent_scale_factor<T>() < tn[static_cast<typename container_type::size_type>(i)])
+ *out = policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol);
+ else
+ *out = tn[static_cast<typename container_type::size_type>(i)] / tangent_scale_factor<T>();
+ }
+ ++out;
+ }
+
+ #endif
+ return out;
+ }
+
+private:
+ //
+ // The caches for Bernoulli and tangent numbers, once allocated,
+ // these must NEVER EVER reallocate as it breaks our thread
+ // safety guarentees:
+ //
+ fixed_vector<T> bn, tn;
+ std::vector<T> m_intermediates;
+ // The value at which we know overflow has already occured for the Bn:
+ std::size_t m_overflow_limit;
+#if !defined(BOOST_HAS_THREADS)
+#elif defined(BOOST_MATH_NO_ATOMIC_INT)
+ boost::detail::lightweight_mutex m_mutex;
+#else
+ boost::detail::lightweight_mutex m_mutex;
+ atomic_counter_type m_counter;
+#endif
+};
+
+template <class T, class Policy>
+inline bernoulli_numbers_cache<T, Policy>& get_bernoulli_numbers_cache()
+{
+ //
+ // Force this function to be called at program startup so all the static variables
+ // get initailzed then (thread safety).
+ //
+ bernoulli_initializer<T, Policy>::force_instantiate();
+ static bernoulli_numbers_cache<T, Policy> data;
+ return data;
+}
+
+}}}
+
+#endif // BOOST_MATH_BERNOULLI_DETAIL_HPP
diff --git a/3party/boost/boost/math/special_functions/detail/bessel_derivatives_linear.hpp b/3party/boost/boost/math/special_functions/detail/bessel_derivatives_linear.hpp
new file mode 100644
index 0000000000..2ee86a03ee
--- /dev/null
+++ b/3party/boost/boost/math/special_functions/detail/bessel_derivatives_linear.hpp
@@ -0,0 +1,75 @@
+// Copyright (c) 2013 Anton Bikineev
+// 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 is a partial header, do not include on it's own!!!
+//
+// Linear combination for bessel derivatives are defined here
+#ifndef BOOST_MATH_SF_DETAIL_BESSEL_DERIVATIVES_LINEAR_HPP
+#define BOOST_MATH_SF_DETAIL_BESSEL_DERIVATIVES_LINEAR_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+namespace boost{ namespace math{ namespace detail{
+
+template <class T, class Tag, class Policy>
+inline T bessel_j_derivative_linear(T v, T x, Tag tag, Policy pol)
+{
+ return (boost::math::detail::cyl_bessel_j_imp<T>(v-1, x, tag, pol) - boost::math::detail::cyl_bessel_j_imp<T>(v+1, x, tag, pol)) / 2;
+}
+
+template <class T, class Policy>
+inline T bessel_j_derivative_linear(T v, T x, const bessel_int_tag& tag, Policy pol)
+{
+ return (boost::math::detail::cyl_bessel_j_imp<T>(itrunc(v-1), x, tag, pol) - boost::math::detail::cyl_bessel_j_imp<T>(itrunc(v+1), x, tag, pol)) / 2;
+}
+
+template <class T, class Policy>
+inline T sph_bessel_j_derivative_linear(unsigned v, T x, Policy pol)
+{
+ return (v / x) * boost::math::detail::sph_bessel_j_imp<T>(v, x, pol) - boost::math::detail::sph_bessel_j_imp<T>(v+1, x, pol);
+}
+
+template <class T, class Policy>
+inline T bessel_i_derivative_linear(T v, T x, Policy pol)
+{
+ return (boost::math::detail::cyl_bessel_i_imp<T>(v-1, x, pol) + boost::math::detail::cyl_bessel_i_imp<T>(v+1, x, pol)) / 2;
+}
+
+template <class T, class Tag, class Policy>
+inline T bessel_k_derivative_linear(T v, T x, Tag tag, Policy pol)
+{
+ return (boost::math::detail::cyl_bessel_k_imp<T>(v-1, x, tag, pol) + boost::math::detail::cyl_bessel_k_imp<T>(v+1, x, tag, pol)) / -2;
+}
+
+template <class T, class Policy>
+inline T bessel_k_derivative_linear(T v, T x, const bessel_int_tag& tag, Policy pol)
+{
+ return (boost::math::detail::cyl_bessel_k_imp<T>(itrunc(v-1), x, tag, pol) + boost::math::detail::cyl_bessel_k_imp<T>(itrunc(v+1), x, tag, pol)) / -2;
+}
+
+template <class T, class Tag, class Policy>
+inline T bessel_y_derivative_linear(T v, T x, Tag tag, Policy pol)
+{
+ return (boost::math::detail::cyl_neumann_imp<T>(v-1, x, tag, pol) - boost::math::detail::cyl_neumann_imp<T>(v+1, x, tag, pol)) / 2;
+}
+
+template <class T, class Policy>
+inline T bessel_y_derivative_linear(T v, T x, const bessel_int_tag& tag, Policy pol)
+{
+ return (boost::math::detail::cyl_neumann_imp<T>(itrunc(v-1), x, tag, pol) - boost::math::detail::cyl_neumann_imp<T>(itrunc(v+1), x, tag, pol)) / 2;
+}
+
+template <class T, class Policy>
+inline T sph_neumann_derivative_linear(unsigned v, T x, Policy pol)
+{
+ return (v / x) * boost::math::detail::sph_neumann_imp<T>(v, x, pol) - boost::math::detail::sph_neumann_imp<T>(v+1, x, pol);
+}
+
+}}} // namespaces
+
+#endif // BOOST_MATH_SF_DETAIL_BESSEL_DERIVATIVES_LINEAR_HPP
diff --git a/3party/boost/boost/math/special_functions/detail/bessel_i0.hpp b/3party/boost/boost/math/special_functions/detail/bessel_i0.hpp
index 7dc65d1a1b..676eb71511 100644
--- a/3party/boost/boost/math/special_functions/detail/bessel_i0.hpp
+++ b/3party/boost/boost/math/special_functions/detail/bessel_i0.hpp
@@ -102,10 +102,7 @@ T bessel_i0(T x)
BOOST_MATH_STD_USING
using namespace boost::math::tools;
- if (x < 0)
- {
- x = -x; // even function
- }
+ BOOST_ASSERT(x >= 0); // negative x is handled before we get here
if (x == 0)
{
return static_cast<T>(1);
diff --git a/3party/boost/boost/math/special_functions/detail/bessel_i1.hpp b/3party/boost/boost/math/special_functions/detail/bessel_i1.hpp
index 47f1b79883..b85bc67546 100644
--- a/3party/boost/boost/math/special_functions/detail/bessel_i1.hpp
+++ b/3party/boost/boost/math/special_functions/detail/bessel_i1.hpp
@@ -103,6 +103,7 @@ T bessel_i1(T x)
BOOST_MATH_STD_USING
using namespace boost::math::tools;
+ BOOST_ASSERT(x >= 0); // negative x is handled before we get here
w = abs(x);
if (x == 0)
{
@@ -123,10 +124,6 @@ T bessel_i1(T x)
value = factor * r;
}
- if (x < 0)
- {
- value *= -value; // odd function
- }
return value;
}
diff --git a/3party/boost/boost/math/special_functions/detail/bessel_ik.hpp b/3party/boost/boost/math/special_functions/detail/bessel_ik.hpp
index a589673ffb..10118d9715 100644
--- a/3party/boost/boost/math/special_functions/detail/bessel_ik.hpp
+++ b/3party/boost/boost/math/special_functions/detail/bessel_ik.hpp
@@ -234,6 +234,7 @@ int CF2_ik(T v, T x, T* Kv, T* Kv1, const Policy& pol)
BOOST_MATH_INSTRUMENT_VARIABLE(b);
BOOST_MATH_INSTRUMENT_VARIABLE(D);
BOOST_MATH_INSTRUMENT_VARIABLE(f);
+
for (k = 2; k < policies::get_max_series_iterations<Policy>(); k++) // starting from 2
{
// continued fraction f = z1 / z0
@@ -250,10 +251,27 @@ int CF2_ik(T v, T x, T* Kv, T* Kv1, const Policy& pol)
C *= -a / k;
Q += C * q;
S += Q * delta;
+ //
+ // Under some circumstances q can grow very small and C very
+ // large, leading to under/overflow. This is particularly an
+ // issue for types which have many digits precision but a narrow
+ // exponent range. A typical example being a "double double" type.
+ // To avoid this situation we can normalise q (and related prev/current)
+ // and C. All other variables remain unchanged in value. A typical
+ // test case occurs when x is close to 2, for example cyl_bessel_k(9.125, 2.125).
+ //
+ if(q < tools::epsilon<T>())
+ {
+ C *= q;
+ prev /= q;
+ current /= q;
+ q = 1;
+ }
// S converges slower than f
BOOST_MATH_INSTRUMENT_VARIABLE(Q * delta);
BOOST_MATH_INSTRUMENT_VARIABLE(abs(S) * tolerance);
+ BOOST_MATH_INSTRUMENT_VARIABLE(S);
if (abs(Q * delta) < abs(S) * tolerance)
{
break;
@@ -261,7 +279,10 @@ int CF2_ik(T v, T x, T* Kv, T* Kv1, const Policy& pol)
}
policies::check_series_iterations<T>("boost::math::bessel_ik<%1%>(%1%,%1%) in CF2_ik", k, pol);
- *Kv = sqrt(pi<T>() / (2 * x)) * exp(-x) / S;
+ if(x >= tools::log_max_value<T>())
+ *Kv = exp(0.5f * log(pi<T>() / (2 * x)) - x - log(S));
+ else
+ *Kv = sqrt(pi<T>() / (2 * x)) * exp(-x) / S;
*Kv1 = *Kv * (0.5f + v + x + (v * v - 0.25f) * f) / x;
BOOST_MATH_INSTRUMENT_VARIABLE(*Kv);
BOOST_MATH_INSTRUMENT_VARIABLE(*Kv1);
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 d3414496bc..b67d989b68 100644
--- a/3party/boost/boost/math/special_functions/detail/bessel_jy.hpp
+++ b/3party/boost/boost/math/special_functions/detail/bessel_jy.hpp
@@ -286,8 +286,11 @@ namespace boost { namespace math {
reflect = true;
v = -v; // v is non-negative from here
}
- if(v > static_cast<T>((std::numeric_limits<int>::max)()))
- policies::raise_evaluation_error<T>(function, "Order of Bessel function is too large to evaluate: got %1%", v, pol);
+ if (v > static_cast<T>((std::numeric_limits<int>::max)()))
+ {
+ *J = *Y = policies::raise_evaluation_error<T>(function, "Order of Bessel function is too large to evaluate: got %1%", v, pol);
+ return 1;
+ }
n = iround(v, pol);
u = v - n; // -1/2 <= u < 1/2
@@ -455,6 +458,7 @@ namespace boost { namespace math {
CF1_jy(v, x, &fv, &s, pol);
// tiny initial value to prevent overflow
T init = sqrt(tools::min_value<T>());
+ BOOST_MATH_INSTRUMENT_VARIABLE(init);
prev = fv * s * init;
current = s * init;
if(v < max_factorial<T>::value)
@@ -515,7 +519,14 @@ namespace boost { namespace math {
{
gamma = u * tools::epsilon<T>() / x;
}
+ BOOST_MATH_INSTRUMENT_VARIABLE(current);
+ BOOST_MATH_INSTRUMENT_VARIABLE(W);
+ BOOST_MATH_INSTRUMENT_VARIABLE(q);
+ BOOST_MATH_INSTRUMENT_VARIABLE(gamma);
+ BOOST_MATH_INSTRUMENT_VARIABLE(p);
+ BOOST_MATH_INSTRUMENT_VARIABLE(t);
Ju = sign(current) * sqrt(W / (q + gamma * (p - t)));
+ BOOST_MATH_INSTRUMENT_VARIABLE(Ju);
Jv = Ju * ratio; // normalization
diff --git a/3party/boost/boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp b/3party/boost/boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp
new file mode 100644
index 0000000000..bdbfb9d0c1
--- /dev/null
+++ b/3party/boost/boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp
@@ -0,0 +1,141 @@
+// Copyright (c) 2013 Anton Bikineev
+// 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 is a partial header, do not include on it's own!!!
+//
+// Contains asymptotic expansions for derivatives of Bessel J(v,x) and Y(v,x)
+// functions, as x -> INF.
+#ifndef BOOST_MATH_SF_DETAIL_BESSEL_JY_DERIVATIVES_ASYM_HPP
+#define BOOST_MATH_SF_DETAIL_BESSEL_JY_DERIVATIVES_ASYM_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+namespace boost{ namespace math{ namespace detail{
+
+template <class T>
+inline T asymptotic_bessel_derivative_amplitude(T v, T x)
+{
+ // Calculate the amplitude for J'(v,x) and I'(v,x)
+ // for large x: see A&S 9.2.30.
+ BOOST_MATH_STD_USING
+ T s = 1;
+ const T mu = 4 * v * v;
+ T txq = 2 * x;
+ txq *= txq;
+
+ s -= (mu - 3) / (2 * txq);
+ s -= ((mu - 1) * (mu - 45)) / (txq * txq * 8);
+
+ return sqrt(s * 2 / (boost::math::constants::pi<T>() * x));
+}
+
+template <class T>
+inline T asymptotic_bessel_derivative_phase_mx(T v, T x)
+{
+ // Calculate the phase of J'(v, x) and Y'(v, x) for large x.
+ // See A&S 9.2.31.
+ // Note that the result returned is the phase less (x - PI(v/2 - 1/4))
+ // which we'll factor in later when we calculate the sines/cosines of the result:
+ const T mu = 4 * v * v;
+ const T mu2 = mu * mu;
+ const T mu3 = mu2 * mu;
+ T denom = 4 * x;
+ T denom_mult = denom * denom;
+
+ T s = 0;
+ s += (mu + 3) / (2 * denom);
+ denom *= denom_mult;
+ s += (mu2 + (46 * mu) - 63) / (6 * denom);
+ denom *= denom_mult;
+ s += (mu3 + (185 * mu2) - (2053 * mu) + 1899) / (5 * denom);
+ return s;
+}
+
+template <class T>
+inline T asymptotic_bessel_y_derivative_large_x_2(T v, T x)
+{
+ // See A&S 9.2.20.
+ BOOST_MATH_STD_USING
+ // Get the phase and amplitude:
+ const T ampl = asymptotic_bessel_derivative_amplitude(v, x);
+ const T phase = asymptotic_bessel_derivative_phase_mx(v, x);
+ BOOST_MATH_INSTRUMENT_VARIABLE(ampl);
+ BOOST_MATH_INSTRUMENT_VARIABLE(phase);
+ //
+ // Calculate the sine of the phase, using
+ // sine/cosine addition rules to factor in
+ // the x - PI(v/2 - 1/4) term not added to the
+ // phase when we calculated it.
+ //
+ const T cx = cos(x);
+ const T sx = sin(x);
+ const T vd2shifted = (v / 2) - 0.25f;
+ const T ci = cos_pi(vd2shifted);
+ const T si = sin_pi(vd2shifted);
+ const T sin_phase = sin(phase) * (cx * ci + sx * si) + cos(phase) * (sx * ci - cx * si);
+ BOOST_MATH_INSTRUMENT_CODE(sin(phase));
+ BOOST_MATH_INSTRUMENT_CODE(cos(x));
+ BOOST_MATH_INSTRUMENT_CODE(cos(phase));
+ BOOST_MATH_INSTRUMENT_CODE(sin(x));
+ return sin_phase * ampl;
+}
+
+template <class T>
+inline T asymptotic_bessel_j_derivative_large_x_2(T v, T x)
+{
+ // See A&S 9.2.20.
+ BOOST_MATH_STD_USING
+ // Get the phase and amplitude:
+ const T ampl = asymptotic_bessel_derivative_amplitude(v, x);
+ const T phase = asymptotic_bessel_derivative_phase_mx(v, x);
+ BOOST_MATH_INSTRUMENT_VARIABLE(ampl);
+ BOOST_MATH_INSTRUMENT_VARIABLE(phase);
+ //
+ // Calculate the sine of the phase, using
+ // sine/cosine addition rules to factor in
+ // the x - PI(v/2 - 1/4) term not added to the
+ // phase when we calculated it.
+ //
+ BOOST_MATH_INSTRUMENT_CODE(cos(phase));
+ BOOST_MATH_INSTRUMENT_CODE(cos(x));
+ BOOST_MATH_INSTRUMENT_CODE(sin(phase));
+ BOOST_MATH_INSTRUMENT_CODE(sin(x));
+ const T cx = cos(x);
+ const T sx = sin(x);
+ const T vd2shifted = (v / 2) - 0.25f;
+ const T ci = cos_pi(vd2shifted);
+ const T si = sin_pi(vd2shifted);
+ const T sin_phase = cos(phase) * (cx * ci + sx * si) - sin(phase) * (sx * ci - cx * si);
+ BOOST_MATH_INSTRUMENT_VARIABLE(sin_phase);
+ return sin_phase * ampl;
+}
+
+template <class T>
+inline bool asymptotic_bessel_derivative_large_x_limit(const T& v, const T& x)
+{
+ BOOST_MATH_STD_USING
+ //
+ // This function is the copy of math::asymptotic_bessel_large_x_limit
+ // It means that we use the same rules for determining how x is large
+ // compared to v.
+ //
+ // Determines if x is large enough compared to v to take the asymptotic
+ // forms above. From A&S 9.2.28 we require:
+ // v < x * eps^1/8
+ // and from A&S 9.2.29 we require:
+ // v^12/10 < 1.5 * x * eps^1/10
+ // using the former seems to work OK in practice with broadly similar
+ // error rates either side of the divide for v < 10000.
+ // At double precision eps^1/8 ~= 0.01.
+ //
+ return (std::max)(T(fabs(v)), T(1)) < x * sqrt(boost::math::tools::forth_root_epsilon<T>());
+}
+
+}}} // namespaces
+
+#endif // BOOST_MATH_SF_DETAIL_BESSEL_JY_DERIVATIVES_ASYM_HPP
diff --git a/3party/boost/boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp b/3party/boost/boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp
new file mode 100644
index 0000000000..0dc68fc73c
--- /dev/null
+++ b/3party/boost/boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp
@@ -0,0 +1,220 @@
+// Copyright (c) 2013 Anton Bikineev
+// 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_BESSEL_JY_DERIVATIVES_SERIES_HPP
+#define BOOST_MATH_BESSEL_JY_DERIVATIVES_SERIES_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+namespace boost{ namespace math{ namespace detail{
+
+template <class T, class Policy>
+struct bessel_j_derivative_small_z_series_term
+{
+ typedef T result_type;
+
+ bessel_j_derivative_small_z_series_term(T v_, T x)
+ : N(0), v(v_), term(1), mult(x / 2)
+ {
+ mult *= -mult;
+ // iterate if v == 0; otherwise result of
+ // first term is 0 and tools::sum_series stops
+ if (v == 0)
+ iterate();
+ }
+ T operator()()
+ {
+ T r = term * (v + 2 * N);
+ iterate();
+ return r;
+ }
+private:
+ void iterate()
+ {
+ ++N;
+ term *= mult / (N * (N + v));
+ }
+ unsigned N;
+ T v;
+ T term;
+ T mult;
+};
+//
+// Series evaluation for BesselJ'(v, z) as z -> 0.
+// It's derivative of http://functions.wolfram.com/Bessel-TypeFunctions/BesselJ/06/01/04/01/01/0003/
+// Converges rapidly for all z << v.
+//
+template <class T, class Policy>
+inline T bessel_j_derivative_small_z_series(T v, T x, const Policy& pol)
+{
+ BOOST_MATH_STD_USING
+ T prefix;
+ if (v < boost::math::max_factorial<T>::value)
+ {
+ prefix = pow(x / 2, v - 1) / 2 / boost::math::tgamma(v + 1, pol);
+ }
+ else
+ {
+ prefix = (v - 1) * log(x / 2) - constants::ln_two<T>() - boost::math::lgamma(v + 1, pol);
+ prefix = exp(prefix);
+ }
+ if (0 == prefix)
+ return prefix;
+
+ bessel_j_derivative_small_z_series_term<T, Policy> s(v, x);
+ boost::uintmax_t max_iter = boost::math::policies::get_max_series_iterations<Policy>();
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ T zero = 0;
+ T result = boost::math::tools::sum_series(s, boost::math::policies::get_epsilon<T, Policy>(), max_iter, zero);
+#else
+ T result = boost::math::tools::sum_series(s, boost::math::policies::get_epsilon<T, Policy>(), max_iter);
+#endif
+ boost::math::policies::check_series_iterations<T>("boost::math::bessel_j_derivative_small_z_series<%1%>(%1%,%1%)", max_iter, pol);
+ return prefix * result;
+}
+
+template <class T, class Policy>
+struct bessel_y_derivative_small_z_series_term_a
+{
+ typedef T result_type;
+
+ bessel_y_derivative_small_z_series_term_a(T v_, T x)
+ : N(0), v(v_)
+ {
+ mult = x / 2;
+ mult *= -mult;
+ term = 1;
+ }
+ T operator()()
+ {
+ T r = term * (-v + 2 * N);
+ ++N;
+ term *= mult / (N * (N - v));
+ return r;
+ }
+private:
+ unsigned N;
+ T v;
+ T mult;
+ T term;
+};
+
+template <class T, class Policy>
+struct bessel_y_derivative_small_z_series_term_b
+{
+ typedef T result_type;
+
+ bessel_y_derivative_small_z_series_term_b(T v_, T x)
+ : N(0), v(v_)
+ {
+ mult = x / 2;
+ mult *= -mult;
+ term = 1;
+ }
+ T operator()()
+ {
+ T r = term * (v + 2 * N);
+ ++N;
+ term *= mult / (N * (N + v));
+ return r;
+ }
+private:
+ unsigned N;
+ T v;
+ T mult;
+ T term;
+};
+//
+// Series form for BesselY' as z -> 0,
+// It's derivative of http://functions.wolfram.com/Bessel-TypeFunctions/BesselY/06/01/04/01/01/0003/
+// This series is only useful when the second term is small compared to the first
+// otherwise we get catestrophic cancellation errors.
+//
+// Approximating tgamma(v) by v^v, and assuming |tgamma(-z)| < eps we end up requiring:
+// eps/2 * v^v(x/2)^-v > (x/2)^v or log(eps/2) > v log((x/2)^2/v)
+//
+template <class T, class Policy>
+inline T bessel_y_derivative_small_z_series(T v, T x, const Policy& pol)
+{
+ BOOST_MATH_STD_USING
+ static const char* function = "bessel_y_derivative_small_z_series<%1%>(%1%,%1%)";
+ T prefix;
+ T gam;
+ T p = log(x / 2);
+ T scale = 1;
+ bool need_logs = (v >= boost::math::max_factorial<T>::value) || (boost::math::tools::log_max_value<T>() / v < fabs(p));
+ if (!need_logs)
+ {
+ gam = boost::math::tgamma(v, pol);
+ p = pow(x / 2, v + 1) * 2;
+ if (boost::math::tools::max_value<T>() * p < gam)
+ {
+ scale /= gam;
+ gam = 1;
+ if (boost::math::tools::max_value<T>() * p < gam)
+ {
+ return -boost::math::policies::raise_overflow_error<T>(function, 0, pol);
+ }
+ }
+ prefix = -gam / (boost::math::constants::pi<T>() * p);
+ }
+ else
+ {
+ gam = boost::math::lgamma(v, pol);
+ p = (v + 1) * p + constants::ln_two<T>();
+ prefix = gam - log(boost::math::constants::pi<T>()) - p;
+ if (boost::math::tools::log_max_value<T>() < prefix)
+ {
+ prefix -= log(boost::math::tools::max_value<T>() / 4);
+ scale /= (boost::math::tools::max_value<T>() / 4);
+ if (boost::math::tools::log_max_value<T>() < prefix)
+ {
+ return -boost::math::policies::raise_overflow_error<T>(function, 0, pol);
+ }
+ }
+ prefix = -exp(prefix);
+ }
+ bessel_y_derivative_small_z_series_term_a<T, Policy> s(v, x);
+ boost::uintmax_t max_iter = boost::math::policies::get_max_series_iterations<Policy>();
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ T zero = 0;
+ T result = boost::math::tools::sum_series(s, boost::math::policies::get_epsilon<T, Policy>(), max_iter, zero);
+#else
+ T result = boost::math::tools::sum_series(s, boost::math::policies::get_epsilon<T, Policy>(), max_iter);
+#endif
+ boost::math::policies::check_series_iterations<T>("boost::math::bessel_y_derivative_small_z_series<%1%>(%1%,%1%)", max_iter, pol);
+ result *= prefix;
+
+ p = pow(x / 2, v - 1) / 2;
+ if (!need_logs)
+ {
+ prefix = boost::math::tgamma(-v, pol) * boost::math::cos_pi(v) * p / boost::math::constants::pi<T>();
+ }
+ else
+ {
+ int sgn;
+ prefix = boost::math::lgamma(-v, &sgn, pol) + (v - 1) * log(x / 2) - constants::ln_two<T>();
+ prefix = exp(prefix) * sgn / boost::math::constants::pi<T>();
+ }
+ bessel_y_derivative_small_z_series_term_b<T, Policy> s2(v, x);
+ max_iter = boost::math::policies::get_max_series_iterations<Policy>();
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ T b = boost::math::tools::sum_series(s2, boost::math::policies::get_epsilon<T, Policy>(), max_iter, zero);
+#else
+ T b = boost::math::tools::sum_series(s2, boost::math::policies::get_epsilon<T, Policy>(), max_iter);
+#endif
+ result += scale * prefix * b;
+ return result;
+}
+
+// Calculating of BesselY'(v,x) with small x (x < epsilon) and integer x using derivatives
+// of formulas in http://functions.wolfram.com/Bessel-TypeFunctions/BesselY/06/01/04/01/02/
+// seems to lose precision. Instead using linear combination of regular Bessel is preferred.
+
+}}} // namespaces
+
+#endif // BOOST_MATH_BESSEL_JY_DERIVATVIES_SERIES_HPP
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 a9e6d71cc0..d50bef84e8 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
@@ -194,9 +194,9 @@ inline T bessel_y_small_z_series(T v, T x, T* pscale, const Policy& pol)
}
else
{
- int s;
- prefix = boost::math::lgamma(-v, &s, pol) + p;
- prefix = exp(prefix) * s / constants::pi<T>();
+ int sgn;
+ prefix = boost::math::lgamma(-v, &sgn, pol) + p;
+ prefix = exp(prefix) * sgn / constants::pi<T>();
}
bessel_y_small_z_series_term_b<T, Policy> s2(v, x);
max_iter = policies::get_max_series_iterations<Policy>();
diff --git a/3party/boost/boost/math/special_functions/detail/bessel_jy_zero.hpp b/3party/boost/boost/math/special_functions/detail/bessel_jy_zero.hpp
index 2b1df0373a..ecd8696eee 100644
--- a/3party/boost/boost/math/special_functions/detail/bessel_jy_zero.hpp
+++ b/3party/boost/boost/math/special_functions/detail/bessel_jy_zero.hpp
@@ -126,13 +126,13 @@
const T range_zmin = (std::max<T>)(z_estimate - T(1), T(1));
const T range_zmax = z_estimate + T(1);
- const int digits2_of_t = int(float(std::numeric_limits<T>::digits)
- * ( log(float(std::numeric_limits<T>::radix))
- / log(float(2))));
+ const int my_digits10 = static_cast<int>(static_cast<float>(boost::math::tools::digits<T>() * 0.301F));
- const int digits2_for_root = (std::min)(digits2_of_t, std::numeric_limits<double>::digits);
+ // Select the maximum allowed iterations based on the number
+ // of decimal digits in the numeric type T, being at least 12.
+ const boost::uintmax_t iterations_allowed = static_cast<boost::uintmax_t>((std::max)(12, my_digits10 * 2));
- boost::uintmax_t iteration_count = boost::uintmax_t(std::numeric_limits<T>::digits10 * 2);
+ boost::uintmax_t iterations_used = iterations_allowed;
// Calculate the root of z as a function of zeta.
const T z = boost::math::tools::newton_raphson_iterate(
@@ -140,10 +140,10 @@
z_estimate,
range_zmin,
range_zmax,
- digits2_for_root,
- iteration_count);
+ (std::min)(boost::math::tools::digits<T>(), boost::math::tools::digits<float>()),
+ iterations_used);
- static_cast<void>(iteration_count);
+ static_cast<void>(iterations_used);
// Continue with the implementation of A&S Eq. 9.3.39.
const T zsq_minus_one = (z * z) - T(1);
diff --git a/3party/boost/boost/math/special_functions/detail/bessel_kn.hpp b/3party/boost/boost/math/special_functions/detail/bessel_kn.hpp
index 5f01460995..e3a5023c63 100644
--- a/3party/boost/boost/math/special_functions/detail/bessel_kn.hpp
+++ b/3party/boost/boost/math/special_functions/detail/bessel_kn.hpp
@@ -22,6 +22,7 @@ namespace boost { namespace math { namespace detail{
template <typename T, typename Policy>
T bessel_kn(int n, T x, const Policy& pol)
{
+ BOOST_MATH_STD_USING
T value, current, prev;
using namespace boost::math::tools;
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 ab926ad8cb..77aa72fc26 100644
--- a/3party/boost/boost/math/special_functions/detail/erf_inv.hpp
+++ b/3party/boost/boost/math/special_functions/detail/erf_inv.hpp
@@ -92,7 +92,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>*
BOOST_MATH_BIG_CONSTANT(T, 64, -3.67192254707729348546)
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 6.24264124854247537712),
BOOST_MATH_BIG_CONSTANT(T, 64, 3.9713437953343869095),
BOOST_MATH_BIG_CONSTANT(T, 64, -28.6608180499800029974),
@@ -176,7 +176,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>*
BOOST_MATH_BIG_CONSTANT(T, 64, 0.266339227425782031962e-11)
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 1.3653349817554063097),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.762059164553623404043),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.220091105764131249824),
@@ -204,7 +204,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>*
BOOST_MATH_BIG_CONSTANT(T, 64, 0.99055709973310326855e-16)
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.591429344886417493481),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.138151865749083321638),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.0160746087093676504695),
@@ -231,7 +231,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>*
BOOST_MATH_BIG_CONSTANT(T, 64, -0.116765012397184275695e-17)
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.207123112214422517181),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.0169410838120975906478),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.000690538265622684595676),
@@ -258,7 +258,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>*
BOOST_MATH_BIG_CONSTANT(T, 64, -0.348890393399948882918e-21)
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.0845746234001899436914),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.00282092984726264681981),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.468292921940894236786e-4),
@@ -331,26 +331,32 @@ struct erf_inv_initializer
{
do_init();
}
+ static bool is_value_non_zero(T);
static void do_init()
{
boost::math::erf_inv(static_cast<T>(0.25), Policy());
boost::math::erf_inv(static_cast<T>(0.55), Policy());
boost::math::erf_inv(static_cast<T>(0.95), Policy());
boost::math::erfc_inv(static_cast<T>(1e-15), Policy());
- if(static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-130)) != 0)
+ // These following initializations must not be called if
+ // type T can not hold the relevant values without
+ // underflow to zero. We check this at runtime because
+ // some tools such as valgrind silently change the precision
+ // of T at runtime, and numeric_limits basically lies!
+ if(is_value_non_zero(static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-130))))
boost::math::erfc_inv(static_cast<T>(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<T>(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-800)) != 0)
+ if(is_value_non_zero(static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-800))))
boost::math::erfc_inv(static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-800)), Policy());
- if(static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-900)) != 0)
+ if(is_value_non_zero(static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-900))))
boost::math::erfc_inv(static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-900)), Policy());
#else
- if(static_cast<T>(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-800)) != 0)
+ if(is_value_non_zero(static_cast<T>(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-800))))
boost::math::erfc_inv(static_cast<T>(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-800)), Policy());
- if(static_cast<T>(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-900)) != 0)
+ if(is_value_non_zero(static_cast<T>(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-900))))
boost::math::erfc_inv(static_cast<T>(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-900)), Policy());
#endif
}
@@ -366,6 +372,15 @@ struct erf_inv_initializer
template <class T, class Policy>
const typename erf_inv_initializer<T, Policy>::init erf_inv_initializer<T, Policy>::initializer;
+template <class T, class Policy>
+bool erf_inv_initializer<T, Policy>::init::is_value_non_zero(T v)
+{
+ // This needs to be non-inline to detect whether v is non zero at runtime
+ // rather than at compile time, only relevant when running under valgrind
+ // which changes long double's to double's on the fly.
+ return v != 0;
+}
+
} // namespace detail
template <class T, class Policy>
@@ -378,7 +393,7 @@ typename tools::promote_args<T>::type erfc_inv(T z, const Policy& pol)
//
static const char* function = "boost::math::erfc_inv<%1%>(%1%, %1%)";
if((z < 0) || (z > 2))
- policies::raise_domain_error<result_type>(function, "Argument outside range [0,2] in inverse erfc function (got p=%1%).", z, pol);
+ return policies::raise_domain_error<result_type>(function, "Argument outside range [0,2] in inverse erfc function (got p=%1%).", z, pol);
if(z == 0)
return policies::raise_overflow_error<result_type>(function, 0, pol);
if(z == 2)
@@ -442,7 +457,7 @@ typename tools::promote_args<T>::type erf_inv(T z, const Policy& pol)
//
static const char* function = "boost::math::erf_inv<%1%>(%1%, %1%)";
if((z < -1) || (z > 1))
- policies::raise_domain_error<result_type>(function, "Argument outside range [-1, 1] in inverse erf function (got p=%1%).", z, pol);
+ return policies::raise_domain_error<result_type>(function, "Argument outside range [-1, 1] in inverse erf function (got p=%1%).", z, pol);
if(z == 1)
return policies::raise_overflow_error<result_type>(function, 0, pol);
if(z == -1)
diff --git a/3party/boost/boost/math/special_functions/detail/fp_traits.hpp b/3party/boost/boost/math/special_functions/detail/fp_traits.hpp
index 50c034d303..63ebf11ae0 100644
--- a/3party/boost/boost/math/special_functions/detail/fp_traits.hpp
+++ b/3party/boost/boost/math/special_functions/detail/fp_traits.hpp
@@ -351,6 +351,13 @@ struct fp_traits_non_native<long double, extended_double_precision>
// the Intel extended double precision format (80 bits) and
// the IEEE extended double precision format with 15 exponent bits (128 bits).
+#elif defined(__GNUC__) && (LDBL_MANT_DIG == 106)
+
+//
+// Define nothing here and fall though to generic_tag:
+// We have GCC's "double double" in effect, and any attempt
+// to handle it via bit-fiddling is pretty much doomed to fail...
+//
// long double (>64 bits), PowerPC ---------------------------------------------
@@ -546,7 +553,9 @@ struct select_native<long double>
&& !defined(__DECCXX)\
&& !defined(__osf__) \
&& !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\
- && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)
+ && !defined(__FAST_MATH__)\
+ && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)\
+ && !defined(BOOST_INTEL)
# define BOOST_MATH_USE_STD_FPCLASSIFY
#endif
diff --git a/3party/boost/boost/math/special_functions/detail/gamma_inva.hpp b/3party/boost/boost/math/special_functions/detail/gamma_inva.hpp
index 549bc3d552..7c32d2946c 100644
--- a/3party/boost/boost/math/special_functions/detail/gamma_inva.hpp
+++ b/3party/boost/boost/math/special_functions/detail/gamma_inva.hpp
@@ -75,7 +75,7 @@ T gamma_inva_imp(const T& z, const T& p, const T& q, const Policy& pol)
//
if(p == 0)
{
- return tools::max_value<T>();
+ return policies::raise_overflow_error<T>("boost::math::gamma_p_inva<%1%>(%1%, %1%)", 0, Policy());
}
if(q == 0)
{
@@ -144,7 +144,7 @@ T gamma_inva_imp(const T& z, const T& p, const T& q, const Policy& pol)
//
std::pair<T, T> r = bracket_and_solve_root(f, guess, factor, false, tol, max_iter, pol);
if(max_iter >= policies::get_max_root_iterations<Policy>())
- policies::raise_evaluation_error<T>("boost::math::gamma_p_inva<%1%>(%1%, %1%)", "Unable to locate the root within a reasonable number of iterations, closest approximation so far was %1%", r.first, pol);
+ return policies::raise_evaluation_error<T>("boost::math::gamma_p_inva<%1%>(%1%, %1%)", "Unable to locate the root within a reasonable number of iterations, closest approximation so far was %1%", r.first, pol);
return (r.first + r.second) / 2;
}
@@ -165,7 +165,7 @@ inline typename tools::promote_args<T1, T2>::type
if(p == 0)
{
- return tools::max_value<result_type>();
+ policies::raise_overflow_error<result_type>("boost::math::gamma_p_inva<%1%>(%1%, %1%)", 0, Policy());
}
if(p == 1)
{
@@ -195,7 +195,7 @@ inline typename tools::promote_args<T1, T2>::type
if(q == 1)
{
- return tools::max_value<result_type>();
+ policies::raise_overflow_error<result_type>("boost::math::gamma_q_inva<%1%>(%1%, %1%)", 0, Policy());
}
if(q == 0)
{
diff --git a/3party/boost/boost/math/special_functions/detail/ibeta_inv_ab.hpp b/3party/boost/boost/math/special_functions/detail/ibeta_inv_ab.hpp
index 8318a28454..f5735a8495 100644
--- a/3party/boost/boost/math/special_functions/detail/ibeta_inv_ab.hpp
+++ b/3party/boost/boost/math/special_functions/detail/ibeta_inv_ab.hpp
@@ -153,7 +153,7 @@ T ibeta_inv_ab_imp(const T& b, const T& z, const T& p, const T& q, bool swap_ab,
boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
std::pair<T, T> r = bracket_and_solve_root(f, guess, factor, swap_ab ? true : false, tol, max_iter, pol);
if(max_iter >= policies::get_max_root_iterations<Policy>())
- policies::raise_evaluation_error<T>("boost::math::ibeta_invab_imp<%1%>(%1%,%1%,%1%)", "Unable to locate the root within a reasonable number of iterations, closest approximation so far was %1%", r.first, pol);
+ return policies::raise_evaluation_error<T>("boost::math::ibeta_invab_imp<%1%>(%1%,%1%,%1%)", "Unable to locate the root within a reasonable number of iterations, closest approximation so far was %1%", r.first, pol);
return (r.first + r.second) / 2;
}
@@ -172,9 +172,10 @@ typename tools::promote_args<RT1, RT2, RT3>::type
policies::discrete_quantile<>,
policies::assert_undefined<> >::type forwarding_policy;
+ static const char* function = "boost::math::ibeta_inva<%1%>(%1%,%1%,%1%)";
if(p == 0)
{
- return tools::max_value<result_type>();
+ return policies::raise_overflow_error<result_type>(function, 0, Policy());
}
if(p == 1)
{
@@ -188,7 +189,7 @@ typename tools::promote_args<RT1, RT2, RT3>::type
static_cast<value_type>(p),
static_cast<value_type>(1 - static_cast<value_type>(p)),
false, pol),
- "boost::math::ibeta_inva<%1%>(%1%,%1%,%1%)");
+ function);
}
template <class RT1, class RT2, class RT3, class Policy>
@@ -204,9 +205,10 @@ typename tools::promote_args<RT1, RT2, RT3>::type
policies::discrete_quantile<>,
policies::assert_undefined<> >::type forwarding_policy;
+ static const char* function = "boost::math::ibetac_inva<%1%>(%1%,%1%,%1%)";
if(q == 1)
{
- return tools::max_value<result_type>();
+ return policies::raise_overflow_error<result_type>(function, 0, Policy());
}
if(q == 0)
{
@@ -220,7 +222,7 @@ typename tools::promote_args<RT1, RT2, RT3>::type
static_cast<value_type>(1 - static_cast<value_type>(q)),
static_cast<value_type>(q),
false, pol),
- "boost::math::ibetac_inva<%1%>(%1%,%1%,%1%)");
+ function);
}
template <class RT1, class RT2, class RT3, class Policy>
@@ -236,13 +238,14 @@ typename tools::promote_args<RT1, RT2, RT3>::type
policies::discrete_quantile<>,
policies::assert_undefined<> >::type forwarding_policy;
+ static const char* function = "boost::math::ibeta_invb<%1%>(%1%,%1%,%1%)";
if(p == 0)
{
return tools::min_value<result_type>();
}
if(p == 1)
{
- return tools::max_value<result_type>();
+ return policies::raise_overflow_error<result_type>(function, 0, Policy());
}
return policies::checked_narrowing_cast<result_type, forwarding_policy>(
@@ -252,13 +255,14 @@ typename tools::promote_args<RT1, RT2, RT3>::type
static_cast<value_type>(p),
static_cast<value_type>(1 - static_cast<value_type>(p)),
true, pol),
- "boost::math::ibeta_invb<%1%>(%1%,%1%,%1%)");
+ function);
}
template <class RT1, class RT2, class RT3, class Policy>
typename tools::promote_args<RT1, RT2, RT3>::type
ibetac_invb(RT1 a, RT2 x, RT3 q, const Policy& pol)
{
+ static const char* function = "boost::math::ibeta_invb<%1%>(%1%, %1%, %1%)";
typedef typename tools::promote_args<RT1, RT2, RT3>::type result_type;
typedef typename policies::evaluation<result_type, Policy>::type value_type;
typedef typename policies::normalise<
@@ -274,7 +278,7 @@ typename tools::promote_args<RT1, RT2, RT3>::type
}
if(q == 0)
{
- return tools::max_value<result_type>();
+ return policies::raise_overflow_error<result_type>(function, 0, Policy());
}
return policies::checked_narrowing_cast<result_type, forwarding_policy>(
@@ -282,9 +286,9 @@ typename tools::promote_args<RT1, RT2, RT3>::type
static_cast<value_type>(a),
static_cast<value_type>(x),
static_cast<value_type>(1 - static_cast<value_type>(q)),
- static_cast<value_type>(q),
+ static_cast<value_type>(q),
true, pol),
- "boost::math::ibetac_invb<%1%>(%1%,%1%,%1%)");
+ function);
}
template <class RT1, class RT2, class RT3>
diff --git a/3party/boost/boost/math/special_functions/detail/ibeta_inverse.hpp b/3party/boost/boost/math/special_functions/detail/ibeta_inverse.hpp
index 8c2ef93234..a9fe8cd49c 100644
--- a/3party/boost/boost/math/special_functions/detail/ibeta_inverse.hpp
+++ b/3party/boost/boost/math/special_functions/detail/ibeta_inverse.hpp
@@ -455,6 +455,11 @@ T ibeta_inv_imp(T a, T b, T p, T q, const Policy& pol, T* py)
BOOST_MATH_STD_USING // For ADL of math functions.
//
+ // The flag invert is set to true if we swap a for b and p for q,
+ // in which case the result has to be subtracted from 1:
+ //
+ bool invert = false;
+ //
// Handle trivial cases first:
//
if(q == 0)
@@ -467,17 +472,19 @@ T ibeta_inv_imp(T a, T b, T p, T q, const Policy& pol, T* py)
if(py) *py = 1;
return 0;
}
- else if((a == 1) && (b == 1))
+ else if(a == 1)
{
- if(py) *py = 1 - p;
- return p;
+ if(b == 1)
+ {
+ if(py) *py = 1 - p;
+ return p;
+ }
+ // Change things around so we can handle as b == 1 special case below:
+ std::swap(a, b);
+ std::swap(p, q);
+ invert = true;
}
//
- // The flag invert is set to true if we swap a for b and p for q,
- // in which case the result has to be subtracted from 1:
- //
- bool invert = false;
- //
// Depending upon which approximation method we use, we may end up
// calculating either x or y initially (where y = 1-x):
//
@@ -495,21 +502,61 @@ T ibeta_inv_imp(T a, T b, T p, T q, const Policy& pol, T* py)
// Student's T with b = 0.5 gets handled as a special case, swap
// around if the arguments are in the "wrong" order:
//
- if((a == 0.5f) && (b >= 0.5f))
+ if(a == 0.5f)
{
- std::swap(a, b);
- std::swap(p, q);
- invert = !invert;
+ if(b == 0.5f)
+ {
+ x = sin(p * constants::half_pi<T>());
+ x *= x;
+ if(py)
+ {
+ *py = sin(q * constants::half_pi<T>());
+ *py *= *py;
+ }
+ return x;
+ }
+ else if(b > 0.5f)
+ {
+ std::swap(a, b);
+ std::swap(p, q);
+ invert = !invert;
+ }
}
//
// Select calculation method for the initial estimate:
//
- if((b == 0.5f) && (a >= 0.5f))
+ if((b == 0.5f) && (a >= 0.5f) && (p != 1))
{
//
// We have a Student's T distribution:
x = find_ibeta_inv_from_t_dist(a, p, q, &y, pol);
}
+ else if(b == 1)
+ {
+ if(p < q)
+ {
+ if(a > 1)
+ {
+ x = pow(p, 1 / a);
+ y = -boost::math::expm1(log(p) / a, pol);
+ }
+ else
+ {
+ x = pow(p, 1 / a);
+ y = 1 - x;
+ }
+ }
+ else
+ {
+ x = exp(boost::math::log1p(-q, pol) / a);
+ y = -boost::math::expm1(boost::math::log1p(-q, pol) / a, pol);
+ }
+ if(invert)
+ std::swap(x, y);
+ if(py)
+ *py = y;
+ return x;
+ }
else if(a + b > 5)
{
//
@@ -894,11 +941,11 @@ inline typename tools::promote_args<T1, T2, T3, T4>::type
policies::assert_undefined<> >::type forwarding_policy;
if(a <= 0)
- policies::raise_domain_error<result_type>(function, "The argument a to the incomplete beta function inverse must be greater than zero (got a=%1%).", a, pol);
+ return policies::raise_domain_error<result_type>(function, "The argument a to the incomplete beta function inverse must be greater than zero (got a=%1%).", a, pol);
if(b <= 0)
- policies::raise_domain_error<result_type>(function, "The argument b to the incomplete beta function inverse must be greater than zero (got b=%1%).", b, pol);
+ return policies::raise_domain_error<result_type>(function, "The argument b to the incomplete beta function inverse must be greater than zero (got b=%1%).", b, pol);
if((q < 0) || (q > 1))
- policies::raise_domain_error<result_type>(function, "Argument q outside the range [0,1] in the incomplete beta function inverse (got q=%1%).", q, pol);
+ return policies::raise_domain_error<result_type>(function, "Argument q outside the range [0,1] in the incomplete beta function inverse (got q=%1%).", q, pol);
value_type rx, ry;
diff --git a/3party/boost/boost/math/special_functions/detail/igamma_inverse.hpp b/3party/boost/boost/math/special_functions/detail/igamma_inverse.hpp
index 42c278473f..fd0189ca6d 100644
--- a/3party/boost/boost/math/special_functions/detail/igamma_inverse.hpp
+++ b/3party/boost/boost/math/special_functions/detail/igamma_inverse.hpp
@@ -281,11 +281,11 @@ T find_inverse_gamma(T a, T p, T q, const Policy& pol, bool* p_has_10_digits)
// DiDonato and Morris Eq 35:
T v = log(p) + boost::math::lgamma(ap1, pol);
z = exp((v + w) / a);
- s = boost::math::log1p(z / ap1 * (1 + z / ap2));
+ s = boost::math::log1p(z / ap1 * (1 + z / ap2), pol);
z = exp((v + z - s) / a);
- s = boost::math::log1p(z / ap1 * (1 + z / ap2));
+ s = boost::math::log1p(z / ap1 * (1 + z / ap2), pol);
z = exp((v + z - s) / a);
- s = boost::math::log1p(z / ap1 * (1 + z / ap2 * (1 + z / (a + 3))));
+ s = boost::math::log1p(z / ap1 * (1 + z / ap2 * (1 + z / (a + 3))), pol);
z = exp((v + z - s) / a);
BOOST_MATH_INSTRUMENT_VARIABLE(z);
}
@@ -396,11 +396,11 @@ T gamma_p_inv_imp(T a, T p, const Policy& pol)
BOOST_MATH_INSTRUMENT_VARIABLE(p);
if(a <= 0)
- policies::raise_domain_error<T>(function, "Argument a in the incomplete gamma function inverse must be >= 0 (got a=%1%).", a, pol);
+ return policies::raise_domain_error<T>(function, "Argument a in the incomplete gamma function inverse must be >= 0 (got a=%1%).", a, pol);
if((p < 0) || (p > 1))
- policies::raise_domain_error<T>(function, "Probabilty must be in the range [0,1] in the incomplete gamma function inverse (got p=%1%).", p, pol);
+ return policies::raise_domain_error<T>(function, "Probabilty must be in the range [0,1] in the incomplete gamma function inverse (got p=%1%).", p, pol);
if(p == 1)
- return tools::max_value<T>();
+ return policies::raise_overflow_error<T>(function, 0, Policy());
if(p == 0)
return 0;
bool has_10_digits;
@@ -456,11 +456,11 @@ T gamma_q_inv_imp(T a, T q, const Policy& pol)
static const char* function = "boost::math::gamma_q_inv<%1%>(%1%, %1%)";
if(a <= 0)
- policies::raise_domain_error<T>(function, "Argument a in the incomplete gamma function inverse must be >= 0 (got a=%1%).", a, pol);
+ return policies::raise_domain_error<T>(function, "Argument a in the incomplete gamma function inverse must be >= 0 (got a=%1%).", a, pol);
if((q < 0) || (q > 1))
- policies::raise_domain_error<T>(function, "Probabilty must be in the range [0,1] in the incomplete gamma function inverse (got q=%1%).", q, pol);
+ return policies::raise_domain_error<T>(function, "Probabilty must be in the range [0,1] in the incomplete gamma function inverse (got q=%1%).", q, pol);
if(q == 0)
- return tools::max_value<T>();
+ return policies::raise_overflow_error<T>(function, 0, Policy());
if(q == 1)
return 0;
bool has_10_digits;
diff --git a/3party/boost/boost/math/special_functions/detail/lanczos_sse2.hpp b/3party/boost/boost/math/special_functions/detail/lanczos_sse2.hpp
index f8846bf376..edef3a0412 100644
--- a/3party/boost/boost/math/special_functions/detail/lanczos_sse2.hpp
+++ b/3party/boost/boost/math/special_functions/detail/lanczos_sse2.hpp
@@ -51,11 +51,11 @@ inline double lanczos13m53::lanczos_sum<double>(const double& x)
static_cast<double>(23531376880.41075968857200767445163675473L),
static_cast<double>(0u)
};
- register __m128d vx = _mm_load1_pd(&x);
- register __m128d sum_even = _mm_load_pd(coeff);
- register __m128d sum_odd = _mm_load_pd(coeff+2);
- register __m128d nc_odd, nc_even;
- register __m128d vx2 = _mm_mul_pd(vx, vx);
+ __m128d vx = _mm_load1_pd(&x);
+ __m128d sum_even = _mm_load_pd(coeff);
+ __m128d sum_odd = _mm_load_pd(coeff+2);
+ __m128d nc_odd, nc_even;
+ __m128d vx2 = _mm_mul_pd(vx, vx);
sum_even = _mm_mul_pd(sum_even, vx2);
nc_even = _mm_load_pd(coeff + 4);
@@ -136,11 +136,11 @@ inline double lanczos13m53::lanczos_sum_expG_scaled<double>(const double& x)
static_cast<double>(56906521.91347156388090791033559122686859L),
static_cast<double>(0u)
};
- register __m128d vx = _mm_load1_pd(&x);
- register __m128d sum_even = _mm_load_pd(coeff);
- register __m128d sum_odd = _mm_load_pd(coeff+2);
- register __m128d nc_odd, nc_even;
- register __m128d vx2 = _mm_mul_pd(vx, vx);
+ __m128d vx = _mm_load1_pd(&x);
+ __m128d sum_even = _mm_load_pd(coeff);
+ __m128d sum_odd = _mm_load_pd(coeff+2);
+ __m128d nc_odd, nc_even;
+ __m128d vx2 = _mm_mul_pd(vx, vx);
sum_even = _mm_mul_pd(sum_even, vx2);
nc_even = _mm_load_pd(coeff + 4);
diff --git a/3party/boost/boost/math/special_functions/detail/lgamma_small.hpp b/3party/boost/boost/math/special_functions/detail/lgamma_small.hpp
index 82b5d159e4..e65f8b7e98 100644
--- a/3party/boost/boost/math/special_functions/detail/lgamma_small.hpp
+++ b/3party/boost/boost/math/special_functions/detail/lgamma_small.hpp
@@ -278,7 +278,7 @@ T lgamma_small_imp(T z, T zm1, T zm2, const mpl::int_<113>&, const Policy& /* l
BOOST_MATH_BIG_CONSTANT(T, 113, -0.70529798686542184668416911331718963364e-8)
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.5877485070422317542808137697939233685),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.8797959228352591788629602533153837126),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.8030885955284082026405495275461180977),
diff --git a/3party/boost/boost/math/special_functions/detail/t_distribution_inv.hpp b/3party/boost/boost/math/special_functions/detail/t_distribution_inv.hpp
index 4e0d2d1b79..72f6f0c646 100644
--- a/3party/boost/boost/math/special_functions/detail/t_distribution_inv.hpp
+++ b/3party/boost/boost/math/special_functions/detail/t_distribution_inv.hpp
@@ -372,7 +372,13 @@ T inverse_students_t(T df, T u, T v, const Policy& pol, bool* pexact = 0)
else
{
calculate_real:
- if(df < 3)
+ if(df > 0x10000000)
+ {
+ result = -boost::math::erfc_inv(2 * u, pol) * constants::root_two<T>();
+ if((pexact) && (df >= 1e20))
+ *pexact = true;
+ }
+ else if(df < 3)
{
//
// Use a roughly linear scheme to choose between Shaw's
@@ -395,7 +401,7 @@ calculate_real:
// where we use Shaw's tail series.
// The crossover point is roughly exponential in -df:
//
- T crossover = ldexp(1.0f, iround(T(df / -0.654f), pol));
+ T crossover = ldexp(1.0f, iround(T(df / -0.654f), typename policies::normalise<Policy, policies::rounding_error<policies::ignore_error> >::type()));
if(u > crossover)
{
result = boost::math::detail::inverse_students_t_hill(df, u, pol);
@@ -410,15 +416,14 @@ calculate_real:
}
template <class T, class Policy>
-inline T find_ibeta_inv_from_t_dist(T a, T p, T q, T* py, const Policy& pol)
+inline T find_ibeta_inv_from_t_dist(T a, T p, T /*q*/, T* py, const Policy& pol)
{
- T u = (p > q) ? T(0.5f - q) / T(2) : T(p / 2);
- T v = 1 - u; // u < 0.5 so no cancellation error
+ T u = p / 2;
+ T v = 1 - u;
T df = a * 2;
T t = boost::math::detail::inverse_students_t(df, u, v, pol);
- T x = df / (df + t * t);
*py = t * t / (df + t * t);
- return x;
+ return df / (df + t * t);
}
template <class T, class Policy>
diff --git a/3party/boost/boost/math/special_functions/detail/unchecked_bernoulli.hpp b/3party/boost/boost/math/special_functions/detail/unchecked_bernoulli.hpp
new file mode 100644
index 0000000000..03c376678d
--- /dev/null
+++ b/3party/boost/boost/math/special_functions/detail/unchecked_bernoulli.hpp
@@ -0,0 +1,700 @@
+
+///////////////////////////////////////////////////////////////////////////////
+// Copyright 2013 Nikhar Agrawal
+// Copyright 2013 Christopher Kormanyos
+// Copyright 2013 John Maddock
+// Copyright 2013 Paul Bristow
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_MATH_UNCHECKED_BERNOULLI_HPP
+#define BOOST_MATH_UNCHECKED_BERNOULLI_HPP
+
+#include <limits>
+#include <cmath>
+#include <boost/math/policies/error_handling.hpp>
+#include <boost/math/constants/constants.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace math {
+
+namespace detail {
+
+template <unsigned N>
+struct max_bernoulli_index
+{
+ BOOST_STATIC_CONSTANT(unsigned, value = 17);
+};
+
+template <>
+struct max_bernoulli_index<1>
+{
+ BOOST_STATIC_CONSTANT(unsigned, value = 32);
+};
+
+template <>
+struct max_bernoulli_index<2>
+{
+ BOOST_STATIC_CONSTANT(unsigned, value = 129);
+};
+
+template <>
+struct max_bernoulli_index<3>
+{
+ BOOST_STATIC_CONSTANT(unsigned, value = 1156);
+};
+
+template <>
+struct max_bernoulli_index<4>
+{
+ BOOST_STATIC_CONSTANT(unsigned, value = 11);
+};
+
+template <class T>
+struct bernoulli_imp_variant
+{
+ static const unsigned value =
+ (std::numeric_limits<T>::max_exponent == 128)
+ && (std::numeric_limits<T>::radix == 2)
+ && (std::numeric_limits<T>::digits <= std::numeric_limits<float>::digits)
+ && (boost::is_convertible<float, T>::value) ? 1 :
+ (
+ (std::numeric_limits<T>::max_exponent == 1024)
+ && (std::numeric_limits<T>::radix == 2)
+ && (std::numeric_limits<T>::digits <= std::numeric_limits<double>::digits)
+ && (boost::is_convertible<double, T>::value) ? 2 :
+ (
+ (std::numeric_limits<T>::max_exponent == 16384)
+ && (std::numeric_limits<T>::radix == 2)
+ && (std::numeric_limits<T>::digits <= std::numeric_limits<long double>::digits)
+ && (boost::is_convertible<long double, T>::value) ? 3 : (!is_convertible<boost::int64_t, T>::value ? 4 : 0)
+ )
+ );
+};
+
+} // namespace detail
+
+template <class T>
+struct max_bernoulli_b2n : public detail::max_bernoulli_index<detail::bernoulli_imp_variant<T>::value>{};
+
+namespace detail{
+
+template <class T>
+inline T unchecked_bernoulli_imp(std::size_t n, const mpl::int_<0>& )
+{
+ static const boost::array<boost::int64_t, 1 + max_bernoulli_b2n<T>::value> numerators =
+ {{
+ boost::int64_t( +1LL),
+ boost::int64_t( +1LL),
+ boost::int64_t( -1LL),
+ boost::int64_t( +1LL),
+ boost::int64_t( -1LL),
+ boost::int64_t( +5LL),
+ boost::int64_t( -691LL),
+ boost::int64_t( +7LL),
+ boost::int64_t( -3617LL),
+ boost::int64_t( +43867LL),
+ boost::int64_t( -174611LL),
+ boost::int64_t( +854513LL),
+ boost::int64_t( -236364091LL),
+ boost::int64_t( +8553103LL),
+ boost::int64_t( -23749461029LL),
+ boost::int64_t(+8615841276005LL),
+ boost::int64_t(-7709321041217LL),
+ boost::int64_t(+2577687858367LL)
+ }};
+
+ static const boost::array<boost::int64_t, 1 + max_bernoulli_b2n<T>::value> denominators =
+ {{
+ boost::int64_t( 1LL),
+ boost::int64_t( 6LL),
+ boost::int64_t( 30LL),
+ boost::int64_t( 42LL),
+ boost::int64_t( 30LL),
+ boost::int64_t( 66LL),
+ boost::int64_t( 2730LL),
+ boost::int64_t( 6LL),
+ boost::int64_t( 510LL),
+ boost::int64_t( 798LL),
+ boost::int64_t( 330LL),
+ boost::int64_t( 138LL),
+ boost::int64_t( 2730LL),
+ boost::int64_t( 6LL),
+ boost::int64_t( 870LL),
+ boost::int64_t( 14322LL),
+ boost::int64_t( 510LL),
+ boost::int64_t( 6LL)
+ }};
+ return T(numerators[n]) / denominators[n];
+}
+
+template <class T>
+inline T unchecked_bernoulli_imp(std::size_t n, const mpl::int_<1>& )
+{
+ static const boost::array<float, 1 + max_bernoulli_b2n<T>::value> bernoulli_data =
+ {{
+ +1.00000000000000000000000000000000000000000F,
+ +0.166666666666666666666666666666666666666667F,
+ -0.0333333333333333333333333333333333333333333F,
+ +0.0238095238095238095238095238095238095238095F,
+ -0.0333333333333333333333333333333333333333333F,
+ +0.0757575757575757575757575757575757575757576F,
+ -0.253113553113553113553113553113553113553114F,
+ +1.16666666666666666666666666666666666666667F,
+ -7.09215686274509803921568627450980392156863F,
+ +54.9711779448621553884711779448621553884712F,
+ -529.124242424242424242424242424242424242424F,
+ +6192.12318840579710144927536231884057971014F,
+ -86580.2531135531135531135531135531135531136F,
+ +1.42551716666666666666666666666666666666667e6F,
+ -2.72982310678160919540229885057471264367816e7F,
+ +6.01580873900642368384303868174835916771401e8F,
+ -1.51163157670921568627450980392156862745098e10F,
+ +4.29614643061166666666666666666666666666667e11F,
+ -1.37116552050883327721590879485616327721591e13F,
+ +4.88332318973593166666666666666666666666667e14F,
+ -1.92965793419400681486326681448632668144863e16F,
+ +8.41693047573682615000553709856035437430786e17F,
+ -4.03380718540594554130768115942028985507246e19F,
+ +2.11507486380819916056014539007092198581560e21F,
+ -1.20866265222965259346027311937082525317819e23F,
+ +7.50086674607696436685572007575757575757576e24F,
+ -5.03877810148106891413789303052201257861635e26F,
+ +3.65287764848181233351104308429711779448622e28F,
+ -2.84987693024508822262691464329106781609195e30F,
+ +2.38654274996836276446459819192192149717514e32F,
+ -2.13999492572253336658107447651910973926742e34F,
+ +2.05009757234780975699217330956723102516667e36F,
+ -2.09380059113463784090951852900279701847092e38F,
+ }};
+
+ return bernoulli_data[n];
+}
+
+
+template <class T>
+inline T unchecked_bernoulli_imp(std::size_t n, const mpl::int_<2>& )
+{
+ static const boost::array<double, 1 + max_bernoulli_b2n<T>::value> bernoulli_data =
+ {{
+ +1.00000000000000000000000000000000000000000,
+ +0.166666666666666666666666666666666666666667,
+ -0.0333333333333333333333333333333333333333333,
+ +0.0238095238095238095238095238095238095238095,
+ -0.0333333333333333333333333333333333333333333,
+ +0.0757575757575757575757575757575757575757576,
+ -0.253113553113553113553113553113553113553114,
+ +1.16666666666666666666666666666666666666667,
+ -7.09215686274509803921568627450980392156863,
+ +54.9711779448621553884711779448621553884712,
+ -529.124242424242424242424242424242424242424,
+ +6192.12318840579710144927536231884057971014,
+ -86580.2531135531135531135531135531135531136,
+ +1.42551716666666666666666666666666666666667e6,
+ -2.72982310678160919540229885057471264367816e7,
+ +6.01580873900642368384303868174835916771401e8,
+ -1.51163157670921568627450980392156862745098e10,
+ +4.29614643061166666666666666666666666666667e11,
+ -1.37116552050883327721590879485616327721591e13,
+ +4.88332318973593166666666666666666666666667e14,
+ -1.92965793419400681486326681448632668144863e16,
+ +8.41693047573682615000553709856035437430786e17,
+ -4.03380718540594554130768115942028985507246e19,
+ +2.11507486380819916056014539007092198581560e21,
+ -1.20866265222965259346027311937082525317819e23,
+ +7.50086674607696436685572007575757575757576e24,
+ -5.03877810148106891413789303052201257861635e26,
+ +3.65287764848181233351104308429711779448622e28,
+ -2.84987693024508822262691464329106781609195e30,
+ +2.38654274996836276446459819192192149717514e32,
+ -2.13999492572253336658107447651910973926742e34,
+ +2.05009757234780975699217330956723102516667e36,
+ -2.09380059113463784090951852900279701847092e38,
+ +2.27526964884635155596492603527692645814700e40,
+ -2.62577102862395760473030497361582020814490e42,
+ +3.21250821027180325182047923042649852435219e44,
+ -4.15982781667947109139170744952623589366896e46,
+ +5.69206954820352800238834562191210586444805e48,
+ -8.21836294197845756922906534686173330145509e50,
+ +1.25029043271669930167323398297028955241772e53,
+ -2.00155832332483702749253291988132987687242e55,
+ +3.36749829153643742333966769033387530162196e57,
+ -5.94709705031354477186604968440515408405791e59,
+ +1.10119103236279775595641307904376916046305e62,
+ -2.13552595452535011886583850190410656789733e64,
+ +4.33288969866411924196166130593792062184514e66,
+ -9.18855282416693282262005552155018971389604e68,
+ +2.03468967763290744934550279902200200659751e71,
+ -4.70038339580357310785752555350060606545967e73,
+ +1.13180434454842492706751862577339342678904e76,
+ -2.83822495706937069592641563364817647382847e78,
+ +7.40642489796788506297508271409209841768797e80,
+ -2.00964548027566044834656196727153631868673e83,
+ +5.66571700508059414457193460305193569614195e85,
+ -1.65845111541362169158237133743199123014950e88,
+ +5.03688599504923774192894219151801548124424e90,
+ -1.58614682376581863693634015729664387827410e93,
+ +5.17567436175456269840732406825071225612408e95,
+ -1.74889218402171173396900258776181591451415e98,
+ +6.11605199949521852558245252642641677807677e100,
+ -2.21227769127078349422883234567129324455732e103,
+ +8.27227767987709698542210624599845957312047e105,
+ -3.19589251114157095835916343691808148735263e108,
+ +1.27500822233877929823100243029266798669572e111,
+ -5.25009230867741338994028246245651754469199e113,
+ +2.23018178942416252098692981988387281437383e116,
+ -9.76845219309552044386335133989802393011669e118,
+ +4.40983619784529542722726228748131691918758e121,
+ -2.05085708864640888397293377275830154864566e124,
+ +9.82144332797912771075729696020975210414919e126,
+ -4.84126007982088805087891967099634127611305e129,
+ +2.45530888014809826097834674040886903996737e132,
+ -1.28069268040847475487825132786017857218118e135,
+ +6.86761671046685811921018885984644004360924e137,
+ -3.78464685819691046949789954163795568144895e140,
+ +2.14261012506652915508713231351482720966602e143,
+ -1.24567271371836950070196429616376072194583e146,
+ +7.43457875510001525436796683940520613117807e148,
+ -4.55357953046417048940633332233212748767721e151,
+ +2.86121128168588683453638472510172325229190e154,
+ -1.84377235520338697276882026536287854875414e157,
+ +1.21811545362210466995013165065995213558174e160,
+ -8.24821871853141215484818457296893447301419e162,
+ +5.72258779378329433296516498142978615918685e165,
+ -4.06685305250591047267679693831158655602196e168,
+ +2.95960920646420500628752695815851870426379e171,
+ -2.20495225651894575090311752273445984836379e174,
+ +1.68125970728895998058311525151360665754464e177,
+ -1.31167362135569576486452806355817153004431e180,
+ +1.04678940094780380821832853929823089643829e183,
+ -8.54328935788337077185982546299082774593270e185,
+ +7.12878213224865423522884066771438224721245e188,
+ -6.08029314555358993000847118686477458461988e191,
+ +5.29967764248499239300942910043247266228490e194,
+ -4.71942591687458626443646229013379911103761e197,
+ +4.29284137914029810894168296541074669045521e200,
+ -3.98767449682322074434477655542938795106651e203,
+ +3.78197804193588827138944181161393327898220e206,
+ -3.66142336836811912436858082151197348755196e209,
+ +3.61760902723728623488554609298914089477541e212,
+ -3.64707726451913543621383088655499449048682e215,
+ +3.75087554364544090983452410104814189306842e218,
+ -3.93458672964390282694891288533713429355657e221,
+ +4.20882111481900820046571171111494898242731e224,
+ -4.59022962206179186559802940573325591059371e227,
+ +5.10317257726295759279198185106496768539760e230,
+ -5.78227623036569554015377271242917142512200e233,
+ +6.67624821678358810322637794412809363451080e236,
+ -7.85353076444504163225916259639312444428230e239,
+ +9.41068940670587255245443288258762485293948e242,
+ -1.14849338734651839938498599206805592548354e246,
+ +1.42729587428487856771416320087122499897180e249,
+ -1.80595595869093090142285728117654560926719e252,
+ +2.32615353076608052161297985184708876161736e255,
+ -3.04957517154995947681942819261542593785327e258,
+ +4.06858060764339734424012124124937318633684e261,
+ -5.52310313219743616252320044093186392324280e264,
+ +7.62772793964343924869949690204961215533859e267,
+ -1.07155711196978863132793524001065396932667e271,
+ +1.53102008959691884453440916153355334355847e274,
+ -2.22448916821798346676602348865048510824835e277,
+ +3.28626791906901391668189736436895275365183e280,
+ -4.93559289559603449020711938191575963496999e283,
+ +7.53495712008325067212266049779283956727824e286,
+ -1.16914851545841777278088924731655041783900e290,
+ +1.84352614678389394126646201597702232396492e293,
+ -2.95368261729680829728014917350525183485207e296,
+ +4.80793212775015697668878704043264072227967e299,
+ -7.95021250458852528538243631671158693036798e302,
+ +1.33527841873546338750122832017820518292039e306
+ }};
+
+ return bernoulli_data[n];
+}
+
+template <class T>
+inline T unchecked_bernoulli_imp(std::size_t n, const mpl::int_<3>& )
+{
+ static const boost::array<long double, 1 + max_bernoulli_b2n<T>::value> bernoulli_data =
+ {{
+ +1.00000000000000000000000000000000000000000L,
+ +0.166666666666666666666666666666666666666667L,
+ -0.0333333333333333333333333333333333333333333L,
+ +0.0238095238095238095238095238095238095238095L,
+ -0.0333333333333333333333333333333333333333333L,
+ +0.0757575757575757575757575757575757575757576L,
+ -0.253113553113553113553113553113553113553114L,
+ +1.16666666666666666666666666666666666666667L,
+ -7.09215686274509803921568627450980392156863L,
+ +54.9711779448621553884711779448621553884712L,
+ -529.124242424242424242424242424242424242424L,
+ +6192.12318840579710144927536231884057971014L,
+ -86580.2531135531135531135531135531135531136L,
+ +1.42551716666666666666666666666666666666667E6L,
+ -2.72982310678160919540229885057471264367816E7L,
+ +6.01580873900642368384303868174835916771401E8L,
+ -1.51163157670921568627450980392156862745098E10L,
+ +4.29614643061166666666666666666666666666667E11L,
+ -1.37116552050883327721590879485616327721591E13L,
+ +4.88332318973593166666666666666666666666667E14L,
+ -1.92965793419400681486326681448632668144863E16L,
+ +8.41693047573682615000553709856035437430786E17L,
+ -4.03380718540594554130768115942028985507246E19L,
+ +2.11507486380819916056014539007092198581560E21L,
+ -1.20866265222965259346027311937082525317819E23L,
+ +7.50086674607696436685572007575757575757576E24L,
+ -5.03877810148106891413789303052201257861635E26L,
+ +3.65287764848181233351104308429711779448622E28L,
+ -2.84987693024508822262691464329106781609195E30L,
+ +2.38654274996836276446459819192192149717514E32L,
+ -2.13999492572253336658107447651910973926742E34L,
+ +2.05009757234780975699217330956723102516667E36L,
+ -2.09380059113463784090951852900279701847092E38L,
+ +2.27526964884635155596492603527692645814700E40L,
+ -2.62577102862395760473030497361582020814490E42L,
+ +3.21250821027180325182047923042649852435219E44L,
+ -4.15982781667947109139170744952623589366896E46L,
+ +5.69206954820352800238834562191210586444805E48L,
+ -8.21836294197845756922906534686173330145509E50L,
+ +1.25029043271669930167323398297028955241772E53L,
+ -2.00155832332483702749253291988132987687242E55L,
+ +3.36749829153643742333966769033387530162196E57L,
+ -5.94709705031354477186604968440515408405791E59L,
+ +1.10119103236279775595641307904376916046305E62L,
+ -2.13552595452535011886583850190410656789733E64L,
+ +4.33288969866411924196166130593792062184514E66L,
+ -9.18855282416693282262005552155018971389604E68L,
+ +2.03468967763290744934550279902200200659751E71L,
+ -4.70038339580357310785752555350060606545967E73L,
+ +1.13180434454842492706751862577339342678904E76L,
+ -2.83822495706937069592641563364817647382847E78L,
+ +7.40642489796788506297508271409209841768797E80L,
+ -2.00964548027566044834656196727153631868673E83L,
+ +5.66571700508059414457193460305193569614195E85L,
+ -1.65845111541362169158237133743199123014950E88L,
+ +5.03688599504923774192894219151801548124424E90L,
+ -1.58614682376581863693634015729664387827410E93L,
+ +5.17567436175456269840732406825071225612408E95L,
+ -1.74889218402171173396900258776181591451415E98L,
+ +6.11605199949521852558245252642641677807677E100L,
+ -2.21227769127078349422883234567129324455732E103L,
+ +8.27227767987709698542210624599845957312047E105L,
+ -3.19589251114157095835916343691808148735263E108L,
+ +1.27500822233877929823100243029266798669572E111L,
+ -5.25009230867741338994028246245651754469199E113L,
+ +2.23018178942416252098692981988387281437383E116L,
+ -9.76845219309552044386335133989802393011669E118L,
+ +4.40983619784529542722726228748131691918758E121L,
+ -2.05085708864640888397293377275830154864566E124L,
+ +9.82144332797912771075729696020975210414919E126L,
+ -4.84126007982088805087891967099634127611305E129L,
+ +2.45530888014809826097834674040886903996737E132L,
+ -1.28069268040847475487825132786017857218118E135L,
+ +6.86761671046685811921018885984644004360924E137L,
+ -3.78464685819691046949789954163795568144895E140L,
+ +2.14261012506652915508713231351482720966602E143L,
+ -1.24567271371836950070196429616376072194583E146L,
+ +7.43457875510001525436796683940520613117807E148L,
+ -4.55357953046417048940633332233212748767721E151L,
+ +2.86121128168588683453638472510172325229190E154L,
+ -1.84377235520338697276882026536287854875414E157L,
+ +1.21811545362210466995013165065995213558174E160L,
+ -8.24821871853141215484818457296893447301419E162L,
+ +5.72258779378329433296516498142978615918685E165L,
+ -4.06685305250591047267679693831158655602196E168L,
+ +2.95960920646420500628752695815851870426379E171L,
+ -2.20495225651894575090311752273445984836379E174L,
+ +1.68125970728895998058311525151360665754464E177L,
+ -1.31167362135569576486452806355817153004431E180L,
+ +1.04678940094780380821832853929823089643829E183L,
+ -8.54328935788337077185982546299082774593270E185L,
+ +7.12878213224865423522884066771438224721245E188L,
+ -6.08029314555358993000847118686477458461988E191L,
+ +5.29967764248499239300942910043247266228490E194L,
+ -4.71942591687458626443646229013379911103761E197L,
+ +4.29284137914029810894168296541074669045521E200L,
+ -3.98767449682322074434477655542938795106651E203L,
+ +3.78197804193588827138944181161393327898220E206L,
+ -3.66142336836811912436858082151197348755196E209L,
+ +3.61760902723728623488554609298914089477541E212L,
+ -3.64707726451913543621383088655499449048682E215L,
+ +3.75087554364544090983452410104814189306842E218L,
+ -3.93458672964390282694891288533713429355657E221L,
+ +4.20882111481900820046571171111494898242731E224L,
+ -4.59022962206179186559802940573325591059371E227L,
+ +5.10317257726295759279198185106496768539760E230L,
+ -5.78227623036569554015377271242917142512200E233L,
+ +6.67624821678358810322637794412809363451080E236L,
+ -7.85353076444504163225916259639312444428230E239L,
+ +9.41068940670587255245443288258762485293948E242L,
+ -1.14849338734651839938498599206805592548354E246L,
+ +1.42729587428487856771416320087122499897180E249L,
+ -1.80595595869093090142285728117654560926719E252L,
+ +2.32615353076608052161297985184708876161736E255L,
+ -3.04957517154995947681942819261542593785327E258L,
+ +4.06858060764339734424012124124937318633684E261L,
+ -5.52310313219743616252320044093186392324280E264L,
+ +7.62772793964343924869949690204961215533859E267L,
+ -1.07155711196978863132793524001065396932667E271L,
+ +1.53102008959691884453440916153355334355847E274L,
+ -2.22448916821798346676602348865048510824835E277L,
+ +3.28626791906901391668189736436895275365183E280L,
+ -4.93559289559603449020711938191575963496999E283L,
+ +7.53495712008325067212266049779283956727824E286L,
+ -1.16914851545841777278088924731655041783900E290L,
+ +1.84352614678389394126646201597702232396492E293L,
+ -2.95368261729680829728014917350525183485207E296L,
+ +4.80793212775015697668878704043264072227967E299L,
+ -7.95021250458852528538243631671158693036798E302L,
+ +1.33527841873546338750122832017820518292039E306L,
+#if LDBL_MAX_EXP == 16384
+ // Entries 260 - 600 http://www.wolframalpha.com/input/?i=TABLE[N[Bernoulli[i]%2C40]%2C+{i%2C258%2C600%2C2}]
+ -2.277640649601959593875058983506938037019e309L,
+ 3.945184036046326234163525556422667595884e312L,
+ -6.938525772130602106071724989641405550473e315L,
+ 1.238896367577564823729057820219210929986e319L,
+ -2.245542599169309759499987966025604480745e322L,
+ 4.131213176073842359732511639489669404266e325L,
+ -7.713581346815269584960928069762882771369e328L,
+ 1.461536066837669600638613788471335541313e332L,
+ -2.809904606225532896862935642992712059631e335L,
+ 5.480957121318876639512096994413992284327e338L,
+ -1.084573284087686110518125291186079616320e342L,
+ 2.176980775647663539729165173863716459962e345L,
+ -4.431998786117553751947439433256752608068e348L,
+ 9.150625657715535047417756278073770096073e351L,
+ -1.915867353003157351316577579148683133613e355L,
+ 4.067256303542212258698836003682016040629e358L,
+ -8.754223791037736616228150209910348734629e361L,
+ 1.910173688735533667244373747124109379826e365L,
+ -4.225001320265091714631115064713174404607e368L,
+ 9.471959352547827678466770796787503034505e371L,
+ -2.152149973279986829719817376756088198573e375L,
+ 4.955485775334221051344839716507812871361e378L,
+ -1.156225941759134696630956889716381968142e382L,
+ 2.733406597646137698610991926705098514017e385L,
+ -6.546868135325176947099912523279938546333e388L,
+ 1.588524912441221472814692121069821695547e392L,
+ -3.904354800861715180218598151050191841308e395L,
+ 9.719938686092045781827273411668132975319e398L,
+ -2.450763621049522051234479737511375679283e402L,
+ 6.257892098396815305085674126334317095277e405L,
+ -1.618113552083806592527989531636955084420e409L,
+ 4.236528795217618357348618613216833722648e412L,
+ -1.123047068199051008086174989124136878992e416L,
+ 3.013971787525654770217283559392286666886e419L,
+ -8.188437573221553030375681429202969070420e422L,
+ 2.251910591336716809153958146725775718707e426L,
+ -6.268411292043789823075314151509139413399e429L,
+ 1.765990845202322642693572112511312471527e433L,
+ -5.035154436231331651259071296731160882240e436L,
+ 1.452779356460483245253765356664402207266e440L,
+ -4.241490890130137339052414960684151515166e443L,
+ 1.252966001692427774088293833338841893293e447L,
+ -3.744830047478272947978103227876747240343e450L,
+ 1.132315806695710930595876001089232216024e454L,
+ -3.463510845942701805991786197773934662578e457L,
+ 1.071643382649675572086865465873916611537e461L,
+ -3.353824475439933688957233489984711465335e464L,
+ 1.061594257145875875963152734129803268488e468L,
+ -3.398420969215528955528654193586189805265e471L,
+ 1.100192502000434096206138068020551065890e475L,
+ -3.601686379213993374332690210094863486472e478L,
+ 1.192235170430164900533187239994513019475e482L,
+ -3.990342751779668381699052942504119409180e485L,
+ 1.350281800938769780891258894167663309221e489L,
+ -4.619325443466054312873093650888507562249e492L,
+ 1.597522243968586548227514639959727696694e496L,
+ -5.584753729092155108530929002119620487652e499L,
+ 1.973443623104646193229794524759543752089e503L,
+ -7.048295441989615807045620880311201930244e506L,
+ 2.544236702499719094591873151590280263560e510L,
+ -9.281551595258615205927443367289948150345e513L,
+ 3.421757163154453657766296828520235351572e517L,
+ -1.274733639384538364282697627345068947433e521L,
+ 4.798524805311016034711205886780460173566e524L,
+ -1.825116948422858388787806917284878870034e528L,
+ 7.013667442807288452441777981425055613982e531L,
+ -2.723003862685989740898815670978399383114e535L,
+ 1.068014853917260290630122222858884658850e539L,
+ -4.231650952273697842269381683768681118533e542L,
+ 1.693650052202594386658903598564772900388e546L,
+ -6.846944855806453360616258582310883597678e549L,
+ 2.795809132238082267120232174243715559601e553L,
+ -1.153012972808983269106716828311318981951e557L,
+ 4.802368854268746357511997492039592697149e560L,
+ -2.019995255271910836389761734035403905781e564L,
+ 8.580207235032617856059250643095019760968e567L,
+ -3.680247942263468164408192134916355198549e571L,
+ 1.593924457586765331397457407661306895942e575L,
+ -6.970267175232643679233530367569943057501e578L,
+ 3.077528087427698518703282907890556154309e582L,
+ -1.371846760052887888926055417297342106614e586L,
+ 6.173627360829553396851763207025505289166e589L,
+ -2.804703130495506384463249394043486916669e593L,
+ 1.286250900087150126167490951216207186092e597L,
+ -5.954394420063617872366818601092036543220e600L,
+ 2.782297785278756426177542270854984091406e604L,
+ -1.312214674935307746141207680066262384215e608L,
+ 6.246299145383554153167974732783934504370e611L,
+ -3.000812007679574430883792565577444226490e615L,
+ 1.454904877136007844493861746476079537075e619L,
+ -7.118558521873800304612781121044077357278e622L,
+ 3.514739820897817389472822276832677887997e626L,
+ -1.751137068816377401163011262831890828437e630L,
+ 8.803498091818800678575314081978951179602e633L,
+ -4.465612911700593572269200981612564161010e637L,
+ 2.285494565287530681465757798517033542888e641L,
+ -1.180145168917737098025683613598595411329e645L,
+ 6.147941849198393232663105284575149616925e648L,
+ -3.231069156963603593233679426198974663352e652L,
+ 1.713042725635435041806895849197608270935e656L,
+ -9.161761363270648920537613435771882898051e659L,
+ 4.942675965960539112005679080810117766825e663L,
+ -2.689684712697383518131267222872386600031e667L,
+ 1.476320014229917759615308193449511534656e671L,
+ -8.173037740864781506597184122049453514594e674L,
+ 4.563462313190521363235182420178784459580e678L,
+ -2.569790015236158475703055501886439298708e682L,
+ 1.459410219452119981958355737832022375085e686L,
+ -8.358304882556983795372406183642486436653e689L,
+ 4.827305091483557818593092377664570208355e693L,
+ -2.811394311081493166793414157061950132403e697L,
+ 1.651026863340675349245561261339568827739e701L,
+ -9.776578579336866764167878646459810047899e704L,
+ 5.837207965197521880181236529616560780535e708L,
+ -3.513938957938032127105389702846371181520e712L,
+ 2.132747371360190507595748444536911078788e716L,
+ -1.305047363239192640729466563372665311602e720L,
+ 8.050825342678337497636292798039996484780e723L,
+ -5.006884161223862543665524155681082112689e727L,
+ 3.139016066011452177570812014513491361235e731L,
+ -1.983829535212711378291469356666001365873e735L,
+ 1.263822427649676371257598052486237628698e739L,
+ -8.115678659900522918802121684491754629503e742L,
+ 5.252995164972075271667364371449050412435e746L,
+ -3.427038125662404660056511738625477058135e750L,
+ 2.253446011834352733279946306835940729858e754L,
+ -1.493407341897034717876962786798831719683e758L,
+ 9.974681322653365118752729509398728354442e761L,
+ -6.714230142773850863927710112350816379426e765L,
+ 4.554668668931723346600337564274944733530e769L,
+ -3.113635386023220127834102980385275379533e773L,
+ 2.144945411287666204679363498162954050208e777L,
+ -1.488982121181387164932397544378555256016e781L,
+ 1.041537218854627455352298173588983048748e785L,
+ -7.341073881786613676177562822942175683993e788L,
+ 5.213524272587199574980117351016322518428e792L,
+ -3.730592531776514409283897139216167197989e796L,
+ 2.689592876341877079083449497724049500175e800L,
+ -1.953643788231947582529884602972233135002e804L,
+ 1.429691073080500563348668321308878246277e808L,
+ -1.054059177095488639836063073070536825675e812L,
+ 7.828919160938693948399336431565350676613e815L,
+ -5.857884457184396382550955498026762014753e819L,
+ 4.415401588264172474136969345712659422380e823L,
+ -3.352573884181287635796498822858109969161e827L,
+ 2.564210385719224000156548240934108974447e831L,
+ -1.975534392116037602837941409848663077528e835L,
+ 1.533062123975940045180943006948008486466e839L,
+ -1.198306160488763291730059994812781226903e843L,
+ 9.434034267770711698676321369174735725321e846L,
+ -7.480619200038505368468483892246806488879e850L,
+ 5.974161898439971564124576801455052907638e854L,
+ -4.805125663714699771668630995361572639386e858L,
+ 3.892332138028039952403812726744593073776e862L,
+ -3.175276505779699340738548328810180869575e866L,
+ 2.608608681939322393581069188271626122519e870L,
+ -2.158148554392732439392868052394994052628e874L,
+ 1.797993483301448477700600221980862686033e878L,
+ -1.508407575089108597171576068862286462909e882L,
+ 1.274273406242459482708930389008701147244e886L,
+ -1.083950475353171986748233157909397370193e890L,
+ 9.284292630726328432038470356821265395331e893L,
+ -8.007012115449516364480417355063446317414e897L,
+ 6.952871948429568933888979915833266241471e901L,
+ -6.078828929473797621198666799700739891205e905L,
+ 5.350908089710964244671334224708057812633e909L,
+ -4.742168072503284973969982758434401589090e913L,
+ 4.231149239401967697257534662010605751136e917L,
+ -3.800684612827828851942743291026898158947e921L,
+ 3.436984796314246158361599955909956583986e925L,
+ -3.128930718993658356398482705317381808301e929L,
+ //
+ // 602-1300: http://www.wolframalpha.com/input/?i=TABLE[N[Bernoulli[i]%2C40]%2C+{i%2C602%2C1300%2C2}]
+ 2.867524740577223817164663595437919813239e933L, -2.645462974939090580963101220449509725942e937L, 2.456800827789169780295419018499543141869e941L, -2.296690549725790064673528302231294870532e945L, 2.161174697699793265715182091764676666457e949L, -2.047023224586087259305754002882269123194e953L, 1.951604806042481282712736234132803700277e957L, -1.872785206668284042110390583158639495143e961L, 1.808847160923282257302788929692654262867e965L, -1.758427529634609613399327744595257497188e969L, 1.720468488019528147087036246754294757647e973L, -1.694180279355332648057740852839804839425e977L, 1.679013685251183870616469618951463869496e981L, -1.674640861433092946269144173974414945664e985L, 1.680943600147858322148767806987527412112e989L, -1.698008433134805056489370119323402510305e993L, 1.726128304411348354183882648263448448633e997L, -1.765810838736918108045764015629875016219e1001L, 1.817793526882665071123822455897912718293e1005L, -1.883066459765807128944897377914669600374e1009L, 1.962903588035940537938222992228124233567e1013L, -2.058903881920696086033171142046100185783e1017L, 2.173044241735786946064676598703393618281e1021L, -2.307746591425236218893160658331303115253e1025L, 2.465962312241418731528973526597433097256e1029L, -2.651278087802503406316742676403301581549e1033L, 2.868048395658440423778896607880692085708e1037L, -3.121561373094393453726645989392054731637e1041L, 3.418246710091027042099932753084126095820e1045L, -3.765936717592482928796920675282930034018e1049L, 4.174194967165213973474293718362757753877e1053L, -4.654731142471753017867105249805137855862e1057L, 5.221926310090434518253178454907900079787e1061L, -5.893500145664015254409680930288710794031e1065L, 6.691361332576333738130720616841706994101e1069L, -7.642695184575063524608775697714741180954e1073L, 8.781359617440634128952082759434723165820e1077L, -1.014968338800868135594698909567734048618e1082L, 1.180079105471061498849752479044520598414e1086L, -1.380162016721660241308046692646452732446e1090L, 1.623685158291375662775444238282343536948e1094L, -1.921404880943289359290531906131400049399e1098L, 2.287040419533950152851434188305457266969e1102L, -2.738162880206032093123060939173765335255e1106L, 3.297371307848643161532227459901386725801e1110L, -3.993854689967542662299211323085023297602e1114L, 4.865474805885735467044047308902313673643e1118L, -5.961554732739027308247618738765152679497e1122L, 7.346627151757492821447573639763873833441e1126L, -9.105493288459908620636712748727395637965e1130L, 1.135007867626164861991621396462821975167e1135L, -1.422876214067403769204874786137232627418e1139L, 1.793912271573925309173135913914667878908e1143L, -2.274542916104231188526120123855259514144e1147L, 2.900273688809987694128857655036783261991e1151L, -3.719022795563122339874875448447744493398e1155L, 4.795753420982845153626611023078973364321e1159L, -6.218937220186281310109009529226561379773e1163L, 8.109611247999584815668395828940708619394e1167L, -1.063412316303440216539797215354141158589e1172L, 1.402214363674117662460496032135704328989e1176L, -1.859223235464558752766840772026058694872e1180L, 2.478828203789903637835992128856742276028e1184L, -3.323169416193176673655321536761413885767e1188L, 4.479640207312477092938541546776915956580e1192L, -6.071721672924085739424644485636889518799e1196L, 8.274698015123579607850404326757887762270e1200L, -1.133855131459773018024052539697784205966e1205L, 1.562146222050424344025824344480153248984e1209L, -2.163904570724750459592352173471446831752e1213L, 3.013703210722669908901286635073603018696e1217L, -4.219903244242308803914269531001720703294e1221L, 5.940703220571043642186808904696174833998e1225L, -8.408147464216029127243257448169774333631e1229L, 1.196419999747411909144144315499654470715e1234L, -1.711518922741148710381740436694440587059e1238L, 2.461434539630850545757453894977350505251e1242L, -3.558748530932574002484841810677232366801e1246L, 5.172525606281917297657859608800373729529e1250L, -7.557850217376323621984784308774476917753e1254L, 1.110141075986004209769735296234549704181e1259L, -1.639216556732622481406083885926912451281e1263L, 2.433138328152562628385514545400044125983e1267L, -3.630476645219033020888837165221286413171e1271L, 5.445289518636306992942604775585977779418e1275L, -8.209806424989072060381590985042272020067e1279L, 1.244209849774134691374848390346442737613e1284L, -1.895384488692308848372754844910263931874e1288L, 2.902272596647764894203369746806169285113e1292L, -4.466944174025026625137032739317650862593e1296L, 6.910485739507636504313238347702354354916e1300L, -1.074550085668784170644854815272144687769e1305L, 1.679419258904938802199084915274175753529e1309L, -2.638155207645646220849795321076977230763e1313L, 4.165284786632654168563096850610185378233e1317L, -6.609774274649031371770290191295685774584e1321L, 1.054194100570841329575393359295845860860e1326L, -1.689822316104196916970708778265725885275e1330L, 2.722340957904912685605914893019783431164e1334L, -4.407776313964403233676810178851005163725e1338L, 7.172436210641903635864868181569129834361e1342L, -1.172947440100495955246356688225986736990e1347L, 1.927745674072824377954824961348211728006e1351L, -3.184013467435655962214317208087993711563e1355L, 5.285045125125832341263897233405196808096e1359L, -8.815883582819232027207118521581424783107e1363L, 1.477818368424505276711779171224799759099e1368L, -2.489482576496570159333357550363134602876e1372L, 4.214292881345076419678976329218843808204e1376L, -7.169068531615459070909644981451297906220e1380L, 1.225513133750594558180516896275774441895e1385L, -2.105160827387119480607950260289853896637e1389L, 3.633787605672960549893307203363402915249e1393L, -6.302830804027849515239463308430185990705e1397L, 1.098521433860299633481449685364914115468e1402L, -1.923858597401607622723144320370279518600e1406L, 3.385512828549942051667348582951554570164e1410L, -5.986286250836771248147827011780631183980e1414L, 1.063572794668186370728928272374836554300e1419L, -1.898666684876492795233907174493757572290e1423L, 3.405627002840442789235393111726609930533e1427L, -6.137724140284450036591063946055819333244e1431L, 1.111411024660941507986132154479364267486e1436L, -2.022060876221034821890406900217875915949e1440L, 3.696248025817144690840539132103538834108e1444L, -6.788448439024998306316860676030442691610e1448L, 1.252615233049059554031883468823648511657e1453L, -2.322190433141265975888955985950824418729e1457L, 4.325200102353909846882217732999001735342e1461L, -8.093531903011880118699218269369570178812e1465L, 1.521558881878323790120983450270946857209e1470L, -2.873780311010933807686415826253380907421e1474L, 5.452903697278823304173192839252276211670e1478L, -1.039457922537509500320638240809547113575e1483L, 1.990610112724715126895008793014214505760e1487L, -3.829667853173777076954453401761025071562e1491L, 7.401624504283011888971231756333356050310e1495L, -1.437075122764477911733220492562365990710e1500L, 2.802940275035867428066581228962104019228e1504L, -5.491938363067613321364335249495394164430e1508L, 1.080961960603953462180593404647115933651e1513L, -2.137290931892412298654741768897581319007e1517L, 4.245031321673807283498263276791307370788e1521L, -8.469499523038763989328773224520912663309e1525L, 1.697421812794203793865032206191322699261e1530L, -3.417217332563937242285349373774004020539e1534L, 6.910378594841763785923780822895851271770e1538L, -1.403696282437585785557998429691459557649e1543L, 2.864060533055333035232343601021192111053e1547L, -5.869818290384811353182423286543086530728e1551L, 1.208359745327224593486268988808338456906e1556L, -2.498576742140453770373914215325521001990e1560L, 5.189311407347546310078739863704346083861e1564L, -1.082537954843916294257278789980768336964e1569L, 2.268238255751421312559806122980932952706e1573L, -4.773557403917983369065731568732198697502e1577L, 1.009019097334998841920279535262007639746e1582L, -2.142181266523235177327239693359275472557e1586L, 4.567814904130855969979178320003286614868e1590L, -9.782550516204803195398428611221899469345e1594L, 2.104180123097086948576304557651398411373e1599L, -4.545658958087323864004652894518442709646e1603L, 9.862563944609427542603740078470901803131e1607L, -2.149105846582226970866569209122813809019e1612L, 4.703235567543888152049628411354542509156e1616L, -1.033719212601584878353206879472796545848e1621L, 2.281767401903848796732740825793310514456e1625L, -5.058236070813950229238666252351966279306e1629L, 1.126112519657857205642546937554224492775e1634L, -2.517766761987679577706779689880657777343e1638L, 5.653225190181653388317503182908983211029e1642L, -1.274735955461074142223278576503188429497e1647L, 2.886578974679460464298863945016671299242e1651L, -6.564203307141426181809363135003467581753e1655L, 1.499036144473064593308260681782048262301e1660L, -3.437714715599902386917108442954580869236e1664L, 7.916830957072777234152907034541325149479e1668L, -1.830850567422571420661248197094782575285e1673L, 4.251778280827419894527511469762091846660e1677L, -9.915182507286989818033146623995507108134e1681L, 2.321878208636697663781227497233334385222e1686L, -5.459879022461660582811365437190884471726e1690L, 1.289222044549922720398543474297554204559e1695L, -3.056819658344217799458557578658863826289e1699L, 7.277891759142725294172926258364455941365e1703L, -1.739928293433385104144012025546489673795e1708L, 4.176797408823713136137404972612780406904e1712L, -1.006788178307821554781930741698052910780e1717L, 2.436754569909644399766538111317379484511e1721L, -5.921896599028498715774458493117079340155e1725L, 1.445045688171565118619109316933316429671e1730L, -3.540547766876069233350621578795319652040e1734L, 8.710114552028472554054293344204504325978e1738L, -2.151484527880464463303897113553085899101e1743L, 5.335928195512405709733771642389502809087e1747L, -1.328726408335015910030370523083559660016e1752L, 3.322090527232917400247098823651437597786e1756L, -8.339387326241218096865362177688582376376e1760L, 2.101842203781264395369771906884644062395e1765L, -5.318704469415522036482913743767085545209e1769L, 1.351288005941730688647540059088127991581e1774L, -3.446853546858473171100748720136784228698e1778L, 8.827284762030783576089954173424852998700e1782L, -2.269642226090373319660782216907175419317e1787L, 5.858820683661708553422363777419430816755e1791L, -1.518385813684321665045387969920683656625e1796L, 3.950661327164595923092260035122668890334e1800L, -1.031976516347387969958181456058243183780e1805L, 2.706317892325103782207094286049104555552e1809L, -7.125140422584701175967252533378906957380e1813L, 1.883260203116768075569432925204868418472e1818L, -4.997193687108743666000994570700725873035e1822L, 1.331182722092654526185433799891693838871e1827L, -3.559930289076558484535632566755216035553e1831L, 9.557281027056970446117541983785660301558e1835L, -2.575805002229372523547972911961335317502e1840L, 6.969058431277067406841032797913179025984e1844L, -1.892842481279278678390672746902260183506e1849L, 5.160964211693777744707760614147460787285e1853L, -1.412602588198037643242529860614298968137e1858L, 3.881313379962387603749693387037174052146e1862L, -1.070542170988009009334148472388319844527e1867L, 2.964094312414144330805731101996829908435e1871L, -8.238350132106899955856124602934281976453e1875L, 2.298504171050560756192352106062598639825e1880L, -6.437303944649223478093890316531995121228e1884L, 1.809727811843121957353712606428292269805e1889L, -5.107047553992257935533518628886728031061e1893L, 1.446674478990385642488446075734631327506e1898L, -4.113513327511444762766719175770513771122e1902L, 1.174067517257431444028448391638451935667e1907L, -3.363630086409895071362533854123306097827e1911L, 9.672868956071838221096869293070568259792e1915L, -2.792101741911955365960369780457612630184e1920L, 8.089710604557382430162031502761771390568e1924L, -2.352650988877130983061761312962677887796e1929L, 6.867549079740051556501575104006222995568e1933L, -2.012161201632998475706904405535757516336e1938L, 5.917489529279588702317256137229398357271e1942L, -1.746718667239329545125902248821502764273e1947L, 5.175069416058975040990816515838893249437e1951L, -1.538913401594651457295303469904084052963e1956L, 4.593185746210984655636051293374195150815e1960L, -1.375981868450401919299150690829612124045e1965L, 4.137207965217520410530508053863759216958e1969L, -1.248518564582257710069294326648626362439e1974L, 3.781575291117895093413381897917341286951e1978L, -1.149575999691408110085856948595444100435e1983L, 3.507413095836612229403470531176947165451e1987L, -1.074032838410645352804690949680310176413e1992L, 3.300857202456564870338466973024760446263e1996L, -1.018149578840803516349758843017979498322e2001L, 3.151876950233613792531594490714752800621e2005L, -9.792574827376149360558532022944033224780e2009L, 3.053456145978161645823454710737904504036e2014L, -9.555442346102849014299990542596620094035e2018L, 3.001037449298122384017009412541525703002e2023L, -9.459120112371096268275049056229023773120e2027L, 2.992168042152196502453442556462819104060e2032L, -9.498922680869041470681858599915282791899e2036L, 3.026307717971075309746179763189393755074e2041L, -9.676079238806159594565350708123427510151e2045L, 3.104778286352798464772361361434013339088e2050L, -9.997786802782252742109475924344598057966e2054L, 3.230847952724856366943939804248186203776e2059L, -1.047769651900498931701604323213605884945e2064L, 3.409958102134053489747140426163802214042e2068L, -1.113687894644055086152064258459886518528e2073L, 3.650114509271160332136458711252217684956e2077L, -1.200536387553969483433239131469825141412e2082L, 3.962482337718333099498977337189304099484e2086L, -1.312441206957064803437100929905979391106e2091L, 4.362246723746013772563799740886664288515e2095L, -1.454975881895253548422481637083633839534e2100L, 4.869831412214692119172895822285084162147e2104L, -1.635618419512383251104125916207188960680e2109L, 5.512611314145041257838234038980389596534e2113L, -1.864392957231340288547618808749072127289e2118L, 6.327317613106621547060670091824665547127e2122L, -2.154772001506498703267302897994526372056e2127L, 7.363426139490286496267931634843475368903e2131L, -2.524950643808031915843604894357998905460e2136L, 8.687956390288096215918373666581638675156e2140L, -2.999656978200020459428228924242615592768e2145L, 1.039231328851609224822335039430898644149e2150L, -3.612742437616019936358910410005123924796e2154L, 1.260211309932738404790711574105022002093e2159L, -4.410916378453971105434385837025433805752e2163L, 1.549140617923265948720013792673729394719e2168L, -5.459173749226782924959103886664322964926e2172L, 1.930343307630952098252884031069043541182e2177L, -6.848749229218425353808144618581305978045e2181L, 2.438117138001365487681440577590059588102e2186L, -8.708873656769794358508423272379627581292e2190L, 3.121268068338199458891764932384819739714e2195L, -1.122430216307539309816165910733145404999e2200L, 4.049900779207199370582177687160985635615e2204L, -1.466167983141158219266077836130256565915e2209L, 5.325678718693772500250292767751070974887e2213L, -1.940955845102272053048140384364058448998e2218L, 7.097467198361219669927211698104447309186e2222L, -2.603968771680987683436428778397387110896e2227L, 9.585403285394812946713320044815117440444e2231L, -3.540176030547640510648455468270569908446e2236L, 1.311827683984025111744358347783996339730e2241L, -4.877124229155333857009747836542843294702e2245L, 1.819213075760490882591173222316749809951e2250L, -6.808221630329265915405178596748950929642e2254L, 2.556299969544109052724772800143396857058e2259L, -9.629763347675306704861859899230073979116e2263L, 3.639508580119285595844040783082958425575e2268L, -1.380037493555816309137481185927387732499e2273L, 5.249980712165216709135893538080020409581e2277L, -2.003737844109055078145975651407367170529e2282L, 7.672522280806944397358668566379646540213e2286L, -2.947454993639165318799389781921184991045e2291L, 1.135966912801707623489383623092951142963e2296L, -4.392293711194501621873299212059053651432e2300L, 1.703813210168560937608104155973968112409e2305L, -6.630636743874062041158387022015853902938e2309L, 2.588742636486379690203698247275411406029e2314L, -1.013959594068423546627946242481463893979e2319L, 3.984265821528043268586235974854766821078e2323L, -1.570614519682157047612769672066387881154e2328L, 6.211297381339606877062824459742129064477e2332L, -2.464246931985476159686671650962783785426e2337L, 9.807833742601662212615240518855757197483e2341L, -3.916036434571217691317276306031837539092e2346L, 1.568566392975837368624727722120313955274e2351L, -6.302885887601142677858008037129298948063e2355L, 2.540704455306077495480843691828334210014e2360L, -1.027412480318234348899627142408950111875e2365L, 4.167823618450297116765978030480648316769e2369L, -1.696076602731914277275203926124423530377e2374L, 6.923904505633301788461482786634220738504e2378L, -2.835463065742506394026733592206185459035e2383L, 1.164828772275756526225951620927486307632e2388L, -4.800242878545012539781545966693324656699e2392L, 1.984381759611877246529319121941597679107e2397L, -8.228979942542641498511023600269641046627e2401L, 3.423130231367101727862739208673375060101e2406L, -1.428418168129733054582191895023094524495e2411L, 5.979153801634459282232521647160044877770e2415L, -2.510581926948409809562349588087762800160e2420L, 1.057443785053915411991029410076722022815e2425L, -4.467723713549428749678277264414266162837e2429L, 1.893474116528533144079731251913008472748e2434L, -8.049601965052954947260081891142509464888e2438L, 3.432648527503971149009691133946275281368e2443L, -1.468324699963694393989960228042259134294e2448L,
+ //
+ // 1302-1600: http://www.wolframalpha.com/input/?i=TABLE[N[Bernoulli[i]%2C40]%2C+{i%2C1302%2C1600%2C2}]
+ 6.300146502435743791500010801885493871234e2452L, -2.711520667146768856688291798851999580833e2457L, 1.170595555513900137297344452318266434006e2462L, -5.069095411973246242900074508988493530542e2466L, 2.201819284807954055092117706033113168896e2471L, -9.593088725189386197503123561368325167085e2475L, 4.192362385909155628936230811010649614060e2480L, -1.837725836941968309866675158105812946762e2485L, 8.080201101491972605313807752565294881374e2489L, -3.563536075527215702966392543784039539240e2494L, 1.576361051321107275181955665159661781175e2499L, -6.994292466180175594372663323941761853364e2503L, 3.112744353537336702834647901141392426258e2508L, -1.389481328370627358752727485697345194612e2513L, 6.221134636655213696041740685131223999953e2517L, -2.793779613656947577224654924852010601105e2522L, 1.258399062987759035354039924686781081603e2527L, -5.685208194704131918461885165870560583895e2531L, 2.576167857759537340210434756292816456179e2536L, -1.170846052338591953257169251219597581763e2541L, 5.337296787116189575571202979672747140313e2545L, -2.440264475369219459038748840841422948951e2550L, 1.119037151526195093932933161706501865175e2555L, -5.146858829220973887154576240993607686435e2559L, 2.374259791963193693837576781321391741634e2564L, -1.098501215269400934956638118646657823799e2569L, 5.097500369683616795005376807036889542869e2573L, -2.372446971688020647583535886090779018865e2578L, 1.107430282014636546248612381377039463753e2583L, -5.184597227131050012643138079903381280471e2587L, 2.434392040100910394476893838832599310265e2592L, -1.146412753331162872665743308094817095949e2597L, 5.414578104816988124950636101250217797539e2601L, -2.564835392810685332173156758121489913946e2606L, 1.218495070518549208066544111736985586178e2611L, -5.805713573821806672815019495319510297824e2615L, 2.774298194574319430697819781128985128618e2620L, -1.329580186505564627453485444017911980430e2625L, 6.390545858902318479863947547243743500916e2629L, -3.080502542499571035376377703435361520427e2634L, 1.489236104239976282318361008292980814533e2639L, -7.220413839991892382038608955317126799684e2643L, 3.510874916591640642524021216241607185085e2648L, -1.712070118580404599831061485055269100525e2653L, 8.372956919832386730490070625622785478703e2657L, -4.106629146981883685523102256292669054596e2662L, 2.019945438530802964718619732330776495740e2667L, -9.964133277392242111939720494354938982970e2671L, 4.929278642971447854669801547226335041410e2676L, -2.445509657169810919463982615395074704130e2681L, 1.216734421265677299127016883839223226884e2686L, -6.071008437677720186241562251151490713584e2690L, 3.037824949882992896564570441252792097027e2695L, -1.524402878612630565501569310883356490225e2700L, 7.671320530781999359200097739951316234193e2704L, -3.871436167706734376478728954716915204399e2709L, 1.959313530432202158587932399068682252335e2714L, -9.944063618400630821320953821427307024297e2718L, 5.061161998202463346818982228476199873781e2723L, -2.583219090831132705328958245740715185448e2728L, 1.322193991367293532684189527174543501836e2733L, -6.786569982732483290873213417465458376706e2737L, 3.493212334804776543395067018414547811062e2742L, -1.803090099978261928508495412750404640933e2747L, 9.333100843930216567894508007158644926767e2751L, -4.844499031405982604449146511179496492045e2756L, 2.521648090959971240812330574936006906830e2761L, -1.316227870932708474838173333385377250286e2766L, 6.889488826832738674261056521130795910494e2770L, -3.616184242864384509259984293501533623932e2775L, 1.903356124758119137116543283603627028779e2780L, -1.004601544584640657081847200643996069583e2785L, 5.317043885597842225603585588404817559596e2789L, -2.821938866752488868682751438901900485500e2794L, 1.501842023003449590337997900945924161741e2799L, -8.014908048137216649348740300633172710524e2803L, 4.289126235121619907138036129192558937445e2808L, -2.301619137231461344870820700320913118444e2813L, 1.238485136850053215006962645111854705210e2818L, -6.682503731149007943059244518074044280490e2822L, 3.615572393938012932030234169574978859655e2827L, -1.961565108627429629104703146282982075623e2832L, 1.067123259692924564435881096382837264046e2837L, -5.821179870182035246401397327057170726418e2841L, 3.184127229476322727732208017279268211356e2846L, -1.746429902183019597973436257300843998825e2851L, 9.604873565299766333876882842813498685054e2855L, -5.296759978724702692134960752308186890356e2860L, 2.928906353338652198977536576170287112391e2865L, -1.623961162577704769945821804737884742792e2870L, 9.028574047002736235613238355032484299017e2874L, -5.033087486357905828950503441308068892610e2879L, 2.813325650062267479031371852434194635210e2884L, -1.576791132296320840138263753339056345362e2889L, 8.861258343945925667272164531504265693289e2893L, -4.993236404321511029440212686547068244002e2898L, 2.821192993950901287717082243608730217471e2903L, -1.598254169674379493385730199445427966752e2908L, 9.078617590346932363947095804057608979359e2912L, -5.170742114456472142154347566092068443393e2917L, 2.952866185102528847516095880416675972086e2922L, -1.690794578626103552690094140317813413244e2927L, 9.707168799669516048238542260085175133847e2931L, -5.587884732306715493795271931175883605707e2936L, 3.225179489154957423492905957887744116530e2941L, -1.866424419669188178697802576490431604300e2946L, 1.082967626854618222657109354056973072044e2951L, -6.300392007169862865282706277272018077291e2955L, 3.675066377245428685118763485986517510658e2960L, -2.149348371085132073107516253339849053182e2965L, 1.260349351812619395000600434630904474324e2970L, -7.409963623771231302980906971935254993610e2974L, 4.367980758467862686643231700861155889684e2979L, -2.581566823350789671250829457603555544100e2984L, 1.529757357568342629912560827243282062227e2989L, -9.088595394263364554625061567617375176719e2993L, 5.413829169254585648363594604231030415354e2998L, -3.233288119606092759447005827969216281573e3003L, 1.936042437734875803183915765854038424658e3008L, -1.162289934202291715747729318797398221667e3013L, 6.995870350500567071550614251287615697508e3017L, -4.221776496490106417392945233048068288503e3022L, 2.554309239868912570382343877718991746122e3027L, -1.549440871550119801225143558087410562418e3032L, 9.423199525954784955533959981278992475051e3036L, -5.745689660772387668861183913170050552119e3041L, 3.512407521007240798565045328376471603253e3046L, -2.152708113797517364614914569890010876143e3051L, 1.322761289733739440340237168659770154654e3056L, -8.148777388506488753591136948542248584098e3060L, 5.032880858479326069741729004270784264612e3065L, -3.116396010103058126269735274818345780360e3070L, 1.934634831148214353514796782480703021435e3075L, -1.204077166243116651938489240924641810276e3080L, 7.513065583444964704795707060501161621868e3084L, -4.699873512563164914493150520500838535415e3089L, 2.947541197349762411713872934523813866703e3094L, -1.853262416286420077763886100673646141885e3099L, 1.168196427912100545575264493997591040800e3104L, -7.382362285873345348505276546404015842875e3108L, 4.677071041058096429847797962954927487730e3113L, -2.970642034084362431442183248944824506476e3118L, 1.891572688282564476274920103912259755482e3123L, -1.207509963440193713810418554061532113326e3128L, 7.727731208240101791845515599659441557781e3132L, -4.957988488048495669466804712012179891532e3137L, 3.188965862446236259925047956715566822864e3142L, -2.056286895821370106507670239256782411337e3147L, 1.329246918771714093479509313343886287414e3152L, -8.614188519577835653765633797787633659253e3156L,
+ //
+ // 1602-1900: http://www.wolframalpha.com/input/?i=TABLE[N[Bernoulli[i]%2C40]%2C+{i%2C1602%2C1900%2C2}]
+ 5.596396533621874175909933615343145642161e3161L, -3.644908483469388437457938883454376864180e3166L, 2.379838409026860469990569665632800095988e3171L, -1.557720925267669865362152155022069166772e3176L, 1.022143420270029721682551084917730373739e3181L, -6.723767358891570842116651998814252095792e3185L, 4.433950491570308179905446963723780229747e3190L, -2.931196854668917448553150023532223509373e3195L, 1.942557068752664549549945921392100172355e3200L, -1.290553202978622786891265558106235068695e3205L, 8.595082329732118303768775883557789195136e3209L, -5.738453265222970049867280061719670658457e3214L, 3.840687915100689856736926915331157331684e3219L, -2.576862441955523551149886625900059307506e3224L, 1.733166107320377310388765047659987844208e3229L, -1.168569552450178559412843683052610870569e3234L, 7.898289836694980777809433306209459851871e3238L, -5.351485909164216694400535493924387979018e3243L, 3.634772439350395177931952925644409735777e3248L, -2.474801048002975145046569303233576339695e3253L, 1.689126939254790850063878942448569759390e3258L, -1.155691524500722774057997965355407962525e3263L, 7.926435404542361405718288670391575676323e3267L, -5.449654814183048796524718620178906854846e3272L, 3.755898589900254795894812942275711835138e3277L, -2.594843902682143854622514329649211211808e3282L, 1.797048752397789969347915328338360264536e3287L, -1.247551415074438712713815166107969504456e3292L, 8.681719521514448143910215886388510318746e3296L, -6.056203898213120922016159444227958572276e3301L, 4.234882876331814099029781995617143573641e3306L, -2.968432911643338866295929748049749932906e3311L, 2.085723508930484816454740610260790948864e3316L, -1.469023169879432026361623513301566735138e3321L, 1.037150346505052892302077637883522696572e3326L, -7.339977067836656769144838365069396168014e3330L, 5.206985412168234130596004552956337839140e3335L, -3.702673773319239583641029108403509825141e3340L, 2.639251227995760315076225206168354089692e3345L, -1.885736353072698581595150856674914203383e3350L, 1.350563292338261784288559687678302458996e3355L, -9.695749980998301526113046898985991802000e3359L, 6.977167462628398202151721319169989304520e3364L, -5.032768280399753942925624560483352299263e3369L, 3.638844963651800168080623511900705036698e3374L, -2.637228631269251606169613775399022890118e3379L, 1.915836351653767108720464847696767898597e3384L, -1.395064293615007319328267865803567670760e3389L, 1.018249052614943190644465556486933211307e3394L, -7.449662162606857550867922631658930320805e3398L, 5.463119632208085241594107781601567713991e3403L, -4.015736541676989144201935890497836963875e3408L, 2.958754190183866660901503059509579790900e3413L, -2.185096074054288399312733179064098492511e3418L, 1.617517444557020250864919655301189186103e3423L, -1.200170662015511746748935675940010250555e3428L, 8.925888349899029449015791684428724952411e3432L, -6.653851763691885517669938275618991145962e3437L, 4.971722031098457895973348076474071155918e3442L, -3.723500582577984967442020337848702786829e3447L, 2.795153783541721373364976034391375710110e3452L, -2.103141577212720698169118819883801186873e3457L, 1.586129575320959267959148073466004084241e3462L, -1.198988457279648730711646682156242973137e3467L, 9.084402368157025658430300252246526602197e3471L, -6.898927494435965163817354296023108913714e3476L, 5.251332286149361587885046891266325872375e3481L, -4.006442950956739933884502808470603581850e3486L, 3.063718202820270282280659950794978994604e3491L, -2.348215284130973783732145823834807395920e3496L, 1.803952490148087317330011096671019781340e3501L, -1.389022326803437345760911068933754707688e3506L, 1.071986115818329525986099441493200866389e3511L, -8.292085224650940719705699485423856363908e3515L, 6.428829064452939640541475198655560890344e3520L, -4.995654440302797445368056643032307686314e3525L, 3.890847042582299188849273838681034339406e3530L, -3.037288555751484681537442833929275697351e3535L, 2.376385803695694695338601696534348875191e3540L, -1.863527130251861900692886008704804849076e3545L, 1.464674913498036269270793715104706378182e3550L, -1.153804954579033578659954846698233083197e3555L, 9.109783835348935092264268296199541780964e3559L, -7.208869193983001804305451104827153729326e3564L, 5.717530734277611949162917337810749919265e3569L, -4.544970302634007326980094771330550661605e3574L, 3.621042850825283032134228901678636353355e3579L, -2.891447067949778492831490654980043715471e3584L, 2.314060419397710657435821461707043283167e3589L, -1.856140759923563235273220981623595304434e3594L, 1.492185412981476596273279338314204171587e3599L, -1.202290032627175365810126250991853594801e3604L, 9.708881154579770196658265042625239421053e3608L, -7.857809850747029705680072304049448493252e3613L, 6.373898598298513400228819113197728735438e3618L, -5.181780406472117449048907989647202286666e3623L, 4.222036621953044040518942750638183171221e3628L, -3.447728386429130175025813550845575613047e3633L, 2.821701521717856346224159586852612710800e3638L, -2.314488376711998526455043944505424906920e3643L, 1.902671298033180765286213227393060711096e3648L, -1.567603736821312488140289549008391847440e3653L, 1.294408945316538946551785312385509945367e3658L, -1.071194533081615830960091702262923009420e3663L, 8.884351908108581551151252566466606126397e3667L, -7.384866682828103669170236267589653324531e3672L, 6.152023838008155718180876735217718355563e3677L, -5.136304310431705506236573876510219357975e3682L, 4.297736808124296434723193397876220759378e3687L, -3.603994887745884762510172194982172483480e3692L, 3.028884745605031552399167746007361297342e3697L, -2.551141302205187365552982635794121855138e3702L, 2.153467982869535549299173317536193051608e3707L, -1.821769476343602094059466497311600827296e3712L, 1.544537580582347892980177956984101211006e3717L, -1.312358705945937257247030754517293537539e3722L, 1.117518229297781388884979995402355617235e3727L, -9.536820860779441793021624381677086661097e3731L, 8.156400668831968026931547065507466530546e3736L, -6.990984948728184142718575396052260691181e3741L, 6.005124901126818071638224144541102727563e3746L, -5.169500241880947716732682089328427995109e3751L, 4.459815478235310026240134567325749844182e3756L, -3.855902253361684187081283218890336962427e3761L, 3.340988024176995223515640815937037040546e3766L, -2.901099226680215736735094376078800376829e3771L, 2.524573363444334459448089563912567842927e3776L, -2.201659455716348555524529213295341212492e3781L, 1.924190302190936448078364755844591374353e3786L, -1.685313186099770223843319514432495898517e3791L, 1.479268235966730475749985741048766689808e3796L, -1.301205702893883803117530921635013780575e3801L, 1.147035071153450453405384269242743907426e3806L, -1.013300250456366849150496776951686112298e3811L, 8.970761720605591762300958007557533865346e3815L, -7.958829781488943084496783248922217392838e3820L, 7.076146954685024795720193943027902028642e3825L, -6.304798526260409199660290516451546966159e3830L, 5.629519616664188107056583939722984509867e3835L, -5.037281594099054092767959480843344929292e3840L, 4.516946091316834843581919268794683123349e3845L, -4.058975118925834202620358386772092359951e3850L, 3.655187798978978909014603682039470653549e3855L, -3.298555903041546671060101785513812175322e3860L, 2.983031738662727912016882399515879119620e3865L, -2.703403043317732979516341931451317866898e3870L, 2.455170460800096241793872443768546335444e3875L, -2.234443928432490538417605502448376856290e3880L, 2.037854924078003280537856980560782325730e3885L, -1.862482033918775734840779765743099458137e3890L,
+ //
+ // 1902-2200: http://www.wolframalpha.com/input/?i=TABLE[N[Bernoulli[i]%2C40]%2C+{i%2C1902%2C2200%2C2}]
+ 1.705787724951999960095629912416210969679e3895L, -1.565564556110550991891247404758895970376e3900L, 1.439889351869832939488618785632174464789e3905L, -1.327084102784257406218693901793045990520e3910L, 1.225682557296027075027021534960026145706e3915L, -1.134401635488994148555787301654561211982e3920L, 1.052116934052356802920509999705307165985e3925L, -9.778417073593082219082361206542342793584e3929L, 9.107088061888562704837019028349522303725e3934L, -8.499551364633102138471246155980056936129e3939L, 7.949082681085658044610890152056533167407e3944L, -7.449748809722797718736397140511396011691e3949L, 6.996307824769340144608141799981589288378e3954L, -6.584122718472954006131003060359621706243e3959L, 6.209086595833487707192492087176843233407e3964L, -5.867557793863165391821489909125720982339e3969L, 5.556303538475260373917478405626416604297e3974L, -5.272450955936249442242634142613834212778e3979L, 5.013444428433789818228792126117223030641e3984L, -4.777008429684552423800736200488532033034e3989L, 4.561115100786341787876705283291018781137e3994L, -4.363955932181992701667719449097126840439e3999L, 4.183917007557000586305945495258591147615e4004L, -4.019557342177353010692923286760895584096e4009L, 3.869589913635745758786275231296652917580e4014L, -3.732865038934070181861017140563175000872e4019L, 3.608355799736107390800162778737339576843e4024L, -3.495145258697474565347261083975193776541e4029L, 3.392415245050326563747729613872524362741e4034L, -3.299436517958948801426629481782413630714e4039L, 3.215560142306355508598119430378551642857e4044L, -3.140209934146377815556058799557727461298e4049L, 3.072875852591406752692761744649563131272e4054L, -3.013108231854799187724018548255922550991e4059L, 2.960512761914376268185064129600549308882e4064L, -2.914746139139036596123006476633770383901e4069L, 2.875512319506974985103149834921665445532e4074L, -2.842559316984704569380036093537576068104e4079L, 2.815676498441436148701483904115879856704e4084L, -2.794692334326268275058539147656334465534e4089L, 2.779472571396106785963004020814493340829e4094L, -2.769918800191406321625251621260024635680e4099L, 2.765967395840433013288935879837390099329e4104L, -2.767588816244119880300161388073836623878e4109L, 2.774787246856347651152278076466043136230e4114L, -2.787600586224957950622601135620189837948e4119L, 2.806100771288225169339048358106052817280e4124L, -2.830394446218080573456394167711739786431e4129L, 2.860623983452244712039094143642843717029e4134L, -2.896968870550611723525738907034588104300e4139L, 2.939647481737606306044335918078617963078e4144L, -2.988919258547518526076380181812161398808e4149L, 3.045087329976721023952450383837883029431e4154L, -3.108501609077197464748958150625867523408e4159L, 3.179562410123820875787052833975010965963e4164L, -3.258724638491880104953913719767939138170e4169L, 3.346502614347964869115073881474258766546e4174L, -3.443475601364631413158991572423086599816e4179L, 3.550294123121350747300886840907918182129e4184L, -3.667687162886053419715985091863398517145e4189L, 3.796470357354794420044278000297864085607e4194L, -3.937555311976846882455930574021795626971e4199L, 4.091960185075595842547638450930710467324e4204L, -4.260821710519620959138720129506770036460e4209L, 4.445408854703156440576808070360934740837e4214L, -4.647138333645908068599900650548418672065e4219L, 4.867592250805288922190809906525766574205e4224L, -5.108538156515551259475573296900660666192e4229L, 5.371951876776035157276013631113314852508e4234L, -5.660043513521220243900043448456234873940e4239L, 5.975287081834808618140945840817834710330e4244L, -6.320454323372684034118816565375206053746e4249L, 6.698653321371992324876559665938996023646e4254L, -7.113372643219128807424340495235606473967e4259L, 7.568531854202750881338746432078817214052e4264L, -8.068539383842553693076672384509126681464e4269L, 8.618358887685935324188596304168259394311e4274L, -9.223585437012291673660319256730398171887e4279L, 9.890533091606747031464718533600572123091e4284L, -1.062633567277107015128545384570274268438e4290L, 1.143906286231591191271274413511275981288e4295L, -1.233785411712565904499340744089870916842e4300L, 1.333307331840530219050170916015276125870e4305L, -1.443648758235403286296065629219598769529e4310L, 1.566147425967471851736562867318748510088e4315L, -1.702326086290842780634120184324081017286e4320L, 1.853920350455786350409148418966087344063e4325L, -2.022911043115598592197907512410632615740e4330L, 2.211561842992792253055716743938240466613e4335L, -2.422463130294011318178080247305407476096e4340L, 2.658583129381772791030436640519847627789e4345L, -2.923327636881988941081365085520742216540e4350L, 3.220609866329557159104267531058019683271e4355L, -3.554932228621330128152149026066400241546e4360L, 3.931482212643167323798366327390058684499e4365L, -4.356244944221399578650235478583297389113e4370L, 4.836135498303121165971331625888490168138e4375L, -5.379154636371461359750682662639062606297e4380L, 5.994572359716861309678596804350346692501e4385L, -6.693144535124290060793936095397161934045e4390L, 7.487368894313509797084395689517008597061e4395L, -8.391787970609807810531578161564037339793e4400L, 9.423348062978921203475110312003096820035e4405L, -1.060182516651648405903017734022504884319e4411L, 1.195033105063952979885086754342706651656e4416L, -1.349591538868673992167798923586925758429e4421L, 1.527028315253291113905307092657539132480e4426L, -1.731065051510920640409442255224015234974e4431L, 1.966076741510092840076264635935585216200e4436L, -2.237214093245750681191361238831105906202e4441L, 2.550550094903891445719729187215253324232e4446L, -2.913255853313667303707651906277658164129e4451L, 3.333811847072394764285817140850092324169e4456L, -3.822262084288044913490118858492563410392e4461L, 4.390520310533864198186202368026630430120e4466L, -5.052739449335052080092114976206610871466e4471L, 5.825757966350870043117899492954521458799e4476L, -6.729639942938203582008846884575881320532e4481L, 7.788329466816396015493306357116312471970e4486L, -9.030444674469025073047417528762134025409e4491L, 1.049024263381993629167658236142000524752e4497L, -1.220879351508964912255081664072251573277e4502L, 1.423541151220109512749655991050110438471e4507L, -1.662940118618541616964708044356967429362e4512L, 1.946219185900482116137855064775635250366e4517L, -2.281995008842006909631764011781911322493e4522L, 2.680678198213108543648324254258111216040e4527L, -3.154866427472784086389609599207759103500e4532L, 3.719827710160801797530420206201570269720e4537L, -4.394095404360277919140027580071549980218e4542L, 5.200201854779615608741690339830306148442e4547L, -6.165584312943608652377791415603277251516e4552L, 7.323705248531382981433751104158852636445e4557L, -8.715439846124090647163930834760361817820e4562L, 1.039079696609215651011736087603304766850e4568L, -1.241105689556982425619608247473478857800e4573L, 1.485143079696380339521658550262280772546e4578L, -1.780437412164973637340821168154300094802e4583L, 2.138372099157518882088209435171770222745e4588L, -2.572985071149069551034276570909360759588e4593L, 3.101615379617643734762997559011097203354e4598L, -3.745713657616368229906151946770042703357e4603L, 4.531859496161940719835150033082561700677e4608L, -5.493040495326927998321538336584233566465e4613L, 6.670262730603009306595018122252730741798e4618L, -8.114581584793494903775255213273982440688e4623L, 9.889666561810883044159054730371102725871e4628L, -1.207504541653929734716275932570097623330e4634L, 1.477021377885843688233899471354959308782e4639L, -1.809984912147908767583043524070645821179e4644L,
+ //
+ // 2202-2320: http://www.wolframalpha.com/input/?i=TABLE[N[Bernoulli[i]%2C40]%2C+{i%2C2202%2C2320%2C2}]
+ 2.222043594325228980916360265527780300093e4649L, -2.732869701246338361699515268224049951411e4654L, 3.367233945421922463553518272642397177145e4659L, -4.156377225041273602431272489314020150392e4664L, 5.139764368092890466235162431795350591151e4669L, -6.367329693760865476879589228002216011370e4674L, 7.902356742934106007362514378717026407839e4679L, -9.825176966314431712897976595483070301406e4684L, 1.223792760178593282435724837135946867088e4690L, -1.527068151452750404853140815207477555192e4695L, 1.908935682572268829496101580401263597905e4700L, -2.390593888616966248780378941331847473699e4705L, 2.999171106576893833644521002894489856321e4710L, -3.769440655453736670024798444784356437578e4715L, 4.746047769851891438576002047529258107351e4720L, -5.986405469241447720766576164546767533359e4725L, 7.564466155536872051712519119999711534616e4730L, -9.575641408047918720040356745796976488951e4735L, 1.214322951835035451699619713803395497423e4741L, -1.542682591979864353012093794301924196234e4746L, 1.963334539793192183270983986567556358603e4751L, -2.503148969013901182572118121398034622584e4756L, 3.197076711250102964526567664729089847162e4761L, -4.090653552025822488578293526174572934858e4766L, 5.243302769651520536759521264615159906699e4771L, -6.732697170903775309261288127044088674182e4776L, 8.660529543801770516930589210020128142543e4781L, -1.116015823611149634592870112730519454113e4787L, 1.440675306432920129218036927923030695520e4792L, -1.863078034853256227415397798026969938881e4797L, 2.413595413458810442409656314019115041699e4802L, -3.132317029597258599678590012779717945144e4807L, 4.072246763371584312534474102756137619716e4812L, -5.303577511521827157146305369181950467569e4817L, 6.919417518688636032335131253584331645491e4822L, -9.043473312934241153732087612484569398979e4827L, 1.184037400265044213826044590639924237359e4833L, -1.552956685415800894409743993367334099777e4838L, 2.040404893052952221581694807126473204625e4843L, -2.685565763841580219033402331219206776210e4848L, 3.540927057361929050327811875290025248120e4853L, -4.676912607538885419407656762767991163574e4858L, 6.188165903566760647569323704623433330229e4863L, -8.202087471895029964699042637255411806373e4868L, 1.089045274355389654614196651761310970580e4874L, -1.448524684976553869119447042300206226148e4879L, 1.930028100376784839502387280956424581974e4884L, -2.576074799096023589462128312524664980682e4889L, 3.444369635011990347297134928452972402038e4894L, -4.613354441299253694113609154769978684993e4899L, 6.189834306866879018555349507257537840922e4904L, -8.319470760665157534580593571258276368233e4909L, 1.120124240070996761986102680587384813245e4915L, -1.510740451399746828351090108638980398124e4920L, 2.041108231091323198877509959371257503819e4925L, -2.762447751447012472733302936575873838539e4930L,
+#endif
+ }};
+
+ return bernoulli_data[n];
+}
+
+template <class T>
+inline T unchecked_bernoulli_imp(std::size_t n, const mpl::int_<4>& )
+{
+ //
+ // Special case added for multiprecision types that have no conversion from long long,
+ // there are very few such types, but mpfr_class is one.
+ //
+ static const boost::array<boost::int32_t, 1 + max_bernoulli_b2n<T>::value> numerators =
+ {{
+ boost::int32_t( +1LL),
+ boost::int32_t( +1LL),
+ boost::int32_t( -1LL),
+ boost::int32_t( +1LL),
+ boost::int32_t( -1LL),
+ boost::int32_t( +5LL),
+ boost::int32_t( -691LL),
+ boost::int32_t( +7LL),
+ boost::int32_t( -3617LL),
+ boost::int32_t( +43867LL),
+ boost::int32_t( -174611LL),
+ boost::int32_t( +854513LL),
+ }};
+
+ static const boost::array<boost::int32_t, 1 + max_bernoulli_b2n<T>::value> denominators =
+ {{
+ boost::int32_t( 1LL),
+ boost::int32_t( 6LL),
+ boost::int32_t( 30LL),
+ boost::int32_t( 42LL),
+ boost::int32_t( 30LL),
+ boost::int32_t( 66LL),
+ boost::int32_t( 2730LL),
+ boost::int32_t( 6LL),
+ boost::int32_t( 510LL),
+ boost::int32_t( 798LL),
+ boost::int32_t( 330LL),
+ boost::int32_t( 138LL),
+ }};
+ return T(numerators[n]) / T(denominators[n]);
+}
+
+} // namespace detail
+
+template<class T>
+inline T unchecked_bernoulli_b2n(const std::size_t n)
+{
+ typedef mpl::int_<detail::bernoulli_imp_variant<T>::value> tag_type;
+
+ return detail::unchecked_bernoulli_imp<T>(n, tag_type());
+}
+
+}} // namespaces
+
+#endif // BOOST_MATH_UNCHECKED_BERNOULLI_HPP
diff --git a/3party/boost/boost/math/special_functions/detail/unchecked_factorial.hpp b/3party/boost/boost/math/special_functions/detail/unchecked_factorial.hpp
index 4fa1ebff9c..3c23d6e15a 100644
--- a/3party/boost/boost/math/special_functions/detail/unchecked_factorial.hpp
+++ b/3party/boost/boost/math/special_functions/detail/unchecked_factorial.hpp
@@ -268,6 +268,196 @@ struct max_factorial<long double>
BOOST_STATIC_CONSTANT(unsigned, value = 170);
};
+#ifdef BOOST_MATH_USE_FLOAT128
+
+template <>
+inline BOOST_MATH_FLOAT128_TYPE unchecked_factorial<BOOST_MATH_FLOAT128_TYPE>(unsigned i)
+{
+ static const boost::array<BOOST_MATH_FLOAT128_TYPE, 171> factorials = { {
+ 1,
+ 1,
+ 2,
+ 6,
+ 24,
+ 120,
+ 720,
+ 5040,
+ 40320,
+ 362880.0Q,
+ 3628800.0Q,
+ 39916800.0Q,
+ 479001600.0Q,
+ 6227020800.0Q,
+ 87178291200.0Q,
+ 1307674368000.0Q,
+ 20922789888000.0Q,
+ 355687428096000.0Q,
+ 6402373705728000.0Q,
+ 121645100408832000.0Q,
+ 0.243290200817664e19Q,
+ 0.5109094217170944e20Q,
+ 0.112400072777760768e22Q,
+ 0.2585201673888497664e23Q,
+ 0.62044840173323943936e24Q,
+ 0.15511210043330985984e26Q,
+ 0.403291461126605635584e27Q,
+ 0.10888869450418352160768e29Q,
+ 0.304888344611713860501504e30Q,
+ 0.8841761993739701954543616e31Q,
+ 0.26525285981219105863630848e33Q,
+ 0.822283865417792281772556288e34Q,
+ 0.26313083693369353016721801216e36Q,
+ 0.868331761881188649551819440128e37Q,
+ 0.29523279903960414084761860964352e39Q,
+ 0.103331479663861449296666513375232e41Q,
+ 0.3719933267899012174679994481508352e42Q,
+ 0.137637530912263450463159795815809024e44Q,
+ 0.5230226174666011117600072241000742912e45Q,
+ 0.203978820811974433586402817399028973568e47Q,
+ 0.815915283247897734345611269596115894272e48Q,
+ 0.3345252661316380710817006205344075166515e50Q,
+ 0.1405006117752879898543142606244511569936e52Q,
+ 0.6041526306337383563735513206851399750726e53Q,
+ 0.265827157478844876804362581101461589032e55Q,
+ 0.1196222208654801945619631614956577150644e57Q,
+ 0.5502622159812088949850305428800254892962e58Q,
+ 0.2586232415111681806429643551536119799692e60Q,
+ 0.1241391559253607267086228904737337503852e62Q,
+ 0.6082818640342675608722521633212953768876e63Q,
+ 0.3041409320171337804361260816606476884438e65Q,
+ 0.1551118753287382280224243016469303211063e67Q,
+ 0.8065817517094387857166063685640376697529e68Q,
+ 0.427488328406002556429801375338939964969e70Q,
+ 0.2308436973392413804720927426830275810833e72Q,
+ 0.1269640335365827592596510084756651695958e74Q,
+ 0.7109985878048634518540456474637249497365e75Q,
+ 0.4052691950487721675568060190543232213498e77Q,
+ 0.2350561331282878571829474910515074683829e79Q,
+ 0.1386831185456898357379390197203894063459e81Q,
+ 0.8320987112741390144276341183223364380754e82Q,
+ 0.507580213877224798800856812176625227226e84Q,
+ 0.3146997326038793752565312235495076408801e86Q,
+ 0.1982608315404440064116146708361898137545e88Q,
+ 0.1268869321858841641034333893351614808029e90Q,
+ 0.8247650592082470666723170306785496252186e91Q,
+ 0.5443449390774430640037292402478427526443e93Q,
+ 0.3647111091818868528824985909660546442717e95Q,
+ 0.2480035542436830599600990418569171581047e97Q,
+ 0.1711224524281413113724683388812728390923e99Q,
+ 0.1197857166996989179607278372168909873646e101Q,
+ 0.8504785885678623175211676442399260102886e102Q,
+ 0.6123445837688608686152407038527467274078e104Q,
+ 0.4470115461512684340891257138125051110077e106Q,
+ 0.3307885441519386412259530282212537821457e108Q,
+ 0.2480914081139539809194647711659403366093e110Q,
+ 0.188549470166605025498793226086114655823e112Q,
+ 0.1451830920282858696340707840863082849837e114Q,
+ 0.1132428117820629783145752115873204622873e116Q,
+ 0.8946182130782975286851441715398316520698e117Q,
+ 0.7156945704626380229481153372318653216558e119Q,
+ 0.5797126020747367985879734231578109105412e121Q,
+ 0.4753643337012841748421382069894049466438e123Q,
+ 0.3945523969720658651189747118012061057144e125Q,
+ 0.3314240134565353266999387579130131288001e127Q,
+ 0.2817104114380550276949479442260611594801e129Q,
+ 0.2422709538367273238176552320344125971528e131Q,
+ 0.210775729837952771721360051869938959523e133Q,
+ 0.1854826422573984391147968456455462843802e135Q,
+ 0.1650795516090846108121691926245361930984e137Q,
+ 0.1485715964481761497309522733620825737886e139Q,
+ 0.1352001527678402962551665687594951421476e141Q,
+ 0.1243841405464130725547532432587355307758e143Q,
+ 0.1156772507081641574759205162306240436215e145Q,
+ 0.1087366156656743080273652852567866010042e147Q,
+ 0.103299784882390592625997020993947270954e149Q,
+ 0.9916779348709496892095714015418938011582e150Q,
+ 0.9619275968248211985332842594956369871234e152Q,
+ 0.942689044888324774562618574305724247381e154Q,
+ 0.9332621544394415268169923885626670049072e156Q,
+ 0.9332621544394415268169923885626670049072e158Q,
+ 0.9425947759838359420851623124482936749562e160Q,
+ 0.9614466715035126609268655586972595484554e162Q,
+ 0.990290071648618040754671525458177334909e164Q,
+ 0.1029901674514562762384858386476504428305e167Q,
+ 0.1081396758240290900504101305800329649721e169Q,
+ 0.1146280563734708354534347384148349428704e171Q,
+ 0.1226520203196137939351751701038733888713e173Q,
+ 0.132464181945182897449989183712183259981e175Q,
+ 0.1443859583202493582204882102462797533793e177Q,
+ 0.1588245541522742940425370312709077287172e179Q,
+ 0.1762952551090244663872161047107075788761e181Q,
+ 0.1974506857221074023536820372759924883413e183Q,
+ 0.2231192748659813646596607021218715118256e185Q,
+ 0.2543559733472187557120132004189335234812e187Q,
+ 0.2925093693493015690688151804817735520034e189Q,
+ 0.339310868445189820119825609358857320324e191Q,
+ 0.396993716080872089540195962949863064779e193Q,
+ 0.4684525849754290656574312362808384164393e195Q,
+ 0.5574585761207605881323431711741977155627e197Q,
+ 0.6689502913449127057588118054090372586753e199Q,
+ 0.8094298525273443739681622845449350829971e201Q,
+ 0.9875044200833601362411579871448208012564e203Q,
+ 0.1214630436702532967576624324188129585545e206Q,
+ 0.1506141741511140879795014161993280686076e208Q,
+ 0.1882677176888926099743767702491600857595e210Q,
+ 0.237217324288004688567714730513941708057e212Q,
+ 0.3012660018457659544809977077527059692324e214Q,
+ 0.3856204823625804217356770659234636406175e216Q,
+ 0.4974504222477287440390234150412680963966e218Q,
+ 0.6466855489220473672507304395536485253155e220Q,
+ 0.8471580690878820510984568758152795681634e222Q,
+ 0.1118248651196004307449963076076169029976e225Q,
+ 0.1487270706090685728908450891181304809868e227Q,
+ 0.1992942746161518876737324194182948445223e229Q,
+ 0.269047270731805048359538766214698040105e231Q,
+ 0.3659042881952548657689727220519893345429e233Q,
+ 0.5012888748274991661034926292112253883237e235Q,
+ 0.6917786472619488492228198283114910358867e237Q,
+ 0.9615723196941089004197195613529725398826e239Q,
+ 0.1346201247571752460587607385894161555836e242Q,
+ 0.1898143759076170969428526414110767793728e244Q,
+ 0.2695364137888162776588507508037290267094e246Q,
+ 0.3854370717180072770521565736493325081944e248Q,
+ 0.5550293832739304789551054660550388118e250Q,
+ 0.80479260574719919448490292577980627711e252Q,
+ 0.1174997204390910823947958271638517164581e255Q,
+ 0.1727245890454638911203498659308620231933e257Q,
+ 0.2556323917872865588581178015776757943262e259Q,
+ 0.380892263763056972698595524350736933546e261Q,
+ 0.571338395644585459047893286526105400319e263Q,
+ 0.8627209774233240431623188626544191544816e265Q,
+ 0.1311335885683452545606724671234717114812e268Q,
+ 0.2006343905095682394778288746989117185662e270Q,
+ 0.308976961384735088795856467036324046592e272Q,
+ 0.4789142901463393876335775239063022722176e274Q,
+ 0.7471062926282894447083809372938315446595e276Q,
+ 0.1172956879426414428192158071551315525115e279Q,
+ 0.1853271869493734796543609753051078529682e281Q,
+ 0.2946702272495038326504339507351214862195e283Q,
+ 0.4714723635992061322406943211761943779512e285Q,
+ 0.7590705053947218729075178570936729485014e287Q,
+ 0.1229694218739449434110178928491750176572e290Q,
+ 0.2004401576545302577599591653441552787813e292Q,
+ 0.3287218585534296227263330311644146572013e294Q,
+ 0.5423910666131588774984495014212841843822e296Q,
+ 0.9003691705778437366474261723593317460744e298Q,
+ 0.1503616514864999040201201707840084015944e301Q,
+ 0.2526075744973198387538018869171341146786e303Q,
+ 0.4269068009004705274939251888899566538069e305Q,
+ 0.7257415615307998967396728211129263114717e307Q,
+ } };
+
+ return factorials[i];
+}
+
+template <>
+struct max_factorial<BOOST_MATH_FLOAT128_TYPE>
+{
+ BOOST_STATIC_CONSTANT(unsigned, value = 170);
+};
+
+#endif
+
template <>
inline double unchecked_factorial<double>(unsigned i BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(double))
{
diff --git a/3party/boost/boost/math/special_functions/digamma.hpp b/3party/boost/boost/math/special_functions/digamma.hpp
index c329c467fe..785cd75c5e 100644
--- a/3party/boost/boost/math/special_functions/digamma.hpp
+++ b/3party/boost/boost/math/special_functions/digamma.hpp
@@ -10,6 +10,7 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/tools/rational.hpp>
#include <boost/math/tools/promotion.hpp>
#include <boost/math/policies/error_handling.hpp>
@@ -286,7 +287,7 @@ T digamma_imp_1_2(T x, const mpl::int_<53>*)
BOOST_MATH_BIG_CONSTANT(T, 53, -0.0020713321167745952)
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 2.0767117023730469),
BOOST_MATH_BIG_CONSTANT(T, 53, 1.4606242909763515),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.43593529692665969),
@@ -356,7 +357,7 @@ T digamma_imp(T x, const Tag* t, const Policy& pol)
//
// Check for negative arguments and use reflection:
//
- if(x < 0)
+ if(x <= -1)
{
// Reflect:
x = 1 - x;
@@ -376,6 +377,8 @@ T digamma_imp(T x, const Tag* t, const Policy& pol)
}
result = constants::pi<T>() / tan(constants::pi<T>() * remainder);
}
+ if(x == 0)
+ return policies::raise_pole_error<T>("boost::math::digamma<%1%>(%1%)", 0, x, pol);
//
// If we're above the lower-limit for the
// asymptotic expansion then use it:
@@ -397,9 +400,9 @@ T digamma_imp(T x, const Tag* t, const Policy& pol)
//
// If x < 1 use recurrance to shift to > 1:
//
- if(x < 1)
+ while(x < 1)
{
- result = -1/x;
+ result -= 1/x;
x += 1;
}
result += digamma_imp_1_2(x, t);
diff --git a/3party/boost/boost/math/special_functions/ellint_1.hpp b/3party/boost/boost/math/special_functions/ellint_1.hpp
index 469f4bd01a..da16bc6f26 100644
--- a/3party/boost/boost/math/special_functions/ellint_1.hpp
+++ b/3party/boost/boost/math/special_functions/ellint_1.hpp
@@ -18,10 +18,12 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/ellint_rf.hpp>
#include <boost/math/constants/constants.hpp>
#include <boost/math/policies/error_handling.hpp>
#include <boost/math/tools/workaround.hpp>
+#include <boost/math/special_functions/round.hpp>
// Elliptic integrals (complete and incomplete) of the first kind
// Carlson, Numerische Mathematik, vol 33, 1 (1979)
@@ -88,16 +90,16 @@ T ellint_f_imp(T phi, T k, const Policy& pol)
// so rewritten to use fmod instead:
//
BOOST_MATH_INSTRUMENT_CODE("pi/2 = " << constants::pi<T>() / 2);
- T rphi = boost::math::tools::fmod_workaround(phi, T(constants::pi<T>() / 2));
+ T rphi = boost::math::tools::fmod_workaround(phi, T(constants::half_pi<T>()));
BOOST_MATH_INSTRUMENT_VARIABLE(rphi);
- T m = floor((2 * phi) / constants::pi<T>());
+ T m = boost::math::round((phi - rphi) / constants::half_pi<T>());
BOOST_MATH_INSTRUMENT_VARIABLE(m);
int s = 1;
if(boost::math::tools::fmod_workaround(m, T(2)) > 0.5)
{
m += 1;
s = -1;
- rphi = constants::pi<T>() / 2 - rphi;
+ rphi = constants::half_pi<T>() - rphi;
BOOST_MATH_INSTRUMENT_VARIABLE(rphi);
}
T sinp = sin(rphi);
diff --git a/3party/boost/boost/math/special_functions/ellint_2.hpp b/3party/boost/boost/math/special_functions/ellint_2.hpp
index 85eca6cde7..72caf3eb11 100644
--- a/3party/boost/boost/math/special_functions/ellint_2.hpp
+++ b/3party/boost/boost/math/special_functions/ellint_2.hpp
@@ -18,11 +18,13 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/ellint_rf.hpp>
#include <boost/math/special_functions/ellint_rd.hpp>
#include <boost/math/constants/constants.hpp>
#include <boost/math/policies/error_handling.hpp>
#include <boost/math/tools/workaround.hpp>
+#include <boost/math/special_functions/round.hpp>
// Elliptic integrals (complete and incomplete) of the second kind
// Carlson, Numerische Mathematik, vol 33, 1 (1979)
@@ -74,14 +76,14 @@ T ellint_e_imp(T phi, T k, const Policy& pol)
// but that fails if T has more digits than a long long,
// so rewritten to use fmod instead:
//
- T rphi = boost::math::tools::fmod_workaround(phi, T(constants::pi<T>() / 2));
- T m = floor((2 * phi) / constants::pi<T>());
+ T rphi = boost::math::tools::fmod_workaround(phi, T(constants::half_pi<T>()));
+ T m = boost::math::round((phi - rphi) / constants::half_pi<T>());
int s = 1;
if(boost::math::tools::fmod_workaround(m, T(2)) > 0.5)
{
m += 1;
s = -1;
- rphi = constants::pi<T>() / 2 - rphi;
+ rphi = constants::half_pi<T>() - rphi;
}
T sinp = sin(rphi);
T cosp = cos(rphi);
diff --git a/3party/boost/boost/math/special_functions/ellint_3.hpp b/3party/boost/boost/math/special_functions/ellint_3.hpp
index f63bb2d4b0..ac7e68c17f 100644
--- a/3party/boost/boost/math/special_functions/ellint_3.hpp
+++ b/3party/boost/boost/math/special_functions/ellint_3.hpp
@@ -18,6 +18,7 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/ellint_rf.hpp>
#include <boost/math/special_functions/ellint_rj.hpp>
#include <boost/math/special_functions/ellint_1.hpp>
@@ -26,6 +27,7 @@
#include <boost/math/constants/constants.hpp>
#include <boost/math/policies/error_handling.hpp>
#include <boost/math/tools/workaround.hpp>
+#include <boost/math/special_functions/round.hpp>
// Elliptic integrals (complete and incomplete) of the third kind
// Carlson, Numerische Mathematik, vol 33, 1 (1979)
@@ -182,14 +184,14 @@ T ellint_pi_imp(T v, T phi, T k, T vc, const Policy& pol)
}
else
{
- T rphi = boost::math::tools::fmod_workaround(T(fabs(phi)), T(constants::pi<T>() / 2));
- T m = floor((2 * fabs(phi)) / constants::pi<T>());
+ T rphi = boost::math::tools::fmod_workaround(T(fabs(phi)), T(constants::half_pi<T>()));
+ T m = boost::math::round((fabs(phi) - rphi) / constants::half_pi<T>());
int sign = 1;
if(boost::math::tools::fmod_workaround(m, T(2)) > 0.5)
{
m += 1;
sign = -1;
- rphi = constants::pi<T>() / 2 - rphi;
+ rphi = constants::half_pi<T>() - rphi;
}
T sinp = sin(rphi);
T cosp = cos(rphi);
diff --git a/3party/boost/boost/math/special_functions/ellint_rj.hpp b/3party/boost/boost/math/special_functions/ellint_rj.hpp
index 1ecca753a4..8a242f06a4 100644
--- a/3party/boost/boost/math/special_functions/ellint_rj.hpp
+++ b/3party/boost/boost/math/special_functions/ellint_rj.hpp
@@ -91,7 +91,7 @@ T ellint_rj_imp(T x, T y, T z, T p, const Policy& pol)
BOOST_ASSERT(pmy >= 0);
- T p = pmy + y;
+ p = pmy + y;
value = boost::math::ellint_rj(x, y, z, p, pol);
value *= pmy;
value -= 3 * boost::math::ellint_rf(x, y, z, pol);
diff --git a/3party/boost/boost/math/special_functions/erf.hpp b/3party/boost/boost/math/special_functions/erf.hpp
index 04954078a7..f7f75b0bc7 100644
--- a/3party/boost/boost/math/special_functions/erf.hpp
+++ b/3party/boost/boost/math/special_functions/erf.hpp
@@ -291,7 +291,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<53>& t)
BOOST_MATH_BIG_CONSTANT(T, 53, 0.000235839115596880717416),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 1.53991494948552447182),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.982403709157920235114),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.325732924782444448493),
@@ -317,7 +317,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<53>& t)
BOOST_MATH_BIG_CONSTANT(T, 53, 0.113212406648847561139e-4),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 1.04217814166938418171),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.442597659481563127003),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.0958492726301061423444),
@@ -344,7 +344,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<53>& t)
BOOST_MATH_BIG_CONSTANT(T, 53, -2.8175401114513378771),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 2.79257750980575282228),
BOOST_MATH_BIG_CONSTANT(T, 53, 11.0567237927800161565),
BOOST_MATH_BIG_CONSTANT(T, 53, 15.930646027911794143),
@@ -428,7 +428,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t)
BOOST_MATH_BIG_CONSTANT(T, 64, -0.200305626366151877759e-4),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.455817300515875172439),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.0916537354356241792007),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.0102722652675910031202),
@@ -462,7 +462,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t)
BOOST_MATH_BIG_CONSTANT(T, 64, 0.266689068336295642561e-7),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 2.03237474985469469291),
BOOST_MATH_BIG_CONSTANT(T, 64, 1.78355454954969405222),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.867940326293760578231),
@@ -490,7 +490,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t)
BOOST_MATH_BIG_CONSTANT(T, 64, 0.515917266698050027934e-4),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 1.71657861671930336344),
BOOST_MATH_BIG_CONSTANT(T, 64, 1.26409634824280366218),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.512371437838969015941),
@@ -518,7 +518,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t)
BOOST_MATH_BIG_CONSTANT(T, 64, 0.189896043050331257262e-5),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 1.19352160185285642574),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.603256964363454392857),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.165411142458540585835),
@@ -548,7 +548,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t)
BOOST_MATH_BIG_CONSTANT(T, 64, -16.8865774499799676937),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 4.72948911186645394541),
BOOST_MATH_BIG_CONSTANT(T, 64, 23.6750543147695749212),
BOOST_MATH_BIG_CONSTANT(T, 64, 60.0021517335693186785),
@@ -636,7 +636,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.344448249920445916714548295433198544e-7),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.466542092785657604666906909196052522),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.100005087012526447295176964142107611),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0128341535890117646540050072234142603),
@@ -674,7 +674,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.436544865032836914773944382339900079e-5),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.47651182872457465043733800302427977),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.78706486002517996428836400245547955),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.87295924621659627926365005293130693),
@@ -709,7 +709,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.133166058052466262415271732172490045e-5),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.32970330146503867261275580968135126),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.46325715420422771961250513514928746),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.55307882560757679068505047390857842),
@@ -743,7 +743,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.312857043762117596999398067153076051e-6),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.13506082409097783827103424943508554),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.06399257267556230937723190496806215),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.18678481279932541314830499880691109),
@@ -778,7 +778,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.676586625472423508158937481943649258e-7),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.93669171363907292305550231764920001),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.69468476144051356810672506101377494),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.880023580986436640372794392579985511),
@@ -811,7 +811,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.971120407556888763695313774578711839e-7),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.59911256167540354915906501335919317),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.136006830764025173864831382946934),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.468565867990030871678574840738423023),
@@ -845,7 +845,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.156161469668275442569286723236274457e-9),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.52955245103668419479878456656709381),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.06263944820093830054635017117417064),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.441684612681607364321013134378316463),
@@ -880,7 +880,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.673002744115866600294723141176820155e-10),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.12843690320861239631195353379313367),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.569900657061622955362493442186537259),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.169094404206844928112348730277514273),
@@ -914,7 +914,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.119735694018906705225870691331543806e-8),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.69889613396167354566098060039549882),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.28824647372749624464956031163282674),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.572297795434934493541628008224078717),
@@ -950,7 +950,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
BOOST_MATH_BIG_CONSTANT(T, 113, -60.0530577077238079968843307523245547),
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 3.49040448075464744191022350947892036),
BOOST_MATH_BIG_CONSTANT(T, 113, 34.3563592467165971295915749548313227),
BOOST_MATH_BIG_CONSTANT(T, 113, 84.4993232033879023178285731843850461),
diff --git a/3party/boost/boost/math/special_functions/expint.hpp b/3party/boost/boost/math/special_functions/expint.hpp
index 1c86d282fa..c26420db9e 100644
--- a/3party/boost/boost/math/special_functions/expint.hpp
+++ b/3party/boost/boost/math/special_functions/expint.hpp
@@ -15,6 +15,7 @@
#include <boost/math/tools/fraction.hpp>
#include <boost/math/tools/series.hpp>
#include <boost/math/policies/error_handling.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/digamma.hpp>
#include <boost/math/special_functions/log1p.hpp>
#include <boost/math/special_functions/pow.hpp>
@@ -55,7 +56,7 @@ T expint_1_rational(const T& z, const mpl::int_<53>&)
BOOST_MATH_BIG_CONSTANT(T, 53, -0.000111507792921197858394)
};
static const T Q[6] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.37091387659397013215),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.056770677104207528384),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.00427347600017103698101),
@@ -84,7 +85,7 @@ T expint_1_rational(const T& z, const mpl::int_<53>&)
BOOST_MATH_BIG_CONSTANT(T, 53, -1185.45720315201027667)
};
static const T Q[12] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 45.3058660811801465927),
BOOST_MATH_BIG_CONSTANT(T, 53, 809.193214954550328455),
BOOST_MATH_BIG_CONSTANT(T, 53, 7417.37624454689546708),
@@ -130,7 +131,7 @@ T expint_1_rational(const T& z, const mpl::int_<64>&)
BOOST_MATH_BIG_CONSTANT(T, 64, 0.30853660894346057053e-4)
};
static const T Q[7] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.317978365797784100273),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.0393622602554758722511),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.00204062029115966323229),
@@ -163,7 +164,7 @@ T expint_1_rational(const T& z, const mpl::int_<64>&)
BOOST_MATH_BIG_CONSTANT(T, 64, -2038.82870680427258038)
};
static const T Q[14] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 64.1517806091379399478),
BOOST_MATH_BIG_CONSTANT(T, 64, 1690.76044393722763785),
BOOST_MATH_BIG_CONSTANT(T, 64, 24035.9534033068949426),
@@ -215,7 +216,7 @@ T expint_1_rational(const T& z, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.340500302777838063940402160594523429e-9)
};
static const T Q[10] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.426568827778942588160423015589537302),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0841384046470893490592450881447510148),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0100557215850668029618957359471132995),
@@ -256,7 +257,7 @@ T expint_1_rational(const T& z, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, -1.51492042209561411434644938098833499)
};
static const T Q[16] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 46.734521442032505570517810766704587),
BOOST_MATH_BIG_CONSTANT(T, 113, 908.694714348462269000247450058595655),
BOOST_MATH_BIG_CONSTANT(T, 113, 9701.76053033673927362784882748513195),
@@ -305,7 +306,7 @@ T expint_1_rational(const T& z, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, -68028222642.1941480871395695677675137)
};
static const T Q[20] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 168.542326331163836642960118190147311),
BOOST_MATH_BIG_CONSTANT(T, 113, 12535.7237814586576783518249115343619),
BOOST_MATH_BIG_CONSTANT(T, 113, 544891.263372016404143120911148640627),
@@ -541,7 +542,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag)
BOOST_MATH_BIG_CONSTANT(T, 53, 0.2777056254402008721e-6)
};
static const T Q[8] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, -1.17090412365413911947),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.62215109846016746276),
BOOST_MATH_BIG_CONSTANT(T, 53, -0.195114782069495403315),
@@ -563,7 +564,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag)
result *= t;
if(fabs(t) < 0.1)
{
- result += boost::math::log1p(t / r);
+ result += boost::math::log1p(t / r, pol);
}
else
{
@@ -587,7 +588,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag)
BOOST_MATH_BIG_CONSTANT(T, 53, -0.396487648924804510056e-5)
};
static const T Q[8] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.744625566823272107711),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.329061095011767059236),
BOOST_MATH_BIG_CONSTANT(T, 53, 0.100128624977313872323),
@@ -621,7 +622,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag)
BOOST_MATH_BIG_CONSTANT(T, 53, -0.138652200349182596186e-4)
};
static const T Q[9] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 1.97017214039061194971),
BOOST_MATH_BIG_CONSTANT(T, 53, 1.86232465043073157508),
BOOST_MATH_BIG_CONSTANT(T, 53, 1.09601437090337519977),
@@ -657,7 +658,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag)
BOOST_MATH_BIG_CONSTANT(T, 53, -0.113161784705911400295e-9)
};
static const T Q[9] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 2.84354408840148561131),
BOOST_MATH_BIG_CONSTANT(T, 53, 3.6599610090072393012),
BOOST_MATH_BIG_CONSTANT(T, 53, 2.75088464344293083595),
@@ -686,7 +687,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag)
BOOST_MATH_BIG_CONSTANT(T, 53, -38703.1431362056714134)
};
static const T Q[7] = {
- BOOST_MATH_BIG_CONSTANT(T, 53, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 53, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 53, 61.9733592849439884145),
BOOST_MATH_BIG_CONSTANT(T, 53, -2354.56211323420194283),
BOOST_MATH_BIG_CONSTANT(T, 53, 22329.1459489893079041),
@@ -757,7 +758,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag)
BOOST_MATH_BIG_CONSTANT(T, 64, 0.177833045143692498221e-7)
};
static const T Q[9] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, -1.20352377969742325748),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.66707904942606479811),
BOOST_MATH_BIG_CONSTANT(T, 64, -0.223014531629140771914),
@@ -780,7 +781,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag)
result *= t;
if(fabs(t) < 0.1)
{
- result += boost::math::log1p(t / r);
+ result += boost::math::log1p(t / r, pol);
}
else
{
@@ -806,7 +807,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag)
BOOST_MATH_BIG_CONSTANT(T, 64, -0.377246883283337141444e-6)
};
static const T Q[10] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 1.08073635708902053767),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.553681133533942532909),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.176763647137553797451),
@@ -844,7 +845,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag)
BOOST_MATH_BIG_CONSTANT(T, 64, -0.252788029251437017959e-5)
};
static const T Q[10] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 2.00323265503572414261),
BOOST_MATH_BIG_CONSTANT(T, 64, 1.94688958187256383178),
BOOST_MATH_BIG_CONSTANT(T, 64, 1.19733638134417472296),
@@ -883,7 +884,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag)
BOOST_MATH_BIG_CONSTANT(T, 64, -0.533769629702262072175e-11)
};
static const T Q[9] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 3.13286733695729715455),
BOOST_MATH_BIG_CONSTANT(T, 64, 4.49281223045653491929),
BOOST_MATH_BIG_CONSTANT(T, 64, 3.84900294427622911374),
@@ -921,7 +922,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag)
BOOST_MATH_BIG_CONSTANT(T, 64, 137839271.592778020028)
};
static const T Q[9] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 27.2103343964943718802),
BOOST_MATH_BIG_CONSTANT(T, 64, -8785.48528692879413676),
BOOST_MATH_BIG_CONSTANT(T, 64, 397530.290000322626766),
@@ -962,8 +963,8 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag)
return result;
}
-template <class T>
-void expint_i_imp_113a(T& result, const T& z)
+template <class T, class Policy>
+void expint_i_imp_113a(T& result, const T& z, const Policy& pol)
{
BOOST_MATH_STD_USING
// Maximum Deviation Found: 1.230e-36
@@ -989,7 +990,7 @@ void expint_i_imp_113a(T& result, const T& z)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.306243138978114692252817805327426657e-13)
};
static const T Q[15] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, -1.40178870313943798705491944989231793),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.943810968269701047641218856758605284),
BOOST_MATH_BIG_CONSTANT(T, 113, -0.405026631534345064600850391026113165),
@@ -1022,7 +1023,7 @@ void expint_i_imp_113a(T& result, const T& z)
result *= t;
if(fabs(t) < 0.1)
{
- result += boost::math::log1p(t / r);
+ result += boost::math::log1p(t / r, pol);
}
else
{
@@ -1057,7 +1058,7 @@ void expint_i_113b(T& result, const T& z)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.384276705503357655108096065452950822e-12)
};
static const T Q[15] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.58784732785354597996617046880946257),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.18550755302279446339364262338114098),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.55598993549661368604527040349702836),
@@ -1110,7 +1111,7 @@ void expint_i_113c(T& result, const T& z)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.869226483473172853557775877908693647e-15)
};
static const T Q[15] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.23227220874479061894038229141871087),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.40221000361027971895657505660959863),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.65476320985936174728238416007084214),
@@ -1159,7 +1160,7 @@ void expint_i_113d(T& result, const T& z)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.133141358866324100955927979606981328e-10)
};
static const T Q[14] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.72490783907582654629537013560044682),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.44524329516800613088375685659759765),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.778241785539308257585068744978050181),
@@ -1211,7 +1212,7 @@ void expint_i_113e(T& result, const T& z)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.105428907085424234504608142258423505e-8)
};
static const T Q[16] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 3.17261315255467581204685605414005525),
BOOST_MATH_BIG_CONSTANT(T, 113, 4.85267952971640525245338392887217426),
BOOST_MATH_BIG_CONSTANT(T, 113, 4.74341914912439861451492872946725151),
@@ -1262,7 +1263,7 @@ void expint_i_113f(T& result, const T& z)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.107839681938752337160494412638656696e-8)
};
static const T Q[12] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.09913805456661084097134805151524958),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.07041755535439919593503171320431849),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.26406517226052371320416108604874734),
@@ -1308,7 +1309,7 @@ void expint_i_113g(T& result, const T& z)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.720558173805289167524715527536874694e-7)
};
static const T Q[11] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 2.95918362458402597039366979529287095),
BOOST_MATH_BIG_CONSTANT(T, 113, 3.96472247520659077944638411856748924),
BOOST_MATH_BIG_CONSTANT(T, 113, 3.15563251550528513747923714884142131),
@@ -1351,7 +1352,7 @@ void expint_i_113h(T& result, const T& z)
BOOST_MATH_BIG_CONSTANT(T, 113, -6758379.93672362080947905580906028645)
};
static const T Q[10] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, -99.4868026047611434569541483506091713),
BOOST_MATH_BIG_CONSTANT(T, 113, 3879.67753690517114249705089803055473),
BOOST_MATH_BIG_CONSTANT(T, 113, -76495.82413252517165830203774900806),
@@ -1383,7 +1384,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<113>& tag)
if(z <= 6)
{
- expint_i_imp_113a(result, z);
+ expint_i_imp_113a(result, z, pol);
}
else if (z <= 10)
{
@@ -1432,7 +1433,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<113>& tag)
BOOST_MATH_BIG_CONSTANT(T, 113, 175864.614717440010942804684741336853)
};
static const T Q[9] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, -65.6998869881600212224652719706425129),
BOOST_MATH_BIG_CONSTANT(T, 113, 1642.73850032324014781607859416890077),
BOOST_MATH_BIG_CONSTANT(T, 113, -19937.2610222467322481947237312818575),
diff --git a/3party/boost/boost/math/special_functions/factorials.hpp b/3party/boost/boost/math/special_functions/factorials.hpp
index c788c46dae..de24642ac4 100644
--- a/3party/boost/boost/math/special_functions/factorials.hpp
+++ b/3party/boost/boost/math/special_functions/factorials.hpp
@@ -10,8 +10,8 @@
#pragma once
#endif
-#include <boost/math/special_functions/gamma.hpp>
#include <boost/math/special_functions/math_fwd.hpp>
+#include <boost/math/special_functions/gamma.hpp>
#include <boost/math/special_functions/detail/unchecked_factorial.hpp>
#include <boost/array.hpp>
#ifdef BOOST_MSVC
@@ -141,6 +141,18 @@ T rising_factorial_imp(T x, int n, const Policy& pol)
}
if(n == 0)
return 1;
+ if(x == 0)
+ {
+ if(n < 0)
+ return -boost::math::tgamma_delta_ratio(x + 1, static_cast<T>(-n), pol);
+ else
+ return 0;
+ }
+ if((x < 1) && (x + n < 0))
+ {
+ T val = boost::math::tgamma_delta_ratio(1 - x, static_cast<T>(-n), pol);
+ return (n & 1) ? -val : val;
+ }
//
// We don't optimise this for small n, because
// tgamma_delta_ratio is alreay optimised for that
@@ -154,7 +166,7 @@ inline T falling_factorial_imp(T x, unsigned n, const Policy& pol)
{
BOOST_STATIC_ASSERT(!boost::is_integral<T>::value);
BOOST_MATH_STD_USING // ADL of std names
- if(x == 0)
+ if((x == 0) && (n >= 0))
return 0;
if(x < 0)
{
@@ -166,7 +178,24 @@ inline T falling_factorial_imp(T x, unsigned n, const Policy& pol)
}
if(n == 0)
return 1;
- if(x < n-1)
+ if(x < 0.5f)
+ {
+ //
+ // 1 + x below will throw away digits, so split up calculation:
+ //
+ if(n > max_factorial<T>::value - 2)
+ {
+ // If the two end of the range are far apart we have a ratio of two very large
+ // numbers, split the calculation up into two blocks:
+ T t1 = x * boost::math::falling_factorial(x - 1, max_factorial<T>::value - 2);
+ T t2 = boost::math::falling_factorial(x - max_factorial<T>::value + 1, n - max_factorial<T>::value + 1);
+ if(tools::max_value<T>() / fabs(t1) < fabs(t2))
+ return boost::math::sign(t1) * boost::math::sign(t2) * policies::raise_overflow_error<T>("boost::math::falling_factorial<%1%>", 0, pol);
+ return t1 * t2;
+ }
+ return x * boost::math::falling_factorial(x - 1, n - 1);
+ }
+ if(x <= n - 1)
{
//
// x+1-n will be negative and tgamma_delta_ratio won't
diff --git a/3party/boost/boost/math/special_functions/fpclassify.hpp b/3party/boost/boost/math/special_functions/fpclassify.hpp
index 02a98fb6df..40f6e14ba5 100644
--- a/3party/boost/boost/math/special_functions/fpclassify.hpp
+++ b/3party/boost/boost/math/special_functions/fpclassify.hpp
@@ -258,7 +258,7 @@ inline int fpclassify BOOST_NO_MACRO_EXPAND(T t)
{
typedef typename detail::fp_traits<T>::type traits;
typedef typename traits::method method;
- typedef typename tools::promote_args<T>::type value_type;
+ typedef typename tools::promote_args_permissive<T>::type value_type;
#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
if(std::numeric_limits<T>::is_specialized && detail::is_generic_tag_false(static_cast<method*>(0)))
return detail::fpclassify_imp(static_cast<value_type>(t), detail::generic_tag<true>());
@@ -338,7 +338,7 @@ inline bool (isfinite)(T x)
typedef typename detail::fp_traits<T>::type traits;
typedef typename traits::method method;
// typedef typename boost::is_floating_point<T>::type fp_tag;
- typedef typename tools::promote_args<T>::type value_type;
+ typedef typename tools::promote_args_permissive<T>::type value_type;
return detail::isfinite_impl(static_cast<value_type>(x), method());
}
@@ -348,7 +348,7 @@ inline bool (isfinite)(long double x)
{ //!< \brief return true if floating-point type t is finite.
typedef detail::fp_traits<long double>::type traits;
typedef traits::method method;
- typedef boost::is_floating_point<long double>::type fp_tag;
+ //typedef boost::is_floating_point<long double>::type fp_tag;
typedef long double value_type;
return detail::isfinite_impl(static_cast<value_type>(x), method());
}
@@ -409,7 +409,7 @@ inline bool (isnormal)(T x)
typedef typename detail::fp_traits<T>::type traits;
typedef typename traits::method method;
//typedef typename boost::is_floating_point<T>::type fp_tag;
- typedef typename tools::promote_args<T>::type value_type;
+ typedef typename tools::promote_args_permissive<T>::type value_type;
return detail::isnormal_impl(static_cast<value_type>(x), method());
}
@@ -419,7 +419,7 @@ inline bool (isnormal)(long double x)
{
typedef detail::fp_traits<long double>::type traits;
typedef traits::method method;
- typedef boost::is_floating_point<long double>::type fp_tag;
+ //typedef boost::is_floating_point<long double>::type fp_tag;
typedef long double value_type;
return detail::isnormal_impl(static_cast<value_type>(x), method());
}
@@ -498,7 +498,7 @@ inline bool (isinf)(T x)
typedef typename detail::fp_traits<T>::type traits;
typedef typename traits::method method;
// typedef typename boost::is_floating_point<T>::type fp_tag;
- typedef typename tools::promote_args<T>::type value_type;
+ typedef typename tools::promote_args_permissive<T>::type value_type;
return detail::isinf_impl(static_cast<value_type>(x), method());
}
@@ -508,7 +508,7 @@ inline bool (isinf)(long double x)
{
typedef detail::fp_traits<long double>::type traits;
typedef traits::method method;
- typedef boost::is_floating_point<long double>::type fp_tag;
+ //typedef boost::is_floating_point<long double>::type fp_tag;
typedef long double value_type;
return detail::isinf_impl(static_cast<value_type>(x), method());
}
@@ -594,7 +594,7 @@ inline bool (isnan)(long double x)
{ //!< \brief return true if floating-point type t is NaN (Not A Number).
typedef detail::fp_traits<long double>::type traits;
typedef traits::method method;
- typedef boost::is_floating_point<long double>::type fp_tag;
+ //typedef boost::is_floating_point<long double>::type fp_tag;
return detail::isnan_impl(x, method());
}
#endif
diff --git a/3party/boost/boost/math/special_functions/gamma.hpp b/3party/boost/boost/math/special_functions/gamma.hpp
index 3ffd9c1f01..07a0ba4f77 100644
--- a/3party/boost/boost/math/special_functions/gamma.hpp
+++ b/3party/boost/boost/math/special_functions/gamma.hpp
@@ -1,6 +1,8 @@
-// Copyright John Maddock 2006-7.
-// Copyright Paul A. Bristow 2007.
+// Copyright John Maddock 2006-7, 2013-14.
+// Copyright Paul A. Bristow 2007, 2013-14.
+// Copyright Nikhar Agrawal 2013-14
+// Copyright Christopher Kormanyos 2013-14
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
@@ -30,6 +32,7 @@
#include <boost/math/special_functions/detail/igamma_large.hpp>
#include <boost/math/special_functions/detail/unchecked_factorial.hpp>
#include <boost/math/special_functions/detail/lgamma_small.hpp>
+#include <boost/math/special_functions/bernoulli.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/assert.hpp>
#include <boost/mpl/greater.hpp>
@@ -136,7 +139,7 @@ T gamma_imp(T z, const Policy& pol, const Lanczos& l)
result = gamma_imp(T(-z), pol, l) * sinpx(z);
BOOST_MATH_INSTRUMENT_VARIABLE(result);
if((fabs(result) < 1) && (tools::max_value<T>() * fabs(result) < boost::math::constants::pi<T>()))
- return policies::raise_overflow_error<T>(function, "Result of tgamma is too large to represent.", pol);
+ return -boost::math::sign(result) * policies::raise_overflow_error<T>(function, "Result of tgamma is too large to represent.", pol);
result = -boost::math::constants::pi<T>() / result;
if(result == 0)
return policies::raise_underflow_error<T>(function, "Result of tgamma is too small to represent.", pol);
@@ -159,6 +162,12 @@ T gamma_imp(T z, const Policy& pol, const Lanczos& l)
result *= unchecked_factorial<T>(itrunc(z, pol) - 1);
BOOST_MATH_INSTRUMENT_VARIABLE(result);
}
+ else if (z < tools::root_epsilon<T>())
+ {
+ if (z < 1 / tools::max_value<T>())
+ result = policies::raise_overflow_error<T>(function, 0, pol);
+ result *= 1 / z - constants::euler<T>();
+ }
else
{
result *= Lanczos::lanczos_sum(z);
@@ -171,13 +180,13 @@ T gamma_imp(T z, const Policy& pol, const Lanczos& l)
// we're going to overflow unless this is done with care:
BOOST_MATH_INSTRUMENT_VARIABLE(zgh);
if(lzgh * z / 2 > tools::log_max_value<T>())
- return policies::raise_overflow_error<T>(function, "Result of tgamma is too large to represent.", pol);
+ return boost::math::sign(result) * policies::raise_overflow_error<T>(function, "Result of tgamma is too large to represent.", pol);
T hp = pow(zgh, (z / 2) - T(0.25));
BOOST_MATH_INSTRUMENT_VARIABLE(hp);
result *= hp / exp(zgh);
BOOST_MATH_INSTRUMENT_VARIABLE(result);
if(tools::max_value<T>() / hp < result)
- return policies::raise_overflow_error<T>(function, "Result of tgamma is too large to represent.", pol);
+ return boost::math::sign(result) * policies::raise_overflow_error<T>(function, "Result of tgamma is too large to represent.", pol);
result *= hp;
BOOST_MATH_INSTRUMENT_VARIABLE(result);
}
@@ -213,7 +222,7 @@ T lgamma_imp(T z, const Policy& pol, const Lanczos& l, int* sign = 0)
T result = 0;
int sresult = 1;
- if(z <= 0)
+ if(z <= -tools::root_epsilon<T>())
{
// reflection formula:
if(floor(z) == z)
@@ -231,6 +240,17 @@ T lgamma_imp(T z, const Policy& pol, const Lanczos& l, int* sign = 0)
}
result = log(boost::math::constants::pi<T>()) - lgamma_imp(z, pol, l) - log(t);
}
+ else if (z < tools::root_epsilon<T>())
+ {
+ if (0 == z)
+ return policies::raise_pole_error<T>(function, "Evaluation of lgamma at %1%.", z, pol);
+ if (fabs(z) < 1 / tools::max_value<T>())
+ result = -log(fabs(z));
+ else
+ result = log(fabs(1 / z - constants::euler<T>()));
+ if (z < 0)
+ sresult = -1;
+ }
else if(z < 15)
{
typedef typename policies::precision<T, Policy>::type precision_type;
@@ -249,7 +269,7 @@ T lgamma_imp(T z, const Policy& pol, const Lanczos& l, int* sign = 0)
>::type tag_type;
result = lgamma_small_imp<T>(z, T(z - 1), T(z - 2), tag_type(), pol, l);
}
- else if((z >= 3) && (z < 100))
+ else if((z >= 3) && (z < 100) && (std::numeric_limits<T>::max_exponent >= 1024))
{
// taking the log of tgamma reduces the error, no danger of overflow here:
result = log(gamma_imp(z, pol, l));
@@ -336,96 +356,271 @@ inline T lower_gamma_series(T a, T z, const Policy& pol, T init_value = 0)
}
//
-// Fully generic tgamma and lgamma use the incomplete partial
-// sums added together:
+// Fully generic tgamma and lgamma use Stirling's approximation
+// with Bernoulli numbers.
//
+template<class T>
+std::size_t highest_bernoulli_index()
+{
+ const float digits10_of_type = (std::numeric_limits<T>::is_specialized
+ ? static_cast<float>(std::numeric_limits<T>::digits10)
+ : static_cast<float>(boost::math::tools::digits<T>() * 0.301F));
+
+ // Find the high index n for Bn to produce the desired precision in Stirling's calculation.
+ return static_cast<std::size_t>(18.0F + (0.6F * digits10_of_type));
+}
+
+template<class T>
+T minimum_argument_for_bernoulli_recursion()
+{
+ const float digits10_of_type = (std::numeric_limits<T>::is_specialized
+ ? static_cast<float>(std::numeric_limits<T>::digits10)
+ : static_cast<float>(boost::math::tools::digits<T>() * 0.301F));
+
+ return T(digits10_of_type * 1.7F);
+}
+
+// Forward declaration of the lgamma_imp template specialization.
template <class T, class Policy>
-T gamma_imp(T z, const Policy& pol, const lanczos::undefined_lanczos& l)
+T lgamma_imp(T z, const Policy& pol, const lanczos::undefined_lanczos&, int* sign = 0);
+
+template <class T, class Policy>
+T gamma_imp(T z, const Policy& pol, const lanczos::undefined_lanczos&)
{
- static const char* function = "boost::math::tgamma<%1%>(%1%)";
BOOST_MATH_STD_USING
- if((z <= 0) && (floor(z) == z))
- return policies::raise_pole_error<T>(function, "Evaluation of tgamma at a negative integer %1%.", z, pol);
- if(z <= -20)
+
+ static const char* function = "boost::math::tgamma<%1%>(%1%)";
+
+ // Check if the argument of tgamma is identically zero.
+ const bool is_at_zero = (z == 0);
+
+ if(is_at_zero)
+ return policies::raise_domain_error<T>(function, "Evaluation of tgamma at zero %1%.", z, pol);
+
+ const bool b_neg = (z < 0);
+
+ const bool floor_of_z_is_equal_to_z = (floor(z) == z);
+
+ // Special case handling of small factorials:
+ if((!b_neg) && floor_of_z_is_equal_to_z && (z < boost::math::max_factorial<T>::value))
{
- T result = gamma_imp(T(-z), pol, l) * sinpx(z);
- if((fabs(result) < 1) && (tools::max_value<T>() * fabs(result) < boost::math::constants::pi<T>()))
- return policies::raise_overflow_error<T>(function, "Result of tgamma is too large to represent.", pol);
- result = -boost::math::constants::pi<T>() / result;
- if(result == 0)
- return policies::raise_underflow_error<T>(function, "Result of tgamma is too small to represent.", pol);
- if((boost::math::fpclassify)(result) == (int)FP_SUBNORMAL)
- return policies::raise_denorm_error<T>(function, "Result of tgamma is denormalized.", result, pol);
- return result;
+ return boost::math::unchecked_factorial<T>(itrunc(z) - 1);
}
- //
- // The upper gamma fraction is *very* slow for z < 6, actually it's very
- // slow to converge everywhere but recursing until z > 6 gets rid of the
- // worst of it's behaviour.
- //
- T prefix = 1;
- while(z < 6)
+
+ // Make a local, unsigned copy of the input argument.
+ T zz((!b_neg) ? z : -z);
+
+ // Special case for ultra-small z:
+ if(zz < tools::cbrt_epsilon<T>())
{
- prefix /= z;
- z += 1;
+ const T a0(1);
+ const T a1(boost::math::constants::euler<T>());
+ const T six_euler_squared((boost::math::constants::euler<T>() * boost::math::constants::euler<T>()) * 6);
+ const T a2((six_euler_squared - boost::math::constants::pi_sqr<T>()) / 12);
+
+ const T inverse_tgamma_series = z * ((a2 * z + a1) * z + a0);
+
+ return 1 / inverse_tgamma_series;
}
- BOOST_MATH_INSTRUMENT_CODE(prefix);
- if((floor(z) == z) && (z < max_factorial<T>::value))
+
+ // Scale the argument up for the calculation of lgamma,
+ // and use downward recursion later for the final result.
+ const T min_arg_for_recursion = minimum_argument_for_bernoulli_recursion<T>();
+
+ int n_recur;
+
+ if(zz < min_arg_for_recursion)
{
- prefix *= unchecked_factorial<T>(itrunc(z, pol) - 1);
+ n_recur = boost::math::itrunc(min_arg_for_recursion - zz) + 1;
+
+ zz += n_recur;
}
else
{
- prefix = prefix * pow(z / boost::math::constants::e<T>(), z);
- BOOST_MATH_INSTRUMENT_CODE(prefix);
- T sum = detail::lower_gamma_series(z, z, pol) / z;
- BOOST_MATH_INSTRUMENT_CODE(sum);
- sum += detail::upper_gamma_fraction(z, z, ::boost::math::policies::get_epsilon<T, Policy>());
- BOOST_MATH_INSTRUMENT_CODE(sum);
- if(fabs(tools::max_value<T>() / prefix) < fabs(sum))
+ n_recur = 0;
+ }
+
+ const T log_gamma_value = lgamma_imp(zz, pol, lanczos::undefined_lanczos());
+
+ if(log_gamma_value > tools::log_max_value<T>())
+ return policies::raise_overflow_error<T>(function, 0, pol);
+
+ T gamma_value = exp(log_gamma_value);
+
+ // Rescale the result using downward recursion if necessary.
+ if(n_recur)
+ {
+ // The order of divides is important, if we keep subtracting 1 from zz
+ // we DO NOT get back to z (cancellation error). Further if z < epsilon
+ // we would end up dividing by zero. Also in order to prevent spurious
+ // overflow with the first division, we must save dividing by |z| till last,
+ // so the optimal order of divides is z+1, z+2, z+3...z+n_recur-1,z.
+ zz = fabs(z) + 1;
+ for(int k = 1; k < n_recur; ++k)
+ {
+ gamma_value /= zz;
+ zz += 1;
+ }
+ gamma_value /= fabs(z);
+ }
+
+ // Return the result, accounting for possible negative arguments.
+ if(b_neg)
+ {
+ // Provide special error analysis for:
+ // * arguments in the neighborhood of a negative integer
+ // * arguments exactly equal to a negative integer.
+
+ // Check if the argument of tgamma is exactly equal to a negative integer.
+ if(floor_of_z_is_equal_to_z)
+ return policies::raise_pole_error<T>(function, "Evaluation of tgamma at a negative integer %1%.", z, pol);
+
+ gamma_value *= sinpx(z);
+
+ BOOST_MATH_INSTRUMENT_VARIABLE(gamma_value);
+
+ const bool result_is_too_large_to_represent = ( (abs(gamma_value) < 1)
+ && ((tools::max_value<T>() * abs(gamma_value)) < boost::math::constants::pi<T>()));
+
+ if(result_is_too_large_to_represent)
return policies::raise_overflow_error<T>(function, "Result of tgamma is too large to represent.", pol);
- BOOST_MATH_INSTRUMENT_CODE((sum * prefix));
- return sum * prefix;
+
+ gamma_value = -boost::math::constants::pi<T>() / gamma_value;
+ BOOST_MATH_INSTRUMENT_VARIABLE(gamma_value);
+
+ if(gamma_value == 0)
+ return policies::raise_underflow_error<T>(function, "Result of tgamma is too small to represent.", pol);
+
+ if((boost::math::fpclassify)(gamma_value) == static_cast<int>(FP_SUBNORMAL))
+ return policies::raise_denorm_error<T>(function, "Result of tgamma is denormalized.", gamma_value, pol);
}
- return prefix;
+
+ return gamma_value;
}
template <class T, class Policy>
-T lgamma_imp(T z, const Policy& pol, const lanczos::undefined_lanczos& l, int*sign)
+T lgamma_imp(T z, const Policy& pol, const lanczos::undefined_lanczos&, int* sign)
{
BOOST_MATH_STD_USING
static const char* function = "boost::math::lgamma<%1%>(%1%)";
- T result = 0;
- int sresult = 1;
- if(z <= 0)
+
+ // Check if the argument of lgamma is identically zero.
+ const bool is_at_zero = (z == 0);
+
+ if(is_at_zero)
+ return policies::raise_domain_error<T>(function, "Evaluation of lgamma at zero %1%.", z, pol);
+
+ const bool b_neg = (z < 0);
+
+ const bool floor_of_z_is_equal_to_z = (floor(z) == z);
+
+ // Special case handling of small factorials:
+ if((!b_neg) && floor_of_z_is_equal_to_z && (z < boost::math::max_factorial<T>::value))
{
- if(floor(z) == z)
- return policies::raise_pole_error<T>(function, "Evaluation of tgamma at a negative integer %1%.", z, pol);
- T t = detail::sinpx(z);
- z = -z;
+ return log(boost::math::unchecked_factorial<T>(itrunc(z) - 1));
+ }
+
+ // Make a local, unsigned copy of the input argument.
+ T zz((!b_neg) ? z : -z);
+
+ const T min_arg_for_recursion = minimum_argument_for_bernoulli_recursion<T>();
+
+ T log_gamma_value;
+
+ if (zz < min_arg_for_recursion)
+ {
+ // Here we simply take the logarithm of tgamma(). This is somewhat
+ // inefficient, but simple. The rationale is that the argument here
+ // is relatively small and overflow is not expected to be likely.
+ if (z > -tools::root_epsilon<T>())
+ {
+ // Reflection formula may fail if z is very close to zero, let the series
+ // expansion for tgamma close to zero do the work:
+ log_gamma_value = log(abs(gamma_imp(z, pol, lanczos::undefined_lanczos())));
+ if (sign)
+ {
+ *sign = z < 0 ? -1 : 1;
+ }
+ return log_gamma_value;
+ }
+ else
+ {
+ // No issue with spurious overflow in reflection formula,
+ // just fall through to regular code:
+ log_gamma_value = log(abs(gamma_imp(zz, pol, lanczos::undefined_lanczos())));
+ }
+ }
+ else
+ {
+ // Perform the Bernoulli series expansion of Stirling's approximation.
+
+ const std::size_t number_of_bernoullis_b2n = highest_bernoulli_index<T>();
+
+ T one_over_x_pow_two_n_minus_one = 1 / zz;
+ const T one_over_x2 = one_over_x_pow_two_n_minus_one * one_over_x_pow_two_n_minus_one;
+ T sum = (boost::math::bernoulli_b2n<T>(1) / 2) * one_over_x_pow_two_n_minus_one;
+ const T target_epsilon_to_break_loop = (sum * boost::math::tools::epsilon<T>()) * T(1.0E-10F);
+
+ for(std::size_t n = 2U; n < number_of_bernoullis_b2n; ++n)
+ {
+ one_over_x_pow_two_n_minus_one *= one_over_x2;
+
+ const std::size_t n2 = static_cast<std::size_t>(n * 2U);
+
+ const T term = (boost::math::bernoulli_b2n<T>(static_cast<int>(n)) * one_over_x_pow_two_n_minus_one) / (n2 * (n2 - 1U));
+
+ if((n >= 8U) && (abs(term) < target_epsilon_to_break_loop))
+ {
+ // We have reached the desired precision in Stirling's expansion.
+ // Adding additional terms to the sum of this divergent asymptotic
+ // expansion will not improve the result.
+
+ // Break from the loop.
+ break;
+ }
+
+ sum += term;
+ }
+
+ // Complete Stirling's approximation.
+ const T half_ln_two_pi = log(boost::math::constants::two_pi<T>()) / 2;
+
+ log_gamma_value = ((((zz - boost::math::constants::half<T>()) * log(zz)) - zz) + half_ln_two_pi) + sum;
+ }
+
+ int sign_of_result = 1;
+
+ if(b_neg)
+ {
+ // Provide special error analysis if the argument is exactly
+ // equal to a negative integer.
+
+ // Check if the argument of lgamma is exactly equal to a negative integer.
+ if(floor_of_z_is_equal_to_z)
+ return policies::raise_pole_error<T>(function, "Evaluation of lgamma at a negative integer %1%.", z, pol);
+
+ T t = sinpx(z);
+
if(t < 0)
{
t = -t;
}
else
{
- sresult = -sresult;
+ sign_of_result = -sign_of_result;
}
- result = log(boost::math::constants::pi<T>()) - lgamma_imp(z, pol, l, 0) - log(t);
- }
- else if((z != 1) && (z != 2))
- {
- T limit = (std::max)(T(z+1), T(10));
- T prefix = z * log(limit) - limit;
- T sum = detail::lower_gamma_series(z, limit, pol) / z;
- sum += detail::upper_gamma_fraction(z, limit, ::boost::math::policies::get_epsilon<T, Policy>());
- result = log(sum) + prefix;
+
+ log_gamma_value = - log_gamma_value
+ + log(boost::math::constants::pi<T>())
+ - log(t);
}
- if(sign)
- *sign = sresult;
- return result;
+
+ if(sign != static_cast<int*>(0U)) { *sign = sign_of_result; }
+
+ return log_gamma_value;
}
+
//
// This helper calculates tgamma(dz+1)-1 without cancellation errors,
// used by the upper incomplete gamma with z < 1:
@@ -587,7 +782,7 @@ T full_igamma_prefix(T a, T z, const Policy& pol)
// rather than before it...
//
if((boost::math::fpclassify)(prefix) == (int)FP_INFINITE)
- policies::raise_overflow_error<T>("boost::math::detail::full_igamma_prefix<%1%>(%1%, %1%)", "Result of incomplete gamma function is too large to represent.", pol);
+ return policies::raise_overflow_error<T>("boost::math::detail::full_igamma_prefix<%1%>(%1%, %1%)", "Result of incomplete gamma function is too large to represent.", pol);
return prefix;
}
@@ -825,9 +1020,9 @@ T gamma_incomplete_imp(T a, T x, bool normalised, bool invert,
{
static const char* function = "boost::math::gamma_p<%1%>(%1%, %1%)";
if(a <= 0)
- policies::raise_domain_error<T>(function, "Argument a to the incomplete gamma function must be greater than zero (got a=%1%).", a, pol);
+ return policies::raise_domain_error<T>(function, "Argument a to the incomplete gamma function must be greater than zero (got a=%1%).", a, pol);
if(x < 0)
- policies::raise_domain_error<T>(function, "Argument x to the incomplete gamma function must be >= 0 (got x=%1%).", x, pol);
+ return policies::raise_domain_error<T>(function, "Argument x to the incomplete gamma function must be >= 0 (got x=%1%).", x, pol);
BOOST_MATH_STD_USING
@@ -1076,9 +1271,32 @@ T gamma_incomplete_imp(T a, T x, bool normalised, bool invert,
// Ratios of two gamma functions:
//
template <class T, class Policy, class Lanczos>
-T tgamma_delta_ratio_imp_lanczos(T z, T delta, const Policy& pol, const Lanczos&)
+T tgamma_delta_ratio_imp_lanczos(T z, T delta, const Policy& pol, const Lanczos& l)
{
BOOST_MATH_STD_USING
+ if(z < tools::epsilon<T>())
+ {
+ //
+ // We get spurious numeric overflow unless we're very careful, this
+ // can occur either inside Lanczos::lanczos_sum(z) or in the
+ // final combination of terms, to avoid this, split the product up
+ // into 2 (or 3) parts:
+ //
+ // G(z) / G(L) = 1 / (z * G(L)) ; z < eps, L = z + delta = delta
+ // z * G(L) = z * G(lim) * (G(L)/G(lim)) ; lim = largest factorial
+ //
+ if(boost::math::max_factorial<T>::value < delta)
+ {
+ T ratio = tgamma_delta_ratio_imp_lanczos(delta, T(boost::math::max_factorial<T>::value - delta), pol, l);
+ ratio *= z;
+ ratio *= boost::math::unchecked_factorial<T>(boost::math::max_factorial<T>::value - 1);
+ return 1 / ratio;
+ }
+ else
+ {
+ return 1 / (z * boost::math::tgamma(z + delta, pol));
+ }
+ }
T zgh = z + Lanczos::g() - constants::half<T>();
T result;
if(fabs(delta) < 10)
@@ -1089,8 +1307,9 @@ T tgamma_delta_ratio_imp_lanczos(T z, T delta, const Policy& pol, const Lanczos&
{
result = pow(zgh / (zgh + delta), z - constants::half<T>());
}
- result *= pow(constants::e<T>() / (zgh + delta), delta);
+ // Split the calculation up to avoid spurious overflow:
result *= Lanczos::lanczos_sum(z) / Lanczos::lanczos_sum(T(z + delta));
+ result *= pow(constants::e<T>() / (zgh + delta), delta);
return result;
}
//
@@ -1138,10 +1357,11 @@ T tgamma_delta_ratio_imp(T z, T delta, const Policy& pol)
{
BOOST_MATH_STD_USING
- if(z <= 0)
- policies::raise_domain_error<T>("boost::math::tgamma_delta_ratio<%1%>(%1%, %1%)", "Gamma function ratios only implemented for positive arguments (got a=%1%).", z, pol);
- if(z+delta <= 0)
- policies::raise_domain_error<T>("boost::math::tgamma_delta_ratio<%1%>(%1%, %1%)", "Gamma function ratios only implemented for positive arguments (got b=%1%).", z+delta, pol);
+ if((z <= 0) || (z + delta <= 0))
+ {
+ // This isn't very sofisticated, or accurate, but it does work:
+ return boost::math::tgamma(z, pol) / boost::math::tgamma(z + delta, pol);
+ }
if(floor(delta) == delta)
{
@@ -1195,10 +1415,17 @@ T tgamma_ratio_imp(T x, T y, const Policy& pol)
{
BOOST_MATH_STD_USING
- if((x <= tools::min_value<T>()) || (boost::math::isinf)(x))
- policies::raise_domain_error<T>("boost::math::tgamma_ratio<%1%>(%1%, %1%)", "Gamma function ratios only implemented for positive arguments (got a=%1%).", x, pol);
- if((y <= tools::min_value<T>()) || (boost::math::isinf)(y))
- policies::raise_domain_error<T>("boost::math::tgamma_ratio<%1%>(%1%, %1%)", "Gamma function ratios only implemented for positive arguments (got b=%1%).", y, pol);
+ if((x <= 0) || (boost::math::isinf)(x))
+ return policies::raise_domain_error<T>("boost::math::tgamma_ratio<%1%>(%1%, %1%)", "Gamma function ratios only implemented for positive arguments (got a=%1%).", x, pol);
+ if((y <= 0) || (boost::math::isinf)(y))
+ return policies::raise_domain_error<T>("boost::math::tgamma_ratio<%1%>(%1%, %1%)", "Gamma function ratios only implemented for positive arguments (got b=%1%).", y, pol);
+
+ if(x <= tools::min_value<T>())
+ {
+ // Special case for denorms...Ugh.
+ T shift = ldexp(T(1), tools::digits<T>());
+ return shift * tgamma_ratio_imp(T(x * shift), y, pol);
+ }
if((x < max_factorial<T>::value) && (y < max_factorial<T>::value))
{
@@ -1259,9 +1486,9 @@ T gamma_p_derivative_imp(T a, T x, const Policy& pol)
// Usual error checks first:
//
if(a <= 0)
- policies::raise_domain_error<T>("boost::math::gamma_p_derivative<%1%>(%1%, %1%)", "Argument a to the incomplete gamma function must be greater than zero (got a=%1%).", a, pol);
+ return policies::raise_domain_error<T>("boost::math::gamma_p_derivative<%1%>(%1%, %1%)", "Argument a to the incomplete gamma function must be greater than zero (got a=%1%).", a, pol);
if(x < 0)
- policies::raise_domain_error<T>("boost::math::gamma_p_derivative<%1%>(%1%, %1%)", "Argument x to the incomplete gamma function must be >= 0 (got x=%1%).", x, pol);
+ return policies::raise_domain_error<T>("boost::math::gamma_p_derivative<%1%>(%1%, %1%)", "Argument x to the incomplete gamma function must be >= 0 (got x=%1%).", x, pol);
//
// Now special cases:
//
diff --git a/3party/boost/boost/math/special_functions/hankel.hpp b/3party/boost/boost/math/special_functions/hankel.hpp
index 76ceb65d00..4266ef808c 100644
--- a/3party/boost/boost/math/special_functions/hankel.hpp
+++ b/3party/boost/boost/math/special_functions/hankel.hpp
@@ -7,6 +7,7 @@
#ifndef BOOST_MATH_HANKEL_HPP
#define BOOST_MATH_HANKEL_HPP
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/bessel.hpp>
namespace boost{ namespace math{
diff --git a/3party/boost/boost/math/special_functions/jacobi_elliptic.hpp b/3party/boost/boost/math/special_functions/jacobi_elliptic.hpp
index 60ef97e027..3ffc011566 100644
--- a/3party/boost/boost/math/special_functions/jacobi_elliptic.hpp
+++ b/3party/boost/boost/math/special_functions/jacobi_elliptic.hpp
@@ -10,6 +10,7 @@
#include <boost/math/tools/precision.hpp>
#include <boost/math/tools/promotion.hpp>
#include <boost/math/policies/error_handling.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
namespace boost{ namespace math{
diff --git a/3party/boost/boost/math/special_functions/lanczos.hpp b/3party/boost/boost/math/special_functions/lanczos.hpp
index ed891549f1..0db21d3d16 100644
--- a/3party/boost/boost/math/special_functions/lanczos.hpp
+++ b/3party/boost/boost/math/special_functions/lanczos.hpp
@@ -1068,7 +1068,7 @@ struct lanczos24m113 : public mpl::int_<113>
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 2.50662827463100050241576528481104515966515623051532908941425544355490413900497467936202516))
};
static const T denom[24] = {
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 0.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 0.112400072777760768e22)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 0.414847677933545472e22)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 6756146673770930688000.0)),
@@ -1087,11 +1087,11 @@ struct lanczos24m113 : public mpl::int_<113>
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 3256091103430.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 136717357942.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 4546047198.0)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 116896626)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 2240315)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 30107)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 253)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 1))
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 116896626.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 2240315.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 30107.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 253.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 1.0))
};
return boost::math::tools::evaluate_rational(num, denom, z);
}
@@ -1127,7 +1127,7 @@ struct lanczos24m113 : public mpl::int_<113>
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 0.374799931707148855771381263542708435935402853962736029347951399323367765509988401336565436e-8))
};
static const T denom[24] = {
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 0.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 0.112400072777760768e22)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 0.414847677933545472e22)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 6756146673770930688000.0)),
@@ -1146,11 +1146,11 @@ struct lanczos24m113 : public mpl::int_<113>
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 3256091103430.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 136717357942.0)),
static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 4546047198.0)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 116896626)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 2240315)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 30107)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 253)),
- static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 1))
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 116896626.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 2240315.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 30107.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 253.0)),
+ static_cast<T>(BOOST_MATH_BIG_CONSTANT(T, 113, 1.0))
};
return boost::math::tools::evaluate_rational(num, denom, z);
}
diff --git a/3party/boost/boost/math/special_functions/log1p.hpp b/3party/boost/boost/math/special_functions/log1p.hpp
index 989bdc21b6..62f5b8027c 100644
--- a/3party/boost/boost/math/special_functions/log1p.hpp
+++ b/3party/boost/boost/math/special_functions/log1p.hpp
@@ -195,7 +195,7 @@ T log1p_imp(T const& x, const Policy& pol, const mpl::int_<64>&)
BOOST_MATH_BIG_CONSTANT(T, 64, 0.00441709903782239229447)
};
static const T Q[] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 4.26423872346263928361),
BOOST_MATH_BIG_CONSTANT(T, 64, 7.48189472704477708962),
BOOST_MATH_BIG_CONSTANT(T, 64, 6.94757016732904280913),
diff --git a/3party/boost/boost/math/special_functions/math_fwd.hpp b/3party/boost/boost/math/special_functions/math_fwd.hpp
index 337b3bb4dc..e952dcdb51 100644
--- a/3party/boost/boost/math/special_functions/math_fwd.hpp
+++ b/3party/boost/boost/math/special_functions/math_fwd.hpp
@@ -580,39 +580,63 @@ namespace boost
// Bessel functions:
template <class T1, class T2, class Policy>
typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j(T1 v, T2 x, const Policy& pol);
+ template <class T1, class T2, class Policy>
+ typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j_prime(T1 v, T2 x, const Policy& pol);
template <class T1, class T2>
typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j(T1 v, T2 x);
+ template <class T1, class T2>
+ typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j_prime(T1 v, T2 x);
template <class T, class Policy>
typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel(unsigned v, T x, const Policy& pol);
+ template <class T, class Policy>
+ typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel_prime(unsigned v, T x, const Policy& pol);
template <class T>
typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel(unsigned v, T x);
+ template <class T>
+ typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel_prime(unsigned v, T x);
template <class T1, class T2, class Policy>
typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i(T1 v, T2 x, const Policy& pol);
+ template <class T1, class T2, class Policy>
+ typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i_prime(T1 v, T2 x, const Policy& pol);
template <class T1, class T2>
typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i(T1 v, T2 x);
+ template <class T1, class T2>
+ typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i_prime(T1 v, T2 x);
template <class T1, class T2, class Policy>
typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k(T1 v, T2 x, const Policy& pol);
+ template <class T1, class T2, class Policy>
+ typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k_prime(T1 v, T2 x, const Policy& pol);
template <class T1, class T2>
typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k(T1 v, T2 x);
+ template <class T1, class T2>
+ typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k_prime(T1 v, T2 x);
template <class T1, class T2, class Policy>
typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann(T1 v, T2 x, const Policy& pol);
+ template <class T1, class T2, class Policy>
+ typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann_prime(T1 v, T2 x, const Policy& pol);
template <class T1, class T2>
typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann(T1 v, T2 x);
+ template <class T1, class T2>
+ typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann_prime(T1 v, T2 x);
template <class T, class Policy>
typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann(unsigned v, T x, const Policy& pol);
+ template <class T, class Policy>
+ typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann_prime(unsigned v, T x, const Policy& pol);
template <class T>
typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann(unsigned v, T x);
+ template <class T>
+ typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann_prime(unsigned v, T x);
template <class T, class Policy>
typename detail::bessel_traits<T, T, Policy>::result_type cyl_bessel_j_zero(T v, int m, const Policy& pol);
@@ -701,35 +725,35 @@ namespace boost
typename tools::promote_args<T>::type airy_bi_prime(T x);
template <class T>
- T airy_ai_zero(unsigned m);
+ T airy_ai_zero(int m);
template <class T, class Policy>
- T airy_ai_zero(unsigned m, const Policy&);
+ T airy_ai_zero(int m, const Policy&);
template <class OutputIterator>
OutputIterator airy_ai_zero(
- unsigned start_index,
+ int start_index,
unsigned number_of_zeros,
OutputIterator out_it);
template <class OutputIterator, class Policy>
OutputIterator airy_ai_zero(
- unsigned start_index,
+ int start_index,
unsigned number_of_zeros,
OutputIterator out_it,
const Policy&);
template <class T>
- T airy_bi_zero(unsigned m);
+ T airy_bi_zero(int m);
template <class T, class Policy>
- T airy_bi_zero(unsigned m, const Policy&);
+ T airy_bi_zero(int m, const Policy&);
template <class OutputIterator>
OutputIterator airy_bi_zero(
- unsigned start_index,
+ int start_index,
unsigned number_of_zeros,
OutputIterator out_it);
template <class OutputIterator, class Policy>
OutputIterator airy_bi_zero(
- unsigned start_index,
+ int start_index,
unsigned number_of_zeros,
OutputIterator out_it,
const Policy&);
@@ -768,10 +792,10 @@ namespace boost
int sign BOOST_NO_MACRO_EXPAND(const T& z);
template <class T, class U>
- typename tools::promote_args<T, U>::type copysign BOOST_NO_MACRO_EXPAND(const T& x, const U& y);
+ typename tools::promote_args_permissive<T, U>::type copysign BOOST_NO_MACRO_EXPAND(const T& x, const U& y);
template <class T>
- typename tools::promote_args<T>::type changesign BOOST_NO_MACRO_EXPAND(const T& z);
+ typename tools::promote_args_permissive<T>::type changesign BOOST_NO_MACRO_EXPAND(const T& z);
// Exponential integrals:
namespace detail{
@@ -920,6 +944,35 @@ namespace boost
template <class T>
typename tools::promote_args<T>::type float_advance(const T& val, int distance);
+ template<class T>
+ T unchecked_bernoulli_b2n(const std::size_t n);
+ template <class T, class Policy>
+ T bernoulli_b2n(const int i, const Policy &pol);
+ template <class T>
+ T bernoulli_b2n(const int i);
+ template <class T, class OutputIterator, class Policy>
+ OutputIterator bernoulli_b2n(const int start_index,
+ const unsigned number_of_bernoullis_b2n,
+ OutputIterator out_it,
+ const Policy& pol);
+ template <class T, class OutputIterator>
+ OutputIterator bernoulli_b2n(const int start_index,
+ const unsigned number_of_bernoullis_b2n,
+ OutputIterator out_it);
+ template <class T, class Policy>
+ T tangent_t2n(const int i, const Policy &pol);
+ template <class T>
+ T tangent_t2n(const int i);
+ template <class T, class OutputIterator, class Policy>
+ OutputIterator tangent_t2n(const int start_index,
+ const unsigned number_of_bernoullis_b2n,
+ OutputIterator out_it,
+ const Policy& pol);
+ template <class T, class OutputIterator>
+ OutputIterator tangent_t2n(const int start_index,
+ const unsigned number_of_bernoullis_b2n,
+ OutputIterator out_it);
+
} // namespace math
} // namespace boost
@@ -1194,27 +1247,51 @@ namespace boost
inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type cyl_bessel_j(T1 v, T2 x)\
{ return boost::math::cyl_bessel_j(v, x, Policy()); }\
\
+ template <class T1, class T2>\
+ inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type cyl_bessel_j_prime(T1 v, T2 x)\
+ { return boost::math::cyl_bessel_j_prime(v, x, Policy()); }\
+\
template <class T>\
inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type sph_bessel(unsigned v, T x)\
{ return boost::math::sph_bessel(v, x, Policy()); }\
\
+ template <class T>\
+ inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type sph_bessel_prime(unsigned v, T x)\
+ { return boost::math::sph_bessel_prime(v, x, Policy()); }\
+\
template <class T1, class T2>\
inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
cyl_bessel_i(T1 v, T2 x) { return boost::math::cyl_bessel_i(v, x, Policy()); }\
\
template <class T1, class T2>\
inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
+ cyl_bessel_i_prime(T1 v, T2 x) { return boost::math::cyl_bessel_i_prime(v, x, Policy()); }\
+\
+ template <class T1, class T2>\
+ inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
cyl_bessel_k(T1 v, T2 x) { return boost::math::cyl_bessel_k(v, x, Policy()); }\
\
template <class T1, class T2>\
inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
+ cyl_bessel_k_prime(T1 v, T2 x) { return boost::math::cyl_bessel_k_prime(v, x, Policy()); }\
+\
+ template <class T1, class T2>\
+ inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
cyl_neumann(T1 v, T2 x){ return boost::math::cyl_neumann(v, x, Policy()); }\
\
+ template <class T1, class T2>\
+ inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
+ cyl_neumann_prime(T1 v, T2 x){ return boost::math::cyl_neumann_prime(v, x, Policy()); }\
+\
template <class T>\
inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type \
sph_neumann(unsigned v, T x){ return boost::math::sph_neumann(v, x, Policy()); }\
\
template <class T>\
+ inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type \
+ sph_neumann_prime(unsigned v, T x){ return boost::math::sph_neumann_prime(v, x, Policy()); }\
+\
+ template <class T>\
inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type cyl_bessel_j_zero(T v, int m)\
{ return boost::math::cyl_bessel_j_zero(v, m, Policy()); }\
\
@@ -1398,6 +1475,20 @@ template <class OutputIterator, class T>\
OutputIterator airy_bi_zero(int start_index, unsigned number_of_zeros, OutputIterator out_it)\
{ return boost::math::airy_bi_zero<T>(start_index, number_of_zeros, out_it, Policy()); }\
\
+ template <class T>\
+ T bernoulli_b2n(const int i)\
+ { return boost::math::bernoulli_b2n<T>(i, Policy()); }\
+ template <class T, class OutputIterator>\
+ OutputIterator bernoulli_b2n(int start_index, unsigned number_of_bernoullis_b2n, OutputIterator out_it)\
+ { return boost::math::bernoulli_b2n<T>(start_index, number_of_bernoullis_b2n, out_it, Policy()); }\
+ \
+ template <class T>\
+ T tangent_t2n(const int i)\
+ { return boost::math::tangent_t2n<T>(i, Policy()); }\
+ template <class T, class OutputIterator>\
+ OutputIterator tangent_t2n(int start_index, unsigned number_of_bernoullis_b2n, OutputIterator out_it)\
+ { return boost::math::tangent_t2n<T>(start_index, number_of_bernoullis_b2n, out_it, Policy()); }\
+ \
diff --git a/3party/boost/boost/math/special_functions/modf.hpp b/3party/boost/boost/math/special_functions/modf.hpp
index 48b15fe44f..3ce74e7aa3 100644
--- a/3party/boost/boost/math/special_functions/modf.hpp
+++ b/3party/boost/boost/math/special_functions/modf.hpp
@@ -10,6 +10,7 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/tools/config.hpp>
#include <boost/math/special_functions/trunc.hpp>
diff --git a/3party/boost/boost/math/special_functions/next.hpp b/3party/boost/boost/math/special_functions/next.hpp
index 38f521649f..9602bc7697 100644
--- a/3party/boost/boost/math/special_functions/next.hpp
+++ b/3party/boost/boost/math/special_functions/next.hpp
@@ -10,13 +10,19 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/policies/error_handling.hpp>
#include <boost/math/special_functions/fpclassify.hpp>
#include <boost/math/special_functions/sign.hpp>
#include <boost/math/special_functions/trunc.hpp>
-#ifdef BOOST_MSVC
#include <float.h>
+
+#if !defined(_CRAYC) && !defined(__CUDACC__) && (!defined(__GNUC__) || (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ > 3)))
+#if (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(__SSE2__)
+#include "xmmintrin.h"
+#define BOOST_MATH_CHECK_SSE2
+#endif
#endif
namespace boost{ namespace math{
@@ -32,7 +38,11 @@ inline T get_smallest_value(mpl::true_ const&)
// when using the SSE2 registers in DAZ or FTZ mode.
//
static const T m = std::numeric_limits<T>::denorm_min();
- return ((tools::min_value<T>() - m) == tools::min_value<T>()) ? tools::min_value<T>() : m;
+#ifdef BOOST_MATH_CHECK_SSE2
+ return (_mm_getcsr() & (_MM_FLUSH_ZERO_ON | 0x40)) ? tools::min_value<T>() : m;;
+#else
+ return ((tools::min_value<T>() / 2) == 0) ? tools::min_value<T>() : m;
+#endif
}
template <class T>
@@ -103,7 +113,7 @@ T float_next_imp(const T& val, const Policy& pol)
int fpclass = (boost::math::fpclassify)(val);
- if((fpclass == FP_NAN) || (fpclass == FP_INFINITE))
+ if((fpclass == (int)FP_NAN) || (fpclass == (int)FP_INFINITE))
{
if(val < 0)
return -tools::max_value<T>();
@@ -118,7 +128,7 @@ T float_next_imp(const T& val, const Policy& pol)
if(val == 0)
return detail::get_smallest_value<T>();
- if((fpclass != FP_SUBNORMAL) && (fpclass != FP_ZERO) && (fabs(val) < detail::get_min_shift_value<T>()) && (val != -tools::min_value<T>()))
+ if((fpclass != (int)FP_SUBNORMAL) && (fpclass != (int)FP_ZERO) && (fabs(val) < detail::get_min_shift_value<T>()) && (val != -tools::min_value<T>()))
{
//
// Special case: if the value of the least significant bit is a denorm, and the result
@@ -185,7 +195,7 @@ T float_prior_imp(const T& val, const Policy& pol)
int fpclass = (boost::math::fpclassify)(val);
- if((fpclass == FP_NAN) || (fpclass == FP_INFINITE))
+ if((fpclass == (int)FP_NAN) || (fpclass == (int)FP_INFINITE))
{
if(val > 0)
return tools::max_value<T>();
@@ -200,7 +210,7 @@ T float_prior_imp(const T& val, const Policy& pol)
if(val == 0)
return -detail::get_smallest_value<T>();
- if((fpclass != FP_SUBNORMAL) && (fpclass != FP_ZERO) && (fabs(val) < detail::get_min_shift_value<T>()) && (val != tools::min_value<T>()))
+ if((fpclass != (int)FP_SUBNORMAL) && (fpclass != (int)FP_ZERO) && (fabs(val) < detail::get_min_shift_value<T>()) && (val != tools::min_value<T>()))
{
//
// Special case: if the value of the least significant bit is a denorm, and the result
@@ -318,7 +328,7 @@ T float_distance_imp(const T& a, const T& b, const Policy& pol)
// because we actually have fewer than tools::digits<T>()
// significant bits in the representation:
//
- frexp(((boost::math::fpclassify)(a) == FP_SUBNORMAL) ? tools::min_value<T>() : a, &expon);
+ frexp(((boost::math::fpclassify)(a) == (int)FP_SUBNORMAL) ? tools::min_value<T>() : a, &expon);
T upper = ldexp(T(1), expon);
T result = 0;
expon = tools::digits<T>() - expon;
@@ -335,7 +345,7 @@ T float_distance_imp(const T& a, const T& b, const Policy& pol)
// errors in the subtraction:
//
T mb, x, y, z;
- if(((boost::math::fpclassify)(a) == FP_SUBNORMAL) || (b - a < tools::min_value<T>()))
+ if(((boost::math::fpclassify)(a) == (int)FP_SUBNORMAL) || (b - a < tools::min_value<T>()))
{
//
// Special case - either one end of the range is a denormal, or else the difference is.
@@ -399,7 +409,7 @@ T float_advance_imp(T val, int distance, const Policy& pol)
int fpclass = (boost::math::fpclassify)(val);
- if((fpclass == FP_NAN) || (fpclass == FP_INFINITE))
+ if((fpclass == (int)FP_NAN) || (fpclass == (int)FP_INFINITE))
return policies::raise_domain_error<T>(
function,
"Argument val must be finite, but got %1%", val, pol);
@@ -456,7 +466,7 @@ T float_advance_imp(T val, int distance, const Policy& pol)
limit_distance = float_distance(val, limit);
if(distance && (limit_distance == 0))
{
- policies::raise_evaluation_error<T>(function, "Internal logic failed while trying to increment floating point value %1%: most likely your FPU is in non-IEEE conforming mode.", val, pol);
+ return policies::raise_evaluation_error<T>(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))
diff --git a/3party/boost/boost/math/special_functions/owens_t.hpp b/3party/boost/boost/math/special_functions/owens_t.hpp
index 7b439f0d82..6de93a4887 100644
--- a/3party/boost/boost/math/special_functions/owens_t.hpp
+++ b/3party/boost/boost/math/special_functions/owens_t.hpp
@@ -16,6 +16,7 @@
# pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/config/no_tr1/cmath.hpp>
#include <boost/math/special_functions/erf.hpp>
#include <boost/math/special_functions/expm1.hpp>
@@ -26,6 +27,11 @@
#include <stdexcept>
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+
namespace boost
{
namespace math
@@ -144,8 +150,8 @@ namespace boost
}
// compute the value of Owen's T function with method T1 from the reference paper
- template<typename RealType>
- inline RealType owens_t_T1(const RealType h, const RealType a, const unsigned short m)
+ template<typename RealType, typename Policy>
+ inline RealType owens_t_T1(const RealType h, const RealType a, const unsigned short m, const Policy& pol)
{
BOOST_MATH_STD_USING
using namespace boost::math::constants;
@@ -157,7 +163,7 @@ namespace boost
unsigned short j=1;
RealType jj = 1;
RealType aj = a * one_div_two_pi<RealType>();
- RealType dj = expm1( hs );
+ RealType dj = boost::math::expm1( hs, pol);
RealType gj = hs*dhs;
RealType val = atan( a ) * one_div_two_pi<RealType>();
@@ -795,7 +801,7 @@ namespace boost
switch( meth[icode] )
{
case 1: // T1
- val = owens_t_T1(h,a,m);
+ val = owens_t_T1(h,a,m,pol);
break;
case 2: // T2
typedef typename policies::precision<RealType, Policy>::type precision_type;
@@ -1057,5 +1063,9 @@ namespace boost
} // namespace math
} // namespace boost
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
#endif
// EOF
diff --git a/3party/boost/boost/math/special_functions/pow.hpp b/3party/boost/boost/math/special_functions/pow.hpp
index 5423e9c8e4..4e9a252c0b 100644
--- a/3party/boost/boost/math/special_functions/pow.hpp
+++ b/3party/boost/boost/math/special_functions/pow.hpp
@@ -13,6 +13,7 @@
#define BOOST_MATH_POW_HPP
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/policies/policy.hpp>
#include <boost/math/policies/error_handling.hpp>
#include <boost/math/tools/promotion.hpp>
diff --git a/3party/boost/boost/math/special_functions/powm1.hpp b/3party/boost/boost/math/special_functions/powm1.hpp
index cb33ae03d0..f3af3d6e59 100644
--- a/3party/boost/boost/math/special_functions/powm1.hpp
+++ b/3party/boost/boost/math/special_functions/powm1.hpp
@@ -10,9 +10,9 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/log1p.hpp>
#include <boost/math/special_functions/expm1.hpp>
-#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/assert.hpp>
namespace boost{ namespace math{ namespace detail{
diff --git a/3party/boost/boost/math/special_functions/prime.hpp b/3party/boost/boost/math/special_functions/prime.hpp
index ee25f991a3..94c28f9842 100644
--- a/3party/boost/boost/math/special_functions/prime.hpp
+++ b/3party/boost/boost/math/special_functions/prime.hpp
@@ -11,6 +11,7 @@
#include <boost/array.hpp>
#include <boost/cstdint.hpp>
#include <boost/math/policies/error_handling.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
namespace boost{ namespace math{
diff --git a/3party/boost/boost/math/special_functions/round.hpp b/3party/boost/boost/math/special_functions/round.hpp
index a2e5349075..7f33cdfbbf 100644
--- a/3party/boost/boost/math/special_functions/round.hpp
+++ b/3party/boost/boost/math/special_functions/round.hpp
@@ -12,19 +12,35 @@
#include <boost/math/tools/config.hpp>
#include <boost/math/policies/error_handling.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/fpclassify.hpp>
namespace boost{ namespace math{
+namespace detail{
+
template <class T, class Policy>
-inline typename tools::promote_args<T>::type round(const T& v, const Policy& pol)
+inline typename tools::promote_args<T>::type round(const T& v, const Policy& pol, const mpl::false_)
{
BOOST_MATH_STD_USING
- typedef typename tools::promote_args<T>::type result_type;
+ typedef typename tools::promote_args<T>::type result_type;
if(!(boost::math::isfinite)(v))
return policies::raise_rounding_error("boost::math::round<%1%>(%1%)", 0, static_cast<result_type>(v), static_cast<result_type>(v), pol);
return v < 0 ? static_cast<result_type>(ceil(v - 0.5f)) : static_cast<result_type>(floor(v + 0.5f));
}
+template <class T, class Policy>
+inline typename tools::promote_args<T>::type round(const T& v, const Policy&, const mpl::true_)
+{
+ return v;
+}
+
+} // namespace detail
+
+template <class T, class Policy>
+inline typename tools::promote_args<T>::type round(const T& v, const Policy& pol)
+{
+ return detail::round(v, pol, mpl::bool_<detail::is_integer_for_rounding<T>::value>());
+}
template <class T>
inline typename tools::promote_args<T>::type round(const T& v)
{
diff --git a/3party/boost/boost/math/special_functions/sign.hpp b/3party/boost/boost/math/special_functions/sign.hpp
index 51b5bbc323..f5c562d44c 100644
--- a/3party/boost/boost/math/special_functions/sign.hpp
+++ b/3party/boost/boost/math/special_functions/sign.hpp
@@ -31,7 +31,10 @@ namespace detail {
}
#endif
- template<class T>
+ // Generic versions first, note that these do not handle
+ // signed zero or NaN.
+
+ template<class T>
inline int signbit_impl(T x, generic_tag<true> const&)
{
return x < 0;
@@ -43,7 +46,25 @@ namespace detail {
return x < 0;
}
- template<class T>
+#if defined(__GNUC__) && (LDBL_MANT_DIG == 106)
+ //
+ // Special handling for GCC's "double double" type,
+ // in this case the sign is the same as the sign we
+ // get by casting to double, no overflow/underflow
+ // can occur since the exponents are the same magnitude
+ // for the two types:
+ //
+ inline int signbit_impl(long double x, generic_tag<true> const&)
+ {
+ return boost::math::signbit(static_cast<double>(x));
+ }
+ inline int signbit_impl(long double x, generic_tag<false> const&)
+ {
+ return boost::math::signbit(static_cast<double>(x));
+ }
+#endif
+
+ template<class T>
inline int signbit_impl(T x, ieee_copy_all_bits_tag const&)
{
typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
@@ -65,6 +86,9 @@ namespace detail {
}
// Changesign
+
+ // Generic versions first, note that these do not handle
+ // signed zero or NaN.
template<class T>
inline T (changesign_impl)(T x, generic_tag<true> const&)
@@ -77,7 +101,27 @@ namespace detail {
{
return -x;
}
-
+#if defined(__GNUC__) && (LDBL_MANT_DIG == 106)
+ //
+ // Special handling for GCC's "double double" type,
+ // in this case we need to change the sign of both
+ // components of the "double double":
+ //
+ inline long double (changesign_impl)(long double x, generic_tag<true> const&)
+ {
+ double* pd = reinterpret_cast<double*>(&x);
+ pd[0] = boost::math::changesign(pd[0]);
+ pd[1] = boost::math::changesign(pd[1]);
+ return x;
+ }
+ inline long double (changesign_impl)(long double x, generic_tag<false> const&)
+ {
+ double* pd = reinterpret_cast<double*>(&x);
+ pd[0] = boost::math::changesign(pd[0]);
+ pd[1] = boost::math::changesign(pd[1]);
+ return x;
+ }
+#endif
template<class T>
inline T changesign_impl(T x, ieee_copy_all_bits_tag const&)
@@ -111,7 +155,7 @@ template<class T> int (signbit)(T x)
typedef typename detail::fp_traits<T>::type traits;
typedef typename traits::method method;
// typedef typename boost::is_floating_point<T>::type fp_tag;
- typedef typename tools::promote_args<T>::type result_type;
+ typedef typename tools::promote_args_permissive<T>::type result_type;
return detail::signbit_impl(static_cast<result_type>(x), method());
}
@@ -121,22 +165,22 @@ inline int sign BOOST_NO_MACRO_EXPAND(const T& z)
return (z == 0) ? 0 : (boost::math::signbit)(z) ? -1 : 1;
}
-template <class T> typename tools::promote_args<T>::type (changesign)(const T& x)
+template <class T> typename tools::promote_args_permissive<T>::type (changesign)(const T& x)
{ //!< \brief return unchanged binary pattern of x, except for change of sign bit.
typedef typename detail::fp_traits<T>::sign_change_type traits;
typedef typename traits::method method;
// typedef typename boost::is_floating_point<T>::type fp_tag;
- typedef typename tools::promote_args<T>::type result_type;
+ typedef typename tools::promote_args_permissive<T>::type result_type;
return detail::changesign_impl(static_cast<result_type>(x), method());
}
template <class T, class U>
-inline typename tools::promote_args<T, U>::type
+inline typename tools::promote_args_permissive<T, U>::type
copysign BOOST_NO_MACRO_EXPAND(const T& x, const U& y)
{
BOOST_MATH_STD_USING
- typedef typename tools::promote_args<T, U>::type result_type;
+ typedef typename tools::promote_args_permissive<T, U>::type result_type;
return (boost::math::signbit)(static_cast<result_type>(x)) != (boost::math::signbit)(static_cast<result_type>(y))
? (boost::math::changesign)(static_cast<result_type>(x)) : static_cast<result_type>(x);
}
diff --git a/3party/boost/boost/math/special_functions/sin_pi.hpp b/3party/boost/boost/math/special_functions/sin_pi.hpp
index 38c02bc99e..16aed51d2b 100644
--- a/3party/boost/boost/math/special_functions/sin_pi.hpp
+++ b/3party/boost/boost/math/special_functions/sin_pi.hpp
@@ -12,6 +12,7 @@
#include <boost/config/no_tr1/cmath.hpp>
#include <boost/math/tools/config.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/trunc.hpp>
#include <boost/math/tools/promotion.hpp>
#include <boost/math/constants/constants.hpp>
diff --git a/3party/boost/boost/math/special_functions/sinhc.hpp b/3party/boost/boost/math/special_functions/sinhc.hpp
index d19a4b71c6..1216b7bfb7 100644
--- a/3party/boost/boost/math/special_functions/sinhc.hpp
+++ b/3party/boost/boost/math/special_functions/sinhc.hpp
@@ -34,17 +34,6 @@ namespace boost
{
namespace detail
{
-#if defined(__GNUC__) && (__GNUC__ < 3)
- // gcc 2.x ignores function scope using declarations,
- // put them in the scope of the enclosing namespace instead:
-
- using ::std::abs;
- using ::std::sqrt;
- using ::std::sinh;
-
- using ::std::numeric_limits;
-#endif /* defined(__GNUC__) && (__GNUC__ < 3) */
-
// This is the "Hyperbolic Sinus Cardinal" of index Pi.
template<typename T>
diff --git a/3party/boost/boost/math/special_functions/spherical_harmonic.hpp b/3party/boost/boost/math/special_functions/spherical_harmonic.hpp
index 73513aeb61..00a6ade0d2 100644
--- a/3party/boost/boost/math/special_functions/spherical_harmonic.hpp
+++ b/3party/boost/boost/math/special_functions/spherical_harmonic.hpp
@@ -11,6 +11,7 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/legendre.hpp>
#include <boost/math/tools/workaround.hpp>
#include <complex>
diff --git a/3party/boost/boost/math/special_functions/sqrt1pm1.hpp b/3party/boost/boost/math/special_functions/sqrt1pm1.hpp
index ad0203e722..293a9d97b3 100644
--- a/3party/boost/boost/math/special_functions/sqrt1pm1.hpp
+++ b/3party/boost/boost/math/special_functions/sqrt1pm1.hpp
@@ -10,9 +10,9 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/log1p.hpp>
#include <boost/math/special_functions/expm1.hpp>
-#include <boost/math/special_functions/math_fwd.hpp>
//
// This algorithm computes sqrt(1+x)-1 for small x:
diff --git a/3party/boost/boost/math/special_functions/trunc.hpp b/3party/boost/boost/math/special_functions/trunc.hpp
index 8e515f3ea8..3f80c96fee 100644
--- a/3party/boost/boost/math/special_functions/trunc.hpp
+++ b/3party/boost/boost/math/special_functions/trunc.hpp
@@ -10,14 +10,15 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/tools/config.hpp>
#include <boost/math/policies/error_handling.hpp>
#include <boost/math/special_functions/fpclassify.hpp>
-namespace boost{ namespace math{
+namespace boost{ namespace math{ namespace detail{
template <class T, class Policy>
-inline typename tools::promote_args<T>::type trunc(const T& v, const Policy& pol)
+inline typename tools::promote_args<T>::type trunc(const T& v, const Policy& pol, const mpl::false_&)
{
BOOST_MATH_STD_USING
typedef typename tools::promote_args<T>::type result_type;
@@ -25,6 +26,20 @@ inline typename tools::promote_args<T>::type trunc(const T& v, const Policy& pol
return policies::raise_rounding_error("boost::math::trunc<%1%>(%1%)", 0, static_cast<result_type>(v), static_cast<result_type>(v), pol);
return (v >= 0) ? static_cast<result_type>(floor(v)) : static_cast<result_type>(ceil(v));
}
+
+template <class T, class Policy>
+inline typename tools::promote_args<T>::type trunc(const T& v, const Policy&, const mpl::true_&)
+{
+ return v;
+}
+
+}
+
+template <class T, class Policy>
+inline typename tools::promote_args<T>::type trunc(const T& v, const Policy& pol)
+{
+ return detail::trunc(v, pol, mpl::bool_<detail::is_integer_for_rounding<T>::value>());
+}
template <class T>
inline typename tools::promote_args<T>::type trunc(const T& v)
{
diff --git a/3party/boost/boost/math/special_functions/zeta.hpp b/3party/boost/boost/math/special_functions/zeta.hpp
index 6c82fa4e3b..b176f20176 100644
--- a/3party/boost/boost/math/special_functions/zeta.hpp
+++ b/3party/boost/boost/math/special_functions/zeta.hpp
@@ -10,6 +10,7 @@
#pragma once
#endif
+#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/tools/precision.hpp>
#include <boost/math/tools/series.hpp>
#include <boost/math/tools/big_constant.hpp>
@@ -378,7 +379,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<64>&)
BOOST_MATH_BIG_CONSTANT(T, 64, -0.279496685273033761927e-4),
};
static const T Q[7] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, -0.30425480068225790522),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.050052748580371598736),
BOOST_MATH_BIG_CONSTANT(T, 64, -0.00519355671064700627862),
@@ -406,7 +407,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<64>&)
BOOST_MATH_BIG_CONSTANT(T, 64, 0.700867470265983665042e-5),
};
static const T Q[7] = {
- BOOST_MATH_BIG_CONSTANT(T, 64, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.259385759149531030085),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.0373974962106091316854),
BOOST_MATH_BIG_CONSTANT(T, 64, 0.00332735159183332820617),
@@ -554,7 +555,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&)
// Max error found at long double precision: 7.281332e-31
static const T P[10] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, -1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, -1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, -0.0353008629988648122808504280990313668),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0107795651204927743049369868548706909),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.000523961870530500751114866884685172975),
@@ -566,7 +567,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.113103113698388531428914333768142527e-10),
};
static const T Q[11] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, -0.387483472099602327112637481818565459),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0802265315091063135271497708694776875),
BOOST_MATH_BIG_CONSTANT(T, 113, -0.0110727276164171919280036408995078164),
@@ -600,7 +601,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.835774625259919268768735944711219256e-11),
};
static const T Q[11] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.316661751179735502065583176348292881),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0540401806533507064453851182728635272),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.00598621274107420237785899476374043797),
@@ -636,7 +637,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, 0.340169592866058506675897646629036044e-12),
};
static const T Q[12] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.363755247765087100018556983050520554),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0696581979014242539385695131258321598),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.00882208914484611029571547753782014817),
@@ -675,7 +676,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.15090220092460596872172844424267351e-10),
};
static const T Q[14] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.69490865837142338462982225731926485),
BOOST_MATH_BIG_CONSTANT(T, 113, 1.22697696630994080733321401255942464),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.495409420862526540074366618006341533),
@@ -715,7 +716,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.420204769185233365849253969097184005e-12),
};
static const T Q[14] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.97663511666410096104783358493318814),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.40878780231201806504987368939673249),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0963890666609396058945084107597727252),
@@ -753,7 +754,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.289187187441625868404494665572279364e-15),
};
static const T Q[14] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.427310044448071818775721584949868806),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.074602514873055756201435421385243062),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.00688651562174480772901425121653945942),
@@ -792,7 +793,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.402663128248642002351627980255756363e-16),
};
static const T Q[14] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.311288325355705609096155335186466508),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0438318468940415543546769437752132748),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.00374396349183199548610264222242269536),
@@ -831,7 +832,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&)
BOOST_MATH_BIG_CONSTANT(T, 113, -0.376708747782400769427057630528578187e-19),
};
static const T Q[16] = {
- BOOST_MATH_BIG_CONSTANT(T, 113, 1),
+ BOOST_MATH_BIG_CONSTANT(T, 113, 1.0),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.205076752981410805177554569784219717),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.0202526722696670378999575738524540269),
BOOST_MATH_BIG_CONSTANT(T, 113, 0.001278305290005994980069466658219057),
@@ -866,9 +867,10 @@ template <class T, class Policy, class Tag>
T zeta_imp(T s, T sc, const Policy& pol, const Tag& tag)
{
BOOST_MATH_STD_USING
+ static const char* function = "boost::math::zeta<%1%>";
if(sc == 0)
return policies::raise_pole_error<T>(
- "boost::math::zeta<%1%>",
+ function,
"Evaluation of zeta function at pole %1%",
s, pol);
T result;
@@ -883,10 +885,25 @@ T zeta_imp(T s, T sc, const Policy& pol, const Tag& tag)
result = 0;
else
{
- result = boost::math::sin_pi(0.5f * sc, pol)
- * 2 * pow(2 * constants::pi<T>(), -s)
- * boost::math::tgamma(s, pol)
- * zeta_imp(s, sc, pol, tag);
+ if(s > max_factorial<T>::value)
+ {
+ T mult = boost::math::sin_pi(0.5f * sc, pol) * 2 * zeta_imp(s, sc, pol, tag);
+ result = boost::math::lgamma(s, pol);
+ result -= s * log(2 * constants::pi<T>());
+ if(result > tools::log_max_value<T>())
+ return sign(mult) * policies::raise_overflow_error<T>(function, 0, pol);
+ result = exp(result);
+ if(tools::max_value<T>() / fabs(mult) < result)
+ return boost::math::sign(mult) * policies::raise_overflow_error<T>(function, 0, pol);
+ result *= mult;
+ }
+ else
+ {
+ result = boost::math::sin_pi(0.5f * sc, pol)
+ * 2 * pow(2 * constants::pi<T>(), -s)
+ * boost::math::tgamma(s, pol)
+ * zeta_imp(s, sc, pol, tag);
+ }
}
}
else
diff --git a/3party/boost/boost/math/tools/big_constant.hpp b/3party/boost/boost/math/tools/big_constant.hpp
index 071308873d..423cc1b631 100644
--- a/3party/boost/boost/math/tools/big_constant.hpp
+++ b/3party/boost/boost/math/tools/big_constant.hpp
@@ -12,30 +12,31 @@
#include <boost/lexical_cast.hpp>
#endif
#include <boost/type_traits/is_convertible.hpp>
+#include <boost/math/cstdfloat/cstdfloat_types.hpp>
namespace boost{ namespace math{
namespace tools{
template <class T>
-inline BOOST_CONSTEXPR_OR_CONST T make_big_value(long double v, const char*, mpl::true_ const&, mpl::false_ const&)
+inline BOOST_CONSTEXPR_OR_CONST T make_big_value(boost::floatmax_t v, const char*, mpl::true_ const&, mpl::false_ const&)
{
return static_cast<T>(v);
}
template <class T>
-inline BOOST_CONSTEXPR_OR_CONST T make_big_value(long double v, const char*, mpl::true_ const&, mpl::true_ const&)
+inline BOOST_CONSTEXPR_OR_CONST T make_big_value(boost::floatmax_t v, const char*, mpl::true_ const&, mpl::true_ const&)
{
return static_cast<T>(v);
}
#ifndef BOOST_MATH_NO_LEXICAL_CAST
template <class T>
-inline T make_big_value(long double, const char* s, mpl::false_ const&, mpl::false_ const&)
+inline T make_big_value(boost::floatmax_t, const char* s, mpl::false_ const&, mpl::false_ const&)
{
return boost::lexical_cast<T>(s);
}
#endif
template <class T>
-inline BOOST_CONSTEXPR const char* make_big_value(long double, const char* s, mpl::false_ const&, mpl::true_ const&)
+inline BOOST_CONSTEXPR const char* make_big_value(boost::floatmax_t, const char* s, mpl::false_ const&, mpl::true_ const&)
{
return s;
}
@@ -45,19 +46,21 @@ inline BOOST_CONSTEXPR const char* make_big_value(long double, const char* s, mp
//
#define BOOST_MATH_BIG_CONSTANT(T, D, x)\
boost::math::tools::make_big_value<T>(\
- BOOST_JOIN(x, L), \
+ BOOST_FLOATMAX_C(x), \
BOOST_STRINGIZE(x), \
- mpl::bool_< (is_convertible<long double, T>::value) && \
- ((D <= std::numeric_limits<long double>::digits) \
+ mpl::bool_< (is_convertible<boost::floatmax_t, T>::value) && \
+ ((D <= std::numeric_limits<boost::floatmax_t>::digits) \
|| is_floating_point<T>::value \
|| (std::numeric_limits<T>::is_specialized && \
- (std::numeric_limits<T>::digits10 <= std::numeric_limits<long double>::digits10))) >(), \
+ (std::numeric_limits<T>::digits10 <= std::numeric_limits<boost::floatmax_t>::digits10))) >(), \
boost::is_convertible<const char*, T>())
//
// 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<T>(0.0L, BOOST_STRINGIZE(x), mpl::bool_<is_floating_point<T>::value || (std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::max_exponent <= std::numeric_limits<long double>::max_exponent)>(), boost::is_convertible<const char*, T>())
+ boost::math::tools::make_big_value<T>(0.0L, BOOST_STRINGIZE(x), \
+ mpl::bool_<is_floating_point<T>::value || (std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::max_exponent <= std::numeric_limits<long double>::max_exponent && std::numeric_limits<T>::digits <= std::numeric_limits<long double>::digits)>(), \
+ boost::is_convertible<const char*, T>())
}}} // namespaces
diff --git a/3party/boost/boost/math/tools/config.hpp b/3party/boost/boost/math/tools/config.hpp
index 6dfb629b58..4ec5768aaf 100644
--- a/3party/boost/boost/math/tools/config.hpp
+++ b/3party/boost/boost/math/tools/config.hpp
@@ -13,6 +13,7 @@
#include <boost/config.hpp>
#include <boost/cstdint.hpp> // for boost::uintmax_t
#include <boost/detail/workaround.hpp>
+#include <boost/type_traits/is_integral.hpp>
#include <algorithm> // for min and max
#include <boost/config/no_tr1/cmath.hpp>
#include <climits>
@@ -20,6 +21,9 @@
#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
# include <math.h>
#endif
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+# include <limits>
+#endif
#include <boost/math/tools/user.hpp>
@@ -109,7 +113,7 @@
# define BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY
#endif
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590)
+#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590)
# include "boost/type.hpp"
# include "boost/non_type.hpp"
@@ -143,12 +147,12 @@
# define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
-#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+#endif // __SUNPRO_CC
#if (defined(__SUNPRO_CC) || defined(__hppa) || defined(__GNUC__)) && !defined(BOOST_MATH_SMALL_CONSTANT)
// Sun's compiler emits a hard error if a constant underflows,
// as does aCC on PA-RISC, while gcc issues a large number of warnings:
-# define BOOST_MATH_SMALL_CONSTANT(x) 0
+# define BOOST_MATH_SMALL_CONSTANT(x) 0.0
#else
# define BOOST_MATH_SMALL_CONSTANT(x) x
#endif
@@ -210,13 +214,28 @@
//
// Test whether to support __float128:
//
-#if defined(_GLIBCXX_USE_FLOAT128) && defined(BOOST_GCC) && !defined(__STRICT_ANSI__)
+#if defined(_GLIBCXX_USE_FLOAT128) && defined(BOOST_GCC) && !defined(__STRICT_ANSI__) \
+ && !defined(BOOST_MATH_DISABLE_FLOAT128) || defined(BOOST_MATH_USE_FLOAT128)
//
// Only enable this when the compiler really is GCC as clang and probably
// intel too don't support __float128 yet :-(
//
+#ifndef BOOST_MATH_USE_FLOAT128
# define BOOST_MATH_USE_FLOAT128
#endif
+
+# if defined(BOOST_INTEL) && defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION >= 1310) && defined(__GNUC__)
+# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6))
+# define BOOST_MATH_FLOAT128_TYPE __float128
+# endif
+# elif defined(__GNUC__)
+# define BOOST_MATH_FLOAT128_TYPE __float128
+# endif
+
+# ifndef BOOST_MATH_FLOAT128_TYPE
+# define BOOST_MATH_FLOAT128_TYPE _Quad
+# endif
+#endif
//
// Check for WinCE with no iostream support:
//
@@ -283,9 +302,35 @@ void suppress_unused_variable_warning(const T&)
{
}
+namespace detail{
+
+template <class T>
+struct is_integer_for_rounding
+{
+ static const bool value = boost::is_integral<T>::value
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ || (std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::is_integer)
+#endif
+ ;
+};
+
+}
+
}} // namespace boost namespace math
-#if ((defined(__linux__) && !defined(__UCLIBC__)) || defined(__QNX__) || defined(__IBMCPP__)) && !defined(BOOST_NO_FENV_H)
+#ifdef __GLIBC_PREREQ
+# if __GLIBC_PREREQ(2,14)
+# define BOOST_MATH_HAVE_FIXED_GLIBC
+# endif
+#endif
+
+#if ((defined(__linux__) && !defined(__UCLIBC__) && !defined(BOOST_MATH_HAVE_FIXED_GLIBC)) || defined(__QNX__) || defined(__IBMCPP__)) && !defined(BOOST_NO_FENV_H)
+//
+// This code was introduced in response to this glibc bug: http://sourceware.org/bugzilla/show_bug.cgi?id=2445
+// Basically powl and expl can return garbage when the result is small and certain exception flags are set
+// on entrance to these functions. This appears to have been fixed in Glibc 2.14 (May 2011).
+// Much more information in this message thread: https://groups.google.com/forum/#!topic/boost-list/ZT99wtIFlb4
+//
#include <boost/detail/fenv.hpp>
diff --git a/3party/boost/boost/math/tools/fraction.hpp b/3party/boost/boost/math/tools/fraction.hpp
index a9938094a7..b245ddd2a3 100644
--- a/3party/boost/boost/math/tools/fraction.hpp
+++ b/3party/boost/boost/math/tools/fraction.hpp
@@ -33,7 +33,7 @@ namespace detail
typedef typename Gen::result_type result_type;
typedef typename Gen::result_type value_type;
- static result_type a(const value_type& v)
+ static result_type a(const value_type&)
{
return 1;
}
diff --git a/3party/boost/boost/math/tools/precision.hpp b/3party/boost/boost/math/tools/precision.hpp
index 66d2754278..49e653d6a3 100644
--- a/3party/boost/boost/math/tools/precision.hpp
+++ b/3party/boost/boost/math/tools/precision.hpp
@@ -157,11 +157,19 @@ inline T epsilon(const mpl::true_& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T))
return std::numeric_limits<T>::epsilon();
}
-#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && ((LDBL_MANT_DIG == 106) || (__LDBL_MANT_DIG__ == 106))
+#if defined(__GNUC__) && ((LDBL_MANT_DIG == 106) || (__LDBL_MANT_DIG__ == 106))
template <>
inline long double epsilon<long double>(const mpl::true_& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(long double))
{
- // numeric_limits on Darwin tells lies here.
+ // numeric_limits on Darwin (and elsewhere) tells lies here:
+ // the issue is that long double on a few platforms is
+ // really a "double double" which has a non-contiguous
+ // mantissa: 53 bits followed by an unspecified number of
+ // zero bits, followed by 53 more bits. Thus the apparent
+ // precision of the type varies depending where it's been.
+ // Set epsilon to the value that a 106 bit fixed mantissa
+ // type would have, as that will give us sensible behaviour everywhere.
+ //
// This static assert fails for some unknown reason, so
// disabled for now...
// BOOST_STATIC_ASSERT(std::numeric_limits<long double>::digits == 106);
@@ -280,6 +288,38 @@ inline T root_epsilon_imp(const T*, const Tag&)
}
template <class T>
+inline T cbrt_epsilon_imp(const mpl::int_<24>&)
+{
+ return static_cast<T>(0.0049215666011518482998719164346805794944150447839903L);
+}
+
+template <class T>
+inline T cbrt_epsilon_imp(const T*, const mpl::int_<53>&)
+{
+ return static_cast<T>(6.05545445239333906078989272793696693569753008995e-6L);
+}
+
+template <class T>
+inline T cbrt_epsilon_imp(const T*, const mpl::int_<64>&)
+{
+ return static_cast<T>(4.76837158203125e-7L);
+}
+
+template <class T>
+inline T cbrt_epsilon_imp(const T*, const mpl::int_<113>&)
+{
+ return static_cast<T>(5.7749313854154005630396773604745549542403508090496e-12L);
+}
+
+template <class T, class Tag>
+inline T cbrt_epsilon_imp(const T*, const Tag&)
+{
+ BOOST_MATH_STD_USING;
+ static const T cbrt_eps = pow(tools::epsilon<T>(), T(1) / 3);
+ return cbrt_eps;
+}
+
+template <class T>
inline T forth_root_epsilon_imp(const T*, const mpl::int_<24>&)
{
return static_cast<T>(0.018581361171917516667460937040007436176452688944747L);
@@ -321,6 +361,13 @@ inline T root_epsilon()
}
template <class T>
+inline T cbrt_epsilon()
+{
+ typedef mpl::int_< (::std::numeric_limits<T>::radix == 2) ? std::numeric_limits<T>::digits : 0> tag_type;
+ return detail::cbrt_epsilon_imp(static_cast<T const*>(0), tag_type());
+}
+
+template <class T>
inline T forth_root_epsilon()
{
typedef mpl::int_< (::std::numeric_limits<T>::radix == 2) ? std::numeric_limits<T>::digits : 0> tag_type;
diff --git a/3party/boost/boost/math/tools/promotion.hpp b/3party/boost/boost/math/tools/promotion.hpp
index 728aaf1209..b3ad204077 100644
--- a/3party/boost/boost/math/tools/promotion.hpp
+++ b/3party/boost/boost/math/tools/promotion.hpp
@@ -138,10 +138,35 @@ namespace boost
//
// Guard against use of long double if it's not supported:
//
- BOOST_STATIC_ASSERT((0 == ::boost::is_same<type, long double>::value));
+ BOOST_STATIC_ASSERT_MSG((0 == ::boost::is_same<type, long double>::value), "Sorry, but this platform does not have sufficient long double support for the special functions to be reliably implemented.");
#endif
};
+ //
+ // This struct is the same as above, but has no static assert on long double usage,
+ // it should be used only on functions that can be implemented for long double
+ // even when std lib support is missing or broken for that type.
+ //
+ template <class T1, class T2=float, class T3=float, class T4=float, class T5=float, class T6=float>
+ struct promote_args_permissive
+ {
+ typedef typename promote_args_2<
+ typename remove_cv<T1>::type,
+ typename promote_args_2<
+ typename remove_cv<T2>::type,
+ typename promote_args_2<
+ typename remove_cv<T3>::type,
+ typename promote_args_2<
+ typename remove_cv<T4>::type,
+ typename promote_args_2<
+ typename remove_cv<T5>::type, typename remove_cv<T6>::type
+ >::type
+ >::type
+ >::type
+ >::type
+ >::type type;
+ };
+
} // namespace tools
} // namespace math
} // namespace boost
diff --git a/3party/boost/boost/math/tools/remez.hpp b/3party/boost/boost/math/tools/remez.hpp
deleted file mode 100644
index 5c65afc42f..0000000000
--- a/3party/boost/boost/math/tools/remez.hpp
+++ /dev/null
@@ -1,667 +0,0 @@
-// (C) Copyright John Maddock 2006.
-// 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_TOOLS_REMEZ_HPP
-#define BOOST_MATH_TOOLS_REMEZ_HPP
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-
-#include <boost/math/tools/solve.hpp>
-#include <boost/math/tools/minima.hpp>
-#include <boost/math/tools/roots.hpp>
-#include <boost/math/tools/polynomial.hpp>
-#include <boost/function/function1.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <boost/math/policies/policy.hpp>
-
-namespace boost{ namespace math{ namespace tools{
-
-namespace detail{
-
-//
-// The error function: the difference between F(x) and
-// the current approximation. This is the function
-// for which we must find the extema.
-//
-template <class T>
-struct remez_error_function
-{
- typedef boost::function1<T, T const &> function_type;
-public:
- remez_error_function(
- function_type f_,
- const polynomial<T>& n,
- const polynomial<T>& d,
- bool rel_err)
- : f(f_), numerator(n), denominator(d), rel_error(rel_err) {}
-
- T operator()(const T& z)const
- {
- T y = f(z);
- T abs = y - (numerator.evaluate(z) / denominator.evaluate(z));
- T err;
- if(rel_error)
- {
- if(y != 0)
- err = abs / fabs(y);
- else if(0 == abs)
- {
- // we must be at a root, or it's not recoverable:
- BOOST_ASSERT(0 == abs);
- err = 0;
- }
- else
- {
- // We have a divide by zero!
- // Lets assume that f(x) is zero as a result of
- // internal cancellation error that occurs as a result
- // of shifting a root at point z to the origin so that
- // the approximation can be "pinned" to pass through
- // the origin: in that case it really
- // won't matter what our approximation calculates here
- // as long as it's a small number, return the absolute error:
- err = abs;
- }
- }
- else
- err = abs;
- return err;
- }
-private:
- function_type f;
- polynomial<T> numerator;
- polynomial<T> denominator;
- bool rel_error;
-};
-//
-// This function adapts the error function so that it's minima
-// are the extema of the error function. We can find the minima
-// with standard techniques.
-//
-template <class T>
-struct remez_max_error_function
-{
- remez_max_error_function(const remez_error_function<T>& f)
- : func(f) {}
-
- T operator()(const T& x)
- {
- BOOST_MATH_STD_USING
- return -fabs(func(x));
- }
-private:
- remez_error_function<T> func;
-};
-
-} // detail
-
-template <class T>
-class remez_minimax
-{
-public:
- typedef boost::function1<T, T const &> function_type;
- typedef boost::numeric::ublas::vector<T> vector_type;
- typedef boost::numeric::ublas::matrix<T> matrix_type;
-
- remez_minimax(function_type f, unsigned oN, unsigned oD, T a, T b, bool pin = true, bool rel_err = false, int sk = 0, int bits = 0);
- remez_minimax(function_type f, unsigned oN, unsigned oD, T a, T b, bool pin, bool rel_err, int sk, int bits, const vector_type& points);
-
- void reset(unsigned oN, unsigned oD, T a, T b, bool pin = true, bool rel_err = false, int sk = 0, int bits = 0);
- void reset(unsigned oN, unsigned oD, T a, T b, bool pin, bool rel_err, int sk, int bits, const vector_type& points);
-
- void set_brake(int b)
- {
- BOOST_ASSERT(b < 100);
- BOOST_ASSERT(b >= 0);
- m_brake = b;
- }
-
- T iterate();
-
- polynomial<T> denominator()const;
- polynomial<T> numerator()const;
-
- vector_type const& chebyshev_points()const
- {
- return control_points;
- }
-
- vector_type const& zero_points()const
- {
- return zeros;
- }
-
- T error_term()const
- {
- return solution[solution.size() - 1];
- }
- T max_error()const
- {
- return m_max_error;
- }
- T max_change()const
- {
- return m_max_change;
- }
- void rotate()
- {
- --orderN;
- ++orderD;
- }
- void rescale(T a, T b)
- {
- T scale = (b - a) / (max - min);
- for(unsigned i = 0; i < control_points.size(); ++i)
- {
- control_points[i] = (control_points[i] - min) * scale + a;
- }
- min = a;
- max = b;
- }
-private:
-
- void init_chebyshev();
-
- function_type func; // The function to approximate.
- vector_type control_points; // Current control points to be used for the next iteration.
- vector_type solution; // Solution from the last iteration contains all unknowns including the error term.
- vector_type zeros; // Location of points of zero error from last iteration, plus the two end points.
- vector_type maxima; // Location of maxima of the error function, actually contains the control points used for the last iteration.
- T m_max_error; // Maximum error found in last approximation.
- T m_max_change; // Maximum change in location of control points after last iteration.
- unsigned orderN; // Order of the numerator polynomial.
- unsigned orderD; // Order of the denominator polynomial.
- T min, max; // End points of the range to optimise over.
- bool rel_error; // If true optimise for relative not absolute error.
- bool pinned; // If true the approximation is "pinned" to go through the origin.
- unsigned unknowns; // Total number of unknowns.
- int m_precision; // Number of bits precision to which the zeros and maxima are found.
- T m_max_change_history[2]; // Past history of changes to control points.
- int m_brake; // amount to break by in percentage points.
- int m_skew; // amount to skew starting points by in percentage points: -100-100
-};
-
-#ifndef BRAKE
-#define BRAKE 0
-#endif
-#ifndef SKEW
-#define SKEW 0
-#endif
-
-template <class T>
-void remez_minimax<T>::init_chebyshev()
-{
- BOOST_MATH_STD_USING
- //
- // Fill in the zeros:
- //
- unsigned terms = pinned ? orderD + orderN : orderD + orderN + 1;
-
- for(unsigned i = 0; i < terms; ++i)
- {
- T cheb = cos((2 * terms - 1 - 2 * i) * constants::pi<T>() / (2 * terms));
- cheb += 1;
- cheb /= 2;
- if(m_skew != 0)
- {
- T p = static_cast<T>(200 + m_skew) / 200;
- cheb = pow(cheb, p);
- }
- cheb *= (max - min);
- cheb += min;
- zeros[i+1] = cheb;
- }
- zeros[0] = min;
- zeros[unknowns] = max;
- // perform a regular interpolation fit:
- matrix_type A(terms, terms);
- vector_type b(terms);
- // fill in the y values:
- for(unsigned i = 0; i < b.size(); ++i)
- {
- b[i] = func(zeros[i+1]);
- }
- // fill in powers of x evaluated at each of the control points:
- unsigned offsetN = pinned ? 0 : 1;
- unsigned offsetD = offsetN + orderN;
- unsigned maxorder = (std::max)(orderN, orderD);
- for(unsigned i = 0; i < b.size(); ++i)
- {
- T x0 = zeros[i+1];
- T x = x0;
- if(!pinned)
- A(i, 0) = 1;
- for(unsigned j = 0; j < maxorder; ++j)
- {
- if(j < orderN)
- A(i, j + offsetN) = x;
- if(j < orderD)
- {
- A(i, j + offsetD) = -x * b[i];
- }
- x *= x0;
- }
- }
- //
- // Now go ahead and solve the expression to get our solution:
- //
- vector_type l_solution = boost::math::tools::solve(A, b);
- // need to add a "fake" error term:
- l_solution.resize(unknowns);
- l_solution[unknowns-1] = 0;
- solution = l_solution;
- //
- // Now find all the extrema of the error function:
- //
- detail::remez_error_function<T> Err(func, this->numerator(), this->denominator(), rel_error);
- detail::remez_max_error_function<T> Ex(Err);
- m_max_error = 0;
- int max_err_location = 0;
- for(unsigned i = 0; i < unknowns; ++i)
- {
- std::pair<T, T> r = brent_find_minima(Ex, zeros[i], zeros[i+1], m_precision);
- maxima[i] = r.first;
- T rel_err = fabs(r.second);
- if(rel_err > m_max_error)
- {
- m_max_error = fabs(r.second);
- max_err_location = i;
- }
- }
- control_points = maxima;
-}
-
-template <class T>
-void remez_minimax<T>::reset(
- unsigned oN,
- unsigned oD,
- T a,
- T b,
- bool pin,
- bool rel_err,
- int sk,
- int bits)
-{
- control_points = vector_type(oN + oD + (pin ? 1 : 2));
- solution = control_points;
- zeros = vector_type(oN + oD + (pin ? 2 : 3));
- maxima = control_points;
- orderN = oN;
- orderD = oD;
- rel_error = rel_err;
- pinned = pin;
- m_skew = sk;
- min = a;
- max = b;
- m_max_error = 0;
- unknowns = orderN + orderD + (pinned ? 1 : 2);
- // guess our initial control points:
- control_points[0] = min;
- control_points[unknowns - 1] = max;
- T interval = (max - min) / (unknowns - 1);
- T spot = min + interval;
- for(unsigned i = 1; i < control_points.size(); ++i)
- {
- control_points[i] = spot;
- spot += interval;
- }
- solution[unknowns - 1] = 0;
- m_max_error = 0;
- if(bits == 0)
- {
- // don't bother about more than float precision:
- m_precision = (std::min)(24, (boost::math::policies::digits<T, boost::math::policies::policy<> >() / 2) - 2);
- }
- else
- {
- // can't be more accurate than half the bits of T:
- m_precision = (std::min)(bits, (boost::math::policies::digits<T, boost::math::policies::policy<> >() / 2) - 2);
- }
- m_max_change_history[0] = m_max_change_history[1] = 1;
- init_chebyshev();
- // do one iteration whatever:
- //iterate();
-}
-
-template <class T>
-inline remez_minimax<T>::remez_minimax(
- typename remez_minimax<T>::function_type f,
- unsigned oN,
- unsigned oD,
- T a,
- T b,
- bool pin,
- bool rel_err,
- int sk,
- int bits)
- : func(f)
-{
- m_brake = 0;
- reset(oN, oD, a, b, pin, rel_err, sk, bits);
-}
-
-template <class T>
-void remez_minimax<T>::reset(
- unsigned oN,
- unsigned oD,
- T a,
- T b,
- bool pin,
- bool rel_err,
- int sk,
- int bits,
- const vector_type& points)
-{
- control_points = vector_type(oN + oD + (pin ? 1 : 2));
- solution = control_points;
- zeros = vector_type(oN + oD + (pin ? 2 : 3));
- maxima = control_points;
- orderN = oN;
- orderD = oD;
- rel_error = rel_err;
- pinned = pin;
- m_skew = sk;
- min = a;
- max = b;
- m_max_error = 0;
- unknowns = orderN + orderD + (pinned ? 1 : 2);
- control_points = points;
- solution[unknowns - 1] = 0;
- m_max_error = 0;
- if(bits == 0)
- {
- // don't bother about more than float precision:
- m_precision = (std::min)(24, (boost::math::policies::digits<T, boost::math::policies::policy<> >() / 2) - 2);
- }
- else
- {
- // can't be more accurate than half the bits of T:
- m_precision = (std::min)(bits, (boost::math::policies::digits<T, boost::math::policies::policy<> >() / 2) - 2);
- }
- m_max_change_history[0] = m_max_change_history[1] = 1;
- // do one iteration whatever:
- //iterate();
-}
-
-template <class T>
-inline remez_minimax<T>::remez_minimax(
- typename remez_minimax<T>::function_type f,
- unsigned oN,
- unsigned oD,
- T a,
- T b,
- bool pin,
- bool rel_err,
- int sk,
- int bits,
- const vector_type& points)
- : func(f)
-{
- m_brake = 0;
- reset(oN, oD, a, b, pin, rel_err, sk, bits, points);
-}
-
-template <class T>
-T remez_minimax<T>::iterate()
-{
- BOOST_MATH_STD_USING
- matrix_type A(unknowns, unknowns);
- vector_type b(unknowns);
-
- // fill in evaluation of f(x) at each of the control points:
- for(unsigned i = 0; i < b.size(); ++i)
- {
- // take care that none of our control points are at the origin:
- if(pinned && (control_points[i] == 0))
- {
- if(i)
- control_points[i] = control_points[i-1] / 3;
- else
- control_points[i] = control_points[i+1] / 3;
- }
- b[i] = func(control_points[i]);
- }
-
- T err_err;
- unsigned convergence_count = 0;
- do{
- // fill in powers of x evaluated at each of the control points:
- int sign = 1;
- unsigned offsetN = pinned ? 0 : 1;
- unsigned offsetD = offsetN + orderN;
- unsigned maxorder = (std::max)(orderN, orderD);
- T Elast = solution[unknowns - 1];
-
- for(unsigned i = 0; i < b.size(); ++i)
- {
- T x0 = control_points[i];
- T x = x0;
- if(!pinned)
- A(i, 0) = 1;
- for(unsigned j = 0; j < maxorder; ++j)
- {
- if(j < orderN)
- A(i, j + offsetN) = x;
- if(j < orderD)
- {
- 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 ? T(sign * fabs(b[i])) : T(sign);
- A(i, unknowns - 1) = E;
- sign = -sign;
- }
-
- #ifdef BOOST_MATH_INSTRUMENT
- for(unsigned i = 0; i < b.size(); ++i)
- std::cout << b[i] << " ";
- std::cout << "\n\n";
- for(unsigned i = 0; i < b.size(); ++i)
- {
- for(unsigned j = 0; j < b.size(); ++ j)
- std::cout << A(i, j) << " ";
- std::cout << "\n";
- }
- std::cout << std::endl;
- #endif
- //
- // Now go ahead and solve the expression to get our solution:
- //
- solution = boost::math::tools::solve(A, b);
-
- 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));
-
- //
- // Perform a sanity check to verify that the solution to the equations
- // is not so much in error as to be useless. The matrix inversion can
- // be very close to singular, so this can be a real problem.
- //
- vector_type sanity = prod(A, solution);
- for(unsigned i = 0; i < b.size(); ++i)
- {
- T err = fabs((b[i] - sanity[i]) / fabs(b[i]));
- if(err > sqrt(epsilon<T>()))
- {
- std::cerr << "Sanity check failed: more than half the digits in the found solution are in error." << std::endl;
- }
- }
-
- //
- // Next comes another sanity check, we want to verify that all the control
- // points do actually alternate in sign, in practice we may have
- // additional roots in the error function that cause this to fail.
- // Failure here is always fatal: even though this code attempts to correct
- // the problem it usually only postpones the inevitable.
- //
- polynomial<T> num, denom;
- num = this->numerator();
- denom = this->denominator();
- T e1 = b[0] - num.evaluate(control_points[0]) / denom.evaluate(control_points[0]);
-#ifdef BOOST_MATH_INSTRUMENT
- std::cout << e1;
-#endif
- for(unsigned i = 1; i < b.size(); ++i)
- {
- T e2 = b[i] - num.evaluate(control_points[i]) / denom.evaluate(control_points[i]);
-#ifdef BOOST_MATH_INSTRUMENT
- std::cout << " " << e2;
-#endif
- if(e2 * e1 > 0)
- {
- std::cerr << std::flush << "Basic sanity check failed: Error term does not alternate in sign, non-recoverable error may follow..." << std::endl;
- T perturbation = 0.05;
- do{
- T point = control_points[i] * (1 - perturbation) + control_points[i-1] * perturbation;
- e2 = func(point) - num.evaluate(point) / denom.evaluate(point);
- if(e2 * e1 < 0)
- {
- control_points[i] = point;
- break;
- }
- perturbation += 0.05;
- }while(perturbation < 0.8);
-
- if((e2 * e1 > 0) && (i + 1 < b.size()))
- {
- perturbation = 0.05;
- do{
- T point = control_points[i] * (1 - perturbation) + control_points[i+1] * perturbation;
- e2 = func(point) - num.evaluate(point) / denom.evaluate(point);
- if(e2 * e1 < 0)
- {
- control_points[i] = point;
- break;
- }
- perturbation += 0.05;
- }while(perturbation < 0.8);
- }
-
- }
- e1 = e2;
- }
-
-#ifdef BOOST_MATH_INSTRUMENT
- for(unsigned i = 0; i < solution.size(); ++i)
- std::cout << solution[i] << " ";
- std::cout << std::endl << this->numerator() << std::endl;
- std::cout << this->denominator() << std::endl;
- std::cout << std::endl;
-#endif
-
- //
- // The next step is to find all the intervals in which our maxima
- // lie:
- //
- detail::remez_error_function<T> Err(func, this->numerator(), this->denominator(), rel_error);
- zeros[0] = min;
- zeros[unknowns] = max;
- for(unsigned i = 1; i < control_points.size(); ++i)
- {
- eps_tolerance<T> tol(m_precision);
- boost::uintmax_t max_iter = 1000;
- std::pair<T, T> p = toms748_solve(
- Err,
- control_points[i-1],
- control_points[i],
- tol,
- max_iter);
- zeros[i] = (p.first + p.second) / 2;
- //zeros[i] = bisect(Err, control_points[i-1], control_points[i], m_precision);
- }
- //
- // Now find all the extrema of the error function:
- //
- detail::remez_max_error_function<T> Ex(Err);
- m_max_error = 0;
- int max_err_location = 0;
- for(unsigned i = 0; i < unknowns; ++i)
- {
- std::pair<T, T> r = brent_find_minima(Ex, zeros[i], zeros[i+1], m_precision);
- maxima[i] = r.first;
- T rel_err = fabs(r.second);
- if(rel_err > m_max_error)
- {
- m_max_error = fabs(r.second);
- max_err_location = i;
- }
- }
- //
- // Almost done now! we just need to set our control points
- // to the extrema, and calculate how much each point has changed
- // (this will be our termination condition):
- //
- swap(control_points, maxima);
- m_max_change = 0;
- int max_change_location = 0;
- for(unsigned i = 0; i < unknowns; ++i)
- {
- control_points[i] = (control_points[i] * (100 - m_brake) + maxima[i] * m_brake) / 100;
- T change = fabs((control_points[i] - maxima[i]) / control_points[i]);
-#if 0
- if(change > m_max_change_history[1])
- {
- // divergence!!! try capping the change:
- std::cerr << "Possible divergent step, change will be capped!!" << std::endl;
- change = m_max_change_history[1];
- if(control_points[i] < maxima[i])
- control_points[i] = maxima[i] - change * maxima[i];
- else
- control_points[i] = maxima[i] + change * maxima[i];
- }
-#endif
- if(change > m_max_change)
- {
- m_max_change = change;
- max_change_location = i;
- }
- }
- //
- // store max change information:
- //
- m_max_change_history[0] = m_max_change_history[1];
- m_max_change_history[1] = fabs(m_max_change);
-
- return m_max_change;
-}
-
-template <class T>
-polynomial<T> remez_minimax<T>::numerator()const
-{
- boost::scoped_array<T> a(new T[orderN + 1]);
- if(pinned)
- a[0] = 0;
- unsigned terms = pinned ? orderN : orderN + 1;
- for(unsigned i = 0; i < terms; ++i)
- a[pinned ? i+1 : i] = solution[i];
- return boost::math::tools::polynomial<T>(&a[0], orderN);
-}
-
-template <class T>
-polynomial<T> remez_minimax<T>::denominator()const
-{
- unsigned terms = orderD + 1;
- unsigned offsetD = pinned ? orderN : (orderN + 1);
- boost::scoped_array<T> a(new T[terms]);
- a[0] = 1;
- for(unsigned i = 0; i < orderD; ++i)
- a[i+1] = solution[i + offsetD];
- return boost::math::tools::polynomial<T>(&a[0], orderD);
-}
-
-
-}}} // namespaces
-
-#endif // BOOST_MATH_TOOLS_REMEZ_HPP
-
-
-
diff --git a/3party/boost/boost/math/tools/roots.hpp b/3party/boost/boost/math/tools/roots.hpp
index 7ef7d99518..2442f5c2d1 100644
--- a/3party/boost/boost/math/tools/roots.hpp
+++ b/3party/boost/boost/math/tools/roots.hpp
@@ -109,13 +109,13 @@ std::pair<T, T> bisect(F f, T min, T max, Tol tol, boost::uintmax_t& max_iter, c
static const char* function = "boost::math::tools::bisect<%1%>";
if(min >= max)
{
- policies::raise_evaluation_error(function,
- "Arguments in wrong order in boost::math::tools::bisect (first arg=%1%)", min, pol);
+ return boost::math::detail::pair_from_single(policies::raise_evaluation_error(function,
+ "Arguments in wrong order in boost::math::tools::bisect (first arg=%1%)", min, pol));
}
if(fmin * fmax >= 0)
{
- policies::raise_evaluation_error(function,
- "No change of sign in boost::math::tools::bisect, either there is no root to find, or there are multiple roots in the interval (f(min) = %1%).", fmin, pol);
+ return boost::math::detail::pair_from_single(policies::raise_evaluation_error(function,
+ "No change of sign in boost::math::tools::bisect, either there is no root to find, or there are multiple roots in the interval (f(min) = %1%).", fmin, pol));
}
//
@@ -302,7 +302,7 @@ T halley_iterate(F f, T guess, T min, T max, int digits, boost::uintmax_t& max_i
if(0 == f0)
break;
- if((f1 == 0) && (f2 == 0))
+ if(f1 == 0)
{
// Oops zero derivative!!!
#ifdef BOOST_MATH_INSTRUMENT
diff --git a/3party/boost/boost/math/tools/solve.hpp b/3party/boost/boost/math/tools/solve.hpp
deleted file mode 100644
index 64b01e5210..0000000000
--- a/3party/boost/boost/math/tools/solve.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-// (C) Copyright John Maddock 2006.
-// 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_TOOLS_SOLVE_HPP
-#define BOOST_MATH_TOOLS_SOLVE_HPP
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-
-#include <boost/config.hpp>
-#include <boost/assert.hpp>
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4996 4267 4244)
-#endif
-
-#include <boost/numeric/ublas/lu.hpp>
-#include <boost/numeric/ublas/matrix.hpp>
-#include <boost/numeric/ublas/vector.hpp>
-
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-
-namespace boost{ namespace math{ namespace tools{
-
-//
-// Find x such that Ax = b
-//
-// Caution: this uses undocumented, and untested ublas code,
-// however short of writing our own LU-decompostion code
-// it's the only game in town.
-//
-template <class T>
-boost::numeric::ublas::vector<T> solve(
- const boost::numeric::ublas::matrix<T>& A_,
- const boost::numeric::ublas::vector<T>& b_)
-{
- //BOOST_ASSERT(A_.size() == b_.size());
-
- boost::numeric::ublas::matrix<T> A(A_);
- boost::numeric::ublas::vector<T> b(b_);
- boost::numeric::ublas::permutation_matrix<> piv(b.size());
- lu_factorize(A, piv);
- lu_substitute(A, piv, b);
- //
- // iterate to reduce error:
- //
- boost::numeric::ublas::vector<T> delta(b.size());
- for(unsigned i = 0; i < 1; ++i)
- {
- noalias(delta) = prod(A_, b);
- delta -= b_;
- lu_substitute(A, piv, delta);
- b -= delta;
-
- T max_error = 0;
-
- for(unsigned i = 0; i < delta.size(); ++i)
- {
- T err = fabs(delta[i] / b[i]);
- if(err > max_error)
- max_error = err;
- }
- //std::cout << "Max change in LU error correction: " << max_error << std::endl;
- }
-
- return b;
-}
-
-}}} // namespaces
-
-#endif // BOOST_MATH_TOOLS_SOLVE_HPP
-
-
diff --git a/3party/boost/boost/math/tools/test.hpp b/3party/boost/boost/math/tools/test.hpp
deleted file mode 100644
index 8527b1cf41..0000000000
--- a/3party/boost/boost/math/tools/test.hpp
+++ /dev/null
@@ -1,334 +0,0 @@
-// (C) Copyright John Maddock 2006.
-// 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_TOOLS_TEST_HPP
-#define BOOST_MATH_TOOLS_TEST_HPP
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-
-#include <boost/math/tools/config.hpp>
-#include <boost/math/tools/stats.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-#include <boost/test/test_tools.hpp>
-#include <stdexcept>
-#include <iostream>
-#include <iomanip>
-
-namespace boost{ namespace math{ namespace tools{
-
-template <class T>
-struct test_result
-{
-private:
- boost::math::tools::stats<T> stat; // Statistics for the test.
- unsigned worst_case; // Index of the worst case test.
-public:
- test_result() { worst_case = 0; }
- void set_worst(int i){ worst_case = i; }
- void add(const T& point){ stat.add(point); }
- // accessors:
- unsigned worst()const{ return worst_case; }
- T min BOOST_PREVENT_MACRO_SUBSTITUTION()const{ return (stat.min)(); }
- T max BOOST_PREVENT_MACRO_SUBSTITUTION()const{ return (stat.max)(); }
- T total()const{ return stat.total(); }
- T mean()const{ return stat.mean(); }
- boost::uintmax_t count()const{ return stat.count(); }
- T variance()const{ return stat.variance(); }
- T variance1()const{ return stat.variance1(); }
- T rms()const{ return stat.rms(); }
-
- test_result& operator+=(const test_result& t)
- {
- if((t.stat.max)() > (stat.max)())
- worst_case = t.worst_case;
- stat += t.stat;
- return *this;
- }
-};
-
-template <class T>
-struct calculate_result_type
-{
- typedef typename T::value_type row_type;
- typedef typename row_type::value_type value_type;
-};
-
-template <class T>
-T relative_error(T a, T b)
-{
- BOOST_MATH_STD_USING
-#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
- //
- // If math.h has no long double support we can't rely
- // on the math functions generating exponents outside
- // the range of a double:
- //
- T min_val = (std::max)(
- tools::min_value<T>(),
- static_cast<T>((std::numeric_limits<double>::min)()));
- T max_val = (std::min)(
- tools::max_value<T>(),
- static_cast<T>((std::numeric_limits<double>::max)()));
-#else
- T min_val = tools::min_value<T>();
- T max_val = tools::max_value<T>();
-#endif
-
- if((a != 0) && (b != 0))
- {
- // TODO: use isfinite:
- if(fabs(b) >= max_val)
- {
- if(fabs(a) >= max_val)
- return 0; // one infinity is as good as another!
- }
- // If the result is denormalised, treat all denorms as equivalent:
- if((a < min_val) && (a > 0))
- a = min_val;
- else if((a > -min_val) && (a < 0))
- a = -min_val;
- if((b < min_val) && (b > 0))
- b = min_val;
- else if((b > -min_val) && (b < 0))
- b = -min_val;
- return (std::max)(fabs((a-b)/a), fabs((a-b)/b));
- }
-
- // Handle special case where one or both are zero:
- if(min_val == 0)
- return fabs(a-b);
- if(fabs(a) < min_val)
- a = min_val;
- if(fabs(b) < min_val)
- b = min_val;
- return (std::max)(fabs((a-b)/a), fabs((a-b)/b));
-}
-
-#if defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
-template <>
-inline double relative_error<double>(double a, double b)
-{
- BOOST_MATH_STD_USING
- //
- // On Mac OS X we evaluate "double" functions at "long double" precision,
- // but "long double" actually has a very slightly narrower range than "double"!
- // Therefore use the range of "long double" as our limits since results outside
- // that range may have been truncated to 0 or INF:
- //
- double min_val = (std::max)((double)tools::min_value<long double>(), tools::min_value<double>());
- double max_val = (std::min)((double)tools::max_value<long double>(), tools::max_value<double>());
-
- if((a != 0) && (b != 0))
- {
- // TODO: use isfinite:
- if(b > max_val)
- {
- if(a > max_val)
- return 0; // one infinity is as good as another!
- }
- // If the result is denormalised, treat all denorms as equivalent:
- if((a < min_val) && (a > 0))
- a = min_val;
- else if((a > -min_val) && (a < 0))
- a = -min_val;
- if((b < min_val) && (b > 0))
- b = min_val;
- else if((b > -min_val) && (b < 0))
- b = -min_val;
- return (std::max)(fabs((a-b)/a), fabs((a-b)/b));
- }
-
- // Handle special case where one or both are zero:
- if(min_val == 0)
- return fabs(a-b);
- if(fabs(a) < min_val)
- a = min_val;
- if(fabs(b) < min_val)
- b = min_val;
- return (std::max)(fabs((a-b)/a), fabs((a-b)/b));
-}
-#endif
-
-template <class T>
-void set_output_precision(T)
-{
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
- if(std::numeric_limits<T>::digits10)
- {
- std::cout << std::setprecision(std::numeric_limits<T>::digits10 + 2);
- }
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-}
-
-template <class Seq>
-void print_row(const Seq& row)
-{
- set_output_precision(row[0]);
- for(unsigned i = 0; i < row.size(); ++i)
- {
- if(i)
- std::cout << ", ";
- std::cout << row[i];
- }
- std::cout << std::endl;
-}
-
-//
-// Function test accepts an matrix of input values (probably a 2D boost::array)
-// and calls two functors for each row in the array - one calculates a value
-// to test, and one extracts the expected value from the array (or possibly
-// calculates it at high precision). The two functors are usually simple lambda
-// expressions.
-//
-template <class A, class F1, class F2>
-test_result<typename calculate_result_type<A>::value_type> test(const A& a, F1 test_func, F2 expect_func)
-{
- typedef typename A::value_type row_type;
- typedef typename row_type::value_type value_type;
-
- test_result<value_type> result;
-
- for(unsigned i = 0; i < a.size(); ++i)
- {
- const row_type& row = a[i];
- value_type point;
- try
- {
- point = test_func(row);
- }
- catch(const std::underflow_error&)
- {
- point = 0;
- }
- catch(const std::overflow_error&)
- {
- point = std::numeric_limits<value_type>::has_infinity ?
- std::numeric_limits<value_type>::infinity()
- : tools::max_value<value_type>();
- }
- catch(const std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- print_row(row);
- BOOST_ERROR("Unexpected exception.");
- // so we don't get further errors:
- point = expect_func(row);
- }
- value_type expected = expect_func(row);
- value_type err = relative_error(point, expected);
-#ifdef BOOST_INSTRUMENT
- if(err != 0)
- {
- std::cout << row[0] << " " << err;
- if(std::numeric_limits<value_type>::is_specialized)
- {
- std::cout << " (" << err / std::numeric_limits<value_type>::epsilon() << "eps)";
- }
- std::cout << std::endl;
- }
-#endif
- if(!(boost::math::isfinite)(point) && (boost::math::isfinite)(expected))
- {
- std::cout << "CAUTION: Found non-finite result, when a finite value was expected at entry " << i << "\n";
- std::cout << "Found: " << point << " Expected " << expected << " Error: " << err << std::endl;
- print_row(row);
- BOOST_ERROR("Unexpected non-finite result");
- }
- if(err > 0.5)
- {
- std::cout << "CAUTION: Gross error found at entry " << i << ".\n";
- std::cout << "Found: " << point << " Expected " << expected << " Error: " << err << std::endl;
- print_row(row);
- BOOST_ERROR("Gross error");
- }
- result.add(err);
- if((result.max)() == err)
- result.set_worst(i);
- }
- return result;
-}
-
-template <class Real, class A, class F1, class F2>
-test_result<Real> test_hetero(const A& a, F1 test_func, F2 expect_func)
-{
- typedef typename A::value_type row_type;
- typedef Real value_type;
-
- test_result<value_type> result;
-
- for(unsigned i = 0; i < a.size(); ++i)
- {
- const row_type& row = a[i];
- value_type point;
- try
- {
- point = test_func(row);
- }
- catch(const std::underflow_error&)
- {
- point = 0;
- }
- catch(const std::overflow_error&)
- {
- point = std::numeric_limits<value_type>::has_infinity ?
- std::numeric_limits<value_type>::infinity()
- : tools::max_value<value_type>();
- }
- catch(const std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- print_row(row);
- BOOST_ERROR("Unexpected exception.");
- // so we don't get further errors:
- point = expect_func(row);
- }
- value_type expected = expect_func(row);
- value_type err = relative_error(point, expected);
-#ifdef BOOST_INSTRUMENT
- if(err != 0)
- {
- std::cout << row[0] << " " << err;
- if(std::numeric_limits<value_type>::is_specialized)
- {
- std::cout << " (" << err / std::numeric_limits<value_type>::epsilon() << "eps)";
- }
- std::cout << std::endl;
- }
-#endif
- if(!(boost::math::isfinite)(point) && (boost::math::isfinite)(expected))
- {
- std::cout << "CAUTION: Found non-finite result, when a finite value was expected at entry " << i << "\n";
- std::cout << "Found: " << point << " Expected " << expected << " Error: " << err << std::endl;
- print_row(row);
- BOOST_ERROR("Unexpected non-finite result");
- }
- if(err > 0.5)
- {
- std::cout << "CAUTION: Gross error found at entry " << i << ".\n";
- std::cout << "Found: " << point << " Expected " << expected << " Error: " << err << std::endl;
- print_row(row);
- BOOST_ERROR("Gross error");
- }
- result.add(err);
- if((result.max)() == err)
- result.set_worst(i);
- }
- return result;
-}
-
-} // namespace tools
-} // namespace math
-} // namespace boost
-
-#endif
-
-
diff --git a/3party/boost/boost/math/tools/test_data.hpp b/3party/boost/boost/math/tools/test_data.hpp
deleted file mode 100644
index 56bae051b4..0000000000
--- a/3party/boost/boost/math/tools/test_data.hpp
+++ /dev/null
@@ -1,767 +0,0 @@
-// (C) Copyright John Maddock 2006.
-// 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_TOOLS_TEST_DATA_HPP
-#define BOOST_MATH_TOOLS_TEST_DATA_HPP
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-
-#include <boost/math/tools/config.hpp>
-#include <boost/assert.hpp>
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4127 4701 4512)
-# pragma warning(disable: 4130) // '==' : logical operation on address of string constant.
-#endif
-#include <boost/algorithm/string/trim.hpp>
-#include <boost/lexical_cast.hpp>
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-#include <boost/type_traits/is_floating_point.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/tr1/random.hpp>
-#include <boost/math/tools/tuple.hpp>
-#include <boost/math/tools/real_cast.hpp>
-
-#include <set>
-#include <vector>
-#include <iostream>
-
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4130) // '==' : logical operation on address of string constant.
-// Used as a warning with BOOST_ASSERT
-#endif
-
-namespace boost{ namespace math{ namespace tools{
-
-enum parameter_type
-{
- random_in_range = 0,
- periodic_in_range = 1,
- power_series = 2,
- dummy_param = 0x80
-};
-
-parameter_type operator | (parameter_type a, parameter_type b)
-{
- return static_cast<parameter_type>((int)a|(int)b);
-}
-parameter_type& operator |= (parameter_type& a, parameter_type b)
-{
- a = static_cast<parameter_type>(a|b);
- return a;
-}
-
-//
-// If type == random_in_range then
-// z1 and r2 are the endpoints of the half open range and n1 is the number of points.
-//
-// If type == periodic_in_range then
-// z1 and r2 are the endpoints of the half open range and n1 is the number of points.
-//
-// If type == power_series then
-// n1 and n2 are the endpoints of the exponents (closed range) and z1 is the basis.
-//
-// If type & dummy_param then this data is ignored and not stored in the output, it
-// is passed to the generator function however which can do with it as it sees fit.
-//
-template <class T>
-struct parameter_info
-{
- parameter_type type;
- T z1, z2;
- int n1, n2;
-};
-
-template <class T>
-inline parameter_info<T> make_random_param(T start_range, T end_range, int n_points)
-{
- parameter_info<T> result = { random_in_range, start_range, end_range, n_points, 0 };
- return result;
-}
-
-template <class T>
-inline parameter_info<T> make_periodic_param(T start_range, T end_range, int n_points)
-{
- parameter_info<T> result = { periodic_in_range, start_range, end_range, n_points, 0 };
- return result;
-}
-
-template <class T>
-inline parameter_info<T> make_power_param(T basis, int start_exponent, int end_exponent)
-{
- parameter_info<T> result = { power_series, basis, 0, start_exponent, end_exponent };
- return result;
-}
-
-namespace detail{
-
-template <class Seq, class Item, int N>
-inline void unpack_and_append_tuple(Seq& s,
- const Item& data,
- const boost::integral_constant<int, N>&,
- const boost::false_type&)
-{
- // termimation condition nothing to do here
-}
-
-template <class Seq, class Item, int N>
-inline void unpack_and_append_tuple(Seq& s,
- const Item& data,
- const boost::integral_constant<int, N>&,
- const boost::true_type&)
-{
- // extract the N'th element, append, and recurse:
- typedef typename Seq::value_type value_type;
- value_type val = boost::math::get<N>(data);
- s.push_back(val);
-
- typedef boost::integral_constant<int, N+1> next_value;
- typedef boost::integral_constant<bool, (boost::math::tuple_size<Item>::value > N+1)> terminate;
-
- unpack_and_append_tuple(s, data, next_value(), terminate());
-}
-
-template <class Seq, class Item>
-inline void unpack_and_append(Seq& s, const Item& data, const boost::true_type&)
-{
- s.push_back(data);
-}
-
-template <class Seq, class Item>
-inline void unpack_and_append(Seq& s, const Item& data, const boost::false_type&)
-{
- // Item had better be a tuple-like type or we've had it!!!!
- typedef boost::integral_constant<int, 0> next_value;
- typedef boost::integral_constant<bool, (boost::math::tuple_size<Item>::value > 0)> terminate;
-
- unpack_and_append_tuple(s, data, next_value(), terminate());
-}
-
-template <class Seq, class Item>
-inline void unpack_and_append(Seq& s, const Item& data)
-{
- typedef typename Seq::value_type value_type;
- unpack_and_append(s, data, ::boost::is_convertible<Item, value_type>());
-}
-
-} // detail
-
-template <class T>
-class test_data
-{
-public:
- typedef std::vector<T> row_type;
- typedef row_type value_type;
-private:
- typedef std::set<row_type> container_type;
-public:
- typedef typename container_type::reference reference;
- typedef typename container_type::const_reference const_reference;
- typedef typename container_type::iterator iterator;
- typedef typename container_type::const_iterator const_iterator;
- typedef typename container_type::difference_type difference_type;
- typedef typename container_type::size_type size_type;
-
- // creation:
- test_data(){}
- template <class F>
- test_data(F func, const parameter_info<T>& arg1)
- {
- insert(func, arg1);
- }
-
- // insertion:
- template <class F>
- test_data& insert(F func, const parameter_info<T>& arg1)
- {
- // generate data for single argument functor F
-
- typedef typename std::set<T>::const_iterator it_type;
-
- std::set<T> points;
- create_test_points(points, arg1);
- it_type a = points.begin();
- it_type b = points.end();
- row_type row;
- while(a != b)
- {
- if((arg1.type & dummy_param) == 0)
- row.push_back(*a);
- try{
- // domain_error exceptions from func are swallowed
- // and this data point is ignored:
- boost::math::tools::detail::unpack_and_append(row, func(*a));
- m_data.insert(row);
- }
- catch(const std::domain_error&){}
- row.clear();
- ++a;
- }
- return *this;
- }
-
- template <class F>
- test_data& insert(F func, const parameter_info<T>& arg1, const parameter_info<T>& arg2)
- {
- // generate data for 2-argument functor F
-
- typedef typename std::set<T>::const_iterator it_type;
-
- std::set<T> points1, points2;
- create_test_points(points1, arg1);
- create_test_points(points2, arg2);
- it_type a = points1.begin();
- it_type b = points1.end();
- row_type row;
- while(a != b)
- {
- it_type c = points2.begin();
- it_type d = points2.end();
- while(c != d)
- {
- if((arg1.type & dummy_param) == 0)
- row.push_back(*a);
- if((arg2.type & dummy_param) == 0)
- row.push_back(*c);
- try{
- // domain_error exceptions from func are swallowed
- // and this data point is ignored:
- detail::unpack_and_append(row, func(*a, *c));
- m_data.insert(row);
- }
- catch(const std::domain_error&){}
- row.clear();
- ++c;
- }
- ++a;
- }
- return *this;
- }
-
- template <class F>
- test_data& insert(F func, const parameter_info<T>& arg1, const parameter_info<T>& arg2, const parameter_info<T>& arg3)
- {
- // generate data for 3-argument functor F
-
- typedef typename std::set<T>::const_iterator it_type;
-
- std::set<T> points1, points2, points3;
- create_test_points(points1, arg1);
- create_test_points(points2, arg2);
- create_test_points(points3, arg3);
- it_type a = points1.begin();
- it_type b = points1.end();
- row_type row;
- while(a != b)
- {
- it_type c = points2.begin();
- it_type d = points2.end();
- while(c != d)
- {
- it_type e = points3.begin();
- it_type f = points3.end();
- while(e != f)
- {
- if((arg1.type & dummy_param) == 0)
- row.push_back(*a);
- if((arg2.type & dummy_param) == 0)
- row.push_back(*c);
- if((arg3.type & dummy_param) == 0)
- row.push_back(*e);
- try{
- // domain_error exceptions from func are swallowed
- // and this data point is ignored:
- detail::unpack_and_append(row, func(*a, *c, *e));
- m_data.insert(row);
- }
- catch(const std::domain_error&){}
- row.clear();
- ++e;
- }
- ++c;
- }
- ++a;
- }
- return *this;
- }
-
- void clear(){ m_data.clear(); }
-
- // access:
- iterator begin() { return m_data.begin(); }
- iterator end() { return m_data.end(); }
- const_iterator begin()const { return m_data.begin(); }
- const_iterator end()const { return m_data.end(); }
- bool operator==(const test_data& d)const{ return m_data == d.m_data; }
- bool operator!=(const test_data& d)const{ return m_data != d.m_data; }
- void swap(test_data& other){ m_data.swap(other.m_data); }
- size_type size()const{ return m_data.size(); }
- size_type max_size()const{ return m_data.max_size(); }
- bool empty()const{ return m_data.empty(); }
-
- bool operator < (const test_data& dat)const{ return m_data < dat.m_data; }
- bool operator <= (const test_data& dat)const{ return m_data <= dat.m_data; }
- bool operator > (const test_data& dat)const{ return m_data > dat.m_data; }
- bool operator >= (const test_data& dat)const{ return m_data >= dat.m_data; }
-
-private:
- void create_test_points(std::set<T>& points, const parameter_info<T>& arg1);
- std::set<row_type> m_data;
-
- static float extern_val;
- static float truncate_to_float(float const * pf);
- static float truncate_to_float(float c){ return truncate_to_float(&c); }
-};
-
-//
-// This code exists to bemuse the compiler's optimizer and force a
-// truncation to float-precision only:
-//
-template <class T>
-inline float test_data<T>::truncate_to_float(float const * pf)
-{
- BOOST_MATH_STD_USING
- int expon;
- float f = floor(ldexp(frexp(*pf, &expon), 22));
- f = ldexp(f, expon - 22);
- return f;
-
- //extern_val = *pf;
- //return *pf;
-}
-
-template <class T>
-float test_data<T>::extern_val = 0;
-
-template <class T>
-void test_data<T>::create_test_points(std::set<T>& points, const parameter_info<T>& arg1)
-{
- BOOST_MATH_STD_USING
- //
- // Generate a set of test points as requested, try and generate points
- // at only float precision: otherwise when testing float versions of functions
- // there will be a rounding error in our input values which throws off the results
- // (Garbage in garbage out etc).
- //
- switch(arg1.type & 0x7F)
- {
- case random_in_range:
- {
- BOOST_ASSERT(arg1.z1 < arg1.z2);
- BOOST_ASSERT(arg1.n1 > 0);
- typedef float random_type;
-
- std::tr1::mt19937 rnd;
- std::tr1::uniform_real<random_type> ur_a(real_cast<random_type>(arg1.z1), real_cast<random_type>(arg1.z2));
- std::tr1::variate_generator<std::tr1::mt19937, std::tr1::uniform_real<random_type> > gen(rnd, ur_a);
-
- for(int i = 0; i < arg1.n1; ++i)
- {
- random_type r = gen();
- points.insert(truncate_to_float(r));
- }
- }
- break;
- case periodic_in_range:
- {
- BOOST_ASSERT(arg1.z1 < arg1.z2);
- BOOST_ASSERT(arg1.n1 > 0);
- float interval = real_cast<float>((arg1.z2 - arg1.z1) / arg1.n1);
- T val = arg1.z1;
- while(val < arg1.z2)
- {
- points.insert(truncate_to_float(real_cast<float>(val)));
- val += interval;
- }
- }
- break;
- case power_series:
- {
- BOOST_ASSERT(arg1.n1 < arg1.n2);
-
- typedef float random_type;
- typedef typename boost::mpl::if_<
- ::boost::is_floating_point<T>,
- T, long double>::type power_type;
-
- std::tr1::mt19937 rnd;
- std::tr1::uniform_real<random_type> ur_a(1.0, 2.0);
- std::tr1::variate_generator<std::tr1::mt19937, std::tr1::uniform_real<random_type> > gen(rnd, ur_a);
-
- for(int power = arg1.n1; power <= arg1.n2; ++power)
- {
- random_type r = gen();
- power_type p = ldexp(static_cast<power_type>(r), power);
- points.insert(truncate_to_float(real_cast<float>(arg1.z1 + p)));
- }
- }
- break;
- default:
- BOOST_ASSERT(0 == "Invalid parameter_info object");
- // Assert will fail if get here.
- // Triggers warning 4130) // '==' : logical operation on address of string constant.
- }
-}
-
-//
-// Prompt a user for information on a parameter range:
-//
-template <class T>
-bool get_user_parameter_info(parameter_info<T>& info, const char* param_name)
-{
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4127)
-#endif
- std::string line;
- do{
- std::cout << "What kind of distribution do you require for parameter " << param_name << "?\n"
- "Choices are:\n"
- " r Random values in a half open range\n"
- " p Evenly spaced periodic values in a half open range\n"
- " e Exponential power series at a particular point: a + 2^b for some range of b\n"
- "[Default=r]";
-
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
-
- if(line == "r")
- {
- info.type = random_in_range;
- break;
- }
- else if(line == "p")
- {
- info.type = periodic_in_range;
- break;
- }
- else if(line == "e")
- {
- info.type = power_series;
- break;
- }
- else if(line == "")
- {
- info.type = random_in_range;
- break;
- }
- //
- // Ooops, not a valid input....
- //
- std::cout << "Sorry don't recognise \"" << line << "\" as a valid input\n"
- "do you want to try again [y/n]?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "n")
- return false;
- else if(line == "y")
- continue;
- std::cout << "Sorry don't recognise that either, giving up...\n\n";
- return false;
- }while(true);
-
- switch(info.type & ~dummy_param)
- {
- case random_in_range:
- case periodic_in_range:
- // get start and end points of range:
- do{
- std::cout << "Data will be in the half open range a <= x < b,\n"
- "enter value for the start point fo the range [default=0]:";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "")
- {
- info.z1 = 0;
- break;
- }
- try{
- info.z1 = boost::lexical_cast<T>(line);
- break;
- }
- catch(const boost::bad_lexical_cast&)
- {
- std::cout << "Sorry, that was not valid input, try again [y/n]?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "y")
- continue;
- if(line == "n")
- return false;
- std::cout << "Sorry don't recognise that either, giving up...\n\n";
- return false;
- }
- }while(true);
- do{
- std::cout << "Enter value for the end point fo the range [default=1]:";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "")
- {
- info.z2 = 1;
- }
- else
- {
- try
- {
- info.z2 = boost::lexical_cast<T>(line);
- }
- catch(const boost::bad_lexical_cast&)
- {
- std::cout << "Sorry, that was not valid input, try again [y/n]?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "y")
- continue;
- if(line == "n")
- return false;
- std::cout << "Sorry don't recognise that either, giving up...\n\n";
- return false;
- }
- }
- if(info.z1 >= info.z2)
- {
- std::cout << "The end point of the range was <= the start point\n"
- "try a different value for the endpoint [y/n]?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "y")
- continue;
- if(line == "n")
- return false;
- std::cout << "Sorry don't recognise that either, giving up...\n\n";
- return false;
- }
- break;
- }while(true);
- do{
- // get the number of points:
- std::cout << "How many data points do you want?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- try{
- info.n1 = boost::lexical_cast<int>(line);
- info.n2 = 0;
- if(info.n1 <= 0)
- {
- std::cout << "The number of points should be > 0\n"
- "try again [y/n]?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "y")
- continue;
- if(line == "n")
- return false;
- std::cout << "Sorry don't recognise that either, giving up...\n\n";
- return false;
- }
- break;
- }
- catch(const boost::bad_lexical_cast&)
- {
- std::cout << "Sorry, that was not valid input, try again [y/n]?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "y")
- continue;
- if(line == "n")
- return false;
- std::cout << "Sorry don't recognise that either, giving up...\n\n";
- return false;
- }
- }while(true);
- break;
- case power_series:
- // get start and end points of range:
- info.z2 = 0;
- do{
- std::cout << "Data will be in the form a + r*2^b\n"
- "for random value r,\n"
- "enter value for the point a [default=0]:";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "")
- {
- info.z1 = 0;
- break;
- }
- try{
- info.z1 = boost::lexical_cast<T>(line);
- break;
- }
- catch(const boost::bad_lexical_cast&)
- {
- std::cout << "Sorry, that was not valid input, try again [y/n]?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "y")
- continue;
- if(line == "n")
- return false;
- std::cout << "Sorry don't recognise that either, giving up...\n\n";
- return false;
- }
- }while(true);
-
- do{
- std::cout << "Data will be in the form a + r*2^b\n"
- "for random value r,\n"
- "enter value for the starting exponent b:";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- try{
- info.n1 = boost::lexical_cast<int>(line);
- break;
- }
- catch(const boost::bad_lexical_cast&)
- {
- std::cout << "Sorry, that was not valid input, try again [y/n]?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "y")
- continue;
- if(line == "n")
- return false;
- std::cout << "Sorry don't recognise that either, giving up...\n\n";
- return false;
- }
- }while(true);
-
- do{
- std::cout << "Data will be in the form a + r*2^b\n"
- "for random value r,\n"
- "enter value for the ending exponent b:";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- try{
- info.n2 = boost::lexical_cast<int>(line);
- break;
- }
- catch(const boost::bad_lexical_cast&)
- {
- std::cout << "Sorry, that was not valid input, try again [y/n]?";
- std::getline(std::cin, line);
- boost::algorithm::trim(line);
- if(line == "y")
- continue;
- if(line == "n")
- return false;
- std::cout << "Sorry don't recognise that either, giving up...\n\n";
- return false;
- }
- }while(true);
-
- break;
- default:
- BOOST_ASSERT(0); // should never get here!!
- }
-
- return true;
-#ifdef BOOST_MSVC
-# pragma warning(pop)
-#endif
-}
-
-template <class charT, class traits, class T>
-inline std::basic_ostream<charT, traits>& write_csv(std::basic_ostream<charT, traits>& os,
- const test_data<T>& data)
-{
- const charT defarg[] = { ',', ' ', '\0' };
- return write_csv(os, data, defarg);
-}
-
-template <class charT, class traits, class T>
-std::basic_ostream<charT, traits>& write_csv(std::basic_ostream<charT, traits>& os,
- const test_data<T>& data,
- const charT* separator)
-{
- typedef typename test_data<T>::const_iterator it_type;
- typedef typename test_data<T>::value_type value_type;
- typedef typename value_type::const_iterator value_type_iterator;
- it_type a, b;
- a = data.begin();
- b = data.end();
- while(a != b)
- {
- value_type_iterator x, y;
- bool sep = false;
- x = a->begin();
- y = a->end();
- while(x != y)
- {
- if(sep)
- os << separator;
- os << *x;
- sep = true;
- ++x;
- }
- os << std::endl;
- ++a;
- }
- return os;
-}
-
-template <class T>
-std::ostream& write_code(std::ostream& os,
- const test_data<T>& data,
- const char* name)
-{
- typedef typename test_data<T>::const_iterator it_type;
- typedef typename test_data<T>::value_type value_type;
- typedef typename value_type::const_iterator value_type_iterator;
-
- BOOST_ASSERT(os.good());
-
- it_type a, b;
- a = data.begin();
- b = data.end();
- if(a == b)
- return os;
-
- os << "#ifndef SC_\n# define SC_(x) static_cast<T>(BOOST_JOIN(x, L))\n#endif\n"
- " static const boost::array<boost::array<T, "
- << a->size() << ">, " << data.size() << "> " << name << " = {{\n";
-
- while(a != b)
- {
- if(a != data.begin())
- os << ", \n";
-
- value_type_iterator x, y;
- x = a->begin();
- y = a->end();
- os << " { ";
- while(x != y)
- {
- if(x != a->begin())
- os << ", ";
- os << "SC_(" << *x << ")";
- ++x;
- }
- os << " }";
- ++a;
- }
- os << "\n }};\n//#undef SC_\n\n";
- return os;
-}
-
-} // namespace tools
-} // namespace math
-} // namespace boost
-
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-
-
-#endif // BOOST_MATH_TOOLS_TEST_DATA_HPP
-
-
diff --git a/3party/boost/boost/math/tools/toms748_solve.hpp b/3party/boost/boost/math/tools/toms748_solve.hpp
index 1310ff29a6..9b5ec997e3 100644
--- a/3party/boost/boost/math/tools/toms748_solve.hpp
+++ b/3party/boost/boost/math/tools/toms748_solve.hpp
@@ -298,9 +298,9 @@ std::pair<T, T> toms748_solve(F f, const T& ax, const T& bx, const T& fax, const
a = ax;
b = bx;
if(a >= b)
- policies::raise_domain_error(
+ return boost::math::detail::pair_from_single(policies::raise_domain_error(
function,
- "Parameters a and b out of order: a=%1%", a, pol);
+ "Parameters a and b out of order: a=%1%", a, pol));
fa = fax;
fb = fbx;
@@ -315,9 +315,9 @@ std::pair<T, T> toms748_solve(F f, const T& ax, const T& bx, const T& fax, const
}
if(boost::math::sign(fa) * boost::math::sign(fb) > 0)
- policies::raise_domain_error(
+ return boost::math::detail::pair_from_single(policies::raise_domain_error(
function,
- "Parameters a and b do not bracket the root: a=%1%", a, pol);
+ "Parameters a and b do not bracket the root: a=%1%", a, pol));
// dummy value for fd, e and fe:
fe = e = fd = 1e5F;
@@ -502,7 +502,7 @@ std::pair<T, T> bracket_and_solve_root(F f, const T& guess, T factor, bool risin
while((boost::math::sign)(fb) == (boost::math::sign)(fa))
{
if(count == 0)
- policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", b, pol);
+ return boost::math::detail::pair_from_single(policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", b, pol));
//
// Heuristic: every 20 iterations we double the growth factor in case the
// initial guess was *really* bad !
@@ -536,7 +536,7 @@ std::pair<T, T> bracket_and_solve_root(F f, const T& guess, T factor, bool risin
return a > 0 ? std::make_pair(T(0), T(a)) : std::make_pair(T(a), T(0));
}
if(count == 0)
- policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", a, pol);
+ return boost::math::detail::pair_from_single(policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", a, pol));
//
// Heuristic: every 20 iterations we double the growth factor in case the
// initial guess was *really* bad !
diff --git a/3party/boost/boost/math/tools/tuple.hpp b/3party/boost/boost/math/tools/tuple.hpp
index 2f297360a2..0ae778cbef 100644
--- a/3party/boost/boost/math/tools/tuple.hpp
+++ b/3party/boost/boost/math/tools/tuple.hpp
@@ -7,8 +7,6 @@
# define BOOST_MATH_TUPLE_HPP_INCLUDED
# include <boost/config.hpp>
-#include <boost/tr1/detail/config.hpp> // for BOOST_HAS_TR1_TUPLE
-
#ifndef BOOST_NO_CXX11_HDR_TUPLE
#include <tuple>
@@ -29,27 +27,7 @@ using ::std::tuple_element;
}}
-#elif defined(BOOST_HAS_TR1_TUPLE)
-
-#include <boost/tr1/tuple.hpp>
-
-namespace boost{ namespace math{
-
-using ::std::tr1::tuple;
-
-// [6.1.3.2] Tuple creation functions
-using ::std::tr1::ignore;
-using ::std::tr1::make_tuple;
-using ::std::tr1::tie;
-using ::std::tr1::get;
-
-// [6.1.3.3] Tuple helper classes
-using ::std::tr1::tuple_size;
-using ::std::tr1::tuple_element;
-
-}}
-
-#elif (defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)) || (defined(_MSC_VER) && (_MSC_VER < 1310)) || defined(__IBMCPP__)
+#elif (defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)) || defined(__IBMCPP__)
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>
diff --git a/3party/boost/boost/math/tools/user.hpp b/3party/boost/boost/math/tools/user.hpp
index c1bdaf7d87..08a7e53d9e 100644
--- a/3party/boost/boost/math/tools/user.hpp
+++ b/3party/boost/boost/math/tools/user.hpp
@@ -91,6 +91,14 @@
// Maximum root finding steps permitted:
//
// define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 200
+//
+// Enable use of __float128 in numeric constants:
+//
+// #define BOOST_MATH_USE_FLOAT128
+//
+// Disable use of __float128 in numeric_constants even if the compiler looks to support it:
+//
+// #define BOOST_MATH_DISABLE_FLOAT128
#endif // BOOST_MATH_TOOLS_USER_HPP
diff --git a/3party/boost/boost/memory_order.hpp b/3party/boost/boost/memory_order.hpp
index 4945af623b..fbe9034429 100644
--- a/3party/boost/boost/memory_order.hpp
+++ b/3party/boost/boost/memory_order.hpp
@@ -37,15 +37,19 @@ namespace boost
//
// if( mo & ( memory_order_acquire | memory_order_consume ) ) { ...fence... }
//
+// The values are also in the order of increasing "strength"
+// of the fences so that success/failure orders can be checked
+// efficiently in compare_exchange methods.
+//
enum memory_order
{
memory_order_relaxed = 0,
- memory_order_acquire = 1,
- memory_order_release = 2,
- memory_order_acq_rel = 3, // acquire | release
- memory_order_seq_cst = 7, // acq_rel | 4
- memory_order_consume = 8
+ memory_order_consume = 1,
+ memory_order_acquire = 2,
+ memory_order_release = 4,
+ memory_order_acq_rel = 6, // acquire | release
+ memory_order_seq_cst = 14 // acq_rel | 8
};
} // namespace boost
diff --git a/3party/boost/boost/move/algorithm.hpp b/3party/boost/boost/move/algorithm.hpp
index 36a46becfa..43a81c3756 100644
--- a/3party/boost/boost/move/algorithm.hpp
+++ b/3party/boost/boost/move/algorithm.hpp
@@ -18,7 +18,6 @@
#include <boost/move/utility.hpp>
#include <boost/move/iterator.hpp>
-#include <boost/move/algorithm.hpp>
#include <boost/detail/no_exceptions_support.hpp>
#include <algorithm> //copy, copy_backward
diff --git a/3party/boost/boost/move/core.hpp b/3party/boost/boost/move/core.hpp
index d939f036d4..0efa2af6d0 100644
--- a/3party/boost/boost/move/core.hpp
+++ b/3party/boost/boost/move/core.hpp
@@ -18,17 +18,24 @@
#include <boost/move/detail/config_begin.hpp>
+//boost_move_no_copy_constructor_or_assign typedef
+//used to detect noncopyable types for other Boost libraries.
#ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
#define BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE) \
private:\
TYPE(TYPE &);\
TYPE& operator=(TYPE &);\
+ public:\
+ typedef int boost_move_no_copy_constructor_or_assign; \
+ private:\
//
#else
#define BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE) \
public:\
TYPE(TYPE const &) = delete;\
TYPE& operator=(TYPE const &) = delete;\
+ public:\
+ typedef int boost_move_no_copy_constructor_or_assign; \
private:\
//
#endif //BOOST_NO_CXX11_DELETED_FUNCTIONS
@@ -161,6 +168,46 @@
const ::boost::rv< TYPE >& \
//
+ namespace boost {
+ namespace move_detail {
+
+ template <class Ret, class T>
+ inline typename ::boost::move_detail::enable_if_c
+ < ::boost::move_detail::is_lvalue_reference<Ret>::value ||
+ !::boost::has_move_emulation_enabled<T>::value
+ , T&>::type
+ move_return(T& x) BOOST_NOEXCEPT
+ {
+ return x;
+ }
+
+ template <class Ret, class T>
+ inline typename ::boost::move_detail::enable_if_c
+ < !::boost::move_detail::is_lvalue_reference<Ret>::value &&
+ ::boost::has_move_emulation_enabled<T>::value
+ , ::boost::rv<T>&>::type
+ move_return(T& x) BOOST_NOEXCEPT
+ {
+ return *static_cast< ::boost::rv<T>* >(::boost::move_detail::addressof(x));
+ }
+
+ template <class Ret, class T>
+ inline typename ::boost::move_detail::enable_if_c
+ < !::boost::move_detail::is_lvalue_reference<Ret>::value &&
+ ::boost::has_move_emulation_enabled<T>::value
+ , ::boost::rv<T>&>::type
+ move_return(::boost::rv<T>& x) BOOST_NOEXCEPT
+ {
+ return x;
+ }
+
+ } //namespace move_detail {
+ } //namespace boost {
+
+ #define BOOST_MOVE_RET(RET_TYPE, REF)\
+ boost::move_detail::move_return< RET_TYPE >(REF)
+ //
+
//////////////////////////////////////////////////////////////////////////////
//
// BOOST_MOVABLE_BUT_NOT_COPYABLE
@@ -213,9 +260,12 @@
#elif defined(_MSC_VER) && (_MSC_VER == 1600)
//Standard rvalue binding rules but with some bugs
#define BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG
+ #define BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG
//Use standard library for MSVC to avoid namespace issues as
//some move calls in the STL are not fully qualified.
//#define BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ #elif defined(_MSC_VER) && (_MSC_VER == 1700)
+ #define BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG
#endif
#endif
@@ -262,8 +312,8 @@
//!This macro is used to achieve portable syntax in move
//!constructors and assignments for template classes marked as
//!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE.
- //!As macros have problems with comma-separatd template arguments,
- //!the template argument must be preceded with BOOST_RV_REF_START
+ //!As macros have problems with comma-separated template arguments,
+ //!the template argument must be preceded with BOOST_RV_REF_BEG
//!and ended with BOOST_RV_REF_END
#define BOOST_RV_REF_BEG\
\
@@ -272,8 +322,8 @@
//!This macro is used to achieve portable syntax in move
//!constructors and assignments for template classes marked as
//!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE.
- //!As macros have problems with comma-separatd template arguments,
- //!the template argument must be preceded with BOOST_RV_REF_START
+ //!As macros have problems with comma-separated template arguments,
+ //!the template argument must be preceded with BOOST_RV_REF_BEG
//!and ended with BOOST_RV_REF_END
#define BOOST_RV_REF_END\
&& \
@@ -291,7 +341,6 @@
//
#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
- /// @cond
#define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\
TYPE<ARG1, ARG2> && \
@@ -321,10 +370,69 @@
const TYPE & \
//
- /// @endcond
#endif //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+ #if !defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+ //!This macro is used to achieve portable move return semantics.
+ //!The Standard allows implicit move returns when the object to be returned
+ //!is designated by an lvalue and:
+ //! - The criteria for elision of a copy operation are met OR
+ //! - The criteria would be met save for the fact that the source object is a function parameter
+ //!
+ //!For C++11 conforming compilers this macros only yields to REF:
+ //! <code>return BOOST_MOVE_RET(RET_TYPE, REF);</code> -> <code>return REF;</code>
+ //!
+ //!For compilers without rvalue references
+ //!this macro does an explicit move if the move emulation is activated
+ //!and the return type (RET_TYPE) is not a reference.
+ //!
+ //!For non-conforming compilers with rvalue references like Visual 2010 & 2012,
+ //!an explicit move is performed if RET_TYPE is not a reference.
+ //!
+ //! <b>Caution</b>: When using this macro in a non-conforming or C++03
+ //!compilers, a move will be performed even if the C++11 standard does not allow it
+ //!(e.g. returning a static variable). The user is responsible for using this macro
+ //!only used to return local objects that met C++11 criteria.
+ #define BOOST_MOVE_RET(RET_TYPE, REF)\
+ (REF)
+ //
+
+ #else //!defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+ #include <boost/move/detail/meta_utils.hpp>
+
+ namespace boost {
+ namespace move_detail {
+
+ template <class Ret, class T>
+ inline typename ::boost::move_detail::enable_if_c
+ < ::boost::move_detail::is_lvalue_reference<Ret>::value
+ , T&>::type
+ move_return(T& x) BOOST_NOEXCEPT
+ {
+ return x;
+ }
+
+ template <class Ret, class T>
+ inline typename ::boost::move_detail::enable_if_c
+ < !::boost::move_detail::is_lvalue_reference<Ret>::value
+ , Ret && >::type
+ move_return(T&& t) BOOST_NOEXCEPT
+ {
+ return static_cast< Ret&& >(t);
+ }
+
+ } //namespace move_detail {
+ } //namespace boost {
+
+ #define BOOST_MOVE_RET(RET_TYPE, REF)\
+ boost::move_detail::move_return< RET_TYPE >(REF)
+ //
+
+ #endif //!defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
#endif //BOOST_NO_CXX11_RVALUE_REFERENCES
#include <boost/move/detail/config_end.hpp>
diff --git a/3party/boost/boost/move/detail/config_end.hpp b/3party/boost/boost/move/detail/config_end.hpp
index c43bce0e6c..5f83231779 100644
--- a/3party/boost/boost/move/detail/config_end.hpp
+++ b/3party/boost/boost/move/detail/config_end.hpp
@@ -9,11 +9,11 @@
//////////////////////////////////////////////////////////////////////////////
#if defined BOOST_MSVC
#pragma warning (pop)
- #ifdef BOOST_MOVE_DETAIL_CRT_SECURE_NO_DEPRECATE
- #undef BOOST_MOVE_DETAIL_CRT_SECURE_NO_DEPRECATE
+ #ifdef BOOST_MOVE_CRT_SECURE_NO_DEPRECATE
+ #undef BOOST_MOVE_CRT_SECURE_NO_DEPRECATE
#undef _CRT_SECURE_NO_DEPRECATE
#endif
- #ifndef BOOST_MOVE_SCL_SECURE_NO_WARNINGS
+ #ifdef BOOST_MOVE_SCL_SECURE_NO_WARNINGS
#undef BOOST_MOVE_SCL_SECURE_NO_WARNINGS
#undef _SCL_SECURE_NO_WARNINGS
#endif
diff --git a/3party/boost/boost/move/detail/meta_utils.hpp b/3party/boost/boost/move/detail/meta_utils.hpp
index 2bdb654aa4..0da3c68451 100644
--- a/3party/boost/boost/move/detail/meta_utils.hpp
+++ b/3party/boost/boost/move/detail/meta_utils.hpp
@@ -72,19 +72,32 @@ struct identity
typedef T type;
};
-//is_convertible
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+
+//use intrinsic since in MSVC
+//overaligned types can't go through ellipsis
+template <class T, class U>
+struct is_convertible
+{
+ static const bool value = __is_convertible_to(T, U);
+};
+
+#else
+
template <class T, class U>
class is_convertible
{
typedef char true_t;
class false_t { char dummy[2]; };
- static true_t dispatch(U);
static false_t dispatch(...);
+ static true_t dispatch(U);
static T &trigger();
public:
- enum { value = sizeof(dispatch(trigger())) == sizeof(true_t) };
+ static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);
};
+#endif
+
//and_ not_
template <typename Condition1, typename Condition2, typename Condition3 = integral_constant<bool, true> >
struct and_
diff --git a/3party/boost/boost/move/detail/move_helpers.hpp b/3party/boost/boost/move/detail/move_helpers.hpp
index ddfea9bcd5..ed6f3d534e 100644
--- a/3party/boost/boost/move/detail/move_helpers.hpp
+++ b/3party/boost/boost/move/detail/move_helpers.hpp
@@ -19,6 +19,8 @@
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || (defined(_MSC_VER) && (_MSC_VER == 1600))
#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_convertible.hpp>
#include <boost/utility/enable_if.hpp>
#endif
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
@@ -28,6 +30,7 @@
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
struct not_a_type;
+struct not_a_type2;
#define BOOST_MOVE_CATCH_CONST(U) \
typename ::boost::mpl::if_< ::boost::is_class<U>, BOOST_CATCH_CONST_RLVALUE(U), const U &>::type
#define BOOST_MOVE_CATCH_RVALUE(U)\
@@ -40,7 +43,6 @@ struct not_a_type;
#endif
#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
-
#define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\
{ return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\
@@ -72,7 +74,7 @@ struct not_a_type;
return FWD_FUNCTION(::boost::move(t));\
}\
//
-
+// ::boost::is_convertible<BOOST_MOVE_TEMPL_PARAM, TYPE>::value &&
#elif (defined(_MSC_VER) && (_MSC_VER == 1600))
#define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
@@ -108,7 +110,7 @@ struct not_a_type;
#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
-#define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1)\
+#define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\
{ return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\
\
@@ -119,8 +121,7 @@ struct not_a_type;
{ return FWD_FUNCTION(arg1, const_cast<const TYPE &>(x)); }\
\
template<class BOOST_MOVE_TEMPL_PARAM>\
- typename ::boost::enable_if_c\
- < ::boost::is_class<TYPE>::value &&\
+ typename ::boost::enable_if_c<\
::boost::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>::value &&\
!::boost::has_move_emulation_enabled<BOOST_MOVE_TEMPL_PARAM>::value\
, RETURN_VALUE >::type\
@@ -128,10 +129,10 @@ struct not_a_type;
{ return FWD_FUNCTION(arg1, u); }\
\
template<class BOOST_MOVE_TEMPL_PARAM>\
- typename ::boost::enable_if_c\
- < (!::boost::is_class<BOOST_MOVE_TEMPL_PARAM>::value || \
- !::boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM>::value) && \
- !::boost::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>::value \
+ typename ::boost::enable_if_c<\
+ !::boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM>::value && \
+ !::boost::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>::value && \
+ !::boost::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO>::value \
, RETURN_VALUE >::type\
PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\
{\
@@ -142,7 +143,7 @@ struct not_a_type;
#elif (defined(_MSC_VER) && (_MSC_VER == 1600))
-#define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1)\
+#define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\
{ return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\
\
@@ -151,7 +152,8 @@ struct not_a_type;
\
template<class BOOST_MOVE_TEMPL_PARAM>\
typename ::boost::enable_if_c\
- < !::boost::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>::value\
+ < !::boost::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>::value && \
+ !::boost::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO>::value \
, RETURN_VALUE >::type\
PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\
{\
@@ -162,7 +164,7 @@ struct not_a_type;
#else
-#define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1)\
+#define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\
{ return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\
\
diff --git a/3party/boost/boost/move/traits.hpp b/3party/boost/boost/move/traits.hpp
index e5c84447e2..ced1cdd905 100644
--- a/3party/boost/boost/move/traits.hpp
+++ b/3party/boost/boost/move/traits.hpp
@@ -16,6 +16,8 @@
#include <boost/move/detail/config_begin.hpp>
#include <boost/type_traits/has_trivial_destructor.hpp>
+#include <boost/type_traits/is_nothrow_move_constructible.hpp>
+#include <boost/type_traits/is_nothrow_move_assignable.hpp>
#include <boost/move/detail/meta_utils.hpp>
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
@@ -38,11 +40,17 @@ struct has_trivial_destructor_after_move
: ::boost::has_trivial_destructor<T>
{};
-//! By default this traits returns false. Classes with non-throwing move constructor
+//! By default this traits returns
+//! <pre>boost::is_nothrow_move_constructible<T>::value && boost::is_nothrow_move_assignable<T>::value </pre>.
+//! Classes with non-throwing move constructor
//! and assignment can specialize this trait to obtain some performance improvements.
template <class T>
struct has_nothrow_move
- : public ::boost::move_detail::integral_constant<bool, false>
+ : public ::boost::move_detail::integral_constant
+ < bool
+ , boost::is_nothrow_move_constructible<T>::value &&
+ boost::is_nothrow_move_assignable<T>::value
+ >
{};
namespace move_detail {
diff --git a/3party/boost/boost/move/utility.hpp b/3party/boost/boost/move/utility.hpp
index fb2ec69c15..964500eb4b 100644
--- a/3party/boost/boost/move/utility.hpp
+++ b/3party/boost/boost/move/utility.hpp
@@ -37,7 +37,7 @@
template <class T>
inline typename ::boost::move_detail::enable_if_c
< enable_move_utility_emulation<T>::value && !has_move_emulation_enabled<T>::value, T&>::type
- move(T& x)
+ move(T& x) BOOST_NOEXCEPT
{
return x;
}
@@ -45,7 +45,7 @@
template <class T>
inline typename ::boost::move_detail::enable_if_c
< enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value, rv<T>&>::type
- move(T& x)
+ move(T& x) BOOST_NOEXCEPT
{
return *static_cast<rv<T>* >(::boost::move_detail::addressof(x));
}
@@ -53,7 +53,7 @@
template <class T>
inline typename ::boost::move_detail::enable_if_c
< enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value, rv<T>&>::type
- move(rv<T>& x)
+ move(rv<T>& x) BOOST_NOEXCEPT
{
return x;
}
@@ -67,7 +67,7 @@
template <class T>
inline typename ::boost::move_detail::enable_if_c
< enable_move_utility_emulation<T>::value && ::boost::move_detail::is_rv<T>::value, T &>::type
- forward(const typename ::boost::move_detail::identity<T>::type &x)
+ forward(const typename ::boost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT
{
return const_cast<T&>(x);
}
@@ -75,7 +75,7 @@
template <class T>
inline typename ::boost::move_detail::enable_if_c
< enable_move_utility_emulation<T>::value && !::boost::move_detail::is_rv<T>::value, const T &>::type
- forward(const typename ::boost::move_detail::identity<T>::type &x)
+ forward(const typename ::boost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT
{
return x;
}
@@ -123,19 +123,19 @@
//! in compilers with rvalue references. For other compilers converts T & into
//! <i>::boost::rv<T> &</i> so that move emulation is activated.
template <class T>
- rvalue_reference move (input_reference);
+ rvalue_reference move(input_reference) noexcept;
#elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
//Old move approach, lvalues could bind to rvalue references
template <class T>
- inline typename remove_reference<T>::type && move(T&& t)
+ inline typename remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT
{ return t; }
#else //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
template <class T>
- inline typename remove_reference<T>::type && move(T&& t)
+ inline typename remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT
{ return static_cast<typename remove_reference<T>::type &&>(t); }
#endif //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
@@ -159,13 +159,13 @@
//! ::boost::rv<T> &
//!
//! * Else, output_reference is equal to input_reference.
- template <class T> output_reference forward(input_reference);
+ template <class T> output_reference forward(input_reference) noexcept;
#elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
//Old move approach, lvalues could bind to rvalue references
template <class T>
- inline T&& forward (typename ::boost::move_detail::identity<T>::type&& t)
+ inline T&& forward(typename ::boost::move_detail::identity<T>::type&& t) BOOST_NOEXCEPT
{ return t; }
#else //Old move
@@ -178,7 +178,7 @@
move_detail::is_lvalue_reference<T>::value ? move_detail::is_lvalue_reference<U>::value : true>::type * = 0/*
, typename ::boost::move_detail::enable_if_c<
move_detail::is_convertible
- <typename remove_reference<U>::type*, typename remove_reference<T>::type*>::value>::type * = 0*/)
+ <typename remove_reference<U>::type*, typename remove_reference<T>::type*>::value>::type * = 0*/) BOOST_NOEXCEPT
{ return static_cast<T&&>(t); }
#endif //BOOST_MOVE_DOXYGEN_INVOKED
diff --git a/3party/boost/boost/mpi/collectives.hpp b/3party/boost/boost/mpi/collectives.hpp
index 76d6bda3ae..e74fd72bb0 100644
--- a/3party/boost/boost/mpi/collectives.hpp
+++ b/3party/boost/boost/mpi/collectives.hpp
@@ -19,10 +19,10 @@
#define BOOST_MPI_COLLECTIVES_HPP
#include <boost/mpi/communicator.hpp>
+#include <boost/mpi/inplace.hpp>
#include <vector>
namespace boost { namespace mpi {
-
/**
* @brief Gather the values stored at every process into vectors of
* values from each process.
@@ -94,12 +94,15 @@ all_gather(const communicator& comm, const T* in_values, int n, T* out_values);
*
* @param comm The communicator over which the reduction will
* occur.
- *
- * @param in_value The local value to be combined with the local
+ * @param value The local value to be combined with the local
* values of every other process. For reducing arrays, @c in_values
* is a pointer to the local values to be reduced and @c n is the
* number of values to reduce. See @c reduce for more information.
*
+ * If wrapped in a @c inplace_t object, combine the usage of both
+ * input and $c out_value and the local value will be overwritten
+ * (a convenience function @c inplace is provided for the wrapping).
+ *
* @param out_value Will receive the result of the reduction
* operation. If this parameter is omitted, the outgoing value will
* instead be returned.
@@ -116,26 +119,39 @@ all_gather(const communicator& comm, const T* in_values, int n, T* out_values);
* gives the implementation additional lattitude to optimize the
* reduction operation.
*
+ * @param n Indicated the size of the buffers of array type.
* @returns If no @p out_value parameter is supplied, returns the
* result of the reduction operation.
*/
template<typename T, typename Op>
void
-all_reduce(const communicator& comm, const T& in_value, T& out_value, Op op);
-
+all_reduce(const communicator& comm, const T* value, int n, T* out_value,
+ Op op);
+/**
+ * \overload
+ */
+template<typename T, typename Op>
+void
+all_reduce(const communicator& comm, const T& value, T& out_value, Op op);
/**
* \overload
*/
template<typename T, typename Op>
-T all_reduce(const communicator& comm, const T& in_value, Op op);
+T all_reduce(const communicator& comm, const T& value, Op op);
/**
* \overload
*/
template<typename T, typename Op>
void
-all_reduce(const communicator& comm, const T* in_values, int n, T* out_values,
+all_reduce(const communicator& comm, inplace_t<T*> value, int n,
Op op);
+/**
+ * \overload
+ */
+template<typename T, typename Op>
+void
+all_reduce(const communicator& comm, inplace_t<T> value, Op op);
/**
* @brief Send data from every process to every other process.
diff --git a/3party/boost/boost/mpi/collectives/all_reduce.hpp b/3party/boost/boost/mpi/collectives/all_reduce.hpp
index 26b8fc9cd1..06e116a65e 100644
--- a/3party/boost/boost/mpi/collectives/all_reduce.hpp
+++ b/3party/boost/boost/mpi/collectives/all_reduce.hpp
@@ -12,12 +12,15 @@
#ifndef BOOST_MPI_ALL_REDUCE_HPP
#define BOOST_MPI_ALL_REDUCE_HPP
+#include <vector>
+
+#include <boost/mpi/inplace.hpp>
+
// All-reduce falls back to reduce() + broadcast() in some cases.
#include <boost/mpi/collectives/broadcast.hpp>
#include <boost/mpi/collectives/reduce.hpp>
namespace boost { namespace mpi {
-
namespace detail {
/**********************************************************************
* Simple reduction with MPI_Allreduce *
@@ -67,7 +70,17 @@ namespace detail {
T* out_values, Op op, mpl::false_ /*is_mpi_op*/,
mpl::false_ /*is_mpi_datatype*/)
{
- reduce(comm, in_values, n, out_values, op, 0);
+ if (in_values == MPI_IN_PLACE) {
+ // if in_values matches the in place tag, then the output
+ // buffer actually contains the input data.
+ // But we can just go back to the out of place
+ // implementation in this case.
+ // it's not clear how/if we can avoid the copy.
+ std::vector<T> tmp_in( out_values, out_values + n);
+ reduce(comm, &(tmp_in[0]), n, out_values, op, 0);
+ } else {
+ reduce(comm, in_values, n, out_values, op, 0);
+ }
broadcast(comm, out_values, n, 0);
}
} // end namespace detail
@@ -83,6 +96,20 @@ all_reduce(const communicator& comm, const T* in_values, int n, T* out_values,
template<typename T, typename Op>
inline void
+all_reduce(const communicator& comm, inplace_t<T*> inout_values, int n, Op op)
+{
+ all_reduce(comm, static_cast<const T*>(MPI_IN_PLACE), n, inout_values.buffer, op);
+}
+
+template<typename T, typename Op>
+inline void
+all_reduce(const communicator& comm, inplace_t<T> inout_values, Op op)
+{
+ all_reduce(comm, static_cast<const T*>(MPI_IN_PLACE), 1, &(inout_values.buffer), op);
+}
+
+template<typename T, typename Op>
+inline void
all_reduce(const communicator& comm, const T& in_value, T& out_value, Op op)
{
detail::all_reduce_impl(comm, &in_value, 1, &out_value, op,
diff --git a/3party/boost/boost/mpi/collectives/gather.hpp b/3party/boost/boost/mpi/collectives/gather.hpp
index 4f39392a84..70dfd65313 100644
--- a/3party/boost/boost/mpi/collectives/gather.hpp
+++ b/3party/boost/boost/mpi/collectives/gather.hpp
@@ -131,7 +131,12 @@ void
gather(const communicator& comm, const T* in_values, int n,
std::vector<T>& out_values, int root)
{
- ::boost::mpi::gather(comm, in_values, n, &out_values[0], root);
+ if (comm.rank() == root) {
+ out_values.resize(comm.size() * n);
+ ::boost::mpi::gather(comm, in_values, n, &out_values[0], root);
+ }
+ else
+ ::boost::mpi::gather(comm, in_values, n, root);
}
template<typename T>
diff --git a/3party/boost/boost/mpi/collectives/reduce.hpp b/3party/boost/boost/mpi/collectives/reduce.hpp
index f1dee8230e..8fc2fe6eb6 100644
--- a/3party/boost/boost/mpi/collectives/reduce.hpp
+++ b/3party/boost/boost/mpi/collectives/reduce.hpp
@@ -330,6 +330,25 @@ reduce(const communicator& comm, const T* in_values, int n, Op op, int root)
is_mpi_op<Op, T>(), is_mpi_datatype<T>());
}
+template<typename T, typename Op>
+void
+reduce(const communicator & comm, std::vector<T> const & in_values, Op op,
+ int root)
+{
+ reduce(comm, &in_values.front(), in_values.size(), op, root);
+}
+
+template<typename T, typename Op>
+void
+reduce(const communicator & comm, std::vector<T> const & in_values,
+ std::vector<T> & out_values, Op op, int root)
+{
+ out_values.resize(in_values.size());
+ reduce(comm, &in_values.front(), in_values.size(), &out_values.front(), op,
+ root);
+}
+
+
template<typename T, typename Op>
void
reduce(const communicator& comm, const T& in_value, T& out_value, Op op,
diff --git a/3party/boost/boost/mpi/communicator.hpp b/3party/boost/boost/mpi/communicator.hpp
index e450e2a54b..65de3a47f2 100644
--- a/3party/boost/boost/mpi/communicator.hpp
+++ b/3party/boost/boost/mpi/communicator.hpp
@@ -13,6 +13,7 @@
#ifndef BOOST_MPI_COMMUNICATOR_HPP
#define BOOST_MPI_COMMUNICATOR_HPP
+#include <boost/assert.hpp>
#include <boost/mpi/config.hpp>
#include <boost/mpi/exception.hpp>
#include <boost/optional.hpp>
@@ -869,6 +870,8 @@ class BOOST_MPI_DECL communicator
{
void operator()(MPI_Comm* comm) const
{
+ BOOST_ASSERT( comm != 0 );
+ BOOST_ASSERT(*comm != MPI_COMM_NULL);
int finalized;
BOOST_MPI_CHECK_RESULT(MPI_Finalized, (&finalized));
if (!finalized)
diff --git a/3party/boost/boost/mpi/config.hpp b/3party/boost/boost/mpi/config.hpp
index cf08e2cdbe..acbdc78daa 100644
--- a/3party/boost/boost/mpi/config.hpp
+++ b/3party/boost/boost/mpi/config.hpp
@@ -27,7 +27,7 @@
// If this is an MPI-2 implementation, define configuration macros for
// the features we are interested in.
-#if defined(MPI_VERSION) && MPI_VERSION == 2
+#if defined(MPI_VERSION) && MPI_VERSION >= 2
/** @brief Determine if the MPI implementation has support for memory
* allocation.
*
@@ -48,6 +48,11 @@
* environment class will provide a default constructor. This macro is
* always defined for MPI-2 implementations. */
# define BOOST_MPI_HAS_NOARG_INITIALIZATION
+#else
+// If this is an MPI-1.x implementation, no arg initialization for
+// mpi environement could still be available, but not mandatory.
+// Undef this if no arg init is available:
+//# define BOOST_MPI_HAS_NOARG_INITIALIZATION
#endif
#if defined(MPIAPI)
@@ -80,12 +85,12 @@
* *
*****************************************************************************/
-#if defined(BOOST_HAS_DECLSPEC) && (defined(BOOST_MPI_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_MPI_STATIC_LINK)
+#if (defined(BOOST_MPI_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_MPI_STATIC_LINK)
# if defined(BOOST_MPI_SOURCE)
-# define BOOST_MPI_DECL __declspec(dllexport)
+# define BOOST_MPI_DECL BOOST_SYMBOL_EXPORT
# define BOOST_MPI_BUILD_DLL
# else
-# define BOOST_MPI_DECL __declspec(dllimport)
+# define BOOST_MPI_DECL BOOST_SYMBOL_IMPORT
# endif
#endif
diff --git a/3party/boost/boost/mpi/detail/binary_buffer_iprimitive.hpp b/3party/boost/boost/mpi/detail/binary_buffer_iprimitive.hpp
index 2bc028fc22..f499d0d5a8 100644
--- a/3party/boost/boost/mpi/detail/binary_buffer_iprimitive.hpp
+++ b/3party/boost/boost/mpi/detail/binary_buffer_iprimitive.hpp
@@ -21,6 +21,7 @@
#include <vector>
#include <boost/mpi/allocator.hpp>
#include <cstring> // for memcpy
+#include <cassert>
namespace boost { namespace mpi {
@@ -107,7 +108,8 @@ private:
void load_impl(void * p, int l)
{
assert(position+l<=static_cast<int>(buffer_.size()));
- std::memcpy(p,&buffer_[position],l);
+ if (l)
+ std::memcpy(p,&buffer_[position],l);
position += l;
}
diff --git a/3party/boost/boost/mpi/detail/forward_skeleton_iarchive.hpp b/3party/boost/boost/mpi/detail/forward_skeleton_iarchive.hpp
index 4d0ef7e9b8..6e1181981d 100644
--- a/3party/boost/boost/mpi/detail/forward_skeleton_iarchive.hpp
+++ b/3party/boost/boost/mpi/detail/forward_skeleton_iarchive.hpp
@@ -61,6 +61,7 @@ BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::version_type)
BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_id_type)
BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_id_reference_type)
BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::object_id_type)
+BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::object_reference_type)
BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::tracking_type)
BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_name_type)
BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(serialization::collection_size_type)
diff --git a/3party/boost/boost/mpi/detail/ignore_iprimitive.hpp b/3party/boost/boost/mpi/detail/ignore_iprimitive.hpp
index 724d711560..eb3d2b78fb 100644
--- a/3party/boost/boost/mpi/detail/ignore_iprimitive.hpp
+++ b/3party/boost/boost/mpi/detail/ignore_iprimitive.hpp
@@ -44,7 +44,7 @@ public:
/// don't do anything when loading primitive types
template<class T>
- void load(T & t)
+ void load(T &)
{
}
};
diff --git a/3party/boost/boost/mpi/detail/ignore_oprimitive.hpp b/3party/boost/boost/mpi/detail/ignore_oprimitive.hpp
index 9070ea7f65..23375cad7b 100644
--- a/3party/boost/boost/mpi/detail/ignore_oprimitive.hpp
+++ b/3party/boost/boost/mpi/detail/ignore_oprimitive.hpp
@@ -52,7 +52,7 @@ public:
/// don't do anything when saving primitive types
template<class T>
- void save(const T & t)
+ void save(const T &)
{
}
};
diff --git a/3party/boost/boost/mpi/detail/mpi_datatype_primitive.hpp b/3party/boost/boost/mpi/detail/mpi_datatype_primitive.hpp
index 3c22245d87..0a6078548f 100644
--- a/3party/boost/boost/mpi/detail/mpi_datatype_primitive.hpp
+++ b/3party/boost/boost/mpi/detail/mpi_datatype_primitive.hpp
@@ -49,7 +49,11 @@ public:
: is_committed(false),
origin()
{
+#if defined(MPI_VERSION) && MPI_VERSION >= 2
+ BOOST_MPI_CHECK_RESULT(MPI_Get_address,(const_cast<void*>(orig), &origin));
+#else
BOOST_MPI_CHECK_RESULT(MPI_Address,(const_cast<void*>(orig), &origin));
+#endif
}
void save_binary(void const *address, std::size_t count)
@@ -72,7 +76,8 @@ public:
{
if (!is_committed)
{
- BOOST_MPI_CHECK_RESULT(MPI_Type_struct,
+#if defined(MPI_VERSION) && MPI_VERSION >= 2
+ BOOST_MPI_CHECK_RESULT(MPI_Type_create_struct,
(
addresses.size(),
boost::serialization::detail::get_data(lengths),
@@ -80,9 +85,18 @@ public:
boost::serialization::detail::get_data(types),
&datatype_
));
-
+#else
+ BOOST_MPI_CHECK_RESULT(MPI_Type_struct,
+ (
+ addresses.size(),
+ boost::serialization::detail::get_data(lengths),
+ boost::serialization::detail::get_data(addresses),
+ boost::serialization::detail::get_data(types),
+ &datatype_
+ ));
+#endif
BOOST_MPI_CHECK_RESULT(MPI_Type_commit,(&datatype_));
-
+
is_committed = true;
}
@@ -105,8 +119,11 @@ private:
// store address, type and length
MPI_Aint a;
- BOOST_MPI_CHECK_RESULT(MPI_Address,(const_cast<void*>(p), &a));
-
+#if defined(MPI_VERSION) && MPI_VERSION >= 2
+ BOOST_MPI_CHECK_RESULT(MPI_Get_address,(const_cast<void*>(p), &a));
+#else
+ BOOST_MPI_CHECK_RESULT(MPI_Address,(const_cast<void*>(p), &a));
+#endif
addresses.push_back(a-origin);
types.push_back(t);
lengths.push_back(l);
diff --git a/3party/boost/boost/mpi/detail/packed_iprimitive.hpp b/3party/boost/boost/mpi/detail/packed_iprimitive.hpp
index 6e981c7f2b..bb471a7c66 100644
--- a/3party/boost/boost/mpi/detail/packed_iprimitive.hpp
+++ b/3party/boost/boost/mpi/detail/packed_iprimitive.hpp
@@ -94,7 +94,9 @@ public:
load(l);
s.resize(l);
// note breaking a rule here - could be a problem on some platform
- load_impl(const_cast<CharType *>(s.data()),get_mpi_datatype(CharType()),l);
+ if (l)
+ load_impl(const_cast<CharType *>(s.data()),
+ get_mpi_datatype(CharType()),l);
}
private:
diff --git a/3party/boost/boost/mpi/detail/packed_oprimitive.hpp b/3party/boost/boost/mpi/detail/packed_oprimitive.hpp
index 1f59df8977..5ac6835e15 100644
--- a/3party/boost/boost/mpi/detail/packed_oprimitive.hpp
+++ b/3party/boost/boost/mpi/detail/packed_oprimitive.hpp
@@ -81,7 +81,8 @@ public:
{
unsigned int l = static_cast<unsigned int>(s.size());
save(l);
- save_impl(s.data(),get_mpi_datatype(CharType()),s.size());
+ if (l)
+ save_impl(s.data(),get_mpi_datatype(CharType()),s.size());
}
private:
diff --git a/3party/boost/boost/mpi/environment.hpp b/3party/boost/boost/mpi/environment.hpp
index 378a3b6041..92af129f38 100644
--- a/3party/boost/boost/mpi/environment.hpp
+++ b/3party/boost/boost/mpi/environment.hpp
@@ -17,9 +17,46 @@
#include <boost/noncopyable.hpp>
#include <boost/optional.hpp>
#include <string>
+#include <iosfwd>
namespace boost { namespace mpi {
+namespace threading {
+/** @brief specify the supported threading level.
+ *
+ * Based on MPI 2 standard/8.7.3
+ */
+enum level {
+ /** Only one thread will execute.
+ */
+ single = MPI_THREAD_SINGLE,
+ /** Only main thread will do MPI calls.
+ *
+ * The process may be multi-threaded, but only the main
+ * thread will make MPI calls (all MPI calls are ``funneled''
+ * to the main thread).
+ */
+ funneled = MPI_THREAD_FUNNELED,
+ /** Only one thread at the time do MPI calls.
+ *
+ * The process may be multi-threaded, and multiple
+ * threads may make MPI calls, but only one at a time:
+ * MPI calls are not made concurrently from two distinct
+ * threads (all MPI calls are ``serialized'').
+ */
+ serialized = MPI_THREAD_SERIALIZED,
+ /** Multiple thread may do MPI calls.
+ *
+ * Multiple threads may call MPI, with no restrictions.
+ */
+ multiple = MPI_THREAD_MULTIPLE
+};
+
+/** Formated output for threading level. */
+std::ostream& operator<<(std::ostream& out, level l);
+/** Formated input for threading level. */
+std::istream& operator>>(std::istream& in, level& l);
+} // namespace threading
/** @brief Initialize, finalize, and query the MPI environment.
*
* The @c environment class is used to initialize, finalize, and
@@ -62,6 +99,22 @@ public:
* program if it is destructed due to an uncaught exception.
*/
explicit environment(bool abort_on_exception = true);
+ /** Initialize the MPI environment.
+ *
+ * If the MPI environment has not already been initialized,
+ * initializes MPI with a call to @c MPI_Init_thread. Since this
+ * constructor does not take command-line arguments (@c argc and @c
+ * argv), it is only available when the underlying MPI
+ * implementation supports calling @c MPI_Init with @c NULL
+ * arguments, indicated by the macro @c
+ * BOOST_MPI_HAS_NOARG_INITIALIZATION.
+ *
+ * @param mt_level the required level of threading support.
+ *
+ * @param abort_on_exception When true, this object will abort the
+ * program if it is destructed due to an uncaught exception.
+ */
+ explicit environment(threading::level mt_level, bool abort_on_exception = true);
#endif
/** Initialize the MPI environment.
@@ -80,6 +133,25 @@ public:
*/
environment(int& argc, char** &argv, bool abort_on_exception = true);
+ /** Initialize the MPI environment.
+ *
+ * If the MPI environment has not already been initialized,
+ * initializes MPI with a call to @c MPI_Init_thread.
+ *
+ * @param argc The number of arguments provided in @p argv, as
+ * passed into the program's @c main function.
+ *
+ * @param argv The array of argument strings passed to the program
+ * via @c main.
+ *
+ * @param mt_level the required level of threading support
+ *
+ * @param abort_on_exception When true, this object will abort the
+ * program if it is destructed due to an uncaught exception.
+ */
+ environment(int& argc, char** &argv, threading::level mt_level,
+ bool abort_on_exception = true);
+
/** Shuts down the MPI environment.
*
* If this @c environment object was used to initialize the MPI
@@ -185,13 +257,21 @@ public:
*/
static std::string processor_name();
+ /** Query the current level of thread support.
+ */
+ static threading::level thread_level();
+
+ /** Are we in the main thread?
+ */
+ static bool is_main_thread();
+
private:
/// Whether this environment object called MPI_Init
bool i_initialized;
/// Whether we should abort if the destructor is
bool abort_on_exception;
-
+
/// The number of reserved tags.
static const int num_reserved_tags = 1;
};
diff --git a/3party/boost/boost/mpi/inplace.hpp b/3party/boost/boost/mpi/inplace.hpp
new file mode 100644
index 0000000000..d84d07db59
--- /dev/null
+++ b/3party/boost/boost/mpi/inplace.hpp
@@ -0,0 +1,63 @@
+// Copyright (C) 2005-2006 Alain Miniussi <alain.miniussi -at- oca.eu>.
+
+// 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)
+
+// Message Passing Interface 1.1 -- Section 4. MPI Collectives
+
+/** @file inplace.hpp
+ *
+ * This header provides helpers to indicate to MPI collective operation
+ * that a buffer can be use both as an input and output.
+ */
+#ifndef BOOST_MPI_INPLACE_HPP
+#define BOOST_MPI_INPLACE_HPP
+
+#include <boost/mpi/communicator.hpp>
+#include <vector>
+
+namespace boost { namespace mpi {
+
+/**
+ * @brief Wrapper type to explicitly indicate that a input data
+ * can be overriden with an output value.
+ */
+template <typename T>
+struct inplace_t {
+ inplace_t(T& inout) : buffer(inout) {}
+ T& buffer;
+};
+
+template <typename T>
+struct inplace_t<T*> {
+ inplace_t(T* inout) : buffer(inout) {}
+ T* buffer;
+};
+
+
+/**
+ * @brief Wrapp a input data to indicate that it can be overriden
+ * with an ouput value.
+ * @param inout the contributing input value, it will be overriden
+ * with the output value where one is expected. If it is a pointer,
+ * the number of elements will be provided separatly.
+ * @returns The wrapped value or pointer.
+ */
+template<typename T>
+inplace_t<T>
+inplace(T& inout) {
+ return inplace_t<T>(inout);
+}
+/**
+ * \overload
+ */
+template<typename T>
+inplace_t<T*>
+inplace(T* inout) {
+ return inplace_t<T*>(inout);
+}
+} } // end namespace boost::mpi
+
+#endif // BOOST_MPI_INPLACE_HPP
+
diff --git a/3party/boost/boost/mpi/nonblocking.hpp b/3party/boost/boost/mpi/nonblocking.hpp
index ba024c7df4..a2d2e34313 100644
--- a/3party/boost/boost/mpi/nonblocking.hpp
+++ b/3party/boost/boost/mpi/nonblocking.hpp
@@ -59,8 +59,10 @@ wait_any(ForwardIterator first, ForwardIterator last)
ForwardIterator current = first;
while (true) {
// Check if we have found a completed request. If so, return it.
- if (optional<status> result = current->test())
- return std::make_pair(*result, current);
+ if (current->m_requests[0] != MPI_REQUEST_NULL &&
+ current->m_requests[1] != MPI_REQUEST_NULL)
+ if (optional<status> result = current->test())
+ return std::make_pair(*result, current);
// Check if this request (and all others before it) are "trivial"
// requests, e.g., they can be represented with a single
diff --git a/3party/boost/boost/mpi/packed_iarchive.hpp b/3party/boost/boost/mpi/packed_iarchive.hpp
index c33e7f9979..23d6468c55 100644
--- a/3party/boost/boost/mpi/packed_iarchive.hpp
+++ b/3party/boost/boost/mpi/packed_iarchive.hpp
@@ -21,7 +21,7 @@
#include <boost/mpi/datatype.hpp>
#include <boost/archive/detail/auto_link_archive.hpp>
#include <boost/archive/detail/common_iarchive.hpp>
-#include <boost/archive/shared_ptr_helper.hpp>
+#include <boost/archive/basic_archive.hpp>
#include <boost/mpi/detail/packed_iprimitive.hpp>
#include <boost/mpi/detail/binary_buffer_iprimitive.hpp>
#include <boost/serialization/string.hpp>
@@ -37,57 +37,55 @@ namespace boost { namespace mpi {
typedef packed_iprimitive iprimitive;
#endif
-/** @brief An archive that packs binary data into an MPI buffer.
+
+/** @brief An archive that unpacks binary data from an MPI buffer.
*
- * The @c packed_iarchive class is an Archiver (as in the
- * Boost.Serialization library) that packs binary data into a buffer
- * for transmission via MPI. It can operate on any Serializable data
- * type and will use the @c MPI_Pack function of the underlying MPI
- * implementation to perform serialization.
+ * The @c packed_oarchive class is an Archiver (as in the
+ * Boost.Serialization library) that unpacks binary data from a
+ * buffer received via MPI. It can operate on any Serializable data
+ * type and will use the @c MPI_Unpack function of the underlying MPI
+ * implementation to perform deserialization.
*/
+
class BOOST_MPI_DECL packed_iarchive
: public iprimitive
, public archive::detail::common_iarchive<packed_iarchive>
- , public archive::detail::shared_ptr_helper
{
public:
/**
- * Construct a @c packed_iarchive for transmission over the given
+ * Construct a @c packed_iarchive to receive data over the given
* MPI communicator and with an initial buffer.
*
* @param comm The communicator over which this archive will be
- * sent.
+ * received.
*
- * @param b A user-defined buffer that will be filled with the
- * binary representation of serialized objects.
+ * @param b A user-defined buffer that contains the binary
+ * representation of serialized objects.
*
* @param flags Control the serialization of the data types. Refer
* to the Boost.Serialization documentation before changing the
* default flags.
- *
- * @param position Set the offset into buffer @p b at which
- * deserialization will begin.
*/
+
packed_iarchive(MPI_Comm const & comm, buffer_type & b, unsigned int flags = boost::archive::no_header, int position = 0)
: iprimitive(b,comm,position),
archive::detail::common_iarchive<packed_iarchive>(flags)
{}
/**
- * Construct a @c packed_iarchive for transmission over the given
+ * Construct a @c packed_iarchive to receive data over the given
* MPI communicator.
*
* @param comm The communicator over which this archive will be
- * sent.
- *
- * @param s The size of the buffer to be received.
+ * received.
*
* @param flags Control the serialization of the data types. Refer
* to the Boost.Serialization documentation before changing the
* default flags.
*/
+
packed_iarchive
- ( MPI_Comm const & comm , std::size_t s=0,
+ ( MPI_Comm const & comm , std::size_t s=0,
unsigned int flags = boost::archive::no_header)
: iprimitive(internal_buffer_,comm)
, archive::detail::common_iarchive<packed_iarchive>(flags)
@@ -118,9 +116,25 @@ public:
load_override(x, version, use_optimized());
}
- // input archives need to ignore the optional information
+ // input archives need to ignore the optional information
void load_override(archive::class_id_optional_type & /*t*/, int){}
+ void load_override(archive::class_id_type & t, int version){
+ int_least16_t x=0;
+ * this->This() >> x;
+ t = boost::archive::class_id_type(x);
+ }
+
+ void load_override(archive::version_type & t, int version){
+ int_least8_t x=0;
+ * this->This() >> x;
+ t = boost::archive::version_type(x);
+ }
+
+ void load_override(archive::class_id_reference_type & t, int version){
+ load_override(static_cast<archive::class_id_type &>(t), version);
+ }
+
void load_override(archive::class_name_type & t, int)
{
std::string cn;
@@ -139,7 +153,6 @@ private:
} } // end namespace boost::mpi
-BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::mpi::packed_iarchive)
BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::packed_iarchive)
BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::packed_iarchive)
diff --git a/3party/boost/boost/mpi/packed_oarchive.hpp b/3party/boost/boost/mpi/packed_oarchive.hpp
index fb87e460c5..887aeac6e3 100644
--- a/3party/boost/boost/mpi/packed_oarchive.hpp
+++ b/3party/boost/boost/mpi/packed_oarchive.hpp
@@ -19,9 +19,9 @@
#define BOOST_MPI_PACKED_OARCHIVE_HPP
#include <boost/mpi/datatype.hpp>
+#include <boost/archive/basic_archive.hpp>
#include <boost/archive/detail/auto_link_archive.hpp>
#include <boost/archive/detail/common_oarchive.hpp>
-#include <boost/archive/shared_ptr_helper.hpp>
#include <boost/mpi/detail/packed_oprimitive.hpp>
#include <boost/mpi/detail/binary_buffer_oprimitive.hpp>
#include <boost/serialization/string.hpp>
@@ -36,34 +36,36 @@ namespace boost { namespace mpi {
typedef packed_oprimitive oprimitive;
#endif
-/** @brief An archive that unpacks binary data from an MPI buffer.
+/** @brief An archive that packs binary data into an MPI buffer.
*
- * The @c packed_oarchive class is an Archiver (as in the
- * Boost.Serialization library) that unpacks binary data from a
- * buffer received via MPI. It can operate on any Serializable data
- * type and will use the @c MPI_Unpack function of the underlying MPI
- * implementation to perform deserialization.
+ * The @c packed_iarchive class is an Archiver (as in the
+ * Boost.Serialization library) that packs binary data into a buffer
+ * for transmission via MPI. It can operate on any Serializable data
+ * type and will use the @c MPI_Pack function of the underlying MPI
+ * implementation to perform serialization.
*/
-
+
class BOOST_MPI_DECL packed_oarchive
: public oprimitive
, public archive::detail::common_oarchive<packed_oarchive>
- , public archive::detail::shared_ptr_helper
{
public:
/**
- * Construct a @c packed_oarchive to receive data over the given
+ * Construct a @c packed_oarchive for transmission over the given
* MPI communicator and with an initial buffer.
*
* @param comm The communicator over which this archive will be
- * received.
+ * sent.
*
- * @param b A user-defined buffer that contains the binary
- * representation of serialized objects.
+ * @param b A user-defined buffer that will be filled with the
+ * binary representation of serialized objects.
*
* @param flags Control the serialization of the data types. Refer
* to the Boost.Serialization documentation before changing the
* default flags.
+ *
+ * @param position Set the offset into buffer @p b at which
+ * deserialization will begin.
*/
packed_oarchive( MPI_Comm const & comm, buffer_type & b, unsigned int flags = boost::archive::no_header)
: oprimitive(b,comm),
@@ -71,11 +73,13 @@ public:
{}
/**
- * Construct a @c packed_oarchive to receive data over the given
+ * Construct a @c packed_oarchive for transmission over the given
* MPI communicator.
*
* @param comm The communicator over which this archive will be
- * received.
+ * sent.
+ *
+ * @param s The size of the buffer to be received.
*
* @param flags Control the serialization of the data types. Refer
* to the Boost.Serialization documentation before changing the
@@ -93,7 +97,7 @@ public:
archive::detail::common_oarchive<packed_oarchive>::save_override(x,version);
}
- // Save it directly using the primnivites
+ // Save it directly using the primitives
template<class T>
void save_override(T const& x, int /*version*/, mpl::true_)
{
@@ -108,7 +112,7 @@ public:
save_override(x, version, use_optimized());
}
- // input archives need to ignore the optional information
+ // input archives need to ignore the optional information
void save_override(const archive::class_id_optional_type & /*t*/, int){}
// explicitly convert to char * to avoid compile ambiguities
@@ -117,6 +121,15 @@ public:
* this->This() << s;
}
+ void save_override(archive::class_id_type & t, int version){
+ const boost::int_least16_t x = t;
+ * this->This() << x;
+ }
+
+ void save_override(archive::version_type & t, int version){
+ const boost::int_least8_t x = t;
+ * this->This() << x;
+ }
private:
/// An internal buffer to be used when the user does not supply his
/// own buffer.
diff --git a/3party/boost/boost/mpi/python/config.hpp b/3party/boost/boost/mpi/python/config.hpp
index 8bd0cdaf30..6126d955b2 100644
--- a/3party/boost/boost/mpi/python/config.hpp
+++ b/3party/boost/boost/mpi/python/config.hpp
@@ -20,12 +20,12 @@
* *
*****************************************************************************/
-#if defined(BOOST_HAS_DECLSPEC) && (defined(BOOST_MPI_PYTHON_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_MPI_PYTHON_STATIC_LINK)
+#if (defined(BOOST_MPI_PYTHON_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_MPI_PYTHON_STATIC_LINK)
# if defined(BOOST_MPI_PYTHON_SOURCE)
-# define BOOST_MPI_PYTHON_DECL __declspec(dllexport)
+# define BOOST_MPI_PYTHON_DECL BOOST_SYMBOL_EXPORT
# define BOOST_MPI_PYTHON_BUILD_DLL
# else
-# define BOOST_MPI_PYTHON_DECL __declspec(dllimport)
+# define BOOST_MPI_PYTHON_DECL BOOST_SYMBOL_IMPORT
# endif
#endif
diff --git a/3party/boost/boost/mpl/O1_size.hpp b/3party/boost/boost/mpl/O1_size.hpp
index 8baaa79be3..98bd3a7459 100644
--- a/3party/boost/boost/mpl/O1_size.hpp
+++ b/3party/boost/boost/mpl/O1_size.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/O1_size_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/O1_size_fwd.hpp b/3party/boost/boost/mpl/O1_size_fwd.hpp
index d97538277d..c84a7a56ae 100644
--- a/3party/boost/boost/mpl/O1_size_fwd.hpp
+++ b/3party/boost/boost/mpl/O1_size_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: O1_size_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/accumulate.hpp b/3party/boost/boost/mpl/accumulate.hpp
index 23b76c806b..dc2c75ecb8 100644
--- a/3party/boost/boost/mpl/accumulate.hpp
+++ b/3party/boost/boost/mpl/accumulate.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: accumulate.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
diff --git a/3party/boost/boost/mpl/advance.hpp b/3party/boost/boost/mpl/advance.hpp
index d811a80918..1af600417f 100644
--- a/3party/boost/boost/mpl/advance.hpp
+++ b/3party/boost/boost/mpl/advance.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: advance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/advance_fwd.hpp>
#include <boost/mpl/less.hpp>
diff --git a/3party/boost/boost/mpl/advance_fwd.hpp b/3party/boost/boost/mpl/advance_fwd.hpp
index 08ba5fc40c..803841019d 100644
--- a/3party/boost/boost/mpl/advance_fwd.hpp
+++ b/3party/boost/boost/mpl/advance_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: advance_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/common_name_wknd.hpp>
diff --git a/3party/boost/boost/mpl/alias.hpp b/3party/boost/boost/mpl/alias.hpp
index ff7b7bd10e..f0fe0caf42 100644
--- a/3party/boost/boost/mpl/alias.hpp
+++ b/3party/boost/boost/mpl/alias.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: alias.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace {
namespace mpl = boost::mpl;
diff --git a/3party/boost/boost/mpl/always.hpp b/3party/boost/boost/mpl/always.hpp
index 5094b3ee93..5fe71321e1 100644
--- a/3party/boost/boost/mpl/always.hpp
+++ b/3party/boost/boost/mpl/always.hpp
@@ -10,11 +10,11 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: always.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
-#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+#include <boost/mpl/aux_/preprocessor/default_params.hpp>
#include <boost/mpl/aux_/na.hpp>
#include <boost/mpl/aux_/arity_spec.hpp>
@@ -23,8 +23,7 @@ namespace boost { namespace mpl {
template< typename Value > struct always
{
template<
- typename T
- BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(1, typename T, na)
+ BOOST_MPL_PP_DEFAULT_PARAMS(BOOST_MPL_LIMIT_METAFUNCTION_ARITY, typename T, na)
>
struct apply
{
@@ -32,7 +31,7 @@ template< typename Value > struct always
};
};
-BOOST_MPL_AUX_ARITY_SPEC(1, always)
+BOOST_MPL_AUX_ARITY_SPEC(0, always)
}}
diff --git a/3party/boost/boost/mpl/and.hpp b/3party/boost/boost/mpl/and.hpp
index da257c8fc2..454aaf2e96 100644
--- a/3party/boost/boost/mpl/and.hpp
+++ b/3party/boost/boost/mpl/and.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: and.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
@@ -28,7 +28,7 @@
// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)'
// has to be checked in a separate condition, otherwise GCC complains
// about 'and' being an alternative token
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
#ifndef __GCCXML__
#if defined(and)
# pragma push_macro("and")
@@ -41,7 +41,7 @@
# define BOOST_MPL_PREPROCESSED_HEADER and.hpp
# include <boost/mpl/aux_/include_preprocessed.hpp>
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
#ifndef __GCCXML__
#if defined(and)
# pragma pop_macro("and")
diff --git a/3party/boost/boost/mpl/apply.hpp b/3party/boost/boost/mpl/apply.hpp
index b0455bc06e..581eb6810e 100644
--- a/3party/boost/boost/mpl/apply.hpp
+++ b/3party/boost/boost/mpl/apply.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/apply_fwd.hpp>
diff --git a/3party/boost/boost/mpl/apply_fwd.hpp b/3party/boost/boost/mpl/apply_fwd.hpp
index 8cbdfaf97d..5f5fa78916 100644
--- a/3party/boost/boost/mpl/apply_fwd.hpp
+++ b/3party/boost/boost/mpl/apply_fwd.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: apply_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/aux_/na.hpp>
diff --git a/3party/boost/boost/mpl/apply_wrap.hpp b/3party/boost/boost/mpl/apply_wrap.hpp
index 5c5c6df601..b807779cfa 100644
--- a/3party/boost/boost/mpl/apply_wrap.hpp
+++ b/3party/boost/boost/mpl/apply_wrap.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: apply_wrap.hpp 49272 2008-10-11 06:50:46Z agurtovoy $
-// $Date: 2008-10-10 23:50:46 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49272 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/aux_/arity.hpp>
diff --git a/3party/boost/boost/mpl/arg.hpp b/3party/boost/boost/mpl/arg.hpp
index c323a1a6e7..f51adfaeab 100644
--- a/3party/boost/boost/mpl/arg.hpp
+++ b/3party/boost/boost/mpl/arg.hpp
@@ -15,9 +15,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: arg.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/arg_fwd.hpp>
diff --git a/3party/boost/boost/mpl/arg_fwd.hpp b/3party/boost/boost/mpl/arg_fwd.hpp
index f79e0561cb..7346dc3555 100644
--- a/3party/boost/boost/mpl/arg_fwd.hpp
+++ b/3party/boost/boost/mpl/arg_fwd.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: arg_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/adl_barrier.hpp>
#include <boost/mpl/aux_/nttp_decl.hpp>
diff --git a/3party/boost/boost/mpl/arithmetic.hpp b/3party/boost/boost/mpl/arithmetic.hpp
index 0384042d54..7729fd2920 100644
--- a/3party/boost/boost/mpl/arithmetic.hpp
+++ b/3party/boost/boost/mpl/arithmetic.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: arithmetic.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/plus.hpp>
#include <boost/mpl/minus.hpp>
diff --git a/3party/boost/boost/mpl/as_sequence.hpp b/3party/boost/boost/mpl/as_sequence.hpp
index 9fb5af3d43..7e671b0fd8 100644
--- a/3party/boost/boost/mpl/as_sequence.hpp
+++ b/3party/boost/boost/mpl/as_sequence.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: as_sequence.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/is_sequence.hpp>
#include <boost/mpl/single_view.hpp>
diff --git a/3party/boost/boost/mpl/assert.hpp b/3party/boost/boost/mpl/assert.hpp
index a6f78a3785..4d860a4cae 100644
--- a/3party/boost/boost/mpl/assert.hpp
+++ b/3party/boost/boost/mpl/assert.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: assert.hpp 84442 2013-05-23 14:38:22Z steven_watanabe $
-// $Date: 2013-05-23 07:38:22 -0700 (Thu, 23 May 2013) $
-// $Revision: 84442 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/not.hpp>
#include <boost/mpl/aux_/value_wknd.hpp>
@@ -25,6 +25,7 @@
#include <boost/mpl/aux_/config/dtp.hpp>
#include <boost/mpl/aux_/config/gcc.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/gpu.hpp>
#include <boost/mpl/aux_/config/static_constant.hpp>
#include <boost/mpl/aux_/config/pp_counter.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
@@ -55,7 +56,7 @@
// and GCC (which issues "unused variable" warnings when static constants are used
// at a function scope)
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
- || (BOOST_MPL_CFG_GCC != 0)
+ || (BOOST_MPL_CFG_GCC != 0) || (BOOST_MPL_CFG_GPU != 0)
# define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr }
#else
# define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr)
@@ -134,7 +135,7 @@ template< assert_::relations r, long x, long y > struct assert_relation {};
#endif
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1700)
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)
template<class Pred>
struct extract_assert_pred;
diff --git a/3party/boost/boost/mpl/at.hpp b/3party/boost/boost/mpl/at.hpp
index d247d71ad4..aa90e59c16 100644
--- a/3party/boost/boost/mpl/at.hpp
+++ b/3party/boost/boost/mpl/at.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: at.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/at_fwd.hpp>
#include <boost/mpl/aux_/at_impl.hpp>
diff --git a/3party/boost/boost/mpl/at_fwd.hpp b/3party/boost/boost/mpl/at_fwd.hpp
index a4825f0d56..6aaae38351 100644
--- a/3party/boost/boost/mpl/at_fwd.hpp
+++ b/3party/boost/boost/mpl/at_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: at_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/aux_/O1_size_impl.hpp b/3party/boost/boost/mpl/aux_/O1_size_impl.hpp
index 614730dff9..3bcbd0f787 100644
--- a/3party/boost/boost/mpl/aux_/O1_size_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/O1_size_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: O1_size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/O1_size_fwd.hpp>
#include <boost/mpl/long.hpp>
diff --git a/3party/boost/boost/mpl/aux_/adl_barrier.hpp b/3party/boost/boost/mpl/aux_/adl_barrier.hpp
index 077f46fc0f..3968c242ad 100644
--- a/3party/boost/boost/mpl/aux_/adl_barrier.hpp
+++ b/3party/boost/boost/mpl/aux_/adl_barrier.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: adl_barrier.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/adl.hpp>
#include <boost/mpl/aux_/config/gcc.hpp>
diff --git a/3party/boost/boost/mpl/aux_/advance_backward.hpp b/3party/boost/boost/mpl/aux_/advance_backward.hpp
index d44c59f8ef..df56793211 100644
--- a/3party/boost/boost/mpl/aux_/advance_backward.hpp
+++ b/3party/boost/boost/mpl/aux_/advance_backward.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: advance_backward.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/prior.hpp>
diff --git a/3party/boost/boost/mpl/aux_/advance_forward.hpp b/3party/boost/boost/mpl/aux_/advance_forward.hpp
index 4edd3ead79..62b0101c67 100644
--- a/3party/boost/boost/mpl/aux_/advance_forward.hpp
+++ b/3party/boost/boost/mpl/aux_/advance_forward.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: advance_forward.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/next.hpp>
diff --git a/3party/boost/boost/mpl/aux_/apply_1st.hpp b/3party/boost/boost/mpl/aux_/apply_1st.hpp
index 0620215ae4..b5677482b9 100644
--- a/3party/boost/boost/mpl/aux_/apply_1st.hpp
+++ b/3party/boost/boost/mpl/aux_/apply_1st.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: apply_1st.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/apply.hpp>
diff --git a/3party/boost/boost/mpl/aux_/arg_typedef.hpp b/3party/boost/boost/mpl/aux_/arg_typedef.hpp
index ed5e5bd723..362db16006 100644
--- a/3party/boost/boost/mpl/aux_/arg_typedef.hpp
+++ b/3party/boost/boost/mpl/aux_/arg_typedef.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: arg_typedef.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/lambda.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/arithmetic_op.hpp b/3party/boost/boost/mpl/aux_/arithmetic_op.hpp
index 0a310b7ced..0171db5db6 100644
--- a/3party/boost/boost/mpl/aux_/arithmetic_op.hpp
+++ b/3party/boost/boost/mpl/aux_/arithmetic_op.hpp
@@ -9,9 +9,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: arithmetic_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/integral_c.hpp>
diff --git a/3party/boost/boost/mpl/aux_/arity.hpp b/3party/boost/boost/mpl/aux_/arity.hpp
index adedcc6b5c..d13ab4aded 100644
--- a/3party/boost/boost/mpl/aux_/arity.hpp
+++ b/3party/boost/boost/mpl/aux_/arity.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: arity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/dtp.hpp>
diff --git a/3party/boost/boost/mpl/aux_/arity_spec.hpp b/3party/boost/boost/mpl/aux_/arity_spec.hpp
index 6ae5cc72bd..7c8221428d 100644
--- a/3party/boost/boost/mpl/aux_/arity_spec.hpp
+++ b/3party/boost/boost/mpl/aux_/arity_spec.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: arity_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/int.hpp>
#include <boost/mpl/limits/arity.hpp>
diff --git a/3party/boost/boost/mpl/aux_/at_impl.hpp b/3party/boost/boost/mpl/aux_/at_impl.hpp
index 4af7cfed87..923937480e 100644
--- a/3party/boost/boost/mpl/aux_/at_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/at_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: at_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/advance.hpp>
diff --git a/3party/boost/boost/mpl/aux_/back_impl.hpp b/3party/boost/boost/mpl/aux_/back_impl.hpp
index 3b7e4a9e53..a3c7248df2 100644
--- a/3party/boost/boost/mpl/aux_/back_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/back_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: back_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/aux_/basic_bind.hpp b/3party/boost/boost/mpl/aux_/basic_bind.hpp
index 90cac01e85..6c1f643442 100644
--- a/3party/boost/boost/mpl/aux_/basic_bind.hpp
+++ b/3party/boost/boost/mpl/aux_/basic_bind.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: basic_bind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
#include <boost/mpl/bind.hpp>
diff --git a/3party/boost/boost/mpl/aux_/begin_end_impl.hpp b/3party/boost/boost/mpl/aux_/begin_end_impl.hpp
index 1a220a24ad..58b70dd101 100644
--- a/3party/boost/boost/mpl/aux_/begin_end_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/begin_end_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: begin_end_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end_fwd.hpp>
#include <boost/mpl/sequence_tag_fwd.hpp>
diff --git a/3party/boost/boost/mpl/aux_/clear_impl.hpp b/3party/boost/boost/mpl/aux_/clear_impl.hpp
index 3850086ca5..20b270c0ce 100644
--- a/3party/boost/boost/mpl/aux_/clear_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/clear_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: clear_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/clear_fwd.hpp>
#include <boost/mpl/aux_/traits_lambda_spec.hpp>
diff --git a/3party/boost/boost/mpl/aux_/common_name_wknd.hpp b/3party/boost/boost/mpl/aux_/common_name_wknd.hpp
index a6c7898b22..00758b243e 100644
--- a/3party/boost/boost/mpl/aux_/common_name_wknd.hpp
+++ b/3party/boost/boost/mpl/aux_/common_name_wknd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: common_name_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/comparison_op.hpp b/3party/boost/boost/mpl/aux_/comparison_op.hpp
index f0850a4d03..2df72d300a 100644
--- a/3party/boost/boost/mpl/aux_/comparison_op.hpp
+++ b/3party/boost/boost/mpl/aux_/comparison_op.hpp
@@ -9,9 +9,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: comparison_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/bool.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/adl.hpp b/3party/boost/boost/mpl/aux_/config/adl.hpp
index d6ead717ea..e9bdf1156b 100644
--- a/3party/boost/boost/mpl/aux_/config/adl.hpp
+++ b/3party/boost/boost/mpl/aux_/config/adl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: adl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/intel.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/arrays.hpp b/3party/boost/boost/mpl/aux_/config/arrays.hpp
index d801cf7c3d..a9ea68ad67 100644
--- a/3party/boost/boost/mpl/aux_/config/arrays.hpp
+++ b/3party/boost/boost/mpl/aux_/config/arrays.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: arrays.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/bcc.hpp b/3party/boost/boost/mpl/aux_/config/bcc.hpp
index f4817ca628..fe4941a598 100644
--- a/3party/boost/boost/mpl/aux_/config/bcc.hpp
+++ b/3party/boost/boost/mpl/aux_/config/bcc.hpp
@@ -10,7 +10,7 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bcc.hpp 49272 2008-10-11 06:50:46Z agurtovoy $
+// $Id$
// $Date: 2004-09-02 10:41:37 -0500 (Thu, 02 Sep 2004) $
// $Revision: 24874 $
diff --git a/3party/boost/boost/mpl/aux_/config/bind.hpp b/3party/boost/boost/mpl/aux_/config/bind.hpp
index 02a7814201..10bcb94b8b 100644
--- a/3party/boost/boost/mpl/aux_/config/bind.hpp
+++ b/3party/boost/boost/mpl/aux_/config/bind.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/compiler.hpp b/3party/boost/boost/mpl/aux_/config/compiler.hpp
index e80ccde7f0..7d3e3b6622 100644
--- a/3party/boost/boost/mpl/aux_/config/compiler.hpp
+++ b/3party/boost/boost/mpl/aux_/config/compiler.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: compiler.hpp 53189 2009-05-22 20:07:55Z hkaiser $
-// $Date: 2009-05-22 13:07:55 -0700 (Fri, 22 May 2009) $
-// $Revision: 53189 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_CFG_COMPILER_DIR)
diff --git a/3party/boost/boost/mpl/aux_/config/ctps.hpp b/3party/boost/boost/mpl/aux_/config/ctps.hpp
index 9a4aaf724e..af78f47ffd 100644
--- a/3party/boost/boost/mpl/aux_/config/ctps.hpp
+++ b/3party/boost/boost/mpl/aux_/config/ctps.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: ctps.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/workaround.hpp>
#include <boost/config.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/dependent_nttp.hpp b/3party/boost/boost/mpl/aux_/config/dependent_nttp.hpp
index 3b5a2882ac..5c2e24dbbd 100644
--- a/3party/boost/boost/mpl/aux_/config/dependent_nttp.hpp
+++ b/3party/boost/boost/mpl/aux_/config/dependent_nttp.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: dependent_nttp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/gcc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp b/3party/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp
index f5f53f7c5a..9f8ea8c67f 100644
--- a/3party/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp
+++ b/3party/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: dmc_ambiguous_ctps.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/dtp.hpp b/3party/boost/boost/mpl/aux_/config/dtp.hpp
index e53929bb84..4379b6b2fc 100644
--- a/3party/boost/boost/mpl/aux_/config/dtp.hpp
+++ b/3party/boost/boost/mpl/aux_/config/dtp.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: dtp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/eti.hpp b/3party/boost/boost/mpl/aux_/config/eti.hpp
index c3fd1c60c9..519d433d35 100644
--- a/3party/boost/boost/mpl/aux_/config/eti.hpp
+++ b/3party/boost/boost/mpl/aux_/config/eti.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: eti.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/forwarding.hpp b/3party/boost/boost/mpl/aux_/config/forwarding.hpp
index 0919d07268..b4296ad961 100644
--- a/3party/boost/boost/mpl/aux_/config/forwarding.hpp
+++ b/3party/boost/boost/mpl/aux_/config/forwarding.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: forwarding.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/gcc.hpp b/3party/boost/boost/mpl/aux_/config/gcc.hpp
index b9d8f7d32f..080495de17 100644
--- a/3party/boost/boost/mpl/aux_/config/gcc.hpp
+++ b/3party/boost/boost/mpl/aux_/config/gcc.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: gcc.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if defined(__GNUC__) && !defined(__EDG_VERSION__)
# define BOOST_MPL_CFG_GCC ((__GNUC__ << 8) | __GNUC_MINOR__)
diff --git a/3party/boost/boost/mpl/aux_/config/gpu.hpp b/3party/boost/boost/mpl/aux_/config/gpu.hpp
new file mode 100644
index 0000000000..0e5ed784c4
--- /dev/null
+++ b/3party/boost/boost/mpl/aux_/config/gpu.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED
+
+// Copyright Eric Niebler 2014
+//
+// 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/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/config.hpp>
+
+#if !defined(BOOST_MPL_CFG_GPU_ENABLED) \
+
+# define BOOST_MPL_CFG_GPU_ENABLED BOOST_GPU_ENABLED
+
+#endif
+
+#if defined __CUDACC__
+
+# define BOOST_MPL_CFG_GPU 1
+
+#else
+
+# define BOOST_MPL_CFG_GPU 0
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED
diff --git a/3party/boost/boost/mpl/aux_/config/has_apply.hpp b/3party/boost/boost/mpl/aux_/config/has_apply.hpp
index cc52ebac50..4dc01c6647 100644
--- a/3party/boost/boost/mpl/aux_/config/has_apply.hpp
+++ b/3party/boost/boost/mpl/aux_/config/has_apply.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/has_xxx.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/has_xxx.hpp b/3party/boost/boost/mpl/aux_/config/has_xxx.hpp
index 1139b684ca..b0f2f8c23e 100644
--- a/3party/boost/boost/mpl/aux_/config/has_xxx.hpp
+++ b/3party/boost/boost/mpl/aux_/config/has_xxx.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_xxx.hpp 63518 2010-07-02 08:32:03Z agurtovoy $
-// $Date: 2010-07-02 01:32:03 -0700 (Fri, 02 Jul 2010) $
-// $Revision: 63518 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/overload_resolution.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/integral.hpp b/3party/boost/boost/mpl/aux_/config/integral.hpp
index 6a891604e3..144542d9c3 100644
--- a/3party/boost/boost/mpl/aux_/config/integral.hpp
+++ b/3party/boost/boost/mpl/aux_/config/integral.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: integral.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/intel.hpp b/3party/boost/boost/mpl/aux_/config/intel.hpp
index 141a95233e..5bd9159173 100644
--- a/3party/boost/boost/mpl/aux_/config/intel.hpp
+++ b/3party/boost/boost/mpl/aux_/config/intel.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: intel.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
// BOOST_INTEL_CXX_VERSION is defined here:
diff --git a/3party/boost/boost/mpl/aux_/config/lambda.hpp b/3party/boost/boost/mpl/aux_/config/lambda.hpp
index 7be16bf7c6..93fbafe071 100644
--- a/3party/boost/boost/mpl/aux_/config/lambda.hpp
+++ b/3party/boost/boost/mpl/aux_/config/lambda.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/ttp.hpp>
#include <boost/mpl/aux_/config/ctps.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/msvc.hpp b/3party/boost/boost/mpl/aux_/config/msvc.hpp
index fe89cda30b..8a6b924627 100644
--- a/3party/boost/boost/mpl/aux_/config/msvc.hpp
+++ b/3party/boost/boost/mpl/aux_/config/msvc.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: msvc.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
// BOOST_MSVC is defined here:
diff --git a/3party/boost/boost/mpl/aux_/config/msvc_typename.hpp b/3party/boost/boost/mpl/aux_/config/msvc_typename.hpp
index 603e2755ea..feedc16db8 100644
--- a/3party/boost/boost/mpl/aux_/config/msvc_typename.hpp
+++ b/3party/boost/boost/mpl/aux_/config/msvc_typename.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: msvc_typename.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/nttp.hpp b/3party/boost/boost/mpl/aux_/config/nttp.hpp
index f8bd39efab..11125a9bff 100644
--- a/3party/boost/boost/mpl/aux_/config/nttp.hpp
+++ b/3party/boost/boost/mpl/aux_/config/nttp.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: nttp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/operators.hpp b/3party/boost/boost/mpl/aux_/config/operators.hpp
index a6af5b1672..3fb9db3057 100644
--- a/3party/boost/boost/mpl/aux_/config/operators.hpp
+++ b/3party/boost/boost/mpl/aux_/config/operators.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: operators.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/gcc.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
@@ -24,6 +24,7 @@
|| BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
|| BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, <= 0x0295) \
|| BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
+ || BOOST_WORKAROUND(__NVCC__, BOOST_TESTED_AT(1)) \
)
# define BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING
diff --git a/3party/boost/boost/mpl/aux_/config/overload_resolution.hpp b/3party/boost/boost/mpl/aux_/config/overload_resolution.hpp
index 9de579ff5b..61e4486e9b 100644
--- a/3party/boost/boost/mpl/aux_/config/overload_resolution.hpp
+++ b/3party/boost/boost/mpl/aux_/config/overload_resolution.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: overload_resolution.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/pp_counter.hpp b/3party/boost/boost/mpl/aux_/config/pp_counter.hpp
index 4592272f8b..e7fb8d66c6 100644
--- a/3party/boost/boost/mpl/aux_/config/pp_counter.hpp
+++ b/3party/boost/boost/mpl/aux_/config/pp_counter.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pp_counter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_AUX_PP_COUNTER)
# include <boost/mpl/aux_/config/msvc.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/preprocessor.hpp b/3party/boost/boost/mpl/aux_/config/preprocessor.hpp
index 39190c4fdd..82ebc68fe0 100644
--- a/3party/boost/boost/mpl/aux_/config/preprocessor.hpp
+++ b/3party/boost/boost/mpl/aux_/config/preprocessor.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: preprocessor.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/static_constant.hpp b/3party/boost/boost/mpl/aux_/config/static_constant.hpp
index 02cf9c4ed4..ece38fb0e9 100644
--- a/3party/boost/boost/mpl/aux_/config/static_constant.hpp
+++ b/3party/boost/boost/mpl/aux_/config/static_constant.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: static_constant.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
// BOOST_STATIC_CONSTANT is defined here:
diff --git a/3party/boost/boost/mpl/aux_/config/ttp.hpp b/3party/boost/boost/mpl/aux_/config/ttp.hpp
index 879ec1ddca..3aff3f84df 100644
--- a/3party/boost/boost/mpl/aux_/config/ttp.hpp
+++ b/3party/boost/boost/mpl/aux_/config/ttp.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: ttp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/gcc.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/typeof.hpp b/3party/boost/boost/mpl/aux_/config/typeof.hpp
index 2244d2cd14..cde6179c67 100644
--- a/3party/boost/boost/mpl/aux_/config/typeof.hpp
+++ b/3party/boost/boost/mpl/aux_/config/typeof.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: typeof.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/gcc.hpp>
diff --git a/3party/boost/boost/mpl/aux_/config/use_preprocessed.hpp b/3party/boost/boost/mpl/aux_/config/use_preprocessed.hpp
index 4494366d8d..8fd5c60755 100644
--- a/3party/boost/boost/mpl/aux_/config/use_preprocessed.hpp
+++ b/3party/boost/boost/mpl/aux_/config/use_preprocessed.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: use_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
// #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
diff --git a/3party/boost/boost/mpl/aux_/config/workaround.hpp b/3party/boost/boost/mpl/aux_/config/workaround.hpp
index 8ec172f672..82c632982d 100644
--- a/3party/boost/boost/mpl/aux_/config/workaround.hpp
+++ b/3party/boost/boost/mpl/aux_/config/workaround.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: workaround.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/detail/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/contains_impl.hpp b/3party/boost/boost/mpl/aux_/contains_impl.hpp
index 2dcb609c95..b80caeafed 100644
--- a/3party/boost/boost/mpl/aux_/contains_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/contains_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: contains_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/contains_fwd.hpp>
#include <boost/mpl/begin_end.hpp>
diff --git a/3party/boost/boost/mpl/aux_/count_args.hpp b/3party/boost/boost/mpl/aux_/count_args.hpp
index 1ab000db14..b432d370eb 100644
--- a/3party/boost/boost/mpl/aux_/count_args.hpp
+++ b/3party/boost/boost/mpl/aux_/count_args.hpp
@@ -9,9 +9,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: count_args.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/preprocessor/expr_if.hpp>
#include <boost/preprocessor/inc.hpp>
diff --git a/3party/boost/boost/mpl/aux_/count_impl.hpp b/3party/boost/boost/mpl/aux_/count_impl.hpp
index 8b80c02fd4..2f1200c6c8 100644
--- a/3party/boost/boost/mpl/aux_/count_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/count_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: count_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/count_fwd.hpp>
#include <boost/mpl/count_if.hpp>
diff --git a/3party/boost/boost/mpl/aux_/empty_impl.hpp b/3party/boost/boost/mpl/aux_/empty_impl.hpp
index 0b4b979873..cfe55ae252 100644
--- a/3party/boost/boost/mpl/aux_/empty_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/empty_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/empty_fwd.hpp>
#include <boost/mpl/begin_end.hpp>
diff --git a/3party/boost/boost/mpl/aux_/erase_impl.hpp b/3party/boost/boost/mpl/aux_/erase_impl.hpp
index 5fc1712f11..ab763be5a4 100644
--- a/3party/boost/boost/mpl/aux_/erase_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/erase_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/clear.hpp>
#include <boost/mpl/push_front.hpp>
diff --git a/3party/boost/boost/mpl/aux_/erase_key_impl.hpp b/3party/boost/boost/mpl/aux_/erase_key_impl.hpp
index e479c66ce8..4d213a543b 100644
--- a/3party/boost/boost/mpl/aux_/erase_key_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/erase_key_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/erase_key_fwd.hpp>
#include <boost/mpl/aux_/traits_lambda_spec.hpp>
diff --git a/3party/boost/boost/mpl/aux_/filter_iter.hpp b/3party/boost/boost/mpl/aux_/filter_iter.hpp
index 6fb1411771..e4237f19ae 100644
--- a/3party/boost/boost/mpl/aux_/filter_iter.hpp
+++ b/3party/boost/boost/mpl/aux_/filter_iter.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: filter_iter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/find_if.hpp>
#include <boost/mpl/iterator_range.hpp>
diff --git a/3party/boost/boost/mpl/aux_/fold_impl.hpp b/3party/boost/boost/mpl/aux_/fold_impl.hpp
index cc640224da..97c88c5b29 100644
--- a/3party/boost/boost/mpl/aux_/fold_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/fold_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/aux_/fold_impl_body.hpp b/3party/boost/boost/mpl/aux_/fold_impl_body.hpp
index 0750990ae3..02dd645f72 100644
--- a/3party/boost/boost/mpl/aux_/fold_impl_body.hpp
+++ b/3party/boost/boost/mpl/aux_/fold_impl_body.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: fold_impl_body.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
# include <boost/mpl/limits/unrolling.hpp>
# include <boost/mpl/aux_/preprocessor/repeat.hpp>
diff --git a/3party/boost/boost/mpl/aux_/fold_op.hpp b/3party/boost/boost/mpl/aux_/fold_op.hpp
index 3fc6ce94d5..722c22c016 100644
--- a/3party/boost/boost/mpl/aux_/fold_op.hpp
+++ b/3party/boost/boost/mpl/aux_/fold_op.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: fold_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/apply.hpp>
diff --git a/3party/boost/boost/mpl/aux_/fold_pred.hpp b/3party/boost/boost/mpl/aux_/fold_pred.hpp
index f645464eaf..3156400302 100644
--- a/3party/boost/boost/mpl/aux_/fold_pred.hpp
+++ b/3party/boost/boost/mpl/aux_/fold_pred.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: fold_pred.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/same_as.hpp>
#include <boost/mpl/apply.hpp>
diff --git a/3party/boost/boost/mpl/aux_/front_impl.hpp b/3party/boost/boost/mpl/aux_/front_impl.hpp
index a666e6797c..9493c1c4e9 100644
--- a/3party/boost/boost/mpl/aux_/front_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/front_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: front_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/front_fwd.hpp>
#include <boost/mpl/begin_end.hpp>
diff --git a/3party/boost/boost/mpl/aux_/full_lambda.hpp b/3party/boost/boost/mpl/aux_/full_lambda.hpp
index e931199915..918aff5c09 100644
--- a/3party/boost/boost/mpl/aux_/full_lambda.hpp
+++ b/3party/boost/boost/mpl/aux_/full_lambda.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: full_lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/lambda_fwd.hpp>
diff --git a/3party/boost/boost/mpl/aux_/has_apply.hpp b/3party/boost/boost/mpl/aux_/has_apply.hpp
index cfb496e3bb..9c16a35498 100644
--- a/3party/boost/boost/mpl/aux_/has_apply.hpp
+++ b/3party/boost/boost/mpl/aux_/has_apply.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/has_xxx.hpp>
#include <boost/mpl/aux_/config/has_apply.hpp>
diff --git a/3party/boost/boost/mpl/aux_/has_begin.hpp b/3party/boost/boost/mpl/aux_/has_begin.hpp
index c2b3bdbb5b..4ee415cbb9 100644
--- a/3party/boost/boost/mpl/aux_/has_begin.hpp
+++ b/3party/boost/boost/mpl/aux_/has_begin.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_begin.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/has_xxx.hpp>
diff --git a/3party/boost/boost/mpl/aux_/has_key_impl.hpp b/3party/boost/boost/mpl/aux_/has_key_impl.hpp
index e7c7fc4d8a..7a0e9b5583 100644
--- a/3party/boost/boost/mpl/aux_/has_key_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/has_key_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/has_key_fwd.hpp>
#include <boost/mpl/aux_/traits_lambda_spec.hpp>
diff --git a/3party/boost/boost/mpl/aux_/has_rebind.hpp b/3party/boost/boost/mpl/aux_/has_rebind.hpp
index f07e79e567..eb4eda613c 100644
--- a/3party/boost/boost/mpl/aux_/has_rebind.hpp
+++ b/3party/boost/boost/mpl/aux_/has_rebind.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_rebind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/intel.hpp>
diff --git a/3party/boost/boost/mpl/aux_/has_size.hpp b/3party/boost/boost/mpl/aux_/has_size.hpp
index 23588af0be..ff29913f9b 100644
--- a/3party/boost/boost/mpl/aux_/has_size.hpp
+++ b/3party/boost/boost/mpl/aux_/has_size.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/has_xxx.hpp>
diff --git a/3party/boost/boost/mpl/aux_/has_tag.hpp b/3party/boost/boost/mpl/aux_/has_tag.hpp
index 915a8b6221..3912a76af6 100644
--- a/3party/boost/boost/mpl/aux_/has_tag.hpp
+++ b/3party/boost/boost/mpl/aux_/has_tag.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/has_xxx.hpp>
diff --git a/3party/boost/boost/mpl/aux_/has_type.hpp b/3party/boost/boost/mpl/aux_/has_type.hpp
index 4f05072b5f..6744ef5b06 100644
--- a/3party/boost/boost/mpl/aux_/has_type.hpp
+++ b/3party/boost/boost/mpl/aux_/has_type.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_type.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/has_xxx.hpp>
diff --git a/3party/boost/boost/mpl/aux_/include_preprocessed.hpp b/3party/boost/boost/mpl/aux_/include_preprocessed.hpp
index 162b05cc0d..c13434c8eb 100644
--- a/3party/boost/boost/mpl/aux_/include_preprocessed.hpp
+++ b/3party/boost/boost/mpl/aux_/include_preprocessed.hpp
@@ -9,9 +9,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/compiler.hpp>
#include <boost/mpl/aux_/config/preprocessor.hpp>
diff --git a/3party/boost/boost/mpl/aux_/insert_impl.hpp b/3party/boost/boost/mpl/aux_/insert_impl.hpp
index a0de6e9079..03a304b580 100644
--- a/3party/boost/boost/mpl/aux_/insert_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/insert_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: insert_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/reverse_fold.hpp>
#include <boost/mpl/iterator_range.hpp>
diff --git a/3party/boost/boost/mpl/aux_/insert_range_impl.hpp b/3party/boost/boost/mpl/aux_/insert_range_impl.hpp
index d7357b46a0..baffb54a2d 100644
--- a/3party/boost/boost/mpl/aux_/insert_range_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/insert_range_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: insert_range_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/copy.hpp>
#include <boost/mpl/clear.hpp>
diff --git a/3party/boost/boost/mpl/aux_/inserter_algorithm.hpp b/3party/boost/boost/mpl/aux_/inserter_algorithm.hpp
index 2d7e1d928a..20ae8161c7 100644
--- a/3party/boost/boost/mpl/aux_/inserter_algorithm.hpp
+++ b/3party/boost/boost/mpl/aux_/inserter_algorithm.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: inserter_algorithm.hpp 55648 2009-08-18 05:16:53Z agurtovoy $
-// $Date: 2009-08-17 22:16:53 -0700 (Mon, 17 Aug 2009) $
-// $Revision: 55648 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/back_inserter.hpp>
#include <boost/mpl/front_inserter.hpp>
diff --git a/3party/boost/boost/mpl/aux_/integral_wrapper.hpp b/3party/boost/boost/mpl/aux_/integral_wrapper.hpp
index d36e7cbb2d..6bc05f7e96 100644
--- a/3party/boost/boost/mpl/aux_/integral_wrapper.hpp
+++ b/3party/boost/boost/mpl/aux_/integral_wrapper.hpp
@@ -7,9 +7,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: integral_wrapper.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
@@ -77,7 +77,7 @@ struct AUX_WRAPPER_NAME
// functions that return objects of both arithmetic ('int', 'long',
// 'double', etc.) and wrapped integral types (for an example, see
// "mpl/example/power.cpp")
- operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast<AUX_WRAPPER_VALUE_TYPE>(this->value); }
+ BOOST_CONSTEXPR operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast<AUX_WRAPPER_VALUE_TYPE>(this->value); }
};
#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
diff --git a/3party/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp b/3party/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp
index 917b57cbc3..4989940bad 100644
--- a/3party/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp
+++ b/3party/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: is_msvc_eti_arg.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/yes_no.hpp>
#include <boost/mpl/aux_/config/eti.hpp>
diff --git a/3party/boost/boost/mpl/aux_/iter_apply.hpp b/3party/boost/boost/mpl/aux_/iter_apply.hpp
index fee4d811c1..41dfdfadd5 100644
--- a/3party/boost/boost/mpl/aux_/iter_apply.hpp
+++ b/3party/boost/boost/mpl/aux_/iter_apply.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iter_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/apply.hpp>
#include <boost/mpl/deref.hpp>
diff --git a/3party/boost/boost/mpl/aux_/iter_fold_if_impl.hpp b/3party/boost/boost/mpl/aux_/iter_fold_if_impl.hpp
index ad80250d0b..6372e83de4 100644
--- a/3party/boost/boost/mpl/aux_/iter_fold_if_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/iter_fold_if_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iter_fold_if_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/identity.hpp>
diff --git a/3party/boost/boost/mpl/aux_/iter_fold_impl.hpp b/3party/boost/boost/mpl/aux_/iter_fold_impl.hpp
index 7bc572078d..b4d2922f51 100644
--- a/3party/boost/boost/mpl/aux_/iter_fold_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/iter_fold_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iter_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/aux_/iter_push_front.hpp b/3party/boost/boost/mpl/aux_/iter_push_front.hpp
index 3a01b0360c..35ccc4dfbb 100644
--- a/3party/boost/boost/mpl/aux_/iter_push_front.hpp
+++ b/3party/boost/boost/mpl/aux_/iter_push_front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iter_push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_front.hpp>
#include <boost/mpl/deref.hpp>
diff --git a/3party/boost/boost/mpl/aux_/joint_iter.hpp b/3party/boost/boost/mpl/aux_/joint_iter.hpp
index e78028d644..277580eebf 100644
--- a/3party/boost/boost/mpl/aux_/joint_iter.hpp
+++ b/3party/boost/boost/mpl/aux_/joint_iter.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: joint_iter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/next_prior.hpp>
#include <boost/mpl/deref.hpp>
diff --git a/3party/boost/boost/mpl/aux_/lambda_arity_param.hpp b/3party/boost/boost/mpl/aux_/lambda_arity_param.hpp
index 5418f2c904..63cfcd4f17 100644
--- a/3party/boost/boost/mpl/aux_/lambda_arity_param.hpp
+++ b/3party/boost/boost/mpl/aux_/lambda_arity_param.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: lambda_arity_param.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/ttp.hpp>
diff --git a/3party/boost/boost/mpl/aux_/lambda_no_ctps.hpp b/3party/boost/boost/mpl/aux_/lambda_no_ctps.hpp
index 1c383b4279..9e0d0203a7 100644
--- a/3party/boost/boost/mpl/aux_/lambda_no_ctps.hpp
+++ b/3party/boost/boost/mpl/aux_/lambda_no_ctps.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: lambda_no_ctps.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/lambda_fwd.hpp>
diff --git a/3party/boost/boost/mpl/aux_/lambda_spec.hpp b/3party/boost/boost/mpl/aux_/lambda_spec.hpp
index 52b1dcd55c..6ffacc0a6d 100644
--- a/3party/boost/boost/mpl/aux_/lambda_spec.hpp
+++ b/3party/boost/boost/mpl/aux_/lambda_spec.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: lambda_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/void.hpp>
#include <boost/mpl/lambda_fwd.hpp>
diff --git a/3party/boost/boost/mpl/aux_/lambda_support.hpp b/3party/boost/boost/mpl/aux_/lambda_support.hpp
index 2d25348ff6..5b2af58583 100644
--- a/3party/boost/boost/mpl/aux_/lambda_support.hpp
+++ b/3party/boost/boost/mpl/aux_/lambda_support.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: lambda_support.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/lambda.hpp>
diff --git a/3party/boost/boost/mpl/aux_/largest_int.hpp b/3party/boost/boost/mpl/aux_/largest_int.hpp
index 1b9f1cf985..feaa1eca72 100644
--- a/3party/boost/boost/mpl/aux_/largest_int.hpp
+++ b/3party/boost/boost/mpl/aux_/largest_int.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: largest_int.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/if.hpp>
#include <boost/mpl/int.hpp>
diff --git a/3party/boost/boost/mpl/aux_/logical_op.hpp b/3party/boost/boost/mpl/aux_/logical_op.hpp
index d964049343..0ba2510262 100644
--- a/3party/boost/boost/mpl/aux_/logical_op.hpp
+++ b/3party/boost/boost/mpl/aux_/logical_op.hpp
@@ -7,9 +7,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: logical_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
diff --git a/3party/boost/boost/mpl/aux_/msvc_dtw.hpp b/3party/boost/boost/mpl/aux_/msvc_dtw.hpp
index b8953f59db..d595b231f3 100644
--- a/3party/boost/boost/mpl/aux_/msvc_dtw.hpp
+++ b/3party/boost/boost/mpl/aux_/msvc_dtw.hpp
@@ -7,9 +7,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: msvc_dtw.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
diff --git a/3party/boost/boost/mpl/aux_/msvc_eti_base.hpp b/3party/boost/boost/mpl/aux_/msvc_eti_base.hpp
index 61bd38ab5b..0d8ace6964 100644
--- a/3party/boost/boost/mpl/aux_/msvc_eti_base.hpp
+++ b/3party/boost/boost/mpl/aux_/msvc_eti_base.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: msvc_eti_base.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>
#include <boost/mpl/aux_/config/eti.hpp>
diff --git a/3party/boost/boost/mpl/aux_/msvc_is_class.hpp b/3party/boost/boost/mpl/aux_/msvc_is_class.hpp
index 54a2c5766c..acd40e3307 100644
--- a/3party/boost/boost/mpl/aux_/msvc_is_class.hpp
+++ b/3party/boost/boost/mpl/aux_/msvc_is_class.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: msvc_is_class.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/if.hpp>
#include <boost/mpl/bool.hpp>
diff --git a/3party/boost/boost/mpl/aux_/msvc_never_true.hpp b/3party/boost/boost/mpl/aux_/msvc_never_true.hpp
index ca35adca9c..2df9b81172 100644
--- a/3party/boost/boost/mpl/aux_/msvc_never_true.hpp
+++ b/3party/boost/boost/mpl/aux_/msvc_never_true.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: msvc_never_true.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/msvc_type.hpp b/3party/boost/boost/mpl/aux_/msvc_type.hpp
index 643fd83e99..bea244f319 100644
--- a/3party/boost/boost/mpl/aux_/msvc_type.hpp
+++ b/3party/boost/boost/mpl/aux_/msvc_type.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: msvc_type.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/eti.hpp>
#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>
diff --git a/3party/boost/boost/mpl/aux_/na.hpp b/3party/boost/boost/mpl/aux_/na.hpp
index b75fcdd28d..f079c1e78c 100644
--- a/3party/boost/boost/mpl/aux_/na.hpp
+++ b/3party/boost/boost/mpl/aux_/na.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: na.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/bool.hpp>
#include <boost/mpl/aux_/na_fwd.hpp>
diff --git a/3party/boost/boost/mpl/aux_/na_assert.hpp b/3party/boost/boost/mpl/aux_/na_assert.hpp
index df88ba3e56..1983c09061 100644
--- a/3party/boost/boost/mpl/aux_/na_assert.hpp
+++ b/3party/boost/boost/mpl/aux_/na_assert.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: na_assert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/na.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
diff --git a/3party/boost/boost/mpl/aux_/na_fwd.hpp b/3party/boost/boost/mpl/aux_/na_fwd.hpp
index 2409fc8a13..4388241939 100644
--- a/3party/boost/boost/mpl/aux_/na_fwd.hpp
+++ b/3party/boost/boost/mpl/aux_/na_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: na_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/adl_barrier.hpp>
diff --git a/3party/boost/boost/mpl/aux_/na_spec.hpp b/3party/boost/boost/mpl/aux_/na_spec.hpp
index 6cd7721ca8..d052fce18e 100644
--- a/3party/boost/boost/mpl/aux_/na_spec.hpp
+++ b/3party/boost/boost/mpl/aux_/na_spec.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: na_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/lambda_fwd.hpp>
diff --git a/3party/boost/boost/mpl/aux_/nested_type_wknd.hpp b/3party/boost/boost/mpl/aux_/nested_type_wknd.hpp
index cc4628672a..4207abdbc5 100644
--- a/3party/boost/boost/mpl/aux_/nested_type_wknd.hpp
+++ b/3party/boost/boost/mpl/aux_/nested_type_wknd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: nested_type_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/gcc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/nttp_decl.hpp b/3party/boost/boost/mpl/aux_/nttp_decl.hpp
index 65e2929130..8c344d874d 100644
--- a/3party/boost/boost/mpl/aux_/nttp_decl.hpp
+++ b/3party/boost/boost/mpl/aux_/nttp_decl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: nttp_decl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/nttp.hpp>
diff --git a/3party/boost/boost/mpl/aux_/numeric_cast_utils.hpp b/3party/boost/boost/mpl/aux_/numeric_cast_utils.hpp
index 11f04edd7b..a7ac85a99d 100644
--- a/3party/boost/boost/mpl/aux_/numeric_cast_utils.hpp
+++ b/3party/boost/boost/mpl/aux_/numeric_cast_utils.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numeric_cast_utils.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/numeric_cast.hpp>
#include <boost/mpl/apply_wrap.hpp>
diff --git a/3party/boost/boost/mpl/aux_/numeric_op.hpp b/3party/boost/boost/mpl/aux_/numeric_op.hpp
index 896935cc44..5492557013 100644
--- a/3party/boost/boost/mpl/aux_/numeric_op.hpp
+++ b/3party/boost/boost/mpl/aux_/numeric_op.hpp
@@ -13,9 +13,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numeric_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/numeric_cast.hpp>
diff --git a/3party/boost/boost/mpl/aux_/order_impl.hpp b/3party/boost/boost/mpl/aux_/order_impl.hpp
index 9d8b04c74e..2c145212d2 100644
--- a/3party/boost/boost/mpl/aux_/order_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/order_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: order_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/order_fwd.hpp>
#include <boost/mpl/if.hpp>
diff --git a/3party/boost/boost/mpl/aux_/overload_names.hpp b/3party/boost/boost/mpl/aux_/overload_names.hpp
index 27e86424d2..f9bbb3916b 100644
--- a/3party/boost/boost/mpl/aux_/overload_names.hpp
+++ b/3party/boost/boost/mpl/aux_/overload_names.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: overload_names.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/ptr_to_ref.hpp>
#include <boost/mpl/aux_/config/operators.hpp>
diff --git a/3party/boost/boost/mpl/aux_/partition_op.hpp b/3party/boost/boost/mpl/aux_/partition_op.hpp
index 1844d09dbe..79d49370f1 100644
--- a/3party/boost/boost/mpl/aux_/partition_op.hpp
+++ b/3party/boost/boost/mpl/aux_/partition_op.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: partition_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/apply.hpp>
#include <boost/mpl/eval_if.hpp>
diff --git a/3party/boost/boost/mpl/aux_/pop_back_impl.hpp b/3party/boost/boost/mpl/aux_/pop_back_impl.hpp
index 05613e59fd..2b54e0f83d 100644
--- a/3party/boost/boost/mpl/aux_/pop_back_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/pop_back_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pop_back_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/pop_back_fwd.hpp>
#include <boost/mpl/aux_/traits_lambda_spec.hpp>
diff --git a/3party/boost/boost/mpl/aux_/pop_front_impl.hpp b/3party/boost/boost/mpl/aux_/pop_front_impl.hpp
index 21a76f32c3..7697b1f593 100644
--- a/3party/boost/boost/mpl/aux_/pop_front_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/pop_front_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pop_front_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/pop_front_fwd.hpp>
#include <boost/mpl/aux_/traits_lambda_spec.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/add.hpp b/3party/boost/boost/mpl/aux_/preprocessor/add.hpp
index 26a70e7563..53e646ef6a 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/add.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/add.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: add.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/preprocessor.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp b/3party/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp
index c51636e68f..cab3989d1c 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: def_params_tail.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/limits/arity.hpp>
#include <boost/mpl/aux_/config/dtp.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/default_params.hpp b/3party/boost/boost/mpl/aux_/preprocessor/default_params.hpp
index 66d6d0397a..c3548c6c9b 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/default_params.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/default_params.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: default_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/preprocessor.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/enum.hpp b/3party/boost/boost/mpl/aux_/preprocessor/enum.hpp
index 11541a050c..64c5e6a8f6 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/enum.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/enum.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: enum.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/preprocessor.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/ext_params.hpp b/3party/boost/boost/mpl/aux_/preprocessor/ext_params.hpp
index a89535d6b2..f5e6e502cd 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/ext_params.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/ext_params.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: ext_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/preprocessor.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/filter_params.hpp b/3party/boost/boost/mpl/aux_/preprocessor/filter_params.hpp
index fefd984778..7c0df4f7d5 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/filter_params.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/filter_params.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: filter_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define BOOST_MPL_PP_FILTER_PARAMS_0(p1,p2,p3,p4,p5,p6,p7,p8,p9)
#define BOOST_MPL_PP_FILTER_PARAMS_1(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/is_seq.hpp b/3party/boost/boost/mpl/aux_/preprocessor/is_seq.hpp
index db7eaa40b3..cb6dcb98c1 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/is_seq.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/is_seq.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: is_seq.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/preprocessor/seq/size.hpp>
#include <boost/preprocessor/arithmetic/dec.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/params.hpp b/3party/boost/boost/mpl/aux_/preprocessor/params.hpp
index ac861ecc40..acad321903 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/params.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/params.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/preprocessor.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp b/3party/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp
index e2e1fa900d..de5535cea8 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: partial_spec_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/limits/arity.hpp>
#include <boost/mpl/aux_/preprocessor/params.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/range.hpp b/3party/boost/boost/mpl/aux_/preprocessor/range.hpp
index e69a9e1945..54094ee787 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/range.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/range.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: range.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/preprocessor/seq/subseq.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/repeat.hpp b/3party/boost/boost/mpl/aux_/preprocessor/repeat.hpp
index 2c314eca17..0511367665 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/repeat.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/repeat.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: repeat.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/preprocessor.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/sub.hpp b/3party/boost/boost/mpl/aux_/preprocessor/sub.hpp
index 7f5e2913a8..c794c749fa 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/sub.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/sub.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: sub.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/preprocessor.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/token_equal.hpp b/3party/boost/boost/mpl/aux_/preprocessor/token_equal.hpp
index b65f3d8bf4..ffdb20f9e4 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/token_equal.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/token_equal.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: token_equal.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/preprocessor/is_seq.hpp>
diff --git a/3party/boost/boost/mpl/aux_/preprocessor/tuple.hpp b/3party/boost/boost/mpl/aux_/preprocessor/tuple.hpp
index ed59407c5e..755bbc58e4 100644
--- a/3party/boost/boost/mpl/aux_/preprocessor/tuple.hpp
+++ b/3party/boost/boost/mpl/aux_/preprocessor/tuple.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: tuple.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define BOOST_MPL_PP_TUPLE_11_ELEM_0(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e0
#define BOOST_MPL_PP_TUPLE_11_ELEM_1(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e1
diff --git a/3party/boost/boost/mpl/aux_/ptr_to_ref.hpp b/3party/boost/boost/mpl/aux_/ptr_to_ref.hpp
index e81ebe8cff..8517b30294 100644
--- a/3party/boost/boost/mpl/aux_/ptr_to_ref.hpp
+++ b/3party/boost/boost/mpl/aux_/ptr_to_ref.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: ptr_to_ref.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/static_cast.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
diff --git a/3party/boost/boost/mpl/aux_/push_back_impl.hpp b/3party/boost/boost/mpl/aux_/push_back_impl.hpp
index 732c43c802..27e7a60443 100644
--- a/3party/boost/boost/mpl/aux_/push_back_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/push_back_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_back_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $
-// $Date: 2009-08-20 00:50:16 -0700 (Thu, 20 Aug 2009) $
-// $Revision: 55679 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_back_fwd.hpp>
#include <boost/mpl/assert.hpp>
diff --git a/3party/boost/boost/mpl/aux_/push_front_impl.hpp b/3party/boost/boost/mpl/aux_/push_front_impl.hpp
index ae1bc22d33..5b83ee7645 100644
--- a/3party/boost/boost/mpl/aux_/push_front_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/push_front_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_front_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $
-// $Date: 2009-08-20 00:50:16 -0700 (Thu, 20 Aug 2009) $
-// $Revision: 55679 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_front_fwd.hpp>
#include <boost/mpl/assert.hpp>
diff --git a/3party/boost/boost/mpl/aux_/range_c/O1_size.hpp b/3party/boost/boost/mpl/aux_/range_c/O1_size.hpp
index 69452858da..9b393e8490 100644
--- a/3party/boost/boost/mpl/aux_/range_c/O1_size.hpp
+++ b/3party/boost/boost/mpl/aux_/range_c/O1_size.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/O1_size_fwd.hpp>
#include <boost/mpl/aux_/range_c/size.hpp>
diff --git a/3party/boost/boost/mpl/aux_/range_c/back.hpp b/3party/boost/boost/mpl/aux_/range_c/back.hpp
index 0d6cc6e7f5..5490108767 100644
--- a/3party/boost/boost/mpl/aux_/range_c/back.hpp
+++ b/3party/boost/boost/mpl/aux_/range_c/back.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/back_fwd.hpp>
#include <boost/mpl/prior.hpp>
diff --git a/3party/boost/boost/mpl/aux_/range_c/empty.hpp b/3party/boost/boost/mpl/aux_/range_c/empty.hpp
index d78e5b3d41..574bdf2a99 100644
--- a/3party/boost/boost/mpl/aux_/range_c/empty.hpp
+++ b/3party/boost/boost/mpl/aux_/range_c/empty.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/empty_fwd.hpp>
#include <boost/mpl/equal_to.hpp>
diff --git a/3party/boost/boost/mpl/aux_/range_c/front.hpp b/3party/boost/boost/mpl/aux_/range_c/front.hpp
index e3265ab3c9..2964ab505c 100644
--- a/3party/boost/boost/mpl/aux_/range_c/front.hpp
+++ b/3party/boost/boost/mpl/aux_/range_c/front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/front_fwd.hpp>
#include <boost/mpl/aux_/range_c/tag.hpp>
diff --git a/3party/boost/boost/mpl/aux_/range_c/iterator.hpp b/3party/boost/boost/mpl/aux_/range_c/iterator.hpp
index 5d5b1d02c6..2c5290528c 100644
--- a/3party/boost/boost/mpl/aux_/range_c/iterator.hpp
+++ b/3party/boost/boost/mpl/aux_/range_c/iterator.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/iterator_tags.hpp>
#include <boost/mpl/advance_fwd.hpp>
diff --git a/3party/boost/boost/mpl/aux_/range_c/size.hpp b/3party/boost/boost/mpl/aux_/range_c/size.hpp
index dbd8adef70..761a97cc17 100644
--- a/3party/boost/boost/mpl/aux_/range_c/size.hpp
+++ b/3party/boost/boost/mpl/aux_/range_c/size.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_fwd.hpp>
#include <boost/mpl/minus.hpp>
diff --git a/3party/boost/boost/mpl/aux_/range_c/tag.hpp b/3party/boost/boost/mpl/aux_/range_c/tag.hpp
index f56d86f94e..7f8fdde0a1 100644
--- a/3party/boost/boost/mpl/aux_/range_c/tag.hpp
+++ b/3party/boost/boost/mpl/aux_/range_c/tag.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl { namespace aux {
diff --git a/3party/boost/boost/mpl/aux_/reverse_fold_impl.hpp b/3party/boost/boost/mpl/aux_/reverse_fold_impl.hpp
index 9c17c01295..a27a35fa13 100644
--- a/3party/boost/boost/mpl/aux_/reverse_fold_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/reverse_fold_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: reverse_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/aux_/reverse_fold_impl_body.hpp b/3party/boost/boost/mpl/aux_/reverse_fold_impl_body.hpp
index c815e0aed9..0f80010667 100644
--- a/3party/boost/boost/mpl/aux_/reverse_fold_impl_body.hpp
+++ b/3party/boost/boost/mpl/aux_/reverse_fold_impl_body.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: reverse_fold_impl_body.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
# include <boost/mpl/limits/unrolling.hpp>
# include <boost/mpl/aux_/preprocessor/repeat.hpp>
diff --git a/3party/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp b/3party/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp
index 63557ce8ee..83182a2e90 100644
--- a/3party/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: reverse_iter_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/aux_/sequence_wrapper.hpp b/3party/boost/boost/mpl/aux_/sequence_wrapper.hpp
index 8b49c74ed0..3f5e553039 100644
--- a/3party/boost/boost/mpl/aux_/sequence_wrapper.hpp
+++ b/3party/boost/boost/mpl/aux_/sequence_wrapper.hpp
@@ -13,9 +13,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: sequence_wrapper.hpp 49271 2008-10-11 06:46:00Z agurtovoy $
-// $Date: 2008-10-10 23:46:00 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49271 $
+// $Id$
+// $Date$
+// $Revision$
# include <boost/mpl/aux_/config/ctps.hpp>
# include <boost/mpl/aux_/config/static_constant.hpp>
diff --git a/3party/boost/boost/mpl/aux_/shift_op.hpp b/3party/boost/boost/mpl/aux_/shift_op.hpp
index 982d66aec4..b9840bf5c5 100644
--- a/3party/boost/boost/mpl/aux_/shift_op.hpp
+++ b/3party/boost/boost/mpl/aux_/shift_op.hpp
@@ -9,9 +9,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: shift_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/integral_c.hpp>
diff --git a/3party/boost/boost/mpl/aux_/single_element_iter.hpp b/3party/boost/boost/mpl/aux_/single_element_iter.hpp
index e17abb9479..9aceb7474c 100644
--- a/3party/boost/boost/mpl/aux_/single_element_iter.hpp
+++ b/3party/boost/boost/mpl/aux_/single_element_iter.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: single_element_iter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/iterator_tags.hpp>
#include <boost/mpl/advance_fwd.hpp>
diff --git a/3party/boost/boost/mpl/aux_/size_impl.hpp b/3party/boost/boost/mpl/aux_/size_impl.hpp
index 73dc50d19b..50f5ee9189 100644
--- a/3party/boost/boost/mpl/aux_/size_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/size_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_fwd.hpp>
#include <boost/mpl/begin_end.hpp>
diff --git a/3party/boost/boost/mpl/aux_/sort_impl.hpp b/3party/boost/boost/mpl/aux_/sort_impl.hpp
index 76bc311475..382042190f 100644
--- a/3party/boost/boost/mpl/aux_/sort_impl.hpp
+++ b/3party/boost/boost/mpl/aux_/sort_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: sort_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/partition.hpp>
#include <boost/mpl/copy.hpp>
diff --git a/3party/boost/boost/mpl/aux_/static_cast.hpp b/3party/boost/boost/mpl/aux_/static_cast.hpp
index 8c12128e30..f72d1c7c9b 100644
--- a/3party/boost/boost/mpl/aux_/static_cast.hpp
+++ b/3party/boost/boost/mpl/aux_/static_cast.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: static_cast.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/aux_/template_arity.hpp b/3party/boost/boost/mpl/aux_/template_arity.hpp
index 5e3f6e012a..f011159825 100644
--- a/3party/boost/boost/mpl/aux_/template_arity.hpp
+++ b/3party/boost/boost/mpl/aux_/template_arity.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: template_arity.hpp 61584 2010-04-26 18:48:26Z agurtovoy $
-// $Date: 2010-04-26 11:48:26 -0700 (Mon, 26 Apr 2010) $
-// $Revision: 61584 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/ttp.hpp>
#include <boost/mpl/aux_/config/lambda.hpp>
diff --git a/3party/boost/boost/mpl/aux_/template_arity_fwd.hpp b/3party/boost/boost/mpl/aux_/template_arity_fwd.hpp
index 44bc9d2146..19d63a3961 100644
--- a/3party/boost/boost/mpl/aux_/template_arity_fwd.hpp
+++ b/3party/boost/boost/mpl/aux_/template_arity_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: template_arity_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl { namespace aux {
diff --git a/3party/boost/boost/mpl/aux_/test.hpp b/3party/boost/boost/mpl/aux_/test.hpp
index f676a31e99..8d1dea62c1 100644
--- a/3party/boost/boost/mpl/aux_/test.hpp
+++ b/3party/boost/boost/mpl/aux_/test.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: test.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/test/test_case.hpp>
#include <boost/mpl/aux_/test/data.hpp>
diff --git a/3party/boost/boost/mpl/aux_/test/assert.hpp b/3party/boost/boost/mpl/aux_/test/assert.hpp
index 0d107dfc74..3bd8ba09c2 100644
--- a/3party/boost/boost/mpl/aux_/test/assert.hpp
+++ b/3party/boost/boost/mpl/aux_/test/assert.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: assert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/assert.hpp>
#include <boost/preprocessor/cat.hpp>
diff --git a/3party/boost/boost/mpl/aux_/test/data.hpp b/3party/boost/boost/mpl/aux_/test/data.hpp
index 6eee8239a7..373e6c326c 100644
--- a/3party/boost/boost/mpl/aux_/test/data.hpp
+++ b/3party/boost/boost/mpl/aux_/test/data.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: data.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/noncopyable.hpp>
diff --git a/3party/boost/boost/mpl/aux_/test/test_case.hpp b/3party/boost/boost/mpl/aux_/test/test_case.hpp
index a23330cafc..b168a005a1 100644
--- a/3party/boost/boost/mpl/aux_/test/test_case.hpp
+++ b/3party/boost/boost/mpl/aux_/test/test_case.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: test_case.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/preprocessor/cat.hpp>
diff --git a/3party/boost/boost/mpl/aux_/traits_lambda_spec.hpp b/3party/boost/boost/mpl/aux_/traits_lambda_spec.hpp
index c9b60fe78f..4a7ff26b58 100644
--- a/3party/boost/boost/mpl/aux_/traits_lambda_spec.hpp
+++ b/3party/boost/boost/mpl/aux_/traits_lambda_spec.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: traits_lambda_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/sequence_tag_fwd.hpp>
#include <boost/mpl/void.hpp>
diff --git a/3party/boost/boost/mpl/aux_/transform_iter.hpp b/3party/boost/boost/mpl/aux_/transform_iter.hpp
index 3faee5f42f..e42fcc6b02 100644
--- a/3party/boost/boost/mpl/aux_/transform_iter.hpp
+++ b/3party/boost/boost/mpl/aux_/transform_iter.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: transform_iter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/apply.hpp>
#include <boost/mpl/iterator_tags.hpp>
diff --git a/3party/boost/boost/mpl/aux_/type_wrapper.hpp b/3party/boost/boost/mpl/aux_/type_wrapper.hpp
index 6d6091bd35..f3ac3079a9 100644
--- a/3party/boost/boost/mpl/aux_/type_wrapper.hpp
+++ b/3party/boost/boost/mpl/aux_/type_wrapper.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: type_wrapper.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/ctps.hpp>
diff --git a/3party/boost/boost/mpl/aux_/unwrap.hpp b/3party/boost/boost/mpl/aux_/unwrap.hpp
index bc734f031b..caeb97d7d3 100644
--- a/3party/boost/boost/mpl/aux_/unwrap.hpp
+++ b/3party/boost/boost/mpl/aux_/unwrap.hpp
@@ -11,15 +11,17 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: unwrap.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/ref.hpp>
+#include <boost/mpl/aux_/config/gpu.hpp>
namespace boost { namespace mpl { namespace aux {
template< typename F >
+BOOST_MPL_CFG_GPU_ENABLED
inline
F& unwrap(F& f, long)
{
@@ -27,6 +29,7 @@ F& unwrap(F& f, long)
}
template< typename F >
+BOOST_MPL_CFG_GPU_ENABLED
inline
F&
unwrap(reference_wrapper<F>& f, int)
@@ -35,6 +38,7 @@ unwrap(reference_wrapper<F>& f, int)
}
template< typename F >
+BOOST_MPL_CFG_GPU_ENABLED
inline
F&
unwrap(reference_wrapper<F> const& f, int)
diff --git a/3party/boost/boost/mpl/aux_/value_wknd.hpp b/3party/boost/boost/mpl/aux_/value_wknd.hpp
index 7baa8bf7eb..23fefde021 100644
--- a/3party/boost/boost/mpl/aux_/value_wknd.hpp
+++ b/3party/boost/boost/mpl/aux_/value_wknd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: value_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/static_cast.hpp>
#include <boost/mpl/aux_/config/integral.hpp>
diff --git a/3party/boost/boost/mpl/aux_/yes_no.hpp b/3party/boost/boost/mpl/aux_/yes_no.hpp
index ebcb00dbbd..21a18a21c2 100644
--- a/3party/boost/boost/mpl/aux_/yes_no.hpp
+++ b/3party/boost/boost/mpl/aux_/yes_no.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: yes_no.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/nttp_decl.hpp>
#include <boost/mpl/aux_/config/arrays.hpp>
diff --git a/3party/boost/boost/mpl/back.hpp b/3party/boost/boost/mpl/back.hpp
index ff6b5d601a..2778c427c3 100644
--- a/3party/boost/boost/mpl/back.hpp
+++ b/3party/boost/boost/mpl/back.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/back_fwd.hpp>
#include <boost/mpl/aux_/back_impl.hpp>
diff --git a/3party/boost/boost/mpl/back_fwd.hpp b/3party/boost/boost/mpl/back_fwd.hpp
index c8b1fe9db4..119722c31a 100644
--- a/3party/boost/boost/mpl/back_fwd.hpp
+++ b/3party/boost/boost/mpl/back_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: back_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/back_inserter.hpp b/3party/boost/boost/mpl/back_inserter.hpp
index ce2a2849a4..8fc4083c3a 100644
--- a/3party/boost/boost/mpl/back_inserter.hpp
+++ b/3party/boost/boost/mpl/back_inserter.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: back_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_back.hpp>
#include <boost/mpl/inserter.hpp>
diff --git a/3party/boost/boost/mpl/base.hpp b/3party/boost/boost/mpl/base.hpp
index 0dcd712ec6..8f438490ef 100644
--- a/3party/boost/boost/mpl/base.hpp
+++ b/3party/boost/boost/mpl/base.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: base.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
diff --git a/3party/boost/boost/mpl/begin.hpp b/3party/boost/boost/mpl/begin.hpp
index 9dab265056..15bdf7e388 100644
--- a/3party/boost/boost/mpl/begin.hpp
+++ b/3party/boost/boost/mpl/begin.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: begin.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
diff --git a/3party/boost/boost/mpl/begin_end.hpp b/3party/boost/boost/mpl/begin_end.hpp
index 6c3accc77c..b7074afd20 100644
--- a/3party/boost/boost/mpl/begin_end.hpp
+++ b/3party/boost/boost/mpl/begin_end.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end_fwd.hpp>
#include <boost/mpl/aux_/begin_end_impl.hpp>
diff --git a/3party/boost/boost/mpl/begin_end_fwd.hpp b/3party/boost/boost/mpl/begin_end_fwd.hpp
index d1edaca7c8..70ef9efec4 100644
--- a/3party/boost/boost/mpl/begin_end_fwd.hpp
+++ b/3party/boost/boost/mpl/begin_end_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: begin_end_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/bind.hpp b/3party/boost/boost/mpl/bind.hpp
index 25e46b4ff8..63ee3f27e2 100644
--- a/3party/boost/boost/mpl/bind.hpp
+++ b/3party/boost/boost/mpl/bind.hpp
@@ -15,9 +15,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/bind_fwd.hpp>
diff --git a/3party/boost/boost/mpl/bind_fwd.hpp b/3party/boost/boost/mpl/bind_fwd.hpp
index 35795ac00e..4746edd60b 100644
--- a/3party/boost/boost/mpl/bind_fwd.hpp
+++ b/3party/boost/boost/mpl/bind_fwd.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bind_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/aux_/na.hpp>
diff --git a/3party/boost/boost/mpl/bitand.hpp b/3party/boost/boost/mpl/bitand.hpp
index 7292569f01..9c31c79295 100644
--- a/3party/boost/boost/mpl/bitand.hpp
+++ b/3party/boost/boost/mpl/bitand.hpp
@@ -11,15 +11,15 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bitand.hpp 63520 2010-07-02 08:59:55Z agurtovoy $
-// $Date: 2010-07-02 01:59:55 -0700 (Fri, 02 Jul 2010) $
-// $Revision: 63520 $
+// $Id$
+// $Date$
+// $Revision$
// agurt, 23/jan/10: workaround a conflict with <iso646.h> header's
// macros, see http://tinyurl.com/ycwdxco; 'defined(bitand)'
// has to be checked in a separate condition, otherwise GCC complains
// about 'bitand' being an alternative token
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
#ifndef __GCCXML__
#if defined(bitand)
# pragma push_macro("bitand")
@@ -34,7 +34,7 @@
#define AUX778076_OP_TOKEN &
#include <boost/mpl/aux_/arithmetic_op.hpp>
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
#ifndef __GCCXML__
#if defined(bitand)
# pragma pop_macro("bitand")
diff --git a/3party/boost/boost/mpl/bitor.hpp b/3party/boost/boost/mpl/bitor.hpp
index 11f092c8ef..f009743776 100644
--- a/3party/boost/boost/mpl/bitor.hpp
+++ b/3party/boost/boost/mpl/bitor.hpp
@@ -11,15 +11,15 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bitor.hpp 63520 2010-07-02 08:59:55Z agurtovoy $
-// $Date: 2010-07-02 01:59:55 -0700 (Fri, 02 Jul 2010) $
-// $Revision: 63520 $
+// $Id$
+// $Date$
+// $Revision$
// agurt, 23/jan/10: workaround a conflict with <iso646.h> header's
// macros, see http://tinyurl.com/ycwdxco; 'defined(bitor)'
// has to be checked in a separate condition, otherwise GCC complains
// about 'bitor' being an alternative token
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
#ifndef __GCCXML__
#if defined(bitor)
# pragma push_macro("bitor")
@@ -34,7 +34,7 @@
#define AUX778076_OP_TOKEN |
#include <boost/mpl/aux_/arithmetic_op.hpp>
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
#ifndef __GCCXML__
#if defined(bitor)
# pragma pop_macro("bitor")
diff --git a/3party/boost/boost/mpl/bitwise.hpp b/3party/boost/boost/mpl/bitwise.hpp
index fdaa0c5659..9deb23ef2e 100644
--- a/3party/boost/boost/mpl/bitwise.hpp
+++ b/3party/boost/boost/mpl/bitwise.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bitwise.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/bitand.hpp>
#include <boost/mpl/bitor.hpp>
diff --git a/3party/boost/boost/mpl/bitxor.hpp b/3party/boost/boost/mpl/bitxor.hpp
index 1d1ec6e5d6..7f98f17370 100644
--- a/3party/boost/boost/mpl/bitxor.hpp
+++ b/3party/boost/boost/mpl/bitxor.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bitxor.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME bitxor_
#define AUX778076_OP_PREFIX bitxor
diff --git a/3party/boost/boost/mpl/bool.hpp b/3party/boost/boost/mpl/bool.hpp
index cabf22f2ce..0a6180cedf 100644
--- a/3party/boost/boost/mpl/bool.hpp
+++ b/3party/boost/boost/mpl/bool.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bool.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/bool_fwd.hpp>
#include <boost/mpl/integral_c_tag.hpp>
@@ -26,7 +26,7 @@ template< bool C_ > struct bool_
typedef integral_c_tag tag;
typedef bool_ type;
typedef bool value_type;
- operator bool() const { return this->value; }
+ BOOST_CONSTEXPR operator bool() const { return this->value; }
};
#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
diff --git a/3party/boost/boost/mpl/bool_fwd.hpp b/3party/boost/boost/mpl/bool_fwd.hpp
index e71ab9cc78..e629252848 100644
--- a/3party/boost/boost/mpl/bool_fwd.hpp
+++ b/3party/boost/boost/mpl/bool_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: bool_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/adl_barrier.hpp>
diff --git a/3party/boost/boost/mpl/clear.hpp b/3party/boost/boost/mpl/clear.hpp
index 9cf16fab46..c6b95edf4b 100644
--- a/3party/boost/boost/mpl/clear.hpp
+++ b/3party/boost/boost/mpl/clear.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/clear_fwd.hpp>
#include <boost/mpl/aux_/clear_impl.hpp>
diff --git a/3party/boost/boost/mpl/clear_fwd.hpp b/3party/boost/boost/mpl/clear_fwd.hpp
index e660bc26e9..d14a1d2b24 100644
--- a/3party/boost/boost/mpl/clear_fwd.hpp
+++ b/3party/boost/boost/mpl/clear_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: clear_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/comparison.hpp b/3party/boost/boost/mpl/comparison.hpp
index 223b9efe17..99dca9dd80 100644
--- a/3party/boost/boost/mpl/comparison.hpp
+++ b/3party/boost/boost/mpl/comparison.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: comparison.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/equal_to.hpp>
#include <boost/mpl/not_equal_to.hpp>
diff --git a/3party/boost/boost/mpl/contains.hpp b/3party/boost/boost/mpl/contains.hpp
index 620fe41e73..02c2aa4f8b 100644
--- a/3party/boost/boost/mpl/contains.hpp
+++ b/3party/boost/boost/mpl/contains.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: contains.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/contains_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/contains_fwd.hpp b/3party/boost/boost/mpl/contains_fwd.hpp
index af7721a594..c7c667285d 100644
--- a/3party/boost/boost/mpl/contains_fwd.hpp
+++ b/3party/boost/boost/mpl/contains_fwd.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: contains_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/copy.hpp b/3party/boost/boost/mpl/copy.hpp
index 6849ec87ab..6eafba3982 100644
--- a/3party/boost/boost/mpl/copy.hpp
+++ b/3party/boost/boost/mpl/copy.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: copy.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/reverse_fold.hpp>
diff --git a/3party/boost/boost/mpl/copy_if.hpp b/3party/boost/boost/mpl/copy_if.hpp
index c7eb283aa3..96d9172df9 100644
--- a/3party/boost/boost/mpl/copy_if.hpp
+++ b/3party/boost/boost/mpl/copy_if.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: copy_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/reverse_fold.hpp>
diff --git a/3party/boost/boost/mpl/count.hpp b/3party/boost/boost/mpl/count.hpp
index 04fdb5f309..c845662c2f 100644
--- a/3party/boost/boost/mpl/count.hpp
+++ b/3party/boost/boost/mpl/count.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: count.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/count_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/count_fwd.hpp b/3party/boost/boost/mpl/count_fwd.hpp
index 4a0b4efa12..7d1ee17fa6 100644
--- a/3party/boost/boost/mpl/count_fwd.hpp
+++ b/3party/boost/boost/mpl/count_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: count_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/count_if.hpp b/3party/boost/boost/mpl/count_if.hpp
index d800ad015e..d81c395705 100644
--- a/3party/boost/boost/mpl/count_if.hpp
+++ b/3party/boost/boost/mpl/count_if.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: count_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/next.hpp>
diff --git a/3party/boost/boost/mpl/deque.hpp b/3party/boost/boost/mpl/deque.hpp
index 0fa2fcf7fa..729bae97b7 100644
--- a/3party/boost/boost/mpl/deque.hpp
+++ b/3party/boost/boost/mpl/deque.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: deque.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/vector.hpp>
diff --git a/3party/boost/boost/mpl/deref.hpp b/3party/boost/boost/mpl/deref.hpp
index 15479e17c5..1105ec9038 100644
--- a/3party/boost/boost/mpl/deref.hpp
+++ b/3party/boost/boost/mpl/deref.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: deref.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/msvc_type.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
diff --git a/3party/boost/boost/mpl/distance.hpp b/3party/boost/boost/mpl/distance.hpp
index 8ecd3c1b26..95f4f33510 100644
--- a/3party/boost/boost/mpl/distance.hpp
+++ b/3party/boost/boost/mpl/distance.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: distance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/distance_fwd.hpp>
#include <boost/mpl/iter_fold.hpp>
diff --git a/3party/boost/boost/mpl/distance_fwd.hpp b/3party/boost/boost/mpl/distance_fwd.hpp
index 766ceb4290..a69a7c5140 100644
--- a/3party/boost/boost/mpl/distance_fwd.hpp
+++ b/3party/boost/boost/mpl/distance_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: distance_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/common_name_wknd.hpp>
diff --git a/3party/boost/boost/mpl/divides.hpp b/3party/boost/boost/mpl/divides.hpp
index 6f544966e3..55c8b0d10a 100644
--- a/3party/boost/boost/mpl/divides.hpp
+++ b/3party/boost/boost/mpl/divides.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: divides.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME divides
#define AUX778076_OP_TOKEN /
diff --git a/3party/boost/boost/mpl/empty.hpp b/3party/boost/boost/mpl/empty.hpp
index e25c04c3ba..1185324c1b 100644
--- a/3party/boost/boost/mpl/empty.hpp
+++ b/3party/boost/boost/mpl/empty.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/empty_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/empty_base.hpp b/3party/boost/boost/mpl/empty_base.hpp
index 095003eba4..a5841cf17a 100644
--- a/3party/boost/boost/mpl/empty_base.hpp
+++ b/3party/boost/boost/mpl/empty_base.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty_base.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/bool.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
diff --git a/3party/boost/boost/mpl/empty_fwd.hpp b/3party/boost/boost/mpl/empty_fwd.hpp
index 4bf68681e5..551c9660ab 100644
--- a/3party/boost/boost/mpl/empty_fwd.hpp
+++ b/3party/boost/boost/mpl/empty_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/empty_sequence.hpp b/3party/boost/boost/mpl/empty_sequence.hpp
index fe505ea30a..94f5f5a387 100644
--- a/3party/boost/boost/mpl/empty_sequence.hpp
+++ b/3party/boost/boost/mpl/empty_sequence.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty_sequence.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_fwd.hpp>
#include <boost/mpl/int.hpp>
diff --git a/3party/boost/boost/mpl/end.hpp b/3party/boost/boost/mpl/end.hpp
index ddee55670b..cb8d525f51 100644
--- a/3party/boost/boost/mpl/end.hpp
+++ b/3party/boost/boost/mpl/end.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
diff --git a/3party/boost/boost/mpl/equal.hpp b/3party/boost/boost/mpl/equal.hpp
index 09e26dbbab..8937ef3a1d 100644
--- a/3party/boost/boost/mpl/equal.hpp
+++ b/3party/boost/boost/mpl/equal.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: equal.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/iter_fold_if_impl.hpp>
#include <boost/mpl/aux_/iter_apply.hpp>
diff --git a/3party/boost/boost/mpl/equal_to.hpp b/3party/boost/boost/mpl/equal_to.hpp
index 359031c5c5..5dfc87dbe2 100644
--- a/3party/boost/boost/mpl/equal_to.hpp
+++ b/3party/boost/boost/mpl/equal_to.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: equal_to.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME equal_to
#define AUX778076_OP_TOKEN ==
diff --git a/3party/boost/boost/mpl/erase.hpp b/3party/boost/boost/mpl/erase.hpp
index 2bc09ad117..abcfdbd870 100644
--- a/3party/boost/boost/mpl/erase.hpp
+++ b/3party/boost/boost/mpl/erase.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/erase_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/erase_fwd.hpp b/3party/boost/boost/mpl/erase_fwd.hpp
index 1f833ca02b..44e38eac28 100644
--- a/3party/boost/boost/mpl/erase_fwd.hpp
+++ b/3party/boost/boost/mpl/erase_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/erase_key.hpp b/3party/boost/boost/mpl/erase_key.hpp
index 9dcca4b408..0e7b820e95 100644
--- a/3party/boost/boost/mpl/erase_key.hpp
+++ b/3party/boost/boost/mpl/erase_key.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase_key.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/erase_key_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/erase_key_fwd.hpp b/3party/boost/boost/mpl/erase_key_fwd.hpp
index cebe5c662b..54265eef81 100644
--- a/3party/boost/boost/mpl/erase_key_fwd.hpp
+++ b/3party/boost/boost/mpl/erase_key_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase_key_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/eval_if.hpp b/3party/boost/boost/mpl/eval_if.hpp
index f1a5b7002f..e892703fd8 100644
--- a/3party/boost/boost/mpl/eval_if.hpp
+++ b/3party/boost/boost/mpl/eval_if.hpp
@@ -4,15 +4,15 @@
// Copyright Aleksey Gurtovoy 2000-2004
//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+// 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/mpl for documentation.
-// $Id: eval_if.hpp 61921 2010-05-11 21:33:24Z neilgroves $
-// $Date: 2010-05-11 14:33:24 -0700 (Tue, 11 May 2010) $
-// $Revision: 61921 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/if.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
@@ -43,7 +43,7 @@ struct eval_if
BOOST_MPL_AUX_LAMBDA_SUPPORT(3,eval_if,(C,F1,F2))
};
-// (almost) copy & paste in order to save one more
+// (almost) copy & paste in order to save one more
// recursively nested template instantiation to user
template<
bool C
diff --git a/3party/boost/boost/mpl/filter_view.hpp b/3party/boost/boost/mpl/filter_view.hpp
index c56b2157c2..e2830d00ca 100644
--- a/3party/boost/boost/mpl/filter_view.hpp
+++ b/3party/boost/boost/mpl/filter_view.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: filter_view.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/lambda.hpp>
diff --git a/3party/boost/boost/mpl/find.hpp b/3party/boost/boost/mpl/find.hpp
index 7b094239b8..31a8b0eb89 100644
--- a/3party/boost/boost/mpl/find.hpp
+++ b/3party/boost/boost/mpl/find.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: find.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/find_if.hpp>
#include <boost/mpl/same_as.hpp>
diff --git a/3party/boost/boost/mpl/find_if.hpp b/3party/boost/boost/mpl/find_if.hpp
index a066e7120b..83a007e77e 100644
--- a/3party/boost/boost/mpl/find_if.hpp
+++ b/3party/boost/boost/mpl/find_if.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: find_if.hpp 49274 2008-10-11 07:22:05Z agurtovoy $
-// $Date: 2008-10-11 00:22:05 -0700 (Sat, 11 Oct 2008) $
-// $Revision: 49274 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/find_if_pred.hpp>
#include <boost/mpl/arg.hpp>
diff --git a/3party/boost/boost/mpl/fold.hpp b/3party/boost/boost/mpl/fold.hpp
index e5e02bd712..0bc67ef3d6 100644
--- a/3party/boost/boost/mpl/fold.hpp
+++ b/3party/boost/boost/mpl/fold.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/O1_size.hpp>
diff --git a/3party/boost/boost/mpl/for_each.hpp b/3party/boost/boost/mpl/for_each.hpp
index 016d99010a..6b40ce1663 100644
--- a/3party/boost/boost/mpl/for_each.hpp
+++ b/3party/boost/boost/mpl/for_each.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: for_each.hpp 55648 2009-08-18 05:16:53Z agurtovoy $
-// $Date: 2009-08-17 22:16:53 -0700 (Mon, 17 Aug 2009) $
-// $Revision: 55648 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/is_sequence.hpp>
#include <boost/mpl/begin_end.hpp>
@@ -22,6 +22,7 @@
#include <boost/mpl/deref.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/mpl/assert.hpp>
+#include <boost/mpl/aux_/config/gpu.hpp>
#include <boost/mpl/aux_/unwrap.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -40,6 +41,7 @@ struct for_each_impl
, typename TransformFunc
, typename F
>
+ BOOST_MPL_CFG_GPU_ENABLED
static void execute(
Iterator*
, LastIterator*
@@ -59,6 +61,7 @@ struct for_each_impl<false>
, typename TransformFunc
, typename F
>
+ BOOST_MPL_CFG_GPU_ENABLED
static void execute(
Iterator*
, LastIterator*
@@ -89,6 +92,7 @@ template<
, typename TransformOp
, typename F
>
+BOOST_MPL_CFG_GPU_ENABLED
inline
void for_each(F f, Sequence* = 0, TransformOp* = 0)
{
@@ -105,10 +109,13 @@ template<
typename Sequence
, typename F
>
+BOOST_MPL_CFG_GPU_ENABLED
inline
void for_each(F f, Sequence* = 0)
{
- for_each<Sequence, identity<> >(f);
+ // jfalcou: fully qualifying this call so it doesnt clash with phoenix::for_each
+ // ons ome compilers -- done on 02/28/2011
+ boost::mpl::for_each<Sequence, identity<> >(f);
}
}}
diff --git a/3party/boost/boost/mpl/front.hpp b/3party/boost/boost/mpl/front.hpp
index b2c5678c18..b222ff2541 100644
--- a/3party/boost/boost/mpl/front.hpp
+++ b/3party/boost/boost/mpl/front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/front_fwd.hpp>
#include <boost/mpl/aux_/front_impl.hpp>
diff --git a/3party/boost/boost/mpl/front_fwd.hpp b/3party/boost/boost/mpl/front_fwd.hpp
index 62750010eb..f01282a77b 100644
--- a/3party/boost/boost/mpl/front_fwd.hpp
+++ b/3party/boost/boost/mpl/front_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: front_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/front_inserter.hpp b/3party/boost/boost/mpl/front_inserter.hpp
index 7220f768bb..0a6b197ef8 100644
--- a/3party/boost/boost/mpl/front_inserter.hpp
+++ b/3party/boost/boost/mpl/front_inserter.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: front_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_front.hpp>
#include <boost/mpl/inserter.hpp>
diff --git a/3party/boost/boost/mpl/greater.hpp b/3party/boost/boost/mpl/greater.hpp
index c73276b2b3..b1f0a2cf13 100644
--- a/3party/boost/boost/mpl/greater.hpp
+++ b/3party/boost/boost/mpl/greater.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: greater.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME greater
#define AUX778076_OP_TOKEN >
diff --git a/3party/boost/boost/mpl/greater_equal.hpp b/3party/boost/boost/mpl/greater_equal.hpp
index 119710f87c..7a06a62e8e 100644
--- a/3party/boost/boost/mpl/greater_equal.hpp
+++ b/3party/boost/boost/mpl/greater_equal.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: greater_equal.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME greater_equal
#define AUX778076_OP_TOKEN >=
diff --git a/3party/boost/boost/mpl/has_key.hpp b/3party/boost/boost/mpl/has_key.hpp
index bdb96b4e42..ac3a5c7bb1 100644
--- a/3party/boost/boost/mpl/has_key.hpp
+++ b/3party/boost/boost/mpl/has_key.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_key.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/has_key_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/has_key_fwd.hpp b/3party/boost/boost/mpl/has_key_fwd.hpp
index 9c784a16a3..54b7ed622d 100644
--- a/3party/boost/boost/mpl/has_key_fwd.hpp
+++ b/3party/boost/boost/mpl/has_key_fwd.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_key_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/has_xxx.hpp b/3party/boost/boost/mpl/has_xxx.hpp
index 121bc4853f..82e67ddca4 100644
--- a/3party/boost/boost/mpl/has_xxx.hpp
+++ b/3party/boost/boost/mpl/has_xxx.hpp
@@ -12,9 +12,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_xxx.hpp 64146 2010-07-19 00:46:31Z djwalker $
-// $Date: 2010-07-18 17:46:31 -0700 (Sun, 18 Jul 2010) $
-// $Revision: 64146 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/bool.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
@@ -155,10 +155,11 @@ template<> struct trait<T> \
// SFINAE-based implementations below are derived from a USENET newsgroup's
// posting by Rani Sharoni (comp.lang.c++.moderated, 2002-03-17 07:45:09 PST)
-# elif BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+# elif BOOST_WORKAROUND(BOOST_MSVC, <= 1400) \
+ || (BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800)) && defined(__CUDACC__)) \
|| BOOST_WORKAROUND(__IBMCPP__, <= 700)
-// MSVC 7.1+ & VACPP
+// MSVC 7.1 & MSVC 8.0 & VACPP
// agurt, 15/jun/05: replace overload-based SFINAE implementation with SFINAE
// applied to partial specialization to fix some apparently random failures
@@ -290,18 +291,24 @@ struct trait \
# if !defined(BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES)
# if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
# define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 1
+# else
+# define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 0
# endif
# endif
# if !defined(BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION)
# if (defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS))
# define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 1
+# else
+# define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 0
# endif
# endif
# if !defined(BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE)
# if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
# define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 1
+# else
+# define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 0
# endif
# endif
diff --git a/3party/boost/boost/mpl/identity.hpp b/3party/boost/boost/mpl/identity.hpp
index 5424f7103b..190d2f53f6 100644
--- a/3party/boost/boost/mpl/identity.hpp
+++ b/3party/boost/boost/mpl/identity.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: identity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
diff --git a/3party/boost/boost/mpl/if.hpp b/3party/boost/boost/mpl/if.hpp
index 245c993d98..b6bdf6c692 100644
--- a/3party/boost/boost/mpl/if.hpp
+++ b/3party/boost/boost/mpl/if.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/value_wknd.hpp>
#include <boost/mpl/aux_/static_cast.hpp>
diff --git a/3party/boost/boost/mpl/index_if.hpp b/3party/boost/boost/mpl/index_if.hpp
index 3df5763c42..a44473d2c6 100644
--- a/3party/boost/boost/mpl/index_if.hpp
+++ b/3party/boost/boost/mpl/index_if.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: index_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/find_if_pred.hpp>
#include <boost/mpl/begin_end.hpp>
diff --git a/3party/boost/boost/mpl/index_of.hpp b/3party/boost/boost/mpl/index_of.hpp
index 0f49f04f8d..cc86a12e4b 100644
--- a/3party/boost/boost/mpl/index_of.hpp
+++ b/3party/boost/boost/mpl/index_of.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: index_of.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/index_if.hpp>
#include <boost/mpl/same_as.hpp>
diff --git a/3party/boost/boost/mpl/inherit.hpp b/3party/boost/boost/mpl/inherit.hpp
index 59715ed1ad..b5427371d9 100644
--- a/3party/boost/boost/mpl/inherit.hpp
+++ b/3party/boost/boost/mpl/inherit.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: inherit.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/empty_base.hpp>
diff --git a/3party/boost/boost/mpl/inherit_linearly.hpp b/3party/boost/boost/mpl/inherit_linearly.hpp
index 5bc2d7fab6..fa58480b84 100644
--- a/3party/boost/boost/mpl/inherit_linearly.hpp
+++ b/3party/boost/boost/mpl/inherit_linearly.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: inherit_linearly.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/empty_base.hpp>
diff --git a/3party/boost/boost/mpl/insert.hpp b/3party/boost/boost/mpl/insert.hpp
index ff03de62cd..5e379a4978 100644
--- a/3party/boost/boost/mpl/insert.hpp
+++ b/3party/boost/boost/mpl/insert.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: insert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/insert_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/insert_fwd.hpp b/3party/boost/boost/mpl/insert_fwd.hpp
index 8e3208ed24..ba6b161760 100644
--- a/3party/boost/boost/mpl/insert_fwd.hpp
+++ b/3party/boost/boost/mpl/insert_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: insert_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/insert_range.hpp b/3party/boost/boost/mpl/insert_range.hpp
index 30baf1d910..0c362f5ae1 100644
--- a/3party/boost/boost/mpl/insert_range.hpp
+++ b/3party/boost/boost/mpl/insert_range.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: insert_range.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/insert_range_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/insert_range_fwd.hpp b/3party/boost/boost/mpl/insert_range_fwd.hpp
index de85c0e646..d9c946f2a9 100644
--- a/3party/boost/boost/mpl/insert_range_fwd.hpp
+++ b/3party/boost/boost/mpl/insert_range_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: insert_range_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/inserter.hpp b/3party/boost/boost/mpl/inserter.hpp
index 0c014d17b8..964df7f692 100644
--- a/3party/boost/boost/mpl/inserter.hpp
+++ b/3party/boost/boost/mpl/inserter.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/int.hpp b/3party/boost/boost/mpl/int.hpp
index 14db5482ec..b7fa0a765f 100644
--- a/3party/boost/boost/mpl/int.hpp
+++ b/3party/boost/boost/mpl/int.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: int.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/int_fwd.hpp>
diff --git a/3party/boost/boost/mpl/int_fwd.hpp b/3party/boost/boost/mpl/int_fwd.hpp
index 87b043c104..03d20c1cd6 100644
--- a/3party/boost/boost/mpl/int_fwd.hpp
+++ b/3party/boost/boost/mpl/int_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: int_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/adl_barrier.hpp>
#include <boost/mpl/aux_/nttp_decl.hpp>
diff --git a/3party/boost/boost/mpl/integral_c.hpp b/3party/boost/boost/mpl/integral_c.hpp
index e270dc500a..7a692dcab6 100644
--- a/3party/boost/boost/mpl/integral_c.hpp
+++ b/3party/boost/boost/mpl/integral_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: integral_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/integral_c_fwd.hpp>
#include <boost/mpl/aux_/config/ctps.hpp>
diff --git a/3party/boost/boost/mpl/integral_c_fwd.hpp b/3party/boost/boost/mpl/integral_c_fwd.hpp
index 7fcbfd59d8..05e311daa1 100644
--- a/3party/boost/boost/mpl/integral_c_fwd.hpp
+++ b/3party/boost/boost/mpl/integral_c_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: integral_c_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/workaround.hpp>
#include <boost/mpl/aux_/adl_barrier.hpp>
diff --git a/3party/boost/boost/mpl/integral_c_tag.hpp b/3party/boost/boost/mpl/integral_c_tag.hpp
index 27da563c7d..b6046920f8 100644
--- a/3party/boost/boost/mpl/integral_c_tag.hpp
+++ b/3party/boost/boost/mpl/integral_c_tag.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: integral_c_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/adl_barrier.hpp>
diff --git a/3party/boost/boost/mpl/is_placeholder.hpp b/3party/boost/boost/mpl/is_placeholder.hpp
index 565df89cb2..9f79ef102c 100644
--- a/3party/boost/boost/mpl/is_placeholder.hpp
+++ b/3party/boost/boost/mpl/is_placeholder.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: is_placeholder.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/arg_fwd.hpp>
#include <boost/mpl/bool.hpp>
diff --git a/3party/boost/boost/mpl/is_sequence.hpp b/3party/boost/boost/mpl/is_sequence.hpp
index 4e61fcfe43..68e036fa91 100644
--- a/3party/boost/boost/mpl/is_sequence.hpp
+++ b/3party/boost/boost/mpl/is_sequence.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: is_sequence.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/not.hpp>
#include <boost/mpl/and.hpp>
diff --git a/3party/boost/boost/mpl/iter_fold.hpp b/3party/boost/boost/mpl/iter_fold.hpp
index 1b52dd43c2..1b56b79040 100644
--- a/3party/boost/boost/mpl/iter_fold.hpp
+++ b/3party/boost/boost/mpl/iter_fold.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iter_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/O1_size.hpp>
diff --git a/3party/boost/boost/mpl/iter_fold_if.hpp b/3party/boost/boost/mpl/iter_fold_if.hpp
index 01847ef541..0115b7b224 100644
--- a/3party/boost/boost/mpl/iter_fold_if.hpp
+++ b/3party/boost/boost/mpl/iter_fold_if.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iter_fold_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/logical.hpp>
diff --git a/3party/boost/boost/mpl/iterator_category.hpp b/3party/boost/boost/mpl/iterator_category.hpp
index 6ccc1b1d91..d5ea4afee3 100644
--- a/3party/boost/boost/mpl/iterator_category.hpp
+++ b/3party/boost/boost/mpl/iterator_category.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iterator_category.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
diff --git a/3party/boost/boost/mpl/iterator_range.hpp b/3party/boost/boost/mpl/iterator_range.hpp
index 995ddc0334..a637e2241a 100644
--- a/3party/boost/boost/mpl/iterator_range.hpp
+++ b/3party/boost/boost/mpl/iterator_range.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iterator_range.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
diff --git a/3party/boost/boost/mpl/iterator_tags.hpp b/3party/boost/boost/mpl/iterator_tags.hpp
index fce273446b..7c3116ab45 100644
--- a/3party/boost/boost/mpl/iterator_tags.hpp
+++ b/3party/boost/boost/mpl/iterator_tags.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iterator_tags.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/int.hpp>
diff --git a/3party/boost/boost/mpl/joint_view.hpp b/3party/boost/boost/mpl/joint_view.hpp
index 2672fad348..cd9cddac7e 100644
--- a/3party/boost/boost/mpl/joint_view.hpp
+++ b/3party/boost/boost/mpl/joint_view.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: joint_view.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/joint_iter.hpp>
#include <boost/mpl/plus.hpp>
diff --git a/3party/boost/boost/mpl/key_type.hpp b/3party/boost/boost/mpl/key_type.hpp
index e1e0cd93f9..77bb37f199 100644
--- a/3party/boost/boost/mpl/key_type.hpp
+++ b/3party/boost/boost/mpl/key_type.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: key_type.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/key_type_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/key_type_fwd.hpp b/3party/boost/boost/mpl/key_type_fwd.hpp
index e59b395b30..1e86b782c5 100644
--- a/3party/boost/boost/mpl/key_type_fwd.hpp
+++ b/3party/boost/boost/mpl/key_type_fwd.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: key_type_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/lambda.hpp b/3party/boost/boost/mpl/lambda.hpp
index 05c27167e8..cc8f6075ce 100644
--- a/3party/boost/boost/mpl/lambda.hpp
+++ b/3party/boost/boost/mpl/lambda.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/lambda_fwd.hpp>
#include <boost/mpl/bind.hpp>
diff --git a/3party/boost/boost/mpl/lambda_fwd.hpp b/3party/boost/boost/mpl/lambda_fwd.hpp
index 16c73e4ad8..57b0426410 100644
--- a/3party/boost/boost/mpl/lambda_fwd.hpp
+++ b/3party/boost/boost/mpl/lambda_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: lambda_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/void_fwd.hpp>
#include <boost/mpl/aux_/na.hpp>
diff --git a/3party/boost/boost/mpl/less.hpp b/3party/boost/boost/mpl/less.hpp
index 33a570c2c8..63da5aa4ef 100644
--- a/3party/boost/boost/mpl/less.hpp
+++ b/3party/boost/boost/mpl/less.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: less.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME less
#define AUX778076_OP_TOKEN <
diff --git a/3party/boost/boost/mpl/less_equal.hpp b/3party/boost/boost/mpl/less_equal.hpp
index 8b9a4ffe89..3d668c2790 100644
--- a/3party/boost/boost/mpl/less_equal.hpp
+++ b/3party/boost/boost/mpl/less_equal.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: less_equal.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME less_equal
#define AUX778076_OP_TOKEN <=
diff --git a/3party/boost/boost/mpl/limits/arity.hpp b/3party/boost/boost/mpl/limits/arity.hpp
index 9da70ab34d..8c3eb362ce 100644
--- a/3party/boost/boost/mpl/limits/arity.hpp
+++ b/3party/boost/boost/mpl/limits/arity.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: arity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
# define BOOST_MPL_LIMIT_METAFUNCTION_ARITY 5
diff --git a/3party/boost/boost/mpl/limits/list.hpp b/3party/boost/boost/mpl/limits/list.hpp
index 6ae7387dca..b22d6a7b81 100644
--- a/3party/boost/boost/mpl/limits/list.hpp
+++ b/3party/boost/boost/mpl/limits/list.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_LIMIT_LIST_SIZE)
# define BOOST_MPL_LIMIT_LIST_SIZE 20
diff --git a/3party/boost/boost/mpl/limits/map.hpp b/3party/boost/boost/mpl/limits/map.hpp
index 92c4a24b12..bedba6331d 100644
--- a/3party/boost/boost/mpl/limits/map.hpp
+++ b/3party/boost/boost/mpl/limits/map.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: map.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_LIMIT_MAP_SIZE)
# define BOOST_MPL_LIMIT_MAP_SIZE 20
diff --git a/3party/boost/boost/mpl/limits/set.hpp b/3party/boost/boost/mpl/limits/set.hpp
index a4473b0fa2..dbc9bd0c0b 100644
--- a/3party/boost/boost/mpl/limits/set.hpp
+++ b/3party/boost/boost/mpl/limits/set.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_LIMIT_SET_SIZE)
# define BOOST_MPL_LIMIT_SET_SIZE 20
diff --git a/3party/boost/boost/mpl/limits/unrolling.hpp b/3party/boost/boost/mpl/limits/unrolling.hpp
index 3914f0aaab..6dba94222e 100644
--- a/3party/boost/boost/mpl/limits/unrolling.hpp
+++ b/3party/boost/boost/mpl/limits/unrolling.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: unrolling.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_LIMIT_UNROLLING)
# define BOOST_MPL_LIMIT_UNROLLING 4
diff --git a/3party/boost/boost/mpl/limits/vector.hpp b/3party/boost/boost/mpl/limits/vector.hpp
index 5de3811c40..9007589168 100644
--- a/3party/boost/boost/mpl/limits/vector.hpp
+++ b/3party/boost/boost/mpl/limits/vector.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_LIMIT_VECTOR_SIZE)
# define BOOST_MPL_LIMIT_VECTOR_SIZE 20
diff --git a/3party/boost/boost/mpl/list.hpp b/3party/boost/boost/mpl/list.hpp
index 6d968314a8..cff8a4ddd8 100644
--- a/3party/boost/boost/mpl/list.hpp
+++ b/3party/boost/boost/mpl/list.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/list.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/O1_size.hpp b/3party/boost/boost/mpl/list/aux_/O1_size.hpp
index 0d93dabe28..ccbc3f1b32 100644
--- a/3party/boost/boost/mpl/list/aux_/O1_size.hpp
+++ b/3party/boost/boost/mpl/list/aux_/O1_size.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/O1_size_fwd.hpp>
#include <boost/mpl/list/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/begin_end.hpp b/3party/boost/boost/mpl/list/aux_/begin_end.hpp
index 7fbddad59e..b568bee21c 100644
--- a/3party/boost/boost/mpl/list/aux_/begin_end.hpp
+++ b/3party/boost/boost/mpl/list/aux_/begin_end.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end_fwd.hpp>
#include <boost/mpl/list/aux_/iterator.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/clear.hpp b/3party/boost/boost/mpl/list/aux_/clear.hpp
index 3deafe7a0b..b16162f7c0 100644
--- a/3party/boost/boost/mpl/list/aux_/clear.hpp
+++ b/3party/boost/boost/mpl/list/aux_/clear.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/clear_fwd.hpp>
#include <boost/mpl/list/aux_/item.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/empty.hpp b/3party/boost/boost/mpl/list/aux_/empty.hpp
index c282cfe3db..95f9243947 100644
--- a/3party/boost/boost/mpl/list/aux_/empty.hpp
+++ b/3party/boost/boost/mpl/list/aux_/empty.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/empty_fwd.hpp>
#include <boost/mpl/not.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/front.hpp b/3party/boost/boost/mpl/list/aux_/front.hpp
index eb0b689e4b..9bea1fd342 100644
--- a/3party/boost/boost/mpl/list/aux_/front.hpp
+++ b/3party/boost/boost/mpl/list/aux_/front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/front_fwd.hpp>
#include <boost/mpl/list/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/include_preprocessed.hpp b/3party/boost/boost/mpl/list/aux_/include_preprocessed.hpp
index 4e7f6e4501..4f7cab2609 100644
--- a/3party/boost/boost/mpl/list/aux_/include_preprocessed.hpp
+++ b/3party/boost/boost/mpl/list/aux_/include_preprocessed.hpp
@@ -7,9 +7,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
diff --git a/3party/boost/boost/mpl/list/aux_/item.hpp b/3party/boost/boost/mpl/list/aux_/item.hpp
index 24b5e40602..8505deb284 100644
--- a/3party/boost/boost/mpl/list/aux_/item.hpp
+++ b/3party/boost/boost/mpl/list/aux_/item.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/long.hpp>
#include <boost/mpl/list/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/iterator.hpp b/3party/boost/boost/mpl/list/aux_/iterator.hpp
index 4d0431fd79..6b5ea78630 100644
--- a/3party/boost/boost/mpl/list/aux_/iterator.hpp
+++ b/3party/boost/boost/mpl/list/aux_/iterator.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/iterator_tags.hpp>
#include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/numbered.hpp b/3party/boost/boost/mpl/list/aux_/numbered.hpp
index 7b661e51e2..0cd49a6d36 100644
--- a/3party/boost/boost/mpl/list/aux_/numbered.hpp
+++ b/3party/boost/boost/mpl/list/aux_/numbered.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numbered.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/mpl/list/aux_/numbered_c.hpp b/3party/boost/boost/mpl/list/aux_/numbered_c.hpp
index 0c8e9f6d11..0006fd6cfc 100644
--- a/3party/boost/boost/mpl/list/aux_/numbered_c.hpp
+++ b/3party/boost/boost/mpl/list/aux_/numbered_c.hpp
@@ -9,9 +9,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numbered_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/mpl/list/aux_/pop_front.hpp b/3party/boost/boost/mpl/list/aux_/pop_front.hpp
index 9c72228971..46a0414569 100644
--- a/3party/boost/boost/mpl/list/aux_/pop_front.hpp
+++ b/3party/boost/boost/mpl/list/aux_/pop_front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/pop_front_fwd.hpp>
#include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/push_back.hpp b/3party/boost/boost/mpl/list/aux_/push_back.hpp
index 8e9c34ba1c..8f3b73e430 100644
--- a/3party/boost/boost/mpl/list/aux_/push_back.hpp
+++ b/3party/boost/boost/mpl/list/aux_/push_back.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_back_fwd.hpp>
#include <boost/mpl/bool.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/push_front.hpp b/3party/boost/boost/mpl/list/aux_/push_front.hpp
index 942508b7a7..fcfbe4ab3e 100644
--- a/3party/boost/boost/mpl/list/aux_/push_front.hpp
+++ b/3party/boost/boost/mpl/list/aux_/push_front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_front_fwd.hpp>
#include <boost/mpl/next.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/size.hpp b/3party/boost/boost/mpl/list/aux_/size.hpp
index 9d7191f2e1..f5e7feafda 100644
--- a/3party/boost/boost/mpl/list/aux_/size.hpp
+++ b/3party/boost/boost/mpl/list/aux_/size.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_fwd.hpp>
#include <boost/mpl/list/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/list/aux_/tag.hpp b/3party/boost/boost/mpl/list/aux_/tag.hpp
index e1a75337ad..f5ed2bbfe6 100644
--- a/3party/boost/boost/mpl/list/aux_/tag.hpp
+++ b/3party/boost/boost/mpl/list/aux_/tag.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl { namespace aux {
diff --git a/3party/boost/boost/mpl/list/list0.hpp b/3party/boost/boost/mpl/list/list0.hpp
index 3ecdac34c8..8e06b8d088 100644
--- a/3party/boost/boost/mpl/list/list0.hpp
+++ b/3party/boost/boost/mpl/list/list0.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/long.hpp>
#include <boost/mpl/aux_/na.hpp>
diff --git a/3party/boost/boost/mpl/list/list0_c.hpp b/3party/boost/boost/mpl/list/list0_c.hpp
index 066661faa5..807ca1c2c9 100644
--- a/3party/boost/boost/mpl/list/list0_c.hpp
+++ b/3party/boost/boost/mpl/list/list0_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list0_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/list/list0.hpp>
#include <boost/mpl/integral_c.hpp>
diff --git a/3party/boost/boost/mpl/list/list10.hpp b/3party/boost/boost/mpl/list/list10.hpp
index 23546948c3..d32d0d8c77 100644
--- a/3party/boost/boost/mpl/list/list10.hpp
+++ b/3party/boost/boost/mpl/list/list10.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list0.hpp>
diff --git a/3party/boost/boost/mpl/list/list10_c.hpp b/3party/boost/boost/mpl/list/list10_c.hpp
index b1c8e1b274..25c8f9defb 100644
--- a/3party/boost/boost/mpl/list/list10_c.hpp
+++ b/3party/boost/boost/mpl/list/list10_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list10_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list0_c.hpp>
diff --git a/3party/boost/boost/mpl/list/list20.hpp b/3party/boost/boost/mpl/list/list20.hpp
index 29f7d5dde3..724cabd237 100644
--- a/3party/boost/boost/mpl/list/list20.hpp
+++ b/3party/boost/boost/mpl/list/list20.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list10.hpp>
diff --git a/3party/boost/boost/mpl/list/list20_c.hpp b/3party/boost/boost/mpl/list/list20_c.hpp
index d7f772ce9c..0026f695ac 100644
--- a/3party/boost/boost/mpl/list/list20_c.hpp
+++ b/3party/boost/boost/mpl/list/list20_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list20_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list10_c.hpp>
diff --git a/3party/boost/boost/mpl/list/list30.hpp b/3party/boost/boost/mpl/list/list30.hpp
index 704cbdf6f6..a9004c7376 100644
--- a/3party/boost/boost/mpl/list/list30.hpp
+++ b/3party/boost/boost/mpl/list/list30.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list30.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list20.hpp>
diff --git a/3party/boost/boost/mpl/list/list30_c.hpp b/3party/boost/boost/mpl/list/list30_c.hpp
index 54fd22f925..c996574778 100644
--- a/3party/boost/boost/mpl/list/list30_c.hpp
+++ b/3party/boost/boost/mpl/list/list30_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list30_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list20_c.hpp>
diff --git a/3party/boost/boost/mpl/list/list40.hpp b/3party/boost/boost/mpl/list/list40.hpp
index 11d12e36aa..02f869efbe 100644
--- a/3party/boost/boost/mpl/list/list40.hpp
+++ b/3party/boost/boost/mpl/list/list40.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list40.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list30.hpp>
diff --git a/3party/boost/boost/mpl/list/list40_c.hpp b/3party/boost/boost/mpl/list/list40_c.hpp
index 0ae99fc08c..808d599dd9 100644
--- a/3party/boost/boost/mpl/list/list40_c.hpp
+++ b/3party/boost/boost/mpl/list/list40_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list40_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list30_c.hpp>
diff --git a/3party/boost/boost/mpl/list/list50.hpp b/3party/boost/boost/mpl/list/list50.hpp
index 4050a81cb0..f16c68ceba 100644
--- a/3party/boost/boost/mpl/list/list50.hpp
+++ b/3party/boost/boost/mpl/list/list50.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list50.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list40.hpp>
diff --git a/3party/boost/boost/mpl/list/list50_c.hpp b/3party/boost/boost/mpl/list/list50_c.hpp
index 4b5b654038..20692d898e 100644
--- a/3party/boost/boost/mpl/list/list50_c.hpp
+++ b/3party/boost/boost/mpl/list/list50_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list50_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/list/list40_c.hpp>
diff --git a/3party/boost/boost/mpl/list_c.hpp b/3party/boost/boost/mpl/list_c.hpp
index 984f6c3b27..6c01fc66e7 100644
--- a/3party/boost/boost/mpl/list_c.hpp
+++ b/3party/boost/boost/mpl/list_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: list_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/list.hpp>
diff --git a/3party/boost/boost/mpl/logical.hpp b/3party/boost/boost/mpl/logical.hpp
index f8b8fc3dba..c8236b5fe8 100644
--- a/3party/boost/boost/mpl/logical.hpp
+++ b/3party/boost/boost/mpl/logical.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: logical.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/or.hpp>
#include <boost/mpl/and.hpp>
diff --git a/3party/boost/boost/mpl/long.hpp b/3party/boost/boost/mpl/long.hpp
index 1c79afd3d6..c455267341 100644
--- a/3party/boost/boost/mpl/long.hpp
+++ b/3party/boost/boost/mpl/long.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: long.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/long_fwd.hpp>
diff --git a/3party/boost/boost/mpl/long_fwd.hpp b/3party/boost/boost/mpl/long_fwd.hpp
index 17accd3976..5f62f2b81c 100644
--- a/3party/boost/boost/mpl/long_fwd.hpp
+++ b/3party/boost/boost/mpl/long_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: long_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/adl_barrier.hpp>
#include <boost/mpl/aux_/nttp_decl.hpp>
diff --git a/3party/boost/boost/mpl/lower_bound.hpp b/3party/boost/boost/mpl/lower_bound.hpp
index 058e0ba043..75eae9add1 100644
--- a/3party/boost/boost/mpl/lower_bound.hpp
+++ b/3party/boost/boost/mpl/lower_bound.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: lower_bound.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/less.hpp>
#include <boost/mpl/lambda.hpp>
diff --git a/3party/boost/boost/mpl/map.hpp b/3party/boost/boost/mpl/map.hpp
index 3355f000d3..01012964f4 100644
--- a/3party/boost/boost/mpl/map.hpp
+++ b/3party/boost/boost/mpl/map.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: map.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/map.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/at_impl.hpp b/3party/boost/boost/mpl/map/aux_/at_impl.hpp
index e531a704cc..03f1258521 100644
--- a/3party/boost/boost/mpl/map/aux_/at_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/at_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: at_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/at_fwd.hpp>
#include <boost/mpl/long.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/begin_end_impl.hpp b/3party/boost/boost/mpl/map/aux_/begin_end_impl.hpp
index b450ecf713..aeb72fa576 100644
--- a/3party/boost/boost/mpl/map/aux_/begin_end_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/begin_end_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: begin_end_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end_fwd.hpp>
#include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/clear_impl.hpp b/3party/boost/boost/mpl/map/aux_/clear_impl.hpp
index d2020a2e41..226ae89e3c 100644
--- a/3party/boost/boost/mpl/map/aux_/clear_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/clear_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: clear_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/clear_fwd.hpp>
#include <boost/mpl/map/aux_/map0.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/contains_impl.hpp b/3party/boost/boost/mpl/map/aux_/contains_impl.hpp
index 67402334ad..94007807d7 100644
--- a/3party/boost/boost/mpl/map/aux_/contains_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/contains_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: contains_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/contains_fwd.hpp>
#include <boost/mpl/if.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/empty_impl.hpp b/3party/boost/boost/mpl/map/aux_/empty_impl.hpp
index b4f3511ea0..ab4fa4f986 100644
--- a/3party/boost/boost/mpl/map/aux_/empty_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/empty_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/empty_fwd.hpp>
#include <boost/mpl/not.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/erase_impl.hpp b/3party/boost/boost/mpl/map/aux_/erase_impl.hpp
index 8328e80183..978ca2f425 100644
--- a/3party/boost/boost/mpl/map/aux_/erase_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/erase_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/erase_fwd.hpp>
#include <boost/mpl/map/aux_/erase_key_impl.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/erase_key_impl.hpp b/3party/boost/boost/mpl/map/aux_/erase_key_impl.hpp
index 9a8a715f83..5e0775da53 100644
--- a/3party/boost/boost/mpl/map/aux_/erase_key_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/erase_key_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/erase_key_fwd.hpp>
#include <boost/mpl/map/aux_/has_key_impl.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/has_key_impl.hpp b/3party/boost/boost/mpl/map/aux_/has_key_impl.hpp
index 3ff49c2492..a463d8bcbe 100644
--- a/3party/boost/boost/mpl/map/aux_/has_key_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/has_key_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/has_key_fwd.hpp>
#include <boost/mpl/map/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/include_preprocessed.hpp b/3party/boost/boost/mpl/map/aux_/include_preprocessed.hpp
index 89e4b16462..07873d0ace 100644
--- a/3party/boost/boost/mpl/map/aux_/include_preprocessed.hpp
+++ b/3party/boost/boost/mpl/map/aux_/include_preprocessed.hpp
@@ -7,9 +7,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
diff --git a/3party/boost/boost/mpl/map/aux_/insert_impl.hpp b/3party/boost/boost/mpl/map/aux_/insert_impl.hpp
index ab0aad388a..fb61ed961d 100644
--- a/3party/boost/boost/mpl/map/aux_/insert_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/insert_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: insert_impl.hpp 55751 2009-08-24 04:11:00Z agurtovoy $
-// $Date: 2009-08-23 21:11:00 -0700 (Sun, 23 Aug 2009) $
-// $Revision: 55751 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/insert_fwd.hpp>
#include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/item.hpp b/3party/boost/boost/mpl/map/aux_/item.hpp
index 8ff86b39cb..d0df522cd8 100644
--- a/3party/boost/boost/mpl/map/aux_/item.hpp
+++ b/3party/boost/boost/mpl/map/aux_/item.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/void.hpp>
#include <boost/mpl/pair.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/iterator.hpp b/3party/boost/boost/mpl/map/aux_/iterator.hpp
index ecae6f8a22..93d9ebdd56 100644
--- a/3party/boost/boost/mpl/map/aux_/iterator.hpp
+++ b/3party/boost/boost/mpl/map/aux_/iterator.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/map/aux_/map0.hpp>
#include <boost/mpl/map/aux_/at_impl.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/key_type_impl.hpp b/3party/boost/boost/mpl/map/aux_/key_type_impl.hpp
index df883fc332..f5ce0c760d 100644
--- a/3party/boost/boost/mpl/map/aux_/key_type_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/key_type_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: key_type_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/key_type_fwd.hpp>
#include <boost/mpl/pair.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/map0.hpp b/3party/boost/boost/mpl/map/aux_/map0.hpp
index acba1a4b1e..fd885dd378 100644
--- a/3party/boost/boost/mpl/map/aux_/map0.hpp
+++ b/3party/boost/boost/mpl/map/aux_/map0.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: map0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/long.hpp>
#include <boost/mpl/void.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/numbered.hpp b/3party/boost/boost/mpl/map/aux_/numbered.hpp
index 453fe87834..f4512a5f4f 100644
--- a/3party/boost/boost/mpl/map/aux_/numbered.hpp
+++ b/3party/boost/boost/mpl/map/aux_/numbered.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numbered.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#else
diff --git a/3party/boost/boost/mpl/map/aux_/size_impl.hpp b/3party/boost/boost/mpl/map/aux_/size_impl.hpp
index 786e169cfb..fd46a1cdef 100644
--- a/3party/boost/boost/mpl/map/aux_/size_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/size_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_fwd.hpp>
#include <boost/mpl/map/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/map/aux_/tag.hpp b/3party/boost/boost/mpl/map/aux_/tag.hpp
index 05bb3ab0a1..6e3b7f466e 100644
--- a/3party/boost/boost/mpl/map/aux_/tag.hpp
+++ b/3party/boost/boost/mpl/map/aux_/tag.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl { namespace aux {
diff --git a/3party/boost/boost/mpl/map/aux_/value_type_impl.hpp b/3party/boost/boost/mpl/map/aux_/value_type_impl.hpp
index edf3d892e7..5451b14b36 100644
--- a/3party/boost/boost/mpl/map/aux_/value_type_impl.hpp
+++ b/3party/boost/boost/mpl/map/aux_/value_type_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: value_type_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/value_type_fwd.hpp>
#include <boost/mpl/pair.hpp>
diff --git a/3party/boost/boost/mpl/map/map0.hpp b/3party/boost/boost/mpl/map/map0.hpp
index c1082ffbf2..e1ea897b21 100644
--- a/3party/boost/boost/mpl/map/map0.hpp
+++ b/3party/boost/boost/mpl/map/map0.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: map0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/map/aux_/contains_impl.hpp>
#include <boost/mpl/map/aux_/at_impl.hpp>
diff --git a/3party/boost/boost/mpl/map/map10.hpp b/3party/boost/boost/mpl/map/map10.hpp
index efe0e6a036..7c53f3c8c0 100644
--- a/3party/boost/boost/mpl/map/map10.hpp
+++ b/3party/boost/boost/mpl/map/map10.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: map10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/map/map0.hpp>
diff --git a/3party/boost/boost/mpl/map/map20.hpp b/3party/boost/boost/mpl/map/map20.hpp
index 24500830c0..f5e61b844c 100644
--- a/3party/boost/boost/mpl/map/map20.hpp
+++ b/3party/boost/boost/mpl/map/map20.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: map20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/map/map10.hpp>
diff --git a/3party/boost/boost/mpl/map/map30.hpp b/3party/boost/boost/mpl/map/map30.hpp
index 3480ebe0e5..4e632b553c 100644
--- a/3party/boost/boost/mpl/map/map30.hpp
+++ b/3party/boost/boost/mpl/map/map30.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: map30.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/map/map20.hpp>
diff --git a/3party/boost/boost/mpl/map/map40.hpp b/3party/boost/boost/mpl/map/map40.hpp
index ef928faf23..db66f7a6bb 100644
--- a/3party/boost/boost/mpl/map/map40.hpp
+++ b/3party/boost/boost/mpl/map/map40.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: map40.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/map/map30.hpp>
diff --git a/3party/boost/boost/mpl/map/map50.hpp b/3party/boost/boost/mpl/map/map50.hpp
index 8eae6403d8..1c2ef5867b 100644
--- a/3party/boost/boost/mpl/map/map50.hpp
+++ b/3party/boost/boost/mpl/map/map50.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: map50.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/map/map40.hpp>
diff --git a/3party/boost/boost/mpl/math/fixed_c.hpp b/3party/boost/boost/mpl/math/fixed_c.hpp
index 15b6b3ddf3..1d78e51d03 100644
--- a/3party/boost/boost/mpl/math/fixed_c.hpp
+++ b/3party/boost/boost/mpl/math/fixed_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: fixed_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/static_constant.hpp>
diff --git a/3party/boost/boost/mpl/math/is_even.hpp b/3party/boost/boost/mpl/math/is_even.hpp
index eb8aada7c4..a39de5bd3a 100644
--- a/3party/boost/boost/mpl/math/is_even.hpp
+++ b/3party/boost/boost/mpl/math/is_even.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: is_even.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/bool.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
diff --git a/3party/boost/boost/mpl/math/rational_c.hpp b/3party/boost/boost/mpl/math/rational_c.hpp
index 37429207a1..dd1ac3f54c 100644
--- a/3party/boost/boost/mpl/math/rational_c.hpp
+++ b/3party/boost/boost/mpl/math/rational_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: rational_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/static_constant.hpp>
diff --git a/3party/boost/boost/mpl/max.hpp b/3party/boost/boost/mpl/max.hpp
index dec4bc1faf..4a4c8c1c08 100644
--- a/3party/boost/boost/mpl/max.hpp
+++ b/3party/boost/boost/mpl/max.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: max.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/min_max.hpp>
diff --git a/3party/boost/boost/mpl/max_element.hpp b/3party/boost/boost/mpl/max_element.hpp
index cbfb711281..33244f36dc 100644
--- a/3party/boost/boost/mpl/max_element.hpp
+++ b/3party/boost/boost/mpl/max_element.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: max_element.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/less.hpp>
#include <boost/mpl/iter_fold.hpp>
diff --git a/3party/boost/boost/mpl/min.hpp b/3party/boost/boost/mpl/min.hpp
index b39461e880..d35c2c2898 100644
--- a/3party/boost/boost/mpl/min.hpp
+++ b/3party/boost/boost/mpl/min.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: min.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/min_max.hpp>
diff --git a/3party/boost/boost/mpl/min_element.hpp b/3party/boost/boost/mpl/min_element.hpp
index 45c0681eef..078ee1de1c 100644
--- a/3party/boost/boost/mpl/min_element.hpp
+++ b/3party/boost/boost/mpl/min_element.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: min_element.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/max_element.hpp>
#include <boost/mpl/not.hpp>
diff --git a/3party/boost/boost/mpl/min_max.hpp b/3party/boost/boost/mpl/min_max.hpp
index 97261bb940..77545cd352 100644
--- a/3party/boost/boost/mpl/min_max.hpp
+++ b/3party/boost/boost/mpl/min_max.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: min_max.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/less.hpp>
#include <boost/mpl/if.hpp>
diff --git a/3party/boost/boost/mpl/minus.hpp b/3party/boost/boost/mpl/minus.hpp
index 123b8afecb..9f29f74b54 100644
--- a/3party/boost/boost/mpl/minus.hpp
+++ b/3party/boost/boost/mpl/minus.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: minus.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME minus
#define AUX778076_OP_TOKEN -
diff --git a/3party/boost/boost/mpl/modulus.hpp b/3party/boost/boost/mpl/modulus.hpp
index 99338b1496..5cc2eccb86 100644
--- a/3party/boost/boost/mpl/modulus.hpp
+++ b/3party/boost/boost/mpl/modulus.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: modulus.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME modulus
#define AUX778076_OP_TOKEN %
diff --git a/3party/boost/boost/mpl/multiplies.hpp b/3party/boost/boost/mpl/multiplies.hpp
index 1c0ec9f54e..53c39d98a4 100644
--- a/3party/boost/boost/mpl/multiplies.hpp
+++ b/3party/boost/boost/mpl/multiplies.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: multiplies.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/times.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
diff --git a/3party/boost/boost/mpl/multiset/aux_/count_impl.hpp b/3party/boost/boost/mpl/multiset/aux_/count_impl.hpp
index e2fb634451..6cd4a5bd25 100644
--- a/3party/boost/boost/mpl/multiset/aux_/count_impl.hpp
+++ b/3party/boost/boost/mpl/multiset/aux_/count_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: count_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/multiset/aux_/tag.hpp>
#include <boost/mpl/count_fwd.hpp>
diff --git a/3party/boost/boost/mpl/multiset/aux_/insert_impl.hpp b/3party/boost/boost/mpl/multiset/aux_/insert_impl.hpp
index 8fd694e1d9..208da2884e 100644
--- a/3party/boost/boost/mpl/multiset/aux_/insert_impl.hpp
+++ b/3party/boost/boost/mpl/multiset/aux_/insert_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: insert_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/multiset/aux_/item.hpp>
#include <boost/mpl/multiset/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/multiset/aux_/item.hpp b/3party/boost/boost/mpl/multiset/aux_/item.hpp
index 86499d14d1..eca21ad969 100644
--- a/3party/boost/boost/mpl/multiset/aux_/item.hpp
+++ b/3party/boost/boost/mpl/multiset/aux_/item.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/multiset/aux_/tag.hpp>
#include <boost/mpl/int.hpp>
diff --git a/3party/boost/boost/mpl/multiset/aux_/multiset0.hpp b/3party/boost/boost/mpl/multiset/aux_/multiset0.hpp
index e29799e617..e8cb9d2a48 100644
--- a/3party/boost/boost/mpl/multiset/aux_/multiset0.hpp
+++ b/3party/boost/boost/mpl/multiset/aux_/multiset0.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: multiset0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/multiset/aux_/tag.hpp>
#include <boost/mpl/int.hpp>
diff --git a/3party/boost/boost/mpl/multiset/aux_/tag.hpp b/3party/boost/boost/mpl/multiset/aux_/tag.hpp
index d8fc9db8a1..3988ca103a 100644
--- a/3party/boost/boost/mpl/multiset/aux_/tag.hpp
+++ b/3party/boost/boost/mpl/multiset/aux_/tag.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl { namespace aux {
diff --git a/3party/boost/boost/mpl/multiset/multiset0.hpp b/3party/boost/boost/mpl/multiset/multiset0.hpp
index 3b05121c16..62a3c74423 100644
--- a/3party/boost/boost/mpl/multiset/multiset0.hpp
+++ b/3party/boost/boost/mpl/multiset/multiset0.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: multiset0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
//#include <boost/mpl/multiset/aux_/at.hpp>
//#include <boost/mpl/multiset/aux_/front.hpp>
diff --git a/3party/boost/boost/mpl/negate.hpp b/3party/boost/boost/mpl/negate.hpp
index 3d51caf38c..d6aa065459 100644
--- a/3party/boost/boost/mpl/negate.hpp
+++ b/3party/boost/boost/mpl/negate.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: negate.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/aux_/msvc_eti_base.hpp>
diff --git a/3party/boost/boost/mpl/next.hpp b/3party/boost/boost/mpl/next.hpp
index fcfb01bb11..954b2226c6 100644
--- a/3party/boost/boost/mpl/next.hpp
+++ b/3party/boost/boost/mpl/next.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: next.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/next_prior.hpp b/3party/boost/boost/mpl/next_prior.hpp
index c65d4c4d10..d45fa20eaa 100644
--- a/3party/boost/boost/mpl/next_prior.hpp
+++ b/3party/boost/boost/mpl/next_prior.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: next_prior.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/common_name_wknd.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
diff --git a/3party/boost/boost/mpl/not.hpp b/3party/boost/boost/mpl/not.hpp
index 9886d7d8b2..d5f6025579 100644
--- a/3party/boost/boost/mpl/not.hpp
+++ b/3party/boost/boost/mpl/not.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: not.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/bool.hpp>
#include <boost/mpl/aux_/nttp_decl.hpp>
diff --git a/3party/boost/boost/mpl/not_equal_to.hpp b/3party/boost/boost/mpl/not_equal_to.hpp
index b6997dffdf..11ef3424c9 100644
--- a/3party/boost/boost/mpl/not_equal_to.hpp
+++ b/3party/boost/boost/mpl/not_equal_to.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: not_equal_to.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME not_equal_to
#define AUX778076_OP_TOKEN !=
diff --git a/3party/boost/boost/mpl/numeric_cast.hpp b/3party/boost/boost/mpl/numeric_cast.hpp
index f890e44ee8..6541470445 100644
--- a/3party/boost/boost/mpl/numeric_cast.hpp
+++ b/3party/boost/boost/mpl/numeric_cast.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numeric_cast.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/or.hpp b/3party/boost/boost/mpl/or.hpp
index 16b42c1439..f9704d5166 100644
--- a/3party/boost/boost/mpl/or.hpp
+++ b/3party/boost/boost/mpl/or.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: or.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
@@ -29,7 +29,7 @@
// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)'
// has to be checked in a separate condition, otherwise GCC complains
// about 'or' being an alternative token
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
#ifndef __GCCXML__
#if defined(or)
# pragma push_macro("or")
@@ -42,7 +42,7 @@
# define BOOST_MPL_PREPROCESSED_HEADER or.hpp
# include <boost/mpl/aux_/include_preprocessed.hpp>
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
#ifndef __GCCXML__
#if defined(or)
# pragma pop_macro("or")
diff --git a/3party/boost/boost/mpl/order.hpp b/3party/boost/boost/mpl/order.hpp
index e37da0e783..50da7102bf 100644
--- a/3party/boost/boost/mpl/order.hpp
+++ b/3party/boost/boost/mpl/order.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: order.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/order_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/order_fwd.hpp b/3party/boost/boost/mpl/order_fwd.hpp
index bce09fa0bd..d89fef1103 100644
--- a/3party/boost/boost/mpl/order_fwd.hpp
+++ b/3party/boost/boost/mpl/order_fwd.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: order_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/pair.hpp b/3party/boost/boost/mpl/pair.hpp
index 9336ca19ea..67c01d73ce 100644
--- a/3party/boost/boost/mpl/pair.hpp
+++ b/3party/boost/boost/mpl/pair.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pair.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/msvc_eti_base.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
diff --git a/3party/boost/boost/mpl/pair_view.hpp b/3party/boost/boost/mpl/pair_view.hpp
index 06f6bacd2f..a72cf9287a 100644
--- a/3party/boost/boost/mpl/pair_view.hpp
+++ b/3party/boost/boost/mpl/pair_view.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pair_view.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/iterator_category.hpp>
diff --git a/3party/boost/boost/mpl/partition.hpp b/3party/boost/boost/mpl/partition.hpp
index 888653ec26..795a39bbe7 100644
--- a/3party/boost/boost/mpl/partition.hpp
+++ b/3party/boost/boost/mpl/partition.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: partition.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/stable_partition.hpp>
#include <boost/mpl/aux_/inserter_algorithm.hpp>
diff --git a/3party/boost/boost/mpl/placeholders.hpp b/3party/boost/boost/mpl/placeholders.hpp
index 891a81851a..df0373ca57 100644
--- a/3party/boost/boost/mpl/placeholders.hpp
+++ b/3party/boost/boost/mpl/placeholders.hpp
@@ -15,9 +15,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: placeholders.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
diff --git a/3party/boost/boost/mpl/plus.hpp b/3party/boost/boost/mpl/plus.hpp
index 9f68c49bdc..455920b5d1 100644
--- a/3party/boost/boost/mpl/plus.hpp
+++ b/3party/boost/boost/mpl/plus.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: plus.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME plus
#define AUX778076_OP_TOKEN +
diff --git a/3party/boost/boost/mpl/pop_back.hpp b/3party/boost/boost/mpl/pop_back.hpp
index e4affcaca2..92fb4f1d3e 100644
--- a/3party/boost/boost/mpl/pop_back.hpp
+++ b/3party/boost/boost/mpl/pop_back.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pop_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/pop_back_fwd.hpp>
#include <boost/mpl/aux_/pop_back_impl.hpp>
diff --git a/3party/boost/boost/mpl/pop_back_fwd.hpp b/3party/boost/boost/mpl/pop_back_fwd.hpp
index c8209a790a..70957046cd 100644
--- a/3party/boost/boost/mpl/pop_back_fwd.hpp
+++ b/3party/boost/boost/mpl/pop_back_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pop_back_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/pop_front.hpp b/3party/boost/boost/mpl/pop_front.hpp
index dead80fb0b..76dfbca40b 100644
--- a/3party/boost/boost/mpl/pop_front.hpp
+++ b/3party/boost/boost/mpl/pop_front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/pop_front_fwd.hpp>
#include <boost/mpl/aux_/pop_front_impl.hpp>
diff --git a/3party/boost/boost/mpl/pop_front_fwd.hpp b/3party/boost/boost/mpl/pop_front_fwd.hpp
index eb78347b98..719c8b218a 100644
--- a/3party/boost/boost/mpl/pop_front_fwd.hpp
+++ b/3party/boost/boost/mpl/pop_front_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pop_front_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/print.hpp b/3party/boost/boost/mpl/print.hpp
index c726fac0eb..e3b0d315ae 100644
--- a/3party/boost/boost/mpl/print.hpp
+++ b/3party/boost/boost/mpl/print.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: print.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/identity.hpp>
@@ -37,8 +37,7 @@ namespace aux {
static const unsigned value = 1;
};
#endif
-} // namespace aux
-
+} // namespace aux
template <class T>
struct print
@@ -47,7 +46,9 @@ struct print
, aux::print_base
#endif
{
-#if defined(BOOST_MSVC)
+#if defined(__clang__)
+ const int m_x = 1 / (sizeof(T) - sizeof(T));
+#elif defined(BOOST_MSVC)
enum { n = sizeof(T) + -1 };
#elif defined(__MWERKS__)
void f(int);
diff --git a/3party/boost/boost/mpl/prior.hpp b/3party/boost/boost/mpl/prior.hpp
index b8f0dff2d5..849802cfa1 100644
--- a/3party/boost/boost/mpl/prior.hpp
+++ b/3party/boost/boost/mpl/prior.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: prior.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/protect.hpp b/3party/boost/boost/mpl/protect.hpp
index e3daa4feef..80574c2750 100644
--- a/3party/boost/boost/mpl/protect.hpp
+++ b/3party/boost/boost/mpl/protect.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: protect.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/arity.hpp>
#include <boost/mpl/aux_/config/dtp.hpp>
diff --git a/3party/boost/boost/mpl/push_back.hpp b/3party/boost/boost/mpl/push_back.hpp
index 2e8ad068ec..95a2587be6 100644
--- a/3party/boost/boost/mpl/push_back.hpp
+++ b/3party/boost/boost/mpl/push_back.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_back_fwd.hpp>
#include <boost/mpl/aux_/push_back_impl.hpp>
diff --git a/3party/boost/boost/mpl/push_back_fwd.hpp b/3party/boost/boost/mpl/push_back_fwd.hpp
index ef04ff537f..7a4f7a754a 100644
--- a/3party/boost/boost/mpl/push_back_fwd.hpp
+++ b/3party/boost/boost/mpl/push_back_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_back_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/push_front.hpp b/3party/boost/boost/mpl/push_front.hpp
index ca943bbee5..e4d0dfb7fb 100644
--- a/3party/boost/boost/mpl/push_front.hpp
+++ b/3party/boost/boost/mpl/push_front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_front_fwd.hpp>
#include <boost/mpl/aux_/push_front_impl.hpp>
diff --git a/3party/boost/boost/mpl/push_front_fwd.hpp b/3party/boost/boost/mpl/push_front_fwd.hpp
index fa3667ca56..d6ad5af572 100644
--- a/3party/boost/boost/mpl/push_front_fwd.hpp
+++ b/3party/boost/boost/mpl/push_front_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_front_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/quote.hpp b/3party/boost/boost/mpl/quote.hpp
index 53b57124af..242c2e7afb 100644
--- a/3party/boost/boost/mpl/quote.hpp
+++ b/3party/boost/boost/mpl/quote.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: quote.hpp 49272 2008-10-11 06:50:46Z agurtovoy $
-// $Date: 2008-10-10 23:50:46 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49272 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/void.hpp>
diff --git a/3party/boost/boost/mpl/range_c.hpp b/3party/boost/boost/mpl/range_c.hpp
index 7072ad36fe..ba95062d67 100644
--- a/3party/boost/boost/mpl/range_c.hpp
+++ b/3party/boost/boost/mpl/range_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: range_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/aux_/range_c/front.hpp>
diff --git a/3party/boost/boost/mpl/remove.hpp b/3party/boost/boost/mpl/remove.hpp
index 7ed621fe9b..9c72f9e6fe 100644
--- a/3party/boost/boost/mpl/remove.hpp
+++ b/3party/boost/boost/mpl/remove.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: remove.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/remove_if.hpp>
#include <boost/mpl/same_as.hpp>
diff --git a/3party/boost/boost/mpl/remove_if.hpp b/3party/boost/boost/mpl/remove_if.hpp
index 1275bd43dc..bbe6564b09 100644
--- a/3party/boost/boost/mpl/remove_if.hpp
+++ b/3party/boost/boost/mpl/remove_if.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: remove_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/reverse_fold.hpp>
diff --git a/3party/boost/boost/mpl/replace.hpp b/3party/boost/boost/mpl/replace.hpp
index 3fab34600b..bb46dfb85a 100644
--- a/3party/boost/boost/mpl/replace.hpp
+++ b/3party/boost/boost/mpl/replace.hpp
@@ -12,9 +12,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: replace.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/replace_if.hpp>
#include <boost/mpl/same_as.hpp>
diff --git a/3party/boost/boost/mpl/replace_if.hpp b/3party/boost/boost/mpl/replace_if.hpp
index 349480e62f..79466c7121 100644
--- a/3party/boost/boost/mpl/replace_if.hpp
+++ b/3party/boost/boost/mpl/replace_if.hpp
@@ -12,9 +12,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: replace_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/transform.hpp>
#include <boost/mpl/apply.hpp>
diff --git a/3party/boost/boost/mpl/reverse.hpp b/3party/boost/boost/mpl/reverse.hpp
index 3221ecbd01..dd1fc18bb5 100644
--- a/3party/boost/boost/mpl/reverse.hpp
+++ b/3party/boost/boost/mpl/reverse.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: reverse.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/copy.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
diff --git a/3party/boost/boost/mpl/reverse_fold.hpp b/3party/boost/boost/mpl/reverse_fold.hpp
index bcf3157d18..87c26a9a84 100644
--- a/3party/boost/boost/mpl/reverse_fold.hpp
+++ b/3party/boost/boost/mpl/reverse_fold.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: reverse_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/O1_size.hpp>
diff --git a/3party/boost/boost/mpl/reverse_iter_fold.hpp b/3party/boost/boost/mpl/reverse_iter_fold.hpp
index 9965c272ab..348f295ee7 100644
--- a/3party/boost/boost/mpl/reverse_iter_fold.hpp
+++ b/3party/boost/boost/mpl/reverse_iter_fold.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: reverse_iter_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/O1_size.hpp>
diff --git a/3party/boost/boost/mpl/same_as.hpp b/3party/boost/boost/mpl/same_as.hpp
index c82cfd7caa..4be20bc33e 100644
--- a/3party/boost/boost/mpl/same_as.hpp
+++ b/3party/boost/boost/mpl/same_as.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: same_as.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/not.hpp>
#include <boost/mpl/aux_/lambda_spec.hpp>
diff --git a/3party/boost/boost/mpl/sequence_tag.hpp b/3party/boost/boost/mpl/sequence_tag.hpp
index 479175e3cb..f87d92b28b 100644
--- a/3party/boost/boost/mpl/sequence_tag.hpp
+++ b/3party/boost/boost/mpl/sequence_tag.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: sequence_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/sequence_tag_fwd.hpp>
#include <boost/mpl/aux_/has_tag.hpp>
diff --git a/3party/boost/boost/mpl/sequence_tag_fwd.hpp b/3party/boost/boost/mpl/sequence_tag_fwd.hpp
index 07a6707e00..4b0ed6f6b7 100644
--- a/3party/boost/boost/mpl/sequence_tag_fwd.hpp
+++ b/3party/boost/boost/mpl/sequence_tag_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: sequence_tag_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/set.hpp b/3party/boost/boost/mpl/set.hpp
index 5392d5f218..75f56dce45 100644
--- a/3party/boost/boost/mpl/set.hpp
+++ b/3party/boost/boost/mpl/set.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/set.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/at_impl.hpp b/3party/boost/boost/mpl/set/aux_/at_impl.hpp
index feed3d3b9c..89119c4a59 100644
--- a/3party/boost/boost/mpl/set/aux_/at_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/at_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: at_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/at_fwd.hpp>
#include <boost/mpl/set/aux_/has_key_impl.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/begin_end_impl.hpp b/3party/boost/boost/mpl/set/aux_/begin_end_impl.hpp
index 09d270229c..2595280532 100644
--- a/3party/boost/boost/mpl/set/aux_/begin_end_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/begin_end_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: begin_end_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end_fwd.hpp>
#include <boost/mpl/set/aux_/iterator.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/clear_impl.hpp b/3party/boost/boost/mpl/set/aux_/clear_impl.hpp
index c0b1450ac8..9c6c76030a 100644
--- a/3party/boost/boost/mpl/set/aux_/clear_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/clear_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: clear_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/clear_fwd.hpp>
#include <boost/mpl/set/aux_/set0.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/empty_impl.hpp b/3party/boost/boost/mpl/set/aux_/empty_impl.hpp
index 1940c55a53..997ff023a2 100644
--- a/3party/boost/boost/mpl/set/aux_/empty_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/empty_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/empty_fwd.hpp>
#include <boost/mpl/not.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/erase_impl.hpp b/3party/boost/boost/mpl/set/aux_/erase_impl.hpp
index 541c785e81..c4a95b4a85 100644
--- a/3party/boost/boost/mpl/set/aux_/erase_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/erase_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/erase_fwd.hpp>
#include <boost/mpl/set/aux_/erase_key_impl.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/erase_key_impl.hpp b/3party/boost/boost/mpl/set/aux_/erase_key_impl.hpp
index 3cee21dd16..f945d4fb3d 100644
--- a/3party/boost/boost/mpl/set/aux_/erase_key_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/erase_key_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: erase_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/erase_key_fwd.hpp>
#include <boost/mpl/set/aux_/has_key_impl.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/has_key_impl.hpp b/3party/boost/boost/mpl/set/aux_/has_key_impl.hpp
index e76019579a..bdc3273181 100644
--- a/3party/boost/boost/mpl/set/aux_/has_key_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/has_key_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: has_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/set/aux_/tag.hpp>
#include <boost/mpl/has_key_fwd.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/include_preprocessed.hpp b/3party/boost/boost/mpl/set/aux_/include_preprocessed.hpp
index 08cb73404c..ffeb9c6b0c 100644
--- a/3party/boost/boost/mpl/set/aux_/include_preprocessed.hpp
+++ b/3party/boost/boost/mpl/set/aux_/include_preprocessed.hpp
@@ -9,9 +9,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/preprocessor.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/insert_impl.hpp b/3party/boost/boost/mpl/set/aux_/insert_impl.hpp
index 3d3d41d939..ff180acaa8 100644
--- a/3party/boost/boost/mpl/set/aux_/insert_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/insert_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: insert_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/insert_fwd.hpp>
#include <boost/mpl/set/aux_/has_key_impl.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/item.hpp b/3party/boost/boost/mpl/set/aux_/item.hpp
index bc39662871..e90e4900f6 100644
--- a/3party/boost/boost/mpl/set/aux_/item.hpp
+++ b/3party/boost/boost/mpl/set/aux_/item.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/long.hpp>
#include <boost/mpl/void.hpp>
@@ -32,7 +32,7 @@ struct s_item
typedef s_item<T,Base> item_;
typedef void_ last_masked_;
typedef T item_type_;
- typedef Base base;
+ typedef typename Base::item_ base;
typedef typename next< typename Base::size >::type size;
typedef typename next< typename Base::order >::type order;
@@ -55,7 +55,7 @@ struct s_mask
typedef s_mask<T,Base> item_;
typedef T last_masked_;
typedef void_ item_type_;
- typedef Base base;
+ typedef typename Base::item_ base;
typedef typename prior< typename Base::size >::type size;
BOOST_MPL_AUX_SET_OVERLOAD( aux::yes_tag, IS_MASKED, s_mask, aux::type_wrapper<T>* );
@@ -69,7 +69,7 @@ struct s_unmask
typedef s_unmask<T,Base> item_;
typedef void_ last_masked_;
typedef T item_type_;
- typedef Base base;
+ typedef typename Base::item_ base;
typedef typename next< typename Base::size >::type size;
BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_unmask, aux::type_wrapper<T>* );
diff --git a/3party/boost/boost/mpl/set/aux_/iterator.hpp b/3party/boost/boost/mpl/set/aux_/iterator.hpp
index c855b3e240..9a58a25f2e 100644
--- a/3party/boost/boost/mpl/set/aux_/iterator.hpp
+++ b/3party/boost/boost/mpl/set/aux_/iterator.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/set/aux_/set0.hpp>
#include <boost/mpl/has_key.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/key_type_impl.hpp b/3party/boost/boost/mpl/set/aux_/key_type_impl.hpp
index 1a221680b9..8e8a090544 100644
--- a/3party/boost/boost/mpl/set/aux_/key_type_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/key_type_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: key_type_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/key_type_fwd.hpp>
#include <boost/mpl/set/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/numbered.hpp b/3party/boost/boost/mpl/set/aux_/numbered.hpp
index 95cea0c866..edd839d8ab 100644
--- a/3party/boost/boost/mpl/set/aux_/numbered.hpp
+++ b/3party/boost/boost/mpl/set/aux_/numbered.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numbered.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/preprocessor/enum_params.hpp>
#include <boost/preprocessor/dec.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/numbered_c.hpp b/3party/boost/boost/mpl/set/aux_/numbered_c.hpp
index 6365d2a869..130cf5d70e 100644
--- a/3party/boost/boost/mpl/set/aux_/numbered_c.hpp
+++ b/3party/boost/boost/mpl/set/aux_/numbered_c.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numbered_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/set0.hpp b/3party/boost/boost/mpl/set/aux_/set0.hpp
index 82719b893f..65f52a8170 100644
--- a/3party/boost/boost/mpl/set/aux_/set0.hpp
+++ b/3party/boost/boost/mpl/set/aux_/set0.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/long.hpp>
#include <boost/mpl/void.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/size_impl.hpp b/3party/boost/boost/mpl/set/aux_/size_impl.hpp
index 2e35bdbe5a..e865596698 100644
--- a/3party/boost/boost/mpl/set/aux_/size_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/size_impl.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_fwd.hpp>
#include <boost/mpl/set/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/set/aux_/tag.hpp b/3party/boost/boost/mpl/set/aux_/tag.hpp
index b3e76a15a0..f11fc2bbeb 100644
--- a/3party/boost/boost/mpl/set/aux_/tag.hpp
+++ b/3party/boost/boost/mpl/set/aux_/tag.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl { namespace aux {
diff --git a/3party/boost/boost/mpl/set/aux_/value_type_impl.hpp b/3party/boost/boost/mpl/set/aux_/value_type_impl.hpp
index 19cea4e380..91cf0d00cf 100644
--- a/3party/boost/boost/mpl/set/aux_/value_type_impl.hpp
+++ b/3party/boost/boost/mpl/set/aux_/value_type_impl.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: value_type_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/value_type_fwd.hpp>
#include <boost/mpl/set/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/set/set0.hpp b/3party/boost/boost/mpl/set/set0.hpp
index 9fd195071c..8403731040 100644
--- a/3party/boost/boost/mpl/set/set0.hpp
+++ b/3party/boost/boost/mpl/set/set0.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/set/aux_/at_impl.hpp>
#include <boost/mpl/set/aux_/clear_impl.hpp>
diff --git a/3party/boost/boost/mpl/set/set0_c.hpp b/3party/boost/boost/mpl/set/set0_c.hpp
index cf548890f2..7e7f77a960 100644
--- a/3party/boost/boost/mpl/set/set0_c.hpp
+++ b/3party/boost/boost/mpl/set/set0_c.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set0_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/set/set0.hpp>
#include <boost/mpl/integral_c.hpp>
diff --git a/3party/boost/boost/mpl/set/set10.hpp b/3party/boost/boost/mpl/set/set10.hpp
index 5cf0add71f..fa876b25ed 100644
--- a/3party/boost/boost/mpl/set/set10.hpp
+++ b/3party/boost/boost/mpl/set/set10.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set0.hpp>
diff --git a/3party/boost/boost/mpl/set/set10_c.hpp b/3party/boost/boost/mpl/set/set10_c.hpp
index e40fd55335..34abd98406 100644
--- a/3party/boost/boost/mpl/set/set10_c.hpp
+++ b/3party/boost/boost/mpl/set/set10_c.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set10_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set0_c.hpp>
diff --git a/3party/boost/boost/mpl/set/set20.hpp b/3party/boost/boost/mpl/set/set20.hpp
index c4928bfb88..0cdff4780d 100644
--- a/3party/boost/boost/mpl/set/set20.hpp
+++ b/3party/boost/boost/mpl/set/set20.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set10.hpp>
diff --git a/3party/boost/boost/mpl/set/set20_c.hpp b/3party/boost/boost/mpl/set/set20_c.hpp
index 669420e02b..e3de0447e5 100644
--- a/3party/boost/boost/mpl/set/set20_c.hpp
+++ b/3party/boost/boost/mpl/set/set20_c.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set20_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set10_c.hpp>
diff --git a/3party/boost/boost/mpl/set/set30.hpp b/3party/boost/boost/mpl/set/set30.hpp
index 401cc2314d..b0344546a3 100644
--- a/3party/boost/boost/mpl/set/set30.hpp
+++ b/3party/boost/boost/mpl/set/set30.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set30.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set20.hpp>
diff --git a/3party/boost/boost/mpl/set/set30_c.hpp b/3party/boost/boost/mpl/set/set30_c.hpp
index ba5ce1cdfa..e006e1cd66 100644
--- a/3party/boost/boost/mpl/set/set30_c.hpp
+++ b/3party/boost/boost/mpl/set/set30_c.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set30_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set20_c.hpp>
diff --git a/3party/boost/boost/mpl/set/set40.hpp b/3party/boost/boost/mpl/set/set40.hpp
index a22d54c365..5fa2cd0e43 100644
--- a/3party/boost/boost/mpl/set/set40.hpp
+++ b/3party/boost/boost/mpl/set/set40.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set40.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set30.hpp>
diff --git a/3party/boost/boost/mpl/set/set40_c.hpp b/3party/boost/boost/mpl/set/set40_c.hpp
index d593bd565e..bce5a80dc3 100644
--- a/3party/boost/boost/mpl/set/set40_c.hpp
+++ b/3party/boost/boost/mpl/set/set40_c.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set40_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set30_c.hpp>
diff --git a/3party/boost/boost/mpl/set/set50.hpp b/3party/boost/boost/mpl/set/set50.hpp
index 4f425372ba..0c2bfc01ae 100644
--- a/3party/boost/boost/mpl/set/set50.hpp
+++ b/3party/boost/boost/mpl/set/set50.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set50.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set40.hpp>
diff --git a/3party/boost/boost/mpl/set/set50_c.hpp b/3party/boost/boost/mpl/set/set50_c.hpp
index f64c8ee730..077dbf762e 100644
--- a/3party/boost/boost/mpl/set/set50_c.hpp
+++ b/3party/boost/boost/mpl/set/set50_c.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set50_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set40_c.hpp>
diff --git a/3party/boost/boost/mpl/set_c.hpp b/3party/boost/boost/mpl/set_c.hpp
index c7bf8497e6..c0f8e37fa7 100644
--- a/3party/boost/boost/mpl/set_c.hpp
+++ b/3party/boost/boost/mpl/set_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: set_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/set.hpp>
diff --git a/3party/boost/boost/mpl/shift_left.hpp b/3party/boost/boost/mpl/shift_left.hpp
index a20bf05de4..55e4f649dc 100644
--- a/3party/boost/boost/mpl/shift_left.hpp
+++ b/3party/boost/boost/mpl/shift_left.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: shift_left.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME shift_left
#define AUX778076_OP_TOKEN <<
diff --git a/3party/boost/boost/mpl/shift_right.hpp b/3party/boost/boost/mpl/shift_right.hpp
index a03444c04b..1ae1e35eb0 100644
--- a/3party/boost/boost/mpl/shift_right.hpp
+++ b/3party/boost/boost/mpl/shift_right.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: shift_right.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME shift_right
#define AUX778076_OP_TOKEN >>
diff --git a/3party/boost/boost/mpl/single_view.hpp b/3party/boost/boost/mpl/single_view.hpp
index 132121fbfb..a872bb1fc4 100644
--- a/3party/boost/boost/mpl/single_view.hpp
+++ b/3party/boost/boost/mpl/single_view.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: single_view.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/single_element_iter.hpp>
#include <boost/mpl/iterator_range.hpp>
diff --git a/3party/boost/boost/mpl/size.hpp b/3party/boost/boost/mpl/size.hpp
index 54b13cbb27..12ffefbb78 100644
--- a/3party/boost/boost/mpl/size.hpp
+++ b/3party/boost/boost/mpl/size.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/size_fwd.hpp b/3party/boost/boost/mpl/size_fwd.hpp
index 8702da7f88..c72628dd1e 100644
--- a/3party/boost/boost/mpl/size_fwd.hpp
+++ b/3party/boost/boost/mpl/size_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/size_t.hpp b/3party/boost/boost/mpl/size_t.hpp
index 54a05c6a22..99e9b41d0d 100644
--- a/3party/boost/boost/mpl/size_t.hpp
+++ b/3party/boost/boost/mpl/size_t.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size_t.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_t_fwd.hpp>
diff --git a/3party/boost/boost/mpl/size_t_fwd.hpp b/3party/boost/boost/mpl/size_t_fwd.hpp
index 396a521ffe..ffdf4b32dc 100644
--- a/3party/boost/boost/mpl/size_t_fwd.hpp
+++ b/3party/boost/boost/mpl/size_t_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size_t_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/adl_barrier.hpp>
#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'
diff --git a/3party/boost/boost/mpl/sizeof.hpp b/3party/boost/boost/mpl/sizeof.hpp
index 018f826008..cf5e41c654 100644
--- a/3party/boost/boost/mpl/sizeof.hpp
+++ b/3party/boost/boost/mpl/sizeof.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: sizeof.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_t.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
diff --git a/3party/boost/boost/mpl/sort.hpp b/3party/boost/boost/mpl/sort.hpp
index 04bdad6fac..961aeab8c1 100644
--- a/3party/boost/boost/mpl/sort.hpp
+++ b/3party/boost/boost/mpl/sort.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: sort.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/sort_impl.hpp>
#include <boost/mpl/aux_/inserter_algorithm.hpp>
diff --git a/3party/boost/boost/mpl/stable_partition.hpp b/3party/boost/boost/mpl/stable_partition.hpp
index 93066bb038..e010de3cf4 100644
--- a/3party/boost/boost/mpl/stable_partition.hpp
+++ b/3party/boost/boost/mpl/stable_partition.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: stable_partition.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/reverse_fold.hpp>
diff --git a/3party/boost/boost/mpl/string.hpp b/3party/boost/boost/mpl/string.hpp
index c62d8ab9bc..345918f902 100644
--- a/3party/boost/boost/mpl/string.hpp
+++ b/3party/boost/boost/mpl/string.hpp
@@ -19,7 +19,7 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-#include <boost/detail/endian.hpp>
+#include <boost/predef/other/endian.h>
#include <boost/mpl/limits/string.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/char.hpp>
@@ -59,7 +59,7 @@ namespace boost { namespace mpl
#define BOOST_MPL_MULTICHAR_LENGTH(c) \
(std::size_t)((c<CHAR_MIN) ? 4 : ((c>0xffffff)+(c>0xffff)+(c>0xff)+1))
- #if defined(BOOST_LITTLE_ENDIAN) && defined(__SUNPRO_CC)
+ #if defined(BOOST_ENDIAN_LITTLE_BYTE) && defined(__SUNPRO_CC)
#define BOOST_MPL_MULTICHAR_AT(c,i) \
(char)(0xff&((unsigned)(c)>>(8*(std::size_t)(i))))
diff --git a/3party/boost/boost/mpl/switch.hpp b/3party/boost/boost/mpl/switch.hpp
index b5cba77fa3..8edc38fad0 100644
--- a/3party/boost/boost/mpl/switch.hpp
+++ b/3party/boost/boost/mpl/switch.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: switch.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/find_if.hpp>
#include <boost/mpl/deref.hpp>
diff --git a/3party/boost/boost/mpl/tag.hpp b/3party/boost/boost/mpl/tag.hpp
index fc0aee233b..858627753d 100644
--- a/3party/boost/boost/mpl/tag.hpp
+++ b/3party/boost/boost/mpl/tag.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/void.hpp>
diff --git a/3party/boost/boost/mpl/times.hpp b/3party/boost/boost/mpl/times.hpp
index c73256df79..f309557c6b 100644
--- a/3party/boost/boost/mpl/times.hpp
+++ b/3party/boost/boost/mpl/times.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: times.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#define AUX778076_OP_NAME times
#define AUX778076_OP_TOKEN *
diff --git a/3party/boost/boost/mpl/transform.hpp b/3party/boost/boost/mpl/transform.hpp
index cb2b64ed9f..4d3e2a0497 100644
--- a/3party/boost/boost/mpl/transform.hpp
+++ b/3party/boost/boost/mpl/transform.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: transform.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/reverse_fold.hpp>
diff --git a/3party/boost/boost/mpl/transform_view.hpp b/3party/boost/boost/mpl/transform_view.hpp
index 88b46b1182..6c0e0b6dd3 100644
--- a/3party/boost/boost/mpl/transform_view.hpp
+++ b/3party/boost/boost/mpl/transform_view.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: transform_view.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/lambda.hpp>
diff --git a/3party/boost/boost/mpl/unique.hpp b/3party/boost/boost/mpl/unique.hpp
index 7e9c1e9de6..80a27da4ec 100644
--- a/3party/boost/boost/mpl/unique.hpp
+++ b/3party/boost/boost/mpl/unique.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: unique.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/reverse_fold.hpp>
diff --git a/3party/boost/boost/mpl/unpack_args.hpp b/3party/boost/boost/mpl/unpack_args.hpp
index 1e4d48c948..f64ace3383 100644
--- a/3party/boost/boost/mpl/unpack_args.hpp
+++ b/3party/boost/boost/mpl/unpack_args.hpp
@@ -14,9 +14,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: unpack_args.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/apply.hpp>
diff --git a/3party/boost/boost/mpl/upper_bound.hpp b/3party/boost/boost/mpl/upper_bound.hpp
index caf5cdff1a..ff943e60e3 100644
--- a/3party/boost/boost/mpl/upper_bound.hpp
+++ b/3party/boost/boost/mpl/upper_bound.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: upper_bound.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/less.hpp>
#include <boost/mpl/lambda.hpp>
diff --git a/3party/boost/boost/mpl/value_type.hpp b/3party/boost/boost/mpl/value_type.hpp
index ad34393a75..5b8c822e3d 100644
--- a/3party/boost/boost/mpl/value_type.hpp
+++ b/3party/boost/boost/mpl/value_type.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: value_type.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/value_type_fwd.hpp>
#include <boost/mpl/sequence_tag.hpp>
diff --git a/3party/boost/boost/mpl/value_type_fwd.hpp b/3party/boost/boost/mpl/value_type_fwd.hpp
index e9f0b28497..d8635bfe41 100644
--- a/3party/boost/boost/mpl/value_type_fwd.hpp
+++ b/3party/boost/boost/mpl/value_type_fwd.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: value_type_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
namespace boost { namespace mpl {
diff --git a/3party/boost/boost/mpl/vector.hpp b/3party/boost/boost/mpl/vector.hpp
index 833f193150..479983d5ce 100644
--- a/3party/boost/boost/mpl/vector.hpp
+++ b/3party/boost/boost/mpl/vector.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/vector.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/O1_size.hpp b/3party/boost/boost/mpl/vector/aux_/O1_size.hpp
index 3ca8d214cf..ac9e3cf887 100644
--- a/3party/boost/boost/mpl/vector/aux_/O1_size.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/O1_size.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/O1_size_fwd.hpp>
#include <boost/mpl/minus.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/at.hpp b/3party/boost/boost/mpl/vector/aux_/at.hpp
index 9da05956c9..0a7583ccf1 100644
--- a/3party/boost/boost/mpl/vector/aux_/at.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/at.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: at.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/at_fwd.hpp>
#include <boost/mpl/vector/aux_/tag.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/back.hpp b/3party/boost/boost/mpl/vector/aux_/back.hpp
index ce84c7a019..b66363ec11 100644
--- a/3party/boost/boost/mpl/vector/aux_/back.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/back.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/back_fwd.hpp>
#include <boost/mpl/next_prior.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/begin_end.hpp b/3party/boost/boost/mpl/vector/aux_/begin_end.hpp
index d79ef9a072..aa34451566 100644
--- a/3party/boost/boost/mpl/vector/aux_/begin_end.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/begin_end.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/typeof.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/clear.hpp b/3party/boost/boost/mpl/vector/aux_/clear.hpp
index 3308518a2a..b06d8be752 100644
--- a/3party/boost/boost/mpl/vector/aux_/clear.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/clear.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/clear_fwd.hpp>
#include <boost/mpl/vector/aux_/vector0.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/empty.hpp b/3party/boost/boost/mpl/vector/aux_/empty.hpp
index 84c879222f..5490a5f72f 100644
--- a/3party/boost/boost/mpl/vector/aux_/empty.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/empty.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/empty_fwd.hpp>
#include <boost/mpl/bool.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/front.hpp b/3party/boost/boost/mpl/vector/aux_/front.hpp
index ff2414eeb6..a358db52cf 100644
--- a/3party/boost/boost/mpl/vector/aux_/front.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/front_fwd.hpp>
#include <boost/mpl/vector/aux_/at.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/include_preprocessed.hpp b/3party/boost/boost/mpl/vector/aux_/include_preprocessed.hpp
index 5c16008218..a676116f60 100644
--- a/3party/boost/boost/mpl/vector/aux_/include_preprocessed.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/include_preprocessed.hpp
@@ -9,9 +9,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/typeof.hpp>
#include <boost/mpl/aux_/config/ctps.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/item.hpp b/3party/boost/boost/mpl/vector/aux_/item.hpp
index da2b01ba93..71538ceb41 100644
--- a/3party/boost/boost/mpl/vector/aux_/item.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/item.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/long.hpp>
#include <boost/mpl/void.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/iterator.hpp b/3party/boost/boost/mpl/vector/aux_/iterator.hpp
index 770ed15d0e..32df315696 100644
--- a/3party/boost/boost/mpl/vector/aux_/iterator.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/iterator.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/vector/aux_/at.hpp>
#include <boost/mpl/iterator_tags.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/numbered.hpp b/3party/boost/boost/mpl/vector/aux_/numbered.hpp
index 04265a39a4..b3f03873ba 100644
--- a/3party/boost/boost/mpl/vector/aux_/numbered.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/numbered.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numbered.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/preprocessor/enum_params.hpp>
#include <boost/preprocessor/enum_shifted_params.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/numbered_c.hpp b/3party/boost/boost/mpl/vector/aux_/numbered_c.hpp
index 6a7cf40e5d..4c159f948c 100644
--- a/3party/boost/boost/mpl/vector/aux_/numbered_c.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/numbered_c.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: numbered_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/preprocessor/enum_params.hpp>
#include <boost/preprocessor/enum_shifted_params.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/pop_back.hpp b/3party/boost/boost/mpl/vector/aux_/pop_back.hpp
index a43a3a6b7d..1d95e355c0 100644
--- a/3party/boost/boost/mpl/vector/aux_/pop_back.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/pop_back.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pop_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/pop_back_fwd.hpp>
#include <boost/mpl/aux_/config/typeof.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/pop_front.hpp b/3party/boost/boost/mpl/vector/aux_/pop_front.hpp
index a448d25bf3..c94b8711c4 100644
--- a/3party/boost/boost/mpl/vector/aux_/pop_front.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/pop_front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/pop_front_fwd.hpp>
#include <boost/mpl/aux_/config/typeof.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/push_back.hpp b/3party/boost/boost/mpl/vector/aux_/push_back.hpp
index d8783ccb48..527828c9ba 100644
--- a/3party/boost/boost/mpl/vector/aux_/push_back.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/push_back.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_back_fwd.hpp>
#include <boost/mpl/aux_/config/typeof.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/push_front.hpp b/3party/boost/boost/mpl/vector/aux_/push_front.hpp
index 26b5f0002c..f315de58b7 100644
--- a/3party/boost/boost/mpl/vector/aux_/push_front.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/push_front.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/push_front_fwd.hpp>
#include <boost/mpl/aux_/config/typeof.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/size.hpp b/3party/boost/boost/mpl/vector/aux_/size.hpp
index 41b7be635b..c131e8866d 100644
--- a/3party/boost/boost/mpl/vector/aux_/size.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/size.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/size_fwd.hpp>
#include <boost/mpl/vector/aux_/O1_size.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/tag.hpp b/3party/boost/boost/mpl/vector/aux_/tag.hpp
index 0f37e92adb..90d16e38c0 100644
--- a/3party/boost/boost/mpl/vector/aux_/tag.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/tag.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/config/typeof.hpp>
#include <boost/mpl/aux_/nttp_decl.hpp>
diff --git a/3party/boost/boost/mpl/vector/aux_/vector0.hpp b/3party/boost/boost/mpl/vector/aux_/vector0.hpp
index b3bb13bbaa..402667360d 100644
--- a/3party/boost/boost/mpl/vector/aux_/vector0.hpp
+++ b/3party/boost/boost/mpl/vector/aux_/vector0.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/long.hpp>
#include <boost/mpl/void.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector0.hpp b/3party/boost/boost/mpl/vector/vector0.hpp
index 9d18104eb7..39759ddc24 100644
--- a/3party/boost/boost/mpl/vector/vector0.hpp
+++ b/3party/boost/boost/mpl/vector/vector0.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/vector/aux_/at.hpp>
#include <boost/mpl/vector/aux_/front.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector0_c.hpp b/3party/boost/boost/mpl/vector/vector0_c.hpp
index eb1dcf98b1..0e60215ddd 100644
--- a/3party/boost/boost/mpl/vector/vector0_c.hpp
+++ b/3party/boost/boost/mpl/vector/vector0_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector0_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/vector/vector0.hpp>
#include <boost/mpl/integral_c.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector10.hpp b/3party/boost/boost/mpl/vector/vector10.hpp
index 848dd82c0b..53a2a163ae 100644
--- a/3party/boost/boost/mpl/vector/vector10.hpp
+++ b/3party/boost/boost/mpl/vector/vector10.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector0.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector10_c.hpp b/3party/boost/boost/mpl/vector/vector10_c.hpp
index 4e6cf3b6e4..be52d2f7f3 100644
--- a/3party/boost/boost/mpl/vector/vector10_c.hpp
+++ b/3party/boost/boost/mpl/vector/vector10_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector10_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector0_c.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector20.hpp b/3party/boost/boost/mpl/vector/vector20.hpp
index 173eacfffe..96d1b9f45c 100644
--- a/3party/boost/boost/mpl/vector/vector20.hpp
+++ b/3party/boost/boost/mpl/vector/vector20.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector10.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector20_c.hpp b/3party/boost/boost/mpl/vector/vector20_c.hpp
index c6b7187c26..3913f26026 100644
--- a/3party/boost/boost/mpl/vector/vector20_c.hpp
+++ b/3party/boost/boost/mpl/vector/vector20_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector20_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector10_c.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector30.hpp b/3party/boost/boost/mpl/vector/vector30.hpp
index 476ec354b9..b2f0a5eb05 100644
--- a/3party/boost/boost/mpl/vector/vector30.hpp
+++ b/3party/boost/boost/mpl/vector/vector30.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector30.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector20.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector30_c.hpp b/3party/boost/boost/mpl/vector/vector30_c.hpp
index c20d8f980e..94cdab465a 100644
--- a/3party/boost/boost/mpl/vector/vector30_c.hpp
+++ b/3party/boost/boost/mpl/vector/vector30_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector30_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector20_c.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector40.hpp b/3party/boost/boost/mpl/vector/vector40.hpp
index 69203d0cb4..2d2ef8195c 100644
--- a/3party/boost/boost/mpl/vector/vector40.hpp
+++ b/3party/boost/boost/mpl/vector/vector40.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector40.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector30.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector40_c.hpp b/3party/boost/boost/mpl/vector/vector40_c.hpp
index bd7310c148..25e2ebf3d2 100644
--- a/3party/boost/boost/mpl/vector/vector40_c.hpp
+++ b/3party/boost/boost/mpl/vector/vector40_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector40_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector30_c.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector50.hpp b/3party/boost/boost/mpl/vector/vector50.hpp
index 4c3e23181f..dc2d5c20a4 100644
--- a/3party/boost/boost/mpl/vector/vector50.hpp
+++ b/3party/boost/boost/mpl/vector/vector50.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector50.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector40.hpp>
diff --git a/3party/boost/boost/mpl/vector/vector50_c.hpp b/3party/boost/boost/mpl/vector/vector50_c.hpp
index 2d2e705601..7388bf404b 100644
--- a/3party/boost/boost/mpl/vector/vector50_c.hpp
+++ b/3party/boost/boost/mpl/vector/vector50_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector50_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector40_c.hpp>
diff --git a/3party/boost/boost/mpl/vector_c.hpp b/3party/boost/boost/mpl/vector_c.hpp
index d9f35d0b57..316ce65f8a 100644
--- a/3party/boost/boost/mpl/vector_c.hpp
+++ b/3party/boost/boost/mpl/vector_c.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: vector_c.hpp 49271 2008-10-11 06:46:00Z agurtovoy $
-// $Date: 2008-10-10 23:46:00 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49271 $
+// $Id$
+// $Date$
+// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/vector.hpp>
diff --git a/3party/boost/boost/mpl/void.hpp b/3party/boost/boost/mpl/void.hpp
index ad5aa56460..3dcbdd1d0e 100644
--- a/3party/boost/boost/mpl/void.hpp
+++ b/3party/boost/boost/mpl/void.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: void.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/void_fwd.hpp>
#include <boost/mpl/bool.hpp>
diff --git a/3party/boost/boost/mpl/void_fwd.hpp b/3party/boost/boost/mpl/void_fwd.hpp
index 9643dec302..86078b5c9e 100644
--- a/3party/boost/boost/mpl/void_fwd.hpp
+++ b/3party/boost/boost/mpl/void_fwd.hpp
@@ -10,9 +10,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: void_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
-// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
-// $Revision: 49267 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/aux_/adl_barrier.hpp>
diff --git a/3party/boost/boost/mpl/zip_view.hpp b/3party/boost/boost/mpl/zip_view.hpp
index 4bc26c1eec..d709230dc9 100644
--- a/3party/boost/boost/mpl/zip_view.hpp
+++ b/3party/boost/boost/mpl/zip_view.hpp
@@ -11,9 +11,9 @@
//
// See http://www.boost.org/libs/mpl for documentation.
-// $Id: zip_view.hpp 61591 2010-04-26 21:31:09Z agurtovoy $
-// $Date: 2010-04-26 14:31:09 -0700 (Mon, 26 Apr 2010) $
-// $Revision: 61591 $
+// $Id$
+// $Date$
+// $Revision$
#include <boost/mpl/transform.hpp>
#include <boost/mpl/begin_end.hpp>
diff --git a/3party/boost/boost/msm/back/history_policies.hpp b/3party/boost/boost/msm/back/history_policies.hpp
index 4dfa021378..4b2af5866a 100644
--- a/3party/boost/boost/msm/back/history_policies.hpp
+++ b/3party/boost/boost/msm/back/history_policies.hpp
@@ -49,6 +49,12 @@ public:
}
return *this;
}
+ // this policy deletes all waiting deferred events
+ template <class Event>
+ bool process_deferred_events(Event const&)const
+ {
+ return false;
+ }
template<class Archive>
void serialize(Archive & ar, const unsigned int)
{
@@ -90,6 +96,13 @@ public:
}
return *this;
}
+ // the history policy keeps all deferred events until next reentry
+ template <class Event>
+ bool process_deferred_events(Event const&)const
+ {
+ return true;
+ }
+
template<class Archive>
void serialize(Archive & ar, const unsigned int)
{
@@ -139,6 +152,12 @@ public:
}
return *this;
}
+ // the history policy keeps deferred events until next reentry if coming from our history event
+ template <class Event>
+ bool process_deferred_events(Event const&)const
+ {
+ return ::boost::mpl::contains<Events,Event>::value;
+ }
template<class Archive>
void serialize(Archive & ar, const unsigned int)
{
diff --git a/3party/boost/boost/msm/back/metafunctions.hpp b/3party/boost/boost/msm/back/metafunctions.hpp
index a1ffc35616..ae06b08ff5 100644
--- a/3party/boost/boost/msm/back/metafunctions.hpp
+++ b/3party/boost/boost/msm/back/metafunctions.hpp
@@ -46,6 +46,8 @@
#include <boost/type_traits/is_same.hpp>
#include <boost/utility/enable_if.hpp>
+#include <boost/msm/row_tags.hpp>
+
// mpl_graph graph implementation and depth first search
#include <boost/msm/mpl_graph/incidence_list_graph.hpp>
#include <boost/msm/mpl_graph/depth_first_search.hpp>
@@ -202,7 +204,6 @@ struct get_initial_states
States,
typename ::boost::mpl::push_back< ::boost::mpl::vector0<>,States>::type >::type type;
};
-
// returns a mpl::int_ containing the size of a region. If the argument is not a sequence, returns 1
template <class region>
struct get_number_of_regions
@@ -935,6 +936,41 @@ is_exit_state_active(FSM&)
return false;
}
+// transformation metafunction to end interrupt flags
+template <class Event>
+struct transform_to_end_interrupt
+{
+ typedef boost::msm::EndInterruptFlag<Event> type;
+};
+// transform a sequence of events into another one of EndInterruptFlag<Event>
+template <class Events>
+struct apply_end_interrupt_flag
+{
+ typedef typename
+ ::boost::mpl::transform<
+ Events,transform_to_end_interrupt< ::boost::mpl::placeholders::_1> >::type type;
+};
+// returns a mpl vector containing all end interrupt events if sequence, otherwise the same event
+template <class Event>
+struct get_interrupt_events
+{
+ typedef typename ::boost::mpl::eval_if<
+ ::boost::mpl::is_sequence<Event>,
+ boost::msm::back::apply_end_interrupt_flag<Event>,
+ boost::mpl::vector1<boost::msm::EndInterruptFlag<Event> > >::type type;
+};
+
+template <class Events>
+struct build_interrupt_state_flag_list
+{
+ typedef ::boost::mpl::vector<boost::msm::InterruptedFlag> first_part;
+ typedef typename ::boost::mpl::insert_range<
+ first_part,
+ typename ::boost::mpl::end< first_part >::type,
+ Events
+ >::type type;
+};
+
} } }//boost::msm::back
#endif // BOOST_MSM_BACK_METAFUNCTIONS_H
diff --git a/3party/boost/boost/msm/back/state_machine.hpp b/3party/boost/boost/msm/back/state_machine.hpp
index 8e9bc15c47..963f456ba4 100644
--- a/3party/boost/boost/msm/back/state_machine.hpp
+++ b/3party/boost/boost/msm/back/state_machine.hpp
@@ -17,6 +17,8 @@
#include <numeric>
#include <utility>
+#include <boost/detail/no_exceptions_support.hpp>
+
#include <boost/mpl/contains.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/assert.hpp>
@@ -264,6 +266,7 @@ private:
template <class StateType,class Enable=int>
struct deferred_msg_queue_helper
{
+ void clear(){}
};
template <class StateType>
struct deferred_msg_queue_helper<StateType,
@@ -272,6 +275,10 @@ private:
{
public:
deferred_msg_queue_helper():m_deferred_events_queue(){}
+ void clear()
+ {
+ m_deferred_events_queue.clear();
+ }
deferred_events_queue_t m_deferred_events_queue;
};
@@ -1314,6 +1321,11 @@ private:
return m_events_queue.m_events_queue;
}
+ void clear_deferred_queue()
+ {
+ m_deferred_events_queue.clear();
+ }
+
deferred_events_queue_t& get_deferred_queue()
{
return m_deferred_events_queue.m_deferred_events_queue;
@@ -1732,16 +1744,21 @@ private:
template <class StateType,class EventType>
HandledEnum do_process_helper(EventType const& evt, ::boost::mpl::false_ const &, bool is_direct_call)
{
- try
+ // when compiling without exception support there is no formal parameter "e" in the catch handler.
+ // Declaring a local variable here does not hurt and will be "used" to make the code in the handler
+ // compilable although the code will never be executed.
+ std::exception e;
+ BOOST_TRY
{
return this->do_process_event(evt,is_direct_call);
}
- catch (std::exception& e)
+ BOOST_CATCH (std::exception& e)
{
// give a chance to the concrete state machine to handle
this->exception_caught(evt,*this,e);
- }
- return HANDLED_FALSE;
+ }
+ BOOST_CATCH_END
+ return HANDLED_TRUE;
}
// handling of deferred events
// if none is found in the SM, take the following empty main version
@@ -2592,6 +2609,9 @@ BOOST_PP_REPEAT(BOOST_PP_ADD(BOOST_MSM_VISITOR_ARG_SIZE,1), MSM_VISITOR_ARGS_EXE
direct_event_start_helper(this)(incomingEvent,fsm);
// handle messages which were generated and blocked in the init calls
m_event_processing = false;
+ // look for deferred events waiting
+ handle_defer_helper<library_sm> defer_helper(m_deferred_events_queue);
+ defer_helper.do_post_handle_deferred(HANDLED_TRUE);
process_message_queue(this);
}
template <class Event,class FsmType>
@@ -2604,6 +2624,11 @@ BOOST_PP_REPEAT(BOOST_PP_ADD(BOOST_MSM_VISITOR_ARG_SIZE,1), MSM_VISITOR_ARGS_EXE
(static_cast<Derived*>(this))->on_exit(incomingEvent,fsm);
// give the history a chance to handle this (or not).
m_history.history_exit(this->m_states);
+ // history decides what happens with deferred events
+ if (!m_history.process_deferred_events(incomingEvent))
+ {
+ clear_deferred_queue();
+ }
}
// the IBM and VC<8 compilers seem to have problems with the friend declaration of dispatch_table
diff --git a/3party/boost/boost/msm/front/euml/common.hpp b/3party/boost/boost/msm/front/euml/common.hpp
index f9a9cc46fa..8a7fb90575 100644
--- a/3party/boost/boost/msm/front/euml/common.hpp
+++ b/3party/boost/boost/msm/front/euml/common.hpp
@@ -2455,7 +2455,7 @@ Exit_Pt_Helper const exit_pt_ = Exit_Pt_Helper();
#define BOOST_MSM_EUML_ACTION(instance_name) \
struct instance_name ## _impl; \
- struct instance_name ## _helper : msm::front::euml::euml_action<instance_name ## _impl> \
+ struct instance_name ## _helper : boost::msm::front::euml::euml_action<instance_name ## _impl> \
{ \
instance_name ## _helper(){} \
typedef instance_name ## _impl action_name; \
@@ -2465,7 +2465,7 @@ Exit_Pt_Helper const exit_pt_ = Exit_Pt_Helper();
#define BOOST_MSM_EUML_DECLARE_ACTION(instance_name) \
struct instance_name ; \
- struct instance_name ## _helper : msm::front::euml::euml_action<instance_name > \
+ struct instance_name ## _helper : boost::msm::front::euml::euml_action<instance_name > \
{ \
instance_name ## _helper(){} \
typedef instance_name action_name; \
@@ -2474,13 +2474,13 @@ Exit_Pt_Helper const exit_pt_ = Exit_Pt_Helper();
#define BOOST_MSM_EUML_EVENT(instance_name) \
- struct instance_name ## _helper : msm::front::euml::euml_event<instance_name ## _helper>{ \
+ struct instance_name ## _helper : boost::msm::front::euml::euml_event<instance_name ## _helper>{ \
instance_name ## _helper(){} \
instance_name ## _helper const& operator()() const {return *this;} }; \
static instance_name ## _helper instance_name;
// an event matching any event
-struct kleene_ : msm::front::euml::euml_event<kleene_>, public boost::any
+struct kleene_ : boost::msm::front::euml::euml_event<kleene_>, public boost::any
{
kleene_() : boost::any(){}
template<typename ValueType>
@@ -2489,7 +2489,7 @@ struct kleene_ : msm::front::euml::euml_event<kleene_>, public boost::any
static kleene_ kleene;
#define BOOST_MSM_EUML_DECLARE_EVENT(instance_name) \
- struct instance_name : msm::front::euml::euml_event<instance_name >{ \
+ struct instance_name : boost::msm::front::euml::euml_event<instance_name >{ \
instance_name(){} \
instance_name const& operator()() const {return *this;} };
@@ -2528,9 +2528,9 @@ static kleene_ kleene;
(BOOST_PP_ENUM(n, MSM_EUML_EVENT_INSTANCE_HELPER_EXECUTE1, ~ ))const{ \
return BOOST_PP_CAT(instance,_helper) (BOOST_PP_ENUM(n, MSM_EUML_EVENT_INSTANCE_HELPER_EXECUTE2, ~ ));}
-#define BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(instance_name, attributes_name) \
+#define BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(instance_name, attributes_name) \
struct instance_name ## _helper : \
- msm::front::euml::euml_event<instance_name ## _helper> , public attributes_name \
+ boost::msm::front::euml::euml_event<instance_name ## _helper> , public attributes_name \
{ \
template <class T,int checked_size> struct size_helper \
{ \
@@ -2557,11 +2557,11 @@ static kleene_ kleene;
#define BOOST_MSM_EUML_FLAG_NAME(instance_name) instance_name ## _helper
#define BOOST_MSM_EUML_FLAG(instance_name) \
- struct instance_name ## _helper : msm::front::euml::euml_flag<instance_name ## _helper>{}; \
+ struct instance_name ## _helper : boost::msm::front::euml::euml_flag<instance_name ## _helper>{}; \
static instance_name ## _helper instance_name;
#define BOOST_MSM_EUML_DECLARE_FLAG(instance_name) \
- struct instance_name : msm::front::euml::euml_flag<instance_name >{};
+ struct instance_name : boost::msm::front::euml::euml_flag<instance_name >{};
#define BOOST_MSM_EUML_STATE_NAME(instance_name) instance_name ## _helper
diff --git a/3party/boost/boost/msm/front/states.hpp b/3party/boost/boost/msm/front/states.hpp
index a909f63f7b..73f8169da2 100644
--- a/3party/boost/boost/msm/front/states.hpp
+++ b/3party/boost/boost/msm/front/states.hpp
@@ -15,6 +15,7 @@
#include <boost/mpl/vector.hpp>
#include <boost/msm/front/common_states.hpp>
#include <boost/msm/row_tags.hpp>
+#include <boost/msm/back/metafunctions.hpp>
namespace boost { namespace msm { namespace front
{
@@ -74,9 +75,10 @@ struct interrupt_state : public boost::msm::front::detail::state_base<BASE>, SMP
{
// tags
typedef ::boost::mpl::vector0<> flag_list;
- typedef ::boost::mpl::vector<boost::msm::InterruptedFlag,
- boost::msm::EndInterruptFlag<EndInterruptEvent> >
- internal_flag_list;
+ typedef typename boost::msm::back::build_interrupt_state_flag_list<
+ typename boost::msm::back::get_interrupt_events<EndInterruptEvent>::type
+ >::type internal_flag_list;
+
//default: no deferred events
typedef ::boost::mpl::vector0<> deferred_events;
};
diff --git a/3party/boost/boost/msm/mpl_graph/mpl_graph.hpp b/3party/boost/boost/msm/mpl_graph/mpl_graph.hpp
index ec2db14c74..ec2db14c74 100644..100755
--- a/3party/boost/boost/msm/mpl_graph/mpl_graph.hpp
+++ b/3party/boost/boost/msm/mpl_graph/mpl_graph.hpp
diff --git a/3party/boost/boost/multi_array/base.hpp b/3party/boost/boost/multi_array/base.hpp
index 0189831a89..34e325b20f 100644
--- a/3party/boost/boost/multi_array/base.hpp
+++ b/3party/boost/boost/multi_array/base.hpp
@@ -29,7 +29,6 @@
#include "boost/mpl/eval_if.hpp"
#include "boost/mpl/if.hpp"
#include "boost/mpl/size_t.hpp"
-#include "boost/mpl/aux_/msvc_eti_base.hpp"
#include "boost/iterator/reverse_iterator.hpp"
#include "boost/static_assert.hpp"
#include "boost/type.hpp"
@@ -65,7 +64,7 @@ namespace multi_array_types {
// object creation in small-memory environments. Thus, the objects
// can be left undefined by defining BOOST_MULTI_ARRAY_NO_GENERATORS
// before loading multi_array.hpp.
-#if !BOOST_MULTI_ARRAY_NO_GENERATORS
+#ifndef BOOST_MULTI_ARRAY_NO_GENERATORS
namespace {
multi_array_types::extent_gen extents;
multi_array_types::index_gen indices;
@@ -210,44 +209,11 @@ struct value_accessor_generator {
>::type type;
};
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
-struct eti_value_accessor
-{
- typedef int index;
- typedef int size_type;
- typedef int element;
- typedef int index_range;
- typedef int value_type;
- typedef int reference;
- typedef int const_reference;
-};
-
-template <>
-struct value_accessor_generator<int,int>
-{
- typedef eti_value_accessor type;
-};
-
-template <class T, class NumDims>
-struct associated_types
- : mpl::aux::msvc_eti_base<
- typename value_accessor_generator<T,NumDims>::type
- >::type
-{};
-
-template <>
-struct associated_types<int,int> : eti_value_accessor {};
-
-#else
-
template <class T, class NumDims>
struct associated_types
: value_accessor_generator<T,NumDims>::type
{};
-#endif
-
//
// choose value accessor ends
/////////////////////////////////////////////////////////////////////////
@@ -272,13 +238,7 @@ struct mutable_iterator_tag
template <typename T, std::size_t NumDims>
class multi_array_impl_base
:
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- public mpl::aux::msvc_eti_base<
- typename value_accessor_generator<T,mpl::size_t<NumDims> >::type
- >::type
-#else
public value_accessor_generator<T,mpl::size_t<NumDims> >::type
-#endif
{
typedef associated_types<T,mpl::size_t<NumDims> > types;
public:
diff --git a/3party/boost/boost/multi_array/iterator.hpp b/3party/boost/boost/multi_array/iterator.hpp
index c77d34ef96..e47e0b39a7 100644
--- a/3party/boost/boost/multi_array/iterator.hpp
+++ b/3party/boost/boost/multi_array/iterator.hpp
@@ -20,7 +20,6 @@
#include "boost/multi_array/base.hpp"
#include "boost/iterator/iterator_facade.hpp"
-#include "boost/mpl/aux_/msvc_eti_base.hpp"
#include <algorithm>
#include <cstddef>
#include <iterator>
@@ -59,13 +58,7 @@ class array_iterator
, Reference
>
, private
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- mpl::aux::msvc_eti_base<typename
-#endif
value_accessor_generator<T,NumDims>::type
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- >::type
-#endif
{
friend class iterator_core_access;
typedef detail::multi_array::associated_types<T,NumDims> access_t;
diff --git a/3party/boost/boost/multi_array/multi_array_ref.hpp b/3party/boost/boost/multi_array/multi_array_ref.hpp
index 92e8fb4154..7c0fb038a6 100644
--- a/3party/boost/boost/multi_array/multi_array_ref.hpp
+++ b/3party/boost/boost/multi_array/multi_array_ref.hpp
@@ -225,11 +225,7 @@ public:
}
// see generate_array_view in base.hpp
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <int NDims>
-#else
- template <int NumDims, int NDims> // else ICE
-#endif // BOOST_MSVC
typename const_array_view<NDims>::type
operator[](const detail::multi_array::
index_gen<NumDims,NDims>& indices)
@@ -529,11 +525,7 @@ public:
// See note attached to generate_array_view in base.hpp
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <int NDims>
-#else
- template <int NumDims, int NDims> // else ICE
-#endif // BOOST_MSVC
typename array_view<NDims>::type
operator[](const detail::multi_array::
index_gen<NumDims,NDims>& indices) {
@@ -591,11 +583,7 @@ public:
}
// See note attached to generate_array_view in base.hpp
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <int NDims>
-#else
- template <int NumDims, int NDims> // else ICE
-#endif // BOOST_MSVC
typename const_array_view<NDims>::type
operator[](const detail::multi_array::
index_gen<NumDims,NDims>& indices)
diff --git a/3party/boost/boost/multi_array/subarray.hpp b/3party/boost/boost/multi_array/subarray.hpp
index a49891612f..5c36599c8d 100644
--- a/3party/boost/boost/multi_array/subarray.hpp
+++ b/3party/boost/boost/multi_array/subarray.hpp
@@ -87,11 +87,7 @@ public:
}
// see generate_array_view in base.hpp
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <int NDims>
-#else
- template <int NumDims, int NDims> // else ICE
-#endif // BOOST_MSVC
typename const_array_view<NDims>::type
operator[](const boost::detail::multi_array::
index_gen<NumDims,NDims>& indices)
@@ -267,11 +263,7 @@ public:
}
// see generate_array_view in base.hpp
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <int NDims>
-#else
- template <int NumDims, int NDims> // else ICE
-#endif // BOOST_MSVC
typename array_view<NDims>::type
operator[](const boost::detail::multi_array::
index_gen<NumDims,NDims>& indices) {
@@ -332,11 +324,7 @@ public:
}
// see generate_array_view in base.hpp
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <int NDims>
-#else
- template <int NumDims, int NDims> // else ICE
-#endif // BOOST_MSVC
typename const_array_view<NDims>::type
operator[](const boost::detail::multi_array::
index_gen<NumDims,NDims>& indices)
diff --git a/3party/boost/boost/multi_array/view.hpp b/3party/boost/boost/multi_array/view.hpp
index d11e2604a2..59ac089ddd 100644
--- a/3party/boost/boost/multi_array/view.hpp
+++ b/3party/boost/boost/multi_array/view.hpp
@@ -135,11 +135,7 @@ public:
}
// see generate_array_view in base.hpp
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <int NDims>
-#else
- template <int NumDims, int NDims> // else ICE
-#endif // BOOST_MSVC
typename const_array_view<NDims>::type
operator[](const boost::detail::multi_array::
index_gen<NumDims,NDims>& indices)
@@ -346,11 +342,7 @@ public:
// see generate_array_view in base.hpp
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <int NDims>
-#else
- template <int NumDims, int NDims> // else ICE
-#endif // BOOST_MSVC
typename array_view<NDims>::type
operator[](const boost::detail::multi_array::
index_gen<NumDims,NDims>& indices) {
@@ -402,11 +394,7 @@ public:
}
// see generate_array_view in base.hpp
-#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <int NDims>
-#else
- template <int NumDims, int NDims> // else ICE
-#endif // BOOST_MSVC
typename const_array_view<NDims>::type
operator[](const boost::detail::multi_array::
index_gen<NumDims,NDims>& indices)
diff --git a/3party/boost/boost/multi_index/composite_key.hpp b/3party/boost/boost/multi_index/composite_key.hpp
index 2c21a6a41e..cf3349d6fa 100644
--- a/3party/boost/boost/multi_index/composite_key.hpp
+++ b/3party/boost/boost/multi_index/composite_key.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2011 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,19 +9,17 @@
#ifndef BOOST_MULTI_INDEX_COMPOSITE_KEY_HPP
#define BOOST_MULTI_INDEX_COMPOSITE_KEY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
#include <boost/functional/hash_fwd.hpp>
#include <boost/multi_index/detail/access_specifier.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/or.hpp>
-#include <boost/mpl/aux_/nttp_decl.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/control/expr_if.hpp>
#include <boost/preprocessor/list/at.hpp>
@@ -59,12 +57,8 @@
*/
#if !defined(BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE)
-#if defined(BOOST_MSVC)&&(BOOST_MSVC<1300)
-#define BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE 5
-#else
#define BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE 10
#endif
-#endif
/* maximum number of key extractors in a composite key */
@@ -114,17 +108,14 @@ namespace detail{
/* n-th key extractor of a composite key */
-template<typename CompositeKey,BOOST_MPL_AUX_NTTP_DECL(int, N)>
+template<typename CompositeKey,int N>
struct nth_key_from_value
{
typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
- typedef typename prevent_eti<
+ typedef typename mpl::eval_if_c<
+ N<tuples::length<key_extractor_tuple>::value,
tuples::element<N,key_extractor_tuple>,
- typename mpl::eval_if_c<
- N<tuples::length<key_extractor_tuple>::value,
- tuples::element<N,key_extractor_tuple>,
- mpl::identity<tuples::null_type>
- >::type
+ mpl::identity<tuples::null_type>
>::type type;
};
@@ -146,7 +137,7 @@ struct BOOST_PP_CAT(key_,name)<tuples::null_type> \
typedef tuples::null_type type; \
}; \
\
-template<typename CompositeKey,BOOST_MPL_AUX_NTTP_DECL(int, N)> \
+template<typename CompositeKey,int N> \
struct BOOST_PP_CAT(nth_composite_key_,name) \
{ \
typedef typename nth_key_from_value<CompositeKey,N>::type key_from_value; \
@@ -589,16 +580,6 @@ struct composite_key_result
/* composite_key */
-/* NB. Some overloads of operator() have an extra dummy parameter int=0.
- * This disambiguator serves several purposes:
- * - Without it, MSVC++ 6.0 incorrectly regards some overloads as
- * specializations of a previous member function template.
- * - MSVC++ 6.0/7.0 seem to incorrectly treat some different memfuns
- * as if they have the same signature.
- * - If remove_const is broken due to lack of PTS, int=0 avoids the
- * declaration of memfuns with identical signature.
- */
-
template<
typename Value,
BOOST_MULTI_INDEX_CK_ENUM(BOOST_MULTI_INDEX_CK_TEMPLATE_PARM,KeyFromValue)
@@ -648,7 +629,7 @@ public:
return result_type(*this,x.get());
}
- result_type operator()(const reference_wrapper<value_type>& x,int=0)const
+ result_type operator()(const reference_wrapper<value_type>& x)const
{
return result_type(*this,x.get());
}
@@ -1238,7 +1219,6 @@ public:
* for composite_key_results enabling interoperation with tuples of values.
*/
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
namespace std{
template<typename CompositeKey>
@@ -1278,34 +1258,6 @@ struct hash<boost::multi_index::composite_key_result<CompositeKey> >:
};
} /* namespace boost */
-#else
-/* Lacking template partial specialization, std::equal_to, std::less and
- * std::greater will still work for composite_key_results although without
- * tuple interoperability. To achieve the same graceful degrading with
- * boost::hash, we define the appropriate hash_value overload.
- */
-
-namespace boost{
-
-#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
-namespace multi_index{
-#endif
-
-template<typename CompositeKey>
-inline std::size_t hash_value(
- const boost::multi_index::composite_key_result<CompositeKey>& x)
-{
- boost::multi_index::composite_key_result_hash<
- boost::multi_index::composite_key_result<CompositeKey> > h;
- return h(x);
-}
-
-#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
-} /* namespace multi_index */
-#endif
-
-} /* namespace boost */
-#endif
#undef BOOST_MULTI_INDEX_CK_RESULT_HASH_SUPER
#undef BOOST_MULTI_INDEX_CK_RESULT_GREATER_SUPER
diff --git a/3party/boost/boost/multi_index/detail/access_specifier.hpp b/3party/boost/boost/multi_index/detail/access_specifier.hpp
index 84c2f7dc92..f3346e836d 100644
--- a/3party/boost/boost/multi_index/detail/access_specifier.hpp
+++ b/3party/boost/boost/multi_index/detail/access_specifier.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_ACCESS_SPECIFIER_HPP
#define BOOST_MULTI_INDEX_DETAIL_ACCESS_SPECIFIER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -42,8 +42,7 @@
* official Sun Studio 12.
*/
-#if BOOST_WORKAROUND(__GNUC__, <3)||\
- BOOST_WORKAROUND(__GNUC__,==3)&&(__GNUC_MINOR__<4)||\
+#if BOOST_WORKAROUND(__GNUC__,==3)&&(__GNUC_MINOR__<4)||\
BOOST_WORKAROUND(BOOST_MSVC,==1310)||\
BOOST_WORKAROUND(BOOST_MSVC,==1400)||\
BOOST_WORKAROUND(__SUNPRO_CC,BOOST_TESTED_AT(0x590))
diff --git a/3party/boost/boost/multi_index/detail/adl_swap.hpp b/3party/boost/boost/multi_index/detail/adl_swap.hpp
index e78235d762..02b0644229 100644
--- a/3party/boost/boost/multi_index/detail/adl_swap.hpp
+++ b/3party/boost/boost/multi_index/detail/adl_swap.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_ADL_SWAP_HPP
#define BOOST_MULTI_INDEX_DETAIL_ADL_SWAP_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/archive_constructed.hpp b/3party/boost/boost/multi_index/detail/archive_constructed.hpp
index ee00dfaffc..0cf7991e86 100644
--- a/3party/boost/boost/multi_index/detail/archive_constructed.hpp
+++ b/3party/boost/boost/multi_index/detail/archive_constructed.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_ARCHIVE_CONSTRUCTED_HPP
#define BOOST_MULTI_INDEX_DETAIL_ARCHIVE_CONSTRUCTED_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/auto_space.hpp b/3party/boost/boost/multi_index/detail/auto_space.hpp
index 9b0a0dc618..9d78c3a363 100644
--- a/3party/boost/boost/multi_index/detail/auto_space.hpp
+++ b/3party/boost/boost/multi_index/detail/auto_space.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_AUTO_SPACE_HPP
#define BOOST_MULTI_INDEX_DETAIL_AUTO_SPACE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -17,7 +17,6 @@
#include <algorithm>
#include <boost/detail/allocator_utilities.hpp>
#include <boost/multi_index/detail/adl_swap.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#include <boost/noncopyable.hpp>
#include <memory>
@@ -40,17 +39,14 @@ namespace detail{
* "of zero length", http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14176
* C++ Standard Library Defect Report List (Revision 28), issue 199
* "What does allocate(0) return?",
- * http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#199
+ * http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#199
*/
template<typename T,typename Allocator=std::allocator<T> >
struct auto_space:private noncopyable
{
- typedef typename prevent_eti<
- Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,T
- >::type
+ typedef typename boost::detail::allocator::rebind_to<
+ Allocator,T
>::type::pointer pointer;
explicit auto_space(const Allocator& al=Allocator(),std::size_t n=1):
diff --git a/3party/boost/boost/multi_index/detail/base_type.hpp b/3party/boost/boost/multi_index/detail/base_type.hpp
index d25332e4e2..8c9b62b716 100644
--- a/3party/boost/boost/multi_index/detail/base_type.hpp
+++ b/3party/boost/boost/multi_index/detail/base_type.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_BASE_TYPE_HPP
#define BOOST_MULTI_INDEX_DETAIL_BASE_TYPE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -20,7 +20,6 @@
#include <boost/mpl/size.hpp>
#include <boost/multi_index/detail/index_base.hpp>
#include <boost/multi_index/detail/is_index_list.hpp>
-#include <boost/multi_index/detail/msvc_index_specifier.hpp>
#include <boost/static_assert.hpp>
namespace boost{
@@ -33,17 +32,6 @@ namespace detail{
* a index list.
*/
-#if BOOST_WORKAROUND(BOOST_MSVC,<1310)
-struct index_applier
-{
- template<typename IndexSpecifierMeta,typename SuperMeta>
- struct apply:
- msvc_index_specifier<IndexSpecifierMeta::type>::
- template result_index_class<SuperMeta>
- {
- };
-};
-#else
struct index_applier
{
template<typename IndexSpecifierMeta,typename SuperMeta>
@@ -54,7 +42,6 @@ struct index_applier
BOOST_NESTED_TEMPLATE index_class<SuperMeta>::type type;
};
};
-#endif
template<int N,typename Value,typename IndexSpecifierList,typename Allocator>
struct nth_layer
diff --git a/3party/boost/boost/multi_index/detail/bidir_node_iterator.hpp b/3party/boost/boost/multi_index/detail/bidir_node_iterator.hpp
index 2155255c4c..9bb04701f4 100644
--- a/3party/boost/boost/multi_index/detail/bidir_node_iterator.hpp
+++ b/3party/boost/boost/multi_index/detail/bidir_node_iterator.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_BIDIR_NODE_ITERATOR_HPP
#define BOOST_MULTI_INDEX_DETAIL_BIDIR_NODE_ITERATOR_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/bucket_array.hpp b/3party/boost/boost/multi_index/detail/bucket_array.hpp
index a6772adb7f..f688ba1621 100644
--- a/3party/boost/boost/multi_index/detail/bucket_array.hpp
+++ b/3party/boost/boost/multi_index/detail/bucket_array.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_BUCKET_ARRAY_HPP
#define BOOST_MULTI_INDEX_DETAIL_BUCKET_ARRAY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -17,8 +17,11 @@
#include <algorithm>
#include <boost/multi_index/detail/auto_space.hpp>
#include <boost/multi_index/detail/hash_index_node.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#include <boost/noncopyable.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/enum.hpp>
+#include <boost/preprocessor/seq/size.hpp>
#include <cstddef>
#include <limits.h>
@@ -36,115 +39,143 @@ namespace detail{
/* bucket structure for use by hashed indices */
-class bucket_array_base:private noncopyable
-{
-protected:
- inline static std::size_t next_prime(std::size_t n)
- {
- static const std::size_t prime_list[]={
- 53ul, 97ul, 193ul, 389ul, 769ul,
- 1543ul, 3079ul, 6151ul, 12289ul, 24593ul,
- 49157ul, 98317ul, 196613ul, 393241ul, 786433ul,
- 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul,
- 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,
- 1610612741ul, 3221225473ul,
+#define BOOST_MULTI_INDEX_BA_SIZES_32BIT \
+(53ul)(97ul)(193ul)(389ul)(769ul) \
+(1543ul)(3079ul)(6151ul)(12289ul)(24593ul) \
+(49157ul)(98317ul)(196613ul)(393241ul)(786433ul) \
+(1572869ul)(3145739ul)(6291469ul)(12582917ul)(25165843ul) \
+(50331653ul)(100663319ul)(201326611ul)(402653189ul)(805306457ul) \
+(1610612741ul)(3221225473ul)
#if ((((ULONG_MAX>>16)>>16)>>16)>>15)==0 /* unsigned long less than 64 bits */
- 4294967291ul
+#define BOOST_MULTI_INDEX_BA_SIZES \
+BOOST_MULTI_INDEX_BA_SIZES_32BIT \
+(4294967291ul)
#else
- /* obtained with aid from
- * http://javaboutique.internet.com/prime_numb/
- * http://www.rsok.com/~jrm/next_ten_primes.html
- * and verified with
- * http://www.alpertron.com.ar/ECM.HTM
- */
-
- 6442450939ul, 12884901893ul, 25769803751ul, 51539607551ul,
- 103079215111ul, 206158430209ul, 412316860441ul, 824633720831ul,
- 1649267441651ul, 3298534883309ul, 6597069766657ul, 13194139533299ul,
- 26388279066623ul, 52776558133303ul, 105553116266489ul, 211106232532969ul,
- 422212465066001ul, 844424930131963ul, 1688849860263953ul,
- 3377699720527861ul, 6755399441055731ul, 13510798882111483ul,
- 27021597764222939ul, 54043195528445957ul, 108086391056891903ul,
- 216172782113783843ul, 432345564227567621ul, 864691128455135207ul,
- 1729382256910270481ul, 3458764513820540933ul, 6917529027641081903ul,
- 13835058055282163729ul, 18446744073709551557ul
+ /* obtained with aid from
+ * http://javaboutique.internet.com/prime_numb/
+ * http://www.rsok.com/~jrm/next_ten_primes.html
+ * and verified with
+ * http://www.alpertron.com.ar/ECM.HTM
+ */
+
+#define BOOST_MULTI_INDEX_BA_SIZES \
+BOOST_MULTI_INDEX_BA_SIZES_32BIT \
+(6442450939ul)(12884901893ul)(25769803751ul)(51539607551ul) \
+(103079215111ul)(206158430209ul)(412316860441ul)(824633720831ul) \
+(1649267441651ul)(3298534883309ul)(6597069766657ul)(13194139533299ul) \
+(26388279066623ul)(52776558133303ul)(105553116266489ul)(211106232532969ul) \
+(422212465066001ul)(844424930131963ul)(1688849860263953ul) \
+(3377699720527861ul)(6755399441055731ul)(13510798882111483ul) \
+(27021597764222939ul)(54043195528445957ul)(108086391056891903ul) \
+(216172782113783843ul)(432345564227567621ul)(864691128455135207ul) \
+(1729382256910270481ul)(3458764513820540933ul)(6917529027641081903ul) \
+(13835058055282163729ul)(18446744073709551557ul)
#endif
- };
- static const std::size_t prime_list_size=
- sizeof(prime_list)/sizeof(prime_list[0]);
+template<bool _=true> /* templatized to have in-header static var defs */
+class bucket_array_base:private noncopyable
+{
+protected:
+ static const std::size_t sizes[];
+
+ static std::size_t size_index(std::size_t n)
+ {
+ const std::size_t *bound=std::lower_bound(sizes,sizes+sizes_length,n);
+ if(bound==sizes+sizes_length)--bound;
+ return bound-sizes;
+ }
+
+#define BOOST_MULTI_INDEX_BA_POSITION_CASE(z,n,_) \
+ case n:return hash%BOOST_PP_SEQ_ELEM(n,BOOST_MULTI_INDEX_BA_SIZES);
- std::size_t const *bound=
- std::lower_bound(prime_list,prime_list+prime_list_size,n);
- if(bound==prime_list+prime_list_size)bound--;
- return *bound;
+ static std::size_t position(std::size_t hash,std::size_t size_index_)
+ {
+ /* Accelerate hash%sizes[size_index_] by replacing with a switch on
+ * hash%Ci expressions, each Ci a compile-time constant, which the
+ * compiler can implement without using integer division.
+ */
+
+ switch(size_index_){
+ default: /* never used */
+ BOOST_PP_REPEAT(
+ BOOST_PP_SEQ_SIZE(BOOST_MULTI_INDEX_BA_SIZES),
+ BOOST_MULTI_INDEX_BA_POSITION_CASE,~)
+ }
}
+
+private:
+ static const std::size_t sizes_length;
};
+template<bool _>
+const std::size_t bucket_array_base<_>::sizes[]={
+ BOOST_PP_SEQ_ENUM(BOOST_MULTI_INDEX_BA_SIZES)
+};
+
+template<bool _>
+const std::size_t bucket_array_base<_>::sizes_length=
+ sizeof(bucket_array_base<_>::sizes)/
+ sizeof(bucket_array_base<_>::sizes[0]);
+
+#undef BOOST_MULTI_INDEX_BA_POSITION_CASE
+#undef BOOST_MULTI_INDEX_BA_SIZES
+#undef BOOST_MULTI_INDEX_BA_SIZES_32BIT
+
template<typename Allocator>
-class bucket_array:public bucket_array_base
+class bucket_array:bucket_array_base<>
{
- typedef typename prevent_eti<
- Allocator,
- hashed_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- Allocator,
- char
- >::type
- >
- >::type node_impl_type;
+ typedef bucket_array_base<> super;
+ typedef hashed_index_base_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ char
+ >::type
+ > base_node_impl_type;
public:
- typedef typename node_impl_type::pointer pointer;
+ typedef typename base_node_impl_type::base_pointer base_pointer;
+ typedef typename base_node_impl_type::pointer pointer;
- bucket_array(const Allocator& al,pointer end_,std::size_t size):
- size_(bucket_array_base::next_prime(size)),
- spc(al,size_+1)
+ bucket_array(const Allocator& al,pointer end_,std::size_t size_):
+ size_index_(super::size_index(size_)),
+ spc(al,super::sizes[size_index_]+1)
{
- clear();
- end()->next()=end_;
- end_->next()=end();
+ clear(end_);
}
std::size_t size()const
{
- return size_;
+ return super::sizes[size_index_];
}
std::size_t position(std::size_t hash)const
{
- return hash%size_;
+ return super::position(hash,size_index_);
}
- pointer begin()const{return buckets();}
- pointer end()const{return buckets()+size_;}
- pointer at(std::size_t n)const{return buckets()+n;}
+ base_pointer begin()const{return buckets();}
+ base_pointer end()const{return buckets()+size();}
+ base_pointer at(std::size_t n)const{return buckets()+n;}
- std::size_t first_nonempty(std::size_t n)const
+ void clear(pointer end_)
{
- for(;;++n){
- pointer x=at(n);
- if(x->next()!=x)return n;
- }
- }
-
- void clear()
- {
- for(pointer x=begin(),y=end();x!=y;++x)x->next()=x;
- }
+ for(base_pointer x=begin(),y=end();x!=y;++x)x->prior()=pointer(0);
+ end()->prior()=end_->prior()=end_;
+ end_->next()=end();
+ }
void swap(bucket_array& x)
{
- std::swap(size_,x.size_);
+ std::swap(size_index_,x.size_index_);
spc.swap(x.spc);
}
private:
- std::size_t size_;
- auto_space<node_impl_type,Allocator> spc;
+ std::size_t size_index_;
+ auto_space<base_node_impl_type,Allocator> spc;
- pointer buckets()const
+ base_pointer buckets()const
{
return spc.data();
}
diff --git a/3party/boost/boost/multi_index/detail/converter.hpp b/3party/boost/boost/multi_index/detail/converter.hpp
index a46cff621a..3e04a3e829 100644
--- a/3party/boost/boost/multi_index/detail/converter.hpp
+++ b/3party/boost/boost/multi_index/detail/converter.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_CONVERTER_HPP
#define BOOST_MULTI_INDEX_DETAIL_CONVERTER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/copy_map.hpp b/3party/boost/boost/multi_index/detail/copy_map.hpp
index 4279a8d0c2..a0b6cad590 100644
--- a/3party/boost/boost/multi_index/detail/copy_map.hpp
+++ b/3party/boost/boost/multi_index/detail/copy_map.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_COPY_MAP_HPP
#define BOOST_MULTI_INDEX_DETAIL_COPY_MAP_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -17,7 +17,6 @@
#include <algorithm>
#include <boost/detail/no_exceptions_support.hpp>
#include <boost/multi_index/detail/auto_space.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#include <boost/noncopyable.hpp>
#include <cstddef>
#include <functional>
@@ -110,20 +109,18 @@ public:
}
private:
- typedef typename prevent_eti<
- Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,Node>::type
- >::type allocator_type;
- typedef typename allocator_type::pointer allocator_pointer;
-
- allocator_type al_;
- std::size_t size_;
- auto_space<copy_map_entry<Node>,Allocator> spc;
- std::size_t n;
- Node* header_org_;
- Node* header_cpy_;
- bool released;
+ typedef typename boost::detail::allocator::rebind_to<
+ Allocator,Node
+ >::type allocator_type;
+ typedef typename allocator_type::pointer allocator_pointer;
+
+ allocator_type al_;
+ std::size_t size_;
+ auto_space<copy_map_entry<Node>,Allocator> spc;
+ std::size_t n;
+ Node* header_org_;
+ Node* header_cpy_;
+ bool released;
void deallocate(Node* node)
{
diff --git a/3party/boost/boost/multi_index/detail/do_not_copy_elements_tag.hpp b/3party/boost/boost/multi_index/detail/do_not_copy_elements_tag.hpp
new file mode 100644
index 0000000000..f0fa730425
--- /dev/null
+++ b/3party/boost/boost/multi_index/detail/do_not_copy_elements_tag.hpp
@@ -0,0 +1,34 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_DO_NOT_COPY_ELEMENTS_TAG_HPP
+#define BOOST_MULTI_INDEX_DETAIL_DO_NOT_COPY_ELEMENTS_TAG_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Used to mark a special ctor variant that copies the internal objects of
+ * a container but not its elements.
+ */
+
+struct do_not_copy_elements_tag{};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/3party/boost/boost/multi_index/detail/duplicates_iterator.hpp b/3party/boost/boost/multi_index/detail/duplicates_iterator.hpp
index 027dabd215..cbebf26404 100644
--- a/3party/boost/boost/multi_index/detail/duplicates_iterator.hpp
+++ b/3party/boost/boost/multi_index/detail/duplicates_iterator.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_DUPLICATES_ITERATOR_HPP
#define BOOST_MULTI_INDEX_DETAIL_DUPLICATES_ITERATOR_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/has_tag.hpp b/3party/boost/boost/multi_index/detail/has_tag.hpp
index 83b28ccb6b..217b61143a 100644
--- a/3party/boost/boost/multi_index/detail/has_tag.hpp
+++ b/3party/boost/boost/multi_index/detail/has_tag.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_HAS_TAG_HPP
#define BOOST_MULTI_INDEX_DETAIL_HAS_TAG_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/hash_index_args.hpp b/3party/boost/boost/multi_index/detail/hash_index_args.hpp
index 4972f9bbe1..81902f5a4a 100644
--- a/3party/boost/boost/multi_index/detail/hash_index_args.hpp
+++ b/3party/boost/boost/multi_index/detail/hash_index_args.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_ARGS_HPP
#define BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_ARGS_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/hash_index_iterator.hpp b/3party/boost/boost/multi_index/detail/hash_index_iterator.hpp
index 352c1d805a..f8e983dbb4 100644
--- a/3party/boost/boost/multi_index/detail/hash_index_iterator.hpp
+++ b/3party/boost/boost/multi_index/detail/hash_index_iterator.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_ITERATOR_HPP
#define BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_ITERATOR_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -19,6 +19,7 @@
#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/version.hpp>
#endif
namespace boost{
@@ -30,10 +31,13 @@ namespace detail{
/* Iterator class for hashed indices.
*/
-template<typename Node,typename BucketArray>
+struct hashed_index_global_iterator_tag{};
+struct hashed_index_local_iterator_tag{};
+
+template<typename Node,typename BucketArray,typename Category>
class hashed_index_iterator:
public forward_iterator_helper<
- hashed_index_iterator<Node,BucketArray>,
+ hashed_index_iterator<Node,BucketArray,Category>,
typename Node::value_type,
std::ptrdiff_t,
const typename Node::value_type*,
@@ -41,9 +45,7 @@ class hashed_index_iterator:
{
public:
hashed_index_iterator(){}
- hashed_index_iterator(Node* node_,BucketArray* buckets_):
- node(node_),buckets(buckets_)
- {}
+ hashed_index_iterator(Node* node_):node(node_){}
const typename Node::value_type& operator*()const
{
@@ -52,7 +54,7 @@ public:
hashed_index_iterator& operator++()
{
- Node::increment(node,buckets->begin(),buckets->end());
+ this->increment(Category());
return *this;
}
@@ -70,16 +72,42 @@ public:
{
node_base_type* bnode=node;
ar<<serialization::make_nvp("pointer",bnode);
- ar<<serialization::make_nvp("pointer",buckets);
}
template<class Archive>
- void load(Archive& ar,const unsigned int)
+ void load(Archive& ar,const unsigned int version)
+ {
+ load(ar,version,Category());
+ }
+
+ template<class Archive>
+ void load(
+ Archive& ar,const unsigned int version,hashed_index_global_iterator_tag)
{
node_base_type* bnode;
ar>>serialization::make_nvp("pointer",bnode);
node=static_cast<Node*>(bnode);
- ar>>serialization::make_nvp("pointer",buckets);
+ if(version<1){
+ BucketArray* throw_away; /* consume unused ptr */
+ ar>>serialization::make_nvp("pointer",throw_away);
+ }
+ }
+
+ template<class Archive>
+ void load(
+ Archive& ar,const unsigned int version,hashed_index_local_iterator_tag)
+ {
+ node_base_type* bnode;
+ ar>>serialization::make_nvp("pointer",bnode);
+ node=static_cast<Node*>(bnode);
+ if(version<1){
+ BucketArray* buckets;
+ ar>>serialization::make_nvp("pointer",buckets);
+ if(buckets&&node&&node->impl()==buckets->end()->prior()){
+ /* end local_iterators used to point to end node, now they are null */
+ node=0;
+ }
+ }
}
#endif
@@ -90,14 +118,24 @@ public:
Node* get_node()const{return node;}
private:
- Node* node;
- BucketArray* buckets;
+
+ void increment(hashed_index_global_iterator_tag)
+ {
+ Node::increment(node);
+ }
+
+ void increment(hashed_index_local_iterator_tag)
+ {
+ Node::increment_local(node);
+ }
+
+ Node* node;
};
-template<typename Node,typename BucketArray>
+template<typename Node,typename BucketArray,typename Category>
bool operator==(
- const hashed_index_iterator<Node,BucketArray>& x,
- const hashed_index_iterator<Node,BucketArray>& y)
+ const hashed_index_iterator<Node,BucketArray,Category>& x,
+ const hashed_index_iterator<Node,BucketArray,Category>& y)
{
return x.get_node()==y.get_node();
}
@@ -106,6 +144,22 @@ bool operator==(
} /* namespace multi_index */
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+/* class version = 1 : hashed_index_iterator does no longer serialize a bucket
+ * array pointer.
+ */
+
+namespace serialization {
+template<typename Node,typename BucketArray,typename Category>
+struct version<
+ boost::multi_index::detail::hashed_index_iterator<Node,BucketArray,Category>
+>
+{
+ BOOST_STATIC_CONSTANT(int,value=1);
+};
+} /* namespace serialization */
+#endif
+
} /* namespace boost */
#endif
diff --git a/3party/boost/boost/multi_index/detail/hash_index_node.hpp b/3party/boost/boost/multi_index/detail/hash_index_node.hpp
index edb2c10649..cfc60f6488 100644
--- a/3party/boost/boost/multi_index/detail/hash_index_node.hpp
+++ b/3party/boost/boost/multi_index/detail/hash_index_node.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,14 +9,13 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_NODE_HPP
#define BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_NODE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
#include <boost/detail/allocator_utilities.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
-#include <functional>
+#include <utility>
namespace boost{
@@ -24,104 +23,706 @@ namespace multi_index{
namespace detail{
-/* singly-linked node for use by hashed_index */
+/* Certain C++ requirements on unordered associative containers (see LWG issue
+ * #579) imply a data structure where nodes are linked in a single list, which
+ * in its turn forces implementors to add additional overhed per node to
+ * associate each with its corresponding bucket. Others resort to storing hash
+ * values, we use an alternative structure providing unconditional O(1)
+ * manipulation, even in situations of unfair hash distribution, plus some
+ * lookup speedups. For unique indices we maintain a doubly linked list of
+ * nodes except that if N is the first node of a bucket its associated
+ * bucket node is embedded between N and the preceding node in the following
+ * manner:
+ *
+ * +---+ +---+ +---+ +---+
+ * <--+ |<--+ | <--+ |<--+ |
+ * ... | B0| | B1| ... | B1| | B2| ...
+ * | |-+ | +--> | |-+ | +-->
+ * +-+-+ | +---+ +-+-+ | +---+
+ * | ^ | ^
+ * | | | |
+ * | +-+ | +-+
+ * | | | |
+ * v | v |
+ * --+---+---+---+-- --+---+---+---+--
+ * ... | | B1| | ... | | B2| | ...
+ * --+---+---+---+-- --+---+---+---+--
+ *
+ *
+ * The fist and last nodes of buckets can be checked with
+ *
+ * first node of a bucket: Npn != N
+ * last node of a bucket: Nnp != N
+ *
+ * (n and p short for ->next(), ->prior(), bucket nodes have prior pointers
+ * only). Pure insert and erase (without lookup) can be unconditionally done
+ * in O(1).
+ * For non-unique indices we add the following additional complexity: when
+ * there is a group of 3 or more equivalent elements, they are linked as
+ * follows:
+ *
+ * +-----------------------+
+ * | v
+ * +---+ | +---+ +---+ +---+
+ * | | +-+ | | |<--+ |
+ * | F | | S | ... | P | | L |
+ * | +-->| | | +-+ | |
+ * +---+ +---+ +---+ | +---+
+ * ^ |
+ * +-----------------------+
+ *
+ * F, S, P and L are the first, second, penultimate and last node in the
+ * group, respectively (S and P can coincide if the group has size 3.) This
+ * arrangement is used to skip equivalent elements in O(1) when doing lookup,
+ * while preserving O(1) insert/erase. The following invariants identify
+ * special positions (some of the operations have to be carefully implemented
+ * as Xnn is not valid if Xn points to a bucket):
+ *
+ * first node of a bucket: Npnp == N
+ * last node of a bucket: Nnpp == N
+ * first node of a group: Nnp != N && Nnppn == N
+ * second node of a group: Npn != N && Nppnn == N
+ * n-1 node of a group: Nnp != N && Nnnpp == N
+ * last node of a group: Npn != N && Npnnp == N
+ *
+ * The memory overhead is one pointer per bucket plus two pointers per node,
+ * probably unbeatable. The resulting structure is bidirectonally traversable,
+ * though currently we are just providing forward iteration.
+ */
+
+template<typename Allocator>
+struct hashed_index_node_impl;
+
+/* half-header (only prior() pointer) to use for the bucket array */
template<typename Allocator>
-struct hashed_index_node_impl
+struct hashed_index_base_node_impl
{
- typedef typename prevent_eti<
+ typedef typename
+ boost::detail::allocator::rebind_to<
+ Allocator,hashed_index_base_node_impl
+ >::type::pointer base_pointer;
+ typedef typename
+ boost::detail::allocator::rebind_to<
+ Allocator,hashed_index_base_node_impl
+ >::type::const_pointer const_base_pointer;
+ typedef typename
+ boost::detail::allocator::rebind_to<
Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,hashed_index_node_impl
- >::type
- >::type::pointer pointer;
- typedef typename prevent_eti<
+ hashed_index_node_impl<Allocator>
+ >::type::pointer pointer;
+ typedef typename
+ boost::detail::allocator::rebind_to<
Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,hashed_index_node_impl
- >::type
- >::type::const_pointer const_pointer;
+ hashed_index_node_impl<Allocator>
+ >::type::const_pointer const_pointer;
+
+ pointer& prior(){return prior_;}
+ pointer prior()const{return prior_;}
+
+private:
+ pointer prior_;
+};
+
+/* full header (prior() and next()) for the nodes */
+
+template<typename Allocator>
+struct hashed_index_node_impl:hashed_index_base_node_impl<Allocator>
+{
+private:
+ typedef hashed_index_base_node_impl<Allocator> super;
+
+public:
+ typedef typename super::base_pointer base_pointer;
+ typedef typename super::const_base_pointer const_base_pointer;
+ typedef typename super::pointer pointer;
+ typedef typename super::const_pointer const_pointer;
+
+ base_pointer& next(){return next_;}
+ base_pointer next()const{return next_;}
+
+ static pointer pointer_from(base_pointer x)
+ {
+ return static_cast<pointer>(static_cast<hashed_index_node_impl*>(&*x));
+ }
+
+ static base_pointer base_pointer_from(pointer x)
+ {
+ return static_cast<base_pointer>(&*x);
+ }
+
+private:
+ base_pointer next_;
+};
+
+/* Boost.MultiIndex requires machinery to reverse unlink operations. A simple
+ * way to make a pointer-manipulation function undoable is to templatize
+ * its internal pointer assignments with a functor that, besides doing the
+ * assignment, keeps track of the original pointer values and can later undo
+ * the operations in reverse order.
+ */
+
+struct default_assigner
+{
+ template<typename T> void operator()(T& x,const T& val){x=val;}
+};
+
+template<typename Node>
+struct unlink_undo_assigner
+{
+ typedef typename Node::base_pointer base_pointer;
+ typedef typename Node::pointer pointer;
+
+ unlink_undo_assigner():pointer_track_count(0),base_pointer_track_count(0){}
+
+ void operator()(pointer& x,pointer val)
+ {
+ pointer_tracks[pointer_track_count].x=&x;
+ pointer_tracks[pointer_track_count++].val=x;
+ x=val;
+ }
+
+ void operator()(base_pointer& x,base_pointer val)
+ {
+ base_pointer_tracks[base_pointer_track_count].x=&x;
+ base_pointer_tracks[base_pointer_track_count++].val=x;
+ x=val;
+ }
+
+ void operator()() /* undo op */
+ {
+ /* in the absence of aliasing, restitution order is immaterial */
+
+ while(pointer_track_count--){
+ *(pointer_tracks[pointer_track_count].x)=
+ pointer_tracks[pointer_track_count].val;
+ }
+ while(base_pointer_track_count--){
+ *(base_pointer_tracks[base_pointer_track_count].x)=
+ base_pointer_tracks[base_pointer_track_count].val;
+ }
+ }
+
+ struct pointer_track {pointer* x; pointer val;};
+ struct base_pointer_track{base_pointer* x; base_pointer val;};
+
+ /* We know the maximum number of pointer and base pointer assignments that
+ * the two unlink versions do, so we can statically reserve the needed
+ * storage.
+ */
+
+ pointer_track pointer_tracks[3];
+ int pointer_track_count;
+ base_pointer_track base_pointer_tracks[2];
+ int base_pointer_track_count;
+};
+
+/* algorithmic stuff for unique and non-unique variants */
+
+struct hashed_unique_tag{};
+struct hashed_non_unique_tag{};
+
+template<typename Node,typename Category>
+struct hashed_index_node_alg;
+
+template<typename Node>
+struct hashed_index_node_alg<Node,hashed_unique_tag>
+{
+ typedef typename Node::base_pointer base_pointer;
+ typedef typename Node::const_base_pointer const_base_pointer;
+ typedef typename Node::pointer pointer;
+ typedef typename Node::const_pointer const_pointer;
+
+ static bool is_first_of_bucket(pointer x)
+ {
+ return x->prior()->next()!=base_pointer_from(x);
+ }
+
+ static pointer after(pointer x)
+ {
+ return is_last_of_bucket(x)?x->next()->prior():pointer_from(x->next());
+ }
+
+ static pointer after_local(pointer x)
+ {
+ return is_last_of_bucket(x)?pointer(0):pointer_from(x->next());
+ }
+
+ static pointer next_to_inspect(pointer x)
+ {
+ return is_last_of_bucket(x)?pointer(0):pointer_from(x->next());
+ }
+
+ static void link(pointer x,base_pointer buc,pointer end)
+ {
+ if(buc->prior()==pointer(0)){ /* empty bucket */
+ x->prior()=end->prior();
+ x->next()=end->prior()->next();
+ x->prior()->next()=buc;
+ buc->prior()=x;
+ end->prior()=x;
+ }
+ else{
+ x->prior()=buc->prior()->prior();
+ x->next()=base_pointer_from(buc->prior());
+ buc->prior()=x;
+ x->next()->prior()=x;
+ }
+ }
+
+ static void unlink(pointer x)
+ {
+ default_assigner assign;
+ unlink(x,assign);
+ }
+
+ typedef unlink_undo_assigner<Node> unlink_undo;
+
+ template<typename Assigner>
+ static void unlink(pointer x,Assigner& assign)
+ {
+ if(is_first_of_bucket(x)){
+ if(is_last_of_bucket(x)){
+ assign(x->prior()->next()->prior(),pointer(0));
+ assign(x->prior()->next(),x->next());
+ assign(x->next()->prior()->prior(),x->prior());
+ }
+ else{
+ assign(x->prior()->next()->prior(),pointer_from(x->next()));
+ assign(x->next()->prior(),x->prior());
+ }
+ }
+ else if(is_last_of_bucket(x)){
+ assign(x->prior()->next(),x->next());
+ assign(x->next()->prior()->prior(),x->prior());
+ }
+ else{
+ assign(x->prior()->next(),x->next());
+ assign(x->next()->prior(),x->prior());
+ }
+ }
- pointer& next(){return next_;}
- pointer next()const{return next_;}
+ /* used only at rehashing */
- /* algorithmic stuff */
+ static void append(pointer x,pointer end)
+ {
+ x->prior()=end->prior();
+ x->next()=end->prior()->next();
+ x->prior()->next()=base_pointer_from(x);
+ end->prior()=x;
+ }
- static void increment(pointer& x,pointer bbegin,pointer bend)
+ static bool unlink_last(pointer end)
{
- std::less_equal<pointer> leq;
+ /* returns true iff bucket is emptied */
- x=x->next();
- if(leq(bbegin,x)&&leq(x,bend)){ /* bucket node */
- do{
- ++x;
- }while(x->next()==x);
- x=x->next();
+ pointer x=end->prior();
+ if(x->prior()->next()==base_pointer_from(x)){
+ x->prior()->next()=x->next();
+ end->prior()=x->prior();
+ return false;
+ }
+ else{
+ x->prior()->next()->prior()=pointer(0);
+ x->prior()->next()=x->next();
+ end->prior()=x->prior();
+ return true;
}
}
- static void link(pointer x,pointer pos)
+private:
+ static pointer pointer_from(base_pointer x)
{
- x->next()=pos->next();
- pos->next()=x;
+ return Node::pointer_from(x);
+ }
+
+ static base_pointer base_pointer_from(pointer x)
+ {
+ return Node::base_pointer_from(x);
+ }
+
+ static bool is_last_of_bucket(pointer x)
+ {
+ return x->next()->prior()!=x;
+ }
+};
+
+template<typename Node>
+struct hashed_index_node_alg<Node,hashed_non_unique_tag>
+{
+ typedef typename Node::base_pointer base_pointer;
+ typedef typename Node::const_base_pointer const_base_pointer;
+ typedef typename Node::pointer pointer;
+ typedef typename Node::const_pointer const_pointer;
+
+ static bool is_first_of_bucket(pointer x)
+ {
+ return x->prior()->next()->prior()==x;
+ }
+
+ static bool is_first_of_group(pointer x)
+ {
+ return
+ x->next()->prior()!=x&&
+ x->next()->prior()->prior()->next()==base_pointer_from(x);
+ }
+
+ static pointer after(pointer x)
+ {
+ if(x->next()->prior()==x)return pointer_from(x->next());
+ if(x->next()->prior()->prior()==x)return x->next()->prior();
+ if(x->next()->prior()->prior()->next()==base_pointer_from(x))
+ return pointer_from(x->next());
+ return pointer_from(x->next())->next()->prior();
+ }
+
+ static pointer after_local(pointer x)
+ {
+ if(x->next()->prior()==x)return pointer_from(x->next());
+ if(x->next()->prior()->prior()==x)return pointer(0);
+ if(x->next()->prior()->prior()->next()==base_pointer_from(x))
+ return pointer_from(x->next());
+ return pointer_from(x->next())->next()->prior();
+ }
+
+ static pointer next_to_inspect(pointer x)
+ {
+ if(x->next()->prior()==x)return pointer_from(x->next());
+ if(x->next()->prior()->prior()==x)return pointer(0);
+ if(x->next()->prior()->next()->prior()!=x->next()->prior())
+ return pointer(0);
+ return pointer_from(x->next()->prior()->next());
+ }
+
+ static void link(pointer x,base_pointer buc,pointer end)
+ {
+ if(buc->prior()==pointer(0)){ /* empty bucket */
+ x->prior()=end->prior();
+ x->next()=end->prior()->next();
+ x->prior()->next()=buc;
+ buc->prior()=x;
+ end->prior()=x;
+ }
+ else{
+ x->prior()=buc->prior()->prior();
+ x->next()=base_pointer_from(buc->prior());
+ buc->prior()=x;
+ x->next()->prior()=x;
+ }
};
+ static void link(pointer x,pointer first,pointer last)
+ {
+ x->prior()=first->prior();
+ x->next()=base_pointer_from(first);
+ if(is_first_of_bucket(first)){
+ x->prior()->next()->prior()=x;
+ }
+ else{
+ x->prior()->next()=base_pointer_from(x);
+ }
+
+ if(first==last){
+ last->prior()=x;
+ }
+ else if(first->next()==base_pointer_from(last)){
+ first->prior()=last;
+ first->next()=base_pointer_from(x);
+ }
+ else{
+ pointer second=pointer_from(first->next()),
+ lastbutone=last->prior();
+ second->prior()=first;
+ first->prior()=last;
+ lastbutone->next()=base_pointer_from(x);
+ }
+ }
+
static void unlink(pointer x)
{
- pointer y=x->next();
- while(y->next()!=x){y=y->next();}
- y->next()=x->next();
+ default_assigner assign;
+ unlink(x,assign);
+ }
+
+ typedef unlink_undo_assigner<Node> unlink_undo;
+
+ template<typename Assigner>
+ static void unlink(pointer x,Assigner& assign)
+ {
+ if(x->prior()->next()==base_pointer_from(x)){
+ if(x->next()->prior()==x){
+ left_unlink(x,assign);
+ right_unlink(x,assign);
+ }
+ else if(x->next()->prior()->prior()==x){ /* last of bucket */
+ left_unlink(x,assign);
+ right_unlink_last_of_bucket(x,assign);
+ }
+ else if(x->next()->prior()->prior()->next()==
+ base_pointer_from(x)){ /* first of group size */
+ left_unlink(x,assign);
+ right_unlink_first_of_group(x,assign);
+ }
+ else{ /* n-1 of group */
+ unlink_last_but_one_of_group(x,assign);
+ }
+ }
+ else if(x->prior()->next()->prior()==x){ /* first of bucket */
+ if(x->next()->prior()==x){
+ left_unlink_first_of_bucket(x,assign);
+ right_unlink(x,assign);
+ }
+ else if(x->next()->prior()->prior()==x){ /* last of bucket */
+ assign(x->prior()->next()->prior(),pointer(0));
+ assign(x->prior()->next(),x->next());
+ assign(x->next()->prior()->prior(),x->prior());
+ }
+ else{ /* first of group */
+ left_unlink_first_of_bucket(x,assign);
+ right_unlink_first_of_group(x,assign);
+ }
+ }
+ else if(x->next()->prior()->prior()==x){ /* last of group and bucket */
+ left_unlink_last_of_group(x,assign);
+ right_unlink_last_of_bucket(x,assign);
+ }
+ else if(pointer_from(x->prior()->prior()->next())
+ ->next()==base_pointer_from(x)){ /* second of group */
+ unlink_second_of_group(x,assign);
+ }
+ else{ /* last of group, ~(last of bucket) */
+ left_unlink_last_of_group(x,assign);
+ right_unlink(x,assign);
+ }
+ }
+
+ /* used only at rehashing */
+
+ static void link_range(
+ pointer first,pointer last,base_pointer buc,pointer cend)
+ {
+ if(buc->prior()==pointer(0)){ /* empty bucket */
+ first->prior()=cend->prior();
+ last->next()=cend->prior()->next();
+ first->prior()->next()=buc;
+ buc->prior()=first;
+ cend->prior()=last;
+ }
+ else{
+ first->prior()=buc->prior()->prior();
+ last->next()=base_pointer_from(buc->prior());
+ buc->prior()=first;
+ last->next()->prior()=last;
+ }
}
- static pointer prev(pointer x)
+ static void append_range(pointer first,pointer last,pointer cend)
{
- pointer y=x->next();
- while(y->next()!=x){y=y->next();}
- return y;
+ first->prior()=cend->prior();
+ last->next()=cend->prior()->next();
+ first->prior()->next()=base_pointer_from(first);
+ cend->prior()=last;
}
- static void unlink_next(pointer x)
+ static std::pair<pointer,bool> unlink_last_group(pointer end)
{
- x->next()=x->next()->next();
+ /* returns first of group true iff bucket is emptied */
+
+ pointer x=end->prior();
+ if(x->prior()->next()==base_pointer_from(x)){
+ x->prior()->next()=x->next();
+ end->prior()=x->prior();
+ return std::make_pair(x,false);
+ }
+ else if(x->prior()->next()->prior()==x){
+ x->prior()->next()->prior()=pointer(0);
+ x->prior()->next()=x->next();
+ end->prior()=x->prior();
+ return std::make_pair(x,true);
+ }
+ else{
+ pointer y=pointer_from(x->prior()->next());
+
+ if(y->prior()->next()==base_pointer_from(y)){
+ y->prior()->next()=x->next();
+ end->prior()=y->prior();
+ return std::make_pair(y,false);
+ }
+ else{
+ y->prior()->next()->prior()=pointer(0);
+ y->prior()->next()=x->next();
+ end->prior()=y->prior();
+ return std::make_pair(y,true);
+ }
+ }
+ }
+
+ static void unlink_range(pointer first,pointer last)
+ {
+ if(is_first_of_bucket(first)){
+ if(is_last_of_bucket(last)){
+ first->prior()->next()->prior()=pointer(0);
+ first->prior()->next()=last->next();
+ last->next()->prior()->prior()=first->prior();
+ }
+ else{
+ first->prior()->next()->prior()=pointer_from(last->next());
+ last->next()->prior()=first->prior();
+ }
+ }
+ else if(is_last_of_bucket(last)){
+ first->prior()->next()=last->next();
+ last->next()->prior()->prior()=first->prior();
+ }
+ else{
+ first->prior()->next()=last->next();
+ last->next()->prior()=first->prior();
+ }
}
private:
- pointer next_;
+ static pointer pointer_from(base_pointer x)
+ {
+ return Node::pointer_from(x);
+ }
+
+ static base_pointer base_pointer_from(pointer x)
+ {
+ return Node::base_pointer_from(x);
+ }
+
+ static bool is_last_of_bucket(pointer x)
+ {
+ return x->next()->prior()->prior()==x;
+ }
+
+ template<typename Assigner>
+ static void left_unlink(pointer x,Assigner& assign)
+ {
+ assign(x->prior()->next(),x->next());
+ }
+
+ template<typename Assigner>
+ static void right_unlink(pointer x,Assigner& assign)
+ {
+ assign(x->next()->prior(),x->prior());
+ }
+
+ template<typename Assigner>
+ static void left_unlink_first_of_bucket(pointer x,Assigner& assign)
+ {
+ assign(x->prior()->next()->prior(),pointer_from(x->next()));
+ }
+
+ template<typename Assigner>
+ static void right_unlink_last_of_bucket(pointer x,Assigner& assign)
+ {
+ assign(x->next()->prior()->prior(),x->prior());
+ }
+
+ template<typename Assigner>
+ static void right_unlink_first_of_group(pointer x,Assigner& assign)
+ {
+ pointer second=pointer_from(x->next()),
+ last=second->prior(),
+ lastbutone=last->prior();
+ if(second==lastbutone){
+ assign(second->next(),base_pointer_from(last));
+ assign(second->prior(),x->prior());
+ }
+ else{
+ assign(lastbutone->next(),base_pointer_from(second));
+ assign(second->next()->prior(),last);
+ assign(second->prior(),x->prior());
+ }
+ }
+
+ template<typename Assigner>
+ static void left_unlink_last_of_group(pointer x,Assigner& assign)
+ {
+ pointer lastbutone=x->prior(),
+ first=pointer_from(lastbutone->next()),
+ second=pointer_from(first->next());
+ if(lastbutone==second){
+ assign(lastbutone->prior(),first);
+ assign(lastbutone->next(),x->next());
+ }
+ else{
+ assign(second->prior(),lastbutone);
+ assign(lastbutone->prior()->next(),base_pointer_from(first));
+ assign(lastbutone->next(),x->next());
+ }
+ }
+
+ template<typename Assigner>
+ static void unlink_last_but_one_of_group(pointer x,Assigner& assign)
+ {
+ pointer first=pointer_from(x->next()),
+ second=pointer_from(first->next()),
+ last=second->prior();
+ if(second==x){
+ assign(last->prior(),first);
+ assign(first->next(),base_pointer_from(last));
+ }
+ else{
+ assign(last->prior(),x->prior());
+ assign(x->prior()->next(),base_pointer_from(first));
+ }
+ }
+
+ template<typename Assigner>
+ static void unlink_second_of_group(pointer x,Assigner& assign)
+ {
+ pointer last=x->prior(),
+ lastbutone=last->prior(),
+ first=pointer_from(lastbutone->next());
+ if(lastbutone==x){
+ assign(first->next(),base_pointer_from(last));
+ assign(last->prior(),first);
+ }
+ else{
+ assign(first->next(),x->next());
+ assign(x->next()->prior(),last);
+ }
+ }
};
template<typename Super>
struct hashed_index_node_trampoline:
- prevent_eti<
- Super,
- hashed_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- typename Super::allocator_type,
- char
- >::type
- >
- >::type
+ hashed_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ char
+ >::type
+ >
{
- typedef typename prevent_eti<
- Super,
- hashed_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- typename Super::allocator_type,
- char
- >::type
- >
- >::type impl_type;
+ typedef typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ char
+ >::type impl_allocator_type;
+ typedef hashed_index_node_impl<impl_allocator_type> impl_type;
};
-template<typename Super>
-struct hashed_index_node:Super,hashed_index_node_trampoline<Super>
+template<typename Super,typename Category>
+struct hashed_index_node:
+ Super,hashed_index_node_trampoline<Super>
{
private:
typedef hashed_index_node_trampoline<Super> trampoline;
public:
- typedef typename trampoline::impl_type impl_type;
- typedef typename trampoline::pointer impl_pointer;
- typedef typename trampoline::const_pointer const_impl_pointer;
+ typedef typename trampoline::impl_type impl_type;
+ typedef hashed_index_node_alg<
+ impl_type,Category> node_alg;
+ typedef typename trampoline::base_pointer impl_base_pointer;
+ typedef typename trampoline::const_base_pointer const_impl_base_pointer;
+ typedef typename trampoline::pointer impl_pointer;
+ typedef typename trampoline::const_pointer const_impl_pointer;
+
+ impl_pointer& prior(){return trampoline::prior();}
+ impl_pointer prior()const{return trampoline::prior();}
+ impl_base_pointer& next(){return trampoline::next();}
+ impl_base_pointer next()const{return trampoline::next();}
impl_pointer impl()
{
@@ -147,12 +748,16 @@ public:
static_cast<const trampoline*>(&*x));
}
- static void increment(
- hashed_index_node*& x,impl_pointer bbegin,impl_pointer bend)
+ /* interoperability with hashed_index_iterator */
+
+ static void increment(hashed_index_node*& x)
+ {
+ x=from_impl(node_alg::after(x->impl()));
+ }
+
+ static void increment_local(hashed_index_node*& x)
{
- impl_pointer xi=x->impl();
- trampoline::increment(xi,bbegin,bend);
- x=from_impl(xi);
+ x=from_impl(node_alg::after_local(x->impl()));
}
};
diff --git a/3party/boost/boost/multi_index/detail/header_holder.hpp b/3party/boost/boost/multi_index/detail/header_holder.hpp
index 8716e83af1..ca8a9b2edb 100644
--- a/3party/boost/boost/multi_index/detail/header_holder.hpp
+++ b/3party/boost/boost/multi_index/detail/header_holder.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_HEADER_HOLDER_HPP
#define BOOST_MULTI_INDEX_DETAIL_HEADER_HOLDER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/index_base.hpp b/3party/boost/boost/multi_index/detail/index_base.hpp
index 9b73a4bb85..99000ed481 100644
--- a/3party/boost/boost/multi_index/detail/index_base.hpp
+++ b/3party/boost/boost/multi_index/detail/index_base.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,16 +9,21 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_BASE_HPP
#define BOOST_MULTI_INDEX_DETAIL_INDEX_BASE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
-#include <boost/call_traits.hpp>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
#include <boost/detail/workaround.hpp>
+#include <boost/move/core.hpp>
+#include <boost/move/utility.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/multi_index/detail/copy_map.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
#include <boost/multi_index/detail/node_type.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
#include <boost/multi_index_container_fwd.hpp>
#include <boost/tuple/tuple.hpp>
#include <utility>
@@ -42,6 +47,10 @@ namespace detail{
* cannot be called directly from the index classes.)
*/
+struct lvalue_tag{};
+struct rvalue_tag{};
+struct emplaced_tag{};
+
template<typename Value,typename IndexSpecifierList,typename Allocator>
class index_base
{
@@ -53,9 +62,10 @@ protected:
Value,IndexSpecifierList,Allocator> final_type;
typedef tuples::null_type ctor_args_list;
typedef typename
- boost::detail::allocator::rebind_to<
- Allocator,
- typename Allocator::value_type>::type final_allocator_type;
+ boost::detail::allocator::rebind_to<
+ Allocator,
+ typename Allocator::value_type
+ >::type final_allocator_type;
typedef mpl::vector0<> index_type_list;
typedef mpl::vector0<> iterator_type_list;
typedef mpl::vector0<> const_iterator_type_list;
@@ -74,24 +84,75 @@ protected:
#endif
private:
- typedef typename call_traits<Value>::param_type value_param_type;
+ typedef Value value_type;
protected:
explicit index_base(const ctor_args_list&,const Allocator&){}
+ index_base(
+ const index_base<Value,IndexSpecifierList,Allocator>&,
+ do_not_copy_elements_tag)
+ {}
+
void copy_(
const index_base<Value,IndexSpecifierList,Allocator>&,const copy_map_type&)
{}
- node_type* insert_(value_param_type v,node_type* x)
+ final_node_type* insert_(const value_type& v,final_node_type*& x,lvalue_tag)
+ {
+ x=final().allocate_node();
+ BOOST_TRY{
+ boost::detail::allocator::construct(&x->value(),v);
+ }
+ BOOST_CATCH(...){
+ final().deallocate_node(x);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ return x;
+ }
+
+ final_node_type* insert_(const value_type& v,final_node_type*& x,rvalue_tag)
{
- boost::detail::allocator::construct(&x->value(),v);
+ x=final().allocate_node();
+ BOOST_TRY{
+ /* This shoud have used a modified, T&&-compatible version of
+ * boost::detail::allocator::construct, but
+ * <boost/detail/allocator_utilities.hpp> is too old and venerable to
+ * mess with; besides, it is a general internal utility and the imperfect
+ * perfect forwarding emulation of Boost.Move might break other libs.
+ */
+
+ new (&x->value()) value_type(boost::move(const_cast<value_type&>(v)));
+ }
+ BOOST_CATCH(...){
+ final().deallocate_node(x);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
return x;
}
- node_type* insert_(value_param_type v,node_type*,node_type* x)
+ final_node_type* insert_(const value_type&,final_node_type*& x,emplaced_tag)
+ {
+ return x;
+ }
+
+ final_node_type* insert_(
+ const value_type& v,node_type*,final_node_type*& x,lvalue_tag)
+ {
+ return insert_(v,x,lvalue_tag());
+ }
+
+ final_node_type* insert_(
+ const value_type& v,node_type*,final_node_type*& x,rvalue_tag)
+ {
+ return insert_(v,x,rvalue_tag());
+ }
+
+ final_node_type* insert_(
+ const value_type&,node_type*,final_node_type*& x,emplaced_tag)
{
- boost::detail::allocator::construct(&x->value(),v);
return x;
}
@@ -109,12 +170,20 @@ protected:
void swap_(index_base<Value,IndexSpecifierList,Allocator>&){}
- bool replace_(value_param_type v,node_type* x)
+ void swap_elements_(index_base<Value,IndexSpecifierList,Allocator>&){}
+
+ bool replace_(const value_type& v,node_type* x,lvalue_tag)
{
x->value()=v;
return true;
}
+ bool replace_(const value_type& v,node_type* x,rvalue_tag)
+ {
+ x->value()=boost::move(const_cast<value_type&>(v));
+ return true;
+ }
+
bool modify_(node_type*){return true;}
bool modify_rollback_(node_type*){return true;}
@@ -146,11 +215,46 @@ protected:
std::size_t final_size_()const{return final().size_();}
std::size_t final_max_size_()const{return final().max_size_();}
- std::pair<final_node_type*,bool> final_insert_(value_param_type x)
+ std::pair<final_node_type*,bool> final_insert_(const value_type& x)
{return final().insert_(x);}
+ std::pair<final_node_type*,bool> final_insert_rv_(const value_type& x)
+ {return final().insert_rv_(x);}
+ template<typename T>
+ std::pair<final_node_type*,bool> final_insert_ref_(const T& t)
+ {return final().insert_ref_(t);}
+ template<typename T>
+ std::pair<final_node_type*,bool> final_insert_ref_(T& t)
+ {return final().insert_ref_(t);}
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<final_node_type*,bool> final_emplace_(
+ BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ return final().emplace_(BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ }
+
std::pair<final_node_type*,bool> final_insert_(
- value_param_type x,final_node_type* position)
+ const value_type& x,final_node_type* position)
{return final().insert_(x,position);}
+ std::pair<final_node_type*,bool> final_insert_rv_(
+ const value_type& x,final_node_type* position)
+ {return final().insert_rv_(x,position);}
+ template<typename T>
+ std::pair<final_node_type*,bool> final_insert_ref_(
+ const T& t,final_node_type* position)
+ {return final().insert_ref_(t,position);}
+ template<typename T>
+ std::pair<final_node_type*,bool> final_insert_ref_(
+ T& t,final_node_type* position)
+ {return final().insert_ref_(t,position);}
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<final_node_type*,bool> final_emplace_hint_(
+ final_node_type* position,BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ return final().emplace_hint_(
+ position,BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ }
void final_erase_(final_node_type* x){final().erase_(x);}
@@ -159,9 +263,13 @@ protected:
void final_clear_(){final().clear_();}
void final_swap_(final_type& x){final().swap_(x);}
+
bool final_replace_(
- value_param_type k,final_node_type* x)
+ const value_type& k,final_node_type* x)
{return final().replace_(k,x);}
+ bool final_replace_rv_(
+ const value_type& k,final_node_type* x)
+ {return final().replace_rv_(k,x);}
template<typename Modifier>
bool final_modify_(Modifier& mod,final_node_type* x)
diff --git a/3party/boost/boost/multi_index/detail/index_loader.hpp b/3party/boost/boost/multi_index/detail/index_loader.hpp
index 001c01bb20..3f0428c595 100644
--- a/3party/boost/boost/multi_index/detail/index_loader.hpp
+++ b/3party/boost/boost/multi_index/detail/index_loader.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_LOADER_HPP
#define BOOST_MULTI_INDEX_DETAIL_INDEX_LOADER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/index_matcher.hpp b/3party/boost/boost/multi_index/detail/index_matcher.hpp
index 7e275e136c..f3675acd40 100644
--- a/3party/boost/boost/multi_index/detail/index_matcher.hpp
+++ b/3party/boost/boost/multi_index/detail/index_matcher.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_MATCHER_HPP
#define BOOST_MULTI_INDEX_DETAIL_INDEX_MATCHER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/index_node_base.hpp b/3party/boost/boost/multi_index/detail/index_node_base.hpp
index ee9f1c67f8..150eb75e79 100644
--- a/3party/boost/boost/multi_index/detail/index_node_base.hpp
+++ b/3party/boost/boost/multi_index/detail/index_node_base.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_NODE_BASE_HPP
#define BOOST_MULTI_INDEX_DETAIL_INDEX_NODE_BASE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -85,9 +85,7 @@ private:
};
template<typename Node,typename Value>
-Node* node_from_value(
- const Value* p
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+Node* node_from_value(const Value* p)
{
typedef typename Node::allocator_type allocator_type;
return static_cast<Node*>(
diff --git a/3party/boost/boost/multi_index/detail/index_saver.hpp b/3party/boost/boost/multi_index/detail/index_saver.hpp
index d9e6bc7ccc..ae09d4eba4 100644
--- a/3party/boost/boost/multi_index/detail/index_saver.hpp
+++ b/3party/boost/boost/multi_index/detail/index_saver.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_SAVER_HPP
#define BOOST_MULTI_INDEX_DETAIL_INDEX_SAVER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/invariant_assert.hpp b/3party/boost/boost/multi_index/detail/invariant_assert.hpp
index d5fc256d8d..c6c547c7c3 100644
--- a/3party/boost/boost/multi_index/detail/invariant_assert.hpp
+++ b/3party/boost/boost/multi_index/detail/invariant_assert.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_INVARIANT_ASSERT_HPP
#define BOOST_MULTI_INDEX_DETAIL_INVARIANT_ASSERT_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/is_index_list.hpp b/3party/boost/boost/multi_index/detail/is_index_list.hpp
index 9ee30baf21..f6a24218b8 100644
--- a/3party/boost/boost/multi_index/detail/is_index_list.hpp
+++ b/3party/boost/boost/multi_index/detail/is_index_list.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_IS_INDEX_LIST_HPP
#define BOOST_MULTI_INDEX_DETAIL_IS_INDEX_LIST_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/iter_adaptor.hpp b/3party/boost/boost/multi_index/detail/iter_adaptor.hpp
index 034618458c..7a032350b3 100644
--- a/3party/boost/boost/multi_index/detail/iter_adaptor.hpp
+++ b/3party/boost/boost/multi_index/detail/iter_adaptor.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,13 +9,12 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_ITER_ADAPTOR_HPP
#define BOOST_MULTI_INDEX_DETAIL_ITER_ADAPTOR_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
#include <boost/mpl/apply.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#include <boost/operators.hpp>
namespace boost{
@@ -294,12 +293,9 @@ template<class Derived,class Base>
struct iter_adaptor_base
{
typedef iter_adaptor_selector<
- typename Base::iterator_category> selector;
- typedef typename prevent_eti<
- selector,
- typename mpl::apply2<
- selector,Derived,Base>::type
- >::type type;
+ typename Base::iterator_category> selector;
+ typedef typename mpl::apply2<
+ selector,Derived,Base>::type type;
};
template<class Derived,class Base>
diff --git a/3party/boost/boost/multi_index/detail/modify_key_adaptor.hpp b/3party/boost/boost/multi_index/detail/modify_key_adaptor.hpp
index 8a93b9648f..6df89b1838 100644
--- a/3party/boost/boost/multi_index/detail/modify_key_adaptor.hpp
+++ b/3party/boost/boost/multi_index/detail/modify_key_adaptor.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_MODIFY_KEY_ADAPTOR_HPP
#define BOOST_MULTI_INDEX_DETAIL_MODIFY_KEY_ADAPTOR_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/msvc_index_specifier.hpp b/3party/boost/boost/multi_index/detail/msvc_index_specifier.hpp
deleted file mode 100644
index 4766e539af..0000000000
--- a/3party/boost/boost/multi_index/detail/msvc_index_specifier.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
- * 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/multi_index for library home page.
- */
-
-#ifndef BOOST_MULTI_INDEX_DETAIL_MSVC_INDEX_SPECIFIER_HPP
-#define BOOST_MULTI_INDEX_DETAIL_MSVC_INDEX_SPECIFIER_HPP
-
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
-#pragma once
-#endif
-
-#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
-#include <boost/detail/workaround.hpp>
-
-#if BOOST_WORKAROUND(BOOST_MSVC,<1310)
-/* Workaround for a problem in MSVC with dependent template typedefs
- * when accesing index specifiers.
- * Modeled after <boost/mpl/aux_/msvc_dtw.hpp> (thanks, Aleksey!)
- */
-
-#include <boost/mpl/aux_/msvc_never_true.hpp>
-
-namespace boost{
-
-namespace multi_index{
-
-namespace detail{
-
-template<typename IndexSpecifier>
-struct msvc_index_specifier
-{
- template<bool> struct fake_index_type:IndexSpecifier{};
- template<> struct fake_index_type<true>
- {
- template<typename Super>
- struct node_class{};
-
- template<typename Super>
- struct index_class{};
- };
-
- template<typename Super>
- struct result_node_class:
- fake_index_type<mpl::aux::msvc_never_true<IndexSpecifier>::value>::
- template node_class<Super>
- {
- };
-
- template<typename Super>
- struct result_index_class:
- fake_index_type<mpl::aux::msvc_never_true<IndexSpecifier>::value>::
- template index_class<Super>
- {
- };
-};
-
-} /* namespace multi_index::detail */
-
-} /* namespace multi_index */
-
-} /* namespace boost */
-
-#endif /* workaround */
-
-#endif
diff --git a/3party/boost/boost/multi_index/detail/no_duplicate_tags.hpp b/3party/boost/boost/multi_index/detail/no_duplicate_tags.hpp
index 9b56e8371f..ba216ed82c 100644
--- a/3party/boost/boost/multi_index/detail/no_duplicate_tags.hpp
+++ b/3party/boost/boost/multi_index/detail/no_duplicate_tags.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_NO_DUPLICATE_TAGS_HPP
#define BOOST_MULTI_INDEX_DETAIL_NO_DUPLICATE_TAGS_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/node_type.hpp b/3party/boost/boost/multi_index/detail/node_type.hpp
index 0e87261aac..7fe85cf968 100644
--- a/3party/boost/boost/multi_index/detail/node_type.hpp
+++ b/3party/boost/boost/multi_index/detail/node_type.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_NODE_TYPE_HPP
#define BOOST_MULTI_INDEX_DETAIL_NODE_TYPE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -22,7 +22,6 @@
#include <boost/multi_index/detail/header_holder.hpp>
#include <boost/multi_index/detail/index_node_base.hpp>
#include <boost/multi_index/detail/is_index_list.hpp>
-#include <boost/multi_index/detail/msvc_index_specifier.hpp>
#include <boost/static_assert.hpp>
namespace boost{
@@ -35,17 +34,6 @@ namespace detail{
* index list.
*/
-#if BOOST_WORKAROUND(BOOST_MSVC,<1310)
-struct index_node_applier
-{
- template<typename IndexSpecifierIterator,typename Super>
- struct apply:
- msvc_index_specifier< mpl::deref<IndexSpecifierIterator>::type >::
- template result_node_class<Super>
- {
- };
-};
-#else
struct index_node_applier
{
template<typename IndexSpecifierIterator,typename Super>
@@ -56,7 +44,6 @@ struct index_node_applier
BOOST_NESTED_TEMPLATE node_class<Super>::type type;
};
};
-#endif
template<typename Value,typename IndexSpecifierList,typename Allocator>
struct multi_index_node_type
diff --git a/3party/boost/boost/multi_index/detail/ord_index_args.hpp b/3party/boost/boost/multi_index/detail/ord_index_args.hpp
index bb8eb4129e..3e2641f2f4 100644
--- a/3party/boost/boost/multi_index/detail/ord_index_args.hpp
+++ b/3party/boost/boost/multi_index/detail/ord_index_args.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_ARGS_HPP
#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_ARGS_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/ord_index_node.hpp b/3party/boost/boost/multi_index/detail/ord_index_node.hpp
index edc4329dd2..60727e04ed 100644
--- a/3party/boost/boost/multi_index/detail/ord_index_node.hpp
+++ b/3party/boost/boost/multi_index/detail/ord_index_node.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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,14 +36,13 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_NODE_HPP
#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_NODE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
#include <cstddef>
#include <boost/detail/allocator_utilities.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
#include <boost/mpl/and.hpp>
@@ -70,22 +69,18 @@ struct ordered_index_node_impl; /* fwd decl. */
template<typename Allocator>
struct ordered_index_node_std_base
{
- typedef typename prevent_eti<
+ typedef typename
+ boost::detail::allocator::rebind_to<
Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,
- ordered_index_node_impl<Allocator>
- >::type
- >::type::pointer pointer;
- typedef typename prevent_eti<
+ ordered_index_node_impl<Allocator>
+ >::type::pointer pointer;
+ typedef typename
+ boost::detail::allocator::rebind_to<
Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,
- ordered_index_node_impl<Allocator>
- >::type
- >::type::const_pointer const_pointer;
- typedef ordered_index_color& color_ref;
- typedef pointer& parent_ref;
+ ordered_index_node_impl<Allocator>
+ >::type::const_pointer const_pointer;
+ typedef ordered_index_color& color_ref;
+ typedef pointer& parent_ref;
ordered_index_color& color(){return color_;}
ordered_index_color color()const{return color_;}
@@ -216,12 +211,9 @@ struct ordered_index_node_impl_base:
!(has_uintptr_type::value)||
(alignment_of<ordered_index_node_compressed_base<Allocator> >::value%2)||
!(is_same<
- typename prevent_eti<
+ typename boost::detail::allocator::rebind_to<
Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,
- ordered_index_node_impl<Allocator>
- >::type
+ ordered_index_node_impl<Allocator>
>::type::pointer,
ordered_index_node_impl<Allocator>*>::value),
ordered_index_node_std_base<Allocator>,
@@ -557,25 +549,19 @@ public:
template<typename Super>
struct ordered_index_node_trampoline:
- prevent_eti<
- Super,
- ordered_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- typename Super::allocator_type,
- char
- >::type
- >
- >::type
+ ordered_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ char
+ >::type
+ >
{
- typedef typename prevent_eti<
- Super,
- ordered_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- typename Super::allocator_type,
- char
- >::type
- >
- >::type impl_type;
+ typedef ordered_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ char
+ >::type
+ > impl_type;
};
template<typename Super>
diff --git a/3party/boost/boost/multi_index/detail/ord_index_ops.hpp b/3party/boost/boost/multi_index/detail/ord_index_ops.hpp
index caa71aa272..d42f5f1a29 100644
--- a/3party/boost/boost/multi_index/detail/ord_index_ops.hpp
+++ b/3party/boost/boost/multi_index/detail/ord_index_ops.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_OPS_HPP
#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_OPS_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/prevent_eti.hpp b/3party/boost/boost/multi_index/detail/prevent_eti.hpp
deleted file mode 100644
index 56c067a3db..0000000000
--- a/3party/boost/boost/multi_index/detail/prevent_eti.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
- * 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/multi_index for library home page.
- */
-
-#ifndef BOOST_MULTI_INDEX_DETAIL_PREVENT_ETI_HPP
-#define BOOST_MULTI_INDEX_DETAIL_PREVENT_ETI_HPP
-
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
-#pragma once
-#endif
-
-#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
-#include <boost/detail/workaround.hpp>
-
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/integral_c.hpp>
-#include <boost/mpl/aux_/msvc_never_true.hpp>
-#endif
-
-namespace boost{
-
-namespace multi_index{
-
-namespace detail{
-
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
-/* See
- * http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_MPL
- * Item 5.6, Beware of the 'early template instantiation' trap.
- */
-
-template<typename Type,typename Construct>
-struct prevent_eti
-{
- typedef typename mpl::if_<
- mpl::aux::msvc_never_true<Type>,
- mpl::integral_c<int,0>,
- Construct
- >::type type;
-};
-#else
-template<typename Type,typename Construct>
-struct prevent_eti
-{
- typedef Construct type;
-};
-#endif
-
-} /* namespace multi_index::detail */
-
-} /* namespace multi_index */
-
-} /* namespace boost */
-
-#endif
diff --git a/3party/boost/boost/multi_index/detail/rnd_index_loader.hpp b/3party/boost/boost/multi_index/detail/rnd_index_loader.hpp
index 793c52177e..4b00345a6d 100644
--- a/3party/boost/boost/multi_index/detail/rnd_index_loader.hpp
+++ b/3party/boost/boost/multi_index/detail/rnd_index_loader.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_RND_INDEX_LOADER_HPP
#define BOOST_MULTI_INDEX_DETAIL_RND_INDEX_LOADER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -17,7 +17,6 @@
#include <algorithm>
#include <boost/detail/allocator_utilities.hpp>
#include <boost/multi_index/detail/auto_space.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#include <boost/multi_index/detail/rnd_index_ptr_array.hpp>
#include <boost/noncopyable.hpp>
#include <cstddef>
@@ -45,15 +44,12 @@ template<typename Allocator>
class random_access_index_loader_base:private noncopyable
{
protected:
- typedef typename prevent_eti<
- Allocator,
- random_access_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- Allocator,
- char
- >::type
- >
- >::type node_impl_type;
+ typedef random_access_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ char
+ >::type
+ > node_impl_type;
typedef typename node_impl_type::pointer node_impl_pointer;
typedef random_access_index_ptr_array<Allocator> ptr_array;
@@ -86,14 +82,14 @@ protected:
}
}
- void rearrange(node_impl_pointer position,node_impl_pointer x)
+ void rearrange(node_impl_pointer position_,node_impl_pointer x)
{
preprocess(); /* only incur this penalty if rearrange() is ever called */
- if(position==node_impl_pointer(0))position=header;
+ if(position_==node_impl_pointer(0))position_=header;
next(prev(x))=next(x);
prev(next(x))=prev(x);
- prev(x)=position;
- next(x)=next(position);
+ prev(x)=position_;
+ next(x)=next(position_);
next(prev(x))=prev(next(x))=x;
}
@@ -161,9 +157,10 @@ public:
super(al_,ptrs_)
{}
- void rearrange(Node* position,Node *x)
+ void rearrange(Node* position_,Node *x)
{
- super::rearrange(position?position->impl():node_impl_pointer(0),x->impl());
+ super::rearrange(
+ position_?position_->impl():node_impl_pointer(0),x->impl());
}
};
diff --git a/3party/boost/boost/multi_index/detail/rnd_index_node.hpp b/3party/boost/boost/multi_index/detail/rnd_index_node.hpp
index 43b2526811..991f6dab80 100644
--- a/3party/boost/boost/multi_index/detail/rnd_index_node.hpp
+++ b/3party/boost/boost/multi_index/detail/rnd_index_node.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_RND_INDEX_NODE_HPP
#define BOOST_MULTI_INDEX_DETAIL_RND_INDEX_NODE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -17,7 +17,6 @@
#include <algorithm>
#include <boost/detail/allocator_utilities.hpp>
#include <boost/math/common_factor_rt.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#include <cstddef>
#include <functional>
@@ -30,24 +29,18 @@ namespace detail{
template<typename Allocator>
struct random_access_index_node_impl
{
- typedef typename prevent_eti<
- Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,random_access_index_node_impl
- >::type
- >::type::pointer pointer;
- typedef typename prevent_eti<
- Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,random_access_index_node_impl
- >::type
- >::type::const_pointer const_pointer;
- typedef typename prevent_eti<
- Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,pointer
- >::type
- >::type::pointer ptr_pointer;
+ typedef typename
+ boost::detail::allocator::rebind_to<
+ Allocator,random_access_index_node_impl
+ >::type::pointer pointer;
+ typedef typename
+ boost::detail::allocator::rebind_to<
+ Allocator,random_access_index_node_impl
+ >::type::const_pointer const_pointer;
+ typedef typename
+ boost::detail::allocator::rebind_to<
+ Allocator,pointer
+ >::type::pointer ptr_pointer;
ptr_pointer& up(){return up_;}
ptr_pointer up()const{return up_;}
@@ -181,25 +174,19 @@ private:
template<typename Super>
struct random_access_index_node_trampoline:
- prevent_eti<
- Super,
- random_access_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- typename Super::allocator_type,
- char
- >::type
- >
- >::type
+ random_access_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ char
+ >::type
+ >
{
- typedef typename prevent_eti<
- Super,
- random_access_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- typename Super::allocator_type,
- char
- >::type
- >
- >::type impl_type;
+ typedef random_access_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ char
+ >::type
+ > impl_type;
};
template<typename Super>
diff --git a/3party/boost/boost/multi_index/detail/rnd_index_ops.hpp b/3party/boost/boost/multi_index/detail/rnd_index_ops.hpp
index 5bf1ade7f5..6cb030fbc7 100644
--- a/3party/boost/boost/multi_index/detail/rnd_index_ops.hpp
+++ b/3party/boost/boost/multi_index/detail/rnd_index_ops.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2009 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_RND_INDEX_OPS_HPP
#define BOOST_MULTI_INDEX_DETAIL_RND_INDEX_OPS_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -30,8 +30,7 @@ namespace detail{
template<typename Node,typename Allocator,typename Predicate>
Node* random_access_index_remove(
- random_access_index_ptr_array<Allocator>& ptrs,Predicate pred
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+ random_access_index_ptr_array<Allocator>& ptrs,Predicate pred)
{
typedef typename Node::value_type value_type;
typedef typename Node::impl_ptr_pointer impl_ptr_pointer;
@@ -55,8 +54,7 @@ Node* random_access_index_remove(
template<typename Node,typename Allocator,class BinaryPredicate>
Node* random_access_index_unique(
- random_access_index_ptr_array<Allocator>& ptrs,BinaryPredicate binary_pred
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+ random_access_index_ptr_array<Allocator>& ptrs,BinaryPredicate binary_pred)
{
typedef typename Node::value_type value_type;
typedef typename Node::impl_ptr_pointer impl_ptr_pointer;
@@ -86,8 +84,7 @@ template<typename Node,typename Allocator,typename Compare>
void random_access_index_inplace_merge(
const Allocator& al,
random_access_index_ptr_array<Allocator>& ptrs,
- BOOST_DEDUCED_TYPENAME Node::impl_ptr_pointer first1,Compare comp
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+ BOOST_DEDUCED_TYPENAME Node::impl_ptr_pointer first1,Compare comp)
{
typedef typename Node::value_type value_type;
typedef typename Node::impl_pointer impl_pointer;
@@ -151,8 +148,7 @@ template<typename Node,typename Allocator,class Compare>
void random_access_index_sort(
const Allocator& al,
random_access_index_ptr_array<Allocator>& ptrs,
- Compare comp
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+ Compare comp)
{
/* The implementation is extremely simple: an auxiliary
* array of pointers is sorted using stdlib facilities and
diff --git a/3party/boost/boost/multi_index/detail/rnd_index_ptr_array.hpp b/3party/boost/boost/multi_index/detail/rnd_index_ptr_array.hpp
index c0a2d67cbd..bae1c851b8 100644
--- a/3party/boost/boost/multi_index/detail/rnd_index_ptr_array.hpp
+++ b/3party/boost/boost/multi_index/detail/rnd_index_ptr_array.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_RND_INDEX_PTR_ARRAY_HPP
#define BOOST_MULTI_INDEX_DETAIL_RND_INDEX_PTR_ARRAY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -17,7 +17,6 @@
#include <algorithm>
#include <boost/detail/allocator_utilities.hpp>
#include <boost/multi_index/detail/auto_space.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#include <boost/multi_index/detail/rnd_index_node.hpp>
#include <boost/noncopyable.hpp>
#include <cstddef>
@@ -33,29 +32,23 @@ namespace detail{
template<typename Allocator>
class random_access_index_ptr_array:private noncopyable
{
- typedef typename prevent_eti<
- Allocator,
- random_access_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- Allocator,
- char
- >::type
- >
- >::type node_impl_type;
-
-public:
- typedef typename node_impl_type::pointer value_type;
- typedef typename prevent_eti<
- Allocator,
+ typedef random_access_index_node_impl<
typename boost::detail::allocator::rebind_to<
- Allocator,value_type
+ Allocator,
+ char
>::type
- >::type::pointer pointer;
+ > node_impl_type;
+
+public:
+ typedef typename node_impl_type::pointer value_type;
+ typedef typename boost::detail::allocator::rebind_to<
+ Allocator,value_type
+ >::type::pointer pointer;
random_access_index_ptr_array(
- const Allocator& al,value_type end_,std::size_t size):
- size_(size),
- capacity_(size),
+ const Allocator& al,value_type end_,std::size_t sz):
+ size_(sz),
+ capacity_(sz),
spc(al,capacity_+1)
{
*end()=end_;
@@ -74,12 +67,12 @@ public:
void reserve(std::size_t c)
{
- if(c>capacity_){
- auto_space<value_type,Allocator> spc1(spc.get_allocator(),c+1);
- node_impl_type::transfer(begin(),end()+1,spc1.data());
- spc.swap(spc1);
- capacity_=c;
- }
+ if(c>capacity_)set_capacity(c);
+ }
+
+ void shrink_to_fit()
+ {
+ if(capacity_>size_)set_capacity(size_);
}
pointer begin()const{return ptrs();}
@@ -124,6 +117,14 @@ private:
{
return spc.data();
}
+
+ void set_capacity(std::size_t c)
+ {
+ auto_space<value_type,Allocator> spc1(spc.get_allocator(),c+1);
+ node_impl_type::transfer(begin(),end()+1,spc1.data());
+ spc.swap(spc1);
+ capacity_=c;
+ }
};
template<typename Allocator>
diff --git a/3party/boost/boost/multi_index/detail/rnd_node_iterator.hpp b/3party/boost/boost/multi_index/detail/rnd_node_iterator.hpp
index 5ae3286dd4..65bf5e8e03 100644
--- a/3party/boost/boost/multi_index/detail/rnd_node_iterator.hpp
+++ b/3party/boost/boost/multi_index/detail/rnd_node_iterator.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_RND_NODE_ITERATOR_HPP
#define BOOST_MULTI_INDEX_DETAIL_RND_NODE_ITERATOR_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/safe_ctr_proxy.hpp b/3party/boost/boost/multi_index/detail/safe_ctr_proxy.hpp
deleted file mode 100644
index c733f968ae..0000000000
--- a/3party/boost/boost/multi_index/detail/safe_ctr_proxy.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
- * 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/multi_index for library home page.
- */
-
-#ifndef BOOST_MULTI_INDEX_DETAIL_SAFE_CTR_PROXY_HPP
-#define BOOST_MULTI_INDEX_DETAIL_SAFE_CTR_PROXY_HPP
-
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
-#pragma once
-#endif
-
-#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
-#include <boost/detail/workaround.hpp>
-
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
-#include <boost/multi_index/detail/safe_mode.hpp>
-
-namespace boost{
-
-namespace multi_index{
-
-namespace detail{
-
-/* A safe iterator is instantiated in the form
- * safe_iterator<Iterator,Container>: MSVC++ 6.0 has serious troubles with
- * the resulting symbols names, given that index names (which stand for
- * Container) are fairly long themselves. safe_ctr_proxy does not statically
- * depend on Container, and provides the necessary methods (begin and end) to
- * the safe mode framework via an abstract interface. With safe_ctr_proxy,
- * instead of deriving from safe_container<Container> the following base class
- * must be used:
- *
- * safe_ctr_proxy_impl<Iterator,Container>
- *
- * where Iterator is the type of the *unsafe* iterator being wrapped.
- * The corresponding safe iterator instantiation is then
- *
- * safe_iterator<Iterator,safe_ctr_proxy<Iterator> >,
- *
- * which does not include the name of Container.
- */
-
-template<typename Iterator>
-class safe_ctr_proxy:
- public safe_mode::safe_container<safe_ctr_proxy<Iterator> >
-{
-public:
- typedef safe_mode::safe_iterator<Iterator,safe_ctr_proxy> iterator;
- typedef iterator const_iterator;
-
- iterator begin(){return begin_impl();}
- const_iterator begin()const{return begin_impl();}
- iterator end(){return end_impl();}
- const_iterator end()const{return end_impl();}
-
-protected:
- virtual iterator begin_impl()=0;
- virtual const_iterator begin_impl()const=0;
- virtual iterator end_impl()=0;
- virtual const_iterator end_impl()const=0;
-};
-
-template<typename Iterator,typename Container>
-class safe_ctr_proxy_impl:public safe_ctr_proxy<Iterator>
-{
- typedef safe_ctr_proxy<Iterator> super;
- typedef Container container_type;
-
-public:
- typedef typename super::iterator iterator;
- typedef typename super::const_iterator const_iterator;
-
- virtual iterator begin_impl(){return container().begin();}
- virtual const_iterator begin_impl()const{return container().begin();}
- virtual iterator end_impl(){return container().end();}
- virtual const_iterator end_impl()const{return container().end();}
-
-private:
- container_type& container()
- {
- return *static_cast<container_type*>(this);
- }
-
- const container_type& container()const
- {
- return *static_cast<const container_type*>(this);
- }
-};
-
-} /* namespace multi_index::detail */
-
-} /* namespace multi_index */
-
-} /* namespace boost */
-
-#endif /* workaround */
-
-#endif /* BOOST_MULTI_INDEX_ENABLE_SAFE_MODE */
-
-#endif
diff --git a/3party/boost/boost/multi_index/detail/safe_mode.hpp b/3party/boost/boost/multi_index/detail/safe_mode.hpp
index 4e4a585274..905270e9fb 100644
--- a/3party/boost/boost/multi_index/detail/safe_mode.hpp
+++ b/3party/boost/boost/multi_index/detail/safe_mode.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_SAFE_MODE_HPP
#define BOOST_MULTI_INDEX_DETAIL_SAFE_MODE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -116,6 +116,7 @@
#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/version.hpp>
#endif
#if defined(BOOST_HAS_THREADS)
@@ -567,6 +568,19 @@ public:
} /* namespace multi_index */
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+namespace serialization{
+template<typename Iterator,typename Container>
+struct version<
+ boost::multi_index::safe_mode::safe_iterator<Iterator,Container>
+>
+{
+ BOOST_STATIC_CONSTANT(
+ int,value=boost::serialization::version<Iterator>::value);
+};
+} /* namespace serialization */
+#endif
+
} /* namespace boost */
#endif /* BOOST_MULTI_INDEX_ENABLE_SAFE_MODE */
diff --git a/3party/boost/boost/multi_index/detail/scope_guard.hpp b/3party/boost/boost/multi_index/detail/scope_guard.hpp
index 5640c8fbdb..116f8f5041 100644
--- a/3party/boost/boost/multi_index/detail/scope_guard.hpp
+++ b/3party/boost/boost/multi_index/detail/scope_guard.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2011 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,11 +9,12 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_SCOPE_GUARD_HPP
#define BOOST_MULTI_INDEX_DETAIL_SCOPE_GUARD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/mpl/if.hpp>
namespace boost{
diff --git a/3party/boost/boost/multi_index/detail/seq_index_node.hpp b/3party/boost/boost/multi_index/detail/seq_index_node.hpp
index cf409ed0b7..5cb467650f 100644
--- a/3party/boost/boost/multi_index/detail/seq_index_node.hpp
+++ b/3party/boost/boost/multi_index/detail/seq_index_node.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,14 +9,13 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_NODE_HPP
#define BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_NODE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
#include <algorithm>
#include <boost/detail/allocator_utilities.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
namespace boost{
@@ -29,18 +28,14 @@ namespace detail{
template<typename Allocator>
struct sequenced_index_node_impl
{
- typedef typename prevent_eti<
- Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,sequenced_index_node_impl
- >::type
- >::type::pointer pointer;
- typedef typename prevent_eti<
- Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,sequenced_index_node_impl
- >::type
- >::type::const_pointer const_pointer;
+ typedef typename
+ boost::detail::allocator::rebind_to<
+ Allocator,sequenced_index_node_impl
+ >::type::pointer pointer;
+ typedef typename
+ boost::detail::allocator::rebind_to<
+ Allocator,sequenced_index_node_impl
+ >::type::const_pointer const_pointer;
pointer& prior(){return prior_;}
pointer prior()const{return prior_;}
@@ -136,25 +131,19 @@ private:
template<typename Super>
struct sequenced_index_node_trampoline:
- prevent_eti<
- Super,
- sequenced_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- typename Super::allocator_type,
- char
- >::type
- >
- >::type
+ sequenced_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ char
+ >::type
+ >
{
- typedef typename prevent_eti<
- Super,
- sequenced_index_node_impl<
- typename boost::detail::allocator::rebind_to<
- typename Super::allocator_type,
- char
- >::type
- >
- >::type impl_type;
+ typedef sequenced_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ char
+ >::type
+ > impl_type;
};
template<typename Super>
diff --git a/3party/boost/boost/multi_index/detail/seq_index_ops.hpp b/3party/boost/boost/multi_index/detail/seq_index_ops.hpp
index 8135074c23..56da408342 100644
--- a/3party/boost/boost/multi_index/detail/seq_index_ops.hpp
+++ b/3party/boost/boost/multi_index/detail/seq_index_ops.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_OPS_HPP
#define BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_OPS_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -79,8 +79,7 @@ template<typename Node,typename Compare>
void sequenced_index_collate(
BOOST_DEDUCED_TYPENAME Node::impl_type* x,
BOOST_DEDUCED_TYPENAME Node::impl_type* y,
- Compare comp
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+ Compare comp)
{
typedef typename Node::impl_type impl_type;
typedef typename Node::impl_pointer impl_pointer;
diff --git a/3party/boost/boost/multi_index/detail/serialization_version.hpp b/3party/boost/boost/multi_index/detail/serialization_version.hpp
index cced78c1f7..ccd8bb4f79 100644
--- a/3party/boost/boost/multi_index/detail/serialization_version.hpp
+++ b/3party/boost/boost/multi_index/detail/serialization_version.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2010 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_SERIALIZATION_VERSION_HPP
#define BOOST_MULTI_INDEX_DETAIL_SERIALIZATION_VERSION_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -60,7 +60,6 @@ private:
} /* namespace multi_index */
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
namespace serialization {
template<typename T>
struct version<boost::multi_index::detail::serialization_version<T> >
@@ -68,7 +67,6 @@ struct version<boost::multi_index::detail::serialization_version<T> >
BOOST_STATIC_CONSTANT(int,value=version<T>::value);
};
} /* namespace serialization */
-#endif
} /* namespace boost */
diff --git a/3party/boost/boost/multi_index/detail/uintptr_type.hpp b/3party/boost/boost/multi_index/detail/uintptr_type.hpp
index 529c623153..9c92d01d4d 100644
--- a/3party/boost/boost/multi_index/detail/uintptr_type.hpp
+++ b/3party/boost/boost/multi_index/detail/uintptr_type.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_UINTPTR_TYPE_HPP
#define BOOST_MULTI_INDEX_DETAIL_UINTPTR_TYPE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/unbounded.hpp b/3party/boost/boost/multi_index/detail/unbounded.hpp
index 40c303445e..dc09be1770 100644
--- a/3party/boost/boost/multi_index/detail/unbounded.hpp
+++ b/3party/boost/boost/multi_index/detail/unbounded.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_UNBOUNDED_HPP
#define BOOST_MULTI_INDEX_DETAIL_UNBOUNDED_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -22,22 +22,6 @@ namespace multi_index{
/* dummy type and variable for use in ordered_index::range() */
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
-/* The default branch actually works for MSVC 6.0, but seems like
- * this implementation of unbounded improves the performance of ordered
- * indices! This behavior is hard to explain and probably a test artifact,
- * but it does not hurt to have the workaround anyway.
- */
-
-namespace detail{struct unbounded_type{};}
-
-namespace{
-
-static detail::unbounded_type unbounded_obj=detail::unbounded_type();
-static detail::unbounded_type& unbounded=unbounded_obj;
-
-} /* unnamed */
-#else
/* ODR-abiding technique shown at the example attached to
* http://lists.boost.org/Archives/boost/2006/07/108355.php
*/
@@ -63,7 +47,6 @@ inline detail::unbounded_helper unbounded(detail::unbounded_helper)
{
return detail::unbounded_helper();
}
-#endif
/* tags used in the implementation of range */
diff --git a/3party/boost/boost/multi_index/detail/value_compare.hpp b/3party/boost/boost/multi_index/detail/value_compare.hpp
index 0bd7b4f2db..1fde20549f 100644
--- a/3party/boost/boost/multi_index/detail/value_compare.hpp
+++ b/3party/boost/boost/multi_index/detail/value_compare.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_DETAIL_VALUE_COMPARE_HPP
#define BOOST_MULTI_INDEX_DETAIL_VALUE_COMPARE_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/detail/vartempl_support.hpp b/3party/boost/boost/multi_index/detail/vartempl_support.hpp
new file mode 100644
index 0000000000..06ff430f4b
--- /dev/null
+++ b/3party/boost/boost/multi_index/detail/vartempl_support.hpp
@@ -0,0 +1,247 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_VARTEMPL_SUPPORT_HPP
+#define BOOST_MULTI_INDEX_DETAIL_VARTEMPL_SUPPORT_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+/* Utilities for emulation of variadic template functions. Variadic packs are
+ * replaced by lists of BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS parameters:
+ *
+ * - typename... Args --> BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK
+ * - Args&&... args --> BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK
+ * - std::forward<Args>(args)... --> BOOST_MULTI_INDEX_FORWARD_PARAM_PACK
+ *
+ * Forwarding emulated with Boost.Move. A template functions foo_imp
+ * defined in such way accepts *exactly* BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS
+ * arguments: variable number of arguments is emulated by providing a set of
+ * overloads foo forwarding to foo_impl with
+ *
+ * BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
+ * BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG (initial extra arg)
+ *
+ * which fill the extra args with boost::multi_index::detail::noarg's.
+ * boost::multi_index::detail::vartempl_placement_new works the opposite
+ * way: it acceps a full a pointer x to Value and a
+ * BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK and forwards to
+ * new(x) Value(args) where args is the argument pack after discarding
+ * noarg's.
+ *
+ * Emulation decays to the real thing when the compiler supports variadic
+ * templates and move semantics natively.
+ */
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)||\
+ defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#include <boost/move/core.hpp>
+#include <boost/move/utility.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/arithmetic/sub.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/logical/and.hpp>
+#include <boost/preprocessor/punctuation/comma.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS)
+#define BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS 5
+#endif
+
+#define BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK \
+BOOST_PP_ENUM_PARAMS( \
+ BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,typename T)
+
+#define BOOST_MULTI_INDEX_VARTEMPL_ARG(z,n,_) \
+BOOST_FWD_REF(BOOST_PP_CAT(T,n)) BOOST_PP_CAT(t,n)
+
+#define BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK \
+BOOST_PP_ENUM( \
+ BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS, \
+ BOOST_MULTI_INDEX_VARTEMPL_ARG,~)
+
+#define BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG(z,n,_) \
+boost::forward<BOOST_PP_CAT(T,n)>(BOOST_PP_CAT(t,n))
+
+#define BOOST_MULTI_INDEX_FORWARD_PARAM_PACK \
+BOOST_PP_ENUM( \
+ BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS, \
+ BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG,~)
+
+namespace boost{namespace multi_index{namespace detail{
+struct noarg{};
+}}}
+
+/* call vartempl function without args */
+
+#define BOOST_MULTI_INDEX_NULL_PARAM_PACK \
+BOOST_PP_ENUM_PARAMS( \
+ BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS, \
+ boost::multi_index::detail::noarg() BOOST_PP_INTERCEPT)
+
+#define BOOST_MULTI_INDEX_TEMPLATE_N(n) \
+template<BOOST_PP_ENUM_PARAMS(n,typename T)>
+
+#define BOOST_MULTI_INDEX_TEMPLATE_0(n)
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_AUX(z,n,data) \
+BOOST_PP_IF(n, \
+ BOOST_MULTI_INDEX_TEMPLATE_N, \
+ BOOST_MULTI_INDEX_TEMPLATE_0)(n) \
+BOOST_PP_SEQ_ELEM(0,data) /* ret */ \
+BOOST_PP_SEQ_ELEM(1,data) /* name_from */ ( \
+ BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_ARG,~)) \
+{ \
+ return BOOST_PP_SEQ_ELEM(2,data) /* name_to */ ( \
+ BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG,~) \
+ BOOST_PP_COMMA_IF( \
+ BOOST_PP_AND( \
+ n,BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n))) \
+ BOOST_PP_ENUM_PARAMS( \
+ BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n), \
+ boost::multi_index::detail::noarg() BOOST_PP_INTERCEPT) \
+ ); \
+}
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL( \
+ ret,name_from,name_to) \
+BOOST_PP_REPEAT_FROM_TO( \
+ 0,BOOST_PP_ADD(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,1), \
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_AUX, \
+ (ret)(name_from)(name_to))
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG_AUX( \
+ z,n,data) \
+BOOST_PP_IF(n, \
+ BOOST_MULTI_INDEX_TEMPLATE_N, \
+ BOOST_MULTI_INDEX_TEMPLATE_0)(n) \
+BOOST_PP_SEQ_ELEM(0,data) /* ret */ \
+BOOST_PP_SEQ_ELEM(1,data) /* name_from */ ( \
+ BOOST_PP_SEQ_ELEM(3,data) BOOST_PP_SEQ_ELEM(4,data) /* extra arg */\
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_ARG,~)) \
+{ \
+ return BOOST_PP_SEQ_ELEM(2,data) /* name_to */ ( \
+ BOOST_PP_SEQ_ELEM(4,data) /* extra_arg_name */ \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG,~) \
+ BOOST_PP_COMMA_IF( \
+ BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n)) \
+ BOOST_PP_ENUM_PARAMS( \
+ BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n), \
+ boost::multi_index::detail::noarg() BOOST_PP_INTERCEPT) \
+ ); \
+}
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG( \
+ ret,name_from,name_to,extra_arg_type,extra_arg_name) \
+BOOST_PP_REPEAT_FROM_TO( \
+ 0,BOOST_PP_ADD(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,1), \
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG_AUX, \
+ (ret)(name_from)(name_to)(extra_arg_type)(extra_arg_name))
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+#define BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW_AUX(z,n,name) \
+template< \
+ typename Value \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM_PARAMS(n,typename T) \
+> \
+Value* name( \
+ Value* x \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_ARG,~) \
+ BOOST_PP_COMMA_IF( \
+ BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n)) \
+ BOOST_PP_ENUM_PARAMS( \
+ BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n), \
+ BOOST_FWD_REF(noarg) BOOST_PP_INTERCEPT)) \
+{ \
+ return new(x) Value( \
+ BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG,~)); \
+}
+
+#define BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW(name) \
+BOOST_PP_REPEAT_FROM_TO( \
+ 0,BOOST_PP_ADD(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,1), \
+ BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW_AUX, \
+ name)
+
+BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW(vartempl_placement_new)
+
+#undef BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW_AUX
+#undef BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#else
+
+/* native variadic templates support */
+
+#include <utility>
+
+#define BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK typename... Args
+#define BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK Args&&... args
+#define BOOST_MULTI_INDEX_FORWARD_PARAM_PACK std::forward<Args>(args)...
+#define BOOST_MULTI_INDEX_NULL_PARAM_PACK
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL( \
+ ret,name_from,name_to) \
+template<typename... Args> ret name_from(Args&&... args) \
+{ \
+ return name_to(std::forward<Args>(args)...); \
+}
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG( \
+ ret,name_from,name_to,extra_arg_type,extra_arg_name) \
+template<typename... Args> ret name_from( \
+ extra_arg_type extra_arg_name,Args&&... args) \
+{ \
+ return name_to(extra_arg_name,std::forward<Args>(args)...); \
+}
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename Value,typename... Args>
+Value* vartempl_placement_new(Value*x,Args&&... args)
+{
+ return new(x) Value(std::forward<Args>(args)...);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
+#endif
diff --git a/3party/boost/boost/multi_index/global_fun.hpp b/3party/boost/boost/multi_index/global_fun.hpp
index 8520e4d0c7..9333f5891e 100644
--- a/3party/boost/boost/multi_index/global_fun.hpp
+++ b/3party/boost/boost/multi_index/global_fun.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_GLOBAL_FUN_HPP
#define BOOST_MULTI_INDEX_GLOBAL_FUN_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -46,16 +46,6 @@ namespace detail{
* arbitrary combinations of these (vg. T** or auto_ptr<T*>.)
*/
-/* NB. Some overloads of operator() have an extra dummy parameter int=0.
- * This disambiguator serves several purposes:
- * - Without it, MSVC++ 6.0 incorrectly regards some overloads as
- * specializations of a previous member function template.
- * - MSVC++ 6.0/7.0 seem to incorrectly treat some different memfuns
- * as if they have the same signature.
- * - If remove_const is broken due to lack of PTS, int=0 avoids the
- * declaration of memfuns with identical signature.
- */
-
template<class Value,typename Type,Type (*PtrToFunction)(Value)>
struct const_ref_global_fun_base
{
@@ -90,7 +80,7 @@ struct const_ref_global_fun_base
Type operator()(
const reference_wrapper<
typename remove_const<
- typename remove_reference<Value>::type>::type>& x,int=0)const
+ typename remove_reference<Value>::type>::type>& x)const
{
return operator()(x.get());
}
@@ -158,8 +148,7 @@ struct non_ref_global_fun_base
}
Type operator()(
- const reference_wrapper<
- typename remove_const<Value>::type>& x,int=0)const
+ const reference_wrapper<typename remove_const<Value>::type>& x)const
{
return operator()(x.get());
}
diff --git a/3party/boost/boost/multi_index/hashed_index.hpp b/3party/boost/boost/multi_index/hashed_index.hpp
index 9d53bb81f0..ebf55c9ef0 100644
--- a/3party/boost/boost/multi_index/hashed_index.hpp
+++ b/3party/boost/boost/multi_index/hashed_index.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_HASHED_INDEX_HPP
#define BOOST_MULTI_INDEX_HASHED_INDEX_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -21,33 +21,46 @@
#include <boost/detail/workaround.hpp>
#include <boost/foreach_fwd.hpp>
#include <boost/limits.hpp>
+#include <boost/move/core.hpp>
#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
#include <boost/mpl/push_front.hpp>
#include <boost/multi_index/detail/access_specifier.hpp>
#include <boost/multi_index/detail/auto_space.hpp>
#include <boost/multi_index/detail/bucket_array.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
#include <boost/multi_index/detail/hash_index_iterator.hpp>
#include <boost/multi_index/detail/index_node_base.hpp>
#include <boost/multi_index/detail/modify_key_adaptor.hpp>
-#include <boost/multi_index/detail/safe_ctr_proxy.hpp>
#include <boost/multi_index/detail/safe_mode.hpp>
#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
#include <boost/multi_index/hashed_index_fwd.hpp>
#include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <cmath>
#include <cstddef>
#include <functional>
+#include <iterator>
#include <utility>
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include <initializer_list>
+#endif
+
#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
#include <boost/serialization/nvp.hpp>
#endif
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
-#define BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT \
+#define BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT_OF(x) \
detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
- detail::make_obj_guard(*this,&hashed_index::check_invariant_); \
+ detail::make_obj_guard(x,&hashed_index::check_invariant_); \
BOOST_JOIN(check_invariant_,__LINE__).touch();
+#define BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT \
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT_OF(*this)
#else
+#define BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT_OF(x)
#define BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT
#endif
@@ -61,12 +74,9 @@ namespace detail{
/* Most of the implementation of unique and non-unique indices is
* shared. We tell from one another on instantiation time by using
- * these tags.
+ * Category tags defined in hash_index_node.hpp.
*/
-struct hashed_unique_tag{};
-struct hashed_non_unique_tag{};
-
template<
typename KeyFromValue,typename Hash,typename Pred,
typename SuperMeta,typename TagList,typename Category
@@ -75,17 +85,9 @@ class hashed_index:
BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- ,public safe_ctr_proxy_impl<
- hashed_index_iterator<
- hashed_index_node<typename SuperMeta::type::node_type>,
- bucket_array<typename SuperMeta::type::final_allocator_type> >,
- hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category> >
-#else
,public safe_mode::safe_container<
hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category> >
#endif
-#endif
{
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
@@ -102,11 +104,13 @@ class hashed_index:
protected:
typedef hashed_index_node<
- typename super::node_type> node_type;
+ typename super::node_type,Category> node_type;
private:
+ typedef typename node_type::node_alg node_alg;
typedef typename node_type::impl_type node_impl_type;
typedef typename node_impl_type::pointer node_impl_pointer;
+ typedef typename node_impl_type::base_pointer node_impl_base_pointer;
typedef bucket_array<
typename super::final_allocator_type> bucket_array_type;
@@ -129,28 +133,24 @@ public:
typedef std::ptrdiff_t difference_type;
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
typedef safe_mode::safe_iterator<
hashed_index_iterator<
- node_type,bucket_array_type>,
- safe_ctr_proxy<
- hashed_index_iterator<
- node_type,bucket_array_type> > > iterator;
-#else
- typedef safe_mode::safe_iterator<
- hashed_index_iterator<
- node_type,bucket_array_type>,
+ node_type,bucket_array_type,
+ hashed_index_global_iterator_tag>,
hashed_index> iterator;
-#endif
#else
typedef hashed_index_iterator<
- node_type,bucket_array_type> iterator;
+ node_type,bucket_array_type,
+ hashed_index_global_iterator_tag> iterator;
#endif
typedef iterator const_iterator;
- typedef iterator local_iterator;
- typedef const_iterator const_local_iterator;
+ typedef hashed_index_iterator<
+ node_type,bucket_array_type,
+ hashed_index_local_iterator_tag> local_iterator;
+ typedef local_iterator const_local_iterator;
+
typedef TagList tag_list;
protected:
@@ -176,21 +176,20 @@ protected:
private:
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- typedef safe_ctr_proxy_impl<
- hashed_index_iterator<
- node_type,bucket_array_type>,
- hashed_index> safe_super;
-#else
typedef safe_mode::safe_container<
hashed_index> safe_super;
#endif
-#endif
typedef typename call_traits<value_type>::param_type value_param_type;
typedef typename call_traits<
key_type>::param_type key_param_type;
+ /* Needed to avoid commas in BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
+ * expansion.
+ */
+
+ typedef std::pair<iterator,bool> emplace_return_type;
+
public:
/* construct/destroy/copy
@@ -205,36 +204,36 @@ public:
return *this;
}
- allocator_type get_allocator()const
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& operator=(
+ std::initializer_list<value_type> list)
+ {
+ this->final()=list;
+ return *this;
+ }
+#endif
+
+ allocator_type get_allocator()const BOOST_NOEXCEPT
{
return this->final().get_allocator();
}
/* size and capacity */
- bool empty()const{return this->final_empty_();}
- size_type size()const{return this->final_size_();}
- size_type max_size()const{return this->final_max_size_();}
+ bool empty()const BOOST_NOEXCEPT{return this->final_empty_();}
+ size_type size()const BOOST_NOEXCEPT{return this->final_size_();}
+ size_type max_size()const BOOST_NOEXCEPT{return this->final_max_size_();}
/* iterators */
- iterator begin()
- {
- return make_iterator(
- node_type::from_impl(buckets.at(first_bucket)->next()));
- }
-
- const_iterator begin()const
- {
- return make_iterator(
- node_type::from_impl(buckets.at(first_bucket)->next()));
- }
-
- iterator end(){return make_iterator(header());}
- const_iterator end()const{return make_iterator(header());}
-
- const_iterator cbegin()const{return begin();}
- const_iterator cend()const{return end();}
+ iterator begin()BOOST_NOEXCEPT
+ {return make_iterator(node_type::from_impl(header()->next()->prior()));}
+ const_iterator begin()const BOOST_NOEXCEPT
+ {return make_iterator(node_type::from_impl(header()->next()->prior()));}
+ iterator end()BOOST_NOEXCEPT{return make_iterator(header());}
+ const_iterator end()const BOOST_NOEXCEPT{return make_iterator(header());}
+ const_iterator cbegin()const BOOST_NOEXCEPT{return begin();}
+ const_iterator cend()const BOOST_NOEXCEPT{return end();}
iterator iterator_to(const value_type& x)
{
@@ -248,14 +247,27 @@ public:
/* modifiers */
- std::pair<iterator,bool> insert(value_param_type x)
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(
+ emplace_return_type,emplace,emplace_impl)
+
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(
+ iterator,emplace_hint,emplace_hint_impl,iterator,position)
+
+ std::pair<iterator,bool> insert(const value_type& x)
{
BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
std::pair<final_node_type*,bool> p=this->final_insert_(x);
return std::pair<iterator,bool>(make_iterator(p.first),p.second);
}
- iterator insert(iterator position,value_param_type x)
+ std::pair<iterator,bool> insert(BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_rv_(x);
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
+ iterator insert(iterator position,const value_type& x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
@@ -265,13 +277,29 @@ public:
return make_iterator(p.first);
}
+ iterator insert(iterator position,BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_rv_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ return make_iterator(p.first);
+ }
+
template<typename InputIterator>
void insert(InputIterator first,InputIterator last)
{
BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
- iterator hint=end();
- for(;first!=last;++first)hint=insert(hint,*first);
+ for(;first!=last;++first)this->final_insert_ref_(*first);
+ }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ void insert(std::initializer_list<value_type> list)
+ {
+ insert(list.begin(),list.end());
}
+#endif
iterator erase(iterator position)
{
@@ -287,28 +315,23 @@ public:
{
BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
- size_type s=0;
- std::size_t buc=buckets.position(hash_(k));
- node_impl_pointer x=buckets.at(buc);
- node_impl_pointer y=x->next();
- while(y!=x){
- if(eq_(k,key(node_type::from_impl(y)->value()))){
- bool b;
+ std::size_t buc=buckets.position(hash_(k));
+ for(node_impl_pointer x=buckets.at(buc)->prior();
+ x!=node_impl_pointer(0);x=node_alg::next_to_inspect(x)){
+ if(eq_(k,key(node_type::from_impl(x)->value()))){
+ node_impl_pointer y=end_of_range(x);
+ size_type s=0;
do{
- node_impl_pointer z=y->next();
- b=z!=x&&eq_(
- key(node_type::from_impl(y)->value()),
- key(node_type::from_impl(z)->value()));
+ node_impl_pointer z=node_alg::after(x);
this->final_erase_(
- static_cast<final_node_type*>(node_type::from_impl(y)));
- y=z;
+ static_cast<final_node_type*>(node_type::from_impl(x)));
+ x=z;
++s;
- }while(b);
- break;
+ }while(x!=y);
+ return s;
}
- y=y->next();
}
- return s;
+ return 0;
}
iterator erase(iterator first,iterator last)
@@ -325,7 +348,7 @@ public:
return first;
}
- bool replace(iterator position,value_param_type x)
+ bool replace(iterator position,const value_type& x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -335,6 +358,16 @@ public:
x,static_cast<final_node_type*>(position.get_node()));
}
+ bool replace(iterator position,BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ return this->final_replace_rv_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ }
+
template<typename Modifier>
bool modify(iterator position,Modifier mod)
{
@@ -357,7 +390,7 @@ public:
}
template<typename Modifier,typename Rollback>
- bool modify(iterator position,Modifier mod,Rollback back)
+ bool modify(iterator position,Modifier mod,Rollback back_)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -374,7 +407,7 @@ public:
#endif
return this->final_modify_(
- mod,back,static_cast<final_node_type*>(position.get_node()));
+ mod,back_,static_cast<final_node_type*>(position.get_node()));
}
template<typename Modifier>
@@ -389,7 +422,7 @@ public:
}
template<typename Modifier,typename Rollback>
- bool modify_key(iterator position,Modifier mod,Rollback back)
+ bool modify_key(iterator position,Modifier mod,Rollback back_)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -398,10 +431,10 @@ public:
return modify(
position,
modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key),
- modify_key_adaptor<Rollback,value_type,KeyFromValue>(back,key));
+ modify_key_adaptor<Rollback,value_type,KeyFromValue>(back_,key));
}
- void clear()
+ void clear()BOOST_NOEXCEPT
{
BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
this->final_clear_();
@@ -410,6 +443,7 @@ public:
void swap(hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x)
{
BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT_OF(x);
this->final_swap_(x.final());
}
@@ -438,14 +472,12 @@ public:
const CompatibleKey& k,
const CompatibleHash& hash,const CompatiblePred& eq)const
{
- std::size_t buc=buckets.position(hash(k));
- node_impl_pointer x=buckets.at(buc);
- node_impl_pointer y=x->next();
- while(y!=x){
- if(eq(k,key(node_type::from_impl(y)->value()))){
- return make_iterator(node_type::from_impl(y));
+ std::size_t buc=buckets.position(hash(k));
+ for(node_impl_pointer x=buckets.at(buc)->prior();
+ x!=node_impl_pointer(0);x=node_alg::next_to_inspect(x)){
+ if(eq(k,key(node_type::from_impl(x)->value()))){
+ return make_iterator(node_type::from_impl(x));
}
- y=y->next();
}
return end();
}
@@ -463,21 +495,20 @@ public:
const CompatibleKey& k,
const CompatibleHash& hash,const CompatiblePred& eq)const
{
- size_type res=0;
- std::size_t buc=buckets.position(hash(k));
- node_impl_pointer x=buckets.at(buc);
- node_impl_pointer y=x->next();
- while(y!=x){
- if(eq(k,key(node_type::from_impl(y)->value()))){
+ std::size_t buc=buckets.position(hash(k));
+ for(node_impl_pointer x=buckets.at(buc)->prior();
+ x!=node_impl_pointer(0);x=node_alg::next_to_inspect(x)){
+ if(eq(k,key(node_type::from_impl(x)->value()))){
+ size_type res=0;
+ node_impl_pointer y=end_of_range(x);
do{
++res;
- y=y->next();
- }while(y!=x&&eq(k,key(node_type::from_impl(y)->value())));
- break;
+ x=node_alg::after(x);
+ }while(x!=y);
+ return res;
}
- y=y->next();
}
- return res;
+ return 0;
}
template<typename CompatibleKey>
@@ -493,43 +524,29 @@ public:
const CompatibleKey& k,
const CompatibleHash& hash,const CompatiblePred& eq)const
{
- std::size_t buc=buckets.position(hash(k));
- node_impl_pointer x=buckets.at(buc);
- node_impl_pointer y=x->next();
- while(y!=x){
- if(eq(k,key(node_type::from_impl(y)->value()))){
- node_impl_pointer y0=y;
- do{
- y=y->next();
- }while(y!=x&&eq(k,key(node_type::from_impl(y)->value())));
- if(y==x){
- do{
- ++y;
- }while(y==y->next());
- y=y->next();
- }
+ std::size_t buc=buckets.position(hash(k));
+ for(node_impl_pointer x=buckets.at(buc)->prior();
+ x!=node_impl_pointer(0);x=node_alg::next_to_inspect(x)){
+ if(eq(k,key(node_type::from_impl(x)->value()))){
return std::pair<iterator,iterator>(
- make_iterator(node_type::from_impl(y0)),
- make_iterator(node_type::from_impl(y)));
+ make_iterator(node_type::from_impl(x)),
+ make_iterator(node_type::from_impl(end_of_range(x))));
}
- y=y->next();
}
return std::pair<iterator,iterator>(end(),end());
}
/* bucket interface */
- size_type bucket_count()const{return buckets.size();}
- size_type max_bucket_count()const{return static_cast<size_type>(-1);}
+ size_type bucket_count()const BOOST_NOEXCEPT{return buckets.size();}
+ size_type max_bucket_count()const BOOST_NOEXCEPT{return static_cast<size_type>(-1);}
size_type bucket_size(size_type n)const
{
- size_type res=0;
- node_impl_pointer x=buckets.at(n);
- node_impl_pointer y=x->next();
- while(y!=x){
+ size_type res=0;
+ for(node_impl_pointer x=buckets.at(n)->prior();
+ x!=node_impl_pointer(0);x=node_alg::after_local(x)){
++res;
- y=y->next();
}
return res;
}
@@ -546,10 +563,9 @@ public:
const_local_iterator begin(size_type n)const
{
- node_impl_pointer x=buckets.at(n);
- node_impl_pointer y=x->next();
- if(y==x)return end();
- return make_iterator(node_type::from_impl(y));
+ node_impl_pointer x=buckets.at(n)->prior();
+ if(x==node_impl_pointer(0))return end(n);
+ return make_local_iterator(node_type::from_impl(x));
}
local_iterator end(size_type n)
@@ -557,14 +573,9 @@ public:
return const_cast<const hashed_index*>(this)->end(n);
}
- const_local_iterator end(size_type n)const
+ const_local_iterator end(size_type)const
{
- node_impl_pointer x=buckets.at(n);
- if(x==x->next())return end();
- do{
- ++x;
- }while(x==x->next());
- return make_iterator(node_type::from_impl(x->next()));
+ return make_local_iterator(0);
}
const_local_iterator cbegin(size_type n)const{return begin(n);}
@@ -572,24 +583,25 @@ public:
local_iterator local_iterator_to(const value_type& x)
{
- return make_iterator(node_from_value<node_type>(&x));
+ return make_local_iterator(node_from_value<node_type>(&x));
}
const_local_iterator local_iterator_to(const value_type& x)const
{
- return make_iterator(node_from_value<node_type>(&x));
+ return make_local_iterator(node_from_value<node_type>(&x));
}
/* hash policy */
- float load_factor()const{return static_cast<float>(size())/bucket_count();}
- float max_load_factor()const{return mlf;}
+ float load_factor()const BOOST_NOEXCEPT
+ {return static_cast<float>(size())/bucket_count();}
+ float max_load_factor()const BOOST_NOEXCEPT{return mlf;}
void max_load_factor(float z){mlf=z;calculate_max_load();}
void rehash(size_type n)
{
BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
- if(size()<max_load&&n<=bucket_count())return;
+ if(size()<=max_load&&n<=bucket_count())return;
size_type bc =(std::numeric_limits<size_type>::max)();
float fbc=static_cast<float>(1+size()/mlf);
@@ -600,6 +612,11 @@ public:
unchecked_rehash(bc);
}
+ void reserve(size_type n)
+ {
+ rehash(static_cast<size_type>(std::ceil(static_cast<double>(n)/mlf)));
+ }
+
BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
hashed_index(const ctor_args_list& args_list,const allocator_type& al):
super(args_list.get_tail(),al),
@@ -607,8 +624,7 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
hash_(tuples::get<2>(args_list.get_head())),
eq_(tuples::get<3>(args_list.get_head())),
buckets(al,header()->impl(),tuples::get<0>(args_list.get_head())),
- mlf(1.0f),
- first_bucket(buckets.size())
+ mlf(1.0f)
{
calculate_max_load();
}
@@ -626,14 +642,31 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
eq_(x.eq_),
buckets(x.get_allocator(),header()->impl(),x.buckets.size()),
mlf(x.mlf),
- max_load(x.max_load),
- first_bucket(x.first_bucket)
+ max_load(x.max_load)
{
/* Copy ctor just takes the internal configuration objects from x. The rest
* is done in subsequent call to copy_().
*/
}
+ hashed_index(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ do_not_copy_elements_tag):
+ super(x,do_not_copy_elements_tag()),
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super(),
+#endif
+
+ key(x.key),
+ hash_(x.hash_),
+ eq_(x.eq_),
+ buckets(x.get_allocator(),header()->impl(),0),
+ mlf(1.0f)
+ {
+ calculate_max_load();
+ }
+
~hashed_index()
{
/* the container is guaranteed to be empty by now */
@@ -642,90 +675,163 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
iterator make_iterator(node_type* node)
{
- return iterator(node,&buckets,this);
+ return iterator(node,this);
}
const_iterator make_iterator(node_type* node)const
{
- return const_iterator(
- node,
- &const_cast<bucket_array_type&>(buckets),
- const_cast<hashed_index*>(this));
+ return const_iterator(node,const_cast<hashed_index*>(this));
}
#else
iterator make_iterator(node_type* node)
{
- return iterator(node,&buckets);
+ return iterator(node);
}
const_iterator make_iterator(node_type* node)const
{
- return const_iterator(node,&const_cast<bucket_array_type&>(buckets));
+ return const_iterator(node);
}
#endif
+ local_iterator make_local_iterator(node_type* node)
+ {
+ return local_iterator(node);
+ }
+
+ const_local_iterator make_local_iterator(node_type* node)const
+ {
+ return const_local_iterator(node);
+ }
+
void copy_(
const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
const copy_map_type& map)
{
- for(node_impl_pointer begin_org=x.buckets.begin(),
- begin_cpy=buckets.begin(),
- end_org=x.buckets.end();
- begin_org!=end_org;++begin_org,++begin_cpy){
-
- node_impl_pointer next_org=begin_org->next();
- node_impl_pointer cpy=begin_cpy;
- while(next_org!=begin_org){
- cpy->next()=
- static_cast<node_type*>(
- map.find(
- static_cast<final_node_type*>(
- node_type::from_impl(next_org))))->impl();
- next_org=next_org->next();
- cpy=cpy->next();
- }
- cpy->next()=begin_cpy;
+ copy_(x,map,Category());
+ }
+
+ void copy_(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ const copy_map_type& map,hashed_unique_tag)
+ {
+ if(x.size()!=0){
+ node_impl_pointer end_org=x.header()->impl(),
+ org=end_org,
+ cpy=header()->impl();
+ do{
+ node_impl_pointer prev_org=org->prior(),
+ prev_cpy=
+ static_cast<node_type*>(map.find(static_cast<final_node_type*>(
+ node_type::from_impl(prev_org))))->impl();
+ cpy->prior()=prev_cpy;
+ if(node_alg::is_first_of_bucket(org)){
+ node_impl_base_pointer buc_org=prev_org->next(),
+ buc_cpy=
+ buckets.begin()+(buc_org-x.buckets.begin());
+ prev_cpy->next()=buc_cpy;
+ buc_cpy->prior()=cpy;
+ }
+ else{
+ prev_cpy->next()=node_impl_type::base_pointer_from(cpy);
+ }
+ org=prev_org;
+ cpy=prev_cpy;
+ }while(org!=end_org);
}
super::copy_(x,map);
}
+
+ void copy_(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ const copy_map_type& map,hashed_non_unique_tag)
+ {
+ if(x.size()!=0){
+ node_impl_pointer end_org=x.header()->impl(),
+ org=end_org,
+ cpy=header()->impl();
+ do{
+ node_impl_pointer next_org=node_alg::after(org),
+ next_cpy=
+ static_cast<node_type*>(map.find(static_cast<final_node_type*>(
+ node_type::from_impl(next_org))))->impl();
+ if(node_alg::is_first_of_bucket(next_org)){
+ node_impl_base_pointer buc_org=org->next(),
+ buc_cpy=
+ buckets.begin()+(buc_org-x.buckets.begin());
+ cpy->next()=buc_cpy;
+ buc_cpy->prior()=next_cpy;
+ next_cpy->prior()=cpy;
+ }
+ else{
+ if(org->next()==node_impl_type::base_pointer_from(next_org)){
+ cpy->next()=node_impl_type::base_pointer_from(next_cpy);
+ }
+ else{
+ cpy->next()=
+ node_impl_type::base_pointer_from(
+ static_cast<node_type*>(map.find(static_cast<final_node_type*>(
+ node_type::from_impl(
+ node_impl_type::pointer_from(org->next())))))->impl());
+ }
+
+ if(next_org->prior()!=org){
+ next_cpy->prior()=
+ static_cast<node_type*>(map.find(static_cast<final_node_type*>(
+ node_type::from_impl(next_org->prior()))))->impl();
+ }
+ else{
+ next_cpy->prior()=cpy;
+ }
+ }
+ org=next_org;
+ cpy=next_cpy;
+ }while(org!=end_org);
+ }
- node_type* insert_(value_param_type v,node_type* x)
- {
- reserve(size()+1);
+ super::copy_(x,map);
+ }
- std::size_t buc=find_bucket(v);
- node_impl_pointer pos=buckets.at(buc);
- if(!link_point(v,pos,Category()))return node_type::from_impl(pos);
+ template<typename Variant>
+ final_node_type* insert_(
+ value_param_type v,final_node_type*& x,Variant variant)
+ {
+ reserve_for_insert(size()+1);
- node_type* res=static_cast<node_type*>(super::insert_(v,x));
- if(res==x){
- link(x,pos);
- if(first_bucket>buc)first_bucket=buc;
+ std::size_t buc=find_bucket(v);
+ link_info pos(buckets.at(buc));
+ if(!link_point(v,pos)){
+ return static_cast<final_node_type*>(
+ node_type::from_impl(node_impl_type::pointer_from(pos)));
}
+
+ final_node_type* res=super::insert_(v,x,variant);
+ if(res==x)link(static_cast<node_type*>(x),pos);
return res;
}
- node_type* insert_(value_param_type v,node_type* position,node_type* x)
+ template<typename Variant>
+ final_node_type* insert_(
+ value_param_type v,node_type* position,final_node_type*& x,Variant variant)
{
- reserve(size()+1);
+ reserve_for_insert(size()+1);
- std::size_t buc=find_bucket(v);
- node_impl_pointer pos=buckets.at(buc);
- if(!link_point(v,pos,Category()))return node_type::from_impl(pos);
-
- node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
- if(res==x){
- link(x,pos);
- if(first_bucket>buc)first_bucket=buc;
+ std::size_t buc=find_bucket(v);
+ link_info pos(buckets.at(buc));
+ if(!link_point(v,pos)){
+ return static_cast<final_node_type*>(
+ node_type::from_impl(node_impl_type::pointer_from(pos)));
}
+
+ final_node_type* res=super::insert_(v,position,x,variant);
+ if(res==x)link(static_cast<node_type*>(x),pos);
return res;
}
void erase_(node_type* x)
{
unlink(x);
- first_bucket=buckets.first_nonempty(first_bucket);
super::erase_(x);
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
@@ -735,23 +841,42 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
void delete_all_nodes_()
{
- for(node_impl_pointer x=buckets.begin(),x_end=buckets.end();
- x!=x_end;++x){
- node_impl_pointer y=x->next();
- while(y!=x){
- node_impl_pointer z=y->next();
- this->final_delete_node_(
- static_cast<final_node_type*>(node_type::from_impl(y)));
- y=z;
+ delete_all_nodes_(Category());
+ }
+
+ void delete_all_nodes_(hashed_unique_tag)
+ {
+ for(node_impl_pointer x_end=header()->impl(),x=x_end->prior();x!=x_end;){
+ node_impl_pointer y=x->prior();
+ this->final_delete_node_(
+ static_cast<final_node_type*>(node_type::from_impl(x)));
+ x=y;
+ }
+ }
+
+ void delete_all_nodes_(hashed_non_unique_tag)
+ {
+ for(node_impl_pointer x_end=header()->impl(),x=x_end->prior();x!=x_end;){
+ node_impl_pointer y=x->prior();
+ if(y->next()!=node_impl_type::base_pointer_from(x)&&
+ y->next()->prior()!=x){ /* n-1 of group */
+ /* Make the second node prior() pointer back-linked so that it won't
+ * refer to a deleted node when the time for its own destruction comes.
+ */
+
+ node_impl_pointer first=node_impl_type::pointer_from(y->next());
+ first->next()->prior()=first;
}
+ this->final_delete_node_(
+ static_cast<final_node_type*>(node_type::from_impl(x)));
+ x=y;
}
}
void clear_()
{
super::clear_();
- buckets.clear();
- first_bucket=buckets.size();
+ buckets.clear(header()->impl());
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
safe_super::detach_dereferenceable_iterators();
@@ -767,7 +892,6 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
buckets.swap(x.buckets);
std::swap(mlf,x.mlf);
std::swap(max_load,x.max_load);
- std::swap(first_bucket,x.first_bucket);
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
safe_super::swap(x);
@@ -776,33 +900,42 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
super::swap_(x);
}
- bool replace_(value_param_type v,node_type* x)
+ void swap_elements_(
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x)
+ {
+ buckets.swap(x.buckets);
+ std::swap(mlf,x.mlf);
+ std::swap(max_load,x.max_load);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::swap(x);
+#endif
+
+ super::swap_elements_(x);
+ }
+
+ template<typename Variant>
+ bool replace_(value_param_type v,node_type* x,Variant variant)
{
if(eq_(key(v),key(x->value()))){
- return super::replace_(v,x);
+ return super::replace_(v,x,variant);
}
-
- node_impl_pointer y=prev(x);
- unlink_next(y);
+
+ unlink_undo undo;
+ unlink(x,undo);
BOOST_TRY{
- std::size_t buc=find_bucket(v);
- node_impl_pointer pos=buckets.at(buc);
- if(link_point(v,pos,Category())&&super::replace_(v,x)){
+ std::size_t buc=find_bucket(v);
+ link_info pos(buckets.at(buc));
+ if(link_point(v,pos)&&super::replace_(v,x,variant)){
link(x,pos);
- if(first_bucket>buc){
- first_bucket=buc;
- }
- else if(first_bucket<buc){
- first_bucket=buckets.first_nonempty(first_bucket);
- }
return true;
}
- link(x,y);
+ undo();
return false;
}
BOOST_CATCH(...){
- link(x,y);
+ undo();
BOOST_RETHROW;
}
BOOST_CATCH_END
@@ -814,7 +947,7 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
bool b;
BOOST_TRY{
buc=find_bucket(x->value());
- b=in_place(x->impl(),key(x->value()),buc,Category());
+ b=in_place(x->impl(),key(x->value()),buc);
}
BOOST_CATCH(...){
erase_(x);
@@ -824,9 +957,8 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
if(!b){
unlink(x);
BOOST_TRY{
- node_impl_pointer pos=buckets.at(buc);
- if(!link_point(x->value(),pos,Category())){
- first_bucket=buckets.first_nonempty(first_bucket);
+ link_info pos(buckets.at(buc));
+ if(!link_point(x->value(),pos)){
super::erase_(x);
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
@@ -835,15 +967,8 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
return false;
}
link(x,pos);
- if(first_bucket>buc){
- first_bucket=buc;
- }
- else if(first_bucket<buc){
- first_bucket=buckets.first_nonempty(first_bucket);
- }
}
BOOST_CATCH(...){
- first_bucket=buckets.first_nonempty(first_bucket);
super::erase_(x);
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
@@ -858,7 +983,7 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
BOOST_TRY{
if(!super::modify_(x)){
unlink(x);
- first_bucket=buckets.first_nonempty(first_bucket);
+
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
detach_iterators(x);
#endif
@@ -868,7 +993,6 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
}
BOOST_CATCH(...){
unlink(x);
- first_bucket=buckets.first_nonempty(first_bucket);
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
detach_iterators(x);
@@ -882,35 +1006,83 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
bool modify_rollback_(node_type* x)
{
std::size_t buc=find_bucket(x->value());
- if(in_place(x->impl(),key(x->value()),buc,Category())){
+ if(in_place(x->impl(),key(x->value()),buc)){
return super::modify_rollback_(x);
}
- node_impl_pointer y=prev(x);
- unlink_next(y);
+ unlink_undo undo;
+ unlink(x,undo);
BOOST_TRY{
- node_impl_pointer pos=buckets.at(buc);
- if(link_point(x->value(),pos,Category())&&super::modify_rollback_(x)){
+ link_info pos(buckets.at(buc));
+ if(link_point(x->value(),pos)&&super::modify_rollback_(x)){
link(x,pos);
- if(first_bucket>buc){
- first_bucket=buc;
- }
- else if(first_bucket<buc){
- first_bucket=buckets.first_nonempty(first_bucket);
- }
return true;
}
- link(x,y);
+ undo();
return false;
}
BOOST_CATCH(...){
- link(x,y);
+ undo();
BOOST_RETHROW;
}
BOOST_CATCH_END
}
+ /* comparison */
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ /* defect macro refers to class, not function, templates, but anyway */
+
+ template<typename K,typename H,typename P,typename S,typename T,typename C>
+ friend bool operator==(
+ const hashed_index<K,H,P,S,T,C>&,const hashed_index<K,H,P,S,T,C>& y);
+#endif
+
+ bool equals(const hashed_index& x)const{return equals(x,Category());}
+
+ bool equals(const hashed_index& x,hashed_unique_tag)const
+ {
+ if(size()!=x.size())return false;
+ for(const_iterator it=begin(),it_end=end(),it2_end=x.end();
+ it!=it_end;++it){
+ const_iterator it2=x.find(key(*it));
+ if(it2==it2_end||!(*it==*it2))return false;
+ }
+ return true;
+ }
+
+ bool equals(const hashed_index& x,hashed_non_unique_tag)const
+ {
+ if(size()!=x.size())return false;
+ for(const_iterator it=begin(),it_end=end();it!=it_end;){
+ const_iterator it2,it2_last;
+ boost::tie(it2,it2_last)=x.equal_range(key(*it));
+ if(it2==it2_last)return false;
+
+ const_iterator it_last=make_iterator(
+ node_type::from_impl(end_of_range(it.get_node()->impl())));
+ if(std::distance(it,it_last)!=std::distance(it2,it2_last))return false;
+
+ /* From is_permutation code in
+ * http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3068.pdf
+ */
+
+ for(;it!=it_last;++it,++it2){
+ if(!(*it==*it2))break;
+ }
+ if(it!=it_last){
+ for(const_iterator scan=it;scan!=it_last;++scan){
+ if(std::find(it,scan,*scan)!=scan)continue;
+ std::ptrdiff_t matches=std::count(it2,it2_last,*scan);
+ if(matches==0||matches!=std::count(scan,it_last,*scan))return false;
+ }
+ it=it_last;
+ }
+ }
+ return true;
+ }
+
#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
/* serialization */
@@ -956,8 +1128,6 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
if(s1!=size())return false;
}
- if(first_bucket!=buckets.first_nonempty(0))return false;
-
return super::invariant_();
}
@@ -976,64 +1146,147 @@ private:
return bucket(key(v));
}
+ struct link_info_non_unique
+ {
+ link_info_non_unique(node_impl_base_pointer pos):
+ first(pos),last(node_impl_base_pointer(0)){}
+
+ operator const node_impl_base_pointer&()const{return this->first;}
+
+ node_impl_base_pointer first,last;
+ };
+
+ typedef typename mpl::if_<
+ is_same<Category,hashed_unique_tag>,
+ node_impl_base_pointer,
+ link_info_non_unique
+ >::type link_info;
+
+ bool link_point(value_param_type v,link_info& pos)
+ {
+ return link_point(v,pos,Category());
+ }
+
bool link_point(
- value_param_type v,node_impl_pointer& pos,hashed_unique_tag)
+ value_param_type v,node_impl_base_pointer& pos,hashed_unique_tag)
{
- node_impl_pointer x=pos->next();
- while(x!=pos){
+ for(node_impl_pointer x=pos->prior();x!=node_impl_pointer(0);
+ x=node_alg::after_local(x)){
if(eq_(key(v),key(node_type::from_impl(x)->value()))){
- pos=x;
+ pos=node_impl_type::base_pointer_from(x);
return false;
}
- x=x->next();
}
return true;
}
bool link_point(
- value_param_type v,node_impl_pointer& pos,hashed_non_unique_tag)
+ value_param_type v,link_info_non_unique& pos,hashed_non_unique_tag)
{
- node_impl_pointer prev=pos;
- node_impl_pointer x=pos->next();
- while(x!=pos){
+ for(node_impl_pointer x=pos.first->prior();x!=node_impl_pointer(0);
+ x=node_alg::next_to_inspect(x)){
if(eq_(key(v),key(node_type::from_impl(x)->value()))){
- pos=prev;
+ pos.first=node_impl_type::base_pointer_from(x);
+ pos.last=node_impl_type::base_pointer_from(last_of_range(x));
return true;
}
- prev=x;
- x=x->next();
}
return true;
}
-
- static void link(node_type* x,node_impl_pointer pos)
+
+ node_impl_pointer last_of_range(node_impl_pointer x)const
{
- node_impl_type::link(x->impl(),pos);
- };
+ return last_of_range(x,Category());
+ }
- static void link(node_impl_pointer x,node_impl_pointer pos)
+ node_impl_pointer last_of_range(node_impl_pointer x,hashed_unique_tag)const
{
- node_impl_type::link(x,pos);
- };
+ return x;
+ }
- static void unlink(node_type* x)
+ node_impl_pointer last_of_range(
+ node_impl_pointer x,hashed_non_unique_tag)const
{
- node_impl_type::unlink(x->impl());
- };
+ node_impl_base_pointer y=x->next();
+ node_impl_pointer z=y->prior();
+ if(z==x){ /* range of size 1 or 2 */
+ node_impl_pointer yy=node_impl_type::pointer_from(y);
+ return
+ eq_(
+ key(node_type::from_impl(x)->value()),
+ key(node_type::from_impl(yy)->value()))?yy:x;
+ }
+ else if(z->prior()==x) /* last of bucket */
+ return x;
+ else /* group of size>2 */
+ return z;
+ }
+
+ node_impl_pointer end_of_range(node_impl_pointer x)const
+ {
+ return end_of_range(x,Category());
+ }
- static node_impl_pointer prev(node_type* x)
+ node_impl_pointer end_of_range(node_impl_pointer x,hashed_unique_tag)const
{
- return node_impl_type::prev(x->impl());
+ return node_alg::after(last_of_range(x));
}
- static node_impl_pointer prev_from(node_type* x,node_impl_pointer y)
+ node_impl_pointer end_of_range(
+ node_impl_pointer x,hashed_non_unique_tag)const
{
- return node_impl_type::prev_from(x->impl(),y);
+ node_impl_base_pointer y=x->next();
+ node_impl_pointer z=y->prior();
+ if(z==x){ /* range of size 1 or 2 */
+ node_impl_pointer yy=node_impl_type::pointer_from(y);
+ if(!eq_(
+ key(node_type::from_impl(x)->value()),
+ key(node_type::from_impl(yy)->value())))yy=x;
+ return yy->next()->prior()==yy?
+ node_impl_type::pointer_from(yy->next()):
+ yy->next()->prior();
+ }
+ else if(z->prior()==x) /* last of bucket */
+ return z;
+ else /* group of size>2 */
+ return z->next()->prior()==z?
+ node_impl_type::pointer_from(z->next()):
+ z->next()->prior();
}
- static void unlink_next(node_impl_pointer x)
+ void link(node_type* x,const link_info& pos)
{
- node_impl_type::unlink_next(x);
+ link(x,pos,Category());
+ }
+
+ void link(node_type* x,node_impl_base_pointer pos,hashed_unique_tag)
+ {
+ node_alg::link(x->impl(),pos,header()->impl());
+ }
+
+ void link(node_type* x,const link_info_non_unique& pos,hashed_non_unique_tag)
+ {
+ if(pos.last==node_impl_base_pointer(0)){
+ node_alg::link(x->impl(),pos.first,header()->impl());
+ }
+ else{
+ node_alg::link(
+ x->impl(),
+ node_impl_type::pointer_from(pos.first),
+ node_impl_type::pointer_from(pos.last));
+ }
+ }
+
+ void unlink(node_type* x)
+ {
+ node_alg::unlink(x->impl());
+ }
+
+ typedef typename node_alg::unlink_undo unlink_undo;
+
+ void unlink(node_type* x,unlink_undo& undo)
+ {
+ node_alg::unlink(x->impl(),undo);
}
void calculate_max_load()
@@ -1043,7 +1296,7 @@ private:
if(max_load>fml)max_load=static_cast<size_type>(fml);
}
- void reserve(size_type n)
+ void reserve_for_insert(size_type n)
{
if(n>max_load){
size_type bc =(std::numeric_limits<size_type>::max)();
@@ -1053,102 +1306,196 @@ private:
}
}
- void unchecked_rehash(size_type n)
+ void unchecked_rehash(size_type n){unchecked_rehash(n,Category());}
+
+ void unchecked_rehash(size_type n,hashed_unique_tag)
{
- bucket_array_type buckets1(get_allocator(),header()->impl(),n);
- auto_space<std::size_t,allocator_type> hashes(get_allocator(),size());
+ node_impl_type cpy_end_node;
+ node_impl_pointer cpy_end=node_impl_pointer(&cpy_end_node),
+ end_=header()->impl();
+ bucket_array_type buckets_cpy(get_allocator(),cpy_end,n);
- std::size_t i=0;
- node_impl_pointer x=buckets.begin();
- node_impl_pointer x_end=buckets.end();
- for(;x!=x_end;++x){
- node_impl_pointer y=x->next();
- while(y!=x){
- hashes.data()[i++]=hash_(key(node_type::from_impl(y)->value()));
- y=y->next();
+ if(size()!=0){
+ auto_space<
+ std::size_t,allocator_type> hashes(get_allocator(),size());
+ auto_space<
+ node_impl_pointer,allocator_type> node_ptrs(get_allocator(),size());
+ std::size_t i=0,size_=size();
+ bool within_bucket=false;
+ BOOST_TRY{
+ for(;i!=size_;++i){
+ node_impl_pointer x=end_->prior();
+
+ /* only this can possibly throw */
+ std::size_t h=hash_(key(node_type::from_impl(x)->value()));
+
+ hashes.data()[i]=h;
+ node_ptrs.data()[i]=x;
+ within_bucket=!node_alg::unlink_last(end_);
+ node_alg::link(x,buckets_cpy.at(buckets_cpy.position(h)),cpy_end);
+ }
}
+ BOOST_CATCH(...){
+ if(i!=0){
+ std::size_t prev_buc=buckets.position(hashes.data()[i-1]);
+ if(!within_bucket)prev_buc=~prev_buc;
+
+ for(std::size_t j=i;j--;){
+ std::size_t buc=buckets.position(hashes.data()[j]);
+ node_impl_pointer x=node_ptrs.data()[j];
+ if(buc==prev_buc)node_alg::append(x,end_);
+ else node_alg::link(x,buckets.at(buc),end_);
+ prev_buc=buc;
+ }
+ }
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
}
- i=0;
- x=buckets.begin();
- for(;x!=x_end;++x){
- node_impl_pointer y=x->next();
- while(y!=x){
- node_impl_pointer z=y->next();
- std::size_t buc1=buckets1.position(hashes.data()[i++]);
- node_impl_pointer x1=buckets1.at(buc1);
- link(y,x1);
- y=z;
+ end_->prior()=cpy_end->prior()!=cpy_end?cpy_end->prior():end_;
+ end_->next()=cpy_end->next();
+ end_->prior()->next()->prior()=end_->next()->prior()->prior()=end_;
+ buckets.swap(buckets_cpy);
+ calculate_max_load();
+ }
+
+ void unchecked_rehash(size_type n,hashed_non_unique_tag)
+ {
+ node_impl_type cpy_end_node;
+ node_impl_pointer cpy_end=node_impl_pointer(&cpy_end_node),
+ end_=header()->impl();
+ bucket_array_type buckets_cpy(get_allocator(),cpy_end,n);
+
+ if(size()!=0){
+ auto_space<
+ std::size_t,allocator_type> hashes(get_allocator(),size());
+ auto_space<
+ node_impl_pointer,allocator_type> node_ptrs(get_allocator(),size());
+ std::size_t i=0;
+ bool within_bucket=false;
+ BOOST_TRY{
+ for(;;++i){
+ node_impl_pointer x=end_->prior();
+ if(x==end_)break;
+
+ /* only this can possibly throw */
+ std::size_t h=hash_(key(node_type::from_impl(x)->value()));
+
+ hashes.data()[i]=h;
+ node_ptrs.data()[i]=x;
+ std::pair<node_impl_pointer,bool> p=
+ node_alg::unlink_last_group(end_);
+ node_alg::link_range(
+ p.first,x,buckets_cpy.at(buckets_cpy.position(h)),cpy_end);
+ within_bucket=!(p.second);
+ }
+ }
+ BOOST_CATCH(...){
+ if(i!=0){
+ std::size_t prev_buc=buckets.position(hashes.data()[i-1]);
+ if(!within_bucket)prev_buc=~prev_buc;
+
+ for(std::size_t j=i;j--;){
+ std::size_t buc=buckets.position(hashes.data()[j]);
+ node_impl_pointer x=node_ptrs.data()[j],
+ y=
+ x->prior()->next()!=node_impl_type::base_pointer_from(x)&&
+ x->prior()->next()->prior()!=x?
+ node_impl_type::pointer_from(x->prior()->next()):x;
+ node_alg::unlink_range(y,x);
+ if(buc==prev_buc)node_alg::append_range(y,x,end_);
+ else node_alg::link_range(y,x,buckets.at(buc),end_);
+ prev_buc=buc;
+ }
+ }
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
}
- buckets.swap(buckets1);
+ end_->prior()=cpy_end->prior()!=cpy_end?cpy_end->prior():end_;
+ end_->next()=cpy_end->next();
+ end_->prior()->next()->prior()=end_->next()->prior()->prior()=end_;
+ buckets.swap(buckets_cpy);
calculate_max_load();
- first_bucket=buckets.first_nonempty(0);
+ }
+
+ bool in_place(node_impl_pointer x,key_param_type k,std::size_t buc)const
+ {
+ return in_place(x,k,buc,Category());
}
bool in_place(
node_impl_pointer x,key_param_type k,std::size_t buc,
hashed_unique_tag)const
{
- std::less_equal<node_impl_pointer> leq;
- node_impl_pointer bbegin=buckets.begin();
- node_impl_pointer bend=buckets.end();
- node_impl_pointer pbuc=x->next();
-
- while(!leq(bbegin,pbuc)||!leq(pbuc,bend))pbuc=pbuc->next();
- if(buc!=static_cast<std::size_t>(pbuc-bbegin))return false;
-
- node_impl_pointer y=x;
- while(y->next()!=x){
- y=y->next();
- if(y==pbuc)continue;
- if(eq_(k,key(node_type::from_impl(y)->value())))return false;
+ bool found=false;
+ for(node_impl_pointer y=buckets.at(buc)->prior();
+ y!=node_impl_pointer(0);y=node_alg::after_local(y)){
+ if(y==x)found=true;
+ else if(eq_(k,key(node_type::from_impl(y)->value())))return false;
}
- return true;
+ return found;
}
bool in_place(
node_impl_pointer x,key_param_type k,std::size_t buc,
hashed_non_unique_tag)const
{
- std::less_equal<node_impl_pointer> leq;
- node_impl_pointer bbegin=buckets.begin();
- node_impl_pointer bend=buckets.end();
- node_impl_pointer pbuc=x->next();
-
- while(!leq(bbegin,pbuc)||!leq(pbuc,bend))pbuc=pbuc->next();
- if(buc!=static_cast<std::size_t>(pbuc-bbegin))return false;
-
- node_impl_pointer y=x->next();
- if(y!=pbuc){
- if(eq_(k,key(node_type::from_impl(y)->value()))){
- /* adjacent to equivalent element -> in place */
- return true;
- }
- else{
- y=y->next();
- while(y!=pbuc){
- if(eq_(k,key(node_type::from_impl(y)->value())))return false;
- y=y->next();
+ bool found=false;
+ int range_size=0;
+ for(node_impl_pointer y=buckets.at(buc)->prior();y!=node_impl_pointer(0);){
+ if(node_alg::is_first_of_group(y)){ /* group of 3 or more */
+ if(y==x){
+ /* in place <-> equal to some other member of the group */
+ return eq_(
+ k,
+ key(node_type::from_impl(
+ node_impl_type::pointer_from(y->next()))->value()));
+ }
+ else{
+ node_impl_pointer z=
+ node_alg::after_local(y->next()->prior()); /* end of range */
+ if(eq_(k,key(node_type::from_impl(y)->value()))){
+ if(found)return false; /* x lies outside */
+ do{
+ if(y==x)return true;
+ y=node_alg::after_local(y);
+ }while(y!=z);
+ return false; /* x not found */
+ }
+ else{
+ if(range_size==1&&!found)return false;
+ if(range_size==2)return found;
+ range_size=0;
+ y=z; /* skip range (and potentially x, too, which is fine) */
+ }
}
}
- }
- while(y->next()!=x){
- y=y->next();
- if(eq_(k,key(node_type::from_impl(y)->value()))){
- while(y->next()!=x){
- y=y->next();
- if(!eq_(k,key(node_type::from_impl(y)->value())))return false;
+ else{ /* group of 1 or 2 */
+ if(y==x){
+ if(range_size==1)return true;
+ range_size=1;
+ found=true;
}
- /* after a group of equivalent elements --> in place */
- return true;
+ else if(eq_(k,key(node_type::from_impl(y)->value()))){
+ if(range_size==0&&found)return false;
+ if(range_size==1&&!found)return false;
+ if(range_size==2)return false;
+ ++range_size;
+ }
+ else{
+ if(range_size==1&&!found)return false;
+ if(range_size==2)return found;
+ range_size=0;
+ }
+ y=node_alg::after_local(y);
}
}
- return true;
+ return found;
}
-
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
void detach_iterators(node_type* x)
{
@@ -1157,13 +1504,35 @@ private:
}
#endif
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<iterator,bool> emplace_impl(BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool>p=
+ this->final_emplace_(BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ iterator emplace_hint_impl(
+ iterator position,BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool>p=
+ this->final_emplace_hint_(
+ static_cast<final_node_type*>(position.get_node()),
+ BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ return make_iterator(p.first);
+ }
+
key_from_value key;
hasher hash_;
key_equal eq_;
bucket_array_type buckets;
float mlf;
size_type max_load;
- std::size_t first_bucket;
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
BOOST_WORKAROUND(__MWERKS__,<=0x3003)
@@ -1171,6 +1540,30 @@ private:
#endif
};
+/* comparison */
+
+template<
+ typename KeyFromValue,typename Hash,typename Pred,
+ typename SuperMeta,typename TagList,typename Category
+>
+bool operator==(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& y)
+{
+ return x.equals(y);
+}
+
+template<
+ typename KeyFromValue,typename Hash,typename Pred,
+ typename SuperMeta,typename TagList,typename Category
+>
+bool operator!=(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& y)
+{
+ return !(x==y);
+}
+
/* specialized algorithms */
template<
@@ -1201,7 +1594,7 @@ struct hashed_unique
template<typename Super>
struct node_class
{
- typedef detail::hashed_index_node<Super> type;
+ typedef detail::hashed_index_node<Super,detail::hashed_unique_tag> type;
};
template<typename SuperMeta>
@@ -1226,7 +1619,8 @@ struct hashed_non_unique
template<typename Super>
struct node_class
{
- typedef detail::hashed_index_node<Super> type;
+ typedef detail::hashed_index_node<
+ Super,detail::hashed_non_unique_tag> type;
};
template<typename SuperMeta>
@@ -1257,5 +1651,6 @@ inline boost::mpl::true_* boost_foreach_is_noncopyable(
}
#undef BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT
+#undef BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT_OF
#endif
diff --git a/3party/boost/boost/multi_index/hashed_index_fwd.hpp b/3party/boost/boost/multi_index/hashed_index_fwd.hpp
index cd8c2272ad..d77e36c321 100644
--- a/3party/boost/boost/multi_index/hashed_index_fwd.hpp
+++ b/3party/boost/boost/multi_index/hashed_index_fwd.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_HASHED_INDEX_FWD_HPP
#define BOOST_MULTI_INDEX_HASHED_INDEX_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -31,6 +31,22 @@ template<
typename KeyFromValue,typename Hash,typename Pred,
typename SuperMeta,typename TagList,typename Category
>
+bool operator==(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& y);
+
+template<
+ typename KeyFromValue,typename Hash,typename Pred,
+ typename SuperMeta,typename TagList,typename Category
+>
+bool operator!=(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& y);
+
+template<
+ typename KeyFromValue,typename Hash,typename Pred,
+ typename SuperMeta,typename TagList,typename Category
+>
void swap(
hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& y);
diff --git a/3party/boost/boost/multi_index/identity.hpp b/3party/boost/boost/multi_index/identity.hpp
index b402ad70d0..1dbaf3b220 100644
--- a/3party/boost/boost/multi_index/identity.hpp
+++ b/3party/boost/boost/multi_index/identity.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_IDENTITY_HPP
#define BOOST_MULTI_INDEX_IDENTITY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -42,16 +42,6 @@ namespace detail{
* arbitrary combinations of these (vg. Type** or auto_ptr<Type*>.)
*/
-/* NB. Some overloads of operator() have an extra dummy parameter int=0.
- * This disambiguator serves several purposes:
- * - Without it, MSVC++ 6.0 incorrectly regards some overloads as
- * specializations of a previous member function template.
- * - MSVC++ 6.0/7.0 seem to incorrectly treat some different memfuns
- * as if they have the same signature.
- * - If remove_const is broken due to lack of PTS, int=0 avoids the
- * declaration of memfuns with identical signature.
- */
-
template<typename Type>
struct const_identity_base
{
@@ -81,7 +71,7 @@ struct const_identity_base
}
Type& operator()(
- const reference_wrapper<typename remove_const<Type>::type>& x,int=0)const
+ const reference_wrapper<typename remove_const<Type>::type>& x)const
{
return x.get();
}
@@ -108,7 +98,7 @@ struct non_const_identity_base
return operator()(*x);
}
- const Type& operator()(const Type& x,int=0)const
+ const Type& operator()(const Type& x)const
{
return x;
}
@@ -118,7 +108,7 @@ struct non_const_identity_base
return x;
}
- const Type& operator()(const reference_wrapper<const Type>& x,int=0)const
+ const Type& operator()(const reference_wrapper<const Type>& x)const
{
return x.get();
}
diff --git a/3party/boost/boost/multi_index/identity_fwd.hpp b/3party/boost/boost/multi_index/identity_fwd.hpp
index baafa43a5e..af6bd55ef5 100644
--- a/3party/boost/boost/multi_index/identity_fwd.hpp
+++ b/3party/boost/boost/multi_index/identity_fwd.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_IDENTITY_FWD_HPP
#define BOOST_MULTI_INDEX_IDENTITY_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/indexed_by.hpp b/3party/boost/boost/multi_index/indexed_by.hpp
index 94a8dcb7c0..d2217e3916 100644
--- a/3party/boost/boost/multi_index/indexed_by.hpp
+++ b/3party/boost/boost/multi_index/indexed_by.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_INDEXED_BY_HPP
#define BOOST_MULTI_INDEX_INDEXED_BY_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -31,12 +31,8 @@
*/
#if !defined(BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE)
-#if defined(BOOST_MSVC)&&(BOOST_MSVC<1300)
-#define BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE 5
-#else
#define BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
#endif
-#endif
#if BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE<BOOST_MPL_LIMIT_VECTOR_SIZE
#define BOOST_MULTI_INDEX_INDEXED_BY_SIZE \
diff --git a/3party/boost/boost/multi_index/key_extractors.hpp b/3party/boost/boost/multi_index/key_extractors.hpp
index 806de958b3..60179ba233 100644
--- a/3party/boost/boost/multi_index/key_extractors.hpp
+++ b/3party/boost/boost/multi_index/key_extractors.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_KEY_EXTRACTORS_HPP
#define BOOST_MULTI_INDEX_KEY_EXTRACTORS_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/mem_fun.hpp b/3party/boost/boost/multi_index/mem_fun.hpp
index bb18c10973..71fc217024 100644
--- a/3party/boost/boost/multi_index/mem_fun.hpp
+++ b/3party/boost/boost/multi_index/mem_fun.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_MEM_FUN_HPP
#define BOOST_MULTI_INDEX_MEM_FUN_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -112,6 +112,9 @@ struct mem_fun
* news:microsoft.public.vc.language, 21st nov 2002,
* http://groups.google.com/groups?
* hl=en&lr=&ie=UTF-8&selm=ukwvg3O0BHA.1512%40tkmsftngp05
+ *
+ * MSVC++ 6.0 support has been dropped and [const_]mem_fun_explicit is
+ * deprecated.
*/
template<
@@ -183,28 +186,18 @@ struct mem_fun_explicit
}
};
-/* BOOST_MULTI_INDEX_CONST_MEM_FUN and BOOST_MULTI_INDEX_MEM_FUN resolve to
- * [const_]mem_fun_explicit for MSVC++ 6.0 and to [const_]mem_fun otherwise.
+/* BOOST_MULTI_INDEX_CONST_MEM_FUN and BOOST_MULTI_INDEX_MEM_FUN used to
+ * resolve to [const_]mem_fun_explicit for MSVC++ 6.0 and to
+ * [const_]mem_fun otherwise. Support for this compiler having been dropped,
+ * they are now just wrappers over [const_]mem_fun kept for backwards-
+ * compatibility reasons.
*/
-#if defined(BOOST_MSVC)&&(BOOST_MSVC<1300)
-
-#define BOOST_MULTI_INDEX_CONST_MEM_FUN(Class,Type,MemberFunName) \
-::boost::multi_index::const_mem_fun_explicit<\
- Class,Type,Type (Class::*)()const,&Class::MemberFunName >
-#define BOOST_MULTI_INDEX_MEM_FUN(Class,Type,MemberFunName) \
-::boost::multi_index::mem_fun_explicit<\
- Class,Type,Type (Class::*)(),&Class::MemberFunName >
-
-#else
-
#define BOOST_MULTI_INDEX_CONST_MEM_FUN(Class,Type,MemberFunName) \
::boost::multi_index::const_mem_fun< Class,Type,&Class::MemberFunName >
#define BOOST_MULTI_INDEX_MEM_FUN(Class,Type,MemberFunName) \
::boost::multi_index::mem_fun< Class,Type,&Class::MemberFunName >
-#endif
-
} /* namespace multi_index */
} /* namespace boost */
diff --git a/3party/boost/boost/multi_index/member.hpp b/3party/boost/boost/multi_index/member.hpp
index 848e9b23b6..192cf1be88 100644
--- a/3party/boost/boost/multi_index/member.hpp
+++ b/3party/boost/boost/multi_index/member.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_MEMBER_HPP
#define BOOST_MULTI_INDEX_MEMBER_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -41,16 +41,6 @@ namespace detail{
* arbitrary combinations of these (vg. T** or auto_ptr<T*>.)
*/
-/* NB. Some overloads of operator() have an extra dummy parameter int=0.
- * This disambiguator serves several purposes:
- * - Without it, MSVC++ 6.0 incorrectly regards some overloads as
- * specializations of a previous member function template.
- * - MSVC++ 6.0/7.0 seem to incorrectly treat some different memfuns
- * as if they have the same signature.
- * - If remove_const is broken due to lack of PTS, int=0 avoids the
- * declaration of memfuns with identical signature.
- */
-
template<class Class,typename Type,Type Class::*PtrToMember>
struct const_member_base
{
@@ -80,7 +70,7 @@ struct const_member_base
return operator()(x.get());
}
- Type& operator()(const reference_wrapper<Class>& x,int=0)const
+ Type& operator()(const reference_wrapper<Class>& x)const
{
return operator()(x.get());
}
@@ -105,7 +95,7 @@ struct non_const_member_base
return operator()(*x);
}
- const Type& operator()(const Class& x,int=0)const
+ const Type& operator()(const Class& x)const
{
return x.*PtrToMember;
}
@@ -115,7 +105,7 @@ struct non_const_member_base
return x.*PtrToMember;
}
- const Type& operator()(const reference_wrapper<const Class>& x,int=0)const
+ const Type& operator()(const reference_wrapper<const Class>& x)const
{
return operator()(x.get());
}
@@ -152,6 +142,9 @@ namespace detail{
* Surprisingly enough, other compilers, like Intel C++ 7.0/7.1 and
* Visual Age 6.0, have similar bugs. This replacement of member<>
* can be used for them too.
+ *
+ * Support for such old compilers is dropped and
+ * [non_]const_member_offset_base is deprecated.
*/
template<class Class,typename Type,std::size_t OffsetOfMember>
@@ -186,7 +179,7 @@ struct const_member_offset_base
return operator()(x.get());
}
- Type& operator()(const reference_wrapper<Class>& x,int=0)const
+ Type& operator()(const reference_wrapper<Class>& x)const
{
return operator()(x.get());
}
@@ -211,7 +204,7 @@ struct non_const_member_offset_base
return operator()(*x);
}
- const Type& operator()(const Class& x,int=0)const
+ const Type& operator()(const Class& x)const
{
return *static_cast<const Type*>(
static_cast<const void*>(
@@ -226,7 +219,7 @@ struct non_const_member_offset_base
static_cast<char*>(static_cast<void *>(&x))+OffsetOfMember));
}
- const Type& operator()(const reference_wrapper<const Class>& x,int=0)const
+ const Type& operator()(const reference_wrapper<const Class>& x)const
{
return operator()(x.get());
}
diff --git a/3party/boost/boost/multi_index/ordered_index.hpp b/3party/boost/boost/multi_index/ordered_index.hpp
index e248a8b5c7..3f0ae5d84a 100644
--- a/3party/boost/boost/multi_index/ordered_index.hpp
+++ b/3party/boost/boost/multi_index/ordered_index.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
* 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 @@
#ifndef BOOST_MULTI_INDEX_ORDERED_INDEX_HPP
#define BOOST_MULTI_INDEX_ORDERED_INDEX_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -47,26 +47,32 @@
#include <boost/detail/workaround.hpp>
#include <boost/foreach_fwd.hpp>
#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/move/core.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/push_front.hpp>
#include <boost/multi_index/detail/access_specifier.hpp>
#include <boost/multi_index/detail/bidir_node_iterator.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
#include <boost/multi_index/detail/index_node_base.hpp>
#include <boost/multi_index/detail/modify_key_adaptor.hpp>
#include <boost/multi_index/detail/ord_index_node.hpp>
#include <boost/multi_index/detail/ord_index_ops.hpp>
-#include <boost/multi_index/detail/safe_ctr_proxy.hpp>
#include <boost/multi_index/detail/safe_mode.hpp>
#include <boost/multi_index/detail/scope_guard.hpp>
#include <boost/multi_index/detail/unbounded.hpp>
#include <boost/multi_index/detail/value_compare.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
#include <boost/multi_index/ordered_index_fwd.hpp>
#include <boost/ref.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/type_traits/is_same.hpp>
#include <utility>
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include <initializer_list>
+#endif
+
#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
#include <boost/archive/archive_exception.hpp>
#include <boost/bind.hpp>
@@ -75,11 +81,14 @@
#endif
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
-#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT \
+#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF(x) \
detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
- detail::make_obj_guard(*this,&ordered_index::check_invariant_); \
+ detail::make_obj_guard(x,&ordered_index::check_invariant_); \
BOOST_JOIN(check_invariant_,__LINE__).touch();
+#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT \
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF(*this)
#else
+#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF(x)
#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT
#endif
@@ -107,16 +116,9 @@ class ordered_index:
BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- ,public safe_ctr_proxy_impl<
- bidir_node_iterator<
- ordered_index_node<typename SuperMeta::type::node_type> >,
- ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category> >
-#else
,public safe_mode::safe_container<
ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category> >
#endif
-#endif
{
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
@@ -154,16 +156,9 @@ public:
typedef typename allocator_type::const_reference const_reference;
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- typedef safe_mode::safe_iterator<
- bidir_node_iterator<node_type>,
- safe_ctr_proxy<
- bidir_node_iterator<node_type> > > iterator;
-#else
typedef safe_mode::safe_iterator<
bidir_node_iterator<node_type>,
ordered_index> iterator;
-#endif
#else
typedef bidir_node_iterator<node_type> iterator;
#endif
@@ -203,20 +198,20 @@ protected:
private:
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- typedef safe_ctr_proxy_impl<
- bidir_node_iterator<node_type>,
- ordered_index> safe_super;
-#else
typedef safe_mode::safe_container<ordered_index> safe_super;
#endif
-#endif
typedef typename call_traits<
value_type>::param_type value_param_type;
typedef typename call_traits<
key_type>::param_type key_param_type;
+ /* Needed to avoid commas in BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
+ * expansion.
+ */
+
+ typedef std::pair<iterator,bool> emplace_return_type;
+
public:
/* construct/copy/destroy
@@ -231,25 +226,46 @@ public:
return *this;
}
- allocator_type get_allocator()const
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& operator=(
+ std::initializer_list<value_type> list)
+ {
+ this->final()=list;
+ return *this;
+ }
+#endif
+
+ allocator_type get_allocator()const BOOST_NOEXCEPT
{
return this->final().get_allocator();
}
/* iterators */
- iterator begin(){return make_iterator(leftmost());}
- const_iterator begin()const{return make_iterator(leftmost());}
- iterator end(){return make_iterator(header());}
- const_iterator end()const{return make_iterator(header());}
- reverse_iterator rbegin(){return make_reverse_iterator(end());}
- const_reverse_iterator rbegin()const{return make_reverse_iterator(end());}
- reverse_iterator rend(){return make_reverse_iterator(begin());}
- const_reverse_iterator rend()const{return make_reverse_iterator(begin());}
- const_iterator cbegin()const{return begin();}
- const_iterator cend()const{return end();}
- const_reverse_iterator crbegin()const{return rbegin();}
- const_reverse_iterator crend()const{return rend();}
+ iterator
+ begin()BOOST_NOEXCEPT{return make_iterator(leftmost());}
+ const_iterator
+ begin()const BOOST_NOEXCEPT{return make_iterator(leftmost());}
+ iterator
+ end()BOOST_NOEXCEPT{return make_iterator(header());}
+ const_iterator
+ end()const BOOST_NOEXCEPT{return make_iterator(header());}
+ reverse_iterator
+ rbegin()BOOST_NOEXCEPT{return boost::make_reverse_iterator(end());}
+ const_reverse_iterator
+ rbegin()const BOOST_NOEXCEPT{return boost::make_reverse_iterator(end());}
+ reverse_iterator
+ rend()BOOST_NOEXCEPT{return boost::make_reverse_iterator(begin());}
+ const_reverse_iterator
+ rend()const BOOST_NOEXCEPT{return boost::make_reverse_iterator(begin());}
+ const_iterator
+ cbegin()const BOOST_NOEXCEPT{return begin();}
+ const_iterator
+ cend()const BOOST_NOEXCEPT{return end();}
+ const_reverse_iterator
+ crbegin()const BOOST_NOEXCEPT{return rbegin();}
+ const_reverse_iterator
+ crend()const BOOST_NOEXCEPT{return rend();}
iterator iterator_to(const value_type& x)
{
@@ -263,20 +279,33 @@ public:
/* capacity */
- bool empty()const{return this->final_empty_();}
- size_type size()const{return this->final_size_();}
- size_type max_size()const{return this->final_max_size_();}
+ bool empty()const BOOST_NOEXCEPT{return this->final_empty_();}
+ size_type size()const BOOST_NOEXCEPT{return this->final_size_();}
+ size_type max_size()const BOOST_NOEXCEPT{return this->final_max_size_();}
/* modifiers */
- std::pair<iterator,bool> insert(value_param_type x)
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(
+ emplace_return_type,emplace,emplace_impl)
+
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(
+ iterator,emplace_hint,emplace_hint_impl,iterator,position)
+
+ std::pair<iterator,bool> insert(const value_type& x)
{
BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
std::pair<final_node_type*,bool> p=this->final_insert_(x);
return std::pair<iterator,bool>(make_iterator(p.first),p.second);
}
- iterator insert(iterator position,value_param_type x)
+ std::pair<iterator,bool> insert(BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_rv_(x);
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
+ iterator insert(iterator position,const value_type& x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
@@ -286,13 +315,34 @@ public:
return make_iterator(p.first);
}
+ iterator insert(iterator position,BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_rv_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ return make_iterator(p.first);
+ }
+
template<typename InputIterator>
void insert(InputIterator first,InputIterator last)
{
BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
- iterator hint=end();
- for(;first!=last;++first)hint=insert(hint,*first);
+ node_type* hint=header(); /* end() */
+ for(;first!=last;++first){
+ hint=this->final_insert_ref_(
+ *first,static_cast<final_node_type*>(hint)).first;
+ node_type::increment(hint);
+ }
+ }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ void insert(std::initializer_list<value_type> list)
+ {
+ insert(list.begin(),list.end());
}
+#endif
iterator erase(iterator position)
{
@@ -330,7 +380,7 @@ public:
return first;
}
- bool replace(iterator position,value_param_type x)
+ bool replace(iterator position,const value_type& x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -340,6 +390,16 @@ public:
x,static_cast<final_node_type*>(position.get_node()));
}
+ bool replace(iterator position,BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ return this->final_replace_rv_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ }
+
template<typename Modifier>
bool modify(iterator position,Modifier mod)
{
@@ -362,7 +422,7 @@ public:
}
template<typename Modifier,typename Rollback>
- bool modify(iterator position,Modifier mod,Rollback back)
+ bool modify(iterator position,Modifier mod,Rollback back_)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -379,7 +439,7 @@ public:
#endif
return this->final_modify_(
- mod,back,static_cast<final_node_type*>(position.get_node()));
+ mod,back_,static_cast<final_node_type*>(position.get_node()));
}
template<typename Modifier>
@@ -394,7 +454,7 @@ public:
}
template<typename Modifier,typename Rollback>
- bool modify_key(iterator position,Modifier mod,Rollback back)
+ bool modify_key(iterator position,Modifier mod,Rollback back_)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -403,16 +463,17 @@ public:
return modify(
position,
modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key),
- modify_key_adaptor<Rollback,value_type,KeyFromValue>(back,key));
+ modify_key_adaptor<Rollback,value_type,KeyFromValue>(back_,key));
}
void swap(ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x)
{
BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF(x);
this->final_swap_(x.final());
}
- void clear()
+ void clear()BOOST_NOEXCEPT
{
BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
this->final_clear_();
@@ -551,10 +612,25 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
comp_(x.comp_)
{
/* Copy ctor just takes the key and compare objects from x. The rest is
- * done in subsequent call to copy_().
+ * done in a subsequent call to copy_().
*/
}
+ ordered_index(
+ const ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x,
+ do_not_copy_elements_tag):
+ super(x,do_not_copy_elements_tag()),
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super(),
+#endif
+
+ key(x.key),
+ comp_(x.comp_)
+ {
+ empty_initialize();
+ }
+
~ordered_index()
{
/* the container is guaranteed to be empty by now */
@@ -623,30 +699,36 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
super::copy_(x,map);
}
- node_type* insert_(value_param_type v,node_type* x)
+ template<typename Variant>
+ final_node_type* insert_(
+ value_param_type v,final_node_type*& x,Variant variant)
{
link_info inf;
if(!link_point(key(v),inf,Category())){
- return node_type::from_impl(inf.pos);
+ return static_cast<final_node_type*>(node_type::from_impl(inf.pos));
}
- node_type* res=static_cast<node_type*>(super::insert_(v,x));
+ final_node_type* res=super::insert_(v,x,variant);
if(res==x){
- node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
+ node_impl_type::link(
+ static_cast<node_type*>(x)->impl(),inf.side,inf.pos,header()->impl());
}
return res;
}
- node_type* insert_(value_param_type v,node_type* position,node_type* x)
+ template<typename Variant>
+ final_node_type* insert_(
+ value_param_type v,node_type* position,final_node_type*& x,Variant variant)
{
link_info inf;
if(!hinted_link_point(key(v),position,inf,Category())){
- return node_type::from_impl(inf.pos);
+ return static_cast<final_node_type*>(node_type::from_impl(inf.pos));
}
- node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
+ final_node_type* res=super::insert_(v,position,x,variant);
if(res==x){
- node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
+ node_impl_type::link(
+ static_cast<node_type*>(x)->impl(),inf.side,inf.pos,header()->impl());
}
return res;
}
@@ -689,10 +771,21 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
super::swap_(x);
}
- bool replace_(value_param_type v,node_type* x)
+ void swap_elements_(
+ ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x)
+ {
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::swap(x);
+#endif
+
+ super::swap_elements_(x);
+ }
+
+ template<typename Variant>
+ bool replace_(value_param_type v,node_type* x,Variant variant)
{
if(in_place(v,x,Category())){
- return super::replace_(v,x);
+ return super::replace_(v,x,variant);
}
node_type* next=x;
@@ -703,7 +796,7 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
BOOST_TRY{
link_info inf;
- if(link_point(key(v),inf,Category())&&super::replace_(v,x)){
+ if(link_point(key(v),inf,Category())&&super::replace_(v,x,variant)){
node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
return true;
}
@@ -1085,6 +1178,29 @@ private:
}
#endif
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<iterator,bool> emplace_impl(BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool>p=
+ this->final_emplace_(BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ iterator emplace_hint_impl(
+ iterator position,BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool>p=
+ this->final_emplace_hint_(
+ static_cast<final_node_type*>(position.get_node()),
+ BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ return make_iterator(p.first);
+ }
+
template<typename LowerBounder,typename UpperBounder>
std::pair<iterator,iterator>
range(LowerBounder lower,UpperBounder upper,none_unbounded_tag)const
@@ -1202,7 +1318,8 @@ private:
ordered_non_unique_tag)
{
lm.load(
- ::boost::bind(&ordered_index::rearranger,this,_1,_2),
+ ::boost::bind(
+ &ordered_index::rearranger,this,::boost::arg<1>(),::boost::arg<2>()),
ar,version);
super::load_(ar,version,lm);
}
@@ -1402,5 +1519,6 @@ inline boost::mpl::true_* boost_foreach_is_noncopyable(
}
#undef BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT
+#undef BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF
#endif
diff --git a/3party/boost/boost/multi_index/ordered_index_fwd.hpp b/3party/boost/boost/multi_index/ordered_index_fwd.hpp
index 6288a712d0..dbd040fa36 100644
--- a/3party/boost/boost/multi_index/ordered_index_fwd.hpp
+++ b/3party/boost/boost/multi_index/ordered_index_fwd.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_ORDERED_INDEX_FWD_HPP
#define BOOST_MULTI_INDEX_ORDERED_INDEX_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/random_access_index.hpp b/3party/boost/boost/multi_index/random_access_index.hpp
index c45913a3d0..7702776fba 100644
--- a/3party/boost/boost/multi_index/random_access_index.hpp
+++ b/3party/boost/boost/multi_index/random_access_index.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2011 Joaquin M Lopez Munoz.
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_RANDOM_ACCESS_INDEX_HPP
#define BOOST_MULTI_INDEX_RANDOM_ACCESS_INDEX_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -20,18 +20,21 @@
#include <boost/detail/workaround.hpp>
#include <boost/foreach_fwd.hpp>
#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/move/core.hpp>
+#include <boost/move/utility.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/not.hpp>
#include <boost/mpl/push_front.hpp>
#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
#include <boost/multi_index/detail/index_node_base.hpp>
#include <boost/multi_index/detail/rnd_node_iterator.hpp>
#include <boost/multi_index/detail/rnd_index_node.hpp>
#include <boost/multi_index/detail/rnd_index_ops.hpp>
#include <boost/multi_index/detail/rnd_index_ptr_array.hpp>
-#include <boost/multi_index/detail/safe_ctr_proxy.hpp>
#include <boost/multi_index/detail/safe_mode.hpp>
#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
#include <boost/multi_index/random_access_index_fwd.hpp>
#include <boost/throw_exception.hpp>
#include <boost/tuple/tuple.hpp>
@@ -41,17 +44,24 @@
#include <stdexcept>
#include <utility>
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include<initializer_list>
+#endif
+
#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
#include <boost/bind.hpp>
#include <boost/multi_index/detail/rnd_index_loader.hpp>
#endif
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
-#define BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT \
+#define BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT_OF(x) \
detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
- detail::make_obj_guard(*this,&random_access_index::check_invariant_); \
+ detail::make_obj_guard(x,&random_access_index::check_invariant_); \
BOOST_JOIN(check_invariant_,__LINE__).touch();
+#define BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT \
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT_OF(*this)
#else
+#define BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT_OF(x)
#define BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT
#endif
@@ -70,16 +80,9 @@ class random_access_index:
BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- ,public safe_ctr_proxy_impl<
- rnd_node_iterator<
- random_access_index_node<typename SuperMeta::type::node_type> >,
- random_access_index<SuperMeta,TagList> >
-#else
,public safe_mode::safe_container<
random_access_index<SuperMeta,TagList> >
#endif
-#endif
{
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
@@ -114,16 +117,9 @@ public:
typedef typename allocator_type::const_reference const_reference;
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- typedef safe_mode::safe_iterator<
- rnd_node_iterator<node_type>,
- safe_ctr_proxy<
- rnd_node_iterator<node_type> > > iterator;
-#else
typedef safe_mode::safe_iterator<
rnd_node_iterator<node_type>,
random_access_index> iterator;
-#endif
#else
typedef rnd_node_iterator<node_type> iterator;
#endif
@@ -163,19 +159,19 @@ protected:
private:
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- typedef safe_ctr_proxy_impl<
- rnd_node_iterator<node_type>,
- random_access_index> safe_super;
-#else
typedef safe_mode::safe_container<
random_access_index> safe_super;
#endif
-#endif
typedef typename call_traits<
value_type>::param_type value_param_type;
+ /* Needed to avoid commas in BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
+ * expansion.
+ */
+
+ typedef std::pair<iterator,bool> emplace_return_type;
+
public:
/* construct/copy/destroy
@@ -190,12 +186,28 @@ public:
return *this;
}
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ random_access_index<SuperMeta,TagList>& operator=(
+ std::initializer_list<value_type> list)
+ {
+ this->final()=list;
+ return *this;
+ }
+#endif
+
template <class InputIterator>
void assign(InputIterator first,InputIterator last)
{
assign_iter(first,last,mpl::not_<is_integral<InputIterator> >());
}
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ void assign(std::initializer_list<value_type> list)
+ {
+ assign(list.begin(),list.end());
+ }
+#endif
+
void assign(size_type n,value_param_type value)
{
BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
@@ -203,27 +215,37 @@ public:
for(size_type i=0;i<n;++i)push_back(value);
}
- allocator_type get_allocator()const
+ allocator_type get_allocator()const BOOST_NOEXCEPT
{
return this->final().get_allocator();
}
/* iterators */
- iterator begin()
+ iterator begin()BOOST_NOEXCEPT
{return make_iterator(node_type::from_impl(*ptrs.begin()));}
- const_iterator begin()const
+ const_iterator begin()const BOOST_NOEXCEPT
{return make_iterator(node_type::from_impl(*ptrs.begin()));}
- iterator end(){return make_iterator(header());}
- const_iterator end()const{return make_iterator(header());}
- reverse_iterator rbegin(){return make_reverse_iterator(end());}
- const_reverse_iterator rbegin()const{return make_reverse_iterator(end());}
- reverse_iterator rend(){return make_reverse_iterator(begin());}
- const_reverse_iterator rend()const{return make_reverse_iterator(begin());}
- const_iterator cbegin()const{return begin();}
- const_iterator cend()const{return end();}
- const_reverse_iterator crbegin()const{return rbegin();}
- const_reverse_iterator crend()const{return rend();}
+ iterator
+ end()BOOST_NOEXCEPT{return make_iterator(header());}
+ const_iterator
+ end()const BOOST_NOEXCEPT{return make_iterator(header());}
+ reverse_iterator
+ rbegin()BOOST_NOEXCEPT{return boost::make_reverse_iterator(end());}
+ const_reverse_iterator
+ rbegin()const BOOST_NOEXCEPT{return boost::make_reverse_iterator(end());}
+ reverse_iterator
+ rend()BOOST_NOEXCEPT{return boost::make_reverse_iterator(begin());}
+ const_reverse_iterator
+ rend()const BOOST_NOEXCEPT{return boost::make_reverse_iterator(begin());}
+ const_iterator
+ cbegin()const BOOST_NOEXCEPT{return begin();}
+ const_iterator
+ cend()const BOOST_NOEXCEPT{return end();}
+ const_reverse_iterator
+ crbegin()const BOOST_NOEXCEPT{return rbegin();}
+ const_reverse_iterator
+ crend()const BOOST_NOEXCEPT{return rend();}
iterator iterator_to(const value_type& x)
{
@@ -237,16 +259,36 @@ public:
/* capacity */
- bool empty()const{return this->final_empty_();}
- size_type size()const{return this->final_size_();}
- size_type max_size()const{return this->final_max_size_();}
- size_type capacity()const{return ptrs.capacity();}
- void reserve(size_type n){ptrs.reserve(n);}
+ bool empty()const BOOST_NOEXCEPT{return this->final_empty_();}
+ size_type size()const BOOST_NOEXCEPT{return this->final_size_();}
+ size_type max_size()const BOOST_NOEXCEPT{return this->final_max_size_();}
+ size_type capacity()const BOOST_NOEXCEPT{return ptrs.capacity();}
- void resize(size_type n,value_param_type x=value_type())
+ void reserve(size_type n)
{
BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
- if(n>size())insert(end(),n-size(),x);
+ ptrs.reserve(n);
+ }
+
+ void shrink_to_fit()
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ ptrs.shrink_to_fit();
+ }
+
+ void resize(size_type n)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ if(n>size())
+ for(size_type m=n-size();m--;)
+ this->final_emplace_(BOOST_MULTI_INDEX_NULL_PARAM_PACK);
+ else if(n<size())erase(begin()+n,end());
+ }
+
+ void resize(size_type n,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ if(n>size())for(size_type m=n-size();m--;)this->final_insert_(x);
else if(n<size())erase(begin()+n,end());
}
@@ -271,14 +313,28 @@ public:
/* modifiers */
- std::pair<iterator,bool> push_front(value_param_type x)
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(
+ emplace_return_type,emplace_front,emplace_front_impl)
+
+ std::pair<iterator,bool> push_front(const value_type& x)
{return insert(begin(),x);}
+ std::pair<iterator,bool> push_front(BOOST_RV_REF(value_type) x)
+ {return insert(begin(),boost::move(x));}
void pop_front(){erase(begin());}
- std::pair<iterator,bool> push_back(value_param_type x)
+
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(
+ emplace_return_type,emplace_back,emplace_back_impl)
+
+ std::pair<iterator,bool> push_back(const value_type& x)
{return insert(end(),x);}
+ std::pair<iterator,bool> push_back(BOOST_RV_REF(value_type) x)
+ {return insert(end(),boost::move(x));}
void pop_back(){erase(--end());}
- std::pair<iterator,bool> insert(iterator position,value_param_type x)
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(
+ emplace_return_type,emplace,emplace_impl,iterator,position)
+
+ std::pair<iterator,bool> insert(iterator position,const value_type& x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
@@ -290,6 +346,18 @@ public:
return std::pair<iterator,bool>(make_iterator(p.first),p.second);
}
+ std::pair<iterator,bool> insert(iterator position,BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_rv_(x);
+ if(p.second&&position.get_node()!=header()){
+ relocate(position.get_node(),p.first);
+ }
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
void insert(iterator position,size_type n,value_param_type x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
@@ -315,6 +383,13 @@ public:
insert_iter(position,first,last,mpl::not_<is_integral<InputIterator> >());
}
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ void insert(iterator position,std::initializer_list<value_type> list)
+ {
+ insert(position,list.begin(),list.end());
+ }
+#endif
+
iterator erase(iterator position)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
@@ -339,7 +414,7 @@ public:
return last;
}
- bool replace(iterator position,value_param_type x)
+ bool replace(iterator position,const value_type& x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -349,6 +424,16 @@ public:
x,static_cast<final_node_type*>(position.get_node()));
}
+ bool replace(iterator position,BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ return this->final_replace_rv_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ }
+
template<typename Modifier>
bool modify(iterator position,Modifier mod)
{
@@ -371,7 +456,7 @@ public:
}
template<typename Modifier,typename Rollback>
- bool modify(iterator position,Modifier mod,Rollback back)
+ bool modify(iterator position,Modifier mod,Rollback back_)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -388,16 +473,17 @@ public:
#endif
return this->final_modify_(
- mod,back,static_cast<final_node_type*>(position.get_node()));
+ mod,back_,static_cast<final_node_type*>(position.get_node()));
}
void swap(random_access_index<SuperMeta,TagList>& x)
{
BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT_OF(x);
this->final_swap_(x.final());
}
- void clear()
+ void clear()BOOST_NOEXCEPT
{
BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
this->final_clear_();
@@ -568,7 +654,7 @@ public:
get_allocator(),ptrs,comp);
}
- void reverse()
+ void reverse()BOOST_NOEXCEPT
{
BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
node_impl_type::reverse(ptrs.begin(),ptrs.end());
@@ -638,6 +724,18 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
*/
}
+ random_access_index(
+ const random_access_index<SuperMeta,TagList>& x,do_not_copy_elements_tag):
+ super(x,do_not_copy_elements_tag()),
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super(),
+#endif
+
+ ptrs(x.get_allocator(),header()->impl(),0)
+ {
+ }
+
~random_access_index()
{
/* the container is guaranteed to be empty by now */
@@ -671,19 +769,23 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
super::copy_(x,map);
}
- node_type* insert_(value_param_type v,node_type* x)
+ template<typename Variant>
+ final_node_type* insert_(
+ value_param_type v,final_node_type*& x,Variant variant)
{
ptrs.room_for_one();
- node_type* res=static_cast<node_type*>(super::insert_(v,x));
- if(res==x)ptrs.push_back(x->impl());
+ final_node_type* res=super::insert_(v,x,variant);
+ if(res==x)ptrs.push_back(static_cast<node_type*>(x)->impl());
return res;
}
- node_type* insert_(value_param_type v,node_type* position,node_type* x)
+ template<typename Variant>
+ final_node_type* insert_(
+ value_param_type v,node_type* position,final_node_type*& x,Variant variant)
{
ptrs.room_for_one();
- node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
- if(res==x)ptrs.push_back(x->impl());
+ final_node_type* res=super::insert_(v,position,x,variant);
+ if(res==x)ptrs.push_back(static_cast<node_type*>(x)->impl());
return res;
}
@@ -726,9 +828,21 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
super::swap_(x);
}
- bool replace_(value_param_type v,node_type* x)
+ void swap_elements_(random_access_index<SuperMeta,TagList>& x)
{
- return super::replace_(v,x);
+ ptrs.swap(x.ptrs);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::swap(x);
+#endif
+
+ super::swap_elements_(x);
+ }
+
+ template<typename Variant>
+ bool replace_(value_param_type v,node_type* x,Variant variant)
+ {
+ return super::replace_(v,x,variant);
}
bool modify_(node_type* x)
@@ -781,7 +895,10 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
typedef random_access_index_loader<node_type,allocator_type> loader;
loader ld(get_allocator(),ptrs);
- lm.load(::boost::bind(&loader::rearrange,&ld,_1,_2),ar,version);
+ lm.load(
+ ::boost::bind(
+ &loader::rearrange,&ld,::boost::arg<1>(),::boost::arg<2>()),
+ ar,version);
} /* exit scope so that ld frees its resources */
super::load_(ar,version,lm);
}
@@ -842,7 +959,7 @@ private:
{
BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
clear();
- for(;first!=last;++first)push_back(*first);
+ for(;first!=last;++first)this->final_insert_ref_(*first);
}
void assign_iter(size_type n,value_param_type value,mpl::false_)
@@ -860,7 +977,7 @@ private:
size_type s=0;
BOOST_TRY{
for(;first!=last;++first){
- if(push_back(*first).second)++s;
+ if(this->final_insert_ref_(*first).second)++s;
}
}
BOOST_CATCH(...){
@@ -891,6 +1008,35 @@ private:
relocate(position,end()-s,end());
}
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<iterator,bool> emplace_front_impl(
+ BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ return emplace_impl(begin(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ }
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<iterator,bool> emplace_back_impl(
+ BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ return emplace_impl(end(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ }
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<iterator,bool> emplace_impl(
+ iterator position,BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=
+ this->final_emplace_(BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ if(p.second&&position.get_node()!=header()){
+ relocate(position.get_node(),p.first);
+ }
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
ptr_array ptrs;
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
@@ -1015,5 +1161,6 @@ inline boost::mpl::true_* boost_foreach_is_noncopyable(
}
#undef BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT
+#undef BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT_OF
#endif
diff --git a/3party/boost/boost/multi_index/random_access_index_fwd.hpp b/3party/boost/boost/multi_index/random_access_index_fwd.hpp
index cf8f2ca03e..2ea1929542 100644
--- a/3party/boost/boost/multi_index/random_access_index_fwd.hpp
+++ b/3party/boost/boost/multi_index/random_access_index_fwd.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_RANDOM_ACCESS_INDEX_FWD_HPP
#define BOOST_MULTI_INDEX_RANDOM_ACCESS_INDEX_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/safe_mode_errors.hpp b/3party/boost/boost/multi_index/safe_mode_errors.hpp
index ff6f96065c..1904706ede 100644
--- a/3party/boost/boost/multi_index/safe_mode_errors.hpp
+++ b/3party/boost/boost/multi_index/safe_mode_errors.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_SAFE_MODE_ERRORS_HPP
#define BOOST_MULTI_INDEX_SAFE_MODE_ERRORS_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/sequenced_index.hpp b/3party/boost/boost/multi_index/sequenced_index.hpp
index e8832eee58..d56edddd17 100644
--- a/3party/boost/boost/multi_index/sequenced_index.hpp
+++ b/3party/boost/boost/multi_index/sequenced_index.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2011 Joaquin M Lopez Munoz.
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
#define BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -20,17 +20,20 @@
#include <boost/detail/workaround.hpp>
#include <boost/foreach_fwd.hpp>
#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/move/core.hpp>
+#include <boost/move/utility.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/not.hpp>
#include <boost/mpl/push_front.hpp>
#include <boost/multi_index/detail/access_specifier.hpp>
#include <boost/multi_index/detail/bidir_node_iterator.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
#include <boost/multi_index/detail/index_node_base.hpp>
-#include <boost/multi_index/detail/safe_ctr_proxy.hpp>
#include <boost/multi_index/detail/safe_mode.hpp>
#include <boost/multi_index/detail/scope_guard.hpp>
#include <boost/multi_index/detail/seq_index_node.hpp>
#include <boost/multi_index/detail/seq_index_ops.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
#include <boost/multi_index/sequenced_index_fwd.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/type_traits/is_integral.hpp>
@@ -38,16 +41,23 @@
#include <functional>
#include <utility>
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include<initializer_list>
+#endif
+
#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
#include <boost/bind.hpp>
#endif
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
-#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT \
+#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x) \
detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
- detail::make_obj_guard(*this,&sequenced_index::check_invariant_); \
+ detail::make_obj_guard(x,&sequenced_index::check_invariant_); \
BOOST_JOIN(check_invariant_,__LINE__).touch();
+#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT \
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(*this)
#else
+#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x)
#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
#endif
@@ -64,16 +74,9 @@ class sequenced_index:
BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- ,public safe_ctr_proxy_impl<
- bidir_node_iterator<
- sequenced_index_node<typename SuperMeta::type::node_type> >,
- sequenced_index<SuperMeta,TagList> >
-#else
,public safe_mode::safe_container<
sequenced_index<SuperMeta,TagList> >
#endif
-#endif
{
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
@@ -105,16 +108,9 @@ public:
typedef typename allocator_type::const_reference const_reference;
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- typedef safe_mode::safe_iterator<
- bidir_node_iterator<node_type>,
- safe_ctr_proxy<
- bidir_node_iterator<node_type> > > iterator;
-#else
typedef safe_mode::safe_iterator<
bidir_node_iterator<node_type>,
sequenced_index> iterator;
-#endif
#else
typedef bidir_node_iterator<node_type> iterator;
#endif
@@ -154,18 +150,18 @@ protected:
private:
#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- typedef safe_ctr_proxy_impl<
- bidir_node_iterator<node_type>,
- sequenced_index> safe_super;
-#else
typedef safe_mode::safe_container<
sequenced_index> safe_super;
#endif
-#endif
typedef typename call_traits<value_type>::param_type value_param_type;
+ /* Needed to avoid commas in BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
+ * expansion.
+ */
+
+ typedef std::pair<iterator,bool> emplace_return_type;
+
public:
/* construct/copy/destroy
@@ -180,12 +176,28 @@ public:
return *this;
}
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ sequenced_index<SuperMeta,TagList>& operator=(
+ std::initializer_list<value_type> list)
+ {
+ this->final()=list;
+ return *this;
+ }
+#endif
+
template <class InputIterator>
void assign(InputIterator first,InputIterator last)
{
assign_iter(first,last,mpl::not_<is_integral<InputIterator> >());
}
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ void assign(std::initializer_list<value_type> list)
+ {
+ assign(list.begin(),list.end());
+ }
+#endif
+
void assign(size_type n,value_param_type value)
{
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
@@ -193,27 +205,37 @@ public:
for(size_type i=0;i<n;++i)push_back(value);
}
- allocator_type get_allocator()const
+ allocator_type get_allocator()const BOOST_NOEXCEPT
{
return this->final().get_allocator();
}
/* iterators */
- iterator begin()
+ iterator begin()BOOST_NOEXCEPT
{return make_iterator(node_type::from_impl(header()->next()));}
- const_iterator begin()const
+ const_iterator begin()const BOOST_NOEXCEPT
{return make_iterator(node_type::from_impl(header()->next()));}
- iterator end(){return make_iterator(header());}
- const_iterator end()const{return make_iterator(header());}
- reverse_iterator rbegin(){return make_reverse_iterator(end());}
- const_reverse_iterator rbegin()const{return make_reverse_iterator(end());}
- reverse_iterator rend(){return make_reverse_iterator(begin());}
- const_reverse_iterator rend()const{return make_reverse_iterator(begin());}
- const_iterator cbegin()const{return begin();}
- const_iterator cend()const{return end();}
- const_reverse_iterator crbegin()const{return rbegin();}
- const_reverse_iterator crend()const{return rend();}
+ iterator
+ end()BOOST_NOEXCEPT{return make_iterator(header());}
+ const_iterator
+ end()const BOOST_NOEXCEPT{return make_iterator(header());}
+ reverse_iterator
+ rbegin()BOOST_NOEXCEPT{return boost::make_reverse_iterator(end());}
+ const_reverse_iterator
+ rbegin()const BOOST_NOEXCEPT{return boost::make_reverse_iterator(end());}
+ reverse_iterator
+ rend()BOOST_NOEXCEPT{return boost::make_reverse_iterator(begin());}
+ const_reverse_iterator
+ rend()const BOOST_NOEXCEPT{return boost::make_reverse_iterator(begin());}
+ const_iterator
+ cbegin()const BOOST_NOEXCEPT{return begin();}
+ const_iterator
+ cend()const BOOST_NOEXCEPT{return end();}
+ const_reverse_iterator
+ crbegin()const BOOST_NOEXCEPT{return rbegin();}
+ const_reverse_iterator
+ crend()const BOOST_NOEXCEPT{return rend();}
iterator iterator_to(const value_type& x)
{
@@ -227,26 +249,25 @@ public:
/* capacity */
- bool empty()const{return this->final_empty_();}
- size_type size()const{return this->final_size_();}
- size_type max_size()const{return this->final_max_size_();}
+ bool empty()const BOOST_NOEXCEPT{return this->final_empty_();}
+ size_type size()const BOOST_NOEXCEPT{return this->final_size_();}
+ size_type max_size()const BOOST_NOEXCEPT{return this->final_max_size_();}
+
+ void resize(size_type n)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ if(n>size()){
+ for(size_type m=n-size();m--;)
+ this->final_emplace_(BOOST_MULTI_INDEX_NULL_PARAM_PACK);
+ }
+ else if(n<size()){for(size_type m=size()-n;m--;)pop_back();}
+ }
- void resize(size_type n,value_param_type x=value_type())
+ void resize(size_type n,value_param_type x)
{
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
if(n>size())insert(end(),n-size(),x);
- else if(n<size()){
- iterator it;
- if(n<=size()/2){
- it=begin();
- std::advance(it,n);
- }
- else{
- it=end();
- for(size_type m=size()-n;m--;--it){}
- }
- erase(it,end());
- }
+ else if(n<size())for(size_type m=size()-n;m--;)pop_back();
}
/* access: no non-const versions provided as sequenced_index
@@ -258,14 +279,28 @@ public:
/* modifiers */
- std::pair<iterator,bool> push_front(value_param_type x)
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(
+ emplace_return_type,emplace_front,emplace_front_impl)
+
+ std::pair<iterator,bool> push_front(const value_type& x)
{return insert(begin(),x);}
+ std::pair<iterator,bool> push_front(BOOST_RV_REF(value_type) x)
+ {return insert(begin(),boost::move(x));}
void pop_front(){erase(begin());}
- std::pair<iterator,bool> push_back(value_param_type x)
+
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(
+ emplace_return_type,emplace_back,emplace_back_impl)
+
+ std::pair<iterator,bool> push_back(const value_type& x)
{return insert(end(),x);}
+ std::pair<iterator,bool> push_back(BOOST_RV_REF(value_type) x)
+ {return insert(end(),boost::move(x));}
void pop_back(){erase(--end());}
- std::pair<iterator,bool> insert(iterator position,value_param_type x)
+ BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(
+ emplace_return_type,emplace,emplace_impl,iterator,position)
+
+ std::pair<iterator,bool> insert(iterator position,const value_type& x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
@@ -277,6 +312,18 @@ public:
return std::pair<iterator,bool>(make_iterator(p.first),p.second);
}
+ std::pair<iterator,bool> insert(iterator position,BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_rv_(x);
+ if(p.second&&position.get_node()!=header()){
+ relink(position.get_node(),p.first);
+ }
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
void insert(iterator position,size_type n,value_param_type x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
@@ -291,6 +338,13 @@ public:
insert_iter(position,first,last,mpl::not_<is_integral<InputIterator> >());
}
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ void insert(iterator position,std::initializer_list<value_type> list)
+ {
+ insert(position,list.begin(),list.end());
+ }
+#endif
+
iterator erase(iterator position)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
@@ -315,7 +369,7 @@ public:
return first;
}
- bool replace(iterator position,value_param_type x)
+ bool replace(iterator position,const value_type& x)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -325,6 +379,16 @@ public:
x,static_cast<final_node_type*>(position.get_node()));
}
+ bool replace(iterator position,BOOST_RV_REF(value_type) x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ return this->final_replace_rv_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ }
+
template<typename Modifier>
bool modify(iterator position,Modifier mod)
{
@@ -347,7 +411,7 @@ public:
}
template<typename Modifier,typename Rollback>
- bool modify(iterator position,Modifier mod,Rollback back)
+ bool modify(iterator position,Modifier mod,Rollback back_)
{
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
@@ -364,16 +428,17 @@ public:
#endif
return this->final_modify_(
- mod,back,static_cast<final_node_type*>(position.get_node()));
+ mod,back_,static_cast<final_node_type*>(position.get_node()));
}
void swap(sequenced_index<SuperMeta,TagList>& x)
{
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x);
this->final_swap_(x.final());
}
- void clear()
+ void clear()BOOST_NOEXCEPT
{
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
this->final_clear_();
@@ -495,7 +560,7 @@ public:
sequenced_index_sort(header(),comp);
}
- void reverse()
+ void reverse()BOOST_NOEXCEPT
{
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
node_impl_type::reverse(header()->impl());
@@ -555,8 +620,19 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
#endif
{
- /* The actual copying takes place in subsequent call to copy_().
- */
+ /* the actual copying takes place in subsequent call to copy_() */
+ }
+
+ sequenced_index(
+ const sequenced_index<SuperMeta,TagList>& x,do_not_copy_elements_tag):
+ super(x,do_not_copy_elements_tag())
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ ,safe_super()
+#endif
+
+ {
+ empty_initialize();
}
~sequenced_index()
@@ -591,17 +667,21 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
super::copy_(x,map);
}
- node_type* insert_(value_param_type v,node_type* x)
+ template<typename Variant>
+ final_node_type* insert_(
+ value_param_type v,final_node_type*& x,Variant variant)
{
- node_type* res=static_cast<node_type*>(super::insert_(v,x));
- if(res==x)link(x);
+ final_node_type* res=super::insert_(v,x,variant);
+ if(res==x)link(static_cast<node_type*>(x));
return res;
}
- node_type* insert_(value_param_type v,node_type* position,node_type* x)
+ template<typename Variant>
+ final_node_type* insert_(
+ value_param_type v,node_type* position,final_node_type*& x,Variant variant)
{
- node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
- if(res==x)link(x);
+ final_node_type* res=super::insert_(v,position,x,variant);
+ if(res==x)link(static_cast<node_type*>(x));
return res;
}
@@ -643,9 +723,19 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
super::swap_(x);
}
- bool replace_(value_param_type v,node_type* x)
+ void swap_elements_(sequenced_index<SuperMeta,TagList>& x)
{
- return super::replace_(v,x);
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::swap(x);
+#endif
+
+ super::swap_elements_(x);
+ }
+
+ template<typename Variant>
+ bool replace_(value_param_type v,node_type* x,Variant variant)
+ {
+ return super::replace_(v,x,variant);
}
bool modify_(node_type* x)
@@ -695,7 +785,8 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
Archive& ar,const unsigned int version,const index_loader_type& lm)
{
lm.load(
- ::boost::bind(&sequenced_index::rearranger,this,_1,_2),
+ ::boost::bind(
+ &sequenced_index::rearranger,this,::boost::arg<1>(),::boost::arg<2>()),
ar,version);
super::load_(ar,version,lm);
}
@@ -781,7 +872,7 @@ private:
{
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
clear();
- for(;first!=last;++first)push_back(*first);
+ for(;first!=last;++first)this->final_insert_ref_(*first);
}
void assign_iter(size_type n,value_param_type value,mpl::false_)
@@ -796,7 +887,13 @@ private:
iterator position,InputIterator first,InputIterator last,mpl::true_)
{
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
- for(;first!=last;++first)insert(position,*first);
+ for(;first!=last;++first){
+ std::pair<final_node_type*,bool> p=
+ this->final_insert_ref_(*first);
+ if(p.second&&position.get_node()!=header()){
+ relink(position.get_node(),p.first);
+ }
+ }
}
void insert_iter(
@@ -807,7 +904,36 @@ private:
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
for(size_type i=0;i<n;++i)insert(position,x);
}
-
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<iterator,bool> emplace_front_impl(
+ BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ return emplace_impl(begin(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ }
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<iterator,bool> emplace_back_impl(
+ BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ return emplace_impl(end(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ }
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<iterator,bool> emplace_impl(
+ iterator position,BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=
+ this->final_emplace_(BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ if(p.second&&position.get_node()!=header()){
+ relink(position.get_node(),p.first);
+ }
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
BOOST_WORKAROUND(__MWERKS__,<=0x3003)
#pragma parse_mfunc_templ reset
@@ -929,5 +1055,6 @@ inline boost::mpl::true_* boost_foreach_is_noncopyable(
}
#undef BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
+#undef BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF
#endif
diff --git a/3party/boost/boost/multi_index/sequenced_index_fwd.hpp b/3party/boost/boost/multi_index/sequenced_index_fwd.hpp
index 5211390b6b..a019f2a6d2 100644
--- a/3party/boost/boost/multi_index/sequenced_index_fwd.hpp
+++ b/3party/boost/boost/multi_index/sequenced_index_fwd.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_SEQUENCED_INDEX_FWD_HPP
#define BOOST_MULTI_INDEX_SEQUENCED_INDEX_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multi_index/tag.hpp b/3party/boost/boost/multi_index/tag.hpp
index ba7cab4f15..ce51f8241e 100644
--- a/3party/boost/boost/multi_index/tag.hpp
+++ b/3party/boost/boost/multi_index/tag.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_TAG_HPP
#define BOOST_MULTI_INDEX_TAG_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -34,12 +34,8 @@
*/
#if !defined(BOOST_MULTI_INDEX_LIMIT_TAG_SIZE)
-#if defined(BOOST_MSVC)&&(BOOST_MSVC<1300)
-#define BOOST_MULTI_INDEX_LIMIT_TAG_SIZE 3
-#else
#define BOOST_MULTI_INDEX_LIMIT_TAG_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
#endif
-#endif
#if BOOST_MULTI_INDEX_LIMIT_TAG_SIZE<BOOST_MPL_LIMIT_VECTOR_SIZE
#define BOOST_MULTI_INDEX_TAG_SIZE BOOST_MULTI_INDEX_LIMIT_TAG_SIZE
diff --git a/3party/boost/boost/multi_index_container.hpp b/3party/boost/boost/multi_index_container.hpp
index 2a2209fdd4..9993a8dfa1 100644
--- a/3party/boost/boost/multi_index_container.hpp
+++ b/3party/boost/boost/multi_index_container.hpp
@@ -1,6 +1,6 @@
/* Multiply indexed container.
*
- * Copyright 2003-2011 Joaquin M Lopez Munoz.
+ * Copyright 2003-2014 Joaquin M Lopez Munoz.
* 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)
@@ -11,7 +11,7 @@
#ifndef BOOST_MULTI_INDEX_HPP
#define BOOST_MULTI_INDEX_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -20,6 +20,7 @@
#include <boost/detail/allocator_utilities.hpp>
#include <boost/detail/no_exceptions_support.hpp>
#include <boost/detail/workaround.hpp>
+#include <boost/move/core.hpp>
#include <boost/mpl/at.hpp>
#include <boost/mpl/contains.hpp>
#include <boost/mpl/find_if.hpp>
@@ -31,17 +32,22 @@
#include <boost/multi_index/detail/access_specifier.hpp>
#include <boost/multi_index/detail/adl_swap.hpp>
#include <boost/multi_index/detail/base_type.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
#include <boost/multi_index/detail/converter.hpp>
#include <boost/multi_index/detail/header_holder.hpp>
#include <boost/multi_index/detail/has_tag.hpp>
#include <boost/multi_index/detail/no_duplicate_tags.hpp>
-#include <boost/multi_index/detail/prevent_eti.hpp>
#include <boost/multi_index/detail/safe_mode.hpp>
#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
#include <boost/static_assert.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/utility/base_from_member.hpp>
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include <initializer_list>
+#endif
+
#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
#include <boost/multi_index/detail/archive_constructed.hpp>
#include <boost/multi_index/detail/serialization_version.hpp>
@@ -54,11 +60,14 @@
#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
#include <boost/multi_index/detail/invariant_assert.hpp>
-#define BOOST_MULTI_INDEX_CHECK_INVARIANT \
+#define BOOST_MULTI_INDEX_CHECK_INVARIANT_OF(x) \
detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
- detail::make_obj_guard(*this,&multi_index_container::check_invariant_); \
+ detail::make_obj_guard(x,&multi_index_container::check_invariant_); \
BOOST_JOIN(check_invariant_,__LINE__).touch();
+#define BOOST_MULTI_INDEX_CHECK_INVARIANT \
+ BOOST_MULTI_INDEX_CHECK_INVARIANT_OF(*this)
#else
+#define BOOST_MULTI_INDEX_CHECK_INVARIANT_OF(x)
#define BOOST_MULTI_INDEX_CHECK_INVARIANT
#endif
@@ -66,6 +75,11 @@ namespace boost{
namespace multi_index{
+#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500))
+#pragma warning(push)
+#pragma warning(disable:4522) /* spurious warning on multiple operator=()'s */
+#endif
+
template<typename Value,typename IndexSpecifierList,typename Allocator>
class multi_index_container:
private ::boost::base_from_member<
@@ -75,13 +89,10 @@ class multi_index_container:
Value,IndexSpecifierList,Allocator>::type
>::type>,
BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS detail::header_holder<
- typename detail::prevent_eti<
+ typename boost::detail::allocator::rebind_to<
Allocator,
- typename boost::detail::allocator::rebind_to<
- Allocator,
- typename detail::multi_index_node_type<
- Value,IndexSpecifierList,Allocator>::type
- >::type
+ typename detail::multi_index_node_type<
+ Value,IndexSpecifierList,Allocator>::type
>::type::pointer,
multi_index_container<Value,IndexSpecifierList,Allocator> >,
public detail::multi_index_base_type<
@@ -98,6 +109,8 @@ class multi_index_container:
#endif
private:
+ BOOST_COPYABLE_AND_MOVABLE(multi_index_container)
+
#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
template <typename,typename,typename> friend class detail::index_base;
template <typename,typename> friend struct detail::header_holder;
@@ -108,52 +121,25 @@ private:
Value,IndexSpecifierList,Allocator>::type super;
typedef typename
boost::detail::allocator::rebind_to<
- Allocator,
- typename super::node_type
+ Allocator,
+ typename super::node_type
>::type node_allocator;
typedef ::boost::base_from_member<
node_allocator> bfm_allocator;
typedef detail::header_holder<
- typename detail::prevent_eti<
- Allocator,
- node_allocator
- >::type::pointer,
+ typename node_allocator::pointer,
multi_index_container> bfm_header;
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- /* see definition of index_type_list below */
- typedef typename super::index_type_list super_index_type_list;
-#endif
public:
/* All types are inherited from super, a few are explicitly
* brought forward here to save us some typename's.
*/
- typedef typename super::ctor_args_list ctor_args_list;
- typedef IndexSpecifierList index_specifier_type_list;
+ typedef typename super::ctor_args_list ctor_args_list;
+ typedef IndexSpecifierList index_specifier_type_list;
-#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
- /* MSVC++ 6.0 chokes on moderately long index lists (around 6 indices
- * or more), with errors ranging from corrupt exes to duplicate
- * comdats. The following type hiding hack alleviates this condition;
- * best results combined with type hiding of the indexed_by construct
- * itself, as explained in the "Compiler specifics" section of
- * the documentation.
- */
-
- struct index_type_list:super_index_type_list
- {
- typedef index_type_list type;
- typedef typename super_index_type_list::back back;
- typedef mpl::v_iter<type,0> begin;
- typedef mpl::v_iter<
- type,
- mpl::size<super_index_type_list>::value> end;
- };
-#else
typedef typename super::index_type_list index_type_list;
-#endif
typedef typename super::iterator_type_list iterator_type_list;
typedef typename super::const_iterator_type_list const_iterator_type_list;
@@ -194,7 +180,7 @@ public:
node_count(0)
{
BOOST_MULTI_INDEX_CHECK_INVARIANT;
- }
+ }
explicit multi_index_container(const allocator_type& al):
bfm_allocator(al),
@@ -203,7 +189,7 @@ public:
{
BOOST_MULTI_INDEX_CHECK_INVARIANT;
}
-
+
template<typename InputIterator>
multi_index_container(
InputIterator first,InputIterator last,
@@ -232,7 +218,36 @@ public:
BOOST_TRY{
iterator hint=super::end();
for(;first!=last;++first){
+ hint=super::make_iterator(
+ insert_ref_(*first,hint.get_node()).first);
+ ++hint;
+ }
+ }
+ BOOST_CATCH(...){
+ clear_();
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ multi_index_container(
+ std::initializer_list<Value> list,
+ const ctor_args_list& args_list=ctor_args_list(),
+ const allocator_type& al=allocator_type()):
+ bfm_allocator(al),
+ super(args_list,bfm_allocator::member),
+ node_count(0)
+ {
+ BOOST_MULTI_INDEX_CHECK_INVARIANT;
+ BOOST_TRY{
+ typedef const Value* init_iterator;
+
+ iterator hint=super::end();
+ for(init_iterator first=list.begin(),last=list.end();
+ first!=last;++first){
hint=super::make_iterator(insert_(*first,hint.get_node()).first);
+ ++hint;
}
}
BOOST_CATCH(...){
@@ -241,6 +256,7 @@ public:
}
BOOST_CATCH_END
}
+#endif
multi_index_container(
const multi_index_container<Value,IndexSpecifierList,Allocator>& x):
@@ -264,20 +280,71 @@ public:
BOOST_MULTI_INDEX_CHECK_INVARIANT;
}
+ multi_index_container(BOOST_RV_REF(multi_index_container) x):
+ bfm_allocator(x.bfm_allocator::member),
+ bfm_header(),
+ super(x,detail::do_not_copy_elements_tag()),
+ node_count(0)
+ {
+ BOOST_MULTI_INDEX_CHECK_INVARIANT;
+ BOOST_MULTI_INDEX_CHECK_INVARIANT_OF(x);
+ swap_elements_(x);
+ }
+
~multi_index_container()
{
delete_all_nodes_();
}
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ /* As per http://www.boost.org/doc/html/move/emulation_limitations.html
+ * #move.emulation_limitations.assignment_operator
+ */
+
multi_index_container<Value,IndexSpecifierList,Allocator>& operator=(
- multi_index_container<Value,IndexSpecifierList,Allocator> x)
+ const multi_index_container<Value,IndexSpecifierList,Allocator>& x)
+ {
+ multi_index_container y(x);
+ this->swap(y);
+ return *this;
+ }
+#endif
+
+ multi_index_container<Value,IndexSpecifierList,Allocator>& operator=(
+ BOOST_COPY_ASSIGN_REF(multi_index_container) x)
+ {
+ multi_index_container y(x);
+ this->swap(y);
+ return *this;
+ }
+
+ multi_index_container<Value,IndexSpecifierList,Allocator>& operator=(
+ BOOST_RV_REF(multi_index_container) x)
{
- BOOST_MULTI_INDEX_CHECK_INVARIANT;
this->swap(x);
return *this;
}
- allocator_type get_allocator()const
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ multi_index_container<Value,IndexSpecifierList,Allocator>& operator=(
+ std::initializer_list<Value> list)
+ {
+ BOOST_MULTI_INDEX_CHECK_INVARIANT;
+ typedef const Value* init_iterator;
+
+ multi_index_container x(*this,detail::do_not_copy_elements_tag());
+ iterator hint=x.end();
+ for(init_iterator first=list.begin(),last=list.end();
+ first!=last;++first){
+ hint=x.make_iterator(x.insert_(*first,hint.get_node()).first);
+ ++hint;
+ }
+ x.swap_elements_(*this);
+ return*this;
+ }
+#endif
+
+ allocator_type get_allocator()const BOOST_NOEXCEPT
{
return allocator_type(bfm_allocator::member);
}
@@ -293,15 +360,14 @@ public:
};
template<int N>
- typename nth_index<N>::type& get(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+ typename nth_index<N>::type& get()BOOST_NOEXCEPT
{
BOOST_STATIC_ASSERT(N>=0&&N<mpl::size<index_type_list>::type::value);
return *this;
}
template<int N>
- const typename nth_index<N>::type& get(
- BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int,N))const
+ const typename nth_index<N>::type& get()const BOOST_NOEXCEPT
{
BOOST_STATIC_ASSERT(N>=0&&N<mpl::size<index_type_list>::type::value);
return *this;
@@ -327,14 +393,13 @@ public:
};
template<typename Tag>
- typename index<Tag>::type& get(BOOST_EXPLICIT_TEMPLATE_TYPE(Tag))
+ typename index<Tag>::type& get()BOOST_NOEXCEPT
{
return *this;
}
template<typename Tag>
- const typename index<Tag>::type& get(
- BOOST_EXPLICIT_TEMPLATE_TYPE(Tag))const
+ const typename index<Tag>::type& get()const BOOST_NOEXCEPT
{
return *this;
}
@@ -356,11 +421,9 @@ public:
};
template<int N,typename IteratorType>
- typename nth_index_iterator<N>::type project(
- IteratorType it
- BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+ typename nth_index_iterator<N>::type project(IteratorType it)
{
- typedef typename nth_index<N>::type index;
+ typedef typename nth_index<N>::type index_type;
#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
BOOST_STATIC_ASSERT(
@@ -371,15 +434,13 @@ public:
BOOST_MULTI_INDEX_CHECK_IS_OWNER(
it,static_cast<typename IteratorType::container_type&>(*this));
- return index::make_iterator(static_cast<node_type*>(it.get_node()));
+ return index_type::make_iterator(static_cast<node_type*>(it.get_node()));
}
template<int N,typename IteratorType>
- typename nth_index_const_iterator<N>::type project(
- IteratorType it
- BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))const
+ typename nth_index_const_iterator<N>::type project(IteratorType it)const
{
- typedef typename nth_index<N>::type index;
+ typedef typename nth_index<N>::type index_type;
#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
BOOST_STATIC_ASSERT((
@@ -390,7 +451,7 @@ public:
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
BOOST_MULTI_INDEX_CHECK_IS_OWNER(
it,static_cast<const typename IteratorType::container_type&>(*this));
- return index::make_iterator(static_cast<node_type*>(it.get_node()));
+ return index_type::make_iterator(static_cast<node_type*>(it.get_node()));
}
#endif
@@ -410,11 +471,9 @@ public:
};
template<typename Tag,typename IteratorType>
- typename index_iterator<Tag>::type project(
- IteratorType it
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+ typename index_iterator<Tag>::type project(IteratorType it)
{
- typedef typename index<Tag>::type index;
+ typedef typename index<Tag>::type index_type;
#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
BOOST_STATIC_ASSERT(
@@ -424,15 +483,13 @@ public:
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
BOOST_MULTI_INDEX_CHECK_IS_OWNER(
it,static_cast<typename IteratorType::container_type&>(*this));
- return index::make_iterator(static_cast<node_type*>(it.get_node()));
+ return index_type::make_iterator(static_cast<node_type*>(it.get_node()));
}
template<typename Tag,typename IteratorType>
- typename index_const_iterator<Tag>::type project(
- IteratorType it
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))const
+ typename index_const_iterator<Tag>::type project(IteratorType it)const
{
- typedef typename index<Tag>::type index;
+ typedef typename index<Tag>::type index_type;
#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
BOOST_STATIC_ASSERT((
@@ -443,13 +500,26 @@ public:
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
BOOST_MULTI_INDEX_CHECK_IS_OWNER(
it,static_cast<const typename IteratorType::container_type&>(*this));
- return index::make_iterator(static_cast<node_type*>(it.get_node()));
+ return index_type::make_iterator(static_cast<node_type*>(it.get_node()));
}
#endif
BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
typedef typename super::copy_map_type copy_map_type;
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ multi_index_container(
+ const multi_index_container<Value,IndexSpecifierList,Allocator>& x,
+ detail::do_not_copy_elements_tag):
+ bfm_allocator(x.bfm_allocator::member),
+ bfm_header(),
+ super(x,detail::do_not_copy_elements_tag()),
+ node_count(0)
+ {
+ BOOST_MULTI_INDEX_CHECK_INVARIANT;
+ }
+#endif
+
node_type* header()const
{
return &*bfm_header::member;
@@ -481,19 +551,53 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
return static_cast<std::size_t >(-1);
}
+ template<typename Variant>
+ std::pair<node_type*,bool> insert_(const Value& v,Variant variant)
+ {
+ node_type* x=0;
+ node_type* res=super::insert_(v,x,variant);
+ if(res==x){
+ ++node_count;
+ return std::pair<node_type*,bool>(res,true);
+ }
+ else{
+ return std::pair<node_type*,bool>(res,false);
+ }
+ }
+
std::pair<node_type*,bool> insert_(const Value& v)
{
+ return insert_(v,detail::lvalue_tag());
+ }
+
+ std::pair<node_type*,bool> insert_rv_(const Value& v)
+ {
+ return insert_(v,detail::rvalue_tag());
+ }
+
+ template<typename T>
+ std::pair<node_type*,bool> insert_ref_(T& t)
+ {
node_type* x=allocate_node();
BOOST_TRY{
- node_type* res=super::insert_(v,x);
- if(res==x){
- ++node_count;
- return std::pair<node_type*,bool>(res,true);
+ new(&x->value()) value_type(t);
+ BOOST_TRY{
+ node_type* res=super::insert_(x->value(),x,detail::emplaced_tag());
+ if(res==x){
+ ++node_count;
+ return std::pair<node_type*,bool>(res,true);
+ }
+ else{
+ boost::detail::allocator::destroy(&x->value());
+ deallocate_node(x);
+ return std::pair<node_type*,bool>(res,false);
+ }
}
- else{
- deallocate_node(x);
- return std::pair<node_type*,bool>(res,false);
+ BOOST_CATCH(...){
+ boost::detail::allocator::destroy(&x->value());
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
}
BOOST_CATCH(...){
deallocate_node(x);
@@ -502,19 +606,146 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
BOOST_CATCH_END
}
+ std::pair<node_type*,bool> insert_ref_(const value_type& x)
+ {
+ return insert_(x);
+ }
+
+ std::pair<node_type*,bool> insert_ref_(value_type& x)
+ {
+ return insert_(x);
+ }
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<node_type*,bool> emplace_(
+ BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ node_type* x=allocate_node();
+ BOOST_TRY{
+ detail::vartempl_placement_new(
+ &x->value(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ BOOST_TRY{
+ node_type* res=super::insert_(x->value(),x,detail::emplaced_tag());
+ if(res==x){
+ ++node_count;
+ return std::pair<node_type*,bool>(res,true);
+ }
+ else{
+ boost::detail::allocator::destroy(&x->value());
+ deallocate_node(x);
+ return std::pair<node_type*,bool>(res,false);
+ }
+ }
+ BOOST_CATCH(...){
+ boost::detail::allocator::destroy(&x->value());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+ BOOST_CATCH(...){
+ deallocate_node(x);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ template<typename Variant>
+ std::pair<node_type*,bool> insert_(
+ const Value& v,node_type* position,Variant variant)
+ {
+ node_type* x=0;
+ node_type* res=super::insert_(v,position,x,variant);
+ if(res==x){
+ ++node_count;
+ return std::pair<node_type*,bool>(res,true);
+ }
+ else{
+ return std::pair<node_type*,bool>(res,false);
+ }
+ }
+
std::pair<node_type*,bool> insert_(const Value& v,node_type* position)
{
+ return insert_(v,position,detail::lvalue_tag());
+ }
+
+ std::pair<node_type*,bool> insert_rv_(const Value& v,node_type* position)
+ {
+ return insert_(v,position,detail::rvalue_tag());
+ }
+
+ template<typename T>
+ std::pair<node_type*,bool> insert_ref_(
+ T& t,node_type* position)
+ {
node_type* x=allocate_node();
BOOST_TRY{
- node_type* res=super::insert_(v,position,x);
- if(res==x){
- ++node_count;
- return std::pair<node_type*,bool>(res,true);
+ new(&x->value()) value_type(t);
+ BOOST_TRY{
+ node_type* res=super::insert_(
+ x->value(),position,x,detail::emplaced_tag());
+ if(res==x){
+ ++node_count;
+ return std::pair<node_type*,bool>(res,true);
+ }
+ else{
+ boost::detail::allocator::destroy(&x->value());
+ deallocate_node(x);
+ return std::pair<node_type*,bool>(res,false);
+ }
}
- else{
- deallocate_node(x);
- return std::pair<node_type*,bool>(res,false);
+ BOOST_CATCH(...){
+ boost::detail::allocator::destroy(&x->value());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+ BOOST_CATCH(...){
+ deallocate_node(x);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ std::pair<node_type*,bool> insert_ref_(
+ const value_type& x,node_type* position)
+ {
+ return insert_(x,position);
+ }
+
+ std::pair<node_type*,bool> insert_ref_(
+ value_type& x,node_type* position)
+ {
+ return insert_(x,position);
+ }
+
+ template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+ std::pair<node_type*,bool> emplace_hint_(
+ node_type* position,
+ BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+ {
+ node_type* x=allocate_node();
+ BOOST_TRY{
+ detail::vartempl_placement_new(
+ &x->value(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+ BOOST_TRY{
+ node_type* res=super::insert_(
+ x->value(),position,x,detail::emplaced_tag());
+ if(res==x){
+ ++node_count;
+ return std::pair<node_type*,bool>(res,true);
+ }
+ else{
+ boost::detail::allocator::destroy(&x->value());
+ deallocate_node(x);
+ return std::pair<node_type*,bool>(res,false);
+ }
}
+ BOOST_CATCH(...){
+ boost::detail::allocator::destroy(&x->value());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
}
BOOST_CATCH(...){
deallocate_node(x);
@@ -558,9 +789,22 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
std::swap(node_count,x.node_count);
}
+ void swap_elements_(
+ multi_index_container<Value,IndexSpecifierList,Allocator>& x)
+ {
+ std::swap(bfm_header::member,x.bfm_header::member);
+ super::swap_elements_(x);
+ std::swap(node_count,x.node_count);
+ }
+
bool replace_(const Value& k,node_type* x)
{
- return super::replace_(k,x);
+ return super::replace_(k,x,detail::lvalue_tag());
+ }
+
+ bool replace_rv_(const Value& k,node_type* x)
+ {
+ return super::replace_(k,x,detail::rvalue_tag());
}
template<typename Modifier>
@@ -585,7 +829,7 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
}
template<typename Modifier,typename Rollback>
- bool modify_(Modifier& mod,Rollback& back,node_type* x)
+ bool modify_(Modifier& mod,Rollback& back_,node_type* x)
{
mod(const_cast<value_type&>(x->value()));
@@ -595,7 +839,7 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
}
BOOST_CATCH(...){
BOOST_TRY{
- back(const_cast<value_type&>(x->value()));
+ back_(const_cast<value_type&>(x->value()));
BOOST_RETHROW;
}
BOOST_CATCH(...){
@@ -608,7 +852,7 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
BOOST_TRY{
if(!b){
- back(const_cast<value_type&>(x->value()));
+ back_(const_cast<value_type&>(x->value()));
return false;
}
else return true;
@@ -633,17 +877,10 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
template<class Archive>
void save(Archive& ar,const unsigned int version)const
{
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
const serialization::collection_size_type s(size_());
const detail::serialization_version<value_type> value_version;
ar<<serialization::make_nvp("count",s);
ar<<serialization::make_nvp("value_version",value_version);
-#else
- const std::size_t s=size_();
- const unsigned int value_version=0;
- ar<<serialization::make_nvp("count",s);
-#endif
index_saver_type sm(bfm_allocator::member,s);
@@ -663,8 +900,6 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
BOOST_MULTI_INDEX_CHECK_INVARIANT;
clear_();
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
serialization::collection_size_type s;
detail::serialization_version<value_type> value_version;
if(version<1){
@@ -681,11 +916,6 @@ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
else{
ar>>serialization::make_nvp("value_version",value_version);
}
-#else
- std::size_t s;
- unsigned int value_version=0;
- ar>>serialization::make_nvp("count",s);
-#endif
index_loader_type lm(bfm_allocator::member,s);
@@ -728,6 +958,10 @@ private:
#endif
};
+#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500))
+#pragma warning(pop) /* C4522 */
+#endif
+
/* retrieval of indices by number */
template<typename MultiIndexContainer,int N>
@@ -745,8 +979,7 @@ template<int N,typename Value,typename IndexSpecifierList,typename Allocator>
typename nth_index<
multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type&
get(
- multi_index_container<Value,IndexSpecifierList,Allocator>& m
- BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+ multi_index_container<Value,IndexSpecifierList,Allocator>& m)BOOST_NOEXCEPT
{
typedef multi_index_container<
Value,IndexSpecifierList,Allocator> multi_index_type;
@@ -754,7 +987,7 @@ get(
multi_index_container<
Value,IndexSpecifierList,Allocator>,
N
- >::type index;
+ >::type index_type;
BOOST_STATIC_ASSERT(N>=0&&
N<
@@ -762,7 +995,7 @@ get(
BOOST_DEDUCED_TYPENAME multi_index_type::index_type_list
>::type::value);
- return detail::converter<multi_index_type,index>::index(m);
+ return detail::converter<multi_index_type,index_type>::index(m);
}
template<int N,typename Value,typename IndexSpecifierList,typename Allocator>
@@ -770,7 +1003,7 @@ const typename nth_index<
multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type&
get(
const multi_index_container<Value,IndexSpecifierList,Allocator>& m
- BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+)BOOST_NOEXCEPT
{
typedef multi_index_container<
Value,IndexSpecifierList,Allocator> multi_index_type;
@@ -778,7 +1011,7 @@ get(
multi_index_container<
Value,IndexSpecifierList,Allocator>,
N
- >::type index;
+ >::type index_type;
BOOST_STATIC_ASSERT(N>=0&&
N<
@@ -786,7 +1019,7 @@ get(
BOOST_DEDUCED_TYPENAME multi_index_type::index_type_list
>::type::value);
- return detail::converter<multi_index_type,index>::index(m);
+ return detail::converter<multi_index_type,index_type>::index(m);
}
/* retrieval of indices by tag */
@@ -814,8 +1047,7 @@ template<
typename ::boost::multi_index::index<
multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type&
get(
- multi_index_container<Value,IndexSpecifierList,Allocator>& m
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+ multi_index_container<Value,IndexSpecifierList,Allocator>& m)BOOST_NOEXCEPT
{
typedef multi_index_container<
Value,IndexSpecifierList,Allocator> multi_index_type;
@@ -823,9 +1055,9 @@ get(
multi_index_container<
Value,IndexSpecifierList,Allocator>,
Tag
- >::type index;
+ >::type index_type;
- return detail::converter<multi_index_type,index>::index(m);
+ return detail::converter<multi_index_type,index_type>::index(m);
}
template<
@@ -835,7 +1067,7 @@ const typename ::boost::multi_index::index<
multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type&
get(
const multi_index_container<Value,IndexSpecifierList,Allocator>& m
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+)BOOST_NOEXCEPT
{
typedef multi_index_container<
Value,IndexSpecifierList,Allocator> multi_index_type;
@@ -843,9 +1075,9 @@ get(
multi_index_container<
Value,IndexSpecifierList,Allocator>,
Tag
- >::type index;
+ >::type index_type;
- return detail::converter<multi_index_type,index>::index(m);
+ return detail::converter<multi_index_type,index_type>::index(m);
}
/* projection of iterators by number */
@@ -853,18 +1085,13 @@ get(
template<typename MultiIndexContainer,int N>
struct nth_index_iterator
{
- typedef typename detail::prevent_eti<
- nth_index<MultiIndexContainer,N>,
- typename nth_index<MultiIndexContainer,N>::type>::type::iterator type;
+ typedef typename nth_index<MultiIndexContainer,N>::type::iterator type;
};
template<typename MultiIndexContainer,int N>
struct nth_index_const_iterator
{
- typedef typename detail::prevent_eti<
- nth_index<MultiIndexContainer,N>,
- typename nth_index<MultiIndexContainer,N>::type
- >::type::const_iterator type;
+ typedef typename nth_index<MultiIndexContainer,N>::type::const_iterator type;
};
template<
@@ -874,15 +1101,13 @@ typename nth_index_iterator<
multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type
project(
multi_index_container<Value,IndexSpecifierList,Allocator>& m,
- IteratorType it
- BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+ IteratorType it)
{
typedef multi_index_container<
Value,IndexSpecifierList,Allocator> multi_index_type;
- typedef typename nth_index<multi_index_type,N>::type index;
+ typedef typename nth_index<multi_index_type,N>::type index_type;
-#if (!defined(BOOST_MSVC)||!(BOOST_MSVC<1310))&& /* MSVC++ 6.0/7.0 fails */\
- (!defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580)) /* as does Sun C++ 5.7 */
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* Sun C++ 5.7 fails */
BOOST_STATIC_ASSERT((
mpl::contains<
BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
@@ -898,7 +1123,7 @@ project(
BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
#endif
- return detail::converter<multi_index_type,index>::iterator(
+ return detail::converter<multi_index_type,index_type>::iterator(
m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
}
@@ -909,15 +1134,13 @@ typename nth_index_const_iterator<
multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type
project(
const multi_index_container<Value,IndexSpecifierList,Allocator>& m,
- IteratorType it
- BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+ IteratorType it)
{
typedef multi_index_container<
Value,IndexSpecifierList,Allocator> multi_index_type;
- typedef typename nth_index<multi_index_type,N>::type index;
+ typedef typename nth_index<multi_index_type,N>::type index_type;
-#if (!defined(BOOST_MSVC)||!(BOOST_MSVC<1310))&& /* MSVC++ 6.0/7.0 fails */\
- (!defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580)) /* as does Sun C++ 5.7 */
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* Sun C++ 5.7 fails */
BOOST_STATIC_ASSERT((
mpl::contains<
BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
@@ -936,7 +1159,7 @@ project(
BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
#endif
- return detail::converter<multi_index_type,index>::const_iterator(
+ return detail::converter<multi_index_type,index_type>::const_iterator(
m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
}
@@ -963,16 +1186,14 @@ typename index_iterator<
multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type
project(
multi_index_container<Value,IndexSpecifierList,Allocator>& m,
- IteratorType it
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+ IteratorType it)
{
typedef multi_index_container<
Value,IndexSpecifierList,Allocator> multi_index_type;
typedef typename ::boost::multi_index::index<
- multi_index_type,Tag>::type index;
+ multi_index_type,Tag>::type index_type;
-#if (!defined(BOOST_MSVC)||!(BOOST_MSVC<1310))&& /* MSVC++ 6.0/7.0 fails */\
- (!defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580)) /* as does Sun C++ 5.7 */
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* Sun C++ 5.7 fails */
BOOST_STATIC_ASSERT((
mpl::contains<
BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
@@ -988,7 +1209,7 @@ project(
BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
#endif
- return detail::converter<multi_index_type,index>::iterator(
+ return detail::converter<multi_index_type,index_type>::iterator(
m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
}
@@ -999,16 +1220,14 @@ typename index_const_iterator<
multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type
project(
const multi_index_container<Value,IndexSpecifierList,Allocator>& m,
- IteratorType it
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+ IteratorType it)
{
typedef multi_index_container<
Value,IndexSpecifierList,Allocator> multi_index_type;
typedef typename ::boost::multi_index::index<
- multi_index_type,Tag>::type index;
+ multi_index_type,Tag>::type index_type;
-#if (!defined(BOOST_MSVC)||!(BOOST_MSVC<1310))&& /* MSVC++ 6.0/7.0 fails */\
- (!defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580)) /* as does Sun C++ 5.7 */
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* Sun C++ 5.7 fails */
BOOST_STATIC_ASSERT((
mpl::contains<
BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
@@ -1027,7 +1246,7 @@ project(
BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
#endif
- return detail::converter<multi_index_type,index>::const_iterator(
+ return detail::converter<multi_index_type,index_type>::const_iterator(
m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
}
@@ -1111,8 +1330,7 @@ void swap(
} /* namespace multi_index */
-#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)&&\
- !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
/* class version = 1 : we now serialize the size through
* boost::serialization::collection_size_type.
* class version = 2 : proper use of {save|load}_construct_data.
@@ -1139,5 +1357,6 @@ using multi_index::project;
} /* namespace boost */
#undef BOOST_MULTI_INDEX_CHECK_INVARIANT
+#undef BOOST_MULTI_INDEX_CHECK_INVARIANT_OF
#endif
diff --git a/3party/boost/boost/multi_index_container_fwd.hpp b/3party/boost/boost/multi_index_container_fwd.hpp
index 99e8db36cf..b35acad407 100644
--- a/3party/boost/boost/multi_index_container_fwd.hpp
+++ b/3party/boost/boost/multi_index_container_fwd.hpp
@@ -1,4 +1,4 @@
-/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
* 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)
@@ -9,7 +9,7 @@
#ifndef BOOST_MULTI_INDEX_FWD_HPP
#define BOOST_MULTI_INDEX_FWD_HPP
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/multiprecision/concepts/mp_number_archetypes.hpp b/3party/boost/boost/multiprecision/concepts/mp_number_archetypes.hpp
index 2e474e9faa..e52044adbf 100644
--- a/3party/boost/boost/multiprecision/concepts/mp_number_archetypes.hpp
+++ b/3party/boost/boost/multiprecision/concepts/mp_number_archetypes.hpp
@@ -215,7 +215,7 @@ public:
static number_type (max)() BOOST_NOEXCEPT { return (base_type::max)(); }
static number_type lowest() BOOST_NOEXCEPT { return -(max)(); }
static number_type epsilon() BOOST_NOEXCEPT { return base_type::epsilon(); }
- static number_type round_error() BOOST_NOEXCEPT { return epsilon() / 2; }
+ static number_type round_error() BOOST_NOEXCEPT { return base_type::round_error(); }
static number_type infinity() BOOST_NOEXCEPT { return base_type::infinity(); }
static number_type quiet_NaN() BOOST_NOEXCEPT { return base_type::quiet_NaN(); }
static number_type signaling_NaN() BOOST_NOEXCEPT { return base_type::signaling_NaN(); }
diff --git a/3party/boost/boost/multiprecision/cpp_bin_float.hpp b/3party/boost/boost/multiprecision/cpp_bin_float.hpp
new file mode 100644
index 0000000000..170de2b4f2
--- /dev/null
+++ b/3party/boost/boost/multiprecision/cpp_bin_float.hpp
@@ -0,0 +1,1593 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock. 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_
+
+#ifndef BOOST_MATH_CPP_BIN_FLOAT_HPP
+#define BOOST_MATH_CPP_BIN_FLOAT_HPP
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/integer.hpp>
+#include <boost/math/special_functions/trunc.hpp>
+#include <boost/multiprecision/detail/float_string_cvt.hpp>
+
+namespace boost{ namespace multiprecision{ namespace backends{
+
+enum digit_base_type
+{
+ digit_base_2 = 2,
+ digit_base_10 = 10
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4522) // multiple assignment operators specified
+#endif
+
+namespace detail{
+
+template <class U>
+inline typename enable_if_c<is_unsigned<U>::value, bool>::type is_negative(U) { return false; }
+template <class S>
+inline typename disable_if_c<is_unsigned<S>::value, bool>::type is_negative(S s) { return s < 0; }
+
+}
+
+template <unsigned Digits, digit_base_type DigitBase = digit_base_10, class Allocator = void, class Exponent = int, Exponent MinExponent = 0, Exponent MaxExponent = 0>
+class cpp_bin_float
+{
+public:
+ static const unsigned bit_count = DigitBase == digit_base_2 ? Digits : (Digits * 1000uL) / 301uL + ((Digits * 1000uL) % 301 ? 2u : 1u);
+ typedef cpp_int_backend<is_void<Allocator>::value ? bit_count : 0, bit_count, is_void<Allocator>::value ? unsigned_magnitude : signed_magnitude, unchecked, Allocator> rep_type;
+ typedef cpp_int_backend<is_void<Allocator>::value ? 2 * bit_count : 0, 2 * bit_count, is_void<Allocator>::value ? unsigned_magnitude : signed_magnitude, unchecked, Allocator> double_rep_type;
+
+ typedef typename rep_type::signed_types signed_types;
+ typedef typename rep_type::unsigned_types unsigned_types;
+ typedef boost::mpl::list<double, long double> float_types;
+ typedef Exponent exponent_type;
+
+ static const exponent_type max_exponent_limit = boost::integer_traits<exponent_type>::const_max - 2 * static_cast<exponent_type>(bit_count);
+ static const exponent_type min_exponent_limit = boost::integer_traits<exponent_type>::const_min + 2 * static_cast<exponent_type>(bit_count);
+
+ BOOST_STATIC_ASSERT_MSG(MinExponent >= min_exponent_limit, "Template parameter MinExponent is too negative for our internal logic to function correctly, sorry!");
+ BOOST_STATIC_ASSERT_MSG(MaxExponent <= max_exponent_limit, "Template parameter MaxExponent is too large for our internal logic to function correctly, sorry!");
+ BOOST_STATIC_ASSERT_MSG(MinExponent <= 0, "Template parameter MinExponent can not be positive!");
+ BOOST_STATIC_ASSERT_MSG(MaxExponent >= 0, "Template parameter MaxExponent can not be negative!");
+
+ static const exponent_type max_exponent = MaxExponent == 0 ? max_exponent_limit : MaxExponent;
+ static const exponent_type min_exponent = MinExponent == 0 ? min_exponent_limit : MinExponent;
+
+ static const exponent_type exponent_zero = max_exponent + 1;
+ static const exponent_type exponent_infinity = max_exponent + 2;
+ static const exponent_type exponent_nan = max_exponent + 3;
+
+private:
+
+ rep_type m_data;
+ exponent_type m_exponent;
+ bool m_sign;
+public:
+ cpp_bin_float() : m_data(), m_exponent(exponent_nan), m_sign(false) {}
+
+ cpp_bin_float(const cpp_bin_float &o)
+ : m_data(o.m_data), m_exponent(o.m_exponent), m_sign(o.m_sign) {}
+
+ template <unsigned D, digit_base_type B, class A, class E, E MinE, E MaxE>
+ cpp_bin_float(const cpp_bin_float<D, B, A, E, MinE, MaxE> &o, typename boost::enable_if_c<(bit_count >= cpp_bin_float<D, B, A, E, MinE, MaxE>::bit_count)>::type const* = 0)
+ : m_exponent(o.exponent()), m_sign(o.sign())
+ {
+ typename cpp_bin_float<D, B, A, E, MinE, MaxE>::rep_type b(o.bits());
+ this->sign() = o.sign();
+ this->exponent() = o.exponent() + (int)bit_count - (int)cpp_bin_float<D, B, A, E, MinE, MaxE>::bit_count;
+ copy_and_round(*this, b);
+ }
+
+ template <unsigned D, digit_base_type B, class A, class E, E MinE, E MaxE>
+ explicit cpp_bin_float(const cpp_bin_float<D, B, A, E, MinE, MaxE> &o, typename boost::disable_if_c<(bit_count >= cpp_bin_float<D, B, A, E, MinE, MaxE>::bit_count)>::type const* = 0)
+ : m_exponent(o.exponent()), m_sign(o.sign())
+ {
+ typename cpp_bin_float<D, B, A, E, MinE, MaxE>::rep_type b(o.bits());
+ this->sign() = o.sign();
+ this->exponent() = o.exponent() - (int)(cpp_bin_float<D, B, A, E, MinE, MaxE>::bit_count - bit_count);
+ copy_and_round(*this, b);
+ }
+
+ template <class Float>
+ cpp_bin_float(const Float& f,
+ typename boost::enable_if_c<
+ (number_category<Float>::value == number_kind_floating_point)
+ && (std::numeric_limits<Float>::digits <= (int)bit_count)
+ && (std::numeric_limits<Float>::radix == 2)
+ >::type const* = 0)
+ : m_data(), m_exponent(0), m_sign(false)
+ {
+ this->assign_float(f);
+ }
+
+ cpp_bin_float& operator=(const cpp_bin_float &o)
+ {
+ m_data = o.m_data;
+ m_exponent = o.m_exponent;
+ m_sign = o.m_sign;
+ return *this;
+ }
+
+ template <unsigned D, digit_base_type B, class A, class E, E MinE, E MaxE>
+ cpp_bin_float& operator=(const cpp_bin_float<D, B, A, E, MinE, MaxE> &o)
+ {
+ typename cpp_bin_float<D, B, A, E, MinE, MaxE>::rep_type b(o.bits());
+ this->exponent() = o.exponent() + (int)bit_count - (int)cpp_bin_float<D, B, A, E, MinE, MaxE>::bit_count;
+ this->sign() = o.sign();
+ copy_and_round(*this, b);
+ return *this;
+ }
+
+ template <class Float>
+ typename boost::enable_if_c<
+ (number_category<Float>::value == number_kind_floating_point)
+ && (std::numeric_limits<Float>::digits <= (int)bit_count)
+ && (std::numeric_limits<Float>::radix == 2), cpp_bin_float&>::type operator=(const Float& f)
+ {
+ return assign_float(f);
+ }
+
+ template <class Float>
+ typename boost::enable_if_c<is_floating_point<Float>::value, cpp_bin_float&>::type assign_float(Float f)
+ {
+ BOOST_MATH_STD_USING
+ using default_ops::eval_add;
+
+ switch((boost::math::fpclassify)(f))
+ {
+ case FP_ZERO:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_zero;
+ return *this;
+ case FP_NAN:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_nan;
+ return *this;
+ case FP_INFINITE:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_infinity;
+ return *this;
+ }
+ if(f < 0)
+ {
+ *this = -f;
+ this->negate();
+ return *this;
+ }
+
+ typedef typename mpl::front<unsigned_types>::type ui_type;
+ m_data = static_cast<ui_type>(0u);
+ m_sign = false;
+ m_exponent = 0;
+
+ static const int bits = sizeof(int) * CHAR_BIT - 1;
+ int e;
+ f = frexp(f, &e);
+ while(f)
+ {
+ f = ldexp(f, bits);
+ e -= bits;
+ int ipart = itrunc(f);
+ f -= ipart;
+ m_exponent += bits;
+ eval_add(*this, ipart);
+ }
+ m_exponent += static_cast<Exponent>(e);
+ return *this;
+ }
+
+ template <class Float>
+ typename boost::enable_if_c<
+ (number_category<Float>::value == number_kind_floating_point)
+ && !is_floating_point<Float>::value
+ /*&& (std::numeric_limits<number<Float> >::radix == 2)*/,
+ cpp_bin_float&>::type assign_float(Float f)
+ {
+ BOOST_MATH_STD_USING
+ using default_ops::eval_add;
+ using default_ops::eval_get_sign;
+ using default_ops::eval_convert_to;
+ using default_ops::eval_subtract;
+
+ typedef typename boost::multiprecision::detail::canonical<int, Float>::type f_int_type;
+ typedef typename boost::multiprecision::detail::canonical<int, cpp_bin_float>::type bf_int_type;
+
+ switch(eval_fpclassify(f))
+ {
+ case FP_ZERO:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_zero;
+ return *this;
+ case FP_NAN:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_nan;
+ return *this;
+ case FP_INFINITE:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_infinity;
+ return *this;
+ }
+ if(eval_get_sign(f) < 0)
+ {
+ f.negate();
+ *this = f;
+ this->negate();
+ return *this;
+ }
+
+ typedef typename mpl::front<unsigned_types>::type ui_type;
+ m_data = static_cast<ui_type>(0u);
+ m_sign = false;
+ m_exponent = 0;
+
+ static const int bits = sizeof(int) * CHAR_BIT - 1;
+ int e;
+ eval_frexp(f, f, &e);
+ while(eval_get_sign(f) != 0)
+ {
+ eval_ldexp(f, f, bits);
+ e -= bits;
+ int ipart;
+ eval_convert_to(&ipart, f);
+ eval_subtract(f, static_cast<f_int_type>(ipart));
+ m_exponent += bits;
+ eval_add(*this, static_cast<bf_int_type>(ipart));
+ }
+ m_exponent += e;
+ if(m_exponent > max_exponent)
+ m_exponent = exponent_infinity;
+ if(m_exponent < min_exponent)
+ {
+ m_data = limb_type(0u);
+ m_exponent = exponent_zero;
+ m_sign = false;
+ }
+ else if(eval_get_sign(m_data) == 0)
+ {
+ m_exponent = exponent_zero;
+ m_sign = false;
+ }
+ return *this;
+ }
+
+ template <class I>
+ typename boost::enable_if<is_integral<I>, cpp_bin_float&>::type operator=(const I& i)
+ {
+ using default_ops::eval_bit_test;
+ if(!i)
+ {
+ m_data = static_cast<limb_type>(0);
+ m_exponent = exponent_zero;
+ m_sign = false;
+ }
+ else
+ {
+ typedef typename make_unsigned<I>::type ui_type;
+ ui_type fi = static_cast<ui_type>(boost::multiprecision::detail::unsigned_abs(i));
+ typedef typename boost::multiprecision::detail::canonical<ui_type, rep_type>::type ar_type;
+ m_data = static_cast<ar_type>(fi);
+ unsigned shift = msb(fi);
+ if(shift >= bit_count)
+ {
+ m_exponent = static_cast<Exponent>(shift);
+ m_data = static_cast<ar_type>(fi >> (shift + 1 - bit_count));
+ }
+ else
+ {
+ m_exponent = static_cast<Exponent>(shift);
+ eval_left_shift(m_data, bit_count - shift - 1);
+ }
+ BOOST_ASSERT(eval_bit_test(m_data, bit_count-1));
+ m_sign = detail::is_negative(i);
+ }
+ return *this;
+ }
+
+ cpp_bin_float& operator=(const char *s);
+
+ void swap(cpp_bin_float &o) BOOST_NOEXCEPT
+ {
+ m_data.swap(o.m_data);
+ std::swap(m_exponent, o.m_exponent);
+ std::swap(m_sign, o.m_sign);
+ }
+
+ std::string str(std::streamsize dig, std::ios_base::fmtflags f) const;
+
+ void negate()
+ {
+ if((m_exponent != exponent_zero) && (m_exponent != exponent_nan))
+ m_sign = !m_sign;
+ }
+
+ int compare(const cpp_bin_float &o) const BOOST_NOEXCEPT
+ {
+ if(m_sign != o.m_sign)
+ return m_sign ? -1 : 1;
+ int result;
+ if(m_exponent == exponent_nan)
+ return -1;
+ else if(m_exponent != o.m_exponent)
+ {
+ if(m_exponent == exponent_zero)
+ result = -1;
+ else if(o.m_exponent == exponent_zero)
+ result = 1;
+ else
+ result = m_exponent > o.m_exponent ? 1 : -1;
+ }
+ else
+ result = m_data.compare(o.m_data);
+ if(m_sign)
+ result = -result;
+ return result;
+ }
+ template <class A>
+ int compare(const A& o) const BOOST_NOEXCEPT
+ {
+ cpp_bin_float b;
+ b = o;
+ return compare(b);
+ }
+
+ rep_type& bits() { return m_data; }
+ const rep_type& bits()const { return m_data; }
+ exponent_type& exponent() { return m_exponent; }
+ const exponent_type& exponent()const { return m_exponent; }
+ bool& sign() { return m_sign; }
+ const bool& sign()const { return m_sign; }
+ void check_invariants()
+ {
+ using default_ops::eval_bit_test;
+ using default_ops::eval_is_zero;
+ if((m_exponent <= max_exponent) && (m_exponent >= min_exponent))
+ {
+ BOOST_ASSERT(eval_bit_test(m_data, bit_count - 1));
+ }
+ else
+ {
+ BOOST_ASSERT(m_exponent > max_exponent);
+ BOOST_ASSERT(m_exponent <= exponent_nan);
+ BOOST_ASSERT(eval_is_zero(m_data));
+ }
+ }
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /*version*/)
+ {
+ ar & m_data;
+ ar & m_exponent;
+ ar & m_sign;
+ }
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class Int>
+inline void copy_and_round(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, Int &arg)
+{
+ // Precondition: exponent of res must have been set before this function is called
+ // as we may need to adjust it based on how many cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in arg are set.
+ using default_ops::eval_msb;
+ using default_ops::eval_lsb;
+ using default_ops::eval_left_shift;
+ using default_ops::eval_bit_test;
+ using default_ops::eval_right_shift;
+ using default_ops::eval_increment;
+ using default_ops::eval_get_sign;
+
+ // cancellation may have resulted in arg being all zeros:
+ if(eval_get_sign(arg) == 0)
+ {
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ res.sign() = false;
+ res.bits() = static_cast<limb_type>(0u);
+ return;
+ }
+ int msb = eval_msb(arg);
+ if(static_cast<int>(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count) > msb + 1)
+ {
+ // Must have had cancellation in subtraction, shift left and copy:
+ res.bits() = arg;
+ eval_left_shift(res.bits(), cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - msb - 1);
+ res.exponent() -= static_cast<Exponent>(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - msb - 1);
+ }
+ else if(static_cast<int>(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count) < msb + 1)
+ {
+ // We have more cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count than we need, so round as required,
+ // first get the rounding bit:
+ bool roundup = eval_bit_test(arg, msb - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count);
+ // Then check for a tie:
+ if(roundup && (msb - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count == eval_lsb(arg)))
+ {
+ // Ties round towards even:
+ if(!eval_bit_test(arg, msb - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1))
+ roundup = false;
+ }
+ // Shift off the cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count we don't need:
+ eval_right_shift(arg, msb - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1);
+ res.exponent() += static_cast<Exponent>(msb - (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1);
+ if(roundup)
+ {
+ eval_increment(arg);
+ if(eval_bit_test(arg, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count))
+ {
+ // This happens very very rairly:
+ eval_right_shift(arg, 1u);
+ ++res.exponent();
+ }
+ }
+ res.bits() = arg;
+ }
+ else
+ {
+ res.bits() = arg;
+ }
+ BOOST_ASSERT((eval_msb(res.bits()) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1));
+
+ if(res.exponent() > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ // Overflow:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity;
+ res.bits() = static_cast<limb_type>(0u);
+ }
+ else if(res.exponent() < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent)
+ {
+ // Underflow:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ res.bits() = static_cast<limb_type>(0u);
+ res.sign() = false;
+ }
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void do_eval_add(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ using default_ops::eval_add;
+ using default_ops::eval_bit_test;
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type dt;
+
+ // Special cases first:
+ switch(a.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = b;
+ if(res.sign())
+ res.negate();
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ if(b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan)
+ res = b;
+ else
+ res = a;
+ return; // ault is still infinite.
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = a;
+ return; // ault is still a NaN.
+ }
+ switch(b.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = b;
+ if(res.sign())
+ res.negate();
+ return; // ault is infinite.
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = b;
+ return; // ault is a NaN.
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type e_diff = a.exponent() - b.exponent();
+ bool s = a.sign();
+ if(e_diff >= 0)
+ {
+ dt = a.bits();
+ if(e_diff < (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ eval_left_shift(dt, e_diff);
+ res.exponent() = a.exponent() - e_diff;
+ eval_add(dt, b.bits());
+ }
+ else
+ res.exponent() = a.exponent();
+ }
+ else
+ {
+ dt= b.bits();
+ if(-e_diff < (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ eval_left_shift(dt, -e_diff);
+ res.exponent() = b.exponent() + e_diff;
+ eval_add(dt, a.bits());
+ }
+ else
+ res.exponent() = b.exponent();
+ }
+
+ copy_and_round(res, dt);
+ res.check_invariants();
+ if(res.sign() != s)
+ res.negate();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void do_eval_subtract(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ using default_ops::eval_subtract;
+ using default_ops::eval_bit_test;
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type dt;
+
+ // Special cases first:
+ switch(a.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ if(b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan)
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ else
+ {
+ res = b;
+ if(!res.sign())
+ res.negate();
+ }
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ if((b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan) || (b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity))
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ else
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = a;
+ return; // result is still a NaN.
+ }
+ switch(b.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan;
+ res.sign() = false;
+ res.bits() = static_cast<limb_type>(0u);
+ return; // result is a NaN.
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = b;
+ return; // result is still a NaN.
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type e_diff = a.exponent() - b.exponent();
+ bool s = a.sign();
+ if((e_diff > 0) || ((e_diff == 0) && a.bits().compare(b.bits()) >= 0))
+ {
+ dt = a.bits();
+ if(e_diff < (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ eval_left_shift(dt, e_diff);
+ res.exponent() = a.exponent() - e_diff;
+ eval_subtract(dt, b.bits());
+ }
+ else
+ res.exponent() = a.exponent();
+ }
+ else
+ {
+ dt = b.bits();
+ if(-e_diff < (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ eval_left_shift(dt, -e_diff);
+ res.exponent() = b.exponent() + e_diff;
+ eval_subtract(dt, a.bits());
+ }
+ else
+ res.exponent() = b.exponent();
+ s = !s;
+ }
+
+ copy_and_round(res, dt);
+ if(res.sign() != s)
+ res.negate();
+ res.check_invariants();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_add(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ if(a.sign() == b.sign())
+ do_eval_add(res, a, b);
+ else
+ do_eval_subtract(res, a, b);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_add(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a)
+{
+ return eval_add(res, res, a);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_subtract(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ if(a.sign() != b.sign())
+ do_eval_add(res, a, b);
+ else
+ do_eval_subtract(res, a, b);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_subtract(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a)
+{
+ return eval_subtract(res, res, a);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ using default_ops::eval_bit_test;
+ using default_ops::eval_multiply;
+
+ // Special cases first:
+ switch(a.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ if(b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan)
+ res = b;
+ else
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ switch(b.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ break;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = b;
+ break;
+ default:
+ res = a;
+ break;
+ }
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = a;
+ return;
+ }
+ if(b.exponent() > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ res = b;
+ return;
+ }
+ if((a.exponent() > 0) && (b.exponent() > 0))
+ {
+ if(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent + 2 - a.exponent() < b.exponent())
+ {
+ // We will certainly overflow:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity;
+ res.sign() = a.sign() != b.sign();
+ res.bits() = static_cast<limb_type>(0u);
+ return;
+ }
+ }
+ if((a.exponent() < 0) && (b.exponent() < 0))
+ {
+ if(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent - 2 - a.exponent() > b.exponent())
+ {
+ // We will certainly underflow:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ res.sign() = false;
+ res.bits() = static_cast<limb_type>(0u);
+ return;
+ }
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type dt;
+ eval_multiply(dt, a.bits(), b.bits());
+ res.exponent() = a.exponent() + b.exponent() - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1;
+ copy_and_round(res, dt);
+ res.check_invariants();
+ res.sign() = a.sign() != b.sign();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a)
+{
+ eval_multiply(res, res, a);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class U>
+inline typename enable_if_c<is_unsigned<U>::value>::type eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const U &b)
+{
+ using default_ops::eval_bit_test;
+ using default_ops::eval_multiply;
+
+ // Special cases first:
+ switch(a.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ if(b == 0)
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ else
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = a;
+ return;
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type dt;
+ typedef typename boost::multiprecision::detail::canonical<U, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type>::type canon_ui_type;
+ eval_multiply(dt, a.bits(), static_cast<canon_ui_type>(b));
+ res.exponent() = a.exponent();
+ copy_and_round(res, dt);
+ res.check_invariants();
+ res.sign() = a.sign();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class U>
+inline typename enable_if_c<is_unsigned<U>::value>::type eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const U &b)
+{
+ eval_multiply(res, res, b);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class S>
+inline typename enable_if_c<is_signed<S>::value>::type eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const S &b)
+{
+ typedef typename make_unsigned<S>::type ui_type;
+ eval_multiply(res, a, static_cast<ui_type>(boost::multiprecision::detail::unsigned_abs(b)));
+ if(b < 0)
+ res.negate();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class S>
+inline typename enable_if_c<is_signed<S>::value>::type eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const S &b)
+{
+ eval_multiply(res, res, b);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &u, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &v)
+{
+ using default_ops::eval_subtract;
+ using default_ops::eval_qr;
+ using default_ops::eval_bit_test;
+ using default_ops::eval_get_sign;
+ using default_ops::eval_increment;
+
+ //
+ // Special cases first:
+ //
+ switch(u.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ switch(v.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ res = u;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ switch(v.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ res = u;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ switch(v.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ {
+ bool s = u.sign() != v.sign();
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ res.sign() = s;
+ return;
+ }
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ res.bits() = limb_type(0);
+ res.sign() = false;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+
+ // We can scale u and v so that both are integers, then perform integer
+ // division to obtain quotient q and remainder r, such that:
+ //
+ // q * v + r = u
+ //
+ // and hense:
+ //
+ // q + r/v = u/v
+ //
+ // From this, assuming q has "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count, we only need to determine whether
+ // r/v is less than, equal to, or greater than 0.5 to determine rounding -
+ // this we can do with a shift and comparison.
+ //
+ // We can set the exponent and sign of the result up front:
+ //
+ res.exponent() = u.exponent() - v.exponent() - 1;
+ res.sign() = u.sign() != v.sign();
+ //
+ // Now get the quotient and remainder:
+ //
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type t(u.bits()), t2(v.bits()), q, r;
+ eval_left_shift(t, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count);
+ eval_qr(t, t2, q, r);
+ //
+ // We now have either "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" or "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count+1" significant cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in q.
+ //
+ static const unsigned limb_bits = sizeof(limb_type) * CHAR_BIT;
+ if(eval_bit_test(q, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count))
+ {
+ //
+ // OK we have cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count+1 cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count, so we already have rounding info,
+ // we just need to changes things if the last bit is 1 and the
+ // remainder is non-zero (ie we do not have a tie).
+ //
+ BOOST_ASSERT((eval_msb(q) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count));
+ if((q.limbs()[0] & 1u) && eval_get_sign(r))
+ {
+ eval_increment(q);
+ }
+ }
+ else
+ {
+ //
+ // We have exactly "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in q.
+ // Get rounding info, which we can get by comparing 2r with v.
+ // We want to call copy_and_round to handle rounding and general cleanup,
+ // so we'll left shift q and add some fake digits on the end to represent
+ // how we'll be rounding.
+ //
+ BOOST_ASSERT((eval_msb(q) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1));
+ static const unsigned lshift = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count < limb_bits ? 2 : limb_bits;
+ eval_left_shift(q, lshift);
+ res.exponent() -= lshift;
+ eval_left_shift(r, 1u);
+ int c = r.compare(v.bits());
+ if(c == 0)
+ q.limbs()[0] |= static_cast<limb_type>(1u) << (lshift - 1);
+ else if(c > 0)
+ q.limbs()[0] |= (static_cast<limb_type>(1u) << (lshift - 1)) + static_cast<limb_type>(1u);
+ }
+ copy_and_round(res, q);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ eval_divide(res, res, arg);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class U>
+inline typename enable_if_c<is_unsigned<U>::value>::type eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &u, const U &v)
+{
+ using default_ops::eval_subtract;
+ using default_ops::eval_qr;
+ using default_ops::eval_bit_test;
+ using default_ops::eval_get_sign;
+ using default_ops::eval_increment;
+
+ //
+ // Special cases first:
+ //
+ switch(u.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ if(v == 0)
+ {
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ res = u;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = u;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ if(v == 0)
+ {
+ bool s = u.sign();
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ res.sign() = s;
+ return;
+ }
+
+ // We can scale u and v so that both are integers, then perform integer
+ // division to obtain quotient q and remainder r, such that:
+ //
+ // q * v + r = u
+ //
+ // and hense:
+ //
+ // q + r/v = u/v
+ //
+ // From this, assuming q has "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count, we only need to determine whether
+ // r/v is less than, equal to, or greater than 0.5 to determine rounding -
+ // this we can do with a shift and comparison.
+ //
+ // We can set the exponent and sign of the result up front:
+ //
+ int gb = msb(v);
+ res.exponent() = u.exponent() - static_cast<Exponent>(gb) - static_cast<Exponent>(1);
+ res.sign() = u.sign();
+ //
+ // Now get the quotient and remainder:
+ //
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type t(u.bits()), q, r;
+ eval_left_shift(t, gb + 1);
+ eval_qr(t, number<typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type>::canonical_value(v), q, r);
+ //
+ // We now have either "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" or "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count+1" significant cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in q.
+ //
+ static const unsigned limb_bits = sizeof(limb_type) * CHAR_BIT;
+ if(eval_bit_test(q, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count))
+ {
+ //
+ // OK we have cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count+1 cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count, so we already have rounding info,
+ // we just need to changes things if the last bit is 1 and the
+ // remainder is non-zero (ie we do not have a tie).
+ //
+ BOOST_ASSERT((eval_msb(q) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count));
+ if((q.limbs()[0] & 1u) && eval_get_sign(r))
+ {
+ eval_increment(q);
+ }
+ }
+ else
+ {
+ //
+ // We have exactly "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in q.
+ // Get rounding info, which we can get by comparing 2r with v.
+ // We want to call copy_and_round to handle rounding and general cleanup,
+ // so we'll left shift q and add some fake cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count on the end to represent
+ // how we'll be rounding.
+ //
+ BOOST_ASSERT((eval_msb(q) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1));
+ static const unsigned lshift = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count < limb_bits ? 2 : limb_bits;
+ eval_left_shift(q, lshift);
+ res.exponent() -= lshift;
+ eval_left_shift(r, 1u);
+ int c = r.compare(number<typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type>::canonical_value(v));
+ if(c == 0)
+ q.limbs()[0] |= static_cast<limb_type>(1u) << (lshift - 1);
+ else if(c > 0)
+ q.limbs()[0] |= (static_cast<limb_type>(1u) << (lshift - 1)) + static_cast<limb_type>(1u);
+ }
+ copy_and_round(res, q);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class U>
+inline typename enable_if_c<is_unsigned<U>::value>::type eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const U &v)
+{
+ eval_divide(res, res, v);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class S>
+inline typename enable_if_c<is_signed<S>::value>::type eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &u, const S &v)
+{
+ typedef typename make_unsigned<S>::type ui_type;
+ eval_divide(res, u, static_cast<ui_type>(boost::multiprecision::detail::unsigned_abs(v)));
+ if(v < 0)
+ res.negate();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class S>
+inline typename enable_if_c<is_signed<S>::value>::type eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const S &v)
+{
+ eval_divide(res, res, v);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline int eval_get_sign(const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ return arg.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero ? 0 : arg.sign() ? -1 : 1;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline bool eval_is_zero(const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ return arg.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline bool eval_eq(const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ return (a.exponent() == b.exponent())
+ && (a.sign() == b.sign())
+ && (a.bits().compare(b.bits()) == 0)
+ && (a.exponent() != cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_convert_to(long long *res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ *res = 0;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ BOOST_THROW_EXCEPTION(std::runtime_error("Could not convert NaN to integer."));
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ *res = (std::numeric_limits<long long>::max)();
+ if(arg.sign())
+ *res = -*res;
+ return;
+ }
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::rep_type man(arg.bits());
+ typename mpl::if_c<sizeof(typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type) < sizeof(int), int, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type>::type shift
+ = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 - arg.exponent();
+ if(shift > (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1)
+ {
+ *res = 0;
+ return;
+ }
+ if(arg.sign() && (arg.compare((std::numeric_limits<long long>::min)()) <= 0))
+ {
+ *res = (std::numeric_limits<long long>::min)();
+ return;
+ }
+ else if(!arg.sign() && (arg.compare((std::numeric_limits<long long>::max)()) >= 0))
+ {
+ *res = (std::numeric_limits<long long>::max)();
+ return;
+ }
+ eval_right_shift(man, shift);
+ eval_convert_to(res, man);
+ if(arg.sign())
+ {
+ *res = -*res;
+ }
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_convert_to(unsigned long long *res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ *res = 0;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ BOOST_THROW_EXCEPTION(std::runtime_error("Could not convert NaN to integer."));
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ *res = (std::numeric_limits<unsigned long long>::max)();
+ return;
+ }
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::rep_type man(arg.bits());
+ typename mpl::if_c<sizeof(typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type) < sizeof(int), int, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type>::type shift
+ = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 - arg.exponent();
+ if(shift > (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1)
+ {
+ *res = 0;
+ return;
+ }
+ else if(shift < 0)
+ {
+ // TODO: what if we have fewer cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count than a long long?
+ *res = (std::numeric_limits<long long>::max)();
+ return;
+ }
+ eval_right_shift(man, shift);
+ eval_convert_to(res, man);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_convert_to(long double *res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ *res = 0;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ *res = std::numeric_limits<long double>::quiet_NaN();
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ *res = (std::numeric_limits<long double>::infinity)();
+ if(arg.sign())
+ *res = -*res;
+ return;
+ }
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type e = arg.exponent();
+ e -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1;
+ *res = std::ldexp(static_cast<long double>(*arg.bits().limbs()), e);
+ for(unsigned i = 1; i < arg.bits().size(); ++i)
+ {
+ e += sizeof(*arg.bits().limbs()) * CHAR_BIT;
+ *res += std::ldexp(static_cast<long double>(arg.bits().limbs()[i]), e);
+ }
+ if(arg.sign())
+ *res = -*res;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_frexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, Exponent *e)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ *e = 0;
+ res = arg;
+ return;
+ }
+ res = arg;
+ *e = arg.exponent() + 1;
+ res.exponent() = -1;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class I>
+inline void eval_frexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, I *pe)
+{
+ Exponent e;
+ eval_frexp(res, arg, &e);
+ if((e > (std::numeric_limits<I>::max)()) || (e < (std::numeric_limits<I>::min)()))
+ {
+ BOOST_THROW_EXCEPTION(std::runtime_error("Exponent was outside of the range of the argument type to frexp."));
+ }
+ *pe = static_cast<I>(e);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_ldexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, Exponent e)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = arg;
+ return;
+ }
+ if((e > 0) && (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent - e < arg.exponent()))
+ {
+ // Overflow:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ res.sign() = arg.sign();
+ }
+ else if((e < 0) && (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent - e > arg.exponent()))
+ {
+ // Underflow:
+ res = limb_type(0);
+ }
+ else
+ {
+ res = arg;
+ res.exponent() += e;
+ }
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class I>
+inline typename enable_if_c<is_unsigned<I>::value>::type eval_ldexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, I e)
+{
+ typedef typename make_signed<I>::type si_type;
+ if(e > static_cast<I>((std::numeric_limits<si_type>::max)()))
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ else
+ eval_ldexp(res, arg, static_cast<si_type>(e));
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class I>
+inline typename enable_if_c<is_signed<I>::value>::type eval_ldexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, I e)
+{
+ if((e > (std::numeric_limits<Exponent>::max)()) || (e < (std::numeric_limits<Exponent>::min)()))
+ {
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ if(e < 0)
+ res.negate();
+ }
+ else
+ eval_ldexp(res, arg, static_cast<Exponent>(e));
+}
+
+/*
+* Sign manipulation
+*/
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_abs(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ res = arg;
+ res.sign() = false;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_fabs(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ res = arg;
+ res.sign() = false;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline int eval_fpclassify(const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ return FP_ZERO;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ return FP_INFINITE;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ return FP_NAN;
+ }
+ return FP_NORMAL;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_sqrt(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ using default_ops::eval_integer_sqrt;
+ using default_ops::eval_bit_test;
+ using default_ops::eval_increment;
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = arg;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ if(arg.sign())
+ {
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type t(arg.bits()), r, s;
+ eval_left_shift(t, arg.exponent() & 1 ? cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count : cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1);
+ eval_integer_sqrt(s, r, t);
+
+ if(!eval_bit_test(s, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count))
+ {
+ // We have exactly the right number of cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in the result, round as required:
+ if(s.compare(r) < 0)
+ {
+ eval_increment(s);
+ }
+ }
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type ae = arg.exponent();
+ res.exponent() = ae / 2;
+ if((ae & 1) && (ae < 0))
+ --res.exponent();
+ copy_and_round(res, s);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_floor(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ using default_ops::eval_increment;
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = arg;
+ return;
+ }
+ typename mpl::if_c<sizeof(typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type) < sizeof(int), int, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type>::type shift =
+ (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - arg.exponent() - 1;
+ if((arg.exponent() > (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent) || (shift <= 0))
+ {
+ // Either arg is already an integer, or a special value:
+ res = arg;
+ return;
+ }
+ if(shift >= (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ res = static_cast<signed_limb_type>(arg.sign() ? -1 : 0);
+ return;
+ }
+ bool fractional = (int)eval_lsb(arg.bits()) < shift;
+ res = arg;
+ eval_right_shift(res.bits(), shift);
+ if(fractional && res.sign())
+ {
+ eval_increment(res.bits());
+ if(eval_msb(res.bits()) != cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 - shift)
+ {
+ // Must have extended result by one bit in the increment:
+ --shift;
+ ++res.exponent();
+ }
+ }
+ eval_left_shift(res.bits(), shift);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_ceil(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ using default_ops::eval_increment;
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = arg;
+ return;
+ }
+ typename mpl::if_c<sizeof(typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type) < sizeof(int), int, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type>::type shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - arg.exponent() - 1;
+ if((arg.exponent() > (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent) || (shift <= 0))
+ {
+ // Either arg is already an integer, or a special value:
+ res = arg;
+ return;
+ }
+ if(shift >= (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ res = static_cast<signed_limb_type>(arg.sign() ? 0 : 1);
+ return;
+ }
+ bool fractional = (int)eval_lsb(arg.bits()) < shift;
+ res = arg;
+ eval_right_shift(res.bits(), shift);
+ if(fractional && !res.sign())
+ {
+ eval_increment(res.bits());
+ if(eval_msb(res.bits()) != cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 - shift)
+ {
+ // Must have extended result by one bit in the increment:
+ --shift;
+ ++res.exponent();
+ }
+ }
+ eval_left_shift(res.bits(), shift);
+}
+
+} // namespace backends
+
+#ifdef BOOST_NO_SFINAE_EXPR
+
+namespace detail{
+
+template<unsigned D1, backends::digit_base_type B1, class A1, class E1, E1 M1, E1 M2, unsigned D2, backends::digit_base_type B2, class A2, class E2, E2 M3, E2 M4>
+struct is_explicitly_convertible<backends::cpp_bin_float<D1, B1, A1, E1, M1, M2>, backends::cpp_bin_float<D2, B2, A2, E2, M3, M4> > : public mpl::true_ {};
+
+}
+#endif
+
+
+using backends::cpp_bin_float;
+using backends::digit_base_2;
+using backends::digit_base_10;
+
+template<unsigned Digits, backends::digit_base_type DigitBase, class Exponent, Exponent MinE, Exponent MaxE, class Allocator>
+struct number_category<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > : public boost::mpl::int_<boost::multiprecision::number_kind_floating_point>{};
+
+template<unsigned Digits, backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+struct expression_template_default<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> >
+{
+ static const expression_template_option value = is_void<Allocator>::value ? et_off : et_on;
+};
+
+typedef number<backends::cpp_bin_float<50> > cpp_bin_float_50;
+typedef number<backends::cpp_bin_float<100> > cpp_bin_float_100;
+
+typedef number<backends::cpp_bin_float<24, backends::digit_base_2, void, boost::int16_t, -126, 127>, et_off> cpp_bin_float_single;
+typedef number<backends::cpp_bin_float<53, backends::digit_base_2, void, boost::int16_t, -1022, 1023>, et_off> cpp_bin_float_double;
+typedef number<backends::cpp_bin_float<64, backends::digit_base_2, void, boost::int16_t, -16382, 16383>, et_off> cpp_bin_float_double_extended;
+typedef number<backends::cpp_bin_float<113, backends::digit_base_2, void, boost::int16_t, -16382, 16383>, et_off> cpp_bin_float_quad;
+
+}} // namespaces
+
+#include <boost/multiprecision/cpp_bin_float/io.hpp>
+#include <boost/multiprecision/cpp_bin_float/transcendental.hpp>
+
+namespace std{
+
+//
+// numeric_limits [partial] specializations for the types declared in this header:
+//
+template<unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+class numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> number_type;
+public:
+ BOOST_STATIC_CONSTEXPR bool is_specialized = true;
+ static number_type (min)()
+ {
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ value.second = 1u;
+ value.second.backend().exponent() = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ }
+ return value.second;
+ }
+ static number_type (max)()
+ {
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ eval_complement(value.second.backend().bits(), value.second.backend().bits());
+ value.second.backend().exponent() = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ }
+ return value.second;
+ }
+ BOOST_STATIC_CONSTEXPR number_type lowest()
+ {
+ return -(max)();
+ }
+ BOOST_STATIC_CONSTEXPR int digits = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count;
+ BOOST_STATIC_CONSTEXPR int digits10 = digits * 301 / 1000;
+ // Is this really correct???
+ BOOST_STATIC_CONSTEXPR int max_digits10 = digits10 + 2;
+ BOOST_STATIC_CONSTEXPR bool is_signed = true;
+ BOOST_STATIC_CONSTEXPR bool is_integer = false;
+ BOOST_STATIC_CONSTEXPR bool is_exact = false;
+ BOOST_STATIC_CONSTEXPR int radix = 2;
+ static number_type epsilon()
+ {
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ value.second = 1;
+ value.second = ldexp(value.second, 1 - (int)digits);
+ }
+ return value.second;
+ }
+ // What value should this be????
+ static number_type round_error()
+ {
+ // returns 0.5
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ value.second = 1;
+ value.second = ldexp(value.second, -1);
+ }
+ return value.second;
+ }
+ BOOST_STATIC_CONSTEXPR typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type min_exponent = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ BOOST_STATIC_CONSTEXPR typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type min_exponent10 = (min_exponent / 1000) * 301L;
+ BOOST_STATIC_CONSTEXPR typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type max_exponent = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ BOOST_STATIC_CONSTEXPR typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type max_exponent10 = (max_exponent / 1000) * 301L;
+ BOOST_STATIC_CONSTEXPR bool has_infinity = true;
+ BOOST_STATIC_CONSTEXPR bool has_quiet_NaN = true;
+ BOOST_STATIC_CONSTEXPR bool has_signaling_NaN = false;
+ BOOST_STATIC_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
+ BOOST_STATIC_CONSTEXPR bool has_denorm_loss = false;
+ static number_type infinity()
+ {
+ // returns epsilon/2
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ value.second.backend().exponent() = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity;
+ }
+ return value.second;
+ }
+ static number_type quiet_NaN()
+ {
+ return number_type();
+ }
+ BOOST_STATIC_CONSTEXPR number_type signaling_NaN()
+ {
+ return number_type(0);
+ }
+ BOOST_STATIC_CONSTEXPR number_type denorm_min() { return number_type(0); }
+ BOOST_STATIC_CONSTEXPR bool is_iec559 = false;
+ BOOST_STATIC_CONSTEXPR bool is_bounded = true;
+ BOOST_STATIC_CONSTEXPR bool is_modulo = false;
+ BOOST_STATIC_CONSTEXPR bool traps = true;
+ BOOST_STATIC_CONSTEXPR bool tinyness_before = false;
+ BOOST_STATIC_CONSTEXPR float_round_style round_style = round_to_nearest;
+private:
+ struct data_initializer
+ {
+ data_initializer()
+ {
+ std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::epsilon();
+ std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::round_error();
+ (std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::min)();
+ (std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::max)();
+ std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity();
+ std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN();
+ }
+ void do_nothing()const{}
+ };
+ static const data_initializer initializer;
+};
+
+template<unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+const typename numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::data_initializer numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::initializer;
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST int numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::digits;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST int numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::digits10;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST int numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::max_digits10;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_signed;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_integer;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_exact;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST int numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::radix;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::min_exponent;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::min_exponent10;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::max_exponent;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::max_exponent10;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_infinity;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_quiet_NaN;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_signaling_NaN;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_denorm;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_denorm_loss;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_iec559;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_bounded;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_modulo;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::traps;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::tinyness_before;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST float_round_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::round_style;
+
+#endif
+
+} // namespace std
+
+#endif
diff --git a/3party/boost/boost/multiprecision/cpp_bin_float/io.hpp b/3party/boost/boost/multiprecision/cpp_bin_float/io.hpp
new file mode 100644
index 0000000000..6ad0f7ce32
--- /dev/null
+++ b/3party/boost/boost/multiprecision/cpp_bin_float/io.hpp
@@ -0,0 +1,690 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock. 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_
+
+#ifndef BOOST_MP_CPP_BIN_FLOAT_IO_HPP
+#define BOOST_MP_CPP_BIN_FLOAT_IO_HPP
+
+namespace boost{ namespace multiprecision{ namespace cpp_bf_io_detail{
+
+//
+// Multiplies a by b and shifts the result so it fits inside max_bits bits,
+// returns by how much the result was shifted.
+//
+template <class I>
+inline I restricted_multiply(cpp_int& result, const cpp_int& a, const cpp_int& b, I max_bits, boost::int64_t& error)
+{
+ result = a * b;
+ I gb = msb(result);
+ I rshift = 0;
+ if(gb > max_bits)
+ {
+ rshift = gb - max_bits;
+ I lb = lsb(result);
+ int roundup = 0;
+ // The error rate increases by the error of both a and b,
+ // this may be overly pessimistic in many case as we're assuming
+ // that a and b have the same level of uncertainty...
+ if(lb < rshift)
+ error = error ? error * 2 : 1;
+ if(rshift)
+ {
+ BOOST_ASSERT(rshift < INT_MAX);
+ if(bit_test(result, static_cast<unsigned>(rshift - 1)))
+ {
+ if(lb == rshift - 1)
+ roundup = 1;
+ else
+ roundup = 2;
+ }
+ result >>= rshift;
+ }
+ if((roundup == 2) || ((roundup == 1) && (result.backend().limbs()[0] & 1)))
+ ++result;
+ }
+ return rshift;
+}
+//
+// Computes a^e shifted to the right so it fits in max_bits, returns how far
+// to the right we are shifted.
+//
+template <class I>
+inline I restricted_pow(cpp_int& result, const cpp_int& a, I e, I max_bits, boost::int64_t& error)
+{
+ BOOST_ASSERT(&result != &a);
+ I exp = 0;
+ if(e == 1)
+ {
+ result = a;
+ return exp;
+ }
+ else if(e == 2)
+ {
+ return restricted_multiply(result, a, a, max_bits, error);
+ }
+ else if(e == 3)
+ {
+ exp = restricted_multiply(result, a, a, max_bits, error);
+ exp += restricted_multiply(result, result, a, max_bits, error);
+ return exp;
+ }
+ I p = e / 2;
+ exp = restricted_pow(result, a, p, max_bits, error);
+ exp *= 2;
+ exp += restricted_multiply(result, result, result, max_bits, error);
+ if(e & 1)
+ exp += restricted_multiply(result, result, a, max_bits, error);
+ return exp;
+}
+
+inline int get_round_mode(const cpp_int& what, boost::int64_t location, boost::int64_t error)
+{
+ //
+ // Can we round what at /location/, if the error in what is /error/ in
+ // units of 0.5ulp. Return:
+ //
+ // -1: Can't round.
+ // 0: leave as is.
+ // 1: tie.
+ // 2: round up.
+ //
+ BOOST_ASSERT(location >= 0);
+ BOOST_ASSERT(location < INT_MAX);
+ boost::int64_t error_radius = error & 1 ? (1 + error) / 2 : error / 2;
+ if(error_radius && ((int)msb(error_radius) >= location))
+ return -1;
+ if(bit_test(what, static_cast<unsigned>(location)))
+ {
+ if((int)lsb(what) == location)
+ return error ? -1 : 1; // Either a tie or can't round depending on whether we have any error
+ if(!error)
+ return 2; // no error, round up.
+ cpp_int t = what - error_radius;
+ if((int)lsb(t) >= location)
+ return -1;
+ return 2;
+ }
+ else if(error)
+ {
+ cpp_int t = what + error_radius;
+ return bit_test(t, static_cast<unsigned>(location)) ? -1 : 0;
+ }
+ return 0;
+}
+
+inline int get_round_mode(cpp_int& r, cpp_int& d, boost::int64_t error, const cpp_int& q)
+{
+ //
+ // Lets suppose we have an inexact division by d+delta, where the true
+ // value for the divisor is d, and with |delta| <= error/2, then
+ // we have calculated q and r such that:
+ //
+ // n r
+ // --- = q + -----------
+ // d + error d + error
+ //
+ // Rearranging for n / d we get:
+ //
+ // n delta*q + r
+ // --- = q + -------------
+ // d d
+ //
+ // So rounding depends on whether 2r + error * q > d.
+ //
+ // We return:
+ // 0 = down down.
+ // 1 = tie.
+ // 2 = round up.
+ // -1 = couldn't decide.
+ //
+ r <<= 1;
+ int c = r.compare(d);
+ if(c == 0)
+ return error ? -1 : 1;
+ if(c > 0)
+ {
+ if(error)
+ {
+ r -= error * q;
+ return r.compare(d) > 0 ? 2 : -1;
+ }
+ return 2;
+ }
+ if(error)
+ {
+ r += error * q;
+ return r.compare(d) < 0 ? 0 : -1;
+ }
+ return 0;
+}
+
+} // namespace
+
+namespace backends{
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>& cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::operator=(const char *s)
+{
+ cpp_int n;
+ boost::intmax_t decimal_exp = 0;
+ boost::intmax_t digits_seen = 0;
+ static const boost::intmax_t max_digits_seen = 4 + (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count * 301L) / 1000;
+ bool ss = false;
+ //
+ // Extract the sign:
+ //
+ if(*s == '-')
+ {
+ ss = true;
+ ++s;
+ }
+ else if(*s == '+')
+ ++s;
+ //
+ // Special cases first:
+ //
+ if((std::strcmp(s, "nan") == 0) || (std::strcmp(s, "NaN") == 0) || (std::strcmp(s, "NAN") == 0))
+ {
+ return *this = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ }
+ if((std::strcmp(s, "inf") == 0) || (std::strcmp(s, "Inf") == 0) || (std::strcmp(s, "INF") == 0) || (std::strcmp(s, "infinity") == 0) || (std::strcmp(s, "Infinity") == 0) || (std::strcmp(s, "INFINITY") == 0))
+ {
+ *this = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ if(ss)
+ negate();
+ return *this;
+ }
+ //
+ // Digits before the point:
+ //
+ while(*s && (*s >= '0') && (*s <= '9'))
+ {
+ n *= 10u;
+ n += *s - '0';
+ if(digits_seen || (*s != '0'))
+ ++digits_seen;
+ ++s;
+ }
+ // The decimal point (we really should localise this!!)
+ if(*s && (*s == '.'))
+ ++s;
+ //
+ // Digits after the point:
+ //
+ while(*s && (*s >= '0') && (*s <= '9'))
+ {
+ n *= 10u;
+ n += *s - '0';
+ --decimal_exp;
+ if(digits_seen || (*s != '0'))
+ ++digits_seen;
+ ++s;
+ if(digits_seen > max_digits_seen)
+ break;
+ }
+ //
+ // Digits we're skipping:
+ //
+ while(*s && (*s >= '0') && (*s <= '9'))
+ ++s;
+ //
+ // See if there's an exponent:
+ //
+ if(*s && ((*s == 'e') || (*s == 'E')))
+ {
+ ++s;
+ boost::intmax_t e = 0;
+ bool es = false;
+ if(*s && (*s == '-'))
+ {
+ es = true;
+ ++s;
+ }
+ else if(*s && (*s == '+'))
+ ++s;
+ while(*s && (*s >= '0') && (*s <= '9'))
+ {
+ e *= 10u;
+ e += *s - '0';
+ ++s;
+ }
+ if(es)
+ e = -e;
+ decimal_exp += e;
+ }
+ if(*s)
+ {
+ //
+ // Oops unexpected input at the end of the number:
+ //
+ BOOST_THROW_EXCEPTION(std::runtime_error("Unable to parse string as a valid floating point number."));
+ }
+ if(n == 0)
+ {
+ // Result is necessarily zero:
+ *this = static_cast<limb_type>(0u);
+ return *this;
+ }
+
+ static const unsigned limb_bits = sizeof(limb_type) * CHAR_BIT;
+ //
+ // Set our working precision - this is heuristic based, we want
+ // a value as small as possible > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count to avoid large computations
+ // and excessive memory usage, but we also want to avoid having to
+ // up the computation and start again at a higher precision.
+ // So we round cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count up to the nearest whole number of limbs, and add
+ // one limb for good measure. This works very well for small exponents,
+ // but for larger exponents we may may need to restart, we could add some
+ // extra precision right from the start for larger exponents, but this
+ // seems to be slightly slower in the *average* case:
+ //
+#ifdef BOOST_MP_STRESS_IO
+ boost::intmax_t max_bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 32;
+#else
+ boost::intmax_t max_bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count % limb_bits ? limb_bits - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count % limb_bits : 0) + limb_bits;
+#endif
+ boost::int64_t error = 0;
+ boost::intmax_t calc_exp = 0;
+ boost::intmax_t final_exponent = 0;
+
+ if(decimal_exp >= 0)
+ {
+ // Nice and simple, the result is an integer...
+ do
+ {
+ cpp_int t;
+ if(decimal_exp)
+ {
+ calc_exp = boost::multiprecision::cpp_bf_io_detail::restricted_pow(t, cpp_int(5), decimal_exp, max_bits, error);
+ calc_exp += boost::multiprecision::cpp_bf_io_detail::restricted_multiply(t, t, n, max_bits, error);
+ }
+ else
+ t = n;
+ final_exponent = (boost::int64_t)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 + decimal_exp + calc_exp;
+ int rshift = msb(t) - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1;
+ if(rshift > 0)
+ {
+ final_exponent += rshift;
+ int roundup = boost::multiprecision::cpp_bf_io_detail::get_round_mode(t, rshift - 1, error);
+ t >>= rshift;
+ if((roundup == 2) || ((roundup == 1) && t.backend().limbs()[0] & 1))
+ ++t;
+ else if(roundup < 0)
+ {
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ error = 0;
+ continue;
+ }
+ }
+ else
+ {
+ BOOST_ASSERT(!error);
+ }
+ if(final_exponent > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ final_exponent -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ }
+ else if(final_exponent < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent)
+ {
+ // Underflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ final_exponent -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ }
+ else
+ {
+ exponent() = static_cast<Exponent>(final_exponent);
+ final_exponent = 0;
+ }
+ copy_and_round(*this, t.backend());
+ break;
+ }
+ while(true);
+
+ if(ss != sign())
+ negate();
+ }
+ else
+ {
+ // Result is the ratio of two integers: we need to organise the
+ // division so as to produce at least an N-bit result which we can
+ // round according to the remainder.
+ //cpp_int d = pow(cpp_int(5), -decimal_exp);
+ do
+ {
+ cpp_int d;
+ calc_exp = boost::multiprecision::cpp_bf_io_detail::restricted_pow(d, cpp_int(5), -decimal_exp, max_bits, error);
+ int shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - msb(n) + msb(d);
+ final_exponent = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 + decimal_exp - calc_exp;
+ if(shift > 0)
+ {
+ n <<= shift;
+ final_exponent -= static_cast<Exponent>(shift);
+ }
+ cpp_int q, r;
+ divide_qr(n, d, q, r);
+ int gb = msb(q);
+ BOOST_ASSERT((gb >= static_cast<int>(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count) - 1));
+ //
+ // Check for rounding conditions we have to
+ // handle ourselves:
+ //
+ int roundup = 0;
+ if(gb == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1)
+ {
+ // Exactly the right number of bits, use the remainder to round:
+ roundup = boost::multiprecision::cpp_bf_io_detail::get_round_mode(r, d, error, q);
+ }
+ else if(bit_test(q, gb - (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count) && ((int)lsb(q) == (gb - (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)))
+ {
+ // Too many bits in q and the bits in q indicate a tie, but we can break that using r,
+ // note that the radius of error in r is error/2 * q:
+ int shift = gb - (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1;
+ q >>= shift;
+ final_exponent += static_cast<Exponent>(shift);
+ BOOST_ASSERT((msb(q) >= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1));
+ if(error && (r < (error / 2) * q))
+ roundup = -1;
+ else if(error && (r + (error / 2) * q >= d))
+ roundup = -1;
+ else
+ roundup = r ? 2 : 1;
+ }
+ else if(error && (((error / 2) * q + r >= d) || (r < (error / 2) * q)))
+ {
+ // We might have been rounding up, or got the wrong quotient: can't tell!
+ roundup = -1;
+ }
+ if(roundup < 0)
+ {
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ error = 0;
+ if(shift > 0)
+ {
+ n >>= shift;
+ final_exponent += static_cast<Exponent>(shift);
+ }
+ continue;
+ }
+ else if((roundup == 2) || ((roundup == 1) && q.backend().limbs()[0] & 1))
+ ++q;
+ if(final_exponent > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ // Overflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ final_exponent -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ }
+ else if(final_exponent < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent)
+ {
+ // Underflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ final_exponent -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ }
+ else
+ {
+ exponent() = static_cast<Exponent>(final_exponent);
+ final_exponent = 0;
+ }
+ copy_and_round(*this, q.backend());
+ if(ss != sign())
+ negate();
+ break;
+ }
+ while(true);
+ }
+ //
+ // Check for scaling and/or over/under-flow:
+ //
+ final_exponent += exponent();
+ if(final_exponent > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ // Overflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity;
+ bits() = limb_type(0);
+ }
+ else if(final_exponent < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent)
+ {
+ // Underflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ bits() = limb_type(0);
+ sign() = 0;
+ }
+ else
+ {
+ exponent() = static_cast<Exponent>(final_exponent);
+ }
+ return *this;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+std::string cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::str(std::streamsize dig, std::ios_base::fmtflags f) const
+{
+ if(dig == 0)
+ dig = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::max_digits10;
+
+ bool scientific = (f & std::ios_base::scientific) == std::ios_base::scientific;
+ bool fixed = !scientific && (f & std::ios_base::fixed);
+
+ std::string s;
+
+ if(exponent() <= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ // How far to left-shift in order to demormalise the mantissa:
+ boost::intmax_t shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1;
+ boost::intmax_t digits_wanted = static_cast<int>(dig);
+ boost::intmax_t base10_exp = exponent() >= 0 ? static_cast<boost::intmax_t>(std::floor(0.30103 * exponent())) : static_cast<boost::intmax_t>(std::ceil(0.30103 * exponent()));
+ //
+ // For fixed formatting we want /dig/ digits after the decimal point,
+ // so if the exponent is zero, allowing for the one digit before the
+ // decimal point, we want 1 + dig digits etc.
+ //
+ if(fixed)
+ digits_wanted += 1 + base10_exp;
+ if(scientific)
+ digits_wanted += 1;
+ if(digits_wanted < -1)
+ {
+ // Fixed precision, no significant digits, and nothing to round!
+ s = "0";
+ if(sign())
+ s.insert(0, 1, '-');
+ boost::multiprecision::detail::format_float_string(s, base10_exp, dig, f, true);
+ return s;
+ }
+ //
+ // power10 is the base10 exponent we need to multiply/divide by in order
+ // to convert our denormalised number to an integer with the right number of digits:
+ //
+ boost::intmax_t power10 = digits_wanted - base10_exp - 1;
+ //
+ // If we calculate 5^power10 rather than 10^power10 we need to move
+ // 2^power10 into /shift/
+ //
+ shift -= power10;
+ cpp_int i;
+ int roundup = 0; // 0=no rounding, 1=tie, 2=up
+ static const unsigned limb_bits = sizeof(limb_type) * CHAR_BIT;
+ //
+ // Set our working precision - this is heuristic based, we want
+ // a value as small as possible > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count to avoid large computations
+ // and excessive memory usage, but we also want to avoid having to
+ // up the computation and start again at a higher precision.
+ // So we round cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count up to the nearest whole number of limbs, and add
+ // one limb for good measure. This works very well for small exponents,
+ // but for larger exponents we add a few extra limbs to max_bits:
+ //
+#ifdef BOOST_MP_STRESS_IO
+ boost::intmax_t max_bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 32;
+#else
+ boost::intmax_t max_bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count % limb_bits ? limb_bits - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count % limb_bits : 0) + limb_bits;
+ if(power10)
+ max_bits += (msb(boost::multiprecision::detail::abs(power10)) / 8) * limb_bits;
+#endif
+ do
+ {
+ boost::int64_t error = 0;
+ boost::intmax_t calc_exp = 0;
+ //
+ // Our integer result is: bits() * 2^-shift * 5^power10
+ //
+ i = bits();
+ if(shift < 0)
+ {
+ if(power10 >= 0)
+ {
+ // We go straight to the answer with all integer arithmetic,
+ // the result is always exact and never needs rounding:
+ BOOST_ASSERT(power10 <= (boost::intmax_t)INT_MAX);
+ i <<= -shift;
+ if(power10)
+ i *= pow(cpp_int(5), static_cast<unsigned>(power10));
+ }
+ else if(power10 < 0)
+ {
+ cpp_int d;
+ calc_exp = boost::multiprecision::cpp_bf_io_detail::restricted_pow(d, cpp_int(5), -power10, max_bits, error);
+ shift += calc_exp;
+ BOOST_ASSERT(shift < 0); // Must still be true!
+ i <<= -shift;
+ cpp_int r;
+ divide_qr(i, d, i, r);
+ roundup = boost::multiprecision::cpp_bf_io_detail::get_round_mode(r, d, error, i);
+ if(roundup < 0)
+ {
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1 - power10;
+ continue;
+ }
+ }
+ }
+ else
+ {
+ //
+ // Our integer is bits() * 2^-shift * 10^power10
+ //
+ if(power10 > 0)
+ {
+ if(power10)
+ {
+ cpp_int t;
+ calc_exp = boost::multiprecision::cpp_bf_io_detail::restricted_pow(t, cpp_int(5), power10, max_bits, error);
+ calc_exp += boost::multiprecision::cpp_bf_io_detail::restricted_multiply(i, i, t, max_bits, error);
+ shift -= calc_exp;
+ }
+ if((shift < 0) || ((shift == 0) && error))
+ {
+ // We only get here if we were asked for a crazy number of decimal digits -
+ // more than are present in a 2^max_bits number.
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1 - power10;
+ continue;
+ }
+ if(shift)
+ {
+ roundup = boost::multiprecision::cpp_bf_io_detail::get_round_mode(i, shift - 1, error);
+ if(roundup < 0)
+ {
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1 - power10;
+ continue;
+ }
+ i >>= shift;
+ }
+ }
+ else
+ {
+ // We're right shifting, *and* dividing by 5^-power10,
+ // so 5^-power10 can never be that large or we'd simply
+ // get zero as a result, and that case is already handled above:
+ cpp_int r;
+ BOOST_ASSERT(-power10 < INT_MAX);
+ cpp_int d = pow(cpp_int(5), static_cast<unsigned>(-power10));
+ d <<= shift;
+ divide_qr(i, d, i, r);
+ r <<= 1;
+ int c = r.compare(d);
+ roundup = c < 0 ? 0 : c == 0 ? 1 : 2;
+ }
+ }
+ s = i.str(0, std::ios_base::fmtflags(0));
+ //
+ // Check if we got the right number of digits, this
+ // is really a test of whether we calculated the
+ // decimal exponent correctly:
+ //
+ boost::intmax_t digits_got = i ? static_cast<boost::intmax_t>(s.size()) : 0;
+ if(digits_got != digits_wanted)
+ {
+ base10_exp += digits_got - digits_wanted;
+ if(fixed)
+ digits_wanted = digits_got; // strange but true.
+ power10 = digits_wanted - base10_exp - 1;
+ shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1 - power10;
+ if(fixed)
+ break;
+ roundup = 0;
+ }
+ else
+ break;
+ }
+ while(true);
+ //
+ // Check whether we need to round up: note that we could equally round up
+ // the integer /i/ above, but since we need to perform the rounding *after*
+ // the conversion to a string and the digit count check, we might as well
+ // do it here:
+ //
+ if((roundup == 2) || ((roundup == 1) && ((s[s.size() - 1] - '0') & 1)))
+ {
+ boost::multiprecision::detail::round_string_up_at(s, static_cast<int>(s.size() - 1), base10_exp);
+ }
+
+ if(sign())
+ s.insert(0, 1, '-');
+
+ boost::multiprecision::detail::format_float_string(s, base10_exp, dig, f, false);
+ }
+ else
+ {
+ switch(exponent())
+ {
+ case exponent_zero:
+ s = "0";
+ boost::multiprecision::detail::format_float_string(s, 0, dig, f, true);
+ break;
+ case exponent_nan:
+ s = "nan";
+ break;
+ case exponent_infinity:
+ s = sign() ? "-inf" : f & std::ios_base::showpos ? "+inf" : "inf";
+ break;
+ }
+ }
+ return s;
+}
+
+}}} // namespaces
+
+#endif
+
diff --git a/3party/boost/boost/multiprecision/cpp_bin_float/transcendental.hpp b/3party/boost/boost/multiprecision/cpp_bin_float/transcendental.hpp
new file mode 100644
index 0000000000..9afcc4e7ea
--- /dev/null
+++ b/3party/boost/boost/multiprecision/cpp_bin_float/transcendental.hpp
@@ -0,0 +1,132 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock. 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_
+
+#ifndef BOOST_MULTIPRECISION_CPP_BIN_FLOAT_TRANSCENDENTAL_HPP
+#define BOOST_MULTIPRECISION_CPP_BIN_FLOAT_TRANSCENDENTAL_HPP
+
+namespace boost{ namespace multiprecision{ namespace backends{
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+void eval_exp_taylor(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ static const int bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count;
+ //
+ // Taylor series for small argument, note returns exp(x) - 1:
+ //
+ res = limb_type(0);
+ cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> num(arg), denom, t;
+ denom = limb_type(1);
+ eval_add(res, num);
+
+ for(unsigned k = 2; ; ++k)
+ {
+ eval_multiply(denom, k);
+ eval_multiply(num, arg);
+ eval_divide(t, num, denom);
+ eval_add(res, t);
+ if(eval_is_zero(t) || (res.exponent() - bits > t.exponent()))
+ break;
+ }
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+void eval_exp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ //
+ // This is based on MPFR's method, let:
+ //
+ // n = floor(x / ln(2))
+ //
+ // Then:
+ //
+ // r = x - n ln(2) : 0 <= r < ln(2)
+ //
+ // We can reduce r further by dividing by 2^k, with k ~ sqrt(n),
+ // so if:
+ //
+ // e0 = exp(r / 2^k) - 1
+ //
+ // With e0 evaluated by taylor series for small arguments, then:
+ //
+ // exp(x) = 2^n (1 + e0)^2^k
+ //
+ // Note that to preserve precision we actually square (1 + e0) k times, calculating
+ // the result less one each time, i.e.
+ //
+ // (1 + e0)^2 - 1 = e0^2 + 2e0
+ //
+ // Then add the final 1 at the end, given that e0 is small, this effectively wipes
+ // out the error in the last step.
+ //
+ using default_ops::eval_multiply;
+ using default_ops::eval_subtract;
+ using default_ops::eval_add;
+ using default_ops::eval_convert_to;
+
+ int type = eval_fpclassify(arg);
+ bool isneg = eval_get_sign(arg) < 0;
+ if(type == (int)FP_NAN)
+ {
+ res = arg;
+ return;
+ }
+ else if(type == (int)FP_INFINITE)
+ {
+ res = arg;
+ if(isneg)
+ res = limb_type(0u);
+ else
+ res = arg;
+ return;
+ }
+ else if(type == (int)FP_ZERO)
+ {
+ res = limb_type(1);
+ return;
+ }
+ cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> t, n;
+ if(isneg)
+ {
+ t = arg;
+ t.negate();
+ eval_exp(res, t);
+ t.swap(res);
+ res = limb_type(1);
+ eval_divide(res, t);
+ return;
+ }
+
+ eval_divide(n, arg, default_ops::get_constant_ln2<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> >());
+ eval_floor(n, n);
+ eval_multiply(t, n, default_ops::get_constant_ln2<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> >());
+ eval_subtract(t, arg);
+ t.negate();
+ BOOST_ASSERT(t.compare(limb_type(0)) >= 0);
+ BOOST_ASSERT(t.compare(default_ops::get_constant_ln2<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> >()) < 0);
+
+ Exponent k, nn;
+ eval_convert_to(&nn, n);
+ k = nn ? Exponent(1) << (msb(nn) / 2) : 0;
+ eval_ldexp(t, t, -k);
+
+ eval_exp_taylor(res, t);
+ //
+ // Square 1 + res k times:
+ //
+ for(int s = 0; s < k; ++s)
+ {
+ t.swap(res);
+ eval_multiply(res, t, t);
+ eval_ldexp(t, t, 1);
+ eval_add(res, t);
+ }
+ eval_add(res, limb_type(1));
+ eval_ldexp(res, res, nn);
+}
+
+}}} // namespaces
+
+#endif
+
diff --git a/3party/boost/boost/multiprecision/cpp_dec_float.hpp b/3party/boost/boost/multiprecision/cpp_dec_float.hpp
index 3949c6875e..7c0dc7aa97 100644
--- a/3party/boost/boost/multiprecision/cpp_dec_float.hpp
+++ b/3party/boost/boost/multiprecision/cpp_dec_float.hpp
@@ -1,15 +1,15 @@
///////////////////////////////////////////////////////////////////////////////
-// Copyright Christopher Kormanyos 2002 - 2012.
-// Copyright 2012 John Maddock. 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)
+// Copyright Christopher Kormanyos 2002 - 2013.
+// Copyright 2011 -2013 John Maddock. 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)
//
// This work is based on an earlier work:
// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
//
// Note that there are no "noexcept" specifications on the functions in this file: there are too many
-// calls to lexical_cast (and similar) to easily analyse the code for correctness. So until compilers
+// calls to lexical_cast (and similar) to easily analyse the code for correctness. So until compilers
// can detect noexcept misuse at compile time, the only realistic option is to simply not use it here.
//
@@ -59,25 +59,25 @@ private:
BOOST_STATIC_ASSERT_MSG(sizeof(ExponentType) > 1, "ExponentType is too small.");
public:
- typedef mpl::list<long long> signed_types;
- typedef mpl::list<unsigned long long> unsigned_types;
- typedef mpl::list<long double> float_types;
- typedef ExponentType exponent_type;
+ typedef mpl::list<long long> signed_types;
+ typedef mpl::list<unsigned long long> unsigned_types;
+ typedef mpl::list<long double> float_types;
+ typedef ExponentType exponent_type;
- static const boost::int32_t cpp_dec_float_radix = 10L;
+ static const boost::int32_t cpp_dec_float_radix = 10L;
static const boost::int32_t cpp_dec_float_digits10_limit_lo = 9L;
static const boost::int32_t cpp_dec_float_digits10_limit_hi = boost::integer_traits<boost::int32_t>::const_max - 100;
- static const boost::int32_t cpp_dec_float_digits10 = ((cpp_dec_float_digits10_setting < cpp_dec_float_digits10_limit_lo) ? cpp_dec_float_digits10_limit_lo : ((cpp_dec_float_digits10_setting > cpp_dec_float_digits10_limit_hi) ? cpp_dec_float_digits10_limit_hi : cpp_dec_float_digits10_setting));
- static const ExponentType cpp_dec_float_max_exp10 = (static_cast<ExponentType>(1) << (std::numeric_limits<ExponentType>::digits - 5));
- static const ExponentType cpp_dec_float_min_exp10 = -cpp_dec_float_max_exp10;
- static const ExponentType cpp_dec_float_max_exp = static_cast<ExponentType>((cpp_dec_float_max_exp10 / 301LL) * 1000LL);
- static const ExponentType cpp_dec_float_min_exp = static_cast<ExponentType>((cpp_dec_float_min_exp10 / 301LL) * 1000LL);
+ static const boost::int32_t cpp_dec_float_digits10 = ((cpp_dec_float_digits10_setting < cpp_dec_float_digits10_limit_lo) ? cpp_dec_float_digits10_limit_lo : ((cpp_dec_float_digits10_setting > cpp_dec_float_digits10_limit_hi) ? cpp_dec_float_digits10_limit_hi : cpp_dec_float_digits10_setting));
+ static const ExponentType cpp_dec_float_max_exp10 = (static_cast<ExponentType>(1) << (std::numeric_limits<ExponentType>::digits - 5));
+ static const ExponentType cpp_dec_float_min_exp10 = -cpp_dec_float_max_exp10;
+ static const ExponentType cpp_dec_float_max_exp = cpp_dec_float_max_exp10;
+ static const ExponentType cpp_dec_float_min_exp = cpp_dec_float_min_exp10;
BOOST_STATIC_ASSERT((cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_max_exp10 == -cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_min_exp10));
private:
static const boost::int32_t cpp_dec_float_elem_digits10 = 8L;
- static const boost::int32_t cpp_dec_float_elem_mask = 100000000L;
+ static const boost::int32_t cpp_dec_float_elem_mask = 100000000L;
BOOST_STATIC_ASSERT(0 == cpp_dec_float_max_exp10 % cpp_dec_float_elem_digits10);
@@ -85,8 +85,8 @@ private:
// 1) The first limb has 'play' from 1...8 decimal digits.
// 2) The last limb also has 'play' from 1...8 decimal digits.
// 3) One limb can get lost when justifying after multiply,
- // as only half of the triangle is multiplied and a carry
- // from below is missing.
+ // as only half of the triangle is multiplied and a carry
+ // from below is missing.
static const boost::int32_t cpp_dec_float_elem_number_request = static_cast<boost::int32_t>((cpp_dec_float_digits10 / cpp_dec_float_elem_digits10) + (((cpp_dec_float_digits10 % cpp_dec_float_elem_digits10) != 0) ? 1 : 0));
// The number of elements needed (with a minimum of two) plus three added guard limbs.
@@ -117,20 +117,20 @@ private:
>::type array_type;
#endif
- array_type data;
- ExponentType exp;
- bool neg;
- fpclass_type fpclass;
- boost::int32_t prec_elem;
+ array_type data;
+ ExponentType exp;
+ bool neg;
+ fpclass_type fpclass;
+ boost::int32_t prec_elem;
//
// Special values constructor:
//
- cpp_dec_float(fpclass_type c) :
+ cpp_dec_float(fpclass_type c) :
data(),
- exp (static_cast<ExponentType>(0)),
- neg (false),
- fpclass (c),
+ exp (static_cast<ExponentType>(0)),
+ neg (false),
+ fpclass (c),
prec_elem(cpp_dec_float_elem_number) { }
//
@@ -140,23 +140,23 @@ private:
{
initializer()
{
- cpp_dec_float<Digits10, ExponentType, Allocator>::nan();
- cpp_dec_float<Digits10, ExponentType, Allocator>::inf();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::nan();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::inf();
(cpp_dec_float<Digits10, ExponentType, Allocator>::min)();
(cpp_dec_float<Digits10, ExponentType, Allocator>::max)();
- cpp_dec_float<Digits10, ExponentType, Allocator>::zero();
- cpp_dec_float<Digits10, ExponentType, Allocator>::one();
- cpp_dec_float<Digits10, ExponentType, Allocator>::two();
- cpp_dec_float<Digits10, ExponentType, Allocator>::half();
- cpp_dec_float<Digits10, ExponentType, Allocator>::double_min();
- cpp_dec_float<Digits10, ExponentType, Allocator>::double_max();
- cpp_dec_float<Digits10, ExponentType, Allocator>::long_double_max();
- cpp_dec_float<Digits10, ExponentType, Allocator>::long_double_min();
- cpp_dec_float<Digits10, ExponentType, Allocator>::long_long_max();
- cpp_dec_float<Digits10, ExponentType, Allocator>::long_long_min();
- cpp_dec_float<Digits10, ExponentType, Allocator>::ulong_long_max();
- cpp_dec_float<Digits10, ExponentType, Allocator>::eps();
- cpp_dec_float<Digits10, ExponentType, Allocator>::pow2(0);
+ cpp_dec_float<Digits10, ExponentType, Allocator>::zero();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::one();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::two();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::half();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::double_min();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::double_max();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::long_double_max();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::long_double_min();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::long_long_max();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::long_long_min();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::ulong_long_max();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::eps();
+ cpp_dec_float<Digits10, ExponentType, Allocator>::pow2(0);
}
void do_nothing(){}
};
@@ -165,74 +165,74 @@ private:
public:
// Constructors
- cpp_dec_float() :
+ cpp_dec_float() :
data(),
- exp (static_cast<ExponentType>(0)),
- neg (false),
- fpclass (cpp_dec_float_finite),
+ exp (static_cast<ExponentType>(0)),
+ neg (false),
+ fpclass (cpp_dec_float_finite),
prec_elem(cpp_dec_float_elem_number) { }
- cpp_dec_float(const char* s) :
+ cpp_dec_float(const char* s) :
data(),
- exp (static_cast<ExponentType>(0)),
- neg (false),
- fpclass (cpp_dec_float_finite),
- prec_elem(cpp_dec_float_elem_number)
+ exp (static_cast<ExponentType>(0)),
+ neg (false),
+ fpclass (cpp_dec_float_finite),
+ prec_elem(cpp_dec_float_elem_number)
{
*this = s;
}
template<class I>
- cpp_dec_float(I i, typename enable_if<is_unsigned<I> >::type* = 0) :
+ cpp_dec_float(I i, typename enable_if<is_unsigned<I> >::type* = 0) :
data(),
- exp (static_cast<ExponentType>(0)),
- neg (false),
- fpclass (cpp_dec_float_finite),
- prec_elem(cpp_dec_float_elem_number)
+ exp (static_cast<ExponentType>(0)),
+ neg (false),
+ fpclass (cpp_dec_float_finite),
+ prec_elem(cpp_dec_float_elem_number)
{
from_unsigned_long_long(i);
}
template <class I>
- cpp_dec_float(I i, typename enable_if<is_signed<I> >::type* = 0) :
+ cpp_dec_float(I i, typename enable_if<is_signed<I> >::type* = 0) :
data(),
- exp (static_cast<ExponentType>(0)),
- neg (false),
- fpclass (cpp_dec_float_finite),
- prec_elem(cpp_dec_float_elem_number)
+ exp (static_cast<ExponentType>(0)),
+ neg (false),
+ fpclass (cpp_dec_float_finite),
+ prec_elem(cpp_dec_float_elem_number)
{
if(i < 0)
{
- from_unsigned_long_long(-i);
+ from_unsigned_long_long(boost::multiprecision::detail::unsigned_abs(i));
negate();
}
else
from_unsigned_long_long(i);
}
- cpp_dec_float(const cpp_dec_float& f) :
- data (f.data),
- exp (f.exp),
- neg (f.neg),
- fpclass (f.fpclass),
+ cpp_dec_float(const cpp_dec_float& f) :
+ data (f.data),
+ exp (f.exp),
+ neg (f.neg),
+ fpclass (f.fpclass),
prec_elem(f.prec_elem) { }
template <unsigned D, class ET, class A>
- cpp_dec_float(const cpp_dec_float<D, ET, A>& f, typename enable_if_c<D <= Digits10>::type* = 0) :
+ cpp_dec_float(const cpp_dec_float<D, ET, A>& f, typename enable_if_c<D <= Digits10>::type* = 0) :
data(),
- exp (f.exp),
- neg (f.neg),
- fpclass (static_cast<fpclass_type>(static_cast<int>(f.fpclass))),
+ exp (f.exp),
+ neg (f.neg),
+ fpclass (static_cast<fpclass_type>(static_cast<int>(f.fpclass))),
prec_elem(cpp_dec_float_elem_number)
{
std::copy(f.data.begin(), f.data.begin() + f.prec_elem, data.begin());
}
template <unsigned D, class ET, class A>
- explicit cpp_dec_float(const cpp_dec_float<D, ET, A>& f, typename disable_if_c<D <= Digits10>::type* = 0) :
+ explicit cpp_dec_float(const cpp_dec_float<D, ET, A>& f, typename disable_if_c<D <= Digits10>::type* = 0) :
data(),
- exp (f.exp),
- neg (f.neg),
- fpclass (static_cast<fpclass_type>(static_cast<int>(f.fpclass))),
+ exp (f.exp),
+ neg (f.neg),
+ fpclass (static_cast<fpclass_type>(static_cast<int>(f.fpclass))),
prec_elem(cpp_dec_float_elem_number)
{
// TODO: this doesn't round!
@@ -240,133 +240,133 @@ public:
}
template <class F>
- cpp_dec_float(const F val, typename enable_if<is_floating_point<F> >::type* = 0) :
+ cpp_dec_float(const F val, typename enable_if<is_floating_point<F> >::type* = 0) :
data(),
- exp (static_cast<ExponentType>(0)),
- neg (false),
- fpclass (cpp_dec_float_finite),
- prec_elem(cpp_dec_float_elem_number)
+ exp (static_cast<ExponentType>(0)),
+ neg (false),
+ fpclass (cpp_dec_float_finite),
+ prec_elem(cpp_dec_float_elem_number)
{
*this = val;
}
- cpp_dec_float(const double val, ExponentType exponent);
+ cpp_dec_float(const double mantissa, const ExponentType exponent);
// Specific special values.
- static const cpp_dec_float& nan()
+ static const cpp_dec_float& nan()
{
static const cpp_dec_float val(cpp_dec_float_NaN);
init.do_nothing();
return val;
}
- static const cpp_dec_float& inf()
+
+ static const cpp_dec_float& inf()
{
static const cpp_dec_float val(cpp_dec_float_inf);
init.do_nothing();
return val;
}
+
static const cpp_dec_float& (max)()
{
init.do_nothing();
- static bool init = false;
- static const std::string str_max = std::string("9." + std::string(static_cast<std::size_t>(cpp_dec_float_total_digits10), static_cast<char>('9')))
- + std::string("e+" + boost::lexical_cast<std::string>(cpp_dec_float_max_exp10));
- static cpp_dec_float val_max;
- if(!init)
- {
- init = true;
- val_max = str_max.c_str();
- }
+ static cpp_dec_float val_max = std::string("1.0e" + boost::lexical_cast<std::string>(cpp_dec_float_max_exp10)).c_str();
return val_max;
}
static const cpp_dec_float& (min)()
{
init.do_nothing();
- static bool init = false;
- static cpp_dec_float val_min;
- if(!init)
- {
- init = true;
- val_min = std::string("1.0e" + boost::lexical_cast<std::string>(cpp_dec_float_min_exp10)).c_str();
- }
+ static cpp_dec_float val_min = std::string("1.0e" + boost::lexical_cast<std::string>(cpp_dec_float_min_exp10)).c_str();
return val_min;
}
- static const cpp_dec_float& zero()
+
+ static const cpp_dec_float& zero()
{
init.do_nothing();
static cpp_dec_float val(static_cast<unsigned long long>(0u));
return val;
}
- static const cpp_dec_float& one()
+
+ static const cpp_dec_float& one()
{
init.do_nothing();
static cpp_dec_float val(static_cast<unsigned long long>(1u));
return val;
}
- static const cpp_dec_float& two()
+
+ static const cpp_dec_float& two()
{
init.do_nothing();
static cpp_dec_float val(static_cast<unsigned long long>(2u));
return val;
}
- static const cpp_dec_float& half()
+
+ static const cpp_dec_float& half()
{
init.do_nothing();
static cpp_dec_float val(0.5L);
return val;
}
- static const cpp_dec_float& double_min()
+
+ static const cpp_dec_float& double_min()
{
init.do_nothing();
static cpp_dec_float val(static_cast<long double>((std::numeric_limits<double>::min)()));
return val;
}
- static const cpp_dec_float& double_max()
+
+ static const cpp_dec_float& double_max()
{
init.do_nothing();
static cpp_dec_float val(static_cast<long double>((std::numeric_limits<double>::max)()));
return val;
}
- static const cpp_dec_float& long_double_min()
+
+ static const cpp_dec_float& long_double_min()
{
init.do_nothing();
static cpp_dec_float val((std::numeric_limits<long double>::min)());
return val;
}
- static const cpp_dec_float& long_double_max()
+
+ static const cpp_dec_float& long_double_max()
{
init.do_nothing();
static cpp_dec_float val((std::numeric_limits<long double>::max)());
return val;
}
- static const cpp_dec_float& long_long_max()
+
+ static const cpp_dec_float& long_long_max()
{
init.do_nothing();
static cpp_dec_float val((std::numeric_limits<long long>::max)());
return val;
}
- static const cpp_dec_float& long_long_min()
+
+ static const cpp_dec_float& long_long_min()
{
init.do_nothing();
static cpp_dec_float val((std::numeric_limits<long long>::min)());
return val;
}
- static const cpp_dec_float& ulong_long_max()
+
+ static const cpp_dec_float& ulong_long_max()
{
init.do_nothing();
static cpp_dec_float val((std::numeric_limits<unsigned long long>::max)());
return val;
}
- static const cpp_dec_float& eps()
+
+ static const cpp_dec_float& eps()
{
init.do_nothing();
- static cpp_dec_float val(1.0, 1 - (int)Digits10);
+ static cpp_dec_float val(1.0, 1 - static_cast<int>(cpp_dec_float_digits10));
return val;
}
// Basic operations.
- cpp_dec_float& operator= (const cpp_dec_float& v)
+ cpp_dec_float& operator=(const cpp_dec_float& v)
{
data = v.data;
exp = v.exp;
@@ -375,9 +375,10 @@ public:
prec_elem = v.prec_elem;
return *this;
}
+
template <unsigned D>
- cpp_dec_float& operator=(const cpp_dec_float<D>& f)
- {
+ cpp_dec_float& operator=(const cpp_dec_float<D>& f)
+ {
exp = f.exp;
neg = f.neg;
fpclass = static_cast<enum_fpclass_type>(static_cast<int>(f.fpclass));
@@ -387,7 +388,8 @@ public:
prec_elem = cpp_dec_float_elem_number;
return *this;
}
- cpp_dec_float& operator= (long long v)
+
+ cpp_dec_float& operator=(long long v)
{
if(v < 0)
{
@@ -398,82 +400,91 @@ public:
from_unsigned_long_long(v);
return *this;
}
- cpp_dec_float& operator= (unsigned long long v)
+
+ cpp_dec_float& operator=(unsigned long long v)
{
from_unsigned_long_long(v);
return *this;
}
- cpp_dec_float& operator= (long double v) ;
- cpp_dec_float& operator= (const char* v)
+
+ cpp_dec_float& operator=(long double v);
+
+ cpp_dec_float& operator=(const char* v)
{
rd_string(v);
return *this;
}
- cpp_dec_float& operator+=(const cpp_dec_float& v) ;
- cpp_dec_float& operator-=(const cpp_dec_float& v) ;
- cpp_dec_float& operator*=(const cpp_dec_float& v) ;
- cpp_dec_float& operator/=(const cpp_dec_float& v) ;
-
- cpp_dec_float& add_unsigned_long_long(const unsigned long long n)
+ cpp_dec_float& operator+=(const cpp_dec_float& v);
+ cpp_dec_float& operator-=(const cpp_dec_float& v);
+ cpp_dec_float& operator*=(const cpp_dec_float& v);
+ cpp_dec_float& operator/=(const cpp_dec_float& v);
+
+ cpp_dec_float& add_unsigned_long_long(const unsigned long long n)
{
cpp_dec_float t;
t.from_unsigned_long_long(n);
return *this += t;
}
- cpp_dec_float& sub_unsigned_long_long(const unsigned long long n)
+
+ cpp_dec_float& sub_unsigned_long_long(const unsigned long long n)
{
cpp_dec_float t;
t.from_unsigned_long_long(n);
return *this -= t;
}
+
cpp_dec_float& mul_unsigned_long_long(const unsigned long long n);
cpp_dec_float& div_unsigned_long_long(const unsigned long long n);
// Elementary primitives.
- cpp_dec_float& calculate_inv (void) ;
- cpp_dec_float& calculate_sqrt(void) ;
- void negate()
- {
+ cpp_dec_float& calculate_inv ();
+ cpp_dec_float& calculate_sqrt();
+
+ void negate()
+ {
if(!iszero())
neg = !neg;
}
// Comparison functions
- bool isnan (void) const { return (fpclass == cpp_dec_float_NaN); }
- bool isinf (void) const { return (fpclass == cpp_dec_float_inf); }
- bool isfinite(void) const { return (fpclass == cpp_dec_float_finite); }
+ bool isnan BOOST_PREVENT_MACRO_SUBSTITUTION() const { return (fpclass == cpp_dec_float_NaN); }
+ bool isinf BOOST_PREVENT_MACRO_SUBSTITUTION() const { return (fpclass == cpp_dec_float_inf); }
+ bool isfinite BOOST_PREVENT_MACRO_SUBSTITUTION() const { return (fpclass == cpp_dec_float_finite); }
- bool iszero (void) const
+ bool iszero () const
{
return ((fpclass == cpp_dec_float_finite) && (data[0u] == 0u));
}
- bool isone (void) const ;
- bool isint (void) const ;
- bool isneg (void) const { return neg; }
+
+ bool isone () const;
+ bool isint () const;
+ bool isneg () const { return neg; }
// Operators pre-increment and pre-decrement
- cpp_dec_float& operator++(void)
+ cpp_dec_float& operator++()
{
return *this += one();
}
- cpp_dec_float& operator--(void)
+
+ cpp_dec_float& operator--()
{
return *this -= one();
}
std::string str(boost::intmax_t digits, std::ios_base::fmtflags f)const;
- int compare(const cpp_dec_float& v)const ;
+ int compare(const cpp_dec_float& v)const;
+
template <class V>
- int compare(const V& v)const
+ int compare(const V& v)const
{
cpp_dec_float<Digits10, ExponentType, Allocator> t;
t = v;
return compare(t);
}
- void swap(cpp_dec_float& v)
+ void swap(cpp_dec_float& v)
{
data.swap(v.data);
std::swap(exp, v.exp);
@@ -482,13 +493,14 @@ public:
std::swap(prec_elem, v.prec_elem);
}
- double extract_double (void) const;
- long double extract_long_double (void) const;
- signed long long extract_signed_long_long (void) const ;
- unsigned long long extract_unsigned_long_long(void) const ;
- void extract_parts (double& mantissa, ExponentType& exponent) const ;
- cpp_dec_float extract_integer_part (void) const ;
- void precision(const boost::int32_t prec_digits)
+ double extract_double() const;
+ long double extract_long_double() const;
+ signed long long extract_signed_long_long() const;
+ unsigned long long extract_unsigned_long_long() const;
+ void extract_parts(double& mantissa, ExponentType& exponent) const;
+ cpp_dec_float extract_integer_part() const;
+
+ void precision(const boost::int32_t prec_digits)
{
if(prec_digits >= cpp_dec_float_total_digits10)
{
@@ -496,16 +508,16 @@ public:
}
else
{
- const boost::int32_t elems = static_cast<boost::int32_t>( static_cast<boost::int32_t>( (prec_digits + (cpp_dec_float_elem_digits10 / 2)) / cpp_dec_float_elem_digits10)
- + static_cast<boost::int32_t>(((prec_digits % cpp_dec_float_elem_digits10) != 0) ? 1 : 0));
+ const boost::int32_t elems = static_cast<boost::int32_t>( static_cast<boost::int32_t>( (prec_digits + (cpp_dec_float_elem_digits10 / 2)) / cpp_dec_float_elem_digits10)
+ + static_cast<boost::int32_t>(((prec_digits % cpp_dec_float_elem_digits10) != 0) ? 1 : 0));
prec_elem = (std::min)(cpp_dec_float_elem_number, (std::max)(elems, static_cast<boost::int32_t>(2)));
}
}
static cpp_dec_float pow2(long long i);
- ExponentType order()const
+ ExponentType order()const
{
- const bool bo_order_is_zero = ((!isfinite()) || (data[0] == static_cast<boost::uint32_t>(0u)));
+ const bool bo_order_is_zero = ((!(isfinite)()) || (data[0] == static_cast<boost::uint32_t>(0u)));
//
// Binary search to find the order of the leading term:
//
@@ -554,25 +566,35 @@ public:
return (bo_order_is_zero ? static_cast<ExponentType>(0) : static_cast<ExponentType>(exp + prefix));
}
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /*version*/)
+ {
+ for(unsigned i = 0; i < data.size(); ++i)
+ ar & data[i];
+ ar & exp;
+ ar & neg;
+ ar & fpclass;
+ ar & prec_elem;
+ }
+
private:
- static bool data_elem_is_non_zero_predicate(const boost::uint32_t& d) { return (d != static_cast<boost::uint32_t>(0u)); }
- static bool data_elem_is_non_nine_predicate(const boost::uint32_t& d) { return (d != static_cast<boost::uint32_t>(cpp_dec_float::cpp_dec_float_elem_mask - 1)); }
- static bool char_is_nonzero_predicate(const char& c) { return (c != static_cast<char>('0')); }
+ static bool data_elem_is_non_zero_predicate(const boost::uint32_t& d) { return (d != static_cast<boost::uint32_t>(0u)); }
+ static bool data_elem_is_non_nine_predicate(const boost::uint32_t& d) { return (d != static_cast<boost::uint32_t>(cpp_dec_float::cpp_dec_float_elem_mask - 1)); }
+ static bool char_is_nonzero_predicate(const char& c) { return (c != static_cast<char>('0')); }
- void from_unsigned_long_long(const unsigned long long u) ;
+ void from_unsigned_long_long(const unsigned long long u);
- int cmp_data(const array_type& vd) const ;
+ int cmp_data(const array_type& vd) const;
- static boost::uint32_t mul_loop_uv(boost::uint32_t* const u, const boost::uint32_t* const v, const boost::int32_t p) ;
- static boost::uint32_t mul_loop_n (boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p) ;
- static boost::uint32_t div_loop_n (boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p) ;
+ static boost::uint32_t mul_loop_uv(boost::uint32_t* const u, const boost::uint32_t* const v, const boost::int32_t p);
+ static boost::uint32_t mul_loop_n (boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p);
+ static boost::uint32_t div_loop_n (boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p);
bool rd_string(const char* const s);
template <unsigned D, class ET, class A>
friend class cpp_dec_float;
-
};
template <unsigned Digits10, class ExponentType, class Allocator>
@@ -605,18 +627,17 @@ const boost::int32_t cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_f
template <unsigned Digits10, class ExponentType, class Allocator>
const boost::int32_t cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_elem_mask;
-
template <unsigned Digits10, class ExponentType, class Allocator>
cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::operator+=(const cpp_dec_float<Digits10, ExponentType, Allocator>& v)
{
- if(isnan())
+ if((isnan)())
{
return *this;
}
- if(isinf())
+ if((isinf)())
{
- if(v.isinf() && (isneg() != v.isneg()))
+ if((v.isinf)() && (isneg() != v.isneg()))
{
*this = nan();
}
@@ -647,11 +668,11 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
// Do the add/sub operation.
- typename array_type::iterator p_u = data.begin();
- typename array_type::const_iterator p_v = v.data.begin();
- bool b_copy = false;
- const boost::int32_t ofs = static_cast<boost::int32_t>(static_cast<boost::int32_t>(ofs_exp) / cpp_dec_float_elem_digits10);
- array_type n_data;
+ typename array_type::iterator p_u = data.begin();
+ typename array_type::const_iterator p_v = v.data.begin();
+ bool b_copy = false;
+ const boost::int32_t ofs = static_cast<boost::int32_t>(static_cast<boost::int32_t>(ofs_exp) / cpp_dec_float_elem_digits10);
+ array_type n_data;
if(neg == v.neg)
{
@@ -679,14 +700,14 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
for(boost::int32_t j = static_cast<boost::int32_t>(cpp_dec_float_elem_number - static_cast<boost::int32_t>(1)); j >= static_cast<boost::int32_t>(0); j--)
{
boost::uint32_t t = static_cast<boost::uint32_t>(static_cast<boost::uint32_t>(p_u[j] + p_v[j]) + carry);
- carry = t / static_cast<boost::uint32_t>(cpp_dec_float_elem_mask);
- p_u[j] = static_cast<boost::uint32_t>(t - static_cast<boost::uint32_t>(carry * static_cast<boost::uint32_t>(cpp_dec_float_elem_mask)));
+ carry = t / static_cast<boost::uint32_t>(cpp_dec_float_elem_mask);
+ p_u[j] = static_cast<boost::uint32_t>(t - static_cast<boost::uint32_t>(carry * static_cast<boost::uint32_t>(cpp_dec_float_elem_mask)));
}
if(b_copy)
{
data = n_data;
- exp = v.exp;
+ exp = v.exp;
}
// There needs to be a carry into the element -1 of the array data
@@ -702,7 +723,7 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
// Subtract v from *this, where the data array of either *this or v
// might have to be treated with a positive, negative or zero offset.
if((ofs > static_cast<boost::int32_t>(0))
- || ( (ofs == static_cast<boost::int32_t>(0))
+ || ( (ofs == static_cast<boost::int32_t>(0))
&& (cmp_data(v.data) > static_cast<boost::int32_t>(0)))
)
{
@@ -729,8 +750,8 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
// operand pointer p_v to point to the shifted
// data m_data.
n_data = v.data;
- p_u = n_data.begin();
- p_v = data.begin();
+ p_u = n_data.begin();
+ p_v = data.begin();
b_copy = true;
}
@@ -741,14 +762,14 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
for(j = static_cast<boost::int32_t>(cpp_dec_float_elem_number - static_cast<boost::int32_t>(1)); j >= static_cast<boost::int32_t>(0); j--)
{
- boost::int32_t t = static_cast<boost::int32_t>(static_cast<boost::int32_t>( static_cast<boost::int32_t>(p_u[j])
+ boost::int32_t t = static_cast<boost::int32_t>(static_cast<boost::int32_t>( static_cast<boost::int32_t>(p_u[j])
- static_cast<boost::int32_t>(p_v[j])) - borrow);
// Underflow? Borrow?
if(t < static_cast<boost::int32_t>(0))
{
// Yes, underflow and borrow
- t += static_cast<boost::int32_t>(cpp_dec_float_elem_mask);
+ t += static_cast<boost::int32_t>(cpp_dec_float_elem_mask);
borrow = static_cast<boost::int32_t>(1);
}
else
@@ -762,8 +783,8 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
if(b_copy)
{
data = n_data;
- exp = v.exp;
- neg = v.neg;
+ exp = v.exp;
+ neg = v.neg;
}
// Is it necessary to justify the data?
@@ -791,43 +812,30 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
}
}
- // Check for underflow.
- if(iszero())
- {
- return *this = zero();
- }
+ // Handle underflow.
+ if(iszero())
+ return (*this = zero());
- bool overflow = exp >= cpp_dec_float_max_exp10;
- if(exp == cpp_dec_float_max_exp10)
- {
- // Check to see if we really truly have an overflow or not...
- if(isneg())
- {
- cpp_dec_float t(*this);
- t.negate();
- overflow = t.compare((max)()) > 0;
- }
- else
- {
- overflow = compare((max)()) > 0;
- }
- }
+ // Check for potential overflow.
+ const bool b_result_might_overflow = (exp >= static_cast<ExponentType>(cpp_dec_float_max_exp10));
- // Check for overflow.
- if(overflow)
+ // Handle overflow.
+ if(b_result_might_overflow)
{
const bool b_result_is_neg = neg;
+ neg = false;
- *this = inf();
- if(b_result_is_neg)
- negate();
+ if(compare((cpp_dec_float::max)()) > 0)
+ *this = inf();
+
+ neg = b_result_is_neg;
}
return *this;
}
template <unsigned Digits10, class ExponentType, class Allocator>
-cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::operator-=(const cpp_dec_float<Digits10, ExponentType, Allocator>& v)
+cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::operator-=(const cpp_dec_float<Digits10, ExponentType, Allocator>& v)
{
// Use *this - v = -(-*this + v).
negate();
@@ -837,7 +845,7 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
}
template <unsigned Digits10, class ExponentType, class Allocator>
-cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::operator*=(const cpp_dec_float<Digits10, ExponentType, Allocator>& v)
+cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::operator*=(const cpp_dec_float<Digits10, ExponentType, Allocator>& v)
{
// Evaluate the sign of the result.
const bool b_result_is_neg = (neg != v.neg);
@@ -846,12 +854,12 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
neg = false;
// Handle special cases like zero, inf and NaN.
- const bool b_u_is_inf = isinf();
- const bool b_v_is_inf = v.isinf();
- const bool b_u_is_zero = iszero();
+ const bool b_u_is_inf = (isinf)();
+ const bool b_v_is_inf = (v.isinf)();
+ const bool b_u_is_zero = iszero();
const bool b_v_is_zero = v.iszero();
- if( (isnan() || v.isnan())
+ if( ((isnan)() || (v.isnan)())
|| (b_u_is_inf && b_v_is_zero)
|| (b_v_is_inf && b_u_is_zero)
)
@@ -873,34 +881,9 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
return *this = zero();
}
- // Check for overflow or underflow.
- const bool u_exp_is_neg = (exp < static_cast<ExponentType>(0));
- const bool v_exp_is_neg = (v.exp < static_cast<ExponentType>(0));
-
- if(u_exp_is_neg == v_exp_is_neg)
- {
- // Get the unsigned base-10 exponents of *this and v and...
- const ExponentType u_exp = ((!u_exp_is_neg) ? exp : static_cast<ExponentType>( -exp));
- const ExponentType v_exp = ((!v_exp_is_neg) ? v.exp : static_cast<ExponentType>(-v.exp));
-
- // Check the range of the upcoming multiplication.
- const bool b_result_is_out_of_range = (v_exp >= static_cast<ExponentType>(cpp_dec_float_max_exp10 - u_exp));
-
- if(b_result_is_out_of_range)
- {
- if(u_exp_is_neg)
- {
- *this = zero();
- }
- else
- {
- *this = inf();
- if(b_result_is_neg)
- negate();
- }
- return *this;
- }
- }
+ // Check for potential overflow or underflow.
+ const bool b_result_might_overflow = ((exp + v.exp) >= static_cast<ExponentType>(cpp_dec_float_max_exp10));
+ const bool b_result_might_underflow = ((exp + v.exp) <= static_cast<ExponentType>(cpp_dec_float_min_exp10));
// Set the exponent of the result.
exp += v.exp;
@@ -923,6 +906,20 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
data.front() = carry;
}
+ // Handle overflow.
+ if(b_result_might_overflow && (compare((cpp_dec_float::max)()) > 0))
+ {
+ *this = inf();
+ }
+
+ // Handle underflow.
+ if(b_result_might_underflow && (compare((cpp_dec_float::min)()) < 0))
+ {
+ *this = zero();
+
+ return *this;
+ }
+
// Set the sign of the result.
neg = b_result_is_neg;
@@ -930,11 +927,11 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
}
template <unsigned Digits10, class ExponentType, class Allocator>
-cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::operator/=(const cpp_dec_float<Digits10, ExponentType, Allocator>& v)
+cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::operator/=(const cpp_dec_float<Digits10, ExponentType, Allocator>& v)
{
- const bool u_and_v_are_finite_and_identical = ( isfinite()
+ const bool u_and_v_are_finite_and_identical = ( (isfinite)()
&& (fpclass == v.fpclass)
- && (exp == v.exp)
+ && (exp == v.exp)
&& (cmp_data(v.data) == static_cast<boost::int32_t>(0)));
if(u_and_v_are_finite_and_identical)
@@ -952,7 +949,7 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
{
if(iszero())
{
- if(v.isnan() || v.iszero())
+ if((v.isnan)() || v.iszero())
{
return *this = v;
}
@@ -965,7 +962,7 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
}
template <unsigned Digits10, class ExponentType, class Allocator>
-cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::mul_unsigned_long_long(const unsigned long long n)
+cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::mul_unsigned_long_long(const unsigned long long n)
{
// Multiply *this with a constant unsigned long long.
@@ -976,10 +973,10 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
neg = false;
// Handle special cases like zero, inf and NaN.
- const bool b_u_is_inf = isinf();
+ const bool b_u_is_inf = (isinf)();
const bool b_n_is_zero = (n == static_cast<boost::int32_t>(0));
- if(isnan() || (b_u_is_inf && b_n_is_zero))
+ if((isnan)() || (b_u_is_inf && b_n_is_zero))
{
return (*this = nan());
}
@@ -1029,28 +1026,13 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
data.front() = static_cast<boost::uint32_t>(carry);
}
- bool overflow = exp >= cpp_dec_float_max_exp10;
- if(exp == cpp_dec_float_max_exp10)
- {
- // Check to see if we really truly have an overflow or not...
- if(isneg())
- {
- cpp_dec_float t(*this);
- t.negate();
- overflow = t.compare((max)()) > 0;
- }
- else
- {
- overflow = compare((max)()) > 0;
- }
- }
+ // Check for potential overflow.
+ const bool b_result_might_overflow = (exp >= cpp_dec_float_max_exp10);
- if(overflow)
+ // Handle overflow.
+ if(b_result_might_overflow && (compare((cpp_dec_float::max)()) > 0))
{
*this = inf();
- if(b_neg)
- negate();
- return *this;
}
// Set the sign.
@@ -1060,7 +1042,7 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
}
template <unsigned Digits10, class ExponentType, class Allocator>
-cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::div_unsigned_long_long(const unsigned long long n)
+cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::div_unsigned_long_long(const unsigned long long n)
{
// Divide *this by a constant unsigned long long.
@@ -1071,12 +1053,12 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
neg = false;
// Handle special cases like zero, inf and NaN.
- if(isnan())
+ if((isnan)())
{
return *this;
}
- if(isinf())
+ if((isinf)())
{
*this = inf();
if(b_neg)
@@ -1136,20 +1118,21 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
}
}
- // Check for underflow.
- if(iszero())
- {
- return *this = zero();
- }
+ // Check for potential underflow.
+ const bool b_result_might_underflow = (exp <= cpp_dec_float_min_exp10);
+
+ // Handle underflow.
+ if(b_result_might_underflow && (compare((cpp_dec_float::min)()) < 0))
+ return (*this = zero());
// Set the sign of the result.
neg = b_neg;
- return *this;
+ return *this;
}
template <unsigned Digits10, class ExponentType, class Allocator>
-cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::calculate_inv()
+cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::calculate_inv()
{
// Compute the inverse of *this.
const bool b_neg = neg;
@@ -1165,12 +1148,12 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
return *this;
}
- if(isnan())
+ if((isnan)())
{
return *this;
}
- if(isinf())
+ if((isinf)())
{
return *this = zero();
}
@@ -1189,7 +1172,7 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
// Extract the mantissa and exponent for a "manual"
// computation of the estimate.
double dd;
- ExponentType ne;
+ ExponentType ne;
x.extract_parts(dd, ne);
// Do the inverse estimate using double precision estimates of mantissa and exponent.
@@ -1223,11 +1206,11 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
}
template <unsigned Digits10, class ExponentType, class Allocator>
-cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::calculate_sqrt(void)
+cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, ExponentType, Allocator>::calculate_sqrt()
{
// Compute the square root of *this.
- if(isneg() || (!isfinite()))
+ if(isneg() || (!(isfinite)()))
{
*this = nan();
return *this;
@@ -1245,7 +1228,7 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
// Extract the mantissa and exponent for a "manual"
// computation of the estimate.
double dd;
- ExponentType ne;
+ ExponentType ne;
extract_parts(dd, ne);
// Force the exponent to be an even multiple of two.
@@ -1306,12 +1289,12 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
}
template <unsigned Digits10, class ExponentType, class Allocator>
-int cpp_dec_float<Digits10, ExponentType, Allocator>::cmp_data(const array_type& vd) const
+int cpp_dec_float<Digits10, ExponentType, Allocator>::cmp_data(const array_type& vd) const
{
// Compare the data of *this with those of v.
- // Return +1 for *this > v
- // 0 for *this = v
- // -1 for *this < v
+ // Return +1 for *this > v
+ // 0 for *this = v
+ // -1 for *this < v
const std::pair<typename array_type::const_iterator, typename array_type::const_iterator> mismatch_pair = std::mismatch(data.begin(), data.end(), vd.begin());
@@ -1328,29 +1311,29 @@ int cpp_dec_float<Digits10, ExponentType, Allocator>::cmp_data(const array_type&
}
template <unsigned Digits10, class ExponentType, class Allocator>
-int cpp_dec_float<Digits10, ExponentType, Allocator>::compare(const cpp_dec_float& v) const
+int cpp_dec_float<Digits10, ExponentType, Allocator>::compare(const cpp_dec_float& v) const
{
// Compare v with *this.
- // Return +1 for *this > v
- // 0 for *this = v
- // -1 for *this < v
+ // Return +1 for *this > v
+ // 0 for *this = v
+ // -1 for *this < v
// Handle all non-finite cases.
- if((!isfinite()) || (!v.isfinite()))
+ if((!(isfinite)()) || (!(v.isfinite)()))
{
// NaN can never equal NaN. Return an implementation-dependent
// signed result. Also note that comparison of NaN with NaN
// using operators greater-than or less-than is undefined.
- if(isnan() || v.isnan()) { return (isnan() ? 1 : -1); }
+ if((isnan)() || (v.isnan)()) { return ((isnan)() ? 1 : -1); }
- if(isinf() && v.isinf())
+ if((isinf)() && (v.isinf)())
{
// Both *this and v are infinite. They are equal if they have the same sign.
// Otherwise, *this is less than v if and only if *this is negative.
return ((neg == v.neg) ? 0 : (neg ? -1 : 1));
}
- if(isinf())
+ if((isinf)())
{
// *this is infinite, but v is finite.
// So negative infinite *this is less than any finite v.
@@ -1406,11 +1389,11 @@ int cpp_dec_float<Digits10, ExponentType, Allocator>::compare(const cpp_dec_floa
}
template <unsigned Digits10, class ExponentType, class Allocator>
-bool cpp_dec_float<Digits10, ExponentType, Allocator>::isone() const
+bool cpp_dec_float<Digits10, ExponentType, Allocator>::isone() const
{
// Check if the value of *this is identically 1 or very close to 1.
- const bool not_negative_and_is_finite = ((!neg) && isfinite());
+ const bool not_negative_and_is_finite = ((!neg) && (isfinite)());
if(not_negative_and_is_finite)
{
@@ -1430,7 +1413,7 @@ bool cpp_dec_float<Digits10, ExponentType, Allocator>::isone() const
}
template <unsigned Digits10, class ExponentType, class Allocator>
-bool cpp_dec_float<Digits10, ExponentType, Allocator>::isint() const
+bool cpp_dec_float<Digits10, ExponentType, Allocator>::isint() const
{
if(fpclass != cpp_dec_float_finite) { return false; }
@@ -1453,14 +1436,14 @@ bool cpp_dec_float<Digits10, ExponentType, Allocator>::isint() const
}
template <unsigned Digits10, class ExponentType, class Allocator>
-void cpp_dec_float<Digits10, ExponentType, Allocator>::extract_parts(double& mantissa, ExponentType& exponent) const
+void cpp_dec_float<Digits10, ExponentType, Allocator>::extract_parts(double& mantissa, ExponentType& exponent) const
{
// Extract the approximate parts mantissa and base-10 exponent from the input cpp_dec_float<Digits10, ExponentType, Allocator> value x.
// Extracts the mantissa and exponent.
exponent = exp;
- boost::uint32_t p10 = static_cast<boost::uint32_t>(1u);
+ boost::uint32_t p10 = static_cast<boost::uint32_t>(1u);
boost::uint32_t test = data[0u];
for(;;)
@@ -1477,7 +1460,7 @@ void cpp_dec_float<Digits10, ExponentType, Allocator>::extract_parts(double& man
}
// Establish the upper bound of limbs for extracting the double.
- const int max_elem_in_double_count = static_cast<int>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) / cpp_dec_float_elem_digits10)
+ const int max_elem_in_double_count = static_cast<int>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) / cpp_dec_float_elem_digits10)
+ (static_cast<int>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) % cpp_dec_float_elem_digits10) != 0 ? 1 : 0)
+ 1;
@@ -1501,20 +1484,20 @@ void cpp_dec_float<Digits10, ExponentType, Allocator>::extract_parts(double& man
}
template <unsigned Digits10, class ExponentType, class Allocator>
-double cpp_dec_float<Digits10, ExponentType, Allocator>::extract_double(void) const
+double cpp_dec_float<Digits10, ExponentType, Allocator>::extract_double() const
{
// Returns the double conversion of a cpp_dec_float<Digits10, ExponentType, Allocator>.
// Check for non-normal cpp_dec_float<Digits10, ExponentType, Allocator>.
- if(!isfinite())
+ if(!(isfinite)())
{
- if(isnan())
+ if((isnan)())
{
return std::numeric_limits<double>::quiet_NaN();
}
else
{
- return ((!neg) ? std::numeric_limits<double>::infinity()
+ return ((!neg) ? std::numeric_limits<double>::infinity()
: -std::numeric_limits<double>::infinity());
}
}
@@ -1532,7 +1515,7 @@ double cpp_dec_float<Digits10, ExponentType, Allocator>::extract_double(void) co
// Check if *this cpp_dec_float<Digits10, ExponentType, Allocator> exceeds the maximum of double.
if(xx.compare(double_max()) > 0)
{
- return ((!neg) ? std::numeric_limits<double>::infinity()
+ return ((!neg) ? std::numeric_limits<double>::infinity()
: -std::numeric_limits<double>::infinity());
}
@@ -1547,20 +1530,20 @@ double cpp_dec_float<Digits10, ExponentType, Allocator>::extract_double(void) co
}
template <unsigned Digits10, class ExponentType, class Allocator>
-long double cpp_dec_float<Digits10, ExponentType, Allocator>::extract_long_double(void) const
+long double cpp_dec_float<Digits10, ExponentType, Allocator>::extract_long_double() const
{
// Returns the long double conversion of a cpp_dec_float<Digits10, ExponentType, Allocator>.
// Check if *this cpp_dec_float<Digits10, ExponentType, Allocator> is subnormal.
- if(!isfinite())
+ if(!(isfinite)())
{
- if(isnan())
+ if((isnan)())
{
return std::numeric_limits<long double>::quiet_NaN();
}
else
{
- return ((!neg) ? std::numeric_limits<long double>::infinity()
+ return ((!neg) ? std::numeric_limits<long double>::infinity()
: -std::numeric_limits<long double>::infinity());
}
}
@@ -1578,7 +1561,7 @@ long double cpp_dec_float<Digits10, ExponentType, Allocator>::extract_long_doubl
// Check if *this cpp_dec_float<Digits10, ExponentType, Allocator> exceeds the maximum of double.
if(xx.compare(long_double_max()) > 0)
{
- return ((!neg) ? std::numeric_limits<long double>::infinity()
+ return ((!neg) ? std::numeric_limits<long double>::infinity()
: -std::numeric_limits<long double>::infinity());
}
@@ -1593,7 +1576,7 @@ long double cpp_dec_float<Digits10, ExponentType, Allocator>::extract_long_doubl
}
template <unsigned Digits10, class ExponentType, class Allocator>
-signed long long cpp_dec_float<Digits10, ExponentType, Allocator>::extract_signed_long_long(void) const
+signed long long cpp_dec_float<Digits10, ExponentType, Allocator>::extract_signed_long_long() const
{
// Extracts a signed long long from *this.
// If (x > maximum of signed long long) or (x < minimum of signed long long),
@@ -1612,7 +1595,7 @@ signed long long cpp_dec_float<Digits10, ExponentType, Allocator>::extract_signe
{
return (std::numeric_limits<signed long long>::max)();
}
- else if(b_neg && (compare(long_long_min()) < 0))
+ else if(b_neg && (compare(long_long_min()) < 0))
{
return (std::numeric_limits<signed long long>::min)();
}
@@ -1634,11 +1617,25 @@ signed long long cpp_dec_float<Digits10, ExponentType, Allocator>::extract_signe
}
}
- return ((!b_neg) ? static_cast<signed long long>(val) : static_cast<signed long long>(-static_cast<signed long long>(val)));
+ if (!b_neg)
+ {
+ return static_cast<signed long long>(val);
+ }
+ else
+ {
+ // This strange expression avoids a hardware trap in the corner case
+ // that val is the most negative value permitted in long long.
+ // See https://svn.boost.org/trac/boost/ticket/9740.
+ //
+ signed long long sval = static_cast<signed long long>(val - 1);
+ sval = -sval;
+ --sval;
+ return sval;
+ }
}
template <unsigned Digits10, class ExponentType, class Allocator>
-unsigned long long cpp_dec_float<Digits10, ExponentType, Allocator>::extract_unsigned_long_long(void) const
+unsigned long long cpp_dec_float<Digits10, ExponentType, Allocator>::extract_unsigned_long_long() const
{
// Extracts an unsigned long long from *this.
// If x exceeds the maximum of unsigned long long,
@@ -1682,11 +1679,11 @@ unsigned long long cpp_dec_float<Digits10, ExponentType, Allocator>::extract_uns
}
template <unsigned Digits10, class ExponentType, class Allocator>
-cpp_dec_float<Digits10, ExponentType, Allocator> cpp_dec_float<Digits10, ExponentType, Allocator>::extract_integer_part(void) const
+cpp_dec_float<Digits10, ExponentType, Allocator> cpp_dec_float<Digits10, ExponentType, Allocator>::extract_integer_part() const
{
// Compute the signed integer part of x.
- if(!isfinite())
+ if(!(isfinite)())
{
return *this;
}
@@ -1706,9 +1703,10 @@ cpp_dec_float<Digits10, ExponentType, Allocator> cpp_dec_float<Digits10, Exponen
// Clear out the decimal portion
const size_t first_clear = (static_cast<size_t>(x.exp) / static_cast<size_t>(cpp_dec_float_elem_digits10)) + 1u;
- const size_t last_clear = static_cast<size_t>(cpp_dec_float_elem_number);
+ const size_t last_clear = static_cast<size_t>(cpp_dec_float_elem_number);
- std::fill(x.data.begin() + first_clear, x.data.begin() + last_clear, static_cast<boost::uint32_t>(0u));
+ if(first_clear < last_clear)
+ std::fill(x.data.begin() + first_clear, x.data.begin() + last_clear, static_cast<boost::uint32_t>(0u));
return x;
}
@@ -1716,16 +1714,16 @@ cpp_dec_float<Digits10, ExponentType, Allocator> cpp_dec_float<Digits10, Exponen
template <unsigned Digits10, class ExponentType, class Allocator>
std::string cpp_dec_float<Digits10, ExponentType, Allocator>::str(boost::intmax_t number_of_digits, std::ios_base::fmtflags f) const
{
- if(this->isinf())
+ if((this->isinf)())
{
if(this->isneg())
return "-inf";
else if(f & std::ios_base::showpos)
return "+inf";
- else
+ else
return "inf";
}
- else if(this->isnan())
+ else if((this->isnan)())
{
return "nan";
}
@@ -1733,8 +1731,10 @@ std::string cpp_dec_float<Digits10, ExponentType, Allocator>::str(boost::intmax_
std::string str;
boost::intmax_t org_digits(number_of_digits);
ExponentType my_exp = order();
+
if(number_of_digits == 0)
number_of_digits = cpp_dec_float_total_digits10;
+
if(f & std::ios_base::fixed)
{
number_of_digits += my_exp + 1;
@@ -1759,15 +1759,18 @@ std::string cpp_dec_float<Digits10, ExponentType, Allocator>::str(boost::intmax_
str += ss.str();
}
+
bool have_leading_zeros = false;
+
if(number_of_digits == 0)
{
// We only get here if the output format is "fixed" and we just need to
// round the first non-zero digit.
- number_of_digits -= my_exp + 1; // reset to original value
+ number_of_digits -= my_exp + 1; // reset to original value
str.insert(0, std::string::size_type(number_of_digits), '0');
have_leading_zeros = true;
}
+
if(number_of_digits < 0)
{
str = "0";
@@ -1806,7 +1809,7 @@ std::string cpp_dec_float<Digits10, ExponentType, Allocator>::str(boost::intmax_
}
}
if(all_zeros)
- need_round_up = false; // tie break - round to even.
+ need_round_up = false; // tie break - round to even.
}
}
}
@@ -1848,6 +1851,7 @@ std::string cpp_dec_float<Digits10, ExponentType, Allocator>::str(boost::intmax_
}
}
}
+
if(have_leading_zeros)
{
// We need to take the zeros back out again, and correct the exponent
@@ -1860,8 +1864,10 @@ std::string cpp_dec_float<Digits10, ExponentType, Allocator>::str(boost::intmax_
else
str.erase(0, std::string::size_type(number_of_digits));
}
+
if(isneg())
str.insert(0, 1, '-');
+
boost::multiprecision::detail::format_float_string(str, my_exp, org_digits, f, this->iszero());
return str;
}
@@ -1881,7 +1887,7 @@ bool cpp_dec_float<Digits10, ExponentType, Allocator>::rd_string(const char* con
std::size_t pos;
- if( ((pos = str.find('e')) != std::string::npos)
+ if( ((pos = str.find('e')) != std::string::npos)
|| ((pos = str.find('E')) != std::string::npos)
)
{
@@ -1998,7 +2004,7 @@ bool cpp_dec_float<Digits10, ExponentType, Allocator>::rd_string(const char* con
}
// Shift the decimal point such that the exponent is an even multiple of cpp_dec_float_elem_digits10.
- std::size_t n_shift = static_cast<std::size_t>(0u);
+ std::size_t n_shift = static_cast<std::size_t>(0u);
const std::size_t n_exp_rem = static_cast<std::size_t>(exp % static_cast<ExponentType>(cpp_dec_float_elem_digits10));
if((exp % static_cast<ExponentType>(cpp_dec_float_elem_digits10)) != static_cast<ExponentType>(0))
@@ -2031,14 +2037,14 @@ bool cpp_dec_float<Digits10, ExponentType, Allocator>::rd_string(const char* con
}
// Cut the size of the mantissa to <= cpp_dec_float_elem_digits10.
- pos = str.find(static_cast<char>('.'));
+ pos = str.find(static_cast<char>('.'));
pos_plus_one = static_cast<std::size_t>(pos + 1u);
if(pos > static_cast<std::size_t>(cpp_dec_float_elem_digits10))
{
- const boost::int32_t n_pos = static_cast<boost::int32_t>(pos);
+ const boost::int32_t n_pos = static_cast<boost::int32_t>(pos);
const boost::int32_t n_rem_is_zero = ((static_cast<boost::int32_t>(n_pos % cpp_dec_float_elem_digits10) == static_cast<boost::int32_t>(0)) ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(0));
- const boost::int32_t n = static_cast<boost::int32_t>(static_cast<boost::int32_t>(n_pos / cpp_dec_float_elem_digits10) - n_rem_is_zero);
+ const boost::int32_t n = static_cast<boost::int32_t>(static_cast<boost::int32_t>(n_pos / cpp_dec_float_elem_digits10) - n_rem_is_zero);
str.insert(static_cast<std::size_t>(static_cast<boost::int32_t>(n_pos - static_cast<boost::int32_t>(n * cpp_dec_float_elem_digits10))), ".");
@@ -2049,13 +2055,15 @@ bool cpp_dec_float<Digits10, ExponentType, Allocator>::rd_string(const char* con
// Pad the decimal part such that its value is an even
// multiple of cpp_dec_float_elem_digits10.
- pos = str.find(static_cast<char>('.'));
+ pos = str.find(static_cast<char>('.'));
pos_plus_one = static_cast<std::size_t>(pos + 1u);
const boost::int32_t n_dec = static_cast<boost::int32_t>(static_cast<boost::int32_t>(str.length() - 1u) - static_cast<boost::int32_t>(pos));
const boost::int32_t n_rem = static_cast<boost::int32_t>(n_dec % cpp_dec_float_elem_digits10);
- boost::int32_t n_cnt = ((n_rem != static_cast<boost::int32_t>(0)) ? static_cast<boost::int32_t>(cpp_dec_float_elem_digits10 - n_rem)
- : static_cast<boost::int32_t>(0));
+
+ boost::int32_t n_cnt = ((n_rem != static_cast<boost::int32_t>(0))
+ ? static_cast<boost::int32_t>(cpp_dec_float_elem_digits10 - n_rem)
+ : static_cast<boost::int32_t>(0));
if(n_cnt != static_cast<boost::int32_t>(0))
{
@@ -2087,7 +2095,7 @@ bool cpp_dec_float<Digits10, ExponentType, Allocator>::rd_string(const char* con
for(std::string::size_type i = static_cast<std::string::size_type>(0u); i < i_end; i++)
{
- const std::string::const_iterator it = str.begin()
+ const std::string::const_iterator it = str.begin()
+ pos_plus_one
+ (i * static_cast<std::string::size_type>(cpp_dec_float_elem_digits10));
@@ -2139,11 +2147,11 @@ bool cpp_dec_float<Digits10, ExponentType, Allocator>::rd_string(const char* con
}
template <unsigned Digits10, class ExponentType, class Allocator>
-cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float(const double mantissa, const ExponentType exponent)
- : data (),
- exp (static_cast<ExponentType>(0)),
- neg (false),
- fpclass (cpp_dec_float_finite),
+cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float(const double mantissa, const ExponentType exponent)
+ : data (),
+ exp (static_cast<ExponentType>(0)),
+ neg (false),
+ fpclass (cpp_dec_float_finite),
prec_elem(cpp_dec_float_elem_number)
{
// Create *this cpp_dec_float<Digits10, ExponentType, Allocator> from a given mantissa and exponent.
@@ -2160,10 +2168,10 @@ cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float(const double man
const bool b_neg = (mantissa < 0.0);
double d = ((!b_neg) ? mantissa : -mantissa);
- ExponentType e = exponent;
+ ExponentType e = exponent;
while(d > 10.0) { d /= 10.0; ++e; }
- while(d < 1.0) { d *= 10.0; --e; }
+ while(d < 1.0) { d *= 10.0; --e; }
boost::int32_t shift = static_cast<boost::int32_t>(e % static_cast<boost::int32_t>(cpp_dec_float_elem_digits10));
@@ -2184,9 +2192,9 @@ cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float(const double man
for(boost::int32_t i = static_cast<boost::int32_t>(0); i < digit_loops; i++)
{
boost::uint32_t n = static_cast<boost::uint32_t>(static_cast<boost::uint64_t>(d));
- data[i] = static_cast<boost::uint32_t>(n);
- d -= static_cast<double>(n);
- d *= static_cast<double>(cpp_dec_float_elem_mask);
+ data[i] = static_cast<boost::uint32_t>(n);
+ d -= static_cast<double>(n);
+ d *= static_cast<double>(cpp_dec_float_elem_mask);
}
}
@@ -2199,18 +2207,15 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
using std::ldexp;
using std::floor;
- if (a == 0) {
+ if(a == 0)
return *this = zero();
- }
- if (a == 1) {
+ if(a == 1)
return *this = one();
- }
if((boost::math::isinf)(a))
- {
return *this = inf();
- }
+
if((boost::math::isnan)(a))
return *this = nan();
@@ -2235,13 +2240,15 @@ cpp_dec_float<Digits10, ExponentType, Allocator>& cpp_dec_float<Digits10, Expone
sub_unsigned_long_long(static_cast<unsigned>(-term));
f -= term;
}
+
if(e != 0)
*this *= pow2(e);
+
return *this;
}
template <unsigned Digits10, class ExponentType, class Allocator>
-void cpp_dec_float<Digits10, ExponentType, Allocator>::from_unsigned_long_long(const unsigned long long u)
+void cpp_dec_float<Digits10, ExponentType, Allocator>::from_unsigned_long_long(const unsigned long long u)
{
std::fill(data.begin(), data.end(), static_cast<boost::uint32_t>(0u));
@@ -2273,13 +2280,13 @@ void cpp_dec_float<Digits10, ExponentType, Allocator>::from_unsigned_long_long(c
}
template <unsigned Digits10, class ExponentType, class Allocator>
-boost::uint32_t cpp_dec_float<Digits10, ExponentType, Allocator>::mul_loop_uv(boost::uint32_t* const u, const boost::uint32_t* const v, const boost::int32_t p)
+boost::uint32_t cpp_dec_float<Digits10, ExponentType, Allocator>::mul_loop_uv(boost::uint32_t* const u, const boost::uint32_t* const v, const boost::int32_t p)
{
//
- // There is a limit on how many limbs this algorithm can handle without dropping digits
- // due to overflow in the carry, it is:
+ // There is a limit on how many limbs this algorithm can handle without dropping digits
+ // due to overflow in the carry, it is:
//
- // FLOOR( (2^64 - 1) / (10^8 * 10^8) ) == 1844
+ // FLOOR( (2^64 - 1) / (10^8 * 10^8) ) == 1844
//
BOOST_STATIC_ASSERT_MSG(cpp_dec_float_elem_number < 1800, "Too many limbs in the data type for the multiplication algorithm - unsupported precision in cpp_dec_float.");
@@ -2294,7 +2301,7 @@ boost::uint32_t cpp_dec_float<Digits10, ExponentType, Allocator>::mul_loop_uv(bo
sum += static_cast<boost::uint64_t>(u[j - i] * static_cast<boost::uint64_t>(v[i]));
}
- u[j] = static_cast<boost::uint32_t>(sum % static_cast<boost::uint32_t>(cpp_dec_float_elem_mask));
+ u[j] = static_cast<boost::uint32_t>(sum % static_cast<boost::uint32_t>(cpp_dec_float_elem_mask));
carry = static_cast<boost::uint64_t>(sum / static_cast<boost::uint32_t>(cpp_dec_float_elem_mask));
}
@@ -2302,7 +2309,7 @@ boost::uint32_t cpp_dec_float<Digits10, ExponentType, Allocator>::mul_loop_uv(bo
}
template <unsigned Digits10, class ExponentType, class Allocator>
-boost::uint32_t cpp_dec_float<Digits10, ExponentType, Allocator>::mul_loop_n(boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p)
+boost::uint32_t cpp_dec_float<Digits10, ExponentType, Allocator>::mul_loop_n(boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p)
{
boost::uint64_t carry = static_cast<boost::uint64_t>(0u);
@@ -2310,23 +2317,23 @@ boost::uint32_t cpp_dec_float<Digits10, ExponentType, Allocator>::mul_loop_n(boo
for(boost::int32_t j = p - 1; j >= static_cast<boost::int32_t>(0); j--)
{
const boost::uint64_t t = static_cast<boost::uint64_t>(carry + static_cast<boost::uint64_t>(u[j] * static_cast<boost::uint64_t>(n)));
- carry = static_cast<boost::uint64_t>(t / static_cast<boost::uint32_t>(cpp_dec_float_elem_mask));
- u[j] = static_cast<boost::uint32_t>(t - static_cast<boost::uint64_t>(static_cast<boost::uint32_t>(cpp_dec_float_elem_mask) * static_cast<boost::uint64_t>(carry)));
+ carry = static_cast<boost::uint64_t>(t / static_cast<boost::uint32_t>(cpp_dec_float_elem_mask));
+ u[j] = static_cast<boost::uint32_t>(t - static_cast<boost::uint64_t>(static_cast<boost::uint32_t>(cpp_dec_float_elem_mask) * static_cast<boost::uint64_t>(carry)));
}
return static_cast<boost::uint32_t>(carry);
}
template <unsigned Digits10, class ExponentType, class Allocator>
-boost::uint32_t cpp_dec_float<Digits10, ExponentType, Allocator>::div_loop_n(boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p)
+boost::uint32_t cpp_dec_float<Digits10, ExponentType, Allocator>::div_loop_n(boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p)
{
boost::uint64_t prev = static_cast<boost::uint64_t>(0u);
for(boost::int32_t j = static_cast<boost::int32_t>(0); j < p; j++)
{
const boost::uint64_t t = static_cast<boost::uint64_t>(u[j] + static_cast<boost::uint64_t>(prev * static_cast<boost::uint32_t>(cpp_dec_float_elem_mask)));
- u[j] = static_cast<boost::uint32_t>(t / n);
- prev = static_cast<boost::uint64_t>(t - static_cast<boost::uint64_t>(n * static_cast<boost::uint64_t>(u[j])));
+ u[j] = static_cast<boost::uint32_t>(t / n);
+ prev = static_cast<boost::uint64_t>(t - static_cast<boost::uint64_t>(n * static_cast<boost::uint64_t>(u[j])));
}
return static_cast<boost::uint32_t>(prev);
@@ -2620,80 +2627,80 @@ cpp_dec_float<Digits10, ExponentType, Allocator> cpp_dec_float<Digits10, Exponen
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_add(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& o)
+inline void eval_add(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& o)
{
result += o;
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_subtract(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& o)
+inline void eval_subtract(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& o)
{
result -= o;
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_multiply(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& o)
+inline void eval_multiply(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& o)
{
result *= o;
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_divide(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& o)
+inline void eval_divide(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& o)
{
result /= o;
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_add(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const unsigned long long& o)
+inline void eval_add(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const unsigned long long& o)
{
result.add_unsigned_long_long(o);
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_subtract(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const unsigned long long& o)
+inline void eval_subtract(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const unsigned long long& o)
{
result.sub_unsigned_long_long(o);
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_multiply(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const unsigned long long& o)
+inline void eval_multiply(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const unsigned long long& o)
{
result.mul_unsigned_long_long(o);
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_divide(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const unsigned long long& o)
+inline void eval_divide(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const unsigned long long& o)
{
result.div_unsigned_long_long(o);
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_add(cpp_dec_float<Digits10, ExponentType, Allocator>& result, long long o)
+inline void eval_add(cpp_dec_float<Digits10, ExponentType, Allocator>& result, long long o)
{
if(o < 0)
- result.sub_unsigned_long_long(-o);
+ result.sub_unsigned_long_long(boost::multiprecision::detail::unsigned_abs(o));
else
result.add_unsigned_long_long(o);
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_subtract(cpp_dec_float<Digits10, ExponentType, Allocator>& result, long long o)
+inline void eval_subtract(cpp_dec_float<Digits10, ExponentType, Allocator>& result, long long o)
{
if(o < 0)
- result.add_unsigned_long_long(-o);
+ result.add_unsigned_long_long(boost::multiprecision::detail::unsigned_abs(o));
else
result.sub_unsigned_long_long(o);
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_multiply(cpp_dec_float<Digits10, ExponentType, Allocator>& result, long long o)
+inline void eval_multiply(cpp_dec_float<Digits10, ExponentType, Allocator>& result, long long o)
{
if(o < 0)
{
- result.mul_unsigned_long_long(-o);
+ result.mul_unsigned_long_long(boost::multiprecision::detail::unsigned_abs(o));
result.negate();
}
else
result.mul_unsigned_long_long(o);
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_divide(cpp_dec_float<Digits10, ExponentType, Allocator>& result, long long o)
+inline void eval_divide(cpp_dec_float<Digits10, ExponentType, Allocator>& result, long long o)
{
if(o < 0)
{
- result.div_unsigned_long_long(-o);
+ result.div_unsigned_long_long(boost::multiprecision::detail::unsigned_abs(o));
result.negate();
}
else
@@ -2701,12 +2708,12 @@ inline void eval_divide(cpp_dec_float<Digits10, ExponentType, Allocator>& result
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_convert_to(unsigned long long* result, const cpp_dec_float<Digits10, ExponentType, Allocator>& val)
+inline void eval_convert_to(unsigned long long* result, const cpp_dec_float<Digits10, ExponentType, Allocator>& val)
{
*result = val.extract_unsigned_long_long();
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_convert_to(long long* result, const cpp_dec_float<Digits10, ExponentType, Allocator>& val)
+inline void eval_convert_to(long long* result, const cpp_dec_float<Digits10, ExponentType, Allocator>& val)
{
*result = val.extract_signed_long_long();
}
@@ -2720,11 +2727,11 @@ inline void eval_convert_to(long double* result, cpp_dec_float<Digits10, Exponen
// Non member function support:
//
template <unsigned Digits10, class ExponentType, class Allocator>
-inline int eval_fpclassify(const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
+inline int eval_fpclassify(const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
{
- if(x.isinf())
+ if((x.isinf)())
return FP_INFINITE;
- if(x.isnan())
+ if((x.isnan)())
return FP_NAN;
if(x.iszero())
return FP_ZERO;
@@ -2732,7 +2739,7 @@ inline int eval_fpclassify(const cpp_dec_float<Digits10, ExponentType, Allocator
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_abs(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
+inline void eval_abs(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
{
result = x;
if(x.isneg())
@@ -2740,7 +2747,7 @@ inline void eval_abs(cpp_dec_float<Digits10, ExponentType, Allocator>& result, c
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_fabs(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
+inline void eval_fabs(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
{
result = x;
if(x.isneg())
@@ -2748,19 +2755,19 @@ inline void eval_fabs(cpp_dec_float<Digits10, ExponentType, Allocator>& result,
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_sqrt(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
+inline void eval_sqrt(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
{
result = x;
result.calculate_sqrt();
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_floor(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
+inline void eval_floor(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
{
result = x;
- if(!x.isfinite() || x.isint())
- {
- return;
+ if(!(x.isfinite)() || x.isint())
+ {
+ return;
}
if(x.isneg())
@@ -2769,12 +2776,12 @@ inline void eval_floor(cpp_dec_float<Digits10, ExponentType, Allocator>& result,
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline void eval_ceil(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
+inline void eval_ceil(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
{
result = x;
- if(!x.isfinite() || x.isint())
- {
- return;
+ if(!(x.isfinite)() || x.isint())
+ {
+ return;
}
if(!x.isneg())
@@ -2785,8 +2792,8 @@ inline void eval_ceil(cpp_dec_float<Digits10, ExponentType, Allocator>& result,
template <unsigned Digits10, class ExponentType, class Allocator>
inline void eval_trunc(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x)
{
- if(!x.isfinite())
- {
+ if(!(x.isfinite)())
+ {
result = boost::math::policies::raise_rounding_error("boost::multiprecision::trunc<%1%>(%1%)", 0, number<cpp_dec_float<Digits10, ExponentType, Allocator> >(x), number<cpp_dec_float<Digits10, ExponentType, Allocator> >(x), boost::math::policies::policy<>()).backend();
return;
}
@@ -2799,7 +2806,7 @@ inline void eval_trunc(cpp_dec_float<Digits10, ExponentType, Allocator>& result,
}
template <unsigned Digits10, class ExponentType, class Allocator, class ArgType>
-inline void eval_ldexp(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x, ArgType e)
+inline void eval_ldexp(cpp_dec_float<Digits10, ExponentType, Allocator>& result, const cpp_dec_float<Digits10, ExponentType, Allocator>& x, ArgType e)
{
const long long the_exp = static_cast<long long>(e);
@@ -2808,7 +2815,7 @@ inline void eval_ldexp(cpp_dec_float<Digits10, ExponentType, Allocator>& result,
result = x;
- if ((the_exp > static_cast<long long>(-std::numeric_limits<long long>::digits)) && (the_exp < static_cast<long long>(0)))
+ if ((the_exp > static_cast<long long>(-std::numeric_limits<long long>::digits)) && (the_exp < static_cast<long long>(0)))
result.div_unsigned_long_long(1ULL << static_cast<long long>(-the_exp));
else if((the_exp < static_cast<long long>( std::numeric_limits<long long>::digits)) && (the_exp > static_cast<long long>(0)))
result.mul_unsigned_long_long(1ULL << the_exp);
@@ -2844,7 +2851,7 @@ inline void eval_frexp(cpp_dec_float<Digits10, ExponentType, Allocator>& result,
result *= cpp_dec_float<Digits10, ExponentType, Allocator>::pow2(-t);
- if(result.iszero() || result.isinf() || result.isnan())
+ if(result.iszero() || (result.isinf)() || (result.isnan)())
{
// pow2 overflowed, slip the calculation up:
result = x;
@@ -2895,12 +2902,12 @@ inline typename disable_if<is_same<ExponentType, int> >::type eval_frexp(cpp_dec
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline bool eval_is_zero(const cpp_dec_float<Digits10, ExponentType, Allocator>& val)
+inline bool eval_is_zero(const cpp_dec_float<Digits10, ExponentType, Allocator>& val)
{
return val.iszero();
}
template <unsigned Digits10, class ExponentType, class Allocator>
-inline int eval_get_sign(const cpp_dec_float<Digits10, ExponentType, Allocator>& val)
+inline int eval_get_sign(const cpp_dec_float<Digits10, ExponentType, Allocator>& val)
{
return val.iszero() ? 0 : val.isneg() ? -1 : 1;
}
@@ -2929,43 +2936,43 @@ struct is_explicitly_convertible<cpp_dec_float<D1, E1, A1>, cpp_dec_float<D2, E2
namespace std
{
- template <unsigned Digits10, class ExponentType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+ template <unsigned Digits10, class ExponentType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
class numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> >
{
public:
- BOOST_STATIC_CONSTEXPR bool is_specialized = true;
- BOOST_STATIC_CONSTEXPR bool is_signed = true;
- BOOST_STATIC_CONSTEXPR bool is_integer = false;
- BOOST_STATIC_CONSTEXPR bool is_exact = false;
- BOOST_STATIC_CONSTEXPR bool is_bounded = true;
- BOOST_STATIC_CONSTEXPR bool is_modulo = false;
- BOOST_STATIC_CONSTEXPR bool is_iec559 = false;
- BOOST_STATIC_CONSTEXPR int digits = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_digits10;
- BOOST_STATIC_CONSTEXPR int digits10 = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_digits10;
- BOOST_STATIC_CONSTEXPR int max_digits10 = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_total_digits10;
- BOOST_STATIC_CONSTEXPR ExponentType min_exponent = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_min_exp; // Type differs from int.
- BOOST_STATIC_CONSTEXPR ExponentType min_exponent10 = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_min_exp10; // Type differs from int.
- BOOST_STATIC_CONSTEXPR ExponentType max_exponent = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_max_exp; // Type differs from int.
- BOOST_STATIC_CONSTEXPR ExponentType max_exponent10 = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_max_exp10; // Type differs from int.
- BOOST_STATIC_CONSTEXPR int radix = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_radix;
- BOOST_STATIC_CONSTEXPR std::float_round_style round_style = std::round_to_nearest;
- BOOST_STATIC_CONSTEXPR bool has_infinity = true;
- BOOST_STATIC_CONSTEXPR bool has_quiet_NaN = true;
- BOOST_STATIC_CONSTEXPR bool has_signaling_NaN = false;
- BOOST_STATIC_CONSTEXPR std::float_denorm_style has_denorm = std::denorm_absent;
- BOOST_STATIC_CONSTEXPR bool has_denorm_loss = false;
- BOOST_STATIC_CONSTEXPR bool traps = false;
- BOOST_STATIC_CONSTEXPR bool tinyness_before = false;
-
- BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> (min) (void) { return (boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::min)(); }
- BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> (max) (void) { return (boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::max)(); }
- BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> lowest (void) { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::zero(); }
- BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> epsilon (void) { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::eps(); }
- BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> round_error (void) { return 0.5L; }
- BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> infinity (void) { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::inf(); }
- BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> quiet_NaN (void) { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::nan(); }
- BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> signaling_NaN(void) { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::zero(); }
- BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> denorm_min (void) { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::zero(); }
+ BOOST_STATIC_CONSTEXPR bool is_specialized = true;
+ BOOST_STATIC_CONSTEXPR bool is_signed = true;
+ BOOST_STATIC_CONSTEXPR bool is_integer = false;
+ BOOST_STATIC_CONSTEXPR bool is_exact = false;
+ BOOST_STATIC_CONSTEXPR bool is_bounded = true;
+ BOOST_STATIC_CONSTEXPR bool is_modulo = false;
+ BOOST_STATIC_CONSTEXPR bool is_iec559 = false;
+ BOOST_STATIC_CONSTEXPR int digits = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_digits10;
+ BOOST_STATIC_CONSTEXPR int digits10 = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_digits10;
+ BOOST_STATIC_CONSTEXPR int max_digits10 = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_total_digits10;
+ BOOST_STATIC_CONSTEXPR ExponentType min_exponent = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_min_exp; // Type differs from int.
+ BOOST_STATIC_CONSTEXPR ExponentType min_exponent10 = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_min_exp10; // Type differs from int.
+ BOOST_STATIC_CONSTEXPR ExponentType max_exponent = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_max_exp; // Type differs from int.
+ BOOST_STATIC_CONSTEXPR ExponentType max_exponent10 = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_max_exp10; // Type differs from int.
+ BOOST_STATIC_CONSTEXPR int radix = boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::cpp_dec_float_radix;
+ BOOST_STATIC_CONSTEXPR std::float_round_style round_style = std::round_indeterminate;
+ BOOST_STATIC_CONSTEXPR bool has_infinity = true;
+ BOOST_STATIC_CONSTEXPR bool has_quiet_NaN = true;
+ BOOST_STATIC_CONSTEXPR bool has_signaling_NaN = false;
+ BOOST_STATIC_CONSTEXPR std::float_denorm_style has_denorm = std::denorm_absent;
+ BOOST_STATIC_CONSTEXPR bool has_denorm_loss = false;
+ BOOST_STATIC_CONSTEXPR bool traps = false;
+ BOOST_STATIC_CONSTEXPR bool tinyness_before = false;
+
+ BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> (min) () { return (boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::min)(); }
+ BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> (max) () { return (boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::max)(); }
+ BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> lowest () { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::zero(); }
+ BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> epsilon () { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::eps(); }
+ BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> round_error () { return 0.5L; }
+ BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> infinity () { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::inf(); }
+ BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> quiet_NaN () { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::nan(); }
+ BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> signaling_NaN() { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::zero(); }
+ BOOST_STATIC_CONSTEXPR boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> denorm_min () { return boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>::zero(); }
};
#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
@@ -3032,11 +3039,11 @@ struct precision< boost::multiprecision::number<boost::multiprecision::cpp_dec_f
typedef typename Policy::precision_type precision_type;
typedef digits2<((cpp_dec_float_digits10 + 1LL) * 1000LL) / 301LL> digits_2;
typedef typename mpl::if_c<
- ((digits_2::value <= precision_type::value)
+ ((digits_2::value <= precision_type::value)
|| (Policy::precision_type::value <= 0)),
// Default case, full precision for RealType:
digits_2,
- // User customised precision:
+ // User customized precision:
precision_type
>::type type;
};
@@ -3045,6 +3052,4 @@ struct precision< boost::multiprecision::number<boost::multiprecision::cpp_dec_f
}} // namespaces boost::math
-
#endif
-
diff --git a/3party/boost/boost/multiprecision/cpp_int.hpp b/3party/boost/boost/multiprecision/cpp_int.hpp
index ff518d6f8d..2713b7ec11 100644
--- a/3party/boost/boost/multiprecision/cpp_int.hpp
+++ b/3party/boost/boost/multiprecision/cpp_int.hpp
@@ -19,6 +19,7 @@
#include <boost/detail/endian.hpp>
#include <boost/integer/static_min_max.hpp>
#include <boost/type_traits/common_type.hpp>
+#include <boost/type_traits/make_signed.hpp>
#include <boost/multiprecision/cpp_int/checked.hpp>
#ifdef BOOST_MP_USER_DEFINED_LITERALS
#include <boost/multiprecision/cpp_int/value_pack.hpp>
@@ -28,6 +29,9 @@ namespace boost{
namespace multiprecision{
namespace backends{
+ using boost::enable_if;
+
+
#ifdef BOOST_MSVC
// warning C4127: conditional expression is constant
#pragma warning(push)
@@ -191,10 +195,10 @@ private:
BOOST_CONSTEXPR data_type() : first(0) {}
BOOST_CONSTEXPR data_type(limb_type i) : first(i) {}
- BOOST_CONSTEXPR data_type(signed_limb_type i) : first(i < 0 ? -i : i) {}
+ BOOST_CONSTEXPR data_type(signed_limb_type i) : first(i < 0 ? static_cast<limb_type>(boost::multiprecision::detail::unsigned_abs(i)) : i) {}
#ifdef BOOST_LITTLE_ENDIAN
BOOST_CONSTEXPR data_type(double_limb_type i) : double_first(i) {}
- BOOST_CONSTEXPR data_type(signed_double_limb_type i) : double_first(i < 0 ? -i : i) {}
+ BOOST_CONSTEXPR data_type(signed_double_limb_type i) : double_first(i < 0 ? static_cast<double_limb_type>(boost::multiprecision::detail::unsigned_abs(i)) : i) {}
#endif
};
@@ -214,7 +218,7 @@ public:
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(double_limb_type i)BOOST_NOEXCEPT
: m_data(i), m_limbs(i > max_limb_value ? 2 : 1), m_sign(false), m_internal(true) { }
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(signed_double_limb_type i)BOOST_NOEXCEPT
- : m_data(i), m_limbs(i < 0 ? (-i > max_limb_value ? 2 : 1) : (i > max_limb_value ? 2 : 1)),
+ : m_data(i), m_limbs(i < 0 ? (static_cast<double_limb_type>(boost::multiprecision::detail::unsigned_abs(i)) > static_cast<double_limb_type>(max_limb_value) ? 2 : 1) : (i > max_limb_value ? 2 : 1)),
m_sign(i < 0), m_internal(true) { }
#endif
//
@@ -251,11 +255,7 @@ public:
// Allocate a new buffer and copy everything over:
cap = (std::min)((std::max)(cap * 4, new_size), max_limbs);
limb_pointer pl = allocator().allocate(cap);
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1600)
- std::copy(limbs(), limbs() + size(), stdext::checked_array_iterator<limb_pointer>(pl, cap));
-#else
- std::copy(limbs(), limbs() + size(), pl);
-#endif
+ std::memcpy(pl, limbs(), size() * sizeof(limbs()[0]));
if(!m_internal)
allocator().deallocate(limbs(), capacity());
else
@@ -278,24 +278,16 @@ public:
BOOST_MP_FORCEINLINE cpp_int_base(const cpp_int_base& o) : allocator_type(o), m_limbs(0), m_internal(true)
{
resize(o.size(), o.size());
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1600)
- std::copy(o.limbs(), o.limbs() + o.size(), stdext::checked_array_iterator<limb_pointer>(limbs(), size()));
-#else
- std::copy(o.limbs(), o.limbs() + o.size(), limbs());
-#endif
+ std::memcpy(limbs(), o.limbs(), o.size() * sizeof(limbs()[0]));
m_sign = o.m_sign;
}
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
cpp_int_base(cpp_int_base&& o)
- : allocator_type(static_cast<Allocator&&>(o)), m_limbs(o.m_limbs), m_sign(o.m_sign), m_internal(o.m_internal)
+ : allocator_type(static_cast<allocator_type&&>(o)), m_limbs(o.m_limbs), m_sign(o.m_sign), m_internal(o.m_internal)
{
if(m_internal)
{
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1600)
- std::copy(o.limbs(), o.limbs() + o.size(), stdext::checked_array_iterator<limb_pointer>(limbs(), size()));
-#else
- std::copy(o.limbs(), o.limbs() + o.size(), limbs());
-#endif
+ std::memcpy(limbs(), o.limbs(), o.size() * sizeof(limbs()[0]));
}
else
{
@@ -308,17 +300,13 @@ public:
{
if(!m_internal)
allocator().deallocate(m_data.ld.data, m_data.ld.capacity);
- *static_cast<Allocator*>(this) = static_cast<Allocator&&>(o);
+ *static_cast<allocator_type*>(this) = static_cast<allocator_type&&>(o);
m_limbs = o.m_limbs;
m_sign = o.m_sign;
m_internal = o.m_internal;
if(m_internal)
{
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1600)
- std::copy(o.limbs(), o.limbs() + o.size(), stdext::checked_array_iterator<limb_pointer>(limbs(), size()));
-#else
- std::copy(o.limbs(), o.limbs() + o.size(), limbs());
-#endif
+ std::memcpy(limbs(), o.limbs(), o.size() * sizeof(limbs()[0]));
}
else
{
@@ -341,11 +329,7 @@ public:
static_cast<allocator_type&>(*this) = static_cast<const allocator_type&>(o);
m_limbs = 0;
resize(o.size(), o.size());
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1600)
- std::copy(o.limbs(), o.limbs() + o.size(), stdext::checked_array_iterator<limb_pointer>(limbs(), size()));
-#else
- std::copy(o.limbs(), o.limbs() + o.size(), limbs());
-#endif
+ std::memcpy(limbs(), o.limbs(), o.size() * sizeof(limbs()[0]));
m_sign = o.m_sign;
}
}
@@ -444,13 +428,13 @@ public:
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(limb_type i)BOOST_NOEXCEPT
: m_wrapper(i), m_limbs(1), m_sign(false) {}
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(signed_limb_type i)BOOST_NOEXCEPT
- : m_wrapper(limb_type(i < 0 ? -i : i)), m_limbs(1), m_sign(i < 0) {}
+ : m_wrapper(limb_type(i < 0 ? static_cast<limb_type>(-static_cast<signed_double_limb_type>(i)) : i)), m_limbs(1), m_sign(i < 0) {}
#if defined(BOOST_LITTLE_ENDIAN)
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(double_limb_type i)BOOST_NOEXCEPT
: m_wrapper(i), m_limbs(i > max_limb_value ? 2 : 1), m_sign(false) {}
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(signed_double_limb_type i)BOOST_NOEXCEPT
- : m_wrapper(double_limb_type(i < 0 ? -i : i)),
- m_limbs(i < 0 ? (-i > max_limb_value ? 2 : 1) : (i > max_limb_value ? 2 : 1)),
+ : m_wrapper(double_limb_type(i < 0 ? static_cast<double_limb_type>(boost::multiprecision::detail::unsigned_abs(i)) : i)),
+ m_limbs(i < 0 ? (static_cast<double_limb_type>(boost::multiprecision::detail::unsigned_abs(i)) > max_limb_value ? 2 : 1) : (i > max_limb_value ? 2 : 1)),
m_sign(i < 0) {}
#endif
#if defined(BOOST_MP_USER_DEFINED_LITERALS)
@@ -502,12 +486,8 @@ public:
{
if(this != &o)
{
- resize(o.size(), o.size());
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1600)
- std::copy(o.limbs(), o.limbs() + o.size(), stdext::checked_array_iterator<limb_pointer>(limbs(), size()));
-#else
- std::copy(o.limbs(), o.limbs() + o.size(), limbs());
-#endif
+ m_limbs = o.m_limbs;
+ std::memcpy(limbs(), o.limbs(), o.size() * sizeof(o.limbs()[0]));
m_sign = o.m_sign;
}
}
@@ -594,12 +574,16 @@ public:
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(limb_type i)BOOST_NOEXCEPT
: m_wrapper(i), m_limbs(1) {}
BOOST_MP_FORCEINLINE cpp_int_base(signed_limb_type i)BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_wrapper(limb_type(i < 0 ? -i : i)), m_limbs(1) { if(i < 0) negate(); }
+ : m_wrapper(limb_type(i < 0 ? static_cast<limb_type>(-static_cast<signed_double_limb_type>(i)) : i)), m_limbs(1) { if(i < 0) negate(); }
#ifdef BOOST_LITTLE_ENDIAN
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(double_limb_type i)BOOST_NOEXCEPT
: m_wrapper(i), m_limbs(i > max_limb_value ? 2 : 1) {}
BOOST_MP_FORCEINLINE cpp_int_base(signed_double_limb_type i)BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_wrapper(double_limb_type(i < 0 ? -i : i)), m_limbs(i < 0 ? (-i > max_limb_value ? 2 : 1) : (i > max_limb_value ? 2 : 1)) { if(i < 0) negate(); }
+ : m_wrapper(double_limb_type(i < 0 ? static_cast<double_limb_type>(boost::multiprecision::detail::unsigned_abs(i)) : i)),
+ m_limbs(i < 0 ? (static_cast<double_limb_type>(boost::multiprecision::detail::unsigned_abs(i)) > max_limb_value ? 2 : 1) : (i > max_limb_value ? 2 : 1))
+ {
+ if (i < 0) negate();
+ }
#endif
#if defined(BOOST_MP_USER_DEFINED_LITERALS)
template <limb_type...VALUES>
@@ -639,12 +623,8 @@ public:
{
if(this != &o)
{
- resize(o.size(), o.size());
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1600)
- std::copy(o.limbs(), o.limbs() + o.size(), stdext::checked_array_iterator<limb_pointer>(limbs(), size()));
-#else
- std::copy(o.limbs(), o.limbs() + o.size(), limbs());
-#endif
+ m_limbs = o.m_limbs;
+ std::memcpy(limbs(), o.limbs(), o.size() * sizeof(limbs()[0]));
}
}
private:
@@ -736,15 +716,24 @@ private:
BOOST_STATIC_ASSERT_MSG(MinBits <= sizeof(double_limb_type) * CHAR_BIT, "Template parameter MinBits is inconsistent with the parameter trivial - did you mistakingly try to override the trivial parameter?");
protected:
template <class T>
- typename disable_if_c<std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::digits <= (int)MinBits)>::type
+ typename boost::disable_if_c<!boost::is_integral<T>::value || (std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::digits <= (int)MinBits))>::type
check_in_range(T val, const mpl::int_<checked>&)
{
- BOOST_MP_USING_ABS
- typedef typename common_type<T, local_limb_type>::type common_type;
+ typedef typename common_type<typename make_unsigned<T>::type, local_limb_type>::type common_type;
- if(static_cast<common_type>(abs(val)) > static_cast<common_type>(limb_mask))
+ if(static_cast<common_type>(boost::multiprecision::detail::unsigned_abs(val)) > static_cast<common_type>(limb_mask))
BOOST_THROW_EXCEPTION(std::range_error("The argument to a cpp_int constructor exceeded the largest value it can represent."));
}
+ template <class T>
+ typename boost::disable_if_c<boost::is_integral<T>::value || (std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::digits <= (int)MinBits))>::type
+ check_in_range(T val, const mpl::int_<checked>&)
+ {
+ using std::abs;
+ typedef typename common_type<T, local_limb_type>::type common_type;
+
+ if (static_cast<common_type>(abs(val)) > static_cast<common_type>(limb_mask))
+ BOOST_THROW_EXCEPTION(std::range_error("The argument to a cpp_int constructor exceeded the largest value it can represent."));
+ }
template <class T, int C>
void check_in_range(T, const mpl::int_<C>&){}
@@ -759,23 +748,24 @@ public:
// Direct construction:
//
template <class SI>
- BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(SI i, typename enable_if_c<is_signed<SI>::value && (Checked == unchecked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_data(i < 0 ? static_cast<local_limb_type>(-i) : static_cast<local_limb_type>(i)), m_sign(i < 0) {}
+ BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(SI i, typename boost::enable_if_c<is_signed<SI>::value && (Checked == unchecked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ : m_data(i < 0 ? static_cast<local_limb_type>(static_cast<typename make_unsigned<SI>::type>(boost::multiprecision::detail::unsigned_abs(i)) & limb_mask) : static_cast<local_limb_type>(i)& limb_mask), m_sign(i < 0) {}
template <class SI>
- BOOST_MP_FORCEINLINE cpp_int_base(SI i, typename enable_if_c<is_signed<SI>::value && (Checked == checked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_data(i < 0 ? static_cast<local_limb_type>(-i) : static_cast<local_limb_type>(i)), m_sign(i < 0) { check_in_range(i); }
+ BOOST_MP_FORCEINLINE cpp_int_base(SI i, typename boost::enable_if_c<is_signed<SI>::value && (Checked == checked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ : m_data(i < 0 ? (static_cast<local_limb_type>(static_cast<typename make_unsigned<SI>::type>(boost::multiprecision::detail::unsigned_abs(i)) & limb_mask)) : static_cast<local_limb_type>(i)& limb_mask), m_sign(i < 0)
+ { check_in_range(i); }
template <class UI>
- BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(UI i, typename enable_if_c<is_unsigned<UI>::value && (Checked == unchecked)>::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_data(static_cast<local_limb_type>(i)), m_sign(false) {}
+ BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(UI i, typename boost::enable_if_c<is_unsigned<UI>::value && (Checked == unchecked)>::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ : m_data(static_cast<local_limb_type>(i) & limb_mask), m_sign(false) {}
template <class UI>
- BOOST_MP_FORCEINLINE cpp_int_base(UI i, typename enable_if_c<is_unsigned<UI>::value && (Checked == checked)>::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_data(static_cast<local_limb_type>(i)), m_sign(false) { check_in_range(i); }
+ BOOST_MP_FORCEINLINE cpp_int_base(UI i, typename boost::enable_if_c<is_unsigned<UI>::value && (Checked == checked)>::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ : m_data(static_cast<local_limb_type>(i) & limb_mask), m_sign(false) { check_in_range(i); }
template <class F>
- BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(F i, typename enable_if_c<is_floating_point<F>::value && (Checked == unchecked)>::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_data(static_cast<local_limb_type>(std::fabs(i))), m_sign(i < 0) {}
+ BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(F i, typename boost::enable_if_c<is_floating_point<F>::value && (Checked == unchecked)>::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ : m_data(static_cast<local_limb_type>(std::fabs(i)) & limb_mask), m_sign(i < 0) {}
template <class F>
- BOOST_MP_FORCEINLINE cpp_int_base(F i, typename enable_if_c<is_floating_point<F>::value && (Checked == checked)>::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_data(static_cast<local_limb_type>(std::fabs(i))), m_sign(i < 0) { check_in_range(i); }
+ BOOST_MP_FORCEINLINE cpp_int_base(F i, typename boost::enable_if_c<is_floating_point<F>::value && (Checked == checked)>::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ : m_data(static_cast<local_limb_type>(std::fabs(i)) & limb_mask), m_sign(i < 0) { check_in_range(i); }
#if defined(BOOST_MP_USER_DEFINED_LITERALS)
BOOST_CONSTEXPR cpp_int_base(literals::detail::value_pack<>)
: m_data(static_cast<local_limb_type>(0u)), m_sign(false) {}
@@ -855,7 +845,9 @@ struct cpp_int_base<MinBits, MinBits, unsigned_magnitude, Checked, void, true>
typedef const local_limb_type* const_limb_pointer;
private:
BOOST_STATIC_CONSTANT(unsigned, limb_bits = sizeof(local_limb_type) * CHAR_BIT);
- BOOST_STATIC_CONSTANT(local_limb_type, limb_mask = (~local_limb_type(0)) >> (limb_bits - MinBits));
+ BOOST_STATIC_CONSTANT(local_limb_type, limb_mask = limb_bits != MinBits ?
+ static_cast<local_limb_type>(static_cast<local_limb_type>(~local_limb_type(0)) >> (limb_bits - MinBits))
+ : static_cast<local_limb_type>(~local_limb_type(0)));
local_limb_type m_data;
@@ -867,7 +859,7 @@ private:
BOOST_STATIC_ASSERT_MSG(MinBits <= sizeof(double_limb_type) * CHAR_BIT, "Template parameter MinBits is inconsistent with the parameter trivial - did you mistakingly try to override the trivial parameter?");
protected:
template <class T>
- typename disable_if_c<std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::digits <= (int)MinBits)>::type
+ typename boost::disable_if_c<std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::digits <= (int)MinBits)>::type
check_in_range(T val, const mpl::int_<checked>&, const mpl::false_&)
{
typedef typename common_type<T, local_limb_type>::type common_type;
@@ -899,20 +891,20 @@ public:
// Direct construction:
//
template <class SI>
- BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(SI i, typename enable_if_c<is_signed<SI>::value && (Checked == unchecked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_data(i < 0 ? 1 + ~static_cast<local_limb_type>(-i) : static_cast<local_limb_type>(i)) {}
+ BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(SI i, typename boost::enable_if_c<is_signed<SI>::value && (Checked == unchecked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ : m_data(i < 0 ? (1 + ~static_cast<local_limb_type>(-i)) & limb_mask : static_cast<local_limb_type>(i) & limb_mask) {}
template <class SI>
- BOOST_MP_FORCEINLINE cpp_int_base(SI i, typename enable_if_c<is_signed<SI>::value && (Checked == checked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ BOOST_MP_FORCEINLINE cpp_int_base(SI i, typename boost::enable_if_c<is_signed<SI>::value && (Checked == checked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
: m_data(i < 0 ? 1 + ~static_cast<local_limb_type>(-i) : static_cast<local_limb_type>(i)) { check_in_range(i); }
template <class UI>
- BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(UI i, typename enable_if_c<is_unsigned<UI>::value && (Checked == unchecked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_data(static_cast<local_limb_type>(i)) {}
+ BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_base(UI i, typename boost::enable_if_c<is_unsigned<UI>::value && (Checked == unchecked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ : m_data(static_cast<local_limb_type>(i) & limb_mask) {}
template <class UI>
- BOOST_MP_FORCEINLINE cpp_int_base(UI i, typename enable_if_c<is_unsigned<UI>::value && (Checked == checked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ BOOST_MP_FORCEINLINE cpp_int_base(UI i, typename boost::enable_if_c<is_unsigned<UI>::value && (Checked == checked) >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
: m_data(static_cast<local_limb_type>(i)) { check_in_range(i); }
template <class F>
- BOOST_MP_FORCEINLINE cpp_int_base(F i, typename enable_if<is_floating_point<F> >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
- : m_data(static_cast<local_limb_type>(std::fabs(i)))
+ BOOST_MP_FORCEINLINE cpp_int_base(F i, typename boost::enable_if<is_floating_point<F> >::type const* = 0) BOOST_NOEXCEPT_IF((Checked == unchecked))
+ : m_data(static_cast<local_limb_type>(std::fabs(i)) & limb_mask)
{
check_in_range(i);
if(i < 0)
@@ -1027,7 +1019,7 @@ public:
typedef typename mpl::if_<
trivial_tag,
mpl::list<unsigned char, unsigned short, unsigned,
- unsigned long long, double_limb_type>,
+ unsigned long, unsigned long long, double_limb_type>,
mpl::list<limb_type, double_limb_type>
>::type unsigned_types;
typedef typename mpl::if_<
@@ -1047,7 +1039,7 @@ public:
// Direct construction from arithmetic type:
//
template <class Arg>
- BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_backend(Arg i, typename enable_if_c<is_allowed_cpp_int_base_conversion<Arg, base_type>::value >::type const* = 0)BOOST_NOEXCEPT_IF((Checked == unchecked) && boost::is_void<Allocator>::value)
+ BOOST_MP_FORCEINLINE BOOST_CONSTEXPR cpp_int_backend(Arg i, typename boost::enable_if_c<is_allowed_cpp_int_base_conversion<Arg, base_type>::value >::type const* = 0)BOOST_NOEXCEPT_IF((Checked == unchecked) && boost::is_void<Allocator>::value)
: base_type(i) {}
private:
@@ -1094,11 +1086,7 @@ private:
{
// regular non-trivial to non-trivial assign:
this->resize(other.size(), other.size());
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1600)
- std::copy(other.limbs(), other.limbs() + (std::min)(other.size(), this->size()), stdext::checked_array_iterator<limb_pointer>(this->limbs(), this->size()));
-#else
- std::copy(other.limbs(), other.limbs() + (std::min)(other.size(), this->size()), this->limbs());
-#endif
+ std::memcpy(this->limbs(), other.limbs(), (std::min)(other.size(), this->size()) * sizeof(this->limbs()[0]));
this->sign(other.sign());
this->normalize();
}
@@ -1106,7 +1094,7 @@ public:
template <unsigned MinBits2, unsigned MaxBits2, cpp_integer_type SignType2, cpp_int_check_type Checked2, class Allocator2>
cpp_int_backend(
const cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2>& other,
- typename enable_if_c<is_implicit_cpp_int_conversion<cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2>, self_type>::value>::type* = 0)
+ typename boost::enable_if_c<is_implicit_cpp_int_conversion<cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2>, self_type>::value>::type* = 0)
: base_type()
{
do_assign(
@@ -1117,7 +1105,7 @@ public:
template <unsigned MinBits2, unsigned MaxBits2, cpp_integer_type SignType2, cpp_int_check_type Checked2, class Allocator2>
explicit cpp_int_backend(
const cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2>& other,
- typename disable_if_c<is_implicit_cpp_int_conversion<cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2>, self_type>::value>::type* = 0)
+ typename boost::disable_if_c<is_implicit_cpp_int_conversion<cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2>, self_type>::value>::type* = 0)
: base_type()
{
do_assign(
@@ -1154,17 +1142,25 @@ public:
#endif
private:
template <class A>
- typename enable_if<is_unsigned<A> >::type do_assign_arithmetic(A val, const mpl::true_&)
+ typename boost::enable_if<is_unsigned<A> >::type do_assign_arithmetic(A val, const mpl::true_&)
{
this->check_in_range(val);
*this->limbs() = static_cast<typename self_type::local_limb_type>(val);
this->normalize();
}
template <class A>
- typename disable_if<is_unsigned<A> >::type do_assign_arithmetic(A val, const mpl::true_&)
+ typename boost::disable_if_c<is_unsigned<A>::value || !is_integral<A>::value >::type do_assign_arithmetic(A val, const mpl::true_&)
+ {
+ this->check_in_range(val);
+ *this->limbs() = (val < 0) ? static_cast<typename self_type::local_limb_type>(boost::multiprecision::detail::unsigned_abs(val)) : static_cast<typename self_type::local_limb_type>(val);
+ this->sign(val < 0);
+ this->normalize();
+ }
+ template <class A>
+ typename boost::enable_if_c< !is_integral<A>::value>::type do_assign_arithmetic(A val, const mpl::true_&)
{
this->check_in_range(val);
- *this->limbs() = (val < 0) ? static_cast<typename self_type::local_limb_type>(-val) : static_cast<typename self_type::local_limb_type>(val);
+ *this->limbs() = (val < 0) ? static_cast<typename self_type::local_limb_type>(boost::multiprecision::detail::abs(val)) : static_cast<typename self_type::local_limb_type>(val);
this->sign(val < 0);
this->normalize();
}
@@ -1177,7 +1173,7 @@ private:
BOOST_MP_FORCEINLINE void do_assign_arithmetic(signed_limb_type i, const mpl::false_&) BOOST_NOEXCEPT_IF((Checked == unchecked))
{
this->resize(1, 1);
- *this->limbs() = static_cast<limb_type>(std::abs(i));
+ *this->limbs() = static_cast<limb_type>(boost::multiprecision::detail::unsigned_abs(i));
this->sign(i < 0);
}
void do_assign_arithmetic(double_limb_type i, const mpl::false_&)
@@ -1195,16 +1191,13 @@ private:
BOOST_STATIC_ASSERT(sizeof(i) == 2 * sizeof(limb_type));
BOOST_STATIC_ASSERT(base_type::internal_limb_count >= 2);
bool s = false;
+ double_limb_type ui;
if(i < 0)
- {
s = true;
- i = -i;
- }
- else
- this->sign(false);
+ ui = static_cast<double_limb_type>(boost::multiprecision::detail::unsigned_abs(i));
typename base_type::limb_pointer p = this->limbs();
- *p = static_cast<limb_type>(i);
- p[1] = static_cast<limb_type>(i >> base_type::limb_bits);
+ *p = static_cast<limb_type>(ui);
+ p[1] = static_cast<limb_type>(ui >> base_type::limb_bits);
this->resize(p[1] ? 2 : 1, p[1] ? 2 : 1);
this->sign(s);
}
@@ -1265,7 +1258,7 @@ private:
void do_assign_string(const char* s, const mpl::true_&)
{
std::size_t n = s ? std::strlen(s) : 0;
- *this->limbs() = 0;
+ *this = 0;
unsigned radix = 10;
bool isneg = false;
if(n && (*s == '-'))
@@ -1423,11 +1416,12 @@ public:
private:
std::string do_get_trivial_string(std::ios_base::fmtflags f, const mpl::false_&)const
{
+ typedef typename mpl::if_c<sizeof(typename base_type::local_limb_type) == 1, unsigned, typename base_type::local_limb_type>::type io_type;
if(this->sign() && (((f & std::ios_base::hex) == std::ios_base::hex) || ((f & std::ios_base::oct) == std::ios_base::oct)))
BOOST_THROW_EXCEPTION(std::runtime_error("Base 8 or 16 printing of negative numbers is not supported."));
std::stringstream ss;
ss.flags(f & ~std::ios_base::showpos);
- ss << *this->limbs();
+ ss << static_cast<io_type>(*this->limbs());
std::string result;
if(this->sign())
result += '-';
@@ -1502,7 +1496,7 @@ private:
--pos;
v /= 10;
}
- unsigned n = result.find_first_not_of('0');
+ std::string::size_type n = result.find_first_not_of('0');
result.erase(0, n);
if(result.empty())
result = "0";
@@ -1607,7 +1601,7 @@ private:
}
}
}
- unsigned n = result.find_first_not_of('0');
+ std::string::size_type n = result.find_first_not_of('0');
result.erase(0, n);
if(result.empty())
result = "0";
@@ -1691,7 +1685,7 @@ public:
return 0;
}
template <class Arithmetic>
- BOOST_MP_FORCEINLINE typename enable_if<is_arithmetic<Arithmetic>, int>::type compare(Arithmetic i)const
+ BOOST_MP_FORCEINLINE typename boost::enable_if<is_arithmetic<Arithmetic>, int>::type compare(Arithmetic i)const
{
// braindead version:
cpp_int_backend t;
@@ -1755,9 +1749,9 @@ typedef number<cpp_int_backend<512, 512, signed_magnitude, unchecked, void> >
typedef number<cpp_int_backend<1024, 1024, signed_magnitude, unchecked, void> > int1024_t;
// Over again, but with checking enabled this time:
-typedef number<cpp_int_backend<0, 0, signed_magnitude, checked> > checked_cpp_int;
-typedef rational_adaptor<cpp_int_backend<0, 0, signed_magnitude, checked> > checked_cpp_rational_backend;
-typedef number<cpp_rational_backend> checked_cpp_rational;
+typedef number<cpp_int_backend<0, 0, signed_magnitude, checked> > checked_cpp_int;
+typedef rational_adaptor<cpp_int_backend<0, 0, signed_magnitude, checked> > checked_cpp_rational_backend;
+typedef number<checked_cpp_rational_backend> checked_cpp_rational;
// Fixed precision unsigned types:
typedef number<cpp_int_backend<128, 128, unsigned_magnitude, checked, void> > checked_uint128_t;
typedef number<cpp_int_backend<256, 256, unsigned_magnitude, checked, void> > checked_uint256_t;
@@ -1795,5 +1789,6 @@ struct is_explicitly_convertible<cpp_int_backend<MinBits, MaxBits, SignType, Che
#ifdef BOOST_MP_USER_DEFINED_LITERALS
#include <boost/multiprecision/cpp_int/literals.hpp>
#endif
+#include <boost/multiprecision/cpp_int/serialize.hpp>
#endif
diff --git a/3party/boost/boost/multiprecision/cpp_int/add.hpp b/3party/boost/boost/multiprecision/cpp_int/add.hpp
index 177a3b5024..f9c9b85ebb 100644
--- a/3party/boost/boost/multiprecision/cpp_int/add.hpp
+++ b/3party/boost/boost/multiprecision/cpp_int/add.hpp
@@ -314,7 +314,7 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
const signed_limb_type& o) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value))
{
if(o < 0)
- eval_subtract(result, static_cast<limb_type>(-o));
+ eval_subtract(result, static_cast<limb_type>(boost::multiprecision::detail::unsigned_abs(o)));
else if(o > 0)
eval_add(result, static_cast<limb_type>(o));
}
@@ -326,7 +326,7 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
const signed_limb_type& o) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value))
{
if(o < 0)
- eval_subtract(result, a, static_cast<limb_type>(-o));
+ eval_subtract(result, a, static_cast<limb_type>(boost::multiprecision::detail::unsigned_abs(o)));
else if(o > 0)
eval_add(result, a, static_cast<limb_type>(o));
else if(&result != &a)
@@ -370,7 +370,7 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
if(o)
{
if(o < 0)
- eval_add(result, static_cast<limb_type>(-o));
+ eval_add(result, static_cast<limb_type>(boost::multiprecision::detail::unsigned_abs(o)));
else
eval_subtract(result, static_cast<limb_type>(o));
}
@@ -385,7 +385,7 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
if(o)
{
if(o < 0)
- eval_add(result, a, static_cast<limb_type>(-o));
+ eval_add(result, a, static_cast<limb_type>(boost::multiprecision::detail::unsigned_abs(o)));
else
eval_subtract(result, a, static_cast<limb_type>(o));
}
diff --git a/3party/boost/boost/multiprecision/cpp_int/bitwise.hpp b/3party/boost/boost/multiprecision/cpp_int/bitwise.hpp
index 7df93181da..98277d69fe 100644
--- a/3party/boost/boost/multiprecision/cpp_int/bitwise.hpp
+++ b/3party/boost/boost/multiprecision/cpp_int/bitwise.hpp
@@ -28,7 +28,7 @@ template <class CppInt1, class CppInt2, class Op>
void bitwise_op(
CppInt1& result,
const CppInt2& o,
- Op op) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<CppInt1>::value))
+ Op op, const mpl::true_&) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<CppInt1>::value))
{
//
// There are 4 cases:
@@ -158,6 +158,35 @@ void bitwise_op(
result.normalize();
}
+template <class CppInt1, class CppInt2, class Op>
+void bitwise_op(
+ CppInt1& result,
+ const CppInt2& o,
+ Op op, const mpl::false_&) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<CppInt1>::value))
+{
+ //
+ // Both arguments are unsigned types, very simple case handled as a special case.
+ //
+ // First figure out how big the result needs to be and set up some data:
+ //
+ unsigned rs = result.size();
+ unsigned os = o.size();
+ unsigned m, x;
+ minmax(rs, os, m, x);
+ result.resize(x, x);
+ typename CppInt1::limb_pointer pr = result.limbs();
+ typename CppInt2::const_limb_pointer po = o.limbs();
+ for(unsigned i = rs; i < x; ++i)
+ pr[i] = 0;
+
+ for(unsigned i = 0; i < os; ++i)
+ pr[i] = op(pr[i], po[i]);
+ for(unsigned i = os; i < x; ++i)
+ pr[i] = op(pr[i], limb_type(0));
+
+ result.normalize();
+}
+
struct bit_and{ limb_type operator()(limb_type a, limb_type b)const BOOST_NOEXCEPT { return a & b; } };
struct bit_or { limb_type operator()(limb_type a, limb_type b)const BOOST_NOEXCEPT { return a | b; } };
struct bit_xor{ limb_type operator()(limb_type a, limb_type b)const BOOST_NOEXCEPT { return a ^ b; } };
@@ -168,7 +197,8 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& result,
const cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2>& o) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value))
{
- bitwise_op(result, o, bit_and());
+ bitwise_op(result, o, bit_and(),
+ mpl::bool_<std::numeric_limits<number<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> > >::is_signed || std::numeric_limits<number<cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2> > >::is_signed>());
}
template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_int_check_type Checked1, class Allocator1, unsigned MinBits2, unsigned MaxBits2, cpp_integer_type SignType2, cpp_int_check_type Checked2, class Allocator2>
@@ -177,7 +207,8 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& result,
const cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2>& o) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value))
{
- bitwise_op(result, o, bit_or());
+ bitwise_op(result, o, bit_or(),
+ mpl::bool_<std::numeric_limits<number<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> > >::is_signed || std::numeric_limits<number<cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2> > >::is_signed>());
}
template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_int_check_type Checked1, class Allocator1, unsigned MinBits2, unsigned MaxBits2, cpp_integer_type SignType2, cpp_int_check_type Checked2, class Allocator2>
@@ -186,7 +217,38 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& result,
const cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2>& o) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value))
{
- bitwise_op(result, o, bit_xor());
+ bitwise_op(result, o, bit_xor(),
+ mpl::bool_<std::numeric_limits<number<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> > >::is_signed || std::numeric_limits<number<cpp_int_backend<MinBits2, MaxBits2, SignType2, Checked2, Allocator2> > >::is_signed>());
+}
+//
+// Again for operands which are single limbs:
+//
+template <unsigned MinBits1, unsigned MaxBits1, cpp_int_check_type Checked1, class Allocator1>
+BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits1, unsigned_magnitude, Checked1, Allocator1> >::value>::type
+ eval_bitwise_and(
+ cpp_int_backend<MinBits1, MaxBits1, unsigned_magnitude, Checked1, Allocator1>& result,
+ limb_type l) BOOST_NOEXCEPT
+{
+ result.limbs()[0] &= l;
+ result.resize(1, 1);
+}
+
+template <unsigned MinBits1, unsigned MaxBits1, cpp_int_check_type Checked1, class Allocator1>
+BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits1, unsigned_magnitude, Checked1, Allocator1> >::value>::type
+ eval_bitwise_or(
+ cpp_int_backend<MinBits1, MaxBits1, unsigned_magnitude, Checked1, Allocator1>& result,
+ limb_type l) BOOST_NOEXCEPT
+{
+ result.limbs()[0] |= l;
+}
+
+template <unsigned MinBits1, unsigned MaxBits1, cpp_int_check_type Checked1, class Allocator1>
+BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits1, unsigned_magnitude, Checked1, Allocator1> >::value>::type
+ eval_bitwise_xor(
+ cpp_int_backend<MinBits1, MaxBits1, unsigned_magnitude, Checked1, Allocator1>& result,
+ limb_type l) BOOST_NOEXCEPT
+{
+ result.limbs()[0] ^= l;
}
template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_int_check_type Checked1, class Allocator1, unsigned MinBits2, unsigned MaxBits2, cpp_integer_type SignType2, cpp_int_check_type Checked2, class Allocator2>
@@ -229,12 +291,6 @@ inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBit
limb_type offset = static_cast<limb_type>(s / cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::limb_bits);
limb_type shift = static_cast<limb_type>(s % cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::limb_bits);
- /*
- static const unsigned max_bits = max_bits<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value;
- static const unsigned max_limbs = max_bits / cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::limb_bits
- + (max_bits % cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::limb_bits ? 1 : 0);
- */
-
unsigned ors = result.size();
if((ors == 1) && (!*result.limbs()))
return; // shifting zero yields zero.
@@ -244,8 +300,7 @@ inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBit
rs += offset;
result.resize(rs, rs);
bool truncated = result.size() != rs;
- if(truncated)
- rs = result.size();
+
typename cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::limb_pointer pr = result.limbs();
if(offset > rs)
@@ -255,11 +310,10 @@ inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBit
return;
}
- unsigned i = 0;
+ unsigned i = rs - result.size();
if(shift)
{
// This code only works when shift is non-zero, otherwise we invoke undefined behaviour!
- i = 0;
if(!truncated)
{
if(rs > ors + offset)
diff --git a/3party/boost/boost/multiprecision/cpp_int/comparison.hpp b/3party/boost/boost/multiprecision/cpp_int/comparison.hpp
index 3f601e5e15..48a66fc2b2 100644
--- a/3party/boost/boost/multiprecision/cpp_int/comparison.hpp
+++ b/3party/boost/boost/multiprecision/cpp_int/comparison.hpp
@@ -72,10 +72,9 @@ BOOST_MP_FORCEINLINE typename enable_if_c<
bool
>::type eval_eq(const cpp_int_backend<MinBits, MaxBits, signed_magnitude, Checked, Allocator>& a, signed_limb_type b) BOOST_NOEXCEPT
{
- BOOST_MP_USING_ABS
return (a.sign() == (b < 0))
&& (a.size() == 1)
- && (*a.limbs() == static_cast<limb_type>(abs(b)));
+ && (*a.limbs() == boost::multiprecision::detail::unsigned_abs(b));
}
template <unsigned MinBits, unsigned MaxBits, cpp_int_check_type Checked, class Allocator>
BOOST_MP_FORCEINLINE typename enable_if_c<
@@ -113,20 +112,19 @@ inline typename enable_if_c<
bool
>::type eval_lt(const cpp_int_backend<MinBits, MaxBits, signed_magnitude, Checked, Allocator>& a, signed_limb_type b) BOOST_NOEXCEPT
{
- BOOST_MP_USING_ABS
if((b == 0) || (a.sign() != (b < 0)))
return a.sign();
if(a.sign())
{
if(a.size() > 1)
return true;
- return *a.limbs() > static_cast<limb_type>(abs(b));
+ return *a.limbs() > boost::multiprecision::detail::unsigned_abs(b);
}
else
{
if(a.size() > 1)
return false;
- return *a.limbs() < static_cast<limb_type>(b);
+ return *a.limbs() < boost::multiprecision::detail::unsigned_abs(b);
}
}
@@ -167,7 +165,6 @@ inline typename enable_if_c<
bool
>::type eval_gt(const cpp_int_backend<MinBits, MaxBits, signed_magnitude, Checked, Allocator>& a, signed_limb_type b) BOOST_NOEXCEPT
{
- BOOST_MP_USING_ABS
if(b == 0)
return !a.sign() && ((a.size() > 1) || *a.limbs());
if(a.sign() != (b < 0))
@@ -176,13 +173,13 @@ inline typename enable_if_c<
{
if(a.size() > 1)
return false;
- return *a.limbs() < static_cast<limb_type>(abs(b));
+ return *a.limbs() < boost::multiprecision::detail::unsigned_abs(b);
}
else
{
if(a.size() > 1)
return true;
- return *a.limbs() > static_cast<limb_type>(b);
+ return *a.limbs() > boost::multiprecision::detail::unsigned_abs(b);
}
}
@@ -237,9 +234,7 @@ BOOST_MP_FORCEINLINE typename enable_if_c<
bool
>::type eval_eq(const cpp_int_backend<MinBits, MaxBits, signed_magnitude, Checked, void>& a, S b) BOOST_NOEXCEPT
{
- BOOST_MP_USING_ABS
- typedef typename make_unsigned<S>::type ui_type;
- return (a.sign() == (b < 0)) && (*a.limbs() == static_cast<ui_type>(abs(b)));
+ return (a.sign() == (b < 0)) && (*a.limbs() == boost::multiprecision::detail::unsigned_abs(b));
}
template <unsigned MinBits, unsigned MaxBits, cpp_int_check_type Checked, class U>
BOOST_MP_FORCEINLINE typename enable_if_c<
@@ -301,11 +296,9 @@ BOOST_MP_FORCEINLINE typename enable_if_c<
bool
>::type eval_lt(const cpp_int_backend<MinBits, MaxBits, signed_magnitude, Checked, void>& a, S b) BOOST_NOEXCEPT
{
- BOOST_MP_USING_ABS
- typedef typename make_unsigned<S>::type ui_type;
if(a.sign() != (b < 0))
return a.sign();
- return a.sign() ? (*a.limbs() > static_cast<ui_type>(abs(b))) : (*a.limbs() < static_cast<ui_type>(abs(b)));
+ return a.sign() ? (*a.limbs() > boost::multiprecision::detail::unsigned_abs(b)) : (*a.limbs() < boost::multiprecision::detail::unsigned_abs(b));
}
template <unsigned MinBits, unsigned MaxBits, cpp_int_check_type Checked, class U>
BOOST_MP_FORCEINLINE typename enable_if_c<
@@ -367,11 +360,9 @@ BOOST_MP_FORCEINLINE typename enable_if_c<
bool
>::type eval_gt(const cpp_int_backend<MinBits, MaxBits, signed_magnitude, Checked, void>& a, S b) BOOST_NOEXCEPT
{
- BOOST_MP_USING_ABS
- typedef typename make_unsigned<S>::type ui_type;
if(a.sign() != (b < 0))
return !a.sign();
- return a.sign() ? (*a.limbs() < static_cast<ui_type>(abs(b))) : (*a.limbs() > static_cast<ui_type>(abs(b)));
+ return a.sign() ? (*a.limbs() < boost::multiprecision::detail::unsigned_abs(b)) : (*a.limbs() > boost::multiprecision::detail::unsigned_abs(b));
}
template <unsigned MinBits, unsigned MaxBits, cpp_int_check_type Checked, class U>
BOOST_MP_FORCEINLINE typename enable_if_c<
diff --git a/3party/boost/boost/multiprecision/cpp_int/cpp_int_config.hpp b/3party/boost/boost/multiprecision/cpp_int/cpp_int_config.hpp
index b2bedb858b..0b8b33d3a7 100644
--- a/3party/boost/boost/multiprecision/cpp_int/cpp_int_config.hpp
+++ b/3party/boost/boost/multiprecision/cpp_int/cpp_int_config.hpp
@@ -103,8 +103,8 @@ namespace multiprecision{
typedef detail::largest_unsigned_type<32>::type limb_type;
typedef detail::largest_signed_type<32>::type signed_limb_type;
-typedef boost::uint64_t double_limb_type;
-typedef boost::int64_t signed_double_limb_type;
+typedef detail::largest_unsigned_type<64>::type double_limb_type;
+typedef detail::largest_signed_type<64>::type signed_double_limb_type;
static const limb_type max_block_10 = 1000000000;
static const limb_type digits_per_block_10 = 9;
diff --git a/3party/boost/boost/multiprecision/cpp_int/divide.hpp b/3party/boost/boost/multiprecision/cpp_int/divide.hpp
index cfdee9b488..b5c9b5e220 100644
--- a/3party/boost/boost/multiprecision/cpp_int/divide.hpp
+++ b/3party/boost/boost/multiprecision/cpp_int/divide.hpp
@@ -472,7 +472,7 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
{
cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> r;
bool s = a.sign() != (b < 0);
- divide_unsigned_helper(&result, a, static_cast<limb_type>(std::abs(b)), r);
+ divide_unsigned_helper(&result, a, static_cast<limb_type>(boost::multiprecision::detail::unsigned_abs(b)), r);
result.sign(s);
}
diff --git a/3party/boost/boost/multiprecision/cpp_int/limits.hpp b/3party/boost/boost/multiprecision/cpp_int/limits.hpp
index 6bf319a8f4..6088cb1105 100644
--- a/3party/boost/boost/multiprecision/cpp_int/limits.hpp
+++ b/3party/boost/boost/multiprecision/cpp_int/limits.hpp
@@ -130,7 +130,7 @@ public:
}
static number_type lowest() { return (min)(); }
BOOST_STATIC_CONSTEXPR int digits = boost::multiprecision::backends::max_precision<backend_type>::value == UINT_MAX ? INT_MAX : boost::multiprecision::backends::max_precision<backend_type>::value;
- BOOST_STATIC_CONSTEXPR int digits10 = (INT_MAX / 1000) * 301L;
+ BOOST_STATIC_CONSTEXPR int digits10 = (digits > INT_MAX / 301) ? (digits / 1000) * 301L : (digits * 301) / 1000;
BOOST_STATIC_CONSTEXPR int max_digits10 = digits10 + 2;
BOOST_STATIC_CONSTEXPR bool is_signed = boost::multiprecision::is_signed_number<backend_type>::value;
BOOST_STATIC_CONSTEXPR bool is_integer = true;
diff --git a/3party/boost/boost/multiprecision/cpp_int/misc.hpp b/3party/boost/boost/multiprecision/cpp_int/misc.hpp
index 568066efd9..0ef79b9445 100644
--- a/3party/boost/boost/multiprecision/cpp_int/misc.hpp
+++ b/3party/boost/boost/multiprecision/cpp_int/misc.hpp
@@ -8,6 +8,8 @@
#ifndef BOOST_MP_CPP_INT_MISC_HPP
#define BOOST_MP_CPP_INT_MISC_HPP
+#include <boost/multiprecision/detail/bitscan.hpp> // lsb etc
+
#ifdef BOOST_MSVC
#pragma warning(push)
#pragma warning(disable:4702)
@@ -107,64 +109,6 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
result.sign(false);
}
-template <class Unsigned, class Tag>
-inline unsigned find_lsb(Unsigned mask, const Tag&)
-{
- unsigned result = 0;
- while(!(mask & 1u))
- {
- mask >>= 1;
- ++result;
- }
- return result;
-}
-
-#if defined(BOOST_MSVC) && (defined(_M_IX86) || defined(_M_X64))
-BOOST_FORCEINLINE unsigned find_lsb(limb_type mask, const mpl::int_<32>&)
-{
- unsigned long result;
- _BitScanForward(&result, mask);
- return result;
-}
-#ifdef _M_X64
-BOOST_FORCEINLINE unsigned find_lsb(limb_type mask, const mpl::int_<64>&)
-{
- unsigned long result;
- _BitScanForward64(&result, mask);
- return result;
-}
-#endif
-#endif
-
-#if defined(__GNUC__)
-BOOST_FORCEINLINE unsigned find_lsb_imp(limb_type mask, mpl::true_ const&)
-{
- return __builtin_ctz(mask);
-}
-BOOST_FORCEINLINE unsigned find_lsb_imp(limb_type mask, mpl::false_ const&)
-{
- return __builtin_ctzll(mask);
-}
-template <class Tag>
-BOOST_FORCEINLINE unsigned find_lsb(limb_type mask, const Tag&)
-{
- return find_lsb_imp(mask, mpl::bool_<Tag::value <= static_cast<int>(sizeof(unsigned int) * CHAR_BIT)>());
-}
-#elif defined(BOOST_INTEL)
-BOOST_FORCEINLINE unsigned find_lsb_imp(limb_type mask, mpl::true_ const&)
-{
- return _bit_scan_forward(mask);
-}
-BOOST_FORCEINLINE unsigned find_lsb_imp(limb_type mask, mpl::false_ const&)
-{
- return find_lsb<limb_type, mpl::int_<0> >(mask, mpl::int_<0>());
-}
-template <class Tag>
-BOOST_FORCEINLINE unsigned find_lsb(limb_type mask, const Tag&)
-{
- return find_lsb_imp(mask, mpl::bool_<Tag::value <= sizeof(int) * CHAR_BIT>());
-}
-#endif
//
// Get the location of the least-significant-bit:
//
@@ -191,11 +135,34 @@ inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBit
//
// Find the index of the least significant bit within that limb:
//
- unsigned result = find_lsb(a.limbs()[index], mpl::int_<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::limb_bits>());
+ unsigned result = boost::multiprecision::detail::find_lsb(a.limbs()[index]);
return result + index * cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::limb_bits;
}
+//
+// Get the location of the most-significant-bit:
+//
+template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_int_check_type Checked1, class Allocator1>
+inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value, unsigned>::type
+ eval_msb(const cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& a)
+{
+ using default_ops::eval_get_sign;
+ if(eval_get_sign(a) == 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("No bits were set in the operand."));
+ }
+ if(a.sign())
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("Testing individual bits in negative values is not supported - results are undefined."));
+ }
+
+ //
+ // Find the index of the most significant bit that is non-zero:
+ //
+ return (a.size() - 1) * cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::limb_bits + boost::multiprecision::detail::find_msb(a.limbs()[a.size() - 1]);
+}
+
template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_int_check_type Checked1, class Allocator1>
inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value, bool>::type
eval_bit_test(const cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& val, unsigned index) BOOST_NOEXCEPT
@@ -273,6 +240,31 @@ inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBit
r.sign(x.sign());
}
+template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_int_check_type Checked1, class Allocator1>
+inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value>::type
+ eval_qr(
+ const cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& x,
+ limb_type y,
+ cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& q,
+ cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& r) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value))
+{
+ divide_unsigned_helper(&q, x, y, r);
+ q.sign(x.sign());
+ r.sign(x.sign());
+}
+
+template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_int_check_type Checked1, class Allocator1, class U>
+inline typename enable_if_c<is_integral<U>::value>::type eval_qr(
+ const cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& x,
+ U y,
+ cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& q,
+ cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& r) BOOST_NOEXCEPT_IF((is_non_throwing_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value))
+{
+ using default_ops::eval_qr;
+ cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> t(y);
+ eval_qr(x, t, q, r);
+}
+
template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_int_check_type Checked1, class Allocator1, class Integer>
inline typename enable_if_c<is_unsigned<Integer>::value && !is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value, Integer>::type
eval_integer_modulus(const cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& x, Integer val)
@@ -293,9 +285,7 @@ template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_
BOOST_MP_FORCEINLINE typename enable_if_c<is_signed<Integer>::value && !is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value, Integer>::type
eval_integer_modulus(const cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& x, Integer val)
{
- BOOST_MP_USING_ABS
- typedef typename make_unsigned<Integer>::type unsigned_type;
- return eval_integer_modulus(x, static_cast<unsigned_type>(abs(val)));
+ return eval_integer_modulus(x, boost::multiprecision::detail::unsigned_abs(val));
}
inline limb_type integer_gcd_reduce(limb_type u, limb_type v)
@@ -307,7 +297,7 @@ inline limb_type integer_gcd_reduce(limb_type u, limb_type v)
if(u == v)
break;
v -= u;
- v >>= find_lsb(v, mpl::int_<CHAR_BIT * sizeof(limb_type)>());
+ v >>= boost::multiprecision::detail::find_lsb(v);
} while(true);
return u;
}
@@ -369,7 +359,7 @@ inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBit
dividing both u and v. */
unsigned us = eval_lsb(u);
- unsigned vs = find_lsb(v, mpl::int_<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::limb_bits>());
+ unsigned vs = boost::multiprecision::detail::find_lsb(v);
shift = (std::min)(us, vs);
eval_right_shift(u, us);
if(vs)
@@ -587,7 +577,26 @@ inline typename enable_if_c<is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits
//
// Find the index of the least significant bit within that limb:
//
- return find_lsb(*a.limbs(), mpl::int_<CHAR_BIT * sizeof(typename cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>::local_limb_type)>());
+ return boost::multiprecision::detail::find_lsb(*a.limbs());
+}
+
+template <unsigned MinBits1, unsigned MaxBits1, cpp_integer_type SignType1, cpp_int_check_type Checked1, class Allocator1>
+inline typename enable_if_c<is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1> >::value, unsigned>::type
+ eval_msb(const cpp_int_backend<MinBits1, MaxBits1, SignType1, Checked1, Allocator1>& a)
+{
+ using default_ops::eval_get_sign;
+ if(eval_get_sign(a) == 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("No bits were set in the operand."));
+ }
+ if(a.sign())
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("Testing individual bits in negative values is not supported - results are undefined."));
+ }
+ //
+ // Find the index of the least significant bit within that limb:
+ //
+ return boost::multiprecision::detail::find_msb(*a.limbs());
}
#ifdef BOOST_MSVC
diff --git a/3party/boost/boost/multiprecision/cpp_int/multiply.hpp b/3party/boost/boost/multiprecision/cpp_int/multiply.hpp
index 332628a3ae..fd569faa00 100644
--- a/3party/boost/boost/multiprecision/cpp_int/multiply.hpp
+++ b/3party/boost/boost/multiprecision/cpp_int/multiply.hpp
@@ -205,7 +205,7 @@ BOOST_MP_FORCEINLINE typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<Mi
eval_multiply(result, a, static_cast<limb_type>(val));
else
{
- eval_multiply(result, a, static_cast<limb_type>(-val));
+ eval_multiply(result, a, static_cast<limb_type>(boost::multiprecision::detail::unsigned_abs(val)));
result.negate();
}
}
@@ -234,7 +234,7 @@ inline typename enable_if_c<!is_trivial_cpp_int<cpp_int_backend<MinBits1, MaxBit
}
else if(val >= -static_cast<signed_double_limb_type>((std::numeric_limits<limb_type>::max)()))
{
- eval_multiply(result, a, static_cast<limb_type>(-val));
+ eval_multiply(result, a, static_cast<limb_type>(boost::multiprecision::detail::unsigned_abs(val)));
result.negate();
return;
}
diff --git a/3party/boost/boost/multiprecision/cpp_int/serialize.hpp b/3party/boost/boost/multiprecision/cpp_int/serialize.hpp
new file mode 100644
index 0000000000..bdf4758a6e
--- /dev/null
+++ b/3party/boost/boost/multiprecision/cpp_int/serialize.hpp
@@ -0,0 +1,199 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock. 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_
+
+#ifndef BOOST_MP_CPP_INT_SERIALIZE_HPP
+#define BOOST_MP_CPP_INT_SERIALIZE_HPP
+
+namespace boost {
+
+namespace archive{
+
+class binary_oarchive;
+class binary_iarchive;
+
+}
+
+namespace serialization {
+
+namespace mp = boost::multiprecision;
+
+namespace cpp_int_detail{
+
+using namespace boost::multiprecision;
+using namespace boost::multiprecision::backends;
+
+template <class T>
+struct is_binary_archive : public mpl::false_ {};
+template <>
+struct is_binary_archive<boost::archive::binary_oarchive> : public mpl::true_ {};
+template <>
+struct is_binary_archive<boost::archive::binary_iarchive> : public mpl::true_ {};
+
+//
+// We have 8 serialization methods to fill out (and test), they are all permutations of:
+// Load vs Store.
+// Trivial or non-trivial cpp_int type.
+// Binary or not archive.
+//
+template <class Archive, class Int>
+void do_serialize(Archive& ar, Int& val, mpl::false_ const&, mpl::false_ const&, mpl::false_ const&)
+{
+ // Load.
+ // Non-trivial.
+ // Non binary.
+
+ bool s;
+ ar & s;
+ std::size_t limb_count;
+ std::size_t byte_count;
+ ar & byte_count;
+ limb_count = byte_count / sizeof(limb_type) + (byte_count % sizeof(limb_type) ? 1 : 0);
+ val.resize(limb_count, limb_count);
+ limb_type* pl = val.limbs();
+ for(std::size_t i = 0; i < limb_count; ++i)
+ {
+ pl[i] = 0;
+ for(std::size_t j = 0; (j < sizeof(limb_type)) && byte_count; ++j)
+ {
+ unsigned char byte;
+ ar & byte;
+ pl[i] |= static_cast<limb_type>(byte) << (j * CHAR_BIT);
+ --byte_count;
+ }
+ }
+ if(s != val.sign())
+ val.negate();
+ val.normalize();
+}
+template <class Archive, class Int>
+void do_serialize(Archive& ar, Int& val, mpl::true_ const&, mpl::false_ const&, mpl::false_ const&)
+{
+ // Store.
+ // Non-trivial.
+ // Non binary.
+
+ bool s = val.sign();
+ ar & s;
+ limb_type* pl = val.limbs();
+ std::size_t limb_count = val.size();
+ std::size_t byte_count = limb_count * sizeof(limb_type);
+ ar & byte_count;
+
+ for(std::size_t i = 0; i < limb_count; ++i)
+ {
+ limb_type l = pl[i];
+ for(std::size_t j = 0; j < sizeof(limb_type); ++j)
+ {
+ unsigned char byte = static_cast<unsigned char>((l >> (j * CHAR_BIT)) & ((1u << CHAR_BIT) - 1));
+ ar & byte;
+ }
+ }
+}
+template <class Archive, class Int>
+void do_serialize(Archive& ar, Int& val, mpl::false_ const&, mpl::true_ const&, mpl::false_ const&)
+{
+ // Load.
+ // Trivial.
+ // Non binary.
+ bool s;
+ typename Int::local_limb_type l = 0;
+ ar & s;
+ std::size_t byte_count;
+ ar & byte_count;
+ for(std::size_t i = 0; i < byte_count; ++i)
+ {
+ unsigned char b;
+ ar & b;
+ l |= static_cast<typename Int::local_limb_type>(b) << (i * CHAR_BIT);
+ }
+ *val.limbs() = l;
+ if(s != val.sign())
+ val.negate();
+}
+template <class Archive, class Int>
+void do_serialize(Archive& ar, Int& val, mpl::true_ const&, mpl::true_ const&, mpl::false_ const&)
+{
+ // Store.
+ // Trivial.
+ // Non binary.
+ bool s = val.sign();
+ typename Int::local_limb_type l = *val.limbs();
+ ar & s;
+ std::size_t limb_count = sizeof(l);
+ ar & limb_count;
+ for(std::size_t i = 0; i < limb_count; ++i)
+ {
+ unsigned char b = static_cast<unsigned char>(static_cast<typename Int::local_limb_type>(l >> (i * CHAR_BIT)) & static_cast<typename Int::local_limb_type>((1u << CHAR_BIT) - 1));
+ ar & b;
+ }
+}
+template <class Archive, class Int>
+void do_serialize(Archive& ar, Int& val, mpl::false_ const&, mpl::false_ const&, mpl::true_ const&)
+{
+ // Load.
+ // Non-trivial.
+ // Binary.
+ bool s;
+ std::size_t c;
+ ar & s;
+ ar & c;
+ val.resize(c, c);
+ ar.load_binary(val.limbs(), c * sizeof(limb_type));
+ if(s != val.sign())
+ val.negate();
+ val.normalize();
+}
+template <class Archive, class Int>
+void do_serialize(Archive& ar, Int& val, mpl::true_ const&, mpl::false_ const&, mpl::true_ const&)
+{
+ // Store.
+ // Non-trivial.
+ // Binary.
+ bool s = val.sign();
+ std::size_t c = val.size();
+ ar & s;
+ ar & c;
+ ar.save_binary(val.limbs(), c * sizeof(limb_type));
+}
+template <class Archive, class Int>
+void do_serialize(Archive& ar, Int& val, mpl::false_ const&, mpl::true_ const&, mpl::true_ const&)
+{
+ // Load.
+ // Trivial.
+ // Binary.
+ bool s;
+ ar & s;
+ ar.load_binary(val.limbs(), sizeof(*val.limbs()));
+ if(s != val.sign())
+ val.negate();
+}
+template <class Archive, class Int>
+void do_serialize(Archive& ar, Int& val, mpl::true_ const&, mpl::true_ const&, mpl::true_ const&)
+{
+ // Store.
+ // Trivial.
+ // Binary.
+ bool s = val.sign();
+ ar & s;
+ ar.save_binary(val.limbs(), sizeof(*val.limbs()));
+}
+
+}
+
+template<class Archive, unsigned MinBits, unsigned MaxBits, mp::cpp_integer_type SignType, mp::cpp_int_check_type Checked, class Allocator>
+void serialize(Archive & ar, mp::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>& val, const unsigned int /*version*/)
+{
+ typedef typename Archive::is_saving save_tag;
+ typedef mpl::bool_<mp::backends::is_trivial_cpp_int<mp::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator> >::value> trivial_tag;
+ typedef typename cpp_int_detail::is_binary_archive<Archive>::type binary_tag;
+
+ // Just dispatch to the correct method:
+ cpp_int_detail::do_serialize(ar, val, save_tag(), trivial_tag(), binary_tag());
+}
+
+}} // namespaces
+
+#endif // BOOST_MP_CPP_INT_SERIALIZE_HPP
+
diff --git a/3party/boost/boost/multiprecision/debug_adaptor.hpp b/3party/boost/boost/multiprecision/debug_adaptor.hpp
index 453d3e7d1c..4dc14aadf3 100644
--- a/3party/boost/boost/multiprecision/debug_adaptor.hpp
+++ b/3party/boost/boost/multiprecision/debug_adaptor.hpp
@@ -108,6 +108,14 @@ public:
{
return m_value;
}
+ template <class Archive>
+ void serialize(Archive& ar, const unsigned int /*version*/)
+ {
+ ar & m_value;
+ typedef typename Archive::is_loading tag;
+ if(tag::value)
+ update_view();
+ }
};
template <class Backend>
@@ -336,6 +344,13 @@ inline unsigned eval_lsb(const debug_adaptor<Backend>& arg)
}
template <class Backend>
+inline unsigned eval_msb(const debug_adaptor<Backend>& arg)
+{
+ using default_ops::eval_msb;
+ return eval_msb(arg.value());
+}
+
+template <class Backend>
inline bool eval_bit_test(const debug_adaptor<Backend>& arg, unsigned a)
{
using default_ops::eval_bit_test;
diff --git a/3party/boost/boost/multiprecision/detail/big_lanczos.hpp b/3party/boost/boost/multiprecision/detail/big_lanczos.hpp
index 094bcb0229..03d3203ec8 100644
--- a/3party/boost/boost/multiprecision/detail/big_lanczos.hpp
+++ b/3party/boost/boost/multiprecision/detail/big_lanczos.hpp
@@ -26,15 +26,7 @@ struct lanczos<multiprecision::number<Backend, ExpressionTemplates>, Policy>
typename mpl::if_c<
precision_type::value <= 122,
lanczos22UDT,
- typename mpl::if_c<
- precision_type::value <= 172,
- lanczos31UDT,
- typename mpl::if_c<
- precision_type::value <= 372,
- lanczos61UDT,
- undefined_lanczos
- >::type
- >::type
+ undefined_lanczos
>::type
>::type type;
};
@@ -44,3 +36,4 @@ struct lanczos<multiprecision::number<Backend, ExpressionTemplates>, Policy>
}} // namespaces
#endif
+
diff --git a/3party/boost/boost/multiprecision/detail/bitscan.hpp b/3party/boost/boost/multiprecision/detail/bitscan.hpp
new file mode 100644
index 0000000000..40602a939b
--- /dev/null
+++ b/3party/boost/boost/multiprecision/detail/bitscan.hpp
@@ -0,0 +1,229 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock. 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_
+//
+// Comparison operators for cpp_int_backend:
+//
+#ifndef BOOST_MP_DETAIL_BITSCAN_HPP
+#define BOOST_MP_DETAIL_BITSCAN_HPP
+
+#if defined(BOOST_MSVC) && (defined(_M_IX86) || defined(_M_X64))
+#include <Intrin.h>
+#endif
+
+namespace boost{ namespace multiprecision{ namespace detail{
+
+template <class Unsigned>
+inline unsigned find_lsb(Unsigned mask, const mpl::int_<0>&)
+{
+ unsigned result = 0;
+ while(!(mask & 1u))
+ {
+ mask >>= 1;
+ ++result;
+ }
+ return result;
+}
+
+template <class Unsigned>
+inline unsigned find_msb(Unsigned mask, const mpl::int_<0>&)
+{
+ unsigned index = 0;
+ while(mask)
+ {
+ ++index;
+ mask >>= 1;
+ }
+ return --index;
+}
+
+#if defined(BOOST_MSVC) && (defined(_M_IX86) || defined(_M_X64))
+
+#pragma intrinsic(_BitScanForward,_BitScanReverse)
+
+BOOST_FORCEINLINE unsigned find_lsb(unsigned long mask, const mpl::int_<1>&)
+{
+ unsigned long result;
+ _BitScanForward(&result, mask);
+ return result;
+}
+
+BOOST_FORCEINLINE unsigned find_msb(unsigned long mask, const mpl::int_<1>&)
+{
+ unsigned long result;
+ _BitScanReverse(&result, mask);
+ return result;
+}
+#ifdef _M_X64
+
+#pragma intrinsic(_BitScanForward64,_BitScanReverse64)
+
+BOOST_FORCEINLINE unsigned find_lsb(unsigned __int64 mask, const mpl::int_<2>&)
+{
+ unsigned long result;
+ _BitScanForward64(&result, mask);
+ return result;
+}
+template <class Unsigned>
+BOOST_FORCEINLINE unsigned find_msb(Unsigned mask, const mpl::int_<2>&)
+{
+ unsigned long result;
+ _BitScanReverse64(&result, mask);
+ return result;
+}
+#endif
+
+template <class Unsigned>
+BOOST_FORCEINLINE unsigned find_lsb(Unsigned mask)
+{
+ typedef typename make_unsigned<Unsigned>::type ui_type;
+ typedef typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned long),
+ mpl::int_<1>,
+#ifdef _M_X64
+ typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(__int64),
+ mpl::int_<2>,
+ mpl::int_<0>
+ >::type
+#else
+ mpl::int_<0>
+#endif
+ >::type tag_type;
+ return find_lsb(static_cast<ui_type>(mask), tag_type());
+}
+
+template <class Unsigned>
+BOOST_FORCEINLINE unsigned find_msb(Unsigned mask)
+{
+ typedef typename make_unsigned<Unsigned>::type ui_type;
+ typedef typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned long),
+ mpl::int_<1>,
+#ifdef _M_X64
+ typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(__int64),
+ mpl::int_<2>,
+ mpl::int_<0>
+ >::type
+#else
+ mpl::int_<0>
+#endif
+ >::type tag_type;
+ return find_msb(static_cast<ui_type>(mask), tag_type());
+}
+
+#elif defined(BOOST_GCC) || defined(__clang__) || (defined(BOOST_INTEL) && defined(__GNUC__))
+
+BOOST_FORCEINLINE unsigned find_lsb(unsigned mask, mpl::int_<1> const&)
+{
+ return __builtin_ctz(mask);
+}
+BOOST_FORCEINLINE unsigned find_lsb(unsigned long mask, mpl::int_<2> const&)
+{
+ return __builtin_ctzl(mask);
+}
+BOOST_FORCEINLINE unsigned find_lsb(unsigned long long mask, mpl::int_<3> const&)
+{
+ return __builtin_ctzll(mask);
+}
+BOOST_FORCEINLINE unsigned find_msb(unsigned mask, mpl::int_<1> const&)
+{
+ return sizeof(unsigned) * CHAR_BIT - 1 - __builtin_clz(mask);
+}
+BOOST_FORCEINLINE unsigned find_msb(unsigned long mask, mpl::int_<2> const&)
+{
+ return sizeof(unsigned long) * CHAR_BIT - 1 - __builtin_clzl(mask);
+}
+BOOST_FORCEINLINE unsigned find_msb(unsigned long long mask, mpl::int_<3> const&)
+{
+ return sizeof(unsigned long long) * CHAR_BIT - 1 - __builtin_clzll(mask);
+}
+
+template <class Unsigned>
+BOOST_FORCEINLINE unsigned find_lsb(Unsigned mask)
+{
+ typedef typename make_unsigned<Unsigned>::type ui_type;
+ typedef typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned),
+ mpl::int_<1>,
+ typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned long),
+ mpl::int_<2>,
+ typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned long long),
+ mpl::int_<3>,
+ mpl::int_<0>
+ >::type
+ >::type
+ >::type tag_type;
+ return find_lsb(static_cast<ui_type>(mask), tag_type());
+}
+template <class Unsigned>
+BOOST_FORCEINLINE unsigned find_msb(Unsigned mask)
+{
+ typedef typename make_unsigned<Unsigned>::type ui_type;
+ typedef typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned),
+ mpl::int_<1>,
+ typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned long),
+ mpl::int_<2>,
+ typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned long long),
+ mpl::int_<3>,
+ mpl::int_<0>
+ >::type
+ >::type
+ >::type tag_type;
+ return find_msb(static_cast<ui_type>(mask), tag_type());
+}
+#elif defined(BOOST_INTEL)
+BOOST_FORCEINLINE unsigned find_lsb(unsigned mask, mpl::int_<1> const&)
+{
+ return _bit_scan_forward(mask);
+}
+BOOST_FORCEINLINE unsigned find_msb(unsigned mask, mpl::int_<1> const&)
+{
+ return _bit_scan_reverse(mask);
+}
+template <class Unsigned>
+BOOST_FORCEINLINE unsigned find_lsb(Unsigned mask)
+{
+ typedef typename make_unsigned<Unsigned>::type ui_type;
+ typedef typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned),
+ mpl::int_<1>,
+ mpl::int_<0>
+ >::type tag_type;
+ return find_lsb(static_cast<ui_type>(mask), tag_type());
+}
+template <class Unsigned>
+BOOST_FORCEINLINE unsigned find_msb(Unsigned mask)
+{
+ typedef typename make_unsigned<Unsigned>::type ui_type;
+ typedef typename mpl::if_c<
+ sizeof(Unsigned) <= sizeof(unsigned),
+ mpl::int_<1>,
+ mpl::int_<0>
+ >::type tag_type;
+ return find_msb(static_cast<ui_type>(mask), tag_type());
+}
+#else
+template <class Unsigned>
+BOOST_FORCEINLINE unsigned find_lsb(Unsigned mask)
+{
+ return find_lsb(mask, mpl::int_<0>());
+}
+template <class Unsigned>
+BOOST_FORCEINLINE unsigned find_msb(Unsigned mask)
+{
+ return find_msb(mask, mpl::int_<0>());
+}
+#endif
+
+}}}
+
+#endif
+
diff --git a/3party/boost/boost/multiprecision/detail/default_ops.hpp b/3party/boost/boost/multiprecision/detail/default_ops.hpp
index ed805430f7..c34177c1c3 100644
--- a/3party/boost/boost/multiprecision/detail/default_ops.hpp
+++ b/3party/boost/boost/multiprecision/detail/default_ops.hpp
@@ -11,6 +11,7 @@
#include <boost/math/special_functions/fpclassify.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/front.hpp>
+#include <boost/mpl/fold.hpp>
#include <boost/cstdint.hpp>
#include <boost/type_traits/make_unsigned.hpp>
@@ -808,6 +809,7 @@ struct terminal
template<class R, class B>
struct calculate_next_larger_type
{
+ // Find which list we're looking through:
typedef typename mpl::if_<
is_signed<R>,
typename B::signed_types,
@@ -817,11 +819,23 @@ struct calculate_next_larger_type
typename B::float_types
>::type
>::type list_type;
+ // A predicate to find a type with enough bits:
typedef typename has_enough_bits<R, std::numeric_limits<R>::digits>::template type<mpl::_> pred_type;
+ // See if the last type is in the list, if so we have to start after this:
typedef typename mpl::find_if<
list_type,
+ is_same<R, mpl::_>
+ >::type start_last;
+ // Where we're starting from, either the start of the sequence or the last type found:
+ typedef typename mpl::if_<is_same<start_last, typename mpl::end<list_type>::type>, typename mpl::begin<list_type>::type, start_last>::type start_seq;
+ // The range we're searching:
+ typedef mpl::iterator_range<start_seq, typename mpl::end<list_type>::type> range;
+ // Find the next type:
+ typedef typename mpl::find_if<
+ range,
pred_type
>::type iter_type;
+ // Either the next type, or a "terminal" to indicate we've run out of types to search:
typedef typename mpl::eval_if<
is_same<typename mpl::end<list_type>::type, iter_type>,
mpl::identity<terminal<R> >,
@@ -948,7 +962,7 @@ inline void eval_trunc(T& result, const T& a)
{
BOOST_STATIC_ASSERT_MSG(number_category<T>::value == number_kind_floating_point, "The trunc function is only valid for floating point types.");
int c = eval_fpclassify(a);
- if(c == FP_NAN || c == FP_INFINITE)
+ if(c == (int)FP_NAN || c == (int)FP_INFINITE)
{
result = boost::math::policies::raise_rounding_error("boost::multiprecision::trunc<%1%>(%1%)", 0, number<T>(a), number<T>(a), boost::math::policies::policy<>()).backend();
return;
@@ -965,7 +979,7 @@ inline void eval_round(T& result, const T& a)
BOOST_STATIC_ASSERT_MSG(number_category<T>::value == number_kind_floating_point, "The round function is only valid for floating point types.");
typedef typename boost::multiprecision::detail::canonical<float, T>::type fp_type;
int c = eval_fpclassify(a);
- if(c == FP_NAN || c == FP_INFINITE)
+ if((c == (int)FP_NAN) || (c == (int)FP_INFINITE))
{
result = boost::math::policies::raise_rounding_error("boost::multiprecision::round<%1%>(%1%)", 0, number<T>(a), number<T>(a), boost::math::policies::policy<>()).backend();
return;
@@ -1020,6 +1034,15 @@ template <class T>
inline unsigned eval_lsb(const T& val)
{
typedef typename boost::multiprecision::detail::canonical<unsigned, T>::type ui_type;
+ int c = eval_get_sign(val);
+ if(c == 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("No bits were set in the operand."));
+ }
+ if(c < 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("Testing individual bits in negative values is not supported - results are undefined."));
+ }
unsigned result = 0;
T mask, t;
mask = ui_type(1);
@@ -1035,6 +1058,36 @@ inline unsigned eval_lsb(const T& val)
}
template <class T>
+inline int eval_msb(const T& val)
+{
+ int c = eval_get_sign(val);
+ if(c == 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("No bits were set in the operand."));
+ }
+ if(c < 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("Testing individual bits in negative values is not supported - results are undefined."));
+ }
+ //
+ // This implementation is really really rubbish - it does
+ // a linear scan for the most-significant-bit. We should really
+ // do a binary search, but as none of our backends actually needs
+ // this implementation, we'll leave it for now. In fact for most
+ // backends it's likely that there will always be a more efficient
+ // native implementation possible.
+ //
+ unsigned result = 0;
+ T t(val);
+ while(!eval_is_zero(t))
+ {
+ eval_right_shift(t, 1);
+ ++result;
+ }
+ return --result;
+}
+
+template <class T>
inline bool eval_bit_test(const T& val, unsigned index)
{
typedef typename boost::multiprecision::detail::canonical<unsigned, T>::type ui_type;
@@ -1077,6 +1130,63 @@ inline void eval_bit_unset(T& val, unsigned index)
eval_bitwise_xor(val, mask);
}
+template <class B>
+void eval_integer_sqrt(B& s, B& r, const B& x)
+{
+ //
+ // This is slow bit-by-bit integer square root, see for example
+ // http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Binary_numeral_system_.28base_2.29
+ // There are better methods such as http://hal.inria.fr/docs/00/07/28/54/PDF/RR-3805.pdf
+ // and http://hal.inria.fr/docs/00/07/21/13/PDF/RR-4475.pdf which should be implemented
+ // at some point.
+ //
+ typedef typename boost::multiprecision::detail::canonical<unsigned char, B>::type ui_type;
+
+ s = ui_type(0u);
+ if(eval_get_sign(x) == 0)
+ {
+ r = ui_type(0u);
+ return;
+ }
+ int g = eval_msb(x);
+ if(g == 0)
+ {
+ r = ui_type(1);
+ return;
+ }
+
+ B t;
+ r = x;
+ g /= 2;
+ int org_g = g;
+ eval_bit_set(s, g);
+ eval_bit_set(t, 2 * g);
+ eval_subtract(r, x, t);
+ --g;
+ if(eval_get_sign(r) == 0)
+ return;
+ int msbr = eval_msb(r);
+ do
+ {
+ if(msbr >= org_g + g + 1)
+ {
+ t = s;
+ eval_left_shift(t, g + 1);
+ eval_bit_set(t, 2 * g);
+ if(t.compare(r) <= 0)
+ {
+ eval_bit_set(s, g);
+ eval_subtract(r, t);
+ if(eval_get_sign(r) == 0)
+ return;
+ msbr = eval_msb(r);
+ }
+ }
+ --g;
+ }
+ while(g >= 0);
+}
+
//
// These have to implemented by the backend, declared here so that our macro generated code compiles OK.
//
@@ -1117,52 +1227,52 @@ template <class tag, class A1, class A2, class A3, class A4>
inline int fpclassify BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::detail::expression<tag, A1, A2, A3, A4>& arg)
{
typedef typename multiprecision::detail::expression<tag, A1, A2, A3, A4>::result_type value_type;
- return fpclassify(value_type(arg));
+ return (fpclassify)(value_type(arg));
}
template <class Backend, multiprecision::expression_template_option ExpressionTemplates>
inline bool isfinite BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::number<Backend, ExpressionTemplates>& arg)
{
- int v = fpclassify(arg);
- return (v != FP_INFINITE) && (v != FP_NAN);
+ int v = (fpclassify)(arg);
+ return (v != (int)FP_INFINITE) && (v != (int)FP_NAN);
}
template <class tag, class A1, class A2, class A3, class A4>
inline bool isfinite BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::detail::expression<tag, A1, A2, A3, A4>& arg)
{
typedef typename multiprecision::detail::expression<tag, A1, A2, A3, A4>::result_type value_type;
- return isfinite(value_type(arg));
+ return (isfinite)(value_type(arg));
}
template <class Backend, multiprecision::expression_template_option ExpressionTemplates>
inline bool isnan BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::number<Backend, ExpressionTemplates>& arg)
{
- return fpclassify(arg) == FP_NAN;
+ return (fpclassify)(arg) == (int)FP_NAN;
}
template <class tag, class A1, class A2, class A3, class A4>
inline bool isnan BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::detail::expression<tag, A1, A2, A3, A4>& arg)
{
typedef typename multiprecision::detail::expression<tag, A1, A2, A3, A4>::result_type value_type;
- return isnan(value_type(arg));
+ return (isnan)(value_type(arg));
}
template <class Backend, multiprecision::expression_template_option ExpressionTemplates>
inline bool isinf BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::number<Backend, ExpressionTemplates>& arg)
{
- return fpclassify(arg) == FP_INFINITE;
+ return (fpclassify)(arg) == (int)FP_INFINITE;
}
template <class tag, class A1, class A2, class A3, class A4>
inline bool isinf BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::detail::expression<tag, A1, A2, A3, A4>& arg)
{
typedef typename multiprecision::detail::expression<tag, A1, A2, A3, A4>::result_type value_type;
- return isinf(value_type(arg));
+ return (isinf)(value_type(arg));
}
template <class Backend, multiprecision::expression_template_option ExpressionTemplates>
inline bool isnormal BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::number<Backend, ExpressionTemplates>& arg)
{
- return fpclassify(arg) == FP_NORMAL;
+ return (fpclassify)(arg) == (int)FP_NORMAL;
}
template <class tag, class A1, class A2, class A3, class A4>
inline bool isnormal BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::detail::expression<tag, A1, A2, A3, A4>& arg)
{
typedef typename multiprecision::detail::expression<tag, A1, A2, A3, A4>::result_type value_type;
- return isnormal(value_type(arg));
+ return (isnormal)(value_type(arg));
}
} // namespace math
@@ -1249,7 +1359,7 @@ inline int itrunc(const detail::expression<tag, A1, A2, A3, A4>& v, const Policy
{
typedef typename detail::expression<tag, A1, A2, A3, A4>::result_type number_type;
number_type r = trunc(v, pol);
- if((r > (std::numeric_limits<int>::max)()) || r < (std::numeric_limits<int>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<int>::max)()) || r < (std::numeric_limits<int>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::itrunc<%1%>(%1%)", 0, number_type(v), 0, pol);
return r.template convert_to<int>();
}
@@ -1262,7 +1372,7 @@ template <class Backend, expression_template_option ExpressionTemplates, class P
inline int itrunc(const number<Backend, ExpressionTemplates>& v, const Policy& pol)
{
number<Backend, ExpressionTemplates> r = trunc(v, pol);
- if((r > (std::numeric_limits<int>::max)()) || r < (std::numeric_limits<int>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<int>::max)()) || r < (std::numeric_limits<int>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::itrunc<%1%>(%1%)", 0, v, 0, pol);
return r.template convert_to<int>();
}
@@ -1276,7 +1386,7 @@ inline long ltrunc(const detail::expression<tag, A1, A2, A3, A4>& v, const Polic
{
typedef typename detail::expression<tag, A1, A2, A3, A4>::result_type number_type;
number_type r = trunc(v, pol);
- if((r > (std::numeric_limits<long>::max)()) || r < (std::numeric_limits<long>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<long>::max)()) || r < (std::numeric_limits<long>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::ltrunc<%1%>(%1%)", 0, number_type(v), 0L, pol);
return r.template convert_to<long>();
}
@@ -1289,7 +1399,7 @@ template <class T, expression_template_option ExpressionTemplates, class Policy>
inline long ltrunc(const number<T, ExpressionTemplates>& v, const Policy& pol)
{
number<T, ExpressionTemplates> r = trunc(v, pol);
- if((r > (std::numeric_limits<long>::max)()) || r < (std::numeric_limits<long>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<long>::max)()) || r < (std::numeric_limits<long>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::ltrunc<%1%>(%1%)", 0, v, 0L, pol);
return r.template convert_to<long>();
}
@@ -1304,7 +1414,7 @@ inline long long lltrunc(const detail::expression<tag, A1, A2, A3, A4>& v, const
{
typedef typename detail::expression<tag, A1, A2, A3, A4>::result_type number_type;
number_type r = trunc(v, pol);
- if((r > (std::numeric_limits<long long>::max)()) || r < (std::numeric_limits<long long>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<long long>::max)()) || r < (std::numeric_limits<long long>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::lltrunc<%1%>(%1%)", 0, number_type(v), 0LL, pol);
return r.template convert_to<long long>();
}
@@ -1317,7 +1427,7 @@ template <class T, expression_template_option ExpressionTemplates, class Policy>
inline long long lltrunc(const number<T, ExpressionTemplates>& v, const Policy& pol)
{
number<T, ExpressionTemplates> r = trunc(v, pol);
- if((r > (std::numeric_limits<long long>::max)()) || r < (std::numeric_limits<long long>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<long long>::max)()) || r < (std::numeric_limits<long long>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::lltrunc<%1%>(%1%)", 0, v, 0LL, pol);
return r.template convert_to<long long>();
}
@@ -1347,7 +1457,7 @@ inline int iround(const detail::expression<tag, A1, A2, A3, A4>& v, const Policy
{
typedef typename detail::expression<tag, A1, A2, A3, A4>::result_type number_type;
number_type r = round(v, pol);
- if((r > (std::numeric_limits<int>::max)()) || r < (std::numeric_limits<int>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<int>::max)()) || r < (std::numeric_limits<int>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::iround<%1%>(%1%)", 0, number_type(v), 0, pol);
return r.template convert_to<int>();
}
@@ -1360,7 +1470,7 @@ template <class T, expression_template_option ExpressionTemplates, class Policy>
inline int iround(const number<T, ExpressionTemplates>& v, const Policy& pol)
{
number<T, ExpressionTemplates> r = round(v, pol);
- if((r > (std::numeric_limits<int>::max)()) || r < (std::numeric_limits<int>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<int>::max)()) || r < (std::numeric_limits<int>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::iround<%1%>(%1%)", 0, v, 0, pol);
return r.template convert_to<int>();
}
@@ -1374,7 +1484,7 @@ inline long lround(const detail::expression<tag, A1, A2, A3, A4>& v, const Polic
{
typedef typename detail::expression<tag, A1, A2, A3, A4>::result_type number_type;
number_type r = round(v, pol);
- if((r > (std::numeric_limits<long>::max)()) || r < (std::numeric_limits<long>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<long>::max)()) || r < (std::numeric_limits<long>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::lround<%1%>(%1%)", 0, number_type(v), 0L, pol);
return r.template convert_to<long>();
}
@@ -1387,7 +1497,7 @@ template <class T, expression_template_option ExpressionTemplates, class Policy>
inline long lround(const number<T, ExpressionTemplates>& v, const Policy& pol)
{
number<T, ExpressionTemplates> r = round(v, pol);
- if((r > (std::numeric_limits<long>::max)()) || r < (std::numeric_limits<long>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<long>::max)()) || r < (std::numeric_limits<long>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::lround<%1%>(%1%)", 0, v, 0L, pol);
return r.template convert_to<long>();
}
@@ -1402,7 +1512,7 @@ inline long long llround(const detail::expression<tag, A1, A2, A3, A4>& v, const
{
typedef typename detail::expression<tag, A1, A2, A3, A4>::result_type number_type;
number_type r = round(v, pol);
- if((r > (std::numeric_limits<long long>::max)()) || r < (std::numeric_limits<long long>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<long long>::max)()) || r < (std::numeric_limits<long long>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::iround<%1%>(%1%)", 0, number_type(v), 0LL, pol);
return r.template convert_to<long long>();
}
@@ -1415,7 +1525,7 @@ template <class T, expression_template_option ExpressionTemplates, class Policy>
inline long long llround(const number<T, ExpressionTemplates>& v, const Policy& pol)
{
number<T, ExpressionTemplates> r = round(v, pol);
- if((r > (std::numeric_limits<long long>::max)()) || r < (std::numeric_limits<long long>::min)() || !boost::math::isfinite(v))
+ if((r > (std::numeric_limits<long long>::max)()) || r < (std::numeric_limits<long long>::min)() || !(boost::math::isfinite)(v))
return boost::math::policies::raise_rounding_error("boost::multiprecision::iround<%1%>(%1%)", 0, v, 0LL, pol);
return r.template convert_to<long long>();
}
@@ -1426,6 +1536,26 @@ inline long long llround(const number<T, ExpressionTemplates>& v)
}
#endif
+template <class B, expression_template_option ExpressionTemplates>
+inline typename enable_if_c<number_category<B>::value == number_kind_integer, number<B, ExpressionTemplates> >::type
+ sqrt(const number<B, ExpressionTemplates>& x)
+{
+ using default_ops::eval_integer_sqrt;
+ number<B, ExpressionTemplates> s, r;
+ eval_integer_sqrt(s.backend(), r.backend(), x.backend());
+ return s;
+}
+
+template <class B, expression_template_option ExpressionTemplates>
+inline typename enable_if_c<number_category<B>::value == number_kind_integer, number<B, ExpressionTemplates> >::type
+ sqrt(const number<B, ExpressionTemplates>& x, number<B, ExpressionTemplates>& r)
+{
+ using default_ops::eval_integer_sqrt;
+ number<B, ExpressionTemplates> s;
+ eval_integer_sqrt(s.backend(), r.backend(), x.backend());
+ return s;
+}
+
#define UNARY_OP_FUNCTOR(func, category)\
namespace detail{\
template <class Backend> \
@@ -1877,8 +2007,10 @@ UNARY_OP_FUNCTOR(cosh, number_kind_floating_point)
UNARY_OP_FUNCTOR(sinh, number_kind_floating_point)
UNARY_OP_FUNCTOR(tanh, number_kind_floating_point)
-HETERO_BINARY_OP_FUNCTOR(ldexp, int, number_kind_floating_point)
-HETERO_BINARY_OP_FUNCTOR(frexp, int*, number_kind_floating_point)
+HETERO_BINARY_OP_FUNCTOR(ldexp, short, number_kind_floating_point)
+HETERO_BINARY_OP_FUNCTOR(frexp, short*, number_kind_floating_point)
+HETERO_BINARY_OP_FUNCTOR_B(ldexp, int, number_kind_floating_point)
+HETERO_BINARY_OP_FUNCTOR_B(frexp, int*, number_kind_floating_point)
HETERO_BINARY_OP_FUNCTOR_B(ldexp, long, number_kind_floating_point)
HETERO_BINARY_OP_FUNCTOR_B(frexp, long*, number_kind_floating_point)
HETERO_BINARY_OP_FUNCTOR_B(ldexp, long long, number_kind_floating_point)
diff --git a/3party/boost/boost/multiprecision/detail/et_ops.hpp b/3party/boost/boost/multiprecision/detail/et_ops.hpp
index a72dee90a2..3778e01029 100644
--- a/3party/boost/boost/multiprecision/detail/et_ops.hpp
+++ b/3party/boost/boost/multiprecision/detail/et_ops.hpp
@@ -11,12 +11,19 @@ namespace boost{ namespace multiprecision{
//
// Non-member operators for number:
//
-// Unary operators first:
+// Unary operators first.
+// Note that these *must* return by value, even though that's somewhat against
+// existing practice. The issue is that in C++11 land one could easily and legitimately
+// write:
+// auto x = +1234_my_user_defined_suffix;
+// which would result in a dangling-reference-to-temporary if unary + returned a reference
+// to it's argument. While return-by-value is obviously inefficient in other situations
+// the reality is that no one ever uses unary operator+ anyway...!
//
template <class B, expression_template_option ExpressionTemplates>
-inline BOOST_CONSTEXPR const number<B, ExpressionTemplates>& operator + (const number<B, ExpressionTemplates>& v) { return v; }
+inline BOOST_CONSTEXPR const number<B, ExpressionTemplates> operator + (const number<B, ExpressionTemplates>& v) { return v; }
template <class tag, class Arg1, class Arg2, class Arg3, class Arg4>
-inline BOOST_CONSTEXPR const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& operator + (const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& v) { return v; }
+inline BOOST_CONSTEXPR const detail::expression<tag, Arg1, Arg2, Arg3, Arg4> operator + (const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& v) { return v; }
template <class B>
inline detail::expression<detail::negate, number<B, et_on> > operator - (const number<B, et_on>& v)
{
diff --git a/3party/boost/boost/multiprecision/detail/float_string_cvt.hpp b/3party/boost/boost/multiprecision/detail/float_string_cvt.hpp
index 6c1f323e95..7ce246a240 100644
--- a/3party/boost/boost/multiprecision/detail/float_string_cvt.hpp
+++ b/3party/boost/boost/multiprecision/detail/float_string_cvt.hpp
@@ -16,7 +16,8 @@
namespace boost{ namespace multiprecision{ namespace detail{
-inline void round_string_up_at(std::string& s, int pos)
+template <class I>
+inline void round_string_up_at(std::string& s, int pos, I& expon)
{
//
// Rounds up a string representation of a number at pos:
@@ -24,14 +25,18 @@ inline void round_string_up_at(std::string& s, int pos)
if(pos < 0)
{
s.insert(0, 1, '1');
+ s.erase(s.size() - 1);
+ ++expon;
}
else if(s[pos] == '9')
{
s[pos] = '0';
- round_string_up_at(s, pos - 1);
+ round_string_up_at(s, pos - 1, expon);
}
else
{
+ if((pos == 0) && (s[pos] == '0') && (s.size() == 1))
+ ++expon;
++s[pos];
}
}
@@ -54,25 +59,25 @@ std::string convert_to_string(Backend b, std::streamsize digits, std::ios_base::
std::string result;
bool iszero = false;
bool isneg = false;
- exponent_type expon;
+ exponent_type expon = 0;
std::streamsize org_digits = digits;
BOOST_ASSERT(digits > 0);
int fpt = eval_fpclassify(b);
- if(fpt == FP_ZERO)
+ if(fpt == (int)FP_ZERO)
{
result = "0";
iszero = true;
}
- else if(fpt == FP_INFINITE)
+ else if(fpt == (int)FP_INFINITE)
{
if(b.compare(ui_type(0)) < 0)
return "-inf";
else
return ((f & std::ios_base::showpos) == std::ios_base::showpos) ? "+inf" : "inf";
}
- else if(fpt == FP_NAN)
+ else if(fpt == (int)FP_NAN)
{
return "nan";
}
@@ -91,8 +96,21 @@ std::string convert_to_string(Backend b, std::streamsize digits, std::ios_base::
eval_log10(t, b);
eval_floor(t, t);
eval_convert_to(&expon, t);
- eval_pow(t, ten, -expon);
- eval_multiply(t, b);
+ if(-expon > std::numeric_limits<number<Backend> >::max_exponent10 - 3)
+ {
+ int e = -expon / 2;
+ Backend t2;
+ eval_pow(t2, ten, e);
+ eval_multiply(t, t2, b);
+ eval_multiply(t, t2);
+ if(expon & 1)
+ eval_multiply(t, ten);
+ }
+ else
+ {
+ eval_pow(t, ten, -expon);
+ eval_multiply(t, b);
+ }
//
// Make sure we're between [1,10) and adjust if not:
//
@@ -137,14 +155,14 @@ std::string convert_to_string(Backend b, std::streamsize digits, std::ios_base::
if((cdigit == 5) && (t.compare(ui_type(0)) == 0))
{
// Bankers rounding:
- if((*result.rend() - '0') & 1)
+ if((*result.rbegin() - '0') & 1)
{
- round_string_up_at(result, result.size() - 1);
+ round_string_up_at(result, result.size() - 1, expon);
}
}
else if(cdigit >= 5)
{
- round_string_up_at(result, result.size() - 1);
+ round_string_up_at(result, result.size() - 1, expon);
}
}
}
diff --git a/3party/boost/boost/multiprecision/detail/functions/constants.hpp b/3party/boost/boost/multiprecision/detail/functions/constants.hpp
index b32f3f2822..3a283c5f2e 100644
--- a/3party/boost/boost/multiprecision/detail/functions/constants.hpp
+++ b/3party/boost/boost/multiprecision/detail/functions/constants.hpp
@@ -81,7 +81,6 @@ template <class T>
void calc_e(T& result, unsigned digits)
{
typedef typename mpl::front<typename T::unsigned_types>::type ui_type;
- typedef typename mpl::front<typename T::float_types>::type real_type;
//
// 1100 digits in string form:
//
diff --git a/3party/boost/boost/multiprecision/detail/functions/pow.hpp b/3party/boost/boost/multiprecision/detail/functions/pow.hpp
index 32029ad528..5b54a1a9a8 100644
--- a/3party/boost/boost/multiprecision/detail/functions/pow.hpp
+++ b/3party/boost/boost/multiprecision/detail/functions/pow.hpp
@@ -1,6 +1,6 @@
-// Copyright Christopher Kormanyos 2002 - 2011.
-// Copyright 2011 John Maddock. Distributed under the Boost
+// Copyright Christopher Kormanyos 2002 - 2013.
+// Copyright 2011 - 2013 John Maddock. Distributed under the Boost
// 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)
@@ -142,10 +142,6 @@ void hyp1F0(T& H1F0, const T& a, const T& x)
// There are no checks on input range or parameter boundaries.
typedef typename boost::multiprecision::detail::canonical<int, T>::type si_type;
- typedef typename boost::multiprecision::detail::canonical<unsigned, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
- typedef typename mpl::front<typename T::float_types>::type fp_type;
BOOST_ASSERT(&H1F0 != &x);
BOOST_ASSERT(&H1F0 != &a);
@@ -200,17 +196,16 @@ void eval_exp(T& result, const T& x)
typedef typename boost::multiprecision::detail::canonical<int, T>::type si_type;
typedef typename T::exponent_type exp_type;
typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
- typedef typename boost::multiprecision::detail::canonical<float, T>::type float_type;
// Handle special arguments.
int type = eval_fpclassify(x);
bool isneg = eval_get_sign(x) < 0;
- if(type == FP_NAN)
+ if(type == (int)FP_NAN)
{
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ result = x;
return;
}
- else if(type == FP_INFINITE)
+ else if(type == (int)FP_INFINITE)
{
result = x;
if(isneg)
@@ -219,7 +214,7 @@ void eval_exp(T& result, const T& x)
result = x;
return;
}
- else if(type == FP_ZERO)
+ else if(type == (int)FP_ZERO)
{
result = ui_type(1);
return;
@@ -232,17 +227,6 @@ void eval_exp(T& result, const T& x)
xx.negate();
// Check the range of the argument.
- static const canonical_exp_type maximum_arg_for_exp = std::numeric_limits<number<T, et_on> >::max_exponent == 0 ? (std::numeric_limits<long>::max)() : std::numeric_limits<number<T, et_on> >::max_exponent;
-
- if(xx.compare(maximum_arg_for_exp) >= 0)
- {
- // Overflow / underflow
- if(isneg)
- result = ui_type(0);
- else
- result = std::numeric_limits<number<T, et_on> >::has_infinity ? std::numeric_limits<number<T, et_on> >::infinity().backend() : (std::numeric_limits<number<T, et_on> >::max)().backend();
- return;
- }
if(xx.compare(si_type(1)) <= 0)
{
//
@@ -326,7 +310,6 @@ void eval_log(T& result, const T& arg)
// then let y = x - 1 and compute:
// log(x) = log(2) * n + log1p(1 + y)
//
- typedef typename boost::multiprecision::detail::canonical<int, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<unsigned, T>::type ui_type;
typedef typename T::exponent_type exp_type;
typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
@@ -409,9 +392,6 @@ inline void eval_pow(T& result, const T& x, const T& a)
{
BOOST_STATIC_ASSERT_MSG(number_category<T>::value == number_kind_floating_point, "The pow function is only valid for floating point types.");
typedef typename boost::multiprecision::detail::canonical<int, T>::type si_type;
- typedef typename boost::multiprecision::detail::canonical<unsigned, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
typedef typename mpl::front<typename T::float_types>::type fp_type;
if((&result == &x) || (&result == &a))
@@ -436,7 +416,18 @@ inline void eval_pow(T& result, const T& x, const T& a)
result = x;
return;
case FP_ZERO:
- result = si_type(1);
+ switch(eval_fpclassify(a))
+ {
+ case FP_ZERO:
+ result = si_type(1);
+ break;
+ case FP_NAN:
+ result = a;
+ break;
+ default:
+ result = x;
+ break;
+ }
return;
case FP_NAN:
result = x;
@@ -444,13 +435,14 @@ inline void eval_pow(T& result, const T& x, const T& a)
default: ;
}
- if(eval_get_sign(a) == 0)
+ int s = eval_get_sign(a);
+ if(s == 0)
{
result = si_type(1);
return;
}
- if(a.compare(si_type(-1)) < 0)
+ if(s < 0)
{
T t, da;
t = a;
@@ -460,7 +452,6 @@ inline void eval_pow(T& result, const T& x, const T& a)
return;
}
- bool bo_a_isint = false;
typename boost::multiprecision::detail::canonical<boost::intmax_t, T>::type an;
T fa;
try
@@ -478,9 +469,33 @@ inline void eval_pow(T& result, const T& x, const T& a)
an = (std::numeric_limits<boost::intmax_t>::max)();
}
- if((eval_get_sign(x) < 0) && !bo_a_isint)
+ if((eval_get_sign(x) < 0))
{
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ typename boost::multiprecision::detail::canonical<boost::uintmax_t, T>::type aun;
+ try
+ {
+ eval_convert_to(&aun, a);
+ if(a.compare(aun) == 0)
+ {
+ fa = x;
+ fa.negate();
+ eval_pow(result, fa, a);
+ if(aun & 1u)
+ result.negate();
+ return;
+ }
+ }
+ catch(const std::exception&)
+ {
+ // conversion failed, just fall through, value is not an integer.
+ }
+ if(std::numeric_limits<number<T, et_on> >::has_quiet_NaN)
+ result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ else
+ {
+ BOOST_THROW_EXCEPTION(std::domain_error("Result of pow is undefined or non-real and there is no NaN for this number type."));
+ }
+ return;
}
T t, da;
@@ -595,10 +610,7 @@ namespace detail{
template <class T>
void sinhcosh(const T& x, T* p_sinh, T* p_cosh)
{
- typedef typename boost::multiprecision::detail::canonical<int, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<unsigned, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
typedef typename mpl::front<typename T::float_types>::type fp_type;
switch(eval_fpclassify(x))
diff --git a/3party/boost/boost/multiprecision/detail/functions/trig.hpp b/3party/boost/boost/multiprecision/detail/functions/trig.hpp
index a3c3c71102..baa42be38c 100644
--- a/3party/boost/boost/multiprecision/detail/functions/trig.hpp
+++ b/3party/boost/boost/multiprecision/detail/functions/trig.hpp
@@ -17,9 +17,6 @@ void hyp0F1(T& result, const T& b, const T& x)
{
typedef typename boost::multiprecision::detail::canonical<boost::int32_t, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<boost::uint32_t, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
- typedef typename mpl::front<typename T::float_types>::type fp_type;
// Compute the series representation of Hypergeometric0F1 taken from
// http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric0F1/06/01/01/
@@ -42,7 +39,7 @@ void hyp0F1(T& result, const T& b, const T& x)
tol.negate();
T term;
- static const unsigned series_limit =
+ static const int series_limit =
boost::multiprecision::detail::digits2<number<T, et_on> >::value < 100
? 100 : boost::multiprecision::detail::digits2<number<T, et_on> >::value;
// Series expansion of hyperg_0f1(; b; x).
@@ -82,15 +79,16 @@ void eval_sin(T& result, const T& x)
typedef typename boost::multiprecision::detail::canonical<boost::int32_t, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<boost::uint32_t, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
typedef typename mpl::front<typename T::float_types>::type fp_type;
switch(eval_fpclassify(x))
{
case FP_INFINITE:
case FP_NAN:
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ if(std::numeric_limits<number<T, et_on> >::has_quiet_NaN)
+ result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ else
+ BOOST_THROW_EXCEPTION(std::domain_error("Result is undefined or complex and there is no NaN for this number type."));
return;
case FP_ZERO:
result = ui_type(0);
@@ -228,15 +226,16 @@ void eval_cos(T& result, const T& x)
typedef typename boost::multiprecision::detail::canonical<boost::int32_t, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<boost::uint32_t, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
typedef typename mpl::front<typename T::float_types>::type fp_type;
switch(eval_fpclassify(x))
{
case FP_INFINITE:
case FP_NAN:
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ if(std::numeric_limits<number<T, et_on> >::has_quiet_NaN)
+ result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ else
+ BOOST_THROW_EXCEPTION(std::domain_error("Result is undefined or complex and there is no NaN for this number type."));
return;
case FP_ZERO:
result = ui_type(1);
@@ -293,10 +292,8 @@ void eval_cos(T& result, const T& x)
const bool b_zero = eval_get_sign(xx) == 0;
const bool b_pi_half = com == 0;
- // Check if the reduced argument is very close to 0 or pi/2.
- const bool b_near_zero = xx.compare(fp_type(1e-4)) < 0;
- eval_subtract(t, xx);
- const bool b_near_pi_half = t.compare(fp_type(1e-4)) < 0;
+ // Check if the reduced argument is very close to 0.
+ const bool b_near_zero = xx.compare(fp_type(1e-1)) < 0;
if(b_zero)
{
@@ -314,44 +311,10 @@ void eval_cos(T& result, const T& x)
hyp0F1(result, n_pi, t);
BOOST_MATH_INSTRUMENT_CODE(result.str(0, std::ios_base::scientific));
}
- else if(b_near_pi_half)
- {
- T t2(t);
- eval_multiply(t, t);
- eval_divide(t, si_type(-4));
- n_pi = fp_type(1.5f);
- hyp0F1(result, n_pi, t);
- eval_multiply(result, t2);
- BOOST_MATH_INSTRUMENT_CODE(result.str(0, std::ios_base::scientific));
- }
else
{
- // Scale to a small argument for an efficient Taylor series,
- // implemented as a hypergeometric function. Use a standard
- // divide by three identity a certain number of times.
- // Here we use division by 3^9 --> (19683 = 3^9).
-
- static const ui_type n_scale = 9;
- static const ui_type n_three_pow_scale = 19683;
- eval_divide(xx, n_three_pow_scale);
-
- eval_multiply(t, xx, xx);
- eval_divide(t, si_type(-4));
- n_pi = fp_type(0.5f);
-
- // Now with small arguments, we are ready for a series expansion.
- hyp0F1(result, n_pi, t);
- BOOST_MATH_INSTRUMENT_CODE(result.str(0, std::ios_base::scientific));
-
- // Convert back using multiple angle identity.
- for(ui_type k = 0; k < n_scale; k++)
- {
- eval_multiply(t, result, result);
- eval_multiply(t, result);
- eval_multiply(t, ui_type(4));
- eval_multiply(result, si_type(-3));
- eval_add(result, t);
- }
+ eval_subtract(t, xx);
+ eval_sin(result, t);
}
if(b_negate_cos)
result.negate();
@@ -381,11 +344,7 @@ void hyp2F1(T& result, const T& a, const T& b, const T& c, const T& x)
// Abramowitz and Stegun 15.1.1.
// There are no checks on input range or parameter boundaries.
- typedef typename boost::multiprecision::detail::canonical<boost::int32_t, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<boost::uint32_t, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
- typedef typename mpl::front<typename T::float_types>::type fp_type;
T x_pow_n_div_n_fact(x);
T pochham_a (a);
@@ -443,10 +402,7 @@ template <class T>
void eval_asin(T& result, const T& x)
{
BOOST_STATIC_ASSERT_MSG(number_category<T>::value == number_kind_floating_point, "The asin function is only valid for floating point types.");
- typedef typename boost::multiprecision::detail::canonical<boost::int32_t, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<boost::uint32_t, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
typedef typename mpl::front<typename T::float_types>::type fp_type;
if(&result == &x)
@@ -460,7 +416,10 @@ void eval_asin(T& result, const T& x)
{
case FP_NAN:
case FP_INFINITE:
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ if(std::numeric_limits<number<T, et_on> >::has_quiet_NaN)
+ result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ else
+ BOOST_THROW_EXCEPTION(std::domain_error("Result is undefined or complex and there is no NaN for this number type."));
return;
case FP_ZERO:
result = ui_type(0);
@@ -477,7 +436,10 @@ void eval_asin(T& result, const T& x)
int c = xx.compare(ui_type(1));
if(c > 0)
{
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ if(std::numeric_limits<number<T, et_on> >::has_quiet_NaN)
+ result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ else
+ BOOST_THROW_EXCEPTION(std::domain_error("Result is undefined or complex and there is no NaN for this number type."));
return;
}
else if(c == 0)
@@ -526,8 +488,11 @@ void eval_asin(T& result, const T& x)
result = fp_type(std::asin(dd));
+ unsigned current_digits = std::numeric_limits<double>::digits - 5;
+ unsigned target_precision = boost::multiprecision::detail::digits2<number<T, et_on> >::value;
+
// Newton-Raphson iteration
- while(true)
+ while(current_digits < target_precision)
{
T s, c;
eval_sin(s, result);
@@ -536,6 +501,8 @@ void eval_asin(T& result, const T& x)
eval_divide(s, c);
eval_subtract(result, s);
+ current_digits *= 2;
+ /*
T lim;
eval_ldexp(lim, result, 1 - boost::multiprecision::detail::digits2<number<T, et_on> >::value);
if(eval_get_sign(s) < 0)
@@ -544,6 +511,7 @@ void eval_asin(T& result, const T& x)
lim.negate();
if(lim.compare(s) >= 0)
break;
+ */
}
if(b_neg)
result.negate();
@@ -559,7 +527,10 @@ inline void eval_acos(T& result, const T& x)
{
case FP_NAN:
case FP_INFINITE:
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ if(std::numeric_limits<number<T, et_on> >::has_quiet_NaN)
+ result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ else
+ BOOST_THROW_EXCEPTION(std::domain_error("Result is undefined or complex and there is no NaN for this number type."));
return;
case FP_ZERO:
result = get_constant_pi<T>();
@@ -572,7 +543,10 @@ inline void eval_acos(T& result, const T& x)
if(c > 0)
{
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ if(std::numeric_limits<number<T, et_on> >::has_quiet_NaN)
+ result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ else
+ BOOST_THROW_EXCEPTION(std::domain_error("Result is undefined or complex and there is no NaN for this number type."));
return;
}
else if(c == 0)
@@ -597,14 +571,12 @@ void eval_atan(T& result, const T& x)
BOOST_STATIC_ASSERT_MSG(number_category<T>::value == number_kind_floating_point, "The atan function is only valid for floating point types.");
typedef typename boost::multiprecision::detail::canonical<boost::int32_t, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<boost::uint32_t, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
typedef typename mpl::front<typename T::float_types>::type fp_type;
switch(eval_fpclassify(x))
{
case FP_NAN:
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ result = x;
return;
case FP_ZERO:
result = ui_type(0);
@@ -699,11 +671,7 @@ void eval_atan2(T& result, const T& y, const T& x)
return;
}
- typedef typename boost::multiprecision::detail::canonical<boost::int32_t, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<boost::uint32_t, T>::type ui_type;
- typedef typename T::exponent_type exp_type;
- typedef typename boost::multiprecision::detail::canonical<exp_type, T>::type canonical_exp_type;
- typedef typename mpl::front<typename T::float_types>::type fp_type;
switch(eval_fpclassify(y))
{
@@ -723,7 +691,10 @@ void eval_atan2(T& result, const T& y, const T& x)
{
if(eval_fpclassify(x) == FP_INFINITE)
{
- result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ if(std::numeric_limits<number<T, et_on> >::has_quiet_NaN)
+ result = std::numeric_limits<number<T, et_on> >::quiet_NaN().backend();
+ else
+ BOOST_THROW_EXCEPTION(std::domain_error("Result is undefined or complex and there is no NaN for this number type."));
}
else
{
diff --git a/3party/boost/boost/multiprecision/detail/generic_interconvert.hpp b/3party/boost/boost/multiprecision/detail/generic_interconvert.hpp
index 526dbfa1ca..1365972450 100644
--- a/3party/boost/boost/multiprecision/detail/generic_interconvert.hpp
+++ b/3party/boost/boost/multiprecision/detail/generic_interconvert.hpp
@@ -136,19 +136,19 @@ void generic_interconvert(To& to, const From& from, const mpl::int_<number_kind_
//
int c = eval_fpclassify(from);
- if(c == FP_ZERO)
+ if(c == (int)FP_ZERO)
{
to = ui_type(0);
return;
}
- else if(c == FP_NAN)
+ else if(c == (int)FP_NAN)
{
- to = "nan";
+ to = static_cast<const char*>("nan");
return;
}
- else if(c == FP_INFINITE)
+ else if(c == (int)FP_INFINITE)
{
- to = "inf";
+ to = static_cast<const char*>("inf");
if(eval_get_sign(from) < 0)
to.negate();
return;
@@ -177,7 +177,7 @@ void generic_interconvert(To& to, const From& from, const mpl::int_<number_kind_
typedef typename To::exponent_type to_exponent;
if((e > (std::numeric_limits<to_exponent>::max)()) || (e < (std::numeric_limits<to_exponent>::min)()))
{
- to = "inf";
+ to = static_cast<const char*>("inf");
if(eval_get_sign(from) < 0)
to.negate();
return;
@@ -191,7 +191,6 @@ void generic_interconvert(To& to, const From& from, const mpl::int_<number_kind_
template <class To, class From>
void generic_interconvert(To& to, const From& from, const mpl::int_<number_kind_rational>& /*to_type*/, const mpl::int_<number_kind_rational>& /*from_type*/)
{
- typedef typename component_type<number<From> >::type from_component_type;
typedef typename component_type<number<To> >::type to_component_type;
number<From> t(from);
diff --git a/3party/boost/boost/multiprecision/detail/integer_ops.hpp b/3party/boost/boost/multiprecision/detail/integer_ops.hpp
index a2d54eaca5..58b1d75c65 100644
--- a/3party/boost/boost/multiprecision/detail/integer_ops.hpp
+++ b/3party/boost/boost/multiprecision/detail/integer_ops.hpp
@@ -195,6 +195,24 @@ inline typename enable_if_c<number_category<typename multiprecision::detail::exp
}
template <class Backend, expression_template_option ExpressionTemplates>
+inline typename enable_if_c<number_category<Backend>::value == number_kind_integer, unsigned>::type
+ msb(const number<Backend, ExpressionTemplates>& x)
+{
+ using default_ops::eval_msb;
+ return eval_msb(x.backend());
+}
+
+template <class tag, class A1, class A2, class A3, class A4>
+inline typename enable_if_c<number_category<typename multiprecision::detail::expression<tag, A1, A2, A3, A4>::result_type>::value == number_kind_integer, unsigned>::type
+ msb(const multiprecision::detail::expression<tag, A1, A2, A3, A4>& x)
+{
+ typedef typename multiprecision::detail::expression<tag, A1, A2, A3, A4>::result_type number_type;
+ number_type n(x);
+ using default_ops::eval_msb;
+ return eval_msb(n.backend());
+}
+
+template <class Backend, expression_template_option ExpressionTemplates>
inline typename enable_if_c<number_category<Backend>::value == number_kind_integer, bool>::type
bit_test(const number<Backend, ExpressionTemplates>& x, unsigned index)
{
@@ -252,6 +270,20 @@ struct double_precision_type
};
//
+// If the exponent is a signed integer type, then we need to
+// check the value is positive:
+//
+template <class Backend>
+inline void check_sign_of_backend(const Backend& v, const mpl::true_)
+{
+ if(eval_get_sign(v) < 0)
+ {
+ BOOST_THROW_EXCEPTION(std::runtime_error("powm requires a positive exponent."));
+ }
+}
+template <class Backend>
+inline void check_sign_of_backend(const Backend&, const mpl::false_){}
+//
// Calculate (a^p)%c:
//
template <class Backend>
@@ -265,6 +297,8 @@ void eval_powm(Backend& result, const Backend& a, const Backend& p, const Backen
typedef typename double_precision_type<Backend>::type double_type;
typedef typename boost::multiprecision::detail::canonical<unsigned char, double_type>::type ui_type;
+
+ check_sign_of_backend(p, mpl::bool_<std::numeric_limits<number<Backend> >::is_signed>());
double_type x, y(a), b(p), t;
x = ui_type(1u);
@@ -298,6 +332,8 @@ void eval_powm(Backend& result, const Backend& a, const Backend& p, Integer c)
using default_ops::eval_modulus;
using default_ops::eval_right_shift;
+ check_sign_of_backend(p, mpl::bool_<std::numeric_limits<number<Backend> >::is_signed>());
+
if(eval_get_sign(p) < 0)
{
BOOST_THROW_EXCEPTION(std::runtime_error("powm requires a positive exponent."));
diff --git a/3party/boost/boost/multiprecision/detail/number_base.hpp b/3party/boost/boost/multiprecision/detail/number_base.hpp
index 15e4e2bc0a..9353082d37 100644
--- a/3party/boost/boost/multiprecision/detail/number_base.hpp
+++ b/3party/boost/boost/multiprecision/detail/number_base.hpp
@@ -75,18 +75,35 @@ namespace detail{
// Workaround for missing abs(long long) and abs(__int128) on some compilers:
//
template <class T>
-typename enable_if_c<(is_signed<T>::value || is_floating_point<T>::value), T>::type abs(T t) BOOST_NOEXCEPT
+BOOST_CONSTEXPR typename enable_if_c<(is_signed<T>::value || is_floating_point<T>::value), T>::type abs(T t) BOOST_NOEXCEPT
{
- return t < 0 ? -t : t;
+ // This strange expression avoids a hardware trap in the corner case
+ // that val is the most negative value permitted in long long.
+ // See https://svn.boost.org/trac/boost/ticket/9740.
+ return t < 0 ? T(1u) + T(-(t + 1)) : t;
}
template <class T>
-typename enable_if_c<(is_unsigned<T>::value), T>::type abs(T t) BOOST_NOEXCEPT
+BOOST_CONSTEXPR typename enable_if_c<(is_unsigned<T>::value), T>::type abs(T t) BOOST_NOEXCEPT
{
return t;
}
#define BOOST_MP_USING_ABS using boost::multiprecision::detail::abs;
+template <class T>
+BOOST_CONSTEXPR typename enable_if_c<(is_signed<T>::value || is_floating_point<T>::value), typename make_unsigned<T>::type>::type unsigned_abs(T t) BOOST_NOEXCEPT
+{
+ // This strange expression avoids a hardware trap in the corner case
+ // that val is the most negative value permitted in long long.
+ // See https://svn.boost.org/trac/boost/ticket/9740.
+ return t < 0 ? static_cast<typename make_unsigned<T>::type>(1u) + static_cast<typename make_unsigned<T>::type>(-(t + 1)) : static_cast<typename make_unsigned<T>::type>(t);
+}
+template <class T>
+BOOST_CONSTEXPR typename enable_if_c<(is_unsigned<T>::value), T>::type unsigned_abs(T t) BOOST_NOEXCEPT
+{
+ return t;
+}
+
//
// Move support:
//
@@ -768,7 +785,22 @@ inline R real_cast(const boost::multiprecision::detail::expression<tag, A1, A2,
}
-}}}
+}
+
+namespace constants{
+
+ template <class T>
+ struct is_explicitly_convertible_from_string;
+
+ template <class B, boost::multiprecision::expression_template_option ET>
+ struct is_explicitly_convertible_from_string<boost::multiprecision::number<B, ET> >
+ {
+ static const bool value = true;
+ };
+
+}
+
+}}
#endif // BOOST_MATH_BIG_NUM_BASE_HPP
diff --git a/3party/boost/boost/multiprecision/float128.hpp b/3party/boost/boost/multiprecision/float128.hpp
index 38ee01e2bc..ac09519c3f 100644
--- a/3party/boost/boost/multiprecision/float128.hpp
+++ b/3party/boost/boost/multiprecision/float128.hpp
@@ -10,18 +10,42 @@
#include <boost/scoped_array.hpp>
#include <boost/multiprecision/number.hpp>
+#if defined(BOOST_INTEL) && !defined(BOOST_MP_USE_FLOAT128) && !defined(BOOST_MP_USE_QUAD)
+# if defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION >= 1310) && defined(__GNUC__)
+# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6))
+# define BOOST_MP_USE_FLOAT128
+# endif
+# endif
+
+# ifndef BOOST_MP_USE_FLOAT128
+# define BOOST_MP_USE_QUAD
+# endif
+#endif
-#ifndef BOOST_INTEL
+#if defined(__GNUC__) && !defined(BOOST_MP_USE_FLOAT128) && !defined(BOOST_MP_USE_QUAD)
+# define BOOST_MP_USE_FLOAT128
+#endif
+
+#if !defined(BOOST_MP_USE_FLOAT128) && !defined(BOOST_MP_USE_QUAD)
+# error "Sorry compiler is neither GCC, not Intel, don't know how to configure this header."
+#endif
+#if defined(BOOST_MP_USE_FLOAT128) && defined(BOOST_MP_USE_QUAD)
+# error "Oh dear, both BOOST_MP_USE_FLOAT128 and BOOST_MP_USE_QUAD are defined, which one should I be using?"
+#endif
+
+#if defined(BOOST_MP_USE_FLOAT128)
extern "C" {
#include <quadmath.h>
}
-#else
+typedef __float128 float128_type;
+
+#elif defined(BOOST_MP_USE_QUAD)
#include <boost/multiprecision/detail/float_string_cvt.hpp>
-typedef _Quad __float128;
+typedef _Quad float128_type;
extern "C" {
_Quad __ldexpq(_Quad, int);
@@ -95,7 +119,7 @@ using backends::float128_backend;
template<>
struct number_category<backends::float128_backend> : public mpl::int_<number_kind_floating_point> {};
template<>
-struct number_category<__float128> : public mpl::int_<number_kind_floating_point> {};
+struct number_category<float128_type> : public mpl::int_<number_kind_floating_point> {};
typedef number<float128_backend, et_off> float128;
@@ -110,7 +134,7 @@ struct float128_backend
typedef int exponent_type;
private:
- __float128 m_value;
+ float128_type m_value;
public:
BOOST_CONSTEXPR float128_backend() : m_value(0) {}
BOOST_CONSTEXPR float128_backend(const float128_backend& o) : m_value(o.m_value) {}
@@ -120,17 +144,17 @@ public:
return *this;
}
template <class T>
- BOOST_CONSTEXPR float128_backend(const T& i, const typename enable_if_c<is_convertible<T, __float128>::value>::type* = 0)
+ BOOST_CONSTEXPR float128_backend(const T& i, const typename enable_if_c<is_convertible<T, float128_type>::value>::type* = 0)
: m_value(i) {}
template <class T>
- typename enable_if_c<is_arithmetic<T>::value || is_convertible<T, __float128>::value, float128_backend&>::type operator = (const T& i)
+ typename enable_if_c<is_arithmetic<T>::value || is_convertible<T, float128_type>::value, float128_backend&>::type operator = (const T& i)
{
m_value = i;
return *this;
}
float128_backend& operator = (const char* s)
{
-#ifndef BOOST_INTEL
+#ifndef BOOST_MP_USE_QUAD
char* p_end;
m_value = strtoflt128(s, &p_end);
if(p_end - s != (std::ptrdiff_t)std::strlen(s))
@@ -138,7 +162,7 @@ public:
BOOST_THROW_EXCEPTION(std::runtime_error("Unable to interpret input string as a floating point value"));
}
#else
- detail::convert_from_string(*this, s);
+ boost::multiprecision::detail::convert_from_string(*this, s);
#endif
return *this;
}
@@ -148,7 +172,7 @@ public:
}
std::string str(std::streamsize digits, std::ios_base::fmtflags f)const
{
-#ifndef BOOST_INTEL
+#ifndef BOOST_MP_USE_QUAD
char buf[100];
boost::scoped_array<char> buf2;
std::string format = "%";
@@ -176,13 +200,13 @@ public:
v = quadmath_snprintf (&buf2[0], v_max + 3, format.c_str(), digits, m_value);
if(v >= v_max + 3)
{
- BOOST_THROW_EXCEPTION(std::runtime_error("Formatting of __float128 failed."));
+ BOOST_THROW_EXCEPTION(std::runtime_error("Formatting of float128_type failed."));
}
return &buf2[0];
}
return buf;
#else
- return detail::convert_to_string(*this, digits ? digits : 37, f);
+ return boost::multiprecision::detail::convert_to_string(*this, digits ? digits : 37, f);
#endif
}
void negate()
@@ -198,11 +222,11 @@ public:
{
return m_value == i ? 0 : m_value < i ? -1 : 1;
}
- __float128& value()
+ float128_type& value()
{
return m_value;
}
- const __float128& value()const
+ const float128_type& value()const
{
return m_value;
}
@@ -442,6 +466,62 @@ inline void eval_atan2(float128_backend& result, const float128_backend& a, cons
}} // namespaces
+namespace boost{
+namespace archive{
+
+class binary_oarchive;
+class binary_iarchive;
+
+}
+
+namespace serialization{ namespace float128_detail{
+
+template <class Archive>
+void do_serialize(Archive& ar, boost::multiprecision::backends::float128_backend& val, const mpl::false_&, const mpl::false_&)
+{
+ // saving
+ // non-binary
+ std::string s(val.str(0, std::ios_base::scientific));
+ ar & s;
+}
+template <class Archive>
+void do_serialize(Archive& ar, boost::multiprecision::backends::float128_backend& val, const mpl::true_&, const mpl::false_&)
+{
+ // loading
+ // non-binary
+ std::string s;
+ ar & s;
+ val = s.c_str();
+}
+
+template <class Archive>
+void do_serialize(Archive& ar, boost::multiprecision::backends::float128_backend& val, const mpl::false_&, const mpl::true_&)
+{
+ // saving
+ // binary
+ ar.save_binary(&val, sizeof(val));
+}
+template <class Archive>
+void do_serialize(Archive& ar, boost::multiprecision::backends::float128_backend& val, const mpl::true_&, const mpl::true_&)
+{
+ // loading
+ // binary
+ ar.load_binary(&val, sizeof(val));
+}
+
+} // detail
+
+template <class Archive>
+void serialize(Archive& ar, boost::multiprecision::backends::float128_backend& val, unsigned int /*version*/)
+{
+ typedef typename Archive::is_loading load_tag;
+ typedef typename mpl::bool_<boost::is_same<Archive, boost::archive::binary_oarchive>::value || boost::is_same<Archive, boost::archive::binary_iarchive>::value> binary_tag;
+
+ float128_detail::do_serialize(ar, val, load_tag(), binary_tag());
+}
+
+}}
+
namespace std{
template <boost::multiprecision::expression_template_option ExpressionTemplates>
@@ -461,7 +541,7 @@ public:
BOOST_STATIC_CONSTEXPR bool is_exact = false;
BOOST_STATIC_CONSTEXPR int radix = 2;
static number_type epsilon() { return 1.92592994438723585305597794258492732e-34Q; }
- static number_type round_error() { return 0; }
+ static number_type round_error() { return 0.5; }
BOOST_STATIC_CONSTEXPR int min_exponent = -16381;
BOOST_STATIC_CONSTEXPR int min_exponent10 = min_exponent * 301L / 1000L;
BOOST_STATIC_CONSTEXPR int max_exponent = 16384;
@@ -480,7 +560,7 @@ public:
BOOST_STATIC_CONSTEXPR bool is_modulo = false;
BOOST_STATIC_CONSTEXPR bool traps = false;
BOOST_STATIC_CONSTEXPR bool tinyness_before = false;
- BOOST_STATIC_CONSTEXPR float_round_style round_style = round_toward_zero;
+ BOOST_STATIC_CONSTEXPR float_round_style round_style = round_to_nearest;
};
} // namespace std
diff --git a/3party/boost/boost/multiprecision/gmp.hpp b/3party/boost/boost/multiprecision/gmp.hpp
index dcfd999254..a63ecc6495 100644
--- a/3party/boost/boost/multiprecision/gmp.hpp
+++ b/3party/boost/boost/multiprecision/gmp.hpp
@@ -123,11 +123,10 @@ struct gmp_float_imp
}
gmp_float_imp& operator = (long long i)
{
- BOOST_MP_USING_ABS
if(m_data[0]._mp_d == 0)
mpf_init2(m_data, multiprecision::detail::digits10_2_2(digits10 ? digits10 : get_default_precision()));
bool neg = i < 0;
- *this = static_cast<unsigned long long>(abs(i));
+ *this = static_cast<unsigned long long>(boost::multiprecision::detail::unsigned_abs(i));
if(neg)
mpf_neg(m_data, m_data);
return *this;
@@ -671,7 +670,7 @@ template <unsigned D1, unsigned D2>
inline void eval_add(gmp_float<D1>& a, const gmp_float<D2>& x, long y)
{
if(y < 0)
- mpf_sub_ui(a.data(), x.data(), -y);
+ mpf_sub_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y));
else
mpf_add_ui(a.data(), x.data(), y);
}
@@ -685,7 +684,7 @@ inline void eval_add(gmp_float<D1>& a, long x, const gmp_float<D2>& y)
{
if(x < 0)
{
- mpf_ui_sub(a.data(), -x, y.data());
+ mpf_ui_sub(a.data(), boost::multiprecision::detail::unsigned_abs(x), y.data());
mpf_neg(a.data(), a.data());
}
else
@@ -705,7 +704,7 @@ template <unsigned D1, unsigned D2>
inline void eval_subtract(gmp_float<D1>& a, const gmp_float<D2>& x, long y)
{
if(y < 0)
- mpf_add_ui(a.data(), x.data(), -y);
+ mpf_add_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y));
else
mpf_sub_ui(a.data(), x.data(), y);
}
@@ -719,7 +718,7 @@ inline void eval_subtract(gmp_float<D1>& a, long x, const gmp_float<D2>& y)
{
if(x < 0)
{
- mpf_add_ui(a.data(), y.data(), -x);
+ mpf_add_ui(a.data(), y.data(), boost::multiprecision::detail::unsigned_abs(x));
mpf_neg(a.data(), a.data());
}
else
@@ -741,7 +740,7 @@ inline void eval_multiply(gmp_float<D1>& a, const gmp_float<D2>& x, long y)
{
if(y < 0)
{
- mpf_mul_ui(a.data(), x.data(), -y);
+ mpf_mul_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y));
a.negate();
}
else
@@ -757,7 +756,7 @@ inline void eval_multiply(gmp_float<D1>& a, long x, const gmp_float<D2>& y)
{
if(x < 0)
{
- mpf_mul_ui(a.data(), y.data(), -x);
+ mpf_mul_ui(a.data(), y.data(), boost::multiprecision::detail::unsigned_abs(x));
mpf_neg(a.data(), a.data());
}
else
@@ -785,7 +784,7 @@ inline void eval_divide(gmp_float<D1>& a, const gmp_float<D2>& x, long y)
BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
if(y < 0)
{
- mpf_div_ui(a.data(), x.data(), -y);
+ mpf_div_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y));
a.negate();
}
else
@@ -805,7 +804,7 @@ inline void eval_divide(gmp_float<D1>& a, long x, const gmp_float<D2>& y)
BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
if(x < 0)
{
- mpf_ui_div(a.data(), -x, y.data());
+ mpf_ui_div(a.data(), boost::multiprecision::detail::unsigned_abs(x), y.data());
mpf_neg(a.data(), a.data());
}
else
@@ -1050,11 +1049,10 @@ struct gmp_int
}
gmp_int& operator = (long long i)
{
- BOOST_MP_USING_ABS
if(m_data[0]._mp_d == 0)
mpz_init(this->m_data);
bool neg = i < 0;
- *this = static_cast<unsigned long long>(abs(i));
+ *this = boost::multiprecision::detail::unsigned_abs(i);
if(neg)
mpz_neg(m_data, m_data);
return *this;
@@ -1356,28 +1354,28 @@ inline void eval_add(gmp_int& t, long i)
if(i > 0)
mpz_add_ui(t.data(), t.data(), i);
else
- mpz_sub_ui(t.data(), t.data(), -i);
+ mpz_sub_ui(t.data(), t.data(), boost::multiprecision::detail::unsigned_abs(i));
}
inline void eval_multiply_add(gmp_int& t, const gmp_int& a, long i)
{
if(i > 0)
mpz_addmul_ui(t.data(), a.data(), i);
else
- mpz_submul_ui(t.data(), a.data(), -i);
+ mpz_submul_ui(t.data(), a.data(), boost::multiprecision::detail::unsigned_abs(i));
}
inline void eval_multiply_subtract(gmp_int& t, const gmp_int& a, long i)
{
if(i > 0)
mpz_submul_ui(t.data(), a.data(), i);
else
- mpz_addmul_ui(t.data(), a.data(), -i);
+ mpz_addmul_ui(t.data(), a.data(), boost::multiprecision::detail::unsigned_abs(i));
}
inline void eval_subtract(gmp_int& t, long i)
{
if(i > 0)
mpz_sub_ui(t.data(), t.data(), i);
else
- mpz_add_ui(t.data(), t.data(), -i);
+ mpz_add_ui(t.data(), t.data(), boost::multiprecision::detail::unsigned_abs(i));
}
inline void eval_multiply(gmp_int& t, long i)
{
@@ -1482,14 +1480,14 @@ inline void eval_add(gmp_int& t, const gmp_int& p, long i)
if(i > 0)
mpz_add_ui(t.data(), p.data(), i);
else
- mpz_sub_ui(t.data(), p.data(), -i);
+ mpz_sub_ui(t.data(), p.data(), boost::multiprecision::detail::unsigned_abs(i));
}
inline void eval_subtract(gmp_int& t, const gmp_int& p, long i)
{
if(i > 0)
mpz_sub_ui(t.data(), p.data(), i);
else
- mpz_add_ui(t.data(), p.data(), -i);
+ mpz_add_ui(t.data(), p.data(), boost::multiprecision::detail::unsigned_abs(i));
}
inline void eval_multiply(gmp_int& t, const gmp_int& p, long i)
{
@@ -1592,6 +1590,11 @@ inline typename enable_if_c<is_signed<I>::value && ((sizeof(I) <= sizeof(long)))
mpz_lcm_ui(result.data(), a.data(), std::abs(b));
}
+inline void eval_integer_sqrt(gmp_int& s, gmp_int& r, const gmp_int& x)
+{
+ mpz_sqrtrem(s.data(), r.data(), x.data());
+}
+
inline unsigned eval_lsb(const gmp_int& val)
{
int c = eval_get_sign(val);
@@ -1606,6 +1609,20 @@ inline unsigned eval_lsb(const gmp_int& val)
return mpz_scan1(val.data(), 0);
}
+inline unsigned eval_msb(const gmp_int& val)
+{
+ int c = eval_get_sign(val);
+ if(c == 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("No bits were set in the operand."));
+ }
+ if(c < 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("Testing individual bits in negative values is not supported - results are undefined."));
+ }
+ return mpz_sizeinbase(val.data(), 2) - 1;
+}
+
inline bool eval_bit_test(const gmp_int& val, unsigned index)
{
return mpz_tstbit(val.data(), index) ? true : false;
@@ -1711,8 +1728,7 @@ struct gmp_rational
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
gmp_rational(gmp_rational&& o) BOOST_NOEXCEPT
{
- m_data[0]._mp_num = o.data()[0]._mp_num;
- m_data[0]._mp_den = o.data()[0]._mp_den;
+ m_data[0] = o.m_data[0];
o.m_data[0]._mp_num._mp_d = 0;
o.m_data[0]._mp_den._mp_d = 0;
}
@@ -1764,11 +1780,10 @@ struct gmp_rational
}
gmp_rational& operator = (long long i)
{
- BOOST_MP_USING_ABS
if(m_data[0]._mp_den._mp_d == 0)
mpq_init(m_data);
bool neg = i < 0;
- *this = static_cast<unsigned long long>(abs(i));
+ *this = boost::multiprecision::detail::unsigned_abs(i);
if(neg)
mpq_neg(m_data, m_data);
return *this;
@@ -2268,7 +2283,6 @@ public:
{
value.first = true;
value.second = 1;
- mpf_div_2exp(value.second.backend().data(), value.second.backend().data(), digits);
}
return value.second;
}
@@ -2290,7 +2304,7 @@ public:
BOOST_STATIC_CONSTEXPR bool is_modulo = false;
BOOST_STATIC_CONSTEXPR bool traps = true;
BOOST_STATIC_CONSTEXPR bool tinyness_before = false;
- BOOST_STATIC_CONSTEXPR float_round_style round_style = round_to_nearest;
+ BOOST_STATIC_CONSTEXPR float_round_style round_style = round_indeterminate;
private:
struct data_initializer
@@ -2346,7 +2360,7 @@ public:
BOOST_STATIC_CONSTEXPR bool is_modulo = false;
BOOST_STATIC_CONSTEXPR bool traps = false;
BOOST_STATIC_CONSTEXPR bool tinyness_before = false;
- BOOST_STATIC_CONSTEXPR float_round_style round_style = round_toward_zero;
+ BOOST_STATIC_CONSTEXPR float_round_style round_style = round_indeterminate;
};
#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
diff --git a/3party/boost/boost/multiprecision/integer.hpp b/3party/boost/boost/multiprecision/integer.hpp
index f811ebb36d..4432f1e971 100644
--- a/3party/boost/boost/multiprecision/integer.hpp
+++ b/3party/boost/boost/multiprecision/integer.hpp
@@ -7,24 +7,25 @@
#define BOOST_MP_INTEGER_HPP
#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/detail/bitscan.hpp>
namespace boost{
namespace multiprecision{
template <class Integer, class I2>
-typename enable_if_c<is_integral<Integer>::value && is_integral<I2>::value, Integer>::type
+typename enable_if_c<is_integral<Integer>::value && is_integral<I2>::value, Integer&>::type
multiply(Integer& result, const I2& a, const I2& b)
{
return result = static_cast<Integer>(a) * static_cast<Integer>(b);
}
template <class Integer, class I2>
-typename enable_if_c<is_integral<Integer>::value && is_integral<I2>::value, Integer>::type
+typename enable_if_c<is_integral<Integer>::value && is_integral<I2>::value, Integer&>::type
add(Integer& result, const I2& a, const I2& b)
{
return result = static_cast<Integer>(a) + static_cast<Integer>(b);
}
template <class Integer, class I2>
-typename enable_if_c<is_integral<Integer>::value && is_integral<I2>::value, Integer>::type
+typename enable_if_c<is_integral<Integer>::value && is_integral<I2>::value, Integer&>::type
subtract(Integer& result, const I2& a, const I2& b)
{
return result = static_cast<Integer>(a) - static_cast<Integer>(b);
@@ -78,7 +79,7 @@ struct double_integer
}
template <class I1, class I2, class I3>
-typename enable_if_c<is_integral<I1>::value && is_integral<I2>::value && is_integral<I3>::value, I1>::type
+typename enable_if_c<is_integral<I1>::value && is_unsigned<I2>::value && is_integral<I3>::value, I1>::type
powm(const I1& a, I2 b, I3 c)
{
typedef typename detail::double_integer<I1>::type double_type;
@@ -100,6 +101,17 @@ typename enable_if_c<is_integral<I1>::value && is_integral<I2>::value && is_inte
return x % c;
}
+template <class I1, class I2, class I3>
+inline typename enable_if_c<is_integral<I1>::value && is_signed<I2>::value && is_integral<I3>::value, I1>::type
+ powm(const I1& a, I2 b, I3 c)
+{
+ if(b < 0)
+ {
+ BOOST_THROW_EXCEPTION(std::runtime_error("powm requires a positive exponent."));
+ }
+ return powm(a, static_cast<typename make_unsigned<I2>::type>(b), c);
+}
+
template <class Integer>
typename enable_if_c<is_integral<Integer>::value, unsigned>::type lsb(const Integer& val)
{
@@ -114,15 +126,24 @@ typename enable_if_c<is_integral<Integer>::value, unsigned>::type lsb(const Inte
BOOST_THROW_EXCEPTION(std::range_error("Testing individual bits in negative values is not supported - results are undefined."));
}
}
- unsigned index = 0;
- Integer mask = 1;
+ return detail::find_lsb(val);
+}
- while(((mask & val) == 0) && (index < sizeof(Integer) * CHAR_BIT))
+template <class Integer>
+typename enable_if_c<is_integral<Integer>::value, unsigned>::type msb(Integer val)
+{
+ if(val <= 0)
{
- ++index;
- mask <<= 1;
+ if(val == 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("No bits were set in the operand."));
+ }
+ else
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("Testing individual bits in negative values is not supported - results are undefined."));
+ }
}
- return index;
+ return detail::find_msb(val);
}
template <class Integer>
@@ -172,6 +193,59 @@ typename enable_if_c<is_integral<Integer>::value, Integer&>::type bit_flip(Integ
return val;
}
+template <class Integer>
+typename enable_if_c<is_integral<Integer>::value, Integer>::type sqrt(const Integer& x, Integer& r)
+{
+ //
+ // This is slow bit-by-bit integer square root, see for example
+ // http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Binary_numeral_system_.28base_2.29
+ // There are better methods such as http://hal.inria.fr/docs/00/07/28/54/PDF/RR-3805.pdf
+ // and http://hal.inria.fr/docs/00/07/21/13/PDF/RR-4475.pdf which should be implemented
+ // at some point.
+ //
+ Integer s = 0;
+ if(x == 0)
+ {
+ r = 0;
+ return s;
+ }
+ int g = msb(x);
+ if(g == 0)
+ {
+ r = 1;
+ return s;
+ }
+
+ Integer t = 0;
+ r = x;
+ g /= 2;
+ bit_set(s, g);
+ bit_set(t, 2 * g);
+ r = x - t;
+ --g;
+ do
+ {
+ t = s;
+ t <<= g + 1;
+ bit_set(t, 2 * g);
+ if(t <= r)
+ {
+ bit_set(s, g);
+ r -= t;
+ }
+ --g;
+ }
+ while(g >= 0);
+ return s;
+}
+
+template <class Integer>
+typename enable_if_c<is_integral<Integer>::value, Integer>::type sqrt(const Integer& x)
+{
+ Integer r;
+ return sqrt(x, r);
+}
+
}} // namespaces
#endif
diff --git a/3party/boost/boost/multiprecision/logged_adaptor.hpp b/3party/boost/boost/multiprecision/logged_adaptor.hpp
index f5dc1013ec..2045f277ad 100644
--- a/3party/boost/boost/multiprecision/logged_adaptor.hpp
+++ b/3party/boost/boost/multiprecision/logged_adaptor.hpp
@@ -132,6 +132,13 @@ public:
{
return m_value;
}
+ template <class Archive>
+ void serialize(Archive& ar, const unsigned int /*version*/)
+ {
+ log_prefix_event(m_value, "serialize");
+ ar & m_value;
+ log_postfix_event(m_value, "serialize");
+ }
};
template <class T>
@@ -384,6 +391,16 @@ inline unsigned eval_lsb(const logged_adaptor<Backend>& arg)
}
template <class Backend>
+inline unsigned eval_msb(const logged_adaptor<Backend>& arg)
+{
+ using default_ops::eval_msb;
+ log_prefix_event(arg.value(), "most-significant-bit");
+ unsigned r = eval_msb(arg.value());
+ log_postfix_event(arg.value(), r, "most-significant-bit");
+ return r;
+}
+
+template <class Backend>
inline bool eval_bit_test(const logged_adaptor<Backend>& arg, unsigned a)
{
using default_ops::eval_bit_test;
diff --git a/3party/boost/boost/multiprecision/mpfi.hpp b/3party/boost/boost/multiprecision/mpfi.hpp
index eba1e7d9c8..81503f7108 100644
--- a/3party/boost/boost/multiprecision/mpfi.hpp
+++ b/3party/boost/boost/multiprecision/mpfi.hpp
@@ -12,6 +12,7 @@
#include <boost/multiprecision/detail/big_lanczos.hpp>
#include <boost/multiprecision/detail/digits.hpp>
#include <boost/multiprecision/mpfr.hpp>
+#include <boost/math/constants/constants.hpp>
#include <mpfi.h>
#include <cmath>
#include <algorithm>
@@ -137,11 +138,10 @@ struct mpfi_float_imp
}
mpfi_float_imp& operator = (long long i)
{
- BOOST_MP_USING_ABS
if(m_data[0].left._mpfr_d == 0)
mpfi_init2(m_data, multiprecision::detail::digits10_2_2(digits10 ? digits10 : get_default_precision()));
bool neg = i < 0;
- *this = static_cast<unsigned long long>(abs(i));
+ *this = boost::multiprecision::detail::unsigned_abs(i);
if(neg)
mpfi_neg(m_data, m_data);
return *this;
@@ -178,6 +178,8 @@ struct mpfi_float_imp
}
mpfi_float_imp& operator = (const char* s)
{
+ using default_ops::eval_fpclassify;
+
if(m_data[0].left._mpfr_d == 0)
mpfi_init2(m_data, multiprecision::detail::digits10_2_2(digits10 ? digits10 : get_default_precision()));
@@ -202,7 +204,22 @@ struct mpfi_float_imp
part.erase();
b = part.c_str();
- mpfi_interv_fr(m_data, a.data(), b.data());
+ if(eval_fpclassify(a) == (int)FP_NAN)
+ {
+ mpfi_set_fr(this->data(), a.data());
+ }
+ else if(eval_fpclassify(b) == (int)FP_NAN)
+ {
+ mpfi_set_fr(this->data(), b.data());
+ }
+ else
+ {
+ if(a.compare(b) > 0)
+ {
+ BOOST_THROW_EXCEPTION(std::runtime_error("Attempt to create interval with invalid range (start is greater than end)."));
+ }
+ mpfi_interv_fr(m_data, a.data(), b.data());
+ }
}
else if(mpfi_set_str(m_data, s, 10) != 0)
{
@@ -476,7 +493,10 @@ inline void eval_subtract(mpfi_float_backend<D1>& result, const mpfi_float_backe
template <unsigned D1, unsigned D2>
inline void eval_multiply(mpfi_float_backend<D1>& result, const mpfi_float_backend<D2>& o)
{
- mpfi_mul(result.data(), result.data(), o.data());
+ if((void*)&result == (void*)&o)
+ mpfi_sqr(result.data(), o.data());
+ else
+ mpfi_mul(result.data(), result.data(), o.data());
}
template <unsigned D1, unsigned D2>
inline void eval_divide(mpfi_float_backend<D1>& result, const mpfi_float_backend<D2>& o)
@@ -509,7 +529,7 @@ inline void eval_add(mpfi_float_backend<digits10>& result, long i)
if(i > 0)
mpfi_add_ui(result.data(), result.data(), i);
else
- mpfi_sub_ui(result.data(), result.data(), std::abs(i));
+ mpfi_sub_ui(result.data(), result.data(), boost::multiprecision::detail::unsigned_abs(i));
}
template <unsigned digits10>
inline void eval_subtract(mpfi_float_backend<digits10>& result, long i)
@@ -517,19 +537,19 @@ inline void eval_subtract(mpfi_float_backend<digits10>& result, long i)
if(i > 0)
mpfi_sub_ui(result.data(), result.data(), i);
else
- mpfi_add_ui(result.data(), result.data(), std::abs(i));
+ mpfi_add_ui(result.data(), result.data(), boost::multiprecision::detail::unsigned_abs(i));
}
template <unsigned digits10>
inline void eval_multiply(mpfi_float_backend<digits10>& result, long i)
{
- mpfi_mul_ui(result.data(), result.data(), std::abs(i));
+ mpfi_mul_ui(result.data(), result.data(), boost::multiprecision::detail::unsigned_abs(i));
if(i < 0)
mpfi_neg(result.data(), result.data());
}
template <unsigned digits10>
inline void eval_divide(mpfi_float_backend<digits10>& result, long i)
{
- mpfi_div_ui(result.data(), result.data(), std::abs(i));
+ mpfi_div_ui(result.data(), result.data(), boost::multiprecision::detail::unsigned_abs(i));
if(i < 0)
mpfi_neg(result.data(), result.data());
}
@@ -550,7 +570,7 @@ template <unsigned D1, unsigned D2>
inline void eval_add(mpfi_float_backend<D1>& a, const mpfi_float_backend<D2>& x, long y)
{
if(y < 0)
- mpfi_sub_ui(a.data(), x.data(), -y);
+ mpfi_sub_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y));
else
mpfi_add_ui(a.data(), x.data(), y);
}
@@ -564,7 +584,7 @@ inline void eval_add(mpfi_float_backend<D1>& a, long x, const mpfi_float_backend
{
if(x < 0)
{
- mpfi_ui_sub(a.data(), -x, y.data());
+ mpfi_ui_sub(a.data(), boost::multiprecision::detail::unsigned_abs(x), y.data());
mpfi_neg(a.data(), a.data());
}
else
@@ -584,7 +604,7 @@ template <unsigned D1, unsigned D2>
inline void eval_subtract(mpfi_float_backend<D1>& a, const mpfi_float_backend<D2>& x, long y)
{
if(y < 0)
- mpfi_add_ui(a.data(), x.data(), -y);
+ mpfi_add_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y));
else
mpfi_sub_ui(a.data(), x.data(), y);
}
@@ -598,7 +618,7 @@ inline void eval_subtract(mpfi_float_backend<D1>& a, long x, const mpfi_float_ba
{
if(x < 0)
{
- mpfi_add_ui(a.data(), y.data(), -x);
+ mpfi_add_ui(a.data(), y.data(), boost::multiprecision::detail::unsigned_abs(x));
mpfi_neg(a.data(), a.data());
}
else
@@ -608,7 +628,10 @@ inline void eval_subtract(mpfi_float_backend<D1>& a, long x, const mpfi_float_ba
template <unsigned D1, unsigned D2, unsigned D3>
inline void eval_multiply(mpfi_float_backend<D1>& a, const mpfi_float_backend<D2>& x, const mpfi_float_backend<D3>& y)
{
- mpfi_mul(a.data(), x.data(), y.data());
+ if((void*)&x == (void*)&y)
+ mpfi_sqr(a.data(), x.data());
+ else
+ mpfi_mul(a.data(), x.data(), y.data());
}
template <unsigned D1, unsigned D2>
inline void eval_multiply(mpfi_float_backend<D1>& a, const mpfi_float_backend<D2>& x, unsigned long y)
@@ -620,7 +643,7 @@ inline void eval_multiply(mpfi_float_backend<D1>& a, const mpfi_float_backend<D2
{
if(y < 0)
{
- mpfi_mul_ui(a.data(), x.data(), -y);
+ mpfi_mul_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y));
a.negate();
}
else
@@ -636,7 +659,7 @@ inline void eval_multiply(mpfi_float_backend<D1>& a, long x, const mpfi_float_ba
{
if(x < 0)
{
- mpfi_mul_ui(a.data(), y.data(), -x);
+ mpfi_mul_ui(a.data(), y.data(), boost::multiprecision::detail::unsigned_abs(x));
mpfi_neg(a.data(), a.data());
}
else
@@ -658,7 +681,7 @@ inline void eval_divide(mpfi_float_backend<D1>& a, const mpfi_float_backend<D2>&
{
if(y < 0)
{
- mpfi_div_ui(a.data(), x.data(), -y);
+ mpfi_div_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y));
a.negate();
}
else
@@ -674,7 +697,7 @@ inline void eval_divide(mpfi_float_backend<D1>& a, long x, const mpfi_float_back
{
if(x < 0)
{
- mpfi_ui_div(a.data(), -x, y.data());
+ mpfi_ui_div(a.data(), boost::multiprecision::detail::unsigned_abs(x), y.data());
mpfi_neg(a.data(), a.data());
}
else
@@ -738,7 +761,23 @@ inline void eval_convert_to(long double* result, const mpfi_float_backend<digits
template <unsigned D1, unsigned D2, mpfr_allocation_type AllocationType>
inline void assign_components(mpfi_float_backend<D1>& result, const mpfr_float_backend<D2, AllocationType>& a, const mpfr_float_backend<D2, AllocationType>& b)
{
- mpfi_interv_fr(result.data(), a.data(), b.data());
+ using default_ops::eval_fpclassify;
+ if(eval_fpclassify(a) == (int)FP_NAN)
+ {
+ mpfi_set_fr(result.data(), a.data());
+ }
+ else if(eval_fpclassify(b) == (int)FP_NAN)
+ {
+ mpfi_set_fr(result.data(), b.data());
+ }
+ else
+ {
+ if(a.compare(b) > 0)
+ {
+ BOOST_THROW_EXCEPTION(std::runtime_error("Attempt to create interval with invalid range (start is greater than end)."));
+ }
+ mpfi_interv_fr(result.data(), a.data(), b.data());
+ }
}
template <unsigned Digits10, class V>
@@ -833,6 +872,55 @@ inline int eval_fpclassify(const mpfi_float_backend<Digits10>& val) BOOST_NOEXCE
template <unsigned Digits10>
inline void eval_pow(mpfi_float_backend<Digits10>& result, const mpfi_float_backend<Digits10>& b, const mpfi_float_backend<Digits10>& e)
{
+ typedef typename boost::multiprecision::detail::canonical<unsigned, mpfi_float_backend<Digits10> >::type ui_type;
+ using default_ops::eval_get_sign;
+ int s = eval_get_sign(b);
+ if(s == 0)
+ {
+ if(eval_get_sign(e) == 0)
+ {
+ result = ui_type(1);
+ }
+ else
+ {
+ result = ui_type(0);
+ }
+ return;
+ }
+ if(s < 0)
+ {
+ if(eval_get_sign(e) < 0)
+ {
+ mpfi_float_backend<Digits10> t1, t2;
+ t1 = e;
+ t1.negate();
+ eval_pow(t2, b, t1);
+ t1 = ui_type(1);
+ eval_divide(result, t1, t2);
+ return;
+ }
+ typename boost::multiprecision::detail::canonical<boost::uintmax_t, mpfi_float_backend<Digits10> >::type an;
+ try
+ {
+ using default_ops::eval_convert_to;
+ eval_convert_to(&an, e);
+ if(e.compare(an) == 0)
+ {
+ mpfi_float_backend<Digits10> pb(b);
+ pb.negate();
+ eval_pow(result, pb, e);
+ if(an & 1u)
+ result.negate();
+ return;
+ }
+ }
+ catch(const std::exception&)
+ {
+ // conversion failed, just fall through, value is not an integer.
+ }
+ result = std::numeric_limits<number<mpfi_float_backend<Digits10>, et_on> >::quiet_NaN().backend();
+ return;
+ }
mpfi_log(result.data(), b.data());
mpfi_mul(result.data(), result.data(), e.data());
mpfi_exp(result.data(), result.data());
@@ -1068,15 +1156,48 @@ template <class T> struct constant_ln_two;
template <class T> struct constant_euler;
template <class T> struct constant_catalan;
+//
+// Initializer: ensure all our constants are initialized prior to the first call of main:
+//
+template <class T>
+struct mpfi_initializer
+{
+ struct init
+ {
+ init()
+ {
+ boost::math::constants::pi<T>();
+ boost::math::constants::ln_two<T>();
+ boost::math::constants::euler<T>();
+ boost::math::constants::catalan<T>();
+ }
+ void force_instantiate()const{}
+ };
+ static const init initializer;
+ static void force_instantiate()
+ {
+ initializer.force_instantiate();
+ }
+};
+
+template <class T>
+const typename mpfi_initializer<T>::init mpfi_initializer<T>::initializer;
+
template<unsigned Digits10, boost::multiprecision::expression_template_option ExpressionTemplates>
struct constant_pi<boost::multiprecision::number<boost::multiprecision::mpfi_float_backend<Digits10>, ExpressionTemplates> >
{
typedef boost::multiprecision::number<boost::multiprecision::mpfi_float_backend<Digits10>, ExpressionTemplates> result_type;
template<int N>
- static inline result_type get(const mpl::int_<N>&)
+ static inline result_type const& get(const mpl::int_<N>&)
{
- result_type result;
- mpfi_const_pi(result.backend().data());
+ mpfi_initializer<result_type>::force_instantiate();
+ static result_type result;
+ static bool has_init = false;
+ if(!has_init)
+ {
+ has_init = true;
+ mpfi_const_pi(result.backend().data());
+ }
return result;
}
};
@@ -1085,10 +1206,16 @@ struct constant_ln_two<boost::multiprecision::number<boost::multiprecision::mpfi
{
typedef boost::multiprecision::number<boost::multiprecision::mpfi_float_backend<Digits10>, ExpressionTemplates> result_type;
template<int N>
- static inline result_type get(const mpl::int_<N>&)
+ static inline result_type const& get(const mpl::int_<N>&)
{
- result_type result;
- mpfi_const_log2(result.backend().data());
+ mpfi_initializer<result_type>::force_instantiate();
+ static result_type result;
+ static bool has_init = false;
+ if(!has_init)
+ {
+ has_init = true;
+ mpfi_const_log2(result.backend().data());
+ }
return result;
}
};
@@ -1097,10 +1224,16 @@ struct constant_euler<boost::multiprecision::number<boost::multiprecision::mpfi_
{
typedef boost::multiprecision::number<boost::multiprecision::mpfi_float_backend<Digits10>, ExpressionTemplates> result_type;
template<int N>
- static inline result_type get(const mpl::int_<N>&)
+ static inline result_type const& get(const mpl::int_<N>&)
{
- result_type result;
- mpfi_const_euler(result.backend().data());
+ mpfi_initializer<result_type>::force_instantiate();
+ static result_type result;
+ static bool has_init = false;
+ if(!has_init)
+ {
+ has_init = true;
+ mpfi_const_euler(result.backend().data());
+ }
return result;
}
};
@@ -1109,10 +1242,16 @@ struct constant_catalan<boost::multiprecision::number<boost::multiprecision::mpf
{
typedef boost::multiprecision::number<boost::multiprecision::mpfi_float_backend<Digits10>, ExpressionTemplates> result_type;
template<int N>
- static inline result_type get(const mpl::int_<N>&)
+ static inline result_type const& get(const mpl::int_<N>&)
{
- result_type result;
- mpfi_const_catalan(result.backend().data());
+ mpfi_initializer<result_type>::force_instantiate();
+ static result_type result;
+ static bool has_init = false;
+ if(!has_init)
+ {
+ has_init = true;
+ mpfi_const_catalan(result.backend().data());
+ }
return result;
}
};
@@ -1190,7 +1329,7 @@ public:
{
value.first = true;
value.second = 1;
- mpfi_div_2exp(value.second.backend().data(), value.second.backend().data(), digits);
+ mpfi_div_2exp(value.second.backend().data(), value.second.backend().data(), 1);
}
return value.second;
}
diff --git a/3party/boost/boost/multiprecision/mpfr.hpp b/3party/boost/boost/multiprecision/mpfr.hpp
index 951d8f413a..f66cf4ac41 100644
--- a/3party/boost/boost/multiprecision/mpfr.hpp
+++ b/3party/boost/boost/multiprecision/mpfr.hpp
@@ -144,11 +144,10 @@ struct mpfr_float_imp<digits10, allocate_dynamic>
}
mpfr_float_imp& operator = (long long i)
{
- BOOST_MP_USING_ABS
if(m_data[0]._mpfr_d == 0)
mpfr_init2(m_data, multiprecision::detail::digits10_2_2(digits10 ? digits10 : get_default_precision()));
bool neg = i < 0;
- *this = static_cast<unsigned long long>(abs(i));
+ *this = boost::multiprecision::detail::unsigned_abs(i);
if(neg)
mpfr_neg(m_data, m_data, GMP_RNDN);
return *this;
@@ -427,9 +426,8 @@ struct mpfr_float_imp<digits10, allocate_stack>
}
mpfr_float_imp& operator = (long long i)
{
- BOOST_MP_USING_ABS
bool neg = i < 0;
- *this = static_cast<unsigned long long>(abs(i));
+ *this = boost::multiprecision::detail::unsigned_abs(i);
if(neg)
mpfr_neg(m_data, m_data, GMP_RNDN);
return *this;
@@ -952,7 +950,10 @@ inline void eval_subtract(mpfr_float_backend<D1, A1>& result, const mpfr_float_b
template <unsigned D1, unsigned D2, mpfr_allocation_type A1, mpfr_allocation_type A2>
inline void eval_multiply(mpfr_float_backend<D1, A1>& result, const mpfr_float_backend<D2, A2>& o)
{
- mpfr_mul(result.data(), result.data(), o.data(), GMP_RNDN);
+ if((void*)&o == (void*)&result)
+ mpfr_sqr(result.data(), o.data(), GMP_RNDN);
+ else
+ mpfr_mul(result.data(), result.data(), o.data(), GMP_RNDN);
}
template <unsigned D1, unsigned D2, mpfr_allocation_type A1, mpfr_allocation_type A2>
inline void eval_divide(mpfr_float_backend<D1, A1>& result, const mpfr_float_backend<D2, A2>& o)
@@ -985,7 +986,7 @@ inline void eval_add(mpfr_float_backend<digits10, AllocationType>& result, long
if(i > 0)
mpfr_add_ui(result.data(), result.data(), i, GMP_RNDN);
else
- mpfr_sub_ui(result.data(), result.data(), std::abs(i), GMP_RNDN);
+ mpfr_sub_ui(result.data(), result.data(), boost::multiprecision::detail::unsigned_abs(i), GMP_RNDN);
}
template <unsigned digits10, mpfr_allocation_type AllocationType>
inline void eval_subtract(mpfr_float_backend<digits10, AllocationType>& result, long i)
@@ -993,19 +994,19 @@ inline void eval_subtract(mpfr_float_backend<digits10, AllocationType>& result,
if(i > 0)
mpfr_sub_ui(result.data(), result.data(), i, GMP_RNDN);
else
- mpfr_add_ui(result.data(), result.data(), std::abs(i), GMP_RNDN);
+ mpfr_add_ui(result.data(), result.data(), boost::multiprecision::detail::unsigned_abs(i), GMP_RNDN);
}
template <unsigned digits10, mpfr_allocation_type AllocationType>
inline void eval_multiply(mpfr_float_backend<digits10, AllocationType>& result, long i)
{
- mpfr_mul_ui(result.data(), result.data(), std::abs(i), GMP_RNDN);
+ mpfr_mul_ui(result.data(), result.data(), boost::multiprecision::detail::unsigned_abs(i), GMP_RNDN);
if(i < 0)
mpfr_neg(result.data(), result.data(), GMP_RNDN);
}
template <unsigned digits10, mpfr_allocation_type AllocationType>
inline void eval_divide(mpfr_float_backend<digits10, AllocationType>& result, long i)
{
- mpfr_div_ui(result.data(), result.data(), std::abs(i), GMP_RNDN);
+ mpfr_div_ui(result.data(), result.data(), boost::multiprecision::detail::unsigned_abs(i), GMP_RNDN);
if(i < 0)
mpfr_neg(result.data(), result.data(), GMP_RNDN);
}
@@ -1026,7 +1027,7 @@ template <unsigned D1, unsigned D2, mpfr_allocation_type A1, mpfr_allocation_typ
inline void eval_add(mpfr_float_backend<D1, A1>& a, const mpfr_float_backend<D2, A2>& x, long y)
{
if(y < 0)
- mpfr_sub_ui(a.data(), x.data(), -y, GMP_RNDN);
+ mpfr_sub_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y), GMP_RNDN);
else
mpfr_add_ui(a.data(), x.data(), y, GMP_RNDN);
}
@@ -1040,7 +1041,7 @@ inline void eval_add(mpfr_float_backend<D1, A1>& a, long x, const mpfr_float_bac
{
if(x < 0)
{
- mpfr_ui_sub(a.data(), -x, y.data(), GMP_RNDN);
+ mpfr_ui_sub(a.data(), boost::multiprecision::detail::unsigned_abs(x), y.data(), GMP_RNDN);
mpfr_neg(a.data(), a.data(), GMP_RNDN);
}
else
@@ -1060,7 +1061,7 @@ template <unsigned D1, unsigned D2, mpfr_allocation_type A1, mpfr_allocation_typ
inline void eval_subtract(mpfr_float_backend<D1, A1>& a, const mpfr_float_backend<D2, A2>& x, long y)
{
if(y < 0)
- mpfr_add_ui(a.data(), x.data(), -y, GMP_RNDN);
+ mpfr_add_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y), GMP_RNDN);
else
mpfr_sub_ui(a.data(), x.data(), y, GMP_RNDN);
}
@@ -1074,7 +1075,7 @@ inline void eval_subtract(mpfr_float_backend<D1, A1>& a, long x, const mpfr_floa
{
if(x < 0)
{
- mpfr_add_ui(a.data(), y.data(), -x, GMP_RNDN);
+ mpfr_add_ui(a.data(), y.data(), boost::multiprecision::detail::unsigned_abs(x), GMP_RNDN);
mpfr_neg(a.data(), a.data(), GMP_RNDN);
}
else
@@ -1084,7 +1085,10 @@ inline void eval_subtract(mpfr_float_backend<D1, A1>& a, long x, const mpfr_floa
template <unsigned D1, unsigned D2, mpfr_allocation_type A1, mpfr_allocation_type A2, unsigned D3>
inline void eval_multiply(mpfr_float_backend<D1, A1>& a, const mpfr_float_backend<D2, A2>& x, const mpfr_float_backend<D3>& y)
{
- mpfr_mul(a.data(), x.data(), y.data(), GMP_RNDN);
+ if((void*)&x == (void*)&y)
+ mpfr_sqr(a.data(), x.data(), GMP_RNDN);
+ else
+ mpfr_mul(a.data(), x.data(), y.data(), GMP_RNDN);
}
template <unsigned D1, unsigned D2, mpfr_allocation_type A1, mpfr_allocation_type A2>
inline void eval_multiply(mpfr_float_backend<D1, A1>& a, const mpfr_float_backend<D2, A2>& x, unsigned long y)
@@ -1096,7 +1100,7 @@ inline void eval_multiply(mpfr_float_backend<D1, A1>& a, const mpfr_float_backen
{
if(y < 0)
{
- mpfr_mul_ui(a.data(), x.data(), -y, GMP_RNDN);
+ mpfr_mul_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y), GMP_RNDN);
a.negate();
}
else
@@ -1112,7 +1116,7 @@ inline void eval_multiply(mpfr_float_backend<D1, A1>& a, long x, const mpfr_floa
{
if(x < 0)
{
- mpfr_mul_ui(a.data(), y.data(), -x, GMP_RNDN);
+ mpfr_mul_ui(a.data(), y.data(), boost::multiprecision::detail::unsigned_abs(x), GMP_RNDN);
mpfr_neg(a.data(), a.data(), GMP_RNDN);
}
else
@@ -1134,7 +1138,7 @@ inline void eval_divide(mpfr_float_backend<D1, A1>& a, const mpfr_float_backend<
{
if(y < 0)
{
- mpfr_div_ui(a.data(), x.data(), -y, GMP_RNDN);
+ mpfr_div_ui(a.data(), x.data(), boost::multiprecision::detail::unsigned_abs(y), GMP_RNDN);
a.negate();
}
else
@@ -1150,7 +1154,7 @@ inline void eval_divide(mpfr_float_backend<D1, A1>& a, long x, const mpfr_float_
{
if(x < 0)
{
- mpfr_ui_div(a.data(), -x, y.data(), GMP_RNDN);
+ mpfr_ui_div(a.data(), boost::multiprecision::detail::unsigned_abs(x), y.data(), GMP_RNDN);
mpfr_neg(a.data(), a.data(), GMP_RNDN);
}
else
@@ -1175,7 +1179,7 @@ inline void eval_convert_to(unsigned long* result, const mpfr_float_backend<digi
{
BOOST_THROW_EXCEPTION(std::runtime_error("Could not convert NaN to integer."));
}
- *result = mpfr_get_ui(val.data(), GMP_RNDN);
+ *result = mpfr_get_ui(val.data(), GMP_RNDZ);
}
template <unsigned digits10, mpfr_allocation_type AllocationType>
inline void eval_convert_to(long* result, const mpfr_float_backend<digits10, AllocationType>& val)
@@ -1184,7 +1188,7 @@ inline void eval_convert_to(long* result, const mpfr_float_backend<digits10, All
{
BOOST_THROW_EXCEPTION(std::runtime_error("Could not convert NaN to integer."));
}
- *result = mpfr_get_si(val.data(), GMP_RNDN);
+ *result = mpfr_get_si(val.data(), GMP_RNDZ);
}
#ifdef _MPFR_H_HAVE_INTMAX_T
template <unsigned digits10, mpfr_allocation_type AllocationType>
@@ -1194,7 +1198,7 @@ inline void eval_convert_to(unsigned long long* result, const mpfr_float_backend
{
BOOST_THROW_EXCEPTION(std::runtime_error("Could not convert NaN to integer."));
}
- *result = mpfr_get_uj(val.data(), GMP_RNDN);
+ *result = mpfr_get_uj(val.data(), GMP_RNDZ);
}
template <unsigned digits10, mpfr_allocation_type AllocationType>
inline void eval_convert_to(long long* result, const mpfr_float_backend<digits10, AllocationType>& val)
@@ -1203,7 +1207,7 @@ inline void eval_convert_to(long long* result, const mpfr_float_backend<digits10
{
BOOST_THROW_EXCEPTION(std::runtime_error("Could not convert NaN to integer."));
}
- *result = mpfr_get_sj(val.data(), GMP_RNDN);
+ *result = mpfr_get_sj(val.data(), GMP_RNDZ);
}
#endif
template <unsigned digits10, mpfr_allocation_type AllocationType>
@@ -1624,7 +1628,7 @@ public:
{
value.first = true;
value.second = 1;
- mpfr_div_2exp(value.second.backend().data(), value.second.backend().data(), digits, GMP_RNDN);
+ mpfr_div_2exp(value.second.backend().data(), value.second.backend().data(), 1, GMP_RNDN);
}
return value.second;
}
diff --git a/3party/boost/boost/multiprecision/number.hpp b/3party/boost/boost/multiprecision/number.hpp
index 3a65ef7528..6d1746af8c 100644
--- a/3party/boost/boost/multiprecision/number.hpp
+++ b/3party/boost/boost/multiprecision/number.hpp
@@ -43,7 +43,7 @@ public:
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR number() BOOST_NOEXCEPT_IF(noexcept(Backend())) {}
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR number(const number& e) BOOST_NOEXCEPT_IF(noexcept(Backend(static_cast<const Backend&>(std::declval<Backend>())))) : m_backend(e.m_backend){}
template <class V>
- BOOST_MP_FORCEINLINE number(const V& v, typename enable_if_c<
+ BOOST_MP_FORCEINLINE number(const V& v, typename boost::enable_if_c<
(boost::is_arithmetic<V>::value || is_same<std::string, V>::value || is_convertible<V, const char*>::value)
&& !is_convertible<typename detail::canonical<V, Backend>::type, Backend>::value
&& !detail::is_restricted_conversion<typename detail::canonical<V, Backend>::type, Backend>::value
@@ -52,7 +52,7 @@ public:
m_backend = canonical_value(v);
}
template <class V>
- BOOST_MP_FORCEINLINE BOOST_CONSTEXPR number(const V& v, typename enable_if_c<
+ BOOST_MP_FORCEINLINE BOOST_CONSTEXPR number(const V& v, typename boost::enable_if_c<
is_convertible<typename detail::canonical<V, Backend>::type, Backend>::value
&& !detail::is_restricted_conversion<typename detail::canonical<V, Backend>::type, Backend>::value
>::type* = 0)
@@ -60,7 +60,7 @@ public:
BOOST_MP_FORCEINLINE BOOST_CONSTEXPR number(const number& e, unsigned digits10)
: m_backend(e.m_backend, digits10){}
template <class V>
- explicit BOOST_MP_FORCEINLINE number(const V& v, typename enable_if_c<
+ explicit BOOST_MP_FORCEINLINE number(const V& v, typename boost::enable_if_c<
(boost::is_arithmetic<V>::value || is_same<std::string, V>::value || is_convertible<V, const char*>::value)
&& !detail::is_explicitly_convertible<typename detail::canonical<V, Backend>::type, Backend>::value
&& detail::is_restricted_conversion<typename detail::canonical<V, Backend>::type, Backend>::value
@@ -69,7 +69,7 @@ public:
m_backend = canonical_value(v);
}
template <class V>
- explicit BOOST_MP_FORCEINLINE BOOST_CONSTEXPR number(const V& v, typename enable_if_c<
+ explicit BOOST_MP_FORCEINLINE BOOST_CONSTEXPR number(const V& v, typename boost::enable_if_c<
detail::is_explicitly_convertible<typename detail::canonical<V, Backend>::type, Backend>::value
&& (detail::is_restricted_conversion<typename detail::canonical<V, Backend>::type, Backend>::value
|| !is_convertible<typename detail::canonical<V, Backend>::type, Backend>::value)
@@ -81,7 +81,7 @@ public:
// which is arguably more useful. Disabled for now.
//
template <class V>
- number(V v, unsigned digits10, typename enable_if<mpl::or_<boost::is_arithmetic<V>, is_same<std::string, V>, is_convertible<V, const char*> > >::type* dummy1 = 0)
+ number(V v, unsigned digits10, typename boost::enable_if<mpl::or_<boost::is_arithmetic<V>, is_same<std::string, V>, is_convertible<V, const char*> > >::type* dummy1 = 0)
{
m_backend.precision(digits10);
m_backend = canonical_value(v);
@@ -93,12 +93,12 @@ public:
template <class Other, expression_template_option ET>
BOOST_MP_FORCEINLINE number(const number<Other, ET>& val,
- typename enable_if_c<(boost::is_convertible<Other, Backend>::value && !detail::is_restricted_conversion<Other, Backend>::value)>::type* = 0)
+ typename boost::enable_if_c<(boost::is_convertible<Other, Backend>::value && !detail::is_restricted_conversion<Other, Backend>::value)>::type* = 0)
BOOST_NOEXCEPT_IF(noexcept(Backend(static_cast<const Other&>(std::declval<Other>()))))
: m_backend(val.backend()) {}
template <class Other, expression_template_option ET>
- explicit number(const number<Other, ET>& val, typename enable_if_c<
+ explicit number(const number<Other, ET>& val, typename boost::enable_if_c<
(!detail::is_explicitly_convertible<Other, Backend>::value)
>::type* = 0)
{
@@ -108,27 +108,27 @@ public:
detail::generic_interconvert(backend(), val.backend(), number_category<Backend>(), number_category<Other>());
}
template <class Other, expression_template_option ET>
- explicit BOOST_MP_FORCEINLINE number(const number<Other, ET>& val, typename enable_if_c<
+ explicit BOOST_MP_FORCEINLINE number(const number<Other, ET>& val, typename boost::enable_if_c<
(detail::is_explicitly_convertible<Other, Backend>::value
&& (detail::is_restricted_conversion<Other, Backend>::value || !boost::is_convertible<Other, Backend>::value))
>::type* = 0) BOOST_NOEXCEPT_IF(noexcept(Backend(static_cast<const Other&>(std::declval<Other>()))))
: m_backend(val.backend()) {}
template <class V>
- BOOST_MP_FORCEINLINE number(V v1, V v2, typename enable_if<mpl::or_<boost::is_arithmetic<V>, is_same<std::string, V>, is_convertible<V, const char*> > >::type* = 0)
+ BOOST_MP_FORCEINLINE number(V v1, V v2, typename boost::enable_if<mpl::or_<boost::is_arithmetic<V>, is_same<std::string, V>, is_convertible<V, const char*> > >::type* = 0)
{
using default_ops::assign_components;
assign_components(m_backend, canonical_value(v1), canonical_value(v2));
}
template <class Other, expression_template_option ET>
- BOOST_MP_FORCEINLINE number(const number<Other, ET>& v1, const number<Other, ET>& v2, typename enable_if<boost::is_convertible<Other, Backend> >::type* = 0)
+ BOOST_MP_FORCEINLINE number(const number<Other, ET>& v1, const number<Other, ET>& v2, typename boost::enable_if<boost::is_convertible<Other, Backend> >::type* = 0)
{
using default_ops::assign_components;
assign_components(m_backend, v1.backend(), v2.backend());
}
template <class tag, class Arg1, class Arg2, class Arg3, class Arg4>
- typename enable_if<is_convertible<typename detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type, self_type>, number&>::type operator=(const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& e)
+ typename boost::enable_if<is_convertible<typename detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type, self_type>, number&>::type operator=(const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& e)
{
typedef typename is_same<number, typename detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type>::type tag_type;
do_assign(e, tag_type());
@@ -150,7 +150,7 @@ public:
}
template <class V>
- BOOST_MP_FORCEINLINE typename enable_if<is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
+ BOOST_MP_FORCEINLINE typename boost::enable_if<is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator=(const V& v)
BOOST_NOEXCEPT_IF(noexcept(std::declval<Backend>() = static_cast<typename boost::multiprecision::detail::canonical<V, Backend>::type const&>(std::declval<typename boost::multiprecision::detail::canonical<V, Backend>::type>())))
{
@@ -165,7 +165,7 @@ public:
return *this;
}
template <class Other, expression_template_option ET>
- typename disable_if<boost::multiprecision::detail::is_explicitly_convertible<Other, Backend>, number<Backend, ExpressionTemplates>& >::type
+ typename boost::disable_if<boost::multiprecision::detail::is_explicitly_convertible<Other, Backend>, number<Backend, ExpressionTemplates>& >::type
assign(const number<Other, ET>& v)
{
//
@@ -176,13 +176,13 @@ public:
}
template <class tag, class Arg1, class Arg2, class Arg3, class Arg4>
- number(const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& e, typename enable_if_c<is_convertible<typename detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type, self_type>::value>::type* = 0)
+ number(const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& e, typename boost::enable_if_c<is_convertible<typename detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type, self_type>::value>::type* = 0)
{
*this = e;
}
template <class tag, class Arg1, class Arg2, class Arg3, class Arg4>
explicit number(const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& e,
- typename enable_if_c<!is_convertible<typename detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type, self_type>::value
+ typename boost::enable_if_c<!is_convertible<typename detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type, self_type>::value
&& boost::multiprecision::detail::is_explicitly_convertible<typename detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type, self_type>::value>::type* = 0)
{
assign(e);
@@ -234,7 +234,7 @@ public:
}
template <class V>
- typename enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
+ typename boost::enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator+=(const V& v)
{
using default_ops::eval_add;
@@ -265,7 +265,7 @@ public:
}
template <class V>
- typename enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
+ typename boost::enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator-=(const V& v)
{
using default_ops::eval_subtract;
@@ -309,7 +309,7 @@ public:
}
template <class V>
- typename enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
+ typename boost::enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator*=(const V& v)
{
using default_ops::eval_multiply;
@@ -340,7 +340,7 @@ public:
return *this;
}
template <class V>
- typename enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
+ typename boost::enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator%=(const V& v)
{
BOOST_STATIC_ASSERT_MSG(number_category<Backend>::value == number_kind_integer, "The modulus operation is only valid for integer types");
@@ -388,7 +388,7 @@ public:
}
template <class V>
- BOOST_MP_FORCEINLINE typename enable_if<is_integral<V>, number&>::type operator <<= (V val)
+ BOOST_MP_FORCEINLINE typename boost::enable_if<is_integral<V>, number&>::type operator <<= (V val)
{
BOOST_STATIC_ASSERT_MSG(number_category<Backend>::value == number_kind_integer, "The left-shift operation is only valid for integer types");
detail::check_shift_range(val, mpl::bool_<(sizeof(V) > sizeof(std::size_t))>(), is_signed<V>());
@@ -397,7 +397,7 @@ public:
}
template <class V>
- BOOST_MP_FORCEINLINE typename enable_if<is_integral<V>, number&>::type operator >>= (V val)
+ BOOST_MP_FORCEINLINE typename boost::enable_if<is_integral<V>, number&>::type operator >>= (V val)
{
BOOST_STATIC_ASSERT_MSG(number_category<Backend>::value == number_kind_integer, "The right-shift operation is only valid for integer types");
detail::check_shift_range(val, mpl::bool_<(sizeof(V) > sizeof(std::size_t))>(), is_signed<V>());
@@ -428,7 +428,7 @@ public:
}
template <class V>
- BOOST_MP_FORCEINLINE typename enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
+ BOOST_MP_FORCEINLINE typename boost::enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator/=(const V& v)
{
using default_ops::eval_divide;
@@ -462,7 +462,7 @@ public:
}
template <class V>
- BOOST_MP_FORCEINLINE typename enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
+ BOOST_MP_FORCEINLINE typename boost::enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator&=(const V& v)
{
BOOST_STATIC_ASSERT_MSG(number_category<Backend>::value == number_kind_integer, "The bitwise & operation is only valid for integer types");
@@ -497,7 +497,7 @@ public:
}
template <class V>
- BOOST_MP_FORCEINLINE typename enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
+ BOOST_MP_FORCEINLINE typename boost::enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator|=(const V& v)
{
BOOST_STATIC_ASSERT_MSG(number_category<Backend>::value == number_kind_integer, "The bitwise | operation is only valid for integer types");
@@ -530,7 +530,7 @@ public:
}
template <class V>
- BOOST_MP_FORCEINLINE typename enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
+ BOOST_MP_FORCEINLINE typename boost::enable_if<boost::is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator^=(const V& v)
{
BOOST_STATIC_ASSERT_MSG(number_category<Backend>::value == number_kind_integer, "The bitwise ^ operation is only valid for integer types");
@@ -565,6 +565,11 @@ public:
{
return m_backend.str(digits, f);
}
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /*version*/)
+ {
+ ar & m_backend;
+ }
private:
template <class T>
void convert_to_imp(T* result)const
@@ -573,7 +578,7 @@ private:
eval_convert_to(result, m_backend);
}
template <class B2, expression_template_option ET>
- void convert_to_imp(number<B2, ET>* result)const
+ typename enable_if_c<detail::is_explicitly_convertible<Backend, B2>::value>::type convert_to_imp(number<B2, ET>* result)const
{
result->assign(*this);
}
@@ -599,13 +604,13 @@ public:
// operator bool() rather than the non-template operator when converting to
// an arithmetic type:
//
- template <class T, typename enable_if<is_same<T, bool>, int>::type = 0>
+ template <class T, typename boost::enable_if<is_same<T, bool>, int>::type = 0>
explicit operator T ()const
{
using default_ops::eval_is_zero;
return !eval_is_zero(backend());
}
- template <class T, typename disable_if_c<is_same<T, bool>::value || is_void<T>::value, int>::type = 0>
+ template <class T, typename boost::disable_if_c<is_same<T, bool>::value || is_void<T>::value, int>::type = 0>
explicit operator T ()const
{
return this->template convert_to<T>();
@@ -658,7 +663,7 @@ public:
return m_backend.compare(o.m_backend);
}
template <class V>
- BOOST_MP_FORCEINLINE typename enable_if<is_arithmetic<V>, int>::type compare(const V& o)const
+ BOOST_MP_FORCEINLINE typename boost::enable_if<is_arithmetic<V>, int>::type compare(const V& o)const
{
using default_ops::eval_get_sign;
if(o == 0)
@@ -1377,9 +1382,13 @@ private:
do_multiplies(e.left(), typename left_type::tag_type());
do_multiplies(e.right(), typename right_type::tag_type());
}
-
+ //
+ // This rearrangement is disabled for integer types, the test on sizeof(Exp) is simply to make
+ // the disable_if dependent on the template argument (the size of 1 can never occur in practice).
+ //
template <class Exp>
- void do_multiplies(const Exp& e, const detail::divides&)
+ typename boost::disable_if_c<boost::multiprecision::number_category<self_type>::value == boost::multiprecision::number_kind_integer || sizeof(Exp) == 1>::type
+ do_multiplies(const Exp& e, const detail::divides&)
{
typedef typename Exp::left_type left_type;
typedef typename Exp::right_type right_type;
@@ -1394,8 +1403,13 @@ private:
eval_multiply(m_backend, canonical_value(e.left().value()));
eval_multiply(m_backend, canonical_value(e.right().value()));
}
+ //
+ // This rearrangement is disabled for integer types, the test on sizeof(Exp) is simply to make
+ // the disable_if dependent on the template argument (the size of 1 can never occur in practice).
+ //
template <class Exp>
- void do_multiplies(const Exp& e, const detail::divide_immediates&)
+ typename boost::disable_if_c<boost::multiprecision::number_category<self_type>::value == boost::multiprecision::number_kind_integer || sizeof(Exp) == 1>::type
+ do_multiplies(const Exp& e, const detail::divide_immediates&)
{
using default_ops::eval_multiply;
using default_ops::eval_divide;
@@ -1424,34 +1438,51 @@ private:
do_divide(e.left(), typename left_type::tag_type());
m_backend.negate();
}
-
+ //
+ // This rearrangement is disabled for integer types, the test on sizeof(Exp) is simply to make
+ // the disable_if dependent on the template argument (the size of 1 can never occur in practice).
+ //
template <class Exp>
- void do_divide(const Exp& e, const detail::multiplies&)
+ typename boost::disable_if_c<boost::multiprecision::number_category<self_type>::value == boost::multiprecision::number_kind_integer || sizeof(Exp) == 1>::type
+ do_divide(const Exp& e, const detail::multiplies&)
{
typedef typename Exp::left_type left_type;
typedef typename Exp::right_type right_type;
do_divide(e.left(), typename left_type::tag_type());
do_divide(e.right(), typename right_type::tag_type());
}
-
+ //
+ // This rearrangement is disabled for integer types, the test on sizeof(Exp) is simply to make
+ // the disable_if dependent on the template argument (the size of 1 can never occur in practice).
+ //
template <class Exp>
- void do_divide(const Exp& e, const detail::divides&)
+ typename boost::disable_if_c<boost::multiprecision::number_category<self_type>::value == boost::multiprecision::number_kind_integer || sizeof(Exp) == 1>::type
+ do_divide(const Exp& e, const detail::divides&)
{
typedef typename Exp::left_type left_type;
typedef typename Exp::right_type right_type;
do_divide(e.left(), typename left_type::tag_type());
do_multiplies(e.right(), typename right_type::tag_type());
}
-
+ //
+ // This rearrangement is disabled for integer types, the test on sizeof(Exp) is simply to make
+ // the disable_if dependent on the template argument (the size of 1 can never occur in practice).
+ //
template <class Exp>
- void do_divides(const Exp& e, const detail::multiply_immediates&)
+ typename boost::disable_if_c<boost::multiprecision::number_category<self_type>::value == boost::multiprecision::number_kind_integer || sizeof(Exp) == 1>::type
+ do_divides(const Exp& e, const detail::multiply_immediates&)
{
using default_ops::eval_divide;
eval_divide(m_backend, canonical_value(e.left().value()));
eval_divide(m_backend, canonical_value(e.right().value()));
}
+ //
+ // This rearrangement is disabled for integer types, the test on sizeof(Exp) is simply to make
+ // the disable_if dependent on the template argument (the size of 1 can never occur in practice).
+ //
template <class Exp>
- void do_divides(const Exp& e, const detail::divide_immediates&)
+ typename boost::disable_if_c<boost::multiprecision::number_category<self_type>::value == boost::multiprecision::number_kind_integer || sizeof(Exp) == 1>::type
+ do_divides(const Exp& e, const detail::divide_immediates&)
{
using default_ops::eval_multiply;
using default_ops::eval_divide;
@@ -1634,10 +1665,10 @@ public:
template <class B2, expression_template_option ET>
static BOOST_MP_FORCEINLINE BOOST_CONSTEXPR const B2& canonical_value(const number<B2, ET>& v) BOOST_NOEXCEPT { return v.backend(); }
template <class V>
- static BOOST_MP_FORCEINLINE BOOST_CONSTEXPR typename disable_if<is_same<typename detail::canonical<V, Backend>::type, V>, typename detail::canonical<V, Backend>::type>::type
+ static BOOST_MP_FORCEINLINE BOOST_CONSTEXPR typename boost::disable_if<is_same<typename detail::canonical<V, Backend>::type, V>, typename detail::canonical<V, Backend>::type>::type
canonical_value(const V& v) BOOST_NOEXCEPT { return static_cast<typename detail::canonical<V, Backend>::type>(v); }
template <class V>
- static BOOST_MP_FORCEINLINE BOOST_CONSTEXPR typename enable_if<is_same<typename detail::canonical<V, Backend>::type, V>, const V&>::type
+ static BOOST_MP_FORCEINLINE BOOST_CONSTEXPR typename boost::enable_if<is_same<typename detail::canonical<V, Backend>::type, V>, const V&>::type
canonical_value(const V& v) BOOST_NOEXCEPT { return v; }
static BOOST_MP_FORCEINLINE typename detail::canonical<std::string, Backend>::type canonical_value(const std::string& v) BOOST_NOEXCEPT { return v.c_str(); }
@@ -1675,8 +1706,14 @@ inline std::ostream& operator << (std::ostream& os, const expression<tag, A1, A2
template <class Backend, expression_template_option ExpressionTemplates>
inline std::istream& operator >> (std::istream& is, number<Backend, ExpressionTemplates>& r)
{
+ bool hex_format = (is.flags() & std::ios_base::hex) == std::ios_base::hex;
+ bool oct_format = (is.flags() & std::ios_base::oct) == std::ios_base::oct;
std::string s;
is >> s;
+ if(hex_format && (number_category<Backend>::value == number_kind_integer) && ((s[0] != '0') || (s[1] != 'x')))
+ s.insert(s.find_first_not_of("+-"), "0x");
+ if(oct_format && (number_category<Backend>::value == number_kind_integer) && (s[0] != '0'))
+ s.insert(s.find_first_not_of("+-"), "0");
r.assign(s);
return is;
}
@@ -1699,6 +1736,8 @@ inline std::istream& operator >> (std::istream& is, rational<multiprecision::num
multiprecision::number<Backend, ExpressionTemplates> v1, v2;
char c;
bool have_hex = false;
+ bool hex_format = (is.flags() & std::ios_base::hex) == std::ios_base::hex;
+ bool oct_format = (is.flags() & std::ios_base::oct) == std::ios_base::oct;
while((EOF != (c = static_cast<char>(is.peek()))) && (c == 'x' || c == 'X' || c == '-' || c == '+' || (c >= '0' && c <= '9') || (have_hex && (c >= 'a' && c <= 'f')) || (have_hex && (c >= 'A' && c <= 'F'))))
{
@@ -1707,6 +1746,10 @@ inline std::istream& operator >> (std::istream& is, rational<multiprecision::num
s1.append(1, c);
is.get();
}
+ if(hex_format && ((s1[0] != '0') || (s1[1] != 'x')))
+ s1.insert(0, "0x");
+ if(oct_format && (s1[0] != '0'))
+ s1.insert(0, "0");
v1.assign(s1);
s1.erase();
if(c == '/')
@@ -1719,6 +1762,10 @@ inline std::istream& operator >> (std::istream& is, rational<multiprecision::num
s1.append(1, c);
is.get();
}
+ if(hex_format && ((s1[0] != '0') || (s1[1] != 'x')))
+ s1.insert(0, "0x");
+ if(oct_format && (s1[0] != '0'))
+ s1.insert(0, "0");
v2.assign(s1);
}
else
@@ -1728,25 +1775,25 @@ inline std::istream& operator >> (std::istream& is, rational<multiprecision::num
}
template <class T, multiprecision::expression_template_option ExpressionTemplates, class Arithmetic>
-typename enable_if<boost::is_arithmetic<Arithmetic>, bool>::type operator == (const rational<multiprecision::number<T, ExpressionTemplates> >& a, const Arithmetic& b)
+typename boost::enable_if<boost::is_arithmetic<Arithmetic>, bool>::type operator == (const rational<multiprecision::number<T, ExpressionTemplates> >& a, const Arithmetic& b)
{
return a == multiprecision::number<T, ExpressionTemplates>(b);
}
template <class T, multiprecision::expression_template_option ExpressionTemplates, class Arithmetic>
-typename enable_if<boost::is_arithmetic<Arithmetic>, bool>::type operator == (const Arithmetic& b, const rational<multiprecision::number<T, ExpressionTemplates> >& a)
+typename boost::enable_if<boost::is_arithmetic<Arithmetic>, bool>::type operator == (const Arithmetic& b, const rational<multiprecision::number<T, ExpressionTemplates> >& a)
{
return a == multiprecision::number<T, ExpressionTemplates>(b);
}
template <class T, multiprecision::expression_template_option ExpressionTemplates, class Arithmetic>
-typename enable_if<boost::is_arithmetic<Arithmetic>, bool>::type operator != (const rational<multiprecision::number<T, ExpressionTemplates> >& a, const Arithmetic& b)
+typename boost::enable_if<boost::is_arithmetic<Arithmetic>, bool>::type operator != (const rational<multiprecision::number<T, ExpressionTemplates> >& a, const Arithmetic& b)
{
return a != multiprecision::number<T, ExpressionTemplates>(b);
}
template <class T, multiprecision::expression_template_option ExpressionTemplates, class Arithmetic>
-typename enable_if<boost::is_arithmetic<Arithmetic>, bool>::type operator != (const Arithmetic& b, const rational<multiprecision::number<T, ExpressionTemplates> >& a)
+typename boost::enable_if<boost::is_arithmetic<Arithmetic>, bool>::type operator != (const Arithmetic& b, const rational<multiprecision::number<T, ExpressionTemplates> >& a)
{
return a != multiprecision::number<T, ExpressionTemplates>(b);
}
diff --git a/3party/boost/boost/multiprecision/rational_adaptor.hpp b/3party/boost/boost/multiprecision/rational_adaptor.hpp
index 3bbef01966..4e2c086703 100644
--- a/3party/boost/boost/multiprecision/rational_adaptor.hpp
+++ b/3party/boost/boost/multiprecision/rational_adaptor.hpp
@@ -165,12 +165,43 @@ struct rational_adaptor
return m_value > o.m_value ? 1 : (m_value < o.m_value ? -1 : 0);
}
template <class Arithmatic>
- typename enable_if<is_arithmetic<Arithmatic>, int>::type compare(Arithmatic i)const
+ typename enable_if_c<is_arithmetic<Arithmatic>::value && !is_floating_point<Arithmatic>::value, int>::type compare(Arithmatic i)const
{
return m_value > i ? 1 : (m_value < i ? -1 : 0);
}
+ template <class Arithmatic>
+ typename enable_if_c<is_floating_point<Arithmatic>::value, int>::type compare(Arithmatic i)const
+ {
+ rational_adaptor r;
+ r = i;
+ return this->compare(r);
+ }
rational_type& data() { return m_value; }
const rational_type& data()const { return m_value; }
+
+ template <class Archive>
+ void serialize(Archive& ar, const mpl::true_&)
+ {
+ // Saving
+ integer_type n(m_value.numerator()), d(m_value.denominator());
+ ar & n;
+ ar & d;
+ }
+ template <class Archive>
+ void serialize(Archive& ar, const mpl::false_&)
+ {
+ // Loading
+ integer_type n, d;
+ ar & n;
+ ar & d;
+ m_value.assign(n, d);
+ }
+ template <class Archive>
+ void serialize(Archive& ar, const unsigned int /*version*/)
+ {
+ typedef typename Archive::is_saving tag;
+ serialize(ar, tag());
+ }
private:
rational_type m_value;
};
@@ -202,12 +233,21 @@ inline void eval_divide(rational_adaptor<IntBackend>& result, const rational_ada
}
template <class R, class IntBackend>
-inline void eval_convert_to(R* result, const rational_adaptor<IntBackend>& backend)
+inline typename disable_if_c<is_integral<R>::value>::type eval_convert_to(R* result, const rational_adaptor<IntBackend>& backend)
{
*result = backend.data().numerator().template convert_to<R>();
*result /= backend.data().denominator().template convert_to<R>();
}
+template <class R, class IntBackend>
+inline typename enable_if_c<is_integral<R>::value>::type eval_convert_to(R* result, const rational_adaptor<IntBackend>& backend)
+{
+ typedef typename component_type<number<rational_adaptor<IntBackend> > >::type comp_t;
+ comp_t t = backend.data().numerator();
+ t /= backend.data().denominator();
+ *result = t.template convert_to<R>();
+}
+
template <class IntBackend>
inline bool eval_is_zero(const rational_adaptor<IntBackend>& val)
{
diff --git a/3party/boost/boost/multiprecision/tommath.hpp b/3party/boost/boost/multiprecision/tommath.hpp
index 2e1a65a4e6..f294056465 100644
--- a/3party/boost/boost/multiprecision/tommath.hpp
+++ b/3party/boost/boost/multiprecision/tommath.hpp
@@ -58,7 +58,7 @@ struct tommath_int
}
tommath_int& operator = (tommath_int&& o)
{
- mp_exch(&m_data, &o.data());
+ mp_exch(&m_data, &o.m_data);
return *this;
}
#endif
@@ -93,11 +93,10 @@ struct tommath_int
}
tommath_int& operator = (long long i)
{
- BOOST_MP_USING_ABS
if(m_data.dp == 0)
detail::check_tommath_result(mp_init(&m_data));
bool neg = i < 0;
- *this = static_cast<unsigned long long>(abs(i));
+ *this = boost::multiprecision::detail::unsigned_abs(i);
if(neg)
detail::check_tommath_result(mp_neg(&m_data, &m_data));
return *this;
@@ -609,6 +608,20 @@ inline unsigned eval_lsb(const tommath_int& val)
return mp_cnt_lsb(const_cast< ::mp_int*>(&val.data()));
}
+inline unsigned eval_msb(const tommath_int& val)
+{
+ int c = eval_get_sign(val);
+ if(c == 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("No bits were set in the operand."));
+ }
+ if(c < 0)
+ {
+ BOOST_THROW_EXCEPTION(std::range_error("Testing individual bits in negative values is not supported - results are undefined."));
+ }
+ return mp_count_bits(const_cast< ::mp_int*>(&val.data())) - 1;
+}
+
template <class Integer>
inline typename enable_if<is_unsigned<Integer>, Integer>::type eval_integer_modulus(const tommath_int& x, Integer val)
{
diff --git a/3party/boost/boost/multiprecision/traits/is_restricted_conversion.hpp b/3party/boost/boost/multiprecision/traits/is_restricted_conversion.hpp
index 283f15ce44..ff8f7f63cb 100644
--- a/3party/boost/boost/multiprecision/traits/is_restricted_conversion.hpp
+++ b/3party/boost/boost/multiprecision/traits/is_restricted_conversion.hpp
@@ -19,7 +19,7 @@ struct is_lossy_conversion
{
typedef typename mpl::if_c<
((number_category<From>::value == number_kind_floating_point) && (number_category<To>::value == number_kind_integer))
- || ((number_category<From>::value == number_kind_floating_point) && (number_category<To>::value == number_kind_rational))
+ /* || ((number_category<From>::value == number_kind_floating_point) && (number_category<To>::value == number_kind_rational))*/
|| ((number_category<From>::value == number_kind_rational) && (number_category<To>::value == number_kind_integer))
|| ((number_category<From>::value == number_kind_fixed_point) && (number_category<To>::value == number_kind_integer))
|| (number_category<From>::value == number_kind_unknown)
diff --git a/3party/boost/boost/noncopyable.hpp b/3party/boost/boost/noncopyable.hpp
index eb8e2e70da..e998ee864a 100644
--- a/3party/boost/boost/noncopyable.hpp
+++ b/3party/boost/boost/noncopyable.hpp
@@ -1,48 +1,17 @@
-// Boost noncopyable.hpp header file --------------------------------------//
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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)
+ */
-// (C) Copyright Beman Dawes 1999-2003. 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_NONCOPYABLE_HPP
+#define BOOST_NONCOPYABLE_HPP
-// See http://www.boost.org/libs/utility for documentation.
+// The header file at this path is deprecated;
+// use boost/core/noncopyable.hpp instead.
-#ifndef BOOST_NONCOPYABLE_HPP_INCLUDED
-#define BOOST_NONCOPYABLE_HPP_INCLUDED
+#include <boost/core/noncopyable.hpp>
-#include <boost/config.hpp>
-
-namespace boost {
-
-// Private copy constructor and copy assignment ensure classes derived from
-// class noncopyable cannot be copied.
-
-// Contributed by Dave Abrahams
-
-namespace noncopyable_ // protection from unintended ADL
-{
- class noncopyable
- {
- protected:
-#ifndef BOOST_NO_DEFAULTED_FUNCTIONS
- BOOST_CONSTEXPR noncopyable() = default;
- ~noncopyable() = default;
-#else
- noncopyable() {}
- ~noncopyable() {}
#endif
-#ifndef BOOST_NO_DELETED_FUNCTIONS
- noncopyable( const noncopyable& ) = delete;
- noncopyable& operator=( const noncopyable& ) = delete;
-#else
- private: // emphasize the following members are private
- noncopyable( const noncopyable& );
- noncopyable& operator=( const noncopyable& );
-#endif
- };
-}
-
-typedef noncopyable_::noncopyable noncopyable;
-
-} // namespace boost
-
-#endif // BOOST_NONCOPYABLE_HPP_INCLUDED
diff --git a/3party/boost/boost/nondet_random.hpp b/3party/boost/boost/nondet_random.hpp
index 0002e800b8..1ec2e446d9 100644
--- a/3party/boost/boost/nondet_random.hpp
+++ b/3party/boost/boost/nondet_random.hpp
@@ -5,7 +5,7 @@
* accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
- * $Id: nondet_random.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2000-02-18 Portability fixes (thanks to Beman Dawes)
diff --git a/3party/boost/boost/numeric/conversion/detail/old_numeric_cast.hpp b/3party/boost/boost/numeric/conversion/detail/old_numeric_cast.hpp
index 47b86d2c8c..47b86d2c8c 100644..100755
--- a/3party/boost/boost/numeric/conversion/detail/old_numeric_cast.hpp
+++ b/3party/boost/boost/numeric/conversion/detail/old_numeric_cast.hpp
diff --git a/3party/boost/boost/numeric/odeint.hpp b/3party/boost/boost/numeric/odeint.hpp
index 3200fbe14a..1cb8be94f4 100644
--- a/3party/boost/boost/numeric/odeint.hpp
+++ b/3party/boost/boost/numeric/odeint.hpp
@@ -6,8 +6,8 @@
Forward include for odeint. Includes nearly everything.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -47,6 +47,7 @@
#include <boost/numeric/odeint/stepper/symplectic_euler.hpp>
#include <boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp>
+#include <boost/numeric/odeint/stepper/velocity_verlet.hpp>
#include <boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp>
@@ -55,11 +56,13 @@
#include <boost/numeric/odeint/stepper/rosenbrock4_controller.hpp>
#include <boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/multi_array_algebra.hpp>
+#include <boost/numeric/odeint/util/multi_array_adaption.hpp>
/*
* Including this algebra slows down the compilation time
*/
// #include <boost/numeric/odeint/algebra/fusion_algebra.hpp>
-#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
#include <boost/numeric/odeint/integrate/integrate.hpp>
#include <boost/numeric/odeint/integrate/integrate_adaptive.hpp>
@@ -71,5 +74,10 @@
#include <boost/numeric/odeint/stepper/generation.hpp>
+#include <boost/numeric/odeint/iterator/adaptive_iterator.hpp>
+#include <boost/numeric/odeint/iterator/adaptive_time_iterator.hpp>
+#include <boost/numeric/odeint/iterator/const_step_iterator.hpp>
+#include <boost/numeric/odeint/iterator/const_step_time_iterator.hpp>
+
#endif // BOOST_NUMERIC_ODEINT_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/algebra/algebra_dispatcher.hpp b/3party/boost/boost/numeric/odeint/algebra/algebra_dispatcher.hpp
new file mode 100644
index 0000000000..df5aabac96
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/algebra/algebra_dispatcher.hpp
@@ -0,0 +1,87 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/algebra/algebra_dispatcher.hpp
+
+ [begin_description]
+ Algebra dispatcher to automatically chose suitable algebra.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ALGEBRA_ALGEBRA_DISPATCHER_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ALGEBRA_ALGEBRA_DISPATCHER_HPP_INCLUDED
+
+#include <complex>
+
+#include <boost/type_traits/is_floating_point.hpp>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+
+#include <boost/numeric/odeint/algebra/range_algebra.hpp>
+#include <boost/numeric/odeint/algebra/array_algebra.hpp>
+#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
+
+#include <boost/array.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template< class StateType , class Enabler = void >
+struct algebra_dispatcher_sfinae
+{
+ // range_algebra is the standard algebra^
+ typedef range_algebra algebra_type;
+};
+
+template< class StateType >
+struct algebra_dispatcher : algebra_dispatcher_sfinae< StateType > { };
+
+//specialize for array
+template< class T , size_t N >
+struct algebra_dispatcher< boost::array< T , N > >
+{
+ typedef array_algebra algebra_type;
+};
+
+//specialize for some integral types
+template< typename T >
+struct algebra_dispatcher_sfinae< T , typename boost::enable_if< typename boost::is_floating_point< T >::type >::type >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+template< typename T >
+struct algebra_dispatcher< std::complex<T> >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+///* think about that again....
+// specialize for ublas vector and matrix types
+template< class T , class A >
+struct algebra_dispatcher< boost::numeric::ublas::vector< T , A > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+template< class T , class L , class A >
+struct algebra_dispatcher< boost::numeric::ublas::matrix< T , L , A > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+//*/
+
+}
+}
+}
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/algebra/array_algebra.hpp b/3party/boost/boost/numeric/odeint/algebra/array_algebra.hpp
index 096e427f1e..c565d6dd76 100644
--- a/3party/boost/boost/numeric/odeint/algebra/array_algebra.hpp
+++ b/3party/boost/boost/numeric/odeint/algebra/array_algebra.hpp
@@ -6,8 +6,8 @@
Algebra for boost::array. Highly specialized for odeint. Const arguments are introduce to work with odeint.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -18,8 +18,11 @@
#ifndef BOOST_NUMERIC_ODEINT_ALGEBRA_ARRAY_ALGEBRA_HPP_INCLUDED
#define BOOST_NUMERIC_ODEINT_ALGEBRA_ARRAY_ALGEBRA_HPP_INCLUDED
+#include <algorithm>
#include <boost/array.hpp>
+#include <boost/numeric/odeint/algebra/norm_result_type.hpp>
+
namespace boost {
namespace numeric {
namespace odeint {
@@ -248,11 +251,15 @@ struct array_algebra
}
- template< class Value , class T , size_t dim , class Red >
- static Value reduce( const boost::array< T , dim > &s , Red red , Value init)
+ template< typename T , size_t dim >
+ static typename norm_result_type< boost::array< T , dim > >::type norm_inf( const boost::array< T , dim > &s )
{
+ BOOST_USING_STD_MAX();
+ using std::abs;
+ typedef typename norm_result_type< boost::array< T , dim > >::type result_type;
+ result_type init = static_cast< result_type >( 0 );
for( size_t i=0 ; i<dim ; ++i )
- init = red( init , s[i] );
+ init = max BOOST_PREVENT_MACRO_SUBSTITUTION ( init , static_cast< result_type >(abs(s[i])) );
return init;
}
diff --git a/3party/boost/boost/numeric/odeint/algebra/default_operations.hpp b/3party/boost/boost/numeric/odeint/algebra/default_operations.hpp
index 3fe4b56341..b10944fa19 100644
--- a/3party/boost/boost/numeric/odeint/algebra/default_operations.hpp
+++ b/3party/boost/boost/numeric/odeint/algebra/default_operations.hpp
@@ -6,8 +6,8 @@
Default operations. They work with the default numerical types, like float, double, complex< double> ...
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -499,9 +499,6 @@ struct default_operations
};
-
-
-
template< class Fac1 = double >
struct rel_error_max
{
diff --git a/3party/boost/boost/numeric/odeint/algebra/detail/extract_value_type.hpp b/3party/boost/boost/numeric/odeint/algebra/detail/extract_value_type.hpp
new file mode 100644
index 0000000000..c5246bb6f4
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/algebra/detail/extract_value_type.hpp
@@ -0,0 +1,52 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/algebra/detail/extract_value_type.hpp
+
+ [begin_description]
+ Extract true value type from complex types (eg. std::complex)
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ALGEBRA_DETAIL_EXTRACT_VALUE_TYPE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ALGEBRA_DETAIL_EXTRACT_VALUE_TYPE_HPP_INCLUDED
+
+#include <boost/utility.hpp>
+#include <boost/mpl/has_xxx.hpp>
+
+BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+template< typename S , typename Enabler = void >
+struct extract_value_type {};
+
+// as long as value_types are defined we go down the value_type chain
+// e.g. returning S::value_type::value_type::value_type
+
+template< typename S >
+struct extract_value_type<S , typename boost::disable_if< has_value_type<S> >::type >
+{
+ // no value_type defined, return S
+ typedef S type;
+};
+
+template< typename S >
+struct extract_value_type< S , typename boost::enable_if< has_value_type<S> >::type >
+{
+ // go down the value_type
+ typedef typename extract_value_type< typename S::value_type >::type type;
+};
+
+} } } }
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/algebra/detail/for_each.hpp b/3party/boost/boost/numeric/odeint/algebra/detail/for_each.hpp
index 8693e845ea..5387a47db6 100644
--- a/3party/boost/boost/numeric/odeint/algebra/detail/for_each.hpp
+++ b/3party/boost/boost/numeric/odeint/algebra/detail/for_each.hpp
@@ -6,8 +6,8 @@
Default for_each implementations.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/algebra/detail/macros.hpp b/3party/boost/boost/numeric/odeint/algebra/detail/macros.hpp
index ef97327c4d..9e18a8a2f0 100644
--- a/3party/boost/boost/numeric/odeint/algebra/detail/macros.hpp
+++ b/3party/boost/boost/numeric/odeint/algebra/detail/macros.hpp
@@ -6,8 +6,8 @@
Some macros for type checking.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2010 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/algebra/detail/norm_inf.hpp b/3party/boost/boost/numeric/odeint/algebra/detail/norm_inf.hpp
new file mode 100644
index 0000000000..3d32c99bee
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/algebra/detail/norm_inf.hpp
@@ -0,0 +1,45 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/algebra/detail/norm_inf.hpp
+
+ [begin_description]
+ Default reduce implementation.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ALGEBRA_DETAIL_NORM_INF_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ALGEBRA_DETAIL_NORM_INF_HPP_INCLUDED
+
+#include <cmath>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+template< typename Value , class Iterator1 >
+inline Value norm_inf( Iterator1 first1 , Iterator1 last1 , Value init )
+{
+ using std::max;
+ using std::abs;
+ for( ; first1 != last1 ; )
+ init = max( init , abs( *first1++ ) );
+ return init;
+}
+
+
+} // detail
+} // odeint
+} // numeric
+} // boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_ALGEBRA_DETAIL_NORM_INF_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/algebra/detail/reduce.hpp b/3party/boost/boost/numeric/odeint/algebra/detail/reduce.hpp
deleted file mode 100644
index 247d03dfc4..0000000000
--- a/3party/boost/boost/numeric/odeint/algebra/detail/reduce.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- [auto_generated]
- boost/numeric/odeint/algebra/detail/reduce.hpp
-
- [begin_description]
- Default reduce implementation.
- [end_description]
-
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
-
- 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_NUMERIC_ODEINT_ALGEBRA_DETAIL_REDUCE_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_ALGEBRA_DETAIL_REDUCE_HPP_INCLUDED
-
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-namespace detail {
-
-template< class ValueType , class Iterator1 , class Reduction >
-inline ValueType reduce( Iterator1 first1 , Iterator1 last1 , Reduction red, ValueType init)
-{
- for( ; first1 != last1 ; )
- init = red( init , *first1++ );
- return init;
-}
-
-
-template< class ValueType , class Iterator1 , class Iterator2 , class Reduction >
-inline ValueType reduce2( Iterator1 first1 , Iterator1 last1 , Iterator2 first2 , Reduction red, ValueType init)
-{
- for( ; first1 != last1 ; )
- init = red( init , *first1++ , *first2++ );
- return init;
-}
-
-template< class ValueType , class Iterator1 , class Iterator2 , class Iterator3 , class Reduction >
-inline ValueType reduce3( Iterator1 first1 , Iterator1 last1 , Iterator2 first2 , Iterator3 first3 , Reduction red, ValueType init)
-{
- for( ; first1 != last1 ; )
- init = red( init , *first1++ , *first2++ , *first3++ );
- return init;
-}
-
-template< class ValueType , class Iterator1 , class Iterator2 , class Iterator3 , class Iterator4 , class Reduction >
-inline ValueType reduce4( Iterator1 first1 , Iterator1 last1 , Iterator2 first2 , Iterator3 first3 , Iterator4 first4 , Reduction red, ValueType init)
-{
- for( ; first1 != last1 ; )
- init = red( init , *first1++ , *first2++ , *first3++ , *first4++ );
- return init;
-}
-
-
-} // detail
-} // odeint
-} // numeric
-} // boost
-
-
-#endif // BOOST_NUMERIC_ODEINT_ALGEBRA_DETAIL_REDUCE_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/algebra/fusion_algebra.hpp b/3party/boost/boost/numeric/odeint/algebra/fusion_algebra.hpp
index 81c4070fb6..0055e5d4de 100644
--- a/3party/boost/boost/numeric/odeint/algebra/fusion_algebra.hpp
+++ b/3party/boost/boost/numeric/odeint/algebra/fusion_algebra.hpp
@@ -6,8 +6,8 @@
Algebra for boost::fusion sequences.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -18,6 +18,9 @@
#ifndef BOOST_NUMERIC_ODEINT_ALGEBRA_FUSION_ALGEBRA_HPP_INCLUDED
#define BOOST_NUMERIC_ODEINT_ALGEBRA_FUSION_ALGEBRA_HPP_INCLUDED
+#include <algorithm>
+
+#include <boost/numeric/odeint/config.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
@@ -29,6 +32,30 @@ namespace boost {
namespace numeric {
namespace odeint {
+namespace detail {
+
+ template< class Value >
+ struct fusion_maximum
+ {
+ template< class Fac1 , class Fac2 >
+ Value operator()( Fac1 t1 , const Fac2 t2 ) const
+ {
+ using std::abs;
+ Value a1 = abs( get_unit_value( t1 ) ) , a2 = abs( get_unit_value( t2 ) );
+ return ( a1 < a2 ) ? a2 : a1 ;
+ }
+
+ typedef Value result_type;
+ };
+}
+
+/* specialize this if the fundamental numeric type in your fusion sequence is
+ * anything else but double (most likely not)
+ */
+template< typename Sequence >
+struct fusion_traits {
+ typedef double value_type;
+};
struct fusion_algebra
{
@@ -169,11 +196,14 @@ struct fusion_algebra
boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
}
- template< class Value , class S , class Reduction >
- static Value reduce( const S &s , Reduction red , Value init)
+ template< class S >
+ static typename fusion_traits< S >::value_type norm_inf( const S &s )
{
- return boost::fusion::accumulate( s , init , red );
+ typedef typename fusion_traits< S >::value_type value_type;
+ return boost::fusion::accumulate( s , static_cast<value_type>(0) ,
+ detail::fusion_maximum<value_type>() );
}
+
};
diff --git a/3party/boost/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp b/3party/boost/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp
new file mode 100644
index 0000000000..4bfc5c26ba
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp
@@ -0,0 +1,48 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ALGEBRA_FUSION_ALGEBRA_DISPATCHER_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_ALGEBRA_FUSION_ALGEBRA_DISPATCHER_HPP_DEFINED
+
+#include <boost/numeric/odeint/algebra/fusion_algebra.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+// specialization for fusion sequences
+template< class FusionSequence >
+struct algebra_dispatcher_sfinae< FusionSequence ,
+ typename boost::enable_if<
+ typename boost::fusion::traits::is_sequence< FusionSequence >::type >::type >
+{
+ typedef fusion_algebra algebra_type;
+};
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_ALGEBRA_FUSION_ALGEBRA_DISPATCHER_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/algebra/multi_array_algebra.hpp b/3party/boost/boost/numeric/odeint/algebra/multi_array_algebra.hpp
new file mode 100644
index 0000000000..4d1fc16c3a
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/algebra/multi_array_algebra.hpp
@@ -0,0 +1,148 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/algebra/multi_array_algebra.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ALGEBRA_MULTI_ARRAY_ALGEBRA_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_ALGEBRA_MULTI_ARRAY_ALGEBRA_HPP_DEFINED
+
+
+#include <boost/numeric/odeint/algebra/detail/for_each.hpp>
+#include <boost/numeric/odeint/algebra/detail/norm_inf.hpp>
+#include <boost/numeric/odeint/algebra/norm_result_type.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+// not ready
+struct multi_array_algebra
+{
+ template< class S1 , class Op >
+ static void for_each1( S1 &s1 , Op op )
+ {
+ detail::for_each1( s1.data() , s1.data() + s1.num_elements() , op );
+ }
+
+ template< class S1 , class S2 , class Op >
+ static void for_each2( S1 &s1 , S2 &s2 , Op op )
+ {
+ detail::for_each2( s1.data() , s1.data() + s1.num_elements() , s2.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class Op >
+ static void for_each3( S1 &s1 , S2 &s2 , S3 &s3 , Op op )
+ {
+ detail::for_each3( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class Op >
+ static void for_each4( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op )
+ {
+ detail::for_each4( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class Op >
+ static void for_each5( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op )
+ {
+ detail::for_each5( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op >
+ static void for_each6( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op )
+ {
+ detail::for_each6( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class Op >
+ static void for_each7( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op )
+ {
+ detail::for_each7( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , s7.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class Op >
+ static void for_each8( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op )
+ {
+ detail::for_each8( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , s7.data() , s8.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class Op >
+ static void for_each9( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , Op op )
+ {
+ detail::for_each9( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , s7.data() , s8.data() , s9.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class Op >
+ static void for_each10( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , Op op )
+ {
+ detail::for_each10( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , s7.data() , s8.data() , s9.data() , s10.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class Op >
+ static void for_each11( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , Op op )
+ {
+ detail::for_each11( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , s7.data() , s8.data() , s9.data() , s10.data() , s11.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class Op >
+ static void for_each12( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , Op op )
+ {
+ detail::for_each12( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , s7.data() , s8.data() , s9.data() , s10.data() , s11.data() , s12.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class Op >
+ static void for_each13( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , Op op )
+ {
+ detail::for_each13( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , s7.data() , s8.data() , s9.data() , s10.data() , s11.data() , s12.data() , s13.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class Op >
+ static void for_each14( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , Op op )
+ {
+ detail::for_each14( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , s7.data() , s8.data() , s9.data() , s10.data() , s11.data() , s12.data() , s14.data() , op );
+ }
+
+ template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class S15 , class Op >
+ static void for_each15( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , S15 &s15 , Op op )
+ {
+ detail::for_each15( s1.data() , s1.data() + s1.num_elements() , s2.data() , s3.data() , s4.data() , s5.data() , s6.data() , s7.data() , s8.data() , s9.data() , s10.data() , s11.data() , s12.data() , s14.data() , s15.data() , op );
+ }
+
+ template< typename S >
+ static typename norm_result_type<S>::type norm_inf( const S &s )
+ {
+ return detail::norm_inf( s.data() , s.data() + s.num_elements() , static_cast< typename norm_result_type<S>::type >( 0 ) );
+ }
+};
+
+// template< class T , size_t N >
+// struct algebra_dispatcher< boost::array< T , N > >
+// {
+// typedef array_algebra algebra_type;
+// };
+
+
+
+
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_ALGEBRA_MULTI_ARRAY_ALGEBRA_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/algebra/norm_result_type.hpp b/3party/boost/boost/numeric/odeint/algebra/norm_result_type.hpp
new file mode 100644
index 0000000000..0e99e8fcc2
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/algebra/norm_result_type.hpp
@@ -0,0 +1,33 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/algebra/norm_result_type.hpp
+
+ [begin_description]
+ Calculates the type of the norm_inf operation for container types
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ALGEBRA_NORM_RESULT_TYPE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ALGEBRA_NORM_RESULT_TYPE_HPP_INCLUDED
+
+#include <boost/numeric/odeint/algebra/detail/extract_value_type.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template< typename S , typename Enabler = void >
+struct norm_result_type {
+ typedef typename detail::extract_value_type< S >::type type;
+};
+
+} } }
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/algebra/operations_dispatcher.hpp b/3party/boost/boost/numeric/odeint/algebra/operations_dispatcher.hpp
new file mode 100644
index 0000000000..faeb5e884d
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/algebra/operations_dispatcher.hpp
@@ -0,0 +1,41 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/algebra/operations_dispatcher.hpp
+
+ [begin_description]
+ Operations dispatcher to automatically chose suitable operations.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ALGEBRA_OPERATIONS_DISPATCHER_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ALGEBRA_OPERATIONS_DISPATCHER_HPP_INCLUDED
+
+#include <boost/numeric/odeint/algebra/default_operations.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template< class StateType , class Enabler = void >
+struct operations_dispatcher_sfinae
+{
+ typedef default_operations operations_type;
+};
+
+template< class StateType >
+struct operations_dispatcher : operations_dispatcher_sfinae< StateType > {};
+
+// no further specializations required
+
+}
+}
+}
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/algebra/range_algebra.hpp b/3party/boost/boost/numeric/odeint/algebra/range_algebra.hpp
index c54e09bf3a..3d7695c812 100644
--- a/3party/boost/boost/numeric/odeint/algebra/range_algebra.hpp
+++ b/3party/boost/boost/numeric/odeint/algebra/range_algebra.hpp
@@ -7,8 +7,8 @@
Internally is uses boost::range to obtain the begin and end iterator of the according sequence.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -24,7 +24,8 @@
#include <boost/numeric/odeint/algebra/detail/macros.hpp>
#include <boost/numeric/odeint/algebra/detail/for_each.hpp>
-#include <boost/numeric/odeint/algebra/detail/reduce.hpp>
+#include <boost/numeric/odeint/algebra/detail/norm_inf.hpp>
+#include <boost/numeric/odeint/algebra/norm_result_type.hpp>
namespace boost {
namespace numeric {
@@ -124,31 +125,13 @@ struct range_algebra
detail::for_each15( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , boost::begin( s8 ) , boost::begin( s9 ) , boost::begin( s10 ) , boost::begin( s11 ) , boost::begin( s12 ) , boost::begin( s13 ) , boost::begin( s14 ) , boost::begin( s15 ) , op );
}
- template< class Value , class S , class Red >
- static Value reduce( const S &s , Red red , Value init)
+ template< typename S >
+ static typename norm_result_type<S>::type norm_inf( const S &s )
{
- return detail::reduce( boost::begin( s ) , boost::end( s ) , red , init );
+ return detail::norm_inf( boost::begin( s ) , boost::end( s ) ,
+ static_cast< typename norm_result_type<S>::type >( 0 ) );
}
- template< class Value , class S1 , class S2 , class Red >
- static Value reduce2( const S1 &s1 , const S2 &s2 , Red red , Value init )
- {
- return detail::reduce2( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , red , init );
- }
-
- template< class Value , class S1 , class S2 , class S3 , class Red >
- static Value reduce3( const S1 &s1 , const S2 &s2 , const S3 &s3 , Red red , Value init )
- {
- return detail::reduce3( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , red , init );
- }
-
- template< class Value , class S1 , class S2 , class S3 , class S4 , class Red >
- static Value reduce4( const S1 &s1 , const S2 &s2 , const S3 &s3 , const S4 &s4 , Red red , Value init )
- {
- return detail::reduce4( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , red , init );
- }
-
-
};
} // odeint
diff --git a/3party/boost/boost/numeric/odeint/algebra/vector_space_algebra.hpp b/3party/boost/boost/numeric/odeint/algebra/vector_space_algebra.hpp
index 4673b9b2c5..17ff007eef 100644
--- a/3party/boost/boost/numeric/odeint/algebra/vector_space_algebra.hpp
+++ b/3party/boost/boost/numeric/odeint/algebra/vector_space_algebra.hpp
@@ -6,8 +6,8 @@
An algebra for types which have vector space semantics, hence types on which the operators +,-,* are well defined.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -18,6 +18,8 @@
#ifndef BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED
#define BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED
+#include <complex>
+
#include <boost/type_traits/remove_reference.hpp>
@@ -25,26 +27,46 @@ namespace boost {
namespace numeric {
namespace odeint {
-
/*
- * This class template has to be overload in order to call vector_space_algebra::reduce
+ * This class template has to be overload in order to call vector_space_algebra::norm_inf
*/
-template< class State > struct vector_space_reduce;
+template< class State > struct vector_space_norm_inf;
/*
- * Example: instantiation for sole doubles
+ * Example: instantiation for sole doubles and complex
*/
template<>
-struct vector_space_reduce< double >
+struct vector_space_norm_inf< double >
+{
+ typedef double result_type;
+ double operator()( double x ) const
+ {
+ using std::abs;
+ return abs(x);
+ }
+};
+
+template<>
+struct vector_space_norm_inf< float >
{
- template< class Op >
- double operator()( double x , Op op , double init ) const
- {
- init = op( init , x );
- return init;
- }
+ typedef float result_type;
+ result_type operator()( float x ) const
+ {
+ using std::abs;
+ return abs(x);
+ }
};
+template< typename T >
+struct vector_space_norm_inf< std::complex<T> >
+{
+ typedef T result_type;
+ result_type operator()( std::complex<T> x ) const
+ {
+ using std::abs;
+ return abs( x );
+ }
+};
struct vector_space_algebra
{
@@ -139,11 +161,11 @@ struct vector_space_algebra
op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 );
}
- template< class Value , class S , class Red >
- static Value reduce( const S &s , Red red , Value init )
+ template< class S >
+ static typename boost::numeric::odeint::vector_space_norm_inf< S >::result_type norm_inf( const S &s )
{
- boost::numeric::odeint::vector_space_reduce< S > r;
- return r( s , red , init );
+ boost::numeric::odeint::vector_space_norm_inf< S > n;
+ return n( s );
}
};
diff --git a/3party/boost/boost/numeric/odeint/config.hpp b/3party/boost/boost/numeric/odeint/config.hpp
index 0d08982b58..f191582558 100644
--- a/3party/boost/boost/numeric/odeint/config.hpp
+++ b/3party/boost/boost/numeric/odeint/config.hpp
@@ -6,8 +6,8 @@
Sets configurations for odeint and used libraries. Should be included before any other odeint library
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -17,11 +17,13 @@
#ifndef BOOST_NUMERIC_ODEINT_CONFIG_HPP_INCLUDED
#define BOOST_NUMERIC_ODEINT_CONFIG_HPP_INCLUDED
+
//increase macro variable to allow rk78 scheme
#ifndef FUSION_MAX_VECTOR_SIZE
#define FUSION_MAX_VECTOR_SIZE 15
#endif
+
/*
* the following definitions are only required if fusion vectors are used as state types
* in the rk78 scheme
@@ -34,8 +36,10 @@
#ifndef BOOST_RESULT_OF_NUM_ARGS
#define BOOST_RESULT_OF_NUM_ARGS 15
#endif
-/*
- */
+
+
+
+
#include <boost/config.hpp>
@@ -44,4 +48,6 @@
#endif
+
+
#endif // BOOST_NUMERIC_ODEINT_CONFIG_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp b/3party/boost/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp
new file mode 100644
index 0000000000..29bf78621d
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp
@@ -0,0 +1,55 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_BLAZE_BLAZE_ALGEBRA_DISPATCHER_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_BLAZE_BLAZE_ALGEBRA_DISPATCHER_HPP_INCLUDED
+
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <blaze/math/dense/StaticVector.h>
+#include <blaze/math/dense/DynamicVector.h>
+
+
+
+
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template< typename T , size_t N , bool TF >
+struct algebra_dispatcher< blaze::StaticVector< T , N , TF > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+template< typename T , bool TF >
+struct algebra_dispatcher< blaze::DynamicVector< T , TF > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+
+
+
+
+}
+}
+}
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_BLAZE_BLAZE_ALGEBRA_DISPATCHER_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/external/blaze/blaze_resize.hpp b/3party/boost/boost/numeric/odeint/external/blaze/blaze_resize.hpp
new file mode 100644
index 0000000000..3c5f2d46a0
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/blaze/blaze_resize.hpp
@@ -0,0 +1,62 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/blaze/blaze_resize.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_BLAZE_BLAZE_RESIZE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_BLAZE_BLAZE_RESIZE_HPP_INCLUDED
+
+#include <boost/numeric/odeint/util/is_resizeable.hpp>
+#include <boost/numeric/odeint/util/resize.hpp>
+#include <boost/numeric/odeint/util/same_size.hpp>
+
+#include <blaze/math/dense/DynamicVector.h>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template< typename T , bool TF >
+struct is_resizeable< blaze::DynamicVector< T , TF > >
+{
+ typedef boost::true_type type;
+ const static bool value = type::value;
+};
+
+template< typename T1 , bool TF1, typename T2 , bool TF2 >
+struct same_size_impl< blaze::DynamicVector< T1 , TF1 > , blaze::DynamicVector< T2 , TF2 > >
+{
+ static bool same_size( const blaze::DynamicVector< T1 , TF1 > &x1 , const blaze::DynamicVector< T2 , TF2 > &x2 )
+ {
+ return x1.size() == x2.size();
+ }
+};
+
+template< typename T1 , bool TF1, typename T2 , bool TF2 >
+struct resize_impl< blaze::DynamicVector< T1 , TF1 > , blaze::DynamicVector< T2 , TF2 > >
+{
+ static void resize( blaze::DynamicVector< T1 , TF1 > &x1 , const blaze::DynamicVector< T2 , TF2 > &x2 )
+ {
+ x1.resize( x2.size() );
+ }
+};
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_BLAZE_BLAZE_RESIZE_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/external/compute/compute.hpp b/3party/boost/boost/numeric/odeint/external/compute/compute.hpp
new file mode 100644
index 0000000000..fe04b581e7
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/compute/compute.hpp
@@ -0,0 +1,27 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/compute/compute.hpp
+
+ [begin_description]
+ includes all headers required for using odeint with Boost.Compute
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_HPP_DEFINED
+
+#include <boost/numeric/odeint/external/compute/compute_algebra.hpp>
+#include <boost/numeric/odeint/external/compute/compute_operations.hpp>
+#include <boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp>
+#include <boost/numeric/odeint/external/compute/compute_resize.hpp>
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/compute/compute_algebra.hpp b/3party/boost/boost/numeric/odeint/external/compute/compute_algebra.hpp
new file mode 100644
index 0000000000..9cd3912eea
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/compute/compute_algebra.hpp
@@ -0,0 +1,65 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/compute/compute_algebra.hpp
+
+ [begin_description]
+ An algebra for Boost.Compute vectors.
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_ALGEBRA_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_ALGEBRA_HPP_DEFINED
+
+#include <boost/preprocessor/repetition.hpp>
+#include <boost/compute.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+struct compute_algebra
+{
+
+#define BOOST_ODEINT_COMPUTE_STATE_PARAM(z, n, unused) \
+ StateType ## n &s ## n,
+
+#define BOOST_ODEINT_COMPUTE_ALGEBRA(z, n, unused) \
+ template< BOOST_PP_ENUM_PARAMS(n, class StateType), class Operation > \
+ static void for_each ## n( \
+ BOOST_PP_REPEAT(n, BOOST_ODEINT_COMPUTE_STATE_PARAM, ~) \
+ Operation op \
+ ) \
+ { \
+ op( BOOST_PP_ENUM_PARAMS(n, s) ); \
+ }
+
+BOOST_PP_REPEAT_FROM_TO(3, 9, BOOST_ODEINT_COMPUTE_ALGEBRA, ~)
+
+#undef BOOST_ODEINT_COMPUTE_ALGEBRA
+#undef BOOST_ODEINT_COMPUTE_STATE_PARAM
+
+ template < class S >
+ static typename S::value_type norm_inf( const S &s ) {
+ typedef typename S::value_type value_type;
+
+ BOOST_COMPUTE_FUNCTION(value_type, max_abs, (value_type, value_type),
+ {
+ return max(_1, fabs(_2));
+ });
+
+ return boost::compute::accumulate(s.begin(), s.end(), value_type(), max_abs);
+ }
+};
+} // odeint
+} // numeric
+} // boost
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp b/3party/boost/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp
new file mode 100644
index 0000000000..6df360b76d
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp
@@ -0,0 +1,41 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp
+
+ [begin_description]
+ algebra_dispatcher specialization for Boost.Compute
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_ALGEBRA_DISPATCHER_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_ALGEBRA_DISPATCHER_HPP_DEFINED
+
+#include <boost/compute/container/vector.hpp>
+
+#include <boost/numeric/odeint/external/compute/compute_algebra.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+// specialization for Boost.Compute vector
+template< class T , class A >
+struct algebra_dispatcher< boost::compute::vector< T , A > >
+{
+ typedef compute_algebra algebra_type;
+};
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_ALGEBRA_DISPATCHER_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/compute/compute_operations.hpp b/3party/boost/boost/numeric/odeint/external/compute/compute_operations.hpp
new file mode 100644
index 0000000000..58d5f692ff
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/compute/compute_operations.hpp
@@ -0,0 +1,198 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/compute/compute_operations.hpp
+
+ [begin_description]
+ Operations of Boost.Compute zipped iterators. Is the counterpart of the compute_algebra.
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_OPERATIONS_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_OPERATIONS_HPP_DEFINED
+
+#include <boost/preprocessor/repetition.hpp>
+#include <boost/compute.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+struct compute_operations {
+
+#define BOOST_ODEINT_COMPUTE_TEMPL_FAC(z, n, unused) \
+ , class Fac ## n = BOOST_PP_CAT(Fac, BOOST_PP_DEC(n))
+
+#define BOOST_ODEINT_COMPUTE_MEMB_FAC(z, n, unused) \
+ const Fac ## n m_alpha ## n;
+
+#define BOOST_ODEINT_COMPUTE_PRM_FAC(z, n, unused) \
+ BOOST_PP_COMMA_IF(n) const Fac ## n alpha ## n
+
+#define BOOST_ODEINT_COMPUTE_INIT_FAC(z, n, unused) \
+ BOOST_PP_COMMA_IF(n) m_alpha ## n (alpha ## n)
+
+#define BOOST_ODEINT_COMPUTE_PRM_STATE(z, n, unused) \
+ BOOST_PP_COMMA_IF(n) StateType ## n &s ## n
+
+#define BOOST_ODEINT_COMPUTE_BEGIN_STATE(z, n, unused) \
+ BOOST_PP_COMMA_IF( BOOST_PP_DEC(n) ) s ## n.begin()
+
+#define BOOST_ODEINT_COMPUTE_END_STATE(z, n, unused) \
+ BOOST_PP_COMMA_IF( BOOST_PP_DEC(n) ) s ## n.end()
+
+#define BOOST_ODEINT_COMPUTE_LAMBDA(z, n, unused) \
+ BOOST_PP_EXPR_IF(n, +) m_alpha ## n * bc::lambda::get< n >(bc::_1)
+
+#define BOOST_ODEINT_COMPUTE_OPERATIONS(z, n, unused) \
+ template< \
+ class Fac0 = double \
+ BOOST_PP_REPEAT_FROM_TO(1, n, BOOST_ODEINT_COMPUTE_TEMPL_FAC, ~) \
+ > \
+ struct scale_sum ## n { \
+ BOOST_PP_REPEAT(n, BOOST_ODEINT_COMPUTE_MEMB_FAC, ~) \
+ scale_sum ## n( \
+ BOOST_PP_REPEAT(n, BOOST_ODEINT_COMPUTE_PRM_FAC, ~) \
+ ) \
+ : BOOST_PP_REPEAT(n, BOOST_ODEINT_COMPUTE_INIT_FAC, ~) \
+ { } \
+ template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), class StateType) > \
+ void operator()( \
+ BOOST_PP_REPEAT( \
+ BOOST_PP_INC(n), \
+ BOOST_ODEINT_COMPUTE_PRM_STATE, ~) \
+ ) const \
+ { \
+ namespace bc = boost::compute; \
+ bc::transform( \
+ bc::make_zip_iterator( \
+ boost::make_tuple( \
+ BOOST_PP_REPEAT_FROM_TO( \
+ 1, BOOST_PP_INC(n), \
+ BOOST_ODEINT_COMPUTE_BEGIN_STATE, ~) \
+ ) \
+ ), \
+ bc::make_zip_iterator( \
+ boost::make_tuple( \
+ BOOST_PP_REPEAT_FROM_TO( \
+ 1, BOOST_PP_INC(n), \
+ BOOST_ODEINT_COMPUTE_END_STATE, ~) \
+ ) \
+ ), \
+ s0.begin(), \
+ BOOST_PP_REPEAT(n, BOOST_ODEINT_COMPUTE_LAMBDA, ~) \
+ ); \
+ } \
+ };
+
+BOOST_PP_REPEAT_FROM_TO(2, 8, BOOST_ODEINT_COMPUTE_OPERATIONS, ~)
+
+#undef BOOST_ODEINT_COMPUTE_TEMPL_FAC
+#undef BOOST_ODEINT_COMPUTE_MEMB_FAC
+#undef BOOST_ODEINT_COMPUTE_PRM_FAC
+#undef BOOST_ODEINT_COMPUTE_INIT_FAC
+#undef BOOST_ODEINT_COMPUTE_PRM_STATE
+#undef BOOST_ODEINT_COMPUTE_BEGIN_STATE
+#undef BOOST_ODEINT_COMPUTE_END_STATE
+#undef BOOST_ODEINT_COMPUTE_LAMBDA
+#undef BOOST_ODEINT_COMPUTE_OPERATIONS
+
+ template<class Fac1 = double, class Fac2 = Fac1>
+ struct scale_sum_swap2 {
+ const Fac1 m_alpha1;
+ const Fac2 m_alpha2;
+
+ scale_sum_swap2(const Fac1 alpha1, const Fac2 alpha2)
+ : m_alpha1(alpha1), m_alpha2(alpha2) { }
+
+ template<class State0, class State1, class State2>
+ void operator()(State0 &s0, State1 &s1, State2 &s2) const {
+ namespace bc = boost::compute;
+
+ bc::command_queue &queue = bc::system::default_queue();
+ const bc::context &context = queue.get_context();
+
+ const char source[] = BOOST_COMPUTE_STRINGIZE_SOURCE(
+ kernel void scale_sum_swap2(
+ F1 a1, F2 a2,
+ global T0 *x0, global T1 *x1, global T2 *x2,
+ )
+ {
+ uint i = get_global_id(0);
+ T0 tmp = x0[i];
+ x0[i] = a1 * x1[i] + a2 * x2[i];
+ x1[i] = tmp;
+ }
+ );
+
+ std::stringstream options;
+ options
+ << " -DT0=" << bc::type_name<typename State0::value_type>()
+ << " -DT1=" << bc::type_name<typename State1::value_type>()
+ << " -DT2=" << bc::type_name<typename State2::value_type>()
+ << " -DF1=" << bc::type_name<Fac1>()
+ << " -DF2=" << bc::type_name<Fac2>();
+
+ bc::program program =
+ bc::program::build_with_source(source, context, options.str());
+
+ bc::kernel kernel(program, "scale_sum_swap2");
+ kernel.set_arg(0, m_alpha1);
+ kernel.set_arg(1, m_alpha2);
+ kernel.set_arg(2, s0.get_buffer());
+ kernel.set_arg(3, s1.get_buffer());
+ kernel.set_arg(4, s2.get_buffer());
+
+ queue.enqueue_1d_range_kernel(kernel, 0, s0.size());
+
+ }
+ };
+
+ template<class Fac1 = double>
+ struct rel_error {
+ const Fac1 m_eps_abs, m_eps_rel, m_a_x, m_a_dxdt;
+
+ rel_error(const Fac1 eps_abs, const Fac1 eps_rel, const Fac1 a_x, const Fac1 a_dxdt)
+ : m_eps_abs(eps_abs), m_eps_rel(eps_rel), m_a_x(a_x), m_a_dxdt(a_dxdt) { }
+
+
+ template <class State0, class State1, class State2>
+ void operator()(State0 &s0, State1 &s1, State2 &s2) const {
+ namespace bc = boost::compute;
+ using bc::_1;
+ using bc::lambda::get;
+
+ bc::for_each(
+ bc::make_zip_iterator(
+ boost::make_tuple(
+ s0.begin(),
+ s1.begin(),
+ s2.begin()
+ )
+ ),
+ bc::make_zip_iterator(
+ boost::make_tuple(
+ s0.end(),
+ s1.end(),
+ s2.end()
+ )
+ ),
+ get<0>(_1) = abs( get<0>(_1) ) /
+ (m_eps_abs + m_eps_rel * (m_a_x * abs(get<1>(_1) + m_a_dxdt * abs(get<2>(_1)))))
+ );
+ }
+ };
+};
+
+} // odeint
+} // numeric
+} // boost
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_OPERATIONS_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp b/3party/boost/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp
new file mode 100644
index 0000000000..76df2f37d5
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp
@@ -0,0 +1,44 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp
+
+ [begin_description]
+ operations_dispatcher specialization for Boost.Compute
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_OPERATIONS_DISPATCHER_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_OPERATIONS_DISPATCHER_HPP_DEFINED
+
+#include <boost/compute/container/vector.hpp>
+
+#include <boost/numeric/odeint/external/compute/compute_operations.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+// specialization for Boost.Compute vector
+template< class T , class A >
+struct operations_dispatcher< boost::compute::vector< T , A > >
+{
+ typedef compute_operations operations_type;
+};
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_OPERATIONS_DISPATCHER_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/compute/compute_resize.hpp b/3party/boost/boost/numeric/odeint/external/compute/compute_resize.hpp
new file mode 100644
index 0000000000..013a7acc41
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/compute/compute_resize.hpp
@@ -0,0 +1,90 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/compute/compute_resize.hpp
+
+ [begin_description]
+ Enable resizing for Boost.Compute vector
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_RESIZE_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_RESIZE_HPP_DEFINED
+
+#include <boost/compute/container/vector.hpp>
+
+#include <boost/numeric/odeint/util/copy.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template< class T, class A >
+struct is_resizeable< boost::compute::vector< T , A > >
+{
+ struct type : public boost::true_type { };
+ const static bool value = type::value;
+};
+
+template< class T, class A >
+struct same_size_impl< boost::compute::vector< T, A > , boost::compute::vector< T, A > >
+{
+ static bool same_size( const boost::compute::vector< T, A > &x , const boost::compute::vector< T, A > &y )
+ {
+ return x.size() == y.size();
+ }
+};
+
+template< class T, class A >
+struct resize_impl< boost::compute::vector< T, A > , boost::compute::vector< T, A > >
+{
+ static void resize( boost::compute::vector< T, A > &x , const boost::compute::vector< T, A > &y )
+ {
+ x.resize( y.size() );
+ }
+};
+
+
+template< class Container1, class T, class A >
+struct copy_impl< Container1 , boost::compute::vector< T, A > >
+{
+ static void copy( const Container1 &from , boost::compute::vector< T, A > &to )
+ {
+ boost::compute::copy( boost::begin( from ) , boost::end( from ) , boost::begin( to ) );
+ }
+};
+
+template< class T, class A, class Container2 >
+struct copy_impl< boost::compute::vector< T, A > , Container2 >
+{
+ static void copy( const boost::compute::vector< T, A > &from , Container2 &to )
+ {
+ boost::compute::copy( boost::begin( from ) , boost::end( from ) , boost::begin( to ) );
+ }
+};
+
+template< class T, class A >
+struct copy_impl< boost::compute::vector< T, A > , boost::compute::vector< T, A > >
+{
+ static void copy( const boost::compute::vector< T, A > &from , boost::compute::vector< T, A > &to )
+ {
+ boost::compute::copy( boost::begin( from ) , boost::end( from ) , boost::begin( to ) );
+ }
+};
+
+
+
+
+} // odeint
+} // numeric
+} // boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_RESIZE_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/eigen/eigen_algebra.hpp b/3party/boost/boost/numeric/odeint/external/eigen/eigen_algebra.hpp
new file mode 100644
index 0000000000..6ca2026b9f
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/eigen/eigen_algebra.hpp
@@ -0,0 +1,96 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/eigen/eigen_algebra.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2013 Christian Shelton
+ Copyright 2013 Karsten Ahnert
+
+ 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_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_ALGEBRA_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_ALGEBRA_HPP_INCLUDED
+
+#include <Eigen/Dense>
+#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
+
+// Necessary routines for Eigen matrices to work with vector_space_algebra
+// from odeint
+// (that is, it lets odeint treat the eigen matrices correctly, knowing
+// how to add, multiply, compute the norm, etc)
+
+namespace Eigen {
+
+
+template<typename D>
+inline const
+typename Eigen::CwiseUnaryOp<
+ typename Eigen::internal::scalar_add_op<
+ typename Eigen::internal::traits<D>::Scalar>,
+ const D >
+operator+(const typename Eigen::MatrixBase<D> &m,
+ const typename Eigen::internal::traits<D>::Scalar &s) {
+ return Eigen::CwiseUnaryOp<
+ typename Eigen::internal::scalar_add_op<
+ typename Eigen::internal::traits<D>::Scalar>,
+ const D >(m.derived(),Eigen::internal::scalar_add_op<
+ typename Eigen::internal::traits<D>::Scalar>(s));
+}
+
+template<typename D>
+inline const
+typename Eigen::CwiseUnaryOp<
+ typename Eigen::internal::scalar_add_op<
+ typename Eigen::internal::traits<D>::Scalar>,
+ const D >
+operator+(const typename Eigen::internal::traits<D>::Scalar &s,
+const typename Eigen::MatrixBase<D> &m) {
+ return Eigen::CwiseUnaryOp<
+ typename Eigen::internal::scalar_add_op<
+ typename Eigen::internal::traits<D>::Scalar>,
+ const D >(m.derived(),Eigen::internal::scalar_add_op<
+ typename Eigen::internal::traits<D>::Scalar>(s));
+}
+
+
+
+template<typename D1,typename D2>
+inline const
+typename Eigen::CwiseBinaryOp<
+ typename Eigen::internal::scalar_quotient_op<
+ typename Eigen::internal::traits<D1>::Scalar>,
+ const D1, const D2>
+operator/(const Eigen::MatrixBase<D1> &x1, const Eigen::MatrixBase<D2> &x2) {
+ return x1.cwiseQuotient(x2);
+}
+
+} // end Eigen namespace
+
+
+
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template<typename B,int S1,int S2,int O, int M1, int M2>
+struct vector_space_norm_inf< Eigen::Matrix<B,S1,S2,O,M1,M2> >
+{
+ typedef B result_type;
+ result_type operator()( const Eigen::Matrix<B,S1,S2,O,M1,M2> &m ) const
+ {
+ return m.template lpNorm<Eigen::Infinity>();
+ }
+};
+
+} } } // end boost::numeric::odeint namespace
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_ALGEBRA_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/external/eigen/eigen_resize.hpp b/3party/boost/boost/numeric/odeint/external/eigen/eigen_resize.hpp
new file mode 100644
index 0000000000..1989cc36c1
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/eigen/eigen_resize.hpp
@@ -0,0 +1,107 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/eigen/eigen_resize.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2013 Ankur Sinha
+ Copyright 2013 Karsten Ahnert
+
+ 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_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_RESIZE_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_RESIZE_HPP_DEFINED
+
+
+#include <boost/numeric/odeint/util/is_resizeable.hpp>
+#include <boost/numeric/odeint/util/resize.hpp>
+#include <boost/numeric/odeint/util/same_size.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+#include <Eigen/Dense>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+
+template< class Derived >
+struct is_resizeable_sfinae< Derived ,
+ typename boost::enable_if< typename boost::is_base_of< Eigen::MatrixBase< Derived > , Derived >::type >::type >
+{
+ typedef boost::true_type type;
+ const static bool value = type::value;
+};
+
+
+template < class Derived >
+struct is_resizeable_sfinae< Derived ,
+ typename boost::enable_if< typename boost::is_base_of< Eigen::ArrayBase< Derived > , Derived >::type >::type >
+{
+ typedef boost::true_type type;
+ const static bool value = type::value;
+};
+
+
+
+template< class Derived >
+struct same_size_impl_sfinae< Derived , Derived ,
+ typename boost::enable_if< typename boost::is_base_of< Eigen::MatrixBase< Derived > , Derived >::type >::type >
+{
+ static bool same_size( const Eigen::MatrixBase< Derived > &m1 , const Eigen::MatrixBase< Derived > &m2 )
+
+ {
+ return ( ( m1.innerSize () == m2.innerSize () ) && ( m1.outerSize() == m2.outerSize() ) );
+ }
+};
+
+template< class Derived >
+struct same_size_impl_sfinae< Derived , Derived ,
+ typename boost::enable_if< typename boost::is_base_of< Eigen::ArrayBase< Derived > , Derived >::type >::type >
+{
+ static bool same_size( const Eigen::ArrayBase< Derived > &v1 , const Eigen::ArrayBase< Derived > &v2 )
+ {
+ return ( ( v1.innerSize () == v2.innerSize () ) && ( v1.outerSize() == v2.outerSize() ) );
+ }
+};
+
+
+
+
+template< class Derived >
+struct resize_impl_sfinae< Derived , Derived ,
+ typename boost::enable_if< typename boost::is_base_of< Eigen::MatrixBase< Derived > , Derived >::type >::type >
+{
+ static void resize( Eigen::MatrixBase< Derived > &m1 , const Eigen::MatrixBase< Derived > &m2 )
+ {
+ m1.derived().resizeLike(m2);
+ }
+};
+
+template< class Derived >
+struct resize_impl_sfinae< Derived , Derived ,
+ typename boost::enable_if< typename boost::is_base_of< Eigen::ArrayBase< Derived > , Derived >::type >::type >
+{
+ static void resize( Eigen::ArrayBase< Derived > &v1 , const Eigen::ArrayBase< Derived > &v2 )
+ {
+ v1.derived().resizeLike(v2);
+ }
+};
+
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_RESIZE_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp b/3party/boost/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp
index c961a894be..a856f6e8a1 100644
--- a/3party/boost/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp
+++ b/3party/boost/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp
@@ -6,8 +6,8 @@
Wrapper for gsl_vector.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -184,7 +184,7 @@ struct same_size_impl< gsl_vector* , gsl_vector* >
template <>
struct resize_impl< gsl_vector* , gsl_vector* >
{
- static void resize( gsl_vector* x , const gsl_vector* y )
+ static void resize( gsl_vector* &x , const gsl_vector* y )
{
gsl_vector_free( x );
x = gsl_vector_alloc( y->size );
diff --git a/3party/boost/boost/numeric/odeint/external/mkl/mkl_operations.hpp b/3party/boost/boost/numeric/odeint/external/mkl/mkl_operations.hpp
index c1e08914e4..59ac4b83cb 100644
--- a/3party/boost/boost/numeric/odeint/external/mkl/mkl_operations.hpp
+++ b/3party/boost/boost/numeric/odeint/external/mkl/mkl_operations.hpp
@@ -8,8 +8,8 @@
http://software.intel.com/en-us/articles/non-commercial-software-download/
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/external/mpi/mpi.hpp b/3party/boost/boost/numeric/odeint/external/mpi/mpi.hpp
new file mode 100644
index 0000000000..26e1ae991a
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/mpi/mpi.hpp
@@ -0,0 +1,25 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/mpi/mpi.hpp
+
+ [begin_description]
+ Wrappers for MPI.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_HPP_INCLUDED
+
+#include <boost/numeric/odeint/external/mpi/mpi_vector_state.hpp>
+#include <boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp>
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp b/3party/boost/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp
new file mode 100644
index 0000000000..5d9022582a
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp
@@ -0,0 +1,62 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp
+
+ [begin_description]
+ Nested parallelized algebra for MPI.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_NESTED_ALGEBRA_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_NESTED_ALGEBRA_HPP_INCLUDED
+
+#include <boost/numeric/odeint/algebra/norm_result_type.hpp>
+#include <boost/numeric/odeint/util/n_ary_helper.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+/** \brief MPI-parallelized algebra, wrapping another algebra.
+ */
+template< class InnerAlgebra >
+struct mpi_nested_algebra
+{
+
+// execute the InnerAlgebra on each node's local data.
+#define BOOST_ODEINT_GEN_BODY(n) \
+ InnerAlgebra::for_each##n( \
+ BOOST_PP_ENUM_BINARY_PARAMS(n, s, () BOOST_PP_INTERCEPT) , \
+ op \
+ );
+BOOST_ODEINT_GEN_FOR_EACH(BOOST_ODEINT_GEN_BODY)
+#undef BOOST_ODEINT_GEN_BODY
+
+
+ template< class NestedState >
+ static typename norm_result_type< typename NestedState::value_type >::type norm_inf( const NestedState &s )
+ {
+ typedef typename norm_result_type< typename NestedState::value_type >::type result_type;
+ // local maximum
+ result_type value = InnerAlgebra::norm_inf( s() );
+ // global maximum
+ return boost::mpi::all_reduce(s.world, value, boost::mpi::maximum<result_type>());
+ }
+
+};
+
+
+}
+}
+}
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/mpi/mpi_state.hpp b/3party/boost/boost/numeric/odeint/external/mpi/mpi_state.hpp
new file mode 100644
index 0000000000..aba179c09c
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/mpi/mpi_state.hpp
@@ -0,0 +1,113 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/mpi/mpi_state.hpp
+
+ [begin_description]
+ A generic split state, storing partial data on each node.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_STATE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_STATE_HPP_INCLUDED
+
+#include <vector>
+#include <algorithm>
+#include <boost/mpi.hpp>
+#include <boost/numeric/odeint/util/copy.hpp>
+#include <boost/numeric/odeint/util/split.hpp>
+#include <boost/numeric/odeint/util/resize.hpp>
+#include <boost/numeric/odeint/util/same_size.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+/** \brief A container which has its contents distributed among the nodes.
+ */
+template< class InnerState >
+struct mpi_state
+{
+ typedef InnerState value_type;
+
+ // the node's local data.
+ InnerState m_data;
+
+ boost::mpi::communicator world;
+
+ mpi_state() {}
+ mpi_state(boost::mpi::communicator comm) : world(comm) {}
+
+ inline InnerState &operator()() { return m_data; }
+ inline const InnerState &operator()() const { return m_data; }
+};
+
+
+
+
+template< class InnerState >
+struct is_resizeable< mpi_state< InnerState > >
+ : is_resizeable< InnerState > { };
+
+
+template< class InnerState1 , class InnerState2 >
+struct same_size_impl< mpi_state< InnerState1 > , mpi_state< InnerState2 > >
+{
+ static bool same_size( const mpi_state< InnerState1 > &x , const mpi_state< InnerState2 > &y )
+ {
+ const bool local = boost::numeric::odeint::same_size(x(), y());
+ return boost::mpi::all_reduce(x.world, local, mpi::bitwise_and<bool>());
+ }
+};
+
+
+template< class InnerState1 , class InnerState2 >
+struct resize_impl< mpi_state< InnerState1 > , mpi_state< InnerState2 > >
+{
+ static void resize( mpi_state< InnerState1 > &x , const mpi_state< InnerState2 > &y )
+ {
+ // resize local parts on each node.
+ boost::numeric::odeint::resize(x(), y());
+ }
+};
+
+
+/** \brief Copy data between mpi_states of same size. */
+template< class InnerState1 , class InnerState2 >
+struct copy_impl< mpi_state< InnerState1 > , mpi_state< InnerState2 > >
+{
+ static void copy( const mpi_state< InnerState1 > &from , mpi_state< InnerState2 > &to )
+ {
+ // copy local parts on each node.
+ boost::numeric::odeint::copy(from(), to());
+ }
+};
+
+
+
+/** \brief Use `mpi_algebra` for `mpi_state`. */
+template< class InnerState >
+struct algebra_dispatcher< mpi_state< InnerState > >
+{
+ typedef mpi_nested_algebra<
+ typename algebra_dispatcher< InnerState >::algebra_type
+ > algebra_type;
+};
+
+
+}
+}
+}
+
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp b/3party/boost/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp
new file mode 100644
index 0000000000..096d40a655
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp
@@ -0,0 +1,94 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/mpi/mpi_vector_state.hpp
+
+ [begin_description]
+ Copying a container from/to an mpi_state splits/joins it.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_VECTOR_STATE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_VECTOR_STATE_HPP_INCLUDED
+
+#include <vector>
+#include <algorithm>
+#include <boost/mpi.hpp>
+#include <boost/numeric/odeint/util/copy.hpp>
+#include <boost/numeric/odeint/util/split_adaptor.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/external/mpi/mpi_state.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+/** \brief Split data from some container on node 0 to the slaves.
+ * Source must be a model of Random Access Range. */
+template< class Source , class InnerState >
+struct split_impl< Source, mpi_state< InnerState >,
+ typename boost::enable_if< boost::has_range_const_iterator<Source> >::type >
+{
+ typedef typename boost::range_iterator<const Source>::type iterator;
+
+ static void split( const Source &from, mpi_state< InnerState > &to )
+ {
+ std::vector< InnerState > pieces;
+ if(to.world.rank() == 0) {
+ const size_t num = static_cast<size_t>(to.world.size());
+ pieces.resize(num);
+ for(size_t i = 0 ; i < num ; i++) {
+ iterator_range<iterator> part = detail::make_split_range(from, i, num);
+ boost::numeric::odeint::resize(pieces[i], part);
+ boost::numeric::odeint::copy(part, pieces[i]);
+ }
+ }
+ // send to nodes
+ boost::mpi::scatter(to.world, pieces, to(), 0);
+ }
+};
+
+/** \brief Merge data from an mpi_state to some container on node 0.
+ * Target must be a model Single Pass Range. */
+template< class Target, class InnerState >
+struct unsplit_impl< mpi_state< InnerState >, Target,
+ typename boost::enable_if< boost::has_range_iterator<Target> >::type >
+{
+ typedef typename boost::range_iterator<Target>::type iterator;
+
+ static void unsplit( const mpi_state< InnerState > &from , Target &to )
+ {
+ std::vector< InnerState > pieces;
+ // send data to root
+ boost::mpi::gather(from.world, from(), pieces, 0);
+ if(from.world.rank() == 0) {
+ // check target size
+ size_t total_size = 0;
+ for(size_t i = 0 ; i < pieces.size() ; i++)
+ total_size += boost::size(pieces[i]);
+ BOOST_ASSERT( total_size <= boost::size(to) );
+ // copy parts
+ iterator out = boost::begin(to);
+ for(size_t i = 0 ; i < pieces.size() ; i++)
+ out = boost::copy(pieces[i], out);
+ }
+ }
+};
+
+
+}
+}
+}
+
+
+#endif
+
diff --git a/3party/boost/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp b/3party/boost/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp
index 1e7afe6ea1..a3f03507cd 100644
--- a/3party/boost/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp
+++ b/3party/boost/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp
@@ -3,9 +3,9 @@
Modification of the implicit Euler method, works with the MTL4 matrix library only.
[end_description]
-Copyright 2009-2011 Karsten Ahnert
-Copyright 2009-2011 Mario Mulansky
-Copyright 2012 Andreas Angelopoulos
+Copyright 2012-2013 Andreas Angelopoulos
+Copyright 2012-2013 Karsten Ahnert
+Copyright 2012-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/external/mtl4/mtl4.hpp b/3party/boost/boost/numeric/odeint/external/mtl4/mtl4.hpp
new file mode 100644
index 0000000000..9b9ebf71d0
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/mtl4/mtl4.hpp
@@ -0,0 +1,23 @@
+/*
+ [auto_generated]
+ /boost/numeric/odeint/external/mtl4/mtl4.hpp
+
+ [begin_description]
+ includes all headers required for using mtl4 with odeint
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_MTL4_MTL4_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_MTL4_MTL4_HPP_INCLUDED
+
+#include <boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/external/mtl4/mtl4_resize.hpp>
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_MTL4_MTL4_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp b/3party/boost/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp
new file mode 100644
index 0000000000..8f6bfbe32e
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp
@@ -0,0 +1,99 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp
+
+ [begin_description]
+ specialization of the algebra dispatcher for mtl4
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_MTL4_MTL4_ALGEBRA_DISPATCHER_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_MTL4_MTL4_ALGEBRA_DISPATCHER_HPP_INCLUDED
+
+#include <boost/numeric/mtl/mtl.hpp>
+
+#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template<typename Value, typename Parameters>
+struct algebra_dispatcher< mtl::dense_vector< Value , Parameters > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+template<typename Value, typename Parameters>
+struct algebra_dispatcher< mtl::dense2D< Value , Parameters > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+template<typename Value , size_t BitMask , typename Parameters>
+struct algebra_dispatcher< mtl::morton_dense< Value , BitMask, Parameters > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+template<typename Value, typename Parameters>
+struct algebra_dispatcher< mtl::compressed2D< Value , Parameters > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+// specialization of infinity norm calculation
+
+template<typename Value, typename Parameters>
+struct vector_space_norm_inf< mtl::dense_vector< Value , Parameters > >
+{
+ typedef Value result_type;
+ Value operator()( const mtl::dense_vector< Value , Parameters > &x ) const
+ {
+ return mtl::infinity_norm(x);
+ }
+};
+
+template<typename Value, typename Parameters>
+struct vector_space_norm_inf< mtl::dense2D< Value , Parameters > >
+{
+ typedef Value result_type;
+ Value operator()( const mtl::dense2D< Value , Parameters > &x ) const
+ {
+ return mtl::infinity_norm(x);
+ }
+};
+
+template<typename Value , size_t BitMask , typename Parameters>
+struct vector_space_norm_inf< mtl::morton_dense< Value , BitMask , Parameters > >
+{
+ typedef Value result_type;
+ Value operator()( const mtl::morton_dense< Value , BitMask , Parameters > &x ) const
+ {
+ return mtl::infinity_norm(x);
+ }
+};
+
+template<typename Value, typename Parameters>
+struct vector_space_norm_inf< mtl::compressed2D< Value , Parameters > >
+{
+ typedef Value result_type;
+ Value operator()( const mtl::compressed2D< Value , Parameters > &x ) const
+ {
+ return mtl::infinity_norm(x);
+ }
+};
+
+}
+}
+}
+
+#endif // BOOST_NUMERIC_ODEINT_MTL4_MTL4_ALGEBRA_DISPATCHER_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp b/3party/boost/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp
index b7f94d1f17..6295c03a64 100644
--- a/3party/boost/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp
+++ b/3party/boost/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp
@@ -3,9 +3,9 @@
Modification of the implicit Euler method, works with the MTL4 matrix library only.
[end_description]
-Copyright 2009-2011 Karsten Ahnert
-Copyright 2009-2011 Mario Mulansky
-Copyright 2012 Andreas Angelopoulos
+Copyright 2012-2013 Andreas Angelopoulos
+Copyright 2012-2013 Karsten Ahnert
+Copyright 2012-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp b/3party/boost/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp
new file mode 100644
index 0000000000..7b82a8b315
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp
@@ -0,0 +1,25 @@
+//==============================================================================
+// Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+// Copyright 2014 NumScale SAS
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//==============================================================================
+#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_NT2_NT2_ALGEBRA_DISPATCHER_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_NT2_NT2_ALGEBRA_DISPATCHER_HPP_INCLUDED
+
+#include <nt2/core/container/table/table.hpp>
+
+#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+
+namespace boost { namespace numeric { namespace odeint {
+template<typename T, typename S>
+struct algebra_dispatcher<nt2::container::table<T,S> >
+{
+ typedef vector_space_algebra algebra_type;
+};
+} } }
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/nt2/nt2_copy.hpp b/3party/boost/boost/numeric/odeint/external/nt2/nt2_copy.hpp
new file mode 100644
index 0000000000..0fd558843c
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/nt2/nt2_copy.hpp
@@ -0,0 +1,33 @@
+//==============================================================================
+// Copyright 2014 LASMEA UMR 6602 CNRS/Univ. Clermont II
+// Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+// Copyright 2014 MetaScale SAS
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//==============================================================================
+#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_NT2_NT2_COPY_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_NT2_NT2_COPY_HPP_INCLUDED
+
+#include <nt2/core/container/table/table.hpp>
+
+#include <boost/numeric/odeint/util/copy.hpp>
+
+namespace boost { namespace numeric { namespace odeint {
+
+template<typename T, typename S>
+struct copy_impl< nt2::container::table<T,S>
+ , nt2::container::table<T,S>
+ >
+{
+ static void copy ( const nt2::container::table<T,S> &v1
+ , nt2::container::table<T,S> &v2
+ )
+ {
+ v2 = v1;
+ }
+};
+} } }
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp b/3party/boost/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp
new file mode 100644
index 0000000000..81f867e353
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp
@@ -0,0 +1,31 @@
+//==============================================================================
+// Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+// Copyright 2014 NumScale SAS
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//==============================================================================
+#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_NT2_NT2_NORM_INF_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_NT2_NT2_NORM_INF_HPP_INCLUDED
+
+#include <nt2/core/container/table/table.hpp>
+#include <nt2/include/functions/globalmax.hpp>
+#include <nt2/include/functions/abs.hpp>
+
+#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
+
+namespace boost { namespace numeric { namespace odeint
+{
+ template<typename T, typename S>
+ struct vector_space_norm_inf<nt2::container::table<T,S> >
+ {
+ typedef T result_type;
+ result_type operator()(const nt2::container::table<T,S> &v1) const
+ {
+ return nt2::globalmax(nt2::abs(v1));
+ }
+ };
+} } }
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/nt2/nt2_resize.hpp b/3party/boost/boost/numeric/odeint/external/nt2/nt2_resize.hpp
new file mode 100644
index 0000000000..d9c2359c3e
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/nt2/nt2_resize.hpp
@@ -0,0 +1,52 @@
+//==============================================================================
+// Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+// Copyright 2014 NumScale SAS
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//==============================================================================
+#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_NT2_NT2_RESIZE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_NT2_NT2_RESIZE_HPP_INCLUDED
+
+#include <nt2/core/container/table/table.hpp>
+
+#include <boost/numeric/odeint/util/same_size.hpp>
+
+namespace boost { namespace numeric { namespace odeint {
+
+template<typename T, typename S>
+struct is_resizeable< nt2::container::table<T,S> >
+{
+ typedef boost::true_type type;
+ static const bool value = type::value;
+};
+
+template<typename T, typename S>
+struct same_size_impl< nt2::container::table<T,S>
+ , nt2::container::table<T,S>
+ >
+{
+ static bool same_size ( const nt2::container::table<T,S> &v1
+ , const nt2::container::table<T,S> &v2
+ )
+ {
+ return v1.extent() == v2.extent();
+ }
+};
+
+template<typename T, typename S>
+struct resize_impl< nt2::container::table<T,S>
+ , nt2::container::table<T,S>
+ >
+{
+ static void resize ( nt2::container::table<T,S> &v1
+ , const nt2::container::table<T,S> &v2
+ )
+ {
+ v1.resize( v2.extent() );
+ }
+};
+} } }
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/openmp/openmp.hpp b/3party/boost/boost/numeric/odeint/external/openmp/openmp.hpp
new file mode 100644
index 0000000000..0d6fb0b855
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/openmp/openmp.hpp
@@ -0,0 +1,31 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/openmp/openmp.hpp
+
+ [begin_description]
+ Wrappers for OpenMP.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_HPP_INCLUDED
+
+// level 1: parallel iteration over random access container
+#include <boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp>
+
+// level 2: split range state
+#include <boost/numeric/odeint/external/openmp/openmp_state.hpp>
+
+// level 3: process a random access container of sub-states in parallel
+#include <boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp>
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp b/3party/boost/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp
new file mode 100644
index 0000000000..a3d299f0a7
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp
@@ -0,0 +1,281 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp
+
+ [begin_description]
+ Nested parallelized algebra for OpenMP.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_NESTED_ALGEBRA_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_NESTED_ALGEBRA_HPP_INCLUDED
+
+#include <boost/assert.hpp>
+#include <boost/range.hpp>
+#include <boost/numeric/odeint/algebra/norm_result_type.hpp>
+#include <boost/numeric/odeint/util/n_ary_helper.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+/** \brief OpenMP-parallelized algebra, wrapping another, non-parallelized algebra.
+ *
+ * NestedState must be a model of Random Access Range, where the elements are sub-states
+ * which will be processed in parallel.
+ */
+template< class InnerAlgebra >
+struct openmp_nested_algebra
+{
+
+#if __cplusplus >= 201103L // C++11 supports _Pragma
+
+#define BOOST_ODEINT_GEN_LOCAL(z, n, unused) \
+ BOOST_ASSERT_MSG( len == boost::size(s ## n), "All nested state ranges must have the same size." ); \
+ typename boost::range_iterator<S ## n>::type beg ## n = boost::begin(s ## n);
+#define BOOST_ODEINT_GEN_BODY(n) \
+ const size_t len = boost::size(s0); \
+ BOOST_PP_REPEAT(n, BOOST_ODEINT_GEN_LOCAL, ~) \
+ _Pragma("omp parallel for schedule(runtime)") \
+ for( size_t i = 0 ; i < len ; i++ ) \
+ InnerAlgebra::for_each##n( \
+ BOOST_PP_ENUM_BINARY_PARAMS(n, beg, [i] BOOST_PP_INTERCEPT) , \
+ op \
+ );
+BOOST_ODEINT_GEN_FOR_EACH(BOOST_ODEINT_GEN_BODY)
+#undef BOOST_ODEINT_GEN_BODY
+#undef BOOST_ODEINT_GEN_LOCAL
+
+#else
+
+ template< class S0 , class Op > static void for_each1 ( S0 &s0 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each1( beg0 [i] , op );
+ }
+ template< class S0 , class S1 , class Op > static void for_each2 ( S0 &s0 , S1 &s1 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each2( beg0 [i] , beg1 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class Op > static void for_each3 ( S0 &s0 , S1 &s1 , S2 &s2 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each3( beg0 [i] , beg1 [i] , beg2 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class Op > static void for_each4 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each4( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class Op > static void for_each5 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each5( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class Op > static void for_each6 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each6( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op > static void for_each7 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each7( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class Op > static void for_each8 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each8( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class Op > static void for_each9 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each9( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class Op > static void for_each10 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each10( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class Op > static void for_each11 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each11( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class Op > static void for_each12 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each12( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class Op > static void for_each13 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each13( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class Op > static void for_each14 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
+ typename boost::range_iterator<S13>::type beg13 = boost::begin(s13);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each14( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , beg13 [i] , op );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class Op > static void for_each15 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
+ typename boost::range_iterator<S13>::type beg13 = boost::begin(s13);
+ typename boost::range_iterator<S14>::type beg14 = boost::begin(s14);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each15( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , beg13 [i] , beg14 [i] , op );
+ }
+
+#endif
+
+
+ template< class NestedState >
+ static typename norm_result_type< typename NestedState::value_type >::type norm_inf( const NestedState &s )
+ {
+ typedef typename boost::range_iterator<const NestedState>::type iterator;
+ typedef typename std::iterator_traits<iterator>::value_type value_type;
+ typedef typename norm_result_type<value_type>::type result_type;
+ result_type init = static_cast< result_type >( 0 );
+ const size_t len = boost::size(s);
+ iterator beg = boost::begin(s);
+# pragma omp parallel for reduction(max: init) schedule(dynamic)
+ for( size_t i = 0 ; i < len ; i++ )
+ init = (std::max)( init , InnerAlgebra::norm_inf( beg[i] ) );
+ return init;
+ }
+
+};
+
+
+}
+}
+}
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp b/3party/boost/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp
new file mode 100644
index 0000000000..f5668e4d0b
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp
@@ -0,0 +1,276 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp
+
+ [begin_description]
+ Range algebra for OpenMP.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_RANGE_ALGEBRA_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_RANGE_ALGEBRA_HPP_INCLUDED
+
+#include <boost/assert.hpp>
+#include <boost/range.hpp>
+#include <boost/numeric/odeint/algebra/norm_result_type.hpp>
+#include <boost/numeric/odeint/util/n_ary_helper.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+/** \brief OpenMP-parallelized range algebra.
+ *
+ * State must be a model of Random Access Range.
+ */
+struct openmp_range_algebra
+{
+
+#if __cplusplus >= 201103L // C++11 supports _Pragma
+
+#define BOOST_ODEINT_GEN_LOCAL(z, n, unused) \
+ BOOST_ASSERT_MSG( len == boost::size(s ## n), "All state ranges must have the same size." ); \
+ typename boost::range_iterator<S ## n>::type beg ## n = boost::begin(s ## n);
+#define BOOST_ODEINT_GEN_BODY(n) \
+ const size_t len = boost::size(s0); \
+ BOOST_PP_REPEAT(n, BOOST_ODEINT_GEN_LOCAL, ~) \
+ _Pragma("omp parallel for schedule(runtime)") \
+ for( size_t i = 0 ; i < len ; i++ ) \
+ op( BOOST_PP_ENUM_BINARY_PARAMS(n, beg, [i] BOOST_PP_INTERCEPT) );
+BOOST_ODEINT_GEN_FOR_EACH(BOOST_ODEINT_GEN_BODY)
+#undef BOOST_ODEINT_GEN_BODY
+#undef BOOST_ODEINT_GEN_LOCAL
+
+#else
+
+ template< class S0 , class Op > static void for_each1 ( S0 &s0 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] );
+ }
+ template< class S0 , class S1 , class Op > static void for_each2 ( S0 &s0 , S1 &s1 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class Op > static void for_each3 ( S0 &s0 , S1 &s1 , S2 &s2 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class Op > static void for_each4 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class Op > static void for_each5 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class Op > static void for_each6 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op > static void for_each7 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class Op > static void for_each8 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class Op > static void for_each9 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class Op > static void for_each10 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class Op > static void for_each11 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class Op > static void for_each12 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class Op > static void for_each13 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class Op > static void for_each14 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
+ typename boost::range_iterator<S13>::type beg13 = boost::begin(s13);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , beg13 [i] );
+ }
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class Op > static void for_each15 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , Op op ) {
+ const size_t len = boost::size(s0);
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
+ typename boost::range_iterator<S13>::type beg13 = boost::begin(s13);
+ typename boost::range_iterator<S14>::type beg14 = boost::begin(s14);
+ #pragma omp parallel for schedule(runtime)
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , beg13 [i] , beg14 [i] );
+ }
+
+#endif
+
+
+ template< class S >
+ static typename norm_result_type< S >::type norm_inf( const S &s )
+ {
+ using std::max;
+ using std::abs;
+ typedef typename norm_result_type< S >::type result_type;
+ result_type init = static_cast< result_type >( 0 );
+ const size_t len = boost::size(s);
+ typename boost::range_iterator<S>::type beg = boost::begin(s);
+# pragma omp parallel for reduction(max: init) schedule(dynamic)
+ for( size_t i = 0 ; i < len ; ++i )
+ init = max( init , abs( beg[i] ) );
+ return init;
+ }
+
+};
+
+
+}
+}
+}
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/external/openmp/openmp_state.hpp b/3party/boost/boost/numeric/odeint/external/openmp/openmp_state.hpp
new file mode 100644
index 0000000000..83bbc19232
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/openmp/openmp_state.hpp
@@ -0,0 +1,171 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/openmp/openmp_state.hpp
+
+ [begin_description]
+ Wrappers for OpenMP.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_STATE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_STATE_HPP_INCLUDED
+
+#include <omp.h>
+#include <vector>
+#include <algorithm>
+#include <boost/range/adaptor/sliced.hpp>
+#include <boost/numeric/odeint/util/copy.hpp>
+#include <boost/numeric/odeint/util/split.hpp>
+#include <boost/numeric/odeint/util/resize.hpp>
+#include <boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+/** \brief A container that is split into distinct parts, for threading.
+ * Just a wrapper for vector<vector<T>>, use `copy` for splitting/joining.
+ */
+template< class T >
+struct openmp_state : public std::vector< std::vector< T > >
+{
+ openmp_state() {}
+
+ openmp_state(size_t n, const std::vector<T>& val = std::vector<T>())
+ : std::vector< std::vector< T > >(n, val) {}
+
+ template<class InputIterator>
+ openmp_state(InputIterator first, InputIterator last)
+ : std::vector< std::vector< T > >(first, last) {}
+
+ openmp_state(const std::vector< std::vector< T > > &orig)
+ : std::vector< std::vector< T > >(orig) {}
+
+};
+
+
+
+
+template< class T >
+struct is_resizeable< openmp_state< T > > : boost::true_type { };
+
+
+template< class T >
+struct same_size_impl< openmp_state< T > , openmp_state< T > >
+{
+ static bool same_size( const openmp_state< T > &x , const openmp_state< T > &y )
+ {
+ if( x.size() != y.size() ) return false;
+ for( size_t i = 0 ; i != x.size() ; i++ )
+ if( x[i].size() != y[i].size() ) return false;
+ return true;
+ }
+};
+
+
+template< class T >
+struct resize_impl< openmp_state< T > , openmp_state< T > >
+{
+ static void resize( openmp_state< T > &x , const openmp_state< T > &y )
+ {
+ x.resize( y.size() );
+# pragma omp parallel for schedule(dynamic)
+ for(size_t i = 0 ; i < x.size() ; i++)
+ x[i].resize( y[i].size() );
+ }
+};
+
+
+/** \brief Copy data between openmp_states of same size. */
+template< class T >
+struct copy_impl< openmp_state< T >, openmp_state< T > >
+{
+ static void copy( const openmp_state< T > &from, openmp_state< T > &to )
+ {
+# pragma omp parallel for schedule(dynamic)
+ for(size_t i = 0 ; i < from.size() ; i++)
+ std::copy( from[i].begin() , from[i].end() , to.begin() );
+ }
+};
+
+
+
+/** \brief Copy data from some container to an openmp_state and resize it.
+ * Target container size will determine number of blocks to split into.
+ * If it is empty, it will be resized to the maximum number of OpenMP threads.
+ * SourceContainer must support `s::value_type`, `s::const_iterator`, `s.begin()`, `s.end()` and `s.size()`,
+ * with Random Access Iterators; i.e. it must be a Random Access Container. */
+template< class SourceContainer >
+struct split_impl< SourceContainer, openmp_state< typename SourceContainer::value_type > >
+{
+ static void split( const SourceContainer &from, openmp_state< typename SourceContainer::value_type > &to )
+ {
+ if(to.size() == 0) to.resize( omp_get_max_threads() );
+ const size_t part = from.size() / to.size();
+# pragma omp parallel for schedule(dynamic)
+ for(size_t i = 0 ; i < to.size() ; i++) {
+ typedef typename SourceContainer::const_iterator it_t;
+ const it_t begin = from.begin() + i * part;
+ it_t end = begin + part;
+ // for cases where from.size() % to.size() > 0
+ if(i + 1 == to.size() || end > from.end()) end = from.end();
+ to[i].resize(end - begin);
+ std::copy(begin, end, to[i].begin());
+ }
+ }
+};
+
+/** \brief Copy data from an openmp_state to some container and resize it.
+ * TargetContainer must support `s::value_type`, `s::iterator`, `s.begin()` and `s.resize(n)`,
+ * i.e. it must be a `std::vector`. */
+template< class TargetContainer >
+struct unsplit_impl< openmp_state< typename TargetContainer::value_type >, TargetContainer >
+{
+ static void unsplit( const openmp_state< typename TargetContainer::value_type > &from , TargetContainer &to )
+ {
+ // resize target
+ size_t total_size = 0;
+ for(size_t i = 0 ; i < from.size() ; i++)
+ total_size += from[i].size();
+ to.resize( total_size );
+ // copy parts
+ typename TargetContainer::iterator out = to.begin();
+ for(size_t i = 0 ; i < from.size() ; i++)
+ out = std::copy(from[i].begin(), from[i].end(), out);
+ }
+};
+
+
+
+
+/** \brief OpenMP-parallelized algebra.
+ * For use with openmp_state.
+ */
+typedef openmp_nested_algebra< range_algebra > openmp_algebra;
+
+
+
+/** \brief Use `openmp_algebra` for `openmp_state`. */
+template< class T >
+struct algebra_dispatcher< openmp_state< T > >
+{
+ typedef openmp_algebra algebra_type;
+};
+
+
+}
+}
+}
+
+
+#endif
+
diff --git a/3party/boost/boost/numeric/odeint/external/thrust/thrust.hpp b/3party/boost/boost/numeric/odeint/external/thrust/thrust.hpp
new file mode 100644
index 0000000000..5c4987cfbb
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/thrust/thrust.hpp
@@ -0,0 +1,27 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/thrust/thrust.hpp
+
+ [begin_description]
+ includes all headers required for using odeint with thrust
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_THRUST_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_HPP_DEFINED
+
+#include <boost/numeric/odeint/external/thrust/thrust_algebra.hpp>
+#include <boost/numeric/odeint/external/thrust/thrust_operations.hpp>
+#include <boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp>
+#include <boost/numeric/odeint/external/thrust/thrust_resize.hpp>
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/thrust/thrust_algebra.hpp b/3party/boost/boost/numeric/odeint/external/thrust/thrust_algebra.hpp
index 0f6b59394c..f33e86296f 100644
--- a/3party/boost/boost/numeric/odeint/external/thrust/thrust_algebra.hpp
+++ b/3party/boost/boost/numeric/odeint/external/thrust/thrust_algebra.hpp
@@ -6,8 +6,9 @@
An algebra for thrusts device_vectors.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Mario Mulansky
+ Copyright 2010-2011 Karsten Ahnert
+ Copyright 2013 Kyle Lutz
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -29,6 +30,25 @@ namespace boost {
namespace numeric {
namespace odeint {
+namespace detail {
+
+ // to use in thrust::reduce
+ template< class Value >
+ struct maximum
+ {
+ template< class Fac1 , class Fac2 >
+ __host__ __device__
+ Value operator()( const Fac1 t1 , const Fac2 t2 ) const
+ {
+ return ( abs( t1 ) < abs( t2 ) ) ? t2 : t1 ;
+ }
+
+ typedef Value result_type;
+ };
+
+}
+
+
/** ToDO extend until for_each14 for rk78 */
@@ -44,7 +64,7 @@ struct thrust_algebra
template< class StateType , class Operation >
static void for_each1( StateType &s , Operation op )
{
- thrust::for_each( boost::begin(s) , boost::begin(s) , op );
+ thrust::for_each( boost::begin(s) , boost::end(s) , op );
}
template< class StateType1 , class StateType2 , class Operation >
@@ -176,16 +196,15 @@ struct thrust_algebra
op);
}
-
- template< class Value , class S , class Red >
- Value reduce( const S &s , Red red , Value init)
+ template< class S >
+ static typename S::value_type norm_inf( const S &s )
{
- return thrust::reduce( boost::begin( s ) , boost::end( s ) , init , red );
+ typedef typename S::value_type value_type;
+ return thrust::reduce( boost::begin( s ) , boost::end( s ) ,
+ static_cast<value_type>(0) ,
+ detail::maximum<value_type>() );
}
-
-
-
};
diff --git a/3party/boost/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp b/3party/boost/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp
new file mode 100644
index 0000000000..5deba2cb57
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp
@@ -0,0 +1,52 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp
+
+ [begin_description]
+ algebra_dispatcher specialization for thrust
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_ALGEBRA_DISPATCHER_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_ALGEBRA_DISPATCHER_HPP_DEFINED
+
+#include <thrust/host_vector.h>
+#include <thrust/device_vector.h>
+
+#include <boost/numeric/odeint/external/thrust/thrust_algebra.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+// specialization for thrust host_vector
+template< class T , class A >
+struct algebra_dispatcher< thrust::host_vector< T , A > >
+{
+ typedef thrust_algebra algebra_type;
+};
+
+// specialization for thrust device_vector
+template< class T , class A >
+struct algebra_dispatcher< thrust::device_vector< T , A > >
+{
+ typedef thrust_algebra algebra_type;
+};
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_ALGEBRA_DISPATCHER_HPP_DEFINED
+
diff --git a/3party/boost/boost/numeric/odeint/external/thrust/thrust_operations.hpp b/3party/boost/boost/numeric/odeint/external/thrust/thrust_operations.hpp
index 710657ae3d..ce2d372925 100644
--- a/3party/boost/boost/numeric/odeint/external/thrust/thrust_operations.hpp
+++ b/3party/boost/boost/numeric/odeint/external/thrust/thrust_operations.hpp
@@ -6,8 +6,8 @@
Operations of thrust zipped iterators. Is the counterpart of the thrust_algebra.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Mario Mulansky
+ Copyright 2010-2012 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -223,25 +223,6 @@ struct thrust_operations
};
- /*
- * for usage in reduce
- */
-
- template< class Value >
- struct maximum
- {
- template< class Fac1 , class Fac2 >
- __host__ __device__
- Value operator()( const Fac1 t1 , const Fac2 t2 ) const
- {
- using std::max;
- return ( abs( t1 ) < abs( t2 ) ) ? t2 : t1 ;
- }
-
- typedef Value result_type;
- };
-
-
};
} // odeint
diff --git a/3party/boost/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp b/3party/boost/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp
new file mode 100644
index 0000000000..0105a4e344
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp
@@ -0,0 +1,52 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp
+
+ [begin_description]
+ operations_dispatcher specialization for thrust
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_OPERATIONS_DISPATCHER_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_OPERATIONS_DISPATCHER_HPP_DEFINED
+
+#include <thrust/host_vector.h>
+#include <thrust/device_vector.h>
+
+#include <boost/numeric/odeint/external/thrust/thrust_operations.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+// specialization for thrust host_vector
+template< class T , class A >
+struct operations_dispatcher< thrust::host_vector< T , A > >
+{
+ typedef thrust_operations operations_type;
+};
+
+// specialization for thrust device_vector
+template< class T , class A >
+struct operations_dispatcher< thrust::device_vector< T , A > >
+{
+ typedef thrust_operations operations_type;
+};
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_ALGEBRA_DISPATCHER_HPP_DEFINED
+
diff --git a/3party/boost/boost/numeric/odeint/external/thrust/thrust_resize.hpp b/3party/boost/boost/numeric/odeint/external/thrust/thrust_resize.hpp
index 843a100314..8f1b181e25 100644
--- a/3party/boost/boost/numeric/odeint/external/thrust/thrust_resize.hpp
+++ b/3party/boost/boost/numeric/odeint/external/thrust/thrust_resize.hpp
@@ -6,8 +6,8 @@
Enable resizing for thrusts device and host_vector.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2012 Mario Mulansky
+ Copyright 2010-2011 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/external/vexcl/vexcl.hpp b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl.hpp
new file mode 100644
index 0000000000..0a99e27c8a
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl.hpp
@@ -0,0 +1,28 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/vexcl/vexcl.hpp
+
+ [begin_description]
+ includes all headers required for using vexcl in odeint
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_HPP_DEFINED
+
+#include <boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/external/vexcl/vexcl_resize.hpp>
+#include <boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp>
+#include <boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp>
+#include <boost/numeric/odeint/external/vexcl/vexcl_abs.hpp>
+#include <boost/numeric/odeint/external/vexcl/vexcl_copy.hpp>
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp
new file mode 100644
index 0000000000..c5e5c73329
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp
@@ -0,0 +1,61 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/vexcl/vexcl_abs.hpp
+
+ [begin_description]
+ abs() specialization for vexcl
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_ABS_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_ABS_HPP_DEFINED
+
+#include <vexcl/vector.hpp>
+#include <vexcl/multivector.hpp>
+#include <vexcl/operations.hpp>
+
+namespace vex {
+
+template <typename T, size_t N>
+typename std::enable_if<
+ std::is_integral<T>::value,
+ typename boost::proto::result_of::make_expr<
+ boost::proto::tag::function,
+ abs_func,
+ const vex::multivector<T, N>&
+ >::type const
+>::type
+abs(const multivector<T, N> &arg) {
+ return boost::proto::make_expr<boost::proto::tag::function>(
+ abs_func(),
+ boost::ref(arg)
+ );
+}
+
+template <typename T, size_t N>
+typename std::enable_if<
+ !std::is_integral<T>::value,
+ typename boost::proto::result_of::make_expr<
+ boost::proto::tag::function,
+ fabs_func,
+ const vex::multivector<T, N>&
+ >::type const
+>::type
+abs(const multivector<T, N> &arg) {
+ return boost::proto::make_expr<boost::proto::tag::function>(
+ fabs_func(),
+ boost::ref(arg)
+ );
+}
+
+} // namespace vex
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_ABS_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp
new file mode 100644
index 0000000000..95111376de
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp
@@ -0,0 +1,51 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp
+
+ [begin_description]
+ algebra_dispatcher specialization for vexcl
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_ALGEBRA_DISPATCHER_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_ALGEBRA_DISPATCHER_HPP_DEFINED
+
+#include <vexcl/vector.hpp>
+#include <vexcl/multivector.hpp>
+
+#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+// specialization for vexcl vector
+template< typename T >
+struct algebra_dispatcher< vex::vector< T > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+// specialization for vexcl multivector
+template< typename T , size_t N >
+struct algebra_dispatcher< vex::multivector< T , N > >
+{
+ typedef vector_space_algebra algebra_type;
+};
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_ALGEBRA_DISPATCHER_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp
new file mode 100644
index 0000000000..6a5afac9fa
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp
@@ -0,0 +1,55 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/vexcl/vexcl_copy.hpp
+
+ [begin_description]
+ copy_impl specializations for vexcl
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_COPY_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_COPY_HPP_INCLUDED
+
+#include <vexcl/vector.hpp>
+#include <vexcl/multivector.hpp>
+
+#include <boost/numeric/odeint/util/copy.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template< typename T1, typename T2 >
+struct copy_impl< vex::vector<T1>, vex::vector<T2> >
+{
+ static void copy( const vex::vector<T1> &from , vex::vector<T2> &to )
+ {
+ to = from;
+ }
+};
+
+template< typename T1, typename T2, size_t N >
+struct copy_impl< vex::multivector<T1, N>, vex::multivector<T2, N> >
+{
+ static void copy( const vex::multivector<T1, N> &from , vex::multivector<T2, N> &to )
+ {
+ to = from;
+ }
+};
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_COPY_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp
new file mode 100644
index 0000000000..a0a62afc04
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp
@@ -0,0 +1,68 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp
+
+ [begin_description]
+ vector_space_norm_inf specialization for vexcl
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_NORM_INF_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_NORM_INF_HPP_DEFINED
+
+#include <map>
+#include <algorithm>
+
+#include <vexcl/vector.hpp>
+#include <vexcl/multivector.hpp>
+#include <vexcl/reductor.hpp>
+
+#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+// specialization for vexcl vector
+template <typename T>
+struct vector_space_norm_inf< vex::vector<T> > {
+ typedef T result_type;
+
+ T operator()( const vex::vector<T> &x ) const {
+ const auto &max = vex::get_reductor<T, vex::MAX>(x.queue_list());
+
+ return max( fabs(x) );
+ }
+};
+
+// specialization for vexcl multivector
+template <typename T, size_t N>
+struct vector_space_norm_inf< vex::multivector<T, N> > {
+ typedef T result_type;
+
+ T operator()( const vex::multivector<T, N> &x ) const {
+ const auto &max = vex::get_reductor<T, vex::MAX>(x.queue_list());
+
+ // Reducing a multivector results in std::array<T, N>:
+ auto m = max( fabs(x) );
+
+ // We will need to reduce it even further:
+ return *std::max_element(m.begin(), m.end());
+ }
+};
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_NORM_INF_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp
index 990a0ea24e..2d6291edfe 100644
--- a/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp
+++ b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp
@@ -6,8 +6,9 @@
Enable resizing for vexcl vector and multivector.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2012 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
+ Copyright 2012 Denis Demidov
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -19,6 +20,7 @@
#define BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_RESIZE_HPP_INCLUDED
#include <vexcl/vector.hpp>
+#include <vexcl/multivector.hpp>
#include <boost/numeric/odeint/util/is_resizeable.hpp>
#include <boost/numeric/odeint/util/resize.hpp>
@@ -61,10 +63,10 @@ struct same_size_impl< vex::vector< T > , vex::vector< T > >
/*
* specializations for vex::multivector< T >
*/
-template< typename T , uint N >
+template< typename T , size_t N >
struct is_resizeable< vex::multivector< T , N > > : boost::true_type { };
-template< typename T , uint N >
+template< typename T , size_t N >
struct resize_impl< vex::multivector< T , N > , vex::multivector< T , N > >
{
static void resize( vex::multivector< T , N > &x1 , const vex::multivector< T , N > &x2 )
@@ -73,7 +75,7 @@ struct resize_impl< vex::multivector< T , N > , vex::multivector< T , N > >
}
};
-template< typename T , uint N >
+template< typename T , size_t N >
struct same_size_impl< vex::multivector< T , N > , vex::multivector< T , N > >
{
static bool same_size( const vex::multivector< T , N > &x1 , const vex::multivector< T , N > &x2 )
diff --git a/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp
new file mode 100644
index 0000000000..f5a7378cd8
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp
@@ -0,0 +1,58 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp
+
+ [begin_description]
+ Check if two VexCL containers are the same instance.
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_SAME_INSTANCE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_SAME_INSTANCE_HPP_INCLUDED
+
+#include <vexcl/vector.hpp>
+#include <vexcl/multivector.hpp>
+
+#include <boost/numeric/odeint/util/same_instance.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template <typename T>
+struct same_instance_impl< vex::vector<T> , vex::vector<T> >
+{
+ static bool same_instance( const vex::vector<T> &x1 , const vex::vector<T> &x2 )
+ {
+ return
+ static_cast<const vex::vector<T>*>(&x1) ==
+ static_cast<const vex::vector<T>*>(&x2);
+ }
+};
+
+template <typename T, size_t N>
+struct same_instance_impl< vex::multivector<T, N> , vex::multivector<T, N> >
+{
+ static bool same_instance( const vex::multivector<T, N> &x1 , const vex::multivector<T, N> &x2 )
+ {
+ return
+ static_cast<const vex::multivector<T, N>*>(&x1) ==
+ static_cast<const vex::multivector<T, N>*>(&x2);
+ }
+};
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_SAME_INSTANCE_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp b/3party/boost/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp
index d621b35eab..662c36a1ed 100644
--- a/3party/boost/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp
+++ b/3party/boost/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp
@@ -6,8 +6,9 @@
ViennaCL operations.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2012 Denis Demidov
+ Copyright 2012 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -19,14 +20,17 @@
#define BOOST_NUMERIC_ODEINT_EXTERNAL_VIENNACL_VIENNACL_OPERATIONS_HPP_INCLUDED
#include <viennacl/vector.hpp>
-#include <viennacl/generator/custom_operation.hpp>
+
+#ifdef VIENNACL_WITH_OPENCL
+# include <viennacl/generator/custom_operation.hpp>
+#endif
namespace boost {
namespace numeric {
namespace odeint {
-
+#ifdef VIENNACL_WITH_OPENCL
struct viennacl_operations
{
@@ -56,15 +60,11 @@ struct viennacl_operations
static generator::custom_operation op(
sym_v1 = sym_a1 * sym_v2
- + sym_a2 * sym_v3
+ + sym_a2 * sym_v3,
+ "scale_sum2"
);
- ocl::enqueue( op(v1,
- const_cast< viennacl::vector<T2>& >(v2),
- const_cast< viennacl::vector<T3>& >(v3),
- const_cast< Fac1& >(m_alpha1),
- const_cast< Fac2& >(m_alpha2)
- ) );
+ ocl::enqueue( op(v1, v2, v3, m_alpha1, m_alpha2) );
}
typedef void result_type;
@@ -102,17 +102,11 @@ struct viennacl_operations
static generator::custom_operation op(
sym_v1 = sym_a1 * sym_v2
+ sym_a2 * sym_v3
- + sym_a3 * sym_v4
+ + sym_a3 * sym_v4,
+ "scale_sum3"
);
- ocl::enqueue( op(v1,
- const_cast< viennacl::vector<T2>& >(v2),
- const_cast< viennacl::vector<T3>& >(v3),
- const_cast< viennacl::vector<T4>& >(v4),
- const_cast< Fac1& >(m_alpha1),
- const_cast< Fac2& >(m_alpha2),
- const_cast< Fac3& >(m_alpha3)
- ) );
+ ocl::enqueue( op(v1, v2, v3, v4, m_alpha1, m_alpha2, m_alpha3) );
}
typedef void result_type;
@@ -154,19 +148,12 @@ struct viennacl_operations
sym_v1 = sym_a1 * sym_v2
+ sym_a2 * sym_v3
+ sym_a3 * sym_v4
- + sym_a4 * sym_v5
+ + sym_a4 * sym_v5,
+ "scale_sum4"
);
- ocl::enqueue( op(v1,
- const_cast< viennacl::vector<T2>& >(v2),
- const_cast< viennacl::vector<T3>& >(v3),
- const_cast< viennacl::vector<T4>& >(v4),
- const_cast< viennacl::vector<T5>& >(v5),
- const_cast< Fac1& >(m_alpha1),
- const_cast< Fac2& >(m_alpha2),
- const_cast< Fac3& >(m_alpha3),
- const_cast< Fac4& >(m_alpha4)
- ) );
+ ocl::enqueue( op(v1, v2, v3, v4, v5,
+ m_alpha1, m_alpha2, m_alpha3, m_alpha4) );
}
typedef void result_type;
@@ -213,21 +200,12 @@ struct viennacl_operations
+ sym_a2 * sym_v3
+ sym_a3 * sym_v4
+ sym_a4 * sym_v5
- + sym_a5 * sym_v6
+ + sym_a5 * sym_v6,
+ "scale_sum5"
);
- ocl::enqueue( op(v1,
- const_cast< viennacl::vector<T2>& >(v2),
- const_cast< viennacl::vector<T3>& >(v3),
- const_cast< viennacl::vector<T4>& >(v4),
- const_cast< viennacl::vector<T5>& >(v5),
- const_cast< viennacl::vector<T6>& >(v6),
- const_cast< Fac1& >(m_alpha1),
- const_cast< Fac2& >(m_alpha2),
- const_cast< Fac3& >(m_alpha3),
- const_cast< Fac4& >(m_alpha4),
- const_cast< Fac5& >(m_alpha5)
- ) );
+ ocl::enqueue( op(v1, v2, v3, v4, v5, v6,
+ m_alpha1, m_alpha2, m_alpha3, m_alpha4, m_alpha5) );
}
typedef void result_type;
@@ -235,6 +213,9 @@ struct viennacl_operations
};
+#else
+struct viennacl_operations : public default_operations {};
+#endif
} // odeint
diff --git a/3party/boost/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp b/3party/boost/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp
index 677cfce812..d3240705be 100644
--- a/3party/boost/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp
+++ b/3party/boost/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp
@@ -6,8 +6,9 @@
Enable resizing for viennacl vector.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2012 Denis Demidov
+ Copyright 2012 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/integrate/detail/functors.hpp b/3party/boost/boost/numeric/odeint/integrate/detail/functors.hpp
new file mode 100644
index 0000000000..b239217ac4
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/integrate/detail/functors.hpp
@@ -0,0 +1,70 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/detail/functors.hpp
+
+ [begin_description]
+ some functors for the iterator based integrate routines
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_DETAIL_FUNCTORS_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_FUNCTORS_HPP_INCLUDED
+
+#include <utility>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+
+template< class Observer >
+struct obs_caller {
+
+ size_t &m_n;
+ Observer m_obs;
+
+ obs_caller( size_t &m , Observer &obs ) : m_n(m) , m_obs( obs ) {}
+
+ template< class State , class Time >
+ void operator()( std::pair< const State & , const Time & > x )
+ {
+ typedef typename odeint::unwrap_reference< Observer >::type observer_type;
+ observer_type &obs = m_obs;
+ obs( x.first , x.second );
+ m_n++;
+ }
+};
+
+template< class Observer , class Time >
+struct obs_caller_time {
+
+ Time &m_t;
+ Observer m_obs;
+
+ obs_caller_time( Time &t , Observer &obs ) : m_t(t) , m_obs( obs ) {}
+
+ template< class State >
+ void operator()( std::pair< const State & , const Time & > x )
+ {
+ typedef typename odeint::unwrap_reference< Observer >::type observer_type;
+ observer_type &obs = m_obs;
+ obs( x.first , x.second );
+ m_t = x.second;
+ }
+};
+
+} // namespace detail
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_FUNCTORS_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp b/3party/boost/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp
index 9905125a8d..15338ecd32 100644
--- a/3party/boost/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp
@@ -6,8 +6,9 @@
Default Integrate adaptive implementation.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -20,9 +21,11 @@
#include <stdexcept>
+#include <boost/throw_exception.hpp>
+
#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
-#include <boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp>
+#include <boost/numeric/odeint/integrate/detail/integrate_const.hpp>
#include <boost/numeric/odeint/util/bind.hpp>
#include <boost/numeric/odeint/util/unwrap_reference.hpp>
#include <boost/numeric/odeint/util/copy.hpp>
@@ -39,9 +42,9 @@ namespace detail {
// forward declaration
template< class Stepper , class System , class State , class Time , class Observer>
-Time integrate_n_steps(
+size_t integrate_const(
Stepper stepper , System system , State &start_state ,
- Time start_time , Time dt , size_t num_of_steps ,
+ Time start_time , Time end_time , Time dt ,
Observer observer , stepper_tag );
/*
@@ -54,14 +57,16 @@ size_t integrate_adaptive(
Observer observer , stepper_tag
)
{
- size_t steps = static_cast< size_t >( (end_time-start_time)/dt );
- Time end = detail::integrate_n_steps( stepper , system , start_state , start_time ,
- dt , steps , observer , stepper_tag() );
+ size_t steps = detail::integrate_const( stepper , system , start_state , start_time ,
+ end_time , dt , observer , stepper_tag() );
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
+
+ Time end = start_time + dt*steps;
if( less_with_sign( end , end_time , dt ) )
{ //make a last step to end exactly at end_time
- stepper.do_step( system , start_state , end , end_time - end );
+ st.do_step( system , start_state , end , end_time - end );
steps++;
- typename odeint::unwrap_reference< Observer >::type &obs = observer;
obs( start_state , end_time );
}
return steps;
@@ -79,6 +84,7 @@ size_t integrate_adaptive(
)
{
typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
const size_t max_attempts = 1000;
const char *error_string = "Integrate adaptive : Maximal number of iterations reached. A step size could not be found.";
@@ -86,7 +92,7 @@ size_t integrate_adaptive(
while( less_with_sign( start_time , end_time , dt ) )
{
obs( start_state , start_time );
- if( less_with_sign( end_time , start_time + dt , dt ) )
+ if( less_with_sign( end_time , static_cast<Time>(start_time + dt) , dt ) )
{
dt = end_time - start_time;
}
@@ -95,11 +101,11 @@ size_t integrate_adaptive(
controlled_step_result res = success;
do
{
- res = stepper.try_step( system , start_state , start_time , dt );
+ res = st.try_step( system , start_state , start_time , dt );
++trials;
}
while( ( res == fail ) && ( trials < max_attempts ) );
- if( trials == max_attempts ) throw std::overflow_error( error_string );
+ if( trials == max_attempts ) BOOST_THROW_EXCEPTION( std::overflow_error( error_string ) );
++count;
}
@@ -120,25 +126,27 @@ size_t integrate_adaptive(
Observer observer , dense_output_stepper_tag )
{
typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
size_t count = 0;
- stepper.initialize( start_state , start_time , dt );
+ st.initialize( start_state , start_time , dt );
- while( less_with_sign( stepper.current_time() , end_time , stepper.current_time_step() ) )
+ while( less_with_sign( st.current_time() , end_time , st.current_time_step() ) )
{
- while( less_eq_with_sign( stepper.current_time() + stepper.current_time_step() ,
+ while( less_eq_with_sign( static_cast<Time>(st.current_time() + st.current_time_step()) ,
end_time ,
- stepper.current_time_step() ) )
+ st.current_time_step() ) )
{ //make sure we don't go beyond the end_time
- obs( stepper.current_state() , stepper.current_time() );
- stepper.do_step( system );
+ obs( st.current_state() , st.current_time() );
+ st.do_step( system );
++count;
}
- stepper.initialize( stepper.current_state() , stepper.current_time() , end_time - stepper.current_time() );
+ // calculate time step to arrive exactly at end time
+ st.initialize( st.current_state() , st.current_time() , static_cast<Time>(end_time - st.current_time()) );
}
- obs( stepper.current_state() , stepper.current_time() );
+ obs( st.current_state() , st.current_time() );
// overwrite start_state with the final point
- boost::numeric::odeint::copy( stepper.current_state() , start_state );
+ boost::numeric::odeint::copy( st.current_state() , start_state );
return count;
}
diff --git a/3party/boost/boost/numeric/odeint/integrate/detail/integrate_const.hpp b/3party/boost/boost/numeric/odeint/integrate/detail/integrate_const.hpp
index 2eb7ae0a3f..312564ff16 100644
--- a/3party/boost/boost/numeric/odeint/integrate/detail/integrate_const.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/detail/integrate_const.hpp
@@ -6,8 +6,9 @@
integrate const implementation
[end_description]
- Copyright 2009-2012 Karsten Ahnert
- Copyright 2009-2012 Mario Mulansky
+ Copyright 2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
+ Copyright 2012 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -46,14 +47,15 @@ size_t integrate_const(
)
{
typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
Time time = start_time;
int step = 0;
-
- while( less_eq_with_sign( time+dt , end_time , dt ) )
+ // cast time+dt explicitely in case of expression templates (e.g. multiprecision)
+ while( less_eq_with_sign( static_cast<Time>(time+dt) , end_time , dt ) )
{
obs( start_state , time );
- stepper.do_step( system , start_state , time , dt );
+ st.do_step( system , start_state , time , dt );
// direct computation of the time avoids error propagation happening when using time += dt
// we need clumsy type analysis to get boost units working here
++step;
@@ -77,21 +79,22 @@ size_t integrate_const(
Time time = start_time;
const Time time_step = dt;
+ int real_steps = 0;
int step = 0;
- while( less_eq_with_sign( time+time_step , end_time , dt ) )
+ while( less_eq_with_sign( static_cast<Time>(time+time_step) , end_time , dt ) )
{
obs( start_state , time );
- detail::integrate_adaptive( stepper , system , start_state , time , time+time_step , dt ,
+ real_steps += detail::integrate_adaptive( stepper , system , start_state , time , time+time_step , dt ,
null_observer() , controlled_stepper_tag() );
// direct computation of the time avoids error propagation happening when using time += dt
// we need clumsy type analysis to get boost units working here
- ++step;
+ step++;
time = start_time + static_cast< typename unit_value_type<Time>::type >(step) * time_step;
}
obs( start_state , time );
-
- return step;
+
+ return real_steps;
}
@@ -103,21 +106,22 @@ size_t integrate_const(
)
{
typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
Time time = start_time;
- stepper.initialize( start_state , time , dt );
+ st.initialize( start_state , time , dt );
obs( start_state , time );
time += dt;
int obs_step( 1 );
int real_step( 0 );
- while( less_with_sign( time+dt , end_time , dt ) )
+ while( less_with_sign( static_cast<Time>(time+dt) , end_time , dt ) )
{
- while( less_eq_with_sign( time , stepper.current_time() , dt ) )
+ while( less_eq_with_sign( time , st.current_time() , dt ) )
{
- stepper.calc_state( time , start_state );
+ st.calc_state( time , start_state );
obs( start_state , time );
++obs_step;
// direct computation of the time avoids error propagation happening when using time += dt
@@ -125,20 +129,20 @@ size_t integrate_const(
time = start_time + static_cast< typename unit_value_type<Time>::type >(obs_step) * dt;
}
// we have not reached the end, do another real step
- if( less_with_sign( stepper.current_time()+stepper.current_time_step() ,
+ if( less_with_sign( static_cast<Time>(st.current_time()+st.current_time_step()) ,
end_time ,
- stepper.current_time_step() ) )
+ st.current_time_step() ) )
{
- while( less_eq_with_sign( stepper.current_time() , time , dt ) )
+ while( less_eq_with_sign( st.current_time() , time , dt ) )
{
- stepper.do_step( system );
+ st.do_step( system );
++real_step;
}
}
- else if( less_with_sign( stepper.current_time() , end_time , stepper.current_time_step() ) )
+ else if( less_with_sign( st.current_time() , end_time , st.current_time_step() ) )
{ // do the last step ending exactly on the end point
- stepper.initialize( stepper.current_state() , stepper.current_time() , end_time - stepper.current_time() );
- stepper.do_step( system );
+ st.initialize( st.current_state() , st.current_time() , end_time - st.current_time() );
+ st.do_step( system );
++real_step;
}
@@ -146,7 +150,7 @@ size_t integrate_const(
// last observation, if we are still in observation interval
if( less_eq_with_sign( time , end_time , dt ) )
{
- stepper.calc_state( time , start_state );
+ st.calc_state( time , start_state );
obs( start_state , time );
}
diff --git a/3party/boost/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp b/3party/boost/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp
index 3231095888..3c1d171620 100644
--- a/3party/boost/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp
@@ -6,8 +6,9 @@
integrate steps implementation
[end_description]
- Copyright 2009-2012 Karsten Ahnert
- Copyright 2009-2012 Mario Mulansky
+ Copyright 2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
+ Copyright 2012 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -46,13 +47,14 @@ Time integrate_n_steps(
Observer observer , stepper_tag )
{
typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
Time time = start_time;
for( size_t step = 0; step < num_of_steps ; ++step )
{
obs( start_state , time );
- stepper.do_step( system , start_state , time , dt );
+ st.do_step( system , start_state , time , dt );
// direct computation of the time avoids error propagation happening when using time += dt
// we need clumsy type analysis to get boost units working here
time = start_time + static_cast< typename unit_value_type<Time>::type >( step+1 ) * dt;
@@ -78,7 +80,7 @@ Time integrate_n_steps(
for( size_t step = 0; step < num_of_steps ; ++step )
{
obs( start_state , time );
- detail::integrate_adaptive( stepper , system , start_state , time , time+time_step , dt ,
+ detail::integrate_adaptive( stepper , system , start_state , time , static_cast<Time>(time+time_step) , dt ,
null_observer() , controlled_stepper_tag() );
// direct computation of the time avoids error propagation happening when using time += dt
// we need clumsy type analysis to get boost units working here
@@ -98,19 +100,20 @@ Time integrate_n_steps(
Observer observer , dense_output_stepper_tag )
{
typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
Time time = start_time;
const Time end_time = start_time + static_cast< typename unit_value_type<Time>::type >(num_of_steps) * dt;
- stepper.initialize( start_state , time , dt );
+ st.initialize( start_state , time , dt );
size_t step = 0;
while( step < num_of_steps )
{
- while( less_with_sign( time , stepper.current_time() , stepper.current_time_step() ) )
+ while( less_with_sign( time , st.current_time() , st.current_time_step() ) )
{
- stepper.calc_state( time , start_state );
+ st.calc_state( time , start_state );
obs( start_state , time );
++step;
// direct computation of the time avoids error propagation happening when using time += dt
@@ -119,30 +122,30 @@ Time integrate_n_steps(
}
// we have not reached the end, do another real step
- if( less_with_sign( stepper.current_time()+stepper.current_time_step() ,
+ if( less_with_sign( static_cast<Time>(st.current_time()+st.current_time_step()) ,
end_time ,
- stepper.current_time_step() ) )
+ st.current_time_step() ) )
{
- stepper.do_step( system );
+ st.do_step( system );
}
- else if( less_with_sign( stepper.current_time() , end_time , stepper.current_time_step() ) )
+ else if( less_with_sign( st.current_time() , end_time , st.current_time_step() ) )
{ // do the last step ending exactly on the end point
- stepper.initialize( stepper.current_state() , stepper.current_time() , end_time - stepper.current_time() );
- stepper.do_step( system );
+ st.initialize( st.current_state() , st.current_time() , static_cast<Time>(end_time - st.current_time()) );
+ st.do_step( system );
}
}
- while( stepper.current_time() < end_time )
+ while( st.current_time() < end_time )
{
if( less_with_sign( end_time ,
- stepper.current_time()+stepper.current_time_step() ,
- stepper.current_time_step() ) )
- stepper.initialize( stepper.current_state() , stepper.current_time() , end_time - stepper.current_time() );
- stepper.do_step( system );
+ static_cast<Time>(st.current_time()+st.current_time_step()) ,
+ st.current_time_step() ) )
+ st.initialize( st.current_state() , st.current_time() , static_cast<Time>(end_time - st.current_time()) );
+ st.do_step( system );
}
// observation at end point, only if we ended exactly on the end-point (or above due to finite precision)
- obs( stepper.current_state() , end_time );
+ obs( st.current_state() , end_time );
return time;
}
diff --git a/3party/boost/boost/numeric/odeint/integrate/detail/integrate_times.hpp b/3party/boost/boost/numeric/odeint/integrate/detail/integrate_times.hpp
index e599bb9dd3..ac9b75d8bc 100644
--- a/3party/boost/boost/numeric/odeint/integrate/detail/integrate_times.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/detail/integrate_times.hpp
@@ -6,8 +6,9 @@
Default integrate times implementation.
[end_description]
- Copyright 2009-2012 Karsten Ahnert
- Copyright 2009-2012 Mario Mulansky
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2012 Karsten Ahnert
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -21,6 +22,7 @@
#include <stdexcept>
#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
#include <boost/numeric/odeint/util/unwrap_reference.hpp>
#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
#include <boost/numeric/odeint/util/detail/less_with_sign.hpp>
@@ -43,9 +45,9 @@ size_t integrate_times(
Observer observer , stepper_tag
)
{
- BOOST_USING_STD_MIN();
-
typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
+ typedef typename unit_value_type<Time>::type time_type;
size_t steps = 0;
Time current_dt = dt;
@@ -55,10 +57,10 @@ size_t integrate_times(
obs( start_state , current_time );
if( start_time == end_time )
break;
- while( less_with_sign( current_time , *start_time , current_dt ) )
+ while( less_with_sign( current_time , static_cast<time_type>(*start_time) , current_dt ) )
{
- current_dt = min BOOST_PREVENT_MACRO_SUBSTITUTION ( dt , *start_time - current_time );
- stepper.do_step( system , start_state , current_time , current_dt );
+ current_dt = min_abs( dt , *start_time - current_time );
+ st.do_step( system , start_state , current_time , current_dt );
current_time += current_dt;
steps++;
}
@@ -76,9 +78,9 @@ size_t integrate_times(
Observer observer , controlled_stepper_tag
)
{
- BOOST_USING_STD_MIN();
-
typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
+ typedef typename unit_value_type<Time>::type time_type;
const size_t max_attempts = 1000;
const char *error_string = "Integrate adaptive : Maximal number of iterations reached. A step size could not be found.";
@@ -90,18 +92,22 @@ size_t integrate_times(
obs( start_state , current_time );
if( start_time == end_time )
break;
- while( less_with_sign( current_time , *start_time , dt ) )
+ while( less_with_sign( current_time , static_cast<time_type>(*start_time) , dt ) )
{
- dt = min BOOST_PREVENT_MACRO_SUBSTITUTION ( dt , *start_time - current_time );
- if( stepper.try_step( system , start_state , current_time , dt ) == success )
+ // adjust stepsize to end up exactly at the observation point
+ Time current_dt = min_abs( dt , *start_time - current_time );
+ if( st.try_step( system , start_state , current_time , current_dt ) == success )
{
++steps;
+ // continue with the original step size if dt was reduced due to observation
+ dt = max_abs( dt , current_dt );
}
else
{
++fail_steps;
+ dt = current_dt;
}
- if( fail_steps == max_attempts ) throw std::overflow_error( error_string );
+ if( fail_steps == max_attempts ) BOOST_THROW_EXCEPTION( std::overflow_error( error_string ));
}
}
return steps;
@@ -118,38 +124,39 @@ size_t integrate_times(
)
{
typename odeint::unwrap_reference< Observer >::type &obs = observer;
-
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
+ typedef typename unit_value_type<Time>::type time_type;
if( start_time == end_time )
return 0;
- Time last_time_point = *(end_time-1);
+ Time last_time_point = static_cast<time_type>(*(end_time-1));
- stepper.initialize( start_state , *start_time , dt );
+ st.initialize( start_state , *start_time , dt );
obs( start_state , *start_time++ );
size_t count = 0;
while( start_time != end_time )
{
- while( ( start_time != end_time ) && less_eq_with_sign( *start_time , stepper.current_time() , stepper.current_time_step() ) )
+ while( ( start_time != end_time ) && less_eq_with_sign( static_cast<time_type>(*start_time) , st.current_time() , st.current_time_step() ) )
{
- stepper.calc_state( *start_time , start_state );
+ st.calc_state( *start_time , start_state );
obs( start_state , *start_time );
start_time++;
}
// we have not reached the end, do another real step
- if( less_eq_with_sign( stepper.current_time() + stepper.current_time_step() ,
+ if( less_eq_with_sign( st.current_time() + st.current_time_step() ,
last_time_point ,
- stepper.current_time_step() ) )
+ st.current_time_step() ) )
{
- stepper.do_step( system );
+ st.do_step( system );
++count;
}
else if( start_time != end_time )
{ // do the last step ending exactly on the end point
- stepper.initialize( stepper.current_state() , stepper.current_time() , last_time_point - stepper.current_time() );
- stepper.do_step( system );
+ st.initialize( st.current_state() , st.current_time() , last_time_point - st.current_time() );
+ st.do_step( system );
++count;
}
}
diff --git a/3party/boost/boost/numeric/odeint/integrate/integrate.hpp b/3party/boost/boost/numeric/odeint/integrate/integrate.hpp
index 17b1405f6d..6cb96c0f1e 100644
--- a/3party/boost/boost/numeric/odeint/integrate/integrate.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/integrate.hpp
@@ -6,8 +6,8 @@
Convenience methods which choose the stepper for the current ODE.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -18,11 +18,15 @@
#ifndef BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_HPP_INCLUDED
#define BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_HPP_INCLUDED
+#include <boost/utility/enable_if.hpp>
+
#include <boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp>
#include <boost/numeric/odeint/stepper/controlled_runge_kutta.hpp>
#include <boost/numeric/odeint/integrate/null_observer.hpp>
#include <boost/numeric/odeint/integrate/integrate_adaptive.hpp>
+// for has_value_type trait
+#include <boost/numeric/odeint/algebra/detail/extract_value_type.hpp>
namespace boost {
@@ -37,9 +41,11 @@ namespace odeint {
*
*/
template< class System , class State , class Time , class Observer >
-size_t integrate( System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer )
+typename boost::enable_if< typename has_value_type<State>::type , size_t >::type
+integrate( System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer )
{
- return integrate_adaptive( controlled_runge_kutta< runge_kutta_dopri5< State > >() , system , start_state , start_time , end_time , dt , observer );
+ typedef controlled_runge_kutta< runge_kutta_dopri5< State , typename State::value_type , State , Time > > stepper_type;
+ return integrate_adaptive( stepper_type() , system , start_state , start_time , end_time , dt , observer );
}
diff --git a/3party/boost/boost/numeric/odeint/integrate/integrate_adaptive.hpp b/3party/boost/boost/numeric/odeint/integrate/integrate_adaptive.hpp
index cfec6521ef..12bdc8237d 100644
--- a/3party/boost/boost/numeric/odeint/integrate/integrate_adaptive.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/integrate_adaptive.hpp
@@ -6,8 +6,8 @@
Adaptive integration of ODEs.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -38,10 +38,11 @@ size_t integrate_adaptive(
Time start_time , Time end_time , Time dt ,
Observer observer )
{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
return detail::integrate_adaptive(
stepper , system , start_state ,
start_time , end_time , dt ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
/*
* Suggestion for a new extendable version:
@@ -61,10 +62,11 @@ size_t integrate_adaptive(
Time start_time , Time end_time , Time dt ,
Observer observer )
{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
return detail::integrate_adaptive(
stepper , system , start_state ,
start_time , end_time , dt ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
}
diff --git a/3party/boost/boost/numeric/odeint/integrate/integrate_const.hpp b/3party/boost/boost/numeric/odeint/integrate/integrate_const.hpp
index 64a58fa702..ba2d891e97 100644
--- a/3party/boost/boost/numeric/odeint/integrate/integrate_const.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/integrate_const.hpp
@@ -7,8 +7,8 @@
The routines makes full use of adaptive and dense-output methods.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -44,19 +44,20 @@ size_t integrate_const(
Observer observer
)
{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
// we want to get as fast as possible to the end
if( boost::is_same< null_observer , Observer >::value )
{
return detail::integrate_adaptive(
stepper , system , start_state ,
start_time , end_time , dt ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
}
else
{
return detail::integrate_const( stepper , system , start_state ,
start_time , end_time , dt ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
}
}
@@ -71,19 +72,20 @@ size_t integrate_const(
Observer observer
)
{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
// we want to get as fast as possible to the end
if( boost::is_same< null_observer , Observer >::value )
{
return detail::integrate_adaptive(
stepper , system , start_state ,
start_time , end_time , dt ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
}
else
{
return detail::integrate_const( stepper , system , start_state ,
start_time , end_time , dt ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
}
}
diff --git a/3party/boost/boost/numeric/odeint/integrate/integrate_n_steps.hpp b/3party/boost/boost/numeric/odeint/integrate/integrate_n_steps.hpp
index 9477a69f19..f85c453bd2 100644
--- a/3party/boost/boost/numeric/odeint/integrate/integrate_n_steps.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/integrate_n_steps.hpp
@@ -6,8 +6,8 @@
Integration of n steps with constant time size. Adaptive and dense-output methods are fully supported.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -40,11 +40,11 @@ Time integrate_n_steps(
Time start_time , Time dt , size_t num_of_steps ,
Observer observer )
{
-
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
return detail::integrate_n_steps(
stepper , system , start_state ,
start_time , dt , num_of_steps ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
}
/**
@@ -56,10 +56,11 @@ Time integrate_n_steps(
Time start_time , Time dt , size_t num_of_steps ,
Observer observer )
{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
return detail::integrate_n_steps(
stepper , system , start_state ,
start_time , dt , num_of_steps ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
}
diff --git a/3party/boost/boost/numeric/odeint/integrate/integrate_times.hpp b/3party/boost/boost/numeric/odeint/integrate/integrate_times.hpp
index 9b2431aa22..c0ecda6c6d 100644
--- a/3party/boost/boost/numeric/odeint/integrate/integrate_times.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/integrate_times.hpp
@@ -6,8 +6,8 @@
Integration of ODEs with observation at user defined points
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -40,10 +40,11 @@ size_t integrate_times(
TimeIterator times_start , TimeIterator times_end , Time dt ,
Observer observer )
{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
return detail::integrate_times(
stepper , system , start_state ,
times_start , times_end , dt ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
}
/**
@@ -55,10 +56,11 @@ size_t integrate_times(
TimeIterator times_start , TimeIterator times_end , Time dt ,
Observer observer )
{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
return detail::integrate_times(
stepper , system , start_state ,
times_start , times_end , dt ,
- observer , typename Stepper::stepper_category() );
+ observer , stepper_category() );
}
/**
diff --git a/3party/boost/boost/numeric/odeint/integrate/null_observer.hpp b/3party/boost/boost/numeric/odeint/integrate/null_observer.hpp
index 4d9a070a62..82b86b4582 100644
--- a/3party/boost/boost/numeric/odeint/integrate/null_observer.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/null_observer.hpp
@@ -6,8 +6,8 @@
null_observer
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/integrate/observer_collection.hpp b/3party/boost/boost/numeric/odeint/integrate/observer_collection.hpp
index 26101a3afc..f8c9af8e24 100644
--- a/3party/boost/boost/numeric/odeint/integrate/observer_collection.hpp
+++ b/3party/boost/boost/numeric/odeint/integrate/observer_collection.hpp
@@ -6,8 +6,8 @@
Collection of observers, which are all called during the evolution of the ODE.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/iterator/adaptive_iterator.hpp b/3party/boost/boost/numeric/odeint/iterator/adaptive_iterator.hpp
new file mode 100644
index 0000000000..e8313e7690
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/adaptive_iterator.hpp
@@ -0,0 +1,183 @@
+
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/adaptive_iterator.hpp
+
+ [begin_description]
+ Iterator for iterating throught the solution of an ODE with adaptive step size. The dereferenced types containes also the time.
+ [end_description]
+
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_ADAPTIVE_ITERATOR_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_ADAPTIVE_ITERATOR_HPP_INCLUDED
+
+#include <boost/numeric/odeint/util/stepper_traits.hpp>
+#include <boost/numeric/odeint/util/unit_helper.hpp>
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
+#include <boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+ /* use the adaptive_iterator_impl with the right tags */
+ template< class Stepper , class System , class State
+#ifndef DOXYGEN_SKIP
+ , class StepperTag = typename base_tag< typename traits::stepper_category< Stepper >::type >::type
+#endif
+ >
+ class adaptive_iterator : public adaptive_iterator_impl<
+ adaptive_iterator< Stepper , System , State , StepperTag > ,
+ Stepper , System , State , detail::ode_state_iterator_tag , StepperTag
+ >
+ {
+ typedef typename traits::time_type< Stepper >::type time_type;
+ typedef adaptive_iterator< Stepper , System , State , StepperTag > iterator_type;
+
+ public:
+ adaptive_iterator( Stepper stepper , System sys , State &s , time_type t_start , time_type t_end , time_type dt )
+ : adaptive_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_iterator_tag , StepperTag >( stepper , sys , s , t_start , t_end , dt )
+ {}
+
+ adaptive_iterator( Stepper stepper , System sys , State &s )
+ : adaptive_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_iterator_tag , StepperTag >( stepper , sys , s )
+ {}
+ };
+
+
+
+
+ template< class Stepper , class System , class State >
+ adaptive_iterator< Stepper , System , State > make_adaptive_iterator_begin(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return adaptive_iterator< Stepper , System , State >( stepper , system , x , t_start , t_end , dt );
+ }
+
+
+ template< class Stepper , class System , class State >
+ adaptive_iterator< Stepper , System , State > make_adaptive_iterator_end(
+ Stepper stepper ,
+ System system ,
+ State &x )
+ {
+ return adaptive_iterator< Stepper , System , State >( stepper , system , x );
+ }
+
+
+ template< class Stepper , class System , class State >
+ std::pair< adaptive_iterator< Stepper , System , State > , adaptive_iterator< Stepper , System , State > >
+ make_adaptive_range(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return std::make_pair(
+ adaptive_iterator< Stepper , System , State >( stepper , system , x , t_start , t_end , dt ) ,
+ adaptive_iterator< Stepper , System , State >( stepper , system , x )
+ );
+ }
+
+ /**
+ * \class adaptive_iterator
+ *
+ * \brief ODE Iterator with adaptive step size. The value type of this iterator is the state type of the stepper.
+ *
+ * Implements an iterator representing the solution of an ODE from t_start
+ * to t_end evaluated at steps with an adaptive step size dt.
+ * After each iteration the iterator dereferences to the state x at the next
+ * time t+dt where dt is controlled by the stepper.
+ * This iterator can be used with ControlledSteppers and
+ * DenseOutputSteppers and it always makes use of the all the given steppers
+ * capabilities. A for_each over such an iterator range behaves similar to
+ * the integrate_adaptive routine.
+ *
+ * adaptive_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ * \tparam State The state type of the ODE.
+ */
+
+
+
+
+
+
+ /**
+ * \fn make_adaptive_iterator_begin( Stepper stepper , System system , State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function for adaptive_iterator. Constructs a begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state.
+ * \param t_start The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ * \returns The adaptive iterator.
+ */
+
+
+ /**
+ * \fn make_adaptive_iterator_end( Stepper stepper , System system , State &x )
+ * \brief Factory function for adaptive_iterator. Constructs a end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state.
+ * \returns The adaptive iterator.
+ */
+
+
+ /**
+ * \fn make_adaptive_range( Stepper stepper , System system , State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function to construct a single pass range of adaptive iterators. A range is here a pair of adaptive_iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state.
+ * \param t_start The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ * \returns The adaptive range.
+ */
+
+
+
+
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_ADAPTIVE_ITERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp b/3party/boost/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp
new file mode 100644
index 0000000000..f70d34a6f1
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp
@@ -0,0 +1,175 @@
+
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/adaptive_time_iterator.hpp
+
+ [begin_description]
+ Iterator for iterating throught the solution of an ODE with adaptive step size. The dereferenced types containes also the time.
+ [end_description]
+
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_ADAPTIVE_TIME_ITERATOR_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_ADAPTIVE_TIME_ITERATOR_HPP_INCLUDED
+
+
+
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/util/stepper_traits.hpp>
+#include <boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+ /* use the adaptive_iterator_impl with the right tags */
+ template< class Stepper , class System , class State
+#ifndef DOXYGEN_SKIP
+ , class StepperTag = typename base_tag< typename traits::stepper_category< Stepper >::type >::type
+#endif
+ >
+ class adaptive_time_iterator : public adaptive_iterator_impl<
+ adaptive_time_iterator< Stepper , System , State , StepperTag > ,
+ Stepper , System , State , detail::ode_state_time_iterator_tag , StepperTag
+ >
+ {
+ typedef typename traits::time_type< Stepper >::type time_type;
+ typedef adaptive_time_iterator< Stepper , System , State , StepperTag > iterator_type;
+
+ public:
+ adaptive_time_iterator( Stepper stepper , System sys , State &s , time_type t_start , time_type t_end , time_type dt )
+ : adaptive_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_time_iterator_tag , StepperTag >( stepper , sys , s , t_start , t_end , dt )
+ {}
+
+ adaptive_time_iterator( Stepper stepper , System sys , State &s )
+ : adaptive_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_time_iterator_tag , StepperTag >( stepper , sys , s )
+ {}
+ };
+
+
+
+
+ template< class Stepper , class System , class State >
+ adaptive_time_iterator< Stepper , System , State > make_adaptive_time_iterator_begin(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return adaptive_time_iterator< Stepper , System , State >( stepper , system , x , t_start , t_end , dt );
+ }
+
+ template< class Stepper , class System , class State >
+ adaptive_time_iterator< Stepper , System , State > make_adaptive_time_iterator_end(
+ Stepper stepper ,
+ System system ,
+ State &x )
+ {
+ return adaptive_time_iterator< Stepper , System , State >( stepper , system , x );
+ }
+
+
+ template< class Stepper , class System , class State >
+ std::pair< adaptive_time_iterator< Stepper , System , State > , adaptive_time_iterator< Stepper , System , State > >
+ make_adaptive_time_range(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return std::make_pair(
+ adaptive_time_iterator< Stepper , System , State >( stepper , system , x , t_start , t_end , dt ) ,
+ adaptive_time_iterator< Stepper , System , State >( stepper , system , x ) );
+ }
+
+
+
+ /**
+ * \class adaptive_time_iterator
+ *
+ * \brief ODE Iterator with adaptive step size. The value type of this iterator is a std::pair containing state and time.
+ *
+ * Implements an iterator representing the solution of an ODE from t_start
+ * to t_end evaluated at steps with an adaptive step size dt.
+ * After each iteration the iterator dereferences to a pair containing state
+ * and time at the next time point t+dt where dt is controlled by the stepper.
+ * This iterator can be used with ControlledSteppers and
+ * DenseOutputSteppers and it always makes use of the all the given steppers
+ * capabilities. A for_each over such an iterator range behaves similar to
+ * the integrate_adaptive routine.
+ *
+ * adaptive_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is a std::pair of state and time of the stepper.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ * \tparam State The state type of the ODE.
+ */
+
+
+
+ /**
+ * \fn make_adaptive_time_iterator_begin( Stepper stepper , System system , State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function for adaptive_time_iterator. Constructs a begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. adaptive_time_iterator stores a reference of s and changes its value during the iteration.
+ * \param t_start The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ * \returns The adaptive time iterator.
+ */
+
+
+ /**
+ * \fn make_adaptive_time_iterator_end( Stepper stepper , System system , State &x )
+ * \brief Factory function for adaptive_time_iterator. Constructs a end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. adaptive_time_iterator stores a reference of s and changes its value during the iteration.
+ * \returns The adaptive time iterator.
+ */
+
+
+ /**
+ * \fn make_adaptive_time_range( Stepper stepper , System system , State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function to construct a single pass range of adaptive time iterators. A range is here a pair of adaptive_time_iterators.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. adaptive_time_iterator stores a reference of s and changes its value during the iteration.
+ * \param t_start The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ * \returns The adaptive time range.
+ */
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_ADAPTIVE_TIME_ITERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/const_step_iterator.hpp b/3party/boost/boost/numeric/odeint/iterator/const_step_iterator.hpp
new file mode 100644
index 0000000000..fb1bbb1009
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/const_step_iterator.hpp
@@ -0,0 +1,180 @@
+
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/const_step_iterator.hpp
+
+ [begin_description]
+ Iterator for iterating through the solution of an ODE with constant step size.
+ [end_description]
+
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_CONST_STEP_ODE_ITERATOR_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_CONST_STEP_ODE_ITERATOR_HPP_INCLUDED
+
+
+#include <boost/numeric/odeint/util/stepper_traits.hpp>
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+#include <boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+ /* use the const_step_iterator_impl with the right tags */
+ template< class Stepper , class System , class State
+#ifndef DOXYGEN_SKIP
+ , class StepperTag = typename base_tag< typename traits::stepper_category< Stepper >::type >::type
+#endif
+ >
+ class const_step_iterator : public const_step_iterator_impl<
+ const_step_iterator< Stepper , System , State , StepperTag > ,
+ Stepper , System , State , detail::ode_state_iterator_tag , StepperTag
+ >
+ {
+ typedef typename traits::time_type< Stepper >::type time_type;
+ typedef const_step_iterator< Stepper , System , State , StepperTag > iterator_type;
+
+ public:
+ const_step_iterator( Stepper stepper , System sys , State &s , time_type t_start , time_type t_end , time_type dt )
+ : const_step_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_iterator_tag , StepperTag >( stepper , sys , s , t_start , t_end , dt )
+ {}
+
+ const_step_iterator( Stepper stepper , System sys , State &s )
+ : const_step_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_iterator_tag , StepperTag >( stepper , sys , s )
+ {}
+ };
+
+ /* make functions */
+
+ template< class Stepper , class System , class State >
+ const_step_iterator< Stepper , System, State > make_const_step_iterator_begin(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return const_step_iterator< Stepper , System , State >( stepper , system , x , t_start , t_end , dt );
+ }
+
+ template< class Stepper , class System , class State >
+ const_step_iterator< Stepper , System , State > make_const_step_iterator_end(
+ Stepper stepper ,
+ System system ,
+ State &x )
+ {
+ return const_step_iterator< Stepper , System , State >( stepper , system , x );
+ }
+
+ template< class Stepper , class System , class State >
+ std::pair< const_step_iterator< Stepper , System , State > , const_step_iterator< Stepper , System , State > >
+ make_const_step_range(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return std::make_pair(
+ const_step_iterator< Stepper , System , State >( stepper , system , x , t_start , t_end , dt ) ,
+ const_step_iterator< Stepper , System , State >( stepper , system , x )
+ );
+ }
+
+
+
+ /**
+ * \class const_step_iterator
+ *
+ * \brief ODE Iterator with constant step size. The value type of this iterator is the state type of the stepper.
+ *
+ * Implements an iterator representing the solution of an ODE from t_start
+ * to t_end evaluated at steps with constant step size dt.
+ * After each iteration the iterator dereferences to the state x at the next
+ * time t+dt.
+ * This iterator can be used with Steppers and
+ * DenseOutputSteppers and it always makes use of the all the given steppers
+ * capabilities. A for_each over such an iterator range behaves similar to
+ * the integrate_const routine.
+ *
+ * const_step_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ * \tparam State The state type of the ODE.
+ */
+
+
+ /**
+ * \fn make_const_step_iterator_begin(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function for const_step_iterator. Constructs a begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \param t_start The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ * \returns The const step iterator.
+ */
+
+
+ /**
+ * \fn make_const_step_iterator_end( Stepper stepper , System system , State &x )
+ * \brief Factory function for const_step_iterator. Constructs a end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \returns The const_step_iterator.
+ */
+
+
+ /**
+ * \fn make_const_step_range( Stepper stepper , System system , State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function to construct a single pass range of const step iterators. A range is here a pair
+ * of const_step_iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator store a reference of s and changes its value during the iteration.
+ * \param t_start The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ * \returns The const step range.
+ */
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+//#include <boost/numeric/odeint/iterator/impl/const_step_iterator_dense_output_impl.hpp>
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_CONST_STEP_ODE_ITERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/const_step_time_iterator.hpp b/3party/boost/boost/numeric/odeint/iterator/const_step_time_iterator.hpp
new file mode 100644
index 0000000000..94ec5ddb17
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/const_step_time_iterator.hpp
@@ -0,0 +1,173 @@
+
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/const_step_time_iterator.hpp
+
+ [begin_description]
+ Iterator for iterating throught the solution of an ODE with constant step size. The dereferences types containes also the time.
+ [end_description]
+
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_CONST_STEP_TIME_ITERATOR_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_CONST_STEP_TIME_ITERATOR_HPP_INCLUDED
+
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/util/stepper_traits.hpp>
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+#include <boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+ /* use the const_step_iterator_impl with the right tags */
+ template< class Stepper , class System , class State
+#ifndef DOXYGEN_SKIP
+ , class StepperTag = typename base_tag< typename traits::stepper_category< Stepper >::type >::type
+#endif
+ >
+ class const_step_time_iterator : public const_step_iterator_impl<
+ const_step_time_iterator< Stepper , System , State , StepperTag > ,
+ Stepper , System , State , detail::ode_state_time_iterator_tag , StepperTag
+ >
+ {
+ typedef typename traits::time_type< Stepper >::type time_type;
+ typedef const_step_time_iterator< Stepper , System , State , StepperTag > iterator_type;
+
+ public:
+ const_step_time_iterator( Stepper stepper , System sys , State &s , time_type t_start , time_type t_end , time_type dt )
+ : const_step_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_time_iterator_tag , StepperTag >( stepper , sys , s , t_start , t_end , dt )
+ {}
+
+ const_step_time_iterator( Stepper stepper , System sys , State &s )
+ : const_step_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_time_iterator_tag , StepperTag >( stepper , sys , s )
+ {}
+ };
+
+ template< class Stepper , class System , class State >
+ const_step_time_iterator< Stepper , System , State > make_const_step_time_iterator_begin(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return const_step_time_iterator< Stepper , System , State >( stepper , system , x , t_start , t_end , dt );
+ }
+
+ template< class Stepper , class System , class State >
+ const_step_time_iterator< Stepper , System , State > make_const_step_time_iterator_end(
+ Stepper stepper ,
+ System system ,
+ State &x )
+ {
+ return const_step_time_iterator< Stepper , System , State >( stepper , system , x );
+ }
+
+
+ template< class Stepper , class System , class State >
+ std::pair< const_step_time_iterator< Stepper , System , State > , const_step_time_iterator< Stepper , System , State > >
+ make_const_step_time_range(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return std::make_pair(
+ const_step_time_iterator< Stepper , System , State >( stepper , system , x , t_start , t_end , dt ) ,
+ const_step_time_iterator< Stepper , System , State >( stepper , system , x ) );
+ }
+
+ /**
+ * \class const_step_time_iterator
+ *
+ * \brief ODE Iterator with constant step size. The value type of this iterator is a std::pair containing state and time.
+ *
+ * Implements an iterator representing the solution of an ODE from t_start
+ * to t_end evaluated at steps with constant step size dt.
+ * After each iteration the iterator dereferences to a pair containing
+ * state and time at the next time point t+dt..
+ * This iterator can be used with Steppers and
+ * DenseOutputSteppers and it always makes use of the all the given steppers
+ * capabilities. A for_each over such an iterator range behaves similar to
+ * the integrate_const routine.
+ *
+ * const_step_time_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is a pair with the state type and time type of the stepper.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ * \tparam State The state type of the ODE.
+ */
+
+
+ /**
+ * \fn make_const_step_time_iterator_begin( Stepper stepper , System system , State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function for const_step_time_iterator. Constructs a begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_time_iterator stores a reference of s and changes its value during the iteration.
+ * \param t_start The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ * \returns The const step time iterator.
+ */
+
+
+ /**
+ * \fn make_const_step_time_iterator_end( Stepper stepper , System system , State &x )
+ * \brief Factory function for const_step_time_iterator. Constructs a end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_time_iterator store a reference of s and changes its value during the iteration.
+ * \returns The const step time iterator.
+ */
+
+
+ /**
+ * \fn make_const_step_time_range( Stepper stepper , System system , State &x ,
+ typename traits::time_type< Stepper >::type t_start ,
+ typename traits::time_type< Stepper >::type t_end ,
+ typename traits::time_type< Stepper >::type dt)
+ *
+ * \brief Factory function to construct a single pass range of const_step_time_iterator. A range is here a pair of const_step_time_iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_time_iterator stores a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ * \returns The const step time range.
+ */
+
+
+
+
+
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_CONST_STEP_TIME_ITERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp b/3party/boost/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp
new file mode 100644
index 0000000000..5960e188b6
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp
@@ -0,0 +1,199 @@
+
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp
+
+ [begin_description]
+ Base class for const_step_iterator and adaptive_iterator.
+ [end_description]
+
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_DETAIL_ODE_ITERATOR_BASE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_ODE_ITERATOR_BASE_HPP_INCLUDED
+
+#include <boost/iterator/iterator_facade.hpp>
+
+#include <boost/numeric/odeint/util/unwrap_reference.hpp>
+#include <boost/numeric/odeint/util/detail/less_with_sign.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+ struct ode_state_iterator_tag {};
+ struct ode_state_time_iterator_tag {};
+
+ template< class Iterator , class Stepper , class System , class State , typename Tag >
+ class ode_iterator_base;
+
+
+ /* Specialization for the state iterator that has only state_type as its value_type */
+ template< class Iterator , class Stepper , class System , class State >
+ class ode_iterator_base< Iterator , Stepper , System , State , ode_state_iterator_tag >
+ : public boost::iterator_facade
+ <
+ Iterator ,
+ typename traits::state_type< Stepper >::type const ,
+ boost::single_pass_traversal_tag
+ >
+ {
+ private:
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef typename unwrapped_stepper_type::time_type time_type;
+ typedef typename unwrapped_stepper_type::value_type ode_value_type;
+
+ public:
+
+ ode_iterator_base( stepper_type stepper , system_type sys , time_type t , time_type dt )
+ : m_stepper( stepper ) , m_system( sys ) ,
+ m_t( t ) , m_dt( dt ) , m_at_end( false )
+ { }
+
+ ode_iterator_base( stepper_type stepper , system_type sys )
+ : m_stepper( stepper ) , m_system( sys ) ,
+ m_t() , m_dt() , m_at_end( true )
+ { }
+
+ // this function is only for testing
+ bool same( const ode_iterator_base &iter ) const
+ {
+ return (
+ //( static_cast<Iterator>(*this).get_state() ==
+ // static_cast<Iterator>(iter).get_state ) &&
+ ( m_t == iter.m_t ) &&
+ ( m_dt == iter.m_dt ) &&
+ ( m_at_end == iter.m_at_end )
+ );
+ }
+
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ bool equal( ode_iterator_base const& other ) const
+ {
+ if( m_at_end == other.m_at_end )
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ const state_type& dereference() const
+ {
+ return static_cast<const Iterator*>(this)->get_state();
+ }
+
+ protected:
+
+ stepper_type m_stepper;
+ system_type m_system;
+ time_type m_t;
+ time_type m_dt;
+ bool m_at_end;
+ };
+
+
+
+ /* Specialization for the state-time iterator that has pair<state_type,time_type> as its value_type */
+
+ template< class Iterator , class Stepper , class System , class State >
+ class ode_iterator_base< Iterator , Stepper , System , State , ode_state_time_iterator_tag >
+ : public boost::iterator_facade
+ <
+ Iterator ,
+ std::pair< const State , const typename traits::time_type< Stepper >::type > ,
+ boost::single_pass_traversal_tag ,
+ std::pair< const State& , const typename traits::time_type< Stepper >::type& >
+ >
+ {
+ private:
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef typename unwrapped_stepper_type::time_type time_type;
+ typedef typename unwrapped_stepper_type::value_type ode_value_type;
+
+ public:
+
+ ode_iterator_base( stepper_type stepper , system_type sys ,
+ time_type t , time_type dt )
+ : m_stepper( stepper ) , m_system( sys ) ,
+ m_t( t ) , m_dt( dt ) , m_at_end( false )
+ { }
+
+ ode_iterator_base( stepper_type stepper , system_type sys )
+ : m_stepper( stepper ) , m_system( sys ) , m_at_end( true )
+ { }
+
+ bool same( ode_iterator_base const& iter )
+ {
+ return (
+ //( static_cast<Iterator>(*this).get_state() ==
+ // static_cast<Iterator>(iter).get_state ) &&
+ ( m_t == iter.m_t ) &&
+ ( m_dt == iter.m_dt ) &&
+ ( m_at_end == iter.m_at_end )
+ );
+ }
+
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ bool equal( ode_iterator_base const& other ) const
+ {
+ if( m_at_end == other.m_at_end )
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ std::pair< const state_type& , const time_type& > dereference() const
+ {
+ return std::pair< const state_type & , const time_type & >(
+ static_cast<const Iterator*>(this)->get_state() , m_t );
+ }
+
+ stepper_type m_stepper;
+ system_type m_system;
+ time_type m_t;
+ time_type m_dt;
+ bool m_at_end;
+
+ };
+
+
+
+} // namespace detail
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_ODE_ITERATOR_BASE_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp b/3party/boost/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp
new file mode 100644
index 0000000000..643b53937f
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp
@@ -0,0 +1,253 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/detail/adaptive_iterator_impl.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_DETAIL_ADAPTIVE_ITERATOR_IMPL_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_ADAPTIVE_ITERATOR_IMPL_HPP_DEFINED
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/numeric/odeint/util/unit_helper.hpp>
+#include <boost/numeric/odeint/util/copy.hpp>
+#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+ template< class Iterator , class Stepper , class System , class State , typename Tag , typename StepperTag >
+ class adaptive_iterator_impl;
+
+ /*
+ * Specilization for controlled steppers
+ */
+ /**
+ * \brief ODE Iterator with adaptive step size control. The value type of this iterator is the state type of the stepper.
+ *
+ * Implements an ODE iterator with adaptive step size control. Uses controlled steppers. adaptive_iterator is a model
+ * of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ */
+ template< class Iterator , class Stepper , class System , class State , typename Tag >
+ class adaptive_iterator_impl< Iterator , Stepper , System , State , Tag , controlled_stepper_tag >
+ : public detail::ode_iterator_base< Iterator , Stepper , System , State , Tag >
+ {
+ private:
+
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef typename traits::time_type< stepper_type >::type time_type;
+ typedef typename traits::value_type< stepper_type >::type ode_value_type;
+ #ifndef DOXYGEN_SKIP
+ typedef detail::ode_iterator_base< Iterator , Stepper , System , State , Tag > base_type;
+ #endif
+
+ public:
+
+ /**
+ * \brief Constructs an adaptive_iterator. This constructor should be used to construct the begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. adaptive_iterator stores a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ */
+ adaptive_iterator_impl( stepper_type stepper , system_type sys , state_type &s , time_type t , time_type t_end , time_type dt )
+ : base_type( stepper , sys , t , dt ) , m_t_end( t_end ) , m_state( &s )
+ {
+ if( detail::less_with_sign( this->m_t_end , this->m_t , this->m_dt ) )
+ this->m_at_end = true;
+ }
+
+ /**
+ * \brief Constructs an adaptive_iterator. This constructor should be used to construct the end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. adaptive_iterator store a reference of s and changes its value during the iteration.
+ */
+ adaptive_iterator_impl( stepper_type stepper , system_type sys , state_type &s )
+ : base_type( stepper , sys ) , m_state( &s ) { }
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ if( detail::less_with_sign( this->m_t , this->m_t_end , this->m_dt) )
+ {
+ if( detail::less_with_sign( this->m_t_end ,
+ static_cast<time_type>(this->m_t + this->m_dt) ,
+ this->m_dt ) )
+ {
+ this->m_dt = this->m_t_end - this->m_t;
+ }
+ unwrapped_stepper_type &stepper = this->m_stepper;
+ const size_t max_attempts = 1000;
+ size_t trials = 0;
+ controlled_step_result res = success;
+ do
+ {
+ res = stepper.try_step( this->m_system , *( this->m_state ) , this->m_t , this->m_dt );
+ ++trials;
+ }
+ while( ( res == fail ) && ( trials < max_attempts ) );
+ if( trials == max_attempts )
+ {
+ BOOST_THROW_EXCEPTION( std::overflow_error( "Adaptive iterator : Maximal number of iterations reached. A step size could not be found." ));
+ }
+ } else {
+ this->m_at_end = true;
+ }
+ }
+ public:
+ const state_type& get_state() const
+ {
+ return *this->m_state;
+ }
+
+ private:
+ time_type m_t_end;
+ state_type* m_state;
+ };
+
+
+
+ /*
+ * Specilization for dense outputer steppers
+ */
+ /**
+ * \brief ODE Iterator with adaptive step size control. The value type of this iterator is the state type of the stepper.
+ *
+ * Implements an ODE iterator with adaptive step size control. Uses dense-output steppers. adaptive_iterator is a model
+ * of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ */
+ template< class Iterator , class Stepper , class System , class State , typename Tag >
+ class adaptive_iterator_impl< Iterator , Stepper , System , State , Tag , dense_output_stepper_tag >
+ : public detail::ode_iterator_base< Iterator , Stepper , System , State , Tag >
+ {
+ private:
+
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef typename traits::time_type< stepper_type >::type time_type;
+ typedef typename traits::value_type< stepper_type >::type ode_value_type;
+ #ifndef DOXYGEN_SKIP
+ typedef detail::ode_iterator_base< Iterator , Stepper , System , State , Tag > base_type;
+ #endif
+
+
+ public:
+
+
+ /**
+ * \brief Constructs an adaptive_iterator. This constructor should be used to construct the begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state.
+ * \param t The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ */
+ adaptive_iterator_impl( stepper_type stepper , system_type sys , state_type &s , time_type t , time_type t_end , time_type dt )
+ : base_type( stepper , sys , t , dt ) , m_t_end( t_end )
+ {
+ if( detail::less_eq_with_sign( this->m_t , this->m_t_end , this->m_dt ) )
+ {
+ unwrapped_stepper_type &st = this->m_stepper;
+ st.initialize( s , this->m_t , this->m_dt );
+ } else {
+ this->m_at_end = true;
+ }
+ }
+
+ /**
+ * \brief Constructs an adaptive_iterator. This constructor should be used to construct the end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state.
+ */
+ adaptive_iterator_impl( stepper_type stepper , system_type sys , state_type &s )
+ : base_type( stepper , sys ) { }
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ unwrapped_stepper_type &stepper = this->m_stepper;
+ if( detail::less_with_sign( this->m_t ,
+ this->m_t_end ,
+ stepper.current_time_step() ) )
+ {
+ if( detail::less_with_sign( this->m_t_end ,
+ static_cast<time_type>(this->m_t + stepper.current_time_step()) ,
+ stepper.current_time_step() ) )
+ {
+ // make stpper to end exactly at t_end
+ stepper.initialize( stepper.current_state() , stepper.current_time() ,
+ static_cast<time_type>(this->m_t_end-this->m_t) );
+ }
+ stepper.do_step( this->m_system );
+ this->m_t = stepper.current_time();
+ } else { // we have reached t_end
+ this->m_at_end = true;
+ }
+ }
+
+ public:
+ const state_type& get_state() const
+ {
+ const unwrapped_stepper_type &stepper = this->m_stepper;
+ return stepper.current_state();
+ }
+
+ private:
+ time_type m_t_end;
+ };
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_ADAPTIVE_ITERATOR_IMPL_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp b/3party/boost/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp
new file mode 100644
index 0000000000..449acfa79f
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp
@@ -0,0 +1,228 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/detail/const_step_iterator_impl.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_DETAIL_CONST_STEP_ITERATOR_IMPL_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_CONST_STEP_ITERATOR_IMPL_HPP_DEFINED
+
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+#include <boost/numeric/odeint/util/unit_helper.hpp>
+
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+ template< class Iterator , class Stepper , class System , class State , typename Tag , class StepperTag >
+ class const_step_iterator_impl;
+
+
+ /*
+ * Specilization for steppers and error steppers
+ */
+ template< class Iterator , class Stepper , class System , class State , typename Tag >
+ class const_step_iterator_impl< Iterator , Stepper , System , State , Tag , stepper_tag >
+ : public detail::ode_iterator_base< Iterator , Stepper , System , State , Tag >
+ {
+ private:
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef typename traits::time_type< stepper_type >::type time_type;
+ typedef typename traits::value_type< stepper_type >::type ode_value_type;
+ #ifndef DOXYGEN_SKIP
+ typedef detail::ode_iterator_base< Iterator , Stepper , System , State , Tag > base_type;
+ #endif
+
+ public:
+
+ /**
+ * \brief Constructs a const_step_iterator. This constructor should be used to construct the begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ */
+ const_step_iterator_impl( stepper_type stepper , system_type sys , state_type &s , time_type t , time_type t_end , time_type dt )
+ : base_type( stepper , sys , t , dt ) , m_t_start( t ) , m_t_end( t_end ) , m_state( &s ) , m_step( 0 )
+ {
+ if( detail::less_with_sign( this->m_t_end , this->m_t , this->m_dt ) )
+ this->m_at_end = true;
+ }
+
+ /**
+ * \brief Constructs a const_step_iterator. This constructor should be used to construct the end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ */
+ const_step_iterator_impl( stepper_type stepper , system_type sys , state_type &s )
+ : base_type( stepper , sys ) { }
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ if( detail::less_eq_with_sign( static_cast<time_type>(this->m_t+this->m_dt) ,
+ this->m_t_end , this->m_dt ) )
+ {
+ unwrapped_stepper_type &stepper = this->m_stepper;
+ stepper.do_step( this->m_system , *this->m_state , this->m_t , this->m_dt );
+ // use integer to compute current time to reduce roundoff errors
+ this->m_step++;
+ this->m_t = this->m_t_start + static_cast< typename unit_value_type<time_type>::type >(this->m_step)*this->m_dt;
+ } else {
+ this->m_at_end = true;
+ }
+ }
+
+ public:
+ const state_type& get_state() const
+ {
+ return *m_state;
+ }
+
+ private:
+ time_type m_t_start;
+ time_type m_t_end;
+ state_type* m_state;
+ size_t m_step;
+
+ };
+
+
+
+ /*
+ * Specilization for dense output stepper
+ */
+ /**
+ * \brief ODE Iterator with constant step size. The value type of this iterator is the state type of the stepper.
+ *
+ * Implements an ODE iterator solving the ODE with constant steps. Uses dense-output steppers.
+ * const_step_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ */
+ template< class Iterator , class Stepper , class System , class State , typename Tag >
+ class const_step_iterator_impl< Iterator , Stepper , System , State , Tag , dense_output_stepper_tag >
+ : public detail::ode_iterator_base< Iterator , Stepper , System , State , Tag >
+ {
+ private:
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef typename traits::time_type< stepper_type >::type time_type;
+ typedef typename traits::value_type< stepper_type >::type ode_value_type;
+ #ifndef DOXYGEN_SKIP
+ typedef detail::ode_iterator_base< Iterator , Stepper , System , State , Tag > base_type;
+ #endif
+
+ public:
+
+ /**
+ * \brief Constructs a const_step_iterator. This constructor should be used to construct the begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param t_end The end time, at which the iteration should stop.
+ * \param dt The initial time step.
+ */
+ const_step_iterator_impl( stepper_type stepper , system_type sys , state_type &s , time_type t , time_type t_end , time_type dt )
+ : base_type( stepper , sys , t , dt ) , m_t_start( t ) , m_t_end( t_end ) , m_state( &s ) , m_step( 0 )
+ {
+ if( detail::less_eq_with_sign( this->m_t , this->m_t_end , this->m_dt ) )
+ {
+ unwrapped_stepper_type &st = this->m_stepper;
+ st.initialize( * ( this->m_state ) , this->m_t , this->m_dt );
+ } else {
+ this->m_at_end = true;
+ }
+ }
+
+ /**
+ * \brief Constructs a const_step_iterator. This constructor should be used to construct the end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ */
+ const_step_iterator_impl( stepper_type stepper , system_type sys , state_type &s )
+ : base_type( stepper , sys ) , m_state( &s )
+ {
+ }
+
+
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ void increment( void )
+ {
+ if( detail::less_eq_with_sign( static_cast<time_type>(this->m_t+this->m_dt) ,
+ this->m_t_end , this->m_dt ) )
+ {
+ unwrapped_stepper_type &stepper = this->m_stepper;
+ // use integer to compute current time to reduce roundoff errors
+ this->m_step++;
+ this->m_t = this->m_t_start + static_cast< typename unit_value_type<time_type>::type >(this->m_step)*this->m_dt;
+ while( detail::less_with_sign( stepper.current_time() , this->m_t ,
+ stepper.current_time_step() ) )
+ {
+ stepper.do_step( this->m_system );
+ }
+ stepper.calc_state( this->m_t , *( this->m_state ) );
+ } else {
+ this->m_at_end = true;
+ }
+ }
+
+ public:
+ const state_type& get_state() const
+ {
+ return *m_state;
+ }
+
+ private:
+ time_type m_t_start;
+ time_type m_t_end;
+ state_type* m_state;
+ size_t m_step;
+ };
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_CONST_STEP_ITERATOR_IMPL_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp b/3party/boost/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp
new file mode 100644
index 0000000000..7dd167f20a
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp
@@ -0,0 +1,239 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/detail/n_step_iterator_impl.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_DETAIL_N_STEP_ITERATOR_IMPL_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_N_STEP_ITERATOR_IMPL_HPP_DEFINED
+
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+#include <boost/numeric/odeint/util/unit_helper.hpp>
+
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+ template< class Iterator , class Stepper , class System , class State , typename Tag , class StepperTag >
+ class n_step_iterator_impl;
+
+
+ /*
+ * Specilization for steppers and error steppers
+ */
+ /**
+ * \brief ODE Iterator performing exactly n steps with constant step size. The value type of this iterator is the state type of the stepper.
+ *
+ * Implements an ODE iterator solving the ODE with constant step size. Uses steppers fulfilling the Stepper concept.
+ * n_step_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ */
+ template< class Iterator , class Stepper , class System , class State , typename Tag >
+ class n_step_iterator_impl< Iterator , Stepper , System , State , Tag , stepper_tag >
+ : public detail::ode_iterator_base< Iterator , Stepper , System , State , Tag >
+ {
+ private:
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef typename traits::time_type< stepper_type >::type time_type;
+ typedef typename traits::value_type< stepper_type >::type ode_value_type;
+ #ifndef DOXYGEN_SKIP
+ typedef detail::ode_iterator_base< Iterator , Stepper , System , State , Tag > base_type;
+ #endif
+
+ public:
+
+ /**
+ * \brief Constructs a n_step_iterator. This constructor should be used to construct the begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param dt The initial time step.
+ * \param num_of_steps the number of steps to be executed.
+ */
+ n_step_iterator_impl( stepper_type stepper , system_type sys , state_type &s ,
+ time_type t , time_type dt , size_t num_of_steps )
+ : base_type( stepper , sys , t , dt ) , m_t_start( t ) , m_state( &s ) ,
+ m_steps(num_of_steps) , m_step( 0 )
+ { }
+
+ /**
+ * \brief Constructs a const_step_iterator. This constructor should be used to construct the end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ */
+ n_step_iterator_impl( stepper_type stepper , system_type sys , state_type &s )
+ : base_type( stepper , sys ) , m_state( &s ) { }
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ if( this->m_step < this->m_steps )
+ {
+ unwrapped_stepper_type &stepper = this->m_stepper;
+ stepper.do_step( this->m_system , *this->m_state , this->m_t , this->m_dt );
+ // use integer to compute current time to reduce roundoff errors
+ this->m_step++;
+ this->m_t = this->m_t_start + static_cast< typename unit_value_type<time_type>::type >(this->m_step)*this->m_dt;
+ } else {
+ this->m_at_end = true;
+
+ }
+ }
+
+ public:
+ const state_type& get_state() const
+ {
+ return *m_state;
+ }
+
+
+ private:
+ time_type m_t_start;
+ time_type m_t_end;
+ state_type* m_state;
+ size_t m_steps;
+ size_t m_step;
+
+ };
+
+
+
+
+ /*
+ * Specilization for dense output stepper
+ */
+ /**
+ * \brief ODE Iterator with step-size control and dense output.
+ *
+ * Implements an ODE iterator solving the ODE with constant steps. Uses dense-output steppers.
+ * n_step_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ */
+ template< class Iterator , class Stepper , class System , class State , typename Tag >
+ class n_step_iterator_impl< Iterator , Stepper , System , State , Tag , dense_output_stepper_tag >
+ : public detail::ode_iterator_base< Iterator , Stepper , System , State , Tag >
+ {
+ private:
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef typename traits::time_type< stepper_type >::type time_type;
+ typedef typename traits::value_type< stepper_type >::type ode_value_type;
+ #ifndef DOXYGEN_SKIP
+ typedef detail::ode_iterator_base< Iterator , Stepper , System , State , Tag > base_type;
+ #endif
+
+ public:
+
+ /**
+ * \brief Constructs a const_step_iterator. This constructor should be used to construct the begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param dt The initial time step.
+ * \param num_of_steps the number of steps to be executed.
+ */
+ n_step_iterator_impl( stepper_type stepper , system_type sys , state_type &s ,
+ time_type t , time_type dt , size_t num_of_steps )
+ : base_type( stepper , sys , t , dt ) , m_t_start( t ) , m_state( &s ) ,
+ m_steps( num_of_steps ) , m_step( 0 )
+ {
+ unwrapped_stepper_type &st = this->m_stepper;
+ st.initialize( * ( this->m_state ) , this->m_t , this->m_dt );
+ }
+
+ /**
+ * \brief Constructs a const_step_iterator. This constructor should be used to construct the end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ */
+ n_step_iterator_impl( stepper_type stepper , system_type sys , state_type &s )
+ : base_type( stepper , sys ) , m_state( &s )
+ {
+ }
+
+
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ void increment( void )
+ {
+ if( this->m_step < this->m_steps )
+ {
+ unwrapped_stepper_type &stepper = this->m_stepper;
+ // use integer to compute current time to reduce roundoff errors
+ this->m_step++;
+ this->m_t = this->m_t_start + static_cast< typename unit_value_type<time_type>::type >(this->m_step)*this->m_dt;
+ while( detail::less_with_sign( stepper.current_time() , this->m_t ,
+ stepper.current_time_step() ) )
+ {
+ stepper.do_step( this->m_system );
+ }
+ stepper.calc_state( this->m_t , *( this->m_state ) );
+ } else {
+ this->m_at_end = true;
+ }
+ }
+
+ public:
+ const state_type& get_state() const
+ {
+ return *m_state;
+ }
+
+
+ private:
+ time_type m_t_start;
+ time_type m_t_end;
+ state_type* m_state;
+ size_t m_steps;
+ size_t m_step;
+ };
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_N_STEP_ITERATOR_IMPL_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp b/3party/boost/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp
new file mode 100644
index 0000000000..7a2b48d829
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp
@@ -0,0 +1,371 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/detail/times_iterator_impl.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_DETAIL_TIMES_ITERATOR_IMPL_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_TIMES_ITERATOR_IMPL_HPP_DEFINED
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/numeric/odeint/util/unit_helper.hpp>
+#include <boost/numeric/odeint/util/copy.hpp>
+#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+ template< class Iterator , class Stepper , class System , class State , class TimeIterator ,
+ typename Tag , typename StepperTag >
+ class times_iterator_impl;
+
+ /*
+ * Specilization for basic steppers
+ */
+ /**
+ * \brief ODE Iterator with constant step size.
+ *
+ * Implements an ODE iterator with observer calls at predefined times.
+ * Uses controlled steppers. times_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ */
+ template< class Iterator , class Stepper , class System , class State , class TimeIterator , typename Tag >
+ class times_iterator_impl< Iterator , Stepper , System , State , TimeIterator , Tag , stepper_tag >
+ : public detail::ode_iterator_base< Iterator , Stepper , System , State , Tag >
+ {
+ private:
+
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef TimeIterator time_iterator_type;
+ typedef typename traits::time_type< stepper_type >::type time_type;
+ typedef typename traits::value_type< stepper_type >::type ode_value_type;
+ #ifndef DOXYGEN_SKIP
+ typedef detail::ode_iterator_base< Iterator , Stepper , System , State , Tag > base_type;
+ #endif
+
+ public:
+
+ /**
+ * \brief Constructs a times_iterator. This constructor should be used to construct the begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. adaptive_iterator stores a reference of s and changes its value during the iteration.
+ * \param t_start Iterator to the begin of a sequence of time values.
+ * \param t_end Iterator to the begin of a sequence of time values.
+ * \param dt The (initial) time step.
+ */
+ times_iterator_impl( stepper_type stepper , system_type sys , state_type &s ,
+ time_iterator_type t_start , time_iterator_type t_end , time_type dt )
+ : base_type( stepper , sys , *t_start , dt ) ,
+ m_t_start( t_start ) , m_t_end( t_end ) , m_state( &s )
+ {
+ if( t_start == t_end )
+ this->m_at_end = true;
+ }
+
+ /**
+ * \brief Constructs an adaptive_iterator. This constructor should be used to construct the end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. adaptive_iterator store a reference of s and changes its value during the iteration.
+ */
+ times_iterator_impl( stepper_type stepper , system_type sys , state_type &s )
+ : base_type( stepper , sys ) , m_state( &s ) { }
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ unwrapped_stepper_type &stepper = this->m_stepper;
+ if( ++m_t_start != m_t_end )
+ {
+ while( detail::less_with_sign( this->m_t , static_cast<time_type>(*m_t_start) , this->m_dt ) )
+ {
+ const time_type current_dt = detail::min_abs( this->m_dt , static_cast<time_type>(*m_t_start) - this->m_t );
+ stepper.do_step( this->m_system , *( this->m_state ) , this->m_t , current_dt );
+ this->m_t += current_dt;
+ }
+
+ } else {
+ this->m_at_end = true;
+ }
+ }
+
+ public:
+ const state_type& get_state() const
+ {
+ return *m_state;
+ }
+
+ private:
+ time_iterator_type m_t_start;
+ time_iterator_type m_t_end;
+ state_type* m_state;
+ };
+
+
+
+ /*
+ * Specilization for controlled steppers
+ */
+ /**
+ * \brief ODE Iterator with adaptive step size control. The value type of this iterator is the state type of the stepper.
+ *
+ * Implements an ODE iterator with observer calls at predefined times.
+ * Uses controlled steppers. times_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ */
+ template< class Iterator , class Stepper , class System , class State , class TimeIterator , typename Tag >
+ class times_iterator_impl< Iterator , Stepper , System , State , TimeIterator , Tag , controlled_stepper_tag >
+ : public detail::ode_iterator_base< Iterator , Stepper , System , State , Tag >
+ {
+ private:
+
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef TimeIterator time_iterator_type;
+ typedef typename traits::time_type< stepper_type >::type time_type;
+ typedef typename traits::value_type< stepper_type >::type ode_value_type;
+ #ifndef DOXYGEN_SKIP
+ typedef detail::ode_iterator_base< Iterator , Stepper , System , State , Tag > base_type;
+ #endif
+
+ public:
+
+ /**
+ * \brief Constructs a times_iterator. This constructor should be used to construct the begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. adaptive_iterator stores a reference of s and changes its value during the iteration.
+ * \param t_start Iterator to the begin of a sequence of time values.
+ * \param t_end Iterator to the begin of a sequence of time values.
+ * \param dt The (initial) time step.
+ */
+ times_iterator_impl( stepper_type stepper , system_type sys , state_type &s ,
+ time_iterator_type t_start , time_iterator_type t_end , time_type dt )
+ : base_type( stepper , sys , *t_start , dt ) ,
+ m_t_start( t_start ) , m_t_end( t_end ) , m_state( &s )
+ {
+ if( t_start == t_end )
+ this->m_at_end = true;
+ }
+
+ /**
+ * \brief Constructs an adaptive_iterator. This constructor should be used to construct the end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state. adaptive_iterator store a reference of s and changes its value during the iteration.
+ */
+ times_iterator_impl( stepper_type stepper , system_type sys , state_type &s )
+ : base_type( stepper , sys ) , m_state( &s ) { }
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ if( ++m_t_start != m_t_end )
+ {
+ while( detail::less_with_sign( this->m_t , static_cast<time_type>(*m_t_start) , this->m_dt ) )
+ {
+ if( detail::less_with_sign( static_cast<time_type>(*m_t_start) - this->m_t , this->m_dt , this->m_dt ) )
+ {
+ // we want to end exactly at the time point
+ time_type current_dt = static_cast<time_type>(*m_t_start) - this->m_t;
+ step_loop( current_dt );
+ } else {
+ step_loop( this->m_dt );
+ }
+ }
+
+ } else {
+ this->m_at_end = true;
+ }
+ }
+
+ private:
+ void step_loop( time_type &dt )
+ {
+ unwrapped_stepper_type &stepper = this->m_stepper;
+ const size_t max_attempts = 1000;
+ size_t trials = 0;
+ controlled_step_result res = success;
+ do
+ {
+ res = stepper.try_step( this->m_system , *( this->m_state ) , this->m_t , dt );
+ ++trials;
+ }
+ while( ( res == fail ) && ( trials < max_attempts ) );
+ if( trials == max_attempts )
+ {
+ BOOST_THROW_EXCEPTION( std::overflow_error( "Adaptive iterator : Maximal number of iterations reached. A step size could not be found." ) );
+ }
+ }
+
+ public:
+ const state_type& get_state() const
+ {
+ return *m_state;
+ }
+
+
+ private:
+ time_iterator_type m_t_start;
+ time_iterator_type m_t_end;
+ state_type* m_state;
+ };
+
+
+ /*
+ * Specilization for dense outputer steppers
+ */
+ /**
+ * \brief ODE Iterator with step size control and dense output.
+ * Implements an ODE iterator with adaptive step size control. Uses dense-output steppers.
+ * times_iterator is a model of single-pass iterator.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ */
+ template< class Iterator , class Stepper , class System , class State , class TimeIterator , typename Tag >
+ class times_iterator_impl< Iterator , Stepper , System , State , TimeIterator , Tag , dense_output_stepper_tag >
+ : public detail::ode_iterator_base< Iterator , Stepper , System , State , Tag >
+ {
+ private:
+
+
+ typedef Stepper stepper_type;
+ typedef System system_type;
+ typedef typename boost::numeric::odeint::unwrap_reference< stepper_type >::type unwrapped_stepper_type;
+ typedef State state_type;
+ typedef TimeIterator time_iterator_type;
+ typedef typename traits::time_type< stepper_type >::type time_type;
+ typedef typename traits::value_type< stepper_type >::type ode_value_type;
+ #ifndef DOXYGEN_SKIP
+ typedef detail::ode_iterator_base< Iterator , Stepper , System , State , Tag > base_type;
+ #endif
+
+
+ public:
+
+
+ /**
+ * \brief Constructs a times_iterator. This constructor should be used to construct the begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state.
+ * \param t_start Iterator to the begin of a sequence of time values.
+ * \param t_end Iterator to the begin of a sequence of time values.
+ * \param dt The (initial) time step.
+ */
+ times_iterator_impl( stepper_type stepper , system_type sys , state_type &s ,
+ time_iterator_type t_start , time_iterator_type t_end , time_type dt )
+ : base_type( stepper , sys , *t_start , dt ) ,
+ m_t_start( t_start ) , m_t_end( t_end ) , m_final_time( *(t_end-1) ) ,
+ m_state( &s )
+ {
+ if( t_start != t_end )
+ {
+ unwrapped_stepper_type &st = this->m_stepper;
+ st.initialize( *( this->m_state ) , this->m_t , this->m_dt );
+ } else {
+ this->m_at_end = true;
+ }
+ }
+
+ /**
+ * \brief Constructs a times_iterator. This constructor should be used to construct the end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param sys The system function (ODE) to solve.
+ * \param s The initial state.
+ */
+ times_iterator_impl( stepper_type stepper , system_type sys , state_type &s )
+ : base_type( stepper , sys ) , m_state( &s ) { }
+
+ protected:
+
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ unwrapped_stepper_type &st = this->m_stepper;
+ if( ++m_t_start != m_t_end )
+ {
+ this->m_t = static_cast<time_type>(*m_t_start);
+ while( detail::less_with_sign( st.current_time() , this->m_t , this->m_dt ) )
+ {
+ // make sure we don't go beyond the last point
+ if( detail::less_with_sign( m_final_time-st.current_time() , st.current_time_step() , st.current_time_step() ) )
+ {
+ st.initialize( st.current_state() , st.current_time() , m_final_time-st.current_time() );
+ }
+ st.do_step( this->m_system );
+ }
+ st.calc_state( this->m_t , *( this->m_state ) );
+ } else {
+ this->m_at_end = true;
+ }
+ }
+
+ public:
+ const state_type& get_state() const
+ {
+ return *m_state;
+ }
+
+
+ private:
+ time_iterator_type m_t_start;
+ time_iterator_type m_t_end;
+ time_type m_final_time;
+ state_type* m_state;
+ };
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_DETAIL_TIMES_ITERATOR_IMPL_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/detail/functors.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/functors.hpp
new file mode 100644
index 0000000000..b239217ac4
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/functors.hpp
@@ -0,0 +1,70 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/detail/functors.hpp
+
+ [begin_description]
+ some functors for the iterator based integrate routines
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_DETAIL_FUNCTORS_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_FUNCTORS_HPP_INCLUDED
+
+#include <utility>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+
+template< class Observer >
+struct obs_caller {
+
+ size_t &m_n;
+ Observer m_obs;
+
+ obs_caller( size_t &m , Observer &obs ) : m_n(m) , m_obs( obs ) {}
+
+ template< class State , class Time >
+ void operator()( std::pair< const State & , const Time & > x )
+ {
+ typedef typename odeint::unwrap_reference< Observer >::type observer_type;
+ observer_type &obs = m_obs;
+ obs( x.first , x.second );
+ m_n++;
+ }
+};
+
+template< class Observer , class Time >
+struct obs_caller_time {
+
+ Time &m_t;
+ Observer m_obs;
+
+ obs_caller_time( Time &t , Observer &obs ) : m_t(t) , m_obs( obs ) {}
+
+ template< class State >
+ void operator()( std::pair< const State & , const Time & > x )
+ {
+ typedef typename odeint::unwrap_reference< Observer >::type observer_type;
+ observer_type &obs = m_obs;
+ obs( x.first , x.second );
+ m_t = x.second;
+ }
+};
+
+} // namespace detail
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_FUNCTORS_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp
new file mode 100644
index 0000000000..ccbbf497f3
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp
@@ -0,0 +1,121 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp
+
+ [begin_description]
+ Default Integrate adaptive implementation.
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_ADAPTIVE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_ADAPTIVE_HPP_INCLUDED
+
+#include <stdexcept>
+
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp>
+#include <boost/numeric/odeint/iterator/adaptive_time_iterator.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/functors.hpp>
+#include <boost/numeric/odeint/util/bind.hpp>
+#include <boost/numeric/odeint/util/unwrap_reference.hpp>
+#include <boost/numeric/odeint/util/copy.hpp>
+
+#include <boost/numeric/odeint/util/detail/less_with_sign.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+// forward declaration
+template< class Stepper , class System , class State , class Time , class Observer>
+size_t integrate_const(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer , stepper_tag );
+
+/*
+ * integrate_adaptive for simple stepper is basically an integrate_const + some last step
+ */
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_adaptive(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer , stepper_tag
+)
+{
+ size_t steps = detail::integrate_const( stepper , system , start_state , start_time ,
+ end_time , dt , observer , stepper_tag() );
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
+
+ Time end = start_time + dt*steps;
+ if( less_with_sign( end , end_time , dt ) )
+ { //make a last step to end exactly at end_time
+ st.do_step( system , start_state , end , end_time - end );
+ steps++;
+ obs( start_state , end_time );
+ }
+ return steps;
+}
+
+
+/*
+ * classical integrate adaptive
+ */
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_adaptive(
+ Stepper stepper , System system , State &start_state ,
+ Time &start_time , Time end_time , Time &dt ,
+ Observer observer , controlled_stepper_tag
+)
+{
+ size_t obs_calls = 0;
+
+ boost::for_each( make_adaptive_time_range( stepper , system , start_state ,
+ start_time , end_time , dt ) ,
+ obs_caller< Observer >( obs_calls , observer ) );
+
+ return obs_calls-1;
+}
+
+
+/*
+ * integrate adaptive for dense output steppers
+ *
+ * step size control is used if the stepper supports it
+ */
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_adaptive(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer , dense_output_stepper_tag )
+{
+ size_t obs_calls = 0;
+
+ boost::for_each( make_adaptive_time_range( stepper , system , start_state ,
+ start_time , end_time , dt ) ,
+ obs_caller< Observer >( obs_calls , observer ) );
+
+ return obs_calls-1;
+}
+
+
+
+
+} // namespace detail
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_ADAPTIVE_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp
new file mode 100644
index 0000000000..10650369c1
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp
@@ -0,0 +1,111 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/detail/integrate_const.hpp
+
+ [begin_description]
+ integrate const implementation
+ [end_description]
+
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_CONST_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_CONST_HPP_INCLUDED
+
+#include <boost/range/algorithm/for_each.hpp>
+
+#include <boost/numeric/odeint/util/unwrap_reference.hpp>
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/util/unit_helper.hpp>
+#include <boost/numeric/odeint/iterator/const_step_time_iterator.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/functors.hpp>
+#include <boost/numeric/odeint/util/detail/less_with_sign.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+// forward declaration
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_adaptive(
+ Stepper stepper , System system , State &start_state ,
+ Time &start_time , Time end_time , Time &dt ,
+ Observer observer , controlled_stepper_tag
+);
+
+
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_const(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer , stepper_tag
+)
+{
+ size_t obs_calls = 0;
+
+ boost::for_each( make_const_step_time_range( stepper , system , start_state ,
+ start_time , end_time , dt ) ,
+ // should we use traits<Stepper>::state_type here instead of State? NO!
+ obs_caller< Observer >( obs_calls , observer ) );
+
+ // step integration steps gives step+1 observer calls
+ return obs_calls-1;
+}
+
+
+
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_const(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer , controlled_stepper_tag
+)
+{
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
+
+ Time time = start_time;
+ const Time time_step = dt;
+ int step = 0;
+
+ while( less_eq_with_sign( static_cast<Time>(time+time_step) , end_time , dt ) )
+ {
+ obs( start_state , time );
+ detail::integrate_adaptive( stepper , system , start_state , time , time+time_step , dt ,
+ null_observer() , controlled_stepper_tag() );
+ // direct computation of the time avoids error propagation happening when using time += dt
+ // we need clumsy type analysis to get boost units working here
+ ++step;
+ time = start_time + static_cast< typename unit_value_type<Time>::type >(step) * time_step;
+ }
+ obs( start_state , time );
+
+ return step;
+}
+
+
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_const(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer , dense_output_stepper_tag
+)
+{
+ size_t obs_calls = 0;
+
+ boost::for_each( make_const_step_time_range( stepper , system , start_state ,
+ start_time , end_time , dt ) ,
+ obs_caller< Observer >( obs_calls , observer ) );
+ return obs_calls-1;
+}
+
+
+} } } }
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp
new file mode 100644
index 0000000000..147799040d
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp
@@ -0,0 +1,107 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp
+
+ [begin_description]
+ integrate steps implementation
+ [end_description]
+
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_N_STEPS_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_N_STEPS_HPP_INCLUDED
+
+#include <boost/numeric/odeint/util/unwrap_reference.hpp>
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/functors.hpp>
+#include <boost/numeric/odeint/iterator/n_step_time_iterator.hpp>
+#include <boost/numeric/odeint/util/unit_helper.hpp>
+
+#include <boost/numeric/odeint/util/detail/less_with_sign.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+// forward declaration
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_adaptive(
+ Stepper stepper , System system , State &start_state ,
+ Time &start_time , Time end_time , Time &dt ,
+ Observer observer , controlled_stepper_tag
+);
+
+
+/* basic version */
+template< class Stepper , class System , class State , class Time , class Observer>
+Time integrate_n_steps(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time dt , size_t num_of_steps ,
+ Observer observer , stepper_tag )
+{
+ // ToDo: is there a better way to extract the final time?
+ Time t;
+ boost::for_each( make_n_step_time_range( stepper , system , start_state ,
+ start_time , dt , num_of_steps ) ,
+ obs_caller_time< Observer , Time >( t , observer ) );
+ return t;
+}
+
+
+/* controlled version */
+template< class Stepper , class System , class State , class Time , class Observer>
+Time integrate_n_steps(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time dt , size_t num_of_steps ,
+ Observer observer , controlled_stepper_tag )
+{
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
+
+ Time time = start_time;
+ Time time_step = dt;
+
+ for( size_t step = 0; step < num_of_steps ; ++step )
+ {
+ obs( start_state , time );
+ detail::integrate_adaptive( stepper , system , start_state , time , static_cast<Time>(time+time_step) , dt ,
+ null_observer() , controlled_stepper_tag() );
+ // direct computation of the time avoids error propagation happening when using time += dt
+ // we need clumsy type analysis to get boost units working here
+ time = start_time + static_cast< typename unit_value_type<Time>::type >(step+1) * time_step;
+ }
+ obs( start_state , time );
+
+ return time;
+}
+
+
+/* dense output version */
+template< class Stepper , class System , class State , class Time , class Observer>
+Time integrate_n_steps(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time dt , size_t num_of_steps ,
+ Observer observer , dense_output_stepper_tag )
+{
+ // ToDo: is there a better way to extract the final time?
+ Time t;
+ boost::for_each( make_n_step_time_range( stepper , system , start_state ,
+ start_time , dt , num_of_steps ) ,
+ obs_caller_time< Observer , Time >( t , observer ) );
+ return t;
+}
+
+
+}
+}
+}
+}
+
+#endif /* BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_N_STEPS_HPP_INCLUDED */
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp
new file mode 100644
index 0000000000..bccc7c6b03
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp
@@ -0,0 +1,67 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/detail/integrate_times.hpp
+
+ [begin_description]
+ Default integrate times implementation.
+ [end_description]
+
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_TIMES_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_TIMES_HPP_INCLUDED
+
+#include <stdexcept>
+
+#include <boost/config.hpp>
+#include <boost/range/algorithm/for_each.hpp>
+
+#include <boost/numeric/odeint/util/unwrap_reference.hpp>
+#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
+#include <boost/numeric/odeint/util/detail/less_with_sign.hpp>
+#include <boost/numeric/odeint/iterator/times_time_iterator.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/functors.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+
+
+/*
+ * integrate_times for all steppers
+ */
+template< class Stepper , class System , class State , class TimeIterator , class Time , class Observer , class StepperTag >
+size_t integrate_times(
+ Stepper stepper , System system , State &start_state ,
+ TimeIterator start_time , TimeIterator end_time , Time dt ,
+ Observer observer , StepperTag
+)
+{
+ size_t obs_calls = 0;
+
+ boost::for_each( make_times_time_range( stepper , system , start_state ,
+ start_time , end_time , dt ) ,
+ // should we use traits<Stepper>::state_type here instead of State? NO!
+ obs_caller< Observer >( obs_calls , observer ) );
+
+ // step integration steps gives step+1 observer calls
+ return obs_calls-1;
+}
+
+
+} // namespace detail
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_ADAPTIVE_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/integrate.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate.hpp
new file mode 100644
index 0000000000..9d88ef9ce1
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate.hpp
@@ -0,0 +1,111 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/integrate.hpp
+
+ [begin_description]
+ Convenience methods which choose the stepper for the current ODE.
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_HPP_INCLUDED
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp>
+#include <boost/numeric/odeint/stepper/controlled_runge_kutta.hpp>
+#include <boost/numeric/odeint/iterator/integrate/null_observer.hpp>
+#include <boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp>
+
+// for has_value_type trait
+#include <boost/numeric/odeint/algebra/detail/extract_value_type.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+/*
+ * ToDo :
+ *
+ * determine type of dxdt for units
+ *
+ */
+template< class System , class State , class Time , class Observer >
+typename boost::enable_if< typename has_value_type<State>::type , size_t >::type
+integrate( System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer )
+{
+ typedef controlled_runge_kutta< runge_kutta_dopri5< State , typename State::value_type , State , Time > > stepper_type;
+ return integrate_adaptive( stepper_type() , system , start_state , start_time , end_time , dt , observer );
+}
+
+
+
+/*
+ * the two overloads are needed in order to solve the forwarding problem
+ */
+template< class System , class State , class Time >
+size_t integrate( System system , State &start_state , Time start_time , Time end_time , Time dt )
+{
+ return integrate( system , start_state , start_time , end_time , dt , null_observer() );
+}
+
+
+/**
+ * \fn integrate( System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer )
+ * \brief Integrates the ODE.
+ *
+ * Integrates the ODE given by system from start_time to end_time starting
+ * with start_state as initial condition and dt as initial time step.
+ * This function uses a dense output dopri5 stepper and performs an adaptive
+ * integration with step size control, thus dt changes during the integration.
+ * This method uses standard error bounds of 1E-6.
+ * After each step, the observer is called.
+ *
+ * \param system The system function to solve, hence the r.h.s. of the
+ * ordinary differential equation.
+ * \param start_state The initial state.
+ * \param start_time Start time of the integration.
+ * \param end_time End time of the integration.
+ * \param dt Initial step size, will be adjusted during the integration.
+ * \param observer Observer that will be called after each time step.
+ * \return The number of steps performed.
+ */
+
+
+/**
+ * \fn integrate( System system , State &start_state , Time start_time , Time end_time , Time dt )
+ * \brief Integrates the ODE without observer calls.
+ *
+ * Integrates the ODE given by system from start_time to end_time starting
+ * with start_state as initial condition and dt as initial time step.
+ * This function uses a dense output dopri5 stepper and performs an adaptive
+ * integration with step size control, thus dt changes during the integration.
+ * This method uses standard error bounds of 1E-6.
+ * No observer is called.
+ *
+ * \param system The system function to solve, hence the r.h.s. of the
+ * ordinary differential equation.
+ * \param start_state The initial state.
+ * \param start_time Start time of the integration.
+ * \param end_time End time of the integration.
+ * \param dt Initial step size, will be adjusted during the integration.
+ * \return The number of steps performed.
+ */
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp
new file mode 100644
index 0000000000..3229a00c6c
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp
@@ -0,0 +1,129 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/integrate_adaptive.hpp
+
+ [begin_description]
+ Adaptive integration of ODEs.
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_ADAPTIVE_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_ADAPTIVE_HPP_INCLUDED
+
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/integrate/null_observer.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+/*
+ * the two overloads are needed in order to solve the forwarding problem
+ */
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_adaptive(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer )
+{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
+ return detail::integrate_adaptive(
+ stepper , system , start_state ,
+ start_time , end_time , dt ,
+ observer , stepper_category() );
+
+ /*
+ * Suggestion for a new extendable version:
+ *
+ * integrator_adaptive< Stepper , System, State , Time , Observer , typename Stepper::stepper_category > integrator;
+ * return integrator.run( stepper , system , start_state , start_time , end_time , dt , observer );
+ */
+}
+
+/**
+ * \brief Second version to solve the forwarding problem,
+ * can be called with Boost.Range as start_state.
+ */
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_adaptive(
+ Stepper stepper , System system , const State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer )
+{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
+ return detail::integrate_adaptive(
+ stepper , system , start_state ,
+ start_time , end_time , dt ,
+ observer , stepper_category() );
+}
+
+
+
+
+/**
+ * \brief integrate_adaptive without an observer.
+ */
+template< class Stepper , class System , class State , class Time >
+size_t integrate_adaptive(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt )
+{
+ return integrate_adaptive( stepper , system , start_state , start_time , end_time , dt , null_observer() );
+}
+
+/**
+ * \brief Second version to solve the forwarding problem,
+ * can be called with Boost.Range as start_state.
+ */
+template< class Stepper , class System , class State , class Time >
+size_t integrate_adaptive(
+ Stepper stepper , System system , const State &start_state ,
+ Time start_time , Time end_time , Time dt )
+{
+ return integrate_adaptive( stepper , system , start_state , start_time , end_time , dt , null_observer() );
+}
+
+
+/************* DOXYGEN ************/
+
+ /**
+ * \fn integrate_adaptive( Stepper stepper , System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer )
+ * \brief Integrates the ODE with adaptive step size.
+ *
+ * This function integrates the ODE given by system with the given stepper.
+ * The observer is called after each step. If the stepper has no error
+ * control, the step size remains constant and the observer is called at
+ * equidistant time points t0+n*dt. If the stepper is a ControlledStepper,
+ * the step size is adjusted and the observer is called in non-equidistant
+ * intervals.
+ *
+ * \param stepper The stepper to be used for numerical integration.
+ * \param system Function/Functor defining the rhs of the ODE.
+ * \param start_state The initial condition x0.
+ * \param start_time The initial time t0.
+ * \param end_time The final integration time tend.
+ * \param dt The time step between observer calls, _not_ necessarily the
+ * time step of the integration.
+ * \param observer Function/Functor called at equidistant time intervals.
+ * \return The number of steps performed.
+ */
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_ADAPTIVE_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_const.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_const.hpp
new file mode 100644
index 0000000000..ffcea6c193
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_const.hpp
@@ -0,0 +1,158 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/integrate_const.hpp
+
+ [begin_description]
+ Constant integration of ODEs, meaning that the state of the ODE is observed on constant time intervals.
+ The routines makes full use of adaptive and dense-output methods.
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_CONST_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_CONST_HPP_INCLUDED
+
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/integrate/null_observer.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+
+
+
+/*
+ * Integrates with constant time step dt.
+ */
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_const(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer
+)
+{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
+ // we want to get as fast as possible to the end
+ if( boost::is_same< null_observer , Observer >::value )
+ {
+ return detail::integrate_adaptive(
+ stepper , system , start_state ,
+ start_time , end_time , dt ,
+ observer , stepper_category() );
+ }
+ else
+ {
+ return detail::integrate_const( stepper , system , start_state ,
+ start_time , end_time , dt ,
+ observer , stepper_category() );
+ }
+}
+
+/**
+ * \brief Second version to solve the forwarding problem,
+ * can be called with Boost.Range as start_state.
+ */
+template< class Stepper , class System , class State , class Time , class Observer >
+size_t integrate_const(
+ Stepper stepper , System system , const State &start_state ,
+ Time start_time , Time end_time , Time dt ,
+ Observer observer
+)
+{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
+ // we want to get as fast as possible to the end
+ if( boost::is_same< null_observer , Observer >::value )
+ {
+ return detail::integrate_adaptive(
+ stepper , system , start_state ,
+ start_time , end_time , dt ,
+ observer , stepper_category() );
+ }
+ else
+ {
+ return detail::integrate_const( stepper , system , start_state ,
+ start_time , end_time , dt ,
+ observer , stepper_category() );
+ }
+}
+
+
+
+
+
+/**
+ * \brief integrate_const without observer calls
+ */
+template< class Stepper , class System , class State , class Time >
+size_t integrate_const(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time end_time , Time dt
+)
+{
+ return integrate_const( stepper , system , start_state , start_time , end_time , dt , null_observer() );
+}
+
+/**
+ * \brief Second version to solve the forwarding problem,
+ * can be called with Boost.Range as start_state.
+ */
+template< class Stepper , class System , class State , class Time >
+size_t integrate_const(
+ Stepper stepper , System system , const State &start_state ,
+ Time start_time , Time end_time , Time dt
+)
+{
+ return integrate_const( stepper , system , start_state , start_time , end_time , dt , null_observer() );
+}
+
+
+
+
+
+
+/********* DOXYGEN *********/
+ /**
+ * \fn integrate_const( Stepper stepper , System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer )
+ * \brief Integrates the ODE with constant step size.
+ *
+ * Integrates the ODE defined by system using the given stepper.
+ * This method ensures that the observer is called at constant intervals dt.
+ * If the Stepper is a normal stepper without step size control, dt is also
+ * used for the numerical scheme. If a ControlledStepper is provided, the
+ * algorithm might reduce the step size to meet the error bounds, but it is
+ * ensured that the observer is always called at equidistant time points
+ * t0 + n*dt. If a DenseOutputStepper is used, the step size also may vary
+ * and the dense output is used to call the observer at equidistant time
+ * points.
+ *
+ * \param stepper The stepper to be used for numerical integration.
+ * \param system Function/Functor defining the rhs of the ODE.
+ * \param start_state The initial condition x0.
+ * \param start_time The initial time t0.
+ * \param end_time The final integration time tend.
+ * \param dt The time step between observer calls, _not_ necessarily the
+ * time step of the integration.
+ * \param observer Function/Functor called at equidistant time intervals.
+ * \return The number of steps performed.
+ */
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_CONST_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp
new file mode 100644
index 0000000000..8f30c77969
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp
@@ -0,0 +1,125 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/integrate_n_steps.hpp
+
+ [begin_description]
+ Integration of n steps with constant time size. Adaptive and dense-output methods are fully supported.
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_N_STEPS_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_N_STEPS_HPP_INCLUDED
+
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/integrate/null_observer.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+/*
+ * Integrates n steps
+ *
+ * the two overloads are needed in order to solve the forwarding problem
+ */
+template< class Stepper , class System , class State , class Time , class Observer>
+Time integrate_n_steps(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time dt , size_t num_of_steps ,
+ Observer observer )
+{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
+ return detail::integrate_n_steps(
+ stepper , system , start_state ,
+ start_time , dt , num_of_steps ,
+ observer , stepper_category() );
+}
+
+/**
+ * \brief Solves the forwarding problem, can be called with Boost.Range as start_state.
+ */
+template< class Stepper , class System , class State , class Time , class Observer >
+Time integrate_n_steps(
+ Stepper stepper , System system , const State &start_state ,
+ Time start_time , Time dt , size_t num_of_steps ,
+ Observer observer )
+{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
+ return detail::integrate_n_steps(
+ stepper , system , start_state ,
+ start_time , dt , num_of_steps ,
+ observer , stepper_category() );
+}
+
+
+/**
+ * \brief The same function as above, but without observer calls.
+ */
+template< class Stepper , class System , class State , class Time >
+Time integrate_n_steps(
+ Stepper stepper , System system , State &start_state ,
+ Time start_time , Time dt , size_t num_of_steps )
+{
+ return integrate_n_steps( stepper , system , start_state , start_time , dt , num_of_steps , null_observer() );
+}
+
+/**
+ * \brief Solves the forwarding problem, can be called with Boost.Range as start_state.
+ */
+template< class Stepper , class System , class State , class Time >
+Time integrate_n_steps(
+ Stepper stepper , System system , const State &start_state ,
+ Time start_time , Time dt , size_t num_of_steps )
+{
+ return integrate_n_steps( stepper , system , start_state , start_time , dt , num_of_steps , null_observer() );
+}
+
+
+
+/************* DOXYGEN *************/
+ /**
+ * \fn Time integrate_n_steps( Stepper stepper , System system , State &start_state , Time start_time , Time dt , size_t num_of_steps , Observer observer )
+ * \brief Integrates the ODE with constant step size.
+ *
+ * This function is similar to integrate_const. The observer is called at
+ * equidistant time intervals t0 + n*dt.
+ * If the Stepper is a normal stepper without step size control, dt is also
+ * used for the numerical scheme. If a ControlledStepper is provided, the
+ * algorithm might reduce the step size to meet the error bounds, but it is
+ * ensured that the observer is always called at equidistant time points
+ * t0 + n*dt. If a DenseOutputStepper is used, the step size also may vary
+ * and the dense output is used to call the observer at equidistant time
+ * points. The final integration time is always t0 + num_of_steps*dt.
+ *
+ * \param stepper The stepper to be used for numerical integration.
+ * \param system Function/Functor defining the rhs of the ODE.
+ * \param start_state The initial condition x0.
+ * \param start_time The initial time t0.
+ * \param dt The time step between observer calls, _not_ necessarily the
+ * time step of the integration.
+ * \param num_of_steps Number of steps to be performed
+ * \param observer Function/Functor called at equidistant time intervals.
+ * \return The number of steps performed.
+ */
+
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_N_STEPS_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_times.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_times.hpp
new file mode 100644
index 0000000000..1bbd836731
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/integrate_times.hpp
@@ -0,0 +1,133 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/integrate_times.hpp
+
+ [begin_description]
+ Integration of ODEs with observation at user defined points
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_TIMES_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_TIMES_HPP_INCLUDED
+
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/range.hpp>
+
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/integrate/null_observer.hpp>
+#include <boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+/*
+ * the two overloads are needed in order to solve the forwarding problem
+ */
+template< class Stepper , class System , class State , class TimeIterator , class Time , class Observer >
+size_t integrate_times(
+ Stepper stepper , System system , State &start_state ,
+ TimeIterator times_start , TimeIterator times_end , Time dt ,
+ Observer observer )
+{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
+ return detail::integrate_times(
+ stepper , system , start_state ,
+ times_start , times_end , dt ,
+ observer , stepper_category() );
+}
+
+/**
+ * \brief Solves the forwarding problem, can be called with Boost.Range as start_state.
+ */
+template< class Stepper , class System , class State , class TimeIterator , class Time , class Observer >
+size_t integrate_times(
+ Stepper stepper , System system , const State &start_state ,
+ TimeIterator times_start , TimeIterator times_end , Time dt ,
+ Observer observer )
+{
+ typedef typename odeint::unwrap_reference< Stepper >::type::stepper_category stepper_category;
+ return detail::integrate_times(
+ stepper , system , start_state ,
+ times_start , times_end , dt ,
+ observer , stepper_category() );
+}
+
+/**
+ * \brief The same function as above, but without observer calls.
+ */
+template< class Stepper , class System , class State , class TimeRange , class Time , class Observer >
+size_t integrate_times(
+ Stepper stepper , System system , State &start_state ,
+ const TimeRange &times , Time dt ,
+ Observer observer )
+{
+ return integrate_times(
+ stepper , system , start_state ,
+ boost::begin( times ) , boost::end( times ) , dt , observer );
+}
+
+/**
+ * \brief Solves the forwarding problem, can be called with Boost.Range as start_state.
+ */
+template< class Stepper , class System , class State , class TimeRange , class Time , class Observer >
+size_t integrate_times(
+ Stepper stepper , System system , const State &start_state ,
+ const TimeRange &times , Time dt ,
+ Observer observer )
+{
+ return integrate_times(
+ stepper , system , start_state ,
+ boost::begin( times ) , boost::end( times ) , dt , observer );
+}
+
+
+
+
+/********* DOXYGEN ***********/
+
+ /**
+ * \fn size_t integrate_times( Stepper stepper , System system , State &start_state , TimeIterator times_start , TimeIterator times_end , Time dt , Observer observer )
+ * \brief Integrates the ODE with observer calls at given time points.
+ *
+ * Integrates the ODE given by system using the given stepper. This function
+ * does observer calls at the subsequent time points given by the range
+ * times_start, times_end. If the stepper has not step size control, the
+ * step size might be reduced occasionally to ensure observer calls exactly
+ * at the time points from the given sequence. If the stepper is a
+ * ControlledStepper, the step size is adjusted to meet the error bounds,
+ * but also might be reduced occasionally to ensure correct observer calls.
+ * If a DenseOutputStepper is provided, the dense output functionality is
+ * used to call the observer at the given times. The end time of the
+ * integration is always *(end_time-1).
+ *
+ * \param stepper The stepper to be used for numerical integration.
+ * \param system Function/Functor defining the rhs of the ODE.
+ * \param start_state The initial condition x0.
+ * \param times_start Iterator to the start time
+ * \param times_end Iterator to the end time
+ * \param dt The time step between observer calls, _not_ necessarily the
+ * time step of the integration.
+ * \param observer Function/Functor called at equidistant time intervals.
+ * \return The number of steps performed.
+ */
+
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_TIMES_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/null_observer.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/null_observer.hpp
new file mode 100644
index 0000000000..4d9a070a62
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/null_observer.hpp
@@ -0,0 +1,38 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/null_observer.hpp
+
+ [begin_description]
+ null_observer
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_NULL_OBSERVER_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_NULL_OBSERVER_HPP_INCLUDED
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+struct null_observer
+{
+ template< class State , class Time >
+ void operator()( const State& /* x */ , Time /* t */ ) const
+ {
+
+ }
+};
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_NULL_OBSERVER_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/integrate/observer_collection.hpp b/3party/boost/boost/numeric/odeint/iterator/integrate/observer_collection.hpp
new file mode 100644
index 0000000000..26101a3afc
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/integrate/observer_collection.hpp
@@ -0,0 +1,56 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/integrate/observer_collection.hpp
+
+ [begin_description]
+ Collection of observers, which are all called during the evolution of the ODE.
+ [end_description]
+
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_INTEGRATE_OBSERVER_COLLECTION_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_INTEGRATE_OBSERVER_COLLECTION_HPP_INCLUDED
+
+#include <vector>
+
+#include <boost/function.hpp>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template< class State , class Time >
+class observer_collection
+{
+public:
+
+ typedef boost::function< void( const State& , const Time& ) > observer_type;
+ typedef std::vector< observer_type > collection_type;
+
+ void operator()( const State& x , Time t )
+ {
+ for( size_t i=0 ; i<m_observers.size() ; ++i )
+ m_observers[i]( x , t );
+ }
+
+ collection_type& observers( void ) { return m_observers; }
+ const collection_type& observers( void ) const { return m_observers; }
+
+private:
+
+ collection_type m_observers;
+};
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_INTEGRATE_OBSERVER_COLLECTION_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/n_step_iterator.hpp b/3party/boost/boost/numeric/odeint/iterator/n_step_iterator.hpp
new file mode 100644
index 0000000000..195e981d65
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/n_step_iterator.hpp
@@ -0,0 +1,168 @@
+
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/n_step_iterator.hpp
+
+ [begin_description]
+ Iterator for iterating through the solution of an ODE with constant step size performing exactly n steps.
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_N_STEP_ITERATOR_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_N_STEP_ITERATOR_HPP_INCLUDED
+
+
+#include <boost/numeric/odeint/util/stepper_traits.hpp>
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+#include <boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+ /* use the n_step_iterator_impl with the right tags */
+ template< class Stepper , class System , class State
+#ifndef DOXYGEN_SKIP
+ , class StepperTag = typename base_tag< typename traits::stepper_category< Stepper >::type >::type
+#endif
+ >
+ class n_step_iterator : public n_step_iterator_impl<
+ n_step_iterator< Stepper , System , State , StepperTag > ,
+ Stepper , System , State , detail::ode_state_iterator_tag , StepperTag
+ >
+ {
+ typedef typename traits::time_type< Stepper >::type time_type;
+ typedef n_step_iterator< Stepper , System , State , StepperTag > iterator_type;
+
+ public:
+ n_step_iterator( Stepper stepper , System sys , State &s , time_type t , time_type dt , size_t num_of_steps )
+ : n_step_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_iterator_tag , StepperTag >( stepper , sys , s , t , dt , num_of_steps )
+ {}
+
+ n_step_iterator( Stepper stepper , System sys , State &s )
+ : n_step_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_iterator_tag , StepperTag >( stepper , sys , s )
+ {}
+ };
+
+ /* make functions */
+
+ template< class Stepper , class System , class State >
+ n_step_iterator< Stepper , System, State > make_n_step_iterator_begin(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t ,
+ typename traits::time_type< Stepper >::type dt ,
+ size_t num_of_steps )
+ {
+ return n_step_iterator< Stepper , System , State >( stepper , system , x , t , dt , num_of_steps );
+ }
+
+ template< class Stepper , class System , class State >
+ n_step_iterator< Stepper , System , State > make_n_step_iterator_end(
+ Stepper stepper ,
+ System system ,
+ State &x )
+ {
+ return n_step_iterator< Stepper , System , State >( stepper , system , x );
+ }
+
+ template< class Stepper , class System , class State >
+ std::pair< n_step_iterator< Stepper , System , State > , n_step_iterator< Stepper , System , State > >
+ make_n_step_range(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t ,
+ typename traits::time_type< Stepper >::type dt ,
+ size_t num_of_steps )
+ {
+ return std::make_pair(
+ n_step_iterator< Stepper , System , State >( stepper , system , x , t , dt , num_of_steps ) ,
+ n_step_iterator< Stepper , System , State >( stepper , system , x )
+ );
+ }
+
+
+ /**
+ * \class n_step_iterator
+ *
+ * \brief ODE Iterator with constant step size. The value type of this iterator is the state type of the stepper.
+ *
+ * Implements an iterator representing the solution of an ODE starting from t
+ * with n steps and a constant step size dt.
+ * After each iteration the iterator dereferences to the state x at the next
+ * time t+dt.
+ * This iterator can be used with Steppers and
+ * DenseOutputSteppers and it always makes use of the all the given steppers
+ * capabilities. A for_each over such an iterator range behaves similar to
+ * the integrate_n_steps routine.
+ *
+ * n_step_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ * \tparam State The state type of the ODE.
+ */
+
+
+ /**
+ * \fn make_n_step_iterator_begin( Stepper stepper , System system , State &x , typename traits::time_type< Stepper >::type t , typename traits::time_type< Stepper >::type dt , size_t num_of_steps )
+ *
+ * \brief Factory function for n_step_iterator. Constructs a begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param dt The initial time step.
+ * \param num_of_steps The number of steps to be executed.
+ * \returns The n-step iterator.
+ */
+
+
+ /**
+ * \fn make_n_step_iterator_end( Stepper stepper , System system , State &x )
+ * \brief Factory function for n_step_iterator. Constructs an end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \returns The const_step_iterator.
+ */
+
+
+ /**
+ * \fn make_n_step_range( Stepper stepper , System system , State &x , typename traits::time_type< Stepper >::type t , typename traits::time_type< Stepper >::type dt , , size_t num_of_steps )
+ *
+ * \brief Factory function to construct a single pass range of n-step iterators. A range is here a pair
+ * of n_step_iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator store a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param dt The initial time step.
+ * \param num_of_steps The number of steps to be executed.
+ * \returns The n-step range.
+ */
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_CONST_N_STEP_ITERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/n_step_time_iterator.hpp b/3party/boost/boost/numeric/odeint/iterator/n_step_time_iterator.hpp
new file mode 100644
index 0000000000..8ed17dee43
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/n_step_time_iterator.hpp
@@ -0,0 +1,169 @@
+
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/n_step_time_iterator.hpp
+
+ [begin_description]
+ Iterator for iterating through the solution of an ODE with constant step size performing exactly n steps.
+ The dereferenced type contains also the time.
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_N_STEP_TIME_ITERATOR_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_N_STEP_TIME_ITERATOR_HPP_INCLUDED
+
+
+#include <boost/numeric/odeint/util/stepper_traits.hpp>
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+#include <boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+ /* use the n_step_iterator_impl with the right tags */
+ template< class Stepper , class System , class State
+#ifndef DOXYGEN_SKIP
+ , class StepperTag = typename base_tag< typename traits::stepper_category< Stepper >::type >::type
+#endif
+ >
+ class n_step_time_iterator : public n_step_iterator_impl<
+ n_step_time_iterator< Stepper , System , State , StepperTag > ,
+ Stepper , System , State , detail::ode_state_time_iterator_tag , StepperTag
+ >
+ {
+ typedef typename traits::time_type< Stepper >::type time_type;
+ typedef n_step_time_iterator< Stepper , System , State , StepperTag > iterator_type;
+
+ public:
+ n_step_time_iterator( Stepper stepper , System sys , State &s , time_type t , time_type dt , size_t num_of_steps )
+ : n_step_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_time_iterator_tag , StepperTag >( stepper , sys , s , t , dt , num_of_steps )
+ {}
+
+ n_step_time_iterator( Stepper stepper , System sys , State &s )
+ : n_step_iterator_impl< iterator_type , Stepper , System , State , detail::ode_state_time_iterator_tag , StepperTag >( stepper , sys , s )
+ {}
+ };
+
+ /* make functions */
+
+ template< class Stepper , class System , class State >
+ n_step_time_iterator< Stepper , System, State > make_n_step_time_iterator_begin(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t ,
+ typename traits::time_type< Stepper >::type dt ,
+ size_t num_of_steps )
+ {
+ return n_step_time_iterator< Stepper , System , State >( stepper , system , x , t , dt , num_of_steps );
+ }
+
+ template< class Stepper , class System , class State >
+ n_step_time_iterator< Stepper , System , State > make_n_step_time_iterator_end(
+ Stepper stepper ,
+ System system ,
+ State &x )
+ {
+ return n_step_time_iterator< Stepper , System , State >( stepper , system , x );
+ }
+
+ template< class Stepper , class System , class State >
+ std::pair< n_step_time_iterator< Stepper , System , State > , n_step_time_iterator< Stepper , System , State > >
+ make_n_step_time_range(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ typename traits::time_type< Stepper >::type t ,
+ typename traits::time_type< Stepper >::type dt ,
+ size_t num_of_steps )
+ {
+ return std::make_pair(
+ n_step_time_iterator< Stepper , System , State >( stepper , system , x , t , dt , num_of_steps ) ,
+ n_step_time_iterator< Stepper , System , State >( stepper , system , x )
+ );
+ }
+
+
+ /**
+ * \class n_step_time_iterator
+ *
+ * \brief ODE Iterator with constant step size. The value type of this iterator is a std::pair containing state and time.
+ *
+ * Implements an iterator representing the solution of an ODE starting from t
+ * with n steps and a constant step size dt.
+ * After each iteration the iterator dereferences to a pair of state and time at the next
+ * time t+dt.
+ * This iterator can be used with Steppers and
+ * DenseOutputSteppers and it always makes use of the all the given steppers
+ * capabilities. A for_each over such an iterator range behaves similar to
+ * the integrate_n_steps routine.
+ *
+ * n_step_time_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is pair of state and time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ * \tparam State The state type of the ODE.
+ */
+
+
+ /**
+ * \fn make_n_step_time_iterator_begin( Stepper stepper , System system , State &x , typename traits::time_type< Stepper >::type t , typename traits::time_type< Stepper >::type dt , size_t num_of_steps )
+ *
+ * \brief Factory function for n_step_time_iterator. Constructs a begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param dt The initial time step.
+ * \param num_of_steps The number of steps to be executed.
+ * \returns The n-step iterator.
+ */
+
+
+ /**
+ * \fn make_n_step_time_iterator_end( Stepper stepper , System system , State &x )
+ * \brief Factory function for n_step_time_iterator. Constructs an end iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \returns The const_step_iterator.
+ */
+
+
+ /**
+ * \fn make_n_step_time_range( Stepper stepper , System system , State &x , typename traits::time_type< Stepper >::type t , typename traits::time_type< Stepper >::type dt , size_t num_of_steps )
+ *
+ * \brief Factory function to construct a single pass range of n-step iterators. A range is here a pair
+ * of n_step_time_iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator store a reference of s and changes its value during the iteration.
+ * \param t The initial time.
+ * \param dt The initial time step.
+ * \param num_of_steps The number of steps to be executed.
+ * \returns The n-step range.
+ */
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_CONST_N_STEP_TIME_ITERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/times_iterator.hpp b/3party/boost/boost/numeric/odeint/iterator/times_iterator.hpp
new file mode 100644
index 0000000000..e6c9b85b78
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/times_iterator.hpp
@@ -0,0 +1,189 @@
+
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/times_iterator.hpp
+
+ [begin_description]
+ Iterator for iterating through the solution of an ODE with oscillator calls at times from a given sequence.
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_TIMES_ITERATOR_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_TIMES_ITERATOR_HPP_INCLUDED
+
+
+#include <boost/numeric/odeint/util/stepper_traits.hpp>
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+#include <boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+ /* use the times_iterator_impl with the right tags */
+ template< class Stepper , class System , class State , class TimeIterator
+#ifndef DOXYGEN_SKIP
+ , class StepperTag = typename base_tag< typename traits::stepper_category< Stepper >::type >::type
+#endif
+ >
+ class times_iterator : public times_iterator_impl<
+ times_iterator< Stepper , System , State , TimeIterator , StepperTag > ,
+ Stepper , System , State , TimeIterator , detail::ode_state_iterator_tag , StepperTag
+ >
+ {
+ typedef typename traits::time_type< Stepper >::type time_type;
+ typedef times_iterator< Stepper , System , State , TimeIterator , StepperTag > iterator_type;
+
+ public:
+ times_iterator( Stepper stepper , System sys , State &s ,
+ TimeIterator t_start , TimeIterator t_end , time_type dt )
+ : times_iterator_impl< iterator_type , Stepper , System , State , TimeIterator, detail::ode_state_iterator_tag , StepperTag >( stepper , sys , s , t_start , t_end , dt )
+ {}
+
+ times_iterator( Stepper stepper , System sys , State &s )
+ : times_iterator_impl< iterator_type , Stepper , System , State , TimeIterator , detail::ode_state_iterator_tag , StepperTag >( stepper , sys , s )
+ {}
+ };
+
+ /* make functions */
+
+ template< class Stepper , class System , class State , class TimeIterator >
+ times_iterator< Stepper , System, State , TimeIterator > make_times_iterator_begin(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ TimeIterator t_start ,
+ TimeIterator t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return times_iterator< Stepper , System , State , TimeIterator >( stepper , system , x , t_start , t_end , dt );
+ }
+
+ // ToDo: requires to specifically provide the TimeIterator template parameter, can this be improved?
+ template< class TimeIterator , class Stepper , class System , class State >
+ times_iterator< Stepper , System , State , TimeIterator > make_times_iterator_end(
+ Stepper stepper ,
+ System system ,
+ State &x )
+ //TimeIterator t_end )
+ {
+ return times_iterator< Stepper , System , State , TimeIterator >( stepper , system , x );
+ }
+
+ template< class Stepper , class System , class State , class TimeIterator >
+ std::pair< times_iterator< Stepper , System , State , TimeIterator > ,
+ times_iterator< Stepper , System , State , TimeIterator > >
+ make_times_range(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ TimeIterator t_start ,
+ TimeIterator t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return std::make_pair(
+ times_iterator< Stepper , System , State , TimeIterator >( stepper , system , x , t_start , t_end , dt ) ,
+ times_iterator< Stepper , System , State , TimeIterator >( stepper , system , x )
+ );
+ }
+
+
+ /**
+ * \class times_iterator
+ *
+ * \brief ODE Iterator with given evaluation points. The value type of this iterator is the state type of the stepper.
+ *
+ * Implements an iterator representing the solution of an ODE from *t_start
+ * to *t_end evaluated at time points given by the sequence t_start to t_end.
+ * t_start and t_end are iterators representing a sequence of time points
+ * where the solution of the ODE should be evaluated.
+ * After each iteration the iterator dereferences to the state x at the next
+ * time *t_start++ until t_end is reached.
+ * This iterator can be used with Steppers, ControlledSteppers and
+ * DenseOutputSteppers and it always makes use of the all the given steppers
+ * capabilities. A for_each over such an iterator range behaves similar to
+ * the integrate_times routine.
+ *
+ * times_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ * \tparam State The state type of the ODE.
+ * \tparam TimeIterator The iterator type for the sequence of time points.
+ */
+
+
+
+ /**
+ * \fn make_times_iterator_begin( Stepper stepper ,
+ System system ,
+ State &x ,
+ TimeIterator t_start ,
+ TimeIterator t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function for times_iterator. Constructs a begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \param t_start Begin iterator of the sequence of evaluation time points.
+ * \param t_end End iterator of the sequence of evaluation time points.
+ * \param dt The initial time step.
+ * \returns The times iterator.
+ */
+
+
+ /**
+ * \fn make_times_iterator_end( Stepper stepper , System system , State &x )
+ * \brief Factory function for times_iterator. Constructs an end iterator.
+ *
+ * \tparam TimesIterator The iterator type of the time sequence, must be specifically provided.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \returns The times iterator.
+ *
+ * This function needs the TimeIterator type specifically defined as a
+ * template parameter.
+ */
+
+
+ /**
+ * \fn make_times_range( Stepper stepper , System system , State &x ,
+ TimeIterator t_start ,
+ TimeIterator t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function to construct a single pass range of times iterators. A range is here a pair
+ * of times_iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator store a reference of s and changes its value during the iteration.
+ * \param t_start Begin iterator of the sequence of evaluation time points.
+ * \param t_end End iterator of the sequence of evaluation time points.
+ * \param dt The initial time step.
+ * \returns The times iterator range.
+ */
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_TIMES_ITERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/iterator/times_time_iterator.hpp b/3party/boost/boost/numeric/odeint/iterator/times_time_iterator.hpp
new file mode 100644
index 0000000000..94fd9a3f0f
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/iterator/times_time_iterator.hpp
@@ -0,0 +1,193 @@
+
+/*
+ [auto_generated]
+ boost/numeric/odeint/iterator/times_time_iterator.hpp
+
+ [begin_description]
+ Iterator for iterating through the solution of an ODE with oscillator calls at times from a given sequence.
+ The dereferenced type contains also the time.
+ [end_description]
+
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_ITERATOR_TIMES_TIME_ITERATOR_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_ITERATOR_TIMES_TIME_ITERATOR_HPP_INCLUDED
+
+
+#include <boost/numeric/odeint/util/stepper_traits.hpp>
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+#include <boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp>
+#include <boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+ /* use the times_iterator_impl with the right tags */
+ template< class Stepper , class System , class State , class TimeIterator
+#ifndef DOXYGEN_SKIP
+ , class StepperTag = typename base_tag< typename traits::stepper_category< Stepper >::type >::type
+#endif
+ >
+ class times_time_iterator : public times_iterator_impl<
+ times_time_iterator< Stepper , System , State , TimeIterator , StepperTag > ,
+ Stepper , System , State , TimeIterator , detail::ode_state_time_iterator_tag , StepperTag
+ >
+ {
+ typedef typename traits::time_type< Stepper >::type time_type;
+ typedef times_time_iterator< Stepper , System , State , TimeIterator , StepperTag > iterator_type;
+
+ public:
+ times_time_iterator( Stepper stepper , System sys , State &s ,
+ TimeIterator t_start , TimeIterator t_end , time_type dt )
+ : times_iterator_impl< iterator_type , Stepper , System , State , TimeIterator, detail::ode_state_time_iterator_tag , StepperTag >( stepper , sys , s , t_start , t_end , dt )
+ {}
+
+ times_time_iterator( Stepper stepper , System sys , State &s )
+ : times_iterator_impl< iterator_type , Stepper , System , State , TimeIterator , detail::ode_state_time_iterator_tag , StepperTag >( stepper , sys , s )
+ {}
+ };
+
+ /* make functions */
+
+ template< class Stepper , class System , class State , class TimeIterator >
+ times_time_iterator< Stepper , System, State , TimeIterator > make_times_time_iterator_begin(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ TimeIterator t_start ,
+ TimeIterator t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return times_time_iterator< Stepper , System , State , TimeIterator >( stepper , system , x , t_start , t_end , dt );
+ }
+
+ // ToDo: requires to specifically provide the TimeIterator template parameter, can this be improved?
+ template< class TimeIterator , class Stepper , class System , class State >
+ times_time_iterator< Stepper , System , State , TimeIterator > make_times_time_iterator_end(
+ Stepper stepper ,
+ System system ,
+ State &x )
+ //TimeIterator t_end )
+ {
+ return times_time_iterator< Stepper , System , State , TimeIterator >( stepper , system , x );
+ }
+
+ template< class Stepper , class System , class State , class TimeIterator >
+ std::pair< times_time_iterator< Stepper , System , State , TimeIterator > ,
+ times_time_iterator< Stepper , System , State , TimeIterator > >
+ make_times_time_range(
+ Stepper stepper ,
+ System system ,
+ State &x ,
+ TimeIterator t_start ,
+ TimeIterator t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ {
+ return std::make_pair(
+ times_time_iterator< Stepper , System , State , TimeIterator >( stepper , system , x , t_start , t_end , dt ) ,
+ times_time_iterator< Stepper , System , State , TimeIterator >( stepper , system , x )
+ );
+ }
+
+
+
+
+
+ /**
+ * \class times_time_iterator
+ *
+ * \brief ODE Iterator with given evaluation points. The value type of this iterator is a std::pair containing state and time.
+ *
+ * Implements an iterator representing the solution of an ODE from *t_start
+ * to *t_end evaluated at time points given by the sequence t_start to t_end.
+ * t_start and t_end are iterators representing a sequence of time points
+ * where the solution of the ODE should be evaluated.
+ * After each iteration the iterator dereferences to a pair with the state
+ * and the time at the next evaluation point *t_start++ until t_end is reached.
+ * This iterator can be used with Steppers, ControlledSteppers and
+ * DenseOutputSteppers and it always makes use of the all the given steppers
+ * capabilities. A for_each over such an iterator range behaves similar to
+ * the integrate_times routine.
+ *
+ * times_time_iterator is a model of single-pass iterator.
+ *
+ * The value type of this iterator is a pair of state and time type.
+ *
+ * \tparam Stepper The stepper type which should be used during the iteration.
+ * \tparam System The type of the system function (ODE) which should be solved.
+ * \tparam State The state type of the ODE.
+ * \tparam TimeIterator The iterator type for the sequence of time points.
+ */
+
+
+
+ /**
+ * \fn make_times_time_iterator_begin( Stepper stepper ,
+ System system ,
+ State &x ,
+ TimeIterator t_start ,
+ TimeIterator t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function for times_time_iterator. Constructs a begin iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \param t_start Begin iterator of the sequence of evaluation time points.
+ * \param t_end End iterator of the sequence of evaluation time points.
+ * \param dt The initial time step.
+ * \returns The times_time iterator.
+ */
+
+
+ /**
+ * \fn make_times_time_iterator_end( Stepper stepper , System system , State &x )
+ * \brief Factory function for times_time_iterator. Constructs an end iterator.
+ *
+ * \tparam TimesIterator The iterator type of the time sequence, must be specifically provided.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator stores a reference of s and changes its value during the iteration.
+ * \returns The times_time iterator.
+ *
+ * This function needs the TimeIterator type specifically defined as a
+ * template parameter.
+ */
+
+
+ /**
+ * \fn make_times_time_range( Stepper stepper , System system , State &x ,
+ TimeIterator t_start ,
+ TimeIterator t_end ,
+ typename traits::time_type< Stepper >::type dt )
+ *
+ * \brief Factory function to construct a single pass range of times_time iterators. A range is here a pair
+ * of times_iterator.
+ *
+ * \param stepper The stepper to use during the iteration.
+ * \param system The system function (ODE) to solve.
+ * \param x The initial state. const_step_iterator store a reference of s and changes its value during the iteration.
+ * \param t_start Begin iterator of the sequence of evaluation time points.
+ * \param t_end End iterator of the sequence of evaluation time points.
+ * \param dt The initial time step.
+ * \returns The times_time iterator range.
+ */
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_ODEINT_ITERATOR_TIMES_TIME_ITERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/stepper/adams_bashforth.hpp b/3party/boost/boost/numeric/odeint/stepper/adams_bashforth.hpp
index 3920f92949..59ed1c9025 100644
--- a/3party/boost/boost/numeric/odeint/stepper/adams_bashforth.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/adams_bashforth.hpp
@@ -7,8 +7,10 @@
Adams-Bashforth-Moulton method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2012 Christoph Koke
+ Copyright 2013 Pascal Germroth
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -26,6 +28,8 @@
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
#include <boost/numeric/odeint/util/is_resizeable.hpp>
@@ -41,7 +45,6 @@
#include <boost/numeric/odeint/stepper/detail/rotating_buffer.hpp>
-
namespace boost {
namespace numeric {
namespace odeint {
@@ -53,8 +56,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer ,
class InitializingStepper = runge_kutta4< State , Value , Deriv , Time , Algebra , Operations, Resizer >
>
@@ -79,8 +82,9 @@ public :
typedef InitializingStepper initializing_stepper_type;
- typedef typename algebra_stepper_base< Algebra , Operations >::algebra_type algebra_type;
- typedef typename algebra_stepper_base< Algebra , Operations >::operations_type operations_type;
+ typedef algebra_stepper_base< Algebra , Operations > algebra_stepper_base_type;
+ typedef typename algebra_stepper_base_type::algebra_type algebra_type;
+ typedef typename algebra_stepper_base_type::operations_type operations_type;
#ifndef DOXYGEN_SKIP
typedef adams_bashforth< Steps , State , Value , Deriv , Time , Algebra , Operations , Resizer , InitializingStepper > stepper_type;
#endif
@@ -98,24 +102,11 @@ public :
order_type order( void ) const { return order_value; }
adams_bashforth( const algebra_type &algebra = algebra_type() )
- : m_step_storage() , m_resizer() , m_coefficients() ,
- m_steps_initialized( 0 ) , m_initializing_stepper() ,
- m_algebra( algebra )
- { }
-
- adams_bashforth( const adams_bashforth &stepper )
- : m_step_storage( stepper.m_step_storage ) , m_resizer( stepper.m_resizer ) , m_coefficients() ,
- m_steps_initialized( stepper.m_steps_initialized ) , m_initializing_stepper( stepper.m_initializing_stepper ) ,
- m_algebra( stepper.m_algebra )
+ : algebra_stepper_base_type( algebra ) ,
+ m_step_storage() , m_resizer() , m_coefficients() ,
+ m_steps_initialized( 0 ) , m_initializing_stepper()
{ }
- adams_bashforth& operator=( const adams_bashforth &stepper )
- {
- m_resizer = stepper.m_resizer;
- m_step_storage = stepper.m_step_storage;
- m_algebra = stepper.m_algebra;
- return *this;
- }
/*
@@ -186,7 +177,7 @@ public :
m_resizer.adjust_size( x , detail::bind( &stepper_type::template resize_impl<StateIn> , detail::ref( *this ) , detail::_1 ) );
- for( size_t i=0 ; i<steps-1 ; ++i )
+ for( size_t i=0 ; i+1<steps ; ++i )
{
if( i != 0 ) m_step_storage.rotate();
sys( x , m_step_storage[0].m_v , t );
@@ -209,7 +200,7 @@ public :
bool is_initialized( void ) const
{
- return m_steps_initialized >= steps;
+ return m_steps_initialized >= ( steps - 1 );
}
const initializing_stepper_type& initializing_stepper( void ) const { return m_initializing_stepper; }
@@ -227,18 +218,18 @@ private:
m_steps_initialized = 0;
}
- if( m_steps_initialized < steps - 1 )
+ if( m_steps_initialized + 1 < steps )
{
if( m_steps_initialized != 0 ) m_step_storage.rotate();
sys( in , m_step_storage[0].m_v , t );
m_initializing_stepper.do_step( system , in , m_step_storage[0].m_v , t , out , dt );
- m_steps_initialized++;
+ ++m_steps_initialized;
}
else
{
m_step_storage.rotate();
sys( in , m_step_storage[0].m_v , t );
- detail::adams_bashforth_call_algebra< steps , algebra_type , operations_type >()( m_algebra , in , out , m_step_storage , m_coefficients , dt );
+ detail::adams_bashforth_call_algebra< steps , algebra_type , operations_type >()( this->m_algebra , in , out , m_step_storage , m_coefficients , dt );
}
}
@@ -256,19 +247,10 @@ private:
step_storage_type m_step_storage;
resizer_type m_resizer;
- const detail::adams_bashforth_coefficients< value_type , steps > m_coefficients;
+ detail::adams_bashforth_coefficients< value_type , steps > m_coefficients;
size_t m_steps_initialized;
initializing_stepper_type m_initializing_stepper;
-
-
-
-
-
-
-protected:
-
- algebra_type m_algebra;
};
diff --git a/3party/boost/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp b/3party/boost/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp
index e9d96a581c..19b0239990 100644
--- a/3party/boost/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp
@@ -6,8 +6,9 @@
Implementation of the Adams-Bashforth-Moulton method, a predictor-corrector multistep method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -24,6 +25,8 @@
#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
#include <boost/numeric/odeint/util/resizer.hpp>
@@ -32,6 +35,7 @@
#include <boost/numeric/odeint/stepper/adams_moulton.hpp>
+
namespace boost {
namespace numeric {
namespace odeint {
@@ -43,8 +47,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
class adams_bashforth_moulton
@@ -72,17 +76,20 @@ public :
#ifndef DOXYGEN_SKIP
typedef adams_bashforth< steps , state_type , value_type , deriv_type , time_type , algebra_type , operations_type , resizer_type > adams_bashforth_type;
typedef adams_moulton< steps , state_type , value_type , deriv_type , time_type , algebra_type , operations_type , resizer_type > adams_moulton_type;
+ typedef adams_bashforth_moulton< steps , state_type , value_type , deriv_type , time_type , algebra_type , operations_type , resizer_type > stepper_type;
#endif //DOXYGEN_SKIP
typedef unsigned short order_type;
- static const order_type order_value = steps + 1;
+ static const order_type order_value = steps;
/** \brief Constructs the adams_bashforth class. */
adams_bashforth_moulton( void )
: m_adams_bashforth() , m_adams_moulton( m_adams_bashforth.algebra() )
+ , m_x() , m_resizer()
{ }
adams_bashforth_moulton( const algebra_type &algebra )
: m_adams_bashforth( algebra ) , m_adams_moulton( m_adams_bashforth.algebra() )
+ , m_x() , m_resizer()
{ }
order_type order( void ) const { return order_value; }
@@ -90,8 +97,7 @@ public :
template< class System , class StateInOut >
void do_step( System system , StateInOut &x , time_type t , time_type dt )
{
- m_adams_bashforth.do_step( system , x , t , dt );
- m_adams_moulton.do_step( system , x , t , dt , m_adams_bashforth.step_storage() );
+ do_step_impl1( system , x , t , dt );
}
/**
@@ -100,15 +106,13 @@ public :
template< class System , class StateInOut >
void do_step( System system , const StateInOut &x , time_type t , time_type dt )
{
- m_adams_bashforth.do_step( system , x , t , dt );
- m_adams_moulton.do_step( system , x , t , dt , m_adams_bashforth.step_storage() );
+ do_step_impl1( system , x , t , dt );
}
template< class System , class StateIn , class StateOut >
void do_step( System system , const StateIn &in , time_type t , const StateOut &out , time_type dt )
{
- m_adams_bashforth.do_step( system , in , t , out , dt );
- m_adams_moulton.do_step( system , out , t , dt , m_adams_bashforth.step_storage() );
+ do_step_impl2( system , in , t , out , dt );
}
/**
@@ -117,8 +121,7 @@ public :
template< class System , class StateIn , class StateOut >
void do_step( System system , const StateIn &in , time_type t , StateOut &out , time_type dt )
{
- m_adams_bashforth.do_step( system , in , t , out , dt );
- m_adams_moulton.do_step( system , out , t , dt , m_adams_bashforth.step_storage() );
+ do_step_impl2( system , in ,t , out , dt );
}
@@ -127,6 +130,7 @@ public :
{
m_adams_bashforth.adjust_size( x );
m_adams_moulton.adjust_size( x );
+ resize_impl( x );
}
@@ -146,9 +150,48 @@ public :
private:
+
+ template< typename System , typename StateInOut >
+ void do_step_impl1( System system , StateInOut &x , time_type t , time_type dt )
+ {
+ if( m_adams_bashforth.is_initialized() )
+ {
+ m_resizer.adjust_size( x , detail::bind( &stepper_type::template resize_impl< StateInOut > , detail::ref( *this ) , detail::_1 ) );
+ m_adams_bashforth.do_step( system , x , t , m_x.m_v , dt );
+ m_adams_moulton.do_step( system , x , m_x.m_v , t , x , dt , m_adams_bashforth.step_storage() );
+ }
+ else
+ {
+ m_adams_bashforth.do_step( system , x , t , dt );
+ }
+ }
+
+ template< typename System , typename StateIn , typename StateInOut >
+ void do_step_impl2( System system , StateIn const &in , time_type t , StateInOut & out , time_type dt )
+ {
+ if( m_adams_bashforth.is_initialized() )
+ {
+ m_resizer.adjust_size( in , detail::bind( &stepper_type::template resize_impl< StateInOut > , detail::ref( *this ) , detail::_1 ) );
+ m_adams_bashforth.do_step( system , in , t , m_x.m_v , dt );
+ m_adams_moulton.do_step( system , in , m_x.m_v , t , out , dt , m_adams_bashforth.step_storage() );
+ }
+ else
+ {
+ m_adams_bashforth.do_step( system , in , t , out , dt );
+ }
+ }
+
+
+ template< class StateIn >
+ bool resize_impl( const StateIn &x )
+ {
+ return adjust_size_by_resizeability( m_x , x , typename is_resizeable< state_type >::type() );
+ }
adams_bashforth_type m_adams_bashforth;
adams_moulton_type m_adams_moulton;
+ wrapped_state_type m_x;
+ resizer_type m_resizer;
};
diff --git a/3party/boost/boost/numeric/odeint/stepper/adams_moulton.hpp b/3party/boost/boost/numeric/odeint/stepper/adams_moulton.hpp
index eecd098731..05b4277735 100644
--- a/3party/boost/boost/numeric/odeint/stepper/adams_moulton.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/adams_moulton.hpp
@@ -7,8 +7,9 @@
which computes the corrector step in the Adams-Bashforth-Moulton method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -24,6 +25,8 @@
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
#include <boost/numeric/odeint/util/is_resizeable.hpp>
@@ -39,8 +42,6 @@
-
-
namespace boost {
namespace numeric {
namespace odeint {
@@ -55,8 +56,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
class adams_moulton
@@ -112,16 +113,16 @@ public :
*
* solves the forwarding problem
*/
- template< class System , class StateInOut , class ABBuf >
- void do_step( System system , StateInOut &in , time_type t , time_type dt , const ABBuf &buf )
+ template< class System , class StateInOut , class StateIn , class ABBuf >
+ void do_step( System system , StateInOut &x , StateIn const & pred , time_type t , time_type dt , const ABBuf &buf )
{
- do_step( system , in , t , in , dt , buf );
+ do_step( system , x , pred , t , x , dt , buf );
}
- template< class System , class StateInOut , class ABBuf >
- void do_step( System system , const StateInOut &in , time_type t , time_type dt , const ABBuf &buf )
+ template< class System , class StateInOut , class StateIn , class ABBuf >
+ void do_step( System system , const StateInOut &x , StateIn const & pred , time_type t , time_type dt , const ABBuf &buf )
{
- do_step( system , in , t , in , dt , buf );
+ do_step( system , x , pred , t , x , dt , buf );
}
@@ -131,22 +132,16 @@ public :
*
* solves the forwarding problem
*/
- template< class System , class StateIn , class StateOut , class ABBuf >
- void do_step( System system , const StateIn &in , time_type t , StateOut &out , time_type dt , const ABBuf &buf )
+ template< class System , class StateIn , class PredIn , class StateOut , class ABBuf >
+ void do_step( System system , const StateIn &in , const PredIn &pred , time_type t , StateOut &out , time_type dt , const ABBuf &buf )
{
- typename odeint::unwrap_reference< System >::type &sys = system;
- m_resizer.adjust_size( in , detail::bind( &stepper_type::template resize_impl<StateIn> , detail::ref( *this ) , detail::_1 ) );
- sys( in , m_dxdt.m_v , t );
- detail::adams_moulton_call_algebra< steps , algebra_type , operations_type >()( m_algebra , in , out , m_dxdt.m_v , buf , m_coefficients , dt );
+ do_step_impl( system , in , pred , t , out , dt , buf );
}
- template< class System , class StateIn , class StateOut , class ABBuf >
- void do_step( System system , const StateIn &in , time_type t , const StateOut &out , time_type dt , const ABBuf &buf )
+ template< class System , class StateIn , class PredIn , class StateOut , class ABBuf >
+ void do_step( System system , const StateIn &in , const PredIn &pred , time_type t , const StateOut &out , time_type dt , const ABBuf &buf )
{
- typename odeint::unwrap_reference< System >::type &sys = system;
- m_resizer.adjust_size( in , detail::bind( &stepper_type::template resize_impl<StateIn> , detail::ref( *this ) , detail::_1 ) );
- sys( in , m_dxdt.m_v , t );
- detail::adams_moulton_call_algebra< steps , algebra_type , operations_type >()( m_algebra , in , out , m_dxdt.m_v , buf , m_coefficients , dt );
+ do_step_impl( system , in , pred , t , out , dt , buf );
}
@@ -166,6 +161,17 @@ public :
private:
+
+ template< class System , class StateIn , class PredIn , class StateOut , class ABBuf >
+ void do_step_impl( System system , const StateIn &in , const PredIn &pred , time_type t , StateOut &out , time_type dt , const ABBuf &buf )
+ {
+ typename odeint::unwrap_reference< System >::type &sys = system;
+ m_resizer.adjust_size( in , detail::bind( &stepper_type::template resize_impl<StateIn> , detail::ref( *this ) , detail::_1 ) );
+ sys( pred , m_dxdt.m_v , t );
+ detail::adams_moulton_call_algebra< steps , algebra_type , operations_type >()( m_algebra , in , out , m_dxdt.m_v , buf , m_coefficients , dt );
+ }
+
+
template< class StateIn >
bool resize_impl( const StateIn &x )
{
diff --git a/3party/boost/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp b/3party/boost/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp
index db363ff519..3b014f8e18 100644
--- a/3party/boost/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp
@@ -6,8 +6,8 @@
Base class for all steppers with an algebra and operations.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp b/3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp
index cf158cf267..3ba11a4fe0 100644
--- a/3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp
@@ -6,8 +6,9 @@
Base class for all explicit Runge Kutta stepper which are also error steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -262,7 +263,7 @@ private:
{
typename odeint::unwrap_reference< System >::type &sys = system;
m_resizer.adjust_size( x , detail::bind( &internal_stepper_base_type::template resize_impl<StateInOut> , detail::ref( *this ) , detail::_1 ) );
- sys( x , m_dxdt.m_v ,t );
+ sys( x , m_dxdt.m_v , t );
this->stepper().do_step_impl( system , x , m_dxdt.m_v , t , x , dt );
}
diff --git a/3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp b/3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp
index 7bff0fb0dd..a055c7fa5f 100644
--- a/3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp
@@ -6,8 +6,9 @@
Base class for all explicit first-same-as-last Runge Kutta steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp b/3party/boost/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp
index 6e2c9cd03d..40aab80399 100644
--- a/3party/boost/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp
@@ -6,8 +6,9 @@
Base class for all explicit Runge Kutta steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp b/3party/boost/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp
index 0cdcc4fa95..ea3523e5bb 100644
--- a/3party/boost/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp
@@ -6,8 +6,9 @@
Base class for symplectic Runge-Kutta-Nystrom steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -255,30 +256,27 @@ private:
momentum_out_type &momentum_out = state_out.second;
- m_dqdt_resizer.adjust_size( coor_in , detail::bind( &internal_stepper_base_type::template resize_dqdt< coor_in_type > , detail::ref( *this ) , detail::_1 ) );
+ // m_dqdt not required when called with momentum_func only - don't resize
+ // m_dqdt_resizer.adjust_size( coor_in , detail::bind( &internal_stepper_base_type::template resize_dqdt< coor_in_type > , detail::ref( *this ) , detail::_1 ) );
m_dpdt_resizer.adjust_size( momentum_in , detail::bind( &internal_stepper_base_type::template resize_dpdt< momentum_in_type > , detail::ref( *this ) , detail::_1 ) );
// ToDo: check sizes?
- for( size_t l=0 ; l<num_of_stages ; ++l )
+ // step 0
+ this->m_algebra.for_each3( coor_out , coor_in , momentum_in ,
+ typename operations_type::template scale_sum2< value_type , time_type >( 1.0 , m_coef_a[0] * dt ) );
+ momentum_func( coor_out , m_dpdt.m_v );
+ this->m_algebra.for_each3( momentum_out , momentum_in , m_dpdt.m_v ,
+ typename operations_type::template scale_sum2< value_type , time_type >( 1.0 , m_coef_b[0] * dt ) );
+
+ for( size_t l=1 ; l<num_of_stages ; ++l )
{
- if( l == 0 )
- {
- this->m_algebra.for_each3( coor_out , coor_in , momentum_in ,
+ this->m_algebra.for_each3( coor_out , coor_out , momentum_out ,
typename operations_type::template scale_sum2< value_type , time_type >( 1.0 , m_coef_a[l] * dt ) );
- momentum_func( coor_out , m_dpdt.m_v );
- this->m_algebra.for_each3( momentum_out , momentum_in , m_dpdt.m_v ,
- typename operations_type::template scale_sum2< value_type , time_type >( 1.0 , m_coef_b[l] * dt ) );
- }
- else
- {
- this->m_algebra.for_each3( coor_out , coor_out , momentum_out ,
- typename operations_type::template scale_sum2< value_type , time_type >( 1.0 , m_coef_a[l] * dt ) );
- momentum_func( coor_out , m_dpdt.m_v );
- this->m_algebra.for_each3( momentum_out , momentum_out , m_dpdt.m_v ,
- typename operations_type::template scale_sum2< value_type , time_type >( 1.0 , m_coef_b[l] * dt ) );
- }
+ momentum_func( coor_out , m_dpdt.m_v );
+ this->m_algebra.for_each3( momentum_out , momentum_out , m_dpdt.m_v ,
+ typename operations_type::template scale_sum2< value_type , time_type >( 1.0 , m_coef_b[l] * dt ) );
}
}
diff --git a/3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer.hpp b/3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer.hpp
index e7a20d8790..b604f86a27 100644
--- a/3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer.hpp
@@ -9,8 +9,9 @@
Springer Series in Comput. Mathematics, Vol. 8, Springer-Verlag 1987, Second revised edition 1993.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -36,6 +37,8 @@
#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
#include <boost/numeric/odeint/util/is_resizeable.hpp>
@@ -52,8 +55,8 @@ template<
class Value = double ,
class Deriv = State ,
class Time = Value ,
- class Algebra = range_algebra ,
- class Operations = default_operations ,
+ class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+ class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
class bulirsch_stoer {
@@ -407,7 +410,7 @@ private:
else
{
fac = STEPFAC2 / pow BOOST_PREVENT_MACRO_SUBSTITUTION( error / STEPFAC1 , expo );
- fac = max BOOST_PREVENT_MACRO_SUBSTITUTION( facmin/STEPFAC4 , min BOOST_PREVENT_MACRO_SUBSTITUTION( 1.0/facmin , fac ) );
+ fac = max BOOST_PREVENT_MACRO_SUBSTITUTION( static_cast<value_type>(facmin/STEPFAC4) , min BOOST_PREVENT_MACRO_SUBSTITUTION( static_cast<value_type>(1.0/facmin) , fac ) );
}
return h*fac;
}
diff --git a/3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp b/3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp
index 36307ba379..c352c9605a 100644
--- a/3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp
@@ -6,8 +6,9 @@
Implementaiton of the Burlish-Stoer method with dense output
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -34,6 +35,8 @@
#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
#include <boost/numeric/odeint/util/is_resizeable.hpp>
@@ -52,8 +55,8 @@ template<
class Value = double ,
class Deriv = State ,
class Time = Value ,
- class Algebra = range_algebra ,
- class Operations = default_operations ,
+ class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+ class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
class bulirsch_stoer_dense_out {
@@ -169,11 +172,11 @@ public:
m_midpoint.set_steps( m_interval_sequence[k] );
if( k == 0 )
{
- m_midpoint.do_step( sys , in , dxdt , t , out , dt , m_mp_states[k].m_v , m_derivs[k]);
+ m_midpoint.do_step( system , in , dxdt , t , out , dt , m_mp_states[k].m_v , m_derivs[k]);
}
else
{
- m_midpoint.do_step( sys , in , dxdt , t , m_table[k-1].m_v , dt , m_mp_states[k].m_v , m_derivs[k] );
+ m_midpoint.do_step( system , in , dxdt , t , m_table[k-1].m_v , dt , m_mp_states[k].m_v , m_derivs[k] );
extrapolate( k , m_table , m_coeff , out );
// get error estimate
m_algebra.for_each3( m_err.m_v , out , m_table[0].m_v ,
diff --git a/3party/boost/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp b/3party/boost/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp
index 34439b4354..509192482c 100644
--- a/3party/boost/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp
@@ -5,8 +5,9 @@
The default controlled stepper which can be used with all explicit Runge-Kutta error steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -35,6 +36,7 @@
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
#include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
@@ -47,8 +49,8 @@ namespace odeint {
template
<
class Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations
+class Algebra ,
+class Operations
>
class default_error_checker
{
@@ -80,9 +82,9 @@ public:
algebra.for_each3( x_err , x_old , dxdt_old ,
typename operations_type::template rel_error< value_type >( m_eps_abs , m_eps_rel , m_a_x , m_a_dxdt * get_unit_value( dt ) ) );
- value_type res = algebra.reduce( x_err ,
- typename operations_type::template maximum< value_type >() , static_cast< value_type >( 0 ) );
- return res;
+ // value_type res = algebra.reduce( x_err ,
+ // typename operations_type::template maximum< value_type >() , static_cast< value_type >( 0 ) );
+ return algebra.norm_inf( x_err );
}
private:
@@ -350,9 +352,9 @@ public:
if( m_max_rel_error > 1.0 )
{
// error too large - decrease dt ,limit scaling factor to 0.2 and reset state
- dt *= max BOOST_PREVENT_MACRO_SUBSTITUTION ( static_cast<value_type>(9)/static_cast<value_type>(10) * pow( m_max_rel_error ,
- static_cast<value_type>(-1) / ( m_stepper.error_order() - 1 ) ) ,
- static_cast<value_type>(1)/static_cast<value_type> (5) );
+ dt *= max BOOST_PREVENT_MACRO_SUBSTITUTION ( static_cast<value_type>( static_cast<value_type>(9)/static_cast<value_type>(10) *
+ pow( m_max_rel_error , static_cast<value_type>(-1) / ( m_stepper.error_order() - 1 ) ) ) ,
+ static_cast<value_type>( static_cast<value_type>(1)/static_cast<value_type> (5) ) );
return fail;
}
else
@@ -360,7 +362,9 @@ public:
if( m_max_rel_error < 0.5 )
{
// error should be > 0
- m_max_rel_error = max BOOST_PREVENT_MACRO_SUBSTITUTION ( pow( 5.0 , -m_stepper.stepper_order() ) , m_max_rel_error );
+ m_max_rel_error = max BOOST_PREVENT_MACRO_SUBSTITUTION (
+ static_cast<value_type>( pow( static_cast<value_type>(5.0) , -static_cast<value_type>(m_stepper.stepper_order()) ) ) ,
+ m_max_rel_error );
//error too small - increase dt and keep the evolution and limit scaling factor to 5.0
t += dt;
dt *= static_cast<value_type>(9)/static_cast<value_type>(10) * pow( m_max_rel_error ,
@@ -712,7 +716,9 @@ public:
if( max_rel_err > 1.0 )
{
// error too large - decrease dt ,limit scaling factor to 0.2 and reset state
- dt *= max BOOST_PREVENT_MACRO_SUBSTITUTION ( static_cast<value_type>( static_cast<value_type>(9)/static_cast<value_type>(10) * pow( max_rel_err , static_cast<value_type>(-1) / ( m_stepper.error_order() - 1 ) ) ) , static_cast<value_type>( static_cast<value_type>(1)/static_cast<value_type> (5)) );
+ dt *= max BOOST_PREVENT_MACRO_SUBSTITUTION ( static_cast<value_type>( static_cast<value_type>(9)/static_cast<value_type>(10) *
+ pow( max_rel_err , static_cast<value_type>(-1) / ( m_stepper.error_order() - 1 ) ) ) ,
+ static_cast<value_type>( static_cast<value_type>(1)/static_cast<value_type> (5)) );
return fail;
}
else
@@ -720,7 +726,8 @@ public:
if( max_rel_err < 0.5 )
{ //error too small - increase dt and keep the evolution and limit scaling factor to 5.0
// error should be > 0
- max_rel_err = max BOOST_PREVENT_MACRO_SUBSTITUTION ( pow( 5.0 , -m_stepper.stepper_order() ) , max_rel_err );
+ max_rel_err = max BOOST_PREVENT_MACRO_SUBSTITUTION ( static_cast<value_type>( pow( static_cast<value_type>(5.0) , -static_cast<value_type>(m_stepper.stepper_order()) ) ) ,
+ max_rel_err );
t += dt;
dt *= static_cast<value_type>( static_cast<value_type>(9)/static_cast<value_type>(10) * pow( max_rel_err , static_cast<value_type>(-1) / m_stepper.stepper_order() ) );
return success;
diff --git a/3party/boost/boost/numeric/odeint/stepper/controlled_step_result.hpp b/3party/boost/boost/numeric/odeint/stepper/controlled_step_result.hpp
index 9537d4b63f..7f17726c57 100644
--- a/3party/boost/boost/numeric/odeint/stepper/controlled_step_result.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/controlled_step_result.hpp
@@ -6,8 +6,8 @@
Defines the result type for all controlled stepper.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp b/3party/boost/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp
index 04e714b681..b685d92bcf 100644
--- a/3party/boost/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp
@@ -7,8 +7,9 @@
not computes the result but serves as an interface.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -23,6 +24,8 @@
#include <utility>
#include <stdexcept>
+#include <boost/throw_exception.hpp>
+
#include <boost/numeric/odeint/util/bind.hpp>
#include <boost/numeric/odeint/util/copy.hpp>
@@ -137,6 +140,10 @@ public:
template< class StateOut >
void calc_state( time_type t , StateOut &x ) const
{
+ if( t == current_time() )
+ {
+ boost::numeric::odeint::copy( get_current_state() , x );
+ }
m_stepper.calc_state( x , t , get_old_state() , m_t_old , get_current_state() , m_t );
}
@@ -322,7 +329,7 @@ public:
res = m_stepper.try_step( system , get_current_state() , get_current_deriv() , m_t ,
get_old_state() , get_old_deriv() , m_dt );
if( count++ == max_count )
- throw std::overflow_error( "dense_output_controlled_explicit : too much iterations!");
+ BOOST_THROW_EXCEPTION( std::overflow_error( "dense_output_controlled_explicit : too much iterations!") );
}
while( res == fail );
toggle_current_state();
diff --git a/3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp b/3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp
index f8bcbb5e1b..168bc69202 100644
--- a/3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp
@@ -6,8 +6,8 @@
Algebra caller for the Adams Bashforth stepper.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -115,11 +115,11 @@ struct adams_bashforth_call_algebra< 7 , Algebra , Operations >
template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
{
- BOOST_ASSERT( false ); // not implemented
- // typedef typename Coefficients::value_type value_type;
- // Algebra::for_each9( out , in , steps[0] , steps[1] , steps[2] , steps[3] , steps[4] , steps[5] , steps[6]
- // typename Operations::template scale_sum8< value_type , Time , Time , Time , Time , Time , Time >(
- // 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] ) );
+ //BOOST_ASSERT( false ); // not implemented
+ typedef typename Coefficients::value_type value_type;
+ Algebra::for_each9( out , in , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , steps[5].m_v , steps[6].m_v ,
+ typename Operations::template scale_sum8< value_type , Time , Time , Time , Time , Time , Time >(
+ 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] ) );
}
};
@@ -130,11 +130,11 @@ struct adams_bashforth_call_algebra< 8 , Algebra , Operations >
template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
{
- BOOST_ASSERT( false ); // not implemented
- // typedef typename Coefficients::value_type value_type;
- // Algebra::for_each10( out , in , steps[0] , steps[1] , steps[2] , steps[3] , steps[4] , steps[5] , steps[6] , steps[7] ,
- // typename Operations::template scale_sum9< value_type , Time , Time , Time , Time , Time , Time , Time >(
- // 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] , dt * coef[7] ) );
+ //BOOST_ASSERT( false ); // not implemented
+ typedef typename Coefficients::value_type value_type;
+ Algebra::for_each10( out , in , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , steps[5].m_v , steps[6].m_v , steps[7].m_v ,
+ typename Operations::template scale_sum9< value_type , Time , Time , Time , Time , Time , Time , Time >(
+ 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] , dt * coef[7] ) );
}
};
diff --git a/3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp b/3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp
index fa38d1d720..26a9f9a6b4 100644
--- a/3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp
@@ -6,8 +6,8 @@
Definition of the coefficients for the Adams-Bashforth method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp b/3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp
index fc7cbbc3d8..f8a1505510 100644
--- a/3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp
@@ -6,8 +6,8 @@
Algebra caller for the Adams Moulton method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -114,7 +114,10 @@ struct adams_moulton_call_algebra< 7 , Algebra , Operations >
template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const
{
- BOOST_ASSERT( false ); // not implemented
+ typedef typename Coefficients::value_type value_type;
+ algebra.for_each9( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , steps[5].m_v ,
+ typename Operations::template scale_sum8< value_type , Time , Time , Time , Time , Time , Time >(
+ 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] ) );
}
};
@@ -125,7 +128,10 @@ struct adams_moulton_call_algebra< 8 , Algebra , Operations >
template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const
{
- BOOST_ASSERT( false ); // not implemented
+ typedef typename Coefficients::value_type value_type;
+ algebra.for_each10( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , steps[5].m_v , steps[6].m_v ,
+ typename Operations::template scale_sum9< value_type , Time , Time , Time , Time , Time , Time , Time >(
+ 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] , dt * coef[7] ) );
}
};
diff --git a/3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp b/3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp
index 0e7ed07d6b..8047fa8ae1 100644
--- a/3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp
@@ -6,8 +6,8 @@
Coefficients for the Adams Moulton method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp b/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp
index d5a54d40a5..ab74b24ee2 100644
--- a/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp
@@ -6,8 +6,9 @@
Implementation of the generic Runge-Kutta method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -68,9 +69,9 @@ struct stage_wrapper
template<
size_t StageCount,
-class Value = double ,
-class Algebra = range_algebra,
-class Operations = default_operations
+class Value ,
+class Algebra ,
+class Operations
>
class generic_rk_algorithm {
diff --git a/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp b/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp
index db0ea0cde6..0249d86405 100644
--- a/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp
@@ -6,8 +6,8 @@
Algebra caller for the generic Runge-Kutta methods.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp b/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp
index ce68c0d6e7..2cce3f4d0b 100644
--- a/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp
@@ -6,8 +6,8 @@
Operations caller for the generic Runge Kutta method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp b/3party/boost/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp
index ba81000fa1..2338afd94a 100644
--- a/3party/boost/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp
@@ -6,8 +6,8 @@
Implemetation of a rotating (cyclic) buffer for use in the Adam Bashforth stepper
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/euler.hpp b/3party/boost/boost/numeric/odeint/stepper/euler.hpp
index fd05ebaf80..443f942763 100644
--- a/3party/boost/boost/numeric/odeint/stepper/euler.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/euler.hpp
@@ -7,8 +7,8 @@
be used for demonstration purposes.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -24,6 +24,8 @@
#include <boost/numeric/odeint/util/resizer.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
namespace boost {
namespace numeric {
@@ -35,8 +37,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp b/3party/boost/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp
index 3ca5f2e409..3c59810b69 100644
--- a/3party/boost/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp
@@ -6,8 +6,9 @@
Implementation of the generic Runge Kutta error stepper. Base class for many RK error steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -22,6 +23,8 @@
#include <boost/numeric/odeint/algebra/default_operations.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp>
#include <boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp>
#include <boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp>
@@ -46,8 +49,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/explicit_generic_rk.hpp b/3party/boost/boost/numeric/odeint/stepper/explicit_generic_rk.hpp
index 84484ee8df..f8edc201a5 100644
--- a/3party/boost/boost/numeric/odeint/stepper/explicit_generic_rk.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/explicit_generic_rk.hpp
@@ -6,8 +6,9 @@
Implementation of the generic Runge-Kutta steppers. This is the base class for many Runge-Kutta steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -25,6 +26,8 @@
#include <boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
@@ -45,8 +48,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
class explicit_generic_rk;
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation.hpp b/3party/boost/boost/numeric/odeint/stepper/generation.hpp
index cffbd0992d..90ad2b9a76 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation.hpp
@@ -6,8 +6,8 @@
Forward header for the factory functions. Includes all files from the generation directory.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp b/3party/boost/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp
index deee41c46a..54b7746c6e 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp
@@ -6,8 +6,8 @@
Specialization of the controller factory for the controlled_runge_kutta class.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp b/3party/boost/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp
index 42482b4a3b..214d09c1a4 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp
@@ -6,8 +6,8 @@
Specialization of the controller factory for the dense_output_runge_kutta class.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp b/3party/boost/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp
index 391695e29b..d5322c8d73 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp
@@ -6,8 +6,8 @@
Enable the factory functions for the controller and the dense output of the Rosenbrock4 method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp b/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp
index 9c31b0b094..24ae54799e 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp
@@ -6,8 +6,8 @@
Enable the factory functions for the controller and the dense output of the Runge-Kutta-Cash-Karp 54 method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp b/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp
index 7ebf8c87e0..1cc0f91d7f 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp
@@ -7,8 +7,8 @@
Runge-Kutta-Cash-Karp 54 method with the classical implementation.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp b/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp
index b6122cd281..1a607f3927 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp
@@ -6,8 +6,8 @@
Enable the factory functions for the controller and the dense output of the Runge-Kutta-Dormand-Prince5 method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp b/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp
index 331c1ed874..d89343bf44 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp
@@ -6,8 +6,8 @@
Enable the factory functions for the controller and the dense output of the Runge-Kutta-Fehlberg 78 method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation/make_controlled.hpp b/3party/boost/boost/numeric/odeint/stepper/generation/make_controlled.hpp
index 78bb16dd2e..603978fec8 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation/make_controlled.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation/make_controlled.hpp
@@ -6,8 +6,8 @@
Factory function to simplify the creation of controlled steppers from error steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/generation/make_dense_output.hpp b/3party/boost/boost/numeric/odeint/stepper/generation/make_dense_output.hpp
index 63c917056c..a28e31b5d2 100644
--- a/3party/boost/boost/numeric/odeint/stepper/generation/make_dense_output.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/generation/make_dense_output.hpp
@@ -6,8 +6,8 @@
Factory function to simplify the creation of dense output steppers from error steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/implicit_euler.hpp b/3party/boost/boost/numeric/odeint/stepper/implicit_euler.hpp
index 848b38dbb2..f3019889cb 100644
--- a/3party/boost/boost/numeric/odeint/stepper/implicit_euler.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/implicit_euler.hpp
@@ -6,8 +6,9 @@
Impementation of the implicit Euler method. Works with ublas::vector as state type.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2012 Mario Mulansky
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/modified_midpoint.hpp b/3party/boost/boost/numeric/odeint/stepper/modified_midpoint.hpp
index 62e023301b..9e34c7da2e 100644
--- a/3party/boost/boost/numeric/odeint/stepper/modified_midpoint.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/modified_midpoint.hpp
@@ -6,8 +6,9 @@
Modified midpoint method for the use in Burlish-Stoer stepper.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -25,6 +26,8 @@
#include <boost/numeric/odeint/util/is_resizeable.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/util/copy.hpp>
namespace boost {
@@ -36,8 +39,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
@@ -161,8 +164,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
class modified_midpoint_dense_out
diff --git a/3party/boost/boost/numeric/odeint/stepper/rosenbrock4.hpp b/3party/boost/boost/numeric/odeint/stepper/rosenbrock4.hpp
index 46d83fbc3e..86136989d8 100644
--- a/3party/boost/boost/numeric/odeint/stepper/rosenbrock4.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/rosenbrock4.hpp
@@ -7,8 +7,9 @@
controller and a dense-output stepper exist for this method,
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp b/3party/boost/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp
index 159685512b..4b3824fc08 100644
--- a/3party/boost/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp
@@ -6,8 +6,9 @@
Controller for the Rosenbrock4 method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -113,7 +114,10 @@ public:
m_stepper.do_step( sys , x , t , xout , dt , m_xerr.m_v );
value_type err = error( xout , x , m_xerr.m_v );
- value_type fac = max BOOST_PREVENT_MACRO_SUBSTITUTION ( fac2 , min BOOST_PREVENT_MACRO_SUBSTITUTION ( fac1 , pow( err , 0.25 ) / safe ) );
+ value_type fac = max BOOST_PREVENT_MACRO_SUBSTITUTION (
+ fac2 , min BOOST_PREVENT_MACRO_SUBSTITUTION (
+ fac1 ,
+ static_cast< value_type >( pow( err , 0.25 ) / safe ) ) );
value_type dt_new = dt / fac;
if ( err <= 1.0 )
{
@@ -124,15 +128,18 @@ public:
else
{
value_type fac_pred = ( m_dt_old / dt ) * pow( err * err / m_err_old , 0.25 ) / safe;
- fac_pred = max BOOST_PREVENT_MACRO_SUBSTITUTION ( fac2 , min BOOST_PREVENT_MACRO_SUBSTITUTION ( fac1 , fac_pred ) );
+ fac_pred = max BOOST_PREVENT_MACRO_SUBSTITUTION (
+ fac2 , min BOOST_PREVENT_MACRO_SUBSTITUTION ( fac1 , fac_pred ) );
fac = max BOOST_PREVENT_MACRO_SUBSTITUTION ( fac , fac_pred );
dt_new = dt / fac;
}
m_dt_old = dt;
- m_err_old = max BOOST_PREVENT_MACRO_SUBSTITUTION ( 0.01 , err );
+ m_err_old = max BOOST_PREVENT_MACRO_SUBSTITUTION ( static_cast< value_type >( 0.01 ) , err );
if( m_last_rejected )
- dt_new = ( dt >= 0.0 ? min BOOST_PREVENT_MACRO_SUBSTITUTION ( dt_new , dt ) : max BOOST_PREVENT_MACRO_SUBSTITUTION ( dt_new , dt ) );
+ dt_new = ( dt >= 0.0 ?
+ min BOOST_PREVENT_MACRO_SUBSTITUTION ( dt_new , dt ) :
+ max BOOST_PREVENT_MACRO_SUBSTITUTION ( dt_new , dt ) );
t += dt;
dt = dt_new;
m_last_rejected = false;
diff --git a/3party/boost/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp b/3party/boost/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp
index 3f4cbb2eb3..8a866c562e 100644
--- a/3party/boost/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp
@@ -6,8 +6,9 @@
Dense output for Rosenbrock 4.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/runge_kutta4.hpp b/3party/boost/boost/numeric/odeint/stepper/runge_kutta4.hpp
index ee26051dbd..2410774ee1 100644
--- a/3party/boost/boost/numeric/odeint/stepper/runge_kutta4.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/runge_kutta4.hpp
@@ -6,8 +6,8 @@
Implementation of the classical Runge-Kutta stepper with the generic stepper.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -27,6 +27,8 @@
#include <boost/numeric/odeint/stepper/explicit_generic_rk.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/array.hpp>
@@ -102,8 +104,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp b/3party/boost/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp
index 3b61841b27..2b8e70b166 100644
--- a/3party/boost/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp
@@ -6,8 +6,9 @@
Implementation for the classical Runge Kutta stepper.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -23,6 +24,8 @@
#include <boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
#include <boost/numeric/odeint/util/is_resizeable.hpp>
@@ -37,8 +40,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp b/3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp
index b6485a8548..beecb3f328 100644
--- a/3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp
@@ -6,8 +6,8 @@
Implementation of the Runge Kutta Cash Karp 5(4) method. It uses the generic error stepper.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -24,6 +24,8 @@
#include <boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
#include <boost/numeric/odeint/util/is_resizeable.hpp>
@@ -146,8 +148,8 @@ template<
class Value = double ,
class Deriv = State ,
class Time = Value ,
- class Algebra = range_algebra ,
- class Operations = default_operations ,
+ class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+ class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp b/3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp
index 19bcd3f4b6..80f1a3c030 100644
--- a/3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp
@@ -6,8 +6,9 @@
Classical implementation of the Runge-Kutta Cash-Karp 5(4) method.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Mario Mulansky
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -24,6 +25,8 @@
#include <boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
#include <boost/numeric/odeint/util/is_resizeable.hpp>
@@ -40,9 +43,9 @@ template<
class State ,
class Value = double ,
class Deriv = State ,
-class Time = double ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Time = Value ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp b/3party/boost/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp
index d6d01e6f8c..260cd74f40 100644
--- a/3party/boost/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp
@@ -6,8 +6,9 @@
Implementation of the Dormand-Prince 5(4) method. This stepper can also be used with the dense-output controlled stepper.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+ Copyright 2012 Christoph Koke
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -24,6 +25,8 @@
#include <boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
@@ -42,8 +45,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
class runge_kutta_dopri5
diff --git a/3party/boost/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp b/3party/boost/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp
index 3155739d66..f2f8251f25 100644
--- a/3party/boost/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp
@@ -6,8 +6,8 @@
Implementation of the Runge-Kutta-Fehlberg stepper with the generic stepper.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2012-2013 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -22,9 +22,11 @@
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
-#include <boost/numeric/odeint/stepper/explicit_generic_rk.hpp>
+#include <boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp>
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/array.hpp>
@@ -291,8 +293,8 @@ class State ,
class Value = double ,
class Deriv = State ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< State >::algebra_type ,
+class Operations = typename operations_dispatcher< State >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/stepper_categories.hpp b/3party/boost/boost/numeric/odeint/stepper/stepper_categories.hpp
index 28054ec70c..9bc5372344 100644
--- a/3party/boost/boost/numeric/odeint/stepper/stepper_categories.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/stepper_categories.hpp
@@ -6,8 +6,8 @@
Definition of all stepper categories.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2010-2011 Mario Mulansky
+ Copyright 2010-2012 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/stepper/symplectic_euler.hpp b/3party/boost/boost/numeric/odeint/stepper/symplectic_euler.hpp
index 1f16ffae8e..bd40860b0b 100644
--- a/3party/boost/boost/numeric/odeint/stepper/symplectic_euler.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/symplectic_euler.hpp
@@ -6,8 +6,8 @@
Implementation of the symplectic Euler for separable Hamiltonian systems.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -23,6 +23,8 @@
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
#include <boost/array.hpp>
@@ -66,8 +68,8 @@ class Value = double ,
class CoorDeriv = Coor ,
class MomentumDeriv = Coor ,
class Time = Value ,
-class Algebra = range_algebra ,
-class Operations = default_operations ,
+class Algebra = typename algebra_dispatcher< Coor >::algebra_type ,
+class Operations = typename operations_dispatcher< Coor >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp b/3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp
index 0c202186f6..b33773e2f7 100644
--- a/3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp
@@ -6,8 +6,8 @@
tba.
[end_description]
- Copyright 2009-2012 Karsten Ahnert
- Copyright 2009-2012 Mario Mulansky
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -18,6 +18,12 @@
#ifndef BOOST_NUMERIC_ODEINT_STEPPER_SYMPLECTIC_RKN_SB3A_M4_MCLACHLAN_HPP_DEFINED
#define BOOST_NUMERIC_ODEINT_STEPPER_SYMPLECTIC_RKN_SB3A_M4_MCLACHLAN_HPP_DEFINED
+#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
+
+#include <boost/numeric/odeint/util/resizer.hpp>
+
namespace boost {
namespace numeric {
@@ -80,8 +86,8 @@ template<
class CoorDeriv = Coor ,
class MomentumDeriv = Coor ,
class Time = Value ,
- class Algebra = range_algebra ,
- class Operations = default_operations ,
+ class Algebra = typename algebra_dispatcher< Coor >::algebra_type ,
+ class Operations = typename operations_dispatcher< Coor >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp b/3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp
index 3bd26d10eb..d75c53534a 100644
--- a/3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp
+++ b/3party/boost/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp
@@ -6,8 +6,8 @@
Implementation of the symplectic MacLachlan stepper for separable Hamiltonian system.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -23,6 +23,10 @@
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
#include <boost/numeric/odeint/algebra/default_operations.hpp>
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
+
+#include <boost/numeric/odeint/util/resizer.hpp>
#include <boost/array.hpp>
@@ -85,8 +89,8 @@ template<
class CoorDeriv = Coor ,
class MomentumDeriv = Coor ,
class Time = Value ,
- class Algebra = range_algebra ,
- class Operations = default_operations ,
+ class Algebra = typename algebra_dispatcher< Coor >::algebra_type ,
+ class Operations = typename operations_dispatcher< Coor >::operations_type ,
class Resizer = initially_resizer
>
#ifndef DOXYGEN_SKIP
diff --git a/3party/boost/boost/numeric/odeint/stepper/velocity_verlet.hpp b/3party/boost/boost/numeric/odeint/stepper/velocity_verlet.hpp
new file mode 100644
index 0000000000..24f3c0e3b6
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/stepper/velocity_verlet.hpp
@@ -0,0 +1,381 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/stepper/velocity_verlet.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_STEPPER_VELOCITY_VERLET_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_STEPPER_VELOCITY_VERLET_HPP_DEFINED
+
+#include <boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp>
+#include <boost/numeric/odeint/stepper/stepper_categories.hpp>
+
+#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
+#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
+#include <boost/numeric/odeint/util/resizer.hpp>
+#include <boost/numeric/odeint/util/state_wrapper.hpp>
+#include <boost/numeric/odeint/util/unwrap_reference.hpp>
+
+#include <boost/numeric/odeint/util/bind.hpp>
+#include <boost/numeric/odeint/util/copy.hpp>
+#include <boost/numeric/odeint/util/resizer.hpp>
+// #include <boost/numeric/odeint/util/is_pair.hpp>
+// #include <boost/array.hpp>
+
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+
+template <
+ class Coor ,
+ class Velocity = Coor ,
+ class Value = double ,
+ class Acceleration = Coor ,
+ class Time = Value ,
+ class TimeSq = Time ,
+ class Algebra = typename algebra_dispatcher< Coor >::algebra_type ,
+ class Operations = typename operations_dispatcher< Coor >::operations_type ,
+ class Resizer = initially_resizer
+ >
+class velocity_verlet : public algebra_stepper_base< Algebra , Operations >
+{
+public:
+
+ typedef algebra_stepper_base< Algebra , Operations > algebra_stepper_base_type;
+ typedef typename algebra_stepper_base_type::algebra_type algebra_type;
+ typedef typename algebra_stepper_base_type::operations_type operations_type;
+
+ typedef Coor coor_type;
+ typedef Velocity velocity_type;
+ typedef Acceleration acceleration_type;
+ typedef std::pair< coor_type , velocity_type > state_type;
+ typedef std::pair< velocity_type , acceleration_type > deriv_type;
+ typedef state_wrapper< acceleration_type > wrapped_acceleration_type;
+ typedef Value value_type;
+ typedef Time time_type;
+ typedef TimeSq time_square_type;
+ typedef Resizer resizer_type;
+ typedef stepper_tag stepper_category;
+
+ typedef unsigned short order_type;
+
+ static const order_type order_value = 1;
+
+ /**
+ * \return Returns the order of the stepper.
+ */
+ order_type order( void ) const
+ {
+ return order_value;
+ }
+
+
+ velocity_verlet( const algebra_type & algebra = algebra_type() )
+ : algebra_stepper_base_type( algebra ) , m_first_call( true )
+ , m_a1() , m_a2() , m_current_a1( true ) { }
+
+
+ template< class System , class StateInOut >
+ void do_step( System system , StateInOut & x , time_type t , time_type dt )
+ {
+ do_step_v1( system , x , t , dt );
+ }
+
+
+ template< class System , class StateInOut >
+ void do_step( System system , const StateInOut & x , time_type t , time_type dt )
+ {
+ do_step_v1( system , x , t , dt );
+ }
+
+
+ template< class System , class CoorIn , class VelocityIn , class AccelerationIn ,
+ class CoorOut , class VelocityOut , class AccelerationOut >
+ void do_step( System system , CoorIn const & qin , VelocityIn const & pin , AccelerationIn const & ain ,
+ CoorOut & qout , VelocityOut & pout , AccelerationOut & aout , time_type t , time_type dt )
+ {
+ const value_type one = static_cast< value_type >( 1.0 );
+ const value_type one_half = static_cast< value_type >( 0.5 );
+
+ algebra_stepper_base_type::m_algebra.for_each4(
+ qout , qin , pin , ain ,
+ typename operations_type::template scale_sum3< value_type , time_type , time_square_type >( one , one_half * dt , one * dt * dt ) );
+
+ typename odeint::unwrap_reference< System >::type & sys = system;
+
+ sys( qout , pin , aout , t + dt );
+
+ algebra_stepper_base_type::m_algebra.for_each4(
+ pout , pin , ain , aout ,
+ typename operations_type::template scale_sum3< value_type , time_type , time_type >( one , one_half * dt , one_half * dt ) );
+ }
+
+
+ template< class StateIn >
+ void adjust_size( const StateIn & x )
+ {
+ if( resize_impl( x ) )
+ m_first_call = true;
+ }
+
+ void reset( void )
+ {
+ m_first_call = true;
+ }
+
+
+ /**
+ * \fn velocity_verlet::initialize( const AccelerationIn &qin )
+ * \brief Initializes the internal state of the stepper.
+ * \param deriv The acceleration of x. The next call of `do_step` expects that the acceleration of `x` passed to `do_step`
+ * has the value of `qin`.
+ */
+ template< class AccelerationIn >
+ void initialize( const AccelerationIn & ain )
+ {
+ // alloc a
+ m_resizer.adjust_size( ain ,
+ detail::bind( &velocity_verlet::template resize_impl< AccelerationIn > ,
+ detail::ref( *this ) , detail::_1 ) );
+ boost::numeric::odeint::copy( ain , get_current_acc() );
+ m_first_call = false;
+ }
+
+
+ template< class System , class CoorIn , class VelocityIn >
+ void initialize( System system , const CoorIn & qin , const VelocityIn & pin , time_type t )
+ {
+ m_resizer.adjust_size( qin ,
+ detail::bind( &velocity_verlet::template resize_impl< CoorIn > ,
+ detail::ref( *this ) , detail::_1 ) );
+ initialize_acc( system , qin , pin , t );
+ }
+
+ bool is_initialized( void ) const
+ {
+ return ! m_first_call;
+ }
+
+
+private:
+
+ template< class System , class CoorIn , class VelocityIn >
+ void initialize_acc( System system , const CoorIn & qin , const VelocityIn & pin , time_type t )
+ {
+ typename odeint::unwrap_reference< System >::type & sys = system;
+ sys( qin , pin , get_current_acc() , t );
+ m_first_call = false;
+ }
+
+ template< class System , class StateInOut >
+ void do_step_v1( System system , StateInOut & x , time_type t , time_type dt )
+ {
+ typedef typename odeint::unwrap_reference< StateInOut >::type state_in_type;
+ typedef typename odeint::unwrap_reference< typename state_in_type::first_type >::type coor_in_type;
+ typedef typename odeint::unwrap_reference< typename state_in_type::second_type >::type momentum_in_type;
+
+ typedef typename boost::remove_reference< coor_in_type >::type xyz_type;
+ state_in_type & statein = x;
+ coor_in_type & qinout = statein.first;
+ momentum_in_type & pinout = statein.second;
+
+ // alloc a
+ if( m_resizer.adjust_size( qinout ,
+ detail::bind( &velocity_verlet::template resize_impl< xyz_type > ,
+ detail::ref( *this ) , detail::_1 ) )
+ || m_first_call )
+ {
+ initialize_acc( system , qinout , pinout , t );
+ }
+
+ // check first
+ do_step( system , qinout , pinout , get_current_acc() , qinout , pinout , get_old_acc() , t , dt );
+ toggle_current_acc();
+ }
+
+ template< class StateIn >
+ bool resize_impl( const StateIn & x )
+ {
+ bool resized = false;
+ resized |= adjust_size_by_resizeability( m_a1 , x , typename is_resizeable< acceleration_type >::type() );
+ resized |= adjust_size_by_resizeability( m_a2 , x , typename is_resizeable< acceleration_type >::type() );
+ return resized;
+ }
+
+ acceleration_type & get_current_acc( void )
+ {
+ return m_current_a1 ? m_a1.m_v : m_a2.m_v ;
+ }
+
+ const acceleration_type & get_current_acc( void ) const
+ {
+ return m_current_a1 ? m_a1.m_v : m_a2.m_v ;
+ }
+
+ acceleration_type & get_old_acc( void )
+ {
+ return m_current_a1 ? m_a2.m_v : m_a1.m_v ;
+ }
+
+ const acceleration_type & get_old_acc( void ) const
+ {
+ return m_current_a1 ? m_a2.m_v : m_a1.m_v ;
+ }
+
+ void toggle_current_acc( void )
+ {
+ m_current_a1 = ! m_current_a1;
+ }
+
+ resizer_type m_resizer;
+ bool m_first_call;
+ wrapped_acceleration_type m_a1 , m_a2;
+ bool m_current_a1;
+};
+
+/**
+ * \class velocity_verlet
+ * \brief The Velocity-Verlet algorithm.
+ *
+ * <a href="http://en.wikipedia.org/wiki/Verlet_integration" >The Velocity-Verlet algorithm</a> is a method for simulation of molecular dynamics systems. It solves the ODE
+ * a=f(r,v',t) where r are the coordinates, v are the velocities and a are the accelerations, hence v = dr/dt, a=dv/dt.
+ *
+ * \tparam Coor The type representing the coordinates.
+ * \tparam Velocity The type representing the velocities.
+ * \tparam Value The type value type.
+ * \tparam Acceleration The type representing the acceleration.
+ * \tparam Time The time representing the independent variable - the time.
+ * \tparam TimeSq The time representing the square of the time.
+ * \tparam Algebra The algebra.
+ * \tparam Operations The operations type.
+ * \tparam Resizer The resizer policy type.
+ */
+
+
+ /**
+ * \fn velocity_verlet::velocity_verlet( const algebra_type &algebra )
+ * \brief Constructs the velocity_verlet class. This constructor can be used as a default
+ * constructor if the algebra has a default constructor.
+ * \param algebra A copy of algebra is made and stored.
+ */
+
+
+ /**
+ * \fn velocity_verlet::do_step( System system , StateInOut &x , time_type t , time_type dt )
+ * \brief This method performs one step. It transforms the result in-place.
+ *
+ * It can be used like
+ * \code
+ * pair< coordinates , velocities > state;
+ * stepper.do_step( sys , x , t , dt );
+ * \endcode
+ *
+ * \param system The system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the
+ * Second Order System concept.
+ * \param x The state of the ODE which should be solved. The state is pair of Coor and Velocity.
+ * \param t The value of the time, at which the step should be performed.
+ * \param dt The step size.
+ */
+
+ /**
+ * \fn velocity_verlet::do_step( System system , const StateInOut &x , time_type t , time_type dt )
+ * \brief This method performs one step. It transforms the result in-place.
+ *
+ * It can be used like
+ * \code
+ * pair< coordinates , velocities > state;
+ * stepper.do_step( sys , x , t , dt );
+ * \endcode
+ *
+ * \param system The system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the
+ * Second Order System concept.
+ * \param x The state of the ODE which should be solved. The state is pair of Coor and Velocity.
+ * \param t The value of the time, at which the step should be performed.
+ * \param dt The step size.
+ */
+
+
+
+ /**
+ * \fn velocity_verlet::do_step( System system , CoorIn const & qin , VelocityIn const & pin , AccelerationIn const & ain , CoorOut & qout , VelocityOut & pout , AccelerationOut & aout , time_type t , time_type dt )
+ * \brief This method performs one step. It transforms the result in-place. Additionally to the other methods
+ * the coordinates, velocities and accelerations are passed directly to do_step and they are transformed out-of-place.
+ *
+ * It can be used like
+ * \code
+ * coordinates qin , qout;
+ * velocities pin , pout;
+ * accelerations ain, aout;
+ * stepper.do_step( sys , qin , pin , ain , qout , pout , aout , t , dt );
+ * \endcode
+ *
+ * \param system The system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the
+ * Second Order System concept.
+ * \param x The state of the ODE which should be solved. The state is pair of Coor and Velocity.
+ * \param t The value of the time, at which the step should be performed.
+ * \param dt The step size.
+ */
+
+
+ /**
+ * \fn void velocity_verlet::adjust_size( const StateIn &x )
+ * \brief Adjust the size of all temporaries in the stepper manually.
+ * \param x A state from which the size of the temporaries to be resized is deduced.
+ */
+
+
+ /**
+ * \fn velocity_verlet::reset( void )
+ * \brief Resets the internal state of this stepper. After calling this method it is safe to use all
+ * `do_step` method without explicitly initializing the stepper.
+ */
+
+
+
+ /**
+ * \fn velocity_verlet::initialize( System system , const CoorIn &qin , const VelocityIn &pin , time_type t )
+ * \brief Initializes the internal state of the stepper.
+ *
+ * This method is equivalent to
+ * \code
+ * Acceleration a;
+ * system( qin , pin , a , t );
+ * stepper.initialize( a );
+ * \endcode
+ *
+ * \param system The system function for the next calls of `do_step`.
+ * \param qin The current coordinates of the ODE.
+ * \param pin The current velocities of the ODE.
+ * \param t The current time of the ODE.
+ */
+
+
+ /**
+ * \fn velocity_verlet::is_initialized()
+ * \returns Returns if the stepper is initialized.
+ */
+
+
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_STEPPER_VELOCITY_VERLET_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/util/bind.hpp b/3party/boost/boost/numeric/odeint/util/bind.hpp
index e87b1b735f..966fd0397b 100644
--- a/3party/boost/boost/numeric/odeint/util/bind.hpp
+++ b/3party/boost/boost/numeric/odeint/util/bind.hpp
@@ -7,6 +7,7 @@
* [end_description]
*
* Copyright 2012 Christoph Koke
+ * Copyright 2012 Karsten Ahnert
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or
@@ -21,8 +22,9 @@
#if BOOST_NUMERIC_ODEINT_CXX11
-#include <type_traits>
+ #include <functional>
#else
+#define BOOST_BIND_NO_PLACEHOLDERS
#include <boost/bind.hpp>
#endif
@@ -40,14 +42,57 @@ using namespace ::std::placeholders;
#else
using ::boost::bind;
+boost::arg<1> _1;
+boost::arg<2> _2;
+// using ::boost::bind;
+// using ::_1;
+// using ::_2;
+
+#endif
+
+}
+}
+}
+}
+
+
+
+
+
+/*
+
+// the following is the suggested way. Unfortunately it does not work with all compilers.
+
+#ifdef BOOST_NO_CXX11_HDR_FUNCTIONAL
+#include <boost/bind.hpp>
+#else
+#include <functional>
+#endif
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+
+#ifdef BOOST_NO_CXX11_HDR_FUNCTIONAL
+
+using ::boost::bind;
using ::_1;
using ::_2;
+#else
+
+using ::std::bind;
+using namespace ::std::placeholders;
+
#endif
+
}
}
}
-}
+}*/
#endif // BOOST_NUMERIC_ODEINT_UTIL_BIND_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/util/copy.hpp b/3party/boost/boost/numeric/odeint/util/copy.hpp
index 58a84041c5..161f135534 100644
--- a/3party/boost/boost/numeric/odeint/util/copy.hpp
+++ b/3party/boost/boost/numeric/odeint/util/copy.hpp
@@ -6,8 +6,8 @@
Copy abstraction for the usage in the steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -46,20 +46,32 @@ namespace detail {
} // namespace detail
+
/*
* Default implementation of the copy operation used the assign operator
* gsl_vector must copied differently
*/
-template< class Container1, class Container2 , class Enabler = void >
-struct copy_impl
+template< class Container1 , class Container2 , class Enabler = void >
+struct copy_impl_sfinae
{
static void copy( const Container1 &from , Container2 &to )
{
typedef typename boost::numeric::odeint::detail::is_range< Container1 >::type is_range_type;
detail::do_copying( from , to , is_range_type() );
}
+
+};
+
+template< class Container1, class Container2 >
+struct copy_impl
+{
+ static void copy( const Container1 &from , Container2 &to )
+ {
+ copy_impl_sfinae< Container1 , Container2 >::copy( from , to );
+ }
};
+// ToDo: allow also to copy INTO a range, not only from a range! Needs "const Container2 &to"
template< class Container1 , class Container2 >
void copy( const Container1 &from , Container2 &to )
{
diff --git a/3party/boost/boost/numeric/odeint/util/detail/is_range.hpp b/3party/boost/boost/numeric/odeint/util/detail/is_range.hpp
index ebb660bd71..a176855411 100644
--- a/3party/boost/boost/numeric/odeint/util/detail/is_range.hpp
+++ b/3party/boost/boost/numeric/odeint/util/detail/is_range.hpp
@@ -6,7 +6,8 @@
is_range implementation. Taken from the boost::range library.
[end_description]
- Copyright Thorsten Ottosen 2003-2004
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Thorsten Ottosen
diff --git a/3party/boost/boost/numeric/odeint/util/detail/less_with_sign.hpp b/3party/boost/boost/numeric/odeint/util/detail/less_with_sign.hpp
index f2883f18bf..8a7fda2789 100644
--- a/3party/boost/boost/numeric/odeint/util/detail/less_with_sign.hpp
+++ b/3party/boost/boost/numeric/odeint/util/detail/less_with_sign.hpp
@@ -1,13 +1,13 @@
/*
[auto_generated]
- boost/numeric/odeint/integrate/detail/less_with_sign.hpp
+ boost/numeric/odeint/util/detail/less_with_sign.hpp
[begin_description]
Helper function to compare times taking into account the sign of dt
[end_description]
- Copyright 2009-2012 Karsten Ahnert
- Copyright 2009-2012 Mario Mulansky
+ Copyright 2012-2013 Mario Mulansky
+ Copyright 2012 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -17,6 +17,8 @@
#ifndef BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_LESS_WITH_SIGN_HPP_INCLUDED
#define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_LESS_WITH_SIGN_HPP_INCLUDED
+#include <limits>
+
#include <boost/numeric/odeint/util/unit_helper.hpp>
namespace boost {
@@ -25,29 +27,52 @@ namespace odeint {
namespace detail {
/**
- * return t1 < t2 if dt > 0 and t1 > t2 if dt < 0
+ * return t1 < t2 if dt > 0 and t1 > t2 if dt < 0 with epsilon accuracy
*/
-template< typename T1 , typename T2 , typename T3 >
-bool less_with_sign( T1 t1 , T2 t2 , T3 dt )
+template< typename T >
+bool less_with_sign( T t1 , T t2 , T dt )
{
if( get_unit_value(dt) > 0 )
- return t1 < t2;
+ //return t1 < t2;
+ return t2-t1 > std::numeric_limits<T>::epsilon();
else
- return t1 > t2;
+ //return t1 > t2;
+ return t1-t2 > std::numeric_limits<T>::epsilon();
}
/**
- * return t1 <= t2 if dt > 0 and t1 => t2 if dt < 0
+ * return t1 <= t2 if dt > 0 and t1 => t2 if dt < 0 with epsilon accuracy
*/
-template< typename T1 , typename T2 , typename T3>
-bool less_eq_with_sign( T1 t1 , T2 t2 , T3 dt )
+template< typename T >
+bool less_eq_with_sign( T t1 , T t2 , T dt )
{
if( get_unit_value(dt) > 0 )
- return t1 <= t2;
+ return t1-t2 < std::numeric_limits<T>::epsilon();
+ else
+ return t2-t1 < std::numeric_limits<T>::epsilon();
+}
+
+template< typename T >
+T min_abs( T t1 , T t2 )
+{
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ if( t1>0 )
+ return min BOOST_PREVENT_MACRO_SUBSTITUTION ( t1 , t2 );
else
- return t1 >= t2;
+ return max BOOST_PREVENT_MACRO_SUBSTITUTION ( t1 , t2 );
}
+template< typename T >
+T max_abs( T t1 , T t2 )
+{
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ if( t1>0 )
+ return max BOOST_PREVENT_MACRO_SUBSTITUTION ( t1 , t2 );
+ else
+ return min BOOST_PREVENT_MACRO_SUBSTITUTION ( t1 , t2 );
+}
} } } }
#endif
diff --git a/3party/boost/boost/numeric/odeint/util/is_pair.hpp b/3party/boost/boost/numeric/odeint/util/is_pair.hpp
index 38ab58ab12..1827840fe2 100644
--- a/3party/boost/boost/numeric/odeint/util/is_pair.hpp
+++ b/3party/boost/boost/numeric/odeint/util/is_pair.hpp
@@ -6,8 +6,8 @@
Metafunction to determine if a type is a std::pair<>.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/util/is_resizeable.hpp b/3party/boost/boost/numeric/odeint/util/is_resizeable.hpp
index 4cc9be19b3..ad7332dcad 100644
--- a/3party/boost/boost/numeric/odeint/util/is_resizeable.hpp
+++ b/3party/boost/boost/numeric/odeint/util/is_resizeable.hpp
@@ -6,8 +6,8 @@
Metafunction to determine if a state type can resized. For usage in the steppers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -29,42 +29,38 @@
#include <boost/mpl/find_if.hpp>
#include <boost/mpl/end.hpp>
#include <boost/mpl/placeholders.hpp>
-// #include <boost/mpl/not.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_same.hpp>
namespace boost {
namespace numeric {
namespace odeint {
-
+
/*
* by default any type is not resizable
*/
-template< class Container , class Enabler = void >
-struct is_resizeable
-{
- //struct type : public boost::false_type { };
- typedef boost::false_type type;
- const static bool value = type::value;
-};
+template< typename Container , typename Enabler = void >
+struct is_resizeable_sfinae : boost::false_type {};
+
+template< typename Container >
+struct is_resizeable : is_resizeable_sfinae< Container > {};
+
+
/*
* specialization for std::vector
*/
template< class V, class A >
-struct is_resizeable< std::vector< V , A > >
-{
- //struct type : public boost::true_type { };
- typedef boost::true_type type;
- const static bool value = type::value;
-};
+struct is_resizeable< std::vector< V , A > > : boost::true_type {};
/*
- * specialization for fusion sequences
+ * sfinae specialization for fusion sequences
*/
-template< class FusionSequence >
-struct is_resizeable< FusionSequence , typename boost::enable_if< typename boost::fusion::traits::is_sequence< FusionSequence >::type >::type >
+template< typename FusionSequence >
+struct is_resizeable_sfinae<
+ FusionSequence ,
+ typename boost::enable_if< typename boost::fusion::traits::is_sequence< FusionSequence >::type >::type >
{
typedef typename boost::mpl::find_if< FusionSequence , is_resizeable< boost::mpl::_1 > >::type iter;
typedef typename boost::mpl::end< FusionSequence >::type last;
@@ -75,6 +71,9 @@ struct is_resizeable< FusionSequence , typename boost::enable_if< typename boost
+
+
+
} // namespace odeint
} // namespace numeric
} // namespace boost
diff --git a/3party/boost/boost/numeric/odeint/util/multi_array_adaption.hpp b/3party/boost/boost/numeric/odeint/util/multi_array_adaption.hpp
new file mode 100644
index 0000000000..e2c0a4836d
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/util/multi_array_adaption.hpp
@@ -0,0 +1,130 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/util/multi_array_adaption.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_UTIL_MULTI_ARRAY_ADAPTION_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_UTIL_MULTI_ARRAY_ADAPTION_HPP_DEFINED
+
+
+
+#include <boost/numeric/odeint/util/is_resizeable.hpp>
+#include <boost/numeric/odeint/util/resize.hpp>
+#include <boost/numeric/odeint/util/same_size.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/multi_array.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+template< typename T >
+struct is_multi_array
+{
+ typedef boost::false_type type;
+ const static bool value = type::value;
+};
+
+template< typename T >
+struct is_resizeable_multi_array
+{
+ typedef boost::false_type type;
+ const static bool value = type::value;
+};
+
+
+
+template< typename V , size_t Dim , typename A >
+struct is_multi_array< boost::multi_array< V , Dim , A > >
+{
+ typedef boost::true_type type;
+ const static bool value = type::value;
+};
+
+template< typename V , size_t Dim , typename A >
+struct is_resizeable_multi_array< boost::multi_array< V , Dim , A > >
+{
+ typedef boost::true_type type;
+ const static bool value = type::value;
+};
+
+
+
+
+template< typename T >
+struct is_resizeable_sfinae< T , typename boost::enable_if< typename is_resizeable_multi_array< T >::type >::type >
+{
+ typedef boost::true_type type;
+ const static bool value = type::value;
+};
+
+
+
+
+
+template< typename T1 , typename T2 >
+struct same_size_impl_sfinae< T1 , T2 ,
+ typename boost::enable_if<
+ typename boost::mpl::and_<
+ is_multi_array< T1 > ,
+ is_multi_array< T2 > ,
+ boost::mpl::bool_< T1::dimensionality == T2::dimensionality >
+ >::type
+ >::type >
+{
+ static bool same_size( T1 const &x1 , T2 const &x2 )
+ {
+ for( size_t i=0 ; i<T1::dimensionality ; ++i )
+ {
+ if( x1.shape()[i] != x2.shape()[i] ) return false;
+ if( x1.index_bases()[i] != x2.index_bases()[i] ) return false;
+ }
+ return true;
+ }
+};
+
+
+template< typename T1 , typename T2 >
+struct resize_impl_sfinae< T1 , T2 ,
+ typename boost::enable_if<
+ typename boost::mpl::and_<
+ is_resizeable_multi_array< T1 > ,
+ is_multi_array< T2 > ,
+ boost::mpl::bool_< T1::dimensionality == T2::dimensionality >
+ >::type
+ >::type >
+{
+ static void resize( T1 &x1 , const T2 &x2 )
+ {
+ boost::array< int , T1::dimensionality > extents;
+ for( size_t i=0 ; i<T1::dimensionality ; ++i ) extents[i] = x2.shape()[i];
+ x1.resize( extents );
+ boost::array< int , T1::dimensionality > origins;
+ for( size_t i=0 ; i<T1::dimensionality ; ++i ) origins[i] = x2.index_bases()[i];
+ x1.reindex( origins );
+ }
+};
+
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_UTIL_MULTI_ARRAY_ADAPTION_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/util/n_ary_helper.hpp b/3party/boost/boost/numeric/odeint/util/n_ary_helper.hpp
new file mode 100644
index 0000000000..6138074207
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/util/n_ary_helper.hpp
@@ -0,0 +1,96 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/util/n_ary_helper.hpp
+
+ Macros to generate scale_sumN and for_eachN functors.
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_UTIL_N_ARY_HELPER_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_UTIL_N_ARY_HELPER_HPP_INCLUDED
+
+#include <boost/preprocessor/repetition.hpp>
+
+// like BOOST_PP_ENUM_SHIFTED but with a comma in front like _TRAILING
+#define BOOST_ODEINT_ENUM_TRAILING_SHIFTED_PARAMS(count, param) \
+ BOOST_PP_COMMA_IF(BOOST_PP_DEC(count)) \
+ BOOST_PP_ENUM_SHIFTED_PARAMS(count, param)
+
+#define BOOST_ODEINT_ENUM_TRAILING_SHIFTED_BINARY_PARAMS(count, p1, p2) \
+ BOOST_PP_COMMA_IF(BOOST_PP_DEC(count)) \
+ BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS(count, p1, p2)
+
+// like BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS(n, p1, p2) but p2 is shifted left.
+// generate "p1 ## 0 = p2, p1 ## 1 = p3 ## 0, p1 ## 2 = p3 ## 1"
+#define BOOST_ODEINT_ENUM_LSHIFTED_BINARY_PARAMS(count, p1, p2, p3) \
+ BOOST_PP_ENUM(count, BOOST_ODEINT_ENUM_LSHIFTED_BINARY_PARAMS_, (p1, p2, p3))
+#define BOOST_ODEINT_ENUM_LSHIFTED_BINARY_PARAMS_(z, n, data) \
+ BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3, 0, data), n) \
+ BOOST_PP_IF(n, \
+ BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3, 2, data), BOOST_PP_DEC(n)), \
+ BOOST_PP_TUPLE_ELEM(3, 1, data))
+
+// like BOOST_PP_ENUM_BINARY_PARAMS(n, p1, p2) but with statements.
+// "p1 ## 0 p2 ## 0 ; p1 ## 1 p2 ## 1 ; ..."
+#define BOOST_ODEINT_ENUM_BINARY_STATEMENTS(count, p1, p2) \
+ BOOST_PP_REPEAT(count, BOOST_ODEINT_ENUM_BINARY_STATEMENTS_, (p1, p2))
+#define BOOST_ODEINT_ENUM_BINARY_STATEMENTS_(z, n, data) \
+ BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 0, data), n) \
+ BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 1, data), n) ;
+
+// like BOOST_PP_ENUM_BINARY_PARAMS(n, p1, p2) but p2 is in parens.
+// "p1 ## 0 (p2 ## 0) , p1 ## 1 (p2 ## 1) , ..."
+#define BOOST_ODEINT_ENUM_UNARY_CALLS(count, p1, p2) \
+ BOOST_PP_ENUM(count, BOOST_ODEINT_ENUM_UNARY_CALLS_, (p1, p2))
+#define BOOST_ODEINT_ENUM_SHIFTED_UNARY_CALLS(count, p1, p2) \
+ BOOST_PP_ENUM_SHIFTED(count, BOOST_ODEINT_ENUM_UNARY_CALLS_, (p1, p2))
+#define BOOST_ODEINT_ENUM_TRAILING_SHIFTED_UNARY_CALLS(count, p1, p2) \
+ BOOST_PP_COMMA_IF(BOOST_PP_DEC(count)) \
+ BOOST_PP_ENUM_SHIFTED(count, BOOST_ODEINT_ENUM_UNARY_CALLS_, (p1, p2))
+#define BOOST_ODEINT_ENUM_UNARY_CALLS_(z, n, data) \
+ BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 0, data), n) \
+ ( BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 1, data), n) )
+
+
+// maximum arity + 1 for scale_sum and for_each
+#define BOOST_ODEINT_N_ARY_MAX 16
+
+
+// generate scale_sum1 to scale_sumN, operator body generated by macro(N)
+#define BOOST_ODEINT_GEN_SCALE_SUM(macro) \
+ BOOST_PP_REPEAT_FROM_TO(1, BOOST_ODEINT_N_ARY_MAX, BOOST_ODEINT_GEN_SCALE_SUM_, macro)
+#define BOOST_ODEINT_GEN_SCALE_SUM_(z, n, macro) \
+ template< BOOST_ODEINT_ENUM_LSHIFTED_BINARY_PARAMS(n, class Fac, = double, = Fac) > \
+ struct BOOST_PP_CAT(scale_sum, n) \
+ { \
+ BOOST_ODEINT_ENUM_BINARY_STATEMENTS(n, const Fac, m_alpha) \
+ \
+ BOOST_PP_CAT(scale_sum, n) \
+ ( BOOST_PP_ENUM_BINARY_PARAMS(n, Fac, alpha) ) \
+ : BOOST_ODEINT_ENUM_UNARY_CALLS(n, m_alpha, alpha) {} \
+ \
+ template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), class T) > \
+ void operator()( T0 &t0 \
+ BOOST_ODEINT_ENUM_TRAILING_SHIFTED_BINARY_PARAMS(BOOST_PP_INC(n), const T, &t) \
+ ) const \
+ { macro(n) } \
+ typedef void result_type; \
+ };
+
+// generate for_each1 to for_eachN, body generated by macro(N)
+#define BOOST_ODEINT_GEN_FOR_EACH(macro) \
+ BOOST_PP_REPEAT_FROM_TO(1, BOOST_ODEINT_N_ARY_MAX, BOOST_ODEINT_GEN_FOR_EACH_, macro)
+#define BOOST_ODEINT_GEN_FOR_EACH_(z, n, macro) \
+ template< BOOST_PP_ENUM_PARAMS(n, class S) , class Op > \
+ static void for_each##n ( BOOST_PP_ENUM_BINARY_PARAMS(n, S, &s) , Op op ) \
+ { macro(n) }
+
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/util/resize.hpp b/3party/boost/boost/numeric/odeint/util/resize.hpp
index 65b5cfbe73..db2ce208b0 100644
--- a/3party/boost/boost/numeric/odeint/util/resize.hpp
+++ b/3party/boost/boost/numeric/odeint/util/resize.hpp
@@ -7,8 +7,8 @@
destruction, copying construction, assignment and resizing.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -33,15 +33,25 @@
namespace boost {
namespace numeric {
namespace odeint {
+
+
+template< class StateOut , class StateIn , class Enabler = void >
+struct resize_impl_sfinae
+{
+ static void resize( StateOut &x1 , const StateIn &x2 )
+ {
+ x1.resize( boost::size( x2 ) );
+ }
+};
// resize function
// standard implementation relies on boost.range and resize member function
-template< class StateOut , class StateIn , class Enabler = void >
+template< class StateOut , class StateIn >
struct resize_impl
{
static void resize( StateOut &x1 , const StateIn &x2 )
{
- x1.resize( boost::size( x2 ) );
+ resize_impl_sfinae< StateOut , StateIn >::resize( x1 , x2 );
}
};
@@ -85,7 +95,8 @@ namespace detail {
* specialization for fusion sequences
*/
template< class FusionSeq >
-struct resize_impl< FusionSeq , FusionSeq , typename boost::enable_if< typename boost::fusion::traits::is_sequence< FusionSeq >::type >::type >
+struct resize_impl_sfinae< FusionSeq , FusionSeq ,
+ typename boost::enable_if< typename boost::fusion::traits::is_sequence< FusionSeq >::type >::type >
{
static void resize( FusionSeq &x1 , const FusionSeq &x2 )
{
diff --git a/3party/boost/boost/numeric/odeint/util/resizer.hpp b/3party/boost/boost/numeric/odeint/util/resizer.hpp
index de02eabaf6..fd969ec3b9 100644
--- a/3party/boost/boost/numeric/odeint/util/resizer.hpp
+++ b/3party/boost/boost/numeric/odeint/util/resizer.hpp
@@ -6,8 +6,8 @@
Implementation of the resizers.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/util/same_instance.hpp b/3party/boost/boost/numeric/odeint/util/same_instance.hpp
index ac86e5dbe4..dc55db30a3 100644
--- a/3party/boost/boost/numeric/odeint/util/same_instance.hpp
+++ b/3party/boost/boost/numeric/odeint/util/same_instance.hpp
@@ -6,8 +6,8 @@
Basic check if two variables are the same instance
[end_description]
- Copyright 2009-2012 Karsten Ahnert
- Copyright 2009-2012 Mario Mulansky
+ Copyright 2012 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/util/same_size.hpp b/3party/boost/boost/numeric/odeint/util/same_size.hpp
index e27db69c7c..8fa6c7a3a0 100644
--- a/3party/boost/boost/numeric/odeint/util/same_size.hpp
+++ b/3party/boost/boost/numeric/odeint/util/same_size.hpp
@@ -7,8 +7,8 @@
destruction, copying construction, assignment and resizing.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -34,15 +34,25 @@
namespace boost {
namespace numeric {
namespace odeint {
+
+template< typename State1 , typename State2 , class Enabler = void >
+struct same_size_impl_sfinae
+{
+ static bool same_size( const State1 &x1 , const State2 &x2 )
+ {
+ return ( boost::size( x1 ) == boost::size( x2 ) );
+ }
+
+};
// same_size function
// standard implementation relies on boost.range
-template< class State1 , class State2 , class Enabler = void >
+template< class State1 , class State2 >
struct same_size_impl
{
static bool same_size( const State1 &x1 , const State2 &x2 )
{
- return ( boost::size( x1 ) == boost::size( x2 ) );
+ return same_size_impl_sfinae< State1 , State2 >::same_size( x1 , x2 );
}
};
@@ -84,7 +94,7 @@ struct same_size_fusion
template< class FusionSeq >
-struct same_size_impl< FusionSeq , FusionSeq , typename boost::enable_if< typename boost::fusion::traits::is_sequence< FusionSeq >::type >::type >
+struct same_size_impl_sfinae< FusionSeq , FusionSeq , typename boost::enable_if< typename boost::fusion::traits::is_sequence< FusionSeq >::type >::type >
{
static bool same_size( const FusionSeq &x1 , const FusionSeq &x2 )
{
diff --git a/3party/boost/boost/numeric/odeint/util/split.hpp b/3party/boost/boost/numeric/odeint/util/split.hpp
new file mode 100644
index 0000000000..ba9875a49a
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/util/split.hpp
@@ -0,0 +1,64 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/util/split.hpp
+
+ [begin_description]
+ Split abstraction for parallel backends.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_UTIL_SPLIT_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_UTIL_SPLIT_HPP_INCLUDED
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+/*
+ * No default implementation of the split operation
+ */
+template< class Container1, class Container2 , class Enabler = void >
+struct split_impl
+{
+ static void split( const Container1 &from , Container2 &to );
+};
+
+template< class Container1 , class Container2 >
+void split( const Container1 &from , Container2 &to )
+{
+ split_impl< Container1 , Container2 >::split( from , to );
+}
+
+
+/*
+ * No default implementation of the unsplit operation
+ */
+template< class Container1, class Container2 , class Enabler = void >
+struct unsplit_impl
+{
+ static void unsplit( const Container1 &from , Container2 &to );
+};
+
+template< class Container1 , class Container2 >
+void unsplit( const Container1 &from , Container2 &to )
+{
+ unsplit_impl< Container1 , Container2 >::unsplit( from , to );
+}
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_UTIL_COPY_HPP_INCLUDED
+
diff --git a/3party/boost/boost/numeric/odeint/util/split_adaptor.hpp b/3party/boost/boost/numeric/odeint/util/split_adaptor.hpp
new file mode 100644
index 0000000000..cf0d623814
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/util/split_adaptor.hpp
@@ -0,0 +1,102 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/util/split_adaptor.hpp
+
+ [begin_description]
+ A range adaptor which returns even-sized slices.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+ 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_NUMERIC_ODEINT_UTIL_SPLIT_ADAPTOR_INCLUDED
+#define BOOST_NUMERIC_ODEINT_UTIL_SPLIT_ADAPTOR_INCLUDED
+
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/size_type.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <algorithm>
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+/** \brief Returns the begin and end offset for a sub-range */
+inline std::pair<std::size_t, std::size_t>
+split_offsets( std::size_t total_length, std::size_t index, std::size_t parts )
+{
+ BOOST_ASSERT( parts > 0 );
+ BOOST_ASSERT( index < parts );
+ const std::size_t
+ slice = total_length / parts,
+ partial = total_length % parts,
+ lo = (std::min)(index, partial),
+ hi = (std::max<std::ptrdiff_t>)(0, index - partial),
+ begin_offset = lo * (slice + 1) + hi * slice,
+ length = slice + (index < partial ? 1 : 0),
+ end_offset = begin_offset + length;
+ return std::make_pair( begin_offset, end_offset );
+}
+
+/** \brief Return the sub-range `index` from a range which is split into `parts`.
+ *
+ * For example, splitting a range into three about equal-sized sub-ranges:
+ * \code
+ * sub0 = make_split_range(rng, 0, 3);
+ * sub1 = rng | split(1, 3);
+ * sub2 = rng | split(2, 3);
+ * \endcode
+ */
+template< class RandomAccessRange >
+inline iterator_range< typename range_iterator<RandomAccessRange>::type >
+make_split_range( RandomAccessRange& rng, std::size_t index, std::size_t parts )
+{
+ const std::pair<std::size_t, std::size_t> off = split_offsets(boost::size(rng), index, parts);
+ return make_iterator_range( boost::begin(rng) + off.first, boost::begin(rng) + off.second );
+}
+
+template< class RandomAccessRange >
+inline iterator_range< typename range_iterator<const RandomAccessRange>::type >
+make_split_range( const RandomAccessRange& rng, std::size_t index, std::size_t parts )
+{
+ const std::pair<std::size_t, std::size_t> off = split_offsets(boost::size(rng), index, parts);
+ return make_iterator_range( boost::begin(rng) + off.first, boost::begin(rng) + off.second );
+}
+
+
+struct split
+{
+ split(std::size_t index, std::size_t parts)
+ : index(index), parts(parts) {}
+ std::size_t index, parts;
+};
+
+template< class RandomAccessRange >
+inline iterator_range< typename range_iterator<RandomAccessRange>::type >
+operator|( RandomAccessRange& rng, const split& f )
+{
+ return make_split_range( rng, f.index, f.parts );
+}
+
+template< class RandomAccessRange >
+inline iterator_range< typename range_iterator<const RandomAccessRange>::type >
+operator|( const RandomAccessRange& rng, const split& f )
+{
+ return make_split_range( rng, f.index, f.parts );
+}
+
+
+}
+}
+}
+}
+
+#endif
diff --git a/3party/boost/boost/numeric/odeint/util/state_wrapper.hpp b/3party/boost/boost/numeric/odeint/util/state_wrapper.hpp
index cce280a160..10f8ecde31 100644
--- a/3party/boost/boost/numeric/odeint/util/state_wrapper.hpp
+++ b/3party/boost/boost/numeric/odeint/util/state_wrapper.hpp
@@ -7,8 +7,8 @@
destruction, copying construction, assignment and resizing.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/numeric/odeint/util/stepper_traits.hpp b/3party/boost/boost/numeric/odeint/util/stepper_traits.hpp
new file mode 100644
index 0000000000..5d1d31ae6a
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/util/stepper_traits.hpp
@@ -0,0 +1,63 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/util/stepper_traits.hpp
+
+ [begin_description]
+ tba.
+ [end_description]
+
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_UTIL_STEPPER_TRAITS_HPP_DEFINED
+#define BOOST_NUMERIC_ODEINT_UTIL_STEPPER_TRAITS_HPP_DEFINED
+
+#include <boost/numeric/odeint/util/unwrap_reference.hpp>
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace traits {
+
+template< class Stepper >
+struct state_type
+{
+ typedef typename boost::numeric::odeint::unwrap_reference< Stepper >::type stepper_type;
+ typedef typename stepper_type::state_type type;
+};
+
+template< class Stepper >
+struct time_type
+{
+ typedef typename boost::numeric::odeint::unwrap_reference< Stepper >::type stepper_type;
+ typedef typename stepper_type::time_type type;
+};
+
+template< class Stepper >
+struct stepper_category
+{
+ typedef typename boost::numeric::odeint::unwrap_reference< Stepper >::type stepper_type;
+ typedef typename stepper_type::stepper_category type;
+};
+
+template< class Stepper >
+struct value_type
+{
+ typedef typename boost::numeric::odeint::unwrap_reference< Stepper >::type stepper_type;
+ typedef typename stepper_type::value_type type;
+};
+
+} // namespace traits
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_UTIL_STEPPER_TRAITS_HPP_DEFINED
diff --git a/3party/boost/boost/numeric/odeint/util/ublas_matrix_expression.patch b/3party/boost/boost/numeric/odeint/util/ublas_matrix_expression.patch
new file mode 100644
index 0000000000..4e8ac6c964
--- /dev/null
+++ b/3party/boost/boost/numeric/odeint/util/ublas_matrix_expression.patch
@@ -0,0 +1,6 @@
+3390,3392c3390
+< typename enable_if< is_convertible<typename E1::value_type , T2>,
+< typename matrix_binary_scalar2_traits<E1, const T2, scalar_divides<typename E1::value_type, T2> >::result_type
+< > ::result_type
+---
+> typename matrix_binary_scalar2_traits<E1, const T2, scalar_divides<typename E1::value_type, T2> >::result_type
diff --git a/3party/boost/boost/numeric/odeint/util/ublas_wrapper.hpp b/3party/boost/boost/numeric/odeint/util/ublas_wrapper.hpp
index d05e849a04..c8facfc46b 100644
--- a/3party/boost/boost/numeric/odeint/util/ublas_wrapper.hpp
+++ b/3party/boost/boost/numeric/odeint/util/ublas_wrapper.hpp
@@ -6,8 +6,8 @@
Resizing for ublas::vector and ublas::matrix
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -23,10 +23,144 @@
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/lu.hpp>
+#include <boost/numeric/ublas/vector_expression.hpp>
+#include <boost/numeric/ublas/matrix_expression.hpp>
+
+#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
+#include <boost/numeric/odeint/algebra/default_operations.hpp>
#include <boost/numeric/odeint/util/is_resizeable.hpp>
#include <boost/numeric/odeint/util/state_wrapper.hpp>
+
+/* extend ublas by a few operations */
+
+/* map norm_inf onto reduce( v , default_operations::maximum ) */
+namespace boost { namespace numeric { namespace odeint {
+
+ template< typename T , typename A >
+ struct vector_space_norm_inf< boost::numeric::ublas::vector<T,A> >
+ {
+ typedef T result_type;
+
+ result_type operator()( const boost::numeric::ublas::vector<T,A> &x ) const
+ {
+ return boost::numeric::ublas::norm_inf( x );
+ }
+ };
+
+
+ template< class T , class L , class A >
+ struct vector_space_norm_inf< boost::numeric::ublas::matrix<T,L,A> >
+ {
+ typedef T result_type;
+
+ result_type operator()( const boost::numeric::ublas::matrix<T,L,A> &x ) const
+ {
+ return boost::numeric::ublas::norm_inf( x );
+ }
+ };
+} } }
+
+/* additional operations:
+ * abs( v )
+ * v / w
+ * a + v
+ */
+namespace boost { namespace numeric { namespace ublas {
+
+
+ // elementwise abs - calculates absolute values of the elements
+ template<class T>
+ struct scalar_abs: public scalar_unary_functor<T> {
+ typedef typename scalar_unary_functor<T>::value_type value_type;
+ typedef typename scalar_unary_functor<T>::argument_type argument_type;
+ typedef typename scalar_unary_functor<T>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument_type t) {
+ using std::abs;
+ return abs (t);
+ }
+ };
+
+
+ // (abs v) [i] = abs (v [i])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_unary_traits<E, scalar_abs<typename E::value_type> >::result_type
+ abs (const vector_expression<E> &e) {
+ typedef typename vector_unary_traits<E, scalar_abs<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (abs m) [i] = abs (m [i])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_unary1_traits<E, scalar_abs<typename E::value_type> >::result_type
+ abs (const matrix_expression<E> &e) {
+ typedef typename matrix_unary1_traits<E, scalar_abs<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+
+ // elementwise division (v1 / v2) [i] = v1 [i] / v2 [i]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename vector_binary_traits<E1, E2, scalar_divides<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ operator / (const vector_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef typename vector_binary_traits<E1, E2, scalar_divides<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+
+ // elementwise division (m1 / m2) [i] = m1 [i] / m2 [i]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_binary_traits<E1, E2, scalar_divides<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ operator / (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef typename matrix_binary_traits<E1, E2, scalar_divides<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // addition with scalar
+ // (t + v) [i] = t + v [i]
+ template<class T1, class E2>
+ BOOST_UBLAS_INLINE
+ typename enable_if< is_convertible<T1, typename E2::value_type >,
+ typename vector_binary_scalar1_traits<const T1, E2, scalar_plus<T1, typename E2::value_type> >::result_type
+ >::type
+ operator + (const T1 &e1,
+ const vector_expression<E2> &e2) {
+ typedef typename vector_binary_scalar1_traits<const T1, E2, scalar_plus<T1, typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1, e2 ());
+ }
+
+ // addition with scalar
+ // (t + m) [i] = t + m [i]
+ template<class T1, class E2>
+ BOOST_UBLAS_INLINE
+ typename enable_if< is_convertible<T1, typename E2::value_type >,
+ typename matrix_binary_scalar1_traits<const T1, E2, scalar_plus<T1, typename E2::value_type> >::result_type
+ >::type
+ operator + (const T1 &e1,
+ const matrix_expression<E2> &e2) {
+ typedef typename matrix_binary_scalar1_traits<const T1, E2, scalar_plus<T1, typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1, e2 ());
+ }
+
+} } }
+
+
+
+
+/* add resize functionality */
namespace boost {
namespace numeric {
namespace odeint {
@@ -114,7 +248,8 @@ struct resize_impl< boost::numeric::ublas::matrix< T , L , A > , boost::numeric:
// specialization for ublas::permutation_matrix
// same size and resize specialization for matrix-vector resizing
template< class T , class A , class T_V , class A_V >
-struct same_size_impl< boost::numeric::ublas::permutation_matrix< T , A > , boost::numeric::ublas::vector< T_V , A_V > >
+struct same_size_impl< boost::numeric::ublas::permutation_matrix< T , A > ,
+ boost::numeric::ublas::vector< T_V , A_V > >
{
static bool same_size( const boost::numeric::ublas::permutation_matrix< T , A > &m ,
const boost::numeric::ublas::vector< T_V , A_V > &v )
@@ -124,7 +259,8 @@ struct same_size_impl< boost::numeric::ublas::permutation_matrix< T , A > , boos
};
template< class T , class A , class T_V , class A_V >
-struct resize_impl< boost::numeric::ublas::vector< T_V , A_V > , boost::numeric::ublas::permutation_matrix< T , A > >
+struct resize_impl< boost::numeric::ublas::vector< T_V , A_V > ,
+ boost::numeric::ublas::permutation_matrix< T , A > >
{
static void resize( const boost::numeric::ublas::vector< T_V , A_V > &v,
boost::numeric::ublas::permutation_matrix< T , A > &m )
@@ -157,104 +293,5 @@ struct state_wrapper< boost::numeric::ublas::permutation_matrix< T , A > > // wi
} } }
-//// all specializations done, ready to include state_wrapper
-//
-//#include <boost/numeric/odeint/util/state_wrapper.hpp>
-//
-//namespace boost {
-//namespace numeric {
-//namespace odeint {
-//
-///* specialization for permutation matrices wrapper because we need to change the construction */
-//template< class T , class A >
-//struct state_wrapper< boost::numeric::ublas::permutation_matrix< T , A > , true > // with resizing
-//{
-// typedef boost::numeric::ublas::permutation_matrix< T , A > state_type;
-// typedef state_wrapper< state_type > state_wrapper_type;
-// //typedef typename V::value_type value_type;
-// typedef boost::true_type is_resizeable;
-//
-// state_type m_v;
-//
-// state_wrapper() : m_v( 1 ) // permutation matrix constructor requires a size, choose 1 as default
-// { }
-//
-// template< class T_V , class A_V >
-// bool same_size( const boost::numeric::ublas::vector< T_V , A_V > &x )
-// {
-// return boost::numeric::odeint::same_size( m_v , x );
-// }
-//
-// template< class T_V , class A_V >
-// bool resize( const boost::numeric::ublas::vector< T_V , A_V > &x )
-// {
-// //standard resizing done like for std::vector
-// if( !same_size( x ) )
-// {
-// boost::numeric::odeint::resize( m_v , x );
-// return true;
-// } else
-// return false;
-// }
-//};
-//
-//}
-//}
-//}
-
-
-/*
- * preparing ublas::matrix for boost::range, such that ublas::matrix can be used in all steppers with the range algebra
- */
-
-namespace boost
-{
-template< class T , class L , class A >
-struct range_mutable_iterator< boost::numeric::ublas::matrix< T , L , A > >
-{
- typedef typename boost::numeric::ublas::matrix< T , L , A >::array_type::iterator type;
-};
-
-template< class T , class L , class A >
-struct range_const_iterator< boost::numeric::ublas::matrix< T , L , A > >
-{
- typedef typename boost::numeric::ublas::matrix< T , L , A >::array_type::const_iterator type;
-};
-
-} // namespace boost
-
-
-namespace boost { namespace numeric { namespace ublas {
-
-template< class T , class L , class A >
-inline typename matrix< T , L , A >::array_type::iterator
-range_begin( matrix< T , L , A > &x )
-{
- return x.data().begin();
-}
-
-template< class T , class L , class A >
-inline typename matrix< T , L , A >::array_type::const_iterator
-range_begin( const matrix< T , L , A > &x )
-{
- return x.data().begin();
-}
-
-template< class T , class L , class A >
-inline typename matrix< T , L , A >::array_type::iterator
-range_end( matrix< T , L , A > &x )
-{
- return x.data().end();
-}
-
-template< class T , class L , class A >
-inline typename matrix< T , L , A >::array_type::const_iterator
-range_end( const matrix< T , L , A > &x )
-{
- return x.data().end();
-}
-
-} } } // namespace boost::numeric::ublas
-
#endif // BOOST_NUMERIC_ODEINT_UTIL_UBLAS_WRAPPER_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/util/unit_helper.hpp b/3party/boost/boost/numeric/odeint/util/unit_helper.hpp
index 67d4cdf338..736b3e5722 100644
--- a/3party/boost/boost/numeric/odeint/util/unit_helper.hpp
+++ b/3party/boost/boost/numeric/odeint/util/unit_helper.hpp
@@ -6,8 +6,8 @@
Get and set the value of a unit.
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -93,7 +93,6 @@ namespace detail {
template<class T , class V>
-
void set_unit_value(T &t , const V &v)
{
return detail::set_unit_value_impl<T , V>::set_value(t , v);
diff --git a/3party/boost/boost/numeric/odeint/util/unwrap_reference.hpp b/3party/boost/boost/numeric/odeint/util/unwrap_reference.hpp
index a21f234afb..d622a5c007 100644
--- a/3party/boost/boost/numeric/odeint/util/unwrap_reference.hpp
+++ b/3party/boost/boost/numeric/odeint/util/unwrap_reference.hpp
@@ -6,8 +6,8 @@
unwrap_reference
[end_description]
- Copyright 2009-2011 Karsten Ahnert
- Copyright 2009-2011 Mario Mulansky
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012-2013 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
@@ -43,20 +43,23 @@ namespace odeint {
#if BOOST_NUMERIC_ODEINT_CXX11
template<typename T>
-struct unwrap_reference
+class unwrap_reference
{
+public:
typedef typename std::remove_reference<T>::type type;
};
template<typename T>
-struct unwrap_reference< std::reference_wrapper<T> >
+class unwrap_reference< std::reference_wrapper<T> >
{
+public:
typedef typename std::remove_reference<T>::type type;
};
template<typename T>
-struct unwrap_reference< boost::reference_wrapper<T> >
+class unwrap_reference< boost::reference_wrapper<T> >
{
+public:
typedef typename boost::unwrap_reference<T>::type type;
};
@@ -84,4 +87,83 @@ using ::boost::ref;
}
}
+
+
+/*
+ *
+ * the following is the suggested way, but unfortunately it does not work with all compilers.
+ */
+
+/*
+
+#include <boost/config.hpp>
+
+
+#ifdef BOOST_NO_CXX11_HDR_FUNCTIONAL
+#include <boost/ref.hpp>
+#else
+#include <functional>
+#endif
+
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+#ifndef BOOST_NO_CXX11_HDR_FUNCTIONAL
+
+template<typename T>
+struct unwrap_reference
+{
+ typedef typename std::remove_reference<T>::type type;
+};
+
+template<typename T>
+struct unwrap_reference< std::reference_wrapper<T> >
+{
+ typedef typename std::remove_reference<T>::type type;
+};
+
+template<typename T>
+struct unwrap_reference< boost::reference_wrapper<T> >
+{
+ typedef typename boost::unwrap_reference<T>::type type;
+};
+
+#else
+
+using ::boost::unwrap_reference;
+
+#endif
+
+}
+}
+}
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+namespace detail {
+
+
+#ifndef BOOST_NO_CXX11_HDR_FUNCTIONAL
+
+using ::std::ref;
+
+#else
+
+using ::boost::ref;
+
+#endif
+
+
+}
+}
+}
+}
+
+*/
+
#endif // BOOST_NUMERIC_ODEINT_UTIL_UNWRAP_REFERENCE_HPP_INCLUDED
diff --git a/3party/boost/boost/numeric/odeint/version.hpp b/3party/boost/boost/numeric/odeint/version.hpp
index 94c974eb0e..379c906599 100644
--- a/3party/boost/boost/numeric/odeint/version.hpp
+++ b/3party/boost/boost/numeric/odeint/version.hpp
@@ -6,8 +6,8 @@
Defines the current version of odeint.
[end_description]
- Copyright 2009-2012 Karsten Ahnert
- Copyright 2009-2012 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Copyright 2011-2012 Mario Mulansky
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
diff --git a/3party/boost/boost/operators.hpp b/3party/boost/boost/operators.hpp
index b524cee381..82c374ebb5 100644
--- a/3party/boost/boost/operators.hpp
+++ b/3party/boost/boost/operators.hpp
@@ -97,14 +97,7 @@
namespace boost {
namespace detail {
-template <typename T> class empty_base {
-
-// Helmut Zeisel, empty base class optimization bug with GCC 3.0.0
-#if defined(__GNUC__) && __GNUC__==3 && __GNUC_MINOR__==0 && __GNU_PATCHLEVEL__==0
- bool dummy;
-#endif
-
-};
+template <typename T> class empty_base {};
} // namespace detail
} // namespace boost
@@ -711,7 +704,6 @@ struct random_access_iteratable
// the xxxx, xxxx1, and xxxx2 templates, importing them into boost:: as
// necessary.
//
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// is_chained_base<> - a traits class used to distinguish whether an operator
// template argument is being used for base class chaining, or is specifying a
@@ -809,24 +801,6 @@ BOOST_OPERATOR_TEMPLATE2(template_name##2) \
BOOST_OPERATOR_TEMPLATE1(template_name##1)
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-# define BOOST_OPERATOR_TEMPLATE4(template_name4) \
- BOOST_IMPORT_TEMPLATE4(template_name4)
-# define BOOST_OPERATOR_TEMPLATE3(template_name3) \
- BOOST_IMPORT_TEMPLATE3(template_name3)
-# define BOOST_OPERATOR_TEMPLATE2(template_name2) \
- BOOST_IMPORT_TEMPLATE2(template_name2)
-# define BOOST_OPERATOR_TEMPLATE1(template_name1) \
- BOOST_IMPORT_TEMPLATE1(template_name1)
-
- // In this case we can only assume that template_name<> is equivalent to the
- // more commonly needed template_name1<> form.
-# define BOOST_OPERATOR_TEMPLATE(template_name) \
- template <class T, class B = ::boost::detail::empty_base<T> > \
- struct template_name : template_name##1<T, B> {};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace boost {
@@ -897,14 +871,10 @@ struct operators2
, bitwise2<T,U
> > > {};
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T, class U = T>
struct operators : operators2<T, U> {};
template <class T> struct operators<T, T>
-#else
-template <class T> struct operators
-#endif
: totally_ordered<T
, integer_arithmetic<T
, bitwise<T
diff --git a/3party/boost/boost/optional/bad_optional_access.hpp b/3party/boost/boost/optional/bad_optional_access.hpp
new file mode 100644
index 0000000000..bf5cae07b9
--- /dev/null
+++ b/3party/boost/boost/optional/bad_optional_access.hpp
@@ -0,0 +1,29 @@
+// Copyright (C) 2014, Andrzej Krzemienski.
+//
+// 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)
+//
+// See http://www.boost.org/libs/optional for documentation.
+//
+// You are welcome to contact the author at:
+// akrzemi1@gmail.com
+//
+#ifndef BOOST_BAD_OPTIONAL_ACCESS_22MAY2014_HPP
+#define BOOST_BAD_OPTIONAL_ACCESS_22MAY2014_HPP
+
+#include <stdexcept>
+
+namespace boost {
+
+class bad_optional_access : public std::logic_error
+{
+public:
+ bad_optional_access()
+ : std::logic_error("Attempted to access the value of an uninitialized optional object.")
+ {}
+};
+
+} // namespace boost
+
+#endif
diff --git a/3party/boost/boost/optional/optional.hpp b/3party/boost/boost/optional/optional.hpp
index 0d6dba405d..07c4bd39ab 100644
--- a/3party/boost/boost/optional/optional.hpp
+++ b/3party/boost/boost/optional/optional.hpp
@@ -1,4 +1,5 @@
// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+// Copyright (C) 2014 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -11,58 +12,55 @@
//
// Revisions:
// 27 Apr 2008 (improved swap) Fernando Cacciola, Niels Dekker, Thorsten Ottosen
+// 05 May 2014 (Added move semantics) Andrzej Krzemienski
//
#ifndef BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP
#define BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP
#include <new>
#include <algorithm>
+#include <iosfwd>
#include <boost/config.hpp>
#include <boost/assert.hpp>
+#include <boost/core/explicit_operator_bool.hpp>
+#include <boost/optional/bad_optional_access.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
#include <boost/type.hpp>
#include <boost/type_traits/alignment_of.hpp>
#include <boost/type_traits/has_nothrow_constructor.hpp>
#include <boost/type_traits/type_with_alignment.hpp>
+#include <boost/type_traits/remove_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_lvalue_reference.hpp>
+#include <boost/type_traits/is_nothrow_move_assignable.hpp>
+#include <boost/type_traits/is_nothrow_move_constructible.hpp>
#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_rvalue_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/not.hpp>
#include <boost/detail/reference_content.hpp>
+#include <boost/move/utility.hpp>
#include <boost/none.hpp>
-#include <boost/utility/swap.hpp>
#include <boost/utility/addressof.hpp>
#include <boost/utility/compare_pointees.hpp>
+#include <boost/utility/enable_if.hpp>
#include <boost/utility/in_place_factory.hpp>
+#include <boost/utility/swap.hpp>
-#include <boost/optional/optional_fwd.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1200)
-// VC6.0 has the following bug:
-// When a templated assignment operator exist, an implicit conversion
-// constructing an optional<T> is used when assigment of the form:
-// optional<T> opt ; opt = T(...);
-// is compiled.
-// However, optional's ctor is _explicit_ and the assignemt shouldn't compile.
-// Therefore, for VC6.0 templated assignment is disabled.
-//
-#define BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT
-#endif
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
-// VC7.0 has the following bug:
-// When both a non-template and a template copy-ctor exist
-// and the templated version is made 'explicit', the explicit is also
-// given to the non-templated version, making the class non-implicitely-copyable.
-//
-#define BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
-#endif
+#include <boost/optional/optional_fwd.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION,<=700)
-// AFAICT only VC7.1 correctly resolves the overload set
+#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION,<=700)
+// AFAICT only Intel 7 correctly resolves the overload set
// that includes the in-place factory taking functions,
-// so for the other VC versions, in-place factory support
+// so for the other icc versions, in-place factory support
// is disabled
#define BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
#endif
@@ -83,8 +81,7 @@
#define BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
#endif
-#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) > 302 \
- && !defined(__INTEL_COMPILER)
+#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
// GCC since 3.3 has may_alias attribute that helps to alleviate optimizer issues with
// regard to violation of the strict aliasing rules. The optional< T > storage type is marked
// with this attribute in order to let the compiler know that it will alias objects of type T
@@ -115,7 +112,6 @@ class typed_in_place_factory_base ;
template<class T> void swap ( optional<T>& x, optional<T>& y );
namespace optional_detail {
-
// This local class is used instead of that in "aligned_storage.hpp"
// because I've found the 'official' class to ICE BCB5.5
// when some types are used with optional<>
@@ -127,7 +123,7 @@ class aligned_storage
union
// This works around GCC warnings about breaking strict aliasing rules when casting storage address to T*
#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
- __attribute__((may_alias))
+ __attribute__((__may_alias__))
#endif
dummy_u
{
@@ -152,22 +148,49 @@ struct types_when_isnt_ref
{
typedef T const& reference_const_type ;
typedef T & reference_type ;
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ typedef T && rval_reference_type ;
+ typedef T && reference_type_of_temporary_wrapper;
+#ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
+ // GCC 4.4 has support for an early draft of rvalue references. The conforming version below
+ // causes warnings about returning references to a temporary.
+ static T&& move(T&& r) { return r; }
+#else
+ static rval_reference_type move(reference_type r) { return boost::move(r); }
+#endif
+#endif
typedef T const* pointer_const_type ;
typedef T * pointer_type ;
typedef T const& argument_type ;
} ;
+
template<class T>
struct types_when_is_ref
{
typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type raw_type ;
- typedef raw_type& reference_const_type ;
- typedef raw_type& reference_type ;
- typedef raw_type* pointer_const_type ;
- typedef raw_type* pointer_type ;
- typedef raw_type& argument_type ;
+ typedef raw_type& reference_const_type ;
+ typedef raw_type& reference_type ;
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ typedef BOOST_DEDUCED_TYPENAME remove_const<raw_type>::type&& rval_reference_type ;
+ typedef raw_type& reference_type_of_temporary_wrapper;
+ static reference_type move(reference_type r) { return r; }
+#endif
+ typedef raw_type* pointer_const_type ;
+ typedef raw_type* pointer_type ;
+ typedef raw_type& argument_type ;
} ;
+template <class To, class From>
+void prevent_binding_rvalue_ref_to_optional_lvalue_ref()
+{
+#ifndef BOOST_OPTIONAL_ALLOW_BINDING_TO_RVALUES
+ BOOST_STATIC_ASSERT_MSG(
+ !boost::is_lvalue_reference<To>::value || !boost::is_rvalue_reference<From>::value,
+ "binding rvalue references to optional lvalue references is disallowed");
+#endif
+}
+
struct optional_tag {} ;
template<class T>
@@ -201,10 +224,12 @@ class optional_base : public optional_tag
typedef BOOST_DEDUCED_TYPENAME mpl::if_<is_reference_predicate,types_when_ref,types_when_not_ref>::type types ;
protected:
- typedef bool (this_type::*unspecified_bool_type)() const;
-
typedef BOOST_DEDUCED_TYPENAME types::reference_type reference_type ;
typedef BOOST_DEDUCED_TYPENAME types::reference_const_type reference_const_type ;
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ typedef BOOST_DEDUCED_TYPENAME types::rval_reference_type rval_reference_type ;
+ typedef BOOST_DEDUCED_TYPENAME types::reference_type_of_temporary_wrapper reference_type_of_temporary_wrapper ;
+#endif
typedef BOOST_DEDUCED_TYPENAME types::pointer_type pointer_type ;
typedef BOOST_DEDUCED_TYPENAME types::pointer_const_type pointer_const_type ;
typedef BOOST_DEDUCED_TYPENAME types::argument_type argument_type ;
@@ -230,6 +255,17 @@ class optional_base : public optional_tag
construct(val);
}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // move-construct an optional<T> initialized from an rvalue-ref to 'val'.
+ // Can throw if T::T(T&&) does
+ optional_base ( rval_reference_type val )
+ :
+ m_initialized(false)
+ {
+ construct( boost::move(val) );
+ }
+#endif
+
// Creates an optional<T> initialized with 'val' IFF cond is true, otherwise creates an uninitialzed optional<T>.
// Can throw if T::T(T const&) does
optional_base ( bool cond, argument_type val )
@@ -250,7 +286,29 @@ class optional_base : public optional_tag
construct(rhs.get_impl());
}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Creates a deep move of another optional<T>
+ // Can throw if T::T(T&&) does
+ optional_base ( optional_base&& rhs )
+ :
+ m_initialized(false)
+ {
+ if ( rhs.is_initialized() )
+ construct( boost::move(rhs.get_impl()) );
+ }
+#endif
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+ template<class Expr, class PtrExpr>
+ explicit optional_base ( Expr&& expr, PtrExpr const* tag )
+ :
+ m_initialized(false)
+ {
+ construct(boost::forward<Expr>(expr),tag);
+ }
+#else
// This is used for both converting and in-place constructions.
// Derived classes use the 'tag' to select the appropriate
// implementation (the correct 'construct()' overload)
@@ -262,6 +320,7 @@ class optional_base : public optional_tag
construct(expr,tag);
}
+#endif
// No-throw (assuming T::~T() doesn't)
@@ -282,6 +341,24 @@ class optional_base : public optional_tag
construct(rhs.get_impl());
}
}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Assigns from another optional<T> (deep-moves the rhs value)
+ void assign ( optional_base&& rhs )
+ {
+ if (is_initialized())
+ {
+ if ( rhs.is_initialized() )
+ assign_value(boost::move(rhs.get_impl()), is_reference_predicate() );
+ else destroy();
+ }
+ else
+ {
+ if ( rhs.is_initialized() )
+ construct(boost::move(rhs.get_impl()));
+ }
+ }
+#endif
// Assigns from another _convertible_ optional<U> (deep-copies the rhs value)
template<class U>
@@ -300,6 +377,26 @@ class optional_base : public optional_tag
}
}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // move-assigns from another _convertible_ optional<U> (deep-moves from the rhs value)
+ template<class U>
+ void assign ( optional<U>&& rhs )
+ {
+ typedef BOOST_DEDUCED_TYPENAME optional<U>::rval_reference_type ref_type;
+ if (is_initialized())
+ {
+ if ( rhs.is_initialized() )
+ assign_value(static_cast<ref_type>(rhs.get()), is_reference_predicate() );
+ else destroy();
+ }
+ else
+ {
+ if ( rhs.is_initialized() )
+ construct(static_cast<ref_type>(rhs.get()));
+ }
+ }
+#endif
+
// Assigns from a T (deep-copies the rhs value)
void assign ( argument_type val )
{
@@ -307,28 +404,50 @@ class optional_base : public optional_tag
assign_value(val, is_reference_predicate() );
else construct(val);
}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Assigns from a T (deep-moves the rhs value)
+ void assign ( rval_reference_type val )
+ {
+ if (is_initialized())
+ assign_value( boost::move(val), is_reference_predicate() );
+ else construct( boost::move(val) );
+ }
+#endif
// Assigns from "none", destroying the current value, if any, leaving this UNINITIALIZED
// No-throw (assuming T::~T() doesn't)
- void assign ( none_t ) { destroy(); }
+ void assign ( none_t ) BOOST_NOEXCEPT { destroy(); }
#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ template<class Expr, class ExprPtr>
+ void assign_expr ( Expr&& expr, ExprPtr const* tag )
+ {
+ if (is_initialized())
+ assign_expr_to_initialized(boost::forward<Expr>(expr),tag);
+ else construct(boost::forward<Expr>(expr),tag);
+ }
+#else
template<class Expr>
void assign_expr ( Expr const& expr, Expr const* tag )
- {
- if (is_initialized())
- assign_expr_to_initialized(expr,tag);
- else construct(expr,tag);
- }
+ {
+ if (is_initialized())
+ assign_expr_to_initialized(expr,tag);
+ else construct(expr,tag);
+ }
+#endif
+
#endif
public :
- // Destroys the current value, if any, leaving this UNINITIALIZED
+ // **DEPPRECATED** Destroys the current value, if any, leaving this UNINITIALIZED
// No-throw (assuming T::~T() doesn't)
- void reset() { destroy(); }
+ void reset() BOOST_NOEXCEPT { destroy(); }
- // Replaces the current value -if any- with 'val'
+ // **DEPPRECATED** Replaces the current value -if any- with 'val'
void reset ( argument_type val ) { assign(val); }
// Returns a pointer to the value if this is initialized, otherwise,
@@ -343,11 +462,92 @@ class optional_base : public optional_tag
void construct ( argument_type val )
{
- new (m_storage.address()) internal_type(val) ;
+ ::new (m_storage.address()) internal_type(val) ;
+ m_initialized = true ;
+ }
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ void construct ( rval_reference_type val )
+ {
+ ::new (m_storage.address()) internal_type( types::move(val) ) ;
+ m_initialized = true ;
+ }
+#endif
+
+
+#if (!defined BOOST_NO_CXX11_RVALUE_REFERENCES) && (!defined BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ // Constructs in-place
+ // upon exception *this is always uninitialized
+ template<class... Args>
+ void emplace_assign ( Args&&... args )
+ {
+ destroy();
+ ::new (m_storage.address()) internal_type( boost::forward<Args>(args)... );
+ m_initialized = true ;
+ }
+#elif (!defined BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template<class Arg>
+ void emplace_assign ( Arg&& arg )
+ {
+ destroy();
+ ::new (m_storage.address()) internal_type( boost::forward<Arg>(arg) );
+ m_initialized = true ;
+ }
+#else
+ template<class Arg>
+ void emplace_assign ( const Arg& arg )
+ {
+ destroy();
+ ::new (m_storage.address()) internal_type( arg );
+ m_initialized = true ;
+ }
+
+ template<class Arg>
+ void emplace_assign ( Arg& arg )
+ {
+ destroy();
+ ::new (m_storage.address()) internal_type( arg );
m_initialized = true ;
}
+#endif
#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Constructs in-place using the given factory
+ template<class Expr>
+ void construct ( Expr&& factory, in_place_factory_base const* )
+ {
+ BOOST_STATIC_ASSERT ( ::boost::mpl::not_<is_reference_predicate>::value ) ;
+ boost_optional_detail::construct<value_type>(factory, m_storage.address());
+ m_initialized = true ;
+ }
+
+ // Constructs in-place using the given typed factory
+ template<class Expr>
+ void construct ( Expr&& factory, typed_in_place_factory_base const* )
+ {
+ BOOST_STATIC_ASSERT ( ::boost::mpl::not_<is_reference_predicate>::value ) ;
+ factory.apply(m_storage.address()) ;
+ m_initialized = true ;
+ }
+
+ template<class Expr>
+ void assign_expr_to_initialized ( Expr&& factory, in_place_factory_base const* tag )
+ {
+ destroy();
+ construct(factory,tag);
+ }
+
+ // Constructs in-place using the given typed factory
+ template<class Expr>
+ void assign_expr_to_initialized ( Expr&& factory, typed_in_place_factory_base const* tag )
+ {
+ destroy();
+ construct(factory,tag);
+ }
+
+#else
// Constructs in-place using the given factory
template<class Expr>
void construct ( Expr const& factory, in_place_factory_base const* )
@@ -382,7 +582,31 @@ class optional_base : public optional_tag
}
#endif
- // Constructs using any expression implicitely convertible to the single argument
+#endif
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Constructs using any expression implicitly convertible to the single argument
+ // of a one-argument T constructor.
+ // Converting constructions of optional<T> from optional<U> uses this function with
+ // 'Expr' being of type 'U' and relying on a converting constructor of T from U.
+ template<class Expr>
+ void construct ( Expr&& expr, void const* )
+ {
+ new (m_storage.address()) internal_type(boost::forward<Expr>(expr)) ;
+ m_initialized = true ;
+ }
+
+ // Assigns using a form any expression implicitly convertible to the single argument
+ // of a T's assignment operator.
+ // Converting assignments of optional<T> from optional<U> uses this function with
+ // 'Expr' being of type 'U' and relying on a converting assignment of T from U.
+ template<class Expr>
+ void assign_expr_to_initialized ( Expr&& expr, void const* )
+ {
+ assign_value(boost::forward<Expr>(expr), is_reference_predicate());
+ }
+#else
+ // Constructs using any expression implicitly convertible to the single argument
// of a one-argument T constructor.
// Converting constructions of optional<T> from optional<U> uses this function with
// 'Expr' being of type 'U' and relying on a converting constructor of T from U.
@@ -393,7 +617,7 @@ class optional_base : public optional_tag
m_initialized = true ;
}
- // Assigns using a form any expression implicitely convertible to the single argument
+ // Assigns using a form any expression implicitly convertible to the single argument
// of a T's assignment operator.
// Converting assignments of optional<T> from optional<U> uses this function with
// 'Expr' being of type 'U' and relying on a converting assignment of T from U.
@@ -403,6 +627,8 @@ class optional_base : public optional_tag
assign_value(expr, is_reference_predicate());
}
+#endif
+
#ifdef BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
// BCB5.64 (and probably lower versions) workaround.
// The in-place factories are supported by means of catch-all constructors
@@ -416,6 +642,20 @@ class optional_base : public optional_tag
// For VC<=70 compilers this workaround dosen't work becasue the comnpiler issues and error
// instead of choosing the wrong overload
//
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Notice that 'Expr' will be optional<T> or optional<U> (but not optional_base<..>)
+ template<class Expr>
+ void construct ( Expr&& expr, optional_tag const* )
+ {
+ if ( expr.is_initialized() )
+ {
+ // An exception can be thrown here.
+ // It it happens, THIS will be left uninitialized.
+ new (m_storage.address()) internal_type(types::move(expr.get())) ;
+ m_initialized = true ;
+ }
+ }
+#else
// Notice that 'Expr' will be optional<T> or optional<U> (but not optional_base<..>)
template<class Expr>
void construct ( Expr const& expr, optional_tag const* )
@@ -429,9 +669,14 @@ class optional_base : public optional_tag
}
}
#endif
+#endif // defined BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
void assign_value ( argument_type val, is_not_reference_tag ) { get_impl() = val; }
void assign_value ( argument_type val, is_reference_tag ) { construct(val); }
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ void assign_value ( rval_reference_type val, is_not_reference_tag ) { get_impl() = static_cast<rval_reference_type>(val); }
+ void assign_value ( rval_reference_type val, is_reference_tag ) { construct( static_cast<rval_reference_type>(val) ); }
+#endif
void destroy()
{
@@ -439,8 +684,6 @@ class optional_base : public optional_tag
destroy_impl(is_reference_predicate()) ;
}
- unspecified_bool_type safe_bool() const { return m_initialized ? &this_type::is_initialized : 0 ; }
-
reference_const_type get_impl() const { return dereference(get_object(), is_reference_predicate() ) ; }
reference_type get_impl() { return dereference(get_object(), is_reference_predicate() ) ; }
@@ -476,7 +719,7 @@ class optional_base : public optional_tag
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->internal_type::~internal_type() ; m_initialized = false ; }
#else
- void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->T::~T() ; m_initialized = false ; }
+ void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->~T() ; m_initialized = false ; }
#endif
void destroy_impl ( is_reference_tag ) { m_initialized = false ; }
@@ -500,8 +743,6 @@ class optional : public optional_detail::optional_base<T>
{
typedef optional_detail::optional_base<T> base ;
- typedef BOOST_DEDUCED_TYPENAME base::unspecified_bool_type unspecified_bool_type ;
-
public :
typedef optional<T> this_type ;
@@ -509,27 +750,37 @@ class optional : public optional_detail::optional_base<T>
typedef BOOST_DEDUCED_TYPENAME base::value_type value_type ;
typedef BOOST_DEDUCED_TYPENAME base::reference_type reference_type ;
typedef BOOST_DEDUCED_TYPENAME base::reference_const_type reference_const_type ;
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ typedef BOOST_DEDUCED_TYPENAME base::rval_reference_type rval_reference_type ;
+ typedef BOOST_DEDUCED_TYPENAME base::reference_type_of_temporary_wrapper reference_type_of_temporary_wrapper ;
+#endif
typedef BOOST_DEDUCED_TYPENAME base::pointer_type pointer_type ;
typedef BOOST_DEDUCED_TYPENAME base::pointer_const_type pointer_const_type ;
typedef BOOST_DEDUCED_TYPENAME base::argument_type argument_type ;
// Creates an optional<T> uninitialized.
// No-throw
- optional() : base() {}
+ optional() BOOST_NOEXCEPT : base() {}
// Creates an optional<T> uninitialized.
// No-throw
- optional( none_t none_ ) : base(none_) {}
+ optional( none_t none_ ) BOOST_NOEXCEPT : base(none_) {}
// Creates an optional<T> initialized with 'val'.
// Can throw if T::T(T const&) does
optional ( argument_type val ) : base(val) {}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Creates an optional<T> initialized with 'move(val)'.
+ // Can throw if T::T(T &&) does
+ optional ( rval_reference_type val ) : base( boost::forward<T>(val) )
+ {optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, rval_reference_type>();}
+#endif
+
// Creates an optional<T> initialized with 'val' IFF cond is true, otherwise creates an uninitialized optional.
// Can throw if T::T(T const&) does
optional ( bool cond, argument_type val ) : base(cond,val) {}
-#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
// NOTE: MSVC needs templated versions first
// Creates a deep copy of another convertible optional<U>
@@ -543,43 +794,94 @@ class optional : public optional_detail::optional_base<T>
if ( rhs.is_initialized() )
this->construct(rhs.get());
}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Creates a deep move of another convertible optional<U>
+ // Requires a valid conversion from U to T.
+ // Can throw if T::T(U&&) does
+ template<class U>
+ explicit optional ( optional<U> && rhs )
+ :
+ base()
+ {
+ if ( rhs.is_initialized() )
+ this->construct( boost::move(rhs.get()) );
+ }
#endif
#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
// Creates an optional<T> with an expression which can be either
// (a) An instance of InPlaceFactory (i.e. in_place(a,b,...,n);
// (b) An instance of TypedInPlaceFactory ( i.e. in_place<T>(a,b,...,n);
- // (c) Any expression implicitely convertible to the single type
+ // (c) Any expression implicitly convertible to the single type
// of a one-argument T's constructor.
// (d*) Weak compilers (BCB) might also resolved Expr as optional<T> and optional<U>
// even though explicit overloads are present for these.
// Depending on the above some T ctor is called.
- // Can throw is the resolved T ctor throws.
+ // Can throw if the resolved T ctor throws.
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+
+ template<class Expr>
+ explicit optional ( Expr&& expr,
+ BOOST_DEDUCED_TYPENAME boost::disable_if_c<
+ (boost::is_base_of<optional_detail::optional_tag, BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type>::value) ||
+ boost::is_same<BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type, none_t>::value >::type* = 0
+ )
+ : base(boost::forward<Expr>(expr),boost::addressof(expr))
+ {optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, Expr&&>();}
+
+#else
template<class Expr>
explicit optional ( Expr const& expr ) : base(expr,boost::addressof(expr)) {}
-#endif
+#endif // !defined BOOST_NO_CXX11_RVALUE_REFERENCES
+#endif // !defined BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
// Creates a deep copy of another optional<T>
// Can throw if T::T(T const&) does
optional ( optional const& rhs ) : base( static_cast<base const&>(rhs) ) {}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Creates a deep move of another optional<T>
+ // Can throw if T::T(T&&) does
+ optional ( optional && rhs )
+ BOOST_NOEXCEPT_IF(::boost::is_nothrow_move_constructible<T>::value)
+ : base( boost::move(rhs) )
+ {}
+
+#endif
// No-throw (assuming T::~T() doesn't)
~optional() {}
#if !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) && !defined(BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION)
// Assigns from an expression. See corresponding constructor.
// Basic Guarantee: If the resolved T ctor throws, this is left UNINITIALIZED
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+ template<class Expr>
+ BOOST_DEDUCED_TYPENAME boost::disable_if_c<
+ boost::is_base_of<optional_detail::optional_tag, BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type>::value ||
+ boost::is_same<BOOST_DEDUCED_TYPENAME boost::decay<Expr>::type, none_t>::value,
+ optional&
+ >::type
+ operator= ( Expr&& expr )
+ {
+ optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, Expr&&>();
+ this->assign_expr(boost::forward<Expr>(expr),boost::addressof(expr));
+ return *this ;
+ }
+
+#else
template<class Expr>
optional& operator= ( Expr const& expr )
{
this->assign_expr(expr,boost::addressof(expr));
return *this ;
}
-#endif
-
+#endif // !defined BOOST_NO_CXX11_RVALUE_REFERENCES
+#endif // !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) && !defined(BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION)
-#ifndef BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT
- // Assigns from another convertible optional<U> (converts && deep-copies the rhs value)
+ // Copy-assigns from another convertible optional<U> (converts && deep-copies the rhs value)
// Requires a valid conversion from U to T.
// Basic Guarantee: If T::T( U const& ) throws, this is left UNINITIALIZED
template<class U>
@@ -588,6 +890,17 @@ class optional : public optional_detail::optional_base<T>
this->assign(rhs);
return *this ;
}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Move-assigns from another convertible optional<U> (converts && deep-moves the rhs value)
+ // Requires a valid conversion from U to T.
+ // Basic Guarantee: If T::T( U && ) throws, this is left UNINITIALIZED
+ template<class U>
+ optional& operator= ( optional<U> && rhs )
+ {
+ this->assign(boost::move(rhs));
+ return *this ;
+ }
#endif
// Assigns from another optional<T> (deep-copies the rhs value)
@@ -599,6 +912,16 @@ class optional : public optional_detail::optional_base<T>
return *this ;
}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Assigns from another optional<T> (deep-moves the rhs value)
+ optional& operator= ( optional && rhs )
+ BOOST_NOEXCEPT_IF(::boost::is_nothrow_move_constructible<T>::value && ::boost::is_nothrow_move_assignable<T>::value)
+ {
+ this->assign( static_cast<base &&>(rhs) ) ;
+ return *this ;
+ }
+#endif
+
// Assigns from a T (deep-copies the rhs value)
// Basic Guarantee: If T::( T const& ) throws, this is left UNINITIALIZED
optional& operator= ( argument_type val )
@@ -607,20 +930,58 @@ class optional : public optional_detail::optional_base<T>
return *this ;
}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Assigns from a T (deep-moves the rhs value)
+ optional& operator= ( rval_reference_type val )
+ {
+ optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, rval_reference_type>();
+ this->assign( boost::move(val) ) ;
+ return *this ;
+ }
+#endif
+
// Assigns from a "none"
// Which destroys the current value, if any, leaving this UNINITIALIZED
// No-throw (assuming T::~T() doesn't)
- optional& operator= ( none_t none_ )
+ optional& operator= ( none_t none_ ) BOOST_NOEXCEPT
{
this->assign( none_ ) ;
return *this ;
}
+
+#if (!defined BOOST_NO_CXX11_RVALUE_REFERENCES) && (!defined BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ // Constructs in-place
+ // upon exception *this is always uninitialized
+ template<class... Args>
+ void emplace ( Args&&... args )
+ {
+ this->emplace_assign( boost::forward<Args>(args)... );
+ }
+#elif (!defined BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template<class Arg>
+ void emplace ( Arg&& arg )
+ {
+ this->emplace_assign( boost::forward<Arg>(arg) );
+ }
+#else
+ template<class Arg>
+ void emplace ( const Arg& arg )
+ {
+ this->emplace_assign( arg );
+ }
+
+ template<class Arg>
+ void emplace ( Arg& arg )
+ {
+ this->emplace_assign( arg );
+ }
+#endif
void swap( optional & arg )
+ BOOST_NOEXCEPT_IF(::boost::is_nothrow_move_constructible<T>::value && ::boost::is_nothrow_move_assignable<T>::value)
{
// allow for Koenig lookup
- using boost::swap;
- swap(*this, arg);
+ boost::swap(*this, arg);
}
@@ -643,17 +1004,139 @@ class optional : public optional_detail::optional_base<T>
// Returns a reference to the value if this is initialized, otherwise,
// the behaviour is UNDEFINED
// No-throw
+#ifndef BOOST_NO_CXX11_REF_QUALIFIERS
+ reference_const_type operator *() const& { return this->get() ; }
+ reference_type operator *() & { return this->get() ; }
+ reference_type_of_temporary_wrapper operator *() && { return boost::move(this->get()) ; }
+#else
reference_const_type operator *() const { return this->get() ; }
reference_type operator *() { return this->get() ; }
+#endif // !defined BOOST_NO_CXX11_REF_QUALIFIERS
+
+#ifndef BOOST_NO_CXX11_REF_QUALIFIERS
+ reference_const_type value() const&
+ {
+ if (this->is_initialized())
+ return this->get() ;
+ else
+ throw_exception(bad_optional_access());
+ }
+
+ reference_type value() &
+ {
+ if (this->is_initialized())
+ return this->get() ;
+ else
+ throw_exception(bad_optional_access());
+ }
+
+ reference_type_of_temporary_wrapper value() &&
+ {
+ if (this->is_initialized())
+ return boost::move(this->get()) ;
+ else
+ throw_exception(bad_optional_access());
+ }
- // implicit conversion to "bool"
- // No-throw
- operator unspecified_bool_type() const { return this->safe_bool() ; }
+#else
+ reference_const_type value() const
+ {
+ if (this->is_initialized())
+ return this->get() ;
+ else
+ throw_exception(bad_optional_access());
+ }
+
+ reference_type value()
+ {
+ if (this->is_initialized())
+ return this->get() ;
+ else
+ throw_exception(bad_optional_access());
+ }
+#endif
- // This is provided for those compilers which don't like the conversion to bool
- // on some contexts.
- bool operator!() const { return !this->is_initialized() ; }
+
+#ifndef BOOST_NO_CXX11_REF_QUALIFIERS
+ template <class U>
+ value_type value_or ( U&& v ) const&
+ {
+ if (this->is_initialized())
+ return get();
+ else
+ return boost::forward<U>(v);
+ }
+
+ template <class U>
+ value_type value_or ( U&& v ) &&
+ {
+ if (this->is_initialized())
+ return boost::move(get());
+ else
+ return boost::forward<U>(v);
+ }
+#elif !defined BOOST_NO_CXX11_RVALUE_REFERENCES
+ template <class U>
+ value_type value_or ( U&& v ) const
+ {
+ if (this->is_initialized())
+ return get();
+ else
+ return boost::forward<U>(v);
+ }
+#else
+ template <class U>
+ value_type value_or ( U const& v ) const
+ {
+ if (this->is_initialized())
+ return get();
+ else
+ return v;
+ }
+#endif
+
+
+#ifndef BOOST_NO_CXX11_REF_QUALIFIERS
+ template <typename F>
+ value_type value_or_eval ( F f ) const&
+ {
+ if (this->is_initialized())
+ return get();
+ else
+ return f();
+ }
+
+ template <typename F>
+ value_type value_or_eval ( F f ) &&
+ {
+ if (this->is_initialized())
+ return boost::move(get());
+ else
+ return f();
+ }
+#else
+ template <typename F>
+ value_type value_or_eval ( F f ) const
+ {
+ if (this->is_initialized())
+ return get();
+ else
+ return f();
+ }
+#endif
+
+ bool operator!() const BOOST_NOEXCEPT { return !this->is_initialized() ; }
+
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
+} ;
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template<class T>
+class optional<T&&>
+{
+ BOOST_STATIC_ASSERT_MSG(sizeof(T) == 0, "Optional rvalue references are illegal.");
} ;
+#endif
// Returns optional<T>(v)
template<class T>
@@ -743,6 +1226,11 @@ get_pointer ( optional<T>& opt )
return opt.get_ptr() ;
}
+// Forward declaration to prevent operator safe-bool from being used.
+template<class CharType, class CharTrait, class T>
+std::basic_ostream<CharType, CharTrait>&
+operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v);
+
// optional's relational operators ( ==, !=, <, >, <=, >= ) have deep-semantics (compare values).
// WARNING: This is UNLIKE pointers. Use equal_pointees()/less_pointess() in generic code instead.
@@ -856,8 +1344,8 @@ bool operator >= ( T const& x, optional<T> const& y )
template<class T>
inline
-bool operator == ( optional<T> const& x, none_t )
-{ return equal_pointees(x, optional<T>() ); }
+bool operator == ( optional<T> const& x, none_t ) BOOST_NOEXCEPT
+{ return !x; }
template<class T>
inline
@@ -866,8 +1354,8 @@ bool operator < ( optional<T> const& x, none_t )
template<class T>
inline
-bool operator != ( optional<T> const& x, none_t y )
-{ return !( x == y ) ; }
+bool operator != ( optional<T> const& x, none_t ) BOOST_NOEXCEPT
+{ return bool(x); }
template<class T>
inline
@@ -890,8 +1378,8 @@ bool operator >= ( optional<T> const& x, none_t y )
template<class T>
inline
-bool operator == ( none_t , optional<T> const& y )
-{ return equal_pointees(optional<T>() ,y); }
+bool operator == ( none_t , optional<T> const& y ) BOOST_NOEXCEPT
+{ return !y; }
template<class T>
inline
@@ -900,8 +1388,8 @@ bool operator < ( none_t , optional<T> const& y )
template<class T>
inline
-bool operator != ( none_t x, optional<T> const& y )
-{ return !( x == y ) ; }
+bool operator != ( none_t, optional<T> const& y ) BOOST_NOEXCEPT
+{ return bool(y); }
template<class T>
inline
@@ -949,6 +1437,37 @@ struct swap_selector<true>
}
};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template<>
+struct swap_selector<false>
+{
+ template<class T>
+ static void optional_swap ( optional<T>& x, optional<T>& y )
+ //BOOST_NOEXCEPT_IF(::boost::is_nothrow_move_constructible<T>::value && BOOST_NOEXCEPT_EXPR(boost::swap(*x, *y)))
+ {
+ if(x)
+ {
+ if (y)
+ {
+ boost::swap(*x, *y);
+ }
+ else
+ {
+ y = boost::move(*x);
+ x = boost::none;
+ }
+ }
+ else
+ {
+ if (y)
+ {
+ x = boost::move(*y);
+ y = boost::none;
+ }
+ }
+ }
+};
+#else
template<>
struct swap_selector<false>
{
@@ -975,6 +1494,7 @@ struct swap_selector<false>
}
}
};
+#endif // !defined BOOST_NO_CXX11_RVALUE_REFERENCES
} // namespace optional_detail
@@ -982,6 +1502,7 @@ template<class T>
struct optional_swap_should_use_default_constructor : has_nothrow_default_constructor<T> {} ;
template<class T> inline void swap ( optional<T>& x, optional<T>& y )
+ //BOOST_NOEXCEPT_IF(::boost::is_nothrow_move_constructible<T>::value && BOOST_NOEXCEPT_EXPR(boost::swap(*x, *y)))
{
optional_detail::swap_selector<optional_swap_should_use_default_constructor<T>::value>::optional_swap(x, y);
}
diff --git a/3party/boost/boost/optional/optional_fwd.hpp b/3party/boost/boost/optional/optional_fwd.hpp
index 388cc1c632..fb59682df6 100644
--- a/3party/boost/boost/optional/optional_fwd.hpp
+++ b/3party/boost/boost/optional/optional_fwd.hpp
@@ -11,15 +11,16 @@
//
// Revisions:
// 10 May 2008 (added swap related forward declaration) Niels Dekker
-//
+//
#ifndef BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
#define BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
+
namespace boost {
template<class T> class optional ;
-template<class T> void swap ( optional<T>& , optional<T>& ) ;
+template<class T> void swap ( optional<T>& , optional<T>& );
template<class T> struct optional_swap_should_use_default_constructor ;
diff --git a/3party/boost/boost/optional/optional_io.hpp b/3party/boost/boost/optional/optional_io.hpp
index 9e0c807d3e..4c1c610217 100644
--- a/3party/boost/boost/optional/optional_io.hpp
+++ b/3party/boost/boost/optional/optional_io.hpp
@@ -12,18 +12,8 @@
#ifndef BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
#define BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
-#if defined __GNUC__
-# if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97)
-# define BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
-# endif
-#endif // __GNUC__
-
-#if defined BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
-# include <iostream>
-#else
-# include <istream>
-# include <ostream>
-#endif
+#include <istream>
+#include <ostream>
#include <boost/none.hpp>
#include <boost/assert.hpp>
@@ -33,15 +23,10 @@
namespace boost
{
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
-template<class T>
-inline std::ostream& operator<<(std::ostream& out, optional<T> const& v)
-#else
template<class CharType, class CharTrait, class T>
inline
std::basic_ostream<CharType, CharTrait>&
operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v)
-#endif
{
if ( out.good() )
{
@@ -53,15 +38,10 @@ operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v)
return out;
}
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
-template<class T>
-inline std::istream& operator>>(std::istream& in, optional<T>& v)
-#else
template<class CharType, class CharTrait, class T>
inline
std::basic_istream<CharType, CharTrait>&
operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v)
-#endif
{
if (in.good())
{
diff --git a/3party/boost/boost/parameter.hpp b/3party/boost/boost/parameter.hpp
index 3cc70cb109..3cc70cb109 100644..100755
--- a/3party/boost/boost/parameter.hpp
+++ b/3party/boost/boost/parameter.hpp
diff --git a/3party/boost/boost/parameter/aux_/overloads.hpp b/3party/boost/boost/parameter/aux_/overloads.hpp
index dcc92d4d75..dcc92d4d75 100644..100755
--- a/3party/boost/boost/parameter/aux_/overloads.hpp
+++ b/3party/boost/boost/parameter/aux_/overloads.hpp
diff --git a/3party/boost/boost/parameter/aux_/parameter_requirements.hpp b/3party/boost/boost/parameter/aux_/parameter_requirements.hpp
index ad7a129dd7..ad7a129dd7 100644..100755
--- a/3party/boost/boost/parameter/aux_/parameter_requirements.hpp
+++ b/3party/boost/boost/parameter/aux_/parameter_requirements.hpp
diff --git a/3party/boost/boost/parameter/aux_/parenthesized_type.hpp b/3party/boost/boost/parameter/aux_/parenthesized_type.hpp
index c6ddd77f31..c6ddd77f31 100644..100755
--- a/3party/boost/boost/parameter/aux_/parenthesized_type.hpp
+++ b/3party/boost/boost/parameter/aux_/parenthesized_type.hpp
diff --git a/3party/boost/boost/parameter/aux_/preprocessor/flatten.hpp b/3party/boost/boost/parameter/aux_/preprocessor/flatten.hpp
index 5d7615e3f3..5d7615e3f3 100644..100755
--- a/3party/boost/boost/parameter/aux_/preprocessor/flatten.hpp
+++ b/3party/boost/boost/parameter/aux_/preprocessor/flatten.hpp
diff --git a/3party/boost/boost/parameter/aux_/preprocessor/for_each.hpp b/3party/boost/boost/parameter/aux_/preprocessor/for_each.hpp
index 0eb1f702db..0eb1f702db 100644..100755
--- a/3party/boost/boost/parameter/aux_/preprocessor/for_each.hpp
+++ b/3party/boost/boost/parameter/aux_/preprocessor/for_each.hpp
diff --git a/3party/boost/boost/parameter/aux_/python/invoker_iterate.hpp b/3party/boost/boost/parameter/aux_/python/invoker_iterate.hpp
index c18f6d0bbb..c18f6d0bbb 100644..100755
--- a/3party/boost/boost/parameter/aux_/python/invoker_iterate.hpp
+++ b/3party/boost/boost/parameter/aux_/python/invoker_iterate.hpp
diff --git a/3party/boost/boost/parameter/aux_/result_of0.hpp b/3party/boost/boost/parameter/aux_/result_of0.hpp
index e0096148b4..e0096148b4 100644..100755
--- a/3party/boost/boost/parameter/aux_/result_of0.hpp
+++ b/3party/boost/boost/parameter/aux_/result_of0.hpp
diff --git a/3party/boost/boost/parameter/aux_/tag.hpp b/3party/boost/boost/parameter/aux_/tag.hpp
index 475efb9e4a..475efb9e4a 100644..100755
--- a/3party/boost/boost/parameter/aux_/tag.hpp
+++ b/3party/boost/boost/parameter/aux_/tag.hpp
diff --git a/3party/boost/boost/parameter/aux_/template_keyword.hpp b/3party/boost/boost/parameter/aux_/template_keyword.hpp
index 5a02f008a3..5a02f008a3 100644..100755
--- a/3party/boost/boost/parameter/aux_/template_keyword.hpp
+++ b/3party/boost/boost/parameter/aux_/template_keyword.hpp
diff --git a/3party/boost/boost/parameter/aux_/unwrap_cv_reference.hpp b/3party/boost/boost/parameter/aux_/unwrap_cv_reference.hpp
index e7aa0c1d3a..e7aa0c1d3a 100644..100755
--- a/3party/boost/boost/parameter/aux_/unwrap_cv_reference.hpp
+++ b/3party/boost/boost/parameter/aux_/unwrap_cv_reference.hpp
diff --git a/3party/boost/boost/parameter/aux_/void.hpp b/3party/boost/boost/parameter/aux_/void.hpp
index 7061a7deb5..7061a7deb5 100644..100755
--- a/3party/boost/boost/parameter/aux_/void.hpp
+++ b/3party/boost/boost/parameter/aux_/void.hpp
diff --git a/3party/boost/boost/parameter/aux_/yesno.hpp b/3party/boost/boost/parameter/aux_/yesno.hpp
index 13fa545a68..13fa545a68 100644..100755
--- a/3party/boost/boost/parameter/aux_/yesno.hpp
+++ b/3party/boost/boost/parameter/aux_/yesno.hpp
diff --git a/3party/boost/boost/parameter/binding.hpp b/3party/boost/boost/parameter/binding.hpp
index 632f0fdb9d..632f0fdb9d 100644..100755
--- a/3party/boost/boost/parameter/binding.hpp
+++ b/3party/boost/boost/parameter/binding.hpp
diff --git a/3party/boost/boost/parameter/keyword.hpp b/3party/boost/boost/parameter/keyword.hpp
index cfb4bfdc53..cfb4bfdc53 100644..100755
--- a/3party/boost/boost/parameter/keyword.hpp
+++ b/3party/boost/boost/parameter/keyword.hpp
diff --git a/3party/boost/boost/parameter/match.hpp b/3party/boost/boost/parameter/match.hpp
index 2fa3f1750a..2fa3f1750a 100644..100755
--- a/3party/boost/boost/parameter/match.hpp
+++ b/3party/boost/boost/parameter/match.hpp
diff --git a/3party/boost/boost/parameter/parameters.hpp b/3party/boost/boost/parameter/parameters.hpp
index 97e102434e..97e102434e 100644..100755
--- a/3party/boost/boost/parameter/parameters.hpp
+++ b/3party/boost/boost/parameter/parameters.hpp
diff --git a/3party/boost/boost/parameter/python.hpp b/3party/boost/boost/parameter/python.hpp
index a52fc6ed76..a52fc6ed76 100644..100755
--- a/3party/boost/boost/parameter/python.hpp
+++ b/3party/boost/boost/parameter/python.hpp
diff --git a/3party/boost/boost/parameter/value_type.hpp b/3party/boost/boost/parameter/value_type.hpp
index 7415a5cd2a..7415a5cd2a 100644..100755
--- a/3party/boost/boost/parameter/value_type.hpp
+++ b/3party/boost/boost/parameter/value_type.hpp
diff --git a/3party/boost/boost/pending/container_traits.hpp b/3party/boost/boost/pending/container_traits.hpp
index 7cdf38c7d9..a58b524503 100644
--- a/3party/boost/boost/pending/container_traits.hpp
+++ b/3party/boost/boost/pending/container_traits.hpp
@@ -15,6 +15,7 @@
#include <boost/next_prior.hpp>
#include <algorithm> // for std::remove
+#include <utility>
#include <vector>
#include <list>
#include <map>
@@ -30,10 +31,20 @@
# endif
#endif
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-// Stay out of the way of concept checking class templates
-# define Container Container_
-# define AssociativeContainer AssociativeContainer_
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_SET
+#include <unordered_set>
+#endif
+
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#include <unordered_map>
+#endif
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_PENDING_FWD_TYPE(type) const type&
+#define BOOST_PENDING_FWD_VALUE(type, var) (var)
+#else
+#define BOOST_PENDING_FWD_TYPE(type) type&&
+#define BOOST_PENDING_FWD_VALUE(type, var) (std::forward<type>((var)))
#endif
// The content of this file is in 'graph_detail' because otherwise
@@ -87,14 +98,12 @@ namespace boost { namespace graph_detail {
//======================================================================
// Container Traits Class and container_category() function
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// don't use this unless there is partial specialization
template <class Container>
struct container_traits {
typedef typename Container::category category;
typedef typename Container::iterator_stability iterator_stability;
};
-#endif
// Use this as a compile-time assertion that X is stable
inline void require_stable(stable_tag) { }
@@ -112,13 +121,11 @@ namespace boost { namespace graph_detail {
unstable_tag iterator_stability(const std::vector<T,Alloc>&)
{ return unstable_tag(); }
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T, class Alloc>
struct container_traits< std::vector<T,Alloc> > {
typedef vector_tag category;
typedef unstable_tag iterator_stability;
};
-#endif
// std::list
struct list_tag :
@@ -136,24 +143,20 @@ namespace boost { namespace graph_detail {
stable_tag iterator_stability(const std::list<T,Alloc>&)
{ return stable_tag(); }
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T, class Alloc>
struct container_traits< std::list<T,Alloc> > {
typedef list_tag category;
typedef stable_tag iterator_stability;
};
-#endif
// std::slist
#ifndef BOOST_NO_SLIST
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T, class Alloc>
struct container_traits<BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc> > {
typedef front_insertion_sequence_tag category;
typedef stable_tag iterator_stability;
};
-#endif
template <class T, class Alloc>
front_insertion_sequence_tag container_category(
const BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc>&
@@ -182,13 +185,11 @@ namespace boost { namespace graph_detail {
stable_tag iterator_stability(const std::set<Key,Cmp,Alloc>&)
{ return stable_tag(); }
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class Key, class Cmp, class Alloc>
struct container_traits< std::set<Key,Cmp,Alloc> > {
typedef set_tag category;
typedef stable_tag iterator_stability;
};
-#endif
// std::multiset
struct multiset_tag :
@@ -205,13 +206,11 @@ namespace boost { namespace graph_detail {
stable_tag iterator_stability(const std::multiset<Key,Cmp,Alloc>&)
{ return stable_tag(); }
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class Key, class Cmp, class Alloc>
struct container_traits< std::multiset<Key,Cmp,Alloc> > {
typedef multiset_tag category;
typedef stable_tag iterator_stability;
};
-#endif
// deque
@@ -222,13 +221,11 @@ namespace boost { namespace graph_detail {
virtual public unique_associative_container_tag
{ };
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class Key, class T, class Cmp, class Alloc>
struct container_traits< std::map<Key,T,Cmp,Alloc> > {
typedef map_tag category;
typedef stable_tag iterator_stability;
};
-#endif
template <class Key, class T, class Cmp, class Alloc>
map_tag container_category(const std::map<Key,T,Cmp,Alloc>&)
@@ -245,13 +242,11 @@ namespace boost { namespace graph_detail {
virtual public multiple_associative_container_tag
{ };
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class Key, class T, class Cmp, class Alloc>
struct container_traits< std::multimap<Key,T,Cmp,Alloc> > {
typedef multimap_tag category;
typedef stable_tag iterator_stability;
};
-#endif
template <class Key, class T, class Cmp, class Alloc>
multimap_tag container_category(const std::multimap<Key,T,Cmp,Alloc>&)
@@ -286,8 +281,6 @@ namespace boost { namespace graph_detail {
{ };
-#ifndef BOOST_NO_HASH
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class Key, class Eq, class Hash, class Alloc>
struct container_traits< boost::unordered_set<Key,Eq,Hash,Alloc> > {
typedef unordered_set_tag category;
@@ -308,7 +301,7 @@ namespace boost { namespace graph_detail {
typedef unordered_multimap_tag category;
typedef unstable_tag iterator_stability;
};
-#endif
+
template <class Key, class Eq, class Hash, class Alloc>
unordered_set_tag
container_category(const boost::unordered_set<Key,Eq,Hash,Alloc>&)
@@ -345,8 +338,87 @@ namespace boost { namespace graph_detail {
unstable_tag
iterator_stability(const boost::unordered_multimap<Key,T,Eq,Hash,Alloc>&)
{ return unstable_tag(); }
+
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_SET
+ template <class Key, class Eq, class Hash, class Alloc>
+ struct container_traits< std::unordered_set<Key,Eq,Hash,Alloc> > {
+ typedef unordered_set_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+#endif
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_MAP
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ struct container_traits< std::unordered_map<Key,T,Eq,Hash,Alloc> > {
+ typedef unordered_map_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+#endif
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_SET
+ template <class Key, class Eq, class Hash, class Alloc>
+ struct container_traits< std::unordered_multiset<Key,Eq,Hash,Alloc> > {
+ typedef unordered_multiset_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+#endif
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_MAP
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ struct container_traits< std::unordered_multimap<Key,T,Eq,Hash,Alloc> > {
+ typedef unordered_multimap_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+#endif
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_SET
+ template <class Key, class Eq, class Hash, class Alloc>
+ unordered_set_tag
+ container_category(const std::unordered_set<Key,Eq,Hash,Alloc>&)
+ { return unordered_set_tag(); }
#endif
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_MAP
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ unordered_map_tag
+ container_category(const std::unordered_map<Key,T,Eq,Hash,Alloc>&)
+ { return unordered_map_tag(); }
+#endif
+
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_SET
+ template <class Key, class Eq, class Hash, class Alloc>
+ unstable_tag iterator_stability(const std::unordered_set<Key,Eq,Hash,Alloc>&)
+ { return unstable_tag(); }
+#endif
+
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_MAP
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ unstable_tag iterator_stability(const std::unordered_map<Key,T,Eq,Hash,Alloc>&)
+ { return unstable_tag(); }
+#endif
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_SET
+ template <class Key, class Eq, class Hash, class Alloc>
+ unordered_multiset_tag
+ container_category(const std::unordered_multiset<Key,Eq,Hash,Alloc>&)
+ { return unordered_multiset_tag(); }
+#endif
+
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_MAP
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ unordered_multimap_tag
+ container_category(const std::unordered_multimap<Key,T,Eq,Hash,Alloc>&)
+ { return unordered_multimap_tag(); }
+#endif
+
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_SET
+ template <class Key, class Eq, class Hash, class Alloc>
+ unstable_tag
+ iterator_stability(const std::unordered_multiset<Key,Eq,Hash,Alloc>&)
+ { return unstable_tag(); }
+#endif
+
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_MAP
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ unstable_tag
+ iterator_stability(const std::unordered_multimap<Key,T,Eq,Hash,Alloc>&)
+ { return unstable_tag(); }
+#endif
//===========================================================================
@@ -421,41 +493,41 @@ namespace boost { namespace graph_detail {
// Push
template <class Container, class T>
std::pair<typename Container::iterator, bool>
- push_dispatch(Container& c, const T& v, back_insertion_sequence_tag)
+ push_dispatch(Container& c, BOOST_PENDING_FWD_TYPE(T) v, back_insertion_sequence_tag)
{
- c.push_back(v);
+ c.push_back(BOOST_PENDING_FWD_VALUE(T, v));
return std::make_pair(boost::prior(c.end()), true);
}
template <class Container, class T>
std::pair<typename Container::iterator, bool>
- push_dispatch(Container& c, const T& v, front_insertion_sequence_tag)
+ push_dispatch(Container& c, BOOST_PENDING_FWD_TYPE(T) v, front_insertion_sequence_tag)
{
- c.push_front(v);
+ c.push_front(BOOST_PENDING_FWD_VALUE(T, v));
return std::make_pair(c.begin(), true);
}
template <class AssociativeContainer, class T>
std::pair<typename AssociativeContainer::iterator, bool>
- push_dispatch(AssociativeContainer& c, const T& v,
+ push_dispatch(AssociativeContainer& c, BOOST_PENDING_FWD_TYPE(T) v,
unique_associative_container_tag)
{
- return c.insert(v);
+ return c.insert(BOOST_PENDING_FWD_VALUE(T, v));
}
template <class AssociativeContainer, class T>
std::pair<typename AssociativeContainer::iterator, bool>
- push_dispatch(AssociativeContainer& c, const T& v,
+ push_dispatch(AssociativeContainer& c, BOOST_PENDING_FWD_TYPE(T) v,
multiple_associative_container_tag)
{
- return std::make_pair(c.insert(v), true);
+ return std::make_pair(c.insert(BOOST_PENDING_FWD_VALUE(T, v)), true);
}
template <class Container, class T>
std::pair<typename Container::iterator,bool>
- push(Container& c, const T& v)
+ push(Container& c, BOOST_PENDING_FWD_TYPE(T) v)
{
- return push_dispatch(c, v, container_category(c));
+ return push_dispatch(c, BOOST_PENDING_FWD_VALUE(T, v), container_category(c));
}
// Find
@@ -552,10 +624,7 @@ namespace boost { namespace graph_detail {
}} // namespace boost::graph_detail
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-// Stay out of the way of concept checking class templates
-# undef Container
-# undef AssociativeContainer
-#endif
+#undef BOOST_PENDING_FWD_TYPE
+#undef BOOST_PENDING_FWD_VALUE
#endif // BOOST_GRAPH_DETAIL_CONTAINER_TRAITS_H
diff --git a/3party/boost/boost/pending/cstddef.hpp b/3party/boost/boost/pending/cstddef.hpp
deleted file mode 100644
index 440629e265..0000000000
--- a/3party/boost/boost/pending/cstddef.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// -*- C++ -*- forwarding header.
-// (C) Copyright Jeremy Siek 2004
-// 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_CSTDDEF_HPP
-#define BOOST_CSTDDEF_HPP
-
-#if defined(__sgi) && !defined(__GNUC__)
-# include <stddef.h>
-#else
-# include <cstddef>
-#endif
-
-#endif
diff --git a/3party/boost/boost/pending/integer_log2.hpp b/3party/boost/boost/pending/integer_log2.hpp
index f4bc84600c..023ec7af03 100644
--- a/3party/boost/boost/pending/integer_log2.hpp
+++ b/3party/boost/boost/pending/integer_log2.hpp
@@ -1,112 +1,9 @@
-// -----------------------------------------------------------
-// integer_log2.hpp
-//
-// Gives the integer part of the logarithm, in base 2, of a
-// given number. Behavior is undefined if the argument is <= 0.
-//
-// Copyright (c) 2003-2004, 2008 Gennaro Prota
-//
-// 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_PENDING_INTEGER_LOG2_HPP
+#define BOOST_PENDING_INTEGER_LOG2_HPP
-#ifndef BOOST_INTEGER_LOG2_HPP_GP_20030301
-#define BOOST_INTEGER_LOG2_HPP_GP_20030301
+// The header file at this path is deprecated;
+// use boost/integer/integer_log2.hpp instead.
-#include <assert.h>
-#ifdef __BORLANDC__
-#include <climits>
-#endif
-#include "boost/limits.hpp"
-#include "boost/config.hpp"
-
-
-namespace boost {
- namespace detail {
-
- template <typename T>
- int integer_log2_impl(T x, int n) {
-
- int result = 0;
-
- while (x != 1) {
-
- const T t = static_cast<T>(x >> n);
- if (t) {
- result += n;
- x = t;
- }
- n /= 2;
-
- }
-
- return result;
- }
-
-
-
- // helper to find the maximum power of two
- // less than p (more involved than necessary,
- // to avoid PTS)
- //
- template <int p, int n>
- struct max_pow2_less {
-
- enum { c = 2*n < p };
-
- BOOST_STATIC_CONSTANT(int, value =
- c ? (max_pow2_less< c*p, 2*c*n>::value) : n);
-
- };
-
- template <>
- struct max_pow2_less<0, 0> {
+#include <boost/integer/integer_log2.hpp>
- BOOST_STATIC_CONSTANT(int, value = 0);
- };
-
- // this template is here just for Borland :(
- // we could simply rely on numeric_limits but sometimes
- // Borland tries to use numeric_limits<const T>, because
- // of its usual const-related problems in argument deduction
- // - gps
- template <typename T>
- struct width {
-
-#ifdef __BORLANDC__
- BOOST_STATIC_CONSTANT(int, value = sizeof(T) * CHAR_BIT);
-#else
- BOOST_STATIC_CONSTANT(int, value = (std::numeric_limits<T>::digits));
#endif
-
- };
-
- } // detail
-
-
- // ---------
- // integer_log2
- // ---------------
- //
- template <typename T>
- int integer_log2(T x) {
-
- assert(x > 0);
-
- const int n = detail::max_pow2_less<
- detail::width<T> :: value, 4
- > :: value;
-
- return detail::integer_log2_impl(x, n);
-
- }
-
-
-
-}
-
-
-
-#endif // include guard
diff --git a/3party/boost/boost/pending/iterator_tests.hpp b/3party/boost/boost/pending/iterator_tests.hpp
index dd5fe2ddd6..f9d6e9ca9a 100644
--- a/3party/boost/boost/pending/iterator_tests.hpp
+++ b/3party/boost/boost/pending/iterator_tests.hpp
@@ -25,7 +25,6 @@
# include <boost/static_assert.hpp>
# include <boost/concept_archetype.hpp> // for detail::dummy_constructor
# include <boost/implicit_cast.hpp>
-# include <boost/type_traits/broken_compiler_spec.hpp>
namespace boost {
@@ -41,8 +40,6 @@ struct dummyT {
}
-BOOST_TT_BROKEN_COMPILER_SPEC(boost::dummyT)
-
namespace boost {
// Tests whether type Iterator satisfies the requirements for a
diff --git a/3party/boost/boost/pending/relaxed_heap.hpp b/3party/boost/boost/pending/relaxed_heap.hpp
index b3ab2ed202..13f7af4c0e 100644
--- a/3party/boost/boost/pending/relaxed_heap.hpp
+++ b/3party/boost/boost/pending/relaxed_heap.hpp
@@ -163,7 +163,7 @@ public:
void remove(const value_type& x)
{
group* a = &index_to_group[get(id, x) / log_n];
- assert(groups[get(id, x)] != 0);
+ assert(groups[get(id, x)]);
a->value = x;
a->kind = smallest_key;
promote(a);
diff --git a/3party/boost/boost/phoenix/bind.hpp b/3party/boost/boost/phoenix/bind.hpp
index 8ebffb6e77..1a40908a2b 100644
--- a/3party/boost/boost/phoenix/bind.hpp
+++ b/3party/boost/boost/phoenix/bind.hpp
@@ -7,14 +7,10 @@
#ifndef BOOST_PHOENIX_BIND_HPP
#define BOOST_PHOENIX_BIND_HPP
-#ifdef BOOST_PHOENIX_USE_V2_OVER_V3
-#include <boost/spirit/home/phoenix/core.hpp>
-#else
#include <boost/phoenix/version.hpp>
#include <boost/phoenix/bind/bind_function.hpp>
#include <boost/phoenix/bind/bind_function_object.hpp>
#include <boost/phoenix/bind/bind_member_function.hpp>
#include <boost/phoenix/bind/bind_member_variable.hpp>
-#endif
#endif
diff --git a/3party/boost/boost/phoenix/bind/bind_member_function.hpp b/3party/boost/boost/phoenix/bind/bind_member_function.hpp
index 06abf8739b..edc10dcaac 100644
--- a/3party/boost/boost/phoenix/bind/bind_member_function.hpp
+++ b/3party/boost/boost/phoenix/bind/bind_member_function.hpp
@@ -19,7 +19,8 @@ namespace boost { namespace phoenix
{
template <typename RT, typename ClassT, typename ClassA>
- inline typename detail::expression::function_eval<
+ inline
+ typename detail::expression::function_eval<
detail::member_function_ptr<0, RT, RT(ClassT::*)()>
, ClassA
>::type const
@@ -34,7 +35,8 @@ namespace boost { namespace phoenix
}
template <typename RT, typename ClassT, typename ClassA>
- inline typename detail::expression::function_eval<
+ inline
+ typename detail::expression::function_eval<
detail::member_function_ptr<0, RT, RT(ClassT::*)() const>
, ClassA
>::type const
@@ -51,7 +53,8 @@ namespace boost { namespace phoenix
}
template <typename RT, typename ClassT>
- inline typename detail::expression::function_eval<
+ inline
+ typename detail::expression::function_eval<
detail::member_function_ptr<0, RT, RT(ClassT::*)()>
, ClassT
>::type const
@@ -69,7 +72,8 @@ namespace boost { namespace phoenix
}
template <typename RT, typename ClassT>
- inline typename detail::expression::function_eval<
+ inline
+ typename detail::expression::function_eval<
detail::member_function_ptr<0, RT, RT(ClassT::*)() const>
, ClassT
>::type const
diff --git a/3party/boost/boost/phoenix/bind/bind_member_variable.hpp b/3party/boost/boost/phoenix/bind/bind_member_variable.hpp
index 19bc44ec8a..56515decc3 100644
--- a/3party/boost/boost/phoenix/bind/bind_member_variable.hpp
+++ b/3party/boost/boost/phoenix/bind/bind_member_variable.hpp
@@ -15,7 +15,8 @@
namespace boost { namespace phoenix
{
template <typename RT, typename ClassT, typename ClassA>
- inline typename
+ inline
+ typename
detail::expression::function_eval<
detail::member_variable<RT, RT ClassT::*>
, ClassA
@@ -29,7 +30,8 @@ namespace boost { namespace phoenix
}
template <typename RT, typename ClassT>
- inline typename
+ inline
+ typename
detail::expression::function_eval<
detail::member_variable<RT, RT ClassT::*>
, ClassT
diff --git a/3party/boost/boost/phoenix/bind/detail/function_ptr.hpp b/3party/boost/boost/phoenix/bind/detail/function_ptr.hpp
index 6ede485e3d..0764b4a96d 100644
--- a/3party/boost/boost/phoenix/bind/detail/function_ptr.hpp
+++ b/3party/boost/boost/phoenix/bind/detail/function_ptr.hpp
@@ -27,8 +27,8 @@ namespace boost { namespace phoenix { namespace detail
{
typedef typename function_ptr_impl<N>::template impl<RT, FP> base;
- function_ptr(FP fp)
- : base(fp) {}
+ function_ptr(FP fp_)
+ : base(fp_) {}
using base::fp;
@@ -38,7 +38,7 @@ namespace boost { namespace phoenix { namespace detail
}
template <int M, typename RhsRT, typename RhsFP>
- bool operator==(function_ptr<M, RhsRT, RhsFP> const & rhs) const
+ bool operator==(function_ptr<M, RhsRT, RhsFP> const & /*rhs*/) const
{
return false;
}
@@ -53,8 +53,8 @@ namespace boost { namespace phoenix { namespace detail
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
RT operator()() const
{
@@ -73,8 +73,8 @@ namespace boost { namespace phoenix { namespace detail
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A>
RT operator()(A &a) const
@@ -135,8 +135,8 @@ namespace boost { namespace phoenix { namespace detail
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <BOOST_PHOENIX_typename_A>
RT operator()(BOOST_PHOENIX_A_ref_a) const
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 aa40d13606..7854dfc6d3 100644
--- a/3party/boost/boost/phoenix/bind/detail/member_function_ptr.hpp
+++ b/3party/boost/boost/phoenix/bind/detail/member_function_ptr.hpp
@@ -28,8 +28,8 @@ namespace boost { namespace phoenix { namespace detail
{
typedef typename member_function_ptr_impl<N>::
template impl<RT, FP> base;
- member_function_ptr(FP fp)
- : base(fp) {}
+ member_function_ptr(FP fp_)
+ : base(fp_) {}
using base::fp;
@@ -39,7 +39,7 @@ namespace boost { namespace phoenix { namespace detail
}
template <int M, typename RhsRT, typename RhsFP>
- bool operator==(member_function_ptr<M, RhsRT, RhsFP> const & rhs) const
+ bool operator==(member_function_ptr<M, RhsRT, RhsFP> const &) const
{
return false;
}
@@ -53,8 +53,8 @@ namespace boost { namespace phoenix { namespace detail
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class>
RT operator()(Class& obj) const
@@ -124,8 +124,8 @@ namespace boost { namespace phoenix { namespace detail
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, BOOST_PHOENIX_typename_A>
RT operator()(Class& obj, BOOST_PHOENIX_A_ref_a) const
diff --git a/3party/boost/boost/phoenix/bind/detail/member_variable.hpp b/3party/boost/boost/phoenix/bind/detail/member_variable.hpp
index 29e2ab6768..27a0365cb1 100644
--- a/3party/boost/boost/phoenix/bind/detail/member_variable.hpp
+++ b/3party/boost/boost/phoenix/bind/detail/member_variable.hpp
@@ -43,8 +43,8 @@ namespace boost { namespace phoenix { namespace detail {
type;
};
- member_variable(MP mp)
- : mp(mp) {}
+ member_variable(MP mp_)
+ : mp(mp_) {}
template <typename Class>
RT& operator()(Class& obj) const
@@ -56,6 +56,12 @@ namespace boost { namespace phoenix { namespace detail {
}
template <typename Class>
+ RT& operator()(Class* obj) const
+ {
+ return obj->*mp;
+ }
+
+ template <typename Class>
RT const& operator()(Class const& obj) const
{
BOOST_PROTO_USE_GET_POINTER();
@@ -65,12 +71,6 @@ namespace boost { namespace phoenix { namespace detail {
}
template <typename Class>
- RT& operator()(Class* obj) const
- {
- return obj->*mp;
- }
-
- template <typename Class>
RT const& operator()(Class const* obj) const
{
return obj->*mp;
diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_10.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_10.hpp
index 00bf622770..77a36fe6a0 100644
--- a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_10.hpp
+++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_10.hpp
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1>
RT operator()(A0 & a0 , A1 & a1) const
{
@@ -42,8 +42,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -66,8 +66,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -90,8 +90,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -114,8 +114,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -138,8 +138,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -162,8 +162,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -186,8 +186,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -210,8 +210,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const
{
diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_20.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_20.hpp
index 0d507df3a9..873c7917c6 100644
--- a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_20.hpp
+++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_20.hpp
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1>
RT operator()(A0 & a0 , A1 & a1) const
{
@@ -42,8 +42,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -66,8 +66,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -90,8 +90,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -114,8 +114,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -138,8 +138,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -162,8 +162,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -186,8 +186,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -210,8 +210,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const
{
@@ -234,8 +234,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10) const
{
@@ -258,8 +258,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
RT operator()(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
{
@@ -282,8 +282,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
RT operator()(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
{
@@ -306,8 +306,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
RT operator()(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
{
@@ -330,8 +330,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
RT operator()(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
{
@@ -354,8 +354,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
RT operator()(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
{
@@ -378,8 +378,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
RT operator()(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
{
@@ -402,8 +402,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
RT operator()(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
{
@@ -426,8 +426,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
RT operator()(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
{
@@ -450,8 +450,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
RT operator()(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
{
diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_30.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_30.hpp
index e1b95ed10d..7bf74c9fd1 100644
--- a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_30.hpp
+++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_30.hpp
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1>
RT operator()(A0 & a0 , A1 & a1) const
{
@@ -42,8 +42,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -66,8 +66,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -90,8 +90,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -114,8 +114,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -138,8 +138,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -162,8 +162,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -186,8 +186,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -210,8 +210,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const
{
@@ -234,8 +234,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10) const
{
@@ -258,8 +258,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
RT operator()(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
{
@@ -282,8 +282,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
RT operator()(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
{
@@ -306,8 +306,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
RT operator()(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
{
@@ -330,8 +330,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
RT operator()(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
{
@@ -354,8 +354,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
RT operator()(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
{
@@ -378,8 +378,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
RT operator()(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
{
@@ -402,8 +402,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
RT operator()(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
{
@@ -426,8 +426,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
RT operator()(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
{
@@ -450,8 +450,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
RT operator()(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
{
@@ -474,8 +474,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20>
RT operator()(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
{
@@ -498,8 +498,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21>
RT operator()(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
{
@@ -522,8 +522,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22>
RT operator()(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
{
@@ -546,8 +546,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23>
RT operator()(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
{
@@ -570,8 +570,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24>
RT operator()(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
{
@@ -594,8 +594,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25>
RT operator()(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
{
@@ -618,8 +618,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26>
RT operator()(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
{
@@ -642,8 +642,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27>
RT operator()(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
{
@@ -666,8 +666,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28>
RT operator()(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
{
@@ -690,8 +690,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29>
RT operator()(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
{
diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_40.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_40.hpp
index bd573f4470..f7d905a48e 100644
--- a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_40.hpp
+++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_40.hpp
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1>
RT operator()(A0 & a0 , A1 & a1) const
{
@@ -42,8 +42,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -66,8 +66,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -90,8 +90,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -114,8 +114,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -138,8 +138,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -162,8 +162,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -186,8 +186,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -210,8 +210,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const
{
@@ -234,8 +234,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10) const
{
@@ -258,8 +258,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
RT operator()(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
{
@@ -282,8 +282,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
RT operator()(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
{
@@ -306,8 +306,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
RT operator()(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
{
@@ -330,8 +330,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
RT operator()(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
{
@@ -354,8 +354,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
RT operator()(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
{
@@ -378,8 +378,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
RT operator()(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
{
@@ -402,8 +402,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
RT operator()(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
{
@@ -426,8 +426,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
RT operator()(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
{
@@ -450,8 +450,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
RT operator()(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
{
@@ -474,8 +474,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20>
RT operator()(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
{
@@ -498,8 +498,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21>
RT operator()(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
{
@@ -522,8 +522,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22>
RT operator()(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
{
@@ -546,8 +546,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23>
RT operator()(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
{
@@ -570,8 +570,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24>
RT operator()(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
{
@@ -594,8 +594,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25>
RT operator()(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
{
@@ -618,8 +618,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26>
RT operator()(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
{
@@ -642,8 +642,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27>
RT operator()(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
{
@@ -666,8 +666,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28>
RT operator()(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
{
@@ -690,8 +690,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29>
RT operator()(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
{
@@ -714,8 +714,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30>
RT operator()(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
{
@@ -738,8 +738,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31>
RT operator()(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
{
@@ -762,8 +762,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32>
RT operator()(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
{
@@ -786,8 +786,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33>
RT operator()(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
{
@@ -810,8 +810,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34>
RT operator()(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
{
@@ -834,8 +834,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35>
RT operator()(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
{
@@ -858,8 +858,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36>
RT operator()(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
{
@@ -882,8 +882,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37>
RT operator()(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
{
@@ -906,8 +906,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38>
RT operator()(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
{
@@ -930,8 +930,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39>
RT operator()(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
{
diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_50.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_50.hpp
index 1c07e90154..00db2e9b6c 100644
--- a/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_50.hpp
+++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/function_ptr_50.hpp
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1>
RT operator()(A0 & a0 , A1 & a1) const
{
@@ -42,8 +42,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -66,8 +66,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -90,8 +90,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -114,8 +114,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -138,8 +138,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -162,8 +162,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -186,8 +186,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -210,8 +210,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const
{
@@ -234,8 +234,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10) const
{
@@ -258,8 +258,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
RT operator()(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
{
@@ -282,8 +282,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
RT operator()(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
{
@@ -306,8 +306,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
RT operator()(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
{
@@ -330,8 +330,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
RT operator()(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
{
@@ -354,8 +354,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
RT operator()(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
{
@@ -378,8 +378,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
RT operator()(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
{
@@ -402,8 +402,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
RT operator()(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
{
@@ -426,8 +426,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
RT operator()(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
{
@@ -450,8 +450,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
RT operator()(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
{
@@ -474,8 +474,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20>
RT operator()(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
{
@@ -498,8 +498,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21>
RT operator()(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
{
@@ -522,8 +522,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22>
RT operator()(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
{
@@ -546,8 +546,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23>
RT operator()(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
{
@@ -570,8 +570,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24>
RT operator()(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
{
@@ -594,8 +594,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25>
RT operator()(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
{
@@ -618,8 +618,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26>
RT operator()(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
{
@@ -642,8 +642,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27>
RT operator()(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
{
@@ -666,8 +666,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28>
RT operator()(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
{
@@ -690,8 +690,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29>
RT operator()(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
{
@@ -714,8 +714,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30>
RT operator()(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
{
@@ -738,8 +738,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31>
RT operator()(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
{
@@ -762,8 +762,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32>
RT operator()(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
{
@@ -786,8 +786,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33>
RT operator()(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
{
@@ -810,8 +810,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34>
RT operator()(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
{
@@ -834,8 +834,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35>
RT operator()(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
{
@@ -858,8 +858,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36>
RT operator()(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
{
@@ -882,8 +882,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37>
RT operator()(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
{
@@ -906,8 +906,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38>
RT operator()(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
{
@@ -930,8 +930,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39>
RT operator()(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
{
@@ -954,8 +954,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40>
RT operator()(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
{
@@ -978,8 +978,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41>
RT operator()(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
{
@@ -1002,8 +1002,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42>
RT operator()(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
{
@@ -1026,8 +1026,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43>
RT operator()(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
{
@@ -1050,8 +1050,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44>
RT operator()(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
{
@@ -1074,8 +1074,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45>
RT operator()(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
{
@@ -1098,8 +1098,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46>
RT operator()(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
{
@@ -1122,8 +1122,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47>
RT operator()(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
{
@@ -1146,8 +1146,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 , typename A48>
RT operator()(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
{
@@ -1170,8 +1170,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 , typename A48 , typename A49>
RT operator()(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
{
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 9b620f21b8..b1b1548621 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
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0>
RT operator()(Class& obj, A0 & a0) const
{
@@ -49,8 +49,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1>
RT operator()(Class& obj, A0 & a0 , A1 & a1) const
{
@@ -80,8 +80,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -111,8 +111,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -142,8 +142,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -173,8 +173,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -204,8 +204,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -235,8 +235,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -266,8 +266,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -297,8 +297,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
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
{
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 e0894fea82..4698d5f225 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
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0>
RT operator()(Class& obj, A0 & a0) const
{
@@ -49,8 +49,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1>
RT operator()(Class& obj, A0 & a0 , A1 & a1) const
{
@@ -80,8 +80,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -111,8 +111,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -142,8 +142,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -173,8 +173,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -204,8 +204,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -235,8 +235,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -266,8 +266,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -297,8 +297,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
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
{
@@ -328,8 +328,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
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
{
@@ -359,8 +359,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
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
{
@@ -390,8 +390,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
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
{
@@ -421,8 +421,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
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
{
@@ -452,8 +452,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
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
{
@@ -483,8 +483,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
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
{
@@ -514,8 +514,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
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
{
@@ -545,8 +545,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
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
{
@@ -576,8 +576,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
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
{
@@ -607,8 +607,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
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
{
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 513146d880..aca5fd5d12 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
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0>
RT operator()(Class& obj, A0 & a0) const
{
@@ -49,8 +49,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1>
RT operator()(Class& obj, A0 & a0 , A1 & a1) const
{
@@ -80,8 +80,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -111,8 +111,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -142,8 +142,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -173,8 +173,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -204,8 +204,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -235,8 +235,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -266,8 +266,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -297,8 +297,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
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
{
@@ -328,8 +328,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
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
{
@@ -359,8 +359,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
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
{
@@ -390,8 +390,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
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
{
@@ -421,8 +421,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
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
{
@@ -452,8 +452,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
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
{
@@ -483,8 +483,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
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
{
@@ -514,8 +514,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
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
{
@@ -545,8 +545,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
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
{
@@ -576,8 +576,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
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
{
@@ -607,8 +607,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
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
{
@@ -638,8 +638,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20>
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
{
@@ -669,8 +669,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21>
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
{
@@ -700,8 +700,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22>
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
{
@@ -731,8 +731,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23>
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
{
@@ -762,8 +762,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24>
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
{
@@ -793,8 +793,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25>
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
{
@@ -824,8 +824,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26>
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
{
@@ -855,8 +855,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27>
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
{
@@ -886,8 +886,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28>
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
{
@@ -917,8 +917,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29>
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
{
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 dcf894f5e9..440a8642bd 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
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0>
RT operator()(Class& obj, A0 & a0) const
{
@@ -49,8 +49,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1>
RT operator()(Class& obj, A0 & a0 , A1 & a1) const
{
@@ -80,8 +80,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -111,8 +111,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -142,8 +142,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -173,8 +173,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -204,8 +204,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -235,8 +235,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -266,8 +266,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -297,8 +297,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
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
{
@@ -328,8 +328,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
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
{
@@ -359,8 +359,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
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
{
@@ -390,8 +390,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
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
{
@@ -421,8 +421,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
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
{
@@ -452,8 +452,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
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
{
@@ -483,8 +483,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
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
{
@@ -514,8 +514,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
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
{
@@ -545,8 +545,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
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
{
@@ -576,8 +576,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
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
{
@@ -607,8 +607,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
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
{
@@ -638,8 +638,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20>
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
{
@@ -669,8 +669,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21>
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
{
@@ -700,8 +700,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22>
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
{
@@ -731,8 +731,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23>
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
{
@@ -762,8 +762,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24>
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
{
@@ -793,8 +793,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25>
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
{
@@ -824,8 +824,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26>
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
{
@@ -855,8 +855,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27>
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
{
@@ -886,8 +886,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28>
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
{
@@ -917,8 +917,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29>
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
{
@@ -948,8 +948,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30>
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
{
@@ -979,8 +979,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31>
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
{
@@ -1010,8 +1010,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32>
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
{
@@ -1041,8 +1041,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33>
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
{
@@ -1072,8 +1072,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34>
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
{
@@ -1103,8 +1103,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35>
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
{
@@ -1134,8 +1134,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36>
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
{
@@ -1165,8 +1165,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37>
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
{
@@ -1196,8 +1196,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38>
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
{
@@ -1227,8 +1227,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39>
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
{
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 634badef36..6d46306887 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
@@ -18,8 +18,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0>
RT operator()(Class& obj, A0 & a0) const
{
@@ -49,8 +49,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1>
RT operator()(Class& obj, A0 & a0 , A1 & a1) const
{
@@ -80,8 +80,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const
{
@@ -111,8 +111,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
{
@@ -142,8 +142,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
{
@@ -173,8 +173,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
{
@@ -204,8 +204,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
{
@@ -235,8 +235,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
{
@@ -266,8 +266,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
{
@@ -297,8 +297,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
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
{
@@ -328,8 +328,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
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
{
@@ -359,8 +359,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
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
{
@@ -390,8 +390,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
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
{
@@ -421,8 +421,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
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
{
@@ -452,8 +452,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
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
{
@@ -483,8 +483,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
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
{
@@ -514,8 +514,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
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
{
@@ -545,8 +545,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
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
{
@@ -576,8 +576,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
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
{
@@ -607,8 +607,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
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
{
@@ -638,8 +638,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20>
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
{
@@ -669,8 +669,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21>
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
{
@@ -700,8 +700,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22>
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
{
@@ -731,8 +731,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23>
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
{
@@ -762,8 +762,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24>
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
{
@@ -793,8 +793,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25>
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
{
@@ -824,8 +824,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26>
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
{
@@ -855,8 +855,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27>
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
{
@@ -886,8 +886,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28>
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
{
@@ -917,8 +917,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29>
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
{
@@ -948,8 +948,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30>
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
{
@@ -979,8 +979,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31>
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
{
@@ -1010,8 +1010,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32>
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
{
@@ -1041,8 +1041,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33>
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
{
@@ -1072,8 +1072,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34>
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
{
@@ -1103,8 +1103,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35>
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
{
@@ -1134,8 +1134,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36>
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
{
@@ -1165,8 +1165,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37>
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
{
@@ -1196,8 +1196,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38>
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
{
@@ -1227,8 +1227,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39>
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
{
@@ -1258,8 +1258,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40>
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
{
@@ -1289,8 +1289,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41>
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
{
@@ -1320,8 +1320,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42>
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
{
@@ -1351,8 +1351,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43>
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
{
@@ -1382,8 +1382,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44>
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
{
@@ -1413,8 +1413,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45>
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
{
@@ -1444,8 +1444,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46>
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
{
@@ -1475,8 +1475,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47>
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
{
@@ -1506,8 +1506,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 , typename A48>
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
{
@@ -1537,8 +1537,8 @@
struct impl
{
typedef RT result_type;
- impl(FP fp)
- : fp(fp) {}
+ impl(FP fp_)
+ : fp(fp_) {}
template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 , typename A48 , typename A49>
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
{
diff --git a/3party/boost/boost/phoenix/core.hpp b/3party/boost/boost/phoenix/core.hpp
index 0eb2bc8981..eb1c9873ff 100644
--- a/3party/boost/boost/phoenix/core.hpp
+++ b/3party/boost/boost/phoenix/core.hpp
@@ -7,12 +7,10 @@
#ifndef BOOST_PHOENIX_CORE_HPP
#define BOOST_PHOENIX_CORE_HPP
-#ifdef BOOST_PHOENIX_USE_V2_OVER_V3
-#include <boost/spirit/home/phoenix/core.hpp>
-#else
#include <boost/phoenix/version.hpp>
#include <boost/phoenix/core/limits.hpp>
#include <boost/phoenix/core/actor.hpp>
+#include <boost/phoenix/core/debug.hpp>
#include <boost/phoenix/core/is_actor.hpp>
#include <boost/phoenix/core/argument.hpp>
#include <boost/phoenix/core/value.hpp>
@@ -21,6 +19,7 @@
#include <boost/phoenix/core/function_equal.hpp>
#include <boost/phoenix/core/visit_each.hpp>
#include <boost/phoenix/core/v2_eval.hpp>
-#endif
+#include <boost/phoenix/scope/local_variable.hpp> // to fix 5824
+#include <boost/proto/generate.hpp> // attempt to fix problems in intel 14.0.1
#endif
diff --git a/3party/boost/boost/phoenix/core/actor.hpp b/3party/boost/boost/phoenix/core/actor.hpp
index f2b47de8cd..e058365a06 100644
--- a/3party/boost/boost/phoenix/core/actor.hpp
+++ b/3party/boost/boost/phoenix/core/actor.hpp
@@ -2,6 +2,7 @@
Copyright (c) 2005-2010 Joel de Guzman
Copyright (c) 2010 Eric Niebler
Copyright (c) 2010 Thomas Heller
+ Copyright (c) 2014 John Fletcher
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,6 +30,8 @@
#ifdef BOOST_MSVC
#pragma warning(push)
#pragma warning(disable: 4522) // 'this' used in base member initializer list
+#pragma warning(disable: 4510) // default constructor could not be generated
+#pragma warning(disable: 4610) // can never be instantiated - user defined cons
#endif
namespace boost { namespace phoenix
@@ -81,7 +84,7 @@ namespace boost { namespace phoenix
}
};
- #define BOOST_PHOENIX_ACTOR_ASSIGN_CHILD(Z, N, D) \
+ #define BOOST_PHOENIX_ACTOR_ASSIGN_CHILD(N) \
assign( \
proto::_child_c<N> \
, proto::call< \
@@ -89,21 +92,35 @@ namespace boost { namespace phoenix
> \
) \
/**/
- #define BOOST_PHOENIX_ACTOR_ASSIGN_CALL(Z, N, D) \
- proto::when< \
+ #define BOOST_PHOENIX_ACTOR_START_ASSIGN_CHILD(Z, N, D) \
+ proto::and_< \
+ BOOST_PHOENIX_ACTOR_ASSIGN_CHILD(N) \
+ /**/
+ #define BOOST_PHOENIX_ACTOR_END_ASSIGN(Z, N, D) \
+ > \
+ /**/
+ #define BOOST_PHOENIX_ACTOR_ASSIGN_CALL(N) \
+ proto::when< \
proto::nary_expr<proto::_ , \
BOOST_PP_ENUM_PARAMS(N, proto::_ BOOST_PP_INTERCEPT) \
> \
- , proto::and_< \
- BOOST_PP_ENUM( \
- N \
- , BOOST_PHOENIX_ACTOR_ASSIGN_CHILD \
- , _ \
- ) \
- > \
+ , BOOST_PP_ENUM( \
+ N \
+ , BOOST_PHOENIX_ACTOR_START_ASSIGN_CHILD \
+ , _ \
+ ) \
+ BOOST_PP_REPEAT( \
+ N \
+ , BOOST_PHOENIX_ACTOR_END_ASSIGN \
+ , _ \
+ ) \
> \
/**/
-
+ #define BOOST_PHOENIX_ACTOR_START_ASSIGN_CALL(Z, N, D) \
+ proto::or_< \
+ BOOST_PHOENIX_ACTOR_ASSIGN_CALL(N) \
+ /**/
+
#if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
#include <boost/phoenix/core/preprocessed/actor.hpp>
#else
@@ -123,17 +140,20 @@ namespace boost { namespace phoenix
#endif
struct assign
- : proto::or_<
- BOOST_PP_ENUM_SHIFTED(
- BOOST_PHOENIX_LIMIT
- , BOOST_PHOENIX_ACTOR_ASSIGN_CALL
- , _
- )
+ : BOOST_PP_ENUM_SHIFTED(
+ BOOST_PHOENIX_LIMIT
+ , BOOST_PHOENIX_ACTOR_START_ASSIGN_CALL
+ , _
+ )
, proto::when<
proto::terminal<proto::_>
, do_assign(proto::_, proto::_state)
>
- >
+ BOOST_PP_REPEAT(
+ BOOST_PP_DEC(BOOST_PHOENIX_LIMIT)
+ , BOOST_PHOENIX_ACTOR_END_ASSIGN
+ , _
+ )
{};
#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
@@ -142,7 +162,11 @@ namespace boost { namespace phoenix
#endif
#undef BOOST_PHOENIX_ACTOR_ASSIGN_CALL
+ #undef BOOST_PHOENIX_ACTOR_START_ASSIGN_CALL
+ #undef BOOST_PHOENIX_ACTOR_END_ASSIGN_CALL
#undef BOOST_PHOENIX_ACTOR_ASSIGN_CHILD
+ #undef BOOST_PHOENIX_ACTOR_START_ASSIGN_CHILD
+ #undef BOOST_PHOENIX_ACTOR_END_ASSIGN_CHILD
}
// Bring in the result_of::actor<>
diff --git a/3party/boost/boost/phoenix/core/debug.hpp b/3party/boost/boost/phoenix/core/debug.hpp
new file mode 100644
index 0000000000..5b269adc3b
--- /dev/null
+++ b/3party/boost/boost/phoenix/core/debug.hpp
@@ -0,0 +1,50 @@
+/*==============================================================================
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2010 Thomas Heller
+ Copyright (c) 2014 John Fletcher
+
+ 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_PHOENIX_CORE_DEBUG_HPP
+#define BOOST_PHOENIX_CORE_DEBUG_HPP
+
+#include <iostream>
+#include <boost/phoenix/version.hpp>
+// Some other things may be needed here...
+
+// Include all proto for the time being...
+#include <boost/proto/proto.hpp>
+
+namespace boost { namespace phoenix
+ {
+
+ // For now just drop through to the Proto versions.
+
+ /// \brief Pretty-print a Phoenix expression tree using the Proto code.
+ ///
+ /// \note Equivalent to <tt>functional::display_expr(0, sout)(expr)</tt>
+ /// \param expr The Phoenix expression tree to pretty-print
+ /// \param sout The \c ostream to which the output should be
+ /// written. If not specified, defaults to
+ /// <tt>std::cout</tt>.
+ template<typename Expr>
+ void display_expr(Expr const &expr, std::ostream &sout)
+ {
+ boost::proto::display_expr(expr,sout);
+ }
+
+ /// \overload
+ ///
+ template<typename Expr>
+ void display_expr(Expr const &expr)
+ {
+ boost::proto::display_expr(expr);
+ }
+
+ } // namespace phoenix
+} // namespace boost
+
+
+
+#endif
diff --git a/3party/boost/boost/phoenix/core/detail/expression.hpp b/3party/boost/boost/phoenix/core/detail/expression.hpp
index 7b239b1337..8ec6ce23d5 100644
--- a/3party/boost/boost/phoenix/core/detail/expression.hpp
+++ b/3party/boost/boost/phoenix/core/detail/expression.hpp
@@ -190,6 +190,7 @@ namespace boost { namespace phoenix
#define BOOST_PHOENIX_DEFINE_EXPRESSION_MAKE_EXPRESSION_DEFAULT(NAME_SEQ, GRAMMAR_SEQ, D) \
template <BOOST_PHOENIX_typename_A(BOOST_PP_SEQ_SIZE(GRAMMAR_SEQ))> \
+ inline \
typename \
result_of::BOOST_PP_CAT( \
make_ \
@@ -197,7 +198,7 @@ namespace boost { namespace phoenix
)< \
BOOST_PHOENIX_A(BOOST_PP_SEQ_SIZE(GRAMMAR_SEQ)) \
>::type const \
- inline BOOST_PP_CAT( \
+ BOOST_PP_CAT( \
make_ \
, BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)) \
)( \
@@ -309,11 +310,12 @@ namespace boost { namespace phoenix
#define BOOST_PHOENIX_DEFINE_EXPRESSION_MAKE_EXPRESSION_VARARG_R(Z, N, NAME) \
template <BOOST_PHOENIX_typename_A(N)> \
+ inline \
typename \
result_of:: BOOST_PP_CAT(make_, NAME)< \
BOOST_PHOENIX_A(N) \
>::type \
- inline BOOST_PP_CAT(make_, NAME)(BOOST_PHOENIX_A_const_ref_a(N)) \
+ BOOST_PP_CAT(make_, NAME)(BOOST_PHOENIX_A_const_ref_a(N)) \
{ \
return functional::BOOST_PP_CAT(make_, NAME)()(BOOST_PHOENIX_a(N)); \
} \
diff --git a/3party/boost/boost/phoenix/core/detail/phx2_result.hpp b/3party/boost/boost/phoenix/core/detail/phx2_result.hpp
index 76babd2f3f..3f7f485ced 100644
--- a/3party/boost/boost/phoenix/core/detail/phx2_result.hpp
+++ b/3party/boost/boost/phoenix/core/detail/phx2_result.hpp
@@ -23,13 +23,13 @@ namespace boost { namespace phoenix {
typedef char (&no)[2];
template <typename A>
- static yes check(typename A::type *);
+ static yes check_(typename A::type *);
template <typename A>
- static no check(...);
+ static no check_(...);
- static bool const value = (sizeof(yes) == sizeof(check<Result>(0)));
+ static bool const value = (sizeof(yes) == sizeof(check_<Result>(0)));
typedef boost::mpl::bool_<value> 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 ce8a073cca..28f0269b2e 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
@@ -4,7 +4,7 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
-namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; typedef proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , proto::vararg< meta_grammar > > {}; } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
+namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , boost::proto::vararg< meta_grammar > > {}; } namespace functional { typedef boost::proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace result_of { template <typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void, typename Dummy = void> struct make_function_eval; template <typename A0> struct make_function_eval <A0> : boost::result_of< functional:: make_function_eval( A0 ) > {}; template <typename A0 , typename A1> struct make_function_eval <A0 , A1> : boost::result_of< functional:: make_function_eval( A0 , A1 ) > {}; template <typename A0 , typename A1 , typename A2> struct make_function_eval <A0 , A1 , A2> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3> struct make_function_eval <A0 , A1 , A2 , A3> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> struct make_function_eval <A0 , A1 , A2 , A3 , A4> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 ) > {}; } template <typename A0> inline typename result_of:: make_function_eval< A0 >::type make_function_eval(A0 const& a0) { return functional::make_function_eval()(a0); } template <typename A0 , typename A1> inline typename result_of:: make_function_eval< A0 , A1 >::type make_function_eval(A0 const& a0 , A1 const& a1) { return functional::make_function_eval()(a0 , a1); } template <typename A0 , typename A1 , typename A2> inline typename result_of:: make_function_eval< A0 , A1 , A2 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2) { return functional::make_function_eval()(a0 , a1 , a2); } template <typename A0 , typename A1 , typename A2 , typename A3> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3) { return functional::make_function_eval()(a0 , a1 , a2 , a3); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
namespace boost { namespace phoenix {
namespace detail
{
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 c2d10bb87a..15c401b8f7 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
@@ -4,7 +4,7 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
-namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > {}; typedef proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , proto::vararg< meta_grammar > > {}; } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
+namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > {}; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , boost::proto::vararg< meta_grammar > > {}; } namespace functional { typedef boost::proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace result_of { template <typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void, typename Dummy = void> struct make_function_eval; template <typename A0> struct make_function_eval <A0> : boost::result_of< functional:: make_function_eval( A0 ) > {}; template <typename A0 , typename A1> struct make_function_eval <A0 , A1> : boost::result_of< functional:: make_function_eval( A0 , A1 ) > {}; template <typename A0 , typename A1 , typename A2> struct make_function_eval <A0 , A1 , A2> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3> struct make_function_eval <A0 , A1 , A2 , A3> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> struct make_function_eval <A0 , A1 , A2 , A3 , A4> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 ) > {}; } template <typename A0> inline typename result_of:: make_function_eval< A0 >::type make_function_eval(A0 const& a0) { return functional::make_function_eval()(a0); } template <typename A0 , typename A1> inline typename result_of:: make_function_eval< A0 , A1 >::type make_function_eval(A0 const& a0 , A1 const& a1) { return functional::make_function_eval()(a0 , a1); } template <typename A0 , typename A1 , typename A2> inline typename result_of:: make_function_eval< A0 , A1 , A2 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2) { return functional::make_function_eval()(a0 , a1 , a2); } template <typename A0 , typename A1 , typename A2 , typename A3> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3) { return functional::make_function_eval()(a0 , a1 , a2 , a3); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17); } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
namespace boost { namespace phoenix {
namespace detail
{
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 352bf57c23..c90685cf10 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
@@ -4,7 +4,7 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
-namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename A20 = void , typename A21 = void , typename A22 = void , typename A23 = void , typename A24 = void , typename A25 = void , typename A26 = void , typename A27 = void , typename A28 = void , typename A29 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 > {}; typedef proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , proto::vararg< meta_grammar > > {}; } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
+namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename A20 = void , typename A21 = void , typename A22 = void , typename A23 = void , typename A24 = void , typename A25 = void , typename A26 = void , typename A27 = void , typename A28 = void , typename A29 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 > {}; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , boost::proto::vararg< meta_grammar > > {}; } namespace functional { typedef boost::proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace result_of { template <typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename A20 = void , typename A21 = void , typename A22 = void , typename A23 = void , typename A24 = void , typename A25 = void , typename A26 = void , typename A27 = void , typename A28 = void, typename Dummy = void> struct make_function_eval; template <typename A0> struct make_function_eval <A0> : boost::result_of< functional:: make_function_eval( A0 ) > {}; template <typename A0 , typename A1> struct make_function_eval <A0 , A1> : boost::result_of< functional:: make_function_eval( A0 , A1 ) > {}; template <typename A0 , typename A1 , typename A2> struct make_function_eval <A0 , A1 , A2> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3> struct make_function_eval <A0 , A1 , A2 , A3> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> struct make_function_eval <A0 , A1 , A2 , A3 , A4> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0> inline typename result_of:: make_function_eval< A0 >::type make_function_eval(A0 const& a0) { return functional::make_function_eval()(a0); } template <typename A0 , typename A1> inline typename result_of:: make_function_eval< A0 , A1 >::type make_function_eval(A0 const& a0 , A1 const& a1) { return functional::make_function_eval()(a0 , a1); } template <typename A0 , typename A1 , typename A2> inline typename result_of:: make_function_eval< A0 , A1 , A2 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2) { return functional::make_function_eval()(a0 , a1 , a2); } template <typename A0 , typename A1 , typename A2 , typename A3> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3) { return functional::make_function_eval()(a0 , a1 , a2 , a3); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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); } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
namespace boost { namespace phoenix {
namespace detail
{
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 186d149e04..46067306e8 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
@@ -4,7 +4,7 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
-namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename A20 = void , typename A21 = void , typename A22 = void , typename A23 = void , typename A24 = void , typename A25 = void , typename A26 = void , typename A27 = void , typename A28 = void , typename A29 = void , typename A30 = void , typename A31 = void , typename A32 = void , typename A33 = void , typename A34 = void , typename A35 = void , typename A36 = void , typename A37 = void , typename A38 = void , typename A39 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 > {}; typedef proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , proto::vararg< meta_grammar > > {}; } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
+namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename A20 = void , typename A21 = void , typename A22 = void , typename A23 = void , typename A24 = void , typename A25 = void , typename A26 = void , typename A27 = void , typename A28 = void , typename A29 = void , typename A30 = void , typename A31 = void , typename A32 = void , typename A33 = void , typename A34 = void , typename A35 = void , typename A36 = void , typename A37 = void , typename A38 = void , typename A39 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 > {}; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , boost::proto::vararg< meta_grammar > > {}; } namespace functional { typedef boost::proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace result_of { template <typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename A20 = void , typename A21 = void , typename A22 = void , typename A23 = void , typename A24 = void , typename A25 = void , typename A26 = void , typename A27 = void , typename A28 = void , typename A29 = void , typename A30 = void , typename A31 = void , typename A32 = void , typename A33 = void , typename A34 = void , typename A35 = void , typename A36 = void , typename A37 = void , typename A38 = void, typename Dummy = void> struct make_function_eval; template <typename A0> struct make_function_eval <A0> : boost::result_of< functional:: make_function_eval( A0 ) > {}; template <typename A0 , typename A1> struct make_function_eval <A0 , A1> : boost::result_of< functional:: make_function_eval( A0 , A1 ) > {}; template <typename A0 , typename A1 , typename A2> struct make_function_eval <A0 , A1 , A2> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3> struct make_function_eval <A0 , A1 , A2 , A3> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> struct make_function_eval <A0 , A1 , A2 , A3 , A4> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0> inline typename result_of:: make_function_eval< A0 >::type make_function_eval(A0 const& a0) { return functional::make_function_eval()(a0); } template <typename A0 , typename A1> inline typename result_of:: make_function_eval< A0 , A1 >::type make_function_eval(A0 const& a0 , A1 const& a1) { return functional::make_function_eval()(a0 , a1); } template <typename A0 , typename A1 , typename A2> inline typename result_of:: make_function_eval< A0 , A1 , A2 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2) { return functional::make_function_eval()(a0 , a1 , a2); } template <typename A0 , typename A1 , typename A2 , typename A3> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3) { return functional::make_function_eval()(a0 , a1 , a2 , a3); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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); } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
namespace boost { namespace phoenix {
namespace detail
{
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 b0bfcdd2e6..5db2eb7fb8 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
@@ -4,7 +4,7 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
-namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename A20 = void , typename A21 = void , typename A22 = void , typename A23 = void , typename A24 = void , typename A25 = void , typename A26 = void , typename A27 = void , typename A28 = void , typename A29 = void , typename A30 = void , typename A31 = void , typename A32 = void , typename A33 = void , typename A34 = void , typename A35 = void , typename A36 = void , typename A37 = void , typename A38 = void , typename A39 = void , typename A40 = void , typename A41 = void , typename A42 = void , typename A43 = void , typename A44 = void , typename A45 = void , typename A46 = void , typename A47 = void , typename A48 = void , typename A49 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 , typename A48 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 , typename A48 , typename A49 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 > {}; typedef proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , proto::vararg< meta_grammar > > {}; } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
+namespace boost { namespace phoenix { namespace detail { namespace tag { struct function_eval {}; template <typename Ostream> inline Ostream &operator<<( Ostream & os , function_eval) { os << "function_eval"; return os; } } namespace expression { template < typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename A20 = void , typename A21 = void , typename A22 = void , typename A23 = void , typename A24 = void , typename A25 = void , typename A26 = void , typename A27 = void , typename A28 = void , typename A29 = void , typename A30 = void , typename A31 = void , typename A32 = void , typename A33 = void , typename A34 = void , typename A35 = void , typename A36 = void , typename A37 = void , typename A38 = void , typename A39 = void , typename A40 = void , typename A41 = void , typename A42 = void , typename A43 = void , typename A44 = void , typename A45 = void , typename A46 = void , typename A47 = void , typename A48 = void , typename A49 = void , typename Dummy = void > struct function_eval; template < typename A0 , typename A1 > struct function_eval< A0 , A1 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 > {}; template < typename A0 , typename A1 , typename A2 > struct function_eval< A0 , A1 , A2 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 > struct function_eval< A0 , A1 , A2 , A3 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 > struct function_eval< A0 , A1 , A2 , A3 , A4 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > : boost::phoenix::expr< tag:: function_eval , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 > {}; template < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 > struct function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 , typename A48 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 < typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47 , typename A48 , typename A49 > struct function_eval< 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 > : boost::phoenix::expr< tag:: function_eval , 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 > {}; } namespace rule { struct function_eval : expression:: function_eval < meta_grammar , boost::proto::vararg< meta_grammar > > {}; } namespace functional { typedef boost::proto::functional::make_expr< tag:: function_eval > make_function_eval; } namespace result_of { template <typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename A10 = void , typename A11 = void , typename A12 = void , typename A13 = void , typename A14 = void , typename A15 = void , typename A16 = void , typename A17 = void , typename A18 = void , typename A19 = void , typename A20 = void , typename A21 = void , typename A22 = void , typename A23 = void , typename A24 = void , typename A25 = void , typename A26 = void , typename A27 = void , typename A28 = void , typename A29 = void , typename A30 = void , typename A31 = void , typename A32 = void , typename A33 = void , typename A34 = void , typename A35 = void , typename A36 = void , typename A37 = void , typename A38 = void , typename A39 = void , typename A40 = void , typename A41 = void , typename A42 = void , typename A43 = void , typename A44 = void , typename A45 = void , typename A46 = void , typename A47 = void , typename A48 = void, typename Dummy = void> struct make_function_eval; template <typename A0> struct make_function_eval <A0> : boost::result_of< functional:: make_function_eval( A0 ) > {}; template <typename A0 , typename A1> struct make_function_eval <A0 , A1> : boost::result_of< functional:: make_function_eval( A0 , A1 ) > {}; template <typename A0 , typename A1 , typename A2> struct make_function_eval <A0 , A1 , A2> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3> struct make_function_eval <A0 , A1 , A2 , A3> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> struct make_function_eval <A0 , A1 , A2 , A3 , A4> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22> : boost::result_of< functional:: make_function_eval( A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 ) > {}; template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23> struct make_function_eval <A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47> struct make_function_eval <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> : boost::result_of< functional:: make_function_eval( 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 <typename A0> inline typename result_of:: make_function_eval< A0 >::type make_function_eval(A0 const& a0) { return functional::make_function_eval()(a0); } template <typename A0 , typename A1> inline typename result_of:: make_function_eval< A0 , A1 >::type make_function_eval(A0 const& a0 , A1 const& a1) { return functional::make_function_eval()(a0 , a1); } template <typename A0 , typename A1 , typename A2> inline typename result_of:: make_function_eval< A0 , A1 , A2 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2) { return functional::make_function_eval()(a0 , a1 , a2); } template <typename A0 , typename A1 , typename A2 , typename A3> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3) { return functional::make_function_eval()(a0 , a1 , a2 , a3); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22) { return functional::make_function_eval()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22); } template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23> inline typename result_of:: make_function_eval< A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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 <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29 , typename A30 , typename A31 , typename A32 , typename A33 , typename A34 , typename A35 , typename A36 , typename A37 , typename A38 , typename A39 , typename A40 , typename A41 , typename A42 , typename A43 , typename A44 , typename A45 , typename A46 , typename A47> inline typename result_of:: make_function_eval< 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 >::type make_function_eval(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , 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) { return functional::make_function_eval()(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); } } } } namespace boost { namespace phoenix { template <typename Dummy> struct meta_grammar::case_< :: boost :: phoenix :: detail :: tag:: function_eval , Dummy > : enable_rule< :: boost :: phoenix :: detail :: rule:: function_eval , Dummy > {}; } }
namespace boost { namespace phoenix {
namespace detail
{
diff --git a/3party/boost/boost/phoenix/core/domain.hpp b/3party/boost/boost/phoenix/core/domain.hpp
index 2ee5359c60..6c438de97c 100644
--- a/3party/boost/boost/phoenix/core/domain.hpp
+++ b/3party/boost/boost/phoenix/core/domain.hpp
@@ -24,6 +24,9 @@ namespace boost { namespace phoenix
struct phoenix_generator
: proto::switch_<phoenix_generator>
{
+
+ BOOST_PROTO_USE_BASIC_EXPR()
+
template<typename Tag>
struct case_
: proto::otherwise<proto::call<proto::pod_generator<actor>(proto::_)> >
@@ -39,7 +42,8 @@ namespace boost { namespace phoenix
{
template <typename T>
struct as_child
- : as_expr<T>
+ : proto_base_domain::as_expr<T> // proto lambda example.
+ // : as_expr<T>
{};
};
}}
diff --git a/3party/boost/boost/phoenix/core/environment.hpp b/3party/boost/boost/phoenix/core/environment.hpp
index f72e5d9a58..27ac284b2b 100644
--- a/3party/boost/boost/phoenix/core/environment.hpp
+++ b/3party/boost/boost/phoenix/core/environment.hpp
@@ -212,61 +212,69 @@ namespace boost { namespace phoenix
};
template <typename Env, typename Actions>
+ inline
typename result_of::context<Env const &, Actions const&>::type const
- inline context(Env const& env, Actions const& actions)
+ context(Env const& env, Actions const& actions)
{
vector2<Env const&, Actions const &> e = {env, actions};
return e;
}
template <typename Env, typename Actions>
+ inline
typename result_of::context<Env const &, Actions const&>::type const
- inline make_context(Env const& env, Actions const& actions)
+ make_context(Env const& env, Actions const& actions)
{
return context(env, actions);
}
template <typename Env, typename Actions>
+ inline
typename result_of::context<Env &, Actions const&>::type const
- inline context(Env & env, Actions const& actions)
+ context(Env & env, Actions const& actions)
{
vector2<Env &, Actions const &> e = {env, actions};
return e;
}
template <typename Env, typename Actions>
+ inline
typename result_of::context<Env &, Actions const&>::type const
- inline make_context(Env & env, Actions const& actions)
+ make_context(Env & env, Actions const& actions)
{
return context(env, actions);
}
template <typename Env, typename Actions>
+ inline
typename result_of::context<Env const &, Actions &>::type const
- inline context(Env const& env, Actions & actions)
+ context(Env const& env, Actions & actions)
{
vector2<Env const&, Actions &> e = {env, actions};
return e;
}
template <typename Env, typename Actions>
+ inline
typename result_of::context<Env const &, Actions &>::type const
- inline make_context(Env const& env, Actions & actions)
+ make_context(Env const& env, Actions & actions)
{
return context(env, actions);
}
template <typename Env, typename Actions>
+ inline
typename result_of::context<Env &, Actions &>::type const
- inline context(Env & env, Actions & actions)
+ context(Env & env, Actions & actions)
{
vector2<Env &, Actions &> e = {env, actions};
return e;
}
template <typename Env, typename Actions>
+ inline
typename result_of::context<Env &, Actions &>::type const
- inline make_context(Env & env, Actions & actions)
+ make_context(Env & env, Actions & actions)
{
return context(env, actions);
}
@@ -318,15 +326,17 @@ namespace boost { namespace phoenix
{};
template <typename Context>
+ inline
typename fusion::result_of::at_c<Context, 0>::type
- inline env(Context & ctx)
+ env(Context & ctx)
{
return fusion::at_c<0>(ctx);
}
template <typename Context>
+ inline
typename fusion::result_of::at_c<Context const, 0>::type
- inline env(Context const & ctx)
+ env(Context const & ctx)
{
return fusion::at_c<0>(ctx);
}
@@ -378,15 +388,17 @@ namespace boost { namespace phoenix
{};
template <typename Context>
+ inline
typename fusion::result_of::at_c<Context, 1>::type
- inline actions(Context & ctx)
+ actions(Context & ctx)
{
return fusion::at_c<1>(ctx);
}
template <typename Context>
+ inline
typename fusion::result_of::at_c<Context const, 1>::type
- inline actions(Context const & ctx)
+ actions(Context const & ctx)
{
return fusion::at_c<1>(ctx);
}
@@ -403,26 +415,28 @@ namespace boost { namespace phoenix
>
struct make_env;
- #define BOOST_PHOENIX_M0(Z, N, D) \
+ #define M0(Z, N, D) \
template <BOOST_PHOENIX_typename_A(N)> \
struct make_env<BOOST_PHOENIX_A(N)> \
{ \
typedef BOOST_PP_CAT(vector, N)<BOOST_PHOENIX_A(N)> type; \
}; \
/**/
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_PHOENIX_LIMIT, BOOST_PHOENIX_M0, _)
- #undef BOOST_PHOENIX_M0
+ BOOST_PP_REPEAT_FROM_TO(1, BOOST_PHOENIX_LIMIT, M0, _)
+ #undef M0
}
+ inline
result_of::make_env<>::type
- inline make_env()
+ make_env()
{
return result_of::make_env<>::type();
}
-#define BOOST_PHOENIX_M0(Z, N, D) \
+#define M0(Z, N, D) \
template <BOOST_PHOENIX_typename_A(N)> \
+ inline \
typename result_of::make_env<BOOST_PHOENIX_A_ref(N)>::type \
- inline make_env(BOOST_PHOENIX_A_ref_a(N)) \
+ make_env(BOOST_PHOENIX_A_ref_a(N)) \
{ \
typename result_of::make_env<BOOST_PHOENIX_A_ref(N)>::type \
env = \
@@ -432,8 +446,9 @@ namespace boost { namespace phoenix
return env; \
} \
template <BOOST_PHOENIX_typename_A(N)> \
+ inline \
typename result_of::make_env<BOOST_PHOENIX_A_const_ref(N)>::type \
- inline make_env(BOOST_PHOENIX_A_const_ref_a(N)) \
+ make_env(BOOST_PHOENIX_A_const_ref_a(N)) \
{ \
typename result_of::make_env<BOOST_PHOENIX_A_const_ref(N)>::type \
env = \
@@ -443,8 +458,8 @@ namespace boost { namespace phoenix
return env; \
} \
/**/
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_PHOENIX_LIMIT, BOOST_PHOENIX_M0, _)
- #undef BOOST_PHOENIX_M0
+ BOOST_PP_REPEAT_FROM_TO(1, BOOST_PHOENIX_LIMIT, M0, _)
+ #undef M0
template <typename T, typename Enable = void>
struct is_environment : fusion::traits::is_sequence<T> {};
diff --git a/3party/boost/boost/phoenix/core/expression.hpp b/3party/boost/boost/phoenix/core/expression.hpp
index 2db9eec482..4291c0a5f5 100644
--- a/3party/boost/boost/phoenix/core/expression.hpp
+++ b/3party/boost/boost/phoenix/core/expression.hpp
@@ -103,8 +103,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M1, _))
- {
- actor<base_type> const e =
+ { //?? actor or Actor??
+ //Actor<base_type> const e =
+ actor<base_type> const e =
{
proto::make_expr<
Tag
diff --git a/3party/boost/boost/phoenix/core/function_equal.hpp b/3party/boost/boost/phoenix/core/function_equal.hpp
index 64dcdcdc76..fc1de80ffb 100644
--- a/3party/boost/boost/phoenix/core/function_equal.hpp
+++ b/3party/boost/boost/phoenix/core/function_equal.hpp
@@ -109,6 +109,17 @@ namespace boost { namespace phoenix
#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/function_equal_" BOOST_PHOENIX_LIMIT_STR ".hpp")
#endif
+/*==============================================================================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2004 Daniel Wallin
+ Copyright (c) 2010 Thomas Heller
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 1)
+#endif
#define BOOST_PHOENIX_FUNCTION_EQUAL_R(Z, N, DATA) \
&& function_equal_()( \
diff --git a/3party/boost/boost/phoenix/core/is_actor.hpp b/3party/boost/boost/phoenix/core/is_actor.hpp
index 6d24e3dfa9..b66a714045 100644
--- a/3party/boost/boost/phoenix/core/is_actor.hpp
+++ b/3party/boost/boost/phoenix/core/is_actor.hpp
@@ -9,6 +9,9 @@
#include <boost/mpl/bool.hpp>
+// Note to Thomas and any future maintainer: please make this as
+// lightweight as possible (as it is right now).
+
namespace boost { namespace phoenix
{
///////////////////////////////////////////////////////////////////////////////
diff --git a/3party/boost/boost/phoenix/core/is_nullary.hpp b/3party/boost/boost/phoenix/core/is_nullary.hpp
index 509c4d25be..333ebdd6d5 100644
--- a/3party/boost/boost/phoenix/core/is_nullary.hpp
+++ b/3party/boost/boost/phoenix/core/is_nullary.hpp
@@ -137,12 +137,12 @@ namespace boost { namespace phoenix
struct is_nullary<T const >
: is_nullary<T>
{};
-
+
template <typename T>
struct is_nullary<custom_terminal<T> >
: mpl::true_
{};
-
+
template <typename T>
struct is_nullary<custom_terminal<actor<T> > >
: evaluator
diff --git a/3party/boost/boost/phoenix/core/limits.hpp b/3party/boost/boost/phoenix/core/limits.hpp
index 46ac69e996..5571ec6c8c 100644
--- a/3party/boost/boost/phoenix/core/limits.hpp
+++ b/3party/boost/boost/phoenix/core/limits.hpp
@@ -16,14 +16,20 @@
#if defined(BOOST_PHOENIX_LIMIT)
-#define BOOST_PROTO_MAX_ARITY BOOST_PHOENIX_LIMIT
+# if !defined( BOOST_PROTO_MAX_ARITY )
+# define BOOST_PROTO_MAX_ARITY BOOST_PHOENIX_LIMIT
+# elif (BOOST_PROTO_MAX_ARITY < BOOST_PHOENIX_LIMIT)
+# error "BOOST_PROTO_MAX_ARITY is set too low"
+# endif
#include <boost/proto/proto_fwd.hpp>
#else
#include <boost/proto/proto_fwd.hpp>
#define BOOST_PHOENIX_LIMIT BOOST_PROTO_MAX_ARITY
#endif
+#if !defined(PHOENIX_LIMIT)
#define PHOENIX_LIMIT BOOST_PHOENIX_LIMIT
+#endif
#define BOOST_PHOENIX_LIMIT_STR BOOST_PP_STRINGIZE(BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT))
diff --git a/3party/boost/boost/phoenix/core/nothing.hpp b/3party/boost/boost/phoenix/core/nothing.hpp
index c63c43aba0..ecf2a6fabe 100644
--- a/3party/boost/boost/phoenix/core/nothing.hpp
+++ b/3party/boost/boost/phoenix/core/nothing.hpp
@@ -45,7 +45,6 @@ namespace boost { namespace phoenix
struct custom_terminal<detail::nothing, Dummy>
{
typedef void result_type;
-
template <typename Context>
void operator()(detail::nothing, Context &) const
{
diff --git a/3party/boost/boost/phoenix/core/preprocessed/actor_10.hpp b/3party/boost/boost/phoenix/core/preprocessed/actor_10.hpp
index 2c29207db8..1f258c392d 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/actor_10.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/actor_10.hpp
@@ -6,11 +6,10 @@
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
struct assign
- : proto::or_<
- proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > >
+ : proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > > > > > > > > > >
, proto::when<
proto::terminal<proto::_>
, do_assign(proto::_, proto::_state)
>
- >
+ > > > > > > > > >
{};
diff --git a/3party/boost/boost/phoenix/core/preprocessed/actor_20.hpp b/3party/boost/boost/phoenix/core/preprocessed/actor_20.hpp
index 164774819b..a3c4134313 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/actor_20.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/actor_20.hpp
@@ -6,11 +6,10 @@
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
struct assign
- : proto::or_<
- proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) > >
+ : proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > >
, proto::when<
proto::terminal<proto::_>
, do_assign(proto::_, proto::_state)
>
- >
+ > > > > > > > > > > > > > > > > > > >
{};
diff --git a/3party/boost/boost/phoenix/core/preprocessed/actor_30.hpp b/3party/boost/boost/phoenix/core/preprocessed/actor_30.hpp
index 80cf4ad7c4..d05c954760 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/actor_30.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/actor_30.hpp
@@ -6,11 +6,10 @@
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
struct assign
- : proto::or_<
- proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) > >
+ : proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
, proto::when<
proto::terminal<proto::_>
, do_assign(proto::_, proto::_state)
>
- >
+ > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
{};
diff --git a/3party/boost/boost/phoenix/core/preprocessed/actor_40.hpp b/3party/boost/boost/phoenix/core/preprocessed/actor_40.hpp
index 864e2d9be8..14087a3526 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/actor_40.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/actor_40.hpp
@@ -6,11 +6,10 @@
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
struct assign
- : proto::or_<
- proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) > >
+ : proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
, proto::when<
proto::terminal<proto::_>
, do_assign(proto::_, proto::_state)
>
- >
+ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
{};
diff --git a/3party/boost/boost/phoenix/core/preprocessed/actor_50.hpp b/3party/boost/boost/phoenix/core/preprocessed/actor_50.hpp
index a4a53af3fb..fa9b1c560b 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/actor_50.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/actor_50.hpp
@@ -6,11 +6,10 @@
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
struct assign
- : proto::or_<
- proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) , assign( proto::_child_c< 45> , proto::call< proto::_child_c< 45>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) , assign( proto::_child_c< 45> , proto::call< proto::_child_c< 45>(proto::_state) > ) , assign( proto::_child_c< 46> , proto::call< proto::_child_c< 46>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) , assign( proto::_child_c< 45> , proto::call< proto::_child_c< 45>(proto::_state) > ) , assign( proto::_child_c< 46> , proto::call< proto::_child_c< 46>(proto::_state) > ) , assign( proto::_child_c< 47> , proto::call< proto::_child_c< 47>(proto::_state) > ) > > , proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) , assign( proto::_child_c< 45> , proto::call< proto::_child_c< 45>(proto::_state) > ) , assign( proto::_child_c< 46> , proto::call< proto::_child_c< 46>(proto::_state) > ) , assign( proto::_child_c< 47> , proto::call< proto::_child_c< 47>(proto::_state) > ) , assign( proto::_child_c< 48> , proto::call< proto::_child_c< 48>(proto::_state) > ) > >
+ : proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 45> , proto::call< proto::_child_c< 45>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 45> , proto::call< proto::_child_c< 45>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 46> , proto::call< proto::_child_c< 46>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 45> , proto::call< proto::_child_c< 45>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 46> , proto::call< proto::_child_c< 46>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 47> , proto::call< proto::_child_c< 47>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > , proto::or_< proto::when< proto::nary_expr<proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ , proto::_ > , proto::and_< assign( proto::_child_c< 0> , proto::call< proto::_child_c< 0>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 1> , proto::call< proto::_child_c< 1>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 2> , proto::call< proto::_child_c< 2>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 3> , proto::call< proto::_child_c< 3>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 4> , proto::call< proto::_child_c< 4>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 5> , proto::call< proto::_child_c< 5>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 6> , proto::call< proto::_child_c< 6>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 7> , proto::call< proto::_child_c< 7>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 8> , proto::call< proto::_child_c< 8>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 9> , proto::call< proto::_child_c< 9>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 10> , proto::call< proto::_child_c< 10>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 11> , proto::call< proto::_child_c< 11>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 12> , proto::call< proto::_child_c< 12>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 13> , proto::call< proto::_child_c< 13>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 14> , proto::call< proto::_child_c< 14>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 15> , proto::call< proto::_child_c< 15>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 16> , proto::call< proto::_child_c< 16>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 17> , proto::call< proto::_child_c< 17>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 18> , proto::call< proto::_child_c< 18>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 19> , proto::call< proto::_child_c< 19>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 20> , proto::call< proto::_child_c< 20>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 21> , proto::call< proto::_child_c< 21>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 22> , proto::call< proto::_child_c< 22>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 23> , proto::call< proto::_child_c< 23>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 24> , proto::call< proto::_child_c< 24>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 25> , proto::call< proto::_child_c< 25>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 26> , proto::call< proto::_child_c< 26>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 27> , proto::call< proto::_child_c< 27>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 28> , proto::call< proto::_child_c< 28>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 29> , proto::call< proto::_child_c< 29>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 30> , proto::call< proto::_child_c< 30>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 31> , proto::call< proto::_child_c< 31>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 32> , proto::call< proto::_child_c< 32>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 33> , proto::call< proto::_child_c< 33>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 34> , proto::call< proto::_child_c< 34>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 35> , proto::call< proto::_child_c< 35>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 36> , proto::call< proto::_child_c< 36>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 37> , proto::call< proto::_child_c< 37>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 38> , proto::call< proto::_child_c< 38>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 39> , proto::call< proto::_child_c< 39>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 40> , proto::call< proto::_child_c< 40>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 41> , proto::call< proto::_child_c< 41>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 42> , proto::call< proto::_child_c< 42>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 43> , proto::call< proto::_child_c< 43>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 44> , proto::call< proto::_child_c< 44>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 45> , proto::call< proto::_child_c< 45>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 46> , proto::call< proto::_child_c< 46>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 47> , proto::call< proto::_child_c< 47>(proto::_state) > ) , proto::and_< assign( proto::_child_c< 48> , proto::call< proto::_child_c< 48>(proto::_state) > ) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
, proto::when<
proto::terminal<proto::_>
, do_assign(proto::_, proto::_state)
>
- >
+ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
{};
diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_10.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_10.hpp
index d216b44dd3..7342a8c700 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/expression_10.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/expression_10.hpp
@@ -46,8 +46,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -88,8 +89,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -130,8 +132,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -172,8 +175,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -214,8 +218,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -256,8 +261,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -298,8 +304,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -340,8 +347,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -382,8 +390,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -424,8 +433,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_20.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_20.hpp
index fafc82df82..cd85f15d77 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/expression_20.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/expression_20.hpp
@@ -46,8 +46,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -88,8 +89,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -130,8 +132,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -172,8 +175,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -214,8 +218,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -256,8 +261,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -298,8 +304,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -340,8 +347,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -382,8 +390,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -424,8 +433,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -466,8 +476,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -508,8 +519,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -550,8 +562,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -592,8 +605,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -634,8 +648,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -676,8 +691,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -718,8 +734,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -760,8 +777,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -802,8 +820,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -844,8 +863,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_30.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_30.hpp
index b9b65ebb22..a8864192f9 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/expression_30.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/expression_30.hpp
@@ -46,8 +46,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -88,8 +89,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -130,8 +132,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -172,8 +175,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -214,8 +218,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -256,8 +261,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -298,8 +304,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -340,8 +347,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -382,8 +390,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -424,8 +433,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -466,8 +476,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -508,8 +519,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -550,8 +562,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -592,8 +605,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -634,8 +648,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -676,8 +691,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -718,8 +734,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -760,8 +777,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -802,8 +820,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -844,8 +863,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -886,8 +906,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -928,8 +949,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -970,8 +992,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1012,8 +1035,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1054,8 +1078,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1096,8 +1121,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1138,8 +1164,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1180,8 +1207,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1222,8 +1250,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1264,8 +1293,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_40.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_40.hpp
index 7c9ceddcfd..b48911d97e 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/expression_40.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/expression_40.hpp
@@ -46,8 +46,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -88,8 +89,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -130,8 +132,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -172,8 +175,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -214,8 +218,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -256,8 +261,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -298,8 +304,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -340,8 +347,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -382,8 +390,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -424,8 +433,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -466,8 +476,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -508,8 +519,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -550,8 +562,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -592,8 +605,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -634,8 +648,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -676,8 +691,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -718,8 +734,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -760,8 +777,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -802,8 +820,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -844,8 +863,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -886,8 +906,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -928,8 +949,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -970,8 +992,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1012,8 +1035,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1054,8 +1078,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1096,8 +1121,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1138,8 +1164,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1180,8 +1207,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1222,8 +1250,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1264,8 +1293,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1306,8 +1336,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1348,8 +1379,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1390,8 +1422,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1432,8 +1465,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1474,8 +1508,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1516,8 +1551,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1558,8 +1594,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1600,8 +1637,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1642,8 +1680,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1684,8 +1723,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_50.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_50.hpp
index 8b4f360f45..64e5b8de05 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/expression_50.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/expression_50.hpp
@@ -46,8 +46,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -88,8 +89,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -130,8 +132,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -172,8 +175,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -214,8 +218,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -256,8 +261,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -298,8 +304,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -340,8 +347,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -382,8 +390,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -424,8 +433,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -466,8 +476,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -508,8 +519,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -550,8 +562,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -592,8 +605,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -634,8 +648,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -676,8 +691,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -718,8 +734,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -760,8 +777,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -802,8 +820,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -844,8 +863,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -886,8 +906,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -928,8 +949,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -970,8 +992,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1012,8 +1035,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1054,8 +1078,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1096,8 +1121,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1138,8 +1164,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1180,8 +1207,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1222,8 +1250,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1264,8 +1293,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1306,8 +1336,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1348,8 +1379,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1390,8 +1422,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1432,8 +1465,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1474,8 +1508,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1516,8 +1551,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1558,8 +1594,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1600,8 +1637,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1642,8 +1680,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1684,8 +1723,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1726,8 +1766,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1768,8 +1809,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40 , typename call_traits<A41>::param_type a41)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1810,8 +1852,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40 , typename call_traits<A41>::param_type a41 , typename call_traits<A42>::param_type a42)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1852,8 +1895,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40 , typename call_traits<A41>::param_type a41 , typename call_traits<A42>::param_type a42 , typename call_traits<A43>::param_type a43)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1894,8 +1938,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40 , typename call_traits<A41>::param_type a41 , typename call_traits<A42>::param_type a42 , typename call_traits<A43>::param_type a43 , typename call_traits<A44>::param_type a44)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1936,8 +1981,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40 , typename call_traits<A41>::param_type a41 , typename call_traits<A42>::param_type a42 , typename call_traits<A43>::param_type a43 , typename call_traits<A44>::param_type a44 , typename call_traits<A45>::param_type a45)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -1978,8 +2024,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40 , typename call_traits<A41>::param_type a41 , typename call_traits<A42>::param_type a42 , typename call_traits<A43>::param_type a43 , typename call_traits<A44>::param_type a44 , typename call_traits<A45>::param_type a45 , typename call_traits<A46>::param_type a46)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -2020,8 +2067,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40 , typename call_traits<A41>::param_type a41 , typename call_traits<A42>::param_type a42 , typename call_traits<A43>::param_type a43 , typename call_traits<A44>::param_type a44 , typename call_traits<A45>::param_type a45 , typename call_traits<A46>::param_type a46 , typename call_traits<A47>::param_type a47)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -2062,8 +2110,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40 , typename call_traits<A41>::param_type a41 , typename call_traits<A42>::param_type a42 , typename call_traits<A43>::param_type a43 , typename call_traits<A44>::param_type a44 , typename call_traits<A45>::param_type a45 , typename call_traits<A46>::param_type a46 , typename call_traits<A47>::param_type a47 , typename call_traits<A48>::param_type a48)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
@@ -2104,8 +2153,9 @@ namespace boost { namespace phoenix
proto_grammar;
static type make(typename call_traits<A0>::param_type a0 , typename call_traits<A1>::param_type a1 , typename call_traits<A2>::param_type a2 , typename call_traits<A3>::param_type a3 , typename call_traits<A4>::param_type a4 , typename call_traits<A5>::param_type a5 , typename call_traits<A6>::param_type a6 , typename call_traits<A7>::param_type a7 , typename call_traits<A8>::param_type a8 , typename call_traits<A9>::param_type a9 , typename call_traits<A10>::param_type a10 , typename call_traits<A11>::param_type a11 , typename call_traits<A12>::param_type a12 , typename call_traits<A13>::param_type a13 , typename call_traits<A14>::param_type a14 , typename call_traits<A15>::param_type a15 , typename call_traits<A16>::param_type a16 , typename call_traits<A17>::param_type a17 , typename call_traits<A18>::param_type a18 , typename call_traits<A19>::param_type a19 , typename call_traits<A20>::param_type a20 , typename call_traits<A21>::param_type a21 , typename call_traits<A22>::param_type a22 , typename call_traits<A23>::param_type a23 , typename call_traits<A24>::param_type a24 , typename call_traits<A25>::param_type a25 , typename call_traits<A26>::param_type a26 , typename call_traits<A27>::param_type a27 , typename call_traits<A28>::param_type a28 , typename call_traits<A29>::param_type a29 , typename call_traits<A30>::param_type a30 , typename call_traits<A31>::param_type a31 , typename call_traits<A32>::param_type a32 , typename call_traits<A33>::param_type a33 , typename call_traits<A34>::param_type a34 , typename call_traits<A35>::param_type a35 , typename call_traits<A36>::param_type a36 , typename call_traits<A37>::param_type a37 , typename call_traits<A38>::param_type a38 , typename call_traits<A39>::param_type a39 , typename call_traits<A40>::param_type a40 , typename call_traits<A41>::param_type a41 , typename call_traits<A42>::param_type a42 , typename call_traits<A43>::param_type a43 , typename call_traits<A44>::param_type a44 , typename call_traits<A45>::param_type a45 , typename call_traits<A46>::param_type a46 , typename call_traits<A47>::param_type a47 , typename call_traits<A48>::param_type a48 , typename call_traits<A49>::param_type a49)
- {
- actor<base_type> const e =
+ {
+
+ actor<base_type> const e =
{
proto::make_expr<
Tag
diff --git a/3party/boost/boost/phoenix/core/preprocessed/function_equal_10.hpp b/3party/boost/boost/phoenix/core/preprocessed/function_equal_10.hpp
index 81b5440ecc..96184fc48f 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/function_equal_10.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/function_equal_10.hpp
@@ -1 +1,9 @@
+/*==============================================================================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2004 Daniel Wallin
+ Copyright (c) 2010 Thomas Heller
+
+ 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 <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 1 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) ; } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 2 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 3 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 4 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 5 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 6 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 7 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 8 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 9 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 10 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ); }
diff --git a/3party/boost/boost/phoenix/core/preprocessed/function_equal_20.hpp b/3party/boost/boost/phoenix/core/preprocessed/function_equal_20.hpp
index 6ea1bb9864..a1faa823c5 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/function_equal_20.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/function_equal_20.hpp
@@ -1 +1,9 @@
+/*==============================================================================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2004 Daniel Wallin
+ Copyright (c) 2010 Thomas Heller
+
+ 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 <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 1 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) ; } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 2 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 3 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 4 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 5 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 6 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 7 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 8 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 9 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 10 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 11 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 12 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 13 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 14 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 15 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 16 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 17 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 18 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 19 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 20 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ); }
diff --git a/3party/boost/boost/phoenix/core/preprocessed/function_equal_30.hpp b/3party/boost/boost/phoenix/core/preprocessed/function_equal_30.hpp
index 79bed0e452..9d20776f0e 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/function_equal_30.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/function_equal_30.hpp
@@ -1 +1,9 @@
+/*==============================================================================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2004 Daniel Wallin
+ Copyright (c) 2010 Thomas Heller
+
+ 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 <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 1 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) ; } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 2 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 3 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 4 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 5 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 6 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 7 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 8 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 9 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 10 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 11 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 12 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 13 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 14 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 15 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 16 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 17 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 18 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 19 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 20 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 21 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 22 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 23 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 24 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 25 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 26 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 27 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 28 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 29 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 30 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ); }
diff --git a/3party/boost/boost/phoenix/core/preprocessed/function_equal_40.hpp b/3party/boost/boost/phoenix/core/preprocessed/function_equal_40.hpp
index c3f8009e25..6161deb7c9 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/function_equal_40.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/function_equal_40.hpp
@@ -1 +1,9 @@
+/*==============================================================================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2004 Daniel Wallin
+ Copyright (c) 2010 Thomas Heller
+
+ 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 <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 1 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) ; } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 2 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 3 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 4 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 5 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 6 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 7 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 8 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 9 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 10 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 11 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 12 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 13 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 14 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 15 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 16 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 17 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 18 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 19 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 20 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 21 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 22 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 23 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 24 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 25 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 26 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 27 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 28 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 29 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 30 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 31 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 32 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 33 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 34 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 35 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 36 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 37 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 38 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 39 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 40 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ); }
diff --git a/3party/boost/boost/phoenix/core/preprocessed/function_equal_50.hpp b/3party/boost/boost/phoenix/core/preprocessed/function_equal_50.hpp
index 3b46e1a304..1626187d5a 100644
--- a/3party/boost/boost/phoenix/core/preprocessed/function_equal_50.hpp
+++ b/3party/boost/boost/phoenix/core/preprocessed/function_equal_50.hpp
@@ -1 +1,9 @@
+/*==============================================================================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2004 Daniel Wallin
+ Copyright (c) 2010 Thomas Heller
+
+ 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 <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 1 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) ; } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 2 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 3 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 4 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 5 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 6 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 7 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 8 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 9 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 10 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 11 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 12 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 13 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 14 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 15 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 16 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 17 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 18 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 19 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 20 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 21 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 22 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 23 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 24 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 25 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 26 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 27 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 28 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 29 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 30 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 31 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 32 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 33 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 34 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 35 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 36 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 37 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 38 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 39 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 40 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 41 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 42 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ) && function_equal_()( proto::child_c< 41 >(e1) , proto::child_c< 41 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 43 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ) && function_equal_()( proto::child_c< 41 >(e1) , proto::child_c< 41 >(e2) ) && function_equal_()( proto::child_c< 42 >(e1) , proto::child_c< 42 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 44 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ) && function_equal_()( proto::child_c< 41 >(e1) , proto::child_c< 41 >(e2) ) && function_equal_()( proto::child_c< 42 >(e1) , proto::child_c< 42 >(e2) ) && function_equal_()( proto::child_c< 43 >(e1) , proto::child_c< 43 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 45 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ) && function_equal_()( proto::child_c< 41 >(e1) , proto::child_c< 41 >(e2) ) && function_equal_()( proto::child_c< 42 >(e1) , proto::child_c< 42 >(e2) ) && function_equal_()( proto::child_c< 43 >(e1) , proto::child_c< 43 >(e2) ) && function_equal_()( proto::child_c< 44 >(e1) , proto::child_c< 44 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 46 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ) && function_equal_()( proto::child_c< 41 >(e1) , proto::child_c< 41 >(e2) ) && function_equal_()( proto::child_c< 42 >(e1) , proto::child_c< 42 >(e2) ) && function_equal_()( proto::child_c< 43 >(e1) , proto::child_c< 43 >(e2) ) && function_equal_()( proto::child_c< 44 >(e1) , proto::child_c< 44 >(e2) ) && function_equal_()( proto::child_c< 45 >(e1) , proto::child_c< 45 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 47 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ) && function_equal_()( proto::child_c< 41 >(e1) , proto::child_c< 41 >(e2) ) && function_equal_()( proto::child_c< 42 >(e1) , proto::child_c< 42 >(e2) ) && function_equal_()( proto::child_c< 43 >(e1) , proto::child_c< 43 >(e2) ) && function_equal_()( proto::child_c< 44 >(e1) , proto::child_c< 44 >(e2) ) && function_equal_()( proto::child_c< 45 >(e1) , proto::child_c< 45 >(e2) ) && function_equal_()( proto::child_c< 46 >(e1) , proto::child_c< 46 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 48 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ) && function_equal_()( proto::child_c< 41 >(e1) , proto::child_c< 41 >(e2) ) && function_equal_()( proto::child_c< 42 >(e1) , proto::child_c< 42 >(e2) ) && function_equal_()( proto::child_c< 43 >(e1) , proto::child_c< 43 >(e2) ) && function_equal_()( proto::child_c< 44 >(e1) , proto::child_c< 44 >(e2) ) && function_equal_()( proto::child_c< 45 >(e1) , proto::child_c< 45 >(e2) ) && function_equal_()( proto::child_c< 46 >(e1) , proto::child_c< 46 >(e2) ) && function_equal_()( proto::child_c< 47 >(e1) , proto::child_c< 47 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 49 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ) && function_equal_()( proto::child_c< 41 >(e1) , proto::child_c< 41 >(e2) ) && function_equal_()( proto::child_c< 42 >(e1) , proto::child_c< 42 >(e2) ) && function_equal_()( proto::child_c< 43 >(e1) , proto::child_c< 43 >(e2) ) && function_equal_()( proto::child_c< 44 >(e1) , proto::child_c< 44 >(e2) ) && function_equal_()( proto::child_c< 45 >(e1) , proto::child_c< 45 >(e2) ) && function_equal_()( proto::child_c< 46 >(e1) , proto::child_c< 46 >(e2) ) && function_equal_()( proto::child_c< 47 >(e1) , proto::child_c< 47 >(e2) ) && function_equal_()( proto::child_c< 48 >(e1) , proto::child_c< 48 >(e2) ); } template <typename Expr1> result_type evaluate( Expr1 const& e1 , Expr1 const& e2 , mpl::long_< 50 > ) const { return function_equal_()( proto::child_c<0>(e1) , proto::child_c<0>(e2) ) && function_equal_()( proto::child_c< 1 >(e1) , proto::child_c< 1 >(e2) ) && function_equal_()( proto::child_c< 2 >(e1) , proto::child_c< 2 >(e2) ) && function_equal_()( proto::child_c< 3 >(e1) , proto::child_c< 3 >(e2) ) && function_equal_()( proto::child_c< 4 >(e1) , proto::child_c< 4 >(e2) ) && function_equal_()( proto::child_c< 5 >(e1) , proto::child_c< 5 >(e2) ) && function_equal_()( proto::child_c< 6 >(e1) , proto::child_c< 6 >(e2) ) && function_equal_()( proto::child_c< 7 >(e1) , proto::child_c< 7 >(e2) ) && function_equal_()( proto::child_c< 8 >(e1) , proto::child_c< 8 >(e2) ) && function_equal_()( proto::child_c< 9 >(e1) , proto::child_c< 9 >(e2) ) && function_equal_()( proto::child_c< 10 >(e1) , proto::child_c< 10 >(e2) ) && function_equal_()( proto::child_c< 11 >(e1) , proto::child_c< 11 >(e2) ) && function_equal_()( proto::child_c< 12 >(e1) , proto::child_c< 12 >(e2) ) && function_equal_()( proto::child_c< 13 >(e1) , proto::child_c< 13 >(e2) ) && function_equal_()( proto::child_c< 14 >(e1) , proto::child_c< 14 >(e2) ) && function_equal_()( proto::child_c< 15 >(e1) , proto::child_c< 15 >(e2) ) && function_equal_()( proto::child_c< 16 >(e1) , proto::child_c< 16 >(e2) ) && function_equal_()( proto::child_c< 17 >(e1) , proto::child_c< 17 >(e2) ) && function_equal_()( proto::child_c< 18 >(e1) , proto::child_c< 18 >(e2) ) && function_equal_()( proto::child_c< 19 >(e1) , proto::child_c< 19 >(e2) ) && function_equal_()( proto::child_c< 20 >(e1) , proto::child_c< 20 >(e2) ) && function_equal_()( proto::child_c< 21 >(e1) , proto::child_c< 21 >(e2) ) && function_equal_()( proto::child_c< 22 >(e1) , proto::child_c< 22 >(e2) ) && function_equal_()( proto::child_c< 23 >(e1) , proto::child_c< 23 >(e2) ) && function_equal_()( proto::child_c< 24 >(e1) , proto::child_c< 24 >(e2) ) && function_equal_()( proto::child_c< 25 >(e1) , proto::child_c< 25 >(e2) ) && function_equal_()( proto::child_c< 26 >(e1) , proto::child_c< 26 >(e2) ) && function_equal_()( proto::child_c< 27 >(e1) , proto::child_c< 27 >(e2) ) && function_equal_()( proto::child_c< 28 >(e1) , proto::child_c< 28 >(e2) ) && function_equal_()( proto::child_c< 29 >(e1) , proto::child_c< 29 >(e2) ) && function_equal_()( proto::child_c< 30 >(e1) , proto::child_c< 30 >(e2) ) && function_equal_()( proto::child_c< 31 >(e1) , proto::child_c< 31 >(e2) ) && function_equal_()( proto::child_c< 32 >(e1) , proto::child_c< 32 >(e2) ) && function_equal_()( proto::child_c< 33 >(e1) , proto::child_c< 33 >(e2) ) && function_equal_()( proto::child_c< 34 >(e1) , proto::child_c< 34 >(e2) ) && function_equal_()( proto::child_c< 35 >(e1) , proto::child_c< 35 >(e2) ) && function_equal_()( proto::child_c< 36 >(e1) , proto::child_c< 36 >(e2) ) && function_equal_()( proto::child_c< 37 >(e1) , proto::child_c< 37 >(e2) ) && function_equal_()( proto::child_c< 38 >(e1) , proto::child_c< 38 >(e2) ) && function_equal_()( proto::child_c< 39 >(e1) , proto::child_c< 39 >(e2) ) && function_equal_()( proto::child_c< 40 >(e1) , proto::child_c< 40 >(e2) ) && function_equal_()( proto::child_c< 41 >(e1) , proto::child_c< 41 >(e2) ) && function_equal_()( proto::child_c< 42 >(e1) , proto::child_c< 42 >(e2) ) && function_equal_()( proto::child_c< 43 >(e1) , proto::child_c< 43 >(e2) ) && function_equal_()( proto::child_c< 44 >(e1) , proto::child_c< 44 >(e2) ) && function_equal_()( proto::child_c< 45 >(e1) , proto::child_c< 45 >(e2) ) && function_equal_()( proto::child_c< 46 >(e1) , proto::child_c< 46 >(e2) ) && function_equal_()( proto::child_c< 47 >(e1) , proto::child_c< 47 >(e2) ) && function_equal_()( proto::child_c< 48 >(e1) , proto::child_c< 48 >(e2) ) && function_equal_()( proto::child_c< 49 >(e1) , proto::child_c< 49 >(e2) ); }
diff --git a/3party/boost/boost/phoenix/core/reference.hpp b/3party/boost/boost/phoenix/core/reference.hpp
index 8e73ad8b45..7f5170a12c 100644
--- a/3party/boost/boost/phoenix/core/reference.hpp
+++ b/3party/boost/boost/phoenix/core/reference.hpp
@@ -64,15 +64,17 @@ namespace boost { namespace phoenix
}
template <typename T>
+ inline
typename expression::reference<T>::type const
- inline ref(T & t)
+ ref(T & t)
{
return expression::reference<T>::make(t);
}
template <typename T>
+ inline
typename expression::reference<T const>::type const
- inline cref(T const & t)
+ cref(T const & t)
{
return expression::reference<T const>::make(t);
}
diff --git a/3party/boost/boost/phoenix/core/terminal.hpp b/3party/boost/boost/phoenix/core/terminal.hpp
index 79ebe64a82..f161393258 100644
--- a/3party/boost/boost/phoenix/core/terminal.hpp
+++ b/3party/boost/boost/phoenix/core/terminal.hpp
@@ -49,6 +49,10 @@ namespace boost { namespace phoenix
template <typename T, typename Dummy>
struct custom_terminal;
+
+ namespace tag {
+ struct terminal /*: public proto::tag::terminal */ {};
+ }
namespace expression
{
@@ -60,7 +64,8 @@ namespace boost { namespace phoenix
{
typedef
proto::basic_expr<
- proto::tag::terminal
+ proto::tag::terminal
+ // tag::terminal //cannot change to use phoenix tag - breaks code.
, proto::term<T>
, 0
>
@@ -69,7 +74,9 @@ namespace boost { namespace phoenix
static const type make(typename call_traits<T>::param_type t)
{
+ // ?? Should the next line be Actor not actor which is the default?
actor<base_type> const e = {base_type::make(t)};
+ //Actor<base_type> const e = {base_type::make(t)};
return e;
}
};
diff --git a/3party/boost/boost/phoenix/core/value.hpp b/3party/boost/boost/phoenix/core/value.hpp
index 59cc369223..bb381e9d68 100644
--- a/3party/boost/boost/phoenix/core/value.hpp
+++ b/3party/boost/boost/phoenix/core/value.hpp
@@ -29,12 +29,24 @@ namespace boost { namespace phoenix
template <typename T>
struct value
: expression::terminal<T>
- {};
+ {
+ typedef
+ typename expression::terminal<T>::type
+ type;
+ /*
+ static const type make(T & t)
+ {
+ typename value<T>::type const e = {{t}};
+ return e;
+ }
+ */
+ };
}
template <typename T>
+ inline
typename expression::value<T>::type const
- inline val(T t)
+ val(T t)
{
return expression::value<T>::make(t);
}
@@ -55,11 +67,11 @@ namespace boost { namespace phoenix
template <typename This, typename Actor, typename Context>
struct result<This(Actor, Context)>
: boost::remove_const<
- typename boost::remove_reference<
+ typename boost::remove_reference<
typename evaluator::impl<Actor, Context, proto::empty_env>::result_type
- >::type
- >
- {};
+ >::type
+ >
+ {};
template <typename Context>
typename result<custom_terminal(actor<Expr> const &, Context &)>::type
diff --git a/3party/boost/boost/phoenix/core/visit_each.hpp b/3party/boost/boost/phoenix/core/visit_each.hpp
index ad4ca14f45..9a8971e5f3 100644
--- a/3party/boost/boost/phoenix/core/visit_each.hpp
+++ b/3party/boost/boost/phoenix/core/visit_each.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace phoenix
struct visit_each_impl
{
Visitor& visitor;
- visit_each_impl(Visitor& visitor ) : visitor(visitor) {}
+ visit_each_impl(Visitor& visitor_ ) : visitor(visitor_) {}
template <typename T>
void operator()(T const& t) const
diff --git a/3party/boost/boost/phoenix/function/adapt_callable.hpp b/3party/boost/boost/phoenix/function/adapt_callable.hpp
index 8cd83617ab..ac2f3ae5ca 100644
--- a/3party/boost/boost/phoenix/function/adapt_callable.hpp
+++ b/3party/boost/boost/phoenix/function/adapt_callable.hpp
@@ -13,8 +13,9 @@
#include <boost/preprocessor/repetition/repeat.hpp>
#define BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY(NAME, FUNC) \
+ inline \
boost::phoenix::detail::expression::function_eval<FUNC>::type const \
- inline NAME() \
+ NAME() \
{ \
return boost::phoenix::detail::expression:: \
function_eval<FUNC>::make(FUNC()); \
@@ -24,11 +25,12 @@
#define BOOST_PHOENIX_ADAPT_CALLABLE(NAME, FUNC, N) \
template <BOOST_PHOENIX_typename_A(N)> \
+ inline \
typename \
boost::phoenix::detail::expression::function_eval< \
FUNC \
, BOOST_PHOENIX_A(N)>::type const \
- inline NAME(BOOST_PHOENIX_A_const_ref_a(N)) \
+ NAME(BOOST_PHOENIX_A_const_ref_a(N)) \
{ \
return boost::phoenix::detail::expression:: \
function_eval<FUNC, BOOST_PHOENIX_A(N)>:: \
diff --git a/3party/boost/boost/phoenix/function/adapt_function.hpp b/3party/boost/boost/phoenix/function/adapt_function.hpp
index 69e1136226..6ba20be3d2 100644
--- a/3party/boost/boost/phoenix/function/adapt_function.hpp
+++ b/3party/boost/boost/phoenix/function/adapt_function.hpp
@@ -27,10 +27,11 @@
}; \
} \
\
+ inline \
boost::phoenix::detail::expression::function_eval< \
detail:: BOOST_PP_CAT(NAME, _impl_nullary) \
>::type const \
- inline NAME() \
+ NAME() \
{ \
return boost::phoenix::detail::expression:: \
function_eval<detail:: BOOST_PP_CAT(NAME, _impl_nullary)> \
@@ -48,7 +49,7 @@
\
template <typename This, BOOST_PHOENIX_typename_A(N)> \
struct result<This(BOOST_PHOENIX_A(N))> \
- {typedef RESULT type;}; \
+ {typedef RESULT type;}; \
\
template <BOOST_PHOENIX_typename_A(N)> \
RESULT \
@@ -60,11 +61,12 @@
} \
\
template <BOOST_PHOENIX_typename_A(N)> \
+ inline \
typename \
boost::phoenix::detail::expression::function_eval< \
detail:: BOOST_PP_CAT(BOOST_PP_CAT(NAME, _impl_), N) \
, BOOST_PHOENIX_A(N)>::type const \
- inline NAME(BOOST_PHOENIX_A_const_ref_a(N)) \
+ NAME(BOOST_PHOENIX_A_const_ref_a(N)) \
{ \
return boost::phoenix::detail::expression:: \
function_eval< \
diff --git a/3party/boost/boost/phoenix/function/function.hpp b/3party/boost/boost/phoenix/function/function.hpp
index 10bdab70d4..4817100366 100644
--- a/3party/boost/boost/phoenix/function/function.hpp
+++ b/3party/boost/boost/phoenix/function/function.hpp
@@ -8,6 +8,7 @@
#ifndef BOOST_PHOENIX_FUNCTION_FUNCTION_HPP
#define BOOST_PHOENIX_FUNCTION_FUNCTION_HPP
+#include <boost/config.hpp>
//#include <boost/phoenix/function/function_handling.hpp>
#include <boost/phoenix/core/detail/function_eval.hpp>
#include <boost/preprocessor/facilities/expand.hpp>
@@ -19,15 +20,25 @@ namespace boost { namespace phoenix
/////////////////////////////////////////////////////////////////////////////
// Functions
/////////////////////////////////////////////////////////////////////////////
+
+ namespace expression
+ {
+ template <typename F, BOOST_PHOENIX_typename_A_void(BOOST_PHOENIX_ACTOR_LIMIT)>
+ struct function
+ : detail::expression::function_eval<F, BOOST_PHOENIX_A(BOOST_PHOENIX_ACTOR_LIMIT)>
+ {};
+ }
// functor which returns our lazy function call extension
template<typename F>
struct function
{
- function() {}
+ BOOST_CONSTEXPR function()
+ : f()
+ {}
- function(F f)
- : f(f)
+ BOOST_CONSTEXPR function(F f_)
+ : f(f_)
{}
template <typename Sig>
diff --git a/3party/boost/boost/phoenix/fusion.hpp b/3party/boost/boost/phoenix/fusion.hpp
index 1443b69cde..14319b1d19 100644
--- a/3party/boost/boost/phoenix/fusion.hpp
+++ b/3party/boost/boost/phoenix/fusion.hpp
@@ -8,10 +8,6 @@
#ifndef BOOST_PHOENIX_FUSION_HPP
#define BOOST_PHOENIX_FUSION_HPP
-#ifdef BOOST_PHOENIX_USE_V2_OVER_V3
-#include <boost/spirit/home/phoenix/fusion.hpp>
-#else
#include <boost/phoenix/fusion/at.hpp>
-#endif
#endif
diff --git a/3party/boost/boost/phoenix/object.hpp b/3party/boost/boost/phoenix/object.hpp
index 6e4b528275..9fec3b3e3b 100644
--- a/3party/boost/boost/phoenix/object.hpp
+++ b/3party/boost/boost/phoenix/object.hpp
@@ -8,9 +8,6 @@
#ifndef BOOST_PHOENIX_OBJECT_HPP
#define BOOST_PHOENIX_OBJECT_HPP
-#ifdef BOOST_PHOENIX_USE_V2_OVER_V3
-#include <boost/spirit/home/phoenix/object.hpp>
-#else
#include <boost/phoenix/object/const_cast.hpp>
#include <boost/phoenix/object/construct.hpp>
#include <boost/phoenix/object/delete.hpp>
@@ -18,6 +15,5 @@
#include <boost/phoenix/object/new.hpp>
#include <boost/phoenix/object/reinterpret_cast.hpp>
#include <boost/phoenix/object/static_cast.hpp>
-#endif
#endif
diff --git a/3party/boost/boost/phoenix/operator.hpp b/3party/boost/boost/phoenix/operator.hpp
index c1e2688fd4..bd70602608 100644
--- a/3party/boost/boost/phoenix/operator.hpp
+++ b/3party/boost/boost/phoenix/operator.hpp
@@ -18,5 +18,6 @@
#include <boost/phoenix/operator/logical.hpp>
#include <boost/phoenix/operator/io.hpp>
#include <boost/phoenix/operator/member.hpp>
+#include <boost/phoenix/scope/local_variable.hpp> // to fix 5824
#endif
diff --git a/3party/boost/boost/phoenix/operator/comparison.hpp b/3party/boost/boost/phoenix/operator/comparison.hpp
index 987c5a795f..bea292fbee 100644
--- a/3party/boost/boost/phoenix/operator/comparison.hpp
+++ b/3party/boost/boost/phoenix/operator/comparison.hpp
@@ -11,6 +11,7 @@
#include <boost/phoenix/operator/detail/define_operator.hpp>
#include <boost/phoenix/core/expression.hpp>
#include <boost/proto/operators.hpp>
+#include <boost/proto/fusion.hpp> // Added to solve bug 6268
namespace boost { namespace phoenix
{
diff --git a/3party/boost/boost/phoenix/operator/detail/define_operator.hpp b/3party/boost/boost/phoenix/operator/detail/define_operator.hpp
index cc35f1ac22..3de63b8e48 100644
--- a/3party/boost/boost/phoenix/operator/detail/define_operator.hpp
+++ b/3party/boost/boost/phoenix/operator/detail/define_operator.hpp
@@ -44,8 +44,9 @@
{}; \
} \
template <typename Operand> \
+ inline \
typename result_of::BOOST_PP_CAT(make_, name)<Operand>::type \
- inline BOOST_PP_CAT(make_, name)(Operand const & operand) \
+ BOOST_PP_CAT(make_, name)(Operand const & operand) \
{ \
return functional::BOOST_PP_CAT(make_, name)()(operand); \
} \
@@ -83,8 +84,9 @@
{}; \
} \
template <typename Rhs, typename Lhs> \
+ inline \
typename result_of::BOOST_PP_CAT(make_, name)<Rhs, Lhs>::type \
- inline BOOST_PP_CAT(make_, name)(Lhs const & lhs, Rhs const & rhs) \
+ BOOST_PP_CAT(make_, name)(Lhs const & lhs, Rhs const & rhs) \
{ \
return functional::BOOST_PP_CAT(make_, name)()(lhs, rhs); \
} \
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 59f5d5ce23..59a52237f6 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
@@ -43,9 +43,9 @@ namespace boost { namespace phoenix
template <typename Object, typename MemPtr>
struct mem_fun_ptr_gen
{
- mem_fun_ptr_gen(Object const& obj, MemPtr ptr)
- : obj(obj)
- , ptr(ptr)
+ mem_fun_ptr_gen(Object const& obj_, MemPtr ptr_)
+ : obj(obj_)
+ , ptr(ptr_)
{}
typename phoenix::expression::mem_fun_ptr<Object, MemPtr>::type const
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 2b6ccae0be..0e2e30579a 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
@@ -12,9 +12,9 @@ namespace boost { namespace phoenix
template <typename Object, typename MemPtr>
struct mem_fun_ptr_gen
{
- mem_fun_ptr_gen(Object const& obj, MemPtr ptr)
- : obj(obj)
- , ptr(ptr)
+ mem_fun_ptr_gen(Object const& obj_, MemPtr ptr_)
+ : obj(obj_)
+ , ptr(ptr_)
{}
typename phoenix::expression::mem_fun_ptr<Object, MemPtr>::type const
operator()() const
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 ac4621a81a..b5a83688cc 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
@@ -12,9 +12,9 @@ namespace boost { namespace phoenix
template <typename Object, typename MemPtr>
struct mem_fun_ptr_gen
{
- mem_fun_ptr_gen(Object const& obj, MemPtr ptr)
- : obj(obj)
- , ptr(ptr)
+ mem_fun_ptr_gen(Object const& obj_, MemPtr ptr_)
+ : obj(obj_)
+ , ptr(ptr_)
{}
typename phoenix::expression::mem_fun_ptr<Object, MemPtr>::type const
operator()() const
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 8e0fba4c0e..a7159477de 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
@@ -12,9 +12,9 @@ namespace boost { namespace phoenix
template <typename Object, typename MemPtr>
struct mem_fun_ptr_gen
{
- mem_fun_ptr_gen(Object const& obj, MemPtr ptr)
- : obj(obj)
- , ptr(ptr)
+ mem_fun_ptr_gen(Object const& obj_, MemPtr ptr_)
+ : obj(obj_)
+ , ptr(ptr_)
{}
typename phoenix::expression::mem_fun_ptr<Object, MemPtr>::type const
operator()() const
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 a61836e5a6..c11e48663c 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
@@ -12,9 +12,9 @@ namespace boost { namespace phoenix
template <typename Object, typename MemPtr>
struct mem_fun_ptr_gen
{
- mem_fun_ptr_gen(Object const& obj, MemPtr ptr)
- : obj(obj)
- , ptr(ptr)
+ mem_fun_ptr_gen(Object const& obj_, MemPtr ptr_)
+ : obj(obj_)
+ , ptr(ptr_)
{}
typename phoenix::expression::mem_fun_ptr<Object, MemPtr>::type const
operator()() const
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 d93a324516..8e0f53630d 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
@@ -12,9 +12,9 @@ namespace boost { namespace phoenix
template <typename Object, typename MemPtr>
struct mem_fun_ptr_gen
{
- mem_fun_ptr_gen(Object const& obj, MemPtr ptr)
- : obj(obj)
- , ptr(ptr)
+ mem_fun_ptr_gen(Object const& obj_, MemPtr ptr_)
+ : obj(obj_)
+ , ptr(ptr_)
{}
typename phoenix::expression::mem_fun_ptr<Object, MemPtr>::type const
operator()() const
diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_10.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_10.hpp
index 5e1878114e..1c2049b9ba 100644
--- a/3party/boost/boost/phoenix/operator/preprocessed/member_10.hpp
+++ b/3party/boost/boost/phoenix/operator/preprocessed/member_10.hpp
@@ -7,7 +7,7 @@
==============================================================================*/
namespace boost { namespace phoenix
{
- namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {};
+ namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {}; namespace functional { typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace result_of { template <typename Lhs, typename Rhs> struct make_mem_ptr : boost::result_of< functional:: make_mem_ptr( Lhs, Rhs ) > {}; } template <typename Rhs, typename Lhs> inline typename result_of::make_mem_ptr<Rhs, Lhs>::type make_mem_ptr(Lhs const & lhs, Rhs const & rhs) { return functional::make_mem_ptr()(lhs, rhs); }
template<>
struct phoenix_generator::case_<proto::tag::mem_ptr>
: proto::or_<
diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_20.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_20.hpp
index 50a82630c4..b3e5614059 100644
--- a/3party/boost/boost/phoenix/operator/preprocessed/member_20.hpp
+++ b/3party/boost/boost/phoenix/operator/preprocessed/member_20.hpp
@@ -7,7 +7,7 @@
==============================================================================*/
namespace boost { namespace phoenix
{
- namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {};
+ namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {}; namespace functional { typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace result_of { template <typename Lhs, typename Rhs> struct make_mem_ptr : boost::result_of< functional:: make_mem_ptr( Lhs, Rhs ) > {}; } template <typename Rhs, typename Lhs> inline typename result_of::make_mem_ptr<Rhs, Lhs>::type make_mem_ptr(Lhs const & lhs, Rhs const & rhs) { return functional::make_mem_ptr()(lhs, rhs); }
template<>
struct phoenix_generator::case_<proto::tag::mem_ptr>
: proto::or_<
diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_30.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_30.hpp
index be6ddf9066..fa19cc3946 100644
--- a/3party/boost/boost/phoenix/operator/preprocessed/member_30.hpp
+++ b/3party/boost/boost/phoenix/operator/preprocessed/member_30.hpp
@@ -7,7 +7,7 @@
==============================================================================*/
namespace boost { namespace phoenix
{
- namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {};
+ namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {}; namespace functional { typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace result_of { template <typename Lhs, typename Rhs> struct make_mem_ptr : boost::result_of< functional:: make_mem_ptr( Lhs, Rhs ) > {}; } template <typename Rhs, typename Lhs> inline typename result_of::make_mem_ptr<Rhs, Lhs>::type make_mem_ptr(Lhs const & lhs, Rhs const & rhs) { return functional::make_mem_ptr()(lhs, rhs); }
template<>
struct phoenix_generator::case_<proto::tag::mem_ptr>
: proto::or_<
diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_40.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_40.hpp
index d03f0c9e96..f379a33ac5 100644
--- a/3party/boost/boost/phoenix/operator/preprocessed/member_40.hpp
+++ b/3party/boost/boost/phoenix/operator/preprocessed/member_40.hpp
@@ -7,7 +7,7 @@
==============================================================================*/
namespace boost { namespace phoenix
{
- namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {};
+ namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {}; namespace functional { typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace result_of { template <typename Lhs, typename Rhs> struct make_mem_ptr : boost::result_of< functional:: make_mem_ptr( Lhs, Rhs ) > {}; } template <typename Rhs, typename Lhs> inline typename result_of::make_mem_ptr<Rhs, Lhs>::type make_mem_ptr(Lhs const & lhs, Rhs const & rhs) { return functional::make_mem_ptr()(lhs, rhs); }
template<>
struct phoenix_generator::case_<proto::tag::mem_ptr>
: proto::or_<
diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_50.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_50.hpp
index bbaf2a4ed7..58996caf53 100644
--- a/3party/boost/boost/phoenix/operator/preprocessed/member_50.hpp
+++ b/3party/boost/boost/phoenix/operator/preprocessed/member_50.hpp
@@ -7,7 +7,7 @@
==============================================================================*/
namespace boost { namespace phoenix
{
- namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {};
+ namespace expression { template <typename Lhs, typename Rhs> struct mem_ptr : expr<proto::tag:: mem_ptr, Lhs, Rhs> {}; } namespace rule { struct mem_ptr : expression:: mem_ptr<meta_grammar, meta_grammar> {}; } template <typename Dummy> struct meta_grammar::case_<proto::tag:: mem_ptr, Dummy> : enable_rule<rule:: mem_ptr, Dummy> {}; namespace functional { typedef proto::functional::make_expr<proto::tag:: mem_ptr> make_mem_ptr; } namespace result_of { template <typename Lhs, typename Rhs> struct make_mem_ptr : boost::result_of< functional:: make_mem_ptr( Lhs, Rhs ) > {}; } template <typename Rhs, typename Lhs> inline typename result_of::make_mem_ptr<Rhs, Lhs>::type make_mem_ptr(Lhs const & lhs, Rhs const & rhs) { return functional::make_mem_ptr()(lhs, rhs); }
template<>
struct phoenix_generator::case_<proto::tag::mem_ptr>
: proto::or_<
diff --git a/3party/boost/boost/phoenix/phoenix.hpp b/3party/boost/boost/phoenix/phoenix.hpp
index 2eb6555987..67aac14f99 100644
--- a/3party/boost/boost/phoenix/phoenix.hpp
+++ b/3party/boost/boost/phoenix/phoenix.hpp
@@ -16,5 +16,6 @@
#include <boost/phoenix/scope.hpp>
#include <boost/phoenix/bind.hpp>
#include <boost/phoenix/stl.hpp>
+#include <boost/phoenix/fusion.hpp>
#endif
diff --git a/3party/boost/boost/phoenix/scope/lambda.hpp b/3party/boost/boost/phoenix/scope/lambda.hpp
index 432edd9bf2..8221966ac2 100644
--- a/3party/boost/boost/phoenix/scope/lambda.hpp
+++ b/3party/boost/boost/phoenix/scope/lambda.hpp
@@ -96,22 +96,22 @@ namespace boost { namespace phoenix
>::type
env_type;
- typedef
- typename result_of::eval<
- Lambda
- , typename result_of::context<
- scoped_environment<
- env_type
- , outer_env_type
- , locals_type
- , map_type
- >
- , typename result_of::actions<
- Context
- >::type
- >::type
- >::type
- type;
+ typedef
+ typename result_of::eval<
+ Lambda
+ , typename result_of::context<
+ scoped_environment<
+ env_type
+ , outer_env_type
+ , locals_type
+ , map_type
+ >
+ , typename result_of::actions<
+ Context
+ >::type
+ >::type
+ >::type
+ type;
};
template <typename OuterEnv, typename Locals, typename Map, typename Lambda, typename Context>
@@ -148,7 +148,7 @@ namespace boost { namespace phoenix
>::type
env_type;
- scoped_environment<
+ scoped_environment<
env_type
, outer_env_type
, locals_type
@@ -248,7 +248,7 @@ namespace boost { namespace phoenix
>::type
vars_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -281,23 +281,23 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
+ /*typedef
typename proto::detail::uncvref<
typename result_of::actions<Context>::type
>::type
- actions_type;
+ actions_type;*/
typedef
typename proto::detail::uncvref<
typename proto::result_of::value<Vars>::type
>::type
vars_type;
- typedef
+ /*typedef
typename proto::detail::uncvref<
typename proto::result_of::value<Map>::type
>::type
- map_type;
-
- typedef typename
+ map_type;*/
+
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -337,8 +337,8 @@ namespace boost { namespace phoenix
template <typename Locals, typename Map>
struct lambda_actor_gen<Locals, Map>
{
- lambda_actor_gen(Locals const & locals)
- : locals(locals)
+ lambda_actor_gen(Locals const & locals_)
+ : locals(locals_)
{}
lambda_actor_gen(lambda_actor_gen const & o)
diff --git a/3party/boost/boost/phoenix/scope/let.hpp b/3party/boost/boost/phoenix/scope/let.hpp
index 8c84571512..f1b428cab7 100644
--- a/3party/boost/boost/phoenix/scope/let.hpp
+++ b/3party/boost/boost/phoenix/scope/let.hpp
@@ -130,8 +130,8 @@ namespace boost { namespace phoenix
template <typename Locals, typename Map>
struct let_actor_gen
{
- let_actor_gen(Locals const & locals)
- : locals(locals)
+ let_actor_gen(Locals const & locals_)
+ : locals(locals_)
{}
let_actor_gen(let_actor_gen const & o)
diff --git a/3party/boost/boost/phoenix/scope/local_variable.hpp b/3party/boost/boost/phoenix/scope/local_variable.hpp
index ebc01c3ccd..d62a5bb223 100644
--- a/3party/boost/boost/phoenix/scope/local_variable.hpp
+++ b/3party/boost/boost/phoenix/scope/local_variable.hpp
@@ -57,7 +57,7 @@ namespace boost { namespace phoenix
: mpl::false_
{};
}
-
+
namespace detail
{
struct scope_is_nullary_actions
@@ -88,8 +88,8 @@ namespace boost { namespace phoenix
: mpl::true_
{};
- template <typename Key>
- struct custom_terminal<detail::local<Key> >
+ template <typename Key>
+ struct custom_terminal<detail::local<Key> >
{
template <typename Sig>
struct result;
diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_10.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_10.hpp
index 333240e301..754f2b9f3d 100644
--- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_10.hpp
+++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_10.hpp
@@ -52,22 +52,22 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename result_of::eval<
- Lambda
- , typename result_of::context<
- scoped_environment<
- env_type
- , outer_env_type
- , locals_type
- , map_type
- >
- , typename result_of::actions<
- Context
- >::type
- >::type
- >::type
- type;
+ typedef
+ typename result_of::eval<
+ Lambda
+ , typename result_of::context<
+ scoped_environment<
+ env_type
+ , outer_env_type
+ , locals_type
+ , map_type
+ >
+ , typename result_of::actions<
+ Context
+ >::type
+ >::type
+ >::type
+ type;
};
template <typename OuterEnv, typename Locals, typename Map, typename Lambda, typename Context>
typename result<lambda_eval(OuterEnv const &, Locals const &, Map const &, Lambda const &, Context const &)>::type
@@ -101,7 +101,7 @@ namespace boost { namespace phoenix
>::type
env_type;
- scoped_environment<
+ scoped_environment<
env_type
, outer_env_type
, locals_type
@@ -195,7 +195,7 @@ namespace boost { namespace phoenix
>::type
vars_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -226,23 +226,14 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename proto::detail::uncvref<
- typename result_of::actions<Context>::type
- >::type
- actions_type;
+
typedef
typename proto::detail::uncvref<
typename proto::result_of::value<Vars>::type
>::type
vars_type;
- typedef
- typename proto::detail::uncvref<
- typename proto::result_of::value<Map>::type
- >::type
- map_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -277,8 +268,8 @@ namespace boost { namespace phoenix
template <typename Locals, typename Map>
struct lambda_actor_gen<Locals, Map>
{
- lambda_actor_gen(Locals const & locals)
- : locals(locals)
+ lambda_actor_gen(Locals const & locals_)
+ : locals(locals_)
{}
lambda_actor_gen(lambda_actor_gen const & o)
: locals(o.locals)
diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_20.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_20.hpp
index 7eefa43a98..d9a4bdd6d5 100644
--- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_20.hpp
+++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_20.hpp
@@ -52,22 +52,22 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename result_of::eval<
- Lambda
- , typename result_of::context<
- scoped_environment<
- env_type
- , outer_env_type
- , locals_type
- , map_type
- >
- , typename result_of::actions<
- Context
- >::type
- >::type
- >::type
- type;
+ typedef
+ typename result_of::eval<
+ Lambda
+ , typename result_of::context<
+ scoped_environment<
+ env_type
+ , outer_env_type
+ , locals_type
+ , map_type
+ >
+ , typename result_of::actions<
+ Context
+ >::type
+ >::type
+ >::type
+ type;
};
template <typename OuterEnv, typename Locals, typename Map, typename Lambda, typename Context>
typename result<lambda_eval(OuterEnv const &, Locals const &, Map const &, Lambda const &, Context const &)>::type
@@ -101,7 +101,7 @@ namespace boost { namespace phoenix
>::type
env_type;
- scoped_environment<
+ scoped_environment<
env_type
, outer_env_type
, locals_type
@@ -195,7 +195,7 @@ namespace boost { namespace phoenix
>::type
vars_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -226,23 +226,14 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename proto::detail::uncvref<
- typename result_of::actions<Context>::type
- >::type
- actions_type;
+
typedef
typename proto::detail::uncvref<
typename proto::result_of::value<Vars>::type
>::type
vars_type;
- typedef
- typename proto::detail::uncvref<
- typename proto::result_of::value<Map>::type
- >::type
- map_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -277,8 +268,8 @@ namespace boost { namespace phoenix
template <typename Locals, typename Map>
struct lambda_actor_gen<Locals, Map>
{
- lambda_actor_gen(Locals const & locals)
- : locals(locals)
+ lambda_actor_gen(Locals const & locals_)
+ : locals(locals_)
{}
lambda_actor_gen(lambda_actor_gen const & o)
: locals(o.locals)
diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_30.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_30.hpp
index e18d622153..e7f8b2aa1d 100644
--- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_30.hpp
+++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_30.hpp
@@ -52,22 +52,22 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename result_of::eval<
- Lambda
- , typename result_of::context<
- scoped_environment<
- env_type
- , outer_env_type
- , locals_type
- , map_type
- >
- , typename result_of::actions<
- Context
- >::type
- >::type
- >::type
- type;
+ typedef
+ typename result_of::eval<
+ Lambda
+ , typename result_of::context<
+ scoped_environment<
+ env_type
+ , outer_env_type
+ , locals_type
+ , map_type
+ >
+ , typename result_of::actions<
+ Context
+ >::type
+ >::type
+ >::type
+ type;
};
template <typename OuterEnv, typename Locals, typename Map, typename Lambda, typename Context>
typename result<lambda_eval(OuterEnv const &, Locals const &, Map const &, Lambda const &, Context const &)>::type
@@ -101,7 +101,7 @@ namespace boost { namespace phoenix
>::type
env_type;
- scoped_environment<
+ scoped_environment<
env_type
, outer_env_type
, locals_type
@@ -195,7 +195,7 @@ namespace boost { namespace phoenix
>::type
vars_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -226,23 +226,14 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename proto::detail::uncvref<
- typename result_of::actions<Context>::type
- >::type
- actions_type;
+
typedef
typename proto::detail::uncvref<
typename proto::result_of::value<Vars>::type
>::type
vars_type;
- typedef
- typename proto::detail::uncvref<
- typename proto::result_of::value<Map>::type
- >::type
- map_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -277,8 +268,8 @@ namespace boost { namespace phoenix
template <typename Locals, typename Map>
struct lambda_actor_gen<Locals, Map>
{
- lambda_actor_gen(Locals const & locals)
- : locals(locals)
+ lambda_actor_gen(Locals const & locals_)
+ : locals(locals_)
{}
lambda_actor_gen(lambda_actor_gen const & o)
: locals(o.locals)
diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_40.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_40.hpp
index c291c62dff..11fb23e2ff 100644
--- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_40.hpp
+++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_40.hpp
@@ -52,22 +52,22 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename result_of::eval<
- Lambda
- , typename result_of::context<
- scoped_environment<
- env_type
- , outer_env_type
- , locals_type
- , map_type
- >
- , typename result_of::actions<
- Context
- >::type
- >::type
- >::type
- type;
+ typedef
+ typename result_of::eval<
+ Lambda
+ , typename result_of::context<
+ scoped_environment<
+ env_type
+ , outer_env_type
+ , locals_type
+ , map_type
+ >
+ , typename result_of::actions<
+ Context
+ >::type
+ >::type
+ >::type
+ type;
};
template <typename OuterEnv, typename Locals, typename Map, typename Lambda, typename Context>
typename result<lambda_eval(OuterEnv const &, Locals const &, Map const &, Lambda const &, Context const &)>::type
@@ -101,7 +101,7 @@ namespace boost { namespace phoenix
>::type
env_type;
- scoped_environment<
+ scoped_environment<
env_type
, outer_env_type
, locals_type
@@ -195,7 +195,7 @@ namespace boost { namespace phoenix
>::type
vars_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -226,23 +226,14 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename proto::detail::uncvref<
- typename result_of::actions<Context>::type
- >::type
- actions_type;
+
typedef
typename proto::detail::uncvref<
typename proto::result_of::value<Vars>::type
>::type
vars_type;
- typedef
- typename proto::detail::uncvref<
- typename proto::result_of::value<Map>::type
- >::type
- map_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -277,8 +268,8 @@ namespace boost { namespace phoenix
template <typename Locals, typename Map>
struct lambda_actor_gen<Locals, Map>
{
- lambda_actor_gen(Locals const & locals)
- : locals(locals)
+ lambda_actor_gen(Locals const & locals_)
+ : locals(locals_)
{}
lambda_actor_gen(lambda_actor_gen const & o)
: locals(o.locals)
diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_50.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_50.hpp
index 30f5fef3b2..2128eb4da6 100644
--- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_50.hpp
+++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_50.hpp
@@ -52,22 +52,22 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename result_of::eval<
- Lambda
- , typename result_of::context<
- scoped_environment<
- env_type
- , outer_env_type
- , locals_type
- , map_type
- >
- , typename result_of::actions<
- Context
- >::type
- >::type
- >::type
- type;
+ typedef
+ typename result_of::eval<
+ Lambda
+ , typename result_of::context<
+ scoped_environment<
+ env_type
+ , outer_env_type
+ , locals_type
+ , map_type
+ >
+ , typename result_of::actions<
+ Context
+ >::type
+ >::type
+ >::type
+ type;
};
template <typename OuterEnv, typename Locals, typename Map, typename Lambda, typename Context>
typename result<lambda_eval(OuterEnv const &, Locals const &, Map const &, Lambda const &, Context const &)>::type
@@ -101,7 +101,7 @@ namespace boost { namespace phoenix
>::type
env_type;
- scoped_environment<
+ scoped_environment<
env_type
, outer_env_type
, locals_type
@@ -195,7 +195,7 @@ namespace boost { namespace phoenix
>::type
vars_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -226,23 +226,14 @@ namespace boost { namespace phoenix
typename result_of::env<Context>::type
>::type
env_type;
- typedef
- typename proto::detail::uncvref<
- typename result_of::actions<Context>::type
- >::type
- actions_type;
+
typedef
typename proto::detail::uncvref<
typename proto::result_of::value<Vars>::type
>::type
vars_type;
- typedef
- typename proto::detail::uncvref<
- typename proto::result_of::value<Map>::type
- >::type
- map_type;
- typedef typename
+ typedef typename
detail::result_of::initialize_locals<
vars_type
, Context
@@ -277,8 +268,8 @@ namespace boost { namespace phoenix
template <typename Locals, typename Map>
struct lambda_actor_gen<Locals, Map>
{
- lambda_actor_gen(Locals const & locals)
- : locals(locals)
+ lambda_actor_gen(Locals const & locals_)
+ : locals(locals_)
{}
lambda_actor_gen(lambda_actor_gen const & o)
: locals(o.locals)
diff --git a/3party/boost/boost/phoenix/scope/scoped_environment.hpp b/3party/boost/boost/phoenix/scope/scoped_environment.hpp
index a53b4e567f..5fcb24583e 100644
--- a/3party/boost/boost/phoenix/scope/scoped_environment.hpp
+++ b/3party/boost/boost/phoenix/scope/scoped_environment.hpp
@@ -35,20 +35,20 @@ namespace boost { namespace phoenix
typedef Map map_type;
scoped_environment(
- Env const & env
- , OuterEnv const &outer_env
- , Locals const &locals
+ Env const & env_
+ , OuterEnv const &outer_env_
+ , Locals const &locals_
)
- : env(env)
- , outer_env(outer_env)
- , locals(locals)
+ : env(env_)
+ , outer_env(outer_env_)
+ , locals(locals_)
{}
- scoped_environment(scoped_environment const & o)
- : env(o.env)
+ scoped_environment(scoped_environment const & o)
+ : env(o.env)
, outer_env(o.outer_env)
- , locals(o.locals)
- {};
+ , locals(o.locals)
+ {};
Env const & env;
OuterEnv const & outer_env;
diff --git a/3party/boost/boost/phoenix/scope/this.hpp b/3party/boost/boost/phoenix/scope/this.hpp
index de50e80862..ebc08889b8 100644
--- a/3party/boost/boost/phoenix/scope/this.hpp
+++ b/3party/boost/boost/phoenix/scope/this.hpp
@@ -62,56 +62,56 @@ namespace boost { namespace phoenix {
template <typename This, typename A0, typename Context>
struct result<This(A0, Context)>
{
- typedef
- typename proto::detail::uncvref<
- typename result_of::env<
- Context
- >::type
- >::type
- outer_env_type;
-
- typedef
- typename remove_pointer<
- typename remove_reference<
- typename fusion::result_of::at_c<
- outer_env_type
- , 0
- >::type
- >::type
- >::type
- actor_type;
-
- typedef
- typename result_of::eval<
- A0 const &
- , Context const &
- >::type
- a0_type;
-
- typedef
- vector2<actor_type const *, a0_type>
- inner_env_type;
-
- typedef
- scoped_environment<
- inner_env_type
- , outer_env_type
- , vector0<>
- , detail::map_local_index_to_tuple<>
- >
- env_type;
-
- typedef
- typename result_of::eval<
- actor_type const &
- , typename result_of::context<
- inner_env_type
- , typename result_of::actions<
- Context
- >::type
- >::type
- >::type
- type;
+ typedef
+ typename proto::detail::uncvref<
+ typename result_of::env<
+ Context
+ >::type
+ >::type
+ outer_env_type;
+
+ typedef
+ typename remove_pointer<
+ typename remove_reference<
+ typename fusion::result_of::at_c<
+ outer_env_type
+ , 0
+ >::type
+ >::type
+ >::type
+ actor_type;
+
+ typedef
+ typename result_of::eval<
+ A0 const &
+ , Context const &
+ >::type
+ a0_type;
+
+ typedef
+ vector2<actor_type const *, a0_type>
+ inner_env_type;
+
+ typedef
+ scoped_environment<
+ inner_env_type
+ , outer_env_type
+ , vector0<>
+ , detail::map_local_index_to_tuple<>
+ >
+ env_type;
+
+ typedef
+ typename result_of::eval<
+ actor_type const &
+ , typename result_of::context<
+ inner_env_type
+ , typename result_of::actions<
+ Context
+ >::type
+ >::type
+ >::type
+ type;
};
template <typename A0, typename Context>
@@ -121,50 +121,50 @@ namespace boost { namespace phoenix {
//std::cout << typeid(checker).name() << "\n";
//std::cout << typeid(checker).name() << "\n";
- typedef
- typename proto::detail::uncvref<
- typename result_of::env<
- Context
- >::type
- >::type
- outer_env_type;
-
- typedef
- typename remove_pointer<
- typename remove_reference<
- typename fusion::result_of::at_c<
- outer_env_type
- , 0
- >::type
- >::type
- >::type
- actor_type;
-
- typedef
- typename result_of::eval<
- A0 const &
- , Context const &
- >::type
- a0_type;
-
- typedef
- vector2<actor_type const *, a0_type>
- inner_env_type;
-
- typedef
- scoped_environment<
- inner_env_type
- , outer_env_type
- , vector0<>
- , detail::map_local_index_to_tuple<>
- >
- env_type;
-
- inner_env_type inner_env = {fusion::at_c<0>(phoenix::env(ctx)), phoenix::eval(a0, ctx)};
- vector0<> locals;
- env_type env(inner_env, phoenix::env(ctx), locals);
-
- return phoenix::eval(*fusion::at_c<0>(phoenix::env(ctx)), phoenix::context(inner_env, phoenix::actions(ctx)));
+ typedef
+ typename proto::detail::uncvref<
+ typename result_of::env<
+ Context
+ >::type
+ >::type
+ outer_env_type;
+
+ typedef
+ typename remove_pointer<
+ typename remove_reference<
+ typename fusion::result_of::at_c<
+ outer_env_type
+ , 0
+ >::type
+ >::type
+ >::type
+ actor_type;
+
+ typedef
+ typename result_of::eval<
+ A0 const &
+ , Context const &
+ >::type
+ a0_type;
+
+ typedef
+ vector2<actor_type const *, a0_type>
+ inner_env_type;
+
+ typedef
+ scoped_environment<
+ inner_env_type
+ , outer_env_type
+ , vector0<>
+ , detail::map_local_index_to_tuple<>
+ >
+ env_type;
+
+ inner_env_type inner_env = {fusion::at_c<0>(phoenix::env(ctx)), phoenix::eval(a0, ctx)};
+ vector0<> locals;
+ env_type env(inner_env, phoenix::env(ctx), locals);
+
+ return phoenix::eval(*fusion::at_c<0>(phoenix::env(ctx)), phoenix::context(inner_env, phoenix::actions(ctx)));
//return (*fusion::at_c<0>(phoenix::env(ctx)))(eval(a0, ctx));
}
};
@@ -174,17 +174,17 @@ namespace boost { namespace phoenix {
: call<this_eval>
{};
- template <typename Dummy>
+ template <typename Dummy>
struct is_nullary::when<rule::this_, Dummy>
: proto::make<mpl::false_()>
{};
- template <typename A0>
- typename expression::this_<A0>::type const
- this_(A0 const & a0)
- {
- return expression::this_<A0>::make(a0);
- }
+ template <typename A0>
+ typename expression::this_<A0>::type const
+ this_(A0 const & a0)
+ {
+ return expression::this_<A0>::make(a0);
+ }
}}
diff --git a/3party/boost/boost/phoenix/statement.hpp b/3party/boost/boost/phoenix/statement.hpp
index 23c04add0c..fc7837904e 100644
--- a/3party/boost/boost/phoenix/statement.hpp
+++ b/3party/boost/boost/phoenix/statement.hpp
@@ -7,9 +7,6 @@
#ifndef BOOST_PHOENIX_STATEMENT_HPP
#define BOOST_PHOENIX_STATEMENT_HPP
-#ifdef BOOST_PHOENIX_USE_V2_OVER_V3
-#include <boost/spirit/home/phoenix/statement.hpp>
-#else
#include <boost/phoenix/version.hpp>
#include <boost/phoenix/statement/do_while.hpp>
#include <boost/phoenix/statement/for.hpp>
@@ -19,6 +16,5 @@
#include <boost/phoenix/statement/throw.hpp>
#include <boost/phoenix/statement/try_catch.hpp>
#include <boost/phoenix/statement/while.hpp>
-#endif
#endif
diff --git a/3party/boost/boost/phoenix/statement/do_while.hpp b/3party/boost/boost/phoenix/statement/do_while.hpp
index d9b5361451..9c155c6ad6 100644
--- a/3party/boost/boost/phoenix/statement/do_while.hpp
+++ b/3party/boost/boost/phoenix/statement/do_while.hpp
@@ -27,10 +27,10 @@ namespace boost { namespace phoenix
template <typename Cond, typename Do, typename Context>
result_type
- operator()(Cond const& cond, Do const& do_, Context const & ctx) const
+ operator()(Cond const& cond, Do const& do_it, Context const & ctx) const
{
do
- boost::phoenix::eval(do_, ctx);
+ boost::phoenix::eval(do_it, ctx);
while (boost::phoenix::eval(cond, ctx));
}
};
@@ -43,8 +43,8 @@ namespace boost { namespace phoenix
template <typename Do>
struct do_while_gen
{
- do_while_gen(Do const& do_)
- : do_(do_) {}
+ do_while_gen(Do const& do_it)
+ : do_(do_it) {}
template <typename Cond>
typename expression::do_while<Cond, Do>::type const
diff --git a/3party/boost/boost/phoenix/statement/for.hpp b/3party/boost/boost/phoenix/statement/for.hpp
index e98a1dc69d..70768e81df 100644
--- a/3party/boost/boost/phoenix/statement/for.hpp
+++ b/3party/boost/boost/phoenix/statement/for.hpp
@@ -39,12 +39,12 @@ namespace boost { namespace phoenix
Init const& init
, Cond const& cond
, Step const& step
- , Do const& do_
+ , Do const& do_it
, Context const & ctx
) const
{
for(boost::phoenix::eval(init, ctx); boost::phoenix::eval(cond, ctx); boost::phoenix::eval(step, ctx))
- boost::phoenix::eval(do_, ctx);
+ boost::phoenix::eval(do_it, ctx);
}
};
@@ -56,17 +56,17 @@ namespace boost { namespace phoenix
template <typename Init, typename Cond, typename Step>
struct for_gen
{
- for_gen(Init const& init, Cond const& cond, Step const& step)
- : init(init), cond(cond), step(step) {}
+ for_gen(Init const& init_, Cond const& cond_, Step const& step_)
+ : init(init_), cond(cond_), step(step_) {}
template <typename Do>
typename expression::for_<Init, Cond, Step, Do>::type const
- operator[](Do const& do_) const
+ operator[](Do const& do_it) const
{
return
expression::
for_<Init, Cond, Step, Do>::
- make(init, cond, step, do_);
+ make(init, cond, step, do_it);
}
Init init;
diff --git a/3party/boost/boost/phoenix/statement/if.hpp b/3party/boost/boost/phoenix/statement/if.hpp
index e9e9334db8..41badc9962 100644
--- a/3party/boost/boost/phoenix/statement/if.hpp
+++ b/3party/boost/boost/phoenix/statement/if.hpp
@@ -93,9 +93,9 @@ namespace boost { namespace phoenix
template<typename Cond, typename Then>
struct else_gen
{
- else_gen(Cond const & cond, Then const & then)
- : cond(cond)
- , then(then) {}
+ else_gen(Cond const & cond_, Then const & then_)
+ : cond(cond_)
+ , then(then_) {}
template<typename Else>
typename expression::if_else_statement<Cond, Then, Else>::type const
@@ -135,8 +135,8 @@ namespace boost { namespace phoenix
template<typename Cond>
struct if_gen
{
- if_gen(Cond const & cond)
- : cond(cond) {}
+ if_gen(Cond const & cond_)
+ : cond(cond_) {}
template<typename Then>
typename expression::if_<Cond, Then>::type const
diff --git a/3party/boost/boost/phoenix/statement/sequence.hpp b/3party/boost/boost/phoenix/statement/sequence.hpp
index 965d9d3831..56364aeed5 100644
--- a/3party/boost/boost/phoenix/statement/sequence.hpp
+++ b/3party/boost/boost/phoenix/statement/sequence.hpp
@@ -13,6 +13,7 @@
#include <boost/phoenix/core/limits.hpp>
#include <boost/phoenix/core/expression.hpp>
#include <boost/phoenix/core/meta_grammar.hpp>
+#include <boost/proto/operators.hpp> // Included to solve #5715
namespace boost { namespace phoenix
{
diff --git a/3party/boost/boost/phoenix/statement/switch.hpp b/3party/boost/boost/phoenix/statement/switch.hpp
index d101c03c6f..20a53e7422 100644
--- a/3party/boost/boost/phoenix/statement/switch.hpp
+++ b/3party/boost/boost/phoenix/statement/switch.hpp
@@ -238,7 +238,7 @@ namespace boost { namespace phoenix {
template <typename Cond>
struct switch_gen
{
- switch_gen(Cond const& cond) : cond(cond) {}
+ switch_gen(Cond const& cond_) : cond(cond_) {}
template <typename Cases>
typename expression::switch_<
diff --git a/3party/boost/boost/phoenix/statement/throw.hpp b/3party/boost/boost/phoenix/statement/throw.hpp
index 373a09bf0a..0938b8ed6b 100644
--- a/3party/boost/boost/phoenix/statement/throw.hpp
+++ b/3party/boost/boost/phoenix/statement/throw.hpp
@@ -90,6 +90,9 @@ namespace boost { namespace phoenix
struct custom_terminal<detail::rethrow, Dummy>
{
typedef void result_type;
+ //#ifndef BOOST_PHOENIX_NO_SPECIALIZE_CUSTOM_TERMINAL
+ typedef void _is_throw_custom_terminal; // fix for #7730
+ //#endif
template <typename Context>
void operator()(detail::rethrow, Context &) const
diff --git a/3party/boost/boost/phoenix/statement/try_catch.hpp b/3party/boost/boost/phoenix/statement/try_catch.hpp
index d3e40cf524..a7ea8bf4b3 100644
--- a/3party/boost/boost/phoenix/statement/try_catch.hpp
+++ b/3party/boost/boost/phoenix/statement/try_catch.hpp
@@ -274,7 +274,7 @@ namespace boost { namespace phoenix
template <typename TryCatch, typename Exception>
struct catch_gen
{
- catch_gen(TryCatch const& try_catch) : try_catch(try_catch) {}
+ catch_gen(TryCatch const& try_catch_) : try_catch(try_catch_) {}
template <typename Expr>
typename boost::disable_if<
@@ -301,7 +301,7 @@ namespace boost { namespace phoenix
template <typename TryCatch>
struct catch_all_gen
{
- catch_all_gen(TryCatch const& try_catch) : try_catch(try_catch) {}
+ catch_all_gen(TryCatch const& try_catch_) : try_catch(try_catch_) {}
template <typename Expr>
typename boost::disable_if<
diff --git a/3party/boost/boost/phoenix/statement/while.hpp b/3party/boost/boost/phoenix/statement/while.hpp
index d9294e033a..0dee9327aa 100644
--- a/3party/boost/boost/phoenix/statement/while.hpp
+++ b/3party/boost/boost/phoenix/statement/while.hpp
@@ -27,11 +27,11 @@ namespace boost { namespace phoenix
template <typename Cond, typename Do, typename Context>
result_type
- operator()(Cond const& cond, Do const& do_, Context const & ctx) const
+ operator()(Cond const& cond, Do const& do_it, Context const & ctx) const
{
while(boost::phoenix::eval(cond, ctx))
{
- boost::phoenix::eval(do_, ctx);
+ boost::phoenix::eval(do_it, ctx);
}
}
};
@@ -44,13 +44,13 @@ namespace boost { namespace phoenix
template <typename Cond>
struct while_gen
{
- while_gen(Cond const& cond) : cond(cond) {}
+ while_gen(Cond const& cond_) : cond(cond_) {}
template <typename Do>
typename expression::while_<Cond, Do>::type const
- operator[](Do const& do_) const
+ operator[](Do const& do_it) const
{
- return expression::while_<Cond, Do>::make(cond, do_);
+ return expression::while_<Cond, Do>::make(cond, do_it);
}
Cond const& cond;
diff --git a/3party/boost/boost/phoenix/stl.hpp b/3party/boost/boost/phoenix/stl.hpp
index 834c129ddf..c1013bc97b 100644
--- a/3party/boost/boost/phoenix/stl.hpp
+++ b/3party/boost/boost/phoenix/stl.hpp
@@ -9,11 +9,7 @@
#ifndef BOOST_PHOENIX_STL_HPP
#define BOOST_PHOENIX_STL_HPP
-#ifdef BOOST_PHOENIX_USE_V2
-#include <boost/spirit/home/phoenix/stl.hpp>
-#else
#include <boost/phoenix/stl/algorithm.hpp>
#include <boost/phoenix/stl/container.hpp>
-#endif
#endif
diff --git a/3party/boost/boost/phoenix/stl/algorithm/detail/has_equal_range.hpp b/3party/boost/boost/phoenix/stl/algorithm/detail/has_equal_range.hpp
index b18067a462..e0144e965f 100644
--- a/3party/boost/boost/phoenix/stl/algorithm/detail/has_equal_range.hpp
+++ b/3party/boost/boost/phoenix/stl/algorithm/detail/has_equal_range.hpp
@@ -12,7 +12,7 @@
//
/////////////////////////////////////////////////////////////////////////////
-#if defined(_MSC_VER) && _MSC_VER >= 1000
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp b/3party/boost/boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp
index eca0eb10f4..da6baa0243 100644
--- a/3party/boost/boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp
+++ b/3party/boost/boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp
@@ -12,7 +12,7 @@
//
/////////////////////////////////////////////////////////////////////////////
-#if defined(_MSC_VER) && _MSC_VER >= 1000
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/phoenix/stl/algorithm/detail/has_remove_if.hpp b/3party/boost/boost/phoenix/stl/algorithm/detail/has_remove_if.hpp
index e8f311f2d2..22a008763b 100644
--- a/3party/boost/boost/phoenix/stl/algorithm/detail/has_remove_if.hpp
+++ b/3party/boost/boost/phoenix/stl/algorithm/detail/has_remove_if.hpp
@@ -12,7 +12,7 @@
//
/////////////////////////////////////////////////////////////////////////////
-#if defined(_MSC_VER) && _MSC_VER >= 1000
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/phoenix/stl/algorithm/detail/has_reverse.hpp b/3party/boost/boost/phoenix/stl/algorithm/detail/has_reverse.hpp
index 2cb425ec37..f514fcf863 100644
--- a/3party/boost/boost/phoenix/stl/algorithm/detail/has_reverse.hpp
+++ b/3party/boost/boost/phoenix/stl/algorithm/detail/has_reverse.hpp
@@ -12,7 +12,7 @@
//
/////////////////////////////////////////////////////////////////////////////
-#if defined(_MSC_VER) && _MSC_VER >= 1000
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/phoenix/stl/algorithm/detail/has_unique.hpp b/3party/boost/boost/phoenix/stl/algorithm/detail/has_unique.hpp
index 5f1b547f7b..a5b12c4acc 100644
--- a/3party/boost/boost/phoenix/stl/algorithm/detail/has_unique.hpp
+++ b/3party/boost/boost/phoenix/stl/algorithm/detail/has_unique.hpp
@@ -12,7 +12,7 @@
//
/////////////////////////////////////////////////////////////////////////////
-#if defined(_MSC_VER) && _MSC_VER >= 1000
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/phoenix/stl/algorithm/detail/is_std_set.hpp b/3party/boost/boost/phoenix/stl/algorithm/detail/is_std_set.hpp
index 52c87e93b5..e44a04765f 100644
--- a/3party/boost/boost/phoenix/stl/algorithm/detail/is_std_set.hpp
+++ b/3party/boost/boost/phoenix/stl/algorithm/detail/is_std_set.hpp
@@ -12,7 +12,7 @@
//
/////////////////////////////////////////////////////////////////////////////
-#if defined(_MSC_VER) && _MSC_VER >= 1000
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp b/3party/boost/boost/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp
index d78c6b7019..93131f06fe 100644
--- a/3party/boost/boost/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp
+++ b/3party/boost/boost/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp
@@ -12,7 +12,7 @@
//
/////////////////////////////////////////////////////////////////////////////
-#if defined(_MSC_VER) && _MSC_VER >= 1000
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/phoenix/stl/cmath.hpp b/3party/boost/boost/phoenix/stl/cmath.hpp
index 488ac2caed..b7e72e583c 100644
--- a/3party/boost/boost/phoenix/stl/cmath.hpp
+++ b/3party/boost/boost/phoenix/stl/cmath.hpp
@@ -16,6 +16,7 @@
namespace boost {
+#ifdef BOOST_NO_CXX11_DECLTYPE
#define BOOST_PHOENIX_MATH_FUNCTION(name, n) \
namespace phoenix_impl { \
struct name ## _impl { \
@@ -36,8 +37,32 @@ namespace boost {
}; \
} \
namespace phoenix { \
- BOOST_PHOENIX_ADAPT_CALLABLE(name, phoenix_impl::name ## _impl, 1) \
+ BOOST_PHOENIX_ADAPT_CALLABLE(name, phoenix_impl::name ## _impl, n) \
}
+#else
+#define BOOST_PHOENIX_MATH_FUNCTION(name, n) \
+ namespace phoenix_impl { \
+ struct name ## _impl { \
+ template<class Sig> \
+ struct result; \
+ template<class This, BOOST_PHOENIX_typename_A(n)> \
+ struct result<This(BOOST_PHOENIX_A(n))> \
+ { \
+ typedef \
+ decltype( name(typename proto::detail::uncvref<A0>::type()) ) \
+ type; \
+ }; \
+ template<BOOST_PHOENIX_typename_A(n)> \
+ auto operator()(BOOST_PHOENIX_A_const_ref_a(n)) const -> decltype( name(BOOST_PHOENIX_a(n)) ) { \
+ using namespace std; \
+ return name(BOOST_PHOENIX_a(n)); \
+ } \
+ }; \
+ } \
+ namespace phoenix { \
+ BOOST_PHOENIX_ADAPT_CALLABLE(name, phoenix_impl::name ## _impl, n) \
+ }
+#endif
BOOST_PHOENIX_MATH_FUNCTION(acos, 1)
BOOST_PHOENIX_MATH_FUNCTION(asin, 1)
diff --git a/3party/boost/boost/phoenix/support/vector.hpp b/3party/boost/boost/phoenix/support/vector.hpp
index 82ec6afa44..6899d85527 100644
--- a/3party/boost/boost/phoenix/support/vector.hpp
+++ b/3party/boost/boost/phoenix/support/vector.hpp
@@ -1,3 +1,9 @@
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable: 4512) // assignment operator could not be generated
+#pragma warning(disable: 4510) // default constructor could not be generated
+#pragma warning(disable: 4610) // can never be instantiated - user defined constructor required
+#endif
#if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
#ifndef BOOST_PHOENIX_SUPPORT_VECTOR_HPP
@@ -132,3 +138,7 @@ BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
#endif
#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
diff --git a/3party/boost/boost/phoenix/version.hpp b/3party/boost/boost/phoenix/version.hpp
index 9b3fd04047..41166f5a4a 100644
--- a/3party/boost/boost/phoenix/version.hpp
+++ b/3party/boost/boost/phoenix/version.hpp
@@ -1,8 +1,9 @@
/*=============================================================================
Copyright (c) 2005-2008 Hartmut Kaiser
Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2014 John Fletcher
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_PHOENIX_VERSION_HPP
@@ -13,6 +14,19 @@
// This is the version of the library
//
///////////////////////////////////////////////////////////////////////////////
-#define BOOST_PHOENIX_VERSION 0x3000 // 3.0.0
+#define BOOST_PHOENIX_VERSION 0x3006 // 3.0.6
+
+// boost/predef is not in Boost before 1.55.0
+#include <boost/version.hpp>
+#if BOOST_VERSION >= 105500
+// Also note that it has a nonstandard header which could change,
+// so I have not relied on its own internal define.
+#include <boost/predef.h>
+#define BOOST_PHOENIX_HAVE_BOOST_PREDEF
+#endif
+
+#ifdef BOOST_PHOENIX_HAVE_BOOST_PREDEF
+#define BOOST_PHOENIX_VERSION_NUMBER = BOOST_VERSION_NUMBER(3,0,6)
+#endif
#endif
diff --git a/3party/boost/boost/pointee.hpp b/3party/boost/boost/pointee.hpp
index 9794b8e7db..9794b8e7db 100644..100755
--- a/3party/boost/boost/pointee.hpp
+++ b/3party/boost/boost/pointee.hpp
diff --git a/3party/boost/boost/polygon/detail/polygon_45_touch.hpp b/3party/boost/boost/polygon/detail/polygon_45_touch.hpp
index 5da606b325..90717e1cca 100644
--- a/3party/boost/boost/polygon/detail/polygon_45_touch.hpp
+++ b/3party/boost/boost/polygon/detail/polygon_45_touch.hpp
@@ -64,7 +64,9 @@ namespace boost { namespace polygon{
//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) {
- std::vector<std::pair<int, int> >::iterator itr = lower_bound(counts.begin(), counts.end(), std::make_pair(index, int(0)));
+ std::vector<std::pair<int, int> >::iterator itr =
+ std::lower_bound(counts.begin(), counts.end(),
+ std::make_pair(index, int(0)));
if(itr != counts.end() && itr->first == index) {
return itr->second;
}
diff --git a/3party/boost/boost/polygon/detail/polygon_arbitrary_formation.hpp b/3party/boost/boost/polygon/detail/polygon_arbitrary_formation.hpp
index e1acdbb1d5..6f9eb7394f 100644
--- a/3party/boost/boost/polygon/detail/polygon_arbitrary_formation.hpp
+++ b/3party/boost/boost/polygon/detail/polygon_arbitrary_formation.hpp
@@ -1124,7 +1124,6 @@ namespace boost { namespace polygon{
//std::cout << poly << "\n";
//std::cout << "test3\n";
typedef typename cT::value_type result_type;
- typedef typename geometry_concept<result_type>::type result_concept;
output.push_back(result_type());
assign(output.back(), polyData);
//std::cout << "test4\n";
@@ -2630,7 +2629,7 @@ namespace boost { namespace polygon{
template <class cT, class iT>
inline iT processEvent_(cT& output, iT inputBegin, iT inputEnd) {
- typedef typename high_precision_type<Unit>::type high_precision;
+ //typedef typename high_precision_type<Unit>::type high_precision;
//std::cout << "processEvent_\n";
polygon_arbitrary_formation<Unit>::justBefore_ = true;
//collect up all elements from the tree that are at the y
diff --git a/3party/boost/boost/polygon/detail/polygon_formation.hpp b/3party/boost/boost/polygon/detail/polygon_formation.hpp
index a9490cec6d..be2f54351d 100644
--- a/3party/boost/boost/polygon/detail/polygon_formation.hpp
+++ b/3party/boost/boost/polygon/detail/polygon_formation.hpp
@@ -1,10 +1,12 @@
/*
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).
*/
+#include<iostream>
+#include<cassert>
#ifndef BOOST_POLYGON_POLYGON_FORMATION_HPP
#define BOOST_POLYGON_POLYGON_FORMATION_HPP
namespace boost { namespace polygon{
@@ -25,24 +27,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,14 +61,14 @@ 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<Unit> ptdata_;
-
+
/*
* head and tail points to other polylines before and after this in a chain
*/
@@ -87,18 +89,18 @@ namespace polygon_formation {
* 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 +120,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 +159,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 +179,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 +301,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,11 +316,25 @@ namespace polygon_formation {
class ActiveTail {
private:
//data
- PolyLine<Unit>* tailp_;
+ PolyLine<Unit>* tailp_;
ActiveTail *otherTailp_;
std::list<ActiveTail*> holesList_;
+ //Sum of all the polylines which constitute the active tail (including holes)//
+ size_t polyLineSize_;
public:
+ inline size_t getPolyLineSize(){
+ return polyLineSize_;
+ }
+
+ inline void setPolyLineSize(int delta){
+ polyLineSize_ = delta;
+ }
+
+ inline void addPolyLineSize(int delta){
+ polyLineSize_ += delta;
+ }
+
/*
* iterator over coordinates of the figure
*/
@@ -331,7 +347,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
@@ -343,7 +359,10 @@ namespace polygon_formation {
//now we have the right winding direction
//if it is horizontal we need to skip the first element
pLine_ = at->getTail();
- index_ = at->getTail()->numSegments() - 1;
+
+ if(at->getTail()->numSegments() > 0)
+ index_ = at->getTail()->numSegments() - 1;
+
if((at->getOrient() == HORIZONTAL) ^ (orient == HORIZONTAL)) {
pLineEnd_ = at->getTail();
indexEnd_ = pLineEnd_->numSegments() - 1;
@@ -358,10 +377,27 @@ namespace polygon_formation {
} else { --index_; }
} else {
pLineEnd_ = at->getOtherActiveTail()->getTail();
+ if(pLineEnd_->numSegments() > 0)
indexEnd_ = pLineEnd_->numSegments() - 1;
}
at->getTail()->joinTailToTail(*(at->getOtherActiveTail()->getTail()));
}
+
+ inline size_t size(void){
+ size_t count = 0;
+ End dir = startEnd_;
+ PolyLine<Unit> const * currLine = pLine_;
+ size_t ops = 0;
+ while(currLine != pLineEnd_){
+ ops++;
+ count += currLine->numSegments();
+ currLine = currLine->next(dir == HEAD ? TAIL : HEAD);
+ dir = currLine->endConnectivity(dir == HEAD ? TAIL : HEAD);
+ }
+ count += pLineEnd_->numSegments();
+ return count; //no. of vertices
+ }
+
//use bitwise copy and assign provided by the compiler
inline iterator& operator++() {
if(pLine_ == pLineEnd_ && index_ == indexEnd_) {
@@ -560,7 +596,7 @@ namespace polygon_formation {
/* deallocate an activetail object */
template <typename Unit>
void destroyActiveTail(ActiveTail<Unit>* aTail);
-
+
template<bool orientT, typename Unit>
class PolyLineHoleData {
private:
@@ -576,7 +612,9 @@ namespace polygon_formation {
inline compact_iterator_type end_compact() const { return p_->end(); }
inline iterator_type begin() const { return iterator_type(begin_compact(), end_compact()); }
inline iterator_type end() const { return iterator_type(end_compact(), end_compact()); }
- inline std::size_t size() const { return 0; }
+ inline std::size_t size() const {
+ return p_->getPolyLineSize();
+ }
inline ActiveTail<Unit>* yield() { return p_; }
template<class iT>
inline PolyLineHoleData& set(iT inputBegin, iT inputEnd) {
@@ -586,7 +624,7 @@ namespace polygon_formation {
inline PolyLineHoleData& set_compact(iT inputBegin, iT inputEnd) {
return *this;
}
-
+
};
template<bool orientT, typename Unit>
@@ -646,7 +684,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<class iT>
@@ -679,18 +717,83 @@ namespace polygon_formation {
std::vector<PolyLinePolygonData> outputPolygons_;
bool fractureHoles_;
public:
- typedef typename std::vector<PolyLinePolygonData>::iterator iterator;
+ typedef typename std::vector<PolyLinePolygonData>::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<interval_data<Unit> >& leftEdges,
- std::vector<interval_data<Unit> >& rightEdges);
-
+ void processEdges(iterator& beginOutput, iterator& endOutput,
+ Unit currentX, std::vector<interval_data<Unit> >& leftEdges,
+ std::vector<interval_data<Unit> >& rightEdges,
+ size_t vertexThreshold=(std::numeric_limits<size_t>::max)() );
+
+ /**********************************************************************
+ *methods implementing new polygon formation code
+ *
+ **********************************************************************/
+ void updatePartialSimplePolygonsWithRightEdges(Unit currentX,
+ const std::vector<interval_data<Unit> >& leftEdges, size_t threshold);
+
+ void updatePartialSimplePolygonsWithLeftEdges(Unit currentX,
+ const std::vector<interval_data<Unit> >& leftEdges, size_t threshold);
+
+ void closePartialSimplePolygon(Unit, ActiveTail<Unit>*, ActiveTail<Unit>*);
+
+ void maintainPartialSimplePolygonInvariant(iterator& ,iterator& ,Unit,
+ const std::vector<interval_data<Unit> >&,
+ const std::vector<interval_data<Unit> >&,
+ size_t vertexThreshold=(std::numeric_limits<size_t>::max)());
+
+ void insertNewLeftEdgeIntoTailMap(Unit, Unit, Unit,
+ typename std::map<Unit, ActiveTail<Unit>*>::iterator &);
+ /**********************************************************************/
+
+ inline size_t getTailMapSize(){
+ typename std::map<Unit, ActiveTail<Unit>* >::const_iterator itr;
+ size_t tsize = 0;
+ for(itr=tailMap_.begin(); itr!=tailMap_.end(); ++itr){
+ tsize += (itr->second)->getPolyLineSize();
+ }
+ return tsize;
+ }
+ /*print the active tails in this map:*/
+ inline void print(){
+ typename std::map<Unit, ActiveTail<Unit>* >::const_iterator itr;
+ printf("=========TailMap[%lu]=========\n", tailMap_.size());
+ for(itr=tailMap_.begin(); itr!=tailMap_.end(); ++itr){
+ std::cout<< "[" << itr->first << "] : " << std::endl;
+ //print active tail//
+ ActiveTail<Unit> const *t = (itr->second);
+ PolyLine<Unit> const *pBegin = t->getTail();
+ PolyLine<Unit> const *pEnd = t->getOtherActiveTail()->getTail();
+ std::string sorient = pBegin->solidToRight() ? "RIGHT" : "LEFT";
+ std::cout<< " ActiveTail.tailp_ (solid= " << sorient ;
+ End dir = TAIL;
+ while(pBegin!=pEnd){
+ std::cout << pBegin << "={ ";
+ for(size_t i=0; i<pBegin->numSegments(); i++){
+ point_data<Unit> u = pBegin->getPoint(i);
+ std::cout << "(" << u.x() << "," << u.y() << ") ";
+ }
+ std::cout << "} ";
+ pBegin = pBegin->next(dir == HEAD ? TAIL : HEAD);
+ dir = pBegin->endConnectivity(dir == HEAD ? TAIL : HEAD);
+ }
+ if(pEnd){
+ std::cout << pEnd << "={ ";
+ for(size_t i=0; i<pEnd->numSegments(); i++){
+ point_data<Unit> u = pEnd->getPoint(i);
+ std::cout << "(" << u.x() << "," << u.y() << ") ";
+ }
+ std::cout << "} ";
+ }
+ std::cout << " end= " << pEnd << std::endl;
+ }
+ }
+
private:
void clearOutput_();
};
@@ -706,9 +809,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<Unit>& outBufferTmp, Unit currentX, std::vector<interval_data<Unit> >& leftEdges,
+// inline void processEdges(std::vector<Unit>& outBufferTmp, Unit currentX, std::vector<interval_data<Unit> >& leftEdges,
// std::vector<interval_data<Unit> >& rightEdges) {
// typename ScanLineToPolygonItrs<true, Unit>::iterator itr, endItr;
// scanline_.processEdges(itr, endItr, currentX, leftEdges, rightEdges);
@@ -754,12 +857,12 @@ namespace polygon_formation {
//constructor
template <typename Unit>
- inline PolyLine<Unit>::PolyLine(orientation_2d orient, Unit coord, Side side) :
+ inline PolyLine<Unit>::PolyLine(orientation_2d orient, Unit coord, Side side) :
ptdata_(1, coord),
headp_(0),
tailp_(0),
state_(orient.to_int() +
- (side << 3)) {}
+ (side << 3)){}
//copy constructor
template <typename Unit>
@@ -796,7 +899,7 @@ namespace polygon_formation {
//valid PolyLine
template <typename Unit>
- inline bool PolyLine<Unit>::isValid() const {
+ inline bool PolyLine<Unit>::isValid() const {
return state_ > -1; }
//first coordinate is an X value
@@ -818,7 +921,7 @@ namespace polygon_formation {
inline bool PolyLine<Unit>::verticalTail() const {
return to_bool(verticalHead() ^ oddLength());
}
-
+
template <typename Unit>
inline orientation_2d PolyLine<Unit>::tailOrient() const {
return (verticalTail() ? VERTICAL : HORIZONTAL);
@@ -850,16 +953,16 @@ namespace polygon_formation {
inline bool PolyLine<Unit>::tailToHead() const {
return to_bool(!tailToTail());
}
-
+
template <typename Unit>
inline bool PolyLine<Unit>::tailToTail() const {
return to_bool(state_ & TAIL_TO_TAIL);
}
template <typename Unit>
- inline Side PolyLine<Unit>::solidSide() const {
+ inline Side PolyLine<Unit>::solidSide() const {
return solidToRight(); }
-
+
template <typename Unit>
inline bool PolyLine<Unit>::solidToRight() const {
return to_bool(state_ & SOLID_TO_RIGHT) != 0;
@@ -884,12 +987,14 @@ namespace polygon_formation {
template <typename Unit>
inline PolyLine<Unit>& PolyLine<Unit>::pushPoint(const point_data<Unit>& point) {
- point_data<Unit> endPt = getEndPoint();
- //vertical is true, horizontal is false
- if((tailOrient().to_int() ? point.get(VERTICAL) == endPt.get(VERTICAL) : point.get(HORIZONTAL) == endPt.get(HORIZONTAL))) {
- //we were pushing a colinear segment
- return popCoordinate();
- }
+ if(numSegments()){
+ point_data<Unit> endPt = getEndPoint();
+ //vertical is true, horizontal is false
+ if((tailOrient().to_int() ? point.get(VERTICAL) == endPt.get(VERTICAL) : point.get(HORIZONTAL) == endPt.get(HORIZONTAL))) {
+ //we were pushing a colinear segment
+ return popCoordinate();
+ }
+ }
return pushCoordinate(tailOrient().to_int() ? point.get(VERTICAL) : point.get(HORIZONTAL));
}
@@ -1007,28 +1112,31 @@ namespace polygon_formation {
}
template <typename Unit>
- inline ActiveTail<Unit>::ActiveTail() : tailp_(0), otherTailp_(0), holesList_() {}
+ inline ActiveTail<Unit>::ActiveTail() : tailp_(0), otherTailp_(0), holesList_(),
+ polyLineSize_(0) {}
template <typename Unit>
- inline ActiveTail<Unit>::ActiveTail(orientation_2d orient, Unit coord, Side solidToRight, ActiveTail* otherTailp) :
- tailp_(0), otherTailp_(0), holesList_() {
+ inline ActiveTail<Unit>::ActiveTail(orientation_2d orient, Unit coord, Side solidToRight, ActiveTail* otherTailp) :
+ tailp_(0), otherTailp_(0), holesList_(), polyLineSize_(0) {
tailp_ = createPolyLine(orient, coord, solidToRight);
otherTailp_ = otherTailp;
+ polyLineSize_ = tailp_->numSegments();
}
template <typename Unit>
- inline ActiveTail<Unit>::ActiveTail(PolyLine<Unit>* active, ActiveTail<Unit>* otherTailp) :
- tailp_(active), otherTailp_(otherTailp), holesList_() {}
+ inline ActiveTail<Unit>::ActiveTail(PolyLine<Unit>* active, ActiveTail<Unit>* otherTailp) :
+ tailp_(active), otherTailp_(otherTailp), holesList_(),
+ polyLineSize_(0) {}
//copy constructor
template <typename Unit>
- inline ActiveTail<Unit>::ActiveTail(const ActiveTail<Unit>& that) : tailp_(that.tailp_), otherTailp_(that.otherTailp_), holesList_() {}
+ inline ActiveTail<Unit>::ActiveTail(const ActiveTail<Unit>& that) : tailp_(that.tailp_), otherTailp_(that.otherTailp_), holesList_(), polyLineSize_(that.polyLineSize_) {}
//destructor
template <typename Unit>
- inline ActiveTail<Unit>::~ActiveTail() {
+ inline ActiveTail<Unit>::~ActiveTail() {
//clear them in case the memory is read later
- tailp_ = 0; otherTailp_ = 0;
+ tailp_ = 0; otherTailp_ = 0;
}
template <typename Unit>
@@ -1036,6 +1144,7 @@ namespace polygon_formation {
//self assignment is safe in this case
tailp_ = that.tailp_;
otherTailp_ = that.otherTailp_;
+ polyLineSize_ = that.polyLineSize_;
return *this;
}
@@ -1050,45 +1159,50 @@ namespace polygon_formation {
}
template <typename Unit>
- inline bool ActiveTail<Unit>::operator<=(const ActiveTail<Unit>& b) const {
+ inline bool ActiveTail<Unit>::operator<=(const ActiveTail<Unit>& b) const {
return !(*this > b); }
-
+
template <typename Unit>
- inline bool ActiveTail<Unit>::operator>(const ActiveTail<Unit>& b) const {
+ inline bool ActiveTail<Unit>::operator>(const ActiveTail<Unit>& b) const {
return b < (*this); }
-
+
template <typename Unit>
- inline bool ActiveTail<Unit>::operator>=(const ActiveTail<Unit>& b) const {
+ inline bool ActiveTail<Unit>::operator>=(const ActiveTail<Unit>& b) const {
return !(*this < b); }
template <typename Unit>
- inline PolyLine<Unit>* ActiveTail<Unit>::getTail() const {
+ inline PolyLine<Unit>* ActiveTail<Unit>::getTail() const {
return tailp_; }
template <typename Unit>
- inline PolyLine<Unit>* ActiveTail<Unit>::getOtherTail() const {
+ inline PolyLine<Unit>* ActiveTail<Unit>::getOtherTail() const {
return otherTailp_->tailp_; }
template <typename Unit>
- inline ActiveTail<Unit>* ActiveTail<Unit>::getOtherActiveTail() const {
+ inline ActiveTail<Unit>* ActiveTail<Unit>::getOtherActiveTail() const {
return otherTailp_; }
template <typename Unit>
inline bool ActiveTail<Unit>::isOtherTail(const ActiveTail<Unit>& 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;
}
template <typename Unit>
inline ActiveTail<Unit>& ActiveTail<Unit>::updateTail(PolyLine<Unit>* newTail) {
+ //subtract the old size and add new size//
+ int delta = newTail->numSegments() - tailp_->numSegments();
+ addPolyLineSize(delta);
+ otherTailp_->addPolyLineSize(delta);
tailp_ = newTail;
return *this;
}
template <typename Unit>
inline ActiveTail<Unit>* ActiveTail<Unit>::addHole(ActiveTail<Unit>* hole, bool fractureHoles) {
+
if(!fractureHoles){
holesList_.push_back(hole);
copyHoles(*hole);
@@ -1100,7 +1214,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,30 +1242,34 @@ namespace polygon_formation {
}
template <typename Unit>
- inline bool ActiveTail<Unit>::solidToRight() const {
+ inline bool ActiveTail<Unit>::solidToRight() const {
return getTail()->solidToRight(); }
template <typename Unit>
- inline Unit ActiveTail<Unit>::getCoord() const {
+ inline Unit ActiveTail<Unit>::getCoord() const {
return getTail()->getEndCoord(); }
-
+
template <typename Unit>
- inline Unit ActiveTail<Unit>::getCoordinate() const {
- return getCoord(); }
+ inline Unit ActiveTail<Unit>::getCoordinate() const {
+ return getCoord(); }
template <typename Unit>
- inline orientation_2d ActiveTail<Unit>::getOrient() const {
+ inline orientation_2d ActiveTail<Unit>::getOrient() const {
return getTail()->tailOrient(); }
template <typename Unit>
- inline void ActiveTail<Unit>::pushCoordinate(Unit coord) {
+ inline void ActiveTail<Unit>::pushCoordinate(Unit coord) {
//appropriately handle any co-linear polyline segments by calling push point internally
point_data<Unit> p;
p.set(HORIZONTAL, coord);
p.set(VERTICAL, coord);
//if we are vertical assign the last coordinate (an X) to p.x, else to p.y
p.set(getOrient().get_perpendicular(), getCoordinate());
+ int oldSegments = tailp_->numSegments();
tailp_->pushPoint(p);
+ int delta = tailp_->numSegments() - oldSegments;
+ addPolyLineSize(delta);
+ otherTailp_->addPolyLineSize(delta);
}
@@ -1241,16 +1359,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<Unit>::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 +1402,7 @@ namespace polygon_formation {
//solid indicates if it was joined by a solit or a space
template <typename Unit>
- inline ActiveTail<Unit>* ActiveTail<Unit>::joinChains(ActiveTail<Unit>* at1, ActiveTail<Unit>* at2, bool solid, std::vector<Unit>& outBufferTmp)
+ inline ActiveTail<Unit>* ActiveTail<Unit>::joinChains(ActiveTail<Unit>* at1, ActiveTail<Unit>* at2, bool solid, std::vector<Unit>& outBufferTmp)
{
//checks to see if we closed a figure
if(at1->isOtherTail(*at2)){
@@ -1324,6 +1442,11 @@ namespace polygon_formation {
at1->getTail()->joinTailToTail(*(at2->getTail()));
*(at1->getOtherActiveTail()) = ActiveTail(at1->getOtherTail(), at2->getOtherActiveTail());
*(at2->getOtherActiveTail()) = ActiveTail(at2->getOtherTail(), at1->getOtherActiveTail());
+
+ int accumulate = at2->getPolyLineSize() + at1->getPolyLineSize();
+ (at1->getOtherActiveTail())->setPolyLineSize(accumulate);
+ (at2->getOtherActiveTail())->setPolyLineSize(accumulate);
+
at1->getOtherActiveTail()->copyHoles(*at1);
at1->getOtherActiveTail()->copyHoles(*at2);
destroyActiveTail(at1);
@@ -1334,7 +1457,7 @@ namespace polygon_formation {
//solid indicates if it was joined by a solit or a space
template <typename Unit>
template <typename PolygonT>
- inline ActiveTail<Unit>* ActiveTail<Unit>::joinChains(ActiveTail<Unit>* at1, ActiveTail<Unit>* at2, bool solid,
+ inline ActiveTail<Unit>* ActiveTail<Unit>::joinChains(ActiveTail<Unit>* at1, ActiveTail<Unit>* at2, bool solid,
std::vector<PolygonT>& outBufferTmp) {
//checks to see if we closed a figure
if(at1->isOtherTail(*at2)){
@@ -1348,7 +1471,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);
@@ -1360,6 +1483,11 @@ namespace polygon_formation {
at1->getTail()->joinTailToTail(*(at2->getTail()));
*(at1->getOtherActiveTail()) = ActiveTail<Unit>(at1->getOtherTail(), at2->getOtherActiveTail());
*(at2->getOtherActiveTail()) = ActiveTail<Unit>(at2->getOtherTail(), at1->getOtherActiveTail());
+
+ int accumulate = at2->getPolyLineSize() + at1->getPolyLineSize();
+ (at1->getOtherActiveTail())->setPolyLineSize(accumulate);
+ (at2->getOtherActiveTail())->setPolyLineSize(accumulate);
+
at1->getOtherActiveTail()->copyHoles(*at1);
at1->getOtherActiveTail()->copyHoles(*at2);
destroyActiveTail(at1);
@@ -1367,8 +1495,8 @@ namespace polygon_formation {
return 0;
}
- template <class TKey, class T> inline typename std::map<TKey, T>::iterator findAtNext(std::map<TKey, T>& theMap,
- typename std::map<TKey, T>::iterator pos, const TKey& key)
+ template <class TKey, class T> inline typename std::map<TKey, T>::iterator findAtNext(std::map<TKey, T>& theMap,
+ typename std::map<TKey, T>::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 +1505,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 +1536,11 @@ namespace polygon_formation {
(*at2) = ActiveTail<Unit>(HORIZONTAL, y, !solid, at1);
//provide a function through activeTail class to provide this
at1->getTail()->joinHeadToHead(*(at2->getTail()));
- if(phole)
+
+ at1->addPolyLineSize(1);
+ at2->addPolyLineSize(1);
+
+ if(phole)
at1->addHole(phole, fractureHoles); //assert fractureHoles == false
return std::pair<ActiveTail<Unit>*, ActiveTail<Unit>*>(at1, at2);
}
@@ -1425,118 +1557,486 @@ namespace polygon_formation {
at1->pushCoordinate(x);
//assert at2 is vertical
at2->pushCoordinate(y);
+
return std::pair<ActiveTail<Unit>*, ActiveTail<Unit>*>(at1, at2);
}
+ /*
+ * |
+ * |
+ * =
+ * |########
+ * |######## (add a new ActiveTail in the tailMap_).
+ * |########
+ * |########
+ * |########
+ * =
+ * |
+ * |
+ *
+ * NOTE: Call this only if you are sure that the $ledege$ is not in the tailMap_
+ */
+ template<bool orientT, typename Unit, typename polygon_concept_type>
+ inline void ScanLineToPolygonItrs<orientT, Unit, polygon_concept_type>::
+ insertNewLeftEdgeIntoTailMap(Unit currentX, Unit yBegin, Unit yEnd,
+ typename std::map<Unit, ActiveTail<Unit> *>::iterator &hint){
+ ActiveTail<Unit> *currentTail = NULL;
+ std::pair<ActiveTail<Unit>*, ActiveTail<Unit>*> tailPair =
+ createActiveTailsAsPair(currentX, yBegin, true, currentTail,
+ fractureHoles_);
+ currentTail = tailPair.first;
+ if(!tailMap_.empty()){
+ ++hint;
+ }
+ hint = tailMap_.insert(hint, std::make_pair(yBegin, tailPair.second));
+ currentTail->pushCoordinate(yEnd); ++hint;
+ hint = tailMap_.insert(hint, std::make_pair(yEnd, currentTail));
+ }
+
+ template<bool orientT, typename Unit, typename polygon_concept_type>
+ inline void ScanLineToPolygonItrs<orientT, Unit, polygon_concept_type>::
+ closePartialSimplePolygon(Unit currentX, ActiveTail<Unit>*pfig,
+ ActiveTail<Unit>*ppfig){
+ pfig->pushCoordinate(currentX);
+ ActiveTail<Unit>::joinChains(pfig, ppfig, false, outputPolygons_);
+ }
+ /*
+ * If the invariant is maintained correctly then left edges can do the
+ * following.
+ *
+ * =###
+ * #######
+ * #######
+ * #######
+ * #######
+ * =###
+ * |### (input left edge)
+ * |###
+ * =###
+ * #######
+ * #######
+ * =###
+ */
+ template<bool orientT, typename Unit, typename polygon_concept_type>
+ inline void ScanLineToPolygonItrs<orientT, Unit, polygon_concept_type>::
+ updatePartialSimplePolygonsWithLeftEdges(Unit currentX,
+ const std::vector<interval_data<Unit> > &leftEdges, size_t vertexThreshold){
+ typename std::map<Unit, ActiveTail<Unit>* >::iterator succ, succ1;
+ typename std::map<Unit, ActiveTail<Unit>* >::iterator pred, pred1, hint;
+ Unit begin, end;
+ ActiveTail<Unit> *pfig, *ppfig;
+ std::pair<ActiveTail<Unit>*, ActiveTail<Unit>*> tailPair;
+ size_t pfig_size = 0;
+
+ hint = tailMap_.begin();
+ for(size_t i=0; i < leftEdges.size(); i++){
+ begin = leftEdges[i].get(LOW); end = leftEdges[i].get(HIGH);
+ succ = findAtNext(tailMap_, hint, begin);
+ pred = findAtNext(tailMap_, hint, end);
+
+ if(succ != tailMap_.end() && pred != tailMap_.end()){ //CASE-1//
+ //join the corresponding active tails//
+ pfig = succ->second; ppfig = pred->second;
+ pfig_size = pfig->getPolyLineSize() + ppfig->getPolyLineSize();
+
+ if(pfig_size >= vertexThreshold){
+ size_t bsize = pfig->getPolyLineSize();
+ size_t usize = ppfig->getPolyLineSize();
+
+ if(usize+2 < vertexThreshold){
+ //cut-off the lower piece (succ1, succ) join (succ1, pred)//
+ succ1 = succ; --succ1;
+ assert((succ1 != tailMap_.end()) &&
+ ((succ->second)->getOtherActiveTail() == succ1->second));
+ closePartialSimplePolygon(currentX, succ1->second, succ->second);
+ tailPair = createActiveTailsAsPair<Unit>(currentX, succ1->first,
+ true, NULL, fractureHoles_);
+
+ //just update the succ1 with new ActiveTail<Unit>*//
+ succ1->second = tailPair.second;
+ ActiveTail<Unit>::joinChains(tailPair.first, pred->second, true,
+ outputPolygons_);
+ }else if(bsize+2 < vertexThreshold){
+ //cut-off the upper piece () join ()//
+ pred1 = pred; ++pred1;
+ assert(pred1 != tailMap_.end() &&
+ ((pred1->second)->getOtherActiveTail() == pred->second));
+ closePartialSimplePolygon(currentX, pred->second, pred1->second);
+
+ //just update the pred1 with ActiveTail<Unit>* = pfig//
+ pred1->second = pfig;
+ pfig->pushCoordinate(currentX);
+ pfig->pushCoordinate(pred1->first);
+ }else{
+ //cut both and create an left edge between (pred->first, succ1)//
+ succ1 = succ; --succ1;
+ pred1 = pred; ++pred1;
+ assert(pred1 != tailMap_.end() && succ1 != tailMap_.end());
+ assert((pred1->second)->getOtherActiveTail() == pred->second);
+ assert((succ1->second)->getOtherActiveTail() == succ->second);
+
+ closePartialSimplePolygon(currentX, succ1->second, succ->second);
+ closePartialSimplePolygon(currentX, pred->second, pred1->second);
+
+ tailPair = createActiveTailsAsPair<Unit>(currentX, succ1->first,
+ true, NULL, fractureHoles_);
+ succ1->second = tailPair.second;
+ pred1->second = tailPair.first;
+ (tailPair.first)->pushCoordinate(pred1->first);
+ }
+ }else{
+ //just join them with closing//
+ pfig->pushCoordinate(currentX);
+ ActiveTail<Unit>::joinChains(pfig, ppfig, true, outputPolygons_);
+ }
+ hint = pred; ++hint;
+ tailMap_.erase(succ); tailMap_.erase(pred);
+ }else if(succ == tailMap_.end() && pred != tailMap_.end()){ //CASE-2//
+ //succ is missing in the map, first insert it into the map//
+ tailPair = createActiveTailsAsPair<Unit>(currentX, begin, true, NULL,
+ fractureHoles_);
+ hint = pred; ++hint;
+ hint = tailMap_.insert(hint, std::make_pair(begin, tailPair.second));
+
+ pfig = pred->second;
+ pfig_size = pfig->getPolyLineSize() + 2;
+ if(pfig_size >= vertexThreshold){
+ //cut-off piece from [pred, pred1] , add [begin, pred1]//
+ pred1 = pred; ++pred1;
+ assert((pred1 != tailMap_.end()) &&
+ ((pred1->second)->getOtherActiveTail() == pred->second));
+ closePartialSimplePolygon(currentX, pred->second, pred1->second);
+
+ //update: we need left edge between (begin, pred1->first)//
+ pred1->second = tailPair.first;
+ (tailPair.first)->pushCoordinate(pred1->first);
+ }else{
+ //just join//
+ ActiveTail<Unit>::joinChains(tailPair.first, pfig,
+ true, outputPolygons_);
+ }
+ tailMap_.erase(pred);
+ }else if(succ != tailMap_.end() && pred == tailMap_.end()){ //CASE-3//
+ //pred is missing in the map, first insert it into the map//
+ hint = succ; ++hint;
+ hint = tailMap_.insert(hint, std::make_pair(end, (ActiveTail<Unit> *) NULL));
+ pfig = succ->second;
+ pfig_size = pfig->getPolyLineSize() + 2;
+ if(pfig_size >= vertexThreshold){
+ //this figure needs cutting here//
+ succ1 = succ; --succ1;
+ assert((succ1 != tailMap_.end()) &&
+ (succ1->second == pfig->getOtherActiveTail()));
+ ppfig = succ1->second;
+ closePartialSimplePolygon(currentX, ppfig, pfig);
+
+ //update: we need a left edge between (succ1->first, end)//
+ tailPair = createActiveTailsAsPair<Unit>(currentX, succ1->first,
+ true, NULL, fractureHoles_);
+ succ1->second = tailPair.second;
+ hint->second = tailPair.first;
+ (tailPair.first)->pushCoordinate(end);
+ }else{
+ //no cutting needed//
+ hint->second = pfig;
+ pfig->pushCoordinate(currentX);
+ pfig->pushCoordinate(end);
+ }
+ tailMap_.erase(succ);
+ }else{
+ //insert both pred and succ//
+ insertNewLeftEdgeIntoTailMap(currentX, begin, end, hint);
+ }
+ }
+ }
+
+ template<bool orientT, typename Unit, typename polygon_concept_type>
+ inline void ScanLineToPolygonItrs<orientT, Unit, polygon_concept_type>::
+ updatePartialSimplePolygonsWithRightEdges(Unit currentX,
+ const std::vector<interval_data<Unit> > &rightEdges, size_t vertexThreshold)
+ {
+
+ typename std::map<Unit, ActiveTail<Unit>* >::iterator succ, pred, hint;
+ std::pair<ActiveTail<Unit>*, ActiveTail<Unit>*> tailPair;
+ Unit begin, end;
+ size_t i = 0;
+ //If rightEdges is non-empty Then tailMap_ is non-empty //
+ assert(rightEdges.empty() || !tailMap_.empty() );
+
+ while( i < rightEdges.size() ){
+ //find the interval in the tailMap which contains this interval//
+ pred = tailMap_.lower_bound(rightEdges[i].get(HIGH));
+ assert(pred != tailMap_.end());
+ succ = pred; --succ;
+ assert(pred != succ);
+ end = pred->first; begin = succ->first;
+
+ //we now have a [begin, end] //
+ bool found_solid_opening = false;
+ bool erase_succ = true, erase_pred = true;
+ Unit solid_opening_begin = 0;
+ Unit solid_opening_end = 0;
+ size_t j = i+1;
+ ActiveTail<Unit> *pfig = succ->second;
+ ActiveTail<Unit> *ppfig = pred->second;
+ size_t partial_fig_size = pfig->getPolyLineSize();
+ //Invariant://
+ assert(succ->second && (pfig)->getOtherActiveTail() == ppfig);
+
+ hint = succ;
+ Unit key = rightEdges[i].get(LOW);
+ if(begin != key){
+ found_solid_opening = true;
+ solid_opening_begin = begin; solid_opening_end = key;
+ }
+
+ while(j < rightEdges.size() && rightEdges[j].get(HIGH) <= end){
+ if(rightEdges[j-1].get(HIGH) != rightEdges[j].get(LOW)){
+ if(!found_solid_opening){
+ found_solid_opening = true;
+ solid_opening_begin = rightEdges[j-1].get(HIGH);
+ solid_opening_end = rightEdges[j].get(LOW);
+ }else{
+ ++hint;
+ insertNewLeftEdgeIntoTailMap(currentX,
+ rightEdges[j-1].get(HIGH), rightEdges[j].get(LOW), hint);
+ }
+ }
+ j++;
+ }
+
+ //trailing edge//
+ if(end != rightEdges[j-1].get(HIGH)){
+ if(!found_solid_opening){
+ found_solid_opening = true;
+ solid_opening_begin = rightEdges[j-1].get(HIGH); solid_opening_end = end;
+ }else{
+ // a solid opening has been found already, we need to insert a new left
+ // between [rightEdges[j-1].get(HIGH), end]
+ Unit lbegin = rightEdges[j-1].get(HIGH);
+ tailPair = createActiveTailsAsPair<Unit>(currentX, lbegin, true, NULL,
+ fractureHoles_);
+ hint = tailMap_.insert(pred, std::make_pair(lbegin, tailPair.second));
+ pred->second = tailPair.first;
+ (tailPair.first)->pushCoordinate(end);
+ erase_pred = false;
+ }
+ }
+
+ size_t vertex_delta = ((begin != solid_opening_begin) &&
+ (end != solid_opening_end)) ? 4 : 2;
+
+ if(!found_solid_opening){
+ //just close the figure, TODO: call closePartialPolygon//
+ pfig->pushCoordinate(currentX);
+ ActiveTail<Unit>::joinChains(pfig, ppfig, false, outputPolygons_);
+ hint = pred; ++hint;
+ }else if(partial_fig_size+vertex_delta >= vertexThreshold){
+ //close the figure and add a pseudo left-edge//
+ closePartialSimplePolygon(currentX, pfig, ppfig);
+ assert(begin != solid_opening_begin || end != solid_opening_end);
+
+ if(begin != solid_opening_begin && end != solid_opening_end){
+ insertNewLeftEdgeIntoTailMap(currentX, solid_opening_begin,
+ solid_opening_end, hint);
+ }else if(begin == solid_opening_begin){
+ //we just need to update the succ in the tailMap_//
+ tailPair = createActiveTailsAsPair<Unit>(currentX, solid_opening_begin,
+ true, NULL, fractureHoles_);
+ succ->second = tailPair.second;
+ hint = succ; ++hint;
+ hint = tailMap_.insert(pred, std::make_pair(solid_opening_end,
+ tailPair.first));
+ (tailPair.first)->pushCoordinate(solid_opening_end);
+ erase_succ = false;
+ }else{
+ //we just need to update the pred in the tailMap_//
+ tailPair = createActiveTailsAsPair<Unit>(currentX, solid_opening_begin,
+ true, NULL, fractureHoles_);
+ hint = tailMap_.insert(pred, std::make_pair(solid_opening_begin,
+ tailPair.second));
+ pred->second = tailPair.first;
+ (tailPair.first)->pushCoordinate(solid_opening_end);
+ erase_pred = false;
+ }
+ }else{
+ //continue the figure (by adding at-most two new vertices)//
+ if(begin != solid_opening_begin){
+ pfig->pushCoordinate(currentX);
+ pfig->pushCoordinate(solid_opening_begin);
+ //insert solid_opening_begin//
+ hint = succ; ++hint;
+ hint = tailMap_.insert(hint, std::make_pair(solid_opening_begin, pfig));
+ }else{
+ erase_succ = false;
+ }
+
+ if(end != solid_opening_end){
+ std::pair<ActiveTail<Unit>*, ActiveTail<Unit>*> tailPair =
+ createActiveTailsAsPair<Unit>(currentX, solid_opening_end, false,
+ NULL, fractureHoles_);
+ hint = pred; ++hint;
+ hint = tailMap_.insert(hint, std::make_pair(solid_opening_end,
+ tailPair.second));
+ ActiveTail<Unit>::joinChains(tailPair.first, ppfig, false,
+ outputPolygons_);
+ }else{
+ erase_pred = false;
+ }
+ }
+
+ //Remove the pred and succ if necessary//
+ if(erase_succ){
+ tailMap_.erase(succ);
+ }
+ if(erase_pred){
+ tailMap_.erase(pred);
+ }
+ i = j;
+ }
+ }
+
+ // Maintains the following invariant:
+ // a. All the partial polygons formed at any state can be closed
+ // by a single edge.
+ template<bool orientT, typename Unit, typename polygon_concept_type>
+ inline void ScanLineToPolygonItrs<orientT, Unit, polygon_concept_type>::
+ maintainPartialSimplePolygonInvariant(iterator& beginOutput,
+ iterator& endOutput, Unit currentX, const std::vector<interval_data<Unit> >& l,
+ const std::vector<interval_data<Unit> >& r, size_t vertexThreshold) {
+
+ clearOutput_();
+ if(!l.empty()){
+ updatePartialSimplePolygonsWithLeftEdges(currentX, l, vertexThreshold);
+ }
+
+ if(!r.empty()){
+ updatePartialSimplePolygonsWithRightEdges(currentX, r, vertexThreshold);
+ }
+ beginOutput = outputPolygons_.begin();
+ endOutput = outputPolygons_.end();
+
+ }
+
//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 <bool orientT, typename Unit, typename polygon_concept_type>
inline void ScanLineToPolygonItrs<orientT, Unit, polygon_concept_type>::
- processEdges(iterator& beginOutput, iterator& endOutput,
- Unit currentX, std::vector<interval_data<Unit> >& leftEdges,
- std::vector<interval_data<Unit> >& rightEdges) {
+ processEdges(iterator& beginOutput, iterator& endOutput,
+ Unit currentX, std::vector<interval_data<Unit> >& leftEdges,
+ std::vector<interval_data<Unit> >& rightEdges,
+ size_t vertexThreshold) {
clearOutput_();
- typename std::map<Unit, ActiveTail<Unit>*>::iterator nextMapItr = tailMap_.begin();
+ typename std::map<Unit, ActiveTail<Unit>*>::iterator nextMapItr;
//foreach edge
unsigned int leftIndex = 0;
unsigned int rightIndex = 0;
bool bottomAlreadyProcessed = false;
ActiveTail<Unit>* currentTail = 0;
const Unit UnitMax = (std::numeric_limits<Unit>::max)();
+
+ if(vertexThreshold < (std::numeric_limits<size_t>::max)()){
+ maintainPartialSimplePolygonInvariant(beginOutput, endOutput, currentX,
+ leftEdges, rightEdges, vertexThreshold);
+ return;
+ }
+
+ nextMapItr = tailMap_.begin();
while(leftIndex < leftEdges.size() || rightIndex < rightEdges.size()) {
- interval_data<Unit> edges[2] = {interval_data<Unit> (UnitMax, UnitMax), interval_data<Unit> (UnitMax, UnitMax)};
+ interval_data<Unit> edges[2] = {interval_data<Unit> (UnitMax, UnitMax),
+ interval_data<Unit> (UnitMax, UnitMax)};
bool haveNextEdge = true;
if(leftIndex < leftEdges.size())
edges[0] = leftEdges[leftIndex];
@@ -1551,7 +2051,7 @@ namespace polygon_formation {
interval_data<Unit> & nextEdge = edges[!trailingEdge];
//process this edge
if(!bottomAlreadyProcessed) {
- //assert currentTail = 0
+ //assert currentTail = 0
//process the bottom end of this edge
typename std::map<Unit, ActiveTail<Unit>*>::iterator thisMapItr = findAtNext(tailMap_, nextMapItr, edge.get(LOW));
@@ -1578,7 +2078,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<Unit>*, ActiveTail<Unit>*> tailPair =
+ std::pair<ActiveTail<Unit>*, ActiveTail<Unit>*> tailPair =
createActiveTailsAsPair(currentX, edge.get(LOW), !trailingEdge, currentTail, fractureHoles_);
currentTail = tailPair.first;
tailMap_.insert(nextMapItr, std::pair<Unit, ActiveTail<Unit>*>(edge.get(LOW), tailPair.second));
@@ -1606,7 +2106,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<Unit>*, ActiveTail<Unit>*> tailPair =
+ std::pair<ActiveTail<Unit>*, ActiveTail<Unit>*> tailPair =
createActiveTailsAsPair<Unit>(currentX, edge.get(HIGH), true, 0, fractureHoles_);
currentTail = tailPair.first;
thisMapItr->second = tailPair.second;
@@ -1640,7 +2140,7 @@ namespace polygon_formation {
currentTail = ActiveTail<Unit>::joinChains(currentTail, tail, !trailingEdge, outputPolygons_);
nextMapItr = thisMapItr; //set nextMapItr to the next position after this one
++nextMapItr;
- if(currentTail) {
+ if(currentTail) { //figure is not closed//
Unit nextItrY = UnitMax;
if(nextMapItr != tailMap_.end()) {
nextItrY = nextMapItr->first;
@@ -1662,7 +2162,7 @@ namespace polygon_formation {
//set current tail to null
currentTail = 0;
}
- }
+ }
//delete thisMapItr from the map
tailMap_.erase(thisMapItr);
} else {
@@ -1675,7 +2175,7 @@ namespace polygon_formation {
//leave nextMapItr unchanged, it is still next
}
}
-
+
//increment index
leftIndex += !trailingEdge;
rightIndex += trailingEdge;
@@ -1718,8 +2218,10 @@ namespace polygon_formation {
//public API to access polygon formation algorithm
template <typename output_container, typename iterator_type, typename concept_type>
- unsigned int get_polygons(output_container& container, iterator_type begin, iterator_type end,
- orientation_2d orient, bool fracture_holes, concept_type ) {
+ unsigned int get_polygons(output_container& container,
+ iterator_type begin, iterator_type end, orientation_2d orient,
+ bool fracture_holes, concept_type,
+ size_t sliceThreshold = (std::numeric_limits<size_t>::max)() ) {
typedef typename output_container::value_type polygon_type;
typedef typename std::iterator_traits<iterator_type>::value_type::first_type coordinate_type;
polygon_type poly;
@@ -1738,7 +2240,8 @@ namespace polygon_formation {
if(pos != prevPos) {
if(orient == VERTICAL) {
typename polygon_formation::ScanLineToPolygonItrs<true, coordinate_type, polygon_concept_type>::iterator itrPoly, itrPolyEnd;
- scanlineToPolygonItrsV.processEdges(itrPoly, itrPolyEnd, prevPos, leftEdges, rightEdges);
+ scanlineToPolygonItrsV.processEdges(itrPoly, itrPolyEnd, prevPos,
+ leftEdges, rightEdges, sliceThreshold);
for( ; itrPoly != itrPolyEnd; ++ itrPoly) {
++countPolygons;
assign(poly, *itrPoly);
@@ -1746,7 +2249,8 @@ namespace polygon_formation {
}
} else {
typename polygon_formation::ScanLineToPolygonItrs<false, coordinate_type, polygon_concept_type>::iterator itrPoly, itrPolyEnd;
- scanlineToPolygonItrsH.processEdges(itrPoly, itrPolyEnd, prevPos, leftEdges, rightEdges);
+ scanlineToPolygonItrsH.processEdges(itrPoly, itrPolyEnd, prevPos,
+ leftEdges, rightEdges, sliceThreshold);
for( ; itrPoly != itrPolyEnd; ++ itrPoly) {
++countPolygons;
assign(poly, *itrPoly);
@@ -1783,7 +2287,7 @@ namespace polygon_formation {
}
if(orient == VERTICAL) {
typename polygon_formation::ScanLineToPolygonItrs<true, coordinate_type, polygon_concept_type>::iterator itrPoly, itrPolyEnd;
- scanlineToPolygonItrsV.processEdges(itrPoly, itrPolyEnd, prevPos, leftEdges, rightEdges);
+ scanlineToPolygonItrsV.processEdges(itrPoly, itrPolyEnd, prevPos, leftEdges, rightEdges, sliceThreshold);
for( ; itrPoly != itrPolyEnd; ++ itrPoly) {
++countPolygons;
assign(poly, *itrPoly);
@@ -1791,7 +2295,8 @@ namespace polygon_formation {
}
} else {
typename polygon_formation::ScanLineToPolygonItrs<false, coordinate_type, polygon_concept_type>::iterator itrPoly, itrPolyEnd;
- scanlineToPolygonItrsH.processEdges(itrPoly, itrPolyEnd, prevPos, leftEdges, rightEdges);
+ scanlineToPolygonItrsH.processEdges(itrPoly, itrPolyEnd, prevPos, leftEdges, rightEdges, sliceThreshold);
+
for( ; itrPoly != itrPolyEnd; ++ itrPoly) {
++countPolygons;
assign(poly, *itrPoly);
diff --git a/3party/boost/boost/polygon/detail/polygon_set_view.hpp b/3party/boost/boost/polygon/detail/polygon_set_view.hpp
index 243d40c0cf..7d2709141c 100644
--- a/3party/boost/boost/polygon/detail/polygon_set_view.hpp
+++ b/3party/boost/boost/polygon/detail/polygon_set_view.hpp
@@ -92,7 +92,7 @@ namespace boost { namespace polygon{
template <typename value_type, typename geometry_type_1, typename geometry_type_2, int op_type>
void execute_boolean_op(value_type& output_, const geometry_type_1& lvalue_, const geometry_type_2& rvalue_) {
typedef geometry_type_1 ltype;
- typedef geometry_type_2 rtype;
+ //typedef geometry_type_2 rtype;
typedef typename polygon_set_traits<ltype>::coordinate_type coordinate_type;
value_type linput_;
value_type rinput_;
diff --git a/3party/boost/boost/polygon/detail/scan_arbitrary.hpp b/3party/boost/boost/polygon/detail/scan_arbitrary.hpp
index acf7f65ca2..871522511c 100644
--- a/3party/boost/boost/polygon/detail/scan_arbitrary.hpp
+++ b/3party/boost/boost/polygon/detail/scan_arbitrary.hpp
@@ -206,7 +206,7 @@ namespace boost { namespace polygon{
outer != data.end(); ++outer) {
const half_edge& he1 = (*outer).first;
segment_id id1 = (*outer).second;
- typedef rectangle_data<Unit> Rectangle;
+ //typedef rectangle_data<Unit> Rectangle;
//Rectangle rect1;
//set_points(rect1, he1.first, he1.second);
//typename std::vector<Point>::iterator itr = lower_bound(pts.begin(), newend, (std::min)(he1.first, he1.second));
@@ -1024,7 +1024,7 @@ namespace boost { namespace polygon{
template <typename result_type, typename result_functor, typename iT>
iT handle_input_events(result_type& result, result_functor rf, iT begin, iT end) {
- typedef typename high_precision_type<Unit>::type high_precision;
+ //typedef typename high_precision_type<Unit>::type high_precision;
//for each event
property_map vertical_properties_above;
property_map vertical_properties_below;
diff --git a/3party/boost/boost/polygon/detail/voronoi_ctypes.hpp b/3party/boost/boost/polygon/detail/voronoi_ctypes.hpp
index 45b97c819e..d8580dda4e 100644
--- a/3party/boost/boost/polygon/detail/voronoi_ctypes.hpp
+++ b/3party/boost/boost/polygon/detail/voronoi_ctypes.hpp
@@ -71,7 +71,7 @@ template <typename _fpt>
struct extened_exponent_fpt_traits;
template <>
-class extened_exponent_fpt_traits<fpt64> {
+struct extened_exponent_fpt_traits<fpt64> {
public:
typedef int exp_type;
enum {
diff --git a/3party/boost/boost/polygon/detail/voronoi_predicates.hpp b/3party/boost/boost/polygon/detail/voronoi_predicates.hpp
index dad76a6bfd..783987972e 100644
--- a/3party/boost/boost/polygon/detail/voronoi_predicates.hpp
+++ b/3party/boost/boost/polygon/detail/voronoi_predicates.hpp
@@ -35,8 +35,7 @@ class voronoi_predicates {
enum {
ULPS = 64,
- ULPSx2 = 128,
- ULPSx5 = 320
+ ULPSx2 = 128
};
template <typename Point>
@@ -161,32 +160,21 @@ class voronoi_predicates {
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()), ULPSx5);
- 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()), ULPSx5);
- return yCmp == ulp_cmp_type::LESS;
+ ulp_cmp(to_fpt(lhs.x0()), to_fpt(rhs.lower_x()), ULPS);
+ return xCmp == 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()), ULPSx5);
- 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()), ULPSx5);
- return yCmp == ulp_cmp_type::LESS;
+ ulp_cmp(to_fpt(lhs.lower_x()), to_fpt(rhs.x0()), ULPS);
+ return xCmp == 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;
+ if (lhs.lower_x() != rhs.lower_x()) {
+ return lhs.lower_x() < rhs.lower_x();
+ }
+ return lhs.y() < rhs.y();
}
private:
@@ -198,24 +186,25 @@ class voronoi_predicates {
class distance_predicate {
public:
typedef Site site_type;
+ typedef typename site_type::point_type point_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 {
+ const point_type& new_point) const {
if (!left_site.is_segment()) {
if (!right_site.is_segment()) {
- return pp(left_site, right_site, new_site);
+ return pp(left_site, right_site, new_point);
} else {
- return ps(left_site, right_site, new_site, false);
+ return ps(left_site, right_site, new_point, false);
}
} else {
if (!right_site.is_segment()) {
- return ps(right_site, left_site, new_site, true);
+ return ps(right_site, left_site, new_point, true);
} else {
- return ss(left_site, right_site, new_site);
+ return ss(left_site, right_site, new_point);
}
}
}
@@ -229,18 +218,15 @@ class voronoi_predicates {
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& new_point) 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;
@@ -261,16 +247,15 @@ class voronoi_predicates {
}
bool ps(const site_type& left_site, const site_type& right_site,
- const site_type& new_site, bool reverse_order) const {
+ const point_type& new_point, 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);
+ left_site, right_site, new_point, 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());
+ fpt_type dist1 = find_distance_to_point_arc(left_site, new_point);
+ fpt_type dist2 = find_distance_to_segment_arc(right_site, new_point);
// The undefined ulp range is equal to 3EPS + 7EPS <= 10ULP.
return reverse_order ^ (dist1 < dist2);
@@ -278,19 +263,15 @@ class voronoi_predicates {
bool ss(const site_type& left_site,
const site_type& right_site,
- const site_type& new_site) const {
+ const point_type& new_point) 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;
+ if (left_site.sorted_index() == right_site.sorted_index()) {
+ return ot::eval(
+ left_site.point0(), left_site.point1(), new_point) == 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());
+ fpt_type dist1 = find_distance_to_segment_arc(left_site, new_point);
+ fpt_type dist2 = find_distance_to_segment_arc(right_site, new_point);
// The undefined ulp range is equal to 7EPS + 7EPS <= 14ULP.
return dist1 < dist2;
@@ -309,8 +290,8 @@ class voronoi_predicates {
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);
+ const point_type& segment0 = site.point0();
+ const point_type& segment1 = site.point1();
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);
@@ -335,11 +316,10 @@ class voronoi_predicates {
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& new_point, 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();
+ const point_type& segment_start = right_site.point0();
+ const point_type& segment_end = right_site.point1();
if (ot::eval(segment_start, segment_end, new_point) != ot::RIGHT)
return (!right_site.is_inverse()) ? LESS : MORE;
@@ -394,7 +374,9 @@ class voronoi_predicates {
public:
typedef Node node_type;
typedef typename Node::site_type site_type;
- typedef typename site_type::coordinate_type coordinate_type;
+ typedef typename site_type::point_type point_type;
+ typedef typename point_type::coordinate_type coordinate_type;
+ typedef point_comparison_predicate<point_type> point_comparison_type;
typedef distance_predicate<site_type> distance_predicate_type;
// Compares nodes in the balanced binary search tree. Nodes are
@@ -408,13 +390,17 @@ class voronoi_predicates {
// 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);
+ const point_type& point1 = get_comparison_point(site1);
+ const point_type& point2 = get_comparison_point(site2);
- if (site1.x() < site2.x()) {
+ if (point1.x() < point2.x()) {
// The second node contains a new site.
- return predicate_(node1.left_site(), node1.right_site(), site2);
- } else if (site1.x() > site2.x()) {
+ return distance_predicate_(
+ node1.left_site(), node1.right_site(), point2);
+ } else if (point1.x() > point2.x()) {
// The first node contains a new site.
- return !predicate_(node2.left_site(), node2.right_site(), site1);
+ return !distance_predicate_(
+ node2.left_site(), node2.right_site(), point1);
} else {
// This checks were evaluated experimentally.
if (site1.sorted_index() == site2.sorted_index()) {
@@ -443,25 +429,31 @@ class voronoi_predicates {
return node.right_site();
}
+ const point_type& get_comparison_point(const site_type& site) const {
+ return point_comparison_(site.point0(), site.point1()) ?
+ site.point0() : site.point1();
+ }
+
// Get comparison pair: y coordinate and direction of the newer site.
std::pair<coordinate_type, int> 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);
+ return std::make_pair(node.left_site().y0(), 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().y0(), 1);
}
- return std::make_pair(node.left_site().y(), 1);
+ return std::make_pair(node.left_site().y1(), 1);
}
- return std::make_pair(node.right_site().y(), -1);
+ return std::make_pair(node.right_site().y0(), -1);
}
- distance_predicate_type predicate_;
+ point_comparison_type point_comparison_;
+ distance_predicate_type distance_predicate_;
};
template <typename Site>
@@ -473,8 +465,9 @@ class voronoi_predicates {
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;
+ return ot::eval(site1.point0(),
+ site2.point0(),
+ site3.point0()) == ot::RIGHT;
}
bool pps(const site_type& site1,
@@ -482,10 +475,10 @@ class voronoi_predicates {
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));
+ typename ot::Orientation orient1 = ot::eval(
+ site1.point0(), site2.point0(), site3.point0());
+ typename ot::Orientation orient2 = ot::eval(
+ site1.point0(), site2.point0(), site3.point1());
if (segment_index == 1 && site1.x0() >= site2.x0()) {
if (orient1 != ot::RIGHT)
return false;
@@ -496,9 +489,8 @@ class voronoi_predicates {
return false;
}
} else {
- if (site3.point0(true) == site1.point0() &&
- site3.point1(true) == site2.point0())
- return false;
+ return (site3.point0() != site1.point0()) ||
+ (site3.point1() != site2.point0());
}
return true;
}
@@ -507,17 +499,16 @@ class voronoi_predicates {
const site_type& site2,
const site_type& site3,
int point_index) const {
- if (site2.point0() == site3.point0() &&
- site2.point1() == site3.point1()) {
+ if (site2.sorted_index() == site3.sorted_index()) {
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),
+ ot::eval(site2.point0(),
site1.point0(),
- site3.point1(true)) != ot::RIGHT)
+ site3.point1()) != ot::RIGHT)
return false;
}
return true;
@@ -526,11 +517,8 @@ class voronoi_predicates {
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;
+ return (site1.sorted_index() != site2.sorted_index()) &&
+ (site2.sorted_index() != site3.sorted_index());
}
};
@@ -620,10 +608,10 @@ class voronoi_predicates {
bool recompute_c_y = true,
bool recompute_lower_x = true) {
big_int_type cA[4], cB[4];
- big_int_type line_a = static_cast<int_x2_type>(site3.point1(true).y()) -
- static_cast<int_x2_type>(site3.point0(true).y());
- big_int_type line_b = static_cast<int_x2_type>(site3.point0(true).x()) -
- static_cast<int_x2_type>(site3.point1(true).x());
+ big_int_type line_a = static_cast<int_x2_type>(site3.y1()) -
+ static_cast<int_x2_type>(site3.y0());
+ big_int_type line_b = static_cast<int_x2_type>(site3.x0()) -
+ static_cast<int_x2_type>(site3.x1());
big_int_type segm_len = line_a * line_a + line_b * line_b;
big_int_type vec_x = static_cast<int_x2_type>(site2.y()) -
static_cast<int_x2_type>(site1.y());
@@ -636,21 +624,21 @@ class voronoi_predicates {
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<int_x2_type>(site3.point1().y()) -
+ big_int_type dif0 = static_cast<int_x2_type>(site3.y1()) -
static_cast<int_x2_type>(site1.y());
big_int_type dif1 = static_cast<int_x2_type>(site1.x()) -
- static_cast<int_x2_type>(site3.point1().x());
+ static_cast<int_x2_type>(site3.x1());
big_int_type A = line_a * dif1 - line_b * dif0;
- dif0 = static_cast<int_x2_type>(site3.point1().y()) -
+ dif0 = static_cast<int_x2_type>(site3.y1()) -
static_cast<int_x2_type>(site2.y());
dif1 = static_cast<int_x2_type>(site2.x()) -
- static_cast<int_x2_type>(site3.point1().x());
+ static_cast<int_x2_type>(site3.x1());
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;
+ 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;
@@ -716,10 +704,10 @@ class voronoi_predicates {
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);
+ const point_type& segm_start1 = site2.point1();
+ const point_type& segm_end1 = site2.point0();
+ const point_type& segm_start2 = site3.point0();
+ const point_type& segm_end2 = site3.point1();
a[0] = static_cast<int_x2_type>(segm_end1.x()) -
static_cast<int_x2_type>(segm_start1.x());
b[0] = static_cast<int_x2_type>(segm_end1.y()) -
@@ -850,32 +838,32 @@ class voronoi_predicates {
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<int_x2_type>(site1.x1(true)) -
- static_cast<int_x2_type>(site1.x0(true));
- a[1] = static_cast<int_x2_type>(site2.x1(true)) -
- static_cast<int_x2_type>(site2.x0(true));
- a[2] = static_cast<int_x2_type>(site3.x1(true)) -
- static_cast<int_x2_type>(site3.x0(true));
-
- b[0] = static_cast<int_x2_type>(site1.y1(true)) -
- static_cast<int_x2_type>(site1.y0(true));
- b[1] = static_cast<int_x2_type>(site2.y1(true)) -
- static_cast<int_x2_type>(site2.y0(true));
- b[2] = static_cast<int_x2_type>(site3.y1(true)) -
- static_cast<int_x2_type>(site3.y0(true));
-
- c[0] = static_cast<int_x2_type>(site1.x0(true)) *
- static_cast<int_x2_type>(site1.y1(true)) -
- static_cast<int_x2_type>(site1.y0(true)) *
- static_cast<int_x2_type>(site1.x1(true));
- c[1] = static_cast<int_x2_type>(site2.x0(true)) *
- static_cast<int_x2_type>(site2.y1(true)) -
- static_cast<int_x2_type>(site2.y0(true)) *
- static_cast<int_x2_type>(site2.x1(true));
- c[2] = static_cast<int_x2_type>(site3.x0(true)) *
- static_cast<int_x2_type>(site3.y1(true)) -
- static_cast<int_x2_type>(site3.y0(true)) *
- static_cast<int_x2_type>(site3.x1(true));
+ a[0] = static_cast<int_x2_type>(site1.x1()) -
+ static_cast<int_x2_type>(site1.x0());
+ a[1] = static_cast<int_x2_type>(site2.x1()) -
+ static_cast<int_x2_type>(site2.x0());
+ a[2] = static_cast<int_x2_type>(site3.x1()) -
+ static_cast<int_x2_type>(site3.x0());
+
+ b[0] = static_cast<int_x2_type>(site1.y1()) -
+ static_cast<int_x2_type>(site1.y0());
+ b[1] = static_cast<int_x2_type>(site2.y1()) -
+ static_cast<int_x2_type>(site2.y0());
+ b[2] = static_cast<int_x2_type>(site3.y1()) -
+ static_cast<int_x2_type>(site3.y0());
+
+ c[0] = static_cast<int_x2_type>(site1.x0()) *
+ static_cast<int_x2_type>(site1.y1()) -
+ static_cast<int_x2_type>(site1.y0()) *
+ static_cast<int_x2_type>(site1.x1());
+ c[1] = static_cast<int_x2_type>(site2.x0()) *
+ static_cast<int_x2_type>(site2.y1()) -
+ static_cast<int_x2_type>(site2.y0()) *
+ static_cast<int_x2_type>(site2.x1());
+ c[2] = static_cast<int_x2_type>(site3.x0()) *
+ static_cast<int_x2_type>(site3.y1()) -
+ static_cast<int_x2_type>(site3.y0()) *
+ static_cast<int_x2_type>(site3.x1());
for (int i = 0; i < 3; ++i)
cB[i] = a[i] * a[i] + b[i] * b[i];
@@ -1060,48 +1048,46 @@ class voronoi_predicates {
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 line_a = to_fpt(site3.y1()) - to_fpt(site3.y0());
+ fpt_type line_b = to_fpt(site3.x0()) - to_fpt(site3.x1());
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<int_x2_type>(site3.point1(true).y()) -
- static_cast<int_x2_type>(site3.point0(true).y()),
- static_cast<int_x2_type>(site3.point0(true).x()) -
- static_cast<int_x2_type>(site3.point1(true).x()),
+ static_cast<int_x2_type>(site3.y1()) -
+ static_cast<int_x2_type>(site3.y0()),
+ static_cast<int_x2_type>(site3.x0()) -
+ static_cast<int_x2_type>(site3.x1()),
static_cast<int_x2_type>(site2.x()) -
static_cast<int_x2_type>(site1.x()),
static_cast<int_x2_type>(site2.y()) -
static_cast<int_x2_type>(site1.y())), to_fpt(1.0));
robust_fpt_type A(robust_cross_product(
- static_cast<int_x2_type>(site3.point1(true).y()) -
- static_cast<int_x2_type>(site3.point0(true).y()),
- static_cast<int_x2_type>(site3.point0(true).x()) -
- static_cast<int_x2_type>(site3.point1(true).x()),
- static_cast<int_x2_type>(site3.point1().y()) -
+ static_cast<int_x2_type>(site3.y0()) -
+ static_cast<int_x2_type>(site3.y1()),
+ static_cast<int_x2_type>(site3.x0()) -
+ static_cast<int_x2_type>(site3.x1()),
+ static_cast<int_x2_type>(site3.y1()) -
static_cast<int_x2_type>(site1.y()),
- static_cast<int_x2_type>(site1.x()) -
- static_cast<int_x2_type>(site3.point1().x())), to_fpt(1.0));
+ static_cast<int_x2_type>(site3.x1()) -
+ static_cast<int_x2_type>(site1.x())), to_fpt(1.0));
robust_fpt_type B(robust_cross_product(
- static_cast<int_x2_type>(site3.point1(true).y()) -
- static_cast<int_x2_type>(site3.point0(true).y()),
- static_cast<int_x2_type>(site3.point0(true).x()) -
- static_cast<int_x2_type>(site3.point1(true).x()),
- static_cast<int_x2_type>(site3.point1().y()) -
+ static_cast<int_x2_type>(site3.y0()) -
+ static_cast<int_x2_type>(site3.y1()),
+ static_cast<int_x2_type>(site3.x0()) -
+ static_cast<int_x2_type>(site3.x1()),
+ static_cast<int_x2_type>(site3.y1()) -
static_cast<int_x2_type>(site2.y()),
- static_cast<int_x2_type>(site2.x()) -
- static_cast<int_x2_type>(site3.point1().x())), to_fpt(1.0));
+ static_cast<int_x2_type>(site3.x1()) -
+ static_cast<int_x2_type>(site2.x())), to_fpt(1.0));
robust_fpt_type denom(robust_cross_product(
- static_cast<int_x2_type>(site2.y()) -
- static_cast<int_x2_type>(site1.y()),
+ static_cast<int_x2_type>(site1.y()) -
+ static_cast<int_x2_type>(site2.y()),
static_cast<int_x2_type>(site1.x()) -
static_cast<int_x2_type>(site2.x()),
- static_cast<int_x2_type>(site3.point1(true).y()) -
- static_cast<int_x2_type>(site3.point0(true).y()),
- static_cast<int_x2_type>(site3.point0(true).x()) -
- static_cast<int_x2_type>(site3.point1(true).x())), to_fpt(1.0));
+ static_cast<int_x2_type>(site3.y1()) -
+ static_cast<int_x2_type>(site3.y0()),
+ static_cast<int_x2_type>(site3.x1()) -
+ static_cast<int_x2_type>(site3.x0())), 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;
@@ -1118,11 +1104,11 @@ class voronoi_predicates {
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(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(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());
@@ -1149,10 +1135,10 @@ class voronoi_predicates {
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);
+ const point_type& segm_start1 = site2.point1();
+ const point_type& segm_end1 = site2.point0();
+ const point_type& segm_start2 = site3.point0();
+ const point_type& segm_end2 = site3.point1();
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());
@@ -1343,54 +1329,54 @@ class voronoi_predicates {
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 a1(to_fpt(site1.x1()) - to_fpt(site1.x0()));
+ robust_fpt_type b1(to_fpt(site1.y1()) - to_fpt(site1.y0()));
robust_fpt_type c1(robust_cross_product(
- site1.x0(true), site1.y0(true),
- site1.x1(true), site1.y1(true)), to_fpt(1.0));
+ site1.x0(), site1.y0(),
+ site1.x1(), site1.y1()), 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 a2(to_fpt(site2.x1()) - to_fpt(site2.x0()));
+ robust_fpt_type b2(to_fpt(site2.y1()) - to_fpt(site2.y0()));
robust_fpt_type c2(robust_cross_product(
- site2.x0(true), site2.y0(true),
- site2.x1(true), site2.y1(true)), to_fpt(1.0));
+ site2.x0(), site2.y0(),
+ site2.x1(), site2.y1()), 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 a3(to_fpt(site3.x1()) - to_fpt(site3.x0()));
+ robust_fpt_type b3(to_fpt(site3.y1()) - to_fpt(site3.y0()));
robust_fpt_type c3(robust_cross_product(
- site3.x0(true), site3.y0(true),
- site3.x1(true), site3.y1(true)), to_fpt(1.0));
+ site3.x0(), site3.y0(),
+ site3.x1(), site3.y1()), 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<int_x2_type>(site1.x1(true)) -
- static_cast<int_x2_type>(site1.x0(true)),
- static_cast<int_x2_type>(site1.y1(true)) -
- static_cast<int_x2_type>(site1.y0(true)),
- static_cast<int_x2_type>(site2.x1(true)) -
- static_cast<int_x2_type>(site2.x0(true)),
- static_cast<int_x2_type>(site2.y1(true)) -
- static_cast<int_x2_type>(site2.y0(true))), to_fpt(1.0));
+ static_cast<int_x2_type>(site1.x1()) -
+ static_cast<int_x2_type>(site1.x0()),
+ static_cast<int_x2_type>(site1.y1()) -
+ static_cast<int_x2_type>(site1.y0()),
+ static_cast<int_x2_type>(site2.x1()) -
+ static_cast<int_x2_type>(site2.x0()),
+ static_cast<int_x2_type>(site2.y1()) -
+ static_cast<int_x2_type>(site2.y0())), to_fpt(1.0));
robust_fpt_type cross_23(robust_cross_product(
- static_cast<int_x2_type>(site2.x1(true)) -
- static_cast<int_x2_type>(site2.x0(true)),
- static_cast<int_x2_type>(site2.y1(true)) -
- static_cast<int_x2_type>(site2.y0(true)),
- static_cast<int_x2_type>(site3.x1(true)) -
- static_cast<int_x2_type>(site3.x0(true)),
- static_cast<int_x2_type>(site3.y1(true)) -
- static_cast<int_x2_type>(site3.y0(true))), to_fpt(1.0));
+ static_cast<int_x2_type>(site2.x1()) -
+ static_cast<int_x2_type>(site2.x0()),
+ static_cast<int_x2_type>(site2.y1()) -
+ static_cast<int_x2_type>(site2.y0()),
+ static_cast<int_x2_type>(site3.x1()) -
+ static_cast<int_x2_type>(site3.x0()),
+ static_cast<int_x2_type>(site3.y1()) -
+ static_cast<int_x2_type>(site3.y0())), to_fpt(1.0));
robust_fpt_type cross_31(robust_cross_product(
- static_cast<int_x2_type>(site3.x1(true)) -
- static_cast<int_x2_type>(site3.x0(true)),
- static_cast<int_x2_type>(site3.y1(true)) -
- static_cast<int_x2_type>(site3.y0(true)),
- static_cast<int_x2_type>(site1.x1(true)) -
- static_cast<int_x2_type>(site1.x0(true)),
- static_cast<int_x2_type>(site1.y1(true)) -
- static_cast<int_x2_type>(site1.y0(true))), to_fpt(1.0));
+ static_cast<int_x2_type>(site3.x1()) -
+ static_cast<int_x2_type>(site3.x0()),
+ static_cast<int_x2_type>(site3.y1()) -
+ static_cast<int_x2_type>(site3.y0()),
+ static_cast<int_x2_type>(site1.x1()) -
+ static_cast<int_x2_type>(site1.x0()),
+ static_cast<int_x2_type>(site1.y1()) -
+ static_cast<int_x2_type>(site1.y0())), to_fpt(1.0));
// denom = cross_12 * len3 + cross_23 * len1 + cross_31 * len2.
robust_dif_type denom;
@@ -1512,10 +1498,29 @@ class voronoi_predicates {
}
}
}
+ if (lies_outside_vertical_segment(circle, site1) ||
+ lies_outside_vertical_segment(circle, site2) ||
+ lies_outside_vertical_segment(circle, site3)) {
+ return false;
+ }
return true;
}
private:
+ bool lies_outside_vertical_segment(
+ const circle_type& c, const site_type& s) {
+ if (!s.is_segment() || !is_vertical(s)) {
+ return false;
+ }
+ fpt_type y0 = to_fpt(s.is_inverse() ? s.y1() : s.y0());
+ fpt_type y1 = to_fpt(s.is_inverse() ? s.y0() : s.y1());
+ return ulp_cmp(c.y(), y0, ULPS) == ulp_cmp_type::LESS ||
+ ulp_cmp(c.y(), y1, ULPS) == ulp_cmp_type::MORE;
+ }
+
+ private:
+ to_fpt_converter to_fpt;
+ ulp_cmp_type ulp_cmp;
circle_existence_predicate_type circle_existence_predicate_;
circle_formation_functor_type circle_formation_functor_;
};
diff --git a/3party/boost/boost/polygon/detail/voronoi_robust_fpt.hpp b/3party/boost/boost/polygon/detail/voronoi_robust_fpt.hpp
index 01d337fdf0..09da1a72f9 100644
--- a/3party/boost/boost/polygon/detail/voronoi_robust_fpt.hpp
+++ b/3party/boost/boost/polygon/detail/voronoi_robust_fpt.hpp
@@ -10,6 +10,7 @@
#ifndef BOOST_POLYGON_DETAIL_VORONOI_ROBUST_FPT
#define BOOST_POLYGON_DETAIL_VORONOI_ROBUST_FPT
+#include <algorithm>
#include <cmath>
// Geometry predicates with floating-point variables usually require
diff --git a/3party/boost/boost/polygon/detail/voronoi_structures.hpp b/3party/boost/boost/polygon/detail/voronoi_structures.hpp
index 532eb7e253..f37a454e84 100644
--- a/3party/boost/boost/polygon/detail/voronoi_structures.hpp
+++ b/3party/boost/boost/polygon/detail/voronoi_structures.hpp
@@ -130,48 +130,36 @@ class site_event {
(this->point1_ != that.point1_);
}
- coordinate_type x(bool oriented = false) const {
- return x0(oriented);
+ coordinate_type x() const {
+ return point0_.x();
}
- coordinate_type y(bool oriented = false) const {
- return y0(oriented);
+ coordinate_type y() const {
+ return point0_.y();
}
- coordinate_type x0(bool oriented = false) const {
- if (!oriented)
- return point0_.x();
- return is_inverse() ? point1_.x() : point0_.x();
+ coordinate_type x0() const {
+ return point0_.x();
}
- coordinate_type y0(bool oriented = false) const {
- if (!oriented)
- return point0_.y();
- return is_inverse() ? point1_.y() : point0_.y();
+ coordinate_type y0() const {
+ return point0_.y();
}
- coordinate_type x1(bool oriented = false) const {
- if (!oriented)
- return point1_.x();
- return is_inverse() ? point0_.x() : point1_.x();
+ coordinate_type x1() const {
+ return point1_.x();
}
- coordinate_type y1(bool oriented = false) const {
- if (!oriented)
- return point1_.y();
- return is_inverse() ? point0_.y() : point1_.y();
+ coordinate_type y1() const {
+ return point1_.y();
}
- const point_type& point0(bool oriented = false) const {
- if (!oriented)
- return point0_;
- return is_inverse() ? point1_ : point0_;
+ const point_type& point0() const {
+ return point0_;
}
- const point_type& point1(bool oriented = false) const {
- if (!oriented)
- return point1_;
- return is_inverse() ? point0_ : point1_;
+ const point_type& point1() const {
+ return point1_;
}
std::size_t sorted_index() const {
@@ -197,6 +185,7 @@ class site_event {
}
site_event& inverse() {
+ std::swap(point0_, point1_);
flags_ ^= IS_INVERSE;
return *this;
}
diff --git a/3party/boost/boost/polygon/interval_concept.hpp b/3party/boost/boost/polygon/interval_concept.hpp
index 4ea992c977..3eeec0ffbb 100644
--- a/3party/boost/boost/polygon/interval_concept.hpp
+++ b/3party/boost/boost/polygon/interval_concept.hpp
@@ -386,7 +386,6 @@ typename enable_if<
>::type& scale_down(
IntervalType& interval,
typename interval_coordinate_type<IntervalType>::type factor) {
- typedef typename interval_coordinate_type<IntervalType>::type Unit;
typename interval_coordinate_type<IntervalType>::type newHigh =
high(interval) / factor;
low(interval, low(interval) / factor);
diff --git a/3party/boost/boost/polygon/point_data.hpp b/3party/boost/boost/polygon/point_data.hpp
index e37f82f0cf..23c23ed2b0 100644
--- a/3party/boost/boost/polygon/point_data.hpp
+++ b/3party/boost/boost/polygon/point_data.hpp
@@ -46,7 +46,7 @@ class point_data {
}
template <typename PointType>
- explicit point_data(const PointType& that) {
+ point_data(const PointType& that) {
*this = that;
}
diff --git a/3party/boost/boost/polygon/polygon_90_set_concept.hpp b/3party/boost/boost/polygon/polygon_90_set_concept.hpp
index 980c3e769a..5259a079c9 100644
--- a/3party/boost/boost/polygon/polygon_90_set_concept.hpp
+++ b/3party/boost/boost/polygon/polygon_90_set_concept.hpp
@@ -328,7 +328,6 @@ namespace boost { namespace polygon{
typename enable_if< typename is_mutable_polygon_90_set_type<polygon_set_type>::type,
polygon_set_type>::type &
resize(polygon_set_type& polygon_set, coord_type resizing) {
- typedef typename polygon_90_set_traits<polygon_set_type>::coordinate_type Unit;
if(resizing > 0) {
return bloat(polygon_set, resizing);
}
diff --git a/3party/boost/boost/polygon/polygon_90_set_data.hpp b/3party/boost/boost/polygon/polygon_90_set_data.hpp
index abd85b4888..305aa3e113 100644
--- a/3party/boost/boost/polygon/polygon_90_set_data.hpp
+++ b/3party/boost/boost/polygon/polygon_90_set_data.hpp
@@ -164,6 +164,12 @@ namespace boost { namespace polygon{
}
template <typename output_container>
+ inline void get(output_container& output, size_t vthreshold) const {
+ get_dispatch(output, typename geometry_concept<typename output_container::value_type>::type(), vthreshold);
+ }
+
+
+ template <typename output_container>
inline void get_polygons(output_container& output) const {
get_dispatch(output, polygon_90_concept());
}
@@ -829,10 +835,25 @@ namespace boost { namespace polygon{
void get_dispatch(output_container& output, polygon_90_concept tag) const {
get_fracture(output, true, tag);
}
+
+ template <typename output_container>
+ void get_dispatch(output_container& output, polygon_90_concept tag,
+ size_t vthreshold) const {
+ get_fracture(output, true, tag, vthreshold);
+ }
+
template <typename output_container>
void get_dispatch(output_container& output, polygon_90_with_holes_concept tag) const {
get_fracture(output, false, tag);
}
+
+ template <typename output_container>
+ void get_dispatch(output_container& output, polygon_90_with_holes_concept tag,
+ size_t vthreshold) const {
+ get_fracture(output, false, tag, vthreshold);
+ }
+
+
template <typename output_container>
void get_dispatch(output_container& output, polygon_45_concept tag) const {
get_fracture(output, true, tag);
@@ -854,6 +875,13 @@ namespace boost { namespace polygon{
clean();
::boost::polygon::get_polygons(container, data_.begin(), data_.end(), orient_, fracture_holes, tag);
}
+
+ template <typename output_container, typename concept_type>
+ void get_fracture(output_container& container, bool fracture_holes, concept_type tag,
+ size_t vthreshold) const {
+ clean();
+ ::boost::polygon::get_polygons(container, data_.begin(), data_.end(), orient_, fracture_holes, tag, vthreshold);
+ }
};
template <typename coordinate_type>
diff --git a/3party/boost/boost/polygon/polygon_set_data.hpp b/3party/boost/boost/polygon/polygon_set_data.hpp
index 41a1b59f21..3c761d34f8 100644
--- a/3party/boost/boost/polygon/polygon_set_data.hpp
+++ b/3party/boost/boost/polygon/polygon_set_data.hpp
@@ -197,36 +197,34 @@ namespace boost { namespace polygon {
template <class iT>
inline void insert_vertex_sequence(iT begin_vertex, iT end_vertex, direction_1d winding, bool is_hole) {
- bool first_iteration = true;
- point_type first_point;
- point_type previous_point;
- point_type current_point;
- direction_1d winding_dir = winding;
- int multiplier = winding_dir == COUNTERCLOCKWISE ? 1 : -1;
- if(is_hole) multiplier *= -1;
- for( ; begin_vertex != end_vertex; ++begin_vertex) {
- assign(current_point, *begin_vertex);
- if(first_iteration) {
- first_iteration = false;
- first_point = previous_point = current_point;
- } else {
- if(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);
- }
- }
- previous_point = current_point;
+ if (begin_vertex == end_vertex) {
+ // No edges to insert.
+ return;
+ }
+ // Current edge endpoints.
+ iT vertex0 = begin_vertex;
+ iT vertex1 = begin_vertex;
+ if (++vertex1 == end_vertex) {
+ // No edges to insert.
+ return;
}
- current_point = first_point;
- if(!first_iteration) {
- if(previous_point != current_point) {
- element_type elem(edge_type(previous_point, current_point),
- ( previous_point.get(HORIZONTAL) == current_point.get(HORIZONTAL) ? -1 : 1) * multiplier);
+ int wmultiplier = (winding == COUNTERCLOCKWISE) ? 1 : -1;
+ dirty_ = true;
+ unsorted_ = true;
+ while (vertex0 != end_vertex) {
+ point_type p0, p1;
+ assign(p0, *vertex0);
+ assign(p1, *vertex1);
+ if (p0 != p1) {
+ int hmultiplier = (p0.get(HORIZONTAL) == p1.get(HORIZONTAL)) ? -1 : 1;
+ element_type elem(edge_type(p0, p1), hmultiplier * wmultiplier);
insert_clean(elem);
}
- dirty_ = true;
- unsorted_ = true;
+ ++vertex0;
+ ++vertex1;
+ if (vertex1 == end_vertex) {
+ vertex1 = begin_vertex;
+ }
}
}
@@ -271,7 +269,7 @@ namespace boost { namespace polygon {
// 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);
diff --git a/3party/boost/boost/polygon/polygon_traits.hpp b/3party/boost/boost/polygon/polygon_traits.hpp
index b4d0e9dd97..dddbf34d5d 100644
--- a/3party/boost/boost/polygon/polygon_traits.hpp
+++ b/3party/boost/boost/polygon/polygon_traits.hpp
@@ -971,7 +971,6 @@ namespace boost { namespace polygon{
static area_type
point_sequence_area(iterator_type begin_range, iterator_type end_range) {
typedef typename std::iterator_traits<iterator_type>::value_type point_type;
- typedef typename point_traits<point_type>::coordinate_type Unit;
if(begin_range == end_range) return area_type(0);
point_type first = *begin_range;
point_type previous = first;
@@ -1129,17 +1128,33 @@ namespace boost { namespace polygon{
template <typename T, typename input_point_type>
typename enable_if<
- typename gtl_and< typename is_polygon_90_type<T>::type,
- typename gtl_same_type<typename geometry_concept<input_point_type>::type, point_concept>::type>::type,
- bool>::type
- contains(const T& polygon, const input_point_type& point, bool consider_touch = true) {
+ typename gtl_and<
+ typename is_polygon_90_type<T>::type,
+ typename gtl_same_type<
+ typename geometry_concept<input_point_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;
typedef typename polygon_traits<polygon_type>::coordinate_type coordinate_type;
typedef typename polygon_traits<polygon_type>::iterator_type iterator;
typedef typename std::iterator_traits<iterator>::value_type point_type;
coordinate_type point_x = x(point);
coordinate_type point_y = y(point);
- bool inside = false;
+ // Check how many intersections has the ray extended from the given
+ // point in the x-axis negative direction with the polygon edges.
+ // If the number is odd the point is within the polygon, otherwise not.
+ // We can safely ignore horizontal edges, however intersections with
+ // end points of the vertical edges require special handling. We should
+ // add one intersection in case horizontal edges that extend vertical edge
+ // point in the same direction.
+ int num_full_intersections = 0;
+ int num_half_intersections = 0;
for (iterator iter = begin_points(polygon); iter != end_points(polygon);) {
point_type curr_point = *iter;
++iter;
@@ -1154,7 +1169,10 @@ namespace boost { namespace polygon{
if (x(curr_point) == point_x) {
return consider_touch;
}
- inside ^= true;
+ ++num_full_intersections;
+ }
+ if (point_y == min_y || point_y == max_y) {
+ num_half_intersections += (y(curr_point) < y(next_point) ? 1 : -1);
}
} else {
coordinate_type min_x = (std::min)(x(curr_point), x(next_point));
@@ -1166,7 +1184,8 @@ namespace boost { namespace polygon{
}
}
}
- return inside;
+ int total_intersections = num_full_intersections + (num_half_intersections >> 1);
+ return total_intersections & 1;
}
//TODO: refactor to expose as user APIs
@@ -1420,18 +1439,6 @@ namespace boost { namespace polygon{
template <typename T1, typename T2>
typename enable_if<
- typename gtl_and< typename is_mutable_point_concept<typename geometry_concept<T1>::type>::type,
- typename is_polygon_with_holes_type<T2>::type>::type,
- bool>::type
- center(T1& center_point, const T2& polygon) {
- typedef typename polygon_traits<T2>::coordinate_type coordinate_type;
- rectangle_data<coordinate_type> bbox;
- extents(bbox, polygon);
- return center(center_point, bbox);
- }
-
- template <typename T1, typename T2>
- typename enable_if<
typename gtl_and< typename is_mutable_rectangle_concept<typename geometry_concept<T1>::type>::type,
typename is_polygon_with_holes_type<T2>::type>::type,
bool>::type
@@ -1451,6 +1458,18 @@ namespace boost { namespace polygon{
return true;
}
+ template <typename T1, typename T2>
+ typename enable_if<
+ typename gtl_and< typename is_mutable_point_concept<typename geometry_concept<T1>::type>::type,
+ typename is_polygon_with_holes_type<T2>::type>::type,
+ bool>::type
+ center(T1& center_point, const T2& polygon) {
+ typedef typename polygon_traits<T2>::coordinate_type coordinate_type;
+ rectangle_data<coordinate_type> bbox;
+ extents(bbox, polygon);
+ return center(center_point, bbox);
+ }
+
template <class T>
template <class T2>
polygon_90_data<T>& polygon_90_data<T>::operator=(const T2& rvalue) {
diff --git a/3party/boost/boost/polygon/rectangle_concept.hpp b/3party/boost/boost/polygon/rectangle_concept.hpp
index 13aee46fa4..e82431907b 100644
--- a/3party/boost/boost/polygon/rectangle_concept.hpp
+++ b/3party/boost/boost/polygon/rectangle_concept.hpp
@@ -968,8 +968,10 @@ namespace boost { namespace polygon{
rectangle_type>::type &
scale_up(rectangle_type& rectangle,
typename coordinate_traits<typename rectangle_coordinate_type<rectangle_type>::type>::unsigned_area_type factor) {
- horizontal(rectangle, scale_up(horizontal(rectangle), factor));
- vertical(rectangle, scale_up(vertical(rectangle), factor));
+ typename rectangle_interval_type<rectangle_type>::type h = horizontal(rectangle);
+ horizontal(rectangle, scale_up(h, factor));
+ typename rectangle_interval_type<rectangle_type>::type v = vertical(rectangle);
+ vertical(rectangle, scale_up(v, factor));
return rectangle;
}
@@ -980,8 +982,10 @@ namespace boost { namespace polygon{
rectangle_type>::type &
scale_down(rectangle_type& rectangle,
typename coordinate_traits<typename rectangle_coordinate_type<rectangle_type>::type>::unsigned_area_type factor) {
- horizontal(rectangle, scale_down(horizontal(rectangle), factor));
- vertical(rectangle, scale_down(vertical(rectangle), factor));
+ typename rectangle_interval_type<rectangle_type>::type h = horizontal(rectangle);
+ horizontal(rectangle, scale_down(h, factor));
+ typename rectangle_interval_type<rectangle_type>::type v = vertical(rectangle);
+ vertical(rectangle, scale_down(v, factor));
return rectangle;
}
diff --git a/3party/boost/boost/polygon/rectangle_traits.hpp b/3party/boost/boost/polygon/rectangle_traits.hpp
index 25d934b18f..bd494744af 100644
--- a/3party/boost/boost/polygon/rectangle_traits.hpp
+++ b/3party/boost/boost/polygon/rectangle_traits.hpp
@@ -7,6 +7,9 @@
*/
#ifndef BOOST_POLYGON_RECTANGLE_TRAITS_HPP
#define BOOST_POLYGON_RECTANGLE_TRAITS_HPP
+
+#include "isotropy.hpp"
+
namespace boost { namespace polygon{
template <typename T, typename enable = gtl_yes>
diff --git a/3party/boost/boost/polygon/segment_utils.hpp b/3party/boost/boost/polygon/segment_utils.hpp
index 97d8885fcf..075f7c32d2 100644
--- a/3party/boost/boost/polygon/segment_utils.hpp
+++ b/3party/boost/boost/polygon/segment_utils.hpp
@@ -9,9 +9,14 @@
#ifndef BOOST_POLYGON_SEGMENT_UTILS_HPP
#define BOOST_POLYGON_SEGMENT_UTILS_HPP
+#include <iterator>
#include <set>
#include <vector>
-#include <utility>
+
+#include "detail/scan_arbitrary.hpp"
+#include "isotropy.hpp"
+#include "rectangle_concept.hpp"
+#include "segment_concept.hpp"
namespace boost {
namespace polygon {
diff --git a/3party/boost/boost/polygon/transform.hpp b/3party/boost/boost/polygon/transform.hpp
index 26125258fc..2601cff95a 100644
--- a/3party/boost/boost/polygon/transform.hpp
+++ b/3party/boost/boost/polygon/transform.hpp
@@ -1,4 +1,4 @@
-// Boost.Polygon library point_data.hpp header file
+// Boost.Polygon library transform.hpp header file
// Copyright (c) Intel Corporation 2008.
// Copyright (c) 2008-2012 Simonson Lucanus.
diff --git a/3party/boost/boost/polygon/voronoi_builder.hpp b/3party/boost/boost/polygon/voronoi_builder.hpp
index 918b86af52..48a06a36e1 100644
--- a/3party/boost/boost/polygon/voronoi_builder.hpp
+++ b/3party/boost/boost/polygon/voronoi_builder.hpp
@@ -388,7 +388,7 @@ class voronoi_builder {
site_event_type site1 = it_first->first.left_site();
if (!site1.is_segment() && site3.is_segment() &&
- site3.point1(true) == site1.point0()) {
+ site3.point1() == site1.point0()) {
site3.inverse();
}
diff --git a/3party/boost/boost/polygon/voronoi_geometry_type.hpp b/3party/boost/boost/polygon/voronoi_geometry_type.hpp
index a03570e1b1..1de80e59ef 100644
--- a/3party/boost/boost/polygon/voronoi_geometry_type.hpp
+++ b/3party/boost/boost/polygon/voronoi_geometry_type.hpp
@@ -10,6 +10,8 @@
#ifndef BOOST_POLYGON_VORONOI_GEOMETRY_TYPE
#define BOOST_POLYGON_VORONOI_GEOMETRY_TYPE
+#include <cstddef>
+
namespace boost {
namespace polygon {
// Represents topology type of the voronoi site.
diff --git a/3party/boost/boost/polymorphic_cast.hpp b/3party/boost/boost/polymorphic_cast.hpp
new file mode 100644
index 0000000000..03013c718e
--- /dev/null
+++ b/3party/boost/boost/polymorphic_cast.hpp
@@ -0,0 +1,91 @@
+// boost polymorphic_cast.hpp header file ----------------------------------------------//
+
+// (C) Copyright Kevlin Henney and Dave Abrahams 1999.
+// 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/conversion for Documentation.
+
+// Revision History
+// 09 Jun 14 "cast.hpp" was renamed to "polymorphic_cast.hpp" and
+// inclusion of numeric_cast was removed (Antony Polukhin)
+// 23 Jun 05 numeric_cast removed and redirected to the new verion (Fernando Cacciola)
+// 02 Apr 01 Removed BOOST_NO_LIMITS workarounds and included
+// <boost/limits.hpp> instead (the workaround did not
+// actually compile when BOOST_NO_LIMITS was defined in
+// any case, so we loose nothing). (John Maddock)
+// 21 Jan 01 Undid a bug I introduced yesterday. numeric_cast<> never
+// worked with stock GCC; trying to get it to do that broke
+// vc-stlport.
+// 20 Jan 01 Moved BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS to config.hpp.
+// Removed unused BOOST_EXPLICIT_TARGET macro. Moved
+// boost::detail::type to boost/type.hpp. Made it compile with
+// stock gcc again (Dave Abrahams)
+// 29 Nov 00 Remove nested namespace cast, cleanup spacing before Formal
+// Review (Beman Dawes)
+// 19 Oct 00 Fix numeric_cast for floating-point types (Dave Abrahams)
+// 15 Jul 00 Suppress numeric_cast warnings for GCC, Borland and MSVC
+// (Dave Abrahams)
+// 30 Jun 00 More MSVC6 wordarounds. See comments below. (Dave Abrahams)
+// 28 Jun 00 Removed implicit_cast<>. See comment below. (Beman Dawes)
+// 27 Jun 00 More MSVC6 workarounds
+// 15 Jun 00 Add workarounds for MSVC6
+// 2 Feb 00 Remove bad_numeric_cast ";" syntax error (Doncho Angelov)
+// 26 Jan 00 Add missing throw() to bad_numeric_cast::what(0 (Adam Levar)
+// 29 Dec 99 Change using declarations so usages in other namespaces work
+// correctly (Dave Abrahams)
+// 23 Sep 99 Change polymorphic_downcast assert to also detect M.I. errors
+// as suggested Darin Adler and improved by Valentin Bonnard.
+// 2 Sep 99 Remove controversial asserts, simplify, rename.
+// 30 Aug 99 Move to cast.hpp, replace value_cast with numeric_cast,
+// place in nested namespace.
+// 3 Aug 99 Initial version
+
+#ifndef BOOST_POLYMORPHIC_CAST_HPP
+#define BOOST_POLYMORPHIC_CAST_HPP
+
+# include <boost/config.hpp>
+# include <boost/assert.hpp>
+# include <typeinfo>
+
+namespace boost
+{
+// See the documentation for descriptions of how to choose between
+// static_cast<>, dynamic_cast<>, polymorphic_cast<> and polymorphic_downcast<>
+
+// polymorphic_cast --------------------------------------------------------//
+
+ // Runtime checked polymorphic downcasts and crosscasts.
+ // Suggested in The C++ Programming Language, 3rd Ed, Bjarne Stroustrup,
+ // section 15.8 exercise 1, page 425.
+
+ template <class Target, class Source>
+ inline Target polymorphic_cast(Source* x)
+ {
+ Target tmp = dynamic_cast<Target>(x);
+ if ( tmp == 0 ) throw std::bad_cast();
+ return tmp;
+ }
+
+// polymorphic_downcast ----------------------------------------------------//
+
+ // BOOST_ASSERT() checked polymorphic downcast. Crosscasts prohibited.
+
+ // WARNING: Because this cast uses BOOST_ASSERT(), it violates
+ // the One Definition Rule if used in multiple translation units
+ // where BOOST_DISABLE_ASSERTS, BOOST_ENABLE_ASSERT_HANDLER
+ // NDEBUG are defined inconsistently.
+
+ // Contributed by Dave Abrahams
+
+ template <class Target, class Source>
+ inline Target polymorphic_downcast(Source* x)
+ {
+ BOOST_ASSERT( dynamic_cast<Target>(x) == x ); // detect logic error
+ return static_cast<Target>(x);
+ }
+
+} // namespace boost
+
+#endif // BOOST_POLYMORPHIC_CAST_HPP
diff --git a/3party/boost/boost/predef.h b/3party/boost/boost/predef.h
new file mode 100644
index 0000000000..753cd61e8b
--- /dev/null
+++ b/3party/boost/boost/predef.h
@@ -0,0 +1,19 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_H
+#define BOOST_PREDEF_H
+
+#include <boost/predef/language.h>
+#include <boost/predef/architecture.h>
+#include <boost/predef/compiler.h>
+#include <boost/predef/library.h>
+#include <boost/predef/os.h>
+#include <boost/predef/other.h>
+#include <boost/predef/platform.h>
+
+#endif
diff --git a/3party/boost/boost/predef/architecture.h b/3party/boost/boost/predef/architecture.h
new file mode 100644
index 0000000000..b32701ecea
--- /dev/null
+++ b/3party/boost/boost/predef/architecture.h
@@ -0,0 +1,30 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_H
+#define BOOST_PREDEF_ARCHITECTURE_H
+
+#include <boost/predef/architecture/alpha.h>
+#include <boost/predef/architecture/arm.h>
+#include <boost/predef/architecture/blackfin.h>
+#include <boost/predef/architecture/convex.h>
+#include <boost/predef/architecture/ia64.h>
+#include <boost/predef/architecture/m68k.h>
+#include <boost/predef/architecture/mips.h>
+#include <boost/predef/architecture/parisc.h>
+#include <boost/predef/architecture/ppc.h>
+#include <boost/predef/architecture/pyramid.h>
+#include <boost/predef/architecture/rs6k.h>
+#include <boost/predef/architecture/sparc.h>
+#include <boost/predef/architecture/superh.h>
+#include <boost/predef/architecture/sys370.h>
+#include <boost/predef/architecture/sys390.h>
+#include <boost/predef/architecture/x86.h>
+#include <boost/predef/architecture/z.h>
+/*#include <boost/predef/architecture/.h>*/
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/alpha.h b/3party/boost/boost/predef/architecture/alpha.h
new file mode 100644
index 0000000000..6365ec45e4
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/alpha.h
@@ -0,0 +1,60 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_ALPHA_H
+#define BOOST_PREDEF_ARCHITECTURE_ALPHA_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_ALPHA`]
+
+[@http://en.wikipedia.org/wiki/DEC_Alpha DEC Alpha] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+ [[`__alpha__`] [__predef_detection__]]
+ [[`__alpha`] [__predef_detection__]]
+ [[`_M_ALPHA`] [__predef_detection__]]
+
+ [[`__alpha_ev4__`] [4.0.0]]
+ [[`__alpha_ev5__`] [5.0.0]]
+ [[`__alpha_ev6__`] [6.0.0]]
+ ]
+ */
+
+#define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__alpha__) || defined(__alpha) || \
+ defined(_M_ALPHA)
+# undef BOOST_ARCH_ALPHA
+# if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev4__)
+# define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(4,0,0)
+# endif
+# if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev5__)
+# define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(5,0,0)
+# endif
+# if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev6__)
+# define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(6,0,0)
+# endif
+# if !defined(BOOST_ARCH_ALPHA)
+# define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_ALPHA
+# define BOOST_ARCH_ALPHA_AVAILABLE
+#endif
+
+#define BOOST_ARCH_ALPHA_NAME "DEC Alpha"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_ALPHA,BOOST_ARCH_ALPHA_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/arm.h b/3party/boost/boost/predef/architecture/arm.h
new file mode 100644
index 0000000000..4974895b2c
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/arm.h
@@ -0,0 +1,71 @@
+/*
+Copyright Rene Rivera 2008-2013
+Copyright Franz Detro 2014
+Copyright (c) Microsoft Corporation 2014
+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_PREDEF_ARCHITECTURE_ARM_H
+#define BOOST_PREDEF_ARCHITECTURE_ARM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_ARM`]
+
+[@http://en.wikipedia.org/wiki/ARM_architecture ARM] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__arm__`] [__predef_detection__]]
+ [[`__arm64`] [__predef_detection__]]
+ [[`__thumb__`] [__predef_detection__]]
+ [[`__TARGET_ARCH_ARM`] [__predef_detection__]]
+ [[`__TARGET_ARCH_THUMB`] [__predef_detection__]]
+ [[`_M_ARM`] [__predef_detection__]]
+
+ [[`__arm64`] [8.0.0]]
+ [[`__TARGET_ARCH_ARM`] [V.0.0]]
+ [[`__TARGET_ARCH_THUMB`] [V.0.0]]
+ [[`_M_ARM`] [V.0.0]]
+ ]
+ */
+
+#define BOOST_ARCH_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__arm__) || defined(__arm64) || defined(__thumb__) || \
+ defined(__TARGET_ARCH_ARM) || defined(__TARGET_ARCH_THUMB) || \
+ defined(_M_ARM)
+# undef BOOST_ARCH_ARM
+# if !defined(BOOST_ARCH_ARM) && defined(__arm64)
+# define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(8,0,0)
+# endif
+# if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_ARM)
+# define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_ARM,0,0)
+# endif
+# if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_THUMB)
+# define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_THUMB,0,0)
+# endif
+# if !defined(BOOST_ARCH_ARM) && defined(_M_ARM)
+# define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(_M_ARM,0,0)
+# endif
+# if !defined(BOOST_ARCH_ARM)
+# define BOOST_ARCH_ARM BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_ARM
+# define BOOST_ARCH_ARM_AVAILABLE
+#endif
+
+#define BOOST_ARCH_ARM_NAME "ARM"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_ARM,BOOST_ARCH_ARM_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/blackfin.h b/3party/boost/boost/predef/architecture/blackfin.h
new file mode 100644
index 0000000000..ae3407e935
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/blackfin.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2013
+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_PREDEF_ARCHITECTURE_BLACKFIN_H
+#define BOOST_PREDEF_ARCHITECTURE_BLACKFIN_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_BLACKFIN`]
+
+Blackfin Processors from Analog Devices.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__bfin__`] [__predef_detection__]]
+ [[`__BFIN__`] [__predef_detection__]]
+ [[`bfin`] [__predef_detection__]]
+ [[`BFIN`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_ARCH_BLACKFIN BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__bfin__) || defined(__BFIN__) || \
+ defined(bfin) || defined(BFIN)
+# undef BOOST_ARCH_BLACKFIN
+# define BOOST_ARCH_BLACKFIN BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_BLACKFIN
+# define BOOST_ARCH_BLACKFIN_AVAILABLE
+#endif
+
+#define BOOST_ARCH_BLACKFIN_NAME "Blackfin"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_BLACKFIN,BOOST_ARCH_BLACKFIN_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/convex.h b/3party/boost/boost/predef/architecture/convex.h
new file mode 100644
index 0000000000..3b425a04cf
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/convex.h
@@ -0,0 +1,67 @@
+/*
+Copyright Rene Rivera 2011-2013
+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_PREDEF_ARCHITECTURE_CONVEX_H
+#define BOOST_PREDEF_ARCHITECTURE_CONVEX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_CONVEX`]
+
+[@http://en.wikipedia.org/wiki/Convex_Computer Convex Computer] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__convex__`] [__predef_detection__]]
+
+ [[`__convex_c1__`] [1.0.0]]
+ [[`__convex_c2__`] [2.0.0]]
+ [[`__convex_c32__`] [3.2.0]]
+ [[`__convex_c34__`] [3.4.0]]
+ [[`__convex_c38__`] [3.8.0]]
+ ]
+ */
+
+#define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__convex__)
+# undef BOOST_ARCH_CONVEX
+# if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c1__)
+# define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(1,0,0)
+# endif
+# if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c2__)
+# define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(2,0,0)
+# endif
+# if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c32__)
+# define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,2,0)
+# endif
+# if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c34__)
+# define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,4,0)
+# endif
+# if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c38__)
+# define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,8,0)
+# endif
+# if !defined(BOOST_ARCH_CONVEX)
+# define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_CONVEX
+# define BOOST_ARCH_CONVEX_AVAILABLE
+#endif
+
+#define BOOST_ARCH_CONVEX_NAME "Convex Computer"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_CONVEX,BOOST_ARCH_CONVEX_NAME)
+
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/ia64.h b/3party/boost/boost/predef/architecture/ia64.h
new file mode 100644
index 0000000000..4b5a10331f
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/ia64.h
@@ -0,0 +1,49 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_IA64_H
+#define BOOST_PREDEF_ARCHITECTURE_IA64_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_IA64`]
+
+[@http://en.wikipedia.org/wiki/Ia64 Intel Itanium 64] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__ia64__`] [__predef_detection__]]
+ [[`_IA64`] [__predef_detection__]]
+ [[`__IA64__`] [__predef_detection__]]
+ [[`__ia64`] [__predef_detection__]]
+ [[`_M_IA64`] [__predef_detection__]]
+ [[`__itanium__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_ARCH_IA64 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__ia64__) || defined(_IA64) || \
+ defined(__IA64__) || defined(__ia64) || \
+ defined(_M_IA64) || defined(__itanium__)
+# undef BOOST_ARCH_IA64
+# define BOOST_ARCH_IA64 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_IA64
+# define BOOST_ARCH_IA64_AVAILABLE
+#endif
+
+#define BOOST_ARCH_IA64_NAME "Intel Itanium 64"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_IA64,BOOST_ARCH_IA64_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/m68k.h b/3party/boost/boost/predef/architecture/m68k.h
new file mode 100644
index 0000000000..09c3cd3a02
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/m68k.h
@@ -0,0 +1,83 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_M68K_H
+#define BOOST_PREDEF_ARCHITECTURE_M68K_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_M68K`]
+
+[@http://en.wikipedia.org/wiki/M68k Motorola 68k] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__m68k__`] [__predef_detection__]]
+ [[`M68000`] [__predef_detection__]]
+
+ [[`__mc68060__`] [6.0.0]]
+ [[`mc68060`] [6.0.0]]
+ [[`__mc68060`] [6.0.0]]
+ [[`__mc68040__`] [4.0.0]]
+ [[`mc68040`] [4.0.0]]
+ [[`__mc68040`] [4.0.0]]
+ [[`__mc68030__`] [3.0.0]]
+ [[`mc68030`] [3.0.0]]
+ [[`__mc68030`] [3.0.0]]
+ [[`__mc68020__`] [2.0.0]]
+ [[`mc68020`] [2.0.0]]
+ [[`__mc68020`] [2.0.0]]
+ [[`__mc68010__`] [1.0.0]]
+ [[`mc68010`] [1.0.0]]
+ [[`__mc68010`] [1.0.0]]
+ [[`__mc68000__`] [0.0.1]]
+ [[`mc68000`] [0.0.1]]
+ [[`__mc68000`] [0.0.1]]
+ ]
+ */
+
+#define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__m68k__) || defined(M68000)
+# undef BOOST_ARCH_M68K
+# if !defined(BOOST_ARCH_M68K) && (defined(__mc68060__) || defined(mc68060) || defined(__mc68060))
+# define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(6,0,0)
+# endif
+# if !defined(BOOST_ARCH_M68K) && (defined(__mc68040__) || defined(mc68040) || defined(__mc68040))
+# define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(4,0,0)
+# endif
+# if !defined(BOOST_ARCH_M68K) && (defined(__mc68030__) || defined(mc68030) || defined(__mc68030))
+# define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(3,0,0)
+# endif
+# if !defined(BOOST_ARCH_M68K) && (defined(__mc68020__) || defined(mc68020) || defined(__mc68020))
+# define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(2,0,0)
+# endif
+# if !defined(BOOST_ARCH_M68K) && (defined(__mc68010__) || defined(mc68010) || defined(__mc68010))
+# define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(1,0,0)
+# endif
+# if !defined(BOOST_ARCH_M68K) && (defined(__mc68000__) || defined(mc68000) || defined(__mc68000))
+# define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# if !defined(BOOST_ARCH_M68K)
+# define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_M68K
+# define BOOST_ARCH_M68K_AVAILABLE
+#endif
+
+#define BOOST_ARCH_M68K_NAME "Motorola 68k"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_M68K,BOOST_ARCH_M68K_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/mips.h b/3party/boost/boost/predef/architecture/mips.h
new file mode 100644
index 0000000000..ae88428c28
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/mips.h
@@ -0,0 +1,74 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_MIPS_H
+#define BOOST_PREDEF_ARCHITECTURE_MIPS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_MIPS`]
+
+[@http://en.wikipedia.org/wiki/MIPS_architecture MIPS] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__mips__`] [__predef_detection__]]
+ [[`__mips`] [__predef_detection__]]
+ [[`__MIPS__`] [__predef_detection__]]
+
+ [[`__mips`] [V.0.0]]
+ [[`_MIPS_ISA_MIPS1`] [1.0.0]]
+ [[`_R3000`] [1.0.0]]
+ [[`_MIPS_ISA_MIPS2`] [2.0.0]]
+ [[`__MIPS_ISA2__`] [2.0.0]]
+ [[`_R4000`] [2.0.0]]
+ [[`_MIPS_ISA_MIPS3`] [3.0.0]]
+ [[`__MIPS_ISA3__`] [3.0.0]]
+ [[`_MIPS_ISA_MIPS4`] [4.0.0]]
+ [[`__MIPS_ISA4__`] [4.0.0]]
+ ]
+ */
+
+#define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__mips__) || defined(__mips) || \
+ defined(__MIPS__)
+# undef BOOST_ARCH_MIPS
+# if !defined(BOOST_ARCH_MIPS) && (defined(__mips))
+# define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(__mips,0,0)
+# endif
+# if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS1) || defined(_R3000))
+# define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(1,0,0)
+# endif
+# if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS2) || defined(__MIPS_ISA2__) || defined(_R4000))
+# define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(2,0,0)
+# endif
+# if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS3) || defined(__MIPS_ISA3__))
+# define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(3,0,0)
+# endif
+# if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS4) || defined(__MIPS_ISA4__))
+# define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(4,0,0)
+# endif
+# if !defined(BOOST_ARCH_MIPS)
+# define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_MIPS
+# define BOOST_ARCH_MIPS_AVAILABLE
+#endif
+
+#define BOOST_ARCH_MIPS_NAME "MIPS"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_MIPS,BOOST_ARCH_MIPS_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/parisc.h b/3party/boost/boost/predef/architecture/parisc.h
new file mode 100644
index 0000000000..e843dd2106
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/parisc.h
@@ -0,0 +1,65 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_PARISC_H
+#define BOOST_PREDEF_ARCHITECTURE_PARISC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PARISK`]
+
+[@http://en.wikipedia.org/wiki/PA-RISC_family HP/PA RISC] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__hppa__`] [__predef_detection__]]
+ [[`__hppa`] [__predef_detection__]]
+ [[`__HPPA__`] [__predef_detection__]]
+
+ [[`_PA_RISC1_0`] [1.0.0]]
+ [[`_PA_RISC1_1`] [1.1.0]]
+ [[`__HPPA11__`] [1.1.0]]
+ [[`__PA7100__`] [1.1.0]]
+ [[`_PA_RISC2_0`] [2.0.0]]
+ [[`__RISC2_0__`] [2.0.0]]
+ [[`__HPPA20__`] [2.0.0]]
+ [[`__PA8000__`] [2.0.0]]
+ ]
+ */
+
+#define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__hppa__) || defined(__hppa) || defined(__HPPA__)
+# undef BOOST_ARCH_PARISC
+# if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC1_0))
+# define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(1,0,0)
+# endif
+# if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC1_1) || defined(__HPPA11__) || defined(__PA7100__))
+# define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(1,1,0)
+# endif
+# if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC2_0) || defined(__RISC2_0__) || defined(__HPPA20__) || defined(__PA8000__))
+# define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(2,0,0)
+# endif
+# if !defined(BOOST_ARCH_PARISC)
+# define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_PARISC
+# define BOOST_ARCH_PARISC_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PARISC_NAME "HP/PA RISC"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PARISC,BOOST_ARCH_PARISC_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/ppc.h b/3party/boost/boost/predef/architecture/ppc.h
new file mode 100644
index 0000000000..cc743e74f6
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/ppc.h
@@ -0,0 +1,73 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_PPC_H
+#define BOOST_PREDEF_ARCHITECTURE_PPC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PPC`]
+
+[@http://en.wikipedia.org/wiki/PowerPC PowerPC] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__powerpc`] [__predef_detection__]]
+ [[`__powerpc__`] [__predef_detection__]]
+ [[`__POWERPC__`] [__predef_detection__]]
+ [[`__ppc__`] [__predef_detection__]]
+ [[`_M_PPC`] [__predef_detection__]]
+ [[`_ARCH_PPC`] [__predef_detection__]]
+ [[`__PPCGECKO__`] [__predef_detection__]]
+ [[`__PPCBROADWAY__`] [__predef_detection__]]
+ [[`_XENON`] [__predef_detection__]]
+
+ [[`__ppc601__`] [6.1.0]]
+ [[`_ARCH_601`] [6.1.0]]
+ [[`__ppc603__`] [6.3.0]]
+ [[`_ARCH_603`] [6.3.0]]
+ [[`__ppc604__`] [6.4.0]]
+ [[`__ppc604__`] [6.4.0]]
+ ]
+ */
+
+#define BOOST_ARCH_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__powerpc) || defined(__powerpc__) || \
+ defined(__POWERPC__) || defined(__ppc__) || \
+ defined(_M_PPC) || defined(_ARCH_PPC) || \
+ defined(__PPCGECKO__) || defined(__PPCBROADWAY__) || \
+ defined(_XENON)
+# undef BOOST_ARCH_PPC
+# if !defined (BOOST_ARCH_PPC) && (defined(__ppc601__) || defined(_ARCH_601))
+# define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,1,0)
+# endif
+# if !defined (BOOST_ARCH_PPC) && (defined(__ppc603__) || defined(_ARCH_603))
+# define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,3,0)
+# endif
+# if !defined (BOOST_ARCH_PPC) && (defined(__ppc604__) || defined(__ppc604__))
+# define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,4,0)
+# endif
+# if !defined (BOOST_ARCH_PPC)
+# define BOOST_ARCH_PPC BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_PPC
+# define BOOST_ARCH_PPC_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PPC_NAME "PowerPC"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PPC,BOOST_ARCH_PPC_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/pyramid.h b/3party/boost/boost/predef/architecture/pyramid.h
new file mode 100644
index 0000000000..26d5293e68
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/pyramid.h
@@ -0,0 +1,43 @@
+/*
+Copyright Rene Rivera 2011-2013
+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_PREDEF_ARCHITECTURE_PYRAMID_H
+#define BOOST_PREDEF_ARCHITECTURE_PYRAMID_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PYRAMID`]
+
+Pyramid 9810 architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`pyr`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_ARCH_PYRAMID BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(pyr)
+# undef BOOST_ARCH_PYRAMID
+# define BOOST_ARCH_PYRAMID BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_PYRAMID
+# define BOOST_ARCH_PYRAMID_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PYRAMID_NAME "Pyramid 9810"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PYRAMID,BOOST_ARCH_PYRAMID_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/rs6k.h b/3party/boost/boost/predef/architecture/rs6k.h
new file mode 100644
index 0000000000..20dd64bac1
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/rs6k.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_RS6K_H
+#define BOOST_PREDEF_ARCHITECTURE_RS6K_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_RS6000`]
+
+[@http://en.wikipedia.org/wiki/RS/6000 RS/6000] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__THW_RS6000`] [__predef_detection__]]
+ [[`_IBMR2`] [__predef_detection__]]
+ [[`_POWER`] [__predef_detection__]]
+ [[`_ARCH_PWR`] [__predef_detection__]]
+ [[`_ARCH_PWR2`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_ARCH_RS6000 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__THW_RS6000) || defined(_IBMR2) || \
+ defined(_POWER) || defined(_ARCH_PWR) || \
+ defined(_ARCH_PWR2)
+# undef BOOST_ARCH_RS6000
+# define BOOST_ARCH_RS6000 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_RS6000
+# define BOOST_ARCH_RS6000_AVAILABLE
+#endif
+
+#define BOOST_ARCH_RS6000_NAME "RS/6000"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_RS6000,BOOST_ARCH_RS6000_NAME)
+
+#define BOOST_ARCH_PWR BOOST_ARCH_RS6000
+
+#if BOOST_ARCH_PWR
+# define BOOST_ARCH_PWR_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PWR_NAME BOOST_ARCH_RS6000_NAME
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/sparc.h b/3party/boost/boost/predef/architecture/sparc.h
new file mode 100644
index 0000000000..9c91cdacad
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/sparc.h
@@ -0,0 +1,55 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_ARCHITECTURE_SPARC_H
+#define BOOST_PREDEF_ARCHITECTURE_SPARC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SPARC`]
+
+[@http://en.wikipedia.org/wiki/SPARC SPARC] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__sparc__`] [__predef_detection__]]
+ [[`__sparc`] [__predef_detection__]]
+
+ [[`__sparcv9`] [9.0.0]]
+ [[`__sparcv8`] [8.0.0]]
+ ]
+ */
+
+#define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sparc__) || defined(__sparc)
+# undef BOOST_ARCH_SPARC
+# if !defined(BOOST_ARCH_SPARC) && defined(__sparcv9)
+# define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER(9,0,0)
+# endif
+# if !defined(BOOST_ARCH_SPARC) && defined(__sparcv8)
+# define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER(8,0,0)
+# endif
+# if !defined(BOOST_ARCH_SPARC)
+# define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_SPARC
+# define BOOST_ARCH_SPARC_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SPARC_NAME "SPARC"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SPARC,BOOST_ARCH_SPARC_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/superh.h b/3party/boost/boost/predef/architecture/superh.h
new file mode 100644
index 0000000000..ef88242d1a
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/superh.h
@@ -0,0 +1,68 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_SUPERH_H
+#define BOOST_PREDEF_ARCHITECTURE_SUPERH_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SH`]
+
+[@http://en.wikipedia.org/wiki/SuperH SuperH] architecture:
+If available versions \[1-5\] are specifically detected.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__sh__`] [__predef_detection__]]
+
+ [[`__SH5__`] [5.0.0]]
+ [[`__SH4__`] [4.0.0]]
+ [[`__sh3__`] [3.0.0]]
+ [[`__SH3__`] [3.0.0]]
+ [[`__sh2__`] [2.0.0]]
+ [[`__sh1__`] [1.0.0]]
+ ]
+ */
+
+#define BOOST_ARCH_SH BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sh__)
+# undef BOOST_ARCH_SH
+# if !defined(BOOST_ARCH_SH) && (defined(__SH5__))
+# define BOOST_ARCH_SH BOOST_VERSION_NUMBER(5,0,0)
+# endif
+# if !defined(BOOST_ARCH_SH) && (defined(__SH4__))
+# define BOOST_ARCH_SH BOOST_VERSION_NUMBER(4,0,0)
+# endif
+# if !defined(BOOST_ARCH_SH) && (defined(__sh3__) || defined(__SH3__))
+# define BOOST_ARCH_SH BOOST_VERSION_NUMBER(3,0,0)
+# endif
+# if !defined(BOOST_ARCH_SH) && (defined(__sh2__))
+# define BOOST_ARCH_SH BOOST_VERSION_NUMBER(2,0,0)
+# endif
+# if !defined(BOOST_ARCH_SH) && (defined(__sh1__))
+# define BOOST_ARCH_SH BOOST_VERSION_NUMBER(1,0,0)
+# endif
+# if !defined(BOOST_ARCH_SH)
+# define BOOST_ARCH_SH BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_SH
+# define BOOST_ARCH_SH_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SH_NAME "SuperH"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SH,BOOST_ARCH_SH_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/sys370.h b/3party/boost/boost/predef/architecture/sys370.h
new file mode 100644
index 0000000000..507ee8637e
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/sys370.h
@@ -0,0 +1,44 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_SYS370_H
+#define BOOST_PREDEF_ARCHITECTURE_SYS370_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SYS370`]
+
+[@http://en.wikipedia.org/wiki/System/370 System/370] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__370__`] [__predef_detection__]]
+ [[`__THW_370__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_ARCH_SYS370 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__370__) || defined(__THW_370__)
+# undef BOOST_ARCH_SYS370
+# define BOOST_ARCH_SYS370 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_SYS370
+# define BOOST_ARCH_SYS370_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SYS370_NAME "System/370"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SYS370,BOOST_ARCH_SYS370_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/sys390.h b/3party/boost/boost/predef/architecture/sys390.h
new file mode 100644
index 0000000000..070117a70d
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/sys390.h
@@ -0,0 +1,44 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_SYS390_H
+#define BOOST_PREDEF_ARCHITECTURE_SYS390_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SYS390`]
+
+[@http://en.wikipedia.org/wiki/System/390 System/390] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__s390__`] [__predef_detection__]]
+ [[`__s390x__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_ARCH_SYS390 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__s390__) || defined(__s390x__)
+# undef BOOST_ARCH_SYS390
+# define BOOST_ARCH_SYS390 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_SYS390
+# define BOOST_ARCH_SYS390_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SYS390_NAME "System/390"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SYS390,BOOST_ARCH_SYS390_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/x86.h b/3party/boost/boost/predef/architecture/x86.h
new file mode 100644
index 0000000000..fa9a025c4c
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/x86.h
@@ -0,0 +1,38 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_X86_H
+#define BOOST_PREDEF_ARCHITECTURE_X86_H
+
+#include <boost/predef/architecture/x86/32.h>
+#include <boost/predef/architecture/x86/64.h>
+
+/*`
+[heading `BOOST_ARCH_X86`]
+
+[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture. This is
+a category to indicate that either `BOOST_ARCH_X86_32` or
+`BOOST_ARCH_X86_64` is detected.
+ */
+
+#define BOOST_ARCH_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_ARCH_X86_32 || BOOST_ARCH_X86_64
+# undef BOOST_ARCH_X86
+# define BOOST_ARCH_X86 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_X86
+# define BOOST_ARCH_X86_AVAILABLE
+#endif
+
+#define BOOST_ARCH_X86_NAME "Intel x86"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86,BOOST_ARCH_X86_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/x86/32.h b/3party/boost/boost/predef/architecture/x86/32.h
new file mode 100644
index 0000000000..b796f841c4
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/x86/32.h
@@ -0,0 +1,87 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_X86_32_H
+#define BOOST_PREDEF_ARCHITECTURE_X86_32_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_X86_32`]
+
+[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture:
+If available versions \[3-6\] are specifically detected.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`i386`] [__predef_detection__]]
+ [[`__i386__`] [__predef_detection__]]
+ [[`__i486__`] [__predef_detection__]]
+ [[`__i586__`] [__predef_detection__]]
+ [[`__i686__`] [__predef_detection__]]
+ [[`__i386`] [__predef_detection__]]
+ [[`_M_IX86`] [__predef_detection__]]
+ [[`_X86_`] [__predef_detection__]]
+ [[`__THW_INTEL__`] [__predef_detection__]]
+ [[`__I86__`] [__predef_detection__]]
+ [[`__INTEL__`] [__predef_detection__]]
+
+ [[`__I86__`] [V.0.0]]
+ [[`_M_IX86`] [V.0.0]]
+ [[`__i686__`] [6.0.0]]
+ [[`__i586__`] [5.0.0]]
+ [[`__i486__`] [4.0.0]]
+ [[`__i386__`] [3.0.0]]
+ ]
+ */
+
+#define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(i386) || defined(__i386__) || \
+ defined(__i486__) || defined(__i586__) || \
+ defined(__i686__) || defined(__i386) || \
+ defined(_M_IX86) || defined(_X86_) || \
+ defined(__THW_INTEL__) || defined(__I86__) || \
+ defined(__INTEL__)
+# undef BOOST_ARCH_X86_32
+# if !defined(BOOST_ARCH_X86_32) && defined(__I86__)
+# define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(__I86__,0,0)
+# endif
+# if !defined(BOOST_ARCH_X86_32) && defined(_M_IX86)
+# define BOOST_ARCH_X86_32 BOOST_PREDEF_MAKE_10_VV00(_M_IX86)
+# endif
+# if !defined(BOOST_ARCH_X86_32) && defined(__i686__)
+# define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(6,0,0)
+# endif
+# if !defined(BOOST_ARCH_X86_32) && defined(__i586__)
+# define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(5,0,0)
+# endif
+# if !defined(BOOST_ARCH_X86_32) && defined(__i486__)
+# define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(4,0,0)
+# endif
+# if !defined(BOOST_ARCH_X86_32) && defined(__i386__)
+# define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(3,0,0)
+# endif
+# if !defined(BOOST_ARCH_X86_32)
+# define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_ARCH_X86_32
+# define BOOST_ARCH_X86_32_AVAILABLE
+#endif
+
+#define BOOST_ARCH_X86_32_NAME "Intel x86-32"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86_32,BOOST_ARCH_X86_32_NAME)
+
+#include <boost/predef/architecture/x86.h>
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/x86/64.h b/3party/boost/boost/predef/architecture/x86/64.h
new file mode 100644
index 0000000000..a035c88b15
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/x86/64.h
@@ -0,0 +1,50 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_X86_64_H
+#define BOOST_PREDEF_ARCHITECTURE_X86_64_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_X86_64`]
+
+[@http://en.wikipedia.org/wiki/Ia64 Intel IA-64] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__x86_64`] [__predef_detection__]]
+ [[`__x86_64__`] [__predef_detection__]]
+ [[`__amd64__`] [__predef_detection__]]
+ [[`__amd64`] [__predef_detection__]]
+ [[`_M_X64`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_ARCH_X86_64 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__x86_64) || defined(__x86_64__) || \
+ defined(__amd64__) || defined(__amd64) || \
+ defined(_M_X64)
+# undef BOOST_ARCH_X86_64
+# define BOOST_ARCH_X86_64 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_X86_64
+# define BOOST_ARCH_X86_64_AVAILABLE
+#endif
+
+#define BOOST_ARCH_X86_64_NAME "Intel x86-64"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86_64,BOOST_ARCH_X86_64_NAME)
+
+#include <boost/predef/architecture/x86.h>
+
+#endif
diff --git a/3party/boost/boost/predef/architecture/z.h b/3party/boost/boost/predef/architecture/z.h
new file mode 100644
index 0000000000..768f342772
--- /dev/null
+++ b/3party/boost/boost/predef/architecture/z.h
@@ -0,0 +1,43 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_ARCHITECTURE_Z_H
+#define BOOST_PREDEF_ARCHITECTURE_Z_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_Z`]
+
+[@http://en.wikipedia.org/wiki/Z/Architecture z/Architecture] architecture.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__SYSC_ZARCH__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_ARCH_Z BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SYSC_ZARCH__)
+# undef BOOST_ARCH_Z
+# define BOOST_ARCH_Z BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_Z
+# define BOOST_ARCH_Z_AVAILABLE
+#endif
+
+#define BOOST_ARCH_Z_NAME "z/Architecture"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_Z,BOOST_ARCH_Z_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler.h b/3party/boost/boost/predef/compiler.h
new file mode 100644
index 0000000000..12c4dfcb88
--- /dev/null
+++ b/3party/boost/boost/predef/compiler.h
@@ -0,0 +1,41 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_COMPILER_H
+#define BOOST_PREDEF_COMPILER_H
+
+#include <boost/predef/compiler/borland.h>
+#include <boost/predef/compiler/clang.h>
+#include <boost/predef/compiler/comeau.h>
+#include <boost/predef/compiler/compaq.h>
+#include <boost/predef/compiler/diab.h>
+#include <boost/predef/compiler/digitalmars.h>
+#include <boost/predef/compiler/dignus.h>
+#include <boost/predef/compiler/edg.h>
+#include <boost/predef/compiler/ekopath.h>
+#include <boost/predef/compiler/gcc_xml.h>
+#include <boost/predef/compiler/gcc.h>
+#include <boost/predef/compiler/greenhills.h>
+#include <boost/predef/compiler/hp_acc.h>
+#include <boost/predef/compiler/iar.h>
+#include <boost/predef/compiler/ibm.h>
+#include <boost/predef/compiler/intel.h>
+#include <boost/predef/compiler/kai.h>
+#include <boost/predef/compiler/llvm.h>
+#include <boost/predef/compiler/metaware.h>
+#include <boost/predef/compiler/metrowerks.h>
+#include <boost/predef/compiler/microtec.h>
+#include <boost/predef/compiler/mpw.h>
+#include <boost/predef/compiler/palm.h>
+#include <boost/predef/compiler/pgi.h>
+#include <boost/predef/compiler/sgi_mipspro.h>
+#include <boost/predef/compiler/sunpro.h>
+#include <boost/predef/compiler/tendra.h>
+#include <boost/predef/compiler/visualc.h>
+#include <boost/predef/compiler/watcom.h>
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/borland.h b/3party/boost/boost/predef/compiler/borland.h
new file mode 100644
index 0000000000..01b5de7c6e
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/borland.h
@@ -0,0 +1,64 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_BORLAND_H
+#define BOOST_PREDEF_COMPILER_BORLAND_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_BORLAND`]
+
+[@http://en.wikipedia.org/wiki/C_plus_plus_builder Borland C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__BORLANDC__`] [__predef_detection__]]
+ [[`__CODEGEARC__`] [__predef_detection__]]
+
+ [[`__BORLANDC__`] [V.R.P]]
+ [[`__CODEGEARC__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_BORLAND BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__BORLANDC__) || defined(__CODEGEARC__)
+# if !defined(BOOST_COMP_BORLAND_DETECTION) && (defined(__CODEGEARC__))
+# define BOOST_COMP_BORLAND_DETECTION BOOST_PREDEF_MAKE_0X_VVRP(__CODEGEARC__)
+# endif
+# if !defined(BOOST_COMP_BORLAND_DETECTION)
+# define BOOST_COMP_BORLAND_DETECTION BOOST_PREDEF_MAKE_0X_VVRP(__BORLANDC__)
+# endif
+#endif
+
+#ifdef BOOST_COMP_BORLAND_DETECTION
+# define BOOST_COMP_BORLAND_AVAILABLE
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_BORLAND_EMULATED BOOST_COMP_BORLAND_DETECTION
+# else
+# undef BOOST_COMP_BORLAND
+# define BOOST_COMP_BORLAND BOOST_COMP_BORLAND_DETECTION
+# endif
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_BORLAND_NAME "Borland C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_BORLAND,BOOST_COMP_BORLAND_NAME)
+
+#ifdef BOOST_COMP_BORLAND_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_BORLAND_EMULATED,BOOST_COMP_BORLAND_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/clang.h b/3party/boost/boost/predef/compiler/clang.h
new file mode 100644
index 0000000000..87dd033c57
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/clang.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_CLANG_H
+#define BOOST_PREDEF_COMPILER_CLANG_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_CLANG`]
+
+[@http://en.wikipedia.org/wiki/Clang Clang] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__clang__`] [__predef_detection__]]
+
+ [[`__clang_major__`, `__clang_minor__`, `__clang_patchlevel__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_CLANG BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__clang__)
+# define BOOST_COMP_CLANG_DETECTION BOOST_VERSION_NUMBER(__clang_major__,__clang_minor__,__clang_patchlevel__)
+#endif
+
+#ifdef BOOST_COMP_CLANG_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_CLANG_EMULATED BOOST_COMP_CLANG_DETECTION
+# else
+# undef BOOST_COMP_CLANG
+# define BOOST_COMP_CLANG BOOST_COMP_CLANG_DETECTION
+# endif
+# define BOOST_COMP_CLANG_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_CLANG_NAME "Clang"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_CLANG,BOOST_COMP_CLANG_NAME)
+
+#ifdef BOOST_COMP_CLANG_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_CLANG_EMULATED,BOOST_COMP_CLANG_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/comeau.h b/3party/boost/boost/predef/compiler/comeau.h
new file mode 100644
index 0000000000..386218404d
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/comeau.h
@@ -0,0 +1,62 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_COMEAU_H
+#define BOOST_PREDEF_COMPILER_COMEAU_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+#define BOOST_COMP_COMO BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+/*`
+[heading `BOOST_COMP_COMO`]
+
+[@http://en.wikipedia.org/wiki/Comeau_C/C%2B%2B Comeau C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__COMO__`] [__predef_detection__]]
+
+ [[`__COMO_VERSION__`] [V.R.P]]
+ ]
+ */
+
+#if defined(__COMO__)
+# if !defined(BOOST_COMP_COMO_DETECTION) && defined(__CONO_VERSION__)
+# define BOOST_COMP_COMO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__COMO_VERSION__)
+# endif
+# if !defined(BOOST_COMP_COMO_DETECTION)
+# define BOOST_COMP_COMO_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_COMO_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_COMO_EMULATED BOOST_COMP_COMO_DETECTION
+# else
+# undef BOOST_COMP_COMO
+# define BOOST_COMP_COMO BOOST_COMP_COMO_DETECTION
+# endif
+# define BOOST_COMP_COMO_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_COMO_NAME "Comeau C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_COMO,BOOST_COMP_COMO_NAME)
+
+#ifdef BOOST_COMP_COMO_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_COMO_EMULATED,BOOST_COMP_COMO_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/compaq.h b/3party/boost/boost/predef/compiler/compaq.h
new file mode 100644
index 0000000000..a922d170f8
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/compaq.h
@@ -0,0 +1,67 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_COMPAQ_H
+#define BOOST_PREDEF_COMPILER_COMPAQ_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_DEC`]
+
+[@http://www.openvms.compaq.com/openvms/brochures/deccplus/ Compaq C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__DECCXX`] [__predef_detection__]]
+ [[`__DECC`] [__predef_detection__]]
+
+ [[`__DECCXX_VER`] [V.R.P]]
+ [[`__DECC_VER`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_DEC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__DECC) || defined(__DECCXX)
+# if !defined(BOOST_COMP_DEC_DETECTION) && defined(__DECCXX_VER)
+# define BOOST_COMP_DEC_DETECTION BOOST_PREDEF_MAKE_10_VVRR0PP00(__DECCXX_VER)
+# endif
+# if !defined(BOOST_COMP_DEC_DETECTION) && defined(__DECC_VER)
+# define BOOST_COMP_DEC_DETECTION BOOST_PREDEF_MAKE_10_VVRR0PP00(__DECC_VER)
+# endif
+# if !defined(BOOST_COMP_DEC_DETECTION)
+# define BOOST_COM_DEC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_DEC_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_DEC_EMULATED BOOST_COMP_DEC_DETECTION
+# else
+# undef BOOST_COMP_DEC
+# define BOOST_COMP_DEC BOOST_COMP_DEC_DETECTION
+# endif
+# define BOOST_COMP_DEC_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_DEC_NAME "Compaq C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DEC,BOOST_COMP_DEC_NAME)
+
+#ifdef BOOST_COMP_DEC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DEC_EMULATED,BOOST_COMP_DEC_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/diab.h b/3party/boost/boost/predef/compiler/diab.h
new file mode 100644
index 0000000000..2cba03b972
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/diab.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_DIAB_H
+#define BOOST_PREDEF_COMPILER_DIAB_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_DIAB`]
+
+[@http://www.windriver.com/products/development_suite/wind_river_compiler/ Diab C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__DCC__`] [__predef_detection__]]
+
+ [[`__VERSION_NUMBER__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_DIAB BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__DCC__)
+# define BOOST_COMP_DIAB_DETECTION BOOST_PREDEF_MAKE_10_VRPP(__VERSION_NUMBER__)
+#endif
+
+#ifdef BOOST_COMP_DIAB_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_DIAB_EMULATED BOOST_COMP_DIAB_DETECTION
+# else
+# undef BOOST_COMP_DIAB
+# define BOOST_COMP_DIAB BOOST_COMP_DIAB_DETECTION
+# endif
+# define BOOST_COMP_DIAB_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_DIAB_NAME "Diab C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DIAB,BOOST_COMP_DIAB_NAME)
+
+#ifdef BOOST_COMP_DIAB_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DIAB_EMULATED,BOOST_COMP_DIAB_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/digitalmars.h b/3party/boost/boost/predef/compiler/digitalmars.h
new file mode 100644
index 0000000000..2306a7e3a7
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/digitalmars.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_DIGITALMARS_H
+#define BOOST_PREDEF_COMPILER_DIGITALMARS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_DMC`]
+
+[@http://en.wikipedia.org/wiki/Digital_Mars Digital Mars] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__DMC__`] [__predef_detection__]]
+
+ [[`__DMC__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_DMC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__DMC__)
+# define BOOST_COMP_DMC_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__DMC__)
+#endif
+
+#ifdef BOOST_COMP_DMC_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_DMC_EMULATED BOOST_COMP_DMC_DETECTION
+# else
+# undef BOOST_COMP_DMC
+# define BOOST_COMP_DMC BOOST_COMP_DMC_DETECTION
+# endif
+# define BOOST_COMP_DMC_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_DMC_NAME "Digital Mars"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DMC,BOOST_COMP_DMC_NAME)
+
+#ifdef BOOST_COMP_DMC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DMC_EMULATED,BOOST_COMP_DMC_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/dignus.h b/3party/boost/boost/predef/compiler/dignus.h
new file mode 100644
index 0000000000..33c3560f97
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/dignus.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_DIGNUS_H
+#define BOOST_PREDEF_COMPILER_DIGNUS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_SYSC`]
+
+[@http://www.dignus.com/dcxx/ Dignus Systems/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__SYSC__`] [__predef_detection__]]
+
+ [[`__SYSC_VER__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_SYSC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SYSC__)
+# define BOOST_COMP_SYSC_DETECTION BOOST_PREDEF_MAKE_10_VRRPP(__SYSC_VER__)
+#endif
+
+#ifdef BOOST_COMP_SYSC_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_SYSC_EMULATED BOOST_COMP_SYSC_DETECTION
+# else
+# undef BOOST_COMP_SYSC
+# define BOOST_COMP_SYSC BOOST_COMP_SYSC_DETECTION
+# endif
+# define BOOST_COMP_SYSC_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_SYSC_NAME "Dignus Systems/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SYSC,BOOST_COMP_SYSC_NAME)
+
+#ifdef BOOST_COMP_SYSC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SYSC_EMULATED,BOOST_COMP_SYSC_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/edg.h b/3party/boost/boost/predef/compiler/edg.h
new file mode 100644
index 0000000000..d53a5ffba6
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/edg.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_EDG_H
+#define BOOST_PREDEF_COMPILER_EDG_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_EDG`]
+
+[@http://en.wikipedia.org/wiki/Edison_Design_Group EDG C++ Frontend] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__EDG__`] [__predef_detection__]]
+
+ [[`__EDG_VERSION__`] [V.R.0]]
+ ]
+ */
+
+#define BOOST_COMP_EDG BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__EDG__)
+# define BOOST_COMP_EDG_DETECTION BOOST_PREDEF_MAKE_10_VRR(__EDG_VERSION__)
+#endif
+
+#ifdef BOOST_COMP_EDG_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_EDG_EMULATED BOOST_COMP_EDG_DETECTION
+# else
+# undef BOOST_COMP_EDG
+# define BOOST_COMP_EDG BOOST_COMP_EDG_DETECTION
+# endif
+# define BOOST_COMP_EDG_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_EDG_NAME "EDG C++ Frontend"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_EDG,BOOST_COMP_EDG_NAME)
+
+#ifdef BOOST_COMP_EDG_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_EDG_EMULATED,BOOST_COMP_EDG_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/ekopath.h b/3party/boost/boost/predef/compiler/ekopath.h
new file mode 100644
index 0000000000..4d7dabea7c
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/ekopath.h
@@ -0,0 +1,58 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_EKOPATH_H
+#define BOOST_PREDEF_COMPILER_EKOPATH_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_PATH`]
+
+[@http://en.wikipedia.org/wiki/PathScale EKOpath] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__PATHCC__`] [__predef_detection__]]
+
+ [[`__PATHCC__`, `__PATHCC_MINOR__`, `__PATHCC_PATCHLEVEL__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_PATH BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__PATHCC__)
+# define BOOST_COMP_PATH_DETECTION \
+ BOOST_VERSION_NUMBER(__PATHCC__,__PATHCC_MINOR__,__PATHCC_PATCHLEVEL__)
+#endif
+
+#ifdef BOOST_COMP_PATH_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_PATH_EMULATED BOOST_COMP_PATH_DETECTION
+# else
+# undef BOOST_COMP_PATH
+# define BOOST_COMP_PATH BOOST_COMP_PATH_DETECTION
+# endif
+# define BOOST_COMP_PATH_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_PATH_NAME "EKOpath"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PATH,BOOST_COMP_PATH_NAME)
+
+#ifdef BOOST_COMP_PATH_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PATH_EMULATED,BOOST_COMP_PATH_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/gcc.h b/3party/boost/boost/predef/compiler/gcc.h
new file mode 100644
index 0000000000..5b226bdfab
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/gcc.h
@@ -0,0 +1,69 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_GCC_H
+#define BOOST_PREDEF_COMPILER_GCC_H
+
+/* Other compilers that emulate this one need to be detected first. */
+
+#include <boost/predef/compiler/clang.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_GNUC`]
+
+[@http://en.wikipedia.org/wiki/GNU_Compiler_Collection Gnu GCC C/C++] compiler.
+Version number available as major, minor, and patch (if available).
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__GNUC__`] [__predef_detection__]]
+
+ [[`__GNUC__`, `__GNUC_MINOR__`, `__GNUC_PATCHLEVEL__`] [V.R.P]]
+ [[`__GNUC__`, `__GNUC_MINOR__`] [V.R.0]]
+ ]
+ */
+
+#define BOOST_COMP_GNUC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GNUC__)
+# if !defined(BOOST_COMP_GNUC_DETECTION) && defined(__GNUC_PATCHLEVEL__)
+# define BOOST_COMP_GNUC_DETECTION \
+ BOOST_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__)
+# endif
+# if !defined(BOOST_COMP_GNUC_DETECTION)
+# define BOOST_COMP_GNUC_DETECTION \
+ BOOST_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,0)
+# endif
+#endif
+
+#ifdef BOOST_COMP_GNUC_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_GNUC_EMULATED BOOST_COMP_GNUC_DETECTION
+# else
+# undef BOOST_COMP_GNUC
+# define BOOST_COMP_GNUC BOOST_COMP_GNUC_DETECTION
+# endif
+# define BOOST_COMP_GNUC_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_GNUC_NAME "Gnu GCC C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GNUC,BOOST_COMP_GNUC_NAME)
+
+#ifdef BOOST_COMP_GNUC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GNUC_EMULATED,BOOST_COMP_GNUC_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/gcc_xml.h b/3party/boost/boost/predef/compiler/gcc_xml.h
new file mode 100644
index 0000000000..ef55f5d431
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/gcc_xml.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_GCC_XML_H
+#define BOOST_PREDEF_COMPILER_GCC_XML_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_GCCXML`]
+
+[@http://www.gccxml.org/ GCC XML] compiler.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__GCCXML__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_COMP_GCCXML BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GCCXML__)
+# define BOOST_COMP_GCCXML_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_GCCXML_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_GCCXML_EMULATED BOOST_COMP_GCCXML_DETECTION
+# else
+# undef BOOST_COMP_GCCXML
+# define BOOST_COMP_GCCXML BOOST_COMP_GCCXML_DETECTION
+# endif
+# define BOOST_COMP_GCCXML_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_GCCXML_NAME "GCC XML"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GCCXML,BOOST_COMP_GCCXML_NAME)
+
+#ifdef BOOST_COMP_GCCXML_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GCCXML_EMULATED,BOOST_COMP_GCCXML_NAME)
+#endif
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/greenhills.h b/3party/boost/boost/predef/compiler/greenhills.h
new file mode 100644
index 0000000000..462f57b611
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/greenhills.h
@@ -0,0 +1,67 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_GREENHILLS_H
+#define BOOST_PREDEF_COMPILER_GREENHILLS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_GHS`]
+
+[@http://en.wikipedia.org/wiki/Green_Hills_Software Green Hills C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__ghs`] [__predef_detection__]]
+ [[`__ghs__`] [__predef_detection__]]
+
+ [[`__GHS_VERSION_NUMBER__`] [V.R.P]]
+ [[`__ghs`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_GHS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__ghs) || defined(__ghs__)
+# if !defined(BOOST_COMP_GHS_DETECTION) && defined(__GHS_VERSION_NUMBER__)
+# define BOOST_COMP_GHS_DETECTION BOOST_PREDEF_MAKE_10_VRP(__GHS_VERSION_NUMBER__)
+# endif
+# if !defined(BOOST_COMP_GHS_DETECTION) && defined(__ghs)
+# define BOOST_COMP_GHS_DETECTION BOOST_PREDEF_MAKE_10_VRP(__ghs)
+# endif
+# if !defined(BOOST_COMP_GHS_DETECTION)
+# define BOOST_COMP_GHS_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_GHS_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_GHS_EMULATED BOOST_COMP_GHS_DETECTION
+# else
+# undef BOOST_COMP_GHS
+# define BOOST_COMP_GHS BOOST_COMP_GHS_DETECTION
+# endif
+# define BOOST_COMP_GHS_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_GHS_NAME "Green Hills C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GHS,BOOST_COMP_GHS_NAME)
+
+#ifdef BOOST_COMP_GHS_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GHS_EMULATED,BOOST_COMP_GHS_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/hp_acc.h b/3party/boost/boost/predef/compiler/hp_acc.h
new file mode 100644
index 0000000000..8cb7022d3b
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/hp_acc.h
@@ -0,0 +1,62 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_HP_ACC_H
+#define BOOST_PREDEF_COMPILER_HP_ACC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_HPACC`]
+
+HP aC++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__HP_aCC`] [__predef_detection__]]
+
+ [[`__HP_aCC`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_HPACC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__HP_aCC)
+# if !defined(BOOST_COMP_HPACC_DETECTION) && (__HP_aCC > 1)
+# define BOOST_COMP_HPACC_DETECTION BOOST_PREDEF_MAKE_10_VVRRPP(__HP_aCC)
+# endif
+# if !defined(BOOST_COMP_HPACC_DETECTION)
+# define BOOST_COMP_HPACC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_HPACC_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_HPACC_EMULATED BOOST_COMP_HPACC_DETECTION
+# else
+# undef BOOST_COMP_HPACC
+# define BOOST_COMP_HPACC BOOST_COMP_HPACC_DETECTION
+# endif
+# define BOOST_COMP_HPACC_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_HPACC_NAME "HP aC++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HPACC,BOOST_COMP_HPACC_NAME)
+
+#ifdef BOOST_COMP_HPACC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HPACC_EMULATED,BOOST_COMP_HPACC_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/iar.h b/3party/boost/boost/predef/compiler/iar.h
new file mode 100644
index 0000000000..dd6bc0e095
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/iar.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_IAR_H
+#define BOOST_PREDEF_COMPILER_IAR_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_IAR`]
+
+IAR C/C++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__IAR_SYSTEMS_ICC__`] [__predef_detection__]]
+
+ [[`__VER__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_IAR BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__IAR_SYSTEMS_ICC__)
+# define BOOST_COMP_IAR_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__VER__)
+#endif
+
+#ifdef BOOST_COMP_IAR_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_IAR_EMULATED BOOST_COMP_IAR_DETECTION
+# else
+# undef BOOST_COMP_IAR
+# define BOOST_COMP_IAR BOOST_COMP_IAR_DETECTION
+# endif
+# define BOOST_COMP_IAR_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_IAR_NAME "IAR C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IAR,BOOST_COMP_IAR_NAME)
+
+#ifdef BOOST_COMP_IAR_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IAR_EMULATED,BOOST_COMP_IAR_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/ibm.h b/3party/boost/boost/predef/compiler/ibm.h
new file mode 100644
index 0000000000..1edc93c364
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/ibm.h
@@ -0,0 +1,73 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_IBM_H
+#define BOOST_PREDEF_COMPILER_IBM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_IBM`]
+
+[@http://en.wikipedia.org/wiki/VisualAge IBM XL C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__IBMCPP__`] [__predef_detection__]]
+ [[`__xlC__`] [__predef_detection__]]
+ [[`__xlc__`] [__predef_detection__]]
+
+ [[`__COMPILER_VER__`] [V.R.P]]
+ [[`__xlC__`] [V.R.P]]
+ [[`__xlc__`] [V.R.P]]
+ [[`__IBMCPP__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_IBM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__IBMCPP__) || defined(__xlC__) || defined(__xlc__)
+# if !defined(BOOST_COMP_IBM_DETECTION) && defined(__COMPILER_VER__)
+# define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VRRPPPP(__COMPILER_VER__)
+# endif
+# if !defined(BOOST_COMP_IBM_DETECTION) && defined(__xlC__)
+# define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__xlC__)
+# endif
+# if !defined(BOOST_COMP_IBM_DETECTION) && defined(__xlc__)
+# define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__xlc__)
+# endif
+# if !defined(BOOST_COMP_IBM_DETECTION)
+# define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_10_VRP(__IBMCPP__)
+# endif
+#endif
+
+#ifdef BOOST_COMP_IBM_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_IBM_EMULATED BOOST_COMP_IBM_DETECTION
+# else
+# undef BOOST_COMP_IBM
+# define BOOST_COMP_IBM BOOST_COMP_IBM_DETECTION
+# endif
+# define BOOST_COMP_IBM_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_IBM_NAME "IBM XL C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IBM,BOOST_COMP_IBM_NAME)
+
+#ifdef BOOST_COMP_IBM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IBM_EMULATED,BOOST_COMP_IBM_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/intel.h b/3party/boost/boost/predef/compiler/intel.h
new file mode 100644
index 0000000000..60220c7bfe
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/intel.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_INTEL_H
+#define BOOST_PREDEF_COMPILER_INTEL_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_INTEL`]
+
+[@http://en.wikipedia.org/wiki/Intel_C%2B%2B Intel C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__INTEL_COMPILER`] [__predef_detection__]]
+ [[`__ICL`] [__predef_detection__]]
+ [[`__ICC`] [__predef_detection__]]
+ [[`__ECC`] [__predef_detection__]]
+
+ [[`__INTEL_COMPILER`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_INTEL BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \
+ defined(__ECC)
+# if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER)
+# define BOOST_COMP_INTEL_DETECTION BOOST_PREDEF_MAKE_10_VRP(__INTEL_COMPILER)
+# endif
+# if !defined(BOOST_COMP_INTEL_DETECTION)
+# define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_INTEL_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_INTEL_EMULATED BOOST_COMP_INTEL_DETECTION
+# else
+# undef BOOST_COMP_INTEL
+# define BOOST_COMP_INTEL BOOST_COMP_INTEL_DETECTION
+# endif
+# define BOOST_COMP_INTEL_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_INTEL_NAME "Intel C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_INTEL,BOOST_COMP_INTEL_NAME)
+
+#ifdef BOOST_COMP_INTEL_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_INTEL_EMULATED,BOOST_COMP_INTEL_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/kai.h b/3party/boost/boost/predef/compiler/kai.h
new file mode 100644
index 0000000000..4aadbe329d
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/kai.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_KAI_H
+#define BOOST_PREDEF_COMPILER_KAI_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_KCC`]
+
+Kai C++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__KCC`] [__predef_detection__]]
+
+ [[`__KCC_VERSION`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_KCC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__KCC)
+# define BOOST_COMP_KCC_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__KCC_VERSION)
+#endif
+
+#ifdef BOOST_COMP_KCC_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_KCC_EMULATED BOOST_COMP_KCC_DETECTION
+# else
+# undef BOOST_COMP_KCC
+# define BOOST_COMP_KCC BOOST_COMP_KCC_DETECTION
+# endif
+# define BOOST_COMP_KCC_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_KCC_NAME "Kai C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_KCC,BOOST_COMP_KCC_NAME)
+
+#ifdef BOOST_COMP_KCC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_KCC_EMULATED,BOOST_COMP_KCC_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/llvm.h b/3party/boost/boost/predef/compiler/llvm.h
new file mode 100644
index 0000000000..c7e634c312
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/llvm.h
@@ -0,0 +1,58 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_LLVM_H
+#define BOOST_PREDEF_COMPILER_LLVM_H
+
+/* Other compilers that emulate this one need to be detected first. */
+
+#include <boost/predef/compiler/clang.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_LLVM`]
+
+[@http://en.wikipedia.org/wiki/LLVM LLVM] compiler.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__llvm__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_COMP_LLVM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__llvm__)
+# define BOOST_COMP_LLVM_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_LLVM_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_LLVM_EMULATED BOOST_COMP_LLVM_DETECTION
+# else
+# undef BOOST_COMP_LLVM
+# define BOOST_COMP_LLVM BOOST_COMP_LLVM_DETECTION
+# endif
+# define BOOST_COMP_LLVM_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_LLVM_NAME "LLVM"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_LLVM,BOOST_COMP_LLVM_NAME)
+
+#ifdef BOOST_COMP_LLVM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_LLVM_EMULATED,BOOST_COMP_LLVM_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/metaware.h b/3party/boost/boost/predef/compiler/metaware.h
new file mode 100644
index 0000000000..5e13de854a
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/metaware.h
@@ -0,0 +1,54 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_METAWARE_H
+#define BOOST_PREDEF_COMPILER_METAWARE_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_HIGHC`]
+
+MetaWare High C/C++ compiler.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__HIGHC__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_COMP_HIGHC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__HIGHC__)
+# define BOOST_COMP_HIGHC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_HIGHC_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_HIGHC_EMULATED BOOST_COMP_HIGHC_DETECTION
+# else
+# undef BOOST_COMP_HIGHC
+# define BOOST_COMP_HIGHC BOOST_COMP_HIGHC_DETECTION
+# endif
+# define BOOST_COMP_HIGHC_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_HIGHC_NAME "MetaWare High C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HIGHC,BOOST_COMP_HIGHC_NAME)
+
+#ifdef BOOST_COMP_HIGHC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HIGHC_EMULATED,BOOST_COMP_HIGHC_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/metrowerks.h b/3party/boost/boost/predef/compiler/metrowerks.h
new file mode 100644
index 0000000000..409282b339
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/metrowerks.h
@@ -0,0 +1,78 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_METROWERKS_H
+#define BOOST_PREDEF_COMPILER_METROWERKS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MWERKS`]
+
+[@http://en.wikipedia.org/wiki/CodeWarrior Metrowerks CodeWarrior] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__MWERKS__`] [__predef_detection__]]
+ [[`__CWCC__`] [__predef_detection__]]
+
+ [[`__CWCC__`] [V.R.P]]
+ [[`__MWERKS__`] [V.R.P >= 4.2.0]]
+ [[`__MWERKS__`] [9.R.0]]
+ [[`__MWERKS__`] [8.R.0]]
+ ]
+ */
+
+#define BOOST_COMP_MWERKS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MWERKS__) || defined(__CWCC__)
+# if !defined(BOOST_COMP_MWERKS_DETECTION) && defined(__CWCC__)
+# define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__CWCC__)
+# endif
+# if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x4200)
+# define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__MWERKS__)
+# endif
+# if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3204) // note the "skip": 04->9.3
+# define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100-1,0)
+# endif
+# if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3200)
+# define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100,0)
+# endif
+# if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3000)
+# define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(8,(__MWERKS__)%100,0)
+# endif
+# if !defined(BOOST_COMP_MWERKS_DETECTION)
+# define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_MWERKS_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_MWERKS_EMULATED BOOST_COMP_MWERKS_DETECTION
+# else
+# undef BOOST_COMP_MWERKS
+# define BOOST_COMP_MWERKS BOOST_COMP_MWERKS_DETECTION
+# endif
+# define BOOST_COMP_MWERKS_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MWERKS_NAME "Metrowerks CodeWarrior"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS,BOOST_COMP_MWERKS_NAME)
+
+#ifdef BOOST_COMP_MWERKS_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS_EMULATED,BOOST_COMP_MWERKS_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/microtec.h b/3party/boost/boost/predef/compiler/microtec.h
new file mode 100644
index 0000000000..6bd627905b
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/microtec.h
@@ -0,0 +1,54 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_MICROTEC_H
+#define BOOST_PREDEF_COMPILER_MICROTEC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MRI`]
+
+[@http://www.mentor.com/microtec/ Microtec C/C++] compiler.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`_MRI`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_COMP_MRI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_MRI)
+# define BOOST_COMP_MRI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_MRI_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_MRI_EMULATED BOOST_COMP_MRI_DETECTION
+# else
+# undef BOOST_COMP_MRI
+# define BOOST_COMP_MRI BOOST_COMP_MRI_DETECTION
+# endif
+# define BOOST_COMP_MRI_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MRI_NAME "Microtec C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MRI,BOOST_COMP_MRI_NAME)
+
+#ifdef BOOST_COMP_MRI_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MRI_EMULATED,BOOST_COMP_MRI_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/mpw.h b/3party/boost/boost/predef/compiler/mpw.h
new file mode 100644
index 0000000000..3a48f6f74a
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/mpw.h
@@ -0,0 +1,64 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_MPW_H
+#define BOOST_PREDEF_COMPILER_MPW_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MPW`]
+
+[@http://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop MPW C++] compiler.
+Version number available as major, and minor.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__MRC__`] [__predef_detection__]]
+ [[`MPW_C`] [__predef_detection__]]
+ [[`MPW_CPLUS`] [__predef_detection__]]
+
+ [[`__MRC__`] [V.R.0]]
+ ]
+ */
+
+#define BOOST_COMP_MPW BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MRC__) || defined(MPW_C) || defined(MPW_CPLUS)
+# if !defined(BOOST_COMP_MPW_DETECTION) && defined(__MRC__)
+# define BOOST_COMP_MPW_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__MRC__)
+# endif
+# if !defined(BOOST_COMP_MPW_DETECTION)
+# define BOOST_COMP_MPW_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_MPW_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_MPW_EMULATED BOOST_COMP_MPW_DETECTION
+# else
+# undef BOOST_COMP_MPW
+# define BOOST_COMP_MPW BOOST_COMP_MPW_DETECTION
+# endif
+# define BOOST_COMP_MPW_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MPW_NAME "MPW C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MPW,BOOST_COMP_MPW_NAME)
+
+#ifdef BOOST_COMP_MPW_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MPW_EMULATED,BOOST_COMP_MPW_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/palm.h b/3party/boost/boost/predef/compiler/palm.h
new file mode 100644
index 0000000000..eb1da971cf
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/palm.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_PALM_H
+#define BOOST_PREDEF_COMPILER_PALM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_PALM`]
+
+Palm C/C++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`_PACC_VER`] [__predef_detection__]]
+
+ [[`_PACC_VER`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_PALM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_PACC_VER)
+# define BOOST_COMP_PALM_DETECTION BOOST_PREDEF_MAKE_0X_VRRPP000(_PACC_VER)
+#endif
+
+#ifdef BOOST_COMP_PALM_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_PALM_EMULATED BOOST_COMP_PALM_DETECTION
+# else
+# undef BOOST_COMP_PALM
+# define BOOST_COMP_PALM BOOST_COMP_PALM_DETECTION
+# endif
+# define BOOST_COMP_PALM_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_PALM_NAME "Palm C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PALM,BOOST_COMP_PALM_NAME)
+
+#ifdef BOOST_COMP_PALM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PALM_EMULATED,BOOST_COMP_PALM_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/pgi.h b/3party/boost/boost/predef/compiler/pgi.h
new file mode 100644
index 0000000000..563335ff3c
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/pgi.h
@@ -0,0 +1,61 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_PGI_H
+#define BOOST_PREDEF_COMPILER_PGI_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_PGI`]
+
+[@http://en.wikipedia.org/wiki/The_Portland_Group Portland Group C/C++] compiler.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__PGI`] [__predef_detection__]]
+
+ [[`__PGIC__`, `__PGIC_MINOR__`, `__PGIC_PATCHLEVEL__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_PGI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__PGI)
+# if !defined(BOOST_COMP_PGI_DETECTION) && (defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__))
+# define BOOST_COMP_PGI_DETECTION BOOST_VERSION_NUMBER(__PGIC__,__PGIC_MINOR__,__PGIC_PATCHLEVEL__)
+# endif
+# if !defined(BOOST_COMP_PGI_DETECTION)
+# define BOOST_COMP_PGI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_PGI_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_PGI_EMULATED BOOST_COMP_PGI_DETECTION
+# else
+# undef BOOST_COMP_PGI
+# define BOOST_COMP_PGI BOOST_COMP_PGI_DETECTION
+# endif
+# define BOOST_COMP_PGI_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_PGI_NAME "Portland Group C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PGI,BOOST_COMP_PGI_NAME)
+
+#ifdef BOOST_COMP_PGI_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PGI_EMULATED,BOOST_COMP_PGI_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/sgi_mipspro.h b/3party/boost/boost/predef/compiler/sgi_mipspro.h
new file mode 100644
index 0000000000..c212b19f4f
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/sgi_mipspro.h
@@ -0,0 +1,67 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_SGI_MIPSPRO_H
+#define BOOST_PREDEF_COMPILER_SGI_MIPSPRO_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_SGI`]
+
+[@http://en.wikipedia.org/wiki/MIPSpro SGI MIPSpro] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__sgi`] [__predef_detection__]]
+ [[`sgi`] [__predef_detection__]]
+
+ [[`_SGI_COMPILER_VERSION`] [V.R.P]]
+ [[`_COMPILER_VERSION`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_SGI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sgi) || defined(sgi)
+# if !defined(BOOST_COMP_SGI_DETECTION) && defined(_SGI_COMPILER_VERSION)
+# define BOOST_COMP_SGI_DETECTION BOOST_PREDEF_MAKE_10_VRP(_SGI_COMPILER_VERSION)
+# endif
+# if !defined(BOOST_COMP_SGI_DETECTION) && defined(_COMPILER_VERSION)
+# define BOOST_COMP_SGI_DETECTION BOOST_PREDEF_MAKE_10_VRP(_COMPILER_VERSION)
+# endif
+# if !defined(BOOST_COMP_SGI_DETECTION)
+# define BOOST_COMP_SGI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_SGI_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_SGI_EMULATED BOOST_COMP_SGI_DETECTION
+# else
+# undef BOOST_COMP_SGI
+# define BOOST_COMP_SGI BOOST_COMP_SGI_DETECTION
+# endif
+# define BOOST_COMP_SGI_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_SGI_NAME "SGI MIPSpro"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SGI,BOOST_COMP_SGI_NAME)
+
+#ifdef BOOST_COMP_SGI_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SGI_EMULATED,BOOST_COMP_SGI_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/sunpro.h b/3party/boost/boost/predef/compiler/sunpro.h
new file mode 100644
index 0000000000..bd3da279dd
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/sunpro.h
@@ -0,0 +1,67 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_SUNPRO_H
+#define BOOST_PREDEF_COMPILER_SUNPRO_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_SUNPRO`]
+
+[@http://en.wikipedia.org/wiki/Sun_Studio_%28software%29 Sun Studio] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__SUNPRO_CC`] [__predef_detection__]]
+ [[`__SUNPRO_C`] [__predef_detection__]]
+
+ [[`__SUNPRO_CC`] [V.R.P]]
+ [[`__SUNPRO_C`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_SUNPRO BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SUNPRO_CC) || defined(__SUNPRO_C)
+# if !defined(BOOST_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_CC)
+# define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__SUNPRO_CC)
+# endif
+# if !defined(BOOST_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_C)
+# define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__SUNPRO_C)
+# endif
+# if !defined(BOOST_COMP_SUNPRO_DETECTION)
+# define BOOST_COMP_SUNPRO_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_COMP_SUNPRO_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_SUNPRO_EMULATED BOOST_COMP_SUNPRO_DETECTION
+# else
+# undef BOOST_COMP_SUNPRO
+# define BOOST_COMP_SUNPRO BOOST_COMP_SUNPRO_DETECTION
+# endif
+# define BOOST_COMP_SUNPRO_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_SUNPRO_NAME "Sun Studio"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SUNPRO,BOOST_COMP_SUNPRO_NAME)
+
+#ifdef BOOST_COMP_SUNPRO_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SUNPRO_EMULATED,BOOST_COMP_SUNPRO_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/tendra.h b/3party/boost/boost/predef/compiler/tendra.h
new file mode 100644
index 0000000000..194f0af83a
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/tendra.h
@@ -0,0 +1,54 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_TENDRA_H
+#define BOOST_PREDEF_COMPILER_TENDRA_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_TENDRA`]
+
+[@http://en.wikipedia.org/wiki/TenDRA_Compiler TenDRA C/C++] compiler.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__TenDRA__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_COMP_TENDRA BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__TenDRA__)
+# define BOOST_COMP_TENDRA_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_TENDRA_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_TENDRA_EMULATED BOOST_COMP_TENDRA_DETECTION
+# else
+# undef BOOST_COMP_TENDRA
+# define BOOST_COMP_TENDRA BOOST_COMP_TENDRA_DETECTION
+# endif
+# define BOOST_COMP_TENDRA_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_TENDRA_NAME "TenDRA C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_TENDRA,BOOST_COMP_TENDRA_NAME)
+
+#ifdef BOOST_COMP_TENDRA_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_TENDRA_EMULATED,BOOST_COMP_TENDRA_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/visualc.h b/3party/boost/boost/predef/compiler/visualc.h
new file mode 100644
index 0000000000..66d060107c
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/visualc.h
@@ -0,0 +1,79 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_VISUALC_H
+#define BOOST_PREDEF_COMPILER_VISUALC_H
+
+/* Other compilers that emulate this one need to be detected first. */
+
+#include <boost/predef/compiler/clang.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MSVC`]
+
+[@http://en.wikipedia.org/wiki/Visual_studio Microsoft Visual C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`_MSC_VER`] [__predef_detection__]]
+
+ [[`_MSC_FULL_VER`] [V.R.P]]
+ [[`_MSC_VER`] [V.R.0]]
+ ]
+ */
+
+#define BOOST_COMP_MSVC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_MSC_VER)
+# if !defined (_MSC_FULL_VER)
+# define BOOST_COMP_MSVC_BUILD 0
+# else
+ /* how many digits does the build number have? */
+# if _MSC_FULL_VER / 10000 == _MSC_VER
+ /* four digits */
+# define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 10000)
+# elif _MSC_FULL_VER / 100000 == _MSC_VER
+ /* five digits */
+# define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 100000)
+# else
+# error "Cannot determine build number from _MSC_FULL_VER"
+# endif
+# endif
+# define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
+ _MSC_VER/100-6,\
+ _MSC_VER%100,\
+ BOOST_COMP_MSVC_BUILD)
+#endif
+
+#ifdef BOOST_COMP_MSVC_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_MSVC_EMULATED BOOST_COMP_MSVC_DETECTION
+# else
+# undef BOOST_COMP_MSVC
+# define BOOST_COMP_MSVC BOOST_COMP_MSVC_DETECTION
+# endif
+# define BOOST_COMP_MSVC_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MSVC_NAME "Microsoft Visual C/C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC,BOOST_COMP_MSVC_NAME)
+
+#ifdef BOOST_COMP_MSVC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC_EMULATED,BOOST_COMP_MSVC_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/compiler/watcom.h b/3party/boost/boost/predef/compiler/watcom.h
new file mode 100644
index 0000000000..832d10c54a
--- /dev/null
+++ b/3party/boost/boost/predef/compiler/watcom.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2014
+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_PREDEF_COMPILER_WATCOM_H
+#define BOOST_PREDEF_COMPILER_WATCOM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_WATCOM`]
+
+[@http://en.wikipedia.org/wiki/Watcom Watcom C++] compiler.
+Version number available as major, and minor.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__WATCOMC__`] [__predef_detection__]]
+
+ [[`__WATCOMC__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_COMP_WATCOM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__WATCOMC__)
+# define BOOST_COMP_WATCOM_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__WATCOMC__)
+#endif
+
+#ifdef BOOST_COMP_WATCOM_DETECTION
+# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+# define BOOST_COMP_WATCOM_EMULATED BOOST_COMP_WATCOM_DETECTION
+# else
+# undef BOOST_COMP_WATCOM
+# define BOOST_COMP_WATCOM BOOST_COMP_WATCOM_DETECTION
+# endif
+# define BOOST_COMP_WATCOM_AVAILABLE
+# include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_WATCOM_NAME "Watcom C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_WATCOM,BOOST_COMP_WATCOM_NAME)
+
+#ifdef BOOST_COMP_WATCOM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_WATCOM_EMULATED,BOOST_COMP_WATCOM_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/detail/_cassert.h b/3party/boost/boost/predef/detail/_cassert.h
new file mode 100644
index 0000000000..ccae4950d3
--- /dev/null
+++ b/3party/boost/boost/predef/detail/_cassert.h
@@ -0,0 +1,17 @@
+/*
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL__CASSERT_H
+#define BOOST_PREDEF_DETAIL__CASSERT_H
+
+#if defined(__cpluplus)
+#include <cassert>
+#else
+#include <assert.h>
+#endif
+
+#endif
diff --git a/3party/boost/boost/predef/detail/_exception.h b/3party/boost/boost/predef/detail/_exception.h
new file mode 100644
index 0000000000..ca58c79d32
--- /dev/null
+++ b/3party/boost/boost/predef/detail/_exception.h
@@ -0,0 +1,15 @@
+/*
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL__EXCEPTION_H
+#define BOOST_PREDEF_DETAIL__EXCEPTION_H
+
+#if defined(__cpluplus)
+#include <exception>
+#endif
+
+#endif
diff --git a/3party/boost/boost/predef/detail/comp_detected.h b/3party/boost/boost/predef/detail/comp_detected.h
new file mode 100644
index 0000000000..fda1801b65
--- /dev/null
+++ b/3party/boost/boost/predef/detail/comp_detected.h
@@ -0,0 +1,10 @@
+/*
+Copyright Rene Rivera 2014
+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_PREDEF_DETAIL_COMP_DETECTED
+#define BOOST_PREDEF_DETAIL_COMP_DETECTED 1
+#endif
diff --git a/3party/boost/boost/predef/detail/endian_compat.h b/3party/boost/boost/predef/detail/endian_compat.h
new file mode 100644
index 0000000000..7725e6823c
--- /dev/null
+++ b/3party/boost/boost/predef/detail/endian_compat.h
@@ -0,0 +1,26 @@
+/*
+Copyright Rene Rivera 2013
+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_PREDEF_DETAIL_ENDIAN_COMPAT_H
+#define BOOST_PREDEF_DETAIL_ENDIAN_COMPAT_H
+
+#include <boost/predef/other/endian.h>
+
+#if BOOST_ENDIAN_BIG_BYTE
+# define BOOST_BIG_ENDIAN
+# define BOOST_BYTE_ORDER 4321
+#endif
+#if BOOST_ENDIAN_LITTLE_BYTE
+# define BOOST_LITTLE_ENDIAN
+# define BOOST_BYTE_ORDER 1234
+#endif
+#if BOOST_ENDIAN_LITTLE_WORD
+# define BOOST_PDP_ENDIAN
+# define BOOST_BYTE_ORDER 2134
+#endif
+
+#endif
diff --git a/3party/boost/boost/predef/detail/os_detected.h b/3party/boost/boost/predef/detail/os_detected.h
new file mode 100644
index 0000000000..08e10f993a
--- /dev/null
+++ b/3party/boost/boost/predef/detail/os_detected.h
@@ -0,0 +1,10 @@
+/*
+Copyright Rene Rivera 2013
+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_PREDEF_DETAIL_OS_DETECTED
+#define BOOST_PREDEF_DETAIL_OS_DETECTED 1
+#endif
diff --git a/3party/boost/boost/predef/detail/platform_detected.h b/3party/boost/boost/predef/detail/platform_detected.h
new file mode 100644
index 0000000000..4faf6938d8
--- /dev/null
+++ b/3party/boost/boost/predef/detail/platform_detected.h
@@ -0,0 +1,10 @@
+/*
+Copyright Rene Rivera 2014
+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_PREDEF_DETAIL_PLAT_DETECTED
+#define BOOST_PREDEF_DETAIL_PLAT_DETECTED 1
+#endif
diff --git a/3party/boost/boost/predef/detail/test.h b/3party/boost/boost/predef/detail/test.h
new file mode 100644
index 0000000000..546a9e407d
--- /dev/null
+++ b/3party/boost/boost/predef/detail/test.h
@@ -0,0 +1,17 @@
+/*
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_TEST_H
+#define BOOST_PREDEF_DETAIL_TEST_H
+
+#if !defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+
+#define BOOST_PREDEF_DECLARE_TEST(x,s)
+
+#endif
+
+#endif
diff --git a/3party/boost/boost/predef/language.h b/3party/boost/boost/predef/language.h
new file mode 100644
index 0000000000..c9251c52ae
--- /dev/null
+++ b/3party/boost/boost/predef/language.h
@@ -0,0 +1,15 @@
+/*
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_LANGUAGE_H
+#define BOOST_PREDEF_LANGUAGE_H
+
+#include <boost/predef/language/stdc.h>
+#include <boost/predef/language/stdcpp.h>
+#include <boost/predef/language/objc.h>
+
+#endif
diff --git a/3party/boost/boost/predef/language/objc.h b/3party/boost/boost/predef/language/objc.h
new file mode 100644
index 0000000000..27a32b6372
--- /dev/null
+++ b/3party/boost/boost/predef/language/objc.h
@@ -0,0 +1,43 @@
+/*
+Copyright Rene Rivera 2011-2013
+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_PREDEF_LANGUAGE_OBJC_H
+#define BOOST_PREDEF_LANGUAGE_OBJC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_OBJC`]
+
+[@http://en.wikipedia.org/wiki/Objective-C Objective-C] language.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__OBJC__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__OBJC__)
+# undef BOOST_LANG_OBJC
+# define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LANG_OBJC
+# define BOOST_LANG_OBJC_AVAILABLE
+#endif
+
+#define BOOST_LANG_OBJC_NAME "Objective-C"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_OBJC,BOOST_LANG_OBJC_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/language/stdc.h b/3party/boost/boost/predef/language/stdc.h
new file mode 100644
index 0000000000..59a4e0bb47
--- /dev/null
+++ b/3party/boost/boost/predef/language/stdc.h
@@ -0,0 +1,54 @@
+/*
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_LANGUAGE_STDC_H
+#define BOOST_PREDEF_LANGUAGE_STDC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_STDC`]
+
+[@http://en.wikipedia.org/wiki/C_(programming_language) Standard C] language.
+If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__STDC__`] [__predef_detection__]]
+
+ [[`__STDC_VERSION__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_LANG_STDC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__STDC__)
+# undef BOOST_LANG_STDC
+# if defined(__STDC_VERSION__)
+# if (__STDC_VERSION__ > 100)
+# define BOOST_LANG_STDC BOOST_PREDEF_MAKE_YYYYMM(__STDC_VERSION__)
+# else
+# define BOOST_LANG_STDC BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# else
+# define BOOST_LANG_STDC BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_LANG_STDC
+# define BOOST_LANG_STDC_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDC_NAME "Standard C"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDC,BOOST_LANG_STDC_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/language/stdcpp.h b/3party/boost/boost/predef/language/stdcpp.h
new file mode 100644
index 0000000000..693c67b02a
--- /dev/null
+++ b/3party/boost/boost/predef/language/stdcpp.h
@@ -0,0 +1,124 @@
+/*
+Copyright Rene Rivera 2011-2013
+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_PREDEF_LANGUAGE_STDCPP_H
+#define BOOST_PREDEF_LANGUAGE_STDCPP_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_STDCPP`]
+
+[@http://en.wikipedia.org/wiki/C%2B%2B Standard C++] language.
+If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.
+Because of the way the C++ standardization process works the
+defined version year will not be the commonly known year of the standard.
+Specifically the defined versions are:
+
+[table Detected Version Number vs. C++ Standard Year
+ [[Detected Version Number] [Standard Year] [C++ Standard]]
+ [[27.11.1] [1998] [ISO/IEC 14882:1998]]
+ [[41.12.1] [2011] [ISO/IEC 14882:2011]]
+]
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__cplusplus`] [__predef_detection__]]
+
+ [[`__cplusplus`] [YYYY.MM.1]]
+ ]
+ */
+
+#define BOOST_LANG_STDCPP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__cplusplus)
+# undef BOOST_LANG_STDCPP
+# if (__cplusplus > 100)
+# define BOOST_LANG_STDCPP BOOST_PREDEF_MAKE_YYYYMM(__cplusplus)
+# else
+# define BOOST_LANG_STDCPP BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_LANG_STDCPP
+# define BOOST_LANG_STDCPP_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDCPP_NAME "Standard C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDCPP,BOOST_LANG_STDCPP_NAME)
+
+
+/*`
+[heading `BOOST_LANG_STDCPPCLI`]
+
+[@http://en.wikipedia.org/wiki/C%2B%2B/CLI Standard C++/CLI] language.
+If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__cplusplus_cli`] [__predef_detection__]]
+
+ [[`__cplusplus_cli`] [YYYY.MM.1]]
+ ]
+ */
+
+#define BOOST_LANG_STDCPPCLI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__cplusplus_cli)
+# undef BOOST_LANG_STDCPPCLI
+# if (__cplusplus_cli > 100)
+# define BOOST_LANG_STDCPPCLI BOOST_PREDEF_MAKE_YYYYMM(__cplusplus_cli)
+# else
+# define BOOST_LANG_STDCPPCLI BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_LANG_STDCPPCLI
+# define BOOST_LANG_STDCPPCLI_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDCPPCLI_NAME "Standard C++/CLI"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDCPPCLI,BOOST_LANG_STDCPPCLI_NAME)
+
+
+/*`
+[heading `BOOST_LANG_STDECPP`]
+
+[@http://en.wikipedia.org/wiki/Embedded_C%2B%2B Standard Embedded C++] language.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__embedded_cplusplus`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_LANG_STDECPP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__embedded_cplusplus)
+# undef BOOST_LANG_STDECPP
+# define BOOST_LANG_STDECPP BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LANG_STDECPP
+# define BOOST_LANG_STDECPP_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDECPP_NAME "Standard Embedded C++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDECPP,BOOST_LANG_STDECPP_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library.h b/3party/boost/boost/predef/library.h
new file mode 100644
index 0000000000..a474323f3e
--- /dev/null
+++ b/3party/boost/boost/predef/library.h
@@ -0,0 +1,14 @@
+/*
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_H
+#define BOOST_PREDEF_LIBRARY_H
+
+#include <boost/predef/library/c.h>
+#include <boost/predef/library/std.h>
+
+#endif
diff --git a/3party/boost/boost/predef/library/c.h b/3party/boost/boost/predef/library/c.h
new file mode 100644
index 0000000000..733e6a7c87
--- /dev/null
+++ b/3party/boost/boost/predef/library/c.h
@@ -0,0 +1,18 @@
+/*
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C_H
+#define BOOST_PREDEF_LIBRARY_C_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/library/c/gnu.h>
+#include <boost/predef/library/c/uc.h>
+#include <boost/predef/library/c/vms.h>
+#include <boost/predef/library/c/zos.h>
+
+#endif
diff --git a/3party/boost/boost/predef/library/c/_prefix.h b/3party/boost/boost/predef/library/c/_prefix.h
new file mode 100644
index 0000000000..12bcb0fb3f
--- /dev/null
+++ b/3party/boost/boost/predef/library/c/_prefix.h
@@ -0,0 +1,13 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_C__PREFIX_H
+#define BOOST_PREDEF_LIBRARY_C__PREFIX_H
+
+#include <boost/predef/detail/_cassert.h>
+
+#endif
diff --git a/3party/boost/boost/predef/library/c/gnu.h b/3party/boost/boost/predef/library/c/gnu.h
new file mode 100644
index 0000000000..8ed9f76a3d
--- /dev/null
+++ b/3party/boost/boost/predef/library/c/gnu.h
@@ -0,0 +1,62 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_C_GNU_H
+#define BOOST_PREDEF_LIBRARY_C_GNU_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+#include <boost/predef/library/c/_prefix.h>
+
+#if defined(__STDC__)
+#include <stddef.h>
+#elif defined(__cplusplus)
+#include <cstddef>
+#endif
+
+/*`
+[heading `BOOST_LIB_C_GNU`]
+
+[@http://en.wikipedia.org/wiki/Glibc GNU glibc] Standard C library.
+Version number available as major, and minor.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__GLIBC__`] [__predef_detection__]]
+ [[`__GNU_LIBRARY__`] [__predef_detection__]]
+
+ [[`__GLIBC__`, `__GLIBC_MINOR__`] [V.R.0]]
+ [[`__GNU_LIBRARY__`, `__GNU_LIBRARY_MINOR__`] [V.R.0]]
+ ]
+ */
+
+#define BOOST_LIB_C_GNU BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GLIBC__) || defined(__GNU_LIBRARY__)
+# undef BOOST_LIB_C_GNU
+# if defined(__GLIBC__)
+# define BOOST_LIB_C_GNU \
+ BOOST_VERSION_NUMBER(__GLIBC__,__GLIBC_MINOR__,0)
+# else
+# define BOOST_LIB_C_GNU \
+ BOOST_VERSION_NUMBER(__GNU_LIBRARY__,__GNU_LIBRARY_MINOR__,0)
+# endif
+#endif
+
+#if BOOST_LIB_C_GNU
+# define BOOST_LIB_C_GNU_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_GNU_NAME "GNU"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_GNU,BOOST_LIB_C_GNU_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/c/uc.h b/3party/boost/boost/predef/library/c/uc.h
new file mode 100644
index 0000000000..8b47de15a8
--- /dev/null
+++ b/3party/boost/boost/predef/library/c/uc.h
@@ -0,0 +1,48 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_C_UC_H
+#define BOOST_PREDEF_LIBRARY_C_UC_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_C_UC`]
+
+[@http://en.wikipedia.org/wiki/Uclibc uClibc] Standard C library.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__UCLIBC__`] [__predef_detection__]]
+
+ [[`__UCLIBC_MAJOR__`, `__UCLIBC_MINOR__`, `__UCLIBC_SUBLEVEL__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_LIB_C_UC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__UCLIBC__)
+# undef BOOST_LIB_C_UC
+# define BOOST_LIB_C_UC BOOST_VERSION_NUMBER(\
+ __UCLIBC_MAJOR__,__UCLIBC_MINOR__,__UCLIBC_SUBLEVEL__)
+#endif
+
+#if BOOST_LIB_C_UC
+# define BOOST_LIB_C_UC_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_UC_NAME "uClibc"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_UC,BOOST_LIB_C_UC_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/c/vms.h b/3party/boost/boost/predef/library/c/vms.h
new file mode 100644
index 0000000000..0357d05e68
--- /dev/null
+++ b/3party/boost/boost/predef/library/c/vms.h
@@ -0,0 +1,48 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_C_VMS_H
+#define BOOST_PREDEF_LIBRARY_C_VMS_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_C_VMS`]
+
+VMS libc Standard C library.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__CRTL_VER`] [__predef_detection__]]
+
+ [[`__CRTL_VER`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_LIB_C_VMS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__CRTL_VER)
+# undef BOOST_LIB_C_VMS
+# define BOOST_LIB_C_VMS BOOST_PREDEF_MAKE_10_VVRR0PP00(__CRTL_VER)
+#endif
+
+#if BOOST_LIB_C_VMS
+# define BOOST_LIB_C_VMS_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_VMS_NAME "VMS"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_VMS,BOOST_LIB_C_VMS_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/c/zos.h b/3party/boost/boost/predef/library/c/zos.h
new file mode 100644
index 0000000000..4c6f0581d1
--- /dev/null
+++ b/3party/boost/boost/predef/library/c/zos.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_C_ZOS_H
+#define BOOST_PREDEF_LIBRARY_C_ZOS_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_C_ZOS`]
+
+z/OS libc Standard C library.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__LIBREL__`] [__predef_detection__]]
+
+ [[`__LIBREL__`] [V.R.P]]
+ [[`__TARGET_LIB__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_LIB_C_ZOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__LIBREL__)
+# undef BOOST_LIB_C_ZOS
+# if !defined(BOOST_LIB_C_ZOS) && defined(__LIBREL__)
+# define BOOST_LIB_C_ZOS BOOST_PREDEF_MAKE_0X_VRRPPPP(__LIBREL__)
+# endif
+# if !defined(BOOST_LIB_C_ZOS) && defined(__TARGET_LIB__)
+# define BOOST_LIB_C_ZOS BOOST_PREDEF_MAKE_0X_VRRPPPP(__TARGET_LIB__)
+# endif
+# if !defined(BOOST_LIB_C_ZOS)
+# define BOOST_LIB_C_ZOS BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_LIB_C_ZOS
+# define BOOST_LIB_C_ZOS_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_ZOS_NAME "z/OS"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_ZOS,BOOST_LIB_C_ZOS_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std.h b/3party/boost/boost/predef/library/std.h
new file mode 100644
index 0000000000..9ab0a863c4
--- /dev/null
+++ b/3party/boost/boost/predef/library/std.h
@@ -0,0 +1,23 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_H
+#define BOOST_PREDEF_LIBRARY_STD_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/library/std/cxx.h>
+#include <boost/predef/library/std/dinkumware.h>
+#include <boost/predef/library/std/libcomo.h>
+#include <boost/predef/library/std/modena.h>
+#include <boost/predef/library/std/msl.h>
+#include <boost/predef/library/std/roguewave.h>
+#include <boost/predef/library/std/sgi.h>
+#include <boost/predef/library/std/stdcpp3.h>
+#include <boost/predef/library/std/stlport.h>
+#include <boost/predef/library/std/vacpp.h>
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/_prefix.h b/3party/boost/boost/predef/library/std/_prefix.h
new file mode 100644
index 0000000000..932b8557b1
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/_prefix.h
@@ -0,0 +1,23 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD__PREFIX_H
+#define BOOST_PREDEF_LIBRARY_STD__PREFIX_H
+
+/*
+We need to include an STD header to gives us the context
+of which library we are using. The "smallest" code-wise header
+seems to be <exception>. Boost uses <utility> but as far
+as I can tell (RR) it's not a stand-alone header in most
+implementations. Using <exception> also has the benefit of
+being available in EC++, so we get a chance to make this work
+for embedded users. And since it's not a header impacted by TR1
+there's no magic needed for inclusion in the face of the
+Boost.TR1 library.
+*/
+#include <boost/predef/detail/_exception.h>
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/cxx.h b/3party/boost/boost/predef/library/std/cxx.h
new file mode 100644
index 0000000000..1d0cf5f2b9
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/cxx.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2011-2013
+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_PREDEF_LIBRARY_STD_CXX_H
+#define BOOST_PREDEF_LIBRARY_STD_CXX_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_CXX`]
+
+[@http://libcxx.llvm.org/ libc++] C++ Standard Library.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`_LIBCPP_VERSION`] [__predef_detection__]]
+
+ [[`_LIBCPP_VERSION`] [V.0.P]]
+ ]
+ */
+
+#define BOOST_LIB_STD_CXX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_LIBCPP_VERSION)
+# undef BOOST_LIB_STD_CXX
+# define BOOST_LIB_STD_CXX BOOST_PREDEF_MAKE_10_VPPP(_LIBCPP_VERSION)
+#endif
+
+#if BOOST_LIB_STD_CXX
+# define BOOST_LIB_STD_CXX_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_CXX_NAME "libc++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_CXX,BOOST_LIB_STD_CXX_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/dinkumware.h b/3party/boost/boost/predef/library/std/dinkumware.h
new file mode 100644
index 0000000000..394e866ea5
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/dinkumware.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_DINKUMWARE_H
+#define BOOST_PREDEF_LIBRARY_STD_DINKUMWARE_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_DINKUMWARE`]
+
+[@http://en.wikipedia.org/wiki/Dinkumware Dinkumware] Standard C++ Library.
+If available version number as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`_YVALS`, `__IBMCPP__`] [__predef_detection__]]
+ [[`_CPPLIB_VER`] [__predef_detection__]]
+
+ [[`_CPPLIB_VER`] [V.R.0]]
+ ]
+ */
+
+#define BOOST_LIB_STD_DINKUMWARE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+# undef BOOST_LIB_STD_DINKUMWARE
+# if defined(_CPPLIB_VER)
+# define BOOST_LIB_STD_DINKUMWARE BOOST_PREDEF_MAKE_10_VVRR(_CPPLIB_VER)
+# else
+# define BOOST_LIB_STD_DINKUMWARE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_LIB_STD_DINKUMWARE
+# define BOOST_LIB_STD_DINKUMWARE_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_DINKUMWARE_NAME "Dinkumware"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_DINKUMWARE,BOOST_LIB_STD_DINKUMWARE_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/libcomo.h b/3party/boost/boost/predef/library/std/libcomo.h
new file mode 100644
index 0000000000..41bbe67781
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/libcomo.h
@@ -0,0 +1,48 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_LIBCOMO_H
+#define BOOST_PREDEF_LIBRARY_STD_LIBCOMO_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_COMO`]
+
+[@http://www.comeaucomputing.com/libcomo/ Comeau Computing] Standard C++ Library.
+Version number available as major.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__LIBCOMO__`] [__predef_detection__]]
+
+ [[`__LIBCOMO_VERSION__`] [V.0.0]]
+ ]
+ */
+
+#define BOOST_LIB_STD_COMO BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__LIBCOMO__)
+# undef BOOST_LIB_STD_COMO
+# define BOOST_LIB_STD_COMO BOOST_VERSION_NUMBER(__LIBCOMO_VERSION__,0,0)
+#endif
+
+#if BOOST_LIB_STD_COMO
+# define BOOST_LIB_STD_COMO_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_COMO_NAME "Comeau Computing"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_COMO,BOOST_LIB_STD_COMO_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/modena.h b/3party/boost/boost/predef/library/std/modena.h
new file mode 100644
index 0000000000..fa7c061cfe
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/modena.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_MODENA_H
+#define BOOST_PREDEF_LIBRARY_STD_MODENA_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_MSIPL`]
+
+[@http://modena.us/ Modena Software Lib++] Standard C++ Library.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`MSIPL_COMPILE_H`] [__predef_detection__]]
+ [[`__MSIPL_COMPILE_H`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_LIB_STD_MSIPL BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(MSIPL_COMPILE_H) || defined(__MSIPL_COMPILE_H)
+# undef BOOST_LIB_STD_MSIPL
+# define BOOST_LIB_STD_MSIPL BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LIB_STD_MSIPL
+# define BOOST_LIB_STD_MSIPL_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_MSIPL_NAME "Modena Software Lib++"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_MSIPL,BOOST_LIB_STD_MSIPL_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/msl.h b/3party/boost/boost/predef/library/std/msl.h
new file mode 100644
index 0000000000..16ddec6905
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/msl.h
@@ -0,0 +1,54 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_MSL_H
+#define BOOST_PREDEF_LIBRARY_STD_MSL_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_MSL`]
+
+[@http://www.freescale.com/ Metrowerks] Standard C++ Library.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__MSL_CPP__`] [__predef_detection__]]
+ [[`__MSL__`] [__predef_detection__]]
+
+ [[`__MSL_CPP__`] [V.R.P]]
+ [[`__MSL__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_LIB_STD_MSL BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MSL_CPP__) || defined(__MSL__)
+# undef BOOST_LIB_STD_MSL
+# if defined(__MSL_CPP__)
+# define BOOST_LIB_STD_MSL BOOST_PREDEF_MAKE_0X_VRPP(__MSL_CPP__)
+# else
+# define BOOST_LIB_STD_MSL BOOST_PREDEF_MAKE_0X_VRPP(__MSL__)
+# endif
+#endif
+
+#if BOOST_LIB_STD_MSL
+# define BOOST_LIB_STD_MSL_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_MSL_NAME "Metrowerks"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_MSL,BOOST_LIB_STD_MSL_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/roguewave.h b/3party/boost/boost/predef/library/std/roguewave.h
new file mode 100644
index 0000000000..38471d09ab
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/roguewave.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_ROGUEWAVE_H
+#define BOOST_PREDEF_LIBRARY_STD_ROGUEWAVE_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_RW`]
+
+[@http://stdcxx.apache.org/ Roguewave] Standard C++ library.
+If available version number as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__STD_RWCOMPILER_H__`] [__predef_detection__]]
+ [[`_RWSTD_VER`] [__predef_detection__]]
+
+ [[`_RWSTD_VER`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_LIB_STD_RW BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+# undef BOOST_LIB_STD_RW
+# if defined(_RWSTD_VER)
+# if _RWSTD_VER < 0x010000
+# define BOOST_LIB_STD_RW BOOST_PREDEF_MAKE_0X_VVRRP(_RWSTD_VER)
+# else
+# define BOOST_LIB_STD_RW BOOST_PREDEF_MAKE_0X_VVRRPP(_RWSTD_VER)
+# endif
+# else
+# define BOOST_LIB_STD_RW BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_LIB_STD_RW
+# define BOOST_LIB_STD_RW_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_RW_NAME "Roguewave"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_RW,BOOST_LIB_STD_RW_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/sgi.h b/3party/boost/boost/predef/library/std/sgi.h
new file mode 100644
index 0000000000..16f0db1076
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/sgi.h
@@ -0,0 +1,52 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_SGI_H
+#define BOOST_PREDEF_LIBRARY_STD_SGI_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_SGI`]
+
+[@http://www.sgi.com/tech/stl/ SGI] Standard C++ library.
+If available version number as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__STL_CONFIG_H`] [__predef_detection__]]
+
+ [[`__SGI_STL`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_LIB_STD_SGI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__STL_CONFIG_H)
+# undef BOOST_LIB_STD_SGI
+# if defined(__SGI_STL)
+# define BOOST_LIB_STD_SGI BOOST_PREDEF_MAKE_0X_VRP(__SGI_STL)
+# else
+# define BOOST_LIB_STD_SGI BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_LIB_STD_SGI
+# define BOOST_LIB_STD_SGI_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_SGI_NAME "SGI"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_SGI,BOOST_LIB_STD_SGI_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/stdcpp3.h b/3party/boost/boost/predef/library/std/stdcpp3.h
new file mode 100644
index 0000000000..19ebc8683d
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/stdcpp3.h
@@ -0,0 +1,54 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_STDCPP3_H
+#define BOOST_PREDEF_LIBRARY_STD_STDCPP3_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_GNU`]
+
+[@http://gcc.gnu.org/libstdc++/ GNU libstdc++] Standard C++ library.
+Version number available as year (from 1970), month, and day.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__GLIBCXX__`] [__predef_detection__]]
+ [[`__GLIBCPP__`] [__predef_detection__]]
+
+ [[`__GLIBCXX__`] [V.R.P]]
+ [[`__GLIBCPP__`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_LIB_STD_GNU BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GLIBCPP__) || defined(__GLIBCXX__)
+# undef BOOST_LIB_STD_GNU
+# if defined(__GLIBCXX__)
+# define BOOST_LIB_STD_GNU BOOST_PREDEF_MAKE_YYYYMMDD(__GLIBCXX__)
+# else
+# define BOOST_LIB_STD_GNU BOOST_PREDEF_MAKE_YYYYMMDD(__GLIBCPP__)
+# endif
+#endif
+
+#if BOOST_LIB_STD_GNU
+# define BOOST_LIB_STD_GNU_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_GNU_NAME "GNU"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_GNU,BOOST_LIB_STD_GNU_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/stlport.h b/3party/boost/boost/predef/library/std/stlport.h
new file mode 100644
index 0000000000..1b6cebb018
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/stlport.h
@@ -0,0 +1,60 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_STLPORT_H
+#define BOOST_PREDEF_LIBRARY_STD_STLPORT_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_STLPORT`]
+
+[@http://sourceforge.net/projects/stlport/ STLport Standard C++] library.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__SGI_STL_PORT`] [__predef_detection__]]
+ [[`_STLPORT_VERSION`] [__predef_detection__]]
+
+ [[`_STLPORT_MAJOR`, `_STLPORT_MINOR`, `_STLPORT_PATCHLEVEL`] [V.R.P]]
+ [[`_STLPORT_VERSION`] [V.R.P]]
+ [[`__SGI_STL_PORT`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_LIB_STD_STLPORT BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+# undef BOOST_LIB_STD_STLPORT
+# if !defined(BOOST_LIB_STD_STLPORT) && defined(_STLPORT_MAJOR)
+# define BOOST_LIB_STD_STLPORT \
+ BOOST_VERSION_NUMBER(_STLPORT_MAJOR,_STLPORT_MINOR,_STLPORT_PATCHLEVEL)
+# endif
+# if !defined(BOOST_LIB_STD_STLPORT) && defined(_STLPORT_VERSION)
+# define BOOST_LIB_STD_STLPORT BOOST_PREDEF_MAKE_0X_VRP(_STLPORT_VERSION)
+# endif
+# if !defined(BOOST_LIB_STD_STLPORT)
+# define BOOST_LIB_STD_STLPORT BOOST_PREDEF_MAKE_0X_VRP(__SGI_STL_PORT)
+# endif
+#endif
+
+#if BOOST_LIB_STD_STLPORT
+# define BOOST_LIB_STD_STLPORT_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_STLPORT_NAME "STLport"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_STLPORT,BOOST_LIB_STD_STLPORT_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/library/std/vacpp.h b/3party/boost/boost/predef/library/std/vacpp.h
new file mode 100644
index 0000000000..1c259c558c
--- /dev/null
+++ b/3party/boost/boost/predef/library/std/vacpp.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_LIBRARY_STD_VACPP_H
+#define BOOST_PREDEF_LIBRARY_STD_VACPP_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_IBM`]
+
+[@http://www.ibm.com/software/awdtools/xlcpp/ IBM VACPP Standard C++] library.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__IBMCPP__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_LIB_STD_IBM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__IBMCPP__)
+# undef BOOST_LIB_STD_IBM
+# define BOOST_LIB_STD_IBM BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LIB_STD_IBM
+# define BOOST_LIB_STD_IBM_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_IBM_NAME "IBM VACPP"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_IBM,BOOST_LIB_STD_IBM_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/make.h b/3party/boost/boost/predef/make.h
new file mode 100644
index 0000000000..d327906f2f
--- /dev/null
+++ b/3party/boost/boost/predef/make.h
@@ -0,0 +1,87 @@
+/*
+Copyright Rene Rivera 2008-2013
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#include <boost/predef/detail/test.h>
+
+#ifndef BOOST_PREDEF_MAKE_H
+#define BOOST_PREDEF_MAKE_H
+
+/*
+Shorthands for the common version number formats used by vendors...
+*/
+
+/*`
+[heading `BOOST_PREDEF_MAKE_..` macros]
+
+These set of macros decompose common vendor version number
+macros which are composed version, revision, and patch digits.
+The naming convention indicates:
+
+* The base of the specified version number. "`BOOST_PREDEF_MAKE_0X`" for
+ hexadecimal digits, and "`BOOST_PREDEF_MAKE_10`" for decimal digits.
+* The format of the vendor version number. Where "`V`" indicates the version digits,
+ "`R`" indicates the revision digits, "`P`" indicates the patch digits, and "`0`"
+ indicates an ignored digit.
+
+Macros are:
+*/
+/*` `BOOST_PREDEF_MAKE_0X_VRP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRP(V) BOOST_VERSION_NUMBER((V&0xF00)>>8,(V&0xF0)>>4,(V&0xF))
+/*` `BOOST_PREDEF_MAKE_0X_VVRP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRP(V) BOOST_VERSION_NUMBER((V&0xFF00)>>8,(V&0xF0)>>4,(V&0xF))
+/*` `BOOST_PREDEF_MAKE_0X_VRPP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRPP(V) BOOST_VERSION_NUMBER((V&0xF000)>>12,(V&0xF00)>>8,(V&0xFF))
+/*` `BOOST_PREDEF_MAKE_0X_VVRR(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRR(V) BOOST_VERSION_NUMBER((V&0xFF00)>>8,(V&0xFF),0)
+/*` `BOOST_PREDEF_MAKE_0X_VRRPPPP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRRPPPP(V) BOOST_VERSION_NUMBER((V&0xF000000)>>24,(V&0xFF0000)>>16,(V&0xFFFF))
+/*` `BOOST_PREDEF_MAKE_0X_VVRRP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRRP(V) BOOST_VERSION_NUMBER((V&0xFF000)>>12,(V&0xFF0)>>4,(V&0xF))
+/*` `BOOST_PREDEF_MAKE_0X_VRRPP000(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRRPP000(V) BOOST_VERSION_NUMBER((V&0xF0000000)>>28,(V&0xFF00000)>>20,(V&0xFF000)>>12)
+/*` `BOOST_PREDEF_MAKE_10_VPPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VPPP(V) BOOST_VERSION_NUMBER(((V)/1000)%10,0,(V)%1000)
+/*` `BOOST_PREDEF_MAKE_10_VRP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRP(V) BOOST_VERSION_NUMBER(((V)/100)%10,((V)/10)%10,(V)%10)
+/*` `BOOST_PREDEF_MAKE_10_VRP000(V)` */
+#define BOOST_PREDEF_MAKE_10_VRP000(V) BOOST_VERSION_NUMBER(((V)/100000)%10,((V)/10000)%10,((V)/1000)%10)
+/*` `BOOST_PREDEF_MAKE_10_VRPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRPP(V) BOOST_VERSION_NUMBER(((V)/1000)%10,((V)/100)%10,(V)%100)
+/*` `BOOST_PREDEF_MAKE_10_VRR(V)` */
+#define BOOST_PREDEF_MAKE_10_VRR(V) BOOST_VERSION_NUMBER(((V)/100)%10,(V)%100,0)
+/*` `BOOST_PREDEF_MAKE_10_VRRPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRRPP(V) BOOST_VERSION_NUMBER(((V)/10000)%10,((V)/100)%100,(V)%100)
+/*` `BOOST_PREDEF_MAKE_10_VRR000(V)` */
+#define BOOST_PREDEF_MAKE_10_VRR000(V) BOOST_VERSION_NUMBER(((V)/100000)%10,((V)/1000)%100,0)
+/*` `BOOST_PREDEF_MAKE_10_VV00(V)` */
+#define BOOST_PREDEF_MAKE_10_VV00(V) BOOST_VERSION_NUMBER(((V)/100)%100,0,0)
+/*` `BOOST_PREDEF_MAKE_10_VVRR(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR(V) BOOST_VERSION_NUMBER(((V)/100)%100,(V)%100,0)
+/*` `BOOST_PREDEF_MAKE_10_VVRRPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRRPP(V) BOOST_VERSION_NUMBER(((V)/10000)%100,((V)/100)%100,(V)%100)
+/*` `BOOST_PREDEF_MAKE_10_VVRR0PP00(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR0PP00(V) BOOST_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,((V)/100)%100)
+/*` `BOOST_PREDEF_MAKE_10_VVRR0PPPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR0PPPP(V) BOOST_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,(V)%10000)
+/*` `BOOST_PREDEF_MAKE_10_VVRR00PP00(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR00PP00(V) BOOST_VERSION_NUMBER(((V)/100000000)%100,((V)/1000000)%100,((V)/100)%100)
+/*`
+[heading `BOOST_PREDEF_MAKE_*..` date macros]
+
+Date decomposition macros return a date in the relative to the 1970
+Epoch date. If the month is not available, January 1st is used as the month and day.
+If the day is not available, but the month is, the 1st of the month is used as the day.
+*/
+/*` `BOOST_PREDEF_MAKE_DATE(Y,M,D)` */
+#define BOOST_PREDEF_MAKE_DATE(Y,M,D) BOOST_VERSION_NUMBER((Y)%10000-1970,(M)%100,(D)%100)
+/*` `BOOST_PREDEF_MAKE_YYYYMMDD(V)` */
+#define BOOST_PREDEF_MAKE_YYYYMMDD(V) BOOST_PREDEF_MAKE_DATE(((V)/10000)%10000,((V)/100)%100,(V)%100)
+/*` `BOOST_PREDEF_MAKE_YYYY(V)` */
+#define BOOST_PREDEF_MAKE_YYYY(V) BOOST_PREDEF_MAKE_DATE(V,1,1)
+/*` `BOOST_PREDEF_MAKE_YYYYMM(V)` */
+#define BOOST_PREDEF_MAKE_YYYYMM(V) BOOST_PREDEF_MAKE_DATE((V)/100,(V),1)
+
+#endif
diff --git a/3party/boost/boost/predef/os.h b/3party/boost/boost/predef/os.h
new file mode 100644
index 0000000000..628eb4f444
--- /dev/null
+++ b/3party/boost/boost/predef/os.h
@@ -0,0 +1,30 @@
+/*
+Copyright Rene Rivera 2008-2012
+Copyright Franz Detro 2014
+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_PREDEF_OS_H
+#define BOOST_PREDEF_OS_H
+
+#include <boost/predef/os/aix.h>
+#include <boost/predef/os/amigaos.h>
+#include <boost/predef/os/android.h>
+#include <boost/predef/os/beos.h>
+#include <boost/predef/os/bsd.h>
+#include <boost/predef/os/cygwin.h>
+#include <boost/predef/os/hpux.h>
+#include <boost/predef/os/irix.h>
+#include <boost/predef/os/ios.h>
+#include <boost/predef/os/linux.h>
+#include <boost/predef/os/macos.h>
+#include <boost/predef/os/os400.h>
+#include <boost/predef/os/qnxnto.h>
+#include <boost/predef/os/solaris.h>
+#include <boost/predef/os/unix.h>
+#include <boost/predef/os/vms.h>
+#include <boost/predef/os/windows.h>
+
+#endif
diff --git a/3party/boost/boost/predef/os/aix.h b/3party/boost/boost/predef/os/aix.h
new file mode 100644
index 0000000000..07523c8de4
--- /dev/null
+++ b/3party/boost/boost/predef/os/aix.h
@@ -0,0 +1,67 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_AIX_H
+#define BOOST_PREDEF_OS_AIX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_AIX`]
+
+[@http://en.wikipedia.org/wiki/AIX_operating_system IBM AIX] operating system.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`_AIX`] [__predef_detection__]]
+ [[`__TOS_AIX__`] [__predef_detection__]]
+
+ [[`_AIX43`] [4.3.0]]
+ [[`_AIX41`] [4.1.0]]
+ [[`_AIX32`] [3.2.0]]
+ [[`_AIX3`] [3.0.0]]
+ ]
+ */
+
+#define BOOST_OS_AIX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(_AIX) || defined(__TOS_AIX__) \
+ )
+# undef BOOST_OS_AIX
+# if !defined(BOOST_OS_AIX) && defined(_AIX43)
+# define BOOST_OS_AIX BOOST_VERSION_NUMBER(4,3,0)
+# endif
+# if !defined(BOOST_OS_AIX) && defined(_AIX41)
+# define BOOST_OS_AIX BOOST_VERSION_NUMBER(4,1,0)
+# endif
+# if !defined(BOOST_OS_AIX) && defined(_AIX32)
+# define BOOST_OS_AIX BOOST_VERSION_NUMBER(3,2,0)
+# endif
+# if !defined(BOOST_OS_AIX) && defined(_AIX3)
+# define BOOST_OS_AIX BOOST_VERSION_NUMBER(3,0,0)
+# endif
+# if !defined(BOOST_OS_AIX)
+# define BOOST_OS_AIX BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_OS_AIX
+# define BOOST_OS_AIX_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_AIX_NAME "IBM AIX"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_AIX,BOOST_OS_AIX_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/amigaos.h b/3party/boost/boost/predef/os/amigaos.h
new file mode 100644
index 0000000000..fae2408bd6
--- /dev/null
+++ b/3party/boost/boost/predef/os/amigaos.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_AMIGAOS_H
+#define BOOST_PREDEF_OS_AMIGAOS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_AMIGAOS`]
+
+[@http://en.wikipedia.org/wiki/AmigaOS AmigaOS] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`AMIGA`] [__predef_detection__]]
+ [[`__amigaos__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_AMIGAOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(AMIGA) || defined(__amigaos__) \
+ )
+# undef BOOST_OS_AMIGAOS
+# define BOOST_OS_AMIGAOS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_AMIGAOS
+# define BOOST_OS_AMIGAOS_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_AMIGAOS_NAME "AmigaOS"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_AMIGAOS,BOOST_OS_AMIGAOS_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/android.h b/3party/boost/boost/predef/os/android.h
new file mode 100644
index 0000000000..0de5870d49
--- /dev/null
+++ b/3party/boost/boost/predef/os/android.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2013
+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_PREDEF_OS_ADROID_H
+#define BOOST_PREDEF_OS_ADROID_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_ANDROID`]
+
+[@http://en.wikipedia.org/wiki/Android_%28operating_system%29 Android] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__ANDROID__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_ANDROID BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__ANDROID__) \
+ )
+# undef BOOST_OS_ANDROID
+# define BOOST_OS_ANDROID BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_ANDROID
+# define BOOST_OS_ANDROID_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_ANDROID_NAME "Android"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_ANDROID,BOOST_OS_ANDROID_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/beos.h b/3party/boost/boost/predef/os/beos.h
new file mode 100644
index 0000000000..7a92b944ab
--- /dev/null
+++ b/3party/boost/boost/predef/os/beos.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_BEOS_H
+#define BOOST_PREDEF_OS_BEOS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_BEOS`]
+
+[@http://en.wikipedia.org/wiki/BeOS BeOS] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__BEOS__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_BEOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__BEOS__) \
+ )
+# undef BOOST_OS_BEOS
+# define BOOST_OS_BEOS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_BEOS
+# define BOOST_OS_BEOS_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BEOS_NAME "BeOS"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BEOS,BOOST_OS_BEOS_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/bsd.h b/3party/boost/boost/predef/os/bsd.h
new file mode 100644
index 0000000000..f370f56bad
--- /dev/null
+++ b/3party/boost/boost/predef/os/bsd.h
@@ -0,0 +1,95 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_BSD_H
+#define BOOST_PREDEF_OS_BSD_H
+
+/* Special case: OSX will define BSD predefs if the sys/param.h
+ * header is included. We can guard against that, but only if we
+ * detect OSX first. Hence we will force include OSX detection
+ * before doing any BSD detection.
+ */
+#include <boost/predef/os/macos.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_BSD`]
+
+[@http://en.wikipedia.org/wiki/Berkeley_Software_Distribution BSD] operating system.
+
+BSD has various branch operating systems possible and each detected
+individually. This detects the following variations and sets a specific
+version number macro to match:
+
+* `BOOST_OS_BSD_DRAGONFLY` [@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD]
+* `BOOST_OS_BSD_FREE` [@http://en.wikipedia.org/wiki/Freebsd FreeBSD]
+* `BOOST_OS_BSD_BSDI` [@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS]
+* `BOOST_OS_BSD_NET` [@http://en.wikipedia.org/wiki/Netbsd NetBSD]
+* `BOOST_OS_BSD_OPEN` [@http://en.wikipedia.org/wiki/Openbsd OpenBSD]
+
+[note The general `BOOST_OS_BSD` is set in all cases to indicate some form
+of BSD. If the above variants is detected the corresponding macro is also set.]
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`BSD`] [__predef_detection__]]
+ [[`_SYSTYPE_BSD`] [__predef_detection__]]
+
+ [[`BSD4_2`] [4.2.0]]
+ [[`BSD4_3`] [4.3.0]]
+ [[`BSD4_4`] [4.4.0]]
+ [[`BSD`] [V.R.0]]
+ ]
+ */
+
+#include <boost/predef/os/bsd/bsdi.h>
+#include <boost/predef/os/bsd/dragonfly.h>
+#include <boost/predef/os/bsd/free.h>
+#include <boost/predef/os/bsd/open.h>
+#include <boost/predef/os/bsd/net.h>
+
+#ifndef BOOST_OS_BSD
+#define BOOST_OS_BSD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#endif
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(BSD) || \
+ defined(_SYSTYPE_BSD) \
+ )
+# undef BOOST_OS_BSD
+# include <sys/param.h>
+# if !defined(BOOST_OS_BSD) && defined(BSD4_4)
+# define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,4,0)
+# endif
+# if !defined(BOOST_OS_BSD) && defined(BSD4_3)
+# define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,3,0)
+# endif
+# if !defined(BOOST_OS_BSD) && defined(BSD4_2)
+# define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,2,0)
+# endif
+# if !defined(BOOST_OS_BSD) && defined(BSD)
+# define BOOST_OS_BSD BOOST_PREDEF_MAKE_10_VVRR(BSD)
+# endif
+# if !defined(BOOST_OS_BSD)
+# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_OS_BSD
+# define BOOST_OS_BSD_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_NAME "BSD"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD,BOOST_OS_BSD_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/os/bsd/bsdi.h b/3party/boost/boost/predef/os/bsd/bsdi.h
new file mode 100644
index 0000000000..cb57e1bcd4
--- /dev/null
+++ b/3party/boost/boost/predef/os/bsd/bsdi.h
@@ -0,0 +1,48 @@
+/*
+Copyright Rene Rivera 2012-2013
+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_PREDEF_OS_BSD_BSDI_H
+#define BOOST_PREDEF_OS_BSD_BSDI_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_BSDI`]
+
+[@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__bsdi__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_BSD_BSDI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__bsdi__) \
+ )
+# ifndef BOOST_OS_BSD_AVAILABLE
+# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+# define BOOST_OS_BSD_AVAILABLE
+# endif
+# undef BOOST_OS_BSD_BSDI
+# define BOOST_OS_BSD_BSDI BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_BSD_BSDI
+# define BOOST_OS_BSD_BSDI_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_BSDI_NAME "BSDi BSD/OS"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_BSDI,BOOST_OS_BSD_BSDI_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/os/bsd/dragonfly.h b/3party/boost/boost/predef/os/bsd/dragonfly.h
new file mode 100644
index 0000000000..202f8a1de2
--- /dev/null
+++ b/3party/boost/boost/predef/os/bsd/dragonfly.h
@@ -0,0 +1,50 @@
+/*
+Copyright Rene Rivera 2012-2013
+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_PREDEF_OS_BSD_DRAGONFLY_H
+#define BOOST_PREDEF_OS_BSD_DRAGONFLY_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_DRAGONFLY`]
+
+[@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__DragonFly__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_BSD_DRAGONFLY BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__DragonFly__) \
+ )
+# ifndef BOOST_OS_BSD_AVAILABLE
+# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+# define BOOST_OS_BSD_AVAILABLE
+# endif
+# undef BOOST_OS_BSD_DRAGONFLY
+# if defined(__DragonFly__)
+# define BOOST_OS_DRAGONFLY_BSD BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_OS_BSD_DRAGONFLY
+# define BOOST_OS_BSD_DRAGONFLY_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_DRAGONFLY_NAME "DragonFly BSD"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_DRAGONFLY,BOOST_OS_BSD_DRAGONFLY_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/os/bsd/free.h b/3party/boost/boost/predef/os/bsd/free.h
new file mode 100644
index 0000000000..404e8ed830
--- /dev/null
+++ b/3party/boost/boost/predef/os/bsd/free.h
@@ -0,0 +1,60 @@
+/*
+Copyright Rene Rivera 2012-2013
+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_PREDEF_OS_BSD_FREE_H
+#define BOOST_PREDEF_OS_BSD_FREE_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_FREE`]
+
+[@http://en.wikipedia.org/wiki/Freebsd FreeBSD] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__FreeBSD__`] [__predef_detection__]]
+
+ [[`__FreeBSD_version`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_OS_BSD_FREE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__FreeBSD__) \
+ )
+# ifndef BOOST_OS_BSD_AVAILABLE
+# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+# define BOOST_OS_BSD_AVAILABLE
+# endif
+# undef BOOST_OS_BSD_FREE
+# if defined(__FreeBSD_version)
+# if __FreeBSD_version < 500000
+# define BOOST_OS_BSD_FREE \
+ BOOST_PREDEF_MAKE_10_VRP000(__FreeBSD_version)
+# else
+# define BOOST_OS_BSD_FREE \
+ BOOST_PREDEF_MAKE_10_VRR000(__FreeBSD_version)
+# endif
+# else
+# define BOOST_OS_BSD_FREE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_OS_BSD_FREE
+# define BOOST_OS_BSD_FREE_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_FREE_NAME "Free BSD"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_FREE,BOOST_OS_BSD_FREE_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/os/bsd/net.h b/3party/boost/boost/predef/os/bsd/net.h
new file mode 100644
index 0000000000..dcc4131b8f
--- /dev/null
+++ b/3party/boost/boost/predef/os/bsd/net.h
@@ -0,0 +1,84 @@
+/*
+Copyright Rene Rivera 2012-2013
+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_PREDEF_OS_BSD_NET_H
+#define BOOST_PREDEF_OS_BSD_NET_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_NET`]
+
+[@http://en.wikipedia.org/wiki/Netbsd NetBSD] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__NETBSD__`] [__predef_detection__]]
+ [[`__NetBSD__`] [__predef_detection__]]
+
+ [[`__NETBSD_version`] [V.R.P]]
+ [[`NetBSD0_8`] [0.8.0]]
+ [[`NetBSD0_9`] [0.9.0]]
+ [[`NetBSD1_0`] [1.0.0]]
+ [[`__NetBSD_Version`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__NETBSD__) || defined(__NetBSD__) \
+ )
+# ifndef BOOST_OS_BSD_AVAILABLE
+# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+# define BOOST_OS_BSD_AVAILABLE
+# endif
+# undef BOOST_OS_BSD_NET
+# if defined(__NETBSD__)
+# if defined(__NETBSD_version)
+# if __NETBSD_version < 500000
+# define BOOST_OS_BSD_NET \
+ BOOST_PREDEF_MAKE_10_VRP000(__NETBSD_version)
+# else
+# define BOOST_OS_BSD_NET \
+ BOOST_PREDEF_MAKE_10_VRR000(__NETBSD_version)
+# endif
+# else
+# define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# elif defined(__NetBSD__)
+# if !defined(BOOST_OS_BSD_NET) && defined(NetBSD0_8)
+# define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(0,8,0)
+# endif
+# if !defined(BOOST_OS_BSD_NET) && defined(NetBSD0_9)
+# define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(0,9,0)
+# endif
+# if !defined(BOOST_OS_BSD_NET) && defined(NetBSD1_0)
+# define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(1,0,0)
+# endif
+# if !defined(BOOST_OS_BSD_NET) && defined(__NetBSD_Version)
+# define BOOST_OS_BSD_NET \
+ BOOST_PREDEF_MAKE_10_VVRR00PP00(__NetBSD_Version)
+# endif
+# if !defined(BOOST_OS_BSD_NET)
+# define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# endif
+#endif
+
+#if BOOST_OS_BSD_NET
+# define BOOST_OS_BSD_NET_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_NET_NAME "DragonFly BSD"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_NET,BOOST_OS_BSD_NET_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/os/bsd/open.h b/3party/boost/boost/predef/os/bsd/open.h
new file mode 100644
index 0000000000..e81ebc6435
--- /dev/null
+++ b/3party/boost/boost/predef/os/bsd/open.h
@@ -0,0 +1,171 @@
+/*
+Copyright Rene Rivera 2012-2013
+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_PREDEF_OS_BSD_OPEN_H
+#define BOOST_PREDEF_OS_BSD_OPEN_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_OPEN`]
+
+[@http://en.wikipedia.org/wiki/Openbsd OpenBSD] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__OpenBSD__`] [__predef_detection__]]
+
+ [[`OpenBSD2_0`] [2.0.0]]
+ [[`OpenBSD2_1`] [2.1.0]]
+ [[`OpenBSD2_2`] [2.2.0]]
+ [[`OpenBSD2_3`] [2.3.0]]
+ [[`OpenBSD2_4`] [2.4.0]]
+ [[`OpenBSD2_5`] [2.5.0]]
+ [[`OpenBSD2_6`] [2.6.0]]
+ [[`OpenBSD2_7`] [2.7.0]]
+ [[`OpenBSD2_8`] [2.8.0]]
+ [[`OpenBSD2_9`] [2.9.0]]
+ [[`OpenBSD3_0`] [3.0.0]]
+ [[`OpenBSD3_1`] [3.1.0]]
+ [[`OpenBSD3_2`] [3.2.0]]
+ [[`OpenBSD3_3`] [3.3.0]]
+ [[`OpenBSD3_4`] [3.4.0]]
+ [[`OpenBSD3_5`] [3.5.0]]
+ [[`OpenBSD3_6`] [3.6.0]]
+ [[`OpenBSD3_7`] [3.7.0]]
+ [[`OpenBSD3_8`] [3.8.0]]
+ [[`OpenBSD3_9`] [3.9.0]]
+ [[`OpenBSD4_0`] [4.0.0]]
+ [[`OpenBSD4_1`] [4.1.0]]
+ [[`OpenBSD4_2`] [4.2.0]]
+ [[`OpenBSD4_3`] [4.3.0]]
+ [[`OpenBSD4_4`] [4.4.0]]
+ [[`OpenBSD4_5`] [4.5.0]]
+ [[`OpenBSD4_6`] [4.6.0]]
+ [[`OpenBSD4_7`] [4.7.0]]
+ [[`OpenBSD4_8`] [4.8.0]]
+ [[`OpenBSD4_9`] [4.9.0]]
+ ]
+ */
+
+#define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__OpenBSD__) \
+ )
+# ifndef BOOST_OS_BSD_AVAILABLE
+# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+# define BOOST_OS_BSD_AVAILABLE
+# endif
+# undef BOOST_OS_BSD_OPEN
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_0)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,0,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_1)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,1,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_2)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,2,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_3)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,3,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_4)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,4,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_5)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,5,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_6)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,6,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_7)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,7,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_8)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,8,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_9)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,9,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_0)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,0,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_1)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,1,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_2)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,2,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_3)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,3,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_4)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,4,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_5)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,5,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_6)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,6,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_7)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,7,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_8)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,8,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_9)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,9,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_0)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,0,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_1)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,1,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_2)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,2,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_3)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,3,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_4)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,4,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_5)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,5,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_6)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,6,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_7)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,7,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_8)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,8,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_9)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,9,0)
+# endif
+# if !defined(BOOST_OS_BSD_OPEN)
+# define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_OS_BSD_OPEN
+# define BOOST_OS_BSD_OPEN_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_OPEN_NAME "OpenBSD"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_OPEN,BOOST_OS_BSD_OPEN_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/os/cygwin.h b/3party/boost/boost/predef/os/cygwin.h
new file mode 100644
index 0000000000..04ee3995e0
--- /dev/null
+++ b/3party/boost/boost/predef/os/cygwin.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_CYGWIN_H
+#define BOOST_PREDEF_OS_CYGWIN_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_CYGWIN`]
+
+[@http://en.wikipedia.org/wiki/Cygwin Cygwin] evironment.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__CYGWIN__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_CYGWIN BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__CYGWIN__) \
+ )
+# undef BOOST_OS_CYGWIN
+# define BOOST_OS_CGYWIN BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_CYGWIN
+# define BOOST_OS_CYGWIN_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_CYGWIN_NAME "Cygwin"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_CYGWIN,BOOST_OS_CYGWIN_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/hpux.h b/3party/boost/boost/predef/os/hpux.h
new file mode 100644
index 0000000000..946196f4a7
--- /dev/null
+++ b/3party/boost/boost/predef/os/hpux.h
@@ -0,0 +1,48 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_HPUX_H
+#define BOOST_PREDEF_OS_HPUX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_HPUX`]
+
+[@http://en.wikipedia.org/wiki/HP-UX HP-UX] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`hpux`] [__predef_detection__]]
+ [[`_hpux`] [__predef_detection__]]
+ [[`__hpux`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_HPUX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(hpux) || defined(_hpux) || defined(__hpux) \
+ )
+# undef BOOST_OS_HPUX
+# define BOOST_OS_HPUX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_HPUX
+# define BOOST_OS_HPUX_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_HPUX_NAME "HP-UX"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_HPUX,BOOST_OS_HPUX_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/ios.h b/3party/boost/boost/predef/os/ios.h
new file mode 100644
index 0000000000..b83a9db537
--- /dev/null
+++ b/3party/boost/boost/predef/os/ios.h
@@ -0,0 +1,51 @@
+/*
+Copyright Franz Detro 2014
+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_PREDEF_OS_IOS_H
+#define BOOST_PREDEF_OS_IOS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_IOS`]
+
+[@http://en.wikipedia.org/wiki/iOS iOS] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__APPLE__`] [__predef_detection__]]
+ [[`__MACH__`] [__predef_detection__]]
+ [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__predef_detection__]]
+
+ [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000]]
+ ]
+ */
+
+#define BOOST_OS_IOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__APPLE__) && defined(__MACH__) && \
+ defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) \
+ )
+# undef BOOST_OS_IOS
+# define BOOST_OS_IOS (__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000)
+#endif
+
+#if BOOST_OS_IOS
+# define BOOST_OS_IOS_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_IOS_NAME "iOS"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_IOS,BOOST_OS_IOS_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/irix.h b/3party/boost/boost/predef/os/irix.h
new file mode 100644
index 0000000000..a9e63b855d
--- /dev/null
+++ b/3party/boost/boost/predef/os/irix.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_IRIX_H
+#define BOOST_PREDEF_OS_IRIX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_IRIX`]
+
+[@http://en.wikipedia.org/wiki/Irix IRIX] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`sgi`] [__predef_detection__]]
+ [[`__sgi`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_IRIX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(sgi) || defined(__sgi) \
+ )
+# undef BOOST_OS_IRIX
+# define BOOST_OS_IRIX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_IRIX
+# define BOOST_OS_IRIX_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_IRIX_NAME "IRIX"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_IRIX,BOOST_OS_IRIX_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/linux.h b/3party/boost/boost/predef/os/linux.h
new file mode 100644
index 0000000000..b436e3fd4d
--- /dev/null
+++ b/3party/boost/boost/predef/os/linux.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_LINUX_H
+#define BOOST_PREDEF_OS_LINUX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_LINUX`]
+
+[@http://en.wikipedia.org/wiki/Linux Linux] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`linux`] [__predef_detection__]]
+ [[`__linux`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_LINUX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(linux) || defined(__linux) \
+ )
+# undef BOOST_OS_LINUX
+# define BOOST_OS_LINUX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_LINUX
+# define BOOST_OS_LINUX_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_LINUX_NAME "Linux"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_LINUX,BOOST_OS_LINUX_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/macos.h b/3party/boost/boost/predef/os/macos.h
new file mode 100644
index 0000000000..cdcf2cb2b2
--- /dev/null
+++ b/3party/boost/boost/predef/os/macos.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-2013
+Copyright Franz Detro 2014
+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_PREDEF_OS_MACOS_H
+#define BOOST_PREDEF_OS_MACOS_H
+
+/* Special case: iOS will define the same predefs as MacOS, and additionally
+ '__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__'. We can guard against that,
+ but only if we detect iOS first. Hence we will force include iOS detection
+ * before doing any MacOS detection.
+ */
+#include <boost/predef/os/ios.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_MACOS`]
+
+[@http://en.wikipedia.org/wiki/Mac_OS Mac OS] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`macintosh`] [__predef_detection__]]
+ [[`Macintosh`] [__predef_detection__]]
+ [[`__APPLE__`] [__predef_detection__]]
+ [[`__MACH__`] [__predef_detection__]]
+
+ [[`__APPLE__`, `__MACH__`] [10.0.0]]
+ [[ /otherwise/ ] [9.0.0]]
+ ]
+ */
+
+#define BOOST_OS_MACOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(macintosh) || defined(Macintosh) || \
+ (defined(__APPLE__) && defined(__MACH__)) \
+ )
+# undef BOOST_OS_MACOS
+# if !defined(BOOST_OS_MACOS) && defined(__APPLE__) && defined(__MACH__)
+# define BOOST_OS_MACOS BOOST_VERSION_NUMBER(10,0,0)
+# endif
+# if !defined(BOOST_OS_MACOS)
+# define BOOST_OS_MACOS BOOST_VERSION_NUMBER(9,0,0)
+# endif
+#endif
+
+#if BOOST_OS_MACOS
+# define BOOST_OS_MACOS_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_MACOS_NAME "Mac OS"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_MACOS,BOOST_OS_MACOS_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/os400.h b/3party/boost/boost/predef/os/os400.h
new file mode 100644
index 0000000000..f7aacf533b
--- /dev/null
+++ b/3party/boost/boost/predef/os/os400.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2011-2013
+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_PREDEF_OS_OS400_H
+#define BOOST_PREDEF_OS_OS400_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_OS400`]
+
+[@http://en.wikipedia.org/wiki/IBM_i IBM OS/400] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__OS400__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_OS400 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__OS400__) \
+ )
+# undef BOOST_OS_OS400
+# define BOOST_OS_OS400 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_OS400
+# define BOOST_OS_OS400_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_OS400_NAME "IBM OS/400"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_OS400,BOOST_OS_OS400_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/qnxnto.h b/3party/boost/boost/predef/os/qnxnto.h
new file mode 100644
index 0000000000..dff536f2d8
--- /dev/null
+++ b/3party/boost/boost/predef/os/qnxnto.h
@@ -0,0 +1,60 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_QNXNTO_H
+#define BOOST_PREDEF_OS_QNXNTO_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_QNX`]
+
+[@http://en.wikipedia.org/wiki/QNX QNX] operating system.
+Version number available as major, and minor if possible. And
+version 4 is specifically detected.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__QNX__`] [__predef_detection__]]
+ [[`__QNXNTO__`] [__predef_detection__]]
+
+ [[`_NTO_VERSION`] [V.R.0]]
+ [[`__QNX__`] [4.0.0]]
+ ]
+ */
+
+#define BOOST_OS_QNX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(__QNX__) || defined(__QNXNTO__) \
+ )
+# undef BOOST_OS_QNX
+# if !defined(BOOST_OS_QNX) && defined(_NTO_VERSION)
+# define BOOST_OS_QNX BOOST_PREDEF_MAKE_10_VVRR(_NTO_VERSION)
+# endif
+# if !defined(BOOST_OS_QNX) && defined(__QNX__)
+# define BOOST_OS_QNX BOOST_VERSION_NUMBER(4,0,0)
+# endif
+# if !defined(BOOST_OS_QNX)
+# define BOOST_OS_QNX BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_OS_QNX
+# define BOOST_OS_QNX_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_QNX_NAME "QNX"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_QNX,BOOST_OS_QNX_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/solaris.h b/3party/boost/boost/predef/os/solaris.h
new file mode 100644
index 0000000000..4d47dfec1d
--- /dev/null
+++ b/3party/boost/boost/predef/os/solaris.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_SOLARIS_H
+#define BOOST_PREDEF_OS_SOLARIS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_SOLARIS`]
+
+[@http://en.wikipedia.org/wiki/Solaris_Operating_Environment Solaris] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`sun`] [__predef_detection__]]
+ [[`__sun`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_SOLARIS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(sun) || defined(__sun) \
+ )
+# undef BOOST_OS_SOLARIS
+# define BOOST_OS_SOLARIS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_SOLARIS
+# define BOOST_OS_SOLARIS_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_SOLARIS_NAME "Solaris"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_SOLARIS,BOOST_OS_SOLARIS_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/unix.h b/3party/boost/boost/predef/os/unix.h
new file mode 100644
index 0000000000..3636dda512
--- /dev/null
+++ b/3party/boost/boost/predef/os/unix.h
@@ -0,0 +1,76 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_UNIX_H
+#define BOOST_PREDEF_OS_UNIX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_UNIX`]
+
+[@http://en.wikipedia.org/wiki/Unix Unix Environment] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`unix`] [__predef_detection__]]
+ [[`__unix`] [__predef_detection__]]
+ [[`_XOPEN_SOURCE`] [__predef_detection__]]
+ [[`_POSIX_SOURCE`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_UNIX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(unix) || defined(__unix) || \
+ defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE)
+# undef BOOST_OS_UNIX
+# define BOOST_OS_UNIX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_UNIX
+# define BOOST_OS_UNIX_AVAILABLE
+#endif
+
+#define BOOST_OS_UNIX_NAME "Unix Environment"
+
+/*`
+[heading `BOOST_OS_SVR4`]
+
+[@http://en.wikipedia.org/wiki/UNIX_System_V SVR4 Environment] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__sysv__`] [__predef_detection__]]
+ [[`__SVR4`] [__predef_detection__]]
+ [[`__svr4__`] [__predef_detection__]]
+ [[`_SYSTYPE_SVR4`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_SVR4 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sysv__) || defined(__SVR4) || \
+ defined(__svr4__) || defined(_SYSTYPE_SVR4)
+# undef BOOST_OS_SVR4
+# define BOOST_OS_SVR4 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_SVR4
+# define BOOST_OS_SVR4_AVAILABLE
+#endif
+
+#define BOOST_OS_SVR4_NAME "SVR4 Environment"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_UNIX,BOOST_OS_UNIX_NAME)
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_SVR4,BOOST_OS_SVR4_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/os/vms.h b/3party/boost/boost/predef/os/vms.h
new file mode 100644
index 0000000000..3d34f63dd9
--- /dev/null
+++ b/3party/boost/boost/predef/os/vms.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2011-2013
+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_PREDEF_OS_VMS_H
+#define BOOST_PREDEF_OS_VMS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_VMS`]
+
+[@http://en.wikipedia.org/wiki/Vms VMS] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`VMS`] [__predef_detection__]]
+ [[`__VMS`] [__predef_detection__]]
+
+ [[`__VMS_VER`] [V.R.P]]
+ ]
+ */
+
+#define BOOST_OS_VMS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(VMS) || defined(__VMS) \
+ )
+# undef BOOST_OS_VMS
+# if defined(__VMS_VER)
+# define BOOST_OS_VMS BOOST_PREDEF_MAKE_10_VVRR00PP00(__VMS_VER)
+# else
+# define BOOST_OS_VMS BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#if BOOST_OS_VMS
+# define BOOST_OS_VMS_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_VMS_NAME "VMS"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_VMS,BOOST_OS_VMS_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/os/windows.h b/3party/boost/boost/predef/os/windows.h
new file mode 100644
index 0000000000..9072539ae0
--- /dev/null
+++ b/3party/boost/boost/predef/os/windows.h
@@ -0,0 +1,51 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_OS_WINDOWS_H
+#define BOOST_PREDEF_OS_WINDOWS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_WINDOWS`]
+
+[@http://en.wikipedia.org/wiki/Category:Microsoft_Windows Microsoft Windows] operating system.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`_WIN32`] [__predef_detection__]]
+ [[`_WIN64`] [__predef_detection__]]
+ [[`__WIN32__`] [__predef_detection__]]
+ [[`__TOS_WIN__`] [__predef_detection__]]
+ [[`__WINDOWS__`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_OS_WINDOWS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+ defined(_WIN32) || defined(_WIN64) || \
+ defined(__WIN32__) || defined(__TOS_WIN__) || \
+ defined(__WINDOWS__) \
+ )
+# undef BOOST_OS_WINDOWS
+# define BOOST_OS_WINDOWS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_WINDOWS
+# define BOOST_OS_WINDOWS_AVAILABLE
+# include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_WINDOWS_NAME "Microsoft Windows"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_WINDOWS,BOOST_OS_WINDOWS_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/other.h b/3party/boost/boost/predef/other.h
new file mode 100644
index 0000000000..04aad1680e
--- /dev/null
+++ b/3party/boost/boost/predef/other.h
@@ -0,0 +1,14 @@
+/*
+Copyright Rene Rivera 2013
+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_PREDEF_OTHER_H
+#define BOOST_PREDEF_OTHER_H
+
+#include <boost/predef/other/endian.h>
+/*#include <boost/predef/other/.h>*/
+
+#endif
diff --git a/3party/boost/boost/predef/other/endian.h b/3party/boost/boost/predef/other/endian.h
new file mode 100644
index 0000000000..fd73364743
--- /dev/null
+++ b/3party/boost/boost/predef/other/endian.h
@@ -0,0 +1,204 @@
+/*
+Copyright Rene Rivera 2013-2014
+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_PREDEF_ENDIAN_H
+#define BOOST_PREDEF_ENDIAN_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/library/c/gnu.h>
+#include <boost/predef/os/macos.h>
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_ENDIAN_*`]
+
+Detection of endian memory ordering. There are four defined macros
+in this header that define the various generally possible endian
+memory orderings:
+
+* `BOOST_ENDIAN_BIG_BYTE`, byte-swapped big-endian.
+* `BOOST_ENDIAN_BIG_WORD`, word-swapped big-endian.
+* `BOOST_ENDIAN_LITTLE_BYTE`, byte-swapped little-endian.
+* `BOOST_ENDIAN_LITTLE_WORD`, word-swapped little-endian.
+
+The detection is conservative in that it only identifies endianness
+that it knows for certain. In particular bi-endianness is not
+indicated as is it not practically possible to determine the
+endianness from anything but an operating system provided
+header. And the currently known headers do not define that
+programatic bi-endianness is available.
+
+This implementation is a compilation of various publicly available
+information and acquired knowledge:
+
+# The indispensable documentation of "Pre-defined Compiler Macros"
+ [@http://sourceforge.net/p/predef/wiki/Endianness Endianness].
+# The various endian specifications available in the
+ [@http://wikipedia.org/ Wikipedia] computer architecture pages.
+# Generally available searches for headers that define endianness.
+ */
+
+#define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_ENDIAN_BIG_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+/* GNU libc provides a header defining __BYTE_ORDER, or _BYTE_ORDER.
+ * And some OSs provide some for of endian header also.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+ !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+# if BOOST_LIB_C_GNU
+# include <endian.h>
+# else
+# if BOOST_OS_MACOS
+# include <machine/endian.h>
+# else
+# if BOOST_OS_BSD
+# if BOOST_OS_BSD_OPEN
+# include <machine/endian.h>
+# else
+# include <sys/endian.h>
+# endif
+# endif
+# endif
+# endif
+# if defined(__BYTE_ORDER)
+# if (__BYTE_ORDER == __BIG_ENDIAN)
+# undef BOOST_ENDIAN_BIG_BYTE
+# define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# if (__BYTE_ORDER == __LITTLE_ENDIAN)
+# undef BOOST_ENDIAN_LITTLE_BYTE
+# define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# if (__BYTE_ORDER == __PDP_ENDIAN)
+# undef BOOST_ENDIAN_LITTLE_WORD
+# define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# endif
+# if !defined(__BYTE_ORDER) && defined(_BYTE_ORDER)
+# if (_BYTE_ORDER == _BIG_ENDIAN)
+# undef BOOST_ENDIAN_BIG_BYTE
+# define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# if (_BYTE_ORDER == _LITTLE_ENDIAN)
+# undef BOOST_ENDIAN_LITTLE_BYTE
+# define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# if (_BYTE_ORDER == _PDP_ENDIAN)
+# undef BOOST_ENDIAN_LITTLE_WORD
+# define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# endif
+#endif
+
+/* Built-in byte-swpped big-endian macros.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+ !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+# if (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)) || \
+ (defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)) || \
+ defined(__ARMEB__) || \
+ defined(__THUMBEB__) || \
+ defined(__AARCH64EB__) || \
+ defined(_MIPSEB) || \
+ defined(__MIPSEB) || \
+ defined(__MIPSEB__)
+# undef BOOST_ENDIAN_BIG_BYTE
+# define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+/* Built-in byte-swpped little-endian macros.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+ !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+# if (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \
+ (defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)) || \
+ defined(__ARMEL__) || \
+ defined(__THUMBEL__) || \
+ defined(__AARCH64EL__) || \
+ defined(_MIPSEL) || \
+ defined(__MIPSEL) || \
+ defined(__MIPSEL__)
+# undef BOOST_ENDIAN_LITTLE_BYTE
+# define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+/* Some architectures are strictly one endianess (as opposed
+ * the current common bi-endianess).
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+ !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+# include <boost/predef/architecture.h>
+# if BOOST_ARCH_M68K || \
+ BOOST_ARCH_PARISK || \
+ BOOST_ARCH_SPARC || \
+ BOOST_ARCH_SYS370 || \
+ BOOST_ARCH_SYS390 || \
+ BOOST_ARCH_Z
+# undef BOOST_ENDIAN_BIG_BYTE
+# define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# if BOOST_ARCH_AMD64 || \
+ BOOST_ARCH_IA64 || \
+ BOOST_ARCH_X86 || \
+ BOOST_ARCH_BLACKFIN
+# undef BOOST_ENDIAN_LITTLE_BYTE
+# define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+/* Windows on ARM, if not otherwise detected/specified, is always
+ * byte-swaped little-endian.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+ !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+# if BOOST_ARCH_ARM
+# include <boost/predef/os/windows.h>
+# if BOOST_OS_WINDOWS
+# undef BOOST_ENDIAN_LITTLE_BYTE
+# define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+# endif
+#endif
+
+#if BOOST_ENDIAN_BIG_BYTE
+# define BOOST_ENDIAN_BIG_BYTE_AVAILABLE
+#endif
+#if BOOST_ENDIAN_BIG_WORD
+# define BOOST_ENDIAN_BIG_WORD_BYTE_AVAILABLE
+#endif
+#if BOOST_ENDIAN_LITTLE_BYTE
+# define BOOST_ENDIAN_LITTLE_BYTE_AVAILABLE
+#endif
+#if BOOST_ENDIAN_LITTLE_WORD
+# define BOOST_ENDIAN_LITTLE_WORD_BYTE_AVAILABLE
+#endif
+
+#define BOOST_ENDIAN_BIG_BYTE_NAME "Byte-Swapped Big-Endian"
+#define BOOST_ENDIAN_BIG_WORD_NAME "Word-Swapped Big-Endian"
+#define BOOST_ENDIAN_LITTLE_BYTE_NAME "Byte-Swapped Little-Endian"
+#define BOOST_ENDIAN_LITTLE_WORD_NAME "Word-Swapped Little-Endian"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_BYTE,BOOST_ENDIAN_BIG_BYTE_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_WORD,BOOST_ENDIAN_BIG_WORD_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_BYTE,BOOST_ENDIAN_LITTLE_BYTE_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_WORD,BOOST_ENDIAN_LITTLE_WORD_NAME)
+
+
+#endif
diff --git a/3party/boost/boost/predef/platform.h b/3party/boost/boost/predef/platform.h
new file mode 100644
index 0000000000..468a90d38b
--- /dev/null
+++ b/3party/boost/boost/predef/platform.h
@@ -0,0 +1,19 @@
+/*
+Copyright Rene Rivera 2013
+Copyright (c) Microsoft Corporation 2014
+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_PREDEF_PLATFORM_H
+#define BOOST_PREDEF_PLATFORM_H
+
+#include <boost/predef/platform/mingw.h>
+#include <boost/predef/platform/windows_desktop.h>
+#include <boost/predef/platform/windows_store.h>
+#include <boost/predef/platform/windows_phone.h>
+#include <boost/predef/platform/windows_runtime.h>
+/*#include <boost/predef/platform/.h>*/
+
+#endif
diff --git a/3party/boost/boost/predef/platform/mingw.h b/3party/boost/boost/predef/platform/mingw.h
new file mode 100644
index 0000000000..6c8d873ca3
--- /dev/null
+++ b/3party/boost/boost/predef/platform/mingw.h
@@ -0,0 +1,70 @@
+/*
+Copyright Rene Rivera 2008-2013
+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_PREDEF_COMPILER_MINGW_H
+#define BOOST_PREDEF_COMPILER_MINGW_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_PLAT_MINGW`]
+
+[@http://en.wikipedia.org/wiki/MinGW MinGW] platform.
+Version number available as major, minor, and patch.
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`__MINGW32__`] [__predef_detection__]]
+ [[`__MINGW64__`] [__predef_detection__]]
+
+ [[`__MINGW64_VERSION_MAJOR`, `__MINGW64_VERSION_MINOR`] [V.R.0]]
+ [[`__MINGW32_VERSION_MAJOR`, `__MINGW32_VERSION_MINOR`] [V.R.0]]
+ ]
+ */
+
+#define BOOST_PLAT_MINGW BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MINGW32__) || defined(__MINGW64__)
+# include <_mingw.h>
+# if !defined(BOOST_PLAT_MINGW_DETECTION) && (defined(__MINGW64_VERSION_MAJOR) && defined(__MINGW64_VERSION_MINOR))
+# define BOOST_PLAT_MINGW_DETECTION \
+ BOOST_VERSION_NUMBER(__MINGW64_VERSION_MAJOR,__MINGW64_VERSION_MINOR,0)
+# endif
+# if !defined(BOOST_PLAT_MINGW_DETECTION) && (defined(__MINGW32_VERSION_MAJOR) && defined(__MINGW32_VERSION_MINOR))
+# define BOOST_PLAT_MINGW_DETECTION \
+ BOOST_VERSION_NUMBER(__MINGW32_MAJOR_VERSION,__MINGW32_MINOR_VERSION,0)
+# endif
+# if !defined(BOOST_PLAT_MINGW_DETECTION)
+# define BOOST_PLAT_MINGW_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+# endif
+#endif
+
+#ifdef BOOST_PLAT_MINGW_DETECTION
+# define BOOST_PLAT_MINGW_AVAILABLE
+# if defined(BOOST_PREDEF_DETAIL_PLAT_DETECTED)
+# define BOOST_PLAT_MINGW_EMULATED BOOST_PLAT_MINGW_DETECTION
+# else
+# undef BOOST_PLAT_MINGW
+# define BOOST_PLAT_MINGW BOOST_PLAT_MINGW_DETECTION
+# endif
+# include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_MINGW_NAME "MinGW"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW,BOOST_PLAT_MINGW_NAME)
+
+#ifdef BOOST_PLAT_MINGW_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW_EMULATED,BOOST_PLAT_MINGW_NAME)
+#endif
+
+
+#endif
diff --git a/3party/boost/boost/predef/platform/windows_desktop.h b/3party/boost/boost/predef/platform/windows_desktop.h
new file mode 100644
index 0000000000..286c27350f
--- /dev/null
+++ b/3party/boost/boost/predef/platform/windows_desktop.h
@@ -0,0 +1,44 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+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_PREDEF_PLAT_WINDOWS_DESKTOP_H
+#define BOOST_PREDEF_PLAT_WINDOWS_DESKTOP_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_DESKTOP`]
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`!WINAPI_FAMILY`] [__predef_detection__]]
+ [[`WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_PLAT_WINDOWS_DESKTOP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && \
+ ( !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) )
+# undef BOOST_PLAT_WINDOWS_DESKTOP
+# define BOOST_PLAT_WINDOWS_DESKTOP BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_PLAT_WINDOWS_DESKTOP
+# define BOOST_PLAT_WINDOWS_DESKTOP_AVALIABLE
+# include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_DESKTOP_NAME "Windows Desktop"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_DESKTOP,BOOST_PLAT_WINDOWS_DESKTOP_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/platform/windows_phone.h b/3party/boost/boost/predef/platform/windows_phone.h
new file mode 100644
index 0000000000..cdf79d1c47
--- /dev/null
+++ b/3party/boost/boost/predef/platform/windows_phone.h
@@ -0,0 +1,42 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+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_PREDEF_PLAT_WINDOWS_PHONE_H
+#define BOOST_PREDEF_PLAT_WINDOWS_PHONE_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_PHONE`]
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_PLAT_WINDOWS_PHONE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
+# undef BOOST_PLAT_WINDOWS_PHONE
+# define BOOST_PLAT_WINDOWS_PHONE BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_PLAT_WINDOWS_PHONE
+# define BOOST_PLAT_WINDOWS_PHONE_AVALIABLE
+# include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_PHONE_NAME "Windows Phone"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_PHONE,BOOST_PLAT_WINDOWS_PHONE_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/platform/windows_runtime.h b/3party/boost/boost/predef/platform/windows_runtime.h
new file mode 100644
index 0000000000..14449383d8
--- /dev/null
+++ b/3party/boost/boost/predef/platform/windows_runtime.h
@@ -0,0 +1,44 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+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_PREDEF_PLAT_WINDOWS_RUNTIME_H
+#define BOOST_PREDEF_PLAT_WINDOWS_RUNTIME_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_RUNTIME`]
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`WINAPI_FAMILY == WINAPI_FAMILY_APP`] [__predef_detection__]]
+ [[`WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_PLAT_WINDOWS_RUNTIME BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && defined(WINAPI_FAMILY) && \
+ ( WINAPI_FAMILY == WINAPI_FAMILY_APP || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP )
+# undef BOOST_PLAT_WINDOWS_RUNTIME
+# define BOOST_PLAT_WINDOWS_RUNTIME BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_PLAT_WINDOWS_RUNTIME
+# define BOOST_PLAT_WINDOWS_RUNTIME_AVALIABLE
+# include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_RUNTIME_NAME "Windows Runtime"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_RUNTIME,BOOST_PLAT_WINDOWS_RUNTIME_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/platform/windows_store.h b/3party/boost/boost/predef/platform/windows_store.h
new file mode 100644
index 0000000000..0487c0fa2b
--- /dev/null
+++ b/3party/boost/boost/predef/platform/windows_store.h
@@ -0,0 +1,42 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+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_PREDEF_PLAT_WINDOWS_STORE_H
+#define BOOST_PREDEF_PLAT_WINDOWS_STORE_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_STORE`]
+
+[table
+ [[__predef_symbol__] [__predef_version__]]
+
+ [[`WINAPI_FAMILY == WINAPI_FAMILY_APP`] [__predef_detection__]]
+ ]
+ */
+
+#define BOOST_PLAT_WINDOWS_STORE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_APP
+# undef BOOST_PLAT_WINDOWS_STORE
+# define BOOST_PLAT_WINDOWS_STORE BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_PLAT_WINDOWS_STORE
+# define BOOST_PLAT_WINDOWS_STORE_AVALIABLE
+# include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_STORE_NAME "Windows Store"
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_STORE,BOOST_PLAT_WINDOWS_STORE_NAME)
+
+#endif
diff --git a/3party/boost/boost/predef/version.h b/3party/boost/boost/predef/version.h
new file mode 100644
index 0000000000..1e85df74f6
--- /dev/null
+++ b/3party/boost/boost/predef/version.h
@@ -0,0 +1,15 @@
+/*
+Copyright Rene Rivera 2014
+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_PREDEF_VERSION_H
+#define BOOST_PREDEF_VERSION_H
+
+#include <boost/predef/version_number.h>
+
+#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,1,0)
+
+#endif
diff --git a/3party/boost/boost/predef/version_number.h b/3party/boost/boost/predef/version_number.h
new file mode 100644
index 0000000000..b77391925c
--- /dev/null
+++ b/3party/boost/boost/predef/version_number.h
@@ -0,0 +1,54 @@
+/*
+Copyright Rene Rivera 2005
+Copyright Rene Rivera 2008-2013
+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_PREDEF_VERSION_NUMBER_H
+#define BOOST_PREDEF_VERSION_NUMBER_H
+
+/*`
+[heading `BOOST_VERSION_NUMBER`]
+
+``
+BOOST_VERSION_NUMBER(major,minor,patch)
+``
+
+Defines standard version numbers, with these properties:
+
+* Decimal base whole numbers in the range \[0,1000000000).
+ The number range is designed to allow for a (2,2,5) triplet.
+ Which fits within a 32 bit value.
+* The `major` number can be in the \[0,99\] range.
+* The `minor` number can be in the \[0,99\] range.
+* The `patch` number can be in the \[0,99999\] range.
+* Values can be specified in any base. As the defined value
+ is an constant expression.
+* Value can be directly used in both preprocessor and compiler
+ expressions for comparison to other similarly defined values.
+* The implementation enforces the individual ranges for the
+ major, minor, and patch numbers. And values over the ranges
+ are truncated (modulo).
+
+*/
+#define BOOST_VERSION_NUMBER(major,minor,patch) \
+ ( (((major)%100)*10000000) + (((minor)%100)*100000) + ((patch)%100000) )
+
+#define BOOST_VERSION_NUMBER_MAX \
+ BOOST_VERSION_NUMBER(99,99,99999)
+
+#define BOOST_VERSION_NUMBER_ZERO \
+ BOOST_VERSION_NUMBER(0,0,0)
+
+#define BOOST_VERSION_NUMBER_MIN \
+ BOOST_VERSION_NUMBER(0,0,1)
+
+#define BOOST_VERSION_NUMBER_AVAILABLE \
+ BOOST_VERSION_NUMBER_MIN
+
+#define BOOST_VERSION_NUMBER_NOT_AVAILABLE \
+ BOOST_VERSION_NUMBER_ZERO
+
+#endif
diff --git a/3party/boost/boost/preprocessor.hpp b/3party/boost/boost/preprocessor.hpp
index 6f5c822f85..b5c928e389 100644
--- a/3party/boost/boost/preprocessor.hpp
+++ b/3party/boost/boost/preprocessor.hpp
@@ -7,7 +7,7 @@
# * http://www.boost.org/LICENSE_1_0.txt)
# */
#
-# /* Revised by Paul Mensonides (2002) */
+# /* Revised by Paul Mensonides (2002) */
#
# /* See http://www.boost.org/libs/preprocessor for documentation. */
#
diff --git a/3party/boost/boost/preprocessor/config/config.hpp b/3party/boost/boost/preprocessor/config/config.hpp
index d02eb58dc0..b6afbabd20 100644
--- a/3party/boost/boost/preprocessor/config/config.hpp
+++ b/3party/boost/boost/preprocessor/config/config.hpp
@@ -45,7 +45,7 @@
# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
# elif defined(__BORLANDC__) || defined(__IBMC__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)
# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_BCC())
-# elif defined(_MSC_VER)
+# elif defined(_MSC_VER) && !defined(__clang__)
# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())
# else
# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
@@ -72,16 +72,15 @@
#
# if !defined BOOST_PP_VARIADICS
# /* variadic support explicitly disabled for all untested compilers */
-# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI
+# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI
# define BOOST_PP_VARIADICS 0
+# /* Clang, all versions */
+# elif defined __clang__
+# define BOOST_PP_VARIADICS 1
# /* VC++ (C/C++) */
# elif defined _MSC_VER && _MSC_VER >= 1400 && !defined __EDG__
-# if _MSC_VER >= 1400
-# define BOOST_PP_VARIADICS 1
-# define BOOST_PP_VARIADICS_MSVC 1
-# else
-# define BOOST_PP_VARIADICS 0
-# endif
+# define BOOST_PP_VARIADICS 1
+# define BOOST_PP_VARIADICS_MSVC 1
# /* Wave (C/C++), GCC (C++) */
# elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && __GXX_EXPERIMENTAL_CXX0X__
# define BOOST_PP_VARIADICS 1
diff --git a/3party/boost/boost/preprocessor/seq.hpp b/3party/boost/boost/preprocessor/seq.hpp
index 6d78f4319c..cde208ce1f 100644
--- a/3party/boost/boost/preprocessor/seq.hpp
+++ b/3party/boost/boost/preprocessor/seq.hpp
@@ -39,5 +39,6 @@
# include <boost/preprocessor/seq/to_list.hpp>
# include <boost/preprocessor/seq/to_tuple.hpp>
# include <boost/preprocessor/seq/transform.hpp>
+# include <boost/preprocessor/seq/variadic_seq_to_seq.hpp>
#
# endif
diff --git a/3party/boost/boost/preprocessor/seq/variadic_seq_to_seq.hpp b/3party/boost/boost/preprocessor/seq/variadic_seq_to_seq.hpp
new file mode 100644
index 0000000000..f94a2bfd1f
--- /dev/null
+++ b/3party/boost/boost/preprocessor/seq/variadic_seq_to_seq.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_VARIADIC_SEQ_TO_SEQ_HPP
+# define BOOST_PREPROCESSOR_SEQ_VARIADIC_SEQ_TO_SEQ_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_VARIADIC_SEQ_TO_SEQ */
+#
+# if BOOST_PP_VARIADICS
+# define BOOST_PP_VARIADIC_SEQ_TO_SEQ(vseq) BOOST_PP_CAT(BOOST_PP_VARIADIC_SEQ_TO_SEQ_A vseq, 0)
+# define BOOST_PP_VARIADIC_SEQ_TO_SEQ_A(...) ((__VA_ARGS__)) BOOST_PP_VARIADIC_SEQ_TO_SEQ_B
+# define BOOST_PP_VARIADIC_SEQ_TO_SEQ_B(...) ((__VA_ARGS__)) BOOST_PP_VARIADIC_SEQ_TO_SEQ_A
+# define BOOST_PP_VARIADIC_SEQ_TO_SEQ_A0
+# define BOOST_PP_VARIADIC_SEQ_TO_SEQ_B0
+# endif
+#
+# endif
diff --git a/3party/boost/boost/preprocessor/tuple.hpp b/3party/boost/boost/preprocessor/tuple.hpp
index 0f4976b7ae..76fad3650e 100644
--- a/3party/boost/boost/preprocessor/tuple.hpp
+++ b/3party/boost/boost/preprocessor/tuple.hpp
@@ -8,7 +8,7 @@
# */
#
# /* Revised by Paul Mensonides (2002) */
-# /* Revised by Edward Diener (2011) */
+# /* Revised by Edward Diener (2011,2013) */
#
# /* See http://www.boost.org for most recent version. */
#
@@ -18,7 +18,14 @@
# include <boost/preprocessor/tuple/eat.hpp>
# include <boost/preprocessor/tuple/elem.hpp>
# include <boost/preprocessor/tuple/enum.hpp>
+# include <boost/preprocessor/tuple/insert.hpp>
+# include <boost/preprocessor/tuple/pop_back.hpp>
+# include <boost/preprocessor/tuple/pop_front.hpp>
+# include <boost/preprocessor/tuple/push_back.hpp>
+# include <boost/preprocessor/tuple/push_front.hpp>
# include <boost/preprocessor/tuple/rem.hpp>
+# include <boost/preprocessor/tuple/remove.hpp>
+# include <boost/preprocessor/tuple/replace.hpp>
# include <boost/preprocessor/tuple/reverse.hpp>
# include <boost/preprocessor/tuple/size.hpp>
# include <boost/preprocessor/tuple/to_array.hpp>
diff --git a/3party/boost/boost/preprocessor/tuple/insert.hpp b/3party/boost/boost/preprocessor/tuple/insert.hpp
new file mode 100644
index 0000000000..ce4544f082
--- /dev/null
+++ b/3party/boost/boost/preprocessor/tuple/insert.hpp
@@ -0,0 +1,37 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2013.
+# * 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 most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_INSERT_HPP
+# define BOOST_PREPROCESSOR_TUPLE_INSERT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_VARIADICS
+#
+# include <boost/preprocessor/array/insert.hpp>
+# include <boost/preprocessor/array/to_tuple.hpp>
+# include <boost/preprocessor/tuple/to_array.hpp>
+#
+# /* BOOST_PP_TUPLE_INSERT */
+#
+# define BOOST_PP_TUPLE_INSERT(tuple, i, elem) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \
+/**/
+#
+# /* BOOST_PP_TUPLE_INSERT_D */
+#
+# define BOOST_PP_TUPLE_INSERT_D(d, tuple, i, elem) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \
+/**/
+#
+# endif // BOOST_PP_VARIADICS
+#
+# endif // BOOST_PREPROCESSOR_TUPLE_INSERT_HPP
diff --git a/3party/boost/boost/preprocessor/tuple/pop_back.hpp b/3party/boost/boost/preprocessor/tuple/pop_back.hpp
new file mode 100644
index 0000000000..3ac414ba9c
--- /dev/null
+++ b/3party/boost/boost/preprocessor/tuple/pop_back.hpp
@@ -0,0 +1,64 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2013.
+# * 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 most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_POP_BACK_HPP
+# define BOOST_PREPROCESSOR_TUPLE_POP_BACK_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_VARIADICS
+#
+# include <boost/preprocessor/array/pop_back.hpp>
+# include <boost/preprocessor/array/to_tuple.hpp>
+# include <boost/preprocessor/comparison/greater.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/tuple/size.hpp>
+# include <boost/preprocessor/tuple/to_array.hpp>
+#
+# /* BOOST_PP_TUPLE_POP_BACK */
+#
+# define BOOST_PP_TUPLE_POP_BACK(tuple) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \
+ BOOST_PP_TUPLE_POP_BACK_EXEC, \
+ BOOST_PP_TUPLE_POP_BACK_RETURN \
+ ) \
+ (tuple) \
+/**/
+#
+# define BOOST_PP_TUPLE_POP_BACK_EXEC(tuple) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \
+/**/
+#
+# define BOOST_PP_TUPLE_POP_BACK_RETURN(tuple) tuple
+#
+# /* BOOST_PP_TUPLE_POP_BACK_Z */
+#
+# define BOOST_PP_TUPLE_POP_BACK_Z(z, tuple) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \
+ BOOST_PP_TUPLE_POP_BACK_Z_EXEC, \
+ BOOST_PP_TUPLE_POP_BACK_Z_RETURN \
+ ) \
+ (z, tuple) \
+/**/
+#
+# define BOOST_PP_TUPLE_POP_BACK_Z_EXEC(z, tuple) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \
+/**/
+#
+# define BOOST_PP_TUPLE_POP_BACK_Z_RETURN(z, tuple) tuple
+#
+# endif // BOOST_PP_VARIADICS
+#
+# endif // BOOST_PREPROCESSOR_TUPLE_POP_BACK_HPP
diff --git a/3party/boost/boost/preprocessor/tuple/pop_front.hpp b/3party/boost/boost/preprocessor/tuple/pop_front.hpp
new file mode 100644
index 0000000000..fafaa77d11
--- /dev/null
+++ b/3party/boost/boost/preprocessor/tuple/pop_front.hpp
@@ -0,0 +1,65 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2013.
+# * 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 most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_POP_FRONT_HPP
+# define BOOST_PREPROCESSOR_TUPLE_POP_FRONT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_VARIADICS
+#
+# include <boost/preprocessor/array/pop_front.hpp>
+# include <boost/preprocessor/array/to_tuple.hpp>
+# include <boost/preprocessor/comparison/greater.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/tuple/size.hpp>
+# include <boost/preprocessor/tuple/to_array.hpp>
+#
+#
+# /* BOOST_PP_TUPLE_POP_FRONT */
+#
+# define BOOST_PP_TUPLE_POP_FRONT(tuple) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \
+ BOOST_PP_TUPLE_POP_FRONT_EXEC, \
+ BOOST_PP_TUPLE_POP_FRONT_RETURN \
+ ) \
+ (tuple) \
+/**/
+#
+# define BOOST_PP_TUPLE_POP_FRONT_EXEC(tuple) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \
+/**/
+#
+# define BOOST_PP_TUPLE_POP_FRONT_RETURN(tuple) tuple
+#
+# /* BOOST_PP_TUPLE_POP_FRONT_Z */
+#
+# define BOOST_PP_TUPLE_POP_FRONT_Z(z, tuple) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \
+ BOOST_PP_TUPLE_POP_FRONT_Z_EXEC, \
+ BOOST_PP_TUPLE_POP_FRONT_Z_RETURN \
+ ) \
+ (z, tuple) \
+/**/
+#
+# define BOOST_PP_TUPLE_POP_FRONT_Z_EXEC(z, tuple) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \
+/**/
+#
+# define BOOST_PP_TUPLE_POP_FRONT_Z_RETURN(z, tuple) tuple
+#
+# endif // BOOST_PP_VARIADICS
+#
+# endif // BOOST_PREPROCESSOR_TUPLE_POP_FRONT_HPP
diff --git a/3party/boost/boost/preprocessor/tuple/push_back.hpp b/3party/boost/boost/preprocessor/tuple/push_back.hpp
new file mode 100644
index 0000000000..2ae8f63969
--- /dev/null
+++ b/3party/boost/boost/preprocessor/tuple/push_back.hpp
@@ -0,0 +1,31 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2013.
+# * 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 most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_PUSH_BACK_HPP
+# define BOOST_PREPROCESSOR_TUPLE_PUSH_BACK_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_VARIADICS
+#
+# include <boost/preprocessor/array/push_back.hpp>
+# include <boost/preprocessor/array/to_tuple.hpp>
+# include <boost/preprocessor/tuple/to_array.hpp>
+#
+# /* BOOST_PP_TUPLE_PUSH_BACK */
+#
+# define BOOST_PP_TUPLE_PUSH_BACK(tuple, elem) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \
+/**/
+#
+# endif // BOOST_PP_VARIADICS
+#
+# endif // BOOST_PREPROCESSOR_TUPLE_PUSH_BACK_HPP
diff --git a/3party/boost/boost/preprocessor/tuple/push_front.hpp b/3party/boost/boost/preprocessor/tuple/push_front.hpp
new file mode 100644
index 0000000000..81fea85920
--- /dev/null
+++ b/3party/boost/boost/preprocessor/tuple/push_front.hpp
@@ -0,0 +1,32 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2013.
+# * 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 most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_PUSH_FRONT_HPP
+# define BOOST_PREPROCESSOR_TUPLE_PUSH_FRONT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_VARIADICS
+#
+# include <boost/preprocessor/array/push_front.hpp>
+# include <boost/preprocessor/array/to_tuple.hpp>
+# include <boost/preprocessor/tuple/to_array.hpp>
+#
+#
+# /* BOOST_PP_TUPLE_PUSH_FRONT */
+#
+# define BOOST_PP_TUPLE_PUSH_FRONT(tuple, elem) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \
+/**/
+#
+# endif // BOOST_PP_VARIADICS
+#
+# endif // BOOST_PREPROCESSOR_TUPLE_PUSH_FRONT_HPP
diff --git a/3party/boost/boost/preprocessor/tuple/rem.hpp b/3party/boost/boost/preprocessor/tuple/rem.hpp
index 4e3362cb86..270c31ab35 100644
--- a/3party/boost/boost/preprocessor/tuple/rem.hpp
+++ b/3party/boost/boost/preprocessor/tuple/rem.hpp
@@ -1,7 +1,7 @@
# /* **************************************************************************
# * *
# * (C) Copyright Paul Mensonides 2002-2011. *
-# * (C) Copyright Edward Diener 2011. *
+# * (C) Copyright Edward Diener 2011,2013. *
# * 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,10 @@
#
# /* BOOST_PP_TUPLE_REM */
#
-# if BOOST_PP_VARIADICS
+/*
+ VC++8.0 cannot handle the variadic version of BOOST_PP_TUPLE_REM(size)
+*/
+# if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER == 1400)
# define BOOST_PP_TUPLE_REM(size) BOOST_PP_REM
# else
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
@@ -38,6 +41,7 @@
# endif
# define BOOST_PP_TUPLE_REM_I(size) BOOST_PP_TUPLE_REM_ ## size
# endif
+# define BOOST_PP_TUPLE_REM_0()
# define BOOST_PP_TUPLE_REM_1(e0) e0
# define BOOST_PP_TUPLE_REM_2(e0, e1) e0, e1
# define BOOST_PP_TUPLE_REM_3(e0, e1, e2) e0, e1, e2
diff --git a/3party/boost/boost/preprocessor/tuple/remove.hpp b/3party/boost/boost/preprocessor/tuple/remove.hpp
new file mode 100644
index 0000000000..25fa376193
--- /dev/null
+++ b/3party/boost/boost/preprocessor/tuple/remove.hpp
@@ -0,0 +1,64 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2013.
+# * 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 most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_REMOVE_HPP
+# define BOOST_PREPROCESSOR_TUPLE_REMOVE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_VARIADICS
+#
+# include <boost/preprocessor/array/remove.hpp>
+# include <boost/preprocessor/array/to_tuple.hpp>
+# include <boost/preprocessor/comparison/greater.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/tuple/size.hpp>
+# include <boost/preprocessor/tuple/to_array.hpp>
+#
+# /* BOOST_PP_TUPLE_REMOVE */
+#
+# define BOOST_PP_TUPLE_REMOVE(tuple, i) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \
+ BOOST_PP_TUPLE_REMOVE_EXEC, \
+ BOOST_PP_TUPLE_REMOVE_RETURN \
+ ) \
+ (tuple, i) \
+/**/
+#
+# define BOOST_PP_TUPLE_REMOVE_EXEC(tuple, i) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \
+/**/
+#
+# define BOOST_PP_TUPLE_REMOVE_RETURN(tuple, i) tuple
+#
+# /* BOOST_PP_TUPLE_REMOVE_D */
+#
+# define BOOST_PP_TUPLE_REMOVE_D(d, tuple, i) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_GREATER_D(d, BOOST_PP_TUPLE_SIZE(tuple), 1), \
+ BOOST_PP_TUPLE_REMOVE_D_EXEC, \
+ BOOST_PP_TUPLE_REMOVE_D_RETURN \
+ ) \
+ (d, tuple, i) \
+/**/
+#
+# define BOOST_PP_TUPLE_REMOVE_D_EXEC(d, tuple, i) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \
+/**/
+#
+# define BOOST_PP_TUPLE_REMOVE_D_RETURN(d, tuple, i) tuple
+#
+# endif // BOOST_PP_VARIADICS
+#
+# endif // BOOST_PREPROCESSOR_TUPLE_REMOVE_HPP
diff --git a/3party/boost/boost/preprocessor/tuple/replace.hpp b/3party/boost/boost/preprocessor/tuple/replace.hpp
new file mode 100644
index 0000000000..320ef9e956
--- /dev/null
+++ b/3party/boost/boost/preprocessor/tuple/replace.hpp
@@ -0,0 +1,37 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2013.
+# * 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 most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_REPLACE_HPP
+# define BOOST_PREPROCESSOR_TUPLE_REPLACE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_VARIADICS
+#
+# include <boost/preprocessor/array/replace.hpp>
+# include <boost/preprocessor/array/to_tuple.hpp>
+# include <boost/preprocessor/tuple/to_array.hpp>
+#
+# /* BOOST_PP_TUPLE_REPLACE */
+#
+# define BOOST_PP_TUPLE_REPLACE(tuple, i, elem) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \
+/**/
+#
+# /* BOOST_PP_TUPLE_REPLACE_D */
+#
+# define BOOST_PP_TUPLE_REPLACE_D(d, tuple, i, elem) \
+ BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \
+/**/
+#
+# endif // BOOST_PP_VARIADICS
+#
+# endif // BOOST_PREPROCESSOR_TUPLE_REPLACE_HPP
diff --git a/3party/boost/boost/preprocessor/tuple/reverse.hpp b/3party/boost/boost/preprocessor/tuple/reverse.hpp
index c4f263ad0d..489c442924 100644
--- a/3party/boost/boost/preprocessor/tuple/reverse.hpp
+++ b/3party/boost/boost/preprocessor/tuple/reverse.hpp
@@ -18,6 +18,8 @@
# include <boost/preprocessor/cat.hpp>
# include <boost/preprocessor/config/config.hpp>
# include <boost/preprocessor/facilities/overload.hpp>
+# include <boost/preprocessor/tuple/size.hpp>
+# include <boost/preprocessor/variadic/size.hpp>
#
# /* BOOST_PP_TUPLE_REVERSE */
#
@@ -26,10 +28,11 @@
# define BOOST_PP_TUPLE_REVERSE(...) BOOST_PP_TUPLE_REVERSE_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REVERSE_O_, __VA_ARGS__), (__VA_ARGS__))
# define BOOST_PP_TUPLE_REVERSE_I(m, args) BOOST_PP_TUPLE_REVERSE_II(m, args)
# define BOOST_PP_TUPLE_REVERSE_II(m, args) BOOST_PP_CAT(m ## args,)
+# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_TUPLE_SIZE(tuple)) tuple
# else
# define BOOST_PP_TUPLE_REVERSE(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REVERSE_O_, __VA_ARGS__)(__VA_ARGS__)
+# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_VARIADIC_SIZE tuple) tuple
# endif
-# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_VARIADIC_SIZE tuple) tuple
# define BOOST_PP_TUPLE_REVERSE_O_2(size, tuple) BOOST_PP_TUPLE_REVERSE_O_1(tuple)
# else
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
diff --git a/3party/boost/boost/preprocessor/tuple/to_array.hpp b/3party/boost/boost/preprocessor/tuple/to_array.hpp
index 1b994f3f38..0a52811239 100644
--- a/3party/boost/boost/preprocessor/tuple/to_array.hpp
+++ b/3party/boost/boost/preprocessor/tuple/to_array.hpp
@@ -16,6 +16,7 @@
# include <boost/preprocessor/cat.hpp>
# include <boost/preprocessor/config/config.hpp>
# include <boost/preprocessor/facilities/overload.hpp>
+# include <boost/preprocessor/tuple/size.hpp>
# include <boost/preprocessor/variadic/size.hpp>
#
# /* BOOST_PP_TUPLE_TO_ARRAY */
@@ -25,10 +26,11 @@
# define BOOST_PP_TUPLE_TO_ARRAY(...) BOOST_PP_TUPLE_TO_ARRAY_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_ARRAY_, __VA_ARGS__), (__VA_ARGS__))
# define BOOST_PP_TUPLE_TO_ARRAY_I(m, args) BOOST_PP_TUPLE_TO_ARRAY_II(m, args)
# define BOOST_PP_TUPLE_TO_ARRAY_II(m, args) BOOST_PP_CAT(m ## args,)
+# define BOOST_PP_TUPLE_TO_ARRAY_1(tuple) (BOOST_PP_TUPLE_SIZE(tuple), tuple)
# else
# define BOOST_PP_TUPLE_TO_ARRAY(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_ARRAY_, __VA_ARGS__)(__VA_ARGS__)
+# define BOOST_PP_TUPLE_TO_ARRAY_1(tuple) (BOOST_PP_VARIADIC_SIZE tuple, tuple)
# endif
-# define BOOST_PP_TUPLE_TO_ARRAY_1(tuple) (BOOST_PP_VARIADIC_SIZE tuple, tuple)
# define BOOST_PP_TUPLE_TO_ARRAY_2(size, tuple) (size, tuple)
# else
# define BOOST_PP_TUPLE_TO_ARRAY(size, tuple) (size, tuple)
diff --git a/3party/boost/boost/preprocessor/tuple/to_list.hpp b/3party/boost/boost/preprocessor/tuple/to_list.hpp
index 2a9d6fe5ff..da7828f7d0 100644
--- a/3party/boost/boost/preprocessor/tuple/to_list.hpp
+++ b/3party/boost/boost/preprocessor/tuple/to_list.hpp
@@ -18,6 +18,7 @@
# include <boost/preprocessor/cat.hpp>
# include <boost/preprocessor/config/config.hpp>
# include <boost/preprocessor/facilities/overload.hpp>
+# include <boost/preprocessor/tuple/size.hpp>
# include <boost/preprocessor/variadic/size.hpp>
#
# /* BOOST_PP_TUPLE_TO_LIST */
@@ -27,10 +28,11 @@
# define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_TUPLE_TO_LIST_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__), (__VA_ARGS__))
# define BOOST_PP_TUPLE_TO_LIST_I(m, args) BOOST_PP_TUPLE_TO_LIST_II(m, args)
# define BOOST_PP_TUPLE_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,)
+# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_TUPLE_SIZE(tuple)) tuple
# else
# define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__)(__VA_ARGS__)
+# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple
# endif
-# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple
# define BOOST_PP_TUPLE_TO_LIST_O_2(size, tuple) BOOST_PP_TUPLE_TO_LIST_O_1(tuple)
# else
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
diff --git a/3party/boost/boost/preprocessor/tuple/to_seq.hpp b/3party/boost/boost/preprocessor/tuple/to_seq.hpp
index 1fb7b811c7..8bd8485a92 100644
--- a/3party/boost/boost/preprocessor/tuple/to_seq.hpp
+++ b/3party/boost/boost/preprocessor/tuple/to_seq.hpp
@@ -16,6 +16,7 @@
# include <boost/preprocessor/cat.hpp>
# include <boost/preprocessor/config/config.hpp>
# include <boost/preprocessor/facilities/overload.hpp>
+# include <boost/preprocessor/tuple/size.hpp>
# include <boost/preprocessor/variadic/size.hpp>
#
# /* BOOST_PP_TUPLE_TO_SEQ */
@@ -25,10 +26,11 @@
# define BOOST_PP_TUPLE_TO_SEQ(...) BOOST_PP_TUPLE_TO_SEQ_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_SEQ_O_, __VA_ARGS__), (__VA_ARGS__))
# define BOOST_PP_TUPLE_TO_SEQ_I(m, args) BOOST_PP_TUPLE_TO_SEQ_II(m, args)
# define BOOST_PP_TUPLE_TO_SEQ_II(m, args) BOOST_PP_CAT(m ## args,)
+# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_TUPLE_SIZE(tuple)) tuple
# else
# define BOOST_PP_TUPLE_TO_SEQ(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_SEQ_O_, __VA_ARGS__)(__VA_ARGS__)
+# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_VARIADIC_SIZE tuple) tuple
# endif
-# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_VARIADIC_SIZE tuple) tuple
# define BOOST_PP_TUPLE_TO_SEQ_O_2(size, tuple) BOOST_PP_TUPLE_TO_SEQ_O_1(tuple)
# else
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
diff --git a/3party/boost/boost/program_options.hpp b/3party/boost/boost/program_options.hpp
index 9d12b082f9..dc35011957 100644
--- a/3party/boost/boost/program_options.hpp
+++ b/3party/boost/boost/program_options.hpp
@@ -8,7 +8,7 @@
#ifndef PROGRAM_OPTIONS_VP_2003_05_19
#define PROGRAM_OPTIONS_VP_2003_05_19
-#if _MSC_VER >= 1020
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/program_options/detail/value_semantic.hpp b/3party/boost/boost/program_options/detail/value_semantic.hpp
index 814a3db2c6..978a38a86e 100644
--- a/3party/boost/boost/program_options/detail/value_semantic.hpp
+++ b/3party/boost/boost/program_options/detail/value_semantic.hpp
@@ -105,12 +105,9 @@ namespace boost { namespace program_options {
int);
#endif
// For some reason, this declaration, which is require by the standard,
- // cause gcc 3.2 to not generate code to specialization defined in
+ // cause msvc 7.1 to not generate code to specialization defined in
// value_semantic.cpp
-#if ! ( ( BOOST_WORKAROUND(__GNUC__, <= 3) &&\
- BOOST_WORKAROUND(__GNUC_MINOR__, < 3) ) || \
- ( BOOST_WORKAROUND(BOOST_MSVC, == 1310) ) \
- )
+#if ! ( BOOST_WORKAROUND(BOOST_MSVC, == 1310) )
BOOST_PROGRAM_OPTIONS_DECL void validate(boost::any& v,
const std::vector<std::string>& xs,
std::string*,
diff --git a/3party/boost/boost/program_options/errors.hpp b/3party/boost/boost/program_options/errors.hpp
index 149ca1c3e4..f31defbd36 100644
--- a/3party/boost/boost/program_options/errors.hpp
+++ b/3party/boost/boost/program_options/errors.hpp
@@ -25,7 +25,8 @@ namespace boost { namespace program_options {
inline std::string strip_prefixes(const std::string& text)
{
- return text.substr(text.find_last_of("-/") + 1);
+ // "--foo-bar" -> "foo-bar"
+ return text.substr(text.find_first_not_of("-/"));
}
/** Base class for all errors in the library. */
@@ -104,13 +105,13 @@ namespace boost { namespace program_options {
std::map<std::string, string_pair > m_substitution_defaults;
public:
- /** template with placeholders */
- std::string m_error_template;
+ /** template with placeholders */
+ std::string m_error_template;
- error_with_option_name(const std::string& template_,
- const std::string& option_name = "",
- const std::string& original_token = "",
- int option_style = 0);
+ error_with_option_name(const std::string& template_,
+ const std::string& option_name = "",
+ const std::string& original_token = "",
+ int option_style = 0);
/** gcc says that throw specification on dtor is loosened
* without this line
diff --git a/3party/boost/boost/program_options/options_description.hpp b/3party/boost/boost/program_options/options_description.hpp
index 62530b2dc1..32f6990293 100644
--- a/3party/boost/boost/program_options/options_description.hpp
+++ b/3party/boost/boost/program_options/options_description.hpp
@@ -61,8 +61,8 @@ namespace program_options {
Alas, derived->base conversion for auto_ptr does not really work,
see
- http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2000/n1232.pdf
- http://std.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#84
+ http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2000/n1232.pdf
+ http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#84
So, we have to use plain old pointers. Besides, users are not
expected to use the constructor directly.
@@ -199,6 +199,10 @@ namespace program_options {
*/
options_description& add(const options_description& desc);
+ /** Find the maximum width of the option column, including options
+ in groups. */
+ unsigned get_option_column_width() const;
+
public:
/** Returns an object of implementation-defined type suitable for adding
options to options_description. The returned object will
@@ -229,7 +233,7 @@ namespace program_options {
/** Outputs 'desc' to the specified stream, calling 'f' to output each
option_description element. */
- void print(std::ostream& os) const;
+ void print(std::ostream& os, unsigned width = 0) const;
private:
typedef std::map<std::string, int>::const_iterator name2index_iterator;
diff --git a/3party/boost/boost/program_options/variables_map.hpp b/3party/boost/boost/program_options/variables_map.hpp
index be0a4b64e3..09badbf795 100644
--- a/3party/boost/boost/program_options/variables_map.hpp
+++ b/3party/boost/boost/program_options/variables_map.hpp
@@ -98,7 +98,7 @@ namespace boost { namespace program_options {
void store(const basic_parsed_options<char>& options,
variables_map& m, bool);
- friend BOOST_PROGRAM_OPTIONS_DECL class variables_map;
+ friend class BOOST_PROGRAM_OPTIONS_DECL variables_map;
};
/** Implements string->string mapping with convenient value casting
diff --git a/3party/boost/boost/progress.hpp b/3party/boost/boost/progress.hpp
index fbbf04a7f2..62bece0839 100644
--- a/3party/boost/boost/progress.hpp
+++ b/3party/boost/boost/progress.hpp
@@ -20,7 +20,7 @@
#define BOOST_PROGRESS_HPP
#include <boost/timer.hpp>
-#include <boost/utility.hpp> // for noncopyable
+#include <boost/noncopyable.hpp>
#include <boost/cstdint.hpp> // for uintmax_t
#include <iostream> // for ostream, cout, etc
#include <string> // for string
@@ -38,7 +38,7 @@ class progress_timer : public timer, private noncopyable
public:
explicit progress_timer( std::ostream & os = std::cout )
// os is hint; implementation may ignore, particularly in embedded systems
- : m_os(os) {}
+ : timer(), noncopyable(), m_os(os) {}
~progress_timer()
{
// A) Throwing an exception from a destructor is a Bad Thing.
@@ -77,20 +77,20 @@ class progress_timer : public timer, private noncopyable
class progress_display : private noncopyable
{
public:
- explicit progress_display( unsigned long expected_count,
+ explicit progress_display( unsigned long expected_count_,
std::ostream & os = std::cout,
const std::string & s1 = "\n", //leading strings
const std::string & s2 = "",
const std::string & s3 = "" )
// os is hint; implementation may ignore, particularly in embedded systems
- : m_os(os), m_s1(s1), m_s2(s2), m_s3(s3) { restart(expected_count); }
+ : noncopyable(), m_os(os), m_s1(s1), m_s2(s2), m_s3(s3) { restart(expected_count_); }
- void restart( unsigned long expected_count )
+ void restart( unsigned long expected_count_ )
// Effects: display appropriate scale
- // Postconditions: count()==0, expected_count()==expected_count
+ // Postconditions: count()==0, expected_count()==expected_count_
{
_count = _next_tic_count = _tic = 0;
- _expected_count = expected_count;
+ _expected_count = expected_count_;
m_os << m_s1 << "0% 10 20 30 40 50 60 70 80 90 100%\n"
<< m_s2 << "|----|----|----|----|----|----|----|----|----|----|"
diff --git a/3party/boost/boost/property_map/dynamic_property_map.hpp b/3party/boost/boost/property_map/dynamic_property_map.hpp
index f5f4230e22..e4c10d1bd2 100644
--- a/3party/boost/boost/property_map/dynamic_property_map.hpp
+++ b/3party/boost/boost/property_map/dynamic_property_map.hpp
@@ -146,16 +146,16 @@ class dynamic_property_map_adaptor : public dynamic_property_map
{
using boost::put;
- key_type key = any_cast<key_type>(in_key);
+ key_type key_ = any_cast<key_type>(in_key);
if (in_value.type() == typeid(value_type)) {
- put(property_map_, key, any_cast<value_type>(in_value));
+ put(property_map_, key_, any_cast<value_type>(in_value));
} else {
// if in_value is an empty string, put a default constructed value_type.
std::string v = any_cast<std::string>(in_value);
if (v.empty()) {
- put(property_map_, key, value_type());
+ put(property_map_, key_, value_type());
} else {
- put(property_map_, key, detail::read_value<value_type>(v));
+ put(property_map_, key_, detail::read_value<value_type>(v));
}
}
}
@@ -169,15 +169,15 @@ public:
explicit dynamic_property_map_adaptor(const PropertyMap& property_map_)
: property_map_(property_map_) { }
- virtual boost::any get(const any& key)
+ virtual boost::any get(const any& key_)
{
- return get_wrapper_xxx(property_map_, any_cast<typename boost::property_traits<PropertyMap>::key_type>(key));
+ return get_wrapper_xxx(property_map_, any_cast<typename boost::property_traits<PropertyMap>::key_type>(key_));
}
- virtual std::string get_string(const any& key)
+ virtual std::string get_string(const any& key_)
{
std::ostringstream out;
- out << get_wrapper_xxx(property_map_, any_cast<typename boost::property_traits<PropertyMap>::key_type>(key));
+ out << get_wrapper_xxx(property_map_, any_cast<typename boost::property_traits<PropertyMap>::key_type>(key_));
return out.str();
}
@@ -234,6 +234,15 @@ public:
return *this;
}
+ template<typename PropertyMap>
+ dynamic_properties
+ property(const std::string& name, PropertyMap property_map_) const
+ {
+ dynamic_properties result = *this;
+ result.property(name, property_map_);
+ return result;
+ }
+
iterator begin() { return property_maps.begin(); }
const_iterator begin() const { return property_maps.begin(); }
iterator end() { return property_maps.end(); }
@@ -290,7 +299,6 @@ put(const std::string& name, dynamic_properties& dp, const Key& key,
}
}
-#ifndef BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
template<typename Value, typename Key>
Value
get(const std::string& name, const dynamic_properties& dp, const Key& key)
@@ -303,7 +311,6 @@ get(const std::string& name, const dynamic_properties& dp, const Key& key)
BOOST_THROW_EXCEPTION(dynamic_get_failure(name));
}
-#endif
template<typename Value, typename Key>
Value
@@ -333,7 +340,7 @@ get(const std::string& name, const dynamic_properties& dp, const Key& key)
// The easy way to ignore properties.
inline
-boost::shared_ptr<boost::dynamic_property_map>
+boost::shared_ptr<boost::dynamic_property_map>
ignore_other_properties(const std::string&,
const boost::any&,
const boost::any&) {
diff --git a/3party/boost/boost/property_map/parallel/basic_reduce.hpp b/3party/boost/boost/property_map/parallel/basic_reduce.hpp
new file mode 100644
index 0000000000..44bd1ad510
--- /dev/null
+++ b/3party/boost/boost/property_map/parallel/basic_reduce.hpp
@@ -0,0 +1,38 @@
+// Copyright 2005 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+
+#ifndef BOOST_PARALLEL_BASIC_REDUCE_HPP
+#define BOOST_PARALLEL_BASIC_REDUCE_HPP
+
+namespace boost { namespace parallel {
+
+/** Reduction operation used to reconcile differences between local
+ * and remote values for a particular key in a property map. The
+ * type @c T is typically the @c value_type of the property
+ * map. This basic reduction returns a default-constructed @c T as
+ * the default value and always resolves to the remote value.
+ */
+template<typename T>
+struct basic_reduce
+{
+ BOOST_STATIC_CONSTANT(bool, non_default_resolver = false);
+
+ /// Returns a default-constructed T object
+ template<typename Key>
+ T operator()(const Key&) const { return T(); }
+
+ /// Returns the remote value
+ template<typename Key>
+ const T& operator()(const Key&, const T&, const T& remote) const
+ { return remote; }
+};
+
+} } // end namespace boost::parallel
+
+#endif // BOOST_PARALLEL_BASIC_REDUCE_HPP
diff --git a/3party/boost/boost/property_map/parallel/caching_property_map.hpp b/3party/boost/boost/property_map/parallel/caching_property_map.hpp
index 54cf1466b7..eeb5cfaaac 100644
--- a/3party/boost/boost/property_map/parallel/caching_property_map.hpp
+++ b/3party/boost/boost/property_map/parallel/caching_property_map.hpp
@@ -9,10 +9,6 @@
#ifndef BOOST_PARALLEL_CACHING_PROPERTY_MAP_HPP
#define BOOST_PARALLEL_CACHING_PROPERTY_MAP_HPP
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
-
#include <boost/property_map/property_map.hpp>
namespace boost {
diff --git a/3party/boost/boost/property_map/parallel/detail/untracked_pair.hpp b/3party/boost/boost/property_map/parallel/detail/untracked_pair.hpp
new file mode 100644
index 0000000000..779ee6cc2e
--- /dev/null
+++ b/3party/boost/boost/property_map/parallel/detail/untracked_pair.hpp
@@ -0,0 +1,81 @@
+// Copyright (C) 2007 Matthias Troyer
+//
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//
+// This file contains helper data structures for use in transmitting
+// properties. The basic idea is to optimize away any storage for the
+// properties when no properties are specified.
+#ifndef BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP
+#define BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP
+
+#include <boost/mpi/datatype.hpp>
+#include <utility> // for std::pair
+#include <boost/serialization/utility.hpp>
+
+namespace boost { namespace parallel { namespace detail {
+
+/**
+ * This structure is like std::pair, with the only difference
+ * that tracking in the serialization library is turned off.
+ */
+
+template<typename T, typename U>
+struct untracked_pair : public std::pair<T,U>
+{
+ untracked_pair() {}
+
+ untracked_pair(const T& t, const U& u)
+ : std::pair<T,U>(t,u) {}
+
+ template<class T1, class U1>
+ untracked_pair(std::pair<T1,U1> const& p)
+ : std::pair<T,U>(p) {}
+};
+
+template<typename T, typename U>
+inline untracked_pair<T, U>
+make_untracked_pair(const T& t, const U& u)
+{
+ return untracked_pair<T,U>(t,u);
+}
+
+} } } // end namespace boost::parallel::detail
+
+namespace boost { namespace mpi {
+
+template<typename T, typename U>
+struct is_mpi_datatype<boost::parallel::detail::untracked_pair<T, U> >
+ : is_mpi_datatype<std::pair<T,U> > {};
+
+} } // end namespace boost::mpi
+
+namespace boost { namespace serialization {
+
+// pair
+template<class Archive, class F, class S>
+inline void serialize(
+ Archive & ar,
+ boost::parallel::detail::untracked_pair<F, S> & p,
+ const unsigned int /* file_version */
+){
+ ar & boost::serialization::make_nvp("first", p.first);
+ ar & boost::serialization::make_nvp("second", p.second);
+}
+
+template<typename T, typename U>
+struct is_bitwise_serializable<
+ boost::parallel::detail::untracked_pair<T, U> >
+ : is_bitwise_serializable<std::pair<T, U> > {};
+
+template<typename T, typename U>
+struct implementation_level<boost::parallel::detail::untracked_pair<T, U> >
+ : mpl::int_<object_serializable> {} ;
+
+template<typename T, typename U>
+struct tracking_level<boost::parallel::detail::untracked_pair<T, U> >
+ : mpl::int_<track_never> {} ;
+
+} } // end namespace boost::serialization
+
+#endif // BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP
diff --git a/3party/boost/boost/property_map/parallel/distributed_property_map.hpp b/3party/boost/boost/property_map/parallel/distributed_property_map.hpp
index c34e073e12..8ef6004c5b 100644
--- a/3party/boost/boost/property_map/parallel/distributed_property_map.hpp
+++ b/3party/boost/boost/property_map/parallel/distributed_property_map.hpp
@@ -17,27 +17,22 @@
#ifndef BOOST_PARALLEL_DISTRIBUTED_PROPERTY_MAP_HPP
#define BOOST_PARALLEL_DISTRIBUTED_PROPERTY_MAP_HPP
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
-
#include <boost/assert.hpp>
#include <boost/type_traits/is_base_and_derived.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/optional.hpp>
-#include <boost/graph/parallel/process_group.hpp>
-#include <boost/graph/detail/edge.hpp>
+#include <boost/property_map/parallel/process_group.hpp>
#include <boost/function/function1.hpp>
#include <vector>
#include <set>
-#include <boost/graph/parallel/basic_reduce.hpp>
-#include <boost/graph/parallel/detail/untracked_pair.hpp>
+#include <boost/property_map/parallel/basic_reduce.hpp>
+#include <boost/property_map/parallel/detail/untracked_pair.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/property_map/parallel/local_property_map.hpp>
#include <map>
#include <boost/version.hpp>
-#include <boost/graph/distributed/unsafe_serialize.hpp>
+#include <boost/property_map/parallel/unsafe_serialize.hpp>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/member.hpp>
@@ -48,8 +43,6 @@
namespace boost { namespace parallel {
-using boost::graph::parallel::trigger_receive_context;
-
namespace detail {
/**************************************************************************
* Metafunction that degrades an Lvalue Property Map category tag to
@@ -93,10 +86,10 @@ namespace detail {
template<typename PropertyMap, typename Key, typename Value>
static inline void
do_put(PropertyMap pm, const Key& key, const Value& value)
- {
+ {
using boost::put;
- put(pm, key, value);
+ put(pm, key, value);
}
};
@@ -240,7 +233,7 @@ class distributed_property_map
property_map_put,
/** A request to retrieve a particular value in a property
- * map. The message contains a key. The owner of that key will
+ * map. The message contains a key. The owner of that key will
* reply with a value.
*/
property_map_get,
@@ -377,7 +370,7 @@ class distributed_property_map
reference operator[](const key_type& key) const
{
owner_local_pair p = get(data->global, key);
-
+
if (p.first == process_id(data->process_group)) {
return data->storage[p.second];
} else {
@@ -397,11 +390,11 @@ class distributed_property_map
* \internal
*
*/
- void
+ void
request_put(process_id_type p, const key_type& k, const value_type& v) const
- {
- send(data->process_group, p, property_map_put,
- boost::parallel::detail::make_untracked_pair(k, v));
+ {
+ send(data->process_group, p, property_map_put,
+ boost::parallel::detail::make_untracked_pair(k, v));
}
/** Access the ghost cell for the given key.
@@ -419,11 +412,11 @@ class distributed_property_map
struct data_t
{
- data_t(const ProcessGroup& pg, const GlobalMap& global,
+ data_t(const ProcessGroup& pg, const GlobalMap& global,
const StorageMap& pm, const function1<value_type, key_type>& dv,
bool has_default_resolver)
- : process_group(pg), global(global), storage(pm),
- ghost_cells(), max_ghost_cells(1000000), get_default_value(dv),
+ : process_group(pg), global(global), storage(pm),
+ ghost_cells(), max_ghost_cells(1000000), get_default_value(dv),
has_default_resolver(has_default_resolver), model(cm_forward) { }
/// The process group
@@ -500,29 +493,29 @@ class distributed_property_map
void operator()(process_id_type source, int tag);
/// Individual message handlers
- void
- handle_put(int source, int tag,
- const boost::parallel::detail::untracked_pair<key_type, value_type>& data,
+ void
+ handle_put(int source, int tag,
+ const boost::parallel::detail::untracked_pair<key_type, value_type>& data,
trigger_receive_context);
value_type
- handle_get(int source, int tag, const key_type& data,
+ handle_get(int source, int tag, const key_type& data,
trigger_receive_context);
void
- handle_multiget(int source, int tag,
+ handle_multiget(int source, int tag,
const std::vector<key_type>& data,
trigger_receive_context);
void
handle_multiget_reply
- (int source, int tag,
+ (int source, int tag,
const std::vector<boost::parallel::detail::untracked_pair<key_type, value_type> >& msg,
trigger_receive_context);
void
handle_multiput
- (int source, int tag,
+ (int source, int tag,
const std::vector<unsafe_pair<local_key_type, value_type> >& data,
trigger_receive_context);
@@ -581,7 +574,7 @@ get(const PBGL_DISTRIB_PMAP& pm,
{
using boost::get;
- typename property_traits<GlobalMap>::value_type p =
+ typename property_traits<GlobalMap>::value_type p =
get(pm.data->global, key);
if (p.first == process_id(pm.data->process_group)) {
@@ -609,13 +602,13 @@ put(const PBGL_DISTRIB_PMAP& pm,
{
using boost::put;
- typename property_traits<GlobalMap>::value_type p =
+ typename property_traits<GlobalMap>::value_type p =
get(pm.data->global, key);
if (p.first == process_id(pm.data->process_group)) {
put(pm.data->storage, p.second, value);
} else {
- if (pm.data->model & cm_forward)
+ if (pm.data->model & cm_forward)
pm.request_put(p.first, key, value);
pm.cell(key, false) = value;
@@ -637,7 +630,7 @@ local_put(const PBGL_DISTRIB_PMAP& pm,
{
using boost::put;
- typename property_traits<GlobalMap>::value_type p =
+ typename property_traits<GlobalMap>::value_type p =
get(pm.data->global, key);
if (p.first == process_id(pm.data->process_group))
@@ -669,7 +662,7 @@ synchronize(PBGL_DISTRIB_PMAP& pm)
/// Create a distributed property map.
template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
inline distributed_property_map<ProcessGroup, GlobalMap, StorageMap>
-make_distributed_property_map(const ProcessGroup& pg, GlobalMap global,
+make_distributed_property_map(const ProcessGroup& pg, GlobalMap global,
StorageMap storage)
{
typedef distributed_property_map<ProcessGroup, GlobalMap, StorageMap>
@@ -680,10 +673,10 @@ make_distributed_property_map(const ProcessGroup& pg, GlobalMap global,
/**
* \overload
*/
-template<typename ProcessGroup, typename GlobalMap, typename StorageMap,
+template<typename ProcessGroup, typename GlobalMap, typename StorageMap,
typename Reduce>
inline distributed_property_map<ProcessGroup, GlobalMap, StorageMap>
-make_distributed_property_map(const ProcessGroup& pg, GlobalMap global,
+make_distributed_property_map(const ProcessGroup& pg, GlobalMap global,
StorageMap storage, Reduce reduce)
{
typedef distributed_property_map<ProcessGroup, GlobalMap, StorageMap>
@@ -693,16 +686,6 @@ make_distributed_property_map(const ProcessGroup& pg, GlobalMap global,
} } // end namespace boost::parallel
-// Boost's functional/hash
-namespace boost {
- template<typename D, typename V>
- struct hash<boost::detail::edge_desc_impl<D, V> >
- {
- std::size_t operator()(const boost::detail::edge_desc_impl<D, V> & x) const
- { return hash_value(x.get_property()); }
- };
-}
-
#include <boost/property_map/parallel/impl/distributed_property_map.ipp>
#undef PBGL_DISTRIB_PMAP
diff --git a/3party/boost/boost/property_map/parallel/global_index_map.hpp b/3party/boost/boost/property_map/parallel/global_index_map.hpp
index e40d27a07a..ab954445c5 100644
--- a/3party/boost/boost/property_map/parallel/global_index_map.hpp
+++ b/3party/boost/boost/property_map/parallel/global_index_map.hpp
@@ -9,10 +9,6 @@
#ifndef BOOST_PARALLEL_GLOBAL_INDEX_MAP_HPP
#define BOOST_PARALLEL_GLOBAL_INDEX_MAP_HPP
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
-
#include <boost/property_map/property_map.hpp>
#include <vector>
#include <boost/shared_ptr.hpp>
diff --git a/3party/boost/boost/property_map/parallel/impl/distributed_property_map.ipp b/3party/boost/boost/property_map/parallel/impl/distributed_property_map.ipp
index ef20817f0d..a4213bcf9a 100644
--- a/3party/boost/boost/property_map/parallel/impl/distributed_property_map.ipp
+++ b/3party/boost/boost/property_map/parallel/impl/distributed_property_map.ipp
@@ -9,14 +9,10 @@
// Andrew Lumsdaine
#include <boost/assert.hpp>
#include <boost/property_map/parallel/distributed_property_map.hpp>
-#include <boost/graph/parallel/detail/untracked_pair.hpp>
+#include <boost/property_map/parallel/detail/untracked_pair.hpp>
#include <boost/type_traits/is_base_and_derived.hpp>
#include <boost/bind.hpp>
-#include <boost/graph/parallel/simple_trigger.hpp>
-
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
+#include <boost/property_map/parallel/simple_trigger.hpp>
namespace boost { namespace parallel {
@@ -243,7 +239,7 @@ void
PBGL_DISTRIB_PMAP::handle_message<Reduce>::
setup_triggers(process_group_type& pg)
{
- using boost::graph::parallel::simple_trigger;
+ using boost::parallel::simple_trigger;
simple_trigger(pg, property_map_put, this, &handle_message::handle_put);
simple_trigger(pg, property_map_get, this, &handle_message::handle_get);
diff --git a/3party/boost/boost/property_map/parallel/local_property_map.hpp b/3party/boost/boost/property_map/parallel/local_property_map.hpp
index a0e08dcd7b..4b16d9742b 100644
--- a/3party/boost/boost/property_map/parallel/local_property_map.hpp
+++ b/3party/boost/boost/property_map/parallel/local_property_map.hpp
@@ -16,10 +16,6 @@
#ifndef BOOST_PARALLEL_LOCAL_PROPERTY_MAP_HPP
#define BOOST_PARALLEL_LOCAL_PROPERTY_MAP_HPP
-#ifndef BOOST_GRAPH_USE_MPI
-#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
-#endif
-
#include <boost/assert.hpp>
namespace boost {
@@ -40,15 +36,15 @@ namespace boost {
local_property_map() { }
- local_property_map(const ProcessGroup& process_group,
+ local_property_map(const ProcessGroup& process_group,
const GlobalMap& global, const StorageMap& storage)
: process_group_(process_group), global_(global), storage(storage) { }
- reference operator[](const key_type& key)
- {
+ reference operator[](const key_type& key)
+ {
owner_local_pair p = get(global_, key);
BOOST_ASSERT(p.first == process_id(process_group_));
- return storage[p.second];
+ return storage[p.second];
}
GlobalMap& global() const { return global_; }
@@ -66,7 +62,7 @@ namespace boost {
template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
inline
typename local_property_map<ProcessGroup, GlobalMap, StorageMap>::reference
- get(const local_property_map<ProcessGroup, GlobalMap, StorageMap>& pm,
+ get(const local_property_map<ProcessGroup, GlobalMap, StorageMap>& pm,
typename local_property_map<ProcessGroup, GlobalMap, StorageMap>::key_type
const & key)
@@ -77,7 +73,7 @@ namespace boost {
template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
inline void
- put(const local_property_map<ProcessGroup, GlobalMap, StorageMap>& pm,
+ put(const local_property_map<ProcessGroup, GlobalMap, StorageMap>& pm,
typename local_property_map<ProcessGroup, GlobalMap, StorageMap>
::key_type const & key,
typename local_property_map<ProcessGroup, GlobalMap, StorageMap>
diff --git a/3party/boost/boost/property_map/parallel/parallel_property_maps.hpp b/3party/boost/boost/property_map/parallel/parallel_property_maps.hpp
new file mode 100644
index 0000000000..423bdcb18e
--- /dev/null
+++ b/3party/boost/boost/property_map/parallel/parallel_property_maps.hpp
@@ -0,0 +1,233 @@
+// (C) Copyright Jeremy Siek 1999-2001.
+// Copyright (C) 2006 Trustees of Indiana University
+// Authors: Douglas Gregor and Jeremy Siek
+
+// 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/property_map for documentation.
+
+#ifndef BOOST_PROPERTY_MAP_PARALLEL_PROPERTY_MAPS_HPP
+#define BOOST_PROPERTY_MAP_PARALLEL_PROPERTY_MAPS_HPP
+
+// Parallel property maps moved over from <boost/property_map/property_map.hpp>
+// as part of refactoring out all parallel code from sequential property map
+// library.
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <cstddef>
+#include <boost/detail/iterator.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/concept_archetype.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/property_map/property_map.hpp>
+
+#include <boost/property_map/parallel/distributed_property_map.hpp>
+#include <boost/property_map/parallel/local_property_map.hpp>
+
+namespace boost {
+/** Distributed iterator property map.
+ *
+ * This specialization of @ref iterator_property_map builds a
+ * distributed iterator property map given the local index maps
+ * generated by distributed graph types that automatically have index
+ * properties.
+ *
+ * This specialization is useful when creating external distributed
+ * property maps via the same syntax used to create external
+ * sequential property maps.
+ */
+template<typename RandomAccessIterator, typename ProcessGroup,
+ typename GlobalMap, typename StorageMap,
+ typename ValueType, typename Reference>
+class iterator_property_map
+ <RandomAccessIterator,
+ local_property_map<ProcessGroup, GlobalMap, StorageMap>,
+ ValueType, Reference>
+ : public parallel::distributed_property_map
+ <ProcessGroup,
+ GlobalMap,
+ iterator_property_map<RandomAccessIterator, StorageMap,
+ ValueType, Reference> >
+{
+ typedef iterator_property_map<RandomAccessIterator, StorageMap,
+ ValueType, Reference> local_iterator_map;
+
+ typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
+ local_iterator_map> inherited;
+
+ typedef local_property_map<ProcessGroup, GlobalMap, StorageMap>
+ index_map_type;
+ typedef iterator_property_map self_type;
+
+public:
+ iterator_property_map() { }
+
+ iterator_property_map(RandomAccessIterator cc, const index_map_type& id)
+ : inherited(id.process_group(), id.global(),
+ local_iterator_map(cc, id.base())) { }
+};
+
+/** Distributed iterator property map.
+ *
+ * This specialization of @ref iterator_property_map builds a
+ * distributed iterator property map given a distributed index
+ * map. Only the local portion of the distributed index property map
+ * is utilized.
+ *
+ * This specialization is useful when creating external distributed
+ * property maps via the same syntax used to create external
+ * sequential property maps.
+ */
+template<typename RandomAccessIterator, typename ProcessGroup,
+ typename GlobalMap, typename StorageMap,
+ typename ValueType, typename Reference>
+class iterator_property_map<
+ RandomAccessIterator,
+ parallel::distributed_property_map<ProcessGroup,GlobalMap,StorageMap>,
+ ValueType, Reference
+ >
+ : public parallel::distributed_property_map
+ <ProcessGroup,
+ GlobalMap,
+ iterator_property_map<RandomAccessIterator, StorageMap,
+ ValueType, Reference> >
+{
+ typedef iterator_property_map<RandomAccessIterator, StorageMap,
+ ValueType, Reference> local_iterator_map;
+
+ typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
+ local_iterator_map> inherited;
+
+ typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
+ StorageMap>
+ index_map_type;
+
+public:
+ iterator_property_map() { }
+
+ iterator_property_map(RandomAccessIterator cc, const index_map_type& id)
+ : inherited(id.process_group(), id.global(),
+ local_iterator_map(cc, id.base())) { }
+};
+
+namespace parallel {
+// Generate an iterator property map with a specific kind of ghost
+// cells
+template<typename RandomAccessIterator, typename ProcessGroup,
+ typename GlobalMap, typename StorageMap>
+distributed_property_map<ProcessGroup,
+ GlobalMap,
+ iterator_property_map<RandomAccessIterator,
+ StorageMap> >
+make_iterator_property_map(RandomAccessIterator cc,
+ local_property_map<ProcessGroup, GlobalMap,
+ StorageMap> index_map)
+{
+ typedef distributed_property_map<
+ ProcessGroup, GlobalMap,
+ iterator_property_map<RandomAccessIterator, StorageMap> >
+ result_type;
+ return result_type(index_map.process_group(), index_map.global(),
+ make_iterator_property_map(cc, index_map.base()));
+}
+
+} // end namespace parallel
+
+/** Distributed safe iterator property map.
+ *
+ * This specialization of @ref safe_iterator_property_map builds a
+ * distributed iterator property map given the local index maps
+ * generated by distributed graph types that automatically have index
+ * properties.
+ *
+ * This specialization is useful when creating external distributed
+ * property maps via the same syntax used to create external
+ * sequential property maps.
+ */
+template<typename RandomAccessIterator, typename ProcessGroup,
+ typename GlobalMap, typename StorageMap, typename ValueType,
+ typename Reference>
+class safe_iterator_property_map
+ <RandomAccessIterator,
+ local_property_map<ProcessGroup, GlobalMap, StorageMap>,
+ ValueType, Reference>
+ : public parallel::distributed_property_map
+ <ProcessGroup,
+ GlobalMap,
+ safe_iterator_property_map<RandomAccessIterator, StorageMap,
+ ValueType, Reference> >
+{
+ typedef safe_iterator_property_map<RandomAccessIterator, StorageMap,
+ ValueType, Reference> local_iterator_map;
+
+ typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
+ local_iterator_map> inherited;
+
+ typedef local_property_map<ProcessGroup, GlobalMap, StorageMap> index_map_type;
+
+public:
+ safe_iterator_property_map() { }
+
+ safe_iterator_property_map(RandomAccessIterator cc, std::size_t n,
+ const index_map_type& id)
+ : inherited(id.process_group(), id.global(),
+ local_iterator_map(cc, n, id.base())) { }
+};
+
+/** Distributed safe iterator property map.
+ *
+ * This specialization of @ref safe_iterator_property_map builds a
+ * distributed iterator property map given a distributed index
+ * map. Only the local portion of the distributed index property map
+ * is utilized.
+ *
+ * This specialization is useful when creating external distributed
+ * property maps via the same syntax used to create external
+ * sequential property maps.
+ */
+template<typename RandomAccessIterator, typename ProcessGroup,
+ typename GlobalMap, typename StorageMap,
+ typename ValueType, typename Reference>
+class safe_iterator_property_map<
+ RandomAccessIterator,
+ parallel::distributed_property_map<ProcessGroup,GlobalMap,StorageMap>,
+ ValueType, Reference>
+ : public parallel::distributed_property_map
+ <ProcessGroup,
+ GlobalMap,
+ safe_iterator_property_map<RandomAccessIterator, StorageMap,
+ ValueType, Reference> >
+{
+ typedef safe_iterator_property_map<RandomAccessIterator, StorageMap,
+ ValueType, Reference> local_iterator_map;
+
+ typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
+ local_iterator_map> inherited;
+
+ typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
+ StorageMap>
+ index_map_type;
+
+public:
+ safe_iterator_property_map() { }
+
+ safe_iterator_property_map(RandomAccessIterator cc, std::size_t n,
+ const index_map_type& id)
+ : inherited(id.process_group(), id.global(),
+ local_iterator_map(cc, n, id.base())) { }
+};
+
+}
+
+#include <boost/property_map/vector_property_map.hpp>
+
+#endif /* BOOST_PROPERTY_MAP_PARALLEL_PROPERTY_MAPS_HPP */
+
diff --git a/3party/boost/boost/property_map/parallel/process_group.hpp b/3party/boost/boost/property_map/parallel/process_group.hpp
new file mode 100644
index 0000000000..fac0a19485
--- /dev/null
+++ b/3party/boost/boost/property_map/parallel/process_group.hpp
@@ -0,0 +1,97 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_PROPERTY_MAP_PARALLEL_PROCESS_GROUP_HPP
+#define BOOST_PROPERTY_MAP_PARALLEL_PROCESS_GROUP_HPP
+
+#include <cstdlib>
+#include <utility>
+
+namespace boost { namespace parallel {
+
+/**
+ * A special type used as a flag to a process group constructor that
+ * indicates that the copy of a process group will represent a new
+ * distributed data structure.
+ */
+struct attach_distributed_object { };
+
+/**
+ * Describes the context in which a trigger is being invoked to
+ * receive a message.
+ */
+enum trigger_receive_context {
+ /// No trigger is active at this time.
+ trc_none,
+ /// The trigger is being invoked during synchronization, at the end
+ /// of a superstep.
+ trc_in_synchronization,
+ /// The trigger is being invoked as an "early" receive of a message
+ /// that was sent through the normal "send" operations to be
+ /// received by the end of the superstep, but the process group sent
+ /// the message earlier to clear its buffers.
+ trc_early_receive,
+ /// The trigger is being invoked for an out-of-band message, which
+ /// must be handled immediately.
+ trc_out_of_band,
+ /// The trigger is being invoked for an out-of-band message, which
+ /// must be handled immediately and has alredy been received by
+ /// an MPI_IRecv call.
+ trc_irecv_out_of_band
+};
+
+// Process group tags
+struct process_group_tag {};
+struct linear_process_group_tag : virtual process_group_tag {};
+struct messaging_process_group_tag : virtual process_group_tag {};
+struct immediate_process_group_tag : virtual messaging_process_group_tag {};
+struct bsp_process_group_tag : virtual messaging_process_group_tag {};
+struct batch_process_group_tag : virtual messaging_process_group_tag {};
+struct locking_process_group_tag : virtual process_group_tag {};
+struct spawning_process_group_tag : virtual process_group_tag {};
+
+struct process_group_archetype
+{
+ typedef int process_id_type;
+};
+
+void wait(process_group_archetype&);
+void synchronize(process_group_archetype&);
+int process_id(const process_group_archetype&);
+int num_processes(const process_group_archetype&);
+
+template<typename T> void send(process_group_archetype&, int, int, const T&);
+
+template<typename T>
+process_group_archetype::process_id_type
+receive(const process_group_archetype& pg,
+ process_group_archetype::process_id_type source, int tag, T& value);
+
+template<typename T>
+std::pair<process_group_archetype::process_id_type, std::size_t>
+receive(const process_group_archetype& pg, int tag, T values[], std::size_t n);
+
+template<typename T>
+std::pair<process_group_archetype::process_id_type, std::size_t>
+receive(const process_group_archetype& pg,
+ process_group_archetype::process_id_type source, int tag, T values[],
+ std::size_t n);
+
+} } // end namespace boost::parallel
+
+namespace boost { namespace graph { namespace distributed {
+ using boost::parallel::trigger_receive_context;
+ using boost::parallel::trc_early_receive;
+ using boost::parallel::trc_out_of_band;
+ using boost::parallel::trc_irecv_out_of_band;
+ using boost::parallel::trc_in_synchronization;
+ using boost::parallel::trc_none;
+ using boost::parallel::attach_distributed_object;
+} } } // end namespace boost::graph::distributed
+
+#endif // BOOST_PROPERTY_MAP_PARALLEL_PROCESS_GROUP_HPP
diff --git a/3party/boost/boost/property_map/parallel/simple_trigger.hpp b/3party/boost/boost/property_map/parallel/simple_trigger.hpp
new file mode 100644
index 0000000000..8ab5cfde7f
--- /dev/null
+++ b/3party/boost/boost/property_map/parallel/simple_trigger.hpp
@@ -0,0 +1,106 @@
+// Copyright (C) 2007 Douglas Gregor
+
+// 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)
+
+// This file contains a simplification of the "trigger" method for
+// process groups. The simple trigger handles the common case where
+// the handler associated with a trigger is a member function bound to
+// a particular pointer.
+
+#ifndef BOOST_PROPERTY_MAP_PARALLEL_SIMPLE_TRIGGER_HPP
+#define BOOST_PROPERTY_MAP_PARALLEL_SIMPLE_TRIGGER_HPP
+
+#include <boost/property_map/parallel/process_group.hpp>
+
+namespace boost { namespace parallel {
+
+namespace detail {
+
+/**
+ * INTERNAL ONLY
+ *
+ * The actual function object that bridges from the normal trigger
+ * interface to the simplified interface. This is the equivalent of
+ * bind(pmf, self, _1, _2, _3, _4), but without the compile-time
+ * overhead of bind.
+ */
+template<typename Class, typename T, typename Result>
+class simple_trigger_t
+{
+public:
+ simple_trigger_t(Class* self,
+ Result (Class::*pmf)(int, int, const T&,
+ trigger_receive_context))
+ : self(self), pmf(pmf) { }
+
+ Result
+ operator()(int source, int tag, const T& data,
+ trigger_receive_context context) const
+ {
+ return (self->*pmf)(source, tag, data, context);
+ }
+
+private:
+ Class* self;
+ Result (Class::*pmf)(int, int, const T&, trigger_receive_context);
+};
+
+} // end namespace detail
+
+/**
+ * Simplified trigger interface that reduces the amount of code
+ * required to connect a process group trigger to a handler that is
+ * just a bound member function.
+ *
+ * INTERNAL ONLY
+ */
+template<typename ProcessGroup, typename Class, typename T>
+inline void
+simple_trigger(ProcessGroup& pg, int tag, Class* self,
+ void (Class::*pmf)(int source, int tag, const T& data,
+ trigger_receive_context context), int)
+{
+ pg.template trigger<T>(tag,
+ detail::simple_trigger_t<Class, T, void>(self, pmf));
+}
+
+/**
+ * Simplified trigger interface that reduces the amount of code
+ * required to connect a process group trigger with a reply to a
+ * handler that is just a bound member function.
+ *
+ * INTERNAL ONLY
+ */
+template<typename ProcessGroup, typename Class, typename T, typename Result>
+inline void
+simple_trigger(ProcessGroup& pg, int tag, Class* self,
+ Result (Class::*pmf)(int source, int tag, const T& data,
+ trigger_receive_context context), long)
+{
+ pg.template trigger_with_reply<T>
+ (tag, detail::simple_trigger_t<Class, T, Result>(self, pmf));
+}
+
+/**
+ * Simplified trigger interface that reduces the amount of code
+ * required to connect a process group trigger to a handler that is
+ * just a bound member function.
+ */
+template<typename ProcessGroup, typename Class, typename T, typename Result>
+inline void
+simple_trigger(ProcessGroup& pg, int tag, Class* self,
+ Result (Class::*pmf)(int source, int tag, const T& data,
+ trigger_receive_context context))
+{
+ // We pass 0 (an int) to help VC++ disambiguate calls to simple_trigger
+ // with Result=void.
+ simple_trigger(pg, tag, self, pmf, 0);
+}
+
+} } // end namespace boost::parallel
+
+namespace boost { namespace graph { namespace parallel { using boost::parallel::simple_trigger; } } }
+
+#endif // BOOST_PROPERTY_MAP_PARALLEL_SIMPLE_TRIGGER_HPP
diff --git a/3party/boost/boost/property_map/parallel/unsafe_serialize.hpp b/3party/boost/boost/property_map/parallel/unsafe_serialize.hpp
new file mode 100644
index 0000000000..a37dc21dd7
--- /dev/null
+++ b/3party/boost/boost/property_map/parallel/unsafe_serialize.hpp
@@ -0,0 +1,81 @@
+// Copyright (C) 2006 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+
+// This file contains the "unsafe_serialize" routine, which transforms
+// types they may not be serializable (such as void*) into
+// serializable equivalents.
+#ifndef BOOST_PROPERTY_MAP_UNSAFE_SERIALIZE_HPP
+#define BOOST_PROPERTY_MAP_UNSAFE_SERIALIZE_HPP
+
+#include <boost/mpi/datatype.hpp>
+#include <boost/serialization/is_bitwise_serializable.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits.hpp>
+#include <utility>
+
+BOOST_IS_BITWISE_SERIALIZABLE(void*)
+namespace boost { namespace mpi {
+ template<> struct is_mpi_datatype<void*> : mpl::true_ { };
+} } // end namespace boost::mpi
+
+namespace boost {
+ typedef mpl::if_c<(sizeof(int) == sizeof(void*)),
+ int,
+ mpl::if_c<(sizeof(long) == sizeof(void*)),
+ long,
+ mpl::if_c<(sizeof(void*) <= sizeof(boost::intmax_t)),
+ boost::intmax_t,
+ void>::type
+ >::type
+ >::type ptr_serialize_type;
+
+ BOOST_STATIC_ASSERT ((!boost::is_void<ptr_serialize_type>::value));
+
+ template<typename T> inline T& unsafe_serialize(T& x) { return x; }
+
+ inline ptr_serialize_type& unsafe_serialize(void*& x)
+ { return reinterpret_cast<ptr_serialize_type&>(x); }
+
+ // Force Boost.MPI to serialize a void* like a ptr_serialize_type
+ namespace mpi {
+ template<> inline MPI_Datatype get_mpi_datatype<void*>(void* const& x)
+ {
+ return get_mpi_datatype<ptr_serialize_type>();
+ }
+ }
+
+ template<typename T, typename U>
+ struct unsafe_pair
+ {
+ unsafe_pair() { }
+ unsafe_pair(const T& t, const U& u) : first(t), second(u) { }
+ unsafe_pair(const std::pair<T, U>& p) : first(p.first), second(p.second) { }
+ T first;
+ U second;
+
+ template<typename Archiver>
+ void serialize(Archiver& ar, const unsigned /*version*/)
+ {
+ ar & unsafe_serialize(first) & unsafe_serialize(second);
+ }
+ };
+
+ template<typename T, typename U>
+ bool operator<(unsafe_pair<T,U> const& x, unsafe_pair<T,U> const& y)
+ {
+ return std::make_pair(x.first, x.second) <
+ std::make_pair(y.first, y.second);
+ }
+
+} // end namespace boost
+
+#endif // BOOST_PROPERTY_MAP_UNSAFE_SERIALIZE_HPP
diff --git a/3party/boost/boost/property_map/parallel/vector_property_map.hpp b/3party/boost/boost/property_map/parallel/vector_property_map.hpp
new file mode 100644
index 0000000000..f1ad4c4fb0
--- /dev/null
+++ b/3party/boost/boost/property_map/parallel/vector_property_map.hpp
@@ -0,0 +1,104 @@
+// Copyright (C) Vladimir Prus 2003.
+// 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/graph/vector_property_map.html for
+// documentation.
+//
+
+#ifndef BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
+#define BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
+
+#include <boost/property_map/property_map.hpp>
+#include <boost/shared_ptr.hpp>
+#include <vector>
+#include <boost/property_map/parallel/distributed_property_map.hpp>
+#include <boost/property_map/parallel/local_property_map.hpp>
+
+namespace boost {
+
+/** Distributed vector property map.
+ *
+ * This specialization of @ref vector_property_map builds a
+ * distributed vector property map given the local index maps
+ * generated by distributed graph types that automatically have index
+ * properties.
+ *
+ * This specialization is useful when creating external distributed
+ * property maps via the same syntax used to create external
+ * sequential property maps.
+ */
+template<typename T, typename ProcessGroup, typename GlobalMap,
+ typename StorageMap>
+class vector_property_map<T,
+ local_property_map<ProcessGroup, GlobalMap,
+ StorageMap> >
+ : public parallel::distributed_property_map<
+ ProcessGroup, GlobalMap, vector_property_map<T, StorageMap> >
+{
+ typedef vector_property_map<T, StorageMap> local_iterator_map;
+
+ typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
+ local_iterator_map> inherited;
+
+ typedef local_property_map<ProcessGroup, GlobalMap, StorageMap> index_map_type;
+
+public:
+ vector_property_map(const index_map_type& index = index_map_type())
+ : inherited(index.process_group(), index.global(),
+ local_iterator_map(index.base())) { }
+
+ vector_property_map(unsigned inital_size,
+ const index_map_type& index = index_map_type())
+ : inherited(index.process_group(), index.global(),
+ local_iterator_map(inital_size, index.base())) { }
+};
+
+/** Distributed vector property map.
+ *
+ * This specialization of @ref vector_property_map builds a
+ * distributed vector property map given the local index maps
+ * generated by distributed graph types that automatically have index
+ * properties.
+ *
+ * This specialization is useful when creating external distributed
+ * property maps via the same syntax used to create external
+ * sequential property maps.
+ */
+template<typename T, typename ProcessGroup, typename GlobalMap,
+ typename StorageMap>
+class vector_property_map<
+ T,
+ parallel::distributed_property_map<
+ ProcessGroup,
+ GlobalMap,
+ StorageMap
+ >
+ >
+ : public parallel::distributed_property_map<
+ ProcessGroup, GlobalMap, vector_property_map<T, StorageMap> >
+{
+ typedef vector_property_map<T, StorageMap> local_iterator_map;
+
+ typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
+ local_iterator_map> inherited;
+
+ typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
+ StorageMap>
+ index_map_type;
+
+public:
+ vector_property_map(const index_map_type& index = index_map_type())
+ : inherited(index.process_group(), index.global(),
+ local_iterator_map(index.base())) { }
+
+ vector_property_map(unsigned inital_size,
+ const index_map_type& index = index_map_type())
+ : inherited(index.process_group(), index.global(),
+ local_iterator_map(inital_size, index.base())) { }
+};
+
+}
+
+#endif // BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
diff --git a/3party/boost/boost/property_map/property_map.hpp b/3party/boost/boost/property_map/property_map.hpp
index 01f961767a..ac0abb12b8 100644
--- a/3party/boost/boost/property_map/property_map.hpp
+++ b/3party/boost/boost/property_map/property_map.hpp
@@ -13,7 +13,8 @@
#include <boost/assert.hpp>
#include <boost/config.hpp>
-#include <boost/pending/cstddef.hpp>
+#include <boost/static_assert.hpp>
+#include <cstddef>
#include <boost/detail/iterator.hpp>
#include <boost/concept_check.hpp>
#include <boost/concept_archetype.hpp>
@@ -91,62 +92,9 @@ namespace boost {
//=========================================================================
// property_traits specialization for pointers
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- // The user will just have to create their own specializations for
- // other pointers types if the compiler does not have partial
- // specializations. Sorry!
-#define BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(TYPE) \
- template <> \
- struct property_traits<TYPE*> { \
- typedef TYPE value_type; \
- typedef value_type& reference; \
- typedef std::ptrdiff_t key_type; \
- typedef lvalue_property_map_tag category; \
- }; \
- template <> \
- struct property_traits<const TYPE*> { \
- typedef TYPE value_type; \
- typedef const value_type& reference; \
- typedef std::ptrdiff_t key_type; \
- typedef lvalue_property_map_tag category; \
- }
-
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(long);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned long);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(int);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned int);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(short);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned short);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(char);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned char);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(signed char);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(bool);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(float);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(double);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(long double);
-
- // This may need to be turned off for some older compilers that don't have
- // wchar_t intrinsically.
-# ifndef BOOST_NO_INTRINSIC_WCHAR_T
- template <>
- struct property_traits<wchar_t*> {
- typedef wchar_t value_type;
- typedef value_type& reference;
- typedef std::ptrdiff_t key_type;
- typedef lvalue_property_map_tag category;
- };
- template <>
- struct property_traits<const wchar_t*> {
- typedef wchar_t value_type;
- typedef const value_type& reference;
- typedef std::ptrdiff_t key_type;
- typedef lvalue_property_map_tag category;
- };
-# endif
-
-#else
template <class T>
struct property_traits<T*> {
+ // BOOST_STATIC_ASSERT(boost::is_same<T, T*>::value && !"Using pointers as property maps is deprecated");
typedef T value_type;
typedef value_type& reference;
typedef std::ptrdiff_t key_type;
@@ -154,12 +102,12 @@ namespace boost {
};
template <class T>
struct property_traits<const T*> {
+ // BOOST_STATIC_ASSERT(boost::is_same<T, T*>::value && !"Using pointers as property maps is deprecated");
typedef T value_type;
typedef const value_type& reference;
typedef std::ptrdiff_t key_type;
typedef lvalue_property_map_tag category;
};
-#endif
#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
// MSVC doesn't have Koenig lookup, so the user has to
@@ -454,7 +402,6 @@ namespace boost {
IndexMap index;
};
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class RAIter, class ID>
inline safe_iterator_property_map<
RAIter, ID,
@@ -468,7 +415,6 @@ namespace boost {
typename boost::detail::iterator_traits<RAIter>::reference> PA;
return PA(iter, n, id);
}
-#endif
template <class RAIter, class Value, class ID>
inline safe_iterator_property_map<RAIter, ID, Value, Value&>
make_safe_iterator_property_map(RAIter iter, std::size_t n, ID id, Value) {
@@ -540,14 +486,14 @@ namespace boost {
//=========================================================================
// A property map that always returns the same object by value.
//
- template <typename ValueType>
+ template <typename ValueType, typename KeyType = void>
class static_property_map :
public
boost::put_get_helper<ValueType,static_property_map<ValueType> >
{
ValueType value;
public:
- typedef void key_type;
+ typedef KeyType key_type;
typedef ValueType value_type;
typedef ValueType reference;
typedef readable_property_map_tag category;
@@ -557,6 +503,12 @@ namespace boost {
inline reference operator[](T) const { return value; }
};
+ template <typename KeyType, typename ValueType>
+ static_property_map<ValueType, KeyType>
+ make_static_property_map(const ValueType& v) {
+ return static_property_map<ValueType, KeyType>(v);
+ }
+
//=========================================================================
// A property map that always returns a reference to the same object.
//
@@ -642,204 +594,8 @@ namespace boost {
} // namespace boost
#ifdef BOOST_GRAPH_USE_MPI
-#include <boost/property_map/parallel/distributed_property_map.hpp>
-#include <boost/property_map/parallel/local_property_map.hpp>
-
-namespace boost {
-/** Distributed iterator property map.
- *
- * This specialization of @ref iterator_property_map builds a
- * distributed iterator property map given the local index maps
- * generated by distributed graph types that automatically have index
- * properties.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
-template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap,
- typename ValueType, typename Reference>
-class iterator_property_map
- <RandomAccessIterator,
- local_property_map<ProcessGroup, GlobalMap, StorageMap>,
- ValueType, Reference>
- : public parallel::distributed_property_map
- <ProcessGroup,
- GlobalMap,
- iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> >
-{
- typedef iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> local_iterator_map;
-
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
-
- typedef local_property_map<ProcessGroup, GlobalMap, StorageMap>
- index_map_type;
- typedef iterator_property_map self_type;
-
-public:
- iterator_property_map() { }
-
- iterator_property_map(RandomAccessIterator cc, const index_map_type& id)
- : inherited(id.process_group(), id.global(),
- local_iterator_map(cc, id.base())) { }
-};
-
-/** Distributed iterator property map.
- *
- * This specialization of @ref iterator_property_map builds a
- * distributed iterator property map given a distributed index
- * map. Only the local portion of the distributed index property map
- * is utilized.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
-template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap,
- typename ValueType, typename Reference>
-class iterator_property_map<
- RandomAccessIterator,
- parallel::distributed_property_map<ProcessGroup,GlobalMap,StorageMap>,
- ValueType, Reference
- >
- : public parallel::distributed_property_map
- <ProcessGroup,
- GlobalMap,
- iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> >
-{
- typedef iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> local_iterator_map;
-
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
-
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- StorageMap>
- index_map_type;
-
-public:
- iterator_property_map() { }
-
- iterator_property_map(RandomAccessIterator cc, const index_map_type& id)
- : inherited(id.process_group(), id.global(),
- local_iterator_map(cc, id.base())) { }
-};
-
-namespace parallel {
-// Generate an iterator property map with a specific kind of ghost
-// cells
-template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap>
-distributed_property_map<ProcessGroup,
- GlobalMap,
- iterator_property_map<RandomAccessIterator,
- StorageMap> >
-make_iterator_property_map(RandomAccessIterator cc,
- local_property_map<ProcessGroup, GlobalMap,
- StorageMap> index_map)
-{
- typedef distributed_property_map<
- ProcessGroup, GlobalMap,
- iterator_property_map<RandomAccessIterator, StorageMap> >
- result_type;
- return result_type(index_map.process_group(), index_map.global(),
- make_iterator_property_map(cc, index_map.base()));
-}
-
-} // end namespace parallel
-
-/** Distributed safe iterator property map.
- *
- * This specialization of @ref safe_iterator_property_map builds a
- * distributed iterator property map given the local index maps
- * generated by distributed graph types that automatically have index
- * properties.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
-template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap, typename ValueType,
- typename Reference>
-class safe_iterator_property_map
- <RandomAccessIterator,
- local_property_map<ProcessGroup, GlobalMap, StorageMap>,
- ValueType, Reference>
- : public parallel::distributed_property_map
- <ProcessGroup,
- GlobalMap,
- safe_iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> >
-{
- typedef safe_iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> local_iterator_map;
-
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
-
- typedef local_property_map<ProcessGroup, GlobalMap, StorageMap> index_map_type;
-
-public:
- safe_iterator_property_map() { }
-
- safe_iterator_property_map(RandomAccessIterator cc, std::size_t n,
- const index_map_type& id)
- : inherited(id.process_group(), id.global(),
- local_iterator_map(cc, n, id.base())) { }
-};
-
-/** Distributed safe iterator property map.
- *
- * This specialization of @ref safe_iterator_property_map builds a
- * distributed iterator property map given a distributed index
- * map. Only the local portion of the distributed index property map
- * is utilized.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
-template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap,
- typename ValueType, typename Reference>
-class safe_iterator_property_map<
- RandomAccessIterator,
- parallel::distributed_property_map<ProcessGroup,GlobalMap,StorageMap>,
- ValueType, Reference>
- : public parallel::distributed_property_map
- <ProcessGroup,
- GlobalMap,
- safe_iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> >
-{
- typedef safe_iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> local_iterator_map;
-
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
-
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- StorageMap>
- index_map_type;
-
-public:
- safe_iterator_property_map() { }
-
- safe_iterator_property_map(RandomAccessIterator cc, std::size_t n,
- const index_map_type& id)
- : inherited(id.process_group(), id.global(),
- local_iterator_map(cc, n, id.base())) { }
-};
-
-}
-#endif // BOOST_GRAPH_USE_MPI
+#include <boost/property_map/parallel/parallel_property_maps.hpp>
+#endif
#include <boost/property_map/vector_property_map.hpp>
diff --git a/3party/boost/boost/property_map/vector_property_map.hpp b/3party/boost/boost/property_map/vector_property_map.hpp
index a97fb8105b..ceb975a3d4 100644
--- a/3party/boost/boost/property_map/vector_property_map.hpp
+++ b/3party/boost/boost/property_map/vector_property_map.hpp
@@ -93,93 +93,7 @@ namespace boost {
}
#ifdef BOOST_GRAPH_USE_MPI
-#include <boost/property_map/parallel/distributed_property_map.hpp>
-#include <boost/property_map/parallel/local_property_map.hpp>
-
-namespace boost {
-
-/** Distributed vector property map.
- *
- * This specialization of @ref vector_property_map builds a
- * distributed vector property map given the local index maps
- * generated by distributed graph types that automatically have index
- * properties.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
-template<typename T, typename ProcessGroup, typename GlobalMap,
- typename StorageMap>
-class vector_property_map<T,
- local_property_map<ProcessGroup, GlobalMap,
- StorageMap> >
- : public parallel::distributed_property_map<
- ProcessGroup, GlobalMap, vector_property_map<T, StorageMap> >
-{
- typedef vector_property_map<T, StorageMap> local_iterator_map;
-
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
-
- typedef local_property_map<ProcessGroup, GlobalMap, StorageMap> index_map_type;
-
-public:
- vector_property_map(const index_map_type& index = index_map_type())
- : inherited(index.process_group(), index.global(),
- local_iterator_map(index.base())) { }
-
- vector_property_map(unsigned inital_size,
- const index_map_type& index = index_map_type())
- : inherited(index.process_group(), index.global(),
- local_iterator_map(inital_size, index.base())) { }
-};
-
-/** Distributed vector property map.
- *
- * This specialization of @ref vector_property_map builds a
- * distributed vector property map given the local index maps
- * generated by distributed graph types that automatically have index
- * properties.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
-template<typename T, typename ProcessGroup, typename GlobalMap,
- typename StorageMap>
-class vector_property_map<
- T,
- parallel::distributed_property_map<
- ProcessGroup,
- GlobalMap,
- StorageMap
- >
- >
- : public parallel::distributed_property_map<
- ProcessGroup, GlobalMap, vector_property_map<T, StorageMap> >
-{
- typedef vector_property_map<T, StorageMap> local_iterator_map;
-
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
-
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- StorageMap>
- index_map_type;
-
-public:
- vector_property_map(const index_map_type& index = index_map_type())
- : inherited(index.process_group(), index.global(),
- local_iterator_map(index.base())) { }
-
- vector_property_map(unsigned inital_size,
- const index_map_type& index = index_map_type())
- : inherited(index.process_group(), index.global(),
- local_iterator_map(inital_size, index.base())) { }
-};
-
-}
-#endif // BOOST_GRAPH_USE_MPI
+#include <boost/property_map/parallel/vector_property_map.hpp>
+#endif
#endif
diff --git a/3party/boost/boost/property_tree/detail/json_parser_read.hpp b/3party/boost/boost/property_tree/detail/json_parser_read.hpp
index 9638ac9748..798552f6f1 100644
--- a/3party/boost/boost/property_tree/detail/json_parser_read.hpp
+++ b/3party/boost/boost/property_tree/detail/json_parser_read.hpp
@@ -1,8 +1,8 @@
// ----------------------------------------------------------------------------
// Copyright (C) 2002-2006 Marcin Kalicinski
//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// For more information, see www.boost.org
@@ -28,15 +28,14 @@ namespace boost { namespace property_tree { namespace json_parser
///////////////////////////////////////////////////////////////////////
// Json parser context
-
+
template<class Ptree>
struct context
{
-
- typedef typename Ptree::key_type::value_type Ch;
- typedef std::basic_string<Ch> Str;
+ typedef typename Ptree::key_type Str;
+ typedef typename Str::value_type Ch;
typedef typename std::vector<Ch>::iterator It;
-
+
Str string;
Str name;
Ptree root;
@@ -59,7 +58,7 @@ namespace boost { namespace property_tree { namespace json_parser
}
}
};
-
+
struct a_object_e
{
context &c;
@@ -113,7 +112,7 @@ namespace boost { namespace property_tree { namespace json_parser
{
context &c;
a_char(context &c): c(c) { }
- void operator()(It b, It e) const
+ void operator()(It b, It) const
{
c.string += *b;
}
@@ -160,16 +159,17 @@ namespace boost { namespace property_tree { namespace json_parser
struct json_grammar :
public boost::spirit::classic::grammar<json_grammar<Ptree> >
{
-
+
typedef context<Ptree> Context;
- typedef typename Ptree::key_type::value_type Ch;
+ typedef typename Ptree::key_type Str;
+ typedef typename Str::value_type Ch;
mutable Context c;
-
+
template<class Scanner>
struct definition
{
-
+
boost::spirit::classic::rule<Scanner>
root, object, member, array, item, value, string, number;
boost::spirit::classic::rule<
@@ -195,52 +195,52 @@ namespace boost { namespace property_tree { namespace json_parser
assertion<std::string> expect_escape("invalid escape sequence");
// JSON grammar rules
- root
- = expect_root(object | array)
+ root
+ = expect_root(object | array)
>> expect_eoi(end_p)
;
-
- object
+
+ object
= ch_p('{')[typename Context::a_object_s(self.c)]
- >> (ch_p('}')[typename Context::a_object_e(self.c)]
+ >> (ch_p('}')[typename Context::a_object_e(self.c)]
| (list_p(member, ch_p(','))
>> expect_objclose(ch_p('}')[typename Context::a_object_e(self.c)])
)
)
;
-
- member
- = expect_name(string[typename Context::a_name(self.c)])
- >> expect_colon(ch_p(':'))
+
+ member
+ = expect_name(string[typename Context::a_name(self.c)])
+ >> expect_colon(ch_p(':'))
>> expect_value(value)
;
-
- array
+
+ array
= ch_p('[')[typename Context::a_object_s(self.c)]
- >> (ch_p(']')[typename Context::a_object_e(self.c)]
+ >> (ch_p(']')[typename Context::a_object_e(self.c)]
| (list_p(item, ch_p(','))
>> expect_arrclose(ch_p(']')[typename Context::a_object_e(self.c)])
)
)
;
- item
+ item
= expect_value(value)
;
- value
- = string[typename Context::a_string_val(self.c)]
+ value
+ = string[typename Context::a_string_val(self.c)]
| (number | str_p("true") | "false" | "null")[typename Context::a_literal_val(self.c)]
- | object
+ | object
| array
;
-
- number
+
+ number
= !ch_p("-") >>
(ch_p("0") | (range_p(Ch('1'), Ch('9')) >> *digit_p)) >>
!(ch_p(".") >> +digit_p) >>
- !(chset_p(detail::widen<Ch>("eE").c_str()) >>
- !chset_p(detail::widen<Ch>("-+").c_str()) >>
+ !(chset_p(detail::widen<Str>("eE").c_str()) >>
+ !chset_p(detail::widen<Str>("-+").c_str()) >>
+digit_p)
;
@@ -255,7 +255,7 @@ namespace boost { namespace property_tree { namespace json_parser
;
escape
- = chset_p(detail::widen<Ch>("\"\\/bfnrt").c_str())
+ = chset_p(detail::widen<Str>("\"\\/bfnrt").c_str())
[typename Context::a_escape(self.c)]
| 'u' >> uint_parser<unsigned long, 16, 4, 4>()
[typename Context::a_unicode(self.c)]
@@ -305,14 +305,14 @@ namespace boost { namespace property_tree { namespace json_parser
std::istreambuf_iterator<Ch>());
if (!stream.good())
BOOST_PROPERTY_TREE_THROW(json_parser_error("read error", filename, 0));
-
+
// Prepare grammar
json_grammar<Ptree> g;
// Parse
try
{
- parse_info<It> pi = parse(v.begin(), v.end(), g,
+ parse_info<It> pi = parse(v.begin(), v.end(), g,
space_p | comment_p("//") | comment_p("/*", "*/"));
if (!pi.hit || !pi.full)
BOOST_PROPERTY_TREE_THROW((parser_error<std::string, It>(v.begin(), "syntax error")));
diff --git a/3party/boost/boost/property_tree/detail/json_parser_write.hpp b/3party/boost/boost/property_tree/detail/json_parser_write.hpp
index 7639887f65..b52c8eac6f 100644
--- a/3party/boost/boost/property_tree/detail/json_parser_write.hpp
+++ b/3party/boost/boost/property_tree/detail/json_parser_write.hpp
@@ -39,6 +39,7 @@ namespace boost { namespace property_tree { namespace json_parser
else if (*b == Ch('\f')) result += Ch('\\'), result += Ch('f');
else if (*b == Ch('\n')) result += Ch('\\'), result += Ch('n');
else if (*b == Ch('\r')) result += Ch('\\'), result += Ch('r');
+ else if (*b == Ch('\t')) result += Ch('\\'), result += Ch('t');
else if (*b == Ch('/')) result += Ch('\\'), result += Ch('/');
else if (*b == Ch('"')) result += Ch('\\'), result += Ch('"');
else if (*b == Ch('\\')) result += Ch('\\'), result += Ch('\\');
@@ -93,7 +94,8 @@ namespace boost { namespace property_tree { namespace json_parser
stream << Ch(',');
if (pretty) stream << Ch('\n');
}
- stream << Str(4 * indent, Ch(' ')) << Ch(']');
+ if (pretty) stream << Str(4 * indent, Ch(' '));
+ stream << Ch(']');
}
else
@@ -106,12 +108,7 @@ namespace boost { namespace property_tree { namespace json_parser
{
if (pretty) stream << Str(4 * (indent + 1), Ch(' '));
stream << Ch('"') << create_escapes(it->first) << Ch('"') << Ch(':');
- if (pretty) {
- if (it->second.empty())
- stream << Ch(' ');
- else
- stream << Ch('\n') << Str(4 * (indent + 1), Ch(' '));
- }
+ if (pretty) stream << Ch(' ');
write_json_helper(stream, it->second, indent + 1, pretty);
if (boost::next(it) != pt.end())
stream << Ch(',');
diff --git a/3party/boost/boost/property_tree/detail/ptree_utils.hpp b/3party/boost/boost/property_tree/detail/ptree_utils.hpp
index 7e56c8f4bb..72aed4614c 100644
--- a/3party/boost/boost/property_tree/detail/ptree_utils.hpp
+++ b/3party/boost/boost/property_tree/detail/ptree_utils.hpp
@@ -54,49 +54,48 @@ namespace boost { namespace property_tree { namespace detail
// Naively convert narrow string to another character type
- template<class Ch>
- std::basic_string<Ch> widen(const char *text)
+ template<typename Str>
+ Str widen(const char *text)
{
- std::basic_string<Ch> result;
+ Str result;
while (*text)
{
- result += Ch(*text);
+ result += typename Str::value_type(*text);
++text;
}
return result;
}
// Naively convert string to narrow character type
- template<class Ch>
- std::string narrow(const Ch *text)
+ template<typename Str, typename char_type>
+ Str narrow(const char_type *text)
{
- std::string result;
+ Str result;
while (*text)
{
if (*text < 0 || *text > (std::numeric_limits<char>::max)())
result += '*';
else
- result += char(*text);
+ result += typename Str::value_type(*text);
++text;
}
return result;
}
// Remove trailing and leading spaces
- template<class Ch>
- std::basic_string<Ch> trim(const std::basic_string<Ch> &s,
- const std::locale &loc = std::locale())
+ template<class Str>
+ Str trim(const Str &s, const std::locale &loc = std::locale())
{
- typename std::basic_string<Ch>::const_iterator first = s.begin();
- typename std::basic_string<Ch>::const_iterator end = s.end();
+ typename Str::const_iterator first = s.begin();
+ typename Str::const_iterator end = s.end();
while (first != end && std::isspace(*first, loc))
++first;
if (first == end)
- return std::basic_string<Ch>();
- typename std::basic_string<Ch>::const_iterator last = end;
+ return Str();
+ typename Str::const_iterator last = end;
do --last; while (std::isspace(*last, loc));
if (first != s.begin() || last + 1 != end)
- return std::basic_string<Ch>(first, last + 1);
+ return Str(first, last + 1);
else
return s;
}
diff --git a/3party/boost/boost/property_tree/detail/xml_parser_read_rapidxml.hpp b/3party/boost/boost/property_tree/detail/xml_parser_read_rapidxml.hpp
index fc994b162e..9c04219189 100644
--- a/3party/boost/boost/property_tree/detail/xml_parser_read_rapidxml.hpp
+++ b/3party/boost/boost/property_tree/detail/xml_parser_read_rapidxml.hpp
@@ -38,14 +38,13 @@ namespace boost { namespace property_tree { namespace xml_parser
if (node->first_attribute())
{
Ptree &pt_attr_root = pt_node.push_back(
- std::make_pair(xmlattr<Ch>(), Ptree()))->second;
+ std::make_pair(xmlattr<typename Ptree::key_type>(), Ptree()))->second;
for (xml_attribute<Ch> *attr = node->first_attribute();
attr; attr = attr->next_attribute())
{
Ptree &pt_attr = pt_attr_root.push_back(
std::make_pair(attr->name(), Ptree()))->second;
- pt_attr.data() = std::basic_string<Ch>(attr->value(),
- attr->value_size());
+ pt_attr.data() = typename Ptree::key_type(attr->value(), attr->value_size());
}
}
@@ -61,11 +60,10 @@ namespace boost { namespace property_tree { namespace xml_parser
case node_cdata:
{
if (flags & no_concat_text)
- pt.push_back(std::make_pair(xmltext<Ch>(),
+ pt.push_back(std::make_pair(xmltext<typename Ptree::key_type>(),
Ptree(node->value())));
else
- pt.data() += std::basic_string<Ch>(node->value(),
- node->value_size());
+ pt.data() += typename Ptree::key_type(node->value(), node->value_size());
}
break;
@@ -73,9 +71,8 @@ namespace boost { namespace property_tree { namespace xml_parser
case node_comment:
{
if (!(flags & no_comments))
- pt.push_back(std::make_pair(xmlcomment<Ch>(),
- Ptree(std::basic_string<Ch>(node->value(),
- node->value_size()))));
+ pt.push_back(std::make_pair(xmlcomment<typename Ptree::key_type>(),
+ Ptree(typename Ptree::key_type(node->value(), node->value_size()))));
}
break;
diff --git a/3party/boost/boost/property_tree/detail/xml_parser_utils.hpp b/3party/boost/boost/property_tree/detail/xml_parser_utils.hpp
index 7c8a6e13a7..b4c502b5eb 100644
--- a/3party/boost/boost/property_tree/detail/xml_parser_utils.hpp
+++ b/3party/boost/boost/property_tree/detail/xml_parser_utils.hpp
@@ -20,14 +20,15 @@
namespace boost { namespace property_tree { namespace xml_parser
{
- template<class Ch>
- std::basic_string<Ch> condense(const std::basic_string<Ch> &s)
+ template<class Str>
+ Str condense(const Str &s)
{
- std::basic_string<Ch> r;
+ typedef typename Str::value_type Ch;
+ Str r;
std::locale loc;
bool space = false;
- typename std::basic_string<Ch>::const_iterator end = s.end();
- for (typename std::basic_string<Ch>::const_iterator it = s.begin();
+ typename Str::const_iterator end = s.end();
+ for (typename Str::const_iterator it = s.begin();
it != end; ++it)
{
if (isspace(*it, loc) || *it == Ch('\n'))
@@ -41,20 +42,22 @@ namespace boost { namespace property_tree { namespace xml_parser
return r;
}
- template<class Ch>
- std::basic_string<Ch> encode_char_entities(const std::basic_string<Ch> &s)
+
+ template<class Str>
+ Str encode_char_entities(const Str &s)
{
// Don't do anything for empty strings.
if(s.empty()) return s;
- typedef typename std::basic_string<Ch> Str;
+ typedef typename Str::value_type Ch;
+
Str r;
// To properly round-trip spaces and not uglify the XML beyond
// recognition, we have to encode them IF the text contains only spaces.
Str sp(1, Ch(' '));
if(s.find_first_not_of(sp) == Str::npos) {
// The first will suffice.
- r = detail::widen<Ch>("&#32;");
+ r = detail::widen<Str>("&#32;");
r += Str(s.size() - 1, Ch(' '));
} else {
typename Str::const_iterator end = s.end();
@@ -62,11 +65,13 @@ namespace boost { namespace property_tree { namespace xml_parser
{
switch (*it)
{
- case Ch('<'): r += detail::widen<Ch>("&lt;"); break;
- case Ch('>'): r += detail::widen<Ch>("&gt;"); break;
- case Ch('&'): r += detail::widen<Ch>("&amp;"); break;
- case Ch('"'): r += detail::widen<Ch>("&quot;"); break;
- case Ch('\''): r += detail::widen<Ch>("&apos;"); break;
+ case Ch('<'): r += detail::widen<Str>("&lt;"); break;
+ case Ch('>'): r += detail::widen<Str>("&gt;"); break;
+ case Ch('&'): r += detail::widen<Str>("&amp;"); break;
+ case Ch('"'): r += detail::widen<Str>("&quot;"); break;
+ case Ch('\''): r += detail::widen<Str>("&apos;"); break;
+ case Ch('\t'): r += detail::widen<Str>("&#9;"); break;
+ case Ch('\n'): r += detail::widen<Str>("&#10;"); break;
default: r += *it; break;
}
}
@@ -74,10 +79,10 @@ namespace boost { namespace property_tree { namespace xml_parser
return r;
}
- template<class Ch>
- std::basic_string<Ch> decode_char_entities(const std::basic_string<Ch> &s)
+ template<class Str>
+ Str decode_char_entities(const Str &s)
{
- typedef typename std::basic_string<Ch> Str;
+ typedef typename Str::value_type Ch;
Str r;
typename Str::const_iterator end = s.end();
for (typename Str::const_iterator it = s.begin(); it != end; ++it)
@@ -88,11 +93,11 @@ namespace boost { namespace property_tree { namespace xml_parser
if (semicolon == end)
BOOST_PROPERTY_TREE_THROW(xml_parser_error("invalid character entity", "", 0));
Str ent(it + 1, semicolon);
- if (ent == detail::widen<Ch>("lt")) r += Ch('<');
- else if (ent == detail::widen<Ch>("gt")) r += Ch('>');
- else if (ent == detail::widen<Ch>("amp")) r += Ch('&');
- else if (ent == detail::widen<Ch>("quot")) r += Ch('"');
- else if (ent == detail::widen<Ch>("apos")) r += Ch('\'');
+ if (ent == detail::widen<Str>("lt")) r += Ch('<');
+ else if (ent == detail::widen<Str>("gt")) r += Ch('>');
+ else if (ent == detail::widen<Str>("amp")) r += Ch('&');
+ else if (ent == detail::widen<Str>("quot")) r += Ch('"');
+ else if (ent == detail::widen<Str>("apos")) r += Ch('\'');
else
BOOST_PROPERTY_TREE_THROW(xml_parser_error("invalid character entity", "", 0));
it = semicolon;
@@ -103,31 +108,31 @@ namespace boost { namespace property_tree { namespace xml_parser
return r;
}
- template<class Ch>
- const std::basic_string<Ch> &xmldecl()
+ template<class Str>
+ const Str &xmldecl()
{
- static std::basic_string<Ch> s = detail::widen<Ch>("<?xml>");
+ static Str s = detail::widen<Str>("<?xml>");
return s;
}
- template<class Ch>
- const std::basic_string<Ch> &xmlattr()
+ template<class Str>
+ const Str &xmlattr()
{
- static std::basic_string<Ch> s = detail::widen<Ch>("<xmlattr>");
+ static Str s = detail::widen<Str>("<xmlattr>");
return s;
}
- template<class Ch>
- const std::basic_string<Ch> &xmlcomment()
+ template<class Str>
+ const Str &xmlcomment()
{
- static std::basic_string<Ch> s = detail::widen<Ch>("<xmlcomment>");
+ static Str s = detail::widen<Str>("<xmlcomment>");
return s;
}
- template<class Ch>
- const std::basic_string<Ch> &xmltext()
+ template<class Str>
+ const Str &xmltext()
{
- static std::basic_string<Ch> s = detail::widen<Ch>("<xmltext>");
+ static Str s = detail::widen<Str>("<xmltext>");
return s;
}
diff --git a/3party/boost/boost/property_tree/detail/xml_parser_write.hpp b/3party/boost/boost/property_tree/detail/xml_parser_write.hpp
index 52d0aeb82d..45af878488 100644
--- a/3party/boost/boost/property_tree/detail/xml_parser_write.hpp
+++ b/3party/boost/boost/property_tree/detail/xml_parser_write.hpp
@@ -1,5 +1,6 @@
// ----------------------------------------------------------------------------
// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2013 Sebastian Redl
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -18,24 +19,24 @@
namespace boost { namespace property_tree { namespace xml_parser
{
- template<class Ch>
- void write_xml_indent(std::basic_ostream<Ch> &stream,
+ template<class Str>
+ void write_xml_indent(std::basic_ostream<typename Str::value_type> &stream,
int indent,
- const xml_writer_settings<Ch> & settings
+ const xml_writer_settings<Str> & settings
)
{
- stream << std::basic_string<Ch>(indent * settings.indent_count, settings.indent_char);
+ stream << std::basic_string<typename Str::value_type>(indent * settings.indent_count, settings.indent_char);
}
- template<class Ch>
- void write_xml_comment(std::basic_ostream<Ch> &stream,
- const std::basic_string<Ch> &s,
+ template<class Str>
+ void write_xml_comment(std::basic_ostream<typename Str::value_type> &stream,
+ const Str &s,
int indent,
bool separate_line,
- const xml_writer_settings<Ch> & settings
+ const xml_writer_settings<Str> & settings
)
{
- typedef typename std::basic_string<Ch> Str;
+ typedef typename Str::value_type Ch;
if (separate_line)
write_xml_indent(stream,indent,settings);
stream << Ch('<') << Ch('!') << Ch('-') << Ch('-');
@@ -45,14 +46,15 @@ namespace boost { namespace property_tree { namespace xml_parser
stream << Ch('\n');
}
- template<class Ch>
- void write_xml_text(std::basic_ostream<Ch> &stream,
- const std::basic_string<Ch> &s,
+ template<class Str>
+ void write_xml_text(std::basic_ostream<typename Str::value_type> &stream,
+ const Str &s,
int indent,
bool separate_line,
- const xml_writer_settings<Ch> & settings
+ const xml_writer_settings<Str> & settings
)
{
+ typedef typename Str::value_type Ch;
if (separate_line)
write_xml_indent(stream,indent,settings);
stream << encode_char_entities(s);
@@ -62,14 +64,13 @@ namespace boost { namespace property_tree { namespace xml_parser
template<class Ptree>
void write_xml_element(std::basic_ostream<typename Ptree::key_type::value_type> &stream,
- const std::basic_string<typename Ptree::key_type::value_type> &key,
+ const typename Ptree::key_type &key,
const Ptree &pt,
int indent,
- const xml_writer_settings<typename Ptree::key_type::value_type> & settings)
+ const xml_writer_settings<typename Ptree::key_type> & settings)
{
-
typedef typename Ptree::key_type::value_type Ch;
- typedef typename std::basic_string<Ch> Str;
+ typedef typename Ptree::key_type Str;
typedef typename Ptree::const_iterator It;
bool want_pretty = settings.indent_count > 0;
@@ -78,10 +79,10 @@ namespace boost { namespace property_tree { namespace xml_parser
bool has_attrs_only = pt.data().empty();
for (It it = pt.begin(), end = pt.end(); it != end; ++it)
{
- if (it->first != xmlattr<Ch>() )
+ if (it->first != xmlattr<Str>() )
{
has_attrs_only = false;
- if (it->first != xmltext<Ch>())
+ if (it->first != xmltext<Str>())
{
has_elements = true;
break;
@@ -113,12 +114,12 @@ namespace boost { namespace property_tree { namespace xml_parser
stream << Ch('<') << key;
// Write attributes
- if (optional<const Ptree &> attribs = pt.get_child_optional(xmlattr<Ch>()))
+ if (optional<const Ptree &> attribs = pt.get_child_optional(xmlattr<Str>()))
for (It it = attribs.get().begin(); it != attribs.get().end(); ++it)
stream << Ch(' ') << it->first << Ch('=')
<< Ch('"')
<< encode_char_entities(
- it->second.template get_value<std::basic_string<Ch> >())
+ it->second.template get_value<Str>())
<< Ch('"');
if ( has_attrs_only )
@@ -142,21 +143,21 @@ namespace boost { namespace property_tree { namespace xml_parser
// Write data text, if present
if (!pt.data().empty())
write_xml_text(stream,
- pt.template get_value<std::basic_string<Ch> >(),
+ pt.template get_value<Str>(),
indent + 1, has_elements && want_pretty, settings);
// Write elements, comments and texts
for (It it = pt.begin(); it != pt.end(); ++it)
{
- if (it->first == xmlattr<Ch>())
+ if (it->first == xmlattr<Str>())
continue;
- else if (it->first == xmlcomment<Ch>())
+ else if (it->first == xmlcomment<Str>())
write_xml_comment(stream,
- it->second.template get_value<std::basic_string<Ch> >(),
+ it->second.template get_value<Str>(),
indent + 1, want_pretty, settings);
- else if (it->first == xmltext<Ch>())
+ else if (it->first == xmltext<Str>())
write_xml_text(stream,
- it->second.template get_value<std::basic_string<Ch> >(),
+ it->second.template get_value<Str>(),
indent + 1, has_elements && want_pretty, settings);
else
write_xml_element(stream, it->first, it->second,
@@ -180,13 +181,12 @@ namespace boost { namespace property_tree { namespace xml_parser
void write_xml_internal(std::basic_ostream<typename Ptree::key_type::value_type> &stream,
const Ptree &pt,
const std::string &filename,
- const xml_writer_settings<typename Ptree::key_type::value_type> & settings)
+ const xml_writer_settings<typename Ptree::key_type> & settings)
{
- typedef typename Ptree::key_type::value_type Ch;
- typedef typename std::basic_string<Ch> Str;
- stream << detail::widen<Ch>("<?xml version=\"1.0\" encoding=\"")
+ typedef typename Ptree::key_type Str;
+ stream << detail::widen<Str>("<?xml version=\"1.0\" encoding=\"")
<< settings.encoding
- << detail::widen<Ch>("\"?>\n");
+ << detail::widen<Str>("\"?>\n");
write_xml_element(stream, Str(), pt, -1, settings);
if (!stream)
BOOST_PROPERTY_TREE_THROW(xml_parser_error("write error", filename, 0));
diff --git a/3party/boost/boost/property_tree/detail/xml_parser_writer_settings.hpp b/3party/boost/boost/property_tree/detail/xml_parser_writer_settings.hpp
index f22d85e8a4..9b14a5d723 100644
--- a/3party/boost/boost/property_tree/detail/xml_parser_writer_settings.hpp
+++ b/3party/boost/boost/property_tree/detail/xml_parser_writer_settings.hpp
@@ -18,10 +18,11 @@ namespace boost { namespace property_tree { namespace xml_parser
{
// Naively convert narrow string to another character type
- template<class Ch>
- std::basic_string<Ch> widen(const char *text)
+ template<class Str>
+ Str widen(const char *text)
{
- std::basic_string<Ch> result;
+ typedef typename Str::value_type Ch;
+ Str result;
while (*text)
{
result += Ch(*text);
@@ -31,13 +32,14 @@ namespace boost { namespace property_tree { namespace xml_parser
}
//! Xml writer settings. The default settings lead to no pretty printing.
- template<class Ch>
+ template<class Str>
class xml_writer_settings
{
+ typedef typename Str::value_type Ch;
public:
xml_writer_settings(Ch inchar = Ch(' '),
- typename std::basic_string<Ch>::size_type incount = 0,
- const std::basic_string<Ch> &enc = widen<Ch>("utf-8"))
+ typename Str::size_type incount = 0,
+ const Str &enc = widen<Str>("utf-8"))
: indent_char(inchar)
, indent_count(incount)
, encoding(enc)
@@ -45,16 +47,16 @@ namespace boost { namespace property_tree { namespace xml_parser
}
Ch indent_char;
- typename std::basic_string<Ch>::size_type indent_count;
- std::basic_string<Ch> encoding;
+ typename Str::size_type indent_count;
+ Str encoding;
};
- template <class Ch>
- xml_writer_settings<Ch> xml_writer_make_settings(Ch indent_char = Ch(' '),
- typename std::basic_string<Ch>::size_type indent_count = 0,
- const std::basic_string<Ch> &encoding = widen<Ch>("utf-8"))
+ template <class Str>
+ xml_writer_settings<Str> xml_writer_make_settings(typename Str::value_type indent_char = (typename Str::value_type)(' '),
+ typename Str::size_type indent_count = 0,
+ const Str &encoding = widen<Str>("utf-8"))
{
- return xml_writer_settings<Ch>(indent_char, indent_count, encoding);
+ return xml_writer_settings<Str>(indent_char, indent_count, encoding);
}
} } }
diff --git a/3party/boost/boost/property_tree/stream_translator.hpp b/3party/boost/boost/property_tree/stream_translator.hpp
index c7fabfa696..75b9b526fa 100644
--- a/3party/boost/boost/property_tree/stream_translator.hpp
+++ b/3party/boost/boost/property_tree/stream_translator.hpp
@@ -140,6 +140,7 @@ namespace boost { namespace property_tree
i < (std::numeric_limits<signed char>::min)())
{
s.clear(); // guarantees eof to be unset
+ e = 0;
return;
}
e = (signed char)i;
@@ -161,6 +162,7 @@ namespace boost { namespace property_tree
// out of range?
if(i > (std::numeric_limits<unsigned char>::max)()) {
s.clear(); // guarantees eof to be unset
+ e = 0;
return;
}
e = (unsigned char)i;
diff --git a/3party/boost/boost/property_tree/string_path.hpp b/3party/boost/boost/property_tree/string_path.hpp
index d4bc686dc6..3ddcfb2033 100644
--- a/3party/boost/boost/property_tree/string_path.hpp
+++ b/3party/boost/boost/property_tree/string_path.hpp
@@ -61,7 +61,7 @@ namespace boost { namespace property_tree
#ifndef BOOST_NO_STD_WSTRING
inline std::string dump_sequence(const std::wstring &s)
{
- return narrow(s.c_str());
+ return narrow<std::string>(s.c_str());
}
#endif
}
diff --git a/3party/boost/boost/property_tree/xml_parser.hpp b/3party/boost/boost/property_tree/xml_parser.hpp
index 4f36e9a0be..0544c55544 100644
--- a/3party/boost/boost/property_tree/xml_parser.hpp
+++ b/3party/boost/boost/property_tree/xml_parser.hpp
@@ -102,9 +102,9 @@ namespace boost { namespace property_tree { namespace xml_parser
> &stream,
const Ptree &pt,
const xml_writer_settings<
- typename Ptree::key_type::value_type
+ typename Ptree::key_type
> & settings = xml_writer_settings<
- typename Ptree::key_type::value_type>() )
+ typename Ptree::key_type>() )
{
write_xml_internal(stream, pt, std::string(), settings);
}
@@ -125,9 +125,8 @@ namespace boost { namespace property_tree { namespace xml_parser
const Ptree &pt,
const std::locale &loc = std::locale(),
const xml_writer_settings<
- typename Ptree::key_type::value_type
- > & settings = xml_writer_settings<
- typename Ptree::key_type::value_type>())
+ typename Ptree::key_type
+ > & settings = xml_writer_settings<typename Ptree::key_type>())
{
std::basic_ofstream<typename Ptree::key_type::value_type>
stream(filename.c_str());
diff --git a/3party/boost/boost/proto/detail/as_expr.hpp b/3party/boost/boost/proto/detail/as_expr.hpp
index fb46576b89..b7e5c30c05 100644
--- a/3party/boost/boost/proto/detail/as_expr.hpp
+++ b/3party/boost/boost/proto/detail/as_expr.hpp
@@ -17,7 +17,7 @@
#include <boost/proto/proto_fwd.hpp>
#include <boost/proto/args.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -180,7 +180,7 @@ namespace boost { namespace proto { namespace detail
}}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/detail/as_lvalue.hpp b/3party/boost/boost/proto/detail/as_lvalue.hpp
index 8ff9091b28..df4dacbe78 100644
--- a/3party/boost/boost/proto/detail/as_lvalue.hpp
+++ b/3party/boost/boost/proto/detail/as_lvalue.hpp
@@ -11,7 +11,7 @@
#include <boost/proto/proto_fwd.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -36,7 +36,7 @@ namespace boost { namespace proto
}
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/detail/decltype.hpp b/3party/boost/boost/proto/detail/decltype.hpp
index c2b74ae72d..58820713b0 100644
--- a/3party/boost/boost/proto/detail/decltype.hpp
+++ b/3party/boost/boost/proto/detail/decltype.hpp
@@ -36,7 +36,7 @@
#include <boost/proto/proto_fwd.hpp>
#include <boost/proto/detail/any.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -446,7 +446,7 @@ namespace boost { namespace proto
} // namespace detail
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/detail/dont_care.hpp b/3party/boost/boost/proto/detail/dont_care.hpp
index 262340e2b4..578af7cacb 100644
--- a/3party/boost/boost/proto/detail/dont_care.hpp
+++ b/3party/boost/boost/proto/detail/dont_care.hpp
@@ -11,7 +11,7 @@
#include <boost/config.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -27,7 +27,7 @@ namespace boost { namespace proto
}
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/detail/ignore_unused.hpp b/3party/boost/boost/proto/detail/ignore_unused.hpp
index 6004b83d98..7ca344636a 100644
--- a/3party/boost/boost/proto/detail/ignore_unused.hpp
+++ b/3party/boost/boost/proto/detail/ignore_unused.hpp
@@ -12,7 +12,7 @@
#include <boost/config.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -27,7 +27,7 @@ namespace boost { namespace proto
}
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/detail/pop_front.hpp b/3party/boost/boost/proto/detail/pop_front.hpp
deleted file mode 100644
index 73c053997e..0000000000
--- a/3party/boost/boost/proto/detail/pop_front.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2006 Joel de Guzman
- Copyright (c) 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_FUSION_POP_FRONT_EAH_01_22_2008
-#define BOOST_PROTO_DETAIL_FUSION_POP_FRONT_EAH_01_22_2008
-
-#include <boost/spirit/fusion/sequence/range.hpp>
-#include <boost/spirit/fusion/sequence/begin.hpp>
-#include <boost/spirit/fusion/sequence/end.hpp>
-#include <boost/spirit/fusion/iterator/next.hpp>
-
-namespace boost { namespace fusion
-{
- namespace meta
- {
- template <typename Sequence>
- struct pop_front
- {
- typedef
- range<
- typename next<
- typename begin<Sequence>::type
- >::type
- , typename end<Sequence>::type
- >
- type;
- };
- }
-
- template <typename Sequence>
- inline typename meta::pop_front<Sequence const>::type
- pop_front(Sequence const& seq)
- {
- typedef typename meta::pop_front<Sequence const>::type result;
- return result(fusion::next(fusion::begin(seq)), fusion::end(seq));
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/proto/detail/reverse.hpp b/3party/boost/boost/proto/detail/reverse.hpp
deleted file mode 100644
index 64ac6ba4a3..0000000000
--- a/3party/boost/boost/proto/detail/reverse.hpp
+++ /dev/null
@@ -1,189 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2006 Joel de Guzman
- Copyright (c) 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_FUSION_REVERSE_EAH_01_22_2008
-#define BOOST_PROTO_DETAIL_FUSION_REVERSE_EAH_01_22_2008
-
-#include <boost/spirit/fusion/detail/access.hpp>
-#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
-#include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
-#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
-#include <boost/spirit/fusion/iterator/next.hpp>
-#include <boost/spirit/fusion/iterator/prior.hpp>
-#include <boost/spirit/fusion/iterator/deref.hpp>
-#include <boost/spirit/fusion/iterator/value_of.hpp>
-#include <boost/spirit/fusion/sequence/begin.hpp>
-#include <boost/spirit/fusion/sequence/end.hpp>
-
-namespace boost { namespace fusion
-{
- struct reverse_view_tag;
- struct reverse_view_iterator_tag;
-
- template <typename First>
- struct reverse_view_iterator
- : iterator_base<reverse_view_iterator<First> >
- {
- typedef as_fusion_iterator<First> converter;
- typedef typename converter::type first_type;
- typedef reverse_view_iterator_tag tag;
-
- reverse_view_iterator(First const& first)
- : first(converter::convert(first)) {}
-
- first_type first;
- };
-
- template <typename Sequence>
- struct reverse_view : sequence_base<reverse_view<Sequence> >
- {
- typedef as_fusion_sequence<Sequence> seq_converter;
- typedef typename seq_converter::type seq;
-
- typedef reverse_view_tag tag;
- typedef typename meta::begin<seq>::type first_type;
- typedef typename meta::end<seq>::type last_type;
-
- reverse_view(Sequence& seq)
- : first(fusion::begin(seq))
- , last(fusion::end(seq))
- {}
-
- first_type first;
- last_type last;
- };
-
- namespace meta
- {
- template <>
- struct deref_impl<reverse_view_iterator_tag>
- {
- template <typename Iterator>
- struct apply
- {
- typedef typename
- meta::deref<
- typename meta::prior<
- typename Iterator::first_type
- >::type
- >::type
- type;
-
- static type
- call(Iterator const& i)
- {
- return *fusion::prior(i.first);
- }
- };
- };
-
- template <>
- struct prior_impl<reverse_view_iterator_tag>
- {
- template <typename Iterator>
- struct apply
- {
- typedef typename Iterator::first_type first_type;
- typedef typename next_impl<typename first_type::tag>::
- template apply<first_type>
- wrapped;
-
- typedef reverse_view_iterator<typename wrapped::type> type;
-
- static type
- call(Iterator const& i)
- {
- return type(wrapped::call(i.first));
- }
- };
- };
-
- template <>
- struct next_impl<reverse_view_iterator_tag>
- {
- template <typename Iterator>
- struct apply
- {
- typedef typename Iterator::first_type first_type;
- typedef typename prior_impl<typename first_type::tag>::
- template apply<first_type>
- wrapped;
-
- typedef reverse_view_iterator<typename wrapped::type> type;
-
- static type
- call(Iterator const& i)
- {
- return type(wrapped::call(i.first));
- }
- };
- };
-
- template <>
- struct value_impl<reverse_view_iterator_tag>
- {
- template <typename Iterator>
- struct apply
- {
- typedef typename
- meta::value_of<
- typename meta::prior<
- typename Iterator::first_type
- >::type
- >::type
- type;
- };
- };
-
- template <>
- struct begin_impl<reverse_view_tag>
- {
- template <typename Sequence>
- struct apply
- {
- typedef reverse_view_iterator<typename Sequence::last_type> type;
-
- static type
- call(Sequence const& s)
- {
- return type(s.last);
- }
- };
- };
-
- template <>
- struct end_impl<reverse_view_tag>
- {
- template <typename Sequence>
- struct apply
- {
- typedef reverse_view_iterator<typename Sequence::first_type> type;
-
- static type
- call(Sequence const& s)
- {
- return type(s.first);
- }
- };
- };
-
- template <typename Sequence>
- struct reverse
- {
- typedef reverse_view<Sequence> type;
- };
- }
-
- template <typename Sequence>
- inline reverse_view<Sequence const>
- reverse(Sequence const& view)
- {
- return reverse_view<Sequence const>(view);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/proto/domain.hpp b/3party/boost/boost/proto/domain.hpp
index 44bc45d36b..33dabeba49 100644
--- a/3party/boost/boost/proto/domain.hpp
+++ b/3party/boost/boost/proto/domain.hpp
@@ -18,7 +18,7 @@
#include <boost/proto/detail/as_expr.hpp>
#include <boost/proto/detail/deduce_domain.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -330,7 +330,7 @@ namespace boost { namespace proto
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/expr.hpp b/3party/boost/boost/proto/expr.hpp
index e75ee16711..1bd64985d8 100644
--- a/3party/boost/boost/proto/expr.hpp
+++ b/3party/boost/boost/proto/expr.hpp
@@ -26,7 +26,7 @@
#include <boost/proto/args.hpp>
#include <boost/proto/traits.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4510) // default constructor could not be generated
# pragma warning(disable : 4512) // assignment operator could not be generated
@@ -156,7 +156,7 @@ namespace boost { namespace proto
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/extends.hpp b/3party/boost/boost/proto/extends.hpp
index 360dbe707c..1fb0429050 100644
--- a/3party/boost/boost/proto/extends.hpp
+++ b/3party/boost/boost/proto/extends.hpp
@@ -34,7 +34,7 @@
#include <boost/proto/generate.hpp>
#include <boost/proto/detail/remove_typename.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -640,7 +640,7 @@ namespace boost { namespace proto
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/generate.hpp b/3party/boost/boost/proto/generate.hpp
index 92a47c432a..476274118e 100644
--- a/3party/boost/boost/proto/generate.hpp
+++ b/3party/boost/boost/proto/generate.hpp
@@ -24,7 +24,7 @@
#include <boost/proto/proto_fwd.hpp>
#include <boost/proto/args.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -463,7 +463,7 @@ namespace boost
#endif
}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/make_expr.hpp b/3party/boost/boost/proto/make_expr.hpp
index 08ef2f5ce1..720c1bdcbd 100644
--- a/3party/boost/boost/proto/make_expr.hpp
+++ b/3party/boost/boost/proto/make_expr.hpp
@@ -45,7 +45,7 @@
#include <boost/proto/detail/poly_function.hpp>
#include <boost/proto/detail/deprecated.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
@@ -502,7 +502,7 @@ namespace boost { namespace proto
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/matches.hpp b/3party/boost/boost/proto/matches.hpp
index 38ff962527..09bb4b9d20 100644
--- a/3party/boost/boost/proto/matches.hpp
+++ b/3party/boost/boost/proto/matches.hpp
@@ -43,7 +43,7 @@
#include <boost/proto/transform/when.hpp>
#include <boost/proto/transform/impl.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable:4305) // 'specialization' : truncation from 'const int' to 'bool'
#endif
@@ -940,7 +940,7 @@ namespace boost { namespace proto
#undef BOOST_PROTO_LOGICAL_typename_G
#undef BOOST_PROTO_LOGICAL_G
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/operators.hpp b/3party/boost/boost/proto/operators.hpp
index 2cf240db02..7d4195ce1e 100644
--- a/3party/boost/boost/proto/operators.hpp
+++ b/3party/boost/boost/proto/operators.hpp
@@ -21,7 +21,7 @@
#include <boost/proto/generate.hpp>
#include <boost/proto/make_expr.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -371,7 +371,7 @@ namespace boost { namespace proto
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/proto_fwd.hpp b/3party/boost/boost/proto/proto_fwd.hpp
index a3d91788bb..a1a25987f1 100644
--- a/3party/boost/boost/proto/proto_fwd.hpp
+++ b/3party/boost/boost/proto/proto_fwd.hpp
@@ -123,7 +123,7 @@
# define BOOST_PROTO_EXTENDED_TEMPLATE_PARAMETERS_MATCHING
#endif
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# define BOOST_PROTO_DISABLE_MSVC_C4522 __pragma(warning(disable : 4522)) // 'class' : multiple assignment operators specified
# define BOOST_PROTO_DISABLE_MSVC_C4714 __pragma(warning(disable : 4714)) // function 'xxx' marked as __forceinline not inlined
#else
diff --git a/3party/boost/boost/proto/traits.hpp b/3party/boost/boost/proto/traits.hpp
index 5d12d6e51a..f1a83fca03 100644
--- a/3party/boost/boost/proto/traits.hpp
+++ b/3party/boost/boost/proto/traits.hpp
@@ -32,7 +32,7 @@
#include <boost/proto/domain.hpp>
#include <boost/proto/transform/pass_through.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# if BOOST_WORKAROUND( BOOST_MSVC, >= 1400 )
# pragma warning(disable: 4180) // warning C4180: qualifier applied to function type has no meaning; ignored
@@ -1251,7 +1251,7 @@ namespace boost { namespace proto
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/transform/call.hpp b/3party/boost/boost/proto/transform/call.hpp
index 7d87c906d6..1e050113c0 100644
--- a/3party/boost/boost/proto/transform/call.hpp
+++ b/3party/boost/boost/proto/transform/call.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_PROTO_TRANSFORM_CALL_HPP_EAN_11_02_2007
#define BOOST_PROTO_TRANSFORM_CALL_HPP_EAN_11_02_2007
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable: 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -394,7 +394,7 @@ namespace boost { namespace proto
}} // namespace boost::proto
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/transform/detail/pack.hpp b/3party/boost/boost/proto/transform/detail/pack.hpp
index 863e7a02c4..20a8ce3149 100644
--- a/3party/boost/boost/proto/transform/detail/pack.hpp
+++ b/3party/boost/boost/proto/transform/detail/pack.hpp
@@ -26,7 +26,7 @@
#include <boost/type_traits/is_same.hpp>
#include <boost/proto/proto_fwd.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable: 4348) // redefinition of default parameter
#endif
@@ -90,7 +90,7 @@ namespace boost { namespace proto
}
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/transform/impl.hpp b/3party/boost/boost/proto/transform/impl.hpp
index 059c4092a2..5490086bd9 100644
--- a/3party/boost/boost/proto/transform/impl.hpp
+++ b/3party/boost/boost/proto/transform/impl.hpp
@@ -17,7 +17,7 @@
#include <boost/proto/detail/any.hpp>
#include <boost/proto/detail/static_const.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -345,7 +345,7 @@ namespace boost { namespace proto
}} // namespace boost::proto
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/transform/make.hpp b/3party/boost/boost/proto/transform/make.hpp
index 140ca1d7b6..565254302d 100644
--- a/3party/boost/boost/proto/transform/make.hpp
+++ b/3party/boost/boost/proto/transform/make.hpp
@@ -33,7 +33,7 @@
#include <boost/proto/detail/as_lvalue.hpp>
#include <boost/proto/detail/ignore_unused.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -277,7 +277,7 @@ namespace boost { namespace proto
}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/transform/pass_through.hpp b/3party/boost/boost/proto/transform/pass_through.hpp
index 9c43008966..bdd152e705 100644
--- a/3party/boost/boost/proto/transform/pass_through.hpp
+++ b/3party/boost/boost/proto/transform/pass_through.hpp
@@ -24,7 +24,7 @@
#include <boost/proto/transform/impl.hpp>
#include <boost/proto/detail/ignore_unused.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -138,7 +138,7 @@ namespace boost { namespace proto
}} // namespace boost::proto
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/proto/transform/when.hpp b/3party/boost/boost/proto/transform/when.hpp
index d1defb81b2..78ffa9e99d 100644
--- a/3party/boost/boost/proto/transform/when.hpp
+++ b/3party/boost/boost/proto/transform/when.hpp
@@ -24,7 +24,7 @@
#include <boost/proto/transform/impl.hpp>
#include <boost/proto/transform/env.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
@@ -260,7 +260,7 @@ namespace boost { namespace proto
}} // namespace boost::proto
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/ptr_container/detail/default_deleter.hpp b/3party/boost/boost/ptr_container/detail/default_deleter.hpp
index 44647990cb..44647990cb 100644..100755
--- a/3party/boost/boost/ptr_container/detail/default_deleter.hpp
+++ b/3party/boost/boost/ptr_container/detail/default_deleter.hpp
diff --git a/3party/boost/boost/ptr_container/detail/is_convertible.hpp b/3party/boost/boost/ptr_container/detail/is_convertible.hpp
index fd17781925..fd17781925 100644..100755
--- a/3party/boost/boost/ptr_container/detail/is_convertible.hpp
+++ b/3party/boost/boost/ptr_container/detail/is_convertible.hpp
diff --git a/3party/boost/boost/ptr_container/detail/move.hpp b/3party/boost/boost/ptr_container/detail/move.hpp
index bf07d5f563..bf07d5f563 100644..100755
--- a/3party/boost/boost/ptr_container/detail/move.hpp
+++ b/3party/boost/boost/ptr_container/detail/move.hpp
diff --git a/3party/boost/boost/ptr_container/detail/scoped_deleter.hpp b/3party/boost/boost/ptr_container/detail/scoped_deleter.hpp
index a2e7aba2ea..a2e7aba2ea 100644..100755
--- a/3party/boost/boost/ptr_container/detail/scoped_deleter.hpp
+++ b/3party/boost/boost/ptr_container/detail/scoped_deleter.hpp
diff --git a/3party/boost/boost/ptr_container/detail/static_move_ptr.hpp b/3party/boost/boost/ptr_container/detail/static_move_ptr.hpp
index ba2b9af746..6af3461a36 100644
--- a/3party/boost/boost/ptr_container/detail/static_move_ptr.hpp
+++ b/3party/boost/boost/ptr_container/detail/static_move_ptr.hpp
@@ -5,7 +5,7 @@
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
// Implementation of the move_ptr from the "Move Proposal"
-// (http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2002/n1377.htm)
+// (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1377.htm)
// enhanced to support custom deleters and safe boolean conversions.
//
// The implementation is based on an implementation by Daniel Wallin, at
diff --git a/3party/boost/boost/ptr_container/detail/throw_exception.hpp b/3party/boost/boost/ptr_container/detail/throw_exception.hpp
index bb467f2bd9..bb467f2bd9 100644..100755
--- a/3party/boost/boost/ptr_container/detail/throw_exception.hpp
+++ b/3party/boost/boost/ptr_container/detail/throw_exception.hpp
diff --git a/3party/boost/boost/ptr_container/detail/void_ptr_iterator.hpp b/3party/boost/boost/ptr_container/detail/void_ptr_iterator.hpp
index 937ffb4aa2..937ffb4aa2 100644..100755
--- a/3party/boost/boost/ptr_container/detail/void_ptr_iterator.hpp
+++ b/3party/boost/boost/ptr_container/detail/void_ptr_iterator.hpp
diff --git a/3party/boost/boost/ptr_container/exception.hpp b/3party/boost/boost/ptr_container/exception.hpp
index d9a5ffeaf5..d9a5ffeaf5 100644..100755
--- a/3party/boost/boost/ptr_container/exception.hpp
+++ b/3party/boost/boost/ptr_container/exception.hpp
diff --git a/3party/boost/boost/ptr_container/nullable.hpp b/3party/boost/boost/ptr_container/nullable.hpp
index b3e4603d1e..b3e4603d1e 100644..100755
--- a/3party/boost/boost/ptr_container/nullable.hpp
+++ b/3party/boost/boost/ptr_container/nullable.hpp
diff --git a/3party/boost/boost/python/arg_from_python.hpp b/3party/boost/boost/python/arg_from_python.hpp
index 05611edbbd..05611edbbd 100644..100755
--- a/3party/boost/boost/python/arg_from_python.hpp
+++ b/3party/boost/boost/python/arg_from_python.hpp
diff --git a/3party/boost/boost/python/base_type_traits.hpp b/3party/boost/boost/python/base_type_traits.hpp
index e1c6a4843f..e1c6a4843f 100644..100755
--- a/3party/boost/boost/python/base_type_traits.hpp
+++ b/3party/boost/boost/python/base_type_traits.hpp
diff --git a/3party/boost/boost/python/borrowed.hpp b/3party/boost/boost/python/borrowed.hpp
index fd2716bfbd..fd2716bfbd 100644..100755
--- a/3party/boost/boost/python/borrowed.hpp
+++ b/3party/boost/boost/python/borrowed.hpp
diff --git a/3party/boost/boost/python/cast.hpp b/3party/boost/boost/python/cast.hpp
index 31c61dbf82..31c61dbf82 100644..100755
--- a/3party/boost/boost/python/cast.hpp
+++ b/3party/boost/boost/python/cast.hpp
diff --git a/3party/boost/boost/python/converter/arg_from_python.hpp b/3party/boost/boost/python/converter/arg_from_python.hpp
index e2edce7e1c..e2edce7e1c 100644..100755
--- a/3party/boost/boost/python/converter/arg_from_python.hpp
+++ b/3party/boost/boost/python/converter/arg_from_python.hpp
diff --git a/3party/boost/boost/python/converter/arg_to_python.hpp b/3party/boost/boost/python/converter/arg_to_python.hpp
index 3a19ec4395..3a19ec4395 100644..100755
--- a/3party/boost/boost/python/converter/arg_to_python.hpp
+++ b/3party/boost/boost/python/converter/arg_to_python.hpp
diff --git a/3party/boost/boost/python/converter/arg_to_python_base.hpp b/3party/boost/boost/python/converter/arg_to_python_base.hpp
index d85b302e48..d85b302e48 100644..100755
--- a/3party/boost/boost/python/converter/arg_to_python_base.hpp
+++ b/3party/boost/boost/python/converter/arg_to_python_base.hpp
diff --git a/3party/boost/boost/python/converter/context_result_converter.hpp b/3party/boost/boost/python/converter/context_result_converter.hpp
index beb7e9f098..beb7e9f098 100644..100755
--- a/3party/boost/boost/python/converter/context_result_converter.hpp
+++ b/3party/boost/boost/python/converter/context_result_converter.hpp
diff --git a/3party/boost/boost/python/converter/object_manager.hpp b/3party/boost/boost/python/converter/object_manager.hpp
index 84e44d475b..84e44d475b 100644..100755
--- a/3party/boost/boost/python/converter/object_manager.hpp
+++ b/3party/boost/boost/python/converter/object_manager.hpp
diff --git a/3party/boost/boost/python/converter/pytype_function.hpp b/3party/boost/boost/python/converter/pytype_function.hpp
index 95d0f66d46..95d0f66d46 100644..100755
--- a/3party/boost/boost/python/converter/pytype_function.hpp
+++ b/3party/boost/boost/python/converter/pytype_function.hpp
diff --git a/3party/boost/boost/python/converter/return_from_python.hpp b/3party/boost/boost/python/converter/return_from_python.hpp
index 5db9748545..5db9748545 100644..100755
--- a/3party/boost/boost/python/converter/return_from_python.hpp
+++ b/3party/boost/boost/python/converter/return_from_python.hpp
diff --git a/3party/boost/boost/python/def_visitor.hpp b/3party/boost/boost/python/def_visitor.hpp
index 9c8907cd6f..9c8907cd6f 100644..100755
--- a/3party/boost/boost/python/def_visitor.hpp
+++ b/3party/boost/boost/python/def_visitor.hpp
diff --git a/3party/boost/boost/python/detail/borrowed_ptr.hpp b/3party/boost/boost/python/detail/borrowed_ptr.hpp
index b88457b83a..b88457b83a 100644..100755
--- a/3party/boost/boost/python/detail/borrowed_ptr.hpp
+++ b/3party/boost/boost/python/detail/borrowed_ptr.hpp
diff --git a/3party/boost/boost/python/detail/convertible.hpp b/3party/boost/boost/python/detail/convertible.hpp
index 2ce552f5f7..2ce552f5f7 100644..100755
--- a/3party/boost/boost/python/detail/convertible.hpp
+++ b/3party/boost/boost/python/detail/convertible.hpp
diff --git a/3party/boost/boost/python/detail/copy_ctor_mutates_rhs.hpp b/3party/boost/boost/python/detail/copy_ctor_mutates_rhs.hpp
index 4ca8d03911..4ca8d03911 100644..100755
--- a/3party/boost/boost/python/detail/copy_ctor_mutates_rhs.hpp
+++ b/3party/boost/boost/python/detail/copy_ctor_mutates_rhs.hpp
diff --git a/3party/boost/boost/python/detail/def_helper_fwd.hpp b/3party/boost/boost/python/detail/def_helper_fwd.hpp
index 31c22e97a3..31c22e97a3 100644..100755
--- a/3party/boost/boost/python/detail/def_helper_fwd.hpp
+++ b/3party/boost/boost/python/detail/def_helper_fwd.hpp
diff --git a/3party/boost/boost/python/detail/enable_if.hpp b/3party/boost/boost/python/detail/enable_if.hpp
index 46a1d532b3..46a1d532b3 100644..100755
--- a/3party/boost/boost/python/detail/enable_if.hpp
+++ b/3party/boost/boost/python/detail/enable_if.hpp
diff --git a/3party/boost/boost/python/detail/force_instantiate.hpp b/3party/boost/boost/python/detail/force_instantiate.hpp
index 63e2874945..63e2874945 100644..100755
--- a/3party/boost/boost/python/detail/force_instantiate.hpp
+++ b/3party/boost/boost/python/detail/force_instantiate.hpp
diff --git a/3party/boost/boost/python/detail/is_shared_ptr.hpp b/3party/boost/boost/python/detail/is_shared_ptr.hpp
index 547af3f1cb..547af3f1cb 100644..100755
--- a/3party/boost/boost/python/detail/is_shared_ptr.hpp
+++ b/3party/boost/boost/python/detail/is_shared_ptr.hpp
diff --git a/3party/boost/boost/python/detail/is_wrapper.hpp b/3party/boost/boost/python/detail/is_wrapper.hpp
index d7bce7b627..d7bce7b627 100644..100755
--- a/3party/boost/boost/python/detail/is_wrapper.hpp
+++ b/3party/boost/boost/python/detail/is_wrapper.hpp
diff --git a/3party/boost/boost/python/detail/nullary_function_adaptor.hpp b/3party/boost/boost/python/detail/nullary_function_adaptor.hpp
index 9dcc434f8e..9dcc434f8e 100644..100755
--- a/3party/boost/boost/python/detail/nullary_function_adaptor.hpp
+++ b/3party/boost/boost/python/detail/nullary_function_adaptor.hpp
diff --git a/3party/boost/boost/python/detail/prefix.hpp b/3party/boost/boost/python/detail/prefix.hpp
index 8b34ed7701..8b34ed7701 100644..100755
--- a/3party/boost/boost/python/detail/prefix.hpp
+++ b/3party/boost/boost/python/detail/prefix.hpp
diff --git a/3party/boost/boost/python/detail/python_type.hpp b/3party/boost/boost/python/detail/python_type.hpp
index f7630c175a..f7630c175a 100644..100755
--- a/3party/boost/boost/python/detail/python_type.hpp
+++ b/3party/boost/boost/python/detail/python_type.hpp
diff --git a/3party/boost/boost/python/detail/sfinae.hpp b/3party/boost/boost/python/detail/sfinae.hpp
index 6281875111..6281875111 100644..100755
--- a/3party/boost/boost/python/detail/sfinae.hpp
+++ b/3party/boost/boost/python/detail/sfinae.hpp
diff --git a/3party/boost/boost/python/detail/unwind_type.hpp b/3party/boost/boost/python/detail/unwind_type.hpp
index 9a997c9dbd..9a997c9dbd 100644..100755
--- a/3party/boost/boost/python/detail/unwind_type.hpp
+++ b/3party/boost/boost/python/detail/unwind_type.hpp
diff --git a/3party/boost/boost/python/detail/unwrap_type_id.hpp b/3party/boost/boost/python/detail/unwrap_type_id.hpp
index 96c1f53013..96c1f53013 100644..100755
--- a/3party/boost/boost/python/detail/unwrap_type_id.hpp
+++ b/3party/boost/boost/python/detail/unwrap_type_id.hpp
diff --git a/3party/boost/boost/python/detail/unwrap_wrapper.hpp b/3party/boost/boost/python/detail/unwrap_wrapper.hpp
index 95bc233a72..95bc233a72 100644..100755
--- a/3party/boost/boost/python/detail/unwrap_wrapper.hpp
+++ b/3party/boost/boost/python/detail/unwrap_wrapper.hpp
diff --git a/3party/boost/boost/python/detail/value_arg.hpp b/3party/boost/boost/python/detail/value_arg.hpp
index 747588d6fd..747588d6fd 100644..100755
--- a/3party/boost/boost/python/detail/value_arg.hpp
+++ b/3party/boost/boost/python/detail/value_arg.hpp
diff --git a/3party/boost/boost/python/detail/wrapper_base.hpp b/3party/boost/boost/python/detail/wrapper_base.hpp
index e5b93aa449..e5b93aa449 100644..100755
--- a/3party/boost/boost/python/detail/wrapper_base.hpp
+++ b/3party/boost/boost/python/detail/wrapper_base.hpp
diff --git a/3party/boost/boost/python/docstring_options.hpp b/3party/boost/boost/python/docstring_options.hpp
index 1914bd51a5..1914bd51a5 100644..100755
--- a/3party/boost/boost/python/docstring_options.hpp
+++ b/3party/boost/boost/python/docstring_options.hpp
diff --git a/3party/boost/boost/python/handle.hpp b/3party/boost/boost/python/handle.hpp
index 461a219ad8..461a219ad8 100644..100755
--- a/3party/boost/boost/python/handle.hpp
+++ b/3party/boost/boost/python/handle.hpp
diff --git a/3party/boost/boost/python/handle_fwd.hpp b/3party/boost/boost/python/handle_fwd.hpp
index 5987ec4fdb..5987ec4fdb 100644..100755
--- a/3party/boost/boost/python/handle_fwd.hpp
+++ b/3party/boost/boost/python/handle_fwd.hpp
diff --git a/3party/boost/boost/python/object.hpp b/3party/boost/boost/python/object.hpp
index 9adec90f64..9adec90f64 100644..100755
--- a/3party/boost/boost/python/object.hpp
+++ b/3party/boost/boost/python/object.hpp
diff --git a/3party/boost/boost/python/object/function_doc_signature.hpp b/3party/boost/boost/python/object/function_doc_signature.hpp
index 4f00cb385a..4f00cb385a 100644..100755
--- a/3party/boost/boost/python/object/function_doc_signature.hpp
+++ b/3party/boost/boost/python/object/function_doc_signature.hpp
diff --git a/3party/boost/boost/python/object/inheritance_query.hpp b/3party/boost/boost/python/object/inheritance_query.hpp
index 916e161f29..916e161f29 100644..100755
--- a/3party/boost/boost/python/object/inheritance_query.hpp
+++ b/3party/boost/boost/python/object/inheritance_query.hpp
diff --git a/3party/boost/boost/python/object/stl_iterator_core.hpp b/3party/boost/boost/python/object/stl_iterator_core.hpp
index 68e0c2441b..68e0c2441b 100644..100755
--- a/3party/boost/boost/python/object/stl_iterator_core.hpp
+++ b/3party/boost/boost/python/object/stl_iterator_core.hpp
diff --git a/3party/boost/boost/python/object_items.hpp b/3party/boost/boost/python/object_items.hpp
index f0761dadbb..f0761dadbb 100644..100755
--- a/3party/boost/boost/python/object_items.hpp
+++ b/3party/boost/boost/python/object_items.hpp
diff --git a/3party/boost/boost/python/object_protocol_core.hpp b/3party/boost/boost/python/object_protocol_core.hpp
index a5bd9afcb4..a5bd9afcb4 100644..100755
--- a/3party/boost/boost/python/object_protocol_core.hpp
+++ b/3party/boost/boost/python/object_protocol_core.hpp
diff --git a/3party/boost/boost/python/other.hpp b/3party/boost/boost/python/other.hpp
index eeece99b7d..eeece99b7d 100644..100755
--- a/3party/boost/boost/python/other.hpp
+++ b/3party/boost/boost/python/other.hpp
diff --git a/3party/boost/boost/python/proxy.hpp b/3party/boost/boost/python/proxy.hpp
index a956eac1cc..a956eac1cc 100644..100755
--- a/3party/boost/boost/python/proxy.hpp
+++ b/3party/boost/boost/python/proxy.hpp
diff --git a/3party/boost/boost/python/pure_virtual.hpp b/3party/boost/boost/python/pure_virtual.hpp
index b3b34ffcdb..b3b34ffcdb 100644..100755
--- a/3party/boost/boost/python/pure_virtual.hpp
+++ b/3party/boost/boost/python/pure_virtual.hpp
diff --git a/3party/boost/boost/python/raw_function.hpp b/3party/boost/boost/python/raw_function.hpp
index 9d9f6b8b1b..9d9f6b8b1b 100644..100755
--- a/3party/boost/boost/python/raw_function.hpp
+++ b/3party/boost/boost/python/raw_function.hpp
diff --git a/3party/boost/boost/python/refcount.hpp b/3party/boost/boost/python/refcount.hpp
index 5ba5433c22..5ba5433c22 100644..100755
--- a/3party/boost/boost/python/refcount.hpp
+++ b/3party/boost/boost/python/refcount.hpp
diff --git a/3party/boost/boost/python/return_arg.hpp b/3party/boost/boost/python/return_arg.hpp
index c36f898d7d..c36f898d7d 100644..100755
--- a/3party/boost/boost/python/return_arg.hpp
+++ b/3party/boost/boost/python/return_arg.hpp
diff --git a/3party/boost/boost/python/self.hpp b/3party/boost/boost/python/self.hpp
index 99ec5b8fbe..99ec5b8fbe 100644..100755
--- a/3party/boost/boost/python/self.hpp
+++ b/3party/boost/boost/python/self.hpp
diff --git a/3party/boost/boost/python/stl_iterator.hpp b/3party/boost/boost/python/stl_iterator.hpp
index 838954879a..838954879a 100644..100755
--- a/3party/boost/boost/python/stl_iterator.hpp
+++ b/3party/boost/boost/python/stl_iterator.hpp
diff --git a/3party/boost/boost/python/wrapper.hpp b/3party/boost/boost/python/wrapper.hpp
index 166c8e2327..166c8e2327 100644..100755
--- a/3party/boost/boost/python/wrapper.hpp
+++ b/3party/boost/boost/python/wrapper.hpp
diff --git a/3party/boost/boost/random.hpp b/3party/boost/boost/random.hpp
index d05f2f3d9c..de0a97d6a9 100644
--- a/3party/boost/boost/random.hpp
+++ b/3party/boost/boost/random.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org/libs/random for documentation.
*
- * $Id: random.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2000-02-18 portability fixes (thanks to Beman Dawes)
diff --git a/3party/boost/boost/random/additive_combine.hpp b/3party/boost/boost/random/additive_combine.hpp
index b4cb63cd57..d786e18473 100644
--- a/3party/boost/boost/random/additive_combine.hpp
+++ b/3party/boost/boost/random/additive_combine.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: additive_combine.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/bernoulli_distribution.hpp b/3party/boost/boost/random/bernoulli_distribution.hpp
index 79d905d698..d66bae4389 100644
--- a/3party/boost/boost/random/bernoulli_distribution.hpp
+++ b/3party/boost/boost/random/bernoulli_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: bernoulli_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/beta_distribution.hpp b/3party/boost/boost/random/beta_distribution.hpp
new file mode 100644
index 0000000000..dabb72bfe2
--- /dev/null
+++ b/3party/boost/boost/random/beta_distribution.hpp
@@ -0,0 +1,184 @@
+/* boost random/beta_distribution.hpp header file
+ *
+ * Copyright Steven Watanabe 2014
+ * 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 most recent version including documentation.
+ *
+ * $Id$
+ */
+
+#ifndef BOOST_RANDOM_BETA_DISTRIBUTION_HPP
+#define BOOST_RANDOM_BETA_DISTRIBUTION_HPP
+
+#include <cassert>
+#include <istream>
+#include <iosfwd>
+#include <boost/random/detail/operators.hpp>
+#include <boost/random/gamma_distribution.hpp>
+
+namespace boost {
+namespace random {
+
+/**
+ * The beta distribution is a real-valued distribution which produces
+ * values in the range [0, 1]. It has two parameters, alpha and beta.
+ *
+ * It has \f$\displaystyle p(x) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha, \beta)}\f$.
+ */
+template<class RealType = double>
+class beta_distribution {
+public:
+ typedef RealType result_type;
+ typedef RealType input_type;
+
+ class param_type {
+ public:
+ typedef beta_distribution distribution_type;
+
+ /**
+ * Constructs a @c param_type from the "alpha" and "beta" parameters
+ * of the distribution.
+ *
+ * Requires: alpha > 0, beta > 0
+ */
+ explicit param_type(RealType alpha_arg = RealType(1.0),
+ RealType beta_arg = RealType(1.0))
+ : _alpha(alpha_arg), _beta(beta_arg)
+ {
+ assert(alpha_arg > 0);
+ assert(beta_arg > 0);
+ }
+
+ /** Returns the "alpha" parameter of the distribtuion. */
+ RealType alpha() const { return _alpha; }
+ /** Returns the "beta" parameter of the distribution. */
+ RealType beta() const { return _beta; }
+
+ /** Writes a @c param_type to a @c std::ostream. */
+ BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm)
+ { os << parm._alpha << ' ' << parm._beta; return os; }
+
+ /** Reads a @c param_type from a @c std::istream. */
+ BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm)
+ { is >> parm._alpha >> std::ws >> parm._beta; return is; }
+
+ /** Returns true if the two sets of parameters are the same. */
+ BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs)
+ { return lhs._alpha == rhs._alpha && lhs._beta == rhs._beta; }
+
+ /** Returns true if the two sets of parameters are the different. */
+ BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type)
+
+ private:
+ RealType _alpha;
+ RealType _beta;
+ };
+
+ /**
+ * Constructs an @c beta_distribution from its "alpha" and "beta" parameters.
+ *
+ * Requires: alpha > 0, beta > 0
+ */
+ explicit beta_distribution(RealType alpha_arg = RealType(1.0),
+ RealType beta_arg = RealType(1.0))
+ : _alpha(alpha_arg), _beta(beta_arg)
+ {
+ assert(alpha_arg > 0);
+ assert(beta_arg > 0);
+ }
+ /** Constructs an @c beta_distribution from its parameters. */
+ explicit beta_distribution(const param_type& parm)
+ : _alpha(parm.alpha()), _beta(parm.beta())
+ {}
+
+ /**
+ * Returns a random variate distributed according to the
+ * beta distribution.
+ */
+ template<class URNG>
+ RealType operator()(URNG& urng) const
+ {
+ RealType a = gamma_distribution<RealType>(_alpha, RealType(1.0))(urng);
+ RealType b = gamma_distribution<RealType>(_beta, RealType(1.0))(urng);
+ return a / (a + b);
+ }
+
+ /**
+ * Returns a random variate distributed accordint to the beta
+ * distribution with parameters specified by @c param.
+ */
+ template<class URNG>
+ RealType operator()(URNG& urng, const param_type& parm) const
+ {
+ return beta_distribution(parm)(urng);
+ }
+
+ /** Returns the "alpha" parameter of the distribution. */
+ RealType alpha() const { return _alpha; }
+ /** Returns the "beta" parameter of the distribution. */
+ RealType beta() const { return _beta; }
+
+ /** Returns the smallest value that the distribution can produce. */
+ RealType min BOOST_PREVENT_MACRO_SUBSTITUTION () const
+ { return RealType(0.0); }
+ /** Returns the largest value that the distribution can produce. */
+ RealType max BOOST_PREVENT_MACRO_SUBSTITUTION () const
+ { return RealType(1.0); }
+
+ /** Returns the parameters of the distribution. */
+ param_type param() const { return param_type(_alpha, _beta); }
+ /** Sets the parameters of the distribution. */
+ void param(const param_type& parm)
+ {
+ _alpha = parm.alpha();
+ _beta = parm.beta();
+ }
+
+ /**
+ * Effects: Subsequent uses of the distribution do not depend
+ * on values produced by any engine prior to invoking reset.
+ */
+ void reset() { }
+
+ /** Writes an @c beta_distribution to a @c std::ostream. */
+ BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, beta_distribution, wd)
+ {
+ os << wd.param();
+ return os;
+ }
+
+ /** Reads an @c beta_distribution from a @c std::istream. */
+ BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, beta_distribution, wd)
+ {
+ param_type parm;
+ if(is >> parm) {
+ wd.param(parm);
+ }
+ return is;
+ }
+
+ /**
+ * Returns true if the two instances of @c beta_distribution will
+ * return identical sequences of values given equal generators.
+ */
+ BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(beta_distribution, lhs, rhs)
+ { return lhs._alpha == rhs._alpha && lhs._beta == rhs._beta; }
+
+ /**
+ * Returns true if the two instances of @c beta_distribution will
+ * return different sequences of values given equal generators.
+ */
+ BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(beta_distribution)
+
+private:
+ RealType _alpha;
+ RealType _beta;
+};
+
+} // namespace random
+} // namespace boost
+
+#endif // BOOST_RANDOM_BETA_DISTRIBUTION_HPP
diff --git a/3party/boost/boost/random/binomial_distribution.hpp b/3party/boost/boost/random/binomial_distribution.hpp
index dbe2784d2a..8c880e855c 100644
--- a/3party/boost/boost/random/binomial_distribution.hpp
+++ b/3party/boost/boost/random/binomial_distribution.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: binomial_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP_INCLUDED
@@ -378,7 +378,19 @@ private:
while(u > r) {
u = u - r;
++x;
- r = ((a/x) - s) * r;
+ RealType r1 = ((a/x) - s) * r;
+ // If r gets too small then the round-off error
+ // becomes a problem. At this point, p(i) is
+ // decreasing exponentially, so if we just call
+ // it 0, it's close enough. Note that the
+ // minimum value of q_n is about 1e-7, so we
+ // may need to be a little careful to make sure that
+ // we don't terminate the first time through the loop
+ // for float. (Hence the test that r is decreasing)
+ if(r1 < std::numeric_limits<RealType>::epsilon() && r1 < r) {
+ break;
+ }
+ r = r1;
}
return x;
}
diff --git a/3party/boost/boost/random/cauchy_distribution.hpp b/3party/boost/boost/random/cauchy_distribution.hpp
index ed673bc933..998e523447 100644
--- a/3party/boost/boost/random/cauchy_distribution.hpp
+++ b/3party/boost/boost/random/cauchy_distribution.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: cauchy_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/chi_squared_distribution.hpp b/3party/boost/boost/random/chi_squared_distribution.hpp
index 9e7d478076..ce63584f2d 100644
--- a/3party/boost/boost/random/chi_squared_distribution.hpp
+++ b/3party/boost/boost/random/chi_squared_distribution.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: chi_squared_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_CHI_SQUARED_DISTRIBUTION_HPP_INCLUDED
diff --git a/3party/boost/boost/random/detail/auto_link.hpp b/3party/boost/boost/random/detail/auto_link.hpp
index 1f30fd56d9..6b180cc71e 100644
--- a/3party/boost/boost/random/detail/auto_link.hpp
+++ b/3party/boost/boost/random/detail/auto_link.hpp
@@ -5,7 +5,7 @@
* accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
- * $Id: auto_link.hpp 60755 2010-03-22 00:45:06Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_DETAIL_AUTO_LINK_HPP
diff --git a/3party/boost/boost/random/detail/config.hpp b/3party/boost/boost/random/detail/config.hpp
index d6bc0ccd07..724ab19452 100644
--- a/3party/boost/boost/random/detail/config.hpp
+++ b/3party/boost/boost/random/detail/config.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: config.hpp 52492 2009-04-19 14:55:57Z steven_watanabe $
+ * $Id$
*/
#include <boost/config.hpp>
diff --git a/3party/boost/boost/random/detail/const_mod.hpp b/3party/boost/boost/random/detail/const_mod.hpp
index 9778f55179..07f4ea7d84 100644
--- a/3party/boost/boost/random/detail/const_mod.hpp
+++ b/3party/boost/boost/random/detail/const_mod.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: const_mod.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/detail/disable_warnings.hpp b/3party/boost/boost/random/detail/disable_warnings.hpp
index f3ade5ec8d..d875004c44 100644
--- a/3party/boost/boost/random/detail/disable_warnings.hpp
+++ b/3party/boost/boost/random/detail/disable_warnings.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: disable_warnings.hpp 60755 2010-03-22 00:45:06Z steven_watanabe $
+ * $Id$
*
*/
@@ -21,3 +21,8 @@
#pragma warning(disable:4127)
#pragma warning(disable:4724)
#endif
+
+#if defined(BOOST_GCC) && BOOST_GCC >= 40600
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wlogical-op"
+#endif
diff --git a/3party/boost/boost/random/detail/enable_warnings.hpp b/3party/boost/boost/random/detail/enable_warnings.hpp
index 26184ea55b..24f3bb3f58 100644
--- a/3party/boost/boost/random/detail/enable_warnings.hpp
+++ b/3party/boost/boost/random/detail/enable_warnings.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: enable_warnings.hpp 58649 2010-01-02 21:23:17Z steven_watanabe $
+ * $Id$
*
*/
@@ -16,3 +16,7 @@
#ifdef BOOST_MSVC
#pragma warning(pop)
#endif
+
+#if defined(BOOST_GCC) && BOOST_GCC >= 40600
+#pragma GCC diagnostic pop
+#endif
diff --git a/3party/boost/boost/random/detail/generator_bits.hpp b/3party/boost/boost/random/detail/generator_bits.hpp
index 44b4248b2f..05276142cb 100644
--- a/3party/boost/boost/random/detail/generator_bits.hpp
+++ b/3party/boost/boost/random/detail/generator_bits.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: generator_bits.hpp 72951 2011-07-07 04:57:37Z steven_watanabe $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/detail/generator_seed_seq.hpp b/3party/boost/boost/random/detail/generator_seed_seq.hpp
index 6aaf98f577..7e13483464 100644
--- a/3party/boost/boost/random/detail/generator_seed_seq.hpp
+++ b/3party/boost/boost/random/detail/generator_seed_seq.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: generator_seed_seq.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/detail/integer_log2.hpp b/3party/boost/boost/random/detail/integer_log2.hpp
index 500f5cf572..248243a4b2 100644
--- a/3party/boost/boost/random/detail/integer_log2.hpp
+++ b/3party/boost/boost/random/detail/integer_log2.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: integer_log2.hpp 83381 2013-03-09 22:55:05Z eric_niebler $
+ * $Id$
*
*/
@@ -27,7 +27,7 @@ namespace detail {
#elif defined(BOOST_MSVC)
#define BOOST_RANDOM_DETAIL_CONSTEXPR __forceinline
#elif defined(__GNUC__) && __GNUC__ >= 4
-#define BOOST_RANDOM_DETAIL_CONSTEXPR inline __attribute__((const)) __attribute__((always_inline))
+#define BOOST_RANDOM_DETAIL_CONSTEXPR inline __attribute__((__const__)) __attribute__((__always_inline__))
#else
#define BOOST_RANDOM_DETAIL_CONSTEXPR inline
#endif
diff --git a/3party/boost/boost/random/detail/large_arithmetic.hpp b/3party/boost/boost/random/detail/large_arithmetic.hpp
index 24177dcdda..66f6b4e615 100644
--- a/3party/boost/boost/random/detail/large_arithmetic.hpp
+++ b/3party/boost/boost/random/detail/large_arithmetic.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: large_arithmetic.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_DETAIL_LARGE_ARITHMETIC_HPP
@@ -31,9 +31,9 @@ struct div_t {
inline div_t muldivmod(boost::uintmax_t a, boost::uintmax_t b, boost::uintmax_t m)
{
- static const int bits =
+ const int bits =
::std::numeric_limits< ::boost::uintmax_t>::digits / 2;
- static const ::boost::uintmax_t mask = (::boost::uintmax_t(1) << bits) - 1;
+ const ::boost::uintmax_t mask = (::boost::uintmax_t(1) << bits) - 1;
typedef ::boost::uint_t<bits>::fast digit_t;
int shift = std::numeric_limits< ::boost::uintmax_t>::digits - 1
@@ -96,8 +96,8 @@ inline div_t muldivmod(boost::uintmax_t a, boost::uintmax_t b, boost::uintmax_t
quotient[i - 2] = q;
product[i] = 0;
- product[i-1] = (rem >> bits) & mask;
- product[i-2] = rem & mask;
+ product[i-1] = static_cast<digit_t>((rem >> bits) & mask);
+ product[i-2] = static_cast<digit_t>(rem & mask);
}
div_t result = {
diff --git a/3party/boost/boost/random/detail/operators.hpp b/3party/boost/boost/random/detail/operators.hpp
index f27839a961..597343c907 100644
--- a/3party/boost/boost/random/detail/operators.hpp
+++ b/3party/boost/boost/random/detail/operators.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: operators.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_DETAIL_OPERATORS_HPP
diff --git a/3party/boost/boost/random/detail/ptr_helper.hpp b/3party/boost/boost/random/detail/ptr_helper.hpp
index 3f3fbdd564..f1b983d936 100644
--- a/3party/boost/boost/random/detail/ptr_helper.hpp
+++ b/3party/boost/boost/random/detail/ptr_helper.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: ptr_helper.hpp 24096 2004-07-27 03:43:34Z dgregor $
+ * $Id$
*
*/
@@ -32,7 +32,6 @@ struct ptr_helper
static const T& ref(const T& r) { return r; }
};
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<class T>
struct ptr_helper<T&>
{
@@ -52,7 +51,6 @@ struct ptr_helper<T*>
static reference_type ref(T * p) { return *p; }
static const T& ref(const T * p) { return *p; }
};
-#endif
} // namespace detail
} // namespace random
@@ -64,31 +62,6 @@ struct ptr_helper<T*>
// Helper macro for broken compilers defines specializations of
// ptr_helper.
//
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-# define BOOST_RANDOM_PTR_HELPER_SPEC(T) \
-namespace boost { namespace random { namespace detail { \
-template<> \
-struct ptr_helper<T&> \
-{ \
- typedef T value_type; \
- typedef T& reference_type; \
- typedef T& rvalue_type; \
- static reference_type ref(T& r) { return r; } \
- static const T& ref(const T& r) { return r; } \
-}; \
- \
-template<> \
-struct ptr_helper<T*> \
-{ \
- typedef T value_type; \
- typedef T& reference_type; \
- typedef T* rvalue_type; \
- static reference_type ref(T * p) { return *p; } \
- static const T& ref(const T * p) { return *p; } \
-}; \
-}}}
-#else
# define BOOST_RANDOM_PTR_HELPER_SPEC(T)
-#endif
#endif // BOOST_RANDOM_DETAIL_PTR_HELPER_HPP
diff --git a/3party/boost/boost/random/detail/seed.hpp b/3party/boost/boost/random/detail/seed.hpp
index 979db297af..55b2fa667d 100644
--- a/3party/boost/boost/random/detail/seed.hpp
+++ b/3party/boost/boost/random/detail/seed.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: seed.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_DETAIL_SEED_HPP
diff --git a/3party/boost/boost/random/detail/seed_impl.hpp b/3party/boost/boost/random/detail/seed_impl.hpp
index e044d45d38..f88cab299c 100644
--- a/3party/boost/boost/random/detail/seed_impl.hpp
+++ b/3party/boost/boost/random/detail/seed_impl.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: seed_impl.hpp 72951 2011-07-07 04:57:37Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_DETAIL_SEED_IMPL_HPP
@@ -15,6 +15,7 @@
#include <stdexcept>
#include <boost/cstdint.hpp>
+#include <boost/throw_exception.hpp>
#include <boost/config/no_tr1/cmath.hpp>
#include <boost/integer/integer_mask.hpp>
#include <boost/integer/static_log2.hpp>
@@ -253,7 +254,7 @@ IntType get_one_int(Iter& first, Iter last)
IntType s = 0;
for(int j = 0; j < k; ++j) {
if(first == last) {
- throw ::std::invalid_argument("Not enough elements in call to seed.");
+ boost::throw_exception(::std::invalid_argument("Not enough elements in call to seed."));
}
IntType digit = const_mod<IntType, m>::apply(IntType(*first++));
IntType mult = IntType(1) << 32*j;
@@ -303,7 +304,7 @@ void fill_array_int_impl(Iter& first, Iter last, UIntType (&x)[n])
UIntType val = 0;
for(std::size_t k = 0; k < (w+31)/32; ++k) {
if(first == last) {
- throw std::invalid_argument("Not enough elements in call to seed.");
+ boost::throw_exception(std::invalid_argument("Not enough elements in call to seed."));
}
val += static_cast<UIntType>(*first++) << 32*k;
}
@@ -373,12 +374,12 @@ void fill_array_real(Iter& first, Iter last, RealType (&x)[n])
RealType val = RealType(0);
RealType mult = divisor;
for(int k = 0; k < w/32; ++k, ++first) {
- if(first == last) throw std::invalid_argument("Not enough elements in call to seed.");
+ if(first == last) boost::throw_exception(std::invalid_argument("Not enough elements in call to seed."));
val += *first * mult;
mult *= two32;
}
if(mask != 0) {
- if(first == last) throw std::invalid_argument("Not enough elements in call to seed.");
+ if(first == last) boost::throw_exception(std::invalid_argument("Not enough elements in call to seed."));
val += (*first & mask) * mult;
++first;
}
diff --git a/3party/boost/boost/random/detail/uniform_int_float.hpp b/3party/boost/boost/random/detail/uniform_int_float.hpp
index ef209157b6..393c455bcd 100644
--- a/3party/boost/boost/random/detail/uniform_int_float.hpp
+++ b/3party/boost/boost/random/detail/uniform_int_float.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: uniform_int_float.hpp 72951 2011-07-07 04:57:37Z steven_watanabe $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/detail/vector_io.hpp b/3party/boost/boost/random/detail/vector_io.hpp
index 0bb261c3ae..24508c210e 100644
--- a/3party/boost/boost/random/detail/vector_io.hpp
+++ b/3party/boost/boost/random/detail/vector_io.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: vector_io.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_DETAIL_VECTOR_IO_HPP
diff --git a/3party/boost/boost/random/discard_block.hpp b/3party/boost/boost/random/discard_block.hpp
index aba6212671..f3c6b82b87 100644
--- a/3party/boost/boost/random/discard_block.hpp
+++ b/3party/boost/boost/random/discard_block.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: discard_block.hpp 72951 2011-07-07 04:57:37Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-03-02 created
@@ -24,6 +24,7 @@
#include <boost/static_assert.hpp>
#include <boost/random/detail/config.hpp>
#include <boost/random/detail/seed.hpp>
+#include <boost/random/detail/seed_impl.hpp>
namespace boost {
@@ -61,7 +62,7 @@ public:
/** Constructs a new \discard_block_engine with a copy of rng. */
explicit discard_block_engine(const base_type & rng) : _rng(rng), _n(0) { }
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
/** Constructs a new \discard_block_engine with rng. */
explicit discard_block_engine(base_type && rng) : _rng(rng), _n(0) { }
#endif
diff --git a/3party/boost/boost/random/discrete_distribution.hpp b/3party/boost/boost/random/discrete_distribution.hpp
index 1a36c5ffea..6407272093 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 83381 2013-03-09 22:55:05Z eric_niebler $
+ * $Id$
*/
#ifndef BOOST_RANDOM_DISCRETE_DISTRIBUTION_HPP_INCLUDED
@@ -20,7 +20,7 @@
#include <iterator>
#include <boost/assert.hpp>
#include <boost/random/uniform_01.hpp>
-#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_int_distribution.hpp>
#include <boost/random/detail/config.hpp>
#include <boost/random/detail/operators.hpp>
#include <boost/random/detail/vector_io.hpp>
@@ -36,6 +36,186 @@
namespace boost {
namespace random {
+namespace detail {
+
+template<class IntType, class WeightType>
+struct integer_alias_table {
+ WeightType get_weight(IntType bin) const {
+ WeightType result = _average;
+ if(bin < _excess) ++result;
+ return result;
+ }
+ template<class Iter>
+ WeightType init_average(Iter begin, Iter end) {
+ WeightType weight_average = 0;
+ IntType excess = 0;
+ IntType n = 0;
+ // weight_average * n + excess == current partial sum
+ // This is a bit messy, but it's guaranteed not to overflow
+ for(Iter iter = begin; iter != end; ++iter) {
+ ++n;
+ if(*iter < weight_average) {
+ WeightType diff = weight_average - *iter;
+ weight_average -= diff / n;
+ if(diff % n > excess) {
+ --weight_average;
+ excess += n - diff % n;
+ } else {
+ excess -= diff % n;
+ }
+ } else {
+ WeightType diff = *iter - weight_average;
+ weight_average += diff / n;
+ if(diff % n < n - excess) {
+ excess += diff % n;
+ } else {
+ ++weight_average;
+ excess -= n - diff % n;
+ }
+ }
+ }
+ _alias_table.resize(static_cast<std::size_t>(n));
+ _average = weight_average;
+ _excess = excess;
+ return weight_average;
+ }
+ void init_empty()
+ {
+ _alias_table.clear();
+ _alias_table.push_back(std::make_pair(static_cast<WeightType>(1),
+ static_cast<IntType>(0)));
+ _average = static_cast<WeightType>(1);
+ _excess = static_cast<IntType>(0);
+ }
+ bool operator==(const integer_alias_table& other) const
+ {
+ return _alias_table == other._alias_table &&
+ _average == other._average && _excess == other._excess;
+ }
+ static WeightType normalize(WeightType val, WeightType average)
+ {
+ return val;
+ }
+ static void normalize(std::vector<WeightType>&) {}
+ template<class URNG>
+ WeightType test(URNG &urng) const
+ {
+ return uniform_int_distribution<WeightType>(0, _average)(urng);
+ }
+ bool accept(IntType result, WeightType val) const
+ {
+ return result < _excess || val < _average;
+ }
+ static WeightType try_get_sum(const std::vector<WeightType>& weights)
+ {
+ WeightType result = static_cast<WeightType>(0);
+ for(typename std::vector<WeightType>::const_iterator
+ iter = weights.begin(), end = weights.end();
+ iter != end; ++iter)
+ {
+ if((std::numeric_limits<WeightType>::max)() - result > *iter) {
+ return static_cast<WeightType>(0);
+ }
+ result += *iter;
+ }
+ return result;
+ }
+ template<class URNG>
+ static WeightType generate_in_range(URNG &urng, WeightType max)
+ {
+ return uniform_int_distribution<WeightType>(
+ static_cast<WeightType>(0), max-1)(urng);
+ }
+ typedef std::vector<std::pair<WeightType, IntType> > alias_table_t;
+ alias_table_t _alias_table;
+ WeightType _average;
+ IntType _excess;
+};
+
+template<class IntType, class WeightType>
+struct real_alias_table {
+ WeightType get_weight(IntType) const
+ {
+ return WeightType(1.0);
+ }
+ template<class Iter>
+ WeightType init_average(Iter first, Iter last)
+ {
+ std::size_t size = std::distance(first, last);
+ WeightType weight_sum =
+ std::accumulate(first, last, static_cast<WeightType>(0));
+ _alias_table.resize(size);
+ return weight_sum / size;
+ }
+ void init_empty()
+ {
+ _alias_table.clear();
+ _alias_table.push_back(std::make_pair(static_cast<WeightType>(1),
+ static_cast<IntType>(0)));
+ }
+ bool operator==(const real_alias_table& other) const
+ {
+ return _alias_table == other._alias_table;
+ }
+ static WeightType normalize(WeightType val, WeightType average)
+ {
+ return val / average;
+ }
+ static void normalize(std::vector<WeightType>& weights)
+ {
+ WeightType sum =
+ std::accumulate(weights.begin(), weights.end(),
+ static_cast<WeightType>(0));
+ for(typename std::vector<WeightType>::iterator
+ iter = weights.begin(),
+ end = weights.end();
+ iter != end; ++iter)
+ {
+ *iter /= sum;
+ }
+ }
+ template<class URNG>
+ WeightType test(URNG &urng) const
+ {
+ return uniform_01<WeightType>()(urng);
+ }
+ bool accept(IntType, WeightType) const
+ {
+ return true;
+ }
+ static WeightType try_get_sum(const std::vector<WeightType>& weights)
+ {
+ return static_cast<WeightType>(1);
+ }
+ template<class URNG>
+ static WeightType generate_in_range(URNG &urng, WeightType)
+ {
+ return uniform_01<WeightType>()(urng);
+ }
+ typedef std::vector<std::pair<WeightType, IntType> > alias_table_t;
+ alias_table_t _alias_table;
+};
+
+template<bool IsIntegral>
+struct select_alias_table;
+
+template<>
+struct select_alias_table<true> {
+ template<class IntType, class WeightType>
+ struct apply {
+ typedef integer_alias_table<IntType, WeightType> type;
+ };
+};
+
+template<>
+struct select_alias_table<false> {
+ template<class IntType, class WeightType>
+ struct apply {
+ typedef real_alias_table<IntType, WeightType> type;
+ };
+};
+
+}
/**
* The class @c discrete_distribution models a \random_distribution.
@@ -155,16 +335,7 @@ public:
{}
void normalize()
{
- WeightType sum =
- std::accumulate(_probabilities.begin(), _probabilities.end(),
- static_cast<WeightType>(0));
- for(typename std::vector<WeightType>::iterator
- iter = _probabilities.begin(),
- end = _probabilities.end();
- iter != end; ++iter)
- {
- *iter /= sum;
- }
+ impl_type::normalize(_probabilities);
}
std::vector<WeightType> _probabilities;
/// @endcond
@@ -176,8 +347,7 @@ public:
*/
discrete_distribution()
{
- _alias_table.push_back(std::make_pair(static_cast<WeightType>(1),
- static_cast<IntType>(0)));
+ _impl.init_empty();
}
/**
* Constructs a discrete_distribution from an iterator range.
@@ -257,13 +427,17 @@ public:
template<class URNG>
IntType operator()(URNG& urng) const
{
- BOOST_ASSERT(!_alias_table.empty());
- WeightType test = uniform_01<WeightType>()(urng);
- IntType result = uniform_int<IntType>((min)(), (max)())(urng);
- if(test < _alias_table[result].first) {
+ BOOST_ASSERT(!_impl._alias_table.empty());
+ IntType result;
+ WeightType test;
+ do {
+ result = uniform_int_distribution<IntType>((min)(), (max)())(urng);
+ test = _impl.test(urng);
+ } while(!_impl.accept(result, test));
+ if(test < _impl._alias_table[result].first) {
return result;
} else {
- return(_alias_table[result].second);
+ return(_impl._alias_table[result].second);
}
}
@@ -274,13 +448,13 @@ public:
template<class URNG>
IntType operator()(URNG& urng, const param_type& parm) const
{
- while(true) {
- WeightType val = uniform_01<WeightType>()(urng);
+ if(WeightType limit = impl_type::try_get_sum(parm._probabilities)) {
+ WeightType val = impl_type::generate_in_range(urng, limit);
WeightType sum = 0;
std::size_t result = 0;
for(typename std::vector<WeightType>::const_iterator
- iter = parm._probabilities.begin(),
- end = parm._probabilities.end();
+ iter = parm._probabilities.begin(),
+ end = parm._probabilities.end();
iter != end; ++iter, ++result)
{
sum += *iter;
@@ -288,6 +462,14 @@ public:
return result;
}
}
+ // This shouldn't be reachable, but round-off error
+ // can prevent any match from being found when val is
+ // very close to 1.
+ return static_cast<IntType>(parm._probabilities.size() - 1);
+ } else {
+ // WeightType is integral and sum(parm._probabilities)
+ // would overflow. Just use the easy solution.
+ return discrete_distribution(parm)(urng);
}
}
@@ -295,7 +477,7 @@ public:
result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; }
/** Returns the largest value that the distribution can produce. */
result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const
- { return static_cast<result_type>(_alias_table.size() - 1); }
+ { return static_cast<result_type>(_impl._alias_table.size() - 1); }
/**
* Returns a vector containing the probabilities of each
@@ -307,22 +489,24 @@ public:
* @endcode
*
* the vector, p will contain {0.1, 0.4, 0.5}.
+ *
+ * If @c WeightType is integral, then the weights
+ * will be returned unchanged.
*/
std::vector<WeightType> probabilities() const
{
- std::vector<WeightType> result(_alias_table.size());
- const WeightType mean =
- static_cast<WeightType>(1) / _alias_table.size();
+ std::vector<WeightType> result(_impl._alias_table.size());
std::size_t i = 0;
- for(typename alias_table_t::const_iterator
- iter = _alias_table.begin(),
- end = _alias_table.end();
+ for(typename impl_type::alias_table_t::const_iterator
+ iter = _impl._alias_table.begin(),
+ end = _impl._alias_table.end();
iter != end; ++iter, ++i)
{
- WeightType val = iter->first * mean;
+ WeightType val = iter->first;
result[i] += val;
- result[iter->second] += mean - val;
+ result[iter->second] += _impl.get_weight(i) - val;
}
+ impl_type::normalize(result);
return(result);
}
@@ -366,7 +550,7 @@ public:
*/
BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(discrete_distribution, lhs, rhs)
{
- return lhs._alias_table == rhs._alias_table;
+ return lhs._impl == rhs._impl;
}
/**
* Returns true if the two distributions may return different
@@ -389,59 +573,58 @@ private:
{
std::vector<std::pair<WeightType, IntType> > below_average;
std::vector<std::pair<WeightType, IntType> > above_average;
- std::size_t size = std::distance(first, last);
- WeightType weight_sum =
- std::accumulate(first, last, static_cast<WeightType>(0));
- WeightType weight_average = weight_sum / size;
+ WeightType weight_average = _impl.init_average(first, last);
+ WeightType normalized_average = _impl.get_weight(0);
std::size_t i = 0;
for(; first != last; ++first, ++i) {
- WeightType val = *first / weight_average;
+ WeightType val = impl_type::normalize(*first, weight_average);
std::pair<WeightType, IntType> elem(val, static_cast<IntType>(i));
- if(val < static_cast<WeightType>(1)) {
+ if(val < normalized_average) {
below_average.push_back(elem);
} else {
above_average.push_back(elem);
}
}
- _alias_table.resize(size);
- typename alias_table_t::iterator
+ typename impl_type::alias_table_t::iterator
b_iter = below_average.begin(),
b_end = below_average.end(),
a_iter = above_average.begin(),
a_end = above_average.end()
;
while(b_iter != b_end && a_iter != a_end) {
- _alias_table[b_iter->second] =
+ _impl._alias_table[b_iter->second] =
std::make_pair(b_iter->first, a_iter->second);
- a_iter->first -= (static_cast<WeightType>(1) - b_iter->first);
- if(a_iter->first < static_cast<WeightType>(1)) {
+ a_iter->first -= (_impl.get_weight(b_iter->second) - b_iter->first);
+ if(a_iter->first < normalized_average) {
*b_iter = *a_iter++;
} else {
++b_iter;
}
}
for(; b_iter != b_end; ++b_iter) {
- _alias_table[b_iter->second].first = static_cast<WeightType>(1);
+ _impl._alias_table[b_iter->second].first =
+ _impl.get_weight(b_iter->second);
}
for(; a_iter != a_end; ++a_iter) {
- _alias_table[a_iter->second].first = static_cast<WeightType>(1);
+ _impl._alias_table[a_iter->second].first =
+ _impl.get_weight(a_iter->second);
}
}
template<class Iter>
void init(Iter first, Iter last)
{
if(first == last) {
- _alias_table.clear();
- _alias_table.push_back(std::make_pair(static_cast<WeightType>(1),
- static_cast<IntType>(0)));
+ _impl.init_empty();
} else {
typename std::iterator_traits<Iter>::iterator_category category;
init(first, last, category);
}
}
- typedef std::vector<std::pair<WeightType, IntType> > alias_table_t;
- alias_table_t _alias_table;
+ typedef typename detail::select_alias_table<
+ (::boost::is_integral<WeightType>::value)
+ >::template apply<IntType, WeightType>::type impl_type;
+ impl_type _impl;
/// @endcond
};
diff --git a/3party/boost/boost/random/exponential_distribution.hpp b/3party/boost/boost/random/exponential_distribution.hpp
index dd45e35d9b..53eaa93865 100644
--- a/3party/boost/boost/random/exponential_distribution.hpp
+++ b/3party/boost/boost/random/exponential_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: exponential_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/extreme_value_distribution.hpp b/3party/boost/boost/random/extreme_value_distribution.hpp
index 61a6554546..419c3da651 100644
--- a/3party/boost/boost/random/extreme_value_distribution.hpp
+++ b/3party/boost/boost/random/extreme_value_distribution.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: extreme_value_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_EXTREME_VALUE_DISTRIBUTION_HPP
diff --git a/3party/boost/boost/random/fisher_f_distribution.hpp b/3party/boost/boost/random/fisher_f_distribution.hpp
index 58a05ac342..cdf14da8f6 100644
--- a/3party/boost/boost/random/fisher_f_distribution.hpp
+++ b/3party/boost/boost/random/fisher_f_distribution.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: fisher_f_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_FISHER_F_DISTRIBUTION_HPP
diff --git a/3party/boost/boost/random/gamma_distribution.hpp b/3party/boost/boost/random/gamma_distribution.hpp
index 20f5c3b4ff..c9bda4ca9d 100644
--- a/3party/boost/boost/random/gamma_distribution.hpp
+++ b/3party/boost/boost/random/gamma_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: gamma_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/generate_canonical.hpp b/3party/boost/boost/random/generate_canonical.hpp
index 1bba44f0d2..23ff43dfac 100644
--- a/3party/boost/boost/random/generate_canonical.hpp
+++ b/3party/boost/boost/random/generate_canonical.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: generate_canonical.hpp 72951 2011-07-07 04:57:37Z steven_watanabe $
+ * $Id$
*
*/
@@ -19,7 +19,6 @@
#include <boost/config/no_tr1/cmath.hpp>
#include <boost/limits.hpp>
#include <boost/type_traits/is_integral.hpp>
-#include <boost/math/special_functions.hpp>
#include <boost/random/detail/signed_unsigned_tools.hpp>
#include <boost/random/detail/generator_bits.hpp>
@@ -55,7 +54,6 @@ RealType generate_canonical_impl(URNG& g, boost::mpl::false_ /*is_integral*/)
using std::floor;
BOOST_ASSERT((g.min)() == 0);
BOOST_ASSERT((g.max)() == 1);
- typedef typename URNG::result_type base_result;
std::size_t digits = std::numeric_limits<RealType>::digits;
std::size_t engine_bits = detail::generator_bits<URNG>::value();
std::size_t b = (std::min)(bits, digits);
diff --git a/3party/boost/boost/random/geometric_distribution.hpp b/3party/boost/boost/random/geometric_distribution.hpp
index daca0ceb11..90374cff71 100644
--- a/3party/boost/boost/random/geometric_distribution.hpp
+++ b/3party/boost/boost/random/geometric_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: geometric_distribution.hpp 74867 2011-10-09 23:13:31Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
@@ -104,8 +104,8 @@ public:
*
* Requires: 0 < p < 1
*/
- explicit geometric_distribution(const RealType& p = RealType(0.5))
- : _p(p)
+ explicit geometric_distribution(const RealType& p_arg = RealType(0.5))
+ : _p(p_arg)
{
BOOST_ASSERT(RealType(0) < _p && _p < RealType(1));
init();
diff --git a/3party/boost/boost/random/independent_bits.hpp b/3party/boost/boost/random/independent_bits.hpp
index f387fe2d8f..5ff52b80ff 100644
--- a/3party/boost/boost/random/independent_bits.hpp
+++ b/3party/boost/boost/random/independent_bits.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: independent_bits.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/inversive_congruential.hpp b/3party/boost/boost/random/inversive_congruential.hpp
index 616909d445..2329c0db3a 100644
--- a/3party/boost/boost/random/inversive_congruential.hpp
+++ b/3party/boost/boost/random/inversive_congruential.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: inversive_congruential.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/lagged_fibonacci.hpp b/3party/boost/boost/random/lagged_fibonacci.hpp
index eb4e405c50..5a809f3e49 100644
--- a/3party/boost/boost/random/lagged_fibonacci.hpp
+++ b/3party/boost/boost/random/lagged_fibonacci.hpp
@@ -7,9 +7,10 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: lagged_fibonacci.hpp 72951 2011-07-07 04:57:37Z steven_watanabe $
+ * $Id$
*
* Revision history
+ * 2013-10-14 fixed some warnings with Wshadow (mgaunard)
* 2001-02-18 moved to individual header files
*/
@@ -35,7 +36,7 @@
namespace boost {
namespace random {
-/**
+/**
* Instantiations of class template \lagged_fibonacci_engine model a
* \pseudo_random_number_generator. It uses a lagged Fibonacci
* algorithm with two lags @c p and @c q:
@@ -79,7 +80,7 @@ public:
{ seed(first, last); }
// compiler-generated copy ctor and assignment operator are fine
-
+
/** Calls @c seed(default_seed). */
void seed() { seed(default_seed); }
@@ -123,7 +124,7 @@ public:
fill();
return x[i++];
}
-
+
/** Fills a range with random values */
template<class Iter>
void generate(Iter first, Iter last)
@@ -136,36 +137,36 @@ public:
(*this)();
}
}
-
+
/**
* Writes the textual representation of the generator to a @c std::ostream.
*/
BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, lagged_fibonacci_engine, f)
{
os << f.i;
- for(unsigned int i = 0; i < f.long_lag; ++i)
- os << ' ' << f.x[i];
+ for(unsigned int j = 0; j < f.long_lag; ++j)
+ os << ' ' << f.x[j];
return os;
}
-
+
/**
* Reads the textual representation of the generator from a @c std::istream.
*/
BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, lagged_fibonacci_engine, f)
{
is >> f.i >> std::ws;
- for(unsigned int i = 0; i < f.long_lag; ++i)
- is >> f.x[i] >> std::ws;
+ for(unsigned int j = 0; j < f.long_lag; ++j)
+ is >> f.x[j] >> std::ws;
return is;
}
-
+
/**
* Returns true if the two generators will produce identical
* sequences of outputs.
*/
- BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(lagged_fibonacci_engine, x, y)
- { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); }
-
+ BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(lagged_fibonacci_engine, x_, y_)
+ { return x_.i == y_.i && std::equal(x_.x, x_.x+long_lag, y_.x); }
+
/**
* Returns true if the two generators will produce different
* sequences of outputs.
@@ -306,7 +307,7 @@ public:
detail::seed_array_real<w>(seq, x);
i = long_lag;
}
-
+
/**
* Seeds this @c lagged_fibonacci_01_engine using values from the
* iterator range [first, last). If there are not enough elements
@@ -318,7 +319,7 @@ public:
detail::fill_array_real<w>(first, last, x);
i = long_lag;
}
-
+
/** Returns the smallest value that the generator can produce. */
static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () { return result_type(0); }
/** Returns the upper bound of the generators outputs. */
@@ -331,7 +332,7 @@ public:
fill();
return x[i++];
}
-
+
/** Fills a range with random values */
template<class Iter>
void generate(Iter first, Iter last)
@@ -344,7 +345,7 @@ public:
(*this)();
}
}
-
+
/**
* Writes the textual representation of the generator to a @c std::ostream.
*/
@@ -353,34 +354,34 @@ public:
// allow for Koenig lookup
using std::pow;
os << f.i;
- std::ios_base::fmtflags oldflags = os.flags(os.dec | os.fixed | os.left);
- for(unsigned int i = 0; i < f.long_lag; ++i)
- os << ' ' << f.x[i] * f.modulus();
+ std::ios_base::fmtflags oldflags = os.flags(os.dec | os.fixed | os.left);
+ for(unsigned int j = 0; j < f.long_lag; ++j)
+ os << ' ' << f.x[j] * f.modulus();
os.flags(oldflags);
return os;
}
-
+
/**
* Reads the textual representation of the generator from a @c std::istream.
*/
BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, lagged_fibonacci_01_engine, f)
{
is >> f.i;
- for(unsigned int i = 0; i < f.long_lag; ++i) {
+ for(unsigned int j = 0; j < f.long_lag; ++j) {
typename lagged_fibonacci_01_engine::result_type value;
is >> std::ws >> value;
- f.x[i] = value / f.modulus();
+ f.x[j] = value / f.modulus();
}
return is;
}
-
+
/**
* Returns true if the two generators will produce identical
* sequences of outputs.
*/
- BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(lagged_fibonacci_01_engine, x, y)
- { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); }
-
+ BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(lagged_fibonacci_01_engine, x_, y_)
+ { return x_.i == y_.i && std::equal(x_.x, x_.x+long_lag, y_.x); }
+
/**
* Returns true if the two generators will produce different
* sequences of outputs.
diff --git a/3party/boost/boost/random/laplace_distribution.hpp b/3party/boost/boost/random/laplace_distribution.hpp
new file mode 100644
index 0000000000..ec176a59c1
--- /dev/null
+++ b/3party/boost/boost/random/laplace_distribution.hpp
@@ -0,0 +1,175 @@
+/* boost random/laplace_distribution.hpp header file
+ *
+ * Copyright Steven Watanabe 2014
+ * 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 most recent version including documentation.
+ *
+ * $Id$
+ */
+
+#ifndef BOOST_RANDOM_LAPLACE_DISTRIBUTION_HPP
+#define BOOST_RANDOM_LAPLACE_DISTRIBUTION_HPP
+
+#include <cassert>
+#include <istream>
+#include <iosfwd>
+#include <boost/random/detail/operators.hpp>
+#include <boost/random/exponential_distribution.hpp>
+
+namespace boost {
+namespace random {
+
+/**
+ * The laplace distribution is a real-valued distribution with
+ * two parameters, mean and beta.
+ *
+ * It has \f$\displaystyle p(x) = \frac{e^-{\frac{|x-\mu|}{\beta}}}{2\beta}\f$.
+ */
+template<class RealType = double>
+class laplace_distribution {
+public:
+ typedef RealType result_type;
+ typedef RealType input_type;
+
+ class param_type {
+ public:
+ typedef laplace_distribution distribution_type;
+
+ /**
+ * Constructs a @c param_type from the "mean" and "beta" parameters
+ * of the distribution.
+ */
+ explicit param_type(RealType mean_arg = RealType(0.0),
+ RealType beta_arg = RealType(1.0))
+ : _mean(mean_arg), _beta(beta_arg)
+ {}
+
+ /** Returns the "mean" parameter of the distribtuion. */
+ RealType mean() const { return _mean; }
+ /** Returns the "beta" parameter of the distribution. */
+ RealType beta() const { return _beta; }
+
+ /** Writes a @c param_type to a @c std::ostream. */
+ BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm)
+ { os << parm._mean << ' ' << parm._beta; return os; }
+
+ /** Reads a @c param_type from a @c std::istream. */
+ BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm)
+ { is >> parm._mean >> std::ws >> parm._beta; return is; }
+
+ /** Returns true if the two sets of parameters are the same. */
+ BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs)
+ { return lhs._mean == rhs._mean && lhs._beta == rhs._beta; }
+
+ /** Returns true if the two sets of parameters are the different. */
+ BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type)
+
+ private:
+ RealType _mean;
+ RealType _beta;
+ };
+
+ /**
+ * Constructs an @c laplace_distribution from its "mean" and "beta" parameters.
+ */
+ explicit laplace_distribution(RealType mean_arg = RealType(0.0),
+ RealType beta_arg = RealType(1.0))
+ : _mean(mean_arg), _beta(beta_arg)
+ {}
+ /** Constructs an @c laplace_distribution from its parameters. */
+ explicit laplace_distribution(const param_type& parm)
+ : _mean(parm.mean()), _beta(parm.beta())
+ {}
+
+ /**
+ * Returns a random variate distributed according to the
+ * laplace distribution.
+ */
+ template<class URNG>
+ RealType operator()(URNG& urng) const
+ {
+ RealType exponential = exponential_distribution<RealType>()(urng);
+ if(uniform_01<RealType>()(urng) < 0.5)
+ exponential = -exponential;
+ return _mean + _beta * exponential;
+ }
+
+ /**
+ * Returns a random variate distributed accordint to the laplace
+ * distribution with parameters specified by @c param.
+ */
+ template<class URNG>
+ RealType operator()(URNG& urng, const param_type& parm) const
+ {
+ return laplace_distribution(parm)(urng);
+ }
+
+ /** Returns the "mean" parameter of the distribution. */
+ RealType mean() const { return _mean; }
+ /** Returns the "beta" parameter of the distribution. */
+ RealType beta() const { return _beta; }
+
+ /** Returns the smallest value that the distribution can produce. */
+ RealType min BOOST_PREVENT_MACRO_SUBSTITUTION () const
+ { return RealType(-std::numeric_limits<RealType>::infinity()); }
+ /** Returns the largest value that the distribution can produce. */
+ RealType max BOOST_PREVENT_MACRO_SUBSTITUTION () const
+ { return RealType(std::numeric_limits<RealType>::infinity()); }
+
+ /** Returns the parameters of the distribution. */
+ param_type param() const { return param_type(_mean, _beta); }
+ /** Sets the parameters of the distribution. */
+ void param(const param_type& parm)
+ {
+ _mean = parm.mean();
+ _beta = parm.beta();
+ }
+
+ /**
+ * Effects: Subsequent uses of the distribution do not depend
+ * on values produced by any engine prior to invoking reset.
+ */
+ void reset() { }
+
+ /** Writes an @c laplace_distribution to a @c std::ostream. */
+ BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, laplace_distribution, wd)
+ {
+ os << wd.param();
+ return os;
+ }
+
+ /** Reads an @c laplace_distribution from a @c std::istream. */
+ BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, laplace_distribution, wd)
+ {
+ param_type parm;
+ if(is >> parm) {
+ wd.param(parm);
+ }
+ return is;
+ }
+
+ /**
+ * Returns true if the two instances of @c laplace_distribution will
+ * return identical sequences of values given equal generators.
+ */
+ BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(laplace_distribution, lhs, rhs)
+ { return lhs._mean == rhs._mean && lhs._beta == rhs._beta; }
+
+ /**
+ * Returns true if the two instances of @c laplace_distribution will
+ * return different sequences of values given equal generators.
+ */
+ BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(laplace_distribution)
+
+private:
+ RealType _mean;
+ RealType _beta;
+};
+
+} // namespace random
+} // namespace boost
+
+#endif // BOOST_RANDOM_LAPLACE_DISTRIBUTION_HPP
diff --git a/3party/boost/boost/random/linear_congruential.hpp b/3party/boost/boost/random/linear_congruential.hpp
index 5f8fe7a078..de3a1d0749 100644
--- a/3party/boost/boost/random/linear_congruential.hpp
+++ b/3party/boost/boost/random/linear_congruential.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: linear_congruential.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/linear_feedback_shift.hpp b/3party/boost/boost/random/linear_feedback_shift.hpp
index 1cce9f9cf3..a695dfde97 100644
--- a/3party/boost/boost/random/linear_feedback_shift.hpp
+++ b/3party/boost/boost/random/linear_feedback_shift.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: linear_feedback_shift.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/lognormal_distribution.hpp b/3party/boost/boost/random/lognormal_distribution.hpp
index bc7ddfeff2..7ed1e13abf 100644
--- a/3party/boost/boost/random/lognormal_distribution.hpp
+++ b/3party/boost/boost/random/lognormal_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: lognormal_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/mersenne_twister.hpp b/3party/boost/boost/random/mersenne_twister.hpp
index be603898be..3878fee156 100644
--- a/3party/boost/boost/random/mersenne_twister.hpp
+++ b/3party/boost/boost/random/mersenne_twister.hpp
@@ -8,9 +8,10 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: mersenne_twister.hpp 74867 2011-10-09 23:13:31Z steven_watanabe $
+ * $Id$
*
* Revision history
+ * 2013-10-14 fixed some warnings with Wshadow (mgaunard)
* 2001-02-18 moved to individual header files
*/
@@ -40,7 +41,7 @@ namespace random {
* "Mersenne Twister: A 623-dimensionally equidistributed uniform
* pseudo-random number generator", Makoto Matsumoto and Takuji Nishimura,
* ACM Transactions on Modeling and Computer Simulation: Special Issue on
- * Uniform Random Number Generation, Vol. 8, No. 1, January 1998, pp. 3-30.
+ * Uniform Random Number Generation, Vol. 8, No. 1, January 1998, pp. 3-30.
* @endblockquote
*
* @xmlnote
@@ -51,7 +52,7 @@ namespace random {
*
* The seeding from an integer was changed in April 2005 to address a
* <a href="http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html">weakness</a>.
- *
+ *
* The quality of the generator crucially depends on the choice of the
* parameters. User code should employ one of the sensibly parameterized
* generators such as \mt19937 instead.
@@ -83,7 +84,7 @@ public:
BOOST_STATIC_CONSTANT(std::size_t, tempering_l = l);
BOOST_STATIC_CONSTANT(UIntType, initialization_multiplier = f);
BOOST_STATIC_CONSTANT(UIntType, default_seed = 5489u);
-
+
// backwards compatibility
BOOST_STATIC_CONSTANT(UIntType, parameter_a = a);
BOOST_STATIC_CONSTANT(std::size_t, output_u = u);
@@ -92,7 +93,7 @@ public:
BOOST_STATIC_CONSTANT(std::size_t, output_t = t);
BOOST_STATIC_CONSTANT(UIntType, output_c = c);
BOOST_STATIC_CONSTANT(std::size_t, output_l = l);
-
+
// old Boost.Random concept requirements
BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
@@ -136,7 +137,7 @@ public:
*/
BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(mersenne_twister_engine, UIntType, value)
{
- // New seeding algorithm from
+ // New seeding algorithm from
// http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html
// In the previous versions, MSBs of the seed affected only MSBs of the
// state x[].
@@ -147,8 +148,10 @@ public:
// Vol. 2, 3rd ed., page 106
x[i] = (f * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask;
}
+
+ normalize_state();
}
-
+
/**
* Seeds a mersenne_twister_engine using values produced by seq.generate().
*/
@@ -157,13 +160,7 @@ public:
detail::seed_array_int<w>(seq, x);
i = n;
- // fix up the state if it's all zeroes.
- if((x[0] & (~static_cast<UIntType>(0) << r)) == 0) {
- for(std::size_t j = 1; j < n; ++j) {
- if(x[j] != 0) return;
- }
- x[0] = static_cast<UIntType>(1) << (w-1);
- }
+ normalize_state();
}
/** Sets the state of the generator using values from an iterator range. */
@@ -173,22 +170,16 @@ public:
detail::fill_array_int<w>(first, last, x);
i = n;
- // fix up the state if it's all zeroes.
- if((x[0] & (~static_cast<UIntType>(0) << r)) == 0) {
- for(std::size_t j = 1; j < n; ++j) {
- if(x[j] != 0) return;
- }
- x[0] = static_cast<UIntType>(1) << (w-1);
- }
+ normalize_state();
}
-
+
/** Returns the smallest value that the generator can produce. */
static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION ()
{ return 0; }
/** Returns the largest value that the generator can produce. */
static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION ()
{ return boost::low_bits_mask_t<w>::sig_bits; }
-
+
/** Produces the next value of the generator. */
result_type operator()();
@@ -223,7 +214,7 @@ public:
mt.print(os);
return os;
}
-
+
/** Reads a mersenne_twister_engine from a @c std::istream */
template<class CharT, class Traits>
friend std::basic_istream<CharT,Traits>&
@@ -244,19 +235,19 @@ public:
* Returns true if the two generators are in the same state,
* and will thus produce identical sequences.
*/
- friend bool operator==(const mersenne_twister_engine& x,
- const mersenne_twister_engine& y)
+ friend bool operator==(const mersenne_twister_engine& x_,
+ const mersenne_twister_engine& y_)
{
- if(x.i < y.i) return x.equal_imp(y);
- else return y.equal_imp(x);
+ if(x_.i < y_.i) return x_.equal_imp(y_);
+ else return y_.equal_imp(x_);
}
-
+
/**
* Returns true if the two generators are in different states.
*/
- friend bool operator!=(const mersenne_twister_engine& x,
- const mersenne_twister_engine& y)
- { return !(x == y); }
+ friend bool operator!=(const mersenne_twister_engine& x_,
+ const mersenne_twister_engine& y_)
+ { return !(x_ == y_); }
private:
/// \cond show_private
@@ -333,6 +324,35 @@ private:
}
/**
+ * Converts an arbitrary array into a valid generator state.
+ * First we normalize x[0], so that it contains the same
+ * value we would get by running the generator forwards
+ * and then in reverse. (The low order r bits are redundant).
+ * Then, if the state consists of all zeros, we set the
+ * high order bit of x[0] to 1. This function only needs to
+ * be called by seed, since the state transform preserves
+ * this relationship.
+ */
+ void normalize_state()
+ {
+ const UIntType upper_mask = (~static_cast<UIntType>(0)) << r;
+ const UIntType lower_mask = ~upper_mask;
+ UIntType y0 = x[m-1] ^ x[n-1];
+ if(y0 & (static_cast<UIntType>(1) << (w-1))) {
+ y0 = ((y0 ^ a) << 1) | 1;
+ } else {
+ y0 = y0 << 1;
+ }
+ x[0] = (x[0] & upper_mask) | (y0 & lower_mask);
+
+ // fix up the state if it's all zeroes.
+ for(std::size_t j = 0; j < n; ++j) {
+ if(x[j] != 0) return;
+ }
+ x[0] = static_cast<UIntType>(1) << (w-1);
+ }
+
+ /**
* Given a pointer to the last element of the rewind array,
* and the current size of the rewind array, finds an element
* relative to the next available slot in the rewind array.
@@ -354,7 +374,7 @@ private:
// x[0] ... x[k] x[k+1] ... x[n-1] represents
// x(i-k) ... x(i) x(i+1) ... x(i-k+n-1)
- UIntType x[n];
+ UIntType x[n];
std::size_t i;
};
@@ -468,7 +488,7 @@ mersenne_twister_engine<UIntType,w,n,m,r,a,u,d,s,b,t,c,l,f>::operator()()
* uniform pseudo-random number generator", Makoto Matsumoto
* and Takuji Nishimura, ACM Transactions on Modeling and
* Computer Simulation: Special Issue on Uniform Random Number
- * Generation, Vol. 8, No. 1, January 1998, pp. 3-30.
+ * Generation, Vol. 8, No. 1, January 1998, pp. 3-30.
* @endblockquote
*/
typedef mersenne_twister_engine<uint32_t,32,351,175,19,0xccab8ee7,
@@ -482,7 +502,7 @@ typedef mersenne_twister_engine<uint32_t,32,351,175,19,0xccab8ee7,
* uniform pseudo-random number generator", Makoto Matsumoto
* and Takuji Nishimura, ACM Transactions on Modeling and
* Computer Simulation: Special Issue on Uniform Random Number
- * Generation, Vol. 8, No. 1, January 1998, pp. 3-30.
+ * Generation, Vol. 8, No. 1, January 1998, pp. 3-30.
* @endblockquote
*/
typedef mersenne_twister_engine<uint32_t,32,624,397,31,0x9908b0df,
diff --git a/3party/boost/boost/random/negative_binomial_distribution.hpp b/3party/boost/boost/random/negative_binomial_distribution.hpp
index 23b657ffcf..cbe26fad25 100644
--- a/3party/boost/boost/random/negative_binomial_distribution.hpp
+++ b/3party/boost/boost/random/negative_binomial_distribution.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: negative_binomial_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_NEGATIVE_BINOMIAL_DISTRIBUTION_HPP_INCLUDED
diff --git a/3party/boost/boost/random/normal_distribution.hpp b/3party/boost/boost/random/normal_distribution.hpp
index 9515fb305a..0be1298fcc 100644
--- a/3party/boost/boost/random/normal_distribution.hpp
+++ b/3party/boost/boost/random/normal_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: normal_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
@@ -23,13 +23,224 @@
#include <boost/assert.hpp>
#include <boost/limits.hpp>
#include <boost/static_assert.hpp>
+#include <boost/integer.hpp>
+#include <boost/integer/integer_mask.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
#include <boost/random/detail/config.hpp>
#include <boost/random/detail/operators.hpp>
+#include <boost/random/detail/integer_log2.hpp>
#include <boost/random/uniform_01.hpp>
+#include <boost/random/uniform_int_distribution.hpp>
+#include <boost/random/exponential_distribution.hpp>
namespace boost {
namespace random {
+namespace detail {
+
+// tables for the ziggurat algorithm
+template<class RealType>
+struct normal_table {
+ static const RealType table_x[129];
+ static const RealType table_y[129];
+};
+
+template<class RealType>
+const RealType normal_table<RealType>::table_x[129] = {
+ 3.7130862467403632609, 3.4426198558966521214, 3.2230849845786185446, 3.0832288582142137009,
+ 2.9786962526450169606, 2.8943440070186706210, 2.8231253505459664379, 2.7611693723841538514,
+ 2.7061135731187223371, 2.6564064112581924999, 2.6109722484286132035, 2.5690336259216391328,
+ 2.5300096723854666170, 2.4934545220919507609, 2.4590181774083500943, 2.4264206455302115930,
+ 2.3954342780074673425, 2.3658713701139875435, 2.3375752413355307354, 2.3104136836950021558,
+ 2.2842740596736568056, 2.2590595738653295251, 2.2346863955870569803, 2.2110814088747278106,
+ 2.1881804320720206093, 2.1659267937448407377, 2.1442701823562613518, 2.1231657086697899595,
+ 2.1025731351849988838, 2.0824562379877246441, 2.0627822745039633575, 2.0435215366506694976,
+ 2.0246469733729338782, 2.0061338699589668403, 1.9879595741230607243, 1.9701032608497132242,
+ 1.9525457295488889058, 1.9352692282919002011, 1.9182573008597320303, 1.9014946531003176140,
+ 1.8849670357028692380, 1.8686611409895420085, 1.8525645117230870617, 1.8366654602533840447,
+ 1.8209529965910050740, 1.8054167642140487420, 1.7900469825946189862, 1.7748343955807692457,
+ 1.7597702248942318749, 1.7448461281083765085, 1.7300541605582435350, 1.7153867407081165482,
+ 1.7008366185643009437, 1.6863968467734863258, 1.6720607540918522072, 1.6578219209482075462,
+ 1.6436741568569826489, 1.6296114794646783962, 1.6156280950371329644, 1.6017183802152770587,
+ 1.5878768648844007019, 1.5740982160167497219, 1.5603772223598406870, 1.5467087798535034608,
+ 1.5330878776675560787, 1.5195095847593707806, 1.5059690368565502602, 1.4924614237746154081,
+ 1.4789819769830978546, 1.4655259573357946276, 1.4520886428822164926, 1.4386653166774613138,
+ 1.4252512545068615734, 1.4118417124397602509, 1.3984319141236063517, 1.3850170377251486449,
+ 1.3715922024197322698, 1.3581524543224228739, 1.3446927517457130432, 1.3312079496576765017,
+ 1.3176927832013429910, 1.3041418501204215390, 1.2905495919178731508, 1.2769102735516997175,
+ 1.2632179614460282310, 1.2494664995643337480, 1.2356494832544811749, 1.2217602305309625678,
+ 1.2077917504067576028, 1.1937367078237721994, 1.1795873846544607035, 1.1653356361550469083,
+ 1.1509728421389760651, 1.1364898520030755352, 1.1218769225722540661, 1.1071236475235353980,
+ 1.0922188768965537614, 1.0771506248819376573, 1.0619059636836193998, 1.0464709007525802629,
+ 1.0308302360564555907, 1.0149673952392994716, 0.99886423348064351303, 0.98250080350276038481,
+ 0.96585507938813059489, 0.94890262549791195381, 0.93161619660135381056, 0.91396525100880177644,
+ 0.89591535256623852894, 0.87742742909771569142, 0.85845684317805086354, 0.83895221428120745572,
+ 0.81885390668331772331, 0.79809206062627480454, 0.77658398787614838598, 0.75423066443451007146,
+ 0.73091191062188128150, 0.70647961131360803456, 0.68074791864590421664, 0.65347863871504238702,
+ 0.62435859730908822111, 0.59296294244197797913, 0.55869217837551797140, 0.52065603872514491759,
+ 0.47743783725378787681, 0.42654798630330512490, 0.36287143102841830424, 0.27232086470466385065,
+ 0
+};
+
+template<class RealType>
+const RealType normal_table<RealType>::table_y[129] = {
+ 0, 0.0026696290839025035092, 0.0055489952208164705392, 0.0086244844129304709682,
+ 0.011839478657982313715, 0.015167298010672042468, 0.018592102737165812650, 0.022103304616111592615,
+ 0.025693291936149616572, 0.029356317440253829618, 0.033087886146505155566, 0.036884388786968774128,
+ 0.040742868074790604632, 0.044660862200872429800, 0.048636295860284051878, 0.052667401903503169793,
+ 0.056752663481538584188, 0.060890770348566375972, 0.065080585213631873753, 0.069321117394180252601,
+ 0.073611501884754893389, 0.077950982514654714188, 0.082338898242957408243, 0.086774671895542968998,
+ 0.091257800827634710201, 0.09578784912257815216, 0.10036444102954554013, 0.10498725541035453978,
+ 0.10965602101581776100, 0.11437051244988827452, 0.11913054670871858767, 0.12393598020398174246,
+ 0.12878670619710396109, 0.13368265258464764118, 0.13862377998585103702, 0.14361008009193299469,
+ 0.14864157424369696566, 0.15371831220958657066, 0.15884037114093507813, 0.16400785468492774791,
+ 0.16922089223892475176, 0.17447963833240232295, 0.17978427212496211424, 0.18513499701071343216,
+ 0.19053204032091372112, 0.19597565311811041399, 0.20146611007620324118, 0.20700370944187380064,
+ 0.21258877307373610060, 0.21822164655637059599, 0.22390269938713388747, 0.22963232523430270355,
+ 0.23541094226572765600, 0.24123899354775131610, 0.24711694751469673582, 0.25304529850976585934,
+ 0.25902456739871074263, 0.26505530225816194029, 0.27113807914102527343, 0.27727350292189771153,
+ 0.28346220822601251779, 0.28970486044581049771, 0.29600215684985583659, 0.30235482778947976274,
+ 0.30876363800925192282, 0.31522938806815752222, 0.32175291587920862031, 0.32833509837615239609,
+ 0.33497685331697116147, 0.34167914123501368412, 0.34844296754987246935, 0.35526938485154714435,
+ 0.36215949537303321162, 0.36911445366827513952, 0.37613546951445442947, 0.38322381105988364587,
+ 0.39038080824138948916, 0.39760785649804255208, 0.40490642081148835099, 0.41227804010702462062,
+ 0.41972433205403823467, 0.42724699830956239880, 0.43484783025466189638, 0.44252871528024661483,
+ 0.45029164368692696086, 0.45813871627287196483, 0.46607215269457097924, 0.47409430069824960453,
+ 0.48220764633483869062, 0.49041482528932163741, 0.49871863547658432422, 0.50712205108130458951,
+ 0.51562823824987205196, 0.52424057267899279809, 0.53296265938998758838, 0.54179835503172412311,
+ 0.55075179312105527738, 0.55982741271069481791, 0.56902999107472161225, 0.57836468112670231279,
+ 0.58783705444182052571, 0.59745315095181228217, 0.60721953663260488551, 0.61714337082656248870,
+ 0.62723248525781456578, 0.63749547734314487428, 0.64794182111855080873, 0.65858200005865368016,
+ 0.66942766735770616891, 0.68049184100641433355, 0.69178914344603585279, 0.70333609902581741633,
+ 0.71515150742047704368, 0.72725691835450587793, 0.73967724368333814856, 0.75244155918570380145,
+ 0.76558417390923599480, 0.77914608594170316563, 0.79317701178385921053, 0.80773829469612111340,
+ 0.82290721139526200050, 0.83878360531064722379, 0.85550060788506428418, 0.87324304892685358879,
+ 0.89228165080230272301, 0.91304364799203805999, 0.93628268170837107547, 0.96359969315576759960,
+ 1
+};
+
+template<class Engine>
+inline typename boost::make_unsigned<typename Engine::result_type>::type
+generate_one_digit(Engine& eng, std::size_t bits)
+{
+ typedef typename Engine::result_type base_result;
+ typedef typename boost::make_unsigned<base_result>::type base_unsigned;
+
+ base_unsigned range =
+ detail::subtract<base_result>()((eng.max)(), (eng.min)());
+ base_unsigned y0_mask = (base_unsigned(2) << (bits - 1)) - 1;
+ base_unsigned y0 = (range + 1) & ~y0_mask;
+ base_unsigned u;
+ do {
+ u = detail::subtract<base_result>()(eng(), (eng.min)());
+ } while(y0 != 0 && u > base_unsigned(y0 - 1));
+ return u & y0_mask;
+}
+
+template<class RealType, std::size_t w, class Engine>
+std::pair<RealType, int> generate_int_float_pair(Engine& eng, boost::mpl::true_)
+{
+ typedef typename Engine::result_type base_result;
+ typedef typename boost::make_unsigned<base_result>::type base_unsigned;
+
+ base_unsigned range =
+ detail::subtract<base_result>()((eng.max)(), (eng.min)());
+
+ std::size_t m =
+ (range == (std::numeric_limits<base_unsigned>::max)()) ?
+ std::numeric_limits<base_unsigned>::digits :
+ detail::integer_log2(range + 1);
+
+ int bucket = 0;
+ // process as many full digits as possible into the int part
+ for(std::size_t i = 0; i < w/m; ++i) {
+ base_unsigned u = generate_one_digit(eng, m);
+ bucket = (bucket << m) | u;
+ }
+ RealType r;
+
+ const std::size_t digits = std::numeric_limits<RealType>::digits;
+ {
+ base_unsigned u = generate_one_digit(eng, m);
+ base_unsigned mask = (base_unsigned(1) << (w%m)) - 1;
+ bucket = (bucket << (w%m)) | (mask & u);
+ const RealType mult = RealType(1)/RealType(base_unsigned(1) << (m - w%m));
+ // zero out unused bits
+ if (m - w%m > digits) {
+ u &= ~(base_unsigned(1) << (m - digits));
+ }
+ r = RealType(u >> (w%m)) * mult;
+ }
+ for(std::size_t i = m - w%m; i + m < digits; ++i) {
+ base_unsigned u = generate_one_digit(eng, m);
+ r += u;
+ r *= RealType(0.5)/RealType(base_unsigned(1) << (m - 1));
+ }
+ if (m - w%m < digits)
+ {
+ const std::size_t remaining = (digits - m + w%m) % m;
+ base_unsigned u = generate_one_digit(eng, m);
+ r += u & ((base_unsigned(2) << (remaining - 1)) - 1);
+ const RealType mult = RealType(0.5)/RealType(base_unsigned(1) << (remaining - 1));
+ r *= mult;
+ }
+ return std::make_pair(r, bucket);
+}
+
+template<class RealType, std::size_t w, class Engine>
+inline std::pair<RealType, int> generate_int_float_pair(Engine& eng, boost::mpl::false_)
+{
+ int bucket = uniform_int_distribution<>(0, (1 << w) - 1)(eng);
+ RealType r = uniform_01<RealType>()(eng);
+ return std::make_pair(r, bucket);
+}
+
+template<class RealType, std::size_t w, class Engine>
+inline std::pair<RealType, int> generate_int_float_pair(Engine& eng)
+{
+ typedef typename Engine::result_type base_result;
+ return generate_int_float_pair<RealType, w>(eng,
+ boost::is_integral<base_result>());
+}
+
+template<class RealType = double>
+struct unit_normal_distribution
+{
+ template<class Engine>
+ RealType operator()(Engine& eng) {
+ const double * const table_x = normal_table<double>::table_x;
+ const double * const table_y = normal_table<double>::table_y;
+ for(;;) {
+ std::pair<RealType, int> vals = generate_int_float_pair<RealType, 8>(eng);
+ int i = vals.second;
+ int sign = (i & 1) * 2 - 1;
+ i = i >> 1;
+ RealType x = vals.first * RealType(table_x[i]);
+ if(x < table_x[i + 1]) return x * sign;
+ if(i == 0) return generate_tail(eng) * sign;
+ RealType y = RealType(table_y[i]) + uniform_01<RealType>()(eng) * RealType(table_y[i + 1] - table_y[i]);
+ if (y < f(x)) return x * sign;
+ }
+ }
+ static RealType f(RealType x) {
+ using std::exp;
+ return exp(-x*x/2);
+ }
+ template<class Engine>
+ RealType generate_tail(Engine& eng) {
+ boost::random::exponential_distribution<RealType> exponential;
+ const RealType tail_start = RealType(normal_table<double>::table_x[1]);
+ for(;;) {
+ RealType x = exponential(eng)/tail_start;
+ RealType y = exponential(eng);
+ if(2*y > x*x) return x + tail_start;
+ }
+ }
+};
+
+}
+
// deterministic Box-Muller method, uses trigonometric functions
/**
@@ -37,7 +248,7 @@ namespace random {
* \random_distribution. Such a distribution produces random numbers
* @c x distributed with probability density function
* \f$\displaystyle p(x) =
- * \frac{1}{\sqrt{2\pi\sigma}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}
+ * \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}}
* \f$,
* where mean and sigma are the parameters of the distribution.
*/
@@ -98,8 +309,7 @@ public:
*/
explicit normal_distribution(const RealType& mean_arg = RealType(0.0),
const RealType& sigma_arg = RealType(1.0))
- : _mean(mean_arg), _sigma(sigma_arg),
- _r1(0), _r2(0), _cached_rho(0), _valid(false)
+ : _mean(mean_arg), _sigma(sigma_arg)
{
BOOST_ASSERT(_sigma >= RealType(0));
}
@@ -108,8 +318,7 @@ public:
* Constructs a @c normal_distribution object from its parameters.
*/
explicit normal_distribution(const param_type& parm)
- : _mean(parm.mean()), _sigma(parm.sigma()),
- _r1(0), _r2(0), _cached_rho(0), _valid(false)
+ : _mean(parm.mean()), _sigma(parm.sigma())
{}
/** Returns the mean of the distribution. */
@@ -131,39 +340,20 @@ public:
{
_mean = parm.mean();
_sigma = parm.sigma();
- _valid = false;
}
/**
* Effects: Subsequent uses of the distribution do not depend
* on values produced by any engine prior to invoking reset.
*/
- void reset() { _valid = false; }
+ void reset() { }
/** Returns a normal variate. */
template<class Engine>
result_type operator()(Engine& eng)
{
- using std::sqrt;
- using std::log;
- using std::sin;
- using std::cos;
-
- if(!_valid) {
- _r1 = boost::uniform_01<RealType>()(eng);
- _r2 = boost::uniform_01<RealType>()(eng);
- _cached_rho = sqrt(-result_type(2) * log(result_type(1)-_r2));
- _valid = true;
- } else {
- _valid = false;
- }
- // Can we have a boost::mathconst please?
- const result_type pi = result_type(3.14159265358979323846);
-
- return _cached_rho * (_valid ?
- cos(result_type(2)*pi*_r1) :
- sin(result_type(2)*pi*_r1))
- * _sigma + _mean;
+ detail::unit_normal_distribution<RealType> impl;
+ return impl(eng) * _sigma + _mean;
}
/** Returns a normal variate with parameters specified by @c param. */
@@ -176,17 +366,14 @@ public:
/** Writes a @c normal_distribution to a @c std::ostream. */
BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, normal_distribution, nd)
{
- os << nd._mean << " " << nd._sigma << " "
- << nd._valid << " " << nd._cached_rho << " " << nd._r1;
+ os << nd._mean << " " << nd._sigma;
return os;
}
/** Reads a @c normal_distribution from a @c std::istream. */
BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, normal_distribution, nd)
{
- is >> std::ws >> nd._mean >> std::ws >> nd._sigma
- >> std::ws >> nd._valid >> std::ws >> nd._cached_rho
- >> std::ws >> nd._r1;
+ is >> std::ws >> nd._mean >> std::ws >> nd._sigma;
return is;
}
@@ -196,9 +383,7 @@ public:
*/
BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(normal_distribution, lhs, rhs)
{
- return lhs._mean == rhs._mean && lhs._sigma == rhs._sigma
- && lhs._valid == rhs._valid
- && (!lhs._valid || (lhs._r1 == rhs._r1 && lhs._r2 == rhs._r2));
+ return lhs._mean == rhs._mean && lhs._sigma == rhs._sigma;
}
/**
@@ -209,8 +394,6 @@ public:
private:
RealType _mean, _sigma;
- RealType _r1, _r2, _cached_rho;
- bool _valid;
};
diff --git a/3party/boost/boost/random/piecewise_constant_distribution.hpp b/3party/boost/boost/random/piecewise_constant_distribution.hpp
index acfa5ee076..697a374087 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 83381 2013-03-09 22:55:05Z eric_niebler $
+ * $Id$
*/
#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 25be0fd793..861cf429c5 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 83381 2013-03-09 22:55:05Z eric_niebler $
+ * $Id$
*/
#ifndef BOOST_RANDOM_PIECEWISE_LINEAR_DISTRIBUTION_HPP_INCLUDED
diff --git a/3party/boost/boost/random/poisson_distribution.hpp b/3party/boost/boost/random/poisson_distribution.hpp
index c1eac37164..759f206e42 100644
--- a/3party/boost/boost/random/poisson_distribution.hpp
+++ b/3party/boost/boost/random/poisson_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: poisson_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/random_device.hpp b/3party/boost/boost/random/random_device.hpp
index 6c9d872b39..8f3903c953 100644
--- a/3party/boost/boost/random/random_device.hpp
+++ b/3party/boost/boost/random/random_device.hpp
@@ -6,7 +6,7 @@
* accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
- * $Id: random_device.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2000-02-18 Portability fixes (thanks to Beman Dawes)
@@ -22,6 +22,7 @@
#include <boost/config.hpp>
#include <boost/noncopyable.hpp>
#include <boost/random/detail/auto_link.hpp>
+#include <boost/system/config.hpp> // force autolink to find Boost.System
namespace boost {
namespace random {
diff --git a/3party/boost/boost/random/random_number_generator.hpp b/3party/boost/boost/random/random_number_generator.hpp
index f8eaf01bd5..ac975e3298 100644
--- a/3party/boost/boost/random/random_number_generator.hpp
+++ b/3party/boost/boost/random/random_number_generator.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: random_number_generator.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/ranlux.hpp b/3party/boost/boost/random/ranlux.hpp
index 88476665cf..82a7ca66f1 100644
--- a/3party/boost/boost/random/ranlux.hpp
+++ b/3party/boost/boost/random/ranlux.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: ranlux.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 created
@@ -37,7 +37,7 @@ namespace detail {
* The levels are given in
*
* @blockquote
- * "RANLUX: A Fortran implementation ofthe high-quality
+ * "RANLUX: A Fortran implementation of the high-quality
* pseudorandom number generator of Luescher", F. James,
* Computer Physics Communications 79 (1994) 111-114
* @endblockquote
diff --git a/3party/boost/boost/random/seed_seq.hpp b/3party/boost/boost/random/seed_seq.hpp
index 691d60fab7..9579d5bb9b 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 83381 2013-03-09 22:55:05Z eric_niebler $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/shuffle_order.hpp b/3party/boost/boost/random/shuffle_order.hpp
index 1c8d875d5b..646c09bafa 100644
--- a/3party/boost/boost/random/shuffle_order.hpp
+++ b/3party/boost/boost/random/shuffle_order.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: shuffle_order.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
@@ -98,7 +98,7 @@ public:
*/
explicit shuffle_order_engine(const base_type & rng) : _rng(rng) { init(); }
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
explicit shuffle_order_engine(base_type&& rng) : _rng(rng) { init(); }
#endif
diff --git a/3party/boost/boost/random/shuffle_output.hpp b/3party/boost/boost/random/shuffle_output.hpp
index 44b823f573..478e1029bd 100644
--- a/3party/boost/boost/random/shuffle_output.hpp
+++ b/3party/boost/boost/random/shuffle_output.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: shuffle_output.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
@@ -28,13 +28,13 @@ template<typename URNG, int k,
class shuffle_output : public shuffle_order_engine<URNG, k>
{
typedef shuffle_order_engine<URNG, k> base_t;
- typedef typename base_t::result_type result_type;
public:
+ typedef typename base_t::result_type result_type;
shuffle_output() {}
template<class T>
- shuffle_output(T& arg) : base_t(arg) {}
+ explicit shuffle_output(T& arg) : base_t(arg) {}
template<class T>
- shuffle_output(const T& arg) : base_t(arg) {}
+ explicit shuffle_output(const T& arg) : base_t(arg) {}
template<class It>
shuffle_output(It& first, It last) : base_t(first, last) {}
result_type min BOOST_PREVENT_MACRO_SUBSTITUTION ()
diff --git a/3party/boost/boost/random/student_t_distribution.hpp b/3party/boost/boost/random/student_t_distribution.hpp
index 665afdb556..e28b0e3bfb 100644
--- a/3party/boost/boost/random/student_t_distribution.hpp
+++ b/3party/boost/boost/random/student_t_distribution.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: student_t_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_STUDENT_T_DISTRIBUTION_HPP
diff --git a/3party/boost/boost/random/subtract_with_carry.hpp b/3party/boost/boost/random/subtract_with_carry.hpp
index 4ea41077e3..dc430e6d55 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 83381 2013-03-09 22:55:05Z eric_niebler $
+ * $Id$
*
* Revision history
* 2002-03-02 created
diff --git a/3party/boost/boost/random/taus88.hpp b/3party/boost/boost/random/taus88.hpp
index c9d381044c..68214f3aed 100644
--- a/3party/boost/boost/random/taus88.hpp
+++ b/3party/boost/boost/random/taus88.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org/libs/random for documentation.
*
- * $Id: taus88.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/triangle_distribution.hpp b/3party/boost/boost/random/triangle_distribution.hpp
index 8776000982..5ac6604713 100644
--- a/3party/boost/boost/random/triangle_distribution.hpp
+++ b/3party/boost/boost/random/triangle_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: triangle_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
diff --git a/3party/boost/boost/random/uniform_01.hpp b/3party/boost/boost/random/uniform_01.hpp
index d32a08546f..9710b766ea 100644
--- a/3party/boost/boost/random/uniform_01.hpp
+++ b/3party/boost/boost/random/uniform_01.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: uniform_01.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
@@ -128,7 +128,7 @@ public:
BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
-#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300)
+#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
#endif
diff --git a/3party/boost/boost/random/uniform_int.hpp b/3party/boost/boost/random/uniform_int.hpp
index 7ae3b92a0f..4362652593 100644
--- a/3party/boost/boost/random/uniform_int.hpp
+++ b/3party/boost/boost/random/uniform_int.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: uniform_int.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-04-08 added min<max assertion (N. Becker)
diff --git a/3party/boost/boost/random/uniform_int_distribution.hpp b/3party/boost/boost/random/uniform_int_distribution.hpp
index 0612028ea9..a175025edc 100644
--- a/3party/boost/boost/random/uniform_int_distribution.hpp
+++ b/3party/boost/boost/random/uniform_int_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: uniform_int_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-04-08 added min<max assertion (N. Becker)
diff --git a/3party/boost/boost/random/uniform_on_sphere.hpp b/3party/boost/boost/random/uniform_on_sphere.hpp
index 04071dc2b6..fdd4e950bb 100644
--- a/3party/boost/boost/random/uniform_on_sphere.hpp
+++ b/3party/boost/boost/random/uniform_on_sphere.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: uniform_on_sphere.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-02-18 moved to individual header files
@@ -152,7 +152,7 @@ public:
* Effects: Subsequent uses of the distribution do not depend
* on values produced by any engine prior to invoking reset.
*/
- void reset() { _normal.reset(); }
+ void reset() {}
/**
* Returns a point uniformly distributed over the surface of
@@ -161,18 +161,73 @@ public:
template<class Engine>
const result_type & operator()(Engine& eng)
{
- RealType sqsum = 0;
- for(typename Cont::iterator it = _container.begin();
- it != _container.end();
- ++it) {
- RealType val = _normal(eng);
- *it = val;
- sqsum += val * val;
- }
using std::sqrt;
- // for all i: result[i] /= sqrt(sqsum)
- std::transform(_container.begin(), _container.end(), _container.begin(),
- std::bind2nd(std::divides<RealType>(), sqrt(sqsum)));
+ switch(_dim)
+ {
+ case 0: break;
+ case 1:
+ {
+ if(uniform_01<RealType>()(eng) < 0.5) {
+ *_container.begin() = -1;
+ } else {
+ *_container.begin() = 1;
+ }
+ }
+ case 2:
+ {
+ uniform_01<RealType> uniform;
+ RealType sqsum;
+ RealType x, y;
+ do {
+ x = uniform(eng) * 2 - 1;
+ y = uniform(eng) * 2 - 1;
+ sqsum = x*x + y*y;
+ } while(sqsum == 0 || sqsum > 1);
+ RealType mult = 1/sqrt(sqsum);
+ typename Cont::iterator iter = _container.begin();
+ *iter = x * mult;
+ iter++;
+ *iter = y * mult;
+ break;
+ }
+ case 3:
+ {
+ uniform_01<RealType> uniform;
+ RealType sqsum;
+ RealType x, y, z;
+ do {
+ x = uniform(eng) * 2 - 1;
+ y = uniform(eng) * 2 - 1;
+ sqsum = x*x + y*y;
+ } while(sqsum > 1);
+ RealType mult = 2 * sqrt(1 - sqsum);
+ typename Cont::iterator iter = _container.begin();
+ *iter = x * mult;
+ ++iter;
+ *iter = y * mult;
+ ++iter;
+ *iter = 2 * sqsum - 1;
+ break;
+ }
+ default:
+ {
+ detail::unit_normal_distribution<RealType> normal;
+ RealType sqsum;
+ do {
+ sqsum = 0;
+ for(typename Cont::iterator it = _container.begin();
+ it != _container.end();
+ ++it) {
+ RealType val = normal(eng);
+ *it = val;
+ sqsum += val * val;
+ }
+ } while(sqsum == 0);
+ // for all i: result[i] /= sqrt(sqsum)
+ std::transform(_container.begin(), _container.end(), _container.begin(),
+ std::bind2nd(std::multiplies<RealType>(), 1/sqrt(sqsum)));
+ }
+ }
return _container;
}
@@ -206,7 +261,7 @@ public:
* sequences of values, given equal generators.
*/
BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(uniform_on_sphere, lhs, rhs)
- { return lhs._dim == rhs._dim && lhs._normal == rhs._normal; }
+ { return lhs._dim == rhs._dim; }
/**
* Returns true if the two distributions may produce different
@@ -215,7 +270,6 @@ public:
BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(uniform_on_sphere)
private:
- normal_distribution<RealType> _normal;
result_type _container;
int _dim;
};
diff --git a/3party/boost/boost/random/uniform_real.hpp b/3party/boost/boost/random/uniform_real.hpp
index 396072e2d8..c98626e779 100644
--- a/3party/boost/boost/random/uniform_real.hpp
+++ b/3party/boost/boost/random/uniform_real.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: uniform_real.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-04-08 added min<max assertion (N. Becker)
@@ -63,7 +63,7 @@ public:
RealType max_arg = RealType(1.0))
: base_type(min_arg, max_arg)
{
- BOOST_ASSERT(min_arg <= max_arg);
+ BOOST_ASSERT(min_arg < max_arg);
}
/** Constructs a uniform_real distribution from its parameters. */
diff --git a/3party/boost/boost/random/uniform_real_distribution.hpp b/3party/boost/boost/random/uniform_real_distribution.hpp
index 61b235a31c..437ee69330 100644
--- a/3party/boost/boost/random/uniform_real_distribution.hpp
+++ b/3party/boost/boost/random/uniform_real_distribution.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: uniform_real_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
@@ -36,7 +36,6 @@ T generate_uniform_real(
{
for(;;) {
typedef T result_type;
- typedef typename Engine::result_type base_result;
result_type numerator = static_cast<T>(eng() - (eng.min)());
result_type divisor = static_cast<T>((eng.max)() - (eng.min)());
BOOST_ASSERT(divisor > 0);
@@ -66,6 +65,8 @@ T generate_uniform_real(
template<class Engine, class T>
inline T generate_uniform_real(Engine& eng, T min_value, T max_value)
{
+ if(max_value / 2 - min_value / 2 > (std::numeric_limits<T>::max)() / 2)
+ return 2 * generate_uniform_real(eng, min_value / 2, max_value / 2);
typedef typename Engine::result_type base_result;
return generate_uniform_real(eng, min_value, max_value,
boost::is_integral<base_result>());
@@ -100,7 +101,7 @@ public:
RealType max_arg = RealType(1.0))
: _min(min_arg), _max(max_arg)
{
- BOOST_ASSERT(_min <= _max);
+ BOOST_ASSERT(_min < _max);
}
/** Returns the minimum value of the distribution. */
@@ -154,7 +155,7 @@ public:
RealType max_arg = RealType(1.0))
: _min(min_arg), _max(max_arg)
{
- BOOST_ASSERT(min_arg <= max_arg);
+ BOOST_ASSERT(min_arg < max_arg);
}
/** Constructs a uniform_real_distribution from its parameters. */
explicit uniform_real_distribution(const param_type& parm)
diff --git a/3party/boost/boost/random/uniform_smallint.hpp b/3party/boost/boost/random/uniform_smallint.hpp
index 745fa8e93b..4f5f437517 100644
--- a/3party/boost/boost/random/uniform_smallint.hpp
+++ b/3party/boost/boost/random/uniform_smallint.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: uniform_smallint.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
* Revision history
* 2001-04-08 added min<max assertion (N. Becker)
diff --git a/3party/boost/boost/random/variate_generator.hpp b/3party/boost/boost/random/variate_generator.hpp
index ac698006c2..6d5aac4e47 100644
--- a/3party/boost/boost/random/variate_generator.hpp
+++ b/3party/boost/boost/random/variate_generator.hpp
@@ -8,7 +8,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: variate_generator.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
diff --git a/3party/boost/boost/random/weibull_distribution.hpp b/3party/boost/boost/random/weibull_distribution.hpp
index 2c8a26f770..55e3c04903 100644
--- a/3party/boost/boost/random/weibull_distribution.hpp
+++ b/3party/boost/boost/random/weibull_distribution.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: weibull_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*/
#ifndef BOOST_RANDOM_WEIBULL_DISTRIBUTION_HPP
diff --git a/3party/boost/boost/random/xor_combine.hpp b/3party/boost/boost/random/xor_combine.hpp
index d997a1c1a0..fe8a58b40f 100644
--- a/3party/boost/boost/random/xor_combine.hpp
+++ b/3party/boost/boost/random/xor_combine.hpp
@@ -7,7 +7,7 @@
*
* See http://www.boost.org for most recent version including documentation.
*
- * $Id: xor_combine.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
+ * $Id$
*
*/
@@ -24,6 +24,7 @@
#include <boost/random/detail/config.hpp>
#include <boost/random/detail/seed.hpp>
#include <boost/random/detail/seed_impl.hpp>
+#include <boost/random/detail/operators.hpp>
namespace boost {
namespace random {
diff --git a/3party/boost/boost/range.hpp b/3party/boost/boost/range.hpp
index 948c3d75e4..179ae22492 100644
--- a/3party/boost/boost/range.hpp
+++ b/3party/boost/boost/range.hpp
@@ -11,23 +11,13 @@
#ifndef BOOST_RANGE_HPP_27_07_04
#define BOOST_RANGE_HPP_27_07_04
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
-#if _MSC_VER == 1300 // experiment
-
-#include <boost/range/detail/collection_traits.hpp>
-#include <boost/range/iterator_range.hpp>
-#include <boost/range/sub_range.hpp>
-
-#else
-
#include <boost/range/functions.hpp>
#include <boost/range/metafunctions.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/range/sub_range.hpp>
-#endif // _MSC_VER == 1300 // experiment
-
#endif
diff --git a/3party/boost/boost/range/adaptor/adjacent_filtered.hpp b/3party/boost/boost/range/adaptor/adjacent_filtered.hpp
index f717cb3ecc..287a4ae773 100644
--- a/3party/boost/boost/range/adaptor/adjacent_filtered.hpp
+++ b/3party/boost/boost/range/adaptor/adjacent_filtered.hpp
@@ -21,6 +21,7 @@
#include <boost/range/iterator_range.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/next_prior.hpp>
@@ -62,56 +63,46 @@ namespace boost
, pred_t(pred)
, m_last(last)
{
- move_to_next_valid();
}
template<class OtherIter>
skip_iterator( const skip_iterator<OtherIter, pred_t, default_pass>& other )
: base_t(other.base())
, pred_t(other)
- , m_last(other.m_last) {}
+ , m_last(other.m_last)
+ {
+ }
- void move_to_next_valid()
+ void increment()
{
iter_t& it = this->base_reference();
+ BOOST_ASSERT( it != m_last );
pred_t& bi_pred = *this;
+ iter_t prev = it;
+ ++it;
if (it != m_last)
{
if (default_pass)
{
- iter_t nxt = ::boost::next(it);
- while (nxt != m_last && !bi_pred(*it, *nxt))
+ while (it != m_last && !bi_pred(*prev, *it))
{
++it;
- ++nxt;
+ ++prev;
}
}
else
{
- iter_t nxt = ::boost::next(it);
- for(; nxt != m_last; ++it, ++nxt)
+ for (; it != m_last; ++it, ++prev)
{
- if (bi_pred(*it, *nxt))
+ if (bi_pred(*prev, *it))
{
break;
}
}
- if (nxt == m_last)
- {
- it = m_last;
- }
}
}
}
- void increment()
- {
- iter_t& it = this->base_reference();
- BOOST_ASSERT( it != m_last );
- ++it;
- move_to_next_valid();
- }
-
iter_t m_last;
};
@@ -164,6 +155,8 @@ namespace boost
operator|( ForwardRng& r,
const adjacent_holder<BinPredicate>& f )
{
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));
+
return adjacent_filtered_range<BinPredicate, ForwardRng, true>( f.val, r );
}
@@ -172,6 +165,8 @@ namespace boost
operator|( const ForwardRng& r,
const adjacent_holder<BinPredicate>& f )
{
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));
+
return adjacent_filtered_range<BinPredicate,
const ForwardRng, true>( f.val, r );
}
@@ -181,6 +176,7 @@ namespace boost
operator|( ForwardRng& r,
const adjacent_excl_holder<BinPredicate>& f )
{
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));
return adjacent_filtered_range<BinPredicate, ForwardRng, false>( f.val, r );
}
@@ -189,6 +185,7 @@ namespace boost
operator|( const ForwardRng& r,
const adjacent_excl_holder<BinPredicate>& f )
{
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));
return adjacent_filtered_range<BinPredicate,
const ForwardRng, false>( f.val, r );
}
@@ -217,6 +214,7 @@ namespace boost
inline adjacent_filtered_range<BinPredicate, ForwardRng, true>
adjacent_filter(ForwardRng& rng, BinPredicate filter_pred)
{
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));
return adjacent_filtered_range<BinPredicate, ForwardRng, true>(filter_pred, rng);
}
@@ -224,6 +222,7 @@ namespace boost
inline adjacent_filtered_range<BinPredicate, const ForwardRng, true>
adjacent_filter(const ForwardRng& rng, BinPredicate filter_pred)
{
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));
return adjacent_filtered_range<BinPredicate, const ForwardRng, true>(filter_pred, rng);
}
diff --git a/3party/boost/boost/range/adaptor/copied.hpp b/3party/boost/boost/range/adaptor/copied.hpp
index f4cf2d13af..f7dfbcd846 100644
--- a/3party/boost/boost/range/adaptor/copied.hpp
+++ b/3party/boost/boost/range/adaptor/copied.hpp
@@ -1,6 +1,6 @@
// Boost.Range library
//
-// Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+// Copyright Thorsten Ottosen, Neil Groves 2006. 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)
@@ -15,6 +15,7 @@
#include <boost/range/adaptor/sliced.hpp>
#include <boost/range/size_type.hpp>
#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
namespace boost
{
@@ -29,25 +30,34 @@ namespace boost
std::size_t u;
};
- template< class CopyableRandomAccessRng >
- inline CopyableRandomAccessRng
- operator|( const CopyableRandomAccessRng& r, const copied& f )
+ template<class CopyableRandomAccessRange>
+ inline CopyableRandomAccessRange
+ operator|(const CopyableRandomAccessRange& r, const copied& f)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ RandomAccessRangeConcept<const CopyableRandomAccessRange>));
+
iterator_range<
- BOOST_DEDUCED_TYPENAME range_iterator<const
- CopyableRandomAccessRng>::type >
- temp( adaptors::slice( r, f.t, f.u ) );
- return CopyableRandomAccessRng( temp.begin(), temp.end() );
+ BOOST_DEDUCED_TYPENAME range_iterator<
+ const CopyableRandomAccessRange
+ >::type
+ > temp(adaptors::slice(r, f.t, f.u));
+
+ return CopyableRandomAccessRange(temp.begin(), temp.end());
}
template<class CopyableRandomAccessRange>
inline CopyableRandomAccessRange
copy(const CopyableRandomAccessRange& rng, std::size_t t, std::size_t u)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ RandomAccessRangeConcept<const CopyableRandomAccessRange>));
+
iterator_range<
- BOOST_DEDUCED_TYPENAME range_iterator<const
- CopyableRandomAccessRange>::type> temp(
- adaptors::slice(rng, t, u));
+ BOOST_DEDUCED_TYPENAME range_iterator<
+ const CopyableRandomAccessRange
+ >::type
+ > temp(adaptors::slice(rng, t, u));
return CopyableRandomAccessRange( temp.begin(), temp.end() );
}
@@ -55,4 +65,4 @@ namespace boost
}
-#endif
+#endif // include guard
diff --git a/3party/boost/boost/range/adaptor/filtered.hpp b/3party/boost/boost/range/adaptor/filtered.hpp
index d9315bd221..b6d3ab1927 100644
--- a/3party/boost/boost/range/adaptor/filtered.hpp
+++ b/3party/boost/boost/range/adaptor/filtered.hpp
@@ -12,7 +12,9 @@
#define BOOST_RANGE_ADAPTOR_FILTERED_HPP
#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/detail/default_constructible_unary_fn.hpp>
#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
#include <boost/iterator/filter_iterator.hpp>
namespace boost
@@ -22,21 +24,28 @@ namespace boost
template< class P, class R >
struct filtered_range :
boost::iterator_range<
- boost::filter_iterator< P,
- BOOST_DEDUCED_TYPENAME range_iterator<R>::type
+ boost::filter_iterator<
+ typename default_constructible_unary_fn_gen<P, bool>::type,
+ typename range_iterator<R>::type
>
>
{
private:
typedef boost::iterator_range<
- boost::filter_iterator< P,
- BOOST_DEDUCED_TYPENAME range_iterator<R>::type
- >
- > base;
+ boost::filter_iterator<
+ typename default_constructible_unary_fn_gen<P, bool>::type,
+ typename range_iterator<R>::type
+ >
+ > base;
public:
- filtered_range( P p, R& r )
- : base( make_filter_iterator( p, boost::begin(r), boost::end(r) ),
- make_filter_iterator( p, boost::end(r), boost::end(r) ) )
+ typedef typename default_constructible_unary_fn_gen<P, bool>::type
+ pred_t;
+
+ filtered_range(P p, R& r)
+ : base(make_filter_iterator(pred_t(p),
+ boost::begin(r), boost::end(r)),
+ make_filter_iterator(pred_t(p),
+ boost::end(r), boost::end(r)))
{ }
};
@@ -47,20 +56,23 @@ namespace boost
{ }
};
- template< class InputRng, class Predicate >
- inline filtered_range<Predicate, InputRng>
- operator|( InputRng& r,
- const filter_holder<Predicate>& f )
+ template< class ForwardRange, class Predicate >
+ inline filtered_range<Predicate, ForwardRange>
+ operator|(ForwardRange& r,
+ const filter_holder<Predicate>& f)
{
- return filtered_range<Predicate, InputRng>( f.val, r );
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+ return filtered_range<Predicate, ForwardRange>( f.val, r );
}
- template< class InputRng, class Predicate >
- inline filtered_range<Predicate, const InputRng>
- operator|( const InputRng& r,
- const filter_holder<Predicate>& f )
+ template< class ForwardRange, class Predicate >
+ inline filtered_range<Predicate, const ForwardRange>
+ operator|(const ForwardRange& r,
+ const filter_holder<Predicate>& f )
{
- return filtered_range<Predicate, const InputRng>( f.val, r );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ ForwardRangeConcept<const ForwardRange>));
+ return filtered_range<Predicate, const ForwardRange>( f.val, r );
}
} // 'range_detail'
@@ -81,18 +93,23 @@ namespace boost
range_detail::forwarder<range_detail::filter_holder>();
}
- template<class InputRange, class Predicate>
- inline filtered_range<Predicate, InputRange>
- filter(InputRange& rng, Predicate filter_pred)
+ template<class ForwardRange, class Predicate>
+ inline filtered_range<Predicate, ForwardRange>
+ filter(ForwardRange& rng, Predicate filter_pred)
{
- return range_detail::filtered_range<Predicate, InputRange>( filter_pred, rng );
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+
+ return range_detail::filtered_range<Predicate, ForwardRange>( filter_pred, rng );
}
- template<class InputRange, class Predicate>
- inline filtered_range<Predicate, const InputRange>
- filter(const InputRange& rng, Predicate filter_pred)
+ template<class ForwardRange, class Predicate>
+ inline filtered_range<Predicate, const ForwardRange>
+ filter(const ForwardRange& rng, Predicate filter_pred)
{
- return range_detail::filtered_range<Predicate, const InputRange>( filter_pred, rng );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ ForwardRangeConcept<const ForwardRange>));
+
+ return range_detail::filtered_range<Predicate, const ForwardRange>( filter_pred, rng );
}
} // 'adaptors'
diff --git a/3party/boost/boost/range/adaptor/formatted.hpp b/3party/boost/boost/range/adaptor/formatted.hpp
new file mode 100644
index 0000000000..f31f1bceb2
--- /dev/null
+++ b/3party/boost/boost/range/adaptor/formatted.hpp
@@ -0,0 +1,229 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2014.
+// 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/range/
+//
+#ifndef BOOST_RANGE_ADAPTOR_FORMATTED_HPP_INCLUDED
+#define BOOST_RANGE_ADAPTOR_FORMATTED_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/remove_extent.hpp>
+#include <ostream>
+
+namespace boost
+{
+ namespace range_detail
+ {
+
+template<typename Sep, typename Prefix, typename Postfix>
+struct formatted_holder
+{
+ typedef typename boost::mpl::if_<
+ boost::is_array<Sep>,
+ const typename boost::remove_extent<Sep>::type*,
+ Sep
+ >::type separator_t;
+
+ typedef typename boost::mpl::if_<
+ boost::is_array<Prefix>,
+ const typename boost::remove_extent<Prefix>::type*,
+ Prefix
+ >::type prefix_t;
+
+ typedef typename boost::mpl::if_<
+ boost::is_array<Postfix>,
+ const typename boost::remove_extent<Postfix>::type*,
+ Postfix
+ >::type postfix_t;
+
+ formatted_holder(
+ const separator_t& sep,
+ const prefix_t& prefix,
+ const postfix_t& postfix)
+ : m_sep(sep)
+ , m_prefix(prefix)
+ , m_postfix(postfix)
+ {
+ }
+
+ separator_t m_sep;
+ prefix_t m_prefix;
+ postfix_t m_postfix;
+};
+
+template<typename Iter, typename Sep, typename Prefix, typename Postfix>
+class formatted_range
+ : public boost::iterator_range<Iter>
+{
+ typedef formatted_holder<Sep,Prefix,Postfix> holder_t;
+public:
+ formatted_range(Iter first, Iter last, const holder_t& holder)
+ : boost::iterator_range<Iter>(first, last)
+ , m_holder(holder)
+ {
+ }
+
+ template<typename OStream>
+ void write(OStream& out) const
+ {
+ Iter it(this->begin());
+ out << m_holder.m_prefix;
+ if (it != this->end())
+ {
+ out << *it;
+ for (++it; it != this->end(); ++it)
+ {
+ out << m_holder.m_sep << *it;
+ }
+ }
+ out << m_holder.m_postfix;
+ }
+
+private:
+ holder_t m_holder;
+};
+
+template<
+ typename SinglePassRange,
+ typename Sep,
+ typename Prefix,
+ typename Postfix
+>
+inline range_detail::formatted_range<
+ typename range_iterator<const SinglePassRange>::type, Sep, Prefix, Postfix
+>
+operator|(
+ const SinglePassRange& rng,
+ const range_detail::formatted_holder<Sep,Prefix,Postfix>& holder
+)
+{
+ typedef typename range_iterator<const SinglePassRange>::type iterator;
+ return range_detail::formatted_range<iterator, Sep, Prefix, Postfix>(
+ boost::begin(rng), boost::end(rng), holder);
+}
+
+template<typename Char, typename Traits, typename Iter, typename Sep,
+ typename Prefix, typename Postfix>
+std::basic_ostream<Char, Traits>&
+operator<<(
+ std::basic_ostream<Char, Traits>& out,
+ const formatted_range<Iter, Sep, Prefix, Postfix>& writer)
+{
+ writer.write(out);
+ return out;
+}
+
+ } // namespace range_detail
+
+ namespace adaptors
+ {
+
+template<typename Sep, typename Prefix, typename Postfix>
+range_detail::formatted_holder<Sep, Prefix, Postfix>
+formatted(const Sep& sep, const Prefix& prefix, const Postfix& postfix)
+{
+ return range_detail::formatted_holder<Sep,Prefix,Postfix>(
+ sep, prefix, postfix);
+}
+
+template<typename Sep, typename Prefix>
+range_detail::formatted_holder<Sep, Prefix, char>
+formatted(const Sep& sep, const Prefix& prefix)
+{
+ return range_detail::formatted_holder<Sep, Prefix, char>(sep, prefix, '}');
+}
+
+template<typename Sep>
+range_detail::formatted_holder<Sep, char, char>
+formatted(const Sep& sep)
+{
+ return range_detail::formatted_holder<Sep, char, char>(sep, '{', '}');
+}
+
+inline range_detail::formatted_holder<char, char, char>
+formatted()
+{
+ return range_detail::formatted_holder<char, char, char>(',', '{', '}');
+}
+
+using range_detail::formatted_range;
+
+template<typename SinglePassRange, typename Sep, typename Prefix,
+ typename Postfix>
+inline boost::range_detail::formatted_range<
+ typename boost::range_iterator<const SinglePassRange>::type,
+ Sep, Prefix, Postfix
+>
+format(
+ const SinglePassRange& rng,
+ const Sep& sep,
+ const Prefix& prefix,
+ const Postfix& postfix
+)
+{
+ typedef typename boost::range_iterator<const SinglePassRange>::type
+ iterator_t;
+
+ typedef boost::range_detail::formatted_range<
+ iterator_t, Sep, Prefix, Postfix> result_t;
+
+ typedef boost::range_detail::formatted_holder<Sep, Prefix, Postfix>
+ holder_t;
+
+ return result_t(boost::begin(rng), boost::end(rng),
+ holder_t(sep, prefix, postfix));
+}
+
+template<typename SinglePassRange, typename Sep, typename Prefix>
+inline boost::range_detail::formatted_range<
+ typename boost::range_iterator<const SinglePassRange>::type,
+ Sep, Prefix, char
+>
+format(
+ const SinglePassRange& rng,
+ const Sep& sep,
+ const Prefix& prefix)
+{
+ return adaptors::format<SinglePassRange, Sep, Prefix, char>(rng, sep, prefix, '}');
+}
+
+template<typename SinglePassRange, typename Sep>
+inline boost::range_detail::formatted_range<
+ typename boost::range_iterator<const SinglePassRange>::type,
+ Sep, char, char
+>
+format(const SinglePassRange& rng, const Sep& sep)
+{
+ return adaptors::format<SinglePassRange, Sep, char, char>(rng, sep, '{', '}');
+}
+
+template<typename SinglePassRange>
+inline boost::range_detail::formatted_range<
+ typename boost::range_iterator<const SinglePassRange>::type,
+ char, char, char
+>
+format(const SinglePassRange& rng)
+{
+ return adaptors::format<SinglePassRange, char, char, char>(rng, ',', '{', '}');
+}
+
+ } // namespace adaptors
+
+ namespace range
+ {
+ using boost::range_detail::formatted_range;
+ } // namespace range
+} // namespace boost
+
+#endif // include guard
diff --git a/3party/boost/boost/range/adaptor/indexed.hpp b/3party/boost/boost/range/adaptor/indexed.hpp
index cb2c1278a4..a426bd6b66 100644
--- a/3party/boost/boost/range/adaptor/indexed.hpp
+++ b/3party/boost/boost/range/adaptor/indexed.hpp
@@ -1,159 +1,370 @@
-// Boost.Range library
+// Copyright 2014 Neil Groves
//
-// Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
-// distribution is subject to the Boost Software License, Version
-// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// Copyright (c) 2010 Ilya Murav'jov
+//
+// 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/range/
+// Credits:
+// My (Neil's) first indexed adaptor was hindered by having the underlying
+// iterator return the same reference as the wrapped iterator. This meant that
+// to obtain the index one had to get to the index_iterator and call the
+// index() function on it. Ilya politely pointed out that this was useless in
+// a number of scenarios since one naturally hides the use of iterators in
+// good range-based code. Ilya provided a new interface (which has remained)
+// and a first implementation. Much of this original implementation has
+// been simplified and now supports more compilers and platforms.
//
+#ifndef BOOST_RANGE_ADAPTOR_INDEXED_HPP_INCLUDED
+#define BOOST_RANGE_ADAPTOR_INDEXED_HPP_INCLUDED
-#ifndef BOOST_RANGE_ADAPTOR_INDEXED_IMPL_HPP
-#define BOOST_RANGE_ADAPTOR_INDEXED_IMPL_HPP
-
-#include <boost/config.hpp>
-#ifdef BOOST_MSVC
-#pragma warning( push )
-#pragma warning( disable : 4355 )
-#endif
-
+#include <boost/range/config.hpp>
#include <boost/range/adaptor/argument_fwd.hpp>
#include <boost/range/iterator_range.hpp>
+#include <boost/range/traversal.hpp>
+#include <boost/range/size.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
-#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/tuple/tuple.hpp>
namespace boost
{
namespace adaptors
{
- // This structure exists to carry the parameters from the '|' operator
- // to the index adapter. The expression rng | indexed(1) instantiates
- // this structure and passes it as the right-hand operand to the
- // '|' operator.
- struct indexed
- {
- explicit indexed(std::size_t x) : val(x) {}
- std::size_t val;
- };
- }
-
- namespace range_detail
- {
- template< class Iter >
- class indexed_iterator
- : public boost::iterator_adaptor< indexed_iterator<Iter>, Iter >
- {
- private:
- typedef boost::iterator_adaptor< indexed_iterator<Iter>, Iter >
- base;
-
- typedef BOOST_DEDUCED_TYPENAME base::difference_type index_type;
-
- index_type m_index;
-
- public:
- indexed_iterator()
- : m_index(index_type()) {}
-
- explicit indexed_iterator( Iter i, index_type index )
- : base(i), m_index(index)
- {
- BOOST_ASSERT( m_index >= 0 && "Indexed Iterator out of bounds" );
- }
-
- index_type index() const
- {
- return m_index;
- }
-
- private:
- friend class boost::iterator_core_access;
-
- void increment()
- {
- ++m_index;
- ++(this->base_reference());
- }
-
-
- void decrement()
- {
- BOOST_ASSERT( m_index > 0 && "Indexed Iterator out of bounds" );
- --m_index;
- --(this->base_reference());
- }
-
- void advance( index_type n )
- {
- m_index += n;
- BOOST_ASSERT( m_index >= 0 && "Indexed Iterator out of bounds" );
- this->base_reference() += n;
- }
- };
-
- template< class Rng >
- struct indexed_range :
- iterator_range< indexed_iterator<BOOST_DEDUCED_TYPENAME range_iterator<Rng>::type> >
- {
- private:
- typedef indexed_iterator<BOOST_DEDUCED_TYPENAME range_iterator<Rng>::type>
- iter_type;
- typedef iterator_range<iter_type>
- base;
- public:
- template< class Index >
- indexed_range( Index i, Rng& r )
- : base( iter_type(boost::begin(r), i), iter_type(boost::end(r),i) )
- { }
- };
-
- } // 'range_detail'
-
- // Make this available to users of this library. It will sometimes be
- // required since it is the return type of operator '|' and
- // index().
+
+struct indexed
+{
+ explicit indexed(std::ptrdiff_t x = 0)
+ : val(x)
+ {
+ }
+ std::ptrdiff_t val;
+};
+
+ } // namespace adaptors
+
+ namespace range
+ {
+
+// Why yet another "pair" class:
+// - std::pair can't store references
+// - no need for typing for index type (default to "std::ptrdiff_t"); this is
+// useful in BOOST_FOREACH() expressions that have pitfalls with commas
+// ( see http://www.boost.org/doc/libs/1_44_0/doc/html/foreach/pitfalls.html )
+// - meaningful access functions index(), value()
+template<class T, class Indexable = std::ptrdiff_t>
+class index_value
+ : public tuple<Indexable, T>
+{
+ typedef tuple<Indexable, T> base_t;
+
+ template<int N>
+ struct iv_types
+ {
+ typedef typename tuples::element<N, base_t>::type n_type;
+
+ typedef typename tuples::access_traits<n_type>::non_const_type non_const_type;
+ typedef typename tuples::access_traits<n_type>::const_type const_type;
+ };
+
+public:
+ typedef typename iv_types<0>::non_const_type index_type;
+ typedef typename iv_types<0>::const_type const_index_type;
+ typedef typename iv_types<1>::non_const_type value_type;
+ typedef typename iv_types<1>::const_type const_value_type;
+
+ index_value()
+ {
+ }
+
+ index_value(typename tuples::access_traits<Indexable>::parameter_type t0,
+ typename tuples::access_traits<T>::parameter_type t1)
+ : base_t(t0, t1)
+ {
+ }
+
+ // member functions index(), value() (non-const and const)
+ index_type index()
+ {
+ return boost::tuples::get<0>(*this);
+ }
+
+ const_index_type index() const
+ {
+ return boost::tuples::get<0>(*this);
+ }
+
+ value_type value()
+ {
+ return boost::tuples::get<1>(*this);
+ }
+
+ const_value_type value() const
+ {
+ return boost::tuples::get<1>(*this);
+ }
+};
+
+ } // namespace range
+
+namespace range_detail
+{
+
+template<typename Iter>
+struct indexed_iterator_value_type
+{
+ typedef ::boost::range::index_value<
+ typename iterator_reference<Iter>::type,
+ typename iterator_difference<Iter>::type
+ > type;
+};
+
+// Meta-function to get the traversal for the range and therefore iterator
+// returned by the indexed adaptor for a specified iterator type.
+//
+// Random access -> Random access
+// Bidirectional -> Forward
+// Forward -> Forward
+// SinglePass -> SinglePass
+//
+// The rationale for demoting a Bidirectional input to Forward is that the end
+// iterator cannot cheaply have an index computed for it. Therefore I chose to
+// demote to forward traversal. I can maintain the ability to traverse randomly
+// when the input is Random Access since the index for the end iterator is cheap
+// to compute.
+template<typename Iter>
+struct indexed_traversal
+{
+private:
+ typedef typename iterator_traversal<Iter>::type wrapped_traversal;
+
+public:
+
+ typedef typename mpl::if_<
+ is_convertible<wrapped_traversal, random_access_traversal_tag>,
+ random_access_traversal_tag,
+ typename mpl::if_<
+ is_convertible<wrapped_traversal, bidirectional_traversal_tag>,
+ forward_traversal_tag,
+ wrapped_traversal
+ >::type
+ >::type type;
+};
+
+template<typename Iter>
+class indexed_iterator
+ : public iterator_facade<
+ indexed_iterator<Iter>,
+ typename indexed_iterator_value_type<Iter>::type,
+ typename indexed_traversal<Iter>::type,
+ typename indexed_iterator_value_type<Iter>::type,
+ typename iterator_difference<Iter>::type
+ >
+{
+public:
+ typedef Iter wrapped;
+
+private:
+ typedef iterator_facade<
+ indexed_iterator<wrapped>,
+ typename indexed_iterator_value_type<wrapped>::type,
+ typename indexed_traversal<wrapped>::type,
+ typename indexed_iterator_value_type<wrapped>::type,
+ typename iterator_difference<wrapped>::type
+ > base_t;
+
+public:
+ typedef typename base_t::difference_type difference_type;
+ typedef typename base_t::reference reference;
+ typedef typename base_t::difference_type index_type;
+
+ indexed_iterator()
+ : m_it()
+ , m_index()
+ {
+ }
+
+ template<typename OtherWrapped>
+ indexed_iterator(
+ const indexed_iterator<OtherWrapped>& other,
+ typename enable_if<is_convertible<OtherWrapped, wrapped> >::type* = 0
+ )
+ : m_it(other.get())
+ , m_index(other.get_index())
+ {
+ }
+
+ explicit indexed_iterator(wrapped it, index_type index)
+ : m_it(it)
+ , m_index(index)
+ {
+ }
+
+ wrapped get() const
+ {
+ return m_it;
+ }
+
+ index_type get_index() const
+ {
+ return m_index;
+ }
+
+ private:
+ friend class boost::iterator_core_access;
+
+ reference dereference() const
+ {
+ return reference(m_index, *m_it);
+ }
+
+ bool equal(const indexed_iterator& other) const
+ {
+ return m_it == other.m_it;
+ }
+
+ void increment()
+ {
+ ++m_index;
+ ++m_it;
+ }
+
+ void decrement()
+ {
+ BOOST_ASSERT_MSG(m_index > 0, "indexed Iterator out of bounds");
+ --m_index;
+ --m_it;
+ }
+
+ void advance(index_type n)
+ {
+ m_index += n;
+ BOOST_ASSERT_MSG(m_index >= 0, "indexed Iterator out of bounds");
+ m_it += n;
+ }
+
+ difference_type distance_to(const indexed_iterator& other) const
+ {
+ return other.m_it - m_it;
+ }
+
+ wrapped m_it;
+ index_type m_index;
+};
+
+template<typename SinglePassRange>
+struct indexed_range
+ : iterator_range<
+ indexed_iterator<
+ typename range_iterator<SinglePassRange>::type
+ >
+ >
+{
+ typedef iterator_range<
+ indexed_iterator<
+ typename range_iterator<SinglePassRange>::type
+ >
+ > base_t;
+
+ BOOST_RANGE_CONCEPT_ASSERT((
+ boost::SinglePassRangeConcept<SinglePassRange>));
+public:
+ typedef indexed_iterator<
+ typename range_iterator<SinglePassRange>::type
+ > iterator;
+
+ // Constructor for non-random access iterators.
+ // This sets the end iterator index to i despite this being incorrect it
+ // is never observable since bidirectional iterators are demoted to
+ // forward iterators.
+ indexed_range(
+ typename base_t::difference_type i,
+ SinglePassRange& r,
+ single_pass_traversal_tag
+ )
+ : base_t(iterator(boost::begin(r), i),
+ iterator(boost::end(r), i))
+ {
+ }
+
+ indexed_range(
+ typename base_t::difference_type i,
+ SinglePassRange& r,
+ random_access_traversal_tag
+ )
+ : base_t(iterator(boost::begin(r), i),
+ iterator(boost::end(r), i + boost::size(r)))
+ {
+ }
+};
+
+ } // namespace range_detail
+
using range_detail::indexed_range;
namespace adaptors
{
- template< class SinglePassRange >
- inline indexed_range<SinglePassRange>
- operator|( SinglePassRange& r,
- const indexed& f )
- {
- return indexed_range<SinglePassRange>( f.val, r );
- }
-
- template< class SinglePassRange >
- inline indexed_range<const SinglePassRange>
- operator|( const SinglePassRange& r,
- const indexed& f )
- {
- return indexed_range<const SinglePassRange>( f.val, r );
- }
-
- template<class SinglePassRange, class Index>
- inline indexed_range<SinglePassRange>
- index(SinglePassRange& rng, Index index_value)
- {
- return indexed_range<SinglePassRange>(index_value, rng);
- }
-
- template<class SinglePassRange, class Index>
- inline indexed_range<const SinglePassRange>
- index(const SinglePassRange& rng, Index index_value)
- {
- return indexed_range<const SinglePassRange>(index_value, rng);
- }
- } // 'adaptors'
+template<class SinglePassRange>
+inline indexed_range<SinglePassRange>
+operator|(SinglePassRange& r, indexed e)
+{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ boost::SinglePassRangeConcept<SinglePassRange>
+ ));
+ return indexed_range<SinglePassRange>(
+ e.val, r,
+ typename range_traversal<SinglePassRange>::type());
+}
+
+template<class SinglePassRange>
+inline indexed_range<const SinglePassRange>
+operator|(const SinglePassRange& r, indexed e)
+{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ boost::SinglePassRangeConcept<const SinglePassRange>
+ ));
+ return indexed_range<const SinglePassRange>(
+ e.val, r,
+ typename range_traversal<const SinglePassRange>::type());
+}
+
+template<class SinglePassRange>
+inline indexed_range<SinglePassRange>
+index(
+ SinglePassRange& rng,
+ typename range_difference<SinglePassRange>::type index_value = 0)
+{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ boost::SinglePassRangeConcept<SinglePassRange>
+ ));
+ return indexed_range<SinglePassRange>(
+ index_value, rng,
+ typename range_traversal<SinglePassRange>::type());
+}
+
+template<class SinglePassRange>
+inline indexed_range<const SinglePassRange>
+index(
+ const SinglePassRange& rng,
+ typename range_difference<const SinglePassRange>::type index_value = 0)
+{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ boost::SinglePassRangeConcept<SinglePassRange>
+ ));
+ return indexed_range<const SinglePassRange>(
+ index_value, rng,
+ typename range_traversal<const SinglePassRange>::type());
}
-#ifdef BOOST_MSVC
-#pragma warning( pop )
-#endif
+ } // namespace adaptors
+} // namespace boost
-#endif
+#endif // include guard
diff --git a/3party/boost/boost/range/adaptor/indirected.hpp b/3party/boost/boost/range/adaptor/indirected.hpp
index d7edc18f27..e741f17f5e 100644
--- a/3party/boost/boost/range/adaptor/indirected.hpp
+++ b/3party/boost/boost/range/adaptor/indirected.hpp
@@ -12,6 +12,7 @@
#define BOOST_RANGE_ADAPTOR_INDIRECTED_HPP
#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
#include <boost/iterator/indirect_iterator.hpp>
namespace boost
@@ -42,18 +43,24 @@ namespace boost
struct indirect_forwarder {};
- template< class InputRng >
- inline indirected_range<InputRng>
- operator|( InputRng& r, indirect_forwarder )
+ template< class SinglePassRange >
+ inline indirected_range<SinglePassRange>
+ operator|( SinglePassRange& r, indirect_forwarder )
{
- return indirected_range<InputRng>( r );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+
+ return indirected_range<SinglePassRange>( r );
}
- template< class InputRng >
- inline indirected_range<const InputRng>
- operator|( const InputRng& r, indirect_forwarder )
+ template< class SinglePassRange >
+ inline indirected_range<const SinglePassRange>
+ operator|( const SinglePassRange& r, indirect_forwarder )
{
- return indirected_range<const InputRng>( r );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return indirected_range<const SinglePassRange>( r );
}
} // 'range_detail'
@@ -68,18 +75,23 @@ namespace boost
range_detail::indirect_forwarder();
}
- template<class InputRange>
- inline indirected_range<InputRange>
- indirect(InputRange& rng)
+ template<class SinglePassRange>
+ inline indirected_range<SinglePassRange>
+ indirect(SinglePassRange& rng)
{
- return indirected_range<InputRange>(rng);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+ return indirected_range<SinglePassRange>(rng);
}
- template<class InputRange>
- inline indirected_range<const InputRange>
- indirect(const InputRange& rng)
+ template<class SinglePassRange>
+ inline indirected_range<const SinglePassRange>
+ indirect(const SinglePassRange& rng)
{
- return indirected_range<const InputRange>(rng);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return indirected_range<const SinglePassRange>(rng);
}
} // 'adaptors'
diff --git a/3party/boost/boost/range/adaptor/map.hpp b/3party/boost/boost/range/adaptor/map.hpp
index ff8b97ec05..2d922ea4d2 100644
--- a/3party/boost/boost/range/adaptor/map.hpp
+++ b/3party/boost/boost/range/adaptor/map.hpp
@@ -15,6 +15,7 @@
#include <boost/range/iterator_range.hpp>
#include <boost/range/value_type.hpp>
#include <boost/range/reference.hpp>
+#include <boost/range/concepts.hpp>
namespace boost
{
@@ -120,6 +121,9 @@ namespace boost
inline select_first_range<StdPairRng>
operator|( const StdPairRng& r, map_keys_forwarder )
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const StdPairRng>));
+
return operator|( r,
boost::adaptors::transformed( select_first<StdPairRng>() ) );
}
@@ -128,6 +132,8 @@ namespace boost
inline select_second_mutable_range<StdPairRng>
operator|( StdPairRng& r, map_values_forwarder )
{
+ BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<StdPairRng>));
+
return operator|( r,
boost::adaptors::transformed( select_second_mutable<StdPairRng>() ) );
}
@@ -136,6 +142,9 @@ namespace boost
inline select_second_const_range<StdPairRng>
operator|( const StdPairRng& r, map_values_forwarder )
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const StdPairRng>));
+
return operator|( r,
boost::adaptors::transformed( select_second_const<StdPairRng>() ) );
}
@@ -161,6 +170,9 @@ namespace boost
inline select_first_range<StdPairRange>
keys(const StdPairRange& rng)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const StdPairRange>));
+
return select_first_range<StdPairRange>(
range_detail::select_first<StdPairRange>(), rng );
}
@@ -169,6 +181,9 @@ namespace boost
inline select_second_const_range<StdPairRange>
values(const StdPairRange& rng)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const StdPairRange>));
+
return select_second_const_range<StdPairRange>(
range_detail::select_second_const<StdPairRange>(), rng );
}
@@ -177,6 +192,8 @@ namespace boost
inline select_second_mutable_range<StdPairRange>
values(StdPairRange& rng)
{
+ BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<StdPairRange>));
+
return select_second_mutable_range<StdPairRange>(
range_detail::select_second_mutable<StdPairRange>(), rng );
}
diff --git a/3party/boost/boost/range/adaptor/replaced.hpp b/3party/boost/boost/range/adaptor/replaced.hpp
index deeb8da072..1950b82946 100644
--- a/3party/boost/boost/range/adaptor/replaced.hpp
+++ b/3party/boost/boost/range/adaptor/replaced.hpp
@@ -17,8 +17,10 @@
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/value_type.hpp>
+#include <boost/range/concepts.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/iterator/transform_iterator.hpp>
+#include <boost/optional/optional.hpp>
namespace boost
{
@@ -31,19 +33,36 @@ namespace boost
typedef const Value& result_type;
typedef const Value& first_argument_type;
+ // Rationale:
+ // The default constructor is required to allow the transform
+ // iterator to properly model the iterator concept.
+ replace_value()
+ {
+ }
+
replace_value(const Value& from, const Value& to)
- : m_from(from), m_to(to)
+ : m_impl(data(from, to))
{
}
const Value& operator()(const Value& x) const
{
- return (x == m_from) ? m_to : x;
+ return (x == m_impl->m_from) ? m_impl->m_to : x;
}
private:
- Value m_from;
- Value m_to;
+ struct data
+ {
+ data(const Value& from, const Value& to)
+ : m_from(from)
+ , m_to(to)
+ {
+ }
+
+ Value m_from;
+ Value m_to;
+ };
+ boost::optional<data> m_impl;
};
template< class R >
@@ -82,20 +101,30 @@ namespace boost
void operator=(const replace_holder&);
};
- template< class InputRng >
- inline replaced_range<InputRng>
- operator|( InputRng& r,
- const replace_holder<BOOST_DEDUCED_TYPENAME range_value<InputRng>::type>& f )
+ template< class SinglePassRange >
+ inline replaced_range<SinglePassRange>
+ operator|(
+ SinglePassRange& r,
+ const replace_holder<
+ BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f )
{
- return replaced_range<InputRng>(r, f.val1, f.val2);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+
+ return replaced_range<SinglePassRange>(r, f.val1, f.val2);
}
- template< class InputRng >
- inline replaced_range<const InputRng>
- operator|( const InputRng& r,
- const replace_holder<BOOST_DEDUCED_TYPENAME range_value<InputRng>::type>& f )
+ template< class SinglePassRange >
+ inline replaced_range<const SinglePassRange>
+ operator|(
+ const SinglePassRange& r,
+ const replace_holder<
+ BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f)
{
- return replaced_range<const InputRng>(r, f.val1, f.val2);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return replaced_range<const SinglePassRange>(r, f.val1, f.val2);
}
} // 'range_detail'
@@ -110,22 +139,28 @@ namespace boost
range_detail::forwarder2<range_detail::replace_holder>();
}
- template<class InputRange>
- inline replaced_range<InputRange>
- replace(InputRange& rng,
- BOOST_DEDUCED_TYPENAME range_value<InputRange>::type from,
- BOOST_DEDUCED_TYPENAME range_value<InputRange>::type to)
+ template<class SinglePassRange>
+ inline replaced_range<SinglePassRange>
+ replace(SinglePassRange& rng,
+ BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type from,
+ BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type to)
{
- return replaced_range<InputRange>(rng, from, to);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+
+ return replaced_range<SinglePassRange>(rng, from, to);
}
- template<class InputRange>
- inline replaced_range<const InputRange>
- replace(const InputRange& rng,
- BOOST_DEDUCED_TYPENAME range_value<const InputRange>::type from,
- BOOST_DEDUCED_TYPENAME range_value<const InputRange>::type to)
+ template<class SinglePassRange>
+ inline replaced_range<const SinglePassRange>
+ replace(const SinglePassRange& rng,
+ BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type from,
+ BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type to)
{
- return replaced_range<const InputRange>(rng, from ,to);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return replaced_range<const SinglePassRange>(rng, from ,to);
}
} // 'adaptors'
diff --git a/3party/boost/boost/range/adaptor/replaced_if.hpp b/3party/boost/boost/range/adaptor/replaced_if.hpp
index b514354fd1..e425e7d842 100644
--- a/3party/boost/boost/range/adaptor/replaced_if.hpp
+++ b/3party/boost/boost/range/adaptor/replaced_if.hpp
@@ -17,8 +17,10 @@
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/value_type.hpp>
+#include <boost/range/concepts.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/iterator/transform_iterator.hpp>
+#include <boost/optional/optional.hpp>
namespace boost
{
@@ -31,19 +33,34 @@ namespace boost
typedef const Value& result_type;
typedef const Value& first_argument_type;
+ // Rationale:
+ // required to allow the iterator to be default constructible.
+ replace_value_if()
+ {
+ }
+
replace_value_if(const Pred& pred, const Value& to)
- : m_pred(pred), m_to(to)
+ : m_impl(data(pred, to))
{
}
const Value& operator()(const Value& x) const
{
- return m_pred(x) ? m_to : x;
+ return m_impl->m_pred(x) ? m_impl->m_to : x;
}
private:
- Pred m_pred;
- Value m_to;
+ struct data
+ {
+ data(const Pred& p, const Value& t)
+ : m_pred(p), m_to(t)
+ {
+ }
+
+ Pred m_pred;
+ Value m_to;
+ };
+ boost::optional<data> m_impl;
};
template< class Pred, class R >
@@ -86,20 +103,34 @@ namespace boost
T m_to;
};
- template< class Pred, class InputRng >
- inline replaced_if_range<Pred, InputRng>
- operator|( InputRng& r,
- const replace_if_holder<Pred, BOOST_DEDUCED_TYPENAME range_value<InputRng>::type>& f )
+ template< class Pred, class SinglePassRange >
+ inline replaced_if_range<Pred, SinglePassRange>
+ operator|(
+ SinglePassRange& r,
+ const replace_if_holder<
+ Pred,
+ BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f)
{
- return replaced_if_range<Pred, InputRng>(r, f.pred(), f.to());
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+
+ return replaced_if_range<Pred, SinglePassRange>(
+ r, f.pred(), f.to());
}
- template< class Pred, class InputRng >
- inline replaced_if_range<Pred, const InputRng>
- operator|( const InputRng& r,
- const replace_if_holder<Pred, BOOST_DEDUCED_TYPENAME range_value<InputRng>::type>& f )
+ template< class Pred, class SinglePassRange >
+ inline replaced_if_range<Pred, const SinglePassRange>
+ operator|(
+ const SinglePassRange& r,
+ const replace_if_holder<
+ Pred,
+ BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f)
{
- return replaced_if_range<Pred, const InputRng>(r, f.pred(), f.to());
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return replaced_if_range<Pred, const SinglePassRange>(
+ r, f.pred(), f.to());
}
} // 'range_detail'
@@ -113,24 +144,34 @@ namespace boost
replaced_if =
range_detail::forwarder2TU<range_detail::replace_if_holder>();
}
-
- template<class Pred, class InputRange>
- inline replaced_if_range<Pred, InputRange>
- replace_if(InputRange& rng, Pred pred,
- BOOST_DEDUCED_TYPENAME range_value<InputRange>::type to)
+
+ template<class Pred, class SinglePassRange>
+ inline replaced_if_range<Pred, SinglePassRange>
+ replace_if(SinglePassRange& rng, Pred pred,
+ BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type to)
{
- return range_detail::replaced_if_range<Pred, InputRange>(rng, pred, to);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+
+ return range_detail::replaced_if_range<Pred, SinglePassRange>(
+ rng, pred, to);
}
- template<class Pred, class InputRange>
- inline replaced_if_range<Pred, const InputRange>
- replace_if(const InputRange& rng, Pred pred,
- BOOST_DEDUCED_TYPENAME range_value<const InputRange>::type to)
+ template<class Pred, class SinglePassRange>
+ inline replaced_if_range<Pred, const SinglePassRange>
+ replace_if(
+ const SinglePassRange& rng,
+ Pred pred,
+ BOOST_DEDUCED_TYPENAME range_value<const SinglePassRange>::type to)
{
- return range_detail::replaced_if_range<Pred, const InputRange>(rng, pred, to);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return range_detail::replaced_if_range<Pred, const SinglePassRange>(
+ rng, pred, to);
}
} // 'adaptors'
-
+
} // 'boost'
#endif // include guard
diff --git a/3party/boost/boost/range/adaptor/reversed.hpp b/3party/boost/boost/range/adaptor/reversed.hpp
index c85eda8697..944fbffcae 100644
--- a/3party/boost/boost/range/adaptor/reversed.hpp
+++ b/3party/boost/boost/range/adaptor/reversed.hpp
@@ -12,6 +12,7 @@
#define BOOST_RANGE_ADAPTOR_REVERSED_HPP
#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
#include <boost/iterator/reverse_iterator.hpp>
namespace boost
@@ -44,18 +45,24 @@ namespace boost
struct reverse_forwarder {};
- template< class BidirectionalRng >
- inline reversed_range<BidirectionalRng>
- operator|( BidirectionalRng& r, reverse_forwarder )
+ template< class BidirectionalRange >
+ inline reversed_range<BidirectionalRange>
+ operator|( BidirectionalRange& r, reverse_forwarder )
{
- return reversed_range<BidirectionalRng>( r );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ BidirectionalRangeConcept<BidirectionalRange>));
+
+ return reversed_range<BidirectionalRange>( r );
}
-
- template< class BidirectionalRng >
- inline reversed_range<const BidirectionalRng>
- operator|( const BidirectionalRng& r, reverse_forwarder )
+
+ template< class BidirectionalRange >
+ inline reversed_range<const BidirectionalRange>
+ operator|( const BidirectionalRange& r, reverse_forwarder )
{
- return reversed_range<const BidirectionalRng>( r );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ BidirectionalRangeConcept<const BidirectionalRange>));
+
+ return reversed_range<const BidirectionalRange>( r );
}
} // 'range_detail'
@@ -74,6 +81,9 @@ namespace boost
inline reversed_range<BidirectionalRange>
reverse(BidirectionalRange& rng)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ BidirectionalRangeConcept<BidirectionalRange>));
+
return reversed_range<BidirectionalRange>(rng);
}
@@ -81,6 +91,9 @@ namespace boost
inline reversed_range<const BidirectionalRange>
reverse(const BidirectionalRange& rng)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ BidirectionalRangeConcept<const BidirectionalRange>));
+
return reversed_range<const BidirectionalRange>(rng);
}
} // 'adaptors'
diff --git a/3party/boost/boost/range/adaptor/sliced.hpp b/3party/boost/boost/range/adaptor/sliced.hpp
index 14ad98672a..a09cbd00e6 100644
--- a/3party/boost/boost/range/adaptor/sliced.hpp
+++ b/3party/boost/boost/range/adaptor/sliced.hpp
@@ -14,6 +14,7 @@
#include <boost/range/adaptor/argument_fwd.hpp>
#include <boost/range/size_type.hpp>
#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
namespace boost
{
@@ -34,7 +35,8 @@ namespace boost
public:
template<typename Rng, typename T, typename U>
sliced_range(Rng& rng, T t, U u)
- : base_t(boost::make_iterator_range(rng, t, u - boost::size(rng)))
+ : base_t(boost::next(boost::begin(rng), t),
+ boost::next(boost::begin(rng), u))
{
}
};
@@ -43,6 +45,9 @@ namespace boost
inline sliced_range<RandomAccessRange>
slice( RandomAccessRange& rng, std::size_t t, std::size_t u )
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ RandomAccessRangeConcept<RandomAccessRange>));
+
BOOST_ASSERT( t <= u && "error in slice indices" );
BOOST_ASSERT( static_cast<std::size_t>(boost::size(rng)) >= u &&
"second slice index out of bounds" );
@@ -54,6 +59,9 @@ namespace boost
inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type >
slice( const RandomAccessRange& rng, std::size_t t, std::size_t u )
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ RandomAccessRangeConcept<const RandomAccessRange>));
+
BOOST_ASSERT( t <= u && "error in slice indices" );
BOOST_ASSERT( static_cast<std::size_t>(boost::size(rng)) >= u &&
"second slice index out of bounds" );
@@ -65,6 +73,9 @@ namespace boost
inline sliced_range<RandomAccessRange>
operator|( RandomAccessRange& r, const sliced& f )
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ RandomAccessRangeConcept<RandomAccessRange>));
+
return sliced_range<RandomAccessRange>( r, f.t, f.u );
}
@@ -72,6 +83,9 @@ namespace boost
inline sliced_range<const RandomAccessRange>
operator|( const RandomAccessRange& r, const sliced& f )
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ RandomAccessRangeConcept<const RandomAccessRange>));
+
return sliced_range<const RandomAccessRange>( r, f.t, f.u );
}
diff --git a/3party/boost/boost/range/adaptor/strided.hpp b/3party/boost/boost/range/adaptor/strided.hpp
index e843f62fc0..c5fea86d5c 100644
--- a/3party/boost/boost/range/adaptor/strided.hpp
+++ b/3party/boost/boost/range/adaptor/strided.hpp
@@ -13,7 +13,7 @@
#include <boost/range/adaptor/argument_fwd.hpp>
#include <boost/range/iterator_range.hpp>
-#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_facade.hpp>
#include <iterator>
namespace boost
@@ -23,59 +23,102 @@ namespace boost
// strided_iterator for wrapping a forward traversal iterator
template<class BaseIterator, class Category>
class strided_iterator
- : public iterator_adaptor<
+ : public iterator_facade<
strided_iterator<BaseIterator, Category>
- , BaseIterator
- , use_default
- , boost::forward_traversal_tag
+ , typename iterator_value<BaseIterator>::type
+ , forward_traversal_tag
+ , typename iterator_reference<BaseIterator>::type
+ , typename iterator_difference<BaseIterator>::type
>
{
friend class ::boost::iterator_core_access;
- typedef iterator_adaptor<
- strided_iterator<BaseIterator, Category>
- , BaseIterator
- , use_default
- , boost::forward_traversal_tag
- > super_t;
+ typedef iterator_facade<
+ strided_iterator<BaseIterator, Category>
+ , typename iterator_value<BaseIterator>::type
+ , forward_traversal_tag
+ , typename iterator_reference<BaseIterator>::type
+ , typename iterator_difference<BaseIterator>::type
+ > super_t;
public:
- typedef BOOST_DEDUCED_TYPENAME std::iterator_traits<BaseIterator>::difference_type difference_type;
+ typedef typename super_t::difference_type difference_type;
+ typedef typename super_t::reference reference;
typedef BaseIterator base_iterator;
+ typedef std::forward_iterator_tag iterator_category;
strided_iterator()
- : m_last()
+ : m_it()
+ , m_last()
, m_stride()
{
}
- strided_iterator(base_iterator first, base_iterator it, base_iterator last, difference_type stride)
- : super_t(it)
+ strided_iterator(base_iterator it,
+ base_iterator last,
+ difference_type stride)
+ : m_it(it)
, m_last(last)
, m_stride(stride)
{
}
template<class OtherIterator>
- strided_iterator(const strided_iterator<OtherIterator, Category>& other,
- BOOST_DEDUCED_TYPENAME enable_if_convertible<OtherIterator, base_iterator>::type* = 0)
- : super_t(other)
+ strided_iterator(
+ const strided_iterator<OtherIterator, Category>& other,
+ typename enable_if_convertible<
+ OtherIterator,
+ base_iterator
+ >::type* = 0
+ )
+ : m_it(other.base())
, m_last(other.base_end())
, m_stride(other.get_stride())
{
}
- base_iterator base_end() const { return m_last; }
- difference_type get_stride() const { return m_stride; }
+ base_iterator base() const
+ {
+ return m_it;
+ }
+
+ base_iterator base_end() const
+ {
+ return m_last;
+ }
+
+ difference_type get_stride() const
+ {
+ return m_stride;
+ }
private:
void increment()
{
- base_iterator& it = this->base_reference();
- for (difference_type i = 0; (it != m_last) && (i < m_stride); ++i)
- ++it;
+ for (difference_type i = 0;
+ (m_it != m_last) && (i < m_stride); ++i)
+ {
+ ++m_it;
+ }
}
+ reference dereference() const
+ {
+ return *m_it;
+ }
+
+ template<class OtherIterator>
+ bool equal(
+ const strided_iterator<OtherIterator, Category>& other,
+ typename enable_if_convertible<
+ OtherIterator,
+ base_iterator
+ >::type* = 0) const
+ {
+ return m_it == other.m_it;
+ }
+
+ base_iterator m_it;
base_iterator m_last;
difference_type m_stride;
};
@@ -83,214 +126,514 @@ namespace boost
// strided_iterator for wrapping a bidirectional iterator
template<class BaseIterator>
class strided_iterator<BaseIterator, bidirectional_traversal_tag>
- : public iterator_adaptor<
+ : public iterator_facade<
strided_iterator<BaseIterator, bidirectional_traversal_tag>
- , BaseIterator
- , use_default
- , bidirectional_traversal_tag
+ , typename iterator_value<BaseIterator>::type
+ , bidirectional_traversal_tag
+ , typename iterator_reference<BaseIterator>::type
+ , typename iterator_difference<BaseIterator>::type
>
{
friend class ::boost::iterator_core_access;
- typedef iterator_adaptor<
- strided_iterator<BaseIterator, bidirectional_traversal_tag>
- , BaseIterator
- , use_default
- , bidirectional_traversal_tag
- > super_t;
+ typedef iterator_facade<
+ strided_iterator<BaseIterator, bidirectional_traversal_tag>
+ , typename iterator_value<BaseIterator>::type
+ , bidirectional_traversal_tag
+ , typename iterator_reference<BaseIterator>::type
+ , typename iterator_difference<BaseIterator>::type
+ > super_t;
public:
- typedef BOOST_DEDUCED_TYPENAME std::iterator_traits<BaseIterator>::difference_type difference_type;
+ typedef typename super_t::difference_type difference_type;
+ typedef typename super_t::reference reference;
typedef BaseIterator base_iterator;
+ typedef typename boost::make_unsigned<difference_type>::type
+ size_type;
+ typedef std::bidirectional_iterator_tag iterator_category;
strided_iterator()
- : m_first()
- , m_last()
+ : m_it()
+ , m_offset()
+ , m_index()
, m_stride()
{
}
- strided_iterator(base_iterator first, base_iterator it, base_iterator last, difference_type stride)
- : super_t(it)
- , m_first(first)
- , m_last(last)
+ strided_iterator(base_iterator it,
+ size_type index,
+ difference_type stride)
+ : m_it(it)
+ , m_offset()
+ , m_index(index)
, m_stride(stride)
{
+ if (stride && ((m_index % stride) != 0))
+ m_index += (stride - (m_index % stride));
}
template<class OtherIterator>
- strided_iterator(const strided_iterator<OtherIterator, bidirectional_traversal_tag>& other,
- BOOST_DEDUCED_TYPENAME enable_if_convertible<OtherIterator, base_iterator>::type* = 0)
- : super_t(other.base())
- , m_first(other.base_begin())
- , m_last(other.base_end())
+ strided_iterator(
+ const strided_iterator<
+ OtherIterator,
+ bidirectional_traversal_tag
+ >& other,
+ typename enable_if_convertible<
+ OtherIterator,
+ base_iterator
+ >::type* = 0
+ )
+ : m_it(other.base())
+ , m_offset(other.get_offset())
+ , m_index(other.get_index())
, m_stride(other.get_stride())
{
}
- base_iterator base_begin() const { return m_first; }
- base_iterator base_end() const { return m_last; }
- difference_type get_stride() const { return m_stride; }
+ base_iterator base() const
+ {
+ return m_it;
+ }
+
+ difference_type get_offset() const
+ {
+ return m_offset;
+ }
+
+ size_type get_index() const
+ {
+ return m_index;
+ }
+
+ difference_type get_stride() const
+ {
+ return m_stride;
+ }
private:
void increment()
{
- base_iterator& it = this->base_reference();
- for (difference_type i = 0; (it != m_last) && (i < m_stride); ++i)
- ++it;
+ m_offset += m_stride;
}
void decrement()
{
- base_iterator& it = this->base_reference();
- for (difference_type i = 0; (it != m_first) && (i < m_stride); ++i)
- --it;
+ m_offset -= m_stride;
}
- base_iterator m_first;
- base_iterator m_last;
+ reference dereference() const
+ {
+ update();
+ return *m_it;
+ }
+
+ void update() const
+ {
+ std::advance(m_it, m_offset);
+ m_index += m_offset;
+ m_offset = 0;
+ }
+
+ template<class OtherIterator>
+ bool equal(
+ const strided_iterator<
+ OtherIterator,
+ bidirectional_traversal_tag
+ >& other,
+ typename enable_if_convertible<
+ OtherIterator,
+ base_iterator
+ >::type* = 0) const
+ {
+ return (m_index + m_offset) ==
+ (other.get_index() + other.get_offset());
+ }
+
+ mutable base_iterator m_it;
+ mutable difference_type m_offset;
+ mutable size_type m_index;
difference_type m_stride;
};
// strided_iterator implementation for wrapping a random access iterator
template<class BaseIterator>
class strided_iterator<BaseIterator, random_access_traversal_tag>
- : public iterator_adaptor<
- strided_iterator<BaseIterator, random_access_traversal_tag>
- , BaseIterator
- , use_default
- , random_access_traversal_tag
- >
+ : public iterator_facade<
+ strided_iterator<BaseIterator, random_access_traversal_tag>
+ , typename iterator_value<BaseIterator>::type
+ , random_access_traversal_tag
+ , typename iterator_reference<BaseIterator>::type
+ , typename iterator_difference<BaseIterator>::type
+ >
{
friend class ::boost::iterator_core_access;
- typedef iterator_adaptor<
- strided_iterator<BaseIterator, random_access_traversal_tag>
- , BaseIterator
- , use_default
- , random_access_traversal_tag
- > super_t;
+ typedef iterator_facade<
+ strided_iterator<BaseIterator, random_access_traversal_tag>
+ , typename iterator_value<BaseIterator>::type
+ , random_access_traversal_tag
+ , typename iterator_reference<BaseIterator>::type
+ , typename iterator_difference<BaseIterator>::type
+ > super_t;
public:
- typedef BOOST_DEDUCED_TYPENAME super_t::difference_type difference_type;
+ typedef typename super_t::difference_type difference_type;
+ typedef typename super_t::reference reference;
typedef BaseIterator base_iterator;
+ typedef std::random_access_iterator_tag iterator_category;
strided_iterator()
- : m_first()
- , m_last()
+ : m_it()
+ , m_first()
, m_index(0)
, m_stride()
{
}
- strided_iterator(BaseIterator first, BaseIterator it, BaseIterator last, difference_type stride)
- : super_t(it)
+ strided_iterator(
+ base_iterator first,
+ base_iterator it,
+ difference_type stride
+ )
+ : m_it(it)
, m_first(first)
- , m_last(last)
- , m_index(stride ? (it - first) / stride : 0)
+ , m_index(stride ? (it - first) : difference_type())
, m_stride(stride)
{
+ if (stride && ((m_index % stride) != 0))
+ m_index += (stride - (m_index % stride));
}
template<class OtherIterator>
- strided_iterator(const strided_iterator<OtherIterator, random_access_traversal_tag>& other,
- BOOST_DEDUCED_TYPENAME enable_if_convertible<OtherIterator, BaseIterator>::type* = 0)
- : super_t(other.base())
+ strided_iterator(
+ const strided_iterator<
+ OtherIterator,
+ random_access_traversal_tag
+ >& other,
+ typename enable_if_convertible<
+ OtherIterator,
+ base_iterator
+ >::type* = 0
+ )
+ : m_it(other.base())
, m_first(other.base_begin())
- , m_last(other.base_end())
, m_index(other.get_index())
, m_stride(other.get_stride())
{
}
- base_iterator base_begin() const { return m_first; }
- base_iterator base_end() const { return m_last; }
- difference_type get_stride() const { return m_stride; }
- difference_type get_index() const { return m_index; }
+ base_iterator base_begin() const
+ {
+ return m_first;
+ }
+
+ base_iterator base() const
+ {
+ return m_it;
+ }
+
+ difference_type get_stride() const
+ {
+ return m_stride;
+ }
+
+ difference_type get_index() const
+ {
+ return m_index;
+ }
private:
void increment()
{
m_index += m_stride;
- if (m_index < (m_last - m_first))
- this->base_reference() = m_first + m_index;
- else
- this->base_reference() = m_last;
}
void decrement()
{
m_index -= m_stride;
- if (m_index >= 0)
- this->base_reference() = m_first + m_index;
- else
- this->base_reference() = m_first;
}
void advance(difference_type offset)
{
- offset *= m_stride;
- m_index += offset;
- if (m_index < 0)
- this->base_reference() = m_first;
- else if (m_index > (m_last - m_first))
- this->base_reference() = m_last;
- else
- this->base_reference() = m_first + m_index;
+ m_index += (m_stride * offset);
+ }
+
+ // Implementation detail: only update the actual underlying iterator
+ // at the point of dereference. This is done so that the increment
+ // and decrement can overshoot the valid sequence as is required
+ // by striding. Since we can do all comparisons just with the index
+ // simply, and all dereferences must be within the valid range.
+ void update() const
+ {
+ m_it = m_first + m_index;
}
template<class OtherIterator>
- difference_type distance_to(const strided_iterator<OtherIterator, random_access_traversal_tag>& other,
- BOOST_DEDUCED_TYPENAME enable_if_convertible<OtherIterator, BaseIterator>::type* = 0) const
+ difference_type distance_to(
+ const strided_iterator<
+ OtherIterator,
+ random_access_traversal_tag
+ >& other,
+ typename enable_if_convertible<
+ OtherIterator, base_iterator>::type* = 0) const
{
- if (other.base() >= this->base())
- return (other.base() - this->base() + (m_stride - 1)) / m_stride;
- return (other.base() - this->base() - (m_stride - 1)) / m_stride;
+ BOOST_ASSERT((other.m_index - m_index) % m_stride == difference_type());
+ return (other.m_index - m_index) / m_stride;
}
- bool equal(const strided_iterator& other) const
+ template<class OtherIterator>
+ bool equal(
+ const strided_iterator<
+ OtherIterator,
+ random_access_traversal_tag
+ >& other,
+ typename enable_if_convertible<
+ OtherIterator, base_iterator>::type* = 0) const
{
- return this->base() == other.base();
+ return m_index == other.m_index;
+ }
+
+ reference dereference() const
+ {
+ update();
+ return *m_it;
}
private:
+ mutable base_iterator m_it;
base_iterator m_first;
- base_iterator m_last;
difference_type m_index;
difference_type m_stride;
};
- template<class BaseIterator, class Difference> inline
- strided_iterator<BaseIterator, BOOST_DEDUCED_TYPENAME iterator_traversal<BaseIterator>::type>
- make_strided_iterator(BaseIterator first, BaseIterator it,
- BaseIterator last, Difference stride)
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<Rng>::type,
+ forward_traversal_tag
+ >
+ make_begin_strided_iterator(
+ Rng& rng,
+ Difference stride,
+ forward_traversal_tag)
+ {
+ return strided_iterator<
+ typename range_iterator<Rng>::type,
+ forward_traversal_tag
+ >(boost::begin(rng), boost::end(rng), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<const Rng>::type,
+ forward_traversal_tag
+ >
+ make_begin_strided_iterator(
+ const Rng& rng,
+ Difference stride,
+ forward_traversal_tag)
+ {
+ return strided_iterator<
+ typename range_iterator<const Rng>::type,
+ forward_traversal_tag
+ >(boost::begin(rng), boost::end(rng), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<Rng>::type,
+ forward_traversal_tag
+ >
+ make_end_strided_iterator(
+ Rng& rng,
+ Difference stride,
+ forward_traversal_tag)
+ {
+ return strided_iterator<
+ typename range_iterator<Rng>::type,
+ forward_traversal_tag
+ >(boost::end(rng), boost::end(rng), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<const Rng>::type,
+ forward_traversal_tag
+ >
+ make_end_strided_iterator(
+ const Rng& rng,
+ Difference stride,
+ forward_traversal_tag)
+ {
+ return strided_iterator<
+ typename range_iterator<const Rng>::type,
+ forward_traversal_tag
+ >(boost::end(rng), boost::end(rng), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<Rng>::type,
+ bidirectional_traversal_tag
+ >
+ make_begin_strided_iterator(
+ Rng& rng,
+ Difference stride,
+ bidirectional_traversal_tag)
+ {
+ typedef typename range_difference<Rng>::type difference_type;
+
+ return strided_iterator<
+ typename range_iterator<Rng>::type,
+ bidirectional_traversal_tag
+ >(boost::begin(rng), difference_type(), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<const Rng>::type,
+ bidirectional_traversal_tag
+ >
+ make_begin_strided_iterator(
+ const Rng& rng,
+ Difference stride,
+ bidirectional_traversal_tag)
+ {
+ typedef typename range_difference<const Rng>::type difference_type;
+
+ return strided_iterator<
+ typename range_iterator<const Rng>::type,
+ bidirectional_traversal_tag
+ >(boost::begin(rng), difference_type(), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<Rng>::type,
+ bidirectional_traversal_tag
+ >
+ make_end_strided_iterator(
+ Rng& rng,
+ Difference stride,
+ bidirectional_traversal_tag)
{
- BOOST_ASSERT( stride >= 0 );
- typedef BOOST_DEDUCED_TYPENAME iterator_traversal<BaseIterator>::type traversal_tag;
- return strided_iterator<BaseIterator, traversal_tag>(first, it, last, stride);
+ return strided_iterator<
+ typename range_iterator<Rng>::type,
+ bidirectional_traversal_tag
+ >(boost::end(rng), boost::size(rng), stride);
}
- template< class Rng
- , class Category = BOOST_DEDUCED_TYPENAME iterator_traversal<
- BOOST_DEDUCED_TYPENAME range_iterator<Rng>::type
- >::type
- >
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<const Rng>::type,
+ bidirectional_traversal_tag
+ >
+ make_end_strided_iterator(
+ const Rng& rng,
+ Difference stride,
+ bidirectional_traversal_tag)
+ {
+ return strided_iterator<
+ typename range_iterator<const Rng>::type,
+ bidirectional_traversal_tag
+ >(boost::end(rng), boost::size(rng), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<Rng>::type,
+ random_access_traversal_tag
+ >
+ make_begin_strided_iterator(
+ Rng& rng,
+ Difference stride,
+ random_access_traversal_tag)
+ {
+ return strided_iterator<
+ typename range_iterator<Rng>::type,
+ random_access_traversal_tag
+ >(boost::begin(rng), boost::begin(rng), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<const Rng>::type,
+ random_access_traversal_tag
+ >
+ make_begin_strided_iterator(
+ const Rng& rng,
+ Difference stride,
+ random_access_traversal_tag)
+ {
+ return strided_iterator<
+ typename range_iterator<const Rng>::type,
+ random_access_traversal_tag
+ >(boost::begin(rng), boost::begin(rng), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<Rng>::type,
+ random_access_traversal_tag
+ >
+ make_end_strided_iterator(
+ Rng& rng,
+ Difference stride,
+ random_access_traversal_tag)
+ {
+ return strided_iterator<
+ typename range_iterator<Rng>::type,
+ random_access_traversal_tag
+ >(boost::begin(rng), boost::end(rng), stride);
+ }
+
+ template<class Rng, class Difference> inline
+ strided_iterator<
+ typename range_iterator<const Rng>::type,
+ random_access_traversal_tag
+ >
+ make_end_strided_iterator(
+ const Rng& rng,
+ Difference stride,
+ random_access_traversal_tag)
+ {
+ return strided_iterator<
+ typename range_iterator<const Rng>::type,
+ random_access_traversal_tag
+ >(boost::begin(rng), boost::end(rng), stride);
+ }
+
+ template<
+ class Rng,
+ class Category =
+ typename iterator_traversal<
+ typename range_iterator<Rng>::type
+ >::type
+ >
class strided_range
: public iterator_range<
- range_detail::strided_iterator<
- BOOST_DEDUCED_TYPENAME range_iterator<Rng>::type,
- Category
- >
- >
+ range_detail::strided_iterator<
+ typename range_iterator<Rng>::type,
+ Category
+ >
+ >
{
typedef range_detail::strided_iterator<
- BOOST_DEDUCED_TYPENAME range_iterator<Rng>::type,
- Category
- > iter_type;
+ typename range_iterator<Rng>::type,
+ Category
+ > iter_type;
typedef iterator_range<iter_type> super_t;
public:
template<class Difference>
strided_range(Difference stride, Rng& rng)
- : super_t(make_strided_iterator(boost::begin(rng), boost::begin(rng), boost::end(rng), stride),
- make_strided_iterator(boost::begin(rng), boost::end(rng), boost::end(rng), stride))
+ : super_t(
+ range_detail::make_begin_strided_iterator(
+ rng, stride,
+ typename iterator_traversal<
+ typename range_iterator<Rng>::type
+ >::type()),
+ range_detail::make_end_strided_iterator(
+ rng, stride,
+ typename iterator_traversal<
+ typename range_iterator<Rng>::type
+ >::type()))
{
BOOST_ASSERT( stride >= 0 );
}
@@ -300,7 +643,10 @@ namespace boost
class strided_holder : public holder<Difference>
{
public:
- explicit strided_holder(Difference value) : holder<Difference>(value) {}
+ explicit strided_holder(Difference value)
+ : holder<Difference>(value)
+ {
+ }
};
template<class Rng, class Difference>
@@ -327,7 +673,8 @@ namespace boost
namespace
{
const range_detail::forwarder<range_detail::strided_holder>
- strided = range_detail::forwarder<range_detail::strided_holder>();
+ strided = range_detail::forwarder<
+ range_detail::strided_holder>();
}
template<class Range, class Difference>
diff --git a/3party/boost/boost/range/adaptor/tokenized.hpp b/3party/boost/boost/range/adaptor/tokenized.hpp
index 8a7402a223..f0aa12eea5 100644
--- a/3party/boost/boost/range/adaptor/tokenized.hpp
+++ b/3party/boost/boost/range/adaptor/tokenized.hpp
@@ -52,9 +52,9 @@ namespace boost
template< class T, class U, class V >
struct regex_holder
{
- const T& re;
- const U& sub;
- V f;
+ T re;
+ U sub;
+ V f;
regex_holder( const T& rex, const U& subm, V flag ) :
re(rex), sub(subm), f(flag)
diff --git a/3party/boost/boost/range/adaptor/transformed.hpp b/3party/boost/boost/range/adaptor/transformed.hpp
index 96d2dabcd6..428ff4be75 100644
--- a/3party/boost/boost/range/adaptor/transformed.hpp
+++ b/3party/boost/boost/range/adaptor/transformed.hpp
@@ -12,7 +12,9 @@
#define BOOST_RANGE_ADAPTOR_TRANSFORMED_HPP
#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/detail/default_constructible_unary_fn.hpp>
#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
#include <boost/iterator/transform_iterator.hpp>
#include <boost/utility/result_of.hpp>
@@ -20,55 +22,79 @@ namespace boost
{
namespace range_detail
{
+ // A type generator to produce the transform_iterator type conditionally
+ // including a wrapped predicate as appropriate.
+ template<typename P, typename It>
+ struct transform_iterator_gen
+ {
+ typedef transform_iterator<
+ typename default_constructible_unary_fn_gen<
+ P,
+ typename transform_iterator<P, It>::reference
+ >::type,
+ It
+ > type;
+ };
template< class F, class R >
struct transformed_range :
public boost::iterator_range<
- boost::transform_iterator< F,
- BOOST_DEDUCED_TYPENAME range_iterator<R>::type
- >
- >
+ typename transform_iterator_gen<
+ F, typename range_iterator<R>::type>::type>
{
private:
- typedef boost::iterator_range<
- boost::transform_iterator< F,
- BOOST_DEDUCED_TYPENAME range_iterator<R>::type
- >
- >
- base;
+ typedef typename transform_iterator_gen<
+ F, typename range_iterator<R>::type>::type transform_iter_t;
+
+ typedef boost::iterator_range<transform_iter_t> base;
public:
- typedef F transform_fn_type;
- typedef R source_range_type;
+ typedef typename default_constructible_unary_fn_gen<
+ F,
+ typename transform_iterator<
+ F,
+ typename range_iterator<R>::type
+ >::reference
+ >::type transform_fn_type;
- transformed_range( F f, R& r )
- : base( boost::make_transform_iterator( boost::begin(r), f ),
- boost::make_transform_iterator( boost::end(r), f ) )
+ typedef R source_range_type;
- { }
+ transformed_range(transform_fn_type f, R& r)
+ : base(transform_iter_t(boost::begin(r), f),
+ transform_iter_t(boost::end(r), f))
+ {
+ }
};
template< class T >
struct transform_holder : holder<T>
{
transform_holder( T r ) : holder<T>(r)
- { }
+ {
+ }
};
- template< class InputRng, class UnaryFunction >
- inline transformed_range<UnaryFunction,InputRng>
- operator|( InputRng& r,
+ template< class SinglePassRange, class UnaryFunction >
+ inline transformed_range<UnaryFunction,SinglePassRange>
+ operator|( SinglePassRange& r,
const transform_holder<UnaryFunction>& f )
{
- return transformed_range<UnaryFunction,InputRng>( f.val, r );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+
+ return transformed_range<UnaryFunction,SinglePassRange>( f.val, r );
}
- template< class InputRng, class UnaryFunction >
- inline transformed_range<UnaryFunction, const InputRng>
- operator|( const InputRng& r,
+ template< class SinglePassRange, class UnaryFunction >
+ inline transformed_range<UnaryFunction, const SinglePassRange>
+ operator|( const SinglePassRange& r,
const transform_holder<UnaryFunction>& f )
{
- return transformed_range<UnaryFunction, const InputRng>( f.val, r );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return transformed_range<UnaryFunction, const SinglePassRange>(
+ f.val, r);
}
} // 'range_detail'
@@ -84,18 +110,25 @@ namespace boost
range_detail::forwarder<range_detail::transform_holder>();
}
- template<class UnaryFunction, class InputRange>
- inline transformed_range<UnaryFunction, InputRange>
- transform(InputRange& rng, UnaryFunction fn)
+ template<class UnaryFunction, class SinglePassRange>
+ inline transformed_range<UnaryFunction, SinglePassRange>
+ transform(SinglePassRange& rng, UnaryFunction fn)
{
- return transformed_range<UnaryFunction, InputRange>(fn, rng);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+
+ return transformed_range<UnaryFunction, SinglePassRange>(fn, rng);
}
- template<class UnaryFunction, class InputRange>
- inline transformed_range<UnaryFunction, const InputRange>
- transform(const InputRange& rng, UnaryFunction fn)
+ template<class UnaryFunction, class SinglePassRange>
+ inline transformed_range<UnaryFunction, const SinglePassRange>
+ transform(const SinglePassRange& rng, UnaryFunction fn)
{
- return transformed_range<UnaryFunction, const InputRange>(fn, rng);
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return transformed_range<UnaryFunction, const SinglePassRange>(
+ fn, rng);
}
} // 'adaptors'
diff --git a/3party/boost/boost/range/adaptor/type_erased.hpp b/3party/boost/boost/range/adaptor/type_erased.hpp
index 80bc7120a2..ba5b159886 100644
--- a/3party/boost/boost/range/adaptor/type_erased.hpp
+++ b/3party/boost/boost/range/adaptor/type_erased.hpp
@@ -14,7 +14,7 @@
#include <boost/range/value_type.hpp>
#include <boost/range/iterator_range_core.hpp>
#include <boost/range/any_range.hpp>
-#include <boost/cast.hpp>
+#include <boost/range/concepts.hpp>
namespace boost
{
@@ -56,6 +56,9 @@ namespace boost
, Buffer
>)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+
typedef typename any_range_type_generator<
SinglePassRange
, Value
@@ -92,6 +95,9 @@ namespace boost
, Buffer
>)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
typedef typename any_range_type_generator<
const SinglePassRange
, Value
@@ -129,6 +135,9 @@ namespace boost
> = type_erased<>()
)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<SinglePassRange>));
+
typedef typename any_range_type_generator<
SinglePassRange
, Value
@@ -167,6 +176,9 @@ namespace boost
> = type_erased<>()
)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
typedef typename any_range_type_generator<
const SinglePassRange
, Value
diff --git a/3party/boost/boost/range/adaptor/uniqued.hpp b/3party/boost/boost/range/adaptor/uniqued.hpp
index 40c82491c0..29101d3260 100644
--- a/3party/boost/boost/range/adaptor/uniqued.hpp
+++ b/3party/boost/boost/range/adaptor/uniqued.hpp
@@ -12,6 +12,7 @@
#define BOOST_RANGE_ADAPTOR_UNIQUED_IMPL_HPP
#include <boost/range/adaptor/adjacent_filtered.hpp>
+#include <boost/range/concepts.hpp>
namespace boost
{
@@ -47,6 +48,7 @@ namespace boost
operator|( ForwardRng& r,
unique_forwarder )
{
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));
return uniqued_range<ForwardRng>(r);
}
@@ -55,6 +57,7 @@ namespace boost
operator|( const ForwardRng& r,
unique_forwarder )
{
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));
return uniqued_range<const ForwardRng>(r);
}
@@ -74,6 +77,7 @@ namespace boost
inline uniqued_range<ForwardRange>
unique(ForwardRange& rng)
{
+ BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
return uniqued_range<ForwardRange>(rng);
}
@@ -81,6 +85,9 @@ namespace boost
inline uniqued_range<const ForwardRange>
unique(const ForwardRange& rng)
{
+ BOOST_RANGE_CONCEPT_ASSERT((
+ ForwardRangeConcept<const ForwardRange>));
+
return uniqued_range<const ForwardRange>(rng);
}
} // 'adaptors'
diff --git a/3party/boost/boost/range/adaptors.hpp b/3party/boost/boost/range/adaptors.hpp
index 92062a995a..0530c4d36c 100644
--- a/3party/boost/boost/range/adaptors.hpp
+++ b/3party/boost/boost/range/adaptors.hpp
@@ -15,6 +15,7 @@
#include <boost/range/adaptor/adjacent_filtered.hpp>
#include <boost/range/adaptor/copied.hpp>
#include <boost/range/adaptor/filtered.hpp>
+#include <boost/range/adaptor/formatted.hpp>
#include <boost/range/adaptor/indexed.hpp>
#include <boost/range/adaptor/indirected.hpp>
#include <boost/range/adaptor/map.hpp>
diff --git a/3party/boost/boost/range/algorithm.hpp b/3party/boost/boost/range/algorithm.hpp
index b7d8dd74f8..30dc5836e9 100644
--- a/3party/boost/boost/range/algorithm.hpp
+++ b/3party/boost/boost/range/algorithm.hpp
@@ -19,7 +19,7 @@
// were originally written by Vladimir Prus'
// <ghost@cs.msu.su> code from Boost Wiki
-#if defined(_MSC_VER) && _MSC_VER >= 1000
+#if defined(_MSC_VER)
#pragma once
#endif
diff --git a/3party/boost/boost/range/algorithm/equal.hpp b/3party/boost/boost/range/algorithm/equal.hpp
index 4472bb19db..2b44f3bca3 100644
--- a/3party/boost/boost/range/algorithm/equal.hpp
+++ b/3party/boost/boost/range/algorithm/equal.hpp
@@ -31,7 +31,7 @@ namespace boost
IteratorCategoryTag1,
IteratorCategoryTag2 )
{
- while (true)
+ for (;;)
{
// If we have reached the end of the left range then this is
// the end of the loop. They are equal if and only if we have
@@ -71,7 +71,7 @@ namespace boost
IteratorCategoryTag1,
IteratorCategoryTag2 )
{
- while (true)
+ for (;;)
{
// If we have reached the end of the left range then this is
// the end of the loop. They are equal if and only if we have
@@ -120,7 +120,9 @@ namespace boost
RandomAccessTraversalReadableIterator1 last1,
RandomAccessTraversalReadableIterator2 first2,
RandomAccessTraversalReadableIterator2 last2,
- BinaryPredicate pred )
+ BinaryPredicate pred,
+ std::random_access_iterator_tag,
+ std::random_access_iterator_tag )
{
return ((last1 - first1) == (last2 - first2))
&& std::equal(first1, last1, first2, pred);
diff --git a/3party/boost/boost/range/algorithm/for_each.hpp b/3party/boost/boost/range/algorithm/for_each.hpp
index fe8ab808d9..ea731b2fdd 100644
--- a/3party/boost/boost/range/algorithm/for_each.hpp
+++ b/3party/boost/boost/range/algorithm/for_each.hpp
@@ -32,7 +32,7 @@ namespace boost
template<typename Iterator, typename UnaryFunction>
inline UnaryFunction
for_each_impl(Iterator first, Iterator last, UnaryFunction fun,
- typename enable_if<
+ typename ::boost::enable_if<
is_reference_wrapper<UnaryFunction>,
void
>::type* = 0)
diff --git a/3party/boost/boost/range/algorithm/transform.hpp b/3party/boost/boost/range/algorithm/transform.hpp
index fb03441709..ade147a94c 100644
--- a/3party/boost/boost/range/algorithm/transform.hpp
+++ b/3party/boost/boost/range/algorithm/transform.hpp
@@ -58,9 +58,8 @@ namespace boost
OutputIterator out,
BinaryFunction fn)
{
- for (; first1 != last1; ++first1, ++first2)
+ for (; first1 != last1 && first2 != last2; ++first1, ++first2)
{
- BOOST_ASSERT( first2 != last2 );
*out = fn(*first1, *first2);
++out;
}
diff --git a/3party/boost/boost/range/algorithm/unique.hpp b/3party/boost/boost/range/algorithm/unique.hpp
index be6eaf932e..8017a837ce 100644
--- a/3party/boost/boost/range/algorithm/unique.hpp
+++ b/3party/boost/boost/range/algorithm/unique.hpp
@@ -89,11 +89,11 @@ inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange, return_begin_found>::ty
unique( ForwardRange& rng, BinaryPredicate pred )
{
BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
- return ::boost::range::unique<return_begin_found>(rng);
+ return ::boost::range::unique<return_begin_found>(rng, pred);
}
/// \overload
template< class ForwardRange, class BinaryPredicate >
-inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange, return_begin_found>::type
unique( const ForwardRange& rng, BinaryPredicate pred )
{
BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
diff --git a/3party/boost/boost/range/algorithm_ext/insert.hpp b/3party/boost/boost/range/algorithm_ext/insert.hpp
index b9adfdd3f7..c0c04c8759 100644
--- a/3party/boost/boost/range/algorithm_ext/insert.hpp
+++ b/3party/boost/boost/range/algorithm_ext/insert.hpp
@@ -29,12 +29,18 @@ inline Container& insert( Container& on,
{
BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<Container> ));
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<Range> ));
- BOOST_ASSERT( (void*)&on != (void*)&from &&
- "cannot copy from a container to itself" );
on.insert( before, boost::begin(from), boost::end(from) );
return on;
}
+template< class Container, class Range >
+inline Container& insert( Container& on, const Range& from )
+{
+ BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<Container> ));
+ BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<Range> ));
+ on.insert(boost::begin(from), boost::end(from));
+}
+
} // namespace range
using range::insert;
} // namespace boost
diff --git a/3party/boost/boost/range/algorithm_ext/push_back.hpp b/3party/boost/boost/range/algorithm_ext/push_back.hpp
index 51a7a7b793..6fb9b9bf42 100644
--- a/3party/boost/boost/range/algorithm_ext/push_back.hpp
+++ b/3party/boost/boost/range/algorithm_ext/push_back.hpp
@@ -15,6 +15,7 @@
#include <boost/range/difference_type.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
+#include <boost/range/detail/implementation_help.hpp>
#include <boost/assert.hpp>
namespace boost
@@ -27,8 +28,8 @@ inline Container& push_back( Container& on, const Range& from )
{
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<Container> ));
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const Range> ));
- BOOST_ASSERT( (void*)&on != (void*)&from &&
- "cannot copy from a container to itself" );
+ BOOST_ASSERT_MSG(!range_detail::is_same_object(on, from),
+ "cannot copy from a container to itself");
on.insert( on.end(), boost::begin(from), boost::end(from) );
return on;
}
diff --git a/3party/boost/boost/range/algorithm_ext/push_front.hpp b/3party/boost/boost/range/algorithm_ext/push_front.hpp
index 470d793123..e893098070 100644
--- a/3party/boost/boost/range/algorithm_ext/push_front.hpp
+++ b/3party/boost/boost/range/algorithm_ext/push_front.hpp
@@ -15,6 +15,7 @@
#include <boost/range/difference_type.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
+#include <boost/range/detail/implementation_help.hpp>
#include <boost/assert.hpp>
namespace boost
@@ -27,8 +28,8 @@ inline Container& push_front( Container& on, const Range& from )
{
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<Container> ));
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const Range> ));
- BOOST_ASSERT( (void*)&on != (void*)&from &&
- "cannot copy from a container to itself" );
+ BOOST_ASSERT_MSG(!range_detail::is_same_object(on, from),
+ "cannot copy from a container to itself");
on.insert( on.begin(), boost::begin(from), boost::end(from) );
return on;
}
diff --git a/3party/boost/boost/range/any_range.hpp b/3party/boost/boost/range/any_range.hpp
index ba4c224cb0..1cb599624b 100644
--- a/3party/boost/boost/range/any_range.hpp
+++ b/3party/boost/boost/range/any_range.hpp
@@ -19,7 +19,6 @@
#include <boost/range/reference.hpp>
#include <boost/range/value_type.hpp>
#include <boost/range/iterator_range_core.hpp>
-#include <boost/cast.hpp>
namespace boost
{
@@ -75,8 +74,8 @@ namespace boost
template<
class Value
, class Traversal
- , class Reference
- , class Difference
+ , class Reference = Value&
+ , class Difference = std::ptrdiff_t
, class Buffer = use_default
>
class any_range
diff --git a/3party/boost/boost/range/as_array.hpp b/3party/boost/boost/range/as_array.hpp
index 0723e6027a..69a158075d 100644
--- a/3party/boost/boost/range/as_array.hpp
+++ b/3party/boost/boost/range/as_array.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_AS_ARRAY_HPP
#define BOOST_RANGE_AS_ARRAY_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/as_literal.hpp b/3party/boost/boost/range/as_literal.hpp
index 9ea144d42f..1c16e4a0f7 100644
--- a/3party/boost/boost/range/as_literal.hpp
+++ b/3party/boost/boost/range/as_literal.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_AS_LITERAL_HPP
#define BOOST_RANGE_AS_LITERAL_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/atl.hpp b/3party/boost/boost/range/atl.hpp
index ab492d9626..e6500e5831 100644
--- a/3party/boost/boost/range/atl.hpp
+++ b/3party/boost/boost/range/atl.hpp
@@ -35,15 +35,6 @@
#endif
-#if !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLESTRING)
- #if (_MSC_VER < 1310) // from <boost/regex/mfc.hpp>, but dubious
- #define BOOST_RANGE_ATL_HAS_OLD_CSIMPLESTRING
- #endif
-#endif
-
-
-
-
// forward declarations
//
diff --git a/3party/boost/boost/range/begin.hpp b/3party/boost/boost/range/begin.hpp
index c6684887f5..ba5a73b92d 100644
--- a/3party/boost/boost/range/begin.hpp
+++ b/3party/boost/boost/range/begin.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_BEGIN_HPP
#define BOOST_RANGE_BEGIN_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -26,9 +26,7 @@
namespace boost
{
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
- !BOOST_WORKAROUND(__GNUC__, < 3) \
- /**/
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
namespace range_detail
{
#endif
@@ -85,9 +83,7 @@ namespace range_detail
}
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
- !BOOST_WORKAROUND(__GNUC__, < 3) \
- /**/
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
} // namespace 'range_detail'
#endif
@@ -100,9 +96,7 @@ namespace range_adl_barrier
template< class T >
inline BOOST_DEDUCED_TYPENAME range_iterator<T>::type begin( T& r )
{
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
- !BOOST_WORKAROUND(__GNUC__, < 3) \
- /**/
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
using namespace range_detail;
#endif
return range_begin( r );
@@ -111,9 +105,7 @@ inline BOOST_DEDUCED_TYPENAME range_iterator<T>::type begin( T& r )
template< class T >
inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type begin( const T& r )
{
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
- !BOOST_WORKAROUND(__GNUC__, < 3) \
- /**/
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
using namespace range_detail;
#endif
return range_begin( r );
diff --git a/3party/boost/boost/range/category.hpp b/3party/boost/boost/range/category.hpp
index 1574605f14..f5431adf2e 100644
--- a/3party/boost/boost/range/category.hpp
+++ b/3party/boost/boost/range/category.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_CATEGORY_HPP
#define BOOST_RANGE_CATEGORY_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/combine.hpp b/3party/boost/boost/range/combine.hpp
index 999bbc362e..26cef9ad73 100644
--- a/3party/boost/boost/range/combine.hpp
+++ b/3party/boost/boost/range/combine.hpp
@@ -9,296 +9,37 @@
#ifndef BOOST_RANGE_COMBINE_HPP
#define BOOST_RANGE_COMBINE_HPP
-#include <boost/iterator/zip_iterator.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/range/iterator.hpp>
-#include <boost/range/iterator_range.hpp>
-#include <boost/type_traits/is_void.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/plus.hpp>
-#include <boost/mpl/arithmetic.hpp>
#include <boost/config.hpp>
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/iterator/zip_iterator.hpp>
namespace boost
{
- namespace range_detail
- {
- struct void_ { typedef void_ type; };
- }
-
- template<> struct range_iterator< ::boost::range_detail::void_ >
- {
- typedef ::boost::tuples::null_type type;
- };
-
- namespace range_detail
+ namespace range
{
- inline ::boost::tuples::null_type range_begin( ::boost::range_detail::void_& )
- { return ::boost::tuples::null_type(); }
-
- inline ::boost::tuples::null_type range_begin( const ::boost::range_detail::void_& )
- { return ::boost::tuples::null_type(); }
-
- inline ::boost::tuples::null_type range_end( ::boost::range_detail::void_& )
- { return ::boost::tuples::null_type(); }
-
- inline ::boost::tuples::null_type range_end( const ::boost::range_detail::void_& )
- { return ::boost::tuples::null_type(); }
-
- template< class T >
- struct tuple_iter
- {
- typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::eval_if_c<
- ::boost::is_same<T, ::boost::range_detail::void_ >::value,
- ::boost::mpl::identity< ::boost::tuples::null_type >,
- ::boost::range_iterator<T>
- >::type type;
- };
-
- template< class Rng1, class Rng2 >
- struct tuple_range
- {
- typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::eval_if_c<
- ::boost::is_same<Rng1, ::boost::range_detail::void_ >::value,
- ::boost::range_detail::void_,
- ::boost::mpl::identity<Rng1>
- >::type type;
- };
-
- template
- <
- class R1,
- class R2,
- class R3,
- class R4,
- class R5,
- class R6
- >
- struct generate_tuple
- {
- typedef ::boost::tuples::tuple<
- BOOST_DEDUCED_TYPENAME tuple_iter<R1>::type,
- BOOST_DEDUCED_TYPENAME tuple_iter<R2>::type,
- BOOST_DEDUCED_TYPENAME tuple_iter<R3>::type,
- BOOST_DEDUCED_TYPENAME tuple_iter<R4>::type,
- BOOST_DEDUCED_TYPENAME tuple_iter<R5>::type,
- BOOST_DEDUCED_TYPENAME tuple_iter<R6>::type
- > type;
-
- static type begin( R1& r1, R2& r2, R3& r3, R4& r4, R5& r5, R6& r6 )
- {
- return ::boost::tuples::make_tuple( ::boost::begin(r1),
- ::boost::begin(r2),
- ::boost::begin(r3),
- ::boost::begin(r4),
- ::boost::begin(r5),
- ::boost::begin(r6) );
- }
-
- static type end( R1& r1, R2& r2, R3& r3, R4& r4, R5& r5, R6& r6 )
- {
- return ::boost::tuples::make_tuple( ::boost::end(r1),
- ::boost::end(r2),
- ::boost::end(r3),
- ::boost::end(r4),
- ::boost::end(r5),
- ::boost::end(r6) );
- }
- };
-
- template
- <
- class R1,
- class R2 = void_,
- class R3 = void_,
- class R4 = void_,
- class R5 = void_,
- class R6 = void_
- >
- struct zip_rng
- : iterator_range<
- zip_iterator<
- BOOST_DEDUCED_TYPENAME generate_tuple<R1,R2,R3,R4,R5,R6>::type
- >
- >
- {
- private:
- typedef generate_tuple<R1,R2,R3,R4,R5,R6> generator_t;
- typedef BOOST_DEDUCED_TYPENAME generator_t::type tuple_t;
- typedef zip_iterator<tuple_t> zip_iter_t;
- typedef iterator_range<zip_iter_t> base_t;
-
- public:
- zip_rng( R1& r1, R2& r2, R3& r3, R4& r4, R5& r5, R6& r6 )
- : base_t( zip_iter_t( generator_t::begin(r1,r2,r3,r4,r5,r6) ),
- zip_iter_t( generator_t::end(r1,r2,r3,r4,r5,r6) ) )
- {
- BOOST_ASSERT(::boost::distance(r1) <= ::boost::distance(r2));
- BOOST_ASSERT(::boost::distance(r1) <= ::boost::distance(r3));
- BOOST_ASSERT(::boost::distance(r1) <= ::boost::distance(r4));
- BOOST_ASSERT(::boost::distance(r1) <= ::boost::distance(r5));
- BOOST_ASSERT(::boost::distance(r1) <= ::boost::distance(r6));
- }
-
- template< class Zip, class Rng >
- zip_rng( Zip& z, Rng& r )
- : base_t( zip_iter_t( generator_t::begin( z, r ) ),
- zip_iter_t( generator_t::end( z, r ) ) )
- {
-
- // @todo: tuple::begin( should be overloaded for this situation
- }
-
- struct tuple_length : ::boost::tuples::length<tuple_t>
- { };
-
- template< unsigned N >
- struct get
- {
- template< class Z, class R >
- static BOOST_DEDUCED_TYPENAME ::boost::tuples::element<N,tuple_t>::type begin( Z& z, R& )
- {
- return get<N>( z.begin().get_iterator_tuple() );
- }
-
- template< class Z, class R >
- static BOOST_DEDUCED_TYPENAME ::boost::tuples::element<N,tuple_t>::type end( Z& z, R& r )
- {
- return get<N>( z.end().get_iterator_tuple() );
- }
- };
-
- };
- template< class Rng1, class Rng2 >
- struct zip_range
- : iterator_range<
- zip_iterator<
- ::boost::tuples::tuple<
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng1>::type,
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng2>::type
- >
- >
- >
- {
- private:
- typedef zip_iterator<
- ::boost::tuples::tuple<
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng1>::type,
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng2>::type
- >
- > zip_iter_t;
- typedef iterator_range<zip_iter_t> base_t;
-
- public:
- zip_range( Rng1& r1, Rng2& r2 )
- : base_t( zip_iter_t( ::boost::tuples::make_tuple(::boost::begin(r1),
- ::boost::begin(r2)) ),
- zip_iter_t( ::boost::tuples::make_tuple(::boost::end(r1),
- ::boost::end(r2)) ) )
- {
- BOOST_ASSERT(::boost::distance(r1) <= ::boost::distance(r2));
- }
- };
-
- template< class Rng1, class Rng2, class Rng3 >
- struct zip_range3
- : iterator_range<
- zip_iterator<
- ::boost::tuples::tuple<
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng1>::type,
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng2>::type,
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng3>::type
- >
- >
- >
- {
- private:
- typedef zip_iterator<
- ::boost::tuples::tuple<
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng1>::type,
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng2>::type,
- BOOST_DEDUCED_TYPENAME ::boost::range_iterator<Rng3>::type
- >
- > zip_iter_t;
- typedef iterator_range<zip_iter_t> base_t;
-
- public:
- zip_range3( Rng1& r1, Rng2& r2, Rng3& r3 )
- : base_t( zip_iter_t( ::boost::tuples::make_tuple(::boost::begin(r1),
- ::boost::begin(r2),
- ::boost::begin(r3)) ),
- zip_iter_t( ::boost::tuples::make_tuple(::boost::end(r1),
- ::boost::end(r2),
- ::boost::end(r3)) )
- )
- {
- BOOST_ASSERT(::boost::distance(r1) <= ::boost::distance(r2));
- BOOST_ASSERT(::boost::distance(r1) <= ::boost::distance(r3));
- }
- };
-
-
- struct combine_tag {};
-
- template< class Rng >
- inline zip_rng<Rng>
- operator&( combine_tag, Rng& r )
- {
- return zip_rng<Rng>(r);
- }
-
- template< class Rng >
- inline iterator_range<const Rng>
- operator&( combine_tag, const Rng& r )
- {
- return iterator_range<const Rng>(r);
- }
-
- template
- <
- class R1,
- class R2,
- class R3,
- class R4,
- class R5,
- class Rng
- >
- inline BOOST_DEDUCED_TYPENAME zip_rng<R1,R2,R3,R4,R5>::next
- operator&( const zip_rng<R1,R2,R3,R4,R5>& zip,
- Rng& r )
- {
- return zip_rng<R1,R2,R3,R4,R5>::next( zip, r );
- }
-
- } // namespace range_detail
-
- template< class Rng1, class Rng2 >
- inline ::boost::range_detail::zip_range<Rng1, Rng2> combine( Rng1& r1, Rng2& r2 )
- {
- return ::boost::range_detail::zip_range<Rng1, Rng2>(r1, r2);
- }
-
- template< class Rng1, class Rng2 >
- inline ::boost::range_detail::zip_range<const Rng1, Rng2> combine( const Rng1& r1, Rng2& r2 )
- {
- return ::boost::range_detail::zip_range<const Rng1, Rng2>(r1, r2);
- }
-
- template< class Rng1, class Rng2 >
- inline ::boost::range_detail::zip_range<Rng1, const Rng2> combine( Rng1& r1, const Rng2& r2 )
- {
- return ::boost::range_detail::zip_range<Rng1, const Rng2>(r1, r2);
- }
-
- template< class Rng1, class Rng2 >
- inline ::boost::range_detail::zip_range<const Rng1, const Rng2> combine( const Rng1& r1, const Rng2& r2 )
+template<typename IterTuple>
+class combined_range
+ : public iterator_range<zip_iterator<IterTuple> >
+{
+ typedef iterator_range<zip_iterator<IterTuple> > base;
+public:
+ combined_range(IterTuple first, IterTuple last)
+ : base(first, last)
{
- return ::boost::range_detail::zip_range<const Rng1, const Rng2>(r1, r2);
}
+};
+ } // namespace range
} // namespace boost
+#if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) || \
+ defined(BOOST_NO_CXX11_DECLTYPE) || \
+ defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || \
+ defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+# include <boost/range/detail/combine_cxx03.hpp>
+#else
+# include <boost/range/detail/combine_cxx11.hpp>
+#endif
+
#endif
diff --git a/3party/boost/boost/range/concepts.hpp b/3party/boost/boost/range/concepts.hpp
index 5a02a21d8d..3e612a35f9 100644
--- a/3party/boost/boost/range/concepts.hpp
+++ b/3party/boost/boost/range/concepts.hpp
@@ -23,6 +23,7 @@
#include <boost/range/iterator.hpp>
#include <boost/range/value_type.hpp>
#include <boost/range/detail/misc_concept.hpp>
+#include <boost/type_traits/remove_reference.hpp>
/*!
* \file
@@ -63,6 +64,7 @@ namespace boost {
#ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT
// List broken compiler versions here:
+#ifndef __clang__
#ifdef __GNUC__
// GNUC 4.2 has strange issues correctly detecting compliance with the Concepts
// hence the least disruptive approach is to turn-off the concept checking for
@@ -72,6 +74,14 @@ namespace boost {
#endif
#endif
+ #ifdef __GCCXML__
+ // GCC XML, unsurprisingly, has the same issues
+ #if __GCCXML_GNUC__ == 4 && __GCCXML_GNUC_MINOR__ == 2
+ #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0
+ #endif
+ #endif
+#endif
+
#ifdef __BORLANDC__
#define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0
#endif
@@ -253,41 +263,51 @@ namespace boost {
struct SinglePassRangeConcept
{
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
- typedef BOOST_DEDUCED_TYPENAME range_iterator<T const>::type const_iterator;
- typedef BOOST_DEDUCED_TYPENAME range_iterator<T>::type iterator;
+ // A few compilers don't like the rvalue reference T types so just
+ // remove it.
+ typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type Rng;
- BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept<iterator>));
- BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept<const_iterator>));
+ typedef BOOST_DEDUCED_TYPENAME range_iterator<
+ Rng const
+ >::type const_iterator;
- BOOST_CONCEPT_USAGE(SinglePassRangeConcept)
- {
+ typedef BOOST_DEDUCED_TYPENAME range_iterator<Rng>::type iterator;
+
+ BOOST_RANGE_CONCEPT_ASSERT((
+ range_detail::SinglePassIteratorConcept<iterator>));
+
+ BOOST_RANGE_CONCEPT_ASSERT((
+ range_detail::SinglePassIteratorConcept<const_iterator>));
+
+ BOOST_CONCEPT_USAGE(SinglePassRangeConcept)
+ {
// This has been modified from assigning to this->i
// (where i was a member variable) to improve
// compatibility with Boost.Lambda
iterator i1 = boost::begin(*m_range);
iterator i2 = boost::end(*m_range);
- ignore_unused_variable_warning(i1);
- ignore_unused_variable_warning(i2);
+ boost::ignore_unused_variable_warning(i1);
+ boost::ignore_unused_variable_warning(i2);
const_constraints(*m_range);
}
private:
- void const_constraints(const T& const_range)
+ void const_constraints(const Rng& const_range)
{
const_iterator ci1 = boost::begin(const_range);
const_iterator ci2 = boost::end(const_range);
- ignore_unused_variable_warning(ci1);
- ignore_unused_variable_warning(ci2);
+ boost::ignore_unused_variable_warning(ci1);
+ boost::ignore_unused_variable_warning(ci2);
}
// Rationale:
// The type of m_range is T* rather than T because it allows
// T to be an abstract class. The other obvious alternative of
// T& produces a warning on some compilers.
- T* m_range;
+ Rng* m_range;
#endif
};
@@ -301,11 +321,11 @@ namespace boost {
#endif
};
- template<class Range>
+ template<class T>
struct WriteableRangeConcept
{
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
- typedef BOOST_DEDUCED_TYPENAME range_iterator<Range>::type iterator;
+ typedef BOOST_DEDUCED_TYPENAME range_iterator<T>::type iterator;
BOOST_CONCEPT_USAGE(WriteableRangeConcept)
{
@@ -313,7 +333,7 @@ namespace boost {
}
private:
iterator i;
- BOOST_DEDUCED_TYPENAME range_value<Range>::type v;
+ BOOST_DEDUCED_TYPENAME range_value<T>::type v;
#endif
};
diff --git a/3party/boost/boost/range/config.hpp b/3party/boost/boost/range/config.hpp
index 4e7fb24f89..7600a5ff82 100644
--- a/3party/boost/boost/range/config.hpp
+++ b/3party/boost/boost/range/config.hpp
@@ -13,7 +13,7 @@
#include <boost/detail/workaround.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -26,18 +26,14 @@
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
# define BOOST_RANGE_DEDUCED_TYPENAME typename
#else
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300) && !defined(_MSC_EXTENSIONS)
-# define BOOST_RANGE_DEDUCED_TYPENAME typename
-# else
-# define BOOST_RANGE_DEDUCED_TYPENAME BOOST_DEDUCED_TYPENAME
-# endif
+#define BOOST_RANGE_DEDUCED_TYPENAME BOOST_DEDUCED_TYPENAME
#endif
#ifdef BOOST_RANGE_NO_ARRAY_SUPPORT
#error "macro already defined!"
#endif
-#if BOOST_WORKAROUND( BOOST_MSVC, < 1300 ) || BOOST_WORKAROUND( __MWERKS__, <= 0x3003 )
+#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 )
#define BOOST_RANGE_NO_ARRAY_SUPPORT 1
#endif
@@ -48,6 +44,12 @@
#define BOOST_RANGE_ARRAY_REF() (&boost_range_array)
#endif
+#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
+# define BOOST_RANGE_UNUSED __attribute__((unused))
+#else
+# define BOOST_RANGE_UNUSED
+#endif
+
#endif
diff --git a/3party/boost/boost/range/const_iterator.hpp b/3party/boost/boost/range/const_iterator.hpp
index 875320fb00..3413e59195 100644
--- a/3party/boost/boost/range/const_iterator.hpp
+++ b/3party/boost/boost/range/const_iterator.hpp
@@ -11,18 +11,16 @@
#ifndef BOOST_RANGE_CONST_ITERATOR_HPP
#define BOOST_RANGE_CONST_ITERATOR_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/range/config.hpp>
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#include <boost/range/detail/const_iterator.hpp>
-#else
-
+#include <boost/range/range_fwd.hpp>
#include <boost/range/detail/extract_optional_type.hpp>
#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
#include <cstddef>
#include <utility>
@@ -32,36 +30,47 @@ namespace boost
// default
//////////////////////////////////////////////////////////////////////////
- namespace range_detail {
- BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( const_iterator )
- }
+ namespace range_detail
+ {
- template< typename C >
- struct range_const_iterator : range_detail::extract_const_iterator<C>
- {};
-
- //////////////////////////////////////////////////////////////////////////
- // pair
- //////////////////////////////////////////////////////////////////////////
+BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( const_iterator )
- template< typename Iterator >
- struct range_const_iterator< std::pair<Iterator,Iterator> >
- {
- typedef Iterator type;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // array
- //////////////////////////////////////////////////////////////////////////
+template< typename C >
+struct range_const_iterator
+ : extract_const_iterator<C>
+{};
- template< typename T, std::size_t sz >
- struct range_const_iterator< T[sz] >
- {
- typedef const T* type;
- };
+//////////////////////////////////////////////////////////////////////////
+// pair
+//////////////////////////////////////////////////////////////////////////
+
+template< typename Iterator >
+struct range_const_iterator<std::pair<Iterator,Iterator> >
+{
+ typedef Iterator type;
+};
+
+//////////////////////////////////////////////////////////////////////////
+// array
+//////////////////////////////////////////////////////////////////////////
+
+template< typename T, std::size_t sz >
+struct range_const_iterator< T[sz] >
+{
+ typedef const T* type;
+};
+
+ } // namespace range_detail
+
+template<typename C, typename Enabler=void>
+struct range_const_iterator
+ : range_detail::range_const_iterator<
+ BOOST_DEDUCED_TYPENAME remove_reference<C>::type
+ >
+{
+};
} // namespace boost
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#endif
diff --git a/3party/boost/boost/range/const_reverse_iterator.hpp b/3party/boost/boost/range/const_reverse_iterator.hpp
index 215bcc776f..bfe161561c 100644
--- a/3party/boost/boost/range/const_reverse_iterator.hpp
+++ b/3party/boost/boost/range/const_reverse_iterator.hpp
@@ -11,11 +11,12 @@
#ifndef BOOST_RANGE_CONST_REVERSE_ITERATOR_HPP
#define BOOST_RANGE_CONST_REVERSE_ITERATOR_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/range/reverse_iterator.hpp>
+#include <boost/type_traits/remove_reference.hpp>
namespace boost
{
@@ -24,7 +25,9 @@ namespace boost
//
template< typename C >
- struct range_const_reverse_iterator : range_reverse_iterator<const C>
+ struct range_const_reverse_iterator
+ : range_reverse_iterator<
+ const BOOST_DEDUCED_TYPENAME remove_reference<C>::type>
{ };
} // namespace boost
diff --git a/3party/boost/boost/range/counting_range.hpp b/3party/boost/boost/range/counting_range.hpp
index b8e4e3a7e6..d886a2133f 100644
--- a/3party/boost/boost/range/counting_range.hpp
+++ b/3party/boost/boost/range/counting_range.hpp
@@ -17,11 +17,11 @@
#include <boost/range/iterator_range_core.hpp>
#include <boost/range/value_type.hpp>
+#include <boost/range/iterator.hpp>
#include <boost/iterator/counting_iterator.hpp>
namespace boost
{
-
template<class Value>
inline iterator_range<counting_iterator<Value> >
counting_range(Value first, Value last)
@@ -33,29 +33,39 @@ namespace boost
}
template<class Range>
- inline iterator_range<counting_iterator<BOOST_DEDUCED_TYPENAME range_value<const Range>::type> >
+ inline iterator_range<
+ counting_iterator<
+ BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type
+ >
+ >
counting_range(const Range& rng)
{
- typedef counting_iterator<BOOST_DEDUCED_TYPENAME range_value<const Range>::type> counting_iterator_t;
+ typedef counting_iterator<
+ BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type
+ > counting_iterator_t;
+
typedef iterator_range<counting_iterator_t> result_t;
- return boost::empty(rng)
- ? result_t()
- : result_t(
- counting_iterator_t(*boost::begin(rng)),
- counting_iterator_t(*boost::prior(boost::end(rng))));
+
+ return result_t(counting_iterator_t(boost::begin(rng)),
+ counting_iterator_t(boost::end(rng)));
}
template<class Range>
- inline iterator_range<counting_iterator<BOOST_DEDUCED_TYPENAME range_value<Range>::type> >
+ inline iterator_range<
+ counting_iterator<
+ BOOST_DEDUCED_TYPENAME range_iterator<Range>::type
+ >
+ >
counting_range(Range& rng)
{
- typedef counting_iterator<BOOST_DEDUCED_TYPENAME range_value<Range>::type> counting_iterator_t;
+ typedef counting_iterator<
+ BOOST_DEDUCED_TYPENAME range_iterator<Range>::type
+ > counting_iterator_t;
+
typedef iterator_range<counting_iterator_t> result_t;
- return boost::empty(rng)
- ? result_t()
- : result_t(
- counting_iterator_t(*boost::begin(rng)),
- counting_iterator_t(*boost::prior(boost::end(rng))));
+
+ return result_t(counting_iterator_t(boost::begin(rng)),
+ counting_iterator_t(boost::end(rng)));
}
} // namespace boost
diff --git a/3party/boost/boost/range/detail/any_iterator.hpp b/3party/boost/boost/range/detail/any_iterator.hpp
index b45058e347..555bd574fb 100644
--- a/3party/boost/boost/range/detail/any_iterator.hpp
+++ b/3party/boost/boost/range/detail/any_iterator.hpp
@@ -10,7 +10,6 @@
#ifndef BOOST_RANGE_DETAIL_ANY_ITERATOR_HPP_INCLUDED
#define BOOST_RANGE_DETAIL_ANY_ITERATOR_HPP_INCLUDED
-#include <boost/cast.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/or.hpp>
#include <boost/mpl/not.hpp>
@@ -356,7 +355,7 @@ namespace boost
OtherDifference,
Buffer
>& other,
- typename enable_if<
+ typename ::boost::enable_if<
typename mpl::and_<
typename is_mutable_reference<OtherReference>::type,
typename is_const_reference<Reference>::type
@@ -387,7 +386,7 @@ namespace boost
, OtherDifference
, Buffer
>& other,
- typename enable_if<
+ typename ::boost::enable_if<
typename mpl::or_<
typename mpl::and_<
typename is_mutable_reference<OtherReference>::type,
@@ -423,7 +422,7 @@ namespace boost
, OtherDifference
, Buffer
>& other,
- typename enable_if<
+ typename ::boost::enable_if<
typename is_convertible_to_value_as_reference<
OtherReference
, Reference
diff --git a/3party/boost/boost/range/detail/any_iterator_interface.hpp b/3party/boost/boost/range/detail/any_iterator_interface.hpp
index 245149180d..cd567146f2 100644
--- a/3party/boost/boost/range/detail/any_iterator_interface.hpp
+++ b/3party/boost/boost/range/detail/any_iterator_interface.hpp
@@ -27,25 +27,40 @@ namespace boost
{
typedef typename mpl::if_<
typename is_reference<T>::type,
- typename add_reference<
- typename add_const<
- typename remove_reference<T>::type
- >::type
- >::type,
+ typename add_const<
+ typename remove_reference<T>::type
+ >::type&,
T
>::type type;
};
+ template<class T>
+ struct mutable_reference_type_generator
+ {
+ typedef typename mpl::if_<
+ typename mpl::and_<
+ typename is_const<T>::type,
+ typename mpl::not_<typename is_reference<T>::type>::type
+ >::type,
+ T,
+ typename add_reference<T>::type
+ >::type type;
+ };
+
template<
class Reference
, class Buffer
>
struct any_incrementable_iterator_interface
{
- typedef Reference reference;
+ typedef typename mutable_reference_type_generator<
+ Reference
+ >::type reference;
+
typedef typename const_reference_type_generator<
Reference
>::type const_reference;
+
typedef typename remove_const<
typename remove_reference<Reference>::type
>::type reference_as_value_type;
@@ -87,7 +102,7 @@ namespace boost
virtual any_single_pass_iterator_interface<reference_as_value_type, Buffer>*
clone_reference_as_value(buffer_type& buffer) const = 0;
- virtual Reference dereference() const = 0;
+ virtual reference dereference() const = 0;
virtual bool equal(const any_single_pass_iterator_interface& other) const = 0;
};
diff --git a/3party/boost/boost/range/detail/any_iterator_wrapper.hpp b/3party/boost/boost/range/detail/any_iterator_wrapper.hpp
index 502e3e8216..bcd9b7f8ea 100644
--- a/3party/boost/boost/range/detail/any_iterator_wrapper.hpp
+++ b/3party/boost/boost/range/detail/any_iterator_wrapper.hpp
@@ -10,7 +10,7 @@
#ifndef BOOST_RANGE_DETAIL_ANY_ITERATOR_WRAPPER_HPP_INCLUDED
#define BOOST_RANGE_DETAIL_ANY_ITERATOR_WRAPPER_HPP_INCLUDED
-#include <boost/cast.hpp>
+#include <boost/polymorphic_cast.hpp>
#include <boost/range/config.hpp>
#include <boost/range/detail/any_iterator_interface.hpp>
#include <boost/range/concepts.hpp>
@@ -19,6 +19,27 @@ namespace boost
{
namespace range_detail
{
+ template<typename TargetT, typename SourceT>
+ TargetT& polymorphic_ref_downcast(SourceT& source)
+ {
+#ifdef BOOST_NO_RTTI
+ return static_cast<TargetT&>(source);
+#else
+ return *boost::polymorphic_downcast<TargetT*>(&source);
+#endif
+ }
+
+ template<class Reference, class T>
+ Reference dereference_cast(T& x)
+ {
+ return static_cast<Reference>(x);
+ }
+ template<class Reference, class T>
+ Reference dereference_cast(const T& x)
+ {
+ return static_cast<Reference>(const_cast<T&>(x));
+ }
+
template<
class WrappedIterator
, class Reference
@@ -114,7 +135,13 @@ namespace boost
{
struct disabler {};
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassIteratorConcept<WrappedIterator> ));
+ typedef any_single_pass_iterator_interface<
+ Reference,
+ Buffer
+ > base_type;
+
public:
+ typedef typename base_type::reference reference;
any_single_pass_iterator_wrapper()
: m_it()
@@ -175,12 +202,12 @@ namespace boost
virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const
{
- return m_it == boost::polymorphic_downcast<const any_single_pass_iterator_wrapper*>(&other)->m_it;
+ return m_it == range_detail::polymorphic_ref_downcast<const any_single_pass_iterator_wrapper>(other).m_it;
}
- virtual Reference dereference() const
+ virtual reference dereference() const
{
- return *m_it;
+ return dereference_cast<reference>(*m_it);
}
private:
@@ -199,7 +226,14 @@ namespace boost
>
{
BOOST_RANGE_CONCEPT_ASSERT(( ForwardIteratorConcept<WrappedIterator> ));
+ typedef any_forward_iterator_interface<
+ Reference,
+ Buffer
+ > base_type;
+
public:
+ typedef typename base_type::reference reference;
+
any_forward_iterator_wrapper()
: m_it()
{}
@@ -260,12 +294,12 @@ namespace boost
virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const
{
- return m_it == boost::polymorphic_downcast<const any_forward_iterator_wrapper*>(&other)->m_it;
+ return m_it == range_detail::polymorphic_ref_downcast<const any_forward_iterator_wrapper>(other).m_it;
}
- virtual Reference dereference() const
+ virtual reference dereference() const
{
- return *m_it;
+ return dereference_cast<reference>(*m_it);
}
private:
WrappedIterator m_it;
@@ -283,7 +317,14 @@ namespace boost
>
{
BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalIteratorConcept<WrappedIterator> ));
+ typedef any_bidirectional_iterator_interface<
+ Reference,
+ Buffer
+ > base_type;
+
public:
+ typedef typename base_type::reference reference;
+
any_bidirectional_iterator_wrapper()
: m_it()
{
@@ -350,12 +391,12 @@ namespace boost
virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const
{
- return m_it == boost::polymorphic_downcast<const any_bidirectional_iterator_wrapper*>(&other)->m_it;
+ return m_it == range_detail::polymorphic_ref_downcast<const any_bidirectional_iterator_wrapper>(other).m_it;
}
- virtual Reference dereference() const
+ virtual reference dereference() const
{
- return *m_it;
+ return dereference_cast<reference>(*m_it);
}
private:
@@ -376,7 +417,14 @@ namespace boost
>
{
BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessIteratorConcept<WrappedIterator> ));
+ typedef any_random_access_iterator_interface<
+ Reference,
+ Difference,
+ Buffer
+ > base_type;
+
public:
+ typedef typename base_type::reference reference;
typedef Difference difference_type;
any_random_access_iterator_wrapper()
@@ -444,7 +492,7 @@ namespace boost
virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const
{
- return m_it == boost::polymorphic_downcast<const any_random_access_iterator_wrapper*>(&other)->m_it;
+ return m_it == range_detail::polymorphic_ref_downcast<const any_random_access_iterator_wrapper>(other).m_it;
}
virtual void decrement()
@@ -457,14 +505,14 @@ namespace boost
m_it += offset;
}
- virtual Reference dereference() const
+ virtual reference dereference() const
{
- return *m_it;
+ return dereference_cast<reference>(*m_it);
}
virtual Difference distance_to(const any_random_access_iterator_interface<Reference, Difference, Buffer>& other) const
{
- return boost::polymorphic_downcast<const any_random_access_iterator_wrapper*>(&other)->m_it - m_it;
+ return range_detail::polymorphic_ref_downcast<const any_random_access_iterator_wrapper>(other).m_it - m_it;
}
private:
diff --git a/3party/boost/boost/range/detail/as_literal.hpp b/3party/boost/boost/range/detail/as_literal.hpp
index 0bd9a15f17..8b219ea246 100644
--- a/3party/boost/boost/range/detail/as_literal.hpp
+++ b/3party/boost/boost/range/detail/as_literal.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_DETAIL_AS_LITERAL_HPP
#define BOOST_RANGE_DETAIL_AS_LITERAL_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/detail/begin.hpp b/3party/boost/boost/range/detail/begin.hpp
index f3da7323a4..1d9390ff85 100644
--- a/3party/boost/boost/range/detail/begin.hpp
+++ b/3party/boost/boost/range/detail/begin.hpp
@@ -15,9 +15,6 @@
#include <boost/detail/workaround.hpp>
#include <boost/range/iterator.hpp>
#include <boost/range/detail/common.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1310)
-# include <boost/range/value_type.hpp>
-#endif
namespace boost
{
@@ -62,19 +59,11 @@ namespace boost
template<>
struct range_begin<array_>
{
- #if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
- template< typename T, std::size_t sz >
- static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )
- {
- return boost_range_array;
- }
- #else
template<typename T>
static BOOST_RANGE_DEDUCED_TYPENAME range_value<T>::type* fun(T& t)
{
return t;
}
- #endif
};
} // namespace 'range_detail'
diff --git a/3party/boost/boost/range/detail/collection_traits_detail.hpp b/3party/boost/boost/range/detail/collection_traits_detail.hpp
index 93652b5e9d..1f2b77ccf9 100644
--- a/3party/boost/boost/range/detail/collection_traits_detail.hpp
+++ b/3party/boost/boost/range/detail/collection_traits_detail.hpp
@@ -185,7 +185,6 @@ namespace boost {
// Array container traits ---------------------------------------------------------------
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// array traits ( partial specialization )
template< typename T >
struct array_traits;
@@ -204,125 +203,6 @@ namespace boost {
BOOST_STATIC_CONSTANT( size_type, array_size = sz );
};
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- // array traits ( no partial specialization )
- /*
- without partial specialization we are able to
- provide support only for a limited number of
- types. Currently the primitive numeric types
- are supported
- */
- template< typename T, typename BaseT >
- struct array_traits_impl
- {
- typedef BaseT value_type;
- typedef BaseT* iterator;
- typedef const BaseT* const_iterator;
- typedef std::size_t size_type;
- typedef std::ptrdiff_t difference_type;
-
- // size of the array
- BOOST_STATIC_CONSTANT( size_type, array_size = sizeof(T)/sizeof(BaseT) );
- };
-
- template< typename T, typename BaseT >
- struct array_traits_impl_selector
- {
- typedef array_traits_impl<T,BaseT> type;
- };
-
- struct array_traits_void
- {
- typedef void type;
- };
-
- template< typename T, typename BaseT >
- struct array_traits_cv_selector
- {
- typedef BOOST_STRING_TYPENAME
- ::boost::mpl::eval_if<
- ::boost::is_convertible<T,BaseT*>,
- array_traits_impl_selector<T,BaseT>,
- ::boost::mpl::eval_if<
- ::boost::is_convertible<T,const BaseT*>,
- array_traits_impl_selector<T, const BaseT>,
- ::boost::mpl::eval_if<
- ::boost::is_convertible<T, volatile BaseT*>,
- array_traits_impl_selector<T, volatile BaseT>,
- array_traits_impl_selector<T, const volatile BaseT>
- >
- >
- >::type type;
- };
-
- template< typename T >
- struct array_traits_select
- {
- template< typename T1, typename T2 >
- struct apply
- {
- typedef BOOST_STRING_TYPENAME
- ::boost::mpl::eval_if<
- ::boost::is_convertible<T,const volatile T2*>,
- array_traits_cv_selector<T,T2>,
- ::boost::mpl::identity<T1> >::type type;
- };
- };
-
- template< typename T >
- struct array_traits_selector
- {
- private:
- // supported array base types
-#ifndef BOOST_NO_INTRINSIC_WCHAR_T
- typedef BOOST_STRING_TYPENAME
- ::boost::mpl::vector10<
- wchar_t,
-#else // BOOST_NO_INTRINSIC_WCHAR_T
- typedef BOOST_STRING_TYPENAME
- ::boost::mpl::vector9<
-#endif // BOOST_NO_INTRINSIC_WCHAR_T
- char,
- signed char,
- unsigned char,
- signed short,
- unsigned short,
- signed int,
- unsigned int,
- signed long,
- unsigned long
- >::type array_base_types;
-
- public:
- typedef BOOST_STRING_TYPENAME
- ::boost::mpl::fold<
- array_base_types,
- ::boost::algorithm::detail::array_traits_void,
- ::boost::algorithm::detail::array_traits_select<T> >::type type;
- };
-
- template< typename T >
- struct array_traits
- {
- typedef BOOST_STRING_TYPENAME
- array_traits_selector<T>::type traits_type;
-
- typedef BOOST_STRING_TYPENAME
- traits_type::value_type value_type;
- typedef BOOST_STRING_TYPENAME
- traits_type::iterator iterator;
- typedef BOOST_STRING_TYPENAME
- traits_type::const_iterator const_iterator;
- typedef BOOST_STRING_TYPENAME
- traits_type::size_type size_type;
- typedef BOOST_STRING_TYPENAME
- traits_type::difference_type difference_type;
-
- BOOST_STATIC_CONSTANT( size_type, array_size = traits_type::array_size );
- };
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// array length resolving
/*
diff --git a/3party/boost/boost/range/detail/combine_cxx03.hpp b/3party/boost/boost/range/detail/combine_cxx03.hpp
new file mode 100644
index 0000000000..47da6a6d6b
--- /dev/null
+++ b/3party/boost/boost/range/detail/combine_cxx03.hpp
@@ -0,0 +1,131 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2014. 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/range/
+//
+#ifndef BOOST_RANGE_DETAIL_COMBINE_CXX03_HPP
+#define BOOST_RANGE_DETAIL_COMBINE_CXX03_HPP
+
+#ifndef BOOST_RANGE_MIN_COMBINE_ARGS
+#define BOOST_RANGE_MIN_COMBINE_ARGS 2
+#endif
+
+#ifndef BOOST_RANGE_MAX_COMBINE_ARGS
+#define BOOST_RANGE_MAX_COMBINE_ARGS 5
+#endif
+
+#include <boost/config.hpp>
+#include <boost/iterator/zip_iterator.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/arithmetic/div.hpp>
+#include <boost/preprocessor/arithmetic/mul.hpp>
+#include <boost/preprocessor/control.hpp>
+#include <boost/preprocessor/control/while.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/punctuation/comma.hpp>
+#include <boost/preprocessor/repetition.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/transform.hpp>
+#include <boost/utility/result_of.hpp>
+
+#include <vector>
+#include <list>
+
+namespace boost
+{
+ namespace range_detail
+ {
+
+template<typename F, typename T, int SIZE>
+struct combined_result_impl;
+
+template<typename F, typename T>
+struct combined_result
+ : combined_result_impl<F, T, tuples::length<T>::value>
+{
+};
+
+#define BOOST_RANGE_combined_element(z, n, data) \
+ typename tuples::element<n, T>::type
+
+#define BOOST_RANGE_combined_result(z, n, data) \
+ template<typename F, typename T> \
+ struct combined_result_impl <F,T,n> \
+ : result_of<F(BOOST_PP_ENUM(n, BOOST_RANGE_combined_element, ~))> \
+ { \
+ };
+
+#define BOOST_PP_LOCAL_MACRO(n) BOOST_RANGE_combined_result(~,n,~)
+
+#define BOOST_PP_LOCAL_LIMITS (BOOST_RANGE_MIN_COMBINE_ARGS, \
+ BOOST_RANGE_MAX_COMBINE_ARGS)
+#include BOOST_PP_LOCAL_ITERATE()
+
+#define BOOST_RANGE_combined_get(z, n, data) get<n>(tuple)
+
+#define BOOST_RANGE_combined_unpack(z, n, data) \
+ template<typename F, typename T> inline \
+ typename combined_result<F,T>::type \
+ unpack_(mpl::int_<n>, F f, const T& tuple) \
+ { \
+ return f(BOOST_PP_ENUM(n, BOOST_RANGE_combined_get, ~)); \
+ }
+
+#define BOOST_PP_LOCAL_MACRO(n) BOOST_RANGE_combined_unpack(~,n,~)
+#define BOOST_PP_LOCAL_LIMITS (BOOST_RANGE_MIN_COMBINE_ARGS, \
+ BOOST_RANGE_MAX_COMBINE_ARGS)
+#include BOOST_PP_LOCAL_ITERATE()
+
+} // namespace range_detail
+
+namespace range
+{
+
+#define BOOST_RANGE_combined_seq(z, n, data) boost::data(BOOST_PP_CAT(r,n))
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+#include <boost/range/detail/combine_no_rvalue.hpp>
+
+#else // by using rvalue references we avoid requiring 2^n overloads.
+
+#include <boost/range/detail/combine_rvalue.hpp>
+
+#endif
+
+#define BOOST_PP_LOCAL_MACRO(n) BOOST_RANGE_combine(~,n,~)
+#define BOOST_PP_LOCAL_LIMITS (BOOST_RANGE_MIN_COMBINE_ARGS, \
+ BOOST_RANGE_MAX_COMBINE_ARGS)
+#include BOOST_PP_LOCAL_ITERATE()
+
+ } // namespace range
+
+ using boost::range::combine;
+
+} // namespace boost
+
+#endif // include guard
+
+#undef BOOST_RANGE_combined_element
+#undef BOOST_RANGE_combined_result
+#undef BOOST_RANGE_combined_get
+#undef BOOST_RANGE_combined_unpack
+#undef BOOST_RANGE_combined_seq
+#undef BOOST_RANGE_combined_exp_pred
+#undef BOOST_RANGE_combined_exp_op
+#undef BOOST_RANGE_combined_exp
+#undef BOOST_RANGE_combined_bitset_pred
+#undef BOOST_RANGE_combined_bitset_op
+#undef BOOST_RANGE_combined_bitset
+#undef BOOST_RANGE_combined_range_iterator
+#undef BOOST_RANGE_combined_args
+#undef BOOST_RANGE_combine_impl
+#undef BOOST_RANGE_combine
diff --git a/3party/boost/boost/range/detail/combine_cxx11.hpp b/3party/boost/boost/range/detail/combine_cxx11.hpp
new file mode 100644
index 0000000000..a7fa5b1e94
--- /dev/null
+++ b/3party/boost/boost/range/detail/combine_cxx11.hpp
@@ -0,0 +1,40 @@
+// Copyright Neil Groves 2014. 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/range/
+//
+#ifndef BOOST_RANGE_DETAIL_COMBINE_CXX11_HPP
+#define BOOST_RANGE_DETAIL_COMBINE_CXX11_HPP
+
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/iterator/zip_iterator.hpp>
+
+#include <fstream>
+
+namespace boost
+{
+ namespace range
+ {
+
+template<typename... Ranges>
+auto combine(Ranges&&... rngs) ->
+ combined_range<decltype(boost::make_tuple(boost::begin(rngs)...))>
+{
+ return combined_range<decltype(boost::make_tuple(boost::begin(rngs)...))>(
+ boost::make_tuple(boost::begin(rngs)...),
+ boost::make_tuple(boost::end(rngs)...));
+}
+
+ } // namespace range
+
+using range::combine;
+
+} // namespace boost
+
+#endif // include guard
diff --git a/3party/boost/boost/range/detail/combine_no_rvalue.hpp b/3party/boost/boost/range/detail/combine_no_rvalue.hpp
new file mode 100644
index 0000000000..bdb3950dc4
--- /dev/null
+++ b/3party/boost/boost/range/detail/combine_no_rvalue.hpp
@@ -0,0 +1,73 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2014. 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/range/
+//
+#define BOOST_RANGE_combined_exp_pred(d, data) BOOST_PP_TUPLE_ELEM(3, 0, data)
+
+#define BOOST_RANGE_combined_exp_op(d, data) \
+ ( \
+ BOOST_PP_DEC( \
+ BOOST_PP_TUPLE_ELEM(3, 0, data) \
+ ), \
+ BOOST_PP_TUPLE_ELEM(3, 1, data), \
+ BOOST_PP_MUL_D( \
+ d, \
+ BOOST_PP_TUPLE_ELEM(3, 2, data), \
+ BOOST_PP_TUPLE_ELEM(3, 1, data) \
+ ) \
+ )
+
+#define BOOST_RANGE_combined_exp(x, n) \
+ BOOST_PP_TUPLE_ELEM(3, 2, \
+ BOOST_PP_WHILE(BOOST_RANGE_combined_exp_pred, \
+ BOOST_RANGE_combined_exp_op, (n, x, 1)))
+
+#define BOOST_RANGE_combined_bitset_pred(n, state) \
+ BOOST_PP_TUPLE_ELEM(2,1,state)
+
+#define BOOST_RANGE_combined_bitset_op(d, state) \
+ (BOOST_PP_DIV_D(d, BOOST_PP_TUPLE_ELEM(2,0,state), 2), \
+ BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2,1,state)))
+
+#define BOOST_RANGE_combined_bitset(i, n) \
+BOOST_PP_MOD(BOOST_PP_TUPLE_ELEM(2, 0, \
+ BOOST_PP_WHILE(BOOST_RANGE_combined_bitset_pred, \
+ BOOST_RANGE_combined_bitset_op, (i,n))), 2)
+
+#define BOOST_RANGE_combined_range_iterator(z, n, i) \
+ typename range_iterator< \
+ BOOST_PP_CAT(R,n) \
+ BOOST_PP_IF( \
+ BOOST_RANGE_combined_bitset(i,n), \
+ BOOST_PP_IDENTITY(const), \
+ BOOST_PP_EMPTY)() \
+ >::type
+
+#define BOOST_RANGE_combined_args(z, n, i) \
+ BOOST_PP_CAT(R, n) \
+ BOOST_PP_IF(BOOST_RANGE_combined_bitset(i,n), const&, &) \
+ BOOST_PP_CAT(r, n)
+
+#define BOOST_RANGE_combine_impl(z, i, n)\
+ template<BOOST_PP_ENUM_PARAMS(n, typename R)> \
+ inline range::combined_range< \
+ boost::tuple<BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, i)> \
+ > \
+ combine(BOOST_PP_ENUM(n, BOOST_RANGE_combined_args, i)) \
+ { \
+ typedef tuple< \
+ BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, i) \
+ > rng_tuple_t; \
+ return range::combined_range<rng_tuple_t>( \
+ rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, begin)), \
+ rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, end))); \
+ }
+
+
+#define BOOST_RANGE_combine(z, n, data) \
+ BOOST_PP_REPEAT(BOOST_RANGE_combined_exp(2,n), BOOST_RANGE_combine_impl, n)
diff --git a/3party/boost/boost/range/detail/combine_rvalue.hpp b/3party/boost/boost/range/detail/combine_rvalue.hpp
new file mode 100644
index 0000000000..2e323b75ad
--- /dev/null
+++ b/3party/boost/boost/range/detail/combine_rvalue.hpp
@@ -0,0 +1,32 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2014. 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/range/
+//
+#define BOOST_RANGE_combined_args(z, n, i) \
+ BOOST_PP_CAT(R, n)&& BOOST_PP_CAT(r, n)
+
+#define BOOST_RANGE_combined_range_iterator(z, n, i) \
+ typename range_iterator< \
+ typename remove_reference<BOOST_PP_CAT(R,n)>::type \
+ >::type
+
+
+#define BOOST_RANGE_combine(z, n, data) \
+ template <BOOST_PP_ENUM_PARAMS(n, typename R)> \
+ inline range::combined_range< \
+ tuple<BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, ~)> \
+ > \
+ combine(BOOST_PP_ENUM(n, BOOST_RANGE_combined_args, ~)) \
+ { \
+ typedef tuple< \
+ BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, ~) \
+ > rng_tuple_t; \
+ return range::combined_range<rng_tuple_t>( \
+ rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, begin)), \
+ rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, end))); \
+ }
diff --git a/3party/boost/boost/range/detail/common.hpp b/3party/boost/boost/range/detail/common.hpp
index f7539f5f68..b0ad535775 100644
--- a/3party/boost/boost/range/detail/common.hpp
+++ b/3party/boost/boost/range/detail/common.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_DETAIL_COMMON_HPP
#define BOOST_RANGE_DETAIL_COMMON_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/detail/const_iterator.hpp b/3party/boost/boost/range/detail/const_iterator.hpp
deleted file mode 100644
index e5cb34a790..0000000000
--- a/3party/boost/boost/range/detail/const_iterator.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Boost.Range library
-//
-// Copyright Thorsten Ottosen 2003-2004. 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/range/
-//
-
-#ifndef BOOST_RANGE_DETAIL_CONST_ITERATOR_HPP
-#define BOOST_RANGE_DETAIL_CONST_ITERATOR_HPP
-
-#include <boost/range/detail/common.hpp>
-#include <boost/range/detail/remove_extent.hpp>
-
-//////////////////////////////////////////////////////////////////////////////
-// missing partial specialization workaround.
-//////////////////////////////////////////////////////////////////////////////
-
-namespace boost
-{
- namespace range_detail
- {
- template< typename T >
- struct range_const_iterator_;
-
- template<>
- struct range_const_iterator_<std_container_>
- {
- template< typename C >
- struct pts
- {
- typedef BOOST_RANGE_DEDUCED_TYPENAME C::const_iterator type;
- };
- };
-
- template<>
- struct range_const_iterator_<std_pair_>
- {
- template< typename P >
- struct pts
- {
- typedef BOOST_RANGE_DEDUCED_TYPENAME P::first_type type;
- };
- };
-
-
- template<>
- struct range_const_iterator_<array_>
- {
- template< typename T >
- struct pts
- {
- typedef const BOOST_RANGE_DEDUCED_TYPENAME
- remove_extent<T>::type* type;
- };
- };
- }
-
- template< typename C >
- class range_const_iterator
- {
- typedef BOOST_DEDUCED_TYPENAME range_detail::range<C>::type c_type;
- public:
- typedef BOOST_DEDUCED_TYPENAME range_detail::range_const_iterator_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;
- };
-
-}
-
-#endif
diff --git a/3party/boost/boost/range/detail/default_constructible_unary_fn.hpp b/3party/boost/boost/range/detail/default_constructible_unary_fn.hpp
new file mode 100644
index 0000000000..374ddda15d
--- /dev/null
+++ b/3party/boost/boost/range/detail/default_constructible_unary_fn.hpp
@@ -0,0 +1,64 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2014. 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/range/
+//
+#ifndef BOOST_RANGE_DETAIL_DEFAULT_CONSTRUCTIBLE_UNARY_FN_HPP_INCLUDED
+#define BOOST_RANGE_DETAIL_DEFAULT_CONSTRUCTIBLE_UNARY_FN_HPP_INCLUDED
+
+#include <boost/optional/optional.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/has_trivial_constructor.hpp>
+
+namespace boost
+{
+ namespace range_detail
+ {
+
+template<typename F, typename R>
+class default_constructible_unary_fn_wrapper
+{
+public:
+ typedef R result_type;
+
+ default_constructible_unary_fn_wrapper()
+ {
+ }
+ default_constructible_unary_fn_wrapper(const F& source)
+ : m_impl(source)
+ {
+ }
+ template<typename Arg>
+ R operator()(const Arg& arg) const
+ {
+ BOOST_ASSERT(m_impl);
+ return (*m_impl)(arg);
+ }
+ template<typename Arg>
+ R operator()(Arg& arg) const
+ {
+ BOOST_ASSERT(m_impl);
+ return (*m_impl)(arg);
+ }
+private:
+ boost::optional<F> m_impl;
+};
+
+template<typename F, typename R>
+struct default_constructible_unary_fn_gen
+{
+ typedef typename boost::mpl::if_<
+ boost::has_trivial_default_constructor<F>,
+ F,
+ default_constructible_unary_fn_wrapper<F,R>
+ >::type type;
+};
+
+ } // namespace range_detail
+} // namespace boost
+
+#endif // include guard
diff --git a/3party/boost/boost/range/detail/end.hpp b/3party/boost/boost/range/detail/end.hpp
index 8b5f35d80b..f2f71780a7 100644
--- a/3party/boost/boost/range/detail/end.hpp
+++ b/3party/boost/boost/range/detail/end.hpp
@@ -14,15 +14,9 @@
#include <boost/config.hpp> // BOOST_MSVC
#include <boost/detail/workaround.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-# include <boost/range/detail/vc6/end.hpp>
-#else
-# include <boost/range/detail/implementation_help.hpp>
-# include <boost/range/iterator.hpp>
-# include <boost/range/detail/common.hpp>
-# if BOOST_WORKAROUND(BOOST_MSVC, < 1310)
-# include <boost/range/detail/remove_extent.hpp>
-# endif
+#include <boost/range/detail/implementation_help.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/detail/common.hpp>
namespace boost
{
@@ -68,19 +62,11 @@ namespace boost
template<>
struct range_end<array_>
{
- #if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
- template< typename T, std::size_t sz >
- static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )
- {
- return boost::range_detail::array_end( boost_range_array );
- }
- #else
template<typename T>
static BOOST_RANGE_DEDUCED_TYPENAME remove_extent<T>::type* fun(T& t)
{
return t + remove_extent<T>::size;
}
- #endif
};
} // namespace 'range_detail'
@@ -97,5 +83,4 @@ namespace boost
} // namespace 'boost'
-# endif // VC6
#endif
diff --git a/3party/boost/boost/range/detail/extract_optional_type.hpp b/3party/boost/boost/range/detail/extract_optional_type.hpp
index 4a7f71a21e..0381434a85 100644
--- a/3party/boost/boost/range/detail/extract_optional_type.hpp
+++ b/3party/boost/boost/range/detail/extract_optional_type.hpp
@@ -10,41 +10,37 @@
#ifndef BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED
#define BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/config.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/mpl/has_xxx.hpp>
-#ifdef BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
+#if !defined(BOOST_MPL_CFG_NO_HAS_XXX)
-#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef ) \
- template< typename C > \
- struct extract_ ## a_typedef \
- { \
- typedef BOOST_DEDUCED_TYPENAME C::a_typedef type; \
+// Defines extract_some_typedef<T> which exposes T::some_typedef as
+// extract_some_typedef<T>::type if T::some_typedef exists. Otherwise
+// extract_some_typedef<T> is empty.
+#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef ) \
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(a_typedef) \
+ template< typename C, bool B = BOOST_PP_CAT(has_, a_typedef)<C>::value > \
+ struct BOOST_PP_CAT(extract_, a_typedef) \
+ {}; \
+ template< typename C > \
+ struct BOOST_PP_CAT(extract_, a_typedef)< C, true > \
+ { \
+ typedef BOOST_DEDUCED_TYPENAME C::a_typedef type; \
};
#else
-namespace boost {
- namespace range_detail {
- template< typename T > struct exists { typedef void type; };
- }
-}
-
-// Defines extract_some_typedef<T> which exposes T::some_typedef as
-// extract_some_typedef<T>::type if T::some_typedef exists. Otherwise
-// extract_some_typedef<T> is empty.
-#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef ) \
- template< typename C, typename Enable=void > \
- struct extract_ ## a_typedef \
- {}; \
- template< typename C > \
- struct extract_ ## a_typedef< C \
- , BOOST_DEDUCED_TYPENAME boost::range_detail::exists< BOOST_DEDUCED_TYPENAME C::a_typedef >::type \
- > { \
- typedef BOOST_DEDUCED_TYPENAME C::a_typedef type; \
+#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef ) \
+ template< typename C > \
+ struct BOOST_PP_CAT(extract_, a_typedef) \
+ { \
+ typedef BOOST_DEDUCED_TYPENAME C::a_typedef type; \
};
#endif
diff --git a/3party/boost/boost/range/detail/has_member_size.hpp b/3party/boost/boost/range/detail/has_member_size.hpp
new file mode 100644
index 0000000000..0c639aa891
--- /dev/null
+++ b/3party/boost/boost/range/detail/has_member_size.hpp
@@ -0,0 +1,66 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2014.
+//
+// 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).
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_DETAIL_HAS_MEMBER_SIZE_HPP
+#define BOOST_RANGE_DETAIL_HAS_MEMBER_SIZE_HPP
+
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/cstdint.hpp>
+
+namespace boost
+{
+ namespace range_detail
+ {
+
+template<class T>
+class has_member_size_impl
+{
+private:
+ template<class U, U>
+ class check
+ {
+ };
+
+ template<class C>
+ static boost::uint8_t f(check<std::size_t(C::*)(void) const, &C::size>*);
+
+ template<class C>
+ static boost::uint16_t f(...);
+
+public:
+ static const bool value =
+ (sizeof(f<T>(0)) == sizeof(boost::uint8_t));
+
+ typedef typename mpl::if_c<
+ (sizeof(f<T>(0)) == sizeof(boost::uint8_t)),
+ mpl::true_,
+ mpl::false_
+ >::type type;
+};
+
+template<class T>
+struct has_member_size
+{
+ typedef typename mpl::and_<
+ typename is_class<T>::type,
+ typename has_member_size_impl<const T>::type
+ >::type type;
+
+ static const bool value =
+ is_class<T>::value && has_member_size_impl<const T>::value;
+};
+
+ } // namespace range_detail
+}// namespace boost
+
+#endif // include guard
diff --git a/3party/boost/boost/range/detail/implementation_help.hpp b/3party/boost/boost/range/detail/implementation_help.hpp
index 1f7d163edc..f35953f349 100644
--- a/3party/boost/boost/range/detail/implementation_help.hpp
+++ b/3party/boost/boost/range/detail/implementation_help.hpp
@@ -95,6 +95,17 @@ namespace boost
return sz;
}
+ inline bool is_same_address(const void* l, const void* r)
+ {
+ return l == r;
+ }
+
+ template<class T1, class T2>
+ inline bool is_same_object(const T1& l, const T2& r)
+ {
+ return range_detail::is_same_address(&l, &r);
+ }
+
} // namespace 'range_detail'
} // namespace 'boost'
diff --git a/3party/boost/boost/range/detail/iterator.hpp b/3party/boost/boost/range/detail/iterator.hpp
deleted file mode 100644
index 58346d47d1..0000000000
--- a/3party/boost/boost/range/detail/iterator.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Boost.Range library
-//
-// Copyright Thorsten Ottosen 2003-2004. 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/range/
-//
-
-#ifndef BOOST_RANGE_DETAIL_ITERATOR_HPP
-#define BOOST_RANGE_DETAIL_ITERATOR_HPP
-
-#include <boost/range/detail/common.hpp>
-#include <boost/range/detail/remove_extent.hpp>
-
-#include <boost/static_assert.hpp>
-
-//////////////////////////////////////////////////////////////////////////////
-// missing partial specialization workaround.
-//////////////////////////////////////////////////////////////////////////////
-
-namespace boost
-{
- namespace range_detail
- {
- template< typename T >
- struct range_iterator_ {
- template< typename C >
- struct pts
- {
- typedef int type;
- };
- };
-
- template<>
- struct range_iterator_<std_container_>
- {
- template< typename C >
- struct pts
- {
- typedef BOOST_RANGE_DEDUCED_TYPENAME C::iterator type;
- };
- };
-
- template<>
- struct range_iterator_<std_pair_>
- {
- template< typename P >
- struct pts
- {
- typedef BOOST_RANGE_DEDUCED_TYPENAME P::first_type type;
- };
- };
-
- template<>
- struct range_iterator_<array_>
- {
- template< typename T >
- struct pts
- {
- typedef BOOST_RANGE_DEDUCED_TYPENAME
- remove_extent<T>::type* type;
- };
- };
-
- }
-
- template< typename C >
- class range_mutable_iterator
- {
- typedef BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type c_type;
- public:
- typedef typename range_detail::range_iterator_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;
- };
-}
-
-#endif
diff --git a/3party/boost/boost/range/detail/join_iterator.hpp b/3party/boost/boost/range/detail/join_iterator.hpp
index bbdeec7f11..1020ebf63e 100644
--- a/3party/boost/boost/range/detail/join_iterator.hpp
+++ b/3party/boost/boost/range/detail/join_iterator.hpp
@@ -9,6 +9,9 @@
// aschoedl contributed an improvement to the determination
// of the Reference type parameter.
//
+// Leonid Gershanovich reported Trac ticket 7376 about the dereference operator
+// requiring identical reference types due to using the ternary if.
+//
// For more information, see http://www.boost.org/libs/range/
//
#ifndef BOOST_RANGE_DETAIL_JOIN_ITERATOR_HPP_INCLUDED
@@ -23,6 +26,10 @@
#include <boost/range/empty.hpp>
#include <boost/range/detail/demote_iterator_traversal_tag.hpp>
#include <boost/range/value_type.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
#include <boost/next_prior.hpp>
namespace boost
@@ -71,7 +78,9 @@ public:
Reference dereference(unsigned int selected) const
{
- return selected ? *m_it2 : *m_it1;
+ if (selected)
+ return *m_it2;
+ return *m_it1;
}
bool equal(const join_iterator_union& other, unsigned int selected) const
@@ -111,7 +120,8 @@ public:
return *m_it;
}
- bool equal(const join_iterator_union& other, unsigned int selected) const
+ bool equal(const join_iterator_union& other,
+ unsigned int /*selected*/) const
{
return m_it == other.m_it;
}
@@ -144,7 +154,7 @@ template<typename Iterator1
>::type
>::value,
typename add_const<
- typename iterator_reference<Iterator2>::type
+ typename iterator_reference<Iterator1>::type
>::type,
typename iterator_reference<Iterator1>::type
>::type
diff --git a/3party/boost/boost/range/detail/msvc_has_iterator_workaround.hpp b/3party/boost/boost/range/detail/msvc_has_iterator_workaround.hpp
new file mode 100644
index 0000000000..62b67fd529
--- /dev/null
+++ b/3party/boost/boost/range/detail/msvc_has_iterator_workaround.hpp
@@ -0,0 +1,132 @@
+// Boost.Range library
+//
+// Copyright Eric Niebler 2014. 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/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP
+#define BOOST_RANGE_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP
+# error This file should only be included from <boost/range/mutable_iterator.hpp>
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600)
+namespace boost
+{
+namespace cb_details
+{
+ template <class Buff, class Traits>
+ struct iterator;
+}
+
+namespace python
+{
+ template <class Container
+ , class NextPolicies /*= objects::default_iterator_call_policies*/>
+ struct iterator;
+}
+
+namespace type_erasure
+{
+ template<
+ class Traversal,
+ class T /*= _self*/,
+ class Reference /*= ::boost::use_default*/,
+ class DifferenceType /*= ::std::ptrdiff_t*/,
+ class ValueType /*= typename deduced<iterator_value_type<T> >::type*/
+ >
+ struct iterator;
+}
+
+namespace unordered { namespace iterator_detail
+{
+ template <typename Node>
+ struct iterator;
+}}
+
+namespace container { namespace container_detail
+{
+ template<class IIterator, bool IsConst>
+ class iterator;
+}}
+
+namespace spirit { namespace lex { namespace lexertl
+{
+ template <typename Functor>
+ class iterator;
+}}}
+
+namespace range_detail
+{
+ template <class Buff, class Traits>
+ struct has_iterator< ::boost::cb_details::iterator<Buff, Traits> >
+ : mpl::false_
+ {};
+
+ template <class Buff, class Traits>
+ struct has_iterator< ::boost::cb_details::iterator<Buff, Traits> const>
+ : mpl::false_
+ {};
+
+ template <class Container, class NextPolicies>
+ struct has_iterator< ::boost::python::iterator<Container, NextPolicies> >
+ : mpl::false_
+ {};
+
+ template <class Container, class NextPolicies>
+ struct has_iterator< ::boost::python::iterator<Container, NextPolicies> const>
+ : mpl::false_
+ {};
+
+ template<class Traversal, class T, class Reference, class DifferenceType, class ValueType>
+ struct has_iterator< ::boost::type_erasure::iterator<Traversal, T, Reference, DifferenceType, ValueType> >
+ : mpl::false_
+ {};
+
+ template<class Traversal, class T, class Reference, class DifferenceType, class ValueType>
+ struct has_iterator< ::boost::type_erasure::iterator<Traversal, T, Reference, DifferenceType, ValueType> const>
+ : mpl::false_
+ {};
+
+ template <typename Node>
+ struct has_iterator< ::boost::unordered::iterator_detail::iterator<Node> >
+ : mpl::false_
+ {};
+
+ template <typename Node>
+ struct has_iterator< ::boost::unordered::iterator_detail::iterator<Node> const>
+ : mpl::false_
+ {};
+
+ template<class IIterator, bool IsConst>
+ struct has_iterator< ::boost::container::container_detail::iterator<IIterator, IsConst> >
+ : mpl::false_
+ {};
+
+ template<class IIterator, bool IsConst>
+ struct has_iterator< ::boost::container::container_detail::iterator<IIterator, IsConst> const>
+ : mpl::false_
+ {};
+
+ template <typename Functor>
+ struct has_iterator< ::boost::spirit::lex::lexertl::iterator<Functor> >
+ : mpl::false_
+ {};
+
+ template <typename Functor>
+ struct has_iterator< ::boost::spirit::lex::lexertl::iterator<Functor> const>
+ : mpl::false_
+ {};
+}
+}
+#endif
+#endif
diff --git a/3party/boost/boost/range/detail/range_return.hpp b/3party/boost/boost/range/detail/range_return.hpp
index 52a6073c2f..773a72a8bf 100644
--- a/3party/boost/boost/range/detail/range_return.hpp
+++ b/3party/boost/boost/range/detail/range_return.hpp
@@ -168,7 +168,7 @@ namespace boost
typedef boost::iterator_range<
BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;
- static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,
+ static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type,
SinglePassRange& rng)
{
return type(boost::begin(rng), boost::end(rng));
diff --git a/3party/boost/boost/range/detail/size.hpp b/3party/boost/boost/range/detail/size.hpp
deleted file mode 100644
index fe52ba0d64..0000000000
--- a/3party/boost/boost/range/detail/size.hpp
+++ /dev/null
@@ -1,159 +0,0 @@
-// Boost.Range library
-//
-// Copyright Thorsten Ottosen 2003-2004. 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/range/
-//
-
-
-#ifndef BOOST_RANGE_DETAIL_SIZE_HPP
-#define BOOST_RANGE_DETAIL_SIZE_HPP
-
-#include <boost/config.hpp> // BOOST_MSVC
-#include <boost/detail/workaround.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-# include <boost/range/detail/vc6/size.hpp>
-#else
-# include <boost/range/detail/implementation_help.hpp>
-# include <boost/range/detail/size_type.hpp>
-# include <boost/range/detail/common.hpp>
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
-# include <boost/range/detail/remove_extent.hpp>
-# endif
-# include <iterator>
-
-namespace boost
-{
- namespace range_detail
- {
- template< typename T >
- struct range_size_;
-
- //////////////////////////////////////////////////////////////////////
- // default
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_size_<std_container_>
- {
- template< typename C >
- static BOOST_RANGE_DEDUCED_TYPENAME C::size_type fun( const C& c )
- {
- return c.size();
- };
- };
-
- //////////////////////////////////////////////////////////////////////
- // pair
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_size_<std_pair_>
- {
- template< typename P >
- static BOOST_RANGE_DEDUCED_TYPENAME range_size<P>::type
- fun( const P& p )
- {
- return std::distance( p.first, p.second );
- }
- };
-
- //////////////////////////////////////////////////////////////////////
- // array
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_size_<array_>
- {
- #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- template< typename T, std::size_t sz >
- static std::size_t fun( T BOOST_RANGE_ARRAY_REF()[sz] )
- {
- return sz;
- }
- #else
- template<typename T>
- static std::size_t fun(T& t)
- {
- return remove_extent<T>::size;
- }
- #endif
- };
-
- template<>
- struct range_size_<char_array_>
- {
- template< typename T, std::size_t sz >
- static std::size_t fun( T BOOST_RANGE_ARRAY_REF()[sz] )
- {
- return boost::range_detail::array_size( boost_range_array );
- }
- };
-
- template<>
- struct range_size_<wchar_t_array_>
- {
- template< typename T, std::size_t sz >
- static std::size_t fun( T BOOST_RANGE_ARRAY_REF()[sz] )
- {
- return boost::range_detail::array_size( boost_range_array );
- }
- };
-
- //////////////////////////////////////////////////////////////////////
- // string
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_size_<char_ptr_>
- {
- static std::size_t fun( const char* s )
- {
- return boost::range_detail::str_size( s );
- }
- };
-
- template<>
- struct range_size_<const_char_ptr_>
- {
- static std::size_t fun( const char* s )
- {
- return boost::range_detail::str_size( s );
- }
- };
-
- template<>
- struct range_size_<wchar_t_ptr_>
- {
- static std::size_t fun( const wchar_t* s )
- {
- return boost::range_detail::str_size( s );
- }
- };
-
- template<>
- struct range_size_<const_wchar_t_ptr_>
- {
- static std::size_t fun( const wchar_t* s )
- {
- return boost::range_detail::str_size( s );
- }
- };
-
- } // namespace 'range_detail'
-
-
- template< typename C >
- BOOST_RANGE_DEDUCED_TYPENAME range_size<C>::type
- size( const C& c )
- {
- return range_detail::range_size_< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );
- }
-
-} // namespace 'boost'
-
-# endif
-#endif
diff --git a/3party/boost/boost/range/detail/sizer.hpp b/3party/boost/boost/range/detail/sizer.hpp
index b4c1c91609..cd6679c24d 100644
--- a/3party/boost/boost/range/detail/sizer.hpp
+++ b/3party/boost/boost/range/detail/sizer.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_DETAIL_SIZER_HPP
#define BOOST_RANGE_DETAIL_SIZER_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/detail/vc6/end.hpp b/3party/boost/boost/range/detail/vc6/end.hpp
deleted file mode 100644
index 4f76af5d6b..0000000000
--- a/3party/boost/boost/range/detail/vc6/end.hpp
+++ /dev/null
@@ -1,170 +0,0 @@
-// Boost.Range library
-//
-// Copyright Thorsten Ottosen 2003-2004. 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/range/
-//
-
-#ifndef BOOST_RANGE_DETAIL_VC6_END_HPP
-#define BOOST_RANGE_DETAIL_VC6_END_HPP
-
-#include <boost/range/detail/implementation_help.hpp>
-#include <boost/range/detail/implementation_help.hpp>
-#include <boost/range/result_iterator.hpp>
-#include <boost/range/detail/common.hpp>
-#include <boost/range/detail/remove_extent.hpp>
-
-namespace boost
-{
- namespace range_detail
- {
- template< typename T >
- struct range_end;
-
- //////////////////////////////////////////////////////////////////////
- // default
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_end<std_container_>
- {
- template< typename C >
- struct inner {
- static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<C>::type
- fun( C& c )
- {
- return c.end();
- };
- };
- };
-
- //////////////////////////////////////////////////////////////////////
- // pair
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_end<std_pair_>
- {
- template< typename P >
- struct inner {
- static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<P>::type
- fun( const P& p )
- {
- return p.second;
- }
- };
- };
-
- //////////////////////////////////////////////////////////////////////
- // array
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_end<array_>
- {
- template< typename T >
- struct inner {
- static BOOST_DEDUCED_TYPENAME remove_extent<T>::type*
- fun(T& t)
- {
- return t + remove_extent<T>::size;
- }
- };
- };
-
-
- template<>
- struct range_end<char_array_>
- {
- template< typename T >
- struct inner {
- static BOOST_DEDUCED_TYPENAME remove_extent<T>::type*
- fun(T& t)
- {
- return t + remove_extent<T>::size;
- }
- };
- };
-
- template<>
- struct range_end<wchar_t_array_>
- {
- template< typename T >
- struct inner {
- static BOOST_DEDUCED_TYPENAME remove_extent<T>::type*
- fun(T& t)
- {
- return t + remove_extent<T>::size;
- }
- };
- };
-
- //////////////////////////////////////////////////////////////////////
- // string
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_end<char_ptr_>
- {
- template< typename T >
- struct inner {
- static char* fun( char* s )
- {
- return boost::range_detail::str_end( s );
- }
- };
- };
-
- template<>
- struct range_end<const_char_ptr_>
- {
- template< typename T >
- struct inner {
- static const char* fun( const char* s )
- {
- return boost::range_detail::str_end( s );
- }
- };
- };
-
- template<>
- struct range_end<wchar_t_ptr_>
- {
- template< typename T >
- struct inner {
- static wchar_t* fun( wchar_t* s )
- {
- return boost::range_detail::str_end( s );
- }
- };
- };
-
-
- template<>
- struct range_end<const_wchar_t_ptr_>
- {
- template< typename T >
- struct inner {
- static const wchar_t* fun( const wchar_t* s )
- {
- return boost::range_detail::str_end( s );
- }
- };
- };
-
- } // namespace 'range_detail'
-
- template< typename C >
- inline BOOST_DEDUCED_TYPENAME range_result_iterator<C>::type
- end( C& c )
- {
- return range_detail::range_end<range_detail::range<C>::type>::inner<C>::fun( c );
- }
-
-} // namespace 'boost'
-
-
-#endif
diff --git a/3party/boost/boost/range/detail/vc6/size.hpp b/3party/boost/boost/range/detail/vc6/size.hpp
deleted file mode 100644
index 39f559fd4a..0000000000
--- a/3party/boost/boost/range/detail/vc6/size.hpp
+++ /dev/null
@@ -1,166 +0,0 @@
-// Boost.Range library
-//
-// Copyright Thorsten Ottosen 2003-2004. 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/range/
-//
-
-
-#ifndef BOOST_RANGE_DETAIL_VC6_SIZE_HPP
-#define BOOST_RANGE_DETAIL_VC6_SIZE_HPP
-
-#include <boost/range/detail/implementation_help.hpp>
-#include <boost/range/detail/size_type.hpp>
-#include <boost/range/detail/common.hpp>
-#include <boost/range/detail/remove_extent.hpp>
-#include <iterator>
-
-namespace boost
-{
- namespace range_detail
- {
- template< typename T >
- struct range_size_;
-
- //////////////////////////////////////////////////////////////////////
- // default
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_size_<std_container_>
- {
- template< typename C >
- struct inner {
- static BOOST_RANGE_DEDUCED_TYPENAME C::size_type fun( const C& c )
- {
- return c.size();
- };
- };
- };
-
- //////////////////////////////////////////////////////////////////////
- // pair
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_size_<std_pair_>
- {
- template< typename P >
- struct inner {
- static BOOST_RANGE_DEDUCED_TYPENAME range_size<P>::type
- fun( const P& p )
- {
- return std::distance( p.first, p.second );
- }
- };
- };
-
- //////////////////////////////////////////////////////////////////////
- // array
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_size_<array_>
- {
- template<typename T>
- struct inner {
- static std::size_t fun(T& t)
- {
- return remove_extent<T>::size;
- }
- };
- };
-
- template<>
- struct range_size_<char_array_>
- {
- template<typename T>
- struct inner {
- static std::size_t fun(T& t)
- {
- return sizeof(T) / sizeof(T[0]);
- }
- };
- };
-
- template<>
- struct range_size_<wchar_t_array_>
- {
- template<typename T>
- struct inner {
- static std::size_t fun(T& t)
- {
- return sizeof(T) / sizeof(T[0]);
- }
- };
- };
-
- //////////////////////////////////////////////////////////////////////
- // string
- //////////////////////////////////////////////////////////////////////
-
- template<>
- struct range_size_<char_ptr_>
- {
- template<typename T>
- struct inner {
- static std::size_t fun( const char* s )
- {
- return boost::range_detail::str_size( s );
- }
- };
- };
-
- template<>
- struct range_size_<const_char_ptr_>
- {
- template<typename T>
- struct inner {
- static std::size_t fun( const char* s )
- {
- return boost::range_detail::str_size( s );
- }
- };
- };
-
- template<>
- struct range_size_<wchar_t_ptr_>
- {
- template<typename T>
- struct inner {
- static std::size_t fun( const wchar_t* s )
- {
- return boost::range_detail::str_size( s );
- }
- };
- };
-
- template<>
- struct range_size_<const_wchar_t_ptr_>
- {
- template<typename T>
- struct inner {
- static std::size_t fun( const wchar_t* s )
- {
- return boost::range_detail::str_size( s );
- }
- };
- };
-
- } // namespace 'range_detail'
-
-
- template< typename C >
- BOOST_RANGE_DEDUCED_TYPENAME range_size<C>::type
- size( const C& c )
- {
- return range_detail::range_size_<range_detail::range<C>::type>::inner<C>::fun( c );
- }
-
-} // namespace 'boost'
-
-
-#endif
diff --git a/3party/boost/boost/range/difference_type.hpp b/3party/boost/boost/range/difference_type.hpp
index 164288fee4..afd8b07cc0 100644
--- a/3party/boost/boost/range/difference_type.hpp
+++ b/3party/boost/boost/range/difference_type.hpp
@@ -11,18 +11,24 @@
#ifndef BOOST_RANGE_DIFFERENCE_TYPE_HPP
#define BOOST_RANGE_DIFFERENCE_TYPE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/range/config.hpp>
#include <boost/range/iterator.hpp>
#include <boost/iterator/iterator_traits.hpp>
+#include <boost/type_traits/remove_reference.hpp>
namespace boost
{
template< class T >
- struct range_difference : iterator_difference< typename range_iterator<T>::type >
+ struct range_difference
+ : iterator_difference<
+ BOOST_DEDUCED_TYPENAME range_iterator<
+ BOOST_DEDUCED_TYPENAME remove_reference<T>::type
+ >::type
+ >
{ };
}
diff --git a/3party/boost/boost/range/distance.hpp b/3party/boost/boost/range/distance.hpp
index 42a106de03..075f2d1fb9 100644
--- a/3party/boost/boost/range/distance.hpp
+++ b/3party/boost/boost/range/distance.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_DISTANCE_HPP
#define BOOST_RANGE_DISTANCE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/empty.hpp b/3party/boost/boost/range/empty.hpp
index 36e58d7ddf..d57a30ed01 100644
--- a/3party/boost/boost/range/empty.hpp
+++ b/3party/boost/boost/range/empty.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_EMPTY_HPP
#define BOOST_RANGE_EMPTY_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/end.hpp b/3party/boost/boost/range/end.hpp
index d5e6526fde..f2a3337e34 100644
--- a/3party/boost/boost/range/end.hpp
+++ b/3party/boost/boost/range/end.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_END_HPP
#define BOOST_RANGE_END_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -28,9 +28,7 @@
namespace boost
{
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
- !BOOST_WORKAROUND(__GNUC__, < 3) \
- /**/
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
namespace range_detail
{
#endif
@@ -82,9 +80,7 @@ namespace range_detail
return range_detail::array_end<T,sz>( a );
}
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
- !BOOST_WORKAROUND(__GNUC__, < 3) \
- /**/
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
} // namespace 'range_detail'
#endif
@@ -94,9 +90,7 @@ namespace range_adl_barrier
template< class T >
inline BOOST_DEDUCED_TYPENAME range_iterator<T>::type end( T& r )
{
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
- !BOOST_WORKAROUND(__GNUC__, < 3) \
- /**/
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
using namespace range_detail;
#endif
return range_end( r );
@@ -105,9 +99,7 @@ inline BOOST_DEDUCED_TYPENAME range_iterator<T>::type end( T& r )
template< class T >
inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type end( const T& r )
{
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
- !BOOST_WORKAROUND(__GNUC__, < 3) \
- /**/
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
using namespace range_detail;
#endif
return range_end( r );
diff --git a/3party/boost/boost/range/functions.hpp b/3party/boost/boost/range/functions.hpp
index b8b8608b86..43c54b15b8 100644
--- a/3party/boost/boost/range/functions.hpp
+++ b/3party/boost/boost/range/functions.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_FUNCTIONS_HPP
#define BOOST_RANGE_FUNCTIONS_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/has_range_iterator.hpp b/3party/boost/boost/range/has_range_iterator.hpp
index 8046eb466d..9eb58b35d2 100644
--- a/3party/boost/boost/range/has_range_iterator.hpp
+++ b/3party/boost/boost/range/has_range_iterator.hpp
@@ -7,12 +7,17 @@
//
// For more information, see http://www.boost.org/libs/range/
//
+// Acknowledgments:
+// Ticket #8341: Arno Schoedl - improved handling of has_range_iterator upon
+// use-cases where T was const.
#ifndef BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED
#define BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED
#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/has_xxx.hpp>
#include <boost/range/iterator.hpp>
+#include <boost/type_traits/remove_reference.hpp>
#include <boost/utility/enable_if.hpp>
namespace boost
@@ -28,7 +33,16 @@ namespace boost
};
template<class T>
- struct has_range_iterator_impl<T, BOOST_DEDUCED_TYPENAME enable_if< has_type< range_mutable_iterator<T> > >::type>
+ struct has_range_iterator_impl<
+ T,
+ BOOST_DEDUCED_TYPENAME ::boost::enable_if<
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<is_const<T>,
+ has_type<range_const_iterator<
+ BOOST_DEDUCED_TYPENAME remove_const<T>::type> >,
+ has_type<range_mutable_iterator<T> >
+ >::type
+ >::type
+ >
: boost::mpl::true_
{
};
@@ -40,7 +54,12 @@ namespace boost
};
template<class T>
- struct has_range_const_iterator_impl<T, BOOST_DEDUCED_TYPENAME enable_if< has_type< range_const_iterator<T> > >::type>
+ struct has_range_const_iterator_impl<
+ T,
+ BOOST_DEDUCED_TYPENAME ::boost::enable_if<
+ has_type<range_const_iterator<T> >
+ >::type
+ >
: boost::mpl::true_
{
};
@@ -49,12 +68,14 @@ namespace boost
template<class T>
struct has_range_iterator
- : range_detail::has_range_iterator_impl<T>
+ : range_detail::has_range_iterator_impl<
+ BOOST_DEDUCED_TYPENAME remove_reference<T>::type>
{};
template<class T>
struct has_range_const_iterator
- : range_detail::has_range_const_iterator_impl<T>
+ : range_detail::has_range_const_iterator_impl<
+ BOOST_DEDUCED_TYPENAME remove_reference<T>::type>
{};
} // namespace boost
diff --git a/3party/boost/boost/range/irange.hpp b/3party/boost/boost/range/irange.hpp
index f35df478de..b1a1240655 100644
--- a/3party/boost/boost/range/irange.hpp
+++ b/3party/boost/boost/range/irange.hpp
@@ -51,6 +51,7 @@ namespace boost
typedef typename base_t::value_type value_type;
typedef typename base_t::difference_type difference_type;
typedef typename base_t::reference reference;
+ typedef std::random_access_iterator_tag iterator_category;
integer_iterator() : m_value() {}
explicit integer_iterator(value_type x) : m_value(x) {}
@@ -73,7 +74,11 @@ namespace boost
difference_type distance_to(const integer_iterator& other) const
{
- return other.m_value - m_value;
+ return is_signed<value_type>::value
+ ? (other.m_value - m_value)
+ : (other.m_value >= m_value)
+ ? static_cast<difference_type>(other.m_value - m_value)
+ : -static_cast<difference_type>(m_value - other.m_value);
}
bool equal(const integer_iterator& other) const
@@ -123,6 +128,7 @@ namespace boost
typedef typename base_t::value_type value_type;
typedef typename base_t::difference_type difference_type;
typedef typename base_t::reference reference;
+ typedef std::random_access_iterator_tag iterator_category;
integer_iterator_with_step(value_type first, difference_type step, value_type step_size)
: m_first(first)
@@ -164,7 +170,7 @@ namespace boost
friend class ::boost::iterator_core_access;
value_type m_first;
- value_type m_step;
+ difference_type m_step;
difference_type m_step_size;
};
diff --git a/3party/boost/boost/range/iterator.hpp b/3party/boost/boost/range/iterator.hpp
index ec73ddc233..f15bf3b342 100644
--- a/3party/boost/boost/range/iterator.hpp
+++ b/3party/boost/boost/range/iterator.hpp
@@ -11,11 +11,12 @@
#ifndef BOOST_RANGE_ITERATOR_HPP
#define BOOST_RANGE_ITERATOR_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/range/config.hpp>
+#include <boost/range/range_fwd.hpp>
#include <boost/range/mutable_iterator.hpp>
#include <boost/range/const_iterator.hpp>
#include <boost/type_traits/is_const.hpp>
@@ -25,48 +26,51 @@
namespace boost
{
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
-
- namespace range_detail_vc7_1
- {
- template< typename C, typename Sig = void(C) >
- struct range_iterator
- {
- typedef BOOST_RANGE_DEDUCED_TYPENAME
- mpl::eval_if_c< is_const<C>::value,
- range_const_iterator< typename remove_const<C>::type >,
- range_mutable_iterator<C> >::type type;
- };
-
- template< typename C, typename T >
- struct range_iterator< C, void(T[]) >
- {
- typedef T* type;
- };
- }
-
-#endif
-
- template< typename C >
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+
+ namespace range_detail_vc7_1
+ {
+ template< typename C, typename Sig = void(C) >
+ struct range_iterator
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME
+ mpl::eval_if_c< is_const<C>::value,
+ range_const_iterator< typename remove_const<C>::type >,
+ range_mutable_iterator<C> >::type type;
+ };
+
+ template< typename C, typename T >
+ struct range_iterator< C, void(T[]) >
+ {
+ typedef T* type;
+ };
+ }
+
+#endif
+
+ template< typename C, typename Enabler=void >
struct range_iterator
{
#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
-
- typedef BOOST_RANGE_DEDUCED_TYPENAME
- range_detail_vc7_1::range_iterator<C>::type type;
-
-#else
-
- typedef BOOST_RANGE_DEDUCED_TYPENAME
- mpl::eval_if_c< is_const<C>::value,
- range_const_iterator< typename remove_const<C>::type >,
- range_mutable_iterator<C> >::type type;
-
-#endif
+
+ typedef BOOST_RANGE_DEDUCED_TYPENAME
+ range_detail_vc7_1::range_iterator<C>::type type;
+
+#else
+
+ private:
+ typedef typename remove_reference<C>::type param_t;
+
+ public:
+ typedef typename mpl::eval_if_c<
+ is_const<param_t>::value,
+ range_const_iterator<typename remove_const<param_t>::type>,
+ range_mutable_iterator<param_t>
+ >::type type;
+
+#endif
};
-
+
} // namespace boost
-//#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
#endif
diff --git a/3party/boost/boost/range/iterator_range_core.hpp b/3party/boost/boost/range/iterator_range_core.hpp
index 6e689923ec..8108947724 100644
--- a/3party/boost/boost/range/iterator_range_core.hpp
+++ b/3party/boost/boost/range/iterator_range_core.hpp
@@ -7,6 +7,10 @@
//
// For more information, see http://www.boost.org/libs/range/
//
+// Credits:
+// 'michel' reported Trac 9072 which included a patch for allowing references
+// to function types.
+//
#ifndef BOOST_RANGE_ITERATOR_RANGE_CORE_HPP_INCLUDED
#define BOOST_RANGE_ITERATOR_RANGE_CORE_HPP_INCLUDED
@@ -21,13 +25,20 @@
#include <boost/assert.hpp>
#include <boost/iterator/iterator_traits.hpp>
#include <boost/iterator/iterator_facade.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/not.hpp>
#include <boost/mpl/or.hpp>
#include <boost/type_traits/is_abstract.hpp>
#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_function.hpp>
#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_same.hpp>
#include <boost/range/functions.hpp>
#include <boost/range/iterator.hpp>
#include <boost/range/difference_type.hpp>
+#include <boost/range/has_range_iterator.hpp>
#include <boost/range/algorithm/equal.hpp>
#include <boost/range/detail/safe_bool.hpp>
#include <boost/utility/enable_if.hpp>
@@ -77,7 +88,7 @@ namespace boost
template< class Left, class Right >
inline bool greater_than( const Left& l, const Right& r )
{
- return less_than(r,l);
+ return iterator_range_detail::less_than(r,l);
}
template< class Left, class Right >
@@ -100,8 +111,303 @@ namespace boost
return boost::equal(l, r);
}
- struct range_tag { };
- struct const_range_tag { };
+struct range_tag
+{
+};
+
+struct const_range_tag
+{
+};
+
+struct iterator_range_tag
+{
+};
+
+typedef char (&incrementable_t)[1];
+typedef char (&bidirectional_t)[2];
+typedef char (&random_access_t)[3];
+
+incrementable_t test_traversal_tag(boost::incrementable_traversal_tag);
+bidirectional_t test_traversal_tag(boost::bidirectional_traversal_tag);
+random_access_t test_traversal_tag(boost::random_access_traversal_tag);
+
+template<std::size_t S>
+struct pure_iterator_traversal_impl
+{
+ typedef boost::incrementable_traversal_tag type;
+};
+
+template<>
+struct pure_iterator_traversal_impl<sizeof(bidirectional_t)>
+{
+ typedef boost::bidirectional_traversal_tag type;
+};
+
+template<>
+struct pure_iterator_traversal_impl<sizeof(random_access_t)>
+{
+ typedef boost::random_access_traversal_tag type;
+};
+
+template<typename IteratorT>
+struct pure_iterator_traversal
+{
+ typedef
+ BOOST_DEDUCED_TYPENAME iterator_traversal<IteratorT>::type
+ traversal_t;
+ BOOST_STATIC_CONSTANT(
+ std::size_t,
+ traversal_i = sizeof(iterator_range_detail::test_traversal_tag((traversal_t())))
+ );
+ typedef
+ BOOST_DEDUCED_TYPENAME pure_iterator_traversal_impl<traversal_i>::type
+ type;
+};
+
+template<class IteratorT, class TraversalTag>
+class iterator_range_base
+ : public iterator_range_tag
+{
+ typedef range_detail::safe_bool<
+ IteratorT iterator_range_base<IteratorT, TraversalTag>::*
+ > safe_bool_t;
+
+ typedef iterator_range_base<IteratorT, TraversalTag> type;
+
+protected:
+ typedef iterator_range_impl<IteratorT> impl;
+
+public:
+ typedef BOOST_DEDUCED_TYPENAME
+ safe_bool_t::unspecified_bool_type unspecified_bool_type;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_value<IteratorT>::type value_type;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_difference<IteratorT>::type difference_type;
+
+ typedef std::size_t size_type; // note: must be unsigned
+
+ // Needed because value-type is the same for
+ // const and non-const iterators
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_reference<IteratorT>::type reference;
+
+ //! const_iterator type
+ /*!
+ There is no distinction between const_iterator and iterator.
+ These typedefs are provides to fulfill container interface
+ */
+ typedef IteratorT const_iterator;
+ //! iterator type
+ typedef IteratorT iterator;
+
+protected:
+ iterator_range_base()
+ : m_Begin()
+ , m_End()
+ {
+ }
+
+ template<class Iterator>
+ iterator_range_base(Iterator Begin, Iterator End)
+ : m_Begin(Begin)
+ , m_End(End)
+ {
+ }
+
+public:
+ IteratorT begin() const
+ {
+ return m_Begin;
+ }
+
+ IteratorT end() const
+ {
+ return m_End;
+ }
+
+ bool empty() const
+ {
+ return m_Begin == m_End;
+ }
+
+ operator unspecified_bool_type() const
+ {
+ return safe_bool_t::to_unspecified_bool(
+ m_Begin != m_End, &iterator_range_base::m_Begin);
+ }
+
+ bool operator!() const
+ {
+ return empty();
+ }
+
+ bool equal(const iterator_range_base& r) const
+ {
+ return m_Begin == r.m_Begin && m_End == r.m_End;
+ }
+
+ reference front() const
+ {
+ BOOST_ASSERT(!empty());
+ return *m_Begin;
+ }
+
+ void drop_front()
+ {
+ BOOST_ASSERT(!empty());
+ ++m_Begin;
+ }
+
+ void drop_front(difference_type n)
+ {
+ BOOST_ASSERT(n >= difference_type());
+ std::advance(this->m_Begin, n);
+ }
+
+ // Deprecated
+ void pop_front() { drop_front(); }
+
+protected:
+ template<class Iterator>
+ void assign(Iterator first, Iterator last)
+ {
+ m_Begin = first;
+ m_End = last;
+ }
+
+ template<class SinglePassRange>
+ void assign(const SinglePassRange& r)
+ {
+ m_Begin = impl::adl_begin(r);
+ m_End = impl::adl_end(r);
+ }
+
+ template<class SinglePassRange>
+ void assign(SinglePassRange& r)
+ {
+ m_Begin = impl::adl_begin(r);
+ m_End = impl::adl_end(r);
+ }
+
+ IteratorT m_Begin;
+ IteratorT m_End;
+};
+
+template<class IteratorT>
+class iterator_range_base<IteratorT, bidirectional_traversal_tag>
+ : public iterator_range_base<IteratorT, incrementable_traversal_tag>
+{
+ typedef iterator_range_base<IteratorT, incrementable_traversal_tag> base_type;
+
+protected:
+ iterator_range_base()
+ {
+ }
+
+ template<class Iterator>
+ iterator_range_base(Iterator first, Iterator last)
+ : base_type(first, last)
+ {
+ }
+
+public:
+ typedef BOOST_DEDUCED_TYPENAME base_type::difference_type difference_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;
+
+ reference back() const
+ {
+ BOOST_ASSERT(!this->empty());
+ return *boost::prior(this->m_End);
+ }
+
+ void drop_back()
+ {
+ BOOST_ASSERT(!this->empty());
+ --this->m_End;
+ }
+
+ void drop_back(difference_type n)
+ {
+ BOOST_ASSERT(n >= difference_type());
+ std::advance(this->m_End, -n);
+ }
+
+ // Deprecated
+ void pop_back() { drop_back(); }
+};
+
+template<class IteratorT>
+class iterator_range_base<IteratorT, random_access_traversal_tag>
+ : public iterator_range_base<IteratorT, bidirectional_traversal_tag>
+{
+ typedef iterator_range_base<
+ IteratorT, bidirectional_traversal_tag> base_type;
+
+public:
+ typedef BOOST_DEDUCED_TYPENAME
+ boost::mpl::if_<
+ boost::mpl::or_<
+ boost::is_abstract<
+ BOOST_DEDUCED_TYPENAME base_type::value_type
+ >,
+ boost::is_array<
+ BOOST_DEDUCED_TYPENAME base_type::value_type
+ >,
+ boost::is_function<
+ BOOST_DEDUCED_TYPENAME base_type::value_type
+ >
+ >,
+ BOOST_DEDUCED_TYPENAME base_type::reference,
+ BOOST_DEDUCED_TYPENAME base_type::value_type
+ >::type abstract_value_type;
+
+ // Rationale:
+ // typedef these here to reduce verbiage in the implementation of this
+ // type.
+ typedef BOOST_DEDUCED_TYPENAME base_type::difference_type difference_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type size_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;
+
+protected:
+ iterator_range_base()
+ {
+ }
+
+ template<class Iterator>
+ iterator_range_base(Iterator first, Iterator last)
+ : base_type(first, last)
+ {
+ }
+
+public:
+ reference operator[](difference_type at) const
+ {
+ BOOST_ASSERT(at >= 0);
+ BOOST_ASSERT(static_cast<typename base_type::size_type>(at) < size());
+ return this->m_Begin[at];
+ }
+
+ //
+ // When storing transform iterators, operator[]()
+ // fails because it returns by reference. Therefore
+ // operator()() is provided for these cases.
+ //
+ abstract_value_type operator()(difference_type at) const
+ {
+ BOOST_ASSERT(at >= 0);
+ BOOST_ASSERT(static_cast<typename base_type::size_type>(at) < size());
+ return this->m_Begin[at];
+ }
+
+ BOOST_DEDUCED_TYPENAME base_type::size_type size() const
+ {
+ return this->m_End - this->m_Begin;
+ }
+};
+
}
// iterator range template class -----------------------------------------//
@@ -125,253 +431,123 @@ namespace boost
*/
template<class IteratorT>
class iterator_range
- {
- typedef range_detail::safe_bool< IteratorT iterator_range<IteratorT>::* > safe_bool_t;
- protected: // Used by sub_range
- //! implementation class
- typedef iterator_range_detail::iterator_range_impl<IteratorT> impl;
- public:
- //! this type
- typedef iterator_range<IteratorT> type;
- typedef BOOST_DEDUCED_TYPENAME safe_bool_t::unspecified_bool_type unspecified_bool_type;
- //BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(value_type);
-
- //! Encapsulated value type
- typedef BOOST_DEDUCED_TYPENAME
- iterator_value<IteratorT>::type value_type;
-
- //! Difference type
- typedef BOOST_DEDUCED_TYPENAME
- iterator_difference<IteratorT>::type difference_type;
-
- //! Size type
- typedef std::size_t size_type; // note: must be unsigned
-
- //! This type
- typedef iterator_range<IteratorT> this_type;
-
- //! Reference type
- //
- // Needed because value-type is the same for
- // const and non-const iterators
- //
- typedef BOOST_DEDUCED_TYPENAME
- iterator_reference<IteratorT>::type reference;
+ : public iterator_range_detail::iterator_range_base<
+ IteratorT,
+ BOOST_DEDUCED_TYPENAME iterator_range_detail::pure_iterator_traversal<IteratorT>::type
+ >
+ {
+ typedef iterator_range_detail::iterator_range_base<
+ IteratorT,
+ BOOST_DEDUCED_TYPENAME iterator_range_detail::pure_iterator_traversal<IteratorT>::type
+ > base_type;
+
+ template<class Source>
+ struct is_compatible_range
+ : is_convertible<
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ has_range_iterator<Source>,
+ range_iterator<Source>,
+ mpl::identity<void>
+ >::type,
+ BOOST_DEDUCED_TYPENAME base_type::iterator
+ >
+ {
+ };
- //! const_iterator type
- /*!
- There is no distinction between const_iterator and iterator.
- These typedefs are provides to fulfill container interface
- */
- typedef IteratorT const_iterator;
- //! iterator type
- typedef IteratorT iterator;
-
- private: // for return value of operator()()
- typedef BOOST_DEDUCED_TYPENAME
- boost::mpl::if_< boost::mpl::or_< boost::is_abstract< value_type >,
- boost::is_array< value_type > >,
- reference, value_type >::type abstract_value_type;
+ protected:
+ typedef iterator_range_detail::iterator_range_impl<IteratorT> impl;
public:
- iterator_range() : m_Begin( iterator() ), m_End( iterator() )
- { }
-
- //! Constructor from a pair of iterators
- template< class Iterator >
- iterator_range( Iterator Begin, Iterator End ) :
- m_Begin(Begin), m_End(End)
- {}
-
- //! Constructor from a Range
- template< class Range >
- iterator_range( const Range& r ) :
- m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
- {}
-
- //! Constructor from a Range
- template< class Range >
- iterator_range( Range& r ) :
- m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
- {}
-
- //! Constructor from a Range
- template< class Range >
- iterator_range( const Range& r, iterator_range_detail::const_range_tag ) :
- m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
- {}
-
- //! Constructor from a Range
- template< class Range >
- iterator_range( Range& r, iterator_range_detail::range_tag ) :
- m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
- {}
+ typedef iterator_range<IteratorT> type;
- #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- this_type& operator=( const this_type& r )
+ iterator_range()
{
- m_Begin = r.begin();
- m_End = r.end();
- return *this;
}
- #endif
- template< class Iterator >
- iterator_range& operator=( const iterator_range<Iterator>& r )
+ template<class Iterator>
+ iterator_range(Iterator first, Iterator last)
+ : base_type(first, last)
{
- m_Begin = r.begin();
- m_End = r.end();
- return *this;
}
- template< class ForwardRange >
- iterator_range& operator=( ForwardRange& r )
+ template<class SinglePassRange>
+ iterator_range(
+ const SinglePassRange& r,
+ BOOST_DEDUCED_TYPENAME ::boost::enable_if<
+ is_compatible_range<const SinglePassRange>
+ >::type* = 0
+ )
+ : base_type(impl::adl_begin(r), impl::adl_end(r))
{
- m_Begin = impl::adl_begin( r );
- m_End = impl::adl_end( r );
- return *this;
}
- template< class ForwardRange >
- iterator_range& operator=( const ForwardRange& r )
+ template<class SinglePassRange>
+ iterator_range(
+ SinglePassRange& r,
+ BOOST_DEDUCED_TYPENAME ::boost::enable_if<
+ is_compatible_range<SinglePassRange>
+ >::type* = 0
+ )
+ : base_type(impl::adl_begin(r), impl::adl_end(r))
{
- m_Begin = impl::adl_begin( r );
- m_End = impl::adl_end( r );
- return *this;
}
- IteratorT begin() const
+ template<class SinglePassRange>
+ iterator_range(const SinglePassRange& r,
+ iterator_range_detail::const_range_tag)
+ : base_type(impl::adl_begin(r), impl::adl_end(r))
{
- return m_Begin;
}
- IteratorT end() const
+ template<class SinglePassRange>
+ iterator_range(SinglePassRange& r,
+ iterator_range_detail::range_tag)
+ : base_type(impl::adl_begin(r), impl::adl_end(r))
{
- return m_End;
}
- difference_type size() const
+ template<class Iterator>
+ iterator_range& operator=(const iterator_range<Iterator>& other)
{
- return m_End - m_Begin;
- }
-
- bool empty() const
- {
- return m_Begin == m_End;
+ this->assign(other.begin(), other.end());
+ return *this;
}
- operator unspecified_bool_type() const
+ template<class Iterator>
+ iterator_range& operator=(iterator_range<Iterator>& other)
{
- return safe_bool_t::to_unspecified_bool(m_Begin != m_End, &iterator_range::m_Begin);
+ this->assign(other.begin(), other.end());
+ return *this;
}
- bool operator!() const
+ template<class SinglePassRange>
+ iterator_range& operator=(SinglePassRange& r)
{
- return empty();
+ this->assign(r);
+ return *this;
}
- bool equal( const iterator_range& r ) const
+ template<class SinglePassRange>
+ iterator_range& operator=(const SinglePassRange& r)
{
- return m_Begin == r.m_Begin && m_End == r.m_End;
+ this->assign(r);
+ return *this;
}
-
-#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
- bool operator==( const iterator_range& r ) const
+ iterator_range& advance_begin(
+ BOOST_DEDUCED_TYPENAME base_type::difference_type n)
{
- return boost::equal( *this, r );
+ std::advance(this->m_Begin, n);
+ return *this;
}
- bool operator!=( const iterator_range& r ) const
+ iterator_range& advance_end(
+ BOOST_DEDUCED_TYPENAME base_type::difference_type n)
{
- return !operator==(r);
+ std::advance(this->m_End, n);
+ return *this;
}
- bool operator<( const iterator_range& r ) const
- {
- return iterator_range_detail::less_than( *this, r );
- }
-
- bool operator>( const iterator_range& r ) const
- {
- return iterator_range_detail::greater_than( *this, r );
- }
-
- bool operator<=( const iterator_range& r ) const
- {
- return iterator_range_detail::less_or_equal_than( *this, r );
- }
-
- bool operator>=( const iterator_range& r ) const
- {
- return iterator_range_detail::greater_or_equal_than( *this, r );
- }
-
-#endif
-
- public: // convenience
- reference front() const
- {
- BOOST_ASSERT( !empty() );
- return *m_Begin;
- }
-
- reference back() const
- {
- BOOST_ASSERT( !empty() );
- IteratorT last( m_End );
- return *--last;
- }
-
- // pop_front() - added to model the SinglePassRangePrimitiveConcept
- void pop_front()
- {
- BOOST_ASSERT( !empty() );
- ++m_Begin;
- }
-
- // pop_back() - added to model the BidirectionalRangePrimitiveConcept
- void pop_back()
- {
- BOOST_ASSERT( !empty() );
- --m_End;
- }
-
- reference operator[]( difference_type at ) const
- {
- BOOST_ASSERT( at >= 0 && at < size() );
- return m_Begin[at];
- }
-
- //
- // When storing transform iterators, operator[]()
- // fails because it returns by reference. Therefore
- // operator()() is provided for these cases.
- //
- abstract_value_type operator()( difference_type at ) const
- {
- BOOST_ASSERT( at >= 0 && at < size() );
- return m_Begin[at];
- }
-
- iterator_range& advance_begin( difference_type n )
- {
- std::advance( m_Begin, n );
- return *this;
- }
-
- iterator_range& advance_end( difference_type n )
- {
- std::advance( m_End, n );
- return *this;
- }
-
- private:
- // begin and end iterators
- IteratorT m_Begin;
- IteratorT m_End;
-
protected:
//
// Allow subclasses an easy way to access the
@@ -387,43 +563,61 @@ namespace boost
/////////////////////////////////////////////////////////////////////
template< class IteratorT, class ForwardRange >
- inline bool operator==( const ForwardRange& l,
- const iterator_range<IteratorT>& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator==( const ForwardRange& l, const iterator_range<IteratorT>& r )
{
return boost::equal( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator!=( const ForwardRange& l,
- const iterator_range<IteratorT>& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator!=( const ForwardRange& l, const iterator_range<IteratorT>& r )
{
return !boost::equal( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator<( const ForwardRange& l,
- const iterator_range<IteratorT>& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator<( const ForwardRange& l, const iterator_range<IteratorT>& r )
{
return iterator_range_detail::less_than( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator<=( const ForwardRange& l,
- const iterator_range<IteratorT>& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator<=( const ForwardRange& l, const iterator_range<IteratorT>& r )
{
return iterator_range_detail::less_or_equal_than( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator>( const ForwardRange& l,
- const iterator_range<IteratorT>& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator>( const ForwardRange& l, const iterator_range<IteratorT>& r )
{
return iterator_range_detail::greater_than( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator>=( const ForwardRange& l,
- const iterator_range<IteratorT>& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator>=( const ForwardRange& l, const iterator_range<IteratorT>& r )
{
return iterator_range_detail::greater_or_equal_than( l, r );
}
@@ -431,87 +625,105 @@ namespace boost
#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
#else
template< class Iterator1T, class Iterator2T >
- inline bool operator==( const iterator_range<Iterator1T>& l,
- const iterator_range<Iterator2T>& r )
+ inline bool
+ operator==( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
{
return boost::equal( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator==( const iterator_range<IteratorT>& l,
- const ForwardRange& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator==( const iterator_range<IteratorT>& l, const ForwardRange& r )
{
return boost::equal( l, r );
}
template< class Iterator1T, class Iterator2T >
- inline bool operator!=( const iterator_range<Iterator1T>& l,
- const iterator_range<Iterator2T>& r )
+ inline bool
+ operator!=( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
{
return !boost::equal( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator!=( const iterator_range<IteratorT>& l,
- const ForwardRange& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator!=( const iterator_range<IteratorT>& l, const ForwardRange& r )
{
return !boost::equal( l, r );
}
template< class Iterator1T, class Iterator2T >
- inline bool operator<( const iterator_range<Iterator1T>& l,
- const iterator_range<Iterator2T>& r )
+ inline bool
+ operator<( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
{
return iterator_range_detail::less_than( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator<( const iterator_range<IteratorT>& l,
- const ForwardRange& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator<( const iterator_range<IteratorT>& l, const ForwardRange& r )
{
return iterator_range_detail::less_than( l, r );
}
template< class Iterator1T, class Iterator2T >
- inline bool operator<=( const iterator_range<Iterator1T>& l,
- const iterator_range<Iterator2T>& r )
+ inline bool
+ operator<=( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
{
return iterator_range_detail::less_or_equal_than( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator<=( const iterator_range<IteratorT>& l,
- const ForwardRange& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator<=( const iterator_range<IteratorT>& l, const ForwardRange& r )
{
return iterator_range_detail::less_or_equal_than( l, r );
}
template< class Iterator1T, class Iterator2T >
- inline bool operator>( const iterator_range<Iterator1T>& l,
- const iterator_range<Iterator2T>& r )
+ inline bool
+ operator>( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
{
return iterator_range_detail::greater_than( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator>( const iterator_range<IteratorT>& l,
- const ForwardRange& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator>( const iterator_range<IteratorT>& l, const ForwardRange& r )
{
return iterator_range_detail::greater_than( l, r );
}
template< class Iterator1T, class Iterator2T >
- inline bool operator>=( const iterator_range<Iterator1T>& l,
- const iterator_range<Iterator2T>& r )
+ inline bool
+ operator>=( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
{
return iterator_range_detail::greater_or_equal_than( l, r );
}
template< class IteratorT, class ForwardRange >
- inline bool operator>=( const iterator_range<IteratorT>& l,
- const ForwardRange& r )
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+ bool
+ >::type
+ operator>=( const iterator_range<IteratorT>& l, const ForwardRange& r )
{
return iterator_range_detail::greater_or_equal_than( l, r );
}
@@ -535,6 +747,13 @@ namespace boost
return iterator_range<IteratorT>( Begin, End );
}
+ template<typename IteratorT, typename IntegerT>
+ inline iterator_range<IteratorT>
+ make_iterator_range_n(IteratorT first, IntegerT n)
+ {
+ return iterator_range<IteratorT>(first, boost::next(first, n));
+ }
+
#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
template< typename Range >
@@ -601,7 +820,6 @@ namespace boost
BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
{
- //BOOST_ASSERT( advance_begin - advance_end <= size(r) && "creating invalid range" );
return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
}
@@ -613,7 +831,6 @@ namespace boost
BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
{
- //BOOST_ASSERT( advance_begin - advance_end <= size(r) && "creating invalid range" );
return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
}
@@ -623,7 +840,6 @@ namespace boost
BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
{
- //BOOST_ASSERT( advance_begin - advance_end <= size(r) && "creating invalid range" );
return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
}
diff --git a/3party/boost/boost/range/iterator_range_hash.hpp b/3party/boost/boost/range/iterator_range_hash.hpp
new file mode 100644
index 0000000000..615d22fc37
--- /dev/null
+++ b/3party/boost/boost/range/iterator_range_hash.hpp
@@ -0,0 +1,22 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2014
+// 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/range/
+//
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/functional/hash.hpp>
+
+namespace boost
+{
+
+template<class T>
+std::size_t hash_value(const iterator_range<T>& rng)
+{
+ return boost::hash_range(rng.begin(), rng.end());
+}
+
+} // namespace boost
diff --git a/3party/boost/boost/range/metafunctions.hpp b/3party/boost/boost/range/metafunctions.hpp
index 469d9ae17b..9dc59d0f7c 100644
--- a/3party/boost/boost/range/metafunctions.hpp
+++ b/3party/boost/boost/range/metafunctions.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_METAFUNCTIONS_HPP
#define BOOST_RANGE_METAFUNCTIONS_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/mfc_map.hpp b/3party/boost/boost/range/mfc_map.hpp
new file mode 100644
index 0000000000..2cd42b43d7
--- /dev/null
+++ b/3party/boost/boost/range/mfc_map.hpp
@@ -0,0 +1,114 @@
+// Boost.Range library
+//
+// Copyright Adam D. Walling 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/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_MFC_MAP_HPP
+#define BOOST_RANGE_ADAPTOR_MFC_MAP_HPP
+
+#if !defined(BOOST_RANGE_MFC_NO_CPAIR)
+
+#include <boost/range/mfc.hpp>
+#include <boost/range/adaptor/map.hpp>
+
+namespace boost
+{
+ namespace range_detail
+ {
+ // CMap and CMapStringToString range iterators return CPair,
+ // which has a key and value member. Other MFC range iterators
+ // already return adapted std::pair objects. This allows usage
+ // of the map_keys and map_values range adaptors with CMap
+ // and CMapStringToString
+
+ // CPair has a VALUE value member, and a KEY key member; we will
+ // use VALUE& as the result_type consistent with CMap::operator[]
+
+ // specialization for CMap
+ template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
+ struct select_first< CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> >
+ {
+ typedef BOOST_DEDUCED_TYPENAME CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> map_type;
+ typedef BOOST_DEDUCED_TYPENAME range_reference<const map_type>::type argument_type;
+ typedef BOOST_DEDUCED_TYPENAME const KEY& result_type;
+
+ result_type operator()( argument_type r ) const
+ {
+ return r.key;
+ }
+ };
+
+ template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
+ struct select_second_mutable< CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> >
+ {
+ typedef BOOST_DEDUCED_TYPENAME CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> map_type;
+ typedef BOOST_DEDUCED_TYPENAME range_reference<map_type>::type argument_type;
+ typedef BOOST_DEDUCED_TYPENAME VALUE& result_type;
+
+ result_type operator()( argument_type r ) const
+ {
+ return r.value;
+ }
+ };
+
+ template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
+ struct select_second_const< CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> >
+ {
+ typedef BOOST_DEDUCED_TYPENAME CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> map_type;
+ typedef BOOST_DEDUCED_TYPENAME range_reference<const map_type>::type argument_type;
+ typedef BOOST_DEDUCED_TYPENAME const VALUE& result_type;
+
+ result_type operator()( argument_type r ) const
+ {
+ return r.value;
+ }
+ };
+
+
+ // specialization for CMapStringToString
+ template<>
+ struct select_first< CMapStringToString >
+ {
+ typedef range_reference<const CMapStringToString>::type argument_type;
+ typedef const CString& result_type;
+
+ result_type operator()( argument_type r ) const
+ {
+ return r.key;
+ }
+ };
+
+ template<>
+ struct select_second_mutable< CMapStringToString >
+ {
+ typedef range_reference<CMapStringToString>::type argument_type;
+ typedef CString& result_type;
+
+ result_type operator()( argument_type r ) const
+ {
+ return r.value;
+ }
+ };
+
+ template<>
+ struct select_second_const< CMapStringToString >
+ {
+ typedef range_reference<const CMapStringToString>::type argument_type;
+ typedef const CString& result_type;
+
+ result_type operator()( argument_type r ) const
+ {
+ return r.value;
+ }
+ };
+ } // 'range_detail'
+} // 'boost'
+
+#endif // !defined(BOOST_RANGE_MFC_NO_CPAIR)
+
+#endif
diff --git a/3party/boost/boost/range/mutable_iterator.hpp b/3party/boost/boost/range/mutable_iterator.hpp
index 7beca66a29..b924666679 100644
--- a/3party/boost/boost/range/mutable_iterator.hpp
+++ b/3party/boost/boost/range/mutable_iterator.hpp
@@ -11,57 +11,69 @@
#ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP
#define BOOST_RANGE_MUTABLE_ITERATOR_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/range/config.hpp>
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#include <boost/range/detail/iterator.hpp>
-#else
-
+#include <boost/range/range_fwd.hpp>
#include <boost/range/detail/extract_optional_type.hpp>
+#include <boost/type_traits/remove_reference.hpp>
#include <boost/iterator/iterator_traits.hpp>
#include <cstddef>
#include <utility>
namespace boost
{
+
//////////////////////////////////////////////////////////////////////////
// default
//////////////////////////////////////////////////////////////////////////
- namespace range_detail {
- BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( iterator )
- }
+ namespace range_detail
+ {
- template< typename C >
- struct range_mutable_iterator : range_detail::extract_iterator<C>
- {};
-
- //////////////////////////////////////////////////////////////////////////
- // pair
- //////////////////////////////////////////////////////////////////////////
+BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( iterator )
- template< typename Iterator >
- struct range_mutable_iterator< std::pair<Iterator,Iterator> >
- {
- typedef Iterator type;
- };
+template< typename C >
+struct range_mutable_iterator
+ : range_detail::extract_iterator<
+ BOOST_DEDUCED_TYPENAME remove_reference<C>::type>
+{};
- //////////////////////////////////////////////////////////////////////////
- // array
- //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// pair
+//////////////////////////////////////////////////////////////////////////
- template< typename T, std::size_t sz >
- struct range_mutable_iterator< T[sz] >
- {
- typedef T* type;
- };
+template< typename Iterator >
+struct range_mutable_iterator< std::pair<Iterator,Iterator> >
+{
+ typedef Iterator type;
+};
+
+//////////////////////////////////////////////////////////////////////////
+// array
+//////////////////////////////////////////////////////////////////////////
+
+template< typename T, std::size_t sz >
+struct range_mutable_iterator< T[sz] >
+{
+ typedef T* type;
+};
+
+ } // namespace range_detail
+
+template<typename C, typename Enabler=void>
+struct range_mutable_iterator
+ : range_detail::range_mutable_iterator<
+ BOOST_DEDUCED_TYPENAME remove_reference<C>::type
+ >
+{
+};
} // namespace boost
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/range/detail/msvc_has_iterator_workaround.hpp>
#endif
diff --git a/3party/boost/boost/range/numeric.hpp b/3party/boost/boost/range/numeric.hpp
index bfd1049407..d1510cdef1 100644
--- a/3party/boost/boost/range/numeric.hpp
+++ b/3party/boost/boost/range/numeric.hpp
@@ -1,14 +1,8 @@
-///////////////////////////////////////////////////////////////////////////////
-/// \file algorithm.hpp
-/// Contains range-based versions of the std algorithms
-//
-/////////////////////////////////////////////////////////////////////////////
-// Copyright 2009 Neil Groves.
+// Copyright 2009-2014 Neil Groves.
// 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)
//
-
// Copyright 2006 Thorsten Ottosen.
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -18,8 +12,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(_MSC_VER) && _MSC_VER >= 1000
+//
+// Contains range-based versions of the numeric std algorithms
+//
+#if defined(_MSC_VER)
#pragma once
#endif
@@ -30,89 +26,163 @@
#include <boost/assert.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
+#include <boost/range/category.hpp>
#include <boost/range/concepts.hpp>
#include <boost/range/distance.hpp>
+#include <boost/range/size.hpp>
#include <numeric>
namespace boost
{
- template< class SinglePassRange, class Value >
- inline Value accumulate( const SinglePassRange& rng, Value init )
+ template<class SinglePassRange, class Value>
+ inline Value accumulate(const SinglePassRange& rng, Value init)
{
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
- return std::accumulate( boost::begin(rng), boost::end(rng), init );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return std::accumulate(boost::begin(rng), boost::end(rng), init);
}
- template< class SinglePassRange, class Value, class BinaryOperation >
- inline Value accumulate( const SinglePassRange& rng, Value init, BinaryOperation op )
+ template<class SinglePassRange, class Value, class BinaryOperation>
+ inline Value accumulate(const SinglePassRange& rng, Value init,
+ BinaryOperation op)
{
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
- return std::accumulate( boost::begin(rng), boost::end(rng), init, op );
- }
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange> ));
+ return std::accumulate(boost::begin(rng), boost::end(rng), init, op);
+ }
- template< class SinglePassRange1, class SinglePassRange2, class Value >
- inline Value inner_product( const SinglePassRange1& rng1, const SinglePassRange2& rng2, Value init )
+ namespace range_detail
+ {
+ template<class SinglePassRange1, class SinglePassRange2>
+ inline bool inner_product_precondition(
+ const SinglePassRange1&,
+ const SinglePassRange2&,
+ std::input_iterator_tag,
+ std::input_iterator_tag)
+ {
+ return true;
+ }
+
+ template<class SinglePassRange1, class SinglePassRange2>
+ inline bool inner_product_precondition(
+ const SinglePassRange1& rng1,
+ const SinglePassRange2& rng2,
+ std::forward_iterator_tag,
+ std::forward_iterator_tag)
+ {
+ return boost::size(rng2) >= boost::size(rng1);
+ }
+
+ } // namespace range_detail
+
+ template<
+ class SinglePassRange1,
+ class SinglePassRange2,
+ class Value
+ >
+ inline Value inner_product(
+ const SinglePassRange1& rng1,
+ const SinglePassRange2& rng2,
+ Value init)
{
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
- BOOST_ASSERT( boost::distance(rng2) >= boost::distance(rng1) );
- return std::inner_product( boost::begin(rng1), boost::end(rng1),
- boost::begin(rng2), init );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange1>));
+
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange2>));
+
+ BOOST_ASSERT(
+ range_detail::inner_product_precondition(
+ rng1, rng2,
+ typename range_category<const SinglePassRange1>::type(),
+ typename range_category<const SinglePassRange2>::type()));
+
+ return std::inner_product(
+ boost::begin(rng1), boost::end(rng1),
+ boost::begin(rng2), init);
}
- template< class SinglePassRange1,
- class SinglePassRange2,
- class Value,
- class BinaryOperation1, class BinaryOperation2 >
- inline Value inner_product( const SinglePassRange1& rng1, const SinglePassRange2& rng2,
- Value init,
- BinaryOperation1 op1, BinaryOperation2 op2 )
+ template<
+ class SinglePassRange1,
+ class SinglePassRange2,
+ class Value,
+ class BinaryOperation1,
+ class BinaryOperation2
+ >
+ inline Value inner_product(
+ const SinglePassRange1& rng1,
+ const SinglePassRange2& rng2,
+ Value init,
+ BinaryOperation1 op1,
+ BinaryOperation2 op2)
{
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
- BOOST_ASSERT( boost::distance(rng2) >= boost::distance(rng1) );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange1>));
+
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange2>));
+
+ BOOST_ASSERT(
+ range_detail::inner_product_precondition(
+ rng1, rng2,
+ typename range_category<const SinglePassRange1>::type(),
+ typename range_category<const SinglePassRange2>::type()));
- return std::inner_product( boost::begin(rng1), boost::end(rng1),
- boost::begin(rng2), init, op1, op2 );
+ return std::inner_product(
+ boost::begin(rng1), boost::end(rng1),
+ boost::begin(rng2), init, op1, op2);
}
- template< class SinglePassRange, class OutputIterator >
- inline OutputIterator partial_sum ( const SinglePassRange& rng,
- OutputIterator result )
+ template<class SinglePassRange, class OutputIterator>
+ inline OutputIterator partial_sum(const SinglePassRange& rng,
+ OutputIterator result)
{
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
- return std::partial_sum( boost::begin(rng), boost::end(rng), result );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return std::partial_sum(boost::begin(rng), boost::end(rng), result);
}
- template< class SinglePassRange, class OutputIterator, class BinaryOperation >
- inline OutputIterator partial_sum ( const SinglePassRange& rng, OutputIterator result,
- BinaryOperation op )
+ template<class SinglePassRange, class OutputIterator, class BinaryOperation>
+ inline OutputIterator partial_sum(
+ const SinglePassRange& rng,
+ OutputIterator result,
+ BinaryOperation op)
{
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
- return std::partial_sum( boost::begin(rng), boost::end(rng), result, op );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return std::partial_sum(boost::begin(rng), boost::end(rng), result, op);
}
- template< class SinglePassRange, class OutputIterator >
- inline OutputIterator adjacent_difference ( const SinglePassRange& rng,
- OutputIterator result )
+ template<class SinglePassRange, class OutputIterator>
+ inline OutputIterator adjacent_difference(
+ const SinglePassRange& rng,
+ OutputIterator result)
{
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
- return std::adjacent_difference( boost::begin(rng), boost::end(rng),
- result );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return std::adjacent_difference(boost::begin(rng), boost::end(rng),
+ result);
}
- template< class SinglePassRange, class OutputIterator, class BinaryOperation >
- inline OutputIterator adjacent_difference ( const SinglePassRange& rng,
- OutputIterator result,
- BinaryOperation op )
+ template<class SinglePassRange, class OutputIterator, class BinaryOperation>
+ inline OutputIterator adjacent_difference(
+ const SinglePassRange& rng,
+ OutputIterator result,
+ BinaryOperation op)
{
- BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
- return std::adjacent_difference( boost::begin(rng), boost::end(rng),
- result, op );
+ BOOST_RANGE_CONCEPT_ASSERT((
+ SinglePassRangeConcept<const SinglePassRange>));
+
+ return std::adjacent_difference(boost::begin(rng), boost::end(rng),
+ result, op);
}
-}
+} // namespace boost
#endif
diff --git a/3party/boost/boost/range/pointer.hpp b/3party/boost/boost/range/pointer.hpp
index e7431ffdf6..b1e8dc5c5e 100644
--- a/3party/boost/boost/range/pointer.hpp
+++ b/3party/boost/boost/range/pointer.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_POINTER_TYPE_HPP
#define BOOST_RANGE_POINTER_TYPE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -22,7 +22,8 @@
namespace boost
{
template< class T >
- struct range_pointer : iterator_pointer< typename range_iterator<T>::type >
+ struct range_pointer
+ : iterator_pointer< BOOST_DEDUCED_TYPENAME range_iterator<T>::type >
{ };
}
diff --git a/3party/boost/boost/range/range_fwd.hpp b/3party/boost/boost/range/range_fwd.hpp
new file mode 100644
index 0000000000..0e6e00f553
--- /dev/null
+++ b/3party/boost/boost/range/range_fwd.hpp
@@ -0,0 +1,63 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2003-2004.
+// 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/range/
+//
+#ifndef BOOST_RANGE_RANGE_FWD_HPP_INCLUDED
+#define BOOST_RANGE_RANGE_FWD_HPP_INCLUDED
+
+namespace boost
+{
+
+// Extension points
+ template<typename C, typename Enabler>
+ struct range_iterator;
+
+ template<typename C, typename Enabler>
+ struct range_mutable_iterator;
+
+ template<typename C, typename Enabler>
+ struct range_const_iterator;
+
+// Core classes
+ template<typename IteratorT>
+ class iterator_range;
+
+ template<typename ForwardRange>
+ class sub_range;
+
+// Meta-functions
+ template<typename T>
+ struct range_category;
+
+ template<typename T>
+ struct range_difference;
+
+ template<typename T>
+ struct range_pointer;
+
+ template<typename T>
+ struct range_reference;
+
+ template<typename T>
+ struct range_reverse_iterator;
+
+ template<typename T>
+ struct range_size;
+
+ template<typename T>
+ struct range_value;
+
+ template<typename T>
+ struct has_range_iterator;
+
+ template<typename T>
+ struct has_range_const_iterator;
+
+} // namespace boost
+
+#endif // include guard
diff --git a/3party/boost/boost/range/rbegin.hpp b/3party/boost/boost/range/rbegin.hpp
index 78e5f61ab7..6d66de94b9 100644
--- a/3party/boost/boost/range/rbegin.hpp
+++ b/3party/boost/boost/range/rbegin.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_RBEGIN_HPP
#define BOOST_RANGE_RBEGIN_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/reference.hpp b/3party/boost/boost/range/reference.hpp
index d308e43ddf..c664c38a66 100644
--- a/3party/boost/boost/range/reference.hpp
+++ b/3party/boost/boost/range/reference.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_REFERENCE_TYPE_HPP
#define BOOST_RANGE_REFERENCE_TYPE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/rend.hpp b/3party/boost/boost/range/rend.hpp
index fd79aa22c3..ef7040780c 100644
--- a/3party/boost/boost/range/rend.hpp
+++ b/3party/boost/boost/range/rend.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_REND_HPP
#define BOOST_RANGE_REND_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/result_iterator.hpp b/3party/boost/boost/range/result_iterator.hpp
index ba09c5fed4..54e343d111 100644
--- a/3party/boost/boost/range/result_iterator.hpp
+++ b/3party/boost/boost/range/result_iterator.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_RESULT_ITERATOR_HPP
#define BOOST_RANGE_RESULT_ITERATOR_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/reverse_iterator.hpp b/3party/boost/boost/range/reverse_iterator.hpp
index f8e922175a..0aa0130af6 100644
--- a/3party/boost/boost/range/reverse_iterator.hpp
+++ b/3party/boost/boost/range/reverse_iterator.hpp
@@ -11,12 +11,13 @@
#ifndef BOOST_RANGE_REVERSE_ITERATOR_HPP
#define BOOST_RANGE_REVERSE_ITERATOR_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/range/config.hpp>
#include <boost/range/iterator.hpp>
+#include <boost/type_traits/remove_reference.hpp>
#include <boost/iterator/reverse_iterator.hpp>
@@ -26,11 +27,12 @@ namespace boost
// default
//////////////////////////////////////////////////////////////////////////
- template< typename C >
+ template< typename T >
struct range_reverse_iterator
{
typedef reverse_iterator<
- BOOST_DEDUCED_TYPENAME range_iterator<C>::type > type;
+ BOOST_DEDUCED_TYPENAME range_iterator<
+ BOOST_DEDUCED_TYPENAME remove_reference<T>::type>::type > type;
};
diff --git a/3party/boost/boost/range/reverse_result_iterator.hpp b/3party/boost/boost/range/reverse_result_iterator.hpp
index 62bf135a49..d375cfd536 100644
--- a/3party/boost/boost/range/reverse_result_iterator.hpp
+++ b/3party/boost/boost/range/reverse_result_iterator.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_REVERSE_RESULT_ITERATOR_HPP
#define BOOST_RANGE_REVERSE_RESULT_ITERATOR_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/range/size.hpp b/3party/boost/boost/range/size.hpp
index 6ae74d1176..d007bfca44 100644
--- a/3party/boost/boost/range/size.hpp
+++ b/3party/boost/boost/range/size.hpp
@@ -11,7 +11,7 @@
#ifndef BOOST_RANGE_SIZE_HPP
#define BOOST_RANGE_SIZE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -19,24 +19,39 @@
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/size_type.hpp>
+#include <boost/range/detail/has_member_size.hpp>
#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/utility.hpp>
namespace boost
{
namespace range_detail
{
+
+ template<class SinglePassRange>
+ inline typename ::boost::enable_if<
+ has_member_size<SinglePassRange>,
+ typename range_size<const SinglePassRange>::type
+ >::type
+ range_calculate_size(const SinglePassRange& rng)
+ {
+ return rng.size();
+ }
+
template<class SinglePassRange>
- inline BOOST_DEDUCED_TYPENAME range_size<const SinglePassRange>::type
+ inline typename disable_if<
+ has_member_size<SinglePassRange>,
+ typename range_size<const SinglePassRange>::type
+ >::type
range_calculate_size(const SinglePassRange& rng)
{
- BOOST_ASSERT( (boost::end(rng) - boost::begin(rng)) >= 0 &&
- "reachability invariant broken!" );
- return boost::end(rng) - boost::begin(rng);
+ return std::distance(boost::begin(rng), boost::end(rng));
}
}
template<class SinglePassRange>
- inline BOOST_DEDUCED_TYPENAME range_size<const SinglePassRange>::type
+ inline typename range_size<const SinglePassRange>::type
size(const SinglePassRange& rng)
{
#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
diff --git a/3party/boost/boost/range/size_type.hpp b/3party/boost/boost/range/size_type.hpp
index c6fb54bb15..db5a59b5ee 100644
--- a/3party/boost/boost/range/size_type.hpp
+++ b/3party/boost/boost/range/size_type.hpp
@@ -11,15 +11,13 @@
#ifndef BOOST_RANGE_SIZE_TYPE_HPP
#define BOOST_RANGE_SIZE_TYPE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/range/config.hpp>
#include <boost/range/difference_type.hpp>
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#include <boost/range/detail/size_type.hpp>
-#else
+#include <boost/range/concepts.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/make_unsigned.hpp>
@@ -45,8 +43,8 @@ namespace boost
template<typename C>
static yes_type test(BOOST_DEDUCED_TYPENAME C::size_type x);
- template<typename C, typename Arg>
- static no_type test(Arg x);
+ template<typename C>
+ static no_type test(...);
public:
static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);
@@ -63,7 +61,7 @@ namespace boost
template<typename C>
struct range_size<
C,
- BOOST_DEDUCED_TYPENAME enable_if<has_size_type<C>, void>::type
+ BOOST_DEDUCED_TYPENAME ::boost::enable_if<has_size_type<C>, void>::type
>
{
typedef BOOST_DEDUCED_TYPENAME C::size_type type;
@@ -74,16 +72,27 @@ namespace boost
template< class T >
struct range_size :
detail::range_size<T>
- { };
+ {
+// Very strange things happen on some compilers that have the range concept
+// asserts disabled. This preprocessor condition is clearly redundant on a
+// working compiler but is vital for at least some compilers such as clang 4.2
+// but only on the Mac!
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT == 1
+ BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept<T>));
+#endif
+ };
template< class T >
struct range_size<const T >
: detail::range_size<T>
- { };
+ {
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT == 1
+ BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept<T>));
+#endif
+ };
} // namespace boost
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#endif
diff --git a/3party/boost/boost/range/sub_range.hpp b/3party/boost/boost/range/sub_range.hpp
index 0b000861a3..8d5d168ce9 100644
--- a/3party/boost/boost/range/sub_range.hpp
+++ b/3party/boost/boost/range/sub_range.hpp
@@ -24,6 +24,7 @@
#include <boost/range/value_type.hpp>
#include <boost/range/size_type.hpp>
#include <boost/range/difference_type.hpp>
+#include <boost/range/reference.hpp>
#include <boost/range/algorithm/equal.hpp>
#include <boost/assert.hpp>
#include <boost/type_traits/is_reference.hpp>
@@ -31,147 +32,251 @@
namespace boost
{
-
- template< class ForwardRange >
- class sub_range : public iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >
+ namespace range_detail
{
- typedef BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type iterator_t;
- typedef iterator_range< iterator_t > base;
+
+template<class ForwardRange, class TraversalTag>
+class sub_range_base
+ : public iterator_range<
+ BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+ >
+{
+ typedef iterator_range<
+ BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+ > base;
+
+protected:
+ typedef BOOST_DEDUCED_TYPENAME base::iterator_range_ iterator_range_;
+
+public:
+ typedef BOOST_DEDUCED_TYPENAME range_value<ForwardRange>::type value_type;
+ typedef BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type iterator;
+ typedef BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME range_difference<ForwardRange>::type difference_type;
+ typedef BOOST_DEDUCED_TYPENAME range_size<ForwardRange>::type size_type;
+ typedef BOOST_DEDUCED_TYPENAME range_reference<ForwardRange>::type reference;
+ typedef BOOST_DEDUCED_TYPENAME range_reference<const ForwardRange>::type const_reference;
+
+ sub_range_base()
+ {
+ }
+
+ template<class Iterator>
+ sub_range_base(Iterator first, Iterator last)
+ : base(first, last)
+ {
+ }
+
+ reference front()
+ {
+ return base::front();
+ }
+
+ const_reference front() const
+ {
+ return base::front();
+ }
+};
+
+template<class ForwardRange>
+class sub_range_base<ForwardRange, bidirectional_traversal_tag>
+ : public sub_range_base<ForwardRange, forward_traversal_tag>
+{
+ typedef sub_range_base<ForwardRange, forward_traversal_tag> base;
+public:
+ sub_range_base()
+ {
+ }
+
+ template<class Iterator>
+ sub_range_base(Iterator first, Iterator last)
+ : base(first, last)
+ {
+ }
+
+ BOOST_DEDUCED_TYPENAME base::reference back()
+ {
+ return base::back();
+ }
+
+ BOOST_DEDUCED_TYPENAME base::const_reference back() const
+ {
+ return base::back();
+ }
+};
+
+template<class ForwardRange>
+class sub_range_base<ForwardRange, random_access_traversal_tag>
+ : public sub_range_base<ForwardRange, bidirectional_traversal_tag>
+{
+ typedef sub_range_base<ForwardRange, bidirectional_traversal_tag> base;
+
+public:
+ sub_range_base()
+ {
+ }
+
+ template<class Iterator>
+ sub_range_base(Iterator first, Iterator last)
+ : base(first, last)
+ {
+ }
+
+ BOOST_DEDUCED_TYPENAME base::reference
+ operator[](BOOST_DEDUCED_TYPENAME base::difference_type n)
+ {
+ return this->begin()[n];
+ }
+
+ BOOST_DEDUCED_TYPENAME base::const_reference
+ operator[](BOOST_DEDUCED_TYPENAME base::difference_type n) const
+ {
+ return this->begin()[n];
+ }
+};
+
+ } // namespace range_detail
+
+ template<class ForwardRange>
+ class sub_range
+ : public range_detail::sub_range_base<
+ ForwardRange,
+ BOOST_DEDUCED_TYPENAME iterator_traversal<
+ BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+ >::type
+ >
+ {
+ typedef BOOST_DEDUCED_TYPENAME range_iterator<
+ ForwardRange
+ >::type iterator_t;
+
+ typedef range_detail::sub_range_base<
+ ForwardRange,
+ BOOST_DEDUCED_TYPENAME iterator_traversal<
+ BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+ >::type
+ > base;
typedef BOOST_DEDUCED_TYPENAME base::impl impl;
- public:
- typedef BOOST_DEDUCED_TYPENAME range_value<ForwardRange>::type value_type;
- typedef BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type iterator;
- typedef BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type const_iterator;
- typedef BOOST_DEDUCED_TYPENAME range_difference<ForwardRange>::type difference_type;
- typedef BOOST_DEDUCED_TYPENAME range_size<ForwardRange>::type size_type;
- typedef BOOST_DEDUCED_TYPENAME base::reference reference;
-
- public: // for return value of front/back
- typedef BOOST_DEDUCED_TYPENAME
- boost::mpl::if_< boost::is_reference<reference>,
- const BOOST_DEDUCED_TYPENAME boost::remove_reference<reference>::type&,
- reference >::type const_reference;
+
+ protected:
+ typedef BOOST_DEDUCED_TYPENAME base::iterator_range_ iterator_range_;
+
+ private:
+ template<class Source>
+ struct is_compatible_range
+ : is_convertible<
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ has_range_iterator<Source>,
+ range_iterator<Source>,
+ mpl::identity<void>
+ >::type,
+ BOOST_DEDUCED_TYPENAME base::iterator
+ >
+ {
+ };
public:
- sub_range() : base()
+ sub_range()
{ }
-
+
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500) )
- sub_range( const sub_range& r )
- : base( static_cast<const base&>( r ) )
+ sub_range(const sub_range& r)
+ : base(impl::adl_begin(static_cast<const base&>(r)),
+ impl::adl_end(static_cast<const base&>(r)))
{ }
#endif
template< class ForwardRange2 >
- sub_range( ForwardRange2& r ) :
-
-#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 800 )
- base( impl::adl_begin( r ), impl::adl_end( r ) )
-#else
- base( r )
-#endif
- { }
-
- template< class ForwardRange2 >
- sub_range( const ForwardRange2& r ) :
-
-#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 800 )
- base( impl::adl_begin( r ), impl::adl_end( r ) )
-#else
- base( r )
-#endif
- { }
-
- template< class Iter >
- sub_range( Iter first, Iter last ) :
- base( first, last )
- { }
-
- template< class ForwardRange2 >
- sub_range& operator=( ForwardRange2& r )
+ sub_range(
+ ForwardRange2& r,
+ BOOST_DEDUCED_TYPENAME ::boost::enable_if<
+ is_compatible_range<ForwardRange2>
+ >::type* = 0
+ )
+ : base(impl::adl_begin(r), impl::adl_end(r))
{
- base::operator=( r );
- return *this;
}
template< class ForwardRange2 >
- sub_range& operator=( const ForwardRange2& r )
+ sub_range(
+ const ForwardRange2& r,
+ BOOST_DEDUCED_TYPENAME ::boost::enable_if<
+ is_compatible_range<const ForwardRange2>
+ >::type* = 0
+ )
+ : base(impl::adl_begin(r), impl::adl_end(r))
{
- base::operator=( r );
- return *this;
- }
+ }
- sub_range& operator=( const sub_range& r )
+ BOOST_DEDUCED_TYPENAME base::const_iterator begin() const
{
- base::operator=( static_cast<const base&>(r) );
- return *this;
+ return base::begin();
}
-
- public:
-
- iterator begin() { return base::begin(); }
- const_iterator begin() const { return base::begin(); }
- iterator end() { return base::end(); }
- const_iterator end() const { return base::end(); }
- difference_type size() const { return base::size(); }
-
- public: // convenience
- reference front()
+ BOOST_DEDUCED_TYPENAME base::iterator begin()
{
- return base::front();
+ return base::begin();
}
- const_reference front() const
+ BOOST_DEDUCED_TYPENAME base::const_iterator end() const
{
- return base::front();
+ return base::end();
}
- reference back()
+ BOOST_DEDUCED_TYPENAME base::iterator end()
{
- return base::back();
+ return base::end();
}
- const_reference back() const
+ template< class Iter >
+ sub_range( Iter first, Iter last ) :
+ base( first, last )
+ { }
+
+ template<class ForwardRange2>
+ BOOST_DEDUCED_TYPENAME ::boost::enable_if<
+ is_compatible_range<ForwardRange2>,
+ sub_range&
+ >::type
+ operator=(ForwardRange2& r)
{
- return base::back();
+ iterator_range_::operator=( r );
+ return *this;
}
- reference operator[]( difference_type sz )
+ template<class ForwardRange2>
+ BOOST_DEDUCED_TYPENAME ::boost::enable_if<
+ is_compatible_range<const ForwardRange2>,
+ sub_range&
+ >::type
+ operator=( const ForwardRange2& r )
{
- return base::operator[](sz);
- }
+ iterator_range_::operator=( r );
+ return *this;
+ }
- const_reference operator[]( difference_type sz ) const
+ sub_range& operator=( const sub_range& r )
{
- return base::operator[](sz);
+ iterator_range_::operator=( static_cast<const iterator_range_&>(r) );
+ return *this;
+ }
+
+ sub_range& advance_begin(
+ BOOST_DEDUCED_TYPENAME base::difference_type n)
+ {
+ std::advance(this->m_Begin, n);
+ return *this;
+ }
+
+ sub_range& advance_end(
+ BOOST_DEDUCED_TYPENAME base::difference_type n)
+ {
+ std::advance(this->m_End, n);
+ return *this;
}
-
};
- template< class ForwardRange, class ForwardRange2 >
- inline bool operator==( const sub_range<ForwardRange>& l,
- const sub_range<ForwardRange2>& r )
- {
- return boost::equal( l, r );
- }
-
- template< class ForwardRange, class ForwardRange2 >
- inline bool operator!=( const sub_range<ForwardRange>& l,
- const sub_range<ForwardRange2>& r )
- {
- return !boost::equal( l, r );
- }
-
- template< class ForwardRange, class ForwardRange2 >
- inline bool operator<( const sub_range<ForwardRange>& l,
- const sub_range<ForwardRange2>& r )
- {
- return iterator_range_detail::less_than( l, r );
- }
-
-
} // namespace 'boost'
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
diff --git a/3party/boost/boost/range/traversal.hpp b/3party/boost/boost/range/traversal.hpp
new file mode 100644
index 0000000000..237b3e88e0
--- /dev/null
+++ b/3party/boost/boost/range/traversal.hpp
@@ -0,0 +1,31 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2014. 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/range/
+//
+
+#ifndef BOOST_RANGE_TRAVERSAL_HPP
+#define BOOST_RANGE_TRAVERSAL_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost
+{
+ template<typename SinglePassRange>
+ struct range_traversal
+ : iterator_traversal<typename range_iterator<SinglePassRange>::type>
+ {
+ };
+}
+
+#endif
diff --git a/3party/boost/boost/range/value_type.hpp b/3party/boost/boost/range/value_type.hpp
index 95c7580885..5a3187ec0e 100644
--- a/3party/boost/boost/range/value_type.hpp
+++ b/3party/boost/boost/range/value_type.hpp
@@ -11,17 +11,13 @@
#ifndef BOOST_RANGE_VALUE_TYPE_HPP
#define BOOST_RANGE_VALUE_TYPE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/range/config.hpp>
#include <boost/range/iterator.hpp>
-//#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-//#include <boost/range/detail/value_type.hpp>
-//#else
-
#include <boost/iterator/iterator_traits.hpp>
namespace boost
diff --git a/3party/boost/boost/ratio/detail/mpl/abs.hpp b/3party/boost/boost/ratio/detail/mpl/abs.hpp
index 4be1274dcc..91545888a9 100644
--- a/3party/boost/boost/ratio/detail/mpl/abs.hpp
+++ b/3party/boost/boost/ratio/detail/mpl/abs.hpp
@@ -2,8 +2,8 @@
//
// Copyright Vicente J. Botet Escriba 2010
//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+// 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/mpl for documentation.
@@ -15,12 +15,12 @@
#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/mpl/aux_/config/eti.hpp>
#include <boost/mpl/aux_/config/integral.hpp>
#include <boost/mpl/aux_/config/static_constant.hpp>
#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && !defined(__CUDACC__) \
&& ( defined(BOOST_MSVC) \
|| BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
)
@@ -79,7 +79,7 @@ struct abs_impl<integral_c_tag>
#else
template< typename N > struct apply
: integral_c< typename N::value_type, ((N::value < 0) ? (-N::value) : N::value ) >
-#endif
+#endif
{
};
};
diff --git a/3party/boost/boost/ratio/detail/mpl/gcd.hpp b/3party/boost/boost/ratio/detail/mpl/gcd.hpp
index c8258cfe70..30ba1db91c 100644
--- a/3party/boost/boost/ratio/detail/mpl/gcd.hpp
+++ b/3party/boost/boost/ratio/detail/mpl/gcd.hpp
@@ -17,7 +17,6 @@
#include <boost/mpl/aux_/largest_int.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/mpl/aux_/config/eti.hpp>
#include <boost/mpl/aux_/config/integral.hpp>
#include <boost/mpl/aux_/config/static_constant.hpp>
#include <boost/mpl/aux_/config/dependent_nttp.hpp>
@@ -25,6 +24,7 @@
#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && !defined(__CUDACC__) \
&& ( defined(BOOST_MSVC) \
|| BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
)
diff --git a/3party/boost/boost/ratio/detail/mpl/lcm.hpp b/3party/boost/boost/ratio/detail/mpl/lcm.hpp
index 546d0e12f2..1792660f06 100644
--- a/3party/boost/boost/ratio/detail/mpl/lcm.hpp
+++ b/3party/boost/boost/ratio/detail/mpl/lcm.hpp
@@ -17,7 +17,6 @@
#include <boost/mpl/aux_/largest_int.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/mpl/aux_/config/eti.hpp>
#include <boost/mpl/aux_/config/integral.hpp>
#include <boost/mpl/aux_/config/static_constant.hpp>
#include <boost/mpl/aux_/config/dependent_nttp.hpp>
@@ -25,6 +24,7 @@
#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && !defined(__CUDACC__) \
&& ( defined(BOOST_MSVC) \
|| BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
)
diff --git a/3party/boost/boost/ratio/detail/mpl/sign.hpp b/3party/boost/boost/ratio/detail/mpl/sign.hpp
index af201eb42e..fa1c555348 100644
--- a/3party/boost/boost/ratio/detail/mpl/sign.hpp
+++ b/3party/boost/boost/ratio/detail/mpl/sign.hpp
@@ -2,8 +2,8 @@
//
// Copyright Vicente J. Botet Escriba 2010
//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+// 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/mpl for documentation.
@@ -15,12 +15,12 @@
#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/mpl/aux_/config/eti.hpp>
#include <boost/mpl/aux_/config/integral.hpp>
#include <boost/mpl/aux_/config/static_constant.hpp>
#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && !defined(__CUDACC__) \
&& ( defined(BOOST_MSVC) \
|| BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
)
@@ -79,7 +79,7 @@ struct sign_impl<integral_c_tag>
#else
template< typename N > struct apply
: integral_c< typename N::value_type, (N::value == 0 ? 0 : (N::value < 0 ? -1 : 1)) >
-#endif
+#endif
{
};
};
diff --git a/3party/boost/boost/ratio/detail/overflow_helpers.hpp b/3party/boost/boost/ratio/detail/overflow_helpers.hpp
index 8df3b1ff7d..ffaa603a65 100644
--- a/3party/boost/boost/ratio/detail/overflow_helpers.hpp
+++ b/3party/boost/boost/ratio/detail/overflow_helpers.hpp
@@ -40,7 +40,7 @@ time2_demo contained this comment:
#include <limits>
#include <boost/cstdint.hpp>
#include <boost/type_traits/integral_constant.hpp>
-#include <boost/utility/enable_if.hpp>
+#include <boost/core/enable_if.hpp>
#include <boost/integer_traits.hpp>
//
diff --git a/3party/boost/boost/ratio/detail/ratio_io.hpp b/3party/boost/boost/ratio/detail/ratio_io.hpp
index 2b17f507c8..636dbc22f8 100644
--- a/3party/boost/boost/ratio/detail/ratio_io.hpp
+++ b/3party/boost/boost/ratio/detail/ratio_io.hpp
@@ -39,11 +39,6 @@ struct ratio_string
#include <string>
#include <sstream>
-#ifdef BOOST_RATIO_HAS_STATIC_STRING
-#include <boost/ratio/ratio_static_string.hpp>
-#include <boost/static_string/static_string.hpp>
-#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
@@ -1040,6 +1035,308 @@ struct ratio_string<exa, wchar_t>
#endif
#endif
+#ifdef BOOST_RATIO_EXTENSIONS
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<kibi, CharT> :
+ ratio_detail::ratio_string_static<kibi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<kibi, char>
+{
+ static std::string short_name() {return std::string("Ki");}
+ static std::string long_name() {return std::string("kibi");}
+ static std::string symbol() {return short_name();}
+ static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<kibi, char16_t>
+{
+ static std::u16string short_name() {return std::u16string(u"Ki");}
+ static std::u16string long_name() {return std::u16string(u"kibi");}
+ static std::u16string symbol() {return short_name();}
+ static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<kibi, char32_t>
+{
+ static std::u32string short_name() {return std::u32string(U"Ki");}
+ static std::u32string long_name() {return std::u32string(U"kibi");}
+ static std::u32string symbol() {return short_name();}
+ static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<kibi, wchar_t>
+{
+ static std::wstring short_name() {return std::wstring(L"Ki");}
+ static std::wstring long_name() {return std::wstring(L"kibi");}
+ static std::wstring symbol() {return short_name();}
+ static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<mebi, CharT> :
+ ratio_detail::ratio_string_static<mebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<mebi, char>
+{
+ static std::string short_name() {return std::string("Mi");}
+ static std::string long_name() {return std::string("mebi");}
+ static std::string symbol() {return short_name();}
+ static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<mebi, char16_t>
+{
+ static std::u16string short_name() {return std::u16string(u"Mi");}
+ static std::u16string long_name() {return std::u16string(u"mebi");}
+ static std::u16string symbol() {return short_name();}
+ static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<mebi, char32_t>
+{
+ static std::u32string short_name() {return std::u32string(U"Mi");}
+ static std::u32string long_name() {return std::u32string(U"mebi");}
+ static std::u32string symbol() {return short_name();}
+ static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<mebi, wchar_t>
+{
+ static std::wstring short_name() {return std::wstring(L"Mi");}
+ static std::wstring long_name() {return std::wstring(L"mebi");}
+ static std::wstring symbol() {return short_name();}
+ static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<gibi, CharT> :
+ ratio_detail::ratio_string_static<gibi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<gibi, char>
+{
+ static std::string short_name() {return std::string("Gi");}
+ static std::string long_name() {return std::string("gibi");}
+ static std::string symbol() {return short_name();}
+ static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<gibi, char16_t>
+{
+ static std::u16string short_name() {return std::u16string(u"Gi");}
+ static std::u16string long_name() {return std::u16string(u"gibi");}
+ static std::u16string symbol() {return short_name();}
+ static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<gibi, char32_t>
+{
+ static std::u32string short_name() {return std::u32string(U"Gi");}
+ static std::u32string long_name() {return std::u32string(U"gibi");}
+ static std::u32string symbol() {return short_name();}
+ static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<gibi, wchar_t>
+{
+ static std::wstring short_name() {return std::wstring(L"Gi");}
+ static std::wstring long_name() {return std::wstring(L"gibi");}
+ static std::wstring symbol() {return short_name();}
+ static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<tebi, CharT> :
+ ratio_detail::ratio_string_static<tebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<tebi, char>
+{
+ static std::string short_name() {return std::string("Ti");}
+ static std::string long_name() {return std::string("tebi");}
+ static std::string symbol() {return short_name();}
+ static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<tebi, char16_t>
+{
+ static std::u16string short_name() {return std::u16string(u"Ti");}
+ static std::u16string long_name() {return std::u16string(u"tebi");}
+ static std::u16string symbol() {return short_name();}
+ static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<tebi, char32_t>
+{
+ static std::u32string short_name() {return std::u32string(U"Ti");}
+ static std::u32string long_name() {return std::u32string(U"tebi");}
+ static std::u32string symbol() {return short_name();}
+ static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<tebi, wchar_t>
+{
+ static std::wstring short_name() {return std::wstring(L"Ti");}
+ static std::wstring long_name() {return std::wstring(L"tebi");}
+ static std::wstring symbol() {return short_name();}
+ static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<pebi, CharT> :
+ ratio_detail::ratio_string_static<pebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<pebi, char>
+{
+ static std::string short_name() {return std::string("Pi");}
+ static std::string long_name() {return std::string("pebi");}
+ static std::string symbol() {return short_name();}
+ static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<pebi, char16_t>
+{
+ static std::u16string short_name() {return std::u16string(u"Pi");}
+ static std::u16string long_name() {return std::u16string(u"pebi");}
+ static std::u16string symbol() {return short_name();}
+ static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<pebi, char32_t>
+{
+ static std::u32string short_name() {return std::u32string(U"Pi");}
+ static std::u32string long_name() {return std::u32string(U"pebi");}
+ static std::u32string symbol() {return short_name();}
+ static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<pebi, wchar_t>
+{
+ static std::wstring short_name() {return std::wstring(L"Pi");}
+ static std::wstring long_name() {return std::wstring(L"pebi");}
+ static std::wstring symbol() {return short_name();}
+ static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<exbi, CharT> :
+ ratio_detail::ratio_string_static<exbi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<exbi, char>
+{
+ static std::string short_name() {return std::string("Ei");}
+ static std::string long_name() {return std::string("exbi");}
+ static std::string symbol() {return short_name();}
+ static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<exbi, char16_t>
+{
+ static std::u16string short_name() {return std::u16string(u"Ei");}
+ static std::u16string long_name() {return std::u16string(u"exbi");}
+ static std::u16string symbol() {return short_name();}
+ static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<exbi, char32_t>
+{
+ static std::u32string short_name() {return std::u32string(U"Ei");}
+ static std::u32string long_name() {return std::u32string(U"exbi");}
+ static std::u32string symbol() {return short_name();}
+ static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<exbi, wchar_t>
+{
+ static std::wstring short_name() {return std::wstring(L"Ei");}
+ static std::wstring long_name() {return std::wstring(L"exbi");}
+ static std::wstring symbol() {return short_name();}
+ static std::wstring prefix() {return long_name();}
+};
+#endif
+#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 546e8f0868..824cbf0173 100644
--- a/3party/boost/boost/ratio/ratio.hpp
+++ b/3party/boost/boost/ratio/ratio.hpp
@@ -42,7 +42,7 @@ time2_demo contained this comment:
#include <limits>
#include <boost/cstdint.hpp>
#include <boost/type_traits/integral_constant.hpp>
-#include <boost/utility/enable_if.hpp>
+#include <boost/core/enable_if.hpp>
#include <boost/integer_traits.hpp>
#include <boost/ratio/ratio_fwd.hpp>
#include <boost/ratio/detail/overflow_helpers.hpp>
@@ -128,7 +128,7 @@ const boost::intmax_t ratio<N, D>::den;
//----------------------------------------------------------------------------//
// //
-// 20.6.2 Arithmetic on ratio types [ratio.arithmetic] //
+// 20.6.2 Arithmetic on ratio types [ratio.arithmetic] //
// //
//----------------------------------------------------------------------------//
@@ -158,7 +158,7 @@ struct ratio_divide
//----------------------------------------------------------------------------//
// //
-// 20.6.3 Comparasion of ratio types [ratio.comparison] //
+// 20.6.3 Comparision of ratio types [ratio.comparison] //
// //
//----------------------------------------------------------------------------//
@@ -204,6 +204,12 @@ struct ratio_gcd :
{
};
+ //----------------------------------------------------------------------------//
+ // //
+ // More arithmetic on ratio types [ratio.arithmetic] //
+ // //
+ //----------------------------------------------------------------------------//
+
#ifdef BOOST_RATIO_EXTENSIONS
template <class R>
struct ratio_negate
@@ -220,12 +226,66 @@ struct ratio_sign
: mpl::sign_c<boost::intmax_t, R::num>
{
};
+
+template <class R>
+struct ratio_inverse
+ : ratio<R::den, R::num>::type
+{
+};
+
+
template <class R1, class R2>
struct ratio_lcm :
ratio<mpl::lcm_c<boost::intmax_t, R1::num, R2::num>::value,
mpl::gcd_c<boost::intmax_t, R1::den, R2::den>::value>::type
{
};
+
+template <class R1, class R2>
+struct ratio_modulo :
+ ratio<(R1::num * R2::den) % (R2::num * R1::den), R1::den * R2::den>::type
+{
+};
+
+namespace detail {
+ template <class R1, class R2, bool r1ltr2>
+ struct ratio_min : R1 {};
+ template <class R1, class R2>
+ struct ratio_min<R1,R2,false> : R2 {};
+
+ template <class R1, class R2, bool r1ltr2>
+ struct ratio_max : R2 {};
+ template <class R1, class R2>
+ struct ratio_max<R1,R2,false> : R1 {};
+}
+
+template <class R1, class R2>
+struct ratio_min : detail::ratio_min<R1, R2, ratio_less<R1,R2>::value>::type
+{
+};
+
+template <class R1, class R2>
+struct ratio_max : detail::ratio_max<R1, R2, ratio_less<R1,R2>::value>::type
+{
+};
+
+template<typename R, int p>
+struct ratio_power :
+ ratio_multiply<
+ typename ratio_power<R, p%2>::type,
+ typename ratio_power<typename ratio_multiply<R, R>::type, p/2>::type
+ >::type
+{};
+
+template<typename R>
+struct ratio_power<R, 0> : ratio<1>::type {};
+
+template<typename R>
+struct ratio_power<R, 1> : R {};
+
+template<typename R>
+struct ratio_power<R, -1> : ratio_divide<ratio<1>, R>::type {};
+
#endif
} // namespace boost
diff --git a/3party/boost/boost/ratio/ratio_fwd.hpp b/3party/boost/boost/ratio/ratio_fwd.hpp
index 0882e0bb31..0836d557b6 100644
--- a/3party/boost/boost/ratio/ratio_fwd.hpp
+++ b/3party/boost/boost/ratio/ratio_fwd.hpp
@@ -51,6 +51,14 @@ template <class R1, class R2> struct ratio_add;
template <class R1, class R2> struct ratio_subtract;
template <class R1, class R2> struct ratio_multiply;
template <class R1, class R2> struct ratio_divide;
+#ifdef BOOST_RATIO_EXTENSIONS
+template <class R1, class R2> struct ratio_gcd;
+template <class R1, class R2> struct ratio_lcm;
+template <class R> struct ratio_negate;
+template <class R> struct ratio_abs;
+template <class R> struct ratio_sign;
+template <class R, int P> struct ratio_power;
+#endif
// ratio comparison
template <class R1, class R2> struct ratio_equal;
@@ -78,6 +86,19 @@ typedef ratio< BOOST_RATIO_INTMAX_C(1000000000000), BOOST_RATIO_INTMAX_C(1)
typedef ratio< BOOST_RATIO_INTMAX_C(1000000000000000), BOOST_RATIO_INTMAX_C(1)> peta;
typedef ratio<BOOST_RATIO_INTMAX_C(1000000000000000000), BOOST_RATIO_INTMAX_C(1)> exa;
+#ifdef BOOST_RATIO_EXTENSIONS
+
+#define BOOST_RATIO_1024 BOOST_RATIO_INTMAX_C(1024)
+
+// convenience IEC typedefs
+typedef ratio< BOOST_RATIO_1024> kibi;
+typedef ratio< BOOST_RATIO_1024*BOOST_RATIO_1024> mebi;
+typedef ratio< BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> gibi;
+typedef ratio< BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> tebi;
+typedef ratio< BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> pebi;
+typedef ratio<BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> exbi;
+
+#endif
} // namespace boost
diff --git a/3party/boost/boost/ratio/ratio_io.hpp b/3party/boost/boost/ratio/ratio_io.hpp
index b3c7272c6c..e39cbaffa5 100644
--- a/3party/boost/boost/ratio/ratio_io.hpp
+++ b/3party/boost/boost/ratio/ratio_io.hpp
@@ -44,10 +44,6 @@ struct ratio_string
#include <string>
#include <sstream>
-#ifdef BOOST_RATIO_HAS_STATIC_STRING
-#include <boost/ratio/ratio_static_string.hpp>
-#include <boost/static_string/static_string.hpp>
-#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
@@ -818,6 +814,262 @@ struct ratio_string<exa, wchar_t>
#endif
#endif
+
+#ifdef BOOST_RATIO_EXTENSIONS
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<kibi, CharT> :
+ ratio_detail::ratio_string_static<kibi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<kibi, char>
+{
+ static std::string symbol() {return std::string("Ki");}
+ static std::string prefix() {return std::string("kibi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<kibi, char16_t>
+{
+ static std::u16string symbol() {return std::u16string(u"Ki");}
+ static std::u16string prefix() {return std::u16string(u"kibi");}
+};
+
+template <>
+struct ratio_string<kibi, char32_t>
+{
+ static std::u32string symbol() {return std::u32string(U"Ki");}
+ static std::u32string prefix() {return std::u32string(U"kibi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<kibi, wchar_t>
+{
+ static std::wstring symbol() {return std::wstring(L"Ki");}
+ static std::wstring prefix() {return std::wstring(L"kibi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<mebi, CharT> :
+ ratio_detail::ratio_string_static<mebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<mebi, char>
+{
+ static std::string symbol() {return std::string("Mi");}
+ static std::string prefix() {return std::string("mebi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<mebi, char16_t>
+{
+ static std::u16string symbol() {return std::u16string(u"Mi");}
+ static std::u16string prefix() {return std::u16string(u"mebi");}
+};
+
+template <>
+struct ratio_string<mebi, char32_t>
+{
+ static std::u32string symbol() {return std::u32string(U"Mi");}
+ static std::u32string prefix() {return std::u32string(U"mebi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<mebi, wchar_t>
+{
+ static std::wstring symbol() {return std::wstring(L"Mi");}
+ static std::wstring prefix() {return std::wstring(L"mebi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<gibi, CharT> :
+ ratio_detail::ratio_string_static<gibi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<gibi, char>
+{
+ static std::string symbol() {return std::string("Gi");}
+ static std::string prefix() {return std::string("gibi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<gibi, char16_t>
+{
+ static std::u16string symbol() {return std::u16string(u"Gi");}
+ static std::u16string prefix() {return std::u16string(u"gibi");}
+};
+
+template <>
+struct ratio_string<gibi, char32_t>
+{
+ static std::u32string symbol() {return std::u32string(U"Gi");}
+ static std::u32string prefix() {return std::u32string(U"gibi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<gibi, wchar_t>
+{
+ static std::wstring symbol() {return std::wstring(L"Gi");}
+ static std::wstring prefix() {return std::wstring(L"gibi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<tebi, CharT> :
+ ratio_detail::ratio_string_static<tebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<tebi, char>
+{
+ static std::string symbol() {return std::string("Ti");}
+ static std::string prefix() {return std::string("tebi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<tebi, char16_t>
+{
+ static std::u16string symbol() {return std::u16string(u"Ti");}
+ static std::u16string prefix() {return std::u16string(u"tebi");}
+};
+
+template <>
+struct ratio_string<tebi, char32_t>
+{
+ static std::u32string symbol() {return std::u32string(U"Ti");}
+ static std::u32string prefix() {return std::u32string(U"tebi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<tebi, wchar_t>
+{
+ static std::wstring symbol() {return std::wstring(L"Ti");}
+ static std::wstring prefix() {return std::wstring(L"tebi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<pebi, CharT> :
+ ratio_detail::ratio_string_static<pebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<pebi, char>
+{
+ static std::string symbol() {return std::string("Pi");}
+ static std::string prefix() {return std::string("pebi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<pebi, char16_t>
+{
+ static std::u16string symbol() {return std::u16string(u"Pi");}
+ static std::u16string prefix() {return std::u16string(u"pebi");}
+};
+
+template <>
+struct ratio_string<pebi, char32_t>
+{
+ static std::u32string symbol() {return std::u32string(U"Pi");}
+ static std::u32string prefix() {return std::u32string(U"pebi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<pebi, wchar_t>
+{
+ static std::wstring symbol() {return std::wstring(L"Pi");}
+ static std::wstring prefix() {return std::wstring(L"pebi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<exbi, CharT> :
+ ratio_detail::ratio_string_static<exbi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<exbi, char>
+{
+ static std::string symbol() {return std::string("Ei");}
+ static std::string prefix() {return std::string("exbi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<exbi, char16_t>
+{
+ static std::u16string symbol() {return std::u16string(u"Ei");}
+ static std::u16string prefix() {return std::u16string(u"exbi");}
+};
+
+template <>
+struct ratio_string<exbi, char32_t>
+{
+ static std::u32string symbol() {return std::u32string(U"Ei");}
+ static std::u32string prefix() {return std::u32string(U"exbi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<exbi, wchar_t>
+{
+ static std::wstring symbol() {return std::wstring(L"Ei");}
+ static std::wstring prefix() {return std::wstring(L"exbi");}
+};
+#endif
+#endif
+#endif
+
}
#endif // BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0
diff --git a/3party/boost/boost/ratio/ratio_static_string.hpp b/3party/boost/boost/ratio/ratio_static_string.hpp
deleted file mode 100644
index 95bf308688..0000000000
--- a/3party/boost/boost/ratio/ratio_static_string.hpp
+++ /dev/null
@@ -1,631 +0,0 @@
-// ratio_io
-//
-// (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_RATIO_STATIC_STRING_HPP
-#define BOOST_RATIO_RATIO_STATIC_STRING_HPP
-
-/*
-
- ratio_static_string synopsis
-
-#include <ratio>
-#include <string>
-
-namespace boost
-{
-
-template <class Ratio, class CharT>
-struct ratio_static_string
-{
- typedef basic_str<CharT, ...> short_name;
- typedef basic_str<CharT, ...> long_name;
-};
-
-} // boost
-
-*/
-
-#include <boost/config.hpp>
-#include <boost/ratio/ratio.hpp>
-#include <boost/static_string/basic_str.hpp>
-//#include <sstream>
-
-
-#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 <class Ratio, class CharT>
-struct ratio_static_string;
-
-
-// atto
-
-template <>
-struct ratio_static_string<atto, char>
-{
- typedef static_string::str_1<'a'>::type short_name;
- typedef static_string::str_4<'a','t','t','o'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<atto, char16_t>
-{
- typedef static_string::u16str_1<u'a'>::type short_name;
- typedef static_string::u16str_4<u'a',u't',u't',u'o'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<atto, char32_t>
-{
- typedef static_string::u32str_1<U'a'>::type short_name;
- typedef static_string::u32str_4<U'a',U't',U't',U'o'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<atto, wchar_t>
-{
- typedef static_string::wstr_1<L'a'>::type short_name;
- typedef static_string::wstr_4<L'a',L't',L't',L'o'>::type long_name;
-};
-#endif
-
-// femto
-
-template <>
-struct ratio_static_string<femto, char>
-{
- typedef static_string::str_1<'f'>::type short_name;
- typedef static_string::str_5<'f','e','m','t','o'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<femto, char16_t>
-{
- typedef static_string::u16str_1<u'f'>::type short_name;
- typedef static_string::u16str_5<u'f',u'e',u'm',u't',u'o'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<femto, char32_t>
-{
- typedef static_string::u32str_1<U'f'>::type short_name;
- typedef static_string::u32str_5<U'f',U'e',U'm',U't',U'o'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<femto, wchar_t>
-{
- typedef static_string::wstr_1<L'f'>::type short_name;
- typedef static_string::wstr_5<L'f',L'e',L'm',L't',L'o'>::type long_name;
-};
-#endif
-
-// pico
-
-template <>
-struct ratio_static_string<pico, char>
-{
- typedef static_string::str_1<'p'>::type short_name;
- typedef static_string::str_4<'p','i','c','o'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<pico, char16_t>
-{
- typedef static_string::u16str_1<u'p'>::type short_name;
- typedef static_string::u16str_4<u'p',u'i',u'c',u'o'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<pico, char32_t>
-{
- typedef static_string::u32str_1<U'p'>::type short_name;
- typedef static_string::u32str_4<U'p',U'i',U'c',U'o'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<pico, wchar_t>
-{
- typedef static_string::wstr_1<L'p'>::type short_name;
- typedef static_string::wstr_4<L'p',L'i',L'c',L'o'>::type long_name;
-};
-#endif
-
-// nano
-
-template <>
-struct ratio_static_string<nano, char>
-{
- typedef static_string::str_1<'n'>::type short_name;
- typedef static_string::str_4<'n','a','n','o'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<nano, char16_t>
-{
- typedef static_string::u16str_1<u'n'>::type short_name;
- typedef static_string::u16str_4<u'n',u'a',u'n',u'o'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<nano, char32_t>
-{
- typedef static_string::u32str_1<U'n'>::type short_name;
- typedef static_string::u32str_4<U'n',U'a',U'n',U'o'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<nano, wchar_t>
-{
- typedef static_string::wstr_1<L'n'>::type short_name;
- typedef static_string::wstr_4<L'n',L'a',L'n',L'o'>::type long_name;
-};
-#endif
-
-// micro
-
-template <>
-struct ratio_static_string<micro, char>
-{
- typedef static_string::str_2<'\xC2','\xB5'>::type short_name;
- typedef static_string::str_5<'m','i','c','r','o'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<micro, char16_t>
-{
- typedef static_string::u16str_1<u'\xB5'>::type short_name;
- typedef static_string::u16str_5<u'm',u'i',u'c',u'r',u'o'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<micro, char32_t>
-{
- typedef static_string::u32str_1<U'\xB5'>::type short_name;
- typedef static_string::u32str_5<U'm',U'i',U'c',U'r',U'o'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<micro, wchar_t>
-{
- typedef static_string::wstr_1<L'\xB5'>::type short_name;
- typedef static_string::wstr_5<L'm',L'i',L'c',L'r',L'o'>::type long_name;
-};
-#endif
-
-// milli
-
-template <>
-struct ratio_static_string<milli, char>
-{
- typedef static_string::str_1<'m'>::type short_name;
- typedef static_string::str_5<'m','i','l','l','i'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<milli, char16_t>
-{
- typedef static_string::u16str_1<u'm'>::type short_name;
- typedef static_string::u16str_5<u'm',u'i',u'l',u'l',u'i'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<milli, char32_t>
-{
- typedef static_string::u32str_1<U'm'>::type short_name;
- typedef static_string::u32str_5<U'm',U'i',U'l',U'l',U'i'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<milli, wchar_t>
-{
- typedef static_string::wstr_1<L'm'>::type short_name;
- typedef static_string::wstr_5<L'm',L'i',L'l',L'l',L'i'>::type long_name;
-};
-#endif
-
-// centi
-
-template <>
-struct ratio_static_string<centi, char>
-{
- typedef static_string::str_1<'c'>::type short_name;
- typedef static_string::str_5<'c','e','n','t','i'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<centi, char16_t>
-{
- typedef static_string::u16str_1<u'c'>::type short_name;
- typedef static_string::u16str_5<u'c',u'e',u'n',u't',u'i'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<centi, char32_t>
-{
- typedef static_string::u32str_1<U'c'>::type short_name;
- typedef static_string::u32str_5<U'c',U'e',U'n',U't',U'i'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<centi, wchar_t>
-{
- typedef static_string::wstr_1<L'c'>::type short_name;
- typedef static_string::wstr_5<L'c',L'e',L'n',L't',L'i'>::type long_name;
-};
-#endif
-
-// deci
-
-template <>
-struct ratio_static_string<deci, char>
-{
- typedef static_string::str_1<'d'>::type short_name;
- typedef static_string::str_4<'d','e','c','i'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<deci, char16_t>
-{
- typedef static_string::u16str_1<u'd'>::type short_name;
- typedef static_string::u16str_4<u'd',u'e',u'c',u'i'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<deci, char32_t>
-{
- typedef static_string::u32str_1<U'd'>::type short_name;
- typedef static_string::u32str_4<U'd',U'e',U'c',U'i'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<deci, wchar_t>
-{
- typedef static_string::wstr_1<L'd'>::type short_name;
- typedef static_string::wstr_4<L'd',L'e',L'c',L'i'>::type long_name;
-};
-#endif
-
-// deca
-
-template <>
-struct ratio_static_string<deca, char>
-{
- typedef static_string::str_2<'d','a'>::type short_name;
- typedef static_string::str_4<'d','e','c','a'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<deca, char16_t>
-{
- typedef static_string::u16str_2<u'd',u'a'>::type short_name;
- typedef static_string::u16str_4<u'd',u'e',u'c',u'a'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<deca, char32_t>
-{
- typedef static_string::u32str_2<U'd',U'a'>::type short_name;
- typedef static_string::u32str_4<U'd',U'e',U'c',U'a'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<deca, wchar_t>
-{
- typedef static_string::wstr_2<L'd',L'a'>::type short_name;
- typedef static_string::wstr_4<L'd',L'e',L'c',L'a'>::type long_name;
-};
-#endif
-
-// hecto
-
-template <>
-struct ratio_static_string<hecto, char>
-{
- typedef static_string::str_1<'h'>::type short_name;
- typedef static_string::str_5<'h','e','c','t','o'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<hecto, char16_t>
-{
- typedef static_string::u16str_1<u'h'>::type short_name;
- typedef static_string::u16str_5<u'h',u'e',u'c',u't',u'o'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<hecto, char32_t>
-{
- typedef static_string::u32str_1<U'h'>::type short_name;
- typedef static_string::u32str_5<U'h',U'e',U'c',U't',U'o'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<hecto, wchar_t>
-{
- typedef static_string::wstr_1<L'h'>::type short_name;
- typedef static_string::wstr_5<L'h',L'e',L'c',L't',L'o'>::type long_name;
-};
-#endif
-
-// kilo
-
-template <>
-struct ratio_static_string<kilo, char>
-{
- typedef static_string::str_1<'k'>::type short_name;
- typedef static_string::str_4<'k','i','l','o'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<kilo, char16_t>
-{
- typedef static_string::u16str_1<u'k'>::type short_name;
- typedef static_string::u16str_4<u'k',u'i',u'l',u'o'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<kilo, char32_t>
-{
- typedef static_string::u32str_1<U'k'>::type short_name;
- typedef static_string::u32str_4<U'k',U'i',U'l',U'o'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<kilo, wchar_t>
-{
- typedef static_string::wstr_1<L'k'>::type short_name;
- typedef static_string::wstr_4<L'k',L'i',L'l',L'o'>::type long_name;
-};
-#endif
-
-// mega
-
-template <>
-struct ratio_static_string<mega, char>
-{
- typedef static_string::str_1<'M'>::type short_name;
- typedef static_string::str_4<'m','e','g','a'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<mega, char16_t>
-{
- typedef static_string::u16str_1<u'M'>::type short_name;
- typedef static_string::u16str_4<u'm',u'e',u'g',u'a'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<mega, char32_t>
-{
- typedef static_string::u32str_1<U'M'>::type short_name;
- typedef static_string::u32str_4<U'm',U'e',U'g',U'a'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<mega, wchar_t>
-{
- typedef static_string::wstr_1<L'M'>::type short_name;
- typedef static_string::wstr_4<L'm',L'e',L'g',L'a'>::type long_name;
-};
-#endif
-
-// giga
-
-template <>
-struct ratio_static_string<giga, char>
-{
- typedef static_string::str_1<'G'>::type short_name;
- typedef static_string::str_4<'g','i','g','a'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<giga, char16_t>
-{
- typedef static_string::u16str_1<u'G'>::type short_name;
- typedef static_string::u16str_4<u'g',u'i',u'g',u'a'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<giga, char32_t>
-{
- typedef static_string::u32str_1<U'G'>::type short_name;
- typedef static_string::u32str_4<U'g',U'i',U'g',U'a'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<giga, wchar_t>
-{
- typedef static_string::wstr_1<L'G'>::type short_name;
- typedef static_string::wstr_4<L'g',L'i',L'g',L'a'>::type long_name;
-};
-#endif
-
-// tera
-
-template <>
-struct ratio_static_string<tera, char>
-{
- typedef static_string::str_1<'T'>::type short_name;
- typedef static_string::str_4<'t','e','r','a'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<tera, char16_t>
-{
- typedef static_string::u16str_1<u'T'>::type short_name;
- typedef static_string::u16str_4<u't',u'e',u'r',u'a'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<tera, char32_t>
-{
- typedef static_string::u32str_1<U'T'>::type short_name;
- typedef static_string::u32str_4<U't',U'e',U'r',U'a'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<tera, wchar_t>
-{
- typedef static_string::wstr_1<L'T'>::type short_name;
- typedef static_string::wstr_4<L'r',L'e',L'r',L'a'>::type long_name;
-};
-#endif
-
-// peta
-
-template <>
-struct ratio_static_string<peta, char>
-{
- typedef static_string::str_1<'P'>::type short_name;
- typedef static_string::str_4<'p','e','t','a'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<peta, char16_t>
-{
- typedef static_string::u16str_1<u'P'>::type short_name;
- typedef static_string::u16str_4<u'p',u'e',u't',u'a'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<peta, char32_t>
-{
- typedef static_string::u32str_1<U'P'>::type short_name;
- typedef static_string::u32str_4<U'p',U'e',U't',U'a'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<peta, wchar_t>
-{
- typedef static_string::wstr_1<L'P'>::type short_name;
- typedef static_string::wstr_4<L'p',L'e',L't',L'a'>::type long_name;
-};
-#endif
-
-// exa
-
-template <>
-struct ratio_static_string<exa, char>
-{
- typedef static_string::str_1<'E'>::type short_name;
- typedef static_string::str_3<'e','x','a'>::type long_name;
-};
-
-#ifdef BOOST_RATIO_HAS_UNICODE_SUPPORT
-
-template <>
-struct ratio_static_string<exa, char16_t>
-{
- typedef static_string::u16str_1<u'E'>::type short_name;
- typedef static_string::u16str_3<u'e',u'x',u'a'>::type long_name;
-};
-
-template <>
-struct ratio_static_string<exa, char32_t>
-{
- typedef static_string::u32str_1<U'E'>::type short_name;
- typedef static_string::u32str_3<U'e',U'x',U'a'>::type long_name;
-};
-
-#endif
-
-#ifndef BOOST_NO_STD_WSTRING
-template <>
-struct ratio_static_string<exa, wchar_t>
-{
- typedef static_string::wstr_1<L'E'>::type short_name;
- typedef static_string::wstr_3<L'e',L'x',L'a'>::type long_name;
-};
-#endif
-
-}
-
-#endif // BOOST_RATIO_RATIO_STATIC_STRING_HPP
diff --git a/3party/boost/boost/rational.hpp b/3party/boost/boost/rational.hpp
index 468db79283..fd04b6bd75 100644
--- a/3party/boost/boost/rational.hpp
+++ b/3party/boost/boost/rational.hpp
@@ -28,9 +28,9 @@
// 31 Oct 06 Recoded both operator< to use round-to-negative-infinity
// divisions; the rational-value version now uses continued fraction
// expansion to avoid overflows, for bug #798357 (Daryle Walker)
-// 20 Oct 06 Fix operator bool_type for CW 8.3 (Joaquín M López Muñoz)
+// 20 Oct 06 Fix operator bool_type for CW 8.3 (Joaquín M López Muñoz)
// 18 Oct 06 Use EXPLICIT_TEMPLATE_TYPE helper macros from Boost.Config
-// (Joaquín M López Muñoz)
+// (Joaquín M López Muñoz)
// 27 Dec 05 Add Boolean conversion operator (Daryle Walker)
// 28 Sep 02 Use _left versions of operators from operators.hpp
// 05 Jul 01 Recode gcd(), avoiding std::swap (Helmut Zeisel)
@@ -389,9 +389,11 @@ bool rational<IntType>::operator< (const rational<IntType>& r) const
// Determine relative order by expanding each value to its simple continued
// fraction representation using the Euclidian GCD algorithm.
- struct { int_type n, d, q, r; } ts = { this->num, this->den, this->num /
- this->den, this->num % this->den }, rs = { r.num, r.den, r.num / r.den,
- r.num % r.den };
+ struct { int_type n, d, q, r; }
+ ts = { this->num, this->den, static_cast<int_type>(this->num / this->den),
+ static_cast<int_type>(this->num % this->den) },
+ rs = { r.num, r.den, static_cast<int_type>(r.num / r.den),
+ static_cast<int_type>(r.num % r.den) };
unsigned reverse = 0u;
// Normalize negative moduli by repeatedly adding the (positive) denominator
diff --git a/3party/boost/boost/ref.hpp b/3party/boost/boost/ref.hpp
index 6058d69831..17b56ec007 100644
--- a/3party/boost/boost/ref.hpp
+++ b/3party/boost/boost/ref.hpp
@@ -1,189 +1,17 @@
-#ifndef BOOST_REF_HPP_INCLUDED
-#define BOOST_REF_HPP_INCLUDED
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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)
+ */
-// MS compatible compilers support #pragma once
+#ifndef BOOST_REF_HPP
+#define BOOST_REF_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/config.hpp>
-#include <boost/utility/addressof.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/detail/workaround.hpp>
-
-//
-// ref.hpp - ref/cref, useful helper functions
-//
-// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
-// Copyright (C) 2001, 2002 Peter Dimov
-// Copyright (C) 2002 David Abrahams
-//
-// 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/bind/ref.html for documentation.
-//
-
-namespace boost
-{
-
-template<class T> class reference_wrapper
-{
-public:
- typedef T type;
+// The header file at this path is deprecated;
+// use boost/core/ref.hpp instead.
-#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 )
-
- explicit reference_wrapper(T& t): t_(&t) {}
-
-#else
-
- explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}
+#include <boost/core/ref.hpp>
#endif
-
- operator T& () const { return *t_; }
-
- T& get() const { return *t_; }
-
- T* get_pointer() const { return t_; }
-
-private:
-
- T* t_;
-};
-
-# if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )
-# define BOOST_REF_CONST
-# else
-# define BOOST_REF_CONST const
-# endif
-
-template<class T> inline reference_wrapper<T> BOOST_REF_CONST ref(T & t)
-{
- return reference_wrapper<T>(t);
-}
-
-template<class T> inline reference_wrapper<T const> BOOST_REF_CONST cref(T const & t)
-{
- return reference_wrapper<T const>(t);
-}
-
-# undef BOOST_REF_CONST
-
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-template<typename T>
-class is_reference_wrapper
- : public mpl::false_
-{
-};
-
-template<typename T>
-class unwrap_reference
-{
- public:
- typedef T type;
-};
-
-# define AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(X) \
-template<typename T> \
-class is_reference_wrapper< X > \
- : public mpl::true_ \
-{ \
-}; \
-\
-template<typename T> \
-class unwrap_reference< X > \
-{ \
- public: \
- typedef T type; \
-}; \
-/**/
-
-AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T>)
-#if !defined(BOOST_NO_CV_SPECIALIZATIONS)
-AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> const)
-AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> volatile)
-AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> const volatile)
-#endif
-
-# undef AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF
-
-# else // no partial specialization
-
-} // namespace boost
-
-#include <boost/type.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
- typedef char (&yes_reference_wrapper_t)[1];
- typedef char (&no_reference_wrapper_t)[2];
-
- no_reference_wrapper_t is_reference_wrapper_test(...);
-
- template<typename T>
- yes_reference_wrapper_t is_reference_wrapper_test(type< reference_wrapper<T> >);
-
- template<bool wrapped>
- struct reference_unwrapper
- {
- template <class T>
- struct apply
- {
- typedef T type;
- };
- };
-
- template<>
- struct reference_unwrapper<true>
- {
- template <class T>
- struct apply
- {
- typedef typename T::type type;
- };
- };
-}
-
-template<typename T>
-class is_reference_wrapper
-{
- public:
- BOOST_STATIC_CONSTANT(
- bool, value = (
- sizeof(detail::is_reference_wrapper_test(type<T>()))
- == sizeof(detail::yes_reference_wrapper_t)));
-
- typedef ::boost::mpl::bool_<value> type;
-};
-
-template <typename T>
-class unwrap_reference
- : public detail::reference_unwrapper<
- is_reference_wrapper<T>::value
- >::template apply<T>
-{};
-
-# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-template <class T> inline typename unwrap_reference<T>::type&
-unwrap_ref(T& t)
-{
- return t;
-}
-
-template<class T> inline T* get_pointer( reference_wrapper<T> const & r )
-{
- return r.get_pointer();
-}
-
-} // namespace boost
-
-#endif // #ifndef BOOST_REF_HPP_INCLUDED
diff --git a/3party/boost/boost/regex/config.hpp b/3party/boost/boost/regex/config.hpp
index e8cec5b7fa..7e6cc51969 100644
--- a/3party/boost/boost/regex/config.hpp
+++ b/3party/boost/boost/regex/config.hpp
@@ -224,7 +224,7 @@
*
****************************************************************************/
-#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1200) && defined(_MSC_EXTENSIONS)
+#if defined(BOOST_MSVC) && defined(_MSC_EXTENSIONS)
#if defined(_DEBUG) || defined(__MSVC_RUNTIME_CHECKS) || defined(_MANAGED) || defined(BOOST_REGEX_NO_FASTCALL)
# define BOOST_REGEX_CALL __cdecl
#else
diff --git a/3party/boost/boost/regex/icu.hpp b/3party/boost/boost/regex/icu.hpp
index a8c52814de..37fec2accc 100644
--- a/3party/boost/boost/regex/icu.hpp
+++ b/3party/boost/boost/regex/icu.hpp
@@ -887,9 +887,6 @@ inline OutputIterator u32regex_replace(OutputIterator out,
match_flag_type flags = match_default)
{
return re_detail::extract_output_base
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- <OutputIterator>
-#endif
(
re_detail::do_regex_replace(
re_detail::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
@@ -909,9 +906,6 @@ inline OutputIterator u32regex_replace(OutputIterator out,
match_flag_type flags = match_default)
{
return re_detail::extract_output_base
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- <OutputIterator>
-#endif
(
re_detail::do_regex_replace(
re_detail::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
@@ -931,9 +925,6 @@ inline OutputIterator u32regex_replace(OutputIterator out,
match_flag_type flags = match_default)
{
return re_detail::extract_output_base
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- <OutputIterator>
-#endif
(
re_detail::do_regex_replace(
re_detail::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
diff --git a/3party/boost/boost/regex/mfc.hpp b/3party/boost/boost/regex/mfc.hpp
index 02502f9504..8ecaf1f5ba 100644
--- a/3party/boost/boost/regex/mfc.hpp
+++ b/3party/boost/boost/regex/mfc.hpp
@@ -31,20 +31,16 @@ typedef match_results<TCHAR const*> tmatch;
typedef regex_iterator<TCHAR const*> tregex_iterator;
typedef regex_token_iterator<TCHAR const*> tregex_token_iterator;
-#if _MSC_VER >= 1310
+// Obsolete. Remove
#define SIMPLE_STRING_PARAM class B, bool b
#define SIMPLE_STRING_ARG_LIST B, b
-#else
-#define SIMPLE_STRING_PARAM class B
-#define SIMPLE_STRING_ARG_LIST B
-#endif
//
// define regex creation functions:
//
-template <SIMPLE_STRING_PARAM>
+template <class B, bool b>
inline basic_regex<B>
-make_regex(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, ::boost::regex_constants::syntax_option_type f = boost::regex_constants::normal)
+make_regex(const ATL::CSimpleStringT<B, b>& s, ::boost::regex_constants::syntax_option_type f = boost::regex_constants::normal)
{
basic_regex<B> result(s.GetString(), s.GetString() + s.GetLength(), f);
return result;
@@ -52,8 +48,8 @@ make_regex(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, ::boost::regex_
//
// regex_match overloads:
//
-template <SIMPLE_STRING_PARAM, class A, class T>
-inline bool regex_match(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+template <class B, bool b, class A, class T>
+inline bool regex_match(const ATL::CSimpleStringT<B, b>& s,
match_results<const B*, A>& what,
const basic_regex<B, T>& e,
boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
@@ -65,8 +61,8 @@ inline bool regex_match(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
f);
}
-template <SIMPLE_STRING_PARAM, class T>
-inline bool regex_match(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+template <class B, bool b, class T>
+inline bool regex_match(const ATL::CSimpleStringT<B, b>& s,
const basic_regex<B, T>& e,
boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
@@ -78,8 +74,8 @@ inline bool regex_match(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
//
// regex_search overloads:
//
-template <SIMPLE_STRING_PARAM, class A, class T>
-inline bool regex_search(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+template <class B, bool b, class A, class T>
+inline bool regex_search(const ATL::CSimpleStringT<B, b>& s,
match_results<const B*, A>& what,
const basic_regex<B, T>& e,
boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
@@ -91,8 +87,8 @@ inline bool regex_search(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
f);
}
-template <SIMPLE_STRING_PARAM, class T>
-inline bool regex_search(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+template <class B, bool b, class T>
+inline bool regex_search(const ATL::CSimpleStringT<B, b>& s,
const basic_regex<B, T>& e,
boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
@@ -104,45 +100,45 @@ inline bool regex_search(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
//
// regex_iterator creation:
//
-template <SIMPLE_STRING_PARAM>
+template <class B, bool b>
inline regex_iterator<B const*>
-make_regex_iterator(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, const basic_regex<B>& e, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+make_regex_iterator(const ATL::CSimpleStringT<B, b>& s, const basic_regex<B>& e, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
regex_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, f);
return result;
}
-template <SIMPLE_STRING_PARAM>
+template <class B, bool b>
inline regex_token_iterator<B const*>
- make_regex_token_iterator(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, const basic_regex<B>& e, int sub = 0, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+ make_regex_token_iterator(const ATL::CSimpleStringT<B, b>& s, const basic_regex<B>& e, int sub = 0, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
regex_token_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, sub, f);
return result;
}
-template <SIMPLE_STRING_PARAM>
+template <class B, bool b>
inline regex_token_iterator<B const*>
-make_regex_token_iterator(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, const basic_regex<B>& e, const std::vector<int>& subs, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+make_regex_token_iterator(const ATL::CSimpleStringT<B, b>& s, const basic_regex<B>& e, const std::vector<int>& subs, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
regex_token_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);
return result;
}
-template <SIMPLE_STRING_PARAM, std::size_t N>
+template <class B, bool b, std::size_t N>
inline regex_token_iterator<B const*>
-make_regex_token_iterator(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, const basic_regex<B>& e, const int (& subs)[N], ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+make_regex_token_iterator(const ATL::CSimpleStringT<B, b>& s, const basic_regex<B>& e, const int (& subs)[N], ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
regex_token_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);
return result;
}
template <class OutputIterator, class BidirectionalIterator, class traits,
- SIMPLE_STRING_PARAM>
+ class B, bool b>
OutputIterator regex_replace(OutputIterator out,
BidirectionalIterator first,
BidirectionalIterator last,
const basic_regex<B, traits>& e,
- const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& fmt,
+ const ATL::CSimpleStringT<B, b>& fmt,
match_flag_type flags = match_default)
{
return ::boost::regex_replace(out, first, last, e, fmt.GetString(), flags);
@@ -150,12 +146,12 @@ OutputIterator regex_replace(OutputIterator out,
namespace re_detail{
-template <SIMPLE_STRING_PARAM>
+template <class B, bool b>
class mfc_string_out_iterator
{
- ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>* out;
+ ATL::CSimpleStringT<B, b>* out;
public:
- mfc_string_out_iterator(ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s) : out(&s) {}
+ mfc_string_out_iterator(ATL::CSimpleStringT<B, b>& s) : out(&s) {}
mfc_string_out_iterator& operator++() { return *this; }
mfc_string_out_iterator& operator++(int) { return *this; }
mfc_string_out_iterator& operator*() { return *this; }
@@ -173,14 +169,14 @@ public:
}
-template <class traits, SIMPLE_STRING_PARAM>
-ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST> regex_replace(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+template <class traits, class B, bool b>
+ATL::CSimpleStringT<B, b> regex_replace(const ATL::CSimpleStringT<B, b>& s,
const basic_regex<B, traits>& e,
- const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& fmt,
+ const ATL::CSimpleStringT<B, b>& fmt,
match_flag_type flags = match_default)
{
- ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST> result(s.GetManager());
- re_detail::mfc_string_out_iterator<SIMPLE_STRING_ARG_LIST> i(result);
+ ATL::CSimpleStringT<B, b> result(s.GetManager());
+ re_detail::mfc_string_out_iterator<B, b> i(result);
regex_replace(i, s.GetString(), s.GetString() + s.GetLength(), e, fmt.GetString(), flags);
return result;
}
diff --git a/3party/boost/boost/regex/pending/static_mutex.hpp b/3party/boost/boost/regex/pending/static_mutex.hpp
index 5459ef8698..344926f6ab 100644
--- a/3party/boost/boost/regex/pending/static_mutex.hpp
+++ b/3party/boost/boost/regex/pending/static_mutex.hpp
@@ -125,12 +125,15 @@ private:
// Since this preprocessor path is almost never taken, we hide these header
// dependencies so that build tools don't find them.
//
-#define B1 <boost/thread/once.hpp>
-#define B2 <boost/thread/recursive_mutex.hpp>
-#include B1
-#include B2
-#undef B1
-#undef B2
+#define BOOST_REGEX_H1 <boost/thread/once.hpp>
+#define BOOST_REGEX_H2 <boost/thread/recursive_mutex.hpp>
+#define BOOST_REGEX_H3 <boost/thread/lock_types.hpp>
+#include BOOST_REGEX_H1
+#include BOOST_REGEX_H2
+#include BOOST_REGEX_H3
+#undef BOOST_REGEX_H1
+#undef BOOST_REGEX_H2
+#undef BOOST_REGEX_H3
namespace boost{
@@ -158,7 +161,7 @@ public:
void lock();
void unlock();
private:
- boost::recursive_mutex::scoped_lock* m_plock;
+ boost::unique_lock<boost::recursive_mutex>* m_plock;
bool m_have_lock;
};
diff --git a/3party/boost/boost/regex/pending/unicode_iterator.hpp b/3party/boost/boost/regex/pending/unicode_iterator.hpp
index 3a7b68fbe7..b84cfa0769 100644
--- a/3party/boost/boost/regex/pending/unicode_iterator.hpp
+++ b/3party/boost/boost/regex/pending/unicode_iterator.hpp
@@ -141,7 +141,7 @@ class u32_to_u16_iterator
{
typedef boost::iterator_facade<u32_to_u16_iterator<BaseIterator, U16Type>, U16Type, std::bidirectional_iterator_tag, const U16Type> base_type;
-#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32);
@@ -256,7 +256,7 @@ class u16_to_u32_iterator
// special values for pending iterator reads:
BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu);
-#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 16);
@@ -371,7 +371,7 @@ class u32_to_u8_iterator
{
typedef boost::iterator_facade<u32_to_u8_iterator<BaseIterator, U8Type>, U8Type, std::bidirectional_iterator_tag, const U8Type> base_type;
-#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32);
@@ -499,7 +499,7 @@ class u8_to_u32_iterator
// special values for pending iterator reads:
BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu);
-#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 8);
@@ -629,9 +629,15 @@ private:
0x1FFFFFu,
};
m_value &= masks[extra];
- // check the result:
+ // check the result is in range:
if(m_value > static_cast<U32Type>(0x10FFFFu))
invalid_sequence();
+ // The result must not be a surrogate:
+ if((m_value >= static_cast<U32Type>(0xD800)) && (m_value <= static_cast<U32Type>(0xDFFF)))
+ invalid_sequence();
+ // We should not have had an invalidly encoded UTF8 sequence:
+ if((extra > 0) && (m_value <= static_cast<U32Type>(masks[extra - 1])))
+ invalid_sequence();
}
BaseIterator m_position;
mutable U32Type m_value;
diff --git a/3party/boost/boost/regex/v4/basic_regex.hpp b/3party/boost/boost/regex/v4/basic_regex.hpp
index 0b63e3aa37..ae86152286 100644
--- a/3party/boost/boost/regex/v4/basic_regex.hpp
+++ b/3party/boost/boost/regex/v4/basic_regex.hpp
@@ -236,9 +236,7 @@ public:
}
std::pair<const_iterator, const_iterator> BOOST_REGEX_CALL subexpression(std::size_t n)const
{
- if(n == 0)
- boost::throw_exception(std::out_of_range("0 is not a valid subexpression index."));
- const std::pair<std::size_t, std::size_t>& pi = this->m_subs.at(n - 1);
+ const std::pair<std::size_t, std::size_t>& pi = this->m_subs.at(n);
std::pair<const_iterator, const_iterator> p(expression() + pi.first, expression() + pi.second);
return p;
}
@@ -266,7 +264,7 @@ public:
}
size_type BOOST_REGEX_CALL mark_count()const
{
- return this->m_mark_count;
+ return this->m_mark_count - 1;
}
const re_detail::re_syntax_base* get_first_state()const
{
diff --git a/3party/boost/boost/regex/v4/basic_regex_creator.hpp b/3party/boost/boost/regex/v4/basic_regex_creator.hpp
index c99d320de4..821fb8298c 100644
--- a/3party/boost/boost/regex/v4/basic_regex_creator.hpp
+++ b/3party/boost/boost/regex/v4/basic_regex_creator.hpp
@@ -47,9 +47,7 @@ struct digraph : public std::pair<charT, charT>
digraph(charT c1) : std::pair<charT, charT>(c1, 0){}
digraph(charT c1, charT c2) : std::pair<charT, charT>(c1, c2)
{}
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
digraph(const digraph<charT>& d) : std::pair<charT, charT>(d.first, d.second){}
-#endif
template <class Seq>
digraph(const Seq& s) : std::pair<charT, charT>()
{
@@ -346,7 +344,7 @@ re_literal* basic_regex_creator<charT, traits>::append_literal(charT c)
m_last_state = result = static_cast<re_literal*>(getaddress(off));
charT* characters = static_cast<charT*>(static_cast<void*>(result+1));
characters[result->length] = m_traits.translate(c, m_icase);
- ++(result->length);
+ result->length += 1;
}
return result;
}
@@ -433,20 +431,10 @@ re_syntax_base* basic_regex_creator<charT, traits>::append_set(
if(flags() & regex_constants::collate)
{
// we need to transform our range into sort keys:
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- string_type in(3, charT(0));
- in[0] = c1.first;
- in[1] = c1.second;
- s1 = this->m_traits.transform(in.c_str(), (in[1] ? in.c_str()+2 : in.c_str()+1));
- in[0] = c2.first;
- in[1] = c2.second;
- s2 = this->m_traits.transform(in.c_str(), (in[1] ? in.c_str()+2 : in.c_str()+1));
-#else
charT a1[3] = { c1.first, c1.second, charT(0), };
charT a2[3] = { c2.first, c2.second, charT(0), };
s1 = this->m_traits.transform(a1, (a1[1] ? a1+2 : a1+1));
s2 = this->m_traits.transform(a2, (a2[1] ? a2+2 : a2+1));
-#endif
if(s1.size() == 0)
s1 = string_type(1, charT(0));
if(s2.size() == 0)
@@ -491,15 +479,8 @@ re_syntax_base* basic_regex_creator<charT, traits>::append_set(
string_type s;
if(first->second)
{
-#if BOOST_WORKAROUND(__GNUC__, < 3)
- string_type in(3, charT(0));
- in[0] = first->first;
- in[1] = first->second;
- s = m_traits.transform_primary(in.c_str(), in.c_str()+2);
-#else
charT cs[3] = { first->first, first->second, charT(0), };
s = m_traits.transform_primary(cs, cs+2);
-#endif
}
else
s = m_traits.transform_primary(&first->first, &first->first+1);
diff --git a/3party/boost/boost/regex/v4/basic_regex_parser.hpp b/3party/boost/boost/regex/v4/basic_regex_parser.hpp
index 4b103f2257..27578988aa 100644
--- a/3party/boost/boost/regex/v4/basic_regex_parser.hpp
+++ b/3party/boost/boost/regex/v4/basic_regex_parser.hpp
@@ -971,7 +971,7 @@ bool basic_regex_parser<charT, traits>::parse_repeat(std::size_t low, std::size_
// the last state was a literal with more than one character, split it in two:
re_literal* lit = static_cast<re_literal*>(this->m_last_state);
charT c = (static_cast<charT*>(static_cast<void*>(lit+1)))[lit->length - 1];
- --(lit->length);
+ lit->length -= 1;
// now append new state:
lit = static_cast<re_literal*>(this->append_state(syntax_element_literal, sizeof(re_literal) + sizeof(charT)));
lit->length = 1;
diff --git a/3party/boost/boost/regex/v4/cpp_regex_traits.hpp b/3party/boost/boost/regex/v4/cpp_regex_traits.hpp
index d60942f09b..106ffcbfc2 100644
--- a/3party/boost/boost/regex/v4/cpp_regex_traits.hpp
+++ b/3party/boost/boost/regex/v4/cpp_regex_traits.hpp
@@ -21,6 +21,7 @@
#include <boost/config.hpp>
#include <boost/integer.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
#ifndef BOOST_NO_STD_LOCALE
@@ -507,8 +508,18 @@ typename cpp_regex_traits_implementation<charT>::string_type
// we adhere to gcc's (buggy) preconditions...
//
BOOST_ASSERT(*p2 == 0);
-
string_type result;
+#if defined(_CPPLIB_VER)
+ //
+ // A bug in VC11 and 12 causes the program to hang if we pass a null-string
+ // to std::collate::transform, but only for certain locales :-(
+ // Probably effects Intel and Clang or any compiler using the VC std library (Dinkumware).
+ //
+ if(*p1 == 0)
+ {
+ return string_type(1, charT(0));
+ }
+#endif
//
// swallowing all exceptions here is a bad idea
// however at least one std lib will always throw
@@ -582,7 +593,18 @@ typename cpp_regex_traits_implementation<charT>::string_type
// however at least one std lib will always throw
// std::bad_alloc for certain arguments...
//
- string_type result;
+ string_type result, result2;
+#if defined(_CPPLIB_VER)
+ //
+ // A bug in VC11 and 12 causes the program to hang if we pass a null-string
+ // to std::collate::transform, but only for certain locales :-(
+ // Probably effects Intel and Clang or any compiler using the VC std library (Dinkumware).
+ //
+ if(*p1 == 0)
+ {
+ return result;
+ }
+#endif
#ifndef BOOST_NO_EXCEPTIONS
try{
#endif
@@ -601,14 +623,36 @@ typename cpp_regex_traits_implementation<charT>::string_type
while(result.size() && (charT(0) == *result.rbegin()))
result.erase(result.size() - 1);
#endif
- BOOST_ASSERT(std::find(result.begin(), result.end(), charT(0)) == result.end());
+ //
+ // We may have NULL's used as separators between sections of the collate string,
+ // an example would be Boost.Locale. We have no way to detect this case via
+ // #defines since this can be used with any compiler/platform combination.
+ // Unfortunately our state machine (which was devised when all implementations
+ // used underlying C language API's) can't cope with that case. One workaround
+ // is to replace each character with 2, fortunately this code isn't used that
+ // much as this is now slower than before :-(
+ //
+ typedef typename make_unsigned<charT>::type uchar_type;
+ result2.reserve(result.size() * 2 + 2);
+ for(unsigned i = 0; i < result.size(); ++i)
+ {
+ if(static_cast<uchar_type>(result[i]) == (std::numeric_limits<uchar_type>::max)())
+ {
+ result2.append(1, charT((std::numeric_limits<uchar_type>::max)())).append(1, charT('b'));
+ }
+ else
+ {
+ result2.append(1, static_cast<charT>(1 + static_cast<uchar_type>(result[i]))).append(1, charT('b') - 1);
+ }
+ }
+ BOOST_ASSERT(std::find(result2.begin(), result2.end(), charT(0)) == result2.end());
#ifndef BOOST_NO_EXCEPTIONS
}
catch(...)
{
}
#endif
- return result;
+ return result2;
}
@@ -624,7 +668,6 @@ typename cpp_regex_traits_implementation<charT>::string_type
return pos->second;
}
#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
- && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
&& !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
std::string name(p1, p2);
#else
@@ -635,7 +678,6 @@ typename cpp_regex_traits_implementation<charT>::string_type
#endif
name = lookup_default_collate_name(name);
#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
- && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
&& !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
if(name.size())
return string_type(name.begin(), name.end());
@@ -857,7 +899,7 @@ bool cpp_regex_traits_implementation<charT>::isctype(const charT c, char_class_t
template <class charT>
-inline boost::shared_ptr<const cpp_regex_traits_implementation<charT> > create_cpp_regex_traits(const std::locale& l BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(charT))
+inline boost::shared_ptr<const cpp_regex_traits_implementation<charT> > create_cpp_regex_traits(const std::locale& l)
{
cpp_regex_traits_base<charT> key(l);
return ::boost::object_cache<cpp_regex_traits_base<charT>, cpp_regex_traits_implementation<charT> >::get(key, 5);
diff --git a/3party/boost/boost/regex/v4/instances.hpp b/3party/boost/boost/regex/v4/instances.hpp
index 6807b2f06c..6fa811d232 100644
--- a/3party/boost/boost/regex/v4/instances.hpp
+++ b/3party/boost/boost/regex/v4/instances.hpp
@@ -92,9 +92,7 @@ template class BOOST_REGEX_DECL ::boost::re_detail::perl_matcher<BOOST_REGEX_CHA
template class BOOST_REGEX_TEMPLATE_DECL basic_regex< BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >;
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
template class BOOST_REGEX_TEMPLATE_DECL match_results< const BOOST_REGEX_CHAR_T* >;
-#endif
#ifndef BOOST_NO_STD_ALLOCATOR
template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >;
#endif
@@ -102,9 +100,7 @@ template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher<BOOST_
&& !(defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION <= 800))\
&& !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))\
&& !defined(BOOST_REGEX_ICU_INSTANCES)
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
template class BOOST_REGEX_TEMPLATE_DECL match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >;
-#endif
#ifndef BOOST_NO_STD_ALLOCATOR
template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >;
#endif
diff --git a/3party/boost/boost/regex/v4/iterator_traits.hpp b/3party/boost/boost/regex/v4/iterator_traits.hpp
index f7afacb17b..53e1376041 100644
--- a/3party/boost/boost/regex/v4/iterator_traits.hpp
+++ b/3party/boost/boost/regex/v4/iterator_traits.hpp
@@ -33,7 +33,7 @@
namespace boost{
namespace re_detail{
-#if defined(BOOST_NO_STD_ITERATOR_TRAITS) || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#if defined(BOOST_NO_STD_ITERATOR_TRAITS)
template <class T>
struct regex_iterator_traits
diff --git a/3party/boost/boost/regex/v4/match_flags.hpp b/3party/boost/boost/regex/v4/match_flags.hpp
index 26bde9a51b..e21de6cf6a 100644
--- a/3party/boost/boost/regex/v4/match_flags.hpp
+++ b/3party/boost/boost/regex/v4/match_flags.hpp
@@ -71,7 +71,7 @@ typedef enum _match_flags
} match_flags;
-#if (defined(_MSC_VER) && (_MSC_VER < 1300)) || defined(__BORLANDC__)
+#if defined(__BORLANDC__)
typedef unsigned long match_flag_type;
#else
typedef match_flags match_flag_type;
diff --git a/3party/boost/boost/regex/v4/perl_matcher.hpp b/3party/boost/boost/regex/v4/perl_matcher.hpp
index ddaafbd7e4..0a37a84a6b 100644
--- a/3party/boost/boost/regex/v4/perl_matcher.hpp
+++ b/3party/boost/boost/regex/v4/perl_matcher.hpp
@@ -86,7 +86,6 @@ inline bool can_start(unsigned int c, const unsigned char* map, unsigned char ma
// which succeeds when it should not.
//
#ifndef _RWSTD_VER
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
template <class C, class T, class A>
inline int string_compare(const std::basic_string<C,T,A>& s, const C* p)
{
@@ -97,9 +96,7 @@ inline int string_compare(const std::basic_string<C,T,A>& s, const C* p)
}
return s.compare(p);
}
-#endif
#else
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
template <class C, class T, class A>
inline int string_compare(const std::basic_string<C,T,A>& s, const C* p)
{
@@ -110,7 +107,6 @@ inline int string_compare(const std::basic_string<C,T,A>& s, const C* p)
}
return s.compare(p);
}
-#endif
inline int string_compare(const std::string& s, const char* p)
{ return std::strcmp(s.c_str(), p); }
# ifndef BOOST_NO_WREGEX
diff --git a/3party/boost/boost/regex/v4/perl_matcher_common.hpp b/3party/boost/boost/regex/v4/perl_matcher_common.hpp
index 9a80e5038b..480d8f145d 100644
--- a/3party/boost/boost/regex/v4/perl_matcher_common.hpp
+++ b/3party/boost/boost/regex/v4/perl_matcher_common.hpp
@@ -200,7 +200,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_imp()
search_base = base;
state_count = 0;
m_match_flags |= regex_constants::match_all;
- m_presult->set_size((m_match_flags & match_nosubs) ? 1 : re.mark_count(), search_base, last);
+ m_presult->set_size((m_match_flags & match_nosubs) ? 1 : 1 + re.mark_count(), search_base, last);
m_presult->set_base(base);
m_presult->set_named_subs(this->re.get_named_subs());
if(m_match_flags & match_posix)
@@ -262,7 +262,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::find_imp()
// reset our state machine:
search_base = position = base;
pstate = re.get_first_state();
- m_presult->set_size((m_match_flags & match_nosubs) ? 1 : re.mark_count(), base, last);
+ m_presult->set_size((m_match_flags & match_nosubs) ? 1 : 1 + re.mark_count(), base, last);
m_presult->set_base(base);
m_presult->set_named_subs(this->re.get_named_subs());
m_match_flags |= regex_constants::match_init;
@@ -281,13 +281,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::find_imp()
++position;
}
// reset $` start:
- m_presult->set_size((m_match_flags & match_nosubs) ? 1 : re.mark_count(), search_base, last);
+ m_presult->set_size((m_match_flags & match_nosubs) ? 1 : 1 + re.mark_count(), search_base, last);
//if((base != search_base) && (base == backstop))
// m_match_flags |= match_prev_avail;
}
if(m_match_flags & match_posix)
{
- m_result.set_size(re.mark_count(), base, last);
+ m_result.set_size(1 + re.mark_count(), base, last);
m_result.set_base(base);
}
@@ -458,11 +458,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary()
if(position != last)
{
// prev and this character must be opposites:
- #if defined(BOOST_REGEX_USE_C_LOCALE) && defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ < 95)
- b = traits::isctype(*position, m_word_mask);
- #else
b = traits_inst.isctype(*position, m_word_mask);
- #endif
}
else
{
diff --git a/3party/boost/boost/regex/v4/perl_matcher_non_recursive.hpp b/3party/boost/boost/regex/v4/perl_matcher_non_recursive.hpp
index f5eb3feb42..5c1f7a98b0 100644
--- a/3party/boost/boost/regex/v4/perl_matcher_non_recursive.hpp
+++ b/3party/boost/boost/regex/v4/perl_matcher_non_recursive.hpp
@@ -703,7 +703,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat()
if(::boost::is_random_access_iterator<BidiIterator>::value)
{
BidiIterator end = position;
- std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ // Move end forward by "desired", preferably without using distance or advance if we can
+ // as these can be slow for some iterator types.
+ std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+ if(desired >= len)
+ end = last;
+ else
+ std::advance(end, desired);
BidiIterator origin(position);
while((position != end) && (traits_inst.translate(*position, icase) == what))
{
@@ -771,7 +777,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat()
if(::boost::is_random_access_iterator<BidiIterator>::value)
{
BidiIterator end = position;
- std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ // Move end forward by "desired", preferably without using distance or advance if we can
+ // as these can be slow for some iterator types.
+ std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+ if(desired >= len)
+ end = last;
+ else
+ std::advance(end, desired);
BidiIterator origin(position);
while((position != end) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
{
@@ -840,7 +852,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat()
if(::boost::is_random_access_iterator<BidiIterator>::value)
{
BidiIterator end = position;
- std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ // Move end forward by "desired", preferably without using distance or advance if we can
+ // as these can be slow for some iterator types.
+ std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+ if(desired >= len)
+ end = last;
+ else
+ std::advance(end, desired);
BidiIterator origin(position);
while((position != end) && (position != re_is_set_member(position, last, set, re.get_data(), icase)))
{
diff --git a/3party/boost/boost/regex/v4/perl_matcher_recursive.hpp b/3party/boost/boost/regex/v4/perl_matcher_recursive.hpp
index 07a1c20f88..8e0e182b56 100644
--- a/3party/boost/boost/regex/v4/perl_matcher_recursive.hpp
+++ b/3party/boost/boost/regex/v4/perl_matcher_recursive.hpp
@@ -641,7 +641,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat()
if(::boost::is_random_access_iterator<BidiIterator>::value)
{
BidiIterator end = position;
- std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ // Move end forward by "desired", preferably without using distance or advance if we can
+ // as these can be slow for some iterator types.
+ std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+ if(desired >= len)
+ end = last;
+ else
+ std::advance(end, desired);
BidiIterator origin(position);
while((position != end) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
{
@@ -731,7 +737,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat()
if(::boost::is_random_access_iterator<BidiIterator>::value)
{
BidiIterator end = position;
- std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ // Move end forward by "desired", preferably without using distance or advance if we can
+ // as these can be slow for some iterator types.
+ std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+ if(desired >= len)
+ end = last;
+ else
+ std::advance(end, desired);
BidiIterator origin(position);
while((position != end) && (position != re_is_set_member(position, last, set, re.get_data(), icase)))
{
diff --git a/3party/boost/boost/regex/v4/regex_raw_buffer.hpp b/3party/boost/boost/regex/v4/regex_raw_buffer.hpp
index 52d45a250b..c7792e3d2e 100644
--- a/3party/boost/boost/regex/v4/regex_raw_buffer.hpp
+++ b/3party/boost/boost/regex/v4/regex_raw_buffer.hpp
@@ -129,7 +129,7 @@ public:
{
if(size_type(last - end) < n)
resize(n + (end - start));
- register pointer result = end;
+ pointer result = end;
end += n;
return result;
}
diff --git a/3party/boost/boost/regex/v4/regex_split.hpp b/3party/boost/boost/regex/v4/regex_split.hpp
index 534fb58e9a..c12d7baa24 100644
--- a/3party/boost/boost/regex/v4/regex_split.hpp
+++ b/3party/boost/boost/regex/v4/regex_split.hpp
@@ -119,7 +119,7 @@ std::size_t regex_split(OutputIterator out,
// if there is still input left, do a final push as long as max_split
// is not exhausted, and we're not splitting sub-expressions rather
// than whitespace:
- if(max_split && (last != s.end()) && (e.mark_count() == 1))
+ if(max_split && (last != s.end()) && (e.mark_count() == 0))
{
*out = std::basic_string<charT, Traits1, Alloc1>((ci_t)last, (ci_t)s.end());
++out;
diff --git a/3party/boost/boost/regex/v4/regex_token_iterator.hpp b/3party/boost/boost/regex/v4/regex_token_iterator.hpp
index 4e8bc36fef..dbb0803742 100644
--- a/3party/boost/boost/regex/v4/regex_token_iterator.hpp
+++ b/3party/boost/boost/regex/v4/regex_token_iterator.hpp
@@ -22,7 +22,6 @@
#include <boost/shared_ptr.hpp>
#include <boost/detail/workaround.hpp>
#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
- || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
|| BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
//
// Borland C++ Builder 6, and Visual C++ 6,
@@ -45,10 +44,8 @@ namespace boost{
#endif
#ifdef BOOST_MSVC
#pragma warning(pop)
-#endif
-#if BOOST_WORKAROUND(BOOST_MSVC, > 1300)
-# pragma warning(push)
-# pragma warning(disable:4700)
+#pragma warning(push)
+#pragma warning(disable:4700)
#endif
template <class BidirectionalIterator,
@@ -75,7 +72,6 @@ public:
: end(last), re(*p), flags(f), subs(v){}
#if !BOOST_WORKAROUND(__HP_aCC, < 60700)
#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
- || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
|| BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
|| BOOST_WORKAROUND(__HP_aCC, < 60700)
template <class T>
@@ -209,7 +205,6 @@ public:
}
#if !BOOST_WORKAROUND(__HP_aCC, < 60700)
#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
- || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
|| BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
|| BOOST_WORKAROUND(__HP_aCC, < 60700)
template <class T>
@@ -296,7 +291,6 @@ inline regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_ite
{
return regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m);
}
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
template <class charT, class traits, std::size_t N>
inline regex_token_iterator<const charT*, charT, traits> make_regex_token_iterator(const charT* p, const basic_regex<charT, traits>& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
{
@@ -307,7 +301,6 @@ inline regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_ite
{
return regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m);
}
-#endif
template <class charT, class traits>
inline regex_token_iterator<const charT*, charT, traits> make_regex_token_iterator(const charT* p, const basic_regex<charT, traits>& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
{
@@ -319,10 +312,8 @@ inline regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_ite
return regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m);
}
-#if BOOST_WORKAROUND(BOOST_MSVC, > 1300)
-# pragma warning(pop)
-#endif
#ifdef BOOST_MSVC
+#pragma warning(pop)
#pragma warning(push)
#pragma warning(disable: 4103)
#endif
diff --git a/3party/boost/boost/regex/v4/regex_traits.hpp b/3party/boost/boost/regex/v4/regex_traits.hpp
index f5f0402cab..8b1cb6ffe1 100644
--- a/3party/boost/boost/regex/v4/regex_traits.hpp
+++ b/3party/boost/boost/regex/v4/regex_traits.hpp
@@ -83,7 +83,7 @@ struct regex_traits : public implementationT
// required "standard" ones:
//
namespace re_detail{
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__HP_aCC, < 60000)
+#if !BOOST_WORKAROUND(__HP_aCC, < 60000)
BOOST_MPL_HAS_XXX_TRAIT_DEF(boost_extensions_tag)
#else
template<class T>
@@ -136,7 +136,7 @@ struct compute_wrapper_base
{
typedef BaseT type;
};
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__HP_aCC, < 60000)
+#if !BOOST_WORKAROUND(__HP_aCC, < 60000)
template <class BaseT>
struct compute_wrapper_base<BaseT, false>
{
diff --git a/3party/boost/boost/regex/v4/sub_match.hpp b/3party/boost/boost/regex/v4/sub_match.hpp
index 34a868404d..7ce8d5397e 100644
--- a/3party/boost/boost/regex/v4/sub_match.hpp
+++ b/3party/boost/boost/regex/v4/sub_match.hpp
@@ -36,7 +36,7 @@ template <class BidiIterator>
struct sub_match : public std::pair<BidiIterator, BidiIterator>
{
typedef typename re_detail::regex_iterator_traits<BidiIterator>::value_type value_type;
-#if defined(BOOST_NO_STD_ITERATOR_TRAITS) || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#if defined(BOOST_NO_STD_ITERATOR_TRAITS)
typedef std::ptrdiff_t difference_type;
#else
typedef typename re_detail::regex_iterator_traits<BidiIterator>::difference_type difference_type;
@@ -50,7 +50,6 @@ struct sub_match : public std::pair<BidiIterator, BidiIterator>
sub_match() : std::pair<BidiIterator, BidiIterator>(), matched(false) {}
sub_match(BidiIterator i) : std::pair<BidiIterator, BidiIterator>(i, i), matched(false) {}
#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
- && !BOOST_WORKAROUND(BOOST_MSVC, < 1310)\
&& !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)\
&& !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
template <class T, class A>
diff --git a/3party/boost/boost/regex/v4/u32regex_token_iterator.hpp b/3party/boost/boost/regex/v4/u32regex_token_iterator.hpp
index de1677164b..e8649f323d 100644
--- a/3party/boost/boost/regex/v4/u32regex_token_iterator.hpp
+++ b/3party/boost/boost/regex/v4/u32regex_token_iterator.hpp
@@ -20,7 +20,6 @@
#define BOOST_REGEX_V4_U32REGEX_TOKEN_ITERATOR_HPP
#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
- || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
|| BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
//
// Borland C++ Builder 6, and Visual C++ 6,
@@ -37,7 +36,7 @@ namespace boost{
#ifdef BOOST_HAS_ABI_HEADERS
# include BOOST_ABI_PREFIX
#endif
-#if BOOST_WORKAROUND(BOOST_MSVC, > 1300)
+#ifdef BOOST_MSVC
# pragma warning(push)
# pragma warning(disable:4700)
#endif
@@ -62,10 +61,7 @@ public:
: end(last), re(*p), flags(f){ subs.push_back(sub); }
u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const std::vector<int>& v, match_flag_type f)
: end(last), re(*p), flags(f), subs(v){}
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- // can't reliably get this to work....
-#elif (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
- || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
|| BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
|| BOOST_WORKAROUND(__HP_aCC, < 60700)
template <class T>
@@ -195,10 +191,7 @@ public:
if(!pdata->init(a))
pdata.reset();
}
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- // can't reliably get this to work....
-#elif (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
- || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
|| BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
|| BOOST_WORKAROUND(__HP_aCC, < 60700)
template <class T>
@@ -299,7 +292,6 @@ inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const
return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
}
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
// construction from a reference to an array:
template <std::size_t N>
inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
@@ -331,7 +323,6 @@ inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const
{
return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
}
-#endif // BOOST_MSVC < 1300
// construction from a vector of sub_match state_id's:
inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
@@ -361,7 +352,7 @@ inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const
return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
}
-#if BOOST_WORKAROUND(BOOST_MSVC, > 1300)
+#ifdef BOOST_MSVC
# pragma warning(pop)
#endif
#ifdef BOOST_HAS_ABI_HEADERS
diff --git a/3party/boost/boost/regex/v4/w32_regex_traits.hpp b/3party/boost/boost/regex/v4/w32_regex_traits.hpp
index d55620726d..ef934b75cc 100644
--- a/3party/boost/boost/regex/v4/w32_regex_traits.hpp
+++ b/3party/boost/boost/regex/v4/w32_regex_traits.hpp
@@ -399,7 +399,6 @@ typename w32_regex_traits_implementation<charT>::string_type
return pos->second;
}
#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
- && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
&& !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
std::string name(p1, p2);
#else
@@ -410,7 +409,6 @@ typename w32_regex_traits_implementation<charT>::string_type
#endif
name = lookup_default_collate_name(name);
#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
- && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
&& !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
if(name.size())
return string_type(name.begin(), name.end());
@@ -552,7 +550,7 @@ typename w32_regex_traits_implementation<charT>::char_class_type
template <class charT>
-boost::shared_ptr<const w32_regex_traits_implementation<charT> > create_w32_regex_traits(::boost::re_detail::lcid_type l BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(charT))
+boost::shared_ptr<const w32_regex_traits_implementation<charT> > create_w32_regex_traits(::boost::re_detail::lcid_type l)
{
// TODO: create a cache for previously constructed objects.
return boost::object_cache< ::boost::re_detail::lcid_type, w32_regex_traits_implementation<charT> >::get(l, 5);
diff --git a/3party/boost/boost/serialization/access.hpp b/3party/boost/boost/serialization/access.hpp
index 40256d6cd3..ec88ff5aca 100644
--- a/3party/boost/boost/serialization/access.hpp
+++ b/3party/boost/boost/serialization/access.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_ACCESS_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/array.hpp b/3party/boost/boost/serialization/array.hpp
index 3391a96f51..35c640ce45 100644
--- a/3party/boost/boost/serialization/array.hpp
+++ b/3party/boost/boost/serialization/array.hpp
@@ -6,10 +6,14 @@
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+#include <boost/config.hpp> // msvc 6.0 needs this for warning suppression
+
#include <iostream>
#include <cstddef> // std::size_t
-#include <cstddef>
-#include <boost/config.hpp> // msvc 6.0 needs this for warning suppression
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+#include <array>
+#endif
+
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::size_t;
@@ -97,9 +101,9 @@ public:
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
- typedef BOOST_DEDUCED_TYPENAME
+ typedef typename
boost::serialization::use_array_optimization<Archive>::template apply<
- BOOST_DEDUCED_TYPENAME remove_const< T >::type
+ typename remove_const< T >::type
>::type use_optimized;
serialize_optimized(ar,version,use_optimized());
}
@@ -128,12 +132,26 @@ array< T > make_array( T* t, std::size_t s){
return array< T >(t, s);
}
+// implement serialization for boost::array
template <class Archive, class T, std::size_t N>
void serialize(Archive& ar, boost::array<T,N>& a, const unsigned int /* version */)
{
- ar & boost::serialization::make_nvp("elems",a.elems);
+ ar & boost::serialization::make_nvp("elems", a.elems);
}
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+// implement serialization for std::array
+template <class Archive, class T, std::size_t N>
+void serialize(Archive& ar, std::array<T,N>& a, const unsigned int /* version */)
+{
+ ar & boost::serialization::make_nvp(
+ "elems",
+ *static_cast<T (*)[N]>(static_cast<void *>(a.data()))
+ );
+
+}
+#endif
+
} } // end namespace boost::serialization
#ifdef __BORLANDC__
@@ -145,7 +163,7 @@ namespace boost { namespace serialization { \
template <> struct use_array_optimization<Archive> { \
template <class ValueType> \
struct apply : boost::mpl::apply1<Archive::use_array_optimization \
- , BOOST_DEDUCED_TYPENAME boost::remove_const<ValueType>::type \
+ , typename boost::remove_const<ValueType>::type \
>::type {}; \
}; }}
#endif // __BORLANDC__
diff --git a/3party/boost/boost/serialization/assume_abstract.hpp b/3party/boost/boost/serialization/assume_abstract.hpp
index 4a8123a31d..a5cb2f55a4 100644
--- a/3party/boost/boost/serialization/assume_abstract.hpp
+++ b/3party/boost/boost/serialization/assume_abstract.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_ASSUME_ABSTRACT_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/base_object.hpp b/3party/boost/boost/serialization/base_object.hpp
index b840d25e99..562dbd5061 100644
--- a/3party/boost/boost/serialization/base_object.hpp
+++ b/3party/boost/boost/serialization/base_object.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_BASE_OBJECT_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -48,7 +48,7 @@ namespace detail
template<class B, class D>
struct base_cast
{
- typedef BOOST_DEDUCED_TYPENAME
+ typedef typename
mpl::if_<
is_const<D>,
const B,
@@ -74,7 +74,7 @@ namespace detail
}
};
static void const * invoke(){
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typedef typename mpl::eval_if<
is_polymorphic<Base>,
mpl::identity<polymorphic>,
mpl::identity<non_polymorphic>
@@ -95,12 +95,12 @@ base_object(const Derived & d)
}
#else
template<class Base, class Derived>
-BOOST_DEDUCED_TYPENAME detail::base_cast<Base, Derived>::type &
+typename detail::base_cast<Base, Derived>::type &
base_object(Derived &d)
{
BOOST_STATIC_ASSERT(( is_base_and_derived<Base,Derived>::value));
BOOST_STATIC_ASSERT(! is_pointer<Derived>::value);
- typedef BOOST_DEDUCED_TYPENAME detail::base_cast<Base, Derived>::type type;
+ typedef typename detail::base_cast<Base, Derived>::type type;
detail::base_register<type, Derived>::invoke();
return access::cast_reference<type, Derived>(d);
}
diff --git a/3party/boost/boost/serialization/binary_object.hpp b/3party/boost/boost/serialization/binary_object.hpp
index cbc19f46f8..7e2307680e 100644
--- a/3party/boost/boost/serialization/binary_object.hpp
+++ b/3party/boost/boost/serialization/binary_object.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_BINARY_OBJECT_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/bitset.hpp b/3party/boost/boost/serialization/bitset.hpp
index 0e109ce29c..78f9bd7433 100644
--- a/3party/boost/boost/serialization/bitset.hpp
+++ b/3party/boost/boost/serialization/bitset.hpp
@@ -11,7 +11,7 @@
#define BOOST_SERIALIZATION_BITSET_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/collection_traits.hpp b/3party/boost/boost/serialization/collection_traits.hpp
index 60453c7939..b3fe843426 100644
--- a/3party/boost/boost/serialization/collection_traits.hpp
+++ b/3party/boost/boost/serialization/collection_traits.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_COLLECTION_TRAITS_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/collections_load_imp.hpp b/3party/boost/boost/serialization/collections_load_imp.hpp
index 11b00cdb8b..2291e74226 100644
--- a/3party/boost/boost/serialization/collections_load_imp.hpp
+++ b/3party/boost/boost/serialization/collections_load_imp.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_COLLECTIONS_LOAD_IMP_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -51,14 +51,14 @@ namespace stl {
template<class Archive, class Container>
struct archive_input_seq
{
- inline BOOST_DEDUCED_TYPENAME Container::iterator
+ inline typename Container::iterator
operator()(
Archive &ar,
Container &s,
const unsigned int v,
- BOOST_DEDUCED_TYPENAME Container::iterator hint
+ typename Container::iterator hint
){
- typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ typedef typename Container::value_type type;
detail::stack_construct<Archive, type> t(ar, v);
// borland fails silently w/o full namespace
ar >> boost::serialization::make_nvp("item", t.reference());
@@ -72,18 +72,18 @@ struct archive_input_seq
template<class Archive, class Container>
struct archive_input_map
{
- inline BOOST_DEDUCED_TYPENAME Container::iterator
+ inline typename Container::iterator
operator()(
Archive &ar,
Container &s,
const unsigned int v,
- BOOST_DEDUCED_TYPENAME Container::iterator hint
+ typename Container::iterator hint
){
- typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ typedef typename Container::value_type type;
detail::stack_construct<Archive, type> t(ar, v);
// borland fails silently w/o full namespace
ar >> boost::serialization::make_nvp("item", t.reference());
- BOOST_DEDUCED_TYPENAME Container::iterator result =
+ typename Container::iterator result =
s.insert(hint, t.reference());
// note: the following presumes that the map::value_type was NOT tracked
// in the archive. This is the usual case, but here there is no way
@@ -100,18 +100,18 @@ struct archive_input_map
template<class Archive, class Container>
struct archive_input_set
{
- inline BOOST_DEDUCED_TYPENAME Container::iterator
+ inline typename Container::iterator
operator()(
Archive &ar,
Container &s,
const unsigned int v,
- BOOST_DEDUCED_TYPENAME Container::iterator hint
+ typename Container::iterator hint
){
- typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ typedef typename Container::value_type type;
detail::stack_construct<Archive, type> t(ar, v);
// borland fails silently w/o full namespace
ar >> boost::serialization::make_nvp("item", t.reference());
- BOOST_DEDUCED_TYPENAME Container::iterator result =
+ typename Container::iterator result =
s.insert(hint, t.reference());
ar.reset_object_address(& (* result), & t.reference());
return result;
@@ -138,12 +138,12 @@ template<class Archive, class Container, class InputFunction, class R>
inline void load_collection(Archive & ar, Container &s)
{
s.clear();
- collection_size_type count;
const boost::archive::library_version_type library_version(
ar.get_library_version()
);
// retrieve number of elements
item_version_type item_version(0);
+ collection_size_type count;
ar >> BOOST_SERIALIZATION_NVP(count);
if(boost::archive::library_version_type(3) < library_version){
ar >> BOOST_SERIALIZATION_NVP(item_version);
@@ -152,7 +152,7 @@ inline void load_collection(Archive & ar, Container &s)
R rx;
rx(s, count);
InputFunction ifunc;
- BOOST_DEDUCED_TYPENAME Container::iterator hint;
+ typename Container::iterator hint;
hint = s.begin();
while(count-- > 0){
hint = ifunc(ar, s, item_version, hint);
diff --git a/3party/boost/boost/serialization/collections_save_imp.hpp b/3party/boost/boost/serialization/collections_save_imp.hpp
index 5151c4b8b3..f3cabfcf3f 100644
--- a/3party/boost/boost/serialization/collections_save_imp.hpp
+++ b/3party/boost/boost/serialization/collections_save_imp.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_COLLECTIONS_SAVE_IMP_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -34,14 +34,16 @@ namespace stl {
//
template<class Archive, class Container>
-inline void save_collection(Archive & ar, const Container &s)
+inline void save_collection(
+ Archive & ar,
+ const Container &s,
+ collection_size_type count)
{
+ ar << BOOST_SERIALIZATION_NVP(count);
// record number of elements
- collection_size_type count(s.size());
const item_version_type item_version(
- version<BOOST_DEDUCED_TYPENAME Container::value_type>::value
+ version<typename Container::value_type>::value
);
- ar << BOOST_SERIALIZATION_NVP(count);
#if 0
boost::archive::library_version_type library_version(
ar.get_library_version()
@@ -53,7 +55,7 @@ inline void save_collection(Archive & ar, const Container &s)
ar << BOOST_SERIALIZATION_NVP(item_version);
#endif
- BOOST_DEDUCED_TYPENAME Container::const_iterator it = s.begin();
+ typename Container::const_iterator it = s.begin();
while(count-- > 0){
// note borland emits a no-op without the explicit namespace
boost::serialization::save_construct_data_adl(
@@ -65,6 +67,14 @@ inline void save_collection(Archive & ar, const Container &s)
}
}
+template<class Archive, class Container>
+inline void save_collection(Archive & ar, const Container &s)
+{
+ // record number of elements
+ collection_size_type count(s.size());
+ save_collection(ar, s, count);
+}
+
} // namespace stl
} // namespace serialization
} // namespace boost
diff --git a/3party/boost/boost/serialization/complex.hpp b/3party/boost/boost/serialization/complex.hpp
index 3e222e42a2..b4ef44cf97 100644
--- a/3party/boost/boost/serialization/complex.hpp
+++ b/3party/boost/boost/serialization/complex.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_COMPLEX_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/deque.hpp b/3party/boost/boost/serialization/deque.hpp
index 340d5feedc..7012902918 100644
--- a/3party/boost/boost/serialization/deque.hpp
+++ b/3party/boost/boost/serialization/deque.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_DEQUE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/detail/get_data.hpp b/3party/boost/boost/serialization/detail/get_data.hpp
index 3cbcb4a30c..da8921355f 100644
--- a/3party/boost/boost/serialization/detail/get_data.hpp
+++ b/3party/boost/boost/serialization/detail/get_data.hpp
@@ -9,7 +9,7 @@
#define BOOST_SERIALIZATION_DETAIL_GET_DATA_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/detail/shared_count_132.hpp b/3party/boost/boost/serialization/detail/shared_count_132.hpp
index c42355b1e9..a63e48849b 100644
--- a/3party/boost/boost/serialization/detail/shared_count_132.hpp
+++ b/3party/boost/boost/serialization/detail/shared_count_132.hpp
@@ -3,7 +3,7 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -201,12 +201,12 @@ public:
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
-template<class T> void cbi_call_constructor_hook(sp_counted_base * pn, T * px, checked_deleter< T > const &, int)
+template<class T> void cbi_call_constructor_hook(sp_counted_base * pn, T * px, boost::checked_deleter< T > const &, int)
{
boost::sp_scalar_constructor_hook(px, sizeof(T), pn);
}
-template<class T> void cbi_call_constructor_hook(sp_counted_base *, T * px, checked_array_deleter< T > const &, int)
+template<class T> void cbi_call_constructor_hook(sp_counted_base *, T * px, boost::checked_array_deleter< T > const &, int)
{
boost::sp_array_constructor_hook(px);
}
@@ -215,12 +215,12 @@ template<class P, class D> void cbi_call_constructor_hook(sp_counted_base *, P c
{
}
-template<class T> void cbi_call_destructor_hook(sp_counted_base * pn, T * px, checked_deleter< T > const &, int)
+template<class T> void cbi_call_destructor_hook(sp_counted_base * pn, T * px, boost::checked_deleter< T > const &, int)
{
boost::sp_scalar_destructor_hook(px, sizeof(T), pn);
}
-template<class T> void cbi_call_destructor_hook(sp_counted_base *, T * px, checked_array_deleter< T > const &, int)
+template<class T> void cbi_call_destructor_hook(sp_counted_base *, T * px, boost::checked_array_deleter< T > const &, int)
{
boost::sp_array_destructor_hook(px);
}
diff --git a/3party/boost/boost/serialization/detail/shared_ptr_132.hpp b/3party/boost/boost/serialization/detail/shared_ptr_132.hpp
index b5f2b21563..969b53a77b 100644
--- a/3party/boost/boost/serialization/detail/shared_ptr_132.hpp
+++ b/3party/boost/boost/serialization/detail/shared_ptr_132.hpp
@@ -114,7 +114,7 @@ public:
typedef T element_type;
typedef T value_type;
typedef T * pointer;
- typedef BOOST_DEDUCED_TYPENAME detail::shared_ptr_traits< T >::reference reference;
+ typedef typename detail::shared_ptr_traits< T >::reference reference;
shared_ptr(): px(0), pn() // never throws in 1.30+
{
@@ -353,17 +353,6 @@ template<class T, class U> inline bool operator!=(shared_ptr< T > const & a, sha
return a.get() != b.get();
}
-#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96
-
-// Resolve the ambiguity between our op!= and the one in rel_ops
-
-template<class T> inline bool operator!=(shared_ptr< T > const & a, shared_ptr< T > const & b)
-{
- return a.get() != b.get();
-}
-
-#endif
-
template<class T, class U> inline bool operator<(shared_ptr< T > const & a, shared_ptr<U> const & b)
{
return a._internal_less(b);
@@ -421,33 +410,16 @@ template<class T> inline T * get_pointer(shared_ptr< T > const & p)
// operator<<
-#if defined(__GNUC__) && (__GNUC__ < 3)
-template<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)
-{
- os << p.get();
- return os;
-}
-
-#else
-
-# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, <= 1200 && __SGI_STL_PORT)
-// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL
-using std::basic_ostream;
-template<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, shared_ptr<Y> const & p)
-# else
template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)
-# endif
{
os << p.get();
return os;
}
-#endif
-
// get_deleter (experimental)
-#if (defined(__GNUC__) && (__GNUC__ < 3)) || (defined(__EDG_VERSION__) && (__EDG_VERSION__ <= 238))
+#if defined(__EDG_VERSION__) && (__EDG_VERSION__ <= 238)
// g++ 2.9x doesn't allow static_cast<X const *>(void *)
// apparently EDG 2.38 also doesn't accept it
diff --git a/3party/boost/boost/serialization/detail/stack_constructor.hpp b/3party/boost/boost/serialization/detail/stack_constructor.hpp
index de623b0d4f..7c74c181a3 100644
--- a/3party/boost/boost/serialization/detail/stack_constructor.hpp
+++ b/3party/boost/boost/serialization/detail/stack_constructor.hpp
@@ -2,14 +2,10 @@
#define BOOST_SERIALIZATION_DETAIL_STACH_CONSTRUCTOR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
-#if defined(_MSC_VER) && (_MSC_VER <= 1020)
-# pragma warning (disable : 4786) // too long name, harmless warning
-#endif
-
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// collections_load_imp.hpp: serialization for loading stl collections
@@ -38,7 +34,7 @@ struct stack_allocate
return * address();
}
private:
- typedef BOOST_DEDUCED_TYPENAME boost::aligned_storage<
+ typedef typename boost::aligned_storage<
sizeof(T),
#if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560))
8
diff --git a/3party/boost/boost/serialization/ephemeral.hpp b/3party/boost/boost/serialization/ephemeral.hpp
index f559bec99f..b913fef0b2 100644
--- a/3party/boost/boost/serialization/ephemeral.hpp
+++ b/3party/boost/boost/serialization/ephemeral.hpp
@@ -3,7 +3,7 @@
// MS compatible compilers support
#pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -21,10 +21,6 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-// supress noise
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
-# pragma warning (disable : 4786) // too long name, harmless warning
-#endif
#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/integral_c_tag.hpp>
diff --git a/3party/boost/boost/serialization/export.hpp b/3party/boost/boost/serialization/export.hpp
index 6b29556aaf..99354782aa 100644
--- a/3party/boost/boost/serialization/export.hpp
+++ b/3party/boost/boost/serialization/export.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_EXPORT_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -103,14 +103,14 @@ ptr_serialization_support<Archive,Serializable>::instantiate()
{
export_impl<Archive,Serializable>::enable_save(
#if ! defined(__BORLANDC__)
- BOOST_DEDUCED_TYPENAME
+ typename
#endif
Archive::is_saving()
);
export_impl<Archive,Serializable>::enable_load(
#if ! defined(__BORLANDC__)
- BOOST_DEDUCED_TYPENAME
+ typename
#endif
Archive::is_loading()
);
diff --git a/3party/boost/boost/serialization/extended_type_info.hpp b/3party/boost/boost/serialization/extended_type_info.hpp
index a4b4b69319..d4b57afa61 100644
--- a/3party/boost/boost/serialization/extended_type_info.hpp
+++ b/3party/boost/boost/serialization/extended_type_info.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/extended_type_info_no_rtti.hpp b/3party/boost/boost/serialization/extended_type_info_no_rtti.hpp
index 025b3f6964..62b2473811 100644
--- a/3party/boost/boost/serialization/extended_type_info_no_rtti.hpp
+++ b/3party/boost/boost/serialization/extended_type_info_no_rtti.hpp
@@ -3,7 +3,7 @@
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -89,7 +89,7 @@ class extended_type_info_no_rtti :
};
static const char * invoke(){
typedef
- BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
+ typename boost::mpl::if_c<
tf,
defined,
undefined
@@ -130,15 +130,15 @@ public:
va_start(ap, count);
switch(count){
case 0:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 0>(ap);
+ return factory<typename boost::remove_const< T >::type, 0>(ap);
case 1:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 1>(ap);
+ return factory<typename boost::remove_const< T >::type, 1>(ap);
case 2:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 2>(ap);
+ return factory<typename boost::remove_const< T >::type, 2>(ap);
case 3:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 3>(ap);
+ return factory<typename boost::remove_const< T >::type, 3>(ap);
case 4:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 4>(ap);
+ return factory<typename boost::remove_const< T >::type, 4>(ap);
default:
BOOST_ASSERT(false); // too many arguments
// throw exception here?
@@ -167,7 +167,7 @@ public:
namespace serialization {
template<class T>
struct extended_type_info_impl {
- typedef BOOST_DEDUCED_TYPENAME
+ typedef typename
boost::serialization::extended_type_info_no_rtti< T > type;
};
} // namespace serialization
diff --git a/3party/boost/boost/serialization/extended_type_info_typeid.hpp b/3party/boost/boost/serialization/extended_type_info_typeid.hpp
index 9f09587d67..6a003be1a0 100644
--- a/3party/boost/boost/serialization/extended_type_info_typeid.hpp
+++ b/3party/boost/boost/serialization/extended_type_info_typeid.hpp
@@ -3,7 +3,7 @@
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -114,15 +114,15 @@ public:
va_start(ap, count);
switch(count){
case 0:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 0>(ap);
+ return factory<typename boost::remove_const< T >::type, 0>(ap);
case 1:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 1>(ap);
+ return factory<typename boost::remove_const< T >::type, 1>(ap);
case 2:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 2>(ap);
+ return factory<typename boost::remove_const< T >::type, 2>(ap);
case 3:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 3>(ap);
+ return factory<typename boost::remove_const< T >::type, 3>(ap);
case 4:
- return factory<BOOST_DEDUCED_TYPENAME boost::remove_const< T >::type, 4>(ap);
+ return factory<typename boost::remove_const< T >::type, 4>(ap);
default:
BOOST_ASSERT(false); // too many arguments
// throw exception here?
@@ -150,7 +150,7 @@ public:
namespace serialization {
template<class T>
struct extended_type_info_impl {
- typedef BOOST_DEDUCED_TYPENAME
+ typedef typename
boost::serialization::extended_type_info_typeid< T > type;
};
} // namespace serialization
diff --git a/3party/boost/boost/serialization/factory.hpp b/3party/boost/boost/serialization/factory.hpp
index a25bf204fd..b601af6268 100644
--- a/3party/boost/boost/serialization/factory.hpp
+++ b/3party/boost/boost/serialization/factory.hpp
@@ -3,7 +3,7 @@
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/force_include.hpp b/3party/boost/boost/serialization/force_include.hpp
index 5578ee81d6..468be37fe8 100644
--- a/3party/boost/boost/serialization/force_include.hpp
+++ b/3party/boost/boost/serialization/force_include.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_FORCE_INCLUDE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/forward_list.hpp b/3party/boost/boost/serialization/forward_list.hpp
new file mode 100644
index 0000000000..6efa870048
--- /dev/null
+++ b/3party/boost/boost/serialization/forward_list.hpp
@@ -0,0 +1,102 @@
+#ifndef BOOST_SERIALIZATION_FORWARD_LIST_HPP
+#define BOOST_SERIALIZATION_FORWARD_LIST_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// forward_list.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // size_t
+#include <forward_list>
+#include <iterator> // distance
+
+#include <boost/config.hpp> // msvc 6.0 needs this for warning suppression
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/nvp.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<class Archive, class U, class Allocator>
+inline void save(
+ Archive & ar,
+ const std::forward_list<U, Allocator> &t,
+ const unsigned int file_version
+){
+ const collection_size_type count(std::distance(t.cbegin(), t.cend()));
+ boost::serialization::stl::save_collection<
+ Archive,
+ std::forward_list<U, Allocator>
+ >(ar, t, count);
+}
+
+template<class Archive, class U, class Allocator>
+inline void load(
+ Archive & ar,
+ std::forward_list<U, Allocator> &t,
+ const unsigned int file_version
+){
+ t.clear();
+ // retrieve number of elements
+ collection_size_type count;
+ ar >> BOOST_SERIALIZATION_NVP(count);
+ if(collection_size_type(0) == count)
+ return;
+ item_version_type item_version(0);
+ const boost::archive::library_version_type library_version(
+ ar.get_library_version()
+ );
+ if(boost::archive::library_version_type(3) < library_version){
+ ar >> BOOST_SERIALIZATION_NVP(item_version);
+ }
+ boost::serialization::detail::stack_construct<Archive, U> u(ar, item_version);
+ ar >> boost::serialization::make_nvp("item", u.reference());
+ t.push_front(u.reference());
+ typename std::forward_list<U, Allocator>::iterator last;
+ last = t.begin();
+ while(--count > 0){
+ boost::serialization::detail::stack_construct<Archive, U>
+ u(ar, file_version);
+ ar >> boost::serialization::make_nvp("item", u.reference());
+ last = t.insert_after(last, u.reference());
+ ar.reset_object_address(& (*last), & u.reference());
+ }
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class U, class Allocator>
+inline void serialize(
+ Archive & ar,
+ std::forward_list<U, Allocator> &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(std::forward_list)
+
+#endif // BOOST_SERIALIZATION_FORWARD_LIST_HPP
diff --git a/3party/boost/boost/serialization/hash_collections_load_imp.hpp b/3party/boost/boost/serialization/hash_collections_load_imp.hpp
index c064c9f27c..de85fd3fd2 100644
--- a/3party/boost/boost/serialization/hash_collections_load_imp.hpp
+++ b/3party/boost/boost/serialization/hash_collections_load_imp.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_HASH_COLLECTIONS_LOAD_IMP_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning (disable : 4786) // too long name, harmless warning
#endif
diff --git a/3party/boost/boost/serialization/hash_collections_save_imp.hpp b/3party/boost/boost/serialization/hash_collections_save_imp.hpp
index 8d1fecec5e..65dfe83f16 100644
--- a/3party/boost/boost/serialization/hash_collections_save_imp.hpp
+++ b/3party/boost/boost/serialization/hash_collections_save_imp.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_HASH_COLLECTIONS_SAVE_IMP_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -39,7 +39,7 @@ inline void save_hash_collection(Archive & ar, const Container &s)
collection_size_type count(s.size());
const collection_size_type bucket_count(s.bucket_count());
const item_version_type item_version(
- version<BOOST_DEDUCED_TYPENAME Container::value_type>::value
+ version<typename Container::value_type>::value
);
#if 0
@@ -76,14 +76,14 @@ inline void save_hash_collection(Archive & ar, const Container &s)
ar << BOOST_SERIALIZATION_NVP(item_version);
#endif
- BOOST_DEDUCED_TYPENAME Container::const_iterator it = s.begin();
+ typename Container::const_iterator it = s.begin();
while(count-- > 0){
// note borland emits a no-op without the explicit namespace
boost::serialization::save_construct_data_adl(
ar,
&(*it),
boost::serialization::version<
- BOOST_DEDUCED_TYPENAME Container::value_type
+ typename Container::value_type
>::value
);
ar << boost::serialization::make_nvp("item", *it++);
diff --git a/3party/boost/boost/serialization/hash_map.hpp b/3party/boost/boost/serialization/hash_map.hpp
index f5327388aa..615ace8d8a 100644
--- a/3party/boost/boost/serialization/hash_map.hpp
+++ b/3party/boost/boost/serialization/hash_map.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_HASH_MAP_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -40,11 +40,11 @@ struct archive_input_hash_map
Container &s,
const unsigned int v
){
- typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ typedef typename Container::value_type type;
detail::stack_construct<Archive, type> t(ar, v);
// borland fails silently w/o full namespace
ar >> boost::serialization::make_nvp("item", t.reference());
- std::pair<BOOST_DEDUCED_TYPENAME Container::const_iterator, bool> result =
+ std::pair<typename Container::const_iterator, bool> result =
s.insert(t.reference());
// note: the following presumes that the map::value_type was NOT tracked
// in the archive. This is the usual case, but here there is no way
@@ -67,11 +67,11 @@ struct archive_input_hash_multimap
Container &s,
const unsigned int v
){
- typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ typedef typename Container::value_type type;
detail::stack_construct<Archive, type> t(ar, v);
// borland fails silently w/o full namespace
ar >> boost::serialization::make_nvp("item", t.reference());
- BOOST_DEDUCED_TYPENAME Container::const_iterator result
+ typename Container::const_iterator result
= s.insert(t.reference());
// note: the following presumes that the map::value_type was NOT tracked
// in the archive. This is the usual case, but here there is no way
diff --git a/3party/boost/boost/serialization/hash_set.hpp b/3party/boost/boost/serialization/hash_set.hpp
index 916c2dd146..6275e0309e 100644
--- a/3party/boost/boost/serialization/hash_set.hpp
+++ b/3party/boost/boost/serialization/hash_set.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_HASH_SET_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -38,11 +38,11 @@ struct archive_input_hash_set
Container &s,
const unsigned int v
){
- typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ typedef typename Container::value_type type;
detail::stack_construct<Archive, type> t(ar, v);
// borland fails silently w/o full namespace
ar >> boost::serialization::make_nvp("item", t.reference());
- std::pair<BOOST_DEDUCED_TYPENAME Container::const_iterator, bool> result =
+ std::pair<typename Container::const_iterator, bool> result =
s.insert(t.reference());
if(result.second)
ar.reset_object_address(& (* result.first), & t.reference());
@@ -58,11 +58,11 @@ struct archive_input_hash_multiset
Container &s,
const unsigned int v
){
- typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ typedef typename Container::value_type type;
detail::stack_construct<Archive, type> t(ar, v);
// borland fails silently w/o full namespace
ar >> boost::serialization::make_nvp("item", t.reference());
- BOOST_DEDUCED_TYPENAME Container::const_iterator result
+ typename Container::const_iterator result
= s.insert(t.reference());
ar.reset_object_address(& (* result), & t.reference());
}
diff --git a/3party/boost/boost/serialization/is_bitwise_serializable.hpp b/3party/boost/boost/serialization/is_bitwise_serializable.hpp
index 34eec40ec4..dac597ec2c 100644
--- a/3party/boost/boost/serialization/is_bitwise_serializable.hpp
+++ b/3party/boost/boost/serialization/is_bitwise_serializable.hpp
@@ -17,7 +17,7 @@
#define BOOST_SERIALIZATION_IS_BITWISE_SERIALIZABLE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/level.hpp b/3party/boost/boost/serialization/level.hpp
index ce507b2281..b037f7ebc7 100644
--- a/3party/boost/boost/serialization/level.hpp
+++ b/3party/boost/boost/serialization/level.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_LEVEL_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -29,7 +29,6 @@
#include <boost/mpl/int.hpp>
#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/integral_c_tag.hpp>
-#include <boost/mpl/aux_/nttp_decl.hpp>
#include <boost/serialization/level_enum.hpp>
@@ -43,26 +42,26 @@ template<class T>
struct implementation_level_impl {
template<class U>
struct traits_class_level {
- typedef BOOST_DEDUCED_TYPENAME U::level type;
+ typedef typename U::level type;
};
typedef mpl::integral_c_tag tag;
// note: at least one compiler complained w/o the full qualification
// on basic traits below
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
is_base_and_derived<boost::serialization::basic_traits, T>,
traits_class_level< T >,
//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
is_fundamental< T >,
mpl::int_<primitive_type>,
//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
is_class< T >,
mpl::int_<object_class_info>,
//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
is_array< T >,
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
mpl::int_<not_serializable>,
@@ -70,7 +69,7 @@ struct implementation_level_impl {
mpl::int_<object_serializable>,
#endif
//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
is_enum< T >,
//#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
// mpl::int_<not_serializable>,
@@ -94,7 +93,7 @@ struct implementation_level :
{
};
-template<class T, BOOST_MPL_AUX_NTTP_DECL(int, L) >
+template<class T, int L>
inline bool operator>=(implementation_level< T > t, enum level_type l)
{
return t.value >= (int)l;
diff --git a/3party/boost/boost/serialization/level_enum.hpp b/3party/boost/boost/serialization/level_enum.hpp
index 11bd17f67d..baf64e04f3 100644
--- a/3party/boost/boost/serialization/level_enum.hpp
+++ b/3party/boost/boost/serialization/level_enum.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_LEVEL_ENUM_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/list.hpp b/3party/boost/boost/serialization/list.hpp
index 469bb230ec..63d3b472b1 100644
--- a/3party/boost/boost/serialization/list.hpp
+++ b/3party/boost/boost/serialization/list.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_LIST_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/map.hpp b/3party/boost/boost/serialization/map.hpp
index 624290df1a..11a3d6bbc8 100644
--- a/3party/boost/boost/serialization/map.hpp
+++ b/3party/boost/boost/serialization/map.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_MAP_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/nvp.hpp b/3party/boost/boost/serialization/nvp.hpp
index 2d7f4edd0f..f33707c305 100644
--- a/3party/boost/boost/serialization/nvp.hpp
+++ b/3party/boost/boost/serialization/nvp.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_NVP_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -20,10 +20,6 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-// supress noise
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
-# pragma warning (disable : 4786) // too long name, harmless warning
-#endif
#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/integral_c_tag.hpp>
@@ -104,7 +100,6 @@ nvp< T > make_nvp(const char * name, T & t){
// Partial Template Specialization and doing so would mean that wrappers
// wouldn't be treated the same on different platforms. This would
// break archive portability. Leave this here as reminder not to use it !!!
-#if 0 // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T>
struct implementation_level<nvp< T > >
@@ -123,7 +118,6 @@ struct tracking_level<nvp< T > >
BOOST_STATIC_CONSTANT(int, value = tracking_level::type::value);
};
-#endif
} // seralization
} // boost
diff --git a/3party/boost/boost/serialization/optional.hpp b/3party/boost/boost/serialization/optional.hpp
index 929fa0749c..4024cf5e61 100644
--- a/3party/boost/boost/serialization/optional.hpp
+++ b/3party/boost/boost/serialization/optional.hpp
@@ -10,7 +10,7 @@
#ifndef BOOST_SERIALIZATION_OPTIONAL_HPP_
#define BOOST_SERIALIZATION_OPTIONAL_HPP_
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -90,37 +90,6 @@ void serialize(
boost::serialization::split_free(ar, t, version);
}
-// the following would be slightly more efficient. But it
-// would mean that archives created with programs that support
-// TPS wouldn't be readable by programs that don't support TPS.
-// Hence we decline to support this otherwise convenient optimization.
-//#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#if 0
-
-template <class T>
-struct implementation_level<optional< T > >
-{
- typedef mpl::integral_c_tag tag;
- typedef mpl::int_<boost::serialization::object_serializable> type;
- BOOST_STATIC_CONSTANT(
- int ,
- value = boost::serialization::implementation_level::type::value
- );
-};
-
-template<class T>
-struct tracking_level<optional< T > >
-{
- typedef mpl::integral_c_tag tag;
- typedef mpl::int_<boost::serialization::track_never> type;
- BOOST_STATIC_CONSTANT(
- int ,
- value = boost::serialization::tracking_level::type::value
- );
-};
-
-#endif
-
} // serialization
} // namespace boost
diff --git a/3party/boost/boost/serialization/pfto.hpp b/3party/boost/boost/serialization/pfto.hpp
index 8d984630ec..0370d2831f 100644
--- a/3party/boost/boost/serialization/pfto.hpp
+++ b/3party/boost/boost/serialization/pfto.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_PFTO_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/priority_queue.hpp b/3party/boost/boost/serialization/priority_queue.hpp
new file mode 100644
index 0000000000..3ba63a5b2d
--- /dev/null
+++ b/3party/boost/boost/serialization/priority_queue.hpp
@@ -0,0 +1,74 @@
+#ifndef BOOST_SERIALIZATION_PRIORITY_QUEUE_HPP
+#define BOOST_SERIALIZATION_PRIORITY_QUEUE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// priority_queue.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <queue>
+#include <boost/config.hpp>
+
+// function specializations must be defined in the appropriate
+// namespace - boost::serialization
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+#define STD _STLP_STD
+#else
+#define STD std
+#endif
+
+namespace boost {
+namespace serialization {
+namespace detail{
+
+template <typename U, typename Container, typename Compare>
+struct priority_queue_save : public STD::priority_queue<U, Container, Compare> {
+ template<class Archive>
+ void operator()(Archive & ar, const unsigned int file_version) const {
+ save(ar, STD::priority_queue<U, Container, Compare>::c, file_version);
+ }
+};
+template <typename U, typename Container, typename Compare>
+struct priority_queue_load : public STD::priority_queue<U, Container, Compare> {
+ template<class Archive>
+ void operator()(Archive & ar, const unsigned int file_version) {
+ load(ar, STD::priority_queue<U, Container, Compare>::c, file_version);
+ }
+};
+
+} // detail
+
+template<class Archive, class T, class Container, class Compare>
+inline void serialize(
+ Archive & ar,
+ std::priority_queue< T, Container, Compare> & t,
+ const unsigned int file_version
+){
+ typedef typename mpl::eval_if<
+ typename Archive::is_saving,
+ mpl::identity<detail::priority_queue_save<T, Container, Compare> >,
+ mpl::identity<detail::priority_queue_load<T, Container, Compare> >
+ >::type typex;
+ static_cast<typex &>(t)(ar, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(STD::priority_queue)
+
+#undef STD
+
+#endif // BOOST_SERIALIZATION_PRIORITY_QUEUE_HPP
diff --git a/3party/boost/boost/serialization/queue.hpp b/3party/boost/boost/serialization/queue.hpp
new file mode 100644
index 0000000000..58e1ee92f4
--- /dev/null
+++ b/3party/boost/boost/serialization/queue.hpp
@@ -0,0 +1,74 @@
+#ifndef BOOST_SERIALIZATION_QUEUE_HPP
+#define BOOST_SERIALIZATION_QUEUE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// queue.hpp
+
+// (C) Copyright 2014 Robert Ramey - http://www.rrsd.com .
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <queue>
+#include <boost/config.hpp>
+
+// function specializations must be defined in the appropriate
+// namespace - boost::serialization
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+#define STD _STLP_STD
+#else
+#define STD std
+#endif
+
+namespace boost {
+namespace serialization {
+namespace detail {
+
+template <typename U, typename C>
+struct queue_save : public STD::queue<U, C> {
+ template<class Archive>
+ void operator()(Archive & ar, const unsigned int file_version) const {
+ save(ar, STD::queue<U, C>::c, file_version);
+ }
+};
+template <typename U, typename C>
+struct queue_load : public STD::queue<U, C> {
+ template<class Archive>
+ void operator()(Archive & ar, const unsigned int file_version) {
+ load(ar, STD::queue<U, C>::c, file_version);
+ }
+};
+
+} // detail
+
+template<class Archive, class T, class C>
+inline void serialize(
+ Archive & ar,
+ std::queue< T, C> & t,
+ const unsigned int file_version
+){
+ typedef typename mpl::eval_if<
+ typename Archive::is_saving,
+ mpl::identity<detail::queue_save<T, C> >,
+ mpl::identity<detail::queue_load<T, C> >
+ >::type typex;
+ static_cast<typex &>(t)(ar, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(STD::queue)
+
+#undef STD
+
+#endif // BOOST_SERIALIZATION_QUEUE_HPP
diff --git a/3party/boost/boost/serialization/scoped_ptr.hpp b/3party/boost/boost/serialization/scoped_ptr.hpp
index ef522d8cea..0d11f8436e 100644
--- a/3party/boost/boost/serialization/scoped_ptr.hpp
+++ b/3party/boost/boost/serialization/scoped_ptr.hpp
@@ -1,7 +1,7 @@
#ifndef BOOST_SERIALIZATION_SCOPED_PTR_HPP_VP_2003_10_30
#define BOOST_SERIALIZATION_SCOPED_PTR_HPP_VP_2003_10_30
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/serialization.hpp b/3party/boost/boost/serialization/serialization.hpp
index f17e8dd800..8462b594c8 100644
--- a/3party/boost/boost/serialization/serialization.hpp
+++ b/3party/boost/boost/serialization/serialization.hpp
@@ -2,11 +2,11 @@
#define BOOST_SERIALIZATION_SERIALIZATION_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
-#if defined(_MSC_VER) && (_MSC_VER >= 1310)
+#if defined(_MSC_VER)
# pragma warning (disable : 4675) // suppress ADL warning
#endif
diff --git a/3party/boost/boost/serialization/set.hpp b/3party/boost/boost/serialization/set.hpp
index 4bb69abb93..6882fb040b 100644
--- a/3party/boost/boost/serialization/set.hpp
+++ b/3party/boost/boost/serialization/set.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_SET_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/shared_ptr.hpp b/3party/boost/boost/serialization/shared_ptr.hpp
index 37f95e35a1..f59567898a 100644
--- a/3party/boost/boost/serialization/shared_ptr.hpp
+++ b/3party/boost/boost/serialization/shared_ptr.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_SHARED_PTR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -25,13 +25,14 @@
#include <boost/detail/workaround.hpp>
#include <boost/shared_ptr.hpp>
+#include <boost/serialization/shared_ptr_helper.hpp>
#include <boost/serialization/split_free.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/version.hpp>
#include <boost/serialization/tracking.hpp>
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// shared_ptr serialization traits
+// boost:: shared_ptr serialization traits
// version 1 to distinguish from boost 1.32 version. Note: we can only do this
// for a template when the compiler supports partial template specialization
@@ -42,7 +43,7 @@
struct version< ::boost::shared_ptr< T > > {
typedef mpl::integral_c_tag tag;
#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
- typedef BOOST_DEDUCED_TYPENAME mpl::int_<1> type;
+ typedef typename mpl::int_<1> type;
#else
typedef mpl::int_<1> type;
#endif
@@ -57,7 +58,7 @@
struct tracking_level< ::boost::shared_ptr< T > > {
typedef mpl::integral_c_tag tag;
#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
- typedef BOOST_DEDUCED_TYPENAME mpl::int_< ::boost::serialization::track_never> type;
+ typedef typename mpl::int_< ::boost::serialization::track_never> type;
#else
typedef mpl::int_< ::boost::serialization::track_never> type;
#endif
@@ -91,7 +92,7 @@ struct null_deleter {
};
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// serialization for shared_ptr
+// serialization for boost::shared_ptr
template<class Archive, class T>
inline void save(
@@ -120,9 +121,6 @@ inline void load(
BOOST_STATIC_ASSERT((tracking_level< T >::value != track_never));
T* r;
if(file_version < 1){
- //ar.register_type(static_cast<
- // boost_132::detail::sp_counted_base_impl<T *, boost::checked_deleter< T > > *
- //>(NULL));
ar.register_type(static_cast<
boost_132::detail::sp_counted_base_impl<T *, null_deleter > *
>(NULL));
@@ -130,15 +128,22 @@ inline void load(
ar >> boost::serialization::make_nvp("px", sp.px);
ar >> boost::serialization::make_nvp("pn", sp.pn);
// got to keep the sps around so the sp.pns don't disappear
- ar.append(sp);
+ boost::serialization::shared_ptr_helper<boost::shared_ptr> & h =
+ ar.template get_helper<
+ shared_ptr_helper<boost::shared_ptr>
+ >();
+ h.append(sp);
r = sp.get();
}
else{
ar >> boost::serialization::make_nvp("px", r);
}
- ar.reset(t,r);
+ shared_ptr_helper<boost::shared_ptr> & h =
+ ar.template get_helper<
+ boost::serialization::shared_ptr_helper<boost::shared_ptr>
+ >();
+ h.reset(t,r);
}
-
#else
template<class Archive, class T>
inline void load(
@@ -152,7 +157,11 @@ inline void load(
BOOST_STATIC_ASSERT((tracking_level< T >::value != track_never));
T* r;
ar >> boost::serialization::make_nvp("px", r);
- ar.reset(t,r);
+ boost::serialization::shared_ptr_helper<boost::shared_ptr> & h =
+ ar.template get_helper<
+ shared_ptr_helper<boost::shared_ptr>
+ >();
+ h.reset(t,r);
}
#endif
@@ -174,4 +183,97 @@ inline void serialize(
} // namespace serialization
} // namespace boost
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// std::shared_ptr serialization traits
+// version 1 to distinguish from boost 1.32 version. Note: we can only do this
+// for a template when the compiler supports partial template specialization
+
+#ifndef BOOST_NO_CXX11_SMART_PTR
+#include <boost/static_assert.hpp>
+
+// note: we presume that any compiler/library which supports C++11
+// std::pointers also supports template partial specialization
+// trap here if such presumption were to turn out to wrong!!!
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ BOOST_STATIC_ASSERT(false);
+#endif
+
+namespace boost {
+namespace serialization{
+ template<class T>
+ struct version< ::std::shared_ptr< T > > {
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<1> type;
+ BOOST_STATIC_CONSTANT(int, value = type::value);
+ };
+ // don't track shared pointers
+ template<class T>
+ struct tracking_level< ::std::shared_ptr< T > > {
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_< ::boost::serialization::track_never> type;
+ BOOST_STATIC_CONSTANT(int, value = type::value);
+ };
+}}
+// the following just keeps older programs from breaking
+#define BOOST_SERIALIZATION_SHARED_PTR(T)
+
+namespace boost {
+namespace serialization{
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization for std::shared_ptr
+
+template<class Archive, class T>
+inline void save(
+ Archive & ar,
+ const std::shared_ptr< T > &t,
+ const unsigned int /* file_version */
+){
+ // The most common cause of trapping here would be serializing
+ // something like shared_ptr<int>. This occurs because int
+ // is never tracked by default. Wrap int in a trackable type
+ BOOST_STATIC_ASSERT((tracking_level< T >::value != track_never));
+ const T * t_ptr = t.get();
+ ar << boost::serialization::make_nvp("px", t_ptr);
+}
+
+template<class Archive, class T>
+inline void load(
+ Archive & ar,
+ std::shared_ptr< T > &t,
+ const unsigned int /*file_version*/
+){
+ // The most common cause of trapping here would be serializing
+ // something like shared_ptr<int>. This occurs because int
+ // is never tracked by default. Wrap int in a trackable type
+ BOOST_STATIC_ASSERT((tracking_level< T >::value != track_never));
+ T* r;
+ ar >> boost::serialization::make_nvp("px", r);
+ boost::serialization::shared_ptr_helper<std::shared_ptr> & h =
+ ar.template get_helper<
+ shared_ptr_helper<std::shared_ptr>
+ >();
+ h.reset(t,r);
+}
+
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar,
+ std::shared_ptr< T > &t,
+ const unsigned int file_version
+){
+ // correct shared_ptr serialization depends upon object tracking
+ // being used.
+ BOOST_STATIC_ASSERT(
+ boost::serialization::tracking_level< T >::value
+ != boost::serialization::track_never
+ );
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_NO_CXX11_SMART_PTR
+
#endif // BOOST_SERIALIZATION_SHARED_PTR_HPP
diff --git a/3party/boost/boost/serialization/shared_ptr_132.hpp b/3party/boost/boost/serialization/shared_ptr_132.hpp
index 9bcefe099b..ea02abdb82 100644
--- a/3party/boost/boost/serialization/shared_ptr_132.hpp
+++ b/3party/boost/boost/serialization/shared_ptr_132.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_SHARED_PTR_132_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/shared_ptr_helper.hpp b/3party/boost/boost/serialization/shared_ptr_helper.hpp
new file mode 100644
index 0000000000..9dace87c1e
--- /dev/null
+++ b/3party/boost/boost/serialization/shared_ptr_helper.hpp
@@ -0,0 +1,212 @@
+#ifndef BOOST_SERIALIZATION_SHARED_PTR_HELPER_HPP
+#define BOOST_SERIALIZATION_SHARED_PTR_HELPER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// shared_ptr_helper.hpp: serialization for boost shared pointern
+
+// (C) Copyright 2004-2009 Robert Ramey, Martin Ecker and Takatoshi Kondo
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <map>
+#include <list>
+#include <utility>
+#include <cstddef> // NULL
+
+#include <boost/config.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+#include <boost/mpl/if.hpp>
+
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/detail/decl.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last headern
+
+namespace boost_132 {
+ template<class T> class shared_ptr;
+}
+namespace boost {
+namespace serialization {
+
+class extended_type_info;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+template<class Archive, template<class U> class SPT >
+void load(
+ Archive & ar,
+ SPT< class U > &t,
+ const unsigned int file_version
+);
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// a common class for holding various types of shared pointers
+
+template<template<class T> class SPT>
+class shared_ptr_helper {
+ typedef std::map<
+ const void *, // address of object
+ SPT<void> // address shared ptr to single instance
+ > object_shared_pointer_map;
+
+ // list of shared_pointers create accessable by raw pointer. This
+ // is used to "match up" shared pointers loaded at different
+ // points in the archive. Note, we delay construction until
+ // it is actually used since this is by default included as
+ // a "mix-in" even if shared_ptr isn't used.
+ object_shared_pointer_map * m_o_sp;
+
+ struct null_deleter {
+ void operator()(void const *) const {}
+ };
+
+#if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) || defined(BOOST_MSVC)
+public:
+#else
+ template<class Archive, class U>
+ friend void boost::serialization::load(
+ Archive & ar,
+ SPT< U > &t,
+ const unsigned int file_version
+ );
+#endif
+
+ #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP
+ // list of loaded pointers. This is used to be sure that the pointers
+ // stay around long enough to be "matched" with other pointers loaded
+ // by the same archive. These are created with a "null_deleter" so that
+ // when this list is destroyed - the underlaying raw pointers are not
+ // destroyed. This has to be done because the pointers are also held by
+ // new system which is disjoint from this set. This is implemented
+ // by a change in load_construct_data below. It makes this file suitable
+ // only for loading pointers into a 1.33 or later boost system.
+ std::list<boost_132::shared_ptr<const void> > * m_pointers_132;
+ BOOST_ARCHIVE_DECL(void)
+ append(const boost_132::shared_ptr<const void> & t){
+ if(NULL == m_pointers_132)
+ m_pointers_132 = new std::list<boost_132::shared_ptr<const void> >;
+ m_pointers_132->push_back(t);
+ }
+ #endif
+
+ struct non_polymorphic {
+ template<class U>
+ static const boost::serialization::extended_type_info *
+ get_object_type(U & ){
+ return & boost::serialization::singleton<
+ typename
+ boost::serialization::type_info_implementation< U >::type
+ >::get_const_instance();
+ }
+ };
+ struct polymorphic {
+ template<class U>
+ static const boost::serialization::extended_type_info *
+ get_object_type(U & u){
+ return boost::serialization::singleton<
+ typename
+ boost::serialization::type_info_implementation< U >::type
+ >::get_const_instance().get_derived_extended_type_info(u);
+ }
+ };
+
+public:
+ template<class T>
+ void reset(SPT< T > & s, T * t){
+ if(NULL == t){
+ s.reset();
+ return;
+ }
+ const boost::serialization::extended_type_info * this_type
+ = & boost::serialization::type_info_implementation< T >::type
+ ::get_const_instance();
+
+ // get pointer to the most derived object's eti. This is effectively
+ // the object type identifer
+ typedef typename mpl::if_<
+ is_polymorphic< T >,
+ polymorphic,
+ non_polymorphic
+ >::type type;
+
+ const boost::serialization::extended_type_info * true_type
+ = type::get_object_type(*t);
+
+ // note:if this exception is thrown, be sure that derived pointern
+ // is either registered or exported.
+ if(NULL == true_type)
+ boost::serialization::throw_exception(
+ boost::archive::archive_exception(
+ boost::archive::archive_exception::unregistered_class,
+ this_type->get_debug_info()
+ )
+ );
+ // get void pointer to the most derived type
+ // this uniquely identifies the object referred to
+ // oid = "object identifier"
+ const void * oid = void_downcast(
+ *true_type,
+ *this_type,
+ t
+ );
+ if(NULL == oid)
+ boost::serialization::throw_exception(
+ boost::archive::archive_exception(
+ boost::archive::archive_exception::unregistered_cast,
+ true_type->get_debug_info(),
+ this_type->get_debug_info()
+ )
+ );
+
+ // make tracking array if necessary
+ if(NULL == m_o_sp)
+ m_o_sp = new object_shared_pointer_map;
+
+ typename object_shared_pointer_map::iterator i = m_o_sp->find(oid);
+
+ // if it's a new object
+ if(i == m_o_sp->end()){
+ s.reset(t);
+ std::pair<typename object_shared_pointer_map::iterator, bool> result;
+ result = m_o_sp->insert(std::make_pair(oid, s));
+ BOOST_ASSERT(result.second);
+ }
+ // if the object has already been seen
+ else{
+ s = SPT<T>(i->second, t);
+ }
+ }
+
+ shared_ptr_helper() :
+ m_o_sp(NULL)
+ #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP
+ , m_pointers_132(NULL)
+ #endif
+ {}
+ virtual ~shared_ptr_helper(){
+ if(NULL != m_o_sp)
+ delete m_o_sp;
+ #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP
+ if(NULL != m_pointers_132)
+ delete m_pointers_132;
+ #endif
+ }
+};
+
+} // namespace serialization
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_SERIALIZATION_SHARED_PTR_HELPER_HPP
diff --git a/3party/boost/boost/serialization/singleton.hpp b/3party/boost/boost/serialization/singleton.hpp
index f521590e1a..546118c868 100644
--- a/3party/boost/boost/serialization/singleton.hpp
+++ b/3party/boost/boost/serialization/singleton.hpp
@@ -30,7 +30,7 @@
//
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/slist.hpp b/3party/boost/boost/serialization/slist.hpp
index f369fcaf27..4072076fa4 100644
--- a/3party/boost/boost/serialization/slist.hpp
+++ b/3party/boost/boost/serialization/slist.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_SLIST_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -70,7 +70,7 @@ inline void load(
boost::serialization::detail::stack_construct<Archive, U> u(ar, item_version);
ar >> boost::serialization::make_nvp("item", u.reference());
t.push_front(u.reference());
- BOOST_DEDUCED_TYPENAME BOOST_STD_EXTENSION_NAMESPACE::slist<U, Allocator>::iterator last;
+ typename BOOST_STD_EXTENSION_NAMESPACE::slist<U, Allocator>::iterator last;
last = t.begin();
while(--count > 0){
boost::serialization::detail::stack_construct<Archive, U>
diff --git a/3party/boost/boost/serialization/smart_cast.hpp b/3party/boost/boost/serialization/smart_cast.hpp
index 977e8edbf6..02edb4be09 100644
--- a/3party/boost/boost/serialization/smart_cast.hpp
+++ b/3party/boost/boost/serialization/smart_cast.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_SMART_CAST_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -95,15 +95,15 @@ namespace smart_cast_impl {
// cross casting will be selected this will work but will
// not be the most efficient method. This will conflict with
// the original smart_cast motivation.
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
- BOOST_DEDUCED_TYPENAME mpl::and_<
+ typedef typename mpl::eval_if<
+ typename mpl::and_<
mpl::not_<is_base_and_derived<
- BOOST_DEDUCED_TYPENAME remove_reference< T >::type,
+ typename remove_reference< T >::type,
U
> >,
mpl::not_<is_base_and_derived<
U,
- BOOST_DEDUCED_TYPENAME remove_reference< T >::type
+ typename remove_reference< T >::type
> >
>,
// borland chokes w/o full qualification here
@@ -131,7 +131,7 @@ namespace smart_cast_impl {
mpl::identity<non_polymorphic>
>::type::cast(u);
#else
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typedef typename mpl::eval_if<
boost::is_polymorphic<U>,
mpl::identity<polymorphic>,
mpl::identity<non_polymorphic>
@@ -170,7 +170,7 @@ namespace smart_cast_impl {
template<class U>
static T cast(U * u){
// if we're in debug mode
- #if ! defined(NDEBUG) || defined(__BORLANDC__) && (__BORLANDC__ <= 0x560)
+ #if 0 //! defined(NDEBUG) || defined(__BORLANDC__) && (__BORLANDC__ <= 0x560)
// do a checked dynamic cast
return cross::cast(u);
#else
@@ -180,15 +180,15 @@ namespace smart_cast_impl {
// not be the most efficient method. This will conflict with
// the original smart_cast motivation.
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
- BOOST_DEDUCED_TYPENAME mpl::and_<
+ typename mpl::eval_if<
+ typename mpl::and_<
mpl::not_<is_base_and_derived<
- BOOST_DEDUCED_TYPENAME remove_pointer< T >::type,
+ typename remove_pointer< T >::type,
U
> >,
mpl::not_<is_base_and_derived<
U,
- BOOST_DEDUCED_TYPENAME remove_pointer< T >::type
+ typename remove_pointer< T >::type
> >
>,
// borland chokes w/o full qualification here
@@ -226,7 +226,7 @@ namespace smart_cast_impl {
mpl::identity<non_polymorphic>
>::type::cast(u);
#else
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typedef typename mpl::eval_if<
boost::is_polymorphic<U>,
mpl::identity<polymorphic>,
mpl::identity<non_polymorphic>
@@ -267,8 +267,8 @@ namespace smart_cast_impl {
template<class T, class U>
T smart_cast(U u) {
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
- BOOST_DEDUCED_TYPENAME mpl::or_<
+ typename mpl::eval_if<
+ typename mpl::or_<
boost::is_same<void *, U>,
boost::is_same<void *, T>,
boost::is_same<const void *, U>,
@@ -276,10 +276,10 @@ T smart_cast(U u) {
>,
mpl::identity<smart_cast_impl::void_pointer< T > >,
// else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<boost::is_pointer<U>,
+ typename mpl::eval_if<boost::is_pointer<U>,
mpl::identity<smart_cast_impl::pointer< T > >,
// else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<boost::is_reference<U>,
+ typename mpl::eval_if<boost::is_reference<U>,
mpl::identity<smart_cast_impl::reference< T > >,
// else
mpl::identity<smart_cast_impl::error< T >
diff --git a/3party/boost/boost/serialization/split_free.hpp b/3party/boost/boost/serialization/split_free.hpp
index 9dbcd2fd1d..85e2f590fe 100644
--- a/3party/boost/boost/serialization/split_free.hpp
+++ b/3party/boost/boost/serialization/split_free.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_SPLIT_FREE_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -66,8 +66,8 @@ inline void split_free(
T & t,
const unsigned int file_version
){
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
- BOOST_DEDUCED_TYPENAME Archive::is_saving,
+ typedef typename mpl::eval_if<
+ typename Archive::is_saving,
mpl::identity</* detail:: */ free_saver<Archive, T> >,
mpl::identity</* detail:: */ free_loader<Archive, T> >
>::type typex;
diff --git a/3party/boost/boost/serialization/split_member.hpp b/3party/boost/boost/serialization/split_member.hpp
index 69879450d8..5f32520559 100644
--- a/3party/boost/boost/serialization/split_member.hpp
+++ b/3party/boost/boost/serialization/split_member.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_SPLIT_MEMBER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -61,8 +61,8 @@ template<class Archive, class T>
inline void split_member(
Archive & ar, T & t, const unsigned int file_version
){
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
- BOOST_DEDUCED_TYPENAME Archive::is_saving,
+ typedef typename mpl::eval_if<
+ typename Archive::is_saving,
mpl::identity<detail::member_saver<Archive, T> >,
mpl::identity<detail::member_loader<Archive, T> >
>::type typex;
diff --git a/3party/boost/boost/serialization/stack.hpp b/3party/boost/boost/serialization/stack.hpp
new file mode 100644
index 0000000000..aea3ba8e00
--- /dev/null
+++ b/3party/boost/boost/serialization/stack.hpp
@@ -0,0 +1,74 @@
+#ifndef BOOST_SERIALIZATION_STACK_HPP
+#define BOOST_SERIALIZATION_STACK_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// stack.hpp
+
+// (C) Copyright 2014 Robert Ramey - http://www.rrsd.com .
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <stack>
+#include <boost/config.hpp>
+
+// function specializations must be defined in the appropriate
+// namespace - boost::serialization
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+#define STD _STLP_STD
+#else
+#define STD std
+#endif
+
+namespace boost {
+namespace serialization {
+namespace detail{
+
+template <typename U, typename C>
+struct stack_save : public STD::stack<U, C> {
+ template<class Archive>
+ void operator()(Archive & ar, const unsigned int file_version) const {
+ save(ar, STD::stack<U, C>::c, file_version);
+ }
+};
+template <typename U, typename C>
+struct stack_load : public STD::stack<U, C> {
+ template<class Archive>
+ void operator()(Archive & ar, const unsigned int file_version) {
+ load(ar, STD::stack<U, C>::c, file_version);
+ }
+};
+
+} // detail
+
+template<class Archive, class T, class C>
+inline void serialize(
+ Archive & ar,
+ std::stack< T, C> & t,
+ const unsigned int file_version
+){
+ typedef typename mpl::eval_if<
+ typename Archive::is_saving,
+ mpl::identity<detail::stack_save<T, C> >,
+ mpl::identity<detail::stack_load<T, C> >
+ >::type typex;
+ static_cast<typex &>(t)(ar, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(STD::stack)
+
+#undef STD
+
+#endif // BOOST_SERIALIZATION_DEQUE_HPP
diff --git a/3party/boost/boost/serialization/state_saver.hpp b/3party/boost/boost/serialization/state_saver.hpp
index 69cbe3e211..6e6f985784 100644
--- a/3party/boost/boost/serialization/state_saver.hpp
+++ b/3party/boost/boost/serialization/state_saver.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_STATE_SAVER_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -77,7 +77,7 @@ public:
~state_saver() {
#ifndef BOOST_NO_EXCEPTIONS
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typedef typename mpl::eval_if<
has_nothrow_copy< T >,
mpl::identity<restore>,
mpl::identity<restore_with_exception>
diff --git a/3party/boost/boost/serialization/static_warning.hpp b/3party/boost/boost/serialization/static_warning.hpp
index b41791ad86..d2f23d36d2 100644
--- a/3party/boost/boost/serialization/static_warning.hpp
+++ b/3party/boost/boost/serialization/static_warning.hpp
@@ -5,7 +5,7 @@
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -72,6 +72,7 @@
#include <boost/mpl/bool.hpp>
#include <boost/mpl/print.hpp>
#include <boost/mpl/eval_if.hpp>
+#include <boost/static_assert.hpp>
namespace boost {
namespace serialization {
@@ -101,8 +102,7 @@ struct BOOST_SERIALIZATION_SS {};
#define BOOST_SERIALIZATION_BSW(B, L) \
typedef boost::serialization::BOOST_SERIALIZATION_SS< \
sizeof( boost::serialization::static_warning_test< B, L > ) \
- > BOOST_JOIN(STATIC_WARNING_LINE, L);
-
+ > BOOST_JOIN(STATIC_WARNING_LINE, L) BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE;
#define BOOST_STATIC_WARNING(B) BOOST_SERIALIZATION_BSW(B, __LINE__)
#endif // BOOST_SERIALIZATION_STATIC_WARNING_HPP
diff --git a/3party/boost/boost/serialization/string.hpp b/3party/boost/boost/serialization/string.hpp
index 36d15942a8..d63df768a7 100644
--- a/3party/boost/boost/serialization/string.hpp
+++ b/3party/boost/boost/serialization/string.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_STRING_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/strong_typedef.hpp b/3party/boost/boost/serialization/strong_typedef.hpp
index c6308c2824..54a51626a7 100644
--- a/3party/boost/boost/serialization/strong_typedef.hpp
+++ b/3party/boost/boost/serialization/strong_typedef.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_STRONG_TYPEDEF_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/throw_exception.hpp b/3party/boost/boost/serialization/throw_exception.hpp
index ed7d8109f2..b67618adc9 100644
--- a/3party/boost/boost/serialization/throw_exception.hpp
+++ b/3party/boost/boost/serialization/throw_exception.hpp
@@ -3,7 +3,7 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/tracking.hpp b/3party/boost/boost/serialization/tracking.hpp
index fadcbd09cf..d5c79b8409 100644
--- a/3party/boost/boost/serialization/tracking.hpp
+++ b/3party/boost/boost/serialization/tracking.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_TRACKING_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -41,24 +41,24 @@ template<class T>
struct tracking_level_impl {
template<class U>
struct traits_class_tracking {
- typedef BOOST_DEDUCED_TYPENAME U::tracking type;
+ typedef typename U::tracking type;
};
typedef mpl::integral_c_tag tag;
// note: at least one compiler complained w/o the full qualification
// on basic traits below
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
is_base_and_derived<boost::serialization::basic_traits, T>,
traits_class_tracking< T >,
//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
is_pointer< T >,
// pointers are not tracked by default
mpl::int_<track_never>,
//else
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
// for primitives
- BOOST_DEDUCED_TYPENAME mpl::equal_to<
+ typename mpl::equal_to<
implementation_level< T >,
mpl::int_<primitive_type>
>,
diff --git a/3party/boost/boost/serialization/tracking_enum.hpp b/3party/boost/boost/serialization/tracking_enum.hpp
index e4e4e21359..278051e1ba 100644
--- a/3party/boost/boost/serialization/tracking_enum.hpp
+++ b/3party/boost/boost/serialization/tracking_enum.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_TRACKING_ENUM_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/traits.hpp b/3party/boost/boost/serialization/traits.hpp
index da800098a2..d338b1b123 100644
--- a/3party/boost/boost/serialization/traits.hpp
+++ b/3party/boost/boost/serialization/traits.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_TRAITS_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -52,9 +52,9 @@ template<
struct traits : public basic_traits {
BOOST_STATIC_ASSERT(Version == 0 || Level >= object_class_info);
BOOST_STATIC_ASSERT(Tracking == track_never || Level >= object_serializable);
- typedef BOOST_DEDUCED_TYPENAME mpl::int_<Level> level;
- typedef BOOST_DEDUCED_TYPENAME mpl::int_<Tracking> tracking;
- typedef BOOST_DEDUCED_TYPENAME mpl::int_<Version> version;
+ typedef typename mpl::int_<Level> level;
+ typedef typename mpl::int_<Tracking> tracking;
+ typedef typename mpl::int_<Version> version;
typedef ETII type_info_implementation;
typedef Wrapper is_wrapper;
};
diff --git a/3party/boost/boost/serialization/type_info_implementation.hpp b/3party/boost/boost/serialization/type_info_implementation.hpp
index 00eb152d8e..2c033fc875 100644
--- a/3party/boost/boost/serialization/type_info_implementation.hpp
+++ b/3party/boost/boost/serialization/type_info_implementation.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -35,17 +35,17 @@ template<class T>
struct type_info_implementation {
template<class U>
struct traits_class_typeinfo_implementation {
- typedef BOOST_DEDUCED_TYPENAME U::type_info_implementation::type type;
+ typedef typename U::type_info_implementation::type type;
};
// note: at least one compiler complained w/o the full qualification
// on basic traits below
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
is_base_and_derived<boost::serialization::basic_traits, T>,
traits_class_typeinfo_implementation< T >,
//else
mpl::identity<
- BOOST_DEDUCED_TYPENAME extended_type_info_impl< T >::type
+ typename extended_type_info_impl< T >::type
>
>::type type;
};
diff --git a/3party/boost/boost/serialization/unique_ptr.hpp b/3party/boost/boost/serialization/unique_ptr.hpp
new file mode 100644
index 0000000000..ac615b9d19
--- /dev/null
+++ b/3party/boost/boost/serialization/unique_ptr.hpp
@@ -0,0 +1,68 @@
+#ifndef BOOST_SERIALIZATION_UNIQUE_PTR_HPP
+#define BOOST_SERIALIZATION_UNIQUE_PTR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// unique_ptr.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <memory>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/nvp.hpp>
+
+namespace boost {
+namespace serialization {
+
+/////////////////////////////////////////////////////////////
+// implement serialization for unique_ptr< T >
+// note: this must be added to the boost namespace in order to
+// be called by the library
+template<class Archive, class T>
+inline void save(
+ Archive & ar,
+ const std::unique_ptr< T > &t,
+ const unsigned int file_version
+){
+ // only the raw pointer has to be saved
+ // the ref count is rebuilt automatically on load
+ const T * const tx = t.get();
+ ar << BOOST_SERIALIZATION_NVP(tx);
+}
+
+template<class Archive, class T>
+inline void load(
+ Archive & ar,
+ std::unique_ptr< T > &t,
+ const unsigned int file_version
+){
+ T *tx;
+ ar >> BOOST_SERIALIZATION_NVP(tx);
+ // note that the reset automagically maintains the reference count
+ t.reset(tx);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar,
+ std::unique_ptr< T > &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+
+#endif // BOOST_SERIALIZATION_UNIQUE_PTR_HPP
diff --git a/3party/boost/boost/serialization/unordered_collections_load_imp.hpp b/3party/boost/boost/serialization/unordered_collections_load_imp.hpp
new file mode 100644
index 0000000000..bf56741342
--- /dev/null
+++ b/3party/boost/boost/serialization/unordered_collections_load_imp.hpp
@@ -0,0 +1,74 @@
+#ifndef BOOST_SERIALIZATION_UNORDERED_COLLECTIONS_LOAD_IMP_HPP
+#define BOOST_SERIALIZATION_UNORDERED_COLLECTIONS_LOAD_IMP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// unordered_collections_load_imp.hpp: serialization for loading stl collections
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// (C) Copyright 2014 Jim Bell
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// helper function templates for serialization of collections
+
+#include <boost/assert.hpp>
+#include <cstddef> // size_t
+#include <boost/config.hpp> // msvc 6.0 needs this for warning suppression
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/detail/basic_iarchive.hpp>
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/detail/stack_constructor.hpp>
+#include <boost/serialization/collection_size_type.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+namespace boost{
+namespace serialization {
+namespace stl {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of serialization for STL containers
+//
+template<class Archive, class Container, class InputFunction>
+inline void load_unordered_collection(Archive & ar, Container &s)
+{
+ s.clear();
+ collection_size_type count;
+ collection_size_type bucket_count;
+ boost::serialization::item_version_type item_version(0);
+ boost::archive::library_version_type library_version(
+ ar.get_library_version()
+ );
+ // retrieve number of elements
+ ar >> BOOST_SERIALIZATION_NVP(count);
+ ar >> BOOST_SERIALIZATION_NVP(bucket_count);
+ if(boost::archive::library_version_type(3) < library_version){
+ ar >> BOOST_SERIALIZATION_NVP(item_version);
+ }
+ s.rehash(bucket_count);
+ InputFunction ifunc;
+ while(count-- > 0){
+ ifunc(ar, s, item_version);
+ }
+}
+
+} // namespace stl
+} // namespace serialization
+} // namespace boost
+
+#endif //BOOST_SERIALIZATION_UNORDERED_COLLECTIONS_LOAD_IMP_HPP
diff --git a/3party/boost/boost/serialization/unordered_collections_save_imp.hpp b/3party/boost/boost/serialization/unordered_collections_save_imp.hpp
new file mode 100644
index 0000000000..56746ebeaa
--- /dev/null
+++ b/3party/boost/boost/serialization/unordered_collections_save_imp.hpp
@@ -0,0 +1,86 @@
+#ifndef BOOST_SERIALIZATION_UNORDERED_COLLECTIONS_SAVE_IMP_HPP
+#define BOOST_SERIALIZATION_UNORDERED_COLLECTIONS_SAVE_IMP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// hash_collections_save_imp.hpp: serialization for stl collections
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// (C) Copyright 2014 Jim Bell
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// helper function templates for serialization of collections
+
+#include <boost/config.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/collection_size_type.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+namespace boost{
+namespace serialization {
+namespace stl {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of serialization for STL containers
+//
+
+template<class Archive, class Container>
+inline void save_unordered_collection(Archive & ar, const Container &s)
+{
+ collection_size_type count(s.size());
+ const collection_size_type bucket_count(s.bucket_count());
+ const item_version_type item_version(
+ version<typename Container::value_type>::value
+ );
+
+ #if 0
+ /* should only be necessary to create archives of previous versions
+ * which is not currently supported. So for now comment this out
+ */
+ boost::archive::library_version_type library_version(
+ ar.get_library_version()
+ );
+ // retrieve number of elements
+ ar << BOOST_SERIALIZATION_NVP(count);
+ ar << BOOST_SERIALIZATION_NVP(bucket_count);
+ if(boost::archive::library_version_type(3) < library_version){
+ // record number of elements
+ // make sure the target type is registered so we can retrieve
+ // the version when we load
+ ar << BOOST_SERIALIZATION_NVP(item_version);
+ }
+ #else
+ ar << BOOST_SERIALIZATION_NVP(count);
+ ar << BOOST_SERIALIZATION_NVP(bucket_count);
+ ar << BOOST_SERIALIZATION_NVP(item_version);
+ #endif
+
+ typename Container::const_iterator it = s.begin();
+ while(count-- > 0){
+ // note borland emits a no-op without the explicit namespace
+ boost::serialization::save_construct_data_adl(
+ ar,
+ &(*it),
+ boost::serialization::version<
+ typename Container::value_type
+ >::value
+ );
+ ar << boost::serialization::make_nvp("item", *it++);
+ }
+}
+
+} // namespace stl
+} // namespace serialization
+} // namespace boost
+
+#endif //BOOST_SERIALIZATION_UNORDERED_COLLECTIONS_SAVE_IMP_HPP
diff --git a/3party/boost/boost/serialization/unordered_map.hpp b/3party/boost/boost/serialization/unordered_map.hpp
new file mode 100644
index 0000000000..f3959104d9
--- /dev/null
+++ b/3party/boost/boost/serialization/unordered_map.hpp
@@ -0,0 +1,231 @@
+#ifndef BOOST_SERIALIZATION_UNORDERED_MAP_HPP
+#define BOOST_SERIALIZATION_UNORDERED_MAP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization/unordered_map.hpp:
+// serialization for stl unordered_map templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// (C) Copyright 2014 Jim Bell
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#include <unordered_map>
+
+#include <boost/serialization/utility.hpp>
+#include <boost/serialization/unordered_collections_save_imp.hpp>
+#include <boost/serialization/unordered_collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+namespace stl {
+
+// map input
+template<class Archive, class Container>
+struct archive_input_unordered_map
+{
+ inline void operator()(
+ Archive &ar,
+ Container &s,
+ const unsigned int v
+ ){
+ typedef typename Container::value_type type;
+ detail::stack_construct<Archive, type> t(ar, v);
+ // borland fails silently w/o full namespace
+ ar >> boost::serialization::make_nvp("item", t.reference());
+ std::pair<typename Container::const_iterator, bool> result =
+ s.insert(t.reference());
+ // note: the following presumes that the map::value_type was NOT tracked
+ // in the archive. This is the usual case, but here there is no way
+ // to determine that.
+ if(result.second){
+ ar.reset_object_address(
+ & (result.first->second),
+ & t.reference().second
+ );
+ }
+ }
+};
+
+// multimap input
+template<class Archive, class Container>
+struct archive_input_unordered_multimap
+{
+ inline void operator()(
+ Archive &ar,
+ Container &s,
+ const unsigned int v
+ ){
+ typedef typename Container::value_type type;
+ detail::stack_construct<Archive, type> t(ar, v);
+ // borland fails silently w/o full namespace
+ ar >> boost::serialization::make_nvp("item", t.reference());
+ typename Container::const_iterator result
+ = s.insert(t.reference());
+ // note: the following presumes that the map::value_type was NOT tracked
+ // in the archive. This is the usual case, but here there is no way
+ // to determine that.
+ ar.reset_object_address(
+ & result->second,
+ & t.reference()
+ );
+ }
+};
+
+} // stl
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void save(
+ Archive & ar,
+ const std::unordered_map<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int /*file_version*/
+){
+ boost::serialization::stl::save_unordered_collection<
+ Archive,
+ std::unordered_map<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >(ar, t);
+}
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void load(
+ Archive & ar,
+ std::unordered_map<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int /*file_version*/
+){
+ boost::serialization::stl::load_unordered_collection<
+ Archive,
+ std::unordered_map<
+ Key, HashFcn, EqualKey, Allocator
+ >,
+ boost::serialization::stl::archive_input_unordered_map<
+ Archive,
+ std::unordered_map<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void serialize(
+ Archive & ar,
+ std::unordered_map<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+// unordered_multimap
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void save(
+ Archive & ar,
+ const std::unordered_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int /*file_version*/
+){
+ boost::serialization::stl::save_unordered_collection<
+ Archive,
+ std::unordered_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >(ar, t);
+}
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void load(
+ Archive & ar,
+ std::unordered_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int /*file_version*/
+){
+ boost::serialization::stl::load_unordered_collection<
+ Archive,
+ std::unordered_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ >,
+ boost::serialization::stl::archive_input_unordered_multimap<
+ Archive,
+ std::unordered_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void serialize(
+ Archive & ar,
+ std::unordered_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_UNORDERED_MAP_HPP
diff --git a/3party/boost/boost/serialization/unordered_set.hpp b/3party/boost/boost/serialization/unordered_set.hpp
new file mode 100644
index 0000000000..535194fb72
--- /dev/null
+++ b/3party/boost/boost/serialization/unordered_set.hpp
@@ -0,0 +1,216 @@
+#ifndef BOOST_SERIALIZATION_UNORDERED_SET_HPP
+#define BOOST_SERIALIZATION_UNORDERED_SET_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// unordered_set.hpp: serialization for stl unordered_set templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// (C) Copyright 2014 Jim Bell
+// 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#include <unordered_set>
+
+#include <boost/serialization/unordered_collections_save_imp.hpp>
+#include <boost/serialization/unordered_collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+namespace stl {
+
+// unordered_set input
+template<class Archive, class Container>
+struct archive_input_unordered_set
+{
+ inline void operator()(
+ Archive &ar,
+ Container &s,
+ const unsigned int v
+ ){
+ typedef typename Container::value_type type;
+ detail::stack_construct<Archive, type> t(ar, v);
+ // borland fails silently w/o full namespace
+ ar >> boost::serialization::make_nvp("item", t.reference());
+ std::pair<typename Container::const_iterator, bool> result =
+ s.insert(t.reference());
+ if(result.second)
+ ar.reset_object_address(& (* result.first), & t.reference());
+ }
+};
+
+// unordered_multiset input
+template<class Archive, class Container>
+struct archive_input_unordered_multiset
+{
+ inline void operator()(
+ Archive &ar,
+ Container &s,
+ const unsigned int v
+ ){
+ typedef typename Container::value_type type;
+ detail::stack_construct<Archive, type> t(ar, v);
+ // borland fails silently w/o full namespace
+ ar >> boost::serialization::make_nvp("item", t.reference());
+ typename Container::const_iterator result
+ = s.insert(t.reference());
+ ar.reset_object_address(& (* result), & t.reference());
+ }
+};
+
+} // stl
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void save(
+ Archive & ar,
+ const std::unordered_set<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int /*file_version*/
+){
+ boost::serialization::stl::save_unordered_collection<
+ Archive,
+ std::unordered_set<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >(ar, t);
+}
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void load(
+ Archive & ar,
+ std::unordered_set<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int /*file_version*/
+){
+ boost::serialization::stl::load_unordered_collection<
+ Archive,
+ std::unordered_set<
+ Key, HashFcn, EqualKey, Allocator
+ >,
+ boost::serialization::stl::archive_input_unordered_set<
+ Archive,
+ std::unordered_set<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void serialize(
+ Archive & ar,
+ std::unordered_set<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+// unordered_multiset
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void save(
+ Archive & ar,
+ const std::unordered_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int /*file_version*/
+){
+ boost::serialization::stl::save_unordered_collection<
+ Archive,
+ std::unordered_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >(ar, t);
+}
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void load(
+ Archive & ar,
+ std::unordered_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int /*file_version*/
+){
+ boost::serialization::stl::load_unordered_collection<
+ Archive,
+ std::unordered_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ >,
+ boost::serialization::stl::archive_input_unordered_multiset<
+ Archive,
+ std::unordered_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void serialize(
+ Archive & ar,
+ std::unordered_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_UNORDERED_SET_HPP
diff --git a/3party/boost/boost/serialization/utility.hpp b/3party/boost/boost/serialization/utility.hpp
index 3d69abc7b3..4867a4a12d 100644
--- a/3party/boost/boost/serialization/utility.hpp
+++ b/3party/boost/boost/serialization/utility.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_UTILITY_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -38,7 +38,7 @@ inline void serialize(
// note: we remove any const-ness on the first argument. The reason is that
// for stl maps, the type saved is pair<const key, T). We remove
// the const-ness in order to be able to load it.
- typedef BOOST_DEDUCED_TYPENAME boost::remove_const<F>::type typef;
+ typedef typename boost::remove_const<F>::type typef;
ar & boost::serialization::make_nvp("first", const_cast<typef &>(p.first));
ar & boost::serialization::make_nvp("second", p.second);
}
diff --git a/3party/boost/boost/serialization/valarray.hpp b/3party/boost/boost/serialization/valarray.hpp
index 4bf722f4d3..d24fda5437 100644
--- a/3party/boost/boost/serialization/valarray.hpp
+++ b/3party/boost/boost/serialization/valarray.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_VALARAY_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/variant.hpp b/3party/boost/boost/serialization/variant.hpp
index 9c8ea9d931..70e395e211 100644
--- a/3party/boost/boost/serialization/variant.hpp
+++ b/3party/boost/boost/serialization/variant.hpp
@@ -2,14 +2,10 @@
#define BOOST_SERIALIZATION_VARIANT_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
-#if defined(_MSC_VER) && (_MSC_VER <= 1020)
-# pragma warning (disable : 4786) // too long name, harmless warning
-#endif
-
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// variant.hpp - non-intrusive serialization of variant types
//
@@ -70,7 +66,7 @@ void save(
){
int which = v.which();
ar << BOOST_SERIALIZATION_NVP(which);
- typedef BOOST_DEDUCED_TYPENAME boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types types;
+ typedef typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types types;
variant_save_visitor<Archive> visitor(ar);
v.apply_visitor(visitor);
}
@@ -101,14 +97,14 @@ struct variant_impl {
// necessary has to copy the value. This wouldn't be necessary
// with an implementation that de-serialized to the address of the
// aligned storage included in the variant.
- typedef BOOST_DEDUCED_TYPENAME mpl::front<S>::type head_type;
+ typedef typename mpl::front<S>::type head_type;
head_type value;
ar >> BOOST_SERIALIZATION_NVP(value);
v = value;
ar.reset_object_address(& boost::get<head_type>(v), & value);
return;
}
- typedef BOOST_DEDUCED_TYPENAME mpl::pop_front<S>::type type;
+ typedef typename mpl::pop_front<S>::type type;
variant_impl<type>::load(ar, which - 1, v, version);
}
};
@@ -120,7 +116,7 @@ struct variant_impl {
V & v,
const unsigned int version
){
- typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<mpl::empty<S>,
+ typedef typename mpl::eval_if<mpl::empty<S>,
mpl::identity<load_null>,
mpl::identity<load_impl>
>::type typex;
@@ -136,7 +132,7 @@ void load(
const unsigned int version
){
int which;
- typedef BOOST_DEDUCED_TYPENAME boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types types;
+ typedef typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types types;
ar >> BOOST_SERIALIZATION_NVP(which);
if(which >= mpl::size<types>::value)
// this might happen if a type was removed from the list of variant types
diff --git a/3party/boost/boost/serialization/vector.hpp b/3party/boost/boost/serialization/vector.hpp
index 7520c09a00..3af1d67695 100644
--- a/3party/boost/boost/serialization/vector.hpp
+++ b/3party/boost/boost/serialization/vector.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_VECTOR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -121,9 +121,9 @@ inline void save(
const std::vector<U, Allocator> &t,
const unsigned int file_version
){
- typedef BOOST_DEDUCED_TYPENAME
+ typedef typename
boost::serialization::use_array_optimization<Archive>::template apply<
- BOOST_DEDUCED_TYPENAME remove_const<U>::type
+ typename remove_const<U>::type
>::type use_optimized;
save(ar,t,file_version, use_optimized());
}
@@ -141,9 +141,9 @@ inline void load(
return;
}
#endif
- typedef BOOST_DEDUCED_TYPENAME
+ typedef typename
boost::serialization::use_array_optimization<Archive>::template apply<
- BOOST_DEDUCED_TYPENAME remove_const<U>::type
+ typename remove_const<U>::type
>::type use_optimized;
load(ar,t,file_version, use_optimized());
}
@@ -159,8 +159,6 @@ inline void serialize(
boost::serialization::split_free(ar, t, file_version);
}
-#if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// vector<bool>
template<class Archive, class Allocator>
@@ -207,8 +205,6 @@ inline void serialize(
boost::serialization::split_free(ar, t, file_version);
}
-#endif // BOOST_WORKAROUND
-
} // serialization
} // namespace boost
diff --git a/3party/boost/boost/serialization/version.hpp b/3party/boost/boost/serialization/version.hpp
index ef3dff2f47..21a74d73da 100644
--- a/3party/boost/boost/serialization/version.hpp
+++ b/3party/boost/boost/serialization/version.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_VERSION_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -37,14 +37,14 @@ struct version
{
template<class U>
struct traits_class_version {
- typedef BOOST_DEDUCED_TYPENAME U::version type;
+ typedef typename U::version type;
};
typedef mpl::integral_c_tag tag;
// note: at least one compiler complained w/o the full qualification
// on basic traits below
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ typename mpl::eval_if<
is_base_and_derived<boost::serialization::basic_traits,T>,
traits_class_version< T >,
mpl::int_<0>
diff --git a/3party/boost/boost/serialization/void_cast.hpp b/3party/boost/boost/serialization/void_cast.hpp
index b5b1e8577f..61b6449ef1 100644
--- a/3party/boost/boost/serialization/void_cast.hpp
+++ b/3party/boost/boost/serialization/void_cast.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_VOID_CAST_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -181,13 +181,13 @@ void_caster_primitive<Derived, Base>::void_caster_primitive() :
void_caster(
& type_info_implementation<Derived>::type::get_const_instance(),
& type_info_implementation<Base>::type::get_const_instance(),
- // note:I wanted to display from 0 here, but at least one compiler
+ // note:I wanted to displace from 0 here, but at least one compiler
// treated 0 by not shifting it at all.
reinterpret_cast<std::ptrdiff_t>(
static_cast<Derived *>(
- reinterpret_cast<Base *>(1)
+ reinterpret_cast<Base *>(8)
)
- ) - 1
+ ) - 8
)
{
recursive_register();
@@ -248,7 +248,7 @@ struct void_caster_base :
public void_caster
{
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<boost::is_virtual_base_of<Base,Derived>,
+ typename mpl::eval_if<boost::is_virtual_base_of<Base,Derived>,
mpl::identity<
void_cast_detail::void_caster_virtual_base<Derived, Base>
>
@@ -268,7 +268,7 @@ inline const void_cast_detail::void_caster & void_cast_register(
Base const * /* bnull = NULL */
){
typedef
- BOOST_DEDUCED_TYPENAME mpl::eval_if<boost::is_virtual_base_of<Base,Derived>,
+ typename mpl::eval_if<boost::is_virtual_base_of<Base,Derived>,
mpl::identity<
void_cast_detail::void_caster_virtual_base<Derived, Base>
>
diff --git a/3party/boost/boost/serialization/void_cast_fwd.hpp b/3party/boost/boost/serialization/void_cast_fwd.hpp
index c94adb2ec2..def61d52bb 100644
--- a/3party/boost/boost/serialization/void_cast_fwd.hpp
+++ b/3party/boost/boost/serialization/void_cast_fwd.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_VOID_CAST_FWD_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/serialization/weak_ptr.hpp b/3party/boost/boost/serialization/weak_ptr.hpp
index 3fe8698de3..b3af8bfed3 100644
--- a/3party/boost/boost/serialization/weak_ptr.hpp
+++ b/3party/boost/boost/serialization/weak_ptr.hpp
@@ -2,7 +2,7 @@
#define BOOST_SERIALIZATION_WEAK_PTR_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -55,4 +55,45 @@ inline void serialize(
} // namespace serialization
} // namespace boost
+#ifndef BOOST_NO_CXX11_SMART_PTR
+#include <memory>
+
+namespace boost {
+namespace serialization{
+
+template<class Archive, class T>
+inline void save(
+ Archive & ar,
+ const std::weak_ptr< T > &t,
+ const unsigned int /* file_version */
+){
+ const std::shared_ptr< T > sp = t.lock();
+ ar << boost::serialization::make_nvp("weak_ptr", sp);
+}
+
+template<class Archive, class T>
+inline void load(
+ Archive & ar,
+ std::weak_ptr< T > &t,
+ const unsigned int /* file_version */
+){
+ std::shared_ptr< T > sp;
+ ar >> boost::serialization::make_nvp("weak_ptr", sp);
+ t = sp;
+}
+
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar,
+ std::weak_ptr< T > &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_NO_CXX11_SMART_PTR
+
#endif // BOOST_SERIALIZATION_WEAK_PTR_HPP
diff --git a/3party/boost/boost/serialization/wrapper.hpp b/3party/boost/boost/serialization/wrapper.hpp
index eeb4333cac..6a2a730dde 100644
--- a/3party/boost/boost/serialization/wrapper.hpp
+++ b/3party/boost/boost/serialization/wrapper.hpp
@@ -41,7 +41,7 @@ struct is_wrapper_impl :
template<class T>
struct is_wrapper {
- typedef BOOST_DEDUCED_TYPENAME is_wrapper_impl<const T>::type type;
+ typedef typename is_wrapper_impl<const T>::type type;
};
} // serialization
diff --git a/3party/boost/boost/signals/detail/named_slot_map.hpp b/3party/boost/boost/signals/detail/named_slot_map.hpp
index 88625faea2..3f7cf1c5c2 100644
--- a/3party/boost/boost/signals/detail/named_slot_map.hpp
+++ b/3party/boost/boost/signals/detail/named_slot_map.hpp
@@ -13,7 +13,6 @@
#include <boost/signals/detail/config.hpp>
#include <boost/signals/detail/signals_common.hpp>
#include <boost/signals/connection.hpp>
-#include <boost/utility.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/function/function2.hpp>
#include <boost/iterator/iterator_facade.hpp>
@@ -127,7 +126,7 @@ public:
|| slot_ == other.slot_));
}
-#if BOOST_WORKAROUND(_MSC_VER, <= 1700)
+#if BOOST_WORKAROUND(_MSC_VER, <= 1900)
void decrement();
void advance(difference_type);
#endif
diff --git a/3party/boost/boost/signals/detail/signal_base.hpp b/3party/boost/boost/signals/detail/signal_base.hpp
index 0438cf7bae..991e9fcaa4 100644
--- a/3party/boost/boost/signals/detail/signal_base.hpp
+++ b/3party/boost/boost/signals/detail/signal_base.hpp
@@ -17,7 +17,7 @@
#include <boost/signals/trackable.hpp>
#include <boost/signals/slot.hpp>
#include <boost/smart_ptr.hpp>
-#include <boost/utility.hpp>
+#include <boost/noncopyable.hpp>
#include <boost/function/function2.hpp>
#include <utility>
#include <vector>
diff --git a/3party/boost/boost/signals/detail/signals_common.hpp b/3party/boost/boost/signals/detail/signals_common.hpp
index fe1a5a13ba..9cf078d70f 100644
--- a/3party/boost/boost/signals/detail/signals_common.hpp
+++ b/3party/boost/boost/signals/detail/signals_common.hpp
@@ -97,7 +97,6 @@ namespace boost {
};
// Determine if the incoming argument is a reference_wrapper
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<typename T>
struct is_ref
{
@@ -109,23 +108,6 @@ namespace boost {
{
BOOST_STATIC_CONSTANT(bool, value = true);
};
-#else // no partial specialization
- typedef char yes_type;
- typedef double no_type;
-
- no_type is_ref_tester(...);
-
- template<typename T>
- yes_type is_ref_tester(reference_wrapper<T>*);
-
- template<typename T>
- struct is_ref
- {
- static T* t;
- BOOST_STATIC_CONSTANT(bool,
- value = (sizeof(is_ref_tester(t)) == sizeof(yes_type)));
- };
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// A slot can be a signal, a reference to a function object, or a
// function object.
diff --git a/3party/boost/boost/signals/signal_template.hpp b/3party/boost/boost/signals/signal_template.hpp
index 6b0b91a8e6..94e1d1aad3 100644
--- a/3party/boost/boost/signals/signal_template.hpp
+++ b/3party/boost/boost/signals/signal_template.hpp
@@ -16,7 +16,6 @@
#define BOOST_SIGNALS_SIGNAL_TEMPLATE_HEADER_INCLUDED
# include <boost/config.hpp>
# include <boost/signals/connection.hpp>
-# include <boost/utility.hpp>
# include <boost/ref.hpp>
# include <boost/signals/slot.hpp>
# include <boost/last_value.hpp>
@@ -210,13 +209,6 @@ namespace boost {
BOOST_SIGNALS_NAMESPACE::connect_position at
= BOOST_SIGNALS_NAMESPACE::at_back);
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- // MSVC 6.0 and 7.0 don't handle the is_convertible test well
- void disconnect(const group_type& group)
- {
- impl->disconnect(group);
- }
-#else
template<typename T>
void disconnect(const T& t)
{
@@ -242,7 +234,6 @@ namespace boost {
if (s == f) i->first.disconnect();
}
}
-#endif
public:
diff --git a/3party/boost/boost/signals2/connection.hpp b/3party/boost/boost/signals2/connection.hpp
index 0271a3c1f1..0ab4dacbf6 100644
--- a/3party/boost/boost/signals2/connection.hpp
+++ b/3party/boost/boost/signals2/connection.hpp
@@ -158,6 +158,32 @@ namespace boost
connection(const boost::weak_ptr<detail::connection_body_base> &connectionBody):
_weak_connection_body(connectionBody)
{}
+
+ // move support
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ connection(connection && other): _weak_connection_body(std::move(other._weak_connection_body))
+ {
+ // make sure other is reset, in case it is a scoped_connection (so it
+ // won't disconnect on destruction after being moved away from).
+ other._weak_connection_body.reset();
+ }
+ connection & operator=(connection && other)
+ {
+ if(&other == this) return *this;
+ _weak_connection_body = std::move(other._weak_connection_body);
+ // make sure other is reset, in case it is a scoped_connection (so it
+ // won't disconnect on destruction after being moved away from).
+ other._weak_connection_body.reset();
+ return *this;
+ }
+#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ connection & operator=(const connection & other)
+ {
+ if(&other == this) return *this;
+ _weak_connection_body = other._weak_connection_body;
+ return *this;
+ }
+
~connection() {}
void disconnect() const
{
@@ -224,6 +250,31 @@ namespace boost
connection::operator=(rhs);
return *this;
}
+
+ // move support
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ scoped_connection(scoped_connection && other): connection(std::move(other))
+ {
+ }
+ scoped_connection(connection && other): connection(std::move(other))
+ {
+ }
+ scoped_connection & operator=(scoped_connection && other)
+ {
+ if(&other == this) return *this;
+ disconnect();
+ connection::operator=(std::move(other));
+ return *this;
+ }
+ scoped_connection & operator=(connection && other)
+ {
+ if(&other == this) return *this;
+ disconnect();
+ connection::operator=(std::move(other));
+ return *this;
+ }
+#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
connection release()
{
connection conn(_weak_connection_body);
diff --git a/3party/boost/boost/signals2/detail/auto_buffer.hpp b/3party/boost/boost/signals2/detail/auto_buffer.hpp
index c0baf0cee8..bf12e698e2 100644
--- a/3party/boost/boost/signals2/detail/auto_buffer.hpp
+++ b/3party/boost/boost/signals2/detail/auto_buffer.hpp
@@ -8,7 +8,7 @@
#include <boost/detail/workaround.hpp>
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/signals2/detail/lwm_nop.hpp b/3party/boost/boost/signals2/detail/lwm_nop.hpp
index 841f1d5b4c..2b705440ed 100644
--- a/3party/boost/boost/signals2/detail/lwm_nop.hpp
+++ b/3party/boost/boost/signals2/detail/lwm_nop.hpp
@@ -14,7 +14,7 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/signals2/detail/lwm_pthreads.hpp b/3party/boost/boost/signals2/detail/lwm_pthreads.hpp
index d9332220cb..fb0dd66e71 100644
--- a/3party/boost/boost/signals2/detail/lwm_pthreads.hpp
+++ b/3party/boost/boost/signals2/detail/lwm_pthreads.hpp
@@ -14,11 +14,11 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
-
+#include <boost/assert.hpp>
#include <pthread.h>
namespace boost
@@ -44,20 +44,20 @@ public:
// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init
#if defined(__hpux) && defined(_DECTHREADS_)
- pthread_mutex_init(&m_, pthread_mutexattr_default);
+ BOOST_VERIFY(pthread_mutex_init(&m_, pthread_mutexattr_default) == 0);
#else
- pthread_mutex_init(&m_, 0);
+ BOOST_VERIFY(pthread_mutex_init(&m_, 0) == 0);
#endif
}
~mutex()
{
- pthread_mutex_destroy(&m_);
+ BOOST_VERIFY(pthread_mutex_destroy(&m_) == 0);
}
void lock()
{
- pthread_mutex_lock(&m_);
+ BOOST_VERIFY(pthread_mutex_lock(&m_) == 0);
}
bool try_lock()
@@ -67,7 +67,7 @@ public:
void unlock()
{
- pthread_mutex_unlock(&m_);
+ BOOST_VERIFY(pthread_mutex_unlock(&m_) == 0);
}
};
diff --git a/3party/boost/boost/signals2/detail/lwm_win32_cs.hpp b/3party/boost/boost/signals2/detail/lwm_win32_cs.hpp
index a45e2c2fa5..d1c1965dea 100644
--- a/3party/boost/boost/signals2/detail/lwm_win32_cs.hpp
+++ b/3party/boost/boost/signals2/detail/lwm_win32_cs.hpp
@@ -3,6 +3,7 @@
//
// Copyright (c) 2002, 2003 Peter Dimov
// Copyright (c) 2008 Frank Mori Hess
+// Copyright (c) Microsoft Corporation 2014
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -14,7 +15,7 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -24,6 +25,8 @@
# include <windows.h>
#endif
+#include <boost/predef/platform.h>
+
namespace boost
{
@@ -46,7 +49,11 @@ struct critical_section
#endif
};
+#if BOOST_PLAT_WINDOWS_RUNTIME
+extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(critical_section *, unsigned long, unsigned long);
+#else
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *);
+#endif
extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);
extern "C" __declspec(dllimport) bool __stdcall TryEnterCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);
@@ -71,7 +78,11 @@ public:
mutex()
{
+#if BOOST_PLAT_WINDOWS_RUNTIME
+ InitializeCriticalSectionEx(&cs_, 4000, 0);
+#else
InitializeCriticalSection(&cs_);
+#endif
}
~mutex()
diff --git a/3party/boost/boost/signals2/detail/signal_template.hpp b/3party/boost/boost/signals2/detail/signal_template.hpp
index 31066969ce..bb5d3a4f56 100644
--- a/3party/boost/boost/signals2/detail/signal_template.hpp
+++ b/3party/boost/boost/signals2/detail/signal_template.hpp
@@ -657,8 +657,31 @@ namespace boost
{};
virtual ~BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS)()
{
- disconnect_all_slots();
}
+
+ //move support
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS)(
+ BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) && other)
+ {
+ using std::swap;
+ swap(_pimpl, other._pimpl);
+ };
+
+ BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) &
+ operator=(BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) && rhs)
+ {
+ if(this == &rhs)
+ {
+ return *this;
+ }
+ _pimpl.reset();
+ using std::swap;
+ swap(_pimpl, rhs._pimpl);
+ return *this;
+ }
+#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
connection connect(const slot_type &slot, connect_position position = at_back)
{
return (*_pimpl).connect(slot, position);
@@ -737,7 +760,7 @@ namespace boost
BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) <BOOST_SIGNALS2_SIGNAL_TEMPLATE_INSTANTIATION> &sig2 )
{
sig1.swap(sig2);
- };
+ }
#endif
namespace detail
diff --git a/3party/boost/boost/signals2/detail/signals_common_macros.hpp b/3party/boost/boost/signals2/detail/signals_common_macros.hpp
index df9b0900d8..b149dbc288 100644
--- a/3party/boost/boost/signals2/detail/signals_common_macros.hpp
+++ b/3party/boost/boost/signals2/detail/signals_common_macros.hpp
@@ -160,7 +160,6 @@
#define BOOST_SIGNALS2_SIGNATURE_FULL_ARGS(arity) Args ... args
#define BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(arity) args...
#define BOOST_SIGNALS2_PORTABLE_SIGNATURE(arity, Signature) Signature
-#define BOOST_SIGNALS2_SLOT_CLASS_NAME(arity) slot
#define BOOST_SIGNALS2_SLOT_TEMPLATE_SPECIALIZATION_DECL(arity) \
typename SlotFunction, \
diff --git a/3party/boost/boost/signals2/detail/slot_template.hpp b/3party/boost/boost/signals2/detail/slot_template.hpp
index 3075cde4b4..fc19f5139c 100644
--- a/3party/boost/boost/signals2/detail/slot_template.hpp
+++ b/3party/boost/boost/signals2/detail/slot_template.hpp
@@ -22,12 +22,16 @@ namespace boost
{
namespace signals2
{
+#ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES
template<typename Signature, typename SlotFunction> class slot;
+#else
+ template<typename Signature, typename SlotFunction = boost::function<Signature> >
+ class slot;
- // slot class template.
- template<BOOST_SIGNALS2_SIGNATURE_TEMPLATE_DECL(BOOST_SIGNALS2_NUM_ARGS),
- typename SlotFunction = BOOST_SIGNALS2_FUNCTION_N_DECL(BOOST_SIGNALS2_NUM_ARGS)>
- class BOOST_SIGNALS2_SLOT_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS);
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1900)
+ template<typename Signature, typename SlotFunction> class slot{};
+#endif
+#endif // BOOST_NO_CXX11_VARIADIC_TEMPLATES
template<BOOST_SIGNALS2_SLOT_TEMPLATE_SPECIALIZATION_DECL(BOOST_SIGNALS2_NUM_ARGS)>
class BOOST_SIGNALS2_SLOT_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) BOOST_SIGNALS2_SLOT_TEMPLATE_SPECIALIZATION
diff --git a/3party/boost/boost/signals2/detail/variadic_slot_invoker.hpp b/3party/boost/boost/signals2/detail/variadic_slot_invoker.hpp
index 2af0b320f6..6d9227efb8 100644
--- a/3party/boost/boost/signals2/detail/variadic_slot_invoker.hpp
+++ b/3party/boost/boost/signals2/detail/variadic_slot_invoker.hpp
@@ -15,6 +15,11 @@
#ifndef BOOST_SIGNALS2_DETAIL_VARIADIC_SLOT_INVOKER_HPP
#define BOOST_SIGNALS2_DETAIL_VARIADIC_SLOT_INVOKER_HPP
+#if defined(_MSVC_VER)
+# pragma warning(push)
+# pragma warning(disable:4100) // unreferenced formal parameter
+#endif
+
#include <boost/mpl/size_t.hpp>
#include <boost/signals2/detail/variadic_arg_type.hpp>
@@ -115,7 +120,6 @@ namespace boost
const void_type *) const
{
return call_with_tuple_args<result_type>()(connectionBody->slot.slot_function(), _args, mpl::size_t<sizeof...(Args)>());
- return void_type();
}
template<typename ConnectionBodyType>
result_type m_invoke(const ConnectionBodyType &connectionBody, ...) const
@@ -128,5 +132,8 @@ namespace boost
} // namespace signals2
} // namespace boost
+#if defined(_MSVC_VER)
+# pragma warning(pop)
+#endif
#endif // BOOST_SIGNALS2_DETAIL_VARIADIC_SLOT_INVOKER_HPP
diff --git a/3party/boost/boost/signals2/mutex.hpp b/3party/boost/boost/signals2/mutex.hpp
index cb35bdf26d..e58aca1c96 100644
--- a/3party/boost/boost/signals2/mutex.hpp
+++ b/3party/boost/boost/signals2/mutex.hpp
@@ -18,7 +18,7 @@
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/signals2/preprocessed_signal.hpp b/3party/boost/boost/signals2/preprocessed_signal.hpp
index 25788c158d..28471ba4ae 100644
--- a/3party/boost/boost/signals2/preprocessed_signal.hpp
+++ b/3party/boost/boost/signals2/preprocessed_signal.hpp
@@ -48,6 +48,10 @@ namespace boost
signal(const Combiner &combiner_arg = Combiner(), const GroupCompare &group_compare = GroupCompare()):
base_type(combiner_arg, group_compare)
{}
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && BOOST_WORKAROUND(BOOST_MSVC, < 1800)
+ signal(signal && other) : base_type(std::move(other)) {}
+ signal & operator=(signal && other) { base_type::operator=(std::move(other)); return *this; }
+#endif
};
}
}
diff --git a/3party/boost/boost/signals2/signal.hpp b/3party/boost/boost/signals2/signal.hpp
index 7fea19b603..c04c9e6164 100644
--- a/3party/boost/boost/signals2/signal.hpp
+++ b/3party/boost/boost/signals2/signal.hpp
@@ -55,7 +55,7 @@ namespace boost
signal<Signature, Combiner, Group, GroupCompare, SlotFunction, ExtendedSlotFunction, Mutex> &sig2)
{
sig1.swap(sig2);
- };
+ }
}
}
diff --git a/3party/boost/boost/signals2/slot_base.hpp b/3party/boost/boost/signals2/slot_base.hpp
index f7f6d39f19..d2dd946332 100644
--- a/3party/boost/boost/signals2/slot_base.hpp
+++ b/3party/boost/boost/signals2/slot_base.hpp
@@ -12,7 +12,6 @@
#ifndef BOOST_SIGNALS2_SLOT_BASE_HPP
#define BOOST_SIGNALS2_SLOT_BASE_HPP
-#include <boost/any.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/signals2/detail/foreign_ptr.hpp>
diff --git a/3party/boost/boost/signals2/variadic_slot.hpp b/3party/boost/boost/signals2/variadic_slot.hpp
index 6b43f69e8f..59ae17600d 100644
--- a/3party/boost/boost/signals2/variadic_slot.hpp
+++ b/3party/boost/boost/signals2/variadic_slot.hpp
@@ -14,9 +14,10 @@
#include <boost/signals2/detail/variadic_arg_type.hpp>
#define BOOST_SIGNALS2_SLOT_N_BINDING_CONSTRUCTORS \
- template<typename ... BindArgs> slot(const BindArgs & ... args) \
+ template<typename A1, typename A2, typename ... BindArgs> \
+ slot(const A1 &arg1, const A2 &arg2, const BindArgs & ... args) \
{ \
- init_slot_function(boost::bind(args...)); \
+ init_slot_function(boost::bind(arg1, arg2, args...)); \
}
diff --git a/3party/boost/boost/smart_ptr/allocate_shared_array.hpp b/3party/boost/boost/smart_ptr/allocate_shared_array.hpp
index 3ee16552e3..1ae5cc7832 100644
--- a/3party/boost/boost/smart_ptr/allocate_shared_array.hpp
+++ b/3party/boost/boost/smart_ptr/allocate_shared_array.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012 Glen Joseph Fernandes
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes
* glenfe at live dot com
*
* Distributed under the Boost Software License,
@@ -9,241 +9,172 @@
#ifndef BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP
#define BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP
-#include <boost/smart_ptr/shared_ptr.hpp>
-#include <boost/smart_ptr/detail/allocate_array_helper.hpp>
-#include <boost/smart_ptr/detail/array_deleter.hpp>
-#include <boost/smart_ptr/detail/array_traits.hpp>
+#include <boost/smart_ptr/detail/array_count_impl.hpp>
#include <boost/smart_ptr/detail/sp_if_array.hpp>
-#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
-#include <initializer_list>
-#endif
namespace boost {
- template<typename T, typename A>
+ template<class T, class A>
inline typename boost::detail::sp_if_array<T>::type
allocate_shared(const A& allocator, std::size_t size) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
- T1* p1 = 0;
- T2* p2 = 0;
+ typedef boost::detail::ms_init_tag R1;
+ typedef boost::detail::as_allocator<A, T, R1> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
std::size_t n1 = size * boost::detail::array_total<T1>::size;
- boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2);
- return boost::shared_ptr<T>(s1, p1);
- }
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- template<typename T, typename A, typename... Args>
- inline typename boost::detail::sp_if_array<T>::type
- allocate_shared(const A& allocator, std::size_t size, Args&&... args) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
T1* p1 = 0;
T2* p2 = 0;
- std::size_t n1 = size * boost::detail::array_total<T1>::size;
- boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
+ D1 d1;
+ A1 a1(allocator, size, &p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ boost::detail::as_init(allocator, p2, n1);
+#else
+ boost::detail::ms_init(p2, n1);
+#endif
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2, boost::detail::sp_forward<Args>(args)...);
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
- template<typename T, typename A, typename... Args>
+
+ template<class T, class A>
inline typename boost::detail::sp_if_size_array<T>::type
- allocate_shared(const A& allocator, Args&&... args) {
+ allocate_shared(const A& allocator) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
+ typedef boost::detail::ms_init_tag R1;
+ typedef boost::detail::as_allocator<A, T, R1> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
enum {
N = boost::detail::array_total<T>::size
};
T1* p1 = 0;
T2* p2 = 0;
- boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2, boost::detail::sp_forward<Args>(args)...);
- return boost::shared_ptr<T>(s1, p1);
- }
+ D1 d1;
+ A1 a1(allocator, &p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ boost::detail::as_init(allocator, p2, N);
+#else
+ boost::detail::ms_init(p2, N);
#endif
-#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
- template<typename T, typename A>
- inline typename boost::detail::sp_if_size_array<T>::type
- allocate_shared(const A& allocator, const T& list) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
- typedef const T2 T3;
- enum {
- N = boost::detail::array_total<T>::size
- };
- T1* p1 = 0;
- T2* p2 = 0;
- T3* p3 = 0;
- boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
- p3 = reinterpret_cast<T3*>(list);
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init_list(p2, p3);
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
- template<typename T, typename A>
+
+ template<class T, class A>
inline typename boost::detail::sp_if_array<T>::type
allocate_shared(const A& allocator, std::size_t size,
- const typename boost::detail::array_inner<T>::type& list) {
+ const typename boost::detail::array_inner<T>::type& value) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
typedef const T2 T3;
+ typedef boost::detail::ms_init_tag R1;
+ typedef boost::detail::as_allocator<A, T, R1> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
enum {
M = boost::detail::array_total<T1>::size
};
- T1* p1 = 0;
- T2* p2 = 0;
- T3* p3 = 0;
std::size_t n1 = M * size;
- boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
- p3 = reinterpret_cast<T3*>(list);
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->template init_list<M>(p2, p3);
- return boost::shared_ptr<T>(s1, p1);
- }
- template<typename T, typename A>
- inline typename boost::detail::sp_if_size_array<T>::type
- allocate_shared(const A& allocator,
- const typename boost::detail::array_inner<T>::type& list) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
- typedef const T2 T3;
- enum {
- M = boost::detail::array_total<T1>::size,
- N = boost::detail::array_total<T>::size
- };
- T1* p1 = 0;
- T2* p2 = 0;
- T3* p3 = 0;
- boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
- p3 = reinterpret_cast<T3*>(list);
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->template init_list<M>(p2, p3);
- return boost::shared_ptr<T>(s1, p1);
- }
-#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
- template<typename T, typename A>
- inline typename boost::detail::sp_if_array<T>::type
- allocate_shared(const A& allocator,
- std::initializer_list<typename boost::detail::array_inner<T>::type> list) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
- typedef const T2 T3;
T1* p1 = 0;
T2* p2 = 0;
- T3* p3 = 0;
- std::size_t n1 = list.size() * boost::detail::array_total<T1>::size;
- boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
- p3 = reinterpret_cast<T3*>(list.begin());
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init_list(p2, p3);
- return boost::shared_ptr<T>(s1, p1);
- }
+ T3* p3 = reinterpret_cast<T3*>(&value);
+ D1 d1;
+ A1 a1(allocator, size, &p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ boost::detail::as_init<T2, A, M>(allocator, p2, n1, p3);
+#else
+ boost::detail::ms_init<T2, M>(p2, n1, p3);
#endif
-#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- template<typename T, typename A>
- inline typename boost::detail::sp_if_array<T>::type
- allocate_shared(const A& allocator, std::size_t size,
- typename boost::detail::array_base<T>::type&& value) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
- T1* p1 = 0;
- T2* p2 = 0;
- std::size_t n1 = size * boost::detail::array_total<T1>::size;
- boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2, boost::detail::sp_forward<T2>(value));
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
- template<typename T, typename A>
+
+ template<class T, class A>
inline typename boost::detail::sp_if_size_array<T>::type
- allocate_shared(const A& allocator,
- typename boost::detail::array_base<T>::type&& value) {
+ allocate_shared(const A& allocator,
+ const typename boost::detail::array_inner<T>::type& value) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
+ typedef const T2 T3;
+ typedef boost::detail::ms_init_tag R1;
+ typedef boost::detail::as_allocator<A, T, R1> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
enum {
- N = boost::detail::array_total<T>::size
+ N = boost::detail::array_total<T>::size,
+ M = boost::detail::array_total<T1>::size
};
T1* p1 = 0;
T2* p2 = 0;
- boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
+ T3* p3 = reinterpret_cast<T3*>(&value);
+ D1 d1;
+ A1 a1(allocator, &p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ boost::detail::as_init<T2, A, M>(allocator, p2, N, p3);
+#else
+ boost::detail::ms_init<T2, M>(p2, N, p3);
+#endif
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2, boost::detail::sp_forward<T2>(value));
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
-#endif
-#endif
- template<typename T, typename A>
+
+ template<class T, class A>
inline typename boost::detail::sp_if_array<T>::type
allocate_shared_noinit(const A& allocator, std::size_t size) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
+ typedef boost::detail::ms_noinit_tag R1;
+ typedef boost::detail::as_allocator<A, T, R1> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
+ std::size_t n1 = size * boost::detail::array_total<T1>::size;
T1* p1 = 0;
T2* p2 = 0;
- std::size_t n1 = size * boost::detail::array_total<T1>::size;
- boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
+ D1 d1;
+ A1 a1(allocator, size, &p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+ boost::detail::ms_noinit(p2, n1);
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->noinit(p2);
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
- template<typename T, typename A>
+
+ template<class T, class A>
inline typename boost::detail::sp_if_size_array<T>::type
allocate_shared_noinit(const A& allocator) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
+ typedef boost::detail::ms_noinit_tag R1;
+ typedef boost::detail::as_allocator<A, T, R1> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
enum {
N = boost::detail::array_total<T>::size
};
T1* p1 = 0;
T2* p2 = 0;
- boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
+ D1 d1;
+ A1 a1(allocator, &p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+ boost::detail::ms_noinit(p2, N);
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->noinit(p2);
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
}
diff --git a/3party/boost/boost/smart_ptr/detail/allocate_array_helper.hpp b/3party/boost/boost/smart_ptr/detail/allocate_array_helper.hpp
deleted file mode 100644
index 2eeea2d3fa..0000000000
--- a/3party/boost/boost/smart_ptr/detail/allocate_array_helper.hpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 2012 Glen Joseph Fernandes
- * glenfe at live dot com
- *
- * Distributed under the Boost Software License,
- * Version 1.0. (See accompanying file LICENSE_1_0.txt
- * or copy at http://boost.org/LICENSE_1_0.txt)
- */
-#ifndef BOOST_SMART_PTR_DETAIL_ALLOCATE_ARRAY_HELPER_HPP
-#define BOOST_SMART_PTR_DETAIL_ALLOCATE_ARRAY_HELPER_HPP
-
-#include <boost/type_traits/alignment_of.hpp>
-
-namespace boost {
- namespace detail {
- template<typename A, typename T, typename Y = char>
- class allocate_array_helper;
- template<typename A, typename T, typename Y>
- class allocate_array_helper<A, T[], Y> {
- template<typename A9, typename T9, typename Y9>
- friend class allocate_array_helper;
- typedef typename A::template rebind<Y> ::other A2;
- typedef typename A::template rebind<char>::other A3;
- public:
- typedef typename A2::value_type value_type;
- typedef typename A2::pointer pointer;
- typedef typename A2::const_pointer const_pointer;
- typedef typename A2::reference reference;
- typedef typename A2::const_reference const_reference;
- typedef typename A2::size_type size_type;
- typedef typename A2::difference_type difference_type;
- template<typename U>
- struct rebind {
- typedef allocate_array_helper<A, T[], U> other;
- };
- allocate_array_helper(const A& allocator_, std::size_t size_, T** data_)
- : allocator(allocator_),
- size(sizeof(T) * size_),
- data(data_) {
- }
- template<class U>
- allocate_array_helper(const allocate_array_helper<A, T[], U>& other)
- : allocator(other.allocator),
- size(other.size),
- data(other.data) {
- }
- pointer address(reference value) const {
- return allocator.address(value);
- }
- const_pointer address(const_reference value) const {
- return allocator.address(value);
- }
- size_type max_size() const {
- return allocator.max_size();
- }
- pointer allocate(size_type count, const void* value = 0) {
- std::size_t a1 = boost::alignment_of<T>::value;
- std::size_t n1 = count * sizeof(Y) + a1 - 1;
- char* p1 = A3(allocator).allocate(n1 + size, value);
- char* p2 = p1 + n1;
- while (std::size_t(p2) % a1 != 0) {
- p2--;
- }
- *data = reinterpret_cast<T*>(p2);
- return reinterpret_cast<Y*>(p1);
- }
- void deallocate(pointer memory, size_type count) {
- std::size_t a1 = boost::alignment_of<T>::value;
- std::size_t n1 = count * sizeof(Y) + a1 - 1;
- char* p1 = reinterpret_cast<char*>(memory);
- A3(allocator).deallocate(p1, n1 + size);
- }
- void construct(pointer memory, const Y& value) {
- allocator.construct(memory, value);
- }
- void destroy(pointer memory) {
- allocator.destroy(memory);
- }
- template<typename U>
- bool operator==(const allocate_array_helper<A, T[], U>& other) const {
- return allocator == other.allocator;
- }
- template<typename U>
- bool operator!=(const allocate_array_helper<A, T[], U>& other) const {
- return !(*this == other);
- }
- private:
- A2 allocator;
- std::size_t size;
- T** data;
- };
- template<typename A, typename T, std::size_t N, typename Y>
- class allocate_array_helper<A, T[N], Y> {
- template<typename A9, typename T9, typename Y9>
- friend class allocate_array_helper;
- typedef typename A::template rebind<Y> ::other A2;
- typedef typename A::template rebind<char>::other A3;
- public:
- typedef typename A2::value_type value_type;
- typedef typename A2::pointer pointer;
- typedef typename A2::const_pointer const_pointer;
- typedef typename A2::reference reference;
- typedef typename A2::const_reference const_reference;
- typedef typename A2::size_type size_type;
- typedef typename A2::difference_type difference_type;
- template<typename U>
- struct rebind {
- typedef allocate_array_helper<A, T[N], U> other;
- };
- allocate_array_helper(const A& allocator_, T** data_)
- : allocator(allocator_),
- data(data_) {
- }
- template<class U>
- allocate_array_helper(const allocate_array_helper<A, T[N], U>& other)
- : allocator(other.allocator),
- data(other.data) {
- }
- pointer address(reference value) const {
- return allocator.address(value);
- }
- const_pointer address(const_reference value) const {
- return allocator.address(value);
- }
- size_type max_size() const {
- return allocator.max_size();
- }
- pointer allocate(size_type count, const void* value = 0) {
- std::size_t a1 = boost::alignment_of<T>::value;
- std::size_t n1 = count * sizeof(Y) + a1 - 1;
- char* p1 = A3(allocator).allocate(n1 + N1, value);
- char* p2 = p1 + n1;
- while (std::size_t(p2) % a1 != 0) {
- p2--;
- }
- *data = reinterpret_cast<T*>(p2);
- return reinterpret_cast<Y*>(p1);
- }
- void deallocate(pointer memory, size_type count) {
- std::size_t a1 = boost::alignment_of<T>::value;
- std::size_t n1 = count * sizeof(Y) + a1 - 1;
- char* p1 = reinterpret_cast<char*>(memory);
- A3(allocator).deallocate(p1, n1 + N1);
- }
- void construct(pointer memory, const Y& value) {
- allocator.construct(memory, value);
- }
- void destroy(pointer memory) {
- allocator.destroy(memory);
- }
- template<typename U>
- bool operator==(const allocate_array_helper<A, T[N], U>& other) const {
- return allocator == other.allocator;
- }
- template<typename U>
- bool operator!=(const allocate_array_helper<A, T[N], U>& other) const {
- return !(*this == other);
- }
- private:
- enum {
- N1 = N * sizeof(T)
- };
- A2 allocator;
- T** data;
- };
- }
-}
-
-#endif
diff --git a/3party/boost/boost/smart_ptr/detail/array_allocator.hpp b/3party/boost/boost/smart_ptr/detail/array_allocator.hpp
new file mode 100644
index 0000000000..4f9dc2b4b8
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/array_allocator.hpp
@@ -0,0 +1,318 @@
+/*
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_ALLOCATOR_HPP
+#define BOOST_SMART_PTR_DETAIL_ARRAY_ALLOCATOR_HPP
+
+#include <boost/align/align.hpp>
+#include <boost/smart_ptr/detail/array_traits.hpp>
+#include <boost/smart_ptr/detail/array_utility.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+namespace boost {
+ namespace detail {
+ struct ms_init_tag { };
+ struct ms_noinit_tag { };
+
+ template<class T>
+ struct ms_allocator_state;
+
+ template<class T>
+ struct ms_allocator_state<T[]> {
+ typedef typename array_base<T>::type type;
+
+ ms_allocator_state(std::size_t size_,
+ type** result_)
+ : size(size_ * array_total<T>::size),
+ result(result_) {
+ }
+
+ std::size_t size;
+
+ union {
+ type** result;
+ type* object;
+ };
+ };
+
+ template<class T, std::size_t N>
+ struct ms_allocator_state<T[N]> {
+ typedef typename array_base<T>::type type;
+
+ ms_allocator_state(type** result_)
+ : result(result_) {
+ }
+
+ enum {
+ size = array_total<T[N]>::size
+ };
+
+ union {
+ type** result;
+ type* object;
+ };
+ };
+
+ template<class A, class T, class R>
+ class as_allocator
+ : public A {
+ template<class A_, class T_, class R_>
+ friend class as_allocator;
+
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef std::allocator_traits<A> AT;
+ typedef typename AT::template rebind_alloc<char> CA;
+ typedef typename AT::template rebind_traits<char> CT;
+#else
+ typedef typename A::template rebind<char>::other CA;
+#endif
+
+ public:
+ typedef A allocator_type;
+
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef typename AT::value_type value_type;
+ typedef typename AT::pointer pointer;
+ typedef typename AT::const_pointer const_pointer;
+ typedef typename AT::void_pointer void_pointer;
+ typedef typename AT::const_void_pointer const_void_pointer;
+ typedef typename AT::size_type size_type;
+ typedef typename AT::difference_type difference_type;
+#else
+ typedef typename A::value_type value_type;
+ typedef typename A::pointer pointer;
+ typedef typename A::const_pointer const_pointer;
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef typename A::reference reference;
+ typedef typename A::const_reference const_reference;
+ typedef void* void_pointer;
+ typedef const void* const_void_pointer;
+#endif
+
+ template<class U>
+ struct rebind {
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef as_allocator<typename AT::
+ template rebind_alloc<U>, T, R> other;
+#else
+ typedef as_allocator<typename A::
+ template rebind<U>::other, T, R> other;
+#endif
+ };
+
+ typedef typename array_base<T>::type type;
+
+ as_allocator(const A& allocator_, type** result)
+ : A(allocator_),
+ data(result) {
+ }
+
+ as_allocator(const A& allocator_, std::size_t size,
+ type** result)
+ : A(allocator_),
+ data(size, result) {
+ }
+
+ template<class U>
+ as_allocator(const as_allocator<U, T, R>& other)
+ : A(other.allocator()),
+ data(other.data) {
+ }
+
+ pointer allocate(size_type count, const_void_pointer = 0) {
+ enum {
+ M = boost::alignment_of<type>::value
+ };
+ std::size_t n1 = count * sizeof(value_type);
+ std::size_t n2 = data.size * sizeof(type);
+ std::size_t n3 = n2 + M;
+ CA ca(allocator());
+ void* p1 = ca.allocate(n1 + n3);
+ void* p2 = static_cast<char*>(p1) + n1;
+ (void)boost::alignment::align(M, n2, p2, n3);
+ *data.result = static_cast<type*>(p2);
+ return static_cast<value_type*>(p1);
+ }
+
+ void deallocate(pointer memory, size_type count) {
+ enum {
+ M = boost::alignment_of<type>::value
+ };
+ std::size_t n1 = count * sizeof(value_type);
+ std::size_t n2 = data.size * sizeof(type) + M;
+ char* p1 = reinterpret_cast<char*>(memory);
+ CA ca(allocator());
+ ca.deallocate(p1, n1 + n2);
+ }
+
+ const A& allocator() const {
+ return static_cast<const A&>(*this);
+ }
+
+ A& allocator() {
+ return static_cast<A&>(*this);
+ }
+
+ void set(type* memory) {
+ data.object = memory;
+ }
+
+ void operator()() {
+ if (data.object) {
+ R tag;
+ release(tag);
+ }
+ }
+
+ private:
+ void release(ms_init_tag) {
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ as_destroy(allocator(), data.object, data.size);
+#else
+ ms_destroy(data.object, data.size);
+#endif
+ }
+
+ void release(ms_noinit_tag) {
+ ms_destroy(data.object, data.size);
+ }
+
+ ms_allocator_state<T> data;
+ };
+
+ template<class A1, class A2, class T, class R>
+ bool operator==(const as_allocator<A1, T, R>& a1,
+ const as_allocator<A2, T, R>& a2) {
+ return a1.allocator() == a2.allocator();
+ }
+
+ template<class A1, class A2, class T, class R>
+ bool operator!=(const as_allocator<A1, T, R>& a1,
+ const as_allocator<A2, T, R>& a2) {
+ return a1.allocator() != a2.allocator();
+ }
+
+ template<class T, class Y = char>
+ class ms_allocator;
+
+ template<class T, class Y>
+ class ms_allocator {
+ template<class T_, class Y_>
+ friend class ms_allocator;
+
+ public:
+ typedef typename array_base<T>::type type;
+
+ typedef Y value_type;
+ typedef Y* pointer;
+ typedef const Y* const_pointer;
+ typedef std::size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef Y& reference;
+ typedef const Y& const_reference;
+
+ template<class U>
+ struct rebind {
+ typedef ms_allocator<T, U> other;
+ };
+
+ ms_allocator(type** result)
+ : data(result) {
+ }
+
+ ms_allocator(std::size_t size, type** result)
+ : data(size, result) {
+ }
+
+ template<class U>
+ ms_allocator(const ms_allocator<T, U>& other)
+ : data(other.data) {
+ }
+
+ pointer allocate(size_type count, const void* = 0) {
+ enum {
+ M = boost::alignment_of<type>::value
+ };
+ std::size_t n1 = count * sizeof(Y);
+ std::size_t n2 = data.size * sizeof(type);
+ std::size_t n3 = n2 + M;
+ void* p1 = ::operator new(n1 + n3);
+ void* p2 = static_cast<char*>(p1) + n1;
+ (void)boost::alignment::align(M, n2, p2, n3);
+ *data.result = static_cast<type*>(p2);
+ return static_cast<Y*>(p1);
+ }
+
+ void deallocate(pointer memory, size_type) {
+ void* p1 = memory;
+ ::operator delete(p1);
+ }
+
+#if defined(BOOST_NO_CXX11_ALLOCATOR)
+ pointer address(reference value) const {
+ return &value;
+ }
+
+ const_pointer address(const_reference value) const {
+ return &value;
+ }
+
+ size_type max_size() const {
+ enum {
+ N = static_cast<std::size_t>(-1) / sizeof(Y)
+ };
+ return N;
+ }
+
+ void construct(pointer memory, const_reference value) {
+ void* p1 = memory;
+ ::new(p1) Y(value);
+ }
+
+ void destroy(pointer memory) {
+ (void)memory;
+ memory->~Y();
+ }
+#endif
+
+ void set(type* memory) {
+ data.object = memory;
+ }
+
+ void operator()() {
+ if (data.object) {
+ ms_destroy(data.object, data.size);
+ }
+ }
+
+ private:
+ ms_allocator_state<T> data;
+ };
+
+ template<class T, class Y1, class Y2>
+ bool operator==(const ms_allocator<T, Y1>&,
+ const ms_allocator<T, Y2>&) {
+ return true;
+ }
+
+ template<class T, class Y1, class Y2>
+ bool operator!=(const ms_allocator<T, Y1>&,
+ const ms_allocator<T, Y2>&) {
+ return false;
+ }
+
+ class ms_in_allocator_tag {
+ public:
+ void operator()(const void*) {
+ }
+ };
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/smart_ptr/detail/array_count_impl.hpp b/3party/boost/boost/smart_ptr/detail/array_count_impl.hpp
new file mode 100644
index 0000000000..b7c9617f0b
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/array_count_impl.hpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP
+#define BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP
+
+#include <boost/smart_ptr/detail/array_allocator.hpp>
+#include <boost/smart_ptr/detail/sp_counted_impl.hpp>
+
+namespace boost {
+ namespace detail {
+ template<class P, class A>
+ class sp_counted_impl_pda<P, ms_in_allocator_tag, A>
+ : public sp_counted_base {
+ typedef ms_in_allocator_tag D;
+ typedef sp_counted_impl_pda<P, D, A> Y;
+ public:
+ sp_counted_impl_pda(P, D, const A& allocator_)
+ : allocator(allocator_) {
+ }
+
+ virtual void dispose() {
+ allocator();
+ }
+
+ virtual void destroy() {
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef typename std::allocator_traits<A>::
+ template rebind_alloc<Y> YA;
+ typedef typename std::allocator_traits<A>::
+ template rebind_traits<Y> YT;
+#else
+ typedef typename A::template rebind<Y>::other YA;
+#endif
+ YA a1(allocator);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ YT::destroy(a1, this);
+ YT::deallocate(a1, this, 1);
+#else
+ this->~Y();
+ a1.deallocate(this, 1);
+#endif
+ }
+
+ virtual void* get_deleter(const sp_typeinfo&) {
+ return &reinterpret_cast<char&>(allocator);
+ }
+
+ virtual void* get_untyped_deleter() {
+ return &reinterpret_cast<char&>(allocator);
+ }
+
+ private:
+ sp_counted_impl_pda(const sp_counted_impl_pda&);
+ sp_counted_impl_pda& operator=(const sp_counted_impl_pda&);
+
+ A allocator;
+ };
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/smart_ptr/detail/array_deleter.hpp b/3party/boost/boost/smart_ptr/detail/array_deleter.hpp
deleted file mode 100644
index 20f84d1e7b..0000000000
--- a/3party/boost/boost/smart_ptr/detail/array_deleter.hpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2012 Glen Joseph Fernandes
- * glenfe at live dot com
- *
- * Distributed under the Boost Software License,
- * Version 1.0. (See accompanying file LICENSE_1_0.txt
- * or copy at http://boost.org/LICENSE_1_0.txt)
- */
-#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_DELETER_HPP
-#define BOOST_SMART_PTR_DETAIL_ARRAY_DELETER_HPP
-
-#include <boost/smart_ptr/detail/array_utility.hpp>
-#include <boost/smart_ptr/detail/sp_forward.hpp>
-
-namespace boost {
- namespace detail {
- template<typename T>
- class array_deleter;
- template<typename T>
- class array_deleter<T[]> {
- public:
- array_deleter(std::size_t size_)
- : size(size_),
- object(0) {
- }
- ~array_deleter() {
- if (object) {
- array_destroy(object, size);
- }
- }
- void init(T* memory) {
- array_init(memory, size);
- object = memory;
- }
-#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- void init(T* memory, T&& value) {
- array_init_value(memory, size, sp_forward<T>(value));
- object = memory;
- }
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
- template<typename... Args>
- void init(T* memory, Args&&... args) {
- array_init_args(memory, size, sp_forward<Args>(args)...);
- object = memory;
- }
-#endif
-#endif
- void init_list(T* memory, const T* list) {
- array_init_list(memory, size, list);
- object = memory;
- }
- template<std::size_t M>
- void init_list(T* memory, const T* list) {
- array_init_list<T, M>(memory, size, list);
- object = memory;
- }
- void noinit(T* memory) {
- array_noinit(memory, size);
- object = memory;
- }
- void operator()(const void*) {
- if (object) {
- array_destroy(object, size);
- object = 0;
- }
- }
- private:
- std::size_t size;
- T* object;
- };
- template<typename T, std::size_t N>
- class array_deleter<T[N]> {
- public:
- array_deleter()
- : object(0) {
- }
- ~array_deleter() {
- if (object) {
- array_destroy(object, N);
- }
- }
- void init(T* memory) {
- array_init(memory, N);
- object = memory;
- }
-#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- void init(T* memory, T&& value) {
- array_init_value(memory, N, sp_forward<T>(value));
- object = memory;
- }
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
- template<typename... Args>
- void init(T* memory, Args&&... args) {
- array_init_args(memory, N, sp_forward<Args>(args)...);
- object = memory;
- }
-#endif
-#endif
- void init_list(T* memory, const T* list) {
- array_init_list(memory, N, list);
- object = memory;
- }
- template<std::size_t M>
- void init_list(T* memory, const T* list) {
- array_init_list<T, M>(memory, N, list);
- object = memory;
- }
- void noinit(T* memory) {
- array_noinit(memory, N);
- object = memory;
- }
- void operator()(const void*) {
- if (object) {
- array_destroy(object, N);
- object = 0;
- }
- }
- private:
- T* object;
- };
- }
-}
-
-#endif
diff --git a/3party/boost/boost/smart_ptr/detail/array_traits.hpp b/3party/boost/boost/smart_ptr/detail/array_traits.hpp
index 8ef7874791..819c5ba619 100644
--- a/3party/boost/boost/smart_ptr/detail/array_traits.hpp
+++ b/3party/boost/boost/smart_ptr/detail/array_traits.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012 Glen Joseph Fernandes
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes
* glenfe at live dot com
*
* Distributed under the Boost Software License,
@@ -13,37 +13,44 @@
namespace boost {
namespace detail {
- template<typename T>
+ template<class T>
struct array_base {
typedef typename boost::remove_cv<T>::type type;
};
- template<typename T>
+
+ template<class T>
struct array_base<T[]> {
typedef typename array_base<T>::type type;
};
- template<typename T, std::size_t N>
+
+ template<class T, std::size_t N>
struct array_base<T[N]> {
typedef typename array_base<T>::type type;
};
- template<typename T>
+
+ template<class T>
struct array_total {
enum {
size = 1
};
};
- template<typename T, std::size_t N>
+
+ template<class T, std::size_t N>
struct array_total<T[N]> {
enum {
size = N * array_total<T>::size
};
};
- template<typename T>
+
+ template<class T>
struct array_inner;
- template<typename T>
+
+ template<class T>
struct array_inner<T[]> {
typedef T type;
};
- template<typename T, std::size_t N>
+
+ template<class T, std::size_t N>
struct array_inner<T[N]> {
typedef T type;
};
diff --git a/3party/boost/boost/smart_ptr/detail/array_utility.hpp b/3party/boost/boost/smart_ptr/detail/array_utility.hpp
index 3cf36d7445..84029a1d77 100644
--- a/3party/boost/boost/smart_ptr/detail/array_utility.hpp
+++ b/3party/boost/boost/smart_ptr/detail/array_utility.hpp
@@ -1,9 +1,9 @@
/*
- * Copyright (c) 2012 Glen Joseph Fernandes
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes
* glenfe at live dot com
*
- * Distributed under the Boost Software License,
- * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
* or copy at http://boost.org/LICENSE_1_0.txt)
*/
#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_UTILITY_HPP
@@ -12,31 +12,42 @@
#include <boost/config.hpp>
#include <boost/type_traits/has_trivial_constructor.hpp>
#include <boost/type_traits/has_trivial_destructor.hpp>
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+#include <memory>
+#endif
namespace boost {
namespace detail {
- template<typename T>
- inline void array_destroy(T*, std::size_t, boost::true_type) {
+ typedef boost::true_type ms_is_trivial;
+ typedef boost::false_type ms_no_trivial;
+
+ template<class T>
+ inline void ms_destroy(T*, std::size_t, ms_is_trivial) {
}
- template<typename T>
- inline void array_destroy(T* memory, std::size_t size, boost::false_type) {
- for (std::size_t i = size; i > 0; ) {
+
+ template<class T>
+ inline void ms_destroy(T* memory, std::size_t size, ms_no_trivial) {
+ for (std::size_t i = size; i > 0;) {
memory[--i].~T();
}
}
- template<typename T>
- inline void array_destroy(T* memory, std::size_t size) {
- boost::has_trivial_destructor<T> type;
- array_destroy(memory, size, type);
+
+ template<class T>
+ inline void ms_destroy(T* memory, std::size_t size) {
+ boost::has_trivial_destructor<T> trivial;
+ ms_destroy(memory, size, trivial);
}
- template<typename T>
- inline void array_init(T* memory, std::size_t size, boost::true_type) {
+
+ template<class T>
+ inline void ms_init(T* memory, std::size_t size, ms_is_trivial) {
for (std::size_t i = 0; i < size; i++) {
- memory[i] = T();
+ void* p1 = memory + i;
+ ::new(p1) T();
}
}
- template<typename T>
- inline void array_init(T* memory, std::size_t size, boost::false_type) {
+
+ template<class T>
+ inline void ms_init(T* memory, std::size_t size, ms_no_trivial) {
#if !defined(BOOST_NO_EXCEPTIONS)
std::size_t i = 0;
try {
@@ -45,7 +56,7 @@ namespace boost {
::new(p1) T();
}
} catch (...) {
- array_destroy(memory, i);
+ ms_destroy(memory, i);
throw;
}
#else
@@ -55,100 +66,124 @@ namespace boost {
}
#endif
}
- template<typename T>
- inline void array_init(T* memory, std::size_t size) {
- boost::has_trivial_default_constructor<T> type;
- array_init(memory, size, type);
+
+ template<class T>
+ inline void ms_init(T* memory, std::size_t size) {
+ boost::has_trivial_default_constructor<T> trivial;
+ ms_init(memory, size, trivial);
}
-#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- template<typename T>
- inline void array_init_value(T* memory, std::size_t size, T&& value) {
+
+ template<class T, std::size_t N>
+ inline void ms_init(T* memory, std::size_t size, const T* list) {
#if !defined(BOOST_NO_EXCEPTIONS)
std::size_t i = 0;
try {
for (; i < size; i++) {
void* p1 = memory + i;
- ::new(p1) T(value);
+ ::new(p1) T(list[i % N]);
}
} catch (...) {
- array_destroy(memory, i);
+ ms_destroy(memory, i);
throw;
}
#else
for (std::size_t i = 0; i < size; i++) {
void* p1 = memory + i;
- ::new(p1) T(value);
+ ::new(p1) T(list[i % N]);
}
#endif
}
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
- template<typename T, typename... Args>
- inline void array_init_args(T* memory, std::size_t size, Args&&... args) {
-#if !defined(BOOST_NO_EXCEPTIONS)
- std::size_t i = 0;
- try {
- for (; i < size; i++) {
- void* p1 = memory + i;
- ::new(p1) T(args...);
- }
- } catch (...) {
- array_destroy(memory, i);
- throw;
+
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+ template<class T, class A>
+ inline void as_destroy(const A& allocator, T* memory,
+ std::size_t size) {
+ typedef typename std::allocator_traits<A>::
+ template rebind_alloc<T> TA;
+ typedef typename std::allocator_traits<A>::
+ template rebind_traits<T> TT;
+ TA a2(allocator);
+ for (std::size_t i = size; i > 0;) {
+ TT::destroy(a2, &memory[--i]);
}
-#else
+ }
+
+ template<class T, class A>
+ inline void as_init(const A& allocator, T* memory, std::size_t size,
+ ms_is_trivial) {
+ typedef typename std::allocator_traits<A>::
+ template rebind_alloc<T> TA;
+ typedef typename std::allocator_traits<A>::
+ template rebind_traits<T> TT;
+ TA a2(allocator);
for (std::size_t i = 0; i < size; i++) {
- void* p1 = memory + i;
- ::new(p1) T(args...);
+ TT::construct(a2, memory + i);
}
-#endif
}
-#endif
-#endif
- template<typename T>
- inline void array_init_list(T* memory, std::size_t size, const T* list) {
+
+ template<class T, class A>
+ inline void as_init(const A& allocator, T* memory, std::size_t size,
+ ms_no_trivial) {
+ typedef typename std::allocator_traits<A>::
+ template rebind_alloc<T> TA;
+ typedef typename std::allocator_traits<A>::
+ template rebind_traits<T> TT;
+ TA a2(allocator);
#if !defined(BOOST_NO_EXCEPTIONS)
std::size_t i = 0;
try {
for (; i < size; i++) {
- void* p1 = memory + i;
- ::new(p1) T(list[i]);
+ TT::construct(a2, memory + i);
}
} catch (...) {
- array_destroy(memory, i);
+ as_destroy(a2, memory, i);
throw;
}
#else
for (std::size_t i = 0; i < size; i++) {
- void* p1 = memory + i;
- ::new(p1) T(list[i]);
+ TT::construct(a2, memory + i);
}
#endif
}
- template<typename T, std::size_t N>
- inline void array_init_list(T* memory, std::size_t size, const T* list) {
+
+ template<class T, class A>
+ inline void as_init(const A& allocator, T* memory, std::size_t size) {
+ boost::has_trivial_default_constructor<T> trivial;
+ as_init(allocator, memory, size, trivial);
+ }
+
+ template<class T, class A, std::size_t N>
+ inline void as_init(const A& allocator, T* memory, std::size_t size,
+ const T* list) {
+ typedef typename std::allocator_traits<A>::
+ template rebind_alloc<T> TA;
+ typedef typename std::allocator_traits<A>::
+ template rebind_traits<T> TT;
+ TA a2(allocator);
#if !defined(BOOST_NO_EXCEPTIONS)
std::size_t i = 0;
try {
for (; i < size; i++) {
- void* p1 = memory + i;
- ::new(p1) T(list[i % N]);
+ TT::construct(a2, memory + i, list[i % N]);
}
} catch (...) {
- array_destroy(memory, i);
+ as_destroy(a2, memory, i);
throw;
}
#else
for (std::size_t i = 0; i < size; i++) {
- void* p1 = memory + i;
- ::new(p1) T(list[i % N]);
+ TT::construct(a2, memory + i, list[i % N]);
}
#endif
}
- template<typename T>
- inline void array_noinit(T*, std::size_t, boost::true_type) {
+#endif
+
+ template<class T>
+ inline void ms_noinit(T*, std::size_t, ms_is_trivial) {
}
- template<typename T>
- inline void array_noinit(T* memory, std::size_t size, boost::false_type) {
+
+ template<class T>
+ inline void ms_noinit(T* memory, std::size_t size, ms_no_trivial) {
#if !defined(BOOST_NO_EXCEPTIONS)
std::size_t i = 0;
try {
@@ -157,7 +192,7 @@ namespace boost {
::new(p1) T;
}
} catch (...) {
- array_destroy(memory, i);
+ ms_destroy(memory, i);
throw;
}
#else
@@ -167,10 +202,11 @@ namespace boost {
}
#endif
}
- template<typename T>
- inline void array_noinit(T* memory, std::size_t size) {
- boost::has_trivial_default_constructor<T> type;
- array_noinit(memory, size, type);
+
+ template<class T>
+ inline void ms_noinit(T* memory, std::size_t size) {
+ boost::has_trivial_default_constructor<T> trivial;
+ ms_noinit(memory, size, trivial);
}
}
}
diff --git a/3party/boost/boost/smart_ptr/detail/atomic_count.hpp b/3party/boost/boost/smart_ptr/detail/atomic_count.hpp
index cc44ac2f96..8aefd44fdc 100644
--- a/3party/boost/boost/smart_ptr/detail/atomic_count.hpp
+++ b/3party/boost/boost/smart_ptr/detail/atomic_count.hpp
@@ -11,10 +11,11 @@
// boost/detail/atomic_count.hpp - thread/SMP safe reference counter
//
// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2013 Peter Dimov
//
-// 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)
+// 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
//
// typedef <implementation-defined> boost::detail::atomic_count;
//
@@ -27,92 +28,68 @@
// a;
//
// Returns: (long) the current value of a
+// Memory Ordering: acquire
//
// ++a;
//
// Effects: Atomically increments the value of a
// Returns: (long) the new value of a
+// Memory Ordering: acquire/release
//
// --a;
//
// Effects: Atomically decrements the value of a
// Returns: (long) the new value of a
-//
-// Important note: when --a returns zero, it must act as a
-// read memory barrier (RMB); i.e. the calling thread must
-// have a synchronized view of the memory
-//
-// On Intel IA-32 (x86) memory is always synchronized, so this
-// is not a problem.
-//
-// On many architectures the atomic instructions already act as
-// a memory barrier.
-//
-// This property is necessary for proper reference counting, since
-// a thread can update the contents of a shared object, then
-// release its reference, and another thread may immediately
-// release the last reference causing object destruction.
-//
-// The destructor needs to have a synchronized view of the
-// object to perform proper cleanup.
-//
-// Original example by Alexander Terekhov:
-//
-// Given:
-//
-// - a mutable shared object OBJ;
-// - two threads THREAD1 and THREAD2 each holding
-// a private smart_ptr object pointing to that OBJ.
-//
-// t1: THREAD1 updates OBJ (thread-safe via some synchronization)
-// and a few cycles later (after "unlock") destroys smart_ptr;
-//
-// t2: THREAD2 destroys smart_ptr WITHOUT doing any synchronization
-// with respect to shared mutable object OBJ; OBJ destructors
-// are called driven by smart_ptr interface...
+// Memory Ordering: acquire/release
//
#include <boost/config.hpp>
#include <boost/smart_ptr/detail/sp_has_sync.hpp>
-#ifndef BOOST_HAS_THREADS
+#if defined( BOOST_AC_DISABLE_THREADS )
+# include <boost/smart_ptr/detail/atomic_count_nt.hpp>
-namespace boost
-{
+#elif defined( BOOST_AC_USE_STD_ATOMIC )
+# include <boost/smart_ptr/detail/atomic_count_std_atomic.hpp>
-namespace detail
-{
+#elif defined( BOOST_AC_USE_SPINLOCK )
+# include <boost/smart_ptr/detail/atomic_count_spin.hpp>
-typedef long atomic_count;
+#elif defined( BOOST_AC_USE_PTHREADS )
+# include <boost/smart_ptr/detail/atomic_count_pt.hpp>
-}
+#elif defined( BOOST_SP_DISABLE_THREADS )
+# include <boost/smart_ptr/detail/atomic_count_nt.hpp>
-}
+#elif defined( BOOST_SP_USE_STD_ATOMIC )
+# include <boost/smart_ptr/detail/atomic_count_std_atomic.hpp>
-#elif defined(BOOST_AC_USE_PTHREADS)
-# include <boost/smart_ptr/detail/atomic_count_pthreads.hpp>
+#elif defined( BOOST_SP_USE_SPINLOCK )
+# include <boost/smart_ptr/detail/atomic_count_spin.hpp>
-#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) )
-# include <boost/smart_ptr/detail/atomic_count_gcc_x86.hpp>
+#elif defined( BOOST_SP_USE_PTHREADS )
+# include <boost/smart_ptr/detail/atomic_count_pt.hpp>
-#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
-# include <boost/smart_ptr/detail/atomic_count_win32.hpp>
+#elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 )
+# include <boost/smart_ptr/detail/atomic_count_nt.hpp>
+
+#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) && !defined( __PATHSCALE__ )
+# include <boost/smart_ptr/detail/atomic_count_gcc_x86.hpp>
#elif defined( BOOST_SP_HAS_SYNC )
-# include <boost/smart_ptr/detail/atomic_count_sync.hpp>
+# include <boost/smart_ptr/detail/atomic_count_sync.hpp>
-#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
-# include <boost/smart_ptr/detail/atomic_count_gcc.hpp>
+#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# include <boost/smart_ptr/detail/atomic_count_win32.hpp>
-#elif defined(BOOST_HAS_PTHREADS)
+#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
+# include <boost/smart_ptr/detail/atomic_count_gcc.hpp>
-# define BOOST_AC_USE_PTHREADS
-# include <boost/smart_ptr/detail/atomic_count_pthreads.hpp>
+#elif !defined( BOOST_HAS_THREADS )
+# include <boost/smart_ptr/detail/atomic_count_nt.hpp>
#else
-
-// Use #define BOOST_DISABLE_THREADS to avoid the error
-#error Unrecognized threading platform
+# include <boost/smart_ptr/detail/atomic_count_spin.hpp>
#endif
diff --git a/3party/boost/boost/smart_ptr/detail/atomic_count_nt.hpp b/3party/boost/boost/smart_ptr/detail/atomic_count_nt.hpp
new file mode 100644
index 0000000000..3bbf138913
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/atomic_count_nt.hpp
@@ -0,0 +1,59 @@
+#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_NT_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_NT_HPP_INCLUDED
+
+//
+// boost/detail/atomic_count_nt.hpp
+//
+// Trivial atomic_count for the single-threaded case
+//
+// http://gcc.gnu.org/onlinedocs/porting/Thread-safety.html
+//
+// Copyright 2013 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//
+
+namespace boost
+{
+
+namespace detail
+{
+
+class atomic_count
+{
+public:
+
+ explicit atomic_count( long v ): value_( v )
+ {
+ }
+
+ long operator++()
+ {
+ return ++value_;
+ }
+
+ long operator--()
+ {
+ return --value_;
+ }
+
+ operator long() const
+ {
+ return value_;
+ }
+
+private:
+
+ atomic_count(atomic_count const &);
+ atomic_count & operator=(atomic_count const &);
+
+ long value_;
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_NT_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/atomic_count_pt.hpp b/3party/boost/boost/smart_ptr/detail/atomic_count_pt.hpp
new file mode 100644
index 0000000000..f99b9108e3
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/atomic_count_pt.hpp
@@ -0,0 +1,97 @@
+#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
+
+//
+// boost/detail/atomic_count_pthreads.hpp
+//
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/assert.hpp>
+#include <pthread.h>
+
+//
+// The generic pthread_mutex-based implementation sometimes leads to
+// inefficiencies. Example: a class with two atomic_count members
+// can get away with a single mutex.
+//
+// Users can detect this situation by checking BOOST_AC_USE_PTHREADS.
+//
+
+namespace boost
+{
+
+namespace detail
+{
+
+class atomic_count
+{
+private:
+
+ class scoped_lock
+ {
+ public:
+
+ scoped_lock(pthread_mutex_t & m): m_(m)
+ {
+ BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
+ }
+
+ ~scoped_lock()
+ {
+ BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
+ }
+
+ private:
+
+ pthread_mutex_t & m_;
+ };
+
+public:
+
+ explicit atomic_count(long v): value_(v)
+ {
+ BOOST_VERIFY( pthread_mutex_init( &mutex_, 0 ) == 0 );
+ }
+
+ ~atomic_count()
+ {
+ BOOST_VERIFY( pthread_mutex_destroy( &mutex_ ) == 0 );
+ }
+
+ long operator++()
+ {
+ scoped_lock lock(mutex_);
+ return ++value_;
+ }
+
+ long operator--()
+ {
+ scoped_lock lock(mutex_);
+ return --value_;
+ }
+
+ operator long() const
+ {
+ scoped_lock lock(mutex_);
+ return value_;
+ }
+
+private:
+
+ atomic_count(atomic_count const &);
+ atomic_count & operator=(atomic_count const &);
+
+ mutable pthread_mutex_t mutex_;
+ long value_;
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/atomic_count_pthreads.hpp b/3party/boost/boost/smart_ptr/detail/atomic_count_pthreads.hpp
deleted file mode 100644
index 05f78673c6..0000000000
--- a/3party/boost/boost/smart_ptr/detail/atomic_count_pthreads.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
-#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
-
-//
-// boost/detail/atomic_count_pthreads.hpp
-//
-// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
-//
-// 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 <pthread.h>
-
-//
-// The generic pthread_mutex-based implementation sometimes leads to
-// inefficiencies. Example: a class with two atomic_count members
-// can get away with a single mutex.
-//
-// Users can detect this situation by checking BOOST_AC_USE_PTHREADS.
-//
-
-namespace boost
-{
-
-namespace detail
-{
-
-class atomic_count
-{
-private:
-
- class scoped_lock
- {
- public:
-
- scoped_lock(pthread_mutex_t & m): m_(m)
- {
- pthread_mutex_lock(&m_);
- }
-
- ~scoped_lock()
- {
- pthread_mutex_unlock(&m_);
- }
-
- private:
-
- pthread_mutex_t & m_;
- };
-
-public:
-
- explicit atomic_count(long v): value_(v)
- {
- pthread_mutex_init(&mutex_, 0);
- }
-
- ~atomic_count()
- {
- pthread_mutex_destroy(&mutex_);
- }
-
- long operator++()
- {
- scoped_lock lock(mutex_);
- return ++value_;
- }
-
- long operator--()
- {
- scoped_lock lock(mutex_);
- return --value_;
- }
-
- operator long() const
- {
- scoped_lock lock(mutex_);
- return value_;
- }
-
-private:
-
- atomic_count(atomic_count const &);
- atomic_count & operator=(atomic_count const &);
-
- mutable pthread_mutex_t mutex_;
- long value_;
-};
-
-} // namespace detail
-
-} // namespace boost
-
-#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/atomic_count_spin.hpp b/3party/boost/boost/smart_ptr/detail/atomic_count_spin.hpp
new file mode 100644
index 0000000000..8e623496bf
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/atomic_count_spin.hpp
@@ -0,0 +1,62 @@
+#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SPIN_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SPIN_HPP_INCLUDED
+
+//
+// boost/detail/atomic_count_spin.hpp
+//
+// Copyright (c) 2013 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/smart_ptr/detail/spinlock_pool.hpp>
+
+namespace boost
+{
+
+namespace detail
+{
+
+class atomic_count
+{
+private:
+
+public:
+
+ explicit atomic_count( long v ): value_( v )
+ {
+ }
+
+ long operator++()
+ {
+ spinlock_pool<0>::scoped_lock lock( &value_ );
+ return ++value_;
+ }
+
+ long operator--()
+ {
+ spinlock_pool<0>::scoped_lock lock( &value_ );
+ return --value_;
+ }
+
+ operator long() const
+ {
+ spinlock_pool<0>::scoped_lock lock( &value_ );
+ return value_;
+ }
+
+private:
+
+ atomic_count(atomic_count const &);
+ atomic_count & operator=(atomic_count const &);
+
+ long value_;
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SPIN_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp b/3party/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp
new file mode 100644
index 0000000000..55b9998e52
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp
@@ -0,0 +1,60 @@
+#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_STD_ATOMIC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_STD_ATOMIC_HPP_INCLUDED
+
+//
+// boost/detail/atomic_count_std_atomic.hpp
+//
+// atomic_count for std::atomic
+//
+// Copyright 2013 Peter Dimov
+//
+// 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 <atomic>
+#include <cstdint>
+
+namespace boost
+{
+
+namespace detail
+{
+
+class atomic_count
+{
+public:
+
+ explicit atomic_count( long v ): value_( v )
+ {
+ }
+
+ long operator++()
+ {
+ return value_.fetch_add( 1, std::memory_order_acq_rel ) + 1;
+ }
+
+ long operator--()
+ {
+ return value_.fetch_sub( 1, std::memory_order_acq_rel ) - 1;
+ }
+
+ operator long() const
+ {
+ return value_.load( std::memory_order_acquire );
+ }
+
+private:
+
+ atomic_count(atomic_count const &);
+ atomic_count & operator=(atomic_count const &);
+
+ std::atomic_int_least32_t value_;
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_STD_ATOMIC_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/atomic_count_win32.hpp b/3party/boost/boost/smart_ptr/detail/atomic_count_win32.hpp
index 60a056943b..633e73c3c0 100644
--- a/3party/boost/boost/smart_ptr/detail/atomic_count_win32.hpp
+++ b/3party/boost/boost/smart_ptr/detail/atomic_count_win32.hpp
@@ -17,7 +17,7 @@
// http://www.boost.org/LICENSE_1_0.txt)
//
-#include <boost/detail/interlocked.hpp>
+#include <boost/smart_ptr/detail/sp_interlocked.hpp>
namespace boost
{
@@ -35,12 +35,12 @@ public:
long operator++()
{
- return BOOST_INTERLOCKED_INCREMENT( &value_ );
+ return BOOST_SP_INTERLOCKED_INCREMENT( &value_ );
}
long operator--()
{
- return BOOST_INTERLOCKED_DECREMENT( &value_ );
+ return BOOST_SP_INTERLOCKED_DECREMENT( &value_ );
}
operator long() const
diff --git a/3party/boost/boost/smart_ptr/detail/lwm_win32_cs.hpp b/3party/boost/boost/smart_ptr/detail/lwm_win32_cs.hpp
index 00477e49f8..a93cf09208 100644
--- a/3party/boost/boost/smart_ptr/detail/lwm_win32_cs.hpp
+++ b/3party/boost/boost/smart_ptr/detail/lwm_win32_cs.hpp
@@ -11,12 +11,15 @@
// boost/detail/lwm_win32_cs.hpp
//
// Copyright (c) 2002, 2003 Peter Dimov
+// Copyright (c) Microsoft Corporation 2014
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
+#include <boost/predef.h>
+
#ifdef BOOST_USE_WINDOWS_H
# include <windows.h>
#endif
@@ -43,7 +46,11 @@ struct critical_section
#endif
};
+#if BOOST_PLAT_WINDOWS_RUNTIME
+extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(critical_section *, unsigned long, unsigned long);
+#else
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *);
+#endif
extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *);
@@ -67,7 +74,11 @@ public:
lightweight_mutex()
{
+#if BOOST_PLAT_WINDOWS_RUNTIME
+ InitializeCriticalSectionEx(&cs_, 4000, 0);
+#else
InitializeCriticalSection(&cs_);
+#endif
}
~lightweight_mutex()
diff --git a/3party/boost/boost/smart_ptr/detail/make_array_helper.hpp b/3party/boost/boost/smart_ptr/detail/make_array_helper.hpp
deleted file mode 100644
index 6cf048316d..0000000000
--- a/3party/boost/boost/smart_ptr/detail/make_array_helper.hpp
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2012 Glen Joseph Fernandes
- * glenfe at live dot com
- *
- * Distributed under the Boost Software License,
- * Version 1.0. (See accompanying file LICENSE_1_0.txt
- * or copy at http://boost.org/LICENSE_1_0.txt)
- */
-#ifndef BOOST_SMART_PTR_DETAIL_MAKE_ARRAY_HELPER_HPP
-#define BOOST_SMART_PTR_DETAIL_MAKE_ARRAY_HELPER_HPP
-
-#include <boost/type_traits/alignment_of.hpp>
-
-namespace boost {
- namespace detail {
- template<typename T, typename Y = char>
- class make_array_helper;
- template<typename T, typename Y>
- class make_array_helper<T[], Y> {
- template<typename T2, typename Y2>
- friend class make_array_helper;
- public:
- typedef Y value_type;
- typedef Y* pointer;
- typedef const Y* const_pointer;
- typedef Y& reference;
- typedef const Y& const_reference;
- typedef std::size_t size_type;
- typedef ptrdiff_t difference_type;
- template<typename U>
- struct rebind {
- typedef make_array_helper<T[], U> other;
- };
- make_array_helper(std::size_t size_, T** data_)
- : size(sizeof(T) * size_),
- data(data_) {
- }
- template<class U>
- make_array_helper(const make_array_helper<T[], U>& other)
- : size(other.size),
- data(other.data) {
- }
- pointer address(reference value) const {
- return &value;
- }
- const_pointer address(const_reference value) const {
- return &value;
- }
- size_type max_size() const {
- return static_cast<std::size_t>(-1) / sizeof(Y);
- }
- pointer allocate(size_type count, const void* = 0) {
- std::size_t a1 = boost::alignment_of<T>::value;
- std::size_t n1 = count * sizeof(Y) + a1 - 1;
- void* p1 = ::operator new(n1 + size);
- char* p2 = static_cast<char*>(p1) + n1;
- while (std::size_t(p2) % a1 != 0) {
- p2--;
- }
- *data = reinterpret_cast<T*>(p2);
- return reinterpret_cast<Y*>(p1);
- }
- void deallocate(pointer memory, size_type) {
- void* p1 = memory;
- ::operator delete(p1);
- }
- void construct(pointer memory, const Y& value) {
- void* p1 = memory;
- ::new(p1) Y(value);
- }
- void destroy(pointer memory) {
- memory->~Y();
- }
- template<typename U>
- bool operator==(const make_array_helper<T[], U>&) const {
- return true;
- }
- template<typename U>
- bool operator!=(const make_array_helper<T[], U>& other) const {
- return !(*this == other);
- }
- private:
- std::size_t size;
- T** data;
- };
- template<typename T, std::size_t N, typename Y>
- class make_array_helper<T[N], Y> {
- template<typename T2, typename Y2>
- friend class make_array_helper;
- public:
- typedef Y value_type;
- typedef Y* pointer;
- typedef const Y* const_pointer;
- typedef Y& reference;
- typedef const Y& const_reference;
- typedef std::size_t size_type;
- typedef ptrdiff_t difference_type;
- template<typename U>
- struct rebind {
- typedef make_array_helper<T[N], U> other;
- };
- make_array_helper(T** data_)
- : data(data_) {
- }
- template<class U>
- make_array_helper(const make_array_helper<T[N], U>& other)
- : data(other.data) {
- }
- pointer address(reference value) const {
- return &value;
- }
- const_pointer address(const_reference value) const {
- return &value;
- }
- size_type max_size() const {
- return static_cast<std::size_t>(-1) / sizeof(Y);
- }
- pointer allocate(size_type count, const void* = 0) {
- std::size_t a1 = boost::alignment_of<T>::value;
- std::size_t n1 = count * sizeof(Y) + a1 - 1;
- void* p1 = ::operator new(n1 + N1);
- char* p2 = static_cast<char*>(p1) + n1;
- while (std::size_t(p2) % a1 != 0) {
- p2--;
- }
- *data = reinterpret_cast<T*>(p2);
- return reinterpret_cast<Y*>(p1);
- }
- void deallocate(pointer memory, size_type) {
- void* p1 = memory;
- ::operator delete(p1);
- }
- void construct(pointer memory, const Y& value) {
- void* p1 = memory;
- ::new(p1) Y(value);
- }
- void destroy(pointer memory) {
- memory->~Y();
- }
- template<typename U>
- bool operator==(const make_array_helper<T[N], U>&) const {
- return true;
- }
- template<typename U>
- bool operator!=(const make_array_helper<T[N], U>& other) const {
- return !(*this == other);
- }
- private:
- enum {
- N1 = N * sizeof(T)
- };
- T** data;
- };
- }
-}
-
-#endif
diff --git a/3party/boost/boost/smart_ptr/detail/shared_array_nmt.hpp b/3party/boost/boost/smart_ptr/detail/shared_array_nmt.hpp
deleted file mode 100644
index 450c9bcf59..0000000000
--- a/3party/boost/boost/smart_ptr/detail/shared_array_nmt.hpp
+++ /dev/null
@@ -1,151 +0,0 @@
-#ifndef BOOST_SMART_PTR_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED
-#define BOOST_SMART_PTR_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED
-
-//
-// detail/shared_array_nmt.hpp - shared_array.hpp without member templates
-//
-// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
-// Copyright (c) 2001, 2002 Peter Dimov
-//
-// 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/smart_ptr/shared_array.htm for documentation.
-//
-
-#include <boost/assert.hpp>
-#include <boost/checked_delete.hpp>
-#include <boost/throw_exception.hpp>
-#include <boost/smart_ptr/detail/atomic_count.hpp>
-
-#include <cstddef> // for std::ptrdiff_t
-#include <algorithm> // for std::swap
-#include <functional> // for std::less
-#include <new> // for std::bad_alloc
-
-namespace boost
-{
-
-template<class T> class shared_array
-{
-private:
-
- typedef detail::atomic_count count_type;
-
-public:
-
- typedef T element_type;
-
- explicit shared_array(T * p = 0): px(p)
- {
-#ifndef BOOST_NO_EXCEPTIONS
-
- try // prevent leak if new throws
- {
- pn = new count_type(1);
- }
- catch(...)
- {
- boost::checked_array_delete(p);
- throw;
- }
-
-#else
-
- pn = new count_type(1);
-
- if(pn == 0)
- {
- boost::checked_array_delete(p);
- boost::throw_exception(std::bad_alloc());
- }
-
-#endif
- }
-
- ~shared_array()
- {
- if(--*pn == 0)
- {
- boost::checked_array_delete(px);
- delete pn;
- }
- }
-
- shared_array(shared_array const & r) : px(r.px) // never throws
- {
- pn = r.pn;
- ++*pn;
- }
-
- shared_array & operator=(shared_array const & r)
- {
- shared_array(r).swap(*this);
- return *this;
- }
-
- void reset(T * p = 0)
- {
- BOOST_ASSERT(p == 0 || p != px);
- shared_array(p).swap(*this);
- }
-
- T * get() const // never throws
- {
- return px;
- }
-
- T & operator[](std::ptrdiff_t i) const // never throws
- {
- BOOST_ASSERT(px != 0);
- BOOST_ASSERT(i >= 0);
- return px[i];
- }
-
- long use_count() const // never throws
- {
- return *pn;
- }
-
- bool unique() const // never throws
- {
- return *pn == 1;
- }
-
- void swap(shared_array<T> & other) // never throws
- {
- std::swap(px, other.px);
- std::swap(pn, other.pn);
- }
-
-private:
-
- T * px; // contained pointer
- count_type * pn; // ptr to reference counter
-
-}; // shared_array
-
-template<class T, class U> inline bool operator==(shared_array<T> const & a, shared_array<U> const & b)
-{
- return a.get() == b.get();
-}
-
-template<class T, class U> inline bool operator!=(shared_array<T> const & a, shared_array<U> const & b)
-{
- return a.get() != b.get();
-}
-
-template<class T> inline bool operator<(shared_array<T> const & a, shared_array<T> const & b)
-{
- return std::less<T*>()(a.get(), b.get());
-}
-
-template<class T> void swap(shared_array<T> & a, shared_array<T> & b)
-{
- a.swap(b);
-}
-
-} // namespace boost
-
-#endif // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/shared_count.hpp b/3party/boost/boost/smart_ptr/detail/shared_count.hpp
index 8e1dd4810a..1e7d688c1a 100644
--- a/3party/boost/boost/smart_ptr/detail/shared_count.hpp
+++ b/3party/boost/boost/smart_ptr/detail/shared_count.hpp
@@ -225,16 +225,35 @@ public:
#endif
{
typedef sp_counted_impl_pda<P, D, A> impl_type;
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ typedef typename std::allocator_traits<A>::template rebind_alloc< impl_type > A2;
+
+#else
+
typedef typename A::template rebind< impl_type >::other A2;
+#endif
+
A2 a2( a );
#ifndef BOOST_NO_EXCEPTIONS
try
{
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );
+ pi_ = pi;
+ std::allocator_traits<A2>::construct( a2, pi, p, d, a );
+
+#else
+
pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
- new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );
+ ::new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );
+
+#endif
}
catch(...)
{
@@ -250,11 +269,28 @@ public:
#else
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );
+ pi_ = pi;
+
+#else
+
pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
+#endif
+
if( pi_ != 0 )
{
- new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ std::allocator_traits<A2>::construct( a2, pi, p, d, a );
+
+#else
+
+ ::new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );
+
+#endif
}
else
{
@@ -273,16 +309,35 @@ public:
#endif
{
typedef sp_counted_impl_pda< P, D, A > impl_type;
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ typedef typename std::allocator_traits<A>::template rebind_alloc< impl_type > A2;
+
+#else
+
typedef typename A::template rebind< impl_type >::other A2;
+#endif
+
A2 a2( a );
#ifndef BOOST_NO_EXCEPTIONS
try
{
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );
+ pi_ = pi;
+ std::allocator_traits<A2>::construct( a2, pi, p, a );
+
+#else
+
pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
- new( static_cast< void* >( pi_ ) ) impl_type( p, a );
+ ::new( static_cast< void* >( pi_ ) ) impl_type( p, a );
+
+#endif
}
catch(...)
{
@@ -298,11 +353,28 @@ public:
#else
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );
+ pi_ = pi;
+
+#else
+
pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
+#endif
+
if( pi_ != 0 )
{
- new( static_cast< void* >( pi_ ) ) impl_type( p, a );
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ std::allocator_traits<A2>::construct( a2, pi, p, a );
+
+#else
+
+ ::new( static_cast< void* >( pi_ ) ) impl_type( p, a );
+
+#endif
}
else
{
diff --git a/3party/boost/boost/smart_ptr/detail/shared_ptr_nmt.hpp b/3party/boost/boost/smart_ptr/detail/shared_ptr_nmt.hpp
deleted file mode 100644
index afc1ec03f1..0000000000
--- a/3party/boost/boost/smart_ptr/detail/shared_ptr_nmt.hpp
+++ /dev/null
@@ -1,182 +0,0 @@
-#ifndef BOOST_SMART_PTR_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED
-#define BOOST_SMART_PTR_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED
-
-//
-// detail/shared_ptr_nmt.hpp - shared_ptr.hpp without member templates
-//
-// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
-// Copyright (c) 2001, 2002 Peter Dimov
-//
-// 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/smart_ptr/shared_ptr.htm for documentation.
-//
-
-#include <boost/assert.hpp>
-#include <boost/checked_delete.hpp>
-#include <boost/throw_exception.hpp>
-#include <boost/smart_ptr/detail/atomic_count.hpp>
-
-#ifndef BOOST_NO_AUTO_PTR
-# include <memory> // for std::auto_ptr
-#endif
-
-#include <algorithm> // for std::swap
-#include <functional> // for std::less
-#include <new> // for std::bad_alloc
-
-namespace boost
-{
-
-template<class T> class shared_ptr
-{
-private:
-
- typedef detail::atomic_count count_type;
-
-public:
-
- typedef T element_type;
- typedef T value_type;
-
- explicit shared_ptr(T * p = 0): px(p)
- {
-#ifndef BOOST_NO_EXCEPTIONS
-
- try // prevent leak if new throws
- {
- pn = new count_type(1);
- }
- catch(...)
- {
- boost::checked_delete(p);
- throw;
- }
-
-#else
-
- pn = new count_type(1);
-
- if(pn == 0)
- {
- boost::checked_delete(p);
- boost::throw_exception(std::bad_alloc());
- }
-
-#endif
- }
-
- ~shared_ptr()
- {
- if(--*pn == 0)
- {
- boost::checked_delete(px);
- delete pn;
- }
- }
-
- shared_ptr(shared_ptr const & r): px(r.px) // never throws
- {
- pn = r.pn;
- ++*pn;
- }
-
- shared_ptr & operator=(shared_ptr const & r)
- {
- shared_ptr(r).swap(*this);
- return *this;
- }
-
-#ifndef BOOST_NO_AUTO_PTR
-
- explicit shared_ptr(std::auto_ptr<T> & r)
- {
- pn = new count_type(1); // may throw
- px = r.release(); // fix: moved here to stop leak if new throws
- }
-
- shared_ptr & operator=(std::auto_ptr<T> & r)
- {
- shared_ptr(r).swap(*this);
- return *this;
- }
-
-#endif
-
- void reset(T * p = 0)
- {
- BOOST_ASSERT(p == 0 || p != px);
- shared_ptr(p).swap(*this);
- }
-
- T & operator*() const // never throws
- {
- BOOST_ASSERT(px != 0);
- return *px;
- }
-
- T * operator->() const // never throws
- {
- BOOST_ASSERT(px != 0);
- return px;
- }
-
- T * get() const // never throws
- {
- return px;
- }
-
- long use_count() const // never throws
- {
- return *pn;
- }
-
- bool unique() const // never throws
- {
- return *pn == 1;
- }
-
- void swap(shared_ptr<T> & other) // never throws
- {
- std::swap(px, other.px);
- std::swap(pn, other.pn);
- }
-
-private:
-
- T * px; // contained pointer
- count_type * pn; // ptr to reference counter
-};
-
-template<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b)
-{
- return a.get() == b.get();
-}
-
-template<class T, class U> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<U> const & b)
-{
- return a.get() != b.get();
-}
-
-template<class T> inline bool operator<(shared_ptr<T> const & a, shared_ptr<T> const & b)
-{
- return std::less<T*>()(a.get(), b.get());
-}
-
-template<class T> void swap(shared_ptr<T> & a, shared_ptr<T> & b)
-{
- a.swap(b);
-}
-
-// get_pointer() enables boost::mem_fn to recognize shared_ptr
-
-template<class T> inline T * get_pointer(shared_ptr<T> const & p)
-{
- return p.get();
-}
-
-} // namespace boost
-
-#endif // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/sp_counted_base.hpp b/3party/boost/boost/smart_ptr/detail/sp_counted_base.hpp
index 9ced2b95ea..c4158920e3 100644
--- a/3party/boost/boost/smart_ptr/detail/sp_counted_base.hpp
+++ b/3party/boost/boost/smart_ptr/detail/sp_counted_base.hpp
@@ -10,7 +10,7 @@
//
// detail/sp_counted_base.hpp
//
-// Copyright 2005, 2006 Peter Dimov
+// Copyright 2005-2013 Peter Dimov
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -23,6 +23,9 @@
#if defined( BOOST_SP_DISABLE_THREADS )
# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>
+#elif defined( BOOST_SP_USE_STD_ATOMIC )
+# include <boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp>
+
#elif defined( BOOST_SP_USE_SPINLOCK )
# include <boost/smart_ptr/detail/sp_counted_base_spin.hpp>
diff --git a/3party/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp b/3party/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp
index a742c3df58..a16d2d8652 100644
--- a/3party/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp
+++ b/3party/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp
@@ -19,6 +19,7 @@
//
#include <boost/detail/sp_typeinfo.hpp>
+#include <boost/assert.hpp>
#include <pthread.h>
namespace boost
@@ -46,15 +47,15 @@ public:
// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init
#if defined(__hpux) && defined(_DECTHREADS_)
- pthread_mutex_init( &m_, pthread_mutexattr_default );
+ BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 );
#else
- pthread_mutex_init( &m_, 0 );
+ BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 );
#endif
}
virtual ~sp_counted_base() // nothrow
{
- pthread_mutex_destroy( &m_ );
+ BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 );
}
// dispose() is called when use_count_ drops to zero, to release
@@ -74,24 +75,24 @@ public:
void add_ref_copy()
{
- pthread_mutex_lock( &m_ );
+ BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
++use_count_;
- pthread_mutex_unlock( &m_ );
+ BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
}
bool add_ref_lock() // true on success
{
- pthread_mutex_lock( &m_ );
+ BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
bool r = use_count_ == 0? false: ( ++use_count_, true );
- pthread_mutex_unlock( &m_ );
+ BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
return r;
}
void release() // nothrow
{
- pthread_mutex_lock( &m_ );
+ BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
long new_use_count = --use_count_;
- pthread_mutex_unlock( &m_ );
+ BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
if( new_use_count == 0 )
{
@@ -102,16 +103,16 @@ public:
void weak_add_ref() // nothrow
{
- pthread_mutex_lock( &m_ );
+ BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
++weak_count_;
- pthread_mutex_unlock( &m_ );
+ BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
}
void weak_release() // nothrow
{
- pthread_mutex_lock( &m_ );
+ BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
long new_weak_count = --weak_count_;
- pthread_mutex_unlock( &m_ );
+ BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
if( new_weak_count == 0 )
{
@@ -121,9 +122,9 @@ public:
long use_count() const // nothrow
{
- pthread_mutex_lock( &m_ );
+ BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
long r = use_count_;
- pthread_mutex_unlock( &m_ );
+ BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
return r;
}
diff --git a/3party/boost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp b/3party/boost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp
new file mode 100644
index 0000000000..cab8453591
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp
@@ -0,0 +1,137 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_STD_ATOMIC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_STD_ATOMIC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// detail/sp_counted_base_std_atomic.hpp - C++11 std::atomic
+//
+// Copyright (c) 2007, 2013 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <atomic>
+#include <cstdint>
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( std::atomic_int_least32_t * pw )
+{
+ pw->fetch_add( 1, std::memory_order_relaxed );
+}
+
+inline std::int_least32_t atomic_decrement( std::atomic_int_least32_t * pw )
+{
+ return pw->fetch_sub( 1, std::memory_order_acq_rel );
+}
+
+inline std::int_least32_t atomic_conditional_increment( std::atomic_int_least32_t * pw )
+{
+ // long r = *pw;
+ // if( r != 0 ) ++*pw;
+ // return r;
+
+ std::int_least32_t r = pw->load( std::memory_order_relaxed );
+
+ for( ;; )
+ {
+ if( r == 0 )
+ {
+ return r;
+ }
+
+ if( pw->compare_exchange_weak( r, r + 1, std::memory_order_relaxed, std::memory_order_relaxed ) )
+ {
+ return r;
+ }
+ }
+}
+
+class sp_counted_base
+{
+private:
+
+ sp_counted_base( sp_counted_base const & );
+ sp_counted_base & operator= ( sp_counted_base const & );
+
+ std::atomic_int_least32_t use_count_; // #shared
+ std::atomic_int_least32_t weak_count_; // #weak + (#shared != 0)
+
+public:
+
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+ {
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destroy() is called when weak_count_ drops to zero.
+
+ virtual void destroy() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+ virtual void * get_untyped_deleter() = 0;
+
+ void add_ref_copy()
+ {
+ atomic_increment( &use_count_ );
+ }
+
+ bool add_ref_lock() // true on success
+ {
+ return atomic_conditional_increment( &use_count_ ) != 0;
+ }
+
+ void release() // nothrow
+ {
+ if( atomic_decrement( &use_count_ ) == 1 )
+ {
+ dispose();
+ weak_release();
+ }
+ }
+
+ void weak_add_ref() // nothrow
+ {
+ atomic_increment( &weak_count_ );
+ }
+
+ void weak_release() // nothrow
+ {
+ if( atomic_decrement( &weak_count_ ) == 1 )
+ {
+ destroy();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+ return use_count_.load( std::memory_order_acquire );
+ }
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_STD_ATOMIC_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp b/3party/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp
index ff394dc6bc..4ba509c6cd 100644
--- a/3party/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp
+++ b/3party/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp
@@ -24,7 +24,7 @@
// formulation
//
-#include <boost/detail/interlocked.hpp>
+#include <boost/smart_ptr/detail/sp_interlocked.hpp>
#include <boost/detail/workaround.hpp>
#include <boost/detail/sp_typeinfo.hpp>
@@ -71,7 +71,7 @@ public:
void add_ref_copy()
{
- BOOST_INTERLOCKED_INCREMENT( &use_count_ );
+ BOOST_SP_INTERLOCKED_INCREMENT( &use_count_ );
}
bool add_ref_lock() // true on success
@@ -86,11 +86,11 @@ public:
// work around a code generation bug
long tmp2 = tmp + 1;
- if( BOOST_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp2, tmp ) == tmp2 - 1 ) return true;
+ if( BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp2, tmp ) == tmp2 - 1 ) return true;
#else
- if( BOOST_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp + 1, tmp ) == tmp ) return true;
+ if( BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp + 1, tmp ) == tmp ) return true;
#endif
}
@@ -98,7 +98,7 @@ public:
void release() // nothrow
{
- if( BOOST_INTERLOCKED_DECREMENT( &use_count_ ) == 0 )
+ if( BOOST_SP_INTERLOCKED_DECREMENT( &use_count_ ) == 0 )
{
dispose();
weak_release();
@@ -107,12 +107,12 @@ public:
void weak_add_ref() // nothrow
{
- BOOST_INTERLOCKED_INCREMENT( &weak_count_ );
+ BOOST_SP_INTERLOCKED_INCREMENT( &weak_count_ );
}
void weak_release() // nothrow
{
- if( BOOST_INTERLOCKED_DECREMENT( &weak_count_ ) == 0 )
+ if( BOOST_SP_INTERLOCKED_DECREMENT( &weak_count_ ) == 0 )
{
destroy();
}
diff --git a/3party/boost/boost/smart_ptr/detail/sp_counted_impl.hpp b/3party/boost/boost/smart_ptr/detail/sp_counted_impl.hpp
index d15cd3cf1c..a7b43aeaff 100644
--- a/3party/boost/boost/smart_ptr/detail/sp_counted_impl.hpp
+++ b/3party/boost/boost/smart_ptr/detail/sp_counted_impl.hpp
@@ -213,7 +213,7 @@ public:
{
}
- sp_counted_impl_pda( P p, A a ): p_( p ), d_(), a_( a )
+ sp_counted_impl_pda( P p, A a ): p_( p ), d_( a ), a_( a )
{
}
@@ -224,11 +224,28 @@ public:
virtual void destroy() // nothrow
{
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ typedef typename std::allocator_traits<A>::template rebind_alloc< this_type > A2;
+
+#else
+
typedef typename A::template rebind< this_type >::other A2;
+#endif
+
A2 a2( a_ );
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ std::allocator_traits<A2>::destroy( a2, this );
+
+#else
+
this->~this_type();
+
+#endif
+
a2.deallocate( this, 1 );
}
diff --git a/3party/boost/boost/smart_ptr/detail/sp_if_array.hpp b/3party/boost/boost/smart_ptr/detail/sp_if_array.hpp
index 661e1785ec..9a2c1e0baa 100644
--- a/3party/boost/boost/smart_ptr/detail/sp_if_array.hpp
+++ b/3party/boost/boost/smart_ptr/detail/sp_if_array.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012 Glen Joseph Fernandes
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes
* glenfe at live dot com
*
* Distributed under the Boost Software License,
@@ -13,15 +13,18 @@
namespace boost {
namespace detail {
- template<typename T>
+ template<class T>
struct sp_if_array;
- template<typename T>
+
+ template<class T>
struct sp_if_array<T[]> {
typedef boost::shared_ptr<T[]> type;
};
- template<typename T>
+
+ template<class T>
struct sp_if_size_array;
- template<typename T, std::size_t N>
+
+ template<class T, std::size_t N>
struct sp_if_size_array<T[N]> {
typedef boost::shared_ptr<T[N]> type;
};
diff --git a/3party/boost/boost/smart_ptr/detail/sp_interlocked.hpp b/3party/boost/boost/smart_ptr/detail/sp_interlocked.hpp
new file mode 100644
index 0000000000..814b0c2e93
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/sp_interlocked.hpp
@@ -0,0 +1,152 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_INTERLOCKED_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_INTERLOCKED_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/detail/sp_interlocked.hpp
+//
+// Copyright 2005, 2014 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/config.hpp>
+
+// BOOST_SP_HAS_INTRIN_H
+
+// VC9 has intrin.h, but it collides with <utility>
+#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1600
+
+# define BOOST_SP_HAS_INTRIN_H
+
+// Unlike __MINGW64__, __MINGW64_VERSION_MAJOR is defined by MinGW-w64 for both 32 and 64-bit targets.
+#elif defined( __MINGW64_VERSION_MAJOR )
+
+// MinGW-w64 provides intrin.h for both 32 and 64-bit targets.
+# define BOOST_SP_HAS_INTRIN_H
+
+// Intel C++ on Windows on VC10+ stdlib
+#elif defined( BOOST_INTEL_WIN ) && defined( _CPPLIB_VER ) && _CPPLIB_VER >= 520
+
+# define BOOST_SP_HAS_INTRIN_H
+
+#endif
+
+#if defined( BOOST_USE_WINDOWS_H )
+
+# include <windows.h>
+
+# define BOOST_SP_INTERLOCKED_INCREMENT InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
+
+#elif defined( BOOST_USE_INTRIN_H ) || defined( BOOST_SP_HAS_INTRIN_H )
+
+#include <intrin.h>
+
+# define BOOST_SP_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+#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_SP_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+#else
+
+// under Windows CE we still have old-style Interlocked* functions
+
+extern "C" long __cdecl InterlockedIncrement( long* );
+extern "C" long __cdecl InterlockedDecrement( long* );
+extern "C" long __cdecl InterlockedCompareExchange( long*, long, long );
+extern "C" long __cdecl InterlockedExchange( long*, long );
+extern "C" long __cdecl InterlockedExchangeAdd( long*, long );
+
+# define BOOST_SP_INTERLOCKED_INCREMENT InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
+
+#endif
+
+#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )
+
+#if defined( __CLRCALL_PURE_OR_CDECL )
+
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedIncrement( long volatile * );
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedDecrement( long volatile * );
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedCompareExchange( long volatile *, long, long );
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedExchange( long volatile *, long );
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedExchangeAdd( long volatile *, long );
+
+#else
+
+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 );
+
+#endif
+
+# define BOOST_SP_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )
+
+namespace boost
+{
+
+namespace detail
+{
+
+extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement( long volatile * );
+extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement( long volatile * );
+extern "C" __declspec(dllimport) long __stdcall InterlockedCompareExchange( long volatile *, long, long );
+extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volatile *, long );
+extern "C" __declspec(dllimport) long __stdcall InterlockedExchangeAdd( long volatile *, long );
+
+} // namespace detail
+
+} // namespace boost
+
+# define BOOST_SP_INTERLOCKED_INCREMENT ::boost::detail::InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT ::boost::detail::InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE ::boost::detail::InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE ::boost::detail::InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD ::boost::detail::InterlockedExchangeAdd
+
+#else
+
+# error "Interlocked intrinsics not available"
+
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_INTERLOCKED_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/spinlock.hpp b/3party/boost/boost/smart_ptr/detail/spinlock.hpp
index 88d7ad62c7..19f93d7c6b 100644
--- a/3party/boost/boost/smart_ptr/detail/spinlock.hpp
+++ b/3party/boost/boost/smart_ptr/detail/spinlock.hpp
@@ -31,7 +31,16 @@
#include <boost/config.hpp>
#include <boost/smart_ptr/detail/sp_has_sync.hpp>
-#if defined( BOOST_SP_USE_PTHREADS )
+#if defined( BOOST_SP_USE_STD_ATOMIC )
+# if !defined( __clang__ )
+# include <boost/smart_ptr/detail/spinlock_std_atomic.hpp>
+# else
+// Clang (at least up to 3.4) can't compile spinlock_pool when
+// using std::atomic, so substitute the __sync implementation instead.
+# include <boost/smart_ptr/detail/spinlock_sync.hpp>
+# endif
+
+#elif defined( BOOST_SP_USE_PTHREADS )
# include <boost/smart_ptr/detail/spinlock_pt.hpp>
#elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ )
diff --git a/3party/boost/boost/smart_ptr/detail/spinlock_std_atomic.hpp b/3party/boost/boost/smart_ptr/detail/spinlock_std_atomic.hpp
new file mode 100644
index 0000000000..a61c1cd96d
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/spinlock_std_atomic.hpp
@@ -0,0 +1,83 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// Copyright (c) 2014 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/smart_ptr/detail/yield_k.hpp>
+#include <atomic>
+
+namespace boost
+{
+
+namespace detail
+{
+
+class spinlock
+{
+public:
+
+ std::atomic_flag v_;
+
+public:
+
+ bool try_lock()
+ {
+ return !v_.test_and_set( std::memory_order_acquire );
+ }
+
+ void lock()
+ {
+ for( unsigned k = 0; !try_lock(); ++k )
+ {
+ boost::detail::yield( k );
+ }
+ }
+
+ void unlock()
+ {
+ v_ .clear( std::memory_order_release );
+ }
+
+public:
+
+ class scoped_lock
+ {
+ private:
+
+ spinlock & sp_;
+
+ scoped_lock( scoped_lock const & );
+ scoped_lock & operator=( scoped_lock const & );
+
+ public:
+
+ explicit scoped_lock( spinlock & sp ): sp_( sp )
+ {
+ sp.lock();
+ }
+
+ ~scoped_lock()
+ {
+ sp_.unlock();
+ }
+ };
+};
+
+} // namespace detail
+} // namespace boost
+
+#define BOOST_DETAIL_SPINLOCK_INIT { ATOMIC_FLAG_INIT }
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/detail/spinlock_w32.hpp b/3party/boost/boost/smart_ptr/detail/spinlock_w32.hpp
index fb97629c7c..d34e4fc2b5 100644
--- a/3party/boost/boost/smart_ptr/detail/spinlock_w32.hpp
+++ b/3party/boost/boost/smart_ptr/detail/spinlock_w32.hpp
@@ -15,7 +15,7 @@
// http://www.boost.org/LICENSE_1_0.txt)
//
-#include <boost/detail/interlocked.hpp>
+#include <boost/smart_ptr/detail/sp_interlocked.hpp>
#include <boost/smart_ptr/detail/yield_k.hpp>
// BOOST_COMPILER_FENCE
@@ -59,7 +59,7 @@ public:
bool try_lock()
{
- long r = BOOST_INTERLOCKED_EXCHANGE( &v_, 1 );
+ long r = BOOST_SP_INTERLOCKED_EXCHANGE( &v_, 1 );
BOOST_COMPILER_FENCE
diff --git a/3party/boost/boost/smart_ptr/detail/up_if_array.hpp b/3party/boost/boost/smart_ptr/detail/up_if_array.hpp
new file mode 100644
index 0000000000..7e62d106b4
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/up_if_array.hpp
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_DETAIL_UP_IF_ARRAY_HPP
+#define BOOST_SMART_PTR_DETAIL_UP_IF_ARRAY_HPP
+
+#include <memory>
+
+namespace boost {
+ namespace detail {
+ template<class T>
+ struct up_if_array;
+
+ template<class T>
+ struct up_if_array<T[]> {
+ typedef std::unique_ptr<T[]> type;
+ };
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/smart_ptr/detail/up_if_not_array.hpp b/3party/boost/boost/smart_ptr/detail/up_if_not_array.hpp
new file mode 100644
index 0000000000..fd74f25318
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/detail/up_if_not_array.hpp
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_DETAIL_UP_IF_NOT_ARRAY_HPP
+#define BOOST_SMART_PTR_DETAIL_UP_IF_NOT_ARRAY_HPP
+
+#include <memory>
+
+namespace boost {
+ namespace detail {
+ template<class T>
+ struct up_if_not_array {
+ typedef std::unique_ptr<T> type;
+ };
+
+ template<class T>
+ struct up_if_not_array<T[]> {
+ };
+
+ template<class T, std::size_t N>
+ struct up_if_not_array<T[N]> {
+ };
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/smart_ptr/detail/yield_k.hpp b/3party/boost/boost/smart_ptr/detail/yield_k.hpp
index 23eadd808b..9f4496b986 100644
--- a/3party/boost/boost/smart_ptr/detail/yield_k.hpp
+++ b/3party/boost/boost/smart_ptr/detail/yield_k.hpp
@@ -11,6 +11,7 @@
// yield_k.hpp
//
// Copyright (c) 2008 Peter Dimov
+// Copyright (c) Microsoft Corporation 2014
//
// void yield( unsigned k );
//
@@ -24,13 +25,17 @@
//
#include <boost/config.hpp>
+#include <boost/predef.h>
+
+#if BOOST_PLAT_WINDOWS_RUNTIME
+#include <thread>
+#endif
// BOOST_SMT_PAUSE
#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) )
extern "C" void _mm_pause();
-#pragma intrinsic( _mm_pause )
#define BOOST_SMT_PAUSE _mm_pause();
@@ -54,7 +59,7 @@ namespace boost
namespace detail
{
-#if !defined( BOOST_USE_WINDOWS_H )
+#if !defined( BOOST_USE_WINDOWS_H ) && !BOOST_PLAT_WINDOWS_RUNTIME
extern "C" void __stdcall Sleep( unsigned long ms );
#endif
@@ -69,6 +74,7 @@ inline void yield( unsigned k )
BOOST_SMT_PAUSE
}
#endif
+#if !BOOST_PLAT_WINDOWS_RUNTIME
else if( k < 32 )
{
Sleep( 0 );
@@ -77,6 +83,13 @@ inline void yield( unsigned k )
{
Sleep( 1 );
}
+#else
+ else
+ {
+ // Sleep isn't supported on the Windows Runtime.
+ std::this_thread::yield();
+ }
+#endif
}
} // namespace detail
diff --git a/3party/boost/boost/smart_ptr/intrusive_ptr.hpp b/3party/boost/boost/smart_ptr/intrusive_ptr.hpp
index b6f5bcd53a..e5db609976 100644
--- a/3party/boost/boost/smart_ptr/intrusive_ptr.hpp
+++ b/3party/boost/boost/smart_ptr/intrusive_ptr.hpp
@@ -146,11 +146,23 @@ public:
this_type( rhs ).swap( *this );
}
+ void reset( T * rhs, bool add_ref )
+ {
+ this_type( rhs, add_ref ).swap( *this );
+ }
+
T * get() const BOOST_NOEXCEPT
{
return px;
}
+ T * detach() BOOST_NOEXCEPT
+ {
+ T * ret = px;
+ px = 0;
+ return ret;
+ }
+
T & operator*() const
{
BOOST_ASSERT( px != 0 );
diff --git a/3party/boost/boost/smart_ptr/intrusive_ref_counter.hpp b/3party/boost/boost/smart_ptr/intrusive_ref_counter.hpp
new file mode 100644
index 0000000000..82fa8bc3e3
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/intrusive_ref_counter.hpp
@@ -0,0 +1,187 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file intrusive_ref_counter.hpp
+ * \author Andrey Semashev
+ * \date 12.03.2009
+ *
+ * This header contains a reference counter class for \c intrusive_ptr.
+ */
+
+#ifndef BOOST_SMART_PTR_INTRUSIVE_REF_COUNTER_HPP_INCLUDED_
+#define BOOST_SMART_PTR_INTRUSIVE_REF_COUNTER_HPP_INCLUDED_
+
+#include <boost/config.hpp>
+#include <boost/smart_ptr/detail/atomic_count.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+// This is a bogus MSVC warning, which is flagged by friend declarations of intrusive_ptr_add_ref and intrusive_ptr_release in intrusive_ref_counter:
+// 'name' : the inline specifier cannot be used when a friend declaration refers to a specialization of a function template
+// Note that there is no inline specifier in the declarations.
+#pragma warning(disable: 4396)
+#endif
+
+namespace boost {
+
+namespace sp_adl_block {
+
+/*!
+ * \brief Thread unsafe reference counter policy for \c intrusive_ref_counter
+ *
+ * The policy instructs the \c intrusive_ref_counter base class to implement
+ * a reference counter suitable for single threaded use only. Pointers to the same
+ * object with this kind of reference counter must not be used by different threads.
+ */
+struct thread_unsafe_counter
+{
+ typedef unsigned int type;
+
+ static unsigned int load(unsigned int const& counter) BOOST_NOEXCEPT
+ {
+ return counter;
+ }
+
+ static void increment(unsigned int& counter) BOOST_NOEXCEPT
+ {
+ ++counter;
+ }
+
+ static unsigned int decrement(unsigned int& counter) BOOST_NOEXCEPT
+ {
+ return --counter;
+ }
+};
+
+/*!
+ * \brief Thread safe reference counter policy for \c intrusive_ref_counter
+ *
+ * The policy instructs the \c intrusive_ref_counter base class to implement
+ * a thread-safe reference counter, if the target platform supports multithreading.
+ */
+struct thread_safe_counter
+{
+ typedef boost::detail::atomic_count type;
+
+ static unsigned int load(boost::detail::atomic_count const& counter) BOOST_NOEXCEPT
+ {
+ return static_cast< unsigned int >(static_cast< long >(counter));
+ }
+
+ static void increment(boost::detail::atomic_count& counter) BOOST_NOEXCEPT
+ {
+ ++counter;
+ }
+
+ static unsigned int decrement(boost::detail::atomic_count& counter) BOOST_NOEXCEPT
+ {
+ return --counter;
+ }
+};
+
+template< typename DerivedT, typename CounterPolicyT = thread_safe_counter >
+class intrusive_ref_counter;
+
+template< typename DerivedT, typename CounterPolicyT >
+void intrusive_ptr_add_ref(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT;
+template< typename DerivedT, typename CounterPolicyT >
+void intrusive_ptr_release(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT;
+
+/*!
+ * \brief A reference counter base class
+ *
+ * This base class can be used with user-defined classes to add support
+ * for \c intrusive_ptr. The class contains a reference counter defined by the \c CounterPolicyT.
+ * Upon releasing the last \c intrusive_ptr referencing the object
+ * derived from the \c intrusive_ref_counter class, operator \c delete
+ * is automatically called on the pointer to the object.
+ *
+ * The other template parameter, \c DerivedT, is the user's class that derives from \c intrusive_ref_counter.
+ */
+template< typename DerivedT, typename CounterPolicyT >
+class intrusive_ref_counter
+{
+private:
+ //! Reference counter type
+ typedef typename CounterPolicyT::type counter_type;
+ //! Reference counter
+ mutable counter_type m_ref_counter;
+
+public:
+ /*!
+ * Default constructor
+ *
+ * \post <tt>use_count() == 0</tt>
+ */
+ intrusive_ref_counter() BOOST_NOEXCEPT : m_ref_counter(0)
+ {
+ }
+
+ /*!
+ * Copy constructor
+ *
+ * \post <tt>use_count() == 0</tt>
+ */
+ intrusive_ref_counter(intrusive_ref_counter const&) BOOST_NOEXCEPT : m_ref_counter(0)
+ {
+ }
+
+ /*!
+ * Assignment
+ *
+ * \post The reference counter is not modified after assignment
+ */
+ intrusive_ref_counter& operator= (intrusive_ref_counter const&) BOOST_NOEXCEPT { return *this; }
+
+ /*!
+ * \return The reference counter
+ */
+ unsigned int use_count() const BOOST_NOEXCEPT
+ {
+ return CounterPolicyT::load(m_ref_counter);
+ }
+
+protected:
+ /*!
+ * Destructor
+ */
+ BOOST_DEFAULTED_FUNCTION(~intrusive_ref_counter(), {})
+
+ friend void intrusive_ptr_add_ref< DerivedT, CounterPolicyT >(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT;
+ friend void intrusive_ptr_release< DerivedT, CounterPolicyT >(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT;
+};
+
+template< typename DerivedT, typename CounterPolicyT >
+inline void intrusive_ptr_add_ref(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT
+{
+ CounterPolicyT::increment(p->m_ref_counter);
+}
+
+template< typename DerivedT, typename CounterPolicyT >
+inline void intrusive_ptr_release(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT
+{
+ if (CounterPolicyT::decrement(p->m_ref_counter) == 0)
+ delete static_cast< const DerivedT* >(p);
+}
+
+} // namespace sp_adl_block
+
+using sp_adl_block::intrusive_ref_counter;
+using sp_adl_block::thread_unsafe_counter;
+using sp_adl_block::thread_safe_counter;
+
+} // namespace boost
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_SMART_PTR_INTRUSIVE_REF_COUNTER_HPP_INCLUDED_
diff --git a/3party/boost/boost/smart_ptr/make_shared_array.hpp b/3party/boost/boost/smart_ptr/make_shared_array.hpp
index eb0578d9ff..c48f5070b6 100644
--- a/3party/boost/boost/smart_ptr/make_shared_array.hpp
+++ b/3party/boost/boost/smart_ptr/make_shared_array.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012 Glen Joseph Fernandes
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes
* glenfe at live dot com
*
* Distributed under the Boost Software License,
@@ -9,238 +9,149 @@
#ifndef BOOST_SMART_PTR_MAKE_SHARED_ARRAY_HPP
#define BOOST_SMART_PTR_MAKE_SHARED_ARRAY_HPP
-#include <boost/smart_ptr/shared_ptr.hpp>
-#include <boost/smart_ptr/detail/array_deleter.hpp>
-#include <boost/smart_ptr/detail/array_traits.hpp>
-#include <boost/smart_ptr/detail/make_array_helper.hpp>
+#include <boost/smart_ptr/detail/array_count_impl.hpp>
#include <boost/smart_ptr/detail/sp_if_array.hpp>
-#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
-#include <initializer_list>
-#endif
namespace boost {
- template<typename T>
+ template<class T>
inline typename boost::detail::sp_if_array<T>::type
make_shared(std::size_t size) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
- T1* p1 = 0;
- T2* p2 = 0;
+ typedef boost::detail::ms_allocator<T> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
std::size_t n1 = size * boost::detail::array_total<T1>::size;
- boost::detail::make_array_helper<T2[]> a1(n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2);
- return boost::shared_ptr<T>(s1, p1);
- }
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- template<typename T, typename... Args>
- inline typename boost::detail::sp_if_array<T>::type
- make_shared(std::size_t size, Args&&... args) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
- T1* p1 = 0;
- T2* p2 = 0;
- std::size_t n1 = size * boost::detail::array_total<T1>::size;
- boost::detail::make_array_helper<T2[]> a1(n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2, boost::detail::sp_forward<Args>(args)...);
- return boost::shared_ptr<T>(s1, p1);
- }
- template<typename T, typename... Args>
- inline typename boost::detail::sp_if_size_array<T>::type
- make_shared(Args&&... args) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
- enum {
- N = boost::detail::array_total<T>::size
- };
T1* p1 = 0;
T2* p2 = 0;
- boost::detail::make_array_helper<T2[N]> a1(&p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
+ D1 d1;
+ A1 a1(size, &p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+ boost::detail::ms_init(p2, n1);
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2, boost::detail::sp_forward<Args>(args)...);
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
-#endif
-#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
- template<typename T>
+
+ template<class T>
inline typename boost::detail::sp_if_size_array<T>::type
- make_shared(const T& list) {
+ make_shared() {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
- typedef const T2 T3;
+ typedef boost::detail::ms_allocator<T> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
enum {
N = boost::detail::array_total<T>::size
};
T1* p1 = 0;
T2* p2 = 0;
- T3* p3 = 0;
- boost::detail::make_array_helper<T2[N]> a1(&p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
- p3 = reinterpret_cast<T3*>(list);
+ D1 d1;
+ A1 a1(&p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+ boost::detail::ms_init(p2, N);
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init_list(p2, p3);
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
- template<typename T>
+
+ template<class T>
inline typename boost::detail::sp_if_array<T>::type
make_shared(std::size_t size,
- const typename boost::detail::array_inner<T>::type& list) {
+ const typename boost::detail::array_inner<T>::type& value) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
typedef const T2 T3;
+ typedef boost::detail::ms_allocator<T> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
enum {
M = boost::detail::array_total<T1>::size
};
+ std::size_t n1 = M * size;
T1* p1 = 0;
T2* p2 = 0;
- T3* p3 = 0;
- std::size_t n1 = M * size;
- boost::detail::make_array_helper<T2[]> a1(n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
- p3 = reinterpret_cast<T3*>(list);
+ T3* p3 = reinterpret_cast<T3*>(&value);
+ D1 d1;
+ A1 a1(size, &p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+ boost::detail::ms_init<T2, M>(p2, n1, p3);
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->template init_list<M>(p2, p3);
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
- template<typename T>
+
+ template<class T>
inline typename boost::detail::sp_if_size_array<T>::type
- make_shared(const typename boost::detail::array_inner<T>::type& list) {
+ make_shared(const typename boost::detail::array_inner<T>::type& value) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
typedef const T2 T3;
+ typedef boost::detail::ms_allocator<T> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
enum {
M = boost::detail::array_total<T1>::size,
N = boost::detail::array_total<T>::size
};
T1* p1 = 0;
T2* p2 = 0;
- T3* p3 = 0;
- boost::detail::make_array_helper<T2[N]> a1(&p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
- p3 = reinterpret_cast<T3*>(list);
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->template init_list<M>(p2, p3);
- return boost::shared_ptr<T>(s1, p1);
- }
-#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
- template<typename T>
- inline typename boost::detail::sp_if_array<T>::type
- make_shared(std::initializer_list<typename boost::detail::array_inner<T>::type> list) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
- typedef const T2 T3;
- T1* p1 = 0;
- T2* p2 = 0;
- T3* p3 = 0;
- std::size_t n1 = list.size() * boost::detail::array_total<T1>::size;
- boost::detail::make_array_helper<T2[]> a1(n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
- p3 = reinterpret_cast<T3*>(list.begin());
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init_list(p2, p3);
- return boost::shared_ptr<T>(s1, p1);
- }
-#endif
-#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
- template<typename T>
- inline typename boost::detail::sp_if_array<T>::type
- make_shared(std::size_t size,
- typename boost::detail::array_base<T>::type&& value) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
- T1* p1 = 0;
- T2* p2 = 0;
- std::size_t n1 = size * boost::detail::array_total<T1>::size;
- boost::detail::make_array_helper<T2[]> a1(n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
- p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2, boost::detail::sp_forward<T2>(value));
- return boost::shared_ptr<T>(s1, p1);
- }
- template<typename T>
- inline typename boost::detail::sp_if_size_array<T>::type
- make_shared(typename boost::detail::array_base<T>::type&& value) {
- typedef typename boost::detail::array_inner<T>::type T1;
- typedef typename boost::detail::array_base<T1>::type T2;
- enum {
- N = boost::detail::array_total<T>::size
- };
- T1* p1 = 0;
- T2* p2 = 0;
- boost::detail::make_array_helper<T2[N]> a1(&p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
+ T3* p3 = reinterpret_cast<T3*>(&value);
+ D1 d1;
+ A1 a1(&p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+ boost::detail::ms_init<T2, M>(p2, N, p3);
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->init(p2, boost::detail::sp_forward<T2>(value));
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
-#endif
-#endif
- template<typename T>
+
+ template<class T>
inline typename boost::detail::sp_if_array<T>::type
make_shared_noinit(std::size_t size) {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
+ typedef boost::detail::ms_allocator<T> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
+ std::size_t n1 = size * boost::detail::array_total<T1>::size;
T1* p1 = 0;
T2* p2 = 0;
- std::size_t n1 = size * boost::detail::array_total<T1>::size;
- boost::detail::make_array_helper<T2[]> a1(n1, &p2);
- boost::detail::array_deleter<T2[]> d1(n1);
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[]>* D2;
+ D1 d1;
+ A1 a1(size, &p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+ boost::detail::ms_noinit(p2, n1);
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->noinit(p2);
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
- template<typename T>
+
+ template<class T>
inline typename boost::detail::sp_if_size_array<T>::type
make_shared_noinit() {
typedef typename boost::detail::array_inner<T>::type T1;
typedef typename boost::detail::array_base<T1>::type T2;
+ typedef boost::detail::ms_allocator<T> A1;
+ typedef boost::detail::ms_in_allocator_tag D1;
enum {
N = boost::detail::array_total<T>::size
};
T1* p1 = 0;
T2* p2 = 0;
- boost::detail::make_array_helper<T2[N]> a1(&p2);
- boost::detail::array_deleter<T2[N]> d1;
- boost::shared_ptr<T> s1(p1, d1, a1);
- typedef boost::detail::array_deleter<T2[N]>* D2;
+ D1 d1;
+ A1 a1(&p2);
+ shared_ptr<T> s1(p1, d1, a1);
+ A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+ a2->set(0);
+ boost::detail::ms_noinit(p2, N);
+ a2->set(p2);
p1 = reinterpret_cast<T1*>(p2);
- D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
- d2->noinit(p2);
- return boost::shared_ptr<T>(s1, p1);
+ return shared_ptr<T>(s1, p1);
}
}
diff --git a/3party/boost/boost/smart_ptr/make_shared_object.hpp b/3party/boost/boost/smart_ptr/make_shared_object.hpp
index 52a00cecd9..62372fa7ef 100644
--- a/3party/boost/boost/smart_ptr/make_shared_object.hpp
+++ b/3party/boost/boost/smart_ptr/make_shared_object.hpp
@@ -72,6 +72,10 @@ public:
{
}
+ template<class A> explicit sp_ms_deleter( A const & ) BOOST_NOEXCEPT : initialized_( false )
+ {
+ }
+
// optimization: do not copy storage_
sp_ms_deleter( sp_ms_deleter const & ) BOOST_NOEXCEPT : initialized_( false )
{
@@ -102,6 +106,74 @@ public:
}
};
+template< class T, class A > class sp_as_deleter
+{
+private:
+
+ typedef typename sp_aligned_storage< sizeof( T ), ::boost::alignment_of< T >::value >::type storage_type;
+
+ storage_type storage_;
+ A a_;
+ bool initialized_;
+
+private:
+
+ void destroy()
+ {
+ if( initialized_ )
+ {
+ T * p = reinterpret_cast< T* >( storage_.data_ );
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ std::allocator_traits<A>::destroy( a_, p );
+
+#else
+
+ p->~T();
+
+#endif
+
+ initialized_ = false;
+ }
+ }
+
+public:
+
+ sp_as_deleter( A const & a ) BOOST_NOEXCEPT : a_( a ), initialized_( false )
+ {
+ }
+
+ // optimization: do not copy storage_
+ sp_as_deleter( sp_as_deleter const & r ) BOOST_NOEXCEPT : a_( r.a_), initialized_( false )
+ {
+ }
+
+ ~sp_as_deleter()
+ {
+ destroy();
+ }
+
+ void operator()( T * )
+ {
+ destroy();
+ }
+
+ static void operator_fn( T* ) // operator() can't be static
+ {
+ }
+
+ void * address() BOOST_NOEXCEPT
+ {
+ return storage_.data_;
+ }
+
+ void set_initialized() BOOST_NOEXCEPT
+ {
+ initialized_ = true;
+ }
+};
+
template< class T > struct sp_if_not_array
{
typedef boost::shared_ptr< T > type;
@@ -131,11 +203,9 @@ template< class T, std::size_t N > struct sp_if_not_array< T[N] >
# define BOOST_SP_MSD( T ) boost::detail::sp_ms_deleter< T >()
#endif
-// Zero-argument versions
-//
-// Used even when variadic templates are available because of the new T() vs new T issue
+// _noinit versions
-template< class T > typename boost::detail::sp_if_not_array< T >::type make_shared()
+template< class T > typename boost::detail::sp_if_not_array< T >::type make_shared_noinit()
{
boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
@@ -143,7 +213,7 @@ template< class T > typename boost::detail::sp_if_not_array< T >::type make_shar
void * pv = pd->address();
- ::new( pv ) T();
+ ::new( pv ) T;
pd->set_initialized();
T * pt2 = static_cast< T* >( pv );
@@ -152,9 +222,9 @@ template< class T > typename boost::detail::sp_if_not_array< T >::type make_shar
return boost::shared_ptr< T >( pt, pt2 );
}
-template< class T > typename boost::detail::sp_if_not_array< T >::type make_shared_noinit()
+template< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared_noinit( A const & a )
{
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
@@ -169,15 +239,19 @@ template< class T > typename boost::detail::sp_if_not_array< T >::type make_shar
return boost::shared_ptr< T >( pt, pt2 );
}
-template< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a )
+#if !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+// Variadic templates, rvalue reference
+
+template< class T, class... Args > typename boost::detail::sp_if_not_array< T >::type make_shared( Args && ... args )
{
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
void * pv = pd->address();
- ::new( pv ) T();
+ ::new( pv ) T( boost::detail::sp_forward<Args>( args )... );
pd->set_initialized();
T * pt2 = static_cast< T* >( pv );
@@ -186,15 +260,38 @@ template< class T, class A > typename boost::detail::sp_if_not_array< T >::type
return boost::shared_ptr< T >( pt, pt2 );
}
-template< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared_noinit( A const & a )
+template< class T, class A, class... Args > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, Args && ... args )
{
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
- boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+ typedef typename std::allocator_traits<A>::template rebind_alloc<T> A2;
+ A2 a2( a );
+
+ typedef boost::detail::sp_as_deleter< T, A2 > D;
+
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), boost::detail::sp_inplace_tag<D>(), a2 );
+
+#else
+
+ typedef boost::detail::sp_ms_deleter< T > D;
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), boost::detail::sp_inplace_tag<D>(), a );
+
+#endif
+
+ D * pd = static_cast< D* >( pt._internal_get_untyped_deleter() );
void * pv = pd->address();
- ::new( pv ) T;
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+ std::allocator_traits<A2>::construct( a2, static_cast< T* >( pv ), boost::detail::sp_forward<Args>( args )... );
+
+#else
+
+ ::new( pv ) T( boost::detail::sp_forward<Args>( args )... );
+
+#endif
+
pd->set_initialized();
T * pt2 = static_cast< T* >( pv );
@@ -203,11 +300,11 @@ template< class T, class A > typename boost::detail::sp_if_not_array< T >::type
return boost::shared_ptr< T >( pt, pt2 );
}
-#if !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+#else // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
-// Variadic templates, rvalue reference
+// Common zero-argument versions
-template< class T, class Arg1, class... Args > typename boost::detail::sp_if_not_array< T >::type make_shared( Arg1 && arg1, Args && ... args )
+template< class T > typename boost::detail::sp_if_not_array< T >::type make_shared()
{
boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
@@ -215,7 +312,7 @@ template< class T, class Arg1, class... Args > typename boost::detail::sp_if_not
void * pv = pd->address();
- ::new( pv ) T( boost::detail::sp_forward<Arg1>( arg1 ), boost::detail::sp_forward<Args>( args )... );
+ ::new( pv ) T();
pd->set_initialized();
T * pt2 = static_cast< T* >( pv );
@@ -224,7 +321,7 @@ template< class T, class Arg1, class... Args > typename boost::detail::sp_if_not
return boost::shared_ptr< T >( pt, pt2 );
}
-template< class T, class A, class Arg1, class... Args > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, Arg1 && arg1, Args && ... args )
+template< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a )
{
boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
@@ -232,7 +329,7 @@ template< class T, class A, class Arg1, class... Args > typename boost::detail::
void * pv = pd->address();
- ::new( pv ) T( boost::detail::sp_forward<Arg1>( arg1 ), boost::detail::sp_forward<Args>( args )... );
+ ::new( pv ) T();
pd->set_initialized();
T * pt2 = static_cast< T* >( pv );
@@ -241,7 +338,7 @@ template< class T, class A, class Arg1, class... Args > typename boost::detail::
return boost::shared_ptr< T >( pt, pt2 );
}
-#elif !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
// For example MSVC 10.0
@@ -695,7 +792,7 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a,
return boost::shared_ptr< T >( pt, pt2 );
}
-#else
+#else // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
// C++03 version
@@ -1023,7 +1120,9 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a,
return boost::shared_ptr< T >( pt, pt2 );
}
-#endif
+#endif // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+#endif // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
#undef BOOST_SP_MSD
diff --git a/3party/boost/boost/smart_ptr/make_unique.hpp b/3party/boost/boost/smart_ptr/make_unique.hpp
new file mode 100644
index 0000000000..90402e2baa
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/make_unique.hpp
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_MAKE_UNIQUE_HPP
+#define BOOST_SMART_PTR_MAKE_UNIQUE_HPP
+
+#include <boost/smart_ptr/make_unique_array.hpp>
+#include <boost/smart_ptr/make_unique_object.hpp>
+
+#endif
diff --git a/3party/boost/boost/smart_ptr/make_unique_array.hpp b/3party/boost/boost/smart_ptr/make_unique_array.hpp
new file mode 100644
index 0000000000..eb0528e63d
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/make_unique_array.hpp
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_MAKE_UNIQUE_ARRAY_HPP
+#define BOOST_SMART_PTR_MAKE_UNIQUE_ARRAY_HPP
+
+#include <boost/smart_ptr/detail/up_if_array.hpp>
+#include <boost/smart_ptr/detail/array_traits.hpp>
+
+namespace boost {
+ template<class T>
+ inline typename boost::detail::up_if_array<T>::type
+ make_unique(std::size_t size) {
+ typedef typename boost::detail::array_inner<T>::type U;
+ return std::unique_ptr<T>(new U[size]());
+ }
+
+ template<class T>
+ inline typename boost::detail::up_if_array<T>::type
+ make_unique_noinit(std::size_t size) {
+ typedef typename boost::detail::array_inner<T>::type U;
+ return std::unique_ptr<T>(new U[size]);
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/smart_ptr/make_unique_object.hpp b/3party/boost/boost/smart_ptr/make_unique_object.hpp
new file mode 100644
index 0000000000..9e6108a36a
--- /dev/null
+++ b/3party/boost/boost/smart_ptr/make_unique_object.hpp
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_MAKE_UNIQUE_OBJECT_HPP
+#define BOOST_SMART_PTR_MAKE_UNIQUE_OBJECT_HPP
+
+#include <boost/config.hpp>
+#include <boost/smart_ptr/detail/up_if_not_array.hpp>
+#include <boost/type_traits/add_rvalue_reference.hpp>
+#include <utility>
+
+namespace boost {
+ template<class T>
+ inline typename boost::detail::up_if_not_array<T>::type
+ make_unique() {
+ return std::unique_ptr<T>(new T());
+ }
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ template<class T, class... Args>
+ inline typename boost::detail::up_if_not_array<T>::type
+ make_unique(Args&&... args) {
+ return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
+ }
+#endif
+
+ template<class T>
+ inline typename boost::detail::up_if_not_array<T>::type
+ make_unique(typename add_rvalue_reference<T>::type value) {
+ return std::unique_ptr<T>(new T(std::move(value)));
+ }
+
+ template<class T>
+ inline typename boost::detail::up_if_not_array<T>::type
+ make_unique_noinit() {
+ return std::unique_ptr<T>(new T);
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/smart_ptr/shared_array.hpp b/3party/boost/boost/smart_ptr/shared_array.hpp
index 73a07ae1b2..fd58071be0 100644
--- a/3party/boost/boost/smart_ptr/shared_array.hpp
+++ b/3party/boost/boost/smart_ptr/shared_array.hpp
@@ -16,10 +16,6 @@
#include <boost/config.hpp> // for broken compiler workarounds
-#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
-#include <boost/smart_ptr/detail/shared_array_nmt.hpp>
-#else
-
#include <memory> // TR1 cyclic inclusion fix
#include <boost/assert.hpp>
@@ -61,6 +57,14 @@ public:
{
}
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+ shared_array( boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT : px( 0 ), pn()
+ {
+ }
+
+#endif
+
template<class Y>
explicit shared_array( Y * p ): px( p ), pn( p, checked_array_deleter<Y>() )
{
@@ -285,6 +289,4 @@ template< class D, class T > D * get_deleter( shared_array<T> const & p )
} // namespace boost
-#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
-
#endif // #ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED
diff --git a/3party/boost/boost/smart_ptr/shared_ptr.hpp b/3party/boost/boost/smart_ptr/shared_ptr.hpp
index 9259ca0f06..83b0451e80 100644
--- a/3party/boost/boost/smart_ptr/shared_ptr.hpp
+++ b/3party/boost/boost/smart_ptr/shared_ptr.hpp
@@ -16,10 +16,6 @@
#include <boost/config.hpp> // for broken compiler workarounds
-#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
-#include <boost/smart_ptr/detail/shared_ptr_nmt.hpp>
-#else
-
// In order to avoid circular dependencies with Boost.TR1
// we make sure that our include of <memory> doesn't try to
// pull in the TR1 headers: that's why we use this header
@@ -36,7 +32,6 @@
#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)
#include <boost/smart_ptr/detail/spinlock_pool.hpp>
-#include <boost/memory_order.hpp>
#endif
#include <algorithm> // for std::swap
@@ -955,7 +950,7 @@ template<class T> shared_ptr<T> atomic_load( shared_ptr<T> const * p )
return *p;
}
-template<class T> inline shared_ptr<T> atomic_load_explicit( shared_ptr<T> const * p, memory_order /*mo*/ )
+template<class T> inline shared_ptr<T> atomic_load_explicit( shared_ptr<T> const * p, /*memory_order mo*/ int )
{
return atomic_load( p );
}
@@ -966,7 +961,7 @@ template<class T> void atomic_store( shared_ptr<T> * p, shared_ptr<T> r )
p->swap( r );
}
-template<class T> inline void atomic_store_explicit( shared_ptr<T> * p, shared_ptr<T> r, memory_order /*mo*/ )
+template<class T> inline void atomic_store_explicit( shared_ptr<T> * p, shared_ptr<T> r, /*memory_order mo*/ int )
{
atomic_store( p, r ); // std::move( r )
}
@@ -982,7 +977,7 @@ template<class T> shared_ptr<T> atomic_exchange( shared_ptr<T> * p, shared_ptr<T
return r; // return std::move( r )
}
-template<class T> shared_ptr<T> atomic_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> r, memory_order /*mo*/ )
+template<class T> shared_ptr<T> atomic_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> r, /*memory_order mo*/ int )
{
return atomic_exchange( p, r ); // std::move( r )
}
@@ -1012,7 +1007,7 @@ template<class T> bool atomic_compare_exchange( shared_ptr<T> * p, shared_ptr<T>
}
}
-template<class T> inline bool atomic_compare_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w, memory_order /*success*/, memory_order /*failure*/ )
+template<class T> inline bool atomic_compare_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w, /*memory_order success*/ int, /*memory_order failure*/ int )
{
return atomic_compare_exchange( p, v, w ); // std::move( w )
}
@@ -1030,6 +1025,4 @@ template< class T > std::size_t hash_value( boost::shared_ptr<T> const & p ) BOO
} // namespace boost
-#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
-
#endif // #ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED
diff --git a/3party/boost/boost/spirit.hpp b/3party/boost/boost/spirit.hpp
index 7de49e68b3..7250ec1589 100644
--- a/3party/boost/boost/spirit.hpp
+++ b/3party/boost/boost/spirit.hpp
@@ -1,6 +1,6 @@
/*=============================================================================
Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2009 Hartmut Kaiser
+ Copyright (c) 2001-2008 Hartmut Kaiser
http://spirit.sourceforge.net/
Distributed under the Boost Software License, Version 1.0. (See accompanying
diff --git a/3party/boost/boost/spirit/home/classic/core/composite/impl/directives.ipp b/3party/boost/boost/spirit/home/classic/core/composite/impl/directives.ipp
index b25b25fdc0..96b2dd79c5 100644
--- a/3party/boost/boost/spirit/home/classic/core/composite/impl/directives.ipp
+++ b/3party/boost/boost/spirit/home/classic/core/composite/impl/directives.ipp
@@ -151,169 +151,6 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
return s.parse(scan);
}
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
- ///////////////////////////////////////////////////////////////////////
- //
- // from spirit 1.1 (copyright (c) 2001 Bruce Florman)
- // various workarounds to support longest and shortest directives
- //
- ///////////////////////////////////////////////////////////////////////
- template <typename T>
- struct is_alternative
- {
- // Determine at compile time (without partial specialization)
- // whether a given type is an instance of the alternative<A,B>
-
- static T t();
- template <typename A, typename B>
- static char test_(alternative<A, B> const&); // no implementation
- static int test_(...); // no implementation
- enum { r = sizeof(char) == sizeof(test_(t())) };
- typedef mpl::bool_<r> value;
- };
-
- template <typename T> struct select_to_longest;
-
- template <typename T>
- struct to_longest_alternative
- {
- typedef typename select_to_longest<T>::result_t result_t;
- typedef typename select_to_longest<T>::plain_t plain_t;
- typedef typename select_to_longest<T>::choose_t choose_t;
- static result_t convert(T const& a);
- };
-
- template <typename T>
- struct to_longest_generic
- {
- typedef T const& result_t;
- typedef T plain_t;
- typedef mpl::false_ choose_t;
- };
-
- template <typename T>
- inline T const&
- to_longest_convert(T const& a, mpl::false_)
- { return a; }
-
- template <typename T>
- struct to_longest_recursive
- {
- typedef typename to_longest_alternative<
- typename T::left_t>::plain_t a_t;
- typedef typename to_longest_alternative<
- typename T::right_t>::plain_t b_t;
-
- typedef longest_alternative<a_t, b_t> result_t;
-
- typedef result_t plain_t;
- typedef mpl::true_ choose_t;
- };
-
- template <typename A, typename B>
- inline typename to_longest_alternative<alternative<A, B> >::result_t
- to_longest_convert(alternative<A, B> const& alt, mpl::true_)
- {
- typedef typename to_longest_alternative<
- alternative<A, B> >::result_t result_t;
- return result_t(
- to_longest_alternative<A>::convert(alt.left()),
- to_longest_alternative<B>::convert(alt.right()));
- }
-
- template <typename T>
- inline typename to_longest_alternative<T>::result_t
- to_longest_alternative<T>::convert(T const& a)
- {
- return to_longest_convert(
- a, to_longest_alternative<T>::choose_t());
- }
-
- template <typename T>
- struct select_to_longest
- {
- typedef typename mpl::if_<
- is_alternative<T> // IF
- , to_longest_recursive<T> // THEN
- , to_longest_generic<T> // ELSE
- >::type type;
-
- typedef typename select_to_longest::type::result_t result_t;
- typedef typename select_to_longest::type::plain_t plain_t;
- typedef typename select_to_longest::type::choose_t choose_t;
- };
-
- template <typename T> struct select_to_shortest;
-
- template <typename T>
- struct to_shortest_alternative
- {
- typedef typename select_to_shortest<T>::result_t result_t;
- typedef typename select_to_shortest<T>::plain_t plain_t;
- typedef typename select_to_shortest<T>::choose_t choose_t;
- static result_t convert(T const& a);
- };
-
- template <typename T>
- struct to_shortest_generic
- {
- typedef T const& result_t;
- typedef T plain_t;
- typedef mpl::false_ choose_t;
- };
-
- template <typename T>
- inline T const&
- to_shortest_convert(T const& a, mpl::false_) { return a; }
-
- template <typename T>
- struct to_shortest_recursive
- {
- typedef typename to_shortest_alternative<
- typename T::left_t>::plain_t a_t;
- typedef typename to_shortest_alternative<
- typename T::right_t>::plain_t b_t;
-
- typedef shortest_alternative<a_t, b_t> result_t;
-
- typedef result_t plain_t;
- typedef mpl::true_ choose_t;
- };
-
- template <typename A, typename B>
- inline typename to_shortest_alternative<alternative<A, B> >::result_t
- to_shortest_convert(alternative<A, B> const& alt, mpl::true_)
- {
- typedef typename to_shortest_alternative<
- alternative<A, B> >::result_t result_t;
- return result_t(
- to_shortest_alternative<A>::convert(alt.left()),
- to_shortest_alternative<B>::convert(alt.right()));
- }
-
- template <typename T>
- inline typename to_shortest_alternative<T>::result_t
- to_shortest_alternative<T>::convert(T const& a)
- {
- return to_shortest_convert(
- a, to_shortest_alternative<T>::choose_t());
- }
-
- template <typename T>
- struct select_to_shortest
- {
- typedef typename mpl::if_<
- is_alternative<T> // IF
- , to_shortest_recursive<T> // THEN
- , to_shortest_generic<T> // ELSE
- >::type type;
-
- typedef typename select_to_shortest::type::result_t result_t;
- typedef typename select_to_shortest::type::plain_t plain_t;
- typedef typename select_to_shortest::type::choose_t choose_t;
- };
-#else
template <typename T>
struct to_longest_alternative
{
@@ -363,7 +200,6 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
to_shortest_alternative<B>::convert(alt.right()));
}
};
-#endif
}
BOOST_SPIRIT_CLASSIC_NAMESPACE_END
diff --git a/3party/boost/boost/spirit/home/classic/core/non_terminal/grammar.hpp b/3party/boost/boost/spirit/home/classic/core/non_terminal/grammar.hpp
index ae7b2658f3..153bc40c3e 100644
--- a/3party/boost/boost/spirit/home/classic/core/non_terminal/grammar.hpp
+++ b/3party/boost/boost/spirit/home/classic/core/non_terminal/grammar.hpp
@@ -79,7 +79,6 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_END
}} // namespace BOOST_SPIRIT_CLASSIC_NS
#undef BOOST_SPIRIT_GRAMMAR_ID
-#undef BOOST_SPIRIT_GRAMMAR_ACCESS
#undef BOOST_SPIRIT_GRAMMAR_STATE
#endif
diff --git a/3party/boost/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp b/3party/boost/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
index 3b25b3d2e3..b26f534751 100644
--- a/3party/boost/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
+++ b/3party/boost/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
@@ -33,19 +33,6 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
template <typename DerivedT, typename ContextT>
struct grammar;
-#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
-
-BOOST_SPIRIT_DEPENDENT_TEMPLATE_WRAPPER(grammar_definition_wrapper, definition);
-
-//////////////////////////////////
-template <typename GrammarT, typename ScannerT>
-struct grammar_definition
-{
- typedef typename impl::grammar_definition_wrapper<GrammarT>
- ::template result_<ScannerT>::param_t type;
-};
-
-#else
//////////////////////////////////
template <typename GrammarT, typename ScannerT>
@@ -54,7 +41,6 @@ struct grammar_definition
typedef typename GrammarT::template definition<ScannerT> type;
};
-#endif
namespace impl
{
@@ -122,8 +108,7 @@ struct grammar_definition
//////////////////////////////////
struct grammartract_helper_list;
-#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE) \
- && (!defined(__GNUC__) || (__GNUC__ > 2))
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
struct grammartract_helper_list
{
@@ -162,11 +147,7 @@ struct grammar_definition
define(grammar_t const* target_grammar)
{
grammar_helper_list<GrammarT> &helpers =
-#if !defined(__GNUC__) || (__GNUC__ > 2)
- grammartract_helper_list::do_(target_grammar);
-#else
- target_grammar->helpers;
-#endif
+ grammartract_helper_list::do_(target_grammar);
typename grammar_t::object_id id = target_grammar->get_object_id();
if (definitions.size()<=id)
@@ -252,7 +233,6 @@ struct grammar_definition
#endif
}
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <int N>
struct call_helper {
@@ -263,11 +243,6 @@ struct grammar_definition
result = def.template get_start_parser<N>()->parse(scan);
}
};
-#else
- // The grammar_def stuff isn't supported for compilers, which do not
- // support partial template specialization
- template <int N> struct call_helper;
-#endif
template <>
struct call_helper<0> {
@@ -310,14 +285,9 @@ struct grammar_definition
typedef typename helper_list_t::vector_t::reverse_iterator iterator_t;
helper_list_t& helpers =
-# if !defined(__GNUC__) || (__GNUC__ > 2)
- grammartract_helper_list::do_(self);
-# else
- self->helpers;
-# endif
+ grammartract_helper_list::do_(self);
-# if (defined(BOOST_MSVC) && (BOOST_MSVC < 1300)) \
- || defined(BOOST_INTEL_CXX_VERSION)
+# if defined(BOOST_INTEL_CXX_VERSION)
for (iterator_t i = helpers.rbegin(); i != helpers.rend(); ++i)
(*i)->undefine(self);
# else
@@ -383,16 +353,9 @@ struct grammar_definition
#endif
///////////////////////////////////////
-#if !defined(__GNUC__) || (__GNUC__ > 2)
-#define BOOST_SPIRIT_GRAMMAR_ACCESS private:
-#else
-#define BOOST_SPIRIT_GRAMMAR_ACCESS
-#endif
-
-///////////////////////////////////////
#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
#define BOOST_SPIRIT_GRAMMAR_STATE \
- BOOST_SPIRIT_GRAMMAR_ACCESS \
+ private: \
friend struct impl::grammartract_helper_list; \
mutable impl::grammar_helper_list<self_t> helpers;
#else
diff --git a/3party/boost/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp b/3party/boost/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp
index 4651cc31ec..f6bdaaf40d 100644
--- a/3party/boost/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp
+++ b/3party/boost/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp
@@ -22,76 +22,6 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
namespace impl {
- #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
- template <int N, typename ListT>
- struct get_subrule;
-
- template <int N, typename ListT>
- struct get_subrule_chooser
- {
- static ListT t();
- static char test(nil_t);
- static int test(...);
-
- // Set value to
- // 0: ListT is empty
- // 1: ListT's first item has same ID
- // 2: ListT's first item has a different ID
-
- enum
- {
- id = ListT::first_t::id,
- is_same_id = N == id,
- is_nil_t = sizeof(char) == sizeof(test(t())),
- value = is_nil_t ? 0 : (is_same_id ? 1 : 2)
- };
- };
-
- template <int N>
- struct subrule_chooser;
-
- template <>
- struct subrule_chooser<0>
- {
- // First case. ListT is empty
-
- template <int N, typename ListT>
- struct result
- { typedef nil_t type; };
- };
-
- template <>
- struct subrule_chooser<1>
- {
- // Second case. ListT is non-empty and the list's
- // first item has the ID we are looking for.
-
- template <int N, typename ListT>
- struct result
- { typedef typename ListT::first_t::def_t type; };
- };
-
- template <>
- struct subrule_chooser<2>
- {
- // Third case. ListT is non-empty but the list's
- // first item does not have the ID we are looking for.
-
- template <int N, typename ListT>
- struct result
- { typedef typename get_subrule<N, ListT::rest_t>::type type; };
- };
-
- template <int N, typename ListT>
- struct get_subrule
- {
- enum { n = get_subrule_chooser<N, ListT>::value };
- typedef typename subrule_chooser<n>::template
- result<N, ListT>::type type;
- };
-
- #else
template <int N, typename ListT>
struct get_subrule
@@ -122,7 +52,6 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
typedef nil_t type;
};
- #endif
template <typename T1, typename T2>
struct get_result_t {
diff --git a/3party/boost/boost/spirit/home/classic/core/non_terminal/rule.hpp b/3party/boost/boost/spirit/home/classic/core/non_terminal/rule.hpp
index e905689431..1d4336bcc9 100644
--- a/3party/boost/boost/spirit/home/classic/core/non_terminal/rule.hpp
+++ b/3party/boost/boost/spirit/home/classic/core/non_terminal/rule.hpp
@@ -15,7 +15,7 @@
// Spirit predefined maximum number of simultaneously usable different
// scanner types.
//
-// This limit defines the maximum number of of possible different scanner
+// This limit defines the maximum number of possible different scanner
// types for which a specific rule<> may be used. If this isn't defined, a
// rule<> may be used with one scanner type only (multiple scanner support
// is disabled).
diff --git a/3party/boost/boost/spirit/home/classic/core/primitives/impl/primitives.ipp b/3party/boost/boost/spirit/home/classic/core/primitives/impl/primitives.ipp
index 152e5b11be..8a52251ac6 100644
--- a/3party/boost/boost/spirit/home/classic/core/primitives/impl/primitives.ipp
+++ b/3party/boost/boost/spirit/home/classic/core/primitives/impl/primitives.ipp
@@ -10,21 +10,12 @@
#if !defined(BOOST_SPIRIT_PRIMITIVES_IPP)
#define BOOST_SPIRIT_PRIMITIVES_IPP
-// This should eventually go to a config file.
-#if defined(__GNUC__) && (__GNUC__ < 3) && !defined(_STLPORT_VERSION)
-# ifndef BOOST_SPIRIT_NO_CHAR_TRAITS
-# define BOOST_SPIRIT_NO_CHAR_TRAITS
-# endif
-#endif
-
#include <cctype>
#if !defined(BOOST_NO_CWCTYPE)
#include <cwctype>
#endif
-#ifndef BOOST_SPIRIT_NO_CHAR_TRAITS
-# include <string> // char_traits
-#endif
+#include <string> // char_traits
#if defined(BOOST_MSVC)
# pragma warning (push)
@@ -79,80 +70,6 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
//
///////////////////////////////////////////////////////////////////////////
-#ifndef BOOST_SPIRIT_NO_CHAR_TRAITS
-# define BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE std
-#else
-
- template <typename CharT>
- struct char_traits
- {
- typedef CharT int_type;
- typedef CharT char_type;
- };
-
- template<>
- struct char_traits<char>
- {
- typedef int int_type;
- typedef char char_type;
-
- static char_type
- to_char_type(int_type c)
- {
- return static_cast<char_type>(c);
- }
-
- static int
- to_int_type(char c)
- {
- return static_cast<unsigned char>(c);
- }
- };
-
- template<>
- struct char_traits<unsigned char>
- {
- typedef int int_type;
- typedef unsigned char char_type;
-
- static char_type
- to_char_type(int_type c)
- {
- return static_cast<char_type>(c);
- }
-
- static int
- to_int_type(unsigned char c)
- {
- return c;
- }
- };
-
-# define BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE impl
-# ifndef BOOST_NO_CWCTYPE
-
- template<>
- struct char_traits<wchar_t>
- {
- typedef wint_t int_type;
- typedef wchar_t char_type;
-
- static char_type
- to_char_type(int_type c)
- {
- return static_cast<char_type>(c);
- }
-
- static wint_t
- to_int_type(wchar_t c)
- {
- return c;
- }
- };
-
-# endif
-#endif // BOOST_SPIRIT_NO_CHAR_TRAITS
-
// Use char_traits for char and wchar_t only, as these are the only
// specializations provided in the standard. Other types are on their
// own.
@@ -182,19 +99,16 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
struct char_type_char_traits_helper
{
typedef CharT char_type;
- typedef typename BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE
- ::char_traits<CharT>::int_type int_type;
+ typedef typename std::char_traits<CharT>::int_type int_type;
static int_type to_int_type(CharT c)
{
- return BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE
- ::char_traits<CharT>::to_int_type(c);
+ return std::char_traits<CharT>::to_int_type(c);
}
static char_type to_char_type(int_type i)
{
- return BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE
- ::char_traits<CharT>::to_char_type(i);
+ return std::char_traits<CharT>::to_char_type(i);
}
};
diff --git a/3party/boost/boost/spirit/home/classic/dynamic/impl/conditions.ipp b/3party/boost/boost/spirit/home/classic/dynamic/impl/conditions.ipp
index 713958463c..3a7b530eb2 100644
--- a/3party/boost/boost/spirit/home/classic/dynamic/impl/conditions.ipp
+++ b/3party/boost/boost/spirit/home/classic/dynamic/impl/conditions.ipp
@@ -36,13 +36,6 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
typedef typename T::embed_t type;
};
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
- template <> struct embed_t_accessor<int>
- {
- typedef int type;
- };
-#endif
-
template <typename ConditionT>
struct condition_parser_selector
{
diff --git a/3party/boost/boost/spirit/home/classic/dynamic/impl/switch.ipp b/3party/boost/boost/spirit/home/classic/dynamic/impl/switch.ipp
index ffaa3ebb8b..b881f9d121 100644
--- a/3party/boost/boost/spirit/home/classic/dynamic/impl/switch.ipp
+++ b/3party/boost/boost/spirit/home/classic/dynamic/impl/switch.ipp
@@ -410,7 +410,7 @@ struct parse_switch;
return delegate_parse( \
chain_parser< \
case_chain<ParserT>::depth, ParserT \
- >::left(p), scan, save); \
+ >::left(p), scan, save); \
\
BOOST_PP_REPEAT_FROM_TO_ ## z(1, BOOST_PP_INC(N), \
BOOST_SPIRIT_PARSE_SWITCH_CASES, _) \
diff --git a/3party/boost/boost/spirit/home/classic/dynamic/stored_rule.hpp b/3party/boost/boost/spirit/home/classic/dynamic/stored_rule.hpp
index 5661ef8855..5248ba18fa 100644
--- a/3party/boost/boost/spirit/home/classic/dynamic/stored_rule.hpp
+++ b/3party/boost/boost/spirit/home/classic/dynamic/stored_rule.hpp
@@ -101,17 +101,11 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
friend class impl::rule_base_access;
friend class stored_rule<T0, T1, T2, !EmbedByValue>;
-#if defined(__GNUC__) && (__GNUC__ < 3)
- public:
-#endif
abstract_parser_t*
get() const
{
return ptr.get();
}
-#if defined(__GNUC__) && (__GNUC__ < 3)
- private:
-#endif
stored_rule(shared_ptr<abstract_parser_t> const& ptr)
: ptr(ptr) {}
diff --git a/3party/boost/boost/spirit/home/classic/iterator/impl/file_iterator.ipp b/3party/boost/boost/spirit/home/classic/iterator/impl/file_iterator.ipp
index 4227b69665..0fb92c72a3 100644
--- a/3party/boost/boost/spirit/home/classic/iterator/impl/file_iterator.ipp
+++ b/3party/boost/boost/spirit/home/classic/iterator/impl/file_iterator.ipp
@@ -285,11 +285,7 @@ public:
}
private:
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
typedef boost::remove_pointer<HANDLE>::type handle_t;
-#else
- typedef void handle_t;
-#endif
boost::shared_ptr<CharT> m_mem;
std::size_t m_filesize;
diff --git a/3party/boost/boost/spirit/home/classic/meta/impl/fundamental.ipp b/3party/boost/boost/spirit/home/classic/meta/impl/fundamental.ipp
index 798f22b61a..7b1d1aa669 100644
--- a/3party/boost/boost/spirit/home/classic/meta/impl/fundamental.ipp
+++ b/3party/boost/boost/spirit/home/classic/meta/impl/fundamental.ipp
@@ -15,10 +15,6 @@ namespace boost { namespace spirit {
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
-#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
- BOOST_SPIRIT_DEPENDENT_TEMPLATE_WRAPPER2(count_wrapper, count);
-#endif // defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
-
namespace impl
{
///////////////////////////////////////////////////////////////////////////
@@ -42,68 +38,6 @@ namespace impl
};
};
-#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
-
- template <>
- struct nodes<unary_parser_category> {
-
- template <typename ParserT, typename LeafCountT>
- struct count {
-
- typedef typename ParserT::subject_t subject_t;
- typedef typename subject_t::parser_category_t subject_category_t;
-
- typedef nodes<subject_category_t> nodes_t;
- typedef typename count_wrapper<nodes_t>
- ::template result_<subject_t, LeafCountT> count_t;
-
- BOOST_STATIC_CONSTANT(int, value = count_t::value + 1);
- };
- };
-
- template <>
- struct nodes<action_parser_category> {
-
- template <typename ParserT, typename LeafCountT>
- struct count {
-
- typedef typename ParserT::subject_t subject_t;
- typedef typename subject_t::parser_category_t subject_category_t;
-
- typedef nodes<subject_category_t> nodes_t;
- typedef typename count_wrapper<nodes_t>
- ::template result_<subject_t, LeafCountT> count_t;
-
- BOOST_STATIC_CONSTANT(int, value = count_t::value + 1);
- };
- };
-
- template <>
- struct nodes<binary_parser_category> {
-
- template <typename ParserT, typename LeafCountT>
- struct count {
-
- typedef typename ParserT::left_t left_t;
- typedef typename ParserT::right_t right_t;
- typedef typename left_t::parser_category_t left_category_t;
- typedef typename right_t::parser_category_t right_category_t;
-
- typedef nodes<left_category_t> left_nodes_t;
- typedef typename count_wrapper<left_nodes_t>
- ::template result_<left_t, LeafCountT> left_count_t;
-
- typedef nodes<right_category_t> right_nodes_t;
- typedef typename count_wrapper<right_nodes_t>
- ::template result_<right_t, LeafCountT> right_count_t;
-
- BOOST_STATIC_CONSTANT(int,
- value = (left_count_t::value + right_count_t::value + 1));
- };
- };
-
-#else
-
template <>
struct nodes<unary_parser_category> {
@@ -158,8 +92,6 @@ namespace impl
};
};
-#endif
-
///////////////////////////////////////////////////////////////////////////
//
// Helper template for counting the number of leaf nodes contained in a
@@ -181,68 +113,6 @@ namespace impl
};
};
-#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
-
- template <>
- struct leafs<unary_parser_category> {
-
- template <typename ParserT, typename LeafCountT>
- struct count {
-
- typedef typename ParserT::subject_t subject_t;
- typedef typename subject_t::parser_category_t subject_category_t;
-
- typedef leafs<subject_category_t> nodes_t;
- typedef typename count_wrapper<nodes_t>
- ::template result_<subject_t, LeafCountT> count_t;
-
- BOOST_STATIC_CONSTANT(int, value = count_t::value);
- };
- };
-
- template <>
- struct leafs<action_parser_category> {
-
- template <typename ParserT, typename LeafCountT>
- struct count {
-
- typedef typename ParserT::subject_t subject_t;
- typedef typename subject_t::parser_category_t subject_category_t;
-
- typedef leafs<subject_category_t> nodes_t;
- typedef typename count_wrapper<nodes_t>
- ::template result_<subject_t, LeafCountT> count_t;
-
- BOOST_STATIC_CONSTANT(int, value = count_t::value);
- };
- };
-
- template <>
- struct leafs<binary_parser_category> {
-
- template <typename ParserT, typename LeafCountT>
- struct count {
-
- typedef typename ParserT::left_t left_t;
- typedef typename ParserT::right_t right_t;
- typedef typename left_t::parser_category_t left_category_t;
- typedef typename right_t::parser_category_t right_category_t;
-
- typedef leafs<left_category_t> left_nodes_t;
- typedef typename count_wrapper<left_nodes_t>
- ::template result_<left_t, LeafCountT> left_count_t;
-
- typedef leafs<right_category_t> right_nodes_t;
- typedef typename count_wrapper<right_nodes_t>
- ::template result_<right_t, LeafCountT> right_count_t;
-
- BOOST_STATIC_CONSTANT(int,
- value = (left_count_t::value + right_count_t::value));
- };
- };
-
-#else
-
template <>
struct leafs<unary_parser_category> {
@@ -297,8 +167,6 @@ namespace impl
};
};
-#endif
-
} // namespace impl
///////////////////////////////////////////////////////////////////////////////
diff --git a/3party/boost/boost/spirit/home/classic/meta/impl/parser_traits.ipp b/3party/boost/boost/spirit/home/classic/meta/impl/parser_traits.ipp
index e648acd4d0..846a58b75f 100644
--- a/3party/boost/boost/spirit/home/classic/meta/impl/parser_traits.ipp
+++ b/3party/boost/boost/spirit/home/classic/meta/impl/parser_traits.ipp
@@ -21,80 +21,6 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
namespace impl
{
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // from spirit 1.1 (copyright (c) 2001 Bruce Florman)
- // various workarounds to support compile time decisions without partial
- // template specialization whether a given type is an instance of a
- // concrete parser type.
- //
- ///////////////////////////////////////////////////////////////////////////
-
- ///////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct parser_type_traits
- {
- // Determine at compile time (without partial specialization)
- // whether a given type is an instance of the alternative<A,B>
-
- static T t();
-
- typedef struct { char dummy[1]; } size1_t;
- typedef struct { char dummy[2]; } size2_t;
- typedef struct { char dummy[3]; } size3_t;
- typedef struct { char dummy[4]; } size4_t;
- typedef struct { char dummy[5]; } size5_t;
- typedef struct { char dummy[6]; } size6_t;
- typedef struct { char dummy[7]; } size7_t;
- typedef struct { char dummy[8]; } size8_t;
- typedef struct { char dummy[9]; } size9_t;
- typedef struct { char dummy[10]; } size10_t;
-
- // the following functions need no implementation
- template <typename A, typename B>
- static size1_t test_(alternative<A, B> const&);
- template <typename A, typename B>
- static size2_t test_(sequence<A, B> const&);
- template <typename A, typename B>
- static size3_t test_(sequential_or<A, B> const&);
- template <typename A, typename B>
- static size4_t test_(intersection<A, B> const&);
- template <typename A, typename B>
- static size5_t test_(difference<A, B> const&);
- template <typename A, typename B>
- static size6_t test_(exclusive_or<A, B> const&);
- template <typename S>
- static size7_t test_(optional<S> const&);
- template <typename S>
- static size8_t test_(kleene_star<S> const&);
- template <typename S>
- static size9_t test_(positive<S> const&);
-
- static size10_t test_(...);
-
- BOOST_STATIC_CONSTANT(bool,
- is_alternative = (sizeof(size1_t) == sizeof(test_(t()))) );
- BOOST_STATIC_CONSTANT(bool,
- is_sequence = (sizeof(size2_t) == sizeof(test_(t()))) );
- BOOST_STATIC_CONSTANT(bool,
- is_sequential_or = (sizeof(size3_t) == sizeof(test_(t()))) );
- BOOST_STATIC_CONSTANT(bool,
- is_intersection = (sizeof(size4_t) == sizeof(test_(t()))) );
- BOOST_STATIC_CONSTANT(bool,
- is_difference = (sizeof(size5_t) == sizeof(test_(t()))) );
- BOOST_STATIC_CONSTANT(bool,
- is_exclusive_or = (sizeof(size6_t) == sizeof(test_(t()))) );
- BOOST_STATIC_CONSTANT(bool,
- is_optional = (sizeof(size7_t) == sizeof(test_(t()))) );
- BOOST_STATIC_CONSTANT(bool,
- is_kleene_star = (sizeof(size8_t) == sizeof(test_(t()))) );
- BOOST_STATIC_CONSTANT(bool,
- is_positive = (sizeof(size9_t) == sizeof(test_(t()))) );
- };
-
-#else
///////////////////////////////////////////////////////////////////////////
struct parser_type_traits_base {
@@ -180,7 +106,6 @@ namespace impl
BOOST_STATIC_CONSTANT(bool, is_positive = true);
};
-#endif // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
} // namespace impl
///////////////////////////////////////////////////////////////////////////////
diff --git a/3party/boost/boost/spirit/home/classic/phoenix/special_ops.hpp b/3party/boost/boost/spirit/home/classic/phoenix/special_ops.hpp
index 7fc2f6d78d..4a007b23ae 100644
--- a/3party/boost/boost/spirit/home/classic/phoenix/special_ops.hpp
+++ b/3party/boost/boost/spirit/home/classic/phoenix/special_ops.hpp
@@ -79,31 +79,6 @@ template <typename T> struct rank<PHOENIX_STD::complex<T> >
// specializations for std::istream
//
///////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUC__) && (__GNUC__ < 3)
- #if defined(_STLPORT_VERSION)
- #define PHOENIX_ISTREAM _IO_istream_withassign
- #else
- #define PHOENIX_ISTREAM PHOENIX_STD::_IO_istream_withassign
- #endif
-#else
-// #if (defined(__ICL) && defined(_STLPORT_VERSION))
-// #define PHOENIX_ISTREAM istream_withassign
-// #else
- #define PHOENIX_ISTREAM PHOENIX_STD::istream
-// #endif
-#endif
-
-//////////////////////////////////
-#if defined(__GNUC__) && (__GNUC__ < 3)
-// || (defined(__ICL) && defined(_STLPORT_VERSION))
-template <typename T1>
-struct binary_operator<shift_r_op, PHOENIX_ISTREAM, T1>
-{
- typedef PHOENIX_STD::istream& result_type;
- static result_type eval(PHOENIX_STD::istream& out, T1& rhs)
- { return out >> rhs; }
-};
-#endif
//////////////////////////////////
template <typename T1>
@@ -117,45 +92,19 @@ struct binary_operator<shift_r_op, PHOENIX_STD::istream, T1>
//////////////////////////////////
template <typename BaseT>
inline typename impl::make_binary3
- <shift_r_op, variable<PHOENIX_ISTREAM>, BaseT>::type
-operator>>(PHOENIX_ISTREAM& _0, actor<BaseT> const& _1)
+ <shift_r_op, variable<PHOENIX_STD::istream>, BaseT>::type
+operator>>(PHOENIX_STD::istream& _0, actor<BaseT> const& _1)
{
return impl::make_binary3
- <shift_r_op, variable<PHOENIX_ISTREAM>, BaseT>
+ <shift_r_op, variable<PHOENIX_STD::istream>, BaseT>
::construct(var(_0), _1);
}
-#undef PHOENIX_ISTREAM
///////////////////////////////////////////////////////////////////////////////
//
// specializations for std::ostream
//
///////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUC__) && (__GNUC__ < 3)
- #if defined(_STLPORT_VERSION)
- #define PHOENIX_OSTREAM _IO_ostream_withassign
- #else
- #define PHOENIX_OSTREAM PHOENIX_STD::_IO_ostream_withassign
- #endif
-#else
-// #if (defined(__ICL) && defined(_STLPORT_VERSION))
-// #define PHOENIX_OSTREAM ostream_withassign
-// #else
- #define PHOENIX_OSTREAM PHOENIX_STD::ostream
-// #endif
-#endif
-
-//////////////////////////////////
-#if defined(__GNUC__) && (__GNUC__ < 3)
-// || (defined(__ICL) && defined(_STLPORT_VERSION))
-template <typename T1>
-struct binary_operator<shift_l_op, PHOENIX_OSTREAM, T1>
-{
- typedef PHOENIX_STD::ostream& result_type;
- static result_type eval(PHOENIX_STD::ostream& out, T1 const& rhs)
- { return out << rhs; }
-};
-#endif
//////////////////////////////////
template <typename T1>
@@ -169,16 +118,14 @@ struct binary_operator<shift_l_op, PHOENIX_STD::ostream, T1>
//////////////////////////////////
template <typename BaseT>
inline typename impl::make_binary3
- <shift_l_op, variable<PHOENIX_OSTREAM>, BaseT>::type
-operator<<(PHOENIX_OSTREAM& _0, actor<BaseT> const& _1)
+ <shift_l_op, variable<PHOENIX_STD::ostream>, BaseT>::type
+operator<<(PHOENIX_STD::ostream& _0, actor<BaseT> const& _1)
{
return impl::make_binary3
- <shift_l_op, variable<PHOENIX_OSTREAM>, BaseT>
+ <shift_l_op, variable<PHOENIX_STD::ostream>, BaseT>
::construct(var(_0), _1);
}
-#undef PHOENIX_OSTREAM
-
///////////////////////////////////////////////////////////////////////////////
//
// specializations for std::strstream / stringstream
@@ -228,8 +175,6 @@ operator<<(PHOENIX_STD::PHOENIX_SSTREAM& _0, actor<BaseT> const& _1)
// I/O manipulator specializations
//
///////////////////////////////////////////////////////////////////////////////
-#if (!defined(__GNUC__) || (__GNUC__ > 2))
-// && !(defined(__ICL) && defined(_STLPORT_VERSION))
typedef PHOENIX_STD::ios_base& (*iomanip_t)(PHOENIX_STD::ios_base&);
typedef PHOENIX_STD::istream& (*imanip_t)(PHOENIX_STD::istream&);
@@ -300,7 +245,6 @@ operator<<(actor<BaseT> const& _0, iomanip_t _1)
}
#endif // __BORLANDC__
-#endif // !defined(__GNUC__) || (__GNUC__ > 2)
///////////////////////////////////////////////////////////////////////////////
//
diff --git a/3party/boost/boost/spirit/home/classic/phoenix/statements.hpp b/3party/boost/boost/spirit/home/classic/phoenix/statements.hpp
index 25e6b1dd45..7726a99d4b 100644
--- a/3party/boost/boost/spirit/home/classic/phoenix/statements.hpp
+++ b/3party/boost/boost/spirit/home/classic/phoenix/statements.hpp
@@ -86,7 +86,7 @@ operator,(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
// is true, the true_statement (again an actor) is executed
// otherwise, the false_statement (another actor) is executed. The
// result type of this is void. Note the trailing underscore after
-// if_ and the the leading dot and the trailing underscore before
+// if_ and the leading dot and the trailing underscore before
// and after .else_.
//
///////////////////////////////////////////////////////////////////////////////
diff --git a/3party/boost/boost/spirit/home/classic/phoenix/tuples.hpp b/3party/boost/boost/spirit/home/classic/phoenix/tuples.hpp
index 50cec6bf3f..a52b4e1118 100644
--- a/3party/boost/boost/spirit/home/classic/phoenix/tuples.hpp
+++ b/3party/boost/boost/spirit/home/classic/phoenix/tuples.hpp
@@ -8,10 +8,6 @@
#ifndef PHOENIX_TUPLES_HPP
#define PHOENIX_TUPLES_HPP
-#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
-#error "Sorry, Phoenix does not support VC6 and VC7. Please upgrade to at least VC7.1"
-#endif
-
///////////////////////////////////////////////////////////////////////////////
//
// Phoenix predefined maximum limit. This limit defines the maximum
diff --git a/3party/boost/boost/spirit/home/classic/tree/common.hpp b/3party/boost/boost/spirit/home/classic/tree/common.hpp
index f25d4915ef..c086ff48d5 100644
--- a/3party/boost/boost/spirit/home/classic/tree/common.hpp
+++ b/3party/boost/boost/spirit/home/classic/tree/common.hpp
@@ -520,9 +520,6 @@ namespace impl {
// as Koenig lookup rules will find only the classname::swap
// member function not the global declaration, so use cp_swap
// as a forwarding function (JM):
-#if __GNUC__ == 2
- using ::std::swap;
-#endif
template <typename T>
inline void cp_swap(T& t1, T& t2)
{
diff --git a/3party/boost/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp b/3party/boost/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp
index 2f0da8bf44..36b7e10192 100644
--- a/3party/boost/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp
+++ b/3party/boost/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp
@@ -21,6 +21,7 @@
#include <iostream>
#include <boost/config.hpp>
#include <boost/assert.hpp>
+#include <boost/scoped_array.hpp>
#ifdef BOOST_NO_STRINGSTREAM
#include <strstream>
@@ -68,7 +69,7 @@ namespace impl {
{
using namespace std; // some systems have size_t in ns std
size_t len = strlen(source);
- std::auto_ptr<wchar_t> result (new wchar_t[len+1]);
+ boost::scoped_array<wchar_t> result (new wchar_t[len+1]);
result.get()[len] = '\0';
// working with wide character streams is supported only if the
diff --git a/3party/boost/boost/spirit/home/classic/utility/grammar_def.hpp b/3party/boost/boost/spirit/home/classic/utility/grammar_def.hpp
index 6ddfcab647..bc9b11f993 100644
--- a/3party/boost/boost/spirit/home/classic/utility/grammar_def.hpp
+++ b/3party/boost/boost/spirit/home/classic/utility/grammar_def.hpp
@@ -26,7 +26,7 @@
///////////////////////////////////////////////////////////////////////////////
//
// Spirit predefined maximum grammar start parser limit. This limit defines
-// the maximum number of of possible different parsers exposed from a
+// the maximum number of possible different parsers exposed from a
// particular grammar. This number defaults to 3.
// The actual maximum is rounded up in multiples of 3. Thus, if this value
// is 4, the actual limit is 6. The ultimate maximum limit in this
diff --git a/3party/boost/boost/spirit/home/classic/utility/impl/chset.ipp b/3party/boost/boost/spirit/home/classic/utility/impl/chset.ipp
index 3017035106..6e2130b222 100644
--- a/3party/boost/boost/spirit/home/classic/utility/impl/chset.ipp
+++ b/3party/boost/boost/spirit/home/classic/utility/impl/chset.ipp
@@ -71,38 +71,6 @@ namespace utility { namespace impl {
}
}
- //////////////////////////////////
-
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
- template <typename CharT, typename FakeT>
- void chset_negated_set(boost::shared_ptr<basic_chset<CharT> > &ptr, chlit<CharT> const &ch,
- FakeT)
- {
- if(ch.ch != (std::numeric_limits<CharT>::min)()) {
- ptr->set((std::numeric_limits<CharT>::min)(), ch.ch - 1);
- }
- if(ch.ch != (std::numeric_limits<CharT>::max)()) {
- ptr->set(ch.ch + 1, (std::numeric_limits<CharT>::max)());
- }
- }
-
- template <typename CharT, typename FakeT>
- void chset_negated_set(boost::shared_ptr<basic_chset<CharT> > &ptr,
- spirit::range<CharT> const &rng, FakeT)
- {
- if(rng.first != (std::numeric_limits<CharT>::min)()) {
- ptr->set((std::numeric_limits<CharT>::min)(), rng.first - 1);
- }
- if(rng.last != (std::numeric_limits<CharT>::max)()) {
- ptr->set(rng.last + 1, (std::numeric_limits<CharT>::max)());
- }
- }
-
-#endif // BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
-//////////////////////////////////
-
}} // namespace utility::impl
template <typename CharT>
@@ -142,8 +110,6 @@ inline chset<CharT>::chset(range<CharT> const& arg_)
: ptr(new basic_chset<CharT>())
{ ptr->set(arg_.first, arg_.last); }
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
template <typename CharT>
inline chset<CharT>::chset(negated_char_parser<chlit<CharT> > const& arg_)
: ptr(new basic_chset<CharT>())
@@ -158,8 +124,6 @@ inline chset<CharT>::chset(negated_char_parser<range<CharT> > const& arg_)
set(arg_);
}
-#endif // !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
template <typename CharT>
inline chset<CharT>::~chset() {}
@@ -218,8 +182,6 @@ chset<CharT>::operator=(range<CharT> const& rhs)
return *this;
}
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
template <typename CharT>
inline chset<CharT>&
chset<CharT>::operator=(negated_char_parser<chlit<CharT> > const& rhs)
@@ -238,8 +200,6 @@ chset<CharT>::operator=(negated_char_parser<range<CharT> > const& rhs)
return *this;
}
-#endif // !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
template <typename CharT>
inline void
chset<CharT>::set(range<CharT> const& arg_)
@@ -248,8 +208,6 @@ chset<CharT>::set(range<CharT> const& arg_)
ptr->set(arg_.first, arg_.last);
}
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
template <typename CharT>
inline void
chset<CharT>::set(negated_char_parser<chlit<CharT> > const& arg_)
@@ -278,8 +236,6 @@ chset<CharT>::set(negated_char_parser<range<CharT> > const& arg_)
}
}
-#endif // !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
template <typename CharT>
inline void
chset<CharT>::clear(range<CharT> const& arg_)
diff --git a/3party/boost/boost/spirit/home/classic/utility/impl/chset_operators.ipp b/3party/boost/boost/spirit/home/classic/utility/impl/chset_operators.ipp
index 4319c9b2a8..842a679d6d 100644
--- a/3party/boost/boost/spirit/home/classic/utility/impl/chset_operators.ipp
+++ b/3party/boost/boost/spirit/home/classic/utility/impl/chset_operators.ipp
@@ -285,78 +285,6 @@ operator^(chlit<CharT> const& a, chset<CharT> const& b)
return chset<CharT>(a.ch) ^ b;
}
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// negated_char_parser <--> chset free operators implementation
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT, typename ParserT>
-inline chset<CharT>
-operator|(chset<CharT> const& a, negated_char_parser<ParserT> const& b)
-{
- return a | chset<CharT>(b);
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT>
-inline chset<CharT>
-operator&(chset<CharT> const& a, negated_char_parser<ParserT> const& b)
-{
- return a & chset<CharT>(b);
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT>
-inline chset<CharT>
-operator-(chset<CharT> const& a, negated_char_parser<ParserT> const& b)
-{
- return a - chset<CharT>(b);
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT>
-inline chset<CharT>
-operator^(chset<CharT> const& a, negated_char_parser<ParserT> const& b)
-{
- return a ^ chset<CharT>(b);
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT>
-inline chset<CharT>
-operator|(negated_char_parser<ParserT> const& a, chset<CharT> const& b)
-{
- return chset<CharT>(a) | b;
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT>
-inline chset<CharT>
-operator&(negated_char_parser<ParserT> const& a, chset<CharT> const& b)
-{
- return chset<CharT>(a) & b;
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT>
-inline chset<CharT>
-operator-(negated_char_parser<ParserT> const& a, chset<CharT> const& b)
-{
- return chset<CharT>(a) - b;
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT>
-inline chset<CharT>
-operator^(negated_char_parser<ParserT> const& a, chset<CharT> const& b)
-{
- return chset<CharT>(a) ^ b;
-}
-
-#else // BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
///////////////////////////////////////////////////////////////////////////////
//
// negated_char_parser<range> <--> chset free operators implementation
@@ -493,8 +421,6 @@ operator^(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
return chset<CharT>(a) ^ b;
}
-#endif // BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
///////////////////////////////////////////////////////////////////////////////
//
// anychar_parser <--> chset free operators
diff --git a/3party/boost/boost/spirit/home/classic/utility/rule_parser.hpp b/3party/boost/boost/spirit/home/classic/utility/rule_parser.hpp
index 9cacb49940..08aba694f5 100644
--- a/3party/boost/boost/spirit/home/classic/utility/rule_parser.hpp
+++ b/3party/boost/boost/spirit/home/classic/utility/rule_parser.hpp
@@ -16,7 +16,7 @@
//
// Using a typeof operator or Boost.Typeof to automatically set the type of
// variables (as done in the Spirit example demonstrating typeof) is by far not
-// all we can do to tighten up our grammars as there are some significant
+// all we can do to tighten up our grammars as there are some significant
// drawbacks of this approach:
// - the types complexity scales with the complexity of the grammar (sooner or
// later hitting the limits of the compiler),
@@ -32,242 +32,242 @@
// In practice manually applying this technique leads to rather lengthy code and
// overthis requires the user to have a solid understanding of Spirit details.
//
-// Here is a generalized, macro-based approach to easily create typeof-based
+// Here is a generalized, macro-based approach to easily create typeof-based
// grammars that can be recursive and arbitrarily complex.
//
//
// Quick manual:
// ============
-//
+//
// 1. Setup
-//
-// Before the rule parser macro (the protagonist of the facility) can be used
-// the the user must define the macro BOOST_SPIRIT__NAMESPACE (note the double
+//
+// Before the rule parser macro (the protagonist of the facility) can be used
+// the user must define the macro BOOST_SPIRIT__NAMESPACE (note the double
// underscore characeter) and setup a registration group for Boost.Typeof.
-//
+//
// Examples:
-//
+//
// // should come after regular #includeS
// #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-//
+//
// // [...]
-//
+//
// #define BOOST_SPIRIT__NAMESPACE (2,(my_project, my_module))
// // | | +- outer +- inner
// // ! space ! -+ | namespace namespace
// // |
// // +--- number of nested namespaces
-//
+//
// namespace my_project { namespace my_module {
-//
+//
// // [...]
-//
+//
// ---
-//
+//
// // should come after regular #includeS
// #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-//
+//
// // [...]
-//
+//
// #define BOOST_SPIRIT__NAMESPACE (2,(my_project, (anonymous) ))
-//
+//
// namespace my_project { namespace {
-//
+//
// // [...]
-//
+//
// ---
-//
+//
// // should come after regular #includeS
// #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-//
+//
// // [...]
-//
-//
+//
+//
// #define BOOST_SPIRIT__NAMESPACE -
// // we're working at root namespace
-//
-//
+//
+//
// Why do I have to do this?
-//
+//
// Boost.Typeof needs to assign a unique ID for each registration. This ID is
-// created composed of the line number and the registration group. The
+// created composed of the line number and the registration group. The
// facility performs Typeof registration and thus requires the source file to
// have its own registration group. Further Boost.Typeof requires registration
// to happen at root namespace so we have to close and reopen the namespace
// we're in.
//
-//
+//
// 2. The rule parser macro
-//
+//
// A simple rule parser definition looks like that:
-//
+//
// // we're at namespace scope here
-//
+//
// // Skip parser for C/C++ comments and whitespace
-// BOOST_SPIRIT_RULE_PARSER(skipper,
-// -,-,-,
-//
-// +( confix_p("//",*anychar_p,eol_p)
+// BOOST_SPIRIT_RULE_PARSER(skipper,
+// -,-,-,
+//
+// +( confix_p("//",*anychar_p,eol_p)
// | confix_p("/*",*anychar_p,"*/")
-// | space_p
+// | space_p
// )
// )
-//
+//
// Now we can use 'skipper' in other Spirit expressions.
-//
-// The code above creates a parser (template) class 'skpper_t' and (in this
-// case, because there are no parameters) a static const instance 'skipper' of
+//
+// The code above creates a parser (template) class 'skpper_t' and (in this
+// case, because there are no parameters) a static const instance 'skipper' of
// that class. The class is automatically registered with Boost.Typeof. The type
// name our parser is skipper_t here.
-//
-//
+//
+//
// 2.1. Parametrized rule parsers
-//
+//
// Rule parser definitions can have parameters.
-//
+//
// Parameters are passed to the BOOST_SPIRIT_RULE_PARSER macro as its second
-// argument (just pass '-' if there are no parameters) with the following
+// argument (just pass '-' if there are no parameters) with the following
// format:
-//
+//
// (N,( param1,param2, / ... / paramN ))
// +-- number of parameters
-//
+//
// Example of a whole rule parser:
-//
+//
// BOOST_SPIRIT_RULE_PARSER(new_name,
// (1,( symbol_table )),-,-,
-//
+//
// lexeme_d[ (alpha_p >> *alnum_p)[ symbol_table.add ] ]
// )
-//
+//
// The expression 'new_name(my_symbols)' parses a string literal and adds it to
// the symbol table 'my_symbols'.
-//
+//
// The rule parser macro creates a function template as called 'new_name' that
// takes one parameter of deduced reference type and returns a specialization of
// 'new_name_t' in this case.
-//
-// Since parsers that require to be fast and lightweight often also require to
-// be reentrant, it's quite common to pass in some semantic controller (the
+//
+// Since parsers that require to be fast and lightweight often also require to
+// be reentrant, it's quite common to pass in some semantic controller (the
// symbol table in the example above).
-// However, parameters are templated so they can be anything (including parsers
+// However, parameters are templated so they can be anything (including parsers
// of course) so refactoring tasks can be abstracted with rule parsers as well.
-//
+//
// BOOST_SPIRIT_RULE_PARSER(enumeration_parser,
// (2,( element_parser, delimiter_parser )),-,-,
-//
+//
// element_parser >> *(delimiter_parser >> element_parser)
-// )
-//
-// The expression 'enumeration_parser(int_p[ some_action ], ',')' creates a
+// )
+//
+// The expression 'enumeration_parser(int_p[ some_action ], ',')' creates a
// parser for a comma-separated list of integers.
-//
-//
+//
+//
// 2.2. Rule parsrs and semantic actions
-//
+//
// While semantic actions can be globally attached to a rule parser or passed
-// to a parametrized rule parser as (part of) an argument, even more control is
+// to a parametrized rule parser as (part of) an argument, even more control is
// possible by using action placeholders. E.g:
-//
+//
// BOOST_SPIRIT_ACTION_PLACEHOLDER(int_action)
-//
+//
// BOOST_SPIRIT_RULE_PARSER(int_list,
// -,(1,( int_action )),-,
-//
+//
// int_p[ int_action ] >> *(',' >> int_p[ int_action ])
// )
-//
-// The expression 'int_list[ my_action ]' parses a comma separated list of
+//
+// The expression 'int_list[ my_action ]' parses a comma separated list of
// integers and calls 'my_action' for every integer parsed therein.
-//
-// Of course multiple actions can be attached to one placeholder as usual (in
+//
+// Of course multiple actions can be attached to one placeholder as usual (in
// this case 'int_list[ my_action1 ][ my_action2 ] would call two actions).
-//
+//
// Further there can be multiple action placeholders for a single rule parser:
-//
+//
// BOOST_SPIRIT_ACTION_PLACEHOLDER(feed_int)
// BOOST_SPIRIT_ACTION_PLACEHOLDER(next_int)
-//
+//
// BOOST_SPIRIT_RULE_PARSER(int_list,
// -,(2,( feed_int, next_int )),-,
-//
+//
// int_p[ feed_int ] >> *(',' >> int_p[ next_int ][ feed_int ])
// )
-//
+//
// The expression 'int_list[ (feed_int = my_action1), (next_int = my_action2) ]'
-// creates a parser for a comma separated list of integers with the actions
+// creates a parser for a comma separated list of integers with the actions
// attached appropriately.
-//
+//
// int_list[ feed_int = my_action1,my_action2, next_int = my_action3 ]
-//
-// works too (in this case the action placeholder 'feed_int' has two actions
+//
+// works too (in this case the action placeholder 'feed_int' has two actions
// attached to it).
-//
-// You can both override and append actions associated with an action
+//
+// You can both override and append actions associated with an action
// placeholder:
-//
+//
// var = int_list[ feed_int = my_action1, next_int = my_action2 ]
-//
+//
// // [...]
-//
-// ... var[ feed_int = another_action ]
+//
+// ... var[ feed_int = another_action ]
// // 'another_action' overrides the actions previously attached to 'feed_int'
-//
+//
// ... var[ next_int += another_action ]
-// // 'another_action' is appended to the list of actions attached to
+// // 'another_action' is appended to the list of actions attached to
// // 'next_int'
-//
+//
// Action placeholders are not entirely for free -- they add to the size and the
-// initialization time of the rule parser. However, the impact on an already
+// initialization time of the rule parser. However, the impact on an already
// initialized rule parser instance should be quite small.
-//
-//
+//
+//
// 2.3. Member variables
-//
-// You can add member variables to the rule parser class using the third
+//
+// You can add member variables to the rule parser class using the third
// parameter of the rule parser macro:
-//
+//
// BOOST_SPIRIT_RULE_PARSER( calc,
// -,
// -,
// (3,( ((subrule<0>),expression,()),
// ((subrule<1>),term,()),
// ((subrule<2>),factor,() )) ),
-//
+//
// // [...]
-//
+//
// adds three subrules to the rule parser.
// Each parameter must have the following type to allow commas to be handled
// safely from within the preprocessing code:
-//
+//
// ((type)),name,(constructor argument(s)))
-//
+//
//
// 2.4. The opaque rule parser
//
-// Rule parsers usually are templates. Building large grammars pushes the
-// compiler really hard (and eventually to its limits) because of the
+// Rule parsers usually are templates. Building large grammars pushes the
+// compiler really hard (and eventually to its limits) because of the
// metafunction complexity involved.
-// If a rule parser without parameters and action placeholders is defined, a
+// If a rule parser without parameters and action placeholders is defined, a
// non-template class is created. Non-templated rule parsers can also be created
-// explicitly by using BOOST_SPIRIT_OPAQUE_RULE_PARSER.
+// explicitly by using BOOST_SPIRIT_OPAQUE_RULE_PARSER.
// Opaque rule parsers can have parameters and member variables (note: no action
-// placeholders are possible). The parameters of an opaque rule parsers are
+// placeholders are possible). The parameters of an opaque rule parsers are
// strictly typed, e.g:
//
// BOOST_SPIRIT_OPAQUE_RULE_PARSER(new_identifier,
// (1,( ((my_symbol_table_t &),symbol_table) ))
// ,-,
// (alpha_p >> *alnum_p) [ symbol_table.add ]
-// )
+// )
//
-// Note it's also possible to have opaque rule parsers accept parameters of
+// Note it's also possible to have opaque rule parsers accept parameters of
// non-const reference types which is not possible with regular rule parsers.
//
//
// 3. Utilities for by-reference embedding
-//
-// When using parsers mutiple times or recursively it can be helpful to embed
+//
+// When using parsers mutiple times or recursively it can be helpful to embed
// them by-reference into the final parser expression.
// For this purpose the library provides a wrapper template 'parser_reference'.
// There is also a function template to create a wrapped parser which can deduce
@@ -349,22 +349,22 @@ namespace boost
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RP_REGISTER_TEMPLATE
//
-// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
+// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
# define BOOST_SPIRIT_RP_REGISTER_TEMPLATE(name,params) \
BOOST_SPIRIT_RP_EMIT(NS_CLOSE,BOOST_SPIRIT__NAMESPACE,-) \
BOOST_TYPEOF_REGISTER_TEMPLATE( \
BOOST_SPIRIT_RP_EMIT(NS_QUALIFY,BOOST_SPIRIT__NAMESPACE,-) name, \
params) \
- BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
+ BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RP_REGISTER_TYPE
//
-// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
+// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
# define BOOST_SPIRIT_RP_REGISTER_TYPE(name) \
BOOST_SPIRIT_RP_EMIT(NS_CLOSE,BOOST_SPIRIT__NAMESPACE,-) \
BOOST_TYPEOF_REGISTER_TYPE( \
BOOST_SPIRIT_RP_EMIT(NS_QUALIFY,BOOST_SPIRIT__NAMESPACE,-) name ) \
- BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
+ BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RP_AP_IMPL
//
@@ -385,7 +385,7 @@ namespace boost
{ return ns :: action_chain< name, ns :: append, Action> (__a); } \
}; \
} \
- __action_placeholder:: name const name = __action_placeholder:: name ();
+ __action_placeholder:: name const name = __action_placeholder:: name ();
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RP_IMPL_I
//
@@ -409,7 +409,7 @@ namespace boost
\
template< BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,typename __,1) > \
class name_t \
- : public ::BOOST_SPIRIT_CLASSIC_NS::parser< name_t \
+ : public ::BOOST_SPIRIT_CLASSIC_NS::parser< name_t \
< BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,__,0) > > \
{ \
class __rule \
@@ -419,7 +419,7 @@ namespace boost
BOOST_SPIRIT_RP_EMIT(MV_STATIC,mbrs,BOOST_PP_IDENTITY(typename)) \
public: \
BOOST_TYPEOF_NESTED_TYPEDEF_TPL(__expr, \
- ::BOOST_SPIRIT_CLASSIC_NS::type_of::depend_on_type<__Dummy>(x) ) \
+ ::BOOST_SPIRIT_CLASSIC_NS::type_of::depend_on_type<__Dummy>(x) ) \
}; \
\
public: \
@@ -471,7 +471,7 @@ namespace boost
BOOST_PP_IF(np,BOOST_SPIRIT_RP_GEN_FUNC,BOOST_SPIRIT_RP_GLOB_VAR) \
(name,name_t,np,na) \
BOOST_SPIRIT_RP_REGISTER_TEMPLATE \
- (name_t,BOOST_PP_INC(BOOST_PP_ADD(np,na)))
+ (name_t,BOOST_PP_INC(BOOST_PP_ADD(np,na)))
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RP_OPAQUE_IMPL_I
//
@@ -536,7 +536,7 @@ namespace boost
BOOST_PP_IF(np,BOOST_SPIRIT_RP_GEN_OPAQUE,BOOST_SPIRIT_RP_GLOB_OPAQUE) \
(name,name_t,np,pars)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_AP_HANDLER
+// RP_AP_HANDLER
//
// Part of the rule parser definition for handling action placeholders
# define BOOST_SPIRIT_RP_AP_HANDLER(name_t,np,acts,na,ns) \
@@ -590,7 +590,7 @@ namespace boost
# define BOOST_SPIRIT_RP_AP_EXTRA_MBRS(np,na) \
private: \
BOOST_PP_REPEAT(np,BOOST_SPIRIT_RP_PM_MBRS,-) \
- BOOST_PP_REPEAT(na,BOOST_SPIRIT_RP_AP_MBRS,-)
+ BOOST_PP_REPEAT(na,BOOST_SPIRIT_RP_AP_MBRS,-)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RP_PM_MBRS
//
@@ -617,7 +617,7 @@ namespace boost
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RP_TPL_PARAMS
//
-// Expands to the template parameters or arguments of the rule parser template
+// Expands to the template parameters or arguments of the rule parser template
# define BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,prefix,defaults) \
prefix ## Dummy \
BOOST_SPIRIT_RP_EMIT(PM_TEMPLATE_PARAMS,pars,prefix ## T) \
@@ -679,7 +679,7 @@ namespace boost
// PM_CTOR_PARAMS
# define BOOST_SPIRIT_RP__PM_CTOR_PARAMS(r,data,i,elem) \
BOOST_PP_COMMA_IF(i) \
- typename ::boost::call_traits< data ## i >::param_type elem
+ typename ::boost::call_traits< data ## i >::param_type elem
// PM_CTOR_ARGS
# define BOOST_SPIRIT_RP__PM_CTOR_ARGS(r,data,i,elem) \
@@ -777,7 +777,7 @@ namespace boost
// AP_REBOUND_TPL_ARGS
# define BOOST_SPIRIT_RP__AP_REBOUND_TPL_ARGS(r,data,i,elem) \
, typename ::BOOST_SPIRIT_CLASSIC_NS::type_of::placeholdee< \
- __action_placeholder:: elem , __A ## i, data >::type
+ __action_placeholder:: elem , __A ## i, data >::type
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// PP_EMIT
@@ -787,7 +787,7 @@ namespace boost
# define BOOST_SPIRIT_RP_EMIT(op, array, data) \
BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I(BOOST_SPIRIT_RP__ ## op,data,array)
// --- --- - - --- - - --- - - - - --- - - - - - - - - - - - - - - - - - - - - -
-// RP_ARRAY_FOR_EACH_I
+// RP_ARRAY_FOR_EACH_I
//
// Iterates an optional array. That is you can pass e.g.'-' or 'none' to denote
// emptiness.
@@ -796,13 +796,13 @@ namespace boost
BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I_IMPL, \
BOOST_PP_TUPLE_EAT(3))(macro,data,optional_array)
-// RP_ARRAY_FOR_EACH_I_IMPL
+// RP_ARRAY_FOR_EACH_I_IMPL
# define BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I_IMPL(macro,data,array) \
BOOST_SPIRIT_RP_IF(BOOST_PP_ARRAY_SIZE(array),PP_SEQ_FOR_EACH_I,3) \
(macro,data, BOOST_SPIRIT_RP_IF(BOOST_PP_ARRAY_SIZE(array), \
PP_TUPLE_TO_SEQ,2) array)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_ARRAY_SIZE
+// RP_ARRAY_SIZE
//
// Expands to the size of an "optional array".
//
@@ -818,7 +818,7 @@ namespace boost
BOOST_PP_ARRAY_SIZE, 0 BOOST_PP_TUPLE_EAT(1))(optional_array)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RP_OPTIONAL
-//
+//
// Expands to nothing if the argument is parenthesized.
//
// Examples:
@@ -827,7 +827,7 @@ namespace boost
// BOOST_SPIRIT_RP_OPTIONAL( (none) ) // evaluates to nothing
//
# define BOOST_SPIRIT_RP_OPTIONAL(elem) \
- BOOST_PP_EXPR_IIF(BOOST_PP_COMPL(BOOST_PP_IS_UNARY(elem)),elem)
+ BOOST_PP_EXPR_IIF(BOOST_PP_COMPL(BOOST_PP_IS_UNARY(elem)),elem)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RP_COMMA_IF_OR
//
@@ -851,13 +851,13 @@ namespace boost
// Wrapper and gernator function to embed a parser by reference
//------------------------------------------------------------------------------
-namespace boost { namespace spirit {
+namespace boost { namespace spirit {
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
// Wrapper to embed a parser by reference
- template<class P> class parser_reference
+ template<class P> class parser_reference
: public parser< parser_reference<P> >
{
P const & ref_that;
@@ -868,19 +868,19 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
{ }
typedef parser_reference<P> self_t;
- typedef self_t const & embed_t;
+ typedef self_t const & embed_t;
typedef typename P::parser_category_t parser_category_t;
- template<typename ScannerT> struct result
+ template<typename ScannerT> struct result
{ typedef typename P::BOOST_NESTED_TEMPLATE result<ScannerT>::type type; };
- template<typename ScannerT>
+ template<typename ScannerT>
typename result<ScannerT>::type
parse(ScannerT const & scan) const
{ return this->ref_that.parse(scan); }
};
- template<class P> parser_reference<P>
+ template<class P> parser_reference<P>
embed_by_reference(::BOOST_SPIRIT_CLASSIC_NS::parser<P> & p)
{ return p; }
@@ -894,18 +894,18 @@ BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::parser_reference, 1)
// Expression templates for action placeholders.
//------------------------------------------------------------------------------
-namespace boost { namespace spirit {
+namespace boost { namespace spirit {
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
-namespace type_of {
+namespace type_of {
// No-operation functor
- struct nop_functor
+ struct nop_functor
{
template<typename T>
- bool operator()(T const &) const
+ bool operator()(T const &) const
{ return false; }
template<typename T, typename U>
bool operator()(T const &, U const &) const
@@ -949,26 +949,26 @@ namespace type_of {
{
typedef Action type;
- static type concatenate(nop_functor const &, Action const & a)
+ static type concatenate(nop_functor const &, Action const & a)
{ return a; }
};
template<typename Action> struct action_concatenator<Action, nop_functor>
{
typedef Action type;
- static type concatenate(Action const & a, nop_functor const &)
+ static type concatenate(Action const & a, nop_functor const &)
{ return a; }
};
template<> struct action_concatenator<nop_functor, nop_functor>
{
typedef nop_functor type;
- static type concatenate(nop_functor const &, nop_functor const &)
+ static type concatenate(nop_functor const &, nop_functor const &)
{ return nop_functor(); }
};
template<typename Action1, typename Action2>
- typename action_concatenator<Action1,Action2>::type
+ typename action_concatenator<Action1,Action2>::type
concatenate_actions(Action1 const & a1, Action2 const & a2)
{
return action_concatenator<Action1,Action2>::concatenate(a1,a2);
@@ -1017,17 +1017,17 @@ namespace type_of {
head_type const & head() const { return obj_head; }
tail_type const & tail() const { return obj_tail; }
- };
+ };
// Action chain concatenation
template<class Head, class Tail>
action_chains<Head,Tail> make_chain(Head const & h, Tail const & t)
{ return action_chains<Head,Tail>(h,t); }
- template<class PH1, action_chain_mode M1, typename A1,
+ template<class PH1, action_chain_mode M1, typename A1,
class PH2, action_chain_mode M2, typename A2>
action_chains< action_chain<PH1,M1,A1>, action_chain<PH2,M2,A2> >
- operator, (action_chain<PH1,M1,A1> const & h,
+ operator, (action_chain<PH1,M1,A1> const & h,
action_chain<PH2,M2,A2> const & t)
{ return make_chain(h,t); }
@@ -1037,12 +1037,12 @@ namespace type_of {
{ return make_chain(h,t); }
- // Extract the (maybe composite) action associated with an action
+ // Extract the (maybe composite) action associated with an action
// placeholders from the chains with a fold algorithm.
template<class Placeholder, typename StartAction, class NewChainOrChains>
struct placeholdee
{
- typedef StartAction type;
+ typedef StartAction type;
static type get(StartAction const & a, NewChainOrChains const &)
{ return a; }
@@ -1054,7 +1054,7 @@ namespace type_of {
get_placeholdee(StartAction const & a, NewChainOrChains const & c)
{ return placeholdee<Placeholder,StartAction,NewChainOrChains>::get(a,c); }
- template<class Placeholder, typename StartAction, class Head, class Tail>
+ template<class Placeholder, typename StartAction, class Head, class Tail>
struct placeholdee
< Placeholder, StartAction, action_chains<Head,Tail> >
{
@@ -1075,7 +1075,7 @@ namespace type_of {
{
typedef A type;
- static type get(StartAction const &,
+ static type get(StartAction const &,
action_chain<Placeholder,replace,A> const & c)
{ return c.action(); }
};
@@ -1086,12 +1086,12 @@ namespace type_of {
{
typedef typename action_concatenator<StartAction,A>::type type;
- static type get(StartAction const & a,
+ static type get(StartAction const & a,
action_chain<Placeholder,append,A> const & c)
{ return concatenate_actions(a,c.action()); }
};
-}
+}
BOOST_SPIRIT_CLASSIC_NAMESPACE_END
@@ -1104,7 +1104,7 @@ BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::type_of::composite_actio
// Misc.utilities
//------------------------------------------------------------------------------
-namespace boost { namespace spirit {
+namespace boost { namespace spirit {
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
@@ -1113,7 +1113,7 @@ namespace type_of {
// Utility function to create a dependency to a template argument.
template<typename T, typename X>
- X const & depend_on_type(X const & x)
+ X const & depend_on_type(X const & x)
{ return x; }
// Utility to allow use parenthesized type expressions with commas inside
@@ -1130,13 +1130,13 @@ namespace type_of {
template<typename T> struct remove_special_fptr< special_result & (*)(T) >
{ typedef T type; };
-}
+}
BOOST_SPIRIT_CLASSIC_NAMESPACE_END
} } // namespace ::BOOST_SPIRIT_CLASSIC_NS::type_of
//------------------------------------------------------------------------------
-#endif
+#endif
//------------------------------------------------------------------------------
diff --git a/3party/boost/boost/spirit/home/karma/detail/pass_container.hpp b/3party/boost/boost/spirit/home/karma/detail/pass_container.hpp
index 07f2dad3c1..41c253d4b0 100644
--- a/3party/boost/boost/spirit/home/karma/detail/pass_container.hpp
+++ b/3party/boost/boost/spirit/home/karma/detail/pass_container.hpp
@@ -188,7 +188,7 @@ namespace boost { namespace spirit { namespace karma { namespace detail
{};
// If both, the containers value type and the exposed attribute type are
- // optionals we are allowed to pass through the the container only if the
+ // optionals we are allowed to pass through the container only if the
// embedded types of those optionals are not compatible.
template <typename Container, typename ValueType, typename Attribute
, typename Sequence>
@@ -203,6 +203,25 @@ namespace boost { namespace spirit { namespace karma { namespace detail
// We pass through the container attribute if at least one of the embedded
// types in the variant requires to pass through the attribute
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+ template <typename Container, typename ValueType, typename Sequence
+ , typename T>
+ struct pass_through_container<Container, ValueType, boost::variant<T>
+ , Sequence>
+ : pass_through_container<Container, ValueType, T, Sequence>
+ {};
+
+ template <typename Container, typename ValueType, typename Sequence
+ , typename T0, typename ...TN>
+ struct pass_through_container<Container, ValueType
+ , boost::variant<T0, TN...>, Sequence>
+ : mpl::bool_<pass_through_container<
+ Container, ValueType, T0, Sequence
+ >::type::value || pass_through_container<
+ Container, ValueType, boost::variant<TN...>, Sequence
+ >::type::value>
+ {};
+#else
#define BOOST_SPIRIT_PASS_THROUGH_CONTAINER(z, N, _) \
pass_through_container<Container, ValueType, \
BOOST_PP_CAT(T, N), Sequence>::type::value || \
@@ -224,6 +243,7 @@ namespace boost { namespace spirit { namespace karma { namespace detail
{};
#undef BOOST_SPIRIT_PASS_THROUGH_CONTAINER
+#endif
}}}}
///////////////////////////////////////////////////////////////////////////////
@@ -242,27 +262,51 @@ namespace boost { namespace spirit { namespace traits
namespace boost { namespace spirit { namespace karma { namespace detail
{
+ template <typename Iterator>
+ struct pass_container_base
+ {
+ pass_container_base(Iterator begin, Iterator end)
+ : iter(begin), end(end)
+ {}
+
+ mutable Iterator iter;
+ mutable Iterator end;
+ };
+
+ template <typename Iterator>
+ struct pass_container_base<Iterator&>
+ {
+ pass_container_base(Iterator& begin, Iterator& end)
+ : iter(begin), end(end)
+ {}
+
+ Iterator& iter;
+ Iterator& end;
+ };
+
///////////////////////////////////////////////////////////////////////////
// This function handles the case where the attribute (Attr) given
// to the sequence is an STL container. This is a wrapper around F.
// The function F does the actual generating.
template <typename F, typename Attr, typename Iterator, typename Sequence>
- struct pass_container
+ struct pass_container : pass_container_base<Iterator>
{
+ typedef pass_container_base<Iterator> base_type;
typedef typename F::context_type context_type;
pass_container(F const& f, Iterator begin, Iterator end)
- : f(f), iter(begin), end(end)
+ : base_type(begin, end)
+ , f(f)
{}
bool is_at_end() const
{
- return traits::compare(iter, end);
+ return traits::compare(this->iter, this->end);
}
void next()
{
- traits::next(iter);
+ traits::next(this->iter);
}
// this is for the case when the current element expects an attribute
@@ -271,10 +315,10 @@ namespace boost { namespace spirit { namespace karma { namespace detail
bool dispatch_container(Component const& component, mpl::false_) const
{
// get the next value to generate from container
- if (!is_at_end() && !f(component, traits::deref(iter)))
+ if (!is_at_end() && !f(component, traits::deref(this->iter)))
{
// needs to return false as long as everything is ok
- traits::next(iter);
+ traits::next(this->iter);
return false;
}
@@ -288,7 +332,7 @@ namespace boost { namespace spirit { namespace karma { namespace detail
template <typename Component>
bool dispatch_container(Component const& component, mpl::true_) const
{
- return f(component, make_iterator_range(iter, end));
+ return f(component, make_iterator_range(this->iter, this->end));
}
///////////////////////////////////////////////////////////////////////
@@ -338,8 +382,6 @@ namespace boost { namespace spirit { namespace karma { namespace detail
}
F f;
- mutable Iterator iter;
- mutable Iterator end;
private:
// silence MSVC warning C4512: assignment operator could not be generated
diff --git a/3party/boost/boost/spirit/home/karma/directive/columns.hpp b/3party/boost/boost/spirit/home/karma/directive/columns.hpp
index 75c029d2d1..78010db14a 100644
--- a/3party/boost/boost/spirit/home/karma/directive/columns.hpp
+++ b/3party/boost/boost/spirit/home/karma/directive/columns.hpp
@@ -25,6 +25,7 @@
#include <boost/spirit/home/support/info.hpp>
#include <boost/fusion/include/at.hpp>
#include <boost/fusion/include/vector.hpp>
+#include <boost/integer_traits.hpp>
namespace boost { namespace spirit
{
diff --git a/3party/boost/boost/spirit/home/karma/directive/omit.hpp b/3party/boost/boost/spirit/home/karma/directive/omit.hpp
index ca6d7131ec..d07769e0c5 100644
--- a/3party/boost/boost/spirit/home/karma/directive/omit.hpp
+++ b/3party/boost/boost/spirit/home/karma/directive/omit.hpp
@@ -77,7 +77,7 @@ namespace boost { namespace spirit { namespace karma
if (Execute) {
// wrap the given output iterator to avoid output
detail::disable_output<OutputIterator> disable(sink);
- subject.generate(sink, ctx, d, attr);
+ return subject.generate(sink, ctx, d, attr);
}
return true;
}
diff --git a/3party/boost/boost/spirit/home/karma/nonterminal/rule.hpp b/3party/boost/boost/spirit/home/karma/nonterminal/rule.hpp
index 623f638d51..8660f442a8 100644
--- a/3party/boost/boost/spirit/home/karma/nonterminal/rule.hpp
+++ b/3party/boost/boost/spirit/home/karma/nonterminal/rule.hpp
@@ -240,7 +240,7 @@ namespace boost { namespace spirit { namespace karma
return r;
}
-#if defined(BOOST_NO_RVALUE_REFERENCES)
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
// non-const version needed to suppress proto's %= kicking in
template <typename Expr>
friend rule& operator%=(rule& r, Expr& expr)
diff --git a/3party/boost/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp b/3party/boost/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp
index af2dd35bdd..2ce7b743ad 100644
--- a/3party/boost/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp
+++ b/3party/boost/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp
@@ -707,10 +707,11 @@ namespace boost { namespace spirit { namespace karma
{
template <typename OutputIterator>
static bool
- call_noforce(OutputIterator& sink, bool /*is_zero*/, bool is_negative)
+ call_noforce(OutputIterator& sink, bool is_zero, bool is_negative,
+ bool sign_if_zero)
{
// generate a sign for negative numbers only
- if (is_negative) {
+ if (is_negative || (is_zero && sign_if_zero)) {
*sink = '-';
++sink;
}
@@ -719,10 +720,11 @@ namespace boost { namespace spirit { namespace karma
template <typename OutputIterator>
static bool
- call_force(OutputIterator& sink, bool is_zero, bool is_negative)
+ call_force(OutputIterator& sink, bool is_zero, bool is_negative,
+ bool sign_if_zero)
{
// generate a sign for all numbers except zero
- if (!is_zero)
+ if (!is_zero || sign_if_zero)
*sink = is_negative ? '-' : '+';
else
*sink = ' ';
@@ -734,11 +736,11 @@ namespace boost { namespace spirit { namespace karma
template <typename OutputIterator>
static bool
call(OutputIterator& sink, bool is_zero, bool is_negative
- , bool forcesign)
+ , bool forcesign, bool sign_if_zero = false)
{
return forcesign ?
- call_force(sink, is_zero, is_negative) :
- call_noforce(sink, is_zero, is_negative);
+ call_force(sink, is_zero, is_negative, sign_if_zero) :
+ call_noforce(sink, is_zero, is_negative, sign_if_zero);
}
};
diff --git a/3party/boost/boost/spirit/home/karma/numeric/detail/real_utils.hpp b/3party/boost/boost/spirit/home/karma/numeric/detail/real_utils.hpp
index 20f15f93f4..6acaf87707 100644
--- a/3party/boost/boost/spirit/home/karma/numeric/detail/real_utils.hpp
+++ b/3party/boost/boost/spirit/home/karma/numeric/detail/real_utils.hpp
@@ -152,10 +152,12 @@ namespace boost { namespace spirit { namespace karma
}
// call the actual generating functions to output the different parts
- if (sign_val && traits::test_zero(long_int_part) &&
+ if ((force_sign || sign_val) &&
+ traits::test_zero(long_int_part) &&
traits::test_zero(long_frac_part))
{
sign_val = false; // result is zero, no sign please
+ force_sign = false;
}
// generate integer part
diff --git a/3party/boost/boost/spirit/home/karma/numeric/real_policies.hpp b/3party/boost/boost/spirit/home/karma/numeric/real_policies.hpp
index 8fb560eea3..19843bb00c 100644
--- a/3party/boost/boost/spirit/home/karma/numeric/real_policies.hpp
+++ b/3party/boost/boost/spirit/home/karma/numeric/real_policies.hpp
@@ -175,19 +175,20 @@ namespace boost { namespace spirit { namespace karma
// Generate the integer part of the number.
//
// sink The output iterator to use for generation
- // n The absolute value of the integer part of the floating
- // point number to convert (always non-negative).
- // sign The sign of the overall floating point number to
+ // n The absolute value of the integer part of the floating
+ // point number to convert (always non-negative).
+ // sign The sign of the overall floating point number to
// convert.
- // force_sign Whether a sign has to be generated even for
- // non-negative numbers
+ // force_sign Whether a sign has to be generated even for
+ // non-negative numbers. Note, that force_sign will be
+ // set to false for zero floating point values.
///////////////////////////////////////////////////////////////////////
template <typename OutputIterator>
static bool integer_part (OutputIterator& sink, T n, bool sign
, bool force_sign)
{
return sign_inserter::call(
- sink, traits::test_zero(n), sign, force_sign) &&
+ sink, traits::test_zero(n), sign, force_sign, force_sign) &&
int_inserter<10>::call(sink, n);
}
diff --git a/3party/boost/boost/spirit/home/karma/operator/alternative.hpp b/3party/boost/boost/spirit/home/karma/operator/alternative.hpp
index 0f709fbd76..6883ee204e 100644
--- a/3party/boost/boost/spirit/home/karma/operator/alternative.hpp
+++ b/3party/boost/boost/spirit/home/karma/operator/alternative.hpp
@@ -62,7 +62,7 @@ namespace boost { namespace spirit { namespace traits
};
// never called, but needed for decltype-based result_of (C++0x)
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template <typename Element>
typename result<element_properties(Element)>::type
operator()(Element&&) const;
diff --git a/3party/boost/boost/spirit/home/karma/operator/sequence.hpp b/3party/boost/boost/spirit/home/karma/operator/sequence.hpp
index c9acc6e3c3..d7ee806d54 100644
--- a/3party/boost/boost/spirit/home/karma/operator/sequence.hpp
+++ b/3party/boost/boost/spirit/home/karma/operator/sequence.hpp
@@ -73,7 +73,7 @@ namespace boost { namespace spirit { namespace traits
};
// never called, but needed for decltype-based result_of (C++0x)
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template <typename Element>
typename result<element_properties(Element)>::type
operator()(Element&&) const;
diff --git a/3party/boost/boost/spirit/home/karma/string/symbols.hpp b/3party/boost/boost/spirit/home/karma/string/symbols.hpp
index 185a280a50..72c82d1115 100644
--- a/3party/boost/boost/spirit/home/karma/string/symbols.hpp
+++ b/3party/boost/boost/spirit/home/karma/string/symbols.hpp
@@ -298,7 +298,7 @@ namespace boost { namespace spirit { namespace karma
return sym.remove(attr);
}
-#if defined(BOOST_NO_RVALUE_REFERENCES)
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
// non-const version needed to suppress proto's += kicking in
template <typename Attr, typename T_>
friend adder const&
diff --git a/3party/boost/boost/spirit/home/lex/argument.hpp b/3party/boost/boost/spirit/home/lex/argument.hpp
index edfee0be32..fbac3c1da5 100644
--- a/3party/boost/boost/spirit/home/lex/argument.hpp
+++ b/3party/boost/boost/spirit/home/lex/argument.hpp
@@ -110,12 +110,6 @@ namespace boost { namespace spirit { namespace lex
state_setter(Actor const& actor)
: actor_(actor) {}
- // see explanation for this constructor at the end of this file
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
- state_setter(phoenix::actor<state_getter>, Actor const& actor)
- : actor_(actor) {}
-#endif
-
Actor actor_;
};
@@ -190,12 +184,6 @@ namespace boost { namespace spirit { namespace lex
value_setter(Actor const& actor)
: actor_(actor) {}
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
- // see explanation for this constructor at the end of this file
- value_setter(phoenix::actor<value_getter>, Actor const& actor)
- : actor_(actor) {}
-#endif
-
Actor actor_;
};
@@ -281,81 +269,6 @@ namespace boost { namespace spirit { namespace lex
#endif
}}}
-///////////////////////////////////////////////////////////////////////////////
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-namespace boost { namespace phoenix
-{
- ///////////////////////////////////////////////////////////////////////////
- // The specialization of as_actor_base<> below is needed to convert all
- // occurrences of _state in places where it's used as a rvalue into the
- // proper Phoenix actor (spirit::state_getter) accessing the lexer state.
- template<>
- struct as_actor_base<actor<spirit::lex::state_context> >
- {
- typedef spirit::lex::state_getter type;
-
- static spirit::lex::state_getter
- convert(actor<spirit::lex::state_context>)
- {
- return spirit::lex::state_getter();
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- // The specialization of as_composite<> below is needed to convert all
- // assignments to _state (places where it's used as a lvalue) into the
- // proper Phoenix actor (spirit::state_setter) allowing to change the
- // lexer state.
- template <typename RHS>
- struct as_composite<assign_eval, actor<spirit::lex::state_context>, RHS>
- {
- // For an assignment to _state (a spirit::state_context actor), this
- // specialization makes Phoenix's compose() function construct a
- // spirit::state_setter actor from 1. the LHS, a spirit::state_getter
- // actor (due to the specialization of as_actor_base<> above),
- // and 2. the RHS actor.
- // This is why spirit::state_setter needs a constructor which takes
- // a dummy spirit::state_getter as its first argument in addition
- // to its real, second argument (the RHS actor).
- typedef spirit::lex::state_setter<typename as_actor<RHS>::type> type;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- // The specialization of as_actor_base<> below is needed to convert all
- // occurrences of _val in places where it's used as a rvalue into the
- // proper Phoenix actor (spirit::value_getter) accessing the token value.
- template<>
- struct as_actor_base<actor<spirit::lex::value_context> >
- {
- typedef spirit::lex::value_getter type;
-
- static spirit::lex::value_getter
- convert(actor<spirit::lex::value_context>)
- {
- return spirit::lex::value_getter();
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- // The specialization of as_composite<> below is needed to convert all
- // assignments to _val (places where it's used as a lvalue) into the
- // proper Phoenix actor (spirit::value_setter) allowing to change the
- // token value.
- template <typename RHS>
- struct as_composite<assign_eval, actor<spirit::lex::value_context>, RHS>
- {
- // For an assignment to _val (a spirit::value_context actor), this
- // specialization makes Phoenix's compose() function construct a
- // spirit::value_setter actor from 1. the LHS, a spirit::value_getter
- // actor (due to the specialization of as_actor_base<> above),
- // and 2. the RHS actor.
- // This is why spirit::value_setter needs a constructor which takes
- // a dummy spirit::value_getter as its first argument in addition
- // to its real, second argument (the RHS actor).
- typedef spirit::lex::value_setter<typename as_actor<RHS>::type> type;
- };
-}}
-#endif
#undef SPIRIT_DECLARE_ARG
#endif
diff --git a/3party/boost/boost/spirit/home/lex/argument_phoenix.hpp b/3party/boost/boost/spirit/home/lex/argument_phoenix.hpp
index da24503c2a..7989b01999 100644
--- a/3party/boost/boost/spirit/home/lex/argument_phoenix.hpp
+++ b/3party/boost/boost/spirit/home/lex/argument_phoenix.hpp
@@ -82,7 +82,6 @@ namespace boost { namespace spirit { namespace lex
}}}
///////////////////////////////////////////////////////////////////////////////
-#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
BOOST_PHOENIX_DEFINE_EXPRESSION(
(boost)(spirit)(lex)(value_setter)
@@ -246,6 +245,4 @@ namespace boost { namespace phoenix
{};
}}
-#endif // BOOST_SPIRIT_USE_PHOENIX_V3
-
#endif
diff --git a/3party/boost/boost/spirit/home/lex/lexer/lexer.hpp b/3party/boost/boost/spirit/home/lex/lexer/lexer.hpp
index 93412ce8ff..e733533a41 100644
--- a/3party/boost/boost/spirit/home/lex/lexer/lexer.hpp
+++ b/3party/boost/boost/spirit/home/lex/lexer/lexer.hpp
@@ -285,7 +285,7 @@ namespace boost { namespace spirit { namespace lex
lexer_def_& operator= (lexer_def_ const&);
};
-#if defined(BOOST_NO_RVALUE_REFERENCES)
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
// allow to assign a token definition expression
template <typename LexerDef, typename Expr>
inline lexer_def_<LexerDef>&
diff --git a/3party/boost/boost/spirit/home/lex/lexer/lexertl/generate_static.hpp b/3party/boost/boost/spirit/home/lex/lexer/lexertl/generate_static.hpp
index ea9799cc79..72b8014611 100644
--- a/3party/boost/boost/spirit/home/lex/lexer/lexertl/generate_static.hpp
+++ b/3party/boost/boost/spirit/home/lex/lexer/lexertl/generate_static.hpp
@@ -20,6 +20,7 @@
#include <boost/spirit/home/lex/lexer/lexertl/static_version.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
+#include <boost/scoped_array.hpp>
///////////////////////////////////////////////////////////////////////////////
namespace boost { namespace spirit { namespace lex { namespace lexertl
@@ -50,7 +51,7 @@ namespace boost { namespace spirit { namespace lex { namespace lexertl
{
using namespace std; // some systems have size_t in ns std
size_t len = strlen(source);
- std::auto_ptr<wchar_t> result (new wchar_t[len+1]);
+ boost::scoped_array<wchar_t> result (new wchar_t[len+1]);
result.get()[len] = '\0';
// working with wide character streams is supported only if the
diff --git a/3party/boost/boost/spirit/home/lex/lexer/lexertl/position_token.hpp b/3party/boost/boost/spirit/home/lex/lexer/lexertl/position_token.hpp
index 025cf55d6a..7bf13db12f 100644
--- a/3party/boost/boost/spirit/home/lex/lexer/lexertl/position_token.hpp
+++ b/3party/boost/boost/spirit/home/lex/lexer/lexertl/position_token.hpp
@@ -35,9 +35,7 @@
#include <boost/mpl/or.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/range/iterator_range.hpp>
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
#include <boost/static_assert.hpp>
-#endif
#if defined(BOOST_SPIRIT_DEBUG)
#include <iosfwd>
@@ -387,7 +385,7 @@ namespace boost { namespace spirit { namespace lex { namespace lexertl
token_value_type& value() { return value_; }
token_value_type const& value() const { return value_; }
- bool has_value() const { return value_; }
+ bool has_value() const { return !!value_; }
#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
// workaround for MSVC10 which has problems copying a default
@@ -529,15 +527,13 @@ namespace boost { namespace spirit { namespace lex { namespace lexertl
: position_token<Iterator, lex::omit, HasState, Idtype>
{
private: // precondition assertions
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
BOOST_STATIC_ASSERT((mpl::is_sequence<AttributeTypes>::value ||
is_same<AttributeTypes, lex::omit>::value));
-#endif
typedef position_token<Iterator, lex::omit, HasState, Idtype>
base_type;
protected:
- // If no additional token value types are given, the the token will
+ // If no additional token value types are given, the token will
// hold no token value at all as the base class already has the
// iterator pair of the matched range in the underlying input sequence.
// Otherwise the token value is stored as a variant and will
diff --git a/3party/boost/boost/spirit/home/lex/lexer/lexertl/token.hpp b/3party/boost/boost/spirit/home/lex/lexer/lexertl/token.hpp
index 90961af156..9f4bdb3872 100644
--- a/3party/boost/boost/spirit/home/lex/lexer/lexertl/token.hpp
+++ b/3party/boost/boost/spirit/home/lex/lexer/lexertl/token.hpp
@@ -35,9 +35,7 @@
#include <boost/mpl/or.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/range/iterator_range.hpp>
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
#include <boost/static_assert.hpp>
-#endif
#if defined(BOOST_SPIRIT_DEBUG)
#include <iosfwd>
@@ -330,14 +328,12 @@ namespace boost { namespace spirit { namespace lex { namespace lexertl
struct token : token<Iterator, lex::omit, HasState, Idtype>
{
private: // precondition assertions
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
BOOST_STATIC_ASSERT((mpl::is_sequence<AttributeTypes>::value ||
is_same<AttributeTypes, lex::omit>::value));
-#endif
typedef token<Iterator, lex::omit, HasState, Idtype> base_type;
protected:
- // If no additional token value types are given, the the token will
+ // If no additional token value types are given, the token will
// hold the plain pair of iterators pointing to the matched range
// in the underlying input sequence. Otherwise the token value is
// stored as a variant and will again hold the pair of iterators but
diff --git a/3party/boost/boost/spirit/home/lex/lexer/support_functions_expression.hpp b/3party/boost/boost/spirit/home/lex/lexer/support_functions_expression.hpp
index 613a4a4704..3c7572d8d6 100644
--- a/3party/boost/boost/spirit/home/lex/lexer/support_functions_expression.hpp
+++ b/3party/boost/boost/spirit/home/lex/lexer/support_functions_expression.hpp
@@ -21,37 +21,6 @@ namespace boost { namespace spirit { namespace lex
}}}
///////////////////////////////////////////////////////////////////////////////
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-
-namespace boost { namespace spirit { namespace lex
-{
- namespace expression
- {
- template <typename Eval>
- struct less
- {
- typedef phoenix::actor<lex::less_type<Eval> > type;
-
- static type make(Eval const & eval)
- {
- return lex::less_type<Eval>(eval);
- }
- };
-
- template <typename IdType, typename State>
- struct lookahead
- {
- typedef phoenix::actor<lex::lookahead_type<IdType, State> > type;
-
- static type make(IdType const & id_type, State const & state)
- {
- return lex::lookahead_type<IdType, State>(id_type, state);
- }
- };
- }
-}}}
-
-#else // BOOST_SPIRIT_USE_PHOENIX_V3
BOOST_PHOENIX_DEFINE_EXPRESSION(
(boost)(spirit)(lex)(less)
@@ -130,6 +99,4 @@ namespace boost { namespace phoenix
{};
}}
-#endif // BOOST_SPIRIT_USE_PHOENIX_V3
-
#endif
diff --git a/3party/boost/boost/spirit/home/phoenix.hpp b/3party/boost/boost/spirit/home/phoenix.hpp
deleted file mode 100644
index b14ea5dc89..0000000000
--- a/3party/boost/boost/spirit/home/phoenix.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
-
- 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_SPIRIT_PHOENIX_APRIL_11_2008_0850AM)
-#define BOOST_SPIRIT_PHOENIX_APRIL_11_2008_0850AM
-
-#include <boost/spirit/home/phoenix/algorithm.hpp>
-#include <boost/spirit/home/phoenix/bind.hpp>
-#include <boost/spirit/home/phoenix/container.hpp>
-#include <boost/spirit/home/phoenix/core.hpp>
-#include <boost/spirit/home/phoenix/function.hpp>
-#include <boost/spirit/home/phoenix/fusion.hpp>
-#include <boost/spirit/home/phoenix/object.hpp>
-#include <boost/spirit/home/phoenix/operator.hpp>
-#include <boost/spirit/home/phoenix/scope.hpp>
-#include <boost/spirit/home/phoenix/statement.hpp>
-#include <boost/spirit/home/phoenix/stl.hpp>
-#include <boost/spirit/home/phoenix/version.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/algorithm.hpp b/3party/boost/boost/spirit/home/phoenix/algorithm.hpp
deleted file mode 100644
index c3f7600830..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/algorithm.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_ALGORITHM_HPP
-#define PHOENIX_ALGORITHM_HPP
-
-#include <boost/spirit/home/phoenix/stl/algorithm/iteration.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/querying.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/transformation.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/bind.hpp b/3party/boost/boost/spirit/home/phoenix/bind.hpp
deleted file mode 100644
index 5a90d44aab..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_BIND_HPP
-#define PHOENIX_BIND_HPP
-
-#include <boost/spirit/home/phoenix/version.hpp>
-#include <boost/spirit/home/phoenix/bind/bind_function.hpp>
-#include <boost/spirit/home/phoenix/bind/bind_function_object.hpp>
-#include <boost/spirit/home/phoenix/bind/bind_member_function.hpp>
-#include <boost/spirit/home/phoenix/bind/bind_member_variable.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/bind/bind_function.hpp b/3party/boost/boost/spirit/home/phoenix/bind/bind_function.hpp
deleted file mode 100644
index 9121fdc8cf..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind/bind_function.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_BIND_BIND_FUNCTION_HPP
-#define PHOENIX_BIND_BIND_FUNCTION_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
-#include <boost/spirit/home/phoenix/bind/detail/function_ptr.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename RT>
- inline actor<
- typename as_composite<
- detail::function_eval<0>
- , detail::function_ptr<0, RT, RT(*)()>
- >::type>
- bind(RT(*f)())
- {
- typedef detail::function_ptr<0, RT, RT(*)()> fp_type;
- return compose<detail::function_eval<0> >(fp_type(f));
- }
-
- template <typename RT, typename T0, typename A0>
- inline actor<
- typename as_composite<
- detail::function_eval<1>
- , detail::function_ptr<1, RT, RT(*)(T0)>
- , A0
- >::type>
- bind(RT(*f)(T0), A0 const& _0)
- {
- typedef detail::function_ptr<1, RT, RT(*)(T0)> fp_type;
- return compose<detail::function_eval<1> >(fp_type(f), _0);
- }
-
- template <typename RT, typename T0, typename T1, typename A0, typename A1>
- inline actor<
- typename as_composite<
- detail::function_eval<2>
- , detail::function_ptr<2, RT, RT(*)(T0, T1)>
- , A0, A1
- >::type>
- bind(RT(*f)(T0, T1), A0 const& _0, A1 const& _1)
- {
- typedef detail::function_ptr<2, RT, RT(*)(T0, T1)> fp_type;
- return compose<detail::function_eval<2> >(fp_type(f), _0, _1);
- }
-
- // Bring in the rest of the function binders
- #include <boost/spirit/home/phoenix/bind/detail/bind_function.hpp>
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/bind/bind_function_object.hpp b/3party/boost/boost/spirit/home/phoenix/bind/bind_function_object.hpp
deleted file mode 100644
index 752ae3109f..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind/bind_function_object.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_BIND_BIND_FUNCTION_OBJECT_HPP
-#define PHOENIX_BIND_BIND_FUNCTION_OBJECT_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename F>
- inline actor<typename as_composite<detail::function_eval<0>, F>::type>
- bind(F const& f)
- {
- return compose<detail::function_eval<0> >(f);
- }
-
- template <typename F, typename A0>
- inline actor<typename as_composite<detail::function_eval<1>, F, A0>::type>
- bind(F const& f, A0 const& _0)
- {
- return compose<detail::function_eval<1> >(f, _0);
- }
-
- template <typename F, typename A0, typename A1>
- inline actor<typename as_composite<detail::function_eval<2>, F, A0, A1>::type>
- bind(F const& f, A0 const& _0, A1 const& _1)
- {
- return compose<detail::function_eval<2> >(f, _0, _1);
- }
-
- // Bring in the rest of the function object binders
- #include <boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp>
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/bind/bind_member_function.hpp b/3party/boost/boost/spirit/home/phoenix/bind/bind_member_function.hpp
deleted file mode 100644
index 9d31a38490..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind/bind_member_function.hpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_BIND_BIND_MEMBER_FUNCTION_HPP
-#define PHOENIX_BIND_BIND_MEMBER_FUNCTION_HPP
-
-#include <boost/spirit/home/phoenix/core/reference.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
-#include <boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename RT, typename ClassT, typename ClassA>
- inline actor<
- typename as_composite<
- detail::function_eval<1>
- , detail::member_function_ptr<0, RT, RT(ClassT::*)()>
- , ClassA
- >::type>
- bind(RT(ClassT::*f)(), ClassA const& obj)
- {
- typedef detail::member_function_ptr<0, RT, RT(ClassT::*)()> fp_type;
- return compose<detail::function_eval<1> >(fp_type(f), obj);
- }
-
- template <typename RT, typename ClassT, typename ClassA>
- inline actor<
- typename as_composite<
- detail::function_eval<1>
- , detail::member_function_ptr<0, RT, RT(ClassT::*)() const>
- , ClassA
- >::type>
- bind(RT(ClassT::*f)() const, ClassA const& obj)
- {
- typedef detail::member_function_ptr<0, RT, RT(ClassT::*)() const> fp_type;
- return compose<detail::function_eval<1> >(fp_type(f), obj);
- }
-
- template <typename RT, typename ClassT>
- inline actor<
- typename as_composite<
- detail::function_eval<1>
- , detail::member_function_ptr<0, RT, RT(ClassT::*)()>
- , actor<reference<ClassT> >
- >::type>
- bind(RT(ClassT::*f)(), ClassT& obj)
- {
- typedef detail::member_function_ptr<0, RT, RT(ClassT::*)()> fp_type;
- return compose<detail::function_eval<1> >(
- fp_type(f)
- , actor<reference<ClassT> >(reference<ClassT>(obj)));
- }
-
- template <typename RT, typename ClassT>
- inline actor<
- typename as_composite<
- detail::function_eval<1>
- , detail::member_function_ptr<0, RT, RT(ClassT::*)() const>
- , actor<reference<ClassT> >
- >::type>
- bind(RT(ClassT::*f)() const, ClassT& obj)
- {
- typedef detail::member_function_ptr<0, RT, RT(ClassT::*)() const> fp_type;
- return compose<detail::function_eval<1> >(
- fp_type(f)
- , actor<reference<ClassT> >(reference<ClassT>(obj)));
- }
-
- // Bring in the rest of the function binders
- #include <boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp>
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/bind/bind_member_variable.hpp b/3party/boost/boost/spirit/home/phoenix/bind/bind_member_variable.hpp
deleted file mode 100644
index 3d11351828..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind/bind_member_variable.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_BIND_BIND_MEMBER_VARIABLE_HPP
-#define PHOENIX_BIND_BIND_MEMBER_VARIABLE_HPP
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_pointer.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/core/reference.hpp>
-#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_pointer.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace detail
- {
- template <typename RT, typename MP>
- struct member_variable
- {
- template <typename Class>
- struct result
- {
- typedef typename boost::mpl::if_<
- boost::is_const<
- typename boost::remove_pointer<
- typename boost::remove_reference<Class>::type
- >::type
- >
- , const RT&
- , RT&
- >::type type;
- };
-
- member_variable(MP mp)
- : mp(mp) {}
-
- template <typename Class>
- RT& operator()(Class& obj) const
- {
- return obj.*mp;
- }
-
- template <typename Class>
- RT& operator()(Class* obj) const
- {
- return obj->*mp;
- }
-
- template <typename Class>
- RT const& operator()(Class const& obj) const
- {
- return obj.*mp;
- }
-
- template <typename Class>
- RT const& operator()(Class const* obj) const
- {
- return obj->*mp;
- }
-
- MP mp;
- };
- }
-
- template <typename RT, typename ClassT, typename ClassA>
- inline actor<
- typename as_composite<
- detail::function_eval<1>
- , detail::member_variable<RT, RT ClassT::*>
- , ClassA
- >::type>
- bind(RT ClassT::*mp, ClassA const& obj)
- {
- typedef detail::member_variable<RT, RT ClassT::*> mp_type;
- return compose<detail::function_eval<1> >(mp_type(mp), obj);
- }
-
- template <typename RT, typename ClassT>
- inline actor<
- typename as_composite<
- detail::function_eval<1>
- , detail::member_variable<RT, RT ClassT::*>
- , actor<reference<ClassT> >
- >::type>
- bind(RT ClassT::*mp, ClassT& obj)
- {
- typedef detail::member_variable<RT, RT ClassT::*> mp_type;
- return compose<detail::function_eval<1> >(
- mp_type(mp)
- , actor<reference<ClassT> >(reference<ClassT>(obj)));
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/bind/detail/bind_function.hpp b/3party/boost/boost/spirit/home/phoenix/bind/detail/bind_function.hpp
deleted file mode 100644
index 8d6340d0da..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind/detail/bind_function.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING)
-#if !defined(PHOENIX_BIND_DETAIL_BIND_FUNCTION_HPP)
-#define PHOENIX_BIND_DETAIL_BIND_FUNCTION_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT), \
- "boost/spirit/home/phoenix/bind/detail/bind_function.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <typename RT
- , BOOST_PP_ENUM_PARAMS(N, typename T)
- , BOOST_PP_ENUM_PARAMS(N, typename A)>
- inline actor<
- typename as_composite<
- detail::function_eval<N>
- , detail::function_ptr<N, RT, RT(*)(BOOST_PP_ENUM_PARAMS(N, T))>
- , BOOST_PP_ENUM_PARAMS(N, A)
- >::type>
- bind(RT(*f)(BOOST_PP_ENUM_PARAMS(N, T))
- , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
- {
- typedef detail::function_ptr<
- N, RT, RT(*)(BOOST_PP_ENUM_PARAMS(N, T))> fp_type;
- return compose<detail::function_eval<N> >(
- fp_type(f), BOOST_PP_ENUM_PARAMS(N, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp b/3party/boost/boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp
deleted file mode 100644
index 4e4984d61e..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING)
-#if !defined(PHOENIX_BIND_DETAIL_BIND_FUNCTION_OBJECT_HPP)
-#define PHOENIX_BIND_DETAIL_BIND_FUNCTION_OBJECT_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT), \
- "boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <typename F, BOOST_PP_ENUM_PARAMS(N, typename A)>
- inline actor<typename as_composite<detail::function_eval<N>, F
- , BOOST_PP_ENUM_PARAMS(N, A)>::type>
- bind(F const& f, BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
- {
- return compose<detail::function_eval<N> >(f, BOOST_PP_ENUM_PARAMS(N, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp b/3party/boost/boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp
deleted file mode 100644
index 315f56fc98..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING)
-#if !defined(PHOENIX_BIND_DETAIL_BIND_MEMBER_FUNCTION_HPP)
-#define PHOENIX_BIND_DETAIL_BIND_MEMBER_FUNCTION_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/preprocessor/inc.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, BOOST_PP_DEC(BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT)), \
- "boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <typename RT
- , typename ClassT
- , BOOST_PP_ENUM_PARAMS(N, typename T)
- , typename ClassA
- , BOOST_PP_ENUM_PARAMS(N, typename A)>
- inline actor<
- typename as_composite<
- detail::function_eval<BOOST_PP_INC(N)>
- , detail::member_function_ptr<N,
- RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T))>
- , ClassA, BOOST_PP_ENUM_PARAMS(N, A)
- >::type>
- bind(
- RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(N, T))
- , ClassA const& obj
- , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
- {
- typedef detail::member_function_ptr<
- N, RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T))> fp_type;
- return compose<detail::function_eval<BOOST_PP_INC(N)> >(
- fp_type(f), obj, BOOST_PP_ENUM_PARAMS(N, _));
- }
-
- template <typename RT
- , typename ClassT
- , BOOST_PP_ENUM_PARAMS(N, typename T)
- , typename ClassA
- , BOOST_PP_ENUM_PARAMS(N, typename A)>
- inline actor<
- typename as_composite<
- detail::function_eval<BOOST_PP_INC(N)>
- , detail::member_function_ptr<N,
- RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T)) const>
- , ClassA, BOOST_PP_ENUM_PARAMS(N, A)
- >::type>
- bind(
- RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(N, T)) const
- , ClassA const& obj
- , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
- {
- typedef detail::member_function_ptr<
- N, RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T)) const> fp_type;
- return compose<detail::function_eval<BOOST_PP_INC(N)> >(
- fp_type(f), obj, BOOST_PP_ENUM_PARAMS(N, _));
- }
-
- template <typename RT
- , typename ClassT
- , BOOST_PP_ENUM_PARAMS(N, typename T)
- , BOOST_PP_ENUM_PARAMS(N, typename A)>
- inline actor<
- typename as_composite<
- detail::function_eval<BOOST_PP_INC(N)>
- , detail::member_function_ptr<N,
- RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T))>
- , actor<reference<ClassT> >
- , BOOST_PP_ENUM_PARAMS(N, A)
- >::type>
- bind(
- RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(N, T))
- , ClassT& obj
- , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
- {
- typedef detail::member_function_ptr<
- N, RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T))> fp_type;
- return compose<detail::function_eval<BOOST_PP_INC(N)> >(
- fp_type(f)
- , actor<reference<ClassT> >(reference<ClassT>(obj))
- , BOOST_PP_ENUM_PARAMS(N, _));
- }
-
- template <typename RT
- , typename ClassT
- , BOOST_PP_ENUM_PARAMS(N, typename T)
- , BOOST_PP_ENUM_PARAMS(N, typename A)>
- inline actor<
- typename as_composite<
- detail::function_eval<BOOST_PP_INC(N)>
- , detail::member_function_ptr<N,
- RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T)) const>
- , actor<reference<ClassT> >
- , BOOST_PP_ENUM_PARAMS(N, A)
- >::type>
- bind(
- RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(N, T)) const
- , ClassT& obj
- , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
- {
- typedef detail::member_function_ptr<
- N, RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T)) const> fp_type;
- return compose<detail::function_eval<BOOST_PP_INC(N)> >(
- fp_type(f)
- , actor<reference<ClassT> >(reference<ClassT>(obj))
- , BOOST_PP_ENUM_PARAMS(N, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/bind/detail/function_ptr.hpp b/3party/boost/boost/spirit/home/phoenix/bind/detail/function_ptr.hpp
deleted file mode 100644
index a2352cd7e5..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind/detail/function_ptr.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING)
-#if !defined(PHOENIX_BIND_DETAIL_FUNCTION_PTR_HPP)
-#define PHOENIX_BIND_DETAIL_FUNCTION_PTR_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/dec.hpp>
-
-namespace boost { namespace phoenix { namespace detail
-{
- template <int N>
- struct function_ptr_impl
- {
- template <typename RT, typename FP>
- struct impl;
- };
-
- template <int N, typename RT, typename FP>
- struct function_ptr : function_ptr_impl<N>::template impl<RT, FP>
- {
- typedef typename function_ptr_impl<N>::template impl<RT, FP> base;
- function_ptr(FP fp)
- : base(fp) {}
- };
-
- template <>
- struct function_ptr_impl<0>
- {
- template <typename RT, typename FP>
- struct impl
- {
- typedef RT result_type;
-
- impl(FP fp)
- : fp(fp) {}
-
- RT operator()() const
- {
- return fp();
- }
-
- FP fp;
- };
- };
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, PHOENIX_COMPOSITE_LIMIT, \
- "boost/spirit/home/phoenix/bind/detail/function_ptr.hpp"))
-#include BOOST_PP_ITERATE()
-
-}}} // namespace boost::phoenix::detail
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <>
- struct function_ptr_impl<N>
- {
- template <typename RT, typename FP>
- struct impl
- {
- template <BOOST_PP_ENUM_PARAMS(N, typename T)>
- struct result
- {
- typedef RT type;
- };
-
- impl(FP fp)
- : fp(fp) {}
-
- template <BOOST_PP_ENUM_PARAMS(N, typename A)>
- RT operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _)) const
- {
- return fp(BOOST_PP_ENUM_PARAMS(N, _));
- }
-
- FP fp;
- };
- };
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp b/3party/boost/boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp
deleted file mode 100644
index 2c11510cee..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING)
-#if !defined(PHOENIX_BIND_DETAIL_MEMBER_FUNCTION_PTR_HPP)
-#define PHOENIX_BIND_DETAIL_MEMBER_FUNCTION_PTR_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/utility/addressof.hpp>
-
-namespace boost { namespace phoenix { namespace detail
-{
- template <int N>
- struct member_function_ptr_impl
- {
- template <typename RT, typename FP>
- struct impl;
- };
-
- template <int N, typename RT, typename FP>
- struct member_function_ptr
- : member_function_ptr_impl<N>::template impl<RT, FP>
- {
- typedef typename member_function_ptr_impl<N>::
- template impl<RT, FP> base;
- member_function_ptr(FP fp)
- : base(fp) {}
- };
-
- template <>
- struct member_function_ptr_impl<0>
- {
- template <typename RT, typename FP>
- struct impl
- {
- template <typename Class>
- struct result
- {
- typedef RT type;
- };
-
- impl(FP fp)
- : fp(fp) {}
-
- template <typename Class>
- RT operator()(Class& obj) const
- {
- return (obj.*fp)();
- }
-
- template <typename Class>
- RT operator()(Class* obj) const
- {
- return (obj->*fp)();
- }
-
- FP fp;
- };
- };
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, PHOENIX_COMPOSITE_LIMIT, \
- "boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp"))
-#include BOOST_PP_ITERATE()
-
-}}} // namespace boost::phoenix::detail
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <>
- struct member_function_ptr_impl<N>
- {
- template <typename RT, typename FP>
- struct impl
- {
- template <typename Class, BOOST_PP_ENUM_PARAMS(N, typename T)>
- struct result
- {
- typedef RT type;
- };
-
- impl(FP fp)
- : fp(fp) {}
-
- template <typename Class, BOOST_PP_ENUM_PARAMS(N, typename A)>
- RT operator()(Class& obj, BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _)) const
- {
- return (obj.*fp)(BOOST_PP_ENUM_PARAMS(N, _));
- }
-
- template <typename Class, BOOST_PP_ENUM_PARAMS(N, typename A)>
- RT operator()(Class* obj, BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _)) const
- {
- return (obj->*fp)(BOOST_PP_ENUM_PARAMS(N, _));
- }
-
- FP fp;
- };
- };
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/container.hpp b/3party/boost/boost/spirit/home/phoenix/container.hpp
deleted file mode 100644
index fb6ec3f9f9..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/container.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CONTAINER_HPP
-#define PHOENIX_CONTAINER_HPP
-
-#include <boost/spirit/home/phoenix/stl/container/container.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core.hpp b/3party/boost/boost/spirit/home/phoenix/core.hpp
deleted file mode 100644
index 7dfefb3d1c..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_HPP
-#define PHOENIX_CORE_HPP
-
-#include <boost/spirit/home/phoenix/version.hpp>
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/spirit/home/phoenix/core/basic_environment.hpp>
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/spirit/home/phoenix/core/as_actor.hpp>
-#include <boost/spirit/home/phoenix/core/is_actor.hpp>
-#include <boost/spirit/home/phoenix/core/argument.hpp>
-#include <boost/spirit/home/phoenix/core/value.hpp>
-#include <boost/spirit/home/phoenix/core/reference.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/nothing.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/actor.hpp b/3party/boost/boost/spirit/home/phoenix/core/actor.hpp
deleted file mode 100644
index 6ff48e9e7f..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/actor.hpp
+++ /dev/null
@@ -1,194 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_ACTOR_HPP
-#define PHOENIX_CORE_ACTOR_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-
-#if !defined(BOOST_RESULT_OF_NUM_ARGS)
-# define BOOST_RESULT_OF_NUM_ARGS PHOENIX_ACTOR_LIMIT
-#elif (BOOST_RESULT_OF_NUM_ARGS < PHOENIX_ACTOR_LIMIT)
-# error "BOOST_RESULT_OF_NUM_ARGS < PHOENIX_ACTOR_LIMIT"
-#endif
-
-#include <boost/spirit/home/phoenix/core/basic_environment.hpp>
-#include <boost/mpl/min.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/utility/result_of.hpp>
-
-namespace boost { namespace phoenix
-{
- // phoenix::void_ is the same as fusion::void_
- typedef fusion::void_ void_;
-
- namespace detail
- {
- // Forward declarations. These will come in when we get to the
- // operator module, yet, the actor's assignment operator and index
- // operator are required to be members.
-
- template <typename T0, typename T1>
- struct make_assign_composite;
-
- template <typename T0, typename T1>
- struct make_index_composite;
-
- template <typename BaseT0, typename BaseT1>
- struct comma_result;
-
- // error no arguments supplied
- struct error_expecting_arguments
- {
- template <typename T>
- error_expecting_arguments(T const&) {}
- };
- }
-
- template <typename Eval, typename Env>
- struct eval_result
- {
- typedef typename Eval::template result<Env>::type type;
- };
-
-#if defined(BOOST_MSVC)
-# pragma warning(push)
-# pragma warning(disable: 4522) // multiple assignment operators specified warning
-#endif
-
- template <typename Eval>
- struct actor : Eval
- {
- typedef actor<Eval> self_type;
- typedef Eval eval_type;
-
- template <class Sig> struct result {};
-
- actor()
- : Eval() {}
-
- actor(Eval const& base)
- : Eval(base) {}
-
- template <typename T0>
- explicit actor(T0 const& _0)
- : Eval(_0) {}
-
- template <typename T0, typename T1>
- actor(T0 const& _0, T1 const& _1)
- : Eval(_0, _1) {}
-
- typedef typename
- mpl::eval_if<
- typename Eval::no_nullary // avoid calling eval_result when this is true
- , mpl::identity<detail::error_expecting_arguments>
- , eval_result<eval_type, basic_environment<> >
- >::type
- nullary_result;
-
- actor& operator=(actor const& rhs)
- {
- Eval::operator=(rhs);
- return *this;
- }
-
- actor& operator=(actor& rhs)
- {
- Eval::operator=(rhs);
- return *this;
- }
-
- nullary_result
- operator()() const
- {
- return eval_type::eval(basic_environment<>());
- }
-
- template <class F, class A0>
- struct result<F(A0)>
- : eval_result<
- eval_type
- , basic_environment<
- typename remove_reference<A0>::type
- >
- >
- {};
-
- template <typename T0>
- typename result<actor(T0&)>::type
- operator()(T0& _0) const
- {
- return eval_type::eval(basic_environment<T0>(_0));
- }
-
- template <class F, class A0, class A1>
- struct result<F(A0,A1)>
- : eval_result<
- eval_type
- , basic_environment<
- typename remove_reference<A0>::type
- , typename remove_reference<A1>::type
- >
- >
- {};
-
- template <typename T0, typename T1>
- typename result<actor(T0&,T1&)>::type
- operator()(T0& _0, T1& _1) const
- {
- return eval_type::eval(basic_environment<T0, T1>(_0, _1));
- }
-
- template <typename T1>
- typename detail::make_assign_composite<self_type, T1>::type
- operator=(T1 const& a1) const;
-
- template <typename T1>
- typename detail::make_index_composite<self_type, T1>::type
- operator[](T1 const& a1) const;
-
- // Bring in the rest of the constructors and function call operators
- #include <boost/spirit/home/phoenix/core/detail/actor.hpp>
- };
-
-#if defined(BOOST_MSVC)
-# pragma warning(pop)
-#endif
-
- // Forward declaration: The intent to overload the comma must be
- // stated early on to avoid the subtle problem that arises when
- // the header file where the comma operator overload is defined,
- // is not included by the client and the client attempts to use
- // the comma anyway.
-
- namespace detail
- {
- template <typename BaseT0, typename BaseT1>
- struct comma_result;
- }
-
- template <typename BaseT0, typename BaseT1>
- typename detail::comma_result<BaseT0, BaseT1>::type
- operator,(actor<BaseT0> const& a0, actor<BaseT1> const& a1);
-}}
-
-namespace boost
-{
- template <typename Eval>
- struct result_of<phoenix::actor<Eval>()>
- {
- typedef typename phoenix::actor<Eval>::nullary_result type;
- };
-
- template <typename Eval>
- struct result_of<phoenix::actor<Eval> const()>
- : result_of<phoenix::actor<Eval>()>
- {};
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/argument.hpp b/3party/boost/boost/spirit/home/phoenix/core/argument.hpp
deleted file mode 100644
index 1679cb2b38..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/argument.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_ARGUMENT_HPP
-#define PHOENIX_CORE_ARGUMENT_HPP
-
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/preprocessor/inc.hpp>
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/fusion/include/at.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/less.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/type_traits/add_reference.hpp>
-
-#define PHOENIX_DECLARE_ARG(z, n, data) \
- typedef actor<argument<n> > \
- BOOST_PP_CAT(BOOST_PP_CAT(arg, BOOST_PP_INC(n)), _type); \
- actor<argument<n> > const \
- BOOST_PP_CAT(arg, BOOST_PP_INC(n)) = argument<n>(); \
- typedef actor<argument<n> > \
- BOOST_PP_CAT(BOOST_PP_CAT(_, BOOST_PP_INC(n)), _type); \
- actor<argument<n> > const \
- BOOST_PP_CAT(_, BOOST_PP_INC(n)) = argument<n>();
-
-namespace boost { namespace phoenix
-{
- namespace detail
- {
- template <typename Arg>
- struct error_argument_not_found {};
- inline void test_invalid_argument(int) {}
- }
-
- template <int N>
- struct argument
- {
- typedef mpl::true_ no_nullary;
-
- template <typename Env>
- struct result
- {
- typedef typename
- fusion::result_of::at<typename Env::tie_type, mpl::int_<N> >::type
- type;
- };
-
- template <typename Env>
- typename result<Env>::type
- eval(Env const& env) const
- {
- typedef typename
- mpl::if_<
- mpl::less<mpl::int_<N>, mpl::size<typename Env::args_type> >
- , int
- , detail::error_argument_not_found<argument<N> >
- >::type
- check_out_of_bounds;
-
- detail::test_invalid_argument(check_out_of_bounds());
- return fusion::at_c<N>(env.args());
- }
- };
-
- namespace arg_names
- {
- // Phoenix style names
- typedef actor<argument<0> > arg1_type;
- actor<argument<0> > const arg1 = argument<0>();
- typedef actor<argument<1> > arg2_type;
- actor<argument<1> > const arg2 = argument<1>();
- typedef actor<argument<2> > arg3_type;
- actor<argument<2> > const arg3 = argument<2>();
-
- // BLL style names
- typedef actor<argument<0> > _1_type;
- actor<argument<0> > const _1 = argument<0>();
- typedef actor<argument<1> > _2_type;
- actor<argument<1> > const _2 = argument<1>();
- typedef actor<argument<2> > _3_type;
- actor<argument<2> > const _3 = argument<2>();
-
- // Bring in the rest or the Phoenix style arguments (arg4 .. argN+1)
- // and BLL style arguments (_4 .. _N+1), using PP
- BOOST_PP_REPEAT_FROM_TO(
- 3, PHOENIX_ARG_LIMIT, PHOENIX_DECLARE_ARG, _)
- }
-}}
-
-#undef PHOENIX_DECLARE_ARG
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/as_actor.hpp b/3party/boost/boost/spirit/home/phoenix/core/as_actor.hpp
deleted file mode 100644
index 36f0aacb69..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/as_actor.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_AS_ACTOR_HPP
-#define PHOENIX_CORE_AS_ACTOR_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename T>
- struct as_actor_base; // defined in value.hpp
-
- template <typename Base>
- struct as_actor_base<actor<Base> >
- {
- typedef Base type;
-
- static Base const&
- convert(actor<Base> const& x)
- {
- return x;
- }
- };
-
- template <>
- struct as_actor_base<fusion::void_>
- {
- typedef fusion::void_ type;
- struct error_attempting_to_convert_void_type_to_an_actor {};
-
- static void
- convert(error_attempting_to_convert_void_type_to_an_actor);
- };
-
- template <>
- struct as_actor_base<void>
- {
- typedef void type;
- struct error_attempting_to_convert_void_type_to_an_actor {};
-
- static void
- convert(error_attempting_to_convert_void_type_to_an_actor);
- };
-
- template <typename T>
- struct as_actor
- {
- typedef actor<typename as_actor_base<T>::type> type;
-
- static type
- convert(T const& x)
- {
- return as_actor_base<T>::convert(x);
- }
- };
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/basic_environment.hpp b/3party/boost/boost/spirit/home/phoenix/core/basic_environment.hpp
deleted file mode 100644
index 5ef82234cd..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/basic_environment.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_BASIC_ENVIRONMENT_HPP
-#define PHOENIX_CORE_BASIC_ENVIRONMENT_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/mpl/remove.hpp>
-#include <boost/mpl/transform.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/fusion/include/as_vector.hpp>
-#include <boost/fusion/include/mpl.hpp>
-
-namespace boost { namespace phoenix
-{
- template <
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- PHOENIX_ARG_LIMIT, typename T, fusion::void_)>
- class basic_environment
- {
- typedef
- mpl::BOOST_PP_CAT(vector, PHOENIX_ARG_LIMIT)<
- BOOST_PP_ENUM_PARAMS(PHOENIX_ARG_LIMIT, T)>
- args_with_void_type;
-
- public:
-
- // args_type: the list of types in an mpl::sequence
- typedef typename
- mpl::remove<args_with_void_type, fusion::void_>::type
- args_type;
-
- // tie_type: a fusion::tuple of references
- typedef typename
- fusion::result_of::as_vector<
- typename mpl::transform<
- args_type, boost::add_reference<mpl::_1>
- >::type
- >::type
- tie_type;
-
- basic_environment()
- : args_() {}
-
- template <typename U0>
- explicit basic_environment(U0& _0)
- : args_(_0) {}
-
- template <typename U0, typename U1>
- basic_environment(U0& _0, U1& _1)
- : args_(_0, _1) {}
-
- // Bring in the rest of the constructors
- #include <boost/spirit/home/phoenix/core/detail/basic_environment.hpp>
-
- tie_type const&
- args() const
- {
- return args_;
- }
-
- tie_type&
- args()
- {
- return args_;
- }
-
- private:
-
- tie_type args_;
- };
-}}
-
-#endif
-
diff --git a/3party/boost/boost/spirit/home/phoenix/core/compose.hpp b/3party/boost/boost/spirit/home/phoenix/core/compose.hpp
deleted file mode 100644
index d536113764..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/compose.hpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_COMPOSE_HPP
-#define PHOENIX_CORE_COMPOSE_HPP
-
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/value.hpp>
-#include <boost/spirit/home/phoenix/core/as_actor.hpp>
-
-#define PHOENIX_AS_ACTOR(z, n, data) \
- typename mpl::eval_if< \
- is_same<BOOST_PP_CAT(T, n), fusion::void_> \
- , mpl::identity<fusion::void_> \
- , as_actor_base<BOOST_PP_CAT(T, n)> \
- >::type
-
-namespace boost { namespace phoenix
-{
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// as_composite<EvalPolicy, T0,... TN> metafunction
-//
-// Create a composite given an EvalPolicy and types T0..TN.
-// The types are converted to an actor through the as_actor
-// metafunction (see as_actor.hpp).
-//
-///////////////////////////////////////////////////////////////////////////////
- template <
- typename EvalPolicy
- , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- PHOENIX_COMPOSITE_LIMIT, typename T, fusion::void_)>
- struct as_composite
- {
- typedef composite<
- EvalPolicy
- , fusion::vector<
- BOOST_PP_ENUM(PHOENIX_COMPOSITE_LIMIT, PHOENIX_AS_ACTOR, _)>
- >
- type;
- };
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// compose functions
-//
-// Usage:
-//
-// compose<EvalPolicy>(_0, _1,... _N)
-//
-// Returns a composite given an EvalPolicy and arguments _0.._N.
-// The arguments are converted to an actor through the as_actor
-// metafunction (see as_actor.hpp).
-//
-///////////////////////////////////////////////////////////////////////////////
- template <typename EvalPolicy>
- inline actor<typename as_composite<EvalPolicy>::type>
- compose()
- {
- return actor<typename as_composite<EvalPolicy>::type>();
- }
-
- template <typename EvalPolicy, typename T0>
- inline actor<typename as_composite<EvalPolicy, T0>::type>
- compose(T0 const& _0)
- {
- return actor<typename as_composite<EvalPolicy, T0>::type>(
- as_actor<T0>::convert(_0)
- );
- }
-
- template <typename EvalPolicy, typename T0, typename T1>
- inline actor<typename as_composite<EvalPolicy, T0, T1>::type>
- compose(T0 const& _0, T1 const& _1)
- {
- return actor<typename as_composite<EvalPolicy, T0, T1>::type>(
- as_actor<T0>::convert(_0)
- , as_actor<T1>::convert(_1)
- );
- }
-
- // Bring in the the rest of the compose overloads
- #include <boost/spirit/home/phoenix/core/detail/compose.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// re_curry<EvalPolicy, T0,...TN>
-//
-// returns the result of re currying T0..TN using EvalPolicy.
-//
-///////////////////////////////////////////////////////////////////////////////
- template <
- typename EvalPolicy
- , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- PHOENIX_COMPOSITE_LIMIT, typename T, fusion::void_)>
- struct re_curry
- {
- typedef actor<
- typename as_composite<
- EvalPolicy
- , BOOST_PP_ENUM_PARAMS(PHOENIX_COMPOSITE_LIMIT, T)>::type
- >
- type;
- };
-}}
-
-#undef PHOENIX_AS_ACTOR
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/composite.hpp b/3party/boost/boost/spirit/home/phoenix/core/composite.hpp
deleted file mode 100644
index 283bdc24f3..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/composite.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_COMPOSITE_HPP
-#define PHOENIX_CORE_COMPOSITE_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/spirit/home/phoenix/core/is_actor.hpp>
-#include <boost/fusion/include/vector.hpp>
-#include <boost/fusion/include/at.hpp>
-#include <boost/fusion/include/size.hpp>
-#include <boost/fusion/include/mpl.hpp>
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/or.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace detail
- {
- template <int N>
- struct composite_eval;
-
- struct compute_no_nullary
- {
- template <typename State, typename T>
- struct apply
- {
- typedef typename
- mpl::or_<typename T::no_nullary, State>::type
- type;
- };
- };
- }
-
- template <typename EvalPolicy, typename EvalTuple>
- struct composite : EvalTuple
- {
- typedef EvalTuple base_type;
- typedef composite<EvalPolicy, EvalTuple> self_type;
- typedef EvalPolicy eval_policy_type;
-
- typedef typename
- mpl::fold<
- EvalTuple
- , mpl::false_
- , detail::compute_no_nullary
- >::type
- no_nullary;
-
- template <typename Env>
- struct result
- {
- typedef
- typename detail::composite_eval<
- fusion::result_of::size<base_type>::value>::
- template result<self_type, Env>::type
- type;
- };
-
- composite()
- : base_type() {}
-
- composite(base_type const& base)
- : base_type(base) {}
-
- template <typename U0>
- composite(U0& _0)
- : base_type(_0) {}
-
- template <typename U0, typename U1>
- composite(U0& _0, U1& _1)
- : base_type(_0, _1) {}
-
- template <typename Env>
- typename result<Env>::type
- eval(Env const& env) const
- {
- typedef typename result<Env>::type return_type;
- return detail::
- composite_eval<fusion::result_of::size<base_type>::value>::template
- call<return_type>(*this, env);
- }
-
- // Bring in the rest of the constructors
- #include <boost/spirit/home/phoenix/core/detail/composite.hpp>
- };
-
- // Bring in the detail::composite_eval<0..N> definitions
- #include <boost/spirit/home/phoenix/core/detail/composite_eval.hpp>
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/detail/actor.hpp b/3party/boost/boost/spirit/home/phoenix/core/detail/actor.hpp
deleted file mode 100644
index 66666c5474..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/detail/actor.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_CORE_DETAIL_ACTOR_HPP
-#define PHOENIX_CORE_DETAIL_ACTOR_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/facilities/intercept.hpp>
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, PHOENIX_ACTOR_LIMIT, \
- "boost/spirit/home/phoenix/core/detail/actor.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <BOOST_PP_ENUM_PARAMS(N, typename T)>
- actor(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
- : Eval(BOOST_PP_ENUM_PARAMS(N, _)) {}
-
- template <typename F, BOOST_PP_ENUM_PARAMS(N, typename A)>
- struct result<F(BOOST_PP_ENUM_PARAMS(N, A))>
- : eval_result<
- eval_type
- , basic_environment<
- BOOST_PP_ENUM_BINARY_PARAMS(
- N
- , typename remove_reference<A
- , >::type BOOST_PP_INTERCEPT
- )
- >
- >
- {};
-
- template <BOOST_PP_ENUM_PARAMS(N, typename T)>
- typename result<
- actor(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & BOOST_PP_INTERCEPT))
- >::type
- operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _)) const
- {
- return eval_type::eval(
- basic_environment<BOOST_PP_ENUM_PARAMS(N, T)>(
- BOOST_PP_ENUM_PARAMS(N, _))
- );
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/core/detail/basic_environment.hpp b/3party/boost/boost/spirit/home/phoenix/core/detail/basic_environment.hpp
deleted file mode 100644
index 986ecf2b33..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/detail/basic_environment.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_CORE_DETAIL_BASIC_ENVIRONMENT_HPP
-#define PHOENIX_CORE_DETAIL_BASIC_ENVIRONMENT_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, PHOENIX_ARG_LIMIT, \
- "boost/spirit/home/phoenix/core/detail/basic_environment.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <BOOST_PP_ENUM_PARAMS(N, typename U)>
- basic_environment(BOOST_PP_ENUM_BINARY_PARAMS(N, U, & _))
- : args_(BOOST_PP_ENUM_PARAMS(N, _)) {}
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/core/detail/compose.hpp b/3party/boost/boost/spirit/home/phoenix/core/detail/compose.hpp
deleted file mode 100644
index 945a3d3f19..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/detail/compose.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_CORE_DETAIL_COMPOSE_DETAIL_HPP
-#define PHOENIX_CORE_DETAIL_COMPOSE_DETAIL_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
-
-#define PHOENIX_AS_ACTOR_CONVERT(z, n, data) \
- as_actor<BOOST_PP_CAT(T, n)>::convert(BOOST_PP_CAT(_, n))
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, PHOENIX_COMPOSITE_LIMIT, \
- "boost/spirit/home/phoenix/core/detail/compose.hpp"))
-#include BOOST_PP_ITERATE()
-
-#undef PHOENIX_AS_ACTOR_CONVERT
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <typename EvalPolicy, BOOST_PP_ENUM_PARAMS(N, typename T)>
- inline actor<
- typename as_composite<EvalPolicy, BOOST_PP_ENUM_PARAMS(N, T)>::type>
- compose(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
- {
- return actor<
- typename as_composite<EvalPolicy, BOOST_PP_ENUM_PARAMS(N, T)>::type>(
- BOOST_PP_ENUM(N, PHOENIX_AS_ACTOR_CONVERT, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/core/detail/composite.hpp b/3party/boost/boost/spirit/home/phoenix/core/detail/composite.hpp
deleted file mode 100644
index 6970f7c96e..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/detail/composite.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_CORE_DETAIL_COMPOSITE_HPP
-#define PHOENIX_CORE_DETAIL_COMPOSITE_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, PHOENIX_COMPOSITE_LIMIT, \
- "boost/spirit/home/phoenix/core/detail/composite.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <BOOST_PP_ENUM_PARAMS(N, typename U)>
- composite(BOOST_PP_ENUM_BINARY_PARAMS(N, U, & _))
- : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/core/detail/composite_eval.hpp b/3party/boost/boost/spirit/home/phoenix/core/detail/composite_eval.hpp
deleted file mode 100644
index 14f12afbc1..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/detail/composite_eval.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_CORE_DETAIL_COMPOSITE_EVAL_HPP
-#define PHOENIX_CORE_DETAIL_COMPOSITE_EVAL_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-
- namespace detail
- {
- template <int N>
- struct composite_eval;
-
- template <>
- struct composite_eval<0>
- {
- template <typename Composite, typename Env>
- struct result
- {
- typedef typename Composite::eval_policy_type::
- template result<Env>::type
- type;
- };
-
- template <typename RT, typename Composite, typename Env>
- static RT
- call(Composite const& /*composite*/, Env const& env)
- {
- typedef typename Composite::eval_policy_type eval_policy_type;
- return eval_policy_type::template eval<RT>(env);
- }
- };
-
- template <typename Actor, typename Env>
- struct eval_is_actor
- : is_actor<typename Actor::template result<Env>::type> {};
-
- template <typename Actor, typename Env>
- struct eval_is_void
- : is_same<typename Actor::template result<Env>::type, fusion::void_> {};
- }
-
-#define PHOENIX_GET_ACTOR_TYPE(z, n, data) \
- typedef \
- typename fusion::result_of::value_at_c<Composite, n>::type \
- BOOST_PP_CAT(actor, n);
-
-#define PHOENIX_GET_ACTOR(z, n, data) \
- fusion::at_c<n>(composite)
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, PHOENIX_COMPOSITE_LIMIT, \
- "boost/spirit/home/phoenix/core/detail/composite_eval.hpp"))
-#include BOOST_PP_ITERATE()
-
-#undef PHOENIX_GET_ACTOR
-#undef PHOENIX_GET_ACTOR_TYPE
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- namespace detail
- {
- template <>
- struct composite_eval<N>
- {
- template <typename Composite, typename Env>
- struct result
- {
- BOOST_PP_REPEAT(N, PHOENIX_GET_ACTOR_TYPE, _)
-
- typedef typename
- Composite::eval_policy_type::template result<
- Env, BOOST_PP_ENUM_PARAMS(N, actor)
- >::type
- type;
- };
-
- template <typename RT, typename Composite, typename Env>
- static RT
- call(Composite const& composite, Env const& env)
- {
- typedef typename Composite::eval_policy_type eval_policy_type;
- return eval_policy_type::template eval<RT>(
- env, BOOST_PP_ENUM(N, PHOENIX_GET_ACTOR, _));
- }
- };
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/core/detail/composite_info.hpp b/3party/boost/boost/spirit/home/phoenix/core/detail/composite_info.hpp
deleted file mode 100644
index 48cebea88a..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/detail/composite_info.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_DETAIL_COMPOSITE_INFO_HPP
-#define PHOENIX_CORE_DETAIL_COMPOSITE_INFO_HPP
-
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/greater.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/spirit/home/fusion/algorithm/fold.hpp>
-
-namespace boost { namespace phoenix { namespace detail
-{
- struct max_nesting
- {
- template <typename T, typename State>
- struct result :
- mpl::if_<
- mpl::greater<typename T::nesting, State>
- , typename T::nesting
- , State
- >
- {};
- };
-
- template <typename ActorTuple>
- struct compute_nesting
- {
- typedef typename
- fusion::meta::fold<ActorTuple, mpl::int_<0>, max_nesting>::type
- type;
- };
-
-}}}
-
-#endif
-
diff --git a/3party/boost/boost/spirit/home/phoenix/core/detail/function_eval.hpp b/3party/boost/boost/spirit/home/phoenix/core/detail/function_eval.hpp
deleted file mode 100644
index 711b32c4b1..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/detail/function_eval.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING)
-#if !defined(PHOENIX_CORE_DETAIL_FUNCTION_EVAL_HPP)
-#define PHOENIX_CORE_DETAIL_FUNCTION_EVAL_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/enum.hpp>
-#include <boost/preprocessor/repeat.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/find.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-// we assume that mpl::vectorN, where N = PHOENIX_COMPOSITE_LIMIT
-// is included already.
-
-namespace boost { namespace phoenix { namespace detail
-{
- template <int N>
- struct function_eval;
-
- template <>
- struct function_eval<0>
- {
- template <typename Env, typename F>
- struct result
- {
- typedef typename
- remove_reference<
- typename F::template result<Env>::type
- >::type
- fn;
- typedef typename fn::result_type type;
- };
-
- template <typename RT, typename Env, typename F>
- static RT
- eval(Env const& env, F const& f)
- {
- return f.eval(env)();
- }
- };
-
- template <typename T>
- T& help_rvalue_deduction(T& x)
- {
- return x;
- }
-
- template <typename T>
- T const& help_rvalue_deduction(T const& x)
- {
- return x;
- }
-
-// When we call f(_0, _1...) we remove the reference when deducing f's
-// return type. $$$ Explain why $$$
-
-#define PHOENIX_GET_ARG(z, n, data) \
- typedef typename \
- remove_reference< \
- typename BOOST_PP_CAT(A, n)::template result<Env>::type \
- >::type \
- BOOST_PP_CAT(a, n);
-
-#define PHOENIX_EVAL_ARG(z, n, data) \
- help_rvalue_deduction(BOOST_PP_CAT(_, n).eval(env))
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT), \
- "boost/spirit/home/phoenix/core/detail/function_eval.hpp"))
-#include BOOST_PP_ITERATE()
-
-}}} // namespace boost::phoenix::detail
-
-#undef PHOENIX_GET_ARG
-#undef PHOENIX_EVAL_ARG
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <>
- struct function_eval<N>
- {
- template <typename Env, typename F
- , BOOST_PP_ENUM_PARAMS(N, typename A)>
- struct result
- {
- typedef typename
- remove_reference<
- typename F::template result<Env>::type
- >::type
- fn;
- BOOST_PP_REPEAT(N, PHOENIX_GET_ARG, _)
-
- typedef BOOST_PP_CAT(mpl::vector, N)
- <BOOST_PP_ENUM_PARAMS(N, a)>
- args;
-
- typedef typename
- fn::template result<BOOST_PP_ENUM_PARAMS(N, a)>
- function_apply;
-
- typedef typename
- mpl::eval_if<
- is_same<
- typename mpl::find<args, fusion::void_>::type
- , typename mpl::end<args>::type>
- , function_apply
- , mpl::identity<fusion::void_>
- >::type
- type;
- };
-
- template <typename RT, typename Env, typename F
- , BOOST_PP_ENUM_PARAMS(N, typename A)>
- static RT
- eval(Env const& env, F const& f
- , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _))
- {
- return f.eval(env)(BOOST_PP_ENUM(N, PHOENIX_EVAL_ARG, _));
- }
- };
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/core/is_actor.hpp b/3party/boost/boost/spirit/home/phoenix/core/is_actor.hpp
deleted file mode 100644
index ba0e77cbfc..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/is_actor.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_IS_ACTOR_HPP
-#define PHOENIX_CORE_IS_ACTOR_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/mpl/bool.hpp>
-
-namespace boost { namespace phoenix
-{
-///////////////////////////////////////////////////////////////////////////////
-//
-// is_actor<T>
-//
-// Tests if T is an actor. Evaluates to mpl::true_ or mpl::false_
-//
-///////////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct is_actor : mpl::false_ {};
-
- template <typename Base>
- struct is_actor<actor<Base> > : mpl::true_ {};
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/limits.hpp b/3party/boost/boost/spirit/home/phoenix/core/limits.hpp
deleted file mode 100644
index 50c7573246..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/limits.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_LIMITS_HPP
-#define PHOENIX_CORE_LIMITS_HPP
-
-#include <boost/preprocessor/dec.hpp>
-
-#if !defined(PHOENIX_LIMIT)
-# define PHOENIX_LIMIT 10
-#elif (PHOENIX_LIMIT < 5)
-# error "PHOENIX_LIMIT is set too low"
-#endif
-
-#if !defined(PHOENIX_ARG_LIMIT)
-# define PHOENIX_ARG_LIMIT PHOENIX_LIMIT
-#elif (PHOENIX_ARG_LIMIT < 5)
-# error "PHOENIX_ARG_LIMIT is set too low"
-#endif
-
-#if !defined(PHOENIX_ACTOR_LIMIT)
-# define PHOENIX_ACTOR_LIMIT PHOENIX_LIMIT
-#elif (PHOENIX_ACTOR_LIMIT > PHOENIX_ARG_LIMIT)
-# error "PHOENIX_ACTOR_LIMIT > PHOENIX_ARG_LIMIT"
-#elif (PHOENIX_ACTOR_LIMIT < 3)
-# error "PHOENIX_ACTOR_LIMIT is set too low"
-#endif
-
-#if !defined(PHOENIX_COMPOSITE_LIMIT)
-# define PHOENIX_COMPOSITE_LIMIT PHOENIX_LIMIT
-#elif (PHOENIX_COMPOSITE_LIMIT < 5)
-# error "PHOENIX_COMPOSITE_LIMIT is set too low"
-#endif
-
-#if !defined(PHOENIX_MEMBER_LIMIT)
-# define PHOENIX_MEMBER_LIMIT BOOST_PP_DEC(BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT))
-#elif (PHOENIX_MEMBER_LIMIT > PHOENIX_COMPOSITE_LIMIT)
-# error "PHOENIX_MEMBER_LIMIT > PHOENIX_COMPOSITE_LIMIT"
-#elif (PHOENIX_MEMBER_LIMIT < 3)
-# error "PHOENIX_MEMBER_LIMIT is set too low"
-#endif
-
-#if !defined(PHOENIX_CATCH_LIMIT)
-# define PHOENIX_CATCH_LIMIT BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT)
-#elif (PHOENIX_CATCH_LIMIT < 1)
-# error "PHOENIX_CATCH_LIMIT is set too low"
-#endif
-
-#if !defined(PHOENIX_DYNAMIC_LIMIT)
-# define PHOENIX_DYNAMIC_LIMIT PHOENIX_LIMIT
-#elif (PHOENIX_DYNAMIC_LIMIT < 1)
-# error "PHOENIX_DYNAMIC_LIMIT is set too low"
-#endif
-
-#if !defined(PHOENIX_LOCAL_LIMIT)
-# define PHOENIX_LOCAL_LIMIT PHOENIX_LIMIT
-#elif (PHOENIX_LOCAL_LIMIT < 3)
-# error "PHOENIX_LOCAL_LIMIT is set too low"
-#endif
-
-
-#if !defined(FUSION_MAX_VECTOR_SIZE)
-# define FUSION_MAX_VECTOR_SIZE PHOENIX_LIMIT
-#elif (FUSION_MAX_VECTOR_SIZE < PHOENIX_LIMIT)
-# error "FUSION_MAX_VECTOR_SIZE < PHOENIX_LIMIT"
-#endif
-
-// this include will bring in mpl::vectorN and
-// fusion::vectorN where N is PHOENIX_LIMIT
-#include <boost/fusion/include/vector.hpp>
-
-// for some reason, this must be included now to make
-// detail/type_deduction.hpp compile. $$$ TODO: Investigate further $$$
-#include <boost/mpl/vector/vector20.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/nothing.hpp b/3party/boost/boost/spirit/home/phoenix/core/nothing.hpp
deleted file mode 100644
index 029fbbfdf9..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/nothing.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_NOTHING_HPP
-#define PHOENIX_CORE_NOTHING_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/mpl/bool.hpp>
-
-namespace boost { namespace phoenix
-{
-///////////////////////////////////////////////////////////////////////////////
-//
-// null_actor
-//
-// A actor that does nothing (a "bum", if you will :-).
-//
-///////////////////////////////////////////////////////////////////////////////
- struct null_actor
- {
- typedef mpl::false_ no_nullary;
-
- template <typename Env>
- struct result
- {
- typedef void type;
- };
-
- template <typename Env>
- void
- eval(Env const&) const
- {
- }
- };
-
- actor<null_actor> const nothing = null_actor();
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/reference.hpp b/3party/boost/boost/spirit/home/phoenix/core/reference.hpp
deleted file mode 100644
index 2e1f588cbc..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/reference.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_REFERENCE_HPP
-#define PHOENIX_CORE_REFERENCE_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/is_reference.hpp>
-#include <boost/mpl/bool.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename T>
- struct reference
- {
- // $$$ TODO: a better (user friendly) static assert
- BOOST_STATIC_ASSERT(
- mpl::not_<is_reference<T> >::value != 0);
-
- typedef mpl::false_ no_nullary;
-
- template <typename Env>
- struct result
- {
- typedef T& type;
- };
-
- reference(T& arg)
- : ref(arg) {}
-
- template <typename Env>
- T& eval(Env const&) const
- {
- return ref;
- }
-
- T& ref;
-
- private:
- // silence MSVC warning C4512: assignment operator could not be generated
- reference& operator= (reference const&);
- };
-
- template <typename T>
- inline actor<reference<T> > const
- ref(T& v)
- {
- return reference<T>(v);
- }
-
- template <typename T>
- inline actor<reference<T const> > const
- cref(T const& v)
- {
- return reference<T const>(v);
- }
-
- namespace detail
- {
- struct error_attempting_to_convert_an_actor_to_a_reference {};
- }
-
- template <typename Base>
- void
- ref(actor<Base> const& v
- , detail::error_attempting_to_convert_an_actor_to_a_reference
- = detail::error_attempting_to_convert_an_actor_to_a_reference());
-
- template <typename Base>
- void
- cref(actor<Base> const& v
- , detail::error_attempting_to_convert_an_actor_to_a_reference
- = detail::error_attempting_to_convert_an_actor_to_a_reference());
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/core/value.hpp b/3party/boost/boost/spirit/home/phoenix/core/value.hpp
deleted file mode 100644
index a275a7d221..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/core/value.hpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_CORE_VALUE_HPP
-#define PHOENIX_CORE_VALUE_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/spirit/home/phoenix/core/as_actor.hpp>
-#include <boost/static_assert.hpp>
-
-#include <boost/type_traits/is_reference.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/remove_pointer.hpp>
-#include <boost/type_traits/is_function.hpp>
-
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/identity.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace meta
- {
- template<typename T>
- struct const_ref
- : add_reference<typename add_const<T>::type>
- {};
-
- template<typename T>
- struct argument_type
- : mpl::eval_if<
- is_function<typename remove_pointer<T>::type>,
- mpl::identity<T>,
- const_ref<T> >
- {
- typedef T type;
- };
- }
-
- template <typename T>
- struct value
- {
- BOOST_STATIC_ASSERT(
- mpl::not_<is_reference<T> >::value != 0);
-
- typedef mpl::false_ no_nullary;
-
- template <typename Env>
- struct result
- {
- typedef T type;
- };
-
- value()
- : val() {}
-
- value(T const& arg)
- : val(arg) {}
-
- template <typename Env>
- T const&
- eval(Env const&) const
- {
- return val;
- }
-
- T val;
- };
-
- template <typename Actor>
- struct actor_value
- {
- typedef typename Actor::no_nullary no_nullary;
-
- template <typename Env>
- struct result
- {
- typedef typename
- remove_reference<
- typename eval_result<Actor, Env>::type
- >::type
- type;
- };
-
- actor_value(Actor const& actor)
- : actor(actor) {}
-
- template <typename Env>
- typename result<Env>::type
- eval(Env const& env) const
- {
- return actor.eval(env);
- }
-
- Actor actor;
- };
-
- template <typename T>
- inline typename as_actor<T>::type
- val(T const& v)
- {
- return as_actor<T>::convert(v);
- }
-
- template <typename Derived>
- inline actor<actor_value<Derived> >
- val(actor<Derived> const& actor)
- {
- return actor_value<Derived>(actor);
- }
-
- template <typename T>
- struct as_actor_base
- {
- typedef value<T> type;
-
- static value<T>
- convert(typename meta::argument_type<T>::type x)
- {
- return value<T>(x);
- }
- };
-
- // Sometimes it is necessary to auto-convert references to
- // a value<T>. This happens when we are re-currying. This
- // cannot happen through the standard public actor interfaces.
- template <typename T>
- struct as_actor_base<T&>
- {
- typedef value<T> type;
-
- static value<T>
- convert(T& x)
- {
- return value<T>(x);
- }
- };
-
- template <typename T, int N>
- struct as_actor_base<T[N]>
- {
- typedef value<T const*> type;
-
- static value<T const*>
- convert(T const x[N])
- {
- return value<T const*>(x);
- }
- };
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/detail/local_reference.hpp b/3party/boost/boost/spirit/home/phoenix/detail/local_reference.hpp
deleted file mode 100644
index ad1fdb4ab8..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/detail/local_reference.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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 PHOENIX_DETAIL_LOCAL_REFERENCE_HPP
-#define PHOENIX_DETAIL_LOCAL_REFERENCE_HPP
-
-#include <boost/utility/addressof.hpp>
-
-namespace boost { namespace phoenix { namespace detail
-{
- template <typename T>
- struct local_reference
- {
- typedef T type;
-
- explicit local_reference(T& t): t_(boost::addressof(t)) {}
- operator T& () const { return *t_; }
- local_reference& operator=(T const& x) { *t_ = x; return *this; }
- local_reference const& operator=(T const& x) const { *t_ = x; return *this; }
- T& get() const { return *t_; }
- T* get_pointer() const { return t_; }
-
- private:
-
- T* t_;
- };
-
- template <typename T>
- struct unwrap_local_reference
- {
- typedef T type; // T should be a reference
- };
-
- template <typename T>
- struct unwrap_local_reference<local_reference<T> >
- {
- typedef T type; // unwrap the reference; T is a value
- };
-}}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/detail/type_deduction.hpp b/3party/boost/boost/spirit/home/phoenix/detail/type_deduction.hpp
deleted file mode 100644
index b99ea1e86c..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/detail/type_deduction.hpp
+++ /dev/null
@@ -1,497 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_DETAIL_TYPE_DEDUCTION_HPP
-#define PHOENIX_DETAIL_TYPE_DEDUCTION_HPP
-
-/*=============================================================================
-
- Return Type Deduction
- [JDG Sept. 15, 2003]
-
- Before C++ adopts the typeof, there is currently no way to deduce the
- result type of an expression such as x + y. This deficiency is a major
- problem with template metaprogramming; for example, when writing
- forwarding functions that attempt to capture the essence of an
- expression inside a function. Consider the std::plus<T>:
-
- template <typename T>
- struct plus : public binary_function<T, T, T>
- {
- T operator()(T const& x, T const& y) const
- {
- return x + y;
- }
- };
-
- What's wrong with this? Well, this functor does not accurately capture
- the behavior of the plus operator. 1) It does not handle the case where
- x and y are of different types (e.g. x is short and y is int). 2) It
- assumes that the arguments and return type are the same (i.e. when
- adding a short and an int, the return type ought to be an int). Due to
- these shortcomings, std::plus<T>(x, y) is a poor substitute for x + y.
-
- The case where x is short and y is int does not really expose the
- problem. We can simply use std::plus<int> and be happy that the
- operands x and y will simply be converted to an int. The problem
- becomes evident when an operand is a user defined type such as bigint.
- Here, the conversion to bigint is simply not acceptable. Even if the
- unnecessary conversion is tolerable, in generic code, it is not always
- possible to choose the right T type that can accomodate both x and y
- operands.
-
- To truly model the plus operator, what we need is a polymorphic functor
- that can take arbitrary x and y operands. Here's a rough schematic:
-
- struct plus
- {
- template <typename X, typename Y>
- unspecified-type
- operator()(X const& x, Y const& y) const
- {
- return x + y;
- }
- };
-
- Now, we can handle the case where X and Y are arbitrary types. We've
- solved the first problem. To solve the second problem, we need some
- form of return type deduction mechanism. If we had the typeof, it would
- be something like:
-
- template <typename X, typename Y>
- typeof(X() + Y())
- operator()(X const& x, Y const& y) const
- {
- return x + y;
- }
-
- Without the typeof facility, it is only possible to wrap an expression
- such as x + y in a function or functor if we are given a hint that
- tells us what the actual result type of such an expression is. Such a
- hint can be in the form of a metaprogram, that, given the types of the
- arguments, will return the result type. Example:
-
- template <typename X, typename Y>
- struct result_of_plus
- {
- typedef unspecified-type type;
- };
-
- Given a result_of_plus metaprogram, we can complete our polymorphic
- plus functor:
-
- struct plus
- {
- template <typename X, typename Y>
- typename result_of_plus<X, Y>::type
- operator()(X const& x, Y const& y) const
- {
- return x + y;
- }
- };
-
- The process is not automatic. We have to specialize the metaprogram for
- specific argument types. Examples:
-
- template <>
- struct result_of_plus<short, int>
- {
- typedef int type;
- };
-
- template <typename T>
- struct result_of_plus<std::complex<T>, std::complex<T> >
- {
- typedef std::complex<T> type;
- };
-
- To make it easier for the user, specializations are provided for common
- types such as primitive c++ types (e.g. int, char, double, etc.), and
- standard types (e.g. std::complex, iostream, std containers and
- iterators).
-
- To further improve the ease of use, for user defined classes, we can
- supply a few more basic specializations through metaprogramming using
- heuristics based on canonical operator rules (Such heuristics can be
- found in the LL and Phoenix, for example). For example, it is rather
- common that the result of x += y is X& or the result of x || y is a
- bool. The client is out of luck if her classes do not follow the
- canonical rules. She'll then have to supply her own specialization.
-
- The type deduction mechanism demostrated below approaches the problem
- not through specialization and heuristics, but through a limited form
- of typeof mechanism. The code does not use heuristics, hence, no
- guessing games. The code takes advantage of the fact that, in general,
- the result type of an expression is related to one its arguments' type.
- For example, x + y, where x has type int and y has type double, has the
- result type double (the second operand type). Another example, x[y]
- where x is a vector<T> and y is a std::size_t, has the result type
- vector<T>::reference (the vector<T>'s reference type type).
-
- The limited form of type deduction presented can detect common
- relations if the result of a binary or unary operation, given arguments
- x and y with types X and Y (respectively), is X, Y, X&, Y&, X*, Y*, X
- const*, Y const*, bool, int, unsigned, double, container and iterator
- elements (e.g the T, where X is: T[N], T*, vector<T>, map<T>,
- vector<T>::iterator). More arguments/return type relationships can be
- established if needed.
-
- A set of overloaded test(T) functions capture these argument related
- types. Each test(T) function returns a distinct type that can be used
- to determine the exact type of an expression.
-
- Consider:
-
- template <typename X, typename Y>
- x_value_type
- test(X const&);
-
- template <typename X, typename Y>
- y_value_type
- test(Y const&);
-
- Given an expression x + y, where x is int and y is double, the call to:
-
- test<int, double>(x + y)
-
- will return a y_value_type.
-
- Now, if we rig x_value_type and y_value_type such that both have unique
- sizes, we can use sizeof(test<X, Y>(x + y)) to determine if the result
- type is either X or Y.
-
- For example, if:
-
- sizeof(test<X, Y>(x + y)) == sizeof(y_value_type)
-
- then, we know for sure that the result of x + y has type Y.
-
- The same basic scheme can be used to detect more argument-dependent
- return types where the sizeof the test(T) return type is used to index
- through a boost::mpl vector which holds each of the corresponding
- result types.
-
-==============================================================================*/
-#include <boost/mpl/vector/vector20.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/not.hpp>
-#include <boost/mpl/or.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/is_reference.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/is_array.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/utility/enable_if.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/spirit/home/phoenix/detail/local_reference.hpp>
-
-namespace boost
-{
- struct error_cant_deduce_type {};
-}
-
-namespace boost { namespace type_deduction_detail
-{
- typedef char(&bool_value_type)[1];
- typedef char(&int_value_type)[2];
- typedef char(&uint_value_type)[3];
- typedef char(&double_value_type)[4];
-
- typedef char(&bool_reference_type)[5];
- typedef char(&int_reference_type)[6];
- typedef char(&uint_reference_type)[7];
- typedef char(&double_reference_type)[8];
-
- typedef char(&x_value_type)[9];
- typedef char(&x_reference_type)[10];
- typedef char(&x_const_pointer_type)[11];
- typedef char(&x_pointer_type)[12];
-
- typedef char(&y_value_type)[13];
- typedef char(&y_reference_type)[14];
- typedef char(&y_const_pointer_type)[15];
- typedef char(&y_pointer_type)[16];
-
- typedef char(&container_reference_type)[17];
- typedef char(&container_const_reference_type)[18];
- typedef char(&container_mapped_type)[19];
-
- typedef char(&cant_deduce_type)[20];
-
- template <typename T, typename Plain = typename remove_cv<T>::type>
- struct is_basic
- : mpl::or_<
- is_same<Plain, bool>
- , is_same<Plain, int>
- , is_same<Plain, unsigned>
- , is_same<Plain, double>
- > {};
-
- template <typename C>
- struct reference_type
- {
- typedef typename C::reference type;
- };
-
- template <typename T>
- struct reference_type<T const>
- : reference_type<T> {};
-
- template <typename T, std::size_t N>
- struct reference_type<T[N]>
- {
- typedef T& type;
- };
-
- template <typename T>
- struct reference_type<T*>
- {
- typedef T& type;
- };
-
- template <typename T>
- struct reference_type<T* const>
- {
- typedef T const& type;
- };
-
- template <typename C>
- struct const_reference_type
- {
- typedef typename C::const_reference type;
- };
-
- template <typename C>
- struct mapped_type
- {
- typedef typename C::mapped_type type;
- };
-
- struct asymmetric;
-
- template <typename X, typename Y>
- cant_deduce_type
- test(...); // The black hole !!!
-
- template <typename X, typename Y>
- bool_value_type
- test(bool const&);
-
- template <typename X, typename Y>
- int_value_type
- test(int const&);
-
- template <typename X, typename Y>
- uint_value_type
- test(unsigned const&);
-
- template <typename X, typename Y>
- double_value_type
- test(double const&);
-
- template <typename X, typename Y>
- bool_reference_type
- test(bool&);
-
- template <typename X, typename Y>
- int_reference_type
- test(int&);
-
- template <typename X, typename Y>
- uint_reference_type
- test(unsigned&);
-
- template <typename X, typename Y>
- double_reference_type
- test(double&);
-
- template <typename X, typename Y>
- typename disable_if<
- mpl::or_<is_basic<X>, is_const<X> >
- , x_value_type
- >::type
- test(X const&);
-
- template <typename X, typename Y>
- typename disable_if<
- is_basic<X>
- , x_reference_type
- >::type
- test(X&);
-
- template <typename X, typename Y>
- typename disable_if<
- mpl::or_<
- is_basic<X>
- , is_const<X>
- >
- , x_const_pointer_type
- >::type
- test(X const*);
-
- template <typename X, typename Y>
- x_pointer_type
- test(X*);
-
- template <typename X, typename Y>
- typename disable_if<
- mpl::or_<
- is_basic<Y>
- , is_same<Y, asymmetric>
- , is_const<Y>
- , is_same<X, Y>
- >
- , y_value_type
- >::type
- test(Y const&);
-
- template <typename X, typename Y>
- typename disable_if<
- mpl::or_<
- is_basic<Y>
- , is_same<Y, asymmetric>
- , is_same<X, Y>
- >
- , y_reference_type
- >::type
- test(Y&);
-
- template <typename X, typename Y>
- typename disable_if<
- mpl::or_<
- is_same<Y, asymmetric>
- , is_const<Y>
- , is_same<X, Y>
- >
- , y_const_pointer_type
- >::type
- test(Y const*);
-
- template <typename X, typename Y>
- typename disable_if<
- mpl::or_<
- is_same<Y, asymmetric>
- , is_same<X, Y>
- >
- , y_pointer_type
- >::type
- test(Y*);
-
- template <typename X, typename Y>
- typename disable_if<
- mpl::or_<
- is_basic<typename X::value_type>
- , is_same<typename add_reference<X>::type, typename X::reference>
- >
- , container_reference_type
- >::type
- test(typename X::reference);
-
- template <typename X, typename Y, typename Z>
- typename enable_if<
- mpl::and_<
- mpl::or_<is_array<X>, is_pointer<X> >
- , mpl::not_<is_basic<Z> >
- , mpl::not_<is_same<X, Z> >
- >
- , container_reference_type
- >::type
- test(Z&);
-
- template <typename X, typename Y>
- typename disable_if<
- mpl::or_<
- is_basic<typename X::value_type>
- , is_same<typename add_reference<X>::type, typename X::const_reference>
- >
- , container_const_reference_type
- >::type
- test(typename X::const_reference);
-
- template <typename X, typename Y>
- typename disable_if<
- is_basic<typename X::mapped_type>
- , container_mapped_type
- >::type
- test(typename X::mapped_type);
-
- template <typename X, typename Y>
- struct base_result_of
- {
- typedef typename phoenix::detail::unwrap_local_reference<X>::type x_type_;
- typedef typename phoenix::detail::unwrap_local_reference<Y>::type y_type_;
- typedef typename remove_reference<x_type_>::type x_type;
- typedef typename remove_reference<y_type_>::type y_type;
-
- typedef mpl::vector20<
- mpl::identity<bool>
- , mpl::identity<int>
- , mpl::identity<unsigned>
- , mpl::identity<double>
- , mpl::identity<bool&>
- , mpl::identity<int&>
- , mpl::identity<unsigned&>
- , mpl::identity<double&>
- , mpl::identity<x_type>
- , mpl::identity<x_type&>
- , mpl::identity<x_type const*>
- , mpl::identity<x_type*>
- , mpl::identity<y_type>
- , mpl::identity<y_type&>
- , mpl::identity<y_type const*>
- , mpl::identity<y_type*>
- , reference_type<x_type>
- , const_reference_type<x_type>
- , mapped_type<x_type>
- , mpl::identity<error_cant_deduce_type>
- >
- types;
- };
-
-}} // namespace boost::type_deduction_detail
-
-#define BOOST_RESULT_OF_COMMON(expr, name, Y, SYMMETRY) \
- struct name \
- { \
- typedef type_deduction_detail::base_result_of<X, Y> base_type; \
- static typename base_type::x_type x; \
- static typename base_type::y_type y; \
- \
- BOOST_STATIC_CONSTANT(int, \
- size = sizeof( \
- type_deduction_detail::test< \
- typename base_type::x_type \
- , SYMMETRY \
- >(expr) \
- )); \
- \
- BOOST_STATIC_CONSTANT(int, index = (size / sizeof(char)) - 1); \
- \
- typedef typename mpl::at_c< \
- typename base_type::types, index>::type id; \
- typedef typename id::type type; \
- };
-
-#define BOOST_UNARY_RESULT_OF(expr, name) \
- template <typename X> \
- BOOST_RESULT_OF_COMMON(expr, name, \
- type_deduction_detail::asymmetric, type_deduction_detail::asymmetric)
-
-#define BOOST_BINARY_RESULT_OF(expr, name) \
- template <typename X, typename Y> \
- BOOST_RESULT_OF_COMMON(expr, name, Y, typename base_type::y_type)
-
-#define BOOST_ASYMMETRIC_BINARY_RESULT_OF(expr, name) \
- template <typename X, typename Y> \
- BOOST_RESULT_OF_COMMON(expr, name, Y, type_deduction_detail::asymmetric)
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/function.hpp b/3party/boost/boost/spirit/home/phoenix/function.hpp
deleted file mode 100644
index 5309d9af3f..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/function.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_FUNCTION_HPP
-#define PHOENIX_FUNCTION_HPP
-
-#include <boost/spirit/home/phoenix/version.hpp>
-#include <boost/spirit/home/phoenix/function/function.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/function/detail/function_call.hpp b/3party/boost/boost/spirit/home/phoenix/function/detail/function_call.hpp
deleted file mode 100644
index 622f118a19..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/function/detail/function_call.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_FUNCTION_DETAIL_FUNCTION_CALL_HPP
-#define PHOENIX_FUNCTION_DETAIL_FUNCTION_CALL_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT), \
- "boost/spirit/home/phoenix/function/detail/function_call.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <BOOST_PP_ENUM_PARAMS(N, typename A)>
- actor<typename as_composite<detail::function_eval<N>, F
- , BOOST_PP_ENUM_PARAMS(N, A)>::type>
- operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _)) const
- {
- return compose<detail::function_eval<N> >(f, BOOST_PP_ENUM_PARAMS(N, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/function/function.hpp b/3party/boost/boost/spirit/home/phoenix/function/function.hpp
deleted file mode 100644
index 1cf470111b..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/function/function.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_FUNCTION_FUNCTION_HPP
-#define PHOENIX_FUNCTION_FUNCTION_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename F>
- struct function
- {
- function() : f() {}
- function(F const& f) : f(f) {}
-
- actor<typename as_composite<detail::function_eval<0>, F>::type>
- operator()() const
- {
- return compose<detail::function_eval<0> >(f);
- }
-
- template <typename A0>
- actor<typename as_composite<detail::function_eval<1>, F, A0>::type>
- operator()(A0 const& _0) const
- {
- return compose<detail::function_eval<1> >(f, _0);
- }
-
- template <typename A0, typename A1>
- actor<typename as_composite<detail::function_eval<2>, F, A0, A1>::type>
- operator()(A0 const& _0, A1 const& _1) const
- {
- return compose<detail::function_eval<2> >(f, _0, _1);
- }
-
- // Bring in the rest of the function call operators
- #include <boost/spirit/home/phoenix/function/detail/function_call.hpp>
-
- F f;
- };
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/fusion.hpp b/3party/boost/boost/spirit/home/phoenix/fusion.hpp
deleted file mode 100644
index 2d0d699672..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/fusion.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-/*=============================================================================
- Copyright (c) 2007 Joel de Guzman
-
- 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 PHOENIX_FUSION_HPP
-#define PHOENIX_FUSION_HPP
-
-#include <boost/spirit/home/phoenix/fusion/at.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/fusion/at.hpp b/3party/boost/boost/spirit/home/phoenix/fusion/at.hpp
deleted file mode 100644
index 579658d195..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/fusion/at.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2008 Hartmut Kaiser
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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 PHOENIX_SEQUENCE_AT_HPP
-#define PHOENIX_SEQUENCE_AT_HPP
-
-#include <boost/fusion/include/at.hpp>
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-namespace boost { namespace phoenix
-{
- template <int N>
- struct at_eval
- {
- template <typename Env, typename Tuple>
- struct result
- {
- typedef typename Tuple::template result<Env>::type tuple;
- typedef typename
- fusion::result_of::at_c<
- typename remove_reference<tuple>::type, N
- >::type
- type;
- };
-
- template <typename RT, typename Env, typename Tuple>
- static RT
- eval(Env const& env, Tuple const& t)
- {
- return fusion::at_c<N>(t.eval(env));
- }
- };
-
- template <int N, typename Tuple>
- inline actor<typename as_composite<at_eval<N>, Tuple>::type>
- at_c(Tuple const& tup)
- {
- return compose<at_eval<N> >(tup);
- }
-
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/object.hpp b/3party/boost/boost/spirit/home/phoenix/object.hpp
deleted file mode 100644
index 5eecb96f9f..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OBJECT_HPP
-#define PHOENIX_OBJECT_HPP
-
-#include <boost/spirit/home/phoenix/version.hpp>
-#include <boost/spirit/home/phoenix/object/new.hpp>
-#include <boost/spirit/home/phoenix/object/construct.hpp>
-#include <boost/spirit/home/phoenix/object/delete.hpp>
-#include <boost/spirit/home/phoenix/object/static_cast.hpp>
-#include <boost/spirit/home/phoenix/object/const_cast.hpp>
-#include <boost/spirit/home/phoenix/object/dynamic_cast.hpp>
-#include <boost/spirit/home/phoenix/object/reinterpret_cast.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/object/const_cast.hpp b/3party/boost/boost/spirit/home/phoenix/object/const_cast.hpp
deleted file mode 100644
index 77f24999c0..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/const_cast.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OBJECT_CONST_CAST_HPP
-#define PHOENIX_OBJECT_CONST_CAST_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace impl
- {
- template <typename T>
- struct const_cast_eval
- {
- template <typename Env, typename U>
- struct result
- {
- typedef T type;
- };
-
- template <typename RT, typename Env, typename U>
- static RT
- eval(Env const& env, U& obj)
- {
- return const_cast<RT>(obj.eval(env));
- }
- };
- }
-
- template <typename T, typename U>
- inline actor<typename as_composite<impl::const_cast_eval<T>, U>::type>
- const_cast_(U const& obj)
- {
- return compose<impl::const_cast_eval<T> >(obj);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/object/construct.hpp b/3party/boost/boost/spirit/home/phoenix/object/construct.hpp
deleted file mode 100644
index d26d6a4fce..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/construct.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OBJECT_CONSTRUCT_HPP
-#define PHOENIX_OBJECT_CONSTRUCT_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace detail
- {
- template <typename T>
- struct construct_eval
- {
- template <typename Env,
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- PHOENIX_COMPOSITE_LIMIT, typename T, fusion::void_)>
- struct result
- {
- typedef T type;
- };
-
- template <typename RT, typename Env>
- static RT
- eval(Env const& env)
- {
- return RT();
- }
-
- template <typename RT, typename Env, typename A0>
- static RT
- eval(Env const& env, A0& _0)
- {
- return RT(_0.eval(env));
- }
-
- template <typename RT
- , typename Env, typename A0, typename A1>
- static RT
- eval(Env const& env, A0& _0, A1& _1)
- {
- return RT(_0.eval(env), _1.eval(env));
- }
-
- // Bring in the rest of the evals
- #include <boost/spirit/home/phoenix/object/detail/construct_eval.hpp>
- };
- }
-
- template <typename T>
- inline actor<typename as_composite<detail::construct_eval<T> >::type>
- construct()
- {
- return compose<detail::construct_eval<T> >();
- }
-
- template <typename T, typename A0>
- inline actor<typename as_composite<detail::construct_eval<T>, A0>::type>
- construct(A0 const& _0)
- {
- return compose<detail::construct_eval<T> >(_0);
- }
-
- template <typename T, typename A0, typename A1>
- inline actor<typename as_composite<detail::construct_eval<T>, A0, A1>::type>
- construct(A0 const& _0, A1 const& _1)
- {
- return compose<detail::construct_eval<T> >(_0, _1);
- }
-
- // Bring in the rest of the new_ functions
- #include <boost/spirit/home/phoenix/object/detail/construct.hpp>
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/object/delete.hpp b/3party/boost/boost/spirit/home/phoenix/object/delete.hpp
deleted file mode 100644
index 1b2328ca6e..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/delete.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OBJECT_DELETE_HPP
-#define PHOENIX_OBJECT_DELETE_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace impl
- {
- struct delete_eval
- {
- template <typename Env, typename P>
- struct result
- {
- typedef void type;
- };
-
- template <typename Args, typename Env, typename P>
- static void
- eval(Env const& env, P& p)
- {
- delete p.eval(env);
- }
- };
- }
-
- template <typename P>
- inline actor<typename as_composite<impl::delete_eval, P>::type>
- delete_(P const& p)
- {
- return compose<impl::delete_eval>(p);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/object/detail/construct.hpp b/3party/boost/boost/spirit/home/phoenix/object/detail/construct.hpp
deleted file mode 100644
index d474f960f3..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/detail/construct.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_OBJECT_DETAIL_CONSTRUCT_HPP
-#define PHOENIX_OBJECT_DETAIL_CONSTRUCT_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, PHOENIX_COMPOSITE_LIMIT, \
- "boost/spirit/home/phoenix/object/detail/construct.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <typename T, BOOST_PP_ENUM_PARAMS(N, typename A)>
- inline actor<typename as_composite<detail::construct_eval<T>
- , BOOST_PP_ENUM_PARAMS(N, A)>::type>
- construct(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
- {
- return compose<detail::construct_eval<T> >(BOOST_PP_ENUM_PARAMS(N, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/object/detail/construct_eval.hpp b/3party/boost/boost/spirit/home/phoenix/object/detail/construct_eval.hpp
deleted file mode 100644
index aad710f230..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/detail/construct_eval.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_OBJECT_DETAIL_CONSTRUCT_EVAL_HPP
-#define PHOENIX_OBJECT_DETAIL_CONSTRUCT_EVAL_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define PHOENIX_EVAL_ARG(z, n, data) \
- BOOST_PP_CAT(_, n).eval(env)
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, PHOENIX_COMPOSITE_LIMIT, \
- "boost/spirit/home/phoenix/object/detail/construct_eval.hpp"))
-#include BOOST_PP_ITERATE()
-
-#undef PHOENIX_EVAL_ARG
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <typename RT, typename Env, BOOST_PP_ENUM_PARAMS(N, typename A)>
- static RT
- eval(Env const& env, BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _))
- {
- return RT(BOOST_PP_ENUM(N, PHOENIX_EVAL_ARG, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/object/detail/new.hpp b/3party/boost/boost/spirit/home/phoenix/object/detail/new.hpp
deleted file mode 100644
index 7767c718db..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/detail/new.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_OBJECT_DETAIL_NEW_HPP
-#define PHOENIX_OBJECT_DETAIL_NEW_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, PHOENIX_COMPOSITE_LIMIT, \
- "boost/spirit/home/phoenix/object/detail/new.hpp"))
-#include BOOST_PP_ITERATE()
-
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <typename T, BOOST_PP_ENUM_PARAMS(N, typename A)>
- inline actor<typename as_composite<detail::new_eval<T>
- , BOOST_PP_ENUM_PARAMS(N, A)>::type>
- new_(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
- {
- return compose<detail::new_eval<T> >(BOOST_PP_ENUM_PARAMS(N, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/object/detail/new_eval.hpp b/3party/boost/boost/spirit/home/phoenix/object/detail/new_eval.hpp
deleted file mode 100644
index dbaa79191d..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/detail/new_eval.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_OBJECT_DETAIL_NEW_EVAL_HPP
-#define PHOENIX_OBJECT_DETAIL_NEW_EVAL_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define PHOENIX_EVAL_ARG(z, n, data) \
- BOOST_PP_CAT(_, n).eval(env)
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, PHOENIX_COMPOSITE_LIMIT, \
- "boost/spirit/home/phoenix/object/detail/new_eval.hpp"))
-#include BOOST_PP_ITERATE()
-
-#undef PHOENIX_EVAL_ARG
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <typename RT, typename Env, BOOST_PP_ENUM_PARAMS(N, typename A)>
- static RT
- eval(Env const& env, BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _))
- {
- return new T(BOOST_PP_ENUM(N, PHOENIX_EVAL_ARG, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/object/dynamic_cast.hpp b/3party/boost/boost/spirit/home/phoenix/object/dynamic_cast.hpp
deleted file mode 100644
index 02b7c22934..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/dynamic_cast.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OBJECT_DYNAMIC_CAST_HPP
-#define PHOENIX_OBJECT_DYNAMIC_CAST_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace impl
- {
- template <typename T>
- struct dynamic_cast_eval
- {
- template <typename Env, typename U>
- struct result
- {
- typedef T type;
- };
-
- template <typename RT, typename Env, typename U>
- static RT
- eval(Env const& env, U& obj)
- {
- return dynamic_cast<RT>(obj.eval(env));
- }
- };
- }
-
- template <typename T, typename U>
- inline actor<typename as_composite<impl::dynamic_cast_eval<T>, U>::type>
- dynamic_cast_(U const& obj)
- {
- return compose<impl::dynamic_cast_eval<T> >(obj);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/object/new.hpp b/3party/boost/boost/spirit/home/phoenix/object/new.hpp
deleted file mode 100644
index 58bb64dfc4..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/new.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OBJECT_NEW_HPP
-#define PHOENIX_OBJECT_NEW_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace detail
- {
- template <typename T>
- struct new_eval
- {
- template <typename Env,
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- PHOENIX_COMPOSITE_LIMIT, typename T, fusion::void_)>
- struct result
- {
- typedef T* type;
- };
-
- template <typename RT, typename Env>
- static RT
- eval(Env const& /*env*/)
- {
- return new T;
- }
-
- template <typename RT, typename Env, typename A0>
- static RT
- eval(Env const& env, A0& _0)
- {
- return new T(_0.eval(env));
- }
-
- template <typename RT, typename Env
- , typename A0, typename A1>
- static RT
- eval(Env const& env, A0& _0, A1& _1)
- {
- return new T(_0.eval(env), _1.eval(env));
- }
-
- // Bring in the rest of the evals
- #include <boost/spirit/home/phoenix/object/detail/new_eval.hpp>
- };
- }
-
- template <typename T>
- inline actor<typename as_composite<detail::new_eval<T> >::type>
- new_()
- {
- return compose<detail::new_eval<T> >();
- }
-
- template <typename T, typename A0>
- inline actor<typename as_composite<detail::new_eval<T>, A0>::type>
- new_(A0 const& _0)
- {
- return compose<detail::new_eval<T> >(_0);
- }
-
- template <typename T, typename A0, typename A1>
- inline actor<typename as_composite<detail::new_eval<T>, A0, A1>::type>
- new_(A0 const& _0, A1 const& _1)
- {
- return compose<detail::new_eval<T> >(_0, _1);
- }
-
- // Bring in the rest of the new_ functions
- #include <boost/spirit/home/phoenix/object/detail/new.hpp>
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/object/reinterpret_cast.hpp b/3party/boost/boost/spirit/home/phoenix/object/reinterpret_cast.hpp
deleted file mode 100644
index 9e255d820d..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/reinterpret_cast.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OBJECT_REINTERPRET_CAST_HPP
-#define PHOENIX_OBJECT_REINTERPRET_CAST_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace impl
- {
- template <typename T>
- struct reinterpret_cast_eval
- {
- template <typename Env, typename U>
- struct result
- {
- typedef T type;
- };
-
- template <typename RT, typename Env, typename U>
- static RT
- eval(Env const& env, U& obj)
- {
- return reinterpret_cast<RT>(obj.eval(env));
- }
- };
- }
-
- template <typename T, typename U>
- inline actor<typename as_composite<impl::reinterpret_cast_eval<T>, U>::type>
- reinterpret_cast_(U const& obj)
- {
- return compose<impl::reinterpret_cast_eval<T> >(obj);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/object/static_cast.hpp b/3party/boost/boost/spirit/home/phoenix/object/static_cast.hpp
deleted file mode 100644
index 508d1b077d..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/object/static_cast.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OBJECT_STATIC_CAST_HPP
-#define PHOENIX_OBJECT_STATIC_CAST_HPP
-
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix
-{
- namespace impl
- {
- template <typename T>
- struct static_cast_eval
- {
- template <typename Env, typename U>
- struct result
- {
- typedef T type;
- };
-
- template <typename RT, typename Env, typename U>
- static RT
- eval(Env const& env, U& obj)
- {
- return static_cast<RT>(obj.eval(env));
- }
- };
- }
-
- template <typename T, typename U>
- inline actor<typename as_composite<impl::static_cast_eval<T>, U>::type>
- static_cast_(U const& obj)
- {
- return compose<impl::static_cast_eval<T> >(obj);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator.hpp b/3party/boost/boost/spirit/home/phoenix/operator.hpp
deleted file mode 100644
index 2d8ee6c5cf..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_HPP
-#define PHOENIX_OPERATOR_HPP
-
-#include <boost/spirit/home/phoenix/version.hpp>
-#include <boost/spirit/home/phoenix/operator/arithmetic.hpp>
-#include <boost/spirit/home/phoenix/operator/bitwise.hpp>
-#include <boost/spirit/home/phoenix/operator/comparison.hpp>
-#include <boost/spirit/home/phoenix/operator/if_else.hpp>
-#include <boost/spirit/home/phoenix/operator/logical.hpp>
-#include <boost/spirit/home/phoenix/operator/self.hpp>
-#include <boost/spirit/home/phoenix/operator/io.hpp>
-#include <boost/spirit/home/phoenix/operator/member.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/arithmetic.hpp b/3party/boost/boost/spirit/home/phoenix/operator/arithmetic.hpp
deleted file mode 100644
index e51b23e14a..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/arithmetic.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_ARITHMETIC_HPP
-#define PHOENIX_OPERATOR_ARITHMETIC_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/detail/type_deduction.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_compose.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_compose.hpp>
-
-namespace boost { namespace phoenix
-{
- struct negate_eval;
- struct posit_eval;
- struct pre_increment_eval;
- struct pre_decrement_eval;
- struct post_increment_eval;
- struct post_decrement_eval;
-
- struct plus_assign_eval;
- struct minus_assign_eval;
- struct multiplies_assign_eval;
- struct divides_assign_eval;
- struct modulus_assign_eval;
-
- struct plus_eval;
- struct minus_eval;
- struct multiplies_eval;
- struct divides_eval;
- struct modulus_eval;
-
- BOOST_UNARY_RESULT_OF(-x, result_of_negate)
- BOOST_UNARY_RESULT_OF(+x, result_of_posit)
- BOOST_UNARY_RESULT_OF(++x, result_of_pre_increment)
- BOOST_UNARY_RESULT_OF(--x, result_of_pre_decrement)
- BOOST_UNARY_RESULT_OF(x++, result_of_post_increment)
- BOOST_UNARY_RESULT_OF(x--, result_of_post_decrement)
-
- BOOST_BINARY_RESULT_OF(x += y, result_of_plus_assign)
- BOOST_BINARY_RESULT_OF(x -= y, result_of_minus_assign)
- BOOST_BINARY_RESULT_OF(x *= y, result_of_multiplies_assign)
- BOOST_BINARY_RESULT_OF(x /= y, result_of_divides_assign)
- BOOST_BINARY_RESULT_OF(x %= y, result_of_modulus_assign)
-
- BOOST_BINARY_RESULT_OF(x + y, result_of_plus)
- BOOST_BINARY_RESULT_OF(x - y, result_of_minus)
- BOOST_BINARY_RESULT_OF(x * y, result_of_multiplies)
- BOOST_BINARY_RESULT_OF(x / y, result_of_divides)
- BOOST_BINARY_RESULT_OF(x % y, result_of_modulus)
-
-#define x a0.eval(env)
-#define y a1.eval(env)
-
- PHOENIX_UNARY_EVAL(negate_eval, result_of_negate, -x)
- PHOENIX_UNARY_EVAL(posit_eval, result_of_posit, +x)
- PHOENIX_UNARY_EVAL(pre_increment_eval, result_of_pre_increment, ++x)
- PHOENIX_UNARY_EVAL(pre_decrement_eval, result_of_pre_decrement, --x)
- PHOENIX_UNARY_EVAL(post_increment_eval, result_of_post_increment, x++)
- PHOENIX_UNARY_EVAL(post_decrement_eval, result_of_post_decrement, x--)
-
- PHOENIX_BINARY_EVAL(plus_assign_eval, result_of_plus_assign, x += y)
- PHOENIX_BINARY_EVAL(minus_assign_eval, result_of_minus_assign, x -= y)
- PHOENIX_BINARY_EVAL(multiplies_assign_eval, result_of_multiplies_assign, x *= y)
- PHOENIX_BINARY_EVAL(divides_assign_eval, result_of_divides_assign, x /= y)
- PHOENIX_BINARY_EVAL(modulus_assign_eval, result_of_modulus_assign, x %= y)
-
- PHOENIX_BINARY_EVAL(plus_eval, result_of_plus, x + y)
- PHOENIX_BINARY_EVAL(minus_eval, result_of_minus, x - y)
- PHOENIX_BINARY_EVAL(multiplies_eval, result_of_multiplies, x * y)
- PHOENIX_BINARY_EVAL(divides_eval, result_of_divides, x / y)
- PHOENIX_BINARY_EVAL(modulus_eval, result_of_modulus, x % y)
-
- PHOENIX_UNARY_COMPOSE(negate_eval, -)
- PHOENIX_UNARY_COMPOSE(posit_eval, +)
- PHOENIX_UNARY_COMPOSE(pre_increment_eval, ++)
- PHOENIX_UNARY_COMPOSE(pre_decrement_eval, --)
-
- template <typename T0>
- inline actor<typename as_composite<post_increment_eval, actor<T0> >::type>
- operator++(actor<T0> const& a0, int) // special case
- {
- return compose<post_increment_eval>(a0);
- }
-
- template <typename T0>
- inline actor<typename as_composite<post_decrement_eval, actor<T0> >::type>
- operator--(actor<T0> const& a0, int) // special case
- {
- return compose<post_decrement_eval>(a0);
- }
-
- PHOENIX_BINARY_COMPOSE(plus_assign_eval, +=)
- PHOENIX_BINARY_COMPOSE(minus_assign_eval, -=)
- PHOENIX_BINARY_COMPOSE(multiplies_assign_eval, *=)
- PHOENIX_BINARY_COMPOSE(divides_assign_eval, /=)
- PHOENIX_BINARY_COMPOSE(modulus_assign_eval, %=)
-
- PHOENIX_BINARY_COMPOSE(plus_eval, +)
- PHOENIX_BINARY_COMPOSE(minus_eval, -)
- PHOENIX_BINARY_COMPOSE(multiplies_eval, *)
- PHOENIX_BINARY_COMPOSE(divides_eval, /)
- PHOENIX_BINARY_COMPOSE(modulus_eval, %)
-
-#undef x
-#undef y
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/bitwise.hpp b/3party/boost/boost/spirit/home/phoenix/operator/bitwise.hpp
deleted file mode 100644
index 0450db46e9..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/bitwise.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_BITWISE_HPP
-#define PHOENIX_OPERATOR_BITWISE_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/detail/type_deduction.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_compose.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_compose.hpp>
-
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable : 4800)
-#endif
-
-namespace boost { namespace phoenix
-{
- struct invert_eval;
-
- struct and_assign_eval;
- struct or_assign_eval;
- struct xor_assign_eval;
- struct shift_left_assign_eval;
- struct shift_right_assign_eval;
-
- struct and_eval;
- struct or_eval;
- struct xor_eval;
- struct shift_left_eval;
- struct shift_right_eval;
-
- BOOST_UNARY_RESULT_OF(~x, result_of_invert)
-
- BOOST_BINARY_RESULT_OF(x &= y, result_of_and_assign)
- BOOST_BINARY_RESULT_OF(x |= y, result_of_or_assign)
- BOOST_BINARY_RESULT_OF(x ^= y, result_of_xor_assign)
- BOOST_BINARY_RESULT_OF(x <<= y, result_of_shift_left_assign)
- BOOST_BINARY_RESULT_OF(x >>= y, result_of_shift_right_assign)
-
- BOOST_BINARY_RESULT_OF(x & y, result_of_and)
- BOOST_BINARY_RESULT_OF(x | y, result_of_or)
- BOOST_BINARY_RESULT_OF(x ^ y, result_of_xor)
- BOOST_BINARY_RESULT_OF(x << y, result_of_shift_left)
- BOOST_BINARY_RESULT_OF(x >> y, result_of_shift_right)
-
-#define x a0.eval(env)
-#define y a1.eval(env)
-
- PHOENIX_UNARY_EVAL(invert_eval, result_of_invert, ~x)
- PHOENIX_UNARY_COMPOSE(invert_eval, ~)
-
- PHOENIX_BINARY_EVAL(and_assign_eval, result_of_and_assign, x &= y)
- PHOENIX_BINARY_EVAL(or_assign_eval, result_of_or_assign, x |= y)
- PHOENIX_BINARY_EVAL(xor_assign_eval, result_of_xor_assign, x ^= y)
- PHOENIX_BINARY_EVAL(shift_left_assign_eval, result_of_shift_left_assign, x <<= y)
- PHOENIX_BINARY_EVAL(shift_right_assign_eval, result_of_shift_right_assign, x >>= y)
-
- PHOENIX_BINARY_EVAL(and_eval, result_of_and, x & y)
- PHOENIX_BINARY_EVAL(or_eval, result_of_or, x | y)
- PHOENIX_BINARY_EVAL(xor_eval, result_of_xor, x ^ y)
- PHOENIX_BINARY_EVAL(shift_left_eval, result_of_shift_left, x << y)
- PHOENIX_BINARY_EVAL(shift_right_eval, result_of_shift_right, x >> y)
-
- PHOENIX_BINARY_COMPOSE(and_assign_eval, &=)
- PHOENIX_BINARY_COMPOSE(or_assign_eval, |=)
- PHOENIX_BINARY_COMPOSE(xor_assign_eval, ^=)
- PHOENIX_BINARY_COMPOSE(shift_left_assign_eval, <<=)
- PHOENIX_BINARY_COMPOSE(shift_right_assign_eval, >>=)
-
- PHOENIX_BINARY_COMPOSE(and_eval, &)
- PHOENIX_BINARY_COMPOSE(or_eval, |)
- PHOENIX_BINARY_COMPOSE(xor_eval, ^)
- PHOENIX_BINARY_COMPOSE(shift_left_eval, <<)
- PHOENIX_BINARY_COMPOSE(shift_right_eval, >>)
-
-#undef x
-#undef y
-}}
-
-#if defined(BOOST_MSVC)
-# pragma warning(pop)
-#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/comparison.hpp b/3party/boost/boost/spirit/home/phoenix/operator/comparison.hpp
deleted file mode 100644
index fe9298c834..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/comparison.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_COMPARISON_HPP
-#define PHOENIX_OPERATOR_COMPARISON_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/detail/type_deduction.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_compose.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_compose.hpp>
-
-namespace boost { namespace phoenix
-{
- struct equal_to_eval;
- struct not_equal_to_eval;
- struct less_eval;
- struct less_equal_eval;
- struct greater_eval;
- struct greater_equal_eval;
-
- BOOST_BINARY_RESULT_OF(x == y, result_of_equal_to)
- BOOST_BINARY_RESULT_OF(x != y, result_of_not_equal_to)
- BOOST_BINARY_RESULT_OF(x < y, result_of_less)
- BOOST_BINARY_RESULT_OF(x <= y, result_of_less_equal)
- BOOST_BINARY_RESULT_OF(x > y, result_of_greater)
- BOOST_BINARY_RESULT_OF(x >= y, result_of_greater_equal)
-
-#define x a0.eval(env)
-#define y a1.eval(env)
-
- PHOENIX_BINARY_EVAL(equal_to_eval, result_of_equal_to, x == y)
- PHOENIX_BINARY_EVAL(not_equal_to_eval, result_of_not_equal_to, x != y)
- PHOENIX_BINARY_EVAL(less_eval, result_of_less, x < y)
- PHOENIX_BINARY_EVAL(less_equal_eval, result_of_less_equal, x <= y)
- PHOENIX_BINARY_EVAL(greater_eval, result_of_greater, x > y)
- PHOENIX_BINARY_EVAL(greater_equal_eval, result_of_greater_equal, x >= y)
-
- PHOENIX_BINARY_COMPOSE(equal_to_eval, ==)
- PHOENIX_BINARY_COMPOSE(not_equal_to_eval, !=)
- PHOENIX_BINARY_COMPOSE(less_eval, <)
- PHOENIX_BINARY_COMPOSE(less_equal_eval, <=)
- PHOENIX_BINARY_COMPOSE(greater_eval, >)
- PHOENIX_BINARY_COMPOSE(greater_equal_eval, >=)
-
-#undef x
-#undef y
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/detail/binary_compose.hpp b/3party/boost/boost/spirit/home/phoenix/operator/detail/binary_compose.hpp
deleted file mode 100644
index 49335fda78..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/detail/binary_compose.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_DETAIL_BINARY_COMPOSE_HPP
-#define PHOENIX_OPERATOR_DETAIL_BINARY_COMPOSE_HPP
-
-#define PHOENIX_BINARY_COMPOSE(eval_name, op) \
- template <typename T0, typename T1> \
- inline actor<typename as_composite<eval_name, actor<T0>, actor<T1> >::type> \
- operator op (actor<T0> const& a0, actor<T1> const& a1) \
- { \
- return compose<eval_name>(a0, a1); \
- } \
- \
- template <typename T0, typename T1> \
- inline actor<typename as_composite<eval_name, actor<T0>, T1>::type> \
- operator op (actor<T0> const& a0, T1 const& a1) \
- { \
- return compose<eval_name>(a0, a1); \
- } \
- \
- template <typename T0, typename T1> \
- inline actor<typename as_composite<eval_name, T0, actor<T1> >::type> \
- operator op (T0 const& a0, actor<T1> const& a1) \
- { \
- return compose<eval_name>(a0, a1); \
- }
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/detail/binary_eval.hpp b/3party/boost/boost/spirit/home/phoenix/operator/detail/binary_eval.hpp
deleted file mode 100644
index 1789882485..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/detail/binary_eval.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_DETAIL_BINARY_EVAL_HPP
-#define PHOENIX_OPERATOR_DETAIL_BINARY_EVAL_HPP
-
-#include <boost/mpl/or.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-#define PHOENIX_BINARY_EVAL(eval_name, op_result, expr) \
- struct eval_name \
- { \
- template <typename Env, typename A0, typename A1> \
- struct result \
- { \
- typedef typename A0::template result<Env>::type x_type; \
- typedef typename A1::template result<Env>::type y_type; \
- \
- typedef typename \
- mpl::eval_if< \
- mpl::or_<is_actor<x_type>, is_actor<y_type> > \
- , re_curry<eval_name, x_type, y_type> \
- , op_result<x_type, y_type> \
- >::type \
- type; \
- }; \
- \
- template <typename RT, typename Env, typename A0, typename A1> \
- static RT \
- eval(Env const& env, A0& a0, A1& a1) \
- { \
- return expr; \
- } \
- };
-
-#undef x
-#undef y
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/detail/io.hpp b/3party/boost/boost/spirit/home/phoenix/operator/detail/io.hpp
deleted file mode 100644
index d82a153c32..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/detail/io.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_DETAIL_IO_HPP
-#define PHOENIX_OPERATOR_DETAIL_IO_HPP
-
-#include <boost/spirit/home/phoenix/operator/bitwise.hpp>
-#include <boost/spirit/home/phoenix/core/reference.hpp>
-#include <boost/utility/addressof.hpp>
-#include <boost/utility/enable_if.hpp>
-#include <iostream>
-
-namespace boost { namespace phoenix { namespace detail
-{
- typedef char(&no)[1];
- typedef char(&yes)[2];
-
- template <typename CharType, typename CharTrait>
- yes ostream_test(std::basic_ostream<CharType, CharTrait>*);
- no ostream_test(...);
-
- template <typename CharType, typename CharTrait>
- yes istream_test(std::basic_istream<CharType, CharTrait>*);
- no istream_test(...);
-
- template <typename T>
- struct is_ostream
- {
- static T x;
- BOOST_STATIC_CONSTANT(bool,
- value = sizeof(detail::ostream_test(boost::addressof(x))) == sizeof(yes));
- };
-
- template <typename T>
- struct is_istream
- {
- static T x;
- BOOST_STATIC_CONSTANT(bool,
- value = sizeof(detail::istream_test(boost::addressof(x))) == sizeof(yes));
- };
-
- template <typename T0, typename T1>
- struct enable_if_ostream :
- enable_if<
- detail::is_ostream<T0>
- , actor<
- typename as_composite<
- shift_left_eval
- , actor<reference<T0> >
- , actor<T1>
- >::type
- >
- >
- {};
-
- template <typename T0, typename T1>
- struct enable_if_istream :
- enable_if<
- detail::is_istream<T0>
- , actor<
- typename as_composite<
- shift_right_eval
- , actor<reference<T0> >
- , actor<T1>
- >::type
- >
- >
- {};
-
- typedef std::ios_base& (*iomanip_type)(std::ios_base&);
- typedef std::istream& (*imanip_type)(std::istream&);
- typedef std::ostream& (*omanip_type)(std::ostream&);
-}}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_eval.hpp b/3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_eval.hpp
deleted file mode 100644
index cb77613aea..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_eval.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_OPERATOR_DETAIL_MEM_FUN_PTR_EVAL_HPP
-#define PHOENIX_OPERATOR_DETAIL_MEM_FUN_PTR_EVAL_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/iteration/iterate.hpp>
-#include <boost/preprocessor/arithmetic/sub.hpp>
-#include <boost/preprocessor/arithmetic/dec.hpp>
-
-#include <boost/mpl/void.hpp>
-
-#include <boost/type_traits/function_traits.hpp>
-
-#include <boost/get_pointer.hpp>
-
-#include <boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_return.hpp>
-
-namespace boost { namespace phoenix {
-
- struct mem_fun_ptr_eval
- {
- template<typename Env, typename PtrActor, typename MemFunPtrActor,
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PP_SUB(PHOENIX_MEMBER_LIMIT, 2), typename Arg, mpl::void_)>
-
- struct result
- : detail::mem_fun_ptr_return<typename eval_result<MemFunPtrActor, Env>::type> { };
-
- template<typename Rt, typename Env, typename PtrActor, typename MemFunPtrActor>
- static typename result<Env,PtrActor,MemFunPtrActor>::type
- eval(const Env& env, PtrActor& ptrActor, MemFunPtrActor& memFunPtrActor)
- {
- return (get_pointer(ptrActor.eval(env))->*memFunPtrActor.eval(env))();
- }
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, BOOST_PP_DEC(BOOST_PP_DEC(PHOENIX_MEMBER_LIMIT)), "boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_eval.hpp"))
-
-#include BOOST_PP_ITERATE()
-
- };
-}}
-
-#endif
-
-#else
-
-#define PHOENIX_ITERATION BOOST_PP_ITERATION()
-
-#define PHOENIX_EVAL_ARG(z,n,_) arg ## n.eval(env)
-
- template<typename Rt, typename Env, typename PtrActor, typename MemFunPtrActor,
- BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename Arg)>
- static typename result<Env,PtrActor,MemFunPtrActor, BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION,Arg)>::type
- eval(const Env& env, PtrActor& ptrActor, MemFunPtrActor& memFunPtrActor,
- BOOST_PP_ENUM_BINARY_PARAMS(PHOENIX_ITERATION, Arg, & arg))
- {
- return (get_pointer(ptrActor.eval(env))->*memFunPtrActor.eval(env))(
- BOOST_PP_ENUM(PHOENIX_ITERATION,PHOENIX_EVAL_ARG,_));
- }
-
-#undef PHOENIX_EVAL_ARG
-#undef PHOENIX_ITERATION
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_gen.hpp b/3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_gen.hpp
deleted file mode 100644
index 31d5413035..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_gen.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_OPERATOR_DETAIL_MEM_FUN_PTR_GEN_HPP
-#define PHOENIX_OPERATOR_DETAIL_MEM_FUN_PTR_GEN_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/core/as_actor.hpp>
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/iteration/iterate.hpp>
-#include <boost/preprocessor/arithmetic/dec.hpp>
-
-#include <boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_eval.hpp>
-
-namespace boost { namespace phoenix {
- template<typename Actor, typename MemFunPtr>
- struct mem_fun_ptr_gen
- {
- mem_fun_ptr_gen(
- const Actor& actor, MemFunPtr memFunPtr)
- : mActor(actor), mMemFunPtr(memFunPtr) { }
-
- actor<typename as_composite<mem_fun_ptr_eval, Actor, typename as_actor<MemFunPtr>::type>::type>
- operator()() const
- {
- return compose<mem_fun_ptr_eval>(
- mActor, as_actor<MemFunPtr>::convert(mMemFunPtr));
- }
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, BOOST_PP_DEC(BOOST_PP_DEC(PHOENIX_MEMBER_LIMIT)), "boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_gen.hpp"))
-
-#include BOOST_PP_ITERATE()
-
- Actor mActor;
- MemFunPtr mMemFunPtr;
- };
-}}
-
-#endif
-#else
-
-#define PHOENIX_ITERATION BOOST_PP_ITERATION()
-
- template<BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename Arg)>
- actor<typename as_composite<
- mem_fun_ptr_eval, Actor, typename as_actor<MemFunPtr>::type,
- BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, Arg)>::type>
- operator()(
- BOOST_PP_ENUM_BINARY_PARAMS(PHOENIX_ITERATION, const Arg, &arg)) const
- {
- return compose<mem_fun_ptr_eval>(
- mActor, as_actor<MemFunPtr>::convert(mMemFunPtr),
- BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, arg));
- }
-
-#undef PHOENIX_ITERATION
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_return.hpp b/3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_return.hpp
deleted file mode 100644
index 102f17f021..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_return.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_OPERATOR_DETAIL_MEM_FUN_PTR_RETURN_HPP
-#define PHOENIX_OPERATOR_DETAIL_MEM_FUN_PTR_RETURN_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/iteration/iterate.hpp>
-
-namespace boost { namespace phoenix {
-namespace detail
-{
- template<typename MemFunPtr>
- struct mem_fun_ptr_return;
-
- template<typename Ret, typename Class>
- struct mem_fun_ptr_return<Ret (Class::*)()>
- {
- typedef Ret type;
- };
-
- template<typename Ret, typename Class>
- struct mem_fun_ptr_return<Ret (Class::*)() const>
- {
- typedef Ret type;
- };
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, PHOENIX_MEMBER_LIMIT, "boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_return.hpp"))
-
-#include BOOST_PP_ITERATE()
-
-}
-}}
-
-#endif
-
-#else
-
-#define PHOENIX_ITERATION BOOST_PP_ITERATION()
-
- template<typename Ret, typename Class,
- BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename T)>
- struct mem_fun_ptr_return<Ret (Class::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T))>
- {
- typedef Ret type;
- };
-
- template<typename Ret, typename Class,
- BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename T)>
- struct mem_fun_ptr_return<Ret (Class::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T)) const>
- {
- typedef Ret type;
- };
-
-#undef PHOENIX_ITERATION
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/detail/unary_compose.hpp b/3party/boost/boost/spirit/home/phoenix/operator/detail/unary_compose.hpp
deleted file mode 100644
index fd9a8c70fb..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/detail/unary_compose.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_DETAIL_UNARY_COMPOSE_HPP
-#define PHOENIX_OPERATOR_DETAIL_UNARY_COMPOSE_HPP
-
-#define PHOENIX_UNARY_COMPOSE(eval_name, op) \
- template <typename T0> \
- inline actor<typename as_composite<eval_name, actor<T0> >::type> \
- operator op (actor<T0> const& a0) \
- { \
- return compose<eval_name>(a0); \
- }
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/detail/unary_eval.hpp b/3party/boost/boost/spirit/home/phoenix/operator/detail/unary_eval.hpp
deleted file mode 100644
index 501f6df717..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/detail/unary_eval.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_DETAIL_UNARY_EVAL_HPP
-#define PHOENIX_OPERATOR_DETAIL_UNARY_EVAL_HPP
-
-#include <boost/mpl/eval_if.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-#define PHOENIX_UNARY_EVAL(eval_name, op_result, expr) \
- struct eval_name \
- { \
- template <typename Env, typename A0> \
- struct result \
- { \
- typedef typename A0::template result<Env>::type x_type; \
- \
- typedef typename \
- mpl::eval_if< \
- is_actor<x_type> \
- , re_curry<eval_name, x_type> \
- , op_result<x_type> \
- >::type \
- type; \
- }; \
- \
- template <typename RT, typename Env, typename A0> \
- static RT \
- eval(Env const& env, A0& a0) \
- { \
- return expr; \
- } \
- };
-
-#endif
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/if_else.hpp b/3party/boost/boost/spirit/home/phoenix/operator/if_else.hpp
deleted file mode 100644
index 8492e90861..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/if_else.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_IF_ELSE_HPP
-#define PHOENIX_OPERATOR_IF_ELSE_HPP
-
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/is_reference.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/detail/type_deduction.hpp>
-
-namespace boost { namespace phoenix
-{
- BOOST_BINARY_RESULT_OF(true ? x : y, result_of_if_else)
-
- struct if_else_op_eval
- {
- template <
- typename Env
- , typename Cond
- , typename Then
- , typename Else
- >
- struct result
- {
- typedef typename Then::template result<Env>::type then_type;
- typedef typename Else::template result<Env>::type else_type;
-
- typedef typename
- result_of_if_else<then_type, else_type>::type
- ite_result;
-
- // Note: c ? x : y can return an lvalue! Allow if_else_op_eval
- // to return an lvalue IFF then_type and else_type are both lvalues
- // with the same type.
-
- typedef typename
- mpl::if_<
- mpl::and_<
- is_same<then_type, else_type>
- , is_reference<then_type>
- >
- , ite_result
- , typename remove_reference<ite_result>::type
- >::type
- type;
- };
-
- template <
- typename RT
- , typename Env
- , typename Cond
- , typename Then
- , typename Else
- >
- static RT
- eval(Env const& env, Cond& cond, Then& then, Else& else_)
- {
- return cond.eval(env) ? then.eval(env) : else_.eval(env);
- }
- };
-
- template <typename Cond, typename Then, typename Else>
- inline actor<typename as_composite<if_else_op_eval, Cond, Then, Else>::type>
- if_else(Cond const& cond, Then const& then, Else const& else_)
- {
- return compose<if_else_op_eval>(cond, then, else_);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/io.hpp b/3party/boost/boost/spirit/home/phoenix/operator/io.hpp
deleted file mode 100644
index 360a46fbcc..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/io.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_IO_HPP
-#define PHOENIX_OPERATOR_IO_HPP
-
-#include <boost/spirit/home/phoenix/operator/detail/io.hpp>
-
-namespace boost { namespace phoenix
-{
-///////////////////////////////////////////////////////////////////////////////
-//
-// overloads for std::basic_ostream and std::basic_istream
-//
-///////////////////////////////////////////////////////////////////////////////
- template <typename T0, typename T1>
- inline typename detail::enable_if_ostream<T0, T1>::type
- operator<<(T0& a0, actor<T1> const& a1)
- {
- return compose<shift_left_eval>(phoenix::ref(a0), a1);
- }
-
- template <typename T0, typename T1>
- inline typename detail::enable_if_istream<T0, T1>::type
- operator>>(T0& a0, actor<T1> const& a1)
- {
- return compose<shift_right_eval>(phoenix::ref(a0), a1);
- }
-
- // resolve ambiguities with fusion.
- template <typename T1>
- inline typename detail::enable_if_ostream<std::ostream, T1>::type
- operator<<(std::ostream& a0, actor<T1> const& a1)
- {
- return compose<shift_left_eval>(phoenix::ref(a0), a1);
- }
-
- template <typename T1>
- inline typename detail::enable_if_istream<std::istream, T1>::type
- operator>>(std::istream& a0, actor<T1> const& a1)
- {
- return compose<shift_right_eval>(phoenix::ref(a0), a1);
- }
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// overloads for I/O manipulators.
-//
-///////////////////////////////////////////////////////////////////////////////
- template <typename T0>
- inline actor<typename as_composite<
- shift_left_eval, actor<T0>, detail::omanip_type>::type>
- operator<<(actor<T0> const& a0, detail::omanip_type a1)
- {
- return compose<shift_left_eval>(a0, a1);
- }
-
- template <typename T0>
- inline actor<typename as_composite<
- shift_left_eval, actor<T0>, detail::iomanip_type>::type>
- operator<<(actor<T0> const& a0, detail::iomanip_type a1)
- {
- return compose<shift_left_eval>(a0, a1);
- }
-
- template <typename T0>
- inline actor<typename as_composite<
- shift_right_eval, actor<T0>, detail::imanip_type>::type>
- operator>>(actor<T0> const& a0, detail::imanip_type a1)
- {
- return compose<shift_right_eval>(a0, a1);
- }
-
- template <typename T0>
- inline actor<typename as_composite<
- shift_right_eval, actor<T0>, detail::iomanip_type>::type>
- operator>>(actor<T0> const& a0, detail::iomanip_type a1)
- {
- return compose<shift_right_eval>(a0, a1);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/logical.hpp b/3party/boost/boost/spirit/home/phoenix/operator/logical.hpp
deleted file mode 100644
index 84619aa460..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/logical.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_LOGICAL_HPP
-#define PHOENIX_OPERATOR_LOGICAL_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/detail/type_deduction.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_compose.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_compose.hpp>
-
-namespace boost { namespace phoenix
-{
- struct logical_not_eval;
- struct logical_and_eval;
- struct logical_or_eval;
-
- BOOST_UNARY_RESULT_OF(!x, result_of_logical_not)
- BOOST_BINARY_RESULT_OF(x && y, result_of_logical_and)
- BOOST_BINARY_RESULT_OF(x || y, result_of_logical_or)
-
-#define x a0.eval(env)
-#define y a1.eval(env)
-
- PHOENIX_UNARY_EVAL(logical_not_eval, result_of_logical_not, !x)
- PHOENIX_BINARY_EVAL(logical_and_eval, result_of_logical_and, x && y)
- PHOENIX_BINARY_EVAL(logical_or_eval, result_of_logical_or, x || y)
-
- PHOENIX_UNARY_COMPOSE(logical_not_eval, !)
- PHOENIX_BINARY_COMPOSE(logical_and_eval, &&)
- PHOENIX_BINARY_COMPOSE(logical_or_eval, ||)
-
-#undef x
-#undef y
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/member.hpp b/3party/boost/boost/spirit/home/phoenix/operator/member.hpp
deleted file mode 100644
index 27f3e8d1a8..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/member.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_MEMBER_HPP
-#define PHOENIX_OPERATOR_MEMBER_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/type_traits/is_member_pointer.hpp>
-#include <boost/type_traits/is_member_function_pointer.hpp>
-
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/not.hpp>
-
-#include <boost/utility/enable_if.hpp>
-
-#include <boost/get_pointer.hpp>
-
-#include <boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_gen.hpp>
-
-#include <memory>
-
-namespace boost {
- template<typename T> class shared_ptr;
- template<typename T> class scoped_ptr;
-
-namespace phoenix {
- namespace detail
- {
- template<typename T>
- struct member_type;
-
- template<typename Class, typename MemberType>
- struct member_type<MemberType (Class::*)>
- {
- typedef MemberType type;
- };
- }
-
- namespace meta
- {
- template<typename T>
- struct pointed_type;
-
- template<typename T>
- struct pointed_type<T*>
- {
- typedef T type;
- };
-
- template<typename T>
- struct pointed_type<shared_ptr<T> >
- {
- typedef T type;
- };
-
- template<typename T>
- struct pointed_type<scoped_ptr<T> >
- {
- typedef T type;
- };
-
- template<typename T>
- struct pointed_type<std::auto_ptr<T> >
- {
- typedef T type;
- };
- }
-
- struct member_object_eval
- {
- template<typename Env, typename PtrActor, typename MemPtrActor>
- struct result
- {
- typedef typename detail::member_type<
- typename eval_result<MemPtrActor, Env>::type>::type member_type;
-
- typedef typename meta::pointed_type<
- typename remove_reference<
- typename eval_result<PtrActor, Env>::type>::type>::type object_type;
-
- typedef typename add_reference<
- typename mpl::eval_if<
- is_const<object_type>,
- add_const<member_type>,
- mpl::identity<member_type> >::type>::type type;
- };
-
- template<typename Rt, typename Env, typename PtrActor, typename MemPtrActor>
- static typename result<Env,PtrActor,MemPtrActor>::type
- eval(const Env& env, PtrActor& ptrActor, MemPtrActor& memPtrActor)
- {
- return get_pointer(ptrActor.eval(env))->*memPtrActor.eval(env);
- }
- };
-
- namespace member_object
- {
- template<typename T0, typename MemObjPtr>
- typename enable_if<
- mpl::and_<is_member_pointer<MemObjPtr>, mpl::not_<is_member_function_pointer<MemObjPtr> > >,
- actor<typename as_composite<
- member_object_eval, actor<T0>,
- typename as_actor<MemObjPtr>::type>::type> >::type
- operator->*(
- const actor<T0>& ptrActor,
- MemObjPtr memObjPtr)
- {
- return compose<member_object_eval>(
- ptrActor,
- as_actor<MemObjPtr>::convert(memObjPtr));
- }
- }
-
- namespace member_function
- {
- template<typename T0, typename MemFunPtr>
- typename enable_if<
- is_member_function_pointer<MemFunPtr>,
- mem_fun_ptr_gen<actor<T0>, MemFunPtr> >::type
- operator->*(const actor<T0>& ptrActor, MemFunPtr memFunPtr)
- {
- return mem_fun_ptr_gen<actor<T0>, MemFunPtr>(
- ptrActor, memFunPtr);
- }
- }
-
- using member_object::operator->*;
- using member_function::operator->*;
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/operator/self.hpp b/3party/boost/boost/spirit/home/phoenix/operator/self.hpp
deleted file mode 100644
index 294adf6b81..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/operator/self.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_OPERATOR_SELF_HPP
-#define PHOENIX_OPERATOR_SELF_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/detail/type_deduction.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/unary_compose.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_eval.hpp>
-#include <boost/spirit/home/phoenix/operator/detail/binary_compose.hpp>
-
-namespace boost { namespace phoenix
-{
- struct reference_eval;
- struct dereference_eval;
- struct assign_eval;
- struct index_eval;
-
- BOOST_UNARY_RESULT_OF(&x, result_of_reference)
- BOOST_UNARY_RESULT_OF(*x, result_of_dereference)
- BOOST_BINARY_RESULT_OF(x = y, result_of_assign)
- BOOST_ASYMMETRIC_BINARY_RESULT_OF(x[y], result_of_index)
-
- namespace detail
- {
- template <typename T0, typename T1>
- struct make_assign_composite
- {
- typedef actor<typename as_composite<assign_eval, T0, T1>::type> type;
- };
-
- template <typename T0, typename T1>
- struct make_index_composite
- {
- typedef actor<typename as_composite<index_eval, T0, T1>::type> type;
- };
- }
-
- template <typename Base>
- template <typename T1>
- typename detail::make_assign_composite<actor<Base>, T1>::type
- actor<Base>::operator=(T1 const& a1) const
- {
- return compose<assign_eval>(*this, a1);
- }
-
- template <typename Base>
- template <typename T1>
- typename detail::make_index_composite<actor<Base>, T1>::type
- actor<Base>::operator[](T1 const& a1) const
- {
- return compose<index_eval>(*this, a1);
- }
-
-#define x a0.eval(env)
-#define y a1.eval(env)
-
- PHOENIX_UNARY_EVAL(reference_eval, result_of_reference, &x)
- PHOENIX_UNARY_EVAL(dereference_eval, result_of_dereference, *x)
- PHOENIX_UNARY_COMPOSE(reference_eval, &)
- PHOENIX_UNARY_COMPOSE(dereference_eval, *)
-
- PHOENIX_BINARY_EVAL(assign_eval, result_of_assign, x = y)
- PHOENIX_BINARY_EVAL(index_eval, result_of_index, x[y])
-}}
-
-#undef x
-#undef y
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/scope.hpp b/3party/boost/boost/spirit/home/phoenix/scope.hpp
deleted file mode 100644
index c1b9ae3192..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/scope.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_SCOPE_HPP
-#define PHOENIX_SCOPE_HPP
-
-#include <boost/spirit/home/phoenix/version.hpp>
-#include <boost/spirit/home/phoenix/scope/scoped_environment.hpp>
-#include <boost/spirit/home/phoenix/scope/lambda.hpp>
-#include <boost/spirit/home/phoenix/scope/let.hpp>
-#include <boost/spirit/home/phoenix/scope/local_variable.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/scope/detail/local_gen.hpp b/3party/boost/boost/spirit/home/phoenix/scope/detail/local_gen.hpp
deleted file mode 100644
index 6a74df6b14..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/scope/detail/local_gen.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-// Allow multiple inclusion. let.hpp and lambda.hpp will have the guards
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-
-#define PHOENIX_LOCAL_GEN_PARAM(z, n, data) \
- actor<composite<assign_eval \
- , fusion::vector<local_variable<K##n>, V##n> > > const& a##n
-
-#define PHOENIX_LOCAL_GEN_ACTOR(z, n, data) \
- fusion::at_c<1>(a##n)
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, PHOENIX_LOCAL_LIMIT, \
- "boost/spirit/home/phoenix/scope/detail/local_gen.hpp"))
-#include BOOST_PP_ITERATE()
-
-#undef PHOENIX_LOCAL_GEN_PARAM
-#undef PHOENIX_LOCAL_GEN_ACTOR
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <
- BOOST_PP_ENUM_PARAMS(N, typename K)
- , BOOST_PP_ENUM_PARAMS(N, typename V)
- >
- PHOENIX_LOCAL_GEN_NAME<
- fusion::vector<BOOST_PP_ENUM_PARAMS(N, V)>
- , detail::map_local_index_to_tuple<BOOST_PP_ENUM_PARAMS(N, K)>
- >
- operator()(
- BOOST_PP_ENUM(N, PHOENIX_LOCAL_GEN_PARAM, _)
- ) const
- {
- return fusion::vector<BOOST_PP_ENUM_PARAMS(N, V)>(
- BOOST_PP_ENUM(N, PHOENIX_LOCAL_GEN_ACTOR, _));
- }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/scope/detail/local_variable.hpp b/3party/boost/boost/spirit/home/phoenix/scope/detail/local_variable.hpp
deleted file mode 100644
index 1ad7932d86..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/scope/detail/local_variable.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Copyright (c) 2004 Daniel Wallin
-
- 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 PHOENIX_SCOPE_DETAIL_LOCAL_VARIABLE_HPP
-#define PHOENIX_SCOPE_DETAIL_LOCAL_VARIABLE_HPP
-
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/equal_to.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/less.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/fusion/include/at.hpp>
-#include <boost/fusion/include/value_at.hpp>
-#include <boost/preprocessor/enum.hpp>
-#include <boost/preprocessor/repeat.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/type_traits/is_reference.hpp>
-
-#define PHOENIX_MAP_LOCAL_TEMPLATE_PARAM(z, n, data) \
- typename T##n = unused<n>
-
-#define PHOENIX_MAP_LOCAL_DISPATCH(z, n, data) \
- typedef char(&result##n)[n+2]; \
- static result##n get(T##n*);
-
-namespace boost { namespace phoenix
-{
- template <typename Env, typename OuterEnv, typename Locals, typename Map>
- struct scoped_environment;
-
- namespace detail
- {
- template <typename Env>
- struct initialize_local
- {
- template <class F>
- struct result;
-
- template <class F, class Actor>
- struct result<F(Actor)>
- {
- typedef typename remove_reference<Actor>::type actor_type;
- typedef typename actor_type::template result<Env>::type type;
- };
-
- initialize_local(Env const& env)
- : env(env) {}
-
- template <typename Actor>
- typename result<initialize_local(Actor)>::type
- operator()(Actor const& actor) const
- {
- return actor.eval(env);
- }
-
- Env const& env;
-
- private:
- // silence MSVC warning C4512: assignment operator could not be generated
- initialize_local& operator= (initialize_local const&);
- };
-
- template <typename T>
- struct is_scoped_environment : mpl::false_ {};
-
- template <typename Env, typename OuterEnv, typename Locals, typename Map>
- struct is_scoped_environment<scoped_environment<Env, OuterEnv, Locals, Map> >
- : mpl::true_ {};
-
- template <int N>
- struct unused;
-
- template <BOOST_PP_ENUM(
- PHOENIX_LOCAL_LIMIT, PHOENIX_MAP_LOCAL_TEMPLATE_PARAM, _)>
- struct map_local_index_to_tuple
- {
- typedef char(&not_found)[1];
- static not_found get(...);
-
- BOOST_PP_REPEAT(PHOENIX_LOCAL_LIMIT, PHOENIX_MAP_LOCAL_DISPATCH, _)
- };
-
- template<typename T>
- T* generate_pointer();
-
- template <typename Map, typename Tag>
- struct get_index
- {
- BOOST_STATIC_CONSTANT(int,
- value = (
- static_cast<int>((sizeof(Map::get(generate_pointer<Tag>()))) / sizeof(char)) - 2
- ));
-
- // if value == -1, Tag is not found
- typedef mpl::int_<value> type;
- };
-
- template <typename Local, typename Env>
- struct apply_local;
-
- template <typename Local, typename Env>
- struct outer_local
- {
- typedef typename
- apply_local<Local, typename Env::outer_env_type>::type
- type;
- };
-
- template <typename Locals, typename Index>
- struct get_local_or_void
- {
- typedef typename
- mpl::eval_if<
- mpl::less<Index, mpl::size<Locals> >
- , fusion::result_of::at<Locals, Index>
- , mpl::identity<fusion::void_>
- >::type
- type;
- };
-
- template <typename Local, typename Env, typename Index>
- struct get_local_from_index
- {
- typedef typename
- mpl::eval_if<
- mpl::equal_to<Index, mpl::int_<-1> >
- , outer_local<Local, Env>
- , get_local_or_void<typename Env::locals_type, Index>
- >::type
- type;
- };
-
- template <typename Local, typename Env>
- struct get_local
- {
- typedef typename
- get_index<
- typename Env::map_type, typename Local::key_type>::type
- index_type;
-
- typedef typename
- get_local_from_index<Local, Env, index_type>::type
- type;
- };
-
- template <typename Local, typename Env>
- struct apply_local
- {
- // $$$ TODO: static assert that Env is a scoped_environment $$$
- typedef typename get_local<Local, Env>::type type;
- };
-
- template <typename Key>
- struct eval_local
- {
- template <typename RT, typename Env, typename Index>
- static RT
- get(Env const& env, Index, mpl::false_)
- {
- return RT(fusion::at<Index>(env.locals));
- }
-
- template <typename RT, typename Env, typename Index>
- static RT
- get(Env const& env, Index index, mpl::true_)
- {
- typedef typename
- get_index<typename Env::outer_env_type::map_type, Key>::type
- index_type;
-
- return get<RT>(
- env.outer_env
- , index_type()
- , mpl::equal_to<index_type, mpl::int_<-1> >());
- }
-
- template <typename RT, typename Env, typename Index>
- static RT
- get(Env const& env, Index index)
- {
- return get<RT>(
- env
- , index
- , mpl::equal_to<Index, mpl::int_<-1> >());
- }
- };
- }
-}}
-
-#undef PHOENIX_MAP_LOCAL_TEMPLATE_PARAM
-#undef PHOENIX_MAP_LOCAL_DISPATCH
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/scope/dynamic.hpp b/3party/boost/boost/spirit/home/phoenix/scope/dynamic.hpp
deleted file mode 100644
index c822bf7d07..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/scope/dynamic.hpp
+++ /dev/null
@@ -1,193 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Copyright (c) 2004 Daniel Wallin
-
- 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 PHOENIX_SCOPE_DYNAMIC_HPP
-#define PHOENIX_SCOPE_DYNAMIC_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/fusion/include/at.hpp>
-#include <boost/fusion/include/vector.hpp>
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/punctuation/comma_if.hpp>
-#include <boost/preprocessor/seq/for_each_i.hpp>
-#include <boost/preprocessor/tuple/elem.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/inc.hpp>
-
-#include <boost/noncopyable.hpp>
-#include <boost/assert.hpp>
-
-#define PHOENIX_DYNAMIC_MEMBER(z, n, data) \
- typedef actor<dynamic_member<n, self_type> > \
- BOOST_PP_CAT(member, BOOST_PP_INC(n));
-
-namespace boost { namespace phoenix
-{
- template <typename DynamicScope>
- struct dynamic_frame : noncopyable
- {
- typedef typename DynamicScope::tuple_type tuple_type;
-
- dynamic_frame(DynamicScope const& scope)
- : tuple()
- , save(scope.frame)
- , scope(scope)
- {
- scope.frame = this;
- }
-
- template <typename Tuple>
- dynamic_frame(DynamicScope const& scope, Tuple const& init)
- : tuple(init)
- , save(scope.frame)
- , scope(scope)
- {
- scope.frame = this;
- }
-
- ~dynamic_frame()
- {
- scope.frame = save;
- }
-
- tuple_type& data() { return tuple; }
- tuple_type const& data() const { return tuple; }
-
- private:
-
- tuple_type tuple;
- dynamic_frame* save;
- DynamicScope const& scope;
- };
-
- template <int N, typename DynamicScope>
- struct dynamic_member
- {
- typedef mpl::false_ no_nullary;
- typedef typename DynamicScope::tuple_type tuple_type;
-
- dynamic_member(DynamicScope const& scope)
- : scope(scope) {}
-
- template <typename Env>
- struct result
- {
- typedef typename
- fusion::result_of::at_c<tuple_type, N>::type
- type;
- };
-
- template <typename Env>
- typename result<Env>::type
- eval(Env const& /*env*/) const
- {
- BOOST_ASSERT(scope.frame != 0);
- return fusion::at_c<N>(scope.frame->data());
- }
-
- private:
-
- DynamicScope const& scope;
- };
-
- template <BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(PHOENIX_DYNAMIC_LIMIT, typename T, void_)>
- struct dynamic : noncopyable
- {
- typedef fusion::vector<BOOST_PP_ENUM_PARAMS(PHOENIX_DYNAMIC_LIMIT, T)> tuple_type;
- typedef dynamic<BOOST_PP_ENUM_PARAMS(PHOENIX_DYNAMIC_LIMIT, T)> self_type;
- typedef dynamic_frame<self_type> dynamic_frame_type;
-
- dynamic()
- : frame(0) {}
-
- BOOST_PP_REPEAT(PHOENIX_DYNAMIC_LIMIT, PHOENIX_DYNAMIC_MEMBER, _)
-
- private:
-
- template <int N, typename DynamicScope>
- friend struct dynamic_member;
-
- template <typename DynamicScope>
- friend struct dynamic_frame;
-
- mutable dynamic_frame_type* frame;
- };
-}}
-
-#if defined(BOOST_MSVC)
-# pragma warning(push)
-# pragma warning(disable:4355)
-#endif
-
-/*
- PHOENIX_DYNAMIC macro(name, type-name sequence)
- Example:
-
- PHOENIX_DYNAMIC(
- my_dynamic,
- (int, num)
- (std::string, message)
- (double, real)
- );
-
- which expands to:
-
- struct my_dynamic : ::boost::phoenix::dynamic<int, std::string, double>
- {
- my_dynamic() : num(*this), message(*this), real(*this) {}
-
- member1 num;
- member2 message;
- member3 real;
- };
-
- PHOENIX_DYNAMIC takes the input (containing a binary sequence)
- and converts that sequence to a unary sequence of
- binary tuples and passes it on to PHOENIX_DYNAMIC_I.
-
- Thanks to Paul Mensonides for the PP macro help
-*/
-
-#define PHOENIX_DYNAMIC(name, bseq) \
- PHOENIX_DYNAMIC_I(name, BOOST_PP_CAT(PHOENIX_DYNAMIC_X bseq, 0)) \
-
-#define PHOENIX_DYNAMIC_X(x, y) ((x, y)) PHOENIX_DYNAMIC_Y
-#define PHOENIX_DYNAMIC_Y(x, y) ((x, y)) PHOENIX_DYNAMIC_X
-#define PHOENIX_DYNAMIC_X0
-#define PHOENIX_DYNAMIC_Y0
-
-// PHOENIX_DYNAMIC_I generates the overarching structure and uses
-// SEQ_FOR_EACH_I to generate the "linear" substructures.
-
-#define PHOENIX_DYNAMIC_I(name, seq) \
- struct name : \
- ::boost::phoenix::dynamic< \
- BOOST_PP_SEQ_FOR_EACH_I(PHOENIX_DYNAMIC_A, ~, seq)> { \
- name() : BOOST_PP_SEQ_FOR_EACH_I(PHOENIX_DYNAMIC_B, ~, seq) {} \
- BOOST_PP_SEQ_FOR_EACH_I(PHOENIX_DYNAMIC_C, ~, seq) \
- } \
-
-#define PHOENIX_DYNAMIC_A(r, _, i, xy) \
- BOOST_PP_COMMA_IF(i) BOOST_PP_TUPLE_ELEM(2, 0, xy) \
-
-#define PHOENIX_DYNAMIC_B(r, _, i, xy) \
- BOOST_PP_COMMA_IF(i) BOOST_PP_TUPLE_ELEM(2, 1, xy)(*this) \
-
-#define PHOENIX_DYNAMIC_C(r, _, i, xy) \
- BOOST_PP_CAT(member, BOOST_PP_INC(i)) BOOST_PP_TUPLE_ELEM(2, 1, xy); \
-
-#undef PHOENIX_DYNAMIC_MEMBER
-
-#if defined(BOOST_MSVC)
-# pragma warning(pop)
-#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/scope/lambda.hpp b/3party/boost/boost/spirit/home/phoenix/scope/lambda.hpp
deleted file mode 100644
index c4a7ce8314..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/scope/lambda.hpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Copyright (c) 2004 Daniel Wallin
-
- 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 PHOENIX_SCOPE_LAMBDA_HPP
-#define PHOENIX_SCOPE_LAMBDA_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/scope/scoped_environment.hpp>
-#include <boost/spirit/home/phoenix/scope/detail/local_variable.hpp>
-#include <boost/spirit/home/phoenix/detail/local_reference.hpp>
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/fusion/include/transform.hpp>
-#include <boost/fusion/include/as_vector.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename Base, typename OuterEnv, typename Locals, typename Map>
- struct lambda_eval : Base
- {
- template <typename Env>
- struct result
- {
- typedef typename Base::template
- result<scoped_environment<Env, OuterEnv, Locals, Map> >::type
- result_type;
-
- typedef typename
- detail::unwrap_local_reference<result_type>::type
- type;
- };
-
- lambda_eval(
- Base const& base
- , OuterEnv const& outer_env
- , Locals const& locals)
- : Base(base)
- , outer_env(outer_env)
- , locals(locals) {}
-
- template <typename Env>
- typename result<Env>::type
- eval(Env const& env) const
- {
- typedef typename result<Env>::type RT;
- return RT(Base::eval(
- scoped_environment<Env, OuterEnv, Locals, Map>(
- env, outer_env, locals)));
- }
-
- OuterEnv outer_env;
- mutable Locals locals;
- };
-
- template <typename Base, typename Vars, typename Map>
- struct lambda_actor
- {
- typedef typename
- mpl::fold<
- Vars
- , mpl::false_
- , detail::compute_no_nullary
- >::type
- no_nullary;
-
- template <typename Env>
- struct result
- {
- typedef typename
- fusion::result_of::as_vector<
- typename fusion::result_of::transform<
- Vars
- , detail::initialize_local<Env>
- >::type
- >::type
- locals_type;
-
- typedef actor<lambda_eval<Base, Env, locals_type, Map> > type;
- };
-
- lambda_actor(Base const& f, Vars const& vars)
- : f(f), vars(vars) {}
-
- template <typename Env>
- typename result<Env>::type
- eval(Env const& env) const
- {
- typedef typename result<Env>::type result_type;
-
- return result_type(
- f, env, fusion::as_vector(
- fusion::transform(
- vars
- , detail::initialize_local<Env>(env)
- )));
- }
-
- Base f;
- Vars vars;
- };
-
- template <typename Vars, typename Map>
- struct lambda_actor_gen
- {
- template <typename Base>
- actor<lambda_actor<Base, Vars, Map> > const
- operator[](actor<Base> const& f) const
- {
- return lambda_actor<Base, Vars, Map>(f, vars);
- }
-
- lambda_actor_gen(Vars const& vars)
- : vars(vars) {}
-
- Vars vars;
- };
-
- template <typename Key>
- struct local_variable; // forward
- struct assign_eval; // forward
-
- struct lambda_gen
- : lambda_actor_gen<
- fusion::vector<>
- , detail::map_local_index_to_tuple<> >
- {
- typedef
- lambda_actor_gen<
- fusion::vector<>
- , detail::map_local_index_to_tuple<> >
- base_type;
-
- lambda_gen()
- : base_type(fusion::vector<>())
- {
- }
-
- template <typename K0, typename V0>
- lambda_actor_gen<
- fusion::vector<V0>
- , detail::map_local_index_to_tuple<K0>
- >
- operator()(
- actor<composite<assign_eval, fusion::vector<local_variable<K0>, V0> > > const& a0
- ) const
- {
- return fusion::vector<V0>(fusion::at_c<1>(a0));
- }
-
- template <typename K0, typename K1, typename V0, typename V1>
- lambda_actor_gen<
- fusion::vector<V0, V1>
- , detail::map_local_index_to_tuple<K0, K1>
- >
- operator()(
- actor<composite<assign_eval, fusion::vector<local_variable<K0>, V0> > > const& a0
- , actor<composite<assign_eval, fusion::vector<local_variable<K1>, V1> > > const& a1
- ) const
- {
- return fusion::vector<V0, V1>(fusion::at_c<1>(a0), fusion::at_c<1>(a1));
- }
-
- // Bring in the rest...
- #define PHOENIX_LOCAL_GEN_NAME lambda_actor_gen
- #include <boost/spirit/home/phoenix/scope/detail/local_gen.hpp>
- #undef PHOENIX_LOCAL_GEN_NAME
- };
-
- lambda_gen const lambda = lambda_gen();
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/scope/let.hpp b/3party/boost/boost/spirit/home/phoenix/scope/let.hpp
deleted file mode 100644
index 40e951a49f..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/scope/let.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Copyright (c) 2004 Daniel Wallin
-
- 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 PHOENIX_SCOPE_LET_HPP
-#define PHOENIX_SCOPE_LET_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/scope/scoped_environment.hpp>
-#include <boost/spirit/home/phoenix/scope/detail/local_variable.hpp>
-#include <boost/spirit/home/phoenix/detail/local_reference.hpp>
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/fusion/include/transform.hpp>
-#include <boost/fusion/include/as_vector.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/bool.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename Base, typename Vars, typename Map>
- struct let_actor : Base
- {
- typedef typename
- mpl::fold<
- Vars
- , mpl::false_
- , detail::compute_no_nullary
- >::type
- no_nullary;
-
- template <typename Env>
- struct result
- {
- typedef typename
- fusion::result_of::as_vector<
- typename fusion::result_of::transform<
- Vars
- , detail::initialize_local<Env>
- >::type
- >::type
- locals_type;
-
- typedef typename Base::template
- result<scoped_environment<Env, Env, locals_type, Map> >::type
- result_type;
-
- typedef typename
- detail::unwrap_local_reference<result_type>::type
- type;
- };
-
- let_actor(Base const& base, Vars const& vars)
- : Base(base), vars(vars) {}
-
- template <typename Env>
- typename result<Env>::type
- eval(Env const& env) const
- {
- typedef typename
- fusion::result_of::as_vector<
- typename fusion::result_of::transform<
- Vars
- , detail::initialize_local<Env>
- >::type
- >::type
- locals_type;
-
- locals_type locals =
- fusion::as_vector(
- fusion::transform(
- vars
- , detail::initialize_local<Env>(env)));
-
- typedef typename result<Env>::type RT;
- return RT(Base::eval(
- scoped_environment<Env, Env, locals_type, Map>(
- env
- , env
- , locals)));
- }
-
- Vars vars;
- };
-
- template <typename Vars, typename Map>
- struct let_actor_gen
- {
- template <typename Base>
- actor<let_actor<Base, Vars, Map> > const
- operator[](actor<Base> const& base) const
- {
- return let_actor<Base, Vars, Map>(base, vars);
- }
-
- let_actor_gen(Vars const& vars)
- : vars(vars) {}
-
- Vars vars;
- };
-
- template <typename Key>
- struct local_variable; // forward
- struct assign_eval; // forward
-
- struct let_gen
- {
- template <typename K0, typename V0>
- let_actor_gen<
- fusion::vector<V0>
- , detail::map_local_index_to_tuple<K0>
- >
- operator()(
- actor<composite<assign_eval, fusion::vector<local_variable<K0>, V0> > > const& a0
- ) const
- {
- return fusion::vector<V0>(fusion::at_c<1>(a0));
- }
-
- template <typename K0, typename K1, typename V0, typename V1>
- let_actor_gen<
- fusion::vector<V0, V1>
- , detail::map_local_index_to_tuple<K0, K1>
- >
- operator()(
- actor<composite<assign_eval, fusion::vector<local_variable<K0>, V0> > > const& a0
- , actor<composite<assign_eval, fusion::vector<local_variable<K1>, V1> > > const& a1
- ) const
- {
- return fusion::vector<V0, V1>(fusion::at_c<1>(a0), fusion::at_c<1>(a1));
- }
-
- // Bring in the rest...
- #define PHOENIX_LOCAL_GEN_NAME let_actor_gen
- #include <boost/spirit/home/phoenix/scope/detail/local_gen.hpp>
- #undef PHOENIX_LOCAL_GEN_NAME
- };
-
- let_gen const let = let_gen();
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/scope/local_variable.hpp b/3party/boost/boost/spirit/home/phoenix/scope/local_variable.hpp
deleted file mode 100644
index 5987ed441d..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/scope/local_variable.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Copyright (c) 2004 Daniel Wallin
-
- 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 PHOENIX_SCOPE_LOCAL_VARIABLE_HPP
-#define PHOENIX_SCOPE_LOCAL_VARIABLE_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/spirit/home/phoenix/detail/local_reference.hpp>
-#include <boost/spirit/home/phoenix/scope/detail/local_variable.hpp>
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/mpl/bool.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename Key>
- struct local_variable
- {
- typedef Key key_type;
-
- // This will prevent actor::operator()() from kicking in.
- // Actually, we do not need all actor::operator()s for
- // all arities, but this will suffice. The nullary
- // actor::operator() is particularly troublesome because
- // it is always eagerly evaluated by the compiler.
- typedef mpl::true_ no_nullary;
-
- template <typename Env>
- struct result : detail::apply_local<local_variable<Key>, Env> {};
-
- template <typename Env>
- typename result<Env>::type
- eval(Env const& env) const
- {
- typedef typename result<Env>::type return_type;
- typedef typename
- detail::get_index<typename Env::map_type, Key>::type
- index_type;
- typedef detail::eval_local<Key> eval_local;
-
- return eval_local::template get<return_type>(
- env
- , index_type());
- }
-
- private:
- // silence MSVC warning C4512: assignment operator could not be generated
- local_variable& operator= (local_variable const&);
- };
-
- namespace local_names
- {
- actor<local_variable<struct _a_key> > const _a
- = local_variable<struct _a_key>();
- actor<local_variable<struct _b_key> > const _b
- = local_variable<struct _b_key>();
- actor<local_variable<struct _c_key> > const _c
- = local_variable<struct _c_key>();
- actor<local_variable<struct _d_key> > const _d
- = local_variable<struct _d_key>();
- actor<local_variable<struct _e_key> > const _e
- = local_variable<struct _e_key>();
- actor<local_variable<struct _f_key> > const _f
- = local_variable<struct _f_key>();
- actor<local_variable<struct _g_key> > const _g
- = local_variable<struct _g_key>();
- actor<local_variable<struct _h_key> > const _h
- = local_variable<struct _h_key>();
- actor<local_variable<struct _i_key> > const _i
- = local_variable<struct _i_key>();
- actor<local_variable<struct _j_key> > const _j
- = local_variable<struct _j_key>();
- actor<local_variable<struct _k_key> > const _k
- = local_variable<struct _k_key>();
- actor<local_variable<struct _l_key> > const _l
- = local_variable<struct _l_key>();
- actor<local_variable<struct _m_key> > const _m
- = local_variable<struct _m_key>();
- actor<local_variable<struct _n_key> > const _n
- = local_variable<struct _n_key>();
- actor<local_variable<struct _o_key> > const _o
- = local_variable<struct _o_key>();
- actor<local_variable<struct _p_key> > const _p
- = local_variable<struct _p_key>();
- actor<local_variable<struct _q_key> > const _q
- = local_variable<struct _q_key>();
- actor<local_variable<struct _r_key> > const _r
- = local_variable<struct _r_key>();
- actor<local_variable<struct _s_key> > const _s
- = local_variable<struct _s_key>();
- actor<local_variable<struct _t_key> > const _t
- = local_variable<struct _t_key>();
- actor<local_variable<struct _u_key> > const _u
- = local_variable<struct _u_key>();
- actor<local_variable<struct _v_key> > const _v
- = local_variable<struct _v_key>();
- actor<local_variable<struct _w_key> > const _w
- = local_variable<struct _w_key>();
- actor<local_variable<struct _x_key> > const _x
- = local_variable<struct _x_key>();
- actor<local_variable<struct _y_key> > const _y
- = local_variable<struct _y_key>();
- actor<local_variable<struct _z_key> > const _z
- = local_variable<struct _z_key>();
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/scope/scoped_environment.hpp b/3party/boost/boost/spirit/home/phoenix/scope/scoped_environment.hpp
deleted file mode 100644
index b23f9eebc4..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/scope/scoped_environment.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Copyright (c) 2004 Daniel Wallin
-
- 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 PHOENIX_SCOPE_SCOPED_ENVIRONMENT_HPP
-#define PHOENIX_SCOPE_SCOPED_ENVIRONMENT_HPP
-
-namespace boost { namespace phoenix
-{
- template <typename Env, typename OuterEnv, typename Locals, typename Map>
- struct scoped_environment
- {
- typedef Env env_type;
- typedef OuterEnv outer_env_type;
- typedef Locals locals_type;
- typedef Map map_type;
- typedef typename Env::args_type args_type;
- typedef typename Env::tie_type tie_type;
-
- scoped_environment(
- Env const& env
- , OuterEnv const& outer_env
- , Locals& locals)
- : env(env)
- , outer_env(outer_env)
- , locals(locals) {}
-
- tie_type const&
- args() const
- {
- return env.args();
- }
-
- Env const& env;
- OuterEnv const& outer_env;
- Locals& locals;
-
- private:
- // silence MSVC warning C4512: assignment operator could not be generated
- scoped_environment& operator= (scoped_environment const&);
- };
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement.hpp b/3party/boost/boost/spirit/home/phoenix/statement.hpp
deleted file mode 100644
index 19e169ac71..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_HPP
-#define PHOENIX_STATEMENT_HPP
-
-#include <boost/spirit/home/phoenix/version.hpp>
-#include <boost/spirit/home/phoenix/statement/do_while.hpp>
-#include <boost/spirit/home/phoenix/statement/for.hpp>
-#include <boost/spirit/home/phoenix/statement/if.hpp>
-#include <boost/spirit/home/phoenix/statement/sequence.hpp>
-#include <boost/spirit/home/phoenix/statement/switch.hpp>
-#include <boost/spirit/home/phoenix/statement/while.hpp>
-#include <boost/spirit/home/phoenix/statement/throw.hpp>
-#include <boost/spirit/home/phoenix/statement/try_catch.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/detail/catch_all_eval.hpp b/3party/boost/boost/spirit/home/phoenix/statement/detail/catch_all_eval.hpp
deleted file mode 100644
index 0609ad85a2..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/detail/catch_all_eval.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_STATEMENT_DETAIL_CATCH_ALL_EVAL_HPP
-#define PHOENIX_STATEMENT_DETAIL_CATCH_ALL_EVAL_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/preprocessor/iteration/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_defaults.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/mpl/void.hpp>
-
-namespace boost { namespace phoenix {
- class catch_all_eval
- {
- public:
- template<typename Env, typename TryBody,
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(PHOENIX_CATCH_LIMIT, typename CatchBody, mpl::void_),
- typename CatchAllBody = mpl::void_>
- struct result
- {
- typedef void type;
- };
-
- template<typename Rt, typename Env, typename TryBody,
- typename CatchAllBody>
- static void eval(
- const Env& env, TryBody& tryBody, CatchAllBody& catchAllBody)
- {
- try
- {
- tryBody.eval(env);
- }
- catch(...)
- {
- catchAllBody.eval(env);
- }
- }
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, PHOENIX_CATCH_LIMIT, "boost/spirit/home/phoenix/statement/detail/catch_all_eval.hpp"))
-
-#include BOOST_PP_ITERATE()
-
- };
-}}
-
-#endif
-
-#elif BOOST_PP_ITERATION_DEPTH() == 1
-
-#define PHOENIX_ITERATION BOOST_PP_ITERATION()
-
- template<typename Rt, typename Env, typename TryBody,
- BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename CatchBody),
- typename CatchAllBody>
- static void eval(
- const Env& env, TryBody& tryBody,
- BOOST_PP_ENUM_BINARY_PARAMS(PHOENIX_ITERATION, CatchBody, catchBody),
- CatchAllBody& catchAllBody)
- {
- try
- {
- tryBody.eval(env);
- }
-
-#define BOOST_PP_ITERATION_PARAMS_2 \
- (3, (0, BOOST_PP_DEC(PHOENIX_ITERATION), "boost/spirit/home/phoenix/statement/detail/catch_all_eval.hpp"))
-
-#include BOOST_PP_ITERATE()
-
- catch(...)
- {
- catchAllBody.eval(env);
- }
- }
-
-#undef PHOENIX_ITERATION
-
-#elif BOOST_PP_ITERATION_DEPTH() == 2
-
-#define PHOENIX_ITERATION BOOST_PP_ITERATION()
-
- catch(typename BOOST_PP_CAT(CatchBody, PHOENIX_ITERATION)::exception_type&)
- {
- BOOST_PP_CAT(catchBody, PHOENIX_ITERATION).eval(env);
- }
-
-#undef PHOENIX_ITERATION
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/detail/catch_composite.hpp b/3party/boost/boost/spirit/home/phoenix/statement/detail/catch_composite.hpp
deleted file mode 100644
index 1877310540..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/detail/catch_composite.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_DETAIL_CATCH_COMPOSITE_HPP
-#define PHOENIX_STATEMENT_DETAIL_CATCH_COMPOSITE_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix {
-namespace detail
-{
- struct catch_composite_eval
- {
- template<typename Env, typename Actor>
- struct result :
- eval_result<typename Actor::eval_type, Env> {};
-
- template<typename Rt, typename Env, typename Actor>
- static typename result<Env,Actor>::type
- eval(const Env& env, Actor& actor)
- {
- return actor.eval(env);
- }
- };
-
- template<typename Exception, typename Actor>
- struct catch_composite :
- composite<catch_composite_eval, fusion::vector<Actor> >
- {
- catch_composite(const Actor& actor)
- : composite<catch_composite_eval, fusion::vector<Actor> >(actor) { }
-
- typedef Exception exception_type;
- };
-
- template<typename Exception, typename Actor>
- struct as_catch_actor
- {
- typedef catch_composite<
- Exception,
- Actor> comp;
-
- typedef actor<comp> type;
- };
-
- template<typename Exception, typename Actor>
- inline typename as_catch_actor<Exception, Actor>::type
- catch_actor(const Actor& actor)
- {
- return catch_composite<Exception,Actor>(actor);
- }
-}
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/detail/catch_eval.hpp b/3party/boost/boost/spirit/home/phoenix/statement/detail/catch_eval.hpp
deleted file mode 100644
index bc65e90af6..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/detail/catch_eval.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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_PP_IS_ITERATING
-#ifndef PHOENIX_STATEMENT_DETAIL_CATCH_EVAL_HPP
-#define PHOENIX_STATEMENT_DETAIL_CATCH_EVAL_HPP
-
-#include <boost/spirit/home/phoenix/core/limits.hpp>
-#include <boost/preprocessor/iteration/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_defaults.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/mpl/void.hpp>
-
-namespace boost { namespace phoenix {
- class catch_eval
- {
- public:
- template<typename Env, typename TryBody,
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(PHOENIX_CATCH_LIMIT, typename CatchBody, mpl::void_)>
- struct result
- {
- typedef void type;
- };
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, PHOENIX_CATCH_LIMIT, "boost/spirit/home/phoenix/statement/detail/catch_eval.hpp"))
-
-#include BOOST_PP_ITERATE()
-
- };
-}}
-
-#endif
-
-#elif BOOST_PP_ITERATION_DEPTH() == 1
-
-#define PHOENIX_ITERATION BOOST_PP_ITERATION()
-
- template<typename Rt, typename Env, typename TryBody,
- BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename CatchBody)>
- static void eval(
- const Env& env, TryBody& tryBody,
- BOOST_PP_ENUM_BINARY_PARAMS(PHOENIX_ITERATION, CatchBody, catchBody))
- {
- try
- {
- tryBody.eval(env);
- }
-
-#define BOOST_PP_ITERATION_PARAMS_2 \
- (3, (0, BOOST_PP_DEC(PHOENIX_ITERATION), "boost/spirit/home/phoenix/statement/detail/catch_eval.hpp"))
-
-#include BOOST_PP_ITERATE()
-
- }
-
-#undef PHOENIX_ITERATION
-
-#elif BOOST_PP_ITERATION_DEPTH() == 2
-
-#define PHOENIX_ITERATION BOOST_PP_ITERATION()
-
- catch(typename BOOST_PP_CAT(CatchBody, PHOENIX_ITERATION)::exception_type&)
- {
- BOOST_PP_CAT(catchBody, PHOENIX_ITERATION).eval(env);
- }
-
-#undef PHOENIX_ITERATION
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/detail/switch.hpp b/3party/boost/boost/spirit/home/phoenix/statement/detail/switch.hpp
deleted file mode 100644
index 537fcb1cec..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/detail/switch.hpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_DETAIL_SWITCH_HPP
-#define PHOENIX_STATEMENT_DETAIL_SWITCH_HPP
-
-#include <boost/spirit/home/phoenix/core/nothing.hpp>
-#include <boost/fusion/include/vector.hpp>
-#include <boost/fusion/include/as_vector.hpp>
-#include <boost/fusion/include/push_back.hpp>
-#include <boost/fusion/include/push_front.hpp>
-#include <boost/fusion/include/begin.hpp>
-#include <boost/fusion/include/size.hpp>
-#include <boost/fusion/include/value_of.hpp>
-#include <boost/fusion/include/is_sequence.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/if.hpp>
-
-namespace boost { namespace phoenix
-{
-
- template <typename Actor, typename K, K Value>
- struct switch_case;
-
- template <typename Actor>
- struct default_case;
-
- namespace detail
- {
- template <typename T>
- struct is_default_case : mpl::bool_<T::is_default> {};
-
- template <typename A0, typename A1>
- struct compose_case_a
- {
- // here, A0 and A1 are both switch cases
- typedef typename
- mpl::if_<
- is_default_case<A1>
- , fusion::vector<actor<A1>, actor<A0> >
- , fusion::vector<actor<A0>, actor<A1> >
- >::type
- type;
-
- static type
- eval(A0 const& _0, A1 const& _1, mpl::false_)
- {
- return type(_0, _1);
- }
-
- static type
- eval(A0 const& _0, A1 const& _1, mpl::true_)
- {
- return type(_1, _0);
- }
-
- static type
- eval(A0 const& _0, A1 const& _1)
- {
- return eval(_0, _1, is_default_case<A1>());
- }
- };
-
- template <typename Seq, typename Case>
- struct compose_case_b
- {
- typedef typename fusion::result_of::as_vector<
- typename mpl::eval_if<
- is_default_case<Case>
- , fusion::result_of::push_front<Seq const, actor<Case> >
- , fusion::result_of::push_back<Seq const, actor<Case> >
- >::type>::type
- type;
-
- static type
- eval(Seq const& seq, Case const& case_, mpl::false_)
- {
- return fusion::as_vector(
- fusion::push_back(seq, actor<Case>(case_)));
- }
-
- static type
- eval(Seq const& seq, Case const& case_, mpl::true_)
- {
- return fusion::as_vector(
- fusion::push_front(seq, actor<Case>(case_)));
- }
-
- static type
- eval(Seq const& seq, Case const& case_)
- {
- return eval(seq, case_, is_default_case<Case>());
- }
- };
-
- template <typename Cases>
- struct ensure_default
- {
- typedef
- is_default_case<
- typename fusion::result_of::value_of<
- typename fusion::result_of::begin<Cases>::type
- >::type
- >
- is_default_case_;
-
- typedef typename
- mpl::eval_if<
- is_default_case_
- , mpl::identity<Cases>
- , fusion::result_of::push_front<
- Cases const, actor<default_case<actor<null_actor> > > >
- >::type
- type;
-
- static type
- eval(Cases const& cases, mpl::false_);
-
- static type
- eval(Cases const& cases, mpl::true_)
- {
- return cases;
- }
-
- static type
- eval(Cases const& cases)
- {
- return eval(cases, is_default_case_());
- }
- };
-
- template <typename Cond, typename Cases>
- struct switch_composite
- {
- BOOST_STATIC_ASSERT(fusion::traits::is_sequence<Cases>::value);
- typedef ensure_default<Cases> ensure_default_;
-
- typedef typename
- fusion::result_of::as_vector<
- typename fusion::result_of::push_front<
- typename ensure_default_::type, Cond>::type
- >::type
- tuple_type;
-
- typedef
- composite<
- detail::switch_eval<fusion::result_of::size<tuple_type>::value-2>
- , tuple_type>
- type;
-
- static type
- eval(Cond const& cond, Cases const& cases)
- {
- return fusion::as_vector(
- fusion::push_front(ensure_default_::eval(cases), cond));
- }
- };
-
- template <typename Cond, typename Cases>
- struct switch_composite_actor
- {
- typedef actor<typename switch_composite<Cond, Cases>::type> type;
- };
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/detail/switch_eval.hpp b/3party/boost/boost/spirit/home/phoenix/statement/detail/switch_eval.hpp
deleted file mode 100644
index 220745bab8..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/detail/switch_eval.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_DETAIL_SWITCH_EVAL_HPP
-#define PHOENIX_STATEMENT_DETAIL_SWITCH_EVAL_HPP
-
-namespace boost { namespace phoenix { namespace detail
-{
- template <int N>
- struct switch_eval;
-
- template <>
- struct switch_eval<0>
- {
- template <
- typename Env, typename Cond, typename Default
- >
- struct result
- {
- typedef void type;
- };
-
- template <
- typename RT, typename Env, typename Cond, typename Default
- >
- static void
- eval(
- Env const& env, Cond& cond, Default& default_
- )
- {
- default_.eval(env);
- }
- };
-
- template <>
- struct switch_eval<1>
- {
- template <
- typename Env, typename Cond, typename Default
- , typename Case0
- >
- struct result
- {
- typedef void type;
- };
-
- template <
- typename RT, typename Env, typename Cond, typename Default
- , typename Case0
- >
- static void
- eval(
- Env const& env, Cond& cond, Default& default_
- , Case0& _0
- )
- {
- switch (cond.eval(env))
- {
- case Case0::value:
- _0.eval(env);
- break;
- default:
- default_.eval(env);
- }
- }
- };
-
- template <>
- struct switch_eval<2>
- {
- template <
- typename Env, typename Cond, typename Default
- , typename Case0, typename Case1
- >
- struct result
- {
- typedef void type;
- };
-
- template <
- typename RT, typename Env, typename Cond, typename Default
- , typename Case0, typename Case1
- >
- static void
- eval(
- Env const& env, Cond& cond, Default& default_
- , Case0& _0, Case1& _1
- )
- {
- switch (cond.eval(env))
- {
- case Case0::value:
- _0.eval(env);
- break;
- case Case1::value:
- _1.eval(env);
- break;
- default:
- default_.eval(env);
- }
- }
- };
-
- // Bring in the rest of the switch_evals
- #include <boost/spirit/home/phoenix/statement/detail/switch_eval.ipp>
-}}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/detail/switch_eval.ipp b/3party/boost/boost/spirit/home/phoenix/statement/detail/switch_eval.ipp
deleted file mode 100644
index ba4ae74618..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/detail/switch_eval.ipp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2006 Joel de Guzman
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef PHOENIX_STATEMENT_DETAIL_SWITCH_EVAL_IPP
-#define PHOENIX_STATEMENT_DETAIL_SWITCH_EVAL_IPP
-
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/dec.hpp>
-#include <boost/preprocessor/repeat.hpp>
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define PHOENIX_CASE_ITEM(z, n, prefix) \
- case BOOST_PP_CAT(Case, n)::value: \
- BOOST_PP_CAT(_, n).eval(env); \
- break;
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (3, BOOST_PP_DEC(BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT)), \
- "boost/spirit/home/phoenix/statement/detail/switch_eval.ipp"))
-#include BOOST_PP_ITERATE()
-
-#undef PHOENIX_CASE_ITEM
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-#else // defined(BOOST_PP_IS_ITERATING)
-
-#define N BOOST_PP_ITERATION()
-
- template <>
- struct switch_eval<N>
- {
- template <
- typename Env, typename Cond, typename Default
- , BOOST_PP_ENUM_PARAMS(N, typename Case)
- >
- struct result
- {
- typedef void type;
- };
-
- template <
- typename RT, typename Env, typename Cond, typename Default
- , BOOST_PP_ENUM_PARAMS(N, typename Case)
- >
- static void
- eval(Env const& env, Cond& cond, Default& default_
- , BOOST_PP_ENUM_BINARY_PARAMS(N, Case, & _)
- )
- {
- switch (cond.eval(env))
- {
- BOOST_PP_REPEAT(N, PHOENIX_CASE_ITEM, _)
- default:
- default_.eval(env);
- }
- }
- };
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
-
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/do_while.hpp b/3party/boost/boost/spirit/home/phoenix/statement/do_while.hpp
deleted file mode 100644
index 8d634c94c4..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/do_while.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_DO_WHILE_HPP
-#define PHOENIX_STATEMENT_DO_WHILE_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix
-{
- struct do_while_eval
- {
- template <typename Env, typename Cond, typename Do>
- struct result
- {
- typedef void type;
- };
-
- template <typename RT, typename Env, typename Cond, typename Do>
- static void
- eval(Env const& env, Cond& cond, Do& do_)
- {
- do
- do_.eval(env);
- while (cond.eval(env));
- }
- };
-
- template <typename Do>
- struct do_while_gen
- {
- do_while_gen(Do const& do_)
- : do_(do_) {}
-
- template <typename Cond>
- actor<typename as_composite<do_while_eval, Cond, Do>::type>
- while_(Cond const& cond) const
- {
- return compose<do_while_eval>(cond, do_);
- }
-
- Do do_;
- };
-
- struct do_gen
- {
- template <typename Do>
- do_while_gen<Do>
- operator[](Do const& do_) const
- {
- return do_while_gen<Do>(do_);
- }
- };
-
- do_gen const do_ = do_gen();
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/for.hpp b/3party/boost/boost/spirit/home/phoenix/statement/for.hpp
deleted file mode 100644
index 35e091feb4..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/for.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_FOR_HPP
-#define PHOENIX_STATEMENT_FOR_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix
-{
- struct for_eval
- {
- template <
- typename Env
- , typename Init, typename Cond, typename Step, typename Do>
- struct result
- {
- typedef void type;
- };
-
- template <
- typename RT, typename Env
- , typename Init, typename Cond, typename Step, typename Do>
- static void
- eval(
- Env const& env
- , Init& init, Cond& cond, Step& step, Do& do_)
- {
- for (init.eval(env); cond.eval(env); step.eval(env))
- do_.eval(env);
- }
- };
-
- template <typename Init, typename Cond, typename Step>
- struct for_gen
- {
- for_gen(Init const& init, Cond const& cond, Step const& step)
- : init(init), cond(cond), step(step) {}
-
- template <typename Do>
- actor<typename as_composite<for_eval, Init, Cond, Step, Do>::type>
- operator[](Do const& do_) const
- {
- return compose<for_eval>(init, cond, step, do_);
- }
-
- Init init;
- Cond cond;
- Step step;
- };
-
- template <typename Init, typename Cond, typename Step>
- inline for_gen<Init, Cond, Step>
- for_(Init const& init, Cond const& cond, Step const& step)
- {
- return for_gen<Init, Cond, Step>(init, cond, step);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/if.hpp b/3party/boost/boost/spirit/home/phoenix/statement/if.hpp
deleted file mode 100644
index 378fec0ca1..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/if.hpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_IF_HPP
-#define PHOENIX_STATEMENT_IF_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/as_actor.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-#if defined(BOOST_MSVC)
-# pragma warning(push)
-# pragma warning(disable:4355)
-#endif
-
-namespace boost { namespace phoenix
-{
- struct if_else_eval
- {
- template <typename Env, typename Cond, typename Then, typename Else>
- struct result
- {
- typedef void type;
- };
-
- template <
- typename RT, typename Env
- , typename Cond, typename Then, typename Else>
- static void
- eval(Env const& env, Cond& cond, Then& then, Else& else_)
- {
- if (cond.eval(env))
- then.eval(env);
- else
- else_.eval(env);
- }
- };
-
- struct if_eval
- {
- template <typename Env, typename Cond, typename Then>
- struct result
- {
- typedef void type;
- };
-
- template <typename RT, typename Env, typename Cond, typename Then>
- static void
- eval(Env const& env, Cond& cond, Then& then)
- {
- if (cond.eval(env))
- then.eval(env);
- }
- };
-
- template <typename Cond, typename Then>
- struct if_composite;
-
- template <typename Cond, typename Then>
- struct else_gen
- {
- else_gen(if_composite<Cond, Then> const& source)
- : source(source) {}
-
- template <typename Else>
- actor<typename as_composite<if_else_eval, Cond, Then, Else>::type>
- operator[](Else const& else_) const
- {
- return compose<if_else_eval>(
- fusion::at_c<0>(source) // cond
- , fusion::at_c<1>(source) // then
- , else_ // else
- );
- }
-
- if_composite<Cond, Then> const& source;
-
- private:
- // silence MSVC warning C4512: assignment operator could not be generated
- else_gen& operator= (else_gen const&);
- };
-
- template <typename Cond, typename Then>
- struct if_composite : composite<if_eval, fusion::vector<Cond, Then> >
- {
- if_composite(Cond const& cond, Then const& then)
- : composite<if_eval, fusion::vector<Cond, Then> >(cond, then)
- , else_(*this) {}
-
- else_gen<Cond, Then> else_;
-
- private:
- // silence MSVC warning C4512: assignment operator could not be generated
- if_composite& operator= (if_composite const&);
- };
-
- template <typename Cond>
- struct if_gen
- {
- if_gen(Cond const& cond)
- : cond(cond) {}
-
- template <typename Then>
- actor<if_composite<Cond, typename as_actor<Then>::type> >
- operator[](Then const& then) const
- {
- return actor<if_composite<Cond, typename as_actor<Then>::type> >(
- cond, as_actor<Then>::convert(then));
- }
-
- Cond cond;
- };
-
- template <typename Cond>
- inline if_gen<typename as_actor<Cond>::type>
- if_(Cond const& cond)
- {
- return if_gen<typename as_actor<Cond>::type>(
- as_actor<Cond>::convert(cond));
- }
-}}
-
-#if defined(BOOST_MSVC)
-# pragma warning(pop)
-#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/sequence.hpp b/3party/boost/boost/spirit/home/phoenix/statement/sequence.hpp
deleted file mode 100644
index 8a5f0c3e72..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/sequence.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_SEQUENCE_HPP
-#define PHOENIX_STATEMENT_SEQUENCE_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix
-{
- struct sequence_eval
- {
- template <typename Env, typename A0, typename A1>
- struct result
- {
- typedef void type;
- };
-
- template <typename RT, typename Env, typename A0, typename A1>
- static void
- eval(Env const& env, A0& a0, A1& a1)
- {
- a0.eval(env);
- a1.eval(env);
- }
- };
-
- namespace detail
- {
- template <typename BaseT0, typename BaseT1>
- struct comma_result
- {
- typedef actor<
- typename as_composite<
- sequence_eval
- , actor<BaseT0>
- , actor<BaseT1>
- >::type
- > type;
- };
- }
-
- template <typename BaseT0, typename BaseT1>
- inline typename detail::comma_result<BaseT0, BaseT1>::type
- operator,(actor<BaseT0> const& a0, actor<BaseT1> const& a1)
- {
- return compose<sequence_eval>(a0, a1);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/switch.hpp b/3party/boost/boost/spirit/home/phoenix/statement/switch.hpp
deleted file mode 100644
index 1229994faf..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/switch.hpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_SWITCH_HPP
-#define PHOENIX_STATEMENT_SWITCH_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-#include <boost/spirit/home/phoenix/core/nothing.hpp>
-#include <boost/spirit/home/phoenix/statement/detail/switch_eval.hpp>
-#include <boost/spirit/home/phoenix/statement/detail/switch.hpp>
-#include <boost/utility/enable_if.hpp>
-#include <boost/mpl/not.hpp>
-
-namespace boost { namespace phoenix
-{
- template <typename Derived, typename Actor>
- struct switch_case_base
- {
- typedef Derived derived_t;
- typedef Actor actor_t;
- typedef typename Actor::no_nullary no_nullary;
-
- template <typename Env>
- struct result
- {
- typedef typename Actor::eval_type::template result<Env>::type type;
- };
-
- switch_case_base(Actor const& actor)
- : actor(actor) {}
-
- template <typename Env>
- typename result<Env>::type
- eval(Env const& env) const
- {
- return actor.eval(env);
- }
-
- Actor actor;
- };
-
- template <typename Actor, typename K, K Value>
- struct switch_case : switch_case_base<switch_case<Actor, K, Value>, Actor>
- {
- typedef switch_case_base<switch_case<Actor, K, Value>, Actor> base_t;
- static K const value = Value;
- static bool const is_default = false;
-
- switch_case(Actor const& actor)
- : base_t(actor) {}
- };
-
- template <typename Actor>
- struct default_case : switch_case_base<default_case<Actor>, Actor>
- {
- typedef switch_case_base<default_case<Actor>, Actor> base_t;
- static bool const is_default = true;
-
- default_case(Actor const& actor)
- : base_t(actor) {}
- };
-
- template <typename Cond>
- struct switch_gen
- {
- switch_gen(Cond const& cond)
- : cond(cond) {}
-
- template <typename Cases>
- typename lazy_enable_if<
- fusion::traits::is_sequence<Cases>
- , detail::switch_composite_actor<Cond, Cases>
- >::type
- operator[](Cases const& cases) const
- {
- typedef typename
- detail::switch_composite<Cond, Cases>
- switch_composite;
- return switch_composite::eval(cond, cases);
- }
-
- template <typename D, typename A>
- actor<typename detail::
- switch_composite<Cond, fusion::vector<actor<D> > >::type>
- operator[](switch_case_base<D, A> const& case_) const
- {
- typedef typename
- detail::switch_composite<Cond, fusion::vector<actor<D> > >
- switch_composite;
- return switch_composite::eval(cond,
- fusion::vector<actor<D> >(static_cast<D const&>(case_)));
- }
-
- Cond cond;
- };
-
- template <typename Cond>
- inline switch_gen<typename as_actor<Cond>::type>
- switch_(Cond const& cond)
- {
- return switch_gen<typename as_actor<Cond>::type>(
- as_actor<Cond>::convert(cond));
- }
-
- template <int N, typename A0>
- switch_case<typename as_actor<A0>::type, int, N>
- case_(A0 const& _0)
- {
- return switch_case<typename as_actor<A0>::type, int, N>
- (as_actor<A0>::convert(_0));
- }
-
- template <typename A0>
- default_case<typename as_actor<A0>::type>
- default_(A0 const& _0)
- {
- return default_case<typename as_actor<A0>::type>
- (as_actor<A0>::convert(_0));
- }
-
- template <typename D0, typename A0, typename D1, typename A1>
- inline typename detail::compose_case_a<D0, D1>::type
- operator,(
- switch_case_base<D0, A0> const& _0
- , switch_case_base<D1, A1> const& _1
- )
- {
- return detail::compose_case_a<D0, D1>::eval(
- static_cast<D0 const&>(_0)
- , static_cast<D1 const&>(_1)
- );
- }
-
- template <typename Seq, typename D, typename A>
- inline typename
- lazy_enable_if<
- fusion::traits::is_sequence<Seq>
- , detail::compose_case_b<Seq, D>
- >::type
- operator,(Seq const& seq, switch_case_base<D, A> const& case_)
- {
- return detail::compose_case_b<Seq, D>::eval(
- seq, static_cast<D const&>(case_));
- }
-
- // Implementation of routines in detail/switch.hpp that depend on
- // the completeness of default_case.
- namespace detail {
- template <typename Cases>
- typename ensure_default<Cases>::type
- ensure_default<Cases>::eval(Cases const& cases, mpl::false_)
- {
- actor<default_case<actor<null_actor> > > default_
- = default_case<actor<null_actor> >(nothing);
- return fusion::push_front(cases, default_);
- }
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/throw.hpp b/3party/boost/boost/spirit/home/phoenix/statement/throw.hpp
deleted file mode 100644
index 87a087274d..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/throw.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_THROW_HPP
-#define PHOENIX_STATEMENT_THROW_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-#include <boost/mpl/bool.hpp>
-
-namespace boost { namespace phoenix {
-
- struct throw_new_eval
- {
- template<typename Env, typename ThrowExpr>
- struct result
- {
- typedef void type;
- };
-
- template<typename Rt, typename Env, typename ThrowExpr>
- static void
- eval(const Env& env, ThrowExpr& throwExpr)
- {
- throw throwExpr.eval(env);
- }
- };
-
- struct throw_again_eval
- {
- typedef mpl::false_ no_nullary;
-
- template<typename Env>
- struct result
- {
- typedef void type;
- };
-
- template<typename Env>
- void eval(const Env&) const
- {
- throw;
- }
- };
-
- inline actor<throw_again_eval> throw_()
- {
- return throw_again_eval();
- }
-
- template<typename Actor>
- actor<typename as_composite<throw_new_eval, Actor>::type>
- throw_(const Actor& a)
- {
- return compose<throw_new_eval>(a);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/try_catch.hpp b/3party/boost/boost/spirit/home/phoenix/statement/try_catch.hpp
deleted file mode 100644
index dccfd425ac..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/try_catch.hpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_TRY_CATCH_HPP
-#define PHOENIX_STATEMENT_TRY_CATCH_HPP
-
-#include <boost/spirit/home/phoenix/core/actor.hpp>
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-
-#include <boost/fusion/include/push_back.hpp>
-#include <boost/fusion/include/as_vector.hpp>
-
-#include <boost/spirit/home/phoenix/statement/detail/catch_composite.hpp>
-#include <boost/spirit/home/phoenix/statement/detail/catch_eval.hpp>
-#include <boost/spirit/home/phoenix/statement/detail/catch_all_eval.hpp>
-
-#if defined(BOOST_MSVC)
-# pragma warning(push)
-# pragma warning(disable:4355)
-#endif
-
-namespace boost { namespace phoenix {
-
- template<typename Tuple> struct try_catch_composite;
-
- namespace meta
- {
- template<typename Composite, typename Actor>
- struct try_catch_composite_push_back
- {
- typedef typename Composite::base_type actor_tuple;
- typedef try_catch_composite<
- typename fusion::result_of::as_vector<
- typename fusion::result_of::push_back<
- actor_tuple, Actor>::type>::type> type;
- };
-
- template<typename Composite, typename Actor>
- struct catch_all_composite_push_back
- {
- typedef typename Composite::base_type actor_tuple;
-
- typedef composite<
- catch_all_eval,
- typename fusion::result_of::as_vector<
- typename fusion::result_of::push_back<
- actor_tuple, Actor>::type>::type> type;
- };
- }
-
- namespace detail
- {
- struct try_catch_composite_push_back
- {
- template<typename Composite, typename Actor>
- struct result
- : meta::try_catch_composite_push_back<Composite, Actor>
- {};
-
- template<typename Composite, typename Actor>
- typename result<Composite, Actor>::type
- operator()(
- const Composite& composite, const Actor& actor) const
- {
- typedef typename result<Composite, Actor>::type result;
- return result(
- fusion::as_vector(
- fusion::push_back(composite, actor)));
- }
- };
-
- struct catch_all_composite_push_back
- {
- template<typename Composite, typename Actor>
- struct result
- : meta::catch_all_composite_push_back<Composite, Actor>
- {};
-
- template<typename Composite, typename Actor>
- typename result<Composite, Actor>::type
- operator()(
- const Composite& composite, const Actor& actor) const
- {
- typedef typename result<Composite, Actor>::type result;
- return result(
- fusion::as_vector(
- fusion::push_back(composite, actor)));
- }
- };
-
- }
-
- detail::try_catch_composite_push_back const try_catch_composite_push_back
- = detail::try_catch_composite_push_back();
- detail::catch_all_composite_push_back const catch_all_composite_push_back
- = detail::catch_all_composite_push_back();
-
- template<typename Exception, typename SourceComposite>
- struct catch_gen
- {
- explicit catch_gen(
- const SourceComposite& sourceComposite)
- : mSourceComposite(sourceComposite) { }
-
- template<typename Actor>
- actor<typename meta::try_catch_composite_push_back<
- SourceComposite,
- detail::catch_composite<Exception, Actor> >::type>
- operator[](const Actor& actor) const
- {
- return try_catch_composite_push_back(
- mSourceComposite, detail::catch_composite<Exception, Actor>(actor));
- }
-
- const SourceComposite& mSourceComposite;
- };
-
- template<typename SourceComposite>
- struct catch_all_gen
- {
- explicit catch_all_gen(
- const SourceComposite& sourceComposite)
- : mSourceComposite(sourceComposite) { }
-
- template<typename Actor>
- actor<typename meta::catch_all_composite_push_back<SourceComposite, Actor>::type>
- operator[](const Actor& actor) const
- {
- return catch_all_composite_push_back(
- mSourceComposite, actor);
- }
-
- const SourceComposite& mSourceComposite;
- };
-
- template<typename Tuple>
- struct try_catch_composite
- : composite<catch_eval, Tuple>
- {
- explicit try_catch_composite(
- const Tuple& t)
- :
- composite<catch_eval, Tuple>(t),
- catch_all(*this) { }
-
- try_catch_composite(
- const try_catch_composite& rhs)
- : composite<catch_eval, Tuple>(rhs),
- catch_all(*this) { }
-
- template<typename Exception>
- catch_gen<Exception, try_catch_composite> catch_() const
- {
- return catch_gen<Exception, try_catch_composite>(
- *this);
- }
-
- const catch_all_gen<try_catch_composite> catch_all;
-
- private:
- try_catch_composite& operator=(const try_catch_composite&);
- };
-
- struct try_gen
- {
- template<typename Try>
- try_catch_composite<fusion::vector<Try> > operator[](
- const Try& try_) const
- {
- typedef fusion::vector<Try> tuple_type;
- return try_catch_composite<tuple_type>(
- tuple_type(try_));
- }
- };
-
- try_gen const try_ = try_gen();
-}}
-
-#if defined(BOOST_MSVC)
-# pragma warning(pop)
-#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/statement/while.hpp b/3party/boost/boost/spirit/home/phoenix/statement/while.hpp
deleted file mode 100644
index 96b988c291..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/statement/while.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
-
- 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 PHOENIX_STATEMENT_WHILE_HPP
-#define PHOENIX_STATEMENT_WHILE_HPP
-
-#include <boost/spirit/home/phoenix/core/composite.hpp>
-#include <boost/spirit/home/phoenix/core/compose.hpp>
-
-namespace boost { namespace phoenix
-{
- struct while_eval
- {
- template <typename Env, typename Cond, typename Do>
- struct result
- {
- typedef void type;
- };
-
- template <typename RT, typename Env, typename Cond, typename Do>
- static void
- eval(Env const& env, Cond& cond, Do& do_)
- {
- while (cond.eval(env))
- do_.eval(env);
- }
- };
-
- template <typename Cond>
- struct while_gen
- {
- while_gen(Cond const& cond)
- : cond(cond) {}
-
- template <typename Do>
- actor<typename as_composite<while_eval, Cond, Do>::type>
- operator[](Do const& do_) const
- {
- return compose<while_eval>(cond, do_);
- }
-
- Cond cond;
- };
-
- template <typename Cond>
- inline while_gen<Cond>
- while_(Cond const& cond)
- {
- return while_gen<Cond>(cond);
- }
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl.hpp b/3party/boost/boost/spirit/home/phoenix/stl.hpp
deleted file mode 100644
index 12832f7d9c..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-/*=============================================================================
- Copyright (c) 2006 Daniel Wallin
- Copyright (c) 2005 Dan Marsden
- Copyright (c) 2007 Joel de Guzman
-
- 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 PHOENIX_STL_HPP
-#define PHOENIX_STL_HPP
-
-#include <boost/spirit/home/phoenix/stl/algorithm.hpp>
-#include <boost/spirit/home/phoenix/stl/container.hpp>
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm.hpp
deleted file mode 100644
index 01f4f9d15e..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/*=============================================================================
- Copyright (c) 2004 Angus Leeming
- Copyright (c) 2006 Daniel Wallin
- Copyright (c) 2005 Dan Marsden
- Copyright (c) 2007 Joel de Guzman
-
- 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 PHOENIX_STL_ALGORITHM_HPP
-#define PHOENIX_STL_ALGORITHM_HPP
-
-#include <boost/spirit/home/phoenix/stl/algorithm/iteration.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/querying.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/transformation.hpp>
-
-#endif // PHOENIX_STL_ALGORITHM_HPP
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/begin.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/begin.hpp
deleted file mode 100644
index 165aae87a3..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/begin.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-
-#ifndef PHOENIX_ALGORITHM_DETAIL_BEGIN_HPP
-#define PHOENIX_ALGORITHM_DETAIL_BEGIN_HPP
-
-#include <boost/range/result_iterator.hpp>
-#include <boost/range/begin.hpp>
-
-namespace boost { namespace phoenix {
-namespace detail
-{
- template<class R>
- typename range_result_iterator<R>::type
- begin_(R& r)
- {
- return boost::begin(r);
- }
-}
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/decay_array.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/decay_array.hpp
deleted file mode 100644
index 1ea263d851..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/decay_array.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-
-#ifndef PHOENIX_ALGORITHM_DETAIL_DECAY_ARRAY_HPP
-#define PHOENIX_ALGORITHM_DETAIL_DECAY_ARRAY_HPP
-
-namespace boost { namespace phoenix {
-namespace detail
-{
- template<typename T>
- struct decay_array
- {
- typedef T type;
- };
-
- template<typename T, int N>
- struct decay_array<T[N]>
- {
- typedef T* type;
- };
-}
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/end.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/end.hpp
deleted file mode 100644
index 4386d3a9da..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/end.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-
-#ifndef PHOENIX_ALGORITHM_DETAIL_END_HPP
-#define PHOENIX_ALGORITHM_DETAIL_END_HPP
-
-#include <boost/range/result_iterator.hpp>
-#include <boost/range/end.hpp>
-
-namespace boost { namespace phoenix {
-namespace detail
-{
- template<class R>
- typename range_result_iterator<R>::type
- end_(R& r)
- {
- return boost::end(r);
- }
-}
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_equal_range.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_equal_range.hpp
deleted file mode 100644
index 1f7dcce252..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_equal_range.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_equal_range.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-#pragma once
-#endif
-
-#ifndef HAS_EQUAL_RANGE_EN_14_12_2004
-#define HAS_EQUAL_RANGE_EN_14_12_2004
-
-#include <boost/mpl/or.hpp>
-#include "./is_std_map.hpp"
-#include "./is_std_set.hpp"
-#include "./is_std_hash_map.hpp"
-#include "./is_std_hash_set.hpp"
-
-namespace boost
-{
- // Specialize this for user-defined types
- template<typename T>
- struct has_equal_range
- : boost::mpl::or_<
- boost::mpl::or_<
- is_std_map<T>
- , is_std_multimap<T>
- , is_std_set<T>
- , is_std_multiset<T>
- >
- , boost::mpl::or_<
- is_std_hash_map<T>
- , is_std_hash_multimap<T>
- , is_std_hash_set<T>
- , is_std_hash_multiset<T>
- >
- >
- {
- };
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_find.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_find.hpp
deleted file mode 100644
index 3768dd5c43..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_find.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_find.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-#pragma once
-#endif
-
-#ifndef HAS_FIND_EN_14_12_2004
-#define HAS_FIND_EN_14_12_2004
-
-#include <boost/mpl/or.hpp>
-#include "./is_std_map.hpp"
-#include "./is_std_set.hpp"
-#include "./is_std_hash_map.hpp"
-#include "./is_std_hash_set.hpp"
-
-namespace boost
-{
- // Specialize this for user-defined types
- template<typename T>
- struct has_find
- : boost::mpl::or_<
- boost::mpl::or_<
- is_std_map<T>
- , is_std_multimap<T>
- , is_std_set<T>
- , is_std_multiset<T>
- >
- , boost::mpl::or_<
- is_std_hash_map<T>
- , is_std_hash_multimap<T>
- , is_std_hash_set<T>
- , is_std_hash_multiset<T>
- >
- >
- {
- };
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_lower_bound.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_lower_bound.hpp
deleted file mode 100644
index c1d47e2927..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_lower_bound.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_lower_bound.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-#pragma once
-#endif
-
-#ifndef HAS_LOWER_BOUND_EN_14_12_2004
-#define HAS_LOWER_BOUND_EN_14_12_2004
-
-#include <boost/mpl/or.hpp>
-#include "./is_std_map.hpp"
-#include "./is_std_set.hpp"
-#include "./is_std_hash_map.hpp"
-#include "./is_std_hash_set.hpp"
-
-namespace boost
-{
- // Specialize this for user-defined types
- template<typename T>
- struct has_lower_bound
- : boost::mpl::or_<
- boost::mpl::or_<
- is_std_map<T>
- , is_std_multimap<T>
- , is_std_set<T>
- , is_std_multiset<T>
- >
- , boost::mpl::or_<
- is_std_hash_map<T>
- , is_std_hash_multimap<T>
- , is_std_hash_set<T>
- , is_std_hash_multiset<T>
- >
- >
- {
- };
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove.hpp
deleted file mode 100644
index e86c87c75e..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_remove.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-#pragma once
-#endif
-
-#ifndef HAS_REMOVE_EN_14_12_2004
-#define HAS_REMOVE_EN_14_12_2004
-
-#include "./is_std_list.hpp"
-
-namespace boost
-{
- // Specialize this for user-defined types
- template<typename T>
- struct has_remove
- : is_std_list<T>
- {
- };
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove_if.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove_if.hpp
deleted file mode 100644
index 99ce7cd8aa..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove_if.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_remove_if.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-#pragma once
-#endif
-
-#ifndef HAS_REMOVE_IF_EN_14_12_2004
-#define HAS_REMOVE_IF_EN_14_12_2004
-
-#include "./is_std_list.hpp"
-
-namespace boost
-{
- // Specialize this for user-defined types
- template<typename T>
- struct has_remove_if
- : is_std_list<T>
- {
- };
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_reverse.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_reverse.hpp
deleted file mode 100644
index e74bcabf5a..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_reverse.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_reverse.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-#pragma once
-#endif
-
-#ifndef HAS_REVERSE_EN_14_12_2004
-#define HAS_REVERSE_EN_14_12_2004
-
-#include "./is_std_list.hpp"
-
-namespace boost
-{
- // Specialize this for user-defined types
- template<typename T>
- struct has_reverse
- : is_std_list<T>
- {
- };
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_sort.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_sort.hpp
deleted file mode 100644
index fa9edc923f..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_sort.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_sort.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-#pragma once
-#endif
-
-#ifndef HAS_SORT_EN_14_12_2004
-#define HAS_SORT_EN_14_12_2004
-
-#include "./is_std_list.hpp"
-
-namespace boost
-{
- // Specialize this for user-defined types
- template<typename T>
- struct has_sort
- : is_std_list<T>
- {
- };
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_unique.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_unique.hpp
deleted file mode 100644
index 35dcd3c96b..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_unique.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_unique.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-#pragma once
-#endif
-
-#ifndef HAS_UNIQUE_EN_14_12_2004
-#define HAS_UNIQUE_EN_14_12_2004
-
-#include "./is_std_list.hpp"
-
-namespace boost
-{
- // Specialize this for user-defined types
- template<typename T>
- struct has_unique
- : is_std_list<T>
- {
- };
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_upper_bound.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_upper_bound.hpp
deleted file mode 100644
index 995c28c01e..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/has_upper_bound.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_upper_bound.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-#pragma once
-#endif
-
-#ifndef HAS_UPPER_BOUND_EN_14_12_2004
-#define HAS_UPPER_BOUND_EN_14_12_2004
-
-#include <boost/mpl/or.hpp>
-#include "./is_std_map.hpp"
-#include "./is_std_set.hpp"
-#include "./is_std_hash_map.hpp"
-#include "./is_std_hash_set.hpp"
-
-namespace boost
-{
- // Specialize this for user-defined types
- template<typename T>
- struct has_upper_bound
- : boost::mpl::or_<
- boost::mpl::or_<
- is_std_map<T>
- , is_std_multimap<T>
- , is_std_set<T>
- , is_std_multiset<T>
- >
- , boost::mpl::or_<
- is_std_hash_map<T>
- , is_std_hash_multimap<T>
- , is_std_hash_set<T>
- , is_std_hash_multiset<T>
- >
- >
- {
- };
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_map.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_map.hpp
deleted file mode 100644
index 9d4895c35d..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_map.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// is_std_hash_map.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-# pragma once
-#endif
-
-#ifndef IS_STD_HASH_MAP_EN_16_12_2004
-#define IS_STD_HASH_MAP_EN_16_12_2004
-
-#include <boost/mpl/bool.hpp>
-#include "./std_hash_map_fwd.hpp"
-
-namespace boost
-{
- template<class T>
- struct is_std_hash_map
- : boost::mpl::false_
- {};
-
- template<class T>
- struct is_std_hash_multimap
- : boost::mpl::false_
- {};
-
-#ifdef BOOST_HAS_HASH
-
- template<
- class Kty
- , class Ty
- , class Hash
- , class Cmp
- , class Alloc
- >
- struct is_std_hash_map< ::BOOST_STD_EXTENSION_NAMESPACE::hash_map<Kty,Ty,Hash,Cmp,Alloc> >
- : boost::mpl::true_
- {};
-
- template<
- class Kty
- , class Ty
- , class Hash
- , class Cmp
- , class Alloc
- >
- struct is_std_hash_multimap< ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<Kty,Ty,Hash,Cmp,Alloc> >
- : boost::mpl::true_
- {};
-
-#elif defined(BOOST_DINKUMWARE_STDLIB)
-
- template<
- class Kty
- , class Ty
- , class Tr
- , class Alloc
- >
- struct is_std_hash_map< ::BOOST_STD_EXTENSION_NAMESPACE::hash_map<Kty,Ty,Tr,Alloc> >
- : boost::mpl::true_
- {};
-
- template<
- class Kty
- , class Ty
- , class Tr
- , class Alloc
- >
- struct is_std_hash_multimap< ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<Kty,Ty,Tr,Alloc> >
- : boost::mpl::true_
- {};
-
-#endif
-
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_set.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_set.hpp
deleted file mode 100644
index ece3173152..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_set.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// is_std_hash_set.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-# pragma once
-#endif
-
-#ifndef IS_STD_HASH_SET_EN_16_12_2004
-#define IS_STD_HASH_SET_EN_16_12_2004
-
-#include <boost/mpl/bool.hpp>
-#include "./std_hash_set_fwd.hpp"
-
-namespace boost
-{
- template<class T>
- struct is_std_hash_set
- : boost::mpl::false_
- {};
-
- template<class T>
- struct is_std_hash_multiset
- : boost::mpl::false_
- {};
-
-#if defined(BOOST_HAS_HASH)
-
- template<
- class Kty
- , class Hash
- , class Cmp
- , class Alloc
- >
- struct is_std_hash_set< ::BOOST_STD_EXTENSION_NAMESPACE::hash_set<Kty,Hash,Cmp,Alloc> >
- : boost::mpl::true_
- {};
-
- template<
- class Kty
- , class Hash
- , class Cmp
- , class Alloc
- >
- struct is_std_hash_multiset< ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<Kty,Hash,Cmp,Alloc> >
- : boost::mpl::true_
- {};
-
-#elif defined(BOOST_DINKUMWARE_STDLIB)
-
- template<
- class Kty
- , class Tr
- , class Alloc
- >
- struct is_std_hash_set< ::BOOST_STD_EXTENSION_NAMESPACE::hash_set<Kty,Tr,Alloc> >
- : boost::mpl::true_
- {};
-
- template<
- class Kty
- , class Tr
- , class Alloc
- >
- struct is_std_hash_multiset< ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<Kty,Tr,Alloc> >
- : boost::mpl::true_
- {};
-
-#endif
-
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_list.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_list.hpp
deleted file mode 100644
index 8317e51b9b..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_list.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// is_std_list.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-# pragma once
-#endif
-
-#ifndef IS_STD_LIST_EN_16_12_2004
-#define IS_STD_LIST_EN_16_12_2004
-
-#include <boost/mpl/bool.hpp>
-#include <boost/detail/container_fwd.hpp>
-
-namespace boost
-{
- template<class T>
- struct is_std_list
- : boost::mpl::false_
- {};
-
- template<
- class Ty
- , class Alloc
- >
- struct is_std_list< ::std::list<Ty,Alloc> >
- : boost::mpl::true_
- {};
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_map.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_map.hpp
deleted file mode 100644
index 2b0723114f..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_map.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// is_std_map.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-# pragma once
-#endif
-
-#ifndef IS_STD_MAP_EN_16_12_2004
-#define IS_STD_MAP_EN_16_12_2004
-
-#include <boost/mpl/bool.hpp>
-#include <boost/detail/container_fwd.hpp>
-
-namespace boost
-{
- template<class T>
- struct is_std_map
- : boost::mpl::false_
- {};
-
- template<
- class Kty
- , class Ty
- , class Pr
- , class Alloc
- >
- struct is_std_map< ::std::map<Kty,Ty,Pr,Alloc> >
- : boost::mpl::true_
- {};
-
- template<class T>
- struct is_std_multimap
- : boost::mpl::false_
- {};
-
- template<
- class Kty
- , class Ty
- , class Pr
- , class Alloc
- >
- struct is_std_multimap< ::std::multimap<Kty,Ty,Pr,Alloc> >
- : boost::mpl::true_
- {};
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_set.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_set.hpp
deleted file mode 100644
index 43eb25892f..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_set.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// is_std_set.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-# pragma once
-#endif
-
-#ifndef IS_STD_SET_EN_16_12_2004
-#define IS_STD_SET_EN_16_12_2004
-
-#include <boost/mpl/bool.hpp>
-#include <boost/detail/container_fwd.hpp>
-
-namespace boost
-{
- template<class T>
- struct is_std_set
- : boost::mpl::false_
- {};
-
- template<
- class Kty
- , class Pr
- , class Alloc
- >
- struct is_std_set< ::std::set<Kty,Pr,Alloc> >
- : boost::mpl::true_
- {};
-
- template<class T>
- struct is_std_multiset
- : boost::mpl::false_
- {};
-
- template<
- class Kty
- , class Pr
- , class Alloc
- >
- struct is_std_multiset< ::std::multiset<Kty,Pr,Alloc> >
- : boost::mpl::true_
- {};
-}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp
deleted file mode 100644
index 9e21c25d90..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// std_hash_map_fwd.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-# pragma once
-#endif
-
-#ifndef STD_HASH_MAP_FWD_EN_16_12_2004
-#define STD_HASH_MAP_FWD_EN_16_12_2004
-
-#include <boost/config.hpp>
-
-#if defined(BOOST_HAS_HASH)
-
-namespace BOOST_STD_EXTENSION_NAMESPACE
-{
- template<
- class Kty
- , class Ty
- , class Hash
- , class Cmp
- , class Alloc
- >
- class hash_map;
-
- template<
- class Kty
- , class Ty
- , class Hash
- , class Cmp
- , class Alloc
- >
- class hash_multimap;
-}
-
-#elif defined(BOOST_DINKUMWARE_STDLIB)
-
-namespace BOOST_STD_EXTENSION_NAMESPACE
-{
- template<
- class Kty
- , class Ty
- , class Tr
- , class Alloc
- >
- class hash_map;
-
- template<
- class Kty
- , class Ty
- , class Tr
- , class Alloc
- >
- class hash_multimap;
-}
-
-#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_set_fwd.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_set_fwd.hpp
deleted file mode 100644
index 76083f4db3..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_set_fwd.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-///////////////////////////////////////////////////////////////////////////////
-//
-// std_hash_set_fwd.hpp
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && _MSC_VER >= 1000
-# pragma once
-#endif
-
-#ifndef STD_HASH_SET_FWD_EN_16_12_2004
-#define STD_HASH_SET_FWD_EN_16_12_2004
-
-#include <boost/config.hpp>
-
-#if defined(BOOST_HAS_HASH)
-
-namespace BOOST_STD_EXTENSION_NAMESPACE
-{
- template<
- class Kty
- , class Hash
- , class Cmp
- , class Alloc
- >
- class hash_set;
-
- template<
- class Kty
- , class Hash
- , class Cmp
- , class Alloc
- >
- class hash_multiset;
-}
-
-#elif defined(BOOST_DINKUMWARE_STDLIB)
-
-namespace BOOST_STD_EXTENSION_NAMESPACE
-{
- template<
- class Kty
- , class Tr
- , class Alloc
- >
- class hash_set;
-
- template<
- class Kty
- , class Tr
- , class Alloc
- >
- class hash_multiset;
-}
-
-#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/iteration.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/iteration.hpp
deleted file mode 100644
index c11905e738..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/iteration.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-// Copyright 2005 Dan Marsden.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-
-#ifndef PHOENIX_ALGORITHM_ITERATION_HPP
-#define PHOENIX_ALGORITHM_ITERATION_HPP
-
-#include <algorithm>
-#include <numeric>
-
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/begin.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/end.hpp>
-
-#include <boost/spirit/home/phoenix/function/function.hpp>
-
-namespace boost { namespace phoenix {
-namespace impl
-{
- struct for_each
- {
- template<class R, class F>
- struct result
- {
- typedef F type;
- };
-
- template<class R, class F>
- F operator()(R& r, F fn) const
- {
- return std::for_each(detail::begin_(r), detail::end_(r), fn);
- }
- };
-
- struct accumulate
- {
- template<class R, class I, class C = void>
- struct result
- {
- typedef I type;
- };
-
- template<class R, class I>
- typename result<R,I>::type
- operator()(R& r, I i) const
- {
- return std::accumulate(detail::begin_(r), detail::end_(r), i);
- }
-
- template<class R, class I, class C>
- typename result<R,I,C>::type
- operator()(R& r, I i, C c) const
- {
- return std::accumulate(detail::begin_(r), detail::end_(r), i, c);
- }
- };
-}
-
-function<impl::for_each> const for_each = impl::for_each();
-function<impl::accumulate> const accumulate = impl::accumulate();
-
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/querying.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/querying.hpp
deleted file mode 100644
index 87456fd7ff..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/querying.hpp
+++ /dev/null
@@ -1,502 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-// Copyright 2005 Dan Marsden.
-// Copyright 2008 Hartmut Kaiser.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-
-#ifndef PHOENIX_ALGORITHM_QUERYING_HPP
-#define PHOENIX_ALGORITHM_QUERYING_HPP
-
-#include <algorithm>
-
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_find.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_lower_bound.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_upper_bound.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_equal_range.hpp>
-
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/begin.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/end.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/decay_array.hpp>
-
-#include <boost/spirit/home/phoenix/function/function.hpp>
-
-#include <boost/range/result_iterator.hpp>
-#include <boost/range/difference_type.hpp>
-
-namespace boost { namespace phoenix {
-namespace impl
-{
- struct find
- {
- template<class R, class T>
- struct result : range_result_iterator<R>
- {};
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& x, mpl::true_) const
- {
- return r.find(x);
- }
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& x, mpl::false_) const
- {
- return std::find(detail::begin_(r), detail::end_(r), x);
- }
-
- template<class R, class T>
- typename result<R, T>::type operator()(R& r, T const& x) const
- {
- return execute(r, x, has_find<R>());
- }
- };
-
- struct find_if
- {
- template<class R, class P>
- struct result : range_result_iterator<R>
- {};
-
- template<class R, class P>
- typename result<R, P>::type operator()(R& r, P p) const
- {
- return std::find_if(detail::begin_(r), detail::end_(r), p);
- }
- };
-
- struct find_end
- {
- template<class R, class R2, class P = void>
- struct result : range_result_iterator<R>
- {};
-
- template<class R, class R2>
- typename result<R, R2>::type operator()(R& r, R2& r2) const
- {
- return std::find_end(
- detail::begin_(r)
- , detail::end_(r)
- , detail::begin_(r2)
- , detail::end_(r2)
- );
- }
-
- template<class R, class R2, class P>
- typename result<R, R2, P>::type operator()(R& r, R2& r2, P p) const
- {
- return std::find_end(
- detail::begin_(r)
- , detail::end_(r)
- , detail::begin_(r2)
- , detail::end_(r2)
- , p
- );
- }
- };
-
- struct find_first_of
- {
- template<class R, class R2, class P = void>
- struct result : range_result_iterator<R>
- {};
-
- template<class R, class R2>
- typename result<R, R2>::type operator()(R& r, R2& r2) const
- {
- return std::find_first_of(
- detail::begin_(r)
- , detail::end_(r)
- , detail::begin_(r2)
- , detail::end_(r2)
- );
- }
-
- template<class R, class R2, class P>
- typename result<R, R2, P>::type operator()(R& r, R2& r2, P p) const
- {
- return std::find_first_of(
- detail::begin_(r)
- , detail::end_(r)
- , detail::begin_(r2)
- , detail::end_(r2)
- , p
- );
- }
- };
-
- struct adjacent_find
- {
- template<class R, class P = void>
- struct result : range_result_iterator<R>
- {};
-
- template<class R>
- typename result<R>::type operator()(R& r) const
- {
- return std::adjacent_find(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class P>
- typename result<R, P>::type operator()(R& r, P p) const
- {
- return std::adjacent_find(detail::begin_(r), detail::end_(r), p);
- }
- };
-
- struct count
- {
- template<class R, class T>
- struct result : range_difference<R>
- {};
-
- template<class R, class T>
- typename result<R, T>::type operator()(R& r, T const& x) const
- {
- return std::count(detail::begin_(r), detail::end_(r), x);
- }
- };
-
- struct count_if
- {
- template<class R, class P>
- struct result : range_difference<R>
- {};
-
- template<class R, class P>
- typename result<R, P>::type operator()(R& r, P p) const
- {
- return std::count_if(detail::begin_(r), detail::end_(r), p);
- }
- };
-
- struct distance
- {
- template<class R>
- struct result : range_difference<R>
- {};
-
- template<class R>
- typename result<R>::type operator()(R& r) const
- {
- return std::distance(detail::begin_(r), detail::end_(r));
- }
- };
-
- struct equal
- {
- template<class R, class I, class P = void>
- struct result
- {
- typedef bool type;
- };
-
- template<class R, class I>
- bool operator()(R& r, I i) const
- {
- return std::equal(detail::begin_(r), detail::end_(r), i);
- }
-
- template<class R, class I, class P>
- bool operator()(R& r, I i, P p) const
- {
- return std::equal(detail::begin_(r), detail::end_(r), i, p);
- }
- };
-
- struct search
- {
- template<class R, class R2, class P = void>
- struct result : range_result_iterator<R>
- {};
-
- template<class R, class R2>
- typename result<R, R2>::type operator()(R& r, R2& r2) const
- {
- return std::search(
- detail::begin_(r)
- , detail::end_(r)
- , detail::begin_(r2)
- , detail::end_(r2)
- );
- }
-
- template<class R, class R2, class P>
- typename result<R, R2, P>::type operator()(R& r, R2& r2, P p) const
- {
- return std::search(
- detail::begin_(r)
- , detail::end_(r)
- , detail::begin_(r2)
- , detail::end_(r2)
- , p
- );
- }
- };
-
- struct lower_bound
- {
- template<class R, class T, class C = void>
- struct result : range_result_iterator<R>
- {};
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& val, mpl::true_) const
- {
- return r.lower_bound(val);
- }
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& val, mpl::false_) const
- {
- return std::lower_bound(detail::begin_(r), detail::end_(r), val);
- }
-
- template<class R, class T>
- typename result<R, T>::type operator()(R& r, T const& val) const
- {
- return execute(r, val, has_lower_bound<R>());
- }
-
- template<class R, class T, class C>
- typename result<R, T>::type operator()(R& r, T const& val, C c) const
- {
- return std::lower_bound(detail::begin_(r), detail::end_(r), val, c);
- }
- };
-
- struct upper_bound
- {
- template<class R, class T, class C = void>
- struct result : range_result_iterator<R>
- {};
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& val, mpl::true_) const
- {
- return r.upper_bound(val);
- }
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& val, mpl::false_) const
- {
- return std::upper_bound(detail::begin_(r), detail::end_(r), val);
- }
-
- template<class R, class T>
- typename result<R, T>::type operator()(R& r, T const& val) const
- {
- return execute(r, val, has_upper_bound<R>());
- }
-
- template<class R, class T, class C>
- typename result<R, T>::type operator()(R& r, T const& val, C c) const
- {
- return std::upper_bound(detail::begin_(r), detail::end_(r), val, c);
- }
- };
-
- struct equal_range
- {
- template<class R, class T, class C = void>
- struct result
- {
- typedef std::pair<
- typename range_result_iterator<R>::type
- , typename range_result_iterator<R>::type
- > type;
- };
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& val, mpl::true_) const
- {
- return r.equal_range(val);
- }
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& val, mpl::false_) const
- {
- return std::equal_range(detail::begin_(r), detail::end_(r), val);
- }
-
- template<class R, class T>
- typename result<R, T>::type operator()(R& r, T const& val) const
- {
- return execute(r, val, has_equal_range<R>());
- }
-
- template<class R, class T, class C>
- typename result<R, T>::type operator()(R& r, T const& val, C c) const
- {
- return std::equal_range(detail::begin_(r), detail::end_(r), val, c);
- }
- };
-
- struct mismatch
- {
- template<class R, class I, class P = void>
- struct result
- {
- typedef std::pair<
- typename range_result_iterator<R>::type
- , typename detail::decay_array<I>::type
- > type;
- };
-
- template<class R, class I>
- typename result<R, I>::type operator()(R& r, I i) const
- {
- return std::mismatch(detail::begin_(r), detail::end_(r), i);
- }
-
- template<class R, class I, class P>
- typename result<R, I, P>::type operator()(R& r, I i, P p) const
- {
- return std::mismatch(detail::begin_(r), detail::end_(r), i, p);
- }
- };
-
- struct binary_search
- {
- template<class R, class T, class C = void>
- struct result
- {
- typedef bool type;
- };
-
- template<class R, class T>
- bool operator()(R& r, T const& val) const
- {
- return std::binary_search(detail::begin_(r), detail::end_(r), val);
- }
-
- template<class R, class T, class C>
- bool operator()(R& r, T const& val, C c) const
- {
- return std::binary_search(detail::begin_(r), detail::end_(r), val, c);
- }
- };
-
- struct includes
- {
- template<class R1, class R2, class C = void>
- struct result
- {
- typedef bool type;
- };
-
- template<class R1, class R2>
- bool operator()(R1& r1, R2& r2) const
- {
- return std::includes(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- );
- }
-
- template<class R1, class R2, class C>
- bool operator()(R1& r1, R2& r2, C c) const
- {
- return std::includes(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , c
- );
- }
- };
-
- struct min_element
- {
- template<class R, class P = void>
- struct result : range_result_iterator<R>
- {};
-
- template<class R>
- typename result<R>::type operator()(R& r) const
- {
- return std::min_element(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class P>
- typename result<R, P>::type operator()(R& r, P p) const
- {
- return std::min_element(detail::begin_(r), detail::end_(r), p);
- }
- };
-
- struct max_element
- {
- template<class R, class P = void>
- struct result : range_result_iterator<R>
- {};
-
- template<class R>
- typename result<R>::type operator()(R& r) const
- {
- return std::max_element(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class P>
- typename result<R, P>::type operator()(R& r, P p) const
- {
- return std::max_element(detail::begin_(r), detail::end_(r), p);
- }
- };
-
- struct lexicographical_compare
- {
- template<class R1, class R2, class P = void>
- struct result
- {
- typedef bool type;
- };
-
- template<class R1, class R2>
- typename result<R1, R2>::type operator()(R1& r1, R2& r2) const
- {
- return std::lexicographical_compare(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- );
- }
-
- template<class R1, class R2, class P>
- typename result<R1, R2>::type operator()(R1& r1, R2& r2, P p) const
- {
- return std::lexicographical_compare(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , p
- );
- }
- };
-
-}
-
-function<impl::find> const find = impl::find();
-function<impl::find_if> const find_if = impl::find_if();
-function<impl::find_end> const find_end = impl::find_end();
-function<impl::find_first_of> const find_first_of = impl::find_first_of();
-function<impl::adjacent_find> const adjacent_find = impl::adjacent_find();
-function<impl::count> const count = impl::count();
-function<impl::count_if> const count_if = impl::count_if();
-function<impl::distance> const distance = impl::distance();
-function<impl::equal> const equal = impl::equal();
-function<impl::search> const search = impl::search();
-function<impl::lower_bound> const lower_bound = impl::lower_bound();
-function<impl::upper_bound> const upper_bound = impl::upper_bound();
-function<impl::equal_range> const equal_range = impl::equal_range();
-function<impl::mismatch> const mismatch = impl::mismatch();
-function<impl::binary_search> const binary_search = impl::binary_search();
-function<impl::includes> const includes = impl::includes();
-function<impl::min_element> const min_element = impl::min_element();
-function<impl::max_element> const max_element = impl::max_element();
-function<impl::lexicographical_compare> const lexicographical_compare = impl::lexicographical_compare();
-
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/transformation.hpp b/3party/boost/boost/spirit/home/phoenix/stl/algorithm/transformation.hpp
deleted file mode 100644
index 7405be7885..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/algorithm/transformation.hpp
+++ /dev/null
@@ -1,1071 +0,0 @@
-// Copyright 2005 Daniel Wallin.
-// Copyright 2005 Joel de Guzman.
-// Copyright 2005 Dan Marsden.
-//
-// 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)
-//
-// Modeled after range_ex, Copyright 2004 Eric Niebler
-
-#ifndef PHOENIX_ALGORITHM_TRANSFORMATION_HPP
-#define PHOENIX_ALGORITHM_TRANSFORMATION_HPP
-
-#include <algorithm>
-#include <numeric>
-
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_sort.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_remove.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_remove_if.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_unique.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_reverse.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/has_sort.hpp>
-
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/begin.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/end.hpp>
-#include <boost/spirit/home/phoenix/stl/algorithm/detail/decay_array.hpp>
-
-#include <boost/spirit/home/phoenix/function/function.hpp>
-
-#include <boost/range/result_iterator.hpp>
-#include <boost/range/difference_type.hpp>
-
-#include <boost/mpl/if.hpp>
-
-#include <boost/type_traits/is_void.hpp>
-
-namespace boost { namespace phoenix { namespace impl
-{
- struct swap
- {
- template <class A, class B>
- struct result
- {
- typedef void type;
- };
-
- template <class A, class B>
- void operator()(A& a, B& b) const
- {
- using std::swap;
- swap(a, b);
- }
- };
-
- struct copy
- {
- template<class R, class I>
- struct result
- : detail::decay_array<I>
- {};
-
- template<class R, class I>
- typename result<R,I>::type
- operator()(R& r, I i) const
- {
- return std::copy(detail::begin_(r), detail::end_(r), i);
- }
- };
-
- struct copy_backward
- {
- template<class R, class I>
- struct result
- {
- typedef I type;
- };
-
- template<class R, class I>
- I operator()(R& r, I i) const
- {
- return std::copy_backward(detail::begin_(r), detail::end_(r), i);
- }
- };
-
- struct transform
- {
- template<class R, class OutorI1, class ForOut, class BinF = void>
- struct result
- : detail::decay_array<
- typename mpl::if_<is_void<BinF>, OutorI1, ForOut>::type>
- {
- };
-
- template<class R, class O, class F>
- typename result<R,O,F>::type
- operator()(R& r, O o, F f) const
- {
- return std::transform(detail::begin_(r), detail::end_(r), o, f);
- }
-
- template<class R, class I, class O, class F>
- typename result<R,I,O,F>::type
- operator()(R& r, I i, O o, F f) const
- {
- return std::transform(detail::begin_(r), detail::end_(r), i, o, f);
- }
- };
-
- struct replace
- {
- template<class R, class T, class T2>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class T>
- void operator()(R& r, T const& what, T const& with) const
- {
- std::replace(detail::begin_(r), detail::end_(r), what, with);
- }
- };
-
- struct replace_if
- {
- template<class R, class P, class T>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class P, class T>
- void operator()(R& r, P p, T const& with) const
- {
- std::replace_if(detail::begin_(r), detail::end_(r), p, with);
- }
- };
-
- struct replace_copy
- {
- template<class R, class O, class T, class T2>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R, class O, class T>
- typename result<R,O,T,T>::type
- operator()(R& r, O o, T const& what, T const& with) const
- {
- return std::replace_copy(detail::begin_(r), detail::end_(r), o, what, with);
- }
- };
-
- struct replace_copy_if
- {
- template<class R, class O, class P, class T>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R, class O, class P, class T>
- typename result<R,O,P,T>::type
- operator()(R& r, O o, P p, T const& with) const
- {
- return std::replace_copy_if(detail::begin_(r), detail::end_(r), o, p, with);
- }
- };
-
- struct fill
- {
- template<class R, class T>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class T>
- void operator()(R& r, T const& x) const
- {
- std::fill(detail::begin_(r), detail::end_(r), x);
- }
- };
-
- struct fill_n
- {
- template<class R, class N, class T>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class N, class T>
- void operator()(R& r, N n, T const& x) const
- {
- std::fill_n(detail::begin_(r), n, x);
- }
- };
-
- struct generate
- {
- template<class R, class G>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class G>
- void operator()(R& r, G g) const
- {
- std::generate(detail::begin_(r), detail::end_(r), g);
- }
- };
-
- struct generate_n
- {
- template<class R, class N, class G>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class N, class G>
- void operator()(R& r, N n, G g) const
- {
- std::generate_n(detail::begin_(r), n, g);
- }
- };
-
- struct remove
- {
- template<class R, class T>
- struct result : range_result_iterator<R>
- {
- };
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& x, mpl::true_) const
- {
- r.remove(x);
- return detail::end_(r);
- }
-
- template<class R, class T>
- typename result<R, T>::type execute(R& r, T const& x, mpl::false_) const
- {
- return std::remove(detail::begin_(r), detail::end_(r), x);
- }
-
- template<class R, class T>
- typename result<R, T>::type operator()(R& r, T const& x) const
- {
- return execute(r, x, has_remove<R>());
- }
- };
-
- struct remove_if
- {
- template<class R, class P>
- struct result : range_result_iterator<R>
- {
- };
-
- template<class R, class P>
- typename result<R, P>::type execute(R& r, P p, mpl::true_) const
- {
- r.remove_if(p);
- return detail::end_(r);
- }
-
- template<class R, class P>
- typename result<R, P>::type execute(R& r, P p, mpl::false_) const
- {
- return std::remove_if(detail::begin_(r), detail::end_(r), p);
- }
-
- template<class R, class P>
- typename result<R, P>::type operator()(R& r, P p) const
- {
- return execute(r, p, has_remove_if<R>());
- }
- };
-
- struct remove_copy
- {
- template<class R, class O, class T>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R, class O, class T>
- typename result<R,O,T>::type
- operator()(R& r, O o, T const& x) const
- {
- return std::remove_copy(detail::begin_(r), detail::end_(r), o, x);
- }
- };
-
- struct remove_copy_if
- {
- template<class R, class O, class P>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R, class O, class P>
- typename result<R,O,P>::type
- operator()(R& r, O o, P p) const
- {
- return std::remove_copy_if(detail::begin_(r), detail::end_(r), o, p);
- }
- };
-
- struct unique
- {
- template<class R, class P = void>
- struct result : range_result_iterator<R>
- {
- };
-
- template<class R>
- typename result<R>::type execute(R& r, mpl::true_) const
- {
- r.unique();
- return detail::end_(r);
- }
-
- template<class R>
- typename result<R>::type execute(R& r, mpl::false_) const
- {
- return std::unique(detail::begin_(r), detail::end_(r));
- }
-
- template<class R>
- typename result<R>::type operator()(R& r) const
- {
- return execute(r, has_unique<R>());
- }
-
-
- template<class R, class P>
- typename result<R>::type execute(R& r, P p, mpl::true_) const
- {
- r.unique(p);
- return detail::end_(r);
- }
-
- template<class R, class P>
- typename result<R, P>::type execute(R& r, P p, mpl::false_) const
- {
- return std::unique(detail::begin_(r), detail::end_(r), p);
- }
-
- template<class R, class P>
- typename result<R, P>::type operator()(R& r, P p) const
- {
- return execute(r, p, has_unique<R>());
- }
- };
-
- struct unique_copy
- {
- template<class R, class O, class P = void>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R, class O>
- typename result<R, O>::type operator()(R& r, O o) const
- {
- return std::unique_copy(
- detail::begin_(r)
- , detail::end_(r)
- , o
- );
- }
-
- template<class R, class O, class P>
- typename result<R, O, P>::type operator()(R& r, O o, P p) const
- {
- return std::unique_copy(
- detail::begin_(r)
- , detail::end_(r)
- , o
- , p
- );
- }
- };
-
- struct reverse
- {
- template<class R>
- struct result
- {
- typedef void type;
- };
-
- template<class R>
- void execute(R& r, mpl::true_) const
- {
- r.reverse();
- }
-
- template<class R>
- void execute(R& r, mpl::false_) const
- {
- std::reverse(detail::begin_(r), detail::end_(r));
- }
-
- template<class R>
- void operator()(R& r) const
- {
- execute(r, has_reverse<R>());
- }
- };
-
- struct reverse_copy
- {
- template<class R, class O>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R, class O>
- typename result<R, O>::type operator()(R& r, O o) const
- {
- return std::reverse_copy(
- detail::begin_(r)
- , detail::end_(r)
- , o
- );
- }
- };
-
- struct rotate
- {
- template<class R, class M>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class M>
- void operator()(R& r, M m) const
- {
- std::rotate(
- detail::begin_(r)
- , m
- , detail::end_(r)
- );
- }
- };
-
- struct rotate_copy
- {
- template<class R, class M, class O>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R, class M, class O>
- typename result<R, M, O>::type operator()(R& r, M m, O o) const
- {
- return std::rotate_copy(
- detail::begin_(r)
- , m
- , detail::end_(r)
- , o
- );
- }
- };
-
- struct random_shuffle
- {
- template<class R, class G = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R>
- void operator()(R& r) const
- {
- return std::random_shuffle(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class G>
- void operator()(R& r, G g) const
- {
- return std::random_shuffle(detail::begin_(r), detail::end_(r), g);
- }
- };
-
- struct partition
- {
- template<class R, class P>
- struct result : range_result_iterator<R>
- {};
-
- template<class R, class P>
- typename result<R, P>::type operator()(R& r, P p) const
- {
- return std::partition(detail::begin_(r), detail::end_(r), p);
- }
- };
-
- struct stable_partition
- {
- template<class R, class P>
- struct result : range_result_iterator<R>
- {};
-
- template<class R, class P>
- typename result<R, P>::type operator()(R& r, P p) const
- {
- return std::stable_partition(detail::begin_(r), detail::end_(r), p);
- }
- };
-
- struct sort
- {
- template<class R, class C = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R>
- void execute(R& r, mpl::true_) const
- {
- r.sort();
- }
-
- template<class R>
- void execute(R& r, mpl::false_) const
- {
- std::sort(detail::begin_(r), detail::end_(r));
- }
-
- template<class R>
- void operator()(R& r) const
- {
- execute(r, has_sort<R>());
- }
-
- template<class R, class C>
- void execute(R& r, C c, mpl::true_) const
- {
- r.sort(c);
- }
-
- template<class R, class C>
- void execute(R& r, C c, mpl::false_) const
- {
- std::sort(detail::begin_(r), detail::end_(r), c);
- }
-
- template<class R, class C>
- void operator()(R& r, C c) const
- {
- execute(r, c, has_sort<R>());
- }
- };
-
- struct stable_sort
- {
- template<class R, class C = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R>
- void operator()(R& r) const
- {
- std::stable_sort(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class C>
- void operator()(R& r, C c) const
- {
- std::stable_sort(detail::begin_(r), detail::end_(r), c);
- }
- };
-
- struct partial_sort
- {
- template<class R, class M, class C = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class M>
- void operator()(R& r, M m) const
- {
- std::partial_sort(detail::begin_(r), m, detail::end_(r));
- }
-
- template<class R, class M, class C>
- void operator()(R& r, M m, C c) const
- {
- std::partial_sort(detail::begin_(r), m, detail::end_(r), c);
- }
- };
-
- struct partial_sort_copy
- {
- template<class R1, class R2, class C = void>
- struct result : range_result_iterator<R2>
- {};
-
- template<class R1, class R2>
- typename result<R1, R2>::type operator()(R1& r1, R2& r2) const
- {
- return std::partial_sort_copy(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- );
- }
-
- template<class R1, class R2, class C>
- typename result<R1, R2>::type operator()(R1& r1, R2& r2, C c) const
- {
- return std::partial_sort_copy(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , c
- );
- }
- };
-
- struct nth_element
- {
- template<class R, class N, class C = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class N>
- void operator()(R& r, N n) const
- {
- return std::nth_element(detail::begin_(r), n, detail::end_(r));
- }
-
- template<class R, class N, class C>
- void operator()(R& r, N n, C c) const
- {
- return std::nth_element(detail::begin_(r), n, detail::end_(r), c);
- }
- };
-
- struct merge
- {
- template<class R1, class R2, class O, class C = void>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R1, class R2, class O>
- typename result<R1, R2, O>::type operator()(R1& r1, R2& r2, O o) const
- {
- return std::merge(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- );
- }
-
- template<class R1, class R2, class O, class C>
- typename result<R1, R2, O, C>::type operator()(R1& r1, R2& r2, O o, C c) const
- {
- return std::merge(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- , c
- );
- }
- };
-
- struct inplace_merge
- {
- template<class R, class M, class C = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R, class M>
- void operator()(R& r, M m) const
- {
- return std::inplace_merge(detail::begin_(r), m, detail::end_(r));
- }
-
- template<class R, class M, class C>
- void operator()(R& r, M m, C c) const
- {
- return std::inplace_merge(detail::begin_(r), m, detail::end_(r), c);
- }
- };
-
- struct next_permutation
- {
- template<class R, class C = void>
- struct result
- {
- typedef bool type;
- };
-
- template<class R>
- bool operator()(R& r) const
- {
- return std::next_permutation(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class C>
- bool operator()(R& r, C c) const
- {
- return std::next_permutation(detail::begin_(r), detail::end_(r), c);
- }
- };
-
- struct prev_permutation
- {
- template<class R, class C = void>
- struct result
- {
- typedef bool type;
- };
-
- template<class R>
- bool operator()(R& r) const
- {
- return std::prev_permutation(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class C>
- bool operator()(R& r, C c) const
- {
- return std::prev_permutation(detail::begin_(r), detail::end_(r), c);
- }
- };
-
-
- struct inner_product
- {
- template<class R, class I, class T, class C1 = void, class C2 = void>
- struct result
- {
- typedef T type;
- };
-
- template<class R, class I, class T>
- typename result<R,I,T>::type
- operator()(R& r, I i, T t) const
- {
- return std::inner_product(
- detail::begin_(r), detail::end_(r), i, t);
- }
-
- template<class R, class I, class T, class C1, class C2>
- typename result<R,I,T,C1,C2>::type
- operator()(R& r, I i, T t, C1 c1, C2 c2) const
- {
- return std::inner_product(
- detail::begin_(r), detail::end_(r), i,
- t, c1, c2);
- }
- };
-
- struct partial_sum
- {
- template<class R, class I, class C = void>
- struct result
- : detail::decay_array<I>
- {};
-
- template<class R, class I>
- typename result<R,I>::type
- operator()(R& r, I i) const
- {
- return std::partial_sum(
- detail::begin_(r), detail::end_(r), i);
- }
-
- template<class R, class I, class C>
- typename result<R,I,C>::type
- operator()(R& r, I i, C c) const
- {
- return std::partial_sum(
- detail::begin_(r), detail::end_(r), i, c);
- }
- };
-
- struct adjacent_difference
- {
- template<class R, class I, class C = void>
- struct result
- : detail::decay_array<I>
- {};
-
- template<class R, class I>
- typename result<R,I>::type
- operator()(R& r, I i) const
- {
- return std::adjacent_difference(
- detail::begin_(r), detail::end_(r), i);
- }
-
- template<class R, class I, class C>
- typename result<R,I,C>::type
- operator()(R& r, I i, C c) const
- {
- return std::adjacent_difference(
- detail::begin_(r), detail::end_(r), i, c);
- }
- };
-
- struct push_heap
- {
- template<class R, class C = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R>
- void operator()(R& r) const
- {
- std::push_heap(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class C>
- void operator()(R& r, C c) const
- {
- std::push_heap(detail::begin_(r), detail::end_(r), c);
- }
- };
-
- struct pop_heap
- {
- template<class R, class C = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R>
- void operator()(R& r) const
- {
- std::pop_heap(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class C>
- void operator()(R& r, C c) const
- {
- std::pop_heap(detail::begin_(r), detail::end_(r), c);
- }
- };
-
- struct make_heap
- {
- template<class R, class C = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R>
- void operator()(R& r) const
- {
- std::make_heap(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class C>
- void operator()(R& r, C c) const
- {
- std::make_heap(detail::begin_(r), detail::end_(r), c);
- }
- };
-
- struct sort_heap
- {
- template<class R, class C = void>
- struct result
- {
- typedef void type;
- };
-
- template<class R>
- void operator()(R& r) const
- {
- std::sort_heap(detail::begin_(r), detail::end_(r));
- }
-
- template<class R, class C>
- void operator()(R& r, C c) const
- {
- std::sort_heap(detail::begin_(r), detail::end_(r), c);
- }
- };
-
- struct set_union
- {
- template<class R1, class R2, class O, class C = void>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R1, class R2, class O>
- typename result<R1, R2, O>::type operator()(R1& r1, R2& r2, O o) const
- {
- return std::set_union(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- );
- }
-
- template<class R1, class R2, class O, class C>
- typename result<R1, R2, O, C>::type operator()(R1& r1, R2& r2, O o, C c) const
- {
- return std::set_union(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- , c
- );
- }
- };
-
- struct set_intersection
- {
- template<class R1, class R2, class O, class C = void>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R1, class R2, class O>
- typename result<R1, R2, O>::type operator()(R1& r1, R2& r2, O o) const
- {
- return std::set_intersection(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- );
- }
-
- template<class R1, class R2, class O, class C>
- typename result<R1, R2, O, C>::type operator()(R1& r1, R2& r2, O o, C c) const
- {
- return std::set_intersection(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- , c
- );
- }
- };
-
- struct set_difference
- {
- template<class R1, class R2, class O, class C = void>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R1, class R2, class O>
- typename result<R1, R2, O>::type operator()(R1& r1, R2& r2, O o) const
- {
- return std::set_difference(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- );
- }
-
- template<class R1, class R2, class O, class C>
- typename result<R1, R2, O, C>::type operator()(R1& r1, R2& r2, O o, C c) const
- {
- return std::set_difference(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- , c
- );
- }
- };
-
- struct set_symmetric_difference
- {
- template<class R1, class R2, class O, class C = void>
- struct result
- : detail::decay_array<O>
- {};
-
- template<class R1, class R2, class O>
- typename result<R1, R2, O>::type operator()(R1& r1, R2& r2, O o) const
- {
- return std::set_symmetric_difference(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- );
- }
-
- template<class R1, class R2, class O, class C>
- typename result<R1, R2, O, C>::type operator()(R1& r1, R2& r2, O o, C c) const
- {
- return std::set_symmetric_difference(
- detail::begin_(r1), detail::end_(r1)
- , detail::begin_(r2), detail::end_(r2)
- , o
- , c
- );
- }
- };
-
-}}} // boost::phoenix::impl
-
-namespace boost { namespace phoenix
-{
- function<impl::swap> const swap = impl::swap();
- function<impl::copy> const copy = impl::copy();
- function<impl::copy_backward> const copy_backward = impl::copy_backward();
- function<impl::transform> const transform = impl::transform();
- function<impl::replace> const replace = impl::replace();
- function<impl::replace_if> const replace_if = impl::replace_if();
- function<impl::replace_copy> const replace_copy = impl::replace_copy();
- function<impl::replace_copy_if> const replace_copy_if = impl::replace_copy_if();
- function<impl::fill> const fill = impl::fill();
- function<impl::fill_n> const fill_n = impl::fill_n();
- function<impl::generate> const generate = impl::generate();
- function<impl::generate_n> const generate_n = impl::generate_n();
- function<impl::remove> const remove = impl::remove();
- function<impl::remove_if> const remove_if = impl::remove_if();
- function<impl::remove_copy> const remove_copy = impl::remove_copy();
- function<impl::remove_copy_if> const remove_copy_if = impl::remove_copy_if();
- function<impl::unique> const unique = impl::unique();
- function<impl::unique_copy> const unique_copy = impl::unique_copy();
- function<impl::reverse> const reverse = impl::reverse();
- function<impl::reverse_copy> const reverse_copy = impl::reverse_copy();
- function<impl::rotate> const rotate = impl::rotate();
- function<impl::rotate_copy> const rotate_copy = impl::rotate_copy();
- function<impl::random_shuffle> const random_shuffle = impl::random_shuffle();
- function<impl::partition> const partition = impl::partition();
- function<impl::stable_partition> const stable_partition = impl::stable_partition();
- function<impl::sort> const sort = impl::sort();
- function<impl::stable_sort> const stable_sort = impl::stable_sort();
- function<impl::partial_sort> const partial_sort = impl::partial_sort();
- function<impl::partial_sort_copy> const partial_sort_copy = impl::partial_sort_copy();
- function<impl::nth_element> const nth_element = impl::nth_element();
- function<impl::merge> const merge = impl::merge();
- function<impl::inplace_merge> const inplace_merge = impl::inplace_merge();
- function<impl::next_permutation> const next_permutation = impl::next_permutation();
- function<impl::prev_permutation> const prev_permutation = impl::prev_permutation();
- function<impl::inner_product> const inner_product = impl::inner_product();
- function<impl::partial_sum> const partial_sum = impl::partial_sum();
- function<impl::adjacent_difference> const adjacent_difference = impl::adjacent_difference();
- function<impl::push_heap> const push_heap = impl::push_heap();
- function<impl::pop_heap> const pop_heap = impl::pop_heap();
- function<impl::make_heap> const make_heap = impl::make_heap();
- function<impl::sort_heap> const sort_heap = impl::sort_heap();
- function<impl::set_union> const set_union = impl::set_union();
- function<impl::set_intersection> const set_intersection = impl::set_intersection();
- function<impl::set_difference> const set_difference = impl::set_difference();
- function<impl::set_symmetric_difference> const set_symmetric_difference = impl::set_symmetric_difference();
-}}
-
-#endif
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/container.hpp b/3party/boost/boost/spirit/home/phoenix/stl/container.hpp
deleted file mode 100644
index 6798fcb434..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/container.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-/*=============================================================================
- Copyright (c) 2004 Angus Leeming
- Copyright (c) 2007 Joel de Guzman
-
- 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 PHOENIX_STL_CONTAINER_HPP
-#define PHOENIX_STL_CONTAINER_HPP
-
-#include <boost/spirit/home/phoenix/stl/container/container.hpp>
-
-#endif // PHOENIX_STL_CONTAINER_HPP
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/container/container.hpp b/3party/boost/boost/spirit/home/phoenix/stl/container/container.hpp
deleted file mode 100644
index 7e043d1d5d..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/container/container.hpp
+++ /dev/null
@@ -1,706 +0,0 @@
-/*=============================================================================
- Copyright (c) 2004 Angus Leeming
- Copyright (c) 2004 Joel de Guzman
-
- 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 PHOENIX_STL_CONTAINER_CONTAINER_HPP
-#define PHOENIX_STL_CONTAINER_CONTAINER_HPP
-
-#include <boost/spirit/home/phoenix/stl/container/detail/container.hpp>
-#include <boost/spirit/home/phoenix/function/function.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/not.hpp>
-#include <boost/mpl/or.hpp>
-#include <boost/type_traits/is_const.hpp>
-
-namespace boost { namespace phoenix
-{
-///////////////////////////////////////////////////////////////////////////////
-//
-// STL container member functions
-//
-// Lazy functions for STL container member functions
-//
-// These functions provide a mechanism for the lazy evaluation of the
-// public member functions of the STL containers. For an overview of
-// what is meant by 'lazy evaluation', see the comments in operators.hpp
-// and functions.hpp.
-//
-// Lazy functions are provided for all of the member functions of the
-// following containers:
-//
-// deque - list - map - multimap - vector.
-//
-// Indeed, should *your* class have member functions with the same names
-// and signatures as those listed below, then it will automatically be
-// supported. To summarize, lazy functions are provided for member
-// functions:
-//
-// assign - at - back - begin - capacity - clear - empty - end -
-// erase - front - get_allocator - insert - key_comp - max_size -
-// pop_back - pop_front - push_back - push_front - rbegin - rend -
-// reserve - resize . size - splice - value_comp.
-//
-// The lazy functions' names are the same as the corresponding member
-// function. Sample usage:
-//
-// "Normal" version "Lazy" version
-// ---------------- --------------
-// my_vector.at(5) phoenix::at(arg1, 5)
-// my_list.size() phoenix::size(arg1)
-// my_vector1.swap(my_vector2) phoenix::swap(arg1, arg2)
-//
-// Notice that member functions with names that clash with a
-// function in stl algorithms are absent. This will be provided
-// in Phoenix's algorithm module.
-//
-// No support is provided here for lazy versions of operator+=,
-// operator[] etc. Such operators are not specific to STL containers and
-// lazy versions can therefore be found in operators.hpp.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Lazy member function implementaions.
-//
-// The structs below provide the guts of the implementation. Thereafter,
-// the corresponding lazy function itself is simply:
-//
-// function<stl::assign> const assign = stl::assign();
-//
-// The structs provide a nested "result" class template whose
-// "type" typedef enables the lazy function to ascertain the type
-// to be returned when it is invoked.
-//
-// They also provide operator() member functions with signatures
-// corresponding to those of the underlying member function of
-// the STL container.
-//
-///////////////////////////////////////////////////////////////////////////////
- namespace stl
- {
- struct assign
- {
- template <
- typename C
- , typename Arg1 = fusion::void_
- , typename Arg2 = fusion::void_
- , typename Arg3 = fusion::void_
- >
- struct result
- {
- typedef typename add_reference<C>::type type;
- };
-
- template <typename C, typename Arg1>
- C& operator()(C& c, Arg1 const& arg1) const
- {
- c.assign(arg1);
- return c;
- }
-
- template <typename C, typename Arg1, typename Arg2>
- C& operator()(C& c, Arg1 const& arg1, Arg2 const& arg2) const
- {
- c.assign(arg1, arg2);
- return c;
- }
-
- template <typename C, typename Arg1, typename Arg2, typename Arg3>
- C& operator()(
- C& c
- , Arg1 const& arg1
- , Arg2 const& arg2
- , Arg3 const& arg3) const
- {
- return c.assign(arg1, arg2, arg3);
- }
- };
-
- struct at
- {
- template <typename C, typename Index>
- struct result
- {
- typedef typename const_qualified_reference_of<C>::type type;
- };
-
- template <typename C, typename Index>
- typename result<C, Index>::type
- operator()(C& c, Index const& i) const
- {
- return c.at(i);
- }
- };
-
- struct back
- {
- template <typename C>
- struct result
- {
- typedef
- typename const_qualified_reference_of<C>::type
- type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C& c) const
- {
- return c.back();
- }
- };
-
- struct begin
- {
- template <typename C>
- struct result
- {
- typedef typename const_qualified_iterator_of<C>::type type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C& c) const
- {
- return c.begin();
- }
- };
-
- struct capacity
- {
- template <typename C>
- struct result
- {
- typedef typename size_type_of<C>::type type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C const& c) const
- {
- return c.capacity();
- }
- };
-
- struct clear
- {
- template <typename C>
- struct result
- {
- typedef void type;
- };
-
- template <typename C>
- void operator()(C& c) const
- {
- return c.clear();
- }
- };
-
- struct empty
- {
- template <typename C>
- struct result
- {
- typedef bool type;
- };
-
- template <typename C>
- bool operator()(C const& c) const
- {
- return c.empty();
- }
- };
-
- struct end
- {
- template <typename C>
- struct result
- {
- typedef typename const_qualified_iterator_of<C>::type type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C& c) const
- {
- return c.end();
- }
- };
-
- struct erase
- {
- // This mouthful can differentiate between the generic erase
- // functions (Container == std::deque, std::list, std::vector) and
- // that specific to the two map-types, std::map and std::multimap.
- //
- // where C is a std::deque, std::list, std::vector:
- //
- // 1) iterator C::erase(iterator where);
- // 2) iterator C::erase(iterator first, iterator last);
- //
- // where M is a std::map or std::multimap:
- //
- // 3) size_type M::erase(const Key& keyval);
- // 4) void M::erase(iterator where);
- // 5) void M::erase(iterator first, iterator last);
-
- template <typename C, typename Arg1, typename Arg2 = fusion::void_>
- struct result
- {
- // BOOST_MSVC #if branch here in map_erase_result non-
- // standard behavior. The return type should be void but
- // VC7.1 prefers to return iterator_of<C>. As a result,
- // VC7.1 complains of error C2562:
- // boost::phoenix::stl::erase::operator() 'void' function
- // returning a value. Oh well... :*
-
- typedef
- boost::mpl::eval_if<
- boost::is_same<Arg1, typename iterator_of<C>::type>
-#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1500)
- , iterator_of<C>
-#else
- , boost::mpl::identity<void>
-#endif
- , size_type_of<C>
- >
- map_erase_result;
-
- typedef typename
- boost::mpl::eval_if<
- has_mapped_type<C>
- , map_erase_result
- , iterator_of<C>
- >::type
- type;
- };
-
- template <typename C, typename Arg1>
- typename result<C, Arg1>::type
- operator()(C& c, Arg1 const& arg1) const
- {
- return c.erase(arg1);
- }
-
- template <typename C, typename Arg1, typename Arg2>
- typename result<C, Arg1, Arg2>::type
- operator()(C& c, Arg1 const& arg1, Arg2 const& arg2) const
- {
- return c.erase(arg1, arg2);
- }
- };
-
- struct front
- {
- template <typename C>
- struct result
- {
- typedef typename const_qualified_reference_of<C>::type type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C& c) const
- {
- return c.front();
- }
- };
-
- struct get_allocator
- {
- template <typename C>
- struct result
- {
- typedef typename allocator_type_of<C>::type type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C const& c) const
- {
- return c.get_allocator();
- }
- };
-
- struct insert
- {
- // This mouthful can differentiate between the generic insert
- // functions (Container == deque, list, vector) and those
- // specific to the two map-types, std::map and std::multimap.
- //
- // where C is a std::deque, std::list, std::vector:
- //
- // 1) iterator C::insert(iterator where, value_type value);
- // 2) void C::insert(
- // iterator where, size_type count, value_type value);
- // 3) template <typename Iter>
- // void C::insert(iterator where, Iter first, Iter last);
- //
- // where M is a std::map and MM is a std::multimap:
- //
- // 4) pair<iterator, bool> M::insert(value_type const&);
- // 5) iterator MM::insert(value_type const&);
- //
- // where M is a std::map or std::multimap:
- //
- // 6) template <typename Iter>
- // void M::insert(Iter first, Iter last);
-
- template <
- typename C
- , typename Arg1
- , typename Arg2 = fusion::void_
- , typename Arg3 = fusion::void_
- >
- class result
- {
- struct pair_iterator_bool
- {
- typedef typename std::pair<typename C::iterator, bool> type;
- };
-
- typedef
- boost::mpl::eval_if<
- map_insert_returns_pair<C>
- , pair_iterator_bool
- , iterator_of<C>
- >
- choice_1;
-
- typedef
- boost::mpl::eval_if<
- boost::mpl::and_<
- boost::is_same<Arg3, fusion::void_>
- , boost::mpl::not_<boost::is_same<Arg1, Arg2> > >
- , iterator_of<C>
- , boost::mpl::identity<void>
- >
- choice_2;
-
- public:
-
- typedef typename
- boost::mpl::eval_if<
- boost::is_same<Arg2, fusion::void_>
- , choice_1
- , choice_2
- >::type
- type;
- };
-
- template <typename C, typename Arg1>
- typename result<C, Arg1>::type
- operator()(C& c, Arg1 const& arg1) const
- {
- return c.insert(arg1);
- }
-
- template <typename C, typename Arg1, typename Arg2>
- typename result<C, Arg1, Arg2>::type
- operator()(C& c, Arg1 const& arg1, Arg2 const& arg2) const
- {
- return c.insert(arg1, arg2);
- }
-
- template <typename C, typename Arg1, typename Arg2, typename Arg3>
- typename result<C, Arg1, Arg2, Arg3>::type
- operator()(
- C& c, Arg1 const& arg1, Arg2 const& arg2, Arg3 const& arg3) const
- {
- return c.insert(arg1, arg2, arg3);
- }
- };
-
- struct key_comp
- {
- template <typename C>
- struct result
- {
- typedef typename key_compare_of<C>::type type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C const& c) const
- {
- return c.key_comp();
- }
- };
-
- struct max_size
- {
- template <typename C>
- struct result
- {
- typedef typename size_type_of<C>::type type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C const& c) const
- {
- return c.max_size();
- }
- };
-
- struct pop_back
- {
- template <typename C>
- struct result
- {
- typedef void type;
- };
-
- template <typename C>
- void operator()(C& c) const
- {
- return c.pop_back();
- }
- };
-
- struct pop_front
- {
- template <typename C>
- struct result
- {
- typedef void type;
- };
-
- template <typename C>
- void operator()(C& c) const
- {
- return c.pop_front();
- }
- };
-
- struct push_back
- {
- template <typename C, typename Arg>
- struct result
- {
- typedef void type;
- };
-
- template <typename C, typename Arg>
- void operator()(C& c, Arg const& data) const
- {
- return c.push_back(data);
- }
- };
-
- struct push_front
- {
- template <typename C, typename Arg>
- struct result
- {
- typedef void type;
- };
-
- template <typename C, typename Arg>
- void operator()(C& c, Arg const& data) const
- {
- return c.push_front(data);
- }
- };
-
- struct rbegin
- {
- template <typename C>
- struct result
- {
- typedef typename
- const_qualified_reverse_iterator_of<C>::type
- type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C& c) const
- {
- return c.rbegin();
- }
- };
-
- struct rend
- {
- template <typename C>
- struct result
- {
- typedef typename
- const_qualified_reverse_iterator_of<C>::type
- type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C& c) const
- {
- return c.rend();
- }
- };
-
- struct reserve
- {
-
- template <typename C, typename Arg>
- struct result
- {
- typedef void type;
- };
-
- template <typename C, typename Arg>
- void operator()(C& c, Arg const& count) const
- {
- return c.reserve(count);
- }
- };
-
- struct resize
- {
- template <typename C, typename Arg1, typename Arg2 = fusion::void_>
- struct result
- {
- typedef void type;
- };
-
- template <typename C, typename Arg1>
- void operator()(C& c, Arg1 const& arg1) const
- {
- return c.resize(arg1);
- }
-
- template <typename C, typename Arg1, typename Arg2>
- void operator()(C& c, Arg1 const& arg1, Arg2 const& arg2) const
- {
- return c.resize(arg1, arg2);
- }
- };
-
- struct size
- {
- template <typename C>
- struct result
- {
- typedef typename size_type_of<C>::type type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C const& c) const
- {
- return c.size();
- }
- };
-
- struct splice
- {
- template <
- typename C
- , typename Arg1
- , typename Arg2
- , typename Arg3 = fusion::void_
- , typename Arg4 = fusion::void_
- >
- struct result
- {
- typedef void type;
- };
-
- template <typename C, typename Arg1, typename Arg2>
- void operator()(C& c, Arg1 const& arg1, Arg2& arg2) const
- {
- c.splice(arg1, arg2);
- }
-
- template <
- typename C
- , typename Arg1
- , typename Arg2
- , typename Arg3
- >
- void operator()(
- C& c
- , Arg1 const& arg1
- , Arg2& arg2
- , Arg3 const& arg3
- ) const
- {
- c.splice(arg1, arg2, arg3);
- }
-
- template <
- typename C
- , typename Arg1
- , typename Arg2
- , typename Arg3
- , typename Arg4
- >
- void operator()(
- C& c
- , Arg1 const& arg1
- , Arg2& arg2
- , Arg3 const& arg3
- , Arg4 const& arg4
- ) const
- {
- c.splice(arg1, arg2, arg3, arg4);
- }
- };
-
- struct value_comp
- {
- template <typename C>
- struct result
- {
- typedef typename value_compare_of<C>::type type;
- };
-
- template <typename C>
- typename result<C>::type
- operator()(C const& c) const
- {
- return c.value_comp();
- }
- };
-
-} // namespace stl
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The lazy functions themselves.
-//
-///////////////////////////////////////////////////////////////////////////////
-function<stl::assign> const assign = stl::assign();
-function<stl::at> const at = stl::at();
-function<stl::back> const back = stl::back();
-function<stl::begin> const begin = stl::begin();
-function<stl::capacity> const capacity = stl::capacity();
-function<stl::clear> const clear = stl::clear();
-function<stl::empty> const empty = stl::empty();
-function<stl::end> const end = stl::end();
-function<stl::erase> const erase = stl::erase();
-function<stl::front> const front = stl::front();
-function<stl::get_allocator> const get_allocator = stl::get_allocator();
-function<stl::insert> const insert = stl::insert();
-function<stl::key_comp> const key_comp = stl::key_comp();
-function<stl::max_size> const max_size = stl::max_size();
-function<stl::pop_back> const pop_back = stl::pop_back();
-function<stl::pop_front> const pop_front = stl::pop_front();
-function<stl::push_back> const push_back = stl::push_back();
-function<stl::push_front> const push_front = stl::push_front();
-function<stl::rbegin> const rbegin = stl::rbegin();
-function<stl::rend> const rend = stl::rend();
-function<stl::reserve> const reserve = stl::reserve();
-function<stl::resize> const resize = stl::resize();
-function<stl::size> const size = stl::size();
-function<stl::splice> const splice = stl::splice();
-function<stl::value_comp> const value_comp = stl::value_comp();
-
-}} // namespace boost::phoenix
-
-#endif // PHOENIX_STL_CONTAINERS_HPP
diff --git a/3party/boost/boost/spirit/home/phoenix/stl/container/detail/container.hpp b/3party/boost/boost/spirit/home/phoenix/stl/container/detail/container.hpp
deleted file mode 100644
index eecf68dbaf..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/stl/container/detail/container.hpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/*=============================================================================
- Copyright (c) 2004 Angus Leeming
- Copyright (c) 2004 Joel de Guzman
-
- 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 PHOENIX_CONTAINER_DETAIL_CONTAINER_HPP
-#define PHOENIX_CONTAINER_DETAIL_CONTAINER_HPP
-
-#include <utility>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/is_const.hpp>
-
-namespace boost { namespace phoenix { namespace stl
-{
-///////////////////////////////////////////////////////////////////////////////
-//
-// Metafunctions "value_type_of", "key_type_of" etc.
-//
-// These metafunctions define a typedef "type" that returns the nested
-// type if it exists. If not then the typedef returns void.
-//
-// For example, "value_type_of<std::vector<int> >::type" is "int" whilst
-// "value_type_of<double>::type" is "void".
-//
-// I use a macro to define structs "value_type_of" etc simply to cut
-// down on the amount of code. The macro is #undef-ed immediately after
-// its final use.
-//
-/////////////////////////////////////////////////////////////////c//////////////
-#define MEMBER_TYPE_OF(MEMBER_TYPE) \
- template <typename C> \
- struct BOOST_PP_CAT(MEMBER_TYPE, _of) \
- { \
- typedef typename C::MEMBER_TYPE type; \
- }
-
- MEMBER_TYPE_OF(allocator_type);
- MEMBER_TYPE_OF(const_iterator);
- MEMBER_TYPE_OF(const_reference);
- MEMBER_TYPE_OF(const_reverse_iterator);
- MEMBER_TYPE_OF(container_type);
- MEMBER_TYPE_OF(data_type);
- MEMBER_TYPE_OF(iterator);
- MEMBER_TYPE_OF(key_compare);
- MEMBER_TYPE_OF(key_type);
- MEMBER_TYPE_OF(reference);
- MEMBER_TYPE_OF(reverse_iterator);
- MEMBER_TYPE_OF(size_type);
- MEMBER_TYPE_OF(value_compare);
- MEMBER_TYPE_OF(value_type);
-
-#undef MEMBER_TYPE_OF
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Const-Qualified types.
-//
-// Many of the stl member functions have const and non-const
-// overloaded versions that return distinct types. For example:
-//
-// iterator begin();
-// const_iterator begin() const;
-//
-// The three class templates defined below,
-// const_qualified_reference_of, const_qualified_iterator_of
-// and const_qualified_reverse_iterator_of provide a means to extract
-// this return type automatically.
-//
-///////////////////////////////////////////////////////////////////////////////
- template <typename C>
- struct const_qualified_reference_of
- {
- typedef typename
- boost::mpl::eval_if<
- boost::is_const<C>
- , const_reference_of<C>
- , reference_of<C>
- >::type
- type;
- };
-
- template <typename C>
- struct const_qualified_iterator_of
- {
- typedef typename
- boost::mpl::eval_if<
- boost::is_const<C>
- , const_iterator_of<C>
- , iterator_of<C>
- >::type
- type;
- };
-
- template <typename C>
- struct const_qualified_reverse_iterator_of
- {
- typedef typename
- boost::mpl::eval_if<
- boost::is_const<C>
- , const_reverse_iterator_of<C>
- , reverse_iterator_of<C>
- >::type
- type;
- };
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// has_mapped_type<C>
-//
-// Given a container C, determine if it is a map or multimap
-// by checking if it has a member type named "mapped_type".
-//
-///////////////////////////////////////////////////////////////////////////////
- namespace stl_impl
- {
- struct one { char a[1]; };
- struct two { char a[2]; };
-
- template <typename C>
- one has_mapped_type(typename C::mapped_type(*)());
-
- template <typename C>
- two has_mapped_type(...);
- }
-
- template <typename C>
- struct has_mapped_type
- : boost::mpl::bool_<
- sizeof(stl_impl::has_mapped_type<C>(0)) == sizeof(stl_impl::one)
- >
- {};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// map_insert_returns_pair<C>
-//
-// Distinguish a map from a multimap by checking the return type
-// of its "insert" member function. A map returns a pair while
-// a multimap returns an iterator.
-//
-///////////////////////////////////////////////////////////////////////////////
- namespace stl_impl
- {
- // Cool implementation of map_insert_returns_pair by Daniel Wallin.
- // Thanks Daniel!!! I owe you a Pizza!
-
- template<class A, class B>
- one map_insert_returns_pair_check(std::pair<A,B> const&);
-
- template <typename T>
- two map_insert_returns_pair_check(T const&);
-
- template <typename C>
- struct map_insert_returns_pair
- {
- static typename C::value_type const& get;
- BOOST_STATIC_CONSTANT(int,
- value = sizeof(
- map_insert_returns_pair_check(((C*)0)->insert(get))));
- typedef boost::mpl::bool_<value == sizeof(one)> type;
- };
- }
-
- template <typename C>
- struct map_insert_returns_pair
- : stl_impl::map_insert_returns_pair<C>::type {};
-
-}}} // namespace boost::phoenix::stl
-
-#endif // PHOENIX_STL_CONTAINER_TRAITS_HPP
diff --git a/3party/boost/boost/spirit/home/phoenix/version.hpp b/3party/boost/boost/spirit/home/phoenix/version.hpp
deleted file mode 100644
index c29baf8e47..0000000000
--- a/3party/boost/boost/spirit/home/phoenix/version.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2008 Hartmut Kaiser
- Copyright (c) 2005-2007 Joel de Guzman
-
- 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 PHOENIX_VERSION_HPP
-#define PHOENIX_VERSION_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// This is the version of the library
-//
-///////////////////////////////////////////////////////////////////////////////
-#define BOOST_PHOENIX_VERSION 0x2000 // 2.0.0
-
-#endif
diff --git a/3party/boost/boost/spirit/home/qi.hpp b/3party/boost/boost/spirit/home/qi.hpp
index afdf1cb97c..e593d52e61 100644
--- a/3party/boost/boost/spirit/home/qi.hpp
+++ b/3party/boost/boost/spirit/home/qi.hpp
@@ -15,6 +15,7 @@
#include <boost/spirit/home/qi/auto.hpp>
#include <boost/spirit/home/qi/auxiliary.hpp>
#include <boost/spirit/home/qi/char.hpp>
+#include <boost/spirit/home/qi/copy.hpp>
#include <boost/spirit/home/qi/binary.hpp>
#include <boost/spirit/home/qi/directive.hpp>
#include <boost/spirit/home/qi/nonterminal.hpp>
diff --git a/3party/boost/boost/spirit/home/qi/action/action.hpp b/3party/boost/boost/spirit/home/qi/action/action.hpp
index 746dd84c1d..2bdf7d8f87 100644
--- a/3party/boost/boost/spirit/home/qi/action/action.hpp
+++ b/3party/boost/boost/spirit/home/qi/action/action.hpp
@@ -41,8 +41,8 @@ namespace boost { namespace spirit { namespace qi
: traits::attribute_of<Subject, Context, Iterator>
{};
- action(Subject const& subject, Action f)
- : subject(subject), f(f) {}
+ action(Subject const& subject_, Action f_)
+ : subject(subject_), f(f_) {}
#ifndef BOOST_SPIRIT_ACTIONS_ALLOW_ATTR_COMPAT
template <typename Iterator, typename Context
diff --git a/3party/boost/boost/spirit/home/qi/auxiliary/attr.hpp b/3party/boost/boost/spirit/home/qi/auxiliary/attr.hpp
index 2778a685f1..fb018e7d73 100644
--- a/3party/boost/boost/spirit/home/qi/auxiliary/attr.hpp
+++ b/3party/boost/boost/spirit/home/qi/auxiliary/attr.hpp
@@ -59,9 +59,9 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& /*first*/, Iterator const& /*last*/
, Context& /*context*/, Skipper const& /*skipper*/
- , Attribute& attr) const
+ , Attribute& attr_) const
{
- spirit::traits::assign_to(value_, attr);
+ spirit::traits::assign_to(value_, attr_);
return true; // never consume any input, succeed always
}
diff --git a/3party/boost/boost/spirit/home/qi/auxiliary/attr_cast.hpp b/3party/boost/boost/spirit/home/qi/auxiliary/attr_cast.hpp
index a8fc6880e0..93d646c58d 100644
--- a/3party/boost/boost/spirit/home/qi/auxiliary/attr_cast.hpp
+++ b/3party/boost/boost/spirit/home/qi/auxiliary/attr_cast.hpp
@@ -50,11 +50,11 @@ namespace boost { namespace spirit { namespace qi
typedef typename mpl::eval_if<
traits::not_is_unused<Transformed>
, mpl::identity<Transformed>
- , traits::attribute_of<subject_type> >::type
+ , traits::attribute_of<subject_type> >::type
transformed_attribute_type;
- attr_cast_parser(Subject const& subject)
- : subject(subject)
+ attr_cast_parser(Subject const& subject_)
+ : subject(subject_)
{
// If you got an error_invalid_expression error message here,
// then the expression (Subject) is not a valid spirit qi
@@ -75,7 +75,7 @@ namespace boost { namespace spirit { namespace qi
, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_param) const
{
// Find the real exposed attribute. If exposed is given, we use it
// otherwise we assume the exposed attribute type to be the actual
@@ -87,21 +87,21 @@ namespace boost { namespace spirit { namespace qi
// do down-stream transformation, provides attribute for embedded
// parser
typedef traits::transform_attribute<
- exposed_attribute_type, transformed_attribute_type, domain>
+ exposed_attribute_type, transformed_attribute_type, domain>
transform;
- typename transform::type attr_ = transform::pre(attr);
+ typename transform::type attr_ = transform::pre(attr_param);
if (!compile<qi::domain>(subject).
parse(first, last, context, skipper, attr_))
{
- transform::fail(attr);
+ transform::fail(attr_param);
return false;
}
// do up-stream transformation, this mainly integrates the results
// back into the original attribute value, if appropriate
- traits::post_transform(attr, attr_);
+ traits::post_transform(attr_param, attr_);
return true;
}
diff --git a/3party/boost/boost/spirit/home/qi/auxiliary/eps.hpp b/3party/boost/boost/spirit/home/qi/auxiliary/eps.hpp
index fe23935555..4ba6aa4cc4 100644
--- a/3party/boost/boost/spirit/home/qi/auxiliary/eps.hpp
+++ b/3party/boost/boost/spirit/home/qi/auxiliary/eps.hpp
@@ -80,8 +80,8 @@ namespace boost { namespace spirit { namespace qi
typedef unused_type type;
};
- semantic_predicate(bool predicate)
- : predicate(predicate) {}
+ semantic_predicate(bool predicate_)
+ : predicate(predicate_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
diff --git a/3party/boost/boost/spirit/home/qi/auxiliary/lazy.hpp b/3party/boost/boost/spirit/home/qi/auxiliary/lazy.hpp
index b935261325..60b61d4ce4 100644
--- a/3party/boost/boost/spirit/home/qi/auxiliary/lazy.hpp
+++ b/3party/boost/boost/spirit/home/qi/auxiliary/lazy.hpp
@@ -60,7 +60,7 @@ namespace boost { namespace spirit { namespace qi
bool lazy_parse_impl(Parser const& p
, Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr, mpl::true_)
+ , Attribute& /*attr*/, mpl::true_)
{
// If DeducedAuto is false (semantic actions is present), the
// component's attribute is unused.
@@ -111,8 +111,8 @@ namespace boost { namespace spirit { namespace qi
type;
};
- lazy_parser(Function const& function, Modifiers const& modifiers)
- : function(function), modifiers(modifiers) {}
+ lazy_parser(Function const& function_, Modifiers const& modifiers_)
+ : function(function_), modifiers(modifiers_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
@@ -183,10 +183,10 @@ namespace boost { namespace spirit { namespace qi
};
lazy_directive(
- Function const& function
- , Subject const& subject
- , Modifiers const& modifiers)
- : function(function), subject(subject), modifiers(modifiers) {}
+ Function const& function_
+ , Subject const& subject_
+ , Modifiers const& modifiers_)
+ : function(function_), subject(subject_), modifiers(modifiers_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
diff --git a/3party/boost/boost/spirit/home/qi/binary/binary.hpp b/3party/boost/boost/spirit/home/qi/binary/binary.hpp
index 7d47a6e2ee..a4e83f0ba5 100644
--- a/3party/boost/boost/spirit/home/qi/binary/binary.hpp
+++ b/3party/boost/boost/spirit/home/qi/binary/binary.hpp
@@ -241,7 +241,7 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_param) const
{
qi::skip_over(first, last, skipper);
@@ -257,7 +257,7 @@ namespace boost { namespace spirit { namespace qi
}
first = it;
- spirit::traits::assign_to(attr_, attr);
+ spirit::traits::assign_to(attr_, attr_param);
return true;
}
@@ -280,14 +280,14 @@ namespace boost { namespace spirit { namespace qi
typedef unused_type type;
};
- binary_lit_parser(V n)
- : n(n) {}
+ binary_lit_parser(V n_)
+ : n(n_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_param) const
{
qi::skip_over(first, last, skipper);
@@ -317,7 +317,7 @@ namespace boost { namespace spirit { namespace qi
}
first = it;
- spirit::traits::assign_to(attr_, attr);
+ spirit::traits::assign_to(attr_, attr_param);
return true;
}
diff --git a/3party/boost/boost/spirit/home/qi/char/char.hpp b/3party/boost/boost/spirit/home/qi/char/char.hpp
index 7269da4197..8c22aaa77d 100644
--- a/3party/boost/boost/spirit/home/qi/char/char.hpp
+++ b/3party/boost/boost/spirit/home/qi/char/char.hpp
@@ -123,8 +123,8 @@ namespace boost { namespace spirit { namespace qi
typedef CharEncoding char_encoding;
template <typename Char>
- literal_char(Char ch)
- : ch(static_cast<char_type>(ch)) {}
+ literal_char(Char ch_)
+ : ch(static_cast<char_type>(ch_)) {}
template <typename Context, typename Iterator>
struct attribute
@@ -201,8 +201,8 @@ namespace boost { namespace spirit { namespace qi
typedef typename CharEncoding::char_type char_type;
typedef CharEncoding char_encoding;
- char_range(char_type from, char_type to)
- : from(from), to(to) {}
+ char_range(char_type from_, char_type to_)
+ : from(from_), to(to_) {}
template <typename CharParam, typename Context>
bool test(CharParam ch_, Context&) const
diff --git a/3party/boost/boost/spirit/home/qi/char/char_parser.hpp b/3party/boost/boost/spirit/home/qi/char/char_parser.hpp
index b896f73774..1d06d7cf8a 100644
--- a/3party/boost/boost/spirit/home/qi/char/char_parser.hpp
+++ b/3party/boost/boost/spirit/home/qi/char/char_parser.hpp
@@ -61,13 +61,13 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper, Attribute& attr) const
+ , Context& context, Skipper const& skipper, Attribute& attr_) const
{
qi::skip_over(first, last, skipper);
if (first != last && this->derived().test(*first, context))
{
- spirit::traits::assign_to(*first, attr);
+ spirit::traits::assign_to(*first, attr_);
++first;
return true;
}
@@ -87,8 +87,8 @@ namespace boost { namespace spirit { namespace qi
struct negated_char_parser :
char_parser<negated_char_parser<Positive>, typename Positive::char_type>
{
- negated_char_parser(Positive const& positive)
- : positive(positive) {}
+ negated_char_parser(Positive const& positive_)
+ : positive(positive_) {}
template <typename CharParam, typename Context>
bool test(CharParam ch, Context& context) const
diff --git a/3party/boost/boost/spirit/home/qi/copy.hpp b/3party/boost/boost/spirit/home/qi/copy.hpp
new file mode 100644
index 0000000000..d9b843193d
--- /dev/null
+++ b/3party/boost/boost/spirit/home/qi/copy.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2001-2012 Joel de Guzman
+
+ 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_SPIRIT_COPY_FEBRUARY_7_2012_0159PM)
+#define BOOST_SPIRIT_COPY_FEBRUARY_7_2012_0159PM
+
+#include <boost/config.hpp>
+#include <boost/proto/proto.hpp>
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#if !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS)
+
+namespace boost { namespace spirit { namespace qi
+{
+ template <typename Expr>
+ typename boost::proto::result_of::deep_copy<Expr>::type
+ copy(Expr const& expr)
+ {
+ BOOST_SPIRIT_ASSERT_MATCH(boost::spirit::qi::domain, Expr);
+ return boost::proto::deep_copy(expr);
+ }
+}}}
+
+#endif
+#endif
diff --git a/3party/boost/boost/spirit/home/qi/detail/alternative_function.hpp b/3party/boost/boost/spirit/home/qi/detail/alternative_function.hpp
index aad0c54866..0c400a90d4 100644
--- a/3party/boost/boost/spirit/home/qi/detail/alternative_function.hpp
+++ b/3party/boost/boost/spirit/home/qi/detail/alternative_function.hpp
@@ -56,10 +56,10 @@ namespace boost { namespace spirit { namespace qi { namespace detail
struct alternative_function
{
alternative_function(
- Iterator& first, Iterator const& last, Context& context,
- Skipper const& skipper, Attribute& attr)
- : first(first), last(last), context(context), skipper(skipper),
- attr(attr)
+ Iterator& first_, Iterator const& last_, Context& context_,
+ Skipper const& skipper_, Attribute& attr_)
+ : first(first_), last(last_), context(context_), skipper(skipper_),
+ attr(attr_)
{
}
@@ -185,14 +185,14 @@ namespace boost { namespace spirit { namespace qi { namespace detail
struct alternative_function<Iterator, Context, Skipper, unused_type const>
{
alternative_function(
- Iterator& first, Iterator const& last, Context& context,
- Skipper const& skipper, unused_type)
- : first(first), last(last), context(context), skipper(skipper)
+ Iterator& first_, Iterator const& last_, Context& context_,
+ Skipper const& skipper_, unused_type)
+ : first(first_), last(last_), context(context_), skipper(skipper_)
{
}
template <typename Component>
- bool operator()(Component const& component)
+ bool operator()(Component const& component) const
{
// return true if the parser succeeds
return component.parse(first, last, context, skipper,
diff --git a/3party/boost/boost/spirit/home/qi/detail/expect_function.hpp b/3party/boost/boost/spirit/home/qi/detail/expect_function.hpp
index 34dd910744..920e30997b 100644
--- a/3party/boost/boost/spirit/home/qi/detail/expect_function.hpp
+++ b/3party/boost/boost/spirit/home/qi/detail/expect_function.hpp
@@ -26,12 +26,12 @@ namespace boost { namespace spirit { namespace qi { namespace detail
typedef Context context_type;
expect_function(
- Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper)
- : first(first)
- , last(last)
- , context(context)
- , skipper(skipper)
+ Iterator& first_, Iterator const& last_
+ , Context& context_, Skipper const& skipper_)
+ : first(first_)
+ , last(last_)
+ , context(context_)
+ , skipper(skipper_)
, is_first(true)
{
}
diff --git a/3party/boost/boost/spirit/home/qi/detail/fail_function.hpp b/3party/boost/boost/spirit/home/qi/detail/fail_function.hpp
index fca03b33f9..7ab8d82a2b 100644
--- a/3party/boost/boost/spirit/home/qi/detail/fail_function.hpp
+++ b/3party/boost/boost/spirit/home/qi/detail/fail_function.hpp
@@ -22,12 +22,12 @@ namespace boost { namespace spirit { namespace qi { namespace detail
typedef Context context_type;
fail_function(
- Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper)
- : first(first)
- , last(last)
- , context(context)
- , skipper(skipper)
+ Iterator& first_, Iterator const& last_
+ , Context& context_, Skipper const& skipper_)
+ : first(first_)
+ , last(last_)
+ , context(context_)
+ , skipper(skipper_)
{
}
diff --git a/3party/boost/boost/spirit/home/qi/detail/pass_container.hpp b/3party/boost/boost/spirit/home/qi/detail/pass_container.hpp
index 82e153aa3a..f41f1e9bcc 100644
--- a/3party/boost/boost/spirit/home/qi/detail/pass_container.hpp
+++ b/3party/boost/boost/spirit/home/qi/detail/pass_container.hpp
@@ -33,17 +33,17 @@ namespace boost { namespace spirit { namespace qi { namespace detail
Sequence
, typename traits::is_weak_substitute<Attribute, ValueType>::type
, typename mpl::not_<
- traits::is_weak_substitute<Attribute, ValueType>
+ traits::is_weak_substitute<Attribute, ValueType>
>::type>
{};
- // pass_through_container: utility to check decide whether a provided
- // container attribute needs to be passed through to the current component
+ // pass_through_container: utility to check decide whether a provided
+ // container attribute needs to be passed through to the current component
// or of we need to split the container by passing along instances of its
// value type
- // if the expected attribute of the current component is neither a Fusion
- // sequence nor a container, we will pass through the provided container
+ // if the expected attribute of the current component is neither a Fusion
+ // sequence nor a container, we will pass through the provided container
// only if its value type is not compatible with the component
template <typename Container, typename ValueType, typename Attribute
, typename Sequence, typename Enable = void>
@@ -53,9 +53,9 @@ namespace boost { namespace spirit { namespace qi { namespace detail
// Specialization for fusion sequences, in this case we check whether all
// the types in the sequence are convertible to the lhs attribute.
- //
+ //
// We return false if the rhs attribute itself is a fusion sequence, which
- // is compatible with the LHS sequence (we want to pass through this
+ // is compatible with the LHS sequence (we want to pass through this
// attribute without it being split apart).
template <typename Container, typename ValueType, typename Attribute
, typename Sequence = mpl::true_>
@@ -66,7 +66,7 @@ namespace boost { namespace spirit { namespace qi { namespace detail
{};
// If the value type of the container is not a Fusion sequence, we pass
- // through the container if each of the elements of the Attribute
+ // through the container if each of the elements of the Attribute
// sequence is compatible with either the container or its value type.
template <typename Container, typename ValueType, typename Attribute
, typename Sequence
@@ -82,7 +82,7 @@ namespace boost { namespace spirit { namespace qi { namespace detail
};
// If both, the Attribute and the value type of the provided container
- // are Fusion sequences, we pass the container only if the two
+ // are Fusion sequences, we pass the container only if the two
// sequences are not compatible.
template <typename Container, typename ValueType, typename Attribute
, typename Sequence>
@@ -110,14 +110,14 @@ namespace boost { namespace spirit { namespace qi { namespace detail
// Specialization for containers
//
// If the value type of the attribute of the current component is not
- // a Fusion sequence, we have to pass through the provided container if
+ // a Fusion sequence, we have to pass through the provided container if
// both are compatible.
template <typename Container, typename ValueType, typename Attribute
, typename Sequence, typename AttributeValueType
, bool IsSequence = fusion::traits::is_sequence<AttributeValueType>::value>
struct pass_through_container_container
: mpl::or_<
- traits::is_weak_substitute<Attribute, Container>
+ traits::is_weak_substitute<Attribute, Container>
, traits::is_weak_substitute<AttributeValueType, Container> >
{};
@@ -143,16 +143,16 @@ namespace boost { namespace spirit { namespace qi { namespace detail
// Specialization for exposed optional attributes
//
- // If the type embedded in the exposed optional is not a Fusion
+ // If the type embedded in the exposed optional is not a Fusion
// sequence we pass through the container attribute if it is compatible
- // either to the optionals embedded type or to the containers value
+ // either to the optionals embedded type or to the containers value
// type.
template <typename Container, typename ValueType, typename Attribute
, typename Sequence
, bool IsSequence = fusion::traits::is_sequence<Attribute>::value>
struct pass_through_container_optional
: mpl::or_<
- traits::is_weak_substitute<Attribute, Container>
+ traits::is_weak_substitute<Attribute, Container>
, traits::is_weak_substitute<Attribute, ValueType> >
{};
@@ -170,7 +170,7 @@ namespace boost { namespace spirit { namespace qi { namespace detail
template <typename Container, typename ValueType, typename Attribute
, typename Sequence>
struct pass_through_container
- : pass_through_container_base<Container, ValueType, Attribute, Sequence>
+ : pass_through_container_base<Container, ValueType, Attribute, Sequence>
{};
// Handle optional attributes
@@ -179,25 +179,44 @@ namespace boost { namespace spirit { namespace qi { namespace detail
struct pass_through_container<
Container, ValueType, boost::optional<Attribute>, Sequence>
: pass_through_container_optional<
- Container, ValueType, Attribute, Sequence>
+ Container, ValueType, Attribute, Sequence>
{};
// If both, the containers value type and the exposed attribute type are
- // optionals we are allowed to pass through the the container only if the
+ // optionals we are allowed to pass through the container only if the
// embedded types of those optionals are not compatible.
template <typename Container, typename ValueType, typename Attribute
, typename Sequence>
struct pass_through_container<
Container, boost::optional<ValueType>, boost::optional<Attribute>
, Sequence>
- : mpl::not_<traits::is_weak_substitute<Attribute, ValueType> >
+ : mpl::not_<traits::is_weak_substitute<Attribute, ValueType> >
{};
// Specialization for exposed variant attributes
- //
- // We pass through the container attribute if at least one of the embedded
+ //
+ // We pass through the container attribute if at least one of the embedded
// types in the variant requires to pass through the attribute
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+ template <typename Container, typename ValueType, typename Sequence
+ , typename T>
+ struct pass_through_container<Container, ValueType, boost::variant<T>
+ , Sequence>
+ : pass_through_container<Container, ValueType, T, Sequence>
+ {};
+
+ template <typename Container, typename ValueType, typename Sequence
+ , typename T0, typename ...TN>
+ struct pass_through_container<Container, ValueType
+ , boost::variant<T0, TN...>, Sequence>
+ : mpl::bool_<pass_through_container<
+ Container, ValueType, T0, Sequence
+ >::type::value || pass_through_container<
+ Container, ValueType, boost::variant<TN...>, Sequence
+ >::type::value>
+ {};
+#else
#define BOOST_SPIRIT_PASS_THROUGH_CONTAINER(z, N, _) \
pass_through_container<Container, ValueType, \
BOOST_PP_CAT(T, N), Sequence>::type::value || \
@@ -219,6 +238,7 @@ namespace boost { namespace spirit { namespace qi { namespace detail
{};
#undef BOOST_SPIRIT_PASS_THROUGH_CONTAINER
+#endif
}}}}
///////////////////////////////////////////////////////////////////////////////
@@ -247,8 +267,8 @@ namespace boost { namespace spirit { namespace qi { namespace detail
typedef typename F::context_type context_type;
typedef typename F::iterator_type iterator_type;
- pass_container(F const& f, Attr& attr)
- : f(f), attr(attr) {}
+ pass_container(F const& f_, Attr& attr_)
+ : f(f_), attr(attr_) {}
// this is for the case when the current element exposes an attribute
// which is pushed back onto the container
@@ -271,8 +291,8 @@ namespace boost { namespace spirit { namespace qi { namespace detail
return r;
}
- // this is for the case when the current element is able to handle an
- // attribute which is a container itself, this element will push its
+ // this is for the case when the current element is able to handle an
+ // attribute which is a container itself, this element will push its
// data directly into the attribute container
template <typename Component>
bool dispatch_container(Component const& component, mpl::true_) const
@@ -281,7 +301,7 @@ namespace boost { namespace spirit { namespace qi { namespace detail
}
///////////////////////////////////////////////////////////////////////
- // this is for the case when the current element doesn't expect an
+ // this is for the case when the current element doesn't expect an
// attribute
template <typename Component>
bool dispatch_attribute(Component const& component, mpl::false_) const
@@ -298,12 +318,12 @@ namespace boost { namespace spirit { namespace qi { namespace detail
Component, context_type, iterator_type>::type
rhs_attribute;
- // this predicate detects, whether the attribute of the current
+ // this predicate detects, whether the attribute of the current
// element is a substitute for the value type of the container
- // attribute
+ // attribute
typedef mpl::and_<
traits::handles_container<
- Component, Attr, context_type, iterator_type>
+ Component, Attr, context_type, iterator_type>
, traits::pass_through_container<
Attr, value_type, rhs_attribute, Sequence, qi::domain>
> predicate;
@@ -340,7 +360,7 @@ namespace boost { namespace spirit { namespace qi { namespace detail
};
///////////////////////////////////////////////////////////////////////////
- // Utility function to make a pass_container for container components
+ // Utility function to make a pass_container for container components
// (kleene, list, plus, repeat)
template <typename F, typename Attr>
inline pass_container<F, Attr, mpl::false_>
diff --git a/3party/boost/boost/spirit/home/qi/detail/pass_function.hpp b/3party/boost/boost/spirit/home/qi/detail/pass_function.hpp
index 2d9e6bab26..555adb8a49 100644
--- a/3party/boost/boost/spirit/home/qi/detail/pass_function.hpp
+++ b/3party/boost/boost/spirit/home/qi/detail/pass_function.hpp
@@ -20,12 +20,12 @@ namespace boost { namespace spirit { namespace qi { namespace detail
struct pass_function
{
pass_function(
- Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper)
- : first(first)
- , last(last)
- , context(context)
- , skipper(skipper)
+ Iterator& first_, Iterator const& last_
+ , Context& context_, Skipper const& skipper_)
+ : first(first_)
+ , last(last_)
+ , context(context_)
+ , skipper(skipper_)
{
}
diff --git a/3party/boost/boost/spirit/home/qi/detail/permute_function.hpp b/3party/boost/boost/spirit/home/qi/detail/permute_function.hpp
index 13c1b8c123..8b1ed8a596 100644
--- a/3party/boost/boost/spirit/home/qi/detail/permute_function.hpp
+++ b/3party/boost/boost/spirit/home/qi/detail/permute_function.hpp
@@ -20,12 +20,12 @@ namespace boost { namespace spirit { namespace qi { namespace detail
struct permute_function
{
permute_function(
- Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper)
- : first(first)
- , last(last)
- , context(context)
- , skipper(skipper)
+ Iterator& first_, Iterator const& last_
+ , Context& context_, Skipper const& skipper_)
+ : first(first_)
+ , last(last_)
+ , context(context_)
+ , skipper(skipper_)
{
}
diff --git a/3party/boost/boost/spirit/home/qi/detail/unused_skipper.hpp b/3party/boost/boost/spirit/home/qi/detail/unused_skipper.hpp
index c1405d67c7..b8a51f3224 100644
--- a/3party/boost/boost/spirit/home/qi/detail/unused_skipper.hpp
+++ b/3party/boost/boost/spirit/home/qi/detail/unused_skipper.hpp
@@ -11,14 +11,15 @@
#endif
#include <boost/spirit/home/support/unused.hpp>
+#include <boost/mpl/bool.hpp>
namespace boost { namespace spirit { namespace qi { namespace detail
{
template <typename Skipper>
struct unused_skipper : unused_type
{
- unused_skipper(Skipper const& skipper)
- : skipper(skipper) {}
+ unused_skipper(Skipper const& skipper_)
+ : skipper(skipper_) {}
Skipper const& skipper;
private:
@@ -26,12 +27,24 @@ namespace boost { namespace spirit { namespace qi { namespace detail
unused_skipper& operator= (unused_skipper const&);
};
+ template <typename Skipper>
+ struct is_unused_skipper
+ : mpl::false_ {};
+
+ template <typename Skipper>
+ struct is_unused_skipper<unused_skipper<Skipper> >
+ : mpl::true_ {};
+
+ template <>
+ struct is_unused_skipper<unused_type>
+ : mpl::true_ {};
+
// If a surrounding lexeme[] directive was specified, the current
- // skipper is of the type unused_skipper. In this case we
+ // skipper is of the type unused_skipper. In this case we
// re-activate the skipper which was active before the skip[]
// directive.
template <typename Skipper>
- inline Skipper const&
+ inline Skipper const&
get_skipper(unused_skipper<Skipper> const& u)
{
return u.skipper;
@@ -39,7 +52,7 @@ namespace boost { namespace spirit { namespace qi { namespace detail
// If no surrounding lexeme[] directive was specified we keep what we got.
template <typename Skipper>
- inline Skipper const&
+ inline Skipper const&
get_skipper(Skipper const& u)
{
return u;
diff --git a/3party/boost/boost/spirit/home/qi/directive/as.hpp b/3party/boost/boost/spirit/home/qi/directive/as.hpp
index 9ace587caf..e0376eb2ec 100644
--- a/3party/boost/boost/spirit/home/qi/directive/as.hpp
+++ b/3party/boost/boost/spirit/home/qi/directive/as.hpp
@@ -76,8 +76,8 @@ namespace boost { namespace spirit { namespace qi
struct as_directive : unary_parser<as_directive<Subject, T> >
{
typedef Subject subject_type;
- as_directive(Subject const& subject)
- : subject(subject) {}
+ as_directive(Subject const& subject_)
+ : subject(subject_) {}
template <typename Context, typename Iterator>
struct attribute
@@ -88,13 +88,13 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper, Attribute& attr) const
+ , Context& context, Skipper const& skipper, Attribute& attr_) const
{
Iterator i = first;
T as_attr;
if (subject.parse(i, last, context, skipper, as_attr))
{
- spirit::traits::assign_to(as_attr, attr);
+ spirit::traits::assign_to(as_attr, attr_);
first = i;
return true;
}
@@ -103,10 +103,10 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context, typename Skipper>
bool parse(Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper, T& attr) const
+ , Context& context, Skipper const& skipper, T& attr_) const
{
Iterator i = first;
- if (subject.parse(i, last, context, skipper, attr))
+ if (subject.parse(i, last, context, skipper, attr_))
{
first = i;
return true;
diff --git a/3party/boost/boost/spirit/home/qi/directive/hold.hpp b/3party/boost/boost/spirit/home/qi/directive/hold.hpp
index d5b2ed5601..9cd905cf79 100644
--- a/3party/boost/boost/spirit/home/qi/directive/hold.hpp
+++ b/3party/boost/boost/spirit/home/qi/directive/hold.hpp
@@ -42,8 +42,8 @@ namespace boost { namespace spirit { namespace qi
struct hold_directive : unary_parser<hold_directive<Subject> >
{
typedef Subject subject_type;
- hold_directive(Subject const& subject)
- : subject(subject) {}
+ hold_directive(Subject const& subject_)
+ : subject(subject_) {}
template <typename Context, typename Iterator>
struct attribute
@@ -56,12 +56,12 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper, Attribute& attr) const
+ , Context& context, Skipper const& skipper, Attribute& attr_) const
{
- Attribute copy(attr);
+ Attribute copy(attr_);
if (subject.parse(first, last, context, skipper, copy))
{
- traits::swap_impl(copy, attr);
+ traits::swap_impl(copy, attr_);
return true;
}
return false;
diff --git a/3party/boost/boost/spirit/home/qi/directive/lexeme.hpp b/3party/boost/boost/spirit/home/qi/directive/lexeme.hpp
index f0b83993ef..691d4fa52c 100644
--- a/3party/boost/boost/spirit/home/qi/directive/lexeme.hpp
+++ b/3party/boost/boost/spirit/home/qi/directive/lexeme.hpp
@@ -20,6 +20,7 @@
#include <boost/spirit/home/qi/detail/attributes.hpp>
#include <boost/spirit/home/support/info.hpp>
#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/utility/enable_if.hpp>
namespace boost { namespace spirit
{
@@ -42,8 +43,8 @@ namespace boost { namespace spirit { namespace qi
struct lexeme_directive : unary_parser<lexeme_directive<Subject> >
{
typedef Subject subject_type;
- lexeme_directive(Subject const& subject)
- : subject(subject) {}
+ lexeme_directive(Subject const& subject_)
+ : subject(subject_) {}
template <typename Context, typename Iterator>
struct attribute
@@ -55,13 +56,26 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
- bool parse(Iterator& first, Iterator const& last
+ typename disable_if<detail::is_unused_skipper<Skipper>, bool>::type
+ parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
qi::skip_over(first, last, skipper);
return subject.parse(first, last, context
- , detail::unused_skipper<Skipper>(skipper), attr);
+ , detail::unused_skipper<Skipper>(skipper), attr_);
+ }
+ template <typename Iterator, typename Context
+ , typename Skipper, typename Attribute>
+ typename enable_if<detail::is_unused_skipper<Skipper>, bool>::type
+ parse(Iterator& first, Iterator const& last
+ , Context& context, Skipper const& skipper
+ , Attribute& attr_) const
+ {
+ // no need to pre-skip if skipper is unused
+ //- qi::skip_over(first, last, skipper);
+ return subject.parse(first, last, context
+ , skipper, attr_);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/directive/matches.hpp b/3party/boost/boost/spirit/home/qi/directive/matches.hpp
index b5349272d4..b6fecb994d 100644
--- a/3party/boost/boost/spirit/home/qi/directive/matches.hpp
+++ b/3party/boost/boost/spirit/home/qi/directive/matches.hpp
@@ -44,8 +44,8 @@ namespace boost { namespace spirit { namespace qi
struct matches_directive : unary_parser<matches_directive<Subject> >
{
typedef Subject subject_type;
- matches_directive(Subject const& subject)
- : subject(subject) {}
+ matches_directive(Subject const& subject_)
+ : subject(subject_) {}
template <typename Context, typename Iterator>
struct attribute
@@ -56,10 +56,10 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper, Attribute& attr) const
+ , Context& context, Skipper const& skipper, Attribute& attr_) const
{
bool result = subject.parse(first, last, context, skipper, unused);
- spirit::traits::assign_to(result, attr);
+ spirit::traits::assign_to(result, attr_);
return true;
}
diff --git a/3party/boost/boost/spirit/home/qi/directive/no_skip.hpp b/3party/boost/boost/spirit/home/qi/directive/no_skip.hpp
index 9764d4a661..119b0c80c3 100644
--- a/3party/boost/boost/spirit/home/qi/directive/no_skip.hpp
+++ b/3party/boost/boost/spirit/home/qi/directive/no_skip.hpp
@@ -22,6 +22,7 @@
#include <boost/spirit/home/support/info.hpp>
#include <boost/spirit/home/support/has_semantic_action.hpp>
#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/utility/enable_if.hpp>
namespace boost { namespace spirit
{
@@ -45,8 +46,8 @@ namespace boost { namespace spirit { namespace qi
struct no_skip_directive : unary_parser<no_skip_directive<Subject> >
{
typedef Subject subject_type;
- no_skip_directive(Subject const& subject)
- : subject(subject) {}
+ no_skip_directive(Subject const& subject_)
+ : subject(subject_) {}
template <typename Context, typename Iterator>
struct attribute
@@ -58,12 +59,23 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
- bool parse(Iterator& first, Iterator const& last
+ typename disable_if<detail::is_unused_skipper<Skipper>, bool>::type
+ parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
return subject.parse(first, last, context
- , detail::unused_skipper<Skipper>(skipper), attr);
+ , detail::unused_skipper<Skipper>(skipper), attr_);
+ }
+ template <typename Iterator, typename Context
+ , typename Skipper, typename Attribute>
+ typename enable_if<detail::is_unused_skipper<Skipper>, bool>::type
+ parse(Iterator& first, Iterator const& last
+ , Context& context, Skipper const& skipper
+ , Attribute& attr_) const
+ {
+ return subject.parse(first, last, context
+ , skipper, attr_);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/directive/omit.hpp b/3party/boost/boost/spirit/home/qi/directive/omit.hpp
index b0ed86b0a7..05a6a76d75 100644
--- a/3party/boost/boost/spirit/home/qi/directive/omit.hpp
+++ b/3party/boost/boost/spirit/home/qi/directive/omit.hpp
@@ -45,8 +45,8 @@ namespace boost { namespace spirit { namespace qi
struct omit_directive : unary_parser<omit_directive<Subject> >
{
typedef Subject subject_type;
- omit_directive(Subject const& subject)
- : subject(subject) {}
+ omit_directive(Subject const& subject_)
+ : subject(subject_) {}
template <typename Context, typename Iterator>
struct attribute
@@ -57,9 +57,9 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper, Attribute& attr) const
+ , Context& context, Skipper const& skipper, Attribute& attr_) const
{
- return subject.parse(first, last, context, skipper, attr);
+ return subject.parse(first, last, context, skipper, attr_);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/directive/raw.hpp b/3party/boost/boost/spirit/home/qi/directive/raw.hpp
index b88458ea28..e1d208e759 100644
--- a/3party/boost/boost/spirit/home/qi/directive/raw.hpp
+++ b/3party/boost/boost/spirit/home/qi/directive/raw.hpp
@@ -44,8 +44,8 @@ namespace boost { namespace spirit { namespace qi
struct raw_directive : unary_parser<raw_directive<Subject> >
{
typedef Subject subject_type;
- raw_directive(Subject const& subject)
- : subject(subject) {}
+ raw_directive(Subject const& subject_)
+ : subject(subject_) {}
template <typename Context, typename Iterator>
struct attribute
@@ -56,13 +56,13 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper, Attribute& attr) const
+ , Context& context, Skipper const& skipper, Attribute& attr_) const
{
qi::skip_over(first, last, skipper);
Iterator i = first;
if (subject.parse(i, last, context, skipper, unused))
{
- spirit::traits::assign_to(first, i, attr);
+ spirit::traits::assign_to(first, i, attr_);
first = i;
return true;
}
diff --git a/3party/boost/boost/spirit/home/qi/directive/repeat.hpp b/3party/boost/boost/spirit/home/qi/directive/repeat.hpp
index 252e18f743..72c3a998be 100644
--- a/3party/boost/boost/spirit/home/qi/directive/repeat.hpp
+++ b/3party/boost/boost/spirit/home/qi/directive/repeat.hpp
@@ -81,8 +81,8 @@ namespace boost { namespace spirit { namespace qi
template <typename T>
struct exact_iterator // handles repeat(exact)[p]
{
- exact_iterator(T const exact)
- : exact(exact) {}
+ exact_iterator(T const exact_)
+ : exact(exact_) {}
typedef T type;
T start() const { return 0; }
@@ -99,9 +99,9 @@ namespace boost { namespace spirit { namespace qi
template <typename T>
struct finite_iterator // handles repeat(min, max)[p]
{
- finite_iterator(T const min, T const max)
- : min BOOST_PREVENT_MACRO_SUBSTITUTION (min)
- , max BOOST_PREVENT_MACRO_SUBSTITUTION (max) {}
+ finite_iterator(T const min_, T const max_)
+ : min BOOST_PREVENT_MACRO_SUBSTITUTION (min_)
+ , max BOOST_PREVENT_MACRO_SUBSTITUTION (max_) {}
typedef T type;
T start() const { return 0; }
@@ -119,8 +119,8 @@ namespace boost { namespace spirit { namespace qi
template <typename T>
struct infinite_iterator // handles repeat(min, inf)[p]
{
- infinite_iterator(T const min)
- : min BOOST_PREVENT_MACRO_SUBSTITUTION (min) {}
+ infinite_iterator(T const min_)
+ : min BOOST_PREVENT_MACRO_SUBSTITUTION (min_) {}
typedef T type;
T start() const { return 0; }
@@ -153,8 +153,8 @@ namespace boost { namespace spirit { namespace qi
type;
};
- repeat_parser(Subject const& subject, LoopIter const& iter)
- : subject(subject), iter(iter) {}
+ repeat_parser(Subject const& subject_, LoopIter const& iter_)
+ : subject(subject_), iter(iter_) {}
template <typename F>
bool parse_container(F f) const
@@ -183,17 +183,17 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
typedef detail::fail_function<Iterator, Context, Skipper>
fail_function;
// ensure the attribute is actually a container type
- traits::make_container(attr);
+ traits::make_container(attr_);
- Iterator iter = first;
- fail_function f(iter, last, context, skipper);
- if (!parse_container(detail::make_pass_container(f, attr)))
+ Iterator iter_local = first;
+ fail_function f(iter_local, last, context, skipper);
+ if (!parse_container(detail::make_pass_container(f, attr_)))
return false;
first = f.first;
diff --git a/3party/boost/boost/spirit/home/qi/directive/skip.hpp b/3party/boost/boost/spirit/home/qi/directive/skip.hpp
index 28539da3a0..6cc6f77454 100644
--- a/3party/boost/boost/spirit/home/qi/directive/skip.hpp
+++ b/3party/boost/boost/spirit/home/qi/directive/skip.hpp
@@ -26,6 +26,7 @@
#include <boost/spirit/home/support/handles_container.hpp>
#include <boost/fusion/include/at.hpp>
#include <boost/fusion/include/vector.hpp>
+#include <boost/utility/enable_if.hpp>
namespace boost { namespace spirit
{
@@ -70,17 +71,28 @@ namespace boost { namespace spirit { namespace qi
type;
};
- reskip_parser(Subject const& subject)
- : subject(subject) {}
+ reskip_parser(Subject const& subject_)
+ : subject(subject_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
- bool parse(Iterator& first, Iterator const& last
+ typename enable_if<detail::is_unused_skipper<Skipper>, bool>::type
+ parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& u // --> The skipper is reintroduced
- , Attribute& attr) const
+ , Attribute& attr_) const
+ {
+ return subject.parse(first, last, context
+ , detail::get_skipper(u), attr_);
+ }
+ template <typename Iterator, typename Context
+ , typename Skipper, typename Attribute>
+ typename disable_if<detail::is_unused_skipper<Skipper>, bool>::type
+ parse(Iterator& first, Iterator const& last
+ , Context& context, Skipper const& skipper
+ , Attribute& attr_) const
{
return subject.parse(first, last, context
- , detail::get_skipper(u), attr);
+ , skipper, attr_);
}
template <typename Context>
@@ -106,16 +118,16 @@ namespace boost { namespace spirit { namespace qi
type;
};
- skip_parser(Subject const& subject, Skipper const& skipper)
- : subject(subject), skipper(skipper) {}
+ skip_parser(Subject const& subject_, Skipper const& skipper_)
+ : subject(subject_), skipper(skipper_) {}
template <typename Iterator, typename Context
, typename Skipper_, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper_ const& //skipper --> bypass the supplied skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
- return subject.parse(first, last, context, skipper, attr);
+ return subject.parse(first, last, context, skipper, attr_);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/nonterminal/debug_handler.hpp b/3party/boost/boost/spirit/home/qi/nonterminal/debug_handler.hpp
index 33287327cc..6a9f536699 100644
--- a/3party/boost/boost/spirit/home/qi/nonterminal/debug_handler.hpp
+++ b/3party/boost/boost/spirit/home/qi/nonterminal/debug_handler.hpp
@@ -36,12 +36,12 @@ namespace boost { namespace spirit { namespace qi
function_type;
debug_handler(
- function_type subject
- , F f
- , std::string const& rule_name)
- : subject(subject)
- , f(f)
- , rule_name(rule_name)
+ function_type subject_
+ , F f_
+ , std::string const& rule_name_)
+ : subject(subject_)
+ , f(f_)
+ , rule_name(rule_name_)
{
}
diff --git a/3party/boost/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp b/3party/boost/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp
index 0300a06b7e..825fa40732 100644
--- a/3party/boost/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp
+++ b/3party/boost/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp
@@ -27,8 +27,8 @@ namespace boost { namespace spirit { namespace qi
struct parameterized_nonterminal
: parser<parameterized_nonterminal<Subject, Params> >
{
- parameterized_nonterminal(Subject const& subject, Params const& params)
- : ref(subject), params(params)
+ parameterized_nonterminal(Subject const& subject, Params const& params_)
+ : ref(subject), params(params_)
{
}
@@ -41,11 +41,11 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
// Forward to subject, passing the additional
// params argument to parse.
- return ref.get().parse(first, last, context, skipper, attr, params);
+ return ref.get().parse(first, last, context, skipper, attr_, params);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp b/3party/boost/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp
index 91bceba88e..87d8e84ec4 100644
--- a/3party/boost/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp
+++ b/3party/boost/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp
@@ -21,8 +21,8 @@ namespace boost { namespace spirit { namespace qi { namespace detail
template <typename Parser, typename Auto>
struct parser_binder
{
- parser_binder(Parser const& p)
- : p(p) {}
+ parser_binder(Parser const& p_)
+ : p(p_) {}
template <typename Iterator, typename Skipper, typename Context>
bool call(Iterator& first, Iterator const& last
@@ -60,8 +60,8 @@ namespace boost { namespace spirit { namespace qi { namespace detail
template <typename Parser>
struct parser_binder<Parser, mpl::true_>
{
- parser_binder(Parser const& p)
- : p(p) {}
+ parser_binder(Parser const& p_)
+ : p(p_) {}
template <typename Iterator, typename Skipper, typename Context>
bool operator()(
diff --git a/3party/boost/boost/spirit/home/qi/nonterminal/error_handler.hpp b/3party/boost/boost/spirit/home/qi/nonterminal/error_handler.hpp
index 6dd4f08123..e8c4f8771a 100644
--- a/3party/boost/boost/spirit/home/qi/nonterminal/error_handler.hpp
+++ b/3party/boost/boost/spirit/home/qi/nonterminal/error_handler.hpp
@@ -76,9 +76,9 @@ namespace boost { namespace spirit { namespace qi
)>
function_type;
- error_handler(function_type subject, F f)
- : subject(subject)
- , f(f)
+ error_handler(function_type subject_, F f_)
+ : subject(subject_)
+ , f(f_)
{
}
diff --git a/3party/boost/boost/spirit/home/qi/nonterminal/grammar.hpp b/3party/boost/boost/spirit/home/qi/nonterminal/grammar.hpp
index 982e49b91e..d41590cab9 100644
--- a/3party/boost/boost/spirit/home/qi/nonterminal/grammar.hpp
+++ b/3party/boost/boost/spirit/home/qi/nonterminal/grammar.hpp
@@ -56,9 +56,9 @@ namespace boost { namespace spirit { namespace qi
grammar(
start_type const& start
- , std::string const& name_ = "unnamed-grammar")
+ , std::string const& name = "unnamed-grammar")
: proto::extends<terminal, base_type>(terminal::make(reference_(start)))
- , name_(name_)
+ , name_(name)
{}
// This constructor is used to catch if the start rule is not
@@ -90,10 +90,10 @@ namespace boost { namespace spirit { namespace qi
template <typename Context, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
return this->proto_base().child0.parse(
- first, last, context, skipper, attr);
+ first, last, context, skipper, attr_);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/nonterminal/rule.hpp b/3party/boost/boost/spirit/home/qi/nonterminal/rule.hpp
index 23d25595a0..8dd42373b0 100644
--- a/3party/boost/boost/spirit/home/qi/nonterminal/rule.hpp
+++ b/3party/boost/boost/spirit/home/qi/nonterminal/rule.hpp
@@ -41,6 +41,7 @@
#if defined(BOOST_MSVC)
# pragma warning(push)
# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+# pragma warning(disable: 4127) // conditional expression is constant
#endif
namespace boost { namespace spirit { namespace qi
@@ -154,9 +155,9 @@ namespace boost { namespace spirit { namespace qi
>::type
encoding_modifier_type;
- explicit rule(std::string const& name_ = "unnamed-rule")
+ explicit rule(std::string const& name = "unnamed-rule")
: base_type(terminal::make(reference_(*this)))
- , name_(name_)
+ , name_(name)
{
}
@@ -168,7 +169,7 @@ namespace boost { namespace spirit { namespace qi
}
template <typename Auto, typename Expr>
- static void define(rule& lhs, Expr const& expr, mpl::false_)
+ static void define(rule& /*lhs*/, Expr const& /*expr*/, mpl::false_)
{
// Report invalid expression error as early as possible.
// If you got an error_invalid_expression error message here,
@@ -184,9 +185,9 @@ namespace boost { namespace spirit { namespace qi
}
template <typename Expr>
- rule(Expr const& expr, std::string const& name_ = "unnamed-rule")
+ rule(Expr const& expr, std::string const& name = "unnamed-rule")
: base_type(terminal::make(reference_(*this)))
- , name_(name_)
+ , name_(name)
{
define<mpl::false_>(*this, expr, traits::matches<qi::domain, Expr>());
}
@@ -231,7 +232,7 @@ namespace boost { namespace spirit { namespace qi
return r;
}
-#if defined(BOOST_NO_RVALUE_REFERENCES)
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
// non-const version needed to suppress proto's %= kicking in
template <typename Expr>
friend rule& operator%=(rule& r, Expr& expr)
@@ -272,7 +273,7 @@ namespace boost { namespace spirit { namespace qi
template <typename Context, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_param) const
{
if (f)
{
@@ -288,7 +289,7 @@ namespace boost { namespace spirit { namespace qi
typename make_attribute::type, attr_type, domain>
transform;
- typename make_attribute::type made_attr = make_attribute::call(attr);
+ typename make_attribute::type made_attr = make_attribute::call(attr_param);
typename transform::type attr_ = transform::pre(made_attr);
// If you are seeing a compilation error here, you are probably
@@ -304,12 +305,12 @@ namespace boost { namespace spirit { namespace qi
{
// do up-stream transformation, this integrates the results
// back into the original attribute value, if appropriate
- traits::post_transform(attr, attr_);
+ traits::post_transform(attr_param, attr_);
return true;
}
// inform attribute transformation of failed rhs
- traits::fail_transform(attr, attr_);
+ traits::fail_transform(attr_param, attr_);
}
return false;
}
@@ -318,7 +319,7 @@ namespace boost { namespace spirit { namespace qi
, typename Attribute, typename Params>
bool parse(Iterator& first, Iterator const& last
, Context& caller_context, Skipper const& skipper
- , Attribute& attr, Params const& params) const
+ , Attribute& attr_param, Params const& params) const
{
if (f)
{
@@ -334,7 +335,7 @@ namespace boost { namespace spirit { namespace qi
typename make_attribute::type, attr_type, domain>
transform;
- typename make_attribute::type made_attr = make_attribute::call(attr);
+ typename make_attribute::type made_attr = make_attribute::call(attr_param);
typename transform::type attr_ = transform::pre(made_attr);
// If you are seeing a compilation error here, you are probably
@@ -350,12 +351,12 @@ namespace boost { namespace spirit { namespace qi
{
// do up-stream transformation, this integrates the results
// back into the original attribute value, if appropriate
- traits::post_transform(attr, attr_);
+ traits::post_transform(attr_param, attr_);
return true;
}
// inform attribute transformation of failed rhs
- traits::fail_transform(attr, attr_);
+ traits::fail_transform(attr_param, attr_);
}
return false;
}
diff --git a/3party/boost/boost/spirit/home/qi/nonterminal/success_handler.hpp b/3party/boost/boost/spirit/home/qi/nonterminal/success_handler.hpp
index 3b3133c7fb..5db83a2aa3 100644
--- a/3party/boost/boost/spirit/home/qi/nonterminal/success_handler.hpp
+++ b/3party/boost/boost/spirit/home/qi/nonterminal/success_handler.hpp
@@ -29,9 +29,9 @@ namespace boost { namespace spirit { namespace qi
)>
function_type;
- success_handler(function_type subject, F f)
- : subject(subject)
- , f(f)
+ success_handler(function_type subject_, F f_)
+ : subject(subject_)
+ , f(f_)
{
}
diff --git a/3party/boost/boost/spirit/home/qi/numeric/bool.hpp b/3party/boost/boost/spirit/home/qi/numeric/bool.hpp
index 4041fc388d..74e1343918 100644
--- a/3party/boost/boost/spirit/home/qi/numeric/bool.hpp
+++ b/3party/boost/boost/spirit/home/qi/numeric/bool.hpp
@@ -153,11 +153,11 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
typedef detail::bool_impl<T, BoolPolicies> extract;
qi::skip_over(first, last, skipper);
- return extract::parse(first, last, attr, BoolPolicies());
+ return extract::parse(first, last, attr_, BoolPolicies());
}
template <typename Context>
@@ -184,11 +184,11 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
typedef detail::bool_impl<T, BoolPolicies> extract;
qi::skip_over(first, last, skipper);
- return extract::parse(first, last, attr, BoolPolicies(), n_, n_);
+ return extract::parse(first, last, attr_, BoolPolicies(), n_, n_);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/numeric/bool_policies.hpp b/3party/boost/boost/spirit/home/qi/numeric/bool_policies.hpp
index 1e7c6e5164..62641a6036 100644
--- a/3party/boost/boost/spirit/home/qi/numeric/bool_policies.hpp
+++ b/3party/boost/boost/spirit/home/qi/numeric/bool_policies.hpp
@@ -24,11 +24,11 @@ namespace boost { namespace spirit { namespace qi
{
template <typename Iterator, typename Attribute>
static bool
- parse_true(Iterator& first, Iterator const& last, Attribute& attr)
+ parse_true(Iterator& first, Iterator const& last, Attribute& attr_)
{
if (detail::string_parse("true", first, last, unused))
{
- spirit::traits::assign_to(T(true), attr); // result is true
+ spirit::traits::assign_to(T(true), attr_); // result is true
return true;
}
return false;
@@ -36,11 +36,11 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Attribute>
static bool
- parse_false(Iterator& first, Iterator const& last, Attribute& attr)
+ parse_false(Iterator& first, Iterator const& last, Attribute& attr_)
{
if (detail::string_parse("false", first, last, unused))
{
- spirit::traits::assign_to(T(false), attr); // result is false
+ spirit::traits::assign_to(T(false), attr_); // result is false
return true;
}
return false;
@@ -53,11 +53,11 @@ namespace boost { namespace spirit { namespace qi
{
template <typename Iterator, typename Attribute>
static bool
- parse_true(Iterator& first, Iterator const& last, Attribute& attr)
+ parse_true(Iterator& first, Iterator const& last, Attribute& attr_)
{
if (detail::string_parse("true", "TRUE", first, last, unused))
{
- spirit::traits::assign_to(T(true), attr); // result is true
+ spirit::traits::assign_to(T(true), attr_); // result is true
return true;
}
return false;
@@ -65,11 +65,11 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Attribute>
static bool
- parse_false(Iterator& first, Iterator const& last, Attribute& attr)
+ parse_false(Iterator& first, Iterator const& last, Attribute& attr_)
{
if (detail::string_parse("false", "FALSE", first, last, unused))
{
- spirit::traits::assign_to(T(false), attr); // result is false
+ spirit::traits::assign_to(T(false), attr_); // result is false
return true;
}
return false;
diff --git a/3party/boost/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp b/3party/boost/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp
index f57c4d7214..5137f87f10 100644
--- a/3party/boost/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp
+++ b/3party/boost/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp
@@ -19,6 +19,7 @@
#include <boost/spirit/home/support/unused.hpp>
#include <boost/spirit/home/qi/detail/attributes.hpp>
#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/numeric_traits.hpp>
#include <boost/preprocessor/repetition/repeat.hpp>
#include <boost/preprocessor/iteration/local.hpp>
#include <boost/preprocessor/comparison/less.hpp>
@@ -227,7 +228,7 @@ namespace boost { namespace spirit { namespace qi { namespace detail
( (MaxDigits < 0)
|| (MaxDigits > digits_traits<T, Radix>::value)
)
- && std::numeric_limits<T>::is_modulo
+ && traits::check_overflow<T>::value
>()
);
}
diff --git a/3party/boost/boost/spirit/home/qi/numeric/int.hpp b/3party/boost/boost/spirit/home/qi/numeric/int.hpp
index a30bb3f15d..68e214cef7 100644
--- a/3party/boost/boost/spirit/home/qi/numeric/int.hpp
+++ b/3party/boost/boost/spirit/home/qi/numeric/int.hpp
@@ -19,6 +19,7 @@
#include <boost/spirit/home/qi/parser.hpp>
#include <boost/spirit/home/support/common_terminals.hpp>
#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -28,7 +29,10 @@ namespace boost { namespace spirit
{
template <typename T, unsigned Radix, unsigned MinDigits
, int MaxDigits>
- struct int_parser {};
+ struct int_parser
+ {
+ BOOST_SPIRIT_IS_TAG()
+ };
}
namespace qi
@@ -198,11 +202,11 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
typedef extract_int<T, Radix, MinDigits, MaxDigits> extract;
qi::skip_over(first, last, skipper);
- return extract::call(first, last, attr);
+ return extract::call(first, last, attr_);
}
template <typename Context>
@@ -236,7 +240,7 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_param) const
{
typedef extract_int<T, Radix, MinDigits, MaxDigits> extract;
qi::skip_over(first, last, skipper);
@@ -246,7 +250,7 @@ namespace boost { namespace spirit { namespace qi
if (extract::call(first, last, attr_) && (attr_ == n_))
{
- traits::assign_to(attr_, attr);
+ traits::assign_to(attr_, attr_param);
return true;
}
diff --git a/3party/boost/boost/spirit/home/qi/numeric/numeric_utils.hpp b/3party/boost/boost/spirit/home/qi/numeric/numeric_utils.hpp
index 72a54d8fd4..eebf40a0fa 100644
--- a/3party/boost/boost/spirit/home/qi/numeric/numeric_utils.hpp
+++ b/3party/boost/boost/spirit/home/qi/numeric/numeric_utils.hpp
@@ -53,7 +53,7 @@ namespace boost { namespace spirit { namespace qi
not_supported_radix, ());
template <typename Iterator>
- inline static bool call(Iterator& first, Iterator const& last, T& attr)
+ inline static bool call(Iterator& first, Iterator const& last, T& attr_)
{
if (first == last)
return false;
@@ -69,7 +69,7 @@ namespace boost { namespace spirit { namespace qi
Iterator save = first;
if (!extract_type::parse(first, last,
- detail::cast_unsigned<T>::call(attr)))
+ detail::cast_unsigned<T>::call(attr_)))
{
first = save;
return false;
@@ -81,10 +81,10 @@ namespace boost { namespace spirit { namespace qi
inline static bool call(Iterator& first, Iterator const& last, Attribute& attr_)
{
// this case is called when Attribute is not T
- T attr;
- if (call(first, last, attr))
+ T attr_local;
+ if (call(first, last, attr_local))
{
- traits::assign_to(attr, attr_);
+ traits::assign_to(attr_local, attr_);
return true;
}
return false;
@@ -103,7 +103,7 @@ namespace boost { namespace spirit { namespace qi
not_supported_radix, ());
template <typename Iterator>
- inline static bool call(Iterator& first, Iterator const& last, T& attr)
+ inline static bool call(Iterator& first, Iterator const& last, T& attr_)
{
if (first == last)
return false;
@@ -119,9 +119,9 @@ namespace boost { namespace spirit { namespace qi
Iterator save = first;
bool hit = extract_sign(first, last);
if (hit)
- hit = extract_neg_type::parse(first, last, attr);
+ hit = extract_neg_type::parse(first, last, attr_);
else
- hit = extract_pos_type::parse(first, last, attr);
+ hit = extract_pos_type::parse(first, last, attr_);
if (!hit)
{
@@ -135,10 +135,10 @@ namespace boost { namespace spirit { namespace qi
inline static bool call(Iterator& first, Iterator const& last, Attribute& attr_)
{
// this case is called when Attribute is not T
- T attr;
- if (call(first, last, attr))
+ T attr_local;
+ if (call(first, last, attr_local))
{
- traits::assign_to(attr, attr_);
+ traits::assign_to(attr_local, attr_);
return true;
}
return false;
diff --git a/3party/boost/boost/spirit/home/qi/numeric/real.hpp b/3party/boost/boost/spirit/home/qi/numeric/real.hpp
index 325acd5ad7..27d48e50aa 100644
--- a/3party/boost/boost/spirit/home/qi/numeric/real.hpp
+++ b/3party/boost/boost/spirit/home/qi/numeric/real.hpp
@@ -161,24 +161,24 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context, typename Skipper>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , T& attr) const
+ , T& attr_) const
{
typedef detail::real_impl<T, RealPolicies> extract;
qi::skip_over(first, last, skipper);
- return extract::parse(first, last, attr, RealPolicies());
+ return extract::parse(first, last, attr_, RealPolicies());
}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_param) const
{
// this case is called when Attribute is not T
T attr_;
if (parse(first, last, context, skipper, attr_))
{
- traits::assign_to(attr_, attr);
+ traits::assign_to(attr_, attr_param);
return true;
}
return false;
@@ -207,8 +207,8 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Context&, Skipper const& skipper
+ , Attribute& attr_param) const
{
typedef detail::real_impl<T, RealPolicies> extract;
qi::skip_over(first, last, skipper);
@@ -219,7 +219,7 @@ namespace boost { namespace spirit { namespace qi
if (extract::parse(first, last, attr_, RealPolicies()) &&
(attr_ == n_))
{
- traits::assign_to(attr_, attr);
+ traits::assign_to(attr_, attr_param);
return true;
}
diff --git a/3party/boost/boost/spirit/home/qi/numeric/real_policies.hpp b/3party/boost/boost/spirit/home/qi/numeric/real_policies.hpp
index 6512d6f3f7..1315888acb 100644
--- a/3party/boost/boost/spirit/home/qi/numeric/real_policies.hpp
+++ b/3party/boost/boost/spirit/home/qi/numeric/real_policies.hpp
@@ -37,9 +37,9 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Attribute>
static bool
- parse_n(Iterator& first, Iterator const& last, Attribute& attr)
+ parse_n(Iterator& first, Iterator const& last, Attribute& attr_)
{
- return extract_uint<T, 10, 1, -1>::call(first, last, attr);
+ return extract_uint<T, 10, 1, -1>::call(first, last, attr_);
}
template <typename Iterator>
@@ -54,9 +54,9 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Attribute>
static bool
- parse_frac_n(Iterator& first, Iterator const& last, Attribute& attr)
+ parse_frac_n(Iterator& first, Iterator const& last, Attribute& attr_)
{
- return extract_uint<T, 10, 1, -1, true>::call(first, last, attr);
+ return extract_uint<T, 10, 1, -1, true>::call(first, last, attr_);
}
template <typename Iterator>
@@ -71,9 +71,9 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator>
static bool
- parse_exp_n(Iterator& first, Iterator const& last, int& attr)
+ parse_exp_n(Iterator& first, Iterator const& last, int& attr_)
{
- return extract_int<int, 10, 1, -1>::call(first, last, attr);
+ return extract_int<int, 10, 1, -1>::call(first, last, attr_);
}
///////////////////////////////////////////////////////////////////////
@@ -105,7 +105,7 @@ namespace boost { namespace spirit { namespace qi
///////////////////////////////////////////////////////////////////////
template <typename Iterator, typename Attribute>
static bool
- parse_nan(Iterator& first, Iterator const& last, Attribute& attr)
+ parse_nan(Iterator& first, Iterator const& last, Attribute& attr_)
{
if (first == last)
return false; // end of input reached
@@ -128,7 +128,7 @@ namespace boost { namespace spirit { namespace qi
first = ++i;
}
- attr = std::numeric_limits<T>::quiet_NaN();
+ attr_ = std::numeric_limits<T>::quiet_NaN();
return true;
}
return false;
@@ -136,7 +136,7 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Attribute>
static bool
- parse_inf(Iterator& first, Iterator const& last, Attribute& attr)
+ parse_inf(Iterator& first, Iterator const& last, Attribute& attr_)
{
if (first == last)
return false; // end of input reached
@@ -149,7 +149,7 @@ namespace boost { namespace spirit { namespace qi
{
// skip allowed 'inity' part of infinity
detail::string_parse("inity", "INITY", first, last, unused);
- attr = std::numeric_limits<T>::infinity();
+ attr_ = std::numeric_limits<T>::infinity();
return true;
}
return false;
diff --git a/3party/boost/boost/spirit/home/qi/numeric/uint.hpp b/3party/boost/boost/spirit/home/qi/numeric/uint.hpp
index ea763d356c..f6d1efde37 100644
--- a/3party/boost/boost/spirit/home/qi/numeric/uint.hpp
+++ b/3party/boost/boost/spirit/home/qi/numeric/uint.hpp
@@ -235,11 +235,11 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
typedef extract_uint<T, Radix, MinDigits, MaxDigits> extract;
qi::skip_over(first, last, skipper);
- return extract::call(first, last, attr);
+ return extract::call(first, last, attr_);
}
template <typename Context>
@@ -273,7 +273,7 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& /*context*/, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_param) const
{
typedef extract_uint<T, Radix, MinDigits, MaxDigits> extract;
qi::skip_over(first, last, skipper);
@@ -283,7 +283,7 @@ namespace boost { namespace spirit { namespace qi
if (extract::call(first, last, attr_) && (attr_ == n_))
{
- traits::assign_to(attr_, attr);
+ traits::assign_to(attr_, attr_param);
return true;
}
diff --git a/3party/boost/boost/spirit/home/qi/operator/alternative.hpp b/3party/boost/boost/spirit/home/qi/operator/alternative.hpp
index 9785d45101..22cfdeff56 100644
--- a/3party/boost/boost/spirit/home/qi/operator/alternative.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/alternative.hpp
@@ -63,17 +63,17 @@ namespace boost { namespace spirit { namespace qi
type;
};
- alternative(Elements const& elements)
- : elements(elements) {}
+ alternative(Elements const& elements_)
+ : elements(elements_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
detail::alternative_function<Iterator, Context, Skipper, Attribute>
- f(first, last, context, skipper, attr);
+ f(first, last, context, skipper, attr_);
// return true if *any* of the parsers succeed
return fusion::any(elements, f);
diff --git a/3party/boost/boost/spirit/home/qi/operator/and_predicate.hpp b/3party/boost/boost/spirit/home/qi/operator/and_predicate.hpp
index 031ce1df01..0554c10d6d 100644
--- a/3party/boost/boost/spirit/home/qi/operator/and_predicate.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/and_predicate.hpp
@@ -43,8 +43,8 @@ namespace boost { namespace spirit { namespace qi
typedef unused_type type;
};
- and_predicate(Subject const& subject)
- : subject(subject) {}
+ and_predicate(Subject const& subject_)
+ : subject(subject_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
diff --git a/3party/boost/boost/spirit/home/qi/operator/difference.hpp b/3party/boost/boost/spirit/home/qi/operator/difference.hpp
index 5f8c4c90cc..f703d7f9e5 100644
--- a/3party/boost/boost/spirit/home/qi/operator/difference.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/difference.hpp
@@ -46,14 +46,14 @@ namespace boost { namespace spirit { namespace qi
type;
};
- difference(Left const& left, Right const& right)
- : left(left), right(right) {}
+ difference(Left const& left_, Right const& right_)
+ : left(left_), right(right_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
// Unlike classic Spirit, with this version of difference, the rule
// lit("policeman") - "police" will always fail to match.
@@ -71,7 +71,7 @@ namespace boost { namespace spirit { namespace qi
return false;
}
// RHS fails, now try LHS
- return left.parse(first, last, context, skipper, attr);
+ return left.parse(first, last, context, skipper, attr_);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/operator/expect.hpp b/3party/boost/boost/spirit/home/qi/operator/expect.hpp
index c42b2defc9..ff279fd5d1 100644
--- a/3party/boost/boost/spirit/home/qi/operator/expect.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/expect.hpp
@@ -39,9 +39,9 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator>
struct expectation_failure : std::runtime_error
{
- expectation_failure(Iterator first, Iterator last, info const& what)
+ expectation_failure(Iterator first_, Iterator last_, info const& what)
: std::runtime_error("boost::spirit::qi::expectation_failure")
- , first(first), last(last), what_(what)
+ , first(first_), last(last_), what_(what)
{}
~expectation_failure() throw() {}
diff --git a/3party/boost/boost/spirit/home/qi/operator/kleene.hpp b/3party/boost/boost/spirit/home/qi/operator/kleene.hpp
index ae778f0bf7..798e63d675 100644
--- a/3party/boost/boost/spirit/home/qi/operator/kleene.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/kleene.hpp
@@ -56,8 +56,8 @@ namespace boost { namespace spirit { namespace qi
type;
};
- kleene(Subject const& subject)
- : subject(subject) {}
+ kleene(Subject const& subject_)
+ : subject(subject_) {}
template <typename F>
bool parse_container(F f) const
@@ -71,17 +71,17 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
// ensure the attribute is actually a container type
- traits::make_container(attr);
+ traits::make_container(attr_);
typedef detail::fail_function<Iterator, Context, Skipper>
fail_function;
Iterator iter = first;
fail_function f(iter, last, context, skipper);
- parse_container(detail::make_pass_container(f, attr));
+ parse_container(detail::make_pass_container(f, attr_));
first = f.first;
return true;
diff --git a/3party/boost/boost/spirit/home/qi/operator/list.hpp b/3party/boost/boost/spirit/home/qi/operator/list.hpp
index cc067cd342..c5b3ef6cd3 100644
--- a/3party/boost/boost/spirit/home/qi/operator/list.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/list.hpp
@@ -55,8 +55,8 @@ namespace boost { namespace spirit { namespace qi
type;
};
- list(Left const& left, Right const& right)
- : left(left), right(right) {}
+ list(Left const& left_, Right const& right_)
+ : left(left_), right(right_) {}
template <typename F>
bool parse_container(F f) const
@@ -80,17 +80,17 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
typedef detail::fail_function<Iterator, Context, Skipper>
fail_function;
// ensure the attribute is actually a container type
- traits::make_container(attr);
+ traits::make_container(attr_);
Iterator iter = first;
fail_function f(iter, last, context, skipper);
- if (!parse_container(detail::make_pass_container(f, attr)))
+ if (!parse_container(detail::make_pass_container(f, attr_)))
return false;
first = f.first;
diff --git a/3party/boost/boost/spirit/home/qi/operator/not_predicate.hpp b/3party/boost/boost/spirit/home/qi/operator/not_predicate.hpp
index 57cbb0db4a..1fb81cd6e0 100644
--- a/3party/boost/boost/spirit/home/qi/operator/not_predicate.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/not_predicate.hpp
@@ -42,8 +42,8 @@ namespace boost { namespace spirit { namespace qi
typedef unused_type type;
};
- not_predicate(Subject const& subject)
- : subject(subject) {}
+ not_predicate(Subject const& subject_)
+ : subject(subject_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
diff --git a/3party/boost/boost/spirit/home/qi/operator/optional.hpp b/3party/boost/boost/spirit/home/qi/operator/optional.hpp
index b183ad6f60..0f7698de72 100644
--- a/3party/boost/boost/spirit/home/qi/operator/optional.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/optional.hpp
@@ -55,23 +55,23 @@ namespace boost { namespace spirit { namespace qi
type;
};
- optional(Subject const& subject)
- : subject(subject) {}
+ optional(Subject const& subject_)
+ : subject(subject_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse_impl(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr, mpl::false_) const
+ , Attribute& attr_, mpl::false_) const
{
// create a local value if Attribute is not unused_type
- typename spirit::result_of::optional_value<Attribute>::type val =
+ typename spirit::result_of::optional_value<Attribute>::type val =
typename spirit::result_of::optional_value<Attribute>::type();
if (subject.parse(first, last, context, skipper, val))
{
// assign the parsed value into our attribute
- spirit::traits::assign_to(val, attr);
+ spirit::traits::assign_to(val, attr_);
}
return true;
}
@@ -80,9 +80,9 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse_impl(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr, mpl::true_) const
+ , Attribute& attr_, mpl::true_) const
{
- subject.parse(first, last, context, skipper, attr);
+ subject.parse(first, last, context, skipper, attr_);
return true;
}
@@ -90,12 +90,12 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
- typedef typename spirit::result_of::optional_value<Attribute>::type
+ typedef typename spirit::result_of::optional_value<Attribute>::type
attribute_type;
- return parse_impl(first, last, context, skipper, attr
+ return parse_impl(first, last, context, skipper, attr_
, traits::is_container<attribute_type>());
}
diff --git a/3party/boost/boost/spirit/home/qi/operator/permutation.hpp b/3party/boost/boost/spirit/home/qi/operator/permutation.hpp
index 1dcad89e10..cadfa24e77 100644
--- a/3party/boost/boost/spirit/home/qi/operator/permutation.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/permutation.hpp
@@ -62,8 +62,8 @@ namespace boost { namespace spirit { namespace qi
type;
};
- permutation(Elements const& elements)
- : elements(elements) {}
+ permutation(Elements const& elements_)
+ : elements(elements_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
@@ -82,7 +82,7 @@ namespace boost { namespace spirit { namespace qi
}
// wrap the attribute in a tuple if it is not a tuple
- typename traits::wrap_if_not_tuple<Attribute>::type attr(attr_);
+ typename traits::wrap_if_not_tuple<Attribute>::type attr_local(attr_);
// We have a bool array 'flags' with one flag for each parser.
// permute_function sets the slot to true when the corresponding
@@ -91,7 +91,7 @@ namespace boost { namespace spirit { namespace qi
bool result = false;
f.taken = flags.begin();
- while (spirit::any_if_ns(elements, attr, f, predicate()))
+ while (spirit::any_if_ns(elements, attr_local, f, predicate()))
{
f.taken = flags.begin();
result = true;
diff --git a/3party/boost/boost/spirit/home/qi/operator/plus.hpp b/3party/boost/boost/spirit/home/qi/operator/plus.hpp
index 780403a2ca..3c08d1fabe 100644
--- a/3party/boost/boost/spirit/home/qi/operator/plus.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/plus.hpp
@@ -53,8 +53,8 @@ namespace boost { namespace spirit { namespace qi
type;
};
- plus(Subject const& subject)
- : subject(subject) {}
+ plus(Subject const& subject_)
+ : subject(subject_) {}
template <typename F>
bool parse_container(F f) const
@@ -72,17 +72,17 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
typedef detail::fail_function<Iterator, Context, Skipper>
fail_function;
// ensure the attribute is actually a container type
- traits::make_container(attr);
+ traits::make_container(attr_);
Iterator iter = first;
fail_function f(iter, last, context, skipper);
- if (!parse_container(detail::make_pass_container(f, attr)))
+ if (!parse_container(detail::make_pass_container(f, attr_)))
return false;
first = f.first;
diff --git a/3party/boost/boost/spirit/home/qi/operator/sequence_base.hpp b/3party/boost/boost/spirit/home/qi/operator/sequence_base.hpp
index 35f45dfaa3..366468602e 100644
--- a/3party/boost/boost/spirit/home/qi/operator/sequence_base.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/sequence_base.hpp
@@ -60,8 +60,8 @@ namespace boost { namespace spirit { namespace qi
type;
};
- sequence_base(Elements const& elements)
- : elements(elements) {}
+ sequence_base(Elements const& elements_)
+ : elements(elements_) {}
// standard case. Attribute is a fusion tuple
template <typename Iterator, typename Context
@@ -80,11 +80,11 @@ namespace boost { namespace spirit { namespace qi
, typename mpl::and_<
traits::one_element_sequence<attr_type_>
, mpl::not_<traits::one_element_sequence<Attribute> >
- >::type
- >::type attr(attr_);
+ >::type
+ >::type attr_local(attr_);
// return false if *any* of the parsers fail
- if (spirit::any_if(elements, attr
+ if (spirit::any_if(elements, attr_local
, Derived::fail_function(iter, last, context, skipper), predicate()))
return false;
first = iter;
@@ -118,9 +118,9 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
- return parse_impl(first, last, context, skipper, attr
+ return parse_impl(first, last, context, skipper, attr_
, traits::is_container<Attribute>());
}
diff --git a/3party/boost/boost/spirit/home/qi/operator/sequential_or.hpp b/3party/boost/boost/spirit/home/qi/operator/sequential_or.hpp
index 80b86f38e4..a4c9c0ceca 100644
--- a/3party/boost/boost/spirit/home/qi/operator/sequential_or.hpp
+++ b/3party/boost/boost/spirit/home/qi/operator/sequential_or.hpp
@@ -16,6 +16,7 @@
#include <boost/spirit/home/qi/detail/attributes.hpp>
#include <boost/spirit/home/support/detail/what_function.hpp>
#include <boost/spirit/home/support/algorithm/any_if_ns.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
#include <boost/fusion/include/as_vector.hpp>
#include <boost/fusion/include/for_each.hpp>
@@ -57,8 +58,8 @@ namespace boost { namespace spirit { namespace qi
type;
};
- sequential_or(Elements const& elements)
- : elements(elements) {}
+ sequential_or(Elements const& elements_)
+ : elements(elements_) {}
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
@@ -71,12 +72,12 @@ namespace boost { namespace spirit { namespace qi
f(first, last, context, skipper);
// wrap the attribute in a tuple if it is not a tuple
- typename traits::wrap_if_not_tuple<Attribute>::type attr(attr_);
+ typename traits::wrap_if_not_tuple<Attribute>::type attr_local(attr_);
// return true if *any* of the parsers succeed
// (we use the non-short-circuiting version: any_if_ns
// to force all elements to be tested)
- return spirit::any_if_ns(elements, attr, f, predicate());
+ return spirit::any_if_ns(elements, attr_local, f, predicate());
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/parse_attr.hpp b/3party/boost/boost/spirit/home/qi/parse_attr.hpp
index 1933ffb09c..6db33008f1 100644
--- a/3party/boost/boost/spirit/home/qi/parse_attr.hpp
+++ b/3party/boost/boost/spirit/home/qi/parse_attr.hpp
@@ -62,8 +62,8 @@ namespace boost { namespace spirit { namespace qi
BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
> vector_type;
- vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
- return compile<qi::domain>(expr).parse(first, last, unused, unused, attr);
+ vector_type lattr (BOOST_PP_ENUM_PARAMS(N, attr));
+ return compile<qi::domain>(expr).parse(first, last, unused, unused, lattr);
}
template <typename Iterator, typename Expr
@@ -113,9 +113,9 @@ namespace boost { namespace spirit { namespace qi
BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
> vector_type;
- vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+ vector_type lattr (BOOST_PP_ENUM_PARAMS(N, attr));
if (!compile<qi::domain>(expr).parse(
- first, last, unused, skipper_, attr))
+ first, last, unused, skipper_, lattr))
return false;
if (post_skip == skip_flag::postskip)
diff --git a/3party/boost/boost/spirit/home/qi/reference.hpp b/3party/boost/boost/spirit/home/qi/reference.hpp
index f6fcabcee1..f1f5c67570 100644
--- a/3party/boost/boost/spirit/home/qi/reference.hpp
+++ b/3party/boost/boost/spirit/home/qi/reference.hpp
@@ -38,9 +38,9 @@ namespace boost { namespace spirit { namespace qi
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
- , Attribute& attr) const
+ , Attribute& attr_) const
{
- return ref.get().parse(first, last, context, skipper, attr);
+ return ref.get().parse(first, last, context, skipper, attr_);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/stream/detail/iterator_source.hpp b/3party/boost/boost/spirit/home/qi/stream/detail/iterator_source.hpp
index 8a48eda76d..af53366c0b 100644
--- a/3party/boost/boost/spirit/home/qi/stream/detail/iterator_source.hpp
+++ b/3party/boost/boost/spirit/home/qi/stream/detail/iterator_source.hpp
@@ -50,17 +50,17 @@ namespace boost { namespace spirit { namespace qi { namespace detail
return bytes_read;
}
- // Write is implemented only to satisfy the requirements of a
+ // Write is implemented only to satisfy the requirements of a
// boost::iostreams::seekable_device. We need to have see support to
- // be able to figure out how many characters have been actually
+ // be able to figure out how many characters have been actually
// consumed by the stream.
- std::streamsize write(const char*, std::streamsize)
+ std::streamsize write(const char_type*, std::streamsize)
{
BOOST_ASSERT(false); // not supported
return -1;
}
- std::streampos seek(boost::iostreams::stream_offset, std::ios_base::seekdir way)
+ std::streampos seek(boost::iostreams::stream_offset, std::ios_base::seekdir way)
{
BOOST_ASSERT(way == std::ios_base::cur); // only support queries
return pos; // return current position
diff --git a/3party/boost/boost/spirit/home/qi/stream/stream.hpp b/3party/boost/boost/spirit/home/qi/stream/stream.hpp
index a46c0ee8d9..83b417df64 100644
--- a/3party/boost/boost/spirit/home/qi/stream/stream.hpp
+++ b/3party/boost/boost/spirit/home/qi/stream/stream.hpp
@@ -70,8 +70,12 @@ namespace boost { namespace spirit { namespace qi
// advance the iterator if everything is ok
if (in) {
- std::streamsize pos = in.tellg();
- std::advance(first, pos);
+ if (!in.eof()) {
+ std::streamsize pos = in.tellg();
+ std::advance(first, pos);
+ } else {
+ first = last;
+ }
return true;
}
diff --git a/3party/boost/boost/spirit/home/qi/string/detail/tst.hpp b/3party/boost/boost/spirit/home/qi/string/detail/tst.hpp
index 989477d27b..168e4cf03e 100644
--- a/3party/boost/boost/spirit/home/qi/string/detail/tst.hpp
+++ b/3party/boost/boost/spirit/home/qi/string/detail/tst.hpp
@@ -24,8 +24,8 @@ namespace boost { namespace spirit { namespace qi { namespace detail
template <typename Char, typename T>
struct tst_node
{
- tst_node(Char id)
- : id(id), data(0), lt(0), eq(0), gt(0)
+ tst_node(Char id_)
+ : id(id_), data(0), lt(0), eq(0), gt(0)
{
}
diff --git a/3party/boost/boost/spirit/home/qi/string/lit.hpp b/3party/boost/boost/spirit/home/qi/string/lit.hpp
index 1b966c32b5..1e163619c9 100644
--- a/3party/boost/boost/spirit/home/qi/string/lit.hpp
+++ b/3party/boost/boost/spirit/home/qi/string/lit.hpp
@@ -89,8 +89,8 @@ namespace boost { namespace spirit { namespace qi
char_type;
typedef std::basic_string<char_type> string_type;
- literal_string(typename add_reference<String>::type str)
- : str(str)
+ literal_string(typename add_reference<String>::type str_)
+ : str(str_)
{}
template <typename Context, typename Iterator>
@@ -104,10 +104,10 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& /*context*/, Skipper const& skipper, Attribute& attr) const
+ , Context& /*context*/, Skipper const& skipper, Attribute& attr_) const
{
qi::skip_over(first, last, skipper);
- return detail::string_parse(str, first, last, attr);
+ return detail::string_parse(str, first, last, attr_);
}
template <typename Context>
@@ -163,10 +163,10 @@ namespace boost { namespace spirit { namespace qi
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& /*context*/, Skipper const& skipper, Attribute& attr) const
+ , Context& /*context*/, Skipper const& skipper, Attribute& attr_) const
{
qi::skip_over(first, last, skipper);
- return detail::string_parse(str_lo, str_hi, first, last, attr);
+ return detail::string_parse(str_lo, str_hi, first, last, attr_);
}
template <typename Context>
diff --git a/3party/boost/boost/spirit/home/qi/string/symbols.hpp b/3party/boost/boost/spirit/home/qi/string/symbols.hpp
index a9656f1827..081632438c 100644
--- a/3party/boost/boost/spirit/home/qi/string/symbols.hpp
+++ b/3party/boost/boost/spirit/home/qi/string/symbols.hpp
@@ -166,7 +166,7 @@ namespace boost { namespace spirit { namespace qi
return sym.remove(str);
}
-#if defined(BOOST_NO_RVALUE_REFERENCES)
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
// non-const version needed to suppress proto's += kicking in
template <typename Str>
friend adder const&
@@ -257,14 +257,14 @@ public:
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
- , Context& /*context*/, Skipper const& skipper, Attribute& attr) const
+ , Context& /*context*/, Skipper const& skipper, Attribute& attr_) const
{
qi::skip_over(first, last, skipper);
if (value_type* val_ptr
= lookup->find(first, last, Filter()))
{
- spirit::traits::assign_to(*val_ptr, attr);
+ spirit::traits::assign_to(*val_ptr, attr_);
return true;
}
return false;
@@ -290,8 +290,8 @@ public:
template <typename, typename = unused_type, typename = unused_type>
struct result { typedef adder const& type; };
- adder(symbols& sym)
- : sym(sym)
+ adder(symbols& sym_)
+ : sym(sym_)
{
}
@@ -333,8 +333,8 @@ public:
template <typename, typename = unused_type, typename = unused_type>
struct result { typedef remover const& type; };
- remover(symbols& sym)
- : sym(sym)
+ remover(symbols& sym_)
+ : sym(sym_)
{
}
diff --git a/3party/boost/boost/spirit/home/qi/string/tst_map.hpp b/3party/boost/boost/spirit/home/qi/string/tst_map.hpp
index 0ea838c42e..a3208f2743 100644
--- a/3party/boost/boost/spirit/home/qi/string/tst_map.hpp
+++ b/3party/boost/boost/spirit/home/qi/string/tst_map.hpp
@@ -54,16 +54,20 @@ namespace boost { namespace spirit { namespace qi
Iterator save = first;
typename map_type::const_iterator
i = map.find(filter(*first++));
- if (i == map.end())
- {
- first = save;
- return 0;
- }
- if (T* p = node::find(i->second.root, first, last, filter))
+
+ if (i != map.end())
{
- return p;
+ if (T* p = node::find(i->second.root, first, last, filter))
+ {
+ return p;
+ }
+
+ if (i->second.data)
+ {
+ return i->second.data;
+ }
}
- return i->second.data;
+ first = save;
}
return 0;
}
diff --git a/3party/boost/boost/spirit/home/support/action_dispatch.hpp b/3party/boost/boost/spirit/home/support/action_dispatch.hpp
index 7b9bccf097..c17f56dfb8 100644
--- a/3party/boost/boost/spirit/home/support/action_dispatch.hpp
+++ b/3party/boost/boost/spirit/home/support/action_dispatch.hpp
@@ -15,8 +15,8 @@
#include<boost/config.hpp>
-#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_LAMBDAS) && \
- !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_NO_DECLTYPE)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_LAMBDAS) && \
+ !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE)
#include <utility>
#include <type_traits>
#endif
@@ -30,8 +30,8 @@ namespace boost { namespace spirit { namespace traits
template <typename Component>
struct action_dispatch
{
-#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_LAMBDAS) && \
- !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_NO_DECLTYPE)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_LAMBDAS) && \
+ !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE)
// omit function parameters without specializing for each possible
// type of callable entity
// many thanks to Eelis/##iso-c++ for this contribution
diff --git a/3party/boost/boost/spirit/home/support/argument_expression.hpp b/3party/boost/boost/spirit/home/support/argument_expression.hpp
index ff5d4cec53..ccf5021dd7 100644
--- a/3party/boost/boost/spirit/home/support/argument_expression.hpp
+++ b/3party/boost/boost/spirit/home/support/argument_expression.hpp
@@ -21,29 +21,6 @@ namespace boost { namespace spirit
namespace expression
{
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
- template <int N>
- struct argument
- {
- typedef phoenix::actor<spirit::argument<N> > type;
-
- static type make()
- {
- return spirit::argument<N>();
- }
- };
-
- template <typename Dummy>
- struct attribute_context
- {
- typedef phoenix::actor<spirit::attribute_context<Dummy> > type;
-
- static type make()
- {
- return spirit::attribute_context<Dummy>();
- }
- };
-#else
template <int N>
struct argument
: phoenix::expression::terminal<spirit::argument<N> >
@@ -73,11 +50,9 @@ namespace boost { namespace spirit
return e;
}
};
-#endif
}
}}
-#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
namespace boost { namespace phoenix
{
namespace result_of
@@ -127,6 +102,5 @@ namespace boost { namespace phoenix
>
{};
}}
-#endif // BOOST_SPIRIT_USE_PHOENIX_V3
#endif
diff --git a/3party/boost/boost/spirit/home/support/attributes.hpp b/3party/boost/boost/spirit/home/support/attributes.hpp
index fbcc19dc25..163f11cfe2 100644
--- a/3party/boost/boost/spirit/home/support/attributes.hpp
+++ b/3party/boost/boost/spirit/home/support/attributes.hpp
@@ -202,6 +202,19 @@ namespace boost { namespace spirit { namespace traits
struct is_weak_substitute<T, optional<Expected> >
: is_weak_substitute<T, Expected> {};
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+ template <typename T, typename Expected>
+ struct is_weak_substitute<boost::variant<T>, Expected>
+ : is_weak_substitute<T, Expected>
+ {};
+
+ template <typename T0, typename T1, typename ...TN, typename Expected>
+ struct is_weak_substitute<boost::variant<T0, T1, TN...>,
+ Expected>
+ : mpl::bool_<is_weak_substitute<T0, Expected>::type::value &&
+ is_weak_substitute<boost::variant<T1, TN...>, Expected>::type::value>
+ {};
+#else
#define BOOST_SPIRIT_IS_WEAK_SUBSTITUTE(z, N, _) \
is_weak_substitute<BOOST_PP_CAT(T, N), Expected>::type::value && \
/***/
@@ -220,6 +233,7 @@ namespace boost { namespace spirit { namespace traits
{};
#undef BOOST_SPIRIT_IS_WEAK_SUBSTITUTE
+#endif
template <typename T>
struct is_weak_substitute<T, T
@@ -516,7 +530,7 @@ namespace boost { namespace spirit { namespace traits
{
if (!val)
return 0;
- return val.get();
+ return traits::size(val.get());
}
};
@@ -771,7 +785,7 @@ namespace boost { namespace spirit { namespace traits
};
// never called, but needed for decltype-based result_of (C++0x)
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template <typename Element>
typename result<element_attribute(Element)>::type
operator()(Element&&) const;
@@ -1181,8 +1195,8 @@ namespace boost { namespace spirit { namespace traits
template <typename Out>
struct print_fusion_sequence
{
- print_fusion_sequence(Out& out)
- : out(out), is_first(true) {}
+ print_fusion_sequence(Out& out_)
+ : out(out_), is_first(true) {}
typedef void result_type;
@@ -1204,7 +1218,7 @@ namespace boost { namespace spirit { namespace traits
template <typename Out>
struct print_visitor : static_visitor<>
{
- print_visitor(Out& out) : out(out) {}
+ print_visitor(Out& out_) : out(out_) {}
template <typename T>
void operator()(T const& val) const
diff --git a/3party/boost/boost/spirit/home/support/auto.hpp b/3party/boost/boost/spirit/home/support/auto.hpp
new file mode 100644
index 0000000000..69aa76094e
--- /dev/null
+++ b/3party/boost/boost/spirit/home/support/auto.hpp
@@ -0,0 +1,35 @@
+/*=============================================================================
+ Copyright (c) 2001-2012 Joel de Guzman
+
+ 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_SPIRIT_AUTO_FEBRUARY_7_2012_0159PM)
+#define BOOST_SPIRIT_AUTO_FEBRUARY_7_2012_0159PM
+
+#include <boost/config.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+
+// Support for c++11 auto. See:
+// http://boost-spirit.com/home/articles/qi-example/zero-to-60-mph-in-2-seconds/
+// for more info
+
+#if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS)
+
+#define BOOST_SPIRIT_AUTO(domain_, name, expr) \
+ typedef boost::proto::result_of:: \
+ deep_copy<BOOST_TYPEOF(expr)>::type name##_expr_type; \
+ BOOST_SPIRIT_ASSERT_MATCH( \
+ boost::spirit::domain_::domain, name##_expr_type); \
+ BOOST_AUTO(name, boost::proto::deep_copy(expr)); \
+ /****/
+
+#endif
+
+#endif
diff --git a/3party/boost/boost/spirit/home/support/char_encoding/ascii.hpp b/3party/boost/boost/spirit/home/support/char_encoding/ascii.hpp
index 9b8a72fc38..8bd6c11350 100644
--- a/3party/boost/boost/spirit/home/support/char_encoding/ascii.hpp
+++ b/3party/boost/boost/spirit/home/support/char_encoding/ascii.hpp
@@ -188,7 +188,7 @@ namespace boost { namespace spirit { namespace char_encoding
return isascii_(ch);
}
- static int
+ static bool
isalnum(int ch)
{
BOOST_ASSERT(isascii_(ch));
@@ -196,78 +196,78 @@ namespace boost { namespace spirit { namespace char_encoding
|| (ascii_char_types[ch] & BOOST_CC_DIGIT);
}
- static int
+ static bool
isalpha(int ch)
{
BOOST_ASSERT(isascii_(ch));
- return (ascii_char_types[ch] & BOOST_CC_ALPHA);
+ return (ascii_char_types[ch] & BOOST_CC_ALPHA) ? true : false;
}
- static int
+ static bool
isdigit(int ch)
{
BOOST_ASSERT(isascii_(ch));
- return (ascii_char_types[ch] & BOOST_CC_DIGIT);
+ return (ascii_char_types[ch] & BOOST_CC_DIGIT) ? true : false;
}
- static int
+ static bool
isxdigit(int ch)
{
BOOST_ASSERT(isascii_(ch));
- return (ascii_char_types[ch] & BOOST_CC_XDIGIT);
+ return (ascii_char_types[ch] & BOOST_CC_XDIGIT) ? true : false;
}
- static int
+ static bool
iscntrl(int ch)
{
BOOST_ASSERT(isascii_(ch));
- return (ascii_char_types[ch] & BOOST_CC_CTRL);
+ return (ascii_char_types[ch] & BOOST_CC_CTRL) ? true : false;
}
- static int
+ static bool
isgraph(int ch)
{
return ('\x21' <= ch && ch <= '\x7e');
}
- static int
+ static bool
islower(int ch)
{
BOOST_ASSERT(isascii_(ch));
- return (ascii_char_types[ch] & BOOST_CC_LOWER);
+ return (ascii_char_types[ch] & BOOST_CC_LOWER) ? true : false;
}
- static int
+ static bool
isprint(int ch)
{
return ('\x20' <= ch && ch <= '\x7e');
}
- static int
+ static bool
ispunct(int ch)
{
BOOST_ASSERT(isascii_(ch));
- return (ascii_char_types[ch] & BOOST_CC_PUNCT);
+ return (ascii_char_types[ch] & BOOST_CC_PUNCT) ? true : false;
}
- static int
+ static bool
isspace(int ch)
{
BOOST_ASSERT(isascii_(ch));
- return (ascii_char_types[ch] & BOOST_CC_SPACE);
+ return (ascii_char_types[ch] & BOOST_CC_SPACE) ? true : false;
}
- static int
+ static bool
isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
{
return ('\x09' == ch || '\x20' == ch);
}
- static int
+ static bool
isupper(int ch)
{
BOOST_ASSERT(isascii_(ch));
- return (ascii_char_types[ch] & BOOST_CC_UPPER);
+ return (ascii_char_types[ch] & BOOST_CC_UPPER) ? true : false;
}
///////////////////////////////////////////////////////////////////////
diff --git a/3party/boost/boost/spirit/home/support/char_encoding/iso8859_1.hpp b/3party/boost/boost/spirit/home/support/char_encoding/iso8859_1.hpp
index 37d2e6f98f..b2b5dd1d8a 100644
--- a/3party/boost/boost/spirit/home/support/char_encoding/iso8859_1.hpp
+++ b/3party/boost/boost/spirit/home/support/char_encoding/iso8859_1.hpp
@@ -584,7 +584,7 @@ namespace boost { namespace spirit { namespace char_encoding
return (0 == (ch & ~0xff) || ~0 == (ch | 0xff)) ? true : false;
}
- static int
+ static bool
isalnum(int ch)
{
BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
@@ -592,78 +592,78 @@ namespace boost { namespace spirit { namespace char_encoding
|| (iso8859_1_char_types[ch] & BOOST_CC_DIGIT);
}
- static int
+ static bool
isalpha(int ch)
{
BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
- return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA);
+ return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA) ? true : false;
}
- static int
+ static bool
isdigit(int ch)
{
BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
- return (iso8859_1_char_types[ch] & BOOST_CC_DIGIT);
+ return (iso8859_1_char_types[ch] & BOOST_CC_DIGIT) ? true : false;
}
- static int
+ static bool
isxdigit(int ch)
{
BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
- return (iso8859_1_char_types[ch] & BOOST_CC_XDIGIT);
+ return (iso8859_1_char_types[ch] & BOOST_CC_XDIGIT) ? true : false;
}
- static int
+ static bool
iscntrl(int ch)
{
BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
- return (iso8859_1_char_types[ch] & BOOST_CC_CTRL);
+ return (iso8859_1_char_types[ch] & BOOST_CC_CTRL) ? true : false;
}
- static int
+ static bool
isgraph(int ch)
{
return ('\x21' <= ch && ch <= '\x7e') || ('\xa1' <= ch && ch <= '\xff');
}
- static int
+ static bool
islower(int ch)
{
BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
- return (iso8859_1_char_types[ch] & BOOST_CC_LOWER);
+ return (iso8859_1_char_types[ch] & BOOST_CC_LOWER) ? true : false;
}
- static int
+ static bool
isprint(int ch)
{
return ('\x20' <= ch && ch <= '\x7e') || ('\xa0' <= ch && ch <= '\xff');
}
- static int
+ static bool
ispunct(int ch)
{
BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
- return (iso8859_1_char_types[ch] & BOOST_CC_PUNCT);
+ return (iso8859_1_char_types[ch] & BOOST_CC_PUNCT) ? true : false;
}
- static int
+ static bool
isspace(int ch)
{
BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
- return (iso8859_1_char_types[ch] & BOOST_CC_SPACE);
+ return (iso8859_1_char_types[ch] & BOOST_CC_SPACE) ? true : false;
}
- static int
+ static bool
isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
{
return ('\x09' == ch || '\x20' == ch || '\xa0' == ch);
}
- static int
+ static bool
isupper(int ch)
{
BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
- return (iso8859_1_char_types[ch] & BOOST_CC_UPPER);
+ return (iso8859_1_char_types[ch] & BOOST_CC_UPPER) ? true : false;
}
///////////////////////////////////////////////////////////////////////////
diff --git a/3party/boost/boost/spirit/home/support/char_encoding/standard.hpp b/3party/boost/boost/spirit/home/support/char_encoding/standard.hpp
index c32a9e73d8..fb307ced45 100644
--- a/3party/boost/boost/spirit/home/support/char_encoding/standard.hpp
+++ b/3party/boost/boost/spirit/home/support/char_encoding/standard.hpp
@@ -38,81 +38,82 @@ namespace boost { namespace spirit { namespace char_encoding
return (0 == (ch & ~0xff) || ~0 == (ch | 0xff)) ? true : false;
}
- static int
+ static bool
isalnum(int ch)
{
- return std::isalnum(ch);
+ return std::isalnum(ch) ? true : false;
}
- static int
+ static bool
isalpha(int ch)
{
- return std::isalpha(ch);
+ return std::isalpha(ch) ? true : false;
}
- static int
+ static bool
isdigit(int ch)
{
- return std::isdigit(ch);
+ return std::isdigit(ch) ? true : false;
}
- static int
+ static bool
isxdigit(int ch)
{
- return std::isxdigit(ch);
+ return std::isxdigit(ch) ? true : false;
}
- static int
+ static bool
iscntrl(int ch)
{
- return std::iscntrl(ch);
+ return std::iscntrl(ch) ? true : false;
}
- static int
+ static bool
isgraph(int ch)
{
- return std::isgraph(ch);
+ return std::isgraph(ch) ? true : false;
}
- static int
+ static bool
islower(int ch)
{
- return std::islower(ch);
+ return std::islower(ch) ? true : false;
}
- static int
+ static bool
isprint(int ch)
{
- return std::isprint(ch);
+ return std::isprint(ch) ? true : false;
}
- static int
+ static bool
ispunct(int ch)
{
- return std::ispunct(ch);
+ return std::ispunct(ch) ? true : false;
}
- static int
+ static bool
isspace(int ch)
{
- return std::isspace(ch);
+ return std::isspace(ch) ? true : false;
}
- static int
+ static bool
isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
{
return (ch == ' ' || ch == '\t');
}
- static int
+ static bool
isupper(int ch)
{
- return std::isupper(ch);
+ return std::isupper(ch) ? true : false;
}
///////////////////////////////////////////////////////////////////////////////
// Simple character conversions
///////////////////////////////////////////////////////////////////////////////
+
static int
tolower(int ch)
{
diff --git a/3party/boost/boost/spirit/home/support/char_encoding/standard_wide.hpp b/3party/boost/boost/spirit/home/support/char_encoding/standard_wide.hpp
index 99c918ce56..515a388136 100644
--- a/3party/boost/boost/spirit/home/support/char_encoding/standard_wide.hpp
+++ b/3party/boost/boost/spirit/home/support/char_encoding/standard_wide.hpp
@@ -154,6 +154,10 @@ namespace boost { namespace spirit { namespace char_encoding
return (ch == L' ' || ch == L'\t');
}
+ ///////////////////////////////////////////////////////////////////////
+ // Simple character conversions
+ ///////////////////////////////////////////////////////////////////////
+
static wchar_t
tolower(wchar_t ch)
{
diff --git a/3party/boost/boost/spirit/home/support/char_encoding/unicode.hpp b/3party/boost/boost/spirit/home/support/char_encoding/unicode.hpp
index 9febf7e2a4..b5ec3e6f96 100644
--- a/3party/boost/boost/spirit/home/support/char_encoding/unicode.hpp
+++ b/3party/boost/boost/spirit/home/support/char_encoding/unicode.hpp
@@ -100,7 +100,7 @@ namespace boost { namespace spirit { namespace char_encoding
return ucd::is_white_space(ch);
}
- static int
+ static bool
isblank BOOST_PREVENT_MACRO_SUBSTITUTION (char_type ch)
{
return ucd::is_blank(ch);
diff --git a/3party/boost/boost/spirit/home/support/char_encoding/unicode/create_tables.cpp b/3party/boost/boost/spirit/home/support/char_encoding/unicode/create_tables.cpp
index aa36fb4d93..c4b82b33c8 100644
--- a/3party/boost/boost/spirit/home/support/char_encoding/unicode/create_tables.cpp
+++ b/3party/boost/boost/spirit/home/support/char_encoding/unicode/create_tables.cpp
@@ -16,6 +16,7 @@
#include <boost/range/iterator_range.hpp>
#include <iostream>
+#include <iomanip>
#include <fstream>
#include <vector>
#include <algorithm>
@@ -49,13 +50,13 @@ struct ucd_range
{
ucd_range(uint32_t start, uint32_t finish)
: start(start), finish(finish) {}
-
- // we need this so we can use ucd_range as a multimap key
+
+ // we need this so we can use ucd_range as a multimap key
friend bool operator<(ucd_range const& a, ucd_range const& b)
{
return a.start < b.start;
}
-
+
uint32_t start;
uint32_t finish;
};
@@ -89,23 +90,23 @@ public:
rule<iterator_type, std::string()> field = *(char_-(';'|endl)) >> (';'|&endl);
rule<iterator_type, ucd_line()> line = +(field-endl) >> endl;
rule<iterator_type, std::vector<ucd_line>()> file = +(endl | line[push_back(_val, _1)]);
-
+
parse(f, l, file, info);
}
}
-
+
template <typename Array>
void collect(Array& data, int field, bool collect_properties = true) const
{
BOOST_ASSERT(!info.empty());
ucd_vector::const_iterator current = info.begin();
ucd_vector::const_iterator end = info.end();
-
+
while (current != end)
{
std::string range = (*current)[0];
boost::trim(range);
-
+
std::string::const_iterator f = range.begin();
std::string::const_iterator l = range.end();
@@ -113,14 +114,14 @@ public:
uint32_t start;
uint32_t finish;
parse(f, l, hex[ref(start) = ref(finish) = _1] >> -(".." >> hex[ref(finish) = _1]));
-
+
// special case for UnicodeData.txt ranges:
if ((*current)[1].find("First>") != std::string::npos)
{
++current;
BOOST_ASSERT(current != end);
BOOST_ASSERT((*current)[1].find("Last>") != std::string::npos);
-
+
std::string range = (*current)[0];
boost::trim(range);
f = range.begin();
@@ -128,7 +129,7 @@ public:
parse(f, l, hex[ref(finish) = _1]);
}
-
+
std::string code;
if (field < int(current->size()))
code = (*current)[field];
@@ -136,7 +137,7 @@ public:
// Only collect properties we are interested in
if (collect_properties) // code for properties
{
- if (!ignore_property(code))
+ if (!ignore_property(code))
{
for (uint32_t i = start; i <= finish; ++i)
data[i] |= map_property(code);
@@ -161,7 +162,7 @@ public:
++current;
}
}
-
+
private:
static bool ignore_property(std::string const& p)
@@ -169,7 +170,7 @@ private:
// We don't handle all properties
std::map<std::string, int>& pm = get_property_map();
std::map<std::string, int>::iterator i = pm.find(p);
- return i == pm.end();
+ return i == pm.end();
}
static int
@@ -181,7 +182,7 @@ private:
return i->second;
}
- static std::map<std::string, int>&
+ static std::map<std::string, int>&
get_property_map()
{
// The properties we are interested in:
@@ -194,25 +195,25 @@ private:
map["Lt"] = 2;
map["Lm"] = 3;
map["Lo"] = 4;
-
+
map["Mn"] = 8;
map["Me"] = 9;
map["Mc"] = 10;
-
+
map["Nd"] = 16;
map["Nl"] = 17;
map["No"] = 18;
-
+
map["Zs"] = 24;
map["Zl"] = 25;
map["Zp"] = 26;
-
+
map["Cc"] = 32;
map["Cf"] = 33;
map["Co"] = 34;
map["Cs"] = 35;
map["Cn"] = 36;
-
+
map["Pd"] = 40;
map["Ps"] = 41;
map["Pe"] = 42;
@@ -220,12 +221,12 @@ private:
map["Po"] = 44;
map["Pi"] = 45;
map["Pf"] = 46;
-
+
map["Sm"] = 48;
map["Sc"] = 49;
map["Sk"] = 50;
map["So"] = 51;
-
+
// Derived Properties.
map["Alphabetic"] = 64;
map["Uppercase"] = 128;
@@ -351,24 +352,24 @@ public:
for (uint32_t i = 0; i < full_span; ++i)
p[i] = 0;
}
-
+
void collect(char const* filename, int field, bool collect_properties = true)
{
std::cout << "collecting " << filename << std::endl;
ucd_info info(filename);
info.collect(p, field, collect_properties);
}
-
+
void build(std::vector<uint8_t>& stage1, std::vector<T const*>& stage2)
- {
+ {
std::cout << "building tables" << std::endl;
std::map<block_ptr, std::vector<T const*> > blocks;
for (T const* i = p.get(); i < (p.get() + full_span); i += block_size)
blocks[block_ptr(i)].push_back(i);
-
+
// Not enough bits to store the block indices.
BOOST_ASSERT(blocks.size() < (1 << (sizeof(uint8_t) * 8)));
-
+
typedef std::pair<block_ptr, std::vector<T const*> > blocks_value_type;
std::map<T const*, std::vector<T const*> > sorted_blocks;
BOOST_FOREACH(blocks_value_type const& val, blocks)
@@ -392,9 +393,9 @@ public:
}
}
}
-
+
private:
-
+
struct block_ptr
{
block_ptr(T const* p) : p(p) {}
@@ -404,7 +405,7 @@ private:
return std::lexicographical_compare(
a.p, a.p + block_size, b.p, b.p + block_size);
}
-
+
T const* p;
};
@@ -422,7 +423,7 @@ template <typename Out, typename C>
void print_table(Out& out, C const& c, bool trailing_comma, int width = 4, int group = 16)
{
int const tab = 4;
- C::size_type size = c.size();
+ typename C::size_type size = c.size();
BOOST_ASSERT(size > 1);
print_tab(out, tab);
out << std::setw(width) << int(c[0]);
@@ -436,7 +437,7 @@ void print_table(Out& out, C const& c, bool trailing_comma, int width = 4, int g
}
out << std::setw(width) << int(c[i]);
}
-
+
if (trailing_comma)
out << ", " << std::endl;
}
@@ -444,7 +445,7 @@ void print_table(Out& out, C const& c, bool trailing_comma, int width = 4, int g
template <typename Out>
void print_head(Out& out)
{
- out
+ out
<< "/*=============================================================================\n"
<< " Copyright (c) 2001-2011 Joel de Guzman\n"
<< "\n"
@@ -463,7 +464,7 @@ void print_head(Out& out)
template <typename Out>
void print_tail(Out& out)
{
- out
+ out
<< "\n"
<< "}}}} // namespace boost::spirit::unicode::detail\n"
;
@@ -489,13 +490,13 @@ void print_file(Out& out, Builder& builder, int field_width, char const* name)
uint32_t const block_size = Builder::block_size;
typedef typename Builder::value_type value_type;
print_head(out);
-
+
std::vector<uint8_t> stage1;
std::vector<value_type const*> stage2;
builder.build(stage1, stage2);
std::cout << "Block Size: " << block_size << std::endl;
- std::cout << "Total Bytes: "
- << stage1.size()+(stage2.size()*block_size*sizeof(value_type))
+ std::cout << "Total Bytes: "
+ << stage1.size()+(stage2.size()*block_size*sizeof(value_type))
<< std::endl;
out
@@ -503,11 +504,11 @@ void print_file(Out& out, Builder& builder, int field_width, char const* name)
<< " static const ::boost::uint8_t " << name << "_stage1[] = {\n"
<< "\n"
;
-
+
print_table(out, stage1, false, 3);
char const* int_name = get_int_type_name(sizeof(value_type));
- out
+ out
<< "\n"
<< " };"
<< "\n"
@@ -521,17 +522,17 @@ void print_file(Out& out, Builder& builder, int field_width, char const* name)
value_type const* p = stage2[i];
bool last = (i+1 == stage2.size());
out << "\n\n // block " << block_n++ << std::endl;
- print_table(out,
+ print_table(out,
boost::iterator_range<value_type const*>(p, p+block_size), !last, field_width);
}
- out
+ out
<< "\n"
<< " };"
<< "\n"
;
-
- out
+
+ out
<< "\n"
<< " inline " << int_name << ' ' << name << "_lookup(::boost::uint32_t ch)\n"
<< " {\n"
@@ -539,7 +540,7 @@ void print_file(Out& out, Builder& builder, int field_width, char const* name)
<< " return " << name << "_stage2[block_offset + ch % " << block_size << "];\n"
<< " }\n"
;
-
+
print_tail(out);
}
@@ -554,7 +555,7 @@ int main()
builder.collect("PropList.txt", 1);
print_file(out, builder, 4, "category");
}
-
+
// The script tables
{
std::ofstream out("script_table.hpp");
@@ -562,7 +563,7 @@ int main()
builder.collect("Scripts.txt", 1);
print_file(out, builder, 3, "script");
}
-
+
// The lowercase tables
{
std::ofstream out("lowercase_table.hpp");
@@ -570,7 +571,7 @@ int main()
builder.collect("UnicodeData.txt", 13, false);
print_file(out, builder, 6, "lowercase");
}
-
+
// The uppercase tables
{
std::ofstream out("uppercase_table.hpp");
diff --git a/3party/boost/boost/spirit/home/support/char_encoding/unicode/query.hpp b/3party/boost/boost/spirit/home/support/char_encoding/unicode/query.hpp
index 3a0526cd75..370ab67d2e 100644
--- a/3party/boost/boost/spirit/home/support/char_encoding/unicode/query.hpp
+++ b/3party/boost/boost/spirit/home/support/char_encoding/unicode/query.hpp
@@ -284,7 +284,7 @@ namespace boost { namespace spirit { namespace ucd
inline properties::script get_script(::boost::uint32_t ch)
{
- return static_cast<properties::script>(detail::script_lookup(ch) & 0x3F);
+ return static_cast<properties::script>(detail::script_lookup(ch) & 0x7F);
}
inline ::boost::uint32_t to_lowercase(::boost::uint32_t ch)
diff --git a/3party/boost/boost/spirit/home/support/char_set/range.hpp b/3party/boost/boost/spirit/home/support/char_set/range.hpp
index 6d1f661996..1973889645 100644
--- a/3party/boost/boost/spirit/home/support/char_set/range.hpp
+++ b/3party/boost/boost/spirit/home/support/char_set/range.hpp
@@ -22,7 +22,7 @@ namespace boost { namespace spirit { namespace support { namespace detail
typedef T value_type;
range() : first(), last() {}
- range(T first, T last) : first(first), last(last) {}
+ range(T first_, T last_) : first(first_), last(last_) {}
T first;
T last;
diff --git a/3party/boost/boost/spirit/home/support/char_set/range_run_impl.hpp b/3party/boost/boost/spirit/home/support/char_set/range_run_impl.hpp
index fe91ad8f0d..9dd206454c 100644
--- a/3party/boost/boost/spirit/home/support/char_set/range_run_impl.hpp
+++ b/3party/boost/boost/spirit/home/support/char_set/range_run_impl.hpp
@@ -13,7 +13,6 @@
#include <boost/spirit/home/support/char_set/range_functions.hpp>
#include <boost/assert.hpp>
-#include <boost/integer_traits.hpp>
#include <algorithm>
namespace boost { namespace spirit { namespace support { namespace detail
@@ -25,9 +24,6 @@ namespace boost { namespace spirit { namespace support { namespace detail
// if *iter intersects with, or is adjacent to, 'range'...
if (can_merge(*iter, range))
{
- typedef typename Range::value_type value_type;
- typedef integer_traits<value_type> integer_traits;
-
// merge range and *iter
merge(*iter, range);
diff --git a/3party/boost/boost/spirit/home/support/container.hpp b/3party/boost/boost/spirit/home/support/container.hpp
index 7f491aa476..5e154cdb7b 100644
--- a/3party/boost/boost/spirit/home/support/container.hpp
+++ b/3party/boost/boost/spirit/home/support/container.hpp
@@ -59,6 +59,19 @@ namespace boost { namespace spirit { namespace traits
: is_container<T>
{};
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+ template<typename T>
+ struct is_container<boost::variant<T> >
+ : is_container<T>
+ {};
+
+ template<typename T0, typename T1, typename ...TN>
+ struct is_container<boost::variant<T0, T1, TN...> >
+ : mpl::bool_<is_container<T0>::value ||
+ is_container<boost::variant<T1, TN...> >::value>
+ {};
+
+#else
#define BOOST_SPIRIT_IS_CONTAINER(z, N, data) \
is_container<BOOST_PP_CAT(T, N)>::value || \
/***/
@@ -76,6 +89,7 @@ namespace boost { namespace spirit { namespace traits
{};
#undef BOOST_SPIRIT_IS_CONTAINER
+#endif
template <typename T, typename Enable/* = void*/>
struct is_iterator_range
@@ -238,7 +252,7 @@ namespace boost { namespace spirit { namespace traits
static bool is_valid(boost::optional<T> const& val)
{
- return val;
+ return !!val;
}
};
diff --git a/3party/boost/boost/spirit/home/support/context.hpp b/3party/boost/boost/spirit/home/support/context.hpp
index b728b4f10d..ada873aa72 100644
--- a/3party/boost/boost/spirit/home/support/context.hpp
+++ b/3party/boost/boost/spirit/home/support/context.hpp
@@ -98,7 +98,7 @@ namespace boost { namespace spirit
typedef Locals locals_type;
context(typename Attributes::car_type attribute)
- : attributes(attribute, fusion::nil()), locals() {}
+ : attributes(attribute, fusion::nil_()), locals() {}
template <typename Args, typename Context>
context(
@@ -116,8 +116,8 @@ namespace boost { namespace spirit
)
, locals() {}
- context(Attributes const& attributes)
- : attributes(attributes), locals() {}
+ context(Attributes const& attributes_)
+ : attributes(attributes_), locals() {}
Attributes attributes; // The attributes
Locals locals; // Local variables
diff --git a/3party/boost/boost/spirit/home/support/detail/as_variant.hpp b/3party/boost/boost/spirit/home/support/detail/as_variant.hpp
index e2fe18d68e..9312042ed7 100644
--- a/3party/boost/boost/spirit/home/support/detail/as_variant.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/as_variant.hpp
@@ -23,6 +23,7 @@
#include <boost/mpl/push_back.hpp>
#include <boost/mpl/equal_to.hpp>
#include <boost/mpl/contains.hpp>
+#include <boost/mpl/limits/list.hpp>
#include <boost/type_traits/is_same.hpp>
namespace boost { namespace spirit { namespace detail
@@ -30,6 +31,8 @@ namespace boost { namespace spirit { namespace detail
template <int size>
struct as_variant_impl;
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+#else
template <>
struct as_variant_impl<0>
{
@@ -39,6 +42,7 @@ namespace boost { namespace spirit { namespace detail
typedef variant<> type;
};
};
+#endif
#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \
typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \
@@ -53,7 +57,13 @@ namespace boost { namespace spirit { namespace detail
BOOST_PP_CAT(T, n);
#define BOOST_PP_FILENAME_1 <boost/spirit/home/support/detail/as_variant.hpp>
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+#define BOOST_PP_ITERATION_LIMITS (1, BOOST_MPL_LIMIT_LIST_SIZE)
+#else
#define BOOST_PP_ITERATION_LIMITS (1, BOOST_VARIANT_LIMIT_TYPES)
+#endif
+
#include BOOST_PP_ITERATE()
#undef BOOST_FUSION_NEXT_ITERATOR
diff --git a/3party/boost/boost/spirit/home/support/detail/endian.hpp b/3party/boost/boost/spirit/home/support/detail/endian.hpp
index 85f13dda55..489bb4ce32 100644
--- a/3party/boost/boost/spirit/home/support/detail/endian.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/endian.hpp
@@ -18,6 +18,12 @@
#define BOOST_ENDIAN_FORCE_PODNESS 1
#endif
+// If Boost has the endian library, use it, otherwise use an adapted version
+// included with Spirit
+// #if BOOST_VERSION >= 105100
+// #include <boost/endian/integers.hpp>
+// #else
#include <boost/spirit/home/support/detail/endian/endian.hpp>
+// #endif
#endif
diff --git a/3party/boost/boost/spirit/home/support/detail/hold_any.hpp b/3party/boost/boost/spirit/home/support/detail/hold_any.hpp
index 76689ededd..f9a3ff1bfa 100644
--- a/3party/boost/boost/spirit/home/support/detail/hold_any.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/hold_any.hpp
@@ -298,11 +298,25 @@ namespace boost { namespace spirit
}
// assignment operator
+#ifdef BOOST_HAS_RVALUE_REFS
+ template <typename T>
+ basic_hold_any& operator=(T&& x)
+ {
+ return assign(std::forward<T>(x));
+ }
+#else
+ template <typename T>
+ basic_hold_any& operator=(T& x)
+ {
+ return assign(x);
+ }
+
template <typename T>
basic_hold_any& operator=(T const& x)
{
return assign(x);
}
+#endif
// utility functions
basic_hold_any& swap(basic_hold_any& x)
@@ -403,15 +417,6 @@ namespace boost { namespace spirit
{
typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type nonref;
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- // If 'nonref' is still reference type, it means the user has not
- // specialized 'remove_reference'.
-
- // Please use BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION macro
- // to generate specialization of remove_reference for your class
- // See type traits library documentation for details
- BOOST_STATIC_ASSERT(!is_reference<nonref>::value);
-#endif
nonref* result = any_cast<nonref>(&operand);
if(!result)
@@ -424,11 +429,6 @@ namespace boost { namespace spirit
{
typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type nonref;
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- // The comment in the above version of 'any_cast' explains when this
- // assert is fired and what to do.
- BOOST_STATIC_ASSERT(!is_reference<nonref>::value);
-#endif
return any_cast<nonref const&>(const_cast<basic_hold_any<Char> &>(operand));
}
diff --git a/3party/boost/boost/spirit/home/support/detail/is_spirit_tag.hpp b/3party/boost/boost/spirit/home/support/detail/is_spirit_tag.hpp
index 73269e22e1..e8f9f6dc2a 100644
--- a/3party/boost/boost/spirit/home/support/detail/is_spirit_tag.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/is_spirit_tag.hpp
@@ -11,10 +11,6 @@
#pragma once
#endif
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#define BOOST_SPIRIT_IS_TAG()
-#else
#define BOOST_SPIRIT_IS_TAG() typedef void is_spirit_tag;
-#endif
#endif
diff --git a/3party/boost/boost/spirit/home/support/detail/lexer/debug.hpp b/3party/boost/boost/spirit/home/support/detail/lexer/debug.hpp
index 23cda87315..36ee1bb706 100644
--- a/3party/boost/boost/spirit/home/support/detail/lexer/debug.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/lexer/debug.hpp
@@ -31,11 +31,7 @@ public:
const CharT *ptr_ = in_.c_str ();
std::size_t size_ = in_.size ();
-#if defined _MSC_VER && _MSC_VER <= 1200
- out_.erase ();
-#else
out_.clear ();
-#endif
while (size_)
{
diff --git a/3party/boost/boost/spirit/home/support/detail/lexer/file_input.hpp b/3party/boost/boost/spirit/home/support/detail/lexer/file_input.hpp
index bf7dba742f..fe5412e005 100644
--- a/3party/boost/boost/spirit/home/support/detail/lexer/file_input.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/lexer/file_input.hpp
@@ -24,11 +24,7 @@ public:
class iterator
{
public:
-#if defined _MSC_VER && _MSC_VER <= 1200
- friend basic_file_input;
-#else
friend class basic_file_input;
-#endif
struct data
{
@@ -132,11 +128,7 @@ public:
data _data;
};
-#if defined _MSC_VER && _MSC_VER <= 1200
- friend iterator;
-#else
friend class iterator;
-#endif
// Make it explict that we are NOT taking a copy of state_machine_!
basic_file_input (const basic_state_machine<CharT> *state_machine_,
diff --git a/3party/boost/boost/spirit/home/support/detail/lexer/generate_re2c.hpp b/3party/boost/boost/spirit/home/support/detail/lexer/generate_re2c.hpp
index dced1f9060..8e76fdbe69 100644
--- a/3party/boost/boost/spirit/home/support/detail/lexer/generate_re2c.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/lexer/generate_re2c.hpp
@@ -331,11 +331,7 @@ void generate_re2c (const basic_state_machine<CharT> &state_machine_,
string_token::escape_char (start_char_, temp_);
os_ << "(ch_ >= '" << temp_;
-#if defined _MSC_VER && _MSC_VER <= 1200
- temp_.erase ();
-#else
temp_.clear ();
-#endif
string_token::escape_char (curr_char_, temp_);
os_ << "' && ch_ <= '" << temp_ << "')";
range_ = false;
diff --git a/3party/boost/boost/spirit/home/support/detail/lexer/generator.hpp b/3party/boost/boost/spirit/home/support/detail/lexer/generator.hpp
index 9541f6f248..daa06e7944 100644
--- a/3party/boost/boost/spirit/home/support/detail/lexer/generator.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/lexer/generator.hpp
@@ -186,10 +186,10 @@ protected:
while (regex_iter_ != regex_iter_end_)
{
// re-declare var, otherwise we perform an assignment..!
- const typename rules::string &regex_ = *regex_iter_;
+ const typename rules::string &regex2_ = *regex_iter_;
- root_ = parser::parse (regex_.c_str (),
- regex_.c_str () + regex_.size (), *ids_iter_,
+ root_ = parser::parse (regex2_.c_str (),
+ regex2_.c_str () + regex2_.size (), *ids_iter_,
*unique_ids_iter_, *states_iter_, rules_.flags (),
rules_.locale (), node_ptr_vector_, macromap_, token_map_,
internals_._seen_BOL_assertion,
@@ -337,16 +337,16 @@ protected:
equiv_end_ = equivset_->_index_vector.end ();
equiv_iter_ != equiv_end_; ++equiv_iter_)
{
- const std::size_t index_ = *equiv_iter_;
+ const std::size_t equiv_index_ = *equiv_iter_;
- if (index_ == bol_token)
+ if (equiv_index_ == bol_token)
{
if (ptr_[eol_index] == 0)
{
ptr_[bol_index] = transition_;
}
}
- else if (index_ == eol_token)
+ else if (equiv_index_ == eol_token)
{
if (ptr_[bol_index] == 0)
{
@@ -355,7 +355,7 @@ protected:
}
else
{
- ptr_[index_ + dfa_offset] = transition_;
+ ptr_[equiv_index_ + dfa_offset] = transition_;
}
}
}
@@ -561,7 +561,12 @@ protected:
if (token_._negated)
{
- CharT curr_char_ = (std::numeric_limits<CharT>::min)();
+ // $$$ FIXME JDG July 2014 $$$
+ // this code is problematic on platforms where wchar_t is signed
+ // with min generating negative numbers. This crashes with BAD_ACCESS
+ // because of the vector index below:
+ // ptr_[static_cast<typename Traits::index_type>(curr_char_)]
+ CharT curr_char_ = 0; // (std::numeric_limits<CharT>::min)();
std::size_t i_ = 0;
while (curr_ < chars_end_)
diff --git a/3party/boost/boost/spirit/home/support/detail/lexer/input.hpp b/3party/boost/boost/spirit/home/support/detail/lexer/input.hpp
index a575e6c8c8..e0a5ecc819 100644
--- a/3party/boost/boost/spirit/home/support/detail/lexer/input.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/lexer/input.hpp
@@ -23,11 +23,7 @@ public:
class iterator
{
public:
-#if defined _MSC_VER && _MSC_VER <= 1200
- friend basic_input;
-#else
friend class basic_input;
-#endif
struct data
{
@@ -481,11 +477,7 @@ public:
}
};
-#if defined _MSC_VER && _MSC_VER <= 1200
- friend iterator;
-#else
friend class iterator;
-#endif
// Make it explict that we are NOT taking a copy of state_machine_!
basic_input (const basic_state_machine<typename Traits::char_type>
diff --git a/3party/boost/boost/spirit/home/support/detail/lexer/size_t.hpp b/3party/boost/boost/spirit/home/support/detail/lexer/size_t.hpp
index 349aa6de09..449ff4d858 100644
--- a/3party/boost/boost/spirit/home/support/detail/lexer/size_t.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/lexer/size_t.hpp
@@ -8,14 +8,6 @@
#include <stddef.h> // ptrdiff_t
-#if defined _MSC_VER && _MSC_VER <= 1200
-namespace std
-{
- using ::ptrdiff_t;
- using ::size_t;
-}
-#else
#include <string>
-#endif
#endif
diff --git a/3party/boost/boost/spirit/home/support/detail/lexer/state_machine.hpp b/3party/boost/boost/spirit/home/support/detail/lexer/state_machine.hpp
index e09e9914b9..46e50c9a0a 100644
--- a/3party/boost/boost/spirit/home/support/detail/lexer/state_machine.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/lexer/state_machine.hpp
@@ -29,11 +29,7 @@ public:
class iterator
{
public:
-#if defined _MSC_VER && _MSC_VER <= 1200
- friend basic_state_machine;
-#else
friend class basic_state_machine;
-#endif
struct data
{
@@ -225,11 +221,7 @@ public:
}
};
-#if defined _MSC_VER && _MSC_VER <= 1200
- friend iterator;
-#else
friend class iterator;
-#endif
basic_state_machine ()
{
@@ -365,7 +357,7 @@ private:
{
const std::size_t col_ = lu_->at (alpha_index_);
- if (col_ != dead_state_index)
+ if (col_ != static_cast<std::size_t>(dead_state_index))
{
chars_[col_ - dfa_offset] += static_cast<CharT>
(alpha_index_);
diff --git a/3party/boost/boost/spirit/home/support/detail/lexer/string_token.hpp b/3party/boost/boost/spirit/home/support/detail/lexer/string_token.hpp
index e972a9568c..dd58c986b5 100644
--- a/3party/boost/boost/spirit/home/support/detail/lexer/string_token.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/lexer/string_token.hpp
@@ -56,11 +56,7 @@ struct basic_string_token
if (_charset.length () == max_chars_)
{
_negated = !_negated;
-#if defined _MSC_VER && _MSC_VER <= 1200
- _charset.erase ();
-#else
_charset.clear ();
-#endif
}
else if (_charset.length () > max_chars_ / 2)
{
@@ -127,11 +123,7 @@ struct basic_string_token
void clear ()
{
_negated = false;
-#if defined _MSC_VER && _MSC_VER <= 1200
- _charset.erase ();
-#else
- _charset.clear ();
-#endif
+ _charset.clear ();
}
void intersect (basic_string_token &rhs_, basic_string_token &overlap_)
diff --git a/3party/boost/boost/spirit/home/support/detail/make_cons.hpp b/3party/boost/boost/spirit/home/support/detail/make_cons.hpp
index cbbb73b445..0d6b0ae2c6 100644
--- a/3party/boost/boost/spirit/home/support/detail/make_cons.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/make_cons.hpp
@@ -42,11 +42,10 @@ namespace boost { namespace spirit { namespace detail
namespace result_of
{
- template <typename Car, typename Cdr = fusion::nil>
+ template <typename Car, typename Cdr = fusion::nil_>
struct make_cons
{
- typedef typename as_meta_element<Car>::type car_type;
- typedef typename fusion::cons<car_type, Cdr> type;
+ typedef typename as_meta_element<Car>::type car_type; typedef typename fusion::cons<car_type, Cdr> type;
};
}
diff --git a/3party/boost/boost/spirit/home/support/detail/scoped_enum_emulation.hpp b/3party/boost/boost/spirit/home/support/detail/scoped_enum_emulation.hpp
index 70979a6d2d..1b35043f89 100644
--- a/3party/boost/boost/spirit/home/support/detail/scoped_enum_emulation.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/scoped_enum_emulation.hpp
@@ -17,8 +17,8 @@
#if BOOST_VERSION >= 104000
# include <boost/detail/scoped_enum_emulation.hpp>
#else
-# if !defined(BOOST_NO_SCOPED_ENUMS)
-# define BOOST_NO_SCOPED_ENUMS
+# if !defined(BOOST_NO_CXX11_SCOPED_ENUMS)
+# define BOOST_NO_CXX11_SCOPED_ENUMS
# endif
# define BOOST_SCOPED_ENUM_START(name) struct name { enum enum_type
# define BOOST_SCOPED_ENUM_END };
diff --git a/3party/boost/boost/spirit/home/support/detail/what_function.hpp b/3party/boost/boost/spirit/home/support/detail/what_function.hpp
index d9678ddca4..179807b1ac 100644
--- a/3party/boost/boost/spirit/home/support/detail/what_function.hpp
+++ b/3party/boost/boost/spirit/home/support/detail/what_function.hpp
@@ -20,8 +20,8 @@ namespace boost { namespace spirit { namespace detail
template <typename Context>
struct what_function
{
- what_function(info& what, Context& context)
- : what(what), context(context)
+ what_function(info& what_, Context& context_)
+ : what(what_), context(context_)
{
what.value = std::list<info>();
}
diff --git a/3party/boost/boost/spirit/home/support/extended_variant.hpp b/3party/boost/boost/spirit/home/support/extended_variant.hpp
index 0a9613ba65..d23ca3d8b2 100644
--- a/3party/boost/boost/spirit/home/support/extended_variant.hpp
+++ b/3party/boost/boost/spirit/home/support/extended_variant.hpp
@@ -12,8 +12,20 @@
#endif
#include <boost/variant.hpp>
+#include <boost/mpl/limits/list.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+#define BOOST_SPIRIT_EXTENDED_VARIANT_LIMIT_TYPES BOOST_MPL_LIMIT_LIST_SIZE
+#else
+#define BOOST_SPIRIT_EXTENDED_VARIANT_LIMIT_TYPES BOOST_VARIANT_LIMIT_TYPES
+#endif
+
+#define BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T) \
+ BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_EXTENDED_VARIANT_LIMIT_TYPES, T) \
+ /**/
+
///////////////////////////////////////////////////////////////////////////////
namespace boost { namespace spirit
{
@@ -31,11 +43,13 @@ namespace boost { namespace spirit
struct adapted_variant_tag;
typedef boost::variant<
- BOOST_VARIANT_ENUM_PARAMS(T)>
+ BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)>
variant_type;
typedef typename variant_type::types types;
- typedef extended_variant<BOOST_VARIANT_ENUM_PARAMS(T)> base_type;
+ typedef extended_variant<
+ BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)
+ > base_type;
extended_variant() : var() {}
@@ -43,6 +57,10 @@ namespace boost { namespace spirit
extended_variant(T const& var)
: var(var) {}
+ template <typename T>
+ extended_variant(T& var)
+ : var(var) {}
+
template <typename F>
typename F::result_type apply_visitor(F const& v)
{
@@ -83,33 +101,40 @@ namespace boost { namespace spirit
namespace boost
{
- template <typename T, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+ template <typename T, BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(typename T)>
inline T const&
- get(boost::spirit::extended_variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& x)
+ get(boost::spirit::extended_variant<
+ BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)> const& x)
{
return boost::get<T>(x.get());
}
- template <typename T, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+ template <typename T, BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(typename T)>
inline T&
- get(boost::spirit::extended_variant<BOOST_VARIANT_ENUM_PARAMS(T)>& x)
+ get(boost::spirit::extended_variant<
+ BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)>& x)
{
return boost::get<T>(x.get());
}
- template <typename T, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+ template <typename T, BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(typename T)>
inline T const*
- get(boost::spirit::extended_variant<BOOST_VARIANT_ENUM_PARAMS(T)> const* x)
+ get(boost::spirit::extended_variant<
+ BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)> const* x)
{
return boost::get<T>(&x->get());
}
- template <typename T, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+ template <typename T, BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(typename T)>
inline T*
- get(boost::spirit::extended_variant<BOOST_VARIANT_ENUM_PARAMS(T)>* x)
+ get(boost::spirit::extended_variant<
+ BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)>* x)
{
return boost::get<T>(&x->get());
}
}
+#undef BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS
+#undef BOOST_SPIRIT_EXTENDED_VARIANT_LIMIT_TYPES
+
#endif
diff --git a/3party/boost/boost/spirit/home/support/info.hpp b/3party/boost/boost/spirit/home/support/info.hpp
index ff523ab972..9b991ac882 100644
--- a/3party/boost/boost/spirit/home/support/info.hpp
+++ b/3party/boost/boost/spirit/home/support/info.hpp
@@ -28,11 +28,11 @@ namespace boost { namespace spirit
// for uniformity.
struct info
{
- struct nil {};
+ struct nil_ {};
typedef
boost::variant<
- nil
+ nil_
, utf8_string
, recursive_wrapper<info>
, recursive_wrapper<std::pair<info, info> >
@@ -40,30 +40,30 @@ namespace boost { namespace spirit
>
value_type;
- explicit info(utf8_string const& tag)
- : tag(tag), value(nil()) {}
+ explicit info(utf8_string const& tag_)
+ : tag(tag_), value(nil_()) {}
template <typename T>
- info(utf8_string const& tag, T const& value)
- : tag(tag), value(value) {}
+ info(utf8_string const& tag_, T const& value_)
+ : tag(tag_), value(value_) {}
- info(utf8_string const& tag, char value)
- : tag(tag), value(utf8_string(1, value)) {}
+ info(utf8_string const& tag_, char value_)
+ : tag(tag_), value(utf8_string(1, value_)) {}
- info(utf8_string const& tag, wchar_t value)
- : tag(tag), value(to_utf8(value)) {}
+ info(utf8_string const& tag_, wchar_t value_)
+ : tag(tag_), value(to_utf8(value_)) {}
- info(utf8_string const& tag, ucs4_char value)
- : tag(tag), value(to_utf8(value)) {}
+ info(utf8_string const& tag_, ucs4_char value_)
+ : tag(tag_), value(to_utf8(value_)) {}
template <typename Char>
- info(utf8_string const& tag, Char const* str)
- : tag(tag), value(to_utf8(str)) {}
+ info(utf8_string const& tag_, Char const* str)
+ : tag(tag_), value(to_utf8(str)) {}
template <typename Char, typename Traits, typename Allocator>
- info(utf8_string const& tag
+ info(utf8_string const& tag_
, std::basic_string<Char, Traits, Allocator> const& str)
- : tag(tag), value(to_utf8(str)) {}
+ : tag(tag_), value(to_utf8(str)) {}
utf8_string tag;
value_type value;
@@ -75,10 +75,10 @@ namespace boost { namespace spirit
typedef void result_type;
typedef basic_info_walker<Callback> this_type;
- basic_info_walker(Callback& callback, utf8_string const& tag, int depth)
- : callback(callback), tag(tag), depth(depth) {}
+ basic_info_walker(Callback& callback_, utf8_string const& tag_, int depth_)
+ : callback(callback_), tag(tag_), depth(depth_) {}
- void operator()(info::nil) const
+ void operator()(info::nil_) const
{
callback.element(tag, "", depth);
}
@@ -128,8 +128,8 @@ namespace boost { namespace spirit
{
typedef utf8_string string;
- simple_printer(Out& out)
- : out(out) {}
+ simple_printer(Out& out_)
+ : out(out_) {}
void element(string const& tag, string const& value, int /*depth*/) const
{
diff --git a/3party/boost/boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp b/3party/boost/boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp
index e70af081bc..c5cc430817 100644
--- a/3party/boost/boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp
+++ b/3party/boost/boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp
@@ -48,9 +48,7 @@ namespace boost { namespace spirit { namespace iterator_policies
typedef
typename boost::detail::iterator_traits<T>::pointer
pointer;
- typedef
- typename boost::detail::iterator_traits<T>::reference
- reference;
+ typedef result_type& reference;
typedef result_type value_type;
protected:
diff --git a/3party/boost/boost/spirit/home/support/iterators/detail/combine_policies.hpp b/3party/boost/boost/spirit/home/support/iterators/detail/combine_policies.hpp
index cfac882084..06946b82f7 100644
--- a/3party/boost/boost/spirit/home/support/iterators/detail/combine_policies.hpp
+++ b/3party/boost/boost/spirit/home/support/iterators/detail/combine_policies.hpp
@@ -21,43 +21,6 @@ namespace boost { namespace spirit { namespace iterator_policies
// single multi_pass_policy as required by the multi_pass template
///////////////////////////////////////////////////////////////////////////
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- // without partial template specialization there is nothing much to do in
- // terms of empty base optimization anyways...
- template <typename T, typename Ownership, typename Checking,
- typename Input, typename Storage>
- struct multi_pass_unique
- : Ownership, Checking, Input, Storage
- {
- multi_pass_unique() {}
- multi_pass_unique(T& x) : Input(x) {}
- multi_pass_unique(T const& x) : Input(x) {}
-
- template <typename MultiPass>
- static void destroy(MultiPass& mp)
- {
- Ownership::destroy(mp);
- Checking::destroy(mp);
- Input::destroy(mp);
- Storage::destroy(mp);
- }
-
- void swap(multi_pass_unique& x)
- {
- this->Ownership::swap(x);
- this->Checking::swap(x);
- this->Input::swap(x);
- this->Storage::swap(x);
- }
-
- template <typename MultiPass>
- inline static void clear_queue(MultiPass& mp)
- {
- Checking::clear_queue(mp);
- Storage::clear_queue(mp);
- }
- };
-#else
///////////////////////////////////////////////////////////////////////////
// select the correct derived classes based on if a policy is empty
template <typename T
@@ -470,7 +433,6 @@ namespace boost { namespace spirit { namespace iterator_policies
inline static bool is_unique(MultiPass const& mp)
{ return Ownership::is_unique(mp); }
};
-#endif
///////////////////////////////////////////////////////////////////////////
// the multi_pass_shared structure is used to combine the shared data items
diff --git a/3party/boost/boost/spirit/home/support/iterators/detail/multi_pass.hpp b/3party/boost/boost/spirit/home/support/iterators/detail/multi_pass.hpp
index 088b39ae42..8f8e6c71d3 100644
--- a/3party/boost/boost/spirit/home/support/iterators/detail/multi_pass.hpp
+++ b/3party/boost/boost/spirit/home/support/iterators/detail/multi_pass.hpp
@@ -17,29 +17,6 @@
///////////////////////////////////////////////////////////////////////////////
namespace boost { namespace spirit { namespace detail
{
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- ///////////////////////////////////////////////////////////////////////////
- // Meta-function to generate a std::iterator<> base class for multi_pass.
- // This is used mainly to improve conformance of compilers not supporting
- // PTS and thus relying on inheritance to recognize an iterator.
- //
- // We are using boost::iterator<> because it offers an automatic
- // workaround for broken std::iterator<> implementations.
- ///////////////////////////////////////////////////////////////////////////
- template <typename T, typename InputPolicy>
- struct iterator_base_creator
- {
- typedef typename InputPolicy::BOOST_NESTED_TEMPLATE unique<T> input_type;
-
- typedef boost::iterator <
- std::forward_iterator_tag
- , typename input_type::value_type
- , typename input_type::difference_type
- , typename input_type::pointer
- , typename input_type::reference
- > type;
- };
-#endif
///////////////////////////////////////////////////////////////////////////
// Default implementations of the different policies to be used with a
diff --git a/3party/boost/boost/spirit/home/support/iterators/multi_pass.hpp b/3party/boost/boost/spirit/home/support/iterators/multi_pass.hpp
index 2b355bfa6d..3fc244034f 100644
--- a/3party/boost/boost/spirit/home/support/iterators/multi_pass.hpp
+++ b/3party/boost/boost/spirit/home/support/iterators/multi_pass.hpp
@@ -26,9 +26,6 @@ namespace boost { namespace spirit
: private boost::base_from_member<
typename Policies::BOOST_NESTED_TEMPLATE shared<T>*>
, public Policies::BOOST_NESTED_TEMPLATE unique<T>
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- , typename iterator_base_creator<T, typename Policies::input_policy>::type
-#endif
{
private:
// unique and shared data types
@@ -41,11 +38,7 @@ namespace boost { namespace spirit
// define the types the standard embedded iterator typedefs are taken
// from
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- typedef typename iterator_base_creator<Input, T>::type iterator_type;
-#else
typedef typename policies_base_type::input_policy iterator_type;
-#endif
public:
// standard iterator typedefs
diff --git a/3party/boost/boost/spirit/home/support/limits.hpp b/3party/boost/boost/spirit/home/support/limits.hpp
index ff53967f1c..8abb4f1400 100644
--- a/3party/boost/boost/spirit/home/support/limits.hpp
+++ b/3party/boost/boost/spirit/home/support/limits.hpp
@@ -12,17 +12,6 @@
#include <boost/spirit/include/phoenix_core.hpp>
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-
-#if !defined(SPIRIT_ARGUMENTS_LIMIT)
-# define SPIRIT_ARGUMENTS_LIMIT PHOENIX_LIMIT
-#endif
-#if !defined(SPIRIT_ATTRIBUTES_LIMIT)
-# define SPIRIT_ATTRIBUTES_LIMIT PHOENIX_LIMIT
-#endif
-
-#else
-
#if !defined(SPIRIT_ARGUMENTS_LIMIT)
# define SPIRIT_ARGUMENTS_LIMIT BOOST_PHOENIX_LIMIT
#endif
@@ -31,5 +20,3 @@
#endif
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/home/support/make_component.hpp b/3party/boost/boost/spirit/home/support/make_component.hpp
index 04a743763d..3868475c6e 100644
--- a/3party/boost/boost/spirit/home/support/make_component.hpp
+++ b/3party/boost/boost/spirit/home/support/make_component.hpp
@@ -258,7 +258,7 @@ namespace boost { namespace spirit { namespace detail
typedef typename
proto::reverse_fold_tree<
proto::_
- , proto::make<fusion::nil>
+ , proto::make<fusion::nil_>
, make_binary_helper<Grammar>
>::template impl<Expr, State, Data>
reverse_fold_tree;
@@ -362,13 +362,6 @@ namespace boost { namespace spirit { namespace detail
)>::type
lhs_component;
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
- typedef typename
- proto::result_of::value<
- typename proto::result_of::child_c<Expr, 1>::type
- >::type
- rhs_component;
-#else
typedef
typename mpl::eval_if_c<
phoenix::is_actor<
@@ -380,7 +373,6 @@ namespace boost { namespace spirit { namespace detail
>
>::type
rhs_component;
-#endif
typedef typename
result_of::make_cons<
@@ -396,24 +388,6 @@ namespace boost { namespace spirit { namespace detail
result<make_component_(elements_type, Data)>::type
result_type;
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
- result_type operator()(
- typename impl::expr_param expr
- , typename impl::state_param state
- , typename impl::data_param data
- ) const
- {
- elements_type elements =
- detail::make_cons(
- Grammar()(
- proto::child_c<0>(expr), state, data) // LHS
- , detail::make_cons(
- proto::value(proto::child_c<1>(expr))) // RHS
- );
-
- return make_component_()(elements, data);
- }
-#else
result_type operator()(
typename impl::expr_param expr
, typename impl::state_param state
@@ -466,7 +440,6 @@ namespace boost { namespace spirit { namespace detail
return make_component_()(elements, data);
}
-#endif
};
};
}}}
diff --git a/3party/boost/boost/spirit/home/support/nonterminal/expand_arg.hpp b/3party/boost/boost/spirit/home/support/nonterminal/expand_arg.hpp
index f037acce24..f214096be1 100644
--- a/3party/boost/boost/spirit/home/support/nonterminal/expand_arg.hpp
+++ b/3party/boost/boost/spirit/home/support/nonterminal/expand_arg.hpp
@@ -50,8 +50,8 @@ namespace boost { namespace spirit { namespace detail
struct result<F(A0&)>
: result_type<A0> {};
- expand_arg(Context& context)
- : context(context)
+ expand_arg(Context& context_)
+ : context(context_)
{
}
diff --git a/3party/boost/boost/spirit/home/support/numeric_traits.hpp b/3party/boost/boost/spirit/home/support/numeric_traits.hpp
index 3a5dce88ee..01771dd982 100644
--- a/3party/boost/boost/spirit/home/support/numeric_traits.hpp
+++ b/3party/boost/boost/spirit/home/support/numeric_traits.hpp
@@ -12,6 +12,8 @@
#include <boost/config.hpp>
#include <boost/mpl/bool.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/utility/enable_if.hpp>
namespace boost { namespace spirit { namespace traits
{
@@ -113,6 +115,13 @@ namespace boost { namespace spirit { namespace traits
template <typename T, typename Enable = void>
struct is_infinite;
+
+ template <typename T, typename Enable = void>
+ struct check_overflow : mpl::false_ {};
+
+ template <typename T>
+ struct check_overflow<T, typename enable_if_c<integer_traits<T>::is_integral>::type>
+ : mpl::true_ {};
}}}
#endif
diff --git a/3party/boost/boost/spirit/home/support/terminal.hpp b/3party/boost/boost/spirit/home/support/terminal.hpp
index d52fad2c3a..3ef8c83ae2 100644
--- a/3party/boost/boost/spirit/home/support/terminal.hpp
+++ b/3party/boost/boost/spirit/home/support/terminal.hpp
@@ -33,10 +33,10 @@ namespace boost { namespace spirit
typedef Terminal terminal_type;
typedef Args args_type;
- terminal_ex(Args const& args)
- : args(args) {}
- terminal_ex(Args const& args, Terminal const& term)
- : args(args), term(term) {}
+ terminal_ex(Args const& args_)
+ : args(args_) {}
+ terminal_ex(Args const& args_, Terminal const& term_)
+ : args(args_), term(term_) {}
Args args; // Args is guaranteed to be a fusion::vectorN so you
// can use that template for detection and specialization
@@ -50,10 +50,10 @@ namespace boost { namespace spirit
typedef Actor actor_type;
static int const arity = Arity;
- lazy_terminal(Actor const& actor)
- : actor(actor) {}
- lazy_terminal(Actor const& actor, Terminal const& term)
- : actor(actor), term(term) {}
+ lazy_terminal(Actor const& actor_)
+ : actor(actor_) {}
+ lazy_terminal(Actor const& actor_, Terminal const& term_)
+ : actor(actor_), term(term_) {}
Actor actor;
Terminal term;
@@ -104,11 +104,11 @@ namespace boost { namespace spirit
typedef result_type type;
result_type
- operator()(F f, A0 const& _0) const
+ operator()(F f, A0 const& _0_) const
{
typedef typename result_type::proto_child0 child_type;
return result_type::make(child_type(
- phoenix::detail::expression::function_eval<F, A0>::make(f, _0)
+ phoenix::detail::expression::function_eval<F, A0>::make(f, _0_)
, f.proto_base().child0
));
}
@@ -129,11 +129,11 @@ namespace boost { namespace spirit
typedef result_type type;
result_type
- operator()(F f, A0 const& _0, A1 const& _1) const
+ operator()(F f, A0 const& _0_, A1 const& _1_) const
{
typedef typename result_type::proto_child0 child_type;
return result_type::make(child_type(
- phoenix::detail::expression::function_eval<F, A0, A1>::make(f, _0, _1)
+ phoenix::detail::expression::function_eval<F, A0, A1>::make(f, _0_, _1_)
, f.proto_base().child0
));
}
@@ -154,11 +154,11 @@ namespace boost { namespace spirit
typedef result_type type;
result_type
- operator()(F f, A0 const& _0, A1 const& _1, A2 const& _2) const
+ operator()(F f, A0 const& _0_, A1 const& _1_, A2 const& _2_) const
{
typedef typename result_type::proto_child0 child_type;
return result_type::make(child_type(
- phoenix::detail::expression::function_eval<F, A0, A1, A2>::make(f, _0, _1, _2)
+ phoenix::detail::expression::function_eval<F, A0, A1, A2>::make(f, _0_, _1_, _2_)
, f.proto_base().child0
));
}
@@ -368,42 +368,42 @@ namespace boost { namespace spirit
template <typename A0>
typename result<A0>::type
- operator()(A0 const& _0
+ operator()(A0 const& _0_
, typename detail::contains_actor<A0>::is_false = 0) const
{
typedef typename result<A0>::type result_type;
typedef typename result_type::proto_child0 child_type;
return result_type::make(
child_type(
- detail::make_vector(_0)
+ detail::make_vector(_0_)
, this->proto_base().child0)
);
}
template <typename A0, typename A1>
typename result<A0, A1>::type
- operator()(A0 const& _0, A1 const& _1
+ operator()(A0 const& _0_, A1 const& _1_
, typename detail::contains_actor<A0, A1>::is_false = 0) const
{
typedef typename result<A0, A1>::type result_type;
typedef typename result_type::proto_child0 child_type;
return result_type::make(
child_type(
- detail::make_vector(_0, _1)
+ detail::make_vector(_0_, _1_)
, this->proto_base().child0)
);
}
template <typename A0, typename A1, typename A2>
typename result<A0, A1, A2>::type
- operator()(A0 const& _0, A1 const& _1, A2 const& _2
+ operator()(A0 const& _0_, A1 const& _1_, A2 const& _2_
, typename detail::contains_actor<A0, A1, A2>::is_false = 0) const
{
typedef typename result<A0, A1, A2>::type result_type;
typedef typename result_type::proto_child0 child_type;
return result_type::make(
child_type(
- detail::make_vector(_0, _1, _2)
+ detail::make_vector(_0_, _1_, _2_)
, this->proto_base().child0)
);
}
@@ -412,38 +412,38 @@ namespace boost { namespace spirit
// least one arg is a Phoenix actor.
template <typename A0>
typename result<A0>::type
- operator()(A0 const& _0
+ operator()(A0 const& _0_
, typename detail::contains_actor<A0>::is_true = 0) const
{
return make_lazy<this_type
, typename phoenix::as_actor<A0>::type>()(*this
- , phoenix::as_actor<A0>::convert(_0));
+ , phoenix::as_actor<A0>::convert(_0_));
}
template <typename A0, typename A1>
typename result<A0, A1>::type
- operator()(A0 const& _0, A1 const& _1
+ operator()(A0 const& _0_, A1 const& _1_
, typename detail::contains_actor<A0, A1>::is_true = 0) const
{
return make_lazy<this_type
, typename phoenix::as_actor<A0>::type
, typename phoenix::as_actor<A1>::type>()(*this
- , phoenix::as_actor<A0>::convert(_0)
- , phoenix::as_actor<A1>::convert(_1));
+ , phoenix::as_actor<A0>::convert(_0_)
+ , phoenix::as_actor<A1>::convert(_1_));
}
template <typename A0, typename A1, typename A2>
typename result<A0, A1, A2>::type
- operator()(A0 const& _0, A1 const& _1, A2 const& _2
+ operator()(A0 const& _0_, A1 const& _1_, A2 const& _2_
, typename detail::contains_actor<A0, A1, A2>::is_true = 0) const
{
return make_lazy<this_type
, typename phoenix::as_actor<A0>::type
, typename phoenix::as_actor<A1>::type
, typename phoenix::as_actor<A2>::type>()(*this
- , phoenix::as_actor<A0>::convert(_0)
- , phoenix::as_actor<A1>::convert(_1)
- , phoenix::as_actor<A2>::convert(_2));
+ , phoenix::as_actor<A0>::convert(_0_)
+ , phoenix::as_actor<A1>::convert(_1_)
+ , phoenix::as_actor<A2>::convert(_2_));
}
private:
@@ -547,7 +547,6 @@ namespace boost { namespace spirit
}}
-#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
namespace boost { namespace phoenix
{
template <typename Tag>
@@ -558,6 +557,10 @@ namespace boost { namespace phoenix
template <typename Tag>
struct custom_terminal<Tag, typename Tag::is_spirit_tag>
{
+#ifndef BOOST_PHOENIX_NO_SPECIALIZE_CUSTOM_TERMINAL
+ typedef void _is_default_custom_terminal; // fix for #7730
+#endif
+
typedef spirit::terminal<Tag> result_type;
template <typename Context>
@@ -567,7 +570,6 @@ namespace boost { namespace phoenix
}
};
}}
-#endif
// Define a spirit terminal. This macro may be placed in any namespace.
// Common placeholders are placed in the main boost::spirit namespace
diff --git a/3party/boost/boost/spirit/home/support/terminal_expression.hpp b/3party/boost/boost/spirit/home/support/terminal_expression.hpp
index cf6bc5de54..0d206bfd9f 100644
--- a/3party/boost/boost/spirit/home/support/terminal_expression.hpp
+++ b/3party/boost/boost/spirit/home/support/terminal_expression.hpp
@@ -9,67 +9,4 @@
#if !defined(BOOST_SPIRIT_TERMINAL_EXPRESSION_MARCH_24_2011_1210AM)
#define BOOST_SPIRIT_TERMINAL_EXPRESSION_MARCH_24_2011_1210AM
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-
-namespace boost { namespace phoenix { namespace detail
-{
- namespace expression
- {
- template <
- typename F, typename A0 = void, typename A1 = void
- , typename A2 = void, typename Dummy = void>
- struct function_eval;
-
- template <typename F, typename A0>
- struct function_eval<F, A0>
- {
- typedef phoenix::actor<
- typename phoenix::as_composite<
- phoenix::detail::function_eval<1>, F, A0
- >::type
- > type;
-
- static type make(F f, A0 const & _0)
- {
- return phoenix::compose<
- phoenix::detail::function_eval<1> >(f, _0);
- }
- };
-
- template <typename F, typename A0, typename A1>
- struct function_eval<F, A0, A1>
- {
- typedef phoenix::actor<
- typename phoenix::as_composite<
- phoenix::detail::function_eval<2>, F, A0, A1
- >::type
- > type;
-
- static type make(F f, A0 const & _0, A1 const & _1)
- {
- return phoenix::compose<
- phoenix::detail::function_eval<2> >(f, _0, _1);
- }
- };
-
- template <typename F, typename A0, typename A1, typename A2>
- struct function_eval<F, A0, A1, A2>
- {
- typedef phoenix::actor<
- typename phoenix::as_composite<
- phoenix::detail::function_eval<3>, F, A0, A1, A2
- >::type
- > type;
-
- static type make(F f, A0 const & _0, A1 const & _1, A2 const & _2)
- {
- return phoenix::compose<
- phoenix::detail::function_eval<3> >(f, _0, _1, _2);
- }
- };
- }
-}}}
-
-#endif // !BOOST_SPIRIT_USE_PHOENIX_V3
-
#endif
diff --git a/3party/boost/boost/spirit/home/support/utree/detail/utree_detail2.hpp b/3party/boost/boost/spirit/home/support/utree/detail/utree_detail2.hpp
index 789d99d482..d4be2c5bde 100644
--- a/3party/boost/boost/spirit/home/support/utree/detail/utree_detail2.hpp
+++ b/3party/boost/boost/spirit/home/support/utree/detail/utree_detail2.hpp
@@ -120,9 +120,9 @@ namespace boost { namespace spirit { namespace detail
construct(other.str(), other.str() + other.size());
}
- inline void fast_string::initialize()
+ inline void fast_string::initialize()
{
- for (std::size_t i = 0; i != buff_size / (sizeof(long)/sizeof(char)); ++i)
+ for (std::size_t i = 0; i != buff_size / (sizeof(long)/sizeof(char)); ++i)
lbuff[i] = 0;
}
@@ -293,7 +293,7 @@ namespace boost { namespace spirit { namespace detail
return;
}
- detail::list::node* new_node =
+ detail::list::node* new_node =
new detail::list::node(val, pos.node, pos.node->prev);
if (pos.node->prev)
@@ -330,7 +330,7 @@ namespace boost { namespace spirit { namespace detail
if (last == 0)
push_front(val);
else {
- detail::list::node* new_node =
+ detail::list::node* new_node =
new detail::list::node(val, last->next, last);
last->next = new_node;
last = new_node;
@@ -402,7 +402,7 @@ namespace boost { namespace spirit { namespace detail
///////////////////////////////////////////////////////////////////////////
// simple binder for binary visitation (we don't want to bring in the big guns)
template <typename F, typename X>
- struct bind_impl
+ struct bind_impl
{
typedef typename F::result_type result_type;
X& x; // always by reference
@@ -647,9 +647,9 @@ namespace boost { namespace spirit
{
return f(env);
}
-
+
template <typename F>
- utree stored_function<F>::operator()(utree& env) const
+ utree stored_function<F>::operator()(utree& env) const
{
return f(env);
}
@@ -660,7 +660,7 @@ namespace boost { namespace spirit
{
return new stored_function<F>(f);
}
-
+
template <typename F>
referenced_function<F>::referenced_function(F& f)
: f(f)
@@ -677,7 +677,7 @@ namespace boost { namespace spirit
{
return f(env);
}
-
+
template <typename F>
utree referenced_function<F>::operator()(utree& env) const
{
@@ -702,8 +702,8 @@ namespace boost { namespace spirit
s.initialize();
set_type(type::nil_type);
}
-
- inline utree::utree(bool b_)
+
+ inline utree::utree(bool b_)
{
s.initialize();
b = b_;
@@ -718,21 +718,21 @@ namespace boost { namespace spirit
set_type(type::string_type);
}
- inline utree::utree(unsigned int i_)
+ inline utree::utree(unsigned int i_)
{
s.initialize();
i = i_;
set_type(type::int_type);
}
- inline utree::utree(int i_)
+ inline utree::utree(int i_)
{
s.initialize();
i = i_;
set_type(type::int_type);
}
- inline utree::utree(double d_)
+ inline utree::utree(double d_)
{
s.initialize();
d = d_;
@@ -789,14 +789,14 @@ namespace boost { namespace spirit
pf = pf_.clone();
set_type(type::function_type);
}
-
+
inline utree::utree(function_base* pf_)
{
s.initialize();
pf = pf_;
set_type(type::function_type);
}
-
+
template <typename Iter>
inline utree::utree(boost::iterator_range<Iter> r)
{
@@ -930,7 +930,7 @@ namespace boost { namespace spirit
set_type(type::reference_type);
return *this;
}
-
+
inline utree& utree::operator=(any_ptr const& p)
{
free();
@@ -939,7 +939,7 @@ namespace boost { namespace spirit
set_type(type::any_type);
return *this;
}
-
+
inline utree& utree::operator=(function_base const& pf_)
{
free();
@@ -955,7 +955,7 @@ namespace boost { namespace spirit
set_type(type::function_type);
return *this;
}
-
+
template <typename Iter>
inline utree& utree::operator=(boost::iterator_range<Iter> r)
{
@@ -1040,7 +1040,7 @@ namespace boost { namespace spirit
return p->insert(pos, val);
ensure_list_type("insert()");
- if (!pos.node)
+ if (!pos.node)
{
l.push_back(val);
return utree::iterator(l.last, l.last->prev);
@@ -1275,10 +1275,10 @@ namespace boost { namespace spirit
if (t == type::symbol_type)
return s.size();
-
+
if (t == type::binary_type)
return s.size();
-
+
if (t == type::string_range_type)
return sr.last - sr.first;
@@ -1333,7 +1333,7 @@ namespace boost { namespace spirit
}
// otherwise...
- if (get_type() != type::list_type)
+ if (get_type() != type::list_type)
BOOST_THROW_EXCEPTION(
bad_type_exception
("back() called on non-list utree type", get_type()));
@@ -1381,7 +1381,7 @@ namespace boost { namespace spirit
}
// otherwise...
- if (get_type() != type::list_type)
+ if (get_type() != type::list_type)
BOOST_THROW_EXCEPTION(
bad_type_exception
("back() called on non-list utree type", get_type()));
@@ -1602,7 +1602,7 @@ namespace boost { namespace spirit
"eval() called on non-function utree type", get_type()));
return (*pf)(env);
}
-
+
inline utree utree::eval(utree& env) const
{
if (get_type() == type::reference_type)
@@ -1614,12 +1614,12 @@ namespace boost { namespace spirit
"eval() called on non-function utree type", get_type()));
return (*pf)(env);
}
-
+
inline utree utree::operator() (utree const& env) const
{
return eval(env);
}
-
+
inline utree utree::operator() (utree& env) const
{
return eval(env);
diff --git a/3party/boost/boost/spirit/home/x3.hpp b/3party/boost/boost/spirit/home/x3.hpp
new file mode 100644
index 0000000000..9da6057b96
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3.hpp
@@ -0,0 +1,27 @@
+/*=============================================================================
+ Copyright (c) 2001-2013 Joel de Guzman
+
+ 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_SPIRIT_X3_MARCH_04_2007_0852PM)
+#define BOOST_SPIRIT_X3_MARCH_04_2007_0852PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+//~ #include <boost/spirit/home/x3/action.hpp>
+//~ #include <boost/spirit/home/x3/auto.hpp>
+#include <boost/spirit/home/x3/auxiliary.hpp>
+#include <boost/spirit/home/x3/char.hpp>
+//~ #include <boost/spirit/home/x3/binary.hpp>
+#include <boost/spirit/home/x3/directive.hpp>
+#include <boost/spirit/home/x3/nonterminal.hpp>
+#include <boost/spirit/home/x3/numeric.hpp>
+#include <boost/spirit/home/x3/operator.hpp>
+#include <boost/spirit/home/x3/core.hpp>
+#include <boost/spirit/home/x3/string.hpp>
+//~ #include <boost/spirit/home/x3/stream.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/auxiliary.hpp b/3party/boost/boost/spirit/home/x3/auxiliary.hpp
new file mode 100644
index 0000000000..afa89b2883
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/auxiliary.hpp
@@ -0,0 +1,24 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_AUXILIARY_FEBRUARY_03_2007_0355PM)
+#define BOOST_SPIRIT_X3_AUXILIARY_FEBRUARY_03_2007_0355PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/auxiliary/any_parser.hpp>
+#include <boost/spirit/home/x3/auxiliary/eps.hpp>
+#include <boost/spirit/home/x3/auxiliary/guard.hpp>
+//~ #include <boost/spirit/home/x3/auxiliary/lazy.hpp>
+#include <boost/spirit/home/x3/auxiliary/eol.hpp>
+#include <boost/spirit/home/x3/auxiliary/eoi.hpp>
+#include <boost/spirit/home/x3/auxiliary/attr.hpp>
+//~ #include <boost/spirit/home/x3/auxiliary/attr_cast.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/auxiliary/any_parser.hpp b/3party/boost/boost/spirit/home/x3/auxiliary/any_parser.hpp
new file mode 100644
index 0000000000..0e257c04b1
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/auxiliary/any_parser.hpp
@@ -0,0 +1,155 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013-2014 Agustin Berge
+
+ 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_SPIRIT_X3_AUXILIARY_ANY_PARSER_APR_09_2014_1145PM)
+#define BOOST_SPIRIT_X3_AUXILIARY_ANY_PARSER_APR_09_2014_1145PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/subcontext.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/traits/is_parser.hpp>
+#include <memory>
+#include <string>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <
+ typename Iterator
+ , typename Attribute = unused_type
+ , typename Context = subcontext<>>
+ struct any_parser : parser<any_parser<Iterator, Attribute, Context>>
+ {
+ typedef Attribute attribute_type;
+
+ static bool const has_attribute =
+ !is_same<unused_type, attribute_type>::value;
+ static bool const handles_container =
+ traits::is_container<Attribute>::value;
+
+ public:
+ any_parser()
+ : _content(nullptr) {}
+
+ template <typename Expr,
+ typename Enable = typename enable_if<traits::is_parser<Expr>>::type>
+ any_parser(Expr const& expr)
+ : _content(new holder<Expr>(expr)) {}
+
+ any_parser(any_parser const& other)
+ : _content(other._content ? other._content->clone() : nullptr) {}
+
+ any_parser(any_parser&& other) = default;
+
+ any_parser& operator=(any_parser const& other)
+ {
+ _content.reset(other._content ? other._content->clone() : nullptr);
+ return *this;
+ }
+
+ any_parser& operator=(any_parser&& other) = default;
+
+ template <typename Iterator_, typename Context_>
+ bool parse(Iterator_& first, Iterator_ const& last
+ , Context_ const& context, unused_type, Attribute& attr) const
+ {
+ BOOST_STATIC_ASSERT_MSG(
+ (is_same<Iterator, Iterator_>::value)
+ , "Incompatible iterator used"
+ );
+
+ BOOST_ASSERT_MSG(
+ (_content != nullptr)
+ , "Invalid use of uninitialized any_parser"
+ );
+
+ return _content->parse(first, last, context, attr);
+ }
+
+ template <typename Iterator_, typename Context_, typename Attribute_>
+ bool parse(Iterator_& first, Iterator_ const& last
+ , Context_ const& context, unused_type, Attribute_& attr_) const
+ {
+ Attribute attr;
+ if (parse(first, last, context, unused, attr))
+ {
+ traits::move_to(attr, attr_);
+ return true;
+ }
+ return false;
+ }
+
+ std::string get_info() const
+ {
+ return _content ? _content->get_info() : "";
+ }
+
+ private:
+
+ struct placeholder
+ {
+ virtual placeholder* clone() const = 0;
+
+ virtual bool parse(Iterator& first, Iterator const& last
+ , Context const& context, Attribute& attr) const = 0;
+
+ virtual std::string get_info() const = 0;
+
+ virtual ~placeholder() {}
+ };
+
+ template <typename Expr>
+ struct holder : placeholder
+ {
+ typedef typename extension::as_parser<Expr>::value_type parser_type;
+
+ explicit holder(Expr const& p)
+ : _parser(as_parser(p)) {}
+
+ holder* clone() const override
+ {
+ return new holder(*this);
+ }
+
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, Attribute& attr) const override
+ {
+ return _parser.parse(first, last, context, unused, attr);
+ }
+
+ std::string get_info() const override
+ {
+ return x3::what(_parser);
+ }
+
+ parser_type _parser;
+ };
+
+ private:
+ std::unique_ptr<placeholder> _content;
+ };
+
+ template <typename Iterator, typename Attribute, typename Context>
+ struct get_info<any_parser<Iterator, Attribute, Context>>
+ {
+ typedef std::string result_type;
+ std::string operator()(
+ any_parser<Iterator, Attribute, Context> const& p) const
+ {
+ return p.get_info();
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/auxiliary/attr.hpp b/3party/boost/boost/spirit/home/x3/auxiliary/attr.hpp
new file mode 100644
index 0000000000..364cca0bee
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/auxiliary/attr.hpp
@@ -0,0 +1,135 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustin Berge
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_SPIRIT_X3_ATTR_JUL_23_2008_0956AM
+#define BOOST_SPIRIT_X3_ATTR_JUL_23_2008_0956AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <algorithm>
+#include <cstddef>
+#include <string>
+#include <utility>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Value>
+ struct attr_parser : parser<attr_parser<Value>>
+ {
+ typedef Value attribute_type;
+
+ static bool const has_attribute =
+ !is_same<unused_type, attribute_type>::value;
+ static bool const handles_container =
+ traits::is_container<attribute_type>::value;
+
+ attr_parser(Value const& value)
+ : value_(value) {}
+ attr_parser(Value&& value)
+ : value_(std::move(value)) {}
+
+ template <typename Iterator, typename Context
+ , typename RuleContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext&, Attribute& attr_) const
+ {
+ // $$$ Change to copy_to once we have it $$$
+ traits::move_to(value_, attr_);
+ return true;
+ }
+
+ Value value_;
+
+ private:
+ // silence MSVC warning C4512: assignment operator could not be generated
+ attr_parser& operator= (attr_parser const&);
+ };
+
+ template <typename Value, std::size_t N>
+ struct attr_parser<Value[N]> : parser<attr_parser<Value[N]>>
+ {
+ typedef Value attribute_type[N];
+
+ static bool const has_attribute =
+ !is_same<unused_type, attribute_type>::value;
+ static bool const handles_container = true;
+
+ attr_parser(Value const (&value)[N])
+ {
+ std::copy(value + 0, value + N, value_ + 0);
+ }
+
+ attr_parser(Value (&&value)[N])
+ {
+ std::move(value + 0, value + N, value_ + 0);
+ }
+
+ template <typename Iterator, typename Context
+ , typename RuleContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext&, Attribute& attr_) const
+ {
+ // $$$ Change to copy_to once we have it $$$
+ traits::move_to(value_ + 0, value_ + N, attr_);
+ return true;
+ }
+
+ Value value_[N];
+
+ private:
+ // silence MSVC warning C4512: assignment operator could not be generated
+ attr_parser& operator= (attr_parser const&);
+ };
+
+ template <typename Value>
+ struct get_info<attr_parser<Value>>
+ {
+ typedef std::string result_type;
+ std::string operator()(attr_parser<Value> const& /*p*/) const
+ {
+ return "attr";
+ }
+ };
+
+ struct attr_gen
+ {
+ template <typename Value>
+ attr_parser<typename remove_cv<
+ typename remove_reference<Value>::type>::type>
+ operator()(Value&& value) const
+ {
+ return {std::forward<Value>(value)};
+ }
+
+ template <typename Value, std::size_t N>
+ attr_parser<typename remove_cv<Value>::type[N]>
+ operator()(Value (&value)[N]) const
+ {
+ return {value};
+ }
+ template <typename Value, std::size_t N>
+ attr_parser<typename remove_cv<Value>::type[N]>
+ operator()(Value (&&value)[N]) const
+ {
+ return {value};
+ }
+ };
+
+ attr_gen const attr = attr_gen();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/auxiliary/eoi.hpp b/3party/boost/boost/spirit/home/x3/auxiliary/eoi.hpp
new file mode 100644
index 0000000000..55bd51cfc4
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/auxiliary/eoi.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_EOI_MARCH_23_2007_0454PM)
+#define BOOST_SPIRIT_X3_EOI_MARCH_23_2007_0454PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ struct eoi_parser : parser<eoi_parser>
+ {
+ typedef unused_type attribute_type;
+ static bool const has_attribute = false;
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute&) const
+ {
+ x3::skip_over(first, last, context);
+ return first == last;
+ }
+ };
+
+ template<>
+ struct get_info<eoi_parser>
+ {
+ typedef std::string result_type;
+ result_type operator()(eoi_parser const &) const { return "eoi"; }
+ };
+
+ eoi_parser const eoi = eoi_parser();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/auxiliary/eol.hpp b/3party/boost/boost/spirit/home/x3/auxiliary/eol.hpp
new file mode 100644
index 0000000000..3d191b4269
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/auxiliary/eol.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_EOL_MARCH_23_2007_0454PM)
+#define BOOST_SPIRIT_X3_EOL_MARCH_23_2007_0454PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ struct eol_parser : parser<eol_parser>
+ {
+ typedef unused_type attribute_type;
+ static bool const has_attribute = false;
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute& /*attr*/) const
+ {
+ x3::skip_over(first, last, context);
+ Iterator iter = first;
+ bool matched = false;
+ if (iter != last && *iter == '\r') // CR
+ {
+ matched = true;
+ ++iter;
+ }
+ if (iter != last && *iter == '\n') // LF
+ {
+ matched = true;
+ ++iter;
+ }
+
+ if (matched) first = iter;
+ return matched;
+ }
+ };
+
+ template<>
+ struct get_info<eol_parser>
+ {
+ typedef std::string result_type;
+ result_type operator()(eol_parser const &) const { return "eol"; }
+ };
+
+ eol_parser const eol = eol_parser();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/auxiliary/eps.hpp b/3party/boost/boost/spirit/home/x3/auxiliary/eps.hpp
new file mode 100644
index 0000000000..ab4d307931
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/auxiliary/eps.hpp
@@ -0,0 +1,92 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_EPS_MARCH_23_2007_0454PM)
+#define BOOST_SPIRIT_X3_EPS_MARCH_23_2007_0454PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ struct rule_context_tag;
+
+ struct semantic_predicate : parser<semantic_predicate>
+ {
+ typedef unused_type attribute_type;
+ static bool const has_attribute = false;
+
+ semantic_predicate(bool predicate)
+ : predicate(predicate) {}
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute&) const
+ {
+ x3::skip_over(first, last, context);
+ return predicate;
+ }
+
+ bool predicate;
+ };
+
+ template <typename F>
+ struct lazy_semantic_predicate : parser<lazy_semantic_predicate<F>>
+ {
+ typedef unused_type attribute_type;
+ static bool const has_attribute = false;
+
+ lazy_semantic_predicate(F f)
+ : f(f) {}
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute& attr) const
+ {
+ x3::skip_over(first, last, context);
+ return f(x3::get<rule_context_tag>(context));
+ }
+
+ F f;
+ };
+
+ struct eps_parser : parser<eps_parser>
+ {
+ typedef unused_type attribute_type;
+ static bool const has_attribute = false;
+
+ template <typename Iterator, typename Context
+ , typename RuleContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext&, Attribute&) const
+ {
+ x3::skip_over(first, last, context);
+ return true;
+ }
+
+ semantic_predicate
+ operator()(bool predicate) const
+ {
+ return semantic_predicate(predicate);
+ }
+
+ template <typename F>
+ lazy_semantic_predicate<F>
+ operator()(F f) const
+ {
+ return lazy_semantic_predicate<F>(f);
+ }
+ };
+
+ eps_parser const eps = eps_parser();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/auxiliary/guard.hpp b/3party/boost/boost/spirit/home/x3/auxiliary/guard.hpp
new file mode 100644
index 0000000000..6fd63c822c
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/auxiliary/guard.hpp
@@ -0,0 +1,73 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_GUARD_FERBRUARY_02_2013_0649PM)
+#define BOOST_SPIRIT_X3_GUARD_FERBRUARY_02_2013_0649PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/directive/expect.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ enum class error_handler_result
+ {
+ fail
+ , retry
+ , accept
+ , rethrow
+ };
+
+ template <typename Subject, typename Handler>
+ struct guard : unary_parser<Subject, guard<Subject, Handler>>
+ {
+ typedef unary_parser<Subject, guard<Subject, Handler>> base_type;
+ static bool const is_pass_through_unary = true;
+
+ guard(Subject const& subject, Handler handler)
+ : base_type(subject), handler(handler) {}
+
+ template <typename Iterator, typename Context
+ , typename RuleContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext& rcontext, Attribute& attr) const
+ {
+ for (;;)
+ {
+ try
+ {
+ Iterator i = first;
+ bool r = this->subject.parse(i, last, context, rcontext, attr);
+ if (r)
+ first = i;
+ return r;
+ }
+ catch (expectation_failure<Iterator> const& x)
+ {
+ switch (handler(first, last, x, context))
+ {
+ case error_handler_result::fail:
+ return false;
+ case error_handler_result::retry:
+ continue;
+ case error_handler_result::accept:
+ return true;
+ case error_handler_result::rethrow:
+ throw;
+ }
+ }
+ }
+ return false;
+ }
+
+ Handler handler;
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/char.hpp b/3party/boost/boost/spirit/home/x3/char.hpp
new file mode 100644
index 0000000000..19d26de3a2
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/char.hpp
@@ -0,0 +1,23 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_CHAR_FEBRUARY_02_2007_0921AM)
+#define BOOST_SPIRIT_X3_CHAR_FEBRUARY_02_2007_0921AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+#include <boost/spirit/home/x3/char/negated_char_parser.hpp>
+#include <boost/spirit/home/x3/char/char.hpp>
+#include <boost/spirit/home/x3/char/char_class.hpp>
+
+#if defined(BOOST_SPIRIT_X3_UNICODE)
+#include <boost/spirit/home/x3/char/unicode.hpp>
+#endif
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/char/any_char.hpp b/3party/boost/boost/spirit/home/x3/char/any_char.hpp
new file mode 100644
index 0000000000..7ff769b8b2
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/char/any_char.hpp
@@ -0,0 +1,41 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_ANY_CHAR_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_X3_ANY_CHAR_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/literal_char.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Encoding>
+ struct any_char : char_parser<any_char<Encoding>>
+ {
+ typedef typename Encoding::char_type char_type;
+ typedef Encoding encoding;
+ typedef char_type attribute_type;
+ static bool const has_attribute = true;
+
+ template <typename Char, typename Context>
+ bool test(Char ch_, Context const&) const
+ {
+ return ((sizeof(Char) <= sizeof(char_type)) || encoding::ischar(ch_));
+ }
+
+ template <typename Char>
+ literal_char<Encoding>
+ operator()(Char ch) const
+ {
+ return literal_char<Encoding>(ch);
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/char/char.hpp b/3party/boost/boost/spirit/home/x3/char/char.hpp
new file mode 100644
index 0000000000..9452dcd86d
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/char/char.hpp
@@ -0,0 +1,88 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_CHAR_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_X3_CHAR_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/any_char.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/char_encoding/standard.hpp>
+#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ namespace standard
+ {
+ typedef any_char<char_encoding::standard> char_type;
+ char_type const char_ = char_type();
+ }
+
+ using standard::char_type;
+ using standard::char_;
+
+ namespace standard_wide
+ {
+ typedef any_char<char_encoding::standard_wide> char_type;
+ char_type const char_ = char_type();
+ }
+
+ namespace ascii
+ {
+ typedef any_char<char_encoding::ascii> char_type;
+ char_type const char_ = char_type();
+ }
+
+ namespace extension
+ {
+ template <>
+ struct as_parser<char>
+ {
+ typedef literal_char<
+ char_encoding::standard, unused_type>
+ type;
+
+ typedef type value_type;
+
+ static type call(char ch)
+ {
+ return type(ch);
+ }
+ };
+
+ template <>
+ struct as_parser<wchar_t>
+ {
+ typedef literal_char<
+ char_encoding::standard_wide, unused_type>
+ type;
+
+ typedef type value_type;
+
+ static type call(wchar_t ch)
+ {
+ return type(ch);
+ }
+ };
+ }
+
+ inline literal_char<char_encoding::standard, unused_type>
+ lit(char ch)
+ {
+ return literal_char<char_encoding::standard, unused_type>(ch);
+ }
+
+ inline literal_char<char_encoding::standard_wide, unused_type>
+ lit(wchar_t ch)
+ {
+ return literal_char<char_encoding::standard_wide, unused_type>(ch);
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/char/char_class.hpp b/3party/boost/boost/spirit/home/x3/char/char_class.hpp
new file mode 100644
index 0000000000..18b7131c0f
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/char/char_class.hpp
@@ -0,0 +1,148 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_CHAR_CLASS_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_X3_CHAR_CLASS_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+#include <boost/spirit/home/x3/char/detail/cast_char.hpp>
+#include <boost/spirit/home/support/char_encoding/standard.hpp>
+#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/char_encoding/iso8859_1.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ struct char_tag {};
+ struct alnum_tag {};
+ struct alpha_tag {};
+ struct blank_tag {};
+ struct cntrl_tag {};
+ struct digit_tag {};
+ struct graph_tag {};
+ struct print_tag {};
+ struct punct_tag {};
+ struct space_tag {};
+ struct xdigit_tag {};
+ struct lower_tag {};
+ struct upper_tag {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Encoding>
+ struct char_class_base
+ {
+ typedef typename Encoding::char_type char_type;
+
+#define BOOST_SPIRIT_X3_CLASSIFY(name) \
+ template <typename Char> \
+ static bool \
+ is(name##_tag, Char ch) \
+ { \
+ return Encoding::is##name \
+ BOOST_PREVENT_MACRO_SUBSTITUTION \
+ (detail::cast_char<char_type>(ch)); \
+ } \
+ /***/
+
+ BOOST_SPIRIT_X3_CLASSIFY(char)
+ BOOST_SPIRIT_X3_CLASSIFY(alnum)
+ BOOST_SPIRIT_X3_CLASSIFY(alpha)
+ BOOST_SPIRIT_X3_CLASSIFY(digit)
+ BOOST_SPIRIT_X3_CLASSIFY(xdigit)
+ BOOST_SPIRIT_X3_CLASSIFY(cntrl)
+ BOOST_SPIRIT_X3_CLASSIFY(graph)
+ BOOST_SPIRIT_X3_CLASSIFY(lower)
+ BOOST_SPIRIT_X3_CLASSIFY(print)
+ BOOST_SPIRIT_X3_CLASSIFY(punct)
+ BOOST_SPIRIT_X3_CLASSIFY(space)
+ BOOST_SPIRIT_X3_CLASSIFY(blank)
+ BOOST_SPIRIT_X3_CLASSIFY(upper)
+
+#undef BOOST_SPIRIT_X3_CLASSIFY
+ };
+
+ template <typename Encoding, typename Tag>
+ struct char_class
+ : char_parser<char_class<Encoding, Tag>>
+ {
+ typedef Encoding encoding;
+ typedef Tag tag;
+ typedef typename Encoding::char_type char_type;
+ typedef char_type attribute_type;
+ static bool const has_attribute = true;
+
+ template <typename Char, typename Context>
+ bool test(Char ch, Context const&) const
+ {
+ return ((sizeof(Char) <= sizeof(char_type)) || encoding::ischar(ch))
+ && char_class_base<Encoding>::is(tag(), ch);
+ }
+ };
+
+#define BOOST_SPIRIT_X3_CHAR_CLASS(encoding, name) \
+ typedef char_class<char_encoding::encoding, name##_tag> name##_type; \
+ name##_type const name = name##_type(); \
+ /***/
+
+#define BOOST_SPIRIT_X3_CHAR_CLASSES(encoding) \
+ namespace encoding \
+ { \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, alnum) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, alpha) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, digit) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, xdigit) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, cntrl) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, graph) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, lower) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, print) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, punct) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, space) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, blank) \
+ BOOST_SPIRIT_X3_CHAR_CLASS(encoding, upper) \
+ } \
+ /***/
+
+ BOOST_SPIRIT_X3_CHAR_CLASSES(standard)
+ BOOST_SPIRIT_X3_CHAR_CLASSES(standard_wide)
+ BOOST_SPIRIT_X3_CHAR_CLASSES(ascii)
+ BOOST_SPIRIT_X3_CHAR_CLASSES(iso8859_1)
+
+#undef BOOST_SPIRIT_X3_CHAR_CLASS
+#undef BOOST_SPIRIT_X3_CHAR_CLASSES
+
+ using standard::alnum_type;
+ using standard::alpha_type;
+ using standard::digit_type;
+ using standard::xdigit_type;
+ using standard::cntrl_type;
+ using standard::graph_type;
+ using standard::lower_type;
+ using standard::print_type;
+ using standard::punct_type;
+ using standard::space_type;
+ using standard::blank_type;
+ using standard::upper_type;
+
+ using standard::alnum;
+ using standard::alpha;
+ using standard::digit;
+ using standard::xdigit;
+ using standard::cntrl;
+ using standard::graph;
+ using standard::lower;
+ using standard::print;
+ using standard::punct;
+ using standard::space;
+ using standard::blank;
+ using standard::upper;
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/char/char_parser.hpp b/3party/boost/boost/spirit/home/x3/char/char_parser.hpp
new file mode 100644
index 0000000000..6943804369
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/char/char_parser.hpp
@@ -0,0 +1,44 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_CHAR_PARSER_APR_16_2006_0906AM)
+#define BOOST_SPIRIT_X3_CHAR_PARSER_APR_16_2006_0906AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // The base char_parser
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Derived>
+ struct char_parser : parser<Derived>
+ {
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(
+ Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute& attr) const
+ {
+ x3::skip_over(first, last, context);
+
+ if (first != last && this->derived().test(*first, context))
+ {
+ x3::traits::move_to(*first, attr);
+ ++first;
+ return true;
+ }
+ return false;
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/char/detail/cast_char.hpp b/3party/boost/boost/spirit/home/x3/char/detail/cast_char.hpp
new file mode 100644
index 0000000000..03bda27a29
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/char/detail/cast_char.hpp
@@ -0,0 +1,58 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CAST_CHAR_NOVEMBER_10_2006_0907AM)
+#define BOOST_SPIRIT_X3_CAST_CHAR_NOVEMBER_10_2006_0907AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/make_signed.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+ // Here's the thing... typical encodings (except ASCII) deal with unsigned
+ // integers > 127 (ASCII uses only 127). Yet, most char and wchar_t are signed.
+ // Thus, a char with value > 127 is negative (e.g. char 233 is -23). When you
+ // cast this to an unsigned int with 32 bits, you get 4294967273!
+ //
+ // The trick is to cast to an unsigned version of the source char first
+ // before casting to the target. {P.S. Don't worry about the code, the
+ // optimizer will optimize the if-else branches}
+
+ template <typename TargetChar, typename SourceChar>
+ TargetChar cast_char(SourceChar ch)
+ {
+ if (is_signed<TargetChar>::value != is_signed<SourceChar>::value)
+ {
+ if (is_signed<SourceChar>::value)
+ {
+ // source is signed, target is unsigned
+ typedef typename make_unsigned<SourceChar>::type USourceChar;
+ return TargetChar(USourceChar(ch));
+ }
+ else
+ {
+ // source is unsigned, target is signed
+ typedef typename make_signed<SourceChar>::type SSourceChar;
+ return TargetChar(SSourceChar(ch));
+ }
+ }
+ else
+ {
+ // source and target has same signedness
+ return TargetChar(ch); // just cast
+ }
+ }
+}}}}
+
+#endif
+
+
diff --git a/3party/boost/boost/spirit/home/x3/char/literal_char.hpp b/3party/boost/boost/spirit/home/x3/char/literal_char.hpp
new file mode 100644
index 0000000000..94b2a239a6
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/char/literal_char.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_LITERAL_CHAR_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_X3_LITERAL_CHAR_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+#include <boost/spirit/home/x3/support/utility/utf8.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Encoding, typename Attribute = typename Encoding::char_type>
+ struct literal_char : char_parser<literal_char<Encoding, Attribute>>
+ {
+ typedef typename Encoding::char_type char_type;
+ typedef Encoding encoding;
+ typedef Attribute attribute_type;
+ static bool const has_attribute =
+ !is_same<unused_type, attribute_type>::value;
+
+ template <typename Char>
+ literal_char(Char ch)
+ : ch(static_cast<char_type>(ch)) {}
+
+ template <typename Char, typename Context>
+ bool test(Char ch_, Context const&) const
+ {
+ return ((sizeof(Char) <= sizeof(char_type)) || encoding::ischar(ch_))
+ && ch == char_type(ch_);
+ }
+
+ char_type ch;
+ };
+
+ template <typename Encoding, typename Attribute>
+ struct get_info<literal_char<Encoding, Attribute>>
+ {
+ typedef std::string result_type;
+ std::string operator()(literal_char<Encoding, Attribute> const& p) const
+ {
+ return '\'' + to_utf8(Encoding::toucs4(p.ch)) + '\'';
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/char/negated_char_parser.hpp b/3party/boost/boost/spirit/home/x3/char/negated_char_parser.hpp
new file mode 100644
index 0000000000..392d712759
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/char/negated_char_parser.hpp
@@ -0,0 +1,65 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_NEGATED_CHAR_PARSER_APR_16_2006_0906AM)
+#define BOOST_SPIRIT_X3_NEGATED_CHAR_PARSER_APR_16_2006_0906AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // negated_char_parser handles ~cp expressions (cp is a char_parser)
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Positive>
+ struct negated_char_parser :
+ char_parser<negated_char_parser<Positive>>
+ {
+ negated_char_parser(Positive const& positive)
+ : positive(positive) {}
+
+ template <typename CharParam, typename Context>
+ bool test(CharParam ch, Context const& context) const
+ {
+ return !positive.test(ch, context);
+ }
+
+ Positive positive;
+ };
+
+ template <typename Positive>
+ inline negated_char_parser<Positive>
+ operator~(char_parser<Positive> const& cp)
+ {
+ return negated_char_parser<Positive>(cp.derived());
+ }
+
+ template <typename Positive>
+ inline Positive const&
+ operator~(negated_char_parser<Positive> const& cp)
+ {
+ return cp.positive;
+ }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Positive, typename Context>
+ struct attribute_of<x3::negated_char_parser<Positive>, Context>
+ : attribute_of<Positive, Context> {};
+
+ template <typename Positive, typename Context>
+ struct has_attribute<x3::negated_char_parser<Positive>, Context>
+ : has_attribute<Positive, Context> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/char/unicode.hpp b/3party/boost/boost/spirit/home/x3/char/unicode.hpp
new file mode 100644
index 0000000000..6954c40e40
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/char/unicode.hpp
@@ -0,0 +1,617 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_UNICODE_JAN_20_2012_1218AM)
+#define BOOST_SPIRIT_X3_UNICODE_JAN_20_2012_1218AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+#include <boost/spirit/home/x3/char/char.hpp>
+#include <boost/spirit/home/x3/char/detail/cast_char.hpp>
+#include <boost/spirit/home/support/char_encoding/unicode.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Major Categories
+ ///////////////////////////////////////////////////////////////////////////
+ struct char_tag;
+ struct alnum_tag;
+ struct alpha_tag;
+ struct blank_tag;
+ struct cntrl_tag;
+ struct digit_tag;
+ struct graph_tag;
+ struct print_tag;
+ struct punct_tag;
+ struct space_tag;
+ struct xdigit_tag;
+ struct lower_tag;
+ struct upper_tag;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Major Categories
+ ///////////////////////////////////////////////////////////////////////////
+ struct letter_tag {};
+ struct mark_tag {};
+ struct number_tag {};
+ struct separator_tag {};
+ struct other_tag {};
+ struct punctuation_tag {};
+ struct symbol_tag {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode General Categories
+ ///////////////////////////////////////////////////////////////////////////
+ struct uppercase_letter_tag {};
+ struct lowercase_letter_tag {};
+ struct titlecase_letter_tag {};
+ struct modifier_letter_tag {};
+ struct other_letter_tag {};
+
+ struct nonspacing_mark_tag {};
+ struct enclosing_mark_tag {};
+ struct spacing_mark_tag {};
+
+ struct decimal_number_tag {};
+ struct letter_number_tag {};
+ struct other_number_tag {};
+
+ struct space_separator_tag {};
+ struct line_separator_tag {};
+ struct paragraph_separator_tag {};
+
+ struct control_tag {};
+ struct format_tag {};
+ struct private_use_tag {};
+ struct surrogate_tag {};
+ struct unassigned_tag {};
+
+ struct dash_punctuation_tag {};
+ struct open_punctuation_tag {};
+ struct close_punctuation_tag {};
+ struct connector_punctuation_tag {};
+ struct other_punctuation_tag {};
+ struct initial_punctuation_tag {};
+ struct final_punctuation_tag {};
+
+ struct math_symbol_tag {};
+ struct currency_symbol_tag {};
+ struct modifier_symbol_tag {};
+ struct other_symbol_tag {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Derived Categories
+ ///////////////////////////////////////////////////////////////////////////
+ struct alphabetic_tag {};
+ struct uppercase_tag {};
+ struct lowercase_tag {};
+ struct white_space_tag {};
+ struct hex_digit_tag {};
+ struct noncharacter_code_point_tag {};
+ struct default_ignorable_code_point_tag {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Scripts
+ ///////////////////////////////////////////////////////////////////////////
+ struct arabic_tag {};
+ struct imperial_aramaic_tag {};
+ struct armenian_tag {};
+ struct avestan_tag {};
+ struct balinese_tag {};
+ struct bamum_tag {};
+ struct bengali_tag {};
+ struct bopomofo_tag {};
+ struct braille_tag {};
+ struct buginese_tag {};
+ struct buhid_tag {};
+ struct canadian_aboriginal_tag {};
+ struct carian_tag {};
+ struct cham_tag {};
+ struct cherokee_tag {};
+ struct coptic_tag {};
+ struct cypriot_tag {};
+ struct cyrillic_tag {};
+ struct devanagari_tag {};
+ struct deseret_tag {};
+ struct egyptian_hieroglyphs_tag {};
+ struct ethiopic_tag {};
+ struct georgian_tag {};
+ struct glagolitic_tag {};
+ struct gothic_tag {};
+ struct greek_tag {};
+ struct gujarati_tag {};
+ struct gurmukhi_tag {};
+ struct hangul_tag {};
+ struct han_tag {};
+ struct hanunoo_tag {};
+ struct hebrew_tag {};
+ struct hiragana_tag {};
+ struct katakana_or_hiragana_tag {};
+ struct old_italic_tag {};
+ struct javanese_tag {};
+ struct kayah_li_tag {};
+ struct katakana_tag {};
+ struct kharoshthi_tag {};
+ struct khmer_tag {};
+ struct kannada_tag {};
+ struct kaithi_tag {};
+ struct tai_tham_tag {};
+ struct lao_tag {};
+ struct latin_tag {};
+ struct lepcha_tag {};
+ struct limbu_tag {};
+ struct linear_b_tag {};
+ struct lisu_tag {};
+ struct lycian_tag {};
+ struct lydian_tag {};
+ struct malayalam_tag {};
+ struct mongolian_tag {};
+ struct meetei_mayek_tag {};
+ struct myanmar_tag {};
+ struct nko_tag {};
+ struct ogham_tag {};
+ struct ol_chiki_tag {};
+ struct old_turkic_tag {};
+ struct oriya_tag {};
+ struct osmanya_tag {};
+ struct phags_pa_tag {};
+ struct inscriptional_pahlavi_tag {};
+ struct phoenician_tag {};
+ struct inscriptional_parthian_tag {};
+ struct rejang_tag {};
+ struct runic_tag {};
+ struct samaritan_tag {};
+ struct old_south_arabian_tag {};
+ struct saurashtra_tag {};
+ struct shavian_tag {};
+ struct sinhala_tag {};
+ struct sundanese_tag {};
+ struct syloti_nagri_tag {};
+ struct syriac_tag {};
+ struct tagbanwa_tag {};
+ struct tai_le_tag {};
+ struct new_tai_lue_tag {};
+ struct tamil_tag {};
+ struct tai_viet_tag {};
+ struct telugu_tag {};
+ struct tifinagh_tag {};
+ struct tagalog_tag {};
+ struct thaana_tag {};
+ struct thai_tag {};
+ struct tibetan_tag {};
+ struct ugaritic_tag {};
+ struct vai_tag {};
+ struct old_persian_tag {};
+ struct cuneiform_tag {};
+ struct yi_tag {};
+ struct inherited_tag {};
+ struct common_tag {};
+ struct unknown_tag {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ struct unicode_char_class_base
+ {
+ typedef char_encoding::unicode encoding;
+ typedef char_encoding::unicode::char_type char_type;
+
+#define BOOST_SPIRIT_X3_BASIC_CLASSIFY(name) \
+ template <typename Char> \
+ static bool \
+ is(name##_tag, Char ch) \
+ { \
+ return encoding::is ##name \
+ BOOST_PREVENT_MACRO_SUBSTITUTION \
+ (detail::cast_char<char_type>(ch)); \
+ } \
+ /***/
+
+#define BOOST_SPIRIT_X3_CLASSIFY(name) \
+ template <typename Char> \
+ static bool \
+ is(name##_tag, Char ch) \
+ { \
+ return encoding::is_##name \
+ BOOST_PREVENT_MACRO_SUBSTITUTION \
+ (detail::cast_char<char_type>(ch)); \
+ } \
+ /***/
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Major Categories
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(char)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(alnum)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(alpha)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(digit)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(xdigit)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(cntrl)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(graph)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(lower)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(print)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(punct)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(space)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(blank)
+ BOOST_SPIRIT_X3_BASIC_CLASSIFY(upper)
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Major Categories
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_CLASSIFY(letter)
+ BOOST_SPIRIT_X3_CLASSIFY(mark)
+ BOOST_SPIRIT_X3_CLASSIFY(number)
+ BOOST_SPIRIT_X3_CLASSIFY(separator)
+ BOOST_SPIRIT_X3_CLASSIFY(other)
+ BOOST_SPIRIT_X3_CLASSIFY(punctuation)
+ BOOST_SPIRIT_X3_CLASSIFY(symbol)
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode General Categories
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_CLASSIFY(uppercase_letter)
+ BOOST_SPIRIT_X3_CLASSIFY(lowercase_letter)
+ BOOST_SPIRIT_X3_CLASSIFY(titlecase_letter)
+ BOOST_SPIRIT_X3_CLASSIFY(modifier_letter)
+ BOOST_SPIRIT_X3_CLASSIFY(other_letter)
+
+ BOOST_SPIRIT_X3_CLASSIFY(nonspacing_mark)
+ BOOST_SPIRIT_X3_CLASSIFY(enclosing_mark)
+ BOOST_SPIRIT_X3_CLASSIFY(spacing_mark)
+
+ BOOST_SPIRIT_X3_CLASSIFY(decimal_number)
+ BOOST_SPIRIT_X3_CLASSIFY(letter_number)
+ BOOST_SPIRIT_X3_CLASSIFY(other_number)
+
+ BOOST_SPIRIT_X3_CLASSIFY(space_separator)
+ BOOST_SPIRIT_X3_CLASSIFY(line_separator)
+ BOOST_SPIRIT_X3_CLASSIFY(paragraph_separator)
+
+ BOOST_SPIRIT_X3_CLASSIFY(control)
+ BOOST_SPIRIT_X3_CLASSIFY(format)
+ BOOST_SPIRIT_X3_CLASSIFY(private_use)
+ BOOST_SPIRIT_X3_CLASSIFY(surrogate)
+ BOOST_SPIRIT_X3_CLASSIFY(unassigned)
+
+ BOOST_SPIRIT_X3_CLASSIFY(dash_punctuation)
+ BOOST_SPIRIT_X3_CLASSIFY(open_punctuation)
+ BOOST_SPIRIT_X3_CLASSIFY(close_punctuation)
+ BOOST_SPIRIT_X3_CLASSIFY(connector_punctuation)
+ BOOST_SPIRIT_X3_CLASSIFY(other_punctuation)
+ BOOST_SPIRIT_X3_CLASSIFY(initial_punctuation)
+ BOOST_SPIRIT_X3_CLASSIFY(final_punctuation)
+
+ BOOST_SPIRIT_X3_CLASSIFY(math_symbol)
+ BOOST_SPIRIT_X3_CLASSIFY(currency_symbol)
+ BOOST_SPIRIT_X3_CLASSIFY(modifier_symbol)
+ BOOST_SPIRIT_X3_CLASSIFY(other_symbol)
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Derived Categories
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_CLASSIFY(alphabetic)
+ BOOST_SPIRIT_X3_CLASSIFY(uppercase)
+ BOOST_SPIRIT_X3_CLASSIFY(lowercase)
+ BOOST_SPIRIT_X3_CLASSIFY(white_space)
+ BOOST_SPIRIT_X3_CLASSIFY(hex_digit)
+ BOOST_SPIRIT_X3_CLASSIFY(noncharacter_code_point)
+ BOOST_SPIRIT_X3_CLASSIFY(default_ignorable_code_point)
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Scripts
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_CLASSIFY(arabic)
+ BOOST_SPIRIT_X3_CLASSIFY(imperial_aramaic)
+ BOOST_SPIRIT_X3_CLASSIFY(armenian)
+ BOOST_SPIRIT_X3_CLASSIFY(avestan)
+ BOOST_SPIRIT_X3_CLASSIFY(balinese)
+ BOOST_SPIRIT_X3_CLASSIFY(bamum)
+ BOOST_SPIRIT_X3_CLASSIFY(bengali)
+ BOOST_SPIRIT_X3_CLASSIFY(bopomofo)
+ BOOST_SPIRIT_X3_CLASSIFY(braille)
+ BOOST_SPIRIT_X3_CLASSIFY(buginese)
+ BOOST_SPIRIT_X3_CLASSIFY(buhid)
+ BOOST_SPIRIT_X3_CLASSIFY(canadian_aboriginal)
+ BOOST_SPIRIT_X3_CLASSIFY(carian)
+ BOOST_SPIRIT_X3_CLASSIFY(cham)
+ BOOST_SPIRIT_X3_CLASSIFY(cherokee)
+ BOOST_SPIRIT_X3_CLASSIFY(coptic)
+ BOOST_SPIRIT_X3_CLASSIFY(cypriot)
+ BOOST_SPIRIT_X3_CLASSIFY(cyrillic)
+ BOOST_SPIRIT_X3_CLASSIFY(devanagari)
+ BOOST_SPIRIT_X3_CLASSIFY(deseret)
+ BOOST_SPIRIT_X3_CLASSIFY(egyptian_hieroglyphs)
+ BOOST_SPIRIT_X3_CLASSIFY(ethiopic)
+ BOOST_SPIRIT_X3_CLASSIFY(georgian)
+ BOOST_SPIRIT_X3_CLASSIFY(glagolitic)
+ BOOST_SPIRIT_X3_CLASSIFY(gothic)
+ BOOST_SPIRIT_X3_CLASSIFY(greek)
+ BOOST_SPIRIT_X3_CLASSIFY(gujarati)
+ BOOST_SPIRIT_X3_CLASSIFY(gurmukhi)
+ BOOST_SPIRIT_X3_CLASSIFY(hangul)
+ BOOST_SPIRIT_X3_CLASSIFY(han)
+ BOOST_SPIRIT_X3_CLASSIFY(hanunoo)
+ BOOST_SPIRIT_X3_CLASSIFY(hebrew)
+ BOOST_SPIRIT_X3_CLASSIFY(hiragana)
+ BOOST_SPIRIT_X3_CLASSIFY(katakana_or_hiragana)
+ BOOST_SPIRIT_X3_CLASSIFY(old_italic)
+ BOOST_SPIRIT_X3_CLASSIFY(javanese)
+ BOOST_SPIRIT_X3_CLASSIFY(kayah_li)
+ BOOST_SPIRIT_X3_CLASSIFY(katakana)
+ BOOST_SPIRIT_X3_CLASSIFY(kharoshthi)
+ BOOST_SPIRIT_X3_CLASSIFY(khmer)
+ BOOST_SPIRIT_X3_CLASSIFY(kannada)
+ BOOST_SPIRIT_X3_CLASSIFY(kaithi)
+ BOOST_SPIRIT_X3_CLASSIFY(tai_tham)
+ BOOST_SPIRIT_X3_CLASSIFY(lao)
+ BOOST_SPIRIT_X3_CLASSIFY(latin)
+ BOOST_SPIRIT_X3_CLASSIFY(lepcha)
+ BOOST_SPIRIT_X3_CLASSIFY(limbu)
+ BOOST_SPIRIT_X3_CLASSIFY(linear_b)
+ BOOST_SPIRIT_X3_CLASSIFY(lisu)
+ BOOST_SPIRIT_X3_CLASSIFY(lycian)
+ BOOST_SPIRIT_X3_CLASSIFY(lydian)
+ BOOST_SPIRIT_X3_CLASSIFY(malayalam)
+ BOOST_SPIRIT_X3_CLASSIFY(mongolian)
+ BOOST_SPIRIT_X3_CLASSIFY(meetei_mayek)
+ BOOST_SPIRIT_X3_CLASSIFY(myanmar)
+ BOOST_SPIRIT_X3_CLASSIFY(nko)
+ BOOST_SPIRIT_X3_CLASSIFY(ogham)
+ BOOST_SPIRIT_X3_CLASSIFY(ol_chiki)
+ BOOST_SPIRIT_X3_CLASSIFY(old_turkic)
+ BOOST_SPIRIT_X3_CLASSIFY(oriya)
+ BOOST_SPIRIT_X3_CLASSIFY(osmanya)
+ BOOST_SPIRIT_X3_CLASSIFY(phags_pa)
+ BOOST_SPIRIT_X3_CLASSIFY(inscriptional_pahlavi)
+ BOOST_SPIRIT_X3_CLASSIFY(phoenician)
+ BOOST_SPIRIT_X3_CLASSIFY(inscriptional_parthian)
+ BOOST_SPIRIT_X3_CLASSIFY(rejang)
+ BOOST_SPIRIT_X3_CLASSIFY(runic)
+ BOOST_SPIRIT_X3_CLASSIFY(samaritan)
+ BOOST_SPIRIT_X3_CLASSIFY(old_south_arabian)
+ BOOST_SPIRIT_X3_CLASSIFY(saurashtra)
+ BOOST_SPIRIT_X3_CLASSIFY(shavian)
+ BOOST_SPIRIT_X3_CLASSIFY(sinhala)
+ BOOST_SPIRIT_X3_CLASSIFY(sundanese)
+ BOOST_SPIRIT_X3_CLASSIFY(syloti_nagri)
+ BOOST_SPIRIT_X3_CLASSIFY(syriac)
+ BOOST_SPIRIT_X3_CLASSIFY(tagbanwa)
+ BOOST_SPIRIT_X3_CLASSIFY(tai_le)
+ BOOST_SPIRIT_X3_CLASSIFY(new_tai_lue)
+ BOOST_SPIRIT_X3_CLASSIFY(tamil)
+ BOOST_SPIRIT_X3_CLASSIFY(tai_viet)
+ BOOST_SPIRIT_X3_CLASSIFY(telugu)
+ BOOST_SPIRIT_X3_CLASSIFY(tifinagh)
+ BOOST_SPIRIT_X3_CLASSIFY(tagalog)
+ BOOST_SPIRIT_X3_CLASSIFY(thaana)
+ BOOST_SPIRIT_X3_CLASSIFY(thai)
+ BOOST_SPIRIT_X3_CLASSIFY(tibetan)
+ BOOST_SPIRIT_X3_CLASSIFY(ugaritic)
+ BOOST_SPIRIT_X3_CLASSIFY(vai)
+ BOOST_SPIRIT_X3_CLASSIFY(old_persian)
+ BOOST_SPIRIT_X3_CLASSIFY(cuneiform)
+ BOOST_SPIRIT_X3_CLASSIFY(yi)
+ BOOST_SPIRIT_X3_CLASSIFY(inherited)
+ BOOST_SPIRIT_X3_CLASSIFY(common)
+ BOOST_SPIRIT_X3_CLASSIFY(unknown)
+
+#undef BOOST_SPIRIT_X3_BASIC_CLASSIFY
+#undef BOOST_SPIRIT_X3_CLASSIFY
+ };
+
+ template <typename Tag>
+ struct unicode_char_class
+ : char_parser<unicode_char_class<Tag>>
+ {
+ typedef char_encoding::unicode encoding;
+ typedef Tag tag;
+ typedef typename encoding::char_type char_type;
+ typedef char_type attribute_type;
+ static bool const has_attribute = true;
+
+ template <typename Char, typename Context>
+ bool test(Char ch, Context const&) const
+ {
+ return ((sizeof(Char) <= sizeof(char_type)) || encoding::ischar(ch))
+ && unicode_char_class_base::is(tag(), ch);
+ }
+ };
+
+#define BOOST_SPIRIT_X3_CHAR_CLASS(name) \
+ typedef unicode_char_class<name##_tag> name##_type; \
+ name##_type const name = name##_type(); \
+ /***/
+
+ namespace unicode
+ {
+ typedef any_char<char_encoding::unicode> char_type;
+ char_type const char_ = char_type();
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Major Categories
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_CHAR_CLASS(alnum)
+ BOOST_SPIRIT_X3_CHAR_CLASS(alpha)
+ BOOST_SPIRIT_X3_CHAR_CLASS(digit)
+ BOOST_SPIRIT_X3_CHAR_CLASS(xdigit)
+ BOOST_SPIRIT_X3_CHAR_CLASS(cntrl)
+ BOOST_SPIRIT_X3_CHAR_CLASS(graph)
+ BOOST_SPIRIT_X3_CHAR_CLASS(lower)
+ BOOST_SPIRIT_X3_CHAR_CLASS(print)
+ BOOST_SPIRIT_X3_CHAR_CLASS(punct)
+ BOOST_SPIRIT_X3_CHAR_CLASS(space)
+ BOOST_SPIRIT_X3_CHAR_CLASS(blank)
+ BOOST_SPIRIT_X3_CHAR_CLASS(upper)
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Major Categories
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_CHAR_CLASS(letter)
+ BOOST_SPIRIT_X3_CHAR_CLASS(mark)
+ BOOST_SPIRIT_X3_CHAR_CLASS(number)
+ BOOST_SPIRIT_X3_CHAR_CLASS(separator)
+ BOOST_SPIRIT_X3_CHAR_CLASS(other)
+ BOOST_SPIRIT_X3_CHAR_CLASS(punctuation)
+ BOOST_SPIRIT_X3_CHAR_CLASS(symbol)
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode General Categories
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_CHAR_CLASS(uppercase_letter)
+ BOOST_SPIRIT_X3_CHAR_CLASS(lowercase_letter)
+ BOOST_SPIRIT_X3_CHAR_CLASS(titlecase_letter)
+ BOOST_SPIRIT_X3_CHAR_CLASS(modifier_letter)
+ BOOST_SPIRIT_X3_CHAR_CLASS(other_letter)
+
+ BOOST_SPIRIT_X3_CHAR_CLASS(nonspacing_mark)
+ BOOST_SPIRIT_X3_CHAR_CLASS(enclosing_mark)
+ BOOST_SPIRIT_X3_CHAR_CLASS(spacing_mark)
+
+ BOOST_SPIRIT_X3_CHAR_CLASS(decimal_number)
+ BOOST_SPIRIT_X3_CHAR_CLASS(letter_number)
+ BOOST_SPIRIT_X3_CHAR_CLASS(other_number)
+
+ BOOST_SPIRIT_X3_CHAR_CLASS(space_separator)
+ BOOST_SPIRIT_X3_CHAR_CLASS(line_separator)
+ BOOST_SPIRIT_X3_CHAR_CLASS(paragraph_separator)
+
+ BOOST_SPIRIT_X3_CHAR_CLASS(control)
+ BOOST_SPIRIT_X3_CHAR_CLASS(format)
+ BOOST_SPIRIT_X3_CHAR_CLASS(private_use)
+ BOOST_SPIRIT_X3_CHAR_CLASS(surrogate)
+ BOOST_SPIRIT_X3_CHAR_CLASS(unassigned)
+
+ BOOST_SPIRIT_X3_CHAR_CLASS(dash_punctuation)
+ BOOST_SPIRIT_X3_CHAR_CLASS(open_punctuation)
+ BOOST_SPIRIT_X3_CHAR_CLASS(close_punctuation)
+ BOOST_SPIRIT_X3_CHAR_CLASS(connector_punctuation)
+ BOOST_SPIRIT_X3_CHAR_CLASS(other_punctuation)
+ BOOST_SPIRIT_X3_CHAR_CLASS(initial_punctuation)
+ BOOST_SPIRIT_X3_CHAR_CLASS(final_punctuation)
+
+ BOOST_SPIRIT_X3_CHAR_CLASS(math_symbol)
+ BOOST_SPIRIT_X3_CHAR_CLASS(currency_symbol)
+ BOOST_SPIRIT_X3_CHAR_CLASS(modifier_symbol)
+ BOOST_SPIRIT_X3_CHAR_CLASS(other_symbol)
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Derived Categories
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_CHAR_CLASS(alphabetic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(uppercase)
+ BOOST_SPIRIT_X3_CHAR_CLASS(lowercase)
+ BOOST_SPIRIT_X3_CHAR_CLASS(white_space)
+ BOOST_SPIRIT_X3_CHAR_CLASS(hex_digit)
+ BOOST_SPIRIT_X3_CHAR_CLASS(noncharacter_code_point)
+ BOOST_SPIRIT_X3_CHAR_CLASS(default_ignorable_code_point)
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Unicode Scripts
+ ///////////////////////////////////////////////////////////////////////////
+ BOOST_SPIRIT_X3_CHAR_CLASS(arabic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(imperial_aramaic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(armenian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(avestan)
+ BOOST_SPIRIT_X3_CHAR_CLASS(balinese)
+ BOOST_SPIRIT_X3_CHAR_CLASS(bamum)
+ BOOST_SPIRIT_X3_CHAR_CLASS(bengali)
+ BOOST_SPIRIT_X3_CHAR_CLASS(bopomofo)
+ BOOST_SPIRIT_X3_CHAR_CLASS(braille)
+ BOOST_SPIRIT_X3_CHAR_CLASS(buginese)
+ BOOST_SPIRIT_X3_CHAR_CLASS(buhid)
+ BOOST_SPIRIT_X3_CHAR_CLASS(canadian_aboriginal)
+ BOOST_SPIRIT_X3_CHAR_CLASS(carian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(cham)
+ BOOST_SPIRIT_X3_CHAR_CLASS(cherokee)
+ BOOST_SPIRIT_X3_CHAR_CLASS(coptic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(cypriot)
+ BOOST_SPIRIT_X3_CHAR_CLASS(cyrillic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(devanagari)
+ BOOST_SPIRIT_X3_CHAR_CLASS(deseret)
+ BOOST_SPIRIT_X3_CHAR_CLASS(egyptian_hieroglyphs)
+ BOOST_SPIRIT_X3_CHAR_CLASS(ethiopic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(georgian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(glagolitic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(gothic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(greek)
+ BOOST_SPIRIT_X3_CHAR_CLASS(gujarati)
+ BOOST_SPIRIT_X3_CHAR_CLASS(gurmukhi)
+ BOOST_SPIRIT_X3_CHAR_CLASS(hangul)
+ BOOST_SPIRIT_X3_CHAR_CLASS(han)
+ BOOST_SPIRIT_X3_CHAR_CLASS(hanunoo)
+ BOOST_SPIRIT_X3_CHAR_CLASS(hebrew)
+ BOOST_SPIRIT_X3_CHAR_CLASS(hiragana)
+ BOOST_SPIRIT_X3_CHAR_CLASS(katakana_or_hiragana)
+ BOOST_SPIRIT_X3_CHAR_CLASS(old_italic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(javanese)
+ BOOST_SPIRIT_X3_CHAR_CLASS(kayah_li)
+ BOOST_SPIRIT_X3_CHAR_CLASS(katakana)
+ BOOST_SPIRIT_X3_CHAR_CLASS(kharoshthi)
+ BOOST_SPIRIT_X3_CHAR_CLASS(khmer)
+ BOOST_SPIRIT_X3_CHAR_CLASS(kannada)
+ BOOST_SPIRIT_X3_CHAR_CLASS(kaithi)
+ BOOST_SPIRIT_X3_CHAR_CLASS(tai_tham)
+ BOOST_SPIRIT_X3_CHAR_CLASS(lao)
+ BOOST_SPIRIT_X3_CHAR_CLASS(latin)
+ BOOST_SPIRIT_X3_CHAR_CLASS(lepcha)
+ BOOST_SPIRIT_X3_CHAR_CLASS(limbu)
+ BOOST_SPIRIT_X3_CHAR_CLASS(linear_b)
+ BOOST_SPIRIT_X3_CHAR_CLASS(lisu)
+ BOOST_SPIRIT_X3_CHAR_CLASS(lycian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(lydian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(malayalam)
+ BOOST_SPIRIT_X3_CHAR_CLASS(mongolian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(meetei_mayek)
+ BOOST_SPIRIT_X3_CHAR_CLASS(myanmar)
+ BOOST_SPIRIT_X3_CHAR_CLASS(nko)
+ BOOST_SPIRIT_X3_CHAR_CLASS(ogham)
+ BOOST_SPIRIT_X3_CHAR_CLASS(ol_chiki)
+ BOOST_SPIRIT_X3_CHAR_CLASS(old_turkic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(oriya)
+ BOOST_SPIRIT_X3_CHAR_CLASS(osmanya)
+ BOOST_SPIRIT_X3_CHAR_CLASS(phags_pa)
+ BOOST_SPIRIT_X3_CHAR_CLASS(inscriptional_pahlavi)
+ BOOST_SPIRIT_X3_CHAR_CLASS(phoenician)
+ BOOST_SPIRIT_X3_CHAR_CLASS(inscriptional_parthian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(rejang)
+ BOOST_SPIRIT_X3_CHAR_CLASS(runic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(samaritan)
+ BOOST_SPIRIT_X3_CHAR_CLASS(old_south_arabian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(saurashtra)
+ BOOST_SPIRIT_X3_CHAR_CLASS(shavian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(sinhala)
+ BOOST_SPIRIT_X3_CHAR_CLASS(sundanese)
+ BOOST_SPIRIT_X3_CHAR_CLASS(syloti_nagri)
+ BOOST_SPIRIT_X3_CHAR_CLASS(syriac)
+ BOOST_SPIRIT_X3_CHAR_CLASS(tagbanwa)
+ BOOST_SPIRIT_X3_CHAR_CLASS(tai_le)
+ BOOST_SPIRIT_X3_CHAR_CLASS(new_tai_lue)
+ BOOST_SPIRIT_X3_CHAR_CLASS(tamil)
+ BOOST_SPIRIT_X3_CHAR_CLASS(tai_viet)
+ BOOST_SPIRIT_X3_CHAR_CLASS(telugu)
+ BOOST_SPIRIT_X3_CHAR_CLASS(tifinagh)
+ BOOST_SPIRIT_X3_CHAR_CLASS(tagalog)
+ BOOST_SPIRIT_X3_CHAR_CLASS(thaana)
+ BOOST_SPIRIT_X3_CHAR_CLASS(thai)
+ BOOST_SPIRIT_X3_CHAR_CLASS(tibetan)
+ BOOST_SPIRIT_X3_CHAR_CLASS(ugaritic)
+ BOOST_SPIRIT_X3_CHAR_CLASS(vai)
+ BOOST_SPIRIT_X3_CHAR_CLASS(old_persian)
+ BOOST_SPIRIT_X3_CHAR_CLASS(cuneiform)
+ BOOST_SPIRIT_X3_CHAR_CLASS(yi)
+ BOOST_SPIRIT_X3_CHAR_CLASS(inherited)
+ BOOST_SPIRIT_X3_CHAR_CLASS(common)
+ BOOST_SPIRIT_X3_CHAR_CLASS(unknown)
+ }
+
+#undef BOOST_SPIRIT_X3_CHAR_CLASS
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/core.hpp b/3party/boost/boost/spirit/home/x3/core.hpp
new file mode 100644
index 0000000000..a4f875e38a
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/core.hpp
@@ -0,0 +1,20 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_CORE_APRIL_04_2012_0318PM)
+#define BOOST_SPIRIT_X3_CORE_APRIL_04_2012_0318PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parse.hpp>
+//~ #include <boost/spirit/home/x3/core/parse_attr.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/action.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/core/action.hpp b/3party/boost/boost/spirit/home/x3/core/action.hpp
new file mode 100644
index 0000000000..890933fff1
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/core/action.hpp
@@ -0,0 +1,120 @@
+/*=============================================================================
+ Copyright (arg) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_ACTION_JANUARY_07_2007_1128AM)
+#define SPIRIT_ACTION_JANUARY_07_2007_1128AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/make_attribute.hpp>
+#include <boost/spirit/home/x3/core/call.hpp>
+#include <boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ struct raw_attribute_type;
+ struct parse_pass_context_tag;
+
+ template <typename Context>
+ inline bool& _pass(Context const& context)
+ {
+ return x3::get<parse_pass_context_tag>(context);
+ }
+
+ template <typename Subject, typename Action>
+ struct action : unary_parser<Subject, action<Subject, Action>>
+ {
+ typedef unary_parser<Subject, action<Subject, Action>> base_type;
+ static bool const is_pass_through_unary = true;
+ static bool const has_action = true;
+
+ action(Subject const& subject, Action f)
+ : base_type(subject), f(f) {}
+
+ template <typename Iterator, typename Context, typename RuleContext, typename Attribute>
+ bool call_action(
+ Iterator& first, Iterator const& last
+ , Context const& context, RuleContext& rcontext, Attribute& attr) const
+ {
+ bool pass = true;
+ auto action_context = make_context<parse_pass_context_tag>(pass, context);
+ call(f, first, last, action_context, rcontext, attr);
+ return pass;
+ }
+
+ template <typename Iterator, typename Context
+ , typename RuleContext, typename Attribute>
+ bool parse_main(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext& rcontext, Attribute& attr) const
+ {
+ Iterator save = first;
+ if (this->subject.parse(first, last, context, rcontext, attr))
+ {
+ if (call_action(first, last, context, rcontext, attr))
+ return true;
+
+ // reset iterators if semantic action failed the match
+ // retrospectively
+ first = save;
+ }
+ return false;
+ }
+
+ // attr==raw_attribute_type, action wants iterator_range (see raw.hpp)
+ template <typename Iterator, typename Context, typename RuleContext>
+ bool parse_main(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext& rcontext, raw_attribute_type&) const
+ {
+ boost::iterator_range<Iterator> rng;
+ // synthesize the attribute since one is not supplied
+ return parse_main(first, last, context, rcontext, rng);
+ }
+
+ // attr==unused, action wants attribute
+ template <typename Iterator, typename Context, typename RuleContext>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext& rcontext, unused_type) const
+ {
+ typedef typename
+ traits::attribute_of<action<Subject, Action>, Context>::type
+ attribute_type;
+ typedef traits::make_attribute<attribute_type, unused_type> make_attribute;
+ typedef traits::transform_attribute<
+ typename make_attribute::type, attribute_type, parser_id>
+ transform;
+
+ // synthesize the attribute since one is not supplied
+ typename make_attribute::type made_attr = make_attribute::call(unused_type());
+ typename transform::type attr = transform::pre(made_attr);
+ return parse_main(first, last, context, rcontext, attr);
+ }
+
+ // main parse function
+ template <typename Iterator, typename Context
+ , typename RuleContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext& rcontext, Attribute& attr) const
+ {
+ return parse_main(first, last, context, rcontext, attr);
+ }
+
+ Action f;
+ };
+
+ template <typename P, typename Action>
+ inline action<typename extension::as_parser<P>::value_type, Action>
+ operator/(P const& p, Action f)
+ {
+ return {as_parser(p), f};
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/core/call.hpp b/3party/boost/boost/spirit/home/x3/core/call.hpp
new file mode 100644
index 0000000000..a4139751df
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/core/call.hpp
@@ -0,0 +1,79 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_CALL_CONTEXT_MAY_26_2014_0234PM)
+#define SPIRIT_CALL_CONTEXT_MAY_26_2014_0234PM
+
+#include <type_traits>
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/utility/is_callable.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ////////////////////////////////////////////////////////////////////////////
+ struct rule_val_context_tag;
+
+ template <typename Context>
+ inline auto _val(Context const& context)
+ -> decltype(x3::get<rule_val_context_tag>(context))
+ {
+ return x3::get<rule_val_context_tag>(context);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ struct where_context_tag;
+
+ template <typename Context>
+ inline auto _where(Context const& context)
+ -> decltype(x3::get<where_context_tag>(context))
+ {
+ return x3::get<where_context_tag>(context);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ struct attr_context_tag;
+
+ template <typename Context>
+ inline auto _attr(Context const& context)
+ -> decltype(x3::get<attr_context_tag>(context))
+ {
+ return x3::get<attr_context_tag>(context);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ namespace detail
+ {
+ template <typename F, typename Context>
+ auto call(F f, Context const& context, mpl::true_)
+ {
+ return f(context);
+ }
+
+ template <typename F, typename Context>
+ auto call(F f, Context const& context, mpl::false_)
+ {
+ return f();
+ }
+ }
+
+ template <
+ typename F, typename Iterator
+ , typename Context, typename RuleContext, typename Attribute>
+ auto call(
+ F f, Iterator& first, Iterator const& last
+ , Context const& context, RuleContext& rcontext, Attribute& attr)
+ {
+ boost::iterator_range<Iterator> rng(first, last);
+ auto val_context = make_context<rule_val_context_tag>(rcontext, context);
+ auto where_context = make_context<where_context_tag>(rng, val_context);
+ auto attr_context = make_context<attr_context_tag>(attr, where_context);
+ return detail::call(f, attr_context, is_callable<F(decltype(attr_context) const&)>());
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/core/detail/parse_into_container.hpp b/3party/boost/boost/spirit/home/x3/core/detail/parse_into_container.hpp
new file mode 100644
index 0000000000..4b19115a67
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/core/detail/parse_into_container.hpp
@@ -0,0 +1,248 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_PARSE_INTO_CONTAINER_JAN_15_2013_0957PM)
+#define SPIRIT_PARSE_INTO_CONTAINER_JAN_15_2013_0957PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <type_traits>
+
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/value_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/handles_container.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/is_substitute.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/fusion/include/front.hpp>
+#include <boost/fusion/include/back.hpp>
+#include <boost/variant/apply_visitor.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+ template <typename Attribute, typename Value>
+ struct saver_visitor;
+
+ // save to associative fusion container where Key is simple type
+ template <typename Key, typename Enable = void>
+ struct save_to_assoc_attr
+ {
+ template <typename Value, typename Attribute>
+ static void call(const Key, Value& value, Attribute& attr)
+ {
+ traits::move_to(value, fusion::at_key<Key>(attr));
+ }
+ };
+
+
+ // save to associative fusion container where Key
+ // is variant over possible keys
+ template <typename ...T>
+ struct save_to_assoc_attr<variant<T...> >
+ {
+ typedef variant<T...> variant_t;
+
+ template <typename Value, typename Attribute>
+ static void call(const variant_t key, Value& value, Attribute& attr)
+ {
+ apply_visitor(saver_visitor<Attribute, Value>(attr, value), key);
+ }
+ };
+
+ template <typename Attribute, typename Value>
+ struct saver_visitor : boost::static_visitor<void>
+ {
+ saver_visitor(Attribute& attr, Value& value)
+ : attr(attr), value(value) {};
+
+ Attribute& attr;
+ Value& value;
+
+ template <typename Key>
+ void operator()(Key) const
+ {
+ save_to_assoc_attr<Key>::call(Key(), value,attr);
+ }
+ };
+
+
+ template <typename Parser>
+ struct parse_into_container_base_impl
+ {
+ private:
+
+ // Parser has attribute (synthesize; Attribute is a container)
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ static bool call_synthesize(
+ Parser const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr)
+ {
+ // synthesized attribute needs to be value initialized
+ typedef typename
+ traits::container_value<Attribute>::type
+ value_type;
+ value_type val = traits::value_initialize<value_type>::call();
+
+ if (!parser.parse(first, last, context, rcontext, val))
+ return false;
+
+ // push the parsed value into our attribute
+ traits::push_back(attr, val);
+ return true;
+ }
+
+ // Parser has attribute (synthesize; Attribute is a single element fusion sequence)
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ static bool call_synthesize_into_fusion_seq(Parser const& parser
+ , Iterator& first, Iterator const& last, Context const& context
+ , RContext& rcontext, Attribute& attr, mpl::false_ /* is_associative */)
+ {
+ static_assert(traits::has_size<Attribute, 1>::value,
+ "Expecting a single element fusion sequence");
+ return call_synthesize(parser, first, last, context, rcontext,
+ fusion::front(attr));
+ }
+
+ // Parser has attribute (synthesize; Attribute is fusion map sequence)
+ template <typename Iterator, typename Context, typename RContext, typename Attribute>
+ static bool call_synthesize_into_fusion_seq(
+ Parser const& parser
+ , Iterator& first, Iterator const& last, Context const& context
+ , RContext& rcontext, Attribute& attr, mpl::true_ /*is_associative*/)
+ {
+ using attribute_type = typename traits::attribute_of<Parser, Context>::type;
+ static_assert(traits::has_size<attribute_type, 2>::value,
+ "To parse directly into fusion map parser must produce 2 element attr");
+
+ // use type of first element of attribute as key
+ using key = typename std::remove_reference<
+ typename fusion::result_of::front<attribute_type>::type>::type;
+
+ attribute_type attr_;
+ if (!parser.parse(first, last, context, rcontext, attr_))
+ return false;
+
+ save_to_assoc_attr<key>::call(fusion::front(attr_), fusion::back(attr_), attr);
+ return true;
+ }
+
+ template <typename Iterator, typename Context, typename RContext, typename Attribute>
+ static bool call_synthesize_dispatch_by_seq(Parser const& parser
+ , Iterator& first, Iterator const& last, Context const& context
+ , RContext& rcontext, Attribute& attr, mpl::true_ /*is_sequence*/)
+ {
+ return call_synthesize_into_fusion_seq(
+ parser, first, last, context, rcontext, attr
+ , fusion::traits::is_associative<Attribute>());
+ }
+
+ template <typename Iterator, typename Context, typename RContext, typename Attribute>
+ static bool call_synthesize_dispatch_by_seq(Parser const& parser
+ , Iterator& first, Iterator const& last, Context const& context
+ , RContext& rcontext, Attribute& attr, mpl::false_ /*is_sequence*/)
+ {
+ return call_synthesize(parser, first, last, context, rcontext, attr);
+ }
+
+ // Parser has attribute (synthesize)
+ template <typename Iterator, typename Context, typename RContext, typename Attribute>
+ static bool call(Parser const& parser
+ , Iterator& first, Iterator const& last, Context const& context
+ , RContext& rcontext, Attribute& attr, mpl::true_)
+ {
+ return call_synthesize_dispatch_by_seq(parser, first, last, context, rcontext, attr
+ , fusion::traits::is_sequence<Attribute>());
+ }
+
+ // Parser has no attribute (pass unused)
+ template <typename Iterator, typename Context, typename RContext, typename Attribute>
+ static bool call(
+ Parser const& parser
+ , Iterator& first, Iterator const& last, Context const& context
+ , RContext& rcontext, Attribute& attr, mpl::false_)
+ {
+ return parser.parse(first, last, context, rcontext, unused);
+ }
+
+
+ public:
+
+ template <typename Iterator, typename Context, typename RContext, typename Attribute>
+ static bool call(Parser const& parser
+ , Iterator& first, Iterator const& last, Context const& context
+ , RContext& rcontext, Attribute& attr)
+ {
+ return call(parser, first, last, context, rcontext, attr
+ , mpl::bool_<traits::has_attribute<Parser, Context>::value>());
+ }
+ };
+
+ template <typename Parser, typename Context, typename RContext, typename Enable = void>
+ struct parse_into_container_impl : parse_into_container_base_impl<Parser> {};
+
+ template <typename Parser, typename Container, typename RContext, typename Context>
+ struct parser_attr_is_substitute_for_container_value
+ : traits::is_substitute<
+ typename traits::attribute_of<Parser, Context>::type
+ , typename traits::container_value<Container>::type
+ >
+ {};
+
+ template <typename Parser, typename Context, typename RContext>
+ struct parse_into_container_impl<Parser, Context, RContext,
+ typename enable_if<traits::handles_container<Parser, Context>>::type>
+ {
+ template <typename Iterator, typename Attribute>
+ static bool call(
+ Parser const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr, mpl::true_)
+ {
+ return parse_into_container_base_impl<Parser>::call(
+ parser, first, last, context, rcontext, attr);
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool call(
+ Parser const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr, mpl::false_)
+ {
+ return parser.parse(first, last, context, rcontext, attr);
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool call(Parser const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr)
+ {
+ return call(parser, first, last, context, rcontext, attr,
+ parser_attr_is_substitute_for_container_value<
+ Parser, Attribute, Context, RContext>());
+ }
+ };
+
+ template <typename Parser, typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_into_container(
+ Parser const& parser
+ , Iterator& first, Iterator const& last, Context const& context
+ , RContext& rcontext, Attribute& attr)
+ {
+ return parse_into_container_impl<Parser, Context, RContext>::call(
+ parser, first, last, context, rcontext, attr);
+ }
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/core/parse.hpp b/3party/boost/boost/spirit/home/x3/core/parse.hpp
new file mode 100644
index 0000000000..ac36e3c7ea
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/core/parse.hpp
@@ -0,0 +1,190 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_PARSE_APRIL_16_2006_0442PM)
+#define BOOST_SPIRIT_X3_PARSE_APRIL_16_2006_0442PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/concept_check.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser, typename Attribute>
+ inline bool
+ parse_main(
+ Iterator& first
+ , Iterator last
+ , Parser const& p
+ , Attribute& attr)
+ {
+ // Make sure the iterator is at least a forward_iterator. If you got a
+ // compilation error here, then you are using an input_iterator while
+ // calling this function. You need to supply at least a forward_iterator
+ // instead.
+ BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+ // If you get an error no matching function for call to 'as_parser'
+ // here, then p is not a parser or there is no suitable conversion
+ // from p to a parser.
+ return as_parser(p).parse(first, last, unused, unused, attr);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser, typename Attribute>
+ inline bool
+ parse(
+ Iterator& first
+ , Iterator last
+ , Parser const& p
+ , Attribute& attr)
+ {
+ return parse_main(first, last, p, attr);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser, typename Attribute>
+ inline bool
+ parse(
+ Iterator const& first_
+ , Iterator last
+ , Parser const& p
+ , Attribute& attr)
+ {
+ Iterator first = first_;
+ return parse_main(first, last, p, attr);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser>
+ inline bool
+ parse(
+ Iterator& first
+ , Iterator last
+ , Parser const& p)
+ {
+ return parse_main(first, last, p, unused);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser>
+ inline bool
+ parse(
+ Iterator const& first_
+ , Iterator last
+ , Parser const& p)
+ {
+ Iterator first = first_;
+ return parse_main(first, last, p, unused);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ enum class skip_flag
+ {
+ post_skip, // force post-skipping in phrase_parse()
+ dont_post_skip // inhibit post-skipping in phrase_parse()
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser, typename Skipper, typename Attribute>
+ inline bool
+ phrase_parse_main(
+ Iterator& first
+ , Iterator last
+ , Parser const& p
+ , Skipper const& s
+ , Attribute& attr
+ , skip_flag post_skip = skip_flag::post_skip)
+ {
+ // Make sure the iterator is at least a forward_iterator. If you got a
+ // compilation error here, then you are using an input_iterator while
+ // calling this function. You need to supply at least a forward_iterator
+ // instead.
+ BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+ // If you get an error no matching function for call to 'as_parser'
+ // here, for either p or s, then p or s is not a parser or there is
+ // no suitable conversion from p to a parser.
+ auto skipper_ctx = make_context<skipper_tag>(as_parser(s));
+ bool r = as_parser(p).parse(first, last, skipper_ctx, unused, attr);
+ if (post_skip == skip_flag::post_skip)
+ x3::skip_over(first, last, skipper_ctx);
+ return r;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser, typename Skipper, typename Attribute>
+ inline bool
+ phrase_parse(
+ Iterator& first
+ , Iterator last
+ , Parser const& p
+ , Skipper const& s
+ , Attribute& attr
+ , skip_flag post_skip = skip_flag::post_skip)
+ {
+ return phrase_parse_main(first, last, p, s, attr, post_skip);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser, typename Skipper, typename Attribute>
+ inline bool
+ phrase_parse(
+ Iterator const& first_
+ , Iterator last
+ , Parser const& p
+ , Skipper const& s
+ , Attribute& attr
+ , skip_flag post_skip = skip_flag::post_skip)
+ {
+ Iterator first = first_;
+ return phrase_parse_main(first, last, p, s, attr, post_skip);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser, typename Skipper>
+ inline bool
+ phrase_parse(
+ Iterator& first
+ , Iterator last
+ , Parser const& p
+ , Skipper const& s
+ , skip_flag post_skip = skip_flag::post_skip)
+ {
+ return phrase_parse_main(first, last, p, s, unused, post_skip);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Parser, typename Skipper>
+ inline bool
+ phrase_parse(
+ Iterator const& first_
+ , Iterator last
+ , Parser const& p
+ , Skipper const& s
+ , skip_flag post_skip = skip_flag::post_skip)
+ {
+ Iterator first = first_;
+ return phrase_parse_main(first, last, p, s, unused, post_skip);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Skipper>
+ struct phrase_parse_context
+ {
+ typedef decltype(
+ make_context<skipper_tag>(as_parser(std::declval<Skipper>())))
+ type;
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/core/parser.hpp b/3party/boost/boost/spirit/home/x3/core/parser.hpp
new file mode 100644
index 0000000000..bc63a7438b
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/core/parser.hpp
@@ -0,0 +1,239 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustin Berge
+
+ 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_SPIRIT_X3_PARSER_OCTOBER_16_2008_0254PM)
+#define BOOST_SPIRIT_X3_PARSER_OCTOBER_16_2008_0254PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+#include <string>
+
+#if !defined(BOOST_SPIRIT_X3_NO_RTTI)
+#include <typeinfo>
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+ using x3::unused_type;
+ using x3::unused;
+ using x3::get;
+
+ template <typename Subject, typename Action>
+ struct action;
+
+ template <typename Subject, typename Handler>
+ struct guard;
+
+ struct parser_base {};
+ struct parser_id;
+
+ template <typename Derived>
+ struct parser : parser_base
+ {
+ typedef Derived derived_type;
+ static bool const handles_container = false;
+ static bool const is_pass_through_unary = false;
+ static bool const has_action = false;
+
+ Derived const& derived() const
+ {
+ return *static_cast<Derived const*>(this);
+ }
+
+ template <typename Action>
+ action<Derived, Action>
+ operator[](Action f) const
+ {
+ return action<Derived, Action>(this->derived(), f);
+ }
+
+ template <typename Handler>
+ guard<Derived, Handler>
+ on_error(Handler f) const
+ {
+ return guard<Derived, Handler>(this->derived(), f);
+ }
+ };
+
+ struct unary_category;
+ struct binary_category;
+
+ template <typename Subject, typename Derived>
+ struct unary_parser : parser<Derived>
+ {
+ typedef unary_category category;
+ typedef Subject subject_type;
+ static bool const has_action = Subject::has_action;
+
+ unary_parser(Subject subject)
+ : subject(subject) {}
+
+ unary_parser const& get_unary() const { return *this; }
+
+ Subject subject;
+ };
+
+ template <typename Left, typename Right, typename Derived>
+ struct binary_parser : parser<Derived>
+ {
+ typedef binary_category category;
+ typedef Left left_type;
+ typedef Right right_type;
+ static bool const has_action =
+ left_type::has_action || right_type::has_action;
+
+ binary_parser(Left left, Right right)
+ : left(left), right(right) {}
+
+ binary_parser const& get_binary() const { return *this; }
+
+ Left left;
+ Right right;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // as_parser: convert a type, T, into a parser.
+ ///////////////////////////////////////////////////////////////////////////
+ namespace extension
+ {
+ namespace detail
+ {
+ namespace as_parser_guard
+ {
+ void as_spirit_parser(...);
+
+ template<typename T, typename R =
+ decltype(as_spirit_parser(boost::declval<T const&>()))>
+ struct deduce_as_parser
+ {
+ typedef R type;
+ typedef typename
+ boost::remove_cv<
+ typename boost::remove_reference<R>::type
+ >::type
+ value_type;
+
+ static type call(T const& v)
+ {
+ return as_spirit_parser(v);
+ }
+ };
+ template<typename T>
+ struct deduce_as_parser<T, void>
+ {};
+ }
+ using as_parser_guard::deduce_as_parser;
+ }
+
+ template <typename T, typename Enable = void>
+ struct as_parser : detail::deduce_as_parser<T> {};
+
+ template <>
+ struct as_parser<unused_type>
+ {
+ typedef unused_type type;
+ typedef unused_type value_type;
+ static type call(unused_type)
+ {
+ return unused;
+ }
+ };
+
+ template <typename Derived>
+ struct as_parser<Derived
+ , typename enable_if<is_base_of<parser_base, Derived>>::type>
+ {
+ typedef Derived const& type;
+ typedef Derived value_type;
+ static type call(Derived const& p)
+ {
+ return p;
+ }
+ };
+
+ template <typename Derived>
+ struct as_parser<parser<Derived>>
+ {
+ typedef Derived const& type;
+ typedef Derived value_type;
+ static type call(parser<Derived> const& p)
+ {
+ return p.derived();
+ }
+ };
+ }
+
+ template <typename T>
+ inline typename extension::as_parser<T>::type
+ as_parser(T const& x)
+ {
+ return extension::as_parser<T>::call(x);
+ }
+
+ template <typename Derived>
+ inline Derived const&
+ as_parser(parser<Derived> const& p)
+ {
+ return p.derived();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // The main what function
+ //
+ // Note: unlike Spirit2, spirit parsers are no longer required to have a
+ // "what" member function. In X3, we specialize the get_info struct
+ // below where needed. If a specialization is not provided, the default
+ // below will be used. The default "what" result will be the typeid
+ // name of the parser if BOOST_SPIRIT_X3_NO_RTTI is not defined, otherwise
+ // "undefined"
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Parser, typename Enable = void>
+ struct get_info
+ {
+ typedef std::string result_type;
+ std::string operator()(Parser const&) const
+ {
+#if !defined(BOOST_SPIRIT_X3_NO_RTTI)
+ return typeid(Parser).name();
+#else
+ return "undefined";
+#endif
+ }
+ };
+
+ template <typename Parser>
+ std::string what(Parser const& p)
+ {
+ return get_info<Parser>()(p);
+ }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Subject, typename Derived, typename Context>
+ struct has_attribute<x3::unary_parser<Subject, Derived>, Context>
+ : has_attribute<Subject, Context> {};
+
+ template <typename Left, typename Right, typename Derived, typename Context>
+ struct has_attribute<x3::binary_parser<Left, Right, Derived>, Context>
+ : mpl::bool_<has_attribute<Left, Context>::value ||
+ has_attribute<Right, Context>::value> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/core/proxy.hpp b/3party/boost/boost/spirit/home/x3/core/proxy.hpp
new file mode 100644
index 0000000000..1a0ade59a8
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/core/proxy.hpp
@@ -0,0 +1,52 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_PROXY_FEBRUARY_1_2013_0211PM)
+#define BOOST_SPIRIT_X3_PROXY_FEBRUARY_1_2013_0211PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Subject, typename Derived>
+ struct proxy : unary_parser<Subject, Derived>
+ {
+ static bool const is_pass_through_unary = true;
+
+ proxy(Subject const& subject)
+ : unary_parser<Subject, Derived>(subject) {}
+
+ // Overload this when appropriate. The proxy parser will pick up
+ // the most derived overload.
+ template <typename Iterator, typename Context
+ , typename RuleContext, typename Attribute, typename Category>
+ bool parse_subject(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext& rcontext, Attribute& attr, Category) const
+ {
+ this->subject.parse(first, last, context, rcontext, attr);
+ return true;
+ }
+
+ // Main entry point.
+ template <typename Iterator, typename Context
+ , typename RuleContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RuleContext& rcontext, Attribute& attr) const
+ {
+ return this->derived().parse_subject(first, last, context, rcontext, attr
+ , typename traits::attribute_category<Attribute>::type());
+ }
+ };
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/core/skip_over.hpp b/3party/boost/boost/spirit/home/x3/core/skip_over.hpp
new file mode 100644
index 0000000000..643ddb1f5b
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/core/skip_over.hpp
@@ -0,0 +1,104 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_SKIP_APRIL_16_2006_0625PM)
+#define BOOST_SPIRIT_X3_SKIP_APRIL_16_2006_0625PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/declval.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Move the /first/ iterator to the first non-matching position
+ // given a skip-parser. The function is a no-op if unused_type or
+ // unused_skipper is passed as the skip-parser.
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Skipper>
+ struct unused_skipper : unused_type
+ {
+ unused_skipper(Skipper const& skipper)
+ : skipper(skipper) {}
+ Skipper const& skipper;
+ };
+
+ namespace detail
+ {
+ template <typename Skipper>
+ struct is_unused_skipper
+ : mpl::false_ {};
+
+ template <typename Skipper>
+ struct is_unused_skipper<unused_skipper<Skipper>>
+ : mpl::true_ {};
+
+ template <>
+ struct is_unused_skipper<unused_type>
+ : mpl::true_ {};
+
+ template <typename Skipper>
+ inline Skipper const&
+ get_unused_skipper(Skipper const& skipper)
+ {
+ return skipper;
+ }
+ template <typename Skipper>
+ inline Skipper const&
+ get_unused_skipper(unused_skipper<Skipper> const& unused_skipper)
+ {
+ return unused_skipper.skipper;
+ }
+
+ template <typename Iterator, typename Skipper>
+ inline void skip_over(
+ Iterator& first, Iterator const& last, Skipper const& skipper)
+ {
+ while (first != last && skipper.parse(first, last, unused, unused, unused))
+ /***/;
+ }
+
+ template <typename Iterator>
+ inline void skip_over(Iterator&, Iterator const&, unused_type)
+ {
+ }
+
+ template <typename Iterator, typename Skipper>
+ inline void skip_over(
+ Iterator&, Iterator const&, unused_skipper<Skipper> const&)
+ {
+ }
+ }
+
+ // this tag is used to find the skipper from the context
+ struct skipper_tag;
+
+ template <typename Context>
+ struct has_skipper
+ : mpl::not_<detail::is_unused_skipper<
+ typename remove_cv<typename remove_reference<
+ decltype(x3::get<skipper_tag>(boost::declval<Context>()))
+ >::type>::type
+ >> {};
+
+ template <typename Iterator, typename Context>
+ inline void skip_over(
+ Iterator& first, Iterator const& last, Context const& context)
+ {
+ detail::skip_over(first, last, x3::get<skipper_tag>(context));
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/directive.hpp b/3party/boost/boost/spirit/home/x3/directive.hpp
new file mode 100644
index 0000000000..81f7a8536a
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/directive.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_DIRECTIVE_FEBRUARY_05_2007_0313PM)
+#define BOOST_SPIRIT_X3_DIRECTIVE_FEBRUARY_05_2007_0313PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+//~ #include <boost/spirit/home/x3/directive/as.hpp>
+//~ #include <boost/spirit/home/x3/directive/encoding.hpp>
+//~ #include <boost/spirit/home/x3/directive/hold.hpp>
+#include <boost/spirit/home/x3/directive/expect.hpp>
+#include <boost/spirit/home/x3/directive/lexeme.hpp>
+#include <boost/spirit/home/x3/directive/no_skip.hpp>
+//~ #include <boost/spirit/home/x3/directive/matches.hpp>
+//~ #include <boost/spirit/home/x3/directive/no_case.hpp>
+#include <boost/spirit/home/x3/directive/omit.hpp>
+#include <boost/spirit/home/x3/directive/raw.hpp>
+//~ #include <boost/spirit/home/x3/directive/repeat.hpp>
+#include <boost/spirit/home/x3/directive/skip.hpp>
+#include <boost/spirit/home/x3/directive/with.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/directive/expect.hpp b/3party/boost/boost/spirit/home/x3/directive/expect.hpp
new file mode 100644
index 0000000000..4e59ce5dca
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/directive/expect.hpp
@@ -0,0 +1,80 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_EXPECT_MARCH_16_2012_1024PM)
+#define SPIRIT_EXPECT_MARCH_16_2012_1024PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/throw_exception.hpp>
+#include <stdexcept>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Iterator>
+ struct expectation_failure : std::runtime_error
+ {
+ public:
+
+ expectation_failure(Iterator where, std::string const& which)
+ : std::runtime_error("boost::spirit::x3::expectation_failure")
+ , where_(where), which_(which)
+ {}
+ ~expectation_failure() throw() {}
+
+ std::string which() const { return which_; }
+ Iterator const& where() const { return where_; }
+
+ private:
+
+ Iterator where_;
+ std::string which_;
+ };
+
+ template <typename Subject>
+ struct expect_directive : unary_parser<Subject, expect_directive<Subject>>
+ {
+ typedef unary_parser<Subject, expect_directive<Subject> > base_type;
+ static bool const is_pass_through_unary = true;
+
+ expect_directive(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ bool r = this->subject.parse(first, last, context, rcontext, attr);
+
+ if (!r)
+ {
+ boost::throw_exception(
+ expectation_failure<Iterator>(
+ first, what(this->subject)));
+ }
+ return r;
+ }
+ };
+
+ struct expect_gen
+ {
+ template <typename Subject>
+ expect_directive<typename extension::as_parser<Subject>::value_type>
+ operator[](Subject const& subject) const
+ {
+ return {as_parser(subject)};
+ }
+ };
+
+ expect_gen const expect = expect_gen();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/directive/lexeme.hpp b/3party/boost/boost/spirit/home/x3/directive/lexeme.hpp
new file mode 100644
index 0000000000..e5104272f9
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/directive/lexeme.hpp
@@ -0,0 +1,84 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_LEXEME_MARCH_24_2007_0802AM)
+#define SPIRIT_LEXEME_MARCH_24_2007_0802AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Subject>
+ struct lexeme_directive : unary_parser<Subject, lexeme_directive<Subject>>
+ {
+ typedef unary_parser<Subject, lexeme_directive<Subject> > base_type;
+ static bool const is_pass_through_unary = true;
+ static bool const handles_container = Subject::handles_container;
+
+ lexeme_directive(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ typename enable_if<has_skipper<Context>, bool>::type
+ parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ x3::skip_over(first, last, context);
+ auto const& skipper = x3::get<skipper_tag>(context);
+
+ typedef unused_skipper<
+ typename remove_reference<decltype(skipper)>::type>
+ unused_skipper_type;
+ unused_skipper_type unused_skipper(skipper);
+
+ return this->subject.parse(
+ first, last
+ , make_context<skipper_tag>(unused_skipper, context)
+ , rcontext
+ , attr);
+ }
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ typename disable_if<has_skipper<Context>, bool>::type
+ parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ // no need to pre-skip if skipper is unused
+ //- x3::skip_over(first, last, context);
+
+ return this->subject.parse(
+ first, last
+ , context
+ , rcontext
+ , attr);
+ }
+ };
+
+ struct lexeme_gen
+ {
+ template <typename Subject>
+ lexeme_directive<typename extension::as_parser<Subject>::value_type>
+ operator[](Subject const& subject) const
+ {
+ return {as_parser(subject)};
+ }
+ };
+
+ lexeme_gen const lexeme = lexeme_gen();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/directive/no_skip.hpp b/3party/boost/boost/spirit/home/x3/directive/no_skip.hpp
new file mode 100644
index 0000000000..14dee4d85c
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/directive/no_skip.hpp
@@ -0,0 +1,82 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2013 Agustin Berge
+
+ 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(SPIRIT_NO_SKIP_JAN_16_2010_0802PM)
+#define SPIRIT_NO_SKIP_JAN_16_2010_0802PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ // same as lexeme[], but does not pre-skip
+ template <typename Subject>
+ struct no_skip_directive : unary_parser<Subject, no_skip_directive<Subject>>
+ {
+ typedef unary_parser<Subject, no_skip_directive<Subject> > base_type;
+ static bool const is_pass_through_unary = true;
+ static bool const handles_container = Subject::handles_container;
+
+ no_skip_directive(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ typename enable_if<has_skipper<Context>, bool>::type
+ parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ auto const& skipper = x3::get<skipper_tag>(context);
+
+ typedef unused_skipper<
+ typename remove_reference<decltype(skipper)>::type>
+ unused_skipper_type;
+ unused_skipper_type unused_skipper(skipper);
+
+ return this->subject.parse(
+ first, last
+ , make_context<skipper_tag>(unused_skipper, context)
+ , rcontext
+ , attr);
+ }
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ typename disable_if<has_skipper<Context>, bool>::type
+ parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ return this->subject.parse(
+ first, last
+ , context
+ , rcontext
+ , attr);
+ }
+ };
+
+ struct no_skip_gen
+ {
+ template <typename Subject>
+ no_skip_directive<typename extension::as_parser<Subject>::value_type>
+ operator[](Subject const& subject) const
+ {
+ return {as_parser(subject)};
+ }
+ };
+
+ no_skip_gen const no_skip = no_skip_gen();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/directive/omit.hpp b/3party/boost/boost/spirit/home/x3/directive/omit.hpp
new file mode 100644
index 0000000000..43ebd49aaf
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/directive/omit.hpp
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_OMIT_MARCH_24_2007_0802AM)
+#define SPIRIT_OMIT_MARCH_24_2007_0802AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // omit_directive forces the attribute of subject parser
+ // to be unused_type
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Subject>
+ struct omit_directive : unary_parser<Subject, omit_directive<Subject>>
+ {
+ typedef unary_parser<Subject, omit_directive<Subject> > base_type;
+ typedef unused_type attribute_type;
+ static bool const has_attribute = false;
+
+ typedef Subject subject_type;
+ omit_directive(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context, typename RContext>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, unused_type) const
+ {
+ return this->subject.parse(first, last, context, rcontext, unused);
+ }
+ };
+
+ struct omit_gen
+ {
+ template <typename Subject>
+ omit_directive<typename extension::as_parser<Subject>::value_type>
+ operator[](Subject const& subject) const
+ {
+ return {as_parser(subject)};
+ }
+ };
+
+ omit_gen const omit = omit_gen();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/directive/raw.hpp b/3party/boost/boost/spirit/home/x3/directive/raw.hpp
new file mode 100644
index 0000000000..e6bcd9a3a1
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/directive/raw.hpp
@@ -0,0 +1,70 @@
+/*=============================================================================
+ Copyright (c) 2014 Joel de Guzman
+
+ 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(SPIRIT_X3_RAW_APRIL_9_2007_0912AM)
+#define SPIRIT_X3_RAW_APRIL_9_2007_0912AM
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ // this is a pseudo attribute type indicating that the parser wants the
+ // iterator range pointing to the [first, last) matching characters from
+ // the input iterators.
+ struct raw_attribute_type {};
+
+ template <typename Subject>
+ struct raw_directive : unary_parser<Subject, raw_directive<Subject>>
+ {
+ typedef unary_parser<Subject, raw_directive<Subject> > base_type;
+ typedef raw_attribute_type attribute_type;
+ static bool const handles_container = Subject::handles_container;
+ typedef Subject subject_type;
+
+ raw_directive(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ x3::skip_over(first, last, context);
+ Iterator i = first;
+ if (this->subject.parse(i, last, context, rcontext, unused))
+ {
+ traits::move_to(first, i, attr);
+ first = i;
+ return true;
+ }
+ return false;
+ }
+
+ template <typename Iterator, typename Context, typename RContext>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, unused_type) const
+ {
+ return this->subject.parse(first, last, context, rcontext, unused);
+ }
+ };
+
+ struct raw_gen
+ {
+ template <typename Subject>
+ raw_directive<typename extension::as_parser<Subject>::value_type>
+ operator[](Subject const& subject) const
+ {
+ return {as_parser(subject)};
+ }
+ };
+
+ raw_gen const raw = raw_gen();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/directive/skip.hpp b/3party/boost/boost/spirit/home/x3/directive/skip.hpp
new file mode 100644
index 0000000000..c880720791
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/directive/skip.hpp
@@ -0,0 +1,124 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustin Berge
+
+ 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(SPIRIT_SKIP_JANUARY_26_2008_0422PM)
+#define SPIRIT_SKIP_JANUARY_26_2008_0422PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Subject>
+ struct reskip_directive : unary_parser<Subject, reskip_directive<Subject>>
+ {
+ typedef unary_parser<Subject, reskip_directive<Subject>> base_type;
+ static bool const is_pass_through_unary = true;
+ static bool const handles_container = Subject::handles_container;
+
+ reskip_directive(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ typename disable_if<has_skipper<Context>, bool>::type
+ parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ auto const& skipper =
+ detail::get_unused_skipper(x3::get<skipper_tag>(context));
+
+ return this->subject.parse(
+ first, last
+ , make_context<skipper_tag>(skipper, context)
+ , rcontext
+ , attr);
+ }
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ typename enable_if<has_skipper<Context>, bool>::type
+ parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ return this->subject.parse(
+ first, last
+ , context
+ , rcontext
+ , attr);
+ }
+ };
+
+ template <typename Subject, typename Skipper>
+ struct skip_directive : unary_parser<Subject, skip_directive<Subject, Skipper>>
+ {
+ typedef unary_parser<Subject, skip_directive<Subject, Skipper>> base_type;
+ static bool const is_pass_through_unary = true;
+ static bool const handles_container = Subject::handles_container;
+
+ skip_directive(Subject const& subject, Skipper const& skipper)
+ : base_type(subject)
+ , skipper(skipper)
+ {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ return this->subject.parse(
+ first, last
+ , make_context<skipper_tag>(skipper, context)
+ , rcontext
+ , attr);
+ }
+
+ Skipper const skipper;
+ };
+
+ struct reskip_gen
+ {
+ template <typename Skipper>
+ struct skip_gen
+ {
+ explicit skip_gen(Skipper const& skipper)
+ : skipper_(skipper) {}
+
+ template <typename Subject>
+ skip_directive<typename extension::as_parser<Subject>::value_type, Skipper>
+ operator[](Subject const& subject) const
+ {
+ return {as_parser(subject), skipper_};
+ }
+
+ Skipper skipper_;
+ };
+
+ template <typename Skipper>
+ skip_gen<Skipper> const operator()(Skipper const& skipper) const
+ {
+ return skip_gen<Skipper>(skipper);
+ }
+
+ template <typename Subject>
+ reskip_directive<typename extension::as_parser<Subject>::value_type>
+ operator[](Subject const& subject) const
+ {
+ return {as_parser(subject)};
+ }
+ };
+
+ reskip_gen const skip = reskip_gen();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/directive/with.hpp b/3party/boost/boost/spirit/home/x3/directive/with.hpp
new file mode 100644
index 0000000000..cc6c442a34
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/directive/with.hpp
@@ -0,0 +1,107 @@
+/*=============================================================================
+ Copyright (c) 2014 Joel de Guzman
+
+ 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(SPIRIT_X3_WITH_MAY_02_2014_0749AM)
+#define SPIRIT_X3_WITH_MAY_02_2014_0749AM
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // with directive injects a value into the context prior to parsing.
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Subject, typename Derived, typename T>
+ struct with_value_holder
+ : unary_parser<Subject, Derived>
+ {
+ typedef unary_parser<Subject, Derived> base_type;
+ mutable T val;
+ with_value_holder(Subject const& subject, T const& val)
+ : base_type(subject)
+ , val(val) {}
+ };
+
+ template <typename Subject, typename Derived, typename T>
+ struct with_value_holder<Subject, Derived, T const>
+ : unary_parser<Subject, Derived>
+ {
+ typedef unary_parser<Subject, Derived> base_type;
+ T val;
+ with_value_holder(Subject const& subject, T const& val)
+ : base_type(subject)
+ , val(val) {}
+ };
+
+ template <typename Subject, typename ID, typename T>
+ struct with_directive
+ : with_value_holder<Subject, with_directive<Subject, ID, T>, T>
+ {
+ typedef with_value_holder<Subject, with_directive<Subject, ID, T>, T> base_type;
+ static bool const is_pass_through_unary = true;
+ static bool const handles_container = Subject::handles_container;
+
+ typedef Subject subject_type;
+
+ with_directive(Subject const& subject, T const& val)
+ : base_type(subject, val) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ return this->subject.parse(
+ first, last
+ , make_context<ID>(this->val, context)
+ , rcontext
+ , attr);
+ }
+ };
+
+ template <typename ID, typename T, typename NextContext = unused_type>
+ struct with_context
+ {
+ typedef context<ID, T, NextContext> type;
+ };
+
+ template <typename ID, typename T>
+ struct with_context<ID, T, unused_type>
+ {
+ typedef context<ID, T> const type;
+ };
+
+ template <typename ID, typename T>
+ struct with_gen
+ {
+ T& val;
+
+ with_gen(T& val)
+ : val(val) {}
+
+ template <typename Subject>
+ with_directive<typename extension::as_parser<Subject>::value_type, ID, T>
+ operator[](Subject const& subject) const
+ {
+ return {as_parser(subject), val};
+ }
+ };
+
+ template <typename ID, typename T>
+ inline with_gen<ID, T> with(T& val)
+ {
+ return with_gen<ID, T>{val};
+ }
+
+ template <typename ID, typename T>
+ inline with_gen<ID, T const> with(T const& val)
+ {
+ return with_gen<ID, T const>{val};
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/extensions.hpp b/3party/boost/boost/spirit/home/x3/extensions.hpp
new file mode 100644
index 0000000000..a40b719c35
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/extensions.hpp
@@ -0,0 +1,18 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2014 Thomas Bernard
+ Copyright (c) 2014 Lee Clagett
+
+ 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_SPIRIT_X3_EXTENSIONS_APRIL_6_2014_1421PM)
+#define BOOST_SPIRIT_X3_EXTENSIONS_APRIL_6_2014_1421PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/extensions/seek.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/extensions/seek.hpp b/3party/boost/boost/spirit/home/x3/extensions/seek.hpp
new file mode 100644
index 0000000000..bcd9544794
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/extensions/seek.hpp
@@ -0,0 +1,70 @@
+/*=============================================================================
+ Copyright (c) 2011 Jamboree
+ Copyright (c) 2014 Lee Clagett
+
+ 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_SPIRIT_X3_SEEK_APRIL_13_2014_1920PM)
+#define BOOST_SPIRIT_X3_SEEK_APRIL_13_2014_1920PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template<typename Subject>
+ struct seek_directive : unary_parser<Subject, seek_directive<Subject>>
+ {
+ typedef unary_parser<Subject, seek_directive<Subject>> base_type;
+ static bool const is_pass_through_unary = true;
+ static bool const handles_container = Subject::handles_container;
+
+ seek_directive(Subject const& subject) :
+ base_type(subject) {}
+
+ template<typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(
+ Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ Iterator current(first);
+ for (/**/; current != last; ++current)
+ {
+ if (this->subject.parse(current, last, context, rcontext, attr))
+ {
+ first = current;
+ return true;
+ }
+ }
+
+ // Test for when subjects match on input empty. Example:
+ // comment = "//" >> seek[eol | eoi]
+ if (this->subject.parse(current, last, context, rcontext, attr))
+ {
+ first = current;
+ return true;
+ }
+
+ return false;
+ }
+ };
+
+ struct seek_gen
+ {
+ template<typename Subject>
+ seek_directive<typename extension::as_parser<Subject>::value_type>
+ operator[](Subject const& subject) const
+ {
+ return {as_parser(subject)};
+ }
+ };
+
+ seek_gen const seek = seek_gen();
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/nonterminal.hpp b/3party/boost/boost/spirit/home/x3/nonterminal.hpp
new file mode 100644
index 0000000000..1e589bd903
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/nonterminal.hpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_NONTERMINAL_FEBRUARY_12_2007_1018AM)
+#define BOOST_SPIRIT_X3_NONTERMINAL_FEBRUARY_12_2007_1018AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/nonterminal/rule.hpp>
+//~ #include <boost/spirit/home/x3/nonterminal/error_handler.hpp>
+//~ #include <boost/spirit/home/x3/nonterminal/debug_handler.hpp>
+//~ #include <boost/spirit/home/x3/nonterminal/success_handler.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/nonterminal/debug_handler_state.hpp b/3party/boost/boost/spirit/home/x3/nonterminal/debug_handler_state.hpp
new file mode 100644
index 0000000000..800023f013
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/nonterminal/debug_handler_state.hpp
@@ -0,0 +1,24 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_DEBUG_HANDLER_STATE_APR_21_2010_0733PM)
+#define BOOST_SPIRIT_X3_DEBUG_HANDLER_STATE_APR_21_2010_0733PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+ enum debug_handler_state
+ {
+ pre_parse
+ , successful_parse
+ , failed_parse
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/nonterminal/detail/rule.hpp b/3party/boost/boost/spirit/home/x3/nonterminal/detail/rule.hpp
new file mode 100644
index 0000000000..54e2eef234
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/nonterminal/detail/rule.hpp
@@ -0,0 +1,385 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_DETAIL_RULE_JAN_08_2012_0326PM)
+#define BOOST_SPIRIT_X3_DETAIL_RULE_JAN_08_2012_0326PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/make_attribute.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+#include <boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp>
+#include <boost/utility/addressof.hpp>
+
+#if defined(BOOST_SPIRIT_X3_DEBUG)
+#include <boost/spirit/home/x3/nonterminal/simple_trace.hpp>
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename ID>
+ struct identity;
+
+ template <typename ID, typename Attribute = unused_type>
+ struct rule;
+
+ struct parse_pass_context_tag;
+
+ namespace detail
+ {
+ // we use this so we can detect if the default parse_rule
+ // is the being called.
+ struct default_parse_rule_result
+ {
+ default_parse_rule_result(bool r)
+ : r(r) {}
+ operator bool() const { return r; }
+ bool r;
+ };
+ }
+
+ // default parse_rule implementation
+ template <typename ID, typename Attribute, typename Iterator
+ , typename Context, typename ActualAttribute>
+ inline detail::default_parse_rule_result
+ parse_rule(
+ rule<ID, Attribute> rule_
+ , Iterator& first, Iterator const& last
+ , Context const& context, ActualAttribute& attr);
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+#if defined(BOOST_SPIRIT_X3_DEBUG)
+ template <typename Iterator, typename Attribute>
+ struct context_debug
+ {
+ context_debug(
+ char const* rule_name
+ , Iterator const& first, Iterator const& last
+ , Attribute const& attr
+ , bool const& ok_parse //was parse successful?
+ )
+ : ok_parse(ok_parse), rule_name(rule_name)
+ , first(first), last(last)
+ , attr(attr)
+ , f(detail::get_simple_trace())
+ {
+ f(first, last, attr, pre_parse, rule_name);
+ }
+
+ ~context_debug()
+ {
+ auto status = ok_parse ? successful_parse : failed_parse ;
+ f(first, last, attr, status, rule_name);
+ }
+
+ bool const& ok_parse;
+ char const* rule_name;
+ Iterator const& first;
+ Iterator const& last;
+ Attribute const& attr;
+ detail::simple_trace_type& f;
+ };
+#endif
+
+ template <typename ID, typename Iterator, typename Context, typename Enable = void>
+ struct has_on_error : mpl::false_ {};
+
+ template <typename ID, typename Iterator, typename Context>
+ struct has_on_error<ID, Iterator, Context,
+ typename disable_if_substitution_failure<
+ decltype(
+ std::declval<ID>().on_error(
+ std::declval<Iterator&>()
+ , std::declval<Iterator>()
+ , std::declval<expectation_failure<Iterator>>()
+ , std::declval<Context>()
+ )
+ )>::type
+ >
+ : mpl::true_
+ {};
+
+ template <typename ID, typename Iterator, typename Attribute, typename Context, typename Enable = void>
+ struct has_on_success : mpl::false_ {};
+
+ template <typename ID, typename Iterator, typename Attribute, typename Context>
+ struct has_on_success<ID, Iterator, Context, Attribute,
+ typename disable_if_substitution_failure<
+ decltype(
+ std::declval<ID>().on_success(
+ std::declval<Iterator&>()
+ , std::declval<Iterator>()
+ , std::declval<Attribute&>()
+ , std::declval<Context>()
+ )
+ )>::type
+ >
+ : mpl::true_
+ {};
+
+ template <typename ID>
+ struct make_id
+ {
+ typedef identity<ID> type;
+ };
+
+ template <typename ID>
+ struct make_id<identity<ID>>
+ {
+ typedef identity<ID> type;
+ };
+
+ template <typename ID, typename RHS, typename Context>
+ Context const&
+ make_rule_context(RHS const& rhs, Context const& context
+ , mpl::false_ /* is_default_parse_rule */)
+ {
+ return context;
+ }
+
+ template <typename ID, typename RHS, typename Context>
+ auto make_rule_context(RHS const& rhs, Context const& context
+ , mpl::true_ /* is_default_parse_rule */ )
+ {
+ return make_unique_context<ID>(rhs, context);
+ }
+
+ template <typename Attribute, typename ID>
+ struct rule_parser
+ {
+ template <typename Iterator, typename Context, typename ActualAttribute>
+ static bool call_on_success(
+ Iterator& first, Iterator const& last
+ , Context const& context, ActualAttribute& attr
+ , mpl::false_ /* No on_success handler */ )
+ {
+ return true;
+ }
+
+ template <typename Iterator, typename Context, typename ActualAttribute>
+ static bool call_on_success(
+ Iterator& first, Iterator const& last
+ , Context const& context, ActualAttribute& attr
+ , mpl::true_ /* Has on_success handler */)
+ {
+ bool pass = true;
+ ID().on_success(
+ first
+ , last
+ , attr
+ , make_context<parse_pass_context_tag>(pass, context)
+ );
+ return pass;
+ }
+
+ template <typename RHS, typename Iterator, typename Context
+ , typename RContext, typename ActualAttribute>
+ static bool parse_rhs_main(
+ RHS const& rhs
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, ActualAttribute& attr
+ , mpl::false_)
+ {
+ // see if the user has a BOOST_SPIRIT_DEFINE for this rule
+ typedef
+ decltype(parse_rule(
+ rule<ID, Attribute>(), first, last
+ , make_unique_context<ID>(rhs, context), attr))
+ parse_rule_result;
+
+ // If there is no BOOST_SPIRIT_DEFINE for this rule,
+ // we'll make a context for this rule tagged by its ID
+ // so we can extract the rule later on in the default
+ // (generic) parse_rule function.
+ typedef
+ is_same<parse_rule_result, default_parse_rule_result>
+ is_default_parse_rule;
+
+ Iterator i = first;
+ bool r = rhs.parse(
+ i
+ , last
+ , make_rule_context<ID>(rhs, context, is_default_parse_rule())
+ , rcontext
+ , attr
+ );
+
+ if (r)
+ {
+ auto first_ = first;
+ x3::skip_over(first_, last, context);
+ r = call_on_success(first_, i, context, attr
+ , has_on_success<ID, Iterator, Context, ActualAttribute>());
+ }
+
+ if (r)
+ first = i;
+ return r;
+ }
+
+ template <typename RHS, typename Iterator, typename Context
+ , typename RContext, typename ActualAttribute>
+ static bool parse_rhs_main(
+ RHS const& rhs
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, ActualAttribute& attr
+ , mpl::true_ /* on_error is found */)
+ {
+ for (;;)
+ {
+ try
+ {
+ return parse_rhs_main(
+ rhs, first, last, context, rcontext, attr, mpl::false_());
+ }
+ catch (expectation_failure<Iterator> const& x)
+ {
+ switch (ID().on_error(first, last, x, context))
+ {
+ case error_handler_result::fail:
+ return false;
+ case error_handler_result::retry:
+ continue;
+ case error_handler_result::accept:
+ return true;
+ case error_handler_result::rethrow:
+ throw;
+ }
+ }
+ }
+ }
+
+ template <typename RHS, typename Iterator
+ , typename Context, typename RContext, typename ActualAttribute>
+ static bool parse_rhs_main(
+ RHS const& rhs
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, ActualAttribute& attr)
+ {
+ return parse_rhs_main(
+ rhs, first, last, context, rcontext, attr
+ , has_on_error<ID, Iterator, Context>()
+ );
+ }
+
+ template <typename RHS, typename Iterator
+ , typename Context, typename RContext, typename ActualAttribute>
+ static bool parse_rhs(
+ RHS const& rhs
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, ActualAttribute& attr
+ , mpl::false_)
+ {
+ return parse_rhs_main(rhs, first, last, context, rcontext, attr);
+ }
+
+ template <typename RHS, typename Iterator
+ , typename Context, typename RContext, typename ActualAttribute>
+ static bool parse_rhs(
+ RHS const& rhs
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, ActualAttribute& attr
+ , mpl::true_)
+ {
+ return parse_rhs_main(rhs, first, last, context, rcontext, unused);
+ }
+
+ template <typename RHS, typename Iterator, typename Context
+ , typename ActualAttribute, typename ExplicitAttrPropagation>
+ static bool call_rule_definition(
+ RHS const& rhs
+ , char const* rule_name
+ , Iterator& first, Iterator const& last
+ , Context const& context, ActualAttribute& attr
+ , ExplicitAttrPropagation)
+ {
+ typedef traits::make_attribute<Attribute, ActualAttribute> make_attribute;
+
+ // do down-stream transformation, provides attribute for
+ // rhs parser
+ typedef traits::transform_attribute<
+ typename make_attribute::type, Attribute, parser_id>
+ transform;
+
+ typedef typename make_attribute::value_type value_type;
+ typedef typename transform::type transform_attr;
+ value_type made_attr = make_attribute::call(attr);
+ transform_attr attr_ = transform::pre(made_attr);
+
+ bool ok_parse
+ //Creates a place to hold the result of parse_rhs
+ //called inside the following scope.
+ ;
+ {
+ //Create a scope to cause the dbg variable below (within
+ //the #if...#endif) to call it's DTOR before any
+ //modifications are made to the attribute, attr_ passed
+ //to parse_rhs (such as might be done in
+ //traits::post_transform when, for example,
+ //ActualAttribute is a recursive variant).
+#if defined(BOOST_SPIRIT_X3_DEBUG)
+ context_debug<Iterator, typename make_attribute::value_type>
+ dbg(rule_name, first, last, attr_, ok_parse);
+#endif
+ ok_parse=parse_rhs(rhs, first, last, context, attr_, attr_
+ , mpl::bool_
+ < ( RHS::has_action
+ && !ExplicitAttrPropagation::value
+ )
+ >()
+ );
+ }
+ if(ok_parse)
+ {
+ // do up-stream transformation, this integrates the results
+ // back into the original attribute value, if appropriate
+ traits::post_transform(attr, attr_);
+ }
+ return ok_parse;
+ }
+
+// template <typename RuleDef, typename Iterator, typename Context
+// , typename ActualAttribute, typename AttributeContext>
+// static bool call_from_rule(
+// RuleDef const& rule_def
+// , char const* rule_name
+// , Iterator& first, Iterator const& last
+// , Context const& context, ActualAttribute& attr, AttributeContext& attr_ctx)
+// {
+// // This is called when a rule-body has already been established.
+// // The rule body is already established by the rule_definition class,
+// // we will not do it again. We'll simply call the RHS by calling
+// // call_rule_definition.
+//
+// return call_rule_definition(
+// rule_def.rhs, rule_name, first, last
+// , context, attr, attr_ctx.attr_ptr
+// , mpl::bool_<(RuleDef::explicit_attribute_propagation)>());
+// }
+//
+// template <typename RuleDef, typename Iterator, typename Context
+// , typename ActualAttribute>
+// static bool call_from_rule(
+// RuleDef const& rule_def
+// , char const* rule_name
+// , Iterator& first, Iterator const& last
+// , Context const& context, ActualAttribute& attr, unused_type)
+// {
+// // This is called when a rule-body has *not yet* been established.
+// // The rule body is established by the rule_definition class, so
+// // we call it to parse and establish the rule-body.
+//
+// return rule_def.parse(first, last, context, unused, attr); // $$$ fix unused param $$$
+// }
+ };
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp b/3party/boost/boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp
new file mode 100644
index 0000000000..b1929f8993
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp
@@ -0,0 +1,108 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+=============================================================================*/
+#if !defined(SPIRIT_X3_DETAIL_ATTRIBUTES_APR_18_2010_0458PM)
+#define SPIRIT_X3_DETAIL_ATTRIBUTES_APR_18_2010_0458PM
+
+#include <boost/spirit/home/x3/support/traits/transform_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace x3
+{
+ struct parser_id;
+
+ template <typename Exposed, typename Transformed>
+ struct default_transform_attribute
+ {
+ typedef Transformed type;
+
+ static Transformed pre(Exposed&) { return Transformed(); }
+
+ static void post(Exposed& val, Transformed& attr)
+ {
+ traits::move_to(attr, val);
+ }
+ };
+
+ // handle case where no transformation is required as the types are the same
+ template <typename Attribute>
+ struct default_transform_attribute<Attribute, Attribute>
+ {
+ typedef Attribute& type;
+ static Attribute& pre(Attribute& val) { return val; }
+ static void post(Attribute&, Attribute const&) {}
+ };
+
+ // main specialization for x3
+ template <typename Exposed, typename Transformed, typename Enable = void>
+ struct transform_attribute
+ : default_transform_attribute<Exposed, Transformed> {};
+
+ // reference types need special handling
+ template <typename Attribute>
+ struct transform_attribute<Attribute&, Attribute>
+ {
+ typedef Attribute& type;
+ static Attribute& pre(Attribute& val) { return val; }
+ static void post(Attribute&, Attribute const&) {}
+ };
+
+ // unused_type needs some special handling as well
+ template <>
+ struct transform_attribute<unused_type, unused_type>
+ {
+ typedef unused_type type;
+ static unused_type pre(unused_type) { return unused; }
+ static void post(unused_type, unused_type) {}
+ };
+
+ template <>
+ struct transform_attribute<unused_type const, unused_type>
+ : transform_attribute<unused_type, unused_type> {};
+
+ template <typename Attribute>
+ struct transform_attribute<unused_type, Attribute>
+ : transform_attribute<unused_type, unused_type> {};
+
+ template <typename Attribute>
+ struct transform_attribute<unused_type const, Attribute>
+ : transform_attribute<unused_type, unused_type> {};
+
+ template <typename Attribute>
+ struct transform_attribute<Attribute, unused_type>
+ : transform_attribute<unused_type, unused_type> {};
+
+ template <typename Attribute>
+ struct transform_attribute<Attribute const, unused_type>
+ : transform_attribute<unused_type, unused_type> {};
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Exposed, typename Transformed>
+ struct transform_attribute<Exposed, Transformed, x3::parser_id>
+ : x3::transform_attribute<Exposed, Transformed> {};
+
+ template <typename Exposed, typename Transformed>
+ struct transform_attribute<Exposed&, Transformed, x3::parser_id>
+ : transform_attribute<Exposed, Transformed, x3::parser_id> {};
+
+ template <typename Attribute>
+ struct transform_attribute<Attribute&, Attribute, x3::parser_id>
+ : x3::transform_attribute<Attribute&, Attribute> {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Exposed, typename Transformed>
+ void post_transform(Exposed& dest, Transformed&& attr)
+ {
+ return transform_attribute<Exposed, Transformed, x3::parser_id>::post(dest, attr);
+ }
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/nonterminal/rule.hpp b/3party/boost/boost/spirit/home/x3/nonterminal/rule.hpp
new file mode 100644
index 0000000000..049c6be57b
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/nonterminal/rule.hpp
@@ -0,0 +1,186 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_RULE_JAN_08_2012_0326PM)
+#define BOOST_SPIRIT_X3_RULE_JAN_08_2012_0326PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/nonterminal/detail/rule.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/preprocessor/variadic/to_seq.hpp>
+#include <boost/preprocessor/variadic/elem.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+
+#if !defined(BOOST_SPIRIT_X3_NO_RTTI)
+#include <typeinfo>
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename ID>
+ struct identity {};
+
+ // default parse_rule implementation
+ template <typename ID, typename Attribute, typename Iterator
+ , typename Context, typename ActualAttribute>
+ inline detail::default_parse_rule_result
+ parse_rule(
+ rule<ID, Attribute> rule_
+ , Iterator& first, Iterator const& last
+ , Context const& context, ActualAttribute& attr)
+ {
+ static_assert(!is_same<decltype(get<ID>(context)), unused_type>::value,
+ "BOOST_SPIRIT_DEFINE undefined for this rule.");
+ return get<ID>(context).parse(first, last, context, unused, attr);
+ }
+
+ template <typename ID, typename RHS, typename Attribute, bool force_attribute_>
+ struct rule_definition : parser<rule_definition<ID, RHS, Attribute, force_attribute_>>
+ {
+ typedef rule_definition<ID, RHS, Attribute, force_attribute_> this_type;
+ typedef ID id;
+ typedef RHS rhs_type;
+ typedef rule<ID, Attribute> lhs_type;
+ typedef Attribute attribute_type;
+
+ static bool const has_attribute =
+ !is_same<Attribute, unused_type>::value;
+ static bool const handles_container =
+ traits::is_container<Attribute>::value;
+ static bool const force_attribute =
+ force_attribute_;
+
+ rule_definition(RHS rhs, char const* name)
+ : rhs(rhs), name(name) {}
+
+ template <typename Iterator, typename Context, typename Attribute_>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute_& attr) const
+ {
+ return detail::rule_parser<attribute_type, ID>
+ ::call_rule_definition(
+ rhs, name, first, last
+ , context
+ , attr
+ , mpl::bool_<force_attribute>());
+ }
+
+ RHS rhs;
+ char const* name;
+ };
+
+ template <typename ID, typename Attribute>
+ struct rule : parser<rule<ID, Attribute>>
+ {
+ typedef ID id;
+ typedef Attribute attribute_type;
+ static bool const has_attribute =
+ !is_same<Attribute, unused_type>::value;
+ static bool const handles_container =
+ traits::is_container<Attribute>::value;
+
+#if !defined(BOOST_SPIRIT_X3_NO_RTTI)
+ rule() : name(typeid(rule).name()) {}
+#else
+ rule() : name("unnamed") {}
+#endif
+
+ rule(char const* name)
+ : name(name) {}
+
+ template <typename RHS>
+ rule_definition<
+ ID, typename extension::as_parser<RHS>::value_type, Attribute, false>
+ operator=(RHS const& rhs) const
+ {
+ return {as_parser(rhs), name};
+ }
+
+ template <typename RHS>
+ rule_definition<
+ ID, typename extension::as_parser<RHS>::value_type, Attribute, true>
+ operator%=(RHS const& rhs) const
+ {
+ return {as_parser(rhs), name};
+ }
+
+
+ template <typename Iterator, typename Context, typename Attribute_>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute_& attr) const
+ {
+ return parse_rule(*this, first, last, context, attr);
+ }
+
+ char const* name;
+ };
+
+ namespace traits
+ {
+ template <typename T, typename Enable = void>
+ struct is_rule : mpl::false_ {};
+
+ template <typename ID, typename Attribute>
+ struct is_rule<rule<ID, Attribute>> : mpl::true_ {};
+
+ template <typename ID, typename Attribute, typename RHS, bool force_attribute>
+ struct is_rule<rule_definition<ID, RHS, Attribute, force_attribute>> : mpl::true_ {};
+ }
+
+ template <typename T>
+ struct get_info<T, typename enable_if<traits::is_rule<T>>::type>
+ {
+ typedef std::string result_type;
+ std::string operator()(T const& r) const
+ {
+ return r.name;
+ }
+ };
+
+#define BOOST_SPIRIT_DECLARE_(r, data, rule_type) \
+ template <typename Iterator, typename Context, typename Attribute> \
+ bool parse_rule( \
+ rule_type rule_ \
+ , Iterator& first, Iterator const& last \
+ , Context const& context, Attribute& attr); \
+ /***/
+
+#define BOOST_SPIRIT_DECLARE(...) BOOST_PP_SEQ_FOR_EACH( \
+ BOOST_SPIRIT_DECLARE_, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) \
+ /***/
+
+#define BOOST_SPIRIT_DEFINE_(r, data, def) \
+ template <typename Iterator, typename Context, typename Attribute> \
+ inline bool parse_rule( \
+ decltype(def)::lhs_type rule_ \
+ , Iterator& first, Iterator const& last \
+ , Context const& context, Attribute& attr) \
+ { \
+ using boost::spirit::x3::unused; \
+ auto const& def_ = (def); \
+ return def_.parse(first, last, context, unused, attr); \
+ } \
+ /***/
+
+#define BOOST_SPIRIT_DEFINE(...) BOOST_PP_SEQ_FOR_EACH( \
+ BOOST_SPIRIT_DEFINE_, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) \
+ /***/
+
+#define BOOST_SPIRIT_INSTANTIATE(rule_type, Iterator, Context) \
+ template bool parse_rule<Iterator, Context, rule_type::attribute_type>( \
+ rule_type rule_ \
+ , Iterator& first, Iterator const& last \
+ , Context const& context, rule_type::attribute_type& attr); \
+ /***/
+
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/nonterminal/simple_trace.hpp b/3party/boost/boost/spirit/home/x3/nonterminal/simple_trace.hpp
new file mode 100644
index 0000000000..b049b4ec3c
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/nonterminal/simple_trace.hpp
@@ -0,0 +1,150 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_SIMPLE_TRACE_DECEMBER_06_2008_1102AM)
+#define BOOST_SPIRIT_X3_SIMPLE_TRACE_DECEMBER_06_2008_1102AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/print_token.hpp>
+#include <boost/spirit/home/x3/support/traits/print_attribute.hpp>
+#include <boost/spirit/home/x3/nonterminal/debug_handler_state.hpp>
+#include <boost/fusion/include/out.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <ostream>
+
+// The stream to use for debug output
+#if !defined(BOOST_SPIRIT_X3_DEBUG_OUT)
+#define BOOST_SPIRIT_X3_DEBUG_OUT std::cerr
+#endif
+
+// number of tokens to print while debugging
+#if !defined(BOOST_SPIRIT_X3_DEBUG_PRINT_SOME)
+#define BOOST_SPIRIT_X3_DEBUG_PRINT_SOME 20
+#endif
+
+// number of spaces to indent
+#if !defined(BOOST_SPIRIT_X3_DEBUG_INDENT)
+#define BOOST_SPIRIT_X3_DEBUG_INDENT 2
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+ namespace detail
+ {
+ template <typename Char>
+ inline void token_printer(std::ostream& o, Char c)
+ {
+ // allow customization of the token printer routine
+ x3::traits::print_token(o, c);
+ }
+ }
+
+ template <int IndentSpaces = 2, int CharsToPrint = 20>
+ struct simple_trace
+ {
+ simple_trace(std::ostream& out)
+ : out(out), indent(0) {}
+
+ void print_indent(int n) const
+ {
+ n *= IndentSpaces;
+ for (int i = 0; i != n; ++i)
+ out << ' ';
+ }
+
+ template <typename Iterator>
+ void print_some(
+ char const* tag
+ , Iterator first, Iterator const& last) const
+ {
+ print_indent(indent);
+ out << '<' << tag << '>';
+ int const n = CharsToPrint;
+ for (int i = 0; first != last && i != n && *first; ++i, ++first)
+ detail::token_printer(out, *first);
+ out << "</" << tag << '>' << std::endl;
+
+ // $$$ FIXME convert invalid xml characters (e.g. '<') to valid
+ // character entities. $$$
+ }
+
+ template <typename Iterator, typename Attribute, typename State>
+ void operator()(
+ Iterator const& first
+ , Iterator const& last
+ , Attribute const& attr
+ , State state
+ , std::string const& rule_name) const
+ {
+ switch (state)
+ {
+ case pre_parse:
+ print_indent(indent++);
+ out
+ << '<' << rule_name << '>'
+ << std::endl;
+ print_some("try", first, last);
+ break;
+
+ case successful_parse:
+ print_some("success", first, last);
+ if (!is_same<Attribute, unused_type>::value)
+ {
+ print_indent(indent);
+ out
+ << "<attributes>";
+ traits::print_attribute(out, attr);
+ out
+ << "</attributes>";
+ out << std::endl;
+ }
+ //~ if (!fusion::empty(context.locals))
+ //~ out
+ //~ << "<locals>"
+ //~ << context.locals
+ //~ << "</locals>";
+ print_indent(--indent);
+ out
+ << "</" << rule_name << '>'
+ << std::endl;
+ break;
+
+ case failed_parse:
+ print_indent(indent);
+ out << "<fail/>" << std::endl;
+ print_indent(--indent);
+ out
+ << "</" << rule_name << '>'
+ << std::endl;
+ break;
+ }
+ }
+
+ std::ostream& out;
+ mutable int indent;
+ };
+
+ namespace detail
+ {
+ typedef simple_trace<
+ BOOST_SPIRIT_X3_DEBUG_INDENT, BOOST_SPIRIT_X3_DEBUG_PRINT_SOME>
+ simple_trace_type;
+
+ inline simple_trace_type&
+ get_simple_trace()
+ {
+ static simple_trace_type tracer(BOOST_SPIRIT_X3_DEBUG_OUT);
+ return tracer;
+ }
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/numeric.hpp b/3party/boost/boost/spirit/home/x3/numeric.hpp
new file mode 100644
index 0000000000..c44d668569
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/numeric.hpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_NUMERIC_FEBRUARY_05_2007_1231PM)
+#define BOOST_SPIRIT_X3_NUMERIC_FEBRUARY_05_2007_1231PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/numeric/bool.hpp>
+#include <boost/spirit/home/x3/numeric/int.hpp>
+#include <boost/spirit/home/x3/numeric/uint.hpp>
+#include <boost/spirit/home/x3/numeric/real.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/numeric/bool.hpp b/3party/boost/boost/spirit/home/x3/numeric/bool.hpp
new file mode 100644
index 0000000000..1fb21c16fe
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/numeric/bool.hpp
@@ -0,0 +1,106 @@
+/*=============================================================================
+ Copyright (c) 2009 Hartmut Kaiser
+ Copyright (c) 2014 Joel de Guzman
+
+ 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(SPIRIT_X3_BOOL_SEP_29_2009_0709AM)
+#define SPIRIT_X3_BOOL_SEP_29_2009_0709AM
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/numeric/bool_policies.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename T, typename BoolPolicies = bool_policies<T>>
+ struct bool_parser : parser<bool_parser<T, BoolPolicies>>
+ {
+ typedef T attribute_type;
+ static bool const has_attribute = true;
+
+ bool_parser()
+ : policies() {}
+
+ bool_parser(BoolPolicies const& policies)
+ : policies(policies) {}
+
+ template <typename Iterator, typename Context>
+ bool parse(Iterator& first, Iterator const& last
+ , Context& context, unused_type, T& attr) const
+ {
+ x3::skip_over(first, last, context);
+ return policies.parse_true(first, last, attr)
+ || policies.parse_false(first, last, attr);
+ }
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context& context, unused_type, Attribute& attr_param) const
+ {
+ // this case is called when Attribute is not T
+ T attr_;
+ if (parse(first, last, context, unused, attr_))
+ {
+ traits::move_to(attr_, attr_param);
+ return true;
+ }
+ return false;
+ }
+
+ BoolPolicies policies;
+ };
+
+ template <typename T, typename BoolPolicies = bool_policies<T>>
+ struct literal_bool_parser : parser<bool_parser<T, BoolPolicies>>
+ {
+ typedef T attribute_type;
+ static bool const has_attribute = true;
+
+ template <typename Value>
+ literal_bool_parser(Value const& n)
+ : policies(), n_(n) {}
+
+ template <typename Value>
+ literal_bool_parser(Value const& n, BoolPolicies const& policies)
+ : policies(policies), n_(n) {}
+
+ template <typename Iterator, typename Context>
+ bool parse(Iterator& first, Iterator const& last
+ , Context& context, unused_type, T& attr) const
+ {
+ x3::skip_over(first, last, context);
+ return (n_ && policies.parse_true(first, last, attr))
+ || (!n_ && policies.parse_false(first, last, attr));
+ }
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context& context, unused_type, Attribute& attr_param) const
+ {
+ // this case is called when Attribute is not T
+ T attr_;
+ if (parse(first, last, context, unused, attr_))
+ {
+ traits::move_to(attr_, attr_param);
+ return true;
+ }
+ return false;
+ }
+
+ BoolPolicies policies;
+ T n_;
+ };
+
+ typedef bool_parser<bool> bool_type;
+ bool_type const bool_ = {};
+
+ typedef literal_bool_parser<bool> true_type;
+ true_type const true_ = { true };
+
+ typedef literal_bool_parser<bool> false_type;
+ false_type const false_ = { false };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/numeric/bool_policies.hpp b/3party/boost/boost/spirit/home/x3/numeric/bool_policies.hpp
new file mode 100644
index 0000000000..bafc5b5294
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/numeric/bool_policies.hpp
@@ -0,0 +1,52 @@
+/*=============================================================================
+ Copyright (c) 2009 Hartmut Kaiser
+ Copyright (c) 2014 Joel de Guzman
+
+ 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(SPIRIT_QI_BOOL_POLICIES_SEP_29_2009_0710AM)
+#define SPIRIT_QI_BOOL_POLICIES_SEP_29_2009_0710AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/detail/string_parse.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Default boolean policies
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T = bool>
+ struct bool_policies
+ {
+ template <typename Iterator, typename Attribute>
+ static bool
+ parse_true(Iterator& first, Iterator const& last, Attribute& attr_)
+ {
+ if (detail::string_parse("true", first, last, unused))
+ {
+ traits::move_to(T(true), attr_); // result is true
+ return true;
+ }
+ return false;
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool
+ parse_false(Iterator& first, Iterator const& last, Attribute& attr_)
+ {
+ if (detail::string_parse("false", first, last, unused))
+ {
+ traits::move_to(T(false), attr_); // result is false
+ return true;
+ }
+ return false;
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/numeric/int.hpp b/3party/boost/boost/spirit/home/x3/numeric/int.hpp
new file mode 100644
index 0000000000..ba9ceb8243
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/numeric/int.hpp
@@ -0,0 +1,66 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_INT_APR_17_2006_0830AM)
+#define BOOST_SPIRIT_X3_INT_APR_17_2006_0830AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/extract_int.hpp>
+#include <cstdint>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T
+ , unsigned Radix = 10
+ , unsigned MinDigits = 1
+ , int MaxDigits = -1>
+ struct int_parser : parser<int_parser<T, Radix, MinDigits, MaxDigits>>
+ {
+ // check template parameter 'Radix' for validity
+ static_assert(
+ (Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16),
+ "Error Unsupported Radix");
+
+ typedef T attribute_type;
+ static bool const has_attribute = true;
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute& attr) const
+ {
+ typedef extract_int<T, Radix, MinDigits, MaxDigits> extract;
+ x3::skip_over(first, last, context);
+ return extract::call(first, last, attr);
+ }
+ };
+
+#define BOOST_SPIRIT_X3_INT_PARSER(int_type, name) \
+ typedef int_parser<int_type> name##type; \
+ name##type const name = {}; \
+ /***/
+
+ BOOST_SPIRIT_X3_INT_PARSER(long, long_)
+ BOOST_SPIRIT_X3_INT_PARSER(short, short_)
+ BOOST_SPIRIT_X3_INT_PARSER(int, int_)
+ BOOST_SPIRIT_X3_INT_PARSER(long long, long_long)
+
+ BOOST_SPIRIT_X3_INT_PARSER(int8_t, int8)
+ BOOST_SPIRIT_X3_INT_PARSER(int16_t, int16)
+ BOOST_SPIRIT_X3_INT_PARSER(int32_t, int32)
+ BOOST_SPIRIT_X3_INT_PARSER(int64_t, int64)
+
+#undef BOOST_SPIRIT_X3_INT_PARSER
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/numeric/real.hpp b/3party/boost/boost/spirit/home/x3/numeric/real.hpp
new file mode 100644
index 0000000000..91da536421
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/numeric/real.hpp
@@ -0,0 +1,62 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_REAL_APRIL_18_2006_0850AM)
+#define BOOST_SPIRIT_X3_REAL_APRIL_18_2006_0850AM
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/numeric/real_policies.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/extract_real.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename T, typename RealPolicies = real_policies<T> >
+ struct real_parser : parser<real_parser<T, RealPolicies> >
+ {
+ typedef T attribute_type;
+ static bool const has_attribute = true;
+
+ real_parser()
+ : policies() {}
+
+ real_parser(RealPolicies const& policies)
+ : policies(policies) {}
+
+ template <typename Iterator, typename Context>
+ bool parse(Iterator& first, Iterator const& last
+ , Context& context, unused_type, T& attr_) const
+ {
+ x3::skip_over(first, last, context);
+ return extract_real<T, RealPolicies>::parse(first, last, attr_, policies);
+ }
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context& context, unused_type, Attribute& attr_param) const
+ {
+ // this case is called when Attribute is not T
+ T attr_;
+ if (parse(first, last, context, unused, attr_))
+ {
+ traits::move_to(attr_, attr_param);
+ return true;
+ }
+ return false;
+ }
+
+ RealPolicies policies;
+ };
+
+ typedef real_parser<float> float_type;
+ float_type const float_ = {};
+
+ typedef real_parser<double> double_type;
+ double_type const double_ = {};
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/numeric/real_policies.hpp b/3party/boost/boost/spirit/home/x3/numeric/real_policies.hpp
new file mode 100644
index 0000000000..4e02b266c5
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/numeric/real_policies.hpp
@@ -0,0 +1,186 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(SPIRIT_REAL_POLICIES_APRIL_17_2006_1158PM)
+#define SPIRIT_REAL_POLICIES_APRIL_17_2006_1158PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/detail/string_parse.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/extract_int.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Default (unsigned) real number policies
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct ureal_policies
+ {
+ // trailing dot policy suggested by Gustavo Guerra
+ static bool const allow_leading_dot = true;
+ static bool const allow_trailing_dot = true;
+ static bool const expect_dot = false;
+
+ template <typename Iterator>
+ static bool
+ parse_sign(Iterator& /*first*/, Iterator const& /*last*/)
+ {
+ return false;
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool
+ parse_n(Iterator& first, Iterator const& last, Attribute& attr_)
+ {
+ return extract_uint<T, 10, 1, -1>::call(first, last, attr_);
+ }
+
+ template <typename Iterator>
+ static bool
+ parse_dot(Iterator& first, Iterator const& last)
+ {
+ if (first == last || *first != '.')
+ return false;
+ ++first;
+ return true;
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool
+ parse_frac_n(Iterator& first, Iterator const& last, Attribute& attr_)
+ {
+ return extract_uint<T, 10, 1, -1, true>::call(first, last, attr_);
+ }
+
+ template <typename Iterator>
+ static bool
+ parse_exp(Iterator& first, Iterator const& last)
+ {
+ if (first == last || (*first != 'e' && *first != 'E'))
+ return false;
+ ++first;
+ return true;
+ }
+
+ template <typename Iterator>
+ static bool
+ parse_exp_n(Iterator& first, Iterator const& last, int& attr_)
+ {
+ return extract_int<int, 10, 1, -1>::call(first, last, attr_);
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+ // The parse_nan() and parse_inf() functions get called whenever:
+ //
+ // - a number to parse does not start with a digit (after having
+ // successfully parsed an optional sign)
+ //
+ // or
+ //
+ // - after a floating point number of the value 1 (having no
+ // exponential part and a fractional part value of 0) has been
+ // parsed.
+ //
+ // The first call allows to recognize representations of NaN or Inf
+ // starting with a non-digit character (such as NaN, Inf, QNaN etc.).
+ //
+ // The second call allows to recognize representation formats starting
+ // with a 1.0 (such as 1.0#NAN or 1.0#INF etc.).
+ //
+ // The functions should return true if a Nan or Inf has been found. In
+ // this case the attr should be set to the matched value (NaN or
+ // Inf). The optional sign will be automatically applied afterwards.
+ //
+ // The default implementation below recognizes representations of NaN
+ // and Inf as mandated by the C99 Standard and as proposed for
+ // inclusion into the C++0x Standard: nan, nan(...), inf and infinity
+ // (the matching is performed case-insensitively).
+ ///////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Attribute>
+ static bool
+ parse_nan(Iterator& first, Iterator const& last, Attribute& attr_)
+ {
+ if (first == last)
+ return false; // end of input reached
+
+ if (*first != 'n' && *first != 'N')
+ return false; // not "nan"
+
+ // nan[(...)] ?
+ if (detail::string_parse("nan", "NAN", first, last, unused))
+ {
+ if (*first == '(')
+ {
+ // skip trailing (...) part
+ Iterator i = first;
+
+ while (++i != last && *i != ')')
+ ;
+ if (i == last)
+ return false; // no trailing ')' found, give up
+
+ first = ++i;
+ }
+ attr_ = std::numeric_limits<T>::quiet_NaN();
+ return true;
+ }
+ return false;
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool
+ parse_inf(Iterator& first, Iterator const& last, Attribute& attr_)
+ {
+ if (first == last)
+ return false; // end of input reached
+
+ if (*first != 'i' && *first != 'I')
+ return false; // not "inf"
+
+ // inf or infinity ?
+ if (detail::string_parse("inf", "INF", first, last, unused))
+ {
+ // skip allowed 'inity' part of infinity
+ detail::string_parse("inity", "INITY", first, last, unused);
+ attr_ = std::numeric_limits<T>::infinity();
+ return true;
+ }
+ return false;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Default (signed) real number policies
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct real_policies : ureal_policies<T>
+ {
+ template <typename Iterator>
+ static bool
+ parse_sign(Iterator& first, Iterator const& last)
+ {
+ return extract_sign(first, last);
+ }
+ };
+
+ template <typename T>
+ struct strict_ureal_policies : ureal_policies<T>
+ {
+ static bool const expect_dot = true;
+ };
+
+ template <typename T>
+ struct strict_real_policies : real_policies<T>
+ {
+ static bool const expect_dot = true;
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/numeric/uint.hpp b/3party/boost/boost/spirit/home/x3/numeric/uint.hpp
new file mode 100644
index 0000000000..624bae52de
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/numeric/uint.hpp
@@ -0,0 +1,79 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2011 Jan Frederick Eick
+
+ 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_SPIRIT_X3_UINT_APR_17_2006_0901AM)
+#define BOOST_SPIRIT_X3_UINT_APR_17_2006_0901AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/extract_int.hpp>
+#include <cstdint>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T
+ , unsigned Radix = 10
+ , unsigned MinDigits = 1
+ , int MaxDigits = -1>
+ struct uint_parser : parser<uint_parser<T, Radix, MinDigits, MaxDigits>>
+ {
+ // check template parameter 'Radix' for validity
+ static_assert(
+ (Radix >= 2 && Radix <= 36),
+ "Error Unsupported Radix");
+
+ typedef T attribute_type;
+ static bool const has_attribute = true;
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute& attr) const
+ {
+ typedef extract_uint<T, Radix, MinDigits, MaxDigits> extract;
+ x3::skip_over(first, last, context);
+ return extract::call(first, last, attr);
+ }
+ };
+
+#define BOOST_SPIRIT_X3_UINT_PARSER(uint_type, name) \
+ typedef uint_parser<uint_type> name##type; \
+ name##type const name = {}; \
+ /***/
+
+ BOOST_SPIRIT_X3_UINT_PARSER(unsigned long, ulong_)
+ BOOST_SPIRIT_X3_UINT_PARSER(unsigned short, ushort_)
+ BOOST_SPIRIT_X3_UINT_PARSER(unsigned int, uint_)
+ BOOST_SPIRIT_X3_UINT_PARSER(unsigned long long, ulong_long)
+
+ BOOST_SPIRIT_X3_UINT_PARSER(uint8_t, uint8)
+ BOOST_SPIRIT_X3_UINT_PARSER(uint16_t, uint16)
+ BOOST_SPIRIT_X3_UINT_PARSER(uint32_t, uint32)
+ BOOST_SPIRIT_X3_UINT_PARSER(uint64_t, uint64)
+
+#undef BOOST_SPIRIT_X3_UINT_PARSER
+
+#define BOOST_SPIRIT_X3_UINT_PARSER(uint_type, radix, name) \
+ typedef uint_parser<uint_type, radix> name##type; \
+ name##type const name = name##type(); \
+ /***/
+
+ BOOST_SPIRIT_X3_UINT_PARSER(unsigned, 2, bin)
+ BOOST_SPIRIT_X3_UINT_PARSER(unsigned, 8, oct)
+ BOOST_SPIRIT_X3_UINT_PARSER(unsigned, 16, hex)
+
+#undef BOOST_SPIRIT_X3_UINT_PARSER
+
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator.hpp b/3party/boost/boost/spirit/home/x3/operator.hpp
new file mode 100644
index 0000000000..1244e2f04d
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_OPERATOR_FEBRUARY_02_2007_0558PM)
+#define BOOST_SPIRIT_X3_OPERATOR_FEBRUARY_02_2007_0558PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/operator/sequence.hpp>
+#include <boost/spirit/home/x3/operator/alternative.hpp>
+//~ #include <boost/spirit/home/x3/operator/sequential_or.hpp>
+//~ #include <boost/spirit/home/x3/operator/permutation.hpp>
+#include <boost/spirit/home/x3/operator/difference.hpp>
+#include <boost/spirit/home/x3/operator/list.hpp>
+#include <boost/spirit/home/x3/operator/optional.hpp>
+#include <boost/spirit/home/x3/operator/kleene.hpp>
+#include <boost/spirit/home/x3/operator/plus.hpp>
+#include <boost/spirit/home/x3/operator/and_predicate.hpp>
+#include <boost/spirit/home/x3/operator/not_predicate.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/alternative.hpp b/3party/boost/boost/spirit/home/x3/operator/alternative.hpp
new file mode 100644
index 0000000000..1566780bc6
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/alternative.hpp
@@ -0,0 +1,68 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_ALTERNATIVE_JAN_07_2013_1131AM)
+#define SPIRIT_ALTERNATIVE_JAN_07_2013_1131AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/operator/detail/alternative.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Left, typename Right>
+ struct alternative : binary_parser<Left, Right, alternative<Left, Right>>
+ {
+ typedef binary_parser<Left, Right, alternative<Left, Right>> base_type;
+
+ alternative(Left left, Right right)
+ : base_type(left, right) {}
+
+ template <typename Iterator, typename Context, typename RContext>
+ bool parse(
+ Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, unused_type) const
+ {
+ return this->left.parse(first, last, context, rcontext, unused)
+ || this->right.parse(first, last, context, rcontext, unused);
+ }
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(
+ Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ if (detail::parse_alternative(this->left, first, last, context, rcontext, attr))
+ return true;
+ if (detail::parse_alternative(this->right, first, last, context, rcontext, attr))
+ return true;
+ return false;
+ }
+ };
+
+ template <typename Left, typename Right>
+ inline alternative<
+ typename extension::as_parser<Left>::value_type
+ , typename extension::as_parser<Right>::value_type>
+ operator|(Left const& left, Right const& right)
+ {
+ return {as_parser(left), as_parser(right)};
+ }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Left, typename Right, typename Context>
+ struct attribute_of<x3::alternative<Left, Right>, Context>
+ : x3::detail::attribute_of_alternative<Left, Right, Context> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/and_predicate.hpp b/3party/boost/boost/spirit/home/x3/operator/and_predicate.hpp
new file mode 100644
index 0000000000..e0892cd8cf
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/and_predicate.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_AND_PREDICATE_MARCH_23_2007_0617PM)
+#define SPIRIT_AND_PREDICATE_MARCH_23_2007_0617PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Subject>
+ struct and_predicate : unary_parser<Subject, and_predicate<Subject>>
+ {
+ typedef unary_parser<Subject, and_predicate<Subject>> base_type;
+
+ typedef unused_type attribute_type;
+ static bool const has_attribute = false;
+
+ and_predicate(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& /*attr*/) const
+ {
+ Iterator i = first;
+ return this->subject.parse(i, last, context, rcontext, unused);
+ }
+ };
+
+ template <typename Subject>
+ inline and_predicate<typename extension::as_parser<Subject>::value_type>
+ operator&(Subject const& subject)
+ {
+ return {as_parser(subject)};
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/detail/alternative.hpp b/3party/boost/boost/spirit/home/x3/operator/detail/alternative.hpp
new file mode 100644
index 0000000000..54f86e00df
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/detail/alternative.hpp
@@ -0,0 +1,317 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_ALTERNATIVE_DETAIL_JAN_07_2013_1245PM)
+#define SPIRIT_ALTERNATIVE_DETAIL_JAN_07_2013_1245PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/is_variant.hpp>
+#include <boost/spirit/home/x3/support/traits/tuple_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/traits/variant_has_substitute.hpp>
+#include <boost/spirit/home/x3/support/traits/variant_find_substitute.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+#include <boost/variant/variant.hpp>
+
+#include <boost/mpl/copy_if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/joint_view.hpp>
+
+#include <boost/fusion/include/front.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Left, typename Right>
+ struct alternative;
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+ struct pass_variant_unused
+ {
+ typedef unused_type type;
+
+ template <typename T>
+ static unused_type
+ call(T&)
+ {
+ return unused_type();
+ }
+ };
+
+ template <typename Attribute>
+ struct pass_variant_used
+ {
+ typedef Attribute& type;
+
+ static Attribute&
+ call(Attribute& v)
+ {
+ return v;
+ }
+ };
+
+ template <>
+ struct pass_variant_used<unused_type> : pass_variant_unused {};
+
+ template <typename Parser, typename Attribute, typename Context
+ , typename Enable = void>
+ struct pass_parser_attribute
+ {
+ typedef typename
+ traits::attribute_of<Parser, Context>::type
+ attribute_type;
+ typedef typename
+ traits::variant_find_substitute<Attribute, attribute_type>::type
+ substitute_type;
+
+ typedef typename
+ mpl::if_<
+ is_same<Attribute, substitute_type>
+ , Attribute&
+ , substitute_type
+ >::type
+ type;
+
+ template <typename Attribute_>
+ static Attribute_&
+ call(Attribute_& attr, mpl::true_)
+ {
+ return attr;
+ }
+
+ template <typename Attribute_>
+ static type
+ call(Attribute_&, mpl::false_)
+ {
+ return type();
+ }
+
+ template <typename Attribute_>
+ static type
+ call(Attribute_& attr)
+ {
+ return call(attr, is_same<Attribute_, typename remove_reference<type>::type>());
+ }
+ };
+
+ // Pass non-variant attributes as-is
+ template <typename Parser, typename Attribute, typename Context
+ , typename Enable = void>
+ struct pass_non_variant_attribute
+ {
+ typedef Attribute& type;
+
+ static Attribute&
+ call(Attribute& attr)
+ {
+ return attr;
+ }
+ };
+
+ // Unwrap single element sequences
+ template <typename Parser, typename Attribute, typename Context>
+ struct pass_non_variant_attribute<Parser, Attribute, Context,
+ typename enable_if<traits::is_size_one_sequence<Attribute>>::type>
+ {
+ typedef typename remove_reference<
+ typename fusion::result_of::front<Attribute>::type>::type
+ attr_type;
+
+ typedef pass_parser_attribute<Parser, attr_type, Context> pass;
+ typedef typename pass::type type;
+
+ template <typename Attribute_>
+ static type
+ call(Attribute_& attr)
+ {
+ return pass::call(fusion::front(attr));
+ }
+ };
+
+ template <typename Parser, typename Attribute, typename Context>
+ struct pass_parser_attribute<Parser, Attribute, Context,
+ typename enable_if_c<(!traits::is_variant<Attribute>::value)>::type>
+ : pass_non_variant_attribute<Parser, Attribute, Context>
+ {};
+
+ template <typename Parser, typename Context>
+ struct pass_parser_attribute<Parser, unused_type, Context>
+ : pass_variant_unused {};
+
+ template <typename Parser, typename Attribute, typename Context>
+ struct pass_variant_attribute :
+ mpl::if_c<traits::has_attribute<Parser, Context>::value
+ , pass_parser_attribute<Parser, Attribute, Context>
+ , pass_variant_unused>::type
+ {
+ typedef typename mpl::false_ is_alternative;
+ };
+
+ template <typename L, typename R, typename Attribute, typename Context>
+ struct pass_variant_attribute<alternative<L, R>, Attribute, Context> :
+ mpl::if_c<traits::has_attribute<alternative<L, R>, Context>::value
+ , pass_variant_used<Attribute>
+ , pass_variant_unused>::type
+ {
+ typedef typename mpl::true_ is_alternative;
+ };
+
+ template <typename L, typename R, typename C>
+ struct get_alternative_types
+ {
+ typedef
+ mpl::vector<
+ typename traits::attribute_of<L, C>::type
+ , typename traits::attribute_of<R, C>::type
+ >
+ type;
+ };
+
+ template <typename LL, typename LR, typename R, typename C>
+ struct get_alternative_types<alternative<LL, LR>, R, C>
+ {
+ typedef typename
+ mpl::push_back<
+ typename get_alternative_types<LL, LR, C>::type
+ , typename traits::attribute_of<R, C>::type
+ >::type
+ type;
+ };
+
+ template <typename L, typename RL, typename RR, typename C>
+ struct get_alternative_types<L, alternative<RL, RR>, C>
+ {
+ typedef typename
+ mpl::push_front<
+ typename get_alternative_types<RL, RR, C>::type
+ , typename traits::attribute_of<L, C>::type
+ >::type
+ type;
+ };
+
+ template <typename LL, typename LR, typename RL, typename RR, typename C>
+ struct get_alternative_types<alternative<LL, LR>, alternative<RL, RR>, C>
+ {
+ typedef
+ mpl::joint_view<
+ typename get_alternative_types<LL, LR, C>::type
+ , typename get_alternative_types<RL, RR, C>::type
+ >
+ type;
+ };
+
+ template <typename L, typename R, typename C>
+ struct attribute_of_alternative
+ {
+ // Get all alternative attribute types
+ typedef typename get_alternative_types<L, R, C>::type all_types;
+
+ // Filter all unused_types
+ typedef typename
+ mpl::copy_if<
+ all_types
+ , mpl::not_<is_same<mpl::_1, unused_type>>
+ , mpl::back_inserter<mpl::vector<>>
+ >::type
+ filtered_types;
+
+ // Build a variant if filtered_types is not empty,
+ // else just return unused_type
+ typedef typename
+ mpl::eval_if<
+ mpl::empty<filtered_types>
+ , mpl::identity<unused_type>
+ , make_variant_over<filtered_types>
+ >::type
+ type;
+ };
+
+ template <typename IsAlternative>
+ struct move_if_not_alternative
+ {
+ template<typename T1, typename T2>
+ static void call(T1& attr_, T2& attr) {}
+ };
+
+ template <>
+ struct move_if_not_alternative<mpl::false_ /*is alternative*/>
+ {
+ template<typename T1, typename T2>
+ static void call(T1& attr_, T2& attr)
+ {
+ traits::move_to(attr_, attr);
+ }
+ };
+
+ template <typename Parser, typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_alternative(Parser const& p, Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr)
+ {
+ typedef detail::pass_variant_attribute<Parser, Attribute, Context> pass;
+
+ typename pass::type attr_ = pass::call(attr);
+ if (p.parse(first, last, context, rcontext, attr_))
+ {
+ move_if_not_alternative<typename pass::is_alternative>::call(attr_, attr);
+ return true;
+ }
+ return false;
+ }
+
+
+ template <typename Left, typename Right, typename Context, typename RContext>
+ struct parse_into_container_impl<alternative<Left, Right>, Context, RContext>
+ {
+ typedef alternative<Left, Right> parser_type;
+
+ template <typename Iterator, typename Attribute>
+ static bool call(
+ parser_type const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr, mpl::true_)
+ {
+ return parse_alternative(parser, first, last, context, rcontext, attr);
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool call(
+ parser_type const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr, mpl::false_)
+ {
+ return parse_into_container_base_impl<parser_type>::call(
+ parser, first, last, context, rcontext, attr);
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool call(
+ parser_type const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr)
+ {
+ typedef typename
+ traits::attribute_of<parser_type, Context>::type
+ attribute_type;
+
+ return call(parser, first, last, context, rcontext, attr
+ , traits::variant_has_substitute<attribute_type, Attribute>());
+ }
+ };
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/detail/sequence.hpp b/3party/boost/boost/spirit/home/x3/operator/detail/sequence.hpp
new file mode 100644
index 0000000000..1163707128
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/detail/sequence.hpp
@@ -0,0 +1,501 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_SEQUENCE_DETAIL_JAN_06_2013_1015AM)
+#define SPIRIT_SEQUENCE_DETAIL_JAN_06_2013_1015AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+#include <boost/spirit/home/x3/support/traits/make_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/is_substitute.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+
+#include <boost/fusion/include/begin.hpp>
+#include <boost/fusion/include/end.hpp>
+#include <boost/fusion/include/advance.hpp>
+#include <boost/fusion/include/empty.hpp>
+#include <boost/fusion/include/front.hpp>
+#include <boost/fusion/include/iterator_range.hpp>
+#include <boost/fusion/include/as_deque.hpp>
+#include <boost/fusion/include/mpl.hpp>
+
+#include <boost/mpl/copy_if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Left, typename Right>
+ struct sequence;
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+ template <typename Parser, typename Context, typename Enable = void>
+ struct sequence_size
+ {
+ static int const value = traits::has_attribute<Parser, Context>::value;
+ };
+
+ template <typename Parser, typename Context>
+ struct sequence_size_subject
+ : sequence_size<typename Parser::subject_type, Context> {};
+
+ template <typename Parser, typename Context>
+ struct sequence_size<Parser, Context
+ , typename enable_if_c<(Parser::is_pass_through_unary)>::type>
+ : sequence_size_subject<Parser, Context> {};
+
+ template <typename L, typename R, typename Context>
+ struct sequence_size<sequence<L, R>, Context>
+ {
+ static int const value =
+ sequence_size<L, Context>::value +
+ sequence_size<R, Context>::value;
+ };
+
+ struct pass_sequence_attribute_unused
+ {
+ typedef unused_type type;
+
+ template <typename T>
+ static unused_type
+ call(T&)
+ {
+ return unused_type();
+ }
+ };
+
+ template <typename Attribute>
+ struct pass_sequence_attribute_front
+ {
+ typedef typename fusion::result_of::front<Attribute>::type type;
+
+ static typename add_reference<type>::type
+ call(Attribute& attr)
+ {
+ return fusion::front(attr);
+ }
+ };
+
+ template <typename Attribute>
+ struct pass_through_sequence_attribute
+ {
+ typedef Attribute& type;
+
+ template <typename Attribute_>
+ static Attribute_&
+ call(Attribute_& attr)
+ {
+ return attr;
+ }
+ };
+
+ template <typename Parser, typename Attribute>
+ struct pass_sequence_attribute_used :
+ mpl::if_<
+ traits::is_size_one_sequence<Attribute>
+ , pass_sequence_attribute_front<Attribute>
+ , pass_through_sequence_attribute<Attribute>>::type {};
+
+ template <typename Parser, typename Attribute, typename Enable = void>
+ struct pass_sequence_attribute :
+ mpl::if_<
+ fusion::result_of::empty<Attribute>
+ , pass_sequence_attribute_unused
+ , pass_sequence_attribute_used<Parser, Attribute>>::type {};
+
+ template <typename L, typename R, typename Attribute>
+ struct pass_sequence_attribute<sequence<L, R>, Attribute>
+ : pass_through_sequence_attribute<Attribute> {};
+
+ template <typename Parser, typename Attribute>
+ struct pass_sequence_attribute_subject :
+ pass_sequence_attribute<typename Parser::subject_type, Attribute> {};
+
+ template <typename Parser, typename Attribute>
+ struct pass_sequence_attribute<Parser, Attribute
+ , typename enable_if_c<(Parser::is_pass_through_unary)>::type>
+ : pass_sequence_attribute_subject<Parser, Attribute> {};
+
+ template <typename L, typename R, typename Attribute, typename Context
+ , typename Enable = void>
+ struct partition_attribute
+ {
+ static int const l_size = sequence_size<L, Context>::value;
+ static int const r_size = sequence_size<R, Context>::value;
+
+ // If you got an error here, then you are trying to pass
+ // a fusion sequence with the wrong number of elements
+ // as that expected by the (sequence) parser.
+ static_assert(
+ fusion::result_of::size<Attribute>::value == (l_size + r_size)
+ , "Attribute does not have the expected size."
+ );
+
+ typedef typename fusion::result_of::begin<Attribute>::type l_begin;
+ typedef typename fusion::result_of::advance_c<l_begin, l_size>::type l_end;
+ typedef typename fusion::result_of::end<Attribute>::type r_end;
+ typedef fusion::iterator_range<l_begin, l_end> l_part;
+ typedef fusion::iterator_range<l_end, r_end> r_part;
+ typedef pass_sequence_attribute<L, l_part> l_pass;
+ typedef pass_sequence_attribute<R, r_part> r_pass;
+
+ static l_part left(Attribute& s)
+ {
+ auto i = fusion::begin(s);
+ return l_part(i, fusion::advance_c<l_size>(i));
+ }
+
+ static r_part right(Attribute& s)
+ {
+ return r_part(
+ fusion::advance_c<l_size>(fusion::begin(s))
+ , fusion::end(s));
+ }
+ };
+
+ template <typename L, typename R, typename Attribute, typename Context>
+ struct partition_attribute<L, R, Attribute, Context,
+ typename enable_if_c<(!traits::has_attribute<L, Context>::value &&
+ traits::has_attribute<R, Context>::value)>::type>
+ {
+ typedef unused_type l_part;
+ typedef Attribute& r_part;
+ typedef pass_sequence_attribute_unused l_pass;
+ typedef pass_sequence_attribute<R, Attribute> r_pass;
+
+ static unused_type left(Attribute&)
+ {
+ return unused;
+ }
+
+ static Attribute& right(Attribute& s)
+ {
+ return s;
+ }
+ };
+
+ template <typename L, typename R, typename Attribute, typename Context>
+ struct partition_attribute<L, R, Attribute, Context,
+ typename enable_if_c<(traits::has_attribute<L, Context>::value &&
+ !traits::has_attribute<R, Context>::value)>::type>
+ {
+ typedef Attribute& l_part;
+ typedef unused_type r_part;
+ typedef pass_sequence_attribute<L, Attribute> l_pass;
+ typedef pass_sequence_attribute_unused r_pass;
+
+ static Attribute& left(Attribute& s)
+ {
+ return s;
+ }
+
+ static unused_type right(Attribute&)
+ {
+ return unused;
+ }
+ };
+
+ template <typename L, typename R, typename Attribute, typename Context>
+ struct partition_attribute<L, R, Attribute, Context,
+ typename enable_if_c<(!traits::has_attribute<L, Context>::value &&
+ !traits::has_attribute<R, Context>::value)>::type>
+ {
+ typedef unused_type l_part;
+ typedef unused_type r_part;
+ typedef pass_sequence_attribute_unused l_pass;
+ typedef pass_sequence_attribute_unused r_pass;
+
+ static unused_type left(Attribute&)
+ {
+ return unused;
+ }
+
+ static unused_type right(Attribute&)
+ {
+ return unused;
+ }
+ };
+
+ template <typename L, typename R, typename C>
+ struct get_sequence_types
+ {
+ typedef
+ mpl::vector<
+ typename traits::attribute_of<L, C>::type
+ , typename traits::attribute_of<R, C>::type
+ >
+ type;
+ };
+
+ template <typename LL, typename LR, typename R, typename C>
+ struct get_sequence_types<sequence<LL, LR>, R, C>
+ {
+ typedef typename
+ mpl::push_back<
+ typename get_sequence_types<LL, LR, C>::type
+ , typename traits::attribute_of<R, C>::type
+ >::type
+ type;
+ };
+
+ template <typename L, typename RL, typename RR, typename C>
+ struct get_sequence_types<L, sequence<RL, RR>, C>
+ {
+ typedef typename
+ mpl::push_front<
+ typename get_sequence_types<RL, RR, C>::type
+ , typename traits::attribute_of<L, C>::type
+ >::type
+ type;
+ };
+
+ template <typename LL, typename LR, typename RL, typename RR, typename C>
+ struct get_sequence_types<sequence<LL, LR>, sequence<RL, RR>, C>
+ {
+ typedef
+ mpl::joint_view<
+ typename get_sequence_types<LL, LR, C>::type
+ , typename get_sequence_types<RL, RR, C>::type
+ >
+ type;
+ };
+
+ template <typename L, typename R, typename C>
+ struct attribute_of_sequence
+ {
+ // Get all sequence attribute types
+ typedef typename get_sequence_types<L, R, C>::type all_types;
+
+ // Filter all unused_types
+ typedef typename
+ mpl::copy_if<
+ all_types
+ , mpl::not_<is_same<mpl::_1, unused_type>>
+ , mpl::back_inserter<mpl::vector<>>
+ >::type
+ filtered_types;
+
+ // Build a fusion::deque if filtered_types is not empty,
+ // else just return unused_type
+ typedef typename
+ mpl::eval_if<
+ mpl::empty<filtered_types>
+ , mpl::identity<unused_type>
+ , mpl::if_<mpl::equal_to<mpl::size<filtered_types>, mpl::int_<1> >,
+ typename mpl::front<filtered_types>::type
+ , typename fusion::result_of::as_deque<filtered_types>::type >
+ >::type
+ type;
+ };
+
+ template <typename Parser, typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_sequence(
+ Parser const& parser, Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr
+ , traits::tuple_attribute)
+ {
+ typedef typename Parser::left_type Left;
+ typedef typename Parser::right_type Right;
+ typedef partition_attribute<Left, Right, Attribute, Context> partition;
+ typedef typename partition::l_pass l_pass;
+ typedef typename partition::r_pass r_pass;
+
+ typename partition::l_part l_part = partition::left(attr);
+ typename partition::r_part r_part = partition::right(attr);
+ typename l_pass::type l_attr = l_pass::call(l_part);
+ typename r_pass::type r_attr = r_pass::call(r_part);
+
+ Iterator save = first;
+ if (parser.left.parse(first, last, context, rcontext, l_attr)
+ && parser.right.parse(first, last, context, rcontext, r_attr))
+ return true;
+ first = save;
+ return false;
+ }
+
+ template <typename Parser, typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_sequence(
+ Parser const& parser , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr
+ , traits::plain_attribute)
+ {
+ typedef typename Parser::left_type Left;
+ typedef typename Parser::right_type Right;
+ typedef typename traits::attribute_of<Left, Context>::type l_attr_type;
+ typedef typename traits::attribute_of<Right, Context>::type r_attr_type;
+ typedef traits::make_attribute<l_attr_type, Attribute> l_make_attribute;
+ typedef traits::make_attribute<r_attr_type, Attribute> r_make_attribute;
+
+ typename l_make_attribute::type l_attr = l_make_attribute::call(attr);
+ typename r_make_attribute::type r_attr = r_make_attribute::call(attr);
+
+ Iterator save = first;
+ if (parser.left.parse(first, last, context, rcontext, l_attr)
+ && parser.right.parse(first, last, context, rcontext, r_attr))
+ return true;
+ first = save;
+ return false;
+ }
+
+ template <typename Left, typename Right, typename Iterator
+ , typename Context, typename RContext, typename Attribute>
+ bool parse_sequence(
+ Left const& left, Right const& right
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr
+ , traits::container_attribute);
+
+ template <typename Parser, typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_sequence(
+ Parser const& parser , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr
+ , traits::container_attribute)
+ {
+ Iterator save = first;
+ if (parse_into_container(parser.left, first, last, context, rcontext, attr)
+ && parse_into_container(parser.right, first, last, context, rcontext, attr))
+ return true;
+ first = save;
+ return false;
+ }
+
+ template <typename Parser, typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_sequence_assoc(
+ Parser const& parser , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr, mpl::false_ /*should_split*/)
+ {
+ return parse_into_container(parser, first, last, context, rcontext, attr);
+ }
+
+ template <typename Parser, typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_sequence_assoc(
+ Parser const& parser , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr, mpl::true_ /*should_split*/)
+ {
+ Iterator save = first;
+ if (parser.left.parse( first, last, context, rcontext, attr)
+ && parser.right.parse(first, last, context, rcontext, attr))
+ return true;
+ first = save;
+ return false;
+ }
+
+ template <typename Parser, typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_sequence(
+ Parser const& parser, Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr
+ , traits::associative_attribute)
+ {
+ // we can come here in 2 cases:
+ // - when sequence is key >> value and therefore must
+ // be parsed with tuple synthesized attribute and then
+ // that tuple is used to save into associative attribute provided here.
+ // Example: key >> value;
+ //
+ // - when either this->left or this->right provides full key-value
+ // pair (like in case 1) and another one provides nothing.
+ // Example: eps >> rule<class x; fusion::map<...> >
+ //
+ // first case must be parsed as whole, and second one should
+ // be parsed separately for left and right.
+
+ typedef typename traits::attribute_of<
+ decltype(parser.left), Context>::type l_attr_type;
+ typedef typename traits::attribute_of<
+ decltype(parser.right), Context>::type r_attr_type;
+
+ typedef typename
+ mpl::or_<
+ is_same<l_attr_type, unused_type>
+ , is_same<r_attr_type, unused_type> >
+ should_split;
+
+ return parse_sequence_assoc(parser, first, last, context, rcontext, attr
+ , should_split());
+ }
+
+ template <typename Left, typename Right, typename Context, typename RContext>
+ struct parse_into_container_impl<sequence<Left, Right>, Context, RContext>
+ {
+ typedef sequence<Left, Right> parser_type;
+
+ template <typename Iterator, typename Attribute>
+ static bool call(
+ parser_type const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr, mpl::false_)
+ {
+ // inform user what went wrong if we jumped here in attempt to
+ // parse incompatible sequence into fusion::map
+ static_assert(!is_same< typename traits::attribute_category<Attribute>::type,
+ traits::associative_attribute>::value,
+ "To parse directly into fusion::map sequence must produce tuple attribute "
+ "where type of first element is existing key in fusion::map and second element "
+ "is value to be stored under that key");
+
+ Attribute attr_;
+ if (!parse_sequence(parser
+ , first, last, context, rcontext, attr_, traits::container_attribute()))
+ {
+ return false;
+ }
+ traits::append(attr, traits::begin(attr_), traits::end(attr_));
+ return true;
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool call(
+ parser_type const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr, mpl::true_)
+ {
+ return parse_into_container_base_impl<parser_type>::call(
+ parser, first, last, context, rcontext, attr);
+ }
+
+ template <typename Iterator, typename Attribute>
+ static bool call(
+ parser_type const& parser
+ , Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr)
+ {
+ typedef typename
+ traits::attribute_of<parser_type, Context>::type
+ attribute_type;
+
+ typedef typename
+ traits::container_value<Attribute>::type
+ value_type;
+
+ return call(parser, first, last, context, rcontext, attr
+ , typename traits::is_substitute<attribute_type, value_type>::type());
+ }
+ };
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/difference.hpp b/3party/boost/boost/spirit/home/x3/operator/difference.hpp
new file mode 100644
index 0000000000..13a9274de0
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/difference.hpp
@@ -0,0 +1,75 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_DIFFERENCE_FEBRUARY_11_2007_1250PM)
+#define SPIRIT_DIFFERENCE_FEBRUARY_11_2007_1250PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Left, typename Right>
+ struct difference : binary_parser<Left, Right, difference<Left, Right>>
+ {
+ typedef binary_parser<Left, Right, difference<Left, Right>> base_type;
+ static bool const handles_container = Left::handles_container;
+
+ difference(Left const& left, Right const& right)
+ : base_type(left, right) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ // Try Right first
+ Iterator start = first;
+ if (this->right.parse(first, last, context, rcontext, unused))
+ {
+ // Right succeeds, we fail.
+ first = start;
+ return false;
+ }
+ // Right fails, now try Left
+ return this->left.parse(first, last, context, rcontext, attr);
+ }
+
+ template <typename Left_, typename Right_>
+ difference<Left_, Right_>
+ make(Left_ const& left, Right_ const& right) const
+ {
+ return difference<Left_, Right_>(left, right);
+ }
+ };
+
+ template <typename Left, typename Right>
+ inline difference<
+ typename extension::as_parser<Left>::value_type
+ , typename extension::as_parser<Right>::value_type>
+ operator-(Left const& left, Right const& right)
+ {
+ return {as_parser(left), as_parser(right)};
+ }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Left, typename Right, typename Context>
+ struct attribute_of<x3::difference<Left, Right>, Context>
+ : attribute_of<Left, Context> {};
+
+ template <typename Left, typename Right, typename Context>
+ struct has_attribute<x3::difference<Left, Right>, Context>
+ : has_attribute<Left, Context> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/kleene.hpp b/3party/boost/boost/spirit/home/x3/operator/kleene.hpp
new file mode 100644
index 0000000000..7e02bf4a02
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/kleene.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+=============================================================================*/
+#if !defined(SPIRIT_KLEENE_JANUARY_07_2007_0818AM)
+#define SPIRIT_KLEENE_JANUARY_07_2007_0818AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Subject>
+ struct kleene : unary_parser<Subject, kleene<Subject>>
+ {
+ typedef unary_parser<Subject, kleene<Subject>> base_type;
+ static bool const handles_container = true;
+
+ kleene(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ while (detail::parse_into_container(
+ this->subject, first, last, context, rcontext, attr))
+ ;
+ return true;
+ }
+ };
+
+ template <typename Subject>
+ inline kleene<typename extension::as_parser<Subject>::value_type>
+ operator*(Subject const& subject)
+ {
+ return {as_parser(subject)};
+ }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Subject, typename Context>
+ struct attribute_of<x3::kleene<Subject>, Context>
+ : build_container<
+ typename attribute_of<Subject, Context>::type> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/list.hpp b/3party/boost/boost/spirit/home/x3/operator/list.hpp
new file mode 100644
index 0000000000..a463a7f9e0
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/list.hpp
@@ -0,0 +1,73 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+=============================================================================*/
+#if !defined(SPIRIT_LIST_MARCH_24_2007_1031AM)
+#define SPIRIT_LIST_MARCH_24_2007_1031AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Left, typename Right>
+ struct list : binary_parser<Left, Right, list<Left, Right>>
+ {
+ typedef binary_parser<Left, Right, list<Left, Right>> base_type;
+ static bool const handles_container = true;
+ static bool const has_attribute = true;
+
+ list(Left const& left, Right const& right)
+ : base_type(left, right) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ // in order to succeed we need to match at least one element
+ if (!detail::parse_into_container(
+ this->left, first, last, context, rcontext, attr))
+ return false;
+
+ Iterator save = first;
+ while (this->right.parse(first, last, context, rcontext, unused)
+ && detail::parse_into_container(
+ this->left, first, last, context, rcontext, attr))
+ {
+ save = first;
+ }
+
+ first = save;
+ return true;
+ }
+ };
+
+ template <typename Left, typename Right>
+ inline list<
+ typename extension::as_parser<Left>::value_type
+ , typename extension::as_parser<Right>::value_type>
+ operator%(Left const& left, Right const& right)
+ {
+ return {as_parser(left), as_parser(right)};
+ }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Left, typename Right, typename Context>
+ struct attribute_of<x3::list<Left, Right>, Context>
+ : traits::build_container<
+ typename attribute_of<Left, Context>::type> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/not_predicate.hpp b/3party/boost/boost/spirit/home/x3/operator/not_predicate.hpp
new file mode 100644
index 0000000000..38b24bd2e2
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/not_predicate.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_NOT_PREDICATE_MARCH_23_2007_0618PM)
+#define SPIRIT_NOT_PREDICATE_MARCH_23_2007_0618PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Subject>
+ struct not_predicate : unary_parser<Subject, not_predicate<Subject>>
+ {
+ typedef unary_parser<Subject, not_predicate<Subject>> base_type;
+
+ typedef unused_type attribute_type;
+ static bool const has_attribute = false;
+
+ not_predicate(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& /*attr*/) const
+ {
+ Iterator i = first;
+ return !this->subject.parse(i, last, context, rcontext, unused);
+ }
+ };
+
+ template <typename Subject>
+ inline not_predicate<typename extension::as_parser<Subject>::value_type>
+ operator!(Subject const& subject)
+ {
+ return {as_parser(subject)};
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/optional.hpp b/3party/boost/boost/spirit/home/x3/operator/optional.hpp
new file mode 100644
index 0000000000..16432f89d1
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/optional.hpp
@@ -0,0 +1,86 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+=============================================================================*/
+#if !defined(SPIRIT_OPTIONAL_MARCH_23_2007_1117PM)
+#define SPIRIT_OPTIONAL_MARCH_23_2007_1117PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/proxy.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/traits/optional_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Subject>
+ struct optional : proxy<Subject, optional<Subject>>
+ {
+ typedef proxy<Subject, optional<Subject>> base_type;
+ static bool const handles_container = true;
+
+ optional(Subject const& subject)
+ : base_type(subject) {}
+
+ using base_type::parse_subject;
+
+ // Attribute is a container
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_subject(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr
+ , traits::container_attribute) const
+ {
+ detail::parse_into_container(
+ this->subject, first, last, context, rcontext, attr);
+ return true;
+ }
+
+ // Attribute is an optional
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse_subject(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr
+ , traits::optional_attribute) const
+ {
+ typedef typename
+ x3::traits::optional_value<Attribute>::type
+ value_type;
+
+ // create a local value
+ value_type val = value_type();
+
+ if (this->subject.parse(first, last, context, rcontext, val))
+ {
+ // assign the parsed value into our attribute
+ x3::traits::move_to(val, attr);
+ }
+ return true;
+ }
+ };
+
+ template <typename Subject>
+ inline optional<typename extension::as_parser<Subject>::value_type>
+ operator-(Subject const& subject)
+ {
+ return {as_parser(subject)};
+ }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Subject, typename Context>
+ struct attribute_of<x3::optional<Subject>, Context>
+ : build_optional<
+ typename attribute_of<Subject, Context>::type> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/plus.hpp b/3party/boost/boost/spirit/home/x3/operator/plus.hpp
new file mode 100644
index 0000000000..32c7dbfffb
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/plus.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+=============================================================================*/
+#if !defined(SPIRIT_PLUS_MARCH_13_2007_0127PM)
+#define SPIRIT_PLUS_MARCH_13_2007_0127PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Subject>
+ struct plus : unary_parser<Subject, plus<Subject>>
+ {
+ typedef unary_parser<Subject, plus<Subject>> base_type;
+ static bool const handles_container = true;
+
+ plus(Subject const& subject)
+ : base_type(subject) {}
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ if (!detail::parse_into_container(
+ this->subject, first, last, context, rcontext, attr))
+ return false;
+
+ while (detail::parse_into_container(
+ this->subject, first, last, context, rcontext, attr))
+ ;
+ return true;
+ }
+ };
+
+ template <typename Subject>
+ inline plus<typename extension::as_parser<Subject>::value_type>
+ operator+(Subject const& subject)
+ {
+ return {as_parser(subject)};
+ }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Subject, typename Context>
+ struct attribute_of<x3::plus<Subject>, Context>
+ : build_container<
+ typename attribute_of<Subject, Context>::type> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/operator/sequence.hpp b/3party/boost/boost/spirit/home/x3/operator/sequence.hpp
new file mode 100644
index 0000000000..23d5e3d8d9
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/operator/sequence.hpp
@@ -0,0 +1,79 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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(SPIRIT_SEQUENCE_JAN_06_2013_1015AM)
+#define SPIRIT_SEQUENCE_JAN_06_2013_1015AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/operator/detail/sequence.hpp>
+#include <boost/spirit/home/x3/directive/expect.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Left, typename Right>
+ struct sequence : binary_parser<Left, Right, sequence<Left, Right>>
+ {
+ typedef binary_parser<Left, Right, sequence<Left, Right>> base_type;
+
+ sequence(Left left, Right right)
+ : base_type(left, right) {}
+
+ template <typename Iterator, typename Context, typename RContext>
+ bool parse(
+ Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, unused_type) const
+ {
+ Iterator save = first;
+ if (this->left.parse(first, last, context, rcontext, unused)
+ && this->right.parse(first, last, context, rcontext, unused))
+ return true;
+ first = save;
+ return false;
+ }
+
+ template <typename Iterator, typename Context
+ , typename RContext, typename Attribute>
+ bool parse(
+ Iterator& first, Iterator const& last
+ , Context const& context, RContext& rcontext, Attribute& attr) const
+ {
+ return detail::parse_sequence(*this, first, last, context, rcontext, attr
+ , typename traits::attribute_category<Attribute>::type());
+ }
+ };
+
+ template <typename Left, typename Right>
+ inline sequence<
+ typename extension::as_parser<Left>::value_type
+ , typename extension::as_parser<Right>::value_type>
+ operator>>(Left const& left, Right const& right)
+ {
+ return {as_parser(left), as_parser(right)};
+ }
+
+ template <typename Left, typename Right>
+ inline sequence<
+ typename extension::as_parser<Left>::value_type
+ , expect_directive<typename extension::as_parser<Right>::value_type>>
+ operator>(Left const& left, Right const& right)
+ {
+ return {as_parser(left), as_parser(right)};
+ }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Left, typename Right, typename Context>
+ struct attribute_of<x3::sequence<Left, Right>, Context>
+ : x3::detail::attribute_of_sequence<Left, Right, Context> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/string.hpp b/3party/boost/boost/spirit/home/x3/string.hpp
new file mode 100644
index 0000000000..e0f5c6ebac
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/string.hpp
@@ -0,0 +1,17 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_STRING_FEBRUARY_03_2007_0355PM)
+#define BOOST_SPIRIT_X3_STRING_FEBRUARY_03_2007_0355PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/literal_string.hpp>
+#include <boost/spirit/home/x3/string/symbols.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/string/detail/string_parse.hpp b/3party/boost/boost/spirit/home/x3/string/detail/string_parse.hpp
new file mode 100644
index 0000000000..f7a77df804
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/string/detail/string_parse.hpp
@@ -0,0 +1,89 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_STRING_PARSE_APR_18_2006_1125PM)
+#define BOOST_SPIRIT_X3_STRING_PARSE_APR_18_2006_1125PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+ template <typename Char, typename Iterator, typename Attribute>
+ inline bool string_parse(
+ Char const* str
+ , Iterator& first, Iterator const& last, Attribute& attr)
+ {
+ Iterator i = first;
+ Char ch = *str;
+
+ for (; !!ch; ++i)
+ {
+ if (i == last || (ch != *i))
+ return false;
+ ch = *++str;
+ }
+
+ x3::traits::move_to(first, i, attr);
+ first = i;
+ return true;
+ }
+
+ template <typename String, typename Iterator, typename Attribute>
+ inline bool string_parse(
+ String const& str
+ , Iterator& first, Iterator const& last, Attribute& attr)
+ {
+ Iterator i = first;
+ typename String::const_iterator stri = str.begin();
+ typename String::const_iterator str_last = str.end();
+
+ for (; stri != str_last; ++stri, ++i)
+ if (i == last || (*stri != *i))
+ return false;
+ x3::traits::move_to(first, i, attr);
+ first = i;
+ return true;
+ }
+
+ template <typename Char, typename Iterator, typename Attribute>
+ inline bool string_parse(
+ Char const* uc_i, Char const* lc_i
+ , Iterator& first, Iterator const& last, Attribute& attr)
+ {
+ Iterator i = first;
+
+ for (; *uc_i && *lc_i; ++uc_i, ++lc_i, ++i)
+ if (i == last || ((*uc_i != *i) && (*lc_i != *i)))
+ return false;
+ x3::traits::move_to(first, i, attr);
+ first = i;
+ return true;
+ }
+
+ template <typename String, typename Iterator, typename Attribute>
+ inline bool string_parse(
+ String const& ucstr, String const& lcstr
+ , Iterator& first, Iterator const& last, Attribute& attr)
+ {
+ typename String::const_iterator uc_i = ucstr.begin();
+ typename String::const_iterator uc_last = ucstr.end();
+ typename String::const_iterator lc_i = lcstr.begin();
+ Iterator i = first;
+
+ for (; uc_i != uc_last; ++uc_i, ++lc_i, ++i)
+ if (i == last || ((*uc_i != *i) && (*lc_i != *i)))
+ return false;
+ x3::traits::move_to(first, i, attr);
+ first = i;
+ return true;
+ }
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/string/detail/tst.hpp b/3party/boost/boost/spirit/home/x3/string/detail/tst.hpp
new file mode 100644
index 0000000000..df61f4dec7
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/string/detail/tst.hpp
@@ -0,0 +1,213 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_TST_MARCH_09_2007_0905AM)
+#define BOOST_SPIRIT_X3_TST_MARCH_09_2007_0905AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/call_traits.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/foreach.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+ // This file contains low level TST routines, not for
+ // public consumption.
+
+ template <typename Char, typename T>
+ struct tst_node
+ {
+ tst_node(Char id)
+ : id(id), data(0), lt(0), eq(0), gt(0)
+ {
+ }
+
+ template <typename Alloc>
+ static void
+ destruct_node(tst_node* p, Alloc* alloc)
+ {
+ if (p)
+ {
+ if (p->data)
+ alloc->delete_data(p->data);
+ destruct_node(p->lt, alloc);
+ destruct_node(p->eq, alloc);
+ destruct_node(p->gt, alloc);
+ alloc->delete_node(p);
+ }
+ }
+
+ template <typename Alloc>
+ static tst_node*
+ clone_node(tst_node* p, Alloc* alloc)
+ {
+ if (p)
+ {
+ tst_node* clone = alloc->new_node(p->id);
+ if (p->data)
+ clone->data = alloc->new_data(*p->data);
+ clone->lt = clone_node(p->lt, alloc);
+ clone->eq = clone_node(p->eq, alloc);
+ clone->gt = clone_node(p->gt, alloc);
+ return clone;
+ }
+ return 0;
+ }
+
+ template <typename Iterator, typename Filter>
+ static T*
+ find(tst_node* start, Iterator& first, Iterator last, Filter filter)
+ {
+ if (first == last)
+ return 0;
+
+ Iterator i = first;
+ Iterator latest = first;
+ tst_node* p = start;
+ T* found = 0;
+
+ while (p && i != last)
+ {
+ typename
+ boost::detail::iterator_traits<Iterator>::value_type
+ c = filter(*i); // filter only the input
+
+ if (c == p->id)
+ {
+ if (p->data)
+ {
+ found = p->data;
+ latest = i;
+ }
+ p = p->eq;
+ i++;
+ }
+ else if (c < p->id)
+ {
+ p = p->lt;
+ }
+ else
+ {
+ p = p->gt;
+ }
+ }
+
+ if (found)
+ first = ++latest; // one past the last matching char
+ return found;
+ }
+
+ template <typename Iterator, typename Alloc>
+ static T*
+ add(
+ tst_node*& start
+ , Iterator first
+ , Iterator last
+ , typename boost::call_traits<T>::param_type val
+ , Alloc* alloc)
+ {
+ if (first == last)
+ return 0;
+
+ tst_node** pp = &start;
+ for(;;)
+ {
+ typename
+ boost::detail::iterator_traits<Iterator>::value_type
+ c = *first;
+
+ if (*pp == 0)
+ *pp = alloc->new_node(c);
+ tst_node* p = *pp;
+
+ if (c == p->id)
+ {
+ if (++first == last)
+ {
+ if (p->data == 0)
+ p->data = alloc->new_data(val);
+ return p->data;
+ }
+ pp = &p->eq;
+ }
+ else if (c < p->id)
+ {
+ pp = &p->lt;
+ }
+ else
+ {
+ pp = &p->gt;
+ }
+ }
+ }
+
+ template <typename Iterator, typename Alloc>
+ static void
+ remove(tst_node*& p, Iterator first, Iterator last, Alloc* alloc)
+ {
+ if (p == 0 || first == last)
+ return;
+
+ typename
+ boost::detail::iterator_traits<Iterator>::value_type
+ c = *first;
+
+ if (c == p->id)
+ {
+ if (++first == last)
+ {
+ if (p->data)
+ {
+ alloc->delete_data(p->data);
+ p->data = 0;
+ }
+ }
+ remove(p->eq, first, last, alloc);
+ }
+ else if (c < p->id)
+ {
+ remove(p->lt, first, last, alloc);
+ }
+ else
+ {
+ remove(p->gt, first, last, alloc);
+ }
+
+ if (p->data == 0 && p->lt == 0 && p->eq == 0 && p->gt == 0)
+ {
+ alloc->delete_node(p);
+ p = 0;
+ }
+ }
+
+ template <typename F>
+ static void
+ for_each(tst_node* p, std::basic_string<Char> prefix, F f)
+ {
+ if (p)
+ {
+ for_each(p->lt, prefix, f);
+ std::basic_string<Char> s = prefix + p->id;
+ for_each(p->eq, s, f);
+ if (p->data)
+ f(s, *p->data);
+ for_each(p->gt, prefix, f);
+ }
+ }
+
+ Char id; // the node's identity character
+ T* data; // optional data
+ tst_node* lt; // left pointer
+ tst_node* eq; // middle pointer
+ tst_node* gt; // right pointer
+ };
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/string/literal_string.hpp b/3party/boost/boost/spirit/home/x3/string/literal_string.hpp
new file mode 100644
index 0000000000..bf05a9a08e
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/string/literal_string.hpp
@@ -0,0 +1,124 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_LITERAL_STRING_APR_18_2006_1125PM)
+#define BOOST_SPIRIT_X3_LITERAL_STRING_APR_18_2006_1125PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/string/detail/string_parse.hpp>
+#include <boost/spirit/home/x3/support/utility/utf8.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/char_encoding/standard.hpp>
+#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <string>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename String, typename Encoding,
+ typename Attribute = std::basic_string<typename Encoding::char_type>>
+ struct literal_string : parser<literal_string<String, Encoding, Attribute>>
+ {
+ typedef typename Encoding::char_type char_type;
+ typedef Encoding encoding;
+ typedef Attribute attribute_type;
+ static bool const has_attribute =
+ !is_same<unused_type, attribute_type>::value;
+ static bool const handles_container = has_attribute;
+
+ literal_string(typename add_reference<String>::type str)
+ : str(str)
+ {}
+
+ template <typename Iterator, typename Context, typename Attribute_>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute_& attr) const
+ {
+ x3::skip_over(first, last, context);
+ return detail::string_parse(str, first, last, attr);
+ }
+
+ String str;
+ };
+
+ namespace standard
+ {
+ inline literal_string<char const*, char_encoding::standard>
+ string(char const* s)
+ {
+ return literal_string<char const*, char_encoding::standard>(s);
+ }
+ }
+ using standard::string;
+
+ namespace extension
+ {
+ template <int N>
+ struct as_parser<char[N]>
+ {
+ typedef
+ literal_string<
+ char const*, char_encoding::standard, unused_type>
+ type;
+
+ typedef type value_type;
+
+ static type call(char const* s)
+ {
+ return type(s);
+ }
+ };
+
+ template <int N>
+ struct as_parser<char const[N]> : as_parser<char[N]> {};
+
+ template <int N>
+ struct as_parser<wchar_t[N]>
+ {
+ typedef
+ literal_string<
+ wchar_t const*, char_encoding::standard_wide, unused_type>
+ type;
+
+ typedef type value_type;
+
+ static type call(wchar_t const* s)
+ {
+ return type(s);
+ }
+ };
+
+ template <int N>
+ struct as_parser<wchar_t const[N]> : as_parser<wchar_t[N]> {};
+ }
+
+ using standard::string;
+
+ inline literal_string<char const*, char_encoding::standard, unused_type>
+ lit(char const* s)
+ {
+ return literal_string<char const*, char_encoding::standard, unused_type>(s);
+ }
+
+ template <typename String, typename Encoding, typename Attribute>
+ struct get_info<literal_string<String, Encoding, Attribute>>
+ {
+ typedef std::string result_type;
+ std::string operator()(literal_string<String, Encoding, Attribute> const& p) const
+ {
+ return '"' + to_utf8(p.str) + '"';
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/string/symbols.hpp b/3party/boost/boost/spirit/home/x3/string/symbols.hpp
new file mode 100644
index 0000000000..b35a00a121
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/string/symbols.hpp
@@ -0,0 +1,358 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Carl Barron
+
+ 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_SPIRIT_X3_SYMBOLS_MARCH_11_2007_1055AM)
+#define BOOST_SPIRIT_X3_SYMBOLS_MARCH_11_2007_1055AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/string/tst.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/string_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+#include <boost/fusion/include/at.hpp>
+#include <boost/range.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include <initializer_list>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <
+ typename Char = char
+ , typename T = unused_type
+ , typename Lookup = tst<Char, T>
+ , typename Filter = tst_pass_through>
+ struct symbols : parser<symbols<Char, T, Lookup, Filter>>
+ {
+ typedef Char char_type; // the character type
+ typedef T value_type; // the value associated with each entry
+ typedef symbols<Char, T, Lookup, Filter> this_type;
+ typedef value_type attribute_type;
+
+ static bool const has_attribute =
+ !is_same<unused_type, attribute_type>::value;
+ static bool const handles_container =
+ traits::is_container<attribute_type>::value;
+
+ symbols(std::string const& name = "symbols")
+ : add(*this)
+ , remove(*this)
+ , lookup(new Lookup())
+ , name_(name)
+ {
+ }
+
+ symbols(symbols const& syms)
+ : add(*this)
+ , remove(*this)
+ , lookup(syms.lookup)
+ , name_(syms.name_)
+ {
+ }
+
+ template <typename Filter_>
+ symbols(symbols<Char, T, Lookup, Filter_> const& syms)
+ : add(*this)
+ , remove(*this)
+ , lookup(syms.lookup)
+ , name_(syms.name_)
+ {
+ }
+
+ template <typename Symbols>
+ symbols(Symbols const& syms, std::string const& name = "symbols")
+ : add(*this)
+ , remove(*this)
+ , lookup(new Lookup())
+ , name_(name)
+ {
+ typename range_const_iterator<Symbols>::type si = boost::begin(syms);
+ while (si != boost::end(syms))
+ add(*si++);
+ }
+
+ template <typename Symbols, typename Data>
+ symbols(Symbols const& syms, Data const& data
+ , std::string const& name = "symbols")
+ : add(*this)
+ , remove(*this)
+ , lookup(new Lookup())
+ , name_(name)
+ {
+ typename range_const_iterator<Symbols>::type si = boost::begin(syms);
+ typename range_const_iterator<Data>::type di = boost::begin(data);
+ while (si != boost::end(syms))
+ add(*si++, *di++);
+ }
+
+ symbols(std::initializer_list<std::pair<Char const*, T>> syms
+ , std::string const & name="symbols")
+ : add(*this)
+ , remove(*this)
+ , lookup(new Lookup())
+ , name_(name)
+ {
+ typedef std::initializer_list<std::pair<Char const*, T>> symbols_t;
+ typename range_const_iterator<symbols_t>::type si = boost::begin(syms);
+ for (;si != boost::end(syms); ++si)
+ add(si->first, si->second);
+ }
+
+ symbols(std::initializer_list<Char const*> syms
+ , std::string const &name="symbols")
+ : add(*this)
+ , remove(*this)
+ , lookup(new Lookup())
+ , name_(name)
+ {
+ typedef std::initializer_list<Char const*> symbols_t;
+ typename range_const_iterator<symbols_t>::type si = boost::begin(syms);
+ while (si != boost::end(syms))
+ add(*si++);
+ }
+
+ symbols&
+ operator=(symbols const& rhs)
+ {
+ name_ = rhs.name_;
+ lookup = rhs.lookup;
+ return *this;
+ }
+
+ template <typename Filter_>
+ symbols&
+ operator=(symbols<Char, T, Lookup, Filter_> const& rhs)
+ {
+ name_ = rhs.name_;
+ lookup = rhs.lookup;
+ return *this;
+ }
+
+ void clear()
+ {
+ lookup->clear();
+ }
+
+ struct adder;
+ struct remover;
+
+ template <typename Str>
+ adder const&
+ operator=(Str const& str)
+ {
+ lookup->clear();
+ return add(str);
+ }
+
+ template <typename Str>
+ friend adder const&
+ operator+=(symbols& sym, Str const& str)
+ {
+ return sym.add(str);
+ }
+
+ template <typename Str>
+ friend remover const&
+ operator-=(symbols& sym, Str const& str)
+ {
+ return sym.remove(str);
+ }
+
+ template <typename F>
+ void for_each(F f) const
+ {
+ lookup->for_each(f);
+ }
+
+ template <typename Str>
+ value_type& at(Str const& str)
+ {
+ return *lookup->add(traits::get_string_begin<Char>(str)
+ , traits::get_string_end<Char>(str), T());
+ }
+
+ template <typename Iterator>
+ value_type* prefix_find(Iterator& first, Iterator const& last)
+ {
+ return lookup->find(first, last, Filter());
+ }
+
+ template <typename Iterator>
+ value_type const* prefix_find(Iterator& first, Iterator const& last) const
+ {
+ return lookup->find(first, last, Filter());
+ }
+
+ template <typename Str>
+ value_type* find(Str const& str)
+ {
+ return find_impl(traits::get_string_begin<Char>(str)
+ , traits::get_string_end<Char>(str));
+ }
+
+ template <typename Str>
+ value_type const* find(Str const& str) const
+ {
+ return find_impl(traits::get_string_begin<Char>(str)
+ , traits::get_string_end<Char>(str));
+ }
+
+ private:
+ template <typename Iterator>
+ value_type* find_impl(Iterator begin, Iterator end)
+ {
+ value_type* r = lookup->find(begin, end, Filter());
+ return begin == end ? r : 0;
+ }
+
+ template <typename Iterator>
+ value_type const* find_impl(Iterator begin, Iterator end) const
+ {
+ value_type const* r = lookup->find(begin, end, Filter());
+ return begin == end ? r : 0;
+ }
+
+ public:
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute& attr) const
+ {
+ x3::skip_over(first, last, context);
+
+ if (value_type* val_ptr
+ = lookup->find(first, last, Filter()))
+ {
+ x3::traits::move_to(*val_ptr, attr);
+ return true;
+ }
+ return false;
+ }
+
+ void name(std::string const &str)
+ {
+ name_ = str;
+ }
+ std::string const &name() const
+ {
+ return name_;
+ }
+
+ struct adder
+ {
+ template <typename, typename = unused_type, typename = unused_type>
+ struct result { typedef adder const& type; };
+
+ adder(symbols& sym)
+ : sym(sym)
+ {
+ }
+
+ template <typename Iterator>
+ adder const&
+ operator()(Iterator first, Iterator last, T const& val) const
+ {
+ sym.lookup->add(first, last, val);
+ return *this;
+ }
+
+ template <typename Str>
+ adder const&
+ operator()(Str const& s, T const& val = T()) const
+ {
+ sym.lookup->add(traits::get_string_begin<Char>(s)
+ , traits::get_string_end<Char>(s), val);
+ return *this;
+ }
+
+ template <typename Str>
+ adder const&
+ operator,(Str const& s) const
+ {
+ sym.lookup->add(traits::get_string_begin<Char>(s)
+ , traits::get_string_end<Char>(s), T());
+ return *this;
+ }
+
+ symbols& sym;
+ };
+
+ struct remover
+ {
+ template <typename, typename = unused_type, typename = unused_type>
+ struct result { typedef remover const& type; };
+
+ remover(symbols& sym)
+ : sym(sym)
+ {
+ }
+
+ template <typename Iterator>
+ remover const&
+ operator()(Iterator const& first, Iterator const& last) const
+ {
+ sym.lookup->remove(first, last);
+ return *this;
+ }
+
+ template <typename Str>
+ remover const&
+ operator()(Str const& s) const
+ {
+ sym.lookup->remove(traits::get_string_begin<Char>(s)
+ , traits::get_string_end<Char>(s));
+ return *this;
+ }
+
+ template <typename Str>
+ remover const&
+ operator,(Str const& s) const
+ {
+ sym.lookup->remove(traits::get_string_begin<Char>(s)
+ , traits::get_string_end<Char>(s));
+ return *this;
+ }
+
+ symbols& sym;
+ };
+
+ adder add;
+ remover remove;
+ shared_ptr<Lookup> lookup;
+ std::string name_;
+ };
+
+ template <typename Char, typename T, typename Lookup, typename Filter>
+ struct get_info<symbols<Char, T, Lookup, Filter>>
+ {
+ typedef std::string result_type;
+ result_type operator()(symbols< Char, T
+ , Lookup, Filter
+ > const& symbols) const
+ {
+ return symbols.name();
+ }
+ };
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/string/tst.hpp b/3party/boost/boost/spirit/home/x3/string/tst.hpp
new file mode 100644
index 0000000000..5379b032be
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/string/tst.hpp
@@ -0,0 +1,137 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_TST_JUNE_03_2007_1031AM)
+#define BOOST_SPIRIT_X3_TST_JUNE_03_2007_1031AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/detail/tst.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ struct tst_pass_through
+ {
+ template <typename Char>
+ Char operator()(Char ch) const
+ {
+ return ch;
+ }
+ };
+
+ template <typename Char, typename T>
+ struct tst
+ {
+ typedef Char char_type; // the character type
+ typedef T value_type; // the value associated with each entry
+ typedef detail::tst_node<Char, T> node;
+
+ tst()
+ : root(0)
+ {
+ }
+
+ ~tst()
+ {
+ clear();
+ }
+
+ tst(tst const& rhs)
+ : root(0)
+ {
+ copy(rhs);
+ }
+
+ tst& operator=(tst const& rhs)
+ {
+ return assign(rhs);
+ }
+
+ template <typename Iterator, typename Filter>
+ T* find(Iterator& first, Iterator last, Filter filter) const
+ {
+ return node::find(root, first, last, filter);
+ }
+
+ template <typename Iterator>
+ T* find(Iterator& first, Iterator last) const
+ {
+ return find(first, last, tst_pass_through());
+ }
+
+ template <typename Iterator>
+ T* add(
+ Iterator first
+ , Iterator last
+ , typename boost::call_traits<T>::param_type val)
+ {
+ return node::add(root, first, last, val, this);
+ }
+
+ template <typename Iterator>
+ void remove(Iterator first, Iterator last)
+ {
+ node::remove(root, first, last, this);
+ }
+
+ void clear()
+ {
+ node::destruct_node(root, this);
+ root = 0;
+ }
+
+ template <typename F>
+ void for_each(F f) const
+ {
+ node::for_each(root, std::basic_string<Char>(), f);
+ }
+
+ private:
+
+ friend struct detail::tst_node<Char, T>;
+
+ void copy(tst const& rhs)
+ {
+ root = node::clone_node(rhs.root, this);
+ }
+
+ tst& assign(tst const& rhs)
+ {
+ if (this != &rhs)
+ {
+ clear();
+ copy(rhs);
+ }
+ return *this;
+ }
+
+ node* root;
+
+ node* new_node(Char id)
+ {
+ return new node(id);
+ }
+
+ T* new_data(typename boost::call_traits<T>::param_type val)
+ {
+ return new T(val);
+ }
+
+ void delete_node(node* p)
+ {
+ delete p;
+ }
+
+ void delete_data(T* p)
+ {
+ delete p;
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/string/tst_map.hpp b/3party/boost/boost/spirit/home/x3/string/tst_map.hpp
new file mode 100644
index 0000000000..2501324de6
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/string/tst_map.hpp
@@ -0,0 +1,216 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_TST_MAP_JUNE_03_2007_1143AM)
+#define BOOST_SPIRIT_X3_TST_MAP_JUNE_03_2007_1143AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/detail/tst.hpp>
+#include <unordered_map>
+#include <boost/pool/object_pool.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ struct tst_pass_through; // declared in tst.hpp
+
+ template <typename Char, typename T>
+ struct tst_map
+ {
+ typedef Char char_type; // the character type
+ typedef T value_type; // the value associated with each entry
+ typedef detail::tst_node<Char, T> node;
+
+ tst_map()
+ {
+ }
+
+ ~tst_map()
+ {
+ // Nothing to do here.
+ // The pools do the right thing for us
+ }
+
+ tst_map(tst_map const& rhs)
+ {
+ copy(rhs);
+ }
+
+ tst_map& operator=(tst_map const& rhs)
+ {
+ return assign(rhs);
+ }
+
+ template <typename Iterator, typename Filter>
+ T* find(Iterator& first, Iterator last, Filter filter) const
+ {
+ if (first != last)
+ {
+ Iterator save = first;
+ typename map_type::const_iterator
+ i = map.find(filter(*first++));
+ if (i == map.end())
+ {
+ first = save;
+ return 0;
+ }
+ if (T* p = node::find(i->second.root, first, last, filter))
+ {
+ return p;
+ }
+ return i->second.data;
+ }
+ return 0;
+ }
+
+ template <typename Iterator>
+ T* find(Iterator& first, Iterator last) const
+ {
+ return find(first, last, tst_pass_through());
+ }
+
+ template <typename Iterator>
+ bool add(
+ Iterator first
+ , Iterator last
+ , typename boost::call_traits<T>::param_type val)
+ {
+ if (first != last)
+ {
+ map_data x = {0, 0};
+ std::pair<typename map_type::iterator, bool>
+ r = map.insert(std::pair<Char, map_data>(*first++, x));
+
+ if (first != last)
+ {
+ return node::add(r.first->second.root
+ , first, last, val, this) ? true : false;
+ }
+ else
+ {
+ if (r.first->second.data)
+ return false;
+ r.first->second.data = this->new_data(val);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ template <typename Iterator>
+ void remove(Iterator first, Iterator last)
+ {
+ if (first != last)
+ {
+ typename map_type::iterator i = map.find(*first++);
+ if (i != map.end())
+ {
+ if (first != last)
+ {
+ node::remove(i->second.root, first, last, this);
+ }
+ else if (i->second.data)
+ {
+ this->delete_data(i->second.data);
+ i->second.data = 0;
+ }
+ if (i->second.data == 0 && i->second.root == 0)
+ {
+ map.erase(i);
+ }
+ }
+ }
+ }
+
+ void clear()
+ {
+ BOOST_FOREACH(typename map_type::value_type& x, map)
+ {
+ node::destruct_node(x.second.root, this);
+ if (x.second.data)
+ this->delete_data(x.second.data);
+ }
+ map.clear();
+ }
+
+ template <typename F>
+ void for_each(F f) const
+ {
+ BOOST_FOREACH(typename map_type::value_type const& x, map)
+ {
+ std::basic_string<Char> s(1, x.first);
+ node::for_each(x.second.root, s, f);
+ if (x.second.data)
+ f(s, *x.second.data);
+ }
+ }
+
+ private:
+
+ friend struct detail::tst_node<Char, T>;
+
+ struct map_data
+ {
+ node* root;
+ T* data;
+ };
+
+ typedef std::unordered_map<Char, map_data> map_type;
+
+ void copy(tst_map const& rhs)
+ {
+ BOOST_FOREACH(typename map_type::value_type const& x, rhs.map)
+ {
+ map_data xx = {node::clone_node(x.second.root, this), 0};
+ if (x.second.data)
+ xx.data = data_pool.construct(*x.second.data);
+ map[x.first] = xx;
+ }
+ }
+
+ tst_map& assign(tst_map const& rhs)
+ {
+ if (this != &rhs)
+ {
+ BOOST_FOREACH(typename map_type::value_type& x, map)
+ {
+ node::destruct_node(x.second.root, this);
+ }
+ map.clear();
+ copy(rhs);
+ }
+ return *this;
+ }
+
+ node* new_node(Char id)
+ {
+ return node_pool.construct(id);
+ }
+
+ T* new_data(typename boost::call_traits<T>::param_type val)
+ {
+ return data_pool.construct(val);
+ }
+
+ void delete_node(node* p)
+ {
+ node_pool.destroy(p);
+ }
+
+ void delete_data(T* p)
+ {
+ data_pool.destroy(p);
+ }
+
+ map_type map;
+ object_pool<node> node_pool;
+ object_pool<T> data_pool;
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/ast/position_tagged.hpp b/3party/boost/boost/spirit/home/x3/support/ast/position_tagged.hpp
new file mode 100644
index 0000000000..22cfd7588b
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/ast/position_tagged.hpp
@@ -0,0 +1,96 @@
+/*=============================================================================
+ Copyright (c) 2014 Joel de Guzman
+
+ 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_SPIRIT_X3_POSITION_TAGGED_MAY_01_2014_0321PM)
+#define BOOST_SPIRIT_X3_POSITION_TAGGED_MAY_01_2014_0321PM
+
+#include <boost/range.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ struct position_tagged
+ {
+ // Use this to annotate an AST with the iterator position.
+ // These ids are used as a key to the position_cache (below)
+ // and marks the start and end of an AST node.
+ int id_first = -1;
+ int id_last = -1;
+ };
+
+ template <typename Container>
+ class position_cache
+ {
+ public:
+
+ typedef typename Container::value_type iterator_type;
+
+ position_cache(
+ iterator_type first
+ , iterator_type last)
+ : first_(first), last_(last) {}
+
+ // This will catch all nodes inheriting from position_tagged
+ boost::iterator_range<iterator_type>
+ position_of(position_tagged const& ast) const
+ {
+ return
+ boost::iterator_range<iterator_type>(
+ positions.at(ast.id_first) // throws if out of range
+ , positions.at(ast.id_last) // throws if out of range
+ );
+ }
+
+ // This will catch all nodes except those inheriting from position_tagged
+ template <typename AST>
+ boost::iterator_range<iterator_type>
+ position_of(AST const& ast) const
+ {
+ // returns an empty position
+ return boost::iterator_range<iterator_type>();
+ }
+
+ // This will catch all nodes except those inheriting from position_tagged
+ template <typename AST>
+ void annotate(AST& ast, iterator_type first, iterator_type last, mpl::false_)
+ {
+ // (no-op) no need for tags
+ }
+
+ // This will catch all nodes inheriting from position_tagged
+ void annotate(position_tagged& ast, iterator_type first, iterator_type last, mpl::true_)
+ {
+ ast.id_first = int(positions.size());
+ positions.push_back(first);
+ ast.id_last = int(positions.size());
+ positions.push_back(last);
+ }
+
+ template <typename AST>
+ void annotate(AST& ast, iterator_type first, iterator_type last)
+ {
+ annotate(ast, first, last, is_base_of<position_tagged, AST>());
+ }
+
+ Container const&
+ get_positions() const
+ {
+ return positions;
+ }
+
+ iterator_type first() const { return first_; }
+ iterator_type last() const { return last_; }
+
+ private:
+
+ Container positions;
+ iterator_type first_;
+ iterator_type last_;
+ };
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/ast/variant.hpp b/3party/boost/boost/spirit/home/x3/support/ast/variant.hpp
new file mode 100644
index 0000000000..cf626e88be
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/ast/variant.hpp
@@ -0,0 +1,249 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_VARIANT_AUGUST_6_2011_0859AM)
+#define BOOST_SPIRIT_X3_VARIANT_AUGUST_6_2011_0859AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/variant.hpp>
+#include <boost/mpl/list.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename T>
+ class forward_ast
+ {
+ public:
+
+ typedef T type;
+
+ public:
+
+ forward_ast() : p_(new T) {}
+
+ forward_ast(forward_ast const& operand)
+ : p_(new T(operand.get())) {}
+
+ forward_ast(forward_ast&& operand)
+ : p_(operand.p_)
+ {
+ operand.p_ = 0;
+ }
+
+ forward_ast(T const& operand)
+ : p_(new T(operand)) {}
+
+ forward_ast(T&& operand)
+ : p_(new T(std::move(operand))) {}
+
+ ~forward_ast()
+ {
+ boost::checked_delete(p_);
+ }
+
+ forward_ast& operator=(forward_ast const& rhs)
+ {
+ assign(rhs.get());
+ return *this;
+ }
+
+ void swap(forward_ast& operand) BOOST_NOEXCEPT
+ {
+ T* temp = operand.p_;
+ operand.p_ = p_;
+ p_ = temp;
+ }
+
+ forward_ast& operator=(T const& rhs)
+ {
+ assign(rhs);
+ return *this;
+ }
+
+ forward_ast& operator=(forward_ast&& rhs) BOOST_NOEXCEPT
+ {
+ swap(rhs);
+ return *this;
+ }
+
+ forward_ast& operator=(T&& rhs)
+ {
+ get() = std::move(rhs);
+ return *this;
+ }
+
+ T& get() { return *get_pointer(); }
+ const T& get() const { return *get_pointer(); }
+
+ T* get_pointer() { return p_; }
+ const T* get_pointer() const { return p_; }
+
+ operator T const&() const { return this->get(); }
+ operator T&() { return this->get(); }
+
+ private:
+
+ void assign(const T& rhs)
+ {
+ this->get() = rhs;
+ }
+
+ T* p_;
+ };
+
+ // function template swap
+ //
+ // Swaps two forward_ast<T> objects of the same type T.
+ //
+ template <typename T>
+ inline void swap(forward_ast<T>& lhs, forward_ast<T>& rhs) BOOST_NOEXCEPT
+ {
+ lhs.swap(rhs);
+ }
+
+ namespace detail
+ {
+ template <typename T>
+ struct remove_forward : mpl::identity<T>
+ {};
+
+ template <typename T>
+ struct remove_forward<forward_ast<T>> : mpl::identity<T>
+ {};
+ }
+
+ template <typename ...Types>
+ struct variant
+ {
+ // tell spirit that this is an adapted variant
+ struct adapted_variant_tag;
+
+ typedef boost::variant<Types...> variant_type;
+ typedef mpl::list<typename detail::remove_forward<Types>::type...> types;
+ typedef variant<Types...> base_type;
+
+ variant() : var() {}
+
+ template <typename T, typename disable_if<is_base_of<base_type, T>>::type>
+ explicit variant(T const& rhs)
+ : var(rhs) {}
+
+ template <typename T, typename disable_if<is_base_of<base_type, T>>::type>
+ explicit variant(T&& rhs)
+ : var(std::forward<T>(rhs)) {}
+
+ variant(variant const& rhs)
+ : var(rhs.var) {}
+
+ variant(variant& rhs)
+ : var(rhs.var) {}
+
+ variant(variant&& rhs)
+ : var(std::forward<variant_type>(rhs.var)) {}
+
+ variant& operator=(variant const& rhs)
+ {
+ var = rhs.get();
+ return *this;
+ }
+
+ variant& operator=(variant&& rhs)
+ {
+ var = std::forward<variant_type>(rhs.get());
+ return *this;
+ }
+
+ template <typename T>
+ //typename disable_if<is_base_of<base_type, T>, variant&>::type
+ variant& operator=(T const& rhs)
+ {
+ var = rhs;
+ return *this;
+ }
+
+ template <typename T>
+ //typename disable_if<is_base_of<base_type, T>, variant&>::type
+ variant& operator=(T&& rhs)
+ {
+ var = std::forward<T>(rhs);
+ return *this;
+ }
+
+ template <typename F>
+ typename F::result_type apply_visitor(F const& v)
+ {
+ return var.apply_visitor(v);
+ }
+
+ template <typename F>
+ typename F::result_type apply_visitor(F const& v) const
+ {
+ return var.apply_visitor(v);
+ }
+
+ template <typename F>
+ typename F::result_type apply_visitor(F& v)
+ {
+ return var.apply_visitor(v);
+ }
+
+ template <typename F>
+ typename F::result_type apply_visitor(F& v) const
+ {
+ return var.apply_visitor(v);
+ }
+
+ variant_type const& get() const
+ {
+ return var;
+ }
+
+ variant_type& get()
+ {
+ return var;
+ }
+
+ variant_type var;
+ };
+}}}
+
+namespace boost
+{
+ template <typename T, typename ...Types>
+ inline T const&
+ get(boost::spirit::x3::variant<Types...> const& x)
+ {
+ return boost::get<T>(x.get());
+ }
+
+ template <typename T, typename ...Types>
+ inline T&
+ get(boost::spirit::x3::variant<Types...>& x)
+ {
+ return boost::get<T>(x.get());
+ }
+
+ template <typename T, typename ...Types>
+ inline T const*
+ get(boost::spirit::x3::variant<Types...> const* x)
+ {
+ return boost::get<T>(&x->get());
+ }
+
+ template <typename T, typename ...Types>
+ inline T*
+ get(boost::spirit::x3::variant<Types...>* x)
+ {
+ return boost::get<T>(&x->get());
+ }
+}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/context.hpp b/3party/boost/boost/spirit/home/x3/support/context.hpp
new file mode 100644
index 0000000000..93bcb24070
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/context.hpp
@@ -0,0 +1,135 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CONTEXT_JAN_4_2012_1215PM)
+#define BOOST_SPIRIT_X3_CONTEXT_JAN_4_2012_1215PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename ID, typename T, typename Next = unused_type>
+ struct context
+ {
+ context(T& val, Next const& next)
+ : val(val), next(next) {}
+
+ template <typename ID_, typename Unused = void>
+ struct get_result
+ {
+ typedef typename Next::template get_result<ID_>::type type;
+ };
+
+ template <typename Unused>
+ struct get_result<mpl::identity<ID>, Unused>
+ {
+ typedef T& type;
+ };
+
+ T& get(mpl::identity<ID>) const
+ {
+ return val;
+ }
+
+ template <typename ID_>
+ typename Next::template get_result<ID_>::type
+ get(ID_ id) const
+ {
+ return next.get(id);
+ }
+
+ T& val;
+ Next const& next;
+ };
+
+ template <typename ID, typename T>
+ struct context<ID, T, unused_type>
+ {
+ context(T& val)
+ : val(val) {}
+
+ context(T& val, unused_type)
+ : val(val) {}
+
+ template <typename ID_, typename Unused = void>
+ struct get_result
+ {
+ typedef unused_type type;
+ };
+
+ template <typename Unused>
+ struct get_result<mpl::identity<ID>, Unused>
+ {
+ typedef T& type;
+ };
+
+ T& get(mpl::identity<ID>) const
+ {
+ return val;
+ }
+
+ template <typename ID_>
+ unused_type
+ get(ID_) const
+ {
+ return unused;
+ }
+
+ T& val;
+ };
+
+ template <typename Tag, typename Context>
+ inline auto
+ get(Context const& context)
+ -> decltype(context.get(mpl::identity<Tag>()))
+ {
+ return context.get(mpl::identity<Tag>());
+ }
+
+ template <typename ID, typename T, typename Next>
+ inline context<ID, T, Next> make_context(T& val, Next const& next)
+ {
+ return context<ID, T, Next>(val, next);
+ }
+
+ template <typename ID, typename T>
+ inline context<ID, T> make_context(T& val)
+ {
+ return context<ID, T>(val);
+ }
+
+ namespace detail
+ {
+ template <typename ID, typename T, typename Next, typename FoundVal>
+ inline Next const&
+ make_unique_context(T& val, Next const& next, FoundVal&)
+ {
+ return next;
+ }
+
+ template <typename ID, typename T, typename Next>
+ inline context<ID, T, Next>
+ make_unique_context(T& val, Next const& next, unused_type)
+ {
+ return context<ID, T, Next>(val, next);
+ }
+ }
+
+ template <typename ID, typename T, typename Next>
+ inline auto
+ make_unique_context(T& val, Next const& next)
+ {
+ return detail::make_unique_context<ID>(val, next, x3::get<ID>(next));
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp b/3party/boost/boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp
new file mode 100644
index 0000000000..73770c87d0
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp
@@ -0,0 +1,512 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2011 Jan Frederick Eick
+ Copyright (c) 2011 Christopher Jefferson
+ Copyright (c) 2006 Stephen Nutt
+
+ 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_SPIRIT_X3_DETAIL_EXTRACT_INT_APRIL_17_2006_0816AM)
+#define BOOST_SPIRIT_X3_DETAIL_EXTRACT_INT_APRIL_17_2006_0816AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_type.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/traits/numeric_traits.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/comparison/less.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+#include <boost/detail/iterator.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/limits.hpp>
+
+#if !defined(SPIRIT_NUMERICS_LOOP_UNROLL)
+# define SPIRIT_NUMERICS_LOOP_UNROLL 3
+#endif
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The maximum radix digits that can be represented without
+ // overflow:
+ //
+ // template<typename T, unsigned Radix>
+ // struct digits_traits::value;
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, unsigned Radix>
+ struct digits_traits;
+
+// lookup table for log2(x) : 2 <= x <= 36
+#define BOOST_SPIRIT_X3_LOG2 (#error)(#error) \
+ (1000000)(1584960)(2000000)(2321920)(2584960)(2807350) \
+ (3000000)(3169920)(3321920)(3459430)(3584960)(3700430) \
+ (3807350)(3906890)(4000000)(4087460)(4169920)(4247920) \
+ (4321920)(4392310)(4459430)(4523560)(4584960)(4643850) \
+ (4700430)(4754880)(4807350)(4857980)(4906890)(4954190) \
+ (5000000)(5044390)(5087460)(5129280)(5169925) \
+ /***/
+
+#define BOOST_PP_LOCAL_MACRO(Radix) \
+ template <typename T> struct digits_traits<T, Radix> \
+ { \
+ typedef std::numeric_limits<T> numeric_limits_type; \
+ BOOST_STATIC_CONSTANT(int, value = static_cast<int>( \
+ (numeric_limits_type::digits * 1000000) / \
+ BOOST_PP_SEQ_ELEM(Radix, BOOST_SPIRIT_X3_LOG2))); \
+ }; \
+ /***/
+
+#define BOOST_PP_LOCAL_LIMITS (2, 36)
+#include BOOST_PP_LOCAL_ITERATE()
+
+#undef BOOST_SPIRIT_X3_LOG2
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Traits class for radix specific number conversion
+ //
+ // Test the validity of a single character:
+ //
+ // template<typename Char> static bool is_valid(Char ch);
+ //
+ // Convert a digit from character representation to binary
+ // representation:
+ //
+ // template<typename Char> static int digit(Char ch);
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <unsigned Radix>
+ struct radix_traits
+ {
+ template <typename Char>
+ inline static bool is_valid(Char ch)
+ {
+ if (Radix <= 10)
+ return (ch >= '0' && ch <= static_cast<Char>('0' + Radix -1));
+ return (ch >= '0' && ch <= '9')
+ || (ch >= 'a' && ch <= static_cast<Char>('a' + Radix -10 -1))
+ || (ch >= 'A' && ch <= static_cast<Char>('A' + Radix -10 -1));
+ }
+
+ template <typename Char>
+ inline static unsigned digit(Char ch)
+ {
+ if (Radix <= 10 || (ch >= '0' && ch <= '9'))
+ return ch - '0';
+ return char_encoding::ascii::tolower(ch) - 'a' + 10;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // positive_accumulator/negative_accumulator: Accumulator policies for
+ // extracting integers. Use positive_accumulator if number is positive.
+ // Use negative_accumulator if number is negative.
+ ///////////////////////////////////////////////////////////////////////////
+ template <unsigned Radix>
+ struct positive_accumulator
+ {
+ template <typename T, typename Char>
+ inline static void add(T& n, Char ch, mpl::false_) // unchecked add
+ {
+ const int digit = radix_traits<Radix>::digit(ch);
+ n = n * T(Radix) + T(digit);
+ }
+
+ template <typename T, typename Char>
+ inline static bool add(T& n, Char ch, mpl::true_) // checked add
+ {
+ // Ensure n *= Radix will not overflow
+ static T const max = (std::numeric_limits<T>::max)();
+ static T const val = max / Radix;
+ if (n > val)
+ return false;
+
+ n *= Radix;
+
+ // Ensure n += digit will not overflow
+ const int digit = radix_traits<Radix>::digit(ch);
+ if (n > max - digit)
+ return false;
+
+ n += static_cast<T>(digit);
+ return true;
+ }
+ };
+
+ template <unsigned Radix>
+ struct negative_accumulator
+ {
+ template <typename T, typename Char>
+ inline static void add(T& n, Char ch, mpl::false_) // unchecked subtract
+ {
+ const int digit = radix_traits<Radix>::digit(ch);
+ n = n * T(Radix) - T(digit);
+ }
+
+ template <typename T, typename Char>
+ inline static bool add(T& n, Char ch, mpl::true_) // checked subtract
+ {
+ // Ensure n *= Radix will not underflow
+ static T const min = (std::numeric_limits<T>::min)();
+ static T const val = (min + 1) / T(Radix);
+ if (n < val)
+ return false;
+
+ n *= Radix;
+
+ // Ensure n -= digit will not underflow
+ int const digit = radix_traits<Radix>::digit(ch);
+ if (n < min + digit)
+ return false;
+
+ n -= static_cast<T>(digit);
+ return true;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Common code for extract_int::parse specializations
+ ///////////////////////////////////////////////////////////////////////////
+ template <unsigned Radix, typename Accumulator, int MaxDigits>
+ struct int_extractor
+ {
+ template <typename Char, typename T>
+ inline static bool
+ call(Char ch, std::size_t count, T& n, mpl::true_)
+ {
+ static std::size_t const
+ overflow_free = digits_traits<T, Radix>::value - 1;
+
+ if (count < overflow_free)
+ {
+ Accumulator::add(n, ch, mpl::false_());
+ }
+ else
+ {
+ if (!Accumulator::add(n, ch, mpl::true_()))
+ return false; // over/underflow!
+ }
+ return true;
+ }
+
+ template <typename Char, typename T>
+ inline static bool
+ call(Char ch, std::size_t /*count*/, T& n, mpl::false_)
+ {
+ // no need to check for overflow
+ Accumulator::add(n, ch, mpl::false_());
+ return true;
+ }
+
+ template <typename Char>
+ inline static bool
+ call(Char /*ch*/, std::size_t /*count*/, unused_type, mpl::false_)
+ {
+ return true;
+ }
+
+ template <typename Char, typename T>
+ inline static bool
+ call(Char ch, std::size_t count, T& n)
+ {
+ return call(ch, count, n
+ , mpl::bool_<
+ ( (MaxDigits < 0)
+ || (MaxDigits > digits_traits<T, Radix>::value)
+ )
+ && traits::check_overflow<T>::value
+ >()
+ );
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // End of loop checking: check if the number of digits
+ // being parsed exceeds MaxDigits. Note: if MaxDigits == -1
+ // we don't do any checking.
+ ///////////////////////////////////////////////////////////////////////////
+ template <int MaxDigits>
+ struct check_max_digits
+ {
+ inline static bool
+ call(std::size_t count)
+ {
+ return count < MaxDigits; // bounded
+ }
+ };
+
+ template <>
+ struct check_max_digits<-1>
+ {
+ inline static bool
+ call(std::size_t /*count*/)
+ {
+ return true; // unbounded
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // extract_int: main code for extracting integers
+ ///////////////////////////////////////////////////////////////////////////
+#define SPIRIT_NUMERIC_INNER_LOOP(z, x, data) \
+ if (!check_max_digits<MaxDigits>::call(count + leading_zeros) \
+ || it == last) \
+ break; \
+ ch = *it; \
+ if (!radix_check::is_valid(ch) || !extractor::call(ch, count, val)) \
+ break; \
+ ++it; \
+ ++count; \
+ /**/
+
+ template <
+ typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+ , typename Accumulator = positive_accumulator<Radix>
+ , bool Accumulate = false
+ >
+ struct extract_int
+ {
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4127) // conditional expression is constant
+#endif
+ template <typename Iterator, typename Attribute>
+ inline static bool
+ parse_main(
+ Iterator& first
+ , Iterator const& last
+ , Attribute& attr)
+ {
+ typedef radix_traits<Radix> radix_check;
+ typedef int_extractor<Radix, Accumulator, MaxDigits> extractor;
+ typedef typename
+ boost::detail::iterator_traits<Iterator>::value_type
+ char_type;
+
+ Iterator it = first;
+ std::size_t leading_zeros = 0;
+ if (!Accumulate)
+ {
+ // skip leading zeros
+ while (it != last && *it == '0' && leading_zeros < MaxDigits)
+ {
+ ++it;
+ ++leading_zeros;
+ }
+ }
+
+ typedef typename
+ traits::attribute_type<Attribute>::type
+ attribute_type;
+
+ attribute_type val = Accumulate ? attr : attribute_type(0);
+ std::size_t count = 0;
+ char_type ch;
+
+ while (true)
+ {
+ BOOST_PP_REPEAT(
+ SPIRIT_NUMERICS_LOOP_UNROLL
+ , SPIRIT_NUMERIC_INNER_LOOP, _)
+ }
+
+ if (count + leading_zeros >= MinDigits)
+ {
+ traits::move_to(val, attr);
+ first = it;
+ return true;
+ }
+ return false;
+ }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+ template <typename Iterator>
+ inline static bool
+ parse(
+ Iterator& first
+ , Iterator const& last
+ , unused_type)
+ {
+ T n = 0; // must calculate value to detect over/underflow
+ return parse_main(first, last, n);
+ }
+
+ template <typename Iterator, typename Attribute>
+ inline static bool
+ parse(
+ Iterator& first
+ , Iterator const& last
+ , Attribute& attr)
+ {
+ return parse_main(first, last, attr);
+ }
+ };
+#undef SPIRIT_NUMERIC_INNER_LOOP
+
+ ///////////////////////////////////////////////////////////////////////////
+ // extract_int: main code for extracting integers
+ // common case where MinDigits == 1 and MaxDigits = -1
+ ///////////////////////////////////////////////////////////////////////////
+#define SPIRIT_NUMERIC_INNER_LOOP(z, x, data) \
+ if (it == last) \
+ break; \
+ ch = *it; \
+ if (!radix_check::is_valid(ch)) \
+ break; \
+ if (!extractor::call(ch, count, val)) \
+ return false; \
+ ++it; \
+ ++count; \
+ /**/
+
+ template <typename T, unsigned Radix, typename Accumulator, bool Accumulate>
+ struct extract_int<T, Radix, 1, -1, Accumulator, Accumulate>
+ {
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4127) // conditional expression is constant
+#endif
+ template <typename Iterator, typename Attribute>
+ inline static bool
+ parse_main(
+ Iterator& first
+ , Iterator const& last
+ , Attribute& attr)
+ {
+ typedef radix_traits<Radix> radix_check;
+ typedef int_extractor<Radix, Accumulator, -1> extractor;
+ typedef typename
+ boost::detail::iterator_traits<Iterator>::value_type
+ char_type;
+
+ Iterator it = first;
+ std::size_t count = 0;
+ if (!Accumulate)
+ {
+ // skip leading zeros
+ while (it != last && *it == '0')
+ {
+ ++it;
+ ++count;
+ }
+
+ if (it == last)
+ {
+ if (count == 0) // must have at least one digit
+ return false;
+ attr = 0;
+ first = it;
+ return true;
+ }
+ }
+
+ typedef typename
+ traits::attribute_type<Attribute>::type
+ attribute_type;
+
+ attribute_type val = Accumulate ? attr : attribute_type(0);
+ char_type ch = *it;
+
+ if (!radix_check::is_valid(ch) || !extractor::call(ch, 0, val))
+ {
+ if (count == 0) // must have at least one digit
+ return false;
+ traits::move_to(val, attr);
+ first = it;
+ return true;
+ }
+
+ count = 0;
+ ++it;
+ while (true)
+ {
+ BOOST_PP_REPEAT(
+ SPIRIT_NUMERICS_LOOP_UNROLL
+ , SPIRIT_NUMERIC_INNER_LOOP, _)
+ }
+
+ traits::move_to(val, attr);
+ first = it;
+ return true;
+ }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+ template <typename Iterator>
+ inline static bool
+ parse(
+ Iterator& first
+ , Iterator const& last
+ , unused_type)
+ {
+ T n = 0; // must calculate value to detect over/underflow
+ return parse_main(first, last, n);
+ }
+
+ template <typename Iterator, typename Attribute>
+ inline static bool
+ parse(
+ Iterator& first
+ , Iterator const& last
+ , Attribute& attr)
+ {
+ return parse_main(first, last, attr);
+ }
+ };
+
+#undef SPIRIT_NUMERIC_INNER_LOOP
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Cast an signed integer to an unsigned integer
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T,
+ bool force_unsigned
+ = mpl::and_<is_integral<T>, is_signed<T> >::value>
+ struct cast_unsigned;
+
+ template <typename T>
+ struct cast_unsigned<T, true>
+ {
+ typedef typename make_unsigned<T>::type unsigned_type;
+ typedef typename make_unsigned<T>::type& unsigned_type_ref;
+
+ inline static unsigned_type_ref call(T& n)
+ {
+ return unsigned_type_ref(n);
+ }
+ };
+
+ template <typename T>
+ struct cast_unsigned<T, false>
+ {
+ inline static T& call(T& n)
+ {
+ return n;
+ }
+ };
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/numeric_utils/extract_int.hpp b/3party/boost/boost/spirit/home/x3/support/numeric_utils/extract_int.hpp
new file mode 100644
index 0000000000..aa80cdd6ea
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/numeric_utils/extract_int.hpp
@@ -0,0 +1,147 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2011 Jan Frederick Eick
+
+ 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_SPIRIT_X3_EXTRACT_INT_APRIL_17_2006_0830AM)
+#define BOOST_SPIRIT_X3_EXTRACT_INT_APRIL_17_2006_0830AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Extract the prefix sign (- or +), return true if a '-' was found
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator>
+ inline bool
+ extract_sign(Iterator& first, Iterator const& last)
+ {
+ (void)last; // silence unused warnings
+ BOOST_ASSERT(first != last); // precondition
+
+ // Extract the sign
+ bool neg = *first == '-';
+ if (neg || (*first == '+'))
+ {
+ ++first;
+ return neg;
+ }
+ return false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Low level unsigned integer parser
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+ , bool Accumulate = false>
+ struct extract_uint
+ {
+ // check template parameter 'Radix' for validity
+ static_assert(
+ (Radix >= 2 && Radix <= 36),
+ "Error Unsupported Radix");
+
+ template <typename Iterator>
+ inline static bool call(Iterator& first, Iterator const& last, T& attr)
+ {
+ if (first == last)
+ return false;
+
+ typedef detail::extract_int<
+ T
+ , Radix
+ , MinDigits
+ , MaxDigits
+ , detail::positive_accumulator<Radix>
+ , Accumulate>
+ extract_type;
+
+ Iterator save = first;
+ if (!extract_type::parse(first, last,
+ detail::cast_unsigned<T>::call(attr)))
+ {
+ first = save;
+ return false;
+ }
+ return true;
+ }
+
+ template <typename Iterator, typename Attribute>
+ inline static bool call(Iterator& first, Iterator const& last, Attribute& attr_)
+ {
+ // this case is called when Attribute is not T
+ T attr;
+ if (call(first, last, attr))
+ {
+ traits::move_to(attr, attr_);
+ return true;
+ }
+ return false;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Low level signed integer parser
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits>
+ struct extract_int
+ {
+ // check template parameter 'Radix' for validity
+ static_assert(
+ (Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16),
+ "Error Unsupported Radix");
+
+ template <typename Iterator>
+ inline static bool call(Iterator& first, Iterator const& last, T& attr)
+ {
+ if (first == last)
+ return false;
+
+ typedef detail::extract_int<
+ T, Radix, MinDigits, MaxDigits>
+ extract_pos_type;
+
+ typedef detail::extract_int<
+ T, Radix, MinDigits, MaxDigits, detail::negative_accumulator<Radix> >
+ extract_neg_type;
+
+ Iterator save = first;
+ bool hit = extract_sign(first, last);
+ if (hit)
+ hit = extract_neg_type::parse(first, last, attr);
+ else
+ hit = extract_pos_type::parse(first, last, attr);
+
+ if (!hit)
+ {
+ first = save;
+ return false;
+ }
+ return true;
+ }
+
+ template <typename Iterator, typename Attribute>
+ inline static bool call(Iterator& first, Iterator const& last, Attribute& attr_)
+ {
+ // this case is called when Attribute is not T
+ T attr;
+ if (call(first, last, attr))
+ {
+ traits::move_to(attr, attr_);
+ return true;
+ }
+ return false;
+ }
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/numeric_utils/extract_real.hpp b/3party/boost/boost/spirit/home/x3/support/numeric_utils/extract_real.hpp
new file mode 100644
index 0000000000..fb30f02306
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/numeric_utils/extract_real.hpp
@@ -0,0 +1,271 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_EXTRACT_REAL_APRIL_18_2006_0901AM)
+#define SPIRIT_EXTRACT_REAL_APRIL_18_2006_0901AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cmath>
+#include <boost/limits.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/pow10.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/sign.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/assert.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4100) // 'p': unreferenced formal parameter
+# pragma warning(disable: 4127) // conditional expression is constant
+#endif
+
+namespace boost { namespace spirit { namespace x3 { namespace extension
+{
+ using x3::traits::pow10;
+
+ template <typename T>
+ inline void
+ scale(int exp, T& n)
+ {
+ if (exp >= 0)
+ {
+ // $$$ Why is this failing for boost.math.concepts ? $$$
+ //~ int nn = std::numeric_limits<T>::max_exponent10;
+ //~ BOOST_ASSERT(exp <= std::numeric_limits<T>::max_exponent10);
+ n *= pow10<T>(exp);
+ }
+ else
+ {
+ if (exp < std::numeric_limits<T>::min_exponent10)
+ {
+ n /= pow10<T>(-std::numeric_limits<T>::min_exponent10);
+ n /= pow10<T>(-exp + std::numeric_limits<T>::min_exponent10);
+ }
+ else
+ {
+ n /= pow10<T>(-exp);
+ }
+ }
+ }
+
+ inline void
+ scale(int /*exp*/, unused_type /*n*/)
+ {
+ // no-op for unused_type
+ }
+
+ template <typename T>
+ inline void
+ scale(int exp, int frac, T& n)
+ {
+ scale(exp - frac, n);
+ }
+
+ inline void
+ scale(int /*exp*/, int /*frac*/, unused_type /*n*/)
+ {
+ // no-op for unused_type
+ }
+
+ inline float
+ negate(bool neg, float n)
+ {
+ return neg ? x3::changesign(n) : n;
+ }
+
+ inline double
+ negate(bool neg, double n)
+ {
+ return neg ? x3::changesign(n) : n;
+ }
+
+ inline long double
+ negate(bool neg, long double n)
+ {
+ return neg ? x3::changesign(n) : n;
+ }
+
+ template <typename T>
+ inline T
+ negate(bool neg, T const& n)
+ {
+ return neg ? -n : n;
+ }
+
+ inline unused_type
+ negate(bool /*neg*/, unused_type n)
+ {
+ // no-op for unused_type
+ return n;
+ }
+
+ template <typename T>
+ inline bool
+ is_equal_to_one(T const& value)
+ {
+ return value == 1.0;
+ }
+
+ inline bool
+ is_equal_to_one(unused_type)
+ {
+ // no-op for unused_type
+ return false;
+ }
+}}}}
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename T, typename RealPolicies>
+ struct extract_real
+ {
+ template <typename Iterator, typename Attribute>
+ static bool
+ parse(Iterator& first, Iterator const& last, Attribute& attr,
+ RealPolicies const& p)
+ {
+ if (first == last)
+ return false;
+ Iterator save = first;
+
+ // Start by parsing the sign. neg will be true if
+ // we got a "-" sign, false otherwise.
+ bool neg = p.parse_sign(first, last);
+
+ // Now attempt to parse an integer
+ T n = 0;
+ bool got_a_number = p.parse_n(first, last, n);
+
+ // If we did not get a number it might be a NaN, Inf or a leading
+ // dot.
+ if (!got_a_number)
+ {
+ // Check whether the number to parse is a NaN or Inf
+ if (p.parse_nan(first, last, n) ||
+ p.parse_inf(first, last, n))
+ {
+ // If we got a negative sign, negate the number
+ traits::move_to(extension::negate(neg, n), attr);
+ return true; // got a NaN or Inf, return early
+ }
+
+ // If we did not get a number and our policies do not
+ // allow a leading dot, fail and return early (no-match)
+ if (!p.allow_leading_dot)
+ {
+ first = save;
+ return false;
+ }
+ }
+
+ bool e_hit = false;
+ int frac_digits = 0;
+
+ // Try to parse the dot ('.' decimal point)
+ if (p.parse_dot(first, last))
+ {
+ // We got the decimal point. Now we will try to parse
+ // the fraction if it is there. If not, it defaults
+ // to zero (0) only if we already got a number.
+ Iterator savef = first;
+ if (p.parse_frac_n(first, last, n))
+ {
+ // Optimization note: don't compute frac_digits if T is
+ // an unused_type. This should be optimized away by the compiler.
+ if (!is_same<T, unused_type>::value)
+ frac_digits =
+ static_cast<int>(std::distance(savef, first));
+ }
+ else if (!got_a_number || !p.allow_trailing_dot)
+ {
+ // We did not get a fraction. If we still haven't got a
+ // number and our policies do not allow a trailing dot,
+ // return no-match.
+ first = save;
+ return false;
+ }
+
+ // Now, let's see if we can parse the exponent prefix
+ e_hit = p.parse_exp(first, last);
+ }
+ else
+ {
+ // No dot and no number! Return no-match.
+ if (!got_a_number)
+ {
+ first = save;
+ return false;
+ }
+
+ // If we must expect a dot and we didn't see an exponent
+ // prefix, return no-match.
+ e_hit = p.parse_exp(first, last);
+ if (p.expect_dot && !e_hit)
+ {
+ first = save;
+ return false;
+ }
+ }
+
+ if (e_hit)
+ {
+ // We got the exponent prefix. Now we will try to parse the
+ // actual exponent. It is an error if it is not there.
+ int exp = 0;
+ if (p.parse_exp_n(first, last, exp))
+ {
+ // Got the exponent value. Scale the number by
+ // exp-frac_digits.
+ extension::scale(exp, frac_digits, n);
+ }
+ else
+ {
+ // Oops, no exponent, return no-match.
+ first = save;
+ return false;
+ }
+ }
+ else if (frac_digits)
+ {
+ // No exponent found. Scale the number by -frac_digits.
+ extension::scale(-frac_digits, n);
+ }
+ else if (extension::is_equal_to_one(n))
+ {
+ // There is a chance of having to parse one of the 1.0#...
+ // styles some implementations use for representing NaN or Inf.
+
+ // Check whether the number to parse is a NaN or Inf
+ if (p.parse_nan(first, last, n) ||
+ p.parse_inf(first, last, n))
+ {
+ // If we got a negative sign, negate the number
+ traits::move_to(extension::negate(neg, n), attr);
+ return true; // got a NaN or Inf, return immediately
+ }
+ }
+
+ // If we got a negative sign, negate the number
+ traits::move_to(extension::negate(neg, n), attr);
+
+ // Success!!!
+ return true;
+ }
+ };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/numeric_utils/pow10.hpp b/3party/boost/boost/spirit/home/x3/support/numeric_utils/pow10.hpp
new file mode 100644
index 0000000000..f51d29fba8
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/numeric_utils/pow10.hpp
@@ -0,0 +1,116 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_POW10_DECEMBER_26_2008_1118AM)
+#define BOOST_SPIRIT_X3_POW10_DECEMBER_26_2008_1118AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/limits.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/numeric_traits.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4244) // conversion from 'double' to 'float', possible loss of data
+#endif
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ namespace detail
+ {
+ template <typename T, typename Enable = void>
+ struct pow10_helper
+ {
+ static T call(unsigned dim)
+ {
+ using namespace std; // allow for ADL to find the correct overload
+ return pow(T(10), T(dim));
+ }
+ };
+
+ template <>
+ struct pow10_helper<unused_type>
+ {
+ static unused_type call(unused_type)
+ {
+ return unused;
+ }
+ };
+
+#if (DBL_MAX_10_EXP == 308) // for IEEE-754
+ template <>
+ struct pow10_helper<double>
+ {
+ static double call(unsigned dim)
+ {
+ static double const exponents[] =
+ {
+ 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
+ 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
+ 1e20, 1e21, 1e22, 1e23, 1e24, 1e25, 1e26, 1e27, 1e28, 1e29,
+ 1e30, 1e31, 1e32, 1e33, 1e34, 1e35, 1e36, 1e37, 1e38, 1e39,
+ 1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47, 1e48, 1e49,
+ 1e50, 1e51, 1e52, 1e53, 1e54, 1e55, 1e56, 1e57, 1e58, 1e59,
+ 1e60, 1e61, 1e62, 1e63, 1e64, 1e65, 1e66, 1e67, 1e68, 1e69,
+ 1e70, 1e71, 1e72, 1e73, 1e74, 1e75, 1e76, 1e77, 1e78, 1e79,
+ 1e80, 1e81, 1e82, 1e83, 1e84, 1e85, 1e86, 1e87, 1e88, 1e89,
+ 1e90, 1e91, 1e92, 1e93, 1e94, 1e95, 1e96, 1e97, 1e98, 1e99,
+ 1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, 1e109,
+ 1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119,
+ 1e120, 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129,
+ 1e130, 1e131, 1e132, 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139,
+ 1e140, 1e141, 1e142, 1e143, 1e144, 1e145, 1e146, 1e147, 1e148, 1e149,
+ 1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, 1e157, 1e158, 1e159,
+ 1e160, 1e161, 1e162, 1e163, 1e164, 1e165, 1e166, 1e167, 1e168, 1e169,
+ 1e170, 1e171, 1e172, 1e173, 1e174, 1e175, 1e176, 1e177, 1e178, 1e179,
+ 1e180, 1e181, 1e182, 1e183, 1e184, 1e185, 1e186, 1e187, 1e188, 1e189,
+ 1e190, 1e191, 1e192, 1e193, 1e194, 1e195, 1e196, 1e197, 1e198, 1e199,
+ 1e200, 1e201, 1e202, 1e203, 1e204, 1e205, 1e206, 1e207, 1e208, 1e209,
+ 1e210, 1e211, 1e212, 1e213, 1e214, 1e215, 1e216, 1e217, 1e218, 1e219,
+ 1e220, 1e221, 1e222, 1e223, 1e224, 1e225, 1e226, 1e227, 1e228, 1e229,
+ 1e230, 1e231, 1e232, 1e233, 1e234, 1e235, 1e236, 1e237, 1e238, 1e239,
+ 1e240, 1e241, 1e242, 1e243, 1e244, 1e245, 1e246, 1e247, 1e248, 1e249,
+ 1e250, 1e251, 1e252, 1e253, 1e254, 1e255, 1e256, 1e257, 1e258, 1e259,
+ 1e260, 1e261, 1e262, 1e263, 1e264, 1e265, 1e266, 1e267, 1e268, 1e269,
+ 1e270, 1e271, 1e272, 1e273, 1e274, 1e275, 1e276, 1e277, 1e278, 1e279,
+ 1e280, 1e281, 1e282, 1e283, 1e284, 1e285, 1e286, 1e287, 1e288, 1e289,
+ 1e290, 1e291, 1e292, 1e293, 1e294, 1e295, 1e296, 1e297, 1e298, 1e299,
+ 1e300, 1e301, 1e302, 1e303, 1e304, 1e305, 1e306, 1e307, 1e308,
+ };
+ BOOST_ASSERT(dim < sizeof(exponents)/sizeof(double));
+ return exponents[dim];
+ }
+ };
+
+ template <>
+ struct pow10_helper<float>
+ {
+ static float call(unsigned dim)
+ {
+ return pow10_helper<double>::call(dim);
+ }
+ };
+#endif // for IEEE-754
+ }
+
+ template <typename T>
+ inline T pow10(unsigned dim)
+ {
+ return detail::pow10_helper<T>::call(dim);
+ }
+}}}}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/numeric_utils/sign.hpp b/3party/boost/boost/spirit/home/x3/support/numeric_utils/sign.hpp
new file mode 100644
index 0000000000..fe2feceeed
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/numeric_utils/sign.hpp
@@ -0,0 +1,48 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SIGN_MAR_11_2009_0734PM)
+#define SPIRIT_SIGN_MAR_11_2009_0734PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/math/special_functions/fpclassify.hpp>
+#include <boost/math/special_functions/sign.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template<typename T>
+ inline bool (signbit)(T x)
+ {
+ return (boost::math::signbit)(x) ? true : false;
+ }
+
+ // This routine has been taken and adapted from Johan Rade's fp_traits
+ // library
+ template<typename T>
+ inline T (changesign)(T x)
+ {
+#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)
+ return -x;
+#else
+ typedef typename math::detail::fp_traits<T>::type traits_type;
+
+ typename traits_type::bits a;
+ traits_type::get_bits(x, a);
+ a ^= traits_type::sign;
+ traits_type::set_bits(x, a);
+ return x;
+#endif
+ }
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/subcontext.hpp b/3party/boost/boost/spirit/home/x3/support/subcontext.hpp
new file mode 100644
index 0000000000..7614fcbcae
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/subcontext.hpp
@@ -0,0 +1,89 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustín Bergé
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_SUBCONTEXT_APR_15_2013_0840AM)
+#define BOOST_SPIRIT_X3_SUBCONTEXT_APR_15_2013_0840AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/support/pair.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename... T>
+ struct subcontext;
+
+ template <>
+ struct subcontext<>
+ {
+ template <typename Context>
+ subcontext(Context const& /*context*/)
+ {}
+
+ template <typename ID_, typename Unused = void>
+ struct get_result
+ {
+ typedef unused_type type;
+ };
+
+ template <typename ID_>
+ unused_type
+ get(ID_) const
+ {
+ return unused;
+ }
+ };
+
+ template <typename T>
+ struct subcontext<T>
+ : context<typename T::first_type, typename T::second_type>
+ {
+ typedef context<
+ typename T::first_type, typename T::second_type
+ > context_type;
+
+ template <typename Context>
+ subcontext(Context const& context)
+ : context_type(x3::get<typename T::first_type>(context))
+ {}
+
+ using context_type::get;
+ };
+
+ template <typename T, typename... Tail>
+ struct subcontext<T, Tail...>
+ : subcontext<Tail...>
+ , context<
+ typename T::first_type, typename T::second_type
+ , subcontext<Tail...>
+ >
+ {
+ typedef subcontext<Tail...> base_type;
+ typedef context<
+ typename T::first_type, typename T::second_type
+ , base_type
+ > context_type;
+
+ template <typename Context>
+ subcontext(Context const& context)
+ : base_type(context)
+ , context_type(
+ x3::get<typename T::first_type>(context)
+ , *static_cast<base_type*>(this))
+ {}
+
+ using context_type::get;
+ };
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/attribute_category.hpp b/3party/boost/boost/spirit/home/x3/support/traits/attribute_category.hpp
new file mode 100644
index 0000000000..a003327de2
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/attribute_category.hpp
@@ -0,0 +1,82 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ATTRIBUTE_CATEGORY_JAN_4_2012_1150AM)
+#define BOOST_SPIRIT_X3_ATTRIBUTE_CATEGORY_JAN_4_2012_1150AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/fusion/include/copy.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/spirit/home/x3/support/traits/is_variant.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ struct unused_type;
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ struct unused_attribute {};
+ struct plain_attribute {};
+ struct container_attribute {};
+ struct tuple_attribute {};
+ struct associative_attribute {};
+ struct variant_attribute {};
+ struct optional_attribute {};
+
+ template <typename T, typename Enable = void>
+ struct attribute_category
+ : mpl::identity<plain_attribute> {};
+
+ template <>
+ struct attribute_category<unused_type>
+ : mpl::identity<unused_attribute> {};
+
+ template <>
+ struct attribute_category<unused_type const>
+ : mpl::identity<unused_attribute> {};
+
+ template <typename T>
+ struct attribute_category< T
+ , typename enable_if<
+ typename mpl::eval_if<
+ fusion::traits::is_sequence<T>
+ , fusion::traits::is_associative<T>
+ , mpl::false_
+ >::type >::type >
+ : mpl::identity<associative_attribute> {};
+
+ template <typename T>
+ struct attribute_category< T
+ , typename enable_if<
+ mpl::and_<
+ fusion::traits::is_sequence<T>
+ , mpl::not_<fusion::traits::is_associative<T> >
+ > >::type >
+ : mpl::identity<tuple_attribute> {};
+
+ template <typename T>
+ struct attribute_category<T,
+ typename enable_if<traits::is_variant<T>>::type>
+ : mpl::identity<variant_attribute> {};
+
+ template <typename T>
+ struct attribute_category<T,
+ typename enable_if<traits::is_container<T>>::type>
+ : mpl::identity<container_attribute> {};
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/attribute_of.hpp b/3party/boost/boost/spirit/home/x3/support/traits/attribute_of.hpp
new file mode 100644
index 0000000000..71f70b0273
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/attribute_of.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustin Berge
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ATTRIBUTE_OF_JAN_7_2012_0914AM)
+#define BOOST_SPIRIT_X3_ATTRIBUTE_OF_JAN_7_2012_0914AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Get the attribute type of a component. By default, this gets the
+ // Component's attribute_type typedef or instantiates a nested attribute
+ // metafunction. Components may specialize this if such an attribute_type
+ // is not readily available (e.g. expensive to compute at compile time).
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Component, typename Context, typename Enable = void>
+ struct attribute_of;
+
+ namespace detail
+ {
+ template <typename Component, typename Context, typename Enable = void>
+ struct default_attribute_of;
+
+ template <typename Component, typename Context>
+ struct default_attribute_of<Component, Context,
+ typename disable_if_substitution_failure<
+ typename Component::attribute_type>::type>
+ : mpl::identity<typename Component::attribute_type> {};
+
+ template <typename Component, typename Context>
+ struct default_attribute_of<Component, Context,
+ typename disable_if_substitution_failure<
+ typename Component::template attribute<Context>::type>::type>
+ : Component::template attribute<Context> {};
+
+ template <typename Component, typename Context>
+ struct default_attribute_of<Component, Context,
+ typename enable_if_c<Component::is_pass_through_unary>::type>
+ : attribute_of<typename Component::subject_type, Context>{};
+ }
+
+ template <typename Component, typename Context, typename Enable>
+ struct attribute_of : detail::default_attribute_of<Component, Context> {};
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/attribute_type.hpp b/3party/boost/boost/spirit/home/x3/support/traits/attribute_type.hpp
new file mode 100644
index 0000000000..55e788b41c
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/attribute_type.hpp
@@ -0,0 +1,30 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ATTRIBUTE_TYPE_JAN_5_2012_0358PM)
+#define BOOST_SPIRIT_X3_ATTRIBUTE_TYPE_JAN_5_2012_0358PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Retrieve the attribute type to use from the given type
+ //
+ // This is needed to extract the correct attribute type from proxy classes
+ // as utilized in FUSION_ADAPT_ADT et. al.
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Attribute, typename Enable = void>
+ struct attribute_type : mpl::identity<Attribute> {};
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/container_traits.hpp b/3party/boost/boost/spirit/home/x3/support/traits/container_traits.hpp
new file mode 100644
index 0000000000..c382b7bfaa
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/container_traits.hpp
@@ -0,0 +1,333 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CONTAINER_FEBRUARY_06_2007_1001AM)
+#define BOOST_SPIRIT_X3_CONTAINER_FEBRUARY_06_2007_1001AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/fusion/include/deque.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <vector>
+#include <string>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // This file contains some container utils for stl containers.
+ ///////////////////////////////////////////////////////////////////////////
+
+ namespace detail
+ {
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator)
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(size_type)
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(reference)
+ }
+
+ template <typename T, typename Enable = void>
+ struct is_container
+ : mpl::bool_<
+ detail::has_value_type<T>::value &&
+ detail::has_iterator<T>::value &&
+ detail::has_size_type<T>::value &&
+ detail::has_reference<T>::value>
+ {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ namespace detail
+ {
+ template <typename T>
+ struct remove_value_const : mpl::identity<T> {};
+
+ template <typename T>
+ struct remove_value_const<T const> : remove_value_const<T> {};
+
+ template <typename F, typename S>
+ struct remove_value_const<std::pair<F, S>>
+ {
+ typedef typename remove_value_const<F>::type first_type;
+ typedef typename remove_value_const<S>::type second_type;
+ typedef std::pair<first_type, second_type> type;
+ };
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+ template <typename Container, typename Enable = void>
+ struct container_value
+ : detail::remove_value_const<typename Container::value_type>
+ {};
+
+ template <typename Container>
+ struct container_value<Container const> : container_value<Container> {};
+
+ // There is no single container value for fusion maps, but because output
+ // of this metafunc is used to check wheter parser's attribute can be
+ // saved to container, we simply return whole fusion::map as is
+ // so that check can be done in traits::is_substitute specialisation
+ template <typename T>
+ struct container_value<T
+ , typename enable_if<typename mpl::eval_if <
+ fusion::traits::is_sequence<T>
+ , fusion::traits::is_associative<T>
+ , mpl::false_ >::type >::type>
+ : mpl::identity<T> {};
+
+ template <>
+ struct container_value<unused_type> : mpl::identity<unused_type> {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Container, typename Enable = void>
+ struct container_iterator
+ : mpl::identity<typename Container::iterator> {};
+
+ template <typename Container>
+ struct container_iterator<Container const>
+ : mpl::identity<typename Container::const_iterator> {};
+
+ template <>
+ struct container_iterator<unused_type>
+ : mpl::identity<unused_type const*> {};
+
+ template <>
+ struct container_iterator<unused_type const>
+ : mpl::identity<unused_type const*> {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Container, typename T>
+ bool push_back(Container& c, T&& val);
+
+ template <typename Container, typename Enable = void>
+ struct push_back_container
+ {
+ template <typename T>
+ static bool call(Container& c, T&& val)
+ {
+ c.insert(c.end(), std::move(val));
+ return true;
+ }
+ };
+
+ template <typename Container, typename T>
+ inline bool push_back(Container& c, T&& val)
+ {
+ return push_back_container<Container>::call(c, std::move(val));
+ }
+
+ template <typename Container>
+ inline bool push_back(Container&, unused_type)
+ {
+ return true;
+ }
+
+ template <typename T>
+ inline bool push_back(unused_type, T const&)
+ {
+ return true;
+ }
+
+ inline bool push_back(unused_type, unused_type)
+ {
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Container, typename Iterator>
+ bool append(Container& c, Iterator first, Iterator last);
+
+ template <typename Container, typename Enable = void>
+ struct append_container
+ {
+ // Not all containers have "reserve"
+ template <typename Container_>
+ static void reserve(Container_& c, std::size_t size) {}
+
+ template <typename T>
+ static void reserve(std::vector<T>& c, std::size_t size)
+ {
+ c.reserve(size);
+ }
+
+ template <typename Iterator>
+ static bool call(Container& c, Iterator first, Iterator last)
+ {
+ reserve(c, c.size() + std::distance(first, last));
+ c.insert(c.end(), first, last);
+ return true;
+ }
+ };
+
+ template <typename Container, typename Iterator>
+ inline bool append(Container& c, Iterator first, Iterator last)
+ {
+ return append_container<Container>::call(c, first, last);
+ }
+
+ template <typename Iterator>
+ inline bool append(unused_type, Iterator first, Iterator last)
+ {
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Container, typename Enable = void>
+ struct is_empty_container
+ {
+ static bool call(Container const& c)
+ {
+ return c.empty();
+ }
+ };
+
+ template <typename Container>
+ inline bool is_empty(Container const& c)
+ {
+ return is_empty_container<Container>::call(c);
+ }
+
+ inline bool is_empty(unused_type)
+ {
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Container, typename Enable = void>
+ struct begin_container
+ {
+ static typename container_iterator<Container>::type call(Container& c)
+ {
+ return c.begin();
+ }
+ };
+
+ template <typename Container>
+ inline typename container_iterator<Container>::type
+ begin(Container& c)
+ {
+ return begin_container<Container>::call(c);
+ }
+
+ inline unused_type const*
+ begin(unused_type)
+ {
+ return &unused;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Container, typename Enable = void>
+ struct end_container
+ {
+ static typename container_iterator<Container>::type call(Container& c)
+ {
+ return c.end();
+ }
+ };
+
+ template <typename Container>
+ inline typename container_iterator<Container>::type
+ end(Container& c)
+ {
+ return end_container<Container>::call(c);
+ }
+
+ inline unused_type const*
+ end(unused_type)
+ {
+ return &unused;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Enable = void>
+ struct deref_iterator
+ {
+ typedef typename boost::detail::iterator_traits<Iterator>::reference type;
+ static type call(Iterator& it)
+ {
+ return *it;
+ }
+ };
+
+ template <typename Iterator>
+ typename deref_iterator<Iterator>::type
+ deref(Iterator& it)
+ {
+ return deref_iterator<Iterator>::call(it);
+ }
+
+ inline unused_type
+ deref(unused_type const*)
+ {
+ return unused;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Enable = void>
+ struct next_iterator
+ {
+ static void call(Iterator& it)
+ {
+ ++it;
+ }
+ };
+
+ template <typename Iterator>
+ void next(Iterator& it)
+ {
+ next_iterator<Iterator>::call(it);
+ }
+
+ inline void next(unused_type const*)
+ {
+ // do nothing
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Iterator, typename Enable = void>
+ struct compare_iterators
+ {
+ static bool call(Iterator const& it1, Iterator const& it2)
+ {
+ return it1 == it2;
+ }
+ };
+
+ template <typename Iterator>
+ bool compare(Iterator& it1, Iterator& it2)
+ {
+ return compare_iterators<Iterator>::call(it1, it2);
+ }
+
+ inline bool compare(unused_type const*, unused_type const*)
+ {
+ return false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct build_container : mpl::identity<std::vector<T>> {};
+
+ template <typename T>
+ struct build_container<boost::fusion::deque<T> > : build_container<T> {};
+
+ template <>
+ struct build_container<unused_type> : mpl::identity<unused_type> {};
+
+ template <>
+ struct build_container<char> : mpl::identity<std::string> {};
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/handles_container.hpp b/3party/boost/boost/spirit/home/x3/support/traits/handles_container.hpp
new file mode 100644
index 0000000000..3fe05aef87
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/handles_container.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2013 Agustin Berge
+
+ 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_SPIRIT_X3_HANDLES_CONTAINER_DEC_18_2010_0920AM)
+#define BOOST_SPIRIT_X3_HANDLES_CONTAINER_DEC_18_2010_0920AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Whether a component handles container attributes intrinsically
+ // (or whether container attributes need to be split up separately).
+ // By default, this gets the Component's handles_container nested value.
+ // Components may specialize this if such a handles_container is not
+ // readily available (e.g. expensive to compute at compile time).
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Component, typename Context, typename Enable = void>
+ struct handles_container : mpl::bool_<Component::handles_container> {};
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/has_attribute.hpp b/3party/boost/boost/spirit/home/x3/support/traits/has_attribute.hpp
new file mode 100644
index 0000000000..c8b1f8a347
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/has_attribute.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustin Berge
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_HAS_ATTRIBUTE_JUN_6_2012_1714PM)
+#define BOOST_SPIRIT_X3_HAS_ATTRIBUTE_JUN_6_2012_1714PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+ struct unused_type;
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Whether a component has an attribute. By default, this compares the
+ // component attribute against unused_type. If the component provides a
+ // nested constant expression has_attribute as a hint, that value is used
+ // instead. Components may specialize this.
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Component, typename Context, typename Enable = void>
+ struct has_attribute;
+
+ namespace detail
+ {
+ template <typename Component, typename Context, typename Enable = void>
+ struct default_has_attribute
+ : mpl::not_<is_same<unused_type,
+ typename attribute_of<Component, Context>::type>> {};
+
+ template <typename Component, typename Context>
+ struct default_has_attribute<Component, Context,
+ typename disable_if_substitution_failure<
+ mpl::bool_<Component::has_attribute>>::type>
+ : mpl::bool_<Component::has_attribute> {};
+
+ template <typename Component, typename Context>
+ struct default_has_attribute<Component, Context,
+ typename enable_if_c<Component::is_pass_through_unary>::type>
+ : has_attribute<typename Component::subject_type, Context> {};
+ }
+
+ template <typename Component, typename Context, typename Enable>
+ struct has_attribute : detail::default_has_attribute<Component, Context> {};
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/is_parser.hpp b/3party/boost/boost/spirit/home/x3/support/traits/is_parser.hpp
new file mode 100644
index 0000000000..cfbe8f74b4
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/is_parser.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2014 Agustin Berge
+
+ 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_SPIRIT_X3_IS_PARSER_MAY_20_2013_0235PM)
+#define BOOST_SPIRIT_X3_IS_PARSER_MAY_20_2013_0235PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // is_parser<T>: metafunction that evaluates to mpl::true_ if a type T
+ // can be used as a parser, mpl::false_ otherwise
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, typename Enable = void>
+ struct is_parser
+ : mpl::false_
+ {};
+
+ template <typename T>
+ struct is_parser<T, typename disable_if_substitution_failure<
+ typename extension::as_parser<T>::type>::type>
+ : mpl::true_
+ {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/is_substitute.hpp b/3party/boost/boost/spirit/home/x3/support/traits/is_substitute.hpp
new file mode 100644
index 0000000000..9e023371ce
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/is_substitute.hpp
@@ -0,0 +1,164 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_IS_SUBSTITUTE_JAN_9_2012_1049PM)
+#define BOOST_SPIRIT_X3_IS_SUBSTITUTE_JAN_9_2012_1049PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/map.hpp>
+#include <boost/fusion/include/value_at_key.hpp>
+#include <boost/fusion/adapted/mpl.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/equal.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/filter_view.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/count_if.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Find out if T can be a (strong) substitute for Attribute
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, typename Attribute, typename Enable = void>
+ struct is_substitute;
+
+ template <typename Variant, typename Attribute>
+ struct variant_has_substitute;
+
+ namespace detail
+ {
+ template <typename T, typename Attribute>
+ struct value_type_is_substitute
+ : is_substitute<
+ typename container_value<T>::type
+ , typename container_value<Attribute>::type>
+ {};
+
+ template <typename T, typename Attribute, typename Enable = void>
+ struct is_substitute_impl : is_same<T, Attribute> {};
+
+ template <typename T, typename Attribute>
+ struct is_substitute_impl<T, Attribute,
+ typename enable_if<
+ mpl::and_<
+ fusion::traits::is_sequence<T>,
+ fusion::traits::is_sequence<Attribute>,
+ mpl::equal<T, Attribute, is_substitute<mpl::_1, mpl::_2>>
+ >
+ >::type>
+ : mpl::true_ {};
+
+ template <typename T, typename Attribute>
+ struct is_substitute_impl<T, Attribute,
+ typename enable_if<
+ mpl::and_<
+ is_container<T>,
+ is_container<Attribute>,
+ value_type_is_substitute<T, Attribute>
+ >
+ >::type>
+ : mpl::true_ {};
+
+ template <typename T, typename Attribute>
+ struct is_substitute_impl<T, Attribute,
+ typename enable_if<
+ is_variant<Attribute>
+ >::type>
+ : mpl::or_<
+ is_same<T, Attribute>
+ , variant_has_substitute<Attribute, T>
+ >
+ {};
+ }
+
+ template <typename T, typename Attribute, typename Enable /*= void*/>
+ struct is_substitute
+ : detail::is_substitute_impl<T, Attribute> {};
+
+ // for reference T
+ template <typename T, typename Attribute, typename Enable>
+ struct is_substitute<T&, Attribute, Enable>
+ : is_substitute<T, Attribute, Enable> {};
+
+ // for reference Attribute
+ template <typename T, typename Attribute, typename Enable>
+ struct is_substitute<T, Attribute&, Enable>
+ : is_substitute<T, Attribute, Enable> {};
+
+ // 2 element mpl tuple is compatible with fusion::map if:
+ // - it's first element type is existing key in map
+ // - it second element type is compatible to type stored at the key in map
+ template <typename T, typename Attribute>
+ struct is_substitute<T, Attribute
+ , typename enable_if<
+ typename mpl::eval_if<
+ mpl::and_<fusion::traits::is_sequence<T>
+ , fusion::traits::is_sequence<Attribute>>
+ , mpl::and_<traits::has_size<T, 2>
+ , fusion::traits::is_associative<Attribute>>
+ , mpl::false_>::type>::type>
+
+ {
+ // checking that "p_key >> p_value" parser can
+ // store it's result in fusion::map attribute
+ typedef typename mpl::at_c<T, 0>::type p_key;
+ typedef typename mpl::at_c<T, 1>::type p_value;
+
+ // for simple p_key type we just check that
+ // such key can be found in attr and that value under that key
+ // matches p_value
+ template <typename Key, typename Value, typename Map>
+ struct has_kv_in_map
+ : mpl::eval_if<
+ fusion::result_of::has_key<Map, Key>
+ , mpl::apply<
+ is_substitute<
+ fusion::result_of::value_at_key<mpl::_1, Key>
+ , Value>
+ , Map>
+ , mpl::false_>
+ {};
+
+ // if p_key is variant over multiple types (as a result of
+ // "(key1|key2|key3) >> p_value" parser) check that all
+ // keys are found in fusion::map attribute and that values
+ // under these keys match p_value
+ template <typename Variant>
+ struct variant_kv
+ : mpl::equal_to<
+ mpl::size< typename Variant::types>
+ , mpl::size< mpl::filter_view<typename Variant::types
+ , has_kv_in_map<mpl::_1, p_value, Attribute>>>
+ >
+ {};
+
+ typedef typename
+ mpl::eval_if<
+ is_variant<p_key>
+ , variant_kv<p_key>
+ , has_kv_in_map<p_key, p_value, Attribute>
+ >::type
+ type;
+ };
+
+ template <typename T, typename Attribute>
+ struct is_substitute<optional<T>, optional<Attribute>>
+ : is_substitute<T, Attribute> {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/is_variant.hpp b/3party/boost/boost/spirit/home/x3/support/traits/is_variant.hpp
new file mode 100644
index 0000000000..829a673c3f
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/is_variant.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_IS_VARIANT_JAN_10_2012_0823AM)
+#define BOOST_SPIRIT_X3_IS_VARIANT_JAN_10_2012_0823AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/variant.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ namespace detail
+ {
+ // By declaring a nested struct in your class/struct, you tell
+ // spirit that it is regarded as a variant type. The minimum
+ // required interface for such a variant is that it has constructors
+ // for various types supported by your variant and a typedef 'types'
+ // which is an mpl sequence of the contained types.
+ //
+ // This is an intrusive interface. For a non-intrusive interface,
+ // use the is_variant trait.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(adapted_variant_tag)
+ }
+
+ template <typename T, typename Enable = void>
+ struct is_variant
+ : detail::has_adapted_variant_tag<T>
+ {};
+
+ template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+ struct is_variant<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>>
+ : mpl::true_
+ {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/make_attribute.hpp b/3party/boost/boost/spirit/home/x3/support/traits/make_attribute.hpp
new file mode 100644
index 0000000000..cf3baeedaf
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/make_attribute.hpp
@@ -0,0 +1,86 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2012 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_MAKE_ATTRIBUTE_JAN_8_2012_0721PM)
+#define BOOST_SPIRIT_X3_MAKE_ATTRIBUTE_JAN_8_2012_0721PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Attribute>
+ struct make_attribute_base
+ {
+ static Attribute call(unused_type)
+ {
+ // synthesize the attribute/parameter
+ return Attribute();
+ }
+
+ template <typename T>
+ static T& call(T& value)
+ {
+ return value; // just pass the one provided
+ }
+ };
+
+ template <typename Attribute, typename ActualAttribute>
+ struct make_attribute : make_attribute_base<Attribute>
+ {
+ typedef ActualAttribute& type;
+ typedef ActualAttribute value_type;
+ };
+
+ template <typename Attribute>
+ struct make_attribute<Attribute, unused_type>
+ : make_attribute_base<Attribute>
+ {
+ typedef typename remove_const<Attribute>::type attribute_type;
+ typedef attribute_type type;
+ typedef attribute_type value_type;
+ };
+
+ template <typename Attribute, typename ActualAttribute>
+ struct make_attribute<Attribute&, ActualAttribute>
+ : make_attribute<Attribute, ActualAttribute> {};
+
+ template <typename Attribute, typename ActualAttribute>
+ struct make_attribute<Attribute const&, ActualAttribute>
+ : make_attribute<Attribute const, ActualAttribute> {};
+
+ template <typename ActualAttribute>
+ struct make_attribute<unused_type, ActualAttribute>
+ {
+ typedef unused_type type;
+ typedef unused_type value_type;
+ static unused_type call(unused_type)
+ {
+ return unused;
+ }
+ };
+
+ template <>
+ struct make_attribute<unused_type, unused_type>
+ {
+ typedef unused_type type;
+ typedef unused_type value_type;
+ static unused_type call(unused_type)
+ {
+ return unused;
+ }
+ };
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/move_to.hpp b/3party/boost/boost/spirit/home/x3/support/traits/move_to.hpp
new file mode 100644
index 0000000000..ecd7c6f202
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/move_to.hpp
@@ -0,0 +1,211 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustin Berge
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_MOVE_TO_JAN_17_2013_0859PM)
+#define BOOST_SPIRIT_X3_MOVE_TO_JAN_17_2013_0859PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+#include <boost/spirit/home/x3/support/traits/tuple_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/variant_has_substitute.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/front.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/move.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <utility>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Source, typename Dest>
+ void move_to(Source&& src, Dest& dest);
+
+ template <typename Dest>
+ inline void move_to(unused_type, Dest&) {}
+
+ template <typename Source>
+ inline void move_to(Source&, unused_type) {}
+
+ inline void move_to(unused_type, unused_type) {}
+
+ template <typename Iterator, typename Dest>
+ void
+ move_to(Iterator first, Iterator last, Dest& dest);
+
+ template <typename Iterator>
+ inline void
+ move_to(Iterator, Iterator, unused_type) {}
+
+ namespace detail
+ {
+ template <typename Source, typename Dest>
+ inline void
+ move_to(Source&&, Dest&, unused_attribute) {}
+
+ template <typename Source, typename Dest>
+ inline void
+ move_to_plain(Source&& src, Dest& dest, mpl::false_) // src is not a single-element tuple
+ {
+ dest = std::move(src);
+ }
+
+ template <typename Source, typename Dest>
+ inline void
+ move_to_plain(Source&& src, Dest& dest, mpl::true_) // src is a single-element tuple
+ {
+ dest = std::move(fusion::front(src));
+ }
+
+ template <typename Source, typename Dest>
+ inline void
+ move_to(Source&& src, Dest& dest, plain_attribute)
+ {
+ typename mpl::and_<
+ fusion::traits::is_sequence<Source>,
+ is_size_one_sequence<Source> >
+ is_single_element_sequence;
+
+ move_to_plain(std::move(src), dest, is_single_element_sequence);
+ }
+
+ template <typename Source, typename Dest>
+ inline typename enable_if<is_container<Source>>::type
+ move_to(Source&& src, Dest& dest, container_attribute)
+ {
+ traits::move_to(src.begin(), src.end(), dest);
+ }
+
+ template <typename Source, typename Dest>
+ inline typename enable_if<
+ mpl::and_<
+ is_same_size_sequence<Dest, Source>,
+ mpl::not_<is_size_one_sequence<Dest> > >
+ >::type
+ move_to(Source&& src, Dest& dest, tuple_attribute)
+ {
+ fusion::move(std::move(src), dest);
+ }
+
+ template <typename Source, typename Dest>
+ inline typename enable_if<
+ is_size_one_sequence<Dest>
+ >::type
+ move_to(Source&& src, Dest& dest, tuple_attribute)
+ {
+ traits::move_to(src, fusion::front(dest));
+ }
+
+ template <typename Source, typename Dest>
+ inline void
+ move_to(Source&& src, Dest& dest, variant_attribute, mpl::false_)
+ {
+ dest = std::move(src);
+ }
+
+ template <typename Source, typename Dest>
+ inline void
+ move_to_variant_from_single_element_sequence(Source&& src, Dest& dest, mpl::false_)
+ {
+ // dest is a variant, src is a single element fusion sequence that the variant
+ // cannot directly hold. We'll try to unwrap the single element fusion sequence.
+
+ // Make sure that the Dest variant can really hold Source
+ static_assert(variant_has_substitute<Dest, typename fusion::result_of::front<Source>::type>::value,
+ "Error! The destination variant (Dest) cannot hold the source type (Source)");
+
+ dest = std::move(fusion::front(src));
+ }
+
+ template <typename Source, typename Dest>
+ inline void
+ move_to_variant_from_single_element_sequence(Source&& src, Dest& dest, mpl::true_)
+ {
+ // dest is a variant, src is a single element fusion sequence that the variant
+ // *can* directly hold.
+ dest = std::move(src);
+ }
+
+ template <typename Source, typename Dest>
+ inline void
+ move_to(Source&& src, Dest& dest, variant_attribute, mpl::true_)
+ {
+ move_to_variant_from_single_element_sequence(src, dest, variant_has_substitute<Dest, Source>());
+ }
+
+ template <typename Source, typename Dest>
+ inline void
+ move_to(Source&& src, Dest& dest, variant_attribute tag)
+ {
+ move_to(src, dest, tag, is_size_one_sequence<Source>());
+ }
+
+ template <typename Iterator>
+ inline void
+ move_to(Iterator, Iterator, unused_type, unused_attribute) {}
+
+ template <typename Iterator, typename Dest>
+ inline void
+ move_to(Iterator first, Iterator last, Dest& dest, container_attribute)
+ {
+ if (is_empty(dest))
+ dest = Dest(first, last);
+ else
+ append(dest, first, last);
+ }
+
+ template <typename Iterator>
+ inline void
+ move_to(Iterator first, Iterator last, boost::iterator_range<Iterator>& rng, container_attribute)
+ {
+ rng = {first, last};
+ }
+ }
+
+ template <typename Source, typename Dest>
+ inline void
+ move_to(Source&& src, Dest& dest)
+ {
+ detail::move_to(std::move(src), dest
+ , typename attribute_category<Dest>::type());
+ }
+
+ template <typename T>
+ inline void move_to(T& src, T& dest)
+ {
+ if (&src != &dest)
+ dest = std::move(src);
+ }
+
+ template <typename T>
+ inline void move_to(T const& src, T& dest)
+ {
+ if (&src != &dest)
+ dest = std::move(src);
+ }
+
+ template <typename T>
+ inline void move_to(T&& src, T& dest)
+ {
+ if (&src != &dest)
+ dest = std::move(src);
+ }
+
+ template <typename Iterator, typename Dest>
+ inline void
+ move_to(Iterator first, Iterator last, Dest& dest)
+ {
+ // $$$ Use std::move_iterator when iterator is not a const-iterator $$$
+ detail::move_to(first, last, dest, typename attribute_category<Dest>::type());
+ }
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/numeric_traits.hpp b/3party/boost/boost/spirit/home/x3/support/traits/numeric_traits.hpp
new file mode 100644
index 0000000000..3cdbdaec63
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/numeric_traits.hpp
@@ -0,0 +1,128 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_NUMERIC_TRAITS_JAN_07_2011_0722AM)
+#define BOOST_SPIRIT_X3_NUMERIC_TRAITS_JAN_07_2011_0722AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Determine if T is a boolean type
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct is_bool : mpl::false_ {};
+
+ template <typename T>
+ struct is_bool<T const> : is_bool<T> {};
+
+ template <>
+ struct is_bool<bool> : mpl::true_ {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Determine if T is a signed integer type
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct is_int : mpl::false_ {};
+
+ template <typename T>
+ struct is_int<T const> : is_int<T> {};
+
+ template <>
+ struct is_int<short> : mpl::true_ {};
+
+ template <>
+ struct is_int<int> : mpl::true_ {};
+
+ template <>
+ struct is_int<long> : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+ template <>
+ struct is_int<boost::long_long_type> : mpl::true_ {};
+#endif
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Determine if T is an unsigned integer type
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct is_uint : mpl::false_ {};
+
+ template <typename T>
+ struct is_uint<T const> : is_uint<T> {};
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+ template <>
+ struct is_uint<unsigned short> : mpl::true_ {};
+#endif
+
+ template <>
+ struct is_uint<unsigned int> : mpl::true_ {};
+
+ template <>
+ struct is_uint<unsigned long> : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+ template <>
+ struct is_uint<boost::ulong_long_type> : mpl::true_ {};
+#endif
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Determine if T is a floating point type
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct is_real : mpl::false_ {};
+
+ template <typename T>
+ struct is_real<T const> : is_uint<T> {};
+
+ template <>
+ struct is_real<float> : mpl::true_ {};
+
+ template <>
+ struct is_real<double> : mpl::true_ {};
+
+ template <>
+ struct is_real<long double> : mpl::true_ {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ // customization points for numeric operations
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, typename Enable = void>
+ struct absolute_value;
+
+ template <typename T, typename Enable = void>
+ struct is_negative;
+
+ template <typename T, typename Enable = void>
+ struct is_zero;
+
+ template <typename T, typename Enable = void>
+ struct pow10_helper;
+
+ template <typename T, typename Enable = void>
+ struct is_nan;
+
+ template <typename T, typename Enable = void>
+ struct is_infinite;
+
+ template <typename T, typename Enable = void>
+ struct check_overflow : mpl::false_ {};
+
+ template <typename T>
+ struct check_overflow<T, typename enable_if_c<integer_traits<T>::is_integral>::type>
+ : mpl::true_ {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/optional_traits.hpp b/3party/boost/boost/spirit/home/x3/support/traits/optional_traits.hpp
new file mode 100644
index 0000000000..65568b0265
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/optional_traits.hpp
@@ -0,0 +1,78 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_OPTIONAL_TRAITS_FEBRUARY_06_2007_1001AM)
+#define BOOST_SPIRIT_X3_OPTIONAL_TRAITS_FEBRUARY_06_2007_1001AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, typename Enable = void>
+ struct is_optional
+ : mpl::false_
+ {};
+
+ template <typename T>
+ struct is_optional<boost::optional<T>>
+ : mpl::true_
+ {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ // build_optional
+ //
+ // Build a boost::optional from T. Return unused_type if T is unused_type.
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct build_optional
+ {
+ typedef boost::optional<T> type;
+ };
+
+ template <typename T>
+ struct build_optional<boost::optional<T> >
+ {
+ typedef boost::optional<T> type;
+ };
+
+ template <>
+ struct build_optional<unused_type>
+ {
+ typedef unused_type type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // optional_value
+ //
+ // Get the optional's value_type. Handles unused_type as well.
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct optional_value : mpl::identity<T> {};
+
+ template <typename T>
+ struct optional_value<boost::optional<T> >
+ : mpl::identity<T> {};
+
+ template <>
+ struct optional_value<unused_type>
+ : mpl::identity<unused_type> {};
+
+ template <>
+ struct optional_value<unused_type const>
+ : mpl::identity<unused_type> {};
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/print_attribute.hpp b/3party/boost/boost/spirit/home/x3/support/traits/print_attribute.hpp
new file mode 100644
index 0000000000..47bffce1a1
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/print_attribute.hpp
@@ -0,0 +1,150 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+================================================_==============================*/
+#if !defined(BOOST_SPIRIT_X3_PRINT_ATTRIBUTE_JANUARY_20_2013_0814AM)
+#define BOOST_SPIRIT_X3_PRINT_ATTRIBUTE_JANUARY_20_2013_0814AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/variant.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/for_each.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+#include <boost/spirit/home/x3/support/traits/is_variant.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Out, typename T>
+ void print_attribute(Out& out, T const& val);
+
+ template <typename Out>
+ inline void print_attribute(Out&, unused_type) {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ namespace detail
+ {
+ template <typename Out>
+ struct print_fusion_sequence
+ {
+ print_fusion_sequence(Out& out)
+ : out(out), is_first(true) {}
+
+ typedef void result_type;
+
+ template <typename T>
+ void operator()(T const& val) const
+ {
+ if (is_first)
+ is_first = false;
+ else
+ out << ", ";
+ x3::traits::print_attribute(out, val);
+ }
+
+ Out& out;
+ mutable bool is_first;
+ };
+
+ // print elements in a variant
+ template <typename Out>
+ struct print_visitor : static_visitor<>
+ {
+ print_visitor(Out& out) : out(out) {}
+
+ template <typename T>
+ void operator()(T const& val) const
+ {
+ x3::traits::print_attribute(out, val);
+ }
+
+ Out& out;
+ };
+ }
+
+ template <typename Out, typename T, typename Enable = void>
+ struct print_attribute_debug
+ {
+ // for plain data types
+ template <typename T_>
+ static void call(Out& out, T_ const& val, unused_attribute)
+ {
+ out << "unused";
+ }
+
+ // for plain data types
+ template <typename T_>
+ static void call(Out& out, T_ const& val, plain_attribute)
+ {
+ out << val;
+ }
+
+ // for fusion data types
+ template <typename T_>
+ static void call(Out& out, T_ const& val, tuple_attribute)
+ {
+ out << '[';
+ fusion::for_each(val, detail::print_fusion_sequence<Out>(out));
+ out << ']';
+ }
+
+ // stl container
+ template <typename T_>
+ static void call(Out& out, T_ const& val, container_attribute)
+ {
+ out << '[';
+ if (!traits::is_empty(val))
+ {
+ bool first = true;
+ typename container_iterator<T_ const>::type iend = traits::end(val);
+ for (typename container_iterator<T_ const>::type i = traits::begin(val);
+ !traits::compare(i, iend); traits::next(i))
+ {
+ if (!first)
+ out << ", ";
+ first = false;
+ x3::traits::print_attribute(out, traits::deref(i));
+ }
+ }
+ out << ']';
+ }
+
+ // for variant types
+ template <typename T_>
+ static void call(Out& out, T_ const& val, variant_attribute)
+ {
+ apply_visitor(detail::print_visitor<Out>(out), val);
+ }
+
+ // for optional types
+ template <typename T_>
+ static void call(Out& out, T_ const& val, optional_attribute)
+ {
+ if (val)
+ x3::traits::print_attribute(out, *val);
+ else
+ out << "[empty]";
+ }
+
+ // main entry point
+ static void call(Out& out, T const& val)
+ {
+ call(out, val, typename attribute_category<T>::type());
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Out, typename T>
+ inline void print_attribute(Out& out, T const& val)
+ {
+ print_attribute_debug<Out, T>::call(out, val);
+ }
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/print_token.hpp b/3party/boost/boost/spirit/home/x3/support/traits/print_token.hpp
new file mode 100644
index 0000000000..f1429f4776
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/print_token.hpp
@@ -0,0 +1,79 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+================================================_==============================*/
+#if !defined(BOOST_SPIRIT_X3_PRINT_TOKEN_JANUARY_20_2013_0814AM)
+#define BOOST_SPIRIT_X3_PRINT_TOKEN_JANUARY_20_2013_0814AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <cctype>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // generate debug output for lookahead token (character) stream
+ namespace detail
+ {
+ struct token_printer_debug_for_chars
+ {
+ template<typename Out, typename Char>
+ static void print(Out& o, Char c)
+ {
+ using namespace std; // allow for ADL to find the proper iscntrl
+
+ switch (c)
+ {
+ case '\a': o << "\\a"; break;
+ case '\b': o << "\\b"; break;
+ case '\f': o << "\\f"; break;
+ case '\n': o << "\\n"; break;
+ case '\r': o << "\\r"; break;
+ case '\t': o << "\\t"; break;
+ case '\v': o << "\\v"; break;
+ default:
+ if (c >= 0 && c < 127 && iscntrl(c))
+ o << "\\" << std::oct << int(c);
+ else
+ o << Char(c);
+ }
+ }
+ };
+
+ // for token types where the comparison with char constants wouldn't work
+ struct token_printer_debug
+ {
+ template<typename Out, typename T>
+ static void print(Out& o, T const& val)
+ {
+ o << val;
+ }
+ };
+ }
+
+ template <typename T, typename Enable = void>
+ struct token_printer_debug
+ : mpl::if_<
+ mpl::and_<
+ is_convertible<T, char>, is_convertible<char, T> >
+ , detail::token_printer_debug_for_chars
+ , detail::token_printer_debug>::type
+ {};
+
+ template <typename Out, typename T>
+ inline void print_token(Out& out, T const& val)
+ {
+ // allow to customize the token printer routine
+ token_printer_debug<T>::print(out, val);
+ }
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/string_traits.hpp b/3party/boost/boost/spirit/home/x3/support/traits/string_traits.hpp
new file mode 100644
index 0000000000..46ee356cdc
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/string_traits.hpp
@@ -0,0 +1,291 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2010 Bryce Lelbach
+
+ 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_SPIRIT_X3_STRING_TRAITS_OCTOBER_2008_1252PM)
+#define BOOST_SPIRIT_X3_STRING_TRAITS_OCTOBER_2008_1252PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <string>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // Determine if T is a character type
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct is_char : mpl::false_ {};
+
+ template <typename T>
+ struct is_char<T const> : is_char<T> {};
+
+ template <>
+ struct is_char<char> : mpl::true_ {};
+
+ template <>
+ struct is_char<wchar_t> : mpl::true_ {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Determine if T is a string
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct is_string : mpl::false_ {};
+
+ template <typename T>
+ struct is_string<T const> : is_string<T> {};
+
+ template <>
+ struct is_string<char const*> : mpl::true_ {};
+
+ template <>
+ struct is_string<wchar_t const*> : mpl::true_ {};
+
+ template <>
+ struct is_string<char*> : mpl::true_ {};
+
+ template <>
+ struct is_string<wchar_t*> : mpl::true_ {};
+
+ template <std::size_t N>
+ struct is_string<char[N]> : mpl::true_ {};
+
+ template <std::size_t N>
+ struct is_string<wchar_t[N]> : mpl::true_ {};
+
+ template <std::size_t N>
+ struct is_string<char const[N]> : mpl::true_ {};
+
+ template <std::size_t N>
+ struct is_string<wchar_t const[N]> : mpl::true_ {};
+
+ template <std::size_t N>
+ struct is_string<char(&)[N]> : mpl::true_ {};
+
+ template <std::size_t N>
+ struct is_string<wchar_t(&)[N]> : mpl::true_ {};
+
+ template <std::size_t N>
+ struct is_string<char const(&)[N]> : mpl::true_ {};
+
+ template <std::size_t N>
+ struct is_string<wchar_t const(&)[N]> : mpl::true_ {};
+
+ template <typename T, typename Traits, typename Allocator>
+ struct is_string<std::basic_string<T, Traits, Allocator> > : mpl::true_ {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Get the underlying char type of a string
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct char_type_of;
+
+ template <typename T>
+ struct char_type_of<T const> : char_type_of<T> {};
+
+ template <>
+ struct char_type_of<char> : mpl::identity<char> {};
+
+ template <>
+ struct char_type_of<wchar_t> : mpl::identity<wchar_t> {};
+
+ template <>
+ struct char_type_of<char const*> : mpl::identity<char const> {};
+
+ template <>
+ struct char_type_of<wchar_t const*> : mpl::identity<wchar_t const> {};
+
+ template <>
+ struct char_type_of<char*> : mpl::identity<char> {};
+
+ template <>
+ struct char_type_of<wchar_t*> : mpl::identity<wchar_t> {};
+
+ template <std::size_t N>
+ struct char_type_of<char[N]> : mpl::identity<char> {};
+
+ template <std::size_t N>
+ struct char_type_of<wchar_t[N]> : mpl::identity<wchar_t> {};
+
+ template <std::size_t N>
+ struct char_type_of<char const[N]> : mpl::identity<char const> {};
+
+ template <std::size_t N>
+ struct char_type_of<wchar_t const[N]> : mpl::identity<wchar_t const> {};
+
+ template <std::size_t N>
+ struct char_type_of<char(&)[N]> : mpl::identity<char> {};
+
+ template <std::size_t N>
+ struct char_type_of<wchar_t(&)[N]> : mpl::identity<wchar_t> {};
+
+ template <std::size_t N>
+ struct char_type_of<char const(&)[N]> : mpl::identity<char const> {};
+
+ template <std::size_t N>
+ struct char_type_of<wchar_t const(&)[N]> : mpl::identity<wchar_t const> {};
+
+ template <typename T, typename Traits, typename Allocator>
+ struct char_type_of<std::basic_string<T, Traits, Allocator> >
+ : mpl::identity<T> {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Get the C string from a string
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename String>
+ struct extract_c_string;
+
+ template <typename String>
+ struct extract_c_string
+ {
+ typedef typename char_type_of<String>::type char_type;
+
+ template <typename T>
+ static T const* call (T* str)
+ {
+ return (T const*)str;
+ }
+
+ template <typename T>
+ static T const* call (T const* str)
+ {
+ return str;
+ }
+ };
+
+ // Forwarder that strips const
+ template <typename T>
+ struct extract_c_string<T const>
+ {
+ typedef typename extract_c_string<T>::char_type char_type;
+
+ static typename extract_c_string<T>::char_type const* call (T const str)
+ {
+ return extract_c_string<T>::call(str);
+ }
+ };
+
+ // Forwarder that strips references
+ template <typename T>
+ struct extract_c_string<T&>
+ {
+ typedef typename extract_c_string<T>::char_type char_type;
+
+ static typename extract_c_string<T>::char_type const* call (T& str)
+ {
+ return extract_c_string<T>::call(str);
+ }
+ };
+
+ // Forwarder that strips const references
+ template <typename T>
+ struct extract_c_string<T const&>
+ {
+ typedef typename extract_c_string<T>::char_type char_type;
+
+ static typename extract_c_string<T>::char_type const* call (T const& str)
+ {
+ return extract_c_string<T>::call(str);
+ }
+ };
+
+ template <typename T, typename Traits, typename Allocator>
+ struct extract_c_string<std::basic_string<T, Traits, Allocator> >
+ {
+ typedef T char_type;
+
+ typedef std::basic_string<T, Traits, Allocator> string;
+
+ static T const* call (string const& str)
+ {
+ return str.c_str();
+ }
+ };
+
+ template <typename T>
+ typename extract_c_string<T*>::char_type const*
+ get_c_string(T* str)
+ {
+ return extract_c_string<T*>::call(str);
+ }
+
+ template <typename T>
+ typename extract_c_string<T const*>::char_type const*
+ get_c_string(T const* str)
+ {
+ return extract_c_string<T const*>::call(str);
+ }
+
+ template <typename String>
+ typename extract_c_string<String>::char_type const*
+ get_c_string(String& str)
+ {
+ return extract_c_string<String>::call(str);
+ }
+
+ template <typename String>
+ typename extract_c_string<String>::char_type const*
+ get_c_string(String const& str)
+ {
+ return extract_c_string<String>::call(str);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Get the begin/end iterators from a string
+ ///////////////////////////////////////////////////////////////////////////
+
+ // Implementation for C-style strings.
+
+ template <typename T>
+ inline T const* get_string_begin(T const* str) { return str; }
+
+ template <typename T>
+ inline T* get_string_begin(T* str) { return str; }
+
+ template <typename T>
+ inline T const* get_string_end(T const* str)
+ {
+ T const* last = str;
+ while (*last)
+ last++;
+ return last;
+ }
+
+ template <typename T>
+ inline T* get_string_end(T* str)
+ {
+ T* last = str;
+ while (*last)
+ last++;
+ return last;
+ }
+
+ // Implementation for containers (includes basic_string).
+ template <typename T, typename Str>
+ inline typename Str::const_iterator get_string_begin(Str const& str)
+ { return str.begin(); }
+
+ template <typename T, typename Str>
+ inline typename Str::iterator
+ get_string_begin(Str& str)
+ { return str.begin(); }
+
+ template <typename T, typename Str>
+ inline typename Str::const_iterator get_string_end(Str const& str)
+ { return str.end(); }
+
+ template <typename T, typename Str>
+ inline typename Str::iterator
+ get_string_end(Str& str)
+ { return str.end(); }
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/transform_attribute.hpp b/3party/boost/boost/spirit/home/x3/support/traits/transform_attribute.hpp
new file mode 100644
index 0000000000..24268520d7
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/transform_attribute.hpp
@@ -0,0 +1,48 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2012 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ATTRIBUTE_TRANSFORM_JAN_8_2012_0721PM)
+#define BOOST_SPIRIT_X3_ATTRIBUTE_TRANSFORM_JAN_8_2012_0721PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // transform_attribute
+ //
+ // Sometimes the user needs to transform the attribute types for certain
+ // attributes. This template can be used as a customization point, where
+ // the user is able specify specific transformation rules for any attribute
+ // type.
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Exposed, typename Transformed, typename Tag
+ , typename Enable = void>
+ struct transform_attribute;
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Tag, typename Transformed, typename Exposed>
+ typename transform_attribute<Exposed, Transformed, Tag>::type
+ pre_transform(Exposed& attr)
+ {
+ return transform_attribute<Exposed, Transformed, Tag>::pre(attr);
+ }
+
+ template <typename Tag, typename Transformed, typename Exposed>
+ typename transform_attribute<Exposed, Transformed, Tag>::type
+ pre_transform(Exposed const& attr)
+ {
+ return transform_attribute<Exposed const, Transformed, Tag>::pre(attr);
+ }
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/tuple_traits.hpp b/3party/boost/boost/spirit/home/x3/support/traits/tuple_traits.hpp
new file mode 100644
index 0000000000..17bfd4e1cb
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/tuple_traits.hpp
@@ -0,0 +1,52 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_TUPLE_TRAITS_JANUARY_2012_1132PM)
+#define BOOST_SPIRIT_X3_TUPLE_TRAITS_JANUARY_2012_1132PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename A, typename B>
+ struct has_same_size
+ : mpl::bool_<(
+ fusion::result_of::size<A>::value ==
+ fusion::result_of::size<B>::value
+ )>
+ {};
+
+ template <typename T, std::size_t N>
+ struct has_size
+ : mpl::bool_<(fusion::result_of::size<T>::value == N)>
+ {};
+
+ template <typename A, typename B>
+ struct is_same_size_sequence
+ : mpl::and_<
+ fusion::traits::is_sequence<A>
+ , fusion::traits::is_sequence<B>
+ , has_same_size<A, B>
+ >
+ {};
+
+ template <typename Seq>
+ struct is_size_one_sequence
+ : mpl::and_<
+ fusion::traits::is_sequence<Seq>
+ , has_size<Seq, 1>
+ >
+ {};
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/value_traits.hpp b/3party/boost/boost/spirit/home/x3/support/traits/value_traits.hpp
new file mode 100644
index 0000000000..5f004c957c
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/value_traits.hpp
@@ -0,0 +1,30 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_VALUE_TRAITS_MAY_07_2013_0203PM)
+#define BOOST_SPIRIT_X3_VALUE_TRAITS_MAY_07_2013_0203PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/utility/value_init.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename T, typename Enable = void>
+ struct value_initialize
+ {
+ static T call()
+ {
+ return boost::value_initialized<T>();
+ }
+ };
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/variant_find_substitute.hpp b/3party/boost/boost/spirit/home/x3/support/traits/variant_find_substitute.hpp
new file mode 100644
index 0000000000..4de7b7d5e3
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/variant_find_substitute.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_VARIANT_FIND_SUBSTITUTE_APR_18_2014_930AM)
+#define BOOST_SPIRIT_X3_VARIANT_FIND_SUBSTITUTE_APR_18_2014_930AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/is_substitute.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Variant, typename Attribute>
+ struct variant_find_substitute
+ {
+ // Get the type from the variant that can be a substitute for Attribute.
+ // If none is found, just return Attribute
+
+ typedef Variant variant_type;
+ typedef typename variant_type::types types;
+ typedef typename mpl::end<types>::type end;
+
+ typedef typename
+ mpl::find_if<types, is_same<mpl::_1, Attribute> >::type
+ iter_1;
+
+ typedef typename
+ mpl::eval_if<
+ is_same<iter_1, end>,
+ mpl::find_if<types, traits::is_substitute<mpl::_1, Attribute> >,
+ mpl::identity<iter_1>
+ >::type
+ iter;
+
+ typedef typename
+ mpl::eval_if<
+ is_same<iter, end>,
+ mpl::identity<Attribute>,
+ mpl::deref<iter>
+ >::type
+ type;
+ };
+
+ template <typename Variant>
+ struct variant_find_substitute<Variant, Variant>
+ : mpl::identity<Variant> {};
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/traits/variant_has_substitute.hpp b/3party/boost/boost/spirit/home/x3/support/traits/variant_has_substitute.hpp
new file mode 100644
index 0000000000..d0dfb49b8d
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/traits/variant_has_substitute.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_VARIANT_HAS_SUBSTITUTE_APR_18_2014_925AM)
+#define BOOST_SPIRIT_X3_VARIANT_HAS_SUBSTITUTE_APR_18_2014_925AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/is_substitute.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+ template <typename Variant, typename Attribute>
+ struct variant_has_substitute_impl
+ {
+ // Find a type from the variant that can be a substitute for Attribute.
+ // return true_ if one is found, else false_
+
+ typedef Variant variant_type;
+ typedef typename variant_type::types types;
+ typedef typename mpl::end<types>::type end;
+
+ typedef typename
+ mpl::find_if<types, is_same<mpl::_1, Attribute>>::type
+ iter_1;
+
+ typedef typename
+ mpl::eval_if<
+ is_same<iter_1, end>,
+ mpl::find_if<types, traits::is_substitute<mpl::_1, Attribute>>,
+ mpl::identity<iter_1>
+ >::type
+ iter;
+
+ typedef mpl::not_<is_same<iter, end>> type;
+ };
+
+ template <typename Variant, typename Attribute>
+ struct variant_has_substitute
+ : variant_has_substitute_impl<Variant, Attribute>::type {};
+
+ template <typename Attribute>
+ struct variant_has_substitute<unused_type, Attribute> : mpl::true_ {};
+
+ template <typename Attribute>
+ struct variant_has_substitute<unused_type const, Attribute> : mpl::true_ {};
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/unused.hpp b/3party/boost/boost/spirit/home/x3/support/unused.hpp
new file mode 100644
index 0000000000..cf42d13098
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/unused.hpp
@@ -0,0 +1,93 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_UNUSED_APRIL_16_2006_0616PM)
+#define BOOST_SPIRIT_X3_UNUSED_APRIL_16_2006_0616PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <ostream>
+#include <istream>
+#include <boost/mpl/identity.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4522) // multiple assignment operators specified warning
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace x3
+{
+ struct unused_type
+ {
+ unused_type()
+ {
+ }
+
+ template <typename T>
+ unused_type(T const&)
+ {
+ }
+
+ template <typename T>
+ unused_type const&
+ operator=(T const&) const
+ {
+ return *this;
+ }
+
+ template <typename T>
+ unused_type&
+ operator=(T const&)
+ {
+ return *this;
+ }
+
+ unused_type const&
+ operator=(unused_type const&) const
+ {
+ return *this;
+ }
+
+ unused_type&
+ operator=(unused_type const&)
+ {
+ return *this;
+ }
+
+ // unused_type can also masquerade as an empty context (see context.hpp)
+
+ template <typename ID>
+ struct get_result : mpl::identity<unused_type> {};
+
+ template <typename ID>
+ unused_type get(ID) const
+ {
+ return unused_type();
+ }
+ };
+
+ unused_type const unused = unused_type();
+
+ inline std::ostream& operator<<(std::ostream& out, unused_type const&)
+ {
+ return out;
+ }
+
+ inline std::istream& operator>>(std::istream& in, unused_type&)
+ {
+ return in;
+ }
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/utility/detail/testing.hpp b/3party/boost/boost/spirit/home/x3/support/utility/detail/testing.hpp
new file mode 100644
index 0000000000..1423d9fc7b
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/utility/detail/testing.hpp
@@ -0,0 +1,16 @@
+/*=============================================================================
+ Copyright (c) 2014 Joel de Guzman
+
+ 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_SPIRIT_X3_DETAIL_TESTING_JUNE_05_2014_00422PM)
+#define BOOST_SPIRIT_X3_DETAIL_TESTING_JUNE_05_2014_00422PM
+
+namespace boost { namespace spirit { namespace x3 { namespace testing
+{
+
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/utility/error_reporting.hpp b/3party/boost/boost/spirit/home/x3/support/utility/error_reporting.hpp
new file mode 100644
index 0000000000..9e65f2149b
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/utility/error_reporting.hpp
@@ -0,0 +1,241 @@
+/*=============================================================================
+ Copyright (c) 2014 Joel de Guzman
+
+ 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_SPIRIT_X3_ERROR_REPORTING_MAY_19_2014_00405PM)
+#define BOOST_SPIRIT_X3_ERROR_REPORTING_MAY_19_2014_00405PM
+
+#include <boost/filesystem/path.hpp>
+#include <boost/spirit/home/x3/support/ast/position_tagged.hpp>
+#include <ostream>
+
+// Clang-style error handling utilities
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Iterator>
+ class error_handler
+ {
+ public:
+
+ typedef Iterator iterator_type;
+
+ error_handler(
+ Iterator first, Iterator last, std::ostream& err_out
+ , std::string file = "", int tabs = 4)
+ : err_out(err_out)
+ , file(file)
+ , tabs(tabs)
+ , pos_cache(first, last) {}
+
+ typedef void result_type;
+
+ void operator()(Iterator err_pos, std::string const& error_message) const;
+ void operator()(Iterator err_first, Iterator err_last, std::string const& error_message) const;
+ void operator()(position_tagged pos, std::string const& message) const
+ {
+ auto where = pos_cache.position_of(pos);
+ (*this)(
+ where.begin()
+ , where.end()
+ , message
+ );
+ }
+
+ template <typename AST>
+ void tag(AST& ast, Iterator first, Iterator last)
+ {
+ return pos_cache.annotate(ast, first, last);
+ }
+//
+// void operator()(
+// Iterator first
+// , Iterator last
+// , Iterator err_op
+// , Iterator err_first
+// , Iterator err_last
+// , std::string const& error_message
+// ) const;
+
+ private:
+
+ void print_file_line(std::size_t line) const;
+ void print_line(Iterator& line_start, Iterator last) const;
+ void print_indicator(Iterator& line_start, Iterator last, char ind) const;
+ void skip_whitespace(Iterator& err_pos, Iterator last) const;
+ void skip_non_whitespace(Iterator& err_pos, Iterator last) const;
+ Iterator get_line_start(Iterator first, Iterator pos) const;
+ std::size_t position(Iterator i) const;
+
+ std::ostream& err_out;
+ std::string file;
+ int tabs;
+ position_cache<std::vector<Iterator>> pos_cache;
+ };
+
+ template <typename Iterator>
+ void error_handler<Iterator>::print_file_line(std::size_t line) const
+ {
+ namespace fs = boost::filesystem;
+
+ if (file != "")
+ err_out << "In file " << fs::path(file).generic_string() << ", ";
+ else
+ err_out << "In ";
+
+ err_out << "line " << line << ':' << std::endl;
+ }
+
+ template <typename Iterator>
+ void error_handler<Iterator>::print_line(Iterator& start, Iterator last) const
+ {
+ for (; start != last; ++start)
+ {
+ auto c = *start;
+ if (c == '\r' || c == '\n')
+ break;
+ else
+ err_out << c;
+ }
+ err_out << std::endl;
+ }
+
+ template <typename Iterator>
+ void error_handler<Iterator>::print_indicator(Iterator& start, Iterator last, char ind) const
+ {
+ for (; start != last; ++start)
+ {
+ auto c = *start;
+ if (c == '\r' || c == '\n')
+ break;
+ else if (c == '\t')
+ for (int i = 0; i < tabs; ++i)
+ err_out << ind;
+ else
+ err_out << ind;
+ }
+ }
+
+ template <typename Iterator>
+ void error_handler<Iterator>::skip_whitespace(Iterator& err_pos, Iterator last) const
+ {
+ // make sure err_pos does not point to white space
+ while (err_pos != last)
+ {
+ char c = *err_pos;
+ if (std::isspace(c))
+ ++err_pos;
+ else
+ break;
+ }
+ }
+
+ template <typename Iterator>
+ void error_handler<Iterator>::skip_non_whitespace(Iterator& err_pos, Iterator last) const
+ {
+ // make sure err_pos does not point to white space
+ while (err_pos != last)
+ {
+ char c = *err_pos;
+ if (std::isspace(c))
+ break;
+ else
+ ++err_pos;
+ }
+ }
+
+ template <class Iterator>
+ inline Iterator error_handler<Iterator>::get_line_start(Iterator first, Iterator pos) const
+ {
+ Iterator latest = first;
+ for (Iterator i = first; i != pos; ++i)
+ if (*i == '\r' || *i == '\n')
+ latest = i;
+ return latest;
+ }
+
+ template <typename Iterator>
+ std::size_t error_handler<Iterator>::position(Iterator i) const
+ {
+ // $$$ asumes iterator is similar to line_pos_iterator $$$
+ return i.position();
+ }
+
+ template <typename Iterator>
+ void error_handler<Iterator>::operator()(
+ Iterator err_pos, std::string const& error_message) const
+ {
+ Iterator first = pos_cache.first();
+ Iterator last = pos_cache.last();
+
+ // make sure err_pos does not point to white space
+ skip_whitespace(err_pos, last);
+
+ print_file_line(position(err_pos));
+ err_out << error_message << std::endl;
+
+ Iterator start = get_line_start(first, err_pos);
+ if (start != first)
+ ++start;
+ Iterator i = start;
+ print_line(i, last);
+ print_indicator(start, err_pos, '_');
+ err_out << "^_" << std::endl;
+ }
+
+ template <typename Iterator>
+ void error_handler<Iterator>::operator()(
+ Iterator err_first, Iterator err_last, std::string const& error_message) const
+ {
+ Iterator first = pos_cache.first();
+ Iterator last = pos_cache.last();
+
+ // make sure err_pos does not point to white space
+ skip_whitespace(err_first, last);
+
+ print_file_line(position(err_first));
+ err_out << error_message << std::endl;
+
+ Iterator start = get_line_start(first, err_first);
+ if (start != first)
+ ++start;
+ Iterator i = start;
+ print_line(i, last);
+ print_indicator(start, err_first, ' ');
+ print_indicator(start, err_last, '~');
+ err_out << " <<-- Here" << std::endl;
+ }
+//
+// template <typename Iterator>
+// void error_handler<Iterator>::operator()(
+// Iterator first
+// , Iterator last
+// , Iterator err_op
+// , Iterator err_first
+// , Iterator err_last
+// , std::string const& error_message
+// ) const
+// {
+// // make sure err_pos does not point to white space
+// skip_whitespace(err_first, last);
+//
+// print_file_line(position(err_pos));
+// err_out << error_message << std::endl;
+//
+// Iterator start = get_line_start(first, err_first);
+// if (start != first)
+// ++start;
+// Iterator i = start;
+// print_line(i, last);
+// print_indicator(start, err_first, ' ');
+// print_indicator(start, err_op, '~');
+// err_out << '^';
+// print_indicator(++start, err_last, '~');
+// err_out << " <<-- Here" << std::endl;
+// }
+
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/utility/integer_sequence.hpp b/3party/boost/boost/spirit/home/x3/support/utility/integer_sequence.hpp
new file mode 100644
index 0000000000..1f0bace72b
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/utility/integer_sequence.hpp
@@ -0,0 +1,94 @@
+/*//////////////////////////////////////////////////////////////////////////////
+ Copyright (c) 2014 Jamboree
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////*/
+#ifndef BOOST_SPIRIT_X3_INTEGER_SEQUENCE_HPP_INCLUDED
+#define BOOST_SPIRIT_X3_INTEGER_SEQUENCE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cstddef>
+#include <boost/type_traits/integral_constant.hpp>
+
+// This is a standard (c++1y) compatible integer_sequence implementation,
+// it's needed for now, and it could be replaced with std::integer_sequence
+// once the new standard is available everywhere.
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename T, T... Ns>
+ struct integer_sequence
+ {
+ typedef T value_type;
+
+ static constexpr std::size_t size() noexcept
+ {
+ return sizeof...(Ns);
+ }
+ };
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+ template <typename T, typename S1, typename S2, T N>
+ struct accum_integer_sequence;
+
+ template <typename T, T... N1, T... N2, T N>
+ struct accum_integer_sequence<T, integer_sequence<T, N1...>, integer_sequence<T, N2...>, N>
+ {
+ typedef integer_sequence<T, N1..., (N + N2)...> type;
+ };
+
+ template <typename N>
+ struct make_integer_sequence_impl
+ {
+ typedef typename N::value_type T;
+ static T const n = N::value;
+ static T const m = n / 2;
+ typedef typename
+ make_integer_sequence_impl<integral_constant<T, m>>::type
+ part1;
+ typedef typename
+ make_integer_sequence_impl<integral_constant<T, n - m>>::type
+ part2;
+ typedef typename
+ accum_integer_sequence<T, part1, part2, m>::type
+ type;
+ };
+
+ template <typename T>
+ struct make_integer_sequence_impl<integral_constant<T, 0>>
+ {
+ typedef integer_sequence<T> type;
+ };
+
+ template <typename T>
+ struct make_integer_sequence_impl<integral_constant<T, 1>>
+ {
+ typedef integer_sequence<T, 0> type;
+ };
+}}}}
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <std::size_t... Ns>
+ using index_sequence = integer_sequence<std::size_t, Ns...>;
+
+ template <typename T, T N>
+ using make_integer_sequence = typename detail::make_integer_sequence_impl<
+ integral_constant<T, N>>::type;
+
+ template <std::size_t N>
+ using make_index_sequence = make_integer_sequence<std::size_t, N>;
+
+ template <typename... T>
+ using index_sequence_for = make_index_sequence<sizeof...(T)>;
+}}}
+
+
+#endif
+
diff --git a/3party/boost/boost/spirit/home/x3/support/utility/is_callable.hpp b/3party/boost/boost/spirit/home/x3/support/utility/is_callable.hpp
new file mode 100644
index 0000000000..17f86822b8
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/utility/is_callable.hpp
@@ -0,0 +1,45 @@
+/*//////////////////////////////////////////////////////////////////////////////
+ Copyright (c) 2014 Jamboree
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////*/
+#ifndef BOOST_SPIRIT_X3_IS_CALLABLE_HPP_INCLUDED
+#define BOOST_SPIRIT_X3_IS_CALLABLE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/utility/result_of.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+ template <typename Sig, typename Enable = void>
+ struct is_callable_impl
+ : mpl::false_
+ {};
+
+ template <typename F, typename... A>
+ struct is_callable_impl<F(A...), typename disable_if_substitution_failure<
+ typename result_of<F(A...)>::type>::type>
+ : mpl::true_
+ {};
+}}}}
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Sig>
+ struct is_callable;
+
+ template <typename F, typename... A>
+ struct is_callable<F(A...)>
+ : detail::is_callable_impl<F(A...)>
+ {};
+}}}
+
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/utility/lambda_visitor.hpp b/3party/boost/boost/spirit/home/x3/support/utility/lambda_visitor.hpp
new file mode 100644
index 0000000000..83e1d2f046
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/utility/lambda_visitor.hpp
@@ -0,0 +1,49 @@
+/*=============================================================================
+ Copyright (c) 2014 Joel de Guzman
+
+ 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_SPIRIT_X3_LAMBDA_VISITOR_MAY_19_2014_1116AM)
+#define BOOST_SPIRIT_X3_LAMBDA_VISITOR_MAY_19_2014_1116AM
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename RT, typename... Lambdas>
+ struct lambda_visitor;
+
+ template <typename RT, typename F, typename... Lambdas>
+ struct lambda_visitor<RT, F, Lambdas...> : F, lambda_visitor<RT, Lambdas...>
+ {
+ typedef lambda_visitor<RT , Lambdas...> base_type;
+ using F::operator();
+ using base_type::operator();
+ lambda_visitor(F f, Lambdas... lambdas)
+ : F(f), base_type(lambdas...)
+ {}
+ };
+
+ template <typename RT, typename F>
+ struct lambda_visitor<RT, F> : F
+ {
+ typedef RT result_type;
+ using F::operator();
+ lambda_visitor(F f)
+ : F(f)
+ {}
+ };
+
+ template <typename RT>
+ struct lambda_visitor<RT>
+ {
+ typedef RT result_type;
+ };
+
+ template <typename RT, typename... Lambdas>
+ lambda_visitor<RT, Lambdas...> make_lambda_visitor(Lambdas... lambdas)
+ {
+ return { lambdas... };
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/utility/sfinae.hpp b/3party/boost/boost/spirit/home/x3/support/utility/sfinae.hpp
new file mode 100644
index 0000000000..6cefa95961
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/utility/sfinae.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustin Berge
+
+ 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_SPIRIT_X3_SFINAE_MAY_20_2013_0840AM)
+#define BOOST_SPIRIT_X3_SFINAE_MAY_20_2013_0840AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename Expr, typename T = void>
+ struct disable_if_substitution_failure
+ {
+ typedef T type;
+ };
+ template <typename Expr, typename T>
+ struct lazy_disable_if_substitution_failure
+ {
+ typedef typename T::type type;
+ };
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/utility/testing.hpp b/3party/boost/boost/spirit/home/x3/support/utility/testing.hpp
new file mode 100644
index 0000000000..fced46bef8
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/utility/testing.hpp
@@ -0,0 +1,69 @@
+/*=============================================================================
+ Copyright (c) 2014 Joel de Guzman
+
+ 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_SPIRIT_X3_TESTING_JUNE_05_2014_00422PM)
+#define BOOST_SPIRIT_X3_TESTING_JUNE_05_2014_00422PM
+
+namespace boost { namespace spirit { namespace x3 { namespace testing
+{
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // Test utility
+ //
+ // The test function accepts a file loaded in memory. The 'test_file'
+ // range param points to the data contained in the file. This file
+ // contains two parts.
+ //
+ // 1) The source input for testing
+ // 2) The expected result.
+ //
+ // The first part of the file is sent to the generator function
+ // 'gen' which returns a string. This generated string is then compared
+ // to the contents of the second (expected result) part.
+ //
+ // The second part is demarcated by the string parameter 'demarcation'
+ // which defaults to "<**expected**>". The expected template may include
+ // embedded regular expressions marked-up within re_prefix and re_suffix
+ // parameter tags. For example, given the default RE markup ("<%" and
+ // "%>"), this template:
+ //
+ // <%[0-9]+%>
+ //
+ // will match any integer in the source input being tested. The function
+ // will return the first non-matching position. The flag full_match
+ // indicates a full match. It is possible for returned pos to be
+ // at the end of in (in.end()) while still returning full_match ==
+ // false. In that case, we have a partial match.
+ //
+ // Here's an example of a test file:
+ //
+ // Hello World, I am Joel. This is a test.
+ //
+ // <**expected**>
+ // Hello World, I am <%[a-zA-Z]+%>. This is a test.
+ //
+ ////////////////////////////////////////////////////////////////////////////
+
+ template <typename Iterator>
+ struct test_result
+ {
+ Iterator pos;
+ bool full_match;
+ };
+
+ template <typename Range, typename F>
+ test_result<typename Range::const_iterator>
+ test(
+ Range test_file
+ , F gen
+ , char const* demarcation = "<**expected**>"
+ , char const* re_prefix = "<%"
+ , char const* re_suffix = "%>"
+ );
+
+}}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/home/x3/support/utility/unrefcv.hpp b/3party/boost/boost/spirit/home/x3/support/utility/unrefcv.hpp
new file mode 100644
index 0000000000..fa4d448178
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/utility/unrefcv.hpp
@@ -0,0 +1,29 @@
+/*//////////////////////////////////////////////////////////////////////////////
+ Copyright (c) 2014 Jamboree
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////*/
+#ifndef BOOST_SPIRIT_X3_UNREFCV_HPP_INCLUDED
+#define BOOST_SPIRIT_X3_UNREFCV_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+
+namespace boost { namespace spirit { namespace x3
+{
+ template <typename T>
+ struct unrefcv : remove_cv<typename remove_reference<T>::type> {};
+
+ template <typename T>
+ using unrefcv_t = typename unrefcv<T>::type;
+}}}
+
+
+#endif
+
diff --git a/3party/boost/boost/spirit/home/x3/support/utility/utf8.hpp b/3party/boost/boost/spirit/home/x3/support/utility/utf8.hpp
new file mode 100644
index 0000000000..93b5a22077
--- /dev/null
+++ b/3party/boost/boost/spirit/home/x3/support/utility/utf8.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_SPIRIT_X3_UC_TYPES_NOVEMBER_23_2008_0840PM)
+#define BOOST_SPIRIT_X3_UC_TYPES_NOVEMBER_23_2008_0840PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/foreach.hpp>
+#include <boost/regex/pending/unicode_iterator.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <string>
+
+namespace boost { namespace spirit { namespace x3
+{
+ typedef ::boost::uint32_t ucs4_char;
+ typedef char utf8_char;
+ typedef std::basic_string<ucs4_char> ucs4_string;
+ typedef std::basic_string<utf8_char> utf8_string;
+
+ template <typename Char>
+ inline utf8_string to_utf8(Char value)
+ {
+ // always store as UTF8
+ utf8_string result;
+ typedef std::back_insert_iterator<utf8_string> insert_iter;
+ insert_iter out_iter(result);
+ utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+ typedef typename make_unsigned<Char>::type UChar;
+ *utf8_iter = (UChar)value;
+ return result;
+ }
+
+ template <typename Char>
+ inline utf8_string to_utf8(Char const* str)
+ {
+ // always store as UTF8
+ utf8_string result;
+ typedef std::back_insert_iterator<utf8_string> insert_iter;
+ insert_iter out_iter(result);
+ utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+ typedef typename make_unsigned<Char>::type UChar;
+ while (*str)
+ *utf8_iter++ = (UChar)*str++;
+ return result;
+ }
+
+ template <typename Char, typename Traits, typename Allocator>
+ inline utf8_string
+ to_utf8(std::basic_string<Char, Traits, Allocator> const& str)
+ {
+ // always store as UTF8
+ utf8_string result;
+ typedef std::back_insert_iterator<utf8_string> insert_iter;
+ insert_iter out_iter(result);
+ utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+ typedef typename make_unsigned<Char>::type UChar;
+ BOOST_FOREACH(Char ch, str)
+ {
+ *utf8_iter++ = (UChar)ch;
+ }
+ return result;
+ }
+}}}
+
+#endif
diff --git a/3party/boost/boost/spirit/include/phoenix.hpp b/3party/boost/boost/spirit/include/phoenix.hpp
index f60958739a..7915d74d14 100644
--- a/3party/boost/boost/spirit/include/phoenix.hpp
+++ b/3party/boost/boost/spirit/include/phoenix.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX
#define BOOST_SPIRIT_INCLUDE_PHOENIX
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix.hpp>
-#else
#include <boost/phoenix.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_algorithm.hpp b/3party/boost/boost/spirit/include/phoenix_algorithm.hpp
index 4b97d4cf4c..9b434e4c6a 100644
--- a/3party/boost/boost/spirit/include/phoenix_algorithm.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_algorithm.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_ALGORITHM
#define BOOST_SPIRIT_INCLUDE_PHOENIX_ALGORITHM
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/algorithm.hpp>
-#else
#include <boost/phoenix/stl/algorithm.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_bind.hpp b/3party/boost/boost/spirit/include/phoenix_bind.hpp
index f289ac02ca..1c8cd4ebf4 100644
--- a/3party/boost/boost/spirit/include/phoenix_bind.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_bind.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_BIND
#define BOOST_SPIRIT_INCLUDE_PHOENIX_BIND
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/bind.hpp>
-#else
#include <boost/phoenix/bind.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_container.hpp b/3party/boost/boost/spirit/include/phoenix_container.hpp
index 95b13a25aa..c78e28b0d3 100644
--- a/3party/boost/boost/spirit/include/phoenix_container.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_container.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_CONTAINER
#define BOOST_SPIRIT_INCLUDE_PHOENIX_CONTAINER
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/container.hpp>
-#else
#include <boost/phoenix/stl/container.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_core.hpp b/3party/boost/boost/spirit/include/phoenix_core.hpp
index 55b5010ec3..d08ed06687 100644
--- a/3party/boost/boost/spirit/include/phoenix_core.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_core.hpp
@@ -8,12 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_CORE
#define BOOST_SPIRIT_INCLUDE_PHOENIX_CORE
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#define BOOST_PHOENIX_DEFINE_CUSTOM_TERMINAL(A,B,C,D)
-#include <boost/spirit/home/phoenix/core.hpp>
-#else
#include <boost/phoenix/core.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_function.hpp b/3party/boost/boost/spirit/include/phoenix_function.hpp
index 76c244d975..6ab828f53b 100644
--- a/3party/boost/boost/spirit/include/phoenix_function.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_function.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_FUNCTION
#define BOOST_SPIRIT_INCLUDE_PHOENIX_FUNCTION
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/function.hpp>
-#else
#include <boost/phoenix/function.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_fusion.hpp b/3party/boost/boost/spirit/include/phoenix_fusion.hpp
index 8ab422a5b0..4820ba8a53 100644
--- a/3party/boost/boost/spirit/include/phoenix_fusion.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_fusion.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_FUSION
#define BOOST_SPIRIT_INCLUDE_PHOENIX_FUSION
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/fusion.hpp>
-#else
#include <boost/phoenix/fusion.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_limits.hpp b/3party/boost/boost/spirit/include/phoenix_limits.hpp
index 3d9ed3a4ee..93a1e1ef90 100644
--- a/3party/boost/boost/spirit/include/phoenix_limits.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_limits.hpp
@@ -8,9 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_LIMITS
#define BOOST_SPIRIT_INCLUDE_PHOENIX_LIMITS
-
-#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
#include <boost/phoenix/core/limits.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_object.hpp b/3party/boost/boost/spirit/include/phoenix_object.hpp
index 5bb6dd469c..43be44d2d4 100644
--- a/3party/boost/boost/spirit/include/phoenix_object.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_object.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_OBJECT
#define BOOST_SPIRIT_INCLUDE_PHOENIX_OBJECT
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/object.hpp>
-#else
#include <boost/phoenix/object.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_operator.hpp b/3party/boost/boost/spirit/include/phoenix_operator.hpp
index 03c66c9d12..5ba6921257 100644
--- a/3party/boost/boost/spirit/include/phoenix_operator.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_operator.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_OPERATOR
#define BOOST_SPIRIT_INCLUDE_PHOENIX_OPERATOR
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/operator.hpp>
-#else
#include <boost/phoenix/operator.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_scope.hpp b/3party/boost/boost/spirit/include/phoenix_scope.hpp
index c71533e90d..6ab3d954ee 100644
--- a/3party/boost/boost/spirit/include/phoenix_scope.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_scope.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_SCOPE
#define BOOST_SPIRIT_INCLUDE_PHOENIX_SCOPE
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/scope.hpp>
-#else
#include <boost/phoenix/scope.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_statement.hpp b/3party/boost/boost/spirit/include/phoenix_statement.hpp
index e6729b2ec5..498b70fa84 100644
--- a/3party/boost/boost/spirit/include/phoenix_statement.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_statement.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_STATEMENT
#define BOOST_SPIRIT_INCLUDE_PHOENIX_STATEMENT
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/statement.hpp>
-#else
#include <boost/phoenix/statement.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_stl.hpp b/3party/boost/boost/spirit/include/phoenix_stl.hpp
index 63656357cd..c60bfb4213 100644
--- a/3party/boost/boost/spirit/include/phoenix_stl.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_stl.hpp
@@ -8,11 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_STL
#define BOOST_SPIRIT_INCLUDE_PHOENIX_STL
-
-#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
-#include <boost/spirit/home/phoenix/stl.hpp>
-#else
#include <boost/phoenix/stl.hpp>
#endif
-
-#endif
diff --git a/3party/boost/boost/spirit/include/phoenix_version.hpp b/3party/boost/boost/spirit/include/phoenix_version.hpp
index acc3fdf192..3d0327a1d2 100644
--- a/3party/boost/boost/spirit/include/phoenix_version.hpp
+++ b/3party/boost/boost/spirit/include/phoenix_version.hpp
@@ -8,5 +8,5 @@
=============================================================================*/
#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_VERSION
#define BOOST_SPIRIT_INCLUDE_PHOENIX_VERSION
-#include <boost/spirit/home/phoenix/version.hpp>
+#include <boost/phoenix/version.hpp>
#endif
diff --git a/3party/boost/boost/spirit/include/qi_copy.hpp b/3party/boost/boost/spirit/include/qi_copy.hpp
new file mode 100644
index 0000000000..6ad8c3f125
--- /dev/null
+++ b/3party/boost/boost/spirit/include/qi_copy.hpp
@@ -0,0 +1,17 @@
+/*=============================================================================
+ Copyright (c) 2001-2012 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_COPY
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_COPY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/copy.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/include/support_auto.hpp b/3party/boost/boost/spirit/include/support_auto.hpp
new file mode 100644
index 0000000000..6021d84c5e
--- /dev/null
+++ b/3party/boost/boost/spirit/include/support_auto.hpp
@@ -0,0 +1,17 @@
+/*=============================================================================
+ Copyright (c) 2001-2012 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_AUTO
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_AUTO
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/auto.hpp>
+
+#endif
diff --git a/3party/boost/boost/spirit/repository/home/karma/nonterminal/subrule.hpp b/3party/boost/boost/spirit/repository/home/karma/nonterminal/subrule.hpp
index a208e02c01..0c6fc6bfa8 100644
--- a/3party/boost/boost/spirit/repository/home/karma/nonterminal/subrule.hpp
+++ b/3party/boost/boost/spirit/repository/home/karma/nonterminal/subrule.hpp
@@ -207,7 +207,7 @@ namespace boost { namespace spirit { namespace repository { namespace karma
// trying to use a subrule which has inherited attributes,
// without passing values for them.
context_type context(*this
- , traits::pre_transform<karma::domain, subrule_attr_type>(
+ , traits::pre_transform<spirit::karma::domain, subrule_attr_type>(
make_attribute::call(attr)));
return def.binder(sink, context, delimiter);
@@ -242,7 +242,7 @@ namespace boost { namespace spirit { namespace repository { namespace karma
// trying to use a subrule which has inherited attributes,
// passing values of incompatible types for them.
context_type context(*this
- , traits::pre_transform<karma::domain, subrule_attr_type>(
+ , traits::pre_transform<spirit::karma::domain, subrule_attr_type>(
make_attribute::call(attr)), params, caller_context);
return def.binder(sink, context, delimiter);
diff --git a/3party/boost/boost/spirit/repository/home/qi/directive/kwd.hpp b/3party/boost/boost/spirit/repository/home/qi/directive/kwd.hpp
index bba1a78448..18020804bd 100644
--- a/3party/boost/boost/spirit/repository/home/qi/directive/kwd.hpp
+++ b/3party/boost/boost/spirit/repository/home/qi/directive/kwd.hpp
@@ -30,25 +30,25 @@ namespace boost { namespace spirit
///////////////////////////////////////////////////////////////////////////
// Enablers
///////////////////////////////////////////////////////////////////////////
-
+
template < typename T>
struct use_directive<qi::domain
, terminal_ex<repository::tag::kwd // enables kwd(key)[p]
, fusion::vector1<T > >
> : mpl::true_ {};
-
+
template < typename T>
struct use_directive<qi::domain
, terminal_ex<repository::tag::ikwd // enables ikwd(key)[p]
, fusion::vector1<T > >
> : mpl::true_ {};
-
+
template < typename T>
struct use_directive<qi::domain
, terminal_ex<repository::tag::dkwd // enables dkwd(key)[p]
, fusion::vector1<T > >
> : mpl::true_ {};
-
+
template < typename T>
struct use_directive<qi::domain
, terminal_ex<repository::tag::idkwd // enables idkwd(key)[p]
@@ -109,7 +109,7 @@ namespace boost { namespace spirit
, terminal_ex<repository::tag::kwd // enables kwd(min, inf)[p]
, fusion::vector3<T1, T2, inf_type > >
> : mpl::true_ {};
-
+
template < typename T1, typename T2>
struct use_directive<qi::domain
, terminal_ex<repository::tag::ikwd // enables ikwd(min, inf)[p]
@@ -164,7 +164,7 @@ template <typename T>
flag=true;
return true;
}
-
+
private:
// silence MSVC warning C4512: assignment operator could not be generated
@@ -193,7 +193,7 @@ template <typename T>
}
else
return flag=false;
-
+
}
T const exact;
@@ -254,42 +254,42 @@ template <typename T>
kwd_infinite_iterator& operator= (kwd_infinite_iterator const&);
};
- // This class enables the transportation of parameters needed to call
+ // This class enables the transportation of parameters needed to call
// the occurence constraint checker from higher level calls
- // It also serves to select the correct parse function call
+ // It also serves to select the correct parse function call
// of the keyword parser. The implementation changes depending if it is
// called form a keyword parsing loop or not.
template <typename Skipper, typename NoCasePass>
struct skipper_keyword_marker
{
typedef NoCasePass no_case_pass;
-
- skipper_keyword_marker(Skipper const &skipper,bool &flag,int &counter) :
+
+ skipper_keyword_marker(Skipper const &skipper,bool &flag,int &counter) :
skipper(skipper)
, flag(flag)
- , counter(counter)
+ , counter(counter)
{}
-
+
const Skipper &skipper;
bool &flag;
int &counter;
};
-
+
template <typename Subject, typename KeywordType, typename LoopIter , typename NoCase, typename Distinct >
struct kwd_parser : spirit::qi::unary_parser<kwd_parser<Subject, KeywordType, LoopIter , NoCase, Distinct > >
{
struct kwd_parser_id;
-
+
typedef Subject subject_type;
typedef NoCase no_case_keyword;
typedef Distinct distinct;
-
+
typedef typename
remove_const<typename traits::char_type_of<KeywordType>::type>::type
char_type;
-
+
typedef std::basic_string<char_type> keyword_type;
-
+
template <typename Context, typename Iterator>
struct attribute
{
@@ -300,13 +300,13 @@ template <typename T>
>::type
type;
};
-
+
kwd_parser(Subject const& subject
, typename add_reference<KeywordType>::type keyword
, LoopIter const& iter)
- : subject(subject), iter(iter), keyword(keyword) {}
-
+ : subject(subject), iter(iter), keyword(keyword) {}
+
template<typename CharEncoding>
kwd_parser(Subject const& subject
, typename add_reference<KeywordType>::type keyword
@@ -323,15 +323,15 @@ template <typename T>
{
return subject.parse(first,last,context,skipper,attr);
}
-
+
// Call the subject parser on a container attribute
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse_impl(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
, Attribute& attr,mpl::true_) const
- {
-
+ {
+
// synthesized attribute needs to be default constructed
typename traits::container_value<Attribute>::type val =
typename traits::container_value<Attribute>::type();
@@ -347,23 +347,23 @@ template <typename T>
}
return r;
}
-
+
template <typename Iterator, typename Context
, typename Skipper, typename Attribute,typename NoCasePass>
bool parse(Iterator& first, Iterator const& last
, Context& context, skipper_keyword_marker<Skipper,NoCasePass> const& skipper
, Attribute &attr) const
{
-
+
typedef typename traits::attribute_of<
Subject, Context, Iterator>::type
subject_attribute;
-
+
typedef typename mpl::and_<
traits::is_container<Attribute>
, mpl::not_< traits::is_weak_substitute< subject_attribute,Attribute > >
>::type predicate;
-
+
if((no_case_keyword::value && NoCasePass::value) || !NoCasePass::value)
{
if(parse_impl(first,last,context,skipper.skipper,attr, predicate()))
@@ -371,7 +371,7 @@ template <typename T>
}
return false;
}
-
+
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse(Iterator& first, Iterator const& last
@@ -381,12 +381,12 @@ template <typename T>
typedef typename traits::attribute_of<
Subject, Context, Iterator>::type
subject_attribute;
-
+
typedef typename mpl::and_<
traits::is_container<Attribute>
, mpl::not_< traits::is_weak_substitute< subject_attribute,Attribute > >
>::type predicate;
-
+
// Parse the keyword
bool flag = iter.flag_init();
@@ -395,24 +395,24 @@ template <typename T>
spirit::qi::skip_over(first, last, skipper);
if(keyword.parse(first,last,context,skipper,unused)){
if((!distinct::value) || skipper.parse(first,last,unused,unused,unused)){
- // Followed by the subject parser
- spirit::qi::skip_over(first, last, skipper);
- if(parse_impl(first,last,context,skipper,attr, predicate()))
- {
- return iter.register_successful_parse(flag,counter);
+ // Followed by the subject parser
+ spirit::qi::skip_over(first, last, skipper);
+ if(parse_impl(first,last,context,skipper,attr, predicate()))
+ {
+ return iter.register_successful_parse(flag,counter);
+ }
}
}
- }
- first = save;
- return flag;
+ first = save;
+ return flag;
}
-
-
+
+
template <typename Context>
- info what(Context& context) const
- {
+ info what(Context& context) const
+ {
if(distinct::value){
- if(no_case_keyword::value)
+ if(no_case_keyword::value)
return info("idkwd", subject.what(context));
else
return info("dkwd", subject.what(context));
@@ -421,14 +421,14 @@ template <typename T>
{
if(no_case_keyword::value)
return info("ikwd", subject.what(context));
- else
+ else
return info("kwd", subject.what(context));
- }
+ }
}
Subject subject;
- LoopIter iter;
-
+ LoopIter iter;
+
typedef typename mpl::if_<
no_case_keyword,
spirit::qi::no_case_literal_string< KeywordType, true>,
@@ -604,7 +604,7 @@ namespace boost { namespace spirit { namespace qi
///////////////////////////////////////////////////////////////////////////
// Parser generators: make_xxx function (objects)
///////////////////////////////////////////////////////////////////////////
-
+
template <typename T1, typename T2, typename Subject, typename Modifiers, typename Distinct, typename MakeDirectiveHelper>
struct make_directive_internal_2_args
{
@@ -784,12 +784,12 @@ namespace boost { namespace spirit { namespace qi
{
typedef typename add_const<T1>::type const_keyword;
typedef repository::qi::kwd_pass_iterator<int> iterator_type;
-
+
typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::false_ > result_type;
-
+
template <typename Terminal>
result_type operator()(
- Terminal const& term, Subject const& subject, unused_type) const
+ Terminal const& term, Subject const& subject, unused_type) const
{
typename spirit::detail::get_encoding<Modifiers,
spirit::char_encoding::standard>::type encoding;
@@ -801,14 +801,14 @@ namespace boost { namespace spirit { namespace qi
);
}
};
-
+
template <typename T1, typename Subject, typename Modifiers>
struct make_directive<
terminal_ex<repository::tag::idkwd, fusion::vector1<T1> >, Subject, Modifiers>
{
typedef typename add_const<T1>::type const_keyword;
typedef repository::qi::kwd_pass_iterator<int> iterator_type;
-
+
typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::true_ > result_type;
template <typename Terminal>
@@ -817,15 +817,15 @@ namespace boost { namespace spirit { namespace qi
{
typename spirit::detail::get_encoding<Modifiers,
spirit::char_encoding::standard>::type encoding;
-
+
return result_type(subject
,fusion::at_c<0>(term.args)
- ,iterator_type()
+ ,iterator_type()
,encoding
);
}
};
-
+
// Directive kwd(key,exact)[p]
template <typename T>
struct make_exact_helper
@@ -891,7 +891,7 @@ namespace boost { namespace spirit { namespace qi
{
typedef typename add_const<T1>::type const_keyword;
typedef repository::qi::kwd_exact_iterator<T2> iterator_type;
-
+
typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::false_ > result_type;
template <typename Terminal>
@@ -901,8 +901,8 @@ namespace boost { namespace spirit { namespace qi
typename spirit::detail::get_encoding<Modifiers,
spirit::char_encoding::standard>::type encoding;
return result_type(subject
- ,fusion::at_c<0>(term.args)
- ,fusion::at_c<1>(term.args)
+ , fusion::at_c<0>(term.args)
+ , fusion::at_c<1>(term.args)
, encoding
);
}
@@ -914,13 +914,13 @@ namespace boost { namespace spirit { namespace qi
{
typedef typename add_const<T1>::type const_keyword;
typedef repository::qi::kwd_exact_iterator<T2> iterator_type;
-
+
typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::true_ > result_type;
-
+
template <typename Terminal>
result_type operator()(
Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
- {
+ {
typename spirit::detail::get_encoding<Modifiers,
spirit::char_encoding::standard>::type encoding;
return result_type(subject
@@ -930,7 +930,7 @@ namespace boost { namespace spirit { namespace qi
);
}
};
-
+
// Directive kwd(min, max)[p]
@@ -946,9 +946,9 @@ namespace boost { namespace spirit { namespace qi
};
- template <typename T1, typename T2, typename Subject, typename Modifiers>
+ template <typename T1, typename T2, typename Subject, typename Modifiers>
struct make_directive<
- terminal_ex<repository::tag::kwd, fusion::vector3< T1, T2, T2> >, Subject, Modifiers>
+ terminal_ex<repository::tag::kwd, fusion::vector3<T1,T2,T2> >, Subject, Modifiers>
{
typedef make_directive_internal_2_args< T1
, T2
@@ -1001,7 +1001,7 @@ namespace boost { namespace spirit { namespace qi
{
typedef typename add_const<T1>::type const_keyword;
typedef repository::qi::kwd_finite_iterator<T2> iterator_type;
-
+
typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::false_ > result_type;
template <typename Terminal>
@@ -1027,14 +1027,14 @@ namespace boost { namespace spirit { namespace qi
{
typedef typename add_const<T1>::type const_keyword;
typedef repository::qi::kwd_finite_iterator<T2> iterator_type;
-
+
typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::true_ > result_type;
template <typename Terminal>
result_type operator()(
Terminal const& term, Subject const& subject, unused_type) const
{
-
+
typename spirit::detail::get_encoding<Modifiers,
spirit::char_encoding::standard>::type encoding;
return result_type(subject, fusion::at_c<0>(term.args),
@@ -1046,7 +1046,7 @@ namespace boost { namespace spirit { namespace qi
);
}
};
-
+
// Directive kwd(min, inf)[p]
@@ -1063,7 +1063,7 @@ namespace boost { namespace spirit { namespace qi
};
- template <typename T1, typename T2, typename Subject, typename Modifiers>
+ template <typename T1, typename T2, typename Subject, typename Modifiers>
struct make_directive<
terminal_ex<repository::tag::kwd, fusion::vector3<T1,T2,inf_type> >, Subject, Modifiers>
{
@@ -1118,7 +1118,7 @@ namespace boost { namespace spirit { namespace qi
{
typedef typename add_const<T1>::type const_keyword;
typedef repository::qi::kwd_infinite_iterator<T2> iterator_type;
-
+
typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::false_ > result_type;
template <typename Terminal>
@@ -1135,15 +1135,15 @@ namespace boost { namespace spirit { namespace qi
);
}
};
-
- template <typename T1, typename T2, typename Subject, typename Modifiers>
+
+ template <typename T1, typename T2, typename Subject, typename Modifiers>
struct make_directive<
terminal_ex<repository::tag::idkwd
, fusion::vector3<T1, T2, inf_type> >, Subject, Modifiers>
{
typedef typename add_const<T1>::type const_keyword;
typedef repository::qi::kwd_infinite_iterator<T2> iterator_type;
-
+
typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::true_ > result_type;
template <typename Terminal>
@@ -1152,7 +1152,7 @@ namespace boost { namespace spirit { namespace qi
{
typename spirit::detail::get_encoding<Modifiers,
spirit::char_encoding::standard>::type encoding;
-
+
return result_type(subject
, fusion::at_c<0>(term.args)
, fusion::at_c<1>(term.args)
@@ -1160,15 +1160,15 @@ namespace boost { namespace spirit { namespace qi
);
}
};
-
-
+
+
}}}
namespace boost { namespace spirit { namespace traits
{
template <typename Subject, typename KeywordType
, typename LoopIter, typename NoCase , typename Distinct>
- struct has_semantic_action<
+ struct has_semantic_action<
repository::qi::kwd_parser< Subject, KeywordType, LoopIter, NoCase, Distinct > >
: unary_has_semantic_action<Subject> {};
diff --git a/3party/boost/boost/spirit/repository/home/qi/operator/detail/keywords.hpp b/3party/boost/boost/spirit/repository/home/qi/operator/detail/keywords.hpp
index 06836f7746..43aa133468 100644
--- a/3party/boost/boost/spirit/repository/home/qi/operator/detail/keywords.hpp
+++ b/3party/boost/boost/spirit/repository/home/qi/operator/detail/keywords.hpp
@@ -1,9 +1,9 @@
/*=============================================================================
Copyright (c) 2011-2012 Thomas Bernard
- 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)
-=============================================================================*/
+ 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(SPIRIT_KEYWORDS_DETAIL_MARCH_13_2007_1145PM)
#define SPIRIT_KEYWORDS_DETAIL_MARCH_13_2007_1145PM
@@ -14,11 +14,11 @@
#include <boost/spirit/home/qi/string/lit.hpp>
#include <boost/fusion/include/at.hpp>
namespace boost { namespace spirit { namespace repository { namespace qi { namespace detail {
- // Variant visitor class which handles dispatching the parsing to the selected parser
- // This also handles passing the correct attributes and flags/counters to the subject parsers
+ // Variant visitor class which handles dispatching the parsing to the selected parser
+ // This also handles passing the correct attributes and flags/counters to the subject parsers
template<typename T>
struct is_distinct : T::distinct { };
-
+
template<typename T, typename Action>
struct is_distinct< spirit::qi::action<T,Action> > : T::distinct { };
@@ -27,10 +27,10 @@ namespace boost { namespace spirit { namespace repository { namespace qi { names
- template < typename Elements, typename Iterator ,typename Context ,typename Skipper
- ,typename Flags ,typename Counters ,typename Attribute, typename NoCasePass>
+ template < typename Elements, typename Iterator ,typename Context ,typename Skipper
+ ,typename Flags ,typename Counters ,typename Attribute, typename NoCasePass>
struct parse_dispatcher
- : public boost::static_visitor<bool>
+ : public boost::static_visitor<bool>
{
typedef Iterator iterator_type;
@@ -38,60 +38,60 @@ namespace boost { namespace spirit { namespace repository { namespace qi { names
typedef Skipper skipper_type;
typedef Elements elements_type;
- typedef typename add_reference<Attribute>::type attr_reference;
+ typedef typename add_reference<Attribute>::type attr_reference;
public:
parse_dispatcher(const Elements &elements,Iterator& first, Iterator const& last
- , Context& context, Skipper const& skipper
- , Flags &flags, Counters &counters, attr_reference attr) :
- elements(elements), first(first), last(last)
- , context(context), skipper(skipper)
- , flags(flags),counters(counters), attr(attr)
+ , Context& context, Skipper const& skipper
+ , Flags &flags, Counters &counters, attr_reference attr) :
+ elements(elements), first(first), last(last)
+ , context(context), skipper(skipper)
+ , flags(flags),counters(counters), attr(attr)
{}
-
+
template<typename T> bool operator()(T& idx) const
- {
+ {
return call(idx,typename traits::not_is_unused<Attribute>::type());
}
-
- template <typename Subject,typename Index>
- bool call_subject_unused(
- Subject const &subject, Iterator &first, Iterator const &last
- , Context& context, Skipper const& skipper
- , Index& idx ) const
- {
- Iterator save = first;
+
+ template <typename Subject,typename Index>
+ bool call_subject_unused(
+ Subject const &subject, Iterator &first, Iterator const &last
+ , Context& context, Skipper const& skipper
+ , Index& idx ) const
+ {
+ Iterator save = first;
skipper_keyword_marker<Skipper,NoCasePass>
marked_skipper(skipper,flags[Index::value],counters[Index::value]);
-
- if(subject.parse(first,last,context,marked_skipper,unused))
- {
+
+ if(subject.parse(first,last,context,marked_skipper,unused))
+ {
return true;
+ }
+ save = save;
+ return false;
}
- save = save;
- return false;
- }
-
-
- template <typename Subject,typename Index>
- bool call_subject(
- Subject const &subject, Iterator &first, Iterator const &last
- , Context& context, Skipper const& skipper
- , Index& idx ) const
- {
-
- Iterator save = first;
+
+
+ template <typename Subject,typename Index>
+ bool call_subject(
+ Subject const &subject, Iterator &first, Iterator const &last
+ , Context& context, Skipper const& skipper
+ , Index& idx ) const
+ {
+
+ Iterator save = first;
skipper_keyword_marker<Skipper,NoCasePass>
marked_skipper(skipper,flags[Index::value],counters[Index::value]);
- if(subject.parse(first,last,context,marked_skipper,fusion::at_c<Index::value>(attr)))
- {
+ if(subject.parse(first,last,context,marked_skipper,fusion::at_c<Index::value>(attr)))
+ {
return true;
+ }
+ save = save;
+ return false;
}
- save = save;
- return false;
- }
// Handle unused attributes
- template <typename T> bool call(T &idx, mpl::false_) const{
+ template <typename T> bool call(T &idx, mpl::false_) const{
typedef typename mpl::at<Elements,T>::type ElementType;
if(
@@ -99,8 +99,8 @@ namespace boost { namespace spirit { namespace repository { namespace qi { names
|| skipper.parse(first,last,unused,unused,unused)
){
spirit::qi::skip_over(first, last, skipper);
- return call_subject_unused(fusion::at_c<T::value>(elements), first, last, context, skipper, idx );
- }
+ return call_subject_unused(fusion::at_c<T::value>(elements), first, last, context, skipper, idx );
+ }
return false;
}
// Handle normal attributes
@@ -110,11 +110,11 @@ namespace boost { namespace spirit { namespace repository { namespace qi { names
(!is_distinct<ElementType>::value)
|| skipper.parse(first,last,unused,unused,unused)
){
- return call_subject(fusion::at_c<T::value>(elements), first, last, context, skipper, idx);
- }
+ return call_subject(fusion::at_c<T::value>(elements), first, last, context, skipper, idx);
+ }
return false;
}
-
+
const Elements &elements;
Iterator &first;
const Iterator &last;
@@ -132,7 +132,7 @@ namespace boost { namespace spirit { namespace repository { namespace qi { names
typedef typename
spirit::detail::as_variant<
IndexList >::type parser_index_type;
-
+
///////////////////////////////////////////////////////////////////////////
// build_char_type_sequence
//
@@ -369,8 +369,8 @@ namespace boost { namespace spirit { namespace repository { namespace qi { names
// Make the keyword/parse index entry in the tst parser
lookup->add(
- traits::get_begin<char_type>(parser.subject.keyword.str),
- traits::get_end<char_type>(parser.subject.keyword.str),
+ traits::get_begin<char_type>(get_string(parser.subject.keyword)),
+ traits::get_end<char_type>(get_string(parser.subject.keyword)),
position
);
// Get the initial state of the flags array and store it in the flags initializer
@@ -397,8 +397,8 @@ namespace boost { namespace spirit { namespace repository { namespace qi { names
{
// Make the keyword/parse index entry in the tst parser
lookup->add(
- traits::get_begin<char_type>(parser.subject.keyword.str),
- traits::get_end<char_type>(parser.subject.keyword.str),
+ traits::get_begin<char_type>(get_string(parser.subject.keyword)),
+ traits::get_end<char_type>(get_string(parser.subject.keyword)),
position
);
// Get the initial state of the flags array and store it in the flags initializer
@@ -406,19 +406,20 @@ namespace boost { namespace spirit { namespace repository { namespace qi { names
return 0;
}
+
template <typename String, bool no_attribute>
- const String & get_string(const boost::spirit::qi::literal_string<String,no_attribute> &parser) const
+ const String get_string(const boost::spirit::qi::literal_string<String,no_attribute> &parser) const
{
return parser.str;
}
- template <typename String, bool no_attribute>
+ template <typename String, bool no_attribute>
const typename boost::spirit::qi::no_case_literal_string<String,no_attribute>::string_type &
get_string(const boost::spirit::qi::no_case_literal_string<String,no_attribute> &parser) const
{
return parser.str_lo;
}
-
+
shared_ptr<keywords_type> lookup;
diff --git a/3party/boost/boost/spirit/repository/home/qi/operator/keywords.hpp b/3party/boost/boost/spirit/repository/home/qi/operator/keywords.hpp
index f0382371fa..4933f91104 100644
--- a/3party/boost/boost/spirit/repository/home/qi/operator/keywords.hpp
+++ b/3party/boost/boost/spirit/repository/home/qi/operator/keywords.hpp
@@ -66,12 +66,12 @@ namespace boost { namespace spirit { namespace repository { namespace qi
// kwd directive parser type identification
namespace detail
{
- BOOST_MPL_HAS_XXX_TRAIT_DEF(kwd_parser_id)
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(kwd_parser_id)
BOOST_MPL_HAS_XXX_TRAIT_DEF(complex_kwd_parser_id)
-
+
}
-
+
// kwd directive type query
template <typename T>
struct is_kwd_parser : detail::has_kwd_parser_id<T> {};
@@ -112,35 +112,35 @@ namespace boost { namespace spirit { namespace repository { namespace qi
traits::build_fusion_vector<all_attributes>::type
type;
};
-
+
/// Make sure that all subjects are of the kwd type
- typedef typename mpl::count_if<
- Elements,
- mpl::not_<
+ typedef typename mpl::count_if<
+ Elements,
+ mpl::not_<
mpl::or_<
- is_kwd_parser<
- mpl::_1
+ is_kwd_parser<
+ mpl::_1
> ,
is_complex_kwd_parser<
mpl::_1
- >
- >
+ >
+ >
>
> non_kwd_subject_count;
-
- /// If the assertion fails here then you probably forgot to wrap a
+
+ /// If the assertion fails here then you probably forgot to wrap a
/// subject of the / operator in a kwd directive
BOOST_MPL_ASSERT_RELATION( non_kwd_subject_count::value, ==, 0 );
-
+
///////////////////////////////////////////////////////////////////////////
// build_parser_tags
//
- // Builds a boost::variant from an mpl::range_c in order to "mark" every
+ // Builds a boost::variant from an mpl::range_c in order to "mark" every
// parser of the fusion sequence. The integer constant is used in the parser
// dispatcher functor in order to use the parser corresponding to the recognised
// keyword.
///////////////////////////////////////////////////////////////////////////
-
+
template <typename Sequence>
struct build_parser_tags
{
@@ -149,14 +149,14 @@ namespace boost { namespace spirit { namespace repository { namespace qi
// Create an integer_c constant for every parser in the sequence
typedef typename mpl::range_c<int, 0, sequence_size::value>::type int_range;
-
+
// Transform the range_c to an mpl vector in order to be able to transform it into a variant
typedef typename mpl::copy<int_range, mpl::back_inserter<mpl::vector<> > >::type type;
-
+
};
// Build an index mpl vector
typedef typename build_parser_tags< Elements >::type parser_index_vector;
-
+
template <typename idx>
struct is_complex_kwd_parser_filter : is_complex_kwd_parser< typename mpl::at<Elements, idx>::type >
{};
@@ -166,8 +166,8 @@ namespace boost { namespace spirit { namespace repository { namespace qi
{};
// filter out the string kwd directives
- typedef typename mpl::filter_view< Elements, is_kwd_parser<mpl_::_> >::type string_keywords;
-
+ typedef typename mpl::filter_view< Elements, is_kwd_parser<mpl::_> >::type string_keywords;
+
typedef typename mpl::filter_view< parser_index_vector ,
is_kwd_parser_filter< mpl::_ >
>::type string_keyword_indexes;
@@ -183,13 +183,13 @@ namespace boost { namespace spirit { namespace repository { namespace qi
detail::empty_keywords_list,
detail::complex_keywords< complex_keywords_indexes >
>::type complex_keywords_type;
-
- // build a bool array and an integer array which will be used to
- // check that the repetition constraints of the kwd parsers are
+
+ // build a bool array and an integer array which will be used to
+ // check that the repetition constraints of the kwd parsers are
// met and bail out a soon as possible
typedef boost::array<bool, fusion::result_of::size<Elements>::value> flags_type;
typedef boost::array<int, fusion::result_of::size<Elements>::value> counters_type;
-
+
typedef typename mpl::if_<
typename mpl::empty<string_keyword_indexes>::type,
detail::empty_keywords_list,
@@ -200,13 +200,13 @@ namespace boost { namespace spirit { namespace repository { namespace qi
flags_type,
Modifiers>
>::type string_keywords_type;
-
+
keywords(Elements const& elements_) :
elements(elements_)
, string_keywords_inst(elements,flags_init)
, complex_keywords_inst(elements,flags_init)
{
- }
+ }
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
@@ -214,30 +214,30 @@ namespace boost { namespace spirit { namespace repository { namespace qi
, Context& context, Skipper const& skipper
, Attribute& attr_) const
{
- // Select which parse function to call
+ // Select which parse function to call
// We need to handle the case where kwd / ikwd directives have been mixed
// This is where we decide which function should be called.
return parse_impl(first, last, context, skipper, attr_,
typename string_keywords_type::requires_one_pass()
);
}
-
+
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
bool parse_impl(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
, Attribute& attr_,mpl::true_ /* one pass */) const
{
-
+
// wrap the attribute in a tuple if it is not a tuple
typename traits::wrap_if_not_tuple<Attribute>::type attr(attr_);
flags_type flags(flags_init);
//flags.assign(false);
-
+
counters_type counters;
counters.assign(0);
-
+
typedef repository::qi::detail::parse_dispatcher<Elements,Iterator, Context, Skipper
, flags_type, counters_type
, typename traits::wrap_if_not_tuple<Attribute>::type
@@ -246,7 +246,7 @@ namespace boost { namespace spirit { namespace repository { namespace qi
parser_visitor_type parse_visitor(elements, first, last
, context, skipper, flags
, counters, attr);
-
+
typedef repository::qi::detail::complex_kwd_function< parser_visitor_type > complex_kwd_function_type;
complex_kwd_function_type
@@ -255,16 +255,16 @@ namespace boost { namespace spirit { namespace repository { namespace qi
// We have a bool array 'flags' with one flag for each parser as well as a 'counter'
// array.
// The kwd directive sets and increments the counter when a successeful parse occured
- // as well as the slot of the corresponding parser to true in the flags array as soon
- // the minimum repetition requirement is met and keeps that value to true as long as
- // the maximum repetition requirement is met.
+ // as well as the slot of the corresponding parser to true in the flags array as soon
+ // the minimum repetition requirement is met and keeps that value to true as long as
+ // the maximum repetition requirement is met.
// The parsing takes place here in two steps:
// 1) parse a keyword and fetch the parser index associated with that keyword
// 2) call the associated parser and store the parsed value in the matching attribute.
while(true)
{
-
+
spirit::qi::skip_over(first, last, skipper);
Iterator save = first;
if (string_keywords_inst.parse(first, last,parse_visitor,skipper))
@@ -272,28 +272,28 @@ namespace boost { namespace spirit { namespace repository { namespace qi
save = first;
}
else {
- // restore the position to the last successful keyword parse
- first = save;
- if(!complex_keywords_inst.parse(complex_function))
- {
- first = save;
+ // restore the position to the last successful keyword parse
+ first = save;
+ if(!complex_keywords_inst.parse(complex_function))
+ {
+ first = save;
// Check that we are leaving the keywords parser in a successfull state
BOOST_FOREACH(bool &valid,flags)
{
- if(!valid)
- {
- return false;
- }
+ if(!valid)
+ {
+ return false;
+ }
}
return true;
+ }
+ else
+ save = first;
}
- else
- save = first;
- }
}
return false;
- }
-
+ }
+
// Handle the mixed kwd and ikwd case
template <typename Iterator, typename Context
, typename Skipper, typename Attribute>
@@ -301,32 +301,32 @@ namespace boost { namespace spirit { namespace repository { namespace qi
, Context& context, Skipper const& skipper
, Attribute& attr_,mpl::false_ /* two passes */) const
{
-
+
// wrap the attribute in a tuple if it is not a tuple
typename traits::wrap_if_not_tuple<Attribute>::type attr(attr_);
flags_type flags(flags_init);
//flags.assign(false);
-
+
counters_type counters;
counters.assign(0);
-
+
typedef detail::parse_dispatcher<Elements, Iterator, Context, Skipper
, flags_type, counters_type
- , typename traits::wrap_if_not_tuple<Attribute>::type
+ , typename traits::wrap_if_not_tuple<Attribute>::type
, mpl::false_> parser_visitor_type;
-
+
typedef detail::parse_dispatcher<Elements, Iterator, Context, Skipper
, flags_type, counters_type
- , typename traits::wrap_if_not_tuple<Attribute>::type
+ , typename traits::wrap_if_not_tuple<Attribute>::type
, mpl::true_> no_case_parser_visitor_type;
-
+
parser_visitor_type parse_visitor(elements,first,last
,context,skipper,flags,counters,attr);
no_case_parser_visitor_type no_case_parse_visitor(elements,first,last
- ,context,skipper,flags,counters,attr);
-
+ ,context,skipper,flags,counters,attr);
+
typedef repository::qi::detail::complex_kwd_function< parser_visitor_type > complex_kwd_function_type;
complex_kwd_function_type
@@ -336,9 +336,9 @@ namespace boost { namespace spirit { namespace repository { namespace qi
// We have a bool array 'flags' with one flag for each parser as well as a 'counter'
// array.
// The kwd directive sets and increments the counter when a successeful parse occured
- // as well as the slot of the corresponding parser to true in the flags array as soon
- // the minimum repetition requirement is met and keeps that value to true as long as
- // the maximum repetition requirement is met.
+ // as well as the slot of the corresponding parser to true in the flags array as soon
+ // the minimum repetition requirement is met and keeps that value to true as long as
+ // the maximum repetition requirement is met.
// The parsing takes place here in two steps:
// 1) parse a keyword and fetch the parser index associated with that keyword
// 2) call the associated parser and store the parsed value in the matching attribute.
@@ -353,29 +353,29 @@ namespace boost { namespace spirit { namespace repository { namespace qi
save = first;
}
else {
- first = save;
+ first = save;
- if(!complex_keywords_inst.parse(complex_function))
- {
- first = save;
+ if(!complex_keywords_inst.parse(complex_function))
+ {
+ first = save;
// Check that we are leaving the keywords parser in a successfull state
BOOST_FOREACH(bool &valid,flags)
{
- if(!valid)
- {
- return false;
- }
+ if(!valid)
+ {
+ return false;
+ }
}
return true;
- }
- else
- {
- save = first;
- }
+ }
+ else
+ {
+ save = first;
+ }
}
}
return false;
- }
+ }
template <typename Context>
info what(Context& context) const
@@ -389,7 +389,7 @@ namespace boost { namespace spirit { namespace repository { namespace qi
Elements elements;
string_keywords_type string_keywords_inst;
complex_keywords_type complex_keywords_inst;
-
+
};
}}}}
@@ -406,8 +406,8 @@ namespace boost { namespace spirit { namespace qi {
return result_type(ref);
}
};
-
-
+
+
}}}
namespace boost { namespace spirit { namespace traits
diff --git a/3party/boost/boost/statechart/custom_reaction.hpp b/3party/boost/boost/statechart/custom_reaction.hpp
index 61767a9524..e143a4044c 100644
--- a/3party/boost/boost/statechart/custom_reaction.hpp
+++ b/3party/boost/boost/statechart/custom_reaction.hpp
@@ -10,7 +10,7 @@
#include <boost/statechart/result.hpp>
-#include <boost/cast.hpp> // boost::polymorphic_downcast
+#include <boost/polymorphic_cast.hpp> // boost::polymorphic_downcast
diff --git a/3party/boost/boost/statechart/detail/reaction_dispatcher.hpp b/3party/boost/boost/statechart/detail/reaction_dispatcher.hpp
index 5404f92c27..160a4569d2 100644
--- a/3party/boost/boost/statechart/detail/reaction_dispatcher.hpp
+++ b/3party/boost/boost/statechart/detail/reaction_dispatcher.hpp
@@ -12,7 +12,7 @@
#include <boost/mpl/if.hpp>
-#include <boost/cast.hpp> // boost::polymorphic_downcast
+#include <boost/polymorphic_cast.hpp> // boost::polymorphic_downcast
#include <boost/type_traits/is_same.hpp>
diff --git a/3party/boost/boost/statechart/event.hpp b/3party/boost/boost/statechart/event.hpp
index 2a15c22d45..c62432c11d 100644
--- a/3party/boost/boost/statechart/event.hpp
+++ b/3party/boost/boost/statechart/event.hpp
@@ -12,7 +12,7 @@
#include <boost/statechart/detail/rtti_policy.hpp>
#include <boost/statechart/detail/memory.hpp>
-#include <boost/cast.hpp> // boost::polymorphic_downcast
+#include <boost/polymorphic_cast.hpp> // boost::polymorphic_downcast
#include <memory> // std::allocator
diff --git a/3party/boost/boost/statechart/simple_state.hpp b/3party/boost/boost/statechart/simple_state.hpp
index 77330f6207..8a0a0d77fa 100644
--- a/3party/boost/boost/statechart/simple_state.hpp
+++ b/3party/boost/boost/statechart/simple_state.hpp
@@ -50,7 +50,7 @@
#include <boost/type_traits/is_base_of.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/static_assert.hpp>
-#include <boost/cast.hpp> // boost::polymorphic_downcast
+#include <boost/polymorphic_cast.hpp> // boost::polymorphic_downcast
#include <cstddef> // std::size_t
diff --git a/3party/boost/boost/statechart/state_machine.hpp b/3party/boost/boost/statechart/state_machine.hpp
index 960cbaa770..f03f5f8521 100644
--- a/3party/boost/boost/statechart/state_machine.hpp
+++ b/3party/boost/boost/statechart/state_machine.hpp
@@ -33,7 +33,7 @@
#include <boost/noncopyable.hpp>
#include <boost/assert.hpp>
#include <boost/static_assert.hpp>
-#include <boost/cast.hpp> // boost::polymorphic_downcast
+#include <boost/polymorphic_cast.hpp> // boost::polymorphic_downcast
// BOOST_NO_EXCEPTIONS, BOOST_MSVC, BOOST_MSVC_STD_ITERATOR
#include <boost/config.hpp>
diff --git a/3party/boost/boost/strong_typedef.hpp b/3party/boost/boost/strong_typedef.hpp
index a8d870a53c..7d85b1e556 100644
--- a/3party/boost/boost/strong_typedef.hpp
+++ b/3party/boost/boost/strong_typedef.hpp
@@ -2,7 +2,7 @@
#define BOOST_STRONG_TYPEDEF_HPP
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/swap.hpp b/3party/boost/boost/swap.hpp
index dfc11f059d..55cafa4fdd 100644
--- a/3party/boost/boost/swap.hpp
+++ b/3party/boost/boost/swap.hpp
@@ -1,12 +1,17 @@
-// Copyright (C) 2007 Joseph Gauterin
-//
-// 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)
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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_SWAP_HPP
#define BOOST_SWAP_HPP
-#include "boost/utility/swap.hpp"
+// The header file at this path is deprecated;
+// use boost/core/swap.hpp instead.
+
+#include <boost/core/swap.hpp>
#endif
diff --git a/3party/boost/boost/system/config.hpp b/3party/boost/boost/system/config.hpp
index b128717e78..14faa63420 100644
--- a/3party/boost/boost/system/config.hpp
+++ b/3party/boost/boost/system/config.hpp
@@ -11,6 +11,7 @@
#define BOOST_SYSTEM_CONFIG_HPP
#include <boost/config.hpp>
+#include <boost/predef/platform.h>
#include <boost/system/api_config.hpp> // for BOOST_POSIX_API or BOOST_WINDOWS_API
// This header implements separate compilation features as described in
diff --git a/3party/boost/boost/system/detail/error_code.ipp b/3party/boost/boost/system/detail/error_code.ipp
new file mode 100644
index 0000000000..71c60f61da
--- /dev/null
+++ b/3party/boost/boost/system/detail/error_code.ipp
@@ -0,0 +1,467 @@
+// error_code support implementation file ----------------------------------//
+
+// Copyright Beman Dawes 2002, 2006
+// Copyright (c) Microsoft Corporation 2014
+// 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 library home page at http://www.boost.org/libs/system
+
+//----------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/system/config.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/cerrno.hpp>
+#include <vector>
+#include <cstdlib>
+#include <cassert>
+
+#include <cstring> // for strerror/strerror_r
+
+# if defined( BOOST_WINDOWS_API )
+# include <windows.h>
+# if !BOOST_PLAT_WINDOWS_RUNTIME
+# include <boost/system/detail/local_free_on_destruction.hpp>
+# endif
+# ifndef ERROR_INCORRECT_SIZE
+# define ERROR_INCORRECT_SIZE ERROR_BAD_ARGUMENTS
+# endif
+# endif
+
+//----------------------------------------------------------------------------//
+namespace boost
+{
+ namespace system
+ {
+
+namespace
+{
+
+ // standard error categories ---------------------------------------------//
+
+ class generic_error_category : public error_category
+ {
+ public:
+ generic_error_category(){}
+ const char * name() const BOOST_SYSTEM_NOEXCEPT;
+ std::string message( int ev ) const;
+ };
+
+ class system_error_category : public error_category
+ {
+ public:
+ system_error_category(){}
+ const char * name() const BOOST_SYSTEM_NOEXCEPT;
+ std::string message( int ev ) const;
+ error_condition default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT;
+ };
+
+ // generic_error_category implementation ---------------------------------//
+
+ const char * generic_error_category::name() const BOOST_SYSTEM_NOEXCEPT
+ {
+ return "generic";
+ }
+
+ std::string generic_error_category::message( int ev ) const
+ {
+ using namespace boost::system::errc;
+#if defined(__PGI)
+ using boost::system::errc::invalid_argument;
+#endif
+
+ static std::string unknown_err( "Unknown error" );
+ // strerror_r is preferred because it is always thread safe,
+ // however, we fallback to strerror in certain cases because:
+ // -- Windows doesn't provide strerror_r.
+ // -- HP and Sun do provide strerror_r on newer systems, but there is
+ // no way to tell if is available at runtime and in any case their
+ // versions of strerror are thread safe anyhow.
+ // -- Linux only sometimes provides strerror_r.
+ // -- Tru64 provides strerror_r only when compiled -pthread.
+ // -- VMS doesn't provide strerror_r, but on this platform, strerror is
+ // thread safe.
+ # if defined(BOOST_WINDOWS_API) || defined(__hpux) || defined(__sun)\
+ || (defined(__linux) && (!defined(__USE_XOPEN2K) || defined(BOOST_SYSTEM_USE_STRERROR)))\
+ || (defined(__osf__) && !defined(_REENTRANT))\
+ || (defined(__INTEGRITY))\
+ || (defined(__vms))\
+ || (defined(__QNXNTO__))
+ const char * c_str = std::strerror( ev );
+ return c_str
+ ? std::string( c_str )
+ : unknown_err;
+ # else // use strerror_r
+ char buf[64];
+ char * bp = buf;
+ std::size_t sz = sizeof(buf);
+ # if defined(__CYGWIN__) || defined(__USE_GNU)
+ // Oddball version of strerror_r
+ const char * c_str = strerror_r( ev, bp, sz );
+ return c_str
+ ? std::string( c_str )
+ : unknown_err;
+ # else
+ // POSIX version of strerror_r
+ int result;
+ for (;;)
+ {
+ // strerror_r returns 0 on success, otherwise ERANGE if buffer too small,
+ // invalid_argument if ev not a valid error number
+ # if defined (__sgi)
+ const char * c_str = strerror( ev );
+ result = 0;
+ return c_str
+ ? std::string( c_str )
+ : unknown_err;
+ # else
+ result = strerror_r( ev, bp, sz );
+ # endif
+ if (result == 0 )
+ break;
+ else
+ {
+ # if defined(__linux)
+ // Linux strerror_r returns -1 on error, with error number in errno
+ result = errno;
+ # endif
+ if ( result != ERANGE ) break;
+ if ( sz > sizeof(buf) ) std::free( bp );
+ sz *= 2;
+ if ( (bp = static_cast<char*>(std::malloc( sz ))) == 0 )
+ return std::string( "ENOMEM" );
+ }
+ }
+ std::string msg;
+# ifndef BOOST_NO_EXCEPTIONS
+ try
+# endif
+ {
+ msg = ( ( result == invalid_argument ) ? "Unknown error" : bp );
+ }
+
+# ifndef BOOST_NO_EXCEPTIONS
+ // See ticket #2098
+ catch(...)
+ {
+ // just eat the exception
+ }
+# endif
+
+ if ( sz > sizeof(buf) ) std::free( bp );
+ sz = 0;
+ return msg;
+ # endif // else POSIX version of strerror_r
+ # endif // else use strerror_r
+ }
+ // system_error_category implementation --------------------------------//
+
+ const char * system_error_category::name() const BOOST_SYSTEM_NOEXCEPT
+ {
+ return "system";
+ }
+
+ error_condition system_error_category::default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT
+ {
+ using namespace boost::system::errc;
+#if defined(__PGI)
+ using boost::system::errc::invalid_argument;
+#endif
+
+# if defined(BOOST_WINDOWS_API)
+# if defined(WINAPI_FAMILY) && ((WINAPI_FAMILY & WINAPI_PARTITION_APP) != 0)
+ // When using the Windows Runtime, most system errors are reported as HRESULTs.
+ // We want to map the common Win32 errors to their equivalent error condition,
+ // whether or not they are reported via an HRESULT.
+ if ( ev < 0 ) // Check for failed HRESULTs only.
+ if ( HRESULT_FACILITY( ev ) == FACILITY_WIN32 )
+ ev = HRESULT_CODE( ev );
+# endif
+# endif
+
+ switch ( ev )
+ {
+ case 0: return make_error_condition( success );
+# if defined(BOOST_POSIX_API)
+ // POSIX-like O/S -> posix_errno decode table ---------------------------//
+ case E2BIG: return make_error_condition( argument_list_too_long );
+ case EACCES: return make_error_condition( permission_denied );
+ case EADDRINUSE: return make_error_condition( address_in_use );
+ case EADDRNOTAVAIL: return make_error_condition( address_not_available );
+ case EAFNOSUPPORT: return make_error_condition( address_family_not_supported );
+ case EAGAIN: return make_error_condition( resource_unavailable_try_again );
+# if EALREADY != EBUSY // EALREADY and EBUSY are the same on QNX Neutrino
+ case EALREADY: return make_error_condition( connection_already_in_progress );
+# endif
+ case EBADF: return make_error_condition( bad_file_descriptor );
+ case EBADMSG: return make_error_condition( bad_message );
+ case EBUSY: return make_error_condition( device_or_resource_busy );
+ case ECANCELED: return make_error_condition( operation_canceled );
+ case ECHILD: return make_error_condition( no_child_process );
+ case ECONNABORTED: return make_error_condition( connection_aborted );
+ case ECONNREFUSED: return make_error_condition( connection_refused );
+ case ECONNRESET: return make_error_condition( connection_reset );
+ case EDEADLK: return make_error_condition( resource_deadlock_would_occur );
+ case EDESTADDRREQ: return make_error_condition( destination_address_required );
+ case EDOM: return make_error_condition( argument_out_of_domain );
+ case EEXIST: return make_error_condition( file_exists );
+ case EFAULT: return make_error_condition( bad_address );
+ case EFBIG: return make_error_condition( file_too_large );
+ case EHOSTUNREACH: return make_error_condition( host_unreachable );
+ case EIDRM: return make_error_condition( identifier_removed );
+ case EILSEQ: return make_error_condition( illegal_byte_sequence );
+ case EINPROGRESS: return make_error_condition( operation_in_progress );
+ case EINTR: return make_error_condition( interrupted );
+ case EINVAL: return make_error_condition( invalid_argument );
+ case EIO: return make_error_condition( io_error );
+ case EISCONN: return make_error_condition( already_connected );
+ case EISDIR: return make_error_condition( is_a_directory );
+ case ELOOP: return make_error_condition( too_many_symbolic_link_levels );
+ case EMFILE: return make_error_condition( too_many_files_open );
+ case EMLINK: return make_error_condition( too_many_links );
+ case EMSGSIZE: return make_error_condition( message_size );
+ case ENAMETOOLONG: return make_error_condition( filename_too_long );
+ case ENETDOWN: return make_error_condition( network_down );
+ case ENETRESET: return make_error_condition( network_reset );
+ case ENETUNREACH: return make_error_condition( network_unreachable );
+ case ENFILE: return make_error_condition( too_many_files_open_in_system );
+ case ENOBUFS: return make_error_condition( no_buffer_space );
+ case ENODATA: return make_error_condition( no_message_available );
+ case ENODEV: return make_error_condition( no_such_device );
+ case ENOENT: return make_error_condition( no_such_file_or_directory );
+ case ENOEXEC: return make_error_condition( executable_format_error );
+ case ENOLCK: return make_error_condition( no_lock_available );
+ case ENOLINK: return make_error_condition( no_link );
+ case ENOMEM: return make_error_condition( not_enough_memory );
+ case ENOMSG: return make_error_condition( no_message );
+ case ENOPROTOOPT: return make_error_condition( no_protocol_option );
+ case ENOSPC: return make_error_condition( no_space_on_device );
+ case ENOSR: return make_error_condition( no_stream_resources );
+ case ENOSTR: return make_error_condition( not_a_stream );
+ case ENOSYS: return make_error_condition( function_not_supported );
+ case ENOTCONN: return make_error_condition( not_connected );
+ case ENOTDIR: return make_error_condition( not_a_directory );
+ # if ENOTEMPTY != EEXIST // AIX treats ENOTEMPTY and EEXIST as the same value
+ case ENOTEMPTY: return make_error_condition( directory_not_empty );
+ # endif // ENOTEMPTY != EEXIST
+ # if ENOTRECOVERABLE != ECONNRESET // the same on some Broadcom chips
+ case ENOTRECOVERABLE: return make_error_condition( state_not_recoverable );
+ # endif // ENOTRECOVERABLE != ECONNRESET
+ case ENOTSOCK: return make_error_condition( not_a_socket );
+ case ENOTSUP: return make_error_condition( not_supported );
+ case ENOTTY: return make_error_condition( inappropriate_io_control_operation );
+ case ENXIO: return make_error_condition( no_such_device_or_address );
+ # if EOPNOTSUPP != ENOTSUP
+ case EOPNOTSUPP: return make_error_condition( operation_not_supported );
+ # endif // EOPNOTSUPP != ENOTSUP
+ case EOVERFLOW: return make_error_condition( value_too_large );
+ # if EOWNERDEAD != ECONNABORTED // the same on some Broadcom chips
+ case EOWNERDEAD: return make_error_condition( owner_dead );
+ # endif // EOWNERDEAD != ECONNABORTED
+ case EPERM: return make_error_condition( operation_not_permitted );
+ case EPIPE: return make_error_condition( broken_pipe );
+ case EPROTO: return make_error_condition( protocol_error );
+ case EPROTONOSUPPORT: return make_error_condition( protocol_not_supported );
+ case EPROTOTYPE: return make_error_condition( wrong_protocol_type );
+ case ERANGE: return make_error_condition( result_out_of_range );
+ case EROFS: return make_error_condition( read_only_file_system );
+ case ESPIPE: return make_error_condition( invalid_seek );
+ case ESRCH: return make_error_condition( no_such_process );
+ case ETIME: return make_error_condition( stream_timeout );
+ case ETIMEDOUT: return make_error_condition( timed_out );
+ case ETXTBSY: return make_error_condition( text_file_busy );
+ # if EAGAIN != EWOULDBLOCK
+ case EWOULDBLOCK: return make_error_condition( operation_would_block );
+ # endif // EAGAIN != EWOULDBLOCK
+ case EXDEV: return make_error_condition( cross_device_link );
+ #else
+ // Windows system -> posix_errno decode table ---------------------------//
+ // see WinError.h comments for descriptions of errors
+ case ERROR_ACCESS_DENIED: return make_error_condition( permission_denied );
+ case ERROR_ALREADY_EXISTS: return make_error_condition( file_exists );
+ case ERROR_BAD_UNIT: return make_error_condition( no_such_device );
+ case ERROR_BUFFER_OVERFLOW: return make_error_condition( filename_too_long );
+ case ERROR_BUSY: return make_error_condition( device_or_resource_busy );
+ case ERROR_BUSY_DRIVE: return make_error_condition( device_or_resource_busy );
+ case ERROR_CANNOT_MAKE: return make_error_condition( permission_denied );
+ case ERROR_CANTOPEN: return make_error_condition( io_error );
+ case ERROR_CANTREAD: return make_error_condition( io_error );
+ case ERROR_CANTWRITE: return make_error_condition( io_error );
+ case ERROR_CURRENT_DIRECTORY: return make_error_condition( permission_denied );
+ case ERROR_DEV_NOT_EXIST: return make_error_condition( no_such_device );
+ case ERROR_DEVICE_IN_USE: return make_error_condition( device_or_resource_busy );
+ case ERROR_DIR_NOT_EMPTY: return make_error_condition( directory_not_empty );
+ case ERROR_DIRECTORY: return make_error_condition( invalid_argument ); // WinError.h: "The directory name is invalid"
+ case ERROR_DISK_FULL: return make_error_condition( no_space_on_device );
+ case ERROR_FILE_EXISTS: return make_error_condition( file_exists );
+ case ERROR_FILE_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
+ case ERROR_HANDLE_DISK_FULL: return make_error_condition( no_space_on_device );
+ case ERROR_INVALID_ACCESS: return make_error_condition( permission_denied );
+ case ERROR_INVALID_DRIVE: return make_error_condition( no_such_device );
+ case ERROR_INVALID_FUNCTION: return make_error_condition( function_not_supported );
+ case ERROR_INVALID_HANDLE: return make_error_condition( invalid_argument );
+ case ERROR_INVALID_NAME: return make_error_condition( invalid_argument );
+ case ERROR_LOCK_VIOLATION: return make_error_condition( no_lock_available );
+ case ERROR_LOCKED: return make_error_condition( no_lock_available );
+ case ERROR_NEGATIVE_SEEK: return make_error_condition( invalid_argument );
+ case ERROR_NOACCESS: return make_error_condition( permission_denied );
+ case ERROR_NOT_ENOUGH_MEMORY: return make_error_condition( not_enough_memory );
+ case ERROR_NOT_READY: return make_error_condition( resource_unavailable_try_again );
+ case ERROR_NOT_SAME_DEVICE: return make_error_condition( cross_device_link );
+ case ERROR_OPEN_FAILED: return make_error_condition( io_error );
+ case ERROR_OPEN_FILES: return make_error_condition( device_or_resource_busy );
+ case ERROR_OPERATION_ABORTED: return make_error_condition( operation_canceled );
+ case ERROR_OUTOFMEMORY: return make_error_condition( not_enough_memory );
+ case ERROR_PATH_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
+ case ERROR_READ_FAULT: return make_error_condition( io_error );
+ case ERROR_RETRY: return make_error_condition( resource_unavailable_try_again );
+ case ERROR_SEEK: return make_error_condition( io_error );
+ case ERROR_SHARING_VIOLATION: return make_error_condition( permission_denied );
+ case ERROR_TOO_MANY_OPEN_FILES: return make_error_condition( too_many_files_open );
+ case ERROR_WRITE_FAULT: return make_error_condition( io_error );
+ case ERROR_WRITE_PROTECT: return make_error_condition( permission_denied );
+ case WSAEACCES: return make_error_condition( permission_denied );
+ case WSAEADDRINUSE: return make_error_condition( address_in_use );
+ case WSAEADDRNOTAVAIL: return make_error_condition( address_not_available );
+ case WSAEAFNOSUPPORT: return make_error_condition( address_family_not_supported );
+ case WSAEALREADY: return make_error_condition( connection_already_in_progress );
+ case WSAEBADF: return make_error_condition( bad_file_descriptor );
+ case WSAECONNABORTED: return make_error_condition( connection_aborted );
+ case WSAECONNREFUSED: return make_error_condition( connection_refused );
+ case WSAECONNRESET: return make_error_condition( connection_reset );
+ case WSAEDESTADDRREQ: return make_error_condition( destination_address_required );
+ case WSAEFAULT: return make_error_condition( bad_address );
+ case WSAEHOSTUNREACH: return make_error_condition( host_unreachable );
+ case WSAEINPROGRESS: return make_error_condition( operation_in_progress );
+ case WSAEINTR: return make_error_condition( interrupted );
+ case WSAEINVAL: return make_error_condition( invalid_argument );
+ case WSAEISCONN: return make_error_condition( already_connected );
+ case WSAEMFILE: return make_error_condition( too_many_files_open );
+ case WSAEMSGSIZE: return make_error_condition( message_size );
+ case WSAENAMETOOLONG: return make_error_condition( filename_too_long );
+ case WSAENETDOWN: return make_error_condition( network_down );
+ case WSAENETRESET: return make_error_condition( network_reset );
+ case WSAENETUNREACH: return make_error_condition( network_unreachable );
+ case WSAENOBUFS: return make_error_condition( no_buffer_space );
+ case WSAENOPROTOOPT: return make_error_condition( no_protocol_option );
+ case WSAENOTCONN: return make_error_condition( not_connected );
+ case WSAENOTSOCK: return make_error_condition( not_a_socket );
+ case WSAEOPNOTSUPP: return make_error_condition( operation_not_supported );
+ case WSAEPROTONOSUPPORT: return make_error_condition( protocol_not_supported );
+ case WSAEPROTOTYPE: return make_error_condition( wrong_protocol_type );
+ case WSAETIMEDOUT: return make_error_condition( timed_out );
+ case WSAEWOULDBLOCK: return make_error_condition( operation_would_block );
+ #endif
+ default: return error_condition( ev, system_category() );
+ }
+ }
+
+# if !defined( BOOST_WINDOWS_API )
+
+ std::string system_error_category::message( int ev ) const
+ {
+ return generic_category().message( ev );
+ }
+# else
+
+ std::string system_error_category::message( int ev ) const
+ {
+#if defined(UNDER_CE) || BOOST_PLAT_WINDOWS_RUNTIME || defined(BOOST_NO_ANSI_APIS)
+ std::wstring buf(128, wchar_t());
+ for (;;)
+ {
+ DWORD retval = ::FormatMessageW(
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ ev,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ &buf[0],
+ buf.size(),
+ NULL
+ );
+
+ if (retval > 0)
+ {
+ buf.resize(retval);
+ break;
+ }
+ else if ( ::GetLastError() != ERROR_INSUFFICIENT_BUFFER )
+ {
+ return std::string("Unknown error");
+ }
+ else
+ {
+ buf.resize(buf.size() + buf.size() / 2);
+ }
+ }
+
+ int num_chars = (buf.size() + 1) * 2;
+ LPSTR narrow_buffer = (LPSTR)_alloca( num_chars );
+ if (::WideCharToMultiByte(CP_ACP, 0, buf.c_str(), -1, narrow_buffer, num_chars, NULL, NULL) == 0)
+ {
+ return std::string("Unknown error");
+ }
+
+ std::string str( narrow_buffer );
+#else
+ LPVOID lpMsgBuf = 0;
+ DWORD retval = ::FormatMessageA(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ ev,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPSTR) &lpMsgBuf,
+ 0,
+ NULL
+ );
+ detail::local_free_on_destruction lfod(lpMsgBuf);
+ if (retval == 0)
+ return std::string("Unknown error");
+
+ std::string str( static_cast<LPCSTR>(lpMsgBuf) );
+# endif
+ while ( str.size()
+ && (str[str.size()-1] == '\n' || str[str.size()-1] == '\r') )
+ str.erase( str.size()-1 );
+ if ( str.size() && str[str.size()-1] == '.' )
+ { str.erase( str.size()-1 ); }
+ return str;
+ }
+# endif
+
+} // unnamed namespace
+
+
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+ BOOST_SYSTEM_DECL error_code throws; // "throw on error" special error_code;
+ // note that it doesn't matter if this
+ // isn't initialized before use since
+ // the only use is to take its
+ // address for comparison purposes
+# endif
+
+# ifdef BOOST_ERROR_CODE_HEADER_ONLY
+# define BOOST_SYSTEM_LINKAGE inline
+# else
+# define BOOST_SYSTEM_LINKAGE BOOST_SYSTEM_DECL
+# endif
+
+ BOOST_SYSTEM_LINKAGE const error_category & system_category() BOOST_SYSTEM_NOEXCEPT
+ {
+ static const system_error_category system_category_const;
+ return system_category_const;
+ }
+
+ BOOST_SYSTEM_LINKAGE const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
+ {
+ static const generic_error_category generic_category_const;
+ return generic_category_const;
+ }
+
+ } // namespace system
+} // namespace boost
diff --git a/3party/boost/boost/system/detail/local_free_on_destruction.hpp b/3party/boost/boost/system/detail/local_free_on_destruction.hpp
new file mode 100644
index 0000000000..110024f3d5
--- /dev/null
+++ b/3party/boost/boost/system/detail/local_free_on_destruction.hpp
@@ -0,0 +1,40 @@
+// local_free_on_exit.hpp ------------------------------------------------------------//
+
+// Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2010 Beman Dawes
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// This is derived from boost/asio/detail/local_free_on_block_exit.hpp to avoid
+// a dependency on asio. Thanks to Chris Kohlhoff for pointing it out.
+
+#ifndef BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP
+#define BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP
+
+namespace boost {
+namespace system {
+namespace detail {
+
+class local_free_on_destruction
+{
+public:
+ explicit local_free_on_destruction(void* p)
+ : p_(p) {}
+
+ ~local_free_on_destruction()
+ {
+ ::LocalFree(p_);
+ }
+
+private:
+ void* p_;
+ local_free_on_destruction(const local_free_on_destruction&); // = deleted
+ local_free_on_destruction& operator=(const local_free_on_destruction&); // = deleted
+};
+
+} // namespace detail
+} // namespace system
+} // namespace boost
+
+#endif // BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP
diff --git a/3party/boost/boost/system/error_code.hpp b/3party/boost/boost/system/error_code.hpp
index 3e7689cc22..d419f3701b 100644
--- a/3party/boost/boost/system/error_code.hpp
+++ b/3party/boost/boost/system/error_code.hpp
@@ -14,7 +14,6 @@
#include <boost/system/config.hpp>
#include <boost/cstdint.hpp>
#include <boost/assert.hpp>
-#include <boost/operators.hpp>
#include <boost/noncopyable.hpp>
#include <boost/utility/enable_if.hpp>
#include <ostream>
@@ -513,7 +512,7 @@ namespace boost
#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
# ifdef BOOST_ERROR_CODE_HEADER_ONLY
-# include <boost/../libs/system/src/error_code.cpp>
+# include <boost/system/detail/error_code.ipp>
# endif
#endif // BOOST_ERROR_CODE_HPP
diff --git a/3party/boost/boost/system/windows_error.hpp b/3party/boost/boost/system/windows_error.hpp
index fff3a98473..9d9d206c6b 100644
--- a/3party/boost/boost/system/windows_error.hpp
+++ b/3party/boost/boost/system/windows_error.hpp
@@ -18,7 +18,15 @@
#ifdef BOOST_WINDOWS_API
#include <boost/system/error_code.hpp>
+
+// Neither MinGW or Cygwin versions of winerror.h work if used alone, so on
+// either of those platforms include the full windows.h
+
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+#include <windows.h>
+#else
#include <winerror.h>
+#endif
namespace boost
{
diff --git a/3party/boost/boost/test/auto_unit_test.hpp b/3party/boost/boost/test/auto_unit_test.hpp
index be72df1aa1..c99316888e 100644
--- a/3party/boost/boost/test/auto_unit_test.hpp
+++ b/3party/boost/boost/test/auto_unit_test.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : deprecated
// ***************************************************************************
diff --git a/3party/boost/boost/test/debug.hpp b/3party/boost/boost/test/debug.hpp
index cf3313d092..1c45bc7e6e 100644
--- a/3party/boost/boost/test/debug.hpp
+++ b/3party/boost/boost/test/debug.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines portable debug interfaces
// ***************************************************************************
diff --git a/3party/boost/boost/test/debug_config.hpp b/3party/boost/boost/test/debug_config.hpp
index 54c21e9d1a..17f41a60a7 100644
--- a/3party/boost/boost/test/debug_config.hpp
+++ b/3party/boost/boost/test/debug_config.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : user's config for Boost.Test debugging support
// ***************************************************************************
diff --git a/3party/boost/boost/test/detail/config.hpp b/3party/boost/boost/test/detail/config.hpp
index 545579277f..4b12f0399c 100644
--- a/3party/boost/boost/test/detail/config.hpp
+++ b/3party/boost/boost/test/detail/config.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 63441 $
+// Version : $Revision$
//
// Description : as a central place for global configuration switches
// ***************************************************************************
diff --git a/3party/boost/boost/test/detail/enable_warnings.hpp b/3party/boost/boost/test/detail/enable_warnings.hpp
index 2d67fb0be7..7c11ba2355 100644
--- a/3party/boost/boost/test/detail/enable_warnings.hpp
+++ b/3party/boost/boost/test/detail/enable_warnings.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : enable previosly suppressed warnings
// ***************************************************************************
diff --git a/3party/boost/boost/test/detail/fwd_decl.hpp b/3party/boost/boost/test/detail/fwd_decl.hpp
index 8ffba82b51..bde272a169 100644
--- a/3party/boost/boost/test/detail/fwd_decl.hpp
+++ b/3party/boost/boost/test/detail/fwd_decl.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : contains forward eclarations for Boost.Test data types
// ***************************************************************************
diff --git a/3party/boost/boost/test/detail/global_typedef.hpp b/3party/boost/boost/test/detail/global_typedef.hpp
index b2d818685f..ad66f984fe 100644
--- a/3party/boost/boost/test/detail/global_typedef.hpp
+++ b/3party/boost/boost/test/detail/global_typedef.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : some trivial global typedefs
// ***************************************************************************
diff --git a/3party/boost/boost/test/detail/log_level.hpp b/3party/boost/boost/test/detail/log_level.hpp
index 3fecd4fb57..371c4b9d60 100644
--- a/3party/boost/boost/test/detail/log_level.hpp
+++ b/3party/boost/boost/test/detail/log_level.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : shared definition for unit test log levels
// ***************************************************************************
diff --git a/3party/boost/boost/test/detail/suppress_warnings.hpp b/3party/boost/boost/test/detail/suppress_warnings.hpp
index 2471226bed..d5c95266ed 100644
--- a/3party/boost/boost/test/detail/suppress_warnings.hpp
+++ b/3party/boost/boost/test/detail/suppress_warnings.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : suppress some warnings
// ***************************************************************************
diff --git a/3party/boost/boost/test/detail/unit_test_parameters.hpp b/3party/boost/boost/test/detail/unit_test_parameters.hpp
index 391dfc3bbb..740dc5d6fd 100644
--- a/3party/boost/boost/test/detail/unit_test_parameters.hpp
+++ b/3party/boost/boost/test/detail/unit_test_parameters.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : storage for unit test framework parameters information
// ***************************************************************************
diff --git a/3party/boost/boost/test/detail/workaround.hpp b/3party/boost/boost/test/detail/workaround.hpp
index 8c28460275..a7c50c2483 100644
--- a/3party/boost/boost/test/detail/workaround.hpp
+++ b/3party/boost/boost/test/detail/workaround.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : contains mics. workarounds
// ***************************************************************************
diff --git a/3party/boost/boost/test/exception_safety.hpp b/3party/boost/boost/test/exception_safety.hpp
index c35e062a80..e1e8d85ad1 100644
--- a/3party/boost/boost/test/exception_safety.hpp
+++ b/3party/boost/boost/test/exception_safety.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : Facilities to perform exception safety tests
// ***************************************************************************
diff --git a/3party/boost/boost/test/execution_monitor.hpp b/3party/boost/boost/test/execution_monitor.hpp
index e846152736..a1c2ee61c9 100644
--- a/3party/boost/boost/test/execution_monitor.hpp
+++ b/3party/boost/boost/test/execution_monitor.hpp
@@ -8,7 +8,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : defines abstract monitor interfaces and implements execution exception
// The original Boost Test Library included an implementation detail function
diff --git a/3party/boost/boost/test/floating_point_comparison.hpp b/3party/boost/boost/test/floating_point_comparison.hpp
index 5446adac88..5a5a3269cc 100644
--- a/3party/boost/boost/test/floating_point_comparison.hpp
+++ b/3party/boost/boost/test/floating_point_comparison.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : defines algoirthms for comparing 2 floating point values
// ***************************************************************************
diff --git a/3party/boost/boost/test/framework.hpp b/3party/boost/boost/test/framework.hpp
index 54d4b52754..7f6fd2aecc 100644
--- a/3party/boost/boost/test/framework.hpp
+++ b/3party/boost/boost/test/framework.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : defines framework interface
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/compiler_log_formatter.ipp b/3party/boost/boost/test/impl/compiler_log_formatter.ipp
index d49c2f8f4d..8fc08ccf44 100644
--- a/3party/boost/boost/test/impl/compiler_log_formatter.ipp
+++ b/3party/boost/boost/test/impl/compiler_log_formatter.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : implements compiler like Log formatter
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/cpp_main.ipp b/3party/boost/boost/test/impl/cpp_main.ipp
index e5156e49e6..23d19e2f31 100644
--- a/3party/boost/boost/test/impl/cpp_main.ipp
+++ b/3party/boost/boost/test/impl/cpp_main.ipp
@@ -8,7 +8,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : main function implementation for Program Executon Monitor
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/debug.ipp b/3party/boost/boost/test/impl/debug.ipp
index d351271f92..78c3aa8e38 100644
--- a/3party/boost/boost/test/impl/debug.ipp
+++ b/3party/boost/boost/test/impl/debug.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : debug interfaces implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/exception_safety.ipp b/3party/boost/boost/test/impl/exception_safety.ipp
index e2d529a810..7f0afcb457 100644
--- a/3party/boost/boost/test/impl/exception_safety.ipp
+++ b/3party/boost/boost/test/impl/exception_safety.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : Facilities to perform exception safety tests
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/execution_monitor.ipp b/3party/boost/boost/test/impl/execution_monitor.ipp
index d9d5b6a34a..07484b19d9 100644
--- a/3party/boost/boost/test/impl/execution_monitor.ipp
+++ b/3party/boost/boost/test/impl/execution_monitor.ipp
@@ -8,7 +8,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : provides execution monitor implementation for all supported
// configurations, including Microsoft structured exception based, unix signals
diff --git a/3party/boost/boost/test/impl/framework.ipp b/3party/boost/boost/test/impl/framework.ipp
index 1fbcffc039..a1e98b3771 100644
--- a/3party/boost/boost/test/impl/framework.ipp
+++ b/3party/boost/boost/test/impl/framework.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57991 $
+// Version : $Revision$
//
// Description : implements framework API - main driver for the test
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/interaction_based.ipp b/3party/boost/boost/test/impl/interaction_based.ipp
index 56bb8672aa..ce2893364a 100644
--- a/3party/boost/boost/test/impl/interaction_based.ipp
+++ b/3party/boost/boost/test/impl/interaction_based.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : Facilities to perform interaction-based testing
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/logged_expectations.ipp b/3party/boost/boost/test/impl/logged_expectations.ipp
index 2df790c61b..ff30628b8e 100644
--- a/3party/boost/boost/test/impl/logged_expectations.ipp
+++ b/3party/boost/boost/test/impl/logged_expectations.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : Facilities to perform interaction based testng of logged expectations
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/plain_report_formatter.ipp b/3party/boost/boost/test/impl/plain_report_formatter.ipp
index d901b8ea42..95b662135d 100644
--- a/3party/boost/boost/test/impl/plain_report_formatter.ipp
+++ b/3party/boost/boost/test/impl/plain_report_formatter.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : plain report formatter definition
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/progress_monitor.ipp b/3party/boost/boost/test/impl/progress_monitor.ipp
index d245aa6185..5175755c3a 100644
--- a/3party/boost/boost/test/impl/progress_monitor.ipp
+++ b/3party/boost/boost/test/impl/progress_monitor.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : implements simple text based progress monitor
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/results_collector.ipp b/3party/boost/boost/test/impl/results_collector.ipp
index e85528ba99..0d5691aab6 100644
--- a/3party/boost/boost/test/impl/results_collector.ipp
+++ b/3party/boost/boost/test/impl/results_collector.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : implements Unit Test results collecting facility.
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/results_reporter.ipp b/3party/boost/boost/test/impl/results_reporter.ipp
index 71a0f66f91..54447c3932 100644
--- a/3party/boost/boost/test/impl/results_reporter.ipp
+++ b/3party/boost/boost/test/impl/results_reporter.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : result reporting facilties
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/test_main.ipp b/3party/boost/boost/test/impl/test_main.ipp
index 6c41ceea6f..b08f5e16c7 100644
--- a/3party/boost/boost/test/impl/test_main.ipp
+++ b/3party/boost/boost/test/impl/test_main.ipp
@@ -8,7 +8,7 @@
//
// File : $RCSfile$
//
-// Version : $$Revision: 49312 $
+// Version : $$Revision$
//
// Description : implements main function for Test Execution Monitor.
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/test_tools.ipp b/3party/boost/boost/test/impl/test_tools.ipp
index 67fb25dc0e..6f5d7e9edf 100644
--- a/3party/boost/boost/test/impl/test_tools.ipp
+++ b/3party/boost/boost/test/impl/test_tools.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : supplies offline implementation for the Test Tools
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/unit_test_log.ipp b/3party/boost/boost/test/impl/unit_test_log.ipp
index dbe4015514..7cb4f4b4a8 100644
--- a/3party/boost/boost/test/impl/unit_test_log.ipp
+++ b/3party/boost/boost/test/impl/unit_test_log.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : implemets Unit Test Log
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/unit_test_main.ipp b/3party/boost/boost/test/impl/unit_test_main.ipp
index 9874c69ab2..adedf35180 100644
--- a/3party/boost/boost/test/impl/unit_test_main.ipp
+++ b/3party/boost/boost/test/impl/unit_test_main.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : main function implementation for Unit Test Framework
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/unit_test_monitor.ipp b/3party/boost/boost/test/impl/unit_test_monitor.ipp
index b162ad922c..dc912f544e 100644
--- a/3party/boost/boost/test/impl/unit_test_monitor.ipp
+++ b/3party/boost/boost/test/impl/unit_test_monitor.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : implements specific subclass of Executon Monitor used by Unit
// Test Framework to monitor test cases run.
diff --git a/3party/boost/boost/test/impl/unit_test_parameters.ipp b/3party/boost/boost/test/impl/unit_test_parameters.ipp
index fd8e1adebc..f220792b34 100644
--- a/3party/boost/boost/test/impl/unit_test_parameters.ipp
+++ b/3party/boost/boost/test/impl/unit_test_parameters.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 63640 $
+// Version : $Revision$
//
// Description : simple implementation for Unit Test Framework parameter
// handling routines. May be rewritten in future to use some kind of
diff --git a/3party/boost/boost/test/impl/unit_test_suite.ipp b/3party/boost/boost/test/impl/unit_test_suite.ipp
index 859a0b5670..32efc6059e 100644
--- a/3party/boost/boost/test/impl/unit_test_suite.ipp
+++ b/3party/boost/boost/test/impl/unit_test_suite.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : privides core implementation for Unit Test Framework.
// Extensions can be provided in separate files
diff --git a/3party/boost/boost/test/impl/xml_log_formatter.ipp b/3party/boost/boost/test/impl/xml_log_formatter.ipp
index 8322e0b7e2..6c0127bb57 100644
--- a/3party/boost/boost/test/impl/xml_log_formatter.ipp
+++ b/3party/boost/boost/test/impl/xml_log_formatter.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : implements XML Log formatter
// ***************************************************************************
diff --git a/3party/boost/boost/test/impl/xml_report_formatter.ipp b/3party/boost/boost/test/impl/xml_report_formatter.ipp
index 0a512857bc..261db788b3 100644
--- a/3party/boost/boost/test/impl/xml_report_formatter.ipp
+++ b/3party/boost/boost/test/impl/xml_report_formatter.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : XML report formatter
// ***************************************************************************
diff --git a/3party/boost/boost/test/included/prg_exec_monitor.hpp b/3party/boost/boost/test/included/prg_exec_monitor.hpp
index ed58d982e8..530cc3feba 100644
--- a/3party/boost/boost/test/included/prg_exec_monitor.hpp
+++ b/3party/boost/boost/test/included/prg_exec_monitor.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : included (vs. linked ) version of Program Execution Monitor
// ***************************************************************************
diff --git a/3party/boost/boost/test/included/test_exec_monitor.hpp b/3party/boost/boost/test/included/test_exec_monitor.hpp
index 9d79480ea8..8d351b158b 100644
--- a/3party/boost/boost/test/included/test_exec_monitor.hpp
+++ b/3party/boost/boost/test/included/test_exec_monitor.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : included (vs. linked) version of Test Execution Monitor
// ***************************************************************************
diff --git a/3party/boost/boost/test/included/unit_test.hpp b/3party/boost/boost/test/included/unit_test.hpp
index c3c1c71129..5b2d50ab71 100644
--- a/3party/boost/boost/test/included/unit_test.hpp
+++ b/3party/boost/boost/test/included/unit_test.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : included (vs. linked) version of Unit Test Framework
// ***************************************************************************
diff --git a/3party/boost/boost/test/interaction_based.hpp b/3party/boost/boost/test/interaction_based.hpp
index 7a85cce618..e77128abd2 100644
--- a/3party/boost/boost/test/interaction_based.hpp
+++ b/3party/boost/boost/test/interaction_based.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : Facilities to perform interaction-based testing
// ***************************************************************************
diff --git a/3party/boost/boost/test/logged_expectations.hpp b/3party/boost/boost/test/logged_expectations.hpp
index 612428da08..868281216a 100644
--- a/3party/boost/boost/test/logged_expectations.hpp
+++ b/3party/boost/boost/test/logged_expectations.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : Facilities to perform interaction based testng of logged expectations
// ***************************************************************************
diff --git a/3party/boost/boost/test/minimal.hpp b/3party/boost/boost/test/minimal.hpp
index 3070199513..7d32150560 100644
--- a/3party/boost/boost/test/minimal.hpp
+++ b/3party/boost/boost/test/minimal.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : simple minimal testing definitions and implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/mock_object.hpp b/3party/boost/boost/test/mock_object.hpp
index e2a436a150..dbc4cb410a 100644
--- a/3party/boost/boost/test/mock_object.hpp
+++ b/3party/boost/boost/test/mock_object.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : Facilities to perform exception safety_tests
// ***************************************************************************
diff --git a/3party/boost/boost/test/output/compiler_log_formatter.hpp b/3party/boost/boost/test/output/compiler_log_formatter.hpp
index 3abb2d5737..23795b99eb 100644
--- a/3party/boost/boost/test/output/compiler_log_formatter.hpp
+++ b/3party/boost/boost/test/output/compiler_log_formatter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : contains compiler like Log formatter definition
// ***************************************************************************
diff --git a/3party/boost/boost/test/output/plain_report_formatter.hpp b/3party/boost/boost/test/output/plain_report_formatter.hpp
index 49eb7dc724..2785e697d6 100644
--- a/3party/boost/boost/test/output/plain_report_formatter.hpp
+++ b/3party/boost/boost/test/output/plain_report_formatter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : plain report formatter implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/output/xml_log_formatter.hpp b/3party/boost/boost/test/output/xml_log_formatter.hpp
index 93ee2fe801..43b4ce82de 100644
--- a/3party/boost/boost/test/output/xml_log_formatter.hpp
+++ b/3party/boost/boost/test/output/xml_log_formatter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : contains XML Log formatter definition
// ***************************************************************************
diff --git a/3party/boost/boost/test/output/xml_report_formatter.hpp b/3party/boost/boost/test/output/xml_report_formatter.hpp
index 6c413d9a0c..0ee81d9457 100644
--- a/3party/boost/boost/test/output/xml_report_formatter.hpp
+++ b/3party/boost/boost/test/output/xml_report_formatter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : XML report formatter implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/output_test_stream.hpp b/3party/boost/boost/test/output_test_stream.hpp
index 295c2380d6..2f2184a933 100644
--- a/3party/boost/boost/test/output_test_stream.hpp
+++ b/3party/boost/boost/test/output_test_stream.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : output_test_stream class definition
// ***************************************************************************
diff --git a/3party/boost/boost/test/parameterized_test.hpp b/3party/boost/boost/test/parameterized_test.hpp
index 930dc81a77..7654409a8e 100644
--- a/3party/boost/boost/test/parameterized_test.hpp
+++ b/3party/boost/boost/test/parameterized_test.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : generators and helper macros for parameterized tests
// ***************************************************************************
diff --git a/3party/boost/boost/test/predicate_result.hpp b/3party/boost/boost/test/predicate_result.hpp
index 16ae48825a..8ac18b754b 100644
--- a/3party/boost/boost/test/predicate_result.hpp
+++ b/3party/boost/boost/test/predicate_result.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : enhanced result for test predicate that include message explaining failure
// ***************************************************************************
diff --git a/3party/boost/boost/test/prg_exec_monitor.hpp b/3party/boost/boost/test/prg_exec_monitor.hpp
index 638bb2a3fc..6d65f20776 100644
--- a/3party/boost/boost/test/prg_exec_monitor.hpp
+++ b/3party/boost/boost/test/prg_exec_monitor.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : Entry point for the end user into the Program Execution Monitor.
// ***************************************************************************
diff --git a/3party/boost/boost/test/progress_monitor.hpp b/3party/boost/boost/test/progress_monitor.hpp
index f4c99d5dc0..5bf69257a8 100644
--- a/3party/boost/boost/test/progress_monitor.hpp
+++ b/3party/boost/boost/test/progress_monitor.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines simple text based progress monitor
// ***************************************************************************
diff --git a/3party/boost/boost/test/results_collector.hpp b/3party/boost/boost/test/results_collector.hpp
index a56b4dbf90..e4200b025d 100644
--- a/3party/boost/boost/test/results_collector.hpp
+++ b/3party/boost/boost/test/results_collector.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines class unit_test_result that is responsible for
// gathering test results and presenting this information to end-user
diff --git a/3party/boost/boost/test/results_reporter.hpp b/3party/boost/boost/test/results_reporter.hpp
index 16f622a2a7..862c622a68 100644
--- a/3party/boost/boost/test/results_reporter.hpp
+++ b/3party/boost/boost/test/results_reporter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines class unit_test_result that is responsible for
// gathering test results and presenting this information to end-user
diff --git a/3party/boost/boost/test/test_case_template.hpp b/3party/boost/boost/test/test_case_template.hpp
index d27743f791..8c64f1ce00 100644
--- a/3party/boost/boost/test/test_case_template.hpp
+++ b/3party/boost/boost/test/test_case_template.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : deprecated
// ***************************************************************************
diff --git a/3party/boost/boost/test/test_exec_monitor.hpp b/3party/boost/boost/test/test_exec_monitor.hpp
index 348370c88b..13802ed1d5 100644
--- a/3party/boost/boost/test/test_exec_monitor.hpp
+++ b/3party/boost/boost/test/test_exec_monitor.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : Entry point for the end user into the Test Execution Monitor.
// ***************************************************************************
diff --git a/3party/boost/boost/test/test_observer.hpp b/3party/boost/boost/test/test_observer.hpp
index 0c252a117b..4ae152c7b6 100644
--- a/3party/boost/boost/test/test_observer.hpp
+++ b/3party/boost/boost/test/test_observer.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines abstract interface for test observer
// ***************************************************************************
diff --git a/3party/boost/boost/test/test_tools.hpp b/3party/boost/boost/test/test_tools.hpp
index b2ee9e37f5..2800ac0616 100644
--- a/3party/boost/boost/test/test_tools.hpp
+++ b/3party/boost/boost/test/test_tools.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : contains definition for all test tools in test toolbox
// ***************************************************************************
diff --git a/3party/boost/boost/test/unit_test.hpp b/3party/boost/boost/test/unit_test.hpp
index 69d10e0963..c93e2b69ff 100644
--- a/3party/boost/boost/test/unit_test.hpp
+++ b/3party/boost/boost/test/unit_test.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : Entry point for the end user into the Unit Test Framework.
// ***************************************************************************
diff --git a/3party/boost/boost/test/unit_test_log.hpp b/3party/boost/boost/test/unit_test_log.hpp
index fe76eb6705..8d9eac6a9e 100644
--- a/3party/boost/boost/test/unit_test_log.hpp
+++ b/3party/boost/boost/test/unit_test_log.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : defines singleton class unit_test_log and all manipulators.
// unit_test_log has output stream like interface. It's implementation is
diff --git a/3party/boost/boost/test/unit_test_log_formatter.hpp b/3party/boost/boost/test/unit_test_log_formatter.hpp
index ca4b1f2971..81f156b4b9 100644
--- a/3party/boost/boost/test/unit_test_log_formatter.hpp
+++ b/3party/boost/boost/test/unit_test_log_formatter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description :
// ***************************************************************************
diff --git a/3party/boost/boost/test/unit_test_monitor.hpp b/3party/boost/boost/test/unit_test_monitor.hpp
index 0bd1494628..9ac1e139f3 100644
--- a/3party/boost/boost/test/unit_test_monitor.hpp
+++ b/3party/boost/boost/test/unit_test_monitor.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines specific version of execution monitor used to managed
// run unit of test cases. Translates execution exception into error level
diff --git a/3party/boost/boost/test/unit_test_suite.hpp b/3party/boost/boost/test/unit_test_suite.hpp
index 3147f28dd6..048a75f676 100644
--- a/3party/boost/boost/test/unit_test_suite.hpp
+++ b/3party/boost/boost/test/unit_test_suite.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : defines Unit Test Framework public API
// ***************************************************************************
diff --git a/3party/boost/boost/test/unit_test_suite_impl.hpp b/3party/boost/boost/test/unit_test_suite_impl.hpp
index 993e0560f4..e3573dd9d7 100644
--- a/3party/boost/boost/test/unit_test_suite_impl.hpp
+++ b/3party/boost/boost/test/unit_test_suite_impl.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : defines test_unit, test_case, test_case_results, test_suite and test_tree_visitor
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/algorithm.hpp b/3party/boost/boost/test/utils/algorithm.hpp
index d5c6d12c16..1ad389dbaf 100644
--- a/3party/boost/boost/test/utils/algorithm.hpp
+++ b/3party/boost/boost/test/utils/algorithm.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : addition to STL algorithms
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/assign_op.hpp b/3party/boost/boost/test/utils/assign_op.hpp
index 1ddcf7d172..434219fa9d 100644
--- a/3party/boost/boost/test/utils/assign_op.hpp
+++ b/3party/boost/boost/test/utils/assign_op.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : overloadable assignment
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/basic_cstring/basic_cstring.hpp b/3party/boost/boost/test/utils/basic_cstring/basic_cstring.hpp
index 5589e61680..14742c49f9 100644
--- a/3party/boost/boost/test/utils/basic_cstring/basic_cstring.hpp
+++ b/3party/boost/boost/test/utils/basic_cstring/basic_cstring.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : class basic_cstring wraps C string and provide std_string like
// interface
diff --git a/3party/boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp b/3party/boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp
index e89456c2e3..f3d11a5cd2 100644
--- a/3party/boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp
+++ b/3party/boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : basic_cstring class wrap C string and provide std_string like
// interface
diff --git a/3party/boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp b/3party/boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp
index f932d473b8..a97d4616a2 100644
--- a/3party/boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp
+++ b/3party/boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : generic char traits class; wraps std::char_traits
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/basic_cstring/compare.hpp b/3party/boost/boost/test/utils/basic_cstring/compare.hpp
index 8866c44c2c..5c1416f17a 100644
--- a/3party/boost/boost/test/utils/basic_cstring/compare.hpp
+++ b/3party/boost/boost/test/utils/basic_cstring/compare.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : class basic_cstring comparisons implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/basic_cstring/io.hpp b/3party/boost/boost/test/utils/basic_cstring/io.hpp
index 04e4b4c23f..1c8a2a3826 100644
--- a/3party/boost/boost/test/utils/basic_cstring/io.hpp
+++ b/3party/boost/boost/test/utils/basic_cstring/io.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : basic_cstring i/o implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/callback.hpp b/3party/boost/boost/test/utils/callback.hpp
index bd7d3e1241..6aa0a15773 100644
--- a/3party/boost/boost/test/utils/callback.hpp
+++ b/3party/boost/boost/test/utils/callback.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description :
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/class_properties.hpp b/3party/boost/boost/test/utils/class_properties.hpp
index a7842b5b58..d2070dc97a 100644
--- a/3party/boost/boost/test/utils/class_properties.hpp
+++ b/3party/boost/boost/test/utils/class_properties.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : simple facility that mimmic notion of read-only read-write
// properties in C++ classes. Original idea by Henrik Ravn.
diff --git a/3party/boost/boost/test/utils/custom_manip.hpp b/3party/boost/boost/test/utils/custom_manip.hpp
index 8788ccbf93..52705a9703 100644
--- a/3party/boost/boost/test/utils/custom_manip.hpp
+++ b/3party/boost/boost/test/utils/custom_manip.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : simple helpers for creating cusom output manipulators
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/fixed_mapping.hpp b/3party/boost/boost/test/utils/fixed_mapping.hpp
index b0ab3b8773..e8139337bb 100644
--- a/3party/boost/boost/test/utils/fixed_mapping.hpp
+++ b/3party/boost/boost/test/utils/fixed_mapping.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : fixed sized mapping with specified invalid value
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/foreach.hpp b/3party/boost/boost/test/utils/foreach.hpp
index d12fa43024..da32ae300f 100644
--- a/3party/boost/boost/test/utils/foreach.hpp
+++ b/3party/boost/boost/test/utils/foreach.hpp
@@ -8,7 +8,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : this is an abridged version of an excelent BOOST_FOREACH facility
// presented by Eric Niebler. I am so fond of it so I can't wait till it
diff --git a/3party/boost/boost/test/utils/iterator/ifstream_line_iterator.hpp b/3party/boost/boost/test/utils/iterator/ifstream_line_iterator.hpp
index 3005ef14c1..d41b09d8f8 100644
--- a/3party/boost/boost/test/utils/iterator/ifstream_line_iterator.hpp
+++ b/3party/boost/boost/test/utils/iterator/ifstream_line_iterator.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description :
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/iterator/input_iterator_facade.hpp b/3party/boost/boost/test/utils/iterator/input_iterator_facade.hpp
index ec29e21a63..6ce07b2af2 100644
--- a/3party/boost/boost/test/utils/iterator/input_iterator_facade.hpp
+++ b/3party/boost/boost/test/utils/iterator/input_iterator_facade.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : Input iterator facade
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/iterator/istream_line_iterator.hpp b/3party/boost/boost/test/utils/iterator/istream_line_iterator.hpp
index d58a2cebbb..5aa517d7c8 100644
--- a/3party/boost/boost/test/utils/iterator/istream_line_iterator.hpp
+++ b/3party/boost/boost/test/utils/iterator/istream_line_iterator.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description :
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/iterator/token_iterator.hpp b/3party/boost/boost/test/utils/iterator/token_iterator.hpp
index c303ab7e71..001507847d 100644
--- a/3party/boost/boost/test/utils/iterator/token_iterator.hpp
+++ b/3party/boost/boost/test/utils/iterator/token_iterator.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : token iterator for string and range tokenization
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/lazy_ostream.hpp b/3party/boost/boost/test/utils/lazy_ostream.hpp
index d7d7d6cb10..87d96602f9 100644
--- a/3party/boost/boost/test/utils/lazy_ostream.hpp
+++ b/3party/boost/boost/test/utils/lazy_ostream.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : contains definition for all test tools in test toolbox
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/named_params.hpp b/3party/boost/boost/test/utils/named_params.hpp
index f7f8e68d3a..0a6277ce12 100644
--- a/3party/boost/boost/test/utils/named_params.hpp
+++ b/3party/boost/boost/test/utils/named_params.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : facilities for named function parameters support
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/nullstream.hpp b/3party/boost/boost/test/utils/nullstream.hpp
index 6bec51bedc..deca6ed15f 100644
--- a/3party/boost/boost/test/utils/nullstream.hpp
+++ b/3party/boost/boost/test/utils/nullstream.hpp
@@ -8,7 +8,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : simulate /dev/null stream
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/rtti.hpp b/3party/boost/boost/test/utils/rtti.hpp
index 655222de79..f795a2cbe4 100644
--- a/3party/boost/boost/test/utils/rtti.hpp
+++ b/3party/boost/boost/test/utils/rtti.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : simple facilities for accessing type information at runtime
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/argument.hpp b/3party/boost/boost/test/utils/runtime/argument.hpp
index d22745cb65..d0f420aab7 100644
--- a/3party/boost/boost/test/utils/runtime/argument.hpp
+++ b/3party/boost/boost/test/utils/runtime/argument.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : model of actual argument (both typed and abstract interface)
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/argument_factory.hpp b/3party/boost/boost/test/utils/runtime/cla/argument_factory.hpp
index 1117066993..19ccc08c0f 100644
--- a/3party/boost/boost/test/utils/runtime/cla/argument_factory.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/argument_factory.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : generic typed_argument_factory implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/argv_traverser.cpp b/3party/boost/boost/test/utils/runtime/cla/argv_traverser.cpp
index f64305dc59..a7a44f7fd9 100644
--- a/3party/boost/boost/test/utils/runtime/cla/argv_traverser.cpp
+++ b/3party/boost/boost/test/utils/runtime/cla/argv_traverser.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : offline implementation for argc/argv traverser
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/argv_traverser.hpp b/3party/boost/boost/test/utils/runtime/cla/argv_traverser.hpp
index c1fb95ef20..58cf2fe5f7 100644
--- a/3party/boost/boost/test/utils/runtime/cla/argv_traverser.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/argv_traverser.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : defines facility to hide input traversing details
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/argv_traverser.ipp b/3party/boost/boost/test/utils/runtime/cla/argv_traverser.ipp
index d7bd6c0ecc..2b5e3818b3 100644
--- a/3party/boost/boost/test/utils/runtime/cla/argv_traverser.ipp
+++ b/3party/boost/boost/test/utils/runtime/cla/argv_traverser.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : implements facility to hide input traversing details
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/basic_parameter.hpp b/3party/boost/boost/test/utils/runtime/cla/basic_parameter.hpp
index e7e084cd26..8b826bba0a 100644
--- a/3party/boost/boost/test/utils/runtime/cla/basic_parameter.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/basic_parameter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : generic custom parameter generator
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/char_parameter.cpp b/3party/boost/boost/test/utils/runtime/cla/char_parameter.cpp
index abffa72b84..017402e8e7 100644
--- a/3party/boost/boost/test/utils/runtime/cla/char_parameter.cpp
+++ b/3party/boost/boost/test/utils/runtime/cla/char_parameter.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : offline implementation of char parameter
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/char_parameter.hpp b/3party/boost/boost/test/utils/runtime/cla/char_parameter.hpp
index 3e9b2d8427..425c24f3f9 100644
--- a/3party/boost/boost/test/utils/runtime/cla/char_parameter.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/char_parameter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : defines model of parameter with single char name
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/char_parameter.ipp b/3party/boost/boost/test/utils/runtime/cla/char_parameter.ipp
index cc9e923a53..db4d0c1ed1 100644
--- a/3party/boost/boost/test/utils/runtime/cla/char_parameter.ipp
+++ b/3party/boost/boost/test/utils/runtime/cla/char_parameter.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : implements model of parameter with single char name
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp b/3party/boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp
index 1986b6d25d..0d59595612 100644
--- a/3party/boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp
@@ -8,7 +8,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : argument usage printing helpers
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.cpp b/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.cpp
index d594fc3d45..c715de349e 100644
--- a/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.cpp
+++ b/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : offline implementation of generic parameter with dual naming
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp b/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp
index 233f63221e..26ac657c86 100644
--- a/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : defines model of generic parameter with dual naming
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp b/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp
index f9356bdf80..6e3a37f58d 100644
--- a/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp
+++ b/3party/boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : implements model of generic parameter with dual naming
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/fwd.hpp b/3party/boost/boost/test/utils/runtime/cla/fwd.hpp
index 66d6efc13b..b5039339d8 100644
--- a/3party/boost/boost/test/utils/runtime/cla/fwd.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/fwd.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : cla subsystem forward declarations
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/id_policy.cpp b/3party/boost/boost/test/utils/runtime/cla/id_policy.cpp
index 517c9c57a5..c3a5ab8273 100644
--- a/3party/boost/boost/test/utils/runtime/cla/id_policy.cpp
+++ b/3party/boost/boost/test/utils/runtime/cla/id_policy.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : some generic identification policies offline implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/id_policy.hpp b/3party/boost/boost/test/utils/runtime/cla/id_policy.hpp
index 0784979912..596805ea21 100644
--- a/3party/boost/boost/test/utils/runtime/cla/id_policy.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/id_policy.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : some generic identification policies definition
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/id_policy.ipp b/3party/boost/boost/test/utils/runtime/cla/id_policy.ipp
index 0de8d85d1a..5498b9a8d0 100644
--- a/3party/boost/boost/test/utils/runtime/cla/id_policy.ipp
+++ b/3party/boost/boost/test/utils/runtime/cla/id_policy.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : some generic identification policies implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp b/3party/boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp
index 6f549653a2..03669e0cc0 100644
--- a/3party/boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : defines interface for argument_factory
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/iface/id_policy.hpp b/3party/boost/boost/test/utils/runtime/cla/iface/id_policy.hpp
index c69a09458e..1e2d684c25 100644
--- a/3party/boost/boost/test/utils/runtime/cla/iface/id_policy.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/iface/id_policy.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : defines interface for identification_policy
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/modifier.hpp b/3party/boost/boost/test/utils/runtime/cla/modifier.hpp
index bc6a7eb9eb..08924e2f94 100644
--- a/3party/boost/boost/test/utils/runtime/cla/modifier.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/modifier.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : parameter modifiers
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/named_parameter.cpp b/3party/boost/boost/test/utils/runtime/cla/named_parameter.cpp
index ff8d105cd4..1b91059fd0 100644
--- a/3party/boost/boost/test/utils/runtime/cla/named_parameter.cpp
+++ b/3party/boost/boost/test/utils/runtime/cla/named_parameter.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : offline implementation of named parameter
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/named_parameter.hpp b/3party/boost/boost/test/utils/runtime/cla/named_parameter.hpp
index 51ef1da16c..9f0ac1dae0 100644
--- a/3party/boost/boost/test/utils/runtime/cla/named_parameter.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/named_parameter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines model of named parameter
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/named_parameter.ipp b/3party/boost/boost/test/utils/runtime/cla/named_parameter.ipp
index 77f69aaee9..e04348f53b 100644
--- a/3party/boost/boost/test/utils/runtime/cla/named_parameter.ipp
+++ b/3party/boost/boost/test/utils/runtime/cla/named_parameter.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : implements model of named parameter
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/parameter.hpp b/3party/boost/boost/test/utils/runtime/cla/parameter.hpp
index 753268a9a0..25680db087 100644
--- a/3party/boost/boost/test/utils/runtime/cla/parameter.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/parameter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 81913 $
+// Version : $Revision$
//
// Description : defines model of formal parameter
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/parser.cpp b/3party/boost/boost/test/utils/runtime/cla/parser.cpp
index 2fdeb9afbe..4d1d7afe97 100644
--- a/3party/boost/boost/test/utils/runtime/cla/parser.cpp
+++ b/3party/boost/boost/test/utils/runtime/cla/parser.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : offline implementation for parser
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/parser.hpp b/3party/boost/boost/test/utils/runtime/cla/parser.hpp
index 5c3c341d94..f95d26a095 100644
--- a/3party/boost/boost/test/utils/runtime/cla/parser.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/parser.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : defines parser - public interface for CLA parsing and accessing
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/parser.ipp b/3party/boost/boost/test/utils/runtime/cla/parser.ipp
index 995411a73f..188d303156 100644
--- a/3party/boost/boost/test/utils/runtime/cla/parser.ipp
+++ b/3party/boost/boost/test/utils/runtime/cla/parser.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : implements parser - public interface for CLA parsing and accessing
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/positional_parameter.hpp b/3party/boost/boost/test/utils/runtime/cla/positional_parameter.hpp
index a4be029a22..60da845627 100644
--- a/3party/boost/boost/test/utils/runtime/cla/positional_parameter.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/positional_parameter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : positional parameter model
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/typed_parameter.hpp b/3party/boost/boost/test/utils/runtime/cla/typed_parameter.hpp
index 2d2e02eca1..3d4c57b23a 100644
--- a/3party/boost/boost/test/utils/runtime/cla/typed_parameter.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/typed_parameter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : generic typed parameter model
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/validation.cpp b/3party/boost/boost/test/utils/runtime/cla/validation.cpp
index cbd70ad1e3..f5c1e6669a 100644
--- a/3party/boost/boost/test/utils/runtime/cla/validation.cpp
+++ b/3party/boost/boost/test/utils/runtime/cla/validation.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : input validation helpers offline implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/validation.hpp b/3party/boost/boost/test/utils/runtime/cla/validation.hpp
index 6b2fea9711..57a7f2459f 100644
--- a/3party/boost/boost/test/utils/runtime/cla/validation.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/validation.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : input validation helpers definition
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/validation.ipp b/3party/boost/boost/test/utils/runtime/cla/validation.ipp
index 8cde449c25..9728bd6702 100644
--- a/3party/boost/boost/test/utils/runtime/cla/validation.ipp
+++ b/3party/boost/boost/test/utils/runtime/cla/validation.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : input validation helpers implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/value_generator.hpp b/3party/boost/boost/test/utils/runtime/cla/value_generator.hpp
index 1851592b4d..ab15c9b551 100644
--- a/3party/boost/boost/test/utils/runtime/cla/value_generator.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/value_generator.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : specific value generators
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/cla/value_handler.hpp b/3party/boost/boost/test/utils/runtime/cla/value_handler.hpp
index 2bc74b2382..fbf99667aa 100644
--- a/3party/boost/boost/test/utils/runtime/cla/value_handler.hpp
+++ b/3party/boost/boost/test/utils/runtime/cla/value_handler.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : specific value handlers
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/config.hpp b/3party/boost/boost/test/utils/runtime/config.hpp
index 3f3ede8fe0..771a8ee7af 100644
--- a/3party/boost/boost/test/utils/runtime/config.hpp
+++ b/3party/boost/boost/test/utils/runtime/config.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : Runtime.Param library configuration
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/configuration.hpp b/3party/boost/boost/test/utils/runtime/configuration.hpp
index 0ca5cf7dec..4c133bdea2 100644
--- a/3party/boost/boost/test/utils/runtime/configuration.hpp
+++ b/3party/boost/boost/test/utils/runtime/configuration.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : abstract interface for the formal parameter
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/env/environment.cpp b/3party/boost/boost/test/utils/runtime/env/environment.cpp
index a710c21711..a7a0fdf0c2 100644
--- a/3party/boost/boost/test/utils/runtime/env/environment.cpp
+++ b/3party/boost/boost/test/utils/runtime/env/environment.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : implements offline model of program environment
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/env/environment.hpp b/3party/boost/boost/test/utils/runtime/env/environment.hpp
index f5e88a26cd..f3170ff53a 100644
--- a/3party/boost/boost/test/utils/runtime/env/environment.hpp
+++ b/3party/boost/boost/test/utils/runtime/env/environment.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : defines and implements inline model of program environment
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/env/environment.ipp b/3party/boost/boost/test/utils/runtime/env/environment.ipp
index 0a4afe87c6..5a320003f7 100644
--- a/3party/boost/boost/test/utils/runtime/env/environment.ipp
+++ b/3party/boost/boost/test/utils/runtime/env/environment.ipp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : implements model of program environment
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/env/fwd.hpp b/3party/boost/boost/test/utils/runtime/env/fwd.hpp
index 0808d0eab0..dff5dfd299 100644
--- a/3party/boost/boost/test/utils/runtime/env/fwd.hpp
+++ b/3party/boost/boost/test/utils/runtime/env/fwd.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : environment subsystem forward declarations
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/env/modifier.hpp b/3party/boost/boost/test/utils/runtime/env/modifier.hpp
index 4204d0be88..cdd6be908f 100644
--- a/3party/boost/boost/test/utils/runtime/env/modifier.hpp
+++ b/3party/boost/boost/test/utils/runtime/env/modifier.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines variable modifiers
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/env/variable.hpp b/3party/boost/boost/test/utils/runtime/env/variable.hpp
index 2eb038e35c..8e8b0a0737 100644
--- a/3party/boost/boost/test/utils/runtime/env/variable.hpp
+++ b/3party/boost/boost/test/utils/runtime/env/variable.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 81913 $
+// Version : $Revision$
//
// Description : defines model of program environment variable
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/file/config_file.cpp b/3party/boost/boost/test/utils/runtime/file/config_file.cpp
index f17fef53d6..d369d79504 100644
--- a/3party/boost/boost/test/utils/runtime/file/config_file.cpp
+++ b/3party/boost/boost/test/utils/runtime/file/config_file.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : implements models configuration file, it's parameter and parameter namespaces
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/file/config_file.hpp b/3party/boost/boost/test/utils/runtime/file/config_file.hpp
index 9dac6cfaf5..f9c71b8138 100644
--- a/3party/boost/boost/test/utils/runtime/file/config_file.hpp
+++ b/3party/boost/boost/test/utils/runtime/file/config_file.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines models configuration file, it's parameter and parameter namespaces
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/file/config_file_iterator.cpp b/3party/boost/boost/test/utils/runtime/file/config_file_iterator.cpp
index 18a652474e..a81a0c83e5 100644
--- a/3party/boost/boost/test/utils/runtime/file/config_file_iterator.cpp
+++ b/3party/boost/boost/test/utils/runtime/file/config_file_iterator.cpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 54633 $
+// Version : $Revision$
//
// Description : flexible configuration file iterator implementation
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/file/config_file_iterator.hpp b/3party/boost/boost/test/utils/runtime/file/config_file_iterator.hpp
index 85467f66ab..23d4a94f22 100644
--- a/3party/boost/boost/test/utils/runtime/file/config_file_iterator.hpp
+++ b/3party/boost/boost/test/utils/runtime/file/config_file_iterator.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : flexible configuration file iterator definition
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/fwd.hpp b/3party/boost/boost/test/utils/runtime/fwd.hpp
index 8d298d7220..aafdf69d17 100644
--- a/3party/boost/boost/test/utils/runtime/fwd.hpp
+++ b/3party/boost/boost/test/utils/runtime/fwd.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : global framework level forward declaration
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/interpret_argument_value.hpp b/3party/boost/boost/test/utils/runtime/interpret_argument_value.hpp
index cbf752dd5b..f767e7a29b 100644
--- a/3party/boost/boost/test/utils/runtime/interpret_argument_value.hpp
+++ b/3party/boost/boost/test/utils/runtime/interpret_argument_value.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : default algorithms for string to specific type convertions
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/parameter.hpp b/3party/boost/boost/test/utils/runtime/parameter.hpp
index 9baf561ca5..b914a9b4e5 100644
--- a/3party/boost/boost/test/utils/runtime/parameter.hpp
+++ b/3party/boost/boost/test/utils/runtime/parameter.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : abstract interface for the formal parameter
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/trace.hpp b/3party/boost/boost/test/utils/runtime/trace.hpp
index ba15eb6341..5c4e2a7c05 100644
--- a/3party/boost/boost/test/utils/runtime/trace.hpp
+++ b/3party/boost/boost/test/utils/runtime/trace.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : optional internal tracing
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/runtime/validation.hpp b/3party/boost/boost/test/utils/runtime/validation.hpp
index ff8e4691db..bcfbc9f062 100644
--- a/3party/boost/boost/test/utils/runtime/validation.hpp
+++ b/3party/boost/boost/test/utils/runtime/validation.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : defines exceptions and validation tools
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/trivial_singleton.hpp b/3party/boost/boost/test/utils/trivial_singleton.hpp
index 1ce7797778..61cca97e00 100644
--- a/3party/boost/boost/test/utils/trivial_singleton.hpp
+++ b/3party/boost/boost/test/utils/trivial_singleton.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : simple helpers for creating cusom output manipulators
// ***************************************************************************
diff --git a/3party/boost/boost/test/utils/wrap_stringstream.hpp b/3party/boost/boost/test/utils/wrap_stringstream.hpp
index a3eaff1c8c..d1122c8ca8 100644
--- a/3party/boost/boost/test/utils/wrap_stringstream.hpp
+++ b/3party/boost/boost/test/utils/wrap_stringstream.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 49312 $
+// Version : $Revision$
//
// Description : wraps strstream and stringstream (depends with one is present)
// to provide the unified interface
diff --git a/3party/boost/boost/test/utils/xml_printer.hpp b/3party/boost/boost/test/utils/xml_printer.hpp
index 7fd851d520..ae73cce105 100644
--- a/3party/boost/boost/test/utils/xml_printer.hpp
+++ b/3party/boost/boost/test/utils/xml_printer.hpp
@@ -7,7 +7,7 @@
//
// File : $RCSfile$
//
-// Version : $Revision: 57992 $
+// Version : $Revision$
//
// Description : common code used by any agent serving as XML printer
// ***************************************************************************
diff --git a/3party/boost/boost/thread/barrier.hpp b/3party/boost/boost/thread/barrier.hpp
index ec467ba8af..acf0a011fb 100644
--- a/3party/boost/boost/thread/barrier.hpp
+++ b/3party/boost/boost/thread/barrier.hpp
@@ -1,6 +1,7 @@
// Copyright (C) 2002-2003
// David Moore, William E. Kempf
// Copyright (C) 2007-8 Anthony Williams
+// (C) Copyright 2013 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)
@@ -17,51 +18,228 @@
#include <boost/thread/condition_variable.hpp>
#include <string>
#include <stdexcept>
+#include <boost/thread/detail/nullary_function.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/core/enable_if.hpp>
+#include <boost/utility/result_of.hpp>
#include <boost/config/abi_prefix.hpp>
namespace boost
{
+ namespace thread_detail
+ {
+ typedef detail::nullary_function<void()> void_completion_function;
+ typedef detail::nullary_function<size_t()> size_completion_function;
- class barrier
+ struct default_barrier_reseter
{
- public:
- BOOST_THREAD_NO_COPYABLE( barrier )
-
- barrier(unsigned int count)
- : m_threshold(count), m_count(count), m_generation(0)
- {
- if (count == 0)
- boost::throw_exception(thread_exception(system::errc::invalid_argument, "barrier constructor: count cannot be zero."));
- }
-
- bool wait()
- {
- boost::unique_lock<boost::mutex> lock(m_mutex);
- unsigned int gen = m_generation;
-
- if (--m_count == 0)
- {
- m_generation++;
- m_count = m_threshold;
- m_cond.notify_all();
- return true;
- }
-
- while (gen == m_generation)
- m_cond.wait(lock);
- return false;
- }
-
- private:
- mutex m_mutex;
- condition_variable m_cond;
- unsigned int m_threshold;
- unsigned int m_count;
- unsigned int m_generation;
+ unsigned int size_;
+ default_barrier_reseter(unsigned int size) :
+ size_(size)
+ {
+ }
+ BOOST_THREAD_MOVABLE(default_barrier_reseter)
+
+ default_barrier_reseter(default_barrier_reseter const& other) BOOST_NOEXCEPT :
+ size_(other.size_)
+ {
+ }
+ default_barrier_reseter(BOOST_THREAD_RV_REF(default_barrier_reseter) other) BOOST_NOEXCEPT :
+ size_(BOOST_THREAD_RV(other).size_)
+ {
+ }
+
+ unsigned int operator()()
+ {
+ return size_;
+ }
};
-} // namespace boost
+ struct void_functor_barrier_reseter
+ {
+ unsigned int size_;
+ void_completion_function fct_;
+ template <typename F>
+ void_functor_barrier_reseter(unsigned int size, BOOST_THREAD_RV_REF(F) funct)
+ : size_(size), fct_(boost::move(funct))
+ {}
+ template <typename F>
+ void_functor_barrier_reseter(unsigned int size, F& funct)
+ : size_(size), fct_(funct)
+ {}
+
+ BOOST_THREAD_MOVABLE(void_functor_barrier_reseter)
+
+ void_functor_barrier_reseter(void_functor_barrier_reseter const& other) BOOST_NOEXCEPT :
+ size_(other.size_), fct_(other.fct_)
+ {
+ }
+ void_functor_barrier_reseter(BOOST_THREAD_RV_REF(void_functor_barrier_reseter) other) BOOST_NOEXCEPT :
+ size_(BOOST_THREAD_RV(other).size_), fct_(BOOST_THREAD_RV(other).fct_)
+ {
+ }
+
+ unsigned int operator()()
+ {
+ fct_();
+ return size_;
+ }
+ };
+ struct void_fct_ptr_barrier_reseter
+ {
+ unsigned int size_;
+ void(*fct_)();
+ void_fct_ptr_barrier_reseter(unsigned int size, void(*funct)()) :
+ size_(size), fct_(funct)
+ {
+ }
+ BOOST_THREAD_MOVABLE(void_fct_ptr_barrier_reseter)
+
+ void_fct_ptr_barrier_reseter(void_fct_ptr_barrier_reseter const& other) BOOST_NOEXCEPT :
+ size_(other.size_), fct_(other.fct_)
+ {
+ }
+ void_fct_ptr_barrier_reseter(BOOST_THREAD_RV_REF(void_fct_ptr_barrier_reseter) other) BOOST_NOEXCEPT :
+ size_(BOOST_THREAD_RV(other).size_), fct_(BOOST_THREAD_RV(other).fct_)
+ {
+ }
+ unsigned int operator()()
+ {
+ fct_();
+ return size_;
+ }
+ };
+ }
+ class barrier
+ {
+ static inline unsigned int check_counter(unsigned int count)
+ {
+ if (count == 0) boost::throw_exception(
+ thread_exception(system::errc::invalid_argument, "barrier constructor: count cannot be zero."));
+ return count;
+ }
+ struct dummy
+ {
+ };
+
+ public:
+ BOOST_THREAD_NO_COPYABLE( barrier)
+
+ explicit barrier(unsigned int count) :
+ m_count(check_counter(count)), m_generation(0), fct_(BOOST_THREAD_MAKE_RV_REF(thread_detail::default_barrier_reseter(count)))
+ {
+ }
+
+ template <typename F>
+ barrier(
+ unsigned int count,
+ BOOST_THREAD_RV_REF(F) funct,
+ typename enable_if<
+ typename is_void<typename result_of<F>::type>::type, dummy*
+ >::type=0
+ )
+ : m_count(check_counter(count)),
+ m_generation(0),
+ fct_(BOOST_THREAD_MAKE_RV_REF(thread_detail::void_functor_barrier_reseter(count,
+ boost::move(funct)))
+ )
+ {
+ }
+ template <typename F>
+ barrier(
+ unsigned int count,
+ F &funct,
+ typename enable_if<
+ typename is_void<typename result_of<F>::type>::type, dummy*
+ >::type=0
+ )
+ : m_count(check_counter(count)),
+ m_generation(0),
+ fct_(BOOST_THREAD_MAKE_RV_REF(thread_detail::void_functor_barrier_reseter(count,
+ funct))
+ )
+ {
+ }
+
+ template <typename F>
+ barrier(
+ unsigned int count,
+ BOOST_THREAD_RV_REF(F) funct,
+ typename enable_if<
+ typename is_same<typename result_of<F>::type, unsigned int>::type, dummy*
+ >::type=0
+ )
+ : m_count(check_counter(count)),
+ m_generation(0),
+ fct_(boost::move(funct))
+ {
+ }
+ template <typename F>
+ barrier(
+ unsigned int count,
+ F& funct,
+ typename enable_if<
+ typename is_same<typename result_of<F>::type, unsigned int>::type, dummy*
+ >::type=0
+ )
+ : m_count(check_counter(count)),
+ m_generation(0),
+ fct_(funct)
+ {
+ }
+
+ barrier(unsigned int count, void(*funct)()) :
+ m_count(check_counter(count)), m_generation(0),
+ fct_(funct
+ ? BOOST_THREAD_MAKE_RV_REF(thread_detail::size_completion_function(BOOST_THREAD_MAKE_RV_REF(thread_detail::void_fct_ptr_barrier_reseter(count, funct))))
+ : BOOST_THREAD_MAKE_RV_REF(thread_detail::size_completion_function(BOOST_THREAD_MAKE_RV_REF(thread_detail::default_barrier_reseter(count))))
+ )
+ {
+ }
+ barrier(unsigned int count, unsigned int(*funct)()) :
+ m_count(check_counter(count)), m_generation(0),
+ fct_(funct
+ ? BOOST_THREAD_MAKE_RV_REF(thread_detail::size_completion_function(funct))
+ : BOOST_THREAD_MAKE_RV_REF(thread_detail::size_completion_function(BOOST_THREAD_MAKE_RV_REF(thread_detail::default_barrier_reseter(count))))
+ )
+ {
+ }
+
+ bool wait()
+ {
+ boost::unique_lock < boost::mutex > lock(m_mutex);
+ unsigned int gen = m_generation;
+
+ if (--m_count == 0)
+ {
+ m_generation++;
+ m_count = static_cast<unsigned int>(fct_());
+ BOOST_ASSERT(m_count != 0);
+ m_cond.notify_all();
+ return true;
+ }
+
+ while (gen == m_generation)
+ m_cond.wait(lock);
+ return false;
+ }
+
+ void count_down_and_wait()
+ {
+ wait();
+ }
+
+ private:
+ mutex m_mutex;
+ condition_variable m_cond;
+ unsigned int m_count;
+ unsigned int m_generation;
+ thread_detail::size_completion_function fct_;
+ };
+
+} // namespace boost
#include <boost/config/abi_suffix.hpp>
diff --git a/3party/boost/boost/thread/caller_context.hpp b/3party/boost/boost/thread/caller_context.hpp
new file mode 100644
index 0000000000..1e341686b0
--- /dev/null
+++ b/3party/boost/boost/thread/caller_context.hpp
@@ -0,0 +1,56 @@
+// (C) Copyright 2013 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)
+
+
+#ifndef BOOST_THREAD_CALL_CONTEXT_HPP
+#define BOOST_THREAD_CALL_CONTEXT_HPP
+
+#include <boost/thread/detail/config.hpp>
+#if defined BOOST_THREAD_USES_LOG_THREAD_ID
+#include <boost/thread/thread.hpp>
+#endif
+#include <boost/current_function.hpp>
+#include <iomanip>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+
+ struct caller_context_t
+ {
+ const char * filename;
+ unsigned lineno;
+ const char * func;
+ caller_context_t(const char * filename, unsigned lineno, const char * func) :
+ filename(filename), lineno(lineno), func(func)
+ {
+ }
+ };
+
+#define BOOST_CONTEXTOF boost::caller_context_t(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION)
+
+ template <typename OStream>
+ OStream& operator<<(OStream& os, caller_context_t const& ctx)
+ {
+#if defined BOOST_THREAD_USES_LOG_THREAD_ID
+ {
+ io::ios_flags_saver ifs( os );
+ os << std::left << std::setw(14) << boost::this_thread::get_id() << " ";
+ }
+#endif
+ {
+ io::ios_flags_saver ifs(os);
+ os << ctx.filename << "["
+ << std::setw(4) << std::right << std::dec<< ctx.lineno << "] ";
+ os << ctx.func << " " ;
+ }
+ return os;
+ }
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif // header
diff --git a/3party/boost/boost/thread/completion_latch.hpp b/3party/boost/boost/thread/completion_latch.hpp
index ecc56543aa..ea76474276 100644
--- a/3party/boost/boost/thread/completion_latch.hpp
+++ b/3party/boost/boost/thread/completion_latch.hpp
@@ -16,12 +16,8 @@
#include <boost/chrono/duration.hpp>
#include <boost/chrono/time_point.hpp>
#include <boost/assert.hpp>
-#ifdef BOOST_NO_CXX11_HDR_FUNCTIONAL
-#include <boost/function.hpp>
-#else
-#include <functional>
-#endif
-//#include <boost/thread/latch.hpp>
+//#include <boost/thread/detail/nullary_function.hpp>
+#include <boost/thread/csbl/functional.hpp>
#include <boost/config/abi_prefix.hpp>
@@ -37,11 +33,8 @@ namespace boost
{
public:
/// the implementation defined completion function type
-#ifdef BOOST_NO_CXX11_HDR_FUNCTIONAL
- typedef function<void()> completion_function;
-#else
- typedef std::function<void()> completion_function;
-#endif
+ //typedef detail::nullary_function<void()> completion_function;
+ typedef csbl::function<void()> completion_function;
/// noop completion function factory
static completion_function noop()
{
diff --git a/3party/boost/boost/thread/csbl/deque.hpp b/3party/boost/boost/thread/csbl/deque.hpp
new file mode 100644
index 0000000000..336af707fa
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/deque.hpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_DEQUE_HPP
+#define BOOST_CSBL_DEQUE_HPP
+
+#include <boost/config.hpp>
+
+#if defined BOOST_THREAD_USES_BOOST_DEQUE || defined BOOST_NO_CXX11_HDR_DEQUE || defined BOOST_NO_CXX11_RVALUE_REFERENCES
+#ifndef BOOST_THREAD_USES_BOOST_DEQUE
+#define BOOST_THREAD_USES_BOOST_DEQUE
+#endif
+#include <boost/container/deque.hpp>
+#else
+#include <deque>
+#endif
+
+namespace boost
+{
+ namespace csbl
+ {
+#if defined BOOST_THREAD_USES_BOOST_DEQUE
+ using ::boost::container::deque;
+
+#else
+ using ::std::deque;
+
+#endif
+
+ }
+}
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/functional.hpp b/3party/boost/boost/thread/csbl/functional.hpp
new file mode 100644
index 0000000000..7a7e928b70
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/functional.hpp
@@ -0,0 +1,49 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_FUNCTIONAL_HPP
+#define BOOST_CSBL_FUNCTIONAL_HPP
+
+#include <boost/config.hpp>
+
+#include <functional>
+
+#if defined BOOST_THREAD_USES_BOOST_FUNCTIONAL || defined BOOST_NO_CXX11_HDR_FUNCTIONAL || defined BOOST_NO_CXX11_RVALUE_REFERENCES
+#ifndef BOOST_THREAD_USES_BOOST_FUNCTIONAL
+#define BOOST_THREAD_USES_BOOST_FUNCTIONAL
+#endif
+#include <boost/function.hpp>
+#endif
+
+namespace boost
+{
+ namespace csbl
+ {
+#if defined BOOST_THREAD_USES_BOOST_FUNCTIONAL
+ using ::boost::function;
+#else
+ // D.8.1, base (deprecated):
+ // 20.9.3, reference_wrapper:
+ // 20.9.4, arithmetic operations:
+ // 20.9.5, comparisons:
+ // 20.9.6, logical operations:
+ // 20.9.7, bitwise operations:
+ // 20.9.8, negators:
+ // 20.9.9, bind:
+ // D.9, binders (deprecated):
+ // D.8.2.1, adaptors (deprecated):
+ // D.8.2.2, adaptors (deprecated):
+ // 20.9.10, member function adaptors:
+ // 20.9.11 polymorphic function wrappers:
+ using ::std::function;
+ // 20.9.12, hash function primary template:
+#endif
+
+ }
+}
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/list.hpp b/3party/boost/boost/thread/csbl/list.hpp
new file mode 100644
index 0000000000..c7f10a18d5
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/list.hpp
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_LIST_HPP
+#define BOOST_CSBL_LIST_HPP
+
+#include <boost/config.hpp>
+
+#if defined BOOST_THREAD_USES_BOOST_LIST || defined BOOST_NO_CXX11_HDR_LIST || defined BOOST_NO_CXX11_RVALUE_REFERENCES
+#ifndef BOOST_THREAD_USES_BOOST_LIST
+#define BOOST_THREAD_USES_BOOST_LIST
+#endif
+#include <boost/container/list.hpp>
+#else
+#include <list>
+#endif
+
+namespace boost
+{
+ namespace csbl
+ {
+#if defined BOOST_THREAD_USES_BOOST_LIST
+ using ::boost::container::list;
+#else
+ using ::std::list;
+#endif
+
+ }
+}
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/memory.hpp b/3party/boost/boost/thread/csbl/memory.hpp
new file mode 100644
index 0000000000..e076f11ad3
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/memory.hpp
@@ -0,0 +1,61 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_MEMORY_HPP
+#define BOOST_CSBL_MEMORY_HPP
+
+// 20.7.2 Header <memory> synopsis
+
+// 20.7.3, pointer traits
+#include <boost/thread/csbl/memory/pointer_traits.hpp>
+
+// 20.7.4, pointer safety
+// 20.7.5, pointer alignment function
+
+// 20.7.6, allocator argument tag
+#include <boost/thread/csbl/memory/allocator_arg.hpp>
+
+// 20.7.8, allocator traits
+#include <boost/thread/csbl/memory/allocator_traits.hpp>
+
+// 20.7.7, uses_allocator
+#include <boost/thread/csbl/memory/scoped_allocator.hpp>
+
+// 20.7.9, the default allocator:
+namespace boost
+{
+ namespace csbl
+ {
+ using ::std::allocator;
+ }
+}
+// 20.7.10, raw storage iterator:
+// 20.7.11, temporary buffers:
+// 20.7.12, specialized algorithms:
+
+// 20.8.1 class template unique_ptr:
+// default_delete
+#include <boost/thread/csbl/memory/default_delete.hpp>
+#include <boost/thread/csbl/memory/unique_ptr.hpp>
+
+// 20.8.2.1, class bad_weak_ptr:
+// 20.8.2.2, class template shared_ptr:
+// 20.8.2.2.6, shared_ptr creation
+// 20.8.2.2.7, shared_ptr comparisons:
+// 20.8.2.2.8, shared_ptr specialized algorithms:
+// 20.8.2.2.9, shared_ptr casts:
+// 20.8.2.2.10, shared_ptr get_deleter:
+// 20.8.2.2.11, shared_ptr I/O:
+// 20.8.2.3, class template weak_ptr:
+// 20.8.2.3.6, weak_ptr specialized algorithms:
+// 20.8.2.3.7, class template owner_less:
+// 20.8.2.4, class template enable_shared_from_this:
+// 20.8.2.5, shared_ptr atomic access:
+// 20.8.2.6 hash support
+
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/memory/allocator_arg.hpp b/3party/boost/boost/thread/csbl/memory/allocator_arg.hpp
new file mode 100644
index 0000000000..354cdaee88
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/memory/allocator_arg.hpp
@@ -0,0 +1,41 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_MEMORY_ALLOCATOR_ARG_HPP
+#define BOOST_CSBL_MEMORY_ALLOCATOR_ARG_HPP
+
+#include <boost/thread/csbl/memory/config.hpp>
+
+// 20.7.6, allocator argument tag
+#if defined BOOST_NO_CXX11_ALLOCATOR
+#include <boost/container/scoped_allocator.hpp>
+
+namespace boost
+{
+ namespace csbl
+ {
+ using ::boost::container::allocator_arg_t;
+ using ::boost::container::allocator_arg;
+ }
+}
+#else
+namespace boost
+{
+ namespace csbl
+ {
+ using ::std::allocator_arg_t;
+ using ::std::allocator_arg;
+ }
+}
+#endif // BOOST_NO_CXX11_ALLOCATOR
+namespace boost
+{
+ using ::boost::csbl::allocator_arg_t;
+ using ::boost::csbl::allocator_arg;
+}
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/memory/allocator_traits.hpp b/3party/boost/boost/thread/csbl/memory/allocator_traits.hpp
new file mode 100644
index 0000000000..3737cd85de
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/memory/allocator_traits.hpp
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_MEMORY_ALLOCATOR_TRAITS_HPP
+#define BOOST_CSBL_MEMORY_ALLOCATOR_TRAITS_HPP
+
+#include <boost/thread/csbl/memory/config.hpp>
+
+// 20.7.8, allocator traits
+#if defined BOOST_NO_CXX11_ALLOCATOR
+#include <boost/container/allocator_traits.hpp>
+
+namespace boost
+{
+ namespace csbl
+ {
+ using ::boost::container::allocator_traits;
+ }
+}
+#else
+namespace boost
+{
+ namespace csbl
+ {
+ using ::std::allocator_traits;
+ }
+}
+#endif // BOOST_NO_CXX11_POINTER_TRAITS
+
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/memory/config.hpp b/3party/boost/boost/thread/csbl/memory/config.hpp
new file mode 100644
index 0000000000..7b0596ac49
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/memory/config.hpp
@@ -0,0 +1,16 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_MEMORY_CONFIG_HPP
+#define BOOST_CSBL_MEMORY_CONFIG_HPP
+
+#include <boost/config.hpp>
+
+#include <memory>
+
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/memory/default_delete.hpp b/3party/boost/boost/thread/csbl/memory/default_delete.hpp
new file mode 100644
index 0000000000..85858d7c76
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/memory/default_delete.hpp
@@ -0,0 +1,125 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_MEMORY_DEFAULT_DELETE_HPP
+#define BOOST_CSBL_MEMORY_DEFAULT_DELETE_HPP
+
+#include <boost/thread/csbl/memory/config.hpp>
+
+// 20.8.1 class template unique_ptr:
+// default_delete
+
+#if defined BOOST_NO_CXX11_SMART_PTR
+#include <boost/thread/csbl/memory/pointer_traits.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost
+{
+ namespace csbl
+ {
+ namespace detail
+ {
+
+ template <class _Ptr1, class _Ptr2,
+ bool = is_same<typename remove_cv<typename pointer_traits<_Ptr1>::element_type>::type,
+ typename remove_cv<typename pointer_traits<_Ptr2>::element_type>::type
+ >::value
+ >
+ struct same_or_less_cv_qualified_imp
+ : is_convertible<_Ptr1, _Ptr2>
+ {};
+
+ template <class _Ptr1, class _Ptr2>
+ struct same_or_less_cv_qualified_imp<_Ptr1, _Ptr2, false>
+ : false_type
+ {};
+
+ template <class _Ptr1, class _Ptr2, bool = is_scalar<_Ptr1>::value &&
+ !is_pointer<_Ptr1>::value>
+ struct same_or_less_cv_qualified
+ : same_or_less_cv_qualified_imp<_Ptr1, _Ptr2>
+ {};
+
+ template <class _Ptr1, class _Ptr2>
+ struct same_or_less_cv_qualified<_Ptr1, _Ptr2, true>
+ : false_type
+ {};
+
+ }
+ template <class T>
+ 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 <class U>
+ BOOST_SYMBOL_VISIBLE
+ default_delete(const default_delete<U>&,
+ typename enable_if<is_convertible<U*, T*> >::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 <class T>
+ struct BOOST_SYMBOL_VISIBLE default_delete<T[]>
+ {
+ 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 <class U>
+ BOOST_SYMBOL_VISIBLE
+ default_delete(const default_delete<U[]>&,
+ typename enable_if<detail::same_or_less_cv_qualified<U*, T*> >::type* = 0) BOOST_NOEXCEPT
+ {}
+ template <class U>
+ BOOST_SYMBOL_VISIBLE
+ void operator() (U* ptr,
+ typename enable_if<detail::same_or_less_cv_qualified<U*, T*> >::type* = 0) const BOOST_NOEXCEPT
+ {
+ BOOST_STATIC_ASSERT_MSG(sizeof(T) > 0, "default_delete can not delete incomplete type");
+ delete [] ptr;
+ }
+ };
+ }
+}
+#else
+namespace boost
+{
+ namespace csbl
+ {
+ using ::std::default_delete;
+ }
+}
+#endif // defined BOOST_NO_CXX11_SMART_PTR
+
+namespace boost
+{
+ using ::boost::csbl::default_delete;
+}
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/memory/pointer_traits.hpp b/3party/boost/boost/thread/csbl/memory/pointer_traits.hpp
new file mode 100644
index 0000000000..320f8e9e77
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/memory/pointer_traits.hpp
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_MEMORY_POINTER_TRAITS_HPP
+#define BOOST_CSBL_MEMORY_POINTER_TRAITS_HPP
+
+#include <boost/thread/csbl/memory/config.hpp>
+
+// 20.7.3, pointer traits
+#if defined BOOST_NO_CXX11_ALLOCATOR
+#include <boost/intrusive/pointer_traits.hpp>
+
+namespace boost
+{
+ namespace csbl
+ {
+ using ::boost::intrusive::pointer_traits;
+ }
+}
+#else
+namespace boost
+{
+ namespace csbl
+ {
+ using ::std::pointer_traits;
+ }
+}
+#endif // BOOST_NO_CXX11_ALLOCATOR
+
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/memory/scoped_allocator.hpp b/3party/boost/boost/thread/csbl/memory/scoped_allocator.hpp
new file mode 100644
index 0000000000..a92f3d8514
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/memory/scoped_allocator.hpp
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_MEMORY_SCOPED_ALLOCATOR_HPP
+#define BOOST_CSBL_MEMORY_SCOPED_ALLOCATOR_HPP
+
+#include <boost/thread/csbl/memory/config.hpp>
+
+// 20.7.7, uses_allocator
+#if defined BOOST_NO_CXX11_ALLOCATOR
+#include <boost/container/scoped_allocator.hpp>
+
+namespace boost
+{
+ namespace csbl
+ {
+ using ::boost::container::uses_allocator;
+ }
+}
+#else
+namespace boost
+{
+ namespace csbl
+ {
+ using ::std::uses_allocator;
+ }
+}
+#endif // BOOST_NO_CXX11_POINTER_TRAITS
+
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/memory/unique_ptr.hpp b/3party/boost/boost/thread/csbl/memory/unique_ptr.hpp
new file mode 100644
index 0000000000..eb272e4ec8
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/memory/unique_ptr.hpp
@@ -0,0 +1,106 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_MEMORY_UNIQUE_PTR_HPP
+#define BOOST_CSBL_MEMORY_UNIQUE_PTR_HPP
+
+#include <boost/thread/csbl/memory/config.hpp>
+
+// 20.8.1 class template unique_ptr:
+#if defined BOOST_NO_CXX11_SMART_PTR
+#include <boost/thread/csbl/memory/default_delete.hpp>
+
+#include <boost/interprocess/smart_ptr/unique_ptr.hpp>
+
+namespace boost
+{
+ namespace csbl
+ {
+ template <class T, class D = default_delete<T> > class unique_ptr :
+ public ::boost::interprocess::unique_ptr<T,D>
+ {
+ typedef ::boost::interprocess::unique_ptr<T,D> base_type;
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(unique_ptr)
+ protected:
+ //typedef typename base_type::nat nat;
+ //typedef typename base_type::nullptr_t nullptr_t;
+ struct nat {int for_bool;};
+ struct nat2 {int for_nullptr;};
+ typedef int nat2::*nullptr_t;
+
+ public:
+ typedef typename base_type::element_type element_type;
+ typedef typename base_type::deleter_type deleter_type;
+ typedef typename base_type::pointer pointer;
+
+ unique_ptr() : base_type()
+ {}
+ explicit unique_ptr(pointer p): base_type(p)
+ {}
+ unique_ptr(pointer p
+ ,typename interprocess::ipcdetail::if_<interprocess::ipcdetail::is_reference<D>
+ ,D
+ ,typename interprocess::ipcdetail::add_reference<const D>::type>::type d)
+ : base_type(p, d)
+ {}
+ unique_ptr(BOOST_RV_REF(unique_ptr) u)
+ : base_type(boost::move(static_cast<base_type&>(u)))
+ {}
+ template <class U, class E>
+ unique_ptr(BOOST_RV_REF_BEG unique_ptr<U, E> BOOST_RV_REF_END u,
+ typename interprocess::ipcdetail::enable_if_c<
+ interprocess::ipcdetail::is_convertible<typename unique_ptr<U, E>::pointer, pointer>::value &&
+ interprocess::ipcdetail::is_convertible<E, D>::value &&
+ (
+ !interprocess::ipcdetail::is_reference<D>::value ||
+ interprocess::ipcdetail::is_same<D, E>::value
+ )
+ ,
+ nat
+ >::type = nat())
+ : base_type(boost::move(static_cast< ::boost::interprocess::unique_ptr<U,E>&>(u)))
+ {}
+ unique_ptr& operator=(BOOST_RV_REF(unique_ptr) u)
+ {
+ this->base_type::operator=(boost::move(static_cast<base_type&>(u)));
+ return *this;
+ }
+ template <class U, class E>
+ unique_ptr& operator=(BOOST_RV_REF_BEG unique_ptr<U, E> BOOST_RV_REF_END u)
+ {
+ this->base_type::template operator=<U,E>(boost::move(static_cast< ::boost::interprocess::unique_ptr<U,E>&>(u)));
+ return *this;
+ }
+ unique_ptr& operator=(nullptr_t t)
+ {
+ this->base_type::operator=(t);
+ return *this;
+ }
+ void swap(unique_ptr& u)
+ {
+ this->base_type::swap(u);
+ }
+ };
+ template <class T, class D>
+ class unique_ptr<T[], D> :
+ public ::boost::interprocess::unique_ptr<T[],D>
+ {
+
+ };
+ }
+}
+#else
+namespace boost
+{
+ namespace csbl
+ {
+ using ::std::unique_ptr;
+ }
+}
+#endif // BOOST_NO_CXX11_SMART_PTR
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/tuple.hpp b/3party/boost/boost/thread/csbl/tuple.hpp
new file mode 100644
index 0000000000..146d1c19fe
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/tuple.hpp
@@ -0,0 +1,45 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_TUPLE_HPP
+#define BOOST_CSBL_TUPLE_HPP
+
+#include <boost/config.hpp>
+
+#if defined BOOST_THREAD_USES_BOOST_TUPLE || defined BOOST_NO_CXX11_HDR_TUPLE || defined BOOST_NO_CXX11_RVALUE_REFERENCES
+#include <boost/tuple/tuple.hpp>
+#ifndef BOOST_THREAD_USES_BOOST_TUPLE
+#define BOOST_THREAD_USES_BOOST_TUPLE
+#endif
+
+#else
+#include <tuple>
+#endif
+
+namespace boost
+{
+ namespace csbl
+ {
+#if defined BOOST_THREAD_USES_BOOST_TUPLE
+ using ::boost::tuple;
+ using ::boost::get;
+#else
+ // 20.4.2, class template tuple:
+ using ::std::tuple;
+ using ::std::get;
+ // 20.4.2.4, tuple creation functions:
+ // 20.4.2.5, tuple helper classes:
+ // 20.4.2.6, element access:
+ // 20.4.2.7, relational operators:
+ // 20.4.2.8, allocator-related traits
+ // 20.4.2.9, specialized algorithms:
+#endif
+
+ }
+}
+#endif // header
diff --git a/3party/boost/boost/thread/csbl/vector.hpp b/3party/boost/boost/thread/csbl/vector.hpp
new file mode 100644
index 0000000000..d39c87d114
--- /dev/null
+++ b/3party/boost/boost/thread/csbl/vector.hpp
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 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)
+//
+// 2013/10 Vicente J. Botet Escriba
+// Creation.
+
+#ifndef BOOST_CSBL_VECTOR_HPP
+#define BOOST_CSBL_VECTOR_HPP
+
+#include <boost/config.hpp>
+
+#if defined BOOST_THREAD_USES_BOOST_VECTOR || defined BOOST_NO_CXX11_HDR_VECTOR || defined BOOST_NO_CXX11_RVALUE_REFERENCES
+#ifndef BOOST_THREAD_USES_BOOST_VECTOR
+#define BOOST_THREAD_USES_BOOST_VECTOR
+#endif
+#include <boost/container/vector.hpp>
+#else
+#include <vector>
+#endif
+
+namespace boost
+{
+ namespace csbl
+ {
+#if defined BOOST_THREAD_USES_BOOST_VECTOR
+ using ::boost::container::vector;
+#else
+ using ::std::vector;
+#endif
+
+ }
+}
+#endif // header
diff --git a/3party/boost/boost/thread/cv_status.hpp b/3party/boost/boost/thread/cv_status.hpp
index 99b3c0c218..e52de4a522 100644
--- a/3party/boost/boost/thread/cv_status.hpp
+++ b/3party/boost/boost/thread/cv_status.hpp
@@ -9,7 +9,7 @@
#ifndef BOOST_THREAD_CV_STATUS_HPP
#define BOOST_THREAD_CV_STATUS_HPP
-#include <boost/detail/scoped_enum_emulation.hpp>
+#include <boost/core/scoped_enum.hpp>
namespace boost
{
diff --git a/3party/boost/boost/thread/detail/async_func.hpp b/3party/boost/boost/thread/detail/async_func.hpp
deleted file mode 100644
index 122fdd664b..0000000000
--- a/3party/boost/boost/thread/detail/async_func.hpp
+++ /dev/null
@@ -1,571 +0,0 @@
-// Copyright (C) 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)
-
-// 2013/04 Vicente J. Botet Escriba
-// Provide implementation up to 9 parameters when BOOST_NO_CXX11_VARIADIC_TEMPLATES is defined.
-// Make use of Boost.Move
-// Make use of Boost.Tuple (movable)
-// 2012/11 Vicente J. Botet Escriba
-// Adapt to boost libc++ implementation
-
-//===----------------------------------------------------------------------===//
-//
-// 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.
-//
-// The async_func code is based on the one from libcxx.
-//===----------------------------------------------------------------------===//
-
-#ifndef BOOST_THREAD_DETAIL_ASYNC_FUNCT_HPP
-#define BOOST_THREAD_DETAIL_ASYNC_FUNCT_HPP
-
-#include <boost/config.hpp>
-
-#include <boost/utility/result_of.hpp>
-#include <boost/thread/detail/move.hpp>
-#include <boost/thread/detail/invoke.hpp>
-#include <boost/thread/detail/make_tuple_indices.hpp>
-
-#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
- ! defined(BOOST_NO_CXX11_HDR_TUPLE)
-#include <tuple>
-#else
-#include <boost/tuple/tuple.hpp>
-#endif
-
-namespace boost
-{
- namespace detail
- {
-
-#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
- ! defined(BOOST_NO_CXX11_HDR_TUPLE)
-
- template <class Fp, class ... Args>
- class async_func
- {
- std::tuple<Fp, Args...> f_;
-
- public:
- BOOST_THREAD_MOVABLE_ONLY( async_func)
- //typedef typename invoke_of<_Fp, _Args...>::type Rp;
- typedef typename result_of<Fp(Args...)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args)... args)
- : f_(boost::move(f), boost::move(args)...)
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f) : f_(boost::move(f.f_))
- {}
-
- result_type operator()()
- {
- typedef typename make_tuple_indices<1+sizeof...(Args), 1>::type Index;
- return execute(Index());
- }
- private:
- template <size_t ...Indices>
- result_type
- execute(tuple_indices<Indices...>)
- {
- return invoke(boost::move(std::get<0>(f_)), boost::move(std::get<Indices>(f_))...);
- }
- };
- //BOOST_THREAD_DCL_MOVABLE_BEG(X) async_func<Fp> BOOST_THREAD_DCL_MOVABLE_END
-#else
- template <class Fp,
- class T0 = tuples::null_type, class T1 = tuples::null_type, class T2 = tuples::null_type,
- class T3 = tuples::null_type, class T4 = tuples::null_type, class T5 = tuples::null_type,
- class T6 = tuples::null_type, class T7 = tuples::null_type, class T8 = tuples::null_type
- , class T9 = tuples::null_type
- >
- class async_func;
-
- template <class Fp,
- class T0 , class T1 , class T2 ,
- class T3 , class T4 , class T5 ,
- class T6 , class T7 , class T8 >
- class async_func<Fp, T0, T1, T2, T3, T4, T5, T6, T7, T8>
- {
- Fp fp_;
- T0 v0_;
- T1 v1_;
- T2 v2_;
- T3 v3_;
- T4 v4_;
- T5 v5_;
- T6 v6_;
- T7 v7_;
- T8 v8_;
- //::boost::tuple<Fp, T0, T1, T2, T3, T4, T5, T6, T7, T8> f_;
-
- public:
- BOOST_THREAD_MOVABLE_ONLY(async_func)
- typedef typename result_of<Fp(T0, T1, T2, T3, T4, T5, T6, T7, T8)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f
- , BOOST_THREAD_RV_REF(T0) a0
- , BOOST_THREAD_RV_REF(T1) a1
- , BOOST_THREAD_RV_REF(T2) a2
- , BOOST_THREAD_RV_REF(T3) a3
- , BOOST_THREAD_RV_REF(T4) a4
- , BOOST_THREAD_RV_REF(T5) a5
- , BOOST_THREAD_RV_REF(T6) a6
- , BOOST_THREAD_RV_REF(T7) a7
- , BOOST_THREAD_RV_REF(T8) a8
- )
- : fp_(boost::move(f))
- , v0_(boost::move(a0))
- , v1_(boost::move(a1))
- , v2_(boost::move(a2))
- , v3_(boost::move(a3))
- , v4_(boost::move(a4))
- , v5_(boost::move(a5))
- , v6_(boost::move(a6))
- , v7_(boost::move(a7))
- , v8_(boost::move(a8))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f)
- : fp_(boost::move(f.fp))
- , v0_(boost::move(f.a0))
- , v1_(boost::move(f.a1))
- , v2_(boost::move(f.a2))
- , v3_(boost::move(f.a3))
- , v4_(boost::move(f.a4))
- , v5_(boost::move(f.a5))
- , v6_(boost::move(f.a6))
- , v7_(boost::move(f.a7))
- , v8_(boost::move(f.a8))
- {}
-
- result_type operator()()
- {
- return invoke(boost::move(fp_)
- , boost::move(v0_)
- , boost::move(v1_)
- , boost::move(v2_)
- , boost::move(v3_)
- , boost::move(v4_)
- , boost::move(v5_)
- , boost::move(v6_)
- , boost::move(v7_)
- , boost::move(v8_)
- );
- }
- };
- template <class Fp, class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7 >
- class async_func<Fp, T0, T1, T2, T3, T4, T5, T6, T7>
- {
- Fp fp_;
- T0 v0_;
- T1 v1_;
- T2 v2_;
- T3 v3_;
- T4 v4_;
- T5 v5_;
- T6 v6_;
- T7 v7_;
- public:
- BOOST_THREAD_MOVABLE_ONLY(async_func)
- typedef typename result_of<Fp(T0, T1, T2, T3, T4, T5, T6, T7)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f
- , BOOST_THREAD_RV_REF(T0) a0
- , BOOST_THREAD_RV_REF(T1) a1
- , BOOST_THREAD_RV_REF(T2) a2
- , BOOST_THREAD_RV_REF(T3) a3
- , BOOST_THREAD_RV_REF(T4) a4
- , BOOST_THREAD_RV_REF(T5) a5
- , BOOST_THREAD_RV_REF(T6) a6
- , BOOST_THREAD_RV_REF(T7) a7
- )
- : fp_(boost::move(f))
- , v0_(boost::move(a0))
- , v1_(boost::move(a1))
- , v2_(boost::move(a2))
- , v3_(boost::move(a3))
- , v4_(boost::move(a4))
- , v5_(boost::move(a5))
- , v6_(boost::move(a6))
- , v7_(boost::move(a7))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f)
- : fp_(boost::move(f.fp))
- , v0_(boost::move(f.a0))
- , v1_(boost::move(f.a1))
- , v2_(boost::move(f.a2))
- , v3_(boost::move(f.a3))
- , v4_(boost::move(f.a4))
- , v5_(boost::move(f.a5))
- , v6_(boost::move(f.a6))
- , v7_(boost::move(f.a7))
- {}
-
- result_type operator()()
- {
- return invoke(boost::move(fp_)
- , boost::move(v0_)
- , boost::move(v1_)
- , boost::move(v2_)
- , boost::move(v3_)
- , boost::move(v4_)
- , boost::move(v5_)
- , boost::move(v6_)
- , boost::move(v7_)
- );
- }
- };
- template <class Fp, class T0, class T1, class T2, class T3, class T4, class T5, class T6>
- class async_func<Fp, T0, T1, T2, T3, T4, T5, T6>
- {
- Fp fp_;
- T0 v0_;
- T1 v1_;
- T2 v2_;
- T3 v3_;
- T4 v4_;
- T5 v5_;
- T6 v6_;
- public:
- BOOST_THREAD_MOVABLE_ONLY(async_func)
- typedef typename result_of<Fp(T0, T1, T2, T3, T4, T5, T6)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f
- , BOOST_THREAD_RV_REF(T0) a0
- , BOOST_THREAD_RV_REF(T1) a1
- , BOOST_THREAD_RV_REF(T2) a2
- , BOOST_THREAD_RV_REF(T3) a3
- , BOOST_THREAD_RV_REF(T4) a4
- , BOOST_THREAD_RV_REF(T5) a5
- , BOOST_THREAD_RV_REF(T6) a6
- )
- : fp_(boost::move(f))
- , v0_(boost::move(a0))
- , v1_(boost::move(a1))
- , v2_(boost::move(a2))
- , v3_(boost::move(a3))
- , v4_(boost::move(a4))
- , v5_(boost::move(a5))
- , v6_(boost::move(a6))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f)
- : fp_(boost::move(f.fp))
- , v0_(boost::move(f.a0))
- , v1_(boost::move(f.a1))
- , v2_(boost::move(f.a2))
- , v3_(boost::move(f.a3))
- , v4_(boost::move(f.a4))
- , v5_(boost::move(f.a5))
- , v6_(boost::move(f.a6))
- {}
-
- result_type operator()()
- {
- return invoke(boost::move(fp_)
- , boost::move(v0_)
- , boost::move(v1_)
- , boost::move(v2_)
- , boost::move(v3_)
- , boost::move(v4_)
- , boost::move(v5_)
- , boost::move(v6_)
- );
- }
- };
- template <class Fp, class T0, class T1, class T2, class T3, class T4, class T5>
- class async_func<Fp, T0, T1, T2, T3, T4, T5>
- {
- Fp fp_;
- T0 v0_;
- T1 v1_;
- T2 v2_;
- T3 v3_;
- T4 v4_;
- T5 v5_;
- public:
- BOOST_THREAD_MOVABLE_ONLY(async_func)
- typedef typename result_of<Fp(T0, T1, T2, T3, T4, T5)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f
- , BOOST_THREAD_RV_REF(T0) a0
- , BOOST_THREAD_RV_REF(T1) a1
- , BOOST_THREAD_RV_REF(T2) a2
- , BOOST_THREAD_RV_REF(T3) a3
- , BOOST_THREAD_RV_REF(T4) a4
- , BOOST_THREAD_RV_REF(T5) a5
- )
- : fp_(boost::move(f))
- , v0_(boost::move(a0))
- , v1_(boost::move(a1))
- , v2_(boost::move(a2))
- , v3_(boost::move(a3))
- , v4_(boost::move(a4))
- , v5_(boost::move(a5))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f)
- : fp_(boost::move(f.fp))
- , v0_(boost::move(f.a0))
- , v1_(boost::move(f.a1))
- , v2_(boost::move(f.a2))
- , v3_(boost::move(f.a3))
- , v4_(boost::move(f.a4))
- , v5_(boost::move(f.a5))
- {}
-
- result_type operator()()
- {
- return invoke(boost::move(fp_)
- , boost::move(v0_)
- , boost::move(v1_)
- , boost::move(v2_)
- , boost::move(v3_)
- , boost::move(v4_)
- , boost::move(v5_)
- );
- }
- };
- template <class Fp, class T0, class T1, class T2, class T3, class T4>
- class async_func<Fp, T0, T1, T2, T3, T4>
- {
- Fp fp_;
- T0 v0_;
- T1 v1_;
- T2 v2_;
- T3 v3_;
- T4 v4_;
- public:
- BOOST_THREAD_MOVABLE_ONLY(async_func)
- typedef typename result_of<Fp(T0, T1, T2, T3, T4)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f
- , BOOST_THREAD_RV_REF(T0) a0
- , BOOST_THREAD_RV_REF(T1) a1
- , BOOST_THREAD_RV_REF(T2) a2
- , BOOST_THREAD_RV_REF(T3) a3
- , BOOST_THREAD_RV_REF(T4) a4
- )
- : fp_(boost::move(f))
- , v0_(boost::move(a0))
- , v1_(boost::move(a1))
- , v2_(boost::move(a2))
- , v3_(boost::move(a3))
- , v4_(boost::move(a4))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f)
- : fp_(boost::move(f.fp))
- , v0_(boost::move(f.a0))
- , v1_(boost::move(f.a1))
- , v2_(boost::move(f.a2))
- , v3_(boost::move(f.a3))
- , v4_(boost::move(f.a4))
- {}
-
- result_type operator()()
- {
- return invoke(boost::move(fp_)
- , boost::move(v0_)
- , boost::move(v1_)
- , boost::move(v2_)
- , boost::move(v3_)
- , boost::move(v4_)
- );
- }
- };
- template <class Fp, class T0, class T1, class T2, class T3>
- class async_func<Fp, T0, T1, T2, T3>
- {
- Fp fp_;
- T0 v0_;
- T1 v1_;
- T2 v2_;
- T3 v3_;
- public:
- BOOST_THREAD_MOVABLE_ONLY(async_func)
- typedef typename result_of<Fp(T0, T1, T2, T3)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f
- , BOOST_THREAD_RV_REF(T0) a0
- , BOOST_THREAD_RV_REF(T1) a1
- , BOOST_THREAD_RV_REF(T2) a2
- , BOOST_THREAD_RV_REF(T3) a3
- )
- : fp_(boost::move(f))
- , v0_(boost::move(a0))
- , v1_(boost::move(a1))
- , v2_(boost::move(a2))
- , v3_(boost::move(a3))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f)
- : fp_(boost::move(f.fp))
- , v0_(boost::move(f.a0))
- , v1_(boost::move(f.a1))
- , v2_(boost::move(f.a2))
- , v3_(boost::move(f.a3))
- {}
-
- result_type operator()()
- {
- return invoke(boost::move(fp_)
- , boost::move(v0_)
- , boost::move(v1_)
- , boost::move(v2_)
- , boost::move(v3_)
- );
- }
- };
- template <class Fp, class T0, class T1, class T2>
- class async_func<Fp, T0, T1, T2>
- {
- Fp fp_;
- T0 v0_;
- T1 v1_;
- T2 v2_;
- public:
- BOOST_THREAD_MOVABLE_ONLY(async_func)
- typedef typename result_of<Fp(T0, T1, T2)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f
- , BOOST_THREAD_RV_REF(T0) a0
- , BOOST_THREAD_RV_REF(T1) a1
- , BOOST_THREAD_RV_REF(T2) a2
- )
- : fp_(boost::move(f))
- , v0_(boost::move(a0))
- , v1_(boost::move(a1))
- , v2_(boost::move(a2))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f)
- : fp_(boost::move(f.fp))
- , v0_(boost::move(f.a0))
- , v1_(boost::move(f.a1))
- , v2_(boost::move(f.a2))
- {}
-
- result_type operator()()
- {
- return invoke(boost::move(fp_)
- , boost::move(v0_)
- , boost::move(v1_)
- , boost::move(v2_)
- );
- }
- };
- template <class Fp, class T0, class T1>
- class async_func<Fp, T0, T1>
- {
- Fp fp_;
- T0 v0_;
- T1 v1_;
- public:
- BOOST_THREAD_MOVABLE_ONLY(async_func)
- typedef typename result_of<Fp(T0, T1)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f
- , BOOST_THREAD_RV_REF(T0) a0
- , BOOST_THREAD_RV_REF(T1) a1
- )
- : fp_(boost::move(f))
- , v0_(boost::move(a0))
- , v1_(boost::move(a1))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f)
- : fp_(boost::move(f.fp))
- , v0_(boost::move(f.a0))
- , v1_(boost::move(f.a1))
- {}
-
- result_type operator()()
- {
- return invoke(boost::move(fp_)
- , boost::move(v0_)
- , boost::move(v1_)
- );
- }
- };
- template <class Fp, class T0>
- class async_func<Fp, T0>
- {
- Fp fp_;
- T0 v0_;
- public:
- BOOST_THREAD_MOVABLE_ONLY(async_func)
- typedef typename result_of<Fp(T0)>::type result_type;
-
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_RV_REF(Fp) f
- , BOOST_THREAD_RV_REF(T0) a0
- )
- : fp_(boost::move(f))
- , v0_(boost::move(a0))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_RV_REF(async_func) f)
- : fp_(boost::move(f.fp))
- , v0_(boost::move(f.a0))
- {}
-
- result_type operator()()
- {
- return invoke(boost::move(fp_)
- , boost::move(v0_)
- );
- }
- };
- template <class Fp>
- class async_func<Fp>
- {
- Fp fp_;
- public:
- BOOST_THREAD_COPYABLE_AND_MOVABLE(async_func)
- typedef typename result_of<Fp()>::type result_type;
- BOOST_SYMBOL_VISIBLE
- explicit async_func(BOOST_THREAD_FWD_REF(Fp) f)
- : fp_(boost::move(f))
- {}
-
- BOOST_SYMBOL_VISIBLE
- async_func(BOOST_THREAD_FWD_REF(async_func) f)
- : fp_(boost::move(f.fp_))
- {}
- result_type operator()()
- {
- return fp_();
- }
- };
-#endif
-
- }
-}
-
-#endif // header
diff --git a/3party/boost/boost/thread/detail/config.hpp b/3party/boost/boost/thread/detail/config.hpp
index ce5afc735a..5ffe5e49e6 100644
--- a/3party/boost/boost/thread/detail/config.hpp
+++ b/3party/boost/boost/thread/detail/config.hpp
@@ -15,8 +15,7 @@
//#define BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
// ATTRIBUTE_MAY_ALIAS
-#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) > 302 \
- && !defined(__INTEL_COMPILER)
+#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
// GCC since 3.3 has may_alias attribute that helps to alleviate optimizer issues with
// regard to violation of the strict aliasing rules.
@@ -240,7 +239,8 @@
! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
! defined(BOOST_NO_CXX11_DECLTYPE) && \
! defined(BOOST_NO_CXX11_DECLTYPE_N3276) && \
- ! defined(BOOST_NO_CXX11_AUTO) && \
+ ! defined(BOOST_THREAD_NO_CXX11_DECLTYPE_N3276) && \
+ ! defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES) && \
! defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
! defined(BOOST_NO_CXX11_HDR_TUPLE)
@@ -248,6 +248,22 @@
#endif
#endif
+#if ! defined BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY \
+ && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_WHEN_ALL_WHEN_ANY
+
+#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
+ ! defined(BOOST_NO_CXX11_HDR_TUPLE)
+
+#define BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY
+#endif
+#endif
+
+// ! defined(BOOST_NO_SFINAE_EXPR) &&
+// ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES) &&
+// ! defined(BOOST_NO_CXX11_AUTO) &&
+// ! defined(BOOST_NO_CXX11_DECLTYPE) &&
+// ! defined(BOOST_NO_CXX11_DECLTYPE_N3276) &&
+
// MAKE_READY_AT_THREAD_EXIT
#if ! defined BOOST_THREAD_PROVIDES_MAKE_READY_AT_THREAD_EXIT \
@@ -264,6 +280,11 @@
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
#endif
+#if ! defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP \
+ && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_UNWRAP
+#define BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
+#endif
+
// FUTURE_INVALID_AFTER_GET
#if ! defined BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET \
&& ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET
@@ -358,7 +379,9 @@
// compatibility with the rest of Boost's auto-linking code:
#if defined(BOOST_THREAD_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
# undef BOOST_THREAD_USE_LIB
-# define BOOST_THREAD_USE_DLL
+# if !defined(BOOST_THREAD_USE_DLL)
+# define BOOST_THREAD_USE_DLL
+# endif
#endif
#if defined(BOOST_THREAD_BUILD_DLL) //Build dll
diff --git a/3party/boost/boost/thread/detail/counter.hpp b/3party/boost/boost/thread/detail/counter.hpp
index 67a7dbc639..38e1597c57 100644
--- a/3party/boost/boost/thread/detail/counter.hpp
+++ b/3party/boost/boost/thread/detail/counter.hpp
@@ -75,15 +75,28 @@ namespace boost
};
struct counter_is_not_zero
{
- counter_is_not_zero(const counter& count) : count_(count) {}
+ counter_is_not_zero(counter const& count) : count_(count) {}
bool operator()() const { return count_ != 0; }
- const counter& count_;
+ counter const& count_;
};
struct counter_is_zero
{
- counter_is_zero(const counter& count) : count_(count) {}
+ counter_is_zero(counter const& count) : count_(count) {}
bool operator()() const { return count_ == 0; }
- const counter& count_;
+ counter const& count_;
+ };
+ struct is_zero
+ {
+ is_zero(std::size_t& count) : count_(count) {}
+ bool operator()() const { return count_ == 0; }
+ std::size_t& count_;
+ };
+ struct not_equal
+ {
+ not_equal(std::size_t& x, std::size_t& y) : x_(x), y_(y) {}
+ bool operator()() const { return x_ != y_; }
+ std::size_t& x_;
+ std::size_t& y_;
};
}
} // namespace boost
diff --git a/3party/boost/boost/thread/detail/delete.hpp b/3party/boost/boost/thread/detail/delete.hpp
index 444c54e79c..4caa34081f 100644
--- a/3party/boost/boost/thread/detail/delete.hpp
+++ b/3party/boost/boost/thread/detail/delete.hpp
@@ -15,6 +15,7 @@
* BOOST_THREAD_DELETE_COPY_ASSIGN deletes the copy assignment when the compiler supports it or
* makes it private.
*/
+
#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS
#define BOOST_THREAD_DELETE_COPY_CTOR(CLASS) \
CLASS(CLASS const&) = delete; \
diff --git a/3party/boost/boost/thread/detail/function_wrapper.hpp b/3party/boost/boost/thread/detail/function_wrapper.hpp
new file mode 100644
index 0000000000..2200f0e054
--- /dev/null
+++ b/3party/boost/boost/thread/detail/function_wrapper.hpp
@@ -0,0 +1,93 @@
+// Copyright (C) 2013 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)
+//
+// 2013/09 Vicente J. Botet Escriba
+// Adapt to boost from CCIA C++11 implementation
+// Make use of Boost.Move
+
+#ifndef BOOST_THREAD_DETAIL_FUNCTION_WRAPPER_HPP
+#define BOOST_THREAD_DETAIL_FUNCTION_WRAPPER_HPP
+
+#include <boost/config.hpp>
+#include <boost/thread/detail/memory.hpp>
+#include <boost/thread/detail/move.hpp>
+
+#include <boost/thread/csbl/memory/unique_ptr.hpp>
+
+#include <memory>
+#include <functional>
+
+namespace boost
+{
+ namespace detail
+ {
+ class function_wrapper
+ {
+ struct impl_base
+ {
+ virtual void call()=0;
+ virtual ~impl_base()
+ {
+ }
+ };
+ typedef boost::csbl::unique_ptr<impl_base> impl_base_type;
+ impl_base_type impl;
+ template <typename F>
+ struct impl_type: impl_base
+ {
+ F f;
+ impl_type(F const &f_)
+ : f(f_)
+ {}
+ impl_type(BOOST_THREAD_RV_REF(F) f_)
+ : f(boost::move(f_))
+ {}
+
+ void call()
+ {
+ f();
+ }
+ };
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(function_wrapper)
+
+//#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
+ template<typename F>
+ function_wrapper(F const& f):
+ impl(new impl_type<F>(f))
+ {}
+//#endif
+ template<typename F>
+ function_wrapper(BOOST_THREAD_RV_REF(F) f):
+ impl(new impl_type<F>(boost::forward<F>(f)))
+ {}
+ function_wrapper(BOOST_THREAD_RV_REF(function_wrapper) other) BOOST_NOEXCEPT :
+ impl(other.impl)
+ {
+ other.impl = 0;
+ }
+ function_wrapper()
+ : impl(0)
+ {
+ }
+ ~function_wrapper()
+ {
+ }
+
+ function_wrapper& operator=(BOOST_THREAD_RV_REF(function_wrapper) other) BOOST_NOEXCEPT
+ {
+ impl=other.impl;
+ other.impl=0;
+ return *this;
+ }
+
+ void operator()()
+ { impl->call();}
+
+ };
+ }
+}
+
+#endif // header
diff --git a/3party/boost/boost/thread/detail/invoke.hpp b/3party/boost/boost/thread/detail/invoke.hpp
index 3a085232b5..c81f50fba2 100644
--- a/3party/boost/boost/thread/detail/invoke.hpp
+++ b/3party/boost/boost/thread/detail/invoke.hpp
@@ -28,7 +28,11 @@
#include <boost/config.hpp>
#include <boost/static_assert.hpp>
#include <boost/thread/detail/move.hpp>
+#include <boost/core/enable_if.hpp>
+#include <boost/mpl/bool.hpp>
#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
#include <boost/type_traits/remove_reference.hpp>
#ifndef BOOST_NO_CXX11_HDR_FUNCTIONAL
#include <functional>
@@ -40,11 +44,11 @@ namespace boost
{
-#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
- ! defined(BOOST_NO_SFINAE_EXPR) && \
+#if ! defined(BOOST_NO_SFINAE_EXPR) && \
! defined(BOOST_NO_CXX11_DECLTYPE) && \
! defined(BOOST_NO_CXX11_DECLTYPE_N3276) && \
- ! defined(BOOST_NO_CXX11_AUTO)
+ ! defined(BOOST_THREAD_NO_CXX11_DECLTYPE_N3276) && \
+ ! defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES)
#define BOOST_THREAD_PROVIDES_INVOKE
@@ -58,6 +62,13 @@ namespace boost
{
return (boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...);
}
+ template <class R, class Fp, class A0, class ...Args>
+ inline auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
+ -> decltype((boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...))
+ {
+ return (boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...);
+ }
template <class Fp, class A0, class ...Args>
inline auto
@@ -66,6 +77,13 @@ namespace boost
{
return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...);
}
+ template <class R, class Fp, class A0, class ...Args>
+ inline auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
+ -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...))
+ {
+ return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...);
+ }
// bullets 3 and 4
@@ -85,14 +103,38 @@ namespace boost
return (*boost::forward<A0>(a0)).*f;
}
+ template <class R, class Fp, class A0>
+ inline auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
+ -> decltype(boost::forward<A0>(a0).*f)
+ {
+ return boost::forward<A0>(a0).*f;
+ }
+
+ template <class R, class Fp, class A0>
+ inline auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
+ -> decltype((*boost::forward<A0>(a0)).*f)
+ {
+ return (*boost::forward<A0>(a0)).*f;
+ }
+
+
// bullet 5
+ template <class R, class Fp, class ...Args>
+ inline auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
+ -> decltype(boost::forward<Fp>(f)(boost::forward<Args>(args)...))
+ {
+ return boost::forward<Fp>(f)(boost::forward<Args>(args)...);
+ }
template <class Fp, class ...Args>
inline auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
-> decltype(boost::forward<Fp>(f)(boost::forward<Args>(args)...))
{
return boost::forward<Fp>(f)(boost::forward<Args>(args)...);
}
+
#else // BOOST_NO_CXX11_VARIADIC_TEMPLATES
// bullets 1 and 2
@@ -105,21 +147,45 @@ namespace boost
{
return (boost::forward<A0>(a0).*f)();
}
+ template <class R, class Fp, class A0>
+ inline
+ auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
+ -> decltype((boost::forward<A0>(a0).*f)())
+ {
+ return (boost::forward<A0>(a0).*f)();
+ }
template <class Fp, class A0, class A1>
inline
auto
invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- -> decltype((boost::forward<A0>(a0).*f)(boost::forward<Args>(a1)))
+ -> decltype((boost::forward<A0>(a0).*f)(boost::forward<A1>(a1)))
+ {
+ return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1));
+ }
+ template <class R, class Fp, class A0, class A1>
+ inline
+ auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
+ -> decltype((boost::forward<A0>(a0).*f)(boost::forward<A1>(a1)))
{
- return (boost::forward<A0>(a0).*f)(boost::forward<Args>(a1));
+ return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1));
}
template <class Fp, class A0, class A1, class A2>
inline
auto
invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- -> decltype((boost::forward<A0>(a0).*f)(boost::forward<Args>(a1), boost::forward<Args>(a2)))
+ -> decltype((boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
{
- return (boost::forward<A0>(a0).*f)(boost::forward<Args>(a1), boost::forward<Args>(a2));
+ return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
+ }
+ template <class R, class Fp, class A0, class A1, class A2>
+ inline
+ auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
+ -> decltype((boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
+ {
+ return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
}
template <class Fp, class A0>
@@ -130,21 +196,45 @@ namespace boost
{
return ((*boost::forward<A0>(a0)).*f)();
}
+ template <class R, class Fp, class A0>
+ inline
+ auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
+ -> decltype(((*boost::forward<A0>(a0)).*f)())
+ {
+ return ((*boost::forward<A0>(a0)).*f)();
+ }
template <class Fp, class A0, class A1>
inline
auto
invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(a1)))
+ -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1)))
{
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(a1));
+ return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1));
}
- template <class Fp, class A0, class A1>
+ template <class R, class Fp, class A0, class A1>
+ inline
+ auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
+ -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1)))
+ {
+ return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1));
+ }
+ template <class Fp, class A0, class A1, class A2>
inline
auto
invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(a1), boost::forward<Args>(a2)))
+ -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
{
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(a1), boost::forward<Args>(a2));
+ return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
+ }
+ template <class R, class Fp, class A0, class A1, class A2>
+ inline
+ auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
+ -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
+ {
+ return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
}
// bullets 3 and 4
@@ -157,6 +247,14 @@ namespace boost
{
return boost::forward<A0>(a0).*f;
}
+ template <class R, class Fp, class A0>
+ inline
+ auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
+ -> decltype(boost::forward<A0>(a0).*f)
+ {
+ return boost::forward<A0>(a0).*f;
+ }
template <class Fp, class A0>
inline
@@ -166,6 +264,14 @@ namespace boost
{
return (*boost::forward<A0>(a0)).*f;
}
+ template <class R, class Fp, class A0>
+ inline
+ auto
+ invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
+ -> decltype((*boost::forward<A0>(a0)).*f)
+ {
+ return (*boost::forward<A0>(a0)).*f;
+ }
// bullet 5
@@ -178,7 +284,7 @@ namespace boost
}
template <class Fp, class A1>
inline
- auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) a1)
+ auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
-> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1)))
{
return boost::forward<Fp>(f)(boost::forward<A1>(a1));
@@ -197,12 +303,43 @@ namespace boost
return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
}
+
+ template <class R, class Fp>
+ inline
+ auto invoke(BOOST_THREAD_RV_REF(Fp) f)
+ -> decltype(boost::forward<Fp>(f)())
+ {
+ return boost::forward<Fp>(f)();
+ }
+ template <class R, class Fp, class A1>
+ inline
+ auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
+ -> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1)))
+ {
+ return boost::forward<Fp>(f)(boost::forward<A1>(a1));
+ }
+ template <class R, class Fp, class A1, class A2>
+ inline
+ auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
+ -> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
+ {
+ return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
+ }
+ template <class R, class Fp, class A1, class A2, class A3>
+ inline
+ auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
+ -> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3)))
+ {
+ return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
+ }
+
#endif // BOOST_NO_CXX11_VARIADIC_TEMPLATES
#elif ! defined(BOOST_NO_SFINAE_EXPR) && \
! defined BOOST_NO_CXX11_HDR_FUNCTIONAL && \
defined BOOST_MSVC
+//#error
template <class Ret, class Fp>
inline
Ret invoke(BOOST_THREAD_RV_REF(Fp) f)
@@ -396,21 +533,27 @@ namespace boost
// f(t1, t2, ..., tN) in all other cases.
template <class Ret, class Fp, class ...Args>
+ inline Ret do_invoke(mpl::false_, BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
+ {
+ return boost::forward<Fp>(f)(boost::forward<Args>(args)...);
+ }
+
+ template <class Ret, class Fp, class ...Args>
+ inline Ret do_invoke(mpl::true_, BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
+ {
+ return f(boost::forward<Args>(args)...);
+ }
+
+ template <class Ret, class Fp, class ...Args>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
{
- return boost::forward<Fp>(f)(boost::forward<Args>(args)...);
- }
- template <class Ret, class ...Args>
- inline Ret
- invoke(Ret(*f)(Args... ), BOOST_THREAD_RV_REF(Args) ...args)
- {
- return f(boost::forward<Args>(args)...);
+ return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), boost::forward<Args>(args)...);
}
#else // BOOST_NO_CXX11_VARIADIC_TEMPLATES
// bullet 1
@@ -424,10 +567,22 @@ namespace boost
is_base_of<A, typename remove_reference<A0>::type>::value,
Ret
>::type
- invoke(Ret (A::*f)(), BOOST_THREAD_RV_REF(A0) a0)
+ invoke(Ret (A::*f)(), A0& a0)
{
- return (boost::forward<A0>(a0).*f)();
+ return (a0.*f)();
}
+ template <class Ret, class A, class A0>
+ inline
+ typename enable_if_c
+ <
+ is_base_of<A, typename remove_reference<A0>::type>::value,
+ Ret
+ >::type
+ invoke(Ret (A::*f)(), A0* a0)
+ {
+ return ((*a0).*f)();
+ }
+
template <class Ret, class A, class A0, class A1>
inline
typename enable_if_c
@@ -435,9 +590,11 @@ namespace boost
is_base_of<A, typename remove_reference<A0>::type>::value,
Ret
>::type
- invoke(Ret (A::*f)(A1), BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
+ invoke(Ret (A::*f)(A1),
+ A0& a0, BOOST_THREAD_RV_REF(A1) a1
+ )
{
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1));
+ return (a0.*f)(boost::forward<A1>(a1));
}
template <class Ret, class A, class A0, class A1>
inline
@@ -446,10 +603,33 @@ namespace boost
is_base_of<A, typename remove_reference<A0>::type>::value,
Ret
>::type
- invoke(Ret (A::*f)(A1), A0 a0, A1 a1)
+ invoke(Ret (A::*f)(A1), A0& a0, A1 a1)
{
return (a0.*f)(a1);
}
+ template <class Ret, class A, class A0, class A1>
+ inline
+ typename enable_if_c
+ <
+ is_base_of<A, typename remove_reference<A0>::type>::value,
+ Ret
+ >::type
+ invoke(Ret (A::*f)(A1), A0* a0, BOOST_THREAD_RV_REF(A1) a1
+ )
+ {
+ return (*(a0).*f)(boost::forward<A1>(a1));
+ }
+ template <class Ret, class A, class A0, class A1>
+ inline
+ typename enable_if_c
+ <
+ is_base_of<A, typename remove_reference<A0>::type>::value,
+ Ret
+ >::type
+ invoke(Ret (A::*f)(A1), A0* a0, A1 a1)
+ {
+ return (*a0.*f)(a1);
+ }
template <class Ret, class A, class A0, class A1, class A2>
inline
typename enable_if_c
@@ -458,10 +638,10 @@ namespace boost
Ret
>::type
invoke(Ret (A::*f)(A1, A2),
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2
+ A0& a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2
)
{
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
+ return (a0.*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
}
template <class Ret, class A, class A0, class A1, class A2>
inline
@@ -470,9 +650,9 @@ namespace boost
is_base_of<A, typename remove_reference<A0>::type>::value,
Ret
>::type
- invoke(Ret (A::*f)(A1, A2), A0 a0, A1 a1, A2 a2)
+ invoke(Ret (A::*f)(A1, A2), A0* a0, A1 a1, A2 a2)
{
- return (a0.*f)(a1, a2);
+ return ((*a0).*f)(a1, a2);
}
template <class Ret, class A, class A0, class A1, class A2, class A3>
inline
@@ -482,9 +662,9 @@ namespace boost
Ret
>::type
invoke(Ret (A::*f)(A1, A2, A3),
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
+ A0& a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
{
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
+ return (a0.*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
}
template <class Ret, class A, class A0, class A1, class A2, class A3>
inline
@@ -493,9 +673,9 @@ namespace boost
is_base_of<A, typename remove_reference<A0>::type>::value,
Ret
>::type
- invoke(Ret (A::*f)(A1, A2, A3), A0 a0, A1 a1, A2 a2, A3 a3)
+ invoke(Ret (A::*f)(A1, A2, A3), A0* a0, A1 a1, A2 a2, A3 a3)
{
- return (a0.*f)(a1, a2, a3);
+ return ((*a0).*f)(a1, a2, a3);
}
///
@@ -506,9 +686,20 @@ namespace boost
is_base_of<A, typename remove_reference<A0>::type>::value,
Ret
>::type
- invoke(Ret (A::*f)() const, BOOST_THREAD_RV_REF(A0) a0)
+ invoke(Ret (A::*f)() const, A0 const& a0)
{
- return (boost::forward<A0>(a0).*f)();
+ return (a0.*f)();
+ }
+ template <class Ret, class A, class A0>
+ inline
+ typename enable_if_c
+ <
+ is_base_of<A, typename remove_reference<A0>::type>::value,
+ Ret
+ >::type
+ invoke(Ret (A::*f)() const, A0 const* a0)
+ {
+ return ((*a0).*f)();
}
template <class Ret, class A, class A0, class A1>
inline
@@ -517,9 +708,9 @@ namespace boost
is_base_of<A, typename remove_reference<A0>::type>::value,
Ret
>::type
- invoke(Ret (A::*f)(A1) const, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
+ invoke(Ret (A::*f)(A1) const, A0 const& a0, BOOST_THREAD_RV_REF(A1) a1)
{
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1));
+ return (a0.*f)(boost::forward<A1>(a1));
}
template <class Ret, class A, class A0, class A1>
inline
@@ -528,7 +719,19 @@ namespace boost
is_base_of<A, typename remove_reference<A0>::type>::value,
Ret
>::type
- invoke(Ret (A::*f)(A1) const, A0 a0, A1 a1)
+ invoke(Ret (A::*f)(A1) const, A0 const* a0, BOOST_THREAD_RV_REF(A1) a1)
+ {
+ return ((*a0).*f)(boost::forward<A1>(a1));
+ }
+
+ template <class Ret, class A, class A0, class A1>
+ inline
+ typename enable_if_c
+ <
+ is_base_of<A, typename remove_reference<A0>::type>::value,
+ Ret
+ >::type
+ invoke(Ret (A::*f)(A1) const, A0 const& a0, A1 a1)
{
return (a0.*f)(a1);
}
@@ -540,7 +743,7 @@ namespace boost
Ret
>::type
invoke(Ret (A::*f)(A1, A2) const,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2
+ A0 const& a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2
)
{
return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)
@@ -553,7 +756,7 @@ namespace boost
is_base_of<A, typename remove_reference<A0>::type>::value,
Ret
>::type
- invoke(Ret (A::*f)(A1, A2) const, A0 a0, A1 a1, A2 a2)
+ invoke(Ret (A::*f)(A1, A2) const, A0 const& a0, A1 a1, A2 a2)
{
return (a0.*f)(a1, a2);
}
@@ -1159,189 +1362,241 @@ namespace boost
// f(t1, t2, ..., tN) in all other cases.
template <class Ret, class Fp>
+ inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f)
+ {
+ return boost::forward<Fp>(f)();
+ }
+ template <class Ret, class Fp>
+ inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f)
+ {
+ return f();
+ }
+ template <class Ret, class Fp>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(BOOST_THREAD_RV_REF(Fp) f)
+ invoke(BOOST_THREAD_FWD_REF(Fp) f)
{
- return boost::forward<Fp>(f)();
+ return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f));
+ }
+
+ template <class Ret, class Fp, class A1>
+ inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
+ {
+ return boost::forward<Fp>(f)(boost::forward<A1>(a1));
+ }
+ template <class Ret, class Fp, class A1>
+ inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
+ {
+ return f(boost::forward<A1>(a1));
}
template <class Ret, class Fp, class A1>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
+ invoke(BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
{
- return boost::forward<Fp>(f)(boost::forward<A1>(a1));
+ return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), boost::forward<A1>(a1));
}
- template <class Ret, class Fp, class A1>
+
+ template <class Ret, class Fp, class A1, class A2>
+ inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
+ {
+ return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
+ }
+ template <class Ret, class Fp, class A1, class A2>
+ inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
+ {
+ return f(boost::forward<A1>(a1), boost::forward<A2>(a2));
+ }
+ template <class Ret, class Fp, class A1, class A2>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(BOOST_THREAD_RV_REF(Fp) f, A1 a1)
+ invoke(BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
{
- return boost::forward<Fp>(f)(a1);
+ return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), boost::forward<A1>(a1), boost::forward<A2>(a2));
}
- template <class Ret, class Fp, class A1, class A2>
+
+ template <class Ret, class Fp, class A1, class A2, class A3>
+ inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
+ {
+ return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
+ }
+ template <class Ret, class Fp, class A1, class A2, class A3>
+ inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
+ {
+ return f(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
+ }
+ template <class Ret, class Fp, class A1, class A2, class A3>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
+ invoke(BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
{
- return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
+ return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
}
- template <class Ret, class Fp, class A1, class A2>
+
+
+ template <class Ret, class Fp, class A1>
+ inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1)
+ {
+ return boost::forward<Fp>(f)(a1);
+ }
+ template <class Ret, class Fp, class A1>
+ inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1)
+ {
+ return f(a1);
+ }
+ template <class Ret, class Fp, class A1>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(BOOST_THREAD_RV_REF(Fp) f, A1 a1, A2 a2)
+ invoke(BOOST_THREAD_FWD_REF(Fp) f, A1 a1)
+ {
+ return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), a1);
+ }
+
+ template <class Ret, class Fp, class A1, class A2>
+ inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2)
{
return boost::forward<Fp>(f)(a1, a2);
}
- template <class Ret, class Fp, class A1, class A2, class A3>
+ template <class Ret, class Fp, class A1, class A2>
+ inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2)
+ {
+ return f(a1, a2);
+ }
+ template <class Ret, class Fp, class A1, class A2>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
+ invoke(BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2)
{
- return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
+ return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), a1, a2);
+ }
+
+ template <class Ret, class Fp, class A1, class A2, class A3>
+ inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2, A3 a3)
+ {
+ return boost::forward<Fp>(f)(a1, a2, a3);
+ }
+ template <class Ret, class Fp, class A1, class A2, class A3>
+ inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2, A3 a3)
+ {
+ return f(a1, a2, a3);
}
template <class Ret, class Fp, class A1, class A2, class A3>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(BOOST_THREAD_RV_REF(Fp) f, A1 a1, A2 a2, A3 a3)
+ invoke(BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2, A3 a3)
{
- return boost::forward<Fp>(f)(a1, a2, a3);
+ return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), a1, a2, a3);
}
+
///
template <class Ret, class Fp>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(Fp const &f)
+ invoke(Fp &f)
{
return f();
}
template <class Ret, class Fp, class A1>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(Fp const &f, BOOST_THREAD_RV_REF(A1) a1)
+ invoke(Fp &f, BOOST_THREAD_RV_REF(A1) a1)
{
return f(boost::forward<A1>(a1));
}
template <class Ret, class Fp, class A1>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(Fp const &f, A1 a1)
+ invoke(Fp &f, A1 a1)
{
return f(a1);
}
template <class Ret, class Fp, class A1, class A2>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(Fp const &f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
+ invoke(Fp &f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
{
return f(boost::forward<A1>(a1), boost::forward<A2>(a2));
}
template <class Ret, class Fp, class A1, class A2>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(Fp const &f, A1 a1, A2 a2)
+ invoke(Fp &f, A1 a1, A2 a2)
{
return f(a1, a2);
}
template <class Ret, class Fp, class A1, class A2, class A3>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(Fp const &f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
+ invoke(Fp &f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
{
return f(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
}
template <class Ret, class Fp, class A1, class A2, class A3>
inline
- typename enable_if_c
+ typename disable_if_c
<
- ! is_member_function_pointer<Fp>::value,
+ is_member_function_pointer<Fp>::value,
Ret
>::type
- invoke(Fp const &f, A1 a1, A2 a2, A3 a3)
+ invoke(Fp &f, A1 a1, A2 a2, A3 a3)
{
return f(a1, a2, a3);
}
///
- template <class Ret>
- inline Ret
- invoke(Ret(*f)())
- {
- return f();
- }
- template <class Ret, class A1>
- inline Ret
- invoke(Ret(*f)(A1), BOOST_THREAD_RV_REF(A1) a1)
- {
- return f(boost::forward<A1>(a1));
- }
- template <class Ret, class A1, class A2>
- inline Ret
- invoke(Ret(*f)(A1, A2),
- BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return f(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class A1, class A2, class A3>
- inline Ret
- invoke(Ret(*f)(A1, A2, A3),
- BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return f(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
#endif // BOOST_NO_CXX11_VARIADIC_TEMPLATES
#endif // all
diff --git a/3party/boost/boost/thread/detail/invoker.hpp b/3party/boost/boost/thread/detail/invoker.hpp
new file mode 100644
index 0000000000..aeac53022f
--- /dev/null
+++ b/3party/boost/boost/thread/detail/invoker.hpp
@@ -0,0 +1,738 @@
+// Copyright (C) 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)
+
+// 2013/04 Vicente J. Botet Escriba
+// Provide implementation up to 9 parameters when BOOST_NO_CXX11_VARIADIC_TEMPLATES is defined.
+// Make use of Boost.Move
+// Make use of Boost.Tuple (movable)
+// 2012/11 Vicente J. Botet Escriba
+// Adapt to boost libc++ implementation
+
+//===----------------------------------------------------------------------===//
+//
+// 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.
+//
+// The invoker code is based on the one from libcxx.
+//===----------------------------------------------------------------------===//
+
+#ifndef BOOST_THREAD_DETAIL_ASYNC_FUNCT_HPP
+#define BOOST_THREAD_DETAIL_ASYNC_FUNCT_HPP
+
+#include <boost/config.hpp>
+
+#include <boost/utility/result_of.hpp>
+#include <boost/thread/detail/move.hpp>
+#include <boost/thread/detail/invoke.hpp>
+#include <boost/thread/detail/make_tuple_indices.hpp>
+#include <boost/thread/csbl/tuple.hpp>
+#include <boost/tuple/tuple.hpp>
+
+#include <boost/thread/detail/variadic_header.hpp>
+
+namespace boost
+{
+ namespace detail
+ {
+
+#if defined(BOOST_THREAD_PROVIDES_INVOKE) && ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && ! defined(BOOST_NO_CXX11_HDR_TUPLE)
+
+ template <class Fp, class ... Args>
+ class invoker
+ {
+ //typedef typename decay<Fp>::type Fpd;
+ //typedef tuple<typename decay<Args>::type...> Argsd;
+
+ //csbl::tuple<Fpd, Argsd...> f_;
+ csbl::tuple<Fp, Args...> f_;
+
+ public:
+ BOOST_THREAD_MOVABLE_ONLY( invoker)
+ //typedef typename invoke_of<_Fp, _Args...>::type Rp;
+ typedef typename result_of<Fp(Args...)>::type result_type;
+
+ template <class F, class ... As>
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(As)... args)
+ : f_(boost::forward<F>(f), boost::forward<As>(args)...)
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_RV_REF(invoker) f) : f_(boost::move(BOOST_THREAD_RV(f).f_))
+ {}
+
+ result_type operator()()
+ {
+ typedef typename make_tuple_indices<1+sizeof...(Args), 1>::type Index;
+ return execute(Index());
+ }
+ private:
+ template <size_t ...Indices>
+ result_type
+ execute(tuple_indices<Indices...>)
+ {
+ return invoke(boost::move(csbl::get<0>(f_)), boost::move(csbl::get<Indices>(f_))...);
+ }
+ };
+
+ template <class R, class Fp, class ... Args>
+ class invoker_ret
+ {
+ //typedef typename decay<Fp>::type Fpd;
+ //typedef tuple<typename decay<Args>::type...> Argsd;
+
+ //csbl::tuple<Fpd, Argsd...> f_;
+ csbl::tuple<Fp, Args...> f_;
+
+ public:
+ BOOST_THREAD_MOVABLE_ONLY( invoker_ret)
+ typedef R result_type;
+
+ template <class F, class ... As>
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker_ret(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(As)... args)
+ : f_(boost::forward<F>(f), boost::forward<As>(args)...)
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker_ret(BOOST_THREAD_RV_REF(invoker_ret) f) : f_(boost::move(BOOST_THREAD_RV(f).f_))
+ {}
+
+ result_type operator()()
+ {
+ typedef typename make_tuple_indices<1+sizeof...(Args), 1>::type Index;
+ return execute(Index());
+ }
+ private:
+ template <size_t ...Indices>
+ result_type
+ execute(tuple_indices<Indices...>)
+ {
+ return invoke<R>(boost::move(csbl::get<0>(f_)), boost::move(csbl::get<Indices>(f_))...);
+ }
+ };
+ //BOOST_THREAD_DCL_MOVABLE_BEG(X) invoker<Fp> BOOST_THREAD_DCL_MOVABLE_END
+#else
+
+#if ! defined BOOST_MSVC
+
+#define BOOST_THREAD_RV_REF_ARG_T(z, n, unused) BOOST_PP_COMMA_IF(n) BOOST_THREAD_RV_REF(Arg##n)
+#define BOOST_THREAD_RV_REF_A_T(z, n, unused) BOOST_PP_COMMA_IF(n) BOOST_THREAD_RV_REF(A##n)
+#define BOOST_THREAD_RV_REF_ARG(z, n, unused) , BOOST_THREAD_RV_REF(Arg##n) arg##n
+#define BOOST_THREAD_FWD_REF_A(z, n, unused) , BOOST_THREAD_FWD_REF(A##n) arg##n
+#define BOOST_THREAD_FWD_REF_ARG(z, n, unused) , BOOST_THREAD_FWD_REF(Arg##n) arg##n
+#define BOOST_THREAD_FWD_PARAM(z, n, unused) , boost::forward<Arg##n>(arg##n)
+#define BOOST_THREAD_FWD_PARAM_A(z, n, unused) , boost::forward<A##n>(arg##n)
+#define BOOST_THREAD_DCL(z, n, unused) Arg##n v##n;
+#define BOOST_THREAD_MOVE_PARAM(z, n, unused) , v##n(boost::move(arg##n))
+#define BOOST_THREAD_FORWARD_PARAM_A(z, n, unused) , v##n(boost::forward<A##n>(arg##n))
+#define BOOST_THREAD_MOVE_RHS_PARAM(z, n, unused) , v##n(boost::move(x.v##n))
+#define BOOST_THREAD_MOVE_DCL(z, n, unused) , boost::move(v##n)
+#define BOOST_THREAD_MOVE_DCL_T(z, n, unused) BOOST_PP_COMMA_IF(n) boost::move(v##n)
+#define BOOST_THREAD_ARG_DEF(z, n, unused) , class Arg##n = tuples::null_type
+
+ template <class Fp, class Arg = tuples::null_type
+ BOOST_PP_REPEAT(BOOST_THREAD_MAX_ARGS, BOOST_THREAD_ARG_DEF, ~)
+ >
+ class invoker;
+
+#define BOOST_THREAD_ASYNC_FUNCT(z, n, unused) \
+ template <class Fp BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class Arg) > \
+ class invoker<Fp BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, Arg)> \
+ { \
+ Fp fp_; \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_DCL, ~) \
+ public: \
+ BOOST_THREAD_MOVABLE_ONLY(invoker) \
+ typedef typename result_of<Fp(BOOST_PP_ENUM_PARAMS(n, Arg))>::type result_type; \
+ \
+ template <class F BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class A) > \
+ BOOST_SYMBOL_VISIBLE \
+ explicit invoker(BOOST_THREAD_FWD_REF(F) f \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_FWD_REF_A, ~) \
+ ) \
+ : fp_(boost::forward<F>(f)) \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_FORWARD_PARAM_A, ~) \
+ {} \
+ \
+ BOOST_SYMBOL_VISIBLE \
+ invoker(BOOST_THREAD_FWD_REF(invoker) x) \
+ : fp_(boost::move(x.fp_)) \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_MOVE_RHS_PARAM, ~) \
+ {} \
+ \
+ result_type operator()() { \
+ return invoke(boost::move(fp_) \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_MOVE_DCL, ~) \
+ ); \
+ } \
+ }; \
+ \
+ template <class R BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class Arg) > \
+ class invoker<R(*)(BOOST_PP_REPEAT(n, BOOST_THREAD_RV_REF_ARG_T, ~)) BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, Arg)> \
+ { \
+ typedef R(*Fp)(BOOST_PP_REPEAT(n, BOOST_THREAD_RV_REF_ARG_T, ~)); \
+ Fp fp_; \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_DCL, ~) \
+ public: \
+ BOOST_THREAD_MOVABLE_ONLY(invoker) \
+ typedef typename result_of<Fp(BOOST_PP_ENUM_PARAMS(n, Arg))>::type result_type; \
+ \
+ template <class R2 BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class A) > \
+ BOOST_SYMBOL_VISIBLE \
+ explicit invoker(R2(*f)(BOOST_PP_REPEAT(n, BOOST_THREAD_RV_REF_A_T, ~)) \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_FWD_REF_A, ~) \
+ ) \
+ : fp_(f) \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_FORWARD_PARAM_A, ~) \
+ {} \
+ \
+ BOOST_SYMBOL_VISIBLE \
+ invoker(BOOST_THREAD_FWD_REF(invoker) x) \
+ : fp_(x.fp_) \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_MOVE_RHS_PARAM, ~) \
+ {} \
+ \
+ result_type operator()() { \
+ return fp_( \
+ BOOST_PP_REPEAT(n, BOOST_THREAD_MOVE_DCL_T, ~) \
+ ); \
+ } \
+ };
+
+ BOOST_PP_REPEAT(BOOST_THREAD_MAX_ARGS, BOOST_THREAD_ASYNC_FUNCT, ~)
+
+ #undef BOOST_THREAD_RV_REF_ARG_T
+ #undef BOOST_THREAD_RV_REF_ARG
+ #undef BOOST_THREAD_FWD_REF_ARG
+ #undef BOOST_THREAD_FWD_REF_A
+ #undef BOOST_THREAD_FWD_PARAM
+ #undef BOOST_THREAD_FWD_PARAM_A
+ #undef BOOST_THREAD_DCL
+ #undef BOOST_THREAD_MOVE_PARAM
+ #undef BOOST_THREAD_MOVE_RHS_PARAM
+ #undef BOOST_THREAD_MOVE_DCL
+ #undef BOOST_THREAD_ARG_DEF
+ #undef BOOST_THREAD_ASYNC_FUNCT
+
+#else
+
+ template <class Fp,
+ class T0 = tuples::null_type, class T1 = tuples::null_type, class T2 = tuples::null_type,
+ class T3 = tuples::null_type, class T4 = tuples::null_type, class T5 = tuples::null_type,
+ class T6 = tuples::null_type, class T7 = tuples::null_type, class T8 = tuples::null_type
+ , class T9 = tuples::null_type
+ >
+ class invoker;
+
+ template <class Fp,
+ class T0 , class T1 , class T2 ,
+ class T3 , class T4 , class T5 ,
+ class T6 , class T7 , class T8 >
+ class invoker<Fp, T0, T1, T2, T3, T4, T5, T6, T7, T8>
+ {
+ Fp fp_;
+ T0 v0_;
+ T1 v1_;
+ T2 v2_;
+ T3 v3_;
+ T4 v4_;
+ T5 v5_;
+ T6 v6_;
+ T7 v7_;
+ T8 v8_;
+ //::boost::tuple<Fp, T0, T1, T2, T3, T4, T5, T6, T7, T8> f_;
+
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(invoker)
+ typedef typename result_of<Fp(T0, T1, T2, T3, T4, T5, T6, T7, T8)>::type result_type;
+
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f
+ , BOOST_THREAD_RV_REF(T0) a0
+ , BOOST_THREAD_RV_REF(T1) a1
+ , BOOST_THREAD_RV_REF(T2) a2
+ , BOOST_THREAD_RV_REF(T3) a3
+ , BOOST_THREAD_RV_REF(T4) a4
+ , BOOST_THREAD_RV_REF(T5) a5
+ , BOOST_THREAD_RV_REF(T6) a6
+ , BOOST_THREAD_RV_REF(T7) a7
+ , BOOST_THREAD_RV_REF(T8) a8
+ )
+ : fp_(boost::move(f))
+ , v0_(boost::move(a0))
+ , v1_(boost::move(a1))
+ , v2_(boost::move(a2))
+ , v3_(boost::move(a3))
+ , v4_(boost::move(a4))
+ , v5_(boost::move(a5))
+ , v6_(boost::move(a6))
+ , v7_(boost::move(a7))
+ , v8_(boost::move(a8))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(BOOST_THREAD_RV(f).fp))
+ , v0_(boost::move(BOOST_THREAD_RV(f).v0_))
+ , v1_(boost::move(BOOST_THREAD_RV(f).v1_))
+ , v2_(boost::move(BOOST_THREAD_RV(f).v2_))
+ , v3_(boost::move(BOOST_THREAD_RV(f).v3_))
+ , v4_(boost::move(BOOST_THREAD_RV(f).v4_))
+ , v5_(boost::move(BOOST_THREAD_RV(f).v5_))
+ , v6_(boost::move(BOOST_THREAD_RV(f).v6_))
+ , v7_(boost::move(BOOST_THREAD_RV(f).v7_))
+ , v8_(boost::move(BOOST_THREAD_RV(f).v8_))
+ {}
+
+ result_type operator()()
+ {
+ return invoke(boost::move(fp_)
+ , boost::move(v0_)
+ , boost::move(v1_)
+ , boost::move(v2_)
+ , boost::move(v3_)
+ , boost::move(v4_)
+ , boost::move(v5_)
+ , boost::move(v6_)
+ , boost::move(v7_)
+ , boost::move(v8_)
+ );
+ }
+ };
+ template <class Fp, class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7 >
+ class invoker<Fp, T0, T1, T2, T3, T4, T5, T6, T7>
+ {
+ Fp fp_;
+ T0 v0_;
+ T1 v1_;
+ T2 v2_;
+ T3 v3_;
+ T4 v4_;
+ T5 v5_;
+ T6 v6_;
+ T7 v7_;
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(invoker)
+ typedef typename result_of<Fp(T0, T1, T2, T3, T4, T5, T6, T7)>::type result_type;
+
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f
+ , BOOST_THREAD_RV_REF(T0) a0
+ , BOOST_THREAD_RV_REF(T1) a1
+ , BOOST_THREAD_RV_REF(T2) a2
+ , BOOST_THREAD_RV_REF(T3) a3
+ , BOOST_THREAD_RV_REF(T4) a4
+ , BOOST_THREAD_RV_REF(T5) a5
+ , BOOST_THREAD_RV_REF(T6) a6
+ , BOOST_THREAD_RV_REF(T7) a7
+ )
+ : fp_(boost::move(f))
+ , v0_(boost::move(a0))
+ , v1_(boost::move(a1))
+ , v2_(boost::move(a2))
+ , v3_(boost::move(a3))
+ , v4_(boost::move(a4))
+ , v5_(boost::move(a5))
+ , v6_(boost::move(a6))
+ , v7_(boost::move(a7))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(BOOST_THREAD_RV(f).fp))
+ , v0_(boost::move(BOOST_THREAD_RV(f).v0_))
+ , v1_(boost::move(BOOST_THREAD_RV(f).v1_))
+ , v2_(boost::move(BOOST_THREAD_RV(f).v2_))
+ , v3_(boost::move(BOOST_THREAD_RV(f).v3_))
+ , v4_(boost::move(BOOST_THREAD_RV(f).v4_))
+ , v5_(boost::move(BOOST_THREAD_RV(f).v5_))
+ , v6_(boost::move(BOOST_THREAD_RV(f).v6_))
+ , v7_(boost::move(BOOST_THREAD_RV(f).v7_))
+ {}
+
+ result_type operator()()
+ {
+ return invoke(boost::move(fp_)
+ , boost::move(v0_)
+ , boost::move(v1_)
+ , boost::move(v2_)
+ , boost::move(v3_)
+ , boost::move(v4_)
+ , boost::move(v5_)
+ , boost::move(v6_)
+ , boost::move(v7_)
+ );
+ }
+ };
+ template <class Fp, class T0, class T1, class T2, class T3, class T4, class T5, class T6>
+ class invoker<Fp, T0, T1, T2, T3, T4, T5, T6>
+ {
+ Fp fp_;
+ T0 v0_;
+ T1 v1_;
+ T2 v2_;
+ T3 v3_;
+ T4 v4_;
+ T5 v5_;
+ T6 v6_;
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(invoker)
+ typedef typename result_of<Fp(T0, T1, T2, T3, T4, T5, T6)>::type result_type;
+
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f
+ , BOOST_THREAD_RV_REF(T0) a0
+ , BOOST_THREAD_RV_REF(T1) a1
+ , BOOST_THREAD_RV_REF(T2) a2
+ , BOOST_THREAD_RV_REF(T3) a3
+ , BOOST_THREAD_RV_REF(T4) a4
+ , BOOST_THREAD_RV_REF(T5) a5
+ , BOOST_THREAD_RV_REF(T6) a6
+ )
+ : fp_(boost::move(f))
+ , v0_(boost::move(a0))
+ , v1_(boost::move(a1))
+ , v2_(boost::move(a2))
+ , v3_(boost::move(a3))
+ , v4_(boost::move(a4))
+ , v5_(boost::move(a5))
+ , v6_(boost::move(a6))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(BOOST_THREAD_RV(f).fp))
+ , v0_(boost::move(BOOST_THREAD_RV(f).v0_))
+ , v1_(boost::move(BOOST_THREAD_RV(f).v1_))
+ , v2_(boost::move(BOOST_THREAD_RV(f).v2_))
+ , v3_(boost::move(BOOST_THREAD_RV(f).v3_))
+ , v4_(boost::move(BOOST_THREAD_RV(f).v4_))
+ , v5_(boost::move(BOOST_THREAD_RV(f).v5_))
+ , v6_(boost::move(BOOST_THREAD_RV(f).v6_))
+ {}
+
+ result_type operator()()
+ {
+ return invoke(boost::move(fp_)
+ , boost::move(v0_)
+ , boost::move(v1_)
+ , boost::move(v2_)
+ , boost::move(v3_)
+ , boost::move(v4_)
+ , boost::move(v5_)
+ , boost::move(v6_)
+ );
+ }
+ };
+ template <class Fp, class T0, class T1, class T2, class T3, class T4, class T5>
+ class invoker<Fp, T0, T1, T2, T3, T4, T5>
+ {
+ Fp fp_;
+ T0 v0_;
+ T1 v1_;
+ T2 v2_;
+ T3 v3_;
+ T4 v4_;
+ T5 v5_;
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(invoker)
+ typedef typename result_of<Fp(T0, T1, T2, T3, T4, T5)>::type result_type;
+
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f
+ , BOOST_THREAD_RV_REF(T0) a0
+ , BOOST_THREAD_RV_REF(T1) a1
+ , BOOST_THREAD_RV_REF(T2) a2
+ , BOOST_THREAD_RV_REF(T3) a3
+ , BOOST_THREAD_RV_REF(T4) a4
+ , BOOST_THREAD_RV_REF(T5) a5
+ )
+ : fp_(boost::move(f))
+ , v0_(boost::move(a0))
+ , v1_(boost::move(a1))
+ , v2_(boost::move(a2))
+ , v3_(boost::move(a3))
+ , v4_(boost::move(a4))
+ , v5_(boost::move(a5))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(BOOST_THREAD_RV(f).fp))
+ , v0_(boost::move(BOOST_THREAD_RV(f).v0_))
+ , v1_(boost::move(BOOST_THREAD_RV(f).v1_))
+ , v2_(boost::move(BOOST_THREAD_RV(f).v2_))
+ , v3_(boost::move(BOOST_THREAD_RV(f).v3_))
+ , v4_(boost::move(BOOST_THREAD_RV(f).v4_))
+ , v5_(boost::move(BOOST_THREAD_RV(f).v5_))
+ {}
+
+ result_type operator()()
+ {
+ return invoke(boost::move(fp_)
+ , boost::move(v0_)
+ , boost::move(v1_)
+ , boost::move(v2_)
+ , boost::move(v3_)
+ , boost::move(v4_)
+ , boost::move(v5_)
+ );
+ }
+ };
+ template <class Fp, class T0, class T1, class T2, class T3, class T4>
+ class invoker<Fp, T0, T1, T2, T3, T4>
+ {
+ Fp fp_;
+ T0 v0_;
+ T1 v1_;
+ T2 v2_;
+ T3 v3_;
+ T4 v4_;
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(invoker)
+ typedef typename result_of<Fp(T0, T1, T2, T3, T4)>::type result_type;
+
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f
+ , BOOST_THREAD_RV_REF(T0) a0
+ , BOOST_THREAD_RV_REF(T1) a1
+ , BOOST_THREAD_RV_REF(T2) a2
+ , BOOST_THREAD_RV_REF(T3) a3
+ , BOOST_THREAD_RV_REF(T4) a4
+ )
+ : fp_(boost::move(f))
+ , v0_(boost::move(a0))
+ , v1_(boost::move(a1))
+ , v2_(boost::move(a2))
+ , v3_(boost::move(a3))
+ , v4_(boost::move(a4))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(BOOST_THREAD_RV(f).fp))
+ , v0_(boost::move(BOOST_THREAD_RV(f).v0_))
+ , v1_(boost::move(BOOST_THREAD_RV(f).v1_))
+ , v2_(boost::move(BOOST_THREAD_RV(f).v2_))
+ , v3_(boost::move(BOOST_THREAD_RV(f).v3_))
+ , v4_(boost::move(BOOST_THREAD_RV(f).v4_))
+ {}
+
+ result_type operator()()
+ {
+ return invoke(boost::move(fp_)
+ , boost::move(v0_)
+ , boost::move(v1_)
+ , boost::move(v2_)
+ , boost::move(v3_)
+ , boost::move(v4_)
+ );
+ }
+ };
+ template <class Fp, class T0, class T1, class T2, class T3>
+ class invoker<Fp, T0, T1, T2, T3>
+ {
+ Fp fp_;
+ T0 v0_;
+ T1 v1_;
+ T2 v2_;
+ T3 v3_;
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(invoker)
+ typedef typename result_of<Fp(T0, T1, T2, T3)>::type result_type;
+
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f
+ , BOOST_THREAD_RV_REF(T0) a0
+ , BOOST_THREAD_RV_REF(T1) a1
+ , BOOST_THREAD_RV_REF(T2) a2
+ , BOOST_THREAD_RV_REF(T3) a3
+ )
+ : fp_(boost::move(f))
+ , v0_(boost::move(a0))
+ , v1_(boost::move(a1))
+ , v2_(boost::move(a2))
+ , v3_(boost::move(a3))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(BOOST_THREAD_RV(f).fp))
+ , v0_(boost::move(BOOST_THREAD_RV(f).v0_))
+ , v1_(boost::move(BOOST_THREAD_RV(f).v1_))
+ , v2_(boost::move(BOOST_THREAD_RV(f).v2_))
+ , v3_(boost::move(BOOST_THREAD_RV(f).v3_))
+ {}
+
+ result_type operator()()
+ {
+ return invoke(boost::move(fp_)
+ , boost::move(v0_)
+ , boost::move(v1_)
+ , boost::move(v2_)
+ , boost::move(v3_)
+ );
+ }
+ };
+ template <class Fp, class T0, class T1, class T2>
+ class invoker<Fp, T0, T1, T2>
+ {
+ Fp fp_;
+ T0 v0_;
+ T1 v1_;
+ T2 v2_;
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(invoker)
+ typedef typename result_of<Fp(T0, T1, T2)>::type result_type;
+
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f
+ , BOOST_THREAD_RV_REF(T0) a0
+ , BOOST_THREAD_RV_REF(T1) a1
+ , BOOST_THREAD_RV_REF(T2) a2
+ )
+ : fp_(boost::move(f))
+ , v0_(boost::move(a0))
+ , v1_(boost::move(a1))
+ , v2_(boost::move(a2))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(BOOST_THREAD_RV(f).fp))
+ , v0_(boost::move(BOOST_THREAD_RV(f).v0_))
+ , v1_(boost::move(BOOST_THREAD_RV(f).v1_))
+ , v2_(boost::move(BOOST_THREAD_RV(f).v2_))
+ {}
+
+ result_type operator()()
+ {
+ return invoke(boost::move(fp_)
+ , boost::move(v0_)
+ , boost::move(v1_)
+ , boost::move(v2_)
+ );
+ }
+ };
+ template <class Fp, class T0, class T1>
+ class invoker<Fp, T0, T1>
+ {
+ Fp fp_;
+ T0 v0_;
+ T1 v1_;
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(invoker)
+ typedef typename result_of<Fp(T0, T1)>::type result_type;
+
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f
+ , BOOST_THREAD_RV_REF(T0) a0
+ , BOOST_THREAD_RV_REF(T1) a1
+ )
+ : fp_(boost::move(f))
+ , v0_(boost::move(a0))
+ , v1_(boost::move(a1))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(BOOST_THREAD_RV(f).fp))
+ , v0_(boost::move(BOOST_THREAD_RV(f).v0_))
+ , v1_(boost::move(BOOST_THREAD_RV(f).v1_))
+ {}
+
+ result_type operator()()
+ {
+ return invoke(boost::move(fp_)
+ , boost::move(v0_)
+ , boost::move(v1_)
+ );
+ }
+ };
+ template <class Fp, class T0>
+ class invoker<Fp, T0>
+ {
+ Fp fp_;
+ T0 v0_;
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(invoker)
+ typedef typename result_of<Fp(T0)>::type result_type;
+
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f
+ , BOOST_THREAD_RV_REF(T0) a0
+ )
+ : fp_(boost::move(f))
+ , v0_(boost::move(a0))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(BOOST_THREAD_RV(f).fp))
+ , v0_(boost::move(BOOST_THREAD_RV(f).v0_))
+ {}
+
+ result_type operator()()
+ {
+ return invoke(boost::move(fp_)
+ , boost::move(v0_)
+ );
+ }
+ };
+ template <class Fp>
+ class invoker<Fp>
+ {
+ Fp fp_;
+ public:
+ BOOST_THREAD_COPYABLE_AND_MOVABLE(invoker)
+ typedef typename result_of<Fp()>::type result_type;
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(BOOST_THREAD_FWD_REF(Fp) f)
+ : fp_(boost::move(f))
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(boost::move(f.fp_))
+ {}
+ result_type operator()()
+ {
+ return fp_();
+ }
+ };
+ template <class R>
+ class invoker<R(*)()>
+ {
+ typedef R(*Fp)();
+ Fp fp_;
+ public:
+ BOOST_THREAD_COPYABLE_AND_MOVABLE(invoker)
+ typedef typename result_of<Fp()>::type result_type;
+ BOOST_SYMBOL_VISIBLE
+ explicit invoker(Fp f)
+ : fp_(f)
+ {}
+
+ BOOST_SYMBOL_VISIBLE
+ invoker(BOOST_THREAD_FWD_REF(invoker) f)
+ : fp_(f.fp_)
+ {}
+ result_type operator()()
+ {
+ return fp_();
+ }
+ };
+#endif
+#endif
+
+ }
+}
+
+#include <boost/thread/detail/variadic_footer.hpp>
+
+#endif // header
diff --git a/3party/boost/boost/thread/detail/is_convertible.hpp b/3party/boost/boost/thread/detail/is_convertible.hpp
index 6ed715af9e..b77620cf17 100644
--- a/3party/boost/boost/thread/detail/is_convertible.hpp
+++ b/3party/boost/boost/thread/detail/is_convertible.hpp
@@ -1,8 +1,9 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright 2011-2012 Vicente J. Botet Escriba
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// Copyright (C) 2011-2013 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/thread for documentation.
//
diff --git a/3party/boost/boost/thread/detail/memory.hpp b/3party/boost/boost/thread/detail/memory.hpp
index 3c1692d0e1..51ce84f40b 100644
--- a/3party/boost/boost/thread/detail/memory.hpp
+++ b/3party/boost/boost/thread/detail/memory.hpp
@@ -1,8 +1,9 @@
//////////////////////////////////////////////////////////////////////////////
//
-// (C) Copyright 2011-2012 Vicente J. Botet Escriba
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// Copyright (C) 2011-2013 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/thread for documentation.
//
@@ -12,14 +13,11 @@
#define BOOST_THREAD_DETAIL_MEMORY_HPP
#include <boost/config.hpp>
-#include <boost/container/allocator_traits.hpp>
-#include <boost/container/scoped_allocator.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/is_scalar.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/static_assert.hpp>
+
+#include <boost/thread/csbl/memory/pointer_traits.hpp>
+#include <boost/thread/csbl/memory/allocator_arg.hpp>
+#include <boost/thread/csbl/memory/allocator_traits.hpp>
+#include <boost/thread/csbl/memory/scoped_allocator.hpp>
namespace boost
{
@@ -28,7 +26,7 @@ namespace boost
template <class _Alloc>
class allocator_destructor
{
- typedef container::allocator_traits<_Alloc> alloc_traits;
+ typedef csbl::allocator_traits<_Alloc> alloc_traits;
public:
typedef typename alloc_traits::pointer pointer;
typedef typename alloc_traits::size_type size_type;
@@ -46,111 +44,5 @@ namespace boost
}
};
} //namespace thread_detail
-
- typedef container::allocator_arg_t allocator_arg_t;
- BOOST_CONSTEXPR_OR_CONST allocator_arg_t allocator_arg = {};
-
- template <class T, class Alloc>
- struct uses_allocator: public container::uses_allocator<T, Alloc>
- {
- };
-
- template <class Ptr>
- struct pointer_traits
- {
- typedef Ptr pointer;
-// typedef <details> element_type;
-// typedef <details> difference_type;
-
-// template <class U> using rebind = <details>;
-//
-// static pointer pointer_to(<details>);
- };
-
- template <class T>
- struct pointer_traits<T*>
- {
- typedef T* pointer;
- typedef T element_type;
- typedef ptrdiff_t difference_type;
-
-// template <class U> using rebind = U*;
-//
-// static pointer pointer_to(<details>) noexcept;
- };
-
-
- namespace thread_detail {
- template <class _Ptr1, class _Ptr2,
- bool = is_same<typename remove_cv<typename pointer_traits<_Ptr1>::element_type>::type,
- typename remove_cv<typename pointer_traits<_Ptr2>::element_type>::type
- >::value
- >
- struct same_or_less_cv_qualified_imp
- : is_convertible<_Ptr1, _Ptr2> {};
-
- template <class _Ptr1, class _Ptr2>
- struct same_or_less_cv_qualified_imp<_Ptr1, _Ptr2, false>
- : false_type {};
-
- template <class _Ptr1, class _Ptr2, bool = is_scalar<_Ptr1>::value &&
- !is_pointer<_Ptr1>::value>
- struct same_or_less_cv_qualified
- : same_or_less_cv_qualified_imp<_Ptr1, _Ptr2> {};
-
- template <class _Ptr1, class _Ptr2>
- struct same_or_less_cv_qualified<_Ptr1, _Ptr2, true>
- : false_type {};
-
- }
- template <class T>
- 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 <class U>
- BOOST_SYMBOL_VISIBLE
- default_delete(const default_delete<U>&,
- typename enable_if<is_convertible<U*, T*> >::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 <class T>
- struct BOOST_SYMBOL_VISIBLE default_delete<T[]>
- {
- 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 <class U>
- BOOST_SYMBOL_VISIBLE
- default_delete(const default_delete<U[]>&,
- typename enable_if<thread_detail::same_or_less_cv_qualified<U*, T*> >::type* = 0) BOOST_NOEXCEPT {}
- template <class U>
- BOOST_SYMBOL_VISIBLE
- void operator() (U* ptr,
- typename enable_if<thread_detail::same_or_less_cv_qualified<U*, T*> >::type* = 0) const BOOST_NOEXCEPT
- {
- BOOST_STATIC_ASSERT_MSG(sizeof(T) > 0, "default_delete can not delete incomplete type");
- delete [] ptr;
- }
- };
-
-} // namespace boost
-
-
+}
#endif // BOOST_THREAD_DETAIL_MEMORY_HPP
diff --git a/3party/boost/boost/thread/detail/move.hpp b/3party/boost/boost/thread/detail/move.hpp
index 4f90d3b3df..c3339ef905 100644
--- a/3party/boost/boost/thread/detail/move.hpp
+++ b/3party/boost/boost/thread/detail/move.hpp
@@ -9,18 +9,27 @@
#include <boost/thread/detail/config.hpp>
#ifndef BOOST_NO_SFINAE
-#include <boost/utility/enable_if.hpp>
+#include <boost/core/enable_if.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/conditional.hpp>
+#include <boost/type_traits/remove_extent.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/decay.hpp>
#endif
#include <boost/thread/detail/delete.hpp>
#include <boost/move/utility.hpp>
#include <boost/move/traits.hpp>
#include <boost/config/abi_prefix.hpp>
-
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+#include <type_traits>
+#endif
namespace boost
{
@@ -237,9 +246,52 @@ namespace detail
namespace boost
-{ namespace thread_detail
+{
+ namespace thread_detail
{
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ template <class Tp>
+ struct remove_reference : boost::remove_reference<Tp> {};
+ template <class Tp>
+ struct decay : boost::decay<Tp> {};
+#else
+ template <class Tp>
+ struct remove_reference
+ {
+ typedef Tp type;
+ };
+ template <class Tp>
+ struct remove_reference<Tp&>
+ {
+ typedef Tp type;
+ };
+ template <class Tp>
+ struct remove_reference< rv<Tp> > {
+ typedef Tp type;
+ };
+
+ template <class Tp>
+ struct decay
+ {
+ private:
+ typedef typename boost::move_detail::remove_rvalue_reference<Tp>::type Up0;
+ typedef typename boost::remove_reference<Up0>::type Up;
+ public:
+ typedef typename conditional
+ <
+ is_array<Up>::value,
+ typename remove_extent<Up>::type*,
+ typename conditional
+ <
+ is_function<Up>::value,
+ typename add_pointer<Up>::type,
+ typename remove_cv<Up>::type
+ >::type
+ >::type type;
+ };
+#endif
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template <class T>
typename decay<T>::type
decay_copy(T&& t)
diff --git a/3party/boost/boost/thread/detail/nullary_function.hpp b/3party/boost/boost/thread/detail/nullary_function.hpp
new file mode 100644
index 0000000000..26d1390068
--- /dev/null
+++ b/3party/boost/boost/thread/detail/nullary_function.hpp
@@ -0,0 +1,213 @@
+// Copyright (C) 2013 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)
+//
+// 2013/09 Vicente J. Botet Escriba
+// Adapt to boost from CCIA C++11 implementation
+// Make use of Boost.Move
+
+#ifndef BOOST_THREAD_DETAIL_NULLARY_FUNCTION_HPP
+#define BOOST_THREAD_DETAIL_NULLARY_FUNCTION_HPP
+
+#include <boost/config.hpp>
+#include <boost/thread/detail/memory.hpp>
+#include <boost/thread/detail/move.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/type_traits/decay.hpp>
+
+namespace boost
+{
+ namespace detail
+ {
+
+ template <typename F>
+ class nullary_function;
+ template <>
+ class nullary_function<void()>
+ {
+ struct impl_base
+ {
+ virtual void call()=0;
+ virtual ~impl_base()
+ {
+ }
+ };
+ shared_ptr<impl_base> impl;
+ template <typename F>
+ struct impl_type: impl_base
+ {
+ F f;
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ impl_type(F &f_)
+ : f(f_)
+ {}
+#endif
+ impl_type(BOOST_THREAD_RV_REF(F) f_)
+ : f(boost::move(f_))
+ {}
+
+ void call()
+ {
+ f();
+ }
+ };
+ struct impl_type_ptr: impl_base
+ {
+ void (*f)();
+ impl_type_ptr(void (*f_)())
+ : f(f_)
+ {}
+ void call()
+ {
+ f();
+ }
+ };
+ public:
+ BOOST_THREAD_MOVABLE(nullary_function)
+
+ explicit nullary_function(void (*f)()):
+ impl(new impl_type_ptr(f))
+ {}
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ template<typename F>
+ explicit nullary_function(F& f):
+ impl(new impl_type<F>(f))
+ {}
+#endif
+ template<typename F>
+ nullary_function(BOOST_THREAD_RV_REF(F) f):
+ impl(new impl_type<typename decay<F>::type>(thread_detail::decay_copy(boost::forward<F>(f))))
+ {}
+
+ nullary_function()
+ : impl()
+ {
+ }
+ nullary_function(nullary_function const& other) BOOST_NOEXCEPT :
+ impl(other.impl)
+ {
+ }
+ nullary_function(BOOST_THREAD_RV_REF(nullary_function) other) BOOST_NOEXCEPT :
+ impl(BOOST_THREAD_RV(other).impl)
+ {
+ BOOST_THREAD_RV(other).impl.reset();
+ }
+ ~nullary_function()
+ {
+ }
+
+ nullary_function& operator=(nullary_function const& other) BOOST_NOEXCEPT
+ {
+ impl=other.impl;
+ return *this;
+ }
+ nullary_function& operator=(BOOST_THREAD_RV_REF(nullary_function) other) BOOST_NOEXCEPT
+ {
+ impl=BOOST_THREAD_RV(other).impl;
+ BOOST_THREAD_RV(other).impl.reset();
+ return *this;
+ }
+
+
+ void operator()()
+ { impl->call();}
+
+ };
+
+ template <typename R>
+ class nullary_function<R()>
+ {
+ struct impl_base
+ {
+ virtual R call()=0;
+ virtual ~impl_base()
+ {
+ }
+ };
+ shared_ptr<impl_base> impl;
+ template <typename F>
+ struct impl_type: impl_base
+ {
+ F f;
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ impl_type(F &f_)
+ : f(f_)
+ {}
+#endif
+ impl_type(BOOST_THREAD_RV_REF(F) f_)
+ : f(boost::move(f_))
+ {}
+
+ R call()
+ {
+ return f();
+ }
+ };
+ struct impl_type_ptr: impl_base
+ {
+ R (*f)();
+ impl_type_ptr(R (*f_)())
+ : f(f_)
+ {}
+
+ R call()
+ {
+ return f();
+ }
+ };
+ public:
+ BOOST_THREAD_MOVABLE(nullary_function)
+
+ nullary_function(R (*f)()):
+ impl(new impl_type_ptr(f))
+ {}
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ template<typename F>
+ nullary_function(F& f):
+ impl(new impl_type<F>(f))
+ {}
+#endif
+ template<typename F>
+ nullary_function(BOOST_THREAD_RV_REF(F) f):
+ impl(new impl_type<typename decay<F>::type>(thread_detail::decay_copy(boost::forward<F>(f))))
+ {}
+
+ nullary_function(nullary_function const& other) BOOST_NOEXCEPT :
+ impl(other.impl)
+ {
+ }
+ nullary_function(BOOST_THREAD_RV_REF(nullary_function) other) BOOST_NOEXCEPT :
+ impl(BOOST_THREAD_RV(other).impl)
+ {
+ BOOST_THREAD_RV(other).impl.reset();
+ }
+ nullary_function()
+ : impl()
+ {
+ }
+ ~nullary_function()
+ {
+ }
+
+ nullary_function& operator=(nullary_function const& other) BOOST_NOEXCEPT
+ {
+ impl=other.impl;
+ return *this;
+ }
+ nullary_function& operator=(BOOST_THREAD_RV_REF(nullary_function) other) BOOST_NOEXCEPT
+ {
+ impl=BOOST_THREAD_RV(other).impl;
+ BOOST_THREAD_RV(other).impl.reset();
+ return *this;
+ }
+
+ R operator()()
+ { return impl->call();}
+
+ };
+ }
+}
+
+#endif // header
diff --git a/3party/boost/boost/thread/detail/thread.hpp b/3party/boost/boost/thread/detail/thread.hpp
index e65d76b081..520ca267db 100644
--- a/3party/boost/boost/thread/detail/thread.hpp
+++ b/3party/boost/boost/thread/detail/thread.hpp
@@ -4,7 +4,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// (C) Copyright 2007-2010 Anthony Williams
-// (C) Copyright 20011-2012 Vicente J. Botet Escriba
+// (C) Copyright 2011-2012 Vicente J. Botet Escriba
#include <boost/thread/detail/config.hpp>
@@ -24,12 +24,12 @@
#include <boost/assert.hpp>
#include <list>
#include <algorithm>
-#include <boost/ref.hpp>
+#include <boost/core/ref.hpp>
#include <boost/cstdint.hpp>
#include <boost/bind.hpp>
#include <stdlib.h>
#include <memory>
-#include <boost/utility/enable_if.hpp>
+#include <boost/core/enable_if.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/io/ios_state.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -64,11 +64,9 @@ namespace boost
{
public:
BOOST_THREAD_NO_COPYABLE(thread_data)
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
thread_data(BOOST_THREAD_RV_REF(F) f_, BOOST_THREAD_RV_REF(ArgTypes)... args_):
fp(boost::forward<F>(f_), boost::forward<ArgTypes>(args_)...)
{}
-#endif
template <std::size_t ...Indices>
void run2(tuple_indices<Indices...>)
{
@@ -174,7 +172,7 @@ namespace boost
private:
bool start_thread_noexcept();
bool start_thread_noexcept(const attributes& attr);
- public:
+ //public:
void start_thread()
{
if (!start_thread_noexcept())
@@ -334,7 +332,7 @@ namespace boost
start_thread(attrs);
}
#endif
- thread(BOOST_THREAD_RV_REF(thread) x)
+ thread(BOOST_THREAD_RV_REF(thread) x) BOOST_NOEXCEPT
{
thread_info=BOOST_THREAD_RV(x).thread_info;
BOOST_THREAD_RV(x).thread_info.reset();
@@ -466,11 +464,20 @@ namespace boost
inline void join();
#ifdef BOOST_THREAD_USES_CHRONO
+#if defined(BOOST_THREAD_PLATFORM_WIN32)
+ template <class Rep, class Period>
+ bool try_join_for(const chrono::duration<Rep, Period>& rel_time)
+ {
+ chrono::milliseconds rel_time2= chrono::ceil<chrono::milliseconds>(rel_time);
+ return do_try_join_until(rel_time2.count());
+ }
+#else
template <class Rep, class Period>
bool try_join_for(const chrono::duration<Rep, Period>& rel_time)
{
return try_join_until(chrono::steady_clock::now() + rel_time);
}
+#endif
template <class Clock, class Duration>
bool try_join_until(const chrono::time_point<Clock, Duration>& t)
{
@@ -546,6 +553,7 @@ namespace boost
void detach();
static unsigned hardware_concurrency() BOOST_NOEXCEPT;
+ static unsigned physical_concurrency() BOOST_NOEXCEPT;
#define BOOST_THREAD_DEFINES_THREAD_NATIVE_HANDLE
typedef detail::thread_data_base::native_handle_type native_handle_type;
@@ -749,10 +757,10 @@ namespace boost
#endif
void thread::join() {
if (this_thread::get_id() == get_id())
- boost::throw_exception(thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself"));
+ boost::throw_exception(thread_resource_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost thread: trying joining itself"));
BOOST_THREAD_VERIFY_PRECONDITION( join_noexcept(),
- thread_resource_error(system::errc::invalid_argument, "boost thread: thread not joinable")
+ thread_resource_error(static_cast<int>(system::errc::invalid_argument), "boost thread: thread not joinable")
);
}
@@ -763,7 +771,7 @@ namespace boost
#endif
{
if (this_thread::get_id() == get_id())
- boost::throw_exception(thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself"));
+ boost::throw_exception(thread_resource_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost thread: trying joining itself"));
bool res;
if (do_try_join_until_noexcept(timeout, res))
{
@@ -772,7 +780,7 @@ namespace boost
else
{
BOOST_THREAD_THROW_ELSE_RETURN(
- (thread_resource_error(system::errc::invalid_argument, "boost thread: thread not joinable")),
+ (thread_resource_error(static_cast<int>(system::errc::invalid_argument), "boost thread: thread not joinable")),
false
);
}
@@ -826,6 +834,19 @@ namespace boost
};
void BOOST_THREAD_DECL add_thread_exit_function(thread_exit_function_base*);
+ struct shared_state_base;
+#if defined(BOOST_THREAD_PLATFORM_WIN32)
+ inline void make_ready_at_thread_exit(shared_ptr<shared_state_base> as)
+ {
+ detail::thread_data_base* const current_thread_data(detail::get_current_thread_data());
+ if(current_thread_data)
+ {
+ current_thread_data->make_ready_at_thread_exit(as);
+ }
+ }
+#else
+ void BOOST_THREAD_DECL make_ready_at_thread_exit(shared_ptr<shared_state_base> as);
+#endif
}
namespace this_thread
diff --git a/3party/boost/boost/thread/detail/thread_group.hpp b/3party/boost/boost/thread/detail/thread_group.hpp
index 3c0ee8610e..69ce991e78 100644
--- a/3party/boost/boost/thread/detail/thread_group.hpp
+++ b/3party/boost/boost/thread/detail/thread_group.hpp
@@ -85,7 +85,7 @@ namespace boost
if(thrd)
{
BOOST_THREAD_ASSERT_PRECONDITION( ! is_thread_in(thrd) ,
- thread_resource_error(system::errc::resource_deadlock_would_occur, "boost::thread_group: trying to add a duplicated thread")
+ thread_resource_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost::thread_group: trying to add a duplicated thread")
);
boost::lock_guard<shared_mutex> guard(m);
@@ -106,7 +106,7 @@ namespace boost
void join_all()
{
BOOST_THREAD_ASSERT_PRECONDITION( ! is_this_thread_in() ,
- thread_resource_error(system::errc::resource_deadlock_would_occur, "boost::thread_group: trying joining itself")
+ thread_resource_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost::thread_group: trying joining itself")
);
boost::shared_lock<shared_mutex> guard(m);
diff --git a/3party/boost/boost/thread/detail/variadic_footer.hpp b/3party/boost/boost/thread/detail/variadic_footer.hpp
new file mode 100644
index 0000000000..9ae25a847c
--- /dev/null
+++ b/3party/boost/boost/thread/detail/variadic_footer.hpp
@@ -0,0 +1,10 @@
+// Copyright (C) 2013 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)
+
+
+#if defined BOOST_NO_CXX11_VARIADIC_TEMPLATES
+
+
+#endif
diff --git a/3party/boost/boost/thread/detail/variadic_header.hpp b/3party/boost/boost/thread/detail/variadic_header.hpp
new file mode 100644
index 0000000000..8015ae33cc
--- /dev/null
+++ b/3party/boost/boost/thread/detail/variadic_header.hpp
@@ -0,0 +1,19 @@
+// Copyright (C) 2013 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 <boost/config.hpp>
+
+//#if defined BOOST_NO_CXX11_VARIADIC_TEMPLATES
+
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+#ifndef BOOST_THREAD_MAX_ARGS
+#define BOOST_THREAD_MAX_ARGS 9
+#endif
+
+//#endif
+
diff --git a/3party/boost/boost/thread/detail/work.hpp b/3party/boost/boost/thread/detail/work.hpp
new file mode 100644
index 0000000000..1e10c837bb
--- /dev/null
+++ b/3party/boost/boost/thread/detail/work.hpp
@@ -0,0 +1,23 @@
+// (C) Copyright 2013 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)
+
+#ifndef BOOST_THREAD_DETAIL_WORK_HPP
+#define BOOST_THREAD_DETAIL_WORK_HPP
+
+
+#include <boost/thread/detail/nullary_function.hpp>
+
+namespace boost
+{
+ namespace thread_detail
+ {
+
+ typedef detail::nullary_function<void()> work;
+ }
+
+} // namespace boost
+
+#endif // BOOST_THREAD_DETAIL_MEMORY_HPP
diff --git a/3party/boost/boost/thread/exceptional_ptr.hpp b/3party/boost/boost/thread/exceptional_ptr.hpp
new file mode 100644
index 0000000000..49547923d9
--- /dev/null
+++ b/3party/boost/boost/thread/exceptional_ptr.hpp
@@ -0,0 +1,44 @@
+// 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)
+// (C) Copyright 2014 Vicente J. Botet Escriba
+
+#ifndef BOOST_THREAD_EXCEPTIONAL_PTR_HPP
+#define BOOST_THREAD_EXCEPTIONAL_PTR_HPP
+
+#include <boost/thread/detail/move.hpp>
+#include <boost/exception_ptr.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+ struct exceptional_ptr {
+ exception_ptr ptr_;
+
+ exceptional_ptr() : ptr_() {}
+ explicit exceptional_ptr(exception_ptr ex) : ptr_(ex) {}
+ template <class E>
+ explicit exceptional_ptr(BOOST_FWD_REF(E) ex) : ptr_(boost::copy_exception(boost::forward<E>(ex))) {}
+ };
+
+ template <class E>
+ inline exceptional_ptr make_exceptional(BOOST_FWD_REF(E) ex) {
+ return exceptional_ptr(boost::forward<E>(ex));
+ }
+
+ inline exceptional_ptr make_exceptional(exception_ptr ex)
+ {
+ return exceptional_ptr(ex);
+ }
+
+ inline exceptional_ptr make_exceptional()
+ {
+ return exceptional_ptr();
+ }
+
+} // namespace boost
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/exceptions.hpp b/3party/boost/boost/thread/exceptions.hpp
index 2d129cff21..d97465b754 100644
--- a/3party/boost/boost/thread/exceptions.hpp
+++ b/3party/boost/boost/thread/exceptions.hpp
@@ -124,7 +124,7 @@ namespace boost
typedef thread_exception base_type;
public:
thread_resource_error()
- : base_type(system::errc::resource_unavailable_try_again, "boost::thread_resource_error")
+ : base_type(static_cast<int>(system::errc::resource_unavailable_try_again), "boost::thread_resource_error")
{}
thread_resource_error( int ev )
@@ -152,7 +152,7 @@ namespace boost
typedef thread_exception base_type;
public:
unsupported_thread_option()
- : base_type(system::errc::invalid_argument, "boost::unsupported_thread_option")
+ : base_type(static_cast<int>(system::errc::invalid_argument), "boost::unsupported_thread_option")
{}
unsupported_thread_option( int ev )
@@ -176,7 +176,7 @@ namespace boost
typedef thread_exception base_type;
public:
invalid_thread_argument()
- : base_type(system::errc::invalid_argument, "boost::invalid_thread_argument")
+ : base_type(static_cast<int>(system::errc::invalid_argument), "boost::invalid_thread_argument")
{}
invalid_thread_argument( int ev )
@@ -200,7 +200,7 @@ namespace boost
typedef thread_exception base_type;
public:
thread_permission_error()
- : base_type(system::errc::permission_denied, "boost::thread_permission_error")
+ : base_type(static_cast<int>(system::errc::permission_denied), "boost::thread_permission_error")
{}
thread_permission_error( int ev )
diff --git a/3party/boost/boost/thread/executor.hpp b/3party/boost/boost/thread/executor.hpp
new file mode 100644
index 0000000000..c2b85a0eab
--- /dev/null
+++ b/3party/boost/boost/thread/executor.hpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2013 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)
+//
+// 2013/09 Vicente J. Botet Escriba
+// Adapt to boost from CCIA C++11 implementation
+
+#ifndef BOOST_THREAD_EXECUTOR_HPP
+#define BOOST_THREAD_EXECUTOR_HPP
+
+#include <boost/thread/executors/executor.hpp>
+#include <boost/thread/executors/executor_adaptor.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/executors/basic_thread_pool.hpp b/3party/boost/boost/thread/executors/basic_thread_pool.hpp
new file mode 100644
index 0000000000..47900fcdef
--- /dev/null
+++ b/3party/boost/boost/thread/executors/basic_thread_pool.hpp
@@ -0,0 +1,326 @@
+// Copyright (C) 2013 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)
+//
+// 2013/09 Vicente J. Botet Escriba
+// Adapt to boost from CCIA C++11 implementation
+// first implementation of a simple pool thread using a vector of threads and a sync_queue.
+
+#ifndef BOOST_THREAD_EXECUTORS_BASIC_THREAD_POOL_HPP
+#define BOOST_THREAD_EXECUTORS_BASIC_THREAD_POOL_HPP
+
+#include <boost/thread/detail/config.hpp>
+#include <boost/thread/detail/delete.hpp>
+#include <boost/thread/detail/move.hpp>
+#include <boost/thread/scoped_thread.hpp>
+#include <boost/thread/sync_queue.hpp>
+#include <boost/thread/executors/work.hpp>
+#include <boost/thread/csbl/vector.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+namespace executors
+{
+ class basic_thread_pool
+ {
+ public:
+ /// type-erasure to store the works to do
+ typedef executors::work work;
+ private:
+ /// the kind of stored threads are scoped threads to ensure that the threads are joined.
+ /// A move aware vector type
+ typedef scoped_thread<> thread_t;
+ typedef csbl::vector<thread_t> thread_vector;
+
+ /// the thread safe work queue
+ sync_queue<work > work_queue;
+ /// A move aware vector
+ thread_vector threads;
+
+ public:
+ /**
+ * Effects: try to execute one task.
+ * Returns: whether a task has been executed.
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ bool try_executing_one()
+ {
+ work task;
+ try
+ {
+ if (work_queue.try_pull_front(task) == queue_op_status::success)
+ {
+ task();
+ return true;
+ }
+ return false;
+ }
+ catch (std::exception& )
+ {
+ return false;
+ }
+ catch (...)
+ {
+ return false;
+ }
+ }
+ /**
+ * Effects: schedule one task or yields
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ void schedule_one_or_yield()
+ {
+ if ( ! try_executing_one())
+ {
+ this_thread::yield();
+ }
+ }
+ private:
+
+ /**
+ * The main loop of the worker threads
+ */
+ void worker_thread()
+ {
+ while (!closed())
+ {
+ schedule_one_or_yield();
+ }
+ while (try_executing_one())
+ {
+ }
+ }
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <class AtThreadEntry>
+ void worker_thread1(AtThreadEntry& at_thread_entry)
+ {
+ at_thread_entry(*this);
+ while (!closed())
+ {
+ schedule_one_or_yield();
+ }
+ while (try_executing_one())
+ {
+ }
+ }
+#endif
+ void worker_thread2(void(*at_thread_entry)(basic_thread_pool&))
+ {
+ at_thread_entry(*this);
+ while (!closed())
+ {
+ schedule_one_or_yield();
+ }
+ while (try_executing_one())
+ {
+ }
+ }
+ template <class AtThreadEntry>
+ void worker_thread3(BOOST_THREAD_FWD_REF(AtThreadEntry) at_thread_entry)
+ {
+ at_thread_entry(*this);
+ while (!closed())
+ {
+ schedule_one_or_yield();
+ }
+ while (try_executing_one())
+ {
+ }
+ }
+ static void do_nothing_at_thread_entry(basic_thread_pool&) {}
+
+ public:
+ /// basic_thread_pool is not copyable.
+ BOOST_THREAD_NO_COPYABLE(basic_thread_pool)
+
+ /**
+ * \b Effects: creates a thread pool that runs closures on \c thread_count threads.
+ *
+ * \b Throws: Whatever exception is thrown while initializing the needed resources.
+ */
+ basic_thread_pool(unsigned const thread_count = thread::hardware_concurrency())
+ {
+ try
+ {
+ threads.reserve(thread_count);
+ for (unsigned i = 0; i < thread_count; ++i)
+ {
+#if 1
+ thread th (&basic_thread_pool::worker_thread, this);
+ threads.push_back(thread_t(boost::move(th)));
+#else
+ threads.push_back(thread_t(&basic_thread_pool::worker_thread, this)); // do not compile
+#endif
+ }
+ }
+ catch (...)
+ {
+ close();
+ throw;
+ }
+ }
+ /**
+ * \b Effects: creates a thread pool that runs closures on \c thread_count threads
+ * and executes the at_thread_entry function at the entry of each created thread. .
+ *
+ * \b Throws: Whatever exception is thrown while initializing the needed resources.
+ */
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <class AtThreadEntry>
+ basic_thread_pool( unsigned const thread_count, AtThreadEntry& at_thread_entry)
+ {
+ try
+ {
+ threads.reserve(thread_count);
+ for (unsigned i = 0; i < thread_count; ++i)
+ {
+ thread th (&basic_thread_pool::worker_thread1<AtThreadEntry>, this, at_thread_entry);
+ threads.push_back(thread_t(boost::move(th)));
+ //threads.push_back(thread_t(&basic_thread_pool::worker_thread, this)); // do not compile
+ }
+ }
+ catch (...)
+ {
+ close();
+ throw;
+ }
+ }
+#endif
+ basic_thread_pool( unsigned const thread_count, void(*at_thread_entry)(basic_thread_pool&))
+ {
+ try
+ {
+ threads.reserve(thread_count);
+ for (unsigned i = 0; i < thread_count; ++i)
+ {
+ thread th (&basic_thread_pool::worker_thread2, this, at_thread_entry);
+ threads.push_back(thread_t(boost::move(th)));
+ //threads.push_back(thread_t(&basic_thread_pool::worker_thread, this)); // do not compile
+ }
+ }
+ catch (...)
+ {
+ close();
+ throw;
+ }
+ }
+ template <class AtThreadEntry>
+ basic_thread_pool( unsigned const thread_count, BOOST_THREAD_FWD_REF(AtThreadEntry) at_thread_entry)
+ {
+ try
+ {
+ threads.reserve(thread_count);
+ for (unsigned i = 0; i < thread_count; ++i)
+ {
+ thread th (&basic_thread_pool::worker_thread3<AtThreadEntry>, this, boost::forward<AtThreadEntry>(at_thread_entry));
+ threads.push_back(thread_t(boost::move(th)));
+ //threads.push_back(thread_t(&basic_thread_pool::worker_thread, this)); // do not compile
+ }
+ }
+ catch (...)
+ {
+ close();
+ throw;
+ }
+ }
+ /**
+ * \b Effects: Destroys the thread pool.
+ *
+ * \b Synchronization: The completion of all the closures happen before the completion of the \c basic_thread_pool destructor.
+ */
+ ~basic_thread_pool()
+ {
+ // signal to all the worker threads that there will be no more submissions.
+ close();
+ // joins all the threads as the threads were scoped_threads
+ }
+
+ /**
+ * \b Effects: close the \c basic_thread_pool for submissions.
+ * The worker threads will work until there is no more closures to run.
+ */
+ void close()
+ {
+ work_queue.close();
+ }
+
+ /**
+ * \b Returns: whether the pool is closed for submissions.
+ */
+ bool closed()
+ {
+ return work_queue.closed();
+ }
+
+ /**
+ * \b Requires: \c Closure is a model of \c Callable(void()) and a model of \c CopyConstructible/MoveConstructible.
+ *
+ * \b Effects: The specified \c closure will be scheduled for execution at some point in the future.
+ * If invoked closure throws an exception the \c basic_thread_pool will call \c std::terminate, as is the case with threads.
+ *
+ * \b Synchronization: completion of \c closure on a particular thread happens before destruction of thread's thread local variables.
+ *
+ * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
+ * Whatever exception that can be throw while storing the closure.
+ */
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ //work w ((closure));
+ //work_queue.push_back(boost::move(w));
+ work_queue.push_back(work(closure)); // todo check why this doesn't work
+ }
+#endif
+ void submit(void (*closure)())
+ {
+ //work w ((closure));
+ //work_queue.push_back(boost::move(w));
+ work_queue.push_back(work(closure)); // todo check why this doesn't work
+ }
+
+#if 0
+ template <typename Closure>
+ void submit(BOOST_THREAD_RV_REF(Closure) closure)
+ {
+ work w = boost::move(closure);
+ work_queue.push_back(boost::move(w));
+ //work_queue.push_back(work(boost::move(closure))); // todo check why this doesn't work
+ }
+#else
+ template <typename Closure>
+ void submit(BOOST_THREAD_FWD_REF(Closure) closure)
+ {
+ work_queue.push_back(work(boost::forward<Closure>(closure)));
+ }
+#endif
+ /**
+ * \b Requires: This must be called from an scheduled task.
+ *
+ * \b Effects: reschedule functions until pred()
+ */
+ template <typename Pred>
+ bool reschedule_until(Pred const& pred)
+ {
+ do {
+ if ( ! try_executing_one())
+ {
+ return false;
+ }
+ } while (! pred());
+ return true;
+ }
+
+ };
+}
+using executors::basic_thread_pool;
+
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/executors/executor.hpp b/3party/boost/boost/thread/executors/executor.hpp
new file mode 100644
index 0000000000..3faad3d24d
--- /dev/null
+++ b/3party/boost/boost/thread/executors/executor.hpp
@@ -0,0 +1,129 @@
+// Copyright (C) 2013,2014 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)
+//
+// 2013/09 Vicente J. Botet Escriba
+// Adapt to boost from CCIA C++11 implementation
+
+#ifndef BOOST_THREAD_EXECUTORS_EXECUTOR_HPP
+#define BOOST_THREAD_EXECUTORS_EXECUTOR_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/thread/detail/delete.hpp>
+#include <boost/thread/detail/move.hpp>
+#include <boost/thread/executors/work.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+ namespace executors
+ {
+ class executor
+ {
+ public:
+ /// type-erasure to store the works to do
+ typedef executors::work work;
+
+ /// executor is not copyable.
+ BOOST_THREAD_NO_COPYABLE(executor)
+ executor() {}
+
+ /**
+ * \b Effects: Destroys the executor.
+ *
+ * \b Synchronization: The completion of all the closures happen before the completion of the executor destructor.
+ */
+ virtual ~executor() {};
+
+ /**
+ * \b Effects: close the \c executor for submissions.
+ * The worker threads will work until there is no more closures to run.
+ */
+ virtual void close() = 0;
+
+ /**
+ * \b Returns: whether the pool is closed for submissions.
+ */
+ virtual bool closed() = 0;
+
+ /**
+ * \b Effects: The specified closure will be scheduled for execution at some point in the future.
+ * If invoked closure throws an exception the executor will call std::terminate, as is the case with threads.
+ *
+ * \b Synchronization: completion of closure on a particular thread happens before destruction of thread's thread local variables.
+ *
+ * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
+ * Whatever exception that can be throw while storing the closure.
+ */
+ virtual void submit(BOOST_THREAD_RV_REF(work) closure) = 0;
+
+ /**
+ * \b Requires: \c Closure is a model of Callable(void()) and a model of CopyConstructible/MoveConstructible.
+ *
+ * \b Effects: The specified closure will be scheduled for execution at some point in the future.
+ * If invoked closure throws an exception the thread pool will call std::terminate, as is the case with threads.
+ *
+ * \b Synchronization: completion of closure on a particular thread happens before destruction of thread's thread local variables.
+ *
+ * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
+ * Whatever exception that can be throw while storing the closure.
+ */
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ work w ((closure));
+ submit(boost::move(w));
+ }
+#endif
+ void submit(void (*closure)())
+ {
+ work w ((closure));
+ submit(boost::move(w));
+ }
+
+ template <typename Closure>
+ void submit(BOOST_THREAD_RV_REF(Closure) closure)
+ {
+ work w = boost::move(closure);
+ submit(boost::move(w));
+ }
+
+ /**
+ * Effects: try to execute one task.
+ * Returns: whether a task has been executed.
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ virtual bool try_executing_one() = 0;
+
+ /**
+ * \b Requires: This must be called from an scheduled task.
+ *
+ * \b Effects: reschedule functions until pred()
+ */
+ template <typename Pred>
+ bool reschedule_until(Pred const& pred)
+ {
+ do {
+ //schedule_one_or_yield();
+ if ( ! try_executing_one())
+ {
+ return false;
+ }
+ } while (! pred());
+ return true;
+ }
+ };
+
+
+ }
+ using executors::executor;
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/executors/executor_adaptor.hpp b/3party/boost/boost/thread/executors/executor_adaptor.hpp
new file mode 100644
index 0000000000..280423004c
--- /dev/null
+++ b/3party/boost/boost/thread/executors/executor_adaptor.hpp
@@ -0,0 +1,148 @@
+// Copyright (C) 2013,2014 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)
+//
+// 2013/09 Vicente J. Botet Escriba
+// Adapt to boost from CCIA C++11 implementation
+
+#ifndef BOOST_THREAD_EXECUTORS_EXECUTOR_ADAPTOR_HPP
+#define BOOST_THREAD_EXECUTORS_EXECUTOR_ADAPTOR_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/thread/executors/executor.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+namespace executors
+{
+ /**
+ * Polymorphic adaptor of a model of Executor to an executor.
+ */
+ template <typename Executor>
+ class executor_adaptor : public executor
+ {
+ Executor ex;
+ public:
+ /// type-erasure to store the works to do
+ typedef executor::work work;
+
+ /// executor is not copyable.
+ BOOST_THREAD_NO_COPYABLE(executor_adaptor)
+
+ /**
+ * executor_adaptor constructor
+ */
+#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ template <typename ...Args>
+ executor_adaptor(BOOST_THREAD_RV_REF(Args) ... args) : ex(boost::forward<Args>(args)...) {}
+#else
+ /**
+ * executor_adaptor constructor
+ */
+ executor_adaptor() : ex() {}
+
+ template <typename A1>
+ executor_adaptor(
+ BOOST_THREAD_FWD_REF(A1) a1
+ ) :
+ ex(
+ boost::forward<A1>(a1)
+ ) {}
+ template <typename A1, typename A2>
+ executor_adaptor(
+ BOOST_THREAD_FWD_REF(A1) a1,
+ BOOST_THREAD_FWD_REF(A2) a2
+ ) :
+ ex(
+ boost::forward<A1>(a1),
+ boost::forward<A2>(a2)
+ ) {}
+ template <typename A1, typename A2, typename A3>
+ executor_adaptor(
+ BOOST_THREAD_FWD_REF(A1) a1,
+ BOOST_THREAD_FWD_REF(A2) a2,
+ BOOST_THREAD_FWD_REF(A3) a3
+ ) :
+ ex(
+ boost::forward<A1>(a1),
+ boost::forward<A2>(a2),
+ boost::forward<A3>(a3)
+ ) {}
+#endif
+ Executor& underlying_executor() { return ex; }
+
+ /**
+ * \b Effects: close the \c executor for submissions.
+ * The worker threads will work until there is no more closures to run.
+ */
+ void close() { ex.close(); }
+
+ /**
+ * \b Returns: whether the pool is closed for submissions.
+ */
+ bool closed() { return ex.closed(); }
+
+ /**
+ * \b Effects: The specified closure will be scheduled for execution at some point in the future.
+ * If invoked closure throws an exception the executor will call std::terminate, as is the case with threads.
+ *
+ * \b Synchronization: completion of closure on a particular thread happens before destruction of thread's thread local variables.
+ *
+ * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
+ * Whatever exception that can be throw while storing the closure.
+ */
+ void submit(BOOST_THREAD_RV_REF(work) closure) {
+ return ex.submit(boost::move(closure));
+ //return ex.submit(boost::forward<work>(closure));
+ }
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ work w ((closure));
+ submit(boost::move(w));
+ //submit(work(closure));
+ }
+#endif
+ void submit(void (*closure)())
+ {
+ work w ((closure));
+ submit(boost::move(w));
+ //submit(work(closure));
+ }
+
+#if 0
+ template <typename Closure>
+ void submit(BOOST_THREAD_RV_REF(Closure) closure)
+ {
+ work w =boost::move(closure);
+ submit(boost::move(w));
+ }
+#else
+ template <typename Closure>
+ void submit(BOOST_THREAD_FWD_REF(Closure) closure)
+ {
+ submit(work(boost::forward<Closure>(closure)));
+ }
+#endif
+
+ /**
+ * Effects: try to execute one task.
+ * Returns: whether a task has been executed.
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ bool try_executing_one() { return ex.try_executing_one(); }
+
+ };
+}
+using executors::executor_adaptor;
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/executors/inline_executor.hpp b/3party/boost/boost/thread/executors/inline_executor.hpp
new file mode 100644
index 0000000000..bc6bd9fe7e
--- /dev/null
+++ b/3party/boost/boost/thread/executors/inline_executor.hpp
@@ -0,0 +1,131 @@
+// Copyright (C) 2014 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)
+//
+// 2013/11 Vicente J. Botet Escriba
+// first implementation of a simple serial scheduler.
+
+#ifndef BOOST_THREAD_INLINE_EXECUTOR_HPP
+#define BOOST_THREAD_INLINE_EXECUTOR_HPP
+
+#include <boost/thread/detail/config.hpp>
+#include <boost/thread/detail/delete.hpp>
+#include <boost/thread/detail/move.hpp>
+#include <boost/thread/executors/work.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+namespace executors
+{
+ class inline_executor
+ {
+ public:
+ /// type-erasure to store the works to do
+ typedef executors::work work;
+ bool closed_;
+ /**
+ * Effects: try to execute one task.
+ * Returns: whether a task has been executed.
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ bool try_executing_one()
+ {
+ return false;
+ }
+
+ public:
+ /// inline_executor is not copyable.
+ BOOST_THREAD_NO_COPYABLE(inline_executor)
+
+ /**
+ * \b Effects: creates a inline executor that runs closures immediately.
+ *
+ * \b Throws: Nothing.
+ */
+ inline_executor()
+ : closed_(false)
+ {
+ }
+ /**
+ * \b Effects: Destroys the inline executor.
+ *
+ * \b Synchronization: The completion of all the closures happen before the completion of the \c inline_executor destructor.
+ */
+ ~inline_executor()
+ {
+ // signal to all the worker thread that there will be no more submissions.
+ close();
+ }
+
+ /**
+ * \b Effects: close the \c inline_executor for submissions.
+ * The loop will work until there is no more closures to run.
+ */
+ void close()
+ {
+ closed_ = true;
+ }
+
+ /**
+ * \b Returns: whether the pool is closed for submissions.
+ */
+ bool closed()
+ {
+ return closed_;
+ }
+
+ /**
+ * \b Requires: \c Closure is a model of \c Callable(void()) and a model of \c CopyConstructible/MoveConstructible.
+ *
+ * \b Effects: The specified \c closure will be scheduled for execution at some point in the future.
+ * If invoked closure throws an exception the \c inline_executor will call \c std::terminate, as is the case with threads.
+ *
+ * \b Synchronization: completion of \c closure on a particular thread happens before destruction of thread's thread local variables.
+ *
+ * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
+ * Whatever exception that can be throw while storing the closure.
+ */
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ if (closed()) return;
+ closure();
+ }
+#endif
+ void submit(void (*closure)())
+ {
+ if (closed()) return;
+ closure();
+ }
+
+ template <typename Closure>
+ void submit(BOOST_THREAD_FWD_REF(Closure) closure)
+ {
+ if (closed()) return;
+ closure();
+ }
+
+ /**
+ * \b Requires: This must be called from an scheduled task.
+ *
+ * \b Effects: reschedule functions until pred()
+ */
+ template <typename Pred>
+ bool reschedule_until(Pred const& )
+ {
+ return false;
+ }
+
+ };
+}
+using executors::inline_executor;
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/executors/loop_executor.hpp b/3party/boost/boost/thread/executors/loop_executor.hpp
new file mode 100644
index 0000000000..ae84a6a945
--- /dev/null
+++ b/3party/boost/boost/thread/executors/loop_executor.hpp
@@ -0,0 +1,209 @@
+// Copyright (C) 2013,2014 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)
+//
+// 2013/11 Vicente J. Botet Escriba
+// first implementation of a simple user scheduler.
+// 2013/11 Vicente J. Botet Escriba
+// rename loop_executor.
+
+#ifndef BOOST_THREAD_EXECUTORS_LOOP_EXECUTOR_HPP
+#define BOOST_THREAD_EXECUTORS_LOOP_EXECUTOR_HPP
+
+#include <boost/thread/detail/config.hpp>
+#include <boost/thread/detail/delete.hpp>
+#include <boost/thread/detail/move.hpp>
+#include <boost/thread/sync_queue.hpp>
+#include <boost/thread/executors/work.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+namespace executors
+{
+
+ class loop_executor
+ {
+ public:
+ /// type-erasure to store the works to do
+ typedef executors::work work;
+ private:
+ /// the thread safe work queue
+ sync_queue<work > work_queue;
+
+ public:
+ /**
+ * Effects: try to execute one task.
+ * Returns: whether a task has been executed.
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ bool try_executing_one()
+ {
+ work task;
+ try
+ {
+ if (work_queue.try_pull_front(task) == queue_op_status::success)
+ {
+ task();
+ return true;
+ }
+ return false;
+ }
+ catch (std::exception& )
+ {
+ return false;
+ }
+ catch (...)
+ {
+ return false;
+ }
+ }
+ private:
+ /**
+ * Effects: schedule one task or yields
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ void schedule_one_or_yield()
+ {
+ if ( ! try_executing_one())
+ {
+ this_thread::yield();
+ }
+ }
+
+
+ /**
+ * The main loop of the worker thread
+ */
+ void worker_thread()
+ {
+ while (!closed())
+ {
+ schedule_one_or_yield();
+ }
+ while (try_executing_one())
+ {
+ }
+ }
+
+ public:
+ /// loop_executor is not copyable.
+ BOOST_THREAD_NO_COPYABLE(loop_executor)
+
+ /**
+ * \b Effects: creates a thread pool that runs closures using one of its closure-executing methods.
+ *
+ * \b Throws: Whatever exception is thrown while initializing the needed resources.
+ */
+ loop_executor()
+ {
+ }
+ /**
+ * \b Effects: Destroys the thread pool.
+ *
+ * \b Synchronization: The completion of all the closures happen before the completion of the \c loop_executor destructor.
+ */
+ ~loop_executor()
+ {
+ // signal to all the worker thread that there will be no more submissions.
+ close();
+ }
+
+ /**
+ * loop
+ */
+ void loop() { worker_thread(); }
+ /**
+ * \b Effects: close the \c loop_executor for submissions.
+ * The loop will work until there is no more closures to run.
+ */
+ void close()
+ {
+ work_queue.close();
+ }
+
+ /**
+ * \b Returns: whether the pool is closed for submissions.
+ */
+ bool closed()
+ {
+ return work_queue.closed();
+ }
+
+ /**
+ * \b Requires: \c Closure is a model of \c Callable(void()) and a model of \c CopyConstructible/MoveConstructible.
+ *
+ * \b Effects: The specified \c closure will be scheduled for execution at some point in the future.
+ * If invoked closure throws an exception the \c loop_executor will call \c std::terminate, as is the case with threads.
+ *
+ * \b Synchronization: completion of \c closure on a particular thread happens before destruction of thread's thread local variables.
+ *
+ * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
+ * Whatever exception that can be throw while storing the closure.
+ */
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ work w ((closure));
+ work_queue.push_back(boost::move(w));
+ //work_queue.push(work(closure)); // todo check why this doesn't work
+ }
+#endif
+ void submit(void (*closure)())
+ {
+ work w ((closure));
+ work_queue.push_back(boost::move(w));
+ //work_queue.push_back(work(closure)); // todo check why this doesn't work
+ }
+
+ template <typename Closure>
+ void submit(BOOST_THREAD_RV_REF(Closure) closure)
+ {
+ work w =boost::move(closure);
+ work_queue.push_back(boost::move(w));
+ //work_queue.push_back(work(boost::move(closure))); // todo check why this doesn't work
+ }
+
+ /**
+ * \b Requires: This must be called from an scheduled task.
+ *
+ * \b Effects: reschedule functions until pred()
+ */
+ template <typename Pred>
+ bool reschedule_until(Pred const& pred)
+ {
+ do {
+ if ( ! try_executing_one())
+ {
+ return false;
+ }
+ } while (! pred());
+ return true;
+ }
+ /**
+ * run queued closures
+ */
+ void run_queued_closures()
+ {
+ sync_queue<work>::underlying_queue_type q = work_queue.underlying_queue();
+ while (q.empty())
+ {
+ work task = q.front();
+ q.pop_front();
+ task();
+ }
+ }
+
+ };
+}
+using executors::loop_executor;
+
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/executors/serial_executor.hpp b/3party/boost/boost/thread/executors/serial_executor.hpp
new file mode 100644
index 0000000000..5aaaacf962
--- /dev/null
+++ b/3party/boost/boost/thread/executors/serial_executor.hpp
@@ -0,0 +1,213 @@
+// Copyright (C) 2013 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)
+//
+// 2013/11 Vicente J. Botet Escriba
+// first implementation of a simple serial scheduler.
+
+#ifndef BOOST_THREAD_SERIAL_EXECUTOR_HPP
+#define BOOST_THREAD_SERIAL_EXECUTOR_HPP
+
+#include <boost/thread/detail/config.hpp>
+#include <boost/thread/detail/delete.hpp>
+#include <boost/thread/detail/move.hpp>
+#include <boost/thread/sync_queue.hpp>
+#include <boost/thread/executors/work.hpp>
+#include <boost/thread/executors/executor.hpp>
+#include <boost/thread/future.hpp>
+#include <boost/thread/scoped_thread.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+namespace executors
+{
+ class serial_executor
+ {
+ public:
+ /// type-erasure to store the works to do
+ typedef executors::work work;
+ private:
+ typedef scoped_thread<> thread_t;
+
+ /// the thread safe work queue
+ sync_queue<work > work_queue;
+ executor& ex;
+ thread_t thr;
+
+ struct try_executing_one_task {
+ work& task;
+ boost::promise<void> &p;
+ try_executing_one_task(work& task, boost::promise<void> &p)
+ : task(task), p(p) {}
+ void operator()() {
+ task(); // if task() throws promise is not set but as the the program terminates and should terminate there is no need to use try-catch here.
+ p.set_value();
+ }
+ };
+ public:
+ /**
+ * Effects: try to execute one task.
+ * Returns: whether a task has been executed.
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ bool try_executing_one()
+ {
+ work task;
+ try
+ {
+ if (work_queue.try_pull_front(task) == queue_op_status::success)
+ {
+ boost::promise<void> p;
+ try_executing_one_task tmp(task,p);
+ ex.submit(tmp);
+// ex.submit([&task, &p]()
+// {
+// task(); // if task() throws promise is not set but as the the program terminates and should terminate there is no need to use try-catch here.
+// p.set_value();
+// });
+ p.get_future().wait();
+ return true;
+ }
+ return false;
+ }
+ catch (std::exception& )
+ {
+ return false;
+ }
+ catch (...)
+ {
+ return false;
+ }
+ }
+ private:
+ /**
+ * Effects: schedule one task or yields
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ void schedule_one_or_yield()
+ {
+ if ( ! try_executing_one())
+ {
+ this_thread::yield();
+ }
+ }
+
+ /**
+ * The main loop of the worker thread
+ */
+ void worker_thread()
+ {
+ while (!closed())
+ {
+ schedule_one_or_yield();
+ }
+ while (try_executing_one())
+ {
+ }
+ }
+
+ public:
+ /// serial_executor is not copyable.
+ BOOST_THREAD_NO_COPYABLE(serial_executor)
+
+ /**
+ * \b Effects: creates a thread pool that runs closures using one of its closure-executing methods.
+ *
+ * \b Throws: Whatever exception is thrown while initializing the needed resources.
+ */
+ serial_executor(executor& ex)
+ : ex(ex), thr(&serial_executor::worker_thread, this)
+ {
+ }
+ /**
+ * \b Effects: Destroys the thread pool.
+ *
+ * \b Synchronization: The completion of all the closures happen before the completion of the \c serial_executor destructor.
+ */
+ ~serial_executor()
+ {
+ // signal to all the worker thread that there will be no more submissions.
+ close();
+ }
+
+ /**
+ * \b Effects: close the \c serial_executor for submissions.
+ * The loop will work until there is no more closures to run.
+ */
+ void close()
+ {
+ work_queue.close();
+ }
+
+ /**
+ * \b Returns: whether the pool is closed for submissions.
+ */
+ bool closed()
+ {
+ return work_queue.closed();
+ }
+
+ /**
+ * \b Requires: \c Closure is a model of \c Callable(void()) and a model of \c CopyConstructible/MoveConstructible.
+ *
+ * \b Effects: The specified \c closure will be scheduled for execution at some point in the future.
+ * If invoked closure throws an exception the \c serial_executor will call \c std::terminate, as is the case with threads.
+ *
+ * \b Synchronization: completion of \c closure on a particular thread happens before destruction of thread's thread local variables.
+ *
+ * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
+ * Whatever exception that can be throw while storing the closure.
+ */
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ work w ((closure));
+ work_queue.push_back(boost::move(w));
+ //work_queue.push(work(closure)); // todo check why this doesn't work
+ }
+#endif
+ void submit(void (*closure)())
+ {
+ work w ((closure));
+ work_queue.push_back(boost::move(w));
+ //work_queue.push_back(work(closure)); // todo check why this doesn't work
+ }
+
+ template <typename Closure>
+ void submit(BOOST_THREAD_RV_REF(Closure) closure)
+ {
+ work w =boost::move(closure);
+ work_queue.push_back(boost::move(w));
+ //work_queue.push_back(work(boost::move(closure))); // todo check why this doesn't work
+ }
+
+ /**
+ * \b Requires: This must be called from an scheduled task.
+ *
+ * \b Effects: reschedule functions until pred()
+ */
+ template <typename Pred>
+ bool reschedule_until(Pred const& pred)
+ {
+ do {
+ if ( ! try_executing_one())
+ {
+ return false;
+ }
+ } while (! pred());
+ return true;
+ }
+
+ };
+}
+using executors::serial_executor;
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/executors/thread_executor.hpp b/3party/boost/boost/thread/executors/thread_executor.hpp
new file mode 100644
index 0000000000..9fc3362fde
--- /dev/null
+++ b/3party/boost/boost/thread/executors/thread_executor.hpp
@@ -0,0 +1,136 @@
+// Copyright (C) 2014 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)
+//
+// 2014/01 Vicente J. Botet Escriba
+// first implementation of a thread_executor.
+
+#ifndef BOOST_THREAD_THREAD_EXECUTOR_HPP
+#define BOOST_THREAD_THREAD_EXECUTOR_HPP
+
+#include <boost/thread/detail/config.hpp>
+#include <boost/thread/detail/delete.hpp>
+#include <boost/thread/detail/move.hpp>
+#include <boost/thread/executors/work.hpp>
+#include <boost/thread/executors/executor.hpp>
+#include <boost/thread/thread_only.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+namespace executors
+{
+ class thread_executor
+ {
+ public:
+ /// type-erasure to store the works to do
+ typedef executors::work work;
+ bool closed_;
+ /**
+ * Effects: try to execute one task.
+ * Returns: whether a task has been executed.
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ bool try_executing_one()
+ {
+ return false;
+ }
+
+ public:
+ /// thread_executor is not copyable.
+ BOOST_THREAD_NO_COPYABLE(thread_executor)
+
+ /**
+ * \b Effects: creates a inline executor that runs closures immediately.
+ *
+ * \b Throws: Nothing.
+ */
+ thread_executor()
+ : closed_(false)
+ {
+ }
+ /**
+ * \b Effects: Destroys the inline executor.
+ *
+ * \b Synchronization: The completion of all the closures happen before the completion of the \c thread_executor destructor.
+ */
+ ~thread_executor()
+ {
+ // signal to all the worker thread that there will be no more submissions.
+ close();
+ }
+
+ /**
+ * \b Effects: close the \c thread_executor for submissions.
+ * The loop will work until there is no more closures to run.
+ */
+ void close()
+ {
+ closed_ = true;
+ }
+
+ /**
+ * \b Returns: whether the pool is closed for submissions.
+ */
+ bool closed()
+ {
+ return closed_;
+ }
+
+ /**
+ * \b Requires: \c Closure is a model of \c Callable(void()) and a model of \c CopyConstructible/MoveConstructible.
+ *
+ * \b Effects: The specified \c closure will be scheduled for execution at some point in the future.
+ * If invoked closure throws an exception the \c thread_executor will call \c std::terminate, as is the case with threads.
+ *
+ * \b Synchronization: completion of \c closure on a particular thread happens before destruction of thread's thread local variables.
+ *
+ * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
+ * Whatever exception that can be throw while storing the closure.
+ */
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ if (closed()) return;
+ thread th(closure);
+ th.detach();
+ }
+#endif
+ void submit(void (*closure)())
+ {
+ if (closed()) return;
+ thread th(closure);
+ th.detach();
+ }
+
+ template <typename Closure>
+ void submit(BOOST_THREAD_FWD_REF(Closure) closure)
+ {
+ if (closed()) return;
+ thread th(boost::forward<Closure>(closure));
+ th.detach();
+ }
+
+ /**
+ * \b Requires: This must be called from an scheduled task.
+ *
+ * \b Effects: reschedule functions until pred()
+ */
+ template <typename Pred>
+ bool reschedule_until(Pred const&)
+ {
+ return false;
+ }
+
+ };
+}
+using executors::thread_executor;
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/executors/work.hpp b/3party/boost/boost/thread/executors/work.hpp
new file mode 100644
index 0000000000..f9e225f9d7
--- /dev/null
+++ b/3party/boost/boost/thread/executors/work.hpp
@@ -0,0 +1,21 @@
+// (C) Copyright 2013,2014 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)
+
+#ifndef BOOST_THREAD_EXECUTORS_WORK_HPP
+#define BOOST_THREAD_EXECUTORS_WORK_HPP
+
+
+#include <boost/thread/detail/nullary_function.hpp>
+
+namespace boost
+{
+ namespace executors
+ {
+ typedef detail::nullary_function<void()> work;
+ }
+} // namespace boost
+
+#endif // BOOST_THREAD_EXECUTORS_WORK_HPP
diff --git a/3party/boost/boost/thread/externally_locked.hpp b/3party/boost/boost/thread/externally_locked.hpp
index 4aaa7d75f0..0d4baaa512 100644
--- a/3party/boost/boost/thread/externally_locked.hpp
+++ b/3party/boost/boost/thread/externally_locked.hpp
@@ -18,7 +18,7 @@
#include <boost/static_assert.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/throw_exception.hpp>
-#include <boost/utility/swap.hpp>
+#include <boost/core/swap.hpp>
#include <boost/config/abi_prefix.hpp>
@@ -97,7 +97,7 @@ namespace boost
/// move assignment
externally_locked& operator=(BOOST_THREAD_RV_REF(externally_locked) rhs) // BOOST_NOEXCEPT
{
- obj_=move(rhs.obj_);
+ obj_=move(BOOST_THREAD_RV(rhs).obj_);
mtx_=rhs.mtx_;
return *this;
}
diff --git a/3party/boost/boost/thread/future.hpp b/3party/boost/boost/thread/future.hpp
index a8717d6a1e..5f5570797e 100644
--- a/3party/boost/boost/thread/future.hpp
+++ b/3party/boost/boost/thread/future.hpp
@@ -1,5 +1,5 @@
// (C) Copyright 2008-10 Anthony Williams
-// (C) Copyright 2011-2013 Vicente J. Botet Escriba
+// (C) Copyright 2011-2014 Vicente J. Botet Escriba
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -15,11 +15,11 @@
#ifndef BOOST_NO_EXCEPTIONS
-//#include <boost/thread/detail/log.hpp>
-#include <boost/detail/scoped_enum_emulation.hpp>
+#include <boost/core/scoped_enum.hpp>
#include <stdexcept>
+#include <boost/thread/exceptional_ptr.hpp>
#include <boost/thread/detail/move.hpp>
-#include <boost/thread/detail/async_func.hpp>
+#include <boost/thread/detail/invoker.hpp>
#include <boost/thread/thread_time.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
@@ -30,18 +30,19 @@
#include <boost/scoped_ptr.hpp>
#include <boost/type_traits/is_fundamental.hpp>
#include <boost/thread/detail/is_convertible.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-#include <boost/mpl/if.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/conditional.hpp>
#include <boost/config.hpp>
#include <boost/throw_exception.hpp>
#include <algorithm>
#include <boost/function.hpp>
#include <boost/bind.hpp>
-#include <boost/ref.hpp>
+#include <boost/core/ref.hpp>
#include <boost/scoped_array.hpp>
#include <boost/enable_shared_from_this.hpp>
-#include <boost/utility/enable_if.hpp>
+#include <boost/core/enable_if.hpp>
+
#include <list>
#include <boost/next_prior.hpp>
#include <vector>
@@ -53,11 +54,20 @@
#if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
#include <boost/thread/detail/memory.hpp>
+#include <boost/container/scoped_allocator.hpp>
+#if ! defined BOOST_NO_CXX11_ALLOCATOR
+#include <memory>
+#endif
#endif
#include <boost/utility/result_of.hpp>
#include <boost/thread/thread_only.hpp>
+#if defined BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY
+#include <boost/thread/csbl/tuple.hpp>
+#include <boost/thread/csbl/vector.hpp>
+#endif
+
#if defined BOOST_THREAD_PROVIDES_FUTURE
#define BOOST_THREAD_FUTURE future
#else
@@ -73,6 +83,9 @@ namespace boost
none = 0,
async = 1,
deferred = 2,
+#ifdef BOOST_THREAD_PROVIDES_EXECUTORS
+ executor = 4,
+#endif
any = async | deferred
}
BOOST_SCOPED_ENUM_DECLARE_END(launch)
@@ -145,23 +158,23 @@ namespace boost
{}
};
- class BOOST_SYMBOL_VISIBLE task_moved:
- public future_error
- {
- public:
- task_moved():
- future_error(system::make_error_code(future_errc::no_state))
- {}
- };
+ class BOOST_SYMBOL_VISIBLE task_moved:
+ public future_error
+ {
+ public:
+ task_moved():
+ future_error(system::make_error_code(future_errc::no_state))
+ {}
+ };
- class promise_moved:
- public future_error
- {
- public:
- promise_moved():
- future_error(system::make_error_code(future_errc::no_state))
- {}
- };
+ class promise_moved:
+ public future_error
+ {
+ public:
+ promise_moved():
+ future_error(system::make_error_code(future_errc::no_state))
+ {}
+ };
namespace future_state
{
@@ -170,13 +183,6 @@ namespace boost
namespace detail
{
-#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
- template<typename F, typename Rp, typename Fp>
- struct future_deferred_continuation;
- template<typename F, typename Rp, typename Fp>
- struct future_async_continuation;
-#endif
-
struct relocker
{
boost::unique_lock<boost::mutex>& lock_;
@@ -204,68 +210,59 @@ namespace boost
relocker& operator=(relocker const&);
};
- struct future_object_base : enable_shared_from_this<future_object_base>
+ struct shared_state_base : enable_shared_from_this<shared_state_base>
{
+ typedef std::list<boost::condition_variable_any*> waiter_list;
+ // This type should be only included conditionally if interruptions are allowed, but is included to maintain the same layout.
+ typedef shared_ptr<shared_state_base> continuation_ptr_type;
boost::exception_ptr exception;
bool done;
bool is_deferred_;
launch policy_;
bool is_constructed;
- boost::mutex mutex;
+ mutable boost::mutex mutex;
boost::condition_variable waiters;
- typedef std::list<boost::condition_variable_any*> waiter_list;
waiter_list external_waiters;
boost::function<void()> callback;
-//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ // This declaration should be only included conditionally if interruptions are allowed, but is included to maintain the same layout.
bool thread_was_interrupted;
-//#endif
-#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
- typedef shared_ptr<future_object_base> continuation_ptr_type;
-#else
- typedef shared_ptr<void> continuation_ptr_type;
-#endif
+ // This declaration should be only included conditionally, but is included to maintain the same layout.
continuation_ptr_type continuation_ptr;
-
-//#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
+ // This declaration should be only included conditionally, but is included to maintain the same layout.
virtual void launch_continuation(boost::unique_lock<boost::mutex>&)
{
}
-//#endif
- future_object_base():
+
+ shared_state_base():
done(false),
is_deferred_(false),
policy_(launch::none),
- is_constructed(false)
-
- // This declaration should be only included conditinally, but are included to maintain the same layout.
-//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- , thread_was_interrupted(false)
-//#endif
- // This declaration should be only included conditinally, but are included to maintain the same layout.
-//#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
- , continuation_ptr()
-//#endif
+ is_constructed(false),
+ thread_was_interrupted(false),
+ continuation_ptr()
{}
- virtual ~future_object_base()
+ virtual ~shared_state_base()
{}
void set_deferred()
{
is_deferred_ = true;
- set_launch_policy(launch::deferred);
+ policy_ = launch::deferred;
}
void set_async()
{
is_deferred_ = false;
- set_launch_policy(launch::async);
+ policy_ = launch::async;
}
- void set_launch_policy(launch policy)
+#ifdef BOOST_THREAD_PROVIDES_EXECUTORS
+ void set_executor()
{
- policy_ = policy;
+ is_deferred_ = false;
+ policy_ = launch::executor;
}
-
+#endif
waiter_list::iterator register_external_waiter(boost::condition_variable_any& cv)
{
boost::unique_lock<boost::mutex> lock(mutex);
@@ -283,10 +280,11 @@ namespace boost
void do_continuation(boost::unique_lock<boost::mutex>& lock)
{
if (continuation_ptr) {
- continuation_ptr->launch_continuation(lock);
- if (! lock.owns_lock())
- lock.lock();
+ continuation_ptr_type this_continuation_ptr = continuation_ptr;
continuation_ptr.reset();
+ this_continuation_ptr->launch_continuation(lock);
+ //if (! lock.owns_lock())
+ // lock.lock();
}
}
#else
@@ -330,23 +328,22 @@ namespace boost
}
}
-
- void wait_internal(boost::unique_lock<boost::mutex> &lock, bool rethrow=true)
+ void wait_internal(boost::unique_lock<boost::mutex> &lk, bool rethrow=true)
{
- do_callback(lock);
+ do_callback(lk);
//if (!done) // fixme why this doesn't work?
{
if (is_deferred_)
{
is_deferred_=false;
- execute(lock);
- //lock.unlock();
+ execute(lk);
+ //lk.unlock();
}
else
{
while(!done)
{
- waiters.wait(lock);
+ waiters.wait(lk);
}
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
if(rethrow && thread_was_interrupted)
@@ -361,7 +358,8 @@ namespace boost
}
}
}
- void wait(bool rethrow=true)
+
+ virtual void wait(bool rethrow=true)
{
boost::unique_lock<boost::mutex> lock(mutex);
wait_internal(lock, rethrow);
@@ -412,11 +410,13 @@ namespace boost
exception=e;
mark_finished_internal(lock);
}
+
void mark_exceptional_finish()
{
boost::unique_lock<boost::mutex> lock(mutex);
mark_exceptional_finish_internal(boost::current_exception(), lock);
}
+
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
void mark_interrupted_finish()
{
@@ -424,6 +424,7 @@ namespace boost
thread_was_interrupted=true;
mark_finished_internal(lock);
}
+
void set_interrupted_at_thread_exit()
{
unique_lock<boost::mutex> lk(mutex);
@@ -432,9 +433,10 @@ namespace boost
{
throw_exception(promise_already_satisfied());
}
- get_current_thread_data()->make_ready_at_thread_exit(shared_from_this());
+ detail::make_ready_at_thread_exit(shared_from_this());
}
#endif
+
void set_exception_at_thread_exit(exception_ptr e)
{
unique_lock<boost::mutex> lk(mutex);
@@ -444,9 +446,11 @@ namespace boost
}
exception=e;
this->is_constructed = true;
- get_current_thread_data()->make_ready_at_thread_exit(shared_from_this());
+ detail::make_ready_at_thread_exit(shared_from_this());
+
}
- bool has_value()
+
+ bool has_value() const
{
boost::lock_guard<boost::mutex> lock(mutex);
return done && !(exception
@@ -455,7 +459,8 @@ namespace boost
#endif
);
}
- bool has_value(unique_lock<boost::mutex>& )
+
+ bool has_value(unique_lock<boost::mutex>& ) const
{
return done && !(exception
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
@@ -463,7 +468,8 @@ namespace boost
#endif
);
}
- bool has_exception()
+
+ bool has_exception() const
{
boost::lock_guard<boost::mutex> lock(mutex);
return done && (exception
@@ -472,7 +478,8 @@ namespace boost
#endif
);
}
- bool has_exception(unique_lock<boost::mutex>&)
+
+ bool has_exception(unique_lock<boost::mutex>&) const
{
return done && (exception
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
@@ -480,26 +487,58 @@ namespace boost
#endif
);
}
- bool is_deferred() const BOOST_NOEXCEPT {
+
+ bool is_deferred(boost::lock_guard<boost::mutex>&) const {
return is_deferred_;
}
- launch launch_policy() const BOOST_NOEXCEPT
+ launch launch_policy(boost::unique_lock<boost::mutex>&) const
{
return policy_;
}
+ future_state::state get_state() const
+ {
+ boost::lock_guard<boost::mutex> guard(mutex);
+ if(!done)
+ {
+ return future_state::waiting;
+ }
+ else
+ {
+ return future_state::ready;
+ }
+ }
+
+ exception_ptr get_exception_ptr()
+ {
+ boost::unique_lock<boost::mutex> lock(mutex);
+ return get_exception_ptr(lock);
+ }
+ exception_ptr get_exception_ptr(boost::unique_lock<boost::mutex>& lock)
+ {
+ wait_internal(lock, false);
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ if(thread_was_interrupted)
+ {
+ return copy_exception(boost::thread_interrupted());
+ }
+#endif
+ return exception;
+ }
+
template<typename F,typename U>
void set_wait_callback(F f,U* u)
{
boost::lock_guard<boost::mutex> lock(mutex);
callback=boost::bind(f,boost::ref(*u));
}
+
virtual void execute(boost::unique_lock<boost::mutex>&) {}
private:
- future_object_base(future_object_base const&);
- future_object_base& operator=(future_object_base const&);
+ shared_state_base(shared_state_base const&);
+ shared_state_base& operator=(shared_state_base const&);
};
template<typename T>
@@ -509,20 +548,20 @@ namespace boost
struct dummy;
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
typedef T const& source_reference_type;
- //typedef typename boost::mpl::if_<boost::is_fundamental<T>,dummy&,BOOST_THREAD_RV_REF(T)>::type rvalue_source_type;
+ //typedef typename conditional<boost::is_fundamental<T>::value,dummy&,BOOST_THREAD_RV_REF(T)>::type rvalue_source_type;
typedef BOOST_THREAD_RV_REF(T) rvalue_source_type;
- //typedef typename boost::mpl::if_<boost::is_fundamental<T>,T,BOOST_THREAD_RV_REF(T)>::type move_dest_type;
+ //typedef typename conditional<boost::is_fundamental<T>::value,T,BOOST_THREAD_RV_REF(T)>::type move_dest_type;
typedef T move_dest_type;
#elif defined BOOST_THREAD_USES_MOVE
- typedef typename boost::mpl::if_c<boost::is_fundamental<T>::value,T,T&>::type source_reference_type;
- //typedef typename boost::mpl::if_c<boost::is_fundamental<T>::value,T,BOOST_THREAD_RV_REF(T)>::type rvalue_source_type;
- //typedef typename boost::mpl::if_c<boost::enable_move_utility_emulation<T>::value,BOOST_THREAD_RV_REF(T),T>::type move_dest_type;
+ typedef typename conditional<boost::is_fundamental<T>::value,T,T&>::type source_reference_type;
+ //typedef typename conditional<boost::is_fundamental<T>::value,T,BOOST_THREAD_RV_REF(T)>::type rvalue_source_type;
+ //typedef typename conditional<boost::enable_move_utility_emulation<T>::value,BOOST_THREAD_RV_REF(T),T>::type move_dest_type;
typedef BOOST_THREAD_RV_REF(T) rvalue_source_type;
typedef T move_dest_type;
#else
typedef T& source_reference_type;
- typedef typename boost::mpl::if_<boost::thread_detail::is_convertible<T&,BOOST_THREAD_RV_REF(T) >,BOOST_THREAD_RV_REF(T),T const&>::type rvalue_source_type;
- typedef typename boost::mpl::if_<boost::thread_detail::is_convertible<T&,BOOST_THREAD_RV_REF(T) >,BOOST_THREAD_RV_REF(T),T>::type move_dest_type;
+ typedef typename conditional<boost::thread_detail::is_convertible<T&,BOOST_THREAD_RV_REF(T) >::value, BOOST_THREAD_RV_REF(T),T const&>::type rvalue_source_type;
+ typedef typename conditional<boost::thread_detail::is_convertible<T&,BOOST_THREAD_RV_REF(T) >::value, BOOST_THREAD_RV_REF(T),T>::type move_dest_type;
#endif
@@ -590,8 +629,8 @@ namespace boost
// Used to create stand-alone futures
template<typename T>
- struct future_object:
- detail::future_object_base
+ struct shared_state:
+ detail::shared_state_base
{
typedef typename future_traits<T>::storage_type storage_type;
typedef typename future_traits<T>::source_reference_type source_reference_type;
@@ -601,11 +640,11 @@ namespace boost
storage_type result;
- future_object():
+ shared_state():
result(0)
{}
- ~future_object()
+ ~shared_state()
{}
void mark_finished_with_result_internal(source_reference_type result_, boost::unique_lock<boost::mutex>& lock)
@@ -641,34 +680,20 @@ namespace boost
#endif
}
-
virtual move_dest_type get()
{
- wait();
+ boost::unique_lock<boost::mutex> lock(mutex);
+ wait_internal(lock);
return boost::move(*result);
}
- shared_future_get_result_type get_sh()
+ virtual shared_future_get_result_type get_sh()
{
- wait();
+ boost::unique_lock<boost::mutex> lock(mutex);
+ wait_internal(lock);
return *result;
}
- // todo move this to detail::future_object_base
- future_state::state get_state()
- {
- boost::lock_guard<boost::mutex> guard(mutex);
- if(!done)
- {
- return future_state::waiting;
- }
- else
- {
- return future_state::ready;
- }
- }
-
-
//void set_value_at_thread_exit(const T & result_)
void set_value_at_thread_exit(source_reference_type result_)
{
@@ -681,7 +706,7 @@ namespace boost
result.reset(new T(result_));
this->is_constructed = true;
- get_current_thread_data()->make_ready_at_thread_exit(shared_from_this());
+ detail::make_ready_at_thread_exit(shared_from_this());
}
//void set_value_at_thread_exit(BOOST_THREAD_RV_REF(T) result_)
void set_value_at_thread_exit(rvalue_source_type result_)
@@ -692,32 +717,31 @@ namespace boost
result.reset(new T(boost::move(result_)));
//future_traits<T>::init(result,static_cast<rvalue_source_type>(result_));
this->is_constructed = true;
- get_current_thread_data()->make_ready_at_thread_exit(shared_from_this());
+ detail::make_ready_at_thread_exit(shared_from_this());
}
private:
- future_object(future_object const&);
- future_object& operator=(future_object const&);
+ shared_state(shared_state const&);
+ shared_state& operator=(shared_state const&);
};
template<typename T>
- struct future_object<T&>:
- detail::future_object_base
+ struct shared_state<T&>:
+ detail::shared_state_base
{
typedef typename future_traits<T&>::storage_type storage_type;
typedef typename future_traits<T&>::source_reference_type source_reference_type;
- //typedef typename future_traits<T&>::rvalue_source_type rvalue_source_type;
typedef typename future_traits<T&>::move_dest_type move_dest_type;
typedef typename future_traits<T&>::shared_future_get_result_type shared_future_get_result_type;
T* result;
- future_object():
+ shared_state():
result(0)
{}
- ~future_object()
+ ~shared_state()
{
}
@@ -728,53 +752,26 @@ namespace boost
mark_finished_internal(lock);
}
-// void mark_finished_with_result_internal(rvalue_source_type result_, boost::unique_lock<boost::mutex>& lock)
-// {
-// future_traits<T&>::init(result,static_cast<rvalue_source_type>(result_));
-// mark_finished_internal(lock);
-// }
-
void mark_finished_with_result(source_reference_type result_)
{
boost::unique_lock<boost::mutex> lock(mutex);
mark_finished_with_result_internal(result_, lock);
}
-// void mark_finished_with_result(rvalue_source_type result_)
-// {
-// boost::unique_lock<boost::mutex> lock(mutex);
-// mark_finished_with_result_internal(static_cast<rvalue_source_type>(result_), lock);
-// }
-
-
- T& get()
+ virtual T& get()
{
- wait();
- //return static_cast<T&>(*result);
+ boost::unique_lock<boost::mutex> lock(mutex);
+ wait_internal(lock);
return *result;
}
- T& get_sh()
+ virtual T& get_sh()
{
- wait();
- //return static_cast<shared_future_get_result_type>(*result);
+ boost::unique_lock<boost::mutex> lock(mutex);
+ wait_internal(lock);
return *result;
}
- // todo move this to detail::future_object_base
- future_state::state get_state()
- {
- boost::lock_guard<boost::mutex> guard(mutex);
- if(!done)
- {
- return future_state::waiting;
- }
- else
- {
- return future_state::ready;
- }
- }
-
void set_value_at_thread_exit(T& result_)
{
unique_lock<boost::mutex> lk(this->mutex);
@@ -783,31 +780,21 @@ namespace boost
//future_traits<T>::init(result,result_);
result= &result_;
this->is_constructed = true;
- get_current_thread_data()->make_ready_at_thread_exit(shared_from_this());
+ detail::make_ready_at_thread_exit(shared_from_this());
}
-// void set_value_at_thread_exit(rvalue_source_type result_)
-// {
-// unique_lock<boost::mutex> lk(this->mutex);
-// if (this->has_value())
-// throw_exception(promise_already_satisfied());
-// future_traits<T>::init(result,static_cast<rvalue_source_type>(result_));
-// this->is_constructed = true;
-// get_current_thread_data()->make_ready_at_thread_exit(shared_from_this());
-// }
-
private:
- future_object(future_object const&);
- future_object& operator=(future_object const&);
+ shared_state(shared_state const&);
+ shared_state& operator=(shared_state const&);
};
template<>
- struct future_object<void>:
- detail::future_object_base
+ struct shared_state<void>:
+ detail::shared_state_base
{
typedef void shared_future_get_result_type;
- future_object()
+ shared_state()
{}
void mark_finished_with_result_internal(boost::unique_lock<boost::mutex>& lock)
@@ -821,27 +808,18 @@ namespace boost
mark_finished_with_result_internal(lock);
}
- void get()
- {
- this->wait();
- }
- void get_sh()
+ virtual void get()
{
- wait();
+ boost::unique_lock<boost::mutex> lock(mutex);
+ this->wait_internal(lock);
}
- // todo move this to detail::future_object_base
- future_state::state get_state()
+
+ virtual void get_sh()
{
- boost::lock_guard<boost::mutex> guard(mutex);
- if(!done)
- {
- return future_state::waiting;
- }
- else
- {
- return future_state::ready;
- }
+ boost::unique_lock<boost::mutex> lock(mutex);
+ this->wait_internal(lock);
}
+
void set_value_at_thread_exit()
{
unique_lock<boost::mutex> lk(this->mutex);
@@ -849,50 +827,65 @@ namespace boost
{
throw_exception(promise_already_satisfied());
}
- this->is_constructed = true;
- get_current_thread_data()->make_ready_at_thread_exit(shared_from_this());
+ this->is_constructed = true;
+ detail::make_ready_at_thread_exit(shared_from_this());
}
private:
- future_object(future_object const&);
- future_object& operator=(future_object const&);
+ shared_state(shared_state const&);
+ shared_state& operator=(shared_state const&);
};
/////////////////////////
- /// future_async_object
+ /// future_async_shared_state_base
/////////////////////////
- template<typename Rp, typename Fp>
- struct future_async_object: future_object<Rp>
+ template<typename Rp>
+ struct future_async_shared_state_base: shared_state<Rp>
{
- typedef future_object<Rp> base_type;
- typedef typename base_type::move_dest_type move_dest_type;
-
+ typedef shared_state<Rp> base_type;
+ protected:
boost::thread thr_;
-
+ void join()
+ {
+ if (thr_.joinable()) thr_.join();
+ }
public:
- explicit future_async_object(BOOST_THREAD_FWD_REF(Fp) f) :
- thr_(&future_async_object::run, this, boost::forward<Fp>(f))
+ future_async_shared_state_base()
+ {
+ this->set_async();
+ }
+ explicit future_async_shared_state_base(BOOST_THREAD_RV_REF(boost::thread) th) :
+ thr_(boost::move(th))
{
this->set_async();
}
- ~future_async_object()
+ ~future_async_shared_state_base()
{
- if (thr_.joinable()) thr_.join();
+ join();
}
- move_dest_type get()
+ virtual void wait(bool rethrow)
{
- if (thr_.joinable()) thr_.join();
- // fixme Is the lock needed during the whole scope?
- //this->wait();
- boost::unique_lock<boost::mutex> lock(this->mutex);
- this->wait_internal(lock);
-
- //return static_cast<move_dest_type>(*(this->result));
- //return boost::move<Rp>(*(this->result));
- return boost::move(*(this->result));
+ join();
+ this->base_type::wait(rethrow);
}
- static void run(future_async_object* that, BOOST_THREAD_FWD_REF(Fp) f)
+ };
+
+ /////////////////////////
+ /// future_async_shared_state
+ /////////////////////////
+ template<typename Rp, typename Fp>
+ struct future_async_shared_state: future_async_shared_state_base<Rp>
+ {
+ typedef future_async_shared_state_base<Rp> base_type;
+
+ public:
+ explicit future_async_shared_state(BOOST_THREAD_FWD_REF(Fp) f) :
+ base_type(thread(&future_async_shared_state::run, this, boost::forward<Fp>(f)))
+ {
+ }
+
+ static void run(future_async_shared_state* that, BOOST_THREAD_FWD_REF(Fp) f)
{
try
{
@@ -912,24 +905,17 @@ namespace boost
};
template<typename Fp>
- struct future_async_object<void, Fp>: public future_object<void>
+ struct future_async_shared_state<void, Fp>: public future_async_shared_state_base<void>
{
- typedef future_object<void> base_type;
- boost::thread thr_;
+ typedef future_async_shared_state_base<void> base_type;
public:
- explicit future_async_object(BOOST_THREAD_FWD_REF(Fp) f) :
- thr_(&future_async_object::run, this, boost::forward<Fp>(f))
- {
- this->set_async();
- }
-
- ~future_async_object()
+ explicit future_async_shared_state(BOOST_THREAD_FWD_REF(Fp) f) :
+ base_type(thread(&future_async_shared_state::run, this, boost::forward<Fp>(f)))
{
- if (thr_.joinable()) thr_.join();
}
- static void run(future_async_object* that, BOOST_THREAD_FWD_REF(Fp) f)
+ static void run(future_async_shared_state* that, BOOST_THREAD_FWD_REF(Fp) f)
{
try
{
@@ -950,37 +936,17 @@ namespace boost
};
template<typename Rp, typename Fp>
- struct future_async_object<Rp&, Fp>: future_object<Rp&>
+ struct future_async_shared_state<Rp&, Fp>: future_async_shared_state_base<Rp&>
{
- typedef future_object<Rp&> base_type;
- typedef typename base_type::move_dest_type move_dest_type;
-
- boost::thread thr_;
+ typedef future_async_shared_state_base<Rp&> base_type;
public:
- explicit future_async_object(BOOST_THREAD_FWD_REF(Fp) f) :
- thr_(&future_async_object::run, this, boost::forward<Fp>(f))
+ explicit future_async_shared_state(BOOST_THREAD_FWD_REF(Fp) f) :
+ base_type(thread(&future_async_shared_state::run, this, boost::forward<Fp>(f)))
{
- this->set_async();
- }
-
- ~future_async_object()
- {
- if (thr_.joinable()) thr_.join();
}
- move_dest_type get()
- {
- if (thr_.joinable()) thr_.join();
- // fixme Is the lock needed during the whole scope?
- //this->wait();
- boost::unique_lock<boost::mutex> lock(this->mutex);
- this->wait_internal(lock);
-
- //return static_cast<move_dest_type>(*(this->result));
- return boost::move(*(this->result));
- }
- static void run(future_async_object* that, BOOST_THREAD_FWD_REF(Fp) f)
+ static void run(future_async_shared_state* that, BOOST_THREAD_FWD_REF(Fp) f)
{
try
{
@@ -1000,16 +966,16 @@ namespace boost
};
//////////////////////////
- /// future_deferred_object
+ /// future_deferred_shared_state
//////////////////////////
template<typename Rp, typename Fp>
- struct future_deferred_object: future_object<Rp>
+ struct future_deferred_shared_state: shared_state<Rp>
{
- typedef future_object<Rp> base_type;
+ typedef shared_state<Rp> base_type;
Fp func_;
public:
- explicit future_deferred_object(BOOST_THREAD_FWD_REF(Fp) f)
+ explicit future_deferred_shared_state(BOOST_THREAD_FWD_REF(Fp) f)
: func_(boost::forward<Fp>(f))
{
this->set_deferred();
@@ -1018,7 +984,11 @@ namespace boost
virtual void execute(boost::unique_lock<boost::mutex>& lck) {
try
{
- this->mark_finished_with_result_internal(func_(), lck);
+ Fp local_fuct=boost::move(func_);
+ relocker relock(lck);
+ Rp res = local_fuct();
+ relock.lock();
+ this->mark_finished_with_result_internal(boost::move(res), lck);
}
catch (...)
{
@@ -1027,13 +997,13 @@ namespace boost
}
};
template<typename Rp, typename Fp>
- struct future_deferred_object<Rp&,Fp>: future_object<Rp&>
+ struct future_deferred_shared_state<Rp&,Fp>: shared_state<Rp&>
{
- typedef future_object<Rp&> base_type;
+ typedef shared_state<Rp&> base_type;
Fp func_;
public:
- explicit future_deferred_object(BOOST_THREAD_FWD_REF(Fp) f)
+ explicit future_deferred_shared_state(BOOST_THREAD_FWD_REF(Fp) f)
: func_(boost::forward<Fp>(f))
{
this->set_deferred();
@@ -1052,13 +1022,13 @@ namespace boost
};
template<typename Fp>
- struct future_deferred_object<void,Fp>: future_object<void>
+ struct future_deferred_shared_state<void,Fp>: shared_state<void>
{
- typedef future_object<void> base_type;
+ typedef shared_state<void> base_type;
Fp func_;
public:
- explicit future_deferred_object(BOOST_THREAD_FWD_REF(Fp) f)
+ explicit future_deferred_shared_state(BOOST_THREAD_FWD_REF(Fp) f)
: func_(boost::forward<Fp>(f))
{
this->set_deferred();
@@ -1067,7 +1037,10 @@ namespace boost
virtual void execute(boost::unique_lock<boost::mutex>& lck) {
try
{
- func_();
+ Fp local_fuct=boost::move(func_);
+ relocker relock(lck);
+ local_fuct();
+ relock.lock();
this->mark_finished_with_result_internal(lck);
}
catch (...)
@@ -1078,13 +1051,13 @@ namespace boost
};
// template<typename T, typename Allocator>
-// struct future_object_alloc: public future_object<T>
+// struct shared_state_alloc: public shared_state<T>
// {
-// typedef future_object<T> base;
+// typedef shared_state<T> base;
// Allocator alloc_;
//
// public:
-// explicit future_object_alloc(const Allocator& a)
+// explicit shared_state_alloc(const Allocator& a)
// : alloc_(a) {}
//
// };
@@ -1095,12 +1068,12 @@ namespace boost
struct registered_waiter
{
- boost::shared_ptr<detail::future_object_base> future_;
- detail::future_object_base::waiter_list::iterator wait_iterator;
+ boost::shared_ptr<detail::shared_state_base> future_;
+ detail::shared_state_base::waiter_list::iterator wait_iterator;
count_type index;
- registered_waiter(boost::shared_ptr<detail::future_object_base> const& a_future,
- detail::future_object_base::waiter_list::iterator wait_iterator_,
+ registered_waiter(boost::shared_ptr<detail::shared_state_base> const& a_future,
+ detail::shared_state_base::waiter_list::iterator wait_iterator_,
count_type index_):
future_(a_future),wait_iterator(wait_iterator_),index(index_)
{}
@@ -1121,11 +1094,7 @@ namespace boost
{
for(count_type_portable i=0;i<count;++i)
{
-#if defined __DECCXX || defined __SUNPRO_CC || defined __hpux
- locks[i]=boost::unique_lock<boost::mutex>(futures[i].future_->mutex).move();
-#else
- locks[i]=boost::unique_lock<boost::mutex>(futures[i].future_->mutex); // TODO shouldn't be moved explicitly
-#endif
+ locks[i]=BOOST_THREAD_MAKE_RV_REF(boost::unique_lock<boost::mutex>(futures[i].future_->mutex));
}
}
@@ -1157,11 +1126,25 @@ namespace boost
{
if(f.future_)
{
- futures.push_back(registered_waiter(f.future_,f.future_->register_external_waiter(cv),future_count));
+ registered_waiter waiter(f.future_,f.future_->register_external_waiter(cv),future_count);
+ try {
+ futures.push_back(waiter);
+ } catch(...) {
+ f.future_->remove_external_waiter(waiter.wait_iterator);
+ throw;
+ }
}
++future_count;
}
+#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+ template<typename F1, typename... Fs>
+ void add(F1& f1, Fs&... fs)
+ {
+ add(f1); add(fs...);
+ }
+#endif
+
count_type wait()
{
all_futures_lock lk(futures);
@@ -1200,18 +1183,21 @@ namespace boost
struct is_future_type
{
BOOST_STATIC_CONSTANT(bool, value=false);
+ typedef void type;
};
template<typename T>
struct is_future_type<BOOST_THREAD_FUTURE<T> >
{
BOOST_STATIC_CONSTANT(bool, value=true);
+ typedef T type;
};
template<typename T>
struct is_future_type<shared_future<T> >
{
BOOST_STATIC_CONSTANT(bool, value=true);
+ typedef T type;
};
template<typename Iterator>
@@ -1223,6 +1209,7 @@ namespace boost
}
}
+#ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES
template<typename F1,typename F2>
typename boost::enable_if<is_future_type<F1>,void>::type wait_for_all(F1& f1,F2& f2)
{
@@ -1256,6 +1243,16 @@ namespace boost
f4.wait();
f5.wait();
}
+#else
+ template<typename F1, typename... Fs>
+ void wait_for_all(F1& f1, Fs&... fs)
+ {
+ bool dummy[] = { (f1.wait(), true), (fs.wait(), true)... };
+
+ // prevent unused parameter warning
+ (void) dummy;
+ }
+#endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template<typename Iterator>
typename boost::disable_if<is_future_type<Iterator>,Iterator>::type wait_for_any(Iterator begin,Iterator end)
@@ -1271,6 +1268,7 @@ namespace boost
return boost::next(begin,waiter.wait());
}
+#ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES
template<typename F1,typename F2>
typename boost::enable_if<is_future_type<F1>,unsigned>::type wait_for_any(F1& f1,F2& f2)
{
@@ -1312,6 +1310,15 @@ namespace boost
waiter.add(f5);
return waiter.wait();
}
+#else
+ template<typename F1, typename... Fs>
+ typename boost::enable_if<is_future_type<F1>, unsigned>::type wait_for_any(F1& f1, Fs&... fs)
+ {
+ detail::future_waiter waiter;
+ waiter.add(f1, fs...);
+ return waiter.wait();
+ }
+#endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <typename R>
class promise;
@@ -1332,8 +1339,15 @@ namespace boost
class basic_future : public base_future
{
protected:
+ public:
- typedef boost::shared_ptr<detail::future_object<R> > future_ptr;
+ typedef boost::shared_ptr<detail::shared_state<R> > future_ptr;
+ static //BOOST_CONSTEXPR
+ future_ptr make_exceptional_future_ptr(exceptional_ptr const& ex) {
+ promise<R> p;
+ p.set_exception(ex.ptr_);
+ return p.get_future().future_;
+ }
future_ptr future_;
@@ -1349,6 +1363,14 @@ namespace boost
BOOST_THREAD_MOVABLE(basic_future)
basic_future(): future_() {}
+
+
+ //BOOST_CONSTEXPR
+ basic_future(exceptional_ptr const& ex)
+ : future_(make_exceptional_future_ptr(ex))
+ {
+ }
+
~basic_future() {}
basic_future(BOOST_THREAD_RV_REF(basic_future) other) BOOST_NOEXCEPT:
@@ -1367,7 +1389,7 @@ namespace boost
future_.swap(that.future_);
}
// functions to check state, and wait for ready
- state get_state() const BOOST_NOEXCEPT
+ state get_state() const
{
if(!future_)
{
@@ -1376,27 +1398,34 @@ namespace boost
return future_->get_state();
}
- bool is_ready() const BOOST_NOEXCEPT
+ bool is_ready() const
{
return get_state()==future_state::ready;
}
- bool has_exception() const BOOST_NOEXCEPT
+ bool has_exception() const
{
return future_ && future_->has_exception();
}
- bool has_value() const BOOST_NOEXCEPT
+ bool has_value() const
{
return future_ && future_->has_value();
}
- launch launch_policy() const BOOST_NOEXCEPT
+ launch launch_policy(boost::unique_lock<boost::mutex>& lk) const
{
- if ( future_ ) return future_->launch_policy();
+ if ( future_ ) return future_->launch_policy(lk);
else return launch(launch::none);
}
+ exception_ptr get_exception_ptr()
+ {
+ return future_
+ ? future_->get_exception_ptr()
+ : exception_ptr();
+ }
+
bool valid() const BOOST_NOEXCEPT
{
return future_ != 0;
@@ -1458,23 +1487,33 @@ namespace boost
#if (!defined _MSC_VER || _MSC_VER >= 1400) // _MSC_VER == 1400 on MSVC 2005
template <class Rp, class Fp>
BOOST_THREAD_FUTURE<Rp>
- make_future_async_object(BOOST_THREAD_FWD_REF(Fp) f);
+ make_future_async_shared_state(BOOST_THREAD_FWD_REF(Fp) f);
template <class Rp, class Fp>
BOOST_THREAD_FUTURE<Rp>
- make_future_deferred_object(BOOST_THREAD_FWD_REF(Fp) f);
+ make_future_deferred_shared_state(BOOST_THREAD_FWD_REF(Fp) f);
#endif // #if (!defined _MSC_VER || _MSC_VER >= 1400)
-
#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
+ template<typename F, typename Rp, typename Fp>
+ struct future_deferred_continuation_shared_state;
+ template<typename F, typename Rp, typename Fp>
+ struct future_async_continuation_shared_state;
+
template <class F, class Rp, class Fp>
BOOST_THREAD_FUTURE<Rp>
- make_future_async_continuation(boost::unique_lock<boost::mutex> &lock, F& f, BOOST_THREAD_FWD_REF(Fp) c);
+ make_future_async_continuation_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c);
template <class F, class Rp, class Fp>
BOOST_THREAD_FUTURE<Rp>
- make_future_deferred_continuation(boost::unique_lock<boost::mutex> &lock, F& f, BOOST_THREAD_FWD_REF(Fp) c);
+ make_future_deferred_continuation_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c);
+#endif
+#if defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
+ template<typename F, typename Rp>
+ struct future_unwrap_shared_state;
+ template <class F, class Rp>
+ inline BOOST_THREAD_FUTURE<Rp>
+ make_future_unwrap_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f);
#endif
-
}
template <typename R>
@@ -1488,9 +1527,24 @@ namespace boost
friend class promise<R>;
#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
template <typename, typename, typename>
- friend struct detail::future_async_continuation;
+ friend struct detail::future_async_continuation_shared_state;
template <typename, typename, typename>
- friend struct detail::future_deferred_continuation;
+ friend struct detail::future_deferred_continuation_shared_state;
+
+ template <class F, class Rp, class Fp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_async_continuation_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c);
+
+ template <class F, class Rp, class Fp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_deferred_continuation_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c);
+#endif
+#if defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
+ template<typename F, typename Rp>
+ friend struct detail::future_unwrap_shared_state;
+ template <class F, class Rp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_unwrap_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f);
#endif
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
template <class> friend class packaged_task; // todo check if this works in windows
@@ -1501,23 +1555,15 @@ namespace boost
template <class Rp, class Fp>
friend BOOST_THREAD_FUTURE<Rp>
- detail::make_future_async_object(BOOST_THREAD_FWD_REF(Fp) f);
+ detail::make_future_async_shared_state(BOOST_THREAD_FWD_REF(Fp) f);
template <class Rp, class Fp>
friend BOOST_THREAD_FUTURE<Rp>
- detail::make_future_deferred_object(BOOST_THREAD_FWD_REF(Fp) f);
-
-#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
- template <class F, class Rp, class Fp>
- friend BOOST_THREAD_FUTURE<Rp>
- detail::make_future_async_continuation(boost::unique_lock<boost::mutex> &lock, F& f, BOOST_THREAD_FWD_REF(Fp) c);
+ detail::make_future_deferred_shared_state(BOOST_THREAD_FWD_REF(Fp) f);
- template <class F, class Rp, class Fp>
- friend BOOST_THREAD_FUTURE<Rp>
- detail::make_future_deferred_continuation(boost::unique_lock<boost::mutex> &lock, F& f, BOOST_THREAD_FWD_REF(Fp) c);
-#endif
typedef typename detail::future_traits<R>::move_dest_type move_dest_type;
+ public: // when_all
BOOST_THREAD_FUTURE(future_ptr a_future):
base_type(a_future)
@@ -1527,8 +1573,12 @@ namespace boost
public:
BOOST_THREAD_MOVABLE_ONLY(BOOST_THREAD_FUTURE)
typedef future_state::state state;
+ typedef R value_type; // EXTENSION
BOOST_CONSTEXPR BOOST_THREAD_FUTURE() {}
+ //BOOST_CONSTEXPR
+ BOOST_THREAD_FUTURE(exceptional_ptr const& ex):
+ base_type(ex) {}
~BOOST_THREAD_FUTURE() {}
@@ -1536,6 +1586,7 @@ namespace boost
base_type(boost::move(static_cast<base_type&>(BOOST_THREAD_RV(other))))
{
}
+ inline BOOST_THREAD_FUTURE(BOOST_THREAD_RV_REF(BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R> >) other); // EXTENSION
BOOST_THREAD_FUTURE& operator=(BOOST_THREAD_RV_REF(BOOST_THREAD_FUTURE) other) BOOST_NOEXCEPT
{
@@ -1543,6 +1594,12 @@ namespace boost
return *this;
}
+// BOOST_THREAD_FUTURE& operator=(exceptional_ptr const& ex)
+// {
+// this->future_=base_type::make_exceptional_future_ptr(ex);
+// return *this;
+// }
+
shared_future<R> share()
{
return shared_future<R>(::boost::move(*this));
@@ -1553,12 +1610,12 @@ namespace boost
static_cast<base_type*>(this)->swap(other);
}
- // todo this functioˆn must be private and friendship provided to the internal users.
+ // todo this function must be private and friendship provided to the internal users.
void set_async()
{
this->future_->set_async();
}
- // todo this functioˆn must be private and friendship provided to the internal users.
+ // todo this function must be private and friendship provided to the internal users.
void set_deferred()
{
this->future_->set_deferred();
@@ -1571,14 +1628,53 @@ namespace boost
{
boost::throw_exception(future_uninitialized());
}
-#ifdef BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
future_ptr fut_=this->future_;
+#ifdef BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
this->future_.reset();
+#endif
return fut_->get();
+ }
-#else
- return this->future_->get();
+ template <typename R2>
+ typename boost::disable_if< is_void<R2>, move_dest_type>::type
+ get_or(BOOST_THREAD_RV_REF(R2) v)
+ {
+ if(!this->future_)
+ {
+ boost::throw_exception(future_uninitialized());
+ }
+ this->future_->wait(false);
+ future_ptr fut_=this->future_;
+#ifdef BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
+ this->future_.reset();
+#endif
+ if (fut_->has_value()) {
+ return fut_->get();
+ }
+ else {
+ return boost::move(v);
+ }
+ }
+
+ template <typename R2>
+ typename boost::disable_if< is_void<R2>, move_dest_type>::type
+ get_or(R2 const& v) // EXTENSION
+ {
+ if(!this->future_)
+ {
+ boost::throw_exception(future_uninitialized());
+ }
+ this->future_->wait(false);
+ future_ptr fut_=this->future_;
+#ifdef BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
+ this->future_.reset();
#endif
+ if (fut_->has_value()) {
+ return fut_->get();
+ }
+ else {
+ return v;
+ }
}
@@ -1594,16 +1690,210 @@ namespace boost
// inline BOOST_THREAD_FUTURE<RF> then(launch policy, RF(*func)(BOOST_THREAD_FUTURE&));
//#endif
template<typename F>
- inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE&)>::type>
- then(BOOST_THREAD_FWD_REF(F) func);
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE)>::type>
+ then(BOOST_THREAD_FWD_REF(F) func); // EXTENSION
template<typename F>
- inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE&)>::type>
- then(launch policy, BOOST_THREAD_FWD_REF(F) func);
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE)>::type>
+ then(launch policy, BOOST_THREAD_FWD_REF(F) func); // EXTENSION
+
+ template <typename R2>
+ inline typename boost::disable_if< is_void<R2>, BOOST_THREAD_FUTURE<R> >::type
+ fallback_to(BOOST_THREAD_RV_REF(R2) v); // EXTENSION
+ template <typename R2>
+ inline typename boost::disable_if< is_void<R2>, BOOST_THREAD_FUTURE<R> >::type
+ fallback_to(R2 const& v); // EXTENSION
+
#endif
+
+//#if defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
+// inline
+// typename boost::enable_if<
+// is_future_type<value_type>,
+// value_type
+// //BOOST_THREAD_FUTURE<typename is_future_type<value_type>::type>
+// >::type
+// unwrap();
+//#endif
+
};
BOOST_THREAD_DCL_MOVABLE_BEG(T) BOOST_THREAD_FUTURE<T> BOOST_THREAD_DCL_MOVABLE_END
+ template <typename R2>
+ class BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R2> > : public detail::basic_future<BOOST_THREAD_FUTURE<R2> >
+ {
+ typedef BOOST_THREAD_FUTURE<R2> R;
+
+ private:
+ typedef detail::basic_future<R> base_type;
+ typedef typename base_type::future_ptr future_ptr;
+
+ friend class shared_future<R>;
+ friend class promise<R>;
+ #if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
+ template <typename, typename, typename>
+ friend struct detail::future_async_continuation_shared_state;
+ template <typename, typename, typename>
+ friend struct detail::future_deferred_continuation_shared_state;
+
+ template <class F, class Rp, class Fp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_async_continuation_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c);
+
+ template <class F, class Rp, class Fp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_deferred_continuation_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c);
+ #endif
+#if defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
+ template<typename F, typename Rp>
+ friend struct detail::future_unwrap_shared_state;
+ template <class F, class Rp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_unwrap_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f);
+#endif
+ #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
+ template <class> friend class packaged_task; // todo check if this works in windows
+ #else
+ friend class packaged_task<R>;
+ #endif
+ friend class detail::future_waiter;
+
+ template <class Rp, class Fp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_async_shared_state(BOOST_THREAD_FWD_REF(Fp) f);
+
+ template <class Rp, class Fp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_deferred_shared_state(BOOST_THREAD_FWD_REF(Fp) f);
+
+
+ typedef typename detail::future_traits<R>::move_dest_type move_dest_type;
+
+ BOOST_THREAD_FUTURE(future_ptr a_future):
+ base_type(a_future)
+ {
+ }
+
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(BOOST_THREAD_FUTURE)
+ typedef future_state::state state;
+ typedef R value_type; // EXTENSION
+
+ BOOST_CONSTEXPR BOOST_THREAD_FUTURE() {}
+ //BOOST_CONSTEXPR
+ BOOST_THREAD_FUTURE(exceptional_ptr const& ex):
+ base_type(ex) {}
+
+ ~BOOST_THREAD_FUTURE() {}
+
+ BOOST_THREAD_FUTURE(BOOST_THREAD_RV_REF(BOOST_THREAD_FUTURE) other) BOOST_NOEXCEPT:
+ base_type(boost::move(static_cast<base_type&>(BOOST_THREAD_RV(other))))
+ {
+ }
+
+ BOOST_THREAD_FUTURE& operator=(BOOST_THREAD_RV_REF(BOOST_THREAD_FUTURE) other) BOOST_NOEXCEPT
+ {
+ this->base_type::operator=(boost::move(static_cast<base_type&>(BOOST_THREAD_RV(other))));
+ return *this;
+ }
+// BOOST_THREAD_FUTURE& operator=(exceptional_ptr const& ex)
+// {
+// this->future_=base_type::make_exceptional_future_ptr(ex);
+// return *this;
+// }
+
+ shared_future<R> share()
+ {
+ return shared_future<R>(::boost::move(*this));
+ }
+
+ void swap(BOOST_THREAD_FUTURE& other)
+ {
+ static_cast<base_type*>(this)->swap(other);
+ }
+
+ // todo this function must be private and friendship provided to the internal users.
+ void set_async()
+ {
+ this->future_->set_async();
+ }
+ // todo this function must be private and friendship provided to the internal users.
+ void set_deferred()
+ {
+ this->future_->set_deferred();
+ }
+
+ // retrieving the value
+ move_dest_type get()
+ {
+ if(!this->future_)
+ {
+ boost::throw_exception(future_uninitialized());
+ }
+ future_ptr fut_=this->future_;
+ #ifdef BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
+ this->future_.reset();
+ #endif
+ return fut_->get();
+ }
+ move_dest_type get_or(BOOST_THREAD_RV_REF(R) v) // EXTENSION
+ {
+ if(!this->future_)
+ {
+ boost::throw_exception(future_uninitialized());
+ }
+ this->future_->wait(false);
+ future_ptr fut_=this->future_;
+ #ifdef BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
+ this->future_.reset();
+ #endif
+ if (fut_->has_value()) return fut_->get();
+ else return boost::move(v);
+ }
+
+ move_dest_type get_or(R const& v) // EXTENSION
+ {
+ if(!this->future_)
+ {
+ boost::throw_exception(future_uninitialized());
+ }
+ this->future_->wait(false);
+ future_ptr fut_=this->future_;
+ #ifdef BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
+ this->future_.reset();
+ #endif
+ if (fut_->has_value()) return fut_->get();
+ else return v;
+ }
+
+
+ #if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
+
+ // template<typename F>
+ // auto then(F&& func) -> BOOST_THREAD_FUTURE<decltype(func(*this))>;
+
+ //#if defined(BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR)
+ // template<typename RF>
+ // inline BOOST_THREAD_FUTURE<RF> then(RF(*func)(BOOST_THREAD_FUTURE&));
+ // template<typename RF>
+ // inline BOOST_THREAD_FUTURE<RF> then(launch policy, RF(*func)(BOOST_THREAD_FUTURE&));
+ //#endif
+ template<typename F>
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE)>::type>
+ then(BOOST_THREAD_FWD_REF(F) func); // EXTENSION
+ template<typename F>
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE)>::type>
+ then(launch policy, BOOST_THREAD_FWD_REF(F) func); // EXTENSION
+ #endif
+
+ #if defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
+ inline
+ BOOST_THREAD_FUTURE<R2>
+ unwrap(); // EXTENSION
+ #endif
+
+ };
+
template <typename R>
class shared_future : public detail::basic_future<R>
{
@@ -1614,6 +1904,20 @@ namespace boost
friend class detail::future_waiter;
friend class promise<R>;
+#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
+ template <typename, typename, typename>
+ friend struct detail::future_async_continuation_shared_state;
+ template <typename, typename, typename>
+ friend struct detail::future_deferred_continuation_shared_state;
+
+ template <class F, class Rp, class Fp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_async_continuation_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c);
+
+ template <class F, class Rp, class Fp>
+ friend BOOST_THREAD_FUTURE<Rp>
+ detail::make_future_deferred_continuation_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c);
+#endif
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
template <class> friend class packaged_task;// todo check if this works in windows
#else
@@ -1625,6 +1929,7 @@ namespace boost
public:
BOOST_THREAD_MOVABLE(shared_future)
+ typedef R value_type; // EXTENSION
shared_future(shared_future const& other):
base_type(other)
@@ -1634,7 +1939,9 @@ namespace boost
BOOST_CONSTEXPR shared_future()
{}
-
+ //BOOST_CONSTEXPR
+ shared_future(exceptional_ptr const& ex):
+ base_type(ex) {}
~shared_future()
{}
@@ -1643,6 +1950,12 @@ namespace boost
shared_future(other).swap(*this);
return *this;
}
+// shared_future& operator=(exceptional_ptr const& ex)
+// {
+// this->future_=base_type::make_exceptional_future_ptr(ex);
+// return *this;
+// }
+
shared_future(BOOST_THREAD_RV_REF(shared_future) other) BOOST_NOEXCEPT :
base_type(boost::move(static_cast<base_type&>(BOOST_THREAD_RV(other))))
{
@@ -1661,9 +1974,6 @@ namespace boost
shared_future& operator=(BOOST_THREAD_RV_REF( BOOST_THREAD_FUTURE<R> ) other) BOOST_NOEXCEPT
{
base_type::operator=(boost::move(static_cast<base_type&>(BOOST_THREAD_RV(other))));
- //shared_future(boost::move(other)).swap(*this);
- //this->future_.swap(BOOST_THREAD_RV(other).future_);
- //BOOST_THREAD_RV(other).future_.reset();
return *this;
}
@@ -1673,7 +1983,7 @@ namespace boost
}
// retrieving the value
- typename detail::future_object<R>::shared_future_get_result_type get()
+ typename detail::shared_state<R>::shared_future_get_result_type get()
{
if(!this->future_)
{
@@ -1683,6 +1993,49 @@ namespace boost
return this->future_->get_sh();
}
+ template <typename R2>
+ typename boost::disable_if< is_void<R2>, typename detail::shared_state<R>::shared_future_get_result_type>::type
+ get_or(BOOST_THREAD_RV_REF(R2) v) // EXTENSION
+ {
+ if(!this->future_)
+ {
+ boost::throw_exception(future_uninitialized());
+ }
+ future_ptr fut_=this->future_;
+ fut_->wait();
+ if (fut_->has_value()) return fut_->get_sh();
+ else return boost::move(v);
+ }
+
+#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
+
+// template<typename F>
+// auto then(F&& func) -> BOOST_THREAD_FUTURE<decltype(func(*this))>;
+// template<typename F>
+// auto then(launch, F&& func) -> BOOST_THREAD_FUTURE<decltype(func(*this))>;
+
+//#if defined(BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR)
+// template<typename RF>
+// inline BOOST_THREAD_FUTURE<RF> then(RF(*func)(shared_future&));
+// template<typename RF>
+// inline BOOST_THREAD_FUTURE<RF> then(launch policy, RF(*func)(shared_future&));
+//#endif
+ template<typename F>
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(shared_future)>::type>
+ then(BOOST_THREAD_FWD_REF(F) func); // EXTENSION
+ template<typename F>
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(shared_future)>::type>
+ then(launch policy, BOOST_THREAD_FWD_REF(F) func); // EXTENSION
+#endif
+//#if defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
+// inline
+// typename boost::enable_if_c<
+// is_future_type<value_type>::value,
+// BOOST_THREAD_FUTURE<typename is_future_type<value_type>::type>
+// >::type
+// unwrap();
+//#endif
+
};
BOOST_THREAD_DCL_MOVABLE_BEG(T) shared_future<T> BOOST_THREAD_DCL_MOVABLE_END
@@ -1700,7 +2053,7 @@ namespace boost
template <typename R>
class promise
{
- typedef boost::shared_ptr<detail::future_object<R> > future_ptr;
+ typedef boost::shared_ptr<detail::shared_state<R> > future_ptr;
future_ptr future_;
bool future_obtained;
@@ -1712,7 +2065,7 @@ namespace boost
if(!atomic_load(&future_))
{
future_ptr blank;
- atomic_compare_exchange(&future_,&blank,future_ptr(new detail::future_object<R>));
+ atomic_compare_exchange(&future_,&blank,future_ptr(new detail::shared_state<R>));
}
#include <boost/detail/atomic_redef_macros.hpp>
#endif
@@ -1724,11 +2077,11 @@ namespace boost
template <class Allocator>
promise(boost::allocator_arg_t, Allocator a)
{
- typedef typename Allocator::template rebind<detail::future_object<R> >::other A2;
+ typedef typename Allocator::template rebind<detail::shared_state<R> >::other A2;
A2 a2(a);
typedef thread_detail::allocator_destructor<A2> D;
- future_ = future_ptr(::new(a2.allocate(1)) detail::future_object<R>(), D(a2, 1) );
+ future_ = future_ptr(::new(a2.allocate(1)) detail::shared_state<R>(), D(a2, 1) );
future_obtained = false;
}
#endif
@@ -1736,7 +2089,7 @@ namespace boost
#if defined BOOST_THREAD_PROVIDES_PROMISE_LAZY
future_(),
#else
- future_(new detail::future_object<R>()),
+ future_(new detail::shared_state<R>()),
#endif
future_obtained(false)
{}
@@ -1829,7 +2182,11 @@ namespace boost
}
future_->mark_exceptional_finish_internal(p, lock);
}
-
+ template <typename E>
+ void set_exception(E ex)
+ {
+ set_exception(copy_exception(ex));
+ }
// setting the result with deferred notification
void set_value_at_thread_exit(const R& r)
{
@@ -1856,6 +2213,11 @@ namespace boost
}
future_->set_exception_at_thread_exit(e);
}
+ template <typename E>
+ void set_exception_at_thread_exit(E ex)
+ {
+ set_exception_at_thread_exit(copy_exception(ex));
+ }
template<typename F>
void set_wait_callback(F f)
@@ -1869,7 +2231,7 @@ namespace boost
template <typename R>
class promise<R&>
{
- typedef boost::shared_ptr<detail::future_object<R&> > future_ptr;
+ typedef boost::shared_ptr<detail::shared_state<R&> > future_ptr;
future_ptr future_;
bool future_obtained;
@@ -1881,7 +2243,7 @@ namespace boost
if(!atomic_load(&future_))
{
future_ptr blank;
- atomic_compare_exchange(&future_,&blank,future_ptr(new detail::future_object<R&>));
+ atomic_compare_exchange(&future_,&blank,future_ptr(new detail::shared_state<R&>));
}
#include <boost/detail/atomic_redef_macros.hpp>
#endif
@@ -1893,11 +2255,11 @@ namespace boost
template <class Allocator>
promise(boost::allocator_arg_t, Allocator a)
{
- typedef typename Allocator::template rebind<detail::future_object<R&> >::other A2;
+ typedef typename Allocator::template rebind<detail::shared_state<R&> >::other A2;
A2 a2(a);
typedef thread_detail::allocator_destructor<A2> D;
- future_ = future_ptr(::new(a2.allocate(1)) detail::future_object<R&>(), D(a2, 1) );
+ future_ = future_ptr(::new(a2.allocate(1)) detail::shared_state<R&>(), D(a2, 1) );
future_obtained = false;
}
#endif
@@ -1905,7 +2267,7 @@ namespace boost
#if defined BOOST_THREAD_PROVIDES_PROMISE_LAZY
future_(),
#else
- future_(new detail::future_object<R&>()),
+ future_(new detail::shared_state<R&>()),
#endif
future_obtained(false)
{}
@@ -1982,6 +2344,11 @@ namespace boost
}
future_->mark_exceptional_finish_internal(p, lock);
}
+ template <typename E>
+ void set_exception(E ex)
+ {
+ set_exception(copy_exception(ex));
+ }
// setting the result with deferred notification
void set_value_at_thread_exit(R& r)
@@ -2001,6 +2368,11 @@ namespace boost
}
future_->set_exception_at_thread_exit(e);
}
+ template <typename E>
+ void set_exception_at_thread_exit(E ex)
+ {
+ set_exception_at_thread_exit(copy_exception(ex));
+ }
template<typename F>
void set_wait_callback(F f)
@@ -2013,7 +2385,7 @@ namespace boost
template <>
class promise<void>
{
- typedef boost::shared_ptr<detail::future_object<void> > future_ptr;
+ typedef boost::shared_ptr<detail::shared_state<void> > future_ptr;
future_ptr future_;
bool future_obtained;
@@ -2024,7 +2396,7 @@ namespace boost
if(!atomic_load(&future_))
{
future_ptr blank;
- atomic_compare_exchange(&future_,&blank,future_ptr(new detail::future_object<void>));
+ atomic_compare_exchange(&future_,&blank,future_ptr(new detail::shared_state<void>));
}
#endif
}
@@ -2035,11 +2407,11 @@ namespace boost
template <class Allocator>
promise(boost::allocator_arg_t, Allocator a)
{
- typedef typename Allocator::template rebind<detail::future_object<void> >::other A2;
+ typedef typename Allocator::template rebind<detail::shared_state<void> >::other A2;
A2 a2(a);
typedef thread_detail::allocator_destructor<A2> D;
- future_ = future_ptr(::new(a2.allocate(1)) detail::future_object<void>(), D(a2, 1) );
+ future_ = future_ptr(::new(a2.allocate(1)) detail::shared_state<void>(), D(a2, 1) );
future_obtained = false;
}
#endif
@@ -2047,7 +2419,7 @@ namespace boost
#if defined BOOST_THREAD_PROVIDES_PROMISE_LAZY
future_(),
#else
- future_(new detail::future_object<void>),
+ future_(new detail::shared_state<void>),
#endif
future_obtained(false)
{}
@@ -2103,6 +2475,7 @@ namespace boost
boost::throw_exception(future_already_retrieved());
}
future_obtained=true;
+ //return BOOST_THREAD_MAKE_RV_REF(BOOST_THREAD_FUTURE<void>(future_));
return BOOST_THREAD_FUTURE<void>(future_);
}
@@ -2127,6 +2500,11 @@ namespace boost
}
future_->mark_exceptional_finish_internal(p,lock);
}
+ template <typename E>
+ void set_exception(E ex)
+ {
+ set_exception(copy_exception(ex));
+ }
// setting the result with deferred notification
void set_value_at_thread_exit()
@@ -2146,6 +2524,11 @@ namespace boost
}
future_->set_exception_at_thread_exit(e);
}
+ template <typename E>
+ void set_exception_at_thread_exit(E ex)
+ {
+ set_exception_at_thread_exit(copy_exception(ex));
+ }
template<typename F>
void set_wait_callback(F f)
@@ -2155,16 +2538,26 @@ namespace boost
}
};
-
+}
#if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
- namespace container
+namespace boost { namespace container {
+ template <class R, class Alloc>
+ struct uses_allocator< ::boost::promise<R> , Alloc> : true_type
{
- template <class R, class Alloc>
- struct uses_allocator<promise<R> , Alloc> : true_type
- {
- };
- }
+ };
+}}
+#if ! defined BOOST_NO_CXX11_ALLOCATOR
+namespace std {
+ template <class R, class Alloc>
+ struct uses_allocator< ::boost::promise<R> , Alloc> : true_type
+ {
+ };
+}
#endif
+#endif
+
+namespace boost
+{
BOOST_THREAD_DCL_MOVABLE_BEG(T) promise<T> BOOST_THREAD_DCL_MOVABLE_END
@@ -2172,23 +2565,23 @@ namespace boost
{
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
template<typename R>
- struct task_base;
+ struct task_base_shared_state;
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
template<typename R, typename ...ArgTypes>
- struct task_base<R(ArgTypes...)>:
+ struct task_base_shared_state<R(ArgTypes...)>:
#else
template<typename R>
- struct task_base<R()>:
+ struct task_base_shared_state<R()>:
#endif
#else
template<typename R>
- struct task_base:
+ struct task_base_shared_state:
#endif
- detail::future_object<R>
+ detail::shared_state<R>
{
bool started;
- task_base():
+ task_base_shared_state():
started(false)
{}
@@ -2256,30 +2649,30 @@ namespace boost
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
template<typename F, typename R>
- struct task_object;
+ struct task_shared_state;
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
template<typename F, typename R, typename ...ArgTypes>
- struct task_object<F, R(ArgTypes...)>:
- task_base<R(ArgTypes...)>
+ struct task_shared_state<F, R(ArgTypes...)>:
+ task_base_shared_state<R(ArgTypes...)>
#else
template<typename F, typename R>
- struct task_object<F, R()>:
- task_base<R()>
+ struct task_shared_state<F, R()>:
+ task_base_shared_state<R()>
#endif
#else
template<typename F, typename R>
- struct task_object:
- task_base<R>
+ struct task_shared_state:
+ task_base_shared_state<R>
#endif
{
private:
- task_object(task_object&);
+ task_shared_state(task_shared_state&);
public:
F f;
- task_object(F const& f_):
+ task_shared_state(F const& f_):
f(f_)
{}
- task_object(BOOST_THREAD_RV_REF(F) f_):
+ task_shared_state(BOOST_THREAD_RV_REF(F) f_):
f(boost::move(f_))
{}
@@ -2346,27 +2739,27 @@ namespace boost
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
template<typename F, typename R, typename ...ArgTypes>
- struct task_object<F, R&(ArgTypes...)>:
- task_base<R&(ArgTypes...)>
+ struct task_shared_state<F, R&(ArgTypes...)>:
+ task_base_shared_state<R&(ArgTypes...)>
#else
template<typename F, typename R>
- struct task_object<F, R&()>:
- task_base<R&()>
+ struct task_shared_state<F, R&()>:
+ task_base_shared_state<R&()>
#endif
#else
template<typename F, typename R>
- struct task_object<F,R&>:
- task_base<R&>
+ struct task_shared_state<F,R&>:
+ task_base_shared_state<R&>
#endif
{
private:
- task_object(task_object&);
+ task_shared_state(task_shared_state&);
public:
F f;
- task_object(F const& f_):
+ task_shared_state(F const& f_):
f(f_)
{}
- task_object(BOOST_THREAD_RV_REF(F) f_):
+ task_shared_state(BOOST_THREAD_RV_REF(F) f_):
f(boost::move(f_))
{}
@@ -2431,27 +2824,33 @@ namespace boost
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
template<typename R, typename ...ArgTypes>
- struct task_object<R (*)(ArgTypes...), R(ArgTypes...)>:
- task_base<R(ArgTypes...)>
+ struct task_shared_state<R (*)(ArgTypes...), R(ArgTypes...)>:
+ task_base_shared_state<R(ArgTypes...)>
#else
template<typename R>
- struct task_object<R (*)(), R()>:
- task_base<R()>
+ struct task_shared_state<R (*)(), R()>:
+ task_base_shared_state<R()>
#endif
#else
template<typename R>
- struct task_object<R (*)(), R> :
- task_base<R>
+ struct task_shared_state<R (*)(), R> :
+ task_base_shared_state<R>
#endif
{
private:
- task_object(task_object&);
+ task_shared_state(task_shared_state&);
public:
+#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+ R (*f)(BOOST_THREAD_RV_REF(ArgTypes) ... );
+ task_shared_state(R (*f_)(BOOST_THREAD_RV_REF(ArgTypes) ... )):
+ f(f_)
+ {}
+#else
R (*f)();
- task_object(R (*f_)()):
+ task_shared_state(R (*f_)()):
f(f_)
{}
-
+#endif
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
void do_apply(BOOST_THREAD_RV_REF(ArgTypes) ... args)
@@ -2513,27 +2912,33 @@ namespace boost
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
template<typename R, typename ...ArgTypes>
- struct task_object<R& (*)(ArgTypes...), R&(ArgTypes...)>:
- task_base<R&(ArgTypes...)>
+ struct task_shared_state<R& (*)(ArgTypes...), R&(ArgTypes...)>:
+ task_base_shared_state<R&(ArgTypes...)>
#else
template<typename R>
- struct task_object<R& (*)(), R&()>:
- task_base<R&()>
+ struct task_shared_state<R& (*)(), R&()>:
+ task_base_shared_state<R&()>
#endif
#else
template<typename R>
- struct task_object<R& (*)(), R&> :
- task_base<R&>
+ struct task_shared_state<R& (*)(), R&> :
+ task_base_shared_state<R&>
#endif
{
private:
- task_object(task_object&);
+ task_shared_state(task_shared_state&);
public:
+#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+ R& (*f)(BOOST_THREAD_RV_REF(ArgTypes) ... );
+ task_shared_state(R& (*f_)(BOOST_THREAD_RV_REF(ArgTypes) ... )):
+ f(f_)
+ {}
+#else
R& (*f)();
- task_object(R& (*f_)()):
+ task_shared_state(R& (*f_)()):
f(f_)
{}
-
+#endif
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
void do_apply(BOOST_THREAD_RV_REF(ArgTypes) ... args)
@@ -2594,27 +2999,27 @@ namespace boost
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
template<typename F, typename ...ArgTypes>
- struct task_object<F, void(ArgTypes...)>:
- task_base<void(ArgTypes...)>
+ struct task_shared_state<F, void(ArgTypes...)>:
+ task_base_shared_state<void(ArgTypes...)>
#else
template<typename F>
- struct task_object<F, void()>:
- task_base<void()>
+ struct task_shared_state<F, void()>:
+ task_base_shared_state<void()>
#endif
#else
template<typename F>
- struct task_object<F,void>:
- task_base<void>
+ struct task_shared_state<F,void>:
+ task_base_shared_state<void>
#endif
{
private:
- task_object(task_object&);
+ task_shared_state(task_shared_state&);
public:
F f;
- task_object(F const& f_):
+ task_shared_state(F const& f_):
f(f_)
{}
- task_object(BOOST_THREAD_RV_REF(F) f_):
+ task_shared_state(BOOST_THREAD_RV_REF(F) f_):
f(boost::move(f_))
{}
@@ -2676,24 +3081,24 @@ namespace boost
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
template<typename ...ArgTypes>
- struct task_object<void (*)(ArgTypes...), void(ArgTypes...)>:
- task_base<void(ArgTypes...)>
+ struct task_shared_state<void (*)(ArgTypes...), void(ArgTypes...)>:
+ task_base_shared_state<void(ArgTypes...)>
#else
template<>
- struct task_object<void (*)(), void()>:
- task_base<void()>
+ struct task_shared_state<void (*)(), void()>:
+ task_base_shared_state<void()>
#endif
#else
template<>
- struct task_object<void (*)(),void>:
- task_base<void>
+ struct task_shared_state<void (*)(),void>:
+ task_base_shared_state<void>
#endif
{
private:
- task_object(task_object&);
+ task_shared_state(task_shared_state&);
public:
void (*f)();
- task_object(void (*f_)()):
+ task_shared_state(void (*f_)()):
f(f_)
{}
@@ -2751,30 +3156,28 @@ namespace boost
}
}
};
-
}
-
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
template<typename R, typename ...ArgTypes>
class packaged_task<R(ArgTypes...)>
{
- typedef boost::shared_ptr<detail::task_base<R(ArgTypes...)> > task_ptr;
- boost::shared_ptr<detail::task_base<R(ArgTypes...)> > task;
+ typedef boost::shared_ptr<detail::task_base_shared_state<R(ArgTypes...)> > task_ptr;
+ boost::shared_ptr<detail::task_base_shared_state<R(ArgTypes...)> > task;
#else
template<typename R>
class packaged_task<R()>
{
- typedef boost::shared_ptr<detail::task_base<R()> > task_ptr;
- boost::shared_ptr<detail::task_base<R()> > task;
+ typedef boost::shared_ptr<detail::task_base_shared_state<R()> > task_ptr;
+ boost::shared_ptr<detail::task_base_shared_state<R()> > task;
#endif
#else
template<typename R>
class packaged_task
{
- typedef boost::shared_ptr<detail::task_base<R> > task_ptr;
- boost::shared_ptr<detail::task_base<R> > task;
+ typedef boost::shared_ptr<detail::task_base_shared_state<R> > task_ptr;
+ boost::shared_ptr<detail::task_base_shared_state<R> > task;
#endif
bool future_obtained;
struct dummy;
@@ -2795,16 +3198,16 @@ namespace boost
explicit packaged_task(R(*f)(), BOOST_THREAD_FWD_REF(ArgTypes)... args)
{
typedef R(*FR)(BOOST_THREAD_FWD_REF(ArgTypes)...);
- typedef detail::task_object<FR,R(ArgTypes...)> task_object_type;
- task= task_ptr(new task_object_type(f, boost::forward<ArgTypes>(args)...));
+ typedef detail::task_shared_state<FR,R(ArgTypes...)> task_shared_state_type;
+ task= task_ptr(new task_shared_state_type(f, boost::forward<ArgTypes>(args)...));
future_obtained=false;
}
#else
explicit packaged_task(R(*f)())
{
typedef R(*FR)();
- typedef detail::task_object<FR,R()> task_object_type;
- task= task_ptr(new task_object_type(f));
+ typedef detail::task_shared_state<FR,R()> task_shared_state_type;
+ task= task_ptr(new task_shared_state_type(f));
future_obtained=false;
}
#endif
@@ -2812,8 +3215,8 @@ namespace boost
explicit packaged_task(R(*f)())
{
typedef R(*FR)();
- typedef detail::task_object<FR,R> task_object_type;
- task= task_ptr(new task_object_type(f));
+ typedef detail::task_shared_state<FR,R> task_shared_state_type;
+ task= task_ptr(new task_shared_state_type(f));
future_obtained=false;
}
#endif
@@ -2821,20 +3224,21 @@ namespace boost
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template <class F>
explicit packaged_task(BOOST_THREAD_FWD_REF(F) f
- , typename disable_if<is_same<typename decay<F>::type, packaged_task>, dummy* >::type=0
+ , typename boost::disable_if<is_same<typename decay<F>::type, packaged_task>, dummy* >::type=0
)
{
- typedef typename remove_cv<typename remove_reference<F>::type>::type FR;
+ //typedef typename remove_cv<typename remove_reference<F>::type>::type FR;
+ typedef typename decay<F>::type FR;
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- typedef detail::task_object<FR,R(ArgTypes...)> task_object_type;
+ typedef detail::task_shared_state<FR,R(ArgTypes...)> task_shared_state_type;
#else
- typedef detail::task_object<FR,R()> task_object_type;
+ typedef detail::task_shared_state<FR,R()> task_shared_state_type;
#endif
#else
- typedef detail::task_object<FR,R> task_object_type;
+ typedef detail::task_shared_state<FR,R> task_shared_state_type;
#endif
- task = task_ptr(new task_object_type(boost::forward<F>(f)));
+ task = task_ptr(new task_shared_state_type(boost::forward<F>(f)));
future_obtained = false;
}
@@ -2842,19 +3246,19 @@ namespace boost
#else
template <class F>
explicit packaged_task(F const& f
- , typename disable_if<is_same<typename decay<F>::type, packaged_task>, dummy* >::type=0
+ , typename boost::disable_if<is_same<typename decay<F>::type, packaged_task>, dummy* >::type=0
)
{
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- typedef detail::task_object<F,R(ArgTypes...)> task_object_type;
+ typedef detail::task_shared_state<F,R(ArgTypes...)> task_shared_state_type;
#else
- typedef detail::task_object<F,R()> task_object_type;
+ typedef detail::task_shared_state<F,R()> task_shared_state_type;
#endif
#else
- typedef detail::task_object<F,R> task_object_type;
+ typedef detail::task_shared_state<F,R> task_shared_state_type;
#endif
- task = task_ptr(new task_object_type(f));
+ task = task_ptr(new task_shared_state_type(f));
future_obtained=false;
}
template <class F>
@@ -2862,15 +3266,15 @@ namespace boost
{
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- typedef detail::task_object<F,R(ArgTypes...)> task_object_type;
- task = task_ptr(new task_object_type(boost::forward<F>(f)));
+ typedef detail::task_shared_state<F,R(ArgTypes...)> task_shared_state_type;
+ task = task_ptr(new task_shared_state_type(boost::forward<F>(f)));
#else
- typedef detail::task_object<F,R()> task_object_type;
- task = task_ptr(new task_object_type(boost::move<F>(f))); // TODO forward
+ typedef detail::task_shared_state<F,R()> task_shared_state_type;
+ task = task_ptr(new task_shared_state_type(boost::move(f))); // TODO forward
#endif
#else
- typedef detail::task_object<F,R> task_object_type;
- task = task_ptr(new task_object_type(boost::forward<F>(f)));
+ typedef detail::task_shared_state<F,R> task_shared_state_type;
+ task = task_ptr(new task_shared_state_type(boost::forward<F>(f)));
#endif
future_obtained=false;
@@ -2885,18 +3289,18 @@ namespace boost
typedef R(*FR)();
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- typedef detail::task_object<FR,R(ArgTypes...)> task_object_type;
+ typedef detail::task_shared_state<FR,R(ArgTypes...)> task_shared_state_type;
#else
- typedef detail::task_object<FR,R()> task_object_type;
+ typedef detail::task_shared_state<FR,R()> task_shared_state_type;
#endif
#else
- typedef detail::task_object<FR,R> task_object_type;
+ typedef detail::task_shared_state<FR,R> task_shared_state_type;
#endif
- typedef typename Allocator::template rebind<task_object_type>::other A2;
+ typedef typename Allocator::template rebind<task_shared_state_type>::other A2;
A2 a2(a);
typedef thread_detail::allocator_destructor<A2> D;
- task = task_ptr(::new(a2.allocate(1)) task_object_type(f), D(a2, 1) );
+ task = task_ptr(::new(a2.allocate(1)) task_shared_state_type(f), D(a2, 1) );
future_obtained = false;
}
#endif // BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
@@ -2905,21 +3309,23 @@ namespace boost
template <class F, class Allocator>
packaged_task(boost::allocator_arg_t, Allocator a, BOOST_THREAD_FWD_REF(F) f)
{
- typedef typename remove_cv<typename remove_reference<F>::type>::type FR;
+ //typedef typename remove_cv<typename remove_reference<F>::type>::type FR;
+ typedef typename decay<F>::type FR;
+
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- typedef detail::task_object<FR,R(ArgTypes...)> task_object_type;
+ typedef detail::task_shared_state<FR,R(ArgTypes...)> task_shared_state_type;
#else
- typedef detail::task_object<FR,R()> task_object_type;
+ typedef detail::task_shared_state<FR,R()> task_shared_state_type;
#endif
#else
- typedef detail::task_object<FR,R> task_object_type;
+ typedef detail::task_shared_state<FR,R> task_shared_state_type;
#endif
- typedef typename Allocator::template rebind<task_object_type>::other A2;
+ typedef typename Allocator::template rebind<task_shared_state_type>::other A2;
A2 a2(a);
typedef thread_detail::allocator_destructor<A2> D;
- task = task_ptr(::new(a2.allocate(1)) task_object_type(boost::forward<F>(f)), D(a2, 1) );
+ task = task_ptr(::new(a2.allocate(1)) task_shared_state_type(boost::forward<F>(f)), D(a2, 1) );
future_obtained = false;
}
#else // ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
@@ -2928,18 +3334,18 @@ namespace boost
{
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- typedef detail::task_object<F,R(ArgTypes...)> task_object_type;
+ typedef detail::task_shared_state<F,R(ArgTypes...)> task_shared_state_type;
#else
- typedef detail::task_object<F,R()> task_object_type;
+ typedef detail::task_shared_state<F,R()> task_shared_state_type;
#endif
#else
- typedef detail::task_object<F,R> task_object_type;
+ typedef detail::task_shared_state<F,R> task_shared_state_type;
#endif
- typedef typename Allocator::template rebind<task_object_type>::other A2;
+ typedef typename Allocator::template rebind<task_shared_state_type>::other A2;
A2 a2(a);
typedef thread_detail::allocator_destructor<A2> D;
- task = task_ptr(::new(a2.allocate(1)) task_object_type(f), D(a2, 1) );
+ task = task_ptr(::new(a2.allocate(1)) task_shared_state_type(f), D(a2, 1) );
future_obtained = false;
}
template <class F, class Allocator>
@@ -2947,21 +3353,21 @@ namespace boost
{
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- typedef detail::task_object<F,R(ArgTypes...)> task_object_type;
+ typedef detail::task_shared_state<F,R(ArgTypes...)> task_shared_state_type;
#else
- typedef detail::task_object<F,R()> task_object_type;
+ typedef detail::task_shared_state<F,R()> task_shared_state_type;
#endif
#else
- typedef detail::task_object<F,R> task_object_type;
+ typedef detail::task_shared_state<F,R> task_shared_state_type;
#endif
- typedef typename Allocator::template rebind<task_object_type>::other A2;
+ typedef typename Allocator::template rebind<task_shared_state_type>::other A2;
A2 a2(a);
typedef thread_detail::allocator_destructor<A2> D;
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- task = task_ptr(::new(a2.allocate(1)) task_object_type(boost::forward<F>(f)), D(a2, 1) );
+ task = task_ptr(::new(a2.allocate(1)) task_shared_state_type(boost::forward<F>(f)), D(a2, 1) );
#else
- task = task_ptr(::new(a2.allocate(1)) task_object_type(boost::move(f)), D(a2, 1) ); // TODO forward
+ task = task_ptr(::new(a2.allocate(1)) task_shared_state_type(boost::move(f)), D(a2, 1) ); // TODO forward
#endif
future_obtained = false;
}
@@ -2969,23 +3375,19 @@ namespace boost
#endif //BOOST_NO_CXX11_RVALUE_REFERENCES
#endif // BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
- ~packaged_task()
- {
- if(task)
- {
+ ~packaged_task() {
+ if(task) {
task->owner_destroyed();
}
}
// assignment
- packaged_task(BOOST_THREAD_RV_REF(packaged_task) other) BOOST_NOEXCEPT :
- future_obtained(BOOST_THREAD_RV(other).future_obtained)
- {
+ packaged_task(BOOST_THREAD_RV_REF(packaged_task) other) BOOST_NOEXCEPT
+ : future_obtained(BOOST_THREAD_RV(other).future_obtained) {
task.swap(BOOST_THREAD_RV(other).task);
BOOST_THREAD_RV(other).future_obtained=false;
}
- packaged_task& operator=(BOOST_THREAD_RV_REF(packaged_task) other) BOOST_NOEXCEPT
- {
+ packaged_task& operator=(BOOST_THREAD_RV_REF(packaged_task) other) BOOST_NOEXCEPT {
// todo use forward
#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
@@ -2997,134 +3399,114 @@ namespace boost
return *this;
}
- void reset()
- {
+ void reset() {
if (!valid())
throw future_error(system::make_error_code(future_errc::no_state));
task->reset();
future_obtained=false;
}
- void swap(packaged_task& other) BOOST_NOEXCEPT
- {
+ void swap(packaged_task& other) BOOST_NOEXCEPT {
task.swap(other.task);
std::swap(future_obtained,other.future_obtained);
}
- bool valid() const BOOST_NOEXCEPT
- {
+ bool valid() const BOOST_NOEXCEPT {
return task.get()!=0;
}
// result retrieval
- BOOST_THREAD_FUTURE<R> get_future()
- {
-
- if(!task)
- {
+ BOOST_THREAD_FUTURE<R> get_future() {
+ if(!task) {
boost::throw_exception(task_moved());
- }
- else if(!future_obtained)
- {
+ } else if(!future_obtained) {
future_obtained=true;
return BOOST_THREAD_FUTURE<R>(task);
- }
- else
- {
+ } else {
boost::throw_exception(future_already_retrieved());
}
- //return BOOST_THREAD_FUTURE<R>();
-
}
-
// execution
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- void operator()(BOOST_THREAD_RV_REF(ArgTypes)... args)
- {
- if(!task)
- {
+ void operator()(BOOST_THREAD_RV_REF(ArgTypes)... args) {
+ if(!task) {
boost::throw_exception(task_moved());
}
task->run(boost::forward<ArgTypes>(args)...);
}
- void make_ready_at_thread_exit(ArgTypes... args)
- {
- if(!task)
- {
+ void make_ready_at_thread_exit(ArgTypes... args) {
+ if(!task) {
boost::throw_exception(task_moved());
}
- if (task->has_value())
- {
+ if (task->has_value()) {
boost::throw_exception(promise_already_satisfied());
}
task->apply(boost::forward<ArgTypes>(args)...);
}
#else
- void operator()()
- {
- if(!task)
- {
+ void operator()() {
+ if(!task) {
boost::throw_exception(task_moved());
}
task->run();
}
- void make_ready_at_thread_exit()
- {
- if(!task)
- {
+ void make_ready_at_thread_exit() {
+ if(!task) {
boost::throw_exception(task_moved());
}
- if (task->has_value())
- boost::throw_exception(promise_already_satisfied());
+ if (task->has_value()) boost::throw_exception(promise_already_satisfied());
task->apply();
}
#endif
template<typename F>
- void set_wait_callback(F f)
- {
+ void set_wait_callback(F f) {
task->set_wait_callback(f,this);
}
-
};
-
+}
#if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
- namespace container
- {
- template <class R, class Alloc>
- struct uses_allocator<packaged_task<R>, Alloc>
- : public true_type {};
- }
+namespace boost { namespace container {
+ template <class R, class Alloc>
+ struct uses_allocator< ::boost::packaged_task<R> , Alloc> : true_type
+ {};
+}}
+#if ! defined BOOST_NO_CXX11_ALLOCATOR
+namespace std {
+ template <class R, class Alloc>
+ struct uses_allocator< ::boost::packaged_task<R> , Alloc> : true_type
+ {};
+}
+#endif
#endif
- BOOST_THREAD_DCL_MOVABLE_BEG(T) packaged_task<T> BOOST_THREAD_DCL_MOVABLE_END
-
- namespace detail
- {
- ////////////////////////////////
- // make_future_deferred_object
- ////////////////////////////////
- template <class Rp, class Fp>
- BOOST_THREAD_FUTURE<Rp>
- make_future_deferred_object(BOOST_THREAD_FWD_REF(Fp) f)
- {
- shared_ptr<future_deferred_object<Rp, Fp> >
- h(new future_deferred_object<Rp, Fp>(boost::forward<Fp>(f)));
- return BOOST_THREAD_FUTURE<Rp>(h);
- }
+namespace boost
+{
+ BOOST_THREAD_DCL_MOVABLE_BEG(T) packaged_task<T> BOOST_THREAD_DCL_MOVABLE_END
- ////////////////////////////////
- // make_future_async_object
- ////////////////////////////////
- template <class Rp, class Fp>
- BOOST_THREAD_FUTURE<Rp>
- make_future_async_object(BOOST_THREAD_FWD_REF(Fp) f)
- {
- shared_ptr<future_async_object<Rp, Fp> >
- h(new future_async_object<Rp, Fp>(boost::forward<Fp>(f)));
- return BOOST_THREAD_FUTURE<Rp>(h);
- }
+namespace detail
+{
+ ////////////////////////////////
+ // make_future_deferred_shared_state
+ ////////////////////////////////
+ template <class Rp, class Fp>
+ BOOST_THREAD_FUTURE<Rp>
+ make_future_deferred_shared_state(BOOST_THREAD_FWD_REF(Fp) f) {
+ shared_ptr<future_deferred_shared_state<Rp, Fp> >
+ h(new future_deferred_shared_state<Rp, Fp>(boost::forward<Fp>(f)));
+ return BOOST_THREAD_FUTURE<Rp>(h);
+ }
- }
+ ////////////////////////////////
+ // make_future_async_shared_state
+ ////////////////////////////////
+ template <class Rp, class Fp>
+ BOOST_THREAD_FUTURE<Rp>
+ make_future_async_shared_state(BOOST_THREAD_FWD_REF(Fp) f) {
+ shared_ptr<future_async_shared_state<Rp, Fp> >
+ h(new future_async_shared_state<Rp, Fp>(boost::forward<Fp>(f)));
+ return BOOST_THREAD_FUTURE<Rp>(h);
+ }
+}
////////////////////////////////
// template <class F, class... ArgTypes>
@@ -3133,214 +3515,514 @@ namespace boost
#if defined BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
-#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
- #if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- template <class R, class... ArgTypes>
- BOOST_THREAD_FUTURE<R>
- async(launch policy, R(*f)(BOOST_THREAD_FWD_REF(ArgTypes)...), BOOST_THREAD_FWD_REF(ArgTypes)... args)
- {
- typedef R(*F)(BOOST_THREAD_FWD_REF(ArgTypes)...);
- typedef detail::async_func<typename decay<F>::type, typename decay<ArgTypes>::type...> BF;
- typedef typename BF::result_type Rp;
- #else
- template <class R>
- BOOST_THREAD_FUTURE<R>
- async(launch policy, R(*f)())
- {
- typedef packaged_task<R()> packaged_task_type;
- #endif
-#else
- template <class R>
- BOOST_THREAD_FUTURE<R>
- async(launch policy, R(*f)())
- {
- typedef packaged_task<R> packaged_task_type;
-#endif
- if (int(policy) & int(launch::async))
- {
-#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_async_object<Rp>(
+#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+ template <class R, class... ArgTypes>
+ BOOST_THREAD_FUTURE<R>
+ async(launch policy, R(*f)(BOOST_THREAD_FWD_REF(ArgTypes)...), BOOST_THREAD_FWD_REF(ArgTypes)... args) {
+ typedef R(*F)(BOOST_THREAD_FWD_REF(ArgTypes)...);
+ typedef detail::invoker<typename decay<F>::type, typename decay<ArgTypes>::type...> BF;
+ typedef typename BF::result_type Rp;
+
+ if (underlying_cast<int>(policy) & int(launch::async)) {
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_async_shared_state<Rp>(
BF(
thread_detail::decay_copy(boost::forward<F>(f))
, thread_detail::decay_copy(boost::forward<ArgTypes>(args))...
)
));
-#else
- packaged_task_type pt( f );
-
- BOOST_THREAD_FUTURE<R> ret = BOOST_THREAD_MAKE_RV_REF(pt.get_future());
- ret.set_async();
- boost::thread( boost::move(pt) ).detach();
- return ::boost::move(ret);
-#endif
- }
- else if (int(policy) & int(launch::deferred))
- {
-#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_deferred_object<Rp>(
+ } else if (underlying_cast<int>(policy) & int(launch::deferred)) {
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_deferred_shared_state<Rp>(
BF(
thread_detail::decay_copy(boost::forward<F>(f))
, thread_detail::decay_copy(boost::forward<ArgTypes>(args))...
)
));
-#else
- std::terminate();
- BOOST_THREAD_FUTURE<R> ret;
- return ::boost::move(ret);
-
-#endif
- } else {
- std::terminate();
- BOOST_THREAD_FUTURE<R> ret;
- return ::boost::move(ret);
- }
- }
-
-#endif
-
-#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
- #if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
-
- template <class F, class ...ArgTypes>
- BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type(
- typename decay<ArgTypes>::type...
- )>::type>
- async(launch policy, BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(ArgTypes)... args)
- {
-
- typedef typename boost::result_of<typename decay<F>::type(
- typename decay<ArgTypes>::type...
- )>::type R;
+ } else {
+ std::terminate();
+ BOOST_THREAD_FUTURE<R> ret;
+ return ::boost::move(ret);
+ }
+ }
- typedef detail::async_func<typename decay<F>::type, typename decay<ArgTypes>::type...> BF;
- typedef typename BF::result_type Rp;
+#else // defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+ template <class R>
+ BOOST_THREAD_FUTURE<R>
+ async(launch policy, R(*f)()) {
+ #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
+ typedef packaged_task<R()> packaged_task_type;
#else
- template <class F>
- BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type()>::type>
- async(launch policy, BOOST_THREAD_FWD_REF(F) f)
- {
- typedef typename boost::result_of<typename decay<F>::type()>::type R;
- typedef packaged_task<R()> packaged_task_type;
-
+ typedef packaged_task<R> packaged_task_type;
#endif
-#else
- template <class F>
- BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type()>::type>
- async(launch policy, BOOST_THREAD_FWD_REF(F) f)
- {
- typedef typename boost::result_of<typename decay<F>::type()>::type R;
- typedef packaged_task<R> packaged_task_type;
+ if (underlying_cast<int>(policy) & int(launch::async)) {
+ packaged_task_type pt( f );
+ BOOST_THREAD_FUTURE<R> ret = BOOST_THREAD_MAKE_RV_REF(pt.get_future());
+ ret.set_async();
+ boost::thread( boost::move(pt) ).detach();
+ return ::boost::move(ret);
+ } else if (underlying_cast<int>(policy) & int(launch::deferred)) {
+ std::terminate();
+ BOOST_THREAD_FUTURE<R> ret;
+ return ::boost::move(ret);
+ } else {
+ std::terminate();
+ BOOST_THREAD_FUTURE<R> ret;
+ return ::boost::move(ret);
+ }
+ }
#endif
+#endif // defined(BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR)
- if (int(policy) & int(launch::async))
- {
-#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_async_object<Rp>(
+#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+
+ template <class F, class ...ArgTypes>
+ BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type(
+ typename decay<ArgTypes>::type...
+ )>::type>
+ async(launch policy, BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(ArgTypes)... args) {
+ typedef typename boost::result_of<typename decay<F>::type(
+ typename decay<ArgTypes>::type...
+ )>::type R;
+ typedef detail::invoker<typename decay<F>::type, typename decay<ArgTypes>::type...> BF;
+ typedef typename BF::result_type Rp;
+
+ if (underlying_cast<int>(policy) & int(launch::async)) {
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_async_shared_state<Rp>(
BF(
thread_detail::decay_copy(boost::forward<F>(f))
- , thread_detail::decay_copy(boost::forward<ArgTypes>(args))...
+ , thread_detail::decay_copy(boost::forward<ArgTypes>(args))...
)
));
-#else
- packaged_task_type pt( boost::forward<F>(f) );
-
- BOOST_THREAD_FUTURE<R> ret = pt.get_future();
- ret.set_async();
-//#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
-// boost::thread( boost::move(pt), boost::forward<ArgTypes>(args)... ).detach(); // todo forward
-//#else
- boost::thread( boost::move(pt) ).detach();
-//#endif
- return ::boost::move(ret);
-#endif
- }
- else if (int(policy) & int(launch::deferred))
- {
-#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_deferred_object<Rp>(
+ } else if (underlying_cast<int>(policy) & int(launch::deferred)) {
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_deferred_shared_state<Rp>(
BF(
thread_detail::decay_copy(boost::forward<F>(f))
- , thread_detail::decay_copy(boost::forward<ArgTypes>(args))...
+ , thread_detail::decay_copy(boost::forward<ArgTypes>(args))...
)
));
-#else
- std::terminate();
- BOOST_THREAD_FUTURE<R> ret;
- return ::boost::move(ret);
-// return boost::detail::make_future_deferred_object<Rp>(
-// BF(
-// thread_detail::decay_copy(boost::forward<F>(f))
-// )
-// );
-#endif
+ } else {
+ std::terminate();
+ BOOST_THREAD_FUTURE<R> ret;
+ return ::boost::move(ret);
+ }
+ }
- } else {
- std::terminate();
- BOOST_THREAD_FUTURE<R> ret;
- return ::boost::move(ret);
- }
+#else // defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+
+ template <class F>
+ BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type()>::type>
+ async(launch policy, BOOST_THREAD_FWD_REF(F) f) {
+ typedef typename boost::result_of<typename decay<F>::type()>::type R;
+#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
+ typedef packaged_task<R()> packaged_task_type;
+#else // defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
+ typedef packaged_task<R> packaged_task_type;
+#endif // defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
+
+ if (underlying_cast<int>(policy) & int(launch::async)) {
+ packaged_task_type pt( boost::forward<F>(f) );
+ BOOST_THREAD_FUTURE<R> ret = pt.get_future();
+ ret.set_async();
+ boost::thread( boost::move(pt) ).detach();
+ return ::boost::move(ret);
+ } else if (underlying_cast<int>(policy) & int(launch::deferred)) {
+ std::terminate();
+ BOOST_THREAD_FUTURE<R> ret;
+ return ::boost::move(ret);
+ // return boost::detail::make_future_deferred_shared_state<Rp>(
+ // BF(
+ // thread_detail::decay_copy(boost::forward<F>(f))
+ // )
+ // );
+ } else {
+ std::terminate();
+ BOOST_THREAD_FUTURE<R> ret;
+ return ::boost::move(ret);
}
+ }
+#endif // defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- ////////////////////////////////
- // template <class F, class... ArgTypes>
- // future<R> async(F&&, ArgTypes&&...);
- ////////////////////////////////
+#ifdef BOOST_THREAD_PROVIDES_EXECUTORS
+namespace detail {
+ /////////////////////////
+ /// shared_state_nullary_task
+ /////////////////////////
+ template<typename Rp, typename Fp>
+ struct shared_state_nullary_task
+ {
+ shared_state<Rp>* that;
+ Fp f_;
+ public:
- #if defined BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
+ shared_state_nullary_task(shared_state<Rp>* st, BOOST_THREAD_FWD_REF(Fp) f)
+ : that(st), f_(boost::forward<Fp>(f))
+ {};
+#if ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_THREAD_MOVABLE(shared_state_nullary_task)
+ shared_state_nullary_task(shared_state_nullary_task const& x) //BOOST_NOEXCEPT
+ : that(x.that), f_(x.f_)
+ {}
+ shared_state_nullary_task& operator=(BOOST_COPY_ASSIGN_REF(shared_state_nullary_task) x) //BOOST_NOEXCEPT
+ {
+ if (this != &x) {
+ that=x.that;
+ f_=x.f_;
+ }
+ return *this;
+ }
+ // move
+ shared_state_nullary_task(BOOST_THREAD_RV_REF(shared_state_nullary_task) x) //BOOST_NOEXCEPT
+ : that(x.that), f_(boost::move(x.f_))
+ {
+ x.that=0;
+ }
+ shared_state_nullary_task& operator=(BOOST_THREAD_RV_REF(shared_state_nullary_task) x) //BOOST_NOEXCEPT
+ {
+ if (this != &x) {
+ that=x.that;
+ f_=boost::move(x.f_);
+ x.that=0;
+ }
+ return *this;
+ }
+#endif
+ void operator()() {
+ try {
+ that->mark_finished_with_result(f_());
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ } catch(thread_interrupted& ) {
+ that->mark_interrupted_finish();
+#endif // defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ } catch(...) {
+ that->mark_exceptional_finish();
+ }
- #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- template <class R, class... ArgTypes>
- BOOST_THREAD_FUTURE<R>
- async(R(*f)(BOOST_THREAD_FWD_REF(ArgTypes)...), BOOST_THREAD_FWD_REF(ArgTypes)... args)
- {
- return BOOST_THREAD_MAKE_RV_REF(async(launch(launch::any), f, boost::forward<ArgTypes>(args)...));
- }
- #else
- template <class R>
- BOOST_THREAD_FUTURE<R>
- async(R(*f)())
- {
- return BOOST_THREAD_MAKE_RV_REF(async(launch(launch::any), f));
- }
- #endif
- #endif
+ }
+ };
- #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
- template <class F, class ...ArgTypes>
- BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type(
- typename decay<ArgTypes>::type...
- )>::type>
- async(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(ArgTypes)... args)
- {
- return BOOST_THREAD_MAKE_RV_REF(async(launch(launch::any), boost::forward<F>(f), boost::forward<ArgTypes>(args)...));
- }
- #else
- template <class F>
- BOOST_THREAD_FUTURE<typename boost::result_of<F()>::type>
- async(BOOST_THREAD_RV_REF(F) f)
+ template<typename Fp>
+ struct shared_state_nullary_task<void, Fp>
+ {
+ shared_state<void>* that;
+ Fp f_;
+ public:
+ shared_state_nullary_task(shared_state<void>* st, BOOST_THREAD_FWD_REF(Fp) f)
+ : that(st), f_(boost::forward<Fp>(f))
+ {};
+#if ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_THREAD_MOVABLE(shared_state_nullary_task)
+ shared_state_nullary_task(shared_state_nullary_task const& x) //BOOST_NOEXCEPT
+ : that(x.that), f_(x.f_)
+ {}
+ shared_state_nullary_task& operator=(BOOST_COPY_ASSIGN_REF(shared_state_nullary_task) x) //BOOST_NOEXCEPT
+ {
+ if (this != &x) {
+ that=x.that;
+ f_=x.f_;
+ }
+ return *this;
+ }
+ // move
+ shared_state_nullary_task(BOOST_THREAD_RV_REF(shared_state_nullary_task) x) BOOST_NOEXCEPT
+ : that(x.that), f_(boost::move(x.f_))
+ {
+ x.that=0;
+ }
+ shared_state_nullary_task& operator=(BOOST_THREAD_RV_REF(shared_state_nullary_task) x) BOOST_NOEXCEPT {
+ if (this != &x) {
+ that=x.that;
+ f_=boost::move(x.f_);
+ x.that=0;
+ }
+ return *this;
+ }
+#endif
+ void operator()() {
+ try {
+ f_();
+ that->mark_finished_with_result();
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ } catch(thread_interrupted& ) {
+ that->mark_interrupted_finish();
+#endif // defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ } catch(...) {
+ that->mark_exceptional_finish();
+ }
+ }
+ };
+
+ template<typename Rp, typename Fp>
+ struct shared_state_nullary_task<Rp&, Fp>
+ {
+ shared_state<Rp&>* that;
+ Fp f_;
+ public:
+ shared_state_nullary_task(shared_state<Rp&>* st, BOOST_THREAD_FWD_REF(Fp) f)
+ : that(st), f_(boost::forward<Fp>(f))
+ {}
+#if ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ BOOST_THREAD_MOVABLE(shared_state_nullary_task)
+ shared_state_nullary_task(shared_state_nullary_task const& x) BOOST_NOEXCEPT
+ : that(x.that), f_(x.f_) {}
+
+ shared_state_nullary_task& operator=(BOOST_COPY_ASSIGN_REF(shared_state_nullary_task) x) BOOST_NOEXCEPT {
+ if (this != &x){
+ that=x.that;
+ f_=x.f_;
+ }
+ return *this;
+ }
+ // move
+ shared_state_nullary_task(BOOST_THREAD_RV_REF(shared_state_nullary_task) x) BOOST_NOEXCEPT
+ : that(x.that), f_(boost::move(x.f_))
+ {
+ x.that=0;
+ }
+ shared_state_nullary_task& operator=(BOOST_THREAD_RV_REF(shared_state_nullary_task) x) BOOST_NOEXCEPT {
+ if (this != &x) {
+ that=x.that;
+ f_=boost::move(x.f_);
+ x.that=0;
+ }
+ return *this;
+ }
+#endif
+ void operator()() {
+ try {
+ that->mark_finished_with_result(f_());
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ } catch(thread_interrupted& ) {
+ that->mark_interrupted_finish();
+#endif // defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ } catch(...) {
+ that->mark_exceptional_finish();
+ }
+ }
+ };
+
+ /////////////////////////
+ /// future_executor_shared_state_base
+ /////////////////////////
+ template<typename Rp, typename Executor>
+ struct future_executor_shared_state: shared_state<Rp>
{
- return BOOST_THREAD_MAKE_RV_REF(async(launch(launch::any), boost::forward<F>(f)));
+ typedef shared_state<Rp> base_type;
+ protected:
+ public:
+ template<typename Fp>
+ future_executor_shared_state(Executor& ex, BOOST_THREAD_FWD_REF(Fp) f) {
+ this->set_executor();
+ shared_state_nullary_task<Rp,Fp> t(this, boost::forward<Fp>(f));
+ ex.submit(boost::move(t));
+ }
+
+ ~future_executor_shared_state() {
+ this->wait(false);
+ }
+ };
+
+ ////////////////////////////////
+ // make_future_executor_shared_state
+ ////////////////////////////////
+ template <class Rp, class Fp, class Executor>
+ BOOST_THREAD_FUTURE<Rp>
+ make_future_executor_shared_state(Executor& ex, BOOST_THREAD_FWD_REF(Fp) f) {
+ shared_ptr<future_executor_shared_state<Rp, Executor> >
+ h(new future_executor_shared_state<Rp, Executor>(ex, boost::forward<Fp>(f)));
+ return BOOST_THREAD_FUTURE<Rp>(h);
}
+
+} // detail
+
+ ////////////////////////////////
+ // template <class Executor, class F, class... ArgTypes>
+ // future<R> async(Executor& ex, F&&, ArgTypes&&...);
+ ////////////////////////////////
+
+#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#if defined BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
+
+ template <class Executor, class R, class... ArgTypes>
+ BOOST_THREAD_FUTURE<R>
+ async(Executor& ex, R(*f)(BOOST_THREAD_FWD_REF(ArgTypes)...), BOOST_THREAD_FWD_REF(ArgTypes)... args) {
+ typedef R(*F)(BOOST_THREAD_FWD_REF(ArgTypes)...);
+ typedef detail::invoker<typename decay<F>::type, typename decay<ArgTypes>::type...> BF;
+ typedef typename BF::result_type Rp;
+
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_executor_shared_state<Rp>(ex,
+ BF(
+ thread_detail::decay_copy(boost::forward<F>(f))
+ , thread_detail::decay_copy(boost::forward<ArgTypes>(args))...
+ )
+ ));
+ }
+#endif // defined BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
+
+ template <class Executor, class F, class ...ArgTypes>
+ BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type(
+ typename decay<ArgTypes>::type...
+ )>::type>
+ async(Executor& ex, BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(ArgTypes)... args) {
+ typedef detail::invoker<typename decay<F>::type, typename decay<ArgTypes>::type...> BF;
+ typedef typename BF::result_type Rp;
+
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_executor_shared_state<Rp>(ex,
+ BF(
+ thread_detail::decay_copy(boost::forward<F>(f))
+ , thread_detail::decay_copy(boost::forward<ArgTypes>(args))...
+ )
+ ));
+ }
+
+// template <class R, class Executor, class F, class ...ArgTypes>
+// BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type(
+// typename decay<ArgTypes>::type...
+// )>::type>
+// async(Executor& ex, BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(ArgTypes)... args) {
+// typedef detail::invoker_ret<R, typename decay<F>::type, typename decay<ArgTypes>::type...> BF;
+// typedef typename BF::result_type Rp;
+//
+// return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_executor_shared_state<Rp>(ex,
+// BF(
+// thread_detail::decay_copy(boost::forward<F>(f))
+// , thread_detail::decay_copy(boost::forward<ArgTypes>(args))...
+// )
+// ));
+// }
+
+#else // ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#if defined BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
+
+ template <class Executor, class R>
+ BOOST_THREAD_FUTURE<R>
+ async(Executor& ex, R(*f)()) {
+ typedef R(*F)();
+ typedef detail::invoker<F> BF;
+ typedef typename BF::result_type Rp;
+
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_executor_shared_state<Rp>(ex,
+ BF(
+ f
+ )
+ ));
+ }
+
+ template <class Executor, class R, class A1>
+ BOOST_THREAD_FUTURE<R>
+ async(Executor& ex, R(*f)(BOOST_THREAD_FWD_REF(A1)), BOOST_THREAD_FWD_REF(A1) a1) {
+ typedef R(*F)(BOOST_THREAD_FWD_REF(A1));
+ typedef detail::invoker<F, typename decay<A1>::type> BF;
+ typedef typename BF::result_type Rp;
+
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_executor_shared_state<Rp>(ex,
+ BF(
+ f
+ , thread_detail::decay_copy(boost::forward<A1>(a1))
+ )
+ ));
+ }
+#endif // defined BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
+
+ template <class Executor, class F>
+ BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type()>::type>
+ async(Executor& ex, BOOST_THREAD_FWD_REF(F) f) {
+ typedef detail::invoker<typename decay<F>::type> BF;
+ typedef typename BF::result_type Rp;
+
+ return boost::detail::make_future_executor_shared_state<Rp>(ex,
+ BF(
+ thread_detail::decay_copy(boost::forward<F>(f))
+ )
+ );
+ }
+
+ template <class Executor, class F, class A1>
+ BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type(
+ typename decay<A1>::type
+ )>::type>
+ async(Executor& ex, BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1) {
+ typedef detail::invoker<typename decay<F>::type, typename decay<A1>::type> BF;
+ typedef typename BF::result_type Rp;
+
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_executor_shared_state<Rp>(ex,
+ BF(
+ thread_detail::decay_copy(boost::forward<F>(f))
+ , thread_detail::decay_copy(boost::forward<A1>(a1))
+ )
+ ));
+ }
+
+ template <class Executor, class F, class A1, class A2>
+ BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type(
+ typename decay<A1>::type, typename decay<A2>::type
+ )>::type>
+ async(Executor& ex, BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1, BOOST_THREAD_FWD_REF(A2) a2) {
+ typedef detail::invoker<typename decay<F>::type, typename decay<A1>::type, typename decay<A2>::type> BF;
+ typedef typename BF::result_type Rp;
+
+ return BOOST_THREAD_MAKE_RV_REF(boost::detail::make_future_executor_shared_state<Rp>(ex,
+ BF(
+ thread_detail::decay_copy(boost::forward<F>(f))
+ , thread_detail::decay_copy(boost::forward<A1>(a1))
+ , thread_detail::decay_copy(boost::forward<A2>(a2))
+ )
+ ));
+ }
+
+#endif //! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#endif
+ ////////////////////////////////
+ // template <class F, class... ArgTypes>
+ // future<R> async(F&&, ArgTypes&&...);
+ ////////////////////////////////
+
+#if defined BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
+ #if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+ template <class R, class... ArgTypes>
+ BOOST_THREAD_FUTURE<R>
+ async(R(*f)(BOOST_THREAD_FWD_REF(ArgTypes)...), BOOST_THREAD_FWD_REF(ArgTypes)... args) {
+ return BOOST_THREAD_MAKE_RV_REF(async(launch(launch::any), f, boost::forward<ArgTypes>(args)...));
+ }
+ #else
+ template <class R>
+ BOOST_THREAD_FUTURE<R>
+ async(R(*f)()) {
+ return BOOST_THREAD_MAKE_RV_REF(async(launch(launch::any), f));
+ }
+ #endif
+#endif
+
+#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+ template <class F, class ...ArgTypes>
+ BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type(
+ typename decay<ArgTypes>::type...
+ )>::type>
+ async(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(ArgTypes)... args) {
+ return BOOST_THREAD_MAKE_RV_REF(async(launch(launch::any), boost::forward<F>(f), boost::forward<ArgTypes>(args)...));
+ }
+#else
+ template <class F>
+ BOOST_THREAD_FUTURE<typename boost::result_of<F()>::type>
+ async(BOOST_THREAD_RV_REF(F) f) {
+ return BOOST_THREAD_MAKE_RV_REF(async(launch(launch::any), boost::forward<F>(f)));
+ }
+#endif
////////////////////////////////
// make_future deprecated
////////////////////////////////
template <typename T>
- BOOST_THREAD_FUTURE<typename decay<T>::type> make_future(BOOST_THREAD_FWD_REF(T) value)
- {
- typedef typename decay<T>::type future_type;
- promise<future_type> p;
- p.set_value(boost::forward<T>(value));
+ BOOST_THREAD_FUTURE<typename decay<T>::type> make_future(BOOST_THREAD_FWD_REF(T) value) {
+ typedef typename decay<T>::type future_value_type;
+ promise<future_value_type> p;
+ p.set_value(boost::forward<future_value_type>(value));
return BOOST_THREAD_MAKE_RV_REF(p.get_future());
}
#if defined BOOST_THREAD_USES_MOVE
- inline BOOST_THREAD_FUTURE<void> make_future()
- {
+ inline BOOST_THREAD_FUTURE<void> make_future() {
promise<void> p;
p.set_value();
return BOOST_THREAD_MAKE_RV_REF(p.get_future());
@@ -3351,45 +4033,72 @@ namespace boost
// make_ready_future
////////////////////////////////
template <typename T>
- BOOST_THREAD_FUTURE<typename decay<T>::type> make_ready_future(BOOST_THREAD_FWD_REF(T) value)
- {
- typedef typename decay<T>::type future_type;
- promise<future_type> p;
- p.set_value(boost::forward<T>(value));
+ BOOST_THREAD_FUTURE<typename decay<T>::type> make_ready_future(BOOST_THREAD_FWD_REF(T) value) {
+ typedef typename decay<T>::type future_value_type;
+ promise<future_value_type> p;
+ p.set_value(boost::forward<future_value_type>(value));
+ return BOOST_THREAD_MAKE_RV_REF(p.get_future());
+ }
+
+ template <typename T, typename T1>
+ BOOST_THREAD_FUTURE<T> make_ready_no_decay_future(T1 value) {
+ typedef T future_value_type;
+ promise<future_value_type> p;
+ p.set_value(value);
return BOOST_THREAD_MAKE_RV_REF(p.get_future());
}
#if defined BOOST_THREAD_USES_MOVE
- inline BOOST_THREAD_FUTURE<void> make_ready_future()
- {
+ inline BOOST_THREAD_FUTURE<void> make_ready_future() {
promise<void> p;
p.set_value();
return BOOST_THREAD_MAKE_RV_REF(p.get_future());
}
#endif
- ////////////////////////////////
- // make_exceptional_future
- ////////////////////////////////
template <typename T>
- BOOST_THREAD_FUTURE<T> make_exceptional_future(exception_ptr ex)
- {
+ BOOST_THREAD_FUTURE<T> make_ready_future(exception_ptr ex) {
+ promise<T> p;
+ p.set_exception(ex);
+ return BOOST_THREAD_MAKE_RV_REF(p.get_future());
+ }
+// template <typename T, typename E>
+// BOOST_THREAD_FUTURE<T> make_ready_future(E ex)
+// {
+// promise<T> p;
+// p.set_exception(boost::copy_exception(ex));
+// return BOOST_THREAD_MAKE_RV_REF(p.get_future());
+// }
+
+ template <typename T>
+ BOOST_THREAD_FUTURE<T> make_exceptional_future(exception_ptr ex) {
promise<T> p;
p.set_exception(ex);
return BOOST_THREAD_MAKE_RV_REF(p.get_future());
}
+ template <typename T, typename E>
+ BOOST_THREAD_FUTURE<T> make_exceptional_future(E ex) {
+ promise<T> p;
+ p.set_exception(boost::copy_exception(ex));
+ return BOOST_THREAD_MAKE_RV_REF(p.get_future());
+ }
+
+ template <typename T>
+ BOOST_THREAD_FUTURE<T> make_exceptional_future() {
+ promise<T> p;
+ p.set_exception(boost::current_exception());
+ return BOOST_THREAD_MAKE_RV_REF(p.get_future());
+ }
+
#if 0
template<typename CLOSURE>
make_future(CLOSURE closure) -> BOOST_THREAD_FUTURE<decltype(closure())> {
- typedef decltype(closure() T;
+ typedef decltype(closure()) T;
promise<T> p;
- try
- {
+ try {
p.set_value(closure());
- }
- catch(...)
- {
+ } catch(...) {
p.set_exception(std::current_exception());
}
return BOOST_THREAD_MAKE_RV_REF(p.get_future());
@@ -3400,399 +4109,222 @@ namespace boost
// make_shared_future deprecated
////////////////////////////////
template <typename T>
- shared_future<typename decay<T>::type> make_shared_future(BOOST_THREAD_FWD_REF(T) value)
- {
+ shared_future<typename decay<T>::type> make_shared_future(BOOST_THREAD_FWD_REF(T) value) {
typedef typename decay<T>::type future_type;
promise<future_type> p;
p.set_value(boost::forward<T>(value));
return BOOST_THREAD_MAKE_RV_REF(p.get_future().share());
}
-
- inline shared_future<void> make_shared_future()
- {
- promise<void> p;
- return BOOST_THREAD_MAKE_RV_REF(p.get_future().share());
-
- }
-
- ////////////////////////////////
- // make_ready_shared_future
- ////////////////////////////////
- template <typename T>
- shared_future<typename decay<T>::type> make_ready_shared_future(BOOST_THREAD_FWD_REF(T) value)
- {
- typedef typename decay<T>::type future_type;
- promise<future_type> p;
- p.set_value(boost::forward<T>(value));
- return p.get_future().share();
- }
-
-
- inline shared_future<void> make_ready_shared_future()
- {
+ inline shared_future<void> make_shared_future() {
promise<void> p;
return BOOST_THREAD_MAKE_RV_REF(p.get_future().share());
-
}
- ////////////////////////////////
- // make_exceptional_shared_future
- ////////////////////////////////
- template <typename T>
- shared_future<T> make_exceptional_shared_future(exception_ptr ex)
- {
- promise<T> p;
- p.set_exception(ex);
- return p.get_future().share();
- }
+// ////////////////////////////////
+// // make_ready_shared_future
+// ////////////////////////////////
+// template <typename T>
+// shared_future<typename decay<T>::type> make_ready_shared_future(BOOST_THREAD_FWD_REF(T) value)
+// {
+// typedef typename decay<T>::type future_type;
+// promise<future_type> p;
+// p.set_value(boost::forward<T>(value));
+// return p.get_future().share();
+// }
+//
+//
+// inline shared_future<void> make_ready_shared_future()
+// {
+// promise<void> p;
+// return BOOST_THREAD_MAKE_RV_REF(p.get_future().share());
+//
+// }
+//
+// ////////////////////////////////
+// // make_exceptional_shared_future
+// ////////////////////////////////
+// template <typename T>
+// shared_future<T> make_exceptional_shared_future(exception_ptr ex)
+// {
+// promise<T> p;
+// p.set_exception(ex);
+// return p.get_future().share();
+// }
////////////////////////////////
- // detail::future_async_continuation
+ // detail::future_async_continuation_shared_state
////////////////////////////////
#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
- namespace detail
- {
-
- /////////////////////////
- /// future_async_continuation
- /////////////////////////
-
- template<typename F, typename Rp, typename Fp>
- struct future_async_continuation: future_object<Rp>
- {
- typedef future_object<Rp> base_type;
- typedef typename base_type::move_dest_type move_dest_type;
- typedef weak_ptr<future_object_base> parent_ptr_type;
+namespace detail
+{
- F parent;
- Fp continuation;
- boost::thread thr_;
+ /////////////////////////
+ /// future_async_continuation_shared_state
+ /////////////////////////
- public:
- future_async_continuation(
- F& f, BOOST_THREAD_FWD_REF(Fp) c
- ) :
- parent(f.future_),
- //continuation(boost::move(c)),
- continuation(c),
- thr_()
- {
- this->set_async();
- }
+ template<typename F, typename Rp, typename Fp>
+ struct future_async_continuation_shared_state: future_async_shared_state_base<Rp>
+ {
+ F parent;
+ Fp continuation;
- ~future_async_continuation()
- {
- if (thr_.get_id()==thread::id())
- {
- //BOOST_THREAD_LOG << "ERRORRRRRRRRR ~future_async_continuation " << this << " " << thr_.get_id() << BOOST_THREAD_END_LOG;
- return;
- }
- if (thr_.joinable()) {
- thr_.join();
- }
- }
+ public:
+ future_async_continuation_shared_state(BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c)
+ : parent(boost::move(f)),
+ continuation(boost::move(c)) {
+ }
- void launch_continuation(boost::unique_lock<boost::mutex>& lock)
- {
- lock.unlock();
- thr_ = thread(&future_async_continuation::run, this);
- }
+ void launch_continuation(boost::unique_lock<boost::mutex>& ) {
+ //lock.unlock();
+ this->thr_ = thread(&future_async_continuation_shared_state::run, this);
+ }
- move_dest_type get()
- {
- if (thr_.joinable()) thr_.join();
- // fixme Is the lock needed during the whole scope?
- //this->wait();
- boost::unique_lock<boost::mutex> lock(this->mutex);
- this->wait_internal(lock);
-
- // fixme use boost::move
- return static_cast<move_dest_type>(*(this->result));
- }
- static void run(future_async_continuation* that)
- {
- try
- {
- that->mark_finished_with_result(that->continuation(that->parent));
- }
+ static void run(future_async_continuation_shared_state* that) {
+ try {
+ that->mark_finished_with_result(that->continuation(boost::move(that->parent)));
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- catch(thread_interrupted& )
- {
- that->mark_interrupted_finish();
- }
+ } catch(thread_interrupted& ) {
+ that->mark_interrupted_finish();
#endif
- catch(...)
- {
- that->mark_exceptional_finish();
- }
+ } catch(...) {
+ that->mark_exceptional_finish();
}
- };
+ }
- template<typename F, typename Fp>
- struct future_async_continuation<F, void, Fp>: public future_object<void>
- {
- typedef future_object<void> base_type;
- F parent;
- Fp continuation;
- boost::thread thr_;
+ ~future_async_continuation_shared_state() {
+ this->join();
+ }
+ };
- public:
- future_async_continuation(
- F& f, BOOST_THREAD_FWD_REF(Fp) c
- ) :
- parent(f.future_),
- continuation(boost::move(c)),
- thr_()
- {
- this->set_async();
- }
+ template<typename F, typename Fp>
+ struct future_async_continuation_shared_state<F, void, Fp>: public future_async_shared_state_base<void>
+ {
+ F parent;
+ Fp continuation;
- ~future_async_continuation()
- {
- if (thr_.get_id()==thread::id())
- {
- return;
- }
- if (thr_.joinable()) thr_.join();
- }
+ public:
+ future_async_continuation_shared_state(BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c)
+ : parent(boost::move(f)),
+ continuation(boost::move(c)) {
+ }
- void launch_continuation(boost::unique_lock<boost::mutex>& lk)
- {
- lk.unlock();
- thr_ = thread(&future_async_continuation::run, this);
- }
+ void launch_continuation(boost::unique_lock<boost::mutex>& ) {
+ //lk.unlock();
+ this->thr_ = thread(&future_async_continuation_shared_state::run, this);
+ }
- static void run(future_async_continuation* that)
- {
- try
- {
- that->continuation(that->parent);
- that->mark_finished_with_result();
- }
+ static void run(future_async_continuation_shared_state* that) {
+ try {
+ that->continuation(boost::move(that->parent));
+ that->mark_finished_with_result();
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- catch(thread_interrupted& )
- {
- that->mark_interrupted_finish();
- }
+ } catch(thread_interrupted& ) {
+ that->mark_interrupted_finish();
#endif
- catch(...)
- {
- that->mark_exceptional_finish();
- }
+ } catch(...) {
+ that->mark_exceptional_finish();
}
- };
+ }
+ ~future_async_continuation_shared_state() {
+ this->join();
+ }
+ };
- //////////////////////////
- /// future_deferred_continuation
- //////////////////////////
- template<typename F, typename Rp, typename Fp>
- struct future_deferred_continuation: future_object<Rp>
- {
- typedef future_object<Rp> base_type;
- F parent;
- Fp continuation;
+ //////////////////////////
+ /// future_deferred_continuation_shared_state
+ //////////////////////////
+ template<typename F, typename Rp, typename Fp>
+ struct future_deferred_continuation_shared_state: shared_state<Rp>
+ {
+ F parent;
+ Fp continuation;
- public:
- future_deferred_continuation(
- F& f, BOOST_THREAD_FWD_REF(Fp) c
- ) :
- parent(f.future_),
- //continuation(boost::move(c))
- continuation(c)
- {
- this->set_deferred();
- }
+ public:
+ future_deferred_continuation_shared_state(BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c)
+ : parent(boost::move(f)),
+ continuation(boost::move(c)) {
+ this->set_deferred();
+ }
- virtual void launch_continuation(boost::unique_lock<boost::mutex>& lk)
- {
- execute(lk);
- }
+ virtual void launch_continuation(boost::unique_lock<boost::mutex>& ) {
+ //execute(lk);
+ }
- virtual void execute(boost::unique_lock<boost::mutex>& lck) {
- try
- {
- this->mark_finished_with_result_internal(continuation(parent), lck);
- }
- catch (...)
- {
- this->mark_exceptional_finish_internal(current_exception(), lck);
- }
+ virtual void execute(boost::unique_lock<boost::mutex>& lck) {
+ try {
+ Fp local_fuct=boost::move(continuation);
+ F ftmp = boost::move(parent);
+ relocker relock(lck);
+ Rp res = local_fuct(boost::move(ftmp));
+ relock.lock();
+ this->mark_finished_with_result_internal(boost::move(res), lck);
+ } catch (...) {
+ this->mark_exceptional_finish_internal(current_exception(), lck);
}
- };
+ }
+ };
- template<typename F, typename Fp>
- struct future_deferred_continuation<F,void,Fp>: future_object<void>
- {
- typedef future_object<void> base_type;
- F parent;
- Fp continuation;
+ template<typename F, typename Fp>
+ struct future_deferred_continuation_shared_state<F,void,Fp>: shared_state<void>
+ {
+ F parent;
+ Fp continuation;
- public:
- future_deferred_continuation(
- F& f, BOOST_THREAD_FWD_REF(Fp) c
- ):
- parent(f.future_),
- continuation(boost::move(c))
- {
- this->set_deferred();
- }
+ public:
+ future_deferred_continuation_shared_state(BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c)
+ : parent(boost::move(f)),
+ continuation(boost::move(c)) {
+ this->set_deferred();
+ }
- virtual void launch_continuation(boost::unique_lock<boost::mutex>& lk)
- {
- execute(lk);
- }
- virtual void execute(boost::unique_lock<boost::mutex>& lck) {
- try
- {
- continuation(parent);
- this->mark_finished_with_result_internal(lck);
- }
- catch (...)
- {
- this->mark_exceptional_finish_internal(current_exception(), lck);
- }
+ virtual void launch_continuation(boost::unique_lock<boost::mutex>& ) {
+ //execute(lk);
+ }
+ virtual void execute(boost::unique_lock<boost::mutex>& lck) {
+ try {
+ Fp local_fuct=boost::move(continuation);
+ F ftmp = boost::move(parent);
+ relocker relock(lck);
+ local_fuct(boost::move(ftmp));
+ relock.lock();
+ this->mark_finished_with_result_internal(lck);
+ } catch (...) {
+ this->mark_exceptional_finish_internal(current_exception(), lck);
}
- };
-
- ////////////////////////////////
- // make_future_deferred_continuation
- ////////////////////////////////
- template<typename F, typename Rp, typename Fp>
- BOOST_THREAD_FUTURE<Rp>
- make_future_deferred_continuation(
- boost::unique_lock<boost::mutex> &lock,
- F& f, BOOST_THREAD_FWD_REF(Fp) c
- )
- {
- shared_ptr<future_deferred_continuation<F, Rp, Fp> >
- h(new future_deferred_continuation<F, Rp, Fp>(f, boost::forward<Fp>(c)));
- f.future_->set_continuation_ptr(h, lock);
- return BOOST_THREAD_FUTURE<Rp>(h);
}
+ };
- ////////////////////////////////
- // make_future_async_continuation
- ////////////////////////////////
- template<typename F, typename Rp, typename Fp>
- BOOST_THREAD_FUTURE<Rp>
- make_future_async_continuation(
- boost::unique_lock<boost::mutex> &lock, F& f, BOOST_THREAD_FWD_REF(Fp) c
- )
- {
- shared_ptr<future_async_continuation<F,Rp, Fp> >
- h(new future_async_continuation<F,Rp, Fp>(f, boost::forward<Fp>(c)));
- f.future_->set_continuation_ptr(h, lock);
-
- return BOOST_THREAD_FUTURE<Rp>(h);
- }
+ ////////////////////////////////
+ // make_future_deferred_continuation_shared_state
+ ////////////////////////////////
+ template<typename F, typename Rp, typename Fp>
+ BOOST_THREAD_FUTURE<Rp>
+ make_future_deferred_continuation_shared_state(
+ boost::unique_lock<boost::mutex> &lock,
+ BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_FWD_REF(Fp) c) {
+ shared_ptr<future_deferred_continuation_shared_state<F, Rp, Fp> >
+ h(new future_deferred_continuation_shared_state<F, Rp, Fp>(boost::move(f), boost::forward<Fp>(c)));
+ h->parent.future_->set_continuation_ptr(h, lock);
+ return BOOST_THREAD_FUTURE<Rp>(h);
+ }
-// template <typename F, typename R, typename C>
-// struct future_continuation : future_object<R>
-// {
-// F& parent;
-// C continuation;
-// launch policy_;
-//
-// future_continuation(boost::unique_lock<boost::mutex>& lk, F& f, BOOST_THREAD_FWD_REF(C) c) :
-// parent(f),
-// continuation(boost::forward<C>(c)),
-// policy_(f.launch_policy())
-// {
-// init_continuation(lk);
-// }
-// future_continuation(boost::unique_lock<boost::mutex>& lk, F& f, BOOST_THREAD_FWD_REF(C) c, launch policy) :
-// parent(f),
-// continuation(boost::forward<C>(c)),
-// policy_(policy)
-// {
-// init_continuation(lk);
-// }
-// ~future_continuation()
-// {}
-//
-// void init_continuation(boost::unique_lock<boost::mutex>& lk)
-// {
-// try
-// {
-// lk.unlock();
-// // fixme what to do depending on inherits_launch_policy_ and policy_?
-// if (int(policy_) & int(launch::deferred))
-// {
-// R val = continuation(parent);
-// next.set_value(boost::move(val));
-// }
-// else
-// {
-// BOOST_THREAD_FUTURE<R> f = async(policy_, continuation, boost::ref(parent));
-// R val = f.get();
-// next.set_value(boost::move(val));
-// }
-// }
-// catch (...)
-// {
-// next.set_exception(boost::current_exception());
-// }
-// }
-// private:
-//
-// future_continuation(future_continuation const&);
-// future_continuation& operator=(future_continuation const&);
-// };
-//#if defined(BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR)
-// template <typename F, typename R, typename CR>
-// struct future_continuation<F,R,CR(*)(F&)> : future_object<R>
-// {
-// F& parent;
-// CR(*continuation)(F&) ;
-// launch policy_;
-//
-// future_continuation(F& f, CR(*c)(F&)) :
-// parent(f),
-// continuation(c),
-// policy_(f.launch_policy()),
-// next()
-// {}
-// future_continuation(F& f, CR(*c)(F&), launch policy) :
-// parent(f),
-// continuation(c),
-// policy_(policy),
-// next()
-// {}
-// ~future_continuation()
-// {}
-//
-// void start_continuation(boost::unique_lock<boost::mutex>& lk)
-// {
-// try
-// {
-// lk.unlock();
-// // fixme what to do depending on inherits_launch_policy_ and policy_?
-// if (int(policy_) & int(launch::deferred))
-// {
-// R val = continuation(parent);
-// next.set_value(boost::move(val));
-// }
-// else
-// {
-// BOOST_THREAD_FUTURE<R> f = async(policy_, continuation, boost::ref(parent));
-// R val = f.get();
-// next.set_value(boost::move(val));
-// }
-// }
-// catch (...)
-// {
-// next.set_exception(boost::current_exception());
-// }
-// }
-// private:
-//
-// future_continuation(future_continuation const&);
-// future_continuation& operator=(future_continuation const&);
-// };
-//#endif
+ ////////////////////////////////
+ // make_future_async_continuation_shared_state
+ ////////////////////////////////
+ template<typename F, typename Rp, typename Fp>
+ BOOST_THREAD_FUTURE<Rp>
+ make_future_async_continuation_shared_state(
+ boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f,
+ BOOST_THREAD_FWD_REF(Fp) c) {
+ shared_ptr<future_async_continuation_shared_state<F,Rp, Fp> >
+ h(new future_async_continuation_shared_state<F,Rp, Fp>(boost::move(f), boost::forward<Fp>(c)));
+ h->parent.future_->set_continuation_ptr(h, lock);
+
+ return BOOST_THREAD_FUTURE<Rp>(h);
}
+}
////////////////////////////////
// template<typename F>
@@ -3801,74 +4333,52 @@ namespace boost
template <typename R>
template <typename F>
- inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE<R>&)>::type>
- BOOST_THREAD_FUTURE<R>::then(launch policy, BOOST_THREAD_FWD_REF(F) func)
- {
-
- typedef typename boost::result_of<F(BOOST_THREAD_FUTURE<R>&)>::type future_type;
-
- if (this->future_==0)
- {
- // fixme what to do when the future has no associated state?
- return BOOST_THREAD_FUTURE<future_type>();
- }
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE<R>)>::type>
+ BOOST_THREAD_FUTURE<R>::then(launch policy, BOOST_THREAD_FWD_REF(F) func) {
+ typedef typename boost::result_of<F(BOOST_THREAD_FUTURE<R>)>::type future_type;
+ BOOST_THREAD_ASSERT_PRECONDITION(this->future_!=0, future_uninitialized());
- boost::unique_lock<boost::mutex> lock(this->future_->mutex);
- if (int(policy) & int(launch::async))
- {
- return BOOST_THREAD_MAKE_RV_REF((boost::detail::make_future_async_continuation<BOOST_THREAD_FUTURE<R>, future_type, F>(
- lock, *this, boost::forward<F>(func)
- )));
+ boost::unique_lock<boost::mutex> lock(this->future_->mutex);
+ if (underlying_cast<int>(policy) & int(launch::async)) {
+ return BOOST_THREAD_MAKE_RV_REF((boost::detail::make_future_async_continuation_shared_state<BOOST_THREAD_FUTURE<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func)
+ )));
+ } else if (underlying_cast<int>(policy) & int(launch::deferred)) {
+ return BOOST_THREAD_MAKE_RV_REF((boost::detail::make_future_deferred_continuation_shared_state<BOOST_THREAD_FUTURE<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func)
+ )));
+ } else {
+ return BOOST_THREAD_MAKE_RV_REF((boost::detail::make_future_async_continuation_shared_state<BOOST_THREAD_FUTURE<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func)
+ )));
}
- else
- if (int(policy) & int(launch::deferred))
- {
- return BOOST_THREAD_MAKE_RV_REF((boost::detail::make_future_deferred_continuation<BOOST_THREAD_FUTURE<R>, future_type, F>(
- lock, *this, boost::forward<F>(func)
- )));
- }
- else
- {
- // fixme what to do when the policy is invalid?
- return BOOST_THREAD_FUTURE<future_type>();
- }
-
}
+
template <typename R>
template <typename F>
- inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE<R>&)>::type>
- BOOST_THREAD_FUTURE<R>::then(BOOST_THREAD_FWD_REF(F) func)
- {
-
- typedef typename boost::result_of<F(BOOST_THREAD_FUTURE<R>&)>::type future_type;
-
- if (this->future_==0)
- {
- //BOOST_THREAD_LOG << "ERROR future::then " << this << BOOST_THREAD_END_LOG;
- // fixme what to do when the future has no associated state?
- return BOOST_THREAD_FUTURE<future_type>();
- }
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(BOOST_THREAD_FUTURE<R>)>::type>
+ BOOST_THREAD_FUTURE<R>::then(BOOST_THREAD_FWD_REF(F) func) {
+ typedef typename boost::result_of<F(BOOST_THREAD_FUTURE<R>)>::type future_type;
+ BOOST_THREAD_ASSERT_PRECONDITION(this->future_!=0, future_uninitialized());
boost::unique_lock<boost::mutex> lock(this->future_->mutex);
- if (int(this->launch_policy()) & int(launch::async))
- {
- return boost::detail::make_future_async_continuation<BOOST_THREAD_FUTURE<R>, future_type, F>(
- lock, *this, boost::forward<F>(func)
+ if (underlying_cast<int>(this->launch_policy(lock)) & int(launch::async)) {
+ return boost::detail::make_future_async_continuation_shared_state<BOOST_THREAD_FUTURE<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func)
);
- }
- else if (int(this->launch_policy()) & int(launch::deferred))
- {
+ } else if (underlying_cast<int>(this->launch_policy(lock)) & int(launch::deferred)) {
this->future_->wait_internal(lock);
- return boost::detail::make_future_deferred_continuation<BOOST_THREAD_FUTURE<R>, future_type, F>(
- lock, *this, boost::forward<F>(func)
+ return boost::detail::make_future_deferred_continuation_shared_state<BOOST_THREAD_FUTURE<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func)
+ );
+ } else {
+ return boost::detail::make_future_async_continuation_shared_state<BOOST_THREAD_FUTURE<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func)
);
- }
- else
- {
- // fixme what to do when the policy is invalid?
- return BOOST_THREAD_FUTURE<future_type>();
}
}
+
+
//#if 0 && defined(BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR)
// template <typename R>
// template<typename RF>
@@ -3922,8 +4432,405 @@ namespace boost
// }
//#endif
+ template <typename R>
+ template <typename F>
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(shared_future<R>)>::type>
+ shared_future<R>::then(launch policy, BOOST_THREAD_FWD_REF(F) func)
+ {
+ typedef typename boost::result_of<F(shared_future<R>)>::type future_type;
+ BOOST_THREAD_ASSERT_PRECONDITION(this->future_!=0, future_uninitialized());
+
+ boost::unique_lock<boost::mutex> lock(this->future_->mutex);
+ if (underlying_cast<int>(policy) & int(launch::async)) {
+ return BOOST_THREAD_MAKE_RV_REF((boost::detail::make_future_async_continuation_shared_state<shared_future<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func)
+ )));
+ } else if (underlying_cast<int>(policy) & int(launch::deferred)) {
+ return BOOST_THREAD_MAKE_RV_REF((boost::detail::make_future_deferred_continuation_shared_state<shared_future<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func)
+ )));
+ } else {
+ return BOOST_THREAD_MAKE_RV_REF((boost::detail::make_future_async_continuation_shared_state<shared_future<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func)
+ )));
+ }
+ }
+
+ template <typename R>
+ template <typename F>
+ inline BOOST_THREAD_FUTURE<typename boost::result_of<F(shared_future<R>)>::type>
+ shared_future<R>::then(BOOST_THREAD_FWD_REF(F) func) {
+ typedef typename boost::result_of<F(shared_future<R>)>::type future_type;
+
+ BOOST_THREAD_ASSERT_PRECONDITION(this->future_!=0, future_uninitialized());
+
+ boost::unique_lock<boost::mutex> lock(this->future_->mutex);
+ if (underlying_cast<int>(this->launch_policy(lock)) & int(launch::async)) {
+ return boost::detail::make_future_async_continuation_shared_state<shared_future<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func));
+ } else if (underlying_cast<int>(this->launch_policy(lock)) & int(launch::deferred)) {
+ this->future_->wait_internal(lock);
+ return boost::detail::make_future_deferred_continuation_shared_state<shared_future<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func));
+ } else {
+ return boost::detail::make_future_async_continuation_shared_state<shared_future<R>, future_type, F>(
+ lock, boost::move(*this), boost::forward<F>(func));
+ }
+ }
+
+namespace detail
+{
+ template <typename T>
+ struct mfallbacker_to
+ {
+ T value_;
+ typedef T result_type;
+ mfallbacker_to(BOOST_THREAD_RV_REF(T) v)
+ : value_(boost::move(v))
+ {}
+
+ T operator()(BOOST_THREAD_FUTURE<T> fut) {
+ return fut.get_or(boost::move(value_));
+ }
+ };
+ template <typename T>
+ struct cfallbacker_to
+ {
+ T value_;
+ typedef T result_type;
+ cfallbacker_to(T const& v)
+ : value_(v)
+ {}
+
+ T operator()(BOOST_THREAD_FUTURE<T> fut) {
+ return fut.get_or(value_);
+
+ }
+ };
+}
+ ////////////////////////////////
+ // future<R> future<R>::fallback_to(R&& v);
+ ////////////////////////////////
+
+ template <typename R>
+ template <typename R2>
+ inline typename boost::disable_if< is_void<R2>, BOOST_THREAD_FUTURE<R> >::type
+ BOOST_THREAD_FUTURE<R>::fallback_to(BOOST_THREAD_RV_REF(R2) v) {
+ return then(detail::mfallbacker_to<R>(boost::move(v)));
+ }
+
+ template <typename R>
+ template <typename R2>
+ inline typename boost::disable_if< is_void<R2>, BOOST_THREAD_FUTURE<R> >::type
+ BOOST_THREAD_FUTURE<R>::fallback_to(R2 const& v) {
+ return then(detail::cfallbacker_to<R>(v));
+ }
+
#endif
+#if defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
+namespace detail
+{
+ /////////////////////////
+ /// future_unwrap_shared_state
+ /////////////////////////
+
+ template<typename F, typename Rp>
+ struct future_unwrap_shared_state: shared_state<Rp>
+ {
+ F parent;
+ public:
+ explicit future_unwrap_shared_state(BOOST_THREAD_RV_REF(F) f)
+ : parent(boost::move(f)) {}
+ virtual void wait(bool ) { // todo see if rethrow must be used
+ boost::unique_lock<boost::mutex> lock(mutex);
+ parent.get().wait();
+ }
+ virtual Rp get() {
+ boost::unique_lock<boost::mutex> lock(mutex);
+ return parent.get().get();
+ }
+ };
+
+ template <class F, class Rp>
+ BOOST_THREAD_FUTURE<Rp>
+ make_future_unwrap_shared_state(boost::unique_lock<boost::mutex> &lock, BOOST_THREAD_RV_REF(F) f) {
+ shared_ptr<future_unwrap_shared_state<F, Rp> >
+ h(new future_unwrap_shared_state<F, Rp>(boost::move(f)));
+ h->parent.future_->set_continuation_ptr(h, lock);
+ return BOOST_THREAD_FUTURE<Rp>(h);
+ }
+}
+
+ template <typename R>
+ inline BOOST_THREAD_FUTURE<R>::BOOST_THREAD_FUTURE(BOOST_THREAD_RV_REF(BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R> >) other)
+ : base_type(other.unwrap()) {}
+
+ template <typename R2>
+ BOOST_THREAD_FUTURE<R2>
+ BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R2> >::unwrap()
+ {
+ BOOST_THREAD_ASSERT_PRECONDITION(this->future_!=0, future_uninitialized());
+ boost::unique_lock<boost::mutex> lock(this->future_->mutex);
+ return boost::detail::make_future_unwrap_shared_state<BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R2> >, R2>(lock, boost::move(*this));
+ }
+#endif
+
+#if defined BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY
+namespace detail
+{
+ struct input_iterator_tag {};
+ struct vector_tag {};
+ struct values_tag {};
+ template <typename T>
+ struct alias_t { typedef T type; };
+
+ BOOST_CONSTEXPR_OR_CONST input_iterator_tag input_iterator_tag_value = {};
+ BOOST_CONSTEXPR_OR_CONST vector_tag vector_tag_value = {};
+ BOOST_CONSTEXPR_OR_CONST values_tag values_tag_value = {};
+ ////////////////////////////////
+ // detail::future_async_when_all_shared_state
+ ////////////////////////////////
+ template<typename F>
+ struct future_when_all_vector_shared_state: future_async_shared_state_base<csbl::vector<F> >
+ {
+ typedef csbl::vector<F> vector_type;
+ typedef typename F::value_type value_type;
+ csbl::vector<F> vec_;
+
+ static void run(future_when_all_vector_shared_state* that) {
+ try {
+ boost::wait_for_all(that->vec_.begin(), that->vec_.end());
+ that->mark_finished_with_result(boost::move(that->vec_));
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ } catch(thread_interrupted& ) {
+ that->mark_interrupted_finish();
+#endif
+ } catch(...) {
+ that->mark_exceptional_finish();
+ }
+ }
+ void init() {
+ this->thr_ = thread(&future_when_all_vector_shared_state::run, this);
+ }
+
+ public:
+ template< typename InputIterator>
+ future_when_all_vector_shared_state(input_iterator_tag, InputIterator first, InputIterator last)
+ : vec_(std::make_move_iterator(first), std::make_move_iterator(last))
+ {
+ init();
+ }
+
+ future_when_all_vector_shared_state(vector_tag, BOOST_THREAD_RV_REF(csbl::vector<F>) v)
+ : vec_(boost::move(v))
+ {
+ init();
+ }
+
+#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ template< typename T0, typename ...T>
+ future_when_all_vector_shared_state(values_tag, BOOST_THREAD_RV_REF(T0) f, BOOST_THREAD_RV_REF(T) ... futures) {
+ vec_.push_back(boost::forward<T0>(f));
+ typename alias_t<char[]>::type{
+ ( //first part of magic unpacker
+ vec_.push_back(boost::forward<T>(futures)),'0'
+ )..., '0'
+ }; //second part of magic unpacker
+ init();
+ }
+#else
+#endif
+ ~future_when_all_vector_shared_state() {
+ this->join();
+ }
+
+ };
+
+ ////////////////////////////////
+ // detail::future_async_when_any_shared_state
+ ////////////////////////////////
+ template<typename F>
+ struct future_when_any_vector_shared_state: future_async_shared_state_base<csbl::vector<F> >
+ {
+ typedef csbl::vector<F> vector_type;
+ typedef typename F::value_type value_type;
+ csbl::vector<F> vec_;
+
+ static void run(future_when_any_vector_shared_state* that)
+ {
+ try {
+ boost::wait_for_any(that->vec_.begin(), that->vec_.end());
+ that->mark_finished_with_result(boost::move(that->vec_));
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ } catch(thread_interrupted& ) {
+ that->mark_interrupted_finish();
+#endif
+ } catch(...) {
+ that->mark_exceptional_finish();
+ }
+ }
+ void init() {
+ this->thr_ = thread(&future_when_any_vector_shared_state::run, this);
+ }
+
+ public:
+ template< typename InputIterator>
+ future_when_any_vector_shared_state(input_iterator_tag, InputIterator first, InputIterator last)
+ : vec_(std::make_move_iterator(first), std::make_move_iterator(last))
+ {
+ init();
+ }
+
+ future_when_any_vector_shared_state(vector_tag, BOOST_THREAD_RV_REF(csbl::vector<F>) v)
+ : vec_(boost::move(v))
+ {
+ init();
+ }
+
+#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ template< typename T0, typename ...T>
+ future_when_any_vector_shared_state(values_tag,
+ BOOST_THREAD_RV_REF(T0) f, BOOST_THREAD_RV_REF(T) ... futures
+ ) {
+ vec_.push_back(boost::forward<T0>(f));
+ typename alias_t<char[]>::type{
+ ( //first part of magic unpacker
+ vec_.push_back(boost::forward<T>(futures))
+ ,'0'
+ )...,
+ '0'
+ }; //second part of magic unpacker
+ init();
+ }
+#endif
+
+ ~future_when_any_vector_shared_state() {
+ this->join();
+ }
+
+ };
+
+#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+//#if ! defined(BOOST_NO_CXX11_HDR_TUPLE)
+ template< typename T0, typename ...T>
+ struct future_when_all_tuple_shared_state: future_async_shared_state_base<
+ csbl::tuple<BOOST_THREAD_FUTURE<typename T0::value_type>, BOOST_THREAD_FUTURE<typename T::value_type>... >
+ >
+ {
+
+ };
+ template< typename T0, typename ...T>
+ struct future_when_any_tuple_shared_state: future_async_shared_state_base<
+ csbl::tuple<BOOST_THREAD_FUTURE<typename T0::value_type>, BOOST_THREAD_FUTURE<typename T::value_type>... >
+ >
+ {
+ };
+//#endif
+#endif
+
+#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ template< typename ...T>
+ struct are_same : true_type {};
+ template< typename T0 >
+ struct are_same<T0> : true_type {};
+ template< typename T0, typename T1, typename ...T>
+ struct are_same<T0, T1, T...> : integral_constant<bool, is_same<T0,T1>::value && are_same<T1, T...>::value> {};
+
+ template< bool AreSame, typename T0, typename ...T>
+ struct when_type_impl;
+
+ template< typename T0, typename ...T>
+ struct when_type_impl<true, T0, T...>
+ {
+ typedef csbl::vector<typename decay<T0>::type> container_type;
+ typedef typename container_type::value_type value_type;
+ typedef detail::future_when_all_vector_shared_state<value_type> factory_all_type;
+ typedef detail::future_when_any_vector_shared_state<value_type> factory_any_type;
+ };
+//#if ! defined(BOOST_NO_CXX11_HDR_TUPLE)
+ template< typename T0, typename ...T>
+ struct when_type_impl<false, T0, T...>
+ {
+ typedef csbl::tuple<BOOST_THREAD_FUTURE<typename T0::value_type>, BOOST_THREAD_FUTURE<typename T::value_type>... > container_type;
+ typedef detail::future_when_all_tuple_shared_state<T0, T...> factory_all_type;
+ typedef detail::future_when_any_tuple_shared_state<T0, T...> factory_any_type;
+ };
+//#endif
+
+ template< typename T0, typename ...T>
+ struct when_type : when_type_impl<are_same<T0, T...>::value, T0, T...> {};
+#endif
+}
+
+ template< typename InputIterator>
+ typename boost::disable_if<is_future_type<InputIterator>,
+ BOOST_THREAD_FUTURE<csbl::vector<typename InputIterator::value_type> >
+ >::type
+ when_all(InputIterator first, InputIterator last) {
+ typedef typename InputIterator::value_type value_type;
+ typedef csbl::vector<value_type> container_type;
+ typedef detail::future_when_all_vector_shared_state<value_type> factory_type;
+
+ if (first==last) return make_ready_future(container_type());
+ shared_ptr<factory_type >
+ h(new factory_type>(detail::input_iterator_tag_value, first,last));
+ return BOOST_THREAD_FUTURE<container_type>(h);
+ }
+
+//#if ! defined(BOOST_NO_CXX11_HDR_TUPLE)
+ inline BOOST_THREAD_FUTURE<csbl::tuple<> > when_all() {
+ return make_ready_future(csbl::tuple<>());
+ }
+//#endif
+
+#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ template< typename T0, typename ...T>
+ BOOST_THREAD_FUTURE<typename detail::when_type<T0, T...>::container_type>
+ when_all(BOOST_THREAD_RV_REF(T0) f, BOOST_THREAD_RV_REF(T) ... futures) {
+ typedef typename detail::when_type<T0, T...>::container_type container_type;
+ typedef typename detail::when_type<T0, T...>::factory_all_type factory_type;
+
+ shared_ptr<factory_type>
+ h(new factory_type(detail::values_tag_value, boost::forward<T0>(f), boost::forward<T>(futures)...));
+ return BOOST_THREAD_FUTURE<container_type>(h);
+ }
+#endif
+
+ template< typename InputIterator>
+ typename boost::disable_if<is_future_type<InputIterator>,
+ BOOST_THREAD_FUTURE<csbl::vector<typename InputIterator::value_type> >
+ >::type
+ when_any(InputIterator first, InputIterator last) {
+ typedef typename InputIterator::value_type value_type;
+ typedef csbl::vector<value_type> container_type;
+ typedef detail::future_when_any_vector_shared_state<value_type> factory_type;
+
+ if (first==last) return make_ready_future(container_type());
+ shared_ptr<factory_type >
+ h(new factory_type>(detail::input_iterator_tag_value, first,last));
+ return BOOST_THREAD_FUTURE<container_type>(h);
+ }
+
+//#if ! defined(BOOST_NO_CXX11_HDR_TUPLE)
+ inline BOOST_THREAD_FUTURE<csbl::tuple<> > when_any() {
+ return make_ready_future(csbl::tuple<>());
+ }
+//#endif
+
+#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ template< typename T0, typename ...T>
+ BOOST_THREAD_FUTURE<typename detail::when_type<T0, T...>::container_type>
+ when_any(BOOST_THREAD_RV_REF(T0) f, BOOST_THREAD_RV_REF(T) ... futures) {
+ typedef typename detail::when_type<T0, T...>::container_type container_type;
+ typedef typename detail::when_type<T0, T...>::factory_any_type factory_type;
+
+ shared_ptr<factory_type>
+ h(new factory_type(detail::values_tag_value, boost::forward<T0>(f), boost::forward<T>(futures)...));
+ return BOOST_THREAD_FUTURE<container_type>(h);
+ }
+#endif
+#endif // BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY
}
#endif // BOOST_NO_EXCEPTION
diff --git a/3party/boost/boost/thread/future_error_code.hpp b/3party/boost/boost/thread/future_error_code.hpp
index be3de1a906..6fe95541b7 100644
--- a/3party/boost/boost/thread/future_error_code.hpp
+++ b/3party/boost/boost/thread/future_error_code.hpp
@@ -9,7 +9,7 @@
#define BOOST_THREAD_FUTURE_ERROR_CODE_HPP
#include <boost/thread/detail/config.hpp>
-#include <boost/detail/scoped_enum_emulation.hpp>
+#include <boost/core/scoped_enum.hpp>
#include <boost/system/error_code.hpp>
#include <boost/type_traits/integral_constant.hpp>
@@ -29,11 +29,11 @@ namespace boost
namespace system
{
template <>
- struct BOOST_SYMBOL_VISIBLE is_error_code_enum<future_errc> : public true_type {};
+ struct BOOST_SYMBOL_VISIBLE is_error_code_enum< ::boost::future_errc> : public true_type {};
#ifdef BOOST_NO_CXX11_SCOPED_ENUMS
template <>
- struct BOOST_SYMBOL_VISIBLE is_error_code_enum<future_errc::enum_type> : public true_type { };
+ struct BOOST_SYMBOL_VISIBLE is_error_code_enum< ::boost::future_errc::enum_type> : public true_type { };
#endif
} // system
@@ -53,7 +53,7 @@ namespace boost
error_condition
make_error_condition(future_errc e) BOOST_NOEXCEPT
{
- return error_condition(underlying_cast<int>(e), future_category());
+ return error_condition(underlying_cast<int>(e), boost::future_category());
}
} // system
} // boost
diff --git a/3party/boost/boost/thread/latch.hpp b/3party/boost/boost/thread/latch.hpp
index 4eeb440f43..4d57addb87 100644
--- a/3party/boost/boost/thread/latch.hpp
+++ b/3party/boost/boost/thread/latch.hpp
@@ -23,28 +23,40 @@ namespace boost
{
class latch
{
- /// @Requires: count_.value_ must be greater than 0
- /// Effect: Decrement the count. Unlocks the lock notify anyone waiting if we reached zero.
- /// Returns: true if count_.value_ reached the value 0.
+ /// @Requires: count_ must be greater than 0
+ /// Effect: Decrement the count. Unlocks the lock and notify anyone waiting if we reached zero.
+ /// Returns: true if count_ reached the value 0.
/// @ThreadSafe ensured by the @c lk parameter
bool count_down(unique_lock<mutex> &lk)
- /// pre_condition (count_.value_ > 0)
+ /// pre_condition (count_ > 0)
{
- BOOST_ASSERT(count_.value_ > 0);
- if (--count_.value_ == 0)
+ BOOST_ASSERT(count_ > 0);
+ if (--count_ == 0)
{
- count_.cond_.notify_all();
+ ++generation_;
lk.unlock();
+ cond_.notify_all();
return true;
}
return false;
}
+ /// Effect: Decrement the count is > 0. Unlocks the lock notify anyone waiting if we reached zero.
+ /// Returns: true if count_ is 0.
+ /// @ThreadSafe ensured by the @c lk parameter
+ bool try_count_down(unique_lock<mutex> &lk)
+ {
+ if (count_ > 0)
+ {
+ return count_down(lk);
+ }
+ return true;
+ }
public:
BOOST_THREAD_NO_COPYABLE( latch)
/// Constructs a latch with a given count.
latch(std::size_t count) :
- count_(count)
+ count_(count), generation_(0)
{
}
@@ -60,7 +72,8 @@ namespace boost
void wait()
{
boost::unique_lock<boost::mutex> lk(mutex_);
- count_.cond_.wait(lk, detail::counter_is_zero(count_));
+ std::size_t generation(generation_);
+ cond_.wait(lk, detail::not_equal(generation, generation_));
}
/// @return true if the internal counter is already 0, false otherwise
@@ -76,7 +89,8 @@ namespace boost
cv_status wait_for(const chrono::duration<Rep, Period>& rel_time)
{
boost::unique_lock<boost::mutex> lk(mutex_);
- return count_.cond_.wait_for(lk, rel_time, detail::counter_is_zero(count_))
+ std::size_t generation(generation_);
+ return cond_.wait_for(lk, rel_time, detail::not_equal(generation, generation_))
? cv_status::no_timeout
: cv_status::timeout;
}
@@ -87,7 +101,8 @@ namespace boost
cv_status wait_until(const chrono::time_point<Clock, Duration>& abs_time)
{
boost::unique_lock<boost::mutex> lk(mutex_);
- return count_.cond_.wait_until(lk, abs_time, detail::counter_is_zero(count_))
+ std::size_t generation(generation_);
+ return cond_.wait_until(lk, abs_time, detail::not_equal(generation, generation_))
? cv_status::no_timeout
: cv_status::timeout;
}
@@ -99,6 +114,13 @@ namespace boost
boost::unique_lock<boost::mutex> lk(mutex_);
count_down(lk);
}
+ /// Effect: Decrement the count if it is > 0 and notify anyone waiting if we reached zero.
+ /// Returns: true if count_ was 0 or reached 0.
+ bool try_count_down()
+ {
+ boost::unique_lock<boost::mutex> lk(mutex_);
+ return try_count_down(lk);
+ }
void signal()
{
count_down();
@@ -110,11 +132,12 @@ namespace boost
void count_down_and_wait()
{
boost::unique_lock<boost::mutex> lk(mutex_);
+ std::size_t generation(generation_);
if (count_down(lk))
{
return;
}
- count_.cond_.wait(lk, detail::counter_is_zero(count_));
+ cond_.wait(lk, detail::not_equal(generation, generation_));
}
void sync()
{
@@ -132,7 +155,9 @@ namespace boost
private:
mutex mutex_;
- detail::counter count_;
+ condition_variable cond_;
+ std::size_t count_;
+ std::size_t generation_;
};
} // namespace boost
diff --git a/3party/boost/boost/thread/lock_types.hpp b/3party/boost/boost/thread/lock_types.hpp
index 2d40d22709..2b73edfb02 100644
--- a/3party/boost/boost/thread/lock_types.hpp
+++ b/3party/boost/boost/thread/lock_types.hpp
@@ -336,12 +336,12 @@ namespace boost
if (m == 0)
{
boost::throw_exception(
- boost::lock_error(system::errc::operation_not_permitted, "boost unique_lock has no mutex"));
+ boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost unique_lock has no mutex"));
}
if (owns_lock())
{
boost::throw_exception(
- boost::lock_error(system::errc::resource_deadlock_would_occur, "boost unique_lock owns already the mutex"));
+ boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost unique_lock owns already the mutex"));
}
m->lock();
is_locked = true;
@@ -351,12 +351,12 @@ namespace boost
if (m == 0)
{
boost::throw_exception(
- boost::lock_error(system::errc::operation_not_permitted, "boost unique_lock has no mutex"));
+ boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost unique_lock has no mutex"));
}
if (owns_lock())
{
boost::throw_exception(
- boost::lock_error(system::errc::resource_deadlock_would_occur, "boost unique_lock owns already the mutex"));
+ boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost unique_lock owns already the mutex"));
}
is_locked = m->try_lock();
return is_locked;
@@ -367,11 +367,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost unique_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost unique_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost unique_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost unique_lock owns already the mutex"));
}
is_locked=m->timed_lock(relative_time);
return is_locked;
@@ -381,11 +381,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost unique_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost unique_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost unique_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost unique_lock owns already the mutex"));
}
is_locked=m->timed_lock(absolute_time);
return is_locked;
@@ -394,11 +394,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost unique_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost unique_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost unique_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost unique_lock owns already the mutex"));
}
is_locked=m->timed_lock(absolute_time);
return is_locked;
@@ -411,11 +411,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost unique_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost unique_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost unique_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost unique_lock owns already the mutex"));
}
is_locked=m->try_lock_for(rel_time);
return is_locked;
@@ -425,11 +425,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost unique_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost unique_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost unique_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost unique_lock owns already the mutex"));
}
is_locked=m->try_lock_until(abs_time);
return is_locked;
@@ -441,12 +441,12 @@ namespace boost
if (m == 0)
{
boost::throw_exception(
- boost::lock_error(system::errc::operation_not_permitted, "boost unique_lock has no mutex"));
+ boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost unique_lock has no mutex"));
}
if (!owns_lock())
{
boost::throw_exception(
- boost::lock_error(system::errc::operation_not_permitted, "boost unique_lock doesn't own the mutex"));
+ boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost unique_lock doesn't own the mutex"));
}
m->unlock();
is_locked = false;
@@ -636,11 +636,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost shared_lock owns already the mutex"));
}
m->lock_shared();
is_locked=true;
@@ -649,11 +649,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost shared_lock owns already the mutex"));
}
is_locked=m->try_lock_shared();
return is_locked;
@@ -663,11 +663,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost shared_lock owns already the mutex"));
}
is_locked=m->timed_lock_shared(target_time);
return is_locked;
@@ -677,11 +677,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost shared_lock owns already the mutex"));
}
is_locked=m->timed_lock_shared(target_time);
return is_locked;
@@ -693,11 +693,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost shared_lock owns already the mutex"));
}
is_locked=m->try_lock_shared_for(rel_time);
return is_locked;
@@ -707,11 +707,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost shared_lock owns already the mutex"));
}
is_locked=m->try_lock_shared_until(abs_time);
return is_locked;
@@ -721,11 +721,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if(!owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock doesn't own the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock doesn't own the mutex"));
}
m->unlock_shared();
is_locked=false;
@@ -934,12 +934,12 @@ namespace boost
if (m == 0)
{
boost::throw_exception(
- boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if (owns_lock())
{
boost::throw_exception(
- boost::lock_error(system::errc::resource_deadlock_would_occur, "boost upgrade_lock owns already the mutex"));
+ boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost upgrade_lock owns already the mutex"));
}
m->lock_upgrade();
is_locked = true;
@@ -949,12 +949,12 @@ namespace boost
if (m == 0)
{
boost::throw_exception(
- boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if (owns_lock())
{
boost::throw_exception(
- boost::lock_error(system::errc::resource_deadlock_would_occur, "boost upgrade_lock owns already the mutex"));
+ boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost upgrade_lock owns already the mutex"));
}
is_locked = m->try_lock_upgrade();
return is_locked;
@@ -964,12 +964,12 @@ namespace boost
if (m == 0)
{
boost::throw_exception(
- boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if (!owns_lock())
{
boost::throw_exception(
- boost::lock_error(system::errc::operation_not_permitted, "boost upgrade_lock doesn't own the mutex"));
+ boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost upgrade_lock doesn't own the mutex"));
}
m->unlock_upgrade();
is_locked = false;
@@ -980,11 +980,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost shared_lock owns already the mutex"));
}
is_locked=m->try_lock_upgrade_for(rel_time);
return is_locked;
@@ -994,11 +994,11 @@ namespace boost
{
if(m==0)
{
- boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::operation_not_permitted), "boost shared_lock has no mutex"));
}
if(owns_lock())
{
- boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ boost::throw_exception(boost::lock_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost shared_lock owns already the mutex"));
}
is_locked=m->try_lock_upgrade_until(abs_time);
return is_locked;
@@ -1112,6 +1112,10 @@ namespace boost
{
return exclusive.owns_lock();
}
+ Mutex* mutex() const BOOST_NOEXCEPT
+ {
+ return exclusive.mutex();
+ }
};
BOOST_THREAD_DCL_MOVABLE_BEG(Mutex) upgrade_to_unique_lock<Mutex> BOOST_THREAD_DCL_MOVABLE_END
@@ -1187,7 +1191,7 @@ private unique_lock<Mutex>
{
return base::owns_lock();
}
- Mutex* mutex() const
+ Mutex* mutex() const BOOST_NOEXCEPT
{
return base::mutex();
}
diff --git a/3party/boost/boost/thread/lockable_adapter.hpp b/3party/boost/boost/thread/lockable_adapter.hpp
index c486bcae37..93d9ba5023 100644
--- a/3party/boost/boost/thread/lockable_adapter.hpp
+++ b/3party/boost/boost/thread/lockable_adapter.hpp
@@ -37,11 +37,11 @@ namespace boost
basic_lockable_adapter()
{}
- void lock()
+ void lock() const
{
lockable().lock();
}
- void unlock()
+ void unlock() const
{
lockable().unlock();
}
@@ -56,7 +56,7 @@ namespace boost
public:
typedef Lockable mutex_type;
- bool try_lock()
+ bool try_lock() const
{
return this->lockable().try_lock();
}
@@ -71,12 +71,12 @@ namespace boost
typedef TimedLock mutex_type;
template <typename Clock, typename Duration>
- bool try_lock_until(chrono::time_point<Clock, Duration> const & abs_time)
+ bool try_lock_until(chrono::time_point<Clock, Duration> const & abs_time) const
{
return this->lockable().try_lock_until(abs_time);
}
template <typename Rep, typename Period>
- bool try_lock_for(chrono::duration<Rep, Period> const & rel_time)
+ bool try_lock_for(chrono::duration<Rep, Period> const & rel_time) const
{
return this->lockable().try_lock_for(rel_time);
}
@@ -91,26 +91,26 @@ namespace boost
public:
typedef SharableLock mutex_type;
- void lock_shared()
+ void lock_shared() const
{
this->lockable().lock_shared();
}
- bool try_lock_shared()
+ bool try_lock_shared() const
{
return this->lockable().try_lock_shared();
}
- void unlock_shared()
+ void unlock_shared() const
{
this->lockable().unlock_shared();
}
template <typename Clock, typename Duration>
- bool try_lock_shared_until(chrono::time_point<Clock, Duration> const & abs_time)
+ bool try_lock_shared_until(chrono::time_point<Clock, Duration> const & abs_time) const
{
return this->lockable().try_lock_shared_until(abs_time);
}
template <typename Rep, typename Period>
- bool try_lock_shared_for(chrono::duration<Rep, Period> const & rel_time)
+ bool try_lock_shared_for(chrono::duration<Rep, Period> const & rel_time) const
{
return this->lockable().try_lock_shared_for(rel_time);
}
@@ -126,95 +126,95 @@ namespace boost
public:
typedef UpgradableLock mutex_type;
- void lock_upgrade()
+ void lock_upgrade() const
{
this->lockable().lock_upgrade();
}
- bool try_lock_upgrade()
+ bool try_lock_upgrade() const
{
return this->lockable().try_lock_upgrade();
}
- void unlock_upgrade()
+ void unlock_upgrade() const
{
this->lockable().unlock_upgrade();
}
template <typename Clock, typename Duration>
- bool try_lock_upgrade_until(chrono::time_point<Clock, Duration> const & abs_time)
+ bool try_lock_upgrade_until(chrono::time_point<Clock, Duration> const & abs_time) const
{
return this->lockable().try_lock_upgrade_until(abs_time);
}
template <typename Rep, typename Period>
- bool try_lock_upgrade_for(chrono::duration<Rep, Period> const & rel_time)
+ bool try_lock_upgrade_for(chrono::duration<Rep, Period> const & rel_time) const
{
return this->lockable().try_lock_upgrade_for(rel_time);
}
- bool try_unlock_shared_and_lock()
+ bool try_unlock_shared_and_lock() const
{
return this->lockable().try_unlock_shared_and_lock();
}
template <typename Clock, typename Duration>
- bool try_unlock_shared_and_lock_until(chrono::time_point<Clock, Duration> const & abs_time)
+ bool try_unlock_shared_and_lock_until(chrono::time_point<Clock, Duration> const & abs_time) const
{
return this->lockable().try_unlock_shared_and_lock_until(abs_time);
}
template <typename Rep, typename Period>
- bool try_unlock_shared_and_lock_for(chrono::duration<Rep, Period> const & rel_time)
+ bool try_unlock_shared_and_lock_for(chrono::duration<Rep, Period> const & rel_time) const
{
return this->lockable().try_unlock_shared_and_lock_for(rel_time);
}
- void unlock_and_lock_shared()
+ void unlock_and_lock_shared() const
{
this->lockable().unlock_and_lock_shared();
}
- bool try_unlock_shared_and_lock_upgrade()
+ bool try_unlock_shared_and_lock_upgrade() const
{
return this->lockable().try_unlock_shared_and_lock_upgrade();
}
template <typename Clock, typename Duration>
- bool try_unlock_shared_and_lock_upgrade_until(chrono::time_point<Clock, Duration> const & abs_time)
+ bool try_unlock_shared_and_lock_upgrade_until(chrono::time_point<Clock, Duration> const & abs_time) const
{
return this->lockable().try_unlock_shared_and_lock_upgrade_until(abs_time);
}
template <typename Rep, typename Period>
- bool try_unlock_shared_and_lock_upgrade_for(chrono::duration<Rep, Period> const & rel_time)
+ bool try_unlock_shared_and_lock_upgrade_for(chrono::duration<Rep, Period> const & rel_time) const
{
return this->lockable().try_unlock_shared_and_lock_upgrade_for(rel_time);
}
- void unlock_and_lock_upgrade()
+ void unlock_and_lock_upgrade() const
{
this->lockable().unlock_and_lock_upgrade();
}
- void unlock_upgrade_and_lock()
+ void unlock_upgrade_and_lock() const
{
this->lockable().unlock_upgrade_and_lock();
}
- bool try_unlock_upgrade_and_lock()
+ bool try_unlock_upgrade_and_lock() const
{
return this->lockable().try_unlock_upgrade_and_lock();
}
template <typename Clock, typename Duration>
- bool try_unlock_upgrade_and_lock_until(chrono::time_point<Clock, Duration> const & abs_time)
+ bool try_unlock_upgrade_and_lock_until(chrono::time_point<Clock, Duration> const & abs_time) const
{
return this->lockable().try_unlock_upgrade_and_lock_until(abs_time);
}
template <typename Rep, typename Period>
- bool try_unlock_upgrade_and_lock_for(chrono::duration<Rep, Period> const & rel_time)
+ bool try_unlock_upgrade_and_lock_for(chrono::duration<Rep, Period> const & rel_time) const
{
return this->lockable().try_unlock_upgrade_and_lock_for(rel_time);
}
- void unlock_upgrade_and_lock_shared()
+ void unlock_upgrade_and_lock_shared() const
{
this->lockable().unlock_upgrade_and_lock_shared();
}
diff --git a/3party/boost/boost/thread/ostream_buffer.hpp b/3party/boost/boost/thread/ostream_buffer.hpp
new file mode 100644
index 0000000000..cc02a9c0ce
--- /dev/null
+++ b/3party/boost/boost/thread/ostream_buffer.hpp
@@ -0,0 +1,45 @@
+// (C) Copyright 2013 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)
+
+
+#ifndef BOOST_THREAD_OSTREAM_BUFFER_HPP
+#define BOOST_THREAD_OSTREAM_BUFFER_HPP
+
+#include <boost/thread/detail/config.hpp>
+#include <boost/thread/detail/delete.hpp>
+#include <sstream>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+
+ template <typename OStream>
+ class ostream_buffer
+ {
+ public:
+ typedef std::basic_ostringstream<typename OStream::char_type, typename OStream::traits_type> stream_type;
+ ostream_buffer(OStream& os) :
+ os_(os)
+ {
+ }
+ ~ostream_buffer()
+ {
+ os_ << o_str_.str();
+ }
+ stream_type& stream()
+ {
+ return o_str_;
+ }
+ private:
+ OStream& os_;
+ stream_type o_str_;
+ };
+
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif // header
diff --git a/3party/boost/boost/thread/pthread/condition_variable.hpp b/3party/boost/boost/thread/pthread/condition_variable.hpp
index abebeb7f76..b1b76b012f 100644
--- a/3party/boost/boost/thread/pthread/condition_variable.hpp
+++ b/3party/boost/boost/thread/pthread/condition_variable.hpp
@@ -200,15 +200,15 @@ namespace boost
#if defined BOOST_THREAD_USES_DATETIME
template<typename lock_type>
- bool timed_wait(lock_type& m,boost::system_time const& wait_until)
+ bool timed_wait(lock_type& m,boost::system_time const& abs_time)
{
- struct timespec const timeout=detail::to_timespec(wait_until);
+ struct timespec const timeout=detail::to_timespec(abs_time);
return do_wait_until(m, timeout);
}
template<typename lock_type>
- bool timed_wait(lock_type& m,xtime const& wait_until)
+ bool timed_wait(lock_type& m,xtime const& abs_time)
{
- return timed_wait(m,system_time(wait_until));
+ return timed_wait(m,system_time(abs_time));
}
template<typename lock_type,typename duration_type>
@@ -218,20 +218,20 @@ namespace boost
}
template<typename lock_type,typename predicate_type>
- bool timed_wait(lock_type& m,boost::system_time const& wait_until,predicate_type pred)
+ bool timed_wait(lock_type& m,boost::system_time const& abs_time, predicate_type pred)
{
while (!pred())
{
- if(!timed_wait(m, wait_until))
+ if(!timed_wait(m, abs_time))
return pred();
}
return true;
}
template<typename lock_type,typename predicate_type>
- bool timed_wait(lock_type& m,xtime const& wait_until,predicate_type pred)
+ bool timed_wait(lock_type& m,xtime const& abs_time, predicate_type pred)
{
- return timed_wait(m,system_time(wait_until),pred);
+ return timed_wait(m,system_time(abs_time),pred);
}
template<typename lock_type,typename duration_type,typename predicate_type>
diff --git a/3party/boost/boost/thread/pthread/condition_variable_fwd.hpp b/3party/boost/boost/thread/pthread/condition_variable_fwd.hpp
index e567fc876c..e18030fd5f 100644
--- a/3party/boost/boost/thread/pthread/condition_variable_fwd.hpp
+++ b/3party/boost/boost/thread/pthread/condition_variable_fwd.hpp
@@ -98,21 +98,21 @@ namespace boost
#if defined BOOST_THREAD_USES_DATETIME
inline bool timed_wait(
unique_lock<mutex>& m,
- boost::system_time const& wait_until)
+ boost::system_time const& abs_time)
{
#if defined BOOST_THREAD_WAIT_BUG
- struct timespec const timeout=detail::to_timespec(wait_until + BOOST_THREAD_WAIT_BUG);
+ struct timespec const timeout=detail::to_timespec(abs_time + BOOST_THREAD_WAIT_BUG);
return do_wait_until(m, timeout);
#else
- struct timespec const timeout=detail::to_timespec(wait_until);
+ struct timespec const timeout=detail::to_timespec(abs_time);
return do_wait_until(m, timeout);
#endif
}
bool timed_wait(
unique_lock<mutex>& m,
- xtime const& wait_until)
+ xtime const& abs_time)
{
- return timed_wait(m,system_time(wait_until));
+ return timed_wait(m,system_time(abs_time));
}
template<typename duration_type>
@@ -126,11 +126,11 @@ namespace boost
template<typename predicate_type>
bool timed_wait(
unique_lock<mutex>& m,
- boost::system_time const& wait_until,predicate_type pred)
+ boost::system_time const& abs_time,predicate_type pred)
{
while (!pred())
{
- if(!timed_wait(m, wait_until))
+ if(!timed_wait(m, abs_time))
return pred();
}
return true;
@@ -139,9 +139,9 @@ namespace boost
template<typename predicate_type>
bool timed_wait(
unique_lock<mutex>& m,
- xtime const& wait_until,predicate_type pred)
+ xtime const& abs_time,predicate_type pred)
{
- return timed_wait(m,system_time(wait_until),pred);
+ return timed_wait(m,system_time(abs_time),pred);
}
template<typename duration_type,typename predicate_type>
diff --git a/3party/boost/boost/thread/pthread/mutex.hpp b/3party/boost/boost/thread/pthread/mutex.hpp
index c151079320..3e9af2a833 100644
--- a/3party/boost/boost/thread/pthread/mutex.hpp
+++ b/3party/boost/boost/thread/pthread/mutex.hpp
@@ -9,6 +9,7 @@
#include <boost/thread/detail/config.hpp>
#include <pthread.h>
#include <boost/throw_exception.hpp>
+#include <boost/core/ignore_unused.hpp>
#include <boost/thread/exceptions.hpp>
#if defined BOOST_THREAD_PROVIDES_NESTED_LOCKS
#include <boost/thread/lock_types.hpp>
@@ -105,7 +106,9 @@ namespace boost
}
~mutex()
{
- BOOST_VERIFY(!posix::pthread_mutex_destroy(&m));
+ int const res = posix::pthread_mutex_destroy(&m);
+ boost::ignore_unused(res);
+ BOOST_ASSERT(!res);
}
void lock()
diff --git a/3party/boost/boost/thread/pthread/once.hpp b/3party/boost/boost/thread/pthread/once.hpp
index f0c99ba5c9..0bef0387de 100644
--- a/3party/boost/boost/thread/pthread/once.hpp
+++ b/3party/boost/boost/thread/pthread/once.hpp
@@ -16,7 +16,7 @@
#include <boost/thread/pthread/pthread_mutex_scoped_lock.hpp>
#include <boost/thread/detail/delete.hpp>
-#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/core/no_exceptions_support.hpp>
#include <boost/bind.hpp>
#include <boost/assert.hpp>
@@ -42,7 +42,7 @@ namespace boost
}
#ifdef BOOST_THREAD_PROVIDES_ONCE_CXX11
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template<typename Function, class ...ArgTypes>
inline void call_once(once_flag& flag, BOOST_THREAD_RV_REF(Function) f, BOOST_THREAD_RV_REF(ArgTypes)... args);
#else
@@ -65,7 +65,7 @@ namespace boost
private:
volatile thread_detail::uintmax_atomic_t epoch;
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template<typename Function, class ...ArgTypes>
friend void call_once(once_flag& flag, BOOST_THREAD_RV_REF(Function) f, BOOST_THREAD_RV_REF(ArgTypes)... args);
#else
@@ -118,7 +118,7 @@ namespace boost
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2444.html
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template<typename Function, class ...ArgTypes>
diff --git a/3party/boost/boost/thread/pthread/once_atomic.hpp b/3party/boost/boost/thread/pthread/once_atomic.hpp
index 0ec1b4c923..923f07bd90 100644
--- a/3party/boost/boost/thread/pthread/once_atomic.hpp
+++ b/3party/boost/boost/thread/pthread/once_atomic.hpp
@@ -15,7 +15,7 @@
#include <boost/cstdint.hpp>
#include <boost/thread/detail/move.hpp>
#include <boost/thread/detail/invoke.hpp>
-#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/core/no_exceptions_support.hpp>
#include <boost/bind.hpp>
#include <boost/atomic.hpp>
@@ -115,7 +115,7 @@ namespace boost
#endif
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template<typename Function, class ...ArgTypes>
inline void call_once(once_flag& flag, BOOST_THREAD_RV_REF(Function) f, BOOST_THREAD_RV_REF(ArgTypes)... args)
diff --git a/3party/boost/boost/thread/pthread/thread_data.hpp b/3party/boost/boost/thread/pthread/thread_data.hpp
index 6fd19f2601..801f470b46 100644
--- a/3party/boost/boost/thread/pthread/thread_data.hpp
+++ b/3party/boost/boost/thread/pthread/thread_data.hpp
@@ -15,7 +15,6 @@
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
-#include <boost/optional.hpp>
#include <boost/assert.hpp>
#ifdef BOOST_THREAD_USES_CHRONO
#include <boost/chrono/system_clocks.hpp>
@@ -82,7 +81,7 @@ namespace boost
namespace detail
{
- struct future_object_base;
+ struct shared_state_base;
struct tss_cleanup_function;
struct thread_exit_callback_node;
struct tss_data_node
@@ -121,7 +120,7 @@ namespace boost
> notify_list_t;
notify_list_t notify;
- typedef std::vector<shared_ptr<future_object_base> > async_states_t;
+ typedef std::vector<shared_ptr<shared_state_base> > async_states_t;
async_states_t async_states_;
//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
@@ -154,7 +153,7 @@ namespace boost
notify.push_back(std::pair<condition_variable*, mutex*>(cv, m));
}
- void make_ready_at_thread_exit(shared_ptr<future_object_base> as)
+ void make_ready_at_thread_exit(shared_ptr<shared_state_base> as)
{
async_states_.push_back(as);
}
@@ -220,11 +219,11 @@ namespace boost
namespace this_thread
{
- namespace hiden
- {
- void BOOST_THREAD_DECL sleep_for(const timespec& ts);
- void BOOST_THREAD_DECL sleep_until(const timespec& ts);
- }
+ namespace hiden
+ {
+ void BOOST_THREAD_DECL sleep_for(const timespec& ts);
+ void BOOST_THREAD_DECL sleep_until(const timespec& ts);
+ }
#ifdef BOOST_THREAD_USES_CHRONO
#ifdef BOOST_THREAD_SLEEP_FOR_IS_STEADY
@@ -237,6 +236,27 @@ namespace boost
#endif
#endif // BOOST_THREAD_USES_CHRONO
+ namespace no_interruption_point
+ {
+ namespace hiden
+ {
+ void BOOST_THREAD_DECL sleep_for(const timespec& ts);
+ void BOOST_THREAD_DECL sleep_until(const timespec& ts);
+ }
+
+ #ifdef BOOST_THREAD_USES_CHRONO
+ #ifdef BOOST_THREAD_SLEEP_FOR_IS_STEADY
+
+ inline
+ void BOOST_SYMBOL_VISIBLE sleep_for(const chrono::nanoseconds& ns)
+ {
+ return boost::this_thread::hiden::sleep_for(boost::detail::to_timespec(ns));
+ }
+ #endif
+ #endif // BOOST_THREAD_USES_CHRONO
+
+ } // no_interruption_point
+
void BOOST_THREAD_DECL yield() BOOST_NOEXCEPT;
#if defined BOOST_THREAD_USES_DATETIME
diff --git a/3party/boost/boost/thread/scoped_thread.hpp b/3party/boost/boost/thread/scoped_thread.hpp
index 3f43d46936..ae0d1efc53 100644
--- a/3party/boost/boost/thread/scoped_thread.hpp
+++ b/3party/boost/boost/thread/scoped_thread.hpp
@@ -47,14 +47,13 @@ namespace boost
*
*/
#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
- template <class F, class ...Args>
- explicit strict_scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(Args)... args,
- typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0) :
+ template <class F, class ...Args, typename = typename disable_if<is_same<typename decay<F>::type, thread>, void* >::type>
+ explicit strict_scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(Args)... args) :
t_(boost::forward<F>(f), boost::forward<Args>(args)...) {}
#else
template <class F>
explicit strict_scoped_thread(BOOST_THREAD_FWD_REF(F) f,
- typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0) :
+ typename disable_if<is_same<typename decay<F>::type, thread>, void* >::type=0) :
t_(boost::forward<F>(f)) {}
template <class F, class A1>
strict_scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1) :
@@ -138,14 +137,13 @@ namespace boost
*/
#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
- template <class F, class ...Args>
- explicit scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(Args)... args,
- typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0) :
+ template <class F, class ...Args, typename = typename disable_if<is_same<typename decay<F>::type, thread>, void* >::type>
+ explicit scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(Args)... args) :
t_(boost::forward<F>(f), boost::forward<Args>(args)...) {}
#else
template <class F>
explicit scoped_thread(BOOST_THREAD_FWD_REF(F) f,
- typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0) :
+ typename disable_if<is_same<typename decay<F>::type, thread>, void* >::type=0) :
t_(boost::forward<F>(f)) {}
template <class F, class A1>
scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1) :
@@ -179,7 +177,7 @@ namespace boost
* Move constructor.
*/
scoped_thread(BOOST_RV_REF(scoped_thread) x) BOOST_NOEXCEPT :
- t_(boost::move(x.t_))
+ t_(boost::move(BOOST_THREAD_RV(x).t_))
{}
/**
@@ -199,7 +197,7 @@ namespace boost
*/
scoped_thread& operator=(BOOST_RV_REF(scoped_thread) x)
{
- t_ = boost::move(x.t_);
+ t_ = boost::move(BOOST_THREAD_RV(x).t_);
return *this;
}
@@ -263,11 +261,17 @@ namespace boost
}
#endif
- static unsigned hardware_concurrency()BOOST_NOEXCEPT
+ static unsigned hardware_concurrency() BOOST_NOEXCEPT
{
return thread::hardware_concurrency();
}
+#ifdef BOOST_THREAD_PROVIDES_PHYSICAL_CONCURRENCY
+ static unsigned physical_concurrency() BOOST_NOEXCEPT
+ {
+ return thread::physical_concurrency();
+ }
+#endif
};
/**
diff --git a/3party/boost/boost/thread/sync_bounded_queue.hpp b/3party/boost/boost/thread/sync_bounded_queue.hpp
index ff1928fb56..3e3958dae6 100644
--- a/3party/boost/boost/thread/sync_bounded_queue.hpp
+++ b/3party/boost/boost/thread/sync_bounded_queue.hpp
@@ -16,9 +16,10 @@
#include <boost/thread/mutex.hpp>
#include <boost/thread/detail/move.hpp>
#include <boost/throw_exception.hpp>
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
#include <boost/smart_ptr/shared_ptr.hpp>
#include <boost/smart_ptr/make_shared.hpp>
-
+#endif
#include <boost/config/abi_prefix.hpp>
namespace boost
@@ -28,10 +29,14 @@ namespace boost
{ success = 0, empty, full, closed, busy }
BOOST_SCOPED_ENUM_DECLARE_END(queue_op_status)
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
struct no_block_tag{};
BOOST_CONSTEXPR_OR_CONST no_block_tag no_block = {};
+#endif
- struct sync_queue_is_closed : std::exception {};
+ struct sync_queue_is_closed : std::exception
+ {
+ };
template <typename ValueType>
class sync_bounded_queue
@@ -48,31 +53,49 @@ namespace boost
~sync_bounded_queue();
// Observers
- bool empty() const;
- bool full() const;
- size_type capacity() const;
- size_type size() const;
- bool closed() const;
+ inline bool empty() const;
+ inline bool full() const;
+ inline size_type capacity() const;
+ inline size_type size() const;
+ inline bool closed() const;
// Modifiers
- void close();
-
- void push(const value_type& x);
- void push(BOOST_THREAD_RV_REF(value_type) x);
- bool try_push(const value_type& x);
- bool try_push(BOOST_THREAD_RV_REF(value_type) x);
- bool try_push(no_block_tag, const value_type& x);
- bool try_push(no_block_tag, BOOST_THREAD_RV_REF(value_type) x);
+ inline void close();
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline void push(const value_type& x);
+ inline void push(BOOST_THREAD_RV_REF(value_type) x);
+ inline bool try_push(const value_type& x);
+ inline bool try_push(BOOST_THREAD_RV_REF(value_type) x);
+ inline bool try_push(no_block_tag, const value_type& x);
+ inline bool try_push(no_block_tag, BOOST_THREAD_RV_REF(value_type) x);
+#endif
+ inline void push_back(const value_type& x);
+ inline void push_back(BOOST_THREAD_RV_REF(value_type) x);
+ inline queue_op_status try_push_back(const value_type& x);
+ inline queue_op_status try_push_back(BOOST_THREAD_RV_REF(value_type) x);
+ inline queue_op_status nonblocking_push_back(const value_type& x);
+ inline queue_op_status nonblocking_push_back(BOOST_THREAD_RV_REF(value_type) x);
+ inline queue_op_status wait_push_back(const value_type& x);
+ inline queue_op_status wait_push_back(BOOST_THREAD_RV_REF(value_type) x);
// Observers/Modifiers
- void pull(value_type&);
- void pull(ValueType& elem, bool & closed);
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline void pull(value_type&);
// enable_if is_nothrow_copy_movable<value_type>
- value_type pull();
- shared_ptr<ValueType> ptr_pull();
- bool try_pull(value_type&);
- bool try_pull(no_block_tag,value_type&);
- shared_ptr<ValueType> try_pull();
+ inline value_type pull();
+ inline shared_ptr<ValueType> ptr_pull();
+ inline bool try_pull(value_type&);
+ inline bool try_pull(no_block_tag,value_type&);
+ inline shared_ptr<ValueType> try_pull();
+#endif
+ inline void pull_front(value_type&);
+ // enable_if is_nothrow_copy_movable<value_type>
+ inline value_type pull_front();
+ inline queue_op_status try_pull_front(value_type&);
+ inline queue_op_status nonblocking_pull_front(value_type&);
+
+ inline queue_op_status wait_pull_front(ValueType& elem);
private:
mutable mutex mtx_;
@@ -86,42 +109,61 @@ namespace boost
size_type capacity_;
bool closed_;
- size_type inc(size_type idx) const BOOST_NOEXCEPT
+ inline size_type inc(size_type idx) const BOOST_NOEXCEPT
{
return (idx + 1) % capacity_;
}
- bool empty(unique_lock<mutex>& ) const BOOST_NOEXCEPT
+ inline bool empty(unique_lock<mutex>& ) const BOOST_NOEXCEPT
{
return in_ == out_;
}
- bool empty(lock_guard<mutex>& ) const BOOST_NOEXCEPT
+ inline bool empty(lock_guard<mutex>& ) const BOOST_NOEXCEPT
{
return in_ == out_;
}
- size_type capacity(lock_guard<mutex>& ) const BOOST_NOEXCEPT
+ inline bool full(unique_lock<mutex>& ) const BOOST_NOEXCEPT
+ {
+ return (inc(in_) == out_);
+ }
+ inline bool full(lock_guard<mutex>& ) const BOOST_NOEXCEPT
+ {
+ return (inc(in_) == out_);
+ }
+ inline size_type capacity(lock_guard<mutex>& ) const BOOST_NOEXCEPT
{
- return capacity;
+ return capacity_-1;
}
- size_type size(lock_guard<mutex>& ) const BOOST_NOEXCEPT
+ inline size_type size(lock_guard<mutex>& lk) const BOOST_NOEXCEPT
{
- return ((out_+capacity_-in_) % capacity_)-1;
+ if (full(lk)) return capacity(lk);
+ return ((out_+capacity(lk)-in_) % capacity(lk));
}
- void throw_if_closed(unique_lock<mutex>&);
+ inline void throw_if_closed(unique_lock<mutex>&);
+ inline bool closed(unique_lock<mutex>&) const;
- bool try_pull(value_type& x, unique_lock<mutex>& lk);
- bool try_push(const value_type& x, unique_lock<mutex>& lk);
- bool try_push(BOOST_THREAD_RV_REF(value_type) x, unique_lock<mutex>& lk);
- shared_ptr<value_type> try_pull(unique_lock<mutex>& lk);
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline bool try_pull(value_type& x, unique_lock<mutex>& lk);
+ inline shared_ptr<value_type> try_pull(unique_lock<mutex>& lk);
+ inline bool try_push(const value_type& x, unique_lock<mutex>& lk);
+ inline bool try_push(BOOST_THREAD_RV_REF(value_type) x, unique_lock<mutex>& lk);
+#endif
+ inline queue_op_status try_pull_front(value_type& x, unique_lock<mutex>& lk);
+ inline queue_op_status try_push_back(const value_type& x, unique_lock<mutex>& lk);
+ inline queue_op_status try_push_back(BOOST_THREAD_RV_REF(value_type) x, unique_lock<mutex>& lk);
+
+ inline queue_op_status wait_pull_front(value_type& x, unique_lock<mutex>& lk);
+ inline queue_op_status wait_push_back(const value_type& x, unique_lock<mutex>& lk);
+ inline queue_op_status wait_push_back(BOOST_THREAD_RV_REF(value_type) x, unique_lock<mutex>& lk);
- void wait_until_not_empty(unique_lock<mutex>& lk);
- void wait_until_not_empty(unique_lock<mutex>& lk, bool&);
- size_type wait_until_not_full(unique_lock<mutex>& lk);
- size_type wait_until_not_full(unique_lock<mutex>& lk, bool&);
+ inline void wait_until_not_empty(unique_lock<mutex>& lk);
+ inline void wait_until_not_empty(unique_lock<mutex>& lk, bool&);
+ inline size_type wait_until_not_full(unique_lock<mutex>& lk);
+ inline size_type wait_until_not_full(unique_lock<mutex>& lk, bool&);
- void notify_not_empty_if_needed(unique_lock<mutex>& lk)
+ inline void notify_not_empty_if_needed(unique_lock<mutex>& lk)
{
if (waiting_empty_ > 0)
{
@@ -130,7 +172,7 @@ namespace boost
not_empty_.notify_one();
}
}
- void notify_not_full_if_needed(unique_lock<mutex>& lk)
+ inline void notify_not_full_if_needed(unique_lock<mutex>& lk)
{
if (waiting_full_ > 0)
{
@@ -140,40 +182,59 @@ namespace boost
}
}
- void pull(value_type& elem, unique_lock<mutex>& lk)
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline void pull(value_type& elem, unique_lock<mutex>& lk)
{
elem = boost::move(data_[out_]);
out_ = inc(out_);
notify_not_full_if_needed(lk);
}
- boost::shared_ptr<value_type> ptr_pull(unique_lock<mutex>& lk)
+ inline value_type pull(unique_lock<mutex>& lk)
+ {
+ value_type elem = boost::move(data_[out_]);
+ out_ = inc(out_);
+ notify_not_full_if_needed(lk);
+ return boost::move(elem);
+ }
+ inline boost::shared_ptr<value_type> ptr_pull(unique_lock<mutex>& lk)
{
shared_ptr<value_type> res = make_shared<value_type>(boost::move(data_[out_]));
out_ = inc(out_);
notify_not_full_if_needed(lk);
return res;
}
+#endif
+ inline void pull_front(value_type& elem, unique_lock<mutex>& lk)
+ {
+ elem = boost::move(data_[out_]);
+ out_ = inc(out_);
+ notify_not_full_if_needed(lk);
+ }
+ inline value_type pull_front(unique_lock<mutex>& lk)
+ {
+ value_type elem = boost::move(data_[out_]);
+ out_ = inc(out_);
+ notify_not_full_if_needed(lk);
+ return boost::move(elem);
+ }
-
- void set_in(size_type in, unique_lock<mutex>& lk)
+ inline void set_in(size_type in, unique_lock<mutex>& lk)
{
in_ = in;
notify_not_empty_if_needed(lk);
}
- void push_at(const value_type& elem, size_type in_p_1, unique_lock<mutex>& lk)
+ inline void push_at(const value_type& elem, size_type in_p_1, unique_lock<mutex>& lk)
{
data_[in_] = elem;
set_in(in_p_1, lk);
}
- void push_at(BOOST_THREAD_RV_REF(value_type) elem, size_type in_p_1, unique_lock<mutex>& lk)
+ inline void push_at(BOOST_THREAD_RV_REF(value_type) elem, size_type in_p_1, unique_lock<mutex>& lk)
{
data_[in_] = boost::move(elem);
set_in(in_p_1, lk);
}
-
-
};
template <typename ValueType>
@@ -233,6 +294,11 @@ namespace boost
lock_guard<mutex> lk(mtx_);
return closed_;
}
+ template <typename ValueType>
+ bool sync_bounded_queue<ValueType>::closed(unique_lock<mutex>& ) const
+ {
+ return closed_;
+ }
template <typename ValueType>
bool sync_bounded_queue<ValueType>::empty() const
@@ -261,7 +327,7 @@ namespace boost
return size(lk);
}
-
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
bool sync_bounded_queue<ValueType>::try_pull(ValueType& elem, unique_lock<mutex>& lk)
{
@@ -283,53 +349,61 @@ namespace boost
}
return ptr_pull(lk);
}
-
template <typename ValueType>
bool sync_bounded_queue<ValueType>::try_pull(ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
return try_pull(elem, lk);
- }
- catch (...)
+ }
+#endif
+
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::try_pull_front(ValueType& elem, unique_lock<mutex>& lk)
+ {
+ if (empty(lk))
{
- close();
- throw;
+ if (closed(lk)) return queue_op_status::closed;
+ return queue_op_status::empty;
}
+ pull_front(elem, lk);
+ return queue_op_status::success;
}
template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::try_pull_front(ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return try_pull_front(elem, lk);
+ }
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ template <typename ValueType>
bool sync_bounded_queue<ValueType>::try_pull(no_block_tag,ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_, try_to_lock);
if (!lk.owns_lock())
{
return false;
}
return try_pull(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
}
template <typename ValueType>
boost::shared_ptr<ValueType> sync_bounded_queue<ValueType>::try_pull()
{
- try
- {
unique_lock<mutex> lk(mtx_);
return try_pull(lk);
- }
- catch (...)
- {
- close();
- throw;
- }
+ }
+#endif
+
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::nonblocking_pull_front(ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_, try_to_lock);
+ if (!lk.owns_lock())
+ {
+ return queue_op_status::busy;
+ }
+ return try_pull_front(elem, lk);
}
template <typename ValueType>
@@ -364,71 +438,75 @@ namespace boost
}
}
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
void sync_bounded_queue<ValueType>::pull(ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
wait_until_not_empty(lk);
pull(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
- }
- template <typename ValueType>
- void sync_bounded_queue<ValueType>::pull(ValueType& elem, bool & closed)
- {
- try
- {
- unique_lock<mutex> lk(mtx_);
- wait_until_not_empty(lk, closed);
- if (closed) {return;}
- pull(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
}
+// template <typename ValueType>
+// void sync_bounded_queue<ValueType>::pull(ValueType& elem, bool & closed)
+// {
+// unique_lock<mutex> lk(mtx_);
+// wait_until_not_empty(lk, closed);
+// if (closed) {return;}
+// pull(elem, lk);
+// }
// enable if ValueType is nothrow movable
template <typename ValueType>
ValueType sync_bounded_queue<ValueType>::pull()
{
- try
- {
- value_type elem;
- pull(elem);
- return boost::move(elem);
- }
- catch (...)
- {
- close();
- throw;
- }
+ unique_lock<mutex> lk(mtx_);
+ wait_until_not_empty(lk);
+ return pull(lk);
}
template <typename ValueType>
boost::shared_ptr<ValueType> sync_bounded_queue<ValueType>::ptr_pull()
{
- try
- {
unique_lock<mutex> lk(mtx_);
wait_until_not_empty(lk);
return ptr_pull(lk);
- }
- catch (...)
- {
- close();
- throw;
- }
+ }
+
+#endif
+
+ template <typename ValueType>
+ void sync_bounded_queue<ValueType>::pull_front(ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ wait_until_not_empty(lk);
+ pull_front(elem, lk);
+ }
+
+ // enable if ValueType is nothrow movable
+ template <typename ValueType>
+ ValueType sync_bounded_queue<ValueType>::pull_front()
+ {
+ unique_lock<mutex> lk(mtx_);
+ wait_until_not_empty(lk);
+ return pull_front(lk);
}
template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::wait_pull_front(ValueType& elem, unique_lock<mutex>& lk)
+ {
+ if (empty(lk) && closed(lk)) {return queue_op_status::closed;}
+ wait_until_not_empty(lk);
+ pull_front(elem, lk);
+ return queue_op_status::success;
+ }
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::wait_pull_front(ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return wait_pull_front(elem, lk);
+ }
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ template <typename ValueType>
bool sync_bounded_queue<ValueType>::try_push(const ValueType& elem, unique_lock<mutex>& lk)
{
throw_if_closed(lk);
@@ -440,38 +518,67 @@ namespace boost
push_at(elem, in_p_1, lk);
return true;
}
-
template <typename ValueType>
bool sync_bounded_queue<ValueType>::try_push(const ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
return try_push(elem, lk);
- }
- catch (...)
+ }
+
+#endif
+
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::try_push_back(const ValueType& elem, unique_lock<mutex>& lk)
+ {
+ if (closed(lk)) return queue_op_status::closed;
+ size_type in_p_1 = inc(in_);
+ if (in_p_1 == out_) // full()
{
- close();
- throw;
+ return queue_op_status::full;
}
+ push_at(elem, in_p_1, lk);
+ return queue_op_status::success;
}
template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::try_push_back(const ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return try_push_back(elem, lk);
+ }
+
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::wait_push_back(const ValueType& elem, unique_lock<mutex>& lk)
+ {
+ if (closed(lk)) return queue_op_status::closed;
+ push_at(elem, wait_until_not_full(lk), lk);
+ return queue_op_status::success;
+ }
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::wait_push_back(const ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return wait_push_back(elem, lk);
+ }
+
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ template <typename ValueType>
bool sync_bounded_queue<ValueType>::try_push(no_block_tag, const ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_, try_to_lock);
if (!lk.owns_lock()) return false;
return try_push(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
}
+#endif
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::nonblocking_push_back(const ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_, try_to_lock);
+ if (!lk.owns_lock()) return queue_op_status::busy;
+ return try_push_back(elem, lk);
+ }
template <typename ValueType>
typename sync_bounded_queue<ValueType>::size_type sync_bounded_queue<ValueType>::wait_until_not_full(unique_lock<mutex>& lk)
@@ -489,21 +596,22 @@ namespace boost
}
}
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
void sync_bounded_queue<ValueType>::push(const ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
push_at(elem, wait_until_not_full(lk), lk);
- }
- catch (...)
- {
- close();
- throw;
- }
+ }
+#endif
+ template <typename ValueType>
+ void sync_bounded_queue<ValueType>::push_back(const ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ push_at(elem, wait_until_not_full(lk), lk);
}
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
bool sync_bounded_queue<ValueType>::try_push(BOOST_THREAD_RV_REF(ValueType) elem, unique_lock<mutex>& lk)
{
@@ -520,70 +628,101 @@ namespace boost
template <typename ValueType>
bool sync_bounded_queue<ValueType>::try_push(BOOST_THREAD_RV_REF(ValueType) elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
- return try_push(elem, lk);
- }
- catch (...)
+ return try_push(boost::move(elem), lk);
+ }
+#endif
+
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::try_push_back(BOOST_THREAD_RV_REF(ValueType) elem, unique_lock<mutex>& lk)
+ {
+ if (closed(lk)) return queue_op_status::closed;
+ size_type in_p_1 = inc(in_);
+ if (in_p_1 == out_) // full()
{
- close();
- throw;
+ return queue_op_status::full;
}
+ push_at(boost::move(elem), in_p_1, lk);
+ return queue_op_status::success;
+ }
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::try_push_back(BOOST_THREAD_RV_REF(ValueType) elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return try_push_back(boost::move(elem), lk);
+ }
+
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::wait_push_back(BOOST_THREAD_RV_REF(ValueType) elem, unique_lock<mutex>& lk)
+ {
+ if (closed(lk)) return queue_op_status::closed;
+ push_at(boost::move(elem), wait_until_not_full(lk), lk);
+ return queue_op_status::success;
+ }
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::wait_push_back(BOOST_THREAD_RV_REF(ValueType) elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return try_push_back(boost::move(elem), lk);
}
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
bool sync_bounded_queue<ValueType>::try_push(no_block_tag, BOOST_THREAD_RV_REF(ValueType) elem)
{
- try
- {
unique_lock<mutex> lk(mtx_, try_to_lock);
if (!lk.owns_lock())
{
return false;
}
- return try_push(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
+ return try_push(boost::move(elem), lk);
+ }
+#endif
+ template <typename ValueType>
+ queue_op_status sync_bounded_queue<ValueType>::nonblocking_push_back(BOOST_THREAD_RV_REF(ValueType) elem)
+ {
+ unique_lock<mutex> lk(mtx_, try_to_lock);
+ if (!lk.owns_lock())
+ {
+ return queue_op_status::busy;
+ }
+ return try_push_back(boost::move(elem), lk);
}
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
void sync_bounded_queue<ValueType>::push(BOOST_THREAD_RV_REF(ValueType) elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
- push_at(elem, wait_until_not_full(lk), lk);
- }
- catch (...)
- {
- close();
- throw;
- }
+ push_at(boost::move(elem), wait_until_not_full(lk), lk);
+ }
+#endif
+ template <typename ValueType>
+ void sync_bounded_queue<ValueType>::push_back(BOOST_THREAD_RV_REF(ValueType) elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ push_at(boost::move(elem), wait_until_not_full(lk), lk);
}
template <typename ValueType>
sync_bounded_queue<ValueType>& operator<<(sync_bounded_queue<ValueType>& sbq, BOOST_THREAD_RV_REF(ValueType) elem)
{
- sbq.push(boost::forward<ValueType>(elem));
+ sbq.push_back(boost::move(elem));
return sbq;
}
template <typename ValueType>
sync_bounded_queue<ValueType>& operator<<(sync_bounded_queue<ValueType>& sbq, ValueType const&elem)
{
- sbq.push(elem);
+ sbq.push_back(elem);
return sbq;
}
template <typename ValueType>
sync_bounded_queue<ValueType>& operator>>(sync_bounded_queue<ValueType>& sbq, ValueType &elem)
{
- sbq.pull(elem);
+ sbq.pull_front(elem);
return sbq;
}
diff --git a/3party/boost/boost/thread/sync_queue.hpp b/3party/boost/boost/thread/sync_queue.hpp
index 8a529a646a..489cd25207 100644
--- a/3party/boost/boost/thread/sync_queue.hpp
+++ b/3party/boost/boost/thread/sync_queue.hpp
@@ -20,88 +20,123 @@
#include <boost/smart_ptr/make_shared.hpp>
#include <boost/thread/sync_bounded_queue.hpp>
-#include <boost/container/deque.hpp>
+#include <boost/thread/csbl/deque.hpp>
#include <boost/config/abi_prefix.hpp>
namespace boost
{
-
template <typename ValueType>
class sync_queue
{
public:
typedef ValueType value_type;
+ typedef csbl::deque<ValueType> underlying_queue_type;
typedef std::size_t size_type;
+ typedef queue_op_status op_status;
// Constructors/Assignment/Destructors
BOOST_THREAD_NO_COPYABLE(sync_queue)
- sync_queue();
- template <typename Range>
- explicit sync_queue(Range range);
- ~sync_queue();
+ inline sync_queue();
+ //template <typename Range>
+ //inline explicit sync_queue(Range range);
+ inline ~sync_queue();
// Observers
- bool empty() const;
- bool full() const;
- size_type size() const;
- bool closed() const;
+ inline bool empty() const;
+ inline bool full() const;
+ inline size_type size() const;
+ inline bool closed() const;
// Modifiers
- void close();
+ inline void close();
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline void push(const value_type& x);
+ inline bool try_push(const value_type& x);
+ inline bool try_push(no_block_tag, const value_type& x);
+ inline void push(BOOST_THREAD_RV_REF(value_type) x);
+ inline bool try_push(BOOST_THREAD_RV_REF(value_type) x);
+ inline bool try_push(no_block_tag, BOOST_THREAD_RV_REF(value_type) x);
+#endif
+ inline void push_back(const value_type& x);
+ inline queue_op_status try_push_back(const value_type& x);
+ inline queue_op_status nonblocking_push_back(const value_type& x);
+ inline queue_op_status wait_push_back(const value_type& x);
+ inline void push_back(BOOST_THREAD_RV_REF(value_type) x);
+ inline queue_op_status try_push_back(BOOST_THREAD_RV_REF(value_type) x);
+ inline queue_op_status nonblocking_push_back(BOOST_THREAD_RV_REF(value_type) x);
+ inline queue_op_status wait_push_back(BOOST_THREAD_RV_REF(value_type) x);
- void push(const value_type& x);
- void push(BOOST_THREAD_RV_REF(value_type) x);
- bool try_push(const value_type& x);
- bool try_push(BOOST_THREAD_RV_REF(value_type) x);
- bool try_push(no_block_tag, const value_type& x);
- bool try_push(no_block_tag, BOOST_THREAD_RV_REF(value_type) x);
// Observers/Modifiers
- void pull(value_type&);
- void pull(ValueType& elem, bool & closed);
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline void pull(value_type&);
+ inline void pull(ValueType& elem, bool & closed);
+ // enable_if is_nothrow_copy_movable<value_type>
+ inline value_type pull();
+ inline shared_ptr<ValueType> ptr_pull();
+#endif
+ inline void pull_front(value_type&);
// enable_if is_nothrow_copy_movable<value_type>
- value_type pull();
- shared_ptr<ValueType> ptr_pull();
- bool try_pull(value_type&);
- bool try_pull(no_block_tag,value_type&);
- shared_ptr<ValueType> try_pull();
+ inline value_type pull_front();
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline bool try_pull(value_type&);
+ inline bool try_pull(no_block_tag,value_type&);
+ inline shared_ptr<ValueType> try_pull();
+#endif
+ inline queue_op_status try_pull_front(value_type&);
+ inline queue_op_status nonblocking_pull_front(value_type&);
+ inline queue_op_status wait_pull_front(ValueType& elem);
+ inline underlying_queue_type underlying_queue() {
+ lock_guard<mutex> lk(mtx_);
+ return boost::move(data_);
+ }
private:
mutable mutex mtx_;
condition_variable not_empty_;
size_type waiting_empty_;
- boost::container::deque<ValueType> data_;
+ underlying_queue_type data_;
bool closed_;
- bool empty(unique_lock<mutex>& ) const BOOST_NOEXCEPT
+ inline bool empty(unique_lock<mutex>& ) const BOOST_NOEXCEPT
{
return data_.empty();
}
- bool empty(lock_guard<mutex>& ) const BOOST_NOEXCEPT
+ inline bool empty(lock_guard<mutex>& ) const BOOST_NOEXCEPT
{
return data_.empty();
}
- size_type size(lock_guard<mutex>& ) const BOOST_NOEXCEPT
+ inline size_type size(lock_guard<mutex>& ) const BOOST_NOEXCEPT
{
return data_.size();
}
- void throw_if_closed(unique_lock<mutex>&);
-
- bool try_pull(value_type& x, unique_lock<mutex>& lk);
- bool try_push(const value_type& x, unique_lock<mutex>& lk);
- bool try_push(BOOST_THREAD_RV_REF(value_type) x, unique_lock<mutex>& lk);
- shared_ptr<value_type> try_pull(unique_lock<mutex>& lk);
+ inline void throw_if_closed(unique_lock<mutex>&);
+ inline bool closed(unique_lock<mutex>& lk) const;
- void wait_until_not_empty(unique_lock<mutex>& lk);
- void wait_until_not_empty(unique_lock<mutex>& lk, bool&);
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline bool try_pull(value_type& x, unique_lock<mutex>& lk);
+ inline bool try_push(const value_type& x, unique_lock<mutex>& lk);
+ inline bool try_push(BOOST_THREAD_RV_REF(value_type) x, unique_lock<mutex>& lk);
+ inline shared_ptr<value_type> try_pull(unique_lock<mutex>& lk);
+#endif
+ inline queue_op_status try_pull_front(value_type& x, unique_lock<mutex>& lk);
+ inline queue_op_status wait_pull_front(value_type& x, unique_lock<mutex>& lk);
+ inline queue_op_status try_push_back(const value_type& x, unique_lock<mutex>& lk);
+ inline queue_op_status wait_push_back(const value_type& x, unique_lock<mutex>& lk);
+ inline queue_op_status try_push_back(BOOST_THREAD_RV_REF(value_type) x, unique_lock<mutex>& lk);
+ inline queue_op_status wait_push_back(BOOST_THREAD_RV_REF(value_type) x, unique_lock<mutex>& lk);
+ inline void wait_until_not_empty(unique_lock<mutex>& lk);
+ inline void wait_until_not_empty(unique_lock<mutex>& lk, bool&);
- void notify_not_empty_if_needed(unique_lock<mutex>& lk)
+ inline void notify_not_empty_if_needed(unique_lock<mutex>& lk)
{
if (waiting_empty_ > 0)
{
@@ -111,31 +146,61 @@ namespace boost
}
}
- void pull(value_type& elem, unique_lock<mutex>& )
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline void pull(value_type& elem, unique_lock<mutex>& )
{
elem = boost::move(data_.front());
data_.pop_front();
}
- boost::shared_ptr<value_type> ptr_pull(unique_lock<mutex>& )
+ inline value_type pull(unique_lock<mutex>& )
+ {
+ value_type e = boost::move(data_.front());
+ data_.pop_front();
+ return boost::move(e);
+ }
+ inline boost::shared_ptr<value_type> ptr_pull(unique_lock<mutex>& )
{
shared_ptr<value_type> res = make_shared<value_type>(boost::move(data_.front()));
data_.pop_front();
return res;
}
+#endif
+ inline void pull_front(value_type& elem, unique_lock<mutex>& )
+ {
+ elem = boost::move(data_.front());
+ data_.pop_front();
+ }
+ inline value_type pull_front(unique_lock<mutex>& )
+ {
+ value_type e = boost::move(data_.front());
+ data_.pop_front();
+ return boost::move(e);
+ }
- void push(const value_type& elem, unique_lock<mutex>& lk)
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ inline void push(const value_type& elem, unique_lock<mutex>& lk)
{
data_.push_back(elem);
notify_not_empty_if_needed(lk);
}
- void push(BOOST_THREAD_RV_REF(value_type) elem, unique_lock<mutex>& lk)
+ inline void push(BOOST_THREAD_RV_REF(value_type) elem, unique_lock<mutex>& lk)
{
- data_.push(boost::move(elem));
+ data_.push_back(boost::move(elem));
+ notify_not_empty_if_needed(lk);
+ }
+#endif
+ inline void push_back(const value_type& elem, unique_lock<mutex>& lk)
+ {
+ data_.push_back(elem);
notify_not_empty_if_needed(lk);
}
-
+ inline void push_back(BOOST_THREAD_RV_REF(value_type) elem, unique_lock<mutex>& lk)
+ {
+ data_.push_back(boost::move(elem));
+ notify_not_empty_if_needed(lk);
+ }
};
template <typename ValueType>
@@ -188,6 +253,11 @@ namespace boost
lock_guard<mutex> lk(mtx_);
return closed_;
}
+ template <typename ValueType>
+ bool sync_queue<ValueType>::closed(unique_lock<mutex>&) const
+ {
+ return closed_;
+ }
template <typename ValueType>
bool sync_queue<ValueType>::empty() const
@@ -209,6 +279,7 @@ namespace boost
}
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
bool sync_queue<ValueType>::try_pull(ValueType& elem, unique_lock<mutex>& lk)
{
@@ -230,53 +301,81 @@ namespace boost
}
return ptr_pull(lk);
}
-
+#endif
template <typename ValueType>
- bool sync_queue<ValueType>::try_pull(ValueType& elem)
+ queue_op_status sync_queue<ValueType>::try_pull_front(ValueType& elem, unique_lock<mutex>& lk)
{
- try
+ if (empty(lk))
{
- unique_lock<mutex> lk(mtx_);
- return try_pull(elem, lk);
+ if (closed(lk)) return queue_op_status::closed;
+ return queue_op_status::empty;
}
- catch (...)
+ pull_front(elem, lk);
+ return queue_op_status::success;
+ }
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::wait_pull_front(ValueType& elem, unique_lock<mutex>& lk)
+ {
+ if (empty(lk))
{
- close();
- throw;
+ if (closed(lk)) return queue_op_status::closed;
}
+ bool has_been_closed = false;
+ wait_until_not_empty(lk, has_been_closed);
+ if (has_been_closed) return queue_op_status::closed;
+ pull_front(elem, lk);
+ return queue_op_status::success;
+ }
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ template <typename ValueType>
+ bool sync_queue<ValueType>::try_pull(ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return try_pull(elem, lk);
+ }
+#endif
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::try_pull_front(ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return try_pull_front(elem, lk);
}
template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::wait_pull_front(ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return wait_pull_front(elem, lk);
+ }
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ template <typename ValueType>
bool sync_queue<ValueType>::try_pull(no_block_tag,ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_, try_to_lock);
if (!lk.owns_lock())
{
return false;
}
return try_pull(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
}
template <typename ValueType>
boost::shared_ptr<ValueType> sync_queue<ValueType>::try_pull()
{
- try
- {
unique_lock<mutex> lk(mtx_);
return try_pull(lk);
- }
- catch (...)
+ }
+#endif
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::nonblocking_pull_front(ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_, try_to_lock);
+ if (!lk.owns_lock())
{
- close();
- throw;
+ return queue_op_status::busy;
}
+ return try_pull_front(elem, lk);
}
template <typename ValueType>
@@ -309,73 +408,62 @@ namespace boost
++waiting_empty_;
not_empty_.wait(lk);
}
+ closed=false;
}
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
void sync_queue<ValueType>::pull(ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
wait_until_not_empty(lk);
pull(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
}
template <typename ValueType>
void sync_queue<ValueType>::pull(ValueType& elem, bool & closed)
{
- try
- {
unique_lock<mutex> lk(mtx_);
wait_until_not_empty(lk, closed);
if (closed) {return;}
pull(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
}
// enable if ValueType is nothrow movable
template <typename ValueType>
ValueType sync_queue<ValueType>::pull()
{
- try
- {
- value_type elem;
- pull(elem);
- return boost::move(elem);
- }
- catch (...)
- {
- close();
- throw;
- }
+ unique_lock<mutex> lk(mtx_);
+ wait_until_not_empty(lk);
+ return pull(lk);
}
template <typename ValueType>
boost::shared_ptr<ValueType> sync_queue<ValueType>::ptr_pull()
{
- try
- {
unique_lock<mutex> lk(mtx_);
wait_until_not_empty(lk);
return ptr_pull(lk);
- }
- catch (...)
- {
- close();
- throw;
- }
}
+#endif
template <typename ValueType>
+ void sync_queue<ValueType>::pull_front(ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ wait_until_not_empty(lk);
+ pull_front(elem, lk);
+ }
+
+ // enable if ValueType is nothrow movable
+ template <typename ValueType>
+ ValueType sync_queue<ValueType>::pull_front()
+ {
+ unique_lock<mutex> lk(mtx_);
+ wait_until_not_empty(lk);
+ return pull_front(lk);
+ }
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ template <typename ValueType>
bool sync_queue<ValueType>::try_push(const ValueType& elem, unique_lock<mutex>& lk)
{
throw_if_closed(lk);
@@ -386,126 +474,183 @@ namespace boost
template <typename ValueType>
bool sync_queue<ValueType>::try_push(const ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
return try_push(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
+ }
+#endif
+
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::try_push_back(const ValueType& elem, unique_lock<mutex>& lk)
+ {
+ if (closed(lk)) return queue_op_status::closed;
+ push_back(elem, lk);
+ return queue_op_status::success;
+ }
+
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::try_push_back(const ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return try_push_back(elem, lk);
+ }
+
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::wait_push_back(const ValueType& elem, unique_lock<mutex>& lk)
+ {
+ if (closed(lk)) return queue_op_status::closed;
+ push_back(elem, lk);
+ return queue_op_status::success;
+ }
+
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::wait_push_back(const ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return wait_push_back(elem, lk);
}
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
bool sync_queue<ValueType>::try_push(no_block_tag, const ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_, try_to_lock);
if (!lk.owns_lock()) return false;
return try_push(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
+ }
+#endif
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::nonblocking_push_back(const ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_, try_to_lock);
+ if (!lk.owns_lock()) return queue_op_status::busy;
+ return try_push_back(elem, lk);
}
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
void sync_queue<ValueType>::push(const ValueType& elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
throw_if_closed(lk);
push(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
}
+#endif
template <typename ValueType>
+ void sync_queue<ValueType>::push_back(const ValueType& elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ throw_if_closed(lk);
+ push_back(elem, lk);
+ }
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ template <typename ValueType>
bool sync_queue<ValueType>::try_push(BOOST_THREAD_RV_REF(ValueType) elem, unique_lock<mutex>& lk)
{
throw_if_closed(lk);
- push(boost::forward<ValueType>(elem), lk);
+ push(boost::move(elem), lk);
return true;
}
template <typename ValueType>
bool sync_queue<ValueType>::try_push(BOOST_THREAD_RV_REF(ValueType) elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
- return try_push(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
+ return try_push(boost::move(elem), lk);
}
+#endif
template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::try_push_back(BOOST_THREAD_RV_REF(ValueType) elem, unique_lock<mutex>& lk)
+ {
+ if (closed(lk)) return queue_op_status::closed;
+ push_back(boost::move(elem), lk);
+ return queue_op_status::success;
+ }
+
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::try_push_back(BOOST_THREAD_RV_REF(ValueType) elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return try_push_back(boost::move(elem), lk);
+ }
+
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::wait_push_back(BOOST_THREAD_RV_REF(ValueType) elem, unique_lock<mutex>& lk)
+ {
+ if (closed(lk)) return queue_op_status::closed;
+ push_back(boost::move(elem), lk);
+ return queue_op_status::success;
+ }
+
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::wait_push_back(BOOST_THREAD_RV_REF(ValueType) elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ return wait_push_back(boost::move(elem), lk);
+ }
+
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
+ template <typename ValueType>
bool sync_queue<ValueType>::try_push(no_block_tag, BOOST_THREAD_RV_REF(ValueType) elem)
{
- try
- {
unique_lock<mutex> lk(mtx_, try_to_lock);
if (!lk.owns_lock())
{
return false;
}
- return try_push(elem, lk);
- }
- catch (...)
+ return try_push(boost::move(elem), lk);
+ }
+#endif
+
+ template <typename ValueType>
+ queue_op_status sync_queue<ValueType>::nonblocking_push_back(BOOST_THREAD_RV_REF(ValueType) elem)
+ {
+ unique_lock<mutex> lk(mtx_, try_to_lock);
+ if (!lk.owns_lock())
{
- close();
- throw;
+ return queue_op_status::busy;
}
+ return try_push_back(boost::move(elem), lk);
}
+#ifndef BOOST_THREAD_QUEUE_DEPRECATE_OLD
template <typename ValueType>
void sync_queue<ValueType>::push(BOOST_THREAD_RV_REF(ValueType) elem)
{
- try
- {
unique_lock<mutex> lk(mtx_);
throw_if_closed(lk);
- push(elem, lk);
- }
- catch (...)
- {
- close();
- throw;
- }
+ push(boost::move(elem), lk);
+ }
+#endif
+
+ template <typename ValueType>
+ void sync_queue<ValueType>::push_back(BOOST_THREAD_RV_REF(ValueType) elem)
+ {
+ unique_lock<mutex> lk(mtx_);
+ throw_if_closed(lk);
+ push_back(boost::move(elem), lk);
}
template <typename ValueType>
sync_queue<ValueType>& operator<<(sync_queue<ValueType>& sbq, BOOST_THREAD_RV_REF(ValueType) elem)
{
- sbq.push(boost::forward<ValueType>(elem));
+ sbq.push_back(boost::move(elem));
return sbq;
}
template <typename ValueType>
sync_queue<ValueType>& operator<<(sync_queue<ValueType>& sbq, ValueType const&elem)
{
- sbq.push(elem);
+ sbq.push_back(elem);
return sbq;
}
template <typename ValueType>
sync_queue<ValueType>& operator>>(sync_queue<ValueType>& sbq, ValueType &elem)
{
- sbq.pull(elem);
+ sbq.pull_front(elem);
return sbq;
}
diff --git a/3party/boost/boost/thread/synchronized_value.hpp b/3party/boost/boost/thread/synchronized_value.hpp
index bff5a9d72d..e161063040 100644
--- a/3party/boost/boost/thread/synchronized_value.hpp
+++ b/3party/boost/boost/thread/synchronized_value.hpp
@@ -17,7 +17,7 @@
#include <boost/thread/lock_algorithms.hpp>
#include <boost/thread/lock_factories.hpp>
#include <boost/thread/strict_lock.hpp>
-#include <boost/utility/swap.hpp>
+#include <boost/core/swap.hpp>
#include <boost/utility/declval.hpp>
//#include <boost/type_traits.hpp>
//#include <boost/thread/detail/is_nothrow_default_constructible.hpp>
@@ -26,10 +26,12 @@
//#endif
#if ! defined(BOOST_THREAD_NO_SYNCHRONIZE)
-#include <tuple> // todo change to <boost/tuple.hpp> once Boost.Tuple or Boost.Fusion provides Move semantics.
+#include <tuple> // todo change to <boost/tuple.hpp> once Boost.Tuple or Boost.Fusion provides Move semantics on C++98 compilers.
#include <functional>
#endif
+#include <boost/utility/result_of.hpp>
+
#include <boost/config/abi_prefix.hpp>
namespace boost
@@ -470,8 +472,8 @@ namespace boost
*/
synchronized_value(BOOST_THREAD_RV_REF(synchronized_value) other)
{
- strict_lock<mutex_type> lk(other.mtx_);
- value_= boost::move(other.value_);
+ strict_lock<mutex_type> lk(BOOST_THREAD_RV(other).mtx_);
+ value_= boost::move(BOOST_THREAD_RV(other).value_);
}
// mutation
@@ -593,8 +595,6 @@ namespace boost
boost::swap(value_, rhs);
}
-
-
/**
* Essentially calling a method obj->foo(x, y, z) calls the method foo(x, y, z) inside a critical section as
* long-lived as the call itself.
@@ -614,13 +614,80 @@ namespace boost
}
/**
+ * Call function on a locked block.
+ *
+ * @requires fct(value_) is well formed.
+ *
+ * Example
+ * void fun(synchronized_value<vector<int>> & v) {
+ * v ( [](vector<int>> & vec)
+ * {
+ * vec.push_back(42);
+ * assert(vec.back() == 42);
+ * } );
+ * }
+ */
+ template <typename F>
+ inline
+ typename boost::result_of<F(value_type&)>::type
+ operator()(BOOST_THREAD_RV_REF(F) fct)
+ {
+ strict_lock<mutex_type> lk(mtx_);
+ return fct(value_);
+ }
+ template <typename F>
+ inline
+ typename boost::result_of<F(value_type const&)>::type
+ operator()(BOOST_THREAD_RV_REF(F) fct) const
+ {
+ strict_lock<mutex_type> lk(mtx_);
+ return fct(value_);
+ }
+
+
+#if defined BOOST_NO_CXX11_RVALUE_REFERENCES
+ template <typename F>
+ inline
+ typename boost::result_of<F(value_type&)>::type
+ operator()(F const & fct)
+ {
+ strict_lock<mutex_type> lk(mtx_);
+ return fct(value_);
+ }
+ template <typename F>
+ inline
+ typename boost::result_of<F(value_type const&)>::type
+ operator()(F const & fct) const
+ {
+ strict_lock<mutex_type> lk(mtx_);
+ return fct(value_);
+ }
+
+ template <typename R>
+ inline
+ R operator()(R(*fct)(value_type&))
+ {
+ strict_lock<mutex_type> lk(mtx_);
+ return fct(value_);
+ }
+ template <typename R>
+ inline
+ R operator()(R(*fct)(value_type const&)) const
+ {
+ strict_lock<mutex_type> lk(mtx_);
+ return fct(value_);
+ }
+#endif
+
+
+ /**
* The synchronize() factory make easier to lock on a scope.
* As discussed, operator-> can only lock over the duration of a call, so it is insufficient for complex operations.
* With synchronize() you get to lock the object in a scoped and to directly access the object inside that scope.
*
* Example
- * void fun(synchronized_value<vector<int>> & vec) {
- * auto&& vec=vec.synchronize();
+ * void fun(synchronized_value<vector<int>> & v) {
+ * auto&& vec=v.synchronize();
* vec.push_back(42);
* assert(vec.back() == 42);
* }
@@ -880,9 +947,9 @@ namespace boost
//Hash support
- template <class T> struct hash;
- template <typename T, typename L>
- struct hash<synchronized_value<T,L> >;
+// template <class T> struct hash;
+// template <typename T, typename L>
+// struct hash<synchronized_value<T,L> >;
// Comparison with T
template <typename T, typename L>
diff --git a/3party/boost/boost/thread/testable_mutex.hpp b/3party/boost/boost/thread/testable_mutex.hpp
index bd9ccbd78e..3c87f9349a 100644
--- a/3party/boost/boost/thread/testable_mutex.hpp
+++ b/3party/boost/boost/thread/testable_mutex.hpp
@@ -48,6 +48,7 @@ namespace boost
void lock()
{
+ BOOST_ASSERT(! is_locked_by_this_thread());
mtx_.lock();
id_ = this_thread::get_id();
}
@@ -61,6 +62,7 @@ namespace boost
bool try_lock()
{
+ BOOST_ASSERT(! is_locked_by_this_thread());
if (mtx_.try_lock())
{
id_ = this_thread::get_id();
@@ -75,6 +77,7 @@ namespace boost
template <class Rep, class Period>
bool try_lock_for(const chrono::duration<Rep, Period>& rel_time)
{
+ BOOST_ASSERT(! is_locked_by_this_thread());
if (mtx_.try_lock_for(rel_time))
{
id_ = this_thread::get_id();
@@ -88,6 +91,7 @@ namespace boost
template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time)
{
+ BOOST_ASSERT(! is_locked_by_this_thread());
if (mtx_.try_lock_until(abs_time))
{
id_ = this_thread::get_id();
diff --git a/3party/boost/boost/thread/thread_pool.hpp b/3party/boost/boost/thread/thread_pool.hpp
new file mode 100644
index 0000000000..4d2dcbea3a
--- /dev/null
+++ b/3party/boost/boost/thread/thread_pool.hpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2013 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)
+//
+// 2013/09 Vicente J. Botet Escriba
+// Adapt to boost from CCIA C++11 implementation
+// first implementation of a simple pool thread using a vector of threads and a sync_queue.
+
+#ifndef BOOST_THREAD_THREAD_POOL_HPP
+#define BOOST_THREAD_THREAD_POOL_HPP
+
+#include <boost/thread/executors/basic_thread_pool.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/user_scheduler.hpp b/3party/boost/boost/thread/user_scheduler.hpp
new file mode 100644
index 0000000000..6305b9e26c
--- /dev/null
+++ b/3party/boost/boost/thread/user_scheduler.hpp
@@ -0,0 +1,202 @@
+// Copyright (C) 2013 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)
+//
+// 2013/11 Vicente J. Botet Escriba
+// first implementation of a simple serial scheduler.
+
+#ifndef BOOST_THREAD_USER_SCHEDULER_HPP
+#define BOOST_THREAD_USER_SCHEDULER_HPP
+
+#include <boost/thread/detail/config.hpp>
+#include <boost/thread/detail/delete.hpp>
+#include <boost/thread/detail/move.hpp>
+#include <boost/thread/sync_queue.hpp>
+#include <boost/thread/detail/work.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+
+ class user_scheduler
+ {
+ /// type-erasure to store the works to do
+ typedef thread_detail::work work;
+
+ /// the thread safe work queue
+ sync_queue<work > work_queue;
+
+ public:
+ /**
+ * Effects: try to execute one task.
+ * Returns: whether a task has been executed.
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ bool try_executing_one()
+ {
+ work task;
+ try
+ {
+ if (work_queue.try_pull_front(task) == queue_op_status::success)
+ {
+ task();
+ return true;
+ }
+ return false;
+ }
+ catch (std::exception& )
+ {
+ return false;
+ }
+ catch (...)
+ {
+ return false;
+ }
+ }
+ private:
+ /**
+ * Effects: schedule one task or yields
+ * Throws: whatever the current task constructor throws or the task() throws.
+ */
+ void schedule_one_or_yield()
+ {
+ if ( ! try_executing_one())
+ {
+ this_thread::yield();
+ }
+ }
+
+
+ /**
+ * The main loop of the worker thread
+ */
+ void worker_thread()
+ {
+ while (!closed())
+ {
+ schedule_one_or_yield();
+ }
+ while (try_executing_one())
+ {
+ }
+ }
+
+ public:
+ /// user_scheduler is not copyable.
+ BOOST_THREAD_NO_COPYABLE(user_scheduler)
+
+ /**
+ * \b Effects: creates a thread pool that runs closures using one of its closure-executing methods.
+ *
+ * \b Throws: Whatever exception is thrown while initializing the needed resources.
+ */
+ user_scheduler()
+ {
+ }
+ /**
+ * \b Effects: Destroys the thread pool.
+ *
+ * \b Synchronization: The completion of all the closures happen before the completion of the \c user_scheduler destructor.
+ */
+ ~user_scheduler()
+ {
+ // signal to all the worker thread that there will be no more submissions.
+ close();
+ }
+
+ /**
+ * loop
+ */
+ void loop() { worker_thread(); }
+ /**
+ * \b Effects: close the \c user_scheduler for submissions.
+ * The loop will work until there is no more closures to run.
+ */
+ void close()
+ {
+ work_queue.close();
+ }
+
+ /**
+ * \b Returns: whether the pool is closed for submissions.
+ */
+ bool closed()
+ {
+ return work_queue.closed();
+ }
+
+ /**
+ * \b Requires: \c Closure is a model of \c Callable(void()) and a model of \c CopyConstructible/MoveConstructible.
+ *
+ * \b Effects: The specified \c closure will be scheduled for execution at some point in the future.
+ * If invoked closure throws an exception the \c user_scheduler will call \c std::terminate, as is the case with threads.
+ *
+ * \b Synchronization: completion of \c closure on a particular thread happens before destruction of thread's thread local variables.
+ *
+ * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
+ * Whatever exception that can be throw while storing the closure.
+ */
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ work w ((closure));
+ work_queue.push_back(boost::move(w));
+ //work_queue.push(work(closure)); // todo check why this doesn't work
+ }
+#endif
+ void submit(void (*closure)())
+ {
+ work w ((closure));
+ work_queue.push_back(boost::move(w));
+ //work_queue.push_back(work(closure)); // todo check why this doesn't work
+ }
+
+ template <typename Closure>
+ void submit(BOOST_THREAD_RV_REF(Closure) closure)
+ {
+ work w =boost::move(closure);
+ work_queue.push_back(boost::move(w));
+ //work_queue.push_back(work(boost::move(closure))); // todo check why this doesn't work
+ }
+
+ /**
+ * \b Requires: This must be called from an scheduled task.
+ *
+ * \b Effects: reschedule functions until pred()
+ */
+ template <typename Pred>
+ bool reschedule_until(Pred const& pred)
+ {
+ do {
+ if ( ! try_executing_one())
+ {
+ return false;
+ }
+ } while (! pred());
+ return true;
+ }
+ /**
+ * run queued closures
+ */
+ void run_queued_closures()
+ {
+ sync_queue<work>::underlying_queue_type q = work_queue.underlying_queue();
+ while (q.empty())
+ {
+ work task = q.front();
+ q.pop_front();
+ task();
+ }
+ }
+
+ };
+
+}
+
+#include <boost/config/abi_suffix.hpp>
+
+#endif
diff --git a/3party/boost/boost/thread/v2/shared_mutex.hpp b/3party/boost/boost/thread/v2/shared_mutex.hpp
index c81b1e0759..5acab4d8cd 100755
--- a/3party/boost/boost/thread/v2/shared_mutex.hpp
+++ b/3party/boost/boost/thread/v2/shared_mutex.hpp
@@ -179,15 +179,15 @@ namespace boost {
BOOST_THREAD_INLINE shared_mutex();
BOOST_THREAD_INLINE ~shared_mutex();
-#ifndef BOOST_NO_DELETED_FUNCTIONS
+#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS
shared_mutex(shared_mutex const&) = delete;
shared_mutex& operator=(shared_mutex const&) = delete;
-#else // BOOST_NO_DELETED_FUNCTIONS
+#else // BOOST_NO_CXX11_DELETED_FUNCTIONS
private:
shared_mutex(shared_mutex const&);
shared_mutex& operator=(shared_mutex const&);
public:
-#endif // BOOST_NO_DELETED_FUNCTIONS
+#endif // BOOST_NO_CXX11_DELETED_FUNCTIONS
// Exclusive ownership
@@ -381,15 +381,15 @@ namespace boost {
BOOST_THREAD_INLINE upgrade_mutex();
BOOST_THREAD_INLINE ~upgrade_mutex();
-#ifndef BOOST_NO_DELETED_FUNCTIONS
+#ifndef BOOST_CXX11_NO_DELETED_FUNCTIONS
upgrade_mutex(const upgrade_mutex&) = delete;
upgrade_mutex& operator=(const upgrade_mutex&) = delete;
-#else // BOOST_NO_DELETED_FUNCTIONS
+#else // BOOST_CXX11_NO_DELETED_FUNCTIONS
private:
upgrade_mutex(const upgrade_mutex&);
upgrade_mutex& operator=(const upgrade_mutex&);
public:
-#endif // BOOST_NO_DELETED_FUNCTIONS
+#endif // BOOST_CXX11_NO_DELETED_FUNCTIONS
// Exclusive ownership
diff --git a/3party/boost/boost/thread/v2/thread.hpp b/3party/boost/boost/thread/v2/thread.hpp
index 0d5088fc9f..181661a34e 100644
--- a/3party/boost/boost/thread/v2/thread.hpp
+++ b/3party/boost/boost/thread/v2/thread.hpp
@@ -18,7 +18,66 @@ namespace boost
{
namespace this_thread
{
+ namespace no_interruption_point
+ {
+#ifdef BOOST_THREAD_USES_CHRONO
+
+ template <class Clock, class Duration>
+ void sleep_until(const chrono::time_point<Clock, Duration>& t)
+ {
+ using namespace chrono;
+ mutex mut;
+ condition_variable cv;
+ unique_lock<mutex> lk(mut);
+ while (Clock::now() < t)
+ cv.wait_until(lk, t);
+ }
+
+#ifdef BOOST_THREAD_SLEEP_FOR_IS_STEADY
+
+ template <class Rep, class Period>
+ void sleep_for(const chrono::duration<Rep, Period>& d)
+ {
+ using namespace chrono;
+ if (d > duration<Rep, Period>::zero())
+ {
+ duration<long double> Max = nanoseconds::max BOOST_PREVENT_MACRO_SUBSTITUTION ();
+ nanoseconds ns;
+ if (d < Max)
+ {
+ ns = duration_cast<nanoseconds>(d);
+ if (ns < d)
+ ++ns;
+ }
+ else
+ ns = nanoseconds:: max BOOST_PREVENT_MACRO_SUBSTITUTION ();
+ sleep_for(ns);
+ }
+ }
+ template <class Duration>
+ inline BOOST_SYMBOL_VISIBLE
+ void sleep_until(const chrono::time_point<chrono::steady_clock, Duration>& t)
+ {
+ using namespace chrono;
+ sleep_for(t - steady_clock::now());
+ }
+#else
+ template <class Rep, class Period>
+ void sleep_for(const chrono::duration<Rep, Period>& d)
+ {
+ using namespace chrono;
+ if (d > duration<Rep, Period>::zero())
+ {
+ steady_clock::time_point c_timeout = steady_clock::now() + ceil<nanoseconds>(d);
+ sleep_until(c_timeout);
+ }
+ }
+
+#endif
+
+#endif
+ }
#ifdef BOOST_THREAD_USES_CHRONO
template <class Clock, class Duration>
diff --git a/3party/boost/boost/thread/win32/condition_variable.hpp b/3party/boost/boost/thread/win32/condition_variable.hpp
index 64a8160684..57aaf8c534 100644
--- a/3party/boost/boost/thread/win32/condition_variable.hpp
+++ b/3party/boost/boost/thread/win32/condition_variable.hpp
@@ -191,18 +191,17 @@ namespace boost
struct entry_manager
{
entry_ptr const entry;
+ boost::mutex& internal_mutex;
BOOST_THREAD_NO_COPYABLE(entry_manager)
- entry_manager(entry_ptr const& entry_):
- entry(entry_)
+ entry_manager(entry_ptr const& entry_, boost::mutex& mutex_):
+ entry(entry_), internal_mutex(mutex_)
{}
~entry_manager()
{
- //if(! entry->is_notified()) // several regression #7657
- {
+ boost::lock_guard<boost::mutex> internal_lock(internal_mutex);
entry->remove_waiter();
- }
}
list_entry* operator->()
@@ -218,7 +217,7 @@ namespace boost
{
relocker<lock_type> locker(lock);
- entry_manager entry(get_wait_entry());
+ entry_manager entry(get_wait_entry(), internal_mutex);
locker.unlock();
@@ -338,7 +337,16 @@ namespace boost
template<typename duration_type>
bool timed_wait(unique_lock<mutex>& m,duration_type const& wait_duration)
{
- return do_wait(m,wait_duration.total_milliseconds());
+ if (wait_duration.is_pos_infinity())
+ {
+ wait(m); // or do_wait(m,detail::timeout::sentinel());
+ return true;
+ }
+ if (wait_duration.is_special())
+ {
+ return true;
+ }
+ return do_wait(m,wait_duration.total_milliseconds());
}
template<typename predicate_type>
@@ -366,7 +374,11 @@ namespace boost
const chrono::time_point<Clock, Duration>& t)
{
using namespace chrono;
- do_wait(lock, ceil<milliseconds>(t-Clock::now()).count());
+ chrono::time_point<Clock, Duration> now = Clock::now();
+ if (t<=now) {
+ return cv_status::timeout;
+ }
+ do_wait(lock, ceil<milliseconds>(t-now).count());
return Clock::now() < t ? cv_status::no_timeout :
cv_status::timeout;
}
@@ -378,6 +390,10 @@ namespace boost
const chrono::duration<Rep, Period>& d)
{
using namespace chrono;
+ if (d<=chrono::duration<Rep, Period>::zero()) {
+ return cv_status::timeout;
+ }
+
steady_clock::time_point c_now = steady_clock::now();
do_wait(lock, ceil<milliseconds>(d).count());
return steady_clock::now() - c_now < d ? cv_status::no_timeout :
@@ -479,7 +495,11 @@ namespace boost
const chrono::time_point<Clock, Duration>& t)
{
using namespace chrono;
- do_wait(lock, ceil<milliseconds>(t-Clock::now()).count());
+ chrono::time_point<Clock, Duration> now = Clock::now();
+ if (t<=now) {
+ return cv_status::timeout;
+ }
+ do_wait(lock, ceil<milliseconds>(t-now).count());
return Clock::now() < t ? cv_status::no_timeout :
cv_status::timeout;
}
@@ -491,6 +511,9 @@ namespace boost
const chrono::duration<Rep, Period>& d)
{
using namespace chrono;
+ if (d<=chrono::duration<Rep, Period>::zero()) {
+ return cv_status::timeout;
+ }
steady_clock::time_point c_now = steady_clock::now();
do_wait(lock, ceil<milliseconds>(d).count());
return steady_clock::now() - c_now < d ? cv_status::no_timeout :
diff --git a/3party/boost/boost/thread/win32/mfc_thread_init.hpp b/3party/boost/boost/thread/win32/mfc_thread_init.hpp
index 24d0f97043..e866f8949f 100644
--- a/3party/boost/boost/thread/win32/mfc_thread_init.hpp
+++ b/3party/boost/boost/thread/win32/mfc_thread_init.hpp
@@ -9,33 +9,32 @@
// check if we use MFC
#ifdef _AFXDLL
-# if defined(_AFXEXT)
+# if defined(_AFXEXT)
// can't use ExtRawDllMain from afxdllx.h as it also defines the symbol _pRawDllMain
extern "C"
inline BOOL WINAPI ExtRawDllMain(HINSTANCE, DWORD dwReason, LPVOID)
{
- if (dwReason == DLL_PROCESS_ATTACH)
- {
- // save critical data pointers before running the constructors
- AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
- pModuleState->m_pClassInit = pModuleState->m_classList;
- pModuleState->m_pFactoryInit = pModuleState->m_factoryList;
- pModuleState->m_classList.m_pHead = NULL;
- pModuleState->m_factoryList.m_pHead = NULL;
- }
- return TRUE; // ok
+ if (dwReason == DLL_PROCESS_ATTACH)
+ {
+ // save critical data pointers before running the constructors
+ AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
+ pModuleState->m_pClassInit = pModuleState->m_classList;
+ pModuleState->m_pFactoryInit = pModuleState->m_factoryList;
+ pModuleState->m_classList.m_pHead = NULL;
+ pModuleState->m_factoryList.m_pHead = NULL;
+ }
+ return TRUE; // ok
}
extern "C" __declspec(selectany) BOOL (WINAPI * const _pRawDllMainOrig)(HANDLE, DWORD, LPVOID) = &ExtRawDllMain;
-# elif defined(_USRDLL)
+# elif defined(_USRDLL)
extern "C" BOOL WINAPI RawDllMain(HANDLE, DWORD dwReason, LPVOID);
extern "C" __declspec(selectany) BOOL (WINAPI * const _pRawDllMainOrig)(HANDLE, DWORD, LPVOID) = &RawDllMain;
-# endif
+# endif
#endif
-
#endif
diff --git a/3party/boost/boost/thread/win32/once.hpp b/3party/boost/boost/thread/win32/once.hpp
index 689b2c11ba..0ed56a5716 100644
--- a/3party/boost/boost/thread/win32/once.hpp
+++ b/3party/boost/boost/thread/win32/once.hpp
@@ -18,7 +18,7 @@
#include <boost/detail/interlocked.hpp>
#include <boost/thread/win32/thread_primitives.hpp>
#include <boost/thread/win32/interlocked_read.hpp>
-#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/core/no_exceptions_support.hpp>
#include <boost/thread/detail/move.hpp>
#include <boost/thread/detail/invoke.hpp>
@@ -227,7 +227,7 @@ namespace boost
}
}
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
//#if defined(BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR)
inline void call_once(once_flag& flag, void (*f)())
{
@@ -363,7 +363,7 @@ namespace boost
}
}
#else
-#ifndef BOOST_MSVC
+#if ! defined(BOOST_MSVC) && ! defined(BOOST_INTEL)
template<typename Function>
void call_once(once_flag& flag,Function f)
{
diff --git a/3party/boost/boost/thread/win32/thread_data.hpp b/3party/boost/boost/thread/win32/thread_data.hpp
index 09faff9d06..1d4f57278d 100644
--- a/3party/boost/boost/thread/win32/thread_data.hpp
+++ b/3party/boost/boost/thread/win32/thread_data.hpp
@@ -72,7 +72,7 @@ namespace boost
namespace detail
{
- struct future_object_base;
+ struct shared_state_base;
struct tss_cleanup_function;
struct thread_exit_callback_node;
struct tss_data_node
@@ -102,7 +102,7 @@ namespace boost
> notify_list_t;
notify_list_t notify;
- typedef std::vector<shared_ptr<future_object_base> > async_states_t;
+ typedef std::vector<shared_ptr<shared_state_base> > async_states_t;
async_states_t async_states_;
//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
// These data must be at the end so that the access to the other fields doesn't change
@@ -148,12 +148,12 @@ namespace boost
virtual void run()=0;
- void notify_all_at_thread_exit(condition_variable* cv, mutex* m)
+ virtual void notify_all_at_thread_exit(condition_variable* cv, mutex* m)
{
notify.push_back(std::pair<condition_variable*, mutex*>(cv, m));
}
- void make_ready_at_thread_exit(shared_ptr<future_object_base> as)
+ void make_ready_at_thread_exit(shared_ptr<shared_state_base> as)
{
async_states_.push_back(as);
}
@@ -173,14 +173,14 @@ namespace boost
static unsigned long const max_non_infinite_wait=0xfffffffe;
timeout(uintmax_t milliseconds_):
- start(win32::GetTickCount64()),
+ start(win32::GetTickCount64()()),
milliseconds(milliseconds_),
relative(true),
abs_time(boost::get_system_time())
{}
timeout(boost::system_time const& abs_time_):
- start(win32::GetTickCount64()),
+ start(win32::GetTickCount64()()),
milliseconds(0),
relative(false),
abs_time(abs_time_)
@@ -205,7 +205,7 @@ namespace boost
}
else if(relative)
{
- win32::ticks_type const now=win32::GetTickCount64();
+ win32::ticks_type const now=win32::GetTickCount64()();
win32::ticks_type const elapsed=now-start;
return remaining_time((elapsed<milliseconds)?(milliseconds-elapsed):0);
}
@@ -273,6 +273,33 @@ namespace boost
interruptible_wait(chrono::duration_cast<chrono::milliseconds>(ns).count());
}
#endif
+ namespace no_interruption_point
+ {
+ bool BOOST_THREAD_DECL non_interruptible_wait(detail::win32::handle handle_to_wait_for,detail::timeout target_time);
+ inline void non_interruptible_wait(uintmax_t milliseconds)
+ {
+ non_interruptible_wait(detail::win32::invalid_handle_value,milliseconds);
+ }
+ inline BOOST_SYMBOL_VISIBLE void non_interruptible_wait(system_time const& abs_time)
+ {
+ non_interruptible_wait(detail::win32::invalid_handle_value,abs_time);
+ }
+ template<typename TimeDuration>
+ inline BOOST_SYMBOL_VISIBLE void sleep(TimeDuration const& rel_time)
+ {
+ non_interruptible_wait(detail::pin_to_zero(rel_time.total_milliseconds()));
+ }
+ inline BOOST_SYMBOL_VISIBLE void sleep(system_time const& abs_time)
+ {
+ non_interruptible_wait(abs_time);
+ }
+#ifdef BOOST_THREAD_USES_CHRONO
+ inline void BOOST_SYMBOL_VISIBLE sleep_for(const chrono::nanoseconds& ns)
+ {
+ non_interruptible_wait(chrono::duration_cast<chrono::milliseconds>(ns).count());
+ }
+#endif
+ }
}
}
diff --git a/3party/boost/boost/thread/win32/thread_heap_alloc.hpp b/3party/boost/boost/thread/win32/thread_heap_alloc.hpp
index 1832dbcf8a..610fe3263e 100644
--- a/3party/boost/boost/thread/win32/thread_heap_alloc.hpp
+++ b/3party/boost/boost/thread/win32/thread_heap_alloc.hpp
@@ -10,7 +10,7 @@
#include <stdexcept>
#include <boost/assert.hpp>
#include <boost/throw_exception.hpp>
-#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/core/no_exceptions_support.hpp>
#if defined( BOOST_USE_WINDOWS_H )
# include <windows.h>
diff --git a/3party/boost/boost/thread/win32/thread_primitives.hpp b/3party/boost/boost/thread/win32/thread_primitives.hpp
index 451d9c7083..fcf59b3075 100644
--- a/3party/boost/boost/thread/win32/thread_primitives.hpp
+++ b/3party/boost/boost/thread/win32/thread_primitives.hpp
@@ -15,14 +15,9 @@
#include <boost/assert.hpp>
#include <boost/thread/exceptions.hpp>
#include <boost/detail/interlocked.hpp>
+//#include <boost/detail/winapi/synchronization.hpp>
#include <algorithm>
-#ifndef BOOST_THREAD_WIN32_HAS_GET_TICK_COUNT_64
-#if _WIN32_WINNT >= 0x0600
-#define BOOST_THREAD_WIN32_HAS_GET_TICK_COUNT_64
-#endif
-#endif
-
#if defined( BOOST_USE_WINDOWS_H )
# include <windows.h>
@@ -32,12 +27,6 @@ namespace boost
{
namespace win32
{
-#ifdef BOOST_THREAD_WIN32_HAS_GET_TICK_COUNT_64
- typedef unsigned long long ticks_type;
-#else
- typedef unsigned long ticks_type;
-#endif
- typedef ULONG_PTR ulong_ptr;
typedef HANDLE handle;
unsigned const infinite=INFINITE;
unsigned const timeout=WAIT_TIMEOUT;
@@ -73,12 +62,6 @@ namespace boost
using ::SleepEx;
using ::Sleep;
using ::QueueUserAPC;
- using ::GetTickCount;
-#ifdef BOOST_THREAD_WIN32_HAS_GET_TICK_COUNT_64
- using ::GetTickCount64;
-#else
- inline ticks_type GetTickCount64() { return GetTickCount(); }
-#endif
}
}
}
@@ -113,11 +96,6 @@ namespace boost
{
namespace win32
{
-#ifdef BOOST_THREAD_WIN32_HAS_GET_TICK_COUNT_64
- typedef unsigned long long ticks_type;
-#else
- typedef unsigned long ticks_type;
-#endif
# ifdef _WIN64
typedef unsigned __int64 ulong_ptr;
# else
@@ -156,10 +134,6 @@ namespace boost
typedef void (__stdcall *queue_user_apc_callback_function)(ulong_ptr);
__declspec(dllimport) unsigned long __stdcall QueueUserAPC(queue_user_apc_callback_function,void*,ulong_ptr);
- __declspec(dllimport) unsigned long __stdcall GetTickCount();
-# ifdef BOOST_THREAD_WIN32_HAS_GET_TICK_COUNT_64
- __declspec(dllimport) ticks_type __stdcall GetTickCount64();
-# endif
# ifndef UNDER_CE
__declspec(dllimport) unsigned long __stdcall GetCurrentProcessId();
__declspec(dllimport) unsigned long __stdcall GetCurrentThreadId();
@@ -176,9 +150,6 @@ namespace boost
using ::ResetEvent;
# endif
}
-# ifndef BOOST_THREAD_WIN32_HAS_GET_TICK_COUNT_64
- inline ticks_type GetTickCount64() { return GetTickCount(); }
-# endif
}
}
}
@@ -194,7 +165,88 @@ namespace boost
{
namespace win32
{
- enum event_type
+ typedef unsigned __int64 ticks_type;
+ namespace detail { typedef int (__stdcall *farproc_t)(); typedef ticks_type (__stdcall *gettickcount64_t)(); }
+ extern "C"
+ {
+ __declspec(dllimport) detail::farproc_t __stdcall GetProcAddress(void *, const char *);
+#if !defined(BOOST_NO_ANSI_APIS)
+ __declspec(dllimport) void * __stdcall GetModuleHandleA(const char *);
+#else
+ __declspec(dllimport) void * __stdcall GetModuleHandleW(const wchar_t *);
+#endif
+ int __stdcall GetTickCount();
+ long _InterlockedCompareExchange(long volatile *, long, long);
+#pragma intrinsic(_InterlockedCompareExchange)
+ }
+ // Borrowed from https://stackoverflow.com/questions/8211820/userland-interrupt-timer-access-such-as-via-kequeryinterrupttime-or-similar
+ inline ticks_type __stdcall GetTickCount64emulation()
+ {
+ static volatile long count = 0xFFFFFFFF;
+ unsigned long previous_count, current_tick32, previous_count_zone, current_tick32_zone;
+ ticks_type current_tick64;
+
+ previous_count = (unsigned long) _InterlockedCompareExchange(&count, 0, 0);
+ current_tick32 = GetTickCount();
+
+ if(previous_count == 0xFFFFFFFF)
+ {
+ // count has never been written
+ unsigned long initial_count;
+ initial_count = current_tick32 >> 28;
+ previous_count = (unsigned long) _InterlockedCompareExchange(&count, initial_count, 0xFFFFFFFF);
+
+ current_tick64 = initial_count;
+ current_tick64 <<= 28;
+ current_tick64 += current_tick32 & 0x0FFFFFFF;
+ return current_tick64;
+ }
+
+ previous_count_zone = previous_count & 15;
+ current_tick32_zone = current_tick32 >> 28;
+
+ if(current_tick32_zone == previous_count_zone)
+ {
+ // The top four bits of the 32-bit tick count haven't changed since count was last written.
+ current_tick64 = previous_count;
+ current_tick64 <<= 28;
+ current_tick64 += current_tick32 & 0x0FFFFFFF;
+ return current_tick64;
+ }
+
+ if(current_tick32_zone == previous_count_zone + 1 || (current_tick32_zone == 0 && previous_count_zone == 15))
+ {
+ // The top four bits of the 32-bit tick count have been incremented since count was last written.
+ _InterlockedCompareExchange(&count, previous_count + 1, previous_count);
+ current_tick64 = previous_count + 1;
+ current_tick64 <<= 28;
+ current_tick64 += current_tick32 & 0x0FFFFFFF;
+ return current_tick64;
+ }
+
+ // Oops, we weren't called often enough, we're stuck
+ return 0xFFFFFFFF;
+ }
+ inline detail::gettickcount64_t GetTickCount64()
+ {
+ static detail::gettickcount64_t gettickcount64impl;
+ if(gettickcount64impl)
+ return gettickcount64impl;
+ detail::farproc_t addr=GetProcAddress(
+#if !defined(BOOST_NO_ANSI_APIS)
+ GetModuleHandleA("KERNEL32.DLL"),
+#else
+ GetModuleHandleW(L"KERNEL32.DLL"),
+#endif
+ "GetTickCount64");
+ if(addr)
+ gettickcount64impl=(detail::gettickcount64_t) addr;
+ else
+ gettickcount64impl=&GetTickCount64emulation;
+ return gettickcount64impl;
+ }
+
+ enum event_type
{
auto_reset_event=false,
manual_reset_event=true
diff --git a/3party/boost/boost/thread/with_lock_guard.hpp b/3party/boost/boost/thread/with_lock_guard.hpp
new file mode 100644
index 0000000000..63e7910efa
--- /dev/null
+++ b/3party/boost/boost/thread/with_lock_guard.hpp
@@ -0,0 +1,233 @@
+// (C) Copyright 2013 Ruslan Baratov
+// Copyright (C) 2014 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 www.boost.org/libs/thread for documentation.
+
+#ifndef BOOST_THREAD_WITH_LOCK_GUARD_HPP
+#define BOOST_THREAD_WITH_LOCK_GUARD_HPP
+
+#include <boost/thread/lock_guard.hpp>
+#include <boost/utility/result_of.hpp>
+//#include <boost/thread/detail/invoke.hpp>
+
+namespace boost {
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
+ !defined(BOOST_NO_CXX11_DECLTYPE) && \
+ !defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES)
+
+/**
+ * Utility to run functions in scope protected by mutex.
+ *
+ * Examples:
+ *
+ * int func(int, int&);
+ * boost::mutex m;
+ * int a;
+ * int result = boost::with_lock_guard(m, func, 1, boost::ref(a));
+ *
+ * // using boost::bind
+ * int result = boost::with_lock_guard(
+ * m, boost::bind(func, 2, boost::ref(a))
+ * );
+ *
+ * // using lambda
+ * int a;
+ * int result = boost::with_lock_guard(
+ * m,
+ * [&a](int x) {
+ * a = 3;
+ * return x + 4;
+ * },
+ * 5
+ * );
+ */
+template <class Lockable, class Function, class... Args>
+auto with_lock_guard(
+ Lockable& m,
+ BOOST_FWD_REF(Function) func,
+ BOOST_FWD_REF(Args)... args
+) -> decltype(func(boost::forward<Args>(args)...)) {
+ boost::lock_guard<Lockable> lock(m);
+ return func(boost::forward<Args>(args)...);
+}
+
+#else
+
+// Workaround versions for compilers without c++11 variadic templates support.
+// (function arguments limit: 4)
+// (for lambda support define BOOST_RESULT_OF_USE_DECLTYPE may be needed)
+
+template <class Lockable, class Func>
+typename boost::result_of<Func()>::type with_lock_guard(
+ Lockable& m,
+ BOOST_FWD_REF(Func) func
+) {
+ boost::lock_guard<Lockable> lock(m);
+ return func();
+}
+
+template <class Lockable, class Func, class Arg>
+typename boost::result_of<Func(Arg)>::type with_lock_guard(
+ Lockable& m,
+ BOOST_FWD_REF(Func) func,
+ BOOST_FWD_REF(Arg) arg
+) {
+ boost::lock_guard<Lockable> lock(m);
+ return func(
+ boost::forward<Arg>(arg)
+ );
+}
+
+template <class Lockable, class Func, class Arg1, class Arg2>
+typename boost::result_of<Func(Arg1, Arg2)>::type with_lock_guard(
+ Lockable& m,
+ BOOST_FWD_REF(Func) func,
+ BOOST_FWD_REF(Arg1) arg1,
+ BOOST_FWD_REF(Arg2) arg2
+) {
+ boost::lock_guard<Lockable> lock(m);
+ return func(
+ boost::forward<Arg1>(arg1),
+ boost::forward<Arg2>(arg2)
+ );
+}
+
+template <class Lockable, class Func, class Arg1, class Arg2, class Arg3>
+typename boost::result_of<Func(Arg1, Arg2, Arg3)>::type with_lock_guard(
+ Lockable& m,
+ BOOST_FWD_REF(Func) func,
+ BOOST_FWD_REF(Arg1) arg1,
+ BOOST_FWD_REF(Arg2) arg2,
+ BOOST_FWD_REF(Arg3) arg3
+) {
+ boost::lock_guard<Lockable> lock(m);
+ return func(
+ boost::forward<Arg1>(arg1),
+ boost::forward<Arg2>(arg2),
+ boost::forward<Arg3>(arg3)
+ );
+}
+
+template <
+ class Lockable, class Func, class Arg1, class Arg2, class Arg3, class Arg4
+>
+typename boost::result_of<Func(Arg1, Arg2, Arg3, Arg4)>::type with_lock_guard(
+ Lockable& m,
+ BOOST_FWD_REF(Func) func,
+ BOOST_FWD_REF(Arg1) arg1,
+ BOOST_FWD_REF(Arg2) arg2,
+ BOOST_FWD_REF(Arg3) arg3,
+ BOOST_FWD_REF(Arg4) arg4
+) {
+ boost::lock_guard<Lockable> lock(m);
+ return func(
+ boost::forward<Arg1>(arg1),
+ boost::forward<Arg2>(arg2),
+ boost::forward<Arg3>(arg3),
+ boost::forward<Arg4>(arg4)
+ );
+}
+
+// overloads for function pointer
+// (if argument is not function pointer, static assert will trigger)
+template <class Lockable, class Func>
+typename boost::result_of<
+ typename boost::add_pointer<Func>::type()
+>::type with_lock_guard(
+ Lockable& m,
+ Func* func
+) {
+ BOOST_STATIC_ASSERT(boost::is_function<Func>::value);
+
+ boost::lock_guard<Lockable> lock(m);
+ return func();
+}
+
+template <class Lockable, class Func, class Arg>
+typename boost::result_of<
+ typename boost::add_pointer<Func>::type(Arg)
+>::type with_lock_guard(
+ Lockable& m,
+ Func* func,
+ BOOST_FWD_REF(Arg) arg
+) {
+ BOOST_STATIC_ASSERT(boost::is_function<Func>::value);
+
+ boost::lock_guard<Lockable> lock(m);
+ return func(
+ boost::forward<Arg>(arg)
+ );
+}
+
+template <class Lockable, class Func, class Arg1, class Arg2>
+typename boost::result_of<
+ typename boost::add_pointer<Func>::type(Arg1, Arg2)
+>::type with_lock_guard(
+ Lockable& m,
+ Func* func,
+ BOOST_FWD_REF(Arg1) arg1,
+ BOOST_FWD_REF(Arg2) arg2
+) {
+ BOOST_STATIC_ASSERT(boost::is_function<Func>::value);
+
+ boost::lock_guard<Lockable> lock(m);
+ return func(
+ boost::forward<Arg1>(arg1),
+ boost::forward<Arg2>(arg2)
+ );
+}
+
+template <class Lockable, class Func, class Arg1, class Arg2, class Arg3>
+typename boost::result_of<
+ typename boost::add_pointer<Func>::type(Arg1, Arg2, Arg3)
+>::type with_lock_guard(
+ Lockable& m,
+ Func* func,
+ BOOST_FWD_REF(Arg1) arg1,
+ BOOST_FWD_REF(Arg2) arg2,
+ BOOST_FWD_REF(Arg3) arg3
+) {
+ BOOST_STATIC_ASSERT(boost::is_function<Func>::value);
+
+ boost::lock_guard<Lockable> lock(m);
+ return func(
+ boost::forward<Arg1>(arg1),
+ boost::forward<Arg2>(arg2),
+ boost::forward<Arg3>(arg3)
+ );
+}
+
+template <
+ class Lockable, class Func, class Arg1, class Arg2, class Arg3, class Arg4
+>
+typename boost::result_of<
+ typename boost::add_pointer<Func>::type(Arg1, Arg2, Arg3, Arg4)
+>::type with_lock_guard(
+ Lockable& m,
+ Func* func,
+ BOOST_FWD_REF(Arg1) arg1,
+ BOOST_FWD_REF(Arg2) arg2,
+ BOOST_FWD_REF(Arg3) arg3,
+ BOOST_FWD_REF(Arg4) arg4
+) {
+ BOOST_STATIC_ASSERT(boost::is_function<Func>::value);
+
+ boost::lock_guard<Lockable> lock(m);
+ return func(
+ boost::forward<Arg1>(arg1),
+ boost::forward<Arg2>(arg2),
+ boost::forward<Arg3>(arg3),
+ boost::forward<Arg4>(arg4)
+ );
+}
+
+#endif
+
+} // namespace boost
+
+#endif // BOOST_THREAD_WITH_LOCK_GUARD_HPP
+
diff --git a/3party/boost/boost/throw_exception.hpp b/3party/boost/boost/throw_exception.hpp
index c1bff4379f..aa977dfc79 100644
--- a/3party/boost/boost/throw_exception.hpp
+++ b/3party/boost/boost/throw_exception.hpp
@@ -1,6 +1,6 @@
#ifndef UUID_AA15E74A856F11E08B8D93F24824019B
#define UUID_AA15E74A856F11E08B8D93F24824019B
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
#pragma GCC system_header
#endif
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
@@ -26,7 +26,6 @@
// http://www.boost.org/libs/utility/throw_exception.html
//
-#include <boost/exception/detail/attribute_noreturn.hpp>
#include <boost/detail/workaround.hpp>
#include <boost/config.hpp>
#include <exception>
@@ -41,8 +40,11 @@
#if !defined( BOOST_EXCEPTION_DISABLE )
# include <boost/exception/exception.hpp>
+#if !defined(BOOST_THROW_EXCEPTION_CURRENT_FUNCTION)
# include <boost/current_function.hpp>
-# define BOOST_THROW_EXCEPTION(x) ::boost::exception_detail::throw_exception_(x,BOOST_CURRENT_FUNCTION,__FILE__,__LINE__)
+# define BOOST_THROW_EXCEPTION_CURRENT_FUNCTION BOOST_CURRENT_FUNCTION
+#endif
+# define BOOST_THROW_EXCEPTION(x) ::boost::exception_detail::throw_exception_(x,BOOST_THROW_EXCEPTION_CURRENT_FUNCTION,__FILE__,__LINE__)
#else
# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)
#endif
@@ -57,7 +59,7 @@ void throw_exception( std::exception const & e ); // user defined
inline void throw_exception_assert_compatibility( std::exception const & ) { }
-template<class E> BOOST_ATTRIBUTE_NORETURN inline void throw_exception( E const & e )
+template<class E> BOOST_NORETURN inline void throw_exception( E const & e )
{
//All boost exceptions are required to derive from std::exception,
//to ensure compatibility with BOOST_NO_EXCEPTIONS.
@@ -77,7 +79,7 @@ template<class E> BOOST_ATTRIBUTE_NORETURN inline void throw_exception( E const
exception_detail
{
template <class E>
- BOOST_ATTRIBUTE_NORETURN
+ BOOST_NORETURN
void
throw_exception_( E const & x, char const * current_function, char const * file, int line )
{
diff --git a/3party/boost/boost/timer/timer.hpp b/3party/boost/boost/timer/timer.hpp
index 4e6c271a84..792a8abd32 100644
--- a/3party/boost/boost/timer/timer.hpp
+++ b/3party/boost/boost/timer/timer.hpp
@@ -26,12 +26,6 @@
//--------------------------------------------------------------------------------------//
-// TODO:
-//
-// * Add BOOST_NOEXCEPT where applicable
-
-//--------------------------------------------------------------------------------------//
-
namespace boost
{
namespace timer
@@ -65,19 +59,19 @@ namespace timer
public:
// constructor
- cpu_timer() { start(); }
+ cpu_timer() BOOST_NOEXCEPT { start(); }
// observers
- bool is_stopped() const { return m_is_stopped; }
- cpu_times elapsed() const; // does not stop()
+ bool is_stopped() const BOOST_NOEXCEPT { return m_is_stopped; }
+ cpu_times elapsed() const BOOST_NOEXCEPT; // does not stop()
std::string format(short places, const std::string& format) const
{ return ::boost::timer::format(elapsed(), places, format); }
std::string format(short places = default_places) const
{ return ::boost::timer::format(elapsed(), places); }
// actions
- void start();
- void stop();
- void resume();
+ void start() BOOST_NOEXCEPT;
+ void stop() BOOST_NOEXCEPT;
+ void resume() BOOST_NOEXCEPT;
private:
cpu_times m_times;
diff --git a/3party/boost/boost/token_functions.hpp b/3party/boost/boost/token_functions.hpp
index 98ea80b009..33b37cd84f 100644
--- a/3party/boost/boost/token_functions.hpp
+++ b/3party/boost/boost/token_functions.hpp
@@ -278,22 +278,7 @@ namespace boost{
struct assign_or_plus_equal {
template<class Iterator, class Token>
static void assign(Iterator b, Iterator e, Token &t) {
-
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) &&\
- BOOST_WORKAROUND(__SGI_STL_PORT, < 0x500) &&\
- defined(_STLP_DEBUG) &&\
- (defined(_STLP_USE_DYNAMIC_LIB) || defined(_DLL))
- // Problem with string::assign for msvc-stlport in debug mode: the
- // linker tries to import the templatized version of this memfun,
- // which is obviously not exported.
- // See http://www.stlport.com/dcforum/DCForumID6/1763.html for details.
-
- t = Token();
- while(b != e) t += *b++;
-#else
t.assign(b, e);
-#endif
-
}
template<class Token, class Value>
diff --git a/3party/boost/boost/token_iterator.hpp b/3party/boost/boost/token_iterator.hpp
index 19b1db26c8..929fad6203 100644
--- a/3party/boost/boost/token_iterator.hpp
+++ b/3party/boost/boost/token_iterator.hpp
@@ -34,7 +34,7 @@ namespace boost
, typename detail::minimum_category<
forward_traversal_tag
, typename iterator_traversal<Iterator>::type
- >::type
+ >::type
, const Type&
>
{
@@ -88,7 +88,7 @@ namespace boost
Iterator base()const{return begin_;}
- Iterator end()const{return end_;};
+ Iterator end()const{return end_;}
TokenizerFunc tokenizer_function()const{return f_;}
@@ -101,24 +101,24 @@ namespace boost
};
template <
- class TokenizerFunc = char_delimiters_separator<char>,
+ class TokenizerFunc = char_delimiters_separator<char>,
class Iterator = std::string::const_iterator,
class Type = std::string
>
class token_iterator_generator {
- private:
+ private:
public:
typedef token_iterator<TokenizerFunc,Iterator,Type> type;
};
-
-
+
+
// Type has to be first because it needs to be explicitly specified
// because there is no way the function can deduce it.
template<class Type, class Iterator, class TokenizerFunc>
- typename token_iterator_generator<TokenizerFunc,Iterator,Type>::type
+ typename token_iterator_generator<TokenizerFunc,Iterator,Type>::type
make_token_iterator(Iterator begin, Iterator end,const TokenizerFunc& fun){
- typedef typename
+ typedef typename
token_iterator_generator<TokenizerFunc,Iterator,Type>::type ret_type;
return ret_type(fun,begin,end);
}
diff --git a/3party/boost/boost/tr1/array.hpp b/3party/boost/boost/tr1/array.hpp
index 131d912775..1cd4534ecf 100644
--- a/3party/boost/boost/tr1/array.hpp
+++ b/3party/boost/boost/tr1/array.hpp
@@ -39,7 +39,6 @@ using ::boost::swap;
// [6.2.2.5] Tuple interface to class template array
template <class T> struct tuple_size; // forward declaration
template <int I, class T> struct tuple_element; // forward declaration
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T, size_t N>
struct tuple_size< ::boost::array<T, N> >
: public ::boost::integral_constant< ::std::size_t, N>{};
@@ -54,7 +53,6 @@ struct tuple_element<I, ::boost::array<T, N> >
#endif
typedef T type;
};
-#endif
template <int I, class T, size_t N>
T& get( ::boost::array<T, N>& a)
{
diff --git a/3party/boost/boost/tr1/complex.hpp b/3party/boost/boost/tr1/complex.hpp
index 71f4434282..16f7c5da97 100644
--- a/3party/boost/boost/tr1/complex.hpp
+++ b/3party/boost/boost/tr1/complex.hpp
@@ -117,7 +117,7 @@ inline std::complex<float> conj(const float& t)
return ct;
}
-#if !BOOST_WORKAROUND(__BORLANDC__, <=0x570) && !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+#if !BOOST_WORKAROUND(__BORLANDC__, <=0x570)
inline complex<double> polar(const char& rho, const char& theta = 0)
{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
inline complex<double> polar(const unsigned char& rho, const unsigned char& theta = 0)
diff --git a/3party/boost/boost/tr1/detail/config.hpp b/3party/boost/boost/tr1/detail/config.hpp
index 1b95148bb0..42069dd257 100644
--- a/3party/boost/boost/tr1/detail/config.hpp
+++ b/3party/boost/boost/tr1/detail/config.hpp
@@ -9,6 +9,7 @@
#include <cstddef>
#if (defined(__GNUC__) && !(defined(linux) || defined(__linux) || defined(__linux__))) \
+ || (!defined(__FreeBSD__) && defined(__GNUC__)) \
|| (!defined(_AIX) && defined(__IBMCPP__) && (__IBMCPP__ >= 800))
// Disable use of #include_next on Linux as typically we are installed in a
// directory that is searched *after* the std lib include path.
@@ -48,7 +49,7 @@
#define BOOST_TR1_HEADER(name) <BOOST_TR1_PATH(name)>
// Can't use BOOST_WORKAROUND here, it leads to recursive includes:
-#if (defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)) || (defined(_MSC_VER) && (_MSC_VER < 1310))
+#if (defined(__BORLANDC__) && (__BORLANDC__ <= 0x600))
# define BOOST_TR1_USE_OLD_TUPLE
#endif
@@ -137,7 +138,7 @@
// this here, in addition the feature pack for VC9
// provides a more or less full TR1 implementation:
//
-# if defined(_HAS_TR1) && (_HAS_TR1 + 0)
+# if (defined(_HAS_TR1) && (_HAS_TR1 + 0)) || (_CPPLIB_VER >= 540)
# define BOOST_HAS_TR1_ARRAY
# define BOOST_HAS_TR1_REFERENCE_WRAPPER
# define BOOST_HAS_TR1_RESULT_OF
@@ -159,6 +160,9 @@
# if _MSC_VER >= 1600
# define BOOST_HAS_CPP_0X
# endif
+# if _MSC_VER >= 1700
+# define BOOST_HAS_TR1_COMPLEX_OVERLOADS
+# endif
#endif
#include <boost/config.hpp>
diff --git a/3party/boost/boost/tr1/detail/config_all.hpp b/3party/boost/boost/tr1/detail/config_all.hpp
index ecf07b68ae..bdb0075322 100644
--- a/3party/boost/boost/tr1/detail/config_all.hpp
+++ b/3party/boost/boost/tr1/detail/config_all.hpp
@@ -53,6 +53,10 @@
# endif
# endif
+#ifdef __ANDROID__
+# define BOOST_TR1_GCC_INCLUDE_PATH include
+#endif
+
# if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && !defined(__BORLANDC__)
# ifdef __SUNPRO_CC
@@ -82,13 +86,16 @@
# elif defined(__clang__)
# define BOOST_TR1_STD_HEADER(name) <../include/name>
-# elif defined(__GNUC__) && __GNUC__ >= 3
+# elif defined(_CRAYC)
+# define BOOST_TR1_STD_HEADER(name) <../include/name>
+
+# elif defined(__GNUC__)
# if defined(BOOST_TR1_GCC_INCLUDE_PATH)
# define BOOST_TR1_STD_HEADER(name) <../BOOST_TR1_GCC_INCLUDE_PATH/name>
-# elif ( (__GNUC__ == 3 ) && ((__GNUC_MINOR__ == 0) || ((__GNUC_MINOR__ < 3) && defined(__APPLE_CC__))))
-# define BOOST_TR1_STD_HEADER(name) <../g++-v3/name>
+# elif (defined(__FreeBSD__))
+# define BOOST_TR1_STD_HEADER(name) <../__GNUC__.__GNUC_MINOR__/name>
# else
-# if ( ((__GNUC__ == 3 ) && (__GNUC_MINOR__ >= 3)) && (defined(__APPLE_CC__) || defined(__CYGWIN__)))
+# if ( (__GNUC__ == 3) && (defined(__APPLE_CC__) || defined(__CYGWIN__)))
# define BOOST_TR1_STD_HEADER(name) <../c++/name>
# elif ((__GLIBCXX__ == 20050421) && defined(__APPLE_CC__))
// Some Darwin tools fix libstdc++ at 4.0.0 irrespective of the actual
@@ -107,7 +114,7 @@
# endif
# if !defined(BOOST_TR1_DISABLE_INCLUDE_NEXT) && !defined(__ICC) \
- && (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__))
+ && (defined(__FreeBSD__) || defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__))
// Disable use of #include_next on Linux as typically we are installed in a directory that is searched
// *after* the std lib include path:
# define BOOST_TR1_DISABLE_INCLUDE_NEXT
@@ -149,10 +156,6 @@
# define BOOST_TR1_NO_CONFIG_ALL_RECURSION
# endif
# include_next <utility>
-# if (__GNUC__ < 3)
-# include_next <algorithm>
-# include_next <iterator>
-# endif
# ifdef BOOST_TR1_NO_CONFIG_ALL_RECURSION
# undef BOOST_TR1_NO_CONFIG_ALL_RECURSION
# undef BOOST_TR1_NO_RECURSION
diff --git a/3party/boost/boost/tr1/functional.hpp b/3party/boost/boost/tr1/functional.hpp
index 8c97fa892a..0862f4ef98 100644
--- a/3party/boost/boost/tr1/functional.hpp
+++ b/3party/boost/boost/tr1/functional.hpp
@@ -37,8 +37,7 @@ namespace std{ namespace tr1{
#endif // BOOST_HAS_TR1_REFERENCE_WRAPPER
#if !defined(BOOST_HAS_TR1_RESULT_OF)\
- && !defined(BOOST_NO_SFINAE) && \
- !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ && !defined(BOOST_NO_SFINAE)
//
// we can only actually include result_of.hpp if the compiler
@@ -103,7 +102,6 @@ namespace std{ namespace tr1{
#include <boost/detail/workaround.hpp>
#if !BOOST_WORKAROUND(__BORLANDC__, < 0x582) \
- && !BOOST_WORKAROUND(BOOST_MSVC, < 1310) \
&& !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
namespace std{ namespace tr1{
diff --git a/3party/boost/boost/tr1/utility.hpp b/3party/boost/boost/tr1/utility.hpp
index 2519ec46f6..0310b5ce41 100644
--- a/3party/boost/boost/tr1/utility.hpp
+++ b/3party/boost/boost/tr1/utility.hpp
@@ -31,7 +31,6 @@ namespace std{ namespace tr1{
template <class T> struct tuple_size; // forward declaration
template < int I, class T> struct tuple_element; // forward declaration
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T1, class T2>
struct tuple_size< ::std::pair<T1, T2> >
: public ::boost::integral_constant< ::std::size_t, 2>
@@ -49,7 +48,6 @@ struct tuple_element<1, std::pair<T1, T2> >
{
typedef typename std::pair<T1, T2>::second_type type;
};
-#endif
namespace tuple_detail{
template <int I, class T1, class T2>
diff --git a/3party/boost/boost/tti/detail/dcomp_mem_fun.hpp b/3party/boost/boost/tti/detail/dcomp_mem_fun.hpp
index d053bc934d..95b37d1b0e 100644
--- a/3party/boost/boost/tti/detail/dcomp_mem_fun.hpp
+++ b/3party/boost/boost/tti/detail/dcomp_mem_fun.hpp
@@ -16,6 +16,8 @@
#include <boost/type_traits/remove_const.hpp>
#include <boost/type_traits/detail/yes_no_type.hpp>
+#if defined(__SUNPRO_CC)
+
#define BOOST_TTI_DETAIL_TRAIT_HAS_COMP_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T> \
struct BOOST_PP_CAT(trait,_detail_hcmf) \
@@ -30,7 +32,7 @@
}; \
\
template<BOOST_TTI_DETAIL_TP_T> \
- struct helper; \
+ struct helper {}; \
\
template<class BOOST_TTI_DETAIL_TP_U> \
static ::boost::type_traits::yes_type chkt(helper<&BOOST_TTI_DETAIL_TP_U::name> *); \
@@ -38,10 +40,39 @@
template<class BOOST_TTI_DETAIL_TP_U> \
static ::boost::type_traits::no_type chkt(...); \
\
- BOOST_STATIC_CONSTANT(bool,value=sizeof(chkt<typename cl_type<BOOST_TTI_DETAIL_TP_T>::type>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type)); \
+ typedef boost::mpl::bool_<sizeof(chkt<typename cl_type<BOOST_TTI_DETAIL_TP_T>::type>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type)> type; \
+ }; \
+/**/
+
+#else
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_COMP_MEMBER_FUNCTION(trait,name) \
+ template<class BOOST_TTI_DETAIL_TP_T> \
+ struct BOOST_PP_CAT(trait,_detail_hcmf) \
+ { \
+ template<class BOOST_TTI_DETAIL_TP_F> \
+ struct cl_type : \
+ boost::remove_const \
+ < \
+ typename BOOST_TTI_NAMESPACE::detail::class_type<BOOST_TTI_DETAIL_TP_F>::type \
+ > \
+ { \
+ }; \
+ \
+ template<BOOST_TTI_DETAIL_TP_T> \
+ struct helper; \
+ \
+ template<class BOOST_TTI_DETAIL_TP_U> \
+ static ::boost::type_traits::yes_type chkt(helper<&BOOST_TTI_DETAIL_TP_U::name> *); \
\
- typedef boost::mpl::bool_<value> type; \
+ template<class BOOST_TTI_DETAIL_TP_U> \
+ static ::boost::type_traits::no_type chkt(...); \
+ \
+ typedef boost::mpl::bool_<sizeof(chkt<typename cl_type<BOOST_TTI_DETAIL_TP_T>::type>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type)> type; \
}; \
/**/
+#endif
+
+
#endif // BOOST_TTI_DETAIL_COMP_MEM_FUN_HPP
diff --git a/3party/boost/boost/tti/detail/dcomp_static_mem_fun.hpp b/3party/boost/boost/tti/detail/dcomp_static_mem_fun.hpp
deleted file mode 100644
index 45a527fe7d..0000000000
--- a/3party/boost/boost/tti/detail/dcomp_static_mem_fun.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-// (C) Copyright Edward Diener 2011,2012,2013
-// 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).
-
-#if !defined(BOOST_TTI_DETAIL_COMP_STATIC_MEM_FUN_HPP)
-#define BOOST_TTI_DETAIL_COMP_STATIC_MEM_FUN_HPP
-
-#include <boost/config.hpp>
-#include <boost/function_types/is_function.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/type_traits/detail/yes_no_type.hpp>
-#include <boost/tti/detail/dnullptr.hpp>
-
-#define BOOST_TTI_DETAIL_TRAIT_HAS_COMP_STATIC_MEMBER_FUNCTION(trait,name) \
- template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
- struct BOOST_PP_CAT(trait,_detail) \
- { \
- template<BOOST_TTI_DETAIL_TP_TYPE *> \
- struct helper; \
- \
- template<class U> \
- static ::boost::type_traits::yes_type chkt(helper<&U::name> *); \
- \
- template<class U> \
- static ::boost::type_traits::no_type chkt(...); \
- \
- BOOST_STATIC_CONSTANT(bool,value=(boost::function_types::is_function<BOOST_TTI_DETAIL_TP_TYPE>::value) && (sizeof(chkt<BOOST_TTI_DETAIL_TP_T>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type))); \
- \
- typedef boost::mpl::bool_<value> type; \
- }; \
-/**/
-
-#endif // BOOST_TTI_DETAIL_COMP_STATIC_MEM_FUN_HPP
diff --git a/3party/boost/boost/tti/detail/ddata.hpp b/3party/boost/boost/tti/detail/ddata.hpp
index 3c0d29f75f..b8b4d88f2f 100644
--- a/3party/boost/boost/tti/detail/ddata.hpp
+++ b/3party/boost/boost/tti/detail/ddata.hpp
@@ -1,5 +1,5 @@
-// (C) Copyright Edward Diener 2012
+// (C) Copyright Edward Diener 2012,2013
// 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).
@@ -7,37 +7,22 @@
#if !defined(BOOST_TTI_DETAIL_DATA_HPP)
#define BOOST_TTI_DETAIL_DATA_HPP
-#include <boost/config.hpp>
+#include <boost/mpl/or.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/tti/detail/dmem_data.hpp>
#include <boost/tti/detail/dstatic_mem_data.hpp>
-#include <boost/tti/gen/namespace_gen.hpp>
-#include <boost/type_traits/remove_const.hpp>
#define BOOST_TTI_DETAIL_TRAIT_HAS_DATA(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) \
template<class BOOST_TTI_DETAIL_TP_ET,class BOOST_TTI_DETAIL_TP_DT> \
- struct BOOST_PP_CAT(trait,_detail_hd) \
+ struct BOOST_PP_CAT(trait,_detail_hd) : \
+ boost::mpl::or_ \
+ < \
+ BOOST_PP_CAT(trait,_detail_hmd_with_enclosing_class)<BOOST_TTI_DETAIL_TP_ET,BOOST_TTI_DETAIL_TP_DT>, \
+ BOOST_PP_CAT(trait,_detail_hsd)<BOOST_TTI_DETAIL_TP_ET,BOOST_TTI_DETAIL_TP_DT> \
+ > \
{ \
- \
- typedef typename \
- BOOST_PP_CAT(trait,_detail_hmd) \
- < \
- typename BOOST_TTI_NAMESPACE::detail::ptmd<BOOST_TTI_DETAIL_TP_ET,BOOST_TTI_DETAIL_TP_DT>::type, \
- typename boost::remove_const<BOOST_TTI_DETAIL_TP_ET>::type \
- >::type hmdtype; \
- \
- typedef typename \
- BOOST_PP_CAT(trait,_detail_hsd)<BOOST_TTI_DETAIL_TP_ET,BOOST_TTI_DETAIL_TP_DT>::type hsdtype; \
- \
- BOOST_STATIC_CONSTANT \
- ( \
- bool, \
- value = hmdtype::value || hsdtype::value \
- ); \
- \
- typedef boost::mpl::bool_<value> type; \
}; \
/**/
diff --git a/3party/boost/boost/tti/detail/dfunction.hpp b/3party/boost/boost/tti/detail/dfunction.hpp
index cc30f34e9a..f86fef4f83 100644
--- a/3party/boost/boost/tti/detail/dfunction.hpp
+++ b/3party/boost/boost/tti/detail/dfunction.hpp
@@ -7,7 +7,7 @@
#if !defined(BOOST_TTI_DETAIL_FUNCTION_HPP)
#define BOOST_TTI_DETAIL_FUNCTION_HPP
-#include <boost/config.hpp>
+#include <boost/mpl/or.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/tti/detail/dmem_fun.hpp>
#include <boost/tti/detail/dstatic_mem_fun.hpp>
@@ -17,26 +17,17 @@
BOOST_TTI_DETAIL_TRAIT_HAS_CALL_TYPES_MEMBER_FUNCTION(trait,name) \
BOOST_TTI_DETAIL_TRAIT_IMPL_HAS_STATIC_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_R,class BOOST_TTI_DETAIL_TP_FS,class BOOST_TTI_DETAIL_TP_TAG> \
- struct BOOST_PP_CAT(trait,_detail_hf) \
+ struct BOOST_PP_CAT(trait,_detail_hf) : \
+ boost::mpl::or_ \
+ < \
+ BOOST_PP_CAT(trait,_detail_call_types)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_R,BOOST_TTI_DETAIL_TP_FS,BOOST_TTI_DETAIL_TP_TAG>, \
+ BOOST_PP_CAT(trait,_detail_ihsmf) \
+ < \
+ BOOST_TTI_DETAIL_TP_T, \
+ typename BOOST_TTI_NAMESPACE::detail::tfunction_seq<BOOST_TTI_DETAIL_TP_R,BOOST_TTI_DETAIL_TP_FS,BOOST_TTI_DETAIL_TP_TAG>::type \
+ > \
+ > \
{ \
- \
- typedef typename \
- BOOST_PP_CAT(trait,_detail_call_types)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_R,BOOST_TTI_DETAIL_TP_FS,BOOST_TTI_DETAIL_TP_TAG>::type hmftype; \
- \
- typedef typename \
- BOOST_PP_CAT(trait,_detail_ihsmf) \
- < \
- BOOST_TTI_DETAIL_TP_T, \
- typename BOOST_TTI_NAMESPACE::detail::tfunction_seq<BOOST_TTI_DETAIL_TP_R,BOOST_TTI_DETAIL_TP_FS,BOOST_TTI_DETAIL_TP_TAG>::type \
- >::type hsmftype; \
- \
- BOOST_STATIC_CONSTANT \
- ( \
- bool, \
- value = hmftype::value || hsmftype::value \
- ); \
- \
- typedef boost::mpl::bool_<value> type; \
}; \
/**/
diff --git a/3party/boost/boost/tti/detail/dmem_data.hpp b/3party/boost/boost/tti/detail/dmem_data.hpp
index 765744ccc6..140a443987 100644
--- a/3party/boost/boost/tti/detail/dmem_data.hpp
+++ b/3party/boost/boost/tti/detail/dmem_data.hpp
@@ -15,18 +15,21 @@
#include <boost/mpl/bool.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
+#include <boost/mpl/or.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/tti/detail/ddeftype.hpp>
#include <boost/tti/detail/dftclass.hpp>
#include <boost/tti/gen/namespace_gen.hpp>
#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/is_class.hpp>
#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_const.hpp>
#if defined(BOOST_MSVC) || (BOOST_WORKAROUND(BOOST_GCC, >= 40400) && BOOST_WORKAROUND(BOOST_GCC, < 40600))
-#define BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA(trait,name) \
+#define BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA_OP(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_C> \
- struct BOOST_PP_CAT(trait,_detail_hmd) \
+ struct BOOST_PP_CAT(trait,_detail_hmd_op) \
{ \
template<class> \
struct return_of; \
@@ -73,8 +76,6 @@
\
typedef typename ttc_md<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_C>::type type; \
\
- BOOST_STATIC_CONSTANT(bool,value=type::value); \
- \
}; \
/**/
@@ -82,10 +83,10 @@
#include <boost/tti/detail/dmem_fun.hpp>
-#define BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA(trait,name) \
+#define BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA_OP(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_TYPES_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_C> \
- struct BOOST_PP_CAT(trait,_detail_hmd) : \
+ struct BOOST_PP_CAT(trait,_detail_hmd_op) : \
BOOST_PP_CAT(trait,_detail_types)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_C> \
{ \
}; \
@@ -93,6 +94,75 @@
#endif // defined(BOOST_MSVC)
+#define BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA_INVOKE_ENCLOSING_CLASS(trait) \
+ template<class BOOST_TTI_DETAIL_TP_ET,class BOOST_TTI_DETAIL_TP_TYPE> \
+ struct BOOST_PP_CAT(trait,_detail_hmd_invoke_enclosing_class) : \
+ BOOST_PP_CAT(trait,_detail_hmd_op) \
+ < \
+ typename BOOST_TTI_NAMESPACE::detail::ptmd<BOOST_TTI_DETAIL_TP_ET,BOOST_TTI_DETAIL_TP_TYPE>::type, \
+ typename boost::remove_const<BOOST_TTI_DETAIL_TP_ET>::type \
+ > \
+ { \
+ }; \
+/**/
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA_INVOKE_PT_MEMBER(trait) \
+ template<class BOOST_TTI_DETAIL_TP_ET,class BOOST_TTI_DETAIL_TP_TYPE> \
+ struct BOOST_PP_CAT(trait,_detail_hmd_invoke_pt_member) : \
+ BOOST_PP_CAT(trait,_detail_hmd_op) \
+ < \
+ typename BOOST_TTI_NAMESPACE::detail::dmem_get_type<BOOST_TTI_DETAIL_TP_ET,BOOST_TTI_DETAIL_TP_TYPE>::type, \
+ typename boost::remove_const \
+ < \
+ typename BOOST_TTI_NAMESPACE::detail::dmem_get_enclosing<BOOST_TTI_DETAIL_TP_ET,BOOST_TTI_DETAIL_TP_TYPE>::type \
+ >::type \
+ > \
+ { \
+ }; \
+/**/
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA_WITH_ENCLOSING_CLASS(trait) \
+ BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA_INVOKE_ENCLOSING_CLASS(trait) \
+ template<class BOOST_TTI_DETAIL_TP_ET,class BOOST_TTI_DETAIL_TP_TYPE> \
+ struct BOOST_PP_CAT(trait,_detail_hmd_with_enclosing_class) : \
+ boost::mpl::eval_if \
+ < \
+ boost::is_class<BOOST_TTI_DETAIL_TP_ET>, \
+ BOOST_PP_CAT(trait,_detail_hmd_invoke_enclosing_class) \
+ < \
+ BOOST_TTI_DETAIL_TP_ET, \
+ BOOST_TTI_DETAIL_TP_TYPE \
+ >, \
+ boost::mpl::false_ \
+ > \
+ { \
+ }; \
+/**/
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA(trait,name) \
+ BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA_OP(trait,name) \
+ BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA_WITH_ENCLOSING_CLASS(trait) \
+ BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA_INVOKE_PT_MEMBER(trait) \
+ template<class BOOST_TTI_DETAIL_TP_ET,class BOOST_TTI_DETAIL_TP_TYPE> \
+ struct BOOST_PP_CAT(trait,_detail_hmd) : \
+ boost::mpl::eval_if \
+ < \
+ boost::is_same<BOOST_TTI_DETAIL_TP_TYPE,BOOST_TTI_NAMESPACE::detail::deftype>, \
+ BOOST_PP_CAT(trait,_detail_hmd_invoke_pt_member) \
+ < \
+ BOOST_TTI_DETAIL_TP_ET, \
+ BOOST_TTI_DETAIL_TP_TYPE \
+ >, \
+ BOOST_PP_CAT(trait,_detail_hmd_with_enclosing_class) \
+ < \
+ BOOST_TTI_DETAIL_TP_ET, \
+ BOOST_TTI_DETAIL_TP_TYPE \
+ > \
+ > \
+ { \
+ }; \
+/**/
+
namespace boost
{
namespace tti
diff --git a/3party/boost/boost/tti/detail/dmem_fun.hpp b/3party/boost/boost/tti/detail/dmem_fun.hpp
index 48f881949d..421780297d 100644
--- a/3party/boost/boost/tti/detail/dmem_fun.hpp
+++ b/3party/boost/boost/tti/detail/dmem_fun.hpp
@@ -18,6 +18,7 @@
#include <boost/mpl/vector.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/is_class.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/tti/detail/dcomp_mem_fun.hpp>
@@ -26,12 +27,14 @@
#include <boost/tti/detail/dptmf.hpp>
#include <boost/tti/gen/namespace_gen.hpp>
+#if defined(__SUNPRO_CC)
+
#define BOOST_TTI_DETAIL_TRAIT_HAS_TYPES_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_DETAIL_TP_PMEMF,class BOOST_TTI_DETAIL_TP_C> \
struct BOOST_PP_CAT(trait,_detail_types) \
{ \
template<BOOST_TTI_DETAIL_TP_PMEMF> \
- struct helper; \
+ struct helper {}; \
\
template<class BOOST_TTI_DETAIL_TP_EC> \
static ::boost::type_traits::yes_type chkt(helper<&BOOST_TTI_DETAIL_TP_EC::name> *); \
@@ -39,16 +42,35 @@
template<class BOOST_TTI_DETAIL_TP_EC> \
static ::boost::type_traits::no_type chkt(...); \
\
- BOOST_STATIC_CONSTANT(bool,value=sizeof(chkt<BOOST_TTI_DETAIL_TP_C>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type)); \
+ typedef boost::mpl::bool_<sizeof(chkt<BOOST_TTI_DETAIL_TP_C>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type)> type; \
+ }; \
+/**/
+
+#else
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TYPES_MEMBER_FUNCTION(trait,name) \
+ template<class BOOST_TTI_DETAIL_TP_PMEMF,class BOOST_TTI_DETAIL_TP_C> \
+ struct BOOST_PP_CAT(trait,_detail_types) \
+ { \
+ template<BOOST_TTI_DETAIL_TP_PMEMF> \
+ struct helper; \
+ \
+ template<class BOOST_TTI_DETAIL_TP_EC> \
+ static ::boost::type_traits::yes_type chkt(helper<&BOOST_TTI_DETAIL_TP_EC::name> *); \
+ \
+ template<class BOOST_TTI_DETAIL_TP_EC> \
+ static ::boost::type_traits::no_type chkt(...); \
\
- typedef boost::mpl::bool_<value> type; \
+ typedef boost::mpl::bool_<sizeof(chkt<BOOST_TTI_DETAIL_TP_C>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type)> type; \
}; \
/**/
-#define BOOST_TTI_DETAIL_TRAIT_HAS_CALL_TYPES_MEMBER_FUNCTION(trait,name) \
+#endif
+
+#define BOOST_TTI_DETAIL_TRAIT_CTMF_INVOKE(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_TYPES_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_R,class BOOST_TTI_DETAIL_TP_FS,class BOOST_TTI_DETAIL_TP_TAG> \
- struct BOOST_PP_CAT(trait,_detail_call_types) : \
+ struct BOOST_PP_CAT(trait,_detail_ctmf_invoke) : \
BOOST_PP_CAT(trait,_detail_types) \
< \
typename BOOST_TTI_NAMESPACE::detail::ptmf_seq<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_R,BOOST_TTI_DETAIL_TP_FS,BOOST_TTI_DETAIL_TP_TAG>::type, \
@@ -58,6 +80,26 @@
}; \
/**/
+#define BOOST_TTI_DETAIL_TRAIT_HAS_CALL_TYPES_MEMBER_FUNCTION(trait,name) \
+ BOOST_TTI_DETAIL_TRAIT_CTMF_INVOKE(trait,name) \
+ template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_R,class BOOST_TTI_DETAIL_TP_FS,class BOOST_TTI_DETAIL_TP_TAG> \
+ struct BOOST_PP_CAT(trait,_detail_call_types) : \
+ boost::mpl::eval_if \
+ < \
+ boost::is_class<BOOST_TTI_DETAIL_TP_T>, \
+ BOOST_PP_CAT(trait,_detail_ctmf_invoke) \
+ < \
+ BOOST_TTI_DETAIL_TP_T, \
+ BOOST_TTI_DETAIL_TP_R, \
+ BOOST_TTI_DETAIL_TP_FS, \
+ BOOST_TTI_DETAIL_TP_TAG \
+ >, \
+ boost::mpl::false_ \
+ > \
+ { \
+ }; \
+/**/
+
#define BOOST_TTI_DETAIL_TRAIT_CHECK_HAS_COMP_MEMBER_FUNCTION(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_COMP_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T> \
@@ -72,9 +114,7 @@
BOOST_TTI_DETAIL_TRAIT_HAS_CALL_TYPES_MEMBER_FUNCTION(trait,name) \
BOOST_TTI_DETAIL_TRAIT_CHECK_HAS_COMP_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_R,class BOOST_TTI_DETAIL_TP_FS,class BOOST_TTI_DETAIL_TP_TAG> \
- struct BOOST_PP_CAT(trait,_detail_hmf) \
- { \
- typedef typename \
+ struct BOOST_PP_CAT(trait,_detail_hmf) : \
boost::mpl::eval_if \
< \
boost::mpl::and_ \
@@ -85,9 +125,8 @@
>, \
BOOST_PP_CAT(trait,_detail_check_comp)<BOOST_TTI_DETAIL_TP_T>, \
BOOST_PP_CAT(trait,_detail_call_types)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_R,BOOST_TTI_DETAIL_TP_FS,BOOST_TTI_DETAIL_TP_TAG> \
- >::type type; \
- \
- BOOST_STATIC_CONSTANT(bool,value=type::value); \
+ > \
+ { \
}; \
/**/
diff --git a/3party/boost/boost/tti/detail/dmem_type.hpp b/3party/boost/boost/tti/detail/dmem_type.hpp
index f57d145723..53c7c81784 100644
--- a/3party/boost/boost/tti/detail/dmem_type.hpp
+++ b/3party/boost/boost/tti/detail/dmem_type.hpp
@@ -8,15 +8,33 @@
#define BOOST_TTI_DETAIL_MEM_TYPE_HPP
#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/has_xxx.hpp>
#include <boost/preprocessor/cat.hpp>
+#include <boost/type_traits/is_class.hpp>
-#define BOOST_TTI_DETAIL_TRAIT_HAS_TYPE_MEMBER_TYPE(trait,name) \
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TYPE_MEMBER_TYPE_OP(trait,name) \
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(BOOST_PP_CAT(trait,_detail_mpl), name, false) \
template<class BOOST_TTI_DETAIL_TP_T> \
+ struct BOOST_PP_CAT(trait,_detail_op) : \
+ BOOST_PP_CAT(trait,_detail_mpl)<BOOST_TTI_DETAIL_TP_T> \
+ { \
+ }; \
+/**/
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TYPE_MEMBER_TYPE(trait,name) \
+ BOOST_TTI_DETAIL_TRAIT_HAS_TYPE_MEMBER_TYPE_OP(trait,name) \
+ template<class BOOST_TTI_DETAIL_TP_T> \
struct BOOST_PP_CAT(trait,_detail) \
{ \
- typedef typename BOOST_PP_CAT(trait,_detail_mpl)<BOOST_TTI_DETAIL_TP_T>::type type; \
+ typedef typename \
+ boost::mpl::eval_if \
+ < \
+ boost::is_class<BOOST_TTI_DETAIL_TP_T>, \
+ BOOST_PP_CAT(trait,_detail_op)<BOOST_TTI_DETAIL_TP_T>, \
+ boost::mpl::false_ \
+ >::type type; \
\
BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
diff --git a/3party/boost/boost/tti/detail/dstatic_mem_data.hpp b/3party/boost/boost/tti/detail/dstatic_mem_data.hpp
index 96b760a22c..5a3b537d40 100644
--- a/3party/boost/boost/tti/detail/dstatic_mem_data.hpp
+++ b/3party/boost/boost/tti/detail/dstatic_mem_data.hpp
@@ -10,15 +10,17 @@
#include <boost/config.hpp>
#include <boost/function_types/is_function.hpp>
#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
#include <boost/preprocessor/cat.hpp>
+#include <boost/type_traits/is_class.hpp>
#include <boost/type_traits/detail/yes_no_type.hpp>
#include <boost/tti/detail/dnullptr.hpp>
#if defined(BOOST_MSVC)
-#define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) \
+#define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA_OP(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
- struct BOOST_PP_CAT(trait,_detail_hsd) \
+ struct BOOST_PP_CAT(trait,_detail_hsd_op) \
{ \
template<bool,typename BOOST_TTI_DETAIL_TP_U> \
struct menable_if; \
@@ -55,16 +57,33 @@
}; \
\
typedef typename ttc_sd<BOOST_TTI_DETAIL_TP_TYPE,BOOST_TTI_DETAIL_TP_T>::type type; \
+ }; \
+/**/
+
+#elif defined(__SUNPRO_CC)
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA_OP(trait,name) \
+ template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
+ struct BOOST_PP_CAT(trait,_detail_hsd_op) \
+ { \
+ template<BOOST_TTI_DETAIL_TP_TYPE *> \
+ struct helper {}; \
+ \
+ template<class BOOST_TTI_DETAIL_TP_U> \
+ static ::boost::type_traits::yes_type chkt(helper<&BOOST_TTI_DETAIL_TP_U::name> *); \
\
- BOOST_STATIC_CONSTANT(bool,value=type::value); \
+ template<class BOOST_TTI_DETAIL_TP_U> \
+ static ::boost::type_traits::no_type chkt(...); \
+ \
+ typedef boost::mpl::bool_<(!boost::function_types::is_function<BOOST_TTI_DETAIL_TP_TYPE>::value) && (sizeof(chkt<BOOST_TTI_DETAIL_TP_T>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type))> type; \
}; \
/**/
-#else // !defined(BOOST_MSVC)
+#else
-#define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) \
+#define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA_OP(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
- struct BOOST_PP_CAT(trait,_detail_hsd) \
+ struct BOOST_PP_CAT(trait,_detail_hsd_op) \
{ \
template<BOOST_TTI_DETAIL_TP_TYPE *> \
struct helper; \
@@ -75,12 +94,24 @@
template<class BOOST_TTI_DETAIL_TP_U> \
static ::boost::type_traits::no_type chkt(...); \
\
- BOOST_STATIC_CONSTANT(bool,value=(!boost::function_types::is_function<BOOST_TTI_DETAIL_TP_TYPE>::value) && (sizeof(chkt<BOOST_TTI_DETAIL_TP_T>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type))); \
- \
- typedef boost::mpl::bool_<value> type; \
+ typedef boost::mpl::bool_<(!boost::function_types::is_function<BOOST_TTI_DETAIL_TP_TYPE>::value) && (sizeof(chkt<BOOST_TTI_DETAIL_TP_T>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type))> type; \
}; \
/**/
#endif // defined(BOOST_MSVC)
+#define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) \
+ BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA_OP(trait,name) \
+ template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
+ struct BOOST_PP_CAT(trait,_detail_hsd) : \
+ boost::mpl::eval_if \
+ < \
+ boost::is_class<BOOST_TTI_DETAIL_TP_T>, \
+ BOOST_PP_CAT(trait,_detail_hsd_op)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_TYPE>, \
+ boost::mpl::false_ \
+ > \
+ { \
+ }; \
+/**/
+
#endif // BOOST_TTI_DETAIL_STATIC_MEM_DATA_HPP
diff --git a/3party/boost/boost/tti/detail/dstatic_mem_fun.hpp b/3party/boost/boost/tti/detail/dstatic_mem_fun.hpp
index 8ae59ab01b..35b46e4b3e 100644
--- a/3party/boost/boost/tti/detail/dstatic_mem_fun.hpp
+++ b/3party/boost/boost/tti/detail/dstatic_mem_fun.hpp
@@ -7,7 +7,6 @@
#if !defined(BOOST_TTI_DETAIL_STATIC_MEM_FUN_HPP)
#define BOOST_TTI_DETAIL_STATIC_MEM_FUN_HPP
-#include <boost/config.hpp>
#include <boost/function_types/is_function.hpp>
#include <boost/function_types/property_tags.hpp>
#include <boost/mpl/and.hpp>
@@ -19,15 +18,18 @@
#include <boost/tti/detail/dnullptr.hpp>
#include <boost/tti/detail/dtfunction.hpp>
#include <boost/tti/gen/namespace_gen.hpp>
-#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/is_class.hpp>
#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+
+#if defined(__SUNPRO_CC)
#define BOOST_TTI_DETAIL_TRAIT_IMPL_HAS_STATIC_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
struct BOOST_PP_CAT(trait,_detail_ihsmf) \
{ \
template<BOOST_TTI_DETAIL_TP_TYPE *> \
- struct helper; \
+ struct helper {}; \
\
template<class BOOST_TTI_DETAIL_TP_U> \
static ::boost::type_traits::yes_type chkt(helper<&BOOST_TTI_DETAIL_TP_U::name> *); \
@@ -35,16 +37,35 @@
template<class BOOST_TTI_DETAIL_TP_U> \
static ::boost::type_traits::no_type chkt(...); \
\
- BOOST_STATIC_CONSTANT(bool,value=sizeof(chkt<BOOST_TTI_DETAIL_TP_T>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type)); \
+ typedef boost::mpl::bool_<sizeof(chkt<BOOST_TTI_DETAIL_TP_T>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type)> type; \
+ }; \
+/**/
+
+#else
+
+#define BOOST_TTI_DETAIL_TRAIT_IMPL_HAS_STATIC_MEMBER_FUNCTION(trait,name) \
+ template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
+ struct BOOST_PP_CAT(trait,_detail_ihsmf) \
+ { \
+ template<BOOST_TTI_DETAIL_TP_TYPE *> \
+ struct helper; \
+ \
+ template<class BOOST_TTI_DETAIL_TP_U> \
+ static ::boost::type_traits::yes_type chkt(helper<&BOOST_TTI_DETAIL_TP_U::name> *); \
+ \
+ template<class BOOST_TTI_DETAIL_TP_U> \
+ static ::boost::type_traits::no_type chkt(...); \
\
- typedef boost::mpl::bool_<value> type; \
+ typedef boost::mpl::bool_<sizeof(chkt<BOOST_TTI_DETAIL_TP_T>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type)> type; \
}; \
/**/
-#define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait,name) \
+#endif
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_FUNCTION_OP(trait,name) \
BOOST_TTI_DETAIL_TRAIT_IMPL_HAS_STATIC_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_R,class BOOST_TTI_DETAIL_TP_FS,class BOOST_TTI_DETAIL_TP_TAG> \
- struct BOOST_PP_CAT(trait,_detail_hsmf) : \
+ struct BOOST_PP_CAT(trait,_detail_hsmf_op) : \
BOOST_PP_CAT(trait,_detail_ihsmf) \
< \
BOOST_TTI_DETAIL_TP_T, \
@@ -65,4 +86,18 @@
}; \
/**/
+#define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait,name) \
+ BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_FUNCTION_OP(trait,name) \
+ template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_R,class BOOST_TTI_DETAIL_TP_FS,class BOOST_TTI_DETAIL_TP_TAG> \
+ struct BOOST_PP_CAT(trait,_detail_hsmf) : \
+ boost::mpl::eval_if \
+ < \
+ boost::is_class<BOOST_TTI_DETAIL_TP_T>, \
+ BOOST_PP_CAT(trait,_detail_hsmf_op)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_R,BOOST_TTI_DETAIL_TP_FS,BOOST_TTI_DETAIL_TP_TAG>, \
+ boost::mpl::false_ \
+ > \
+ { \
+ }; \
+/**/
+
#endif // BOOST_TTI_DETAIL_STATIC_MEM_FUN_HPP
diff --git a/3party/boost/boost/tti/detail/dtemplate.hpp b/3party/boost/boost/tti/detail/dtemplate.hpp
index 66d36e2b5a..484cc59459 100644
--- a/3party/boost/boost/tti/detail/dtemplate.hpp
+++ b/3party/boost/boost/tti/detail/dtemplate.hpp
@@ -8,10 +8,13 @@
#define BOOST_TTI_DETAIL_TEMPLATE_HPP
#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/has_xxx.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/debug/assert.hpp>
#include <boost/preprocessor/facilities/is_empty.hpp>
+#include <boost/type_traits/is_class.hpp>
#define BOOST_TTI_DETAIL_IS_HELPER_BOOST_PP_NIL
@@ -36,13 +39,29 @@
(trait,name,params) \
/**/
-#define BOOST_TTI_DETAIL_TRAIT_HAS_TEMPLATE(trait,name,params) \
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TEMPLATE_THT(trait,name) \
BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(BOOST_PP_CAT(trait,_detail_mpl), name, false) \
template<class BOOST_TTI_DETAIL_TP_T> \
- struct trait : \
+ struct BOOST_PP_CAT(trait,_tht) : \
BOOST_PP_CAT(trait,_detail_mpl)<BOOST_TTI_DETAIL_TP_T> \
{ \
}; \
/**/
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TEMPLATE(trait,name,params) \
+ BOOST_TTI_DETAIL_TRAIT_HAS_TEMPLATE_THT(trait,name) \
+ template<class BOOST_TTI_DETAIL_TP_T> \
+ struct trait \
+ { \
+ typedef typename \
+ boost::mpl::eval_if \
+ < \
+ boost::is_class<BOOST_TTI_DETAIL_TP_T>, \
+ BOOST_PP_CAT(trait,_tht)<BOOST_TTI_DETAIL_TP_T>, \
+ boost::mpl::false_ \
+ >::type type; \
+ BOOST_STATIC_CONSTANT(bool,value=type::value); \
+ }; \
+/**/
+
#endif // !BOOST_TTI_DETAIL_TEMPLATE_HPP
diff --git a/3party/boost/boost/tti/detail/dtemplate_params.hpp b/3party/boost/boost/tti/detail/dtemplate_params.hpp
index 67768764a3..cfc1612e14 100644
--- a/3party/boost/boost/tti/detail/dtemplate_params.hpp
+++ b/3party/boost/boost/tti/detail/dtemplate_params.hpp
@@ -9,6 +9,7 @@
#include <boost/config.hpp>
#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/has_xxx.hpp>
#include <boost/preprocessor/arithmetic/add.hpp>
#include <boost/preprocessor/arithmetic/sub.hpp>
@@ -19,6 +20,7 @@
#include <boost/preprocessor/repetition/enum.hpp>
#include <boost/preprocessor/array/enum.hpp>
#include <boost/preprocessor/array/size.hpp>
+#include <boost/type_traits/is_class.hpp>
#if !defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE)
@@ -33,8 +35,9 @@ BOOST_PP_ARRAY_ELEM(BOOST_PP_ADD(4,n),args) \
typename BOOST_TTI_DETAIL_TP_FALLBACK_ \
= boost::mpl::bool_< BOOST_PP_ARRAY_ELEM(3, args) > \
> \
- class BOOST_PP_ARRAY_ELEM(0, args) \
+ struct BOOST_PP_ARRAY_ELEM(0, args) \
{ \
+ private: \
introspect_macro(args) \
public: \
static const bool value \
@@ -186,15 +189,31 @@ BOOST_PP_ARRAY_ELEM(BOOST_PP_ADD(4,n),args) \
#endif // !BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
-#define BOOST_TTI_DETAIL_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait,name,tpArray) \
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TEMPLATE_CHECK_PARAMS_OP(trait,name,tpArray) \
BOOST_TTI_DETAIL_TRAIT_CALL_HAS_TEMPLATE_CHECK_PARAMS(BOOST_PP_CAT(trait,_detail),name,tpArray) \
template<class BOOST_TTI_DETAIL_TP_T> \
- struct trait : \
+ struct BOOST_PP_CAT(trait,_detail_cp_op) : \
BOOST_PP_CAT(trait,_detail)<BOOST_TTI_DETAIL_TP_T> \
{ \
}; \
/**/
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait,name,tpArray) \
+ BOOST_TTI_DETAIL_TRAIT_HAS_TEMPLATE_CHECK_PARAMS_OP(trait,name,tpArray) \
+ template<class BOOST_TTI_DETAIL_TP_T> \
+ struct trait \
+ { \
+ typedef typename \
+ boost::mpl::eval_if \
+ < \
+ boost::is_class<BOOST_TTI_DETAIL_TP_T>, \
+ BOOST_PP_CAT(trait,_detail_cp_op)<BOOST_TTI_DETAIL_TP_T>, \
+ boost::mpl::false_ \
+ >::type type; \
+ BOOST_STATIC_CONSTANT(bool,value=type::value); \
+ }; \
+/**/
+
#if !defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE)
#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
diff --git a/3party/boost/boost/tti/detail/dtype.hpp b/3party/boost/boost/tti/detail/dtype.hpp
index 7e154c1789..45964cf2ab 100644
--- a/3party/boost/boost/tti/detail/dtype.hpp
+++ b/3party/boost/boost/tti/detail/dtype.hpp
@@ -10,11 +10,13 @@
#include <boost/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/has_xxx.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/tti/detail/ddeftype.hpp>
#include <boost/tti/detail/dlambda.hpp>
#include <boost/tti/gen/namespace_gen.hpp>
+#include <boost/type_traits/is_class.hpp>
#define BOOST_TTI_DETAIL_TRAIT_INVOKE_HAS_TYPE(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_MFC> \
@@ -24,29 +26,54 @@ struct BOOST_PP_CAT(trait,_detail_type_invoke) : \
}; \
/**/
-#define BOOST_TTI_DETAIL_TRAIT_HAS_TYPE(trait,name) \
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TYPE_OP_CHOOSE(trait,name) \
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(BOOST_PP_CAT(trait,_detail_type_mpl), name, false) \
BOOST_TTI_DETAIL_TRAIT_INVOKE_HAS_TYPE(trait,name) \
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_U,class BOOST_TTI_DETAIL_TP_B> \
-struct BOOST_PP_CAT(trait,_detail_type) \
+struct BOOST_PP_CAT(trait,_detail_type_op_choose) \
{ \
BOOST_MPL_ASSERT((BOOST_TTI_NAMESPACE::detail::is_lambda_expression<BOOST_TTI_DETAIL_TP_U>)); \
typedef typename BOOST_PP_CAT(trait,_detail_type_invoke)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_U>::type type; \
- BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
\
template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_U> \
-struct BOOST_PP_CAT(trait,_detail_type)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_U,boost::mpl::false_::type> \
+struct BOOST_PP_CAT(trait,_detail_type_op_choose)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_U,boost::mpl::false_::type> : \
+ boost::mpl::false_ \
{ \
- typedef boost::mpl::false_::type type; \
- BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
\
template<class BOOST_TTI_DETAIL_TP_T> \
-struct BOOST_PP_CAT(trait,_detail_type)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_NAMESPACE::detail::deftype,boost::mpl::true_::type> \
+struct BOOST_PP_CAT(trait,_detail_type_op_choose)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_NAMESPACE::detail::deftype,boost::mpl::true_::type> : \
+ boost::mpl::true_ \
+ { \
+ }; \
+/**/
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TYPE_OP(trait,name) \
+BOOST_TTI_DETAIL_TRAIT_HAS_TYPE_OP_CHOOSE(trait,name) \
+template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_U> \
+struct BOOST_PP_CAT(trait,_detail_type_op) : \
+ BOOST_PP_CAT(trait,_detail_type_op_choose) \
+ < \
+ BOOST_TTI_DETAIL_TP_T, \
+ BOOST_TTI_DETAIL_TP_U, \
+ typename BOOST_PP_CAT(trait,_detail_type_mpl)<BOOST_TTI_DETAIL_TP_T>::type \
+ > \
+ { \
+ }; \
+/**/
+
+#define BOOST_TTI_DETAIL_TRAIT_HAS_TYPE(trait,name) \
+BOOST_TTI_DETAIL_TRAIT_HAS_TYPE_OP(trait,name) \
+template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_U> \
+struct BOOST_PP_CAT(trait,_detail_type) : \
+ boost::mpl::eval_if \
+ < \
+ boost::is_class<BOOST_TTI_DETAIL_TP_T>, \
+ BOOST_PP_CAT(trait,_detail_type_op)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_U>, \
+ boost::mpl::false_ \
+ > \
{ \
- typedef boost::mpl::true_::type type; \
- BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
/**/
diff --git a/3party/boost/boost/tti/detail/dvm_template_params.hpp b/3party/boost/boost/tti/detail/dvm_template_params.hpp
index 57420dd5f8..a8bc2afcaf 100644
--- a/3party/boost/boost/tti/detail/dvm_template_params.hpp
+++ b/3party/boost/boost/tti/detail/dvm_template_params.hpp
@@ -12,6 +12,7 @@
#if BOOST_PP_VARIADICS
+#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/has_xxx.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/preprocessor/arithmetic/add.hpp>
@@ -27,6 +28,7 @@
#include <boost/preprocessor/variadic/to_seq.hpp>
#include <boost/tti/detail/dtemplate.hpp>
#include <boost/tti/detail/dtemplate_params.hpp>
+#include <boost/type_traits/is_class.hpp>
#if !defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE)
#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
@@ -132,13 +134,27 @@
) \
/**/
-#define BOOST_TTI_DETAIL_VM_CALL_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait,name,...) \
+#define BOOST_TTI_DETAIL_VM_CT_INVOKE(trait,name,...) \
BOOST_TTI_DETAIL_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(BOOST_PP_CAT(trait,_detail),name,__VA_ARGS__) \
template<class BOOST_TTI_DETAIL_TP_T> \
+ struct BOOST_PP_CAT(trait,_detail_vm_ct_invoke) : \
+ BOOST_PP_CAT(trait,_detail)<BOOST_TTI_DETAIL_TP_T> \
+ { \
+ }; \
+/**/
+
+#define BOOST_TTI_DETAIL_VM_CALL_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait,name,...) \
+ BOOST_TTI_DETAIL_VM_CT_INVOKE(trait,name,__VA_ARGS__) \
+ template<class BOOST_TTI_DETAIL_TP_T> \
struct trait \
{ \
- typedef typename BOOST_PP_CAT(trait,_detail)<BOOST_TTI_DETAIL_TP_T>::type type; \
- \
+ typedef typename \
+ boost::mpl::eval_if \
+ < \
+ boost::is_class<BOOST_TTI_DETAIL_TP_T>, \
+ BOOST_PP_CAT(trait,_detail_vm_ct_invoke)<BOOST_TTI_DETAIL_TP_T>, \
+ boost::mpl::false_ \
+ >::type type; \
BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
/**/
diff --git a/3party/boost/boost/tti/has_data.hpp b/3party/boost/boost/tti/has_data.hpp
index dbaaa45702..b967891e83 100644
--- a/3party/boost/boost/tti/has_data.hpp
+++ b/3party/boost/boost/tti/has_data.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_TTI_HAS_DATA_HPP)
#define BOOST_TTI_HAS_DATA_HPP
+#include <boost/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/tti/gen/has_data_gen.hpp>
@@ -50,13 +51,15 @@
#define BOOST_TTI_TRAIT_HAS_DATA(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_DATA(trait,name) \
template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> \
- struct trait : \
+ struct trait \
+ { \
+ typedef typename \
BOOST_PP_CAT(trait,_detail_hd) \
< \
typename boost::remove_const<BOOST_TTI_TP_T>::type, \
BOOST_TTI_TP_TYPE \
- > \
- { \
+ >::type type; \
+ BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
/**/
diff --git a/3party/boost/boost/tti/has_function.hpp b/3party/boost/boost/tti/has_function.hpp
index 329b575ee7..211590ba94 100644
--- a/3party/boost/boost/tti/has_function.hpp
+++ b/3party/boost/boost/tti/has_function.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_TTI_HAS_FUNCTION_HPP)
#define BOOST_TTI_HAS_FUNCTION_HPP
+#include <boost/config.hpp>
#include <boost/function_types/property_tags.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/preprocessor/cat.hpp>
@@ -58,9 +59,11 @@
#define BOOST_TTI_TRAIT_HAS_FUNCTION(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_FUNCTION(trait,name) \
template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS = boost::mpl::vector<>,class BOOST_TTI_TP_TAG = boost::function_types::null_tag> \
- struct trait : \
- BOOST_PP_CAT(trait,_detail_hf)<BOOST_TTI_TP_T,BOOST_TTI_TP_R,BOOST_TTI_TP_FS,BOOST_TTI_TP_TAG> \
+ struct trait \
{ \
+ typedef typename \
+ BOOST_PP_CAT(trait,_detail_hf)<BOOST_TTI_TP_T,BOOST_TTI_TP_R,BOOST_TTI_TP_FS,BOOST_TTI_TP_TAG>::type type; \
+ BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
/**/
diff --git a/3party/boost/boost/tti/has_member_data.hpp b/3party/boost/boost/tti/has_member_data.hpp
index c2bd5df3cf..84988f3920 100644
--- a/3party/boost/boost/tti/has_member_data.hpp
+++ b/3party/boost/boost/tti/has_member_data.hpp
@@ -7,12 +7,11 @@
#if !defined(BOOST_TTI_HAS_MEMBER_DATA_HPP)
#define BOOST_TTI_HAS_MEMBER_DATA_HPP
+#include <boost/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/tti/detail/ddeftype.hpp>
#include <boost/tti/detail/dmem_data.hpp>
#include <boost/tti/gen/has_member_data_gen.hpp>
-#include <boost/tti/gen/namespace_gen.hpp>
-#include <boost/type_traits/remove_const.hpp>
/*
@@ -56,16 +55,15 @@
#define BOOST_TTI_TRAIT_HAS_MEMBER_DATA(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_DATA(trait,name) \
template<class BOOST_TTI_TP_ET,class BOOST_TTI_TP_TYPE = BOOST_TTI_NAMESPACE::detail::deftype> \
- struct trait : \
- BOOST_PP_CAT(trait,_detail_hmd) \
- < \
- typename BOOST_TTI_NAMESPACE::detail::dmem_get_type<BOOST_TTI_TP_ET,BOOST_TTI_TP_TYPE>::type, \
- typename boost::remove_const \
- < \
- typename BOOST_TTI_NAMESPACE::detail::dmem_get_enclosing<BOOST_TTI_TP_ET,BOOST_TTI_TP_TYPE>::type \
- >::type \
- > \
+ struct trait \
{ \
+ typedef typename \
+ BOOST_PP_CAT(trait,_detail_hmd) \
+ < \
+ BOOST_TTI_TP_ET, \
+ BOOST_TTI_TP_TYPE \
+ >::type type; \
+ BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
/**/
diff --git a/3party/boost/boost/tti/has_member_function.hpp b/3party/boost/boost/tti/has_member_function.hpp
index 95f679eb31..3aa247638e 100644
--- a/3party/boost/boost/tti/has_member_function.hpp
+++ b/3party/boost/boost/tti/has_member_function.hpp
@@ -7,6 +7,7 @@
#if !defined(BOOST_TTI_HAS_MEMBER_FUNCTION_HPP)
#define BOOST_TTI_HAS_MEMBER_FUNCTION_HPP
+#include <boost/config.hpp>
#include <boost/function_types/property_tags.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/preprocessor/cat.hpp>
@@ -64,9 +65,11 @@
#define BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R = BOOST_TTI_NAMESPACE::detail::deftype,class BOOST_TTI_TP_FS = boost::mpl::vector<>,class BOOST_TTI_TP_TAG = boost::function_types::null_tag> \
- struct trait : \
- BOOST_PP_CAT(trait,_detail_hmf)<BOOST_TTI_TP_T,BOOST_TTI_TP_R,BOOST_TTI_TP_FS,BOOST_TTI_TP_TAG> \
+ struct trait \
{ \
+ typedef typename \
+ BOOST_PP_CAT(trait,_detail_hmf)<BOOST_TTI_TP_T,BOOST_TTI_TP_R,BOOST_TTI_TP_FS,BOOST_TTI_TP_TAG>::type type; \
+ BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
/**/
diff --git a/3party/boost/boost/tti/has_static_member_data.hpp b/3party/boost/boost/tti/has_static_member_data.hpp
index b8c592a085..d3449be77c 100644
--- a/3party/boost/boost/tti/has_static_member_data.hpp
+++ b/3party/boost/boost/tti/has_static_member_data.hpp
@@ -47,9 +47,11 @@
#define BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) \
template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> \
- struct trait : \
- BOOST_PP_CAT(trait,_detail_hsd)<BOOST_TTI_TP_T,BOOST_TTI_TP_TYPE> \
+ struct trait \
{ \
+ typedef typename \
+ BOOST_PP_CAT(trait,_detail_hsd)<BOOST_TTI_TP_T,BOOST_TTI_TP_TYPE>::type type; \
+ BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
/**/
diff --git a/3party/boost/boost/tti/has_static_member_function.hpp b/3party/boost/boost/tti/has_static_member_function.hpp
index 0b3d57ee5a..d558f04d49 100644
--- a/3party/boost/boost/tti/has_static_member_function.hpp
+++ b/3party/boost/boost/tti/has_static_member_function.hpp
@@ -1,5 +1,5 @@
-// (C) Copyright Edward Diener 2011,2012
+// (C) Copyright Edward Diener 2011,2012,2013
// 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).
@@ -7,6 +7,7 @@
#if !defined(BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_HPP)
#define BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_HPP
+#include <boost/config.hpp>
#include <boost/function_types/property_tags.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/preprocessor/cat.hpp>
@@ -60,9 +61,11 @@
#define BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait,name) \
BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait,name) \
template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS = boost::mpl::vector<>,class BOOST_TTI_TP_TAG = boost::function_types::null_tag> \
- struct trait : \
- BOOST_PP_CAT(trait,_detail_hsmf)<BOOST_TTI_TP_T,BOOST_TTI_TP_R,BOOST_TTI_TP_FS,BOOST_TTI_TP_TAG> \
+ struct trait \
{ \
+ typedef typename \
+ BOOST_PP_CAT(trait,_detail_hsmf)<BOOST_TTI_TP_T,BOOST_TTI_TP_R,BOOST_TTI_TP_FS,BOOST_TTI_TP_TAG>::type type; \
+ BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
/**/
diff --git a/3party/boost/boost/tti/has_type.hpp b/3party/boost/boost/tti/has_type.hpp
index 51b082cb65..cf413e5691 100644
--- a/3party/boost/boost/tti/has_type.hpp
+++ b/3party/boost/boost/tti/has_type.hpp
@@ -7,7 +7,7 @@
#if !defined(BOOST_TTI_HAS_TYPE_HPP)
#define BOOST_TTI_HAS_TYPE_HPP
-#include <boost/mpl/bool.hpp>
+#include <boost/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/tti/gen/has_type_gen.hpp>
#include <boost/tti/gen/namespace_gen.hpp>
@@ -89,14 +89,11 @@
class BOOST_TTI_TP_T, \
class BOOST_TTI_TP_U = BOOST_TTI_NAMESPACE::detail::deftype \
> \
- struct trait : \
- BOOST_PP_CAT(trait,_detail_type) \
- < \
- BOOST_TTI_TP_T, \
- BOOST_TTI_TP_U, \
- typename BOOST_PP_CAT(trait,_detail_type_mpl)<BOOST_TTI_TP_T>::type \
- > \
+ struct trait \
{ \
+ typedef typename \
+ BOOST_PP_CAT(trait,_detail_type)<BOOST_TTI_TP_T,BOOST_TTI_TP_U>::type type; \
+ BOOST_STATIC_CONSTANT(bool,value=type::value); \
}; \
/**/
diff --git a/3party/boost/boost/tuple/detail/tuple_basic.hpp b/3party/boost/boost/tuple/detail/tuple_basic.hpp
index 88f0d9023f..5f26c7fdcb 100644
--- a/3party/boost/boost/tuple/detail/tuple_basic.hpp
+++ b/3party/boost/boost/tuple/detail/tuple_basic.hpp
@@ -41,6 +41,11 @@
#include "boost/detail/workaround.hpp" // needed for BOOST_WORKAROUND
+#if BOOST_GCC >= 40700
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
+#endif
+
namespace boost {
namespace tuples {
@@ -208,7 +213,7 @@ template<int N, class HT, class TT>
inline typename access_traits<
typename element<N, cons<HT, TT> >::type
>::non_const_type
-get(cons<HT, TT>& c BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) {
+get(cons<HT, TT>& c) {
typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
apply<cons<HT, TT> > impl;
typedef BOOST_DEDUCED_TYPENAME impl::type cons_element;
@@ -222,10 +227,9 @@ template<int N, class HT, class TT>
inline typename access_traits<
typename element<N, cons<HT, TT> >::type
>::const_type
-get(const cons<HT, TT>& c BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) {
+get(const cons<HT, TT>& c) {
typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
apply<cons<HT, TT> > impl;
- typedef BOOST_DEDUCED_TYPENAME impl::type cons_element;
return impl::call(c).head;
}
@@ -399,7 +403,7 @@ struct cons<HT, null_type> {
typename access_traits<
typename element<N, self_type>::type
>::non_const_type
- get(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) {
+ get() {
return boost::tuples::get<N>(*this);
}
@@ -407,7 +411,7 @@ struct cons<HT, null_type> {
typename access_traits<
typename element<N, self_type>::type
>::const_type
- get(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) const {
+ get() const {
return boost::tuples::get<N>(*this);
}
@@ -975,6 +979,11 @@ inline void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
} // end of namespace boost
+#if BOOST_GCC >= 40700
+#pragma GCC diagnostic pop
+#endif
+
+
#endif // BOOST_TUPLE_BASIC_HPP
diff --git a/3party/boost/boost/tuple/detail/tuple_basic_no_partial_spec.hpp b/3party/boost/boost/tuple/detail/tuple_basic_no_partial_spec.hpp
deleted file mode 100644
index 7379bf8182..0000000000
--- a/3party/boost/boost/tuple/detail/tuple_basic_no_partial_spec.hpp
+++ /dev/null
@@ -1,865 +0,0 @@
-// - tuple_basic_no_partial_spec.hpp -----------------------------------------
-
-// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
-// Copyright (C) 2001 Douglas Gregor (gregod@rpi.edu)
-// Copyright (C) 2001 Gary Powell (gary.powell@sierra.com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// For more information, see http://www.boost.org or http://lambda.cs.utu.fi
-
-// Revision History
-// 14 02 01 Remove extra ';'. Also, fixed 10-parameter to make_tuple. (DG)
-// 10 02 01 Fixed "null_type" constructors.
-// Implemented comparison operators globally.
-// Hide element_type_ref and element_type_const_ref.
-// (DG).
-// 09 02 01 Extended to tuples of length 10. Changed comparison for
-// operator<()
-// to the same used by std::pair<>, added cnull_type() (GP)
-// 03 02 01 Initial Version from original tuple.hpp code by JJ. (DG)
-
-// -----------------------------------------------------------------
-
-#ifndef BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
-#define BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
-
-#include "boost/type_traits.hpp"
-#include "boost/utility/swap.hpp"
-#include <utility>
-
-#if defined BOOST_MSVC
-#pragma warning(disable:4518) // storage-class or type specifier(s) unexpected here; ignored
-#pragma warning(disable:4181) // qualifier applied to reference type ignored
-#pragma warning(disable:4227) // qualifier applied to reference type ignored
-#endif
-
-namespace boost {
-namespace tuples {
-
- // null_type denotes the end of a list built with "cons"
- struct null_type
- {
- null_type() {}
- null_type(const null_type&, const null_type&) {}
- };
-
- // a helper function to provide a const null_type type temporary
- inline const null_type cnull_type() { return null_type(); }
-
-// forward declaration of tuple
- template<
- typename T1 = null_type,
- typename T2 = null_type,
- typename T3 = null_type,
- typename T4 = null_type,
- typename T5 = null_type,
- typename T6 = null_type,
- typename T7 = null_type,
- typename T8 = null_type,
- typename T9 = null_type,
- typename T10 = null_type
- >
- class tuple;
-
-// forward declaration of cons
- template<typename Head, typename Tail = null_type>
- struct cons;
-
- namespace detail {
-
- // Takes a pointer and routes all assignments to whatever it points to
- template<typename T>
- struct assign_to_pointee
- {
- public:
- explicit assign_to_pointee(T* p) : ptr(p) {}
-
- template<typename Other>
- assign_to_pointee& operator=(const Other& other)
- {
- *ptr = other;
- return *this;
- }
-
- private:
- T* ptr;
- };
-
- // Swallows any assignment
- struct swallow_assign
- {
- template<typename T>
- swallow_assign const& operator=(const T&) const
- {
- return *this;
- }
- };
-
- template <typename T> struct add_const_reference : add_reference<typename add_const<T>::type> {};
-
- template <class MyTail>
- struct init_tail
- {
- // Each of vc6 and vc7 seem to require a different formulation
- // of this return type
- template <class H, class T>
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- static typename add_reference<typename add_const<T>::type>::type
-#else
- static typename add_const_reference<T>::type
-#endif
- execute( cons<H,T> const& u, long )
- {
- return u.get_tail();
- }
- };
-
- template <>
- struct init_tail<null_type>
- {
- template <class H>
- static null_type execute( cons<H,null_type> const& u, long )
- {
- return null_type();
- }
-
- template <class U>
- static null_type execute(U const&, ...)
- {
- return null_type();
- }
- private:
- template <class H, class T>
- void execute( cons<H,T> const&, int);
- };
-
- template <class Other>
- Other const&
- init_head( Other const& u, ... )
- {
- return u;
- }
-
- template <class H, class T>
- typename add_reference<typename add_const<H>::type>::type
- init_head( cons<H,T> const& u, int )
- {
- return u.get_head();
- }
-
- inline char**** init_head(null_type const&, int);
-
- } // end of namespace detail
-
- // cons builds a heterogenous list of types
- template<typename Head, typename Tail>
- struct cons
- {
- typedef cons self_type;
- typedef Head head_type;
- typedef Tail tail_type;
-
- private:
- typedef typename boost::add_reference<head_type>::type head_ref;
- typedef typename boost::add_reference<tail_type>::type tail_ref;
- typedef typename detail::add_const_reference<head_type>::type head_cref;
- typedef typename detail::add_const_reference<tail_type>::type tail_cref;
- public:
- head_type head;
- tail_type tail;
-
- head_ref get_head() { return head; }
- tail_ref get_tail() { return tail; }
-
- head_cref get_head() const { return head; }
- tail_cref get_tail() const { return tail; }
-
- cons() : head(), tail() {}
-
-#if defined BOOST_MSVC
- template<typename Tail>
- cons(head_cref h /* = head_type() */, // causes MSVC 6.5 to barf.
- const Tail& t) : head(h), tail(t.head, t.tail)
- {
- }
-
- cons(head_cref h /* = head_type() */, // causes MSVC 6.5 to barf.
- const null_type& t) : head(h), tail(t)
- {
- }
-
-#else
- template<typename T>
- explicit cons(head_cref h, const T& t) :
- head(h), tail(t.head, t.tail)
- {
- }
-
- explicit cons(head_cref h = head_type(),
- tail_cref t = tail_type()) :
- head(h), tail(t)
- {
- }
-#endif
-
- template <class U>
- cons( const U& u )
- : head(detail::init_head(u, 0))
- , tail(detail::init_tail<Tail>::execute(u, 0L))
- {
- }
-
- template<typename Other>
- cons& operator=(const Other& other)
- {
- head = other.head;
- tail = other.tail;
- return *this;
- }
- };
-
- namespace detail {
-
- // Determines if the parameter is null_type
- template<typename T> struct is_null_type { enum { RET = 0 }; };
- template<> struct is_null_type<null_type> { enum { RET = 1 }; };
-
- /* Build a cons structure from the given Head and Tail. If both are null_type,
- return null_type. */
- template<typename Head, typename Tail>
- struct build_cons
- {
- private:
- enum { tail_is_null_type = is_null_type<Tail>::RET };
- public:
- typedef cons<Head, Tail> RET;
- };
-
- template<>
- struct build_cons<null_type, null_type>
- {
- typedef null_type RET;
- };
-
- // Map the N elements of a tuple into a cons list
- template<
- typename T1,
- typename T2 = null_type,
- typename T3 = null_type,
- typename T4 = null_type,
- typename T5 = null_type,
- typename T6 = null_type,
- typename T7 = null_type,
- typename T8 = null_type,
- typename T9 = null_type,
- typename T10 = null_type
- >
- struct map_tuple_to_cons
- {
- typedef typename detail::build_cons<T10, null_type >::RET cons10;
- typedef typename detail::build_cons<T9, cons10>::RET cons9;
- typedef typename detail::build_cons<T8, cons9>::RET cons8;
- typedef typename detail::build_cons<T7, cons8>::RET cons7;
- typedef typename detail::build_cons<T6, cons7>::RET cons6;
- typedef typename detail::build_cons<T5, cons6>::RET cons5;
- typedef typename detail::build_cons<T4, cons5>::RET cons4;
- typedef typename detail::build_cons<T3, cons4>::RET cons3;
- typedef typename detail::build_cons<T2, cons3>::RET cons2;
- typedef typename detail::build_cons<T1, cons2>::RET cons1;
- };
-
- // Workaround the lack of partial specialization in some compilers
- template<int N>
- struct _element_type
- {
- template<typename Tuple>
- struct inner
- {
- private:
- typedef typename Tuple::tail_type tail_type;
- typedef _element_type<N-1> next_elt_type;
-
- public:
- typedef typename _element_type<N-1>::template inner<tail_type>::RET RET;
- };
- };
-
- template<>
- struct _element_type<0>
- {
- template<typename Tuple>
- struct inner
- {
- typedef typename Tuple::head_type RET;
- };
- };
-
- } // namespace detail
-
-
- // Return the Nth type of the given Tuple
- template<int N, typename Tuple>
- struct element
- {
- private:
- typedef detail::_element_type<N> nth_type;
-
- public:
- typedef typename nth_type::template inner<Tuple>::RET RET;
- typedef RET type;
- };
-
- namespace detail {
-
-#if defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
- // special workaround for vc7:
-
- template <bool x>
- struct reference_adder
- {
- template <class T>
- struct rebind
- {
- typedef T& type;
- };
- };
-
- template <>
- struct reference_adder<true>
- {
- template <class T>
- struct rebind
- {
- typedef T type;
- };
- };
-
-
- // Return a reference to the Nth type of the given Tuple
- template<int N, typename Tuple>
- struct element_ref
- {
- private:
- typedef typename element<N, Tuple>::RET elt_type;
- enum { is_ref = is_reference<elt_type>::value };
-
- public:
- typedef reference_adder<is_ref>::rebind<elt_type>::type RET;
- typedef RET type;
- };
-
- // Return a const reference to the Nth type of the given Tuple
- template<int N, typename Tuple>
- struct element_const_ref
- {
- private:
- typedef typename element<N, Tuple>::RET elt_type;
- enum { is_ref = is_reference<elt_type>::value };
-
- public:
- typedef reference_adder<is_ref>::rebind<const elt_type>::type RET;
- typedef RET type;
- };
-
-#else // vc7
-
- // Return a reference to the Nth type of the given Tuple
- template<int N, typename Tuple>
- struct element_ref
- {
- private:
- typedef typename element<N, Tuple>::RET elt_type;
-
- public:
- typedef typename add_reference<elt_type>::type RET;
- typedef RET type;
- };
-
- // Return a const reference to the Nth type of the given Tuple
- template<int N, typename Tuple>
- struct element_const_ref
- {
- private:
- typedef typename element<N, Tuple>::RET elt_type;
-
- public:
- typedef typename add_reference<const elt_type>::type RET;
- typedef RET type;
- };
-#endif // vc7
-
- } // namespace detail
-
- // Get length of this tuple
- template<typename Tuple>
- struct length
- {
- BOOST_STATIC_CONSTANT(int, value = 1 + length<typename Tuple::tail_type>::value);
- };
-
- template<> struct length<tuple<> > {
- BOOST_STATIC_CONSTANT(int, value = 0);
- };
-
- template<>
- struct length<null_type>
- {
- BOOST_STATIC_CONSTANT(int, value = 0);
- };
-
- namespace detail {
-
- // Reference the Nth element in a tuple and retrieve it with "get"
- template<int N>
- struct get_class
- {
- template<typename Head, typename Tail>
- static inline
- typename detail::element_ref<N, cons<Head, Tail> >::RET
- get(cons<Head, Tail>& t)
- {
- return get_class<N-1>::get(t.tail);
- }
-
- template<typename Head, typename Tail>
- static inline
- typename detail::element_const_ref<N, cons<Head, Tail> >::RET
- get(const cons<Head, Tail>& t)
- {
- return get_class<N-1>::get(t.tail);
- }
- };
-
- template<>
- struct get_class<0>
- {
- template<typename Head, typename Tail>
- static inline
- typename add_reference<Head>::type
- get(cons<Head, Tail>& t)
- {
- return t.head;
- }
-
- template<typename Head, typename Tail>
- static inline
- typename add_reference<const Head>::type
- get(const cons<Head, Tail>& t)
- {
- return t.head;
- }
- };
-
- } // namespace detail
-
- // tuple class
- template<
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10
- >
- class tuple :
- public detail::map_tuple_to_cons<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::cons1
- {
- private:
- typedef detail::map_tuple_to_cons<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> mapped_tuple;
- typedef typename mapped_tuple::cons10 cons10;
- typedef typename mapped_tuple::cons9 cons9;
- typedef typename mapped_tuple::cons8 cons8;
- typedef typename mapped_tuple::cons7 cons7;
- typedef typename mapped_tuple::cons6 cons6;
- typedef typename mapped_tuple::cons5 cons5;
- typedef typename mapped_tuple::cons4 cons4;
- typedef typename mapped_tuple::cons3 cons3;
- typedef typename mapped_tuple::cons2 cons2;
- typedef typename mapped_tuple::cons1 cons1;
-
- typedef typename detail::add_const_reference<T1>::type t1_cref;
- typedef typename detail::add_const_reference<T2>::type t2_cref;
- typedef typename detail::add_const_reference<T3>::type t3_cref;
- typedef typename detail::add_const_reference<T4>::type t4_cref;
- typedef typename detail::add_const_reference<T5>::type t5_cref;
- typedef typename detail::add_const_reference<T6>::type t6_cref;
- typedef typename detail::add_const_reference<T7>::type t7_cref;
- typedef typename detail::add_const_reference<T8>::type t8_cref;
- typedef typename detail::add_const_reference<T9>::type t9_cref;
- typedef typename detail::add_const_reference<T10>::type t10_cref;
- public:
- typedef cons1 inherited;
- typedef tuple self_type;
-
- tuple() : cons1(T1(), cons2(T2(), cons3(T3(), cons4(T4(), cons5(T5(), cons6(T6(),cons7(T7(),cons8(T8(),cons9(T9(),cons10(T10()))))))))))
- {}
-
- tuple(
- t1_cref t1,
- t2_cref t2,
- t3_cref t3 = T3(),
- t4_cref t4 = T4(),
- t5_cref t5 = T5(),
- t6_cref t6 = T6(),
- t7_cref t7 = T7(),
- t8_cref t8 = T8(),
- t9_cref t9 = T9(),
- t10_cref t10 = T10()
- ) :
- cons1(t1, cons2(t2, cons3(t3, cons4(t4, cons5(t5, cons6(t6,cons7(t7,cons8(t8,cons9(t9,cons10(t10))))))))))
- {
- }
-
- explicit tuple(t1_cref t1)
- : cons1(t1, cons2(T2(), cons3(T3(), cons4(T4(), cons5(T5(), cons6(T6(),cons7(T7(),cons8(T8(),cons9(T9(),cons10(T10()))))))))))
- {}
-
- template<typename Head, typename Tail>
- tuple(const cons<Head, Tail>& other) :
- cons1(other.head, other.tail)
- {
- }
-
- template<typename First, typename Second>
- self_type& operator=(const std::pair<First, Second>& other)
- {
- this->head = other.first;
- this->tail.head = other.second;
- return *this;
- }
-
- template<typename Head, typename Tail>
- self_type& operator=(const cons<Head, Tail>& other)
- {
- this->head = other.head;
- this->tail = other.tail;
-
- return *this;
- }
- };
-
- namespace detail {
-
- template<int N> struct workaround_holder {};
-
- } // namespace detail
-
- template<int N, typename Head, typename Tail>
- typename detail::element_ref<N, cons<Head, Tail> >::RET
- get(cons<Head, Tail>& t, detail::workaround_holder<N>* = 0)
- {
- return detail::get_class<N>::get(t);
- }
-
- template<int N, typename Head, typename Tail>
- typename detail::element_const_ref<N, cons<Head, Tail> >::RET
- get(const cons<Head, Tail>& t, detail::workaround_holder<N>* = 0)
- {
- return detail::get_class<N>::get(t);
- }
-
- // Make a tuple
- template<typename T1>
- inline
- tuple<T1>
- make_tuple(const T1& t1)
- {
- return tuple<T1>(t1);
- }
-
- // Make a tuple
- template<typename T1, typename T2>
- inline
- tuple<T1, T2>
- make_tuple(const T1& t1, const T2& t2)
- {
- return tuple<T1, T2>(t1, t2);
- }
-
- // Make a tuple
- template<typename T1, typename T2, typename T3>
- inline
- tuple<T1, T2, T3>
- make_tuple(const T1& t1, const T2& t2, const T3& t3)
- {
- return tuple<T1, T2, T3>(t1, t2, t3);
- }
-
- // Make a tuple
- template<typename T1, typename T2, typename T3, typename T4>
- inline
- tuple<T1, T2, T3, T4>
- make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4)
- {
- return tuple<T1, T2, T3, T4>(t1, t2, t3, t4);
- }
-
- // Make a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5>
- inline
- tuple<T1, T2, T3, T4, T5>
- make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5)
- {
- return tuple<T1, T2, T3, T4, T5>(t1, t2, t3, t4, t5);
- }
-
- // Make a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
- inline
- tuple<T1, T2, T3, T4, T5, T6>
- make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6)
- {
- return tuple<T1, T2, T3, T4, T5, T6>(t1, t2, t3, t4, t5, t6);
- }
-
- // Make a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
- inline
- tuple<T1, T2, T3, T4, T5, T6, T7>
- make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7)
- {
- return tuple<T1, T2, T3, T4, T5, T6, T7>(t1, t2, t3, t4, t5, t6, t7);
- }
-
- // Make a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
- inline
- tuple<T1, T2, T3, T4, T5, T6, T7, T8>
- make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8)
- {
- return tuple<T1, T2, T3, T4, T5, T6, T7, T8>(t1, t2, t3, t4, t5, t6, t7, t8);
- }
-
- // Make a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
- inline
- tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>
- make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9)
- {
- return tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>(t1, t2, t3, t4, t5, t6, t7, t8, t9);
- }
-
- // Make a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
- inline
- tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
- make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10)
- {
- return tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
- }
-
- // Tie variables into a tuple
- template<typename T1>
- inline
- tuple<detail::assign_to_pointee<T1> >
- tie(T1& t1)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1));
- }
-
- // Tie variables into a tuple
- template<typename T1, typename T2>
- inline
- tuple<detail::assign_to_pointee<T1>,
- detail::assign_to_pointee<T2> >
- tie(T1& t1, T2& t2)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1),
- detail::assign_to_pointee<T2>(&t2));
- }
-
- // Tie variables into a tuple
- template<typename T1, typename T2, typename T3>
- inline
- tuple<detail::assign_to_pointee<T1>,
- detail::assign_to_pointee<T2>,
- detail::assign_to_pointee<T3> >
- tie(T1& t1, T2& t2, T3& t3)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1),
- detail::assign_to_pointee<T2>(&t2),
- detail::assign_to_pointee<T3>(&t3));
- }
-
- // Tie variables into a tuple
- template<typename T1, typename T2, typename T3, typename T4>
- inline
- tuple<detail::assign_to_pointee<T1>,
- detail::assign_to_pointee<T2>,
- detail::assign_to_pointee<T3>,
- detail::assign_to_pointee<T4> >
- tie(T1& t1, T2& t2, T3& t3, T4& t4)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1),
- detail::assign_to_pointee<T2>(&t2),
- detail::assign_to_pointee<T3>(&t3),
- detail::assign_to_pointee<T4>(&t4));
- }
-
- // Tie variables into a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5>
- inline
- tuple<detail::assign_to_pointee<T1>,
- detail::assign_to_pointee<T2>,
- detail::assign_to_pointee<T3>,
- detail::assign_to_pointee<T4>,
- detail::assign_to_pointee<T5> >
- tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1),
- detail::assign_to_pointee<T2>(&t2),
- detail::assign_to_pointee<T3>(&t3),
- detail::assign_to_pointee<T4>(&t4),
- detail::assign_to_pointee<T5>(&t5));
- }
-
- // Tie variables into a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
- inline
- tuple<detail::assign_to_pointee<T1>,
- detail::assign_to_pointee<T2>,
- detail::assign_to_pointee<T3>,
- detail::assign_to_pointee<T4>,
- detail::assign_to_pointee<T5>,
- detail::assign_to_pointee<T6> >
- tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1),
- detail::assign_to_pointee<T2>(&t2),
- detail::assign_to_pointee<T3>(&t3),
- detail::assign_to_pointee<T4>(&t4),
- detail::assign_to_pointee<T5>(&t5),
- detail::assign_to_pointee<T6>(&t6));
- }
-
- // Tie variables into a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
- inline
- tuple<detail::assign_to_pointee<T1>,
- detail::assign_to_pointee<T2>,
- detail::assign_to_pointee<T3>,
- detail::assign_to_pointee<T4>,
- detail::assign_to_pointee<T5>,
- detail::assign_to_pointee<T6>,
- detail::assign_to_pointee<T7> >
- tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1),
- detail::assign_to_pointee<T2>(&t2),
- detail::assign_to_pointee<T3>(&t3),
- detail::assign_to_pointee<T4>(&t4),
- detail::assign_to_pointee<T5>(&t5),
- detail::assign_to_pointee<T6>(&t6),
- detail::assign_to_pointee<T7>(&t7));
- }
-
- // Tie variables into a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
- inline
- tuple<detail::assign_to_pointee<T1>,
- detail::assign_to_pointee<T2>,
- detail::assign_to_pointee<T3>,
- detail::assign_to_pointee<T4>,
- detail::assign_to_pointee<T5>,
- detail::assign_to_pointee<T6>,
- detail::assign_to_pointee<T7>,
- detail::assign_to_pointee<T8> >
- tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1),
- detail::assign_to_pointee<T2>(&t2),
- detail::assign_to_pointee<T3>(&t3),
- detail::assign_to_pointee<T4>(&t4),
- detail::assign_to_pointee<T5>(&t5),
- detail::assign_to_pointee<T6>(&t6),
- detail::assign_to_pointee<T7>(&t7),
- detail::assign_to_pointee<T8>(&t8));
- }
-
- // Tie variables into a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
- inline
- tuple<detail::assign_to_pointee<T1>,
- detail::assign_to_pointee<T2>,
- detail::assign_to_pointee<T3>,
- detail::assign_to_pointee<T4>,
- detail::assign_to_pointee<T5>,
- detail::assign_to_pointee<T6>,
- detail::assign_to_pointee<T7>,
- detail::assign_to_pointee<T8>,
- detail::assign_to_pointee<T9> >
- tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8, T9 &t9)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1),
- detail::assign_to_pointee<T2>(&t2),
- detail::assign_to_pointee<T3>(&t3),
- detail::assign_to_pointee<T4>(&t4),
- detail::assign_to_pointee<T5>(&t5),
- detail::assign_to_pointee<T6>(&t6),
- detail::assign_to_pointee<T7>(&t7),
- detail::assign_to_pointee<T8>(&t8),
- detail::assign_to_pointee<T9>(&t9));
- }
- // Tie variables into a tuple
- template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
- inline
- tuple<detail::assign_to_pointee<T1>,
- detail::assign_to_pointee<T2>,
- detail::assign_to_pointee<T3>,
- detail::assign_to_pointee<T4>,
- detail::assign_to_pointee<T5>,
- detail::assign_to_pointee<T6>,
- detail::assign_to_pointee<T7>,
- detail::assign_to_pointee<T8>,
- detail::assign_to_pointee<T9>,
- detail::assign_to_pointee<T10> >
- tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8, T9 &t9, T10 &t10)
- {
- return make_tuple(detail::assign_to_pointee<T1>(&t1),
- detail::assign_to_pointee<T2>(&t2),
- detail::assign_to_pointee<T3>(&t3),
- detail::assign_to_pointee<T4>(&t4),
- detail::assign_to_pointee<T5>(&t5),
- detail::assign_to_pointee<T6>(&t6),
- detail::assign_to_pointee<T7>(&t7),
- detail::assign_to_pointee<T8>(&t8),
- detail::assign_to_pointee<T9>(&t9),
- detail::assign_to_pointee<T10>(&t10));
- }
- // "ignore" allows tuple positions to be ignored when using "tie".
-
-detail::swallow_assign const ignore = detail::swallow_assign();
-
-template <class T0, class T1, class T2, class T3, class T4,
- class T5, class T6, class T7, class T8, class T9>
-void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
- tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& rhs);
-inline void swap(null_type&, null_type&) {}
-template<class HH>
-inline void swap(cons<HH, null_type>& lhs, cons<HH, null_type>& rhs) {
- ::boost::swap(lhs.head, rhs.head);
-}
-template<class HH, class TT>
-inline void swap(cons<HH, TT>& lhs, cons<HH, TT>& rhs) {
- ::boost::swap(lhs.head, rhs.head);
- ::boost::tuples::swap(lhs.tail, rhs.tail);
-}
-template <class T0, class T1, class T2, class T3, class T4,
- class T5, class T6, class T7, class T8, class T9>
-inline void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
- tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& rhs) {
- typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> tuple_type;
- typedef typename tuple_type::inherited base;
- ::boost::tuples::swap(static_cast<base&>(lhs), static_cast<base&>(rhs));
-}
-
-} // namespace tuples
-} // namespace boost
-#endif // BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
diff --git a/3party/boost/boost/tuple/tuple.hpp b/3party/boost/boost/tuple/tuple.hpp
index 7703597e10..433d4b3165 100644
--- a/3party/boost/boost/tuple/tuple.hpp
+++ b/3party/boost/boost/tuple/tuple.hpp
@@ -23,16 +23,10 @@ namespace boost { namespace python { class tuple; }}
#include "boost/config.hpp"
#include "boost/static_assert.hpp"
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-// The MSVC version
-#include "boost/tuple/detail/tuple_basic_no_partial_spec.hpp"
-
-#else
// other compilers
#include "boost/ref.hpp"
#include "boost/tuple/detail/tuple_basic.hpp"
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace boost {
@@ -41,7 +35,7 @@ using tuples::make_tuple;
using tuples::tie;
#if !defined(BOOST_NO_USING_TEMPLATE)
using tuples::get;
-#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#else
//
// The "using tuples::get" statement causes the
// Borland compiler to ICE, use forwarding
@@ -64,24 +58,7 @@ inline typename tuples::access_traits<
get(const tuples::cons<HT, TT>& c) {
return tuples::get<N,HT,TT>(c);
}
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-//
-// MSVC, using declarations don't mix with templates well,
-// so use forwarding functions instead:
-//
-template<int N, typename Head, typename Tail>
-typename tuples::detail::element_ref<N, tuples::cons<Head, Tail> >::RET
-get(tuples::cons<Head, Tail>& t, tuples::detail::workaround_holder<N>* = 0)
-{
- return tuples::detail::get_class<N>::get(t);
-}
-template<int N, typename Head, typename Tail>
-typename tuples::detail::element_const_ref<N, tuples::cons<Head, Tail> >::RET
-get(const tuples::cons<Head, Tail>& t, tuples::detail::workaround_holder<N>* = 0)
-{
- return tuples::detail::get_class<N>::get(t);
-}
#endif // BOOST_NO_USING_TEMPLATE
} // end namespace boost
diff --git a/3party/boost/boost/tuple/tuple_io.hpp b/3party/boost/boost/tuple/tuple_io.hpp
index c549716ebd..99cf36cb0d 100644
--- a/3party/boost/boost/tuple/tuple_io.hpp
+++ b/3party/boost/boost/tuple/tuple_io.hpp
@@ -13,21 +13,8 @@
#ifndef BOOST_TUPLE_IO_HPP
#define BOOST_TUPLE_IO_HPP
-
-// add to boost/config.hpp
-// for now
-# if defined __GNUC__
-# if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97)
-#define BOOST_NO_TEMPLATED_STREAMS
-#endif
-#endif // __GNUC__
-
-#if defined BOOST_NO_TEMPLATED_STREAMS
-#include <iostream>
-#else
#include <istream>
#include <ostream>
-#endif
#include <sstream>
@@ -76,25 +63,6 @@ private:
public:
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
- static char get_manipulator(std::ios& i, manipulator_type m) {
- char c = static_cast<char>(i.iword(get_stream_index(m)));
-
- // parentheses and space are the default manipulators
- if (!c) {
- switch(m) {
- case detail::format_info::open : c = '('; break;
- case detail::format_info::close : c = ')'; break;
- case detail::format_info::delimiter : c = ' '; break;
- }
- }
- return c;
- }
-
- static void set_manipulator(std::ios& i, manipulator_type m, char c) {
- i.iword(get_stream_index(m)) = static_cast<long>(c);
- }
-#else
template<class CharType, class CharTrait>
static CharType get_manipulator(std::basic_ios<CharType, CharTrait>& i,
manipulator_type m) {
@@ -124,7 +92,6 @@ public:
// convertible long.
i.iword(get_stream_index(m)) = static_cast<long>(c);
}
-#endif // BOOST_NO_TEMPLATED_STREAMS
};
} // end of namespace detail
@@ -138,39 +105,12 @@ public:
const char c = 0)
: mt(m), f_c(c) {}
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
- void set(std::ios &io) const {
- detail::format_info::set_manipulator(io, mt, f_c);
- }
-#else
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- template<class CharType2, class CharTrait>
- void set(std::basic_ios<CharType2, CharTrait> &io) const {
- detail::format_info::set_manipulator(io, mt, f_c);
- }
-#else
template<class CharTrait>
void set(std::basic_ios<CharType, CharTrait> &io) const {
detail::format_info::set_manipulator(io, mt, f_c);
}
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#endif // BOOST_NO_TEMPLATED_STREAMS
};
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
-inline std::ostream&
-operator<<(std::ostream& o, const tuple_manipulator<char>& m) {
- m.set(o);
- return o;
-}
-
-inline std::istream&
-operator>>(std::istream& i, const tuple_manipulator<char>& m) {
- m.set(i);
- return i;
-}
-
-#else
template<class CharType, class CharTrait>
inline std::basic_ostream<CharType, CharTrait>&
@@ -186,7 +126,6 @@ operator>>(std::basic_istream<CharType, CharTrait>& i, const tuple_manipulator<C
return i;
}
-#endif // BOOST_NO_TEMPLATED_STREAMS
template<class CharType>
inline tuple_manipulator<CharType> set_open(const CharType c) {
@@ -217,62 +156,12 @@ namespace detail {
// Note: The order of the print functions is critical
// to let a conforming compiler find and select the correct one.
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-template<class T1>
-inline std::ostream& print(std::ostream& o, const cons<T1, null_type>& t) {
- return o << t.head;
-}
-#endif // BOOST_NO_TEMPLATED_STREAMS
-
-inline std::ostream& print(std::ostream& o, const null_type&) { return o; }
-
-template<class T1, class T2>
-inline std::ostream&
-print(std::ostream& o, const cons<T1, T2>& t) {
-
- const char d = format_info::get_manipulator(o, format_info::delimiter);
-
- o << t.head;
-
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- if (tuples::length<T2>::value == 0)
- return o;
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- o << d;
-
- return print(o, t.tail );
-
-}
-
-template<class T>
-inline bool handle_width(std::ostream& o, const T& t) {
- std::streamsize width = o.width();
- if(width == 0) return false;
-
- std::ostringstream ss;
-
- ss.copyfmt(o);
- ss.tie(0);
- ss.width(0);
-
- ss << t;
- o << ss.str();
-
- return true;
-}
-
-
-#else
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template<class CharType, class CharTrait, class T1>
inline std::basic_ostream<CharType, CharTrait>&
print(std::basic_ostream<CharType, CharTrait>& o, const cons<T1, null_type>& t) {
return o << t.head;
}
-#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<class CharType, class CharTrait>
@@ -289,10 +178,6 @@ print(std::basic_ostream<CharType, CharTrait>& o, const cons<T1, T2>& t) {
o << t.head;
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- if (tuples::length<T2>::value == 0)
- return o;
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
o << d;
return print(o, t.tail);
@@ -315,47 +200,9 @@ inline bool handle_width(std::basic_ostream<CharT, Traits>& o, const T& t) {
return true;
}
-#endif // BOOST_NO_TEMPLATED_STREAMS
} // namespace detail
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
-
-inline std::ostream& operator<<(std::ostream& o, const null_type& t) {
- if (!o.good() ) return o;
- if (detail::handle_width(o, t)) return o;
-
- const char l =
- detail::format_info::get_manipulator(o, detail::format_info::open);
- const char r =
- detail::format_info::get_manipulator(o, detail::format_info::close);
-
- o << l;
- o << r;
-
- return o;
-}
-
-template<class T1, class T2>
-inline std::ostream& operator<<(std::ostream& o, const cons<T1, T2>& t) {
- if (!o.good() ) return o;
- if (detail::handle_width(o, t)) return o;
-
- const char l =
- detail::format_info::get_manipulator(o, detail::format_info::open);
- const char r =
- detail::format_info::get_manipulator(o, detail::format_info::close);
-
- o << l;
-
- detail::print(o, t);
-
- o << r;
-
- return o;
-}
-
-#else
template<class CharType, class CharTrait>
inline std::basic_ostream<CharType, CharTrait>&
@@ -395,7 +242,6 @@ operator<<(std::basic_ostream<CharType, CharTrait>& o,
return o;
}
-#endif // BOOST_NO_TEMPLATED_STREAMS
// -------------------------------------------------------------
@@ -403,99 +249,6 @@ operator<<(std::basic_ostream<CharType, CharTrait>& o,
namespace detail {
-#if defined (BOOST_NO_TEMPLATED_STREAMS)
-
-inline std::istream&
-extract_and_check_delimiter(
- std::istream& is, format_info::manipulator_type del)
-{
- const char d = format_info::get_manipulator(is, del);
-
-#if defined (BOOST_NO_STD_LOCALE)
- const bool is_delimiter = !isspace(d);
-#else
- const bool is_delimiter = (!std::isspace(d, is.getloc()) );
-#endif
-
- char c;
- if (is_delimiter) {
- is >> c;
- if (is.good() && c!=d) {
- is.setstate(std::ios::failbit);
- }
- } else {
- is >> std::ws;
- }
- return is;
-}
-
-
-// Note: The order of the read functions is critical to let a
-// (conforming?) compiler find and select the correct one.
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-template<class T1>
-inline std::istream &
-read (std::istream &is, cons<T1, null_type>& t1) {
-
- if (!is.good()) return is;
-
- return is >> t1.head ;
-}
-#else
-inline std::istream& read(std::istream& i, const null_type&) { return i; }
-#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-template<class T1, class T2>
-inline std::istream&
-read(std::istream &is, cons<T1, T2>& t1) {
-
- if (!is.good()) return is;
-
- is >> t1.head;
-
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- if (tuples::length<T2>::value == 0)
- return is;
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- extract_and_check_delimiter(is, format_info::delimiter);
-
- return read(is, t1.tail);
-}
-
-} // end namespace detail
-
-inline std::istream&
-operator>>(std::istream &is, null_type&) {
-
- if (!is.good() ) return is;
-
- detail::extract_and_check_delimiter(is, detail::format_info::open);
- detail::extract_and_check_delimiter(is, detail::format_info::close);
-
- return is;
-}
-
-
-template<class T1, class T2>
-inline std::istream&
-operator>>(std::istream& is, cons<T1, T2>& t1) {
-
- if (!is.good() ) return is;
-
- detail::extract_and_check_delimiter(is, detail::format_info::open);
-
- detail::read(is, t1);
-
- detail::extract_and_check_delimiter(is, detail::format_info::close);
-
- return is;
-}
-
-
-
-#else
template<class CharType, class CharTrait>
inline std::basic_istream<CharType, CharTrait>&
@@ -526,7 +279,6 @@ extract_and_check_delimiter(
}
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template<class CharType, class CharTrait, class T1>
inline std::basic_istream<CharType, CharTrait> &
read (std::basic_istream<CharType, CharTrait> &is, cons<T1, null_type>& t1) {
@@ -535,12 +287,6 @@ read (std::basic_istream<CharType, CharTrait> &is, cons<T1, null_type>& t1) {
return is >> t1.head;
}
-#else
-template<class CharType, class CharTrait>
-inline std::basic_istream<CharType, CharTrait>&
-read(std::basic_istream<CharType, CharTrait>& i, const null_type&) { return i; }
-
-#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<class CharType, class CharTrait, class T1, class T2>
inline std::basic_istream<CharType, CharTrait>&
@@ -550,10 +296,6 @@ read(std::basic_istream<CharType, CharTrait> &is, cons<T1, T2>& t1) {
is >> t1.head;
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- if (tuples::length<T2>::value == 0)
- return is;
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
extract_and_check_delimiter(is, format_info::delimiter);
@@ -590,7 +332,6 @@ operator>>(std::basic_istream<CharType, CharTrait>& is, cons<T1, T2>& t1) {
return is;
}
-#endif // BOOST_NO_TEMPLATED_STREAMS
} // end of namespace tuples
} // end of namespace boost
diff --git a/3party/boost/boost/type_erasure/any.hpp b/3party/boost/boost/type_erasure/any.hpp
index ed6fb2e3ee..3ed0243498 100644
--- a/3party/boost/boost/type_erasure/any.hpp
+++ b/3party/boost/boost/type_erasure/any.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: any.hpp 83393 2013-03-10 03:48:33Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_ANY_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_ANY_HPP_INCLUDED
@@ -519,7 +519,7 @@ public:
), other)
)
{}
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
any(any<Concept, T&>&& other)
: table(::boost::type_erasure::detail::access::table(other)),
data(::boost::type_erasure::call(
@@ -545,7 +545,7 @@ public:
), other)
)
{}
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
any(any<Concept, const T&>&& other)
: table(::boost::type_erasure::detail::access::table(other)),
data(::boost::type_erasure::call(
diff --git a/3party/boost/boost/type_erasure/any_cast.hpp b/3party/boost/boost/type_erasure/any_cast.hpp
index bcdec87159..ea8d66a9a9 100644
--- a/3party/boost/boost/type_erasure/any_cast.hpp
+++ b/3party/boost/boost/type_erasure/any_cast.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: any_cast.hpp 80974 2012-10-13 00:02:25Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_ANY_CAST_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_ANY_CAST_HPP_INCLUDED
@@ -98,6 +98,16 @@ bool check_any_cast(const any<Concept, Tag>& arg)
* a null pointer. Casting to @c void* always succeeds
* and returns the address of stored object.
*
+ * \code
+ * any<mpl::vector<typeid_<>, copy_constructible<> > > x(1);
+ * any_cast<int>(x); // returns 1
+ * any_cast<int&>(x); // returns a reference to the contents of x
+ * any_cast<double>(x); // throws bad_any_cast
+ * any_cast<int*>(&x); // returns a pointer to the contents of x
+ * any_cast<void*>(&x); // returns a pointer to the contents of x
+ * any_cast<double*>(&x); // returns NULL
+ * \endcode
+ *
* \pre if @c arg is a pointer, @c T must be a pointer type.
* \pre @c Concept must contain @ref typeid_<tt>&lt;Tag&gt;</tt>.
*
diff --git a/3party/boost/boost/type_erasure/binding.hpp b/3party/boost/boost/type_erasure/binding.hpp
index 489439073d..a5023a59eb 100644
--- a/3party/boost/boost/type_erasure/binding.hpp
+++ b/3party/boost/boost/type_erasure/binding.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: binding.hpp 83251 2013-03-02 19:23:44Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_BINDING_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_BINDING_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/binding_of.hpp b/3party/boost/boost/type_erasure/binding_of.hpp
index ef7fbdf78f..2229fdeb84 100644
--- a/3party/boost/boost/type_erasure/binding_of.hpp
+++ b/3party/boost/boost/type_erasure/binding_of.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: binding_of.hpp 78429 2012-05-12 02:37:24Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_BINDING_OF_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_BINDING_OF_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/builtin.hpp b/3party/boost/boost/type_erasure/builtin.hpp
index f76d83d616..812b34face 100644
--- a/3party/boost/boost/type_erasure/builtin.hpp
+++ b/3party/boost/boost/type_erasure/builtin.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: builtin.hpp 83237 2013-03-02 01:03:12Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_BUILTIN_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_BUILTIN_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/call.hpp b/3party/boost/boost/type_erasure/call.hpp
index 52cc06de38..2a8ee2c580 100644
--- a/3party/boost/boost/type_erasure/call.hpp
+++ b/3party/boost/boost/type_erasure/call.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: call.hpp 83321 2013-03-05 21:27:18Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/callable.hpp b/3party/boost/boost/type_erasure/callable.hpp
index 8cf28233e7..9de4e222e9 100644
--- a/3party/boost/boost/type_erasure/callable.hpp
+++ b/3party/boost/boost/type_erasure/callable.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: callable.hpp 83248 2013-03-02 18:15:06Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/check_match.hpp b/3party/boost/boost/type_erasure/check_match.hpp
index 2846e63b3a..d4c68f51bf 100644
--- a/3party/boost/boost/type_erasure/check_match.hpp
+++ b/3party/boost/boost/type_erasure/check_match.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: check_match.hpp 83251 2013-03-02 19:23:44Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/concept_interface.hpp b/3party/boost/boost/type_erasure/concept_interface.hpp
index 987daba2e3..ec054cd423 100644
--- a/3party/boost/boost/type_erasure/concept_interface.hpp
+++ b/3party/boost/boost/type_erasure/concept_interface.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: concept_interface.hpp 80974 2012-10-13 00:02:25Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_CONCEPT_INTERFACE_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_CONCEPT_INTERFACE_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/concept_of.hpp b/3party/boost/boost/type_erasure/concept_of.hpp
index e0db0721aa..43b4de52d7 100644
--- a/3party/boost/boost/type_erasure/concept_of.hpp
+++ b/3party/boost/boost/type_erasure/concept_of.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: concept_of.hpp 80909 2012-10-08 21:59:50Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_CONCEPT_OF_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_CONCEPT_OF_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/config.hpp b/3party/boost/boost/type_erasure/config.hpp
index f15d6082ab..65cf127570 100644
--- a/3party/boost/boost/type_erasure/config.hpp
+++ b/3party/boost/boost/type_erasure/config.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: config.hpp 78429 2012-05-12 02:37:24Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_CONFIG_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_CONFIG_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/constructible.hpp b/3party/boost/boost/type_erasure/constructible.hpp
index c865be48ba..5596b1eade 100644
--- a/3party/boost/boost/type_erasure/constructible.hpp
+++ b/3party/boost/boost/type_erasure/constructible.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: constructible.hpp 83321 2013-03-05 21:27:18Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/deduced.hpp b/3party/boost/boost/type_erasure/deduced.hpp
index 18710a60ce..b9ed96094c 100644
--- a/3party/boost/boost/type_erasure/deduced.hpp
+++ b/3party/boost/boost/type_erasure/deduced.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: deduced.hpp 83393 2013-03-10 03:48:33Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DEDUCED_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DEDUCED_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/derived.hpp b/3party/boost/boost/type_erasure/derived.hpp
index e7f6f23546..42316d2b57 100644
--- a/3party/boost/boost/type_erasure/derived.hpp
+++ b/3party/boost/boost/type_erasure/derived.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: derived.hpp 80974 2012-10-13 00:02:25Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DERIVED_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DERIVED_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/detail/access.hpp b/3party/boost/boost/type_erasure/detail/access.hpp
index 790469932b..4116bf1ceb 100644
--- a/3party/boost/boost/type_erasure/detail/access.hpp
+++ b/3party/boost/boost/type_erasure/detail/access.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: access.hpp 83321 2013-03-05 21:27:18Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DETAIL_ACCESS_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DETAIL_ACCESS_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/detail/adapt_to_vtable.hpp b/3party/boost/boost/type_erasure/detail/adapt_to_vtable.hpp
index f1d2545649..55cc528947 100644
--- a/3party/boost/boost/type_erasure/detail/adapt_to_vtable.hpp
+++ b/3party/boost/boost/type_erasure/detail/adapt_to_vtable.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: adapt_to_vtable.hpp 83325 2013-03-05 22:24:25Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/detail/any_base.hpp b/3party/boost/boost/type_erasure/detail/any_base.hpp
index 7f01d85058..0fa316c9ff 100644
--- a/3party/boost/boost/type_erasure/detail/any_base.hpp
+++ b/3party/boost/boost/type_erasure/detail/any_base.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: any_base.hpp 80886 2012-10-06 17:19:08Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DETAIL_ANY_BASE_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DETAIL_ANY_BASE_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/detail/check_call.hpp b/3party/boost/boost/type_erasure/detail/check_call.hpp
index 6c672d31a6..adf36dbeaa 100644
--- a/3party/boost/boost/type_erasure/detail/check_call.hpp
+++ b/3party/boost/boost/type_erasure/detail/check_call.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: check_call.hpp 83321 2013-03-05 21:27:18Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/detail/check_map.hpp b/3party/boost/boost/type_erasure/detail/check_map.hpp
index 5af3e4da02..83435b6479 100644
--- a/3party/boost/boost/type_erasure/detail/check_map.hpp
+++ b/3party/boost/boost/type_erasure/detail/check_map.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: check_map.hpp 80883 2012-10-06 01:28:13Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DETAIL_CHECK_MAP_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DETAIL_CHECK_MAP_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/detail/const.hpp b/3party/boost/boost/type_erasure/detail/const.hpp
index 18f134cf13..fc97d4fc30 100644
--- a/3party/boost/boost/type_erasure/detail/const.hpp
+++ b/3party/boost/boost/type_erasure/detail/const.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: const.hpp 83332 2013-03-06 18:46:56Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DETAIL_CONST_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DETAIL_CONST_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/detail/construct.hpp b/3party/boost/boost/type_erasure/detail/construct.hpp
index a8d5278aa6..563bbeeb90 100644
--- a/3party/boost/boost/type_erasure/detail/construct.hpp
+++ b/3party/boost/boost/type_erasure/detail/construct.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: construct.hpp 83321 2013-03-05 21:27:18Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/detail/extract_concept.hpp b/3party/boost/boost/type_erasure/detail/extract_concept.hpp
index e2bfa2703b..f519045d6c 100644
--- a/3party/boost/boost/type_erasure/detail/extract_concept.hpp
+++ b/3party/boost/boost/type_erasure/detail/extract_concept.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: extract_concept.hpp 83248 2013-03-02 18:15:06Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/detail/get_placeholders.hpp b/3party/boost/boost/type_erasure/detail/get_placeholders.hpp
index e8445d6da6..cdee16fc03 100644
--- a/3party/boost/boost/type_erasure/detail/get_placeholders.hpp
+++ b/3party/boost/boost/type_erasure/detail/get_placeholders.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: get_placeholders.hpp 83248 2013-03-02 18:15:06Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/detail/get_signature.hpp b/3party/boost/boost/type_erasure/detail/get_signature.hpp
index 110fe0ada6..066638b3fa 100644
--- a/3party/boost/boost/type_erasure/detail/get_signature.hpp
+++ b/3party/boost/boost/type_erasure/detail/get_signature.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: get_signature.hpp 78429 2012-05-12 02:37:24Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DETAIL_GET_SIGNATURE_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DETAIL_GET_SIGNATURE_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/detail/instantiate.hpp b/3party/boost/boost/type_erasure/detail/instantiate.hpp
index bca31bab7b..74f3d27f83 100644
--- a/3party/boost/boost/type_erasure/detail/instantiate.hpp
+++ b/3party/boost/boost/type_erasure/detail/instantiate.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: instantiate.hpp 80881 2012-10-05 23:36:21Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/detail/macro.hpp b/3party/boost/boost/type_erasure/detail/macro.hpp
index cc5f3faddd..badd853195 100644
--- a/3party/boost/boost/type_erasure/detail/macro.hpp
+++ b/3party/boost/boost/type_erasure/detail/macro.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: macro.hpp 80601 2012-09-19 22:46:36Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_MACRO_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_MACRO_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/detail/normalize.hpp b/3party/boost/boost/type_erasure/detail/normalize.hpp
index 655e6a0263..a6849a6cd9 100644
--- a/3party/boost/boost/type_erasure/detail/normalize.hpp
+++ b/3party/boost/boost/type_erasure/detail/normalize.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: normalize.hpp 83251 2013-03-02 19:23:44Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DETAIL_NORMALIZE_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DETAIL_NORMALIZE_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/detail/normalize_deduced.hpp b/3party/boost/boost/type_erasure/detail/normalize_deduced.hpp
index 63733a53a0..83d0d3b25b 100644
--- a/3party/boost/boost/type_erasure/detail/normalize_deduced.hpp
+++ b/3party/boost/boost/type_erasure/detail/normalize_deduced.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: normalize_deduced.hpp 78443 2012-05-13 00:17:07Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/detail/null.hpp b/3party/boost/boost/type_erasure/detail/null.hpp
index 07e0c35a93..ef977f4254 100644
--- a/3party/boost/boost/type_erasure/detail/null.hpp
+++ b/3party/boost/boost/type_erasure/detail/null.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: null.hpp 79190 2012-06-30 20:07:23Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/detail/rebind_placeholders.hpp b/3party/boost/boost/type_erasure/detail/rebind_placeholders.hpp
index e4b69f5815..a9cd546737 100644
--- a/3party/boost/boost/type_erasure/detail/rebind_placeholders.hpp
+++ b/3party/boost/boost/type_erasure/detail/rebind_placeholders.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: rebind_placeholders.hpp 83253 2013-03-02 21:48:27Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/detail/storage.hpp b/3party/boost/boost/type_erasure/detail/storage.hpp
index 962d0c2cc4..c99c3d7c8e 100644
--- a/3party/boost/boost/type_erasure/detail/storage.hpp
+++ b/3party/boost/boost/type_erasure/detail/storage.hpp
@@ -6,12 +6,19 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: storage.hpp 83253 2013-03-02 21:48:27Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DETAIL_STORAGE_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DETAIL_STORAGE_HPP_INCLUDED
+#include <boost/config.hpp>
#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4521)
+#endif
namespace boost {
namespace type_erasure {
@@ -20,8 +27,18 @@ namespace detail {
struct storage
{
storage() {}
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ storage(storage& other) : data(other.data) {}
+ storage(const storage& other) : data(other.data) {}
+ storage(storage&& other) : data(other.data) {}
+ storage& operator=(const storage& other) { data = other.data; return *this; }
+ template<class T>
+ storage(T&& arg) : data(new typename remove_cv<
+ typename remove_reference<T>::type>::type(std::forward<T>(arg))) {}
+#else
template<class T>
storage(const T& arg) : data(new T(arg)) {}
+#endif
void* data;
};
@@ -64,4 +81,8 @@ T extract(storage&& arg)
}
}
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
#endif
diff --git a/3party/boost/boost/type_erasure/detail/vtable.hpp b/3party/boost/boost/type_erasure/detail/vtable.hpp
index a71a55f29a..b30a15a061 100644
--- a/3party/boost/boost/type_erasure/detail/vtable.hpp
+++ b/3party/boost/boost/type_erasure/detail/vtable.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: vtable.hpp 83248 2013-03-02 18:15:06Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
@@ -30,7 +30,7 @@ namespace boost {
namespace type_erasure {
namespace detail {
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CONSTEXPR) && !defined(BOOST_NO_DEFAULTED_FUNCTIONS)
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_CONSTEXPR) && !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
template<class... T>
struct stored_arg_pack;
diff --git a/3party/boost/boost/type_erasure/exception.hpp b/3party/boost/boost/type_erasure/exception.hpp
index d17aa97171..39a0b990f2 100644
--- a/3party/boost/boost/type_erasure/exception.hpp
+++ b/3party/boost/boost/type_erasure/exception.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: exception.hpp 81315 2012-11-13 00:45:01Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_EXCEPTION_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_EXCEPTION_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/free.hpp b/3party/boost/boost/type_erasure/free.hpp
index 72e1e8fc6c..291ae7520d 100644
--- a/3party/boost/boost/type_erasure/free.hpp
+++ b/3party/boost/boost/type_erasure/free.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: free.hpp 83372 2013-03-09 19:14:14Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_FREE_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_FREE_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/is_empty.hpp b/3party/boost/boost/type_erasure/is_empty.hpp
index 89289aa3ff..3a6c004d61 100644
--- a/3party/boost/boost/type_erasure/is_empty.hpp
+++ b/3party/boost/boost/type_erasure/is_empty.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: is_empty.hpp 80968 2012-10-12 20:25:51Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_IS_EMPTY_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_IS_EMPTY_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/is_placeholder.hpp b/3party/boost/boost/type_erasure/is_placeholder.hpp
index 7329baadf3..9a191f7fd9 100644
--- a/3party/boost/boost/type_erasure/is_placeholder.hpp
+++ b/3party/boost/boost/type_erasure/is_placeholder.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: is_placeholder.hpp 78453 2012-05-13 15:24:00Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_DETAIL_IS_PLACEHOLDER_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_DETAIL_IS_PLACEHOLDER_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/is_subconcept.hpp b/3party/boost/boost/type_erasure/is_subconcept.hpp
index dc9a69d070..aa8ee6585a 100644
--- a/3party/boost/boost/type_erasure/is_subconcept.hpp
+++ b/3party/boost/boost/type_erasure/is_subconcept.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: is_subconcept.hpp 80883 2012-10-06 01:28:13Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_IS_SUBCONCEPT_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_IS_SUBCONCEPT_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/iterator.hpp b/3party/boost/boost/type_erasure/iterator.hpp
index 9b9b0f24a5..be6beb5307 100644
--- a/3party/boost/boost/type_erasure/iterator.hpp
+++ b/3party/boost/boost/type_erasure/iterator.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: iterator.hpp 83237 2013-03-02 01:03:12Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_ITERATOR_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_ITERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/member.hpp b/3party/boost/boost/type_erasure/member.hpp
index 93ba62f784..a6de24ab8e 100644
--- a/3party/boost/boost/type_erasure/member.hpp
+++ b/3party/boost/boost/type_erasure/member.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: member.hpp 83393 2013-03-10 03:48:33Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_MEMBER_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_MEMBER_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/operators.hpp b/3party/boost/boost/type_erasure/operators.hpp
index 541a08a01a..97fddbfbc6 100644
--- a/3party/boost/boost/type_erasure/operators.hpp
+++ b/3party/boost/boost/type_erasure/operators.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: operators.hpp 83251 2013-03-02 19:23:44Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_OPERATORS_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_OPERATORS_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/param.hpp b/3party/boost/boost/type_erasure/param.hpp
index b7a6988802..e3cce05898 100644
--- a/3party/boost/boost/type_erasure/param.hpp
+++ b/3party/boost/boost/type_erasure/param.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: param.hpp 83334 2013-03-06 20:59:57Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_PARAM_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_PARAM_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/placeholder.hpp b/3party/boost/boost/type_erasure/placeholder.hpp
index 5631ac54e6..0ea7ab5bce 100644
--- a/3party/boost/boost/type_erasure/placeholder.hpp
+++ b/3party/boost/boost/type_erasure/placeholder.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: placeholder.hpp 78484 2012-05-15 17:54:14Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_PLACEHOLDERS_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_PLACEHOLDERS_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/placeholder_of.hpp b/3party/boost/boost/type_erasure/placeholder_of.hpp
index f94ef647f2..8e8171898d 100644
--- a/3party/boost/boost/type_erasure/placeholder_of.hpp
+++ b/3party/boost/boost/type_erasure/placeholder_of.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: placeholder_of.hpp 80909 2012-10-08 21:59:50Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_PLACEHOLDER_OF_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_PLACEHOLDER_OF_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/rebind_any.hpp b/3party/boost/boost/type_erasure/rebind_any.hpp
index 4e1ac2bb6b..452e6893d8 100644
--- a/3party/boost/boost/type_erasure/rebind_any.hpp
+++ b/3party/boost/boost/type_erasure/rebind_any.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: rebind_any.hpp 81428 2012-11-19 21:19:34Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_REBIND_ANY_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_REBIND_ANY_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/relaxed.hpp b/3party/boost/boost/type_erasure/relaxed.hpp
index 36a52705f1..69e57ec7cd 100644
--- a/3party/boost/boost/type_erasure/relaxed.hpp
+++ b/3party/boost/boost/type_erasure/relaxed.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: relaxed.hpp 83252 2013-03-02 19:58:42Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_RELAXED_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_RELAXED_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/require_match.hpp b/3party/boost/boost/type_erasure/require_match.hpp
index eaa4f535fc..eada5eb7e6 100644
--- a/3party/boost/boost/type_erasure/require_match.hpp
+++ b/3party/boost/boost/type_erasure/require_match.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: require_match.hpp 83251 2013-03-02 19:23:44Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/same_type.hpp b/3party/boost/boost/type_erasure/same_type.hpp
index 5b40407a5a..c2cf7a324d 100644
--- a/3party/boost/boost/type_erasure/same_type.hpp
+++ b/3party/boost/boost/type_erasure/same_type.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: same_type.hpp 78445 2012-05-13 01:53:52Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_SAME_TYPE_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_SAME_TYPE_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/static_binding.hpp b/3party/boost/boost/type_erasure/static_binding.hpp
index a753f3bb84..2da86ca3bc 100644
--- a/3party/boost/boost/type_erasure/static_binding.hpp
+++ b/3party/boost/boost/type_erasure/static_binding.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: static_binding.hpp 78429 2012-05-12 02:37:24Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_STATIC_BINDING_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_STATIC_BINDING_HPP_INCLUDED
diff --git a/3party/boost/boost/type_erasure/tuple.hpp b/3party/boost/boost/type_erasure/tuple.hpp
index 3f8009fc07..945dcdafe4 100644
--- a/3party/boost/boost/type_erasure/tuple.hpp
+++ b/3party/boost/boost/type_erasure/tuple.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: tuple.hpp 83452 2013-03-15 22:29:03Z steven_watanabe $
+// $Id$
#if !defined(BOOST_PP_IS_ITERATING)
diff --git a/3party/boost/boost/type_erasure/typeid_of.hpp b/3party/boost/boost/type_erasure/typeid_of.hpp
index 7e64621359..5606883c6b 100644
--- a/3party/boost/boost/type_erasure/typeid_of.hpp
+++ b/3party/boost/boost/type_erasure/typeid_of.hpp
@@ -6,7 +6,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// $Id: typeid_of.hpp 80909 2012-10-08 21:59:50Z steven_watanabe $
+// $Id$
#ifndef BOOST_TYPE_ERASURE_TYPEID_OF_HPP_INCLUDED
#define BOOST_TYPE_ERASURE_TYPEID_OF_HPP_INCLUDED
diff --git a/3party/boost/boost/type_index.hpp b/3party/boost/boost/type_index.hpp
new file mode 100644
index 0000000000..7cbf4dc2ff
--- /dev/null
+++ b/3party/boost/boost/type_index.hpp
@@ -0,0 +1,252 @@
+//
+// Copyright (c) Antony Polukhin, 2012-2014.
+//
+// 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_TYPE_INDEX_HPP
+#define BOOST_TYPE_INDEX_HPP
+
+/// \file boost/type_index.hpp
+/// \brief Includes minimal set of headers required to use the Boost.TypeIndex library.
+///
+/// By inclusion of this file most optimal type index classes will be included and used
+/// as a boost::typeindex::type_index and boost::typeindex::type_info.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+#if defined(BOOST_TYPE_INDEX_USER_TYPEINDEX)
+# include BOOST_TYPE_INDEX_USER_TYPEINDEX
+#elif (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY)) || defined(BOOST_MSVC)
+# include <boost/type_index/stl_type_index.hpp>
+# ifdef BOOST_NO_RTTI
+# include <boost/type_index/detail/stl_register_class.hpp>
+# endif
+#else
+# include <boost/type_index/ctti_type_index.hpp>
+# include <boost/type_index/detail/ctti_register_class.hpp>
+#endif
+
+#ifndef BOOST_TYPE_INDEX_REGISTER_CLASS
+#define BOOST_TYPE_INDEX_REGISTER_CLASS
+#endif
+
+namespace boost { namespace typeindex {
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+
+/// \def BOOST_TYPE_INDEX_FUNCTION_SIGNATURE
+/// BOOST_TYPE_INDEX_FUNCTION_SIGNATURE is used by boost::typeindex::ctti_type_index class to
+/// deduce the name of a type. If your compiler is not recognized
+/// by the TypeIndex library and you wish to work with boost::typeindex::ctti_type_index, you may
+/// define this macro by yourself.
+///
+/// BOOST_TYPE_INDEX_FUNCTION_SIGNATURE must be defined to a compiler specific macro
+/// that outputs the \b whole function signature \b including \b template \b parameters.
+///
+/// If your compiler is not recognised and BOOST_TYPE_INDEX_FUNCTION_SIGNATURE is not defined,
+/// then a compile-time error will arise at any attempt to use boost::typeindex::ctti_type_index classes.
+///
+/// See BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS and BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING
+/// for an information of how to tune the implementation to make a nice pretty_name() output.
+#define BOOST_TYPE_INDEX_FUNCTION_SIGNATURE BOOST_CURRENT_FUNCTION
+
+/// \def BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING
+/// This is a helper macro for making correct pretty_names() with RTTI off.
+///
+/// BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING macro may be defined to
+/// '(begin_skip, end_skip, runtime_skip, runtime_skip_until)' with parameters for adding a
+/// support for compilers, that by default are not recognized by TypeIndex library.
+///
+/// \b Example:
+///
+/// Imagine the situation when
+/// \code boost::typeindex::ctti_type_index::type_id<int>().pretty_name() \endcode
+/// returns the following string:
+/// \code "static const char *boost::detail::ctti<int>::n() [T = int]" \endcode
+/// and \code boost::typeindex::ctti_type_index::type_id<short>().pretty_name() \endcode returns the following:
+/// \code "static const char *boost::detail::ctti<short>::n() [T = short]" \endcode
+///
+/// As we may see first 39 characters are "static const char *boost::detail::ctti<" and they do not depend on
+/// the type T. After first 39 characters we have a human readable type name which is duplicated at the end
+/// of a string. String always ends on ']', which consumes 1 character.
+///
+/// Now if we define `BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING` to
+/// `(39, 1, false, "")` we'll be getting \code "int>::n() [T = int" \endcode
+/// for `boost::typeindex::ctti_type_index::type_id<int>().pretty_name()` and \code "short>::n() [T = short" \endcode
+/// for `boost::typeindex::ctti_type_index::type_id<short>().pretty_name()`.
+///
+/// Now we need to take additional care of the characters that go before the last mention of our type. We'll
+/// do that by telling the macro that we need to cut off everything that goes before the "T = " including the "T = "
+/// itself:
+///
+/// \code (39, 1, true, "T = ") \endcode
+///
+/// In case of GCC or Clang command line we need to add the following line while compiling all the sources:
+///
+/// \code
+/// -DBOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING='(39, 1, true, "T = ")'
+/// \endcode
+/// \param begin_skip How many characters must be skipped at the beginning of the type holding string.
+/// Must be a compile time constant.
+/// \param end_skip How many characters must be skipped at the end of the type holding string.
+/// Must be a compile time constant.
+/// \param runtime_skip Do we need additional checks at runtime to cut off the more characters.
+/// Must be `true` or `false`.
+/// \param runtime_skip_until Skip all the characters before the following string (including the string itself).
+/// Must be a compile time array of characters.
+///
+/// See [RTTI emulation limitations](boost_typeindex/rtti_emulation_limitations.html) for more info.
+#define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING (0, 0, false, "")
+
+
+ /// Depending on a compiler flags, optimal implementation of type_index will be used
+ /// as a default boost::typeindex::type_index.
+ ///
+ /// Could be a boost::typeindex::stl_type_index, boost::typeindex::ctti_type_index or
+ /// user defined type_index class.
+ ///
+ /// \b See boost::typeindex::type_index_facade for a full description of type_index functions.
+ typedef platform_specific type_index;
+#elif defined(BOOST_TYPE_INDEX_USER_TYPEINDEX)
+ // Nothing to do
+#elif (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY)) || defined(BOOST_MSVC)
+ typedef boost::typeindex::stl_type_index type_index;
+#else
+ typedef boost::typeindex::ctti_type_index type_index;
+#endif
+
+/// Depending on a compiler flags, optimal implementation of type_info will be used
+/// as a default boost::typeindex::type_info.
+///
+/// Could be a std::type_info, boost::typeindex::detail::ctti_data or
+/// some user defined class.
+///
+/// type_info \b is \b not copyable or default constructible. It is \b not assignable too!
+typedef type_index::type_info_t type_info;
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+
+/// \def BOOST_TYPE_INDEX_USER_TYPEINDEX
+/// BOOST_TYPE_INDEX_USER_TYPEINDEX can be defined to the path to header file
+/// with user provided implementation of type_index.
+///
+/// See [Making a custom type_index](boost_typeindex/making_a_custom_type_index.html) section
+/// of documentation for usage example.
+#define BOOST_TYPE_INDEX_USER_TYPEINDEX <full/absolute/path/to/header/with/type_index.hpp>
+
+
+/// \def BOOST_TYPE_INDEX_REGISTER_CLASS
+/// BOOST_TYPE_INDEX_REGISTER_CLASS is used to help to emulate RTTI.
+/// Put this macro into the public section of polymorphic class to allow runtime type detection.
+///
+/// Depending on the typeid() availability this macro will expand to nothing or to virtual helper function
+/// `virtual const type_info& boost_type_info_type_id_runtime_() const noexcept`.
+///
+/// \b Example:
+/// \code
+/// class A {
+/// public:
+/// BOOST_TYPE_INDEX_REGISTER_CLASS
+/// virtual ~A(){}
+/// };
+///
+/// struct B: public A {
+/// BOOST_TYPE_INDEX_REGISTER_CLASS
+/// };
+///
+/// struct C: public B {
+/// BOOST_TYPE_INDEX_REGISTER_CLASS
+/// };
+///
+/// ...
+///
+/// C c1;
+/// A* pc1 = &c1;
+/// assert(boost::typeindex::type_id<C>() == boost::typeindex::type_id_runtime(*pc1));
+/// \endcode
+#define BOOST_TYPE_INDEX_REGISTER_CLASS nothing-or-some-virtual-functions
+
+/// \def BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY
+/// BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY is a helper macro that must be defined if mixing
+/// RTTI on/off modules. See
+/// [Mixing sources with RTTI on and RTTI off](boost_typeindex/mixing_sources_with_rtti_on_and_.html)
+/// section of documentation for more info.
+#define BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY
+
+#endif // defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+
+
+/// Function to get boost::typeindex::type_index for a type T.
+/// Removes const, volatile && and & modifiers from T.
+///
+/// \b Example:
+/// \code
+/// type_index ti = type_id<int&>();
+/// std::cout << ti.pretty_name(); // Outputs 'int'
+/// \endcode
+///
+/// \tparam T Type for which type_index must be created.
+/// \throw Nothing.
+/// \return boost::typeindex::type_index with information about the specified type T.
+template <class T>
+inline type_index type_id() BOOST_NOEXCEPT {
+ return type_index::type_id<T>();
+}
+
+/// Function for constructing boost::typeindex::type_index instance for type T.
+/// Does not remove const, volatile, & and && modifiers from T.
+///
+/// If T has no const, volatile, & and && modifiers, then returns exactly
+/// the same result as in case of calling `type_id<T>()`.
+///
+/// \b Example:
+/// \code
+/// type_index ti = type_id_with_cvr<int&>();
+/// std::cout << ti.pretty_name(); // Outputs 'int&'
+/// \endcode
+///
+/// \tparam T Type for which type_index must be created.
+/// \throw Nothing.
+/// \return boost::typeindex::type_index with information about the specified type T.
+template <class T>
+inline type_index type_id_with_cvr() BOOST_NOEXCEPT {
+ return type_index::type_id_with_cvr<T>();
+}
+
+/// Function that works exactly like C++ typeid(rtti_val) call, but returns boost::type_index.
+///
+/// Retunrs runtime information about specified type.
+///
+/// \b Requirements: RTTI available or Base and Derived classes must be marked with BOOST_TYPE_INDEX_REGISTER_CLASS.
+///
+/// \b Example:
+/// \code
+/// struct Base { virtual ~Base(){} };
+/// struct Derived: public Base {};
+/// ...
+/// Derived d;
+/// Base& b = d;
+/// type_index ti = type_id_runtime(b);
+/// std::cout << ti.pretty_name(); // Outputs 'Derived'
+/// \endcode
+///
+/// \param runtime_val Varaible which runtime type must be returned.
+/// \throw Nothing.
+/// \return boost::typeindex::type_index with information about the specified variable.
+template <class T>
+inline type_index type_id_runtime(const T& runtime_val) BOOST_NOEXCEPT {
+ return type_index::type_id_runtime(runtime_val);
+}
+
+}} // namespace boost::typeindex
+
+
+
+#endif // BOOST_TYPE_INDEX_HPP
+
diff --git a/3party/boost/boost/type_index/ctti_type_index.hpp b/3party/boost/boost/type_index/ctti_type_index.hpp
new file mode 100644
index 0000000000..385eb9ede7
--- /dev/null
+++ b/3party/boost/boost/type_index/ctti_type_index.hpp
@@ -0,0 +1,179 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2014.
+//
+//
+// 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_TYPE_INDEX_CTTI_TYPE_INDEX_HPP
+#define BOOST_TYPE_INDEX_CTTI_TYPE_INDEX_HPP
+
+/// \file ctti_type_index.hpp
+/// \brief Contains boost::typeindex::ctti_type_index class.
+///
+/// boost::typeindex::ctti_type_index class can be used as a drop-in replacement
+/// for std::type_index.
+///
+/// It is used in situations when typeid() method is not available or
+/// BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY macro is defined.
+
+#include <boost/type_index/type_index_facade.hpp>
+#include <boost/type_index/detail/compile_time_type_info.hpp>
+
+#include <cstring>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+namespace boost { namespace typeindex {
+
+namespace detail {
+
+// That's the most trickiest part of the TypeIndex library:
+// 1) we do not whant to give user ability to manually construct and compare `struct-that-represents-type`
+// 2) we need to distinguish beteween `struct-that-represents-type` and `const char*`
+// 3) we need a thread-safe way to have references to instances `struct-that-represents-type`
+// 4) we need a compile-time control to make shure that user does not copy or
+// default construct `struct-that-represents-type`
+//
+// Solution would be the following:
+
+/// \class ctti_data
+/// Standard-layout class with private constructors and assignment operators.
+///
+/// You can not work with this class directly. The purpose of this class is to hold type info
+/// \b when \b RTTI \b is \b off and allow ctti_type_index construction from itself.
+///
+/// \b Example:
+/// \code
+/// const detail::ctti_data& foo();
+/// ...
+/// type_index ti = type_index(foo());
+/// std::cout << ti.pretty_name();
+/// \endcode
+class ctti_data {
+#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS
+public:
+ ctti_data() = delete;
+ ctti_data(const ctti_data&) = delete;
+ ctti_data& operator=(const ctti_data&) = delete;
+#else
+private:
+ ctti_data();
+ ctti_data(const ctti_data&);
+ ctti_data& operator=(const ctti_data&);
+#endif
+};
+
+} // namespace detail
+
+/// Helper method for getting detail::ctti_data of a tempalte patameter T.
+template <class T>
+inline const detail::ctti_data& ctti_construct() BOOST_NOEXCEPT {
+ // Standard C++11, 5.2.10 Reinterpret cast:
+ // An object pointer can be explicitly converted to an object pointer of a different type. When a prvalue
+ // v of type “pointer to T1†is converted to the type “pointer to cv T2â€, the result is static_cast<cv
+ // T2*>(static_cast<cv void*>(v)) if both T1 and T2 are standard-layout types (3.9) and the alignment
+ // requirements of T2 are no stricter than those of T1, or if either type is void. Converting a prvalue of type
+ // “pointer to T1†to the type “pointer to T2†(where T1 and T2 are object types and where the alignment
+ // requirements of T2 are no stricter than those of T1) and back to its original type yields the original pointer
+ // value.
+ //
+ // Alignments are checked in `type_index_test_ctti_alignment.cpp` test.
+ return *reinterpret_cast<const detail::ctti_data*>(boost::detail::ctti<T>::n());
+}
+
+/// \class ctti_type_index
+/// This class is a wrapper that pretends to work exactly like stl_type_index, but does
+/// not require RTTI support. \b For \b description \b of \b functions \b see type_index_facade.
+///
+/// This class produces slightly longer type names, so consider using stl_type_index
+/// in situations when typeid() is working.
+class ctti_type_index: public type_index_facade<ctti_type_index, detail::ctti_data> {
+ const detail::ctti_data* data_;
+
+ inline std::size_t get_raw_name_length() const BOOST_NOEXCEPT;
+
+public:
+ typedef detail::ctti_data type_info_t;
+
+ inline ctti_type_index() BOOST_NOEXCEPT
+ : data_(&ctti_construct<void>())
+ {}
+
+ inline ctti_type_index(const type_info_t& data) BOOST_NOEXCEPT
+ : data_(&data)
+ {}
+
+ inline const type_info_t& type_info() const BOOST_NOEXCEPT;
+ inline const char* raw_name() const BOOST_NOEXCEPT;
+ inline std::string pretty_name() const;
+ inline std::size_t hash_code() const BOOST_NOEXCEPT;
+
+ template <class T>
+ inline static ctti_type_index type_id() BOOST_NOEXCEPT;
+
+ template <class T>
+ inline static ctti_type_index type_id_with_cvr() BOOST_NOEXCEPT;
+
+ template <class T>
+ inline static ctti_type_index type_id_runtime(const T& variable) BOOST_NOEXCEPT;
+};
+
+
+inline const ctti_type_index::type_info_t& ctti_type_index::type_info() const BOOST_NOEXCEPT {
+ return *data_;
+}
+
+
+template <class T>
+inline ctti_type_index ctti_type_index::type_id() BOOST_NOEXCEPT {
+ typedef BOOST_DEDUCED_TYPENAME boost::remove_reference<T>::type no_ref_t;
+ typedef BOOST_DEDUCED_TYPENAME boost::remove_cv<no_ref_t>::type no_cvr_t;
+ return ctti_construct<no_cvr_t>();
+}
+
+
+
+template <class T>
+inline ctti_type_index ctti_type_index::type_id_with_cvr() BOOST_NOEXCEPT {
+ return ctti_construct<T>();
+}
+
+
+template <class T>
+inline ctti_type_index ctti_type_index::type_id_runtime(const T& variable) BOOST_NOEXCEPT {
+ return variable.boost_type_index_type_id_runtime_();
+}
+
+
+inline const char* ctti_type_index::raw_name() const BOOST_NOEXCEPT {
+ return reinterpret_cast<const char*>(data_);
+}
+
+inline std::size_t ctti_type_index::get_raw_name_length() const BOOST_NOEXCEPT {
+ return std::strlen(raw_name() + detail::ctti_skip_size_at_end);
+}
+
+
+inline std::string ctti_type_index::pretty_name() const {
+ std::size_t len = get_raw_name_length();
+ while (raw_name()[len - 1] == ' ') --len; // MSVC sometimes adds whitespaces
+ return std::string(raw_name(), len);
+}
+
+
+inline std::size_t ctti_type_index::hash_code() const BOOST_NOEXCEPT {
+ return boost::hash_range(raw_name(), raw_name() + get_raw_name_length());
+}
+
+
+}} // namespace boost::typeindex
+
+#endif // BOOST_TYPE_INDEX_CTTI_TYPE_INDEX_HPP
+
diff --git a/3party/boost/boost/type_index/detail/compile_time_type_info.hpp b/3party/boost/boost/type_index/detail/compile_time_type_info.hpp
new file mode 100644
index 0000000000..2a14edbb1a
--- /dev/null
+++ b/3party/boost/boost/type_index/detail/compile_time_type_info.hpp
@@ -0,0 +1,143 @@
+//
+// Copyright (c) Antony Polukhin, 2012-2014.
+//
+//
+// 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_TYPE_INDEX_DETAIL_COMPILE_TIME_TYPE_INFO_HPP
+#define BOOST_TYPE_INDEX_DETAIL_COMPILE_TIME_TYPE_INFO_HPP
+
+/// \file compile_time_type_info.hpp
+/// \brief Contains helper macros and implementation details of boost::typeindex::ctti_type_index.
+/// Not intended for inclusion from user's code.
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <algorithm>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+/// @cond
+#define BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(begin_skip, end_skip, runtime_skip, runtime_skip_until) \
+ namespace boost { namespace typeindex { namespace detail { \
+ BOOST_STATIC_CONSTEXPR std::size_t ctti_skip_size_at_begin = begin_skip; \
+ BOOST_STATIC_CONSTEXPR std::size_t ctti_skip_size_at_end = end_skip; \
+ BOOST_STATIC_CONSTEXPR bool ctti_skip_more_at_runtime = runtime_skip; \
+ BOOST_STATIC_CONSTEXPR char ctti_skip_until_runtime[] = runtime_skip_until; \
+ }}} /* namespace boost::typeindex::detail */ \
+ /**/
+/// @endcond
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+ /* Nothing to document. All the macro docs are moved to <boost/type_index.hpp> */
+#elif defined(BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING)
+
+# include <boost/preprocessor/facilities/expand.hpp>
+ BOOST_PP_EXPAND( BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING )
+
+#elif defined(_MSC_VER)
+ // sizeof("const char *__cdecl boost::detail::ctti<") - 1, sizeof(">::n(void)") - 1
+ BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(40, 10, false, "");
+#elif defined(__clang__) && defined(__APPLE__)
+ // Someone made __clang_major__ equal to LLVM version rather than compiler version
+ // on APPLE platform.
+ //
+ // Using less efficient solution because there is no good way to detect real version of Clang.
+ // sizeof("static const char *boost::detail::ctti<") - 1, sizeof("]") - 1, true, "???????????>::n() [T = int"
+ BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(39, 1, true, "T = ");
+#elif defined(__clang__) && (__clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ == 0))
+ // sizeof("static const char *boost::detail::ctti<") - 1, sizeof(">::n()") - 1
+ // note: checked on 3.0
+ BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(39, 6, false, "");
+#elif defined(__clang__) && __clang_major__ == 3 && __clang_minor__ > 0
+ // sizeof("static const char *boost::detail::ctti<") - 1, sizeof("]") - 1, true, "int>::n() [T = int"
+ // note: checked on 3.1, 3.4
+ BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(39, 1, true, "T = ");
+#elif defined(__GNUC__)
+ // sizeof("static const char* boost::detail::ctti<T>::n() [with T = ") - 1, sizeof("]") - 1
+ BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(57, 1, false, "");
+#else
+ // Deafult code for other platforms... Just skip nothing!
+ BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(0, 0, false, "");
+#endif
+
+#undef BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS
+
+namespace boost { namespace typeindex { namespace detail {
+ template <bool Condition>
+ inline void assert_compile_time_legths() BOOST_NOEXCEPT {
+ BOOST_STATIC_ASSERT_MSG(
+ Condition,
+ "TypeIndex library is misconfigured for your compiler. "
+ "Please define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING to correct values. See section "
+ "'RTTI emulation limitations' of the documentation for more information."
+ );
+ }
+
+ template <std::size_t ArrayLength>
+ inline const char* skip_begining_runtime(const char* begin, boost::mpl::false_) BOOST_NOEXCEPT {
+ return begin;
+ }
+
+ template <std::size_t ArrayLength>
+ inline const char* skip_begining_runtime(const char* begin, boost::mpl::true_) BOOST_NOEXCEPT {
+ const char* const it = std::search(
+ begin, begin + ArrayLength,
+ ctti_skip_until_runtime, ctti_skip_until_runtime + sizeof(ctti_skip_until_runtime) - 1
+ );
+ return (it == begin + ArrayLength ? begin : it + sizeof(ctti_skip_until_runtime) - 1);
+ }
+
+ template <std::size_t ArrayLength>
+ inline const char* skip_begining(const char* begin) BOOST_NOEXCEPT {
+ assert_compile_time_legths<(ArrayLength > ctti_skip_size_at_begin + ctti_skip_size_at_end)>();
+ return skip_begining_runtime<ArrayLength - ctti_skip_size_at_begin>(
+ begin + ctti_skip_size_at_begin,
+ boost::mpl::bool_<ctti_skip_more_at_runtime>()
+ );
+ }
+}}} // namespace boost::typeindex::detail
+
+namespace boost { namespace detail {
+
+/// Noncopyable type_info that does not require RTTI.
+/// CTTI == Compile Time Type Info.
+/// This name must be as short as posible, to avoid code bloat
+template <class T>
+struct ctti {
+
+ /// Returns raw name. Must be as short, as possible, to avoid code bloat
+ static const char* n() BOOST_NOEXCEPT {
+ #if defined(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE)
+ return boost::typeindex::detail::skip_begining< sizeof(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE >(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE);
+ #elif defined(__FUNCSIG__)
+ return boost::typeindex::detail::skip_begining< sizeof(__FUNCSIG__) >(__FUNCSIG__);
+ #elif defined(__PRETTY_FUNCTION__) \
+ || defined(__GNUC__) \
+ || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) \
+ || (defined(__ICC) && (__ICC >= 600)) \
+ || defined(__ghs__) \
+ || defined(__DMC__)
+
+ return boost::typeindex::detail::skip_begining< sizeof(__PRETTY_FUNCTION__) >(__PRETTY_FUNCTION__);
+ #else
+ BOOST_STATIC_ASSERT_MSG(
+ sizeof(T) && false,
+ "TypeIndex library could not detect your compiler. "
+ "Please make the BOOST_TYPE_INDEX_FUNCTION_SIGNATURE macro use "
+ "correct compiler macro for getting the whole function name. "
+ "Define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING to correct value after that."
+ );
+ #endif
+ }
+};
+
+}} // namespace boost::detail
+
+#endif // BOOST_TYPE_INDEX_DETAIL_COMPILE_TIME_TYPE_INFO_HPP
+
diff --git a/3party/boost/boost/type_index/detail/ctti_register_class.hpp b/3party/boost/boost/type_index/detail/ctti_register_class.hpp
new file mode 100644
index 0000000000..a8cef2c497
--- /dev/null
+++ b/3party/boost/boost/type_index/detail/ctti_register_class.hpp
@@ -0,0 +1,40 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2014.
+//
+//
+// 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_TYPE_INDEX_CTTI_REGISTER_CLASS_HPP
+#define BOOST_TYPE_INDEX_CTTI_REGISTER_CLASS_HPP
+
+/// \file ctti_register_class.hpp
+/// \brief Contains BOOST_TYPE_INDEX_REGISTER_CLASS macro implementation that uses boost::typeindex::ctti_type_index.
+/// Not intended for inclusion from user's code.
+
+#include <boost/type_index/ctti_type_index.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+namespace boost { namespace typeindex { namespace detail {
+
+template <class T>
+inline const ctti_data& ctti_construct_typeid_ref(const T*) BOOST_NOEXCEPT {
+ return ctti_construct<T>();
+}
+
+}}} // namespace boost::typeindex::detail
+
+/// @cond
+#define BOOST_TYPE_INDEX_REGISTER_CLASS \
+ virtual const boost::typeindex::detail::ctti_data& boost_type_index_type_id_runtime_() const BOOST_NOEXCEPT { \
+ return boost::typeindex::detail::ctti_construct_typeid_ref(this); \
+ } \
+/**/
+/// @endcond
+
+#endif // BOOST_TYPE_INDEX_CTTI_REGISTER_CLASS_HPP
+
diff --git a/3party/boost/boost/type_index/detail/stl_register_class.hpp b/3party/boost/boost/type_index/detail/stl_register_class.hpp
new file mode 100644
index 0000000000..95a26f7b0e
--- /dev/null
+++ b/3party/boost/boost/type_index/detail/stl_register_class.hpp
@@ -0,0 +1,40 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2014.
+//
+//
+// 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_TYPE_INDEX_STL_REGISTER_CLASS_HPP
+#define BOOST_TYPE_INDEX_STL_REGISTER_CLASS_HPP
+
+/// \file stl_register_class.hpp
+/// \brief Contains BOOST_TYPE_INDEX_REGISTER_CLASS macro implementation that uses boost::typeindex::stl_type_index.
+/// Not intended for inclusion from user's code.
+
+#include <boost/type_index/stl_type_index.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+namespace boost { namespace typeindex { namespace detail {
+
+template <class T>
+inline const stl_type_index::type_info_t& stl_construct_typeid_ref(const T*) BOOST_NOEXCEPT {
+ return typeid(T);
+}
+
+}}} // namespace boost::typeindex::detail
+
+/// @cond
+#define BOOST_TYPE_INDEX_REGISTER_CLASS \
+ virtual const boost::typeindex::stl_type_index::type_info_t& boost_type_index_type_id_runtime_() const BOOST_NOEXCEPT { \
+ return boost::typeindex::detail::stl_construct_typeid_ref(this); \
+ } \
+/**/
+/// @endcond
+
+#endif // BOOST_TYPE_INDEX_STL_REGISTER_CLASS_HPP
+
diff --git a/3party/boost/boost/type_index/stl_type_index.hpp b/3party/boost/boost/type_index/stl_type_index.hpp
new file mode 100644
index 0000000000..b2821b66a9
--- /dev/null
+++ b/3party/boost/boost/type_index/stl_type_index.hpp
@@ -0,0 +1,300 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2014.
+//
+//
+// 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_TYPE_INDEX_STL_TYPE_INDEX_HPP
+#define BOOST_TYPE_INDEX_STL_TYPE_INDEX_HPP
+
+/// \file stl_type_index.hpp
+/// \brief Contains boost::typeindex::stl_type_index class.
+///
+/// boost::typeindex::stl_type_index class can be used as a drop-in replacement
+/// for std::type_index.
+///
+/// It is used in situations when RTTI is enabled or typeid() method is available.
+/// When typeid() is disabled or BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY macro
+/// is defined boost::typeindex::ctti is usually used instead of boost::typeindex::stl_type_index.
+
+#include <boost/type_index/type_index_facade.hpp>
+
+// MSVC is capable of calling typeid(T) even when RTTI is off
+#if defined(BOOST_NO_RTTI) && !defined(BOOST_MSVC)
+#error "File boost/type_index/stl_type_index.ipp is not usable when typeid() is not available."
+#endif
+
+#include <typeinfo>
+#include <cstring> // std::strcmp, std::strlen
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/functional/hash_fwd.hpp>
+
+
+#ifdef __GNUC__
+# include <cxxabi.h> // abi::__cxa_demangle
+#endif
+
+#if !defined(BOOST_MSVC)
+# include <boost/assert.hpp>
+# include <cstdlib> // std::free
+# include <algorithm> // std::find, std::search
+#endif
+
+#if (defined(__EDG_VERSION__) && __EDG_VERSION__ < 245) \
+ || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 744)
+# include <boost/type_traits/is_signed.hpp>
+# include <boost/type_traits/make_signed.hpp>
+# include <boost/mpl/identity.hpp>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+namespace boost { namespace typeindex {
+
+/// \class stl_type_index
+/// This class is a wrapper around std::type_info, that workarounds issues and provides
+/// much more rich interface. \b For \b description \b of \b functions \b see type_index_facade.
+///
+/// This class requires typeid() to work. For cases when RTTI is disabled see ctti_type_index.
+class stl_type_index
+ : public type_index_facade<
+ stl_type_index,
+ #ifdef BOOST_NO_STD_TYPEINFO
+ type_info
+ #else
+ std::type_info
+ #endif
+ >
+{
+public:
+#ifdef BOOST_NO_STD_TYPEINFO
+ typedef type_info type_info_t;
+#else
+ typedef std::type_info type_info_t;
+#endif
+
+private:
+ const type_info_t* data_;
+
+public:
+ inline stl_type_index() BOOST_NOEXCEPT
+ : data_(&typeid(void))
+ {}
+
+ inline stl_type_index(const type_info_t& data) BOOST_NOEXCEPT
+ : data_(&data)
+ {}
+
+ inline const type_info_t& type_info() const BOOST_NOEXCEPT;
+
+ inline const char* raw_name() const BOOST_NOEXCEPT;
+ inline const char* name() const BOOST_NOEXCEPT;
+ inline std::string pretty_name() const;
+
+ inline std::size_t hash_code() const BOOST_NOEXCEPT;
+ inline bool equal(const stl_type_index& rhs) const BOOST_NOEXCEPT;
+ inline bool before(const stl_type_index& rhs) const BOOST_NOEXCEPT;
+
+ template <class T>
+ inline static stl_type_index type_id() BOOST_NOEXCEPT;
+
+ template <class T>
+ inline static stl_type_index type_id_with_cvr() BOOST_NOEXCEPT;
+
+ template <class T>
+ inline static stl_type_index type_id_runtime(const T& value) BOOST_NOEXCEPT;
+};
+
+inline const stl_type_index::type_info_t& stl_type_index::type_info() const BOOST_NOEXCEPT {
+ return *data_;
+}
+
+
+inline const char* stl_type_index::raw_name() const BOOST_NOEXCEPT {
+#ifdef _MSC_VER
+ return data_->raw_name();
+#else
+ return data_->name();
+#endif
+}
+
+inline const char* stl_type_index::name() const BOOST_NOEXCEPT {
+ return data_->name();
+}
+
+namespace detail {
+ class free_at_scope_exit {
+ char* to_free_;
+
+ public:
+ explicit free_at_scope_exit(char* to_free) BOOST_NOEXCEPT
+ : to_free_(to_free)
+ {}
+
+ ~free_at_scope_exit() BOOST_NOEXCEPT {
+ std::free(to_free_);
+ }
+ };
+}
+
+inline std::string stl_type_index::pretty_name() const {
+ static const char cvr_saver_name[] = "boost::typeindex::detail::cvr_saver<";
+
+#if defined(_MSC_VER)
+ std::string ret = data_->name();
+ std::string::size_type pos_beg = ret.find(cvr_saver_name);
+ if (pos_beg == std::string::npos) {
+ return ret;
+ }
+
+ const char* begin = ret.c_str() + pos_beg + sizeof(cvr_saver_name) - 1;
+ const char* end = ret.c_str() + ret.size() - 1;
+#else
+ int status = 0;
+ char* demang = abi::__cxa_demangle(raw_name(), NULL, 0, &status);
+ detail::free_at_scope_exit scope(demang);
+ BOOST_ASSERT(!status);
+ const std::size_t length = std::strlen(demang);
+ const char* begin = std::search(
+ demang, demang + length,
+ cvr_saver_name, cvr_saver_name + sizeof(cvr_saver_name) - 1
+ );
+
+ if (begin == demang + length) {
+ return std::string(demang, demang + length);
+ }
+ begin += sizeof(cvr_saver_name) - 1;
+ const char* end = demang + length - 1;
+#endif
+ while (*begin == ' ') { // begin is zero terminated
+ ++ begin;
+ }
+
+ while (end != begin && *end != '>') {
+ -- end;
+ }
+
+ // we have cvr_saver_name somewhere at the start of the end
+ while (end != begin && *(end - 1) == ' ') {
+ -- end;
+ }
+
+ if (begin >= end) {
+ // Some strange error in demangled name parsing
+ return begin;
+ }
+
+ return std::string(begin, end);
+}
+
+
+inline std::size_t stl_type_index::hash_code() const BOOST_NOEXCEPT {
+#if _MSC_VER > 1600 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5 && defined(__GXX_EXPERIMENTAL_CXX0X__))
+ return data_->hash_code();
+#else
+ return boost::hash_range(raw_name(), raw_name() + std::strlen(raw_name()));
+#endif
+}
+
+
+/// @cond
+
+// for this compiler at least, cross-shared-library type_info
+// comparisons don't work, so we are using typeid(x).name() instead.
+# if (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5))) \
+ || defined(_AIX) \
+ || (defined(__sgi) && defined(__host_mips)) \
+ || (defined(__hpux) && defined(__HP_aCC)) \
+ || (defined(linux) && defined(__INTEL_COMPILER) && defined(__ICC))
+# define BOOST_CLASSINFO_COMPARE_BY_NAMES
+# endif
+
+/// @endcond
+
+inline bool stl_type_index::equal(const stl_type_index& rhs) const BOOST_NOEXCEPT {
+#ifdef BOOST_CLASSINFO_COMPARE_BY_NAMES
+ return raw_name() == rhs.raw_name() || !std::strcmp(raw_name(), rhs.raw_name());
+#else
+ return *data_ == *rhs.data_;
+#endif
+}
+
+inline bool stl_type_index::before(const stl_type_index& rhs) const BOOST_NOEXCEPT {
+#ifdef BOOST_CLASSINFO_COMPARE_BY_NAMES
+ return raw_name() != rhs.raw_name() && std::strcmp(raw_name(), rhs.raw_name()) < 0;
+#else
+ return !!data_->before(*rhs.data_);
+#endif
+}
+
+#ifdef BOOST_CLASSINFO_COMPARE_BY_NAMES
+#undef BOOST_CLASSINFO_COMPARE_BY_NAMES
+#endif
+
+
+
+template <class T>
+inline stl_type_index stl_type_index::type_id() BOOST_NOEXCEPT {
+ typedef BOOST_DEDUCED_TYPENAME boost::remove_reference<T>::type no_ref_t;
+ typedef BOOST_DEDUCED_TYPENAME boost::remove_cv<no_ref_t>::type no_cvr_prefinal_t;
+
+ # if (defined(__EDG_VERSION__) && __EDG_VERSION__ < 245) \
+ || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 744)
+
+ // Old EDG-based compilers seem to mistakenly distinguish 'integral' from 'signed integral'
+ // in typeid() expressions. Full temaplte specialization for 'integral' fixes that issue:
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<
+ boost::is_signed<no_cvr_prefinal_t>,
+ boost::make_signed<no_cvr_prefinal_t>,
+ boost::mpl::identity<no_cvr_prefinal_t>
+ >::type no_cvr_prefinal_lazy_t;
+
+ typedef BOOST_DEDUCED_TYPENAME no_cvr_prefinal_t::type no_cvr_t;
+ #else
+ typedef no_cvr_prefinal_t no_cvr_t;
+ #endif
+
+ return typeid(no_cvr_t);
+}
+
+namespace detail {
+ template <class T> class cvr_saver{};
+}
+
+template <class T>
+inline stl_type_index stl_type_index::type_id_with_cvr() BOOST_NOEXCEPT {
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<
+ boost::mpl::or_<boost::is_reference<T>, boost::is_const<T>, boost::is_volatile<T> >,
+ detail::cvr_saver<T>,
+ T
+ >::type type;
+
+ return typeid(type);
+}
+
+
+template <class T>
+inline stl_type_index stl_type_index::type_id_runtime(const T& value) BOOST_NOEXCEPT {
+#ifdef BOOST_NO_RTTI
+ return value.boost_type_index_type_id_runtime_();
+#else
+ return typeid(value);
+#endif
+}
+
+}} // namespace boost::typeindex
+
+
+#endif // BOOST_TYPE_INDEX_STL_TYPE_INDEX_HPP
+
diff --git a/3party/boost/boost/type_index/type_index_facade.hpp b/3party/boost/boost/type_index/type_index_facade.hpp
new file mode 100644
index 0000000000..355464c7c7
--- /dev/null
+++ b/3party/boost/boost/type_index/type_index_facade.hpp
@@ -0,0 +1,296 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2014.
+//
+//
+// 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_TYPE_INDEX_TYPE_INDEX_FACADE_HPP
+#define BOOST_TYPE_INDEX_TYPE_INDEX_FACADE_HPP
+
+#include <boost/config.hpp>
+#include <boost/functional/hash_fwd.hpp>
+#include <string>
+#include <cstring>
+
+#if !defined(BOOST_NO_IOSTREAM)
+#if !defined(BOOST_NO_IOSFWD)
+#include <iosfwd> // for std::basic_ostream
+#else
+#include <ostream>
+#endif
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+namespace boost { namespace typeindex {
+
+/// \class type_index_facade
+///
+/// This class takes care about the comparison operators, hash functions and
+/// ostream operators. Use this class as a public base class for defining new
+/// type_info-conforming classes.
+///
+/// \b Example:
+/// \code
+/// class stl_type_index: public type_index_facade<stl_type_index, std::type_info>
+/// {
+/// public:
+/// typedef std::type_info type_info_t;
+/// private:
+/// const type_info_t* data_;
+///
+/// public:
+/// stl_type_index(const type_info_t& data) noexcept
+/// : data_(&data)
+/// {}
+/// // ...
+/// };
+/// \endcode
+///
+/// \tparam Derived Class derived from type_index_facade.
+/// \tparam TypeInfo Class that will be used as a base type_info class.
+/// \note Take a look at the protected methods. They are \b not \b defined in type_index_facade.
+/// Protected member functions raw_name() \b must be defined in Derived class. All the other
+/// methods are mandatory.
+/// \see 'Making a custom type_index' section for more information about
+/// creating your own type_index using type_index_facade.
+template <class Derived, class TypeInfo>
+class type_index_facade {
+private:
+ /// @cond
+ const Derived & derived() const BOOST_NOEXCEPT {
+ return *static_cast<Derived const*>(this);
+ }
+ /// @endcond
+public:
+ typedef TypeInfo type_info_t;
+
+ /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+ /// \return Name of a type. By default retuns Derived::raw_name().
+ inline const char* name() const BOOST_NOEXCEPT {
+ return derived().raw_name();
+ }
+
+ /// \b Override: This function \b may be redefined in Derived class. Overrides may throw.
+ /// \return Human redable type name. By default retuns Derived::name().
+ inline std::string pretty_name() const {
+ return derived().name();
+ }
+
+ /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+ /// \return True if two types are equal. By default compares types by raw_name().
+ inline bool equal(const Derived& rhs) const BOOST_NOEXCEPT {
+ const char* const left = derived().raw_name();
+ const char* const right = rhs.raw_name();
+ return left == right || !std::strcmp(left, right);
+ }
+
+ /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+ /// \return True if rhs is greater than this. By default compares types by raw_name().
+ inline bool before(const Derived& rhs) const BOOST_NOEXCEPT {
+ const char* const left = derived().raw_name();
+ const char* const right = rhs.raw_name();
+ return left != right && std::strcmp(left, right) < 0;
+ }
+
+ /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+ /// \return Hash code of a type. By default hashes types by raw_name().
+ /// \note <boost/functional/hash.hpp> has to be included if this function is used.
+ inline std::size_t hash_code() const BOOST_NOEXCEPT {
+ const char* const name = derived().raw_name();
+ return boost::hash_range(name, name + std::strlen(name));
+ }
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+protected:
+ /// \b Override: This function \b must be redefined in Derived class. Overrides \b must not throw.
+ /// \return Pointer to unredable/raw type name.
+ inline const char* raw_name() const BOOST_NOEXCEPT;
+
+ /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+ /// \return Const reference to underlying low level type_info_t.
+ inline const type_info_t& type_info() const BOOST_NOEXCEPT;
+
+ /// This is a factory method that is used to create instances of Derived classes.
+ /// boost::typeindex::type_id() will call this method, if Derived has same type as boost::typeindex::type_index.
+ ///
+ /// \b Override: This function \b may be redefined and made public in Derived class. Overrides \b must not throw.
+ /// Overrides \b must remove const, volatile && and & modifiers from T.
+ /// \tparam T Type for which type_index must be created.
+ /// \return type_index for type T.
+ template <class T>
+ static Derived type_id() BOOST_NOEXCEPT;
+
+ /// This is a factory method that is used to create instances of Derived classes.
+ /// boost::typeindex::type_id_with_cvr() will call this method, if Derived has same type as boost::typeindex::type_index.
+ ///
+ /// \b Override: This function \b may be redefined and made public in Derived class. Overrides \b must not throw.
+ /// Overrides \b must \b not remove const, volatile && and & modifiers from T.
+ /// \tparam T Type for which type_index must be created.
+ /// \return type_index for type T.
+ template <class T>
+ static Derived type_id_with_cvr() BOOST_NOEXCEPT;
+
+ /// This is a factory method that is used to create instances of Derived classes.
+ /// boost::typeindex::type_id_runtime(const T&) will call this method, if Derived has same type as boost::typeindex::type_index.
+ ///
+ /// \b Override: This function \b may be redefined and made public in Derived class.
+ /// \param variable Variable which runtime type will be stored in type_index.
+ /// \return type_index with runtime type of variable.
+ template <class T>
+ static Derived type_id_runtime(const T& variable) BOOST_NOEXCEPT;
+
+#endif
+
+};
+
+/// @cond
+template <class Derived, class TypeInfo>
+inline bool operator == (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return static_cast<Derived const&>(lhs).equal(static_cast<Derived const&>(rhs));
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator < (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return static_cast<Derived const&>(lhs).before(static_cast<Derived const&>(rhs));;
+}
+
+
+
+template <class Derived, class TypeInfo>
+inline bool operator > (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return rhs < lhs;
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator <= (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return !(lhs > rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator >= (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return !(lhs < rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator != (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return !(lhs == rhs);
+}
+
+// ######################### COMPARISONS with Derived ############################ //
+template <class Derived, class TypeInfo>
+inline bool operator == (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return Derived(lhs) == rhs;
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator < (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return Derived(lhs) < rhs;
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator > (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return rhs < Derived(lhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator <= (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return !(Derived(lhs) > rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator >= (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return !(Derived(lhs) < rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator != (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+ return !(Derived(lhs) == rhs);
+}
+
+
+template <class Derived, class TypeInfo>
+inline bool operator == (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+ return lhs == Derived(rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator < (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+ return lhs < Derived(rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator > (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+ return Derived(rhs) < lhs;
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator <= (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+ return !(lhs > Derived(rhs));
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator >= (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+ return !(lhs < Derived(rhs));
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator != (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+ return !(lhs == Derived(rhs));
+}
+
+// ######################### COMPARISONS with Derived END ############################ //
+
+/// @endcond
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+
+/// noexcept comparison operators for type_index_facade classes.
+bool operator ==, !=, <, ... (const type_index_facade& lhs, const type_index_facade& rhs) noexcept;
+
+/// noexcept comparison operators for type_index_facade and it's TypeInfo classes.
+bool operator ==, !=, <, ... (const type_index_facade& lhs, const TypeInfo& rhs) noexcept;
+
+/// noexcept comparison operators for type_index_facade's TypeInfo and type_index_facade classes.
+bool operator ==, !=, <, ... (const TypeInfo& lhs, const type_index_facade& rhs) noexcept;
+
+#endif
+
+#ifndef BOOST_NO_IOSTREAM
+#ifdef BOOST_NO_TEMPLATED_IOSTREAMS
+/// @cond
+/// Ostream operator that will output demangled name
+template <class Derived, class TypeInfo>
+inline std::ostream& operator<<(std::ostream& ostr, const type_index_facade<Derived, TypeInfo>& ind) {
+ ostr << static_cast<Derived const&>(ind).pretty_name();
+ return ostr;
+}
+/// @endcond
+#else
+/// Ostream operator that will output demangled name.
+template <class CharT, class TriatT, class Derived, class TypeInfo>
+inline std::basic_ostream<CharT, TriatT>& operator<<(
+ std::basic_ostream<CharT, TriatT>& ostr,
+ const type_index_facade<Derived, TypeInfo>& ind)
+{
+ ostr << static_cast<Derived const&>(ind).pretty_name();
+ return ostr;
+}
+#endif // BOOST_NO_TEMPLATED_IOSTREAMS
+#endif // BOOST_NO_IOSTREAM
+
+/// This free function is used by Boost's unordered containers.
+/// \note <boost/functional/hash.hpp> has to be included if this function is used.
+template <class Derived, class TypeInfo>
+inline std::size_t hash_value(const type_index_facade<Derived, TypeInfo>& lhs) BOOST_NOEXCEPT {
+ return static_cast<Derived const&>(lhs).hash_code();
+}
+
+}} // namespace boost::typeindex
+
+#endif // BOOST_TYPE_INDEX_TYPE_INDEX_FACADE_HPP
+
diff --git a/3party/boost/boost/type_traits.hpp b/3party/boost/boost/type_traits.hpp
index ff75050d80..9267a7170b 100644
--- a/3party/boost/boost/type_traits.hpp
+++ b/3party/boost/boost/type_traits.hpp
@@ -50,6 +50,7 @@
#include "boost/type_traits/is_compound.hpp"
#include "boost/type_traits/is_const.hpp"
#include "boost/type_traits/is_convertible.hpp"
+#include "boost/type_traits/is_copy_constructible.hpp"
#include "boost/type_traits/is_empty.hpp"
#include "boost/type_traits/is_enum.hpp"
#include "boost/type_traits/is_float.hpp"
diff --git a/3party/boost/boost/type_traits/add_const.hpp b/3party/boost/boost/type_traits/add_const.hpp
index 29f0bd95bc..0a27f8a971 100644
--- a/3party/boost/boost/type_traits/add_const.hpp
+++ b/3party/boost/boost/type_traits/add_const.hpp
@@ -36,9 +36,7 @@ BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_const,T,T const)
# pragma warning(pop)
#endif
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_const,T&,T&)
-#endif
} // namespace boost
diff --git a/3party/boost/boost/type_traits/add_cv.hpp b/3party/boost/boost/type_traits/add_cv.hpp
index bfde76a623..66625c66c2 100644
--- a/3party/boost/boost/type_traits/add_cv.hpp
+++ b/3party/boost/boost/type_traits/add_cv.hpp
@@ -37,9 +37,7 @@ BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_cv,T,T const volatile)
# pragma warning(pop)
#endif
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_cv,T&,T&)
-#endif
} // namespace boost
diff --git a/3party/boost/boost/type_traits/add_reference.hpp b/3party/boost/boost/type_traits/add_reference.hpp
index f926a53b70..5e3efca692 100644
--- a/3party/boost/boost/type_traits/add_reference.hpp
+++ b/3party/boost/boost/type_traits/add_reference.hpp
@@ -20,37 +20,6 @@ namespace boost {
namespace detail {
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && defined(BOOST_MSVC6_MEMBER_TEMPLATES)
-
-template <bool x>
-struct reference_adder
-{
- template <typename T> struct result_
- {
- typedef T& type;
- };
-};
-
-template <>
-struct reference_adder<true>
-{
- template <typename T> struct result_
- {
- typedef T type;
- };
-};
-
-template <typename T>
-struct add_reference_impl
-{
- typedef typename reference_adder<
- ::boost::is_reference<T>::value
- >::template result_<T> result;
-
- typedef typename result::type type;
-};
-
-#else
//
// We can't filter out rvalue_references at the same level as
// references or we get ambiguities from msvc:
@@ -76,11 +45,7 @@ struct add_reference_impl
typedef typename add_reference_rvalue_layer<T>::type type;
};
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(typename T,add_reference,T&,T&)
-#endif
-
-#endif
// these full specialisations are always required:
BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void,void)
diff --git a/3party/boost/boost/type_traits/add_rvalue_reference.hpp b/3party/boost/boost/type_traits/add_rvalue_reference.hpp
index 92c2c3817a..242716f09c 100644
--- a/3party/boost/boost/type_traits/add_rvalue_reference.hpp
+++ b/3party/boost/boost/type_traits/add_rvalue_reference.hpp
@@ -39,7 +39,7 @@ namespace type_traits_detail {
struct add_rvalue_reference_helper
{ typedef T type; };
-#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename T>
struct add_rvalue_reference_helper<T, true>
{
diff --git a/3party/boost/boost/type_traits/add_volatile.hpp b/3party/boost/boost/type_traits/add_volatile.hpp
index 491f1c2dd3..86b529798e 100644
--- a/3party/boost/boost/type_traits/add_volatile.hpp
+++ b/3party/boost/boost/type_traits/add_volatile.hpp
@@ -36,9 +36,7 @@ BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_volatile,T,T volatile)
# pragma warning(pop)
#endif
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_volatile,T&,T&)
-#endif
} // namespace boost
diff --git a/3party/boost/boost/type_traits/aligned_storage.hpp b/3party/boost/boost/type_traits/aligned_storage.hpp
index 5420f26738..5420f26738 100644..100755
--- a/3party/boost/boost/type_traits/aligned_storage.hpp
+++ b/3party/boost/boost/type_traits/aligned_storage.hpp
diff --git a/3party/boost/boost/type_traits/alignment_of.hpp b/3party/boost/boost/type_traits/alignment_of.hpp
index e1735dcc68..31a5f3839f 100644
--- a/3party/boost/boost/type_traits/alignment_of.hpp
+++ b/3party/boost/boost/type_traits/alignment_of.hpp
@@ -90,13 +90,11 @@ BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(alignment_of,T,::boost::detail::alignment_of_impl
// references have to be treated specially, assume
// that a reference is just a special pointer:
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <typename T>
struct alignment_of<T&>
: public alignment_of<T*>
{
};
-#endif
#ifdef __BORLANDC__
// long double gives an incorrect value of 10 (!)
// unless we do this...
diff --git a/3party/boost/boost/type_traits/broken_compiler_spec.hpp b/3party/boost/boost/type_traits/broken_compiler_spec.hpp
index fb51769d9d..3a13273594 100644
--- a/3party/boost/boost/type_traits/broken_compiler_spec.hpp
+++ b/3party/boost/boost/type_traits/broken_compiler_spec.hpp
@@ -9,109 +9,6 @@
#ifndef BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED
#define BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED
-#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/config.hpp>
+#include <boost/type_traits/config.hpp>
-// these are needed regardless of BOOST_TT_NO_BROKEN_COMPILER_SPEC
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-namespace boost { namespace detail {
-template< typename T > struct remove_const_impl { typedef T type; };
-template< typename T > struct remove_volatile_impl { typedef T type; };
-template< typename T > struct remove_pointer_impl { typedef T type; };
-template< typename T > struct remove_reference_impl { typedef T type; };
-typedef int invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces;
-}}
#endif
-
-// agurt, 27/jun/03: disable the workaround if user defined
-// BOOST_TT_NO_BROKEN_COMPILER_SPEC
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
- || defined(BOOST_TT_NO_BROKEN_COMPILER_SPEC)
-
-# define BOOST_TT_BROKEN_COMPILER_SPEC(T) /**/
-
-#else
-
-// same as BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1 macro, except that it
-// never gets #undef-ined
-# define BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(trait,spec,result) \
-template<> struct trait##_impl<spec> \
-{ \
- typedef result type; \
-}; \
-/**/
-
-# define BOOST_TT_AUX_REMOVE_CONST_VOLATILE_RANK1_SPEC(T) \
- BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_const,T const,T) \
- BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_const,T const volatile,T volatile) \
- BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_volatile,T volatile,T) \
- BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_volatile,T const volatile,T const) \
- /**/
-
-# define BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T) \
- BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*,T) \
- BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*const,T) \
- BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*volatile,T) \
- BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*const volatile,T) \
- BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_reference,T&,T) \
- /**/
-
-# define BOOST_TT_AUX_REMOVE_PTR_REF_RANK_2_SPEC(T) \
- BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T) \
- BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T const) \
- BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T volatile) \
- BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T const volatile) \
- /**/
-
-# define BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T) \
- BOOST_TT_AUX_REMOVE_PTR_REF_RANK_2_SPEC(T) \
- BOOST_TT_AUX_REMOVE_CONST_VOLATILE_RANK1_SPEC(T) \
- /**/
-
-# define BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T) \
- BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T*) \
- BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T const*) \
- BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T volatile*) \
- BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T const volatile*) \
- /**/
-
-# define BOOST_TT_BROKEN_COMPILER_SPEC(T) \
- namespace boost { namespace detail { \
- typedef invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces \
- please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces; \
- BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T) \
- BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T) \
- BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T*) \
- BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T const*) \
- BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T volatile*) \
- BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T const volatile*) \
- }} \
- /**/
-
-# include <boost/type_traits/detail/type_trait_undef.hpp>
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-BOOST_TT_BROKEN_COMPILER_SPEC(bool)
-BOOST_TT_BROKEN_COMPILER_SPEC(char)
-#ifndef BOOST_NO_INTRINSIC_WCHAR_T
-BOOST_TT_BROKEN_COMPILER_SPEC(wchar_t)
-#endif
-BOOST_TT_BROKEN_COMPILER_SPEC(signed char)
-BOOST_TT_BROKEN_COMPILER_SPEC(unsigned char)
-BOOST_TT_BROKEN_COMPILER_SPEC(signed short)
-BOOST_TT_BROKEN_COMPILER_SPEC(unsigned short)
-BOOST_TT_BROKEN_COMPILER_SPEC(signed int)
-BOOST_TT_BROKEN_COMPILER_SPEC(unsigned int)
-BOOST_TT_BROKEN_COMPILER_SPEC(signed long)
-BOOST_TT_BROKEN_COMPILER_SPEC(unsigned long)
-BOOST_TT_BROKEN_COMPILER_SPEC(float)
-BOOST_TT_BROKEN_COMPILER_SPEC(double)
-//BOOST_TT_BROKEN_COMPILER_SPEC(long double)
-
-// for backward compatibility
-#define BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(T) \
- BOOST_TT_BROKEN_COMPILER_SPEC(T) \
-/**/
-
-#endif // BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED
diff --git a/3party/boost/boost/type_traits/common_type.hpp b/3party/boost/boost/type_traits/common_type.hpp
index f057770568..b52ff167eb 100644
--- a/3party/boost/boost/type_traits/common_type.hpp
+++ b/3party/boost/boost/type_traits/common_type.hpp
@@ -120,7 +120,7 @@ namespace type_traits_detail {
typedef BOOST_TYPEOF_TPL(declval_b() ? declval_T() : declval_U()) type;
#endif
-#if defined(__GNUC__) && __GNUC__ == 3 && (__GNUC_MINOR__ == 2 || __GNUC_MINOR__ == 3)
+#if defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ == 3
public:
void public_dummy_function_just_to_silence_warning();
#endif
diff --git a/3party/boost/boost/type_traits/config.hpp b/3party/boost/boost/type_traits/config.hpp
index 7934454299..2e25ad01ff 100644
--- a/3party/boost/boost/type_traits/config.hpp
+++ b/3party/boost/boost/type_traits/config.hpp
@@ -27,8 +27,6 @@
#endif
# if (BOOST_WORKAROUND(__MWERKS__, < 0x3000) \
- || BOOST_WORKAROUND(BOOST_MSVC, <= 1301) \
- || !defined(__EDG_VERSION__) && BOOST_WORKAROUND(__GNUC__, < 3) \
|| BOOST_WORKAROUND(__IBMCPP__, < 600 ) \
|| BOOST_WORKAROUND(__BORLANDC__, < 0x5A0) \
|| defined(__ghs) \
@@ -46,14 +44,6 @@
#endif
//
-// Define BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
-// when we can't test for function types with elipsis:
-//
-#if BOOST_WORKAROUND(__GNUC__, < 3)
-# define BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
-#endif
-
-//
// define BOOST_TT_TEST_MS_FUNC_SIGS
// when we want to test __stdcall etc function types with is_function etc
// (Note, does not work with Borland, even though it does support __stdcall etc):
@@ -71,6 +61,12 @@
# define BOOST_TT_NO_CV_FUNC_TEST
#endif
+//
+// Macros that have been deprecated, defined here for backwards compatibility:
+//
+#define BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(x)
+#define BOOST_TT_BROKEN_COMPILER_SPEC(x)
+
#endif // BOOST_TT_CONFIG_HPP_INCLUDED
diff --git a/3party/boost/boost/type_traits/decay.hpp b/3party/boost/boost/type_traits/decay.hpp
index c23a9b0f15..c23a9b0f15 100644..100755
--- a/3party/boost/boost/type_traits/decay.hpp
+++ b/3party/boost/boost/type_traits/decay.hpp
diff --git a/3party/boost/boost/type_traits/detail/bool_trait_def.hpp b/3party/boost/boost/type_traits/detail/bool_trait_def.hpp
index e3c7774e39..69e4f1ca62 100644
--- a/3party/boost/boost/type_traits/detail/bool_trait_def.hpp
+++ b/3party/boost/boost/type_traits/detail/bool_trait_def.hpp
@@ -8,8 +8,8 @@
// http://www.boost.org/LICENSE_1_0.txt)
// $Source$
-// $Date: 2011-10-09 15:28:33 -0700 (Sun, 09 Oct 2011) $
-// $Revision: 74865 $
+// $Date$
+// $Revision$
#include <boost/type_traits/detail/template_arity_spec.hpp>
#include <boost/type_traits/integral_constant.hpp>
@@ -45,14 +45,6 @@
enum { value = type::value }; \
/**/
# define BOOST_TT_AUX_BOOL_C_BASE(C)
-
-#elif defined(BOOST_MSVC) && BOOST_MSVC < 1300
-
-# define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
- typedef ::boost::integral_constant<bool,C> base_; \
- using base_::value; \
- /**/
-
#endif
#ifndef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
diff --git a/3party/boost/boost/type_traits/detail/bool_trait_undef.hpp b/3party/boost/boost/type_traits/detail/bool_trait_undef.hpp
index 008febe790..4ac61ef2e7 100644
--- a/3party/boost/boost/type_traits/detail/bool_trait_undef.hpp
+++ b/3party/boost/boost/type_traits/detail/bool_trait_undef.hpp
@@ -8,8 +8,8 @@
// http://www.boost.org/LICENSE_1_0.txt)
// $Source$
-// $Date: 2011-10-09 15:28:33 -0700 (Sun, 09 Oct 2011) $
-// $Revision: 74865 $
+// $Date$
+// $Revision$
#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
#undef BOOST_TT_AUX_BOOL_C_BASE
diff --git a/3party/boost/boost/type_traits/detail/cv_traits_impl.hpp b/3party/boost/boost/type_traits/detail/cv_traits_impl.hpp
index ed20c9d41a..8e995bb064 100644
--- a/3party/boost/boost/type_traits/detail/cv_traits_impl.hpp
+++ b/3party/boost/boost/type_traits/detail/cv_traits_impl.hpp
@@ -11,24 +11,93 @@
#ifndef BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
#define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
+#include <cstddef>
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// implementation helper:
-#if !(BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2))
namespace boost {
namespace detail {
-#else
-#include <boost/type_traits/detail/yes_no_type.hpp>
-namespace boost {
-namespace type_traits {
-namespace gcc8503 {
-#endif
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)
+#define BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(X) X
+ template <typename T>
+ struct cv_traits_imp
+ {
+ BOOST_STATIC_CONSTANT(bool, is_const = false);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = false);
+ typedef T unqualified_type;
+ };
+
+ template <typename T>
+ struct cv_traits_imp<T[]>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_const = false);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = false);
+ typedef T unqualified_type[];
+ };
+
+ template <typename T>
+ struct cv_traits_imp<const T[]>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_const = true);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = false);
+ typedef T unqualified_type[];
+ };
+
+ template <typename T>
+ struct cv_traits_imp<volatile T[]>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_const = false);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = true);
+ typedef T unqualified_type[];
+ };
+
+ template <typename T>
+ struct cv_traits_imp<const volatile T[]>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_const = true);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = true);
+ typedef T unqualified_type[];
+ };
+
+ template <typename T, std::size_t N>
+ struct cv_traits_imp<T[N]>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_const = false);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = false);
+ typedef T unqualified_type[N];
+ };
+
+ template <typename T, std::size_t N>
+ struct cv_traits_imp<const T[N]>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_const = true);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = false);
+ typedef T unqualified_type[N];
+ };
+
+ template <typename T, std::size_t N>
+ struct cv_traits_imp<volatile T[N]>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_const = false);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = true);
+ typedef T unqualified_type[N];
+ };
+
+ template <typename T, std::size_t N>
+ struct cv_traits_imp<const volatile T[N]>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_const = true);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = true);
+ typedef T unqualified_type[N];
+ };
+
+#else
+#define BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(X) X *
template <typename T> struct cv_traits_imp {};
template <typename T>
@@ -38,9 +107,10 @@ struct cv_traits_imp<T*>
BOOST_STATIC_CONSTANT(bool, is_volatile = false);
typedef T unqualified_type;
};
+#endif
template <typename T>
-struct cv_traits_imp<const T*>
+struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(const T)>
{
BOOST_STATIC_CONSTANT(bool, is_const = true);
BOOST_STATIC_CONSTANT(bool, is_volatile = false);
@@ -48,7 +118,7 @@ struct cv_traits_imp<const T*>
};
template <typename T>
-struct cv_traits_imp<volatile T*>
+struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(volatile T)>
{
BOOST_STATIC_CONSTANT(bool, is_const = false);
BOOST_STATIC_CONSTANT(bool, is_volatile = true);
@@ -56,42 +126,15 @@ struct cv_traits_imp<volatile T*>
};
template <typename T>
-struct cv_traits_imp<const volatile T*>
+struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(const volatile T)>
{
BOOST_STATIC_CONSTANT(bool, is_const = true);
BOOST_STATIC_CONSTANT(bool, is_volatile = true);
typedef T unqualified_type;
};
-#if BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2)
-// We have to exclude function pointers
-// (see http://gcc.gnu.org/bugzilla/show_bug.cgi?8503)
-yes_type mini_funcptr_tester(...);
-no_type mini_funcptr_tester(const volatile void*);
-
-} // namespace gcc8503
-} // namespace type_traits
-
-namespace detail {
-
-// Use the implementation above for non function pointers
-template <typename T, unsigned Select
- = (unsigned)sizeof(::boost::type_traits::gcc8503::mini_funcptr_tester((T)0)) >
-struct cv_traits_imp : public ::boost::type_traits::gcc8503::cv_traits_imp<T> { };
-
-// Functions are never cv-qualified
-template <typename T> struct cv_traits_imp<T*,1>
-{
- BOOST_STATIC_CONSTANT(bool, is_const = false);
- BOOST_STATIC_CONSTANT(bool, is_volatile = false);
- typedef T unqualified_type;
-};
-
-#endif
-
} // namespace detail
} // namespace boost
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#endif // BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
diff --git a/3party/boost/boost/type_traits/detail/has_binary_operator.hpp b/3party/boost/boost/type_traits/detail/has_binary_operator.hpp
index 1fd26efb7d..d82a5cefdb 100644
--- a/3party/boost/boost/type_traits/detail/has_binary_operator.hpp
+++ b/3party/boost/boost/type_traits/detail/has_binary_operator.hpp
@@ -36,7 +36,7 @@
// warning C4804: '<' : unsafe use of type 'bool' in operation
// warning C4805: '==' : unsafe mix of type 'bool' and type 'char' in operation
// cannot find another implementation -> declared as system header to suppress these warnings.
-#if defined(__GNUC__) && ((__GNUC__==3 && __GNUC_MINOR__>=1) || (__GNUC__>3))
+#if defined(__GNUC__)
# pragma GCC system_header
#elif defined(BOOST_MSVC)
# pragma warning ( push )
@@ -152,10 +152,10 @@ no_operator operator,(no_operator, has_operator);
template < typename Lhs, typename Rhs >
struct operator_exists {
- static ::boost::type_traits::yes_type check(has_operator); // this version is preferred when operator exists
- static ::boost::type_traits::no_type check(no_operator); // this version is used otherwise
+ static ::boost::type_traits::yes_type s_check(has_operator); // this version is preferred when operator exists
+ static ::boost::type_traits::no_type s_check(no_operator); // this version is used otherwise
- BOOST_STATIC_CONSTANT(bool, value = (sizeof(check(((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));
+ BOOST_STATIC_CONSTANT(bool, value = (sizeof(s_check(((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));
};
diff --git a/3party/boost/boost/type_traits/detail/has_postfix_operator.hpp b/3party/boost/boost/type_traits/detail/has_postfix_operator.hpp
index 5c52b07d29..e9048e1214 100644
--- a/3party/boost/boost/type_traits/detail/has_postfix_operator.hpp
+++ b/3party/boost/boost/type_traits/detail/has_postfix_operator.hpp
@@ -22,7 +22,7 @@
#include <boost/type_traits/detail/bool_trait_def.hpp>
// avoid warnings
-#if defined(__GNUC__) && ((__GNUC__==3 && __GNUC_MINOR__>=1) || (__GNUC__>3))
+#if defined(__GNUC__)
# pragma GCC system_header
#elif defined(BOOST_MSVC)
# pragma warning ( push )
@@ -138,10 +138,10 @@ no_operator operator,(no_operator, has_operator);
template < typename Lhs >
struct operator_exists {
- static ::boost::type_traits::yes_type check(has_operator); // this version is preferred when operator exists
- static ::boost::type_traits::no_type check(no_operator); // this version is used otherwise
+ static ::boost::type_traits::yes_type s_check(has_operator); // this version is preferred when operator exists
+ static ::boost::type_traits::no_type s_check(no_operator); // this version is used otherwise
- BOOST_STATIC_CONSTANT(bool, value = (sizeof(check(((make<Lhs>() BOOST_TT_TRAIT_OP),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));
+ BOOST_STATIC_CONSTANT(bool, value = (sizeof(s_check(((make<Lhs>() BOOST_TT_TRAIT_OP),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));
};
diff --git a/3party/boost/boost/type_traits/detail/has_prefix_operator.hpp b/3party/boost/boost/type_traits/detail/has_prefix_operator.hpp
index ac30e4dfad..e1cf8d054f 100644
--- a/3party/boost/boost/type_traits/detail/has_prefix_operator.hpp
+++ b/3party/boost/boost/type_traits/detail/has_prefix_operator.hpp
@@ -30,7 +30,7 @@
// warning C4146: unary minus operator applied to unsigned type, result still unsigned
// warning C4804: '-' : unsafe use of type 'bool' in operation
// cannot find another implementation -> declared as system header to suppress these warnings.
-#if defined(__GNUC__) && ((__GNUC__==3 && __GNUC_MINOR__>=1) || (__GNUC__>3))
+#if defined(__GNUC__)
# pragma GCC system_header
#elif defined(BOOST_MSVC)
# pragma warning ( push )
@@ -146,10 +146,10 @@ no_operator operator,(no_operator, has_operator);
template < typename Rhs >
struct operator_exists {
- static ::boost::type_traits::yes_type check(has_operator); // this version is preferred when operator exists
- static ::boost::type_traits::no_type check(no_operator); // this version is used otherwise
+ static ::boost::type_traits::yes_type s_check(has_operator); // this version is preferred when operator exists
+ static ::boost::type_traits::no_type s_check(no_operator); // this version is used otherwise
- BOOST_STATIC_CONSTANT(bool, value = (sizeof(check(((BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));
+ BOOST_STATIC_CONSTANT(bool, value = (sizeof(s_check(((BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));
};
diff --git a/3party/boost/boost/type_traits/detail/is_function_ptr_helper.hpp b/3party/boost/boost/type_traits/detail/is_function_ptr_helper.hpp
index 605d0bc2ef..1c3b17f6d2 100644
--- a/3party/boost/boost/type_traits/detail/is_function_ptr_helper.hpp
+++ b/3party/boost/boost/type_traits/detail/is_function_ptr_helper.hpp
@@ -37,160 +37,108 @@ struct is_function_ptr_helper
template <class R >
struct is_function_ptr_helper<R (*)()> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R >
struct is_function_ptr_helper<R (*)( ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0>
struct is_function_ptr_helper<R (*)( T0)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0>
struct is_function_ptr_helper<R (*)( T0 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1>
struct is_function_ptr_helper<R (*)( T0 , T1)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1>
struct is_function_ptr_helper<R (*)( T0 , T1 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#else
#undef BOOST_STATIC_CONSTANT
diff --git a/3party/boost/boost/type_traits/detail/is_function_ptr_tester.hpp b/3party/boost/boost/type_traits/detail/is_function_ptr_tester.hpp
index 2ab49a39af..2eb8a6f47f 100644
--- a/3party/boost/boost/type_traits/detail/is_function_ptr_tester.hpp
+++ b/3party/boost/boost/type_traits/detail/is_function_ptr_tester.hpp
@@ -36,575 +36,367 @@ no_type BOOST_TT_DECL is_function_ptr_tester(...);
template <class R >
yes_type is_function_ptr_tester(R (*)());
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R >
yes_type is_function_ptr_tester(R (*)( ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R >
yes_type is_function_ptr_tester(R (__stdcall*)());
-template <class R >
-yes_type is_function_ptr_tester(R (__stdcall*)( ...));
#ifndef _MANAGED
template <class R >
yes_type is_function_ptr_tester(R (__fastcall*)());
-template <class R >
-yes_type is_function_ptr_tester(R (__fastcall*)( ...));
#endif
template <class R >
yes_type is_function_ptr_tester(R (__cdecl*)());
-template <class R >
-yes_type is_function_ptr_tester(R (__cdecl*)( ...));
#endif
template <class R , class T0 >
yes_type is_function_ptr_tester(R (*)( T0));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 >
yes_type is_function_ptr_tester(R (*)( T0 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0));
-template <class R , class T0 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 ...));
#ifndef _MANAGED
template <class R , class T0 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0));
-template <class R , class T0 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 ...));
#endif
template <class R , class T0 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0));
-template <class R , class T0 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 ...));
#endif
template <class R , class T0 , class T1 >
yes_type is_function_ptr_tester(R (*)( T0 , T1));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1));
-template <class R , class T0 , class T1 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1));
-template <class R , class T0 , class T1 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 ...));
#endif
template <class R , class T0 , class T1 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1));
-template <class R , class T0 , class T1 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 ...));
#endif
template <class R , class T0 , class T1 , class T2 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2));
-template <class R , class T0 , class T1 , class T2 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2));
-template <class R , class T0 , class T1 , class T2 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 ...));
#endif
template <class R , class T0 , class T1 , class T2 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2));
-template <class R , class T0 , class T1 , class T2 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3));
-template <class R , class T0 , class T1 , class T2 , class T3 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3));
-template <class R , class T0 , class T1 , class T2 , class T3 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3));
-template <class R , class T0 , class T1 , class T2 , class T3 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
#ifndef _MANAGED
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
#endif
template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
#endif
#else
@@ -636,18 +428,12 @@ yes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) .
@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
yes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
-template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
@#ifndef _MANAGED
template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
yes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
-template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
@#endif
template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
yes_type is_function_ptr_tester(R (__cdecl*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
-template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_function_ptr_tester(R (__cdecl*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
@#endif
#undef BOOST_PP_COUNTER
diff --git a/3party/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp b/3party/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
index 4f75f14d0a..bd5c591b20 100644
--- a/3party/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
+++ b/3party/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
@@ -37,10 +37,8 @@ struct is_mem_fun_pointer_impl
template <class R, class T >
struct is_mem_fun_pointer_impl<R (T::*)() > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T >
struct is_mem_fun_pointer_impl<R (T::*)( ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T >
@@ -52,7 +50,6 @@ struct is_mem_fun_pointer_impl<R (T::*)() volatile > { BOOST_STATIC_CONSTANT(boo
template <class R, class T >
struct is_mem_fun_pointer_impl<R (T::*)() const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T >
struct is_mem_fun_pointer_impl<R (T::*)( ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -62,13 +59,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( ...) volatile > { BOOST_STATIC_CONSTANT
template <class R, class T >
struct is_mem_fun_pointer_impl<R (T::*)( ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0>
struct is_mem_fun_pointer_impl<R (T::*)( T0) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0>
struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0>
@@ -80,7 +74,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0) volatile > { BOOST_STATIC_CONSTANT(
template <class R, class T , class T0>
struct is_mem_fun_pointer_impl<R (T::*)( T0) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0>
struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -90,13 +83,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) volatile > { BOOST_STATIC_CONST
template <class R, class T , class T0>
struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1>
@@ -108,7 +98,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) volatile > { BOOST_STATIC_CONS
template <class R, class T , class T0 , class T1>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -118,13 +107,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) volatile > { BOOST_STATIC_
template <class R, class T , class T0 , class T1>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2>
@@ -136,7 +122,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) volatile > { BOOST_STATIC
template <class R, class T , class T0 , class T1 , class T2>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -146,13 +131,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) volatile > { BOOST_ST
template <class R, class T , class T0 , class T1 , class T2>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3>
@@ -164,7 +146,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) volatile > { BOOST_S
template <class R, class T , class T0 , class T1 , class T2 , class T3>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -174,13 +155,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) volatile > { BOO
template <class R, class T , class T0 , class T1 , class T2 , class T3>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
@@ -192,7 +170,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) volatile > { BO
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -202,13 +179,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) volatile >
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
@@ -220,7 +194,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) volatile >
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -230,13 +203,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volati
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
@@ -248,7 +218,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volat
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -258,13 +227,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) v
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
@@ -276,7 +242,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -286,13 +251,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 .
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
@@ -304,7 +266,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -314,13 +275,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
@@ -332,7 +290,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -342,13 +299,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
@@ -360,7 +314,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -370,13 +323,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
@@ -388,7 +338,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -398,13 +347,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
@@ -416,7 +362,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -426,13 +371,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
@@ -444,7 +386,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -454,13 +395,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
@@ -472,7 +410,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -482,13 +419,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
@@ -500,7 +434,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -510,13 +443,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
@@ -528,7 +458,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -538,13 +467,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
@@ -556,7 +482,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -566,13 +491,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
@@ -584,7 +506,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -594,13 +515,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
@@ -612,7 +530,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -622,13 +539,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
@@ -640,7 +554,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -650,13 +563,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
@@ -668,7 +578,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -678,13 +587,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
@@ -696,7 +602,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -706,13 +611,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
@@ -724,7 +626,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -734,13 +635,10 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#endif
#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
@@ -752,7 +650,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
@@ -762,7 +659,6 @@ struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
#endif
-#endif
#else
diff --git a/3party/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp b/3party/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
index e6532d39db..334a843450 100644
--- a/3party/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
+++ b/3party/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
@@ -44,7 +44,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() volatile);
template <class R, class T >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...));
@@ -56,7 +55,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) volatile);
template <class R, class T >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)());
@@ -70,18 +68,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() volatile)
template <class R, class T >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const volatile);
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...));
-
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const);
-
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) volatile);
-
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)());
@@ -95,17 +81,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() volatile
template <class R, class T >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const volatile);
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...));
-
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const);
-
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) volatile);
-
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const volatile);
#endif
template <class R, class T >
@@ -120,17 +95,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() volatile);
template <class R, class T >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const volatile);
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...));
-
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const);
-
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) volatile);
-
-template <class R, class T >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const volatile);
#endif
template <class R, class T , class T0 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0));
@@ -144,7 +108,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) volatile);
template <class R, class T , class T0 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...));
@@ -156,7 +119,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) volatile);
template <class R, class T , class T0 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0));
@@ -170,18 +132,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) volati
template <class R, class T , class T0 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const volatile);
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...));
-
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const);
-
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) volatile);
-
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0));
@@ -195,17 +145,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) volat
template <class R, class T , class T0 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const volatile);
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...));
-
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const);
-
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) volatile);
-
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const volatile);
#endif
template <class R, class T , class T0 >
@@ -220,17 +159,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) volatile
template <class R, class T , class T0 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const volatile);
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...));
-
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const);
-
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) volatile);
-
-template <class R, class T , class T0 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1));
@@ -244,7 +172,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) volatile);
template <class R, class T , class T0 , class T1 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...));
@@ -256,7 +183,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) volatil
template <class R, class T , class T0 , class T1 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1));
@@ -270,18 +196,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) v
template <class R, class T , class T0 , class T1 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const volatile);
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...));
-
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const);
-
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) volatile);
-
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1));
@@ -295,17 +209,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1)
template <class R, class T , class T0 , class T1 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const volatile);
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...));
-
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const);
-
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) volatile);
-
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 >
@@ -320,17 +223,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) vol
template <class R, class T , class T0 , class T1 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const volatile);
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...));
-
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const);
-
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) volatile);
-
-template <class R, class T , class T0 , class T1 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2));
@@ -344,7 +236,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) volati
template <class R, class T , class T0 , class T1 , class T2 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...));
@@ -356,7 +247,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) vo
template <class R, class T , class T0 , class T1 , class T2 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2));
@@ -370,18 +260,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2));
@@ -395,17 +273,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 >
@@ -420,17 +287,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3));
@@ -444,7 +300,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) v
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...));
@@ -456,7 +311,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ..
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3));
@@ -470,18 +324,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3));
@@ -495,17 +337,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
@@ -520,17 +351,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
@@ -544,7 +364,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
@@ -556,7 +375,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
@@ -570,18 +388,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
@@ -595,17 +401,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
@@ -620,17 +415,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
@@ -644,7 +428,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
@@ -656,7 +439,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
@@ -670,18 +452,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
@@ -695,17 +465,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
@@ -720,17 +479,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
@@ -744,7 +492,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
@@ -756,7 +503,7 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
-#endif
+
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
@@ -770,18 +517,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
@@ -795,17 +530,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
@@ -820,17 +544,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
@@ -844,7 +557,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
@@ -856,7 +568,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
@@ -870,18 +581,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
@@ -895,17 +594,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
@@ -920,17 +608,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
@@ -944,7 +621,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
@@ -956,7 +632,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
@@ -970,18 +645,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
@@ -995,17 +658,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
@@ -1020,17 +672,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
@@ -1044,7 +685,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
@@ -1056,7 +696,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
@@ -1070,18 +709,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
@@ -1095,17 +722,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
@@ -1120,17 +736,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
@@ -1144,7 +749,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
@@ -1156,7 +760,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
@@ -1170,18 +773,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
@@ -1195,17 +786,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
@@ -1220,17 +800,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
@@ -1244,7 +813,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
@@ -1256,7 +824,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
@@ -1270,18 +837,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
@@ -1295,17 +850,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
@@ -1320,17 +864,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
@@ -1344,7 +877,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
@@ -1356,7 +888,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
@@ -1370,18 +901,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
@@ -1395,17 +914,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
@@ -1420,17 +928,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
@@ -1444,7 +941,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
@@ -1456,7 +952,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
@@ -1470,18 +965,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
@@ -1495,17 +978,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
@@ -1520,17 +992,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
@@ -1544,7 +1005,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
@@ -1556,7 +1016,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
@@ -1570,18 +1029,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
@@ -1595,17 +1042,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
@@ -1620,17 +1056,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
@@ -1644,7 +1069,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
@@ -1656,7 +1080,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
@@ -1670,18 +1093,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
@@ -1695,17 +1106,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
@@ -1720,17 +1120,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
@@ -1744,7 +1133,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
@@ -1756,7 +1144,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
@@ -1770,18 +1157,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
@@ -1795,17 +1170,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
@@ -1820,17 +1184,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
@@ -1844,7 +1197,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
@@ -1856,7 +1208,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
@@ -1870,18 +1221,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
@@ -1895,17 +1234,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
@@ -1920,17 +1248,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
@@ -1944,7 +1261,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
@@ -1956,7 +1272,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
@@ -1970,18 +1285,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
@@ -1995,17 +1298,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
@@ -2020,17 +1312,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
@@ -2044,7 +1325,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
@@ -2056,7 +1336,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
@@ -2070,18 +1349,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
@@ -2095,17 +1362,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
@@ -2120,17 +1376,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
@@ -2144,7 +1389,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
@@ -2156,7 +1400,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
@@ -2170,18 +1413,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
@@ -2195,17 +1426,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
@@ -2220,17 +1440,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
@@ -2244,7 +1453,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
@@ -2256,7 +1464,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
@@ -2270,18 +1477,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
@@ -2295,17 +1490,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
@@ -2320,17 +1504,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
@@ -2344,7 +1517,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
@@ -2356,7 +1528,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
@@ -2370,18 +1541,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
@@ -2395,17 +1554,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
@@ -2420,17 +1568,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
@@ -2444,7 +1581,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
@@ -2456,7 +1592,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
@@ -2470,18 +1605,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
@@ -2495,17 +1618,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
@@ -2520,17 +1632,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
@@ -2544,7 +1645,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
-#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
@@ -2556,7 +1656,6 @@ yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
-#endif
#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
@@ -2570,18 +1669,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
-
#ifndef _MANAGED
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
@@ -2595,17 +1682,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ,
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
#endif
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
@@ -2620,17 +1696,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2
template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
-
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
#endif
#else
@@ -2692,18 +1757,6 @@ yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_EN
template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
-
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const);
-
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile);
-
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile);
-
@#ifndef _MANAGED
template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
@@ -2717,17 +1770,6 @@ yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_E
template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
-
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const);
-
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile);
-
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile);
@#endif
template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
@@ -2742,17 +1784,6 @@ yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM
template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
-
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const);
-
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile);
-
-template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
-yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile);
@#endif
#undef BOOST_PP_COUNTER
diff --git a/3party/boost/boost/type_traits/detail/size_t_trait_def.hpp b/3party/boost/boost/type_traits/detail/size_t_trait_def.hpp
index 3be4f70af4..8cea9b4522 100644
--- a/3party/boost/boost/type_traits/detail/size_t_trait_def.hpp
+++ b/3party/boost/boost/type_traits/detail/size_t_trait_def.hpp
@@ -8,8 +8,8 @@
// http://www.boost.org/LICENSE_1_0.txt)
// $Source$
-// $Date: 2011-04-25 05:26:48 -0700 (Mon, 25 Apr 2011) $
-// $Revision: 71481 $
+// $Date$
+// $Revision$
#include <boost/type_traits/detail/template_arity_spec.hpp>
#include <boost/type_traits/integral_constant.hpp>
@@ -18,24 +18,16 @@
#include <cstddef>
-#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
-# define BOOST_TT_AUX_SIZE_T_BASE(C) public ::boost::integral_constant<std::size_t,C>
-# define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) /**/
-#else
-# define BOOST_TT_AUX_SIZE_T_BASE(C) public ::boost::mpl::size_t<C>
-# define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \
- typedef ::boost::mpl::size_t<C> base_; \
- using base_::value; \
- /**/
-#endif
+// Obsolete. Remove.
+#define BOOST_TT_AUX_SIZE_T_BASE(C) public ::boost::integral_constant<std::size_t,C>
+#define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) /**/
#define BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(trait,T,C) \
template< typename T > struct trait \
- : BOOST_TT_AUX_SIZE_T_BASE(C) \
+ : public ::boost::integral_constant<std::size_t,C> \
{ \
public:\
- BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \
}; \
\
@@ -44,17 +36,16 @@ BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \
#define BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(trait,spec,C) \
template<> struct trait<spec> \
- : BOOST_TT_AUX_SIZE_T_BASE(C) \
+ : public ::boost::integral_constant<std::size_t,C> \
{ \
public:\
- BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \
BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(spec)) \
}; \
/**/
#define BOOST_TT_AUX_SIZE_T_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,C) \
template< param > struct trait<spec> \
- : BOOST_TT_AUX_SIZE_T_BASE(C) \
+ : public ::boost::integral_constant<std::size_t,C> \
{ \
}; \
/**/
diff --git a/3party/boost/boost/type_traits/detail/size_t_trait_undef.hpp b/3party/boost/boost/type_traits/detail/size_t_trait_undef.hpp
index 967fd91631..1694fac772 100644
--- a/3party/boost/boost/type_traits/detail/size_t_trait_undef.hpp
+++ b/3party/boost/boost/type_traits/detail/size_t_trait_undef.hpp
@@ -8,8 +8,8 @@
// http://www.boost.org/LICENSE_1_0.txt)
// $Source$
-// $Date: 2004-09-02 08:41:37 -0700 (Thu, 02 Sep 2004) $
-// $Revision: 24874 $
+// $Date$
+// $Revision$
#undef BOOST_TT_AUX_SIZE_T_TRAIT_DEF1
#undef BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1
diff --git a/3party/boost/boost/type_traits/detail/type_trait_def.hpp b/3party/boost/boost/type_traits/detail/type_trait_def.hpp
index 224f84887d..bc54696b55 100644
--- a/3party/boost/boost/type_traits/detail/type_trait_def.hpp
+++ b/3party/boost/boost/type_traits/detail/type_trait_def.hpp
@@ -8,8 +8,8 @@
// http://www.boost.org/LICENSE_1_0.txt)
// $Source$
-// $Date: 2011-04-25 05:26:48 -0700 (Mon, 25 Apr 2011) $
-// $Revision: 71481 $
+// $Date$
+// $Revision$
#include <boost/type_traits/detail/template_arity_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
diff --git a/3party/boost/boost/type_traits/detail/type_trait_undef.hpp b/3party/boost/boost/type_traits/detail/type_trait_undef.hpp
index c4f14ff8d1..d8edf66275 100644
--- a/3party/boost/boost/type_traits/detail/type_trait_undef.hpp
+++ b/3party/boost/boost/type_traits/detail/type_trait_undef.hpp
@@ -8,8 +8,8 @@
// http://www.boost.org/LICENSE_1_0.txt)
// $Source$
-// $Date: 2004-09-02 08:41:37 -0700 (Thu, 02 Sep 2004) $
-// $Revision: 24874 $
+// $Date$
+// $Revision$
#undef BOOST_TT_AUX_TYPE_TRAIT_DEF1
#undef BOOST_TT_AUX_TYPE_TRAIT_SPEC1
diff --git a/3party/boost/boost/type_traits/extent.hpp b/3party/boost/boost/type_traits/extent.hpp
index 27e8a670fc..c41f7f2ffe 100644
--- a/3party/boost/boost/type_traits/extent.hpp
+++ b/3party/boost/boost/type_traits/extent.hpp
@@ -31,7 +31,7 @@ struct extent_imp
{
BOOST_STATIC_CONSTANT(std::size_t, value = 0);
};
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
template <class T, std::size_t R, std::size_t N>
struct extent_imp<T[R], N>
{
@@ -131,10 +131,6 @@ template <class T, std::size_t N = 0>
struct extent
: public ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value>
{
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- typedef ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value> base_;
- using base_::value;
-#endif
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,extent,(T))
};
diff --git a/3party/boost/boost/type_traits/function_traits.hpp b/3party/boost/boost/type_traits/function_traits.hpp
index d71534572c..26d7e05c5f 100644
--- a/3party/boost/boost/type_traits/function_traits.hpp
+++ b/3party/boost/boost/type_traits/function_traits.hpp
@@ -15,7 +15,6 @@
namespace boost {
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace detail {
template<typename Function> struct function_traits_helper;
@@ -170,67 +169,6 @@ struct function_traits :
{
};
-#else
-
-namespace detail {
-
-template<unsigned N>
-struct type_of_size
-{
- char elements[N];
-};
-
-template<typename R>
-type_of_size<1> function_arity_helper(R (*f)());
-
-template<typename R, typename T1>
-type_of_size<2> function_arity_helper(R (*f)(T1));
-
-template<typename R, typename T1, typename T2>
-type_of_size<3> function_arity_helper(R (*f)(T1, T2));
-
-template<typename R, typename T1, typename T2, typename T3>
-type_of_size<4> function_arity_helper(R (*f)(T1, T2, T3));
-
-template<typename R, typename T1, typename T2, typename T3, typename T4>
-type_of_size<5> function_arity_helper(R (*f)(T1, T2, T3, T4));
-
-template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5>
-type_of_size<6> function_arity_helper(R (*f)(T1, T2, T3, T4, T5));
-
-template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6>
-type_of_size<7> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6));
-
-template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7>
-type_of_size<8> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7));
-
-template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7, typename T8>
-type_of_size<9> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7, T8));
-
-template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7, typename T8, typename T9>
-type_of_size<10> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7, T8,
- T9));
-
-template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7, typename T8, typename T9,
- typename T10>
-type_of_size<11> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7, T8,
- T9, T10));
-} // end namespace detail
-
-// Won't work with references
-template<typename Function>
-struct function_traits
-{
- BOOST_STATIC_CONSTANT(unsigned, arity = (sizeof(boost::detail::function_arity_helper((Function*)0))-1));
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
}
#endif // BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED
diff --git a/3party/boost/boost/type_traits/has_logical_not.hpp b/3party/boost/boost/type_traits/has_logical_not.hpp
index fd99d3cbbe..d36858e1ec 100644
--- a/3party/boost/boost/type_traits/has_logical_not.hpp
+++ b/3party/boost/boost/type_traits/has_logical_not.hpp
@@ -9,6 +9,11 @@
#ifndef BOOST_TT_HAS_LOGICAL_NOT_HPP_INCLUDED
#define BOOST_TT_HAS_LOGICAL_NOT_HPP_INCLUDED
+#if defined(__GNUC__) && (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ > 40800)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-value"
+#endif
+
#define BOOST_TT_TRAIT_NAME has_logical_not
#define BOOST_TT_TRAIT_OP !
#define BOOST_TT_FORBIDDEN_IF\
@@ -20,4 +25,8 @@
#undef BOOST_TT_TRAIT_OP
#undef BOOST_TT_FORBIDDEN_IF
+#if defined(__GNUC__) && (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ > 40800)
+#pragma GCC diagnostic pop
+#endif
+
#endif
diff --git a/3party/boost/boost/type_traits/has_new_operator.hpp b/3party/boost/boost/type_traits/has_new_operator.hpp
index 2c2c32228f..c615127da3 100644
--- a/3party/boost/boost/type_traits/has_new_operator.hpp
+++ b/3party/boost/boost/type_traits/has_new_operator.hpp
@@ -18,6 +18,16 @@
// should be the last #include
#include <boost/type_traits/detail/bool_trait_def.hpp>
+#if defined(new)
+# if BOOST_WORKAROUND(BOOST_MSVC, >= 1310)
+# define BOOST_TT_AUX_MACRO_NEW_DEFINED
+# pragma push_macro("new")
+# undef new
+# else
+# error "Sorry but you can't include this header if 'new' is defined as a macro."
+# endif
+#endif
+
namespace boost {
namespace detail {
template <class U, U x>
@@ -135,6 +145,10 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_new_operator,T,::boost::detail::has_new_operato
} // namespace boost
+#if defined(BOOST_TT_AUX_MACRO_NEW_DEFINED)
+# pragma pop_macro("new")
+#endif
+
#include <boost/type_traits/detail/bool_trait_undef.hpp>
#endif // BOOST_TT_HAS_NEW_OPERATOR_HPP_INCLUDED
diff --git a/3party/boost/boost/type_traits/integral_constant.hpp b/3party/boost/boost/type_traits/integral_constant.hpp
index 4ed1bb058f..c6847715e0 100644
--- a/3party/boost/boost/type_traits/integral_constant.hpp
+++ b/3party/boost/boost/type_traits/integral_constant.hpp
@@ -24,24 +24,10 @@ struct integral_constant : public mpl::integral_c<T, val>
template<> struct integral_constant<bool,true> : public mpl::true_
{
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-# pragma warning(push)
-# pragma warning(disable:4097)
- typedef mpl::true_ base_;
- using base_::value;
-# pragma warning(pop)
-#endif
typedef integral_constant<bool,true> type;
};
template<> struct integral_constant<bool,false> : public mpl::false_
{
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-# pragma warning(push)
-# pragma warning(disable:4097)
- typedef mpl::false_ base_;
- using base_::value;
-# pragma warning(pop)
-#endif
typedef integral_constant<bool,false> type;
};
diff --git a/3party/boost/boost/type_traits/integral_promotion.hpp b/3party/boost/boost/type_traits/integral_promotion.hpp
index 2109b9c60d..9c5514b115 100644
--- a/3party/boost/boost/type_traits/integral_promotion.hpp
+++ b/3party/boost/boost/type_traits/integral_promotion.hpp
@@ -43,8 +43,7 @@ template<> struct need_promotion<unsigned short int> : public true_type {};
// Same set of integral types as in boost/type_traits/is_integral.hpp.
// Please, keep in sync.
-#if (defined(BOOST_MSVC) && (BOOST_MSVC < 1300)) \
- || (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \
+#if (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \
|| (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300))
// TODO: common macro for this #if. Or better yet, PP SEQ of non-standard types.
BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(__int8 )
diff --git a/3party/boost/boost/type_traits/intrinsics.hpp b/3party/boost/boost/type_traits/intrinsics.hpp
index 799f9b63f5..4bcfd3c868 100644
--- a/3party/boost/boost/type_traits/intrinsics.hpp
+++ b/3party/boost/boost/type_traits/intrinsics.hpp
@@ -109,8 +109,8 @@
// # define BOOST_ALIGNMENT_OF(T) __alignof(T)
# if defined(_MSC_VER) && (_MSC_VER >= 1700)
-# define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) ((__has_trivial_move_constructor(T) || ::boost::is_pod<T>::value) && !::boost::is_volatile<T>::value)
-# define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) ((__has_trivial_move_assign(T) || ::boost::is_pod<T>::value) && ! ::boost::is_const<T>::value && !::boost::is_volatile<T>::value)
+# define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) ((__has_trivial_move_constructor(T) || ::boost::is_pod<T>::value) && !::boost::is_volatile<T>::value && !::boost::is_reference<T>::value)
+# define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) ((__has_trivial_move_assign(T) || ::boost::is_pod<T>::value) && ! ::boost::is_const<T>::value && !::boost::is_volatile<T>::value && !::boost::is_reference<T>::value)
# endif
# define BOOST_HAS_TYPE_TRAITS_INTRINSICS
diff --git a/3party/boost/boost/type_traits/is_abstract.hpp b/3party/boost/boost/type_traits/is_abstract.hpp
index d88c143995..f1cd92c67c 100644
--- a/3party/boost/boost/type_traits/is_abstract.hpp
+++ b/3party/boost/boost/type_traits/is_abstract.hpp
@@ -1,7 +1,7 @@
#ifndef BOOST_TT_IS_ABSTRACT_CLASS_HPP
#define BOOST_TT_IS_ABSTRACT_CLASS_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -19,7 +19,7 @@
// Compile type discovery whether given type is abstract class or not.
//
// Requires DR 337 to be supported by compiler
-// (http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_active.html#337).
+// (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#337).
//
//
// Believed (Jan 2004) to work on:
diff --git a/3party/boost/boost/type_traits/is_array.hpp b/3party/boost/boost/type_traits/is_array.hpp
index 91c0f156db..c381ca4e70 100644
--- a/3party/boost/boost/type_traits/is_array.hpp
+++ b/3party/boost/boost/type_traits/is_array.hpp
@@ -16,10 +16,6 @@
#include <boost/type_traits/config.hpp>
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-# include <boost/type_traits/detail/yes_no_type.hpp>
-# include <boost/type_traits/detail/wrap.hpp>
-#endif
#include <cstddef>
@@ -30,7 +26,7 @@ namespace boost {
#if defined( __CODEGEARC__ )
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,__is_array(T))
-#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#else
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,false)
#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T[N],true)
@@ -45,45 +41,8 @@ BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const volatile[],t
#endif
#endif
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-namespace detail {
-
-using ::boost::type_traits::yes_type;
-using ::boost::type_traits::no_type;
-using ::boost::type_traits::wrap;
-
-template< typename T > T(* is_array_tester1(wrap<T>) )(wrap<T>);
-char BOOST_TT_DECL is_array_tester1(...);
-
-template< typename T> no_type is_array_tester2(T(*)(wrap<T>));
-yes_type BOOST_TT_DECL is_array_tester2(...);
-
-template< typename T >
-struct is_array_impl
-{
- BOOST_STATIC_CONSTANT(bool, value =
- sizeof(::boost::detail::is_array_tester2(
- ::boost::detail::is_array_tester1(
- ::boost::type_traits::wrap<T>()
- )
- )) == 1
- );
-};
-
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void const volatile,false)
#endif
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,::boost::detail::is_array_impl<T>::value)
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>
diff --git a/3party/boost/boost/type_traits/is_base_and_derived.hpp b/3party/boost/boost/type_traits/is_base_and_derived.hpp
index d6a9991182..632b699445 100644
--- a/3party/boost/boost/type_traits/is_base_and_derived.hpp
+++ b/3party/boost/boost/type_traits/is_base_and_derived.hpp
@@ -237,11 +237,9 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF2(
, (::boost::detail::is_base_and_derived_impl<Base,Derived>::value)
)
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base&,Derived,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base,Derived&,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base&,Derived&,false)
-#endif
#if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename Base,is_base_and_derived,Base,Base,false)
diff --git a/3party/boost/boost/type_traits/is_base_of.hpp b/3party/boost/boost/type_traits/is_base_of.hpp
index 0cc7a32fc9..3655b0bd23 100644
--- a/3party/boost/boost/type_traits/is_base_of.hpp
+++ b/3party/boost/boost/type_traits/is_base_of.hpp
@@ -38,11 +38,9 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF2(
, Derived
, (::boost::detail::is_base_of_imp<Base, Derived>::value))
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base&,Derived,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base,Derived&,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base&,Derived&,false)
-#endif
} // namespace boost
diff --git a/3party/boost/boost/type_traits/is_base_of_tr1.hpp b/3party/boost/boost/type_traits/is_base_of_tr1.hpp
index 177e62b0f9..7264f159fc 100644
--- a/3party/boost/boost/type_traits/is_base_of_tr1.hpp
+++ b/3party/boost/boost/type_traits/is_base_of_tr1.hpp
@@ -37,11 +37,9 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF2(
, Derived
, (::boost::tr1::detail::is_base_of_imp<Base, Derived>::value))
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base&,Derived,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base,Derived&,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base&,Derived&,false)
-#endif
} } // namespace boost
diff --git a/3party/boost/boost/type_traits/is_class.hpp b/3party/boost/boost/type_traits/is_class.hpp
index 1a2cd20157..0675b57822 100644
--- a/3party/boost/boost/type_traits/is_class.hpp
+++ b/3party/boost/boost/type_traits/is_class.hpp
@@ -93,7 +93,6 @@ struct is_class_impl
template <typename T>
struct is_class_impl
{
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_and<
::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value,
@@ -103,16 +102,6 @@ struct is_class_impl
::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value,
::boost::type_traits::ice_not< ::boost::is_function<T>::value >::value
>::value));
-# else
- BOOST_STATIC_CONSTANT(bool, value =
- (::boost::type_traits::ice_and<
- ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value,
- ::boost::type_traits::ice_not< ::boost::is_scalar<T>::value >::value,
- ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,
- ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
- ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value
- >::value));
-# endif
};
# endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
diff --git a/3party/boost/boost/type_traits/is_const.hpp b/3party/boost/boost/type_traits/is_const.hpp
index 0c7da4a2f5..e3e62b697c 100644
--- a/3party/boost/boost/type_traits/is_const.hpp
+++ b/3party/boost/boost/type_traits/is_const.hpp
@@ -24,7 +24,6 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# include <boost/type_traits/detail/cv_traits_impl.hpp>
# ifdef __GNUC__
# include <boost/type_traits/is_reference.hpp>
@@ -32,12 +31,6 @@
# if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
# include <boost/type_traits/remove_bounds.hpp>
# endif
-#else
-# include <boost/type_traits/is_reference.hpp>
-# include <boost/type_traits/is_array.hpp>
-# include <boost/type_traits/detail/yes_no_type.hpp>
-# include <boost/type_traits/detail/false_result.hpp>
-#endif
// should be the last #include
#include <boost/type_traits/detail/bool_trait_def.hpp>
@@ -48,7 +41,7 @@ namespace boost {
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,__is_const(T))
-#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#else
namespace detail{
//
@@ -61,7 +54,7 @@ struct is_const_rvalue_filter
#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_const);
#else
- BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<T*>::is_const);
+ BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::is_const);
#endif
};
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
@@ -87,76 +80,8 @@ BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const volatile,false)
#endif
-#if defined(__GNUC__) && (__GNUC__ < 3)
-// special case for gcc where illegally cv-qualified reference types can be
-// generated in some corner cases:
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T const,!(::boost::is_reference<T>::value))
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T volatile const,!(::boost::is_reference<T>::value))
-#endif
-
-#else
-
-namespace detail {
-
-using ::boost::type_traits::yes_type;
-using ::boost::type_traits::no_type;
-
-yes_type is_const_tester(const volatile void*);
-no_type is_const_tester(volatile void *);
-
-template <bool is_ref, bool array>
-struct is_const_helper
- : public ::boost::type_traits::false_result
-{
-};
-
-template <>
-struct is_const_helper<false,false>
-{
- template <typename T> struct result_
- {
- static T* t;
- BOOST_STATIC_CONSTANT(bool, value = (
- sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_const_tester(t))
- ));
- };
-};
-
-template <>
-struct is_const_helper<false,true>
-{
- template <typename T> struct result_
- {
- static T t;
- BOOST_STATIC_CONSTANT(bool, value = (
- sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_const_tester(&t))
- ));
- };
-};
-
-template <typename T>
-struct is_const_impl
- : public is_const_helper<
- is_reference<T>::value
- , is_array<T>::value
- >::template result_<T>
-{
-};
-
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void const,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void const volatile,true)
#endif
-} // namespace detail
-
-//* is a type T declared const - is_const<T>
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::is_const_impl<T>::value)
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>
diff --git a/3party/boost/boost/type_traits/is_convertible.hpp b/3party/boost/boost/type_traits/is_convertible.hpp
index 3eccadc588..a844cecb36 100644
--- a/3party/boost/boost/type_traits/is_convertible.hpp
+++ b/3party/boost/boost/type_traits/is_convertible.hpp
@@ -30,7 +30,9 @@
#if defined(__MWERKS__)
#include <boost/type_traits/remove_reference.hpp>
#endif
-
+#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+# include <boost/utility/declval.hpp>
+#endif
#endif // BOOST_IS_CONVERTIBLE
// should be always the last #include directive
@@ -52,42 +54,43 @@ namespace boost {
namespace detail {
-// MS specific version:
+#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
-#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
+ // This is a C++11 conforming version, place this first and use it wherever possible:
-// This workaround is necessary to handle when From is void
-// which is normally taken care of by the partial specialization
-// of the is_convertible typename.
-using ::boost::type_traits::yes_type;
-using ::boost::type_traits::no_type;
+# define BOOST_TT_CXX11_IS_CONVERTIBLE
-template< typename From >
-struct does_conversion_exist
-{
- template< typename To > struct result_
- {
- static no_type BOOST_TT_DECL _m_check(...);
- static yes_type BOOST_TT_DECL _m_check(To);
- static typename add_lvalue_reference<From>::type _m_from;
- enum { value = sizeof( _m_check(_m_from) ) == sizeof(yes_type) };
- };
-};
+ template <class A, class B, class C>
+ struct or_helper
+ {
+ static const bool value = (A::value || B::value || C::value);
+ };
-template<>
-struct does_conversion_exist<void>
-{
- template< typename To > struct result_
- {
- enum { value = ::boost::is_void<To>::value };
- };
-};
+ template<typename From, typename To, bool b = or_helper<boost::is_void<From>, boost::is_function<To>, boost::is_array<To> >::value>
+ struct is_convertible_basic_impl
+ {
+ // Nothing converts to function or array, but void converts to void:
+ static const bool value = is_void<To>::value;
+ };
-template <typename From, typename To>
-struct is_convertible_basic_impl
- : public does_conversion_exist<From>::template result_<To>
-{
-};
+ template<typename From, typename To>
+ class is_convertible_basic_impl<From, To, false>
+ {
+ typedef char one;
+ typedef int two;
+
+ template<typename To1>
+ static void test_aux(To1);
+
+ template<typename From1, typename To1>
+ static decltype(test_aux<To1>(boost::declval<From1>()), one()) test(int);
+
+ template<typename, typename>
+ static two test(...);
+
+ public:
+ static const bool value = sizeof(test<From, To>(0)) == 1;
+ };
#elif defined(__BORLANDC__) && (__BORLANDC__ < 0x560)
//
@@ -415,7 +418,8 @@ struct is_convertible_impl_dispatch_base
typedef is_convertible_impl_select<
::boost::is_arithmetic<From>::value,
::boost::is_arithmetic<To>::value,
-#ifndef BOOST_NO_IS_ABSTRACT
+#if !defined(BOOST_NO_IS_ABSTRACT) && !defined(BOOST_TT_CXX11_IS_CONVERTIBLE)
+ // We need to filter out abstract types, only if we don't have a strictly conforming C++11 version:
::boost::is_abstract<To>::value
#else
false
@@ -462,7 +466,6 @@ struct is_convertible_impl_dispatch
BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(is_convertible,void,void,true)
#endif // BOOST_NO_CV_VOID_SPECIALIZATIONS
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void,To,false)
BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
@@ -473,7 +476,6 @@ BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,v
BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const volatile,false)
#endif
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} // namespace detail
diff --git a/3party/boost/boost/type_traits/is_copy_constructible.hpp b/3party/boost/boost/type_traits/is_copy_constructible.hpp
new file mode 100644
index 0000000000..e90ecb76d9
--- /dev/null
+++ b/3party/boost/boost/type_traits/is_copy_constructible.hpp
@@ -0,0 +1,122 @@
+// (C) Copyright Antony Polukhin 2013.
+//
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_rvalue_reference.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/noncopyable.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail{
+
+template <bool DerivedFromNoncopyable, class T>
+struct is_copy_constructible_impl2 {
+
+// Intel compiler has problems with SFINAE for copy constructors and deleted functions:
+//
+// error: function *function_name* cannot be referenced -- it is a deleted function
+// static boost::type_traits::yes_type test(T1&, decltype(T1(boost::declval<T1&>()))* = 0);
+// ^
+#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_INTEL_CXX_VERSION)
+
+#ifdef BOOST_NO_CXX11_DECLTYPE
+ template <class T1>
+ static boost::type_traits::yes_type test(T1&, boost::mpl::int_<sizeof(T1(boost::declval<T1&>()))>* = 0);
+#else
+ template <class T1>
+ static boost::type_traits::yes_type test(T1&, decltype(T1(boost::declval<T1&>()))* = 0);
+#endif
+
+ static boost::type_traits::no_type test(...);
+#else
+ template <class T1>
+ static boost::type_traits::no_type test(T1&, typename T1::boost_move_no_copy_constructor_or_assign* = 0);
+ static boost::type_traits::yes_type test(...);
+#endif
+
+ // If you see errors like this:
+ //
+ // `'T::T(const T&)' is private`
+ // `boost/type_traits/is_copy_constructible.hpp:68:5: error: within this context`
+ //
+ // then you are trying to call that macro for a structure defined like that:
+ //
+ // struct T {
+ // ...
+ // private:
+ // T(const T &);
+ // ...
+ // };
+ //
+ // To fix that you must modify your structure:
+ //
+ // // C++03 and C++11 version
+ // struct T: private boost::noncopyable {
+ // ...
+ // private:
+ // T(const T &);
+ // ...
+ // };
+ //
+ // // C++11 version
+ // struct T {
+ // ...
+ // private:
+ // T(const T &) = delete;
+ // ...
+ // };
+ BOOST_STATIC_CONSTANT(bool, value = (
+ sizeof(test(
+ boost::declval<BOOST_DEDUCED_TYPENAME boost::add_reference<T>::type>()
+ )) == sizeof(boost::type_traits::yes_type)
+ ||
+ boost::is_rvalue_reference<T>::value
+ ));
+};
+
+template <class T>
+struct is_copy_constructible_impl2<true, T> {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <class T>
+struct is_copy_constructible_impl {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ boost::detail::is_copy_constructible_impl2<
+ boost::is_base_and_derived<boost::noncopyable, T>::value,
+ T
+ >::value
+ ));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_copy_constructible,T,::boost::detail::is_copy_constructible_impl<T>::value)
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_constructible,void,false)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_constructible,void const,false)
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_constructible,void const volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_constructible,void volatile,false)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED
diff --git a/3party/boost/boost/type_traits/is_empty.hpp b/3party/boost/boost/type_traits/is_empty.hpp
index 8a2c5b8bc6..adb239ee24 100644
--- a/3party/boost/boost/type_traits/is_empty.hpp
+++ b/3party/boost/boost/type_traits/is_empty.hpp
@@ -14,19 +14,9 @@
#include <boost/type_traits/config.hpp>
#include <boost/type_traits/intrinsics.hpp>
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# include <boost/type_traits/remove_cv.hpp>
# include <boost/type_traits/is_class.hpp>
# include <boost/type_traits/add_reference.hpp>
-#else
-# include <boost/type_traits/is_reference.hpp>
-# include <boost/type_traits/is_pointer.hpp>
-# include <boost/type_traits/is_member_pointer.hpp>
-# include <boost/type_traits/is_array.hpp>
-# include <boost/type_traits/is_void.hpp>
-# include <boost/type_traits/detail/ice_and.hpp>
-# include <boost/type_traits/detail/ice_not.hpp>
-#endif
// should be always the last #include directive
#include <boost/type_traits/detail/bool_trait_def.hpp>
@@ -41,7 +31,6 @@ namespace boost {
namespace detail {
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#ifdef BOOST_MSVC
#pragma warning(push)
@@ -130,82 +119,6 @@ struct is_empty_impl
#endif // __BORLANDC__
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-#ifdef BOOST_MSVC6_MEMBER_TEMPLATES
-
-template <typename T>
-struct empty_helper_t1 : public T
-{
- empty_helper_t1();
- int i[256];
-};
-
-struct empty_helper_t2 { int i[256]; };
-
-template <typename T>
-struct empty_helper_base
-{
- enum { value = (sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2)) };
-};
-
-template <typename T>
-struct empty_helper_nonbase
-{
- enum { value = false };
-};
-
-template <bool base>
-struct empty_helper_chooser
-{
- template <typename T> struct result_
- {
- typedef empty_helper_nonbase<T> type;
- };
-};
-
-template <>
-struct empty_helper_chooser<true>
-{
- template <typename T> struct result_
- {
- typedef empty_helper_base<T> type;
- };
-};
-
-template <typename T>
-struct is_empty_impl
-{
- typedef ::boost::detail::empty_helper_chooser<
- ::boost::type_traits::ice_and<
- ::boost::type_traits::ice_not< ::boost::is_reference<T>::value >::value,
- ::boost::type_traits::ice_not< ::boost::is_convertible<T,double>::value >::value,
- ::boost::type_traits::ice_not< ::boost::is_pointer<T>::value >::value,
- ::boost::type_traits::ice_not< ::boost::is_member_pointer<T>::value >::value,
- ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,
- ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value,
- ::boost::type_traits::ice_not<
- ::boost::is_convertible<T,void const volatile*>::value
- >::value
- >::value > chooser;
-
- typedef typename chooser::template result_<T> result;
- typedef typename result::type eh_type;
-
- BOOST_STATIC_CONSTANT(bool, value =
- (::boost::type_traits::ice_or<eh_type::value, BOOST_INTERNAL_IS_EMPTY(T)>::value));
-};
-
-#else
-
-template <typename T> struct is_empty_impl
-{
- BOOST_STATIC_CONSTANT(bool, value = BOOST_INTERNAL_IS_EMPTY(T));
-};
-
-#endif // BOOST_MSVC6_MEMBER_TEMPLATES
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// these help when the compiler has no partial specialization support:
BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_empty,void,false)
diff --git a/3party/boost/boost/type_traits/is_enum.hpp b/3party/boost/boost/type_traits/is_enum.hpp
index e35548c545..7929c962a5 100644
--- a/3party/boost/boost/type_traits/is_enum.hpp
+++ b/3party/boost/boost/type_traits/is_enum.hpp
@@ -55,13 +55,12 @@ struct is_class_or_union
template <typename T>
struct is_class_or_union
{
-# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))// we simply can't detect it this way.
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))// we simply can't detect it this way.
BOOST_STATIC_CONSTANT(bool, value = false);
# else
template <class U> static ::boost::type_traits::yes_type is_class_or_union_tester(void(U::*)(void));
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300) \
- || BOOST_WORKAROUND(__MWERKS__, <= 0x3000) // no SFINAE
+# if BOOST_WORKAROUND(__MWERKS__, <= 0x3000) // no SFINAE
static ::boost::type_traits::no_type is_class_or_union_tester(...);
BOOST_STATIC_CONSTANT(
bool, value = sizeof(is_class_or_union_tester(0)) == sizeof(::boost::type_traits::yes_type));
diff --git a/3party/boost/boost/type_traits/is_floating_point.hpp b/3party/boost/boost/type_traits/is_floating_point.hpp
index 2224453054..2224453054 100644..100755
--- a/3party/boost/boost/type_traits/is_floating_point.hpp
+++ b/3party/boost/boost/type_traits/is_floating_point.hpp
diff --git a/3party/boost/boost/type_traits/is_function.hpp b/3party/boost/boost/type_traits/is_function.hpp
index cd80e740f1..eeb4382010 100644
--- a/3party/boost/boost/type_traits/is_function.hpp
+++ b/3party/boost/boost/type_traits/is_function.hpp
@@ -15,7 +15,7 @@
#include <boost/type_traits/detail/false_result.hpp>
#include <boost/config.hpp>
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+#if !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
# include <boost/type_traits/detail/is_function_ptr_helper.hpp>
#else
# include <boost/type_traits/detail/is_function_ptr_tester.hpp>
@@ -37,7 +37,7 @@ namespace boost {
namespace detail {
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+#if !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
template<bool is_ref = true>
struct is_function_chooser
: public ::boost::type_traits::false_result
@@ -79,7 +79,6 @@ struct is_function_impl
#endif
};
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename T>
struct is_function_impl<T&> : public false_type
{};
@@ -88,7 +87,6 @@ template <typename T>
struct is_function_impl<T&&> : public false_type
{};
#endif
-#endif
#endif
diff --git a/3party/boost/boost/type_traits/is_integral.hpp b/3party/boost/boost/type_traits/is_integral.hpp
index 4ca9734016..6bfad49d39 100644
--- a/3party/boost/boost/type_traits/is_integral.hpp
+++ b/3party/boost/boost/type_traits/is_integral.hpp
@@ -46,8 +46,7 @@ BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,wchar_t,true)
// Same set of integral types as in boost/type_traits/integral_promotion.hpp.
// Please, keep in sync. -- Alexander Nasonov
-#if (defined(BOOST_MSVC) && (BOOST_MSVC < 1300)) \
- || (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \
+#if (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \
|| (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300))
BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int8,true)
BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int8,true)
@@ -73,6 +72,12 @@ BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int64,true)
BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,boost::int128_type,true)
BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,boost::uint128_type,true)
#endif
+#ifndef BOOST_NO_CXX11_CHAR16_T
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,char16_t,true)
+#endif
+#ifndef BOOST_NO_CXX11_CHAR32_T
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,char32_t,true)
+#endif
#endif // non-CodeGear implementation
diff --git a/3party/boost/boost/type_traits/is_lvalue_reference.hpp b/3party/boost/boost/type_traits/is_lvalue_reference.hpp
index a6af859ab4..0b0130ab2d 100644
--- a/3party/boost/boost/type_traits/is_lvalue_reference.hpp
+++ b/3party/boost/boost/type_traits/is_lvalue_reference.hpp
@@ -23,10 +23,6 @@
#include <boost/type_traits/config.hpp>
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-# include <boost/type_traits/detail/yes_no_type.hpp>
-# include <boost/type_traits/detail/wrap.hpp>
-#endif
// should be the last #include
#include <boost/type_traits/detail/bool_trait_def.hpp>
@@ -35,7 +31,7 @@ namespace boost {
#if defined( __CODEGEARC__ )
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,__is_reference(T))
-#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#else
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T&,true)
@@ -50,66 +46,8 @@ BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T& volati
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T& const volatile,true)
#endif
-#if defined(__GNUC__) && (__GNUC__ < 3)
-// these allow us to work around illegally cv-qualified reference
-// types.
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T const ,::boost::is_lvalue_reference<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T volatile ,::boost::is_lvalue_reference<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T const volatile ,::boost::is_lvalue_reference<T>::value)
-// However, the above specializations confuse gcc 2.96 unless we also
-// supply these specializations for array types
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,T[N],false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,const T[N],false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,volatile T[N],false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,const volatile T[N],false)
#endif
-#else
-
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4181 4097)
-#endif
-
-namespace detail {
-
-using ::boost::type_traits::yes_type;
-using ::boost::type_traits::no_type;
-using ::boost::type_traits::wrap;
-
-template <class T> T&(* is_lvalue_reference_helper1(wrap<T>) )(wrap<T>);
-char is_lvalue_reference_helper1(...);
-
-template <class T> no_type is_lvalue_reference_helper2(T&(*)(wrap<T>));
-yes_type is_lvalue_reference_helper2(...);
-
-template <typename T>
-struct is_lvalue_reference_impl
-{
- BOOST_STATIC_CONSTANT(
- bool, value = sizeof(
- ::boost::detail::is_lvalue_reference_helper2(
- ::boost::detail::is_lvalue_reference_helper1(::boost::type_traits::wrap<T>()))) == 1
- );
-};
-
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void const volatile,false)
-#endif
-
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,::boost::detail::is_lvalue_reference_impl<T>::value)
-
-#ifdef BOOST_MSVC
-# pragma warning(pop)
-#endif
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>
diff --git a/3party/boost/boost/type_traits/is_member_function_pointer.hpp b/3party/boost/boost/type_traits/is_member_function_pointer.hpp
index 38babf43a4..d1c3690ba7 100644
--- a/3party/boost/boost/type_traits/is_member_function_pointer.hpp
+++ b/3party/boost/boost/type_traits/is_member_function_pointer.hpp
@@ -14,8 +14,7 @@
#include <boost/type_traits/config.hpp>
#include <boost/detail/workaround.hpp>
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
- && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
//
// Note: we use the "workaround" version for MSVC because it works for
// __stdcall etc function types, where as the partial specialisation
@@ -39,7 +38,7 @@ namespace boost {
#if defined( __CODEGEARC__ )
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,__is_member_function_pointer( T ))
-#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+#elif !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
BOOST_TT_AUX_BOOL_TRAIT_DEF1(
is_member_function_pointer
@@ -92,10 +91,8 @@ struct is_member_function_pointer_impl
{
};
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <typename T>
struct is_member_function_pointer_impl<T&> : public false_type{};
-#endif
#else // Borland C++
@@ -127,7 +124,7 @@ BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void const volatil
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,::boost::detail::is_member_function_pointer_impl<T>::value)
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#endif
} // namespace boost
diff --git a/3party/boost/boost/type_traits/is_member_object_pointer.hpp b/3party/boost/boost/type_traits/is_member_object_pointer.hpp
index 66b76c90b3..66b76c90b3 100644..100755
--- a/3party/boost/boost/type_traits/is_member_object_pointer.hpp
+++ b/3party/boost/boost/type_traits/is_member_object_pointer.hpp
diff --git a/3party/boost/boost/type_traits/is_member_pointer.hpp b/3party/boost/boost/type_traits/is_member_pointer.hpp
index a4a6d25a7e..cba31af0c2 100644
--- a/3party/boost/boost/type_traits/is_member_pointer.hpp
+++ b/3party/boost/boost/type_traits/is_member_pointer.hpp
@@ -24,7 +24,7 @@
#include <boost/type_traits/config.hpp>
#include <boost/detail/workaround.hpp>
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
# include <boost/type_traits/is_member_function_pointer.hpp>
#else
# include <boost/type_traits/is_reference.hpp>
@@ -46,7 +46,7 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,__is_member_pointer(T))
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true)
-#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#else
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::is_member_function_pointer<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true)
@@ -56,59 +56,8 @@ BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const volatile,true)
#endif
-#else // no partial template specialization
-
-namespace detail {
-
-template <typename R, typename T>
-::boost::type_traits::yes_type BOOST_TT_DECL is_member_pointer_tester(R T::*const volatile*);
-::boost::type_traits::no_type BOOST_TT_DECL is_member_pointer_tester(...);
-
-template <bool>
-struct is_member_pointer_select
- : public ::boost::type_traits::false_result
-{
-};
-
-template <>
-struct is_member_pointer_select<false>
-{
- template <typename T> struct result_
- {
- static T* make_t();
- BOOST_STATIC_CONSTANT(
- bool, value =
- (::boost::type_traits::ice_or<
- (1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(make_t()))),
- (1 == sizeof(is_member_pointer_tester(make_t())))
- >::value) );
- };
-};
-
-template <typename T>
-struct is_member_pointer_impl
- : public is_member_pointer_select<
- ::boost::type_traits::ice_or<
- ::boost::is_reference<T>::value
- , ::boost::is_array<T>::value
- >::value
- >::template result_<T>
-{
-};
-
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void const volatile,false)
#endif
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::detail::is_member_pointer_impl<T>::value)
-
-#endif // __BORLANDC__
-
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>
diff --git a/3party/boost/boost/type_traits/is_nothrow_move_assignable.hpp b/3party/boost/boost/type_traits/is_nothrow_move_assignable.hpp
index 5a3427f909..9188c6c016 100644
--- a/3party/boost/boost/type_traits/is_nothrow_move_assignable.hpp
+++ b/3party/boost/boost/type_traits/is_nothrow_move_assignable.hpp
@@ -51,6 +51,15 @@ struct is_nothrow_move_assignable_imp{
>::value));
};
+#ifdef BOOST_NO_NOEXCEPT
+//
+// The above logic doesn't quite work in the absense of noexcept,
+// this is really to improve things with VC13:
+//
+template <class T>
+struct is_nothrow_move_assignable_imp<T&>{ BOOST_STATIC_CONSTANT(bool, value = false); };
+#endif
+
#else
template <class T>
diff --git a/3party/boost/boost/type_traits/is_nothrow_move_constructible.hpp b/3party/boost/boost/type_traits/is_nothrow_move_constructible.hpp
index bc7fb888cd..c7218befa7 100644
--- a/3party/boost/boost/type_traits/is_nothrow_move_constructible.hpp
+++ b/3party/boost/boost/type_traits/is_nothrow_move_constructible.hpp
@@ -66,6 +66,15 @@ struct is_nothrow_move_constructible_imp{
#endif
+#ifdef BOOST_NO_NOEXCEPT
+//
+// The above logic doesn't quite work in the absense of noexcept,
+// this is really to improve things with VC13:
+//
+template <class T>
+struct is_nothrow_move_constructible_imp<T&>{ BOOST_STATIC_CONSTANT(bool, value = false); };
+#endif
+
}
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_nothrow_move_constructible,T,::boost::detail::is_nothrow_move_constructible_imp<T>::value)
diff --git a/3party/boost/boost/type_traits/is_object.hpp b/3party/boost/boost/type_traits/is_object.hpp
index 3decbf8d19..1d1ae4f02e 100644
--- a/3party/boost/boost/type_traits/is_object.hpp
+++ b/3party/boost/boost/type_traits/is_object.hpp
@@ -26,20 +26,12 @@ namespace detail {
template <typename T>
struct is_object_impl
{
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_and<
::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
::boost::type_traits::ice_not< ::boost::is_void<T>::value>::value,
::boost::type_traits::ice_not< ::boost::is_function<T>::value>::value
>::value));
-#else
- BOOST_STATIC_CONSTANT(bool, value =
- (::boost::type_traits::ice_and<
- ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
- ::boost::type_traits::ice_not< ::boost::is_void<T>::value>::value
- >::value));
-#endif
};
} // namespace detail
diff --git a/3party/boost/boost/type_traits/is_pod.hpp b/3party/boost/boost/type_traits/is_pod.hpp
index b4e1733987..820a3ceeb9 100644
--- a/3party/boost/boost/type_traits/is_pod.hpp
+++ b/3party/boost/boost/type_traits/is_pod.hpp
@@ -33,7 +33,6 @@ template< typename T > struct is_POD;
namespace detail {
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <typename T> struct is_pod_impl
{
@@ -54,71 +53,6 @@ struct is_pod_impl<T[sz]>
};
#endif
-#else
-
-template <bool is_array = false>
-struct is_pod_helper
-{
- template <typename T> struct result_
- {
- BOOST_STATIC_CONSTANT(
- bool, value =
- (::boost::type_traits::ice_or<
- ::boost::is_scalar<T>::value,
- ::boost::is_void<T>::value,
- BOOST_INTERNAL_IS_POD(T)
- >::value));
- };
-};
-
-template <bool b>
-struct bool_to_yes_no_type
-{
- typedef ::boost::type_traits::no_type type;
-};
-
-template <>
-struct bool_to_yes_no_type<true>
-{
- typedef ::boost::type_traits::yes_type type;
-};
-
-template <typename ArrayType>
-struct is_pod_array_helper
-{
- enum { is_pod = ::boost::is_POD<ArrayType>::value }; // MSVC workaround
- typedef typename bool_to_yes_no_type<is_pod>::type type;
- type instance() const;
-};
-
-template <typename T>
-is_pod_array_helper<T> is_POD_array(T*);
-
-template <>
-struct is_pod_helper<true>
-{
- template <typename T> struct result_
- {
- static T& help();
- BOOST_STATIC_CONSTANT(bool, value =
- sizeof(is_POD_array(help()).instance()) == sizeof(::boost::type_traits::yes_type)
- );
- };
-};
-
-
-template <typename T> struct is_pod_impl
-{
- BOOST_STATIC_CONSTANT(
- bool, value = (
- ::boost::detail::is_pod_helper<
- ::boost::is_array<T>::value
- >::template result_<T>::value
- )
- );
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// the following help compilers without partial specialization support:
BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void,true)
diff --git a/3party/boost/boost/type_traits/is_pointer.hpp b/3party/boost/boost/type_traits/is_pointer.hpp
index 4e29bb39dd..aad30f2541 100644
--- a/3party/boost/boost/type_traits/is_pointer.hpp
+++ b/3party/boost/boost/type_traits/is_pointer.hpp
@@ -25,17 +25,8 @@
#include <boost/type_traits/detail/ice_and.hpp>
#include <boost/type_traits/detail/ice_not.hpp>
#include <boost/type_traits/config.hpp>
-#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
#include <boost/type_traits/remove_cv.hpp>
-#endif
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-# include <boost/type_traits/is_reference.hpp>
-# include <boost/type_traits/is_array.hpp>
-# include <boost/type_traits/detail/is_function_ptr_tester.hpp>
-# include <boost/type_traits/detail/false_result.hpp>
-# include <boost/type_traits/detail/ice_or.hpp>
-#endif
// should be the last #include
#include <boost/type_traits/detail/bool_trait_def.hpp>
@@ -44,7 +35,7 @@ namespace boost {
#if defined( __CODEGEARC__ )
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,__is_pointer(T))
-#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#else
namespace detail {
@@ -67,16 +58,6 @@ TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T*,true)
template< typename T >
struct is_pointer_impl
{
-#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
- BOOST_STATIC_CONSTANT(bool, value =
- (::boost::type_traits::ice_and<
- ::boost::detail::is_pointer_helper<T>::value
- , ::boost::type_traits::ice_not<
- ::boost::is_member_pointer<T>::value
- >::value
- >::value)
- );
-#else
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_and<
::boost::detail::is_pointer_helper<typename remove_cv<T>::type>::value
@@ -85,7 +66,6 @@ struct is_pointer_impl
>::value
>::value)
);
-#endif
};
} // namespace detail
@@ -99,62 +79,8 @@ BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const volatile,false)
#endif
-#else // no partial template specialization
-
-namespace detail {
-
-struct pointer_helper
-{
- pointer_helper(const volatile void*);
-};
-
-yes_type BOOST_TT_DECL is_pointer_tester(pointer_helper);
-no_type BOOST_TT_DECL is_pointer_tester(...);
-
-template <bool>
-struct is_pointer_select
- : public ::boost::type_traits::false_result
-{
-};
-
-template <>
-struct is_pointer_select<false>
-{
- template <typename T> struct result_
- {
- static T& make_t();
- BOOST_STATIC_CONSTANT(bool, value =
- (::boost::type_traits::ice_or<
- (1 == sizeof(is_pointer_tester(make_t()))),
- (1 == sizeof(type_traits::is_function_ptr_tester(make_t())))
- >::value));
- };
-};
-
-template <typename T>
-struct is_pointer_impl
- : public is_pointer_select<
- ::boost::type_traits::ice_or<
- ::boost::is_reference<T>::value
- , ::boost::is_array<T>::value
- >::value
- >::template result_<T>
-{
-};
-
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const volatile,false)
#endif
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl<T>::value)
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>
diff --git a/3party/boost/boost/type_traits/is_polymorphic.hpp b/3party/boost/boost/type_traits/is_polymorphic.hpp
index 8fcc69eb27..aac985105d 100644
--- a/3party/boost/boost/type_traits/is_polymorphic.hpp
+++ b/3party/boost/boost/type_traits/is_polymorphic.hpp
@@ -17,6 +17,11 @@
#include <boost/type_traits/detail/bool_trait_def.hpp>
#include <boost/detail/workaround.hpp>
+#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif
+
namespace boost{
#ifndef BOOST_IS_POLYMORPHIC
@@ -111,4 +116,8 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_polymorphic,T,BOOST_IS_POLYMORPHIC(T))
#include <boost/type_traits/detail/bool_trait_undef.hpp>
+#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700)
+#pragma warning(pop)
+#endif
+
#endif
diff --git a/3party/boost/boost/type_traits/is_same.hpp b/3party/boost/boost/type_traits/is_same.hpp
index c6afbd7f05..c8987b07a8 100644
--- a/3party/boost/boost/type_traits/is_same.hpp
+++ b/3party/boost/boost/type_traits/is_same.hpp
@@ -22,17 +22,11 @@
#define BOOST_TT_IS_SAME_HPP_INCLUDED
#include <boost/type_traits/config.hpp>
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#include <boost/type_traits/detail/yes_no_type.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/is_reference.hpp>
-#endif
// should be the last #include
#include <boost/type_traits/detail/bool_trait_def.hpp>
namespace boost {
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T,T,true)
@@ -42,58 +36,6 @@ BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T,T,true)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T&,T&,true)
#endif
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-namespace detail {
-
-#ifdef BOOST_MSVC
-// the following VC6 specific implementation is *NOT* legal
-// C++, but has the advantage that it works for incomplete
-// types.
-
-template< typename T1 >
-struct is_same_part_1
-{
- template<typename T2> struct part_2 { enum { value = false }; };
- template<> struct part_2<T1> { enum { value = true }; };
-};
-
-template< typename T1, typename T2 >
-struct is_same_impl
-{
- enum { value = boost::detail::is_same_part_1<T1>::template part_2<T2>::value };
-};
-
-#else // generic "no-partial-specialization" version
-
-template <typename T>
-::boost::type_traits::yes_type
-BOOST_TT_DECL is_same_tester(T*, T*);
-
-::boost::type_traits::no_type
-BOOST_TT_DECL is_same_tester(...);
-
-template <typename T, typename U>
-struct is_same_impl
-{
- static T t;
- static U u;
-
- BOOST_STATIC_CONSTANT(bool, value =
- (::boost::type_traits::ice_and<
- (sizeof(type_traits::yes_type) == sizeof(boost::detail::is_same_tester(&t,&u))),
- (::boost::is_reference<T>::value == ::boost::is_reference<U>::value),
- (sizeof(T) == sizeof(U))
- >::value));
-};
-
-#endif // BOOST_MSVC
-
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,(::boost::detail::is_same_impl<T,U>::value))
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} // namespace boost
diff --git a/3party/boost/boost/type_traits/is_signed.hpp b/3party/boost/boost/type_traits/is_signed.hpp
index ba7d6e97cd..5673284944 100644
--- a/3party/boost/boost/type_traits/is_signed.hpp
+++ b/3party/boost/boost/type_traits/is_signed.hpp
@@ -76,11 +76,7 @@ struct is_signed_imp
> selector;
typedef typename selector::template rebind<T> binder;
typedef typename binder::type type;
-#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
- BOOST_STATIC_CONSTANT(bool, value = is_signed_imp<T>::type::value);
-#else
BOOST_STATIC_CONSTANT(bool, value = type::value);
-#endif
};
#else
diff --git a/3party/boost/boost/type_traits/is_virtual_base_of.hpp b/3party/boost/boost/type_traits/is_virtual_base_of.hpp
index f57cb61876..33db914d34 100644
--- a/3party/boost/boost/type_traits/is_virtual_base_of.hpp
+++ b/3party/boost/boost/type_traits/is_virtual_base_of.hpp
@@ -91,11 +91,9 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF2(
, (::boost::detail::is_virtual_base_of_impl2<Base,Derived>::value)
)
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_virtual_base_of,Base&,Derived,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_virtual_base_of,Base,Derived&,false)
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_virtual_base_of,Base&,Derived&,false)
-#endif
} // namespace boost
diff --git a/3party/boost/boost/type_traits/is_volatile.hpp b/3party/boost/boost/type_traits/is_volatile.hpp
index c921c9ef3e..d9839dad3b 100644
--- a/3party/boost/boost/type_traits/is_volatile.hpp
+++ b/3party/boost/boost/type_traits/is_volatile.hpp
@@ -24,17 +24,10 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# include <boost/type_traits/detail/cv_traits_impl.hpp>
# if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
# include <boost/type_traits/remove_bounds.hpp>
# endif
-#else
-# include <boost/type_traits/is_reference.hpp>
-# include <boost/type_traits/is_array.hpp>
-# include <boost/type_traits/detail/yes_no_type.hpp>
-# include <boost/type_traits/detail/false_result.hpp>
-#endif
// should be the last #include
#include <boost/type_traits/detail/bool_trait_def.hpp>
@@ -48,7 +41,7 @@ struct is_volatile_rval_filter
#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_volatile);
#else
- BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<T*>::is_volatile);
+ BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::is_volatile);
#endif
};
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
@@ -66,7 +59,7 @@ struct is_volatile_rval_filter<T&&>
#if defined( __CODEGEARC__ )
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,__is_volatile(T))
-#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#else
//* is a type T declared volatile - is_volatile<T>
BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::is_volatile_rval_filter<T>::value)
@@ -82,69 +75,8 @@ BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& volatile,false
BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const volatile,false)
#endif
-#else
-
-namespace detail {
-
-using ::boost::type_traits::yes_type;
-using ::boost::type_traits::no_type;
-
-yes_type is_volatile_tester(void const volatile*);
-no_type is_volatile_tester(void const*);
-
-template <bool is_ref, bool array>
-struct is_volatile_helper
- : public ::boost::type_traits::false_result
-{
-};
-
-template <>
-struct is_volatile_helper<false,false>
-{
- template <typename T> struct result_
- {
- static T* t;
- BOOST_STATIC_CONSTANT(bool, value = (
- sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_volatile_tester(t))
- ));
- };
-};
-
-template <>
-struct is_volatile_helper<false,true>
-{
- template <typename T> struct result_
- {
- static T t;
- BOOST_STATIC_CONSTANT(bool, value = (
- sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_volatile_tester(&t))
- ));
- };
-};
-
-template <typename T>
-struct is_volatile_impl
- : public is_volatile_helper<
- is_reference<T>::value
- , is_array<T>::value
- >::template result_<T>
-{
-};
-
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void volatile,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const volatile,true)
#endif
-} // namespace detail
-
-//* is a type T declared volatile - is_volatile<T>
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::is_volatile_impl<T>::value)
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>
diff --git a/3party/boost/boost/type_traits/make_signed.hpp b/3party/boost/boost/type_traits/make_signed.hpp
index 7deb855572..51cdbb0dc8 100644
--- a/3party/boost/boost/type_traits/make_signed.hpp
+++ b/3party/boost/boost/type_traits/make_signed.hpp
@@ -37,11 +37,9 @@ struct make_signed_imp
{
BOOST_STATIC_ASSERT(
(::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value));
-#if !BOOST_WORKAROUND(BOOST_MSVC, <=1300)
BOOST_STATIC_ASSERT(
(::boost::type_traits::ice_not< ::boost::is_same<
typename remove_cv<T>::type, bool>::value>::value));
-#endif
typedef typename remove_cv<T>::type t_no_cv;
typedef typename mpl::if_c<
diff --git a/3party/boost/boost/type_traits/make_unsigned.hpp b/3party/boost/boost/type_traits/make_unsigned.hpp
index 7e2fcdc453..239153a863 100644
--- a/3party/boost/boost/type_traits/make_unsigned.hpp
+++ b/3party/boost/boost/type_traits/make_unsigned.hpp
@@ -37,11 +37,9 @@ struct make_unsigned_imp
{
BOOST_STATIC_ASSERT(
(::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value));
-#if !BOOST_WORKAROUND(BOOST_MSVC, <=1300)
BOOST_STATIC_ASSERT(
(::boost::type_traits::ice_not< ::boost::is_same<
typename remove_cv<T>::type, bool>::value>::value));
-#endif
typedef typename remove_cv<T>::type t_no_cv;
typedef typename mpl::if_c<
diff --git a/3party/boost/boost/type_traits/msvc/remove_all_extents.hpp b/3party/boost/boost/type_traits/msvc/remove_all_extents.hpp
deleted file mode 100644
index 25c0edfaaa..0000000000
--- a/3party/boost/boost/type_traits/msvc/remove_all_extents.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2004 Peder Holt
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_ALL_EXTENT_HOLT_2004_0827
-#define BOOST_TYPE_TRAITS_MSVC_REMOVE_ALL_EXTENT_HOLT_2004_0827
-
-#include <boost/type_traits/msvc/typeof.hpp>
-#include <boost/type_traits/is_array.hpp>
-
-namespace boost {
- template<typename T>
- struct remove_all_extents;
-
- namespace detail {
- template<bool IsArray>
- struct remove_all_extents_impl_typeof {
- template<typename T,typename ID>
- struct inner {
- typedef T type;
- };
- };
- template<>
- struct remove_all_extents_impl_typeof<true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U[]);
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type reduced_type;
- typedef typename remove_all_extents<reduced_type>::type type;
- };
- };
- } //namespace detail
-
- template<typename T>
- struct remove_all_extents {
- typedef typename boost::detail::remove_all_extents_impl_typeof<
- boost::is_array<T>::value
- >::template inner<T,remove_all_extents<T> >::type type;
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_all_extents,T)
- };
-} //namespace boost
-
-#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
-
diff --git a/3party/boost/boost/type_traits/msvc/remove_bounds.hpp b/3party/boost/boost/type_traits/msvc/remove_bounds.hpp
deleted file mode 100644
index 4b23b35276..0000000000
--- a/3party/boost/boost/type_traits/msvc/remove_bounds.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (C) 2004 Peder Holt
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
-#define BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
-
-#include <boost/type_traits/msvc/typeof.hpp>
-#include <boost/type_traits/is_array.hpp>
-
-namespace boost {
- namespace detail {
- template<bool IsArray>
- struct remove_bounds_impl_typeof {
- template<typename T,typename ID>
- struct inner {
- typedef T type;
- };
- };
- template<>
- struct remove_bounds_impl_typeof<true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U[]);
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- };
- } //namespace detail
-
- template<typename T>
- struct remove_bounds {
- typedef typename boost::detail::remove_bounds_impl_typeof<
- boost::is_array<T>::value
- >::template inner<T,remove_bounds<T> >::type type;
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_bounds,T)
- };
-} //namespace boost
-
-#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
-
diff --git a/3party/boost/boost/type_traits/msvc/remove_const.hpp b/3party/boost/boost/type_traits/msvc/remove_const.hpp
deleted file mode 100644
index d370754ade..0000000000
--- a/3party/boost/boost/type_traits/msvc/remove_const.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright (C) 2004 Peder Holt
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_CONST_HOLT_2004_0828
-#define BOOST_TYPE_TRAITS_MSVC_REMOVE_CONST_HOLT_2004_0828
-
-#include <boost/type_traits/msvc/typeof.hpp>
-#include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/is_array.hpp>
-
-namespace boost {
- namespace detail {
- template<bool IsPointer,bool IsArray,bool IsConst,bool IsVolatile>
- struct remove_const_impl_typeof {
- template<typename T,typename ID>
- struct inner {
- typedef T type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
- template<> //Const
- struct remove_const_impl_typeof<false,false,true,false> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U const&(*)());
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T& type;
- };
- };
- template<> //CV
- struct remove_const_impl_typeof<false,false,true,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U volatile,ID> test(U const volatile&(*)());
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T& type;
- };
- };
- template<> //Const Pointer
- struct remove_const_impl_typeof<true,false,true,false> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(void(*)(U const[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type[];
- };
- };
- template<> //CV Pointer
- struct remove_const_impl_typeof<true,false,true,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U volatile,ID> test(void(*)(U const volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type[];
- };
- };
- template<> //Const Array
- struct remove_const_impl_typeof<false,true,true,false> {
- template<typename T,typename ID>
- struct inner {
- BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
-
- template<typename U>
- static msvc_register_type<U[value],ID> test(void(*)(U const[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
-
- template<> //CV Array
- struct remove_const_impl_typeof<false,true,true,true> {
- template<typename T,typename ID>
- struct inner {
- BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
-
- template<typename U>
- static msvc_register_type<U volatile[value],ID> test(void(*)(U const volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
-
- } //namespace detail
-
- template<typename T>
- struct remove_const {
- typedef boost::detail::remove_const_impl_typeof<
- boost::is_pointer<T>::value,
- boost::is_array<T>::value,
- boost::is_const<T>::value,
- boost::is_volatile<T>::value
- > remove_const_type;
- typedef typename
- remove_const_type::template inner<
- typename remove_const_type::template transform_type<T>::type,
- remove_const<T>
- >::type
- type;
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_const,T)
- };
-}//namespace boost
-
-#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_CONST_HOLT_2004_0828
diff --git a/3party/boost/boost/type_traits/msvc/remove_cv.hpp b/3party/boost/boost/type_traits/msvc/remove_cv.hpp
deleted file mode 100644
index 9fbf8b845d..0000000000
--- a/3party/boost/boost/type_traits/msvc/remove_cv.hpp
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright (C) 2004 Peder Holt
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_CV_HOLT_2004_0901
-#define BOOST_TYPE_TRAITS_MSVC_REMOVE_CV_HOLT_2004_0901
-
-#include <boost/type_traits/msvc/typeof.hpp>
-#include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/is_array.hpp>
-
-namespace boost {
- namespace detail {
- template<bool IsPointer,bool IsArray,bool IsConst,bool IsVolatile>
- struct remove_cv_impl_typeof {
- template<typename T,typename ID>
- struct inner {
- typedef T type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
- template<> //Volatile
- struct remove_cv_impl_typeof<false,false,false,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U volatile&(*)());
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T& type;
- };
- };
- template<> //Const
- struct remove_cv_impl_typeof<false,false,true,false> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U const&(*)());
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T& type;
- };
- };
- template<> //CV
- struct remove_cv_impl_typeof<false,false,true,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U const volatile&(*)());
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T& type;
- };
- };
- template<> //Volatile Pointer
- struct remove_cv_impl_typeof<true,false,false,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(void(*)(U volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type[];
- };
- };
- template<> //Const Pointer
- struct remove_cv_impl_typeof<true,false,true,false> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(void(*)(U const[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type[];
- };
- };
- template<> //CV Pointer
- struct remove_cv_impl_typeof<true,false,true,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(void(*)(U const volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type[];
- };
- };
- template<> //Volatile Array
- struct remove_cv_impl_typeof<false,true,false,true> {
- template<typename T,typename ID>
- struct inner {
- BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
-
- template<typename U>
- static msvc_register_type<U[value],ID> test(void(*)(U volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
- template<> //Const Array
- struct remove_cv_impl_typeof<false,true,true,false> {
- template<typename T,typename ID>
- struct inner {
- BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
-
- template<typename U>
- static msvc_register_type<U[value],ID> test(void(*)(U const[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
-
- template<> //CV Array
- struct remove_cv_impl_typeof<false,true,true,true> {
- template<typename T,typename ID>
- struct inner {
- BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
-
- template<typename U>
- static msvc_register_type<U[value],ID> test(void(*)(U const volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
-
- } //namespace detail
-
- template<typename T>
- struct remove_cv {
- typedef boost::detail::remove_cv_impl_typeof<
- boost::is_pointer<T>::value,
- boost::is_array<T>::value,
- boost::is_const<T>::value,
- boost::is_volatile<T>::value
- > remove_cv_type;
- typedef typename
- remove_cv_type::template inner<
- typename remove_cv_type::template transform_type<T>::type,
- remove_cv<T>
- >::type
- type;
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_cv,T)
- };
-}//namespace boost
-
-#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_CV_HOLT_2004_0901
diff --git a/3party/boost/boost/type_traits/msvc/remove_extent.hpp b/3party/boost/boost/type_traits/msvc/remove_extent.hpp
deleted file mode 100644
index c5a59ef6f4..0000000000
--- a/3party/boost/boost/type_traits/msvc/remove_extent.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (C) 2004 Peder Holt
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_EXTENT_HOLT_2004_0827
-#define BOOST_TYPE_TRAITS_MSVC_REMOVE_EXTENT_HOLT_2004_0827
-
-#include <boost/type_traits/msvc/typeof.hpp>
-#include <boost/type_traits/is_array.hpp>
-
-namespace boost {
- namespace detail {
- template<bool IsArray>
- struct remove_extent_impl_typeof {
- template<typename T,typename ID>
- struct inner {
- typedef T type;
- };
- };
- template<>
- struct remove_extent_impl_typeof<true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U[]);
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- };
- } //namespace detail
-
- template<typename T>
- struct remove_extent {
- typedef typename boost::detail::remove_extent_impl_typeof<
- boost::is_array<T>::value
- >::template inner<T,remove_extent<T> >::type type;
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_extent,T)
- };
-} //namespace boost
-
-#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
-
diff --git a/3party/boost/boost/type_traits/msvc/remove_pointer.hpp b/3party/boost/boost/type_traits/msvc/remove_pointer.hpp
deleted file mode 100644
index ec847f9d8e..0000000000
--- a/3party/boost/boost/type_traits/msvc/remove_pointer.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2004 Peder Holt
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_POINTER_HOLT_2004_0827
-#define BOOST_TYPE_TRAITS_MSVC_REMOVE_POINTER_HOLT_2004_0827
-
-#include <boost/type_traits/msvc/typeof.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-
-namespace boost {
- namespace detail {
- template<int IsPointer>
- struct remove_pointer_impl_typeof {
- template<typename T,typename ID>
- struct inner {
- typedef T type;
- };
- };
- template<>
- struct remove_pointer_impl_typeof<true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U*);
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- };
- } //namespace detail
-
- template<typename T>
- struct remove_pointer {
- typedef typename boost::detail::remove_pointer_impl_typeof<
- boost::is_pointer<T>::value
- >::template inner<T,remove_pointer<T> >::type type;
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_pointer,T)
- };
-} //namespace boost
-
-#endif //BOOST_TYPE_TRAITS_REMOVE_POINTER_HOLT_2004_0827
diff --git a/3party/boost/boost/type_traits/msvc/remove_reference.hpp b/3party/boost/boost/type_traits/msvc/remove_reference.hpp
deleted file mode 100644
index f8a77d4c51..0000000000
--- a/3party/boost/boost/type_traits/msvc/remove_reference.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2004 Peder Holt
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827
-#define BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827
-
-#include <boost/type_traits/msvc/typeof.hpp>
-#include <boost/type_traits/is_reference.hpp>
-
-namespace boost {
- namespace detail {
- template<bool IsReference>
- struct remove_reference_impl_typeof {
- template<typename T,typename ID>
- struct inner {
- typedef T type;
- };
- };
- template<>
- struct remove_reference_impl_typeof<true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U&(*)());
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- };
- } //namespace detail
-
- template<typename T>
- struct remove_reference {
- typedef typename boost::detail::remove_reference_impl_typeof<
- boost::is_reference<T>::value
- >::template inner<T,remove_reference<T> >::type type;
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_reference,T)
- };
-} //namespace boost
-
-#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827
diff --git a/3party/boost/boost/type_traits/msvc/remove_volatile.hpp b/3party/boost/boost/type_traits/msvc/remove_volatile.hpp
deleted file mode 100644
index 6f9259c5b1..0000000000
--- a/3party/boost/boost/type_traits/msvc/remove_volatile.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright (C) 2004 Peder Holt
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_VOLATILE_HOLT_2004_0828
-#define BOOST_TYPE_TRAITS_MSVC_REMOVE_VOLATILE_HOLT_2004_0828
-
-#include <boost/type_traits/msvc/typeof.hpp>
-#include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/is_array.hpp>
-
-namespace boost {
- namespace detail {
- template<bool IsPointer,bool IsArray,bool IsConst,bool IsVolatile>
- struct remove_volatile_impl_typeof {
- template<typename T,typename ID>
- struct inner {
- typedef T type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
- template<> //Volatile
- struct remove_volatile_impl_typeof<false,false,false,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(U volatile&(*)());
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T& type;
- };
- };
- template<> //CV
- struct remove_volatile_impl_typeof<false,false,true,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U const,ID> test(U const volatile&(*)());
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T& type;
- };
- };
- template<> //Volatile Pointer
- struct remove_volatile_impl_typeof<true,false,false,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U,ID> test(void(*)(U volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type[];
- };
- };
- template<> //CV Pointer
- struct remove_volatile_impl_typeof<true,false,true,true> {
- template<typename T,typename ID>
- struct inner {
- template<typename U>
- static msvc_register_type<U const,ID> test(void(*)(U const volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type[];
- };
- };
- template<> //Volatile Array
- struct remove_volatile_impl_typeof<false,true,false,true> {
- template<typename T,typename ID>
- struct inner {
- BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
-
- template<typename U>
- static msvc_register_type<U[value],ID> test(void(*)(U volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
-
- template<> //CV Array
- struct remove_volatile_impl_typeof<false,true,true,true> {
- template<typename T,typename ID>
- struct inner {
- BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
-
- template<typename U>
- static msvc_register_type<U const[value],ID> test(void(*)(U const volatile[]));
- static msvc_register_type<T,ID> test(...);
- BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
- typedef typename msvc_extract_type<ID>::id2type::type type;
- };
- template<typename T>
- struct transform_type {
- typedef T type;
- };
- };
-
- } //namespace detail
-
- template<typename T>
- struct remove_volatile {
- typedef boost::detail::remove_volatile_impl_typeof<
- boost::is_pointer<T>::value,
- boost::is_array<T>::value,
- boost::is_const<T>::value,
- boost::is_volatile<T>::value
- > remove_volatile_type;
- typedef typename
- remove_volatile_type::template inner<
- typename remove_volatile_type::template transform_type<T>::type,
- remove_volatile<T>
- >::type
- type;
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_volatile,T)
- };
-}//namespace boost
-
-#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_VOLATILE_HOLT_2004_0828
diff --git a/3party/boost/boost/type_traits/msvc/typeof.hpp b/3party/boost/boost/type_traits/msvc/typeof.hpp
deleted file mode 100644
index b95785d521..0000000000
--- a/3party/boost/boost/type_traits/msvc/typeof.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (C) 2004 Peder Holt
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TYPETRAITS_MSVC_TYPEOF_HPP
-#define BOOST_TYPETRAITS_MSVC_TYPEOF_HPP
-
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-namespace boost { namespace detail {
-# if BOOST_WORKAROUND(BOOST_MSVC,==1300)
- template<typename ID>
- struct msvc_extract_type
- {
- template<bool>
- struct id2type_impl;
-
- typedef id2type_impl<true> id2type;
- };
-
- template<typename T, typename ID>
- struct msvc_register_type : public msvc_extract_type<ID>
- {
- template<>
- struct id2type_impl<true> //VC7.0 specific bugfeature
- {
- typedef T type;
- };
- };
-# else
- template<typename ID>
- struct msvc_extract_type
- {
- struct id2type;
- };
-
- template<typename T, typename ID>
- struct msvc_register_type : public msvc_extract_type<ID>
- {
- typedef msvc_extract_type<ID> base_type;
- struct base_type::id2type // This uses nice VC6.5 and VC7.1 bugfeature
- {
- typedef T type;
- };
- };
-# endif
-}}
-
-#endif //BOOST_TYPETRAITS_MSVC_TYPEOF_IMPL_HPP
diff --git a/3party/boost/boost/type_traits/rank.hpp b/3party/boost/boost/type_traits/rank.hpp
index 77df41e84c..33f46c8eb8 100644
--- a/3party/boost/boost/type_traits/rank.hpp
+++ b/3party/boost/boost/type_traits/rank.hpp
@@ -24,7 +24,7 @@ struct rank_imp
{
BOOST_STATIC_CONSTANT(std::size_t, value = N);
};
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
template <class T, std::size_t R, std::size_t N>
struct rank_imp<T[R], N>
{
diff --git a/3party/boost/boost/type_traits/remove_all_extents.hpp b/3party/boost/boost/type_traits/remove_all_extents.hpp
index 64876e19a1..1409da12cb 100644
--- a/3party/boost/boost/type_traits/remove_all_extents.hpp
+++ b/3party/boost/boost/type_traits/remove_all_extents.hpp
@@ -13,20 +13,14 @@
#include <cstddef>
#include <boost/detail/workaround.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-#include <boost/type_traits/msvc/remove_all_extents.hpp>
-#endif
-
// should be the last #include
#include <boost/type_traits/detail/type_trait_def.hpp>
-#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-
namespace boost {
BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_all_extents,T,T)
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T[N],typename boost::remove_all_extents<T>::type type)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T const[N],typename boost::remove_all_extents<T const>::type type)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T volatile[N],typename boost::remove_all_extents<T volatile>::type type)
@@ -41,8 +35,6 @@ BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_all_extents,T const vo
} // namespace boost
-#endif
-
#include <boost/type_traits/detail/type_trait_undef.hpp>
#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
diff --git a/3party/boost/boost/type_traits/remove_bounds.hpp b/3party/boost/boost/type_traits/remove_bounds.hpp
index ce12978733..2d26348c69 100644
--- a/3party/boost/boost/type_traits/remove_bounds.hpp
+++ b/3party/boost/boost/type_traits/remove_bounds.hpp
@@ -13,20 +13,14 @@
#include <cstddef>
#include <boost/detail/workaround.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-#include <boost/type_traits/msvc/remove_bounds.hpp>
-#endif
-
// should be the last #include
#include <boost/type_traits/detail/type_trait_def.hpp>
-#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-
namespace boost {
BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_bounds,T,T)
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T[N],T type)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T const[N],T const type)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T volatile[N],T volatile type)
@@ -41,8 +35,6 @@ BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T const volatil
} // namespace boost
-#endif
-
#include <boost/type_traits/detail/type_trait_undef.hpp>
#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
diff --git a/3party/boost/boost/type_traits/remove_const.hpp b/3party/boost/boost/type_traits/remove_const.hpp
index 5f957e9787..1020781383 100644
--- a/3party/boost/boost/type_traits/remove_const.hpp
+++ b/3party/boost/boost/type_traits/remove_const.hpp
@@ -12,23 +12,17 @@
#define BOOST_TT_REMOVE_CONST_HPP_INCLUDED
#include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/broken_compiler_spec.hpp>
#include <boost/type_traits/detail/cv_traits_impl.hpp>
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#include <cstddef>
-#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-#include <boost/type_traits/msvc/remove_const.hpp>
-#endif
-
// should be the last #include
#include <boost/type_traits/detail/type_trait_def.hpp>
namespace boost {
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace detail {
@@ -49,7 +43,7 @@ template <typename T>
struct remove_const_impl
{
typedef typename remove_const_helper<
- typename cv_traits_imp<T*>::unqualified_type
+ typename cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::unqualified_type
, ::boost::is_volatile<T>::value
>::type type;
};
@@ -77,11 +71,6 @@ BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T const volatile[N],T volatile type[N])
#endif
-#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_const,T,typename boost::detail::remove_const_impl<T>::type)
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} // namespace boost
diff --git a/3party/boost/boost/type_traits/remove_cv.hpp b/3party/boost/boost/type_traits/remove_cv.hpp
index 7478c207eb..9ba34a1eff 100644
--- a/3party/boost/boost/type_traits/remove_cv.hpp
+++ b/3party/boost/boost/type_traits/remove_cv.hpp
@@ -11,30 +11,24 @@
#ifndef BOOST_TT_REMOVE_CV_HPP_INCLUDED
#define BOOST_TT_REMOVE_CV_HPP_INCLUDED
-#include <boost/type_traits/broken_compiler_spec.hpp>
#include <boost/type_traits/detail/cv_traits_impl.hpp>
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#include <cstddef>
-#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-#include <boost/type_traits/msvc/remove_cv.hpp>
-#endif
-
// should be the last #include
#include <boost/type_traits/detail/type_trait_def.hpp>
namespace boost {
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace detail{
template <class T>
struct rvalue_ref_filter_rem_cv
{
- typedef typename boost::detail::cv_traits_imp<T*>::unqualified_type type;
+ typedef typename boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::unqualified_type type;
};
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
@@ -61,21 +55,6 @@ BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T vol
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T const volatile[N],T type[N])
#endif
-#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-
-namespace detail {
-template <typename T>
-struct remove_cv_impl
-{
- typedef typename remove_volatile_impl<
- typename remove_const_impl<T>::type
- >::type type;
-};
-}
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::remove_cv_impl<T>::type)
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} // namespace boost
diff --git a/3party/boost/boost/type_traits/remove_extent.hpp b/3party/boost/boost/type_traits/remove_extent.hpp
index b4c7d41368..9c4cdff70b 100644
--- a/3party/boost/boost/type_traits/remove_extent.hpp
+++ b/3party/boost/boost/type_traits/remove_extent.hpp
@@ -13,20 +13,14 @@
#include <boost/detail/workaround.hpp>
#include <cstddef>
-#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-#include <boost/type_traits/msvc/remove_extent.hpp>
-#endif
-
// should be the last #include
#include <boost/type_traits/detail/type_trait_def.hpp>
-#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-
namespace boost {
BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_extent,T,T)
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T[N],T type)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T const[N],T const type)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T volatile[N],T volatile type)
@@ -41,8 +35,6 @@ BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_extent,T const volatil
} // namespace boost
-#endif
-
#include <boost/type_traits/detail/type_trait_undef.hpp>
#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
diff --git a/3party/boost/boost/type_traits/remove_pointer.hpp b/3party/boost/boost/type_traits/remove_pointer.hpp
index 01253db8f2..fef706860c 100644
--- a/3party/boost/boost/type_traits/remove_pointer.hpp
+++ b/3party/boost/boost/type_traits/remove_pointer.hpp
@@ -11,13 +11,8 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#include <boost/type_traits/broken_compiler_spec.hpp>
-#endif
-#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-#include <boost/type_traits/msvc/remove_pointer.hpp>
-#elif defined(BOOST_MSVC)
+#if defined(BOOST_MSVC)
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_pointer.hpp>
#endif
@@ -71,7 +66,7 @@ namespace detail{
BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename boost::detail::remove_pointer_imp2<T>::type)
-#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#else
BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,T)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T*,T)
@@ -79,10 +74,6 @@ BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const,T)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* volatile,T)
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const volatile,T)
-#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename boost::detail::remove_pointer_impl<T>::type)
-
#endif
} // namespace boost
diff --git a/3party/boost/boost/type_traits/remove_reference.hpp b/3party/boost/boost/type_traits/remove_reference.hpp
index 19a55b738f..c59e7e35f4 100644
--- a/3party/boost/boost/type_traits/remove_reference.hpp
+++ b/3party/boost/boost/type_traits/remove_reference.hpp
@@ -9,20 +9,14 @@
#ifndef BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
#define BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
-#include <boost/type_traits/broken_compiler_spec.hpp>
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-#include <boost/type_traits/msvc/remove_reference.hpp>
-#endif
-
// should be the last #include
#include <boost/type_traits/detail/type_trait_def.hpp>
namespace boost {
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace detail{
//
@@ -57,11 +51,6 @@ BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& volatile,
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const volatile,T)
#endif
-#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename boost::detail::remove_reference_impl<T>::type)
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} // namespace boost
diff --git a/3party/boost/boost/type_traits/remove_volatile.hpp b/3party/boost/boost/type_traits/remove_volatile.hpp
index 98da5cfc1f..c20277696d 100644
--- a/3party/boost/boost/type_traits/remove_volatile.hpp
+++ b/3party/boost/boost/type_traits/remove_volatile.hpp
@@ -12,23 +12,17 @@
#define BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/broken_compiler_spec.hpp>
#include <boost/type_traits/detail/cv_traits_impl.hpp>
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#include <cstddef>
-#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-#include <boost/type_traits/msvc/remove_volatile.hpp>
-#endif
-
// should be the last #include
#include <boost/type_traits/detail/type_trait_def.hpp>
namespace boost {
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace detail {
@@ -48,7 +42,7 @@ template <typename T>
struct remove_volatile_impl
{
typedef typename remove_volatile_helper<
- typename cv_traits_imp<T*>::unqualified_type
+ typename cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::unqualified_type
, ::boost::is_const<T>::value
>::type type;
};
@@ -75,11 +69,6 @@ BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_volatile
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_volatile,T const volatile[N],T const type[N])
#endif
-#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_volatile,T,typename boost::detail::remove_volatile_impl<T>::type)
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} // namespace boost
diff --git a/3party/boost/boost/type_traits/transform_traits_spec.hpp b/3party/boost/boost/type_traits/transform_traits_spec.hpp
index 851af3d39f..b12b5f8e56 100644
--- a/3party/boost/boost/type_traits/transform_traits_spec.hpp
+++ b/3party/boost/boost/type_traits/transform_traits_spec.hpp
@@ -6,9 +6,9 @@
//
// See http://www.boost.org/libs/type_traits for most recent version including documentation.
-#ifndef BOOST_TT_TRANSFORM_TRAITS_SPEC_HPP_INCLUDED
-#define BOOST_TT_TRANSFORM_TRAITS_SPEC_HPP_INCLUDED
+#ifndef BOOST_TT_TRANSFORM_TRAITS_HPP_INCLUDED
+#define BOOST_TT_TRANSFORM_TRAITS_HPP_INCLUDED
-#include <boost/type_traits/broken_compiler_spec.hpp>
+#include <boost/type_traits/config.hpp>
-#endif // BOOST_TT_TRANSFORM_TRAITS_SPEC_HPP_INCLUDED
+#endif
diff --git a/3party/boost/boost/type_traits/type_with_alignment.hpp b/3party/boost/boost/type_traits/type_with_alignment.hpp
index a86137f53a..ad86613fd3 100644
--- a/3party/boost/boost/type_traits/type_with_alignment.hpp
+++ b/3party/boost/boost/type_traits/type_with_alignment.hpp
@@ -69,35 +69,6 @@ typedef int (alignment_dummy::*member_function_ptr)();
// This template gets instantiated a lot, so use partial
// specialization when available to reduce the compiler burden.
//
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-template <bool found = true>
-struct lower_alignment_helper_impl
-{
- template <std::size_t, class>
- struct apply
- {
- typedef char type;
- enum { value = true };
- };
-};
-
-template <>
-struct lower_alignment_helper_impl<false>
-{
- template <std::size_t target, class TestType>
- struct apply
- : public mpl::if_c<(alignment_of<TestType>::value == target), TestType, char>
- {
- enum { value = (alignment_of<TestType>::value == target) };
- };
-};
-
-template <bool found, std::size_t target, class TestType>
-struct lower_alignment_helper
- : public lower_alignment_helper_impl<found>::template apply<target,TestType>
-{
-};
-#else
template <bool found, std::size_t target, class TestType>
struct lower_alignment_helper
{
@@ -111,7 +82,6 @@ struct lower_alignment_helper<false,target,TestType>
enum { value = (alignment_of<TestType>::value == target) };
typedef typename mpl::if_c<value, TestType, char>::type type;
};
-#endif
#define BOOST_TT_CHOOSE_MIN_ALIGNMENT(R,P,I,T) \
typename lower_alignment_helper< \
@@ -166,26 +136,14 @@ struct is_aligned
);
};
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::max_align,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<1> ,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<2> ,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<4> ,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<8> ,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<10> ,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<16> ,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<32> ,true)
-#endif
} // namespace detail
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<std::size_t Align>
struct is_pod< ::boost::detail::lower_alignment<Align> >
{
BOOST_STATIC_CONSTANT(std::size_t, value = true);
};
-#endif
// This alignment method originally due to Brian Parker, implemented by David
// Abrahams, and then ported here by Doug Gregor.
@@ -219,7 +177,7 @@ class type_with_alignment
};
#if defined(__GNUC__)
-namespace align {
+namespace tt_align_ns {
struct __attribute__((__aligned__(2))) a2 {};
struct __attribute__((__aligned__(4))) a4 {};
struct __attribute__((__aligned__(8))) a8 {};
@@ -230,25 +188,25 @@ struct __attribute__((__aligned__(128))) a128 {};
}
template<> class type_with_alignment<1> { public: typedef char type; };
-template<> class type_with_alignment<2> { public: typedef align::a2 type; };
-template<> class type_with_alignment<4> { public: typedef align::a4 type; };
-template<> class type_with_alignment<8> { public: typedef align::a8 type; };
-template<> class type_with_alignment<16> { public: typedef align::a16 type; };
-template<> class type_with_alignment<32> { public: typedef align::a32 type; };
-template<> class type_with_alignment<64> { public: typedef align::a64 type; };
-template<> class type_with_alignment<128> { public: typedef align::a128 type; };
+template<> class type_with_alignment<2> { public: typedef tt_align_ns::a2 type; };
+template<> class type_with_alignment<4> { public: typedef tt_align_ns::a4 type; };
+template<> class type_with_alignment<8> { public: typedef tt_align_ns::a8 type; };
+template<> class type_with_alignment<16> { public: typedef tt_align_ns::a16 type; };
+template<> class type_with_alignment<32> { public: typedef tt_align_ns::a32 type; };
+template<> class type_with_alignment<64> { public: typedef tt_align_ns::a64 type; };
+template<> class type_with_alignment<128> { public: typedef tt_align_ns::a128 type; };
namespace detail {
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a2,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a4,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a32,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a64,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a2,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a4,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a8,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a16,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a32,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a64,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a128,true)
}
#endif
-#if (defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))) && _MSC_VER >= 1300
+#if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))
//
// MSVC supports types which have alignments greater than the normal
// maximum: these are used for example in the types __m64 and __m128
@@ -265,7 +223,7 @@ BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,true)
// Boost.Optional). However, this only happens when we have no choice
// in the matter because no other "ordinary" type is available.
//
-namespace align {
+namespace tt_align_ns {
struct __declspec(align(8)) a8 {
char m[8];
typedef a8 type;
@@ -293,7 +251,7 @@ template<> class type_with_alignment<8>
{
typedef mpl::if_c<
::boost::alignment_of<boost::detail::max_align>::value < 8,
- align::a8,
+ tt_align_ns::a8,
boost::detail::type_with_alignment_imp<8> >::type t1;
public:
typedef t1::type type;
@@ -302,7 +260,7 @@ template<> class type_with_alignment<16>
{
typedef mpl::if_c<
::boost::alignment_of<boost::detail::max_align>::value < 16,
- align::a16,
+ tt_align_ns::a16,
boost::detail::type_with_alignment_imp<16> >::type t1;
public:
typedef t1::type type;
@@ -311,7 +269,7 @@ template<> class type_with_alignment<32>
{
typedef mpl::if_c<
::boost::alignment_of<boost::detail::max_align>::value < 32,
- align::a32,
+ tt_align_ns::a32,
boost::detail::type_with_alignment_imp<32> >::type t1;
public:
typedef t1::type type;
@@ -319,7 +277,7 @@ public:
template<> class type_with_alignment<64> {
typedef mpl::if_c<
::boost::alignment_of<boost::detail::max_align>::value < 64,
- align::a64,
+ tt_align_ns::a64,
boost::detail::type_with_alignment_imp<64> >::type t1;
public:
typedef t1::type type;
@@ -327,18 +285,18 @@ public:
template<> class type_with_alignment<128> {
typedef mpl::if_c<
::boost::alignment_of<boost::detail::max_align>::value < 128,
- align::a128,
+ tt_align_ns::a128,
boost::detail::type_with_alignment_imp<128> >::type t1;
public:
typedef t1::type type;
};
namespace detail {
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a32,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a64,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a8,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a16,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a32,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a64,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a128,true)
}
#endif
@@ -350,7 +308,7 @@ BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,true)
// 2) Because of Borlands #pragma option we can create types with alignments that are
// greater that the largest aligned builtin type.
-namespace align{
+namespace tt_align_ns{
#pragma option push -a16
struct a2{ short s; };
struct a4{ int s; };
@@ -361,13 +319,13 @@ struct a16{ long double s; };
namespace detail {
-typedef ::boost::align::a16 max_align;
+typedef ::boost::tt_align_ns::a16 max_align;
//#if ! BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a2,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a4,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a2,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a4,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a8,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a16,true)
//#endif
}
@@ -376,13 +334,13 @@ template <std::size_t N> struct type_with_alignment
// We should never get to here, but if we do use the maximally
// aligned type:
// BOOST_STATIC_ASSERT(0);
- typedef align::a16 type;
+ typedef tt_align_ns::a16 type;
};
template <> struct type_with_alignment<1>{ typedef char type; };
-template <> struct type_with_alignment<2>{ typedef align::a2 type; };
-template <> struct type_with_alignment<4>{ typedef align::a4 type; };
-template <> struct type_with_alignment<8>{ typedef align::a8 type; };
-template <> struct type_with_alignment<16>{ typedef align::a16 type; };
+template <> struct type_with_alignment<2>{ typedef tt_align_ns::a2 type; };
+template <> struct type_with_alignment<4>{ typedef tt_align_ns::a4 type; };
+template <> struct type_with_alignment<8>{ typedef tt_align_ns::a8 type; };
+template <> struct type_with_alignment<16>{ typedef tt_align_ns::a16 type; };
#endif
diff --git a/3party/boost/boost/typeof/dmc/typeof_impl.hpp b/3party/boost/boost/typeof/dmc/typeof_impl.hpp
index 2460622cc1..2460622cc1 100644..100755
--- a/3party/boost/boost/typeof/dmc/typeof_impl.hpp
+++ b/3party/boost/boost/typeof/dmc/typeof_impl.hpp
diff --git a/3party/boost/boost/typeof/encode_decode.hpp b/3party/boost/boost/typeof/encode_decode.hpp
index 5a13fd524a..5a13fd524a 100644..100755
--- a/3party/boost/boost/typeof/encode_decode.hpp
+++ b/3party/boost/boost/typeof/encode_decode.hpp
diff --git a/3party/boost/boost/typeof/encode_decode_params.hpp b/3party/boost/boost/typeof/encode_decode_params.hpp
index 640bfdc2a6..640bfdc2a6 100644..100755
--- a/3party/boost/boost/typeof/encode_decode_params.hpp
+++ b/3party/boost/boost/typeof/encode_decode_params.hpp
diff --git a/3party/boost/boost/typeof/incr_registration_group.hpp b/3party/boost/boost/typeof/incr_registration_group.hpp
index 6f4803aab5..6f4803aab5 100644..100755
--- a/3party/boost/boost/typeof/incr_registration_group.hpp
+++ b/3party/boost/boost/typeof/incr_registration_group.hpp
diff --git a/3party/boost/boost/typeof/int_encoding.hpp b/3party/boost/boost/typeof/int_encoding.hpp
index 482b7f6b18..482b7f6b18 100644..100755
--- a/3party/boost/boost/typeof/int_encoding.hpp
+++ b/3party/boost/boost/typeof/int_encoding.hpp
diff --git a/3party/boost/boost/typeof/integral_template_param.hpp b/3party/boost/boost/typeof/integral_template_param.hpp
index 8543be7f08..8543be7f08 100644..100755
--- a/3party/boost/boost/typeof/integral_template_param.hpp
+++ b/3party/boost/boost/typeof/integral_template_param.hpp
diff --git a/3party/boost/boost/typeof/modifiers.hpp b/3party/boost/boost/typeof/modifiers.hpp
index 630d0dc76f..630d0dc76f 100644..100755
--- a/3party/boost/boost/typeof/modifiers.hpp
+++ b/3party/boost/boost/typeof/modifiers.hpp
diff --git a/3party/boost/boost/typeof/native.hpp b/3party/boost/boost/typeof/native.hpp
index 8197e28669..8197e28669 100644..100755
--- a/3party/boost/boost/typeof/native.hpp
+++ b/3party/boost/boost/typeof/native.hpp
diff --git a/3party/boost/boost/typeof/pointers_data_members.hpp b/3party/boost/boost/typeof/pointers_data_members.hpp
index 2b47e97a97..2b47e97a97 100644..100755
--- a/3party/boost/boost/typeof/pointers_data_members.hpp
+++ b/3party/boost/boost/typeof/pointers_data_members.hpp
diff --git a/3party/boost/boost/typeof/register_fundamental.hpp b/3party/boost/boost/typeof/register_fundamental.hpp
index 3a15888d08..3a15888d08 100644..100755
--- a/3party/boost/boost/typeof/register_fundamental.hpp
+++ b/3party/boost/boost/typeof/register_fundamental.hpp
diff --git a/3party/boost/boost/typeof/register_mem_functions.hpp b/3party/boost/boost/typeof/register_mem_functions.hpp
index 9cf9720b79..9cf9720b79 100644..100755
--- a/3party/boost/boost/typeof/register_mem_functions.hpp
+++ b/3party/boost/boost/typeof/register_mem_functions.hpp
diff --git a/3party/boost/boost/typeof/std/bitset.hpp b/3party/boost/boost/typeof/std/bitset.hpp
index bdc6ae9d0e..bdc6ae9d0e 100644..100755
--- a/3party/boost/boost/typeof/std/bitset.hpp
+++ b/3party/boost/boost/typeof/std/bitset.hpp
diff --git a/3party/boost/boost/typeof/std/complex.hpp b/3party/boost/boost/typeof/std/complex.hpp
index 12652949a9..12652949a9 100644..100755
--- a/3party/boost/boost/typeof/std/complex.hpp
+++ b/3party/boost/boost/typeof/std/complex.hpp
diff --git a/3party/boost/boost/typeof/std/deque.hpp b/3party/boost/boost/typeof/std/deque.hpp
index 643e1b2783..643e1b2783 100644..100755
--- a/3party/boost/boost/typeof/std/deque.hpp
+++ b/3party/boost/boost/typeof/std/deque.hpp
diff --git a/3party/boost/boost/typeof/std/fstream.hpp b/3party/boost/boost/typeof/std/fstream.hpp
index 4ce8cbf242..4ce8cbf242 100644..100755
--- a/3party/boost/boost/typeof/std/fstream.hpp
+++ b/3party/boost/boost/typeof/std/fstream.hpp
diff --git a/3party/boost/boost/typeof/std/functional.hpp b/3party/boost/boost/typeof/std/functional.hpp
index f1b157764e..f1b157764e 100644..100755
--- a/3party/boost/boost/typeof/std/functional.hpp
+++ b/3party/boost/boost/typeof/std/functional.hpp
diff --git a/3party/boost/boost/typeof/std/iostream.hpp b/3party/boost/boost/typeof/std/iostream.hpp
index 559a0ce8df..559a0ce8df 100644..100755
--- a/3party/boost/boost/typeof/std/iostream.hpp
+++ b/3party/boost/boost/typeof/std/iostream.hpp
diff --git a/3party/boost/boost/typeof/std/istream.hpp b/3party/boost/boost/typeof/std/istream.hpp
index c2457f16c7..c2457f16c7 100644..100755
--- a/3party/boost/boost/typeof/std/istream.hpp
+++ b/3party/boost/boost/typeof/std/istream.hpp
diff --git a/3party/boost/boost/typeof/std/iterator.hpp b/3party/boost/boost/typeof/std/iterator.hpp
index ac7bcbc755..ac7bcbc755 100644..100755
--- a/3party/boost/boost/typeof/std/iterator.hpp
+++ b/3party/boost/boost/typeof/std/iterator.hpp
diff --git a/3party/boost/boost/typeof/std/list.hpp b/3party/boost/boost/typeof/std/list.hpp
index 7557d5e31e..7557d5e31e 100644..100755
--- a/3party/boost/boost/typeof/std/list.hpp
+++ b/3party/boost/boost/typeof/std/list.hpp
diff --git a/3party/boost/boost/typeof/std/locale.hpp b/3party/boost/boost/typeof/std/locale.hpp
index 9a21c22cad..9a21c22cad 100644..100755
--- a/3party/boost/boost/typeof/std/locale.hpp
+++ b/3party/boost/boost/typeof/std/locale.hpp
diff --git a/3party/boost/boost/typeof/std/map.hpp b/3party/boost/boost/typeof/std/map.hpp
index 77839e3870..77839e3870 100644..100755
--- a/3party/boost/boost/typeof/std/map.hpp
+++ b/3party/boost/boost/typeof/std/map.hpp
diff --git a/3party/boost/boost/typeof/std/memory.hpp b/3party/boost/boost/typeof/std/memory.hpp
index fa3ae1da4d..fa3ae1da4d 100644..100755
--- a/3party/boost/boost/typeof/std/memory.hpp
+++ b/3party/boost/boost/typeof/std/memory.hpp
diff --git a/3party/boost/boost/typeof/std/ostream.hpp b/3party/boost/boost/typeof/std/ostream.hpp
index a7924461aa..a7924461aa 100644..100755
--- a/3party/boost/boost/typeof/std/ostream.hpp
+++ b/3party/boost/boost/typeof/std/ostream.hpp
diff --git a/3party/boost/boost/typeof/std/queue.hpp b/3party/boost/boost/typeof/std/queue.hpp
index d44e24e7f8..d44e24e7f8 100644..100755
--- a/3party/boost/boost/typeof/std/queue.hpp
+++ b/3party/boost/boost/typeof/std/queue.hpp
diff --git a/3party/boost/boost/typeof/std/set.hpp b/3party/boost/boost/typeof/std/set.hpp
index 6ff6311f61..6ff6311f61 100644..100755
--- a/3party/boost/boost/typeof/std/set.hpp
+++ b/3party/boost/boost/typeof/std/set.hpp
diff --git a/3party/boost/boost/typeof/std/sstream.hpp b/3party/boost/boost/typeof/std/sstream.hpp
index cb92dae3a7..cb92dae3a7 100644..100755
--- a/3party/boost/boost/typeof/std/sstream.hpp
+++ b/3party/boost/boost/typeof/std/sstream.hpp
diff --git a/3party/boost/boost/typeof/std/stack.hpp b/3party/boost/boost/typeof/std/stack.hpp
index 02826786d5..02826786d5 100644..100755
--- a/3party/boost/boost/typeof/std/stack.hpp
+++ b/3party/boost/boost/typeof/std/stack.hpp
diff --git a/3party/boost/boost/typeof/std/streambuf.hpp b/3party/boost/boost/typeof/std/streambuf.hpp
index dd89b88aea..dd89b88aea 100644..100755
--- a/3party/boost/boost/typeof/std/streambuf.hpp
+++ b/3party/boost/boost/typeof/std/streambuf.hpp
diff --git a/3party/boost/boost/typeof/std/string.hpp b/3party/boost/boost/typeof/std/string.hpp
index bcafff3bf6..bcafff3bf6 100644..100755
--- a/3party/boost/boost/typeof/std/string.hpp
+++ b/3party/boost/boost/typeof/std/string.hpp
diff --git a/3party/boost/boost/typeof/std/utility.hpp b/3party/boost/boost/typeof/std/utility.hpp
index 2647fb6ba5..2647fb6ba5 100644..100755
--- a/3party/boost/boost/typeof/std/utility.hpp
+++ b/3party/boost/boost/typeof/std/utility.hpp
diff --git a/3party/boost/boost/typeof/std/valarray.hpp b/3party/boost/boost/typeof/std/valarray.hpp
index 99d4eed1fc..99d4eed1fc 100644..100755
--- a/3party/boost/boost/typeof/std/valarray.hpp
+++ b/3party/boost/boost/typeof/std/valarray.hpp
diff --git a/3party/boost/boost/typeof/std/vector.hpp b/3party/boost/boost/typeof/std/vector.hpp
index 4a5be5f8c8..4a5be5f8c8 100644..100755
--- a/3party/boost/boost/typeof/std/vector.hpp
+++ b/3party/boost/boost/typeof/std/vector.hpp
diff --git a/3party/boost/boost/typeof/template_encoding.hpp b/3party/boost/boost/typeof/template_encoding.hpp
index bae7e89cf9..bae7e89cf9 100644..100755
--- a/3party/boost/boost/typeof/template_encoding.hpp
+++ b/3party/boost/boost/typeof/template_encoding.hpp
diff --git a/3party/boost/boost/typeof/template_template_param.hpp b/3party/boost/boost/typeof/template_template_param.hpp
index 4d64190052..4d64190052 100644..100755
--- a/3party/boost/boost/typeof/template_template_param.hpp
+++ b/3party/boost/boost/typeof/template_template_param.hpp
diff --git a/3party/boost/boost/typeof/type_encoding.hpp b/3party/boost/boost/typeof/type_encoding.hpp
index e0378c2335..e0378c2335 100644..100755
--- a/3party/boost/boost/typeof/type_encoding.hpp
+++ b/3party/boost/boost/typeof/type_encoding.hpp
diff --git a/3party/boost/boost/typeof/type_template_param.hpp b/3party/boost/boost/typeof/type_template_param.hpp
index 28a860c9fa..28a860c9fa 100644..100755
--- a/3party/boost/boost/typeof/type_template_param.hpp
+++ b/3party/boost/boost/typeof/type_template_param.hpp
diff --git a/3party/boost/boost/typeof/typeof_impl.hpp b/3party/boost/boost/typeof/typeof_impl.hpp
index d627b8505e..d627b8505e 100644..100755
--- a/3party/boost/boost/typeof/typeof_impl.hpp
+++ b/3party/boost/boost/typeof/typeof_impl.hpp
diff --git a/3party/boost/boost/typeof/vector.hpp b/3party/boost/boost/typeof/vector.hpp
index 7dc8d50f81..7dc8d50f81 100644..100755
--- a/3party/boost/boost/typeof/vector.hpp
+++ b/3party/boost/boost/typeof/vector.hpp
diff --git a/3party/boost/boost/typeof/vector100.hpp b/3party/boost/boost/typeof/vector100.hpp
index 5c5b97f34e..5c5b97f34e 100644..100755
--- a/3party/boost/boost/typeof/vector100.hpp
+++ b/3party/boost/boost/typeof/vector100.hpp
diff --git a/3party/boost/boost/typeof/vector150.hpp b/3party/boost/boost/typeof/vector150.hpp
index a7d7fb18c6..a7d7fb18c6 100644..100755
--- a/3party/boost/boost/typeof/vector150.hpp
+++ b/3party/boost/boost/typeof/vector150.hpp
diff --git a/3party/boost/boost/typeof/vector200.hpp b/3party/boost/boost/typeof/vector200.hpp
index 43860c363b..43860c363b 100644..100755
--- a/3party/boost/boost/typeof/vector200.hpp
+++ b/3party/boost/boost/typeof/vector200.hpp
diff --git a/3party/boost/boost/typeof/vector50.hpp b/3party/boost/boost/typeof/vector50.hpp
index d3beaff513..d3beaff513 100644..100755
--- a/3party/boost/boost/typeof/vector50.hpp
+++ b/3party/boost/boost/typeof/vector50.hpp
diff --git a/3party/boost/boost/unordered/detail/allocate.hpp b/3party/boost/boost/unordered/detail/allocate.hpp
index e07c708263..4c20b168ab 100644
--- a/3party/boost/boost/unordered/detail/allocate.hpp
+++ b/3party/boost/boost/unordered/detail/allocate.hpp
@@ -9,8 +9,9 @@
#ifndef BOOST_UNORDERED_ALLOCATE_HPP
#define BOOST_UNORDERED_ALLOCATE_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/unordered/detail/fwd.hpp>
@@ -234,9 +235,11 @@ namespace boost { namespace unordered { namespace detail {
#pragma warning(disable:4100) // unreferenced formal parameter
#endif
- template <class T>
- inline void destroy(T* x) {
- x->~T();
+ namespace func {
+ template <class T>
+ inline void destroy(T* x) {
+ x->~T();
+ }
}
#if defined(BOOST_MSVC)
@@ -257,13 +260,12 @@ namespace boost { namespace unordered { namespace detail {
template <typename T, unsigned int> struct expr_test;
template <typename T> struct expr_test<T, sizeof(char)> : T {};
- template <typename U> static char for_expr_test(U const&);
# define BOOST_UNORDERED_CHECK_EXPRESSION(count, result, expression) \
template <typename U> \
static typename boost::unordered::detail::expr_test< \
BOOST_PP_CAT(choice, result), \
- sizeof(boost::unordered::detail::for_expr_test(( \
+ sizeof(for_expr_test(( \
(expression), \
0)))>::type test( \
BOOST_PP_CAT(choice, count))
@@ -276,6 +278,7 @@ namespace boost { namespace unordered { namespace detail {
# define BOOST_UNORDERED_HAS_FUNCTION(name, thing, args, _) \
struct BOOST_PP_CAT(has_, name) \
{ \
+ template <typename U> static char for_expr_test(U const&); \
BOOST_UNORDERED_CHECK_EXPRESSION(1, 1, \
boost::unordered::detail::make< thing >().name args); \
BOOST_UNORDERED_DEFAULT_EXPRESSION(2, 2); \
@@ -473,6 +476,9 @@ namespace boost { namespace unordered { namespace detail {
# endif
+ namespace func
+ {
+
template <typename Alloc>
inline Alloc call_select_on_container_copy_construction(const Alloc& rhs,
typename boost::enable_if_c<
@@ -510,6 +516,8 @@ namespace boost { namespace unordered { namespace detail {
return (std::numeric_limits<SizeType>::max)();
}
+ } // namespace func.
+
template <typename Alloc>
struct allocator_traits
{
@@ -589,7 +597,7 @@ namespace boost { namespace unordered { namespace detail {
boost::unordered::detail::has_destroy<Alloc, T>::value>::type
destroy(Alloc&, T* p)
{
- boost::unordered::detail::destroy(p);
+ boost::unordered::detail::func::destroy(p);
}
# elif !defined(BOOST_NO_SFINAE_EXPR)
@@ -623,7 +631,7 @@ namespace boost { namespace unordered { namespace detail {
boost::unordered::detail::has_destroy<Alloc, T>::value>::type
destroy(Alloc&, T* p)
{
- boost::unordered::detail::destroy(p);
+ boost::unordered::detail::func::destroy(p);
}
# else
@@ -669,21 +677,22 @@ namespace boost { namespace unordered { namespace detail {
boost::is_same<T, value_type>::value,
void*>::type = 0)
{
- boost::unordered::detail::destroy(p);
+ boost::unordered::detail::func::destroy(p);
}
# endif
static size_type max_size(const Alloc& a)
{
- return boost::unordered::detail::call_max_size<size_type>(a);
+ return boost::unordered::detail::func::
+ call_max_size<size_type>(a);
}
// Allocator propagation on construction
static Alloc select_on_container_copy_construction(Alloc const& rhs)
{
- return boost::unordered::detail::
+ return boost::unordered::detail::func::
call_select_on_container_copy_construction(rhs);
}
@@ -758,7 +767,7 @@ namespace boost { namespace unordered { namespace detail {
#endif
-namespace boost { namespace unordered { namespace detail {
+namespace boost { namespace unordered { namespace detail { namespace func {
////////////////////////////////////////////////////////////////////////////
// call_construct
@@ -792,7 +801,7 @@ namespace boost { namespace unordered { namespace detail {
template <typename Alloc, typename T>
inline void destroy_value_impl(Alloc&, T* x) {
- boost::unordered::detail::destroy(x);
+ boost::unordered::detail::func::destroy(x);
}
@@ -802,7 +811,7 @@ namespace boost { namespace unordered { namespace detail {
template <typename Alloc, typename T>
inline void destroy_value_impl(Alloc&, T* x) {
- boost::unordered::detail::destroy(x);
+ boost::unordered::detail::func::destroy(x);
}
#endif
@@ -818,7 +827,7 @@ namespace boost { namespace unordered { namespace detail {
template<typename Alloc, typename T> \
void construct_from_tuple(Alloc& alloc, T* ptr, namespace_ tuple<>) \
{ \
- boost::unordered::detail::call_construct(alloc, ptr); \
+ boost::unordered::detail::func::call_construct(alloc, ptr); \
} \
\
BOOST_PP_REPEAT_FROM_TO(1, n, \
@@ -830,7 +839,7 @@ namespace boost { namespace unordered { namespace detail {
void construct_from_tuple(Alloc& alloc, T* ptr, \
namespace_ tuple<BOOST_PP_ENUM_PARAMS_Z(z, n, A)> const& x) \
{ \
- boost::unordered::detail::call_construct(alloc, ptr, \
+ boost::unordered::detail::func::call_construct(alloc, ptr, \
BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_GET_TUPLE_ARG, namespace_) \
); \
}
@@ -871,7 +880,7 @@ namespace boost { namespace unordered { namespace detail {
# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(n, namespace_) \
template<typename Alloc, typename T> \
void construct_from_tuple_impl( \
- boost::unordered::detail::length<0>, Alloc&, T* ptr, \
+ boost::unordered::detail::func::length<0>, Alloc&, T* ptr, \
namespace_ tuple<>) \
{ \
new ((void*) ptr) T(); \
@@ -884,7 +893,7 @@ namespace boost { namespace unordered { namespace detail {
template<typename Alloc, typename T, \
BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
void construct_from_tuple_impl( \
- boost::unordered::detail::length<n>, Alloc&, T* ptr, \
+ boost::unordered::detail::func::length<n>, Alloc&, T* ptr, \
namespace_ tuple<BOOST_PP_ENUM_PARAMS_Z(z, n, A)> const& x) \
{ \
new ((void*) ptr) T( \
@@ -913,7 +922,7 @@ BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, boost::)
void construct_from_tuple(Alloc& alloc, T* ptr, Tuple const& x)
{
construct_from_tuple_impl(
- boost::unordered::detail::length<
+ boost::unordered::detail::func::length<
boost::tuples::length<Tuple>::value>(),
alloc, ptr, x);
}
@@ -945,7 +954,7 @@ BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, boost::)
inline void construct_value_impl(Alloc& alloc, T* address,
BOOST_FWD_REF(Args)... args)
{
- boost::unordered::detail::call_construct(alloc,
+ boost::unordered::detail::func::call_construct(alloc,
address, boost::forward<Args>(args)...);
}
@@ -960,9 +969,9 @@ BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, boost::)
construct_value_impl(Alloc& alloc, std::pair<A, B>* address,
BOOST_FWD_REF(A0), BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2)
{
- boost::unordered::detail::construct_from_tuple(alloc,
+ boost::unordered::detail::func::construct_from_tuple(alloc,
boost::addressof(address->first), boost::forward<A1>(a1));
- boost::unordered::detail::construct_from_tuple(alloc,
+ boost::unordered::detail::func::construct_from_tuple(alloc,
boost::addressof(address->second), boost::forward<A2>(a2));
}
@@ -1032,19 +1041,15 @@ BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, boost::)
boost::unordered::detail::emplace_args3<A0, A1, A2> const& args,
typename enable_if<use_piecewise<A0>, void*>::type = 0)
{
- boost::unordered::detail::construct_from_tuple(alloc,
+ boost::unordered::detail::func::construct_from_tuple(alloc,
boost::addressof(address->first), args.a1);
- boost::unordered::detail::construct_from_tuple(alloc,
+ boost::unordered::detail::func::construct_from_tuple(alloc,
boost::addressof(address->second), args.a2);
}
#endif // BOOST_NO_CXX11_VARIADIC_TEMPLATES
-}}}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Some helper functions for allocating & constructing
+}}}}
namespace boost { namespace unordered { namespace detail {
@@ -1076,8 +1081,10 @@ namespace boost { namespace unordered { namespace detail {
~array_constructor() {
if (ptr_) {
- for(pointer p = ptr_; p != constructed_; ++p)
- traits::destroy(alloc_, boost::addressof(*p));
+ for(pointer p = ptr_; p != constructed_; ++p) {
+ boost::unordered::detail::func::destroy(
+ boost::addressof(*p));
+ }
traits::deallocate(alloc_, ptr_, length_);
}
@@ -1090,8 +1097,9 @@ namespace boost { namespace unordered { namespace detail {
length_ = l;
ptr_ = traits::allocate(alloc_, length_);
pointer end = ptr_ + static_cast<std::ptrdiff_t>(length_);
- for(constructed_ = ptr_; constructed_ != end; ++constructed_)
- traits::construct(alloc_, boost::addressof(*constructed_), v);
+ for(constructed_ = ptr_; constructed_ != end; ++constructed_) {
+ new ((void*) boost::addressof(*constructed_)) V(v);
+ }
}
pointer get() const
diff --git a/3party/boost/boost/unordered/detail/buckets.hpp b/3party/boost/boost/unordered/detail/buckets.hpp
index 653922418c..fd038b7b77 100644
--- a/3party/boost/boost/unordered/detail/buckets.hpp
+++ b/3party/boost/boost/unordered/detail/buckets.hpp
@@ -7,8 +7,9 @@
#ifndef BOOST_UNORDERED_DETAIL_MANAGER_HPP_INCLUDED
#define BOOST_UNORDERED_DETAIL_MANAGER_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/unordered/detail/util.hpp>
@@ -32,6 +33,10 @@ namespace boost { namespace unordered { namespace detail {
}}}
+// The 'iterator_detail' namespace was a misguided attempt at avoiding ADL
+// in the detail namespace. It didn't work because the template parameters
+// were in detail. I'm not changing it at the moment to be safe. I might
+// do in the future if I change the iterator types.
namespace boost { namespace unordered { namespace iterator_detail {
////////////////////////////////////////////////////////////////////////////
@@ -73,9 +78,9 @@ namespace boost { namespace unordered { namespace iterator_detail {
typedef typename Node::value_type value_type;
- l_iterator() : ptr_() {}
+ l_iterator() BOOST_NOEXCEPT : ptr_() {}
- l_iterator(iterator x, std::size_t b, std::size_t c)
+ l_iterator(iterator x, std::size_t b, std::size_t c) BOOST_NOEXCEPT
: ptr_(x.node_), bucket_(b), bucket_count_(c) {}
value_type& operator*() const {
@@ -100,11 +105,11 @@ namespace boost { namespace unordered { namespace iterator_detail {
return tmp;
}
- bool operator==(l_iterator x) const {
+ bool operator==(l_iterator x) const BOOST_NOEXCEPT {
return ptr_ == x.ptr_;
}
- bool operator!=(l_iterator x) const {
+ bool operator!=(l_iterator x) const BOOST_NOEXCEPT {
return ptr_ != x.ptr_;
}
};
@@ -132,13 +137,13 @@ namespace boost { namespace unordered { namespace iterator_detail {
typedef typename Node::value_type value_type;
- cl_iterator() : ptr_() {}
+ cl_iterator() BOOST_NOEXCEPT : ptr_() {}
- cl_iterator(iterator x, std::size_t b, std::size_t c) :
+ cl_iterator(iterator x, std::size_t b, std::size_t c) BOOST_NOEXCEPT :
ptr_(x.node_), bucket_(b), bucket_count_(c) {}
cl_iterator(boost::unordered::iterator_detail::l_iterator<
- Node, Policy> const& x) :
+ Node, Policy> const& x) BOOST_NOEXCEPT :
ptr_(x.ptr_), bucket_(x.bucket_), bucket_count_(x.bucket_count_)
{}
@@ -164,11 +169,15 @@ namespace boost { namespace unordered { namespace iterator_detail {
return tmp;
}
- friend bool operator==(cl_iterator const& x, cl_iterator const& y) {
+ friend bool operator==(cl_iterator const& x, cl_iterator const& y)
+ BOOST_NOEXCEPT
+ {
return x.ptr_ == y.ptr_;
}
- friend bool operator!=(cl_iterator const& x, cl_iterator const& y) {
+ friend bool operator!=(cl_iterator const& x, cl_iterator const& y)
+ BOOST_NOEXCEPT
+ {
return x.ptr_ != y.ptr_;
}
};
@@ -204,9 +213,9 @@ namespace boost { namespace unordered { namespace iterator_detail {
typedef typename Node::value_type value_type;
- iterator() : node_() {}
+ iterator() BOOST_NOEXCEPT : node_() {}
- explicit iterator(typename Node::link_pointer x) :
+ explicit iterator(typename Node::link_pointer x) BOOST_NOEXCEPT :
node_(static_cast<node_pointer>(x)) {}
value_type& operator*() const {
@@ -228,11 +237,11 @@ namespace boost { namespace unordered { namespace iterator_detail {
return tmp;
}
- bool operator==(iterator const& x) const {
+ bool operator==(iterator const& x) const BOOST_NOEXCEPT {
return node_ == x.node_;
}
- bool operator!=(iterator const& x) const {
+ bool operator!=(iterator const& x) const BOOST_NOEXCEPT {
return node_ != x.node_;
}
};
@@ -266,12 +275,12 @@ namespace boost { namespace unordered { namespace iterator_detail {
typedef typename Node::value_type value_type;
- c_iterator() : node_() {}
+ c_iterator() BOOST_NOEXCEPT : node_() {}
- explicit c_iterator(typename Node::link_pointer x) :
+ explicit c_iterator(typename Node::link_pointer x) BOOST_NOEXCEPT :
node_(static_cast<node_pointer>(x)) {}
- c_iterator(iterator const& x) : node_(x.node_) {}
+ c_iterator(iterator const& x) BOOST_NOEXCEPT : node_(x.node_) {}
value_type const& operator*() const {
return node_->value();
@@ -292,11 +301,15 @@ namespace boost { namespace unordered { namespace iterator_detail {
return tmp;
}
- friend bool operator==(c_iterator const& x, c_iterator const& y) {
+ friend bool operator==(c_iterator const& x, c_iterator const& y)
+ BOOST_NOEXCEPT
+ {
return x.node_ == y.node_;
}
- friend bool operator!=(c_iterator const& x, c_iterator const& y) {
+ friend bool operator!=(c_iterator const& x, c_iterator const& y)
+ BOOST_NOEXCEPT
+ {
return x.node_ != y.node_;
}
};
@@ -345,7 +358,7 @@ namespace boost { namespace unordered { namespace detail {
void construct_with_value(BOOST_UNORDERED_EMPLACE_ARGS)
{
construct();
- boost::unordered::detail::construct_value_impl(
+ boost::unordered::detail::func::construct_value_impl(
alloc_, node_->value_ptr(), BOOST_UNORDERED_EMPLACE_FORWARD);
value_constructed_ = true;
}
@@ -354,7 +367,7 @@ namespace boost { namespace unordered { namespace detail {
void construct_with_value2(BOOST_FWD_REF(A0) a0)
{
construct();
- boost::unordered::detail::construct_value_impl(
+ boost::unordered::detail::func::construct_value_impl(
alloc_, node_->value_ptr(),
BOOST_UNORDERED_EMPLACE_ARGS1(boost::forward<A0>(a0)));
value_constructed_ = true;
@@ -384,12 +397,12 @@ namespace boost { namespace unordered { namespace detail {
{
if (node_) {
if (value_constructed_) {
- boost::unordered::detail::destroy_value_impl(alloc_,
+ boost::unordered::detail::func::destroy_value_impl(alloc_,
node_->value_ptr());
}
if (node_constructed_) {
- node_allocator_traits::destroy(alloc_,
+ boost::unordered::detail::func::destroy(
boost::addressof(*node_));
}
@@ -406,8 +419,7 @@ namespace boost { namespace unordered { namespace detail {
node_ = node_allocator_traits::allocate(alloc_, 1);
- node_allocator_traits::construct(alloc_,
- boost::addressof(*node_), node());
+ new ((void*) boost::addressof(*node_)) node();
node_->init(node_);
node_constructed_ = true;
}
@@ -416,7 +428,7 @@ namespace boost { namespace unordered { namespace detail {
if (value_constructed_)
{
- boost::unordered::detail::destroy_value_impl(alloc_,
+ boost::unordered::detail::func::destroy_value_impl(alloc_,
node_->value_ptr());
value_constructed_ = false;
}
@@ -533,9 +545,9 @@ namespace boost { namespace unordered { namespace detail {
node_pointer p = nodes_;
nodes_ = static_cast<node_pointer>(p->next_);
- boost::unordered::detail::destroy_value_impl(this->alloc_,
+ boost::unordered::detail::func::destroy_value_impl(this->alloc_,
p->value_ptr());
- node_allocator_traits::destroy(this->alloc_, boost::addressof(*p));
+ boost::unordered::detail::func::destroy(boost::addressof(*p));
node_allocator_traits::deallocate(this->alloc_, p, 1);
}
}
@@ -653,11 +665,51 @@ namespace boost { namespace unordered { namespace detail {
typedef mix64_policy<std::size_t> type;
};
+ template <typename T>
struct pick_policy :
pick_policy_impl<
std::numeric_limits<std::size_t>::digits,
std::numeric_limits<std::size_t>::radix> {};
+ // While the mix policy is generally faster, the prime policy is a lot
+ // faster when a large number consecutive integers are used, because
+ // there are no collisions. Since that is probably quite common, use
+ // prime policy for integeral types. But not the smaller ones, as they
+ // don't have enough unique values for this to be an issue.
+
+ template <>
+ struct pick_policy<int> {
+ typedef prime_policy<std::size_t> type;
+ };
+
+ template <>
+ struct pick_policy<unsigned int> {
+ typedef prime_policy<std::size_t> type;
+ };
+
+ template <>
+ struct pick_policy<long> {
+ typedef prime_policy<std::size_t> type;
+ };
+
+ template <>
+ struct pick_policy<unsigned long> {
+ typedef prime_policy<std::size_t> type;
+ };
+
+ // TODO: Maybe not if std::size_t is smaller than long long.
+#if !defined(BOOST_NO_LONG_LONG)
+ template <>
+ struct pick_policy<long long> {
+ typedef prime_policy<std::size_t> type;
+ };
+
+ template <>
+ struct pick_policy<unsigned long long> {
+ typedef prime_policy<std::size_t> type;
+ };
+#endif
+
////////////////////////////////////////////////////////////////////////////
// Functions
@@ -715,20 +767,23 @@ namespace boost { namespace unordered { namespace detail {
new((void*) &funcs_[which]) function_pair(hf, eq);
}
- void construct(bool which, function_pair const& f)
+ void construct(bool which, function_pair const& f,
+ boost::unordered::detail::false_type =
+ boost::unordered::detail::false_type())
{
new((void*) &funcs_[which]) function_pair(f);
}
void construct(bool which, function_pair& f,
- boost::unordered::detail::move_tag m)
+ boost::unordered::detail::true_type)
{
- new((void*) &funcs_[which]) function_pair(f, m);
+ new((void*) &funcs_[which]) function_pair(f,
+ boost::unordered::detail::move_tag());
}
void destroy(bool which)
{
- boost::unordered::detail::destroy((function_pair*)(&funcs_[which]));
+ boost::unordered::detail::func::destroy((function_pair*)(&funcs_[which]));
}
public:
@@ -748,15 +803,12 @@ namespace boost { namespace unordered { namespace detail {
construct(current_, bf.current());
}
- functions(functions& bf, boost::unordered::detail::move_tag m)
+ functions(functions& bf, boost::unordered::detail::move_tag)
: current_(false)
{
- if (nothrow_move_constructible) {
- construct(current_, bf.current(), m);
- }
- else {
- construct(current_, bf.current());
- }
+ construct(current_, bf.current(),
+ boost::unordered::detail::integral_constant<bool,
+ nothrow_move_constructible>());
}
~functions() {
diff --git a/3party/boost/boost/unordered/detail/equivalent.hpp b/3party/boost/boost/unordered/detail/equivalent.hpp
index d1c688b88c..58478f99b6 100644
--- a/3party/boost/boost/unordered/detail/equivalent.hpp
+++ b/3party/boost/boost/unordered/detail/equivalent.hpp
@@ -7,8 +7,9 @@
#ifndef BOOST_UNORDERED_DETAIL_EQUIVALENT_HPP_INCLUDED
#define BOOST_UNORDERED_DETAIL_EQUIVALENT_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/unordered/detail/table.hpp>
@@ -51,15 +52,16 @@ namespace boost { namespace unordered { namespace detail {
template <typename T>
struct grouped_ptr_node :
- boost::unordered::detail::value_base<T>,
boost::unordered::detail::ptr_bucket
{
+ typedef T value_type;
typedef boost::unordered::detail::ptr_bucket bucket_base;
typedef grouped_ptr_node<T>* node_pointer;
typedef ptr_bucket* link_pointer;
node_pointer group_prev_;
std::size_t hash_;
+ boost::unordered::detail::value_base<T> value_base_;
grouped_ptr_node() :
bucket_base(),
@@ -72,6 +74,10 @@ namespace boost { namespace unordered { namespace detail {
group_prev_ = self;
}
+ void* address() { return value_base_.address(); }
+ value_type& value() { return value_base_.value(); }
+ value_type* value_ptr() { return value_base_.value_ptr(); }
+
private:
grouped_ptr_node& operator=(grouped_ptr_node const&);
};
@@ -145,7 +151,7 @@ namespace boost { namespace unordered { namespace detail {
typedef boost::unordered::detail::grouped_table_impl<types> table;
typedef boost::unordered::detail::set_extractor<value_type> extractor;
- typedef boost::unordered::detail::pick_policy::type policy;
+ typedef typename boost::unordered::detail::pick_policy<T>::type policy;
};
template <typename A, typename K, typename M, typename H, typename P>
@@ -170,7 +176,7 @@ namespace boost { namespace unordered { namespace detail {
typedef boost::unordered::detail::map_extractor<key_type, value_type>
extractor;
- typedef boost::unordered::detail::pick_policy::type policy;
+ typedef typename boost::unordered::detail::pick_policy<K>::type policy;
};
template <typename Types>
@@ -536,9 +542,9 @@ namespace boost { namespace unordered { namespace detail {
node_pointer first_node = static_cast<node_pointer>(prev->next_);
link_pointer end = first_node->group_prev_->next_;
- std::size_t count = this->delete_nodes(prev, end);
+ std::size_t deleted_count = this->delete_nodes(prev, end);
this->fix_bucket(bucket_index, prev);
- return count;
+ return deleted_count;
}
iterator erase(c_iterator r)
@@ -557,21 +563,21 @@ namespace boost { namespace unordered { namespace detail {
return iterator(r2.node_);
}
- link_pointer erase_nodes(node_pointer begin, node_pointer end)
+ link_pointer erase_nodes(node_pointer i, node_pointer j)
{
- std::size_t bucket_index = this->hash_to_bucket(begin->hash_);
+ std::size_t bucket_index = this->hash_to_bucket(i->hash_);
- // Split the groups containing 'begin' and 'end'.
- // And get the pointer to the node before begin while
+ // Split the groups containing 'i' and 'j'.
+ // And get the pointer to the node before i while
// we're at it.
- link_pointer prev = split_groups(begin, end);
+ link_pointer prev = split_groups(i, j);
- // If we don't have a 'prev' it means that begin is at the
+ // If we don't have a 'prev' it means that i is at the
// beginning of a block, so search through the blocks in the
// same bucket.
if (!prev) {
prev = this->get_previous_start(bucket_index);
- while (prev->next_ != begin)
+ while (prev->next_ != i)
prev = static_cast<node_pointer>(prev->next_)->group_prev_;
}
@@ -581,24 +587,24 @@ namespace boost { namespace unordered { namespace detail {
static_cast<node_pointer>(prev->next_)->group_prev_->next_;
this->delete_nodes(prev, group_end);
bucket_index = this->fix_bucket(bucket_index, prev);
- } while(prev->next_ != end);
+ } while(prev->next_ != j);
return prev;
}
- static link_pointer split_groups(node_pointer begin, node_pointer end)
+ static link_pointer split_groups(node_pointer i, node_pointer j)
{
- node_pointer prev = begin->group_prev_;
- if (prev->next_ != begin) prev = node_pointer();
+ node_pointer prev = i->group_prev_;
+ if (prev->next_ != i) prev = node_pointer();
- if (end) {
- node_pointer first = end;
- while (first != begin && first->group_prev_->next_ == first) {
+ if (j) {
+ node_pointer first = j;
+ while (first != i && first->group_prev_->next_ == first) {
first = first->group_prev_;
}
- boost::swap(first->group_prev_, end->group_prev_);
- if (first == begin) return prev;
+ boost::swap(first->group_prev_, j->group_prev_);
+ if (first == i) return prev;
}
if (prev) {
@@ -606,7 +612,7 @@ namespace boost { namespace unordered { namespace detail {
while (first->group_prev_->next_ == first) {
first = first->group_prev_;
}
- boost::swap(first->group_prev_, begin->group_prev_);
+ boost::swap(first->group_prev_, i->group_prev_);
}
return prev;
diff --git a/3party/boost/boost/unordered/detail/extract_key.hpp b/3party/boost/boost/unordered/detail/extract_key.hpp
index 60943d9b6c..d68a4a77ef 100644
--- a/3party/boost/boost/unordered/detail/extract_key.hpp
+++ b/3party/boost/boost/unordered/detail/extract_key.hpp
@@ -6,6 +6,11 @@
#ifndef BOOST_UNORDERED_DETAIL_EXTRACT_KEY_HPP_INCLUDED
#define BOOST_UNORDERED_DETAIL_EXTRACT_KEY_HPP_INCLUDED
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+
#include <boost/unordered/detail/table.hpp>
namespace boost {
@@ -56,19 +61,19 @@ namespace detail {
return no_key();
}
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
- template <class... Args>
- static no_key extract(Args const&...)
- {
- return no_key();
- }
-#else
template <class Arg>
static no_key extract(Arg const&)
{
return no_key();
}
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ template <class Arg1, class Arg2, class... Args>
+ static no_key extract(Arg1 const&, Arg2 const&, Args const&...)
+ {
+ return no_key();
+ }
+#else
template <class Arg1, class Arg2>
static no_key extract(Arg1 const&, Arg2 const&)
{
@@ -107,27 +112,27 @@ namespace detail {
return k;
}
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
- template <class... Args>
- static no_key extract(Args const&...)
+ static no_key extract()
{
return no_key();
}
-#else
- static no_key extract()
+ template <class Arg>
+ static no_key extract(Arg const&)
{
return no_key();
}
- template <class Arg>
- static no_key extract(Arg const&)
+ template <class Arg1, class Arg2>
+ static no_key extract(Arg1 const&, Arg2 const&)
{
return no_key();
}
- template <class Arg, class Arg1>
- static no_key extract(Arg const&, Arg1 const&)
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ template <class Arg1, class Arg2, class Arg3, class... Args>
+ static no_key extract(Arg1 const&, Arg2 const&, Arg3 const&,
+ Args const&...)
{
return no_key();
}
diff --git a/3party/boost/boost/unordered/detail/fwd.hpp b/3party/boost/boost/unordered/detail/fwd.hpp
index ee8966b755..87c2c23b04 100644
--- a/3party/boost/boost/unordered/detail/fwd.hpp
+++ b/3party/boost/boost/unordered/detail/fwd.hpp
@@ -6,11 +6,11 @@
#ifndef BOOST_UNORDERED_FWD_HPP_INCLUDED
#define BOOST_UNORDERED_FWD_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
-
namespace boost
{
namespace unordered
diff --git a/3party/boost/boost/unordered/detail/table.hpp b/3party/boost/boost/unordered/detail/table.hpp
index 84d1183dcc..7b4cc0ecb3 100644
--- a/3party/boost/boost/unordered/detail/table.hpp
+++ b/3party/boost/boost/unordered/detail/table.hpp
@@ -7,6 +7,11 @@
#ifndef BOOST_UNORDERED_DETAIL_ALL_HPP_INCLUDED
#define BOOST_UNORDERED_DETAIL_ALL_HPP_INCLUDED
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+
#include <boost/unordered/detail/buckets.hpp>
#include <boost/unordered/detail/util.hpp>
#include <boost/type_traits/aligned_storage.hpp>
@@ -257,9 +262,9 @@ namespace boost { namespace unordered { namespace detail {
return prev ? iterator(prev->next_) : iterator();
}
- std::size_t hash_to_bucket(std::size_t hash) const
+ std::size_t hash_to_bucket(std::size_t hash_value) const
{
- return policy::to_bucket(bucket_count_, hash);
+ return policy::to_bucket(bucket_count_, hash_value);
}
float load_factor() const
@@ -395,8 +400,8 @@ namespace boost { namespace unordered { namespace detail {
{
if (x.size_) {
create_buckets(bucket_count_);
- copy_nodes<node_allocator> copy(node_alloc());
- table_impl::fill_buckets(x.begin(), *this, copy);
+ copy_nodes<node_allocator> node_creator(node_alloc());
+ table_impl::fill_buckets(x.begin(), *this, node_creator);
}
}
@@ -409,9 +414,9 @@ namespace boost { namespace unordered { namespace detail {
// TODO: Could pick new bucket size?
create_buckets(bucket_count_);
- move_nodes<node_allocator> move(node_alloc());
+ move_nodes<node_allocator> node_creator(node_alloc());
node_holder<node_allocator> nodes(x);
- table_impl::fill_buckets(nodes.begin(), *this, move);
+ table_impl::fill_buckets(nodes.begin(), *this, node_creator);
}
}
@@ -456,6 +461,8 @@ namespace boost { namespace unordered { namespace detail {
void swap_allocators(table& other, false_type)
{
+ boost::unordered::detail::func::ignore_unused_variable_warning(other);
+
// According to 23.2.1.8, if propagate_on_container_swap is
// false the behaviour is undefined unless the allocators
// are equal.
@@ -514,10 +521,9 @@ namespace boost { namespace unordered { namespace detail {
node_pointer n = static_cast<node_pointer>(prev->next_);
prev->next_ = n->next_;
- boost::unordered::detail::destroy_value_impl(node_alloc(),
+ boost::unordered::detail::func::destroy_value_impl(node_alloc(),
n->value_ptr());
- node_allocator_traits::destroy(node_alloc(),
- boost::addressof(*n));
+ boost::unordered::detail::func::destroy(boost::addressof(*n));
node_allocator_traits::deallocate(node_alloc(), n, 1);
--size_;
}
@@ -544,7 +550,7 @@ namespace boost { namespace unordered { namespace detail {
if (bucket::extra_node) {
node_pointer n = static_cast<node_pointer>(
get_bucket(bucket_count_)->next_);
- node_allocator_traits::destroy(node_alloc(),
+ boost::unordered::detail::func::destroy(
boost::addressof(*n));
node_allocator_traits::deallocate(node_alloc(), n, 1);
}
@@ -581,7 +587,7 @@ namespace boost { namespace unordered { namespace detail {
bucket_pointer end = get_bucket(bucket_count_ + 1);
for(bucket_pointer it = buckets_; it != end; ++it)
{
- bucket_allocator_traits::destroy(bucket_alloc(),
+ boost::unordered::detail::func::destroy(
boost::addressof(*it));
}
@@ -653,8 +659,8 @@ namespace boost { namespace unordered { namespace detail {
// assign_nodes takes ownership of the container's elements,
// assigning to them if possible, and deleting any that are
// left over.
- assign_nodes<table> assign(*this);
- table_impl::fill_buckets(x.begin(), *this, assign);
+ assign_nodes<table> node_creator(*this);
+ table_impl::fill_buckets(x.begin(), *this, node_creator);
}
void assign(table const& x, true_type)
@@ -680,8 +686,8 @@ namespace boost { namespace unordered { namespace detail {
// Finally copy the elements.
if (x.size_) {
create_buckets(bucket_count_);
- copy_nodes<node_allocator> copy(node_alloc());
- table_impl::fill_buckets(x.begin(), *this, copy);
+ copy_nodes<node_allocator> node_creator(node_alloc());
+ table_impl::fill_buckets(x.begin(), *this, node_creator);
}
}
}
@@ -728,9 +734,9 @@ namespace boost { namespace unordered { namespace detail {
// 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<table> assign(*this);
+ move_assign_nodes<table> node_creator(*this);
node_holder<node_allocator> nodes(x);
- table_impl::fill_buckets(nodes.begin(), *this, assign);
+ table_impl::fill_buckets(nodes.begin(), *this, node_creator);
}
}
diff --git a/3party/boost/boost/unordered/detail/unique.hpp b/3party/boost/boost/unordered/detail/unique.hpp
index 4ea071b2d7..f76ca5a6a5 100644
--- a/3party/boost/boost/unordered/detail/unique.hpp
+++ b/3party/boost/boost/unordered/detail/unique.hpp
@@ -7,8 +7,9 @@
#ifndef BOOST_UNORDERED_DETAIL_UNIQUE_HPP_INCLUDED
#define BOOST_UNORDERED_DETAIL_UNIQUE_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/unordered/detail/table.hpp>
@@ -27,7 +28,9 @@ namespace boost { namespace unordered { namespace detail {
boost::unordered::detail::value_base<T>
{
typedef typename ::boost::unordered::detail::rebind_wrap<
- A, unique_node<A, T> >::type::pointer node_pointer;
+ A, unique_node<A, T> >::type allocator;
+ typedef typename ::boost::unordered::detail::
+ allocator_traits<allocator>::pointer node_pointer;
typedef node_pointer link_pointer;
link_pointer next_;
@@ -48,14 +51,15 @@ namespace boost { namespace unordered { namespace detail {
template <typename T>
struct ptr_node :
- boost::unordered::detail::value_base<T>,
boost::unordered::detail::ptr_bucket
{
+ typedef T value_type;
typedef boost::unordered::detail::ptr_bucket bucket_base;
typedef ptr_node<T>* node_pointer;
typedef ptr_bucket* link_pointer;
std::size_t hash_;
+ boost::unordered::detail::value_base<T> value_base_;
ptr_node() :
bucket_base(),
@@ -66,6 +70,10 @@ namespace boost { namespace unordered { namespace detail {
{
}
+ void* address() { return value_base_.address(); }
+ value_type& value() { return value_base_.value(); }
+ value_type* value_ptr() { return value_base_.value_ptr(); }
+
private:
ptr_node& operator=(ptr_node const&);
};
@@ -138,7 +146,7 @@ namespace boost { namespace unordered { namespace detail {
typedef boost::unordered::detail::table_impl<types> table;
typedef boost::unordered::detail::set_extractor<value_type> extractor;
- typedef boost::unordered::detail::pick_policy::type policy;
+ typedef typename boost::unordered::detail::pick_policy<T>::type policy;
};
template <typename A, typename K, typename M, typename H, typename P>
@@ -163,7 +171,7 @@ namespace boost { namespace unordered { namespace detail {
typedef boost::unordered::detail::map_extractor<key_type, value_type>
extractor;
- typedef boost::unordered::detail::pick_policy::type policy;
+ typedef typename boost::unordered::detail::pick_policy<K>::type policy;
};
template <typename Types>
@@ -334,8 +342,6 @@ namespace boost { namespace unordered { namespace detail {
value_type& operator[](key_type const& k)
{
- typedef typename value_type::second_type mapped_type;
-
std::size_t key_hash = this->hash(k);
iterator pos = this->find_node(key_hash, k);
@@ -531,9 +537,9 @@ namespace boost { namespace unordered { namespace detail {
link_pointer end = static_cast<node_pointer>(prev->next_)->next_;
- std::size_t count = this->delete_nodes(prev, end);
+ std::size_t deleted_count = this->delete_nodes(prev, end);
this->fix_bucket(bucket_index, prev);
- return count;
+ return deleted_count;
}
iterator erase(c_iterator r)
@@ -552,19 +558,19 @@ namespace boost { namespace unordered { namespace detail {
return iterator(r2.node_);
}
- void erase_nodes(node_pointer begin, node_pointer end)
+ void erase_nodes(node_pointer i, node_pointer j)
{
- std::size_t bucket_index = this->hash_to_bucket(begin->hash_);
+ std::size_t bucket_index = this->hash_to_bucket(i->hash_);
- // Find the node before begin.
+ // Find the node before i.
link_pointer prev = this->get_previous_start(bucket_index);
- while(prev->next_ != begin) prev = prev->next_;
+ while(prev->next_ != i) prev = prev->next_;
// Delete the nodes.
do {
this->delete_node(prev);
bucket_index = this->fix_bucket(bucket_index, prev);
- } while (prev->next_ != end);
+ } while (prev->next_ != j);
}
////////////////////////////////////////////////////////////////////////
diff --git a/3party/boost/boost/unordered/detail/util.hpp b/3party/boost/boost/unordered/detail/util.hpp
index a901477d19..3428ed7ae2 100644
--- a/3party/boost/boost/unordered/detail/util.hpp
+++ b/3party/boost/boost/unordered/detail/util.hpp
@@ -7,8 +7,9 @@
#ifndef BOOST_UNORDERED_DETAIL_UTIL_HPP_INCLUDED
#define BOOST_UNORDERED_DETAIL_UTIL_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/type_traits/is_convertible.hpp>
@@ -28,6 +29,11 @@ namespace boost { namespace unordered { namespace detail {
struct move_tag {};
struct empty_emplace {};
+ namespace func {
+ template <class T>
+ inline void ignore_unused_variable_warning(T const&) {}
+ }
+
////////////////////////////////////////////////////////////////////////////
// iterator SFINAE
diff --git a/3party/boost/boost/unordered/unordered_map.hpp b/3party/boost/boost/unordered/unordered_map.hpp
index 682e354420..9b180796d1 100644
--- a/3party/boost/boost/unordered/unordered_map.hpp
+++ b/3party/boost/boost/unordered/unordered_map.hpp
@@ -9,8 +9,9 @@
#ifndef BOOST_UNORDERED_UNORDERED_MAP_HPP_INCLUDED
#define BOOST_UNORDERED_UNORDERED_MAP_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/unordered/unordered_map_fwd.hpp>
@@ -117,11 +118,13 @@ namespace unordered
#if defined(BOOST_UNORDERED_USE_MOVE)
unordered_map(BOOST_RV_REF(unordered_map) other)
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
: table_(other.table_, boost::unordered::detail::move_tag())
{
}
#elif !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
unordered_map(unordered_map&& other)
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
: table_(other.table_, boost::unordered::detail::move_tag())
{
}
@@ -142,7 +145,7 @@ namespace unordered
// Destructor
- ~unordered_map();
+ ~unordered_map() BOOST_NOEXCEPT;
// Assign
@@ -598,11 +601,13 @@ namespace unordered
#if defined(BOOST_UNORDERED_USE_MOVE)
unordered_multimap(BOOST_RV_REF(unordered_multimap) other)
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
: table_(other.table_, boost::unordered::detail::move_tag())
{
}
#elif !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
unordered_multimap(unordered_multimap&& other)
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
: table_(other.table_, boost::unordered::detail::move_tag())
{
}
@@ -623,7 +628,7 @@ namespace unordered
// Destructor
- ~unordered_multimap();
+ ~unordered_multimap() BOOST_NOEXCEPT;
// Assign
@@ -1057,7 +1062,7 @@ namespace unordered
}
template <class K, class T, class H, class P, class A>
- unordered_map<K,T,H,P,A>::~unordered_map() {}
+ unordered_map<K,T,H,P,A>::~unordered_map() BOOST_NOEXCEPT {}
template <class K, class T, class H, class P, class A>
unordered_map<K,T,H,P,A>::unordered_map(
@@ -1390,7 +1395,7 @@ namespace unordered
}
template <class K, class T, class H, class P, class A>
- unordered_multimap<K,T,H,P,A>::~unordered_multimap() {}
+ unordered_multimap<K,T,H,P,A>::~unordered_multimap() BOOST_NOEXCEPT {}
template <class K, class T, class H, class P, class A>
unordered_multimap<K,T,H,P,A>::unordered_multimap(
diff --git a/3party/boost/boost/unordered/unordered_map_fwd.hpp b/3party/boost/boost/unordered/unordered_map_fwd.hpp
index 980bb3ee77..1eb26ce951 100644
--- a/3party/boost/boost/unordered/unordered_map_fwd.hpp
+++ b/3party/boost/boost/unordered/unordered_map_fwd.hpp
@@ -6,11 +6,11 @@
#ifndef BOOST_UNORDERED_MAP_FWD_HPP_INCLUDED
#define BOOST_UNORDERED_MAP_FWD_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
-#include <boost/config.hpp>
#include <memory>
#include <functional>
#include <boost/functional/hash_fwd.hpp>
diff --git a/3party/boost/boost/unordered/unordered_set.hpp b/3party/boost/boost/unordered/unordered_set.hpp
index 0ccf1b941d..853b5d7317 100644
--- a/3party/boost/boost/unordered/unordered_set.hpp
+++ b/3party/boost/boost/unordered/unordered_set.hpp
@@ -9,8 +9,9 @@
#ifndef BOOST_UNORDERED_UNORDERED_SET_HPP_INCLUDED
#define BOOST_UNORDERED_UNORDERED_SET_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/unordered/unordered_set_fwd.hpp>
@@ -115,11 +116,13 @@ namespace unordered
#if defined(BOOST_UNORDERED_USE_MOVE)
unordered_set(BOOST_RV_REF(unordered_set) other)
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
: table_(other.table_, boost::unordered::detail::move_tag())
{
}
#elif !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
unordered_set(unordered_set&& other)
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
: table_(other.table_, boost::unordered::detail::move_tag())
{
}
@@ -140,7 +143,7 @@ namespace unordered
// Destructor
- ~unordered_set();
+ ~unordered_set() BOOST_NOEXCEPT;
// Assign
@@ -582,11 +585,13 @@ namespace unordered
#if defined(BOOST_UNORDERED_USE_MOVE)
unordered_multiset(BOOST_RV_REF(unordered_multiset) other)
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
: table_(other.table_, boost::unordered::detail::move_tag())
{
}
#elif !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
unordered_multiset(unordered_multiset&& other)
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
: table_(other.table_, boost::unordered::detail::move_tag())
{
}
@@ -607,7 +612,7 @@ namespace unordered
// Destructor
- ~unordered_multiset();
+ ~unordered_multiset() BOOST_NOEXCEPT;
// Assign
@@ -1032,7 +1037,7 @@ namespace unordered
}
template <class T, class H, class P, class A>
- unordered_set<T,H,P,A>::~unordered_set() {}
+ unordered_set<T,H,P,A>::~unordered_set() BOOST_NOEXCEPT {}
template <class T, class H, class P, class A>
unordered_set<T,H,P,A>::unordered_set(
@@ -1316,7 +1321,7 @@ namespace unordered
}
template <class T, class H, class P, class A>
- unordered_multiset<T,H,P,A>::~unordered_multiset() {}
+ unordered_multiset<T,H,P,A>::~unordered_multiset() BOOST_NOEXCEPT {}
template <class T, class H, class P, class A>
unordered_multiset<T,H,P,A>::unordered_multiset(
diff --git a/3party/boost/boost/unordered/unordered_set_fwd.hpp b/3party/boost/boost/unordered/unordered_set_fwd.hpp
index 0c8b6d8d63..52b9e822f2 100644
--- a/3party/boost/boost/unordered/unordered_set_fwd.hpp
+++ b/3party/boost/boost/unordered/unordered_set_fwd.hpp
@@ -6,11 +6,11 @@
#ifndef BOOST_UNORDERED_SET_FWD_HPP_INCLUDED
#define BOOST_UNORDERED_SET_FWD_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
-#include <boost/config.hpp>
#include <memory>
#include <functional>
#include <boost/functional/hash_fwd.hpp>
diff --git a/3party/boost/boost/unordered_map.hpp b/3party/boost/boost/unordered_map.hpp
index 00d3c91c2a..92ef4d601a 100644
--- a/3party/boost/boost/unordered_map.hpp
+++ b/3party/boost/boost/unordered_map.hpp
@@ -9,8 +9,9 @@
#ifndef BOOST_UNORDERED_MAP_HPP_INCLUDED
#define BOOST_UNORDERED_MAP_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/unordered/unordered_map.hpp>
diff --git a/3party/boost/boost/unordered_set.hpp b/3party/boost/boost/unordered_set.hpp
index 98c3ce1d7d..1c83c02b28 100644
--- a/3party/boost/boost/unordered_set.hpp
+++ b/3party/boost/boost/unordered_set.hpp
@@ -9,8 +9,9 @@
#ifndef BOOST_UNORDERED_SET_HPP_INCLUDED
#define BOOST_UNORDERED_SET_HPP_INCLUDED
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
#endif
#include <boost/unordered/unordered_set.hpp>
diff --git a/3party/boost/boost/utility/addressof.hpp b/3party/boost/boost/utility/addressof.hpp
index ecb77764e6..db4da80421 100644
--- a/3party/boost/boost/utility/addressof.hpp
+++ b/3party/boost/boost/utility/addressof.hpp
@@ -1,102 +1,17 @@
-// Copyright (C) 2002 Brad King (brad.king@kitware.com)
-// Douglas Gregor (gregod@cs.rpi.edu)
-//
-// Copyright (C) 2002, 2008 Peter Dimov
-//
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// For more information, see http://www.boost.org
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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_UTILITY_ADDRESSOF_HPP
-# define BOOST_UTILITY_ADDRESSOF_HPP
-
-# include <boost/config.hpp>
-# include <boost/detail/workaround.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
-template<class T> struct addr_impl_ref
-{
- T & v_;
-
- inline addr_impl_ref( T & v ): v_( v ) {}
- inline operator T& () const { return v_; }
-
-private:
- addr_impl_ref & operator=(const addr_impl_ref &);
-};
-
-template<class T> struct addressof_impl
-{
- static inline T * f( T & v, long )
- {
- return reinterpret_cast<T*>(
- &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
- }
-
- static inline T * f( T * v, int )
- {
- return v;
- }
-};
-
-} // namespace detail
-
-template<class T> T * addressof( T & v )
-{
-#if (defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x610 ) ) ) || defined( __SUNPRO_CC )
-
- return boost::detail::addressof_impl<T>::f( v, 0 );
+#define BOOST_UTILITY_ADDRESSOF_HPP
-#else
+// The header file at this path is deprecated;
+// use boost/core/addressof.hpp instead.
- return boost::detail::addressof_impl<T>::f( boost::detail::addr_impl_ref<T>( v ), 0 );
+#include <boost/core/addressof.hpp>
#endif
-}
-
-#if defined( __SUNPRO_CC ) && BOOST_WORKAROUND( __SUNPRO_CC, BOOST_TESTED_AT( 0x590 ) )
-
-namespace detail
-{
-
-template<class T> struct addressof_addp
-{
- typedef T * type;
-};
-
-} // namespace detail
-
-template< class T, std::size_t N >
-typename detail::addressof_addp< T[N] >::type addressof( T (&t)[N] )
-{
- return &t;
-}
-
-#endif
-
-// Borland doesn't like casting an array reference to a char reference
-// but these overloads work around the problem.
-#if defined( __BORLANDC__ ) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
-template<typename T,std::size_t N>
-T (*addressof(T (&t)[N]))[N]
-{
- return reinterpret_cast<T(*)[N]>(&t);
-}
-
-template<typename T,std::size_t N>
-const T (*addressof(const T (&t)[N]))[N]
-{
- return reinterpret_cast<const T(*)[N]>(&t);
-}
-#endif
-
-} // namespace boost
-
-#endif // BOOST_UTILITY_ADDRESSOF_HPP
diff --git a/3party/boost/boost/utility/base_from_member.hpp b/3party/boost/boost/utility/base_from_member.hpp
index 04aabb59e2..fc0e13c0d7 100644
--- a/3party/boost/boost/utility/base_from_member.hpp
+++ b/3party/boost/boost/utility/base_from_member.hpp
@@ -1,6 +1,6 @@
// boost utility/base_from_member.hpp header file --------------------------//
-// Copyright 2001, 2003, 2004 Daryle Walker. Use, modification, and
+// Copyright 2001, 2003, 2004, 2012 Daryle Walker. Use, modification, and
// distribution are subject to the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or a copy at
// <http://www.boost.org/LICENSE_1_0.txt>.)
@@ -10,10 +10,15 @@
#ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP
#define BOOST_UTILITY_BASE_FROM_MEMBER_HPP
+#include <boost/config.hpp>
#include <boost/preprocessor/arithmetic/inc.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
// Base-from-member arity configuration macro ------------------------------//
@@ -53,6 +58,59 @@
namespace boost
{
+namespace detail
+{
+
+// Type-unmarking class template -------------------------------------------//
+
+// Type-trait to get the raw type, i.e. the type without top-level reference nor
+// cv-qualification, from a type expression. Mainly for function arguments, any
+// reference part is stripped first.
+
+// Contributed by Daryle Walker
+
+template < typename T >
+struct remove_cv_ref
+{
+ typedef typename ::boost::remove_cv<typename
+ ::boost::remove_reference<T>::type>::type type;
+
+}; // boost::detail::remove_cv_ref
+
+// Unmarked-type comparison class template ---------------------------------//
+
+// Type-trait to check if two type expressions have the same raw type.
+
+// Contributed by Daryle Walker, based on a work-around by Luc Danton
+
+template < typename T, typename U >
+struct is_related
+ : public ::boost::is_same<
+ typename ::boost::detail::remove_cv_ref<T>::type,
+ typename ::boost::detail::remove_cv_ref<U>::type >
+{};
+
+// Enable-if-on-unidentical-unmarked-type class template -------------------//
+
+// Enable-if on the first two type expressions NOT having the same raw type.
+
+// Contributed by Daryle Walker, based on a work-around by Luc Danton
+
+#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+template<typename ...T>
+struct enable_if_unrelated
+ : public ::boost::enable_if_c<true>
+{};
+
+template<typename T, typename U, typename ...U2>
+struct enable_if_unrelated<T, U, U2...>
+ : public ::boost::disable_if< ::boost::detail::is_related<T, U> >
+{};
+#endif
+
+} // namespace boost::detail
+
+
// Base-from-member class template -----------------------------------------//
// Helper to initialize a base object so a derived class can use this
@@ -68,12 +126,38 @@ class base_from_member
protected:
MemberType member;
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
+ !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
+ !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && \
+ !(defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 4))
+ template <typename ...T, typename EnableIf = typename
+ ::boost::detail::enable_if_unrelated<base_from_member, T...>::type>
+ explicit BOOST_CONSTEXPR base_from_member( T&& ...x )
+ BOOST_NOEXCEPT_IF( BOOST_NOEXCEPT_EXPR(::new ((void*) 0) MemberType(
+ static_cast<T&&>(x)... )) ) // no std::is_nothrow_constructible...
+ : member( static_cast<T&&>(x)... ) // ...nor std::forward needed
+ {}
+#else
base_from_member()
: member()
{}
BOOST_PP_REPEAT_FROM_TO( 1, BOOST_PP_INC(BOOST_BASE_FROM_MEMBER_MAX_ARITY),
BOOST_PRIVATE_CTR_DEF, _ )
+#endif
+
+}; // boost::base_from_member
+
+template < typename MemberType, int UniqueID >
+class base_from_member<MemberType&, UniqueID>
+{
+protected:
+ MemberType& member;
+
+ explicit BOOST_CONSTEXPR base_from_member( MemberType& x )
+ BOOST_NOEXCEPT
+ : member( x )
+ {}
}; // boost::base_from_member
diff --git a/3party/boost/boost/utility/declval.hpp b/3party/boost/boost/utility/declval.hpp
index d74610c584..a4ab2c8cb4 100644
--- a/3party/boost/boost/utility/declval.hpp
+++ b/3party/boost/boost/utility/declval.hpp
@@ -1,49 +1,44 @@
-// common_type.hpp ---------------------------------------------------------//
+// declval.hpp -------------------------------------------------------------//
// Copyright 2010 Vicente J. Botet Escriba
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
-#ifndef BOOST_TYPE_TRAITS_EXT_DECLVAL__HPP
-#define BOOST_TYPE_TRAITS_EXT_DECLVAL__HPP
+#ifndef BOOST_UTILITY_DECLVAL_HPP
+#define BOOST_UTILITY_DECLVAL_HPP
#include <boost/config.hpp>
//----------------------------------------------------------------------------//
#include <boost/type_traits/add_rvalue_reference.hpp>
-//#include <boost/type_traits/add_lvalue_reference.hpp>
//----------------------------------------------------------------------------//
// //
// C++03 implementation of //
+// 20.2.4 Function template declval [declval] //
// Written by Vicente J. Botet Escriba //
-//~ 20.3.4 Function template declval [declval]
-//~ 1 The library provides the function template declval to simplify the definition of expressions which occur as
-//~ unevaluated operands.
-//~ 2 Remarks: If this function is used, the program is ill-formed.
-//~ 3 Remarks: The template parameter T of declval may be an incomplete type.
-//~ [ Example:
-
-//~ template <class To, class From>
-//~ decltype(static_cast<To>(declval<From>())) convert(From&&);
-
-//~ declares a function template convert which only participats in overloading if the type From can be
-//~ explicitly converted to type To. For another example see class template common_type (20.7.6.6). —end
-//~ example ]
// //
+// 1 The library provides the function template declval to simplify the
+// definition of expressions which occur as unevaluated operands.
+// 2 Remarks: If this function is used, the program is ill-formed.
+// 3 Remarks: The template parameter T of declval may be an incomplete type.
+// [ Example:
+//
+// template <class To, class From>
+// decltype(static_cast<To>(declval<From>())) convert(From&&);
+//
+// declares a function template convert which only participates in overloading
+// if the type From can be explicitly converted to type To. For another example
+// see class template common_type (20.9.7.6). -end example ]
//----------------------------------------------------------------------------//
namespace boost {
-//#if !defined(BOOST_NO_RVALUE_REFERENCES)
template <typename T>
typename add_rvalue_reference<T>::type declval() BOOST_NOEXCEPT; // as unevaluated operand
-//#else
-// template <typename T>
-// typename add_lvalue_reference<T>::type declval() BOOST_NOEXCEPT; // as unevaluated operand
-//#endif
+
} // namespace boost
-#endif // BOOST_TYPE_TRAITS_EXT_DECLVAL__HPP
+#endif // BOOST_UTILITY_DECLVAL_HPP
diff --git a/3party/boost/boost/utility/detail/result_of_iterate.hpp b/3party/boost/boost/utility/detail/result_of_iterate.hpp
index 17fd4d59f9..5192172cfc 100644
--- a/3party/boost/boost/utility/detail/result_of_iterate.hpp
+++ b/3party/boost/boost/utility/detail/result_of_iterate.hpp
@@ -38,10 +38,25 @@ struct tr1_result_of<F(BOOST_RESULT_OF_ARGS)>
#endif
#ifdef BOOST_RESULT_OF_USE_DECLTYPE
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<F(BOOST_RESULT_OF_ARGS)>
+ : detail::cpp0x_result_of<F(BOOST_RESULT_OF_ARGS)> { };
+#endif // BOOST_RESULT_OF_USE_DECLTYPE
+
+#ifdef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<F(BOOST_RESULT_OF_ARGS)>
+ : mpl::if_<mpl::or_<detail::has_result_type<F>, detail::has_result<F> >,
+ tr1_result_of<F(BOOST_RESULT_OF_ARGS)>,
+ detail::cpp0x_result_of<F(BOOST_RESULT_OF_ARGS)> >::type { };
+#endif // BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
+
+#if defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK)
+
+namespace detail {
-// Uses declval following N3225 20.7.7.6 when F is not a pointer.
template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
-struct result_of<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))>
+struct cpp0x_result_of<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))>
: mpl::if_<
is_member_function_pointer<F>
, detail::tr1_result_of_impl<
@@ -54,8 +69,6 @@ struct result_of<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))>
>::type
{};
-namespace detail {
-
#ifdef BOOST_NO_SFINAE_EXPR
template<typename F>
@@ -139,7 +152,7 @@ struct cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)),
} // namespace detail
-#else // defined(BOOST_RESULT_OF_USE_DECLTYPE)
+#else // defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK)
#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
diff --git a/3party/boost/boost/utility/empty_deleter.hpp b/3party/boost/boost/utility/empty_deleter.hpp
new file mode 100644
index 0000000000..91bc47b816
--- /dev/null
+++ b/3party/boost/boost/utility/empty_deleter.hpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+/*!
+ * \file empty_deleter.hpp
+ * \author Andrey Semashev
+ * \date 22.04.2007
+ *
+ * This header contains an \c empty_deleter implementation. This is an empty
+ * function object that receives a pointer and does nothing with it.
+ * Such empty deletion strategy may be convenient, for example, when
+ * constructing <tt>shared_ptr</tt>s that point to some object that should not be
+ * deleted (i.e. a variable on the stack or some global singleton, like <tt>std::cout</tt>).
+ */
+
+#ifndef BOOST_UTILITY_EMPTY_DELETER_HPP
+#define BOOST_UTILITY_EMPTY_DELETER_HPP
+
+#include <boost/config.hpp>
+#include <boost/core/null_deleter.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(__GNUC__)
+#pragma message "This header is deprecated, use boost/core/null_deleter.hpp instead."
+#elif defined(_MSC_VER)
+#pragma message("This header is deprecated, use boost/core/null_deleter.hpp instead.")
+#endif
+
+namespace boost {
+
+//! A deprecated name for \c null_deleter
+typedef null_deleter empty_deleter;
+
+} // namespace boost
+
+#endif // BOOST_UTILITY_EMPTY_DELETER_HPP
diff --git a/3party/boost/boost/utility/enable_if.hpp b/3party/boost/boost/utility/enable_if.hpp
index d292c6a7b0..803bfca5e2 100644
--- a/3party/boost/boost/utility/enable_if.hpp
+++ b/3party/boost/boost/utility/enable_if.hpp
@@ -1,119 +1,17 @@
-// Boost enable_if library
-
-// Copyright 2003 (c) The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
-// Jeremiah Willcock (jewillco at osl.iu.edu)
-// Andrew Lumsdaine (lums at osl.iu.edu)
-
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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_UTILITY_ENABLE_IF_HPP
#define BOOST_UTILITY_ENABLE_IF_HPP
-#include "boost/config.hpp"
-
-// Even the definition of enable_if causes problems on some compilers,
-// so it's macroed out for all compilers that do not support SFINAE
-
-#ifndef BOOST_NO_SFINAE
-
-namespace boost
-{
-
- template <bool B, class T = void>
- struct enable_if_c {
- typedef T type;
- };
-
- template <class T>
- struct enable_if_c<false, T> {};
-
- template <class Cond, class T = void>
- struct enable_if : public enable_if_c<Cond::value, T> {};
-
- template <bool B, class T>
- struct lazy_enable_if_c {
- typedef typename T::type type;
- };
-
- template <class T>
- struct lazy_enable_if_c<false, T> {};
-
- template <class Cond, class T>
- struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};
-
-
- template <bool B, class T = void>
- struct disable_if_c {
- typedef T type;
- };
-
- template <class T>
- struct disable_if_c<true, T> {};
-
- template <class Cond, class T = void>
- struct disable_if : public disable_if_c<Cond::value, T> {};
-
- template <bool B, class T>
- struct lazy_disable_if_c {
- typedef typename T::type type;
- };
-
- template <class T>
- struct lazy_disable_if_c<true, T> {};
-
- template <class Cond, class T>
- struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};
-
-} // namespace boost
-
-#else
-
-namespace boost {
-
- namespace detail { typedef void enable_if_default_T; }
-
- template <typename T>
- struct enable_if_does_not_work_on_this_compiler;
-
- template <bool B, class T = detail::enable_if_default_T>
- struct enable_if_c : enable_if_does_not_work_on_this_compiler<T>
- { };
-
- template <bool B, class T = detail::enable_if_default_T>
- struct disable_if_c : enable_if_does_not_work_on_this_compiler<T>
- { };
-
- template <bool B, class T = detail::enable_if_default_T>
- struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler<T>
- { };
-
- template <bool B, class T = detail::enable_if_default_T>
- struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler<T>
- { };
-
- template <class Cond, class T = detail::enable_if_default_T>
- struct enable_if : enable_if_does_not_work_on_this_compiler<T>
- { };
-
- template <class Cond, class T = detail::enable_if_default_T>
- struct disable_if : enable_if_does_not_work_on_this_compiler<T>
- { };
-
- template <class Cond, class T = detail::enable_if_default_T>
- struct lazy_enable_if : enable_if_does_not_work_on_this_compiler<T>
- { };
-
- template <class Cond, class T = detail::enable_if_default_T>
- struct lazy_disable_if : enable_if_does_not_work_on_this_compiler<T>
- { };
-
-} // namespace boost
+// The header file at this path is deprecated;
+// use boost/core/enable_if.hpp instead.
-#endif // BOOST_NO_SFINAE
+#include <boost/core/enable_if.hpp>
#endif
diff --git a/3party/boost/boost/utility/explicit_operator_bool.hpp b/3party/boost/boost/utility/explicit_operator_bool.hpp
new file mode 100644
index 0000000000..9b625cd689
--- /dev/null
+++ b/3party/boost/boost/utility/explicit_operator_bool.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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_UTILITY_EXPLICIT_OPERATOR_BOOL_HPP
+#define BOOST_UTILITY_EXPLICIT_OPERATOR_BOOL_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/explicit_operator_bool.hpp instead.
+
+#include <boost/core/explicit_operator_bool.hpp>
+
+#endif
diff --git a/3party/boost/boost/utility/in_place_factory.hpp b/3party/boost/boost/utility/in_place_factory.hpp
index f84b003c70..1a62ace10a 100644
--- a/3party/boost/boost/utility/in_place_factory.hpp
+++ b/3party/boost/boost/utility/in_place_factory.hpp
@@ -48,15 +48,13 @@ public:
{}
template<class T>
- void* apply(void* address
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) const
+ void* apply(void* address) const
{
return new(address) T( BOOST_PP_ENUM_PARAMS(N, m_a) );
}
template<class T>
- void* apply(void* address, std::size_t n
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) const
+ void* apply(void* address, std::size_t n) const
{
for(char* next = address = this->BOOST_NESTED_TEMPLATE apply<T>(address);
!! --n;)
diff --git a/3party/boost/boost/utility/result_of.hpp b/3party/boost/boost/utility/result_of.hpp
index 97e96188f8..206ae3088a 100644
--- a/3party/boost/boost/utility/result_of.hpp
+++ b/3party/boost/boost/utility/result_of.hpp
@@ -38,18 +38,27 @@
// Use the decltype-based version of result_of by default if the compiler
// supports N3276 <http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf>.
-// 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.
+// The user can force the choice by defining BOOST_RESULT_OF_USE_DECLTYPE,
+// BOOST_RESULT_OF_USE_TR1, or BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK but not more than one!
+#if (defined(BOOST_RESULT_OF_USE_DECLTYPE) && defined(BOOST_RESULT_OF_USE_TR1)) || \
+ (defined(BOOST_RESULT_OF_USE_DECLTYPE) && defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK)) || \
+ (defined(BOOST_RESULT_OF_USE_TR1) && defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK))
+# error More than one of BOOST_RESULT_OF_USE_DECLTYPE, BOOST_RESULT_OF_USE_TR1 and \
+ BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK cannot be defined at the same time.
+#endif
+
+#if defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK) && defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE)
+# error Cannot fallback to decltype if BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE is not defined.
#endif
#ifndef BOOST_RESULT_OF_USE_TR1
# ifndef BOOST_RESULT_OF_USE_DECLTYPE
-# ifndef BOOST_NO_CXX11_DECLTYPE_N3276 // this implies !defined(BOOST_NO_CXX11_DECLTYPE)
-# define BOOST_RESULT_OF_USE_DECLTYPE
-# else
-# define BOOST_RESULT_OF_USE_TR1
+# ifndef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
+# ifndef BOOST_NO_CXX11_DECLTYPE_N3276 // this implies !defined(BOOST_NO_CXX11_DECLTYPE)
+# define BOOST_RESULT_OF_USE_DECLTYPE
+# else
+# define BOOST_RESULT_OF_USE_TR1
+# endif
# endif
# endif
#endif
@@ -59,13 +68,20 @@ namespace boost {
template<typename F> struct result_of;
template<typename F> struct tr1_result_of; // a TR1-style implementation of result_of
-#if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#if !defined(BOOST_NO_SFINAE)
namespace detail {
BOOST_MPL_HAS_XXX_TRAIT_DEF(result_type)
+// Work around a nvcc bug by only defining has_result when it's needed.
+#ifdef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
+BOOST_MPL_HAS_XXX_TEMPLATE_DEF(result)
+#endif
+
template<typename F, typename FArgs, bool HasResultType> struct tr1_result_of_impl;
+template<typename F> struct cpp0x_result_of;
+
#ifdef BOOST_NO_SFINAE_EXPR
// There doesn't seem to be any other way to turn this off such that the presence of
diff --git a/3party/boost/boost/utility/swap.hpp b/3party/boost/boost/utility/swap.hpp
index 6845e7965b..dd9ecd9070 100644
--- a/3party/boost/boost/utility/swap.hpp
+++ b/3party/boost/boost/utility/swap.hpp
@@ -1,55 +1,17 @@
-// Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker
-//
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-// For more information, see http://www.boost.org
-
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * 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_UTILITY_SWAP_HPP
#define BOOST_UTILITY_SWAP_HPP
-// Note: the implementation of this utility contains various workarounds:
-// - swap_impl is put outside the boost namespace, to avoid infinite
-// recursion (causing stack overflow) when swapping objects of a primitive
-// type.
-// - swap_impl has a using-directive, rather than a using-declaration,
-// because some compilers (including MSVC 7.1, Borland 5.9.3, and
-// Intel 8.1) don't do argument-dependent lookup when it has a
-// using-declaration instead.
-// - boost::swap has two template arguments, instead of one, to
-// avoid ambiguity when swapping objects of a Boost type that does
-// not have its own boost::swap overload.
-
-#include <algorithm> //for std::swap
-#include <cstddef> //for std::size_t
-
-namespace boost_swap_impl
-{
- template<class T>
- void swap_impl(T& left, T& right)
- {
- using namespace std;//use std::swap if argument dependent lookup fails
- swap(left,right);
- }
-
- template<class T, std::size_t N>
- void swap_impl(T (& left)[N], T (& right)[N])
- {
- for (std::size_t i = 0; i < N; ++i)
- {
- ::boost_swap_impl::swap_impl(left[i], right[i]);
- }
- }
-}
+// The header file at this path is deprecated;
+// use boost/core/swap.hpp instead.
-namespace boost
-{
- template<class T1, class T2>
- void swap(T1& left, T2& right)
- {
- ::boost_swap_impl::swap_impl(left, right);
- }
-}
+#include <boost/core/swap.hpp>
#endif
diff --git a/3party/boost/boost/utility/value_init.hpp b/3party/boost/boost/utility/value_init.hpp
index 5de958575e..9d8de70733 100644
--- a/3party/boost/boost/utility/value_init.hpp
+++ b/3party/boost/boost/utility/value_init.hpp
@@ -33,7 +33,6 @@
#ifdef BOOST_MSVC
#pragma warning(push)
-#if _MSC_VER >= 1310
// It is safe to ignore the following warning from MSVC 7.1 or higher:
// "warning C4351: new behavior: elements of array will be default initialized"
#pragma warning(disable: 4351)
@@ -41,7 +40,6 @@
// a const type: "warning C4512: assignment operator could not be generated".
#pragma warning(disable: 4512)
#endif
-#endif
#ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION
// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
@@ -73,12 +71,14 @@ class initialized
#endif
remove_const<T>::type data;
+ BOOST_GPU_ENABLED
wrapper()
:
data()
{
}
+ BOOST_GPU_ENABLED
wrapper(T const & arg)
:
data(arg)
@@ -92,6 +92,7 @@ class initialized
#endif
aligned_storage<sizeof(wrapper), alignment_of<wrapper>::value>::type x;
+ BOOST_GPU_ENABLED
wrapper * wrapper_address() const
{
return static_cast<wrapper *>( static_cast<void*>(&x));
@@ -99,6 +100,7 @@ class initialized
public :
+ BOOST_GPU_ENABLED
initialized()
{
#if BOOST_DETAIL_VALUE_INIT_WORKAROUND
@@ -107,16 +109,19 @@ class initialized
new (wrapper_address()) wrapper();
}
+ BOOST_GPU_ENABLED
initialized(initialized const & arg)
{
new (wrapper_address()) wrapper( static_cast<wrapper const &>(*(arg.wrapper_address())));
}
+ BOOST_GPU_ENABLED
explicit initialized(T const & arg)
{
new (wrapper_address()) wrapper(arg);
}
+ BOOST_GPU_ENABLED
initialized & operator=(initialized const & arg)
{
// Assignment is only allowed when T is non-const.
@@ -125,31 +130,37 @@ class initialized
return *this;
}
+ BOOST_GPU_ENABLED
~initialized()
{
wrapper_address()->wrapper::~wrapper();
}
+ BOOST_GPU_ENABLED
T const & data() const
{
return wrapper_address()->data;
}
+ BOOST_GPU_ENABLED
T& data()
{
return wrapper_address()->data;
}
+ BOOST_GPU_ENABLED
void swap(initialized & arg)
{
::boost::swap( this->data(), arg.data() );
}
+ BOOST_GPU_ENABLED
operator T const &() const
{
return wrapper_address()->data;
}
+ BOOST_GPU_ENABLED
operator T&()
{
return wrapper_address()->data;
@@ -158,18 +169,21 @@ class initialized
} ;
template<class T>
+BOOST_GPU_ENABLED
T const& get ( initialized<T> const& x )
{
return x.data() ;
}
template<class T>
+BOOST_GPU_ENABLED
T& get ( initialized<T>& x )
{
return x.data() ;
}
template<class T>
+BOOST_GPU_ENABLED
void swap ( initialized<T> & lhs, initialized<T> & rhs )
{
lhs.swap(rhs) ;
@@ -185,31 +199,37 @@ class value_initialized
public :
+ BOOST_GPU_ENABLED
value_initialized()
:
m_data()
{ }
+ BOOST_GPU_ENABLED
T const & data() const
{
return m_data.data();
}
+ BOOST_GPU_ENABLED
T& data()
{
return m_data.data();
}
+ BOOST_GPU_ENABLED
void swap(value_initialized & arg)
{
m_data.swap(arg.m_data);
}
+ BOOST_GPU_ENABLED
operator T const &() const
{
return m_data;
}
+ BOOST_GPU_ENABLED
operator T&()
{
return m_data;
@@ -218,18 +238,21 @@ class value_initialized
template<class T>
+BOOST_GPU_ENABLED
T const& get ( value_initialized<T> const& x )
{
return x.data() ;
}
template<class T>
+BOOST_GPU_ENABLED
T& get ( value_initialized<T>& x )
{
return x.data() ;
}
template<class T>
+BOOST_GPU_ENABLED
void swap ( value_initialized<T> & lhs, value_initialized<T> & rhs )
{
lhs.swap(rhs) ;
@@ -240,7 +263,7 @@ class initialized_value_t
{
public :
- template <class T> operator T() const
+ template <class T> BOOST_GPU_ENABLED operator T() const
{
return initialized<T>().data();
}
diff --git a/3party/boost/boost/uuid/detail/config.hpp b/3party/boost/boost/uuid/detail/config.hpp
new file mode 100644
index 0000000000..997f882131
--- /dev/null
+++ b/3party/boost/boost/uuid/detail/config.hpp
@@ -0,0 +1,62 @@
+/*
+ * Copyright Andrey Semashev 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file uuid/detail/config.hpp
+ *
+ * \brief This header defines configuration macros for Boost.UUID.
+ */
+
+#ifndef BOOST_UUID_DETAIL_CONFIG_HPP_INCLUDED_
+#define BOOST_UUID_DETAIL_CONFIG_HPP_INCLUDED_
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if !defined(BOOST_UUID_NO_SIMD)
+
+#if defined(__GNUC__) && defined(__SSE2__)
+
+// GCC and its pretenders go here
+#ifndef BOOST_UUID_USE_SSE2
+#define BOOST_UUID_USE_SSE2
+#endif
+
+#if defined(__SSE3__) && !defined(BOOST_UUID_USE_SSE3)
+#define BOOST_UUID_USE_SSE3
+#endif
+
+#if defined(__SSE4_1__) && !defined(BOOST_UUID_USE_SSE41)
+#define BOOST_UUID_USE_SSE41
+#endif
+
+#elif defined(_MSC_VER) && (defined(_M_X64) || (defined(_M_IX86) && defined(_M_IX86_FP) && _M_IX86_FP >= 2))
+
+#ifndef BOOST_UUID_USE_SSE2
+#define BOOST_UUID_USE_SSE2
+#endif
+
+#elif !defined(BOOST_UUID_USE_SSE41) && !defined(BOOST_UUID_USE_SSE3) && !defined(BOOST_UUID_USE_SSE2)
+
+#define BOOST_UUID_NO_SIMD
+
+#endif
+
+// More advanced ISA extensions imply less advanced are also available
+#if !defined(BOOST_UUID_USE_SSE3) && defined(BOOST_UUID_USE_SSE41)
+#define BOOST_UUID_USE_SSE3
+#endif
+
+#if !defined(BOOST_UUID_USE_SSE2) && defined(BOOST_UUID_USE_SSE3)
+#define BOOST_UUID_USE_SSE2
+#endif
+
+#endif // !defined(BOOST_UUID_NO_SIMD)
+
+#endif // BOOST_UUID_DETAIL_CONFIG_HPP_INCLUDED_
diff --git a/3party/boost/boost/uuid/detail/uuid_generic.hpp b/3party/boost/boost/uuid/detail/uuid_generic.hpp
new file mode 100644
index 0000000000..1c4d775541
--- /dev/null
+++ b/3party/boost/boost/uuid/detail/uuid_generic.hpp
@@ -0,0 +1,51 @@
+/*
+ * Copyright Andy Tompkins 2006.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file uuid/detail/uuid_generic.hpp
+ *
+ * \brief This header contains generic implementation of \c boost::uuid operations.
+ */
+
+#ifndef BOOST_UUID_DETAIL_UUID_GENERIC_HPP_INCLUDED_
+#define BOOST_UUID_DETAIL_UUID_GENERIC_HPP_INCLUDED_
+
+#include <string.h>
+
+namespace boost {
+namespace uuids {
+
+inline bool uuid::is_nil() const BOOST_NOEXCEPT
+{
+ for (std::size_t i = 0; i < sizeof(data); ++i)
+ {
+ if (data[i] != 0U)
+ return false;
+ }
+ return true;
+}
+
+inline void uuid::swap(uuid& rhs) BOOST_NOEXCEPT
+{
+ uuid tmp = *this;
+ *this = rhs;
+ rhs = tmp;
+}
+
+inline bool operator== (uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT
+{
+ return memcmp(lhs.data, rhs.data, sizeof(lhs.data)) == 0;
+}
+
+inline bool operator< (uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT
+{
+ return memcmp(lhs.data, rhs.data, sizeof(lhs.data)) < 0;
+}
+
+} // namespace uuids
+} // namespace boost
+
+#endif // BOOST_UUID_DETAIL_UUID_GENERIC_HPP_INCLUDED_
diff --git a/3party/boost/boost/uuid/detail/uuid_x86.hpp b/3party/boost/boost/uuid/detail/uuid_x86.hpp
new file mode 100644
index 0000000000..1a329b02cc
--- /dev/null
+++ b/3party/boost/boost/uuid/detail/uuid_x86.hpp
@@ -0,0 +1,109 @@
+/*
+ * Copyright Andrey Semashev 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file uuid/detail/uuid_x86.hpp
+ *
+ * \brief This header contains optimized SSE implementation of \c boost::uuid operations.
+ */
+
+#ifndef BOOST_UUID_DETAIL_UUID_X86_HPP_INCLUDED_
+#define BOOST_UUID_DETAIL_UUID_X86_HPP_INCLUDED_
+
+// MSVC does not always have immintrin.h (at least, not up to MSVC 10), so include the appropriate header for each instruction set
+#if defined(BOOST_UUID_USE_SSE41)
+#include <smmintrin.h>
+#elif defined(BOOST_UUID_USE_SSE3)
+#include <pmmintrin.h>
+#else
+#include <emmintrin.h>
+#endif
+
+namespace boost {
+namespace uuids {
+namespace detail {
+
+BOOST_FORCEINLINE __m128i load_unaligned_si128(const uint8_t* p) BOOST_NOEXCEPT
+{
+#if defined(BOOST_UUID_USE_SSE3)
+ return _mm_lddqu_si128(reinterpret_cast< const __m128i* >(p));
+#else
+ return _mm_loadu_si128(reinterpret_cast< const __m128i* >(p));
+#endif
+}
+
+} // namespace detail
+
+inline bool uuid::is_nil() const BOOST_NOEXCEPT
+{
+ register __m128i mm = uuids::detail::load_unaligned_si128(data);
+#if defined(BOOST_UUID_USE_SSE41)
+ return _mm_test_all_zeros(mm, mm) != 0;
+#else
+ mm = _mm_cmpeq_epi8(mm, _mm_setzero_si128());
+ return _mm_movemask_epi8(mm) == 0xFFFF;
+#endif
+}
+
+inline void uuid::swap(uuid& rhs) BOOST_NOEXCEPT
+{
+ register __m128i mm_this = uuids::detail::load_unaligned_si128(data);
+ register __m128i mm_rhs = uuids::detail::load_unaligned_si128(rhs.data);
+ _mm_storeu_si128(reinterpret_cast< __m128i* >(rhs.data), mm_this);
+ _mm_storeu_si128(reinterpret_cast< __m128i* >(data), mm_rhs);
+}
+
+inline bool operator== (uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT
+{
+ register __m128i mm_left = uuids::detail::load_unaligned_si128(lhs.data);
+ register __m128i mm_right = uuids::detail::load_unaligned_si128(rhs.data);
+
+ register __m128i mm_cmp = _mm_cmpeq_epi32(mm_left, mm_right);
+#if defined(BOOST_UUID_USE_SSE41)
+ return _mm_test_all_ones(mm_cmp);
+#else
+ return _mm_movemask_epi8(mm_cmp) == 0xFFFF;
+#endif
+}
+
+inline bool operator< (uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT
+{
+ register __m128i mm_left = uuids::detail::load_unaligned_si128(lhs.data);
+ register __m128i mm_right = uuids::detail::load_unaligned_si128(rhs.data);
+
+ // To emulate lexicographical_compare behavior we have to perform two comparisons - the forward and reverse one.
+ // Then we know which bytes are equivalent and which ones are different, and for those different the comparison results
+ // will be opposite. Then we'll be able to find the first differing comparison result (for both forward and reverse ways),
+ // and depending on which way it is for, this will be the result of the operation. There are a few notes to consider:
+ //
+ // 1. Due to little endian byte order the first bytes go into the lower part of the xmm registers,
+ // so the comparison results in the least significant bits will actually be the most signigicant for the final operation result.
+ // This means we have to determine which of the comparison results have the least significant bit on, and this is achieved with
+ // the "(x - 1) ^ x" trick.
+ // 2. Because there is only signed comparison in SSE/AVX, we have to invert byte comparison results whenever signs of the corresponding
+ // bytes are different. I.e. in signed comparison it's -1 < 1, but in unsigned it is the opposite (255 > 1). To do that we XOR left and right,
+ // making the most significant bit of each byte 1 if the signs are different, and later apply this mask with another XOR to the comparison results.
+ // 3. pcmpgtw compares for "greater" relation, so we swap the arguments to get what we need.
+
+ const __m128i mm_signs_mask = _mm_xor_si128(mm_left, mm_right);
+
+ __m128i mm_cmp = _mm_cmpgt_epi8(mm_right, mm_left), mm_rcmp = _mm_cmpgt_epi8(mm_left, mm_right);
+
+ mm_cmp = _mm_xor_si128(mm_signs_mask, mm_cmp);
+ mm_rcmp = _mm_xor_si128(mm_signs_mask, mm_rcmp);
+
+ uint32_t cmp = static_cast< uint32_t >(_mm_movemask_epi8(mm_cmp)), rcmp = static_cast< uint32_t >(_mm_movemask_epi8(mm_rcmp));
+
+ cmp = (cmp - 1u) ^ cmp;
+ rcmp = (rcmp - 1u) ^ rcmp;
+
+ return static_cast< uint16_t >(cmp) < static_cast< uint16_t >(rcmp);
+}
+
+} // namespace uuids
+} // namespace boost
+
+#endif // BOOST_UUID_DETAIL_UUID_X86_HPP_INCLUDED_
diff --git a/3party/boost/boost/uuid/name_generator.hpp b/3party/boost/boost/uuid/name_generator.hpp
index fe582b4583..2e5d8c16d8 100644
--- a/3party/boost/boost/uuid/name_generator.hpp
+++ b/3party/boost/boost/uuid/name_generator.hpp
@@ -30,8 +30,8 @@ class name_generator {
public:
typedef uuid result_type;
- explicit name_generator(uuid const& namespace_uuid)
- : namespace_uuid(namespace_uuid)
+ explicit name_generator(uuid const& namespace_uuid_)
+ : namespace_uuid(namespace_uuid_)
{}
uuid operator()(const char* name) {
@@ -71,10 +71,10 @@ private:
for (size_t i=0; i<count; i++) {
uint32_t c = characters[i];
- sha.process_byte( (c >> 0) & 0xFF );
- sha.process_byte( (c >> 8) & 0xFF );
- sha.process_byte( (c >> 16) & 0xFF );
- sha.process_byte( (c >> 24) & 0xFF );
+ sha.process_byte(static_cast<unsigned char>((c >> 0) & 0xFF));
+ sha.process_byte(static_cast<unsigned char>((c >> 8) & 0xFF));
+ sha.process_byte(static_cast<unsigned char>((c >> 16) & 0xFF));
+ sha.process_byte(static_cast<unsigned char>((c >> 24) & 0xFF));
}
}
@@ -96,10 +96,10 @@ private:
uuid u;
for (int i=0; i<4; ++i) {
- *(u.begin() + i*4+0) = ((digest[i] >> 24) & 0xFF);
- *(u.begin() + i*4+1) = ((digest[i] >> 16) & 0xFF);
- *(u.begin() + i*4+2) = ((digest[i] >> 8) & 0xFF);
- *(u.begin() + i*4+3) = ((digest[i] >> 0) & 0xFF);
+ *(u.begin() + i*4+0) = static_cast<uint8_t>((digest[i] >> 24) & 0xFF);
+ *(u.begin() + i*4+1) = static_cast<uint8_t>((digest[i] >> 16) & 0xFF);
+ *(u.begin() + i*4+2) = static_cast<uint8_t>((digest[i] >> 8) & 0xFF);
+ *(u.begin() + i*4+3) = static_cast<uint8_t>((digest[i] >> 0) & 0xFF);
}
// set variant
diff --git a/3party/boost/boost/uuid/uuid.hpp b/3party/boost/boost/uuid/uuid.hpp
index 2678d856c0..d8593c0f75 100644
--- a/3party/boost/boost/uuid/uuid.hpp
+++ b/3party/boost/boost/uuid/uuid.hpp
@@ -28,20 +28,23 @@
// 28 Nov 2009 - disabled deprecated warnings for MSVC
// 30 Nov 2009 - used BOOST_STATIC_CONSTANT
// 02 Dec 2009 - removed BOOST_STATIC_CONSTANT - not all compilers like it
+// 29 Apr 2013 - added support for noexcept and constexpr, added optimizations for SSE/AVX
#ifndef BOOST_UUID_HPP
#define BOOST_UUID_HPP
-#include <boost/config.hpp>
-#include <stddef.h>
+#include <cstddef>
#include <boost/cstdint.hpp>
-#include <algorithm>
-#include <boost/config.hpp> // for static assert
+#include <boost/uuid/detail/config.hpp>
#ifndef BOOST_UUID_NO_TYPE_TRAITS
#include <boost/type_traits/is_pod.hpp>
#include <boost/type_traits/integral_constant.hpp>
#endif
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
#if defined(_MSC_VER)
#pragma warning(push) // Save warning settings.
#pragma warning(disable : 4996) // Disable deprecated std::swap_ranges, std::equal
@@ -69,28 +72,20 @@ public:
typedef std::ptrdiff_t difference_type;
// This does not work on some compilers
- // They seem to want the variable definec in
+ // They seem to want the variable definec in
// a cpp file
//BOOST_STATIC_CONSTANT(size_type, static_size = 16);
- static size_type static_size() { return 16; }
+ static BOOST_CONSTEXPR size_type static_size() BOOST_NOEXCEPT { return 16; }
public:
- iterator begin() { return data; } /* throw() */
- const_iterator begin() const { return data; } /* throw() */
- iterator end() { return data+size(); } /* throw() */
- const_iterator end() const { return data+size(); } /* throw() */
+ iterator begin() BOOST_NOEXCEPT { return data; }
+ const_iterator begin() const BOOST_NOEXCEPT { return data; }
+ iterator end() BOOST_NOEXCEPT { return data+size(); }
+ const_iterator end() const BOOST_NOEXCEPT { return data+size(); }
- size_type size() const { return static_size(); } /* throw() */
+ BOOST_CONSTEXPR size_type size() const BOOST_NOEXCEPT { return static_size(); }
- bool is_nil() const /* throw() */
- {
- for(size_t i=0; i<static_size(); i++) {
- if (data[i] != 0U) {
- return false;
- }
- }
- return true;
- }
+ bool is_nil() const BOOST_NOEXCEPT;
enum variant_type
{
@@ -99,7 +94,7 @@ public:
variant_microsoft, // Microsoft Corporation backward compatibility
variant_future // future definition
};
- variant_type variant() const /* throw() */
+ variant_type variant() const BOOST_NOEXCEPT
{
// variant is stored in octet 7
// which is index 8, since indexes count backwards
@@ -115,8 +110,8 @@ public:
return variant_future;
}
}
-
- enum version_type
+
+ enum version_type
{
version_unknown = -1,
version_time_based = 1,
@@ -125,11 +120,11 @@ public:
version_random_number_based = 4,
version_name_based_sha1 = 5
};
- version_type version() const /* throw() */
+ version_type version() const BOOST_NOEXCEPT
{
- //version is stored in octet 9
+ // version is stored in octet 9
// which is index 6, since indexes count backwards
- unsigned char octet9 = data[6];
+ uint8_t octet9 = data[6];
if ( (octet9 & 0xF0) == 0x10 ) {
return version_time_based;
} else if ( (octet9 & 0xF0) == 0x20 ) {
@@ -146,55 +141,45 @@ public:
}
// note: linear complexity
- void swap(uuid& rhs) /* throw() */
- {
- std::swap_ranges(begin(), end(), rhs.begin());
- }
+ void swap(uuid& rhs) BOOST_NOEXCEPT;
public:
// or should it be array<uint8_t, 16>
uint8_t data[16];
};
-inline bool operator==(uuid const& lhs, uuid const& rhs) /* throw() */
-{
- return std::equal(lhs.begin(), lhs.end(), rhs.begin());
-}
+bool operator== (uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT;
+bool operator< (uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT;
-inline bool operator!=(uuid const& lhs, uuid const& rhs) /* throw() */
+inline bool operator!=(uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT
{
return !(lhs == rhs);
}
-inline bool operator<(uuid const& lhs, uuid const& rhs) /* throw() */
-{
- return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
-}
-
-inline bool operator>(uuid const& lhs, uuid const& rhs) /* throw() */
+inline bool operator>(uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT
{
return rhs < lhs;
}
-inline bool operator<=(uuid const& lhs, uuid const& rhs) /* throw() */
+inline bool operator<=(uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT
{
return !(rhs < lhs);
}
-inline bool operator>=(uuid const& lhs, uuid const& rhs) /* throw() */
+inline bool operator>=(uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT
{
return !(lhs < rhs);
}
-inline void swap(uuid& lhs, uuid& rhs) /* throw() */
+inline void swap(uuid& lhs, uuid& rhs) BOOST_NOEXCEPT
{
lhs.swap(rhs);
}
// This is equivalent to boost::hash_range(u.begin(), u.end());
-inline std::size_t hash_value(uuid const& u) /* throw() */
+inline std::size_t hash_value(uuid const& u) BOOST_NOEXCEPT
{
std::size_t seed = 0;
- for(uuid::const_iterator i=u.begin(); i != u.end(); ++i)
+ for(uuid::const_iterator i=u.begin(), e=u.end(); i != e; ++i)
{
seed ^= static_cast<std::size_t>(*i) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}
@@ -214,6 +199,12 @@ struct is_pod<uuids::uuid> : true_type {};
} // namespace boost
#endif
+#if defined(BOOST_UUID_USE_SSE2)
+#include <boost/uuid/detail/uuid_x86.hpp>
+#else
+#include <boost/uuid/detail/uuid_generic.hpp>
+#endif
+
#if defined(_MSC_VER)
#pragma warning(pop) // Restore warnings to previous state.
#endif
diff --git a/3party/boost/boost/uuid/uuid_io.hpp b/3party/boost/boost/uuid/uuid_io.hpp
index 592a5094df..1d30618aea 100644
--- a/3party/boost/boost/uuid/uuid_io.hpp
+++ b/3party/boost/boost/uuid/uuid_io.hpp
@@ -59,7 +59,7 @@ template <typename ch, typename char_traits>
}
if (flags & std::ios_base::left) {
- for (std::streamsize i=uuid_width; i<width; i++) {
+ for (std::streamsize s=uuid_width; s<width; s++) {
os << fill;
}
}
diff --git a/3party/boost/boost/variant/bad_visit.hpp b/3party/boost/boost/variant/bad_visit.hpp
index ca53940e4d..e07657eab5 100644
--- a/3party/boost/boost/variant/bad_visit.hpp
+++ b/3party/boost/boost/variant/bad_visit.hpp
@@ -28,7 +28,7 @@ struct bad_visit
{
public: // std::exception interface
- virtual const char * what() const throw()
+ virtual const char * what() const BOOST_NOEXCEPT_OR_NOTHROW
{
return "boost::bad_visit: "
"failed visitation using boost::apply_visitor";
diff --git a/3party/boost/boost/variant/detail/apply_visitor_binary.hpp b/3party/boost/boost/variant/detail/apply_visitor_binary.hpp
index f1c1fb62d7..5cc9430352 100644
--- a/3party/boost/boost/variant/detail/apply_visitor_binary.hpp
+++ b/3party/boost/boost/variant/detail/apply_visitor_binary.hpp
@@ -52,7 +52,7 @@ private: // representation
public: // structors
- apply_visitor_binary_invoke(Visitor& visitor, Value1& value1)
+ apply_visitor_binary_invoke(Visitor& visitor, Value1& value1) BOOST_NOEXCEPT
: visitor_(visitor)
, value1_(value1)
{
@@ -87,7 +87,7 @@ private: // representation
public: // structors
- apply_visitor_binary_unwrap(Visitor& visitor, Visitable2& visitable2)
+ apply_visitor_binary_unwrap(Visitor& visitor, Visitable2& visitable2) BOOST_NOEXCEPT
: visitor_(visitor)
, visitable2_(visitable2)
{
@@ -156,8 +156,6 @@ apply_visitor(
// const-visitor version:
//
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
template <typename Visitor, typename Visitable1, typename Visitable2>
inline
BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(
@@ -175,8 +173,6 @@ apply_visitor(
return boost::apply_visitor(unwrapper, visitable1);
}
-#endif // MSVC7 and below exclusion
-
} // namespace boost
#endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_BINARY_HPP
diff --git a/3party/boost/boost/variant/detail/apply_visitor_delayed.hpp b/3party/boost/boost/variant/detail/apply_visitor_delayed.hpp
index 5f5642bf93..034b39b7ed 100644
--- a/3party/boost/boost/variant/detail/apply_visitor_delayed.hpp
+++ b/3party/boost/boost/variant/detail/apply_visitor_delayed.hpp
@@ -49,7 +49,7 @@ private: // representation
public: // structors
- explicit apply_visitor_delayed_t(Visitor& visitor)
+ explicit apply_visitor_delayed_t(Visitor& visitor) BOOST_NOEXCEPT
: visitor_(visitor)
{
}
diff --git a/3party/boost/boost/variant/detail/apply_visitor_unary.hpp b/3party/boost/boost/variant/detail/apply_visitor_unary.hpp
index 64199d8d37..5c28d32997 100644
--- a/3party/boost/boost/variant/detail/apply_visitor_unary.hpp
+++ b/3party/boost/boost/variant/detail/apply_visitor_unary.hpp
@@ -66,8 +66,6 @@ apply_visitor(Visitor& visitor, Visitable& visitable)
// const-visitor version:
//
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
template <typename Visitor, typename Visitable>
inline
BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
@@ -76,8 +74,6 @@ apply_visitor(const Visitor& visitor, Visitable& visitable)
return visitable.apply_visitor(visitor);
}
-#endif // MSVC7 and below exclusion
-
} // namespace boost
#endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP
diff --git a/3party/boost/boost/variant/detail/backup_holder.hpp b/3party/boost/boost/variant/detail/backup_holder.hpp
index 5da7bddfe9..1ccf160ce7 100644
--- a/3party/boost/boost/variant/detail/backup_holder.hpp
+++ b/3party/boost/boost/variant/detail/backup_holder.hpp
@@ -28,7 +28,7 @@ private: // representation
public: // structors
- ~backup_holder()
+ ~backup_holder() BOOST_NOEXCEPT
{
delete backup_;
}
@@ -63,12 +63,12 @@ public: // modifiers
public: // queries
- T& get()
+ T& get() BOOST_NOEXCEPT
{
return *backup_;
}
- const T& get() const
+ const T& get() const BOOST_NOEXCEPT
{
return *backup_;
}
diff --git a/3party/boost/boost/variant/detail/cast_storage.hpp b/3party/boost/boost/variant/detail/cast_storage.hpp
index f23f174163..24feed6bd2 100644
--- a/3party/boost/boost/variant/detail/cast_storage.hpp
+++ b/3party/boost/boost/variant/detail/cast_storage.hpp
@@ -25,19 +25,13 @@ namespace detail { namespace variant {
//
template <typename T>
-inline T& cast_storage(
- void* storage
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)
- )
+inline T& cast_storage(void* storage)
{
return *static_cast<T*>(storage);
}
template <typename T>
-inline const T& cast_storage(
- const void* storage
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)
- )
+inline const T& cast_storage(const void* storage)
{
return *static_cast<const T*>(storage);
}
diff --git a/3party/boost/boost/variant/detail/config.hpp b/3party/boost/boost/variant/detail/config.hpp
index eb18201fb6..84564a46b1 100644
--- a/3party/boost/boost/variant/detail/config.hpp
+++ b/3party/boost/boost/variant/detail/config.hpp
@@ -21,7 +21,6 @@
//
#if BOOST_WORKAROUND(__MWERKS__, <= 0x3201) \
|| BOOST_WORKAROUND(BOOST_INTEL, <= 700) \
- || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
&& !defined(BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING)
# define BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING
#endif
diff --git a/3party/boost/boost/variant/detail/enable_recursive.hpp b/3party/boost/boost/variant/detail/enable_recursive.hpp
index 76bd7c7065..a974b4f078 100644
--- a/3party/boost/boost/variant/detail/enable_recursive.hpp
+++ b/3party/boost/boost/variant/detail/enable_recursive.hpp
@@ -78,7 +78,6 @@ public:
// See boost/variant/detail/enable_recursive_fwd.hpp for more information.
//
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename T, typename RecursiveVariant, typename NoWrapper>
struct enable_recursive
@@ -112,34 +111,6 @@ public: // metafunction result
};
-#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-template <typename T, typename RecursiveVariant, typename NoWrapper>
-struct enable_recursive
-{
-private: // helpers, for metafunction result (below)
-
- typedef typename BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL(
- T, RecursiveVariant, ::boost::recursive_variant_
- )::type t_;
-
-public: // metafunction result
-
- // [Wrap with recursive_wrapper only if rebind really changed something:]
- typedef typename mpl::if_<
- mpl::or_<
- NoWrapper
- , is_same< t_,T >
- , is_reference<t_>
- , is_pointer<t_>
- >
- , t_
- , boost::recursive_wrapper<t_>
- >::type type;
-
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
///////////////////////////////////////////////////////////////////////////////
// (detail) metafunction class quoted_enable_recursive
diff --git a/3party/boost/boost/variant/detail/enable_recursive_fwd.hpp b/3party/boost/boost/variant/detail/enable_recursive_fwd.hpp
index 3336c1f76a..39a6b71463 100644
--- a/3party/boost/boost/variant/detail/enable_recursive_fwd.hpp
+++ b/3party/boost/boost/variant/detail/enable_recursive_fwd.hpp
@@ -17,11 +17,7 @@
#include "boost/mpl/bool_fwd.hpp"
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
# include "boost/mpl/bool.hpp"
-#else
-# include "boost/type_traits/is_base_and_derived.hpp"
-#endif
namespace boost {
namespace detail { namespace variant {
@@ -32,7 +28,6 @@ namespace detail { namespace variant {
// Signifies that the variant should perform recursive substituion.
//
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename T>
struct recursive_flag
@@ -40,20 +35,6 @@ struct recursive_flag
typedef T type;
};
-#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-struct recursive_flag_tag
-{
-};
-
-template <typename T>
-struct recursive_flag
- : recursive_flag_tag
-{
- typedef T type;
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
///////////////////////////////////////////////////////////////////////////////
// (detail) metafunction is_recursive_flag
@@ -61,7 +42,6 @@ struct recursive_flag
// Signifies that the variant should perform recursive substituion.
//
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename T>
struct is_recursive_flag
@@ -75,15 +55,6 @@ struct is_recursive_flag< recursive_flag<T> >
{
};
-#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-template <typename T>
-struct is_recursive_flag
- : is_base_and_derived< recursive_flag_tag,T >
-{
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
///////////////////////////////////////////////////////////////////////////////
// (detail) metafunction enable_recursive
diff --git a/3party/boost/boost/variant/detail/forced_return.hpp b/3party/boost/boost/variant/detail/forced_return.hpp
index cc1f25b59f..522b796fe0 100644
--- a/3party/boost/boost/variant/detail/forced_return.hpp
+++ b/3party/boost/boost/variant/detail/forced_return.hpp
@@ -17,10 +17,6 @@
#include "boost/variant/detail/generic_result_type.hpp"
#include "boost/assert.hpp"
-#if !defined(BOOST_MSVC) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-# include "boost/type_traits/remove_reference.hpp"
-#endif
-
namespace boost {
namespace detail { namespace variant {
@@ -32,24 +28,22 @@ namespace detail { namespace variant {
//
#if !defined(BOOST_MSVC) \
- && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
&& !defined(BOOST_NO_VOID_RETURNS)
// "standard" implementation:
template <typename T>
-inline T forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) )
+inline T forced_return()
{
// logical error: should never be here! (see above)
BOOST_ASSERT(false);
- typedef typename boost::remove_reference<T>::type basic_type;
- basic_type* dummy = 0;
- return *static_cast< basic_type* >(dummy);
+ T (*dummy_function_ptr)() = 0;
+ return dummy_function_ptr();
}
template <>
-inline void forced_return<void>( BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(void) )
+inline void forced_return<void>()
{
// logical error: should never be here! (see above)
BOOST_ASSERT(false);
@@ -66,7 +60,7 @@ inline void forced_return<void>( BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(void) )
template <typename T>
inline
BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T)
-forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) )
+forced_return()
{
// logical error: should never be here! (see above)
BOOST_ASSERT(false);
@@ -77,6 +71,8 @@ forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) )
#else // defined(BOOST_MSVC)
+# pragma warning( push )
+# pragma warning( disable : 4702 ) // unreachable code
// msvc-specific implementation
//
// Leverages __declspec(noreturn) for optimized implementation.
@@ -88,7 +84,7 @@ inline void forced_return_no_return() {};
template <typename T>
inline
BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T)
-forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) )
+forced_return()
{
// logical error: should never be here! (see above)
BOOST_ASSERT(false);
@@ -96,6 +92,8 @@ forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) )
forced_return_no_return();
}
+# pragma warning( pop )
+
#endif // BOOST_MSVC optimization
}} // namespace detail::variant
diff --git a/3party/boost/boost/variant/detail/hash_variant.hpp b/3party/boost/boost/variant/detail/hash_variant.hpp
index cecb396447..958662ec69 100644
--- a/3party/boost/boost/variant/detail/hash_variant.hpp
+++ b/3party/boost/boost/variant/detail/hash_variant.hpp
@@ -14,7 +14,7 @@
#ifndef BOOST_HASH_VARIANT_FUNCTION_HPP
#define BOOST_HASH_VARIANT_FUNCTION_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/variant/detail/initializer.hpp b/3party/boost/boost/variant/detail/initializer.hpp
index 7673385d86..f6f425e9b0 100644
--- a/3party/boost/boost/variant/detail/initializer.hpp
+++ b/3party/boost/boost/variant/detail/initializer.hpp
@@ -152,12 +152,12 @@ public: // static functions
#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
-# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
+ // Obsolete. Remove.
#define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS \
BOOST_VARIANT_ENUM_PARAMS(typename recursive_enabled_T) \
/**/
+ // Obsolete. Remove.
#define BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \
typedef typename unwrap_recursive< \
BOOST_PP_CAT(recursive_enabled_T,N) \
@@ -167,25 +167,18 @@ public: // static functions
>::param_type BOOST_PP_CAT(param_T,N); \
/**/
-# else // MSVC7 and below
-
- #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS \
- BOOST_VARIANT_ENUM_PARAMS(typename recursive_enabled_T) \
- , BOOST_VARIANT_ENUM_PARAMS(typename param_T) \
- /**/
-
- #define BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \
- /**/
-
-# endif // MSVC7 and below workaround
-
-template < BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS >
+template < BOOST_VARIANT_ENUM_PARAMS(typename recursive_enabled_T) >
struct preprocessor_list_initializer
{
public: // static functions
#define BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION(z,N,_) \
- BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \
+ typedef typename unwrap_recursive< \
+ BOOST_PP_CAT(recursive_enabled_T,N) \
+ >::type BOOST_PP_CAT(public_T,N); \
+ typedef typename call_traits< \
+ BOOST_PP_CAT(public_T,N) \
+ >::param_type BOOST_PP_CAT(param_T,N); \
static int initialize( \
void* dest \
, BOOST_PP_CAT(param_T,N) operand \
@@ -210,22 +203,6 @@ public: // static functions
};
-# if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
-
-#if !defined(BOOST_VARIANT_AUX_ECHO)
-# define BOOST_VARIANT_AUX_ECHO(z,N,token) token
-#endif
-
-template <>
-struct preprocessor_list_initializer<
- BOOST_PP_ENUM(BOOST_VARIANT_LIMIT_TYPES, BOOST_VARIANT_AUX_ECHO, int)
- , BOOST_PP_ENUM(BOOST_VARIANT_LIMIT_TYPES, BOOST_VARIANT_AUX_ECHO, const int)
- >
-{
-};
-
-# endif // BOOST_MPL_CFG_MSVC_60_ETI_BUG workaround
-
#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround
}} // namespace detail::variant
@@ -256,34 +233,14 @@ struct preprocessor_list_initializer<
#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
-# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
+ // Obsolete. Remove.
#define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \
BOOST_VARIANT_ENUM_PARAMS(typename_base) \
/**/
-# else // MSVC7 and below
-
- #define BOOST_VARIANT_AUX_PP_INITIALIZER_ENUM_PARAM_TYPE(z,N,T) \
- ::boost::call_traits< \
- ::boost::unwrap_recursive<BOOST_PP_CAT(T,N)>::type \
- >::param_type \
- /**/
-
- #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \
- BOOST_VARIANT_ENUM_PARAMS(typename_base) \
- , BOOST_PP_ENUM( \
- BOOST_VARIANT_LIMIT_TYPES \
- , BOOST_VARIANT_AUX_PP_INITIALIZER_ENUM_PARAM_TYPE \
- , typename_base \
- ) \
- /**/
-
-# endif // MSVC7 workaround
-
#define BOOST_VARIANT_AUX_INITIALIZER_T( mpl_seq, typename_base ) \
::boost::detail::variant::preprocessor_list_initializer< \
- BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \
+ BOOST_VARIANT_ENUM_PARAMS(typename_base) \
> \
/**/
diff --git a/3party/boost/boost/variant/detail/make_variant_list.hpp b/3party/boost/boost/variant/detail/make_variant_list.hpp
index b2c74ad24d..37d725c0b6 100644
--- a/3party/boost/boost/variant/detail/make_variant_list.hpp
+++ b/3party/boost/boost/variant/detail/make_variant_list.hpp
@@ -3,8 +3,8 @@
// See http://www.boost.org for updates, documentation, and revision history.
//-----------------------------------------------------------------------------
//
-// Copyright (c) 2002-2003
-// Eric Friedman, Itay Maman
+// Copyright (c) 2002-2003 Eric Friedman, Itay Maman
+// Copyright (c) 2013 Antony Polukhin
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -31,6 +31,17 @@ namespace detail { namespace variant {
// Rationale: see class template convert_void (variant_fwd.hpp) and using-
// declaration workaround (below).
//
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+
+template < typename... T >
+struct make_variant_list
+{
+ typedef typename mpl::list< T... >::type type;
+};
+
+#else // defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+
template < BOOST_VARIANT_ENUM_PARAMS(typename T) >
struct make_variant_list
{
@@ -54,6 +65,8 @@ public: // metafunction result
};
+#endif // BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES workaround
+
}} // namespace detail::variant
} // namespace boost
diff --git a/3party/boost/boost/variant/detail/move.hpp b/3party/boost/boost/variant/detail/move.hpp
index ab9cbf5b86..24f8310a76 100644
--- a/3party/boost/boost/variant/detail/move.hpp
+++ b/3party/boost/boost/variant/detail/move.hpp
@@ -5,6 +5,7 @@
//
// Copyright (c) 2002-2003 Eric Friedman
// Copyright (c) 2002 by Andrei Alexandrescu
+// Copyright (c) 2013 Antony Polukhin
//
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
@@ -24,100 +25,11 @@
#include "boost/config.hpp"
#include "boost/detail/workaround.hpp"
-#include "boost/mpl/if.hpp"
-#include "boost/type_traits/is_base_and_derived.hpp"
+#include "boost/move/move.hpp"
-namespace boost {
-namespace detail { namespace variant {
+namespace boost { namespace detail { namespace variant {
-//////////////////////////////////////////////////////////////////////////
-// forward declares
-//
-// NOTE: Incomplete until (if?) Boost.Move becomes part of Boost.
-//
-template <typename Deriving> class moveable;
-template <typename T> class move_source;
-template <typename T> class move_return;
-
-namespace detail {
-
-// (detail) moveable_tag
-//
-// Concrete type from which moveable<T> derives.
-//
-// TODO: Move into moveable_fwd.hpp and define has_move_constructor.
-//
-template <typename Deriving>
-struct moveable_tag
-{
-};
-
-} // namespace detail
-
-//////////////////////////////////////////////////////////////////////////
-// function template move
-//
-// Takes a T& and returns, if T derives moveable<T>, a move_source<T> for
-// the object; else, returns the T&.
-//
-
-namespace detail {
-
-// (detail) class template move_type
-//
-// Metafunction that, given moveable T, provides move_source<T>, else T&.
-//
-template <typename T>
-struct move_type
-{
-public: // metafunction result
-
- typedef typename mpl::if_<
- is_base_and_derived<detail::moveable_tag<T>, T>
- , move_source<T>
- , T&
- >::type type;
-
-};
-
-} // namespace detail
-
-#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
-
-template <typename T>
-inline
- typename detail::move_type<T>::type
-move(T& source)
-{
- typedef typename detail::move_type<T>::type
- move_t;
-
- return move_t(source);
-}
-
-#else
-
-using std::move;
-
-#endif
-
-//////////////////////////////////////////////////////////////////////////
-// class template return_t
-//
-// Metafunction that, given moveable T, provides move_return<T>, else T.
-//
-template <typename T>
-struct return_t
-{
-public: // metafunction result
-
- typedef typename mpl::if_<
- is_base_and_derived<moveable<T>, T>
- , move_return<T>
- , T
- >::type type;
-
-};
+using boost::move;
//////////////////////////////////////////////////////////////////////////
// function template move_swap
@@ -126,47 +38,30 @@ public: // metafunction result
// types and on non-conforming compilers.
//
-#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) \
- || BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(2))
-
-// [Indicate that move_swap by overload is disabled...]
-#define BOOST_NO_MOVE_SWAP_BY_OVERLOAD
+namespace move_swap_fallback {
-// [...and provide straight swap-by-move implementation:]
-template <typename T>
-inline void move_swap(T& lhs, T& rhs)
-{
- T tmp( boost::detail::variant::move(lhs) );
- lhs = boost::detail::variant::move(rhs);
- rhs = boost::detail::variant::move(tmp);
-}
-
-#else// !workaround
-
-namespace detail { namespace move_swap {
-
-template <typename T>
-inline void swap(T& lhs, T& rhs)
+template <typename T1, typename T2>
+inline void swap(T1& lhs, T2& rhs)
{
- T tmp( boost::detail::variant::move(lhs) );
+ T1 tmp( boost::detail::variant::move(lhs) );
lhs = boost::detail::variant::move(rhs);
rhs = boost::detail::variant::move(tmp);
}
-}} // namespace detail::move_swap
+} // namespace move_swap_fallback
template <typename T>
inline void move_swap(T& lhs, T& rhs)
{
- using detail::move_swap::swap;
-
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+ move_swap_fallback::swap(lhs, rhs);
+#else
+ using move_swap_fallback::swap;
swap(lhs, rhs);
+#endif
}
-#endif // workaround
-
-}} // namespace detail::variant
-} // namespace boost
+}}} // namespace boost::detail::variant
#endif // BOOST_VARIANT_DETAIL_MOVE_HPP
diff --git a/3party/boost/boost/variant/detail/over_sequence.hpp b/3party/boost/boost/variant/detail/over_sequence.hpp
index bdd69ada61..ff20a010c7 100644
--- a/3party/boost/boost/variant/detail/over_sequence.hpp
+++ b/3party/boost/boost/variant/detail/over_sequence.hpp
@@ -16,12 +16,6 @@
#define BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP
#include "boost/mpl/aux_/config/ctps.hpp"
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-# include "boost/mpl/eval_if.hpp"
-# include "boost/mpl/bool.hpp"
-# include "boost/mpl/identity.hpp"
-# include "boost/type.hpp"
-#endif
namespace boost {
@@ -44,7 +38,6 @@ struct over_sequence
// Indicates whether the specified type is of form over_sequence<...> or not.
//
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename T>
struct is_over_sequence
@@ -58,36 +51,6 @@ struct is_over_sequence< over_sequence<Types> >
{
};
-#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-typedef char (&yes_over_sequence_t)[1];
-typedef char (&no_over_sequence_t)[2];
-
-no_over_sequence_t is_over_sequence_test(...);
-
-template<typename T>
-yes_over_sequence_t is_over_sequence_test(
- type< ::boost::detail::variant::over_sequence<T> >
- );
-
-template<typename T>
-struct is_over_sequence_impl
-{
- BOOST_STATIC_CONSTANT(bool, value = (
- sizeof(is_over_sequence_test(type<T>()))
- == sizeof(yes_over_sequence_t)
- ));
-};
-
-template <typename T>
-struct is_over_sequence
- : mpl::bool_<
- ::boost::detail::variant::is_over_sequence_impl<T>::value
- >
-{
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
}} // namespace detail::variant
} // namespace boost
diff --git a/3party/boost/boost/variant/detail/substitute.hpp b/3party/boost/boost/variant/detail/substitute.hpp
index 97fe2054bc..56faa89cfd 100644
--- a/3party/boost/boost/variant/detail/substitute.hpp
+++ b/3party/boost/boost/variant/detail/substitute.hpp
@@ -125,6 +125,27 @@ struct substitute<
// template expression (i.e., F<...>) specializations
//
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+template <
+ template <typename...> class F
+ , typename... Ts
+ , typename Dest
+ , typename Source
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(typename Arity)
+ >
+struct substitute<
+ F<Ts...>
+ , Dest
+ , Source
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(Arity)
+ >
+{
+ typedef F<typename substitute<
+ Ts, Dest, Source
+ >::type...> type;
+};
+#endif // !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+
#define BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF_IMPL(N) \
typedef typename substitute< \
BOOST_PP_CAT(U,N), Dest, Source \
diff --git a/3party/boost/boost/variant/detail/substitute_fwd.hpp b/3party/boost/boost/variant/detail/substitute_fwd.hpp
index 1723847255..8084cb8845 100644
--- a/3party/boost/boost/variant/detail/substitute_fwd.hpp
+++ b/3party/boost/boost/variant/detail/substitute_fwd.hpp
@@ -28,7 +28,6 @@
#include "boost/mpl/aux_/config/ttp.hpp"
#if defined(BOOST_NO_TEMPLATE_TEMPLATE_PARAMETERS) \
- || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
&& !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
# define BOOST_VARIANT_DETAIL_NO_SUBSTITUTE
#endif
diff --git a/3party/boost/boost/variant/detail/visitation_impl.hpp b/3party/boost/boost/variant/detail/visitation_impl.hpp
index 172d416847..96bc2748fb 100644
--- a/3party/boost/boost/variant/detail/visitation_impl.hpp
+++ b/3party/boost/boost/variant/detail/visitation_impl.hpp
@@ -20,7 +20,6 @@
#include "boost/variant/detail/forced_return.hpp"
#include "boost/variant/detail/generic_result_type.hpp"
-#include "boost/assert.hpp"
#include "boost/mpl/eval_if.hpp"
#include "boost/mpl/bool.hpp"
#include "boost/mpl/identity.hpp"
@@ -47,10 +46,18 @@
// and potentially increase runtime performance. (TODO: Investigate further.)
//
#if !defined(BOOST_VARIANT_VISITATION_UNROLLING_LIMIT)
+
+#ifndef BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES
+# include "boost/mpl/limits/list.hpp"
+# define BOOST_VARIANT_VISITATION_UNROLLING_LIMIT \
+ BOOST_MPL_LIMIT_LIST_SIZE
+#else
# define BOOST_VARIANT_VISITATION_UNROLLING_LIMIT \
BOOST_VARIANT_LIMIT_TYPES
#endif
+#endif
+
namespace boost {
namespace detail { namespace variant {
@@ -67,7 +74,6 @@ struct apply_visitor_unrolled {};
// "Never ending" iterator range facilitates visitation_impl unrolling.
//
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename Iter, typename LastIter>
struct visitation_impl_step
@@ -87,29 +93,6 @@ struct visitation_impl_step< LastIter,LastIter >
typedef visitation_impl_step next;
};
-#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-template <typename Iter, typename LastIter>
-struct visitation_impl_step
-{
- typedef typename mpl::eval_if<
- is_same<Iter, LastIter>
- , mpl::identity<apply_visitor_unrolled>
- , Iter
- >::type type;
-
- typedef typename mpl::eval_if<
- is_same<type, apply_visitor_unrolled> //is_same<Iter, LastIter>
- , mpl::identity<LastIter>
- , mpl::next<Iter>
- >::type next_iter;
-
- typedef visitation_impl_step<
- next_iter, LastIter
- > next;
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
///////////////////////////////////////////////////////////////////////////////
// (detail) function template visitation_impl_invoke
@@ -178,8 +161,7 @@ inline
BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
visitation_impl_invoke(int, Visitor&, VoidPtrCV, apply_visitor_unrolled*, NBF, long)
{
- // should never be here at runtime:
- BOOST_ASSERT(false);
+ // should never be here at runtime!
typedef typename Visitor::result_type result_type;
return ::boost::detail::variant::forced_return< result_type >();
}
@@ -203,8 +185,7 @@ visitation_impl(
, NBF, W* = 0, S* = 0
)
{
- // should never be here at runtime:
- BOOST_ASSERT(false);
+ // should never be here at runtime!
typedef typename Visitor::result_type result_type;
return ::boost::detail::variant::forced_return< result_type >();
}
diff --git a/3party/boost/boost/variant/get.hpp b/3party/boost/boost/variant/get.hpp
index 99a65f6b6d..e3302c0213 100644
--- a/3party/boost/boost/variant/get.hpp
+++ b/3party/boost/boost/variant/get.hpp
@@ -17,18 +17,13 @@
#include "boost/config.hpp"
#include "boost/detail/workaround.hpp"
+#include "boost/throw_exception.hpp"
#include "boost/utility/addressof.hpp"
#include "boost/variant/variant_fwd.hpp"
#include "boost/type_traits/add_reference.hpp"
#include "boost/type_traits/add_pointer.hpp"
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-# include "boost/mpl/bool.hpp"
-# include "boost/mpl/or.hpp"
-# include "boost/type_traits/is_same.hpp"
-#endif
-
namespace boost {
//////////////////////////////////////////////////////////////////////////
@@ -36,12 +31,12 @@ namespace boost {
//
// The exception thrown in the event of a failed get of a value.
//
-class bad_get
+class BOOST_SYMBOL_VISIBLE bad_get
: public std::exception
{
public: // std::exception implementation
- virtual const char * what() const throw()
+ virtual const char * what() const BOOST_NOEXCEPT_OR_NOTHROW
{
return "boost::bad_get: "
"failed value get using boost::get";
@@ -77,62 +72,27 @@ public: // visitor typedefs
public: // visitor interfaces
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
- pointer operator()(reference operand) const
- {
- return boost::addressof(operand);
- }
-
- template <typename U>
- pointer operator()(const U&) const
- {
- return static_cast<pointer>(0);
- }
-
-#else // MSVC6
-
-private: // helpers, for visitor interfaces (below)
-
- pointer execute_impl(reference operand, mpl::true_) const
+ pointer operator()(reference operand) const BOOST_NOEXCEPT
{
return boost::addressof(operand);
}
template <typename U>
- pointer execute_impl(const U& operand, mpl::false_) const
+ pointer operator()(const U&) const BOOST_NOEXCEPT
{
return static_cast<pointer>(0);
}
-
-public: // visitor interfaces
-
- template <typename U>
- pointer operator()(U& operand) const
- {
- // MSVC6 finds normal implementation (above) ambiguous,
- // so we must explicitly disambiguate
-
- typedef typename mpl::or_<
- is_same<U, T>
- , is_same<const U, T>
- >::type U_is_T;
-
- return execute_impl(operand, U_is_T());
- }
-
-#endif // MSVC6 workaround
-
};
}} // namespace detail::variant
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551))
-# define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t) \
- BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)
-#else
-# define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t) \
- , t* = 0
+#ifndef BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE
+# if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551))
+# define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t)
+# else
+# define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t) \
+ , t* = 0
+# endif
#endif
template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) >
@@ -141,7 +101,7 @@ inline
get(
boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >* operand
BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
- )
+ ) BOOST_NOEXCEPT
{
typedef typename add_pointer<U>::type U_ptr;
if (!operand) return static_cast<U_ptr>(0);
@@ -156,7 +116,7 @@ inline
get(
const boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >* operand
BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
- )
+ ) BOOST_NOEXCEPT
{
typedef typename add_pointer<const U>::type U_ptr;
if (!operand) return static_cast<U_ptr>(0);
@@ -177,7 +137,7 @@ get(
U_ptr result = get<U>(&operand);
if (!result)
- throw bad_get();
+ boost::throw_exception(bad_get());
return *result;
}
@@ -193,7 +153,7 @@ get(
U_ptr result = get<const U>(&operand);
if (!result)
- throw bad_get();
+ boost::throw_exception(bad_get());
return *result;
}
diff --git a/3party/boost/boost/variant/multivisitors.hpp b/3party/boost/boost/variant/multivisitors.hpp
index a93aea1eab..0f1988c00b 100644
--- a/3party/boost/boost/variant/multivisitors.hpp
+++ b/3party/boost/boost/variant/multivisitors.hpp
@@ -12,7 +12,7 @@
#ifndef BOOST_VARIANT_MULTIVISITORS_HPP
#define BOOST_VARIANT_MULTIVISITORS_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/variant/polymorphic_get.hpp b/3party/boost/boost/variant/polymorphic_get.hpp
new file mode 100644
index 0000000000..c693c51099
--- /dev/null
+++ b/3party/boost/boost/variant/polymorphic_get.hpp
@@ -0,0 +1,170 @@
+//-----------------------------------------------------------------------------
+// boost variant/polymorphic_get.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2013 Antony Polukhin
+//
+// 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_VARIANT_POLYMORPHIC_GET_HPP
+#define BOOST_VARIANT_POLYMORPHIC_GET_HPP
+
+#include <exception>
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/throw_exception.hpp"
+#include "boost/utility/addressof.hpp"
+#include "boost/variant/variant_fwd.hpp"
+#include "boost/variant/get.hpp"
+
+#include "boost/type_traits/add_reference.hpp"
+#include "boost/type_traits/add_pointer.hpp"
+#include "boost/type_traits/is_base_of.hpp"
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// class bad_polymorphic_get
+//
+// The exception thrown in the event of a failed get of a value.
+//
+class BOOST_SYMBOL_VISIBLE bad_polymorphic_get
+ : public bad_get
+{
+public: // std::exception implementation
+
+ virtual const char * what() const BOOST_NOEXCEPT_OR_NOTHROW
+ {
+ return "boost::bad_polymorphic_get: "
+ "failed value get using boost::polymorphic_get";
+ }
+
+};
+
+//////////////////////////////////////////////////////////////////////////
+// function template get<T>
+//
+// Retrieves content of given variant object if content is of type T.
+// Otherwise: pointer ver. returns 0; reference ver. throws bad_get.
+//
+
+namespace detail { namespace variant {
+
+// (detail) class template get_polymorphic_visitor
+//
+// Generic static visitor that: if the value is of the specified
+// type or of a type derived from specified, returns a pointer
+// to the value it visits; else a null pointer.
+//
+template <typename Base>
+struct get_polymorphic_visitor
+{
+private: // private typedefs
+ typedef typename add_pointer<Base>::type pointer;
+ typedef typename add_reference<Base>::type reference;
+
+ pointer get(reference operand, boost::true_type) const BOOST_NOEXCEPT
+ {
+ return boost::addressof(operand);
+ }
+
+ template <class T>
+ pointer get(T&, boost::false_type) const BOOST_NOEXCEPT
+ {
+ return static_cast<pointer>(0);
+ }
+
+public: // visitor interfaces
+ typedef pointer result_type;
+
+ template <typename U>
+ pointer operator()(U& operand) const BOOST_NOEXCEPT
+ {
+ typedef boost::integral_constant<
+ bool,
+ boost::is_base_of<Base, U>::value || boost::is_same<Base, U>::value
+ > tag_t;
+ return get(operand, tag_t());
+ }
+};
+
+}} // namespace detail::variant
+
+#ifndef BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE
+# if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551))
+# define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t)
+# else
+# define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t) \
+ , t* = 0
+# endif
+#endif
+
+template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) >
+inline
+ typename add_pointer<U>::type
+polymorphic_get(
+ boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >* operand
+ BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
+ ) BOOST_NOEXCEPT
+{
+ typedef typename add_pointer<U>::type U_ptr;
+ if (!operand) return static_cast<U_ptr>(0);
+
+ detail::variant::get_polymorphic_visitor<U> v;
+ return operand->apply_visitor(v);
+}
+
+template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) >
+inline
+ typename add_pointer<const U>::type
+polymorphic_get(
+ const boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >* operand
+ BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
+ ) BOOST_NOEXCEPT
+{
+ typedef typename add_pointer<const U>::type U_ptr;
+ if (!operand) return static_cast<U_ptr>(0);
+
+ detail::variant::get_polymorphic_visitor<const U> v;
+ return operand->apply_visitor(v);
+}
+
+template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) >
+inline
+ typename add_reference<U>::type
+polymorphic_get(
+ boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >& operand
+ BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
+ )
+{
+ typedef typename add_pointer<U>::type U_ptr;
+ U_ptr result = polymorphic_get<U>(&operand);
+
+ if (!result)
+ boost::throw_exception(bad_polymorphic_get());
+ return *result;
+}
+
+template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) >
+inline
+ typename add_reference<const U>::type
+polymorphic_get(
+ const boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >& operand
+ BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
+ )
+{
+ typedef typename add_pointer<const U>::type U_ptr;
+ U_ptr result = polymorphic_get<const U>(&operand);
+
+ if (!result)
+ boost::throw_exception(bad_polymorphic_get());
+ return *result;
+}
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_POLYMORPHIC_GET_HPP
diff --git a/3party/boost/boost/variant/recursive_variant.hpp b/3party/boost/boost/variant/recursive_variant.hpp
index 071d0f9428..cb5eb4ce79 100644
--- a/3party/boost/boost/variant/recursive_variant.hpp
+++ b/3party/boost/boost/variant/recursive_variant.hpp
@@ -3,8 +3,8 @@
// See http://www.boost.org for updates, documentation, and revision history.
//-----------------------------------------------------------------------------
//
-// Copyright (c) 2003
-// Eric Friedman
+// Copyright (c) 2003 Eric Friedman
+// Copyright (c) 2013 Antony Polukhin
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -116,6 +116,23 @@ struct substitute<
BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(Arity)
>
{
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+
+ typedef ::boost::variant<
+ typename enable_recursive<
+ T0
+ , RecursiveVariant
+ , mpl::true_
+ >::type,
+ typename enable_recursive<
+ TN
+ , RecursiveVariant
+ , mpl::true_
+ >::type...
+ > type;
+
+#else // defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+
private: // helpers, for metafunction result (below)
#define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS(z,N,_) \
@@ -137,6 +154,7 @@ private: // helpers, for metafunction result (below)
public: // metafunction result
typedef ::boost::variant< BOOST_VARIANT_ENUM_PARAMS(wknd_T) > type;
+#endif // BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES workaround
};
#else // defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
@@ -176,9 +194,7 @@ struct make_recursive_variant_over
{
private: // precondition assertions
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
BOOST_STATIC_ASSERT(( ::boost::mpl::is_sequence<Types>::value ));
-#endif
public: // metafunction result
diff --git a/3party/boost/boost/variant/recursive_wrapper_fwd.hpp b/3party/boost/boost/variant/recursive_wrapper_fwd.hpp
index 69a0ec701d..cf0395920b 100644
--- a/3party/boost/boost/variant/recursive_wrapper_fwd.hpp
+++ b/3party/boost/boost/variant/recursive_wrapper_fwd.hpp
@@ -16,12 +16,6 @@
#define BOOST_VARIANT_RECURSIVE_WRAPPER_FWD_HPP
#include "boost/mpl/aux_/config/ctps.hpp"
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-# include "boost/mpl/eval_if.hpp"
-# include "boost/mpl/bool.hpp"
-# include "boost/mpl/identity.hpp"
-# include "boost/type.hpp"
-#endif
#include "boost/mpl/aux_/lambda_support.hpp"
@@ -56,7 +50,6 @@ template <typename T> class recursive_wrapper;
namespace detail {
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename T>
struct is_recursive_wrapper_impl
@@ -70,28 +63,6 @@ struct is_recursive_wrapper_impl< recursive_wrapper<T> >
{
};
-#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-typedef char (&yes_recursive_wrapper_t)[1];
-typedef char (&no_recursive_wrapper_t)[2];
-
-no_recursive_wrapper_t is_recursive_wrapper_test(...);
-
-template<typename T>
-yes_recursive_wrapper_t is_recursive_wrapper_test(
- type< ::boost::recursive_wrapper<T> >
- );
-
-template<typename T>
-struct is_recursive_wrapper_impl
-{
- BOOST_STATIC_CONSTANT(bool, value = (
- sizeof(is_recursive_wrapper_test(type<T>()))
- == sizeof(yes_recursive_wrapper_t)
- ));
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
} // namespace detail
@@ -107,7 +78,6 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF1(
// If specified type T matches recursive_wrapper<U>, then U; else T.
//
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template <typename T>
struct unwrap_recursive
@@ -125,20 +95,6 @@ struct unwrap_recursive< recursive_wrapper<T> >
BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,unwrap_recursive,(T))
};
-#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-template <typename T>
-struct unwrap_recursive
- : mpl::eval_if<
- is_recursive_wrapper<T>
- , T
- , mpl::identity< T >
- >
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,unwrap_recursive,(T))
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
} // namespace boost
diff --git a/3party/boost/boost/variant/static_visitor.hpp b/3party/boost/boost/variant/static_visitor.hpp
index b59b6f5a6a..199317cbe3 100644
--- a/3party/boost/boost/variant/static_visitor.hpp
+++ b/3party/boost/boost/variant/static_visitor.hpp
@@ -19,10 +19,6 @@
#include "boost/mpl/if.hpp"
#include "boost/type_traits/is_base_and_derived.hpp"
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-# include "boost/type_traits/is_same.hpp"
-#endif
-
// should be the last #include
#include "boost/type_traits/detail/bool_trait_def.hpp"
@@ -52,10 +48,13 @@ public: // typedefs
typedef R result_type;
protected: // for use as base class only
-
- static_visitor() { }
- ~static_visitor() { }
-
+#ifndef BOOST_NO_DEFAULTED_FUNCTIONS
+ static_visitor() = default;
+ ~static_visitor() = default;
+#else
+ static_visitor() BOOST_NOEXCEPT { }
+ ~static_visitor() BOOST_NOEXCEPT { }
+#endif
};
//////////////////////////////////////////////////////////////////////////
diff --git a/3party/boost/boost/variant/variant.hpp b/3party/boost/boost/variant/variant.hpp
index 2ac84e7a02..4ed5ad4522 100644
--- a/3party/boost/boost/variant/variant.hpp
+++ b/3party/boost/boost/variant/variant.hpp
@@ -3,13 +3,15 @@
// See http://www.boost.org for updates, documentation, and revision history.
//-----------------------------------------------------------------------------
//
-// Copyright (c) 2002-2003
-// Eric Friedman, Itay Maman
+// Copyright (c) 2002-2003 Eric Friedman, Itay Maman
+// Copyright (c) 2012-2013 Antony Polukhin
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Thanks to Adam Romanek for providing patches for exception-disabled env.
+
#ifndef BOOST_VARIANT_VARIANT_HPP
#define BOOST_VARIANT_VARIANT_HPP
@@ -21,7 +23,6 @@
#endif // BOOST_NO_TYPEID
#include "boost/variant/detail/config.hpp"
-#include "boost/mpl/aux_/config/eti.hpp"
#include "boost/mpl/aux_/value_wknd.hpp"
#include "boost/variant/variant_fwd.hpp"
@@ -37,6 +38,7 @@
#include "boost/variant/detail/generic_result_type.hpp"
#include "boost/variant/detail/move.hpp"
+#include "boost/detail/no_exceptions_support.hpp"
#include "boost/detail/reference_content.hpp"
#include "boost/aligned_storage.hpp"
#include "boost/blank.hpp"
@@ -216,15 +218,41 @@ public: // metafunction result
};
-#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
-
-template<>
-struct find_fallback_type<int>
-{
- typedef mpl::pair< no_fallback_type,no_fallback_type > type;
+#ifndef BOOST_NO_CXX11_NOEXCEPT
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction is_variant_move_noexcept_constructible
+//
+// Returns true_type if all the types are nothrow move constructible.
+//
+template <class Types>
+struct is_variant_move_noexcept_constructible {
+ typedef typename boost::mpl::find_if<
+ Types, mpl::not_<boost::is_nothrow_move_constructible<boost::mpl::_1> >
+ >::type iterator_t;
+
+ typedef typename boost::mpl::end<Types>::type end_t;
+ typedef typename boost::is_same<
+ iterator_t, end_t
+ >::type type;
};
-#endif // BOOST_MPL_CFG_MSVC_60_ETI_BUG workaround
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction is_variant_move_noexcept_assignable
+//
+// Returns true_type if all the types are nothrow move constructible.
+//
+template <class Types>
+struct is_variant_move_noexcept_assignable {
+ typedef typename boost::mpl::find_if<
+ Types, mpl::not_<boost::is_nothrow_move_assignable<boost::mpl::_1> >
+ >::type iterator_t;
+
+ typedef typename boost::mpl::end<Types>::type end_t;
+ typedef typename boost::is_same<
+ iterator_t, end_t
+ >::type type;
+};
+#endif // BOOST_NO_CXX11_NOEXCEPT
///////////////////////////////////////////////////////////////////////////////
// (detail) metafunction make_storage
@@ -267,37 +295,12 @@ private: // helpers, for metafunction result (below)
public: // metafunction result
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
typedef ::boost::aligned_storage<
BOOST_MPL_AUX_VALUE_WKND(max_size)::value
, BOOST_MPL_AUX_VALUE_WKND(max_alignment)::value
> type;
-
-#else // MSVC7 and below
-
- BOOST_STATIC_CONSTANT(std::size_t, msvc_max_size_c = max_size::value);
- BOOST_STATIC_CONSTANT(std::size_t, msvc_max_alignment_c = max_alignment::value);
-
- typedef ::boost::aligned_storage<
- msvc_max_size_c
- , msvc_max_alignment_c
- > type;
-
-#endif // MSVC workaround
-
};
-#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
-
-template<>
-struct make_storage<int,int>
-{
- typedef int type;
-};
-
-#endif // BOOST_MPL_CFG_MSVC_60_ETI_BUG workaround
-
///////////////////////////////////////////////////////////////////////////////
// (detail) class destroyer
//
@@ -310,9 +313,9 @@ public: // visitor interfaces
template <typename T>
BOOST_VARIANT_AUX_RETURN_VOID_TYPE
- internal_visit(T& operand, int) const
+ internal_visit(T& operand, int) const BOOST_NOEXCEPT
{
- operand.~T();
+ operand.~T(); // must be noexcept
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551)) || \
BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
@@ -336,8 +339,6 @@ class known_get
: public static_visitor<T&>
{
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
public: // visitor interface
T& operator()(T& operand) const BOOST_NOEXCEPT
@@ -349,40 +350,8 @@ public: // visitor interface
T& operator()(U&) const
{
// logical error to be here: see precondition above
- BOOST_ASSERT(false);
- return ::boost::detail::variant::forced_return< T& >();
- }
-
-#else // MSVC6
-
-private: // helpers, for visitor interface (below)
-
- T& execute(T& operand, mpl::true_) const
- {
- return operand;
- }
-
- template <typename U>
- T& execute(U& operand, mpl::false_) const
- {
- // logical error to be here: see precondition above
- BOOST_ASSERT(false);
return ::boost::detail::variant::forced_return< T& >();
}
-
-public: // visitor interface
-
- template <typename U>
- T& operator()(U& operand) const
- {
- typedef typename is_same< U,T >::type
- U_is_T;
-
- return execute(operand, U_is_T());
- }
-
-#endif // MSVC6 workaround
-
};
///////////////////////////////////////////////////////////////////////////////
@@ -608,8 +577,6 @@ public: // structors
{
}
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
public: // visitor interface
bool operator()(T& lhs)
@@ -624,33 +591,6 @@ public: // visitor interface
return false;
}
-#else // MSVC6
-
-private: // helpers, for visitor interface (below)
-
- bool execute(T& lhs, mpl::true_)
- {
- lhs = rhs_;
- return true;
- }
-
- template <typename U>
- bool execute(U&, mpl::false_)
- {
- return false;
- }
-
-public: // visitor interface
-
- template <typename U>
- bool operator()(U& lhs)
- {
- typedef typename is_same<U,T>::type U_is_T;
- return execute(lhs, U_is_T());
- }
-
-#endif // MSVC6 workaround
-
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
private:
// silence MSVC warning C4512: assignment operator could not be generated
@@ -680,8 +620,6 @@ public: // structors
{
}
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
public: // visitor interface
bool operator()(T& lhs)
@@ -696,19 +634,6 @@ public: // visitor interface
return false;
}
-#else // MSVC6
-
-public: // visitor interface
-
- template <typename U>
- bool operator()(U& lhs)
- {
- // MSVC6 can not use direct_mover class
- return direct_assigner(rhs_)(lhs);
- }
-
-#endif // MSVC6 workaround
-
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
private:
// silence MSVC warning C4512: assignment operator could not be generated
@@ -770,12 +695,12 @@ private: // helpers, for visitor interface (below)
// ...destroy lhs content...
lhs_content.~LhsT(); // nothrow
- try
+ BOOST_TRY
{
// ...and attempt to copy rhs content into lhs storage:
copy_rhs_content_(lhs_.storage_.address(), rhs_content_);
}
- catch (...)
+ BOOST_CATCH (...)
{
// In case of failure, restore backup content to lhs storage...
new(lhs_.storage_.address())
@@ -784,8 +709,9 @@ private: // helpers, for visitor interface (below)
); // nothrow
// ...and rethrow:
- throw;
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
// In case of success, indicate new content type:
lhs_.indicate_which(rhs_which_); // nothrow
@@ -803,12 +729,12 @@ private: // helpers, for visitor interface (below)
// ...destroy lhs content...
lhs_content.~LhsT(); // nothrow
- try
+ BOOST_TRY
{
// ...and attempt to copy rhs content into lhs storage:
copy_rhs_content_(lhs_.storage_.address(), rhs_content_);
}
- catch (...)
+ BOOST_CATCH (...)
{
// In case of failure, copy backup pointer to lhs storage...
new(lhs_.storage_.address())
@@ -818,8 +744,9 @@ private: // helpers, for visitor interface (below)
lhs_.indicate_backup_which( lhs_.which() ); // nothrow
// ...and rethrow:
- throw;
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
// In case of success, indicate new content type...
lhs_.indicate_which(rhs_which_); // nothrow
@@ -866,7 +793,7 @@ private: // representation
public: // structors
- explicit swap_with(Variant& toswap)
+ explicit swap_with(Variant& toswap) BOOST_NOEXCEPT
: toswap_(toswap)
{
}
@@ -1289,6 +1216,17 @@ private: // helpers, for representation (below)
internal_types, never_uses_backup_flag
>::type storage_t;
+#ifndef BOOST_NO_CXX11_NOEXCEPT
+ typedef typename detail::variant::is_variant_move_noexcept_constructible<
+ internal_types
+ > variant_move_noexcept_constructible;
+
+ typedef typename detail::variant::is_variant_move_noexcept_assignable<
+ internal_types
+ > variant_move_noexcept_assignable;
+
+#endif
+
private: // helpers, for representation (below)
// which_ on:
@@ -1367,7 +1305,7 @@ private: // helpers, for structors (below)
{
};
- void destroy_content()
+ void destroy_content() BOOST_NOEXCEPT
{
detail::variant::destroyer visitor;
this->internal_apply_visitor(visitor);
@@ -1375,13 +1313,18 @@ private: // helpers, for structors (below)
public: // structors
- ~variant()
+ ~variant() BOOST_NOEXCEPT
{
destroy_content();
}
- variant()
+ variant() BOOST_NOEXCEPT_IF(boost::has_nothrow_constructor<internal_T0>::value)
{
+#ifdef _MSC_VER
+#pragma warning( push )
+// behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
+#pragma warning( disable : 4345 )
+#endif
// NOTE TO USER :
// Compile error from here indicates that the first bound
// type is not default-constructible, and so variant cannot
@@ -1389,6 +1332,9 @@ public: // structors
//
new( storage_.address() ) internal_T0();
indicate_which(0); // zero is the index of the first bounded type
+#ifdef _MSC_VER
+#pragma warning( pop )
+#endif
}
private: // helpers, for structors, cont. (below)
@@ -1746,7 +1692,8 @@ public: // structors, cont.
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template <class T>
- variant(T&& operand, typename boost::enable_if<boost::is_rvalue_reference<T&&> >::type* = 0)
+ variant(T&& operand, typename boost::enable_if<boost::is_rvalue_reference<T&&> >::type* = 0,
+ typename boost::disable_if<boost::is_const<T> >::type* = 0)
{
convert_construct( detail::variant::move(operand), 1L);
}
@@ -1766,7 +1713,7 @@ public: // structors, cont.
}
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- variant(variant&& operand)
+ variant(variant&& operand) BOOST_NOEXCEPT_IF(variant_move_noexcept_constructible::type::value)
{
// Move the value of operand into *this...
detail::variant::move_into visitor( storage_.address() );
@@ -1793,10 +1740,10 @@ private: // helpers, for modifiers (below)
class assigner
: public static_visitor<>
{
- private: // representation
+ protected: // representation
variant& lhs_;
- int rhs_which_;
+ const int rhs_which_;
public: // structors
@@ -1806,7 +1753,7 @@ private: // helpers, for modifiers (below)
{
}
- private: // helpers, for internal visitor interface (below)
+ protected: // helpers, for internal visitor interface (below)
template <typename RhsT, typename B1, typename B2>
void assign_impl(
@@ -1814,7 +1761,7 @@ private: // helpers, for modifiers (below)
, mpl::true_ // has_nothrow_copy
, B1 // is_nothrow_move_constructible
, B2 // has_fallback_type
- )
+ ) const BOOST_NOEXCEPT
{
// Destroy lhs's content...
lhs_.destroy_content(); // nothrow
@@ -1833,7 +1780,7 @@ private: // helpers, for modifiers (below)
, mpl::false_ // has_nothrow_copy
, mpl::true_ // is_nothrow_move_constructible
, B // has_fallback_type
- )
+ ) const
{
// Attempt to make a temporary copy (so as to move it below)...
RhsT temp(rhs_content);
@@ -1849,37 +1796,42 @@ private: // helpers, for modifiers (below)
lhs_.indicate_which(rhs_which_); // nothrow
}
+ void construct_fallback() const BOOST_NOEXCEPT {
+ // In case of failure, default-construct fallback type in lhs's storage...
+ new (lhs_.storage_.address())
+ fallback_type_; // nothrow
+
+ // ...indicate construction of fallback type...
+ lhs_.indicate_which(
+ BOOST_MPL_AUX_VALUE_WKND(fallback_type_index_)::value
+ ); // nothrow
+ }
+
template <typename RhsT>
void assign_impl(
const RhsT& rhs_content
, mpl::false_ // has_nothrow_copy
, mpl::false_ // is_nothrow_move_constructible
, mpl::true_ // has_fallback_type
- )
+ ) const
{
// Destroy lhs's content...
lhs_.destroy_content(); // nothrow
- try
+ BOOST_TRY
{
// ...and attempt to copy rhs's content into lhs's storage:
new(lhs_.storage_.address())
RhsT( rhs_content );
}
- catch (...)
+ BOOST_CATCH (...)
{
- // In case of failure, default-construct fallback type in lhs's storage...
- new (lhs_.storage_.address())
- fallback_type_; // nothrow
-
- // ...indicate construction of fallback type...
- lhs_.indicate_which(
- BOOST_MPL_AUX_VALUE_WKND(fallback_type_index_)::value
- ); // nothrow
+ construct_fallback();
// ...and rethrow:
- throw;
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
// In the event of success, indicate new content type:
lhs_.indicate_which(rhs_which_); // nothrow
@@ -1891,7 +1843,7 @@ private: // helpers, for modifiers (below)
, mpl::false_ // has_nothrow_copy
, mpl::false_ // is_nothrow_move_constructible
, mpl::false_ // has_fallback_type
- )
+ ) const
{
detail::variant::backup_assigner<wknd_self_t>
visitor(lhs_, rhs_which_, rhs_content);
@@ -1902,7 +1854,7 @@ private: // helpers, for modifiers (below)
template <typename RhsT>
BOOST_VARIANT_AUX_RETURN_VOID_TYPE
- internal_visit(const RhsT& rhs_content, int)
+ internal_visit(const RhsT& rhs_content, int) const
{
typedef typename has_nothrow_copy<RhsT>::type
nothrow_copy;
@@ -1938,59 +1890,45 @@ private: // helpers, for modifiers (below)
//
class move_assigner
- : public static_visitor<>
+ : public assigner
{
- private: // representation
-
- variant& lhs_;
- int rhs_which_;
-
public: // structors
move_assigner(variant& lhs, int rhs_which) BOOST_NOEXCEPT
- : lhs_(lhs)
- , rhs_which_(rhs_which)
+ : assigner(lhs, rhs_which)
{
}
private: // helpers, for internal visitor interface (below)
-
- template <typename RhsT, typename B1, typename B2>
+
+ template <typename RhsT, typename B2>
void assign_impl(
RhsT& rhs_content
, mpl::true_ // has_nothrow_copy
, mpl::false_ // is_nothrow_move_constructible
, B2 // has_fallback_type
- )
+ ) const BOOST_NOEXCEPT
{
- // Destroy lhs's content...
- lhs_.destroy_content(); // nothrow
-
- // ...copy rhs content into lhs's storage...
- new(lhs_.storage_.address())
- RhsT( rhs_content ); // nothrow
-
- // ...and indicate new content type:
- lhs_.indicate_which(rhs_which_); // nothrow
+ assigner::assign_impl(rhs_content, mpl::true_(), mpl::false_(), B2());
}
- template <typename RhsT, typename B>
+ template <typename RhsT, typename B, typename B2>
void assign_impl(
RhsT& rhs_content
- , mpl::true_ // has_nothrow_copy
+ , B // has_nothrow_copy
, mpl::true_ // is_nothrow_move_constructible
- , B // has_fallback_type
- )
+ , B2 // has_fallback_type
+ ) const BOOST_NOEXCEPT
{
// ...destroy lhs's content...
- lhs_.destroy_content(); // nothrow
+ assigner::lhs_.destroy_content(); // nothrow
// ...move the rhs_content into lhs's storage...
- new(lhs_.storage_.address())
+ new(assigner::lhs_.storage_.address())
RhsT( detail::variant::move(rhs_content) ); // nothrow
// ...and indicate new content type:
- lhs_.indicate_which(rhs_which_); // nothrow
+ assigner::lhs_.indicate_which(assigner::rhs_which_); // nothrow
}
template <typename RhsT>
@@ -1999,54 +1937,46 @@ private: // helpers, for modifiers (below)
, mpl::false_ // has_nothrow_copy
, mpl::false_ // is_nothrow_move_constructible
, mpl::true_ // has_fallback_type
- )
+ ) const
{
// Destroy lhs's content...
- lhs_.destroy_content(); // nothrow
+ assigner::lhs_.destroy_content(); // nothrow
- try
+ BOOST_TRY
{
// ...and attempt to copy rhs's content into lhs's storage:
- new(lhs_.storage_.address())
+ new(assigner::lhs_.storage_.address())
RhsT( detail::variant::move(rhs_content) );
}
- catch (...)
+ BOOST_CATCH (...)
{
- // In case of failure, default-construct fallback type in lhs's storage...
- new (lhs_.storage_.address())
- fallback_type_; // nothrow
-
- // ...indicate construction of fallback type...
- lhs_.indicate_which(
- BOOST_MPL_AUX_VALUE_WKND(fallback_type_index_)::value
- ); // nothrow
+ assigner::construct_fallback();
// ...and rethrow:
- throw;
+ BOOST_RETHROW;
}
+ BOOST_CATCH_END
// In the event of success, indicate new content type:
- lhs_.indicate_which(rhs_which_); // nothrow
+ assigner::lhs_.indicate_which(assigner::rhs_which_); // nothrow
}
-
+
template <typename RhsT>
void assign_impl(
- const RhsT& rhs_content
+ RhsT& rhs_content
, mpl::false_ // has_nothrow_copy
, mpl::false_ // is_nothrow_move_constructible
, mpl::false_ // has_fallback_type
- )
+ ) const
{
- detail::variant::backup_assigner<wknd_self_t>
- visitor(lhs_, rhs_which_, rhs_content);
- lhs_.internal_apply_visitor(visitor);
+ assigner::assign_impl(rhs_content, mpl::false_(), mpl::false_(), mpl::false_());
}
public: // internal visitor interfaces
template <typename RhsT>
BOOST_VARIANT_AUX_RETURN_VOID_TYPE
- internal_visit(RhsT& rhs_content, int)
+ internal_visit(RhsT& rhs_content, int) const
{
typedef typename is_nothrow_move_constructible<RhsT>::type
nothrow_move_constructor;
@@ -2155,7 +2085,8 @@ public: // modifiers
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template <class T>
- typename boost::enable_if<boost::is_rvalue_reference<T&&>, variant& >::type operator=(T&& rhs)
+ typename boost::enable_if_c<boost::is_rvalue_reference<T&&>::value && !boost::is_const<T>::value, variant& >::type
+ operator=(T&& rhs)
{
move_assign( detail::variant::move(rhs) );
return *this;
@@ -2177,7 +2108,10 @@ public: // modifiers
}
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- variant& operator=(variant&& rhs)
+ variant& operator=(variant&& rhs)
+#if !defined(__GNUC__) || (__GNUC__ != 4) || (__GNUC_MINOR__ > 6)
+ BOOST_NOEXCEPT_IF(variant_move_noexcept_constructible::type::value && variant_move_noexcept_assignable::type::value)
+#endif
{
variant_assign( detail::variant::move(rhs) );
return *this;
@@ -2223,33 +2157,18 @@ public: // queries
public: // prevent comparison with foreign types
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
+// Obsolete. Remove.
# define BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE \
void
-#else // MSVC7
-
- //
- // MSVC7 gives error about return types for above being different than
- // the true comparison operator overloads:
- //
-
-# define BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE \
- bool
-
-#endif // MSVC7 workaround
-
template <typename U>
- BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE
- operator==(const U&) const
+ void operator==(const U&) const
{
BOOST_STATIC_ASSERT( false && sizeof(U) );
}
template <typename U>
- BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE
- operator<(const U&) const
+ void operator<(const U&) const
{
BOOST_STATIC_ASSERT( false && sizeof(U) );
}
@@ -2382,9 +2301,7 @@ struct make_variant_over
{
private: // precondition assertions
-#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
BOOST_STATIC_ASSERT(( ::boost::mpl::is_sequence<Types>::value ));
-#endif
public: // metafunction result
diff --git a/3party/boost/boost/variant/variant_fwd.hpp b/3party/boost/boost/variant/variant_fwd.hpp
index 133f4378ed..a15b0a27fe 100644
--- a/3party/boost/boost/variant/variant_fwd.hpp
+++ b/3party/boost/boost/variant/variant_fwd.hpp
@@ -3,8 +3,8 @@
// See http://www.boost.org for updates, documentation, and revision history.
//-----------------------------------------------------------------------------
//
-// Copyright (c) 2003
-// Eric Friedman, Itay Maman
+// Copyright (c) 2003 Eric Friedman, Itay Maman
+// Copyright (c) 2013 Antony Polukhin
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -26,16 +26,6 @@
#include "boost/preprocessor/repeat.hpp"
///////////////////////////////////////////////////////////////////////////////
-// macro BOOST_VARIANT_LIMIT_TYPES
-//
-// Implementation-defined preprocessor symbol describing the actual
-// length of variant's pseudo-variadic template parameter list.
-//
-#include "boost/mpl/limits/list.hpp"
-#define BOOST_VARIANT_LIMIT_TYPES \
- BOOST_MPL_LIMIT_LIST_SIZE
-
-///////////////////////////////////////////////////////////////////////////////
// macro BOOST_VARIANT_NO_REFERENCE_SUPPORT
//
// Defined if variant does not support references as bounded types.
@@ -67,10 +57,91 @@
#include "boost/variant/detail/substitute_fwd.hpp"
#if defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) \
- && !defined(BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT)
+ && !defined(BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT)
# define BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT
#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES
+//
+
+/*
+ GCC before 4.0 had no variadic tempaltes;
+ GCC 4.6 has incomplete implementation of variadic templates.
+
+ MSVC2013 has variadic templates, but they have issues.
+*/
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) \
+ || (defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 7)) \
+ || (defined(_MSC_VER) && (_MSC_VER <= 1800)) \
+ || defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) \
+ || defined (BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT)
+
+#ifndef BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES
+# define BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES
+#endif
+
+#endif
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+#include <boost/preprocessor/seq/size.hpp>
+
+#define BOOST_VARIANT_CLASS_OR_TYPENAME_TO_SEQ_class class)(
+#define BOOST_VARIANT_CLASS_OR_TYPENAME_TO_SEQ_typename typename)(
+
+#define BOOST_VARIANT_CLASS_OR_TYPENAME_TO_VARIADIC_class class...
+#define BOOST_VARIANT_CLASS_OR_TYPENAME_TO_VARIADIC_typename typename...
+
+#define ARGS_VARIADER_1(x) x ## N...
+#define ARGS_VARIADER_2(x) BOOST_VARIANT_CLASS_OR_TYPENAME_TO_VARIADIC_ ## x ## N
+
+#define BOOST_VARIANT_MAKE_VARIADIC(sequence, x) BOOST_VARIANT_MAKE_VARIADIC_I(BOOST_PP_SEQ_SIZE(sequence), x)
+#define BOOST_VARIANT_MAKE_VARIADIC_I(argscount, x) BOOST_VARIANT_MAKE_VARIADIC_II(argscount, x)
+#define BOOST_VARIANT_MAKE_VARIADIC_II(argscount, orig) ARGS_VARIADER_ ## argscount(orig)
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_VARIANT_ENUM_PARAMS and BOOST_VARIANT_ENUM_SHIFTED_PARAMS
+//
+// Convenience macro for enumeration of variant params.
+// When variadic templates are available expands:
+// BOOST_VARIANT_ENUM_PARAMS(class Something) => class Something0, class... SomethingN
+// BOOST_VARIANT_ENUM_PARAMS(typename Something) => typename Something0, typename... SomethingN
+// BOOST_VARIANT_ENUM_PARAMS(Something) => Something0, SomethingN...
+// BOOST_VARIANT_ENUM_PARAMS(Something) => Something0, SomethingN...
+// BOOST_VARIANT_ENUM_SHIFTED_PARAMS(class Something) => class... SomethingN
+// BOOST_VARIANT_ENUM_SHIFTED_PARAMS(typename Something) => typename... SomethingN
+// BOOST_VARIANT_ENUM_SHIFTED_PARAMS(Something) => SomethingN...
+// BOOST_VARIANT_ENUM_SHIFTED_PARAMS(Something) => SomethingN...
+//
+// Rationale: Cleaner, simpler code for clients of variant library. Minimal
+// code modifications to move from C++03 to C++11.
+//
+// With BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES defined
+// will be used BOOST_VARIANT_ENUM_PARAMS and BOOST_VARIANT_ENUM_SHIFTED_PARAMS from below `#else`
+//
+
+#define BOOST_VARIANT_ENUM_PARAMS(x) \
+ x ## 0, \
+ BOOST_VARIANT_MAKE_VARIADIC( (BOOST_VARIANT_CLASS_OR_TYPENAME_TO_SEQ_ ## x), x) \
+ /**/
+
+#define BOOST_VARIANT_ENUM_SHIFTED_PARAMS(x) \
+ BOOST_VARIANT_MAKE_VARIADIC( (BOOST_VARIANT_CLASS_OR_TYPENAME_TO_SEQ_ ## x), x) \
+ /**/
+
+#else // defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_LIMIT_TYPES
+//
+// Implementation-defined preprocessor symbol describing the actual
+// length of variant's pseudo-variadic template parameter list.
+//
+#include "boost/mpl/limits/list.hpp"
+#define BOOST_VARIANT_LIMIT_TYPES \
+ BOOST_MPL_LIMIT_LIST_SIZE
+
///////////////////////////////////////////////////////////////////////////////
// macro BOOST_VARIANT_RECURSIVE_VARIANT_MAX_ARITY
//
@@ -100,6 +171,8 @@
#define BOOST_VARIANT_ENUM_SHIFTED_PARAMS( param ) \
BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_VARIANT_LIMIT_TYPES, param)
+#endif // BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES workaround
+
namespace boost {
@@ -139,7 +212,6 @@ struct convert_void< void_ >
//
#if defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
-
// (detail) tags voidNN -- NN defined on [0, BOOST_VARIANT_LIMIT_TYPES)
//
// Defines void types that are each unique and specializations of
@@ -168,6 +240,10 @@ BOOST_PP_REPEAT(
}} // namespace detail::variant
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+# define BOOST_VARIANT_AUX_DECLARE_PARAMS BOOST_VARIANT_ENUM_PARAMS(typename T)
+#else // defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+
///////////////////////////////////////////////////////////////////////////////
// (detail) macro BOOST_VARIANT_AUX_DECLARE_PARAM
//
@@ -196,6 +272,8 @@ BOOST_PP_REPEAT(
) \
/**/
+#endif // BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES workaround
+
///////////////////////////////////////////////////////////////////////////////
// class template variant (concept inspired by Andrei Alexandrescu)
//
diff --git a/3party/boost/boost/variant/visitor_ptr.hpp b/3party/boost/boost/variant/visitor_ptr.hpp
index b49a97290a..4ddb921279 100644
--- a/3party/boost/boost/variant/visitor_ptr.hpp
+++ b/3party/boost/boost/variant/visitor_ptr.hpp
@@ -18,6 +18,7 @@
#include "boost/mpl/eval_if.hpp"
#include "boost/mpl/identity.hpp"
+#include "boost/throw_exception.hpp"
#include "boost/type_traits/add_reference.hpp"
#include "boost/type_traits/is_reference.hpp"
#include "boost/type_traits/is_void.hpp"
@@ -54,7 +55,7 @@ private: // private typedefs
public: // structors
- explicit visitor_ptr_t(visitor_t visitor)
+ explicit visitor_ptr_t(visitor_t visitor) BOOST_NOEXCEPT
: visitor_(visitor)
{
}
@@ -64,7 +65,7 @@ public: // static visitor interfaces
template <typename U>
result_type operator()(const U&) const
{
- throw bad_visit();
+ boost::throw_exception(bad_visit());
}
#if !defined(BOOST_NO_VOID_RETURNS)
diff --git a/3party/boost/boost/version.hpp b/3party/boost/boost/version.hpp
index d3826c2cb7..fc4c969791 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 105400
+#define BOOST_VERSION 105600
//
// 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 <config/auto_link.hpp> to select which library version to link to.
-#define BOOST_LIB_VERSION "1_54"
+#define BOOST_LIB_VERSION "1_56"
#endif
diff --git a/3party/boost/boost/visit_each.hpp b/3party/boost/boost/visit_each.hpp
index 1fc8a50088..6463ca9c2f 100644
--- a/3party/boost/boost/visit_each.hpp
+++ b/3party/boost/boost/visit_each.hpp
@@ -10,8 +10,6 @@
#ifndef BOOST_VISIT_EACH_HPP
#define BOOST_VISIT_EACH_HPP
-#include <boost/config.hpp>
-
namespace boost {
template<typename Visitor, typename T>
inline void visit_each(Visitor& visitor, const T& t, long)
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 e261545323..0d3e0257dc 100644
--- a/3party/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp
+++ b/3party/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp
@@ -394,7 +394,7 @@ token_cache<typename lexer<IteratorT, PositionT, TokenT>::string_type> const
//
// 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
+// instantiates the lex_functor. But it 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
diff --git a/3party/boost/boost/wave/util/flex_string.hpp b/3party/boost/boost/wave/util/flex_string.hpp
index 321b6fbef0..21c7e75fd1 100644
--- a/3party/boost/boost/wave/util/flex_string.hpp
+++ b/3party/boost/boost/wave/util/flex_string.hpp
@@ -30,6 +30,10 @@
// #HK090523:
// - Incorporated the changes from latest version of flex_string as
// maintained in Loki
+//
+// #HK130910:
+// - Removed the getline implementation which was borrowed from the SGI
+// STL as the license for this code is not compatible with Boost.
#ifndef FLEX_STRING_INC_
#define FLEX_STRING_INC_
@@ -344,7 +348,7 @@ private:
// 11-17-2000: comment added:
// No need to allocate (capacity + 1) to
// accommodate the terminating 0, because Data already
- // has one one character in there
+ // has one character in there
pData_ = static_cast<Data*>(
malloc(sizeof(Data) + capacity * sizeof(E)));
if (!pData_) boost::throw_exception(std::bad_alloc());
@@ -2525,78 +2529,6 @@ operator<<(
const flex_string<E, T, A, S>& str)
{ return os << str.c_str(); }
-
-// The getline below implementations are from the SGI STL (http://www.sgi.com/tech/stl/)
-// and come with the following copyright:
-//
-// Permission to use, copy, modify, distribute and sell this software and its
-// documentation for any purpose is hereby granted without fee, provided that
-// the below copyright notice appears in all copies and that both the copyright
-// notice and this permission notice appear in supporting documentation. Silicon
-// Graphics makes no representations about the suitability of this software for
-// any purpose. It is provided "as is" without express or implied warranty.
-//
-// Copyright (c) 1997-1999
-// Silicon Graphics Computer Systems, Inc.
-//
-// Copyright (c) 1994
-// Hewlett-Packard Company
-
-template <typename E, class T, class A, class S>
-std::basic_istream<typename flex_string<E, T, A, S>::value_type,
- typename flex_string<E, T, A, S>::traits_type>&
-getline(
- std::basic_istream<typename flex_string<E, T, A, S>::value_type,
- typename flex_string<E, T, A, S>::traits_type>& is,
- flex_string<E, T, A, S>& str,
- typename flex_string<E, T, A, S>::value_type delim)
-{
- size_t nread = 0;
- typename std::basic_istream<typename flex_string<E, T, A, S>::value_type,
- typename flex_string<E, T, A, S>::traits_type>::sentry sentry(is, true);
-
- if (sentry) {
- std::basic_streambuf<typename flex_string<E, T, A, S>::value_type,
- typename flex_string<E, T, A, S>::traits_type>* buf = is.rdbuf();
- str.clear();
-
- while (nread < str.max_size()) {
- int c1 = buf->sbumpc();
- if (flex_string<E, T, A, S>::traits_type::eq_int_type(c1,
- flex_string<E, T, A, S>::traits_type::eof()))
- {
- is.setstate(std::ios_base::eofbit);
- break;
- }
- else {
- ++nread;
- typename flex_string<E, T, A, S>::value_type c =
- flex_string<E, T, A, S>::traits_type::to_char_type(c1);
-
- if (!flex_string<E, T, A, S>::traits_type::eq(c, delim))
- str.push_back(c);
- else
- break; // Character is extracted but not appended.
- }
- }
- }
- if (nread == 0 || nread >= str.max_size())
- is.setstate(std::ios_base::failbit);
-
- return is;
-}
-
-template <typename E, class T, class A, class S>
-std::basic_istream<typename flex_string<E, T, A, S>::value_type,
- typename flex_string<E, T, A, S>::traits_type>&
-getline(
- std::basic_istream<typename flex_string<E, T, A, S>::value_type,
- typename flex_string<E, T, A, S>::traits_type>& is,
- flex_string<E, T, A, S>& str)
-{
- return getline(is, str, is.widen('\n'));
-}
-
template <typename E1, class T, class A, class S>
const typename flex_string<E1, T, A, S>::size_type
flex_string<E1, T, A, S>::npos = (typename flex_string<E1, T, A, S>::size_type)(-1);
diff --git a/3party/boost/boost/xpressive/basic_regex.hpp b/3party/boost/boost/xpressive/basic_regex.hpp
index eedcd9a547..2679d8e850 100644
--- a/3party/boost/boost/xpressive/basic_regex.hpp
+++ b/3party/boost/boost/xpressive/basic_regex.hpp
@@ -11,7 +11,7 @@
#define BOOST_XPRESSIVE_BASIC_REGEX_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/access.hpp b/3party/boost/boost/xpressive/detail/core/access.hpp
index d984a432fa..d903039663 100644
--- a/3party/boost/boost/xpressive/detail/core/access.hpp
+++ b/3party/boost/boost/xpressive/detail/core/access.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_ACCESS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/action.hpp b/3party/boost/boost/xpressive/detail/core/action.hpp
index bb54ee5f74..780fa165f9 100644
--- a/3party/boost/boost/xpressive/detail/core/action.hpp
+++ b/3party/boost/boost/xpressive/detail/core/action.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_ACTION_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/adaptor.hpp b/3party/boost/boost/xpressive/detail/core/adaptor.hpp
index 28aaa23247..2ba0786b22 100644
--- a/3party/boost/boost/xpressive/detail/core/adaptor.hpp
+++ b/3party/boost/boost/xpressive/detail/core/adaptor.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_ADAPTOR_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -37,8 +37,7 @@ struct xpression_adaptor
Xpr xpr_;
xpression_adaptor(Xpr const &xpr)
- #if BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4)) \
- && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
+ #if BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4))
// Ugh, gcc has an optimizer bug which elides this c'tor call
// resulting in pure virtual function calls.
__attribute__((__noinline__))
diff --git a/3party/boost/boost/xpressive/detail/core/finder.hpp b/3party/boost/boost/xpressive/detail/core/finder.hpp
index 56c6422719..de50bda5f5 100644
--- a/3party/boost/boost/xpressive/detail/core/finder.hpp
+++ b/3party/boost/boost/xpressive/detail/core/finder.hpp
@@ -8,7 +8,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_FINDER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4189) // local variable is initialized but not referenced
@@ -214,7 +214,7 @@ private:
}}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/flow_control.hpp b/3party/boost/boost/xpressive/detail/core/flow_control.hpp
index 2ca5156525..e6d8fdb3d2 100644
--- a/3party/boost/boost/xpressive/detail/core/flow_control.hpp
+++ b/3party/boost/boost/xpressive/detail/core/flow_control.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_FLOW_CONTROL_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/linker.hpp b/3party/boost/boost/xpressive/detail/core/linker.hpp
index e87e26d125..49b97646eb 100644
--- a/3party/boost/boost/xpressive/detail/core/linker.hpp
+++ b/3party/boost/boost/xpressive/detail/core/linker.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_LINKER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/list.hpp b/3party/boost/boost/xpressive/detail/core/list.hpp
index f2135408ec..65928cc79b 100644
--- a/3party/boost/boost/xpressive/detail/core/list.hpp
+++ b/3party/boost/boost/xpressive/detail/core/list.hpp
@@ -12,7 +12,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_LIST_HPP_EAN_10_26_2009
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/action_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/action_matcher.hpp
index 37180112f5..af960f1217 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/action_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/action_matcher.hpp
@@ -12,7 +12,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ACTION_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp
index e0ae2ad283..33446396a2 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ALTERNATE_END_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4100) // unreferenced formal parameter
@@ -44,7 +44,7 @@ namespace boost { namespace xpressive { namespace detail
}}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/alternate_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/alternate_matcher.hpp
index 10e57ad6d1..878b535587 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/alternate_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/alternate_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ALTERNATE_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/any_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/any_matcher.hpp
index 5c5336639f..f5a37ca57b 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/any_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/any_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ANY_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp
index a7c0c8cdc5..1ea6e722e8 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_BOL_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp
index 00b63b0280..7a8f52f5cd 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_BOS_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp
index abceb952e0..f643ff8744 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_EOL_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp
index a0acbdd369..76f69badeb 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_EOS_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/assert_line_base.hpp b/3party/boost/boost/xpressive/detail/core/matcher/assert_line_base.hpp
index e10d90971a..2b6126a619 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/assert_line_base.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/assert_line_base.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_DETAIL_ASSERT_LINE_BASE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp
index 444d88a5df..138e07801e 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_WORD_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/attr_begin_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/attr_begin_matcher.hpp
index 86d48a4d39..c4c4a3dcc7 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/attr_begin_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/attr_begin_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ATTR_BEGIN_MATCHER_HPP_EAN_06_09_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/attr_end_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/attr_end_matcher.hpp
index 1ad23c28b9..aac98da458 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/attr_end_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/attr_end_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ATTR_END_MATCHER_HPP_EAN_06_09_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/attr_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/attr_matcher.hpp
index 7d8e67281a..8a80f25ac2 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/attr_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/attr_matcher.hpp
@@ -12,7 +12,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ATTR_MATCHER_HPP_EAN_06_09_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/charset_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/charset_matcher.hpp
index 66d1d298f2..7e0ac2dd16 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/charset_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/charset_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_CHARSET_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/end_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/end_matcher.hpp
index 2b10db4a18..c612980039 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/end_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/end_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_END_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/epsilon_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/epsilon_matcher.hpp
index 3452b3462d..5d1e129512 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/epsilon_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/epsilon_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_EPSILON_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/keeper_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/keeper_matcher.hpp
index d4b31e47e1..172f01ece8 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/keeper_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/keeper_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_KEEPER_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/literal_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/literal_matcher.hpp
index ee862363a0..1558457ef3 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/literal_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/literal_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_LITERAL_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp
index be490f603c..a502f0f8a2 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_LOGICAL_NEWLINE_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/lookahead_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/lookahead_matcher.hpp
index 06f25e45e2..e1af38a381 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/lookahead_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/lookahead_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_LOOKAHEAD_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp
index e75f5ed78f..5642fe6eb1 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_LOOKBEHIND_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp
index b73608a38f..f42072e8b0 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_MARK_BEGIN_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/mark_end_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/mark_end_matcher.hpp
index 1316c1dfad..7729997400 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/mark_end_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/mark_end_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_MARK_END_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/mark_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/mark_matcher.hpp
index a4696e1938..e4c33ca81e 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/mark_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/mark_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_MARK_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/optional_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/optional_matcher.hpp
index ab4ac59840..c5b991e104 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/optional_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/optional_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_OPTIONAL_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp
index 19e87bf42f..aaef366bf0 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_POSIX_CHARSET_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/predicate_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/predicate_matcher.hpp
index eced1c7643..ad5e0c898b 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/predicate_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/predicate_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_PREDICATE_MATCHER_HPP_EAN_03_22_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/range_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/range_matcher.hpp
index 2f2c6974d8..1ebd5fca14 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/range_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/range_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_RANGE_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4100) // unreferenced formal parameter
@@ -80,7 +80,7 @@ namespace boost { namespace xpressive { namespace detail
}}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp
index f92820424e..6a7d8c3059 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_REGEX_BYREF_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/regex_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/regex_matcher.hpp
index e7eee7d3ea..f7fa0c2352 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/regex_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/regex_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_REGEX_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp
index bcc59ee70f..b962c4c261 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_REPEAT_BEGIN_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp
index c2dc4495b5..17c0ec2e55 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_REPEAT_END_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/set_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/set_matcher.hpp
index 124a545fe7..d300232e3d 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/set_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/set_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_SET_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4127) // conditional expression constant
@@ -91,7 +91,7 @@ struct set_initializer
{
};
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp
index 26610f2868..4a1085b26c 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_SIMPLE_REPEAT_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/string_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/string_matcher.hpp
index 02b538c249..c49e7ac924 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/string_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/string_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_STRING_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matcher/true_matcher.hpp b/3party/boost/boost/xpressive/detail/core/matcher/true_matcher.hpp
index df45e47d21..77c53a489e 100644
--- a/3party/boost/boost/xpressive/detail/core/matcher/true_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matcher/true_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_TRUE_MATCHER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/matchers.hpp b/3party/boost/boost/xpressive/detail/core/matchers.hpp
index 8363ce0c1d..2004cfb245 100644
--- a/3party/boost/boost/xpressive/detail/core/matchers.hpp
+++ b/3party/boost/boost/xpressive/detail/core/matchers.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHERS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/peeker.hpp b/3party/boost/boost/xpressive/detail/core/peeker.hpp
index 45183fc49c..d7239cc202 100644
--- a/3party/boost/boost/xpressive/detail/core/peeker.hpp
+++ b/3party/boost/boost/xpressive/detail/core/peeker.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_PEEKER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/quant_style.hpp b/3party/boost/boost/xpressive/detail/core/quant_style.hpp
index ae3b0cfdc7..1e67aec846 100644
--- a/3party/boost/boost/xpressive/detail/core/quant_style.hpp
+++ b/3party/boost/boost/xpressive/detail/core/quant_style.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_QUANT_STYLE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/regex_impl.hpp b/3party/boost/boost/xpressive/detail/core/regex_impl.hpp
index 8c3194632b..ba9a96af66 100644
--- a/3party/boost/boost/xpressive/detail/core/regex_impl.hpp
+++ b/3party/boost/boost/xpressive/detail/core/regex_impl.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_REGEX_IMPL_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/results_cache.hpp b/3party/boost/boost/xpressive/detail/core/results_cache.hpp
index 702c61e7d3..7abfdc83b7 100644
--- a/3party/boost/boost/xpressive/detail/core/results_cache.hpp
+++ b/3party/boost/boost/xpressive/detail/core/results_cache.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_RESULTS_CACHE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/state.hpp b/3party/boost/boost/xpressive/detail/core/state.hpp
index e20c91572e..81d641d0af 100644
--- a/3party/boost/boost/xpressive/detail/core/state.hpp
+++ b/3party/boost/boost/xpressive/detail/core/state.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_STATE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/sub_match_impl.hpp b/3party/boost/boost/xpressive/detail/core/sub_match_impl.hpp
index 0301dd48eb..898a4947ef 100644
--- a/3party/boost/boost/xpressive/detail/core/sub_match_impl.hpp
+++ b/3party/boost/boost/xpressive/detail/core/sub_match_impl.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_SUB_MATCH_IMPL_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/core/sub_match_vector.hpp b/3party/boost/boost/xpressive/detail/core/sub_match_vector.hpp
index d10ee7641c..704938cbac 100644
--- a/3party/boost/boost/xpressive/detail/core/sub_match_vector.hpp
+++ b/3party/boost/boost/xpressive/detail/core/sub_match_vector.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CORE_SUB_MATCH_VECTOR_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/detail_fwd.hpp b/3party/boost/boost/xpressive/detail/detail_fwd.hpp
index 52deaae9a8..22bd5a02a2 100644
--- a/3party/boost/boost/xpressive/detail/detail_fwd.hpp
+++ b/3party/boost/boost/xpressive/detail/detail_fwd.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_DETAIL_FWD_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/dynamic/dynamic.hpp b/3party/boost/boost/xpressive/detail/dynamic/dynamic.hpp
index afbff0c145..62e418ada4 100644
--- a/3party/boost/boost/xpressive/detail/dynamic/dynamic.hpp
+++ b/3party/boost/boost/xpressive/detail/dynamic/dynamic.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_DYNAMIC_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/dynamic/matchable.hpp b/3party/boost/boost/xpressive/detail/dynamic/matchable.hpp
index 320bc698af..785bb8afa6 100644
--- a/3party/boost/boost/xpressive/detail/dynamic/matchable.hpp
+++ b/3party/boost/boost/xpressive/detail/dynamic/matchable.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_MATCHABLE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/dynamic/parse_charset.hpp b/3party/boost/boost/xpressive/detail/dynamic/parse_charset.hpp
index d4e3671d4b..972c09be71 100644
--- a/3party/boost/boost/xpressive/detail/dynamic/parse_charset.hpp
+++ b/3party/boost/boost/xpressive/detail/dynamic/parse_charset.hpp
@@ -9,10 +9,11 @@
#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_PARSE_CHARSET_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
+#include <boost/config.hpp>
#include <boost/integer.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/throw_exception.hpp>
@@ -198,7 +199,7 @@ inline void parse_charset
using namespace regex_constants;
typedef typename RegexTraits::char_type char_type;
typedef typename RegexTraits::char_class_type char_class_type;
- BOOST_ASSERT(begin != end);
+ BOOST_XPR_ENSURE_(begin != end, error_brack, "unexpected end of pattern found");
RegexTraits const &rxtraits = tr.traits();
bool const icase = (0 != (regex_constants::icase_ & tr.flags()));
FwdIter iprev = FwdIter();
@@ -246,6 +247,7 @@ inline void parse_charset
case token_charset_hyphen:
case token_charset_invert:
begin = iprev2; // un-get these tokens and fall through
+ BOOST_FALLTHROUGH;
case token_literal:
ch_next = *begin++;
BOOST_XPR_ENSURE_(ch_prev <= ch_next, error_range, "invalid charset range");
@@ -264,7 +266,8 @@ inline void parse_charset
chset.set_range(ch_prev, esc.ch_, rxtraits, icase);
continue;
}
- case token_charset_end: // fall through
+ BOOST_FALLTHROUGH;
+ case token_charset_end:
default: // not a range.
begin = iprev; // backup to hyphen token
chset.set_char(ch_prev, rxtraits, icase);
diff --git a/3party/boost/boost/xpressive/detail/dynamic/parser.hpp b/3party/boost/boost/xpressive/detail/dynamic/parser.hpp
index 0c25f33346..00d4bbf375 100644
--- a/3party/boost/boost/xpressive/detail/dynamic/parser.hpp
+++ b/3party/boost/boost/xpressive/detail/dynamic/parser.hpp
@@ -11,7 +11,7 @@
#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_PARSER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4127) // conditional expression is constant
@@ -328,7 +328,6 @@ inline sequence<BidiIter> make_assert_end_line
template<typename BidiIter, typename Cond, typename Traits>
inline sequence<BidiIter> make_assert_word(Cond, Traits const &tr)
{
- typedef typename iterator_value<BidiIter>::type char_type;
return detail::make_dynamic<BidiIter>
(
detail::assert_word_matcher<Cond, Traits>(tr)
@@ -353,7 +352,7 @@ inline sequence<BidiIter> make_independent_end_xpression(bool pure)
}}} // namespace boost::xpressive::detail
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/dynamic/parser_enum.hpp b/3party/boost/boost/xpressive/detail/dynamic/parser_enum.hpp
index 521f723b11..3c738cc925 100644
--- a/3party/boost/boost/xpressive/detail/dynamic/parser_enum.hpp
+++ b/3party/boost/boost/xpressive/detail/dynamic/parser_enum.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_PARSER_ENUM_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/dynamic/parser_traits.hpp b/3party/boost/boost/xpressive/detail/dynamic/parser_traits.hpp
index 6c3e152cac..ab2544c4af 100644
--- a/3party/boost/boost/xpressive/detail/dynamic/parser_traits.hpp
+++ b/3party/boost/boost/xpressive/detail/dynamic/parser_traits.hpp
@@ -9,12 +9,13 @@
#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_PARSER_TRAITS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <string>
#include <climits>
+#include <boost/config.hpp>
#include <boost/assert.hpp>
#include <boost/throw_exception.hpp>
#include <boost/xpressive/regex_error.hpp>
@@ -394,9 +395,9 @@ private:
case BOOST_XPR_CHAR_(char_type, 'm'): this->flag_(!set, single_line); break;
case BOOST_XPR_CHAR_(char_type, 's'): this->flag_(!set, not_dot_newline); break;
case BOOST_XPR_CHAR_(char_type, 'x'): this->flag_(set, ignore_white_space); break;
- case BOOST_XPR_CHAR_(char_type, ':'): ++begin; // fall-through
+ case BOOST_XPR_CHAR_(char_type, ':'): ++begin; BOOST_FALLTHROUGH;
case BOOST_XPR_CHAR_(char_type, ')'): return token_no_mark;
- case BOOST_XPR_CHAR_(char_type, '-'): if(false == (set = !set)) break; // else fall-through
+ case BOOST_XPR_CHAR_(char_type, '-'): if(false == (set = !set)) break; BOOST_FALLTHROUGH;
default: BOOST_THROW_EXCEPTION(regex_error(error_paren, "unknown pattern modifier"));
}
while(BOOST_XPR_ENSURE_(++begin != end, error_paren, "incomplete extension"));
diff --git a/3party/boost/boost/xpressive/detail/dynamic/sequence.hpp b/3party/boost/boost/xpressive/detail/dynamic/sequence.hpp
index f1670f683b..902f288e69 100644
--- a/3party/boost/boost/xpressive/detail/dynamic/sequence.hpp
+++ b/3party/boost/boost/xpressive/detail/dynamic/sequence.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_SEQUENCE_HPP_EAN_04_10_2006
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/compile.hpp b/3party/boost/boost/xpressive/detail/static/compile.hpp
index bc8af05bf4..0ce5a5adf3 100644
--- a/3party/boost/boost/xpressive/detail/static/compile.hpp
+++ b/3party/boost/boost/xpressive/detail/static/compile.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_COMPILE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/grammar.hpp b/3party/boost/boost/xpressive/detail/static/grammar.hpp
index 82d1adc3c7..6ffccdd7d4 100644
--- a/3party/boost/boost/xpressive/detail/static/grammar.hpp
+++ b/3party/boost/boost/xpressive/detail/static/grammar.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_GRAMMAR_HPP_EAN_11_12_2006
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/is_pure.hpp b/3party/boost/boost/xpressive/detail/static/is_pure.hpp
index f7da4f04bb..61737fcba0 100644
--- a/3party/boost/boost/xpressive/detail/static/is_pure.hpp
+++ b/3party/boost/boost/xpressive/detail/static/is_pure.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_IS_PURE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/modifier.hpp b/3party/boost/boost/xpressive/detail/static/modifier.hpp
index 82e4a76faf..fc8ad94866 100644
--- a/3party/boost/boost/xpressive/detail/static/modifier.hpp
+++ b/3party/boost/boost/xpressive/detail/static/modifier.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_MODIFIER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4510) // default constructor could not be generated
@@ -59,7 +59,7 @@ namespace boost { namespace xpressive { namespace detail
}}}
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/placeholders.hpp b/3party/boost/boost/xpressive/detail/static/placeholders.hpp
index 5c95538430..6523fe7ae5 100644
--- a/3party/boost/boost/xpressive/detail/static/placeholders.hpp
+++ b/3party/boost/boost/xpressive/detail/static/placeholders.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_PLACEHOLDERS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable:4510) // default constructor could not be generated
@@ -113,7 +113,7 @@ struct attribute_placeholder
}}} // namespace boost::xpressive::detail
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/static.hpp b/3party/boost/boost/xpressive/detail/static/static.hpp
index ed51b517aa..d967deb74b 100644
--- a/3party/boost/boost/xpressive/detail/static/static.hpp
+++ b/3party/boost/boost/xpressive/detail/static/static.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_STATIC_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_action.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_action.hpp
index 4cda17bc23..daaf685820 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_action.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_action.hpp
@@ -12,7 +12,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_ACTION_HPP_EAN_04_05_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_alternate.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_alternate.hpp
index 521bb861e9..21014c5174 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_alternate.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_alternate.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_ALTERNATE_HPP_EAN_04_01_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_independent.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_independent.hpp
index 0001273575..4740b54f2c 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_independent.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_independent.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_INDEPENDENT_HPP_EAN_04_05_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_inverse.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_inverse.hpp
index eef2d2e440..b9c212fe03 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_inverse.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_inverse.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_INVERSE_HPP_EAN_04_05_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_marker.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_marker.hpp
index 49ef8be124..7e7078192d 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_marker.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_marker.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_MARKER_HPP_EAN_04_01_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_matcher.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_matcher.hpp
index f8c6236196..e49b4eb063 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_matcher.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_matcher.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_MATCHER_HPP_EAN_04_01_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_modifier.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_modifier.hpp
index 6b1c587ab0..8f81391091 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_modifier.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_modifier.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_MODIFIER_HPP_EAN_04_05_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_quantifier.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_quantifier.hpp
index 5770a8ed14..fd7773f3c0 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_quantifier.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_quantifier.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_QUANTIFIER_HPP_EAN_04_01_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_sequence.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_sequence.hpp
index 62301618f1..1f4528dea9 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_sequence.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_sequence.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_SEQUENCE_HPP_EAN_04_01_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transforms/as_set.hpp b/3party/boost/boost/xpressive/detail/static/transforms/as_set.hpp
index 6d5c252610..ddc2bc232c 100644
--- a/3party/boost/boost/xpressive/detail/static/transforms/as_set.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transforms/as_set.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSFORMS_AS_SET_HPP_EAN_04_05_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/transmogrify.hpp b/3party/boost/boost/xpressive/detail/static/transmogrify.hpp
index 67f6588c22..5016416c73 100644
--- a/3party/boost/boost/xpressive/detail/static/transmogrify.hpp
+++ b/3party/boost/boost/xpressive/detail/static/transmogrify.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TRANSMOGRIFY_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/type_traits.hpp b/3party/boost/boost/xpressive/detail/static/type_traits.hpp
index 15f00a4243..ebb723727f 100644
--- a/3party/boost/boost/xpressive/detail/static/type_traits.hpp
+++ b/3party/boost/boost/xpressive/detail/static/type_traits.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_TYPE_TRAITS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/visitor.hpp b/3party/boost/boost/xpressive/detail/static/visitor.hpp
index 5a0213f695..46fd6c1641 100644
--- a/3party/boost/boost/xpressive/detail/static/visitor.hpp
+++ b/3party/boost/boost/xpressive/detail/static/visitor.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_VISITOR_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/static/width_of.hpp b/3party/boost/boost/xpressive/detail/static/width_of.hpp
index f7f6f9ecd5..819e2f9ddc 100644
--- a/3party/boost/boost/xpressive/detail/static/width_of.hpp
+++ b/3party/boost/boost/xpressive/detail/static/width_of.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_STATIC_WIDTH_OF_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/algorithm.hpp b/3party/boost/boost/xpressive/detail/utility/algorithm.hpp
index af722909c3..b72bb2a35b 100644
--- a/3party/boost/boost/xpressive/detail/utility/algorithm.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/algorithm.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_UTILITY_ALGORITHM_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/boyer_moore.hpp b/3party/boost/boost/xpressive/detail/utility/boyer_moore.hpp
index 08ca600b84..d05e38752c 100644
--- a/3party/boost/boost/xpressive/detail/utility/boyer_moore.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/boyer_moore.hpp
@@ -12,7 +12,7 @@
#define BOOST_XPRESSIVE_DETAIL_BOYER_MOORE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4100) // unreferenced formal parameter
@@ -191,7 +191,7 @@ private:
}}} // namespace boost::xpressive::detail
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/chset/chset.hpp b/3party/boost/boost/xpressive/detail/utility/chset/chset.hpp
index c10d466772..139eb6b571 100644
--- a/3party/boost/boost/xpressive/detail/utility/chset/chset.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/chset/chset.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_CHSET_CHSET_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/hash_peek_bitset.hpp b/3party/boost/boost/xpressive/detail/utility/hash_peek_bitset.hpp
index 56b41fc117..af671310d4 100644
--- a/3party/boost/boost/xpressive/detail/utility/hash_peek_bitset.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/hash_peek_bitset.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_HASH_PEEK_BITSET_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4100) // unreferenced formal parameter
@@ -171,7 +171,7 @@ private:
}}} // namespace boost::xpressive::detail
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/ignore_unused.hpp b/3party/boost/boost/xpressive/detail/utility/ignore_unused.hpp
index e7d3139f8a..e0b413d310 100644
--- a/3party/boost/boost/xpressive/detail/utility/ignore_unused.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/ignore_unused.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_UTILITY_IGNORE_UNUSED_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/literals.hpp b/3party/boost/boost/xpressive/detail/utility/literals.hpp
index 29ddefeb25..52a52b3941 100644
--- a/3party/boost/boost/xpressive/detail/utility/literals.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/literals.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_UTILITY_LITERALS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/save_restore.hpp b/3party/boost/boost/xpressive/detail/utility/save_restore.hpp
index a9c2a2407e..ac5039663d 100644
--- a/3party/boost/boost/xpressive/detail/utility/save_restore.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/save_restore.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_UTILITY_SAVE_RESTORE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/sequence_stack.hpp b/3party/boost/boost/xpressive/detail/utility/sequence_stack.hpp
index d9a2c596dd..baef2f209a 100644
--- a/3party/boost/boost/xpressive/detail/utility/sequence_stack.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/sequence_stack.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_SEQUENCE_STACK_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4127) // conditional expression constant
@@ -31,22 +31,29 @@ struct fill_t {} const fill = {};
template<typename T>
struct sequence_stack
{
-private:
- static T *allocate(std::size_t size, T const &t)
+ struct allocate_guard_t;
+ friend struct allocate_guard_t;
+ struct allocate_guard_t
{
- std::size_t i = 0;
- T *p = (T *)::operator new(size * sizeof(T));
- try
+ std::size_t i;
+ T *p;
+ bool dismissed;
+ ~allocate_guard_t()
{
- for(; i < size; ++i)
- ::new((void *)(p+i)) T(t);
+ if(!this->dismissed)
+ sequence_stack::deallocate(this->p, this->i);
}
- catch(...)
- {
- deallocate(p, i);
- throw;
- }
- return p;
+ };
+private:
+ static T *allocate(std::size_t size, T const &t)
+ {
+ allocate_guard_t guard = {0, (T *)::operator new(size * sizeof(T)), false};
+
+ for(; guard.i < size; ++guard.i)
+ ::new((void *)(guard.p + guard.i)) T(t);
+ guard.dismissed = true;
+
+ return guard.p;
}
static void deallocate(T *p, std::size_t i)
@@ -255,7 +262,7 @@ public:
}}} // namespace boost::xpressive::detail
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/symbols.hpp b/3party/boost/boost/xpressive/detail/utility/symbols.hpp
index 5efa4abab4..4b9e92bf12 100644
--- a/3party/boost/boost/xpressive/detail/utility/symbols.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/symbols.hpp
@@ -17,7 +17,7 @@
#define BOOST_XPRESSIVE_DETAIL_SYMBOLS_HPP_DRJ_06_11_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/tracking_ptr.hpp b/3party/boost/boost/xpressive/detail/utility/tracking_ptr.hpp
index c6a0353e1f..aa88e74523 100644
--- a/3party/boost/boost/xpressive/detail/utility/tracking_ptr.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/tracking_ptr.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_UTILITY_TRACKING_PTR_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/traits_utils.hpp b/3party/boost/boost/xpressive/detail/utility/traits_utils.hpp
index 18e3e609ff..6ede107e47 100644
--- a/3party/boost/boost/xpressive/detail/utility/traits_utils.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/traits_utils.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_UTILITY_TRAITS_UTILS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
# pragma warning(push)
# pragma warning(disable : 4100) // unreferenced formal parameter
@@ -138,7 +138,7 @@ namespace boost { namespace xpressive { namespace detail
}}} // namespace boost::xpressive::detail
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/detail/utility/width.hpp b/3party/boost/boost/xpressive/detail/utility/width.hpp
index 3fc10c76a5..f00063bc03 100644
--- a/3party/boost/boost/xpressive/detail/utility/width.hpp
+++ b/3party/boost/boost/xpressive/detail/utility/width.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_DETAIL_UTILITY_WIDTH_HPP_EAN_04_07_2006
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/match_results.hpp b/3party/boost/boost/xpressive/match_results.hpp
index d7873ca93c..e7923f87de 100644
--- a/3party/boost/boost/xpressive/match_results.hpp
+++ b/3party/boost/boost/xpressive/match_results.hpp
@@ -16,7 +16,7 @@
#define BOOST_XPRESSIVE_MATCH_RESULTS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -1096,11 +1096,12 @@ private:
case BOOST_XPR_CHAR_(char_type, ':'):
if(metacolon)
{
+ BOOST_FALLTHROUGH;
case BOOST_XPR_CHAR_(char_type, ')'):
++cur;
return out;
}
- // else fall-through
+ BOOST_FALLTHROUGH;
default:
*out++ = *cur++;
diff --git a/3party/boost/boost/xpressive/regex_actions.hpp b/3party/boost/boost/xpressive/regex_actions.hpp
index b5a6d7c8f8..5226e74bc4 100644
--- a/3party/boost/boost/xpressive/regex_actions.hpp
+++ b/3party/boost/boost/xpressive/regex_actions.hpp
@@ -10,7 +10,7 @@
#define BOOST_XPRESSIVE_ACTIONS_HPP_EAN_03_22_2007
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -28,6 +28,7 @@
#include <boost/type_traits/is_same.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/decay.hpp>
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/range/iterator_range.hpp>
@@ -51,14 +52,6 @@
# include <boost/xpressive/detail/core/matcher/action_matcher.hpp>
#endif
-/// INTERNAL ONLY
-///
-#define UNREF(x) typename remove_reference<x>::type
-
-/// INTERNAL ONLY
-///
-#define UNCVREF(x) typename remove_cv<typename remove_reference<x>::type>::type
-
#if BOOST_MSVC
#pragma warning(push)
#pragma warning(disable : 4510) // default constructor could not be generated
@@ -79,7 +72,7 @@ namespace boost { namespace xpressive
reference cast(void *pv) const
{
- return *static_cast<UNREF(T) *>(pv);
+ return *static_cast<typename remove_reference<T>::type *>(pv);
}
};
@@ -159,6 +152,7 @@ namespace boost { namespace xpressive
namespace op
{
+ /// \brief \c at is a PolymorphicFunctionObject for indexing into a sequence
struct at
{
BOOST_PROTO_CALLABLE()
@@ -166,27 +160,35 @@ namespace boost { namespace xpressive
struct result {};
template<typename This, typename Cont, typename Idx>
- struct result<This(Cont, Idx)>
- : result<This(Cont const &, Idx)>
+ struct result<This(Cont &, Idx)>
{
+ typedef typename Cont::reference type;
};
template<typename This, typename Cont, typename Idx>
- struct result<This(Cont &, Idx)>
- : mpl::if_c<
- is_const<Cont>::value
- , typename Cont::const_reference
- , typename Cont::reference
- >
+ struct result<This(Cont const &, Idx)>
+ {
+ typedef typename Cont::const_reference type;
+ };
+
+ template<typename This, typename Cont, typename Idx>
+ struct result<This(Cont, Idx)>
{
+ typedef typename Cont::const_reference type;
};
+ /// \pre \c Cont is a model of RandomAccessSequence
+ /// \param c The RandomAccessSequence to index into
+ /// \param idx The index
+ /// \return <tt>c[idx]</tt>
template<typename Cont, typename Idx>
typename Cont::reference operator()(Cont &c, Idx idx BOOST_PROTO_DISABLE_IF_IS_CONST(Cont)) const
{
return c[idx];
}
+ /// \overload
+ ///
template<typename Cont, typename Idx>
typename Cont::const_reference operator()(Cont const &c, Idx idx) const
{
@@ -194,11 +196,16 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c push is a PolymorphicFunctionObject for pushing an element into a container.
struct push
{
BOOST_PROTO_CALLABLE()
typedef void result_type;
+ /// \param seq The sequence into which the value should be pushed.
+ /// \param val The value to push into the sequence.
+ /// \brief Equivalent to <tt>seq.push(val)</tt>.
+ /// \return \c void
template<typename Sequence, typename Value>
void operator()(Sequence &seq, Value const &val) const
{
@@ -206,11 +213,16 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c push_back is a PolymorphicFunctionObject for pushing an element into the back of a container.
struct push_back
{
BOOST_PROTO_CALLABLE()
typedef void result_type;
+ /// \param seq The sequence into which the value should be pushed.
+ /// \param val The value to push into the sequence.
+ /// \brief Equivalent to <tt>seq.push_back(val)</tt>.
+ /// \return \c void
template<typename Sequence, typename Value>
void operator()(Sequence &seq, Value const &val) const
{
@@ -218,11 +230,16 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c push_front is a PolymorphicFunctionObject for pushing an element into the front of a container.
struct push_front
{
BOOST_PROTO_CALLABLE()
typedef void result_type;
+ /// \param seq The sequence into which the value should be pushed.
+ /// \param val The value to push into the sequence.
+ /// \brief Equivalent to <tt>seq.push_front(val)</tt>.
+ /// \return \c void
template<typename Sequence, typename Value>
void operator()(Sequence &seq, Value const &val) const
{
@@ -230,11 +247,15 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c pop is a PolymorphicFunctionObject for popping an element from a container.
struct pop
{
BOOST_PROTO_CALLABLE()
typedef void result_type;
+ /// \param seq The sequence from which to pop.
+ /// \brief Equivalent to <tt>seq.pop()</tt>.
+ /// \return \c void
template<typename Sequence>
void operator()(Sequence &seq) const
{
@@ -242,11 +263,15 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c pop_back is a PolymorphicFunctionObject for popping an element from the back of a container.
struct pop_back
{
BOOST_PROTO_CALLABLE()
typedef void result_type;
+ /// \param seq The sequence from which to pop.
+ /// \brief Equivalent to <tt>seq.pop_back()</tt>.
+ /// \return \c void
template<typename Sequence>
void operator()(Sequence &seq) const
{
@@ -254,11 +279,15 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c pop_front is a PolymorphicFunctionObject for popping an element from the front of a container.
struct pop_front
{
BOOST_PROTO_CALLABLE()
typedef void result_type;
+ /// \param seq The sequence from which to pop.
+ /// \brief Equivalent to <tt>seq.pop_front()</tt>.
+ /// \return \c void
template<typename Sequence>
void operator()(Sequence &seq) const
{
@@ -266,6 +295,7 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c front is a PolymorphicFunctionObject for fetching the front element of a container.
struct front
{
BOOST_PROTO_CALLABLE()
@@ -275,7 +305,7 @@ namespace boost { namespace xpressive
template<typename This, typename Sequence>
struct result<This(Sequence)>
{
- typedef UNREF(Sequence) sequence_type;
+ typedef typename remove_reference<Sequence>::type sequence_type;
typedef
typename mpl::if_c<
is_const<sequence_type>::value
@@ -285,6 +315,8 @@ namespace boost { namespace xpressive
type;
};
+ /// \param seq The sequence from which to fetch the front.
+ /// \return <tt>seq.front()</tt>
template<typename Sequence>
typename result<front(Sequence &)>::type operator()(Sequence &seq) const
{
@@ -292,6 +324,7 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c back is a PolymorphicFunctionObject for fetching the back element of a container.
struct back
{
BOOST_PROTO_CALLABLE()
@@ -301,7 +334,7 @@ namespace boost { namespace xpressive
template<typename This, typename Sequence>
struct result<This(Sequence)>
{
- typedef UNREF(Sequence) sequence_type;
+ typedef typename remove_reference<Sequence>::type sequence_type;
typedef
typename mpl::if_c<
is_const<sequence_type>::value
@@ -311,6 +344,8 @@ namespace boost { namespace xpressive
type;
};
+ /// \param seq The sequence from which to fetch the back.
+ /// \return <tt>seq.back()</tt>
template<typename Sequence>
typename result<back(Sequence &)>::type operator()(Sequence &seq) const
{
@@ -318,6 +353,7 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c top is a PolymorphicFunctionObject for fetching the top element of a stack.
struct top
{
BOOST_PROTO_CALLABLE()
@@ -327,7 +363,7 @@ namespace boost { namespace xpressive
template<typename This, typename Sequence>
struct result<This(Sequence)>
{
- typedef UNREF(Sequence) sequence_type;
+ typedef typename remove_reference<Sequence>::type sequence_type;
typedef
typename mpl::if_c<
is_const<sequence_type>::value
@@ -337,6 +373,8 @@ namespace boost { namespace xpressive
type;
};
+ /// \param seq The sequence from which to fetch the top.
+ /// \return <tt>seq.top()</tt>
template<typename Sequence>
typename result<top(Sequence &)>::type operator()(Sequence &seq) const
{
@@ -344,6 +382,7 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c first is a PolymorphicFunctionObject for fetching the first element of a pair.
struct first
{
BOOST_PROTO_CALLABLE()
@@ -353,9 +392,11 @@ namespace boost { namespace xpressive
template<typename This, typename Pair>
struct result<This(Pair)>
{
- typedef UNREF(Pair)::first_type type;
+ typedef typename remove_reference<Pair>::type::first_type type;
};
+ /// \param p The pair from which to fetch the first element.
+ /// \return <tt>p.first</tt>
template<typename Pair>
typename Pair::first_type operator()(Pair const &p) const
{
@@ -363,6 +404,7 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c second is a PolymorphicFunctionObject for fetching the second element of a pair.
struct second
{
BOOST_PROTO_CALLABLE()
@@ -372,9 +414,11 @@ namespace boost { namespace xpressive
template<typename This, typename Pair>
struct result<This(Pair)>
{
- typedef UNREF(Pair)::second_type type;
+ typedef typename remove_reference<Pair>::type::second_type type;
};
+ /// \param p The pair from which to fetch the second element.
+ /// \return <tt>p.second</tt>
template<typename Pair>
typename Pair::second_type operator()(Pair const &p) const
{
@@ -382,11 +426,15 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c matched is a PolymorphicFunctionObject for assessing whether a \c sub_match object
+ /// matched or not.
struct matched
{
BOOST_PROTO_CALLABLE()
typedef bool result_type;
+ /// \param sub The \c sub_match object.
+ /// \return <tt>sub.matched</tt>
template<typename Sub>
bool operator()(Sub const &sub) const
{
@@ -394,6 +442,7 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c length is a PolymorphicFunctionObject for fetching the length of \c sub_match.
struct length
{
BOOST_PROTO_CALLABLE()
@@ -403,9 +452,11 @@ namespace boost { namespace xpressive
template<typename This, typename Sub>
struct result<This(Sub)>
{
- typedef UNREF(Sub)::difference_type type;
+ typedef typename remove_reference<Sub>::type::difference_type type;
};
+ /// \param sub The \c sub_match object.
+ /// \return <tt>sub.length()</tt>
template<typename Sub>
typename Sub::difference_type operator()(Sub const &sub) const
{
@@ -413,6 +464,8 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c str is a PolymorphicFunctionObject for turning a \c sub_match into an
+ /// equivalent \c std::string.
struct str
{
BOOST_PROTO_CALLABLE()
@@ -422,9 +475,11 @@ namespace boost { namespace xpressive
template<typename This, typename Sub>
struct result<This(Sub)>
{
- typedef UNREF(Sub)::string_type type;
+ typedef typename remove_reference<Sub>::type::string_type type;
};
+ /// \param sub The \c sub_match object.
+ /// \return <tt>sub.str()</tt>
template<typename Sub>
typename Sub::string_type operator()(Sub const &sub) const
{
@@ -435,75 +490,116 @@ namespace boost { namespace xpressive
// This codifies the return types of the various insert member
// functions found in sequence containers, the 2 flavors of
// associative containers, and strings.
+ //
+ /// \brief \c insert is a PolymorphicFunctionObject for inserting a value or a
+ /// sequence of values into a sequence container, an associative
+ /// container, or a string.
struct insert
{
BOOST_PROTO_CALLABLE()
- template<typename Sig, typename EnableIf = void>
- struct result
- {};
-
- // assoc containers
- template<typename This, typename Cont, typename Value>
- struct result<This(Cont, Value), void>
- {
- typedef UNREF(Cont) cont_type;
- typedef UNREF(Value) value_type;
- static cont_type &scont_;
- static value_type &svalue_;
- typedef char yes_type;
- typedef char (&no_type)[2];
- static yes_type check_insert_return(typename cont_type::iterator);
- static no_type check_insert_return(std::pair<typename cont_type::iterator, bool>);
- BOOST_STATIC_CONSTANT(bool, is_iterator = (sizeof(yes_type) == sizeof(check_insert_return(scont_.insert(svalue_)))));
- typedef
- typename mpl::if_c<
- is_iterator
- , typename cont_type::iterator
- , std::pair<typename cont_type::iterator, bool>
- >::type
- type;
- };
-
- // sequence containers, assoc containers, strings
- template<typename This, typename Cont, typename It, typename Value>
- struct result<This(Cont, It, Value),
- typename disable_if<mpl::or_<is_integral<UNCVREF(It)>, is_same<UNCVREF(It), UNCVREF(Value)> > >::type>
- {
- typedef UNREF(Cont)::iterator type;
- };
-
- // strings
- template<typename This, typename Cont, typename Size, typename T>
- struct result<This(Cont, Size, T),
- typename enable_if<is_integral<UNCVREF(Size)> >::type>
- {
- typedef UNREF(Cont) &type;
- };
- // assoc containers
- template<typename This, typename Cont, typename It>
- struct result<This(Cont, It, It), void>
- {
- typedef void type;
- };
-
- // sequence containers, strings
- template<typename This, typename Cont, typename It, typename Size, typename Value>
- struct result<This(Cont, It, Size, Value),
- typename disable_if<is_integral<UNCVREF(It)> >::type>
+ /// INTERNAL ONLY
+ ///
+ struct detail
{
- typedef void type;
+ template<typename Sig, typename EnableIf = void>
+ struct result_detail
+ {};
+
+ // assoc containers
+ template<typename This, typename Cont, typename Value>
+ struct result_detail<This(Cont, Value), void>
+ {
+ typedef typename remove_reference<Cont>::type cont_type;
+ typedef typename remove_reference<Value>::type value_type;
+ static cont_type &scont_;
+ static value_type &svalue_;
+ typedef char yes_type;
+ typedef char (&no_type)[2];
+ static yes_type check_insert_return(typename cont_type::iterator);
+ static no_type check_insert_return(std::pair<typename cont_type::iterator, bool>);
+ BOOST_STATIC_CONSTANT(bool, is_iterator = (sizeof(yes_type) == sizeof(check_insert_return(scont_.insert(svalue_)))));
+ typedef
+ typename mpl::if_c<
+ is_iterator
+ , typename cont_type::iterator
+ , std::pair<typename cont_type::iterator, bool>
+ >::type
+ type;
+ };
+
+ // sequence containers, assoc containers, strings
+ template<typename This, typename Cont, typename It, typename Value>
+ struct result_detail<This(Cont, It, Value),
+ typename disable_if<
+ mpl::or_<
+ is_integral<typename remove_cv<typename remove_reference<It>::type>::type>
+ , is_same<
+ typename remove_cv<typename remove_reference<It>::type>::type
+ , typename remove_cv<typename remove_reference<Value>::type>::type
+ >
+ >
+ >::type
+ >
+ {
+ typedef typename remove_reference<Cont>::type::iterator type;
+ };
+
+ // strings
+ template<typename This, typename Cont, typename Size, typename T>
+ struct result_detail<This(Cont, Size, T),
+ typename enable_if<
+ is_integral<typename remove_cv<typename remove_reference<Size>::type>::type>
+ >::type
+ >
+ {
+ typedef typename remove_reference<Cont>::type &type;
+ };
+
+ // assoc containers
+ template<typename This, typename Cont, typename It>
+ struct result_detail<This(Cont, It, It), void>
+ {
+ typedef void type;
+ };
+
+ // sequence containers, strings
+ template<typename This, typename Cont, typename It, typename Size, typename Value>
+ struct result_detail<This(Cont, It, Size, Value),
+ typename disable_if<
+ is_integral<typename remove_cv<typename remove_reference<It>::type>::type>
+ >::type
+ >
+ {
+ typedef void type;
+ };
+
+ // strings
+ template<typename This, typename Cont, typename Size, typename A0, typename A1>
+ struct result_detail<This(Cont, Size, A0, A1),
+ typename enable_if<
+ is_integral<typename remove_cv<typename remove_reference<Size>::type>::type>
+ >::type
+ >
+ {
+ typedef typename remove_reference<Cont>::type &type;
+ };
+
+ // strings
+ template<typename This, typename Cont, typename Pos0, typename String, typename Pos1, typename Length>
+ struct result_detail<This(Cont, Pos0, String, Pos1, Length)>
+ {
+ typedef typename remove_reference<Cont>::type &type;
+ };
};
- // strings
- template<typename This, typename Cont, typename Size, typename A0, typename A1>
- struct result<This(Cont, Size, A0, A1),
- typename enable_if<is_integral<UNCVREF(Size)> >::type>
+ template<typename Sig>
+ struct result
{
- typedef UNREF(Cont) &type;
+ typedef typename detail::result_detail<Sig>::type type;
};
- /// \brief operator()
+ /// \overload
///
template<typename Cont, typename A0>
typename result<insert(Cont &, A0 const &)>::type
@@ -529,8 +625,25 @@ namespace boost { namespace xpressive
{
return cont.insert(a0, a1, a2);
}
+
+ /// \param cont The container into which to insert the element(s)
+ /// \param a0 A value, iterator, or count
+ /// \param a1 A value, iterator, string, count, or character
+ /// \param a2 A value, iterator, or count
+ /// \param a3 A count
+ /// \return \li For the form <tt>insert()(cont, a0)</tt>, return <tt>cont.insert(a0)</tt>.
+ /// \li For the form <tt>insert()(cont, a0, a1)</tt>, return <tt>cont.insert(a0, a1)</tt>.
+ /// \li For the form <tt>insert()(cont, a0, a1, a2)</tt>, return <tt>cont.insert(a0, a1, a2)</tt>.
+ /// \li For the form <tt>insert()(cont, a0, a1, a2, a3)</tt>, return <tt>cont.insert(a0, a1, a2, a3)</tt>.
+ template<typename Cont, typename A0, typename A1, typename A2, typename A3>
+ typename result<insert(Cont &, A0 const &, A1 const &, A2 const &, A3 const &)>::type
+ operator()(Cont &cont, A0 const &a0, A1 const &a1, A2 const &a2, A3 const &a3) const
+ {
+ return cont.insert(a0, a1, a2, a3);
+ }
};
+ /// \brief \c make_pair is a PolymorphicFunctionObject for building a \c std::pair out of two parameters
struct make_pair
{
BOOST_PROTO_CALLABLE()
@@ -540,9 +653,16 @@ namespace boost { namespace xpressive
template<typename This, typename First, typename Second>
struct result<This(First, Second)>
{
- typedef std::pair<UNCVREF(First), UNCVREF(Second)> type;
+ /// \brief For exposition only
+ typedef typename decay<First>::type first_type;
+ /// \brief For exposition only
+ typedef typename decay<Second>::type second_type;
+ typedef std::pair<first_type, second_type> type;
};
+ /// \param first The first element of the pair
+ /// \param second The second element of the pair
+ /// \return <tt>std::make_pair(first, second)</tt>
template<typename First, typename Second>
std::pair<First, Second> operator()(First const &first, Second const &second) const
{
@@ -550,12 +670,16 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c as\<\> is a PolymorphicFunctionObject for lexically casting a parameter to a different type.
+ /// \tparam T The type to which to lexically cast the parameter.
template<typename T>
struct as
{
BOOST_PROTO_CALLABLE()
typedef T result_type;
+ /// \param val The value to lexically cast.
+ /// \return <tt>boost::lexical_cast\<T\>(val)</tt>
template<typename Value>
T operator()(Value const &val) const
{
@@ -563,6 +687,7 @@ namespace boost { namespace xpressive
}
// Hack around some limitations in boost::lexical_cast
+ /// INTERNAL ONLY
T operator()(csub_match const &val) const
{
return val.matched
@@ -571,6 +696,7 @@ namespace boost { namespace xpressive
}
#ifndef BOOST_XPRESSIVE_NO_WREGEX
+ /// INTERNAL ONLY
T operator()(wcsub_match const &val) const
{
return val.matched
@@ -579,6 +705,7 @@ namespace boost { namespace xpressive
}
#endif
+ /// INTERNAL ONLY
template<typename BidiIter>
T operator()(sub_match<BidiIter> const &val) const
{
@@ -594,6 +721,7 @@ namespace boost { namespace xpressive
}
private:
+ /// INTERNAL ONLY
template<typename RandIter>
T impl(sub_match<RandIter> const &val, mpl::true_) const
{
@@ -602,6 +730,7 @@ namespace boost { namespace xpressive
: boost::lexical_cast<T>("");
}
+ /// INTERNAL ONLY
template<typename BidiIter>
T impl(sub_match<BidiIter> const &val, mpl::false_) const
{
@@ -609,12 +738,16 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c static_cast_\<\> is a PolymorphicFunctionObject for statically casting a parameter to a different type.
+ /// \tparam T The type to which to statically cast the parameter.
template<typename T>
struct static_cast_
{
BOOST_PROTO_CALLABLE()
typedef T result_type;
+ /// \param val The value to statically cast.
+ /// \return <tt>static_cast\<T\>(val)</tt>
template<typename Value>
T operator()(Value const &val) const
{
@@ -622,12 +755,16 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c dynamic_cast_\<\> is a PolymorphicFunctionObject for dynamically casting a parameter to a different type.
+ /// \tparam T The type to which to dynamically cast the parameter.
template<typename T>
struct dynamic_cast_
{
BOOST_PROTO_CALLABLE()
typedef T result_type;
+ /// \param val The value to dynamically cast.
+ /// \return <tt>dynamic_cast\<T\>(val)</tt>
template<typename Value>
T operator()(Value const &val) const
{
@@ -635,12 +772,17 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c const_cast_\<\> is a PolymorphicFunctionObject for const-casting a parameter to a cv qualification.
+ /// \tparam T The type to which to const-cast the parameter.
template<typename T>
struct const_cast_
{
BOOST_PROTO_CALLABLE()
typedef T result_type;
+ /// \param val The value to const-cast.
+ /// \pre Types \c T and \c Value differ only in cv-qualification.
+ /// \return <tt>const_cast\<T\>(val)</tt>
template<typename Value>
T operator()(Value const &val) const
{
@@ -648,29 +790,38 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c construct\<\> is a PolymorphicFunctionObject for constructing a new object.
+ /// \tparam T The type of the object to construct.
template<typename T>
struct construct
{
BOOST_PROTO_CALLABLE()
typedef T result_type;
+ /// \overload
T operator()() const
{
return T();
}
+ /// \overload
template<typename A0>
T operator()(A0 const &a0) const
{
return T(a0);
}
+ /// \overload
template<typename A0, typename A1>
T operator()(A0 const &a0, A1 const &a1) const
{
return T(a0, a1);
}
+ /// \param a0 The first argument to the constructor
+ /// \param a1 The second argument to the constructor
+ /// \param a2 The third argument to the constructor
+ /// \return <tt>T(a0,a1,...)</tt>
template<typename A0, typename A1, typename A2>
T operator()(A0 const &a0, A1 const &a1, A2 const &a2) const
{
@@ -678,29 +829,41 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c throw_\<\> is a PolymorphicFunctionObject for throwing an exception.
+ /// \tparam Except The type of the object to throw.
template<typename Except>
struct throw_
{
BOOST_PROTO_CALLABLE()
typedef void result_type;
+ /// \overload
void operator()() const
{
BOOST_THROW_EXCEPTION(Except());
}
+ /// \overload
template<typename A0>
void operator()(A0 const &a0) const
{
BOOST_THROW_EXCEPTION(Except(a0));
}
+ /// \overload
template<typename A0, typename A1>
void operator()(A0 const &a0, A1 const &a1) const
{
BOOST_THROW_EXCEPTION(Except(a0, a1));
}
+ /// \param a0 The first argument to the constructor
+ /// \param a1 The second argument to the constructor
+ /// \param a2 The third argument to the constructor
+ /// \throw <tt>Except(a0,a1,...)</tt>
+ /// \note This function makes use of the \c BOOST_THROW_EXCEPTION macro
+ /// to actually throw the exception. See the documentation for the
+ /// Boost.Exception library.
template<typename A0, typename A1, typename A2>
void operator()(A0 const &a0, A1 const &a1, A2 const &a2) const
{
@@ -708,6 +871,7 @@ namespace boost { namespace xpressive
}
};
+ /// \brief \c unwrap_reference is a PolymorphicFunctionObject for unwrapping a <tt>boost::reference_wrapper\<\></tt>.
struct unwrap_reference
{
BOOST_PROTO_CALLABLE()
@@ -726,6 +890,8 @@ namespace boost { namespace xpressive
typedef typename boost::unwrap_reference<Ref>::type &type;
};
+ /// \param r The <tt>boost::reference_wrapper\<T\></tt> to unwrap.
+ /// \return <tt>static_cast\<T &\>(r)</tt>
template<typename T>
T &operator()(boost::reference_wrapper<T> r) const
{
@@ -734,88 +900,245 @@ namespace boost { namespace xpressive
};
}
- template<typename Fun>
+ /// \brief A unary metafunction that turns an ordinary function object type into the type of
+ /// a deferred function object for use in xpressive semantic actions.
+ ///
+ /// Use \c xpressive::function\<\> to turn an ordinary polymorphic function object type
+ /// into a type that can be used to declare an object for use in xpressive semantic actions.
+ ///
+ /// For example, the global object \c xpressive::push_back can be used to create deferred actions
+ /// that have the effect of pushing a value into a container. It is defined with
+ /// \c xpressive::function\<\> as follows:
+ ///
+ /** \code
+ xpressive::function<xpressive::op::push_back>::type const push_back = {};
+ \endcode
+ */
+ ///
+ /// where \c op::push_back is an ordinary function object that pushes its second argument into
+ /// its first. Thus defined, \c xpressive::push_back can be used in semantic actions as follows:
+ ///
+ /** \code
+ namespace xp = boost::xpressive;
+ using xp::_;
+ std::list<int> result;
+ std::string str("1 23 456 7890");
+ xp::sregex rx = (+_d)[ xp::push_back(xp::ref(result), xp::as<int>(_) ]
+ >> *(' ' >> (+_d)[ xp::push_back(xp::ref(result), xp::as<int>(_) ) ]);
+ \endcode
+ */
+ template<typename PolymorphicFunctionObject>
struct function
{
- typedef typename proto::terminal<Fun>::type type;
+ typedef typename proto::terminal<PolymorphicFunctionObject>::type type;
};
+ /// \brief \c at is a lazy PolymorphicFunctionObject for indexing into a sequence in an
+ /// xpressive semantic action.
function<op::at>::type const at = {{}};
+
+ /// \brief \c push is a lazy PolymorphicFunctionObject for pushing a value into a container in an
+ /// xpressive semantic action.
function<op::push>::type const push = {{}};
+
+ /// \brief \c push_back is a lazy PolymorphicFunctionObject for pushing a value into a container in an
+ /// xpressive semantic action.
function<op::push_back>::type const push_back = {{}};
+
+ /// \brief \c push_front is a lazy PolymorphicFunctionObject for pushing a value into a container in an
+ /// xpressive semantic action.
function<op::push_front>::type const push_front = {{}};
+
+ /// \brief \c pop is a lazy PolymorphicFunctionObject for popping the top element from a sequence in an
+ /// xpressive semantic action.
function<op::pop>::type const pop = {{}};
+
+ /// \brief \c pop_back is a lazy PolymorphicFunctionObject for popping the back element from a sequence in an
+ /// xpressive semantic action.
function<op::pop_back>::type const pop_back = {{}};
+
+ /// \brief \c pop_front is a lazy PolymorphicFunctionObject for popping the front element from a sequence in an
+ /// xpressive semantic action.
function<op::pop_front>::type const pop_front = {{}};
+
+ /// \brief \c top is a lazy PolymorphicFunctionObject for accessing the top element from a stack in an
+ /// xpressive semantic action.
function<op::top>::type const top = {{}};
+
+ /// \brief \c back is a lazy PolymorphicFunctionObject for fetching the back element of a sequence in an
+ /// xpressive semantic action.
function<op::back>::type const back = {{}};
+
+ /// \brief \c front is a lazy PolymorphicFunctionObject for fetching the front element of a sequence in an
+ /// xpressive semantic action.
function<op::front>::type const front = {{}};
+
+ /// \brief \c first is a lazy PolymorphicFunctionObject for accessing the first element of a \c std::pair\<\> in an
+ /// xpressive semantic action.
function<op::first>::type const first = {{}};
+
+ /// \brief \c second is a lazy PolymorphicFunctionObject for accessing the second element of a \c std::pair\<\> in an
+ /// xpressive semantic action.
function<op::second>::type const second = {{}};
+
+ /// \brief \c matched is a lazy PolymorphicFunctionObject for accessing the \c matched member of a \c xpressive::sub_match\<\> in an
+ /// xpressive semantic action.
function<op::matched>::type const matched = {{}};
+
+ /// \brief \c length is a lazy PolymorphicFunctionObject for computing the length of a \c xpressive::sub_match\<\> in an
+ /// xpressive semantic action.
function<op::length>::type const length = {{}};
+
+ /// \brief \c str is a lazy PolymorphicFunctionObject for converting a \c xpressive::sub_match\<\> to a \c std::basic_string\<\> in an
+ /// xpressive semantic action.
function<op::str>::type const str = {{}};
+
+ /// \brief \c insert is a lazy PolymorphicFunctionObject for inserting a value or a range of values into a sequence in an
+ /// xpressive semantic action.
function<op::insert>::type const insert = {{}};
+
+ /// \brief \c make_pair is a lazy PolymorphicFunctionObject for making a \c std::pair\<\> in an
+ /// xpressive semantic action.
function<op::make_pair>::type const make_pair = {{}};
+
+ /// \brief \c unwrap_reference is a lazy PolymorphicFunctionObject for unwrapping a \c boost::reference_wrapper\<\> in an
+ /// xpressive semantic action.
function<op::unwrap_reference>::type const unwrap_reference = {{}};
+ /// \brief \c value\<\> is a lazy wrapper for a value that can be used in xpressive semantic actions.
+ /// \tparam T The type of the value to store.
+ ///
+ /// Below is an example that shows where \c <tt>value\<\></tt> is useful.
+ ///
+ /** \code
+ sregex good_voodoo(boost::shared_ptr<int> pi)
+ {
+ using namespace boost::xpressive;
+ // Use val() to hold the shared_ptr by value:
+ sregex rex = +( _d [ ++*val(pi) ] >> '!' );
+ // OK, rex holds a reference count to the integer.
+ return rex;
+ }
+ \endcode
+ */
+ ///
+ /// In the above code, \c xpressive::val() is a function that returns a \c value\<\> object. Had
+ /// \c val() not been used here, the operation <tt>++*pi</tt> would have been evaluated eagerly
+ /// once, instead of lazily when the regex match happens.
template<typename T>
struct value
: proto::extends<typename proto::terminal<T>::type, value<T> >
{
+ /// INTERNAL ONLY
typedef proto::extends<typename proto::terminal<T>::type, value<T> > base_type;
+ /// \brief Store a default-constructed \c T
value()
: base_type()
{}
+ /// \param t The initial value.
+ /// \brief Store a copy of \c t.
explicit value(T const &t)
: base_type(base_type::proto_base_expr::make(t))
{}
using base_type::operator=;
+ /// \overload
T &get()
{
return proto::value(*this);
}
+ /// \brief Fetch the stored value
T const &get() const
{
return proto::value(*this);
}
};
+ /// \brief \c reference\<\> is a lazy wrapper for a reference that can be used in
+ /// xpressive semantic actions.
+ ///
+ /// \tparam T The type of the referent.
+ ///
+ /// Here is an example of how to use \c reference\<\> to create a lazy reference to
+ /// an existing object so it can be read and written in an xpressive semantic action.
+ ///
+ /** \code
+ using namespace boost::xpressive;
+ std::map<std::string, int> result;
+ reference<std::map<std::string, int> > result_ref(result);
+
+ // Match a word and an integer, separated by =>,
+ // and then stuff the result into a std::map<>
+ sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )
+ [ result_ref[s1] = as<int>(s2) ];
+ \endcode
+ */
template<typename T>
struct reference
: proto::extends<typename proto::terminal<reference_wrapper<T> >::type, reference<T> >
{
+ /// INTERNAL ONLY
typedef proto::extends<typename proto::terminal<reference_wrapper<T> >::type, reference<T> > base_type;
+ /// \param t Reference to object
+ /// \brief Store a reference to \c t
explicit reference(T &t)
: base_type(base_type::proto_base_expr::make(boost::ref(t)))
{}
using base_type::operator=;
+ /// \brief Fetch the stored value
T &get() const
{
return proto::value(*this).get();
}
};
+ /// \brief \c local\<\> is a lazy wrapper for a reference to a value that is stored within the local itself.
+ /// It is for use within xpressive semantic actions.
+ ///
+ /// \tparam T The type of the local variable.
+ ///
+ /// Below is an example of how to use \c local\<\> in semantic actions.
+ ///
+ /** \code
+ using namespace boost::xpressive;
+ local<int> i(0);
+ std::string str("1!2!3?");
+ // count the exciting digits, but not the
+ // questionable ones.
+ sregex rex = +( _d [ ++i ] >> '!' );
+ regex_search(str, rex);
+ assert( i.get() == 2 );
+ \endcode
+ */
+ ///
+ /// \note As the name "local" suggests, \c local\<\> objects and the regexes
+ /// that refer to them should never leave the local scope. The value stored
+ /// within the local object will be destroyed at the end of the \c local\<\>'s
+ /// lifetime, and any regex objects still holding the \c local\<\> will be
+ /// left with a dangling reference.
template<typename T>
struct local
: detail::value_wrapper<T>
, proto::terminal<reference_wrapper<T> >::type
{
+ /// INTERNAL ONLY
typedef typename proto::terminal<reference_wrapper<T> >::type base_type;
+ /// \brief Store a default-constructed value of type \c T
local()
: detail::value_wrapper<T>()
, base_type(base_type::make(boost::ref(detail::value_wrapper<T>::value)))
{}
+ /// \param t The initial value.
+ /// \brief Store a default-constructed value of type \c T
explicit local(T const &t)
: detail::value_wrapper<T>(t)
, base_type(base_type::make(boost::ref(detail::value_wrapper<T>::value)))
@@ -823,121 +1146,369 @@ namespace boost { namespace xpressive
using base_type::operator=;
+ /// Fetch the wrapped value.
T &get()
{
return proto::value(*this);
}
+ /// \overload
T const &get() const
{
return proto::value(*this);
}
};
- /// as (a.k.a., lexical_cast)
- ///
- template<typename X2_0, typename A0>
- typename detail::make_function::impl<op::as<X2_0> const, A0 const &>::result_type const
- as(A0 const &a0)
+ /// \brief \c as() is a lazy funtion for lexically casting a parameter to a different type.
+ /// \tparam T The type to which to lexically cast the parameter.
+ /// \param a The lazy value to lexically cast.
+ /// \return A lazy object that, when evaluated, lexically casts its argument to the desired type.
+ template<typename T, typename A>
+ typename detail::make_function::impl<op::as<T> const, A const &>::result_type const
+ as(A const &a)
{
- return detail::make_function::impl<op::as<X2_0> const, A0 const &>()((op::as<X2_0>()), a0);
+ return detail::make_function::impl<op::as<T> const, A const &>()((op::as<T>()), a);
}
- /// static_cast_
- ///
- template<typename X2_0, typename A0>
- typename detail::make_function::impl<op::static_cast_<X2_0> const, A0 const &>::result_type const
- static_cast_(A0 const &a0)
+ /// \brief \c static_cast_ is a lazy funtion for statically casting a parameter to a different type.
+ /// \tparam T The type to which to statically cast the parameter.
+ /// \param a The lazy value to statically cast.
+ /// \return A lazy object that, when evaluated, statically casts its argument to the desired type.
+ template<typename T, typename A>
+ typename detail::make_function::impl<op::static_cast_<T> const, A const &>::result_type const
+ static_cast_(A const &a)
{
- return detail::make_function::impl<op::static_cast_<X2_0> const, A0 const &>()((op::static_cast_<X2_0>()), a0);
+ return detail::make_function::impl<op::static_cast_<T> const, A const &>()((op::static_cast_<T>()), a);
}
- /// dynamic_cast_
- ///
- template<typename X2_0, typename A0>
- typename detail::make_function::impl<op::dynamic_cast_<X2_0> const, A0 const &>::result_type const
- dynamic_cast_(A0 const &a0)
+ /// \brief \c dynamic_cast_ is a lazy funtion for dynamically casting a parameter to a different type.
+ /// \tparam T The type to which to dynamically cast the parameter.
+ /// \param a The lazy value to dynamically cast.
+ /// \return A lazy object that, when evaluated, dynamically casts its argument to the desired type.
+ template<typename T, typename A>
+ typename detail::make_function::impl<op::dynamic_cast_<T> const, A const &>::result_type const
+ dynamic_cast_(A const &a)
{
- return detail::make_function::impl<op::dynamic_cast_<X2_0> const, A0 const &>()((op::dynamic_cast_<X2_0>()), a0);
+ return detail::make_function::impl<op::dynamic_cast_<T> const, A const &>()((op::dynamic_cast_<T>()), a);
}
- /// const_cast_
- ///
- template<typename X2_0, typename A0>
- typename detail::make_function::impl<op::const_cast_<X2_0> const, A0 const &>::result_type const
- const_cast_(A0 const &a0)
+ /// \brief \c dynamic_cast_ is a lazy funtion for const-casting a parameter to a different type.
+ /// \tparam T The type to which to const-cast the parameter.
+ /// \param a The lazy value to const-cast.
+ /// \return A lazy object that, when evaluated, const-casts its argument to the desired type.
+ template<typename T, typename A>
+ typename detail::make_function::impl<op::const_cast_<T> const, A const &>::result_type const
+ const_cast_(A const &a)
{
- return detail::make_function::impl<op::const_cast_<X2_0> const, A0 const &>()((op::const_cast_<X2_0>()), a0);
+ return detail::make_function::impl<op::const_cast_<T> const, A const &>()((op::const_cast_<T>()), a);
}
- /// val()
- ///
+ /// \brief Helper for constructing \c value\<\> objects.
+ /// \return <tt>value\<T\>(t)</tt>
template<typename T>
value<T> const val(T const &t)
{
return value<T>(t);
}
- /// ref()
- ///
+ /// \brief Helper for constructing \c reference\<\> objects.
+ /// \return <tt>reference\<T\>(t)</tt>
template<typename T>
reference<T> const ref(T &t)
{
return reference<T>(t);
}
- /// cref()
- ///
+ /// \brief Helper for constructing \c reference\<\> objects that
+ /// store a reference to const.
+ /// \return <tt>reference\<T const\>(t)</tt>
template<typename T>
reference<T const> const cref(T const &t)
{
return reference<T const>(t);
}
- /// check(), for testing custom assertions
+ /// \brief For adding user-defined assertions to your regular expressions.
+ ///
+ /// \param t The UnaryPredicate object or Boolean semantic action.
+ ///
+ /// A \RefSect{user_s_guide.semantic_actions_and_user_defined_assertions.user_defined_assertions,user-defined assertion}
+ /// is a kind of semantic action that evaluates
+ /// a Boolean lambda and, if it evaluates to false, causes the match to
+ /// fail at that location in the string. This will cause backtracking,
+ /// so the match may ultimately succeed.
+ ///
+ /// To use \c check() to specify a user-defined assertion in a regex, use the
+ /// following syntax:
+ ///
+ /** \code
+ sregex s = (_d >> _d)[check( XXX )]; // XXX is a custom assertion
+ \endcode
+ */
+ ///
+ /// The assertion is evaluated with a \c sub_match\<\> object that delineates
+ /// what part of the string matched the sub-expression to which the assertion
+ /// was attached.
+ ///
+ /// \c check() can be used with an ordinary predicate that takes a
+ /// \c sub_match\<\> object as follows:
+ ///
+ /** \code
+ // A predicate that is true IFF a sub-match is
+ // either 3 or 6 characters long.
+ struct three_or_six
+ {
+ bool operator()(ssub_match const &sub) const
+ {
+ return sub.length() == 3 || sub.length() == 6;
+ }
+ };
+
+ // match words of 3 characters or 6 characters.
+ sregex rx = (bow >> +_w >> eow)[ check(three_or_six()) ] ;
+ \endcode
+ */
+ ///
+ /// Alternately, \c check() can be used to define inline custom
+ /// assertions with the same syntax as is used to define semantic
+ /// actions. The following code is equivalent to above:
///
+ /** \code
+ // match words of 3 characters or 6 characters.
+ sregex rx = (bow >> +_w >> eow)[ check(length(_)==3 || length(_)==6) ] ;
+ \endcode
+ */
+ ///
+ /// Within a custom assertion, \c _ is a placeholder for the \c sub_match\<\>
+ /// That delineates the part of the string matched by the sub-expression to
+ /// which the custom assertion was attached.
+#ifdef BOOST_XPRESSIVE_DOXYGEN_INVOKED // A hack so Doxygen emits something more meaningful.
+ template<typename T>
+ detail::unspecified check(T const &t);
+#else
proto::terminal<detail::check_tag>::type const check = {{}};
+#endif
- /// let(), for binding references to non-local variables
+ /// \brief For binding local variables to placeholders in semantic actions when
+ /// constructing a \c regex_iterator or a \c regex_token_iterator.
+ ///
+ /// \param args A set of argument bindings, where each argument binding is an assignment
+ /// expression, the left hand side of which must be an instance of \c placeholder\<X\>
+ /// for some \c X, and the right hand side is an lvalue of type \c X.
+ ///
+ /// \c xpressive::let() serves the same purpose as <tt>match_results::let()</tt>;
+ /// that is, it binds a placeholder to a local value. The purpose is to allow a
+ /// regex with semantic actions to be defined that refers to objects that do not yet exist.
+ /// Rather than referring directly to an object, a semantic action can refer to a placeholder,
+ /// and the value of the placeholder can be specified later with a <em>let expression</em>.
+ /// The <em>let expression</em> created with \c let() is passed to the constructor of either
+ /// \c regex_iterator or \c regex_token_iterator.
+ ///
+ /// See the section \RefSect{user_s_guide.semantic_actions_and_user_defined_assertions.referring_to_non_local_variables, "Referring to Non-Local Variables"}
+ /// in the Users' Guide for more discussion.
+ ///
+ /// \em Example:
+ ///
+ /**
+ \code
+ // Define a placeholder for a map object:
+ placeholder<std::map<std::string, int> > _map;
+
+ // Match a word and an integer, separated by =>,
+ // and then stuff the result into a std::map<>
+ sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )
+ [ _map[s1] = as<int>(s2) ];
+
+ // The string to parse
+ std::string str("aaa=>1 bbb=>23 ccc=>456");
+
+ // Here is the actual map to fill in:
+ std::map<std::string, int> result;
+
+ // Create a regex_iterator to find all the matches
+ sregex_iterator it(str.begin(), str.end(), pair, let(_map=result));
+ sregex_iterator end;
+
+ // step through all the matches, and fill in
+ // the result map
+ while(it != end)
+ ++it;
+
+ std::cout << result["aaa"] << '\n';
+ std::cout << result["bbb"] << '\n';
+ std::cout << result["ccc"] << '\n';
+ \endcode
+ */
+ ///
+ /// The above code displays:
///
+ /** \code{.txt}
+ 1
+ 23
+ 456
+ \endcode
+ */
+#ifdef BOOST_XPRESSIVE_DOXYGEN_INVOKED // A hack so Doxygen emits something more meaningful.
+ template<typename...ArgBindings>
+ detail::unspecified let(ArgBindings const &...args);
+#else
detail::let_<proto::terminal<detail::let_tag>::type> const let = {{{}}};
+#endif
- /// placeholder<T>, for defining a placeholder to stand in fo
- /// a variable of type T in a semantic action.
+ /// \brief For defining a placeholder to stand in for a variable a semantic action.
+ ///
+ /// Use \c placeholder\<\> to define a placeholder for use in semantic actions to stand
+ /// in for real objects. The use of placeholders allows regular expressions with actions
+ /// to be defined once and reused in many contexts to read and write from objects which
+ /// were not available when the regex was defined.
+ ///
+ /// \tparam T The type of the object for which this placeholder stands in.
+ /// \tparam I An optional identifier that can be used to distinguish this placeholder
+ /// from others that may be used in the same semantic action that happen
+ /// to have the same type.
+ ///
+ /// You can use \c placeholder\<\> by creating an object of type \c placeholder\<T\>
+ /// and using that object in a semantic action exactly as you intend an object of
+ /// type \c T to be used.
+ ///
+ /**
+ \code
+ placeholder<int> _i;
+ placeholder<double> _d;
+
+ sregex rex = ( some >> regex >> here )
+ [ ++_i, _d *= _d ];
+ \endcode
+ */
+ ///
+ /// Then, when doing a pattern match with either \c regex_search(),
+ /// \c regex_match() or \c regex_replace(), pass a \c match_results\<\> object that
+ /// contains bindings for the placeholders used in the regex object's semantic actions.
+ /// You can create the bindings by calling \c match_results::let as follows:
+ ///
+ /**
+ \code
+ int i = 0;
+ double d = 3.14;
+
+ smatch what;
+ what.let(_i = i)
+ .let(_d = d);
+
+ if(regex_match("some string", rex, what))
+ // i and d mutated here
+ \endcode
+ */
+ ///
+ /// If a semantic action executes that contains an unbound placeholder, a exception of
+ /// type \c regex_error is thrown.
///
+ /// See the discussion for \c xpressive::let() and the
+ /// \RefSect{user_s_guide.semantic_actions_and_user_defined_assertions.referring_to_non_local_variables, "Referring to Non-Local Variables"}
+ /// section in the Users' Guide for more information.
+ ///
+ /// <em>Example:</em>
+ ///
+ /**
+ \code
+ // Define a placeholder for a map object:
+ placeholder<std::map<std::string, int> > _map;
+
+ // Match a word and an integer, separated by =>,
+ // and then stuff the result into a std::map<>
+ sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )
+ [ _map[s1] = as<int>(s2) ];
+
+ // Match one or more word/integer pairs, separated
+ // by whitespace.
+ sregex rx = pair >> *(+_s >> pair);
+
+ // The string to parse
+ std::string str("aaa=>1 bbb=>23 ccc=>456");
+
+ // Here is the actual map to fill in:
+ std::map<std::string, int> result;
+
+ // Bind the _map placeholder to the actual map
+ smatch what;
+ what.let( _map = result );
+
+ // Execute the match and fill in result map
+ if(regex_match(str, what, rx))
+ {
+ std::cout << result["aaa"] << '\n';
+ std::cout << result["bbb"] << '\n';
+ std::cout << result["ccc"] << '\n';
+ }
+ \endcode
+ */
+#ifdef BOOST_XPRESSIVE_DOXYGEN_INVOKED // A hack so Doxygen emits something more meaningful.
+ template<typename T, int I = 0>
+ struct placeholder
+ {
+ /// \param t The object to associate with this placeholder
+ /// \return An object of unspecified type that records the association of \c t
+ /// with \c *this.
+ detail::unspecified operator=(T &t) const;
+ /// \overload
+ detail::unspecified operator=(T const &t) const;
+ };
+#else
template<typename T, int I, typename Dummy>
struct placeholder
{
typedef placeholder<T, I, Dummy> this_type;
- typedef typename proto::terminal<detail::action_arg<T, mpl::int_<I> > >::type action_arg_type;
+ typedef
+ typename proto::terminal<detail::action_arg<T, mpl::int_<I> > >::type
+ action_arg_type;
BOOST_PROTO_EXTENDS(action_arg_type, this_type, proto::default_domain)
};
+#endif
- /// Usage: construct\<Type\>(arg1, arg2)
- ///
- /// Usage: throw_\<Exception\>(arg1, arg2)
- ///
- #define BOOST_PROTO_LOCAL_MACRO(N, typename_A, A_const_ref, A_const_ref_a, a)\
- \
- template<typename X2_0 BOOST_PP_COMMA_IF(N) typename_A(N)>\
- typename detail::make_function::impl<op::construct<X2_0> const BOOST_PP_COMMA_IF(N) A_const_ref(N)>::result_type const\
- construct(A_const_ref_a(N))\
- {\
- return detail::make_function::impl<op::construct<X2_0> const BOOST_PP_COMMA_IF(N) A_const_ref(N)>()((op::construct<X2_0>()) BOOST_PP_COMMA_IF(N) a(N));\
- }\
- \
- template<typename X2_0 BOOST_PP_COMMA_IF(N) typename_A(N)>\
- typename detail::make_function::impl<op::throw_<X2_0> const BOOST_PP_COMMA_IF(N) A_const_ref(N)>::result_type const\
- throw_(A_const_ref_a(N))\
- {\
- return detail::make_function::impl<op::throw_<X2_0> const BOOST_PP_COMMA_IF(N) A_const_ref(N)>()((op::throw_<X2_0>()) BOOST_PP_COMMA_IF(N) a(N));\
- }\
+ /// \brief A lazy funtion for constructing objects objects of the specified type.
+ /// \tparam T The type of object to construct.
+ /// \param args The arguments to the constructor.
+ /// \return A lazy object that, when evaluated, returns <tt>T(xs...)</tt>, where
+ /// <tt>xs...</tt> is the result of evaluating the lazy arguments
+ /// <tt>args...</tt>.
+#ifdef BOOST_XPRESSIVE_DOXYGEN_INVOKED // A hack so Doxygen emits something more meaningful.
+ template<typename T, typename ...Args>
+ detail::unspecified construct(Args const &...args);
+#else
+/// INTERNAL ONLY
+#define BOOST_PROTO_LOCAL_MACRO(N, typename_A, A_const_ref, A_const_ref_a, a) \
+ template<typename X2_0 BOOST_PP_COMMA_IF(N) typename_A(N)> \
+ typename detail::make_function::impl< \
+ op::construct<X2_0> const \
+ BOOST_PP_COMMA_IF(N) A_const_ref(N) \
+ >::result_type const \
+ construct(A_const_ref_a(N)) \
+ { \
+ return detail::make_function::impl< \
+ op::construct<X2_0> const \
+ BOOST_PP_COMMA_IF(N) A_const_ref(N) \
+ >()((op::construct<X2_0>()) BOOST_PP_COMMA_IF(N) a(N)); \
+ } \
+ \
+ template<typename X2_0 BOOST_PP_COMMA_IF(N) typename_A(N)> \
+ typename detail::make_function::impl< \
+ op::throw_<X2_0> const \
+ BOOST_PP_COMMA_IF(N) A_const_ref(N) \
+ >::result_type const \
+ throw_(A_const_ref_a(N)) \
+ { \
+ return detail::make_function::impl< \
+ op::throw_<X2_0> const \
+ BOOST_PP_COMMA_IF(N) A_const_ref(N) \
+ >()((op::throw_<X2_0>()) BOOST_PP_COMMA_IF(N) a(N)); \
+ } \
/**/
- #define BOOST_PROTO_LOCAL_a BOOST_PROTO_a
- #define BOOST_PROTO_LOCAL_LIMITS (0, BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY))
+ #define BOOST_PROTO_LOCAL_a BOOST_PROTO_a ///< INTERNAL ONLY
+ #define BOOST_PROTO_LOCAL_LIMITS (0, BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY)) ///< INTERNAL ONLY
#include BOOST_PROTO_LOCAL_ITERATE()
+#endif
namespace detail
{
@@ -996,9 +1567,6 @@ namespace boost { namespace xpressive
}
}}
-#undef UNREF
-#undef UNCVREF
-
#if BOOST_MSVC
#pragma warning(pop)
#endif
diff --git a/3party/boost/boost/xpressive/regex_algorithms.hpp b/3party/boost/boost/xpressive/regex_algorithms.hpp
index 9e934c495e..f2bd1810a6 100644
--- a/3party/boost/boost/xpressive/regex_algorithms.hpp
+++ b/3party/boost/boost/xpressive/regex_algorithms.hpp
@@ -10,7 +10,7 @@
#define BOOST_XPRESSIVE_ALGORITHMS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -303,7 +303,6 @@ namespace detail
)
{
typedef core_access<BidiIter> access;
- typedef typename iterator_value<BidiIter>::type char_type;
match_results<BidiIter> &what = *state.context_.results_ptr_;
BOOST_ASSERT(0 != re.regex_id());
diff --git a/3party/boost/boost/xpressive/regex_compiler.hpp b/3party/boost/boost/xpressive/regex_compiler.hpp
index 4a2a9d7436..59d24cef06 100644
--- a/3party/boost/boost/xpressive/regex_compiler.hpp
+++ b/3party/boost/boost/xpressive/regex_compiler.hpp
@@ -11,11 +11,12 @@
#define BOOST_XPRESSIVE_REGEX_COMPILER_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <map>
+#include <boost/config.hpp>
#include <boost/assert.hpp>
#include <boost/next_prior.hpp>
#include <boost/range/begin.hpp>
@@ -282,7 +283,7 @@ private:
break;
case 2:
seq = detail::make_dynamic<BidiIter>(alternate_matcher()) | seq;
- // fall-through
+ BOOST_FALLTHROUGH;
default:
seq |= this->parse_sequence(tmp, end);
}
@@ -322,13 +323,15 @@ private:
break;
case token_negative_lookahead:
- negative = true; // fall-through
+ negative = true;
+ BOOST_FALLTHROUGH;
case token_positive_lookahead:
lookahead = true;
break;
case token_negative_lookbehind:
- negative = true; // fall-through
+ negative = true;
+ BOOST_FALLTHROUGH;
case token_positive_lookbehind:
lookbehind = true;
break;
@@ -342,10 +345,16 @@ private:
{
switch(this->traits_.get_token(begin, end))
{
- case token_group_end: return this->parse_atom(begin, end);
- case token_escape: BOOST_XPR_ENSURE_(begin != end, error_escape, "incomplete escape sequence");
- case token_literal: ++begin;
- default:;
+ case token_group_end:
+ return this->parse_atom(begin, end);
+ case token_escape:
+ BOOST_XPR_ENSURE_(begin != end, error_escape, "incomplete escape sequence");
+ BOOST_FALLTHROUGH;
+ case token_literal:
+ ++begin;
+ break;
+ default:
+ break;
}
}
break;
@@ -433,20 +442,20 @@ private:
if(lookahead)
{
seq += detail::make_independent_end_xpression<BidiIter>(seq.pure());
- detail::lookahead_matcher<xpr_type> lookahead(seq.xpr(), negative, seq.pure());
- seq = detail::make_dynamic<BidiIter>(lookahead);
+ detail::lookahead_matcher<xpr_type> lam(seq.xpr(), negative, seq.pure());
+ seq = detail::make_dynamic<BidiIter>(lam);
}
else if(lookbehind)
{
seq += detail::make_independent_end_xpression<BidiIter>(seq.pure());
- detail::lookbehind_matcher<xpr_type> lookbehind(seq.xpr(), seq.width().value(), negative, seq.pure());
- seq = detail::make_dynamic<BidiIter>(lookbehind);
+ detail::lookbehind_matcher<xpr_type> lbm(seq.xpr(), seq.width().value(), negative, seq.pure());
+ seq = detail::make_dynamic<BidiIter>(lbm);
}
else if(keeper) // independent sub-expression
{
seq += detail::make_independent_end_xpression<BidiIter>(seq.pure());
- detail::keeper_matcher<xpr_type> keeper(seq.xpr(), seq.pure());
- seq = detail::make_dynamic<BidiIter>(keeper);
+ detail::keeper_matcher<xpr_type> km(seq.xpr(), seq.pure());
+ seq = detail::make_dynamic<BidiIter>(km);
}
// restore the modifiers
@@ -688,11 +697,17 @@ private:
{
switch(this->traits_.get_token(begin, end))
{
- case token_quote_meta_end: return string_type(old_begin, old_end);
- case token_escape: BOOST_XPR_ENSURE_(begin != end, error_escape, "incomplete escape sequence");
+ case token_quote_meta_end:
+ return string_type(old_begin, old_end);
+ case token_escape:
+ BOOST_XPR_ENSURE_(begin != end, error_escape, "incomplete escape sequence");
+ BOOST_FALLTHROUGH;
case token_invalid_quantifier:
- case token_literal: ++begin;
- default:;
+ case token_literal:
+ ++begin;
+ break;
+ default:
+ break;
}
}
return string_type(old_begin, begin);
diff --git a/3party/boost/boost/xpressive/regex_constants.hpp b/3party/boost/boost/xpressive/regex_constants.hpp
index 49be39bc88..df82138d2d 100644
--- a/3party/boost/boost/xpressive/regex_constants.hpp
+++ b/3party/boost/boost/xpressive/regex_constants.hpp
@@ -11,7 +11,7 @@
#define BOOST_XPRESSIVE_REGEX_CONSTANTS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/regex_error.hpp b/3party/boost/boost/xpressive/regex_error.hpp
index 0777fdaf08..db219cb444 100644
--- a/3party/boost/boost/xpressive/regex_error.hpp
+++ b/3party/boost/boost/xpressive/regex_error.hpp
@@ -10,7 +10,7 @@
#define BOOST_XPRESSIVE_REGEX_ERROR_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/regex_iterator.hpp b/3party/boost/boost/xpressive/regex_iterator.hpp
index e577300006..06675a14b6 100644
--- a/3party/boost/boost/xpressive/regex_iterator.hpp
+++ b/3party/boost/boost/xpressive/regex_iterator.hpp
@@ -11,7 +11,7 @@
#define BOOST_XPRESSIVE_REGEX_ITERATOR_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/regex_token_iterator.hpp b/3party/boost/boost/xpressive/regex_token_iterator.hpp
index ba3a57298d..7b09d0f6b6 100644
--- a/3party/boost/boost/xpressive/regex_token_iterator.hpp
+++ b/3party/boost/boost/xpressive/regex_token_iterator.hpp
@@ -11,7 +11,7 @@
#define BOOST_XPRESSIVE_REGEX_TOKEN_ITERATOR_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/regex_traits.hpp b/3party/boost/boost/xpressive/regex_traits.hpp
index f7a03e2cb4..8760fdfb41 100644
--- a/3party/boost/boost/xpressive/regex_traits.hpp
+++ b/3party/boost/boost/xpressive/regex_traits.hpp
@@ -11,7 +11,7 @@
#define BOOST_XPRESSIVE_REGEX_TRAITS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/sub_match.hpp b/3party/boost/boost/xpressive/sub_match.hpp
index 279070c910..ae3212fcc6 100644
--- a/3party/boost/boost/xpressive/sub_match.hpp
+++ b/3party/boost/boost/xpressive/sub_match.hpp
@@ -11,7 +11,7 @@
#define BOOST_XPRESSIVE_SUB_MATCH_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -23,6 +23,8 @@
#include <boost/mpl/assert.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/iterator/iterator_traits.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/range/mutable_iterator.hpp>
#include <boost/xpressive/detail/detail_fwd.hpp>
//{{AFX_DOC_COMMENT
@@ -440,11 +442,6 @@ namespace boost
{
/// INTERNAL ONLY
///
- template<typename Range>
- struct range_mutable_iterator;
-
- /// INTERNAL ONLY
- ///
template<typename BidiIter>
struct range_mutable_iterator<xpressive::sub_match<BidiIter> >
{
@@ -453,11 +450,6 @@ namespace boost
/// INTERNAL ONLY
///
- template<typename Range>
- struct range_const_iterator;
-
- /// INTERNAL ONLY
- ///
template<typename BidiIter>
struct range_const_iterator<xpressive::sub_match<BidiIter> >
{
diff --git a/3party/boost/boost/xpressive/traits/c_regex_traits.hpp b/3party/boost/boost/xpressive/traits/c_regex_traits.hpp
index ba56c91c0a..595ee921a3 100644
--- a/3party/boost/boost/xpressive/traits/c_regex_traits.hpp
+++ b/3party/boost/boost/xpressive/traits/c_regex_traits.hpp
@@ -12,7 +12,7 @@
#define BOOST_XPRESSIVE_TRAITS_C_REGEX_TRAITS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/traits/cpp_regex_traits.hpp b/3party/boost/boost/xpressive/traits/cpp_regex_traits.hpp
index 4b6b28344d..977dc58a89 100644
--- a/3party/boost/boost/xpressive/traits/cpp_regex_traits.hpp
+++ b/3party/boost/boost/xpressive/traits/cpp_regex_traits.hpp
@@ -12,7 +12,7 @@
#define BOOST_XPRESSIVE_TRAITS_CPP_REGEX_TRAITS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/traits/detail/c_ctype.hpp b/3party/boost/boost/xpressive/traits/detail/c_ctype.hpp
index 40788c46cd..e56a506c2c 100644
--- a/3party/boost/boost/xpressive/traits/detail/c_ctype.hpp
+++ b/3party/boost/boost/xpressive/traits/detail/c_ctype.hpp
@@ -9,7 +9,7 @@
#define BOOST_XPRESSIVE_TRAITS_DETAIL_C_CTYPE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/traits/null_regex_traits.hpp b/3party/boost/boost/xpressive/traits/null_regex_traits.hpp
index 6892e88206..bb64c5f67e 100644
--- a/3party/boost/boost/xpressive/traits/null_regex_traits.hpp
+++ b/3party/boost/boost/xpressive/traits/null_regex_traits.hpp
@@ -12,7 +12,7 @@
#define BOOST_XPRESSIVE_TRAITS_NULL_REGEX_TRAITS_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/xpressive.hpp b/3party/boost/boost/xpressive/xpressive.hpp
index 03021bed5b..3a7bbfe479 100644
--- a/3party/boost/boost/xpressive/xpressive.hpp
+++ b/3party/boost/boost/xpressive/xpressive.hpp
@@ -11,7 +11,7 @@
#define BOOST_XPRESSIVE_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/xpressive_dynamic.hpp b/3party/boost/boost/xpressive/xpressive_dynamic.hpp
index 6f0e4d0bad..18c7ff97e3 100644
--- a/3party/boost/boost/xpressive/xpressive_dynamic.hpp
+++ b/3party/boost/boost/xpressive/xpressive_dynamic.hpp
@@ -10,7 +10,7 @@
#define BOOST_XPRESSIVE_DYNAMIC_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/xpressive_fwd.hpp b/3party/boost/boost/xpressive/xpressive_fwd.hpp
index 8ae9035fe0..5babacfe49 100644
--- a/3party/boost/boost/xpressive/xpressive_fwd.hpp
+++ b/3party/boost/boost/xpressive/xpressive_fwd.hpp
@@ -10,7 +10,7 @@
#define BOOST_XPRESSIVE_XPRESSIVE_FWD_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
@@ -23,9 +23,6 @@
# define BOOST_PROTO_FUSION_V2
#endif
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-# error Sorry, xpressive requires a compiler that supports partial template specialization.
-#endif
#if defined(BOOST_NO_STD_LOCALE) & !defined(BOOST_XPRESSIVE_USE_C_TRAITS)
# define BOOST_XPRESSIVE_USE_C_TRAITS
diff --git a/3party/boost/boost/xpressive/xpressive_static.hpp b/3party/boost/boost/xpressive/xpressive_static.hpp
index e7695dfd55..eef6b04940 100644
--- a/3party/boost/boost/xpressive/xpressive_static.hpp
+++ b/3party/boost/boost/xpressive/xpressive_static.hpp
@@ -11,7 +11,7 @@
#define BOOST_XPRESSIVE_STATIC_HPP_EAN_10_04_2005
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif
diff --git a/3party/boost/boost/xpressive/xpressive_typeof.hpp b/3party/boost/boost/xpressive/xpressive_typeof.hpp
index 0be12986b9..2af87af26c 100644
--- a/3party/boost/boost/xpressive/xpressive_typeof.hpp
+++ b/3party/boost/boost/xpressive/xpressive_typeof.hpp
@@ -10,7 +10,7 @@
#define BOOST_XPRESSIVE_XPRESSIVE_TYPEOF_H
// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
# pragma once
#endif